diff --git a/README.md b/README.md index c85774b8..f0bb339e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ Build -------- ``` +$ cd thirdparty/carve-1.4.0/build +$ cmake ../ +$ make && make install + $ qmake -spec macx-xcode ``` \ No newline at end of file diff --git a/dust3d.pro b/dust3d.pro index 38a9bfc4..b7a2a8e5 100644 --- a/dust3d.pro +++ b/dust3d.pro @@ -42,5 +42,9 @@ SOURCES += src/main.cpp INCLUDEPATH += ../meshlite/include LIBS += -L../meshlite/target/debug -lmeshlite +INCLUDEPATH += thirdparty/carve-1.4.0/include +INCLUDEPATH += thirdparty/carve-1.4.0/build/include +LIBS += -Lthirdparty/carve-1.4.0/build/lib -lcarve + target.path = ./ INSTALLS += target \ No newline at end of file diff --git a/src/skeletoneditgraphicsview.cpp b/src/skeletoneditgraphicsview.cpp index 9dd6bdf2..e79ce62a 100644 --- a/src/skeletoneditgraphicsview.cpp +++ b/src/skeletoneditgraphicsview.cpp @@ -324,6 +324,7 @@ void SkeletonEditGraphicsView::setNextStartNodeItem(SkeletonEditNodeItem *item) m_nextStartNodeItem = item; if (m_nextStartNodeItem) m_nextStartNodeItem->setIsNextStartNode(true); + applyAddNodeMode(); } void SkeletonEditGraphicsView::updateBackgroundImage(const QImage &image) diff --git a/src/skeletontomesh.cpp b/src/skeletontomesh.cpp index 3490ef20..fc18aec0 100644 --- a/src/skeletontomesh.cpp +++ b/src/skeletontomesh.cpp @@ -3,8 +3,86 @@ #include "skeletoneditnodeitem.h" #include "skeletoneditedgeitem.h" +#if defined(HAVE_CONFIG_H) +# include +#endif +#include +#include +#include + // Modified from https://wiki.qt.io/QThreads_general_usage +#define MAX_VERTICES_PER_FACE 100 + +carve::poly::Polyhedron *makeCarveMeshFromMeshlite(void *meshlite, int meshId) +{ + carve::input::PolyhedronData data; + int vertexCount = meshlite_get_vertex_count(meshlite, meshId); + float *vertexPositions = new float[vertexCount * 3]; + meshlite_get_vertex_position_array(meshlite, meshId, vertexPositions, vertexCount * 3); + int offset = 0; + for (int i = 0; i < vertexCount; i++) { + data.addVertex(carve::geom::VECTOR( + vertexPositions[offset + 0], + vertexPositions[offset + 1], + vertexPositions[offset + 2])); + offset += 3; + } + int faceCount = meshlite_get_face_count(meshlite, meshId); + int *faceVertexNumAndIndices = new int[faceCount * MAX_VERTICES_PER_FACE]; + int filledLength = meshlite_get_face_index_array(meshlite, meshId, faceVertexNumAndIndices, faceCount * MAX_VERTICES_PER_FACE); + int i = 0; + while (i < filledLength) { + int num = faceVertexNumAndIndices[i++]; + std::vector faceIndices; + for (int j = 0; j < num; j++) { + int index = faceVertexNumAndIndices[i++]; + faceIndices.push_back(index); + } + data.addFace(faceIndices.begin(), faceIndices.end()); + } + delete[] faceVertexNumAndIndices; + delete[] vertexPositions; + return new carve::poly::Polyhedron(data.points, data.getFaceCount(), data.faceIndices); +} + +int makeMeshliteMeshFromCarve(void *meshlite, carve::poly::Polyhedron *polyhedron) +{ + int vertexCount = polyhedron->vertices.size(); + float *vertexPositions = new float[vertexCount * 3]; + int offset = 0; + std::map::vertex_t *, int> vertexIndexMap; + for (int i = 0; i < vertexCount; i++) { + auto vertex = &polyhedron->vertices[i]; + vertexPositions[offset++] = vertex->v.x; + vertexPositions[offset++] = vertex->v.y; + vertexPositions[offset++] = vertex->v.z; + vertexIndexMap[vertex] = i; + } + int faceCount = polyhedron->faces.size(); + int *faceVertexNumAndIndices = new int[faceCount * MAX_VERTICES_PER_FACE]; + offset = 0; + for (int i = 0; i < faceCount; i++) { + auto face = &polyhedron->faces[i]; + faceVertexNumAndIndices[offset++] = face->vertices.size(); + for (int j = 0; j < (int)face->vertices.size(); j++) { + faceVertexNumAndIndices[offset++] = vertexIndexMap[face->vertices[j]]; + } + } + int meshId = meshlite_build(meshlite, vertexPositions, vertexCount, faceVertexNumAndIndices, offset); + delete[] vertexPositions; + delete[] faceVertexNumAndIndices; + return meshId; +} + +carve::poly::Polyhedron *unionCarveMeshs(carve::poly::Polyhedron *first, + carve::poly::Polyhedron *second) +{ + carve::csg::CSG csg; + carve::poly::Polyhedron *result = csg.compute(first, second, carve::csg::CSG::UNION, NULL, carve::csg::CSG::CLASSIFY_EDGE); + return new carve::poly::Polyhedron(*result); +} + struct NodeItemInfo { int index; @@ -148,21 +226,30 @@ void SkeletonToMesh::process() group->meshId = meshlite_bmesh_generate_mesh(context, group->bmeshId, group->nodes[group->rootNode].bmeshNodeId); } - int unionMeshId = m_groups[0].meshId; + carve::poly::Polyhedron *unionPolyhedron = makeCarveMeshFromMeshlite(context, m_groups[0].meshId); for (size_t i = 1; i < m_groups.size(); i++) { - int newUnionMeshId = meshlite_union(context, m_groups[i].meshId, unionMeshId); - // TODO: destroy last unionMeshId - // ... ... - unionMeshId = newUnionMeshId; + carve::poly::Polyhedron *polyhedron = makeCarveMeshFromMeshlite(context, m_groups[i].meshId); + carve::poly::Polyhedron *newUnionPolyhedron = unionCarveMeshs(unionPolyhedron, polyhedron); + delete polyhedron; + delete unionPolyhedron; + unionPolyhedron = newUnionPolyhedron; + if (NULL == unionPolyhedron) { + break; + } } for (size_t i = 1; i < m_groups.size(); i++) { meshlite_bmesh_destroy(context, m_groups[i].bmeshId); } - int triangulate = meshlite_triangulate(context, unionMeshId); - meshlite_export(context, triangulate, "/Users/jeremy/testlib.obj"); - m_mesh = new Mesh(context, triangulate); + if (unionPolyhedron) { + int meshIdGeneratedFromCarve = makeMeshliteMeshFromCarve(context, unionPolyhedron); + delete unionPolyhedron; + + int triangulate = meshlite_triangulate(context, meshIdGeneratedFromCarve); + meshlite_export(context, triangulate, "/Users/jeremy/testlib.obj"); + m_mesh = new Mesh(context, triangulate); + } meshlite_destroy_context(context); emit finished(); } diff --git a/thirdparty/carve-1.4.0/.hgignore b/thirdparty/carve-1.4.0/.hgignore new file mode 100644 index 00000000..64352b0b --- /dev/null +++ b/thirdparty/carve-1.4.0/.hgignore @@ -0,0 +1,78 @@ +syntax: glob + +# backup files, etc. + +*~ +*.sw? + +# autotools generated + +aclocal.m4 +autom4te.cache/output.0 +autom4te.cache/output.1 +autom4te.cache/requests +autom4te.cache/traces.0 +autom4te.cache/traces.1 +config.log +config.status +configure +include/carve/config.h +include/carve/stamp-h2 +include/carve_config.h +include/carve_config.h.in +include/stamp-h1 +libtool + +# cmake generated + +CMakeFiles + +# debug info + +*.dSYM + +# regression test results + +regression/*/test_* + +# produced by compilation + +*.la +*.o +*.lo +*.Plo +*.a +*.Po +*.dylib +*.so +Makefile.in +Makefile + +.libs +.deps + +# generated executables + +src/convert +src/custom_collector +src/cutgraph +src/intersect +src/problem +src/test_aabb +src/test_aabb_tri +src/test_csg_interpolate +src/test_eigen +src/test_geom +src/test_hole_incorporate +src/test_interpolate +src/test_intersect +src/test_rescale +src/test_slice +src/test_slice_classify +src/test_spacetree +src/test_triangulate +src/tetrahedron +src/texture_example +src/triangulate +src/view + diff --git a/thirdparty/carve-1.4.0/.hgtags b/thirdparty/carve-1.4.0/.hgtags new file mode 100644 index 00000000..69238e84 --- /dev/null +++ b/thirdparty/carve-1.4.0/.hgtags @@ -0,0 +1 @@ +7a324ce473d5b2da82292cf48a6ab076a91234b1 rev-1.4.0 diff --git a/thirdparty/carve-1.4.0/AUTHORS b/thirdparty/carve-1.4.0/AUTHORS new file mode 100644 index 00000000..551acad2 --- /dev/null +++ b/thirdparty/carve-1.4.0/AUTHORS @@ -0,0 +1 @@ +Toby Sargeant diff --git a/thirdparty/carve-1.4.0/CMakeLists.txt b/thirdparty/carve-1.4.0/CMakeLists.txt new file mode 100644 index 00000000..915ffb03 --- /dev/null +++ b/thirdparty/carve-1.4.0/CMakeLists.txt @@ -0,0 +1,118 @@ +cmake_minimum_required(VERSION 2.6) + +project(carve) + +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +set(carve_VERSION_MAJOR 1) +set(carve_VERSION_MINOR 4) +set(carve_VERSION_PATCH 0) + +set(CARVE_VERSION ${carve_VERSION_MAJOR}.${carve_VERSION_MINOR}.${carve_VERSION_PATCH}) + +option(BUILD_SHARED_LIBS "Compile libcarve as shared" ON) +option(CARVE_WITH_GUI "Compile gui code" OFF) +option(CARVE_SYSTEM_BOOST "Compile with system installed boost" OFF) +option(CARVE_BOOST_COLLECTIONS "Compile with boost collections" OFF) +option(CARVE_DEBUG "Compile in debug code" OFF) +option(CARVE_DEBUG_WRITE_PLY_DATA "Write geometry output during debug" OFF) + +add_definitions(-DGTEST_USE_OWN_TR1_TUPLE) + +if(WIN32) + set(BUILD_SHARED_LIBS OFF) # until everything is exported + add_definitions(-D_USE_MATH_DEFINES) + add_definitions(-DNOMINMAX) +endif(WIN32) + +set(HAVE_TR1_UNORDERED_COLLECTIONS FALSE) +set(HAVE_STD_UNORDERED_COLLECTIONS FALSE) +set(HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS FALSE) + +set(HAVE_BOOST_UNORDERED_COLLECTIONS FALSE) + +if(CARVE_SYSTEM_BOOST) + find_package(BOOST 1.40) + if(Boost_FOUND) + include_directories(${Boost_INCLUDE_DIRS}) + message(STATUS "Using system boost") + else(Boost_FOUND) + set(CARVE_SYSTEM_BOOST OFF) + endif(Boost_FOUND) +endif(CARVE_SYSTEM_BOOST) + +if(CARVE_BOOST_COLLECTIONS) + set(HAVE_BOOST_UNORDERED_COLLECTIONS TRUE) + +else(CARVE_BOOST_COLLECTIONS) + # attempt to work out which unordered collection implementation we can use + try_compile(_HAVE_STD_UNORDERED_COLLECTIONS + ${CMAKE_BINARY_DIR} + "${carve_SOURCE_DIR}/cmake/test_std_unordered.cpp" + OUTPUT_VARIABLE OUTPUT) + try_compile(_HAVE_TR1_UNORDERED_COLLECTIONS + ${CMAKE_BINARY_DIR} + "${carve_SOURCE_DIR}/cmake/test_tr1_unordered.cpp" + OUTPUT_VARIABLE OUTPUT) + try_compile(_HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS + ${CMAKE_BINARY_DIR} + "${carve_SOURCE_DIR}/cmake/test_libstdcpp_unordered.cpp" + OUTPUT_VARIABLE OUTPUT) + + if(_HAVE_STD_UNORDERED_COLLECTIONS) + set(HAVE_STD_UNORDERED_COLLECTIONS TRUE) + message(STATUS "Using std::unordered_map") + elseif(_HAVE_TR1_UNORDERED_COLLECTIONS) + set(HAVE_TR1_UNORDERED_COLLECTIONS TRUE) + message(STATUS "Using tr1::unordered_map") + elseif(_HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS) + set(HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS TRUE) + message(STATUS "Using __gnu_cxx::unordered_map ") + endif(_HAVE_STD_UNORDERED_COLLECTIONS) + +endif(CARVE_BOOST_COLLECTIONS) + +if(CARVE_WITH_GUI) + find_package(OpenGL) + find_package(GLUT) + + if(NOT OPENGL_FOUND) + message(WARNING "Unable to locate OpenGL") + set(CARVE_WITH_GUI OFF) + + elseif(NOT GLUT_FOUND) + message(WARNING "Unable to locate GLUT") + set(CARVE_WITH_GUI OFF) + + else(OPENGL_FOUND AND GLUT_FOUND) + message(STATUS "Found OpenGL and GLUT") + include_directories(${OPENGL_INCLUDE_DIR}) + include_directories(${GLUT_INCLUDE_DIR}) + if(WIN32) + add_definitions(-DGLUI_NO_LIB_PRAGMA) + add_definitions(-DGLUI_USE_STATIC_LIB) + add_definitions(-DGLEW_STATIC) + endif(WIN32) + add_subdirectory(external/GLEW) + add_subdirectory(external/GLUI) + + endif(NOT OPENGL_FOUND) + +endif(CARVE_WITH_GUI) + +add_subdirectory(external/GLOOP) +add_subdirectory(external/gtest-1.5.0) + +configure_file ( + "${carve_SOURCE_DIR}/include/carve/cmake-config.h.in" + "${carve_BINARY_DIR}/include/carve/config.h" +) +include_directories(${carve_BINARY_DIR}/include) + +add_subdirectory(lib) +add_subdirectory(include) +add_subdirectory(common) +add_subdirectory(src) +add_subdirectory(examples) +add_subdirectory(tests) diff --git a/thirdparty/carve-1.4.0/ChangeLog b/thirdparty/carve-1.4.0/ChangeLog new file mode 100644 index 00000000..33337351 --- /dev/null +++ b/thirdparty/carve-1.4.0/ChangeLog @@ -0,0 +1,3 @@ +2009-06-01 Tobias Sargeant + + * Carve: initial GPL2 release. diff --git a/thirdparty/carve-1.4.0/INSTALL b/thirdparty/carve-1.4.0/INSTALL new file mode 100644 index 00000000..54caf7c1 --- /dev/null +++ b/thirdparty/carve-1.4.0/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/thirdparty/carve-1.4.0/LICENSE.GPL2 b/thirdparty/carve-1.4.0/LICENSE.GPL2 new file mode 100644 index 00000000..792acb92 --- /dev/null +++ b/thirdparty/carve-1.4.0/LICENSE.GPL2 @@ -0,0 +1,361 @@ + GNU GENERAL PUBLIC LICENSE + + The Qt GUI Toolkit is Copyright (C) 1994-2008 Trolltech ASA. + + You may use, distribute and copy the Qt GUI Toolkit under the terms of + GNU General Public License version 2, which is displayed below. + +------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- + +In addition, as a special exception, Trolltech gives permission to link the +code of its release of Qt with the OpenSSL project's "OpenSSL" library (or +modified versions of it that use the same license as the "OpenSSL" +library), and distribute the linked executables. You must comply with the GNU +General Public License version 2 or the GNU General Public License version 3 +in all respects for all of the code used other than the "OpenSSL" code. If +you modify this file, you may extend this exception to your version of the +file, but you are not obligated to do so. If you do not wish to do so, +delete this exception statement from your version of this file. diff --git a/thirdparty/carve-1.4.0/Makefile.am b/thirdparty/carve-1.4.0/Makefile.am new file mode 100644 index 00000000..5bb4e2c4 --- /dev/null +++ b/thirdparty/carve-1.4.0/Makefile.am @@ -0,0 +1,12 @@ +ACLOCAL_AMFLAGS=-I m4 +SUBDIRS=lib include external common src tests examples +EXTRA_DIST= win32/Carve.sln win32/carvelib/carvelib.vcproj \ + win32/glew/glew.vcproj win32/gloop/gloop.vcproj \ + win32/glui/glui.vcproj win32/intersect/intersect.vcproj \ + win32/texture_example/texture_example.vcproj \ + win32/fileformats/fileformats.vcproj win32/view/view.vcproj \ + data/coneup.ply data/cylinderx.ply data/cylindery.ply \ + data/cylinderz.ply data/ico.ply data/ico5.ply data/shells.ply \ + data/sphere.ply data/sphere_one_point_moved.ply m4/ax_boost.m4 \ + m4/ax_boost_base.m4 + diff --git a/thirdparty/carve-1.4.0/NEWS b/thirdparty/carve-1.4.0/NEWS new file mode 100644 index 00000000..e69de29b diff --git a/thirdparty/carve-1.4.0/README b/thirdparty/carve-1.4.0/README new file mode 100644 index 00000000..e69de29b diff --git a/thirdparty/carve-1.4.0/acinclude.m4 b/thirdparty/carve-1.4.0/acinclude.m4 new file mode 100644 index 00000000..6cd9f6d2 --- /dev/null +++ b/thirdparty/carve-1.4.0/acinclude.m4 @@ -0,0 +1,216 @@ +AC_DEFUN([CARVE_CHECK_OPENGL],[ + have_GL=no + have_GLU=no + have_glut=no + + case "$host" in + *darwin*) + if test x"${with_x}" != xyes; then + AC_MSG_NOTICE([Using OSX frameworks for GL]) + GL_CFLAGS="" + GL_LIBS="-framework OpenGL" + + GLUT_CFLAGS="" + GLUT_LIBS="-framework GLUT" + + have_GL=yes + have_GLU=yes + have_glut=yes + else + AC_MSG_NOTICE([Not using OSX frameworks for GL]) + fi + ;; + esac + + if test x"$have_GL" = xno; then + AC_PATH_XTRA + + AC_LANG_SAVE + AC_LANG_C + + GL_CFLAGS="" + GL_LIBS="" + + GLUT_CFLAGS="" + GLUT_LIBS="" + + GL_X_LIBS="" + + if test x"$no_x" != xyes; then + GL_CFLAGS="$X_CFLAGS" + GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS" + fi + + GL_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$GL_CFLAGS" + + GL_save_LIBS="$LIBS" + LIBS="$GL_X_LIBS" + + AC_CHECK_LIB([GL], [glAccum], have_GL=yes, have_GL=no) + AC_CHECK_LIB([GLU], [gluBeginCurve], have_GLU=yes, have_GLU=no) + AC_CHECK_LIB([glut], [glutInit], have_glut=yes, have_glut=no) + + if test x"$have_GL" = xno; then + GL_LIBS="-lGL" + fi + + if test x"$have_GLU" = xyes; then + GL_LIBS="$GL_LIBS -lGLU" + fi + + if test x"$have_glut" = xyes; then + GLUT_LIBS="-lglut" + fi + + GL_X_LIBS="" + + LIBS="$GL_save_LIBS" + CPPFLAGS="$GL_save_CPPFLAGS" + + AC_LANG_RESTORE + fi +]) + +AC_DEFUN([CARVE_CHECK_GLUI],[ +AC_ARG_WITH(glui-prefix, [ --with-glui-prefix=PFX Prefix where GLUI is installed (optional)], + glui_prefix="$withval", glui_prefix="") +AC_ARG_WITH(glui-includes,[ --with-glui-includes=PATH Path to GLUI includes (optional)], + glui_includes="$withval", glui_includes="") +AC_ARG_WITH(glui-libs, [ --with-glui-libs=PATH Path to GLUI libs (optional)], + glui_libs="$withval", glui_libs="") + + if test x"$glui_prefix" != x""; then + glui_libs="$glui_prefix/lib" + glui_includes="$glui_prefix/include" + fi + + GLUI_CFLAGS="" + if test x"$glui_includes" != x""; then + GLUI_CFLAGS="-I$glui_includes" + fi + + GLUI_LDFLAGS="" + if test x"$glui_libs" != x""; then + GLUI_LDFLAGS="-L$glui_libs" + fi + + GLUI_LIBS="-lglui" + + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + GLUI_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GLUI_CFLAGS" + + GLUI_save_LIBS="$LIBS" + LIBS="$LIBS $GLUI_LIBS" + + GLUI_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $GLUI_LDFLAGS" + + have_GLUI=no + AC_CHECK_LIB(glui, main, [AC_CHECK_HEADER(GL/glui.h, [have_GLUI=yes])]) + + LDFLAGS="$GLUI_save_LDFLAGS" + LIBS="$GLUI_save_LIBS" + CPPFLAGS="$GLUI_save_CPPFLAGS" + + AC_LANG_RESTORE +]) + +AC_DEFUN([CARVE_CHECK_GLEW],[ + AC_ARG_WITH(glew-prefix, [ --with-glew-prefix=PFX Prefix where GLEW is installed (optional)], + glew_prefix="$withval", glew_prefix="") + AC_ARG_WITH(glew-includes,[ --with-glew-includes=PATH Path to GLEW includes (optional)], + glew_includes="$withval", glew_includes="") + AC_ARG_WITH(glew-libs, [ --with-glew-libs=PATH Path to GLEW libs (optional)], + glew_libs="$withval", glew_libs="") + + if test x"$glew_prefix" != x""; then + glew_libs="$glew_prefix/lib" + glew_includes="$glew_prefix/include" + fi + + GLEW_CFLAGS="" + if test x"$glew_includes" != x""; then + GLEW_CFLAGS="-I$glew_includes" + fi + + GLEW_LDFLAGS="" + if test x"$glew_libs" != x""; then + GLEW_LDFLAGS="-L$glew_libs" + fi + + GLEW_LIBS="-lglew" + + AC_LANG_SAVE + AC_LANG_C + + GLEW_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GLEW_CFLAGS" + + GLEW_save_LIBS="$LIBS" + LIBS="$LIBS $GLEW_LIBS" + + GLEW_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $GLEW_LDFLAGS" + + have_GLEW=no + AC_CHECK_LIB(glew, glewInit, [AC_CHECK_HEADER(GL/glew.h, [have_GLEW=yes])]) + + LDFLAGS="$GLEW_save_LDFLAGS" + LIBS="$GLEW_save_LIBS" + CPPFLAGS="$GLEW_save_CPPFLAGS" + + AC_LANG_RESTORE +]) + +AC_DEFUN([CARVE_CHECK_GLOOP],[ + AC_ARG_WITH(gloop-prefix, [ --with-gloop-prefix=PFX Prefix where GLOOP is installed (optional)], + gloop_prefix="$withval", gloop_prefix="") + AC_ARG_WITH(gloop-includes,[ --with-gloop-includes=PATH Path to GLOOP includes (optional)], + gloop_includes="$withval", gloop_includes="") + AC_ARG_WITH(gloop-libs, [ --with-gloop-libs=PATH Path to GLOOP libs (optional)], + gloop_libs="$withval", gloop_libs="") + + if test x"$gloop_prefix" != x""; then + gloop_libs="$gloop_prefix/lib" + gloop_includes="$gloop_prefix/include" + fi + + GLOOP_CFLAGS="" + if test x"$gloop_includes" != x""; then + GLOOP_CFLAGS="-I$gloop_includes" + fi + + GLOOP_LDFLAGS="" + if test x"$gloop_libs" != x""; then + GLOOP_LDFLAGS="-L$gloop_libs" + fi + + GLOOP_LIBS="-lgloop" + GLOOP_MODEL_LIBS="-lgloop-model" + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + GLOOP_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GLOOP_CFLAGS" + + GLOOP_save_LIBS="$LIBS" + LIBS="$LIBS $GLOOP_LIBS $GLOOP_MODEL_LIBS" + + GLOOP_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $GLOOP_LDFLAGS" + + have_gloop=no + AC_CHECK_HEADERS(gloop/gloop.hpp, [AC_CHECK_LIB(gloop, main, have_gloop=yes)]) + + LDFLAGS="$GLOOP_save_LDFLAGS" + LIBS="$GLOOP_save_LIBS" + CPPFLAGS="$GLOOP_save_CPPFLAGS" + + AC_LANG_RESTORE +]) diff --git a/thirdparty/carve-1.4.0/autogen.sh b/thirdparty/carve-1.4.0/autogen.sh new file mode 100755 index 00000000..5428c41d --- /dev/null +++ b/thirdparty/carve-1.4.0/autogen.sh @@ -0,0 +1,6 @@ +#!/bin/sh +aclocal -I m4 +autoheader +libtoolize -f -c --automake +automake --foreign -c -a +autoconf diff --git a/thirdparty/carve-1.4.0/build/autoconf/compile b/thirdparty/carve-1.4.0/build/autoconf/compile new file mode 100755 index 00000000..9bb997a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/compile @@ -0,0 +1,99 @@ +#! /bin/sh + +# Wrapper for compilers which do not understand `-c -o'. + +# Copyright 1999, 2000 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Usage: +# compile PROGRAM [ARGS]... +# `-o FOO.o' is removed from the args passed to the actual compile. + +prog=$1 +shift + +ofile= +cfile= +args= +while test $# -gt 0; do + case "$1" in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we do something ugly here. + ofile=$2 + shift + case "$ofile" in + *.o | *.obj) + ;; + *) + args="$args -o $ofile" + ofile= + ;; + esac + ;; + *.c) + cfile=$1 + args="$args $1" + ;; + *) + args="$args $1" + ;; + esac + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$prog" $args +fi + +# Name of file we expect compiler to create. +cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir $lockdir > /dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir $lockdir; exit 1" 1 2 15 + +# Run the compile. +"$prog" $args +status=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +fi + +rmdir $lockdir +exit $status diff --git a/thirdparty/carve-1.4.0/build/autoconf/config.guess b/thirdparty/carve-1.4.0/build/autoconf/config.guess new file mode 100755 index 00000000..f32079ab --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/config.guess @@ -0,0 +1,1526 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/thirdparty/carve-1.4.0/build/autoconf/config.sub b/thirdparty/carve-1.4.0/build/autoconf/config.sub new file mode 100755 index 00000000..6759825a --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/config.sub @@ -0,0 +1,1658 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-16' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/thirdparty/carve-1.4.0/build/autoconf/depcomp b/thirdparty/carve-1.4.0/build/autoconf/depcomp new file mode 100755 index 00000000..edb5d38e --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/depcomp @@ -0,0 +1,479 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/thirdparty/carve-1.4.0/build/autoconf/install-sh b/thirdparty/carve-1.4.0/build/autoconf/install-sh new file mode 100755 index 00000000..6ce63b9f --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/thirdparty/carve-1.4.0/build/autoconf/ltmain.sh b/thirdparty/carve-1.4.0/build/autoconf/ltmain.sh new file mode 100644 index 00000000..27d498a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/ltmain.sh @@ -0,0 +1,6956 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.26 +TIMESTAMP=" (1.1220.2.492 2008/01/30 06:40:56)" + +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +duplicate_deps=no +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + $SED -n -e '1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case "$@ " in + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + extracted_serial=`expr $extracted_serial + 1` + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +disable_libs=no + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + echo "\ +$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP + +Copyright (C) 2008 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) + prevopt="--tag" + prev=tag + preserve_args="$preserve_args --tag" + ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +case $disable_libs in +no) + ;; +shared) + build_libtool_libs=no + build_old_libs=yes + ;; +static) + build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` + ;; +esac + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, and some SunOS ksh mistreat backslash-escaping + # in scan sets (worked around with variable expansion), + # and furthermore cannot handle '|' '&' '(' ')' in scan sets + # at all, so we specify them separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.[fF][09]?) xform=[fF][09]. ;; + *.for) xform=for ;; + *.java) xform=java ;; + *.obj) xform=obj ;; + *.sx) xform=sx ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` + case $qlibobj in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qlibobj="\"$qlibobj\"" ;; + esac + test "X$libobj" != "X$qlibobj" \ + && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo "$srcfile" > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` + case $qsrcfile in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qsrcfile="\"$qsrcfile\"" ;; + esac + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + darwin_framework|darwin_framework_skip) + test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework|-arch|-isysroot) + case " $CC " in + *" ${arg} ${1} "* | *" ${arg} ${1} "*) + prev=darwin_framework_skip ;; + *) compiler_flags="$compiler_flags $arg" + prev=darwin_framework ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + notinst_path="$notinst_path $dir" + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + -model) + compile_command="$compile_command $arg" + compiler_flags="$compiler_flags $arg" + finalize_command="$finalize_command $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -module) + module=yes + continue + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m* pass through architecture-specific compiler args for GCC + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then + exit $exit_status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + if eval $echo \"$deplib\" 2>/dev/null \ + | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $absdir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes ; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | + $EGREP ": [^:]* bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$deplibdir/$depdepl" ; then + depdepl="$deplibdir/$depdepl" + elif test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + else + # Can't find it, oh well... + depdepl= + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + case " $deplibs" in + *\ -l* | *\ -L*) + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; + esac + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + major=`expr $current - $age` + else + major=`expr $current - $age + 1` + fi + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name=`expr $a_deplib : '-l\(.*\)'` + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + case $archive_cmds in + *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; + *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; + esac + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$echo "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$output_la-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadable object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + case " $deplibs" in + *\ -l* | *\ -L*) + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; + esac + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + else + $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +" + + case $host in + *cygwin* | *mingw* ) + $echo >> "$output_objdir/$dlsyms" "\ +/* DATA imports from DLLs on WIN32 can't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs */ +struct { +" + ;; + * ) + $echo >> "$output_objdir/$dlsyms" "\ +const struct { +" + ;; + esac + + + $echo >> "$output_objdir/$dlsyms" "\ + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + case $host in + *cygwin* | *mingw* ) + if test -f "$output_objdir/${outputname}.def" ; then + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + else + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + fi + ;; + * ) + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + ;; + esac + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + exit_status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $exit_status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + output_name=`basename $output` + output_path=`dirname $output` + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +/* -DDEBUG is fairly common in CFLAGS. */ +#undef DEBUG +#if defined DEBUGWRAPPER +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) +#else +# define DEBUG(format, ...) +#endif + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +const char * base_name (const char *name); +char * find_executable(const char *wrapper); +int check_executable(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + DEBUG("(main) argv[0] : %s\n",argv[0]); + DEBUG("(main) program_name : %s\n",program_name); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = find_executable(argv[0]); + if (newargz[1] == NULL) + lt_fatal("Couldn't find %s", argv[0]); + DEBUG("(main) found exe at : %s\n",newargz[1]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; + + for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" + return 127; +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char)name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable(const char * path) +{ + struct stat st; + + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) && + ( + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ +#if defined (S_IXOTH) + ((st.st_mode & S_IXOTH) == S_IXOTH) || +#endif +#if defined (S_IXGRP) + ((st.st_mode & S_IXGRP) == S_IXGRP) || +#endif + ((st.st_mode & S_IXUSR) == S_IXUSR)) + ) + return 1; + else + return 0; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise */ +char * +find_executable (const char* wrapper) +{ + int has_slash = 0; + const char* p; + const char* p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char* concat_name; + + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char* path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char* q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR(*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + return NULL; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \$*\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$gentop"; then + exit $exit_status + fi + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) prev=$arg ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` + else + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir=`func_mktempdir` + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "X----------------------------------------------------------------------" | $Xsed + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $? + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +disable_libs=shared +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +disable_libs=static +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/thirdparty/carve-1.4.0/build/autoconf/missing b/thirdparty/carve-1.4.0/build/autoconf/missing new file mode 100755 index 00000000..fc54c64e --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/thirdparty/carve-1.4.0/build/autoconf/mkinstalldirs b/thirdparty/carve-1.4.0/build/autoconf/mkinstalldirs new file mode 100755 index 00000000..d2d5f21b --- /dev/null +++ b/thirdparty/carve-1.4.0/build/autoconf/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/thirdparty/carve-1.4.0/cmake/test_libstdcpp_unordered.cpp b/thirdparty/carve-1.4.0/cmake/test_libstdcpp_unordered.cpp new file mode 100644 index 00000000..8ff2fd5c --- /dev/null +++ b/thirdparty/carve-1.4.0/cmake/test_libstdcpp_unordered.cpp @@ -0,0 +1,9 @@ +#include +#include + +int main(int argc, char **argv) { + const __gnu_cxx::hash_map a; + const __gnu_cxx::hash_set b; + a.find(1); + b.find(1); +} diff --git a/thirdparty/carve-1.4.0/cmake/test_std_unordered.cpp b/thirdparty/carve-1.4.0/cmake/test_std_unordered.cpp new file mode 100644 index 00000000..4c2cfe55 --- /dev/null +++ b/thirdparty/carve-1.4.0/cmake/test_std_unordered.cpp @@ -0,0 +1,9 @@ +#include +#include + +int main(int argc, char **argv) { + const std::unordered_map a; + const std::unordered_set b; + a.find(1); + b.find(1); +} diff --git a/thirdparty/carve-1.4.0/cmake/test_tr1_unordered.cpp b/thirdparty/carve-1.4.0/cmake/test_tr1_unordered.cpp new file mode 100644 index 00000000..29e958e0 --- /dev/null +++ b/thirdparty/carve-1.4.0/cmake/test_tr1_unordered.cpp @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char **argv) { + const std::tr1::unordered_map a; + const std::tr1::unordered_set b; + // make sure that the tr1 const find_node bug is fixed. + a.find(1); + b.find(1); +} diff --git a/thirdparty/carve-1.4.0/common/CMakeLists.txt b/thirdparty/carve-1.4.0/common/CMakeLists.txt new file mode 100644 index 00000000..0045c938 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/CMakeLists.txt @@ -0,0 +1,10 @@ +include_directories("${carve_SOURCE_DIR}/include") +include_directories("${carve_SOURCE_DIR}/external/GLOOP/include") +include_directories("${carve_SOURCE_DIR}/external/GLEW/include") +include_directories("${carve_SOURCE_DIR}/external/GLUI/include") + +add_library(carve_fileformats STATIC read_ply.cpp write_ply.cpp) +add_library(carve_misc STATIC geometry.cpp) +if(CARVE_WITH_GUI) + add_library(carve_ui STATIC geom_draw.cpp scene.cpp) +endif(CARVE_WITH_GUI) diff --git a/thirdparty/carve-1.4.0/common/Makefile.am b/thirdparty/carve-1.4.0/common/Makefile.am new file mode 100644 index 00000000..0ffcb8d1 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/Makefile.am @@ -0,0 +1,29 @@ +noinst_LTLIBRARIES = libcarve_fileformats.la libcarve_misc.la + +noinst_HEADERS = geom_draw.hpp geometry.hpp opts.hpp read_ply.hpp rgb.hpp scene.hpp stringfuncs.hpp write_ply.hpp + +CPPFLAGS += -I$(top_srcdir)/include @GL_CFLAGS@ @GLUT_CFLAGS@ +CPPFLAGS += -I$(top_srcdir)/external/GLOOP/include + + + +libcarve_fileformats_la_SOURCES = read_ply.cpp write_ply.cpp +libcarve_fileformats_la_LIBADD = $(top_srcdir)/external/GLOOP/libgloop-model.la +libcarve_fileformats_la_CPPFLAGS = -I$(top_srcdir)/external/GLOOP/include + + + +libcarve_misc_la_SOURCES=geometry.cpp + + + +if with_GUI + CPPFLAGS += -I$(top_srcdir)/external/GLEW/include + CPPFLAGS += -I$(top_srcdir)/external/GLUI/include + noinst_LTLIBRARIES += libcarve_ui.la +endif + + + +libcarve_ui_la_SOURCES = geom_draw.cpp scene.cpp +libcarve_ui_la_LIBADD = $(top_srcdir)/external/GLUI/libglui.la diff --git a/thirdparty/carve-1.4.0/common/geom_draw.cpp b/thirdparty/carve-1.4.0/common/geom_draw.cpp new file mode 100644 index 00000000..b479cb90 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/geom_draw.cpp @@ -0,0 +1,615 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include "geom_draw.hpp" + +#include + +#include +#include +#include + +#include +#include + +#include + +#if defined(__GNUC__) +#define __stdcall +#endif + +#if defined(GLU_TESS_CALLBACK_VARARGS) + typedef GLvoid (_stdcall *GLUTessCallback)(...); +#else + typedef void (__stdcall *GLUTessCallback)(); +#endif + +carve::geom3d::Vector g_translation; +double g_scale = 1.0; + +static inline void glVertex(double x, double y, double z) { + glVertex3f(g_scale * (x + g_translation.x), + g_scale * (y + g_translation.y), + g_scale * (z + g_translation.z)); +} + +static inline void glVertex(const carve::geom3d::Vector *v) { + glVertex3f(g_scale * (v->x + g_translation.x), + g_scale * (v->y + g_translation.y), + g_scale * (v->z + g_translation.z)); +} + +static inline void glVertex(const carve::geom3d::Vector &v) { + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); +} + +static inline void glVertex(const carve::poly::Vertex<3> *v) { + glVertex(v->v); +} + +static inline void glVertex(const carve::poly::Vertex<3> &v) { + glVertex(v.v); +} + +class DebugHooks : public carve::csg::IntersectDebugHooks { +public: + virtual void drawIntersections(const carve::csg::VertexIntersections &vint); + + virtual void drawOctree(const carve::csg::Octree &o); + + virtual void drawPoint(const carve::geom3d::Vector *v, + float r, float g, float b, float a, + float rad); + + virtual void drawEdge(const carve::geom3d::Vector *v1, const carve::geom3d::Vector *v2, + float rA, float gA, float bA, float aA, + float rB, float gB, float bB, float aB, + float thickness = 1.0); + + virtual void drawFaceLoopWireframe(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float r, float g, float b, float a, + bool inset = true); + + virtual void drawFaceLoop(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float r, float g, float b, float a, + bool offset = true, + bool lit = true); + + virtual void drawFaceLoop2(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float rF, float gF, float bF, float aF, + float rB, float gB, float bB, float aB, + bool offset = true, + bool lit = true); +}; + +void DebugHooks::drawPoint(const carve::geom3d::Vector *v, + float r, float g, float b, float a, + float rad) { + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + glEnable(GL_POINT_SMOOTH); + glPointSize(rad); + glBegin(GL_POINTS); + glColor4f(r, g, b, a); + glVertex(v); + glEnd(); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); +} + +void DebugHooks::drawEdge(const carve::geom3d::Vector *v1, const carve::geom3d::Vector *v2, + float rA, float gA, float bA, float aA, + float rB, float gB, float bB, float aB, + float thickness) { + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + glLineWidth(thickness); + glEnable(GL_LINE_SMOOTH); + + glBegin(GL_LINES); + + glColor4f(rA, gA, bA, aA); + glVertex(v1); + + glColor4f(rB, gB, bB, aB); + glVertex(v2); + + glEnd(); + + glDisable(GL_LINE_SMOOTH); + glLineWidth(1.0); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); +} + +void DebugHooks::drawIntersections(const carve::csg::VertexIntersections &vint) { + glEnable(GL_POINT_SMOOTH); + glDisable(GL_DEPTH_TEST); + for (carve::csg::VertexIntersections::const_iterator + i = vint.begin(), e = vint.end(); + i != e; + ++i) { + float sz = 4.0 + (*i).second.size() * 3.0; + for (carve::csg::VertexIntersections::mapped_type::const_iterator + j = (*i).second.begin(), je = (*i).second.end(); j != je; ++j) { + glPointSize(sz); + sz -= 3.0; + switch ((*j).first.obtype | (*j).second.obtype) { + case 0: glColor4f(0,0,0,1); break; + case 1: glColor4f(0,0,1,1); break; // VERTEX - VERTEX + case 2: glColor4f(0,1,1,1); break; // EDGE - EDGE + case 3: glColor4f(1,0,0,1); break; // EDGE - VERTEX + case 4: glColor4f(0,0,0,1); break; + case 5: glColor4f(1,1,0,1); break; // FACE - VERTEX + case 6: glColor4f(0,1,0,1); break; // FACE - EDGE + case 7: glColor4f(0,0,0,1); break; + } + glBegin(GL_POINTS); + glVertex((*i).first); + glEnd(); + } + } + glEnable(GL_DEPTH_TEST); +} + +void drawCube(const carve::geom3d::Vector &a, const carve::geom3d::Vector &b) { + glBegin(GL_QUADS); + glNormal3f(0,0,-1); + glVertex(a.x, a.y, a.z); + glVertex(b.x, a.y, a.z); + glVertex(b.x, b.y, a.z); + glVertex(a.x, b.y, a.z); + + glNormal3f(0,0,1); + glVertex(a.x, b.y, b.z); + glVertex(b.x, b.y, b.z); + glVertex(b.x, a.y, b.z); + glVertex(a.x, a.y, b.z); + + glNormal3f(-1,0,0); + glVertex(a.x, a.y, a.z); + glVertex(a.x, b.y, a.z); + glVertex(a.x, b.y, b.z); + glVertex(a.x, a.y, b.z); + + glNormal3f(1,0,0); + glVertex(b.x, a.y, b.z); + glVertex(b.x, b.y, b.z); + glVertex(b.x, b.y, a.z); + glVertex(b.x, a.y, a.z); + + glNormal3f(0,-1,0); + glVertex(a.x, a.y, a.z); + glVertex(b.x, a.y, a.z); + glVertex(b.x, a.y, b.z); + glVertex(a.x, a.y, b.z); + + glNormal3f(0,1,0); + + glVertex(a.x, b.y, b.z); + glVertex(b.x, b.y, b.z); + glVertex(b.x, b.y, a.z); + glVertex(a.x, b.y, a.z); + + glEnd(); +} + +static void drawCell(int level, carve::csg::Octree::Node *node) { + // we only want to draw leaf nodes + if (!node->hasChildren() && node->hasGeometry()) { + glColor3f(1,0,0); + drawCube(node->min, node->max); + } +} + +void drawOctree(const carve::csg::Octree &o) { + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glDisable(GL_CULL_FACE); + + o.iterateNodes(&drawCell); + + glEnable(GL_LIGHTING); +} + +void DebugHooks::drawOctree(const carve::csg::Octree &o) { + ::drawOctree(o); +} + +static void __stdcall _faceBegin(GLenum type, void *data) { + carve::poly::Face<3> *face = static_cast *>(data); + glBegin(type); + glNormal3f(face->plane_eqn.N.x, face->plane_eqn.N.y, face->plane_eqn.N.z); +} + +static void __stdcall _faceVertex(void *vertex_data, void *data) { + std::pair &vd(*static_cast *>(vertex_data)); + glColor4f(vd.second.r, vd.second.g, vd.second.b, vd.second.a); + glVertex3f(vd.first.x, vd.first.y, vd.first.z); +} + +static void __stdcall _faceEnd(void *data) { + glEnd(); +} + +void drawColourFace(carve::poly::Face<3> *face, const std::vector &vc, bool offset) { + if (offset) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.5, 0.5); + } + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + GLUtesselator *tess = gluNewTess(); + + gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (GLUTessCallback)_faceBegin); + gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (GLUTessCallback)_faceVertex); + gluTessCallback(tess, GLU_TESS_END_DATA, (GLUTessCallback)_faceEnd); + + gluTessBeginPolygon(tess, (void *)face); + gluTessBeginContour(tess); + + std::vector > v; + v.resize(face->nVertices()); + for (size_t i = 0, l = face->nVertices(); i != l; ++i) { + v[i] = std::make_pair(g_scale * (face->vertex(i)->v + g_translation), vc[i]); + gluTessVertex(tess, (GLdouble *)v[i].first.v, (GLvoid *)&v[i]); + } + + gluTessEndContour(tess); + gluTessEndPolygon(tess); + + gluDeleteTess(tess); + + if (offset) { + glDisable(GL_POLYGON_OFFSET_FILL); + } +} + +void drawFace(carve::poly::Face<3> *face, cRGBA fc, bool offset) { + if (offset) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.5, 0.5); + } + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + GLUtesselator *tess = gluNewTess(); + + gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (GLUTessCallback)_faceBegin); + gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (GLUTessCallback)_faceVertex); + gluTessCallback(tess, GLU_TESS_END_DATA, (GLUTessCallback)_faceEnd); + + gluTessBeginPolygon(tess, (void *)face); + gluTessBeginContour(tess); + + std::vector > v; + v.resize(face->nVertices()); + for (size_t i = 0, l = face->nVertices(); i != l; ++i) { + v[i] = std::make_pair(g_scale * (face->vertex(i)->v + g_translation), fc); + gluTessVertex(tess, (GLdouble *)v[i].first.v, (GLvoid *)&v[i]); + } + + gluTessEndContour(tess); + gluTessEndPolygon(tess); + + gluDeleteTess(tess); + + if (offset) { + glDisable(GL_POLYGON_OFFSET_FILL); + } +} + + +void drawFaceWireframe(carve::poly::Face<3> *face, bool normal, float r, float g, float b) { + glDisable(GL_LIGHTING); + glDepthMask(GL_FALSE); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glDisable(GL_CULL_FACE); + + glColor4f(r, g, b ,1.0); + glBegin(GL_POLYGON); + glColor4f(r, g, b, 0.1f); + for (size_t i = 0, l = face->nVertices(); i != l; ++i) { + glVertex(face->vertex(i)); + } + glEnd(); + + glDisable(GL_DEPTH_TEST); + + glColor4f(r, g, b ,0.01); + glBegin(GL_POLYGON); + glColor4f(r, g, b, 0.01f); + for (size_t i = 0, l = face->nVertices(); i != l; ++i) { + glVertex(face->vertex(i)); + } + glEnd(); + + glLineWidth(3.0f); + glColor4f(1.0, 0.0, 0.0, 1.0); + glBegin(GL_LINES); + for (size_t i = 0, l = face->nEdges(); i != l; ++i) { + if (static_cast(face->owner)->connectedFace(face, face->edge(i)) == NULL) { + glVertex(face->edge(i)->v1); + glVertex(face->edge(i)->v2); + } + } + glEnd(); + glLineWidth(1.0f); + + glEnable(GL_DEPTH_TEST); + + if (normal) { + glBegin(GL_LINES); + glColor4f(1.0, 1.0, 0.0, 1.0); + glVertex(face->centroid()); + glColor4f(1.0, 1.0, 0.0, 0.0); + glVertex(face->centroid() + 1 / g_scale * face->plane_eqn.N); + glEnd(); + } + + glDepthMask(GL_TRUE); + glEnable(GL_LIGHTING); +} + +void drawFaceWireframe(carve::poly::Face<3> *face, bool normal) { + drawFaceWireframe(face, normal, 0,0,0); +} + +void drawFaceNormal(carve::poly::Face<3> *face, float r, float g, float b) { + glDisable(GL_LIGHTING); + glDepthMask(GL_FALSE); + + glLineWidth(1.0f); + + glEnable(GL_DEPTH_TEST); + + glBegin(GL_LINES); + glColor4f(1.0, 1.0, 0.0, 1.0); + glVertex(face->centroid()); + glColor4f(1.0, 1.0, 0.0, 0.0); + glVertex(face->centroid() + 1 / g_scale * face->plane_eqn.N); + glEnd(); + + glDepthMask(GL_TRUE); + glEnable(GL_LIGHTING); +} + +void drawFaceNormal(carve::poly::Face<3> *face) { + drawFaceNormal(face, 0,0,0); +} + +void DebugHooks::drawFaceLoopWireframe(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float r, float g, float b, float a, + bool inset) { + glDisable(GL_DEPTH_TEST); + + const size_t S = face_loop.size(); + + double INSET = 0.005; + + if (inset) { + glColor4f(r, g, b, a / 2.0); + glBegin(GL_LINE_LOOP); + + for (size_t i = 0; i < S; ++i) { + size_t i_pre = (i + S - 1) % S; + size_t i_post = (i + 1) % S; + + carve::geom3d::Vector v1 = (*face_loop[i] - *face_loop[i_pre]).normalized(); + carve::geom3d::Vector v2 = (*face_loop[i] - *face_loop[i_post]).normalized(); + + carve::geom3d::Vector n1 = cross(normal, v1); + carve::geom3d::Vector n2 = cross(v2, normal); + + carve::geom3d::Vector v = *face_loop[i]; + + carve::geom3d::Vector p1 = v + INSET * n1; + carve::geom3d::Vector p2 = v + INSET * n2; + + carve::geom3d::Vector i1 , i2; + double mu1, mu2; + + carve::geom3d::Vector p; + + if (carve::geom3d::rayRayIntersection(carve::geom3d::Ray(v1, p1), carve::geom3d::Ray(v2, p2), i1, i2, mu1, mu2)) { + p = (i1 + i2) / 2; + } else { + p = (p1 + p2) / 2; + } + + glVertex(&p); + } + + glEnd(); + } + + glColor4f(r, g, b, a); + + glBegin(GL_LINE_LOOP); + + for (unsigned i = 0; i < S; ++i) { + glVertex(face_loop[i]); + } + + glEnd(); + + glColor4f(r, g, b, a); + glPointSize(3.0); + glBegin(GL_POINTS); + + for (unsigned i = 0; i < S; ++i) { + carve::geom3d::Vector p = *face_loop[i]; + glVertex(face_loop[i]); + } + + glEnd(); + + glEnable(GL_DEPTH_TEST); +} + +void DebugHooks::drawFaceLoop(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float r, float g, float b, float a, + bool offset, + bool lit) { + if (lit) glEnable(GL_LIGHTING); else glDisable(GL_LIGHTING); + if (offset) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.5, 0.5); + } + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + GLUtesselator *tess = gluNewTess(); + + gluTessCallback(tess, GLU_TESS_BEGIN, (GLUTessCallback)glBegin); + gluTessCallback(tess, GLU_TESS_VERTEX, (GLUTessCallback)glVertex3dv); + gluTessCallback(tess, GLU_TESS_END, (GLUTessCallback)glEnd); + + glNormal3f(normal.x, normal.y, normal.z); + glColor4f(r, g, b, a); + + gluTessBeginPolygon(tess, (void *)NULL); + gluTessBeginContour(tess); + + std::vector v; + v.resize(face_loop.size()); + for (size_t i = 0, l = face_loop.size(); i != l; ++i) { + v[i] = g_scale * (*face_loop[i] + g_translation); + gluTessVertex(tess, (GLdouble *)v[i].v, (GLvoid *)v[i].v); + } + + gluTessEndContour(tess); + gluTessEndPolygon(tess); + + gluDeleteTess(tess); + + if (offset) { + glDisable(GL_POLYGON_OFFSET_FILL); + } + glEnable(GL_LIGHTING); +} + +void DebugHooks::drawFaceLoop2(const std::vector &face_loop, + const carve::geom3d::Vector &normal, + float rF, float gF, float bF, float aF, + float rB, float gB, float bB, float aB, + bool offset, + bool lit) { + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + drawFaceLoop(face_loop, normal, rF, gF, bF, aF, offset, lit); + glCullFace(GL_FRONT); + drawFaceLoop(face_loop, normal, rB, gB, bB, aB, offset, lit); + glCullFace(GL_BACK); +} + +void drawPolyhedron(carve::poly::Polyhedron *poly, float r, float g, float b, float a, bool offset, int group) { + if (offset) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.5, 0.5); + } + glColor4f(r, g, b, a); + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glBegin(GL_TRIANGLES); + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + carve::poly::Face<3> &f = poly->faces[i]; + if (group == -1 || f.manifold_id == group) { + if (f.nVertices() == 3) { + glNormal3dv(f.plane_eqn.N.v); + glVertex(f.vertex(0)); + glVertex(f.vertex(1)); + glVertex(f.vertex(2)); + } + } + } + glEnd(); + + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + carve::poly::Face<3> &f = poly->faces[i]; + if (group == -1 || f.manifold_id == group) { + if (f.nVertices() != 3) { + drawFace(&poly->faces[i], cRGBA(r, g, b, a), false); + } + } + } + + if (offset) { + glDisable(GL_POLYGON_OFFSET_FILL); + } +} + +void drawEdges(carve::poly::Polyhedron *poly, double alpha, int group) { + glBegin(GL_LINES); + for (size_t i = 0, l = poly->edges.size(); i != l; ++i) { + if (group == -1 || poly->edgeOnManifold(&poly->edges[i], group)) { + const std::vector &ef = poly->connectivity.edge_to_face[i]; + if (std::find(ef.begin(), ef.end(), (carve::poly::Polyhedron::face_t *)NULL) != ef.end()) { + glColor4f(1.0, 1.0, 0.0, alpha); + } else if (ef.size() > 2) { + glColor4f(0.0, 1.0, 1.0, alpha); + } else { + glColor4f(1.0, 0.0, 0.0, alpha); + } + glVertex(poly->edges[i].v1->v); + glVertex(poly->edges[i].v2->v); + } + } + glEnd(); +} + +void drawPolyhedronWireframe(carve::poly::Polyhedron *poly, bool normal, int group) { + if (normal) { + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + carve::poly::Face<3> &f = poly->faces[i]; + if (group == -1 || f.manifold_id == group) { + drawFaceNormal(&f); + } + } + } + + glDisable(GL_LIGHTING); + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + + drawEdges(poly, 0.2, group); + + glEnable(GL_DEPTH_TEST); + + drawEdges(poly, 0.8, group); + + glDepthMask(GL_TRUE); + glEnable(GL_LIGHTING); +} + +void installDebugHooks() { + if (carve::csg::intersect_debugEnabled()) { + carve::csg::intersect_installDebugHooks(new DebugHooks()); + } +} diff --git a/thirdparty/carve-1.4.0/common/geom_draw.hpp b/thirdparty/carve-1.4.0/common/geom_draw.hpp new file mode 100644 index 00000000..f8907d82 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/geom_draw.hpp @@ -0,0 +1,41 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include +#include + +#include "rgb.hpp" + +void drawPolyhedronWireframe(carve::poly::Polyhedron *poly, bool normal = true, int group = -1); +void drawPolyhedron(carve::poly::Polyhedron *poly, float r, float g, float b, float a, bool offset = false, int group = -1); + +void drawFace(carve::poly::Face<3> *face, cRGBA fc, bool offset); +void drawColourFace(carve::poly::Face<3> *face, const std::vector &vc, bool offset); + +void installDebugHooks(); +void drawCube(const carve::geom3d::Vector &, const carve::geom3d::Vector &); +void drawOctree(const carve::csg::Octree &); + +extern carve::geom3d::Vector g_translation; +extern double g_scale; diff --git a/thirdparty/carve-1.4.0/common/geometry.cpp b/thirdparty/carve-1.4.0/common/geometry.cpp new file mode 100644 index 00000000..b56cf286 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/geometry.cpp @@ -0,0 +1,244 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include "geometry.hpp" +#include + +carve::poly::Polyhedron *makeCube(const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + + data.addVertex(transform * carve::geom::VECTOR(+1.0, +1.0, +1.0)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, +1.0, +1.0)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, -1.0, +1.0)); + data.addVertex(transform * carve::geom::VECTOR(+1.0, -1.0, +1.0)); + data.addVertex(transform * carve::geom::VECTOR(+1.0, +1.0, -1.0)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, +1.0, -1.0)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, -1.0, -1.0)); + data.addVertex(transform * carve::geom::VECTOR(+1.0, -1.0, -1.0)); + + data.addFace(0, 1, 2, 3); + data.addFace(7, 6, 5, 4); + data.addFace(0, 4, 5, 1); + data.addFace(1, 5, 6, 2); + data.addFace(2, 6, 7, 3); + data.addFace(3, 7, 4, 0); + + return new carve::poly::Polyhedron(data.points, data.getFaceCount(), data.faceIndices); +} + +static bool _all(int x, int y, int z) { + return true; +} + +carve::poly::Polyhedron *makeSubdividedCube(int sub_x, int sub_y, int sub_z, + bool (*inc)(int, int, int), const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + + if (inc == NULL) inc = _all; + + data.reserveVertices((sub_x + 1) * (sub_y + 1) * (sub_z + 1)); + for (int _z = 0; _z < sub_z + 1; ++_z) { + double z = 1.0 - 2.0 * _z / sub_z; + for (int _y = 0; _y < sub_y + 1; ++_y) { + double y = 1.0 - 2.0 * _y / sub_y; + for (int _x = 0; _x < sub_x + 1; ++_x) { + double x = 1.0 - 2.0 * _x / sub_x; + data.addVertex(transform * carve::geom::VECTOR(x, y, z)); + } + } + } +#define OK(x, y, z) ((x) >= 0 && (x) < sub_x && (y) >= 0 && (y) < sub_y && (z) >= 0 && (z) < sub_z) +#define I(x, y, z) ((x) + (y) * (sub_x + 1) + (z) * ((sub_x + 1) * (sub_y + 1))) +#define FACE(a, b, c, d) data.addFace(idx[a], idx[b], idx[c], idx[d]) + for (int _z = 0; _z < sub_z; ++_z) { + for (int _y = 0; _y < sub_y; ++_y) { + for (int _x = 0; _x < sub_x; ++_x) { + int idx[8] = { + I(_x, _y, _z), + I(_x+1, _y, _z), + I(_x+1, _y+1, _z), + I(_x, _y+1, _z), + I(_x, _y, _z+1), + I(_x+1, _y, _z+1), + I(_x+1, _y+1, _z+1), + I(_x, _y+1, _z+1) + }; + if (!inc(_x, _y, _z)) continue; + if (!OK(_x - 1, _y, _z) || !inc(_x - 1, _y, _z)) FACE(3, 7, 4, 0); + if (!OK(_x + 1, _y, _z) || !inc(_x + 1, _y, _z)) FACE(1, 5, 6, 2); + if (!OK(_x, _y - 1, _z) || !inc(_x, _y - 1, _z)) FACE(0, 4, 5, 1); + if (!OK(_x, _y + 1, _z) || !inc(_x, _y + 1, _z)) FACE(2, 6, 7, 3); + if (!OK(_x, _y, _z - 1) || !inc(_x, _y, _z - 1)) FACE(0, 1, 2, 3); + if (!OK(_x, _y, _z + 1) || !inc(_x, _y, _z + 1)) FACE(7, 6, 5, 4); + + } + } + } + + return data.create(); +} + +carve::poly::Polyhedron *makeDoubleCube(const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + data.addVertex(transform * carve::geom::VECTOR(-1.0, -1.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, -1.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(+0.0, -1.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(+0.0, -1.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(-1.0, +0.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(-1.0, +0.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(+0.0, +0.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(+0.0, +0.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(+0.0, +1.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(+0.0, +1.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(+1.0, +0.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(+1.0, +0.0, +0.5)); + + data.addVertex(transform * carve::geom::VECTOR(+1.0, +1.0, -0.5)); + data.addVertex(transform * carve::geom::VECTOR(+1.0, +1.0, +0.5)); + + data.addFace(0, 4, 6, 2); + data.addFace(6, 8, 12, 10); + data.addFace(1, 3, 7, 5); + data.addFace(7, 11, 13, 9); + + data.addFace(1, 5, 4, 0); + data.addFace(3, 1, 0, 2); + data.addFace(7, 3, 2, 6); + data.addFace(5, 7, 6, 4); + + data.addFace(11, 7, 6, 10); + data.addFace(13, 11, 10, 12); + data.addFace(9, 13, 12, 8); + data.addFace(7, 9, 8, 6); + + return data.create(); +} + +carve::poly::Polyhedron *makeTorus(int slices, + int rings, + double rad1, + double rad2, + const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + data.reserveVertices(slices * rings); + + for (int i = 0; i < slices; i++) { + double a1 = i * M_PI * 2.0 / slices; + double dy = cos(a1); + double dx = sin(a1); + for (int j = 0; j < rings; j++) { + double a2 = j * M_PI * 2.0 / rings; + double x = dx * (rad1 + cos(a2) * rad2); + double y = dy * (rad1 + cos(a2) * rad2); + double z = sin(a2) * rad2; + data.addVertex(transform * carve::geom::VECTOR(x, y, z)); + } + } + +#define V(i, j) ((i) * rings + (j)) + + data.reserveFaces(slices * rings, 4); + for (int i = 0; i < slices; i++) { + int i2 = (i + 1) % slices; + for (int j = 0; j < rings; j++) { + int j2 = (j + 1) % rings; + data.addFace(V(i, j), V(i, j2), V(i2, j2), V(i2, j)); + } + } +#undef V + + return data.create(); +} + +carve::poly::Polyhedron *makeCylinder(int slices, + double rad, + double height, + const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + data.reserveVertices(slices * 2 + 2); + + data.addVertex(transform * carve::geom::VECTOR(0, 0, +height/2)); + data.addVertex(transform * carve::geom::VECTOR(0, 0, -height/2)); + + for (int i = 0; i < slices; i++) { + double a1 = i * M_PI * 2.0 / slices; + double y = cos(a1) * rad; + double x = sin(a1) * rad; + data.addVertex(transform * carve::geom::VECTOR(x, y, +height/2)); + data.addVertex(transform * carve::geom::VECTOR(x, y, -height/2)); + } + + data.reserveFaces(slices * 3, 4); + for (int i = 0; i < slices; i++) { + data.addFace(0, + 2 + ((i+1) % slices) * 2, + 2 + i * 2); + } + for (int i = 0; i < slices; i++) { + data.addFace(2 + i * 2, + 2 + ((i+1) % slices) * 2, + 3 + ((i+1) % slices) * 2, + 3 + i * 2); + } + for (int i = 0; i < slices; i++) { + data.addFace(1, + 3 + i * 2, + 3 + ((i+1) % slices) * 2); + } + + return data.create(); +} + +carve::poly::Polyhedron *makeCone(int slices, + double rad, + double height, + const carve::math::Matrix &transform) { + carve::input::PolyhedronData data; + data.reserveVertices(slices + 2); + + data.addVertex(transform * carve::geom::VECTOR(0, 0, +height/2)); + data.addVertex(transform * carve::geom::VECTOR(0, 0, -height/2)); + + for (int i = 0; i < slices; i++) { + double a1 = i * M_PI * 2.0 / slices; + double y = cos(a1) * rad; + double x = sin(a1) * rad; + data.addVertex(transform * carve::geom::VECTOR(x, y, -height/2)); + } + data.reserveFaces(slices * 2, 3); + for (int i = 0; i < slices; i++) { + data.addFace(0, + 2 + ((i+1) % slices), + 2 + i); + } + for (int i = 0; i < slices; i++) { + data.addFace(1, + 2 + i, + 2 + ((i+1) % slices)); + } + + return data.create(); +} diff --git a/thirdparty/carve-1.4.0/common/geometry.hpp b/thirdparty/carve-1.4.0/common/geometry.hpp new file mode 100644 index 00000000..ec6362b2 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/geometry.hpp @@ -0,0 +1,46 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#ifdef WIN32 +#undef rad1 +#undef rad2 +#endif + +carve::poly::Polyhedron *makeCube(const carve::math::Matrix &transform = carve::math::Matrix()); +carve::poly::Polyhedron *makeSubdividedCube(int sub_x = 3, int sub_y = 3, int sub_z = 3, + bool (*inc)(int, int, int) = NULL, const carve::math::Matrix &transform = carve::math::Matrix()); +carve::poly::Polyhedron *makeDoubleCube(const carve::math::Matrix &transform = carve::math::Matrix()); +carve::poly::Polyhedron *makeTorus(int slices, + int rings, + double rad1, + double rad2, + const carve::math::Matrix &transform = carve::math::Matrix()); +carve::poly::Polyhedron *makeCylinder(int slices, + double rad, + double height, + const carve::math::Matrix &transform = carve::math::Matrix()); +carve::poly::Polyhedron *makeCone(int slices, + double rad, + double height, + const carve::math::Matrix &transform = carve::math::Matrix()); diff --git a/thirdparty/carve-1.4.0/common/opts.hpp b/thirdparty/carve-1.4.0/common/opts.hpp new file mode 100644 index 00000000..32eea961 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/opts.hpp @@ -0,0 +1,246 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include +#include + +#include + +#include "stringfuncs.hpp" + +namespace opt { + struct Help { + std::string long_opt; + std::string short_opt; + bool arg; + std::string text; + Help(const std::string &_long_opt, const std::string &_short_opt, bool _arg, const std::string &_text) : + long_opt(_long_opt), short_opt(_short_opt), arg(_arg), text(_text) { + } + }; + + + + struct Short { + char ch; + bool arg; + std::string help; + + Short(char _ch, bool _arg, const std::string &_help) : ch(_ch), arg(_arg), help(_help) {} + }; + + + + struct Long { + std::string str; + bool arg; + std::string help; + + Long(const std::string &_str, bool _arg, const std::string &_help) : str(_str), arg(_arg), help(_help) {} + }; + + + + struct exception { + private: + mutable std::string err; + mutable std::ostringstream accum; + + public: + exception(const std::string &e) : err(e), accum() { } + exception() : err(), accum() { } + exception(const exception &e) : err(e.str()), accum() { } + + const std::string &str() const { + if (accum.tellp()) { + err = accum.str(); + accum.str(""); + } + return err; + } + + template + exception &operator<<(const T &t) { + accum << t; + return *this; + } + }; + + + + class Parser { + protected: + std::list short_opts; + std::list long_opts; + std::list help_text; + + std::string progname; + + virtual void help(std::ostream &out) { + size_t max_long = 0; + size_t max_short = 0; + for (std::list::iterator i = help_text.begin(); i != help_text.end(); ++i) { + max_long = std::max(max_long, (*i).long_opt.size()); + max_short = std::max(max_short, (*i).short_opt.size()); + } + + out << usageStr() << std::endl; + out << std::setfill(' '); + for (std::list::iterator i = help_text.begin(); i != help_text.end(); ++i) { + out.setf(std::ios::left); + out << std::setw(max_long + 1) << (*i).long_opt << std::setw(max_short + 1) << (*i).short_opt; + if ((*i).arg) { + out << "{arg} "; + } else { + out << " "; + } + out << (*i).text << std::endl; + } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] [args]"); + }; + + virtual void optval(const std::string &o, const std::string &v) { + } + + virtual void arg(const std::string &a) { + } + + void long_opt(std::vector::const_iterator &i, const std::vector::const_iterator &e) { + const std::string &a(*i); + std::string opt, val; + bool has_argopt; + + std::string::size_type eq = a.find('='); + has_argopt = eq != std::string::npos; + if (has_argopt) { + opt = a.substr(2, eq - 2); + val = a.substr(eq + 1); + } else { + opt = a.substr(2); + val = ""; + } + for (std::list::iterator j = long_opts.begin(), je = long_opts.end(); j != je; ++j) { + if ((*j).str == opt) { + if (!(*j).arg && has_argopt) throw exception() << "unexpected argument for option --" << (*j).str << "."; + if ((*j).arg) { + if (++i == e) throw exception() << "missing argument for option --" << (*j).str << "."; + val = *i; + } + optval("--" + opt, val); + ++i; + return; + } + } + throw exception() << "unrecognised option --" << opt << "."; + } + + void short_opt(std::vector::const_iterator &i, const std::vector::const_iterator &e) { + const std::string &a(*i); + + for (std::string::size_type j = 1; j < a.size(); ++j) { + for (std::list::iterator k = short_opts.begin(), ke = short_opts.end(); k != ke; ++k) { + if ((*k).ch == a[j]) { + if ((*k).arg) { + if (j < a.size() - 1) { + optval("-" + a.substr(j, 1), a.substr(j + 1)); + j = a.size() - 1; + } else { + if (++i == e) throw exception() << "missing argument for option -" << a[j] << "."; + optval("-" + a.substr(j, 1), *i); + } + } else { + optval("-" + a.substr(j, 1), ""); + } + goto found; + } + } + throw exception() << "unrecognised option -" << a[j] << "."; + found:; + } + ++i; + } + + public: + Parser() { + } + + virtual ~Parser() { + } + + Parser &option(const std::string &str, char ch, bool arg, const std::string &help) { + long_opts.push_back(Long(str, arg, help)); + short_opts.push_back(Short(ch, arg, help)); + help_text.push_back(Help("--" + str, std::string("-") + ch, arg, help)); + return *this; + } + + Parser &option(const std::string &str, bool arg, const std::string &help) { + long_opts.push_back(Long(str, arg, help)); + help_text.push_back(Help("--" + str, "", arg, help)); + return *this; + } + + Parser &option(char ch, bool arg, const std::string &help) { + short_opts.push_back(Short(ch, arg, help)); + help_text.push_back(Help("", std::string("-") + ch, arg, help)); + return *this; + } + + bool parse(const std::string &pn, const std::vector &opts) { + try { + progname = pn; + std::vector::const_iterator i = opts.begin(); + std::vector::const_iterator e = opts.end(); + while (i != e) { + const std::string &a(*i); + if (a[0] == '-') { + if (a == "-" || a == "--") { ++i; break; } + if (a[1] == '-') { + long_opt(i, e); + } else { + short_opt(i, e); + } + } else { + break; + } + } + while (i != e) { arg(*i++); } + return true; + } catch (exception e) { + std::cerr << e.str() << std::endl; + help(std::cerr); + return false; + } + } + + bool parse(int argc, char **argv) { + std::vector opts(argc-1); + for (int i = 1; i < argc; ++i) { + opts[i-1] = argv[i]; + } + return parse(argv[0], opts); + } + }; + +} diff --git a/thirdparty/carve-1.4.0/common/read_ply.cpp b/thirdparty/carve-1.4.0/common/read_ply.cpp new file mode 100644 index 00000000..416f3bc8 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/read_ply.cpp @@ -0,0 +1,355 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#ifndef WIN32 +# include +#endif + + + +namespace { + struct line : public gloop::stream::null_reader { + carve::input::PolylineSetData *data; + line(carve::input::PolylineSetData *_data) : data(_data) { } + virtual void length(int len) { + } + virtual void next() { + data->beginPolyline(); + } + virtual void end() { + } + carve::input::PolylineSetData::polyline_data_t &curr() const { + return data->polylines.back(); + } + }; + + struct line_closed : public gloop::stream::reader { + line *l; + line_closed(line *_l) : l(_l) { } + virtual void value(bool val) { l->curr().first = val; } + }; + + struct line_idx : public gloop::stream::reader { + line *l; + line_idx(line *_l) : l(_l) { } + virtual void length(size_t len) { if (l) l->curr().second.reserve(len); } + virtual void value(int val) { l->curr().second.push_back(val); } + }; + + template + struct vertex : public gloop::stream::null_reader { + container_t &container; + vertex(container_t &_container) : container(_container) { + } + virtual void next() { + container.push_back(carve::geom3d::Vector()); + } + virtual void length(int l) { + if (l > 0) container.reserve(container.size() + l); + } + virtual void end() { + } + carve::geom3d::Vector &curr() const { + return container.back(); + } + }; + template + vertex *vertex_inserter(container_t &container) { return new vertex(container); } + + + + template + struct vertex_component : public gloop::stream::reader { + const curr_t *i; + vertex_component(const curr_t *_i) : i(_i) { } + virtual void value(double val) { i->curr().v[idx] = val; } + }; + template + vertex_component *vertex_component_inserter(const curr_t *i) { return new vertex_component(i); } + + + + struct face : public gloop::stream::null_reader { + carve::input::PolyhedronData *data; + face(carve::input::PolyhedronData *_data) : data(_data) { + } + virtual void length(int l) { + if (l > 0) data->reserveFaces(l, 3); + } + }; + + struct face_idx : public gloop::stream::reader { + carve::input::PolyhedronData *data; + mutable std::vector vidx; + + face_idx(carve::input::PolyhedronData *_data) : data(_data), vidx() { } + + virtual void length(int l) { vidx.clear(); vidx.reserve(l); } + virtual void value(int val) { vidx.push_back(val); } + virtual void end() { data->addFace(vidx.begin(), vidx.end()); } + }; + + struct tristrip_idx : public gloop::stream::reader { + carve::input::PolyhedronData *data; + mutable int a, b, c; + mutable bool clk; + + tristrip_idx(carve::input::PolyhedronData *_data) : data(_data), a(-1), b(-1), c(-1), clk(true) { } + + virtual void value(int val) { + a = b; b = c; c = val; + if (a == -1 || b == -1 || c == -1) { + clk = true; + } else { + if (clk) { + data->addFace(a, b, c); + } else { + data->addFace(c, b, a); + } + clk = !clk; + } + } + + virtual void length(int len) { + data->reserveFaces(len - 2, 3); + } + }; + + struct begin_pointset : public gloop::stream::null_reader { + gloop::stream::model_reader &sr; + carve::input::Input &inputs; + carve::input::PointSetData *data; + + begin_pointset(gloop::stream::model_reader &_sr, carve::input::Input &_inputs) : sr(_sr), inputs(_inputs) { + } + ~begin_pointset() { + } + virtual void begin() { + data = new carve::input::PointSetData(); + vertex > *vi = vertex_inserter(data->points); + sr.addReader("pointset.vertex", vi); + sr.addReader("pointset.vertex.x", vertex_component_inserter<0>(vi)); + sr.addReader("pointset.vertex.y", vertex_component_inserter<1>(vi)); + sr.addReader("pointset.vertex.z", vertex_component_inserter<2>(vi)); + } + virtual void end() { + std::cerr << "pointset complete" << std::endl; + inputs.addDataBlock(data); + } + virtual void fail() { + delete data; + } + }; + + struct begin_polyline : public gloop::stream::null_reader { + gloop::stream::model_reader &sr; + carve::input::Input &inputs; + carve::input::PolylineSetData *data; + + begin_polyline(gloop::stream::model_reader &_sr, carve::input::Input &_inputs) : sr(_sr), inputs(_inputs) { + } + ~begin_polyline() { + } + virtual void begin() { + data = new carve::input::PolylineSetData(); + vertex > *vi = vertex_inserter(data->points); + sr.addReader("polyline.vertex", vi); + sr.addReader("polyline.vertex.x", vertex_component_inserter<0>(vi)); + sr.addReader("polyline.vertex.y", vertex_component_inserter<1>(vi)); + sr.addReader("polyline.vertex.z", vertex_component_inserter<2>(vi)); + + line *li = new line(data); + sr.addReader("polyline.polyline", li); + sr.addReader("polyline.polyline.closed", new line_closed(li)); + sr.addReader("polyline.polyline.vertex_indices", new line_idx(li)); + } + virtual void end() { + inputs.addDataBlock(data); + } + virtual void fail() { + delete data; + } + }; + + struct begin_polyhedron : public gloop::stream::null_reader { + gloop::stream::model_reader &sr; + carve::input::Input &inputs; + carve::input::PolyhedronData *data; + + begin_polyhedron(gloop::stream::model_reader &_sr, carve::input::Input &_inputs) : sr(_sr), inputs(_inputs) { + } + ~begin_polyhedron() { + } + virtual void begin() { + data = new carve::input::PolyhedronData(); + vertex > *vi = vertex_inserter(data->points); + sr.addReader("polyhedron.vertex", vi); + sr.addReader("polyhedron.vertex.x", vertex_component_inserter<0>(vi)); + sr.addReader("polyhedron.vertex.y", vertex_component_inserter<1>(vi)); + sr.addReader("polyhedron.vertex.z", vertex_component_inserter<2>(vi)); + + sr.addReader("polyhedron.face", new face(data)); + sr.addReader("polyhedron.face.vertex_indices", new face_idx(data)); + + sr.addReader("polyhedron.tristrips.vertex_indices", new tristrip_idx(data)); + } + virtual void end() { + inputs.addDataBlock(data); + } + virtual void fail() { + delete data; + } + }; + + void modelSetup(carve::input::Input &inputs, gloop::stream::model_reader &model) { + model.addReader("polyhedron", new begin_polyhedron(model, inputs)); + model.addReader("polyline", new begin_polyline(model, inputs)); + model.addReader("pointset", new begin_pointset(model, inputs)); + } +} + + + +template +bool readFile(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform) { + filetype_t f; + + modelSetup(inputs, f); + if (!f.read(in)) return false; + inputs.transform(transform); + return true; +} + + + +template +carve::poly::Polyhedron *readFile(std::istream &in, const carve::math::Matrix &transform) { + carve::input::Input inputs; + if (!readFile(in, inputs, transform)) { + return false; + } + for (std::list::const_iterator i = inputs.input.begin(); i != inputs.input.end(); ++i) { + carve::poly::Polyhedron *poly = inputs.create(*i); + if (poly) return poly; + } + return NULL; +} + + + +template +bool readFile(const std::string &in_file, + carve::input::Input &inputs, + const carve::math::Matrix &transform = carve::math::Matrix::IDENT()) { + std::ifstream in(in_file.c_str(),std::ios_base::binary | std::ios_base::in); + + if (!in.is_open()) { + std::cerr << "File '" << in_file << "' could not be opened." << std::endl; + return false; + } + std::cerr << "Loading " << in_file << "'" << std::endl; + return readFile(in, inputs, transform); +} + + + +template +carve::poly::Polyhedron* readFile(const std::string &in_file, + const carve::math::Matrix &transform = carve::math::Matrix::IDENT()) { + std::ifstream in(in_file.c_str(),std::ios_base::binary | std::ios_base::in); + + if (!in.is_open()) { + std::cerr << "File '" << in_file << "' could not be opened." << std::endl; + return NULL; + } + + std::cerr << "Loading '" << in_file << "'" << std::endl; + return readFile(in, transform); +} + + + + +bool readPLY(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in, inputs, transform); +} + +carve::poly::Polyhedron *readPLY(std::istream &in, const carve::math::Matrix &transform) { + return readFile(in, transform); +} + +bool readPLY(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in_file, inputs, transform); +} + +carve::poly::Polyhedron *readPLY(const std::string &in_file, const carve::math::Matrix &transform) { + return readFile(in_file, transform); +} + + + +bool readOBJ(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in, inputs, transform); +} + +carve::poly::Polyhedron *readOBJ(std::istream &in, const carve::math::Matrix &transform) { + return readFile(in, transform); +} + +bool readOBJ(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in_file, inputs, transform); +} + +carve::poly::Polyhedron *readOBJ(const std::string &in_file, const carve::math::Matrix &transform) { + return readFile(in_file, transform); +} + + + +bool readVTK(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in, inputs, transform); +} + +carve::poly::Polyhedron *readVTK(std::istream &in, const carve::math::Matrix &transform) { + return readFile(in, transform); +} + +bool readVTK(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform) { + return readFile(in_file, inputs, transform); +} + +carve::poly::Polyhedron *readVTK(const std::string &in_file, const carve::math::Matrix &transform) { + return readFile(in_file, transform); +} + + + diff --git a/thirdparty/carve-1.4.0/common/read_ply.hpp b/thirdparty/carve-1.4.0/common/read_ply.hpp new file mode 100644 index 00000000..aa40254d --- /dev/null +++ b/thirdparty/carve-1.4.0/common/read_ply.hpp @@ -0,0 +1,55 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include +#include + +#include + + + +bool readPLY(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +bool readPLY(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + +carve::poly::Polyhedron *readPLY(std::istream &in, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +carve::poly::Polyhedron *readPLY(const std::string &in_file, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + + + +bool readOBJ(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +bool readOBJ(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + +carve::poly::Polyhedron *readOBJ(std::istream &in, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +carve::poly::Polyhedron *readOBJ(const std::string &in_file, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + + + +bool readVTK(std::istream &in, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +bool readVTK(const std::string &in_file, carve::input::Input &inputs, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + +carve::poly::Polyhedron *readVTK(std::istream &in, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); +carve::poly::Polyhedron *readVTK(const std::string &in_file, const carve::math::Matrix &transform = carve::math::Matrix::IDENT()); + + + diff --git a/thirdparty/carve-1.4.0/common/rgb.hpp b/thirdparty/carve-1.4.0/common/rgb.hpp new file mode 100644 index 00000000..049a3725 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/rgb.hpp @@ -0,0 +1,101 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +struct cRGB { + typedef float value_type; + value_type r, g, b; + + cRGB() : r(0), g(0), b(0) { } + + template + cRGB(T _r, T _g, T _b) : r((value_type)_r), g((value_type)_g), b((value_type)_b) { } +}; + +struct cRGBA { + typedef float value_type; + value_type r, g, b, a; + + cRGBA() : r(0),g(0),b(0),a(1) { } + template + cRGBA(T _r, T _g, T _b, T _a = T(1)) : r((value_type)_r), g((value_type)_g), b((value_type)_b), a((value_type)_a) { } + + cRGBA(const cRGB &rgb) : r(rgb.r), g(rgb.g), b(rgb.b), a(1) { } +}; + +static inline cRGB operator+(const cRGB &a, const cRGB &b) { + return cRGB(a.r + b.r, a.g + b.g, a.b + b.b); +} +static inline cRGB &operator+=(cRGB &a, const cRGB &b) { + a.r += b.r; a.g += b.g; a.b += b.b; + return a; +} + +static inline cRGB operator*(double s, const cRGB &a) { + return cRGB(s * a.r, s * a.g, s * a.b); +} + +static inline cRGBA operator+(const cRGBA &a, const cRGBA &b) { + return cRGBA(a.r + b.r, a.g + b.g, a.b + b.b, a.a + b.a); +} +static inline cRGBA &operator+=(cRGBA &a, const cRGBA &b) { + a.r += b.r; a.g += b.g; a.b += b.b; a.a += b.a; + return a; +} + +static inline cRGBA operator*(double s, const cRGBA &a) { + return cRGBA(s * a.r, s * a.g, s * a.b, s * a.a); +} + +static inline cRGB HSV2RGB(float H, float S, float V) { + H = 6.0f * H; + if (S < 5.0e-6) { + cRGB(V, V, V); + } else { + int i = (int)H; + float f = H - i; + float p1 = V * (1.0f - S); + float p2 = V * (1.0f - S * f); + float p3 = V * (1.0f - S * (1.0f - f)); + switch (i) { + case 0: return cRGB(V, p3, p1); + case 1: return cRGB(p2, V, p1); + case 2: return cRGB(p1, V, p3); + case 3: return cRGB(p1, p2, V); + case 4: return cRGB(p3, p1, V); + case 5: return cRGB(V, p1, p2); + } + } + return cRGB(0, 0, 0); +} + +struct colour_clamp_t { + cRGB operator()(const cRGB &c) const { + return cRGB(std::min(std::max(c.r, 0.0f), 1.0f), + std::min(std::max(c.g, 0.0f), 1.0f), + std::min(std::max(c.b, 0.0f), 1.0f)); + } + cRGBA operator()(const cRGBA &c) const { + return cRGBA(std::min(std::max(c.r, 0.0f), 1.0f), + std::min(std::max(c.g, 0.0f), 1.0f), + std::min(std::max(c.b, 0.0f), 1.0f), + std::min(std::max(c.a, 0.0f), 1.0f)); + } +}; diff --git a/thirdparty/carve-1.4.0/common/scene.cpp b/thirdparty/carve-1.4.0/common/scene.cpp new file mode 100644 index 00000000..55487169 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/scene.cpp @@ -0,0 +1,480 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include "scene.hpp" + +#include +#include + +#include + +static int lastx = 0, lasty = 0; +static unsigned buttons; +static int lastbutton = 0; + +static Scene *g_scene = NULL; +static int g_mainWindow = NULL; +static GLUI *g_rightPanel = NULL; +static double near_plane = 0.2; +static double far_plane = 200; +carve::math::Matrix g_projection, g_modelview; + +void Scene::updateDisplay() { + if (CAM_ELEVATION < -90.0) CAM_ELEVATION = -90; + if (CAM_ELEVATION > 90.0) CAM_ELEVATION = 90; + if (CAM_DIST < 0.05) { + CAM_DIST = 0.05; + } + glutPostWindowRedisplay(g_mainWindow); + glutPostRedisplay(); +} + +carve::geom3d::Vector rotateWithVector(const carve::geom3d::Vector &x, carve::geom3d::Vector u, float ang) { + carve::geom3d::Vector h,v,uxx; + + u.normalize(); + + + uxx = cross(u, x) * (float)sin(ang); + + h = u * (dot(x,u)); + + v = (x - h) * (float)cos(ang); + + return (h + v) + uxx; +} + +// Our world is Z up. +const carve::geom3d::Vector WORLD_RIGHT = carve::geom::VECTOR(1,0,0); +const carve::geom3d::Vector WORLD_UP = carve::geom::VECTOR(0,0,1); +const carve::geom3d::Vector WORLD_IN = carve::geom::VECTOR(0,1,0); + +void getCameraVectors(float rot, float elev, carve::geom3d::Vector &right, carve::geom3d::Vector &up, carve::geom3d::Vector &in) { + right = WORLD_RIGHT; + up = WORLD_UP; + in = WORLD_IN; + + right = rotateWithVector(right, WORLD_RIGHT, carve::math::radians(elev)); + up = rotateWithVector(up, WORLD_RIGHT, carve::math::radians(elev)); + in = rotateWithVector(in, WORLD_RIGHT, carve::math::radians(elev)); + right = rotateWithVector(right, WORLD_UP, carve::math::radians(rot)); + up = rotateWithVector(up, WORLD_UP, carve::math::radians(rot)); + in = rotateWithVector(in, WORLD_UP, carve::math::radians(rot)); +} + +GLvoid Scene::_drag(int x, int y) { + int dx = x - lastx; + int dy = y - lasty; + + if (buttons == 0x04) { + CAM_DIST *= 1.0 + 0.01 * (y - lasty); + CAM_DIST_REAL *= 1.0 + 0.01 * (y - lasty); + updateDisplay(); + } else if (buttons == 0x01) { + CAM_ELEVATION += 0.5 * (y-lasty); + CAM_ROT -= 0.5 * (x - lastx); + updateDisplay(); + } else if (buttons == 0x02) { + carve::geom3d::Vector right, up, in; + getCameraVectors(CAM_ROT, CAM_ELEVATION, right, up, in); + + right.scaleBy(2 * dx * CAM_DIST / WIDTH); + up.scaleBy(2 * dy * CAM_DIST / HEIGHT); + CAM_LOOK += right; + CAM_LOOK += up; + CAM_LOOK_REAL += right; + CAM_LOOK_REAL += up; + updateDisplay(); + } + + + lastx = x; + lasty = y; +} + +GLvoid Scene::_click(int button, int state, int x, int y) { + unsigned mask = 1 << button; + if (state) { + buttons &= ~mask; + } else { + buttons |= mask; + } + + lastx = x; + lasty = y; + click(button, state, x, y); +} + +GLvoid Scene::_key(unsigned char k, int x, int y) { + double rate = 1.0; + if (isupper(k)) { rate = 0.1; k = tolower(k); } + + switch (k) { + case 'q': + exit(0); + break; + case 'g': + disp_grid = !disp_grid; + break; + case 'h': + disp_axes = !disp_axes; + break; + case 'w': + if (CAM_ELEVATION > -85.0) CAM_ELEVATION -= 5.0 * rate; + break; + case 's': + if (CAM_ELEVATION < 85.0) CAM_ELEVATION += 5.0 * rate; + break; + case 'a': + CAM_ROT += 5.0 * rate; + break; + case 'd': + CAM_ROT -= 5.0 * rate; + break; + case 'r': + CAM_DIST += 2.0 * rate; + break; + case 'f': + CAM_DIST -= 2.0 * rate; + break; + case 'i': + CAM_LOOK.x -= cos(carve::math::radians(CAM_ROT)) * 2.0 * rate; + CAM_LOOK.z -= sin(carve::math::radians(CAM_ROT)) * 2.0 * rate; + break; + case 'j': + CAM_LOOK.x -= sin(carve::math::radians(CAM_ROT)) * 2.0 * rate; + CAM_LOOK.z += cos(carve::math::radians(CAM_ROT)) * 2.0 * rate; + break; + case 'k': + CAM_LOOK.x += cos(carve::math::radians(CAM_ROT)) * 2.0 * rate; + CAM_LOOK.z += sin(carve::math::radians(CAM_ROT)) * 2.0 * rate; + break; + case 'l': + CAM_LOOK.x += sin(carve::math::radians(CAM_ROT)) * 2.0 * rate; + CAM_LOOK.z -= cos(carve::math::radians(CAM_ROT)) * 2.0 * rate; + break; + case 'z': + near_plane *= 1.1; + break; + case 'x': + near_plane /= 1.1; + break; + case 'c': + far_plane *= 1.1; + break; + case 'v': + far_plane /= 1.1; + break; + default: { + if (!key(k, x, y)) goto skip_redisplay; + break; + } + } + updateDisplay(); + skip_redisplay:; +} + + +GLvoid Scene::_draw() { + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + double w = WIDTH; + double h = HEIGHT; + + if (h == 0) h = 1; + glViewport(0, 0, WIDTH, HEIGHT); + if (w > h) { + double r = w / h; + glFrustum(-0.2 * r, 0.2 * r, -0.2, 0.2, near_plane, far_plane); + } else { + double r = h / w; + glFrustum(-0.2, 0.2, -0.2 * r, 0.2 * r, near_plane, far_plane); + } + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + CAM_LOOK_REAL = (CAM_LOOK_REAL * 4 + CAM_LOOK) / 5; + CAM_DIST_REAL = (CAM_DIST_REAL * 4 + CAM_DIST) / 5; + + // if they are far apart post another redisplay + if ((CAM_LOOK_REAL - CAM_LOOK).length() > 0.001) { + glutPostRedisplay(); + } else { + CAM_LOOK_REAL = CAM_LOOK; + } + if (fabs(CAM_DIST_REAL - CAM_DIST) > 0.001) { + glutPostRedisplay(); + } else { + CAM_DIST_REAL = CAM_DIST; + } + + carve::geom3d::Vector right, up, in; + getCameraVectors(CAM_ROT, CAM_ELEVATION, right, up, in); + in = CAM_DIST_REAL * in; + gluLookAt(CAM_LOOK_REAL.x + in.x, CAM_LOOK_REAL.y + in.y, CAM_LOOK_REAL.z + in.z, + CAM_LOOK_REAL.x, CAM_LOOK_REAL.y, CAM_LOOK_REAL.z, + up.x, up.y, up.z); + + glGetDoublev(GL_MODELVIEW_MATRIX, g_modelview.v); + glGetDoublev(GL_PROJECTION_MATRIX, g_projection.v); + + + glShadeModel(GL_SMOOTH); + glClearDepth(1.0); + glClearColor(0.05f, 0.075f, 0.2f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + { + const float amb[] = {0.05f, 0.05f, 0.05f, 1.0f}; + const float diff[] = {1.0f, 0.8f, 0.5f, 1.0f}; + const float spec[] = {0.4f, 0.4f, 0.4f, 1.0f}; + const float pos[] = {-40.0f, 40.0f, 80.0f, 0.0f}; + + glLightfv(GL_LIGHT0, GL_AMBIENT, amb); + glLightfv(GL_LIGHT0, GL_DIFFUSE, diff); + glLightfv(GL_LIGHT0, GL_SPECULAR, spec); + glLightfv(GL_LIGHT0, GL_POSITION, pos); + } + + { + const float amb[] = {0.05f, 0.05f, 0.05f, 1.0f}; + const float diff[] = {0.8f, 0.8f, 1.0f, 1.0f}; + const float spec[] = {0.4f, 0.4f, 0.4f, 1.0f}; + const float pos[] = {+50.0f, -10.0f, 10.0f, 0.0f}; + + glLightfv(GL_LIGHT1, GL_AMBIENT, amb); + glLightfv(GL_LIGHT1, GL_DIFFUSE, diff); + glLightfv(GL_LIGHT1, GL_SPECULAR, spec); + glLightfv(GL_LIGHT1, GL_POSITION, pos); + } + + glCullFace(GL_BACK); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHT1); + glEnable(GL_LIGHTING); + glEnable(GL_NORMALIZE); + glEnable(GL_COLOR_MATERIAL); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH); + + if (disp_grid) { + glBegin(GL_LINE_LOOP); + glColor4f(1,1,1,0.5); + glVertex3f(-30,-30,0); + glVertex3f(+30,-30,0); + glVertex3f(+30,+30,0); + glVertex3f(-30,+30,0); + glEnd(); + + glBegin(GL_LINES); + glColor4f(1.0f, 1.0f, 1.0f, 0.3f); + for (int i = 0; i < 30; i++) { + glVertex3f(i * 2.0f - 30.0f, -30.0f, 0.0f); + glVertex3f(i * 2.0f - 30.0f, +30.0f, 0.0f); + glVertex3f(-30.0f, i * 2.0f - 30.0f, 0.0f); + glVertex3f(+30.0f, i * 2.0f - 30.0f, 0.0f); + } + glEnd(); + } + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glEnable(GL_COLOR_MATERIAL); + glDepthFunc(GL_LESS); + glDepthMask(GL_TRUE); + + draw(); + + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + + if (disp_axes) { + glBegin(GL_LINES); + glColor4f(1,0,0,1); glVertex3f(0,0,0); glVertex3f(10,0,0); + glColor4f(0,1,0,1); glVertex3f(0,0,0); glVertex3f(0,10,0); + glColor4f(0,0,1,1); glVertex3f(0,0,0); glVertex3f(0,0,10); + glEnd(); + } + + glPopMatrix(); + + glutSwapBuffers(); +} + +bool Scene::key(unsigned char k, int x, int y) { + return false; +} + +GLvoid Scene::draw() { +} + +void Scene::click(int button, int state, int x, int y) { +} + +GLvoid Scene::_resize(int w, int h) { + int tx, ty, tw, th; + GLUI_Master.get_viewport_area(&tx, &ty, &tw, &th); + WIDTH = tw; + HEIGHT = th; +} + +void control_cb(int control) { + glutPostRedisplay(); + glutPostWindowRedisplay(g_mainWindow); +} + +#define WIREFRAME_ENABLED_ID 200 + +int wireframe = 0; + +static std::map groupToRollouts; +static std::map optionToCheckboxes; + +OptionGroup* Scene::createOptionGroup(const char *caption) { + // make sure our UI has been initialised. + init(); + + // Create a rollout GUI item. + OptionGroup *group = new OptionGroup(); + GLUI_Rollout *rollout = new GLUI_Rollout(g_rightPanel, caption); + groupToRollouts[group] = rollout; + return group; +} + +Option* OptionGroup::createOption(const char *caption, bool initialValue) { + GLUI_Rollout *rollout = groupToRollouts[this]; + if (rollout == NULL) { + return NULL; + } + + GLUI_Checkbox *cb = new GLUI_Checkbox(rollout, caption, NULL, 1, control_cb); + cb->set_int_val(initialValue); + + Option *option = new Option(); + + optionToCheckboxes[option] = cb; + + return option; + +} + +bool Option::isChecked() { + GLUI_Checkbox *cb = optionToCheckboxes[this]; + if (cb != NULL) { + return cb->get_int_val(); + } else { + return false; + } +} + +void Option::setChecked(bool value) { + GLUI_Checkbox *cb = optionToCheckboxes[this]; + if (cb != NULL) { + return cb->set_int_val(value); + } +} + +void Scene::init() { + if (!initialised) { + initialised = true; + + GLUI_Master.set_glutDisplayFunc(s_draw); + GLUI_Master.set_glutReshapeFunc(s_resize); + GLUI_Master.set_glutKeyboardFunc(s_key); + GLUI_Master.set_glutSpecialFunc(NULL); + GLUI_Master.set_glutMouseFunc(s_click); + GLUI_Master.set_glutMotionFunc(s_drag); + + g_rightPanel = GLUI_Master.create_glui_subwindow(g_mainWindow, GLUI_SUBWINDOW_RIGHT); + + this->_init(); + } +} + +carve::geom3d::Ray Scene::getRay(int x, int y) { + carve::geom3d::Vector from, to; + + GLint view[4]; + glGetIntegerv(GL_VIEWPORT, view); + gluUnProject(x, view[3] - y, 0, g_modelview.v, g_projection.v, view, &from.x, &from.y, &from.z); + gluUnProject(x, view[3] - y, 50, g_modelview.v, g_projection.v, view, &to.x, &to.y, &to.z); + + + return carve::geom3d::Ray((to - from).normalized(), from); +} + +void Scene::zoomTo(carve::geom3d::Vector pos, double dist) { + CAM_LOOK = pos; + CAM_DIST = dist; + updateDisplay(); +} +void Scene::_init() { + +} + +GLvoid Scene::s_draw() { g_scene->_draw(); } +GLvoid Scene::s_resize(int w, int h) { g_scene->_resize(w, h); } +GLvoid Scene::s_drag(int x, int y) { g_scene->_drag(x, y); } +GLvoid Scene::s_click(int button, int state, int x, int y) { g_scene->_click(button, state, x, y); } +GLvoid Scene::s_key(unsigned char k, int x, int y) { g_scene->_key(k, x, y); } + +Scene::Scene(int argc, char **argv) { + CAM_ROT = 0.0; + CAM_ELEVATION = 45.0; + CAM_DIST = 70.0; + CAM_DIST_REAL = 10000; + + WIDTH = 1024; + HEIGHT = 768; + + disp_grid = true; + disp_axes = true; + + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); + + glutInitWindowSize(WIDTH, HEIGHT); + g_mainWindow = glutCreateWindow("Main"); + + initialised = false; + + g_scene = this; +} + +Scene::~Scene() { + g_scene = NULL; +} + +void Scene::run() { + init(); + glutMainLoop(); +} diff --git a/thirdparty/carve-1.4.0/common/scene.hpp b/thirdparty/carve-1.4.0/common/scene.hpp new file mode 100644 index 00000000..082a8691 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/scene.hpp @@ -0,0 +1,87 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +#include +#include +#include + +class Option { +public: + bool isChecked(); + void setChecked(bool value); +}; + +class OptionGroup { +public: + Option* createOption(const char *caption, bool initialValue); +}; + +class Scene { + static GLvoid s_drag(int x, int y); + static GLvoid s_click(int button, int state, int x, int y); + static GLvoid s_key(unsigned char k, int x, int y); + static GLvoid s_draw(); + static GLvoid s_resize(int w, int h); + + carve::geom3d::Vector CAM_LOOK; + double CAM_ROT; + double CAM_ELEVATION; + double CAM_DIST; + carve::geom3d::Vector CAM_LOOK_REAL; + double CAM_DIST_REAL; + + + int WIDTH; + int HEIGHT; + + bool initialised; + bool disp_grid; + bool disp_axes; + + GLvoid _drag(int x, int y); + GLvoid _click(int button, int state, int x, int y); + GLvoid _key(unsigned char k, int x, int y); + GLvoid _draw(); + GLvoid _resize(int w, int h); + virtual void _init(); + + void updateDisplay(); + +protected: + + virtual bool key(unsigned char k, int x, int y); + virtual GLvoid draw(); + virtual void click(int button, int state, int x, int y); + + +public: + Scene(int argc, char **argv); + virtual ~Scene(); + virtual void run(); + void init(); + + carve::geom3d::Ray getRay(int x, int y); + void zoomTo(carve::geom3d::Vector pos, double dist); + OptionGroup* createOptionGroup(const char *title); + +}; diff --git a/thirdparty/carve-1.4.0/common/stringfuncs.hpp b/thirdparty/carve-1.4.0/common/stringfuncs.hpp new file mode 100644 index 00000000..74f76b94 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/stringfuncs.hpp @@ -0,0 +1,73 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +namespace str { + + static inline bool startswith(const std::string &a, const std::string &b) { + if (b.size() > a.size()) return false; + return a.compare(0, b.size(), b) == 0; + } + + template + static inline std::string rstrip(const std::string &a, const strip_t stripchars) { + std::string::size_type p = a.find_last_not_of(stripchars); + if (p == std::string::npos) return ""; + return a.substr(0, p + 1); + } + + static inline std::string rstrip(const std::string &a) { + std::string::size_type p = a.size(); + while (p && isspace(a[p-1])) p--; + if (!p) return ""; + return a.substr(0, p); + } + + template + static inline std::string lstrip(const std::string &a, const strip_t stripchars) { + std::string::size_type p = a.find_first_not_of(stripchars); + if (p == std::string::npos) return ""; + return a.substr(p); + } + + static inline std::string lstrip(const std::string &a) { + std::string::size_type p = 0; + while (p < a.size() && isspace(a[p])) p++; + if (p == a.size()) return ""; + return a.substr(p); + } + + template + static inline std::string strip(const std::string &a, const strip_t stripchars) { + std::string::size_type p = a.find_first_not_of(stripchars); + if (p == std::string::npos) return ""; + std::string::size_type q = a.find_last_not_of(stripchars); + return a.substr(p, q-p); + } + + static inline std::string strip(const std::string &a) { + std::string::size_type p = 0; + while (p < a.size() && isspace(a[p])) p++; + if (p == a.size()) return ""; + std::string::size_type q = a.size(); + while (q>p && isspace(a[q-1])) q--; + return a.substr(p, q-p); + } +} diff --git a/thirdparty/carve-1.4.0/common/write_ply.cpp b/thirdparty/carve-1.4.0/common/write_ply.cpp new file mode 100644 index 00000000..9084910c --- /dev/null +++ b/thirdparty/carve-1.4.0/common/write_ply.cpp @@ -0,0 +1,281 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include "write_ply.hpp" + +#include +#include +#include + +#include +#include +#include + +#ifndef WIN32 +# include +#endif + +namespace { + struct vertex_base : public gloop::stream::null_writer { + virtual const carve::geom3d::Vector &curr() const =0; + }; + + + template + struct vertex : public vertex_base { + const container_t &cnt; + int i; + vertex(const container_t &_cnt) : cnt(_cnt), i(-1) { } + virtual void next() { ++i; } + virtual int length() { return cnt.size(); } + virtual const carve::geom3d::Vector &curr() const { return cnt[i].v; } + }; + typedef vertex > pointset_vertex; + typedef vertex > > poly_vertex; + typedef vertex > line_vertex; + + + template + struct vertex_component : public gloop::stream::writer { + vertex_base &r; + vertex_component(vertex_base &_r) : r(_r) { } + virtual double value() { return r.curr().v[idx]; } + }; + + struct face : public gloop::stream::null_writer { + const carve::poly::Polyhedron *poly; + int i; + face(const carve::poly::Polyhedron *_poly) : poly(_poly), i(-1) { } + virtual void next() { ++i; } + virtual int length() { return poly->faces.size(); } + const carve::poly::Face<3> *curr() const { return &poly->faces[i]; } + }; + + + struct face_idx : public gloop::stream::writer { + face &r; + const carve::poly::Face<3> *f; + size_t i; + gloop::stream::Type data_type; + int max_length; + + face_idx(face &_r, gloop::stream::Type _data_type, int _max_length) : + r(_r), f(NULL), i(0), data_type(_data_type), max_length(_max_length) { + } + virtual void begin() { f = r.curr(); i = 0; } + virtual int length() { return f->nVertices(); } + + virtual bool isList() { return true; } + virtual gloop::stream::Type dataType() { return data_type; } + virtual int maxLength() { return max_length; } + + virtual size_t value() { return static_cast(f->owner)->vertexToIndex_fast(f->vertex(i++)); } + }; + + + struct lineset : public gloop::stream::null_writer { + const carve::line::PolylineSet *polyline; + carve::line::PolylineSet::const_line_iter c; + carve::line::PolylineSet::const_line_iter n; + lineset(const carve::line::PolylineSet *_polyline) : polyline(_polyline) { n = polyline->lines.begin(); } + virtual void next() { c = n; ++n; } + virtual int length() { return polyline->lines.size(); } + const carve::line::Polyline *curr() const { return *c; } + }; + + + struct line_closed : public gloop::stream::writer { + lineset &ls; + line_closed(lineset &_ls) : ls(_ls) { } + virtual gloop::stream::Type dataType() { return gloop::stream::U8; } + virtual bool value() { return ls.curr()->isClosed(); } + }; + + + struct line_vi : public gloop::stream::writer { + lineset &ls; + const carve::line::Polyline *l; + size_t i; + gloop::stream::Type data_type; + int max_length; + + line_vi(lineset &_ls, gloop::stream::Type _data_type, int _max_length) : + ls(_ls), l(NULL), i(0), data_type(_data_type), max_length(_max_length) { + } + virtual bool isList() { return true; } + virtual gloop::stream::Type dataType() { return data_type; } + virtual int maxLength() { return max_length; } + virtual void begin() { l = ls.curr(); i = 0; } + virtual int length() { return l->vertexCount(); } + virtual size_t value() { return ls.polyline->vertexToIndex_fast(l->vertex(i++)); } + }; + + + void setup(gloop::stream::model_writer &file, const carve::poly::Polyhedron *poly) { + size_t face_max = 0; + for (size_t i = 0; i < poly->faces.size(); ++i) face_max = std::max(face_max, poly->faces[i].nVertices()); + + file.newBlock("polyhedron"); + poly_vertex *vi = new poly_vertex(poly->vertices); + file.addWriter("polyhedron.vertex", vi); + file.addWriter("polyhedron.vertex.x", new vertex_component<0>(*vi)); + file.addWriter("polyhedron.vertex.y", new vertex_component<1>(*vi)); + file.addWriter("polyhedron.vertex.z", new vertex_component<2>(*vi)); + + face *fi = new face(poly); + file.addWriter("polyhedron.face", fi); + file.addWriter("polyhedron.face.vertex_indices", + new face_idx(*fi, + gloop::stream::smallest_type(poly->vertices.size()), + face_max)); + + } + + void setup(gloop::stream::model_writer &file, const carve::line::PolylineSet *lines) { + size_t line_max = 0; + for (std::list::const_iterator + i = lines->lines.begin(), + e = lines->lines.end(); + i != e; + ++i) { + line_max = std::max(line_max, (*i)->vertexCount()); + } + + file.newBlock("polyline"); + line_vertex *vi = new line_vertex(lines->vertices); + file.addWriter("polyline.vertex", vi); + file.addWriter("polyline.vertex.x", new vertex_component<0>(*vi)); + file.addWriter("polyline.vertex.y", new vertex_component<1>(*vi)); + file.addWriter("polyline.vertex.z", new vertex_component<2>(*vi)); + + lineset *pi = new lineset(lines); + file.addWriter("polyline.polyline", pi); + file.addWriter("polyline.polyline.closed", new line_closed(*pi)); + file.addWriter("polyline.polyline.vertex_indices", + new line_vi(*pi, + gloop::stream::smallest_type(lines->vertices.size()), + line_max)); + } + + void setup(gloop::stream::model_writer &file, const carve::point::PointSet *points) { + file.newBlock("pointset"); + pointset_vertex *vi = new pointset_vertex(points->vertices); + file.addWriter("pointset.vertex", vi); + file.addWriter("pointset.vertex.x", new vertex_component<0>(*vi)); + file.addWriter("pointset.vertex.y", new vertex_component<1>(*vi)); + file.addWriter("pointset.vertex.z", new vertex_component<2>(*vi)); + } + +} + +void writePLY(std::ostream &out, const carve::poly::Polyhedron *poly, bool ascii) { + gloop::ply::PlyWriter file(!ascii, false); + if (ascii) out << std::setprecision(30); + setup(file, poly); + file.write(out); +} + +void writePLY(std::string &out_file, const carve::poly::Polyhedron *poly, bool ascii) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writePLY(out, poly, ascii); +} + +void writePLY(std::ostream &out, const carve::line::PolylineSet *lines, bool ascii) { + gloop::ply::PlyWriter file(!ascii, false); + + if (ascii) out << std::setprecision(30); + setup(file, lines); + file.write(out); +} + +void writePLY(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writePLY(out, lines, ascii); +} + +void writePLY(std::ostream &out, const carve::point::PointSet *points, bool ascii) { + gloop::ply::PlyWriter file(!ascii, false); + + if (ascii) out << std::setprecision(30); + setup(file, points); + file.write(out); +} + +void writePLY(std::string &out_file, const carve::point::PointSet *points, bool ascii) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writePLY(out, points, ascii); +} + + + +void writeOBJ(std::ostream &out, const carve::poly::Polyhedron *poly) { + gloop::obj::ObjWriter file; + setup(file, poly); + file.write(out); +} + +void writeOBJ(std::string &out_file, const carve::poly::Polyhedron *poly) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writeOBJ(out, poly); +} + +void writeOBJ(std::ostream &out, const carve::line::PolylineSet *lines) { + gloop::obj::ObjWriter file; + setup(file, lines); + file.write(out); +} + +void writeOBJ(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writeOBJ(out, lines); +} + + + +void writeVTK(std::ostream &out, const carve::poly::Polyhedron *poly) { + gloop::vtk::VtkWriter file(gloop::vtk::VtkWriter::ASCII); + setup(file, poly); + file.write(out); +} + +void writeVTK(std::string &out_file, const carve::poly::Polyhedron *poly) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writeVTK(out, poly); +} + +void writeVTK(std::ostream &out, const carve::line::PolylineSet *lines) { + gloop::vtk::VtkWriter file(gloop::vtk::VtkWriter::ASCII); + setup(file, lines); + file.write(out); +} + +void writeVTK(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii) { + std::ofstream out(out_file.c_str(), std::ios_base::binary); + if (!out.is_open()) { std::cerr << "File '" << out_file << "' could not be opened." << std::endl; return; } + writeVTK(out, lines); +} + diff --git a/thirdparty/carve-1.4.0/common/write_ply.hpp b/thirdparty/carve-1.4.0/common/write_ply.hpp new file mode 100644 index 00000000..9cc8a537 --- /dev/null +++ b/thirdparty/carve-1.4.0/common/write_ply.hpp @@ -0,0 +1,49 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include + +#include +#include + + + +void writePLY(std::ostream &out, const carve::line::PolylineSet *lines, bool ascii = false); +void writePLY(std::ostream &out, const carve::poly::Polyhedron *poly, bool ascii = false); +void writePLY(std::ostream &out, const carve::point::PointSet *points, bool ascii = false); + +void writePLY(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii = false); +void writePLY(std::string &out_file, const carve::poly::Polyhedron *poly, bool ascii = false); +void writePLY(std::string &out_file, const carve::point::PointSet *points, bool ascii = false); + +void writeOBJ(std::ostream &out, const carve::line::PolylineSet *lines); +void writeOBJ(std::ostream &out, const carve::poly::Polyhedron *poly); + +void writeOBJ(std::string &out_file, const carve::line::PolylineSet *lines); +void writeOBJ(std::string &out_file, const carve::poly::Polyhedron *poly); + +void writeVTK(std::ostream &out, const carve::line::PolylineSet *lines); +void writeVTK(std::ostream &out, const carve::poly::Polyhedron *poly); + +void writeVTK(std::string &out_file, const carve::line::PolylineSet *lines); +void writeVTK(std::string &out_file, const carve::poly::Polyhedron *poly); diff --git a/thirdparty/carve-1.4.0/configure.ac b/thirdparty/carve-1.4.0/configure.ac new file mode 100644 index 00000000..d8fff734 --- /dev/null +++ b/thirdparty/carve-1.4.0/configure.ac @@ -0,0 +1,196 @@ +AC_INIT(README) +AC_CONFIG_AUX_DIR(build/autoconf) +AC_SUBST(ac_aux_dir) + +AC_CANONICAL_SYSTEM + +AC_CONFIG_SRCDIR([src]) +AM_CONFIG_HEADER(include/carve_config.h include/carve/config.h) +AM_INIT_AUTOMAKE(carve, 1.4.0, tobias.sargeant@gmail.com) +AC_DEFINE_UNQUOTED(CARVE_VERSION, ["${VERSION}"], [Carve version number]) + +AC_PROG_CC +AC_PROG_CPP +AM_PROG_LIBTOOL +AC_PROG_CXX + +AM_MAINTAINER_MODE + +AC_HEADER_STDC +AC_CHECK_HEADERS([stdint.h stdlib.h string.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_HEADER_STDBOOL +AC_C_BIGENDIAN +AC_TYPE_SIZE_T + +AC_LANG_CPLUSPLUS + +# Checks for library functions. +# AC_CHECK_FUNCS([floor getcwd getservbyname getaddrinfo gethostbyname gettimeofday memset select setlocale socket sqrt strerror strtoul inet_ntop inet_pton]) +AC_CHECK_FUNCS([isatty]) + +AC_ARG_WITH(tr1-collections, + AC_HELP_STRING([--with-tr1-collections], [use tr1 collections, where available]), + with_TR1="$withval", + with_TR1="yes") +AC_ARG_WITH(boost-collections, + AC_HELP_STRING([--with-boost-collections], [use boost collections]), + with_BOOST="$withval", + with_BOOST="no") +AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug], [compile in debug hooks [default=no]])) +AC_ARG_ENABLE(intersect-glu-triangulator, + AC_HELP_STRING([--enable-intersect-glu-triangulator], [compile GLU-based triangulation code into intersect [default=yes]]), + enable_GLU_tri="$enableval", + enable_GLU_tri="yes") +AC_ARG_WITH(gui, + AC_HELP_STRING([--with-gui], [compile gui code]), + with_GUI="$withval", + with_GUI="yes") + + +AC_MSG_CHECKING([for std collections]) +AC_TRY_COMPILE([ +#include +#include +], [ +const std::unordered_map a; +const std::unordered_set b; +a.find(1); +b.find(1); +], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_STD_UNORDERED_COLLECTIONS], [], [Define if std::unordered_map and std::unordered_set are supported by your compiler.]) + with_TR1=no +], [ + AC_MSG_RESULT([no]) +]) + + +AC_MSG_CHECKING([for gnu libstdc++ collections]) +AC_TRY_COMPILE([ +#include +#include +], [ +const __gnu_cxx::hash_map a; +const __gnu_cxx::hash_set b; +a.find(1); +b.find(1); +], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS], [], [Define if using gnu libstdc++.]) + with_TR1=no +], [ + AC_MSG_RESULT([no]) +]) + + +if test "x$with_TR1" = "xyes"; then + AC_MSG_CHECKING([for TR1 collections]) + AC_TRY_COMPILE([ +#include +#include +],[ +std::tr1::unordered_map a; +std::tr1::unordered_set b; +], [ + AC_TRY_COMPILE([ +#include +#include +],[ +const std::tr1::unordered_map a; +const std::tr1::unordered_set b; +a.find(1); +b.find(1); +], [ + AC_MSG_RESULT([yes]) + with_TR1=yes +], [ + AC_MSG_RESULT([yes, but unusable (const issues)]) + with_TR1=no +])], [ + AC_MSG_RESULT([no]) + with_TR1=no +]) +fi + + +if test "x$with_TR1" = "xyes"; then + AC_DEFINE([HAVE_TR1_UNORDERED_COLLECTIONS], [], [Define if TR1 collections are supportted by your compiler.]) +fi + + +if test "x$with_BOOST" != "xno"; then + AC_DEFINE([HAVE_BOOST_UNORDERED_COLLECTIONS], [], [Define if using boost collections.]) + CARVE_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="${CPPFLAGS} -I$ac_confdir/include" + AC_MSG_CHECKING([for boost collections]) + AC_TRY_COMPILE([ +#include +#include +],[ +const boost::unordered_map a; +const boost::unordered_set b; +a.find(1); +b.find(1); +], [ + AC_MSG_RESULT([yes]) + with_BOOST=yes +], [ + AC_MSG_RESULT([no]) + with_BOOST=no +]) + CPPFLAGS=$CARVE_save_CPPFLAGS +fi + + +if test x$enable_debug = xyes; then + CPPFLAGS="${CPPFLAGS} -DDEBUG" +fi + + +CARVE_CHECK_OPENGL +if test x"$have_GL" = xno; then AC_MSG_NOTICE([missing GL]); with_GUI=no; fi +if test x"$have_GLU" = xno; then AC_MSG_NOTICE([missing GLU]); with_GUI=no; fi +if test x"$have_glut" = xno; then AC_MSG_NOTICE([missing glut]); with_GUI=no; fi + +if test x"$have_GLU" = xyes; then + AC_MSG_CHECKING([glu callback prototype]) + AC_TRY_COMPILE([ +#if defined(__APPLE__) +#include +#else +#include +#endif +],[ + typedef GLvoid (*GLUTessCallback)(...); + gluTessCallback((GLUtesselator *)NULL, GLU_TESS_END_DATA, (GLUTessCallback)NULL); +], [ + AC_MSG_RESULT([varargs]) + AC_DEFINE([GLU_TESS_CALLBACK_VARARGS], [], [Define if gluTessCallback callback prototype needs (...).]) +], [ + AC_MSG_RESULT([no varargs]) +]) +fi + +AM_CONDITIONAL(enable_GLU_tri, test "x$enable_GLU_tri" = "xyes") +AM_CONDITIONAL(with_GUI, test "x$with_GUI" = "xyes") +AM_CONDITIONAL(with_BOOST, test "x$with_BOOST" != "xno") + +AC_SUBST(GL_CFLAGS) +AC_SUBST(GL_LIBS) +AC_SUBST(GLUT_CFLAGS) +AC_SUBST(GLUT_LIBS) + +AC_OUTPUT([ + Makefile lib/Makefile common/Makefile src/Makefile + tests/Makefile examples/Makefile + external/Makefile + external/GLEW/Makefile external/GLOOP/Makefile + external/GLUI/Makefile include/Makefile include/carve/Makefile + include/carve/collection/Makefile + include/carve/collection/unordered/Makefile +]) diff --git a/thirdparty/carve-1.4.0/data/armadillo.ply b/thirdparty/carve-1.4.0/data/armadillo.ply new file mode 100644 index 00000000..a489379a Binary files /dev/null and b/thirdparty/carve-1.4.0/data/armadillo.ply differ diff --git a/thirdparty/carve-1.4.0/data/bunny2.ply b/thirdparty/carve-1.4.0/data/bunny2.ply new file mode 100644 index 00000000..c17cfa4a Binary files /dev/null and b/thirdparty/carve-1.4.0/data/bunny2.ply differ diff --git a/thirdparty/carve-1.4.0/data/case2_A.ply b/thirdparty/carve-1.4.0/data/case2_A.ply new file mode 100755 index 00000000..0d080acb Binary files /dev/null and b/thirdparty/carve-1.4.0/data/case2_A.ply differ diff --git a/thirdparty/carve-1.4.0/data/case2_A_intersect_B.ply b/thirdparty/carve-1.4.0/data/case2_A_intersect_B.ply new file mode 100755 index 00000000..a0c34846 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/case2_A_intersect_B.ply @@ -0,0 +1,9 @@ +ply +format binary_little_endian 1.0 +element vertex 0 +property double x +property double y +property double z +element face 0 +property list uchar uchar vertex_indices +end_header diff --git a/thirdparty/carve-1.4.0/data/case2_B.ply b/thirdparty/carve-1.4.0/data/case2_B.ply new file mode 100755 index 00000000..d538344d Binary files /dev/null and b/thirdparty/carve-1.4.0/data/case2_B.ply differ diff --git a/thirdparty/carve-1.4.0/data/conedown.ply b/thirdparty/carve-1.4.0/data/conedown.ply new file mode 100644 index 00000000..ab31811e --- /dev/null +++ b/thirdparty/carve-1.4.0/data/conedown.ply @@ -0,0 +1,122 @@ +ply +format ascii 1.0 +element vertex 39 +property double x +property double y +property double z +element face 74 +property list uchar uchar vertex_indices +end_header +-0.494999999999999995559107901499 -0.0413874231151109966964085629115 200 +-0.494999999999999995559107901499 0.0413874231000000009084160979 200 +-0.480866355004785972493408507944 -0.125316851986600003021621319022 200 +-0.480866354997726008768665906246 0.125316852013504009821787121837 200 +-0.450845059114832025226604628187 -0.209372724678484001259448632482 200 +-0.450845059006611981189394100511 0.20937272498862399827679325881 200 +-0.404523252922430021083499696033 0.289071153133462988016333383712 200 +-0.404523252781063991090348963553 -0.289071153252449974946358679517 200 +-0.343189517120469023137019348724 0.359793787905108020108713162699 200 +-0.343189516935544003395364143216 -0.359793788074322995473863784355 200 +-0.26981275608929200515717639064 -0.41759188495350302305908485323 200 +-0.269812755966678974317574102315 0.417591885026246001366700966173 200 +-0.18858395204169500769530998241 0.459889827987183974489227011873 200 +-0.188583951970679009058073916094 -0.459889828015268009586691277946 200 +-0.104160784034585993107491219689 -0.485839705995682991090944824464 200 +-0.10416078396171199460518153046 0.485839706011769012494738717578 200 +-0.0307741189559969999245403471377 0.494999999999999995559107901499 200 +-0.0307741189026270005324459333451 -0.494999999999999995559107901499 200 +0 0 -1 +0.0100849045556969992704088312507 -0.494999999999999995559107901499 200 +0.0100849045897920003983516679114 0.494999999999999995559107901499 200 +0.062137555078774997507906618921 0.49287812500452499175906950768 200 +0.0621375552145759998956542347059 -0.492878124990966004492776164625 200 +0.146484821838305995234108536351 0.474893355034476993825620638745 200 +0.146484821860212999222738972094 -0.474893355043605025489483750789 200 +0.229889933133993001890260643449 0.440772940913512989435929512183 200 +0.229889933136291996218503186356 -0.440772940928581991038015530648 200 +0.307765227800700980065329304125 -0.390507867152336984872817993164 200 +0.307765227980898004034315817989 0.390507867012329978884110914805 200 +0.375583330013183003259769066062 0.325826383981538014733558838998 200 +0.375583330169319995484045193734 -0.325826383836102018154434745156 200 +0.429683015914633981147119357047 -0.250061312166508009635634834922 200 +0.429683016004424989109367061246 0.250061311993802992681423802424 200 +0.467904598976019991951602605695 -0.16759724006988099831438887577 200 +0.467904598998025000877731827131 0.167597240007610004397520242492 200 +0.489834868960314973040937047699 0.0830808390746820002448203013046 200 +0.489834868989419025542275676344 -0.0830808390164750054651676691719 200 +0.494999999999999995559107901499 -0.0203414705465549995599960908521 200 +0.494999999999999995559107901499 0.0203414704883469986407273921714 200 +3 18 36 33 +3 18 31 30 +3 32 34 18 +3 18 27 26 +3 28 29 18 +3 18 24 22 +3 23 25 18 +3 18 19 17 +3 20 21 18 +3 18 14 13 +3 15 16 18 +3 18 10 9 +3 11 12 18 +3 18 7 4 +3 6 8 18 +3 18 2 0 +3 3 5 18 +3 0 1 18 +3 18 1 3 +3 4 2 18 +3 18 5 6 +3 9 7 18 +3 18 8 11 +3 13 10 18 +3 18 12 15 +3 17 14 18 +3 18 16 20 +3 22 19 18 +3 18 21 23 +3 26 24 18 +3 18 25 28 +3 30 27 18 +3 18 29 32 +3 33 31 18 +3 34 35 18 +3 18 38 37 +3 18 37 36 +3 35 38 18 +3 38 35 37 +3 34 32 35 +3 29 28 32 +3 25 23 28 +3 21 20 23 +3 16 15 20 +3 12 11 15 +3 8 6 11 +3 5 3 6 +3 1 0 3 +3 2 4 0 +3 7 9 4 +3 10 13 9 +3 14 17 13 +3 19 22 17 +3 24 26 22 +3 27 30 26 +3 31 33 30 +3 36 37 33 +3 35 32 37 +3 28 23 32 +3 20 15 23 +3 11 6 15 +3 3 0 6 +3 4 9 0 +3 13 17 9 +3 22 26 17 +3 30 33 26 +3 37 32 33 +3 32 23 33 +3 15 6 23 +3 0 9 6 +3 17 26 9 +3 33 23 26 +3 23 6 26 +3 9 26 6 diff --git a/thirdparty/carve-1.4.0/data/coneup.ply b/thirdparty/carve-1.4.0/data/coneup.ply new file mode 100644 index 00000000..f5297780 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/coneup.ply @@ -0,0 +1,122 @@ +ply +format ascii 1.0 +element vertex 39 +property double x +property double y +property double z +element face 74 +property list uchar uchar vertex_indices +end_header +-0.494999999999999995559107901499 -0.0413874231151109966964085629115 -200 +-0.494999999999999995559107901499 0.0413874231000000009084160979 -200 +-0.480866355004785972493408507944 -0.125316851986600003021621319022 -200 +-0.480866354997726008768665906246 0.125316852013504009821787121837 -200 +-0.450845059114832025226604628187 -0.209372724678484001259448632482 -200 +-0.450845059006611981189394100511 0.20937272498862399827679325881 -200 +-0.404523252922430021083499696033 0.289071153133462988016333383712 -200 +-0.404523252781063991090348963553 -0.289071153252449974946358679517 -200 +-0.343189517120469023137019348724 0.359793787905108020108713162699 -200 +-0.343189516935544003395364143216 -0.359793788074322995473863784355 -200 +-0.26981275608929200515717639064 -0.41759188495350302305908485323 -200 +-0.269812755966678974317574102315 0.417591885026246001366700966173 -200 +-0.18858395204169500769530998241 0.459889827987183974489227011873 -200 +-0.188583951970679009058073916094 -0.459889828015268009586691277946 -200 +-0.104160784034585993107491219689 -0.485839705995682991090944824464 -200 +-0.10416078396171199460518153046 0.485839706011769012494738717578 -200 +-0.0307741189559969999245403471377 0.494999999999999995559107901499 -200 +-0.0307741189026270005324459333451 -0.494999999999999995559107901499 -200 +0 0 1 +0.0100849045556969992704088312507 -0.494999999999999995559107901499 -200 +0.0100849045897920003983516679114 0.494999999999999995559107901499 -200 +0.062137555078774997507906618921 0.49287812500452499175906950768 -200 +0.0621375552145759998956542347059 -0.492878124990966004492776164625 -200 +0.146484821838305995234108536351 0.474893355034476993825620638745 -200 +0.146484821860212999222738972094 -0.474893355043605025489483750789 -200 +0.229889933133993001890260643449 0.440772940913512989435929512183 -200 +0.229889933136291996218503186356 -0.440772940928581991038015530648 -200 +0.307765227800700980065329304125 -0.390507867152336984872817993164 -200 +0.307765227980898004034315817989 0.390507867012329978884110914805 -200 +0.375583330013183003259769066062 0.325826383981538014733558838998 -200 +0.375583330169319995484045193734 -0.325826383836102018154434745156 -200 +0.429683015914633981147119357047 -0.250061312166508009635634834922 -200 +0.429683016004424989109367061246 0.250061311993802992681423802424 -200 +0.467904598976019991951602605695 -0.16759724006988099831438887577 -200 +0.467904598998025000877731827131 0.167597240007610004397520242492 -200 +0.489834868960314973040937047699 0.0830808390746820002448203013046 -200 +0.489834868989419025542275676344 -0.0830808390164750054651676691719 -200 +0.494999999999999995559107901499 -0.0203414705465549995599960908521 -200 +0.494999999999999995559107901499 0.0203414704883469986407273921714 -200 +3 36 18 33 +3 31 18 30 +3 34 32 18 +3 27 18 26 +3 29 28 18 +3 24 18 22 +3 25 23 18 +3 19 18 17 +3 21 20 18 +3 14 18 13 +3 16 15 18 +3 10 18 9 +3 12 11 18 +3 7 18 4 +3 8 6 18 +3 2 18 0 +3 5 3 18 +3 1 0 18 +3 1 18 3 +3 2 4 18 +3 5 18 6 +3 7 9 18 +3 8 18 11 +3 10 13 18 +3 12 18 15 +3 14 17 18 +3 16 18 20 +3 19 22 18 +3 21 18 23 +3 24 26 18 +3 25 18 28 +3 27 30 18 +3 29 18 32 +3 31 33 18 +3 35 34 18 +3 38 18 37 +3 37 18 36 +3 38 35 18 +3 35 38 37 +3 32 34 35 +3 28 29 32 +3 23 25 28 +3 20 21 23 +3 15 16 20 +3 11 12 15 +3 6 8 11 +3 3 5 6 +3 0 1 3 +3 4 2 0 +3 9 7 4 +3 13 10 9 +3 17 14 13 +3 22 19 17 +3 26 24 22 +3 30 27 26 +3 33 31 30 +3 37 36 33 +3 32 35 37 +3 23 28 32 +3 15 20 23 +3 6 11 15 +3 0 3 6 +3 9 4 0 +3 17 13 9 +3 26 22 17 +3 33 30 26 +3 32 37 33 +3 23 32 33 +3 6 15 23 +3 9 0 6 +3 26 17 9 +3 23 33 26 +3 6 23 26 +3 26 9 6 diff --git a/thirdparty/carve-1.4.0/data/cow.ply b/thirdparty/carve-1.4.0/data/cow.ply new file mode 100644 index 00000000..9da3b46a Binary files /dev/null and b/thirdparty/carve-1.4.0/data/cow.ply differ diff --git a/thirdparty/carve-1.4.0/data/cow2.ply b/thirdparty/carve-1.4.0/data/cow2.ply new file mode 100644 index 00000000..492f51a0 Binary files /dev/null and b/thirdparty/carve-1.4.0/data/cow2.ply differ diff --git a/thirdparty/carve-1.4.0/data/cube.ply b/thirdparty/carve-1.4.0/data/cube.ply new file mode 100644 index 00000000..10256354 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/cube.ply @@ -0,0 +1,29 @@ +ply +format ascii 1.0 +element vertex 8 +property double x +property double y +property double z +element face 12 +property list uchar uchar vertex_indices +end_header +-1 -1 -1 +-1 -1 1 +-1 1 -1 +-1 1 1 +1 -1 -1 +1 -1 1 +1 1 -1 +1 1 1 +3 7 3 1 +3 7 1 5 +3 4 0 2 +3 4 2 6 +3 7 6 2 +3 7 2 3 +3 3 2 0 +3 3 0 1 +3 1 0 4 +3 1 4 5 +3 5 4 6 +3 5 6 7 diff --git a/thirdparty/carve-1.4.0/data/cylinderx.ply b/thirdparty/carve-1.4.0/data/cylinderx.ply new file mode 100644 index 00000000..a667e912 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/cylinderx.ply @@ -0,0 +1,233 @@ +ply +format ascii 1.0 +element vertex 76 +property double x +property double y +property double z +element face 148 +property list uchar uchar vertex_indices +end_header +-0.5 -0.494999999999999995559107901499 -0.0203414706000000014562978378763 +-0.5 -0.494999999999999995559107901499 0.0203414706000010006570200005172 +-0.5 -0.489834869000000006078465730752 -0.0830808390000000035469085446493 +-0.5 -0.489834869000000006078465730752 0.0830808390000000035469085446493 +-0.5 -0.467904598999999976616237518101 -0.167597240000000008430802722614 +-0.5 -0.467904598999999976616237518101 0.167597240000000008430802722614 +-0.5 -0.429683015999999973200118574823 -0.250061311999999980049125269943 +-0.5 -0.429683015999999973200118574823 0.250061311999999980049125269943 +-0.5 -0.37558332999999999302076503227 -0.325826384000000024432353029624 +-0.5 -0.37558332999999999302076503227 0.325826384000000024432353029624 +-0.5 -0.307765228000001000996377342744 -0.390507867000000008506077620041 +-0.5 -0.307765228000000001795655180103 0.390507867000000008506077620041 +-0.5 -0.229889932999999990759221191183 0.440772940999999973676892750518 +-0.5 -0.229889932999998991558499028542 -0.440772940999999973676892750518 +-0.5 -0.146484822000001013719838738325 -0.474893355000000016996608565023 +-0.5 -0.146484821999999986763540960055 0.474893355000000016996608565023 +-0.5 -0.0621375550999999984314037249078 -0.49287812500000000026645352591 +-0.5 -0.0621375550999999984314037249078 0.49287812500000000026645352591 +-0.5 -0.0100849045000009993749978676192 -0.494999999999999995559107901499 +-0.5 -0.0100849045000009993749978676192 0.494999999999999995559107901499 +-0.5 0.0307741189000010004206409064409 -0.494999999999999995559107901499 +-0.5 0.0307741189000010004206409064409 0.494999999999999995559107901499 +-0.5 0.104160783999998993176738792954 -0.485839705999999982299897283156 +-0.5 0.104160783999998993176738792954 0.485839705999999982299897283156 +-0.5 0.188583952000000998339146462968 -0.45988982800000000050744120017 +-0.5 0.188583952000000998339146462968 0.45988982800000000050744120017 +-0.5 0.269812755999998987732624300406 0.417591884999999995997654878011 +-0.5 0.269812755999999986933346463047 -0.417591884999999995997654878011 +-0.5 0.343189516999999999491421931452 -0.359793788000000003268752379881 +-0.5 0.343189517000000998692144094093 0.35979378799999900406803021724 +-0.5 0.404523253000000027057581064582 -0.289071153000000025112825596807 +-0.5 0.404523253000000027057581064582 0.289071153000000025112825596807 +-0.5 0.450845058999999992455087749477 -0.209372725000000009520917387817 +-0.5 0.450845058999999992455087749477 0.209372725000000009520917387817 +-0.5 0.48086635500000002307885438313 -0.12531685200000000635078833966 +-0.5 0.48086635500000002307885438313 0.125316851999999007150066177019 +-0.5 0.494999999999999995559107901499 -0.0413874231000000009084160979 +-0.5 0.494999999999999995559107901499 0.0413874231000010001091382605409 +0.5 -0.494999999999999995559107901499 -0.0203414706000000014562978378763 +0.5 -0.494999999999999995559107901499 0.0203414706000010006570200005172 +0.5 -0.489834869000000006078465730752 -0.0830808390000000035469085446493 +0.5 -0.489834869000000006078465730752 0.0830808390000000035469085446493 +0.5 -0.467904598999999976616237518101 -0.167597240000000008430802722614 +0.5 -0.467904598999999976616237518101 0.167597240000000008430802722614 +0.5 -0.429683015999999973200118574823 -0.250061311999999980049125269943 +0.5 -0.429683015999999973200118574823 0.250061311999999980049125269943 +0.5 -0.37558332999999999302076503227 -0.325826384000000024432353029624 +0.5 -0.37558332999999999302076503227 0.325826384000000024432353029624 +0.5 -0.307765228000001000996377342744 0.390507867000000008506077620041 +0.5 -0.307765228000000001795655180103 -0.390507867000000008506077620041 +0.5 -0.229889932999999990759221191183 -0.440772940999999973676892750518 +0.5 -0.229889932999998991558499028542 0.440772940999999973676892750518 +0.5 -0.146484822000001013719838738325 0.474893355000000016996608565023 +0.5 -0.146484821999999986763540960055 -0.474893355000000016996608565023 +0.5 -0.0621375550999999984314037249078 -0.49287812500000000026645352591 +0.5 -0.0621375550999999984314037249078 0.49287812500000000026645352591 +0.5 -0.0100849045000009993749978676192 -0.494999999999999995559107901499 +0.5 -0.0100849045000009993749978676192 0.494999999999999995559107901499 +0.5 0.0307741189000010004206409064409 -0.494999999999999995559107901499 +0.5 0.0307741189000010004206409064409 0.494999999999999995559107901499 +0.5 0.104160783999998993176738792954 -0.485839705999999982299897283156 +0.5 0.104160783999998993176738792954 0.485839705999999982299897283156 +0.5 0.188583951999999999138424300327 -0.45988982800000000050744120017 +0.5 0.188583952000000998339146462968 0.45988982800000000050744120017 +0.5 0.269812755999998987732624300406 0.417591884999999995997654878011 +0.5 0.269812755999999986933346463047 -0.417591884999999995997654878011 +0.5 0.343189516999999999491421931452 -0.359793788000000003268752379881 +0.5 0.343189516999999999491421931452 0.359793788000000003268752379881 +0.5 0.404523253000000027057581064582 -0.289071153000000025112825596807 +0.5 0.404523253000000027057581064582 0.289071153000000025112825596807 +0.5 0.450845058999999992455087749477 -0.209372725000000009520917387817 +0.5 0.450845058999999992455087749477 0.209372725000000009520917387817 +0.5 0.48086635500000002307885438313 -0.12531685200000000635078833966 +0.5 0.48086635500000002307885438313 0.12531685200000000635078833966 +0.5 0.494999999999999995559107901499 -0.0413874231000010001091382605409 +0.5 0.494999999999999995559107901499 0.0413874231000000009084160979 +3 23 61 63 +3 63 25 23 +3 60 58 20 +3 20 22 60 +3 26 64 67 +3 67 29 26 +3 65 62 24 +3 24 27 65 +3 33 31 69 +3 69 71 33 +3 68 66 28 +3 28 30 68 +3 37 35 73 +3 73 75 37 +3 72 70 32 +3 32 34 72 +3 75 74 36 +3 36 37 75 +3 34 36 74 +3 74 72 34 +3 71 73 35 +3 35 33 71 +3 30 32 70 +3 70 68 30 +3 67 69 31 +3 31 29 67 +3 27 28 66 +3 66 65 27 +3 64 26 25 +3 25 63 64 +3 22 24 62 +3 62 60 22 +3 21 59 61 +3 61 23 21 +3 41 3 1 +3 1 39 41 +3 0 38 39 +3 39 1 0 +3 43 5 3 +3 3 41 43 +3 2 40 38 +3 38 0 2 +3 45 7 5 +3 5 43 45 +3 4 42 40 +3 40 2 4 +3 47 9 7 +3 7 45 47 +3 6 44 42 +3 42 4 6 +3 48 11 9 +3 9 47 48 +3 8 46 44 +3 44 6 8 +3 51 12 11 +3 11 48 51 +3 8 10 49 +3 49 46 8 +3 52 15 12 +3 12 51 52 +3 10 13 50 +3 50 49 10 +3 55 17 15 +3 15 52 55 +3 13 14 53 +3 53 50 13 +3 57 19 17 +3 17 55 57 +3 14 16 54 +3 54 53 14 +3 19 57 59 +3 59 21 19 +3 16 18 56 +3 56 54 16 +3 53 54 56 +3 49 50 53 +3 44 46 49 +3 40 42 44 +3 39 38 40 +3 43 41 39 +3 47 45 43 +3 51 48 47 +3 55 52 51 +3 59 57 55 +3 63 61 59 +3 67 64 63 +3 71 69 67 +3 75 73 71 +3 72 74 75 +3 68 70 72 +3 65 66 68 +3 60 62 65 +3 56 58 60 +3 49 53 56 +3 40 44 49 +3 43 39 40 +3 51 47 43 +3 59 55 51 +3 67 63 59 +3 75 71 67 +3 68 72 75 +3 60 65 68 +3 49 56 60 +3 40 49 60 +3 51 43 40 +3 67 59 51 +3 68 75 67 +3 40 60 68 +3 51 40 68 +3 68 67 51 +3 58 56 18 +3 18 20 58 +3 20 18 16 +3 16 14 13 +3 13 10 8 +3 8 6 4 +3 4 2 0 +3 0 1 3 +3 3 5 7 +3 7 9 11 +3 11 12 15 +3 15 17 19 +3 19 21 23 +3 23 25 26 +3 26 29 31 +3 31 33 35 +3 35 37 36 +3 36 34 32 +3 32 30 28 +3 28 27 24 +3 24 22 20 +3 20 16 13 +3 13 8 4 +3 4 0 3 +3 3 7 11 +3 11 15 19 +3 19 23 26 +3 26 31 35 +3 35 36 32 +3 32 28 24 +3 24 20 13 +3 24 13 4 +3 4 3 11 +3 11 19 26 +3 26 35 32 +3 32 24 4 +3 32 4 11 +3 11 26 32 diff --git a/thirdparty/carve-1.4.0/data/cylindery.ply b/thirdparty/carve-1.4.0/data/cylindery.ply new file mode 100644 index 00000000..a629a7c8 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/cylindery.ply @@ -0,0 +1,233 @@ +ply +format ascii 1.0 +element vertex 76 +property double x +property double y +property double z +element face 148 +property list uchar uchar vertex_indices +end_header +-0.494999999999999995559107901499 -0.5 -0.0413874231000000009084160979 +-0.494999999999999995559107901499 -0.5 0.0413874231000010001091382605409 +-0.494999999999999995559107901499 0.5 -0.0413874231000010001091382605409 +-0.494999999999999995559107901499 0.5 0.0413874231000000009084160979 +-0.48086635500000002307885438313 -0.5 -0.12531685200000000635078833966 +-0.48086635500000002307885438313 -0.5 0.125316851999999007150066177019 +-0.48086635500000002307885438313 0.5 -0.12531685200000000635078833966 +-0.48086635500000002307885438313 0.5 0.12531685200000000635078833966 +-0.450845058999999992455087749477 -0.5 -0.209372725000000009520917387817 +-0.450845058999999992455087749477 -0.5 0.209372725000000009520917387817 +-0.450845058999999992455087749477 0.5 -0.209372725000000009520917387817 +-0.450845058999999992455087749477 0.5 0.209372725000000009520917387817 +-0.404523253000000027057581064582 -0.5 -0.289071153000000025112825596807 +-0.404523253000000027057581064582 -0.5 0.289071153000000025112825596807 +-0.404523253000000027057581064582 0.5 -0.289071153000000025112825596807 +-0.404523253000000027057581064582 0.5 0.289071153000000025112825596807 +-0.343189517000000998692144094093 -0.5 0.35979378799999900406803021724 +-0.343189516999999999491421931452 -0.5 -0.359793788000000003268752379881 +-0.343189516999999999491421931452 0.5 -0.359793788000000003268752379881 +-0.343189516999999999491421931452 0.5 0.359793788000000003268752379881 +-0.269812755999999986933346463047 -0.5 -0.417591884999999995997654878011 +-0.269812755999999986933346463047 0.5 -0.417591884999999995997654878011 +-0.269812755999998987732624300406 -0.5 0.417591884999999995997654878011 +-0.269812755999998987732624300406 0.5 0.417591884999999995997654878011 +-0.188583952000000998339146462968 -0.5 -0.45988982800000000050744120017 +-0.188583952000000998339146462968 -0.5 0.45988982800000000050744120017 +-0.188583952000000998339146462968 0.5 0.45988982800000000050744120017 +-0.188583951999999999138424300327 0.5 -0.45988982800000000050744120017 +-0.104160783999998993176738792954 -0.5 -0.485839705999999982299897283156 +-0.104160783999998993176738792954 -0.5 0.485839705999999982299897283156 +-0.104160783999998993176738792954 0.5 -0.485839705999999982299897283156 +-0.104160783999998993176738792954 0.5 0.485839705999999982299897283156 +-0.0307741189000010004206409064409 -0.5 -0.494999999999999995559107901499 +-0.0307741189000010004206409064409 -0.5 0.494999999999999995559107901499 +-0.0307741189000010004206409064409 0.5 -0.494999999999999995559107901499 +-0.0307741189000010004206409064409 0.5 0.494999999999999995559107901499 +0.0100849045000009993749978676192 -0.5 -0.494999999999999995559107901499 +0.0100849045000009993749978676192 -0.5 0.494999999999999995559107901499 +0.0100849045000009993749978676192 0.5 -0.494999999999999995559107901499 +0.0100849045000009993749978676192 0.5 0.494999999999999995559107901499 +0.0621375550999999984314037249078 -0.5 -0.49287812500000000026645352591 +0.0621375550999999984314037249078 -0.5 0.49287812500000000026645352591 +0.0621375550999999984314037249078 0.5 -0.49287812500000000026645352591 +0.0621375550999999984314037249078 0.5 0.49287812500000000026645352591 +0.146484821999999986763540960055 -0.5 0.474893355000000016996608565023 +0.146484821999999986763540960055 0.5 -0.474893355000000016996608565023 +0.146484822000001013719838738325 -0.5 -0.474893355000000016996608565023 +0.146484822000001013719838738325 0.5 0.474893355000000016996608565023 +0.229889932999998991558499028542 -0.5 -0.440772940999999973676892750518 +0.229889932999998991558499028542 0.5 0.440772940999999973676892750518 +0.229889932999999990759221191183 -0.5 0.440772940999999973676892750518 +0.229889932999999990759221191183 0.5 -0.440772940999999973676892750518 +0.307765228000000001795655180103 -0.5 0.390507867000000008506077620041 +0.307765228000000001795655180103 0.5 -0.390507867000000008506077620041 +0.307765228000001000996377342744 -0.5 -0.390507867000000008506077620041 +0.307765228000001000996377342744 0.5 0.390507867000000008506077620041 +0.37558332999999999302076503227 -0.5 -0.325826384000000024432353029624 +0.37558332999999999302076503227 -0.5 0.325826384000000024432353029624 +0.37558332999999999302076503227 0.5 -0.325826384000000024432353029624 +0.37558332999999999302076503227 0.5 0.325826384000000024432353029624 +0.429683015999999973200118574823 -0.5 -0.250061311999999980049125269943 +0.429683015999999973200118574823 -0.5 0.250061311999999980049125269943 +0.429683015999999973200118574823 0.5 -0.250061311999999980049125269943 +0.429683015999999973200118574823 0.5 0.250061311999999980049125269943 +0.467904598999999976616237518101 -0.5 -0.167597240000000008430802722614 +0.467904598999999976616237518101 -0.5 0.167597240000000008430802722614 +0.467904598999999976616237518101 0.5 -0.167597240000000008430802722614 +0.467904598999999976616237518101 0.5 0.167597240000000008430802722614 +0.489834869000000006078465730752 -0.5 -0.0830808390000000035469085446493 +0.489834869000000006078465730752 -0.5 0.0830808390000000035469085446493 +0.489834869000000006078465730752 0.5 -0.0830808390000000035469085446493 +0.489834869000000006078465730752 0.5 0.0830808390000000035469085446493 +0.494999999999999995559107901499 -0.5 -0.0203414706000000014562978378763 +0.494999999999999995559107901499 -0.5 0.0203414706000010006570200005172 +0.494999999999999995559107901499 0.5 -0.0203414706000000014562978378763 +0.494999999999999995559107901499 0.5 0.0203414706000010006570200005172 +3 29 31 26 +3 26 25 29 +3 30 34 32 +3 32 28 30 +3 22 23 19 +3 19 16 22 +3 21 27 24 +3 24 20 21 +3 13 15 11 +3 11 9 13 +3 18 17 12 +3 12 14 18 +3 5 7 3 +3 3 1 5 +3 10 8 4 +3 4 6 10 +3 2 0 1 +3 1 3 2 +3 0 2 6 +3 6 4 0 +3 7 5 9 +3 9 11 7 +3 8 10 14 +3 14 12 8 +3 15 13 16 +3 16 19 15 +3 20 17 18 +3 18 21 20 +3 23 22 25 +3 25 26 23 +3 28 24 27 +3 27 30 28 +3 33 35 31 +3 31 29 33 +3 75 71 69 +3 69 73 75 +3 73 72 74 +3 74 75 73 +3 71 67 65 +3 65 69 71 +3 72 68 70 +3 70 74 72 +3 67 63 61 +3 61 65 67 +3 68 64 66 +3 66 70 68 +3 63 59 57 +3 57 61 63 +3 64 60 62 +3 62 66 64 +3 55 52 57 +3 57 59 55 +3 60 56 58 +3 58 62 60 +3 49 50 52 +3 52 55 49 +3 56 54 53 +3 53 58 56 +3 47 44 50 +3 50 49 47 +3 54 48 51 +3 51 53 54 +3 43 41 44 +3 44 47 43 +3 48 46 45 +3 45 51 48 +3 39 37 41 +3 41 43 39 +3 46 40 42 +3 42 45 46 +3 37 39 35 +3 35 33 37 +3 40 36 38 +3 38 42 40 +3 45 42 38 +3 53 51 45 +3 62 58 53 +3 70 66 62 +3 75 74 70 +3 67 71 75 +3 59 63 67 +3 49 55 59 +3 43 47 49 +3 35 39 43 +3 26 31 35 +3 19 23 26 +3 11 15 19 +3 3 7 11 +3 6 2 3 +3 14 10 6 +3 21 18 14 +3 30 27 21 +3 38 34 30 +3 53 45 38 +3 70 62 53 +3 67 75 70 +3 49 59 67 +3 35 43 49 +3 19 26 35 +3 3 11 19 +3 14 6 3 +3 30 21 14 +3 53 38 30 +3 70 53 30 +3 49 67 70 +3 19 35 49 +3 14 3 19 +3 70 30 14 +3 49 70 14 +3 14 19 49 +3 34 38 36 +3 36 32 34 +3 32 36 40 +3 40 46 48 +3 48 54 56 +3 56 60 64 +3 64 68 72 +3 72 73 69 +3 69 65 61 +3 61 57 52 +3 52 50 44 +3 44 41 37 +3 37 33 29 +3 29 25 22 +3 22 16 13 +3 13 9 5 +3 5 1 0 +3 0 4 8 +3 8 12 17 +3 17 20 24 +3 24 28 32 +3 32 40 48 +3 48 56 64 +3 64 72 69 +3 69 61 52 +3 52 44 37 +3 37 29 22 +3 22 13 5 +3 5 0 8 +3 8 17 24 +3 24 32 48 +3 24 48 64 +3 64 69 52 +3 52 37 22 +3 22 5 8 +3 8 24 64 +3 8 64 52 +3 52 22 8 diff --git a/thirdparty/carve-1.4.0/data/cylinderz.ply b/thirdparty/carve-1.4.0/data/cylinderz.ply new file mode 100644 index 00000000..6051fe51 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/cylinderz.ply @@ -0,0 +1,233 @@ +ply +format ascii 1.0 +element vertex 76 +property double x +property double y +property double z +element face 148 +property list uchar uchar vertex_indices +end_header +-0.494999999999999995559107901499 -0.0413874231000010001091382605409 -0.5 +-0.494999999999999995559107901499 -0.0413874231000000009084160979 0.5 +-0.494999999999999995559107901499 0.0413874231000000009084160979 -0.5 +-0.494999999999999995559107901499 0.0413874231000010001091382605409 0.5 +-0.48086635500000002307885438313 -0.12531685200000000635078833966 0.5 +-0.48086635500000002307885438313 -0.125316851999999007150066177019 -0.5 +-0.48086635500000002307885438313 0.12531685200000000635078833966 -0.5 +-0.48086635500000002307885438313 0.12531685200000000635078833966 0.5 +-0.450845058999999992455087749477 -0.209372725000000009520917387817 -0.5 +-0.450845058999999992455087749477 -0.209372725000000009520917387817 0.5 +-0.450845058999999992455087749477 0.209372725000000009520917387817 -0.5 +-0.450845058999999992455087749477 0.209372725000000009520917387817 0.5 +-0.404523253000000027057581064582 -0.289071153000000025112825596807 -0.5 +-0.404523253000000027057581064582 -0.289071153000000025112825596807 0.5 +-0.404523253000000027057581064582 0.289071153000000025112825596807 -0.5 +-0.404523253000000027057581064582 0.289071153000000025112825596807 0.5 +-0.343189517000000998692144094093 -0.35979378799999900406803021724 -0.5 +-0.343189516999999999491421931452 -0.359793788000000003268752379881 0.5 +-0.343189516999999999491421931452 0.359793788000000003268752379881 -0.5 +-0.343189516999999999491421931452 0.359793788000000003268752379881 0.5 +-0.269812755999999986933346463047 0.417591884999999995997654878011 -0.5 +-0.269812755999999986933346463047 0.417591884999999995997654878011 0.5 +-0.269812755999998987732624300406 -0.417591884999999995997654878011 -0.5 +-0.269812755999998987732624300406 -0.417591884999999995997654878011 0.5 +-0.188583952000000998339146462968 -0.45988982800000000050744120017 -0.5 +-0.188583952000000998339146462968 -0.45988982800000000050744120017 0.5 +-0.188583952000000998339146462968 0.45988982800000000050744120017 -0.5 +-0.188583951999999999138424300327 0.45988982800000000050744120017 0.5 +-0.104160783999998993176738792954 -0.485839705999999982299897283156 -0.5 +-0.104160783999998993176738792954 -0.485839705999999982299897283156 0.5 +-0.104160783999998993176738792954 0.485839705999999982299897283156 -0.5 +-0.104160783999998993176738792954 0.485839705999999982299897283156 0.5 +-0.0307741189000010004206409064409 -0.494999999999999995559107901499 -0.5 +-0.0307741189000010004206409064409 -0.494999999999999995559107901499 0.5 +-0.0307741189000010004206409064409 0.494999999999999995559107901499 -0.5 +-0.0307741189000010004206409064409 0.494999999999999995559107901499 0.5 +0.0100849045000009993749978676192 -0.494999999999999995559107901499 -0.5 +0.0100849045000009993749978676192 -0.494999999999999995559107901499 0.5 +0.0100849045000009993749978676192 0.494999999999999995559107901499 -0.5 +0.0100849045000009993749978676192 0.494999999999999995559107901499 0.5 +0.0621375550999999984314037249078 -0.49287812500000000026645352591 -0.5 +0.0621375550999999984314037249078 -0.49287812500000000026645352591 0.5 +0.0621375550999999984314037249078 0.49287812500000000026645352591 -0.5 +0.0621375550999999984314037249078 0.49287812500000000026645352591 0.5 +0.146484821999999986763540960055 -0.474893355000000016996608565023 -0.5 +0.146484821999999986763540960055 0.474893355000000016996608565023 0.5 +0.146484822000001013719838738325 -0.474893355000000016996608565023 0.5 +0.146484822000001013719838738325 0.474893355000000016996608565023 -0.5 +0.229889932999998991558499028542 -0.440772940999999973676892750518 0.5 +0.229889932999998991558499028542 0.440772940999999973676892750518 -0.5 +0.229889932999999990759221191183 -0.440772940999999973676892750518 -0.5 +0.229889932999999990759221191183 0.440772940999999973676892750518 0.5 +0.307765228000000001795655180103 -0.390507867000000008506077620041 -0.5 +0.307765228000000001795655180103 0.390507867000000008506077620041 0.5 +0.307765228000001000996377342744 -0.390507867000000008506077620041 0.5 +0.307765228000001000996377342744 0.390507867000000008506077620041 -0.5 +0.37558332999999999302076503227 -0.325826384000000024432353029624 -0.5 +0.37558332999999999302076503227 -0.325826384000000024432353029624 0.5 +0.37558332999999999302076503227 0.325826384000000024432353029624 -0.5 +0.37558332999999999302076503227 0.325826384000000024432353029624 0.5 +0.429683015999999973200118574823 -0.250061311999999980049125269943 -0.5 +0.429683015999999973200118574823 -0.250061311999999980049125269943 0.5 +0.429683015999999973200118574823 0.250061311999999980049125269943 -0.5 +0.429683015999999973200118574823 0.250061311999999980049125269943 0.5 +0.467904598999999976616237518101 -0.167597240000000008430802722614 -0.5 +0.467904598999999976616237518101 -0.167597240000000008430802722614 0.5 +0.467904598999999976616237518101 0.167597240000000008430802722614 -0.5 +0.467904598999999976616237518101 0.167597240000000008430802722614 0.5 +0.489834869000000006078465730752 -0.0830808390000000035469085446493 -0.5 +0.489834869000000006078465730752 -0.0830808390000000035469085446493 0.5 +0.489834869000000006078465730752 0.0830808390000000035469085446493 -0.5 +0.489834869000000006078465730752 0.0830808390000000035469085446493 0.5 +0.494999999999999995559107901499 -0.0203414706000010006570200005172 -0.5 +0.494999999999999995559107901499 -0.0203414706000010006570200005172 0.5 +0.494999999999999995559107901499 0.0203414706000000014562978378763 -0.5 +0.494999999999999995559107901499 0.0203414706000000014562978378763 0.5 +3 28 29 25 +3 25 24 28 +3 31 35 34 +3 34 30 31 +3 22 23 17 +3 17 16 22 +3 21 27 26 +3 26 20 21 +3 12 13 9 +3 9 8 12 +3 19 18 14 +3 14 15 19 +3 5 4 1 +3 1 0 5 +3 11 10 6 +3 6 7 11 +3 3 2 0 +3 0 1 3 +3 2 3 7 +3 7 6 2 +3 4 5 8 +3 8 9 4 +3 10 11 15 +3 15 14 10 +3 13 12 16 +3 16 17 13 +3 20 18 19 +3 19 21 20 +3 23 22 24 +3 24 25 23 +3 30 26 27 +3 27 31 30 +3 32 33 29 +3 29 28 32 +3 73 69 68 +3 68 72 73 +3 72 74 75 +3 75 73 72 +3 69 65 64 +3 64 68 69 +3 74 70 71 +3 71 75 74 +3 65 61 60 +3 60 64 65 +3 70 66 67 +3 67 71 70 +3 61 57 56 +3 56 60 61 +3 66 62 63 +3 63 67 66 +3 54 52 56 +3 56 57 54 +3 62 58 59 +3 59 63 62 +3 48 50 52 +3 52 54 48 +3 58 55 53 +3 53 59 58 +3 46 44 50 +3 50 48 46 +3 55 49 51 +3 51 53 55 +3 41 40 44 +3 44 46 41 +3 49 47 45 +3 45 51 49 +3 37 36 40 +3 40 41 37 +3 47 42 43 +3 43 45 47 +3 36 37 33 +3 33 32 36 +3 42 38 39 +3 39 43 42 +3 43 39 35 +3 35 31 27 +3 27 21 19 +3 19 15 11 +3 11 7 3 +3 3 1 4 +3 4 9 13 +3 13 17 23 +3 23 25 29 +3 29 33 37 +3 37 41 46 +3 46 48 54 +3 54 57 61 +3 61 65 69 +3 69 73 75 +3 75 71 67 +3 67 63 59 +3 59 53 51 +3 51 45 43 +3 43 35 27 +3 27 19 11 +3 11 3 4 +3 4 13 23 +3 23 29 37 +3 37 46 54 +3 54 61 69 +3 69 75 67 +3 67 59 51 +3 51 43 27 +3 51 27 11 +3 11 4 23 +3 23 37 54 +3 54 69 67 +3 67 51 11 +3 67 11 23 +3 23 54 67 +3 35 39 38 +3 38 34 35 +3 30 34 38 +3 20 26 30 +3 14 18 20 +3 6 10 14 +3 0 2 6 +3 8 5 0 +3 16 12 8 +3 24 22 16 +3 32 28 24 +3 40 36 32 +3 50 44 40 +3 56 52 50 +3 64 60 56 +3 72 68 64 +3 70 74 72 +3 62 66 70 +3 55 58 62 +3 47 49 55 +3 38 42 47 +3 20 30 38 +3 6 14 20 +3 8 0 6 +3 24 16 8 +3 40 32 24 +3 56 50 40 +3 72 64 56 +3 62 70 72 +3 47 55 62 +3 20 38 47 +3 6 20 47 +3 24 8 6 +3 56 40 24 +3 62 72 56 +3 6 47 62 +3 24 6 62 +3 62 56 24 diff --git a/thirdparty/carve-1.4.0/data/elephant.ply b/thirdparty/carve-1.4.0/data/elephant.ply new file mode 100644 index 00000000..dc4b03f3 Binary files /dev/null and b/thirdparty/carve-1.4.0/data/elephant.ply differ diff --git a/thirdparty/carve-1.4.0/data/elephant2.ply b/thirdparty/carve-1.4.0/data/elephant2.ply new file mode 100644 index 00000000..80535148 Binary files /dev/null and b/thirdparty/carve-1.4.0/data/elephant2.ply differ diff --git a/thirdparty/carve-1.4.0/data/hippo.ply b/thirdparty/carve-1.4.0/data/hippo.ply new file mode 100644 index 00000000..9fb8f082 Binary files /dev/null and b/thirdparty/carve-1.4.0/data/hippo.ply differ diff --git a/thirdparty/carve-1.4.0/data/horse2.ply b/thirdparty/carve-1.4.0/data/horse2.ply new file mode 100644 index 00000000..24ed8f1f Binary files /dev/null and b/thirdparty/carve-1.4.0/data/horse2.ply differ diff --git a/thirdparty/carve-1.4.0/data/ico.ply b/thirdparty/carve-1.4.0/data/ico.ply new file mode 100644 index 00000000..92488191 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/ico.ply @@ -0,0 +1,44 @@ +ply +format ascii 1.0 +element vertex 12 +property float32 x +property float32 y +property float32 z +property float32 nx +property float32 ny +property float32 nz +element face 20 +property list uint8 int32 vertex_indices +end_header +-0.276385 -0.850640 -0.447215 -0.276376 -0.850642 -0.447188 +0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 +0.723600 -0.525720 -0.447215 0.723594 -0.525712 -0.447188 +0.723600 0.525720 -0.447215 0.723594 0.525712 -0.447188 +-0.894425 0.000000 -0.447215 -0.894406 0.000000 -0.447188 +-0.276385 0.850640 -0.447215 -0.276376 0.850642 -0.447188 +0.894425 0.000000 0.447215 0.894406 0.000000 0.447188 +0.276385 -0.850640 0.447215 0.276376 -0.850642 0.447188 +-0.723600 -0.525720 0.447215 -0.723594 -0.525712 0.447188 +-0.723600 0.525720 0.447215 -0.723594 0.525712 0.447188 +0.276385 0.850640 0.447215 0.276376 0.850642 0.447188 +0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 +3 0 1 2 +3 2 1 3 +3 4 1 0 +3 5 1 4 +3 3 1 5 +3 2 3 6 +3 0 2 7 +3 4 0 8 +3 5 4 9 +3 3 5 10 +3 6 7 2 +3 7 8 0 +3 8 9 4 +3 9 10 5 +3 10 6 3 +3 7 6 11 +3 8 7 11 +3 9 8 11 +3 10 9 11 +3 6 10 11 diff --git a/thirdparty/carve-1.4.0/data/ico2.ply b/thirdparty/carve-1.4.0/data/ico2.ply new file mode 100644 index 00000000..e3a8c5b5 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/ico2.ply @@ -0,0 +1,134 @@ +ply +format ascii 1.0 +element vertex 42 +property float32 x +property float32 y +property float32 z +property float32 nx +property float32 ny +property float32 nz +element face 80 +property list uint8 int32 vertex_indices +end_header +0.601497 -0.437008 -1.203007 0.425306 -0.309000 -0.850642 +0.371753 -1.144115 -0.743505 0.262856 -0.808985 -0.525712 +-0.229747 -0.707100 -1.203007 -0.162450 -0.499985 -0.850642 +0.601497 0.437008 -1.203007 0.425306 0.309000 -0.850642 +1.202998 0.000000 -0.743503 0.850642 0.000000 -0.525712 +-0.973247 -0.707102 -0.743503 -0.688162 -0.499985 -0.525712 +-0.743494 0.000000 -1.203003 -0.525712 0.000000 -0.850642 +-0.973247 0.707102 -0.743503 -0.688162 0.499985 -0.525712 +-0.229747 0.707100 -1.203007 -0.162450 0.499985 -0.850642 +0.371753 1.144115 -0.743505 0.262856 0.808985 -0.525712 +1.344999 0.437010 0.000000 0.951048 0.309000 0.000000 +1.344999 -0.437010 0.000000 0.951048 -0.309000 0.000000 +0.831254 -1.144122 0.000000 0.587756 -0.809015 0.000000 +0.000000 -1.414214 0.000000 0.000000 -1.000000 0.000000 +-0.831254 -1.144122 0.000000 -0.587756 -0.809015 0.000000 +-1.344999 -0.437010 0.000000 -0.951048 -0.309000 0.000000 +-1.344999 0.437010 0.000000 -0.951048 0.309000 0.000000 +-0.831254 1.144122 0.000000 -0.587756 0.809015 0.000000 +0.000000 1.414214 0.000000 0.000000 1.000000 0.000000 +0.831254 1.144122 0.000000 0.587756 0.809015 0.000000 +0.973247 -0.707102 0.743503 0.688162 -0.499985 0.525712 +-0.371753 -1.144115 0.743505 -0.262856 -0.808985 0.525712 +-1.202998 0.000000 0.743503 -0.850642 0.000000 0.525712 +-0.371753 1.144115 0.743505 -0.262856 0.808985 0.525712 +0.973247 0.707102 0.743503 0.688162 0.499985 0.525712 +0.743494 0.000000 1.203003 0.525712 0.000000 0.850642 +0.229747 -0.707100 1.203007 0.162450 -0.499985 0.850642 +-0.601497 -0.437008 1.203007 -0.425306 -0.309000 0.850642 +-0.601497 0.437008 1.203007 -0.425306 0.309000 0.850642 +0.229747 0.707100 1.203007 0.162450 0.499985 0.850642 +0.390867 1.202987 0.632457 0.276376 0.850642 0.447188 +0.000000 0.000000 1.414214 0.000000 0.000000 1.000000 +1.264908 0.000000 0.632457 0.894406 0.000000 0.447188 +-1.023325 0.743480 0.632457 -0.723594 0.525712 0.447188 +-1.023325 -0.743480 0.632457 -0.723594 -0.525712 0.447188 +0.390867 -1.202987 0.632457 0.276376 -0.850642 0.447188 +1.023325 0.743480 -0.632457 0.723594 0.525712 -0.447188 +-0.390867 1.202987 -0.632457 -0.276376 0.850642 -0.447188 +-1.264908 0.000000 -0.632457 -0.894406 0.000000 -0.447188 +-0.390867 -1.202987 -0.632457 -0.276376 -0.850642 -0.447188 +1.023325 -0.743480 -0.632457 0.723594 -0.525712 -0.447188 +0.000000 0.000000 -1.414214 0.000000 0.000000 -1.000000 +3 0 1 2 +3 0 3 4 +3 2 5 6 +3 6 7 8 +3 8 9 3 +3 4 10 11 +3 1 12 13 +3 5 14 15 +3 7 16 17 +3 9 18 19 +3 11 20 12 +3 13 21 14 +3 15 22 16 +3 17 23 18 +3 19 24 10 +3 20 25 26 +3 21 26 27 +3 22 27 28 +3 23 28 29 +3 24 29 25 +3 30 29 24 +3 31 25 29 +3 32 24 25 +3 33 28 23 +3 31 29 28 +3 30 23 29 +3 34 27 22 +3 31 28 27 +3 33 22 28 +3 35 26 21 +3 31 27 26 +3 34 21 27 +3 32 25 20 +3 31 26 25 +3 35 20 26 +3 36 19 10 +3 32 10 24 +3 30 24 19 +3 37 17 18 +3 30 18 23 +3 33 23 17 +3 38 15 16 +3 33 16 22 +3 34 22 15 +3 39 13 14 +3 34 14 21 +3 35 21 13 +3 40 11 12 +3 35 12 20 +3 32 20 11 +3 37 18 9 +3 30 19 18 +3 36 9 19 +3 38 16 7 +3 33 17 16 +3 37 7 17 +3 39 14 5 +3 34 15 14 +3 38 5 15 +3 40 12 1 +3 35 13 12 +3 39 1 13 +3 36 10 4 +3 32 11 10 +3 40 4 11 +3 41 8 3 +3 36 3 9 +3 37 9 8 +3 41 6 8 +3 37 8 7 +3 38 7 6 +3 41 2 6 +3 38 6 5 +3 39 5 2 +3 41 3 0 +3 36 4 3 +3 40 0 4 +3 41 0 2 +3 39 2 1 +3 40 1 0 diff --git a/thirdparty/carve-1.4.0/data/ico3.ply b/thirdparty/carve-1.4.0/data/ico3.ply new file mode 100644 index 00000000..46586aad --- /dev/null +++ b/thirdparty/carve-1.4.0/data/ico3.ply @@ -0,0 +1,494 @@ +ply +format ascii 1.0 +element vertex 162 +property float32 x +property float32 y +property float32 z +property float32 nx +property float32 ny +property float32 nz +element face 320 +property list uint8 int32 vertex_indices +end_header +0.361804 -0.587779 -0.723612 0.350017 -0.587725 -0.729423 +0.512753 -0.693775 -0.505727 0.523881 -0.686819 -0.503769 +0.262869 -0.809012 -0.525738 0.262856 -0.808985 -0.525712 +0.597194 -0.433882 -0.674615 0.604358 -0.439100 -0.664754 +0.425323 -0.309011 -0.850654 0.425306 -0.309000 -0.850642 +0.723600 -0.525720 -0.447215 0.723594 -0.525712 -0.447218 +0.138197 -0.425320 -0.894430 0.141789 -0.436445 -0.888455 +0.052790 -0.688185 -0.723612 0.062288 -0.681204 -0.729423 +-0.162456 -0.499995 -0.850654 -0.162450 -0.499985 -0.850642 +-0.228103 -0.702042 -0.674615 -0.230842 -0.710471 -0.664754 +-0.007026 -0.862665 -0.505728 -0.020112 -0.863582 -0.503769 +-0.276385 -0.850640 -0.447215 -0.276376 -0.850642 -0.447218 +-0.084442 -0.259889 -0.961939 -0.080477 -0.247719 -0.965453 +0.221076 -0.160619 -0.961939 0.210730 -0.153081 -0.965453 +0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 +0.670817 -0.162457 -0.723611 0.667104 -0.151250 -0.729423 +0.850648 0.000000 -0.525736 0.850642 0.000000 -0.525712 +0.818272 -0.273262 -0.505726 0.815088 -0.285989 -0.503769 +0.447210 0.000000 -0.894429 0.458907 0.000000 -0.888455 +0.670817 0.162457 -0.723611 0.667104 0.151250 -0.729423 +0.425323 0.309011 -0.850654 0.425306 0.309000 -0.850642 +0.597194 0.433882 -0.674615 0.604358 0.439100 -0.664754 +0.723600 0.525720 -0.447215 0.723594 0.525712 -0.447218 +0.818272 0.273262 -0.505726 0.815088 0.285989 -0.503769 +0.221076 0.160619 -0.961939 0.210730 0.153081 -0.965453 +-0.447211 -0.525727 -0.723612 -0.450789 -0.514481 -0.729423 +-0.501373 -0.702043 -0.505727 -0.491317 -0.710471 -0.503769 +-0.688189 -0.499997 -0.525736 -0.688162 -0.499985 -0.525712 +-0.361800 -0.262863 -0.894429 -0.371258 -0.269723 -0.888455 +-0.638195 -0.262864 -0.723609 -0.628620 -0.269723 -0.729423 +-0.525730 0.000000 -0.850652 -0.525712 0.000000 -0.850642 +-0.738174 0.000000 -0.674610 -0.747032 0.000000 -0.664754 +-0.822618 -0.259890 -0.505724 -0.827540 -0.247719 -0.503769 +-0.894425 0.000000 -0.447215 -0.894406 0.000000 -0.447188 +-0.273266 0.000000 -0.961939 -0.260475 0.000000 -0.965453 +-0.638195 0.262864 -0.723609 -0.628620 0.269723 -0.729423 +-0.822618 0.259890 -0.505724 -0.827540 0.247719 -0.503769 +-0.688189 0.499997 -0.525736 -0.688162 0.499985 -0.525712 +-0.361800 0.262863 -0.894429 -0.371258 0.269723 -0.888455 +-0.447211 0.525727 -0.723612 -0.450789 0.514481 -0.729423 +-0.162456 0.499995 -0.850654 -0.162450 0.499985 -0.850642 +-0.228103 0.702042 -0.674615 -0.230842 0.710471 -0.664754 +-0.501373 0.702043 -0.505727 -0.491317 0.710471 -0.503769 +-0.276385 0.850640 -0.447215 -0.276376 0.850642 -0.447218 +-0.084442 0.259889 -0.961939 -0.080477 0.247719 -0.965453 +0.052790 0.688185 -0.723612 0.062288 0.681204 -0.729423 +-0.007026 0.862665 -0.505728 -0.020112 0.863582 -0.503769 +0.262869 0.809012 -0.525738 0.262856 0.808985 -0.525712 +0.138197 0.425320 -0.894430 0.141789 0.436445 -0.888455 +0.361804 0.587779 -0.723612 0.350017 0.587725 -0.729423 +0.512753 0.693775 -0.505727 0.523881 0.686819 -0.503769 +0.947213 -0.162458 -0.276396 0.950743 -0.151250 -0.270486 +0.951058 -0.309013 0.000000 0.951048 -0.309000 0.000000 +0.870465 -0.433883 -0.232456 0.864834 -0.439100 -0.243294 +0.947213 0.162458 -0.276396 0.950743 0.151250 -0.270486 +1.000000 0.000000 0.000000 0.999908 0.000000 -0.013123 +0.951058 0.309013 0.000000 0.951048 0.309000 0.000000 +0.959253 0.160620 0.232455 0.957793 0.153081 0.243263 +0.894425 0.000000 0.447215 0.894406 0.000000 0.447188 +0.959253 -0.160620 0.232455 0.957793 -0.153081 0.243263 +0.870465 0.433883 -0.232456 0.864834 0.439100 -0.243294 +0.138199 -0.951055 -0.276397 0.149937 -0.950957 -0.270486 +0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 +-0.143661 -0.961938 -0.232456 -0.150334 -0.958220 -0.243294 +0.447216 -0.850648 -0.276397 0.437666 -0.857479 -0.270486 +0.309017 -0.951056 0.000000 0.308969 -0.950957 -0.013123 +0.587786 -0.809017 0.000000 0.587756 -0.809015 0.000000 +0.449185 -0.862668 0.232457 0.441572 -0.863582 0.243294 +0.276385 -0.850640 0.447215 0.276376 -0.850642 0.447218 +0.143661 -0.961938 0.232456 0.150334 -0.958220 0.243294 +0.681641 -0.693779 -0.232457 0.684866 -0.686819 -0.243294 +-0.861804 -0.425322 -0.276396 -0.858089 -0.436445 -0.270486 +-0.951058 -0.309013 0.000000 -0.951048 -0.309000 0.000000 +-0.959253 -0.160620 -0.232455 -0.957793 -0.153081 -0.243263 +-0.670820 -0.688190 -0.276396 -0.680258 -0.681204 -0.270486 +-0.809018 -0.587783 0.000000 -0.808924 -0.587725 -0.013123 +-0.587786 -0.809017 0.000000 -0.587756 -0.809015 0.000000 +-0.681641 -0.693779 0.232457 -0.684866 -0.686819 0.243294 +-0.723600 -0.525720 0.447215 -0.723594 -0.525712 0.447218 +-0.870465 -0.433883 0.232456 -0.864834 -0.439100 0.243294 +-0.449185 -0.862668 -0.232457 -0.441572 -0.863582 -0.243294 +-0.670820 0.688190 -0.276396 -0.680258 0.681204 -0.270486 +-0.587786 0.809017 0.000000 -0.587756 0.809015 0.000000 +-0.449185 0.862668 -0.232457 -0.441572 0.863582 -0.243294 +-0.861804 0.425322 -0.276396 -0.858089 0.436445 -0.270486 +-0.809018 0.587783 0.000000 -0.808924 0.587725 -0.013123 +-0.951058 0.309013 0.000000 -0.951048 0.309000 0.000000 +-0.870465 0.433883 0.232456 -0.864834 0.439100 0.243294 +-0.723600 0.525720 0.447215 -0.723594 0.525712 0.447218 +-0.681641 0.693779 0.232457 -0.684866 0.686819 0.243294 +-0.959253 0.160620 -0.232455 -0.957793 0.153081 -0.243263 +0.447216 0.850648 -0.276397 0.437666 0.857479 -0.270486 +0.587786 0.809017 0.000000 0.587756 0.809015 0.000000 +0.681641 0.693779 -0.232457 0.684866 0.686819 -0.243294 +0.138199 0.951055 -0.276397 0.149937 0.950957 -0.270486 +0.309017 0.951056 0.000000 0.308969 0.950957 -0.013123 +0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 +0.143661 0.961938 0.232456 0.150334 0.958220 0.243294 +0.276385 0.850640 0.447215 0.276376 0.850642 0.447218 +0.449185 0.862668 0.232457 0.441572 0.863582 0.243294 +-0.143661 0.961938 -0.232456 -0.150334 0.958220 -0.243294 +0.861804 -0.425322 0.276396 0.858089 -0.436445 0.270486 +0.822618 -0.259890 0.505724 0.827540 -0.247719 0.503769 +0.688189 -0.499997 0.525736 0.688162 -0.499985 0.525712 +0.809018 -0.587783 0.000000 0.808924 -0.587725 0.013123 +0.670820 -0.688190 0.276396 0.680258 -0.681204 0.270486 +0.501373 -0.702043 0.505727 0.491317 -0.710471 0.503769 +-0.138199 -0.951055 0.276397 -0.149937 -0.950957 0.270486 +0.007026 -0.862665 0.505728 0.020112 -0.863582 0.503769 +-0.262869 -0.809012 0.525738 -0.262856 -0.808985 0.525712 +-0.309017 -0.951056 0.000000 -0.308969 -0.950957 0.013123 +-0.447216 -0.850648 0.276397 -0.437666 -0.857479 0.270486 +-0.512753 -0.693775 0.505727 -0.523881 -0.686819 0.503769 +-0.947213 -0.162458 0.276396 -0.950743 -0.151250 0.270486 +-0.818272 -0.273262 0.505726 -0.815088 -0.285989 0.503769 +-0.850648 0.000000 0.525736 -0.850642 0.000000 0.525712 +-1.000000 0.000000 0.000000 -0.999908 0.000000 0.013123 +-0.947213 0.162458 0.276396 -0.950743 0.151250 0.270486 +-0.818272 0.273262 0.505726 -0.815088 0.285989 0.503769 +-0.447216 0.850648 0.276397 -0.437666 0.857479 0.270486 +-0.512753 0.693775 0.505727 -0.523881 0.686819 0.503769 +-0.262869 0.809012 0.525738 -0.262856 0.808985 0.525712 +-0.309017 0.951056 0.000000 -0.308969 0.950957 0.013123 +-0.138199 0.951055 0.276397 -0.149937 0.950957 0.270486 +0.007026 0.862665 0.505728 0.020112 0.863582 0.503769 +0.670820 0.688190 0.276396 0.680258 0.681204 0.270486 +0.501373 0.702043 0.505727 0.491317 0.710471 0.503769 +0.688189 0.499997 0.525736 0.688162 0.499985 0.525712 +0.809018 0.587783 0.000000 0.808924 0.587725 0.013123 +0.861804 0.425322 0.276396 0.858089 0.436445 0.270486 +0.822618 0.259890 0.505724 0.827540 0.247719 0.503769 +0.447211 -0.525727 0.723612 0.450789 -0.514481 0.729423 +0.162456 -0.499995 0.850654 0.162450 -0.499985 0.850642 +0.228103 -0.702042 0.674615 0.230842 -0.710471 0.664754 +0.638195 -0.262864 0.723609 0.628620 -0.269723 0.729423 +0.361800 -0.262863 0.894429 0.371258 -0.269723 0.888455 +0.525730 0.000000 0.850652 0.525712 0.000000 0.850642 +0.273266 0.000000 0.961939 0.260475 0.000000 0.965453 +0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 +0.084442 -0.259889 0.961939 0.080477 -0.247719 0.965453 +0.738174 0.000000 0.674610 0.747032 0.000000 0.664754 +-0.361804 -0.587779 0.723612 -0.350017 -0.587725 0.729423 +-0.425323 -0.309011 0.850654 -0.425306 -0.309000 0.850642 +-0.597194 -0.433882 0.674615 -0.604358 -0.439100 0.664754 +-0.052790 -0.688185 0.723612 -0.062288 -0.681204 0.729423 +-0.138197 -0.425320 0.894430 -0.141789 -0.436445 0.888455 +-0.221076 -0.160619 0.961939 -0.210730 -0.153081 0.965453 +-0.670817 0.162457 0.723611 -0.667104 0.151250 0.729423 +-0.425323 0.309011 0.850654 -0.425306 0.309000 0.850642 +-0.597194 0.433882 0.674615 -0.604358 0.439100 0.664754 +-0.670817 -0.162457 0.723611 -0.667104 -0.151250 0.729423 +-0.447210 0.000000 0.894429 -0.458907 0.000000 0.888455 +-0.221076 0.160619 0.961939 -0.210730 0.153081 0.965453 +-0.052790 0.688185 0.723612 -0.062288 0.681204 0.729423 +0.162456 0.499995 0.850654 0.162450 0.499985 0.850642 +0.228103 0.702042 0.674615 0.230842 0.710471 0.664754 +-0.361804 0.587779 0.723612 -0.350017 0.587725 0.729423 +-0.138197 0.425320 0.894430 -0.141789 0.436445 0.888455 +0.084442 0.259889 0.961939 0.080477 0.247719 0.965453 +0.638195 0.262864 0.723609 0.628620 0.269723 0.729423 +0.447211 0.525727 0.723612 0.450789 0.514481 0.729423 +0.361800 0.262863 0.894429 0.371258 0.269723 0.888455 +3 0 1 2 +3 1 0 3 +3 4 3 0 +3 3 5 1 +3 0 6 4 +3 6 0 7 +3 2 7 0 +3 7 8 6 +3 9 10 11 +3 10 9 7 +3 8 7 9 +3 7 2 10 +3 12 6 8 +3 6 12 13 +3 14 13 12 +3 13 4 6 +3 15 16 17 +3 17 3 15 +3 4 15 3 +3 3 17 5 +3 15 4 18 +3 18 19 15 +3 16 15 19 +3 19 18 20 +3 21 22 23 +3 23 19 21 +3 20 21 19 +3 19 23 16 +3 24 20 18 +3 18 13 24 +3 14 24 13 +3 13 18 4 +3 25 26 27 +3 26 25 9 +3 8 9 25 +3 9 11 26 +3 25 28 8 +3 28 25 29 +3 27 29 25 +3 29 30 28 +3 31 32 33 +3 32 31 29 +3 30 29 31 +3 29 27 32 +3 34 28 30 +3 28 34 12 +3 14 12 34 +3 12 8 28 +3 35 36 37 +3 36 35 31 +3 30 31 35 +3 31 33 36 +3 35 38 30 +3 38 35 39 +3 37 39 35 +3 39 40 38 +3 41 42 43 +3 42 41 39 +3 40 39 41 +3 39 37 42 +3 44 38 40 +3 38 44 34 +3 14 34 44 +3 34 30 38 +3 45 46 47 +3 46 45 41 +3 40 41 45 +3 41 43 46 +3 45 48 40 +3 48 45 49 +3 47 49 45 +3 49 20 48 +3 21 50 22 +3 50 21 49 +3 20 49 21 +3 49 47 50 +3 24 48 20 +3 48 24 44 +3 14 44 24 +3 44 40 48 +3 51 52 53 +3 53 17 51 +3 16 51 17 +3 17 53 5 +3 51 16 54 +3 54 55 51 +3 52 51 55 +3 55 54 56 +3 57 58 59 +3 59 55 57 +3 56 57 55 +3 55 59 52 +3 60 56 54 +3 54 23 60 +3 22 60 23 +3 23 54 16 +3 61 62 63 +3 63 10 61 +3 2 61 10 +3 10 63 11 +3 61 2 64 +3 64 65 61 +3 62 61 65 +3 65 64 66 +3 67 68 69 +3 69 65 67 +3 66 67 65 +3 65 69 62 +3 70 66 64 +3 64 1 70 +3 5 70 1 +3 1 64 2 +3 71 72 73 +3 73 32 71 +3 27 71 32 +3 32 73 33 +3 71 27 74 +3 74 75 71 +3 72 71 75 +3 75 74 76 +3 77 78 79 +3 79 75 77 +3 76 77 75 +3 75 79 72 +3 80 76 74 +3 74 26 80 +3 11 80 26 +3 26 74 27 +3 81 82 83 +3 83 42 81 +3 37 81 42 +3 42 83 43 +3 81 37 84 +3 84 85 81 +3 82 81 85 +3 85 84 86 +3 87 88 89 +3 89 85 87 +3 86 87 85 +3 85 89 82 +3 90 86 84 +3 84 36 90 +3 33 90 36 +3 36 84 37 +3 91 92 93 +3 93 50 91 +3 47 91 50 +3 50 93 22 +3 91 47 94 +3 94 95 91 +3 92 91 95 +3 95 94 96 +3 97 98 99 +3 99 95 97 +3 96 97 95 +3 95 99 92 +3 100 96 94 +3 94 46 100 +3 43 100 46 +3 46 94 47 +3 101 102 103 +3 102 101 59 +3 52 59 101 +3 59 58 102 +3 101 104 52 +3 104 101 105 +3 103 105 101 +3 105 66 104 +3 67 106 68 +3 106 67 105 +3 66 105 67 +3 105 103 106 +3 70 104 66 +3 104 70 53 +3 5 53 70 +3 53 52 104 +3 107 108 109 +3 108 107 69 +3 62 69 107 +3 69 68 108 +3 107 110 62 +3 110 107 111 +3 109 111 107 +3 111 76 110 +3 77 112 78 +3 112 77 111 +3 76 111 77 +3 111 109 112 +3 80 110 76 +3 110 80 63 +3 11 63 80 +3 63 62 110 +3 113 114 115 +3 114 113 79 +3 72 79 113 +3 79 78 114 +3 113 116 72 +3 116 113 117 +3 115 117 113 +3 117 86 116 +3 87 118 88 +3 118 87 117 +3 86 117 87 +3 117 115 118 +3 90 116 86 +3 116 90 73 +3 33 73 90 +3 73 72 116 +3 119 120 121 +3 120 119 89 +3 82 89 119 +3 89 88 120 +3 119 122 82 +3 122 119 123 +3 121 123 119 +3 123 96 122 +3 97 124 98 +3 124 97 123 +3 96 123 97 +3 123 121 124 +3 100 122 96 +3 122 100 83 +3 43 83 100 +3 83 82 122 +3 125 126 127 +3 126 125 99 +3 92 99 125 +3 99 98 126 +3 125 128 92 +3 128 125 129 +3 127 129 125 +3 129 56 128 +3 57 130 58 +3 130 57 129 +3 56 129 57 +3 129 127 130 +3 60 128 56 +3 128 60 93 +3 22 93 60 +3 93 92 128 +3 131 132 133 +3 133 106 131 +3 103 131 106 +3 106 133 68 +3 131 103 134 +3 134 135 131 +3 132 131 135 +3 135 134 136 +3 137 138 139 +3 139 135 137 +3 136 137 135 +3 135 139 132 +3 140 136 134 +3 134 102 140 +3 58 140 102 +3 102 134 103 +3 141 142 143 +3 143 112 141 +3 109 141 112 +3 112 143 78 +3 141 109 144 +3 144 145 141 +3 142 141 145 +3 145 144 132 +3 139 138 146 +3 146 145 139 +3 132 139 145 +3 145 146 142 +3 133 132 144 +3 144 108 133 +3 68 133 108 +3 108 144 109 +3 147 148 149 +3 149 118 147 +3 115 147 118 +3 118 149 88 +3 147 115 150 +3 150 151 147 +3 148 147 151 +3 151 150 142 +3 146 138 152 +3 152 151 146 +3 142 146 151 +3 151 152 148 +3 143 142 150 +3 150 114 143 +3 78 143 114 +3 114 150 115 +3 153 154 155 +3 155 124 153 +3 121 153 124 +3 124 155 98 +3 153 121 156 +3 156 157 153 +3 154 153 157 +3 157 156 148 +3 152 138 158 +3 158 157 152 +3 148 152 157 +3 157 158 154 +3 149 148 156 +3 156 120 149 +3 88 149 120 +3 120 156 121 +3 159 136 140 +3 140 130 159 +3 127 159 130 +3 130 140 58 +3 159 127 160 +3 160 161 159 +3 136 159 161 +3 161 160 154 +3 158 138 137 +3 137 161 158 +3 154 158 161 +3 161 137 136 +3 155 154 160 +3 160 126 155 +3 98 155 126 +3 126 160 127 diff --git a/thirdparty/carve-1.4.0/data/ico4.ply b/thirdparty/carve-1.4.0/data/ico4.ply new file mode 100644 index 00000000..1b3ae59f --- /dev/null +++ b/thirdparty/carve-1.4.0/data/ico4.ply @@ -0,0 +1,1934 @@ +ply +format ascii 1.0 +element vertex 642 +property float32 x +property float32 y +property float32 z +property float32 nx +property float32 ny +property float32 nz +element face 1280 +property list uint8 int32 vertex_indices +end_header +0.441802 -0.647406 -0.621028 0.442824 -0.646443 -0.621265 +0.316229 -0.707101 -0.632461 0.309885 -0.708304 -0.634205 +0.361804 -0.587779 -0.723612 0.355937 -0.587756 -0.726493 +0.391555 -0.758647 -0.520711 0.396069 -0.756523 -0.520341 +0.512753 -0.693775 -0.505727 0.518265 -0.690359 -0.504746 +0.262869 -0.809012 -0.525738 0.262856 -0.808985 -0.525712 +0.562274 -0.571246 -0.597935 0.560900 -0.571459 -0.598956 +0.484459 -0.516115 -0.706346 0.484878 -0.517045 -0.705344 +0.597194 -0.433882 -0.674615 0.600757 -0.436445 -0.669729 +0.516194 -0.375032 -0.769996 0.519303 -0.377270 -0.766778 +0.398469 -0.453985 -0.796944 0.393017 -0.452406 -0.800501 +0.425323 -0.309011 -0.850654 0.425306 -0.309000 -0.850642 +0.666776 -0.484435 -0.566333 0.670553 -0.487167 -0.559465 +0.624147 -0.615637 -0.481073 0.630451 -0.610553 -0.479293 +0.723600 -0.525720 -0.447215 0.723594 -0.525712 -0.447218 +0.253366 -0.513369 -0.819913 0.251991 -0.514756 -0.819453 +0.285272 -0.371742 -0.883418 0.288644 -0.376568 -0.880245 +0.138197 -0.425320 -0.894430 0.139988 -0.430830 -0.891476 +0.096780 -0.564248 -0.819913 0.098697 -0.564562 -0.819453 +0.210088 -0.646572 -0.733354 0.209632 -0.645161 -0.734703 +0.052790 -0.688185 -0.723612 0.057497 -0.684744 -0.726493 +0.159797 -0.757930 -0.632461 0.165624 -0.755181 -0.634205 +-0.055516 -0.601496 -0.796945 -0.052034 -0.597003 -0.800501 +-0.012280 -0.468424 -0.883418 -0.012177 -0.474319 -0.880245 +-0.162456 -0.499995 -0.850654 -0.162450 -0.499985 -0.850642 +-0.119111 -0.792645 -0.597935 -0.117862 -0.792016 -0.598956 +-0.254681 -0.783840 -0.566333 -0.256111 -0.788263 -0.559465 +-0.228103 -0.702042 -0.674615 -0.229438 -0.706229 -0.669729 +-0.143074 -0.864927 -0.481074 -0.151158 -0.864528 -0.479293 +-0.007026 -0.862665 -0.505728 -0.013489 -0.863124 -0.504746 +-0.276385 -0.850640 -0.447215 -0.276376 -0.850642 -0.447218 +0.023119 -0.783447 -0.621029 0.021699 -0.783288 -0.621265 +-0.088563 -0.702305 -0.706346 -0.088321 -0.703299 -0.705344 +-0.197165 -0.606821 -0.769997 -0.198340 -0.610462 -0.766778 +0.129157 -0.843907 -0.520711 0.124241 -0.844844 -0.520341 +0.027156 -0.346149 -0.937787 0.028016 -0.345073 -0.938139 +-0.124640 -0.383610 -0.915045 -0.123203 -0.379223 -0.917051 +-0.084442 -0.259889 -0.961939 -0.082461 -0.253853 -0.963683 +0.181495 -0.296000 -0.937787 0.180151 -0.295663 -0.938139 +0.069216 -0.213020 -0.974593 0.069735 -0.214606 -0.974181 +0.221076 -0.160619 -0.961939 0.215949 -0.156896 -0.963683 +-0.042628 -0.131199 -0.990439 -0.040071 -0.123386 -0.991516 +0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 +0.111605 -0.081085 -0.990439 0.104953 -0.076266 -0.991516 +0.326319 -0.237082 -0.915045 0.322581 -0.234382 -0.917051 +0.752247 -0.220113 -0.621027 0.751640 -0.221381 -0.621265 +0.670817 -0.162457 -0.723611 0.668996 -0.156896 -0.726493 +0.770215 -0.082241 -0.632460 0.769402 -0.075808 -0.634205 +0.842515 -0.137950 -0.520709 0.841914 -0.142888 -0.520310 +0.818272 -0.273262 -0.505726 0.816706 -0.279550 -0.504746 +0.850648 0.000000 -0.525736 0.850642 0.000000 -0.525712 +0.717043 -0.358223 -0.597934 0.716849 -0.356853 -0.598956 +0.640564 -0.301254 -0.706345 0.641591 -0.301340 -0.705344 +0.554902 -0.238673 -0.796944 0.551714 -0.233985 -0.800501 +0.778382 -0.403349 -0.481073 0.775506 -0.410901 -0.479293 +0.566540 -0.082322 -0.819912 0.567431 -0.080569 -0.819453 +0.441704 -0.156432 -0.883418 0.447340 -0.158147 -0.880245 +0.447210 0.000000 -0.894429 0.453017 0.000000 -0.891476 +0.566540 0.082322 -0.819912 0.567431 0.080569 -0.819453 +0.679848 0.000000 -0.733353 0.678365 0.000000 -0.734703 +0.670817 0.162457 -0.723611 0.668996 0.156896 -0.726493 +0.770215 0.082241 -0.632460 0.769402 0.075808 -0.634205 +0.554902 0.238673 -0.796944 0.551714 0.233985 -0.800501 +0.441704 0.156432 -0.883418 0.447340 0.158147 -0.880245 +0.425323 0.309011 -0.850654 0.425306 0.309000 -0.850642 +0.717043 0.358223 -0.597934 0.716849 0.356853 -0.598956 +0.597194 0.433882 -0.674615 0.600757 0.436445 -0.669729 +0.666776 0.484435 -0.566333 0.670553 0.487167 -0.559465 +0.778382 0.403349 -0.481073 0.775506 0.410901 -0.479293 +0.818272 0.273262 -0.505726 0.816706 0.279550 -0.504746 +0.723600 0.525720 -0.447215 0.723594 0.525712 -0.447218 +0.752247 0.220113 -0.621027 0.751640 0.221381 -0.621265 +0.640564 0.301254 -0.706345 0.641591 0.301340 -0.705344 +0.516194 0.375032 -0.769996 0.519303 0.377270 -0.766778 +0.842515 0.137950 -0.520709 0.841914 0.142888 -0.520310 +0.337599 0.081140 -0.937786 0.336863 0.079958 -0.938139 +0.221076 0.160619 -0.961939 0.215949 0.156896 -0.963683 +0.326319 0.237082 -0.915045 0.322581 0.234382 -0.917051 +0.337599 -0.081140 -0.937786 0.336863 -0.079958 -0.938139 +0.223984 0.000000 -0.974593 0.225654 0.000000 -0.974181 +0.111605 0.081085 -0.990439 0.104953 0.076266 -0.991516 +-0.479198 -0.620236 -0.621028 -0.477950 -0.620930 -0.621265 +-0.574776 -0.519255 -0.632461 -0.577899 -0.513596 -0.634205 +-0.447211 -0.525727 -0.723612 -0.448988 -0.520157 -0.726493 +-0.600523 -0.606822 -0.520710 -0.597125 -0.610462 -0.520310 +-0.501373 -0.702043 -0.505727 -0.496414 -0.706229 -0.504746 +-0.688189 -0.499997 -0.525736 -0.688162 -0.499985 -0.525712 +-0.369536 -0.711278 -0.597935 -0.370159 -0.710044 -0.598956 +-0.341150 -0.620235 -0.706346 -0.341899 -0.620930 -0.705344 +-0.308633 -0.519254 -0.796945 -0.308786 -0.513596 -0.800501 +-0.392635 -0.783840 -0.481073 -0.385846 -0.788263 -0.479293 +-0.409952 -0.399604 -0.819913 -0.411695 -0.398724 -0.819453 +-0.265395 -0.386184 -0.883418 -0.268929 -0.390881 -0.880245 +-0.361800 -0.262863 -0.894429 -0.366497 -0.266274 -0.891476 +-0.506729 -0.266402 -0.819912 -0.506424 -0.268319 -0.819453 +-0.550009 -0.399604 -0.733353 -0.548814 -0.398724 -0.734703 +-0.638195 -0.262864 -0.723609 -0.633442 -0.266274 -0.726493 +-0.671459 -0.386185 -0.632459 -0.667043 -0.390881 -0.634205 +-0.589216 -0.133070 -0.796942 -0.583880 -0.134953 -0.800501 +-0.449297 -0.133070 -0.883417 -0.454878 -0.134953 -0.880245 +-0.525730 0.000000 -0.850652 -0.525712 0.000000 -0.850642 +-0.790662 -0.131655 -0.597931 -0.789697 -0.132633 -0.598956 +-0.824180 0.000000 -0.566328 -0.828822 0.000000 -0.559465 +-0.738174 0.000000 -0.674610 -0.742576 0.000000 -0.669729 +-0.866809 -0.131200 -0.481070 -0.868923 -0.123386 -0.479293 +-0.822618 -0.259890 -0.505724 -0.825068 -0.253883 -0.504746 +-0.894425 0.000000 -0.447215 -0.894406 0.000000 -0.447188 +-0.737962 -0.264081 -0.621026 -0.738243 -0.262673 -0.621265 +-0.695304 -0.132792 -0.706342 -0.696188 -0.133305 -0.705344 +-0.638052 0.000000 -0.769993 -0.641896 0.000000 -0.766778 +-0.762696 -0.383611 -0.520709 -0.765099 -0.379223 -0.520310 +-0.320818 -0.132791 -0.937786 -0.319529 -0.133305 -0.938139 +-0.403354 0.000000 -0.915044 -0.398755 0.000000 -0.917051 +-0.273266 0.000000 -0.961939 -0.266945 0.000000 -0.963683 +-0.225429 -0.264080 -0.937786 -0.225501 -0.262673 -0.938139 +-0.181207 -0.131654 -0.974593 -0.182562 -0.132633 -0.974181 +-0.137952 0.000000 -0.990439 -0.129734 0.000000 -0.991516 +-0.737962 0.264081 -0.621026 -0.738243 0.262673 -0.621265 +-0.671459 0.386185 -0.632459 -0.667043 0.390881 -0.634205 +-0.638195 0.262864 -0.723609 -0.633442 0.266274 -0.726493 +-0.762696 0.383611 -0.520709 -0.765099 0.379223 -0.520310 +-0.822618 0.259890 -0.505724 -0.825068 0.253883 -0.504746 +-0.688189 0.499997 -0.525736 -0.688162 0.499985 -0.525712 +-0.790662 0.131655 -0.597931 -0.789697 0.132633 -0.598956 +-0.695304 0.132792 -0.706342 -0.696188 0.133305 -0.705344 +-0.589216 0.133070 -0.796942 -0.583880 0.134953 -0.800501 +-0.866809 0.131200 -0.481070 -0.868923 0.123386 -0.479293 +-0.506729 0.266402 -0.819912 -0.506424 0.268319 -0.819453 +-0.449297 0.133070 -0.883417 -0.454878 0.134953 -0.880245 +-0.361800 0.262863 -0.894429 -0.366497 0.266274 -0.891476 +-0.409952 0.399604 -0.819913 -0.411695 0.398724 -0.819453 +-0.550009 0.399604 -0.733353 -0.548814 0.398724 -0.734703 +-0.447211 0.525727 -0.723612 -0.448988 0.520157 -0.726493 +-0.574776 0.519255 -0.632461 -0.577899 0.513596 -0.634205 +-0.308633 0.519254 -0.796945 -0.308786 0.513596 -0.800501 +-0.265395 0.386184 -0.883418 -0.268929 0.390881 -0.880245 +-0.162456 0.499995 -0.850654 -0.162450 0.499985 -0.850642 +-0.369536 0.711278 -0.597935 -0.370159 0.710044 -0.598956 +-0.254681 0.783840 -0.566333 -0.256111 0.788263 -0.559465 +-0.228103 0.702042 -0.674615 -0.229438 0.706229 -0.669729 +-0.392635 0.783840 -0.481073 -0.385846 0.788263 -0.479293 +-0.501373 0.702043 -0.505727 -0.496414 0.706229 -0.504746 +-0.276385 0.850640 -0.447215 -0.276376 0.850642 -0.447218 +-0.479198 0.620236 -0.621028 -0.477950 0.620930 -0.621265 +-0.341150 0.620235 -0.706346 -0.341899 0.620930 -0.705344 +-0.197165 0.606821 -0.769997 -0.198340 0.610462 -0.766778 +-0.600523 0.606822 -0.520710 -0.597095 0.610462 -0.520310 +-0.225429 0.264080 -0.937786 -0.225501 0.262673 -0.938139 +-0.124640 0.383610 -0.915045 -0.123203 0.379223 -0.917051 +-0.084442 0.259889 -0.961939 -0.082461 0.253853 -0.963683 +-0.320818 0.132791 -0.937786 -0.319529 0.133305 -0.938139 +-0.181207 0.131654 -0.974593 -0.182562 0.132633 -0.974181 +-0.042628 0.131199 -0.990439 -0.040071 0.123386 -0.991516 +0.023119 0.783447 -0.621029 0.021699 0.783288 -0.621265 +0.159797 0.757930 -0.632461 0.165624 0.755181 -0.634205 +0.052790 0.688185 -0.723612 0.057497 0.684744 -0.726493 +0.129157 0.843907 -0.520711 0.124241 0.844844 -0.520341 +-0.007026 0.862665 -0.505728 -0.013489 0.863124 -0.504746 +0.262869 0.809012 -0.525738 0.262856 0.808985 -0.525712 +-0.119111 0.792645 -0.597935 -0.117862 0.792016 -0.598956 +-0.088563 0.702305 -0.706346 -0.088321 0.703299 -0.705344 +-0.055516 0.601496 -0.796945 -0.052034 0.597003 -0.800501 +-0.143074 0.864927 -0.481074 -0.151158 0.864528 -0.479293 +0.096780 0.564248 -0.819913 0.098697 0.564562 -0.819453 +-0.012280 0.468424 -0.883418 -0.012177 0.474319 -0.880245 +0.138197 0.425320 -0.894430 0.139988 0.430830 -0.891476 +0.253366 0.513369 -0.819913 0.251991 0.514756 -0.819453 +0.210088 0.646572 -0.733354 0.209632 0.645161 -0.734703 +0.361804 0.587779 -0.723612 0.355937 0.587756 -0.726493 +0.316229 0.707101 -0.632461 0.309885 0.708304 -0.634205 +0.398469 0.453985 -0.796944 0.393017 0.452406 -0.800501 +0.285272 0.371742 -0.883418 0.288644 0.376568 -0.880245 +0.562274 0.571246 -0.597935 0.560900 0.571459 -0.598956 +0.624147 0.615637 -0.481073 0.630451 0.610553 -0.479293 +0.512753 0.693775 -0.505727 0.518265 0.690359 -0.504746 +0.441802 0.647406 -0.621028 0.442824 0.646443 -0.621265 +0.484459 0.516115 -0.706346 0.484878 0.517045 -0.705344 +0.391555 0.758647 -0.520711 0.396069 0.756523 -0.520341 +0.181495 0.296000 -0.937787 0.180151 0.295663 -0.938139 +0.027156 0.346149 -0.937787 0.028016 0.345073 -0.938139 +0.069216 0.213020 -0.974593 0.069735 0.214606 -0.974181 +0.918241 -0.301255 -0.257058 0.917814 -0.301340 -0.258400 +0.947213 -0.162458 -0.276396 0.948973 -0.156896 -0.273446 +0.960967 -0.238674 -0.139921 0.962737 -0.233985 -0.135472 +0.919554 -0.375034 -0.117350 0.918058 -0.377270 -0.121555 +0.870465 -0.433883 -0.232456 0.867702 -0.436445 -0.237800 +0.951058 -0.309013 0.000000 0.951048 -0.309000 0.000000 +0.855476 -0.358224 -0.373947 0.856319 -0.356853 -0.373302 +0.891875 -0.220114 -0.395107 0.891812 -0.221381 -0.394452 +0.910136 -0.082241 -0.406065 0.911344 -0.075808 -0.404553 +0.804731 -0.484436 -0.343118 0.800287 -0.487167 -0.349559 +0.959966 0.000000 -0.280117 0.960509 0.000000 -0.278176 +0.910136 0.082241 -0.406065 0.911344 0.075808 -0.404553 +0.947213 0.162458 -0.276396 0.948973 0.156896 -0.273446 +0.986715 0.082322 -0.140059 0.986694 0.080569 -0.141057 +0.986715 -0.082322 -0.140059 0.986694 -0.080569 -0.141057 +1.000000 0.000000 0.000000 0.999969 0.000000 -0.006500 +0.987689 -0.156432 0.000000 0.987365 -0.158147 -0.006439 +0.987689 0.156432 0.000000 0.987365 0.158147 -0.006439 +0.960967 0.238674 -0.139921 0.962737 0.233985 -0.135472 +0.951058 0.309013 0.000000 0.951048 0.309000 0.000000 +0.971871 0.000000 0.235513 0.972259 0.000000 0.233802 +0.959253 0.160620 0.232455 0.958525 0.156896 0.237800 +0.935787 0.081085 0.343116 0.933805 0.076266 0.349528 +0.935787 -0.081085 0.343116 0.933805 -0.076266 0.349528 +0.959253 -0.160620 0.232455 0.958525 -0.156896 0.237800 +0.894425 0.000000 0.447215 0.894406 0.000000 0.447188 +0.989761 -0.081141 0.117430 0.989746 -0.079958 0.118229 +0.989761 0.081141 0.117430 0.989746 0.079958 0.118229 +0.964376 0.237083 0.117350 0.964507 0.234382 0.121555 +0.964376 -0.237083 0.117350 0.964507 -0.234382 0.121555 +0.918241 0.301255 -0.257058 0.917814 0.301340 -0.258400 +0.870465 0.433883 -0.232456 0.867702 0.436445 -0.237800 +0.919554 0.375034 -0.117350 0.918058 0.377270 -0.121555 +0.891875 0.220114 -0.395107 0.891812 0.221381 -0.394452 +0.855476 0.358224 -0.373947 0.856319 0.356853 -0.373302 +0.804731 0.484436 -0.343118 0.800287 0.487167 -0.349559 +-0.002760 -0.966392 -0.257059 -0.002991 -0.966002 -0.258400 +0.138199 -0.951055 -0.276397 0.144017 -0.951018 -0.273476 +0.069961 -0.987688 -0.139921 0.074953 -0.987915 -0.135472 +-0.072524 -0.990439 -0.117350 -0.075106 -0.989715 -0.121555 +-0.143661 -0.961938 -0.232456 -0.146947 -0.960112 -0.237800 +0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 +-0.076335 -0.924303 -0.373948 -0.074740 -0.924680 -0.373302 +0.066265 -0.916242 -0.395108 0.065004 -0.916593 -0.394452 +0.203033 -0.891003 -0.406067 0.209479 -0.890164 -0.404553 +-0.212052 -0.915043 -0.343118 -0.216010 -0.911649 -0.349559 +0.296648 -0.912981 -0.280118 0.296793 -0.913511 -0.278176 +0.359468 -0.840174 -0.406067 0.353740 -0.843287 -0.404553 +0.447216 -0.850648 -0.276397 0.442488 -0.854030 -0.273446 +0.383207 -0.912982 -0.140059 0.381542 -0.913511 -0.141057 +0.226619 -0.963861 -0.140059 0.228248 -0.963317 -0.141057 +0.309017 -0.951056 0.000000 0.309000 -0.951018 -0.006500 +0.156435 -0.987688 0.000000 0.154668 -0.987915 -0.006439 +0.453991 -0.891006 0.000000 0.455519 -0.890164 -0.006439 +0.523951 -0.840177 -0.139921 0.520035 -0.843287 -0.135472 +0.587786 -0.809017 0.000000 0.587756 -0.809015 0.000000 +0.300323 -0.924305 0.235515 0.300424 -0.924680 0.233802 +0.449185 -0.862668 0.232457 0.445418 -0.863124 0.237800 +0.366289 -0.864929 0.343118 0.361064 -0.864528 0.349559 +0.212052 -0.915043 0.343118 0.216010 -0.911649 0.349559 +0.143661 -0.961938 0.232456 0.146947 -0.960112 0.237800 +0.276385 -0.850640 0.447215 0.276376 -0.850642 0.447218 +0.228681 -0.966393 0.117431 0.229774 -0.966002 0.118229 +0.383023 -0.916244 0.117431 0.381878 -0.916593 0.118229 +0.523490 -0.843911 0.117350 0.520951 -0.844874 0.121555 +0.072524 -0.990439 0.117350 0.075106 -0.989715 0.121555 +0.570268 -0.780202 -0.257059 0.570238 -0.779748 -0.258400 +0.681641 -0.693779 -0.232457 0.683248 -0.690359 -0.237800 +0.640841 -0.758651 -0.117350 0.642506 -0.756523 -0.121555 +0.484950 -0.780201 -0.395108 0.486129 -0.779748 -0.394452 +0.605053 -0.702904 -0.373947 0.603992 -0.704123 -0.373302 +0.709407 -0.615639 -0.343118 0.710624 -0.610553 -0.349559 +-0.919948 -0.296002 -0.257058 -0.919645 -0.295663 -0.258400 +-0.861804 -0.425322 -0.276396 -0.859981 -0.430830 -0.273446 +-0.917730 -0.371744 -0.139921 -0.916410 -0.376568 -0.135472 +-0.964376 -0.237083 -0.117350 -0.964507 -0.234382 -0.121555 +-0.959253 -0.160620 -0.232455 -0.958525 -0.156896 -0.237800 +-0.951058 -0.309013 0.000000 -0.951048 -0.309000 0.000000 +-0.902655 -0.213021 -0.373945 -0.902524 -0.214606 -0.373302 +-0.850924 -0.346151 -0.395106 -0.851619 -0.345073 -0.394452 +-0.784657 -0.468427 -0.406066 -0.781854 -0.474319 -0.404553 +-0.935787 -0.081085 -0.343116 -0.933805 -0.076266 -0.349528 +-0.776630 -0.564252 -0.280118 -0.777062 -0.564562 -0.278176 +-0.687975 -0.601499 -0.406066 -0.692709 -0.597034 -0.404553 +-0.670820 -0.688190 -0.276396 -0.675497 -0.684744 -0.273446 +-0.749882 -0.646576 -0.140059 -0.750877 -0.645161 -0.141057 +-0.846659 -0.513373 -0.140059 -0.845637 -0.514756 -0.141057 +-0.809018 -0.587783 0.000000 -0.808985 -0.587756 -0.006500 +-0.891008 -0.453987 0.000000 -0.891781 -0.452406 -0.006439 +-0.707108 -0.707106 0.000000 -0.705832 -0.708304 -0.006439 +-0.637147 -0.757935 -0.139921 -0.641316 -0.755181 -0.135472 +-0.587786 -0.809017 0.000000 -0.587756 -0.809015 0.000000 +-0.786262 -0.571248 0.235515 -0.786584 -0.571459 0.233802 +-0.681641 -0.693779 0.232457 -0.683248 -0.690359 0.237800 +-0.709407 -0.615639 0.343118 -0.710624 -0.610553 0.349559 +-0.804731 -0.484436 0.343118 -0.800287 -0.487167 0.349559 +-0.870465 -0.433883 0.232456 -0.867702 -0.436445 0.237800 +-0.723600 -0.525720 0.447215 -0.723594 -0.525712 0.447218 +-0.848429 -0.516118 0.117431 -0.847713 -0.517045 0.118229 +-0.753041 -0.647410 0.117431 -0.753716 -0.646443 0.118229 +-0.640841 -0.758651 0.117350 -0.642506 -0.756523 0.121555 +-0.919554 -0.375034 0.117350 -0.918058 -0.377270 0.121555 +-0.565796 -0.783451 -0.257059 -0.565386 -0.783288 -0.258400 +-0.449185 -0.862668 -0.232457 -0.445418 -0.863124 -0.237800 +-0.523490 -0.843911 -0.117350 -0.520951 -0.844874 -0.121555 +-0.592160 -0.702308 -0.395107 -0.591357 -0.703299 -0.394452 +-0.481531 -0.792648 -0.373947 -0.483016 -0.792016 -0.373302 +-0.366289 -0.864929 -0.343118 -0.361064 -0.864528 -0.349559 +-0.565796 0.783451 -0.257059 -0.565386 0.783288 -0.258400 +-0.670820 0.688190 -0.276396 -0.675497 0.684744 -0.273446 +-0.637147 0.757935 -0.139921 -0.641316 0.755181 -0.135472 +-0.523490 0.843911 -0.117350 -0.520951 0.844874 -0.121555 +-0.449185 0.862668 -0.232457 -0.445418 0.863124 -0.237800 +-0.587786 0.809017 0.000000 -0.587756 0.809015 0.000000 +-0.481531 0.792648 -0.373947 -0.483016 0.792016 -0.373302 +-0.592160 0.702308 -0.395107 -0.591357 0.703299 -0.394452 +-0.687975 0.601499 -0.406066 -0.692709 0.597034 -0.404553 +-0.366289 0.864929 -0.343118 -0.361064 0.864528 -0.349559 +-0.776630 0.564252 -0.280118 -0.777062 0.564562 -0.278176 +-0.784657 0.468427 -0.406066 -0.781854 0.474319 -0.404553 +-0.861804 0.425322 -0.276396 -0.859981 0.430830 -0.273446 +-0.846659 0.513373 -0.140059 -0.845637 0.514756 -0.141057 +-0.749882 0.646576 -0.140059 -0.750877 0.645161 -0.141057 +-0.809018 0.587783 0.000000 -0.808985 0.587756 -0.006500 +-0.707108 0.707106 0.000000 -0.705832 0.708304 -0.006439 +-0.891008 0.453987 0.000000 -0.891781 0.452406 -0.006439 +-0.917730 0.371744 -0.139921 -0.916410 0.376568 -0.135472 +-0.951058 0.309013 0.000000 -0.951048 0.309000 0.000000 +-0.786262 0.571248 0.235515 -0.786584 0.571459 0.233802 +-0.870465 0.433883 0.232456 -0.867702 0.436445 0.237800 +-0.804731 0.484436 0.343118 -0.800287 0.487167 0.349559 +-0.709407 0.615639 0.343118 -0.710624 0.610553 0.349559 +-0.681641 0.693779 0.232457 -0.683248 0.690359 0.237800 +-0.723600 0.525720 0.447215 -0.723594 0.525712 0.447218 +-0.753041 0.647410 0.117431 -0.753716 0.646443 0.118229 +-0.848429 0.516118 0.117431 -0.847713 0.517045 0.118229 +-0.919554 0.375034 0.117350 -0.918058 0.377270 0.121555 +-0.640841 0.758651 0.117350 -0.642506 0.756523 0.121555 +-0.919948 0.296002 -0.257058 -0.919645 0.295663 -0.258400 +-0.959253 0.160620 -0.232455 -0.958525 0.156896 -0.237800 +-0.964376 0.237083 -0.117350 -0.964507 0.234382 -0.121555 +-0.850924 0.346151 -0.395106 -0.851619 0.345073 -0.394452 +-0.902655 0.213021 -0.373945 -0.902524 0.214606 -0.373302 +-0.935787 0.081085 -0.343116 -0.933805 0.076266 -0.349528 +0.570268 0.780202 -0.257059 0.570238 0.779748 -0.258400 +0.447216 0.850648 -0.276397 0.442488 0.854030 -0.273446 +0.523951 0.840177 -0.139921 0.520035 0.843287 -0.135472 +0.640841 0.758651 -0.117350 0.642506 0.756523 -0.121555 +0.681641 0.693779 -0.232457 0.683248 0.690359 -0.237800 +0.587786 0.809017 0.000000 0.587756 0.809015 0.000000 +0.605053 0.702904 -0.373947 0.603992 0.704123 -0.373302 +0.484950 0.780201 -0.395108 0.486129 0.779748 -0.394452 +0.359468 0.840174 -0.406067 0.353740 0.843287 -0.404553 +0.709407 0.615639 -0.343118 0.710624 0.610553 -0.349559 +0.296648 0.912981 -0.280118 0.296793 0.913511 -0.278176 +0.203033 0.891003 -0.406067 0.209479 0.890164 -0.404553 +0.138199 0.951055 -0.276397 0.144017 0.951018 -0.273476 +0.226619 0.963861 -0.140059 0.228248 0.963317 -0.141057 +0.383207 0.912982 -0.140059 0.381542 0.913511 -0.141057 +0.309017 0.951056 0.000000 0.309000 0.951018 -0.006500 +0.453991 0.891006 0.000000 0.455519 0.890164 -0.006439 +0.156435 0.987688 0.000000 0.154668 0.987915 -0.006439 +0.069961 0.987688 -0.139921 0.074953 0.987915 -0.135472 +0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 +0.300323 0.924305 0.235515 0.300424 0.924680 0.233802 +0.143661 0.961938 0.232456 0.146947 0.960112 0.237800 +0.212052 0.915043 0.343118 0.216010 0.911649 0.349559 +0.366289 0.864929 0.343118 0.361064 0.864528 0.349559 +0.449185 0.862668 0.232457 0.445418 0.863124 0.237800 +0.276385 0.850640 0.447215 0.276376 0.850642 0.447218 +0.383023 0.916244 0.117431 0.381878 0.916593 0.118229 +0.228681 0.966393 0.117431 0.229774 0.966002 0.118229 +0.072524 0.990439 0.117350 0.075106 0.989715 0.121555 +0.523490 0.843911 0.117350 0.520951 0.844874 0.121555 +-0.002760 0.966392 -0.257059 -0.002991 0.966002 -0.258400 +-0.143661 0.961938 -0.232456 -0.146947 0.960112 -0.237800 +-0.072524 0.990439 -0.117350 -0.075106 0.989715 -0.121555 +0.066265 0.916242 -0.395108 0.065004 0.916593 -0.394452 +-0.076335 0.924303 -0.373948 -0.074740 0.924680 -0.373302 +-0.212052 0.915043 -0.343118 -0.216010 0.911649 -0.349559 +0.850924 -0.346151 0.395106 0.851619 -0.345073 0.394452 +0.784657 -0.468427 0.406066 0.781854 -0.474319 0.404553 +0.861804 -0.425322 0.276396 0.859981 -0.430830 0.273446 +0.762696 -0.383611 0.520709 0.765099 -0.379223 0.520310 +0.822618 -0.259890 0.505724 0.825068 -0.253883 0.504746 +0.688189 -0.499997 0.525736 0.688162 -0.499985 0.525712 +0.902655 -0.213021 0.373945 0.902524 -0.214606 0.373302 +0.919948 -0.296002 0.257058 0.919645 -0.295663 0.258400 +0.917730 -0.371744 0.139921 0.916410 -0.376568 0.135472 +0.866809 -0.131200 0.481070 0.868923 -0.123386 0.479293 +0.846659 -0.513373 0.140059 0.845637 -0.514756 0.141057 +0.891008 -0.453987 0.000000 0.891781 -0.452406 0.006439 +0.809018 -0.587783 0.000000 0.808985 -0.587756 0.006500 +0.749882 -0.646576 0.140059 0.750877 -0.645161 0.141057 +0.776630 -0.564252 0.280118 0.777062 -0.564562 0.278176 +0.670820 -0.688190 0.276396 0.675497 -0.684744 0.273446 +0.687975 -0.601499 0.406066 0.692709 -0.597034 0.404553 +0.637147 -0.757935 0.139921 0.641316 -0.755181 0.135472 +0.707108 -0.707106 0.000000 0.705832 -0.708304 0.006439 +0.481531 -0.792648 0.373947 0.483016 -0.792016 0.373302 +0.392635 -0.783840 0.481073 0.385846 -0.788263 0.479293 +0.501373 -0.702043 0.505727 0.496414 -0.706229 0.504746 +0.592160 -0.702308 0.395107 0.591357 -0.703299 0.394452 +0.565796 -0.783451 0.257059 0.565386 -0.783288 0.258400 +0.600523 -0.606822 0.520710 0.597125 -0.610462 0.520310 +0.753041 -0.647410 -0.117431 0.753716 -0.646443 -0.118229 +0.848429 -0.516118 -0.117431 0.847713 -0.517045 -0.118229 +0.786262 -0.571248 -0.235515 0.786584 -0.571459 -0.233802 +-0.066265 -0.916242 0.395108 -0.065004 -0.916593 0.394452 +-0.203033 -0.891003 0.406067 -0.209479 -0.890164 0.404553 +-0.138199 -0.951055 0.276397 -0.144017 -0.951018 0.273476 +-0.129157 -0.843907 0.520711 -0.124241 -0.844844 0.520341 +0.007026 -0.862665 0.505728 0.013489 -0.863124 0.504746 +-0.262869 -0.809012 0.525738 -0.262856 -0.808985 0.525712 +0.076335 -0.924303 0.373948 0.074740 -0.924680 0.373302 +0.002760 -0.966392 0.257059 0.002991 -0.966002 0.258400 +-0.069961 -0.987688 0.139921 -0.074953 -0.987915 0.135472 +0.143074 -0.864927 0.481074 0.151158 -0.864528 0.479293 +-0.226619 -0.963861 0.140059 -0.228248 -0.963317 0.141057 +-0.156435 -0.987688 0.000000 -0.154668 -0.987915 0.006439 +-0.309017 -0.951056 0.000000 -0.309000 -0.951018 0.006500 +-0.383207 -0.912982 0.140059 -0.381542 -0.913511 0.141057 +-0.296648 -0.912981 0.280118 -0.296793 -0.913511 0.278176 +-0.447216 -0.850648 0.276397 -0.442488 -0.854030 0.273446 +-0.359468 -0.840174 0.406067 -0.353740 -0.843287 0.404553 +-0.523951 -0.840177 0.139921 -0.520035 -0.843287 0.135472 +-0.453991 -0.891006 0.000000 -0.455519 -0.890164 0.006439 +-0.605053 -0.702904 0.373947 -0.603992 -0.704123 0.373302 +-0.624147 -0.615637 0.481073 -0.630451 -0.610553 0.479293 +-0.512753 -0.693775 0.505727 -0.518265 -0.690359 0.504746 +-0.484950 -0.780201 0.395108 -0.486129 -0.779748 0.394452 +-0.570268 -0.780202 0.257059 -0.570238 -0.779748 0.258400 +-0.391555 -0.758647 0.520711 -0.396069 -0.756523 0.520341 +-0.383023 -0.916244 -0.117431 -0.381878 -0.916593 -0.118229 +-0.228681 -0.966393 -0.117431 -0.229774 -0.966002 -0.118229 +-0.300323 -0.924305 -0.235515 -0.300424 -0.924680 -0.233802 +-0.891875 -0.220114 0.395107 -0.891812 -0.221381 0.394452 +-0.910136 -0.082241 0.406065 -0.911344 -0.075808 0.404553 +-0.947213 -0.162458 0.276396 -0.948973 -0.156896 0.273446 +-0.842515 -0.137950 0.520709 -0.841914 -0.142888 0.520310 +-0.818272 -0.273262 0.505726 -0.816706 -0.279550 0.504746 +-0.850648 0.000000 0.525736 -0.850642 0.000000 0.525712 +-0.855476 -0.358224 0.373947 -0.856319 -0.356853 0.373302 +-0.918241 -0.301255 0.257058 -0.917814 -0.301340 0.258400 +-0.960967 -0.238674 0.139921 -0.962737 -0.233985 0.135472 +-0.778382 -0.403349 0.481073 -0.775506 -0.410901 0.479293 +-0.986715 -0.082322 0.140059 -0.986694 -0.080569 0.141057 +-0.987689 -0.156432 0.000000 -0.987365 -0.158147 0.006439 +-1.000000 0.000000 0.000000 -0.999969 0.000000 0.006500 +-0.986715 0.082322 0.140059 -0.986694 0.080569 0.141057 +-0.959966 0.000000 0.280117 -0.960509 0.000000 0.278176 +-0.947213 0.162458 0.276396 -0.948973 0.156896 0.273446 +-0.910136 0.082241 0.406065 -0.911344 0.075808 0.404553 +-0.960967 0.238674 0.139921 -0.962737 0.233985 0.135472 +-0.987689 0.156432 0.000000 -0.987365 0.158147 0.006439 +-0.855476 0.358224 0.373947 -0.856319 0.356853 0.373302 +-0.778382 0.403349 0.481073 -0.775506 0.410901 0.479293 +-0.818272 0.273262 0.505726 -0.816706 0.279550 0.504746 +-0.891875 0.220114 0.395107 -0.891812 0.221381 0.394452 +-0.918241 0.301255 0.257058 -0.917814 0.301340 0.258400 +-0.842515 0.137950 0.520709 -0.841914 0.142888 0.520310 +-0.989761 0.081141 -0.117430 -0.989746 0.079958 -0.118229 +-0.989761 -0.081141 -0.117430 -0.989746 -0.079958 -0.118229 +-0.971871 0.000000 -0.235513 -0.972259 0.000000 -0.233802 +-0.484950 0.780201 0.395108 -0.486129 0.779748 0.394452 +-0.359468 0.840174 0.406067 -0.353740 0.843287 0.404553 +-0.447216 0.850648 0.276397 -0.442488 0.854030 0.273446 +-0.391555 0.758647 0.520711 -0.396069 0.756523 0.520341 +-0.512753 0.693775 0.505727 -0.518265 0.690359 0.504746 +-0.262869 0.809012 0.525738 -0.262856 0.808985 0.525712 +-0.605053 0.702904 0.373947 -0.603992 0.704123 0.373302 +-0.570268 0.780202 0.257059 -0.570238 0.779748 0.258400 +-0.523951 0.840177 0.139921 -0.520035 0.843287 0.135472 +-0.624147 0.615637 0.481073 -0.630451 0.610553 0.479293 +-0.383207 0.912982 0.140059 -0.381542 0.913511 0.141057 +-0.453991 0.891006 0.000000 -0.455519 0.890164 0.006439 +-0.309017 0.951056 0.000000 -0.309000 0.951018 0.006500 +-0.226619 0.963861 0.140059 -0.228248 0.963317 0.141057 +-0.296648 0.912981 0.280118 -0.296793 0.913511 0.278176 +-0.138199 0.951055 0.276397 -0.144017 0.951018 0.273476 +-0.203033 0.891003 0.406067 -0.209479 0.890164 0.404553 +-0.069961 0.987688 0.139921 -0.074953 0.987915 0.135472 +-0.156435 0.987688 0.000000 -0.154668 0.987915 0.006439 +0.076335 0.924303 0.373948 0.074740 0.924680 0.373302 +0.143074 0.864927 0.481074 0.151158 0.864528 0.479293 +0.007026 0.862665 0.505728 0.013489 0.863124 0.504746 +-0.066265 0.916242 0.395108 -0.065004 0.916593 0.394452 +0.002760 0.966392 0.257059 0.002991 0.966002 0.258400 +-0.129157 0.843907 0.520711 -0.124241 0.844844 0.520341 +-0.228681 0.966393 -0.117431 -0.229774 0.966002 -0.118229 +-0.383023 0.916244 -0.117431 -0.381878 0.916593 -0.118229 +-0.300323 0.924305 -0.235515 -0.300424 0.924680 -0.233802 +0.592160 0.702308 0.395107 0.591357 0.703299 0.394452 +0.687975 0.601499 0.406066 0.692709 0.597034 0.404553 +0.670820 0.688190 0.276396 0.675497 0.684744 0.273446 +0.600523 0.606822 0.520710 0.597095 0.610462 0.520310 +0.501373 0.702043 0.505727 0.496414 0.706229 0.504746 +0.688189 0.499997 0.525736 0.688162 0.499985 0.525712 +0.481531 0.792648 0.373947 0.483016 0.792016 0.373302 +0.565796 0.783451 0.257059 0.565386 0.783288 0.258400 +0.637147 0.757935 0.139921 0.641316 0.755181 0.135472 +0.392635 0.783840 0.481073 0.385846 0.788263 0.479293 +0.749882 0.646576 0.140059 0.750877 0.645161 0.141057 +0.707108 0.707106 0.000000 0.705832 0.708304 0.006439 +0.809018 0.587783 0.000000 0.808985 0.587756 0.006500 +0.846659 0.513373 0.140059 0.845637 0.514756 0.141057 +0.776630 0.564252 0.280118 0.777062 0.564562 0.278176 +0.861804 0.425322 0.276396 0.859981 0.430830 0.273446 +0.784657 0.468427 0.406066 0.781854 0.474319 0.404553 +0.917730 0.371744 0.139921 0.916410 0.376568 0.135472 +0.891008 0.453987 0.000000 0.891781 0.452406 0.006439 +0.902655 0.213021 0.373945 0.902524 0.214606 0.373302 +0.866809 0.131200 0.481070 0.868923 0.123386 0.479293 +0.822618 0.259890 0.505724 0.825068 0.253883 0.504746 +0.850924 0.346151 0.395106 0.851619 0.345073 0.394452 +0.919948 0.296002 0.257058 0.919645 0.295663 0.258400 +0.762696 0.383611 0.520709 0.765099 0.379223 0.520310 +0.848429 0.516118 -0.117431 0.847713 0.517045 -0.118229 +0.753041 0.647410 -0.117431 0.753716 0.646443 -0.118229 +0.786262 0.571248 -0.235515 0.786584 0.571459 -0.233802 +0.341150 -0.620235 0.706346 0.341899 -0.620930 0.705344 +0.447211 -0.525727 0.723612 0.448988 -0.520157 0.726493 +0.308633 -0.519254 0.796945 0.308786 -0.513596 0.800501 +0.197165 -0.606821 0.769997 0.198340 -0.610462 0.766778 +0.228103 -0.702042 0.674615 0.229438 -0.706229 0.669729 +0.162456 -0.499995 0.850654 0.162450 -0.499985 0.850642 +0.369536 -0.711278 0.597935 0.370159 -0.710044 0.598956 +0.479198 -0.620236 0.621028 0.477950 -0.620930 0.621265 +0.574776 -0.519255 0.632461 0.577899 -0.513596 0.634205 +0.254681 -0.783840 0.566333 0.256111 -0.788263 0.559465 +0.550009 -0.399604 0.733353 0.548814 -0.398724 0.734703 +0.671459 -0.386185 0.632459 0.667043 -0.390881 0.634205 +0.638195 -0.262864 0.723609 0.633442 -0.266274 0.726493 +0.506729 -0.266402 0.819912 0.506424 -0.268319 0.819453 +0.409951 -0.399604 0.819913 0.411695 -0.398724 0.819453 +0.361800 -0.262863 0.894429 0.366497 -0.266274 0.891476 +0.265395 -0.386184 0.883418 0.268929 -0.390881 0.880245 +0.449297 -0.133070 0.883417 0.454878 -0.134953 0.880245 +0.589216 -0.133070 0.796942 0.583880 -0.134953 0.800501 +0.525730 0.000000 0.850652 0.525712 0.000000 0.850642 +0.181207 -0.131654 0.974593 0.182562 -0.132633 0.974181 +0.273266 0.000000 0.961939 0.266945 0.000000 0.963683 +0.137952 0.000000 0.990439 0.129734 0.000000 0.991516 +0.042628 -0.131199 0.990439 0.040071 -0.123386 0.991516 +0.084442 -0.259889 0.961939 0.082461 -0.253853 0.963683 +0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 +0.225429 -0.264080 0.937786 0.225501 -0.262673 0.938139 +0.320818 -0.132791 0.937786 0.319529 -0.133305 0.938139 +0.403354 0.000000 0.915044 0.398755 0.000000 0.917051 +0.124640 -0.383610 0.915045 0.123203 -0.379223 0.917051 +0.695304 -0.132792 0.706342 0.696188 -0.133305 0.705344 +0.738174 0.000000 0.674610 0.742576 0.000000 0.669729 +0.638052 0.000000 0.769993 0.641896 0.000000 0.766778 +0.737962 -0.264081 0.621026 0.738243 -0.262673 0.621265 +0.790662 -0.131655 0.597931 0.789697 -0.132633 0.598956 +0.824180 0.000000 0.566328 0.828822 0.000000 0.559465 +-0.484459 -0.516115 0.706346 -0.484878 -0.517045 0.705344 +-0.361803 -0.587779 0.723612 -0.355937 -0.587756 0.726493 +-0.398469 -0.453985 0.796945 -0.393017 -0.452406 0.800501 +-0.516194 -0.375032 0.769996 -0.519303 -0.377270 0.766778 +-0.597194 -0.433882 0.674615 -0.600757 -0.436445 0.669729 +-0.425323 -0.309011 0.850654 -0.425306 -0.309000 0.850642 +-0.562274 -0.571246 0.597935 -0.560900 -0.571459 0.598956 +-0.441802 -0.647406 0.621028 -0.442824 -0.646443 0.621265 +-0.316229 -0.707101 0.632461 -0.309885 -0.708304 0.634205 +-0.666776 -0.484435 0.566333 -0.670553 -0.487167 0.559465 +-0.210088 -0.646572 0.733354 -0.209632 -0.645161 0.734703 +-0.159797 -0.757930 0.632461 -0.165624 -0.755181 0.634205 +-0.052790 -0.688185 0.723612 -0.057497 -0.684744 0.726493 +-0.096779 -0.564248 0.819913 -0.098697 -0.564562 0.819453 +-0.253366 -0.513369 0.819913 -0.251991 -0.514756 0.819453 +-0.138197 -0.425319 0.894430 -0.139988 -0.430830 0.891476 +-0.285272 -0.371742 0.883418 -0.288644 -0.376568 0.880245 +0.012280 -0.468424 0.883418 0.012177 -0.474319 0.880245 +0.055516 -0.601496 0.796945 0.052034 -0.597003 0.800501 +-0.069216 -0.213020 0.974593 -0.069735 -0.214606 0.974181 +-0.111605 -0.081085 0.990439 -0.104953 -0.076266 0.991516 +-0.221076 -0.160619 0.961939 -0.215949 -0.156896 0.963683 +-0.181495 -0.296000 0.937787 -0.180151 -0.295663 0.938139 +-0.027156 -0.346149 0.937787 -0.028016 -0.345073 0.938139 +-0.326319 -0.237082 0.915045 -0.322581 -0.234382 0.917051 +0.088563 -0.702305 0.706346 0.088321 -0.703299 0.705344 +-0.023119 -0.783447 0.621029 -0.021699 -0.783288 0.621265 +0.119111 -0.792645 0.597935 0.117862 -0.792016 0.598956 +-0.640564 0.301254 0.706345 -0.641591 0.301340 0.705344 +-0.670817 0.162457 0.723611 -0.668996 0.156896 0.726493 +-0.554901 0.238672 0.796944 -0.551714 0.233985 0.800501 +-0.516194 0.375032 0.769996 -0.519303 0.377270 0.766778 +-0.597194 0.433882 0.674615 -0.600757 0.436445 0.669729 +-0.425323 0.309011 0.850654 -0.425306 0.309000 0.850642 +-0.717043 0.358223 0.597934 -0.716849 0.356853 0.598956 +-0.752247 0.220113 0.621027 -0.751640 0.221381 0.621265 +-0.770215 0.082241 0.632460 -0.769402 0.075808 0.634205 +-0.666776 0.484435 0.566333 -0.670553 0.487167 0.559465 +-0.679848 0.000000 0.733353 -0.678365 0.000000 0.734703 +-0.770215 -0.082241 0.632460 -0.769402 -0.075808 0.634205 +-0.670817 -0.162457 0.723611 -0.668996 -0.156896 0.726493 +-0.566540 -0.082322 0.819912 -0.567431 -0.080569 0.819453 +-0.566540 0.082322 0.819912 -0.567431 0.080569 0.819453 +-0.447210 0.000000 0.894429 -0.453017 0.000000 0.891476 +-0.441704 0.156432 0.883418 -0.447340 0.158147 0.880245 +-0.441704 -0.156432 0.883418 -0.447340 -0.158147 0.880245 +-0.554901 -0.238672 0.796944 -0.551714 -0.233985 0.800501 +-0.223984 0.000000 0.974593 -0.225654 0.000000 0.974181 +-0.111605 0.081085 0.990439 -0.104953 0.076266 0.991516 +-0.221076 0.160619 0.961939 -0.215949 0.156896 0.963683 +-0.337599 0.081140 0.937786 -0.336863 0.079958 0.938139 +-0.337599 -0.081140 0.937786 -0.336863 -0.079958 0.938139 +-0.326319 0.237082 0.915045 -0.322581 0.234382 0.917051 +-0.640564 -0.301254 0.706345 -0.641591 -0.301340 0.705344 +-0.752247 -0.220113 0.621027 -0.751640 -0.221381 0.621265 +-0.717043 -0.358223 0.597934 -0.716849 -0.356853 0.598956 +0.088563 0.702305 0.706346 0.088321 0.703299 0.705344 +-0.052790 0.688185 0.723612 -0.057497 0.684744 0.726493 +0.055516 0.601496 0.796945 0.052034 0.597003 0.800501 +0.197165 0.606821 0.769997 0.198340 0.610462 0.766778 +0.228103 0.702042 0.674615 0.229438 0.706229 0.669729 +0.162456 0.499995 0.850654 0.162450 0.499985 0.850642 +0.119111 0.792645 0.597935 0.117862 0.792016 0.598956 +-0.023119 0.783447 0.621029 -0.021699 0.783288 0.621265 +-0.159797 0.757930 0.632461 -0.165624 0.755181 0.634205 +0.254681 0.783840 0.566333 0.256111 0.788263 0.559465 +-0.210088 0.646572 0.733354 -0.209632 0.645161 0.734703 +-0.316229 0.707101 0.632461 -0.309885 0.708304 0.634205 +-0.361803 0.587779 0.723612 -0.355937 0.587756 0.726493 +-0.253366 0.513369 0.819913 -0.251991 0.514756 0.819453 +-0.096779 0.564248 0.819913 -0.098697 0.564562 0.819453 +-0.138197 0.425319 0.894430 -0.139988 0.430830 0.891476 +0.012280 0.468424 0.883418 0.012177 0.474319 0.880245 +-0.285272 0.371742 0.883418 -0.288644 0.376568 0.880245 +-0.398469 0.453985 0.796945 -0.393017 0.452406 0.800501 +-0.069216 0.213020 0.974593 -0.069735 0.214606 0.974181 +0.042628 0.131199 0.990439 0.040071 0.123386 0.991516 +0.084442 0.259889 0.961939 0.082461 0.253853 0.963683 +-0.027156 0.346149 0.937787 -0.028016 0.345073 0.938139 +-0.181495 0.296000 0.937787 -0.180151 0.295663 0.938139 +0.124640 0.383610 0.915045 0.123203 0.379223 0.917051 +-0.484459 0.516115 0.706346 -0.484878 0.517045 0.705344 +-0.441802 0.647406 0.621028 -0.442824 0.646443 0.621265 +-0.562274 0.571246 0.597935 -0.560900 0.571459 0.598956 +0.695304 0.132792 0.706342 0.696188 0.133305 0.705344 +0.638195 0.262864 0.723609 0.633442 0.266274 0.726493 +0.589216 0.133070 0.796942 0.583880 0.134953 0.800501 +0.790662 0.131655 0.597931 0.789697 0.132633 0.598956 +0.737962 0.264081 0.621026 0.738243 0.262673 0.621265 +0.671459 0.386185 0.632459 0.667043 0.390881 0.634205 +0.550009 0.399604 0.733353 0.548814 0.398724 0.734703 +0.574776 0.519255 0.632461 0.577899 0.513596 0.634205 +0.447211 0.525727 0.723612 0.448988 0.520157 0.726493 +0.409951 0.399604 0.819913 0.411695 0.398724 0.819453 +0.506729 0.266402 0.819912 0.506424 0.268319 0.819453 +0.361800 0.262863 0.894429 0.366497 0.266274 0.891476 +0.449297 0.133070 0.883417 0.454878 0.134953 0.880245 +0.265395 0.386184 0.883418 0.268929 0.390881 0.880245 +0.308633 0.519254 0.796945 0.308786 0.513596 0.800501 +0.181207 0.131654 0.974593 0.182562 0.132633 0.974181 +0.320818 0.132791 0.937786 0.319529 0.133305 0.938139 +0.225429 0.264080 0.937786 0.225501 0.262673 0.938139 +0.341150 0.620235 0.706346 0.341899 0.620930 0.705344 +0.479198 0.620236 0.621028 0.477950 0.620930 0.621265 +0.369536 0.711278 0.597935 0.370159 0.710044 0.598956 +3 0 1 2 +3 1 0 3 +3 4 3 0 +3 3 5 1 +3 0 6 4 +3 6 0 7 +3 2 7 0 +3 7 8 6 +3 9 10 11 +3 10 9 7 +3 8 7 9 +3 7 2 10 +3 12 6 8 +3 6 12 13 +3 14 13 12 +3 13 4 6 +3 15 10 2 +3 10 15 16 +3 17 16 15 +3 16 11 10 +3 15 18 17 +3 18 15 19 +3 2 19 15 +3 19 20 18 +3 21 1 5 +3 1 21 19 +3 20 19 21 +3 19 2 1 +3 22 18 20 +3 18 22 23 +3 24 23 22 +3 23 17 18 +3 25 26 27 +3 26 25 28 +3 29 28 25 +3 28 30 26 +3 25 31 29 +3 31 25 32 +3 27 32 25 +3 32 20 31 +3 22 33 24 +3 33 22 32 +3 20 32 22 +3 32 27 33 +3 21 31 20 +3 31 21 34 +3 5 34 21 +3 34 29 31 +3 35 36 37 +3 36 35 23 +3 17 23 35 +3 23 24 36 +3 35 38 17 +3 38 35 39 +3 37 39 35 +3 39 40 38 +3 41 42 43 +3 41 43 39 +3 40 39 43 +3 39 37 41 +3 44 38 40 +3 38 44 16 +3 11 16 44 +3 16 17 38 +3 45 46 47 +3 47 48 45 +3 49 45 48 +3 48 47 50 +3 45 49 51 +3 51 52 45 +3 46 45 52 +3 52 51 8 +3 9 11 53 +3 53 52 9 +3 8 9 52 +3 52 53 46 +3 12 8 51 +3 51 54 12 +3 14 12 54 +3 54 51 49 +3 55 46 53 +3 53 56 55 +3 57 55 56 +3 56 53 11 +3 55 57 58 +3 58 59 55 +3 46 55 59 +3 59 58 60 +3 61 50 47 +3 47 59 61 +3 60 61 59 +3 59 47 46 +3 62 60 58 +3 58 63 62 +3 64 62 63 +3 63 58 57 +3 65 66 67 +3 67 68 65 +3 69 65 68 +3 68 67 70 +3 65 69 71 +3 71 72 65 +3 66 65 72 +3 72 71 60 +3 62 64 73 +3 73 72 62 +3 60 62 72 +3 72 73 66 +3 61 60 71 +3 71 74 61 +3 50 61 74 +3 74 71 69 +3 75 76 77 +3 77 63 75 +3 57 75 63 +3 63 77 64 +3 75 57 78 +3 78 79 75 +3 76 75 79 +3 79 78 40 +3 43 42 80 +3 80 79 43 +3 40 43 79 +3 79 80 76 +3 44 40 78 +3 78 56 44 +3 11 44 56 +3 56 78 57 +3 81 82 83 +3 82 81 84 +3 85 84 81 +3 84 86 82 +3 81 87 85 +3 87 81 88 +3 83 88 81 +3 88 27 87 +3 33 89 24 +3 89 33 88 +3 27 88 33 +3 88 83 89 +3 26 87 27 +3 87 26 90 +3 30 90 26 +3 90 85 87 +3 91 89 83 +3 89 91 92 +3 93 92 91 +3 92 24 89 +3 91 94 93 +3 94 91 95 +3 83 95 91 +3 95 96 94 +3 97 82 86 +3 82 97 95 +3 96 95 97 +3 95 83 82 +3 98 94 96 +3 94 98 99 +3 100 99 98 +3 99 93 94 +3 101 102 103 +3 102 101 104 +3 105 104 101 +3 104 106 102 +3 101 107 105 +3 107 101 108 +3 103 108 101 +3 108 96 107 +3 98 109 100 +3 109 98 108 +3 96 108 98 +3 108 103 109 +3 97 107 96 +3 107 97 110 +3 86 110 97 +3 110 105 107 +3 111 112 113 +3 112 111 99 +3 93 99 111 +3 99 100 112 +3 111 114 93 +3 114 111 115 +3 113 115 111 +3 115 37 114 +3 116 42 41 +3 116 41 115 +3 37 115 41 +3 115 113 116 +3 36 114 37 +3 114 36 92 +3 24 92 36 +3 92 93 114 +3 117 118 119 +3 118 117 120 +3 121 120 117 +3 120 122 118 +3 117 123 121 +3 123 117 124 +3 119 124 117 +3 124 103 123 +3 109 125 100 +3 125 109 124 +3 103 124 109 +3 124 119 125 +3 102 123 103 +3 123 102 126 +3 106 126 102 +3 126 121 123 +3 127 125 119 +3 125 127 128 +3 129 128 127 +3 128 100 125 +3 127 130 129 +3 130 127 131 +3 119 131 127 +3 131 132 130 +3 133 118 122 +3 118 133 131 +3 132 131 133 +3 131 119 118 +3 134 130 132 +3 130 134 135 +3 136 135 134 +3 135 129 130 +3 137 138 139 +3 138 137 140 +3 141 140 137 +3 140 142 138 +3 137 143 141 +3 143 137 144 +3 139 144 137 +3 144 132 143 +3 134 145 136 +3 145 134 144 +3 132 144 134 +3 144 139 145 +3 133 143 132 +3 143 133 146 +3 122 146 133 +3 146 141 143 +3 147 148 149 +3 148 147 135 +3 129 135 147 +3 135 136 148 +3 147 150 129 +3 150 147 151 +3 149 151 147 +3 151 113 150 +3 152 42 116 +3 152 116 151 +3 113 151 116 +3 151 149 152 +3 112 150 113 +3 150 112 128 +3 100 128 112 +3 128 129 150 +3 153 154 155 +3 154 153 156 +3 157 156 153 +3 156 158 154 +3 153 159 157 +3 159 153 160 +3 155 160 153 +3 160 139 159 +3 145 161 136 +3 161 145 160 +3 139 160 145 +3 160 155 161 +3 138 159 139 +3 159 138 162 +3 142 162 138 +3 162 157 159 +3 163 161 155 +3 161 163 164 +3 165 164 163 +3 164 136 161 +3 163 166 165 +3 166 163 167 +3 155 167 163 +3 167 168 166 +3 169 154 158 +3 154 169 167 +3 168 167 169 +3 167 155 154 +3 170 166 168 +3 166 170 171 +3 64 171 170 +3 171 165 166 +3 172 67 66 +3 67 172 173 +3 174 173 172 +3 173 70 67 +3 172 175 174 +3 175 172 176 +3 66 176 172 +3 176 168 175 +3 170 73 64 +3 73 170 176 +3 168 176 170 +3 176 66 73 +3 169 175 168 +3 175 169 177 +3 158 177 169 +3 177 174 175 +3 178 77 76 +3 77 178 171 +3 165 171 178 +3 171 64 77 +3 178 179 165 +3 179 178 180 +3 76 180 178 +3 180 149 179 +3 80 42 152 +3 80 152 180 +3 149 180 152 +3 180 76 80 +3 148 179 149 +3 179 148 164 +3 136 164 148 +3 164 165 179 +3 181 182 183 +3 183 184 181 +3 185 181 184 +3 184 183 186 +3 181 185 187 +3 187 188 181 +3 182 181 188 +3 188 187 49 +3 48 50 189 +3 189 188 48 +3 49 48 188 +3 188 189 182 +3 54 49 187 +3 187 190 54 +3 14 54 190 +3 190 187 185 +3 191 182 189 +3 189 192 191 +3 193 191 192 +3 192 189 50 +3 191 193 194 +3 194 195 191 +3 182 191 195 +3 195 194 196 +3 197 186 183 +3 183 195 197 +3 196 197 195 +3 195 183 182 +3 198 196 194 +3 194 199 198 +3 200 198 199 +3 199 194 193 +3 201 202 203 +3 203 204 201 +3 205 201 204 +3 204 203 206 +3 201 205 207 +3 207 208 201 +3 202 201 208 +3 208 207 196 +3 198 200 209 +3 209 208 198 +3 196 198 208 +3 208 209 202 +3 197 196 207 +3 207 210 197 +3 186 197 210 +3 210 207 205 +3 211 212 213 +3 213 199 211 +3 193 211 199 +3 199 213 200 +3 211 193 214 +3 214 215 211 +3 212 211 215 +3 215 214 69 +3 68 70 216 +3 216 215 68 +3 69 68 215 +3 215 216 212 +3 74 69 214 +3 214 192 74 +3 50 74 192 +3 192 214 193 +3 217 218 219 +3 219 220 217 +3 221 217 220 +3 220 219 222 +3 217 221 223 +3 223 224 217 +3 218 217 224 +3 224 223 29 +3 34 5 225 +3 225 224 34 +3 29 34 224 +3 224 225 218 +3 28 29 223 +3 223 226 28 +3 30 28 226 +3 226 223 221 +3 227 218 225 +3 225 228 227 +3 229 227 228 +3 228 225 5 +3 227 229 230 +3 230 231 227 +3 218 227 231 +3 231 230 232 +3 233 222 219 +3 219 231 233 +3 232 233 231 +3 231 219 218 +3 234 232 230 +3 230 235 234 +3 236 234 235 +3 235 230 229 +3 237 238 239 +3 239 240 237 +3 241 237 240 +3 240 239 242 +3 237 241 243 +3 243 244 237 +3 238 237 244 +3 244 243 232 +3 234 236 245 +3 245 244 234 +3 232 234 244 +3 244 245 238 +3 233 232 243 +3 243 246 233 +3 222 233 246 +3 246 243 241 +3 247 248 249 +3 249 235 247 +3 229 247 235 +3 235 249 236 +3 247 229 250 +3 250 251 247 +3 248 247 251 +3 251 250 4 +3 13 14 252 +3 252 251 13 +3 4 13 251 +3 251 252 248 +3 3 4 250 +3 250 228 3 +3 5 3 228 +3 228 250 229 +3 253 254 255 +3 255 256 253 +3 257 253 256 +3 256 255 258 +3 253 257 259 +3 259 260 253 +3 254 253 260 +3 260 259 105 +3 110 86 261 +3 261 260 110 +3 105 110 260 +3 260 261 254 +3 104 105 259 +3 259 262 104 +3 106 104 262 +3 262 259 257 +3 263 254 261 +3 261 264 263 +3 265 263 264 +3 264 261 86 +3 263 265 266 +3 266 267 263 +3 254 263 267 +3 267 266 268 +3 269 258 255 +3 255 267 269 +3 268 269 267 +3 267 255 254 +3 270 268 266 +3 266 271 270 +3 272 270 271 +3 271 266 265 +3 273 274 275 +3 275 276 273 +3 277 273 276 +3 276 275 278 +3 273 277 279 +3 279 280 273 +3 274 273 280 +3 280 279 268 +3 270 272 281 +3 281 280 270 +3 268 270 280 +3 280 281 274 +3 269 268 279 +3 279 282 269 +3 258 269 282 +3 282 279 277 +3 283 284 285 +3 285 271 283 +3 265 283 271 +3 271 285 272 +3 283 265 286 +3 286 287 283 +3 284 283 287 +3 287 286 85 +3 90 30 288 +3 288 287 90 +3 85 90 287 +3 287 288 284 +3 84 85 286 +3 286 264 84 +3 86 84 264 +3 264 286 265 +3 289 290 291 +3 291 292 289 +3 293 289 292 +3 292 291 294 +3 289 293 295 +3 295 296 289 +3 290 289 296 +3 296 295 141 +3 146 122 297 +3 297 296 146 +3 141 146 296 +3 296 297 290 +3 140 141 295 +3 295 298 140 +3 142 140 298 +3 298 295 293 +3 299 290 297 +3 297 300 299 +3 301 299 300 +3 300 297 122 +3 299 301 302 +3 302 303 299 +3 290 299 303 +3 303 302 304 +3 305 294 291 +3 291 303 305 +3 304 305 303 +3 303 291 290 +3 306 304 302 +3 302 307 306 +3 308 306 307 +3 307 302 301 +3 309 310 311 +3 311 312 309 +3 313 309 312 +3 312 311 314 +3 309 313 315 +3 315 316 309 +3 310 309 316 +3 316 315 304 +3 306 308 317 +3 317 316 306 +3 304 306 316 +3 316 317 310 +3 305 304 315 +3 315 318 305 +3 294 305 318 +3 318 315 313 +3 319 320 321 +3 321 307 319 +3 301 319 307 +3 307 321 308 +3 319 301 322 +3 322 323 319 +3 320 319 323 +3 323 322 121 +3 126 106 324 +3 324 323 126 +3 121 126 323 +3 323 324 320 +3 120 121 322 +3 322 300 120 +3 122 120 300 +3 300 322 301 +3 325 326 327 +3 327 328 325 +3 329 325 328 +3 328 327 330 +3 325 329 331 +3 331 332 325 +3 326 325 332 +3 332 331 174 +3 177 158 333 +3 333 332 177 +3 174 177 332 +3 332 333 326 +3 173 174 331 +3 331 334 173 +3 70 173 334 +3 334 331 329 +3 335 326 333 +3 333 336 335 +3 337 335 336 +3 336 333 158 +3 335 337 338 +3 338 339 335 +3 326 335 339 +3 339 338 340 +3 341 330 327 +3 327 339 341 +3 340 341 339 +3 339 327 326 +3 342 340 338 +3 338 343 342 +3 344 342 343 +3 343 338 337 +3 345 346 347 +3 347 348 345 +3 349 345 348 +3 348 347 350 +3 345 349 351 +3 351 352 345 +3 346 345 352 +3 352 351 340 +3 342 344 353 +3 353 352 342 +3 340 342 352 +3 352 353 346 +3 341 340 351 +3 351 354 341 +3 330 341 354 +3 354 351 349 +3 355 356 357 +3 357 343 355 +3 337 355 343 +3 343 357 344 +3 355 337 358 +3 358 359 355 +3 356 355 359 +3 359 358 157 +3 162 142 360 +3 360 359 162 +3 157 162 359 +3 359 360 356 +3 156 157 358 +3 358 336 156 +3 158 156 336 +3 336 358 337 +3 361 362 363 +3 362 361 364 +3 365 364 361 +3 364 366 362 +3 361 367 365 +3 367 361 368 +3 363 368 361 +3 368 205 367 +3 210 369 186 +3 369 210 368 +3 205 368 210 +3 368 363 369 +3 204 367 205 +3 367 204 370 +3 206 370 204 +3 370 365 367 +3 371 369 363 +3 369 371 372 +3 373 372 371 +3 372 186 369 +3 371 374 373 +3 374 371 375 +3 363 375 371 +3 375 376 374 +3 377 362 366 +3 362 377 375 +3 376 375 377 +3 375 363 362 +3 378 374 376 +3 374 378 379 +3 236 379 378 +3 379 373 374 +3 380 239 238 +3 239 380 381 +3 382 381 380 +3 381 242 239 +3 380 383 382 +3 383 380 384 +3 238 384 380 +3 384 376 383 +3 378 245 236 +3 245 378 384 +3 376 384 378 +3 384 238 245 +3 377 383 376 +3 383 377 385 +3 366 385 377 +3 385 382 383 +3 386 249 248 +3 249 386 379 +3 373 379 386 +3 379 236 249 +3 386 387 373 +3 387 386 388 +3 248 388 386 +3 388 185 387 +3 190 252 14 +3 252 190 388 +3 185 388 190 +3 388 248 252 +3 184 387 185 +3 387 184 372 +3 186 372 184 +3 372 373 387 +3 389 390 391 +3 390 389 392 +3 393 392 389 +3 392 394 390 +3 389 395 393 +3 395 389 396 +3 391 396 389 +3 396 241 395 +3 246 397 222 +3 397 246 396 +3 241 396 246 +3 396 391 397 +3 240 395 241 +3 395 240 398 +3 242 398 240 +3 398 393 395 +3 399 397 391 +3 397 399 400 +3 401 400 399 +3 400 222 397 +3 399 402 401 +3 402 399 403 +3 391 403 399 +3 403 404 402 +3 405 390 394 +3 390 405 403 +3 404 403 405 +3 403 391 390 +3 406 402 404 +3 402 406 407 +3 272 407 406 +3 407 401 402 +3 408 275 274 +3 275 408 409 +3 410 409 408 +3 409 278 275 +3 408 411 410 +3 411 408 412 +3 274 412 408 +3 412 404 411 +3 406 281 272 +3 281 406 412 +3 404 412 406 +3 412 274 281 +3 405 411 404 +3 411 405 413 +3 394 413 405 +3 413 410 411 +3 414 285 284 +3 285 414 407 +3 401 407 414 +3 407 272 285 +3 414 415 401 +3 415 414 416 +3 284 416 414 +3 416 221 415 +3 226 288 30 +3 288 226 416 +3 221 416 226 +3 416 284 288 +3 220 415 221 +3 415 220 400 +3 222 400 220 +3 400 401 415 +3 417 418 419 +3 418 417 420 +3 421 420 417 +3 420 422 418 +3 417 423 421 +3 423 417 424 +3 419 424 417 +3 424 277 423 +3 282 425 258 +3 425 282 424 +3 277 424 282 +3 424 419 425 +3 276 423 277 +3 423 276 426 +3 278 426 276 +3 426 421 423 +3 427 425 419 +3 425 427 428 +3 429 428 427 +3 428 258 425 +3 427 430 429 +3 430 427 431 +3 419 431 427 +3 431 432 430 +3 433 418 422 +3 418 433 431 +3 432 431 433 +3 431 419 418 +3 434 430 432 +3 430 434 435 +3 308 435 434 +3 435 429 430 +3 436 311 310 +3 311 436 437 +3 438 437 436 +3 437 314 311 +3 436 439 438 +3 439 436 440 +3 310 440 436 +3 440 432 439 +3 434 317 308 +3 317 434 440 +3 432 440 434 +3 440 310 317 +3 433 439 432 +3 439 433 441 +3 422 441 433 +3 441 438 439 +3 442 321 320 +3 321 442 435 +3 429 435 442 +3 435 308 321 +3 442 443 429 +3 443 442 444 +3 320 444 442 +3 444 257 443 +3 262 324 106 +3 324 262 444 +3 257 444 262 +3 444 320 324 +3 256 443 257 +3 443 256 428 +3 258 428 256 +3 428 429 443 +3 445 446 447 +3 446 445 448 +3 449 448 445 +3 448 450 446 +3 445 451 449 +3 451 445 452 +3 447 452 445 +3 452 313 451 +3 318 453 294 +3 453 318 452 +3 313 452 318 +3 452 447 453 +3 312 451 313 +3 451 312 454 +3 314 454 312 +3 454 449 451 +3 455 453 447 +3 453 455 456 +3 457 456 455 +3 456 294 453 +3 455 458 457 +3 458 455 459 +3 447 459 455 +3 459 460 458 +3 461 446 450 +3 446 461 459 +3 460 459 461 +3 459 447 446 +3 462 458 460 +3 458 462 463 +3 344 463 462 +3 463 457 458 +3 464 347 346 +3 347 464 465 +3 466 465 464 +3 465 350 347 +3 464 467 466 +3 467 464 468 +3 346 468 464 +3 468 460 467 +3 462 353 344 +3 353 462 468 +3 460 468 462 +3 468 346 353 +3 461 467 460 +3 467 461 469 +3 450 469 461 +3 469 466 467 +3 470 357 356 +3 357 470 463 +3 457 463 470 +3 463 344 357 +3 470 471 457 +3 471 470 472 +3 356 472 470 +3 472 293 471 +3 298 360 142 +3 360 298 472 +3 293 472 298 +3 472 356 360 +3 292 471 293 +3 471 292 456 +3 294 456 292 +3 456 457 471 +3 473 474 475 +3 474 473 476 +3 477 476 473 +3 476 478 474 +3 473 479 477 +3 479 473 480 +3 475 480 473 +3 480 349 479 +3 354 481 330 +3 481 354 480 +3 349 480 354 +3 480 475 481 +3 348 479 349 +3 479 348 482 +3 350 482 348 +3 482 477 479 +3 483 481 475 +3 481 483 484 +3 485 484 483 +3 484 330 481 +3 483 486 485 +3 486 483 487 +3 475 487 483 +3 487 488 486 +3 489 474 478 +3 474 489 487 +3 488 487 489 +3 487 475 474 +3 490 486 488 +3 486 490 491 +3 200 491 490 +3 491 485 486 +3 492 203 202 +3 203 492 493 +3 494 493 492 +3 493 206 203 +3 492 495 494 +3 495 492 496 +3 202 496 492 +3 496 488 495 +3 490 209 200 +3 209 490 496 +3 488 496 490 +3 496 202 209 +3 489 495 488 +3 495 489 497 +3 478 497 489 +3 497 494 495 +3 498 213 212 +3 213 498 491 +3 485 491 498 +3 491 200 213 +3 498 499 485 +3 499 498 500 +3 212 500 498 +3 500 329 499 +3 334 216 70 +3 216 334 500 +3 329 500 334 +3 500 212 216 +3 328 499 329 +3 499 328 484 +3 330 484 328 +3 484 485 499 +3 501 502 503 +3 503 504 501 +3 505 501 504 +3 504 503 506 +3 501 505 507 +3 507 508 501 +3 502 501 508 +3 508 507 382 +3 385 366 509 +3 509 508 385 +3 382 385 508 +3 508 509 502 +3 381 382 507 +3 507 510 381 +3 242 381 510 +3 510 507 505 +3 511 502 509 +3 509 512 511 +3 513 511 512 +3 512 509 366 +3 511 513 514 +3 514 515 511 +3 502 511 515 +3 515 514 516 +3 517 506 503 +3 503 515 517 +3 516 517 515 +3 515 503 502 +3 518 516 514 +3 514 519 518 +3 520 518 519 +3 519 514 513 +3 521 522 523 +3 523 524 521 +3 525 521 524 +3 524 523 526 +3 521 525 527 +3 527 528 521 +3 522 521 528 +3 528 527 516 +3 518 520 529 +3 529 528 518 +3 516 518 528 +3 528 529 522 +3 517 516 527 +3 527 530 517 +3 506 517 530 +3 530 527 525 +3 531 532 533 +3 533 519 531 +3 513 531 519 +3 519 533 520 +3 531 513 534 +3 534 535 531 +3 532 531 535 +3 535 534 365 +3 370 206 536 +3 536 535 370 +3 365 370 535 +3 535 536 532 +3 364 365 534 +3 534 512 364 +3 366 364 512 +3 512 534 513 +3 537 538 539 +3 539 540 537 +3 541 537 540 +3 540 539 542 +3 537 541 543 +3 543 544 537 +3 538 537 544 +3 544 543 410 +3 413 394 545 +3 545 544 413 +3 410 413 544 +3 544 545 538 +3 409 410 543 +3 543 546 409 +3 278 409 546 +3 546 543 541 +3 547 538 545 +3 545 548 547 +3 549 547 548 +3 548 545 394 +3 547 549 550 +3 550 551 547 +3 538 547 551 +3 551 550 552 +3 553 542 539 +3 539 551 553 +3 552 553 551 +3 551 539 538 +3 554 552 550 +3 550 555 554 +3 506 554 555 +3 555 550 549 +3 556 525 524 +3 524 557 556 +3 558 556 557 +3 557 524 526 +3 556 558 559 +3 559 560 556 +3 525 556 560 +3 560 559 552 +3 554 506 530 +3 530 560 554 +3 552 554 560 +3 560 530 525 +3 553 552 559 +3 559 561 553 +3 542 553 561 +3 561 559 558 +3 562 505 504 +3 504 555 562 +3 549 562 555 +3 555 504 506 +3 562 549 563 +3 563 564 562 +3 505 562 564 +3 564 563 393 +3 398 242 510 +3 510 564 398 +3 393 398 564 +3 564 510 505 +3 392 393 563 +3 563 548 392 +3 394 392 548 +3 548 563 549 +3 565 566 567 +3 567 568 565 +3 569 565 568 +3 568 567 570 +3 565 569 571 +3 571 572 565 +3 566 565 572 +3 572 571 438 +3 441 422 573 +3 573 572 441 +3 438 441 572 +3 572 573 566 +3 437 438 571 +3 571 574 437 +3 314 437 574 +3 574 571 569 +3 575 566 573 +3 573 576 575 +3 577 575 576 +3 576 573 422 +3 575 577 578 +3 578 579 575 +3 566 575 579 +3 579 578 580 +3 581 570 567 +3 567 579 581 +3 580 581 579 +3 579 567 566 +3 582 580 578 +3 578 583 582 +3 542 582 583 +3 583 578 577 +3 584 558 557 +3 557 585 584 +3 586 584 585 +3 585 557 526 +3 584 586 587 +3 587 588 584 +3 558 584 588 +3 588 587 580 +3 582 542 561 +3 561 588 582 +3 580 582 588 +3 588 561 558 +3 581 580 587 +3 587 589 581 +3 570 581 589 +3 589 587 586 +3 590 541 540 +3 540 583 590 +3 577 590 583 +3 583 540 542 +3 590 577 591 +3 591 592 590 +3 541 590 592 +3 592 591 421 +3 426 278 546 +3 546 592 426 +3 421 426 592 +3 592 546 541 +3 420 421 591 +3 591 576 420 +3 422 420 576 +3 576 591 577 +3 593 594 595 +3 595 596 593 +3 597 593 596 +3 596 595 598 +3 593 597 599 +3 599 600 593 +3 594 593 600 +3 600 599 466 +3 469 450 601 +3 601 600 469 +3 466 469 600 +3 600 601 594 +3 465 466 599 +3 599 602 465 +3 350 465 602 +3 602 599 597 +3 603 594 601 +3 601 604 603 +3 605 603 604 +3 604 601 450 +3 603 605 606 +3 606 607 603 +3 594 603 607 +3 607 606 608 +3 609 598 595 +3 595 607 609 +3 608 609 607 +3 607 595 594 +3 610 608 606 +3 606 611 610 +3 570 610 611 +3 611 606 605 +3 612 586 585 +3 585 613 612 +3 614 612 613 +3 613 585 526 +3 612 614 615 +3 615 616 612 +3 586 612 616 +3 616 615 608 +3 610 570 589 +3 589 616 610 +3 608 610 616 +3 616 589 586 +3 609 608 615 +3 615 617 609 +3 598 609 617 +3 617 615 614 +3 618 569 568 +3 568 611 618 +3 605 618 611 +3 611 568 570 +3 618 605 619 +3 619 620 618 +3 569 618 620 +3 620 619 449 +3 454 314 574 +3 574 620 454 +3 449 454 620 +3 620 574 569 +3 448 449 619 +3 619 604 448 +3 450 448 604 +3 604 619 605 +3 621 622 623 +3 623 533 621 +3 532 621 533 +3 533 623 520 +3 621 532 624 +3 624 625 621 +3 622 621 625 +3 625 624 494 +3 497 478 626 +3 626 625 497 +3 494 497 625 +3 625 626 622 +3 493 494 624 +3 624 536 493 +3 206 493 536 +3 536 624 532 +3 627 622 626 +3 626 628 627 +3 629 627 628 +3 628 626 478 +3 627 629 630 +3 630 631 627 +3 622 627 631 +3 631 630 632 +3 633 520 623 +3 623 631 633 +3 632 633 631 +3 631 623 622 +3 634 632 630 +3 630 635 634 +3 598 634 635 +3 635 630 629 +3 636 614 613 +3 613 523 636 +3 522 636 523 +3 523 613 526 +3 636 522 637 +3 637 638 636 +3 614 636 638 +3 638 637 632 +3 634 598 617 +3 617 638 634 +3 632 634 638 +3 638 617 614 +3 633 632 637 +3 637 529 633 +3 520 633 529 +3 529 637 522 +3 639 597 596 +3 596 635 639 +3 629 639 635 +3 635 596 598 +3 639 629 640 +3 640 641 639 +3 597 639 641 +3 641 640 477 +3 482 350 602 +3 602 641 482 +3 477 482 641 +3 641 602 597 +3 476 477 640 +3 640 628 476 +3 478 476 628 +3 628 640 629 diff --git a/thirdparty/carve-1.4.0/data/ico5.ply b/thirdparty/carve-1.4.0/data/ico5.ply new file mode 100644 index 00000000..b44d7d60 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/ico5.ply @@ -0,0 +1,7694 @@ +ply +format ascii 1.0 +element vertex 2562 +property float32 x +property float32 y +property float32 z +property float32 nx +property float32 ny +property float32 nz +element face 5120 +property list uint8 int32 vertex_indices +end_header +0.379941 -0.678907 -0.628275 0.379955 -0.679006 -0.628132 +0.402835 -0.619180 -0.674048 0.403211 -0.618610 -0.674306 +0.441802 -0.647406 -0.621028 0.442305 -0.646931 -0.621143 +0.340065 -0.649442 -0.680133 0.336985 -0.649922 -0.681173 +0.316229 -0.707101 -0.632461 0.313059 -0.707694 -0.633320 +0.361804 -0.587779 -0.723612 0.358867 -0.587756 -0.725059 +0.354817 -0.734789 -0.578092 0.354930 -0.734672 -0.578112 +0.417985 -0.705231 -0.572659 0.417798 -0.705222 -0.572741 +0.391555 -0.758647 -0.520711 0.393811 -0.757591 -0.520524 +0.453238 -0.727953 -0.514450 0.455611 -0.726676 -0.514145 +0.478504 -0.672314 -0.564826 0.479110 -0.671865 -0.564776 +0.512753 -0.693775 -0.505727 0.515488 -0.692068 -0.505234 +0.327997 -0.785710 -0.524480 0.330119 -0.784845 -0.524369 +0.290444 -0.760400 -0.580890 0.287179 -0.761101 -0.581561 +0.262869 -0.809012 -0.525738 0.262856 -0.808985 -0.525712 +0.503352 -0.610920 -0.611076 0.503281 -0.610797 -0.611194 +0.539267 -0.634574 -0.553631 0.538530 -0.634816 -0.554033 +0.562274 -0.571246 -0.597935 0.561571 -0.571337 -0.598437 +0.524736 -0.545103 -0.653846 0.524583 -0.545244 -0.653829 +0.464663 -0.583685 -0.665883 0.464827 -0.583667 -0.665761 +0.484459 -0.516115 -0.706346 0.484664 -0.516587 -0.705832 +0.424219 -0.553366 -0.716816 0.424238 -0.553911 -0.716361 +0.542217 -0.476219 -0.692255 0.542589 -0.476577 -0.691702 +0.581625 -0.504203 -0.638350 0.580981 -0.504166 -0.638936 +0.597194 -0.433882 -0.674615 0.598956 -0.435163 -0.672170 +0.458526 -0.415591 -0.785517 0.458571 -0.415723 -0.785394 +0.471888 -0.342842 -0.812269 0.473373 -0.343913 -0.810907 +0.516194 -0.375032 -0.769996 0.517747 -0.376141 -0.768395 +0.413169 -0.382678 -0.826347 0.410474 -0.381634 -0.828150 +0.398469 -0.453985 -0.796944 0.395734 -0.453200 -0.798730 +0.425323 -0.309011 -0.850654 0.425306 -0.309000 -0.850642 +0.442542 -0.486234 -0.753480 0.442640 -0.486099 -0.753471 +0.501895 -0.446971 -0.740485 0.501694 -0.446974 -0.740593 +0.558030 -0.405428 -0.724038 0.559587 -0.406568 -0.722160 +0.381312 -0.522492 -0.762629 0.378582 -0.521897 -0.764367 +0.616025 -0.529129 -0.583555 0.616047 -0.529221 -0.583392 +0.633501 -0.460260 -0.621962 0.635456 -0.461684 -0.618854 +0.666776 -0.484435 -0.566333 0.668630 -0.485794 -0.562914 +0.594659 -0.594890 -0.540821 0.594745 -0.594745 -0.540819 +0.647594 -0.551853 -0.525433 0.647420 -0.551897 -0.525559 +0.624147 -0.615637 -0.481073 0.627277 -0.613117 -0.480178 +0.675494 -0.572050 -0.465260 0.678640 -0.569170 -0.464156 +0.696859 -0.506292 -0.507992 0.698630 -0.507584 -0.504196 +0.723600 -0.525720 -0.447215 0.723594 -0.525712 -0.447218 +0.569814 -0.656277 -0.494584 0.572954 -0.654042 -0.493851 +0.326945 -0.485202 -0.810978 0.326884 -0.485000 -0.811090 +0.308612 -0.552412 -0.774338 0.308084 -0.553209 -0.773949 +0.253366 -0.513369 -0.819913 0.252663 -0.514054 -0.819666 +0.343033 -0.414267 -0.843037 0.342845 -0.414441 -0.842982 +0.270168 -0.443951 -0.854351 0.270394 -0.443953 -0.854244 +0.285272 -0.371742 -0.883418 0.286966 -0.374126 -0.881832 +0.212389 -0.399763 -0.891673 0.213874 -0.402264 -0.890164 +0.196435 -0.470911 -0.860033 0.195563 -0.471450 -0.859920 +0.138197 -0.425320 -0.894430 0.139073 -0.428083 -0.892941 +0.356396 -0.341429 -0.869717 0.358257 -0.343699 -0.868038 +0.175669 -0.540644 -0.822706 0.175726 -0.540849 -0.822535 +0.117881 -0.496435 -0.860033 0.118900 -0.496353 -0.859920 +0.096780 -0.564248 -0.819913 0.097720 -0.564409 -0.819666 +0.153956 -0.607472 -0.779279 0.154118 -0.607288 -0.779351 +0.232516 -0.581946 -0.779279 0.232246 -0.581896 -0.779351 +0.210088 -0.646572 -0.733354 0.209845 -0.645863 -0.734031 +0.286900 -0.619235 -0.730914 0.286905 -0.618427 -0.731559 +0.131878 -0.669606 -0.730914 0.131382 -0.668966 -0.731559 +0.075035 -0.628307 -0.774338 0.075900 -0.628651 -0.773949 +0.052790 -0.688185 -0.723612 0.055116 -0.686453 -0.725059 +0.238822 -0.735005 -0.634611 0.238746 -0.734825 -0.634785 +0.211986 -0.785893 -0.580890 0.215003 -0.784539 -0.581561 +0.159797 -0.757930 -0.632461 0.162694 -0.756554 -0.633320 +0.263989 -0.678971 -0.685061 0.263802 -0.679098 -0.684957 +0.185526 -0.704465 -0.685061 0.185736 -0.704489 -0.684957 +0.106622 -0.725293 -0.680133 0.109378 -0.723869 -0.681173 +0.020697 -0.584710 -0.810978 0.020600 -0.584521 -0.811090 +-0.001367 -0.646835 -0.762629 0.000488 -0.644765 -0.764367 +-0.055516 -0.601496 -0.796945 -0.053774 -0.599261 -0.798730 +0.042383 -0.517965 -0.854351 0.042207 -0.518082 -0.854244 +-0.034013 -0.536778 -0.843037 -0.033753 -0.536821 -0.842982 +-0.012280 -0.468424 -0.883418 -0.012207 -0.471358 -0.881832 +-0.087638 -0.485707 -0.869717 -0.087802 -0.488632 -0.868038 +-0.109323 -0.552449 -0.826347 -0.107730 -0.550035 -0.828150 +-0.162456 -0.499995 -0.850654 -0.162450 -0.499985 -0.850642 +0.063153 -0.448254 -0.891673 0.063387 -0.451155 -0.890164 +-0.187352 -0.790166 -0.583555 -0.187323 -0.790246 -0.583392 +-0.174174 -0.749781 -0.638351 -0.173650 -0.749352 -0.638936 +-0.119111 -0.792645 -0.597935 -0.118473 -0.792322 -0.598437 +-0.241971 -0.744723 -0.621962 -0.242714 -0.747032 -0.618854 +-0.254681 -0.783840 -0.566333 -0.255379 -0.786035 -0.562914 +-0.228103 -0.702042 -0.674615 -0.228767 -0.704123 -0.672170 +-0.199534 -0.827107 -0.525433 -0.199377 -0.827021 -0.525559 +-0.131412 -0.830809 -0.540821 -0.131565 -0.830744 -0.540819 +-0.143074 -0.864927 -0.481074 -0.147069 -0.864711 -0.480178 +-0.075230 -0.865868 -0.494584 -0.079073 -0.865902 -0.493851 +-0.063274 -0.830355 -0.553631 -0.062502 -0.830103 -0.554033 +-0.007026 -0.862665 -0.505728 -0.010224 -0.862880 -0.505234 +-0.210234 -0.859846 -0.465260 -0.214454 -0.859371 -0.464156 +-0.266171 -0.819205 -0.507992 -0.266854 -0.821314 -0.504196 +-0.276385 -0.850640 -0.447215 -0.276376 -0.850642 -0.447218 +-0.048122 -0.790108 -0.611076 -0.048128 -0.789972 -0.611194 +0.008067 -0.825171 -0.564826 0.007294 -0.825190 -0.564776 +0.023119 -0.783447 -0.621029 0.022401 -0.783349 -0.621143 +-0.032830 -0.745333 -0.665883 -0.032991 -0.745415 -0.665761 +-0.104109 -0.749431 -0.653847 -0.103916 -0.749443 -0.653829 +-0.088563 -0.702305 -0.706346 -0.088443 -0.702811 -0.705832 +-0.158740 -0.703978 -0.692255 -0.158818 -0.704489 -0.691702 +-0.017932 -0.697032 -0.716816 -0.017609 -0.697501 -0.716361 +0.038052 -0.737707 -0.674048 0.037416 -0.737480 -0.674306 +-0.126670 -0.605737 -0.785518 -0.126621 -0.605853 -0.785394 +-0.180241 -0.554735 -0.812269 -0.180792 -0.556505 -0.810907 +-0.197165 -0.606821 -0.769997 -0.197729 -0.608631 -0.768395 +-0.143312 -0.656615 -0.740485 -0.143132 -0.656514 -0.740593 +-0.072216 -0.653492 -0.753481 -0.072359 -0.653432 -0.753471 +-0.213144 -0.656001 -0.724039 -0.213721 -0.657857 -0.722160 +0.091681 -0.772570 -0.628275 0.091708 -0.772668 -0.628132 +0.076377 -0.816228 -0.572660 0.076510 -0.816126 -0.572741 +0.144854 -0.803011 -0.578093 0.144658 -0.803003 -0.578112 +0.129157 -0.843907 -0.520711 0.126713 -0.844386 -0.520524 +0.196483 -0.828442 -0.524480 0.194250 -0.829005 -0.524369 +0.061212 -0.855333 -0.514451 0.058535 -0.855678 -0.514145 +-0.048895 -0.366023 -0.929320 -0.048830 -0.366192 -0.929228 +-0.028717 -0.303798 -0.952304 -0.028413 -0.303110 -0.952513 +0.027156 -0.346149 -0.937787 0.027589 -0.345592 -0.937956 +-0.104792 -0.322521 -0.940744 -0.103977 -0.320078 -0.941649 +-0.124640 -0.383610 -0.915045 -0.123905 -0.381420 -0.916044 +-0.084442 -0.259889 -0.961939 -0.083468 -0.256874 -0.962798 +-0.068639 -0.427130 -0.901581 -0.068514 -0.426984 -0.901639 +0.007456 -0.408281 -0.912826 0.007263 -0.408216 -0.912839 +0.082889 -0.386725 -0.918462 0.083468 -0.386303 -0.918577 +-0.143892 -0.442862 -0.884968 -0.143254 -0.440901 -0.886013 +0.104670 -0.322136 -0.940889 0.104587 -0.321909 -0.940947 +0.160257 -0.361587 -0.918462 0.159520 -0.361583 -0.918577 +0.181495 -0.296000 -0.937787 0.180822 -0.295816 -0.937956 +0.125683 -0.255176 -0.958691 0.125553 -0.255318 -0.958647 +0.048312 -0.280316 -0.958691 0.048463 -0.280343 -0.958647 +0.069216 -0.213020 -0.974593 0.069460 -0.213813 -0.974395 +-0.007638 -0.237226 -0.971425 -0.007538 -0.238075 -0.971191 +0.145619 -0.187429 -0.971424 0.146031 -0.188147 -0.971191 +0.201802 -0.228896 -0.952304 0.201147 -0.228523 -0.952513 +0.221076 -0.160619 -0.961939 0.218513 -0.158757 -0.962798 +0.034602 -0.106493 -0.993711 0.034669 -0.106693 -0.993683 +0.055936 -0.040640 -0.997607 0.052431 -0.038087 -0.997894 +0.111605 -0.081085 -0.990439 0.108280 -0.078677 -0.990997 +-0.021365 -0.065757 -0.997607 -0.020020 -0.061617 -0.997894 +-0.042628 -0.131199 -0.990439 -0.041353 -0.127293 -0.990997 +0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 +0.013326 -0.172530 -0.984914 0.013428 -0.172369 -0.984924 +0.090631 -0.147411 -0.984914 0.090457 -0.147343 -0.984924 +0.166739 -0.121142 -0.978531 0.163610 -0.118870 -0.979308 +-0.063687 -0.196013 -0.978531 -0.062471 -0.192328 -0.979308 +0.254703 -0.267377 -0.929320 0.254738 -0.267556 -0.929228 +0.274354 -0.199327 -0.940744 0.272286 -0.197821 -0.941649 +0.326319 -0.237082 -0.915045 0.324442 -0.235725 -0.916044 +0.233953 -0.334686 -0.912826 0.234046 -0.334544 -0.912839 +0.306594 -0.305207 -0.901581 0.306406 -0.305155 -0.901639 +0.376722 -0.273702 -0.884968 0.375072 -0.272500 -0.886013 +0.763090 -0.151546 -0.628274 0.763176 -0.151524 -0.628132 +0.752247 -0.220113 -0.621027 0.751946 -0.220740 -0.621143 +0.713360 -0.191776 -0.674047 0.712943 -0.192297 -0.674306 +0.722744 -0.122727 -0.680132 0.722251 -0.119633 -0.681173 +0.770215 -0.082241 -0.632460 0.769799 -0.079043 -0.633320 +0.670817 -0.162457 -0.723611 0.669912 -0.159673 -0.725059 +0.808472 -0.110383 -0.578091 0.808405 -0.110538 -0.578112 +0.799881 -0.179593 -0.572658 0.799829 -0.179388 -0.572741 +0.842515 -0.137950 -0.520709 0.842219 -0.140416 -0.520524 +0.832385 -0.206099 -0.514449 0.831904 -0.208747 -0.514145 +0.818272 -0.273262 -0.505726 0.817499 -0.276406 -0.505234 +0.787277 -0.247321 -0.564824 0.787072 -0.248054 -0.564776 +0.848612 -0.069140 -0.524478 0.848445 -0.071413 -0.524369 +0.812937 -0.041248 -0.580889 0.812586 -0.037935 -0.581561 +0.850648 0.000000 -0.525736 0.850642 0.000000 -0.525712 +0.736567 -0.289925 -0.611075 0.736442 -0.289895 -0.611194 +0.770162 -0.316772 -0.553630 0.770165 -0.315989 -0.554033 +0.717043 -0.358223 -0.597934 0.716941 -0.357524 -0.598437 +0.680580 -0.330601 -0.653846 0.680654 -0.330424 -0.653798 +0.698710 -0.261546 -0.665882 0.698752 -0.261727 -0.665761 +0.640564 -0.301254 -0.706345 0.641072 -0.301279 -0.705832 +0.657376 -0.232451 -0.716815 0.657918 -0.232276 -0.716361 +0.620470 -0.368513 -0.692254 0.620930 -0.368755 -0.691702 +0.659262 -0.397344 -0.638350 0.659017 -0.396741 -0.638936 +0.536947 -0.307654 -0.785517 0.537065 -0.307657 -0.785394 +0.491628 -0.274689 -0.826346 0.489822 -0.272439 -0.828150 +0.554902 -0.238673 -0.796944 0.553301 -0.236335 -0.798730 +0.599193 -0.270622 -0.753480 0.599078 -0.270760 -0.753471 +0.580192 -0.339203 -0.740485 0.580126 -0.339030 -0.740593 +0.614754 -0.201185 -0.762628 0.613361 -0.198767 -0.764367 +0.693598 -0.422358 -0.583554 0.693686 -0.422346 -0.583392 +0.749538 -0.381716 -0.540820 0.749443 -0.381848 -0.540819 +0.724966 -0.445359 -0.525433 0.724937 -0.445174 -0.525559 +0.778382 -0.403349 -0.481073 0.776940 -0.407117 -0.480178 +0.752796 -0.465651 -0.465260 0.751030 -0.469527 -0.464156 +0.800242 -0.339117 -0.494583 0.799097 -0.342814 -0.493851 +0.562489 -0.161003 -0.810977 0.562273 -0.160985 -0.811090 +0.566540 -0.082322 -0.819912 0.566973 -0.081454 -0.819666 +0.620743 -0.122798 -0.774337 0.621357 -0.122044 -0.773949 +0.499997 -0.198224 -0.843037 0.500107 -0.198004 -0.842982 +0.505712 -0.119753 -0.854350 0.505783 -0.119938 -0.854244 +0.441704 -0.156432 -0.883418 0.444502 -0.157292 -0.881832 +0.445831 -0.078458 -0.891672 0.448683 -0.079104 -0.890164 +0.447210 0.000000 -0.894429 0.450087 0.000000 -0.892941 +0.508567 -0.041298 -0.860032 0.508805 -0.040284 -0.859920 +0.434854 -0.233441 -0.869717 0.437605 -0.234504 -0.868038 +0.568469 0.000000 -0.822704 0.568682 0.000000 -0.822535 +0.508567 0.041298 -0.860032 0.508805 0.040284 -0.859920 +0.566540 0.082322 -0.819912 0.566973 0.081454 -0.819666 +0.625317 0.041301 -0.779278 0.625202 0.041047 -0.779351 +0.625317 -0.041301 -0.779278 0.625202 -0.041047 -0.779351 +0.679848 0.000000 -0.733353 0.679098 0.000000 -0.734031 +0.677587 -0.081500 -0.730913 0.676840 -0.081759 -0.731559 +0.677587 0.081500 -0.730913 0.676809 0.081759 -0.731559 +0.620743 0.122798 -0.774337 0.621357 0.122044 -0.773949 +0.670817 0.162457 -0.723611 0.669912 0.159673 -0.725059 +0.772833 0.000000 -0.634610 0.772668 0.000000 -0.634785 +0.770215 0.082241 -0.632460 0.769799 0.079043 -0.633320 +0.812937 0.041248 -0.580889 0.812586 0.037935 -0.581561 +0.727318 -0.041250 -0.685060 0.727409 -0.041017 -0.684957 +0.727318 0.041250 -0.685060 0.727409 0.041017 -0.684957 +0.722744 0.122727 -0.680132 0.722251 0.119633 -0.681173 +0.562489 0.161003 -0.810977 0.562273 0.160985 -0.811090 +0.554902 0.238673 -0.796944 0.553301 0.236335 -0.798730 +0.614754 0.201185 -0.762628 0.613361 0.198767 -0.764367 +0.505712 0.119753 -0.854350 0.505783 0.119938 -0.854244 +0.499997 0.198224 -0.843037 0.500107 0.198004 -0.842982 +0.441704 0.156432 -0.883418 0.444502 0.157292 -0.881832 +0.434854 0.233441 -0.869717 0.437605 0.234504 -0.868038 +0.425323 0.309011 -0.850654 0.425306 0.309000 -0.850642 +0.491628 0.274689 -0.826346 0.489822 0.272439 -0.828150 +0.445831 0.078458 -0.891672 0.448653 0.079104 -0.890164 +0.693598 0.422358 -0.583554 0.693686 0.422346 -0.583392 +0.717043 0.358223 -0.597934 0.716941 0.357524 -0.598437 +0.659262 0.397344 -0.638350 0.659017 0.396741 -0.638936 +0.633501 0.460260 -0.621962 0.635456 0.461684 -0.618854 +0.666776 0.484435 -0.566333 0.668630 0.485794 -0.562914 +0.597194 0.433882 -0.674615 0.598956 0.435163 -0.672170 +0.724966 0.445359 -0.525433 0.724937 0.445174 -0.525559 +0.749538 0.381716 -0.540820 0.749443 0.381848 -0.540819 +0.778382 0.403349 -0.481073 0.776940 0.407117 -0.480178 +0.800242 0.339117 -0.494583 0.799097 0.342814 -0.493851 +0.818272 0.273262 -0.505726 0.817499 0.276406 -0.505234 +0.770162 0.316772 -0.553630 0.770165 0.315989 -0.554033 +0.752796 0.465651 -0.465260 0.751030 0.469527 -0.464156 +0.696859 0.506292 -0.507992 0.698630 0.507584 -0.504196 +0.723600 0.525720 -0.447215 0.723594 0.525712 -0.447218 +0.736567 0.289925 -0.611075 0.736442 0.289895 -0.611194 +0.787277 0.247321 -0.564824 0.787072 0.248054 -0.564776 +0.752247 0.220113 -0.621027 0.751946 0.220740 -0.621143 +0.698710 0.261546 -0.665882 0.698752 0.261727 -0.665761 +0.680580 0.330601 -0.653846 0.680654 0.330424 -0.653798 +0.640564 0.301254 -0.706345 0.641072 0.301279 -0.705832 +0.620470 0.368513 -0.692254 0.620930 0.368755 -0.691702 +0.657376 0.232451 -0.716815 0.657918 0.232276 -0.716361 +0.713360 0.191776 -0.674047 0.712943 0.192297 -0.674306 +0.536947 0.307654 -0.785517 0.537065 0.307657 -0.785394 +0.471888 0.342842 -0.812269 0.473373 0.343913 -0.810907 +0.516194 0.375032 -0.769996 0.517747 0.376141 -0.768395 +0.580192 0.339203 -0.740485 0.580126 0.339030 -0.740593 +0.599193 0.270622 -0.753480 0.599078 0.270760 -0.753471 +0.558030 0.405428 -0.724038 0.559587 0.406568 -0.722160 +0.763090 0.151546 -0.628274 0.763176 0.151524 -0.628132 +0.799881 0.179593 -0.572658 0.799829 0.179388 -0.572741 +0.808472 0.110383 -0.578091 0.808405 0.110538 -0.578112 +0.842515 0.137950 -0.520709 0.842219 0.140416 -0.520524 +0.848612 0.069140 -0.524478 0.848445 0.071413 -0.524369 +0.832385 0.206099 -0.514449 0.831904 0.208747 -0.514145 +0.333000 0.159610 -0.929320 0.333171 0.159612 -0.929228 +0.337599 0.081140 -0.937786 0.337230 0.080538 -0.937956 +0.280055 0.121190 -0.952303 0.279489 0.120701 -0.952513 +0.274354 0.199327 -0.940744 0.272286 0.197821 -0.941649 +0.326319 0.237082 -0.915045 0.324442 0.235725 -0.916044 +0.221076 0.160619 -0.961939 0.218513 0.158757 -0.962798 +0.385015 0.197271 -0.901581 0.384930 0.197119 -0.901639 +0.390603 0.119076 -0.912825 0.390484 0.119205 -0.912839 +0.393413 0.040674 -0.918462 0.393200 0.039979 -0.918546 +0.376722 0.273702 -0.884968 0.375072 0.272500 -0.886013 +0.338716 0.000000 -0.940889 0.338481 0.000000 -0.940947 +0.393413 -0.040674 -0.918462 0.393200 -0.039979 -0.918546 +0.337599 -0.081140 -0.937786 0.337230 -0.080538 -0.937956 +0.281526 -0.040676 -0.958691 0.281625 -0.040498 -0.958647 +0.281526 0.040676 -0.958691 0.281625 0.040498 -0.958647 +0.223984 0.000000 -0.974593 0.224799 0.000000 -0.974395 +0.223256 0.080571 -0.971424 0.224067 0.080752 -0.971191 +0.223256 -0.080571 -0.971424 0.224067 -0.080752 -0.971191 +0.280055 -0.121190 -0.952303 0.279489 -0.120701 -0.952513 +0.111974 0.000000 -0.993711 0.112186 0.000000 -0.993683 +0.055936 0.040640 -0.997607 0.052431 0.038087 -0.997894 +0.111605 0.081085 -0.990439 0.108280 0.078677 -0.990997 +0.168204 0.040641 -0.984914 0.168096 0.040498 -0.984924 +0.168204 -0.040641 -0.984914 0.168096 -0.040498 -0.984924 +0.166739 0.121142 -0.978531 0.163610 0.118870 -0.979308 +0.333000 -0.159610 -0.929320 0.333171 -0.159612 -0.929228 +0.390603 -0.119076 -0.912825 0.390484 -0.119205 -0.912839 +0.385015 -0.197271 -0.901581 0.384930 -0.197119 -0.901639 +-0.528274 -0.571137 -0.628275 -0.528336 -0.571184 -0.628132 +-0.464395 -0.574454 -0.674048 -0.463729 -0.574633 -0.674306 +-0.479198 -0.620236 -0.621028 -0.478561 -0.620563 -0.621143 +-0.512574 -0.524107 -0.680133 -0.513993 -0.521317 -0.681173 +-0.574776 -0.519255 -0.632461 -0.576312 -0.516434 -0.633320 +-0.447211 -0.525727 -0.723612 -0.448103 -0.522935 -0.725059 +-0.589185 -0.564510 -0.578092 -0.589038 -0.564592 -0.578112 +-0.541553 -0.615452 -0.572659 -0.541612 -0.615284 -0.572741 +-0.600523 -0.606822 -0.520710 -0.598804 -0.608631 -0.520524 +-0.552270 -0.656003 -0.514450 -0.550310 -0.657857 -0.514145 +-0.491546 -0.662839 -0.564825 -0.490921 -0.663289 -0.564776 +-0.501373 -0.702043 -0.505727 -0.498886 -0.704123 -0.505234 +-0.645902 -0.554737 -0.524478 -0.644429 -0.556505 -0.524369 +-0.633436 -0.511202 -0.580889 -0.635090 -0.508316 -0.581561 +-0.688189 -0.499997 -0.525736 -0.688162 -0.499985 -0.525712 +-0.425478 -0.667499 -0.611076 -0.425367 -0.667409 -0.611194 +-0.436875 -0.708966 -0.553631 -0.437330 -0.708335 -0.554033 +-0.369536 -0.711278 -0.597935 -0.369854 -0.710654 -0.598437 +-0.356273 -0.667499 -0.653847 -0.356426 -0.667409 -0.653829 +-0.411531 -0.622288 -0.665883 -0.411451 -0.622456 -0.665761 +-0.341150 -0.620235 -0.706346 -0.341533 -0.620563 -0.705832 +-0.395193 -0.574454 -0.716816 -0.395703 -0.574633 -0.716361 +-0.285358 -0.662838 -0.692255 -0.285562 -0.663289 -0.691702 +-0.299795 -0.708965 -0.638351 -0.299936 -0.708335 -0.638936 +-0.253559 -0.564508 -0.785518 -0.253639 -0.564592 -0.785394 +-0.236273 -0.511201 -0.826347 -0.236122 -0.508316 -0.828150 +-0.308633 -0.519254 -0.796945 -0.308695 -0.516434 -0.798730 +-0.325685 -0.571136 -0.753481 -0.325510 -0.571184 -0.753471 +-0.270001 -0.615452 -0.740486 -0.270058 -0.615284 -0.740593 +-0.379090 -0.524106 -0.762629 -0.379376 -0.521317 -0.764367 +-0.312870 -0.749384 -0.583555 -0.312937 -0.749443 -0.583392 +-0.382016 -0.749384 -0.540821 -0.381848 -0.749443 -0.540819 +-0.324727 -0.786430 -0.525433 -0.324809 -0.786279 -0.525559 +-0.392635 -0.783840 -0.481073 -0.389264 -0.786035 -0.480178 +-0.335314 -0.819205 -0.465260 -0.331614 -0.821314 -0.464156 +-0.448077 -0.744724 -0.494584 -0.444960 -0.747032 -0.493851 +-0.360425 -0.460878 -0.810978 -0.360240 -0.460738 -0.811090 +-0.430012 -0.464210 -0.774338 -0.430921 -0.463973 -0.773949 +-0.409952 -0.399604 -0.819913 -0.410810 -0.399152 -0.819666 +-0.287990 -0.454258 -0.843037 -0.288217 -0.454146 -0.842982 +-0.338738 -0.394133 -0.854351 -0.338664 -0.394330 -0.854244 +-0.265395 -0.386184 -0.883418 -0.267159 -0.388531 -0.881832 +-0.314568 -0.325527 -0.891672 -0.316477 -0.327708 -0.890164 +-0.387164 -0.332339 -0.860032 -0.387951 -0.331675 -0.859920 +-0.361800 -0.262863 -0.894429 -0.364147 -0.264565 -0.892941 +-0.214587 -0.444460 -0.869717 -0.216163 -0.446944 -0.868038 +-0.459901 -0.334137 -0.822705 -0.460067 -0.334239 -0.822535 +-0.435714 -0.265516 -0.860032 -0.435316 -0.266457 -0.859920 +-0.506729 -0.266402 -0.819912 -0.506577 -0.267342 -0.819666 +-0.530169 -0.334137 -0.779277 -0.529954 -0.334239 -0.779351 +-0.481615 -0.400965 -0.779278 -0.481643 -0.400708 -0.779351 +-0.550009 -0.399604 -0.733353 -0.549394 -0.399152 -0.734031 +-0.500274 -0.464210 -0.730914 -0.499496 -0.463973 -0.731559 +-0.596085 -0.332340 -0.730913 -0.595630 -0.331675 -0.731559 +-0.574373 -0.265516 -0.774337 -0.574419 -0.266457 -0.773949 +-0.638195 -0.262864 -0.723609 -0.635823 -0.264565 -0.725059 +-0.625236 -0.454259 -0.634610 -0.625080 -0.454146 -0.634785 +-0.681926 -0.444461 -0.580888 -0.679708 -0.446944 -0.581561 +-0.671459 -0.386185 -0.632459 -0.669240 -0.388531 -0.633320 +-0.564166 -0.460878 -0.685060 -0.564348 -0.460738 -0.684957 +-0.612660 -0.394133 -0.685060 -0.612598 -0.394330 -0.684957 +-0.656851 -0.325528 -0.680131 -0.654653 -0.327708 -0.681173 +-0.549701 -0.200366 -0.810976 -0.549516 -0.200232 -0.811090 +-0.615603 -0.198579 -0.762627 -0.613056 -0.199713 -0.764367 +-0.589216 -0.133070 -0.796942 -0.586566 -0.134007 -0.798730 +-0.479520 -0.200366 -0.854350 -0.479690 -0.200232 -0.854244 +-0.521022 -0.133522 -0.843035 -0.520981 -0.133763 -0.842982 +-0.449297 -0.133070 -0.883417 -0.452071 -0.134007 -0.881832 +-0.489021 -0.066741 -0.869715 -0.491867 -0.067476 -0.868038 +-0.559197 -0.066741 -0.826344 -0.556413 -0.067476 -0.828150 +-0.525730 0.000000 -0.850652 -0.525712 0.000000 -0.850642 +-0.406803 -0.198579 -0.891672 -0.409467 -0.199713 -0.890164 +-0.809392 -0.065988 -0.583550 -0.809473 -0.066042 -0.583392 +-0.766911 -0.066042 -0.638346 -0.766350 -0.066378 -0.638936 +-0.790662 -0.131655 -0.597931 -0.790155 -0.132145 -0.598437 +-0.783051 0.000000 -0.621958 -0.785485 0.000000 -0.618854 +-0.824180 0.000000 -0.566328 -0.826502 0.000000 -0.562914 +-0.738174 0.000000 -0.674610 -0.740349 0.000000 -0.672170 +-0.848288 -0.065817 -0.525429 -0.848170 -0.065920 -0.525559 +-0.830758 -0.131748 -0.540817 -0.830775 -0.131565 -0.540819 +-0.866809 -0.131200 -0.481070 -0.867855 -0.127293 -0.480178 +-0.846740 -0.196014 -0.494581 -0.847987 -0.192328 -0.493851 +-0.809271 -0.196411 -0.553628 -0.808802 -0.197028 -0.554033 +-0.822618 -0.259890 -0.505724 -0.823847 -0.256874 -0.505234 +-0.882730 -0.065757 -0.465256 -0.883572 -0.061617 -0.464187 +-0.861364 0.000000 -0.507987 -0.863552 0.000000 -0.504227 +-0.894425 0.000000 -0.447215 -0.894406 0.000000 -0.447188 +-0.766311 -0.198385 -0.611073 -0.766198 -0.198309 -0.611194 +-0.782295 -0.262659 -0.564823 -0.782556 -0.261940 -0.564776 +-0.737962 -0.264081 -0.621026 -0.738090 -0.263375 -0.621143 +-0.719004 -0.199093 -0.665880 -0.719138 -0.198950 -0.665731 +-0.744926 -0.132569 -0.653843 -0.744896 -0.132756 -0.653798 +-0.695304 -0.132792 -0.706342 -0.695730 -0.133030 -0.705832 +-0.718580 -0.066566 -0.692251 -0.719077 -0.066622 -0.691671 +-0.668462 -0.198336 -0.716813 -0.668813 -0.198767 -0.716330 +-0.689847 -0.264149 -0.674045 -0.689810 -0.263466 -0.674306 +-0.615237 -0.066709 -0.785514 -0.615345 -0.066775 -0.785394 +-0.583287 0.000000 -0.812266 -0.585131 0.000000 -0.810907 +-0.638052 0.000000 -0.769993 -0.639943 0.000000 -0.768395 +-0.668768 -0.066604 -0.740482 -0.668630 -0.066713 -0.740593 +-0.643828 -0.133255 -0.753477 -0.643818 -0.133061 -0.753471 +-0.689764 0.000000 -0.724034 -0.691702 0.000000 -0.722160 +-0.706431 -0.325927 -0.628273 -0.706504 -0.325968 -0.628132 +-0.752681 -0.324861 -0.572657 -0.752525 -0.324961 -0.572741 +-0.718950 -0.385904 -0.578090 -0.718986 -0.385723 -0.578112 +-0.762696 -0.383611 -0.520709 -0.763909 -0.381420 -0.520524 +-0.727183 -0.442864 -0.524478 -0.728416 -0.440901 -0.524369 +-0.794558 -0.322523 -0.514448 -0.795709 -0.320078 -0.514145 +-0.363221 -0.066604 -0.929319 -0.363384 -0.066713 -0.929228 +-0.297805 -0.066566 -0.952303 -0.297067 -0.066622 -0.952513 +-0.320818 -0.132791 -0.937786 -0.320170 -0.133030 -0.937956 +-0.339122 0.000000 -0.940743 -0.336558 0.000000 -0.941649 +-0.403354 0.000000 -0.915044 -0.401044 0.000000 -0.916044 +-0.273266 0.000000 -0.961939 -0.270089 0.000000 -0.962798 +-0.427439 -0.066709 -0.901579 -0.427259 -0.066775 -0.901639 +-0.385997 -0.133255 -0.912825 -0.385998 -0.133061 -0.912839 +-0.342186 -0.198335 -0.918462 -0.341594 -0.198767 -0.918546 +-0.465656 0.000000 -0.884966 -0.463607 0.000000 -0.886013 +-0.274027 -0.199092 -0.940889 -0.273843 -0.198950 -0.940947 +-0.294369 -0.264149 -0.918462 -0.294595 -0.263466 -0.918546 +-0.225429 -0.264080 -0.937786 -0.225471 -0.263375 -0.937956 +-0.203850 -0.198385 -0.958691 -0.204016 -0.198309 -0.958647 +-0.251669 -0.132568 -0.958691 -0.251656 -0.132756 -0.958647 +-0.181207 -0.131654 -0.974593 -0.181860 -0.132145 -0.974395 +-0.227977 -0.066042 -0.971424 -0.228736 -0.066378 -0.971191 +-0.133257 -0.196410 -0.971424 -0.133824 -0.197028 -0.971191 +-0.155334 -0.262658 -0.952304 -0.155156 -0.261940 -0.952513 +-0.090588 -0.065816 -0.993711 -0.090762 -0.065920 -0.993683 +-0.069141 0.000000 -0.997607 -0.064791 0.000000 -0.997894 +-0.137952 0.000000 -0.990439 -0.133854 0.000000 -0.990997 +-0.159969 -0.065988 -0.984914 -0.159795 -0.066042 -0.984924 +-0.112191 -0.131747 -0.984914 -0.112186 -0.131565 -0.984924 +-0.206102 0.000000 -0.978531 -0.202246 0.000000 -0.979308 +-0.175583 -0.324860 -0.929320 -0.175726 -0.324961 -0.929228 +-0.246012 -0.325926 -0.912826 -0.245827 -0.325968 -0.912839 +-0.195527 -0.385902 -0.901581 -0.195532 -0.385723 -0.901639 +-0.706431 0.325927 -0.628273 -0.706504 0.325968 -0.628132 +-0.689847 0.264149 -0.674045 -0.689810 0.263466 -0.674306 +-0.737962 0.264081 -0.621026 -0.738090 0.263375 -0.621143 +-0.656851 0.325528 -0.680131 -0.654653 0.327708 -0.681173 +-0.671459 0.386185 -0.632459 -0.669240 0.388531 -0.633320 +-0.638195 0.262864 -0.723609 -0.635823 0.264565 -0.725059 +-0.718950 0.385904 -0.578090 -0.718986 0.385723 -0.578112 +-0.752681 0.324861 -0.572657 -0.752525 0.324961 -0.572741 +-0.762696 0.383611 -0.520709 -0.763909 0.381420 -0.520524 +-0.794558 0.322523 -0.514448 -0.795709 0.320078 -0.514145 +-0.782295 0.262659 -0.564823 -0.782556 0.261940 -0.564776 +-0.822618 0.259890 -0.505724 -0.823847 0.256874 -0.505234 +-0.727183 0.442864 -0.524478 -0.728416 0.440901 -0.524369 +-0.681926 0.444461 -0.580888 -0.679708 0.446944 -0.581561 +-0.688189 0.499997 -0.525736 -0.688162 0.499985 -0.525712 +-0.766311 0.198385 -0.611073 -0.766198 0.198309 -0.611194 +-0.809271 0.196411 -0.553628 -0.808802 0.197028 -0.554033 +-0.790662 0.131655 -0.597931 -0.790155 0.132145 -0.598437 +-0.744926 0.132569 -0.653843 -0.744896 0.132756 -0.653798 +-0.719004 0.199093 -0.665880 -0.719138 0.198950 -0.665731 +-0.695304 0.132792 -0.706342 -0.695730 0.133030 -0.705832 +-0.668462 0.198336 -0.716813 -0.668813 0.198767 -0.716330 +-0.718580 0.066566 -0.692251 -0.719077 0.066622 -0.691671 +-0.766911 0.066042 -0.638346 -0.766350 0.066378 -0.638936 +-0.615237 0.066709 -0.785514 -0.615345 0.066775 -0.785394 +-0.559197 0.066741 -0.826344 -0.556413 0.067476 -0.828150 +-0.589216 0.133070 -0.796942 -0.586566 0.134007 -0.798730 +-0.643828 0.133255 -0.753477 -0.643818 0.133061 -0.753471 +-0.668768 0.066604 -0.740482 -0.668630 0.066713 -0.740593 +-0.615603 0.198579 -0.762627 -0.613056 0.199713 -0.764367 +-0.809392 0.065988 -0.583550 -0.809473 0.066042 -0.583392 +-0.830758 0.131748 -0.540817 -0.830775 0.131565 -0.540819 +-0.848288 0.065817 -0.525429 -0.848170 0.065920 -0.525559 +-0.866809 0.131200 -0.481070 -0.867855 0.127293 -0.480178 +-0.882730 0.065757 -0.465256 -0.883572 0.061617 -0.464187 +-0.846740 0.196014 -0.494581 -0.847987 0.192328 -0.493851 +-0.549701 0.200366 -0.810976 -0.549516 0.200232 -0.811090 +-0.574373 0.265516 -0.774337 -0.574419 0.266457 -0.773949 +-0.506729 0.266402 -0.819912 -0.506577 0.267342 -0.819666 +-0.521022 0.133522 -0.843035 -0.520981 0.133763 -0.842982 +-0.479520 0.200366 -0.854350 -0.479690 0.200232 -0.854244 +-0.449297 0.133070 -0.883417 -0.452071 0.134007 -0.881832 +-0.406803 0.198579 -0.891672 -0.409467 0.199713 -0.890164 +-0.435714 0.265516 -0.860032 -0.435316 0.266457 -0.859920 +-0.361800 0.262863 -0.894429 -0.364147 0.264565 -0.892941 +-0.489021 0.066741 -0.869715 -0.491867 0.067476 -0.868038 +-0.459901 0.334137 -0.822705 -0.460067 0.334239 -0.822535 +-0.387164 0.332339 -0.860032 -0.387951 0.331675 -0.859920 +-0.409952 0.399604 -0.819913 -0.410810 0.399152 -0.819666 +-0.481615 0.400965 -0.779278 -0.481643 0.400708 -0.779351 +-0.530169 0.334137 -0.779277 -0.529954 0.334239 -0.779351 +-0.550009 0.399604 -0.733353 -0.549394 0.399152 -0.734031 +-0.596085 0.332340 -0.730913 -0.595630 0.331675 -0.731559 +-0.500274 0.464210 -0.730914 -0.499496 0.463973 -0.731559 +-0.430012 0.464210 -0.774338 -0.430921 0.463973 -0.773949 +-0.447211 0.525727 -0.723612 -0.448103 0.522935 -0.725059 +-0.625236 0.454259 -0.634610 -0.625080 0.454146 -0.634785 +-0.633436 0.511202 -0.580889 -0.635090 0.508316 -0.581561 +-0.574776 0.519255 -0.632461 -0.576312 0.516434 -0.633320 +-0.612660 0.394133 -0.685060 -0.612598 0.394330 -0.684957 +-0.564166 0.460878 -0.685060 -0.564348 0.460738 -0.684957 +-0.512574 0.524107 -0.680133 -0.513993 0.521317 -0.681173 +-0.360425 0.460878 -0.810978 -0.360240 0.460738 -0.811090 +-0.379090 0.524106 -0.762629 -0.379376 0.521317 -0.764367 +-0.308633 0.519254 -0.796945 -0.308695 0.516434 -0.798730 +-0.338738 0.394133 -0.854351 -0.338664 0.394330 -0.854244 +-0.287990 0.454258 -0.843037 -0.288217 0.454146 -0.842982 +-0.265395 0.386184 -0.883418 -0.267159 0.388531 -0.881832 +-0.214587 0.444460 -0.869717 -0.216163 0.446944 -0.868038 +-0.236273 0.511201 -0.826347 -0.236122 0.508316 -0.828150 +-0.162456 0.499995 -0.850654 -0.162450 0.499985 -0.850642 +-0.314568 0.325527 -0.891672 -0.316477 0.327708 -0.890164 +-0.312870 0.749384 -0.583555 -0.312937 0.749443 -0.583392 +-0.299795 0.708965 -0.638351 -0.299936 0.708335 -0.638936 +-0.369536 0.711278 -0.597935 -0.369854 0.710654 -0.598437 +-0.241971 0.744723 -0.621962 -0.242714 0.747032 -0.618854 +-0.254681 0.783840 -0.566333 -0.255379 0.786035 -0.562914 +-0.228103 0.702042 -0.674615 -0.228767 0.704123 -0.672170 +-0.324727 0.786430 -0.525433 -0.324809 0.786279 -0.525559 +-0.382016 0.749384 -0.540821 -0.381848 0.749443 -0.540819 +-0.392635 0.783840 -0.481073 -0.389264 0.786035 -0.480178 +-0.448077 0.744724 -0.494584 -0.444960 0.747032 -0.493851 +-0.436875 0.708966 -0.553631 -0.437330 0.708335 -0.554033 +-0.501373 0.702043 -0.505727 -0.498886 0.704123 -0.505234 +-0.335314 0.819205 -0.465260 -0.331614 0.821314 -0.464156 +-0.266171 0.819205 -0.507992 -0.266854 0.821314 -0.504196 +-0.276385 0.850640 -0.447215 -0.276376 0.850642 -0.447218 +-0.425478 0.667499 -0.611076 -0.425367 0.667409 -0.611194 +-0.491546 0.662839 -0.564825 -0.490921 0.663289 -0.564776 +-0.479198 0.620236 -0.621028 -0.478561 0.620563 -0.621143 +-0.411531 0.622288 -0.665883 -0.411451 0.622456 -0.665761 +-0.356273 0.667499 -0.653847 -0.356426 0.667409 -0.653829 +-0.341150 0.620235 -0.706346 -0.341533 0.620563 -0.705832 +-0.285358 0.662838 -0.692255 -0.285562 0.663289 -0.691702 +-0.395193 0.574454 -0.716816 -0.395703 0.574633 -0.716361 +-0.464395 0.574454 -0.674048 -0.463729 0.574633 -0.674306 +-0.253559 0.564508 -0.785518 -0.253639 0.564592 -0.785394 +-0.180241 0.554735 -0.812269 -0.180792 0.556505 -0.810907 +-0.197165 0.606821 -0.769997 -0.197729 0.608631 -0.768395 +-0.270001 0.615452 -0.740486 -0.270058 0.615284 -0.740593 +-0.325685 0.571136 -0.753481 -0.325510 0.571184 -0.753471 +-0.213144 0.656001 -0.724039 -0.213721 0.657857 -0.722160 +-0.528274 0.571137 -0.628275 -0.528336 0.571184 -0.628132 +-0.541553 0.615452 -0.572659 -0.541612 0.615284 -0.572741 +-0.589185 0.564510 -0.578092 -0.589038 0.564592 -0.578112 +-0.600523 0.606822 -0.520710 -0.598804 0.608631 -0.520524 +-0.645902 0.554737 -0.524478 -0.644429 0.556505 -0.524369 +-0.552270 0.656003 -0.514450 -0.550310 0.657857 -0.514145 +-0.175583 0.324860 -0.929320 -0.175726 0.324961 -0.929228 +-0.155334 0.262658 -0.952304 -0.155156 0.261940 -0.952513 +-0.225429 0.264080 -0.937786 -0.225471 0.263375 -0.937956 +-0.104792 0.322521 -0.940744 -0.103977 0.320078 -0.941649 +-0.124640 0.383610 -0.915045 -0.123905 0.381420 -0.916044 +-0.084442 0.259889 -0.961939 -0.083468 0.256874 -0.962798 +-0.195527 0.385902 -0.901581 -0.195532 0.385723 -0.901639 +-0.246012 0.325926 -0.912826 -0.245827 0.325968 -0.912839 +-0.294369 0.264149 -0.918462 -0.294595 0.263466 -0.918546 +-0.143892 0.442862 -0.884968 -0.143254 0.440901 -0.886013 +-0.274027 0.199092 -0.940889 -0.273843 0.198950 -0.940947 +-0.342186 0.198335 -0.918462 -0.341594 0.198767 -0.918546 +-0.320818 0.132791 -0.937786 -0.320170 0.133030 -0.937956 +-0.251669 0.132568 -0.958691 -0.251656 0.132756 -0.958647 +-0.203850 0.198385 -0.958691 -0.204016 0.198309 -0.958647 +-0.181207 0.131654 -0.974593 -0.181860 0.132145 -0.974395 +-0.133257 0.196410 -0.971424 -0.133824 0.197028 -0.971191 +-0.227977 0.066042 -0.971424 -0.228736 0.066378 -0.971191 +-0.297805 0.066566 -0.952303 -0.297067 0.066622 -0.952513 +-0.090588 0.065816 -0.993711 -0.090762 0.065920 -0.993683 +-0.021365 0.065757 -0.997607 -0.020020 0.061617 -0.997894 +-0.042628 0.131199 -0.990439 -0.041353 0.127293 -0.990997 +-0.112191 0.131747 -0.984914 -0.112186 0.131565 -0.984924 +-0.159969 0.065988 -0.984914 -0.159795 0.066042 -0.984924 +-0.063687 0.196013 -0.978531 -0.062471 0.192328 -0.979308 +-0.363221 0.066604 -0.929319 -0.363384 0.066713 -0.929228 +-0.385997 0.133255 -0.912825 -0.385998 0.133061 -0.912839 +-0.427439 0.066709 -0.901579 -0.427259 0.066775 -0.901639 +0.091681 0.772570 -0.628275 0.091708 0.772668 -0.628132 +0.038052 0.737707 -0.674048 0.037416 0.737480 -0.674306 +0.023119 0.783447 -0.621029 0.022401 0.783349 -0.621143 +0.106622 0.725293 -0.680133 0.109378 0.723869 -0.681173 +0.159797 0.757930 -0.632461 0.162694 0.756554 -0.633320 +0.052790 0.688185 -0.723612 0.055116 0.686453 -0.725059 +0.144854 0.803011 -0.578093 0.144658 0.803003 -0.578112 +0.076377 0.816228 -0.572660 0.076510 0.816126 -0.572741 +0.129157 0.843907 -0.520711 0.126713 0.844386 -0.520524 +0.061212 0.855333 -0.514451 0.058535 0.855678 -0.514145 +0.008067 0.825171 -0.564826 0.007294 0.825190 -0.564776 +-0.007026 0.862665 -0.505728 -0.010224 0.862880 -0.505234 +0.196483 0.828442 -0.524480 0.194250 0.829005 -0.524369 +0.211986 0.785893 -0.580890 0.215003 0.784539 -0.581561 +0.262869 0.809012 -0.525738 0.262856 0.808985 -0.525712 +-0.048122 0.790108 -0.611076 -0.048128 0.789972 -0.611194 +-0.063274 0.830355 -0.553631 -0.062502 0.830103 -0.554033 +-0.119111 0.792645 -0.597935 -0.118473 0.792322 -0.598437 +-0.104109 0.749431 -0.653847 -0.103916 0.749443 -0.653829 +-0.032830 0.745333 -0.665883 -0.032991 0.745415 -0.665761 +-0.088563 0.702305 -0.706346 -0.088443 0.702811 -0.705832 +-0.017932 0.697032 -0.716816 -0.017609 0.697501 -0.716361 +-0.158740 0.703978 -0.692255 -0.158818 0.704489 -0.691702 +-0.174174 0.749781 -0.638351 -0.173650 0.749352 -0.638936 +-0.126670 0.605737 -0.785518 -0.126621 0.605853 -0.785394 +-0.109323 0.552449 -0.826347 -0.107730 0.550035 -0.828150 +-0.055516 0.601496 -0.796945 -0.053774 0.599261 -0.798730 +-0.072216 0.653492 -0.753481 -0.072359 0.653432 -0.753471 +-0.143312 0.656615 -0.740485 -0.143132 0.656514 -0.740593 +-0.001367 0.646835 -0.762629 0.000488 0.644765 -0.764367 +-0.187352 0.790166 -0.583555 -0.187323 0.790246 -0.583392 +-0.131412 0.830809 -0.540821 -0.131565 0.830744 -0.540819 +-0.199534 0.827107 -0.525433 -0.199377 0.827021 -0.525559 +-0.143074 0.864927 -0.481074 -0.147069 0.864711 -0.480178 +-0.210234 0.859846 -0.465260 -0.214454 0.859371 -0.464156 +-0.075230 0.865868 -0.494584 -0.079073 0.865902 -0.493851 +0.020697 0.584710 -0.810978 0.020600 0.584521 -0.811090 +0.075035 0.628307 -0.774338 0.075900 0.628651 -0.773949 +0.096780 0.564248 -0.819913 0.097720 0.564409 -0.819666 +-0.034013 0.536778 -0.843037 -0.033753 0.536821 -0.842982 +0.042383 0.517965 -0.854351 0.042207 0.518082 -0.854244 +-0.012280 0.468424 -0.883418 -0.012207 0.471358 -0.881832 +0.063153 0.448254 -0.891673 0.063387 0.451155 -0.890164 +0.117881 0.496435 -0.860033 0.118900 0.496353 -0.859920 +0.138197 0.425320 -0.894430 0.139073 0.428083 -0.892941 +-0.087638 0.485707 -0.869717 -0.087802 0.488632 -0.868038 +0.175669 0.540644 -0.822706 0.175726 0.540849 -0.822535 +0.196435 0.470911 -0.860033 0.195563 0.471450 -0.859920 +0.253366 0.513369 -0.819913 0.252663 0.514054 -0.819666 +0.232516 0.581946 -0.779279 0.232246 0.581896 -0.779351 +0.153956 0.607472 -0.779279 0.154118 0.607288 -0.779351 +0.210088 0.646572 -0.733354 0.209845 0.645863 -0.734031 +0.131878 0.669606 -0.730914 0.131382 0.668966 -0.731559 +0.286900 0.619235 -0.730914 0.286905 0.618427 -0.731559 +0.308612 0.552412 -0.774338 0.308084 0.553209 -0.773949 +0.361804 0.587779 -0.723612 0.358867 0.587756 -0.725059 +0.238822 0.735005 -0.634611 0.238746 0.734825 -0.634785 +0.290444 0.760400 -0.580890 0.287179 0.761101 -0.581561 +0.316229 0.707101 -0.632461 0.313059 0.707694 -0.633320 +0.185526 0.704465 -0.685061 0.185736 0.704489 -0.684957 +0.263989 0.678971 -0.685061 0.263802 0.679098 -0.684957 +0.340065 0.649442 -0.680133 0.336985 0.649922 -0.681173 +0.326945 0.485202 -0.810978 0.326884 0.485000 -0.811090 +0.381312 0.522492 -0.762629 0.378582 0.521897 -0.764367 +0.398469 0.453985 -0.796944 0.395734 0.453200 -0.798730 +0.270168 0.443951 -0.854351 0.270394 0.443953 -0.854244 +0.343033 0.414267 -0.843037 0.342845 0.414441 -0.842982 +0.285272 0.371742 -0.883418 0.286966 0.374126 -0.881832 +0.356396 0.341429 -0.869717 0.358257 0.343699 -0.868038 +0.413169 0.382678 -0.826347 0.410474 0.381634 -0.828150 +0.212389 0.399763 -0.891673 0.213874 0.402264 -0.890164 +0.616025 0.529129 -0.583555 0.616047 0.529221 -0.583392 +0.581625 0.504203 -0.638350 0.580981 0.504166 -0.638936 +0.562274 0.571246 -0.597935 0.561571 0.571337 -0.598437 +0.647594 0.551853 -0.525433 0.647420 0.551897 -0.525559 +0.594659 0.594890 -0.540821 0.594745 0.594745 -0.540819 +0.624147 0.615637 -0.481073 0.627277 0.613117 -0.480178 +0.569814 0.656277 -0.494584 0.572954 0.654042 -0.493851 +0.539267 0.634574 -0.553631 0.538530 0.634816 -0.554033 +0.512753 0.693775 -0.505727 0.515488 0.692068 -0.505234 +0.675494 0.572050 -0.465260 0.678640 0.569170 -0.464156 +0.503352 0.610920 -0.611076 0.503281 0.610797 -0.611194 +0.478504 0.672314 -0.564826 0.479110 0.671865 -0.564776 +0.441802 0.647406 -0.621028 0.442305 0.646931 -0.621143 +0.464663 0.583685 -0.665883 0.464827 0.583667 -0.665761 +0.524736 0.545103 -0.653846 0.524583 0.545244 -0.653829 +0.484459 0.516115 -0.706346 0.484664 0.516587 -0.705832 +0.542217 0.476219 -0.692255 0.542589 0.476577 -0.691702 +0.424219 0.553366 -0.716816 0.424238 0.553911 -0.716361 +0.402835 0.619180 -0.674048 0.403211 0.618610 -0.674306 +0.458526 0.415591 -0.785517 0.458571 0.415723 -0.785394 +0.501895 0.446971 -0.740485 0.501694 0.446974 -0.740593 +0.442542 0.486234 -0.753480 0.442640 0.486099 -0.753471 +0.379941 0.678907 -0.628275 0.379955 0.679006 -0.628132 +0.417985 0.705231 -0.572659 0.417798 0.705222 -0.572741 +0.354817 0.734789 -0.578092 0.354930 0.734672 -0.578112 +0.391555 0.758647 -0.520711 0.393811 0.757591 -0.520524 +0.327997 0.785710 -0.524480 0.330119 0.784845 -0.524369 +0.453238 0.727953 -0.514450 0.455611 0.726676 -0.514145 +0.254703 0.267377 -0.929320 0.254738 0.267556 -0.929228 +0.201802 0.228896 -0.952304 0.201147 0.228523 -0.952513 +0.181495 0.296000 -0.937787 0.180822 0.295816 -0.937956 +0.306594 0.305207 -0.901581 0.306406 0.305155 -0.901639 +0.233953 0.334686 -0.912826 0.234046 0.334544 -0.912839 +0.160257 0.361587 -0.918462 0.159520 0.361583 -0.918577 +0.104670 0.322137 -0.940889 0.104587 0.321909 -0.940947 +0.082889 0.386725 -0.918462 0.083468 0.386303 -0.918577 +0.027156 0.346149 -0.937787 0.027589 0.345592 -0.937956 +0.048312 0.280316 -0.958691 0.048463 0.280343 -0.958647 +0.125683 0.255176 -0.958691 0.125553 0.255318 -0.958647 +0.069216 0.213020 -0.974593 0.069460 0.213813 -0.974395 +0.145619 0.187429 -0.971424 0.146031 0.188147 -0.971191 +-0.007638 0.237226 -0.971425 -0.007538 0.238075 -0.971191 +-0.028717 0.303798 -0.952304 -0.028413 0.303110 -0.952513 +0.034602 0.106493 -0.993711 0.034669 0.106693 -0.993683 +0.090631 0.147411 -0.984914 0.090457 0.147343 -0.984924 +0.013326 0.172530 -0.984914 0.013428 0.172369 -0.984924 +-0.048895 0.366023 -0.929320 -0.048830 0.366192 -0.929228 +0.007456 0.408281 -0.912826 0.007263 0.408216 -0.912839 +-0.068639 0.427130 -0.901581 -0.068514 0.426984 -0.901639 +0.941898 -0.270623 -0.198974 0.941862 -0.270760 -0.198859 +0.918241 -0.301255 -0.257058 0.918027 -0.301309 -0.257729 +0.935124 -0.232452 -0.267412 0.934935 -0.232276 -0.268075 +0.957040 -0.201186 -0.208802 0.957976 -0.198767 -0.206763 +0.960967 -0.238674 -0.139921 0.961852 -0.236335 -0.137700 +0.947213 -0.162458 -0.276396 0.948088 -0.159673 -0.274911 +0.942717 -0.307655 -0.128971 0.942656 -0.307657 -0.129124 +0.921778 -0.339204 -0.187791 0.921842 -0.339030 -0.187689 +0.919554 -0.375034 -0.117350 0.918821 -0.376141 -0.119449 +0.897156 -0.405429 -0.175323 0.896176 -0.406568 -0.177557 +0.870465 -0.433883 -0.232456 0.869076 -0.435163 -0.235115 +0.896651 -0.368513 -0.245386 0.896359 -0.368755 -0.246040 +0.937549 -0.342844 -0.058816 0.937010 -0.343913 -0.060762 +0.958969 -0.274690 -0.070177 0.959777 -0.272439 -0.067751 +0.951058 -0.309013 0.000000 0.951048 -0.309000 0.000000 +0.889179 -0.330602 -0.316328 0.889187 -0.330424 -0.316416 +0.865786 -0.397345 -0.304191 0.866207 -0.396741 -0.303690 +0.855476 -0.358224 -0.373947 0.855892 -0.357524 -0.373608 +0.875961 -0.289925 -0.385533 0.876034 -0.289895 -0.385357 +0.908052 -0.261547 -0.327161 0.907956 -0.261727 -0.327250 +0.891875 -0.220114 -0.395107 0.891842 -0.220740 -0.394787 +0.921907 -0.191777 -0.336614 0.921964 -0.192297 -0.336131 +0.857271 -0.247322 -0.451574 0.857143 -0.248054 -0.451399 +0.839604 -0.316773 -0.441271 0.839961 -0.315989 -0.441084 +0.878615 -0.110383 -0.464598 0.878628 -0.110538 -0.464522 +0.883114 -0.041248 -0.467341 0.883572 -0.037935 -0.466720 +0.910136 -0.082241 -0.406065 0.910733 -0.079043 -0.405316 +0.903205 -0.151547 -0.401564 0.903104 -0.151524 -0.401715 +0.869914 -0.179593 -0.459344 0.869991 -0.179388 -0.459243 +0.931546 -0.122728 -0.342286 0.932249 -0.119633 -0.341380 +0.818923 -0.381716 -0.428553 0.818873 -0.381848 -0.428449 +0.832130 -0.422358 -0.359408 0.832057 -0.422346 -0.359539 +0.794172 -0.445359 -0.413457 0.794275 -0.445174 -0.413373 +0.804731 -0.484436 -0.343118 0.802515 -0.485794 -0.346324 +0.766003 -0.506292 -0.396117 0.763421 -0.507584 -0.399396 +0.839607 -0.460261 -0.288478 0.837703 -0.461684 -0.291604 +0.938000 -0.041250 -0.344173 0.937956 -0.041017 -0.344279 +0.959966 0.000000 -0.280117 0.960234 0.000000 -0.279153 +0.956772 -0.081500 -0.279185 0.957030 -0.081759 -0.278207 +0.913230 0.000000 -0.407446 0.913327 0.000000 -0.407208 +0.938000 0.041250 -0.344173 0.937956 0.041017 -0.344279 +0.910136 0.082241 -0.406065 0.910733 0.079043 -0.405316 +0.931546 0.122728 -0.342286 0.932249 0.119633 -0.341380 +0.947213 0.162458 -0.276396 0.948088 0.159673 -0.274911 +0.956772 0.081500 -0.279185 0.957030 0.081759 -0.278207 +0.883114 0.041248 -0.467341 0.883572 0.037935 -0.466720 +0.976656 0.041301 -0.210803 0.976684 0.041047 -0.210669 +0.970192 0.122799 -0.208922 0.970122 0.122044 -0.209632 +0.986715 0.082322 -0.140059 0.986694 0.081454 -0.140538 +0.990076 0.000000 -0.140536 0.990020 0.000000 -0.140782 +0.976656 -0.041301 -0.210803 0.976684 -0.041047 -0.210669 +0.986715 -0.082322 -0.140059 0.986694 -0.081454 -0.140538 +0.970192 -0.122799 -0.208922 0.970122 -0.122044 -0.209632 +0.996673 -0.041299 -0.070263 0.996673 -0.040284 -0.070528 +0.996673 0.041299 -0.070263 0.996673 0.040284 -0.070528 +1.000000 0.000000 0.000000 0.999969 0.000000 -0.003235 +0.977640 -0.198224 -0.070198 0.977660 -0.198004 -0.070315 +0.987689 -0.156432 0.000000 0.987518 -0.157292 -0.003204 +0.972371 -0.233442 0.000000 0.972106 -0.234504 -0.003204 +0.976912 -0.161004 -0.140431 0.976928 -0.160985 -0.140172 +0.990315 -0.119754 -0.070250 0.990265 -0.119938 -0.070345 +0.996917 -0.078458 0.000000 0.996857 -0.079104 -0.003204 +0.990315 0.119754 -0.070250 0.990265 0.119938 -0.070345 +0.987689 0.156432 0.000000 0.987518 0.157292 -0.003204 +0.996917 0.078458 0.000000 0.996857 0.079104 -0.003204 +0.976912 0.161004 -0.140431 0.976928 0.160985 -0.140172 +0.977640 0.198224 -0.070198 0.977660 0.198004 -0.070315 +0.960967 0.238674 -0.139921 0.961852 0.236335 -0.137700 +0.958969 0.274690 -0.070177 0.959777 0.272439 -0.067751 +0.951058 0.309013 0.000000 0.951048 0.309000 0.000000 +0.972371 0.233442 0.000000 0.972106 0.234504 -0.003204 +0.957040 0.201186 -0.208802 0.957976 0.198767 -0.206763 +0.956157 0.040642 0.290021 0.956114 0.040498 0.290109 +0.971871 0.000000 0.235513 0.972045 0.000000 0.234657 +0.968711 0.080572 0.234747 0.968871 0.080752 0.233894 +0.949793 0.121142 0.288476 0.949095 0.118870 0.291604 +0.935787 0.081085 0.343116 0.934782 0.078677 0.346294 +0.959253 0.160620 0.232455 0.958892 0.158757 0.235115 +0.938878 0.000000 0.344249 0.938932 0.000000 0.344035 +0.956157 -0.040642 0.290021 0.956114 -0.040498 0.290109 +0.935787 -0.081085 0.343116 0.934782 -0.078677 0.346294 +0.949793 -0.121142 0.288476 0.949095 -0.118870 0.291604 +0.959253 -0.160620 0.232455 0.958892 -0.158757 0.235115 +0.968711 -0.080572 0.234747 0.968871 -0.080752 0.233894 +0.917302 -0.040640 0.396114 0.915983 -0.038087 0.399365 +0.917302 0.040640 0.396114 0.915983 0.038087 0.399365 +0.894425 0.000000 0.447215 0.894406 0.000000 0.447188 +0.983382 -0.040677 0.176933 0.983398 -0.040498 0.176824 +0.977011 -0.121191 0.175392 0.976959 -0.120701 0.175970 +0.989761 -0.081141 0.117430 0.989746 -0.080538 0.117832 +0.993035 0.000000 0.117819 0.992981 0.000000 0.118015 +0.983382 0.040677 0.176933 0.983398 0.040498 0.176824 +0.989761 0.081141 0.117430 0.989746 0.080538 0.117832 +0.977011 0.121191 0.175392 0.976959 0.120701 0.175970 +0.997437 0.040675 0.058866 0.997436 0.039979 0.059084 +0.997437 -0.040675 0.058866 0.997436 -0.039979 0.059084 +0.978582 0.197272 0.058828 0.978576 0.197119 0.058931 +0.960014 0.273703 0.058816 0.960204 0.272500 0.060762 +0.964376 0.237083 0.117350 0.964446 0.235725 0.119449 +0.980131 0.159611 0.117758 0.980132 0.159612 0.117527 +0.991139 0.119077 0.058858 0.991089 0.119205 0.058931 +0.964122 0.199328 0.175322 0.963988 0.197821 0.177557 +0.991139 -0.119077 0.058858 0.991089 -0.119205 0.058931 +0.980131 -0.159611 0.117758 0.980132 -0.159612 0.117527 +0.978582 -0.197272 0.058828 0.978576 -0.197119 0.058931 +0.964376 -0.237083 0.117350 0.964446 -0.235725 0.119449 +0.960014 -0.273703 0.058816 0.960204 -0.272500 0.060762 +0.964122 -0.199328 0.175322 0.963988 -0.197821 0.177557 +0.921778 0.339204 -0.187791 0.921842 0.339030 -0.187689 +0.918241 0.301255 -0.257058 0.918027 0.301309 -0.257729 +0.896651 0.368513 -0.245386 0.896359 0.368755 -0.246040 +0.897156 0.405429 -0.175323 0.896176 0.406568 -0.177557 +0.919554 0.375034 -0.117350 0.918821 0.376141 -0.119449 +0.870465 0.433883 -0.232456 0.869076 0.435163 -0.235115 +0.942717 0.307655 -0.128971 0.942656 0.307657 -0.129124 +0.941898 0.270623 -0.198974 0.941862 0.270760 -0.198859 +0.935124 0.232452 -0.267412 0.934935 0.232276 -0.268075 +0.937549 0.342844 -0.058816 0.937010 0.343913 -0.060762 +0.908052 0.261547 -0.327161 0.907956 0.261727 -0.327250 +0.921907 0.191777 -0.336614 0.921964 0.192297 -0.336131 +0.891875 0.220114 -0.395107 0.891842 0.220740 -0.394787 +0.875961 0.289925 -0.385533 0.876034 0.289895 -0.385357 +0.889179 0.330602 -0.316328 0.889187 0.330424 -0.316416 +0.855476 0.358224 -0.373947 0.855892 0.357524 -0.373608 +0.865786 0.397345 -0.304191 0.866207 0.396741 -0.303690 +0.839604 0.316773 -0.441271 0.839961 0.315989 -0.441084 +0.857271 0.247322 -0.451574 0.857143 0.248054 -0.451399 +0.794172 0.445359 -0.413457 0.794275 0.445174 -0.413373 +0.766003 0.506292 -0.396117 0.763421 0.507584 -0.399396 +0.804731 0.484436 -0.343118 0.802515 0.485794 -0.346324 +0.832130 0.422358 -0.359408 0.832057 0.422346 -0.359539 +0.818923 0.381716 -0.428553 0.818873 0.381848 -0.428449 +0.839607 0.460261 -0.288478 0.837703 0.461684 -0.291604 +0.869914 0.179593 -0.459344 0.869991 0.179388 -0.459243 +0.903205 0.151547 -0.401564 0.903104 0.151524 -0.401715 +0.878615 0.110383 -0.464598 0.878628 0.110538 -0.464522 +0.033683 -0.979426 -0.198975 0.033509 -0.979430 -0.198859 +-0.002760 -0.966392 -0.257059 -0.002869 -0.966186 -0.257729 +0.067893 -0.961187 -0.267413 0.067965 -0.960967 -0.268075 +0.104401 -0.972369 -0.208803 0.106967 -0.972503 -0.206763 +0.069961 -0.987688 -0.139921 0.072451 -0.987793 -0.137700 +0.138199 -0.951055 -0.276397 0.141087 -0.951048 -0.274911 +-0.001285 -0.991647 -0.128972 -0.001312 -0.991607 -0.129124 +-0.037760 -0.981483 -0.187791 -0.037568 -0.981506 -0.187689 +-0.072524 -0.990439 -0.117350 -0.073794 -0.990081 -0.119449 +-0.108352 -0.978530 -0.175323 -0.109745 -0.977966 -0.177557 +-0.143661 -0.961938 -0.232456 -0.145299 -0.961028 -0.235115 +-0.073399 -0.966643 -0.245387 -0.073702 -0.966430 -0.246040 +-0.036349 -0.997607 -0.058816 -0.037538 -0.997436 -0.060762 +0.035088 -0.996917 -0.070177 0.037446 -0.996979 -0.067751 +0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 +-0.039651 -0.947821 -0.316329 -0.039460 -0.947783 -0.316416 +-0.110357 -0.946197 -0.304191 -0.109653 -0.946410 -0.303690 +-0.076335 -0.924303 -0.373948 -0.075533 -0.924467 -0.373608 +-0.005048 -0.922680 -0.385534 -0.005005 -0.922727 -0.385357 +0.031858 -0.944431 -0.327162 0.031648 -0.944395 -0.327250 +0.066265 -0.916242 -0.395108 0.065645 -0.916410 -0.394787 +0.102494 -0.936048 -0.336615 0.101993 -0.936247 -0.336131 +0.029696 -0.891739 -0.451575 0.028932 -0.891842 -0.451399 +-0.041816 -0.896398 -0.441272 -0.040956 -0.896512 -0.441084 +0.166529 -0.869721 -0.464600 0.166356 -0.869778 -0.464522 +0.233672 -0.852636 -0.467343 0.236946 -0.852046 -0.466720 +0.203033 -0.891003 -0.406067 0.206244 -0.890591 -0.405316 +0.134978 -0.905829 -0.401566 0.134922 -0.905759 -0.401715 +0.098017 -0.882833 -0.459345 0.098209 -0.882839 -0.459243 +0.171144 -0.923877 -0.342287 0.174291 -0.923612 -0.341380 +-0.109972 -0.896798 -0.428554 -0.110111 -0.896817 -0.428449 +-0.144545 -0.921918 -0.359408 -0.144566 -0.921842 -0.359539 +-0.178150 -0.892925 -0.413457 -0.177953 -0.892972 -0.413373 +-0.212052 -0.915043 -0.343118 -0.214026 -0.913358 -0.346324 +-0.244806 -0.884964 -0.396117 -0.246834 -0.882900 -0.399396 +-0.178283 -0.940742 -0.288478 -0.180212 -0.939390 -0.291604 +0.250629 -0.904837 -0.344175 0.250801 -0.904721 -0.344279 +0.296648 -0.912981 -0.280118 0.296731 -0.913236 -0.279153 +0.218149 -0.935129 -0.279186 0.217963 -0.935453 -0.278207 +0.282207 -0.868531 -0.407447 0.282235 -0.868618 -0.407208 +0.329093 -0.879342 -0.344174 0.328867 -0.879360 -0.344279 +0.359468 -0.840174 -0.406067 0.356609 -0.841731 -0.405316 +0.404589 -0.848026 -0.342287 0.401868 -0.849666 -0.341380 +0.447216 -0.850648 -0.276397 0.444838 -0.852351 -0.274911 +0.373173 -0.884758 -0.279186 0.373486 -0.884915 -0.278207 +0.312131 -0.827143 -0.467343 0.309122 -0.828608 -0.466720 +0.341086 -0.916091 -0.210804 0.340861 -0.916196 -0.210669 +0.416598 -0.884759 -0.208923 0.415876 -0.884915 -0.209632 +0.383207 -0.912982 -0.140059 0.382366 -0.913236 -0.140538 +0.305952 -0.941617 -0.140536 0.305918 -0.941557 -0.140782 +0.262524 -0.941617 -0.210804 0.262734 -0.941557 -0.210669 +0.226619 -0.963861 -0.140059 0.227424 -0.963591 -0.140538 +0.183017 -0.960654 -0.208923 0.183691 -0.960356 -0.209632 +0.268712 -0.960654 -0.070263 0.269662 -0.960356 -0.070528 +0.347268 -0.935130 -0.070263 0.346324 -0.935453 -0.070528 +0.309017 -0.951056 0.000000 0.309000 -0.951048 -0.003235 +0.113582 -0.991046 -0.070198 0.113773 -0.990997 -0.070315 +0.156435 -0.987688 0.000000 0.155553 -0.987793 -0.003204 +0.078459 -0.996917 0.000000 0.077334 -0.996979 -0.003204 +0.148757 -0.978851 -0.140432 0.148747 -0.978881 -0.140172 +0.192131 -0.978852 -0.070250 0.191900 -0.978881 -0.070345 +0.233446 -0.972370 0.000000 0.232795 -0.972503 -0.003204 +0.419919 -0.904839 -0.070250 0.420087 -0.904721 -0.070345 +0.453991 -0.891006 0.000000 0.454756 -0.890591 -0.003204 +0.382684 -0.923879 0.000000 0.383282 -0.923612 -0.003204 +0.455010 -0.879343 -0.140432 0.455000 -0.879360 -0.140172 +0.490633 -0.868534 -0.070198 0.490432 -0.868618 -0.070315 +0.523951 -0.840177 -0.139921 0.521989 -0.841731 -0.137700 +0.557587 -0.827147 -0.070177 0.555681 -0.828608 -0.067751 +0.587786 -0.809017 0.000000 0.587756 -0.809015 0.000000 +0.522499 -0.852640 0.000000 0.523423 -0.852046 -0.003204 +0.487085 -0.848027 -0.208803 0.485061 -0.849666 -0.206763 +0.334119 -0.896800 0.290023 0.333964 -0.896817 0.290109 +0.300323 -0.924305 0.235515 0.300363 -0.924497 0.234657 +0.375976 -0.896401 0.234749 0.376202 -0.896512 0.233894 +0.408715 -0.865871 0.288478 0.406323 -0.865902 0.291604 +0.366289 -0.864929 0.343118 0.363689 -0.864711 0.346324 +0.449185 -0.862668 0.232457 0.447310 -0.862911 0.235115 +0.290126 -0.892926 0.344252 0.290139 -0.892972 0.344035 +0.256812 -0.921919 0.290023 0.256935 -0.921842 0.290109 +0.212052 -0.915043 0.343118 0.214026 -0.913358 0.346324 +0.178283 -0.940742 0.288478 0.180212 -0.939390 0.291604 +0.143661 -0.961938 0.232456 0.145299 -0.961028 0.235115 +0.222716 -0.946198 0.234749 0.222571 -0.946410 0.233894 +0.244806 -0.884964 0.396117 0.246834 -0.882900 0.399396 +0.322110 -0.859847 0.396117 0.319224 -0.859371 0.399396 +0.276385 -0.850640 0.447215 0.276376 -0.850642 0.447218 +0.265194 -0.947822 0.176934 0.265328 -0.947783 0.176824 +0.186649 -0.966643 0.175393 0.187078 -0.966430 0.175970 +0.228681 -0.966393 0.117431 0.229225 -0.966186 0.117832 +0.306864 -0.944433 0.117819 0.306833 -0.944395 0.118015 +0.342567 -0.922682 0.176934 0.342418 -0.922727 0.176824 +0.383023 -0.916244 0.117431 0.382458 -0.916410 0.117832 +0.417173 -0.891742 0.175393 0.416669 -0.891842 0.175970 +0.346909 -0.936050 0.058866 0.346233 -0.936247 0.059084 +0.269540 -0.961188 0.058866 0.270180 -0.960967 0.059084 +0.490018 -0.869725 0.058828 0.489883 -0.869778 0.058931 +0.556971 -0.828447 0.058816 0.555895 -0.829005 0.060762 +0.523490 -0.843911 0.117350 0.522233 -0.844386 0.119449 +0.454678 -0.882837 0.117759 0.454665 -0.882839 0.117527 +0.419529 -0.905832 0.058859 0.419660 -0.905759 0.058931 +0.487504 -0.855337 0.175323 0.486038 -0.855678 0.177557 +0.193028 -0.979426 0.058859 0.192877 -0.979430 0.058931 +0.151075 -0.981483 0.117758 0.151067 -0.981506 0.117527 +0.114778 -0.991648 0.058828 0.114902 -0.991607 0.058931 +0.072524 -0.990439 0.117350 0.073794 -0.990081 0.119449 +0.036349 -0.997607 0.058816 0.037538 -0.997436 0.060762 +0.108352 -0.978530 0.175323 0.109745 -0.977966 0.177557 +0.607453 -0.771839 -0.187791 0.607288 -0.771966 -0.187689 +0.570268 -0.780202 -0.257059 0.570238 -0.779962 -0.257729 +0.627563 -0.738884 -0.245387 0.627705 -0.738517 -0.246040 +0.662827 -0.727957 -0.175323 0.663594 -0.726676 -0.177557 +0.640841 -0.758651 -0.117350 0.641682 -0.757591 -0.119449 +0.681641 -0.693779 -0.232457 0.682424 -0.692068 -0.235115 +0.583918 -0.801503 -0.128972 0.583911 -0.801447 -0.129124 +0.548445 -0.812168 -0.198975 0.548570 -0.812098 -0.198859 +0.510049 -0.817521 -0.267413 0.509842 -0.817408 -0.268075 +0.615787 -0.785715 -0.058816 0.616657 -0.784845 -0.060762 +0.529354 -0.782783 -0.327162 0.529496 -0.782617 -0.327250 +0.467281 -0.817520 -0.336615 0.467788 -0.817408 -0.336131 +0.484950 -0.780201 -0.395108 0.485549 -0.779962 -0.394787 +0.546428 -0.743492 -0.385534 0.546434 -0.743553 -0.385357 +0.589198 -0.743493 -0.316329 0.589038 -0.743553 -0.316416 +0.605053 -0.702904 -0.373947 0.604511 -0.703513 -0.373608 +0.645446 -0.700619 -0.304191 0.645009 -0.701193 -0.303690 +0.560726 -0.700617 -0.441272 0.560076 -0.701193 -0.441084 +0.500133 -0.738882 -0.451575 0.500778 -0.738517 -0.451399 +0.668980 -0.617672 -0.413457 0.668844 -0.617817 -0.413373 +0.718226 -0.572051 -0.396117 0.718650 -0.569170 -0.399396 +0.709407 -0.615639 -0.343118 0.710013 -0.613117 -0.346324 +0.658834 -0.660881 -0.359408 0.658803 -0.660787 -0.359539 +0.616100 -0.660880 -0.428554 0.616230 -0.660787 -0.428449 +0.697193 -0.656280 -0.288478 0.697958 -0.654042 -0.291604 +0.439626 -0.771836 -0.459345 0.439467 -0.771966 -0.459243 +0.423240 -0.812166 -0.401565 0.423200 -0.812067 -0.401715 +0.376492 -0.801499 -0.464600 0.376629 -0.801447 -0.464522 +-0.921083 -0.334688 -0.198974 -0.921140 -0.334544 -0.198859 +-0.919948 -0.296002 -0.257058 -0.919797 -0.295816 -0.257729 +-0.893165 -0.361589 -0.267412 -0.892941 -0.361583 -0.268075 +-0.892518 -0.399765 -0.208802 -0.891842 -0.402264 -0.206763 +-0.917730 -0.371744 -0.139921 -0.917081 -0.374126 -0.137700 +-0.861804 -0.425322 -0.276396 -0.860897 -0.428083 -0.274911 +-0.943511 -0.305209 -0.128971 -0.943480 -0.305155 -0.129124 +-0.945116 -0.267378 -0.187791 -0.945067 -0.267556 -0.187689 +-0.964376 -0.237083 -0.117350 -0.964446 -0.235725 -0.119449 +-0.964122 -0.199328 -0.175322 -0.963988 -0.197821 -0.177557 +-0.959253 -0.160620 -0.232455 -0.958892 -0.158757 -0.235115 +-0.942015 -0.228897 -0.245385 -0.941923 -0.228523 -0.246040 +-0.960014 -0.273703 -0.058816 -0.960204 -0.272500 -0.060762 +-0.937283 -0.341431 -0.070177 -0.936613 -0.343699 -0.067751 +-0.951058 -0.309013 0.000000 -0.951048 -0.309000 0.000000 +-0.913686 -0.255177 -0.316327 -0.913602 -0.255318 -0.316416 +-0.933991 -0.187430 -0.304189 -0.933988 -0.188147 -0.303690 +-0.902655 -0.213021 -0.373945 -0.902585 -0.213813 -0.373608 +-0.879083 -0.280317 -0.385532 -0.879116 -0.280343 -0.385357 +-0.888365 -0.322138 -0.327161 -0.888394 -0.321909 -0.327250 +-0.850924 -0.346151 -0.395106 -0.851283 -0.345592 -0.394787 +-0.858564 -0.386727 -0.336614 -0.858913 -0.386303 -0.336131 +-0.838921 -0.303799 -0.451573 -0.839229 -0.303110 -0.451399 +-0.865450 -0.237227 -0.441270 -0.865291 -0.238075 -0.441084 +-0.775698 -0.427132 -0.464598 -0.775780 -0.426984 -0.464522 +-0.738701 -0.485709 -0.467342 -0.737114 -0.488632 -0.466720 +-0.784657 -0.468427 -0.406066 -0.783258 -0.471358 -0.405316 +-0.819787 -0.408283 -0.401564 -0.819727 -0.408216 -0.401715 +-0.809339 -0.366025 -0.459343 -0.809290 -0.366192 -0.459243 +-0.825776 -0.448256 -0.342286 -0.824549 -0.451155 -0.341380 +-0.886892 -0.172530 -0.428551 -0.886929 -0.172369 -0.428449 +-0.921465 -0.147412 -0.359406 -0.921384 -0.147343 -0.359539 +-0.904276 -0.106493 -0.413454 -0.904263 -0.106693 -0.413373 +-0.935787 -0.081085 -0.343116 -0.934782 -0.078677 -0.346294 +-0.917302 -0.040640 -0.396114 -0.915983 -0.038087 -0.399365 +-0.949793 -0.121142 -0.288476 -0.949095 -0.118870 -0.291604 +-0.783105 -0.517968 -0.344174 -0.782952 -0.518113 -0.344279 +-0.776630 -0.564252 -0.280118 -0.776849 -0.564409 -0.279153 +-0.821951 -0.496439 -0.279186 -0.822291 -0.496353 -0.278207 +-0.738819 -0.536781 -0.407446 -0.738884 -0.536821 -0.407208 +-0.734612 -0.584714 -0.344174 -0.734703 -0.584521 -0.344279 +-0.687975 -0.601499 -0.406066 -0.690329 -0.599261 -0.405316 +-0.681499 -0.646838 -0.342286 -0.683889 -0.644765 -0.341380 +-0.670820 -0.688190 -0.276396 -0.673147 -0.686453 -0.274911 +-0.726141 -0.628311 -0.279186 -0.726188 -0.628651 -0.278207 +-0.690210 -0.552451 -0.467342 -0.692526 -0.550035 -0.466720 +-0.765855 -0.607476 -0.210804 -0.766015 -0.607288 -0.210669 +-0.712722 -0.669611 -0.208922 -0.713095 -0.668966 -0.209632 +-0.749882 -0.646576 -0.140059 -0.750359 -0.645863 -0.140538 +-0.800989 -0.581950 -0.140536 -0.800958 -0.581927 -0.140782 +-0.814409 -0.540648 -0.210804 -0.814295 -0.540849 -0.210669 +-0.846659 -0.513373 -0.140059 -0.846126 -0.514054 -0.140538 +-0.857083 -0.470914 -0.208923 -0.856594 -0.471450 -0.209632 +-0.830602 -0.552416 -0.070263 -0.830012 -0.553209 -0.070528 +-0.782052 -0.619240 -0.070263 -0.782647 -0.618427 -0.070528 +-0.809018 -0.587783 0.000000 -0.808985 -0.587756 -0.003235 +-0.907443 -0.414269 -0.070198 -0.907315 -0.414441 -0.070315 +-0.891008 -0.453987 0.000000 -0.891385 -0.453200 -0.003204 +-0.923881 -0.382680 0.000000 -0.924284 -0.381634 -0.003204 +-0.884977 -0.443954 -0.140431 -0.885006 -0.443953 -0.140172 +-0.871574 -0.485205 -0.070250 -0.871670 -0.485000 -0.070345 +-0.852642 -0.522496 0.000000 -0.852962 -0.521928 -0.003204 +-0.730792 -0.678976 -0.070250 -0.730613 -0.679098 -0.070345 +-0.707108 -0.707106 0.000000 -0.706473 -0.707694 -0.003204 +-0.760407 -0.649447 0.000000 -0.759972 -0.649922 -0.003204 +-0.695702 -0.704470 -0.140431 -0.695700 -0.704489 -0.140172 +-0.674412 -0.735010 -0.070198 -0.674551 -0.734855 -0.070315 +-0.637147 -0.757935 -0.139921 -0.639241 -0.756554 -0.137700 +-0.614360 -0.785899 -0.070177 -0.616321 -0.784539 -0.067751 +-0.587786 -0.809017 0.000000 -0.587756 -0.809015 0.000000 +-0.649449 -0.760405 0.000000 -0.648579 -0.761101 -0.003204 +-0.656006 -0.725298 -0.208802 -0.658162 -0.723869 -0.206763 +-0.749660 -0.594892 0.290023 -0.749718 -0.594745 0.290109 +-0.786262 -0.571248 0.235515 -0.786401 -0.571368 0.234657 +-0.736346 -0.634577 0.234749 -0.736381 -0.634816 0.233894 +-0.697193 -0.656280 0.288478 -0.697958 -0.654042 0.291604 +-0.709407 -0.615639 0.343118 -0.710013 -0.613117 0.346324 +-0.681641 -0.693779 0.232457 -0.682424 -0.692068 0.235115 +-0.759570 -0.551855 0.344252 -0.759606 -0.551897 0.344035 +-0.797438 -0.529130 0.290023 -0.797327 -0.529221 0.290109 +-0.804731 -0.484436 0.343118 -0.802515 -0.485794 0.346324 +-0.839607 -0.460261 0.288478 -0.837703 -0.461684 0.291604 +-0.870465 -0.433883 0.232456 -0.869076 -0.435163 0.235115 +-0.831066 -0.504205 0.234749 -0.831324 -0.504166 0.233894 +-0.766003 -0.506292 0.396117 -0.763421 -0.507584 0.399396 +-0.718226 -0.572051 0.396117 -0.718650 -0.569170 0.399396 +-0.723600 -0.525720 0.447215 -0.723594 -0.525712 0.447218 +-0.819484 -0.545105 0.176934 -0.819391 -0.545244 0.176824 +-0.861656 -0.476221 0.175393 -0.861324 -0.476577 0.175970 +-0.848429 -0.516118 0.117431 -0.848079 -0.516587 0.117832 +-0.803384 -0.583689 0.117819 -0.803339 -0.583667 0.118015 +-0.771665 -0.610923 0.176934 -0.771752 -0.610797 0.176824 +-0.753041 -0.647410 0.117431 -0.753380 -0.646931 0.117832 +-0.719184 -0.672318 0.175393 -0.719413 -0.671896 0.175970 +-0.783037 -0.619184 0.058866 -0.783441 -0.618610 0.059084 +-0.830854 -0.553369 0.058866 -0.830439 -0.553911 0.059084 +-0.675735 -0.734793 0.058828 -0.675832 -0.734672 0.058931 +-0.615787 -0.785715 0.058816 -0.616657 -0.784845 0.060762 +-0.640841 -0.758651 0.117350 -0.641682 -0.757591 0.119449 +-0.699126 -0.705235 0.117759 -0.699118 -0.705252 0.117527 +-0.731857 -0.678912 0.058859 -0.731742 -0.679006 0.058931 +-0.662827 -0.727957 0.175323 -0.663594 -0.726676 0.177557 +-0.871842 -0.486237 0.058859 -0.871883 -0.486099 0.058931 +-0.886763 -0.446973 0.117758 -0.886776 -0.446974 0.117527 +-0.907646 -0.415593 0.058828 -0.907559 -0.415723 0.058931 +-0.919554 -0.375034 0.117350 -0.918821 -0.376141 0.119449 +-0.937549 -0.342844 0.058816 -0.937010 -0.343913 0.060762 +-0.897156 -0.405429 0.175323 -0.896176 -0.406568 0.177557 +-0.546351 -0.816232 -0.187791 -0.546495 -0.816126 -0.187689 +-0.565796 -0.783451 -0.257059 -0.565569 -0.783349 -0.257729 +-0.508795 -0.825175 -0.245387 -0.508408 -0.825190 -0.246040 +-0.487504 -0.855337 -0.175323 -0.486038 -0.855678 -0.177557 +-0.523490 -0.843911 -0.117350 -0.522233 -0.844386 -0.119449 +-0.449185 -0.862668 -0.232457 -0.447310 -0.862911 -0.235115 +-0.581835 -0.803016 -0.128972 -0.581774 -0.803003 -0.129124 +-0.602940 -0.772575 -0.198974 -0.602832 -0.772668 -0.198859 +-0.619897 -0.737711 -0.267413 -0.619831 -0.737480 -0.268075 +-0.556971 -0.828447 -0.058816 -0.555895 -0.829005 -0.060762 +-0.580894 -0.745337 -0.327162 -0.580706 -0.745415 -0.327250 +-0.633113 -0.697035 -0.336615 -0.632832 -0.697501 -0.336131 +-0.592160 -0.702308 -0.395107 -0.591754 -0.702811 -0.394787 +-0.538250 -0.749434 -0.385533 -0.538316 -0.749474 -0.385357 +-0.525034 -0.790111 -0.316328 -0.525132 -0.789972 -0.316416 +-0.481531 -0.792648 -0.373947 -0.482253 -0.792322 -0.373608 +-0.466876 -0.830358 -0.304191 -0.467574 -0.830134 -0.303690 +-0.493055 -0.749784 -0.441272 -0.493820 -0.749352 -0.441084 +-0.548172 -0.703980 -0.451575 -0.547624 -0.704489 -0.451399 +-0.380716 -0.827108 -0.413457 -0.380902 -0.827052 -0.413373 +-0.322110 -0.859847 -0.396117 -0.319224 -0.859371 -0.399396 +-0.366289 -0.864929 -0.343118 -0.363689 -0.864711 -0.346324 +-0.424945 -0.830811 -0.359408 -0.424879 -0.830775 -0.359539 +-0.438150 -0.790168 -0.428554 -0.438032 -0.790246 -0.428449 +-0.408715 -0.865871 -0.288478 -0.406323 -0.865902 -0.291604 +-0.598211 -0.656617 -0.459345 -0.598376 -0.656514 -0.459243 +-0.641631 -0.653495 -0.401565 -0.641560 -0.653432 -0.401715 +-0.645932 -0.605739 -0.464599 -0.645833 -0.605884 -0.464522 +-0.602940 0.772575 -0.198974 -0.602832 0.772668 -0.198859 +-0.565796 0.783451 -0.257059 -0.565569 0.783349 -0.257729 +-0.619897 0.737711 -0.267413 -0.619831 0.737480 -0.268075 +-0.656006 0.725298 -0.208802 -0.658162 0.723869 -0.206763 +-0.637147 0.757935 -0.139921 -0.639241 0.756554 -0.137700 +-0.670820 0.688190 -0.276396 -0.673147 0.686453 -0.274911 +-0.581835 0.803016 -0.128972 -0.581774 0.803003 -0.129124 +-0.546351 0.816232 -0.187791 -0.546495 0.816126 -0.187689 +-0.523490 0.843911 -0.117350 -0.522233 0.844386 -0.119449 +-0.487504 0.855337 -0.175323 -0.486038 0.855678 -0.177557 +-0.449185 0.862668 -0.232457 -0.447310 0.862911 -0.235115 +-0.508795 0.825175 -0.245387 -0.508408 0.825190 -0.246040 +-0.556971 0.828447 -0.058816 -0.555895 0.829005 -0.060762 +-0.614360 0.785899 -0.070177 -0.616321 0.784539 -0.067751 +-0.587786 0.809017 0.000000 -0.587756 0.809015 0.000000 +-0.525034 0.790111 -0.316328 -0.525132 0.789972 -0.316416 +-0.466876 0.830358 -0.304191 -0.467574 0.830134 -0.303690 +-0.481531 0.792648 -0.373947 -0.482253 0.792322 -0.373608 +-0.538250 0.749434 -0.385533 -0.538316 0.749474 -0.385357 +-0.580894 0.745337 -0.327162 -0.580706 0.745415 -0.327250 +-0.592160 0.702308 -0.395107 -0.591754 0.702811 -0.394787 +-0.633113 0.697035 -0.336615 -0.632832 0.697501 -0.336131 +-0.548172 0.703980 -0.451575 -0.547624 0.704489 -0.451399 +-0.493055 0.749784 -0.441272 -0.493820 0.749352 -0.441084 +-0.645932 0.605739 -0.464599 -0.645833 0.605884 -0.464522 +-0.690210 0.552451 -0.467342 -0.692526 0.550035 -0.466720 +-0.687975 0.601499 -0.406066 -0.690329 0.599261 -0.405316 +-0.641631 0.653495 -0.401565 -0.641560 0.653432 -0.401715 +-0.598211 0.656617 -0.459345 -0.598376 0.656514 -0.459243 +-0.681499 0.646838 -0.342286 -0.683889 0.644765 -0.341380 +-0.438150 0.790168 -0.428554 -0.438032 0.790246 -0.428449 +-0.424945 0.830811 -0.359408 -0.424879 0.830775 -0.359539 +-0.380716 0.827108 -0.413457 -0.380902 0.827052 -0.413373 +-0.366289 0.864929 -0.343118 -0.363689 0.864711 -0.346324 +-0.322110 0.859847 -0.396117 -0.319224 0.859371 -0.399396 +-0.408715 0.865871 -0.288478 -0.406323 0.865902 -0.291604 +-0.734612 0.584714 -0.344174 -0.734703 0.584521 -0.344279 +-0.776630 0.564252 -0.280118 -0.776849 0.564409 -0.279153 +-0.726141 0.628311 -0.279186 -0.726188 0.628651 -0.278207 +-0.738819 0.536781 -0.407446 -0.738884 0.536821 -0.407208 +-0.783105 0.517968 -0.344174 -0.782952 0.518113 -0.344279 +-0.784657 0.468427 -0.406066 -0.783258 0.471358 -0.405316 +-0.825776 0.448256 -0.342286 -0.824549 0.451155 -0.341380 +-0.861804 0.425322 -0.276396 -0.860897 0.428083 -0.274911 +-0.821951 0.496439 -0.279186 -0.822291 0.496353 -0.278207 +-0.738701 0.485709 -0.467342 -0.737114 0.488632 -0.466720 +-0.814409 0.540648 -0.210804 -0.814295 0.540849 -0.210669 +-0.857083 0.470914 -0.208923 -0.856594 0.471450 -0.209632 +-0.846659 0.513373 -0.140059 -0.846126 0.514054 -0.140538 +-0.800989 0.581950 -0.140536 -0.800958 0.581927 -0.140782 +-0.765855 0.607476 -0.210804 -0.766015 0.607288 -0.210669 +-0.749882 0.646576 -0.140059 -0.750359 0.645863 -0.140538 +-0.712722 0.669611 -0.208922 -0.713095 0.668966 -0.209632 +-0.782052 0.619240 -0.070263 -0.782647 0.618427 -0.070528 +-0.830602 0.552416 -0.070263 -0.830012 0.553209 -0.070528 +-0.809018 0.587783 0.000000 -0.808985 0.587756 -0.003235 +-0.674412 0.735010 -0.070198 -0.674551 0.734855 -0.070315 +-0.707108 0.707106 0.000000 -0.706473 0.707694 -0.003204 +-0.649449 0.760405 0.000000 -0.648579 0.761101 -0.003204 +-0.695702 0.704470 -0.140431 -0.695700 0.704489 -0.140172 +-0.730792 0.678976 -0.070250 -0.730613 0.679098 -0.070345 +-0.760407 0.649447 0.000000 -0.759972 0.649922 -0.003204 +-0.871574 0.485205 -0.070250 -0.871670 0.485000 -0.070345 +-0.891008 0.453987 0.000000 -0.891385 0.453200 -0.003204 +-0.852642 0.522496 0.000000 -0.852962 0.521928 -0.003204 +-0.884977 0.443954 -0.140431 -0.885006 0.443953 -0.140172 +-0.907443 0.414269 -0.070198 -0.907315 0.414441 -0.070315 +-0.917730 0.371744 -0.139921 -0.917081 0.374126 -0.137700 +-0.937283 0.341431 -0.070177 -0.936613 0.343699 -0.067751 +-0.951058 0.309013 0.000000 -0.951048 0.309000 0.000000 +-0.923881 0.382680 0.000000 -0.924284 0.381634 -0.003204 +-0.892518 0.399765 -0.208802 -0.891842 0.402264 -0.206763 +-0.797438 0.529130 0.290023 -0.797327 0.529221 0.290109 +-0.786262 0.571248 0.235515 -0.786401 0.571368 0.234657 +-0.831066 0.504205 0.234749 -0.831324 0.504166 0.233894 +-0.839607 0.460261 0.288478 -0.837703 0.461684 0.291604 +-0.804731 0.484436 0.343118 -0.802515 0.485794 0.346324 +-0.870465 0.433883 0.232456 -0.869076 0.435163 0.235115 +-0.759570 0.551855 0.344252 -0.759606 0.551897 0.344035 +-0.749660 0.594892 0.290023 -0.749718 0.594745 0.290109 +-0.709407 0.615639 0.343118 -0.710013 0.613117 0.346324 +-0.697193 0.656280 0.288478 -0.697958 0.654042 0.291604 +-0.681641 0.693779 0.232457 -0.682424 0.692068 0.235115 +-0.736346 0.634577 0.234749 -0.736381 0.634816 0.233894 +-0.718226 0.572051 0.396117 -0.718650 0.569170 0.399396 +-0.766003 0.506292 0.396117 -0.763421 0.507584 0.399396 +-0.723600 0.525720 0.447215 -0.723594 0.525712 0.447218 +-0.771665 0.610923 0.176934 -0.771752 0.610797 0.176824 +-0.719184 0.672318 0.175393 -0.719413 0.671896 0.175970 +-0.753041 0.647410 0.117431 -0.753380 0.646931 0.117832 +-0.803384 0.583689 0.117819 -0.803339 0.583667 0.118015 +-0.819484 0.545105 0.176934 -0.819391 0.545244 0.176824 +-0.848429 0.516118 0.117431 -0.848079 0.516587 0.117832 +-0.861656 0.476221 0.175393 -0.861324 0.476577 0.175970 +-0.830854 0.553369 0.058866 -0.830439 0.553911 0.059084 +-0.783037 0.619184 0.058866 -0.783441 0.618610 0.059084 +-0.907646 0.415593 0.058828 -0.907559 0.415723 0.058931 +-0.937549 0.342844 0.058816 -0.937010 0.343913 0.060762 +-0.919554 0.375034 0.117350 -0.918821 0.376141 0.119449 +-0.886763 0.446973 0.117758 -0.886776 0.446974 0.117527 +-0.871842 0.486237 0.058859 -0.871883 0.486099 0.058931 +-0.897156 0.405429 0.175323 -0.896176 0.406568 0.177557 +-0.731857 0.678912 0.058859 -0.731742 0.679006 0.058931 +-0.699126 0.705235 0.117759 -0.699118 0.705252 0.117527 +-0.675735 0.734793 0.058828 -0.675832 0.734672 0.058931 +-0.640841 0.758651 0.117350 -0.641682 0.757591 0.119449 +-0.615787 0.785715 0.058816 -0.616657 0.784845 0.060762 +-0.662827 0.727957 0.175323 -0.663594 0.726676 0.177557 +-0.945116 0.267378 -0.187791 -0.945067 0.267556 -0.187689 +-0.919948 0.296002 -0.257058 -0.919797 0.295816 -0.257729 +-0.942015 0.228897 -0.245385 -0.941923 0.228523 -0.246040 +-0.964122 0.199328 -0.175322 -0.963988 0.197821 -0.177557 +-0.964376 0.237083 -0.117350 -0.964446 0.235725 -0.119449 +-0.959253 0.160620 -0.232455 -0.958892 0.158757 -0.235115 +-0.943511 0.305209 -0.128971 -0.943480 0.305155 -0.129124 +-0.921083 0.334688 -0.198974 -0.921140 0.334544 -0.198859 +-0.893165 0.361589 -0.267412 -0.892941 0.361583 -0.268075 +-0.960014 0.273703 -0.058816 -0.960204 0.272500 -0.060762 +-0.888365 0.322138 -0.327161 -0.888394 0.321909 -0.327250 +-0.858564 0.386727 -0.336614 -0.858913 0.386303 -0.336131 +-0.850924 0.346151 -0.395106 -0.851283 0.345592 -0.394787 +-0.879083 0.280317 -0.385532 -0.879116 0.280343 -0.385357 +-0.913686 0.255177 -0.316327 -0.913602 0.255318 -0.316416 +-0.902655 0.213021 -0.373945 -0.902585 0.213813 -0.373608 +-0.933991 0.187430 -0.304189 -0.933988 0.188147 -0.303690 +-0.865450 0.237227 -0.441270 -0.865291 0.238075 -0.441084 +-0.838921 0.303799 -0.451573 -0.839229 0.303110 -0.451399 +-0.904276 0.106493 -0.413454 -0.904263 0.106693 -0.413373 +-0.917302 0.040640 -0.396114 -0.915983 0.038087 -0.399365 +-0.935787 0.081085 -0.343116 -0.934782 0.078677 -0.346294 +-0.921465 0.147412 -0.359406 -0.921384 0.147343 -0.359539 +-0.886892 0.172530 -0.428551 -0.886929 0.172369 -0.428449 +-0.949793 0.121142 -0.288476 -0.949095 0.118870 -0.291604 +-0.809339 0.366025 -0.459343 -0.809290 0.366192 -0.459243 +-0.819787 0.408283 -0.401564 -0.819727 0.408216 -0.401715 +-0.775698 0.427132 -0.464598 -0.775780 0.426984 -0.464522 +0.548445 0.812168 -0.198975 0.548570 0.812098 -0.198859 +0.570268 0.780202 -0.257059 0.570238 0.779962 -0.257729 +0.510049 0.817521 -0.267413 0.509842 0.817408 -0.268075 +0.487085 0.848027 -0.208803 0.485061 0.849666 -0.206763 +0.523951 0.840177 -0.139921 0.521989 0.841731 -0.137700 +0.447216 0.850648 -0.276397 0.444838 0.852351 -0.274911 +0.583918 0.801503 -0.128972 0.583911 0.801447 -0.129124 +0.607453 0.771839 -0.187791 0.607288 0.771966 -0.187689 +0.640841 0.758651 -0.117350 0.641682 0.757591 -0.119449 +0.662827 0.727957 -0.175323 0.663594 0.726676 -0.177557 +0.681641 0.693779 -0.232457 0.682424 0.692068 -0.235115 +0.627563 0.738884 -0.245387 0.627705 0.738517 -0.246040 +0.615787 0.785715 -0.058816 0.616657 0.784845 -0.060762 +0.557587 0.827147 -0.070177 0.555681 0.828608 -0.067751 +0.587786 0.809017 0.000000 0.587756 0.809015 0.000000 +0.589198 0.743493 -0.316329 0.589038 0.743553 -0.316416 +0.645446 0.700619 -0.304191 0.645009 0.701193 -0.303690 +0.605053 0.702904 -0.373947 0.604511 0.703513 -0.373608 +0.546428 0.743492 -0.385534 0.546434 0.743553 -0.385357 +0.529354 0.782783 -0.327162 0.529496 0.782617 -0.327250 +0.484950 0.780201 -0.395108 0.485549 0.779962 -0.394787 +0.467281 0.817520 -0.336615 0.467788 0.817408 -0.336131 +0.500133 0.738882 -0.451575 0.500778 0.738517 -0.451399 +0.560726 0.700617 -0.441272 0.560076 0.701193 -0.441084 +0.376492 0.801499 -0.464600 0.376629 0.801447 -0.464522 +0.312131 0.827143 -0.467343 0.309122 0.828608 -0.466720 +0.359468 0.840174 -0.406067 0.356609 0.841731 -0.405316 +0.423240 0.812166 -0.401565 0.423200 0.812067 -0.401715 +0.439626 0.771836 -0.459345 0.439467 0.771966 -0.459243 +0.404589 0.848026 -0.342287 0.401868 0.849666 -0.341380 +0.616100 0.660880 -0.428554 0.616230 0.660787 -0.428449 +0.658834 0.660881 -0.359408 0.658803 0.660787 -0.359539 +0.668980 0.617672 -0.413457 0.668844 0.617817 -0.413373 +0.709407 0.615639 -0.343118 0.710013 0.613117 -0.346324 +0.718226 0.572051 -0.396117 0.718650 0.569170 -0.399396 +0.697193 0.656280 -0.288478 0.697958 0.654042 -0.291604 +0.329093 0.879342 -0.344174 0.328867 0.879360 -0.344279 +0.296648 0.912981 -0.280118 0.296731 0.913236 -0.279153 +0.373173 0.884758 -0.279186 0.373486 0.884915 -0.278207 +0.282207 0.868531 -0.407447 0.282235 0.868618 -0.407208 +0.250629 0.904837 -0.344175 0.250801 0.904721 -0.344279 +0.203033 0.891003 -0.406067 0.206244 0.890591 -0.405316 +0.171144 0.923877 -0.342287 0.174291 0.923612 -0.341380 +0.138199 0.951055 -0.276397 0.141087 0.951048 -0.274911 +0.218149 0.935129 -0.279186 0.217963 0.935453 -0.278207 +0.233672 0.852636 -0.467343 0.236946 0.852046 -0.466720 +0.262524 0.941617 -0.210804 0.262734 0.941557 -0.210669 +0.183017 0.960654 -0.208923 0.183691 0.960356 -0.209632 +0.226619 0.963861 -0.140059 0.227424 0.963591 -0.140538 +0.305952 0.941617 -0.140536 0.305918 0.941557 -0.140782 +0.341086 0.916091 -0.210804 0.340861 0.916196 -0.210669 +0.383207 0.912982 -0.140059 0.382366 0.913236 -0.140538 +0.416598 0.884759 -0.208923 0.415876 0.884915 -0.209632 +0.347268 0.935130 -0.070263 0.346324 0.935453 -0.070528 +0.268712 0.960654 -0.070263 0.269662 0.960356 -0.070528 +0.309017 0.951056 0.000000 0.309000 0.951048 -0.003235 +0.490633 0.868534 -0.070198 0.490432 0.868618 -0.070315 +0.453991 0.891006 0.000000 0.454756 0.890591 -0.003204 +0.522499 0.852640 0.000000 0.523423 0.852046 -0.003204 +0.455010 0.879343 -0.140432 0.455000 0.879360 -0.140172 +0.419919 0.904839 -0.070250 0.420087 0.904721 -0.070345 +0.382684 0.923879 0.000000 0.383282 0.923612 -0.003204 +0.192131 0.978852 -0.070250 0.191900 0.978881 -0.070345 +0.156435 0.987688 0.000000 0.155553 0.987793 -0.003204 +0.233446 0.972370 0.000000 0.232795 0.972503 -0.003204 +0.148757 0.978851 -0.140432 0.148747 0.978881 -0.140172 +0.113582 0.991046 -0.070198 0.113773 0.990997 -0.070315 +0.069961 0.987688 -0.139921 0.072451 0.987793 -0.137700 +0.035088 0.996917 -0.070177 0.037446 0.996979 -0.067751 +0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 +0.078459 0.996917 0.000000 0.077334 0.996979 -0.003204 +0.104401 0.972369 -0.208803 0.106967 0.972503 -0.206763 +0.256812 0.921919 0.290023 0.256935 0.921842 0.290109 +0.300323 0.924305 0.235515 0.300363 0.924497 0.234657 +0.222716 0.946198 0.234749 0.222571 0.946410 0.233894 +0.178283 0.940742 0.288478 0.180212 0.939390 0.291604 +0.212052 0.915043 0.343118 0.214026 0.913358 0.346324 +0.143661 0.961938 0.232456 0.145299 0.961028 0.235115 +0.290126 0.892926 0.344252 0.290139 0.892972 0.344035 +0.334119 0.896800 0.290023 0.333964 0.896817 0.290109 +0.366289 0.864929 0.343118 0.363689 0.864711 0.346324 +0.408715 0.865871 0.288478 0.406323 0.865902 0.291604 +0.449185 0.862668 0.232457 0.447310 0.862911 0.235115 +0.375976 0.896401 0.234749 0.376202 0.896512 0.233894 +0.322110 0.859847 0.396117 0.319224 0.859371 0.399396 +0.244806 0.884964 0.396117 0.246834 0.882900 0.399396 +0.276385 0.850640 0.447215 0.276376 0.850642 0.447218 +0.342567 0.922682 0.176934 0.342418 0.922727 0.176824 +0.417173 0.891742 0.175393 0.416669 0.891842 0.175970 +0.383023 0.916244 0.117431 0.382458 0.916410 0.117832 +0.306864 0.944433 0.117819 0.306833 0.944395 0.118015 +0.265194 0.947822 0.176934 0.265328 0.947783 0.176824 +0.228681 0.966393 0.117431 0.229225 0.966186 0.117832 +0.186649 0.966643 0.175393 0.187078 0.966430 0.175970 +0.269540 0.961188 0.058866 0.270180 0.960967 0.059084 +0.346909 0.936050 0.058866 0.346233 0.936247 0.059084 +0.114778 0.991648 0.058828 0.114902 0.991607 0.058931 +0.036349 0.997607 0.058816 0.037538 0.997436 0.060762 +0.072524 0.990439 0.117350 0.073794 0.990081 0.119449 +0.151075 0.981483 0.117758 0.151067 0.981506 0.117527 +0.193028 0.979426 0.058859 0.192877 0.979430 0.058931 +0.108352 0.978530 0.175323 0.109745 0.977966 0.177557 +0.419529 0.905832 0.058859 0.419660 0.905759 0.058931 +0.454678 0.882837 0.117759 0.454665 0.882839 0.117527 +0.490018 0.869725 0.058828 0.489883 0.869778 0.058931 +0.523490 0.843911 0.117350 0.522233 0.844386 0.119449 +0.556971 0.828447 0.058816 0.555895 0.829005 0.060762 +0.487504 0.855337 0.175323 0.486038 0.855678 0.177557 +-0.037760 0.981483 -0.187791 -0.037568 0.981506 -0.187689 +-0.002760 0.966392 -0.257059 -0.002869 0.966186 -0.257729 +-0.073399 0.966643 -0.245387 -0.073702 0.966430 -0.246040 +-0.108352 0.978530 -0.175323 -0.109745 0.977966 -0.177557 +-0.072524 0.990439 -0.117350 -0.073794 0.990081 -0.119449 +-0.143661 0.961938 -0.232456 -0.145299 0.961028 -0.235115 +-0.001285 0.991647 -0.128972 -0.001312 0.991607 -0.129124 +0.033683 0.979426 -0.198975 0.033509 0.979430 -0.198859 +0.067893 0.961187 -0.267413 0.067965 0.960967 -0.268075 +-0.036349 0.997607 -0.058816 -0.037538 0.997436 -0.060762 +0.031858 0.944431 -0.327162 0.031648 0.944395 -0.327250 +0.102494 0.936048 -0.336615 0.101993 0.936247 -0.336131 +0.066265 0.916242 -0.395108 0.065645 0.916410 -0.394787 +-0.005048 0.922680 -0.385534 -0.005005 0.922727 -0.385357 +-0.039651 0.947821 -0.316329 -0.039460 0.947783 -0.316416 +-0.076335 0.924303 -0.373948 -0.075533 0.924467 -0.373608 +-0.110357 0.946197 -0.304191 -0.109653 0.946410 -0.303690 +-0.041816 0.896398 -0.441272 -0.040956 0.896512 -0.441084 +0.029696 0.891739 -0.451575 0.028932 0.891842 -0.451399 +-0.178150 0.892925 -0.413457 -0.177953 0.892972 -0.413373 +-0.244806 0.884964 -0.396117 -0.246834 0.882900 -0.399396 +-0.212052 0.915043 -0.343118 -0.214026 0.913358 -0.346324 +-0.144545 0.921918 -0.359408 -0.144566 0.921842 -0.359539 +-0.109972 0.896798 -0.428554 -0.110111 0.896817 -0.428449 +-0.178283 0.940742 -0.288478 -0.180212 0.939390 -0.291604 +0.098017 0.882833 -0.459345 0.098209 0.882839 -0.459243 +0.134978 0.905829 -0.401566 0.134922 0.905759 -0.401715 +0.166529 0.869721 -0.464600 0.166356 0.869778 -0.464522 +0.819787 -0.408283 0.401564 0.819727 -0.408216 0.401715 +0.858564 -0.386727 0.336614 0.858913 -0.386303 0.336131 +0.850924 -0.346151 0.395106 0.851283 -0.345592 0.394787 +0.825776 -0.448256 0.342286 0.824549 -0.451155 0.341380 +0.784657 -0.468427 0.406066 0.783258 -0.471358 0.405316 +0.861804 -0.425322 0.276396 0.860897 -0.428083 0.274911 +0.775698 -0.427132 0.464598 0.775780 -0.426984 0.464522 +0.809339 -0.366025 0.459343 0.809290 -0.366192 0.459243 +0.762696 -0.383611 0.520709 0.763909 -0.381420 0.520524 +0.794558 -0.322523 0.514448 0.795709 -0.320078 0.514145 +0.838921 -0.303799 0.451573 0.839229 -0.303110 0.451399 +0.822618 -0.259890 0.505724 0.823847 -0.256874 0.505234 +0.727183 -0.442864 0.524478 0.728416 -0.440901 0.524369 +0.738701 -0.485709 0.467342 0.737114 -0.488632 0.466720 +0.688189 -0.499997 0.525736 0.688162 -0.499985 0.525712 +0.879083 -0.280317 0.385532 0.879116 -0.280343 0.385357 +0.865450 -0.237227 0.441270 0.865291 -0.238075 0.441084 +0.902655 -0.213021 0.373945 0.902585 -0.213813 0.373608 +0.913686 -0.255177 0.316327 0.913602 -0.255318 0.316416 +0.888365 -0.322138 0.327161 0.888394 -0.321909 0.327250 +0.919948 -0.296002 0.257058 0.919797 -0.295816 0.257729 +0.893165 -0.361589 0.267412 0.892941 -0.361583 0.268075 +0.942015 -0.228897 0.245385 0.941923 -0.228523 0.246040 +0.933991 -0.187430 0.304189 0.933988 -0.188147 0.303690 +0.943511 -0.305209 0.128971 0.943480 -0.305155 0.129124 +0.937283 -0.341431 0.070177 0.936613 -0.343699 0.067751 +0.917730 -0.371744 0.139921 0.917081 -0.374126 0.137700 +0.921083 -0.334688 0.198974 0.921140 -0.334544 0.198859 +0.945116 -0.267378 0.187791 0.945067 -0.267556 0.187689 +0.892518 -0.399765 0.208802 0.891842 -0.402264 0.206763 +0.921465 -0.147412 0.359406 0.921384 -0.147343 0.359539 +0.886892 -0.172530 0.428551 0.886929 -0.172369 0.428449 +0.904276 -0.106493 0.413454 0.904263 -0.106693 0.413373 +0.866809 -0.131200 0.481070 0.867855 -0.127293 0.480178 +0.882730 -0.065757 0.465256 0.883572 -0.061617 0.464187 +0.846740 -0.196014 0.494581 0.847987 -0.192328 0.493851 +0.884977 -0.443954 0.140431 0.885006 -0.443953 0.140172 +0.857083 -0.470914 0.208923 0.856594 -0.471450 0.209632 +0.846659 -0.513373 0.140059 0.846126 -0.514054 0.140538 +0.907443 -0.414269 0.070198 0.907315 -0.414441 0.070315 +0.871574 -0.485205 0.070250 0.871670 -0.485000 0.070345 +0.891008 -0.453987 0.000000 0.891385 -0.453200 0.003204 +0.852642 -0.522496 0.000000 0.852962 -0.521928 0.003204 +0.830602 -0.552416 0.070263 0.830012 -0.553209 0.070528 +0.809018 -0.587783 0.000000 0.808985 -0.587756 0.003235 +0.923881 -0.382680 0.000000 0.924284 -0.381634 0.003204 +0.800989 -0.581950 0.140536 0.800958 -0.581927 0.140782 +0.782052 -0.619240 0.070263 0.782647 -0.618427 0.070528 +0.749882 -0.646576 0.140059 0.750359 -0.645863 0.140538 +0.765855 -0.607476 0.210804 0.766015 -0.607288 0.210669 +0.814409 -0.540648 0.210804 0.814295 -0.540849 0.210669 +0.776630 -0.564252 0.280118 0.776849 -0.564409 0.279153 +0.821951 -0.496439 0.279186 0.822291 -0.496353 0.278207 +0.726141 -0.628311 0.279186 0.726188 -0.628651 0.278207 +0.712722 -0.669611 0.208922 0.713095 -0.668966 0.209632 +0.670820 -0.688190 0.276396 0.673147 -0.686453 0.274911 +0.738819 -0.536781 0.407446 0.738884 -0.536821 0.407208 +0.690210 -0.552451 0.467342 0.692526 -0.550035 0.466720 +0.687975 -0.601499 0.406066 0.690329 -0.599261 0.405316 +0.783105 -0.517968 0.344174 0.782952 -0.518113 0.344279 +0.734612 -0.584714 0.344174 0.734703 -0.584521 0.344279 +0.681499 -0.646838 0.342286 0.683889 -0.644765 0.341380 +0.695702 -0.704470 0.140431 0.695700 -0.704489 0.140172 +0.656006 -0.725298 0.208802 0.658162 -0.723869 0.206763 +0.637147 -0.757935 0.139921 0.639241 -0.756554 0.137700 +0.730792 -0.678976 0.070250 0.730613 -0.679098 0.070345 +0.674412 -0.735010 0.070198 0.674551 -0.734855 0.070315 +0.707108 -0.707106 0.000000 0.706473 -0.707694 0.003204 +0.649449 -0.760405 0.000000 0.648579 -0.761101 0.003204 +0.614360 -0.785899 0.070177 0.616321 -0.784539 0.067751 +0.760407 -0.649447 0.000000 0.759972 -0.649922 0.003204 +0.424945 -0.830811 0.359408 0.424879 -0.830775 0.359539 +0.466876 -0.830358 0.304191 0.467574 -0.830134 0.303690 +0.481531 -0.792648 0.373947 0.482253 -0.792322 0.373608 +0.380716 -0.827108 0.413457 0.380902 -0.827052 0.413373 +0.438150 -0.790168 0.428554 0.438032 -0.790246 0.428449 +0.392635 -0.783840 0.481073 0.389264 -0.786035 0.480178 +0.448077 -0.744724 0.494584 0.444960 -0.747032 0.493851 +0.493055 -0.749784 0.441272 0.493820 -0.749352 0.441084 +0.501373 -0.702043 0.505727 0.498886 -0.704123 0.505234 +0.335314 -0.819205 0.465260 0.331614 -0.821314 0.464156 +0.538250 -0.749434 0.385533 0.538316 -0.749474 0.385357 +0.548172 -0.703980 0.451575 0.547624 -0.704489 0.451399 +0.592160 -0.702308 0.395107 0.591754 -0.702811 0.394787 +0.580894 -0.745337 0.327162 0.580706 -0.745415 0.327250 +0.525034 -0.790111 0.316328 0.525132 -0.789972 0.316416 +0.565796 -0.783451 0.257059 0.565569 -0.783349 0.257729 +0.508795 -0.825175 0.245387 0.508408 -0.825190 0.246040 +0.619897 -0.737711 0.267413 0.619831 -0.737480 0.268075 +0.633113 -0.697035 0.336615 0.632832 -0.697501 0.336131 +0.581835 -0.803016 0.128972 0.581774 -0.803003 0.129124 +0.546351 -0.816232 0.187791 0.546495 -0.816126 0.187689 +0.602940 -0.772575 0.198974 0.602832 -0.772668 0.198859 +0.641631 -0.653495 0.401565 0.641560 -0.653432 0.401715 +0.598211 -0.656617 0.459345 0.598376 -0.656514 0.459243 +0.645932 -0.605739 0.464599 0.645833 -0.605884 0.464522 +0.600523 -0.606822 0.520710 0.598804 -0.608631 0.520524 +0.645902 -0.554737 0.524478 0.644429 -0.556505 0.524369 +0.552270 -0.656003 0.514450 0.550310 -0.657857 0.514145 +0.699126 -0.705235 -0.117759 0.699118 -0.705252 -0.117527 +0.719184 -0.672318 -0.175393 0.719413 -0.671896 -0.175970 +0.753041 -0.647410 -0.117431 0.753380 -0.646931 -0.117832 +0.675735 -0.734793 -0.058828 0.675832 -0.734672 -0.058931 +0.731857 -0.678912 -0.058859 0.731742 -0.679006 -0.058931 +0.783037 -0.619184 -0.058866 0.783441 -0.618610 -0.059084 +0.803384 -0.583689 -0.117819 0.803339 -0.583667 -0.118015 +0.830854 -0.553369 -0.058866 0.830439 -0.553911 -0.059084 +0.848429 -0.516118 -0.117431 0.848079 -0.516587 -0.117832 +0.819484 -0.545105 -0.176934 0.819391 -0.545244 -0.176824 +0.771665 -0.610923 -0.176934 0.771752 -0.610797 -0.176824 +0.786262 -0.571248 -0.235515 0.786401 -0.571368 -0.234657 +0.736346 -0.634577 -0.234749 0.736381 -0.634816 -0.233894 +0.831066 -0.504205 -0.234749 0.831324 -0.504166 -0.233894 +0.861656 -0.476221 -0.175393 0.861324 -0.476577 -0.175970 +0.759570 -0.551855 -0.344252 0.759606 -0.551897 -0.344035 +0.749660 -0.594892 -0.290023 0.749718 -0.594745 -0.290109 +0.797438 -0.529130 -0.290023 0.797327 -0.529221 -0.290109 +0.886763 -0.446973 -0.117758 0.886776 -0.446974 -0.117527 +0.871842 -0.486237 -0.058859 0.871883 -0.486099 -0.058931 +0.907646 -0.415593 -0.058828 0.907559 -0.415723 -0.058931 +-0.134978 -0.905829 0.401566 -0.134922 -0.905759 0.401715 +-0.102494 -0.936048 0.336615 -0.101993 -0.936247 0.336131 +-0.066265 -0.916242 0.395108 -0.065645 -0.916410 0.394787 +-0.171144 -0.923877 0.342287 -0.174291 -0.923612 0.341380 +-0.203033 -0.891003 0.406067 -0.206244 -0.890591 0.405316 +-0.138199 -0.951055 0.276397 -0.141087 -0.951048 0.274911 +-0.166529 -0.869721 0.464600 -0.166356 -0.869778 0.464522 +-0.098017 -0.882833 0.459345 -0.098209 -0.882839 0.459243 +-0.129157 -0.843907 0.520711 -0.126713 -0.844386 0.520524 +-0.061212 -0.855333 0.514451 -0.058535 -0.855678 0.514145 +-0.029696 -0.891739 0.451575 -0.028932 -0.891842 0.451399 +0.007026 -0.862665 0.505728 0.010224 -0.862880 0.505234 +-0.196483 -0.828442 0.524480 -0.194250 -0.829005 0.524369 +-0.233672 -0.852636 0.467343 -0.236946 -0.852046 0.466720 +-0.262869 -0.809012 0.525738 -0.262856 -0.808985 0.525712 +0.005048 -0.922680 0.385534 0.005005 -0.922727 0.385357 +0.041816 -0.896398 0.441272 0.040956 -0.896512 0.441084 +0.076335 -0.924303 0.373948 0.075533 -0.924467 0.373608 +0.039651 -0.947821 0.316329 0.039460 -0.947783 0.316416 +-0.031858 -0.944431 0.327162 -0.031648 -0.944395 0.327250 +0.002760 -0.966392 0.257059 0.002869 -0.966186 0.257729 +-0.067893 -0.961187 0.267413 -0.067965 -0.960967 0.268075 +0.073399 -0.966643 0.245387 0.073702 -0.966430 0.246040 +0.110357 -0.946197 0.304191 0.109653 -0.946410 0.303690 +0.001285 -0.991647 0.128972 0.001312 -0.991607 0.129124 +-0.035088 -0.996917 0.070177 -0.037446 -0.996979 0.067751 +-0.069961 -0.987688 0.139921 -0.072451 -0.987793 0.137700 +-0.033683 -0.979426 0.198975 -0.033509 -0.979430 0.198859 +0.037760 -0.981483 0.187791 0.037568 -0.981506 0.187689 +-0.104401 -0.972369 0.208803 -0.106967 -0.972503 0.206763 +0.144545 -0.921918 0.359408 0.144566 -0.921842 0.359539 +0.109972 -0.896798 0.428554 0.110111 -0.896817 0.428449 +0.178150 -0.892925 0.413457 0.177953 -0.892972 0.413373 +0.143074 -0.864927 0.481074 0.147069 -0.864711 0.480178 +0.210234 -0.859846 0.465260 0.214454 -0.859371 0.464156 +0.075230 -0.865868 0.494584 0.079073 -0.865902 0.493851 +-0.148757 -0.978851 0.140432 -0.148747 -0.978881 0.140172 +-0.183017 -0.960654 0.208923 -0.183691 -0.960356 0.209632 +-0.226619 -0.963861 0.140059 -0.227424 -0.963591 0.140538 +-0.113582 -0.991046 0.070198 -0.113773 -0.990997 0.070315 +-0.192131 -0.978852 0.070250 -0.191900 -0.978881 0.070345 +-0.156435 -0.987688 0.000000 -0.155553 -0.987793 0.003204 +-0.233446 -0.972370 0.000000 -0.232795 -0.972503 0.003204 +-0.268712 -0.960654 0.070263 -0.269662 -0.960356 0.070528 +-0.309017 -0.951056 0.000000 -0.309000 -0.951048 0.003235 +-0.078459 -0.996917 0.000000 -0.077334 -0.996979 0.003204 +-0.305952 -0.941617 0.140536 -0.305918 -0.941557 0.140782 +-0.347268 -0.935130 0.070263 -0.346324 -0.935453 0.070528 +-0.383207 -0.912982 0.140059 -0.382366 -0.913236 0.140538 +-0.341086 -0.916091 0.210804 -0.340861 -0.916196 0.210669 +-0.262524 -0.941617 0.210804 -0.262734 -0.941557 0.210669 +-0.296648 -0.912981 0.280118 -0.296731 -0.913236 0.279153 +-0.218149 -0.935129 0.279186 -0.217963 -0.935453 0.278207 +-0.373173 -0.884758 0.279186 -0.373486 -0.884915 0.278207 +-0.416598 -0.884759 0.208923 -0.415876 -0.884915 0.209632 +-0.447216 -0.850648 0.276397 -0.444838 -0.852351 0.274911 +-0.282207 -0.868531 0.407447 -0.282235 -0.868618 0.407208 +-0.312131 -0.827143 0.467343 -0.309122 -0.828608 0.466720 +-0.359468 -0.840174 0.406067 -0.356609 -0.841731 0.405316 +-0.250629 -0.904837 0.344175 -0.250801 -0.904721 0.344279 +-0.329093 -0.879342 0.344174 -0.328867 -0.879360 0.344279 +-0.404589 -0.848026 0.342287 -0.401868 -0.849666 0.341380 +-0.455010 -0.879343 0.140432 -0.455000 -0.879360 0.140172 +-0.487085 -0.848027 0.208803 -0.485061 -0.849666 0.206763 +-0.523951 -0.840177 0.139921 -0.521989 -0.841731 0.137700 +-0.419919 -0.904839 0.070250 -0.420087 -0.904721 0.070345 +-0.490633 -0.868534 0.070198 -0.490432 -0.868618 0.070315 +-0.453991 -0.891006 0.000000 -0.454756 -0.890591 0.003204 +-0.522499 -0.852640 0.000000 -0.523423 -0.852046 0.003204 +-0.557587 -0.827147 0.070177 -0.555681 -0.828608 0.067751 +-0.382684 -0.923879 0.000000 -0.383282 -0.923612 0.003204 +-0.658834 -0.660881 0.359408 -0.658803 -0.660787 0.359539 +-0.645446 -0.700619 0.304191 -0.645009 -0.701193 0.303690 +-0.605053 -0.702904 0.373947 -0.604511 -0.703513 0.373608 +-0.668980 -0.617672 0.413457 -0.668844 -0.617817 0.413373 +-0.616100 -0.660880 0.428554 -0.616230 -0.660787 0.428449 +-0.624147 -0.615637 0.481073 -0.627277 -0.613117 0.480178 +-0.569814 -0.656277 0.494584 -0.572954 -0.654042 0.493851 +-0.560726 -0.700617 0.441272 -0.560076 -0.701193 0.441084 +-0.512753 -0.693775 0.505727 -0.515488 -0.692068 0.505234 +-0.675494 -0.572050 0.465260 -0.678640 -0.569170 0.464156 +-0.546428 -0.743492 0.385534 -0.546434 -0.743553 0.385357 +-0.500133 -0.738882 0.451575 -0.500778 -0.738517 0.451399 +-0.484950 -0.780201 0.395108 -0.485549 -0.779962 0.394787 +-0.529354 -0.782783 0.327162 -0.529496 -0.782617 0.327250 +-0.589198 -0.743493 0.316329 -0.589038 -0.743553 0.316416 +-0.570268 -0.780202 0.257059 -0.570238 -0.779962 0.257729 +-0.627563 -0.738884 0.245387 -0.627705 -0.738517 0.246040 +-0.510049 -0.817521 0.267413 -0.509842 -0.817408 0.268075 +-0.467281 -0.817520 0.336615 -0.467788 -0.817408 0.336131 +-0.583918 -0.801503 0.128972 -0.583911 -0.801447 0.129124 +-0.607453 -0.771839 0.187791 -0.607288 -0.771966 0.187689 +-0.548445 -0.812168 0.198975 -0.548570 -0.812098 0.198859 +-0.423240 -0.812166 0.401565 -0.423200 -0.812067 0.401715 +-0.439626 -0.771836 0.459345 -0.439467 -0.771966 0.459243 +-0.376492 -0.801499 0.464600 -0.376629 -0.801447 0.464522 +-0.391555 -0.758647 0.520711 -0.393811 -0.757591 0.520524 +-0.327997 -0.785710 0.524480 -0.330119 -0.784845 0.524369 +-0.453238 -0.727953 0.514450 -0.455611 -0.726676 0.514145 +-0.454678 -0.882837 -0.117759 -0.454665 -0.882839 -0.117527 +-0.417173 -0.891742 -0.175393 -0.416669 -0.891842 -0.175970 +-0.383023 -0.916244 -0.117431 -0.382458 -0.916410 -0.117832 +-0.490018 -0.869725 -0.058828 -0.489883 -0.869778 -0.058931 +-0.419529 -0.905832 -0.058859 -0.419660 -0.905759 -0.058931 +-0.346909 -0.936050 -0.058866 -0.346233 -0.936247 -0.059084 +-0.306864 -0.944433 -0.117819 -0.306833 -0.944395 -0.118015 +-0.269540 -0.961188 -0.058866 -0.270180 -0.960967 -0.059084 +-0.228681 -0.966393 -0.117431 -0.229225 -0.966186 -0.117832 +-0.265194 -0.947822 -0.176934 -0.265328 -0.947783 -0.176824 +-0.342567 -0.922682 -0.176934 -0.342418 -0.922727 -0.176824 +-0.300323 -0.924305 -0.235515 -0.300363 -0.924497 -0.234657 +-0.375976 -0.896401 -0.234749 -0.376202 -0.896512 -0.233894 +-0.222716 -0.946198 -0.234749 -0.222571 -0.946410 -0.233894 +-0.186649 -0.966643 -0.175393 -0.187078 -0.966430 -0.175970 +-0.290126 -0.892926 -0.344252 -0.290139 -0.892972 -0.344035 +-0.334119 -0.896800 -0.290023 -0.333964 -0.896817 -0.290109 +-0.256812 -0.921919 -0.290023 -0.256935 -0.921842 -0.290109 +-0.151075 -0.981483 -0.117758 -0.151067 -0.981506 -0.117527 +-0.193028 -0.979426 -0.058859 -0.192877 -0.979430 -0.058931 +-0.114778 -0.991648 -0.058828 -0.114902 -0.991607 -0.058931 +-0.903205 -0.151547 0.401564 -0.903104 -0.151524 0.401715 +-0.921907 -0.191777 0.336614 -0.921964 -0.192297 0.336131 +-0.891875 -0.220114 0.395107 -0.891842 -0.220740 0.394787 +-0.931546 -0.122728 0.342286 -0.932249 -0.119633 0.341380 +-0.910136 -0.082241 0.406065 -0.910733 -0.079043 0.405316 +-0.947213 -0.162458 0.276396 -0.948088 -0.159673 0.274911 +-0.878615 -0.110383 0.464598 -0.878628 -0.110538 0.464522 +-0.869914 -0.179593 0.459344 -0.869991 -0.179388 0.459243 +-0.842515 -0.137950 0.520709 -0.842219 -0.140416 0.520524 +-0.832385 -0.206099 0.514449 -0.831904 -0.208747 0.514145 +-0.857271 -0.247322 0.451574 -0.857143 -0.248054 0.451399 +-0.818272 -0.273262 0.505726 -0.817499 -0.276406 0.505234 +-0.848612 -0.069140 0.524478 -0.848445 -0.071413 0.524369 +-0.883114 -0.041248 0.467341 -0.883572 -0.037935 0.466720 +-0.850648 0.000000 0.525736 -0.850642 0.000000 0.525712 +-0.875961 -0.289925 0.385533 -0.876034 -0.289895 0.385357 +-0.839604 -0.316773 0.441271 -0.839961 -0.315989 0.441084 +-0.855476 -0.358224 0.373947 -0.855892 -0.357524 0.373608 +-0.889179 -0.330602 0.316328 -0.889187 -0.330424 0.316416 +-0.908052 -0.261547 0.327161 -0.907956 -0.261727 0.327250 +-0.918241 -0.301255 0.257058 -0.918027 -0.301309 0.257729 +-0.935124 -0.232452 0.267412 -0.934935 -0.232276 0.268075 +-0.896651 -0.368513 0.245386 -0.896359 -0.368755 0.246040 +-0.865786 -0.397345 0.304191 -0.866207 -0.396741 0.303690 +-0.942717 -0.307655 0.128971 -0.942656 -0.307657 0.129124 +-0.958969 -0.274690 0.070177 -0.959777 -0.272439 0.067751 +-0.960967 -0.238674 0.139921 -0.961852 -0.236335 0.137700 +-0.941898 -0.270623 0.198974 -0.941862 -0.270760 0.198859 +-0.921778 -0.339204 0.187791 -0.921842 -0.339030 0.187689 +-0.957040 -0.201186 0.208802 -0.957976 -0.198767 0.206763 +-0.832130 -0.422358 0.359408 -0.832057 -0.422346 0.359539 +-0.818923 -0.381716 0.428553 -0.818873 -0.381848 0.428449 +-0.794172 -0.445359 0.413457 -0.794275 -0.445174 0.413373 +-0.778382 -0.403349 0.481073 -0.776940 -0.407117 0.480178 +-0.752796 -0.465651 0.465260 -0.751030 -0.469527 0.464156 +-0.800242 -0.339117 0.494583 -0.799097 -0.342814 0.493851 +-0.976912 -0.161004 0.140431 -0.976928 -0.160985 0.140172 +-0.970192 -0.122799 0.208922 -0.970122 -0.122044 0.209632 +-0.986715 -0.082322 0.140059 -0.986694 -0.081454 0.140538 +-0.977640 -0.198224 0.070198 -0.977660 -0.198004 0.070315 +-0.990315 -0.119754 0.070250 -0.990265 -0.119938 0.070345 +-0.987689 -0.156432 0.000000 -0.987518 -0.157292 0.003204 +-0.996917 -0.078458 0.000000 -0.996857 -0.079104 0.003204 +-0.996673 -0.041299 0.070263 -0.996673 -0.040284 0.070528 +-1.000000 0.000000 0.000000 -0.999969 0.000000 0.003235 +-0.972371 -0.233442 0.000000 -0.972106 -0.234504 0.003204 +-0.990076 0.000000 0.140536 -0.990020 0.000000 0.140782 +-0.996673 0.041299 0.070263 -0.996673 0.040284 0.070528 +-0.986715 0.082322 0.140059 -0.986694 0.081454 0.140538 +-0.976656 0.041301 0.210803 -0.976684 0.041047 0.210669 +-0.976656 -0.041301 0.210803 -0.976684 -0.041047 0.210669 +-0.959966 0.000000 0.280117 -0.960234 0.000000 0.279153 +-0.956772 -0.081500 0.279185 -0.957030 -0.081759 0.278207 +-0.956772 0.081500 0.279185 -0.957030 0.081759 0.278207 +-0.970192 0.122799 0.208922 -0.970122 0.122044 0.209632 +-0.947213 0.162458 0.276396 -0.948088 0.159673 0.274911 +-0.913230 0.000000 0.407446 -0.913327 0.000000 0.407208 +-0.883114 0.041248 0.467341 -0.883572 0.037935 0.466720 +-0.910136 0.082241 0.406065 -0.910733 0.079043 0.405316 +-0.938000 -0.041250 0.344173 -0.937956 -0.041017 0.344279 +-0.938000 0.041250 0.344173 -0.937956 0.041017 0.344279 +-0.931546 0.122728 0.342286 -0.932249 0.119633 0.341380 +-0.976912 0.161004 0.140431 -0.976928 0.160985 0.140172 +-0.957040 0.201186 0.208802 -0.957976 0.198767 0.206763 +-0.960967 0.238674 0.139921 -0.961852 0.236335 0.137700 +-0.990315 0.119754 0.070250 -0.990265 0.119938 0.070345 +-0.977640 0.198224 0.070198 -0.977660 0.198004 0.070315 +-0.987689 0.156432 0.000000 -0.987518 0.157292 0.003204 +-0.972371 0.233442 0.000000 -0.972106 0.234504 0.003204 +-0.958969 0.274690 0.070177 -0.959777 0.272439 0.067751 +-0.996917 0.078458 0.000000 -0.996857 0.079104 0.003204 +-0.832130 0.422358 0.359408 -0.832057 0.422346 0.359539 +-0.865786 0.397345 0.304191 -0.866207 0.396741 0.303690 +-0.855476 0.358224 0.373947 -0.855892 0.357524 0.373608 +-0.794172 0.445359 0.413457 -0.794275 0.445174 0.413373 +-0.818923 0.381716 0.428553 -0.818873 0.381848 0.428449 +-0.778382 0.403349 0.481073 -0.776940 0.407117 0.480178 +-0.800242 0.339117 0.494583 -0.799097 0.342814 0.493851 +-0.839604 0.316773 0.441271 -0.839961 0.315989 0.441084 +-0.818272 0.273262 0.505726 -0.817499 0.276406 0.505234 +-0.752796 0.465651 0.465260 -0.751030 0.469527 0.464156 +-0.875961 0.289925 0.385533 -0.876034 0.289895 0.385357 +-0.857271 0.247322 0.451574 -0.857143 0.248054 0.451399 +-0.891875 0.220114 0.395107 -0.891842 0.220740 0.394787 +-0.908052 0.261547 0.327161 -0.907956 0.261727 0.327250 +-0.889179 0.330602 0.316328 -0.889187 0.330424 0.316416 +-0.918241 0.301255 0.257058 -0.918027 0.301309 0.257729 +-0.896651 0.368513 0.245386 -0.896359 0.368755 0.246040 +-0.935124 0.232452 0.267412 -0.934935 0.232276 0.268075 +-0.921907 0.191777 0.336614 -0.921964 0.192297 0.336131 +-0.942717 0.307655 0.128971 -0.942656 0.307657 0.129124 +-0.921778 0.339204 0.187791 -0.921842 0.339030 0.187689 +-0.941898 0.270623 0.198974 -0.941862 0.270760 0.198859 +-0.903205 0.151547 0.401564 -0.903104 0.151524 0.401715 +-0.869914 0.179593 0.459344 -0.869991 0.179388 0.459243 +-0.878615 0.110383 0.464598 -0.878628 0.110538 0.464522 +-0.842515 0.137950 0.520709 -0.842219 0.140416 0.520524 +-0.848612 0.069140 0.524478 -0.848445 0.071413 0.524369 +-0.832385 0.206099 0.514449 -0.831904 0.208747 0.514145 +-0.980131 0.159611 -0.117758 -0.980132 0.159612 -0.117527 +-0.977011 0.121191 -0.175392 -0.976959 0.120701 -0.175970 +-0.989761 0.081141 -0.117430 -0.989746 0.080538 -0.117832 +-0.978582 0.197272 -0.058828 -0.978576 0.197119 -0.058931 +-0.991139 0.119077 -0.058858 -0.991089 0.119205 -0.058931 +-0.997437 0.040675 -0.058866 -0.997436 0.039979 -0.059084 +-0.993035 0.000000 -0.117819 -0.992981 0.000000 -0.118015 +-0.997437 -0.040675 -0.058866 -0.997436 -0.039979 -0.059084 +-0.989761 -0.081141 -0.117430 -0.989746 -0.080538 -0.117832 +-0.983382 -0.040677 -0.176933 -0.983398 -0.040498 -0.176824 +-0.983382 0.040677 -0.176933 -0.983398 0.040498 -0.176824 +-0.971871 0.000000 -0.235513 -0.972045 0.000000 -0.234657 +-0.968711 0.080572 -0.234747 -0.968871 0.080752 -0.233894 +-0.968711 -0.080572 -0.234747 -0.968871 -0.080752 -0.233894 +-0.977011 -0.121191 -0.175392 -0.976959 -0.120701 -0.175970 +-0.938878 0.000000 -0.344249 -0.938932 0.000000 -0.344035 +-0.956157 0.040642 -0.290021 -0.956114 0.040498 -0.290109 +-0.956157 -0.040642 -0.290021 -0.956114 -0.040498 -0.290109 +-0.980131 -0.159611 -0.117758 -0.980132 -0.159612 -0.117527 +-0.991139 -0.119077 -0.058858 -0.991089 -0.119205 -0.058931 +-0.978582 -0.197272 -0.058828 -0.978576 -0.197119 -0.058931 +-0.423240 0.812166 0.401565 -0.423200 0.812067 0.401715 +-0.467281 0.817520 0.336615 -0.467788 0.817408 0.336131 +-0.484950 0.780201 0.395108 -0.485549 0.779962 0.394787 +-0.404589 0.848026 0.342287 -0.401868 0.849666 0.341380 +-0.359468 0.840174 0.406067 -0.356609 0.841731 0.405316 +-0.447216 0.850648 0.276397 -0.444838 0.852351 0.274911 +-0.376492 0.801499 0.464600 -0.376629 0.801447 0.464522 +-0.439626 0.771836 0.459345 -0.439467 0.771966 0.459243 +-0.391555 0.758647 0.520711 -0.393811 0.757591 0.520524 +-0.453238 0.727953 0.514450 -0.455611 0.726676 0.514145 +-0.500133 0.738882 0.451575 -0.500778 0.738517 0.451399 +-0.512753 0.693775 0.505727 -0.515488 0.692068 0.505234 +-0.327997 0.785710 0.524480 -0.330119 0.784845 0.524369 +-0.312131 0.827143 0.467343 -0.309122 0.828608 0.466720 +-0.262869 0.809012 0.525738 -0.262856 0.808985 0.525712 +-0.546428 0.743492 0.385534 -0.546434 0.743553 0.385357 +-0.560726 0.700617 0.441272 -0.560076 0.701193 0.441084 +-0.605053 0.702904 0.373947 -0.604511 0.703513 0.373608 +-0.589198 0.743493 0.316329 -0.589038 0.743553 0.316416 +-0.529354 0.782783 0.327162 -0.529496 0.782617 0.327250 +-0.570268 0.780202 0.257059 -0.570238 0.779962 0.257729 +-0.510049 0.817521 0.267413 -0.509842 0.817408 0.268075 +-0.627563 0.738884 0.245387 -0.627705 0.738517 0.246040 +-0.645446 0.700619 0.304191 -0.645009 0.701193 0.303690 +-0.583918 0.801503 0.128972 -0.583911 0.801447 0.129124 +-0.557587 0.827147 0.070177 -0.555681 0.828608 0.067751 +-0.523951 0.840177 0.139921 -0.521989 0.841731 0.137700 +-0.548445 0.812168 0.198975 -0.548570 0.812098 0.198859 +-0.607453 0.771839 0.187791 -0.607288 0.771966 0.187689 +-0.487085 0.848027 0.208803 -0.485061 0.849666 0.206763 +-0.658834 0.660881 0.359408 -0.658803 0.660787 0.359539 +-0.616100 0.660880 0.428554 -0.616230 0.660787 0.428449 +-0.668980 0.617672 0.413457 -0.668844 0.617817 0.413373 +-0.624147 0.615637 0.481073 -0.627277 0.613117 0.480178 +-0.675494 0.572050 0.465260 -0.678640 0.569170 0.464156 +-0.569814 0.656277 0.494584 -0.572954 0.654042 0.493851 +-0.455010 0.879343 0.140432 -0.455000 0.879360 0.140172 +-0.416598 0.884759 0.208923 -0.415876 0.884915 0.209632 +-0.383207 0.912982 0.140059 -0.382366 0.913236 0.140538 +-0.490633 0.868534 0.070198 -0.490432 0.868618 0.070315 +-0.419919 0.904839 0.070250 -0.420087 0.904721 0.070345 +-0.453991 0.891006 0.000000 -0.454756 0.890591 0.003204 +-0.382684 0.923879 0.000000 -0.383282 0.923612 0.003204 +-0.347268 0.935130 0.070263 -0.346324 0.935453 0.070528 +-0.309017 0.951056 0.000000 -0.309000 0.951048 0.003235 +-0.522499 0.852640 0.000000 -0.523423 0.852046 0.003204 +-0.305952 0.941617 0.140536 -0.305918 0.941557 0.140782 +-0.268712 0.960654 0.070263 -0.269662 0.960356 0.070528 +-0.226619 0.963861 0.140059 -0.227424 0.963591 0.140538 +-0.262524 0.941617 0.210804 -0.262734 0.941557 0.210669 +-0.341086 0.916091 0.210804 -0.340861 0.916196 0.210669 +-0.296648 0.912981 0.280118 -0.296731 0.913236 0.279153 +-0.373173 0.884758 0.279186 -0.373486 0.884915 0.278207 +-0.218149 0.935129 0.279186 -0.217963 0.935453 0.278207 +-0.183017 0.960654 0.208923 -0.183691 0.960356 0.209632 +-0.138199 0.951055 0.276397 -0.141087 0.951048 0.274911 +-0.282207 0.868531 0.407447 -0.282235 0.868618 0.407208 +-0.233672 0.852636 0.467343 -0.236946 0.852046 0.466720 +-0.203033 0.891003 0.406067 -0.206244 0.890591 0.405316 +-0.329093 0.879342 0.344174 -0.328867 0.879360 0.344279 +-0.250629 0.904837 0.344175 -0.250801 0.904721 0.344279 +-0.171144 0.923877 0.342287 -0.174291 0.923612 0.341380 +-0.148757 0.978851 0.140432 -0.148747 0.978881 0.140172 +-0.104401 0.972369 0.208803 -0.106967 0.972503 0.206763 +-0.069961 0.987688 0.139921 -0.072451 0.987793 0.137700 +-0.192131 0.978852 0.070250 -0.191900 0.978881 0.070345 +-0.113582 0.991046 0.070198 -0.113773 0.990997 0.070315 +-0.156435 0.987688 0.000000 -0.155553 0.987793 0.003204 +-0.078459 0.996917 0.000000 -0.077334 0.996979 0.003204 +-0.035088 0.996917 0.070177 -0.037446 0.996979 0.067751 +-0.233446 0.972370 0.000000 -0.232795 0.972503 0.003204 +0.144545 0.921918 0.359408 0.144566 0.921842 0.359539 +0.110357 0.946197 0.304191 0.109653 0.946410 0.303690 +0.076335 0.924303 0.373948 0.075533 0.924467 0.373608 +0.178150 0.892925 0.413457 0.177953 0.892972 0.413373 +0.109972 0.896798 0.428554 0.110111 0.896817 0.428449 +0.143074 0.864927 0.481074 0.147069 0.864711 0.480178 +0.075230 0.865868 0.494584 0.079073 0.865902 0.493851 +0.041816 0.896398 0.441272 0.040956 0.896512 0.441084 +0.007026 0.862665 0.505728 0.010224 0.862880 0.505234 +0.210234 0.859846 0.465260 0.214454 0.859371 0.464156 +0.005048 0.922680 0.385534 0.005005 0.922727 0.385357 +-0.029696 0.891739 0.451575 -0.028932 0.891842 0.451399 +-0.066265 0.916242 0.395108 -0.065645 0.916410 0.394787 +-0.031858 0.944431 0.327162 -0.031648 0.944395 0.327250 +0.039651 0.947821 0.316329 0.039460 0.947783 0.316416 +0.002760 0.966392 0.257059 0.002869 0.966186 0.257729 +0.073399 0.966643 0.245387 0.073702 0.966430 0.246040 +-0.067893 0.961187 0.267413 -0.067965 0.960967 0.268075 +-0.102494 0.936048 0.336615 -0.101993 0.936247 0.336131 +0.001285 0.991647 0.128972 0.001312 0.991607 0.129124 +0.037760 0.981483 0.187791 0.037568 0.981506 0.187689 +-0.033683 0.979426 0.198975 -0.033509 0.979430 0.198859 +-0.134978 0.905829 0.401566 -0.134922 0.905759 0.401715 +-0.098017 0.882833 0.459345 -0.098209 0.882839 0.459243 +-0.166529 0.869721 0.464600 -0.166356 0.869778 0.464522 +-0.129157 0.843907 0.520711 -0.126713 0.844386 0.520524 +-0.196483 0.828442 0.524480 -0.194250 0.829005 0.524369 +-0.061212 0.855333 0.514451 -0.058535 0.855678 0.514145 +-0.151075 0.981483 -0.117758 -0.151067 0.981506 -0.117527 +-0.186649 0.966643 -0.175393 -0.187078 0.966430 -0.175970 +-0.228681 0.966393 -0.117431 -0.229225 0.966186 -0.117832 +-0.114778 0.991648 -0.058828 -0.114902 0.991607 -0.058931 +-0.193028 0.979426 -0.058859 -0.192877 0.979430 -0.058931 +-0.269540 0.961188 -0.058866 -0.270180 0.960967 -0.059084 +-0.306864 0.944433 -0.117819 -0.306833 0.944395 -0.118015 +-0.346909 0.936050 -0.058866 -0.346233 0.936247 -0.059084 +-0.383023 0.916244 -0.117431 -0.382458 0.916410 -0.117832 +-0.342567 0.922682 -0.176934 -0.342418 0.922727 -0.176824 +-0.265194 0.947822 -0.176934 -0.265328 0.947783 -0.176824 +-0.300323 0.924305 -0.235515 -0.300363 0.924497 -0.234657 +-0.222716 0.946198 -0.234749 -0.222571 0.946410 -0.233894 +-0.375976 0.896401 -0.234749 -0.376202 0.896512 -0.233894 +-0.417173 0.891742 -0.175393 -0.416669 0.891842 -0.175970 +-0.290126 0.892926 -0.344252 -0.290139 0.892972 -0.344035 +-0.256812 0.921919 -0.290023 -0.256935 0.921842 -0.290109 +-0.334119 0.896800 -0.290023 -0.333964 0.896817 -0.290109 +-0.454678 0.882837 -0.117759 -0.454665 0.882839 -0.117527 +-0.419529 0.905832 -0.058859 -0.419660 0.905759 -0.058931 +-0.490018 0.869725 -0.058828 -0.489883 0.869778 -0.058931 +0.641631 0.653495 0.401565 0.641560 0.653432 0.401715 +0.633113 0.697035 0.336615 0.632832 0.697501 0.336131 +0.592160 0.702308 0.395107 0.591754 0.702811 0.394787 +0.681499 0.646838 0.342286 0.683889 0.644765 0.341380 +0.687975 0.601499 0.406066 0.690329 0.599261 0.405316 +0.670820 0.688190 0.276396 0.673147 0.686453 0.274911 +0.645932 0.605739 0.464599 0.645833 0.605884 0.464522 +0.598211 0.656617 0.459345 0.598376 0.656514 0.459243 +0.600523 0.606822 0.520710 0.598804 0.608631 0.520524 +0.552270 0.656003 0.514450 0.550310 0.657857 0.514145 +0.548172 0.703980 0.451575 0.547624 0.704489 0.451399 +0.501373 0.702043 0.505727 0.498886 0.704123 0.505234 +0.645902 0.554737 0.524478 0.644429 0.556505 0.524369 +0.690210 0.552451 0.467342 0.692526 0.550035 0.466720 +0.688189 0.499997 0.525736 0.688162 0.499985 0.525712 +0.538250 0.749434 0.385533 0.538316 0.749474 0.385357 +0.493055 0.749784 0.441272 0.493820 0.749352 0.441084 +0.481531 0.792648 0.373947 0.482253 0.792322 0.373608 +0.525034 0.790111 0.316328 0.525132 0.789972 0.316416 +0.580894 0.745337 0.327162 0.580706 0.745415 0.327250 +0.565796 0.783451 0.257059 0.565569 0.783349 0.257729 +0.619897 0.737711 0.267413 0.619831 0.737480 0.268075 +0.508795 0.825175 0.245387 0.508408 0.825190 0.246040 +0.466876 0.830358 0.304191 0.467574 0.830134 0.303690 +0.581835 0.803016 0.128972 0.581774 0.803003 0.129124 +0.614360 0.785899 0.070177 0.616321 0.784539 0.067751 +0.637147 0.757935 0.139921 0.639241 0.756554 0.137700 +0.602940 0.772575 0.198974 0.602832 0.772668 0.198859 +0.546351 0.816232 0.187791 0.546495 0.816126 0.187689 +0.656006 0.725298 0.208802 0.658162 0.723869 0.206763 +0.424945 0.830811 0.359408 0.424879 0.830775 0.359539 +0.438150 0.790168 0.428554 0.438032 0.790246 0.428449 +0.380716 0.827108 0.413457 0.380902 0.827052 0.413373 +0.392635 0.783840 0.481073 0.389264 0.786035 0.480178 +0.335314 0.819205 0.465260 0.331614 0.821314 0.464156 +0.448077 0.744724 0.494584 0.444960 0.747032 0.493851 +0.695702 0.704470 0.140431 0.695700 0.704489 0.140172 +0.712722 0.669611 0.208922 0.713095 0.668966 0.209632 +0.749882 0.646576 0.140059 0.750359 0.645863 0.140538 +0.674412 0.735010 0.070198 0.674551 0.734855 0.070315 +0.730792 0.678976 0.070250 0.730613 0.679098 0.070345 +0.707108 0.707106 0.000000 0.706473 0.707694 0.003204 +0.760407 0.649447 0.000000 0.759972 0.649922 0.003204 +0.782052 0.619240 0.070263 0.782647 0.618427 0.070528 +0.809018 0.587783 0.000000 0.808985 0.587756 0.003235 +0.649449 0.760405 0.000000 0.648579 0.761101 0.003204 +0.800989 0.581950 0.140536 0.800958 0.581927 0.140782 +0.830602 0.552416 0.070263 0.830012 0.553209 0.070528 +0.846659 0.513373 0.140059 0.846126 0.514054 0.140538 +0.814409 0.540648 0.210804 0.814295 0.540849 0.210669 +0.765855 0.607476 0.210804 0.766015 0.607288 0.210669 +0.776630 0.564252 0.280118 0.776849 0.564409 0.279153 +0.726141 0.628311 0.279186 0.726188 0.628651 0.278207 +0.821951 0.496439 0.279186 0.822291 0.496353 0.278207 +0.857083 0.470914 0.208923 0.856594 0.471450 0.209632 +0.861804 0.425322 0.276396 0.860897 0.428083 0.274911 +0.738819 0.536781 0.407446 0.738884 0.536821 0.407208 +0.738701 0.485709 0.467342 0.737114 0.488632 0.466720 +0.784657 0.468427 0.406066 0.783258 0.471358 0.405316 +0.734612 0.584714 0.344174 0.734703 0.584521 0.344279 +0.783105 0.517968 0.344174 0.782952 0.518113 0.344279 +0.825776 0.448256 0.342286 0.824549 0.451155 0.341380 +0.884977 0.443954 0.140431 0.885006 0.443953 0.140172 +0.892518 0.399765 0.208802 0.891842 0.402264 0.206763 +0.917730 0.371744 0.139921 0.917081 0.374126 0.137700 +0.871574 0.485205 0.070250 0.871670 0.485000 0.070345 +0.907443 0.414269 0.070198 0.907315 0.414441 0.070315 +0.891008 0.453987 0.000000 0.891385 0.453200 0.003204 +0.923881 0.382680 0.000000 0.924284 0.381634 0.003204 +0.937283 0.341431 0.070177 0.936613 0.343699 0.067751 +0.852642 0.522496 0.000000 0.852962 0.521928 0.003204 +0.921465 0.147412 0.359406 0.921384 0.147343 0.359539 +0.933991 0.187430 0.304189 0.933988 0.188147 0.303690 +0.902655 0.213021 0.373945 0.902585 0.213813 0.373608 +0.904276 0.106493 0.413454 0.904263 0.106693 0.413373 +0.886892 0.172530 0.428551 0.886929 0.172369 0.428449 +0.866809 0.131200 0.481070 0.867855 0.127293 0.480178 +0.846740 0.196014 0.494581 0.847987 0.192328 0.493851 +0.865450 0.237227 0.441270 0.865291 0.238075 0.441084 +0.822618 0.259890 0.505724 0.823847 0.256874 0.505234 +0.882730 0.065757 0.465256 0.883572 0.061617 0.464187 +0.879083 0.280317 0.385532 0.879116 0.280343 0.385357 +0.838921 0.303799 0.451573 0.839229 0.303110 0.451399 +0.850924 0.346151 0.395106 0.851283 0.345592 0.394787 +0.888365 0.322138 0.327161 0.888394 0.321909 0.327250 +0.913686 0.255177 0.316327 0.913602 0.255318 0.316416 +0.919948 0.296002 0.257058 0.919797 0.295816 0.257729 +0.942015 0.228897 0.245385 0.941923 0.228523 0.246040 +0.893165 0.361589 0.267412 0.892941 0.361583 0.268075 +0.858564 0.386727 0.336614 0.858913 0.386303 0.336131 +0.943511 0.305209 0.128971 0.943480 0.305155 0.129124 +0.945116 0.267378 0.187791 0.945067 0.267556 0.187689 +0.921083 0.334688 0.198974 0.921140 0.334544 0.198859 +0.819787 0.408283 0.401564 0.819727 0.408216 0.401715 +0.809339 0.366025 0.459343 0.809290 0.366192 0.459243 +0.775698 0.427132 0.464598 0.775780 0.426984 0.464522 +0.762696 0.383611 0.520709 0.763909 0.381420 0.520524 +0.727183 0.442864 0.524478 0.728416 0.440901 0.524369 +0.794558 0.322523 0.514448 0.795709 0.320078 0.514145 +0.886763 0.446973 -0.117758 0.886776 0.446974 -0.117527 +0.861656 0.476221 -0.175393 0.861324 0.476577 -0.175970 +0.848429 0.516118 -0.117431 0.848079 0.516587 -0.117832 +0.907646 0.415593 -0.058828 0.907559 0.415723 -0.058931 +0.871842 0.486237 -0.058859 0.871883 0.486099 -0.058931 +0.830854 0.553369 -0.058866 0.830439 0.553911 -0.059084 +0.803384 0.583689 -0.117819 0.803339 0.583667 -0.118015 +0.783037 0.619184 -0.058866 0.783441 0.618610 -0.059084 +0.753041 0.647410 -0.117431 0.753380 0.646931 -0.117832 +0.771665 0.610923 -0.176934 0.771752 0.610797 -0.176824 +0.819484 0.545105 -0.176934 0.819391 0.545244 -0.176824 +0.786262 0.571248 -0.235515 0.786401 0.571368 -0.234657 +0.831066 0.504205 -0.234749 0.831324 0.504166 -0.233894 +0.736346 0.634577 -0.234749 0.736381 0.634816 -0.233894 +0.719184 0.672318 -0.175393 0.719413 0.671896 -0.175970 +0.759570 0.551855 -0.344252 0.759606 0.551897 -0.344035 +0.797438 0.529130 -0.290023 0.797327 0.529221 -0.290109 +0.749660 0.594892 -0.290023 0.749718 0.594745 -0.290109 +0.699126 0.705235 -0.117759 0.699118 0.705252 -0.117527 +0.731857 0.678912 -0.058859 0.731742 0.679006 -0.058931 +0.675735 0.734793 -0.058828 0.675832 0.734672 -0.058931 +0.325685 -0.571136 0.753481 0.325510 -0.571184 0.753471 +0.341150 -0.620235 0.706346 0.341533 -0.620563 0.705832 +0.395193 -0.574454 0.716816 0.395703 -0.574633 0.716361 +0.379090 -0.524106 0.762629 0.379376 -0.521317 0.764367 +0.308633 -0.519254 0.796945 0.308695 -0.516434 0.798730 +0.447211 -0.525727 0.723612 0.448103 -0.522935 0.725059 +0.253559 -0.564508 0.785518 0.253639 -0.564592 0.785394 +0.270001 -0.615452 0.740486 0.270058 -0.615284 0.740593 +0.197165 -0.606821 0.769997 0.197729 -0.608631 0.768395 +0.213144 -0.656001 0.724039 0.213721 -0.657857 0.722160 +0.228103 -0.702042 0.674615 0.228767 -0.704123 0.672170 +0.285358 -0.662838 0.692255 0.285562 -0.663289 0.691702 +0.180241 -0.554735 0.812269 0.180792 -0.556505 0.810907 +0.236273 -0.511201 0.826347 0.236122 -0.508316 0.828150 +0.162456 -0.499995 0.850654 0.162450 -0.499985 0.850642 +0.356273 -0.667499 0.653847 0.356426 -0.667409 0.653829 +0.299795 -0.708965 0.638351 0.299936 -0.708335 0.638936 +0.369536 -0.711278 0.597935 0.369854 -0.710654 0.598437 +0.425478 -0.667499 0.611076 0.425367 -0.667409 0.611194 +0.411531 -0.622288 0.665883 0.411451 -0.622456 0.665761 +0.479198 -0.620236 0.621028 0.478561 -0.620563 0.621143 +0.464395 -0.574454 0.674048 0.463729 -0.574633 0.674306 +0.491546 -0.662839 0.564825 0.490921 -0.663289 0.564776 +0.436875 -0.708966 0.553631 0.437330 -0.708335 0.554033 +0.589185 -0.564509 0.578092 0.589038 -0.564592 0.578112 +0.633436 -0.511202 0.580889 0.635090 -0.508316 0.581561 +0.574776 -0.519255 0.632461 0.576312 -0.516434 0.633320 +0.528274 -0.571137 0.628275 0.528336 -0.571184 0.628132 +0.541553 -0.615452 0.572659 0.541612 -0.615284 0.572741 +0.512574 -0.524107 0.680133 0.513993 -0.521317 0.681173 +0.382016 -0.749384 0.540821 0.381848 -0.749443 0.540819 +0.312870 -0.749384 0.583555 0.312937 -0.749443 0.583392 +0.324727 -0.786430 0.525433 0.324809 -0.786279 0.525559 +0.254681 -0.783840 0.566333 0.255379 -0.786035 0.562914 +0.266171 -0.819205 0.507992 0.266854 -0.821314 0.504196 +0.241971 -0.744723 0.621962 0.242714 -0.747032 0.618854 +0.564166 -0.460878 0.685060 0.564348 -0.460738 0.684957 +0.550009 -0.399604 0.733353 0.549394 -0.399152 0.734031 +0.500274 -0.464210 0.730914 0.499496 -0.463973 0.731559 +0.625236 -0.454259 0.634610 0.625080 -0.454146 0.634785 +0.612660 -0.394133 0.685060 0.612598 -0.394330 0.684957 +0.671459 -0.386185 0.632459 0.669240 -0.388531 0.633320 +0.656851 -0.325528 0.680131 0.654653 -0.327708 0.681173 +0.638195 -0.262864 0.723609 0.635823 -0.264565 0.725059 +0.596085 -0.332340 0.730913 0.595630 -0.331675 0.731559 +0.681926 -0.444461 0.580888 0.679708 -0.446944 0.581561 +0.530169 -0.334137 0.779277 0.529954 -0.334239 0.779351 +0.574373 -0.265516 0.774337 0.574419 -0.266457 0.773949 +0.506729 -0.266402 0.819912 0.506577 -0.267342 0.819666 +0.459901 -0.334137 0.822705 0.460067 -0.334239 0.822535 +0.481615 -0.400965 0.779278 0.481643 -0.400708 0.779351 +0.409951 -0.399604 0.819913 0.410810 -0.399152 0.819666 +0.430012 -0.464210 0.774338 0.430921 -0.463973 0.773949 +0.387164 -0.332339 0.860032 0.387951 -0.331675 0.859920 +0.435714 -0.265516 0.860032 0.435316 -0.266457 0.859920 +0.361800 -0.262863 0.894429 0.364147 -0.264565 0.892941 +0.287990 -0.454258 0.843037 0.288217 -0.454146 0.842982 +0.265395 -0.386184 0.883418 0.267159 -0.388531 0.881832 +0.214587 -0.444460 0.869717 0.216163 -0.446944 0.868038 +0.360425 -0.460878 0.810978 0.360240 -0.460738 0.811090 +0.338738 -0.394133 0.854351 0.338664 -0.394330 0.854244 +0.314568 -0.325527 0.891672 0.316477 -0.327708 0.890164 +0.479520 -0.200366 0.854350 0.479690 -0.200232 0.854244 +0.449297 -0.133070 0.883417 0.452071 -0.134007 0.881832 +0.406802 -0.198579 0.891672 0.409467 -0.199713 0.890164 +0.549701 -0.200366 0.810976 0.549516 -0.200232 0.811090 +0.521021 -0.133522 0.843035 0.520981 -0.133763 0.842982 +0.589216 -0.133070 0.796942 0.586566 -0.134007 0.798730 +0.559197 -0.066741 0.826344 0.556413 -0.067476 0.828150 +0.525730 0.000000 0.850652 0.525712 0.000000 0.850642 +0.489021 -0.066741 0.869715 0.491867 -0.067476 0.868038 +0.615603 -0.198579 0.762627 0.613056 -0.199713 0.764367 +0.159969 -0.065988 0.984914 0.159795 -0.066042 0.984924 +0.181207 -0.131654 0.974593 0.181860 -0.132145 0.974395 +0.227977 -0.066042 0.971424 0.228736 -0.066378 0.971191 +0.206102 0.000000 0.978531 0.202246 0.000000 0.979308 +0.137952 0.000000 0.990439 0.133854 0.000000 0.990997 +0.273266 0.000000 0.961939 0.270089 0.000000 0.962798 +0.090588 -0.065816 0.993711 0.090762 -0.065920 0.993683 +0.112191 -0.131747 0.984914 0.112186 -0.131565 0.984924 +0.042628 -0.131199 0.990439 0.041353 -0.127293 0.990997 +0.063687 -0.196013 0.978531 0.062471 -0.192328 0.979308 +0.084442 -0.259889 0.961939 0.083468 -0.256874 0.962798 +0.133257 -0.196410 0.971424 0.133824 -0.197028 0.971191 +0.021365 -0.065757 0.997607 0.020020 -0.061617 0.997894 +0.069141 0.000000 0.997607 0.064791 0.000000 0.997894 +0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 +0.203850 -0.198385 0.958691 0.204016 -0.198309 0.958647 +0.155334 -0.262658 0.952304 0.155156 -0.261940 0.952513 +0.225429 -0.264080 0.937786 0.225471 -0.263375 0.937956 +0.274027 -0.199092 0.940889 0.273843 -0.198950 0.940947 +0.251669 -0.132568 0.958691 0.251656 -0.132756 0.958647 +0.320818 -0.132791 0.937786 0.320170 -0.133030 0.937956 +0.297805 -0.066566 0.952303 0.297067 -0.066622 0.952513 +0.342186 -0.198335 0.918462 0.341594 -0.198767 0.918546 +0.294369 -0.264149 0.918462 0.294595 -0.263466 0.918546 +0.427439 -0.066709 0.901579 0.427259 -0.066775 0.901639 +0.465656 0.000000 0.884966 0.463607 0.000000 0.886013 +0.403354 0.000000 0.915044 0.401044 0.000000 0.916044 +0.363221 -0.066604 0.929319 0.363353 -0.066713 0.929228 +0.385997 -0.133255 0.912825 0.385998 -0.133061 0.912839 +0.339122 0.000000 0.940743 0.336558 0.000000 0.941649 +0.246012 -0.325926 0.912826 0.245827 -0.325968 0.912839 +0.175583 -0.324860 0.929320 0.175726 -0.324961 0.929228 +0.195527 -0.385902 0.901581 0.195532 -0.385723 0.901639 +0.124640 -0.383610 0.915045 0.123905 -0.381420 0.916044 +0.143892 -0.442862 0.884968 0.143254 -0.440901 0.886013 +0.104792 -0.322521 0.940744 0.103977 -0.320078 0.941649 +0.668768 -0.066604 0.740482 0.668630 -0.066713 0.740593 +0.695304 -0.132792 0.706342 0.695730 -0.133030 0.705832 +0.718580 -0.066566 0.692251 0.719077 -0.066622 0.691671 +0.689764 0.000000 0.724034 0.691702 0.000000 0.722160 +0.638052 0.000000 0.769993 0.639943 0.000000 0.768395 +0.738174 0.000000 0.674610 0.740349 0.000000 0.672170 +0.615237 -0.066709 0.785514 0.615345 -0.066775 0.785394 +0.643828 -0.133255 0.753477 0.643818 -0.133061 0.753471 +0.668462 -0.198336 0.716813 0.668813 -0.198767 0.716330 +0.583287 0.000000 0.812266 0.585131 0.000000 0.810907 +0.719004 -0.199093 0.665880 0.719138 -0.198950 0.665731 +0.689847 -0.264149 0.674045 0.689810 -0.263466 0.674306 +0.737962 -0.264081 0.621026 0.738090 -0.263375 0.621143 +0.766311 -0.198385 0.611073 0.766198 -0.198309 0.611194 +0.744926 -0.132569 0.653843 0.744896 -0.132756 0.653798 +0.790662 -0.131655 0.597931 0.790155 -0.132145 0.598437 +0.766911 -0.066042 0.638346 0.766350 -0.066378 0.638936 +0.809271 -0.196411 0.553628 0.808802 -0.197028 0.554033 +0.782295 -0.262659 0.564823 0.782556 -0.261940 0.564776 +0.848288 -0.065817 0.525429 0.848170 -0.065920 0.525559 +0.861364 0.000000 0.507987 0.863552 0.000000 0.504227 +0.824180 0.000000 0.566328 0.826502 0.000000 0.562914 +0.809392 -0.065988 0.583550 0.809473 -0.066042 0.583392 +0.830758 -0.131748 0.540817 0.830775 -0.131565 0.540819 +0.783051 0.000000 0.621958 0.785485 0.000000 0.618854 +0.752681 -0.324861 0.572657 0.752525 -0.324961 0.572741 +0.706431 -0.325927 0.628273 0.706504 -0.325968 0.628132 +0.718950 -0.385904 0.578090 0.718986 -0.385723 0.578112 +-0.442542 -0.486234 0.753480 -0.442640 -0.486099 0.753471 +-0.484459 -0.516115 0.706346 -0.484664 -0.516587 0.705832 +-0.424219 -0.553366 0.716816 -0.424238 -0.553911 0.716361 +-0.381312 -0.522493 0.762629 -0.378582 -0.521928 0.764367 +-0.398469 -0.453985 0.796945 -0.395734 -0.453200 0.798730 +-0.361803 -0.587779 0.723612 -0.358867 -0.587756 0.725059 +-0.458526 -0.415591 0.785517 -0.458571 -0.415723 0.785394 +-0.501895 -0.446971 0.740485 -0.501694 -0.446974 0.740593 +-0.516194 -0.375032 0.769996 -0.517747 -0.376141 0.768395 +-0.558030 -0.405427 0.724038 -0.559587 -0.406568 0.722160 +-0.597194 -0.433882 0.674615 -0.598956 -0.435163 0.672170 +-0.542217 -0.476219 0.692255 -0.542589 -0.476577 0.691702 +-0.471888 -0.342842 0.812269 -0.473373 -0.343913 0.810907 +-0.413169 -0.382678 0.826347 -0.410474 -0.381634 0.828150 +-0.425323 -0.309011 0.850654 -0.425306 -0.309000 0.850642 +-0.524736 -0.545103 0.653846 -0.524583 -0.545244 0.653829 +-0.581625 -0.504203 0.638350 -0.580981 -0.504166 0.638936 +-0.562274 -0.571246 0.597935 -0.561571 -0.571337 0.598437 +-0.503352 -0.610920 0.611076 -0.503281 -0.610797 0.611194 +-0.464663 -0.583685 0.665883 -0.464827 -0.583667 0.665761 +-0.441802 -0.647406 0.621028 -0.442305 -0.646931 0.621143 +-0.402835 -0.619180 0.674048 -0.403211 -0.618610 0.674306 +-0.478504 -0.672314 0.564826 -0.479110 -0.671865 0.564776 +-0.539267 -0.634574 0.553631 -0.538530 -0.634816 0.554033 +-0.354817 -0.734789 0.578092 -0.354930 -0.734672 0.578112 +-0.290444 -0.760400 0.580890 -0.287179 -0.761101 0.581561 +-0.316229 -0.707101 0.632461 -0.313059 -0.707694 0.633320 +-0.379941 -0.678907 0.628275 -0.379955 -0.679006 0.628132 +-0.417985 -0.705231 0.572659 -0.417798 -0.705222 0.572741 +-0.340065 -0.649442 0.680133 -0.336985 -0.649922 0.681173 +-0.594659 -0.594890 0.540821 -0.594745 -0.594745 0.540819 +-0.616025 -0.529129 0.583555 -0.616047 -0.529221 0.583392 +-0.647594 -0.551853 0.525433 -0.647420 -0.551897 0.525559 +-0.666776 -0.484435 0.566333 -0.668630 -0.485794 0.562914 +-0.696859 -0.506292 0.507992 -0.698630 -0.507584 0.504196 +-0.633501 -0.460260 0.621962 -0.635456 -0.461684 0.618854 +-0.263989 -0.678971 0.685061 -0.263802 -0.679098 0.684957 +-0.210088 -0.646572 0.733354 -0.209845 -0.645863 0.734031 +-0.286900 -0.619235 0.730914 -0.286905 -0.618427 0.731559 +-0.238822 -0.735005 0.634611 -0.238746 -0.734825 0.634785 +-0.185526 -0.704465 0.685061 -0.185736 -0.704489 0.684957 +-0.159797 -0.757930 0.632461 -0.162694 -0.756554 0.633320 +-0.106622 -0.725293 0.680133 -0.109378 -0.723869 0.681173 +-0.052790 -0.688185 0.723612 -0.055116 -0.686453 0.725059 +-0.131878 -0.669606 0.730914 -0.131382 -0.668966 0.731559 +-0.211986 -0.785893 0.580890 -0.215003 -0.784539 0.581561 +-0.153956 -0.607472 0.779279 -0.154118 -0.607288 0.779351 +-0.075035 -0.628307 0.774338 -0.075900 -0.628651 0.773949 +-0.096779 -0.564248 0.819913 -0.097720 -0.564409 0.819666 +-0.175669 -0.540644 0.822706 -0.175726 -0.540849 0.822535 +-0.232516 -0.581946 0.779279 -0.232246 -0.581896 0.779351 +-0.253366 -0.513369 0.819913 -0.252663 -0.514054 0.819666 +-0.308612 -0.552412 0.774338 -0.308084 -0.553209 0.773949 +-0.196435 -0.470911 0.860033 -0.195563 -0.471450 0.859920 +-0.117881 -0.496435 0.860033 -0.118900 -0.496353 0.859920 +-0.138197 -0.425319 0.894430 -0.139073 -0.428083 0.892941 +-0.343033 -0.414267 0.843037 -0.342845 -0.414441 0.842982 +-0.285272 -0.371742 0.883418 -0.286966 -0.374126 0.881832 +-0.356396 -0.341429 0.869717 -0.358257 -0.343699 0.868038 +-0.326945 -0.485202 0.810978 -0.326884 -0.485000 0.811090 +-0.270168 -0.443951 0.854351 -0.270394 -0.443953 0.854244 +-0.212389 -0.399763 0.891673 -0.213874 -0.402264 0.890164 +-0.042383 -0.517965 0.854351 -0.042207 -0.518082 0.854244 +0.012280 -0.468424 0.883418 0.012207 -0.471358 0.881832 +-0.063153 -0.448254 0.891673 -0.063387 -0.451155 0.890164 +-0.020697 -0.584710 0.810978 -0.020600 -0.584521 0.811090 +0.034013 -0.536778 0.843037 0.033753 -0.536821 0.842982 +0.055516 -0.601496 0.796945 0.053774 -0.599261 0.798730 +0.109323 -0.552448 0.826347 0.107730 -0.550035 0.828150 +0.087638 -0.485707 0.869717 0.087771 -0.488632 0.868038 +0.001367 -0.646834 0.762629 -0.000488 -0.644765 0.764367 +-0.013326 -0.172530 0.984914 -0.013428 -0.172369 0.984924 +-0.069216 -0.213020 0.974593 -0.069460 -0.213813 0.974395 +0.007638 -0.237226 0.971425 0.007538 -0.238075 0.971191 +-0.034602 -0.106493 0.993711 -0.034669 -0.106693 0.993683 +-0.090631 -0.147411 0.984914 -0.090457 -0.147343 0.984924 +-0.111605 -0.081085 0.990439 -0.108280 -0.078677 0.990997 +-0.166739 -0.121142 0.978531 -0.163610 -0.118870 0.979308 +-0.221076 -0.160619 0.961939 -0.218513 -0.158757 0.962798 +-0.145619 -0.187429 0.971424 -0.146031 -0.188147 0.971191 +-0.055936 -0.040640 0.997607 -0.052431 -0.038087 0.997894 +-0.125683 -0.255176 0.958691 -0.125553 -0.255318 0.958647 +-0.201802 -0.228896 0.952304 -0.201147 -0.228523 0.952513 +-0.181495 -0.296000 0.937787 -0.180822 -0.295816 0.937956 +-0.104670 -0.322136 0.940889 -0.104587 -0.321909 0.940947 +-0.048312 -0.280316 0.958691 -0.048463 -0.280343 0.958647 +-0.027156 -0.346149 0.937787 -0.027589 -0.345592 0.937956 +0.028717 -0.303798 0.952304 0.028413 -0.303110 0.952513 +-0.082889 -0.386725 0.918462 -0.083468 -0.386303 0.918577 +-0.160257 -0.361586 0.918462 -0.159520 -0.361583 0.918577 +0.068639 -0.427130 0.901581 0.068514 -0.426984 0.901639 +0.048895 -0.366023 0.929320 0.048830 -0.366192 0.929228 +-0.007456 -0.408281 0.912826 -0.007263 -0.408216 0.912839 +-0.233953 -0.334686 0.912826 -0.234046 -0.334544 0.912839 +-0.254703 -0.267377 0.929320 -0.254738 -0.267556 0.929228 +-0.306594 -0.305207 0.901581 -0.306406 -0.305155 0.901639 +-0.326319 -0.237082 0.915045 -0.324442 -0.235725 0.916044 +-0.376722 -0.273702 0.884968 -0.375072 -0.272500 0.886013 +-0.274354 -0.199327 0.940744 -0.272286 -0.197821 0.941649 +0.143312 -0.656615 0.740485 0.143132 -0.656514 0.740593 +0.088563 -0.702305 0.706346 0.088443 -0.702811 0.705832 +0.158740 -0.703978 0.692255 0.158818 -0.704489 0.691702 +0.126670 -0.605736 0.785518 0.126621 -0.605853 0.785394 +0.072216 -0.653492 0.753481 0.072359 -0.653432 0.753471 +0.017932 -0.697032 0.716816 0.017609 -0.697501 0.716361 +0.032830 -0.745333 0.665883 0.032991 -0.745415 0.665761 +-0.038052 -0.737707 0.674048 -0.037416 -0.737480 0.674306 +-0.023119 -0.783447 0.621029 -0.022401 -0.783349 0.621143 +0.048122 -0.790108 0.611076 0.048128 -0.789972 0.611194 +0.104109 -0.749431 0.653847 0.103916 -0.749443 0.653829 +0.119111 -0.792645 0.597935 0.118473 -0.792322 0.598437 +0.174174 -0.749781 0.638351 0.173650 -0.749352 0.638936 +0.063274 -0.830355 0.553631 0.062502 -0.830103 0.554033 +-0.008067 -0.825171 0.564826 -0.007294 -0.825190 0.564776 +0.199534 -0.827107 0.525433 0.199377 -0.827021 0.525559 +0.187352 -0.790166 0.583555 0.187323 -0.790246 0.583392 +0.131412 -0.830809 0.540821 0.131565 -0.830744 0.540819 +-0.076377 -0.816228 0.572660 -0.076510 -0.816126 0.572741 +-0.091681 -0.772570 0.628275 -0.091708 -0.772668 0.628132 +-0.144854 -0.803011 0.578093 -0.144658 -0.803003 0.578112 +-0.599192 0.270622 0.753480 -0.599078 0.270760 0.753471 +-0.640564 0.301254 0.706345 -0.641072 0.301279 0.705832 +-0.657376 0.232451 0.716815 -0.657918 0.232276 0.716361 +-0.614754 0.201185 0.762628 -0.613361 0.198767 0.764367 +-0.554901 0.238672 0.796944 -0.553301 0.236335 0.798730 +-0.670817 0.162457 0.723611 -0.669912 0.159673 0.725059 +-0.536947 0.307654 0.785517 -0.537065 0.307657 0.785394 +-0.580192 0.339203 0.740485 -0.580126 0.339030 0.740593 +-0.516194 0.375032 0.769996 -0.517747 0.376141 0.768395 +-0.558030 0.405427 0.724038 -0.559587 0.406568 0.722160 +-0.597194 0.433882 0.674615 -0.598956 0.435163 0.672170 +-0.620470 0.368513 0.692254 -0.620930 0.368755 0.691702 +-0.471888 0.342842 0.812269 -0.473373 0.343913 0.810907 +-0.491628 0.274689 0.826346 -0.489822 0.272439 0.828150 +-0.425323 0.309011 0.850654 -0.425306 0.309000 0.850642 +-0.680580 0.330601 0.653846 -0.680654 0.330424 0.653798 +-0.659262 0.397344 0.638350 -0.659017 0.396741 0.638936 +-0.717043 0.358223 0.597934 -0.716941 0.357524 0.598437 +-0.736567 0.289925 0.611075 -0.736442 0.289895 0.611194 +-0.698710 0.261546 0.665882 -0.698752 0.261727 0.665761 +-0.752247 0.220113 0.621027 -0.751946 0.220740 0.621143 +-0.713360 0.191776 0.674047 -0.712943 0.192297 0.674306 +-0.787277 0.247321 0.564824 -0.787072 0.248054 0.564776 +-0.770162 0.316772 0.553630 -0.770165 0.315989 0.554033 +-0.808472 0.110383 0.578091 -0.808405 0.110538 0.578112 +-0.812937 0.041248 0.580889 -0.812586 0.037935 0.581561 +-0.770215 0.082241 0.632460 -0.769799 0.079043 0.633320 +-0.763090 0.151546 0.628274 -0.763176 0.151524 0.628132 +-0.799881 0.179593 0.572658 -0.799829 0.179388 0.572741 +-0.722744 0.122727 0.680132 -0.722251 0.119633 0.681173 +-0.749538 0.381716 0.540820 -0.749443 0.381848 0.540819 +-0.693598 0.422358 0.583554 -0.693686 0.422346 0.583392 +-0.724966 0.445359 0.525433 -0.724937 0.445174 0.525559 +-0.666776 0.484435 0.566333 -0.668630 0.485794 0.562914 +-0.696859 0.506292 0.507992 -0.698630 0.507584 0.504196 +-0.633501 0.460260 0.621962 -0.635456 0.461684 0.618854 +-0.727318 0.041250 0.685060 -0.727409 0.041017 0.684957 +-0.679848 0.000000 0.733353 -0.679098 0.000000 0.734031 +-0.677587 0.081500 0.730913 -0.676809 0.081759 0.731559 +-0.772833 0.000000 0.634610 -0.772668 0.000000 0.634785 +-0.727318 -0.041250 0.685060 -0.727409 -0.041017 0.684957 +-0.770215 -0.082241 0.632460 -0.769799 -0.079043 0.633320 +-0.722744 -0.122727 0.680132 -0.722251 -0.119633 0.681173 +-0.670817 -0.162457 0.723611 -0.669912 -0.159673 0.725059 +-0.677587 -0.081500 0.730913 -0.676809 -0.081759 0.731559 +-0.812937 -0.041248 0.580889 -0.812586 -0.037935 0.581561 +-0.625317 -0.041301 0.779278 -0.625202 -0.041047 0.779351 +-0.620743 -0.122798 0.774337 -0.621357 -0.122044 0.773949 +-0.566540 -0.082322 0.819912 -0.566973 -0.081454 0.819666 +-0.568469 0.000000 0.822705 -0.568682 0.000000 0.822535 +-0.625317 0.041301 0.779278 -0.625202 0.041047 0.779351 +-0.566540 0.082322 0.819912 -0.566973 0.081454 0.819666 +-0.620743 0.122798 0.774337 -0.621357 0.122044 0.773949 +-0.508567 0.041298 0.860032 -0.508805 0.040284 0.859920 +-0.508567 -0.041298 0.860032 -0.508805 -0.040284 0.859920 +-0.447210 0.000000 0.894429 -0.450087 0.000000 0.892941 +-0.499997 0.198224 0.843037 -0.500107 0.198004 0.842982 +-0.441704 0.156432 0.883418 -0.444502 0.157292 0.881832 +-0.434854 0.233441 0.869717 -0.437605 0.234504 0.868038 +-0.562489 0.161003 0.810977 -0.562273 0.160985 0.811090 +-0.505712 0.119753 0.854351 -0.505783 0.119938 0.854244 +-0.445831 0.078458 0.891672 -0.448653 0.079104 0.890164 +-0.505712 -0.119753 0.854351 -0.505783 -0.119938 0.854244 +-0.441704 -0.156432 0.883418 -0.444502 -0.157292 0.881832 +-0.445831 -0.078458 0.891672 -0.448653 -0.079104 0.890164 +-0.562489 -0.161003 0.810977 -0.562273 -0.160985 0.811090 +-0.499997 -0.198224 0.843037 -0.500107 -0.198004 0.842982 +-0.554901 -0.238672 0.796944 -0.553301 -0.236335 0.798730 +-0.491628 -0.274689 0.826346 -0.489822 -0.272439 0.828150 +-0.434854 -0.233441 0.869717 -0.437605 -0.234504 0.868038 +-0.614754 -0.201185 0.762628 -0.613361 -0.198767 0.764367 +-0.168204 -0.040641 0.984914 -0.168096 -0.040498 0.984924 +-0.223984 0.000000 0.974593 -0.224799 0.000000 0.974395 +-0.223256 -0.080571 0.971424 -0.224067 -0.080752 0.971191 +-0.111974 0.000000 0.993711 -0.112186 0.000000 0.993683 +-0.168204 0.040641 0.984914 -0.168096 0.040498 0.984924 +-0.111605 0.081085 0.990439 -0.108280 0.078677 0.990997 +-0.166739 0.121142 0.978531 -0.163610 0.118870 0.979308 +-0.221076 0.160619 0.961939 -0.218513 0.158757 0.962798 +-0.223256 0.080571 0.971424 -0.224067 0.080752 0.971191 +-0.055936 0.040640 0.997607 -0.052431 0.038087 0.997894 +-0.281526 0.040676 0.958691 -0.281625 0.040498 0.958647 +-0.280055 0.121190 0.952304 -0.279489 0.120701 0.952513 +-0.337599 0.081140 0.937786 -0.337230 0.080538 0.937956 +-0.338716 0.000000 0.940889 -0.338481 0.000000 0.940947 +-0.281526 -0.040676 0.958691 -0.281625 -0.040498 0.958647 +-0.337599 -0.081140 0.937786 -0.337230 -0.080538 0.937956 +-0.280055 -0.121190 0.952304 -0.279489 -0.120701 0.952513 +-0.393413 -0.040674 0.918462 -0.393200 -0.039979 0.918546 +-0.393413 0.040674 0.918462 -0.393200 0.039979 0.918546 +-0.385015 -0.197271 0.901581 -0.384930 -0.197119 0.901639 +-0.333000 -0.159610 0.929320 -0.333171 -0.159612 0.929228 +-0.390603 -0.119076 0.912825 -0.390484 -0.119205 0.912839 +-0.390603 0.119076 0.912825 -0.390484 0.119205 0.912839 +-0.333000 0.159610 0.929320 -0.333171 0.159612 0.929228 +-0.385015 0.197271 0.901581 -0.384930 0.197119 0.901639 +-0.326319 0.237082 0.915045 -0.324442 0.235725 0.916044 +-0.376722 0.273702 0.884968 -0.375072 0.272500 0.886013 +-0.274354 0.199327 0.940744 -0.272286 0.197821 0.941649 +-0.580192 -0.339203 0.740485 -0.580126 -0.339030 0.740593 +-0.640564 -0.301254 0.706345 -0.641072 -0.301279 0.705832 +-0.620470 -0.368513 0.692254 -0.620930 -0.368755 0.691702 +-0.536947 -0.307654 0.785517 -0.537065 -0.307657 0.785394 +-0.599192 -0.270622 0.753480 -0.599078 -0.270760 0.753471 +-0.657376 -0.232451 0.716815 -0.657918 -0.232276 0.716361 +-0.698710 -0.261546 0.665882 -0.698752 -0.261727 0.665761 +-0.713360 -0.191776 0.674047 -0.712943 -0.192297 0.674306 +-0.752247 -0.220113 0.621027 -0.751946 -0.220740 0.621143 +-0.736567 -0.289925 0.611075 -0.736442 -0.289895 0.611194 +-0.680580 -0.330601 0.653846 -0.680654 -0.330424 0.653798 +-0.717043 -0.358223 0.597934 -0.716941 -0.357524 0.598437 +-0.659262 -0.397344 0.638350 -0.659017 -0.396741 0.638936 +-0.770162 -0.316772 0.553630 -0.770165 -0.315989 0.554033 +-0.787277 -0.247321 0.564824 -0.787072 -0.248054 0.564776 +-0.724966 -0.445359 0.525433 -0.724937 -0.445174 0.525559 +-0.693598 -0.422358 0.583554 -0.693686 -0.422346 0.583392 +-0.749538 -0.381716 0.540820 -0.749443 -0.381848 0.540819 +-0.799881 -0.179593 0.572658 -0.799829 -0.179388 0.572741 +-0.763090 -0.151546 0.628274 -0.763176 -0.151524 0.628132 +-0.808472 -0.110383 0.578091 -0.808405 -0.110538 0.578112 +0.072216 0.653492 0.753481 0.072359 0.653432 0.753471 +0.088563 0.702305 0.706346 0.088443 0.702811 0.705832 +0.017932 0.697032 0.716816 0.017609 0.697501 0.716361 +0.001367 0.646834 0.762629 -0.000488 0.644765 0.764367 +0.055516 0.601496 0.796945 0.053774 0.599261 0.798730 +-0.052790 0.688185 0.723612 -0.055116 0.686453 0.725059 +0.126670 0.605736 0.785518 0.126621 0.605853 0.785394 +0.143312 0.656615 0.740485 0.143132 0.656514 0.740593 +0.197165 0.606821 0.769997 0.197729 0.608631 0.768395 +0.213144 0.656001 0.724039 0.213721 0.657857 0.722160 +0.228103 0.702042 0.674615 0.228767 0.704123 0.672170 +0.158740 0.703978 0.692255 0.158818 0.704489 0.691702 +0.180241 0.554735 0.812269 0.180792 0.556505 0.810907 +0.109323 0.552448 0.826347 0.107730 0.550035 0.828150 +0.162456 0.499995 0.850654 0.162450 0.499985 0.850642 +0.104109 0.749431 0.653847 0.103916 0.749443 0.653829 +0.174174 0.749781 0.638351 0.173650 0.749352 0.638936 +0.119111 0.792645 0.597935 0.118473 0.792322 0.598437 +0.048122 0.790108 0.611076 0.048128 0.789972 0.611194 +0.032830 0.745333 0.665883 0.032991 0.745415 0.665761 +-0.023119 0.783447 0.621029 -0.022401 0.783349 0.621143 +-0.038052 0.737707 0.674048 -0.037416 0.737480 0.674306 +-0.008067 0.825171 0.564826 -0.007294 0.825190 0.564776 +0.063274 0.830355 0.553631 0.062502 0.830103 0.554033 +-0.144854 0.803011 0.578093 -0.144658 0.803003 0.578112 +-0.211986 0.785893 0.580890 -0.215003 0.784539 0.581561 +-0.159797 0.757930 0.632461 -0.162694 0.756554 0.633320 +-0.091681 0.772570 0.628275 -0.091708 0.772668 0.628132 +-0.076377 0.816228 0.572660 -0.076510 0.816126 0.572741 +-0.106622 0.725293 0.680133 -0.109378 0.723869 0.681173 +0.131412 0.830809 0.540821 0.131565 0.830744 0.540819 +0.187352 0.790166 0.583555 0.187323 0.790246 0.583392 +0.199534 0.827107 0.525433 0.199377 0.827021 0.525559 +0.254681 0.783840 0.566333 0.255379 0.786035 0.562914 +0.266171 0.819205 0.507992 0.266854 0.821314 0.504196 +0.241971 0.744723 0.621962 0.242714 0.747032 0.618854 +-0.185526 0.704465 0.685061 -0.185736 0.704489 0.684957 +-0.210088 0.646572 0.733354 -0.209845 0.645863 0.734031 +-0.131878 0.669606 0.730914 -0.131382 0.668966 0.731559 +-0.238822 0.735005 0.634611 -0.238746 0.734825 0.634785 +-0.263989 0.678971 0.685061 -0.263802 0.679098 0.684957 +-0.316229 0.707101 0.632461 -0.313059 0.707694 0.633320 +-0.340065 0.649442 0.680133 -0.336985 0.649922 0.681173 +-0.361803 0.587779 0.723612 -0.358867 0.587756 0.725059 +-0.286900 0.619235 0.730914 -0.286905 0.618427 0.731559 +-0.290444 0.760400 0.580890 -0.287179 0.761101 0.581561 +-0.232516 0.581946 0.779279 -0.232246 0.581896 0.779351 +-0.308612 0.552412 0.774338 -0.308084 0.553209 0.773949 +-0.253366 0.513369 0.819913 -0.252663 0.514054 0.819666 +-0.175669 0.540644 0.822706 -0.175726 0.540849 0.822535 +-0.153956 0.607472 0.779279 -0.154118 0.607288 0.779351 +-0.096779 0.564248 0.819913 -0.097720 0.564409 0.819666 +-0.075035 0.628307 0.774338 -0.075900 0.628651 0.773949 +-0.117881 0.496435 0.860033 -0.118900 0.496353 0.859920 +-0.196435 0.470911 0.860033 -0.195563 0.471450 0.859920 +-0.138197 0.425319 0.894430 -0.139073 0.428083 0.892941 +0.034013 0.536778 0.843037 0.033753 0.536821 0.842982 +0.012280 0.468424 0.883418 0.012207 0.471358 0.881832 +0.087638 0.485707 0.869717 0.087771 0.488632 0.868038 +-0.020697 0.584710 0.810978 -0.020600 0.584521 0.811090 +-0.042383 0.517965 0.854351 -0.042207 0.518082 0.854244 +-0.063153 0.448254 0.891673 -0.063387 0.451155 0.890164 +-0.270168 0.443951 0.854351 -0.270394 0.443953 0.854244 +-0.285272 0.371742 0.883418 -0.286966 0.374126 0.881832 +-0.212389 0.399763 0.891673 -0.213874 0.402264 0.890164 +-0.326945 0.485202 0.810978 -0.326884 0.485000 0.811090 +-0.343033 0.414267 0.843037 -0.342845 0.414441 0.842982 +-0.398469 0.453985 0.796945 -0.395734 0.453200 0.798730 +-0.413169 0.382678 0.826347 -0.410474 0.381634 0.828150 +-0.356396 0.341429 0.869717 -0.358257 0.343699 0.868038 +-0.381312 0.522493 0.762629 -0.378582 0.521897 0.764367 +-0.090631 0.147411 0.984914 -0.090457 0.147343 0.984924 +-0.069216 0.213020 0.974593 -0.069460 0.213813 0.974395 +-0.145619 0.187429 0.971424 -0.146031 0.188147 0.971191 +-0.034602 0.106493 0.993711 -0.034669 0.106693 0.993683 +-0.013326 0.172530 0.984914 -0.013428 0.172369 0.984924 +0.042628 0.131199 0.990439 0.041353 0.127293 0.990997 +0.063687 0.196013 0.978531 0.062471 0.192328 0.979308 +0.084442 0.259889 0.961939 0.083468 0.256874 0.962798 +0.007638 0.237226 0.971425 0.007538 0.238075 0.971191 +0.021365 0.065757 0.997607 0.020020 0.061617 0.997894 +-0.048312 0.280316 0.958691 -0.048463 0.280343 0.958647 +0.028717 0.303798 0.952304 0.028413 0.303110 0.952513 +-0.027156 0.346149 0.937787 -0.027589 0.345592 0.937956 +-0.104670 0.322136 0.940889 -0.104587 0.321909 0.940947 +-0.125683 0.255176 0.958691 -0.125553 0.255318 0.958647 +-0.181495 0.296000 0.937787 -0.180822 0.295816 0.937956 +-0.201802 0.228896 0.952304 -0.201147 0.228523 0.952513 +-0.160257 0.361586 0.918462 -0.159520 0.361583 0.918577 +-0.082889 0.386725 0.918462 -0.083468 0.386303 0.918577 +-0.306594 0.305207 0.901581 -0.306406 0.305155 0.901639 +-0.254703 0.267377 0.929320 -0.254738 0.267556 0.929228 +-0.233953 0.334686 0.912826 -0.234046 0.334544 0.912839 +-0.007456 0.408281 0.912826 -0.007263 0.408216 0.912839 +0.048895 0.366023 0.929320 0.048830 0.366192 0.929228 +0.068639 0.427130 0.901581 0.068514 0.426984 0.901639 +0.124640 0.383610 0.915045 0.123905 0.381420 0.916044 +0.143892 0.442862 0.884968 0.143254 0.440901 0.886013 +0.104792 0.322521 0.940744 0.103977 0.320078 0.941649 +-0.501895 0.446971 0.740485 -0.501694 0.446974 0.740593 +-0.484459 0.516115 0.706346 -0.484664 0.516587 0.705832 +-0.542217 0.476219 0.692255 -0.542589 0.476577 0.691702 +-0.458526 0.415591 0.785517 -0.458571 0.415723 0.785394 +-0.442542 0.486234 0.753480 -0.442640 0.486099 0.753471 +-0.424219 0.553366 0.716816 -0.424238 0.553911 0.716361 +-0.464663 0.583685 0.665883 -0.464827 0.583667 0.665761 +-0.402835 0.619180 0.674048 -0.403211 0.618610 0.674306 +-0.441802 0.647406 0.621028 -0.442305 0.646931 0.621143 +-0.503352 0.610920 0.611076 -0.503281 0.610797 0.611194 +-0.524736 0.545103 0.653846 -0.524583 0.545244 0.653829 +-0.562274 0.571246 0.597935 -0.561571 0.571337 0.598437 +-0.581625 0.504203 0.638350 -0.580981 0.504166 0.638936 +-0.539267 0.634574 0.553631 -0.538530 0.634816 0.554033 +-0.478504 0.672314 0.564826 -0.479110 0.671865 0.564776 +-0.647594 0.551853 0.525433 -0.647420 0.551897 0.525559 +-0.616025 0.529129 0.583555 -0.616047 0.529221 0.583392 +-0.594659 0.594890 0.540821 -0.594745 0.594745 0.540819 +-0.417985 0.705231 0.572659 -0.417798 0.705222 0.572741 +-0.379941 0.678907 0.628275 -0.379955 0.679006 0.628132 +-0.354817 0.734789 0.578092 -0.354930 0.734672 0.578112 +0.643828 0.133255 0.753477 0.643818 0.133061 0.753471 +0.695304 0.132792 0.706342 0.695730 0.133030 0.705832 +0.668462 0.198336 0.716813 0.668813 0.198767 0.716330 +0.615603 0.198579 0.762627 0.613056 0.199713 0.764367 +0.589216 0.133070 0.796942 0.586566 0.134007 0.798730 +0.638195 0.262864 0.723609 0.635823 0.264565 0.725059 +0.615237 0.066709 0.785514 0.615345 0.066775 0.785394 +0.668768 0.066604 0.740482 0.668630 0.066713 0.740593 +0.718580 0.066566 0.692251 0.719077 0.066622 0.691671 +0.559197 0.066741 0.826344 0.556413 0.067476 0.828150 +0.744926 0.132569 0.653843 0.744896 0.132756 0.653798 +0.766911 0.066042 0.638346 0.766350 0.066378 0.638936 +0.790662 0.131655 0.597931 0.790155 0.132145 0.598437 +0.766311 0.198385 0.611073 0.766198 0.198309 0.611194 +0.719004 0.199093 0.665880 0.719138 0.198950 0.665731 +0.737962 0.264081 0.621026 0.738090 0.263375 0.621143 +0.689847 0.264149 0.674045 0.689810 0.263466 0.674306 +0.782295 0.262659 0.564823 0.782556 0.261940 0.564776 +0.809271 0.196411 0.553628 0.808802 0.197028 0.554033 +0.718950 0.385904 0.578090 0.718986 0.385723 0.578112 +0.681926 0.444461 0.580888 0.679708 0.446944 0.581561 +0.671459 0.386185 0.632459 0.669240 0.388531 0.633320 +0.706431 0.325927 0.628273 0.706504 0.325968 0.628132 +0.752681 0.324861 0.572657 0.752525 0.324961 0.572741 +0.656851 0.325528 0.680131 0.654653 0.327708 0.681173 +0.830758 0.131748 0.540817 0.830775 0.131565 0.540819 +0.809392 0.065988 0.583550 0.809473 0.066042 0.583392 +0.848288 0.065817 0.525429 0.848170 0.065920 0.525559 +0.612660 0.394133 0.685060 0.612598 0.394330 0.684957 +0.550009 0.399604 0.733353 0.549394 0.399152 0.734031 +0.596085 0.332340 0.730913 0.595630 0.331675 0.731559 +0.625236 0.454259 0.634610 0.625080 0.454146 0.634785 +0.564166 0.460878 0.685060 0.564348 0.460738 0.684957 +0.574776 0.519255 0.632461 0.576312 0.516434 0.633320 +0.512574 0.524107 0.680133 0.513993 0.521317 0.681173 +0.447211 0.525727 0.723612 0.448103 0.522935 0.725059 +0.500274 0.464210 0.730914 0.499496 0.463973 0.731559 +0.633436 0.511202 0.580889 0.635090 0.508316 0.581561 +0.481615 0.400965 0.779278 0.481643 0.400708 0.779351 +0.430012 0.464210 0.774338 0.430921 0.463973 0.773949 +0.409951 0.399604 0.819913 0.410810 0.399152 0.819666 +0.459901 0.334137 0.822705 0.460067 0.334239 0.822535 +0.530169 0.334137 0.779277 0.529954 0.334239 0.779351 +0.506729 0.266402 0.819912 0.506577 0.267342 0.819666 +0.574373 0.265516 0.774337 0.574419 0.266457 0.773949 +0.435714 0.265516 0.860032 0.435316 0.266457 0.859920 +0.387164 0.332339 0.860032 0.387951 0.331675 0.859920 +0.361800 0.262863 0.894429 0.364147 0.264565 0.892941 +0.521021 0.133522 0.843035 0.520981 0.133763 0.842982 +0.449297 0.133070 0.883417 0.452071 0.134007 0.881832 +0.489021 0.066741 0.869715 0.491867 0.067476 0.868038 +0.549701 0.200366 0.810976 0.549516 0.200232 0.811090 +0.479520 0.200366 0.854350 0.479690 0.200232 0.854244 +0.406802 0.198579 0.891672 0.409467 0.199713 0.890164 +0.338738 0.394133 0.854351 0.338664 0.394330 0.854244 +0.265395 0.386184 0.883418 0.267159 0.388531 0.881832 +0.314568 0.325527 0.891672 0.316477 0.327708 0.890164 +0.360425 0.460878 0.810978 0.360240 0.460738 0.811090 +0.287990 0.454258 0.843037 0.288217 0.454146 0.842982 +0.308633 0.519254 0.796945 0.308695 0.516434 0.798730 +0.236273 0.511201 0.826347 0.236122 0.508316 0.828150 +0.214587 0.444460 0.869717 0.216163 0.446944 0.868038 +0.379090 0.524106 0.762629 0.379376 0.521317 0.764367 +0.112191 0.131747 0.984914 0.112186 0.131565 0.984924 +0.181207 0.131654 0.974593 0.181860 0.132145 0.974395 +0.133257 0.196410 0.971424 0.133824 0.197028 0.971191 +0.090588 0.065816 0.993711 0.090762 0.065920 0.993683 +0.159969 0.065988 0.984914 0.159795 0.066042 0.984924 +0.227977 0.066042 0.971424 0.228736 0.066378 0.971191 +0.251669 0.132568 0.958691 0.251656 0.132756 0.958647 +0.297805 0.066566 0.952303 0.297067 0.066622 0.952513 +0.320818 0.132791 0.937786 0.320170 0.133030 0.937956 +0.274027 0.199092 0.940889 0.273843 0.198950 0.940947 +0.203850 0.198385 0.958691 0.204016 0.198309 0.958647 +0.225429 0.264080 0.937786 0.225471 0.263375 0.937956 +0.155334 0.262658 0.952304 0.155156 0.261940 0.952513 +0.294369 0.264149 0.918462 0.294595 0.263466 0.918546 +0.342186 0.198335 0.918462 0.341594 0.198767 0.918546 +0.195527 0.385902 0.901581 0.195532 0.385723 0.901639 +0.175583 0.324860 0.929320 0.175726 0.324961 0.929228 +0.246012 0.325926 0.912826 0.245827 0.325968 0.912839 +0.385997 0.133255 0.912825 0.385998 0.133061 0.912839 +0.363221 0.066604 0.929319 0.363353 0.066713 0.929228 +0.427439 0.066709 0.901579 0.427259 0.066775 0.901639 +0.270001 0.615452 0.740486 0.270058 0.615284 0.740593 +0.341150 0.620235 0.706346 0.341533 0.620563 0.705832 +0.285358 0.662838 0.692255 0.285562 0.663289 0.691702 +0.253559 0.564508 0.785518 0.253639 0.564592 0.785394 +0.325685 0.571136 0.753481 0.325510 0.571184 0.753471 +0.395193 0.574454 0.716816 0.395703 0.574633 0.716361 +0.411531 0.622288 0.665883 0.411451 0.622456 0.665761 +0.464395 0.574454 0.674048 0.463729 0.574633 0.674306 +0.479198 0.620236 0.621028 0.478561 0.620563 0.621143 +0.425478 0.667499 0.611076 0.425367 0.667409 0.611194 +0.356273 0.667499 0.653847 0.356426 0.667409 0.653829 +0.369536 0.711278 0.597935 0.369854 0.710654 0.598437 +0.299795 0.708965 0.638351 0.299936 0.708335 0.638936 +0.436875 0.708966 0.553631 0.437330 0.708335 0.554033 +0.491546 0.662839 0.564825 0.490921 0.663289 0.564776 +0.324727 0.786430 0.525433 0.324809 0.786279 0.525559 +0.312870 0.749384 0.583555 0.312937 0.749443 0.583392 +0.382016 0.749384 0.540821 0.381848 0.749443 0.540819 +0.541553 0.615452 0.572659 0.541612 0.615284 0.572741 +0.528274 0.571137 0.628275 0.528336 0.571184 0.628132 +0.589185 0.564509 0.578092 0.589038 0.564592 0.578112 +3 0 1 2 +3 1 0 3 +3 4 3 0 +3 3 5 1 +3 0 6 4 +3 6 0 7 +3 2 7 0 +3 7 8 6 +3 9 10 11 +3 10 9 7 +3 8 7 9 +3 7 2 10 +3 12 6 8 +3 6 12 13 +3 14 13 12 +3 13 4 6 +3 15 10 2 +3 10 15 16 +3 17 16 15 +3 16 11 10 +3 15 18 17 +3 18 15 19 +3 2 19 15 +3 19 20 18 +3 21 1 5 +3 1 21 19 +3 20 19 21 +3 19 2 1 +3 22 18 20 +3 18 22 23 +3 24 23 22 +3 23 17 18 +3 25 26 27 +3 26 25 28 +3 29 28 25 +3 28 30 26 +3 25 31 29 +3 31 25 32 +3 27 32 25 +3 32 20 31 +3 22 33 24 +3 33 22 32 +3 20 32 22 +3 32 27 33 +3 21 31 20 +3 31 21 34 +3 5 34 21 +3 34 29 31 +3 35 36 37 +3 36 35 23 +3 17 23 35 +3 23 24 36 +3 35 38 17 +3 38 35 39 +3 37 39 35 +3 39 40 38 +3 41 42 43 +3 42 41 39 +3 40 39 41 +3 39 37 42 +3 44 38 40 +3 38 44 16 +3 11 16 44 +3 16 17 38 +3 45 46 47 +3 46 45 34 +3 29 34 45 +3 34 5 46 +3 45 48 29 +3 48 45 49 +3 47 49 45 +3 49 50 48 +3 51 52 53 +3 52 51 49 +3 50 49 51 +3 49 47 52 +3 54 48 50 +3 48 54 28 +3 30 28 54 +3 28 29 48 +3 55 52 47 +3 52 55 56 +3 57 56 55 +3 56 53 52 +3 55 58 57 +3 58 55 59 +3 47 59 55 +3 59 60 58 +3 61 46 5 +3 46 61 59 +3 60 59 61 +3 59 47 46 +3 62 58 60 +3 58 62 63 +3 64 63 62 +3 63 57 58 +3 65 66 67 +3 66 65 13 +3 4 13 65 +3 13 14 66 +3 65 68 4 +3 68 65 69 +3 67 69 65 +3 69 60 68 +3 62 70 64 +3 70 62 69 +3 60 69 62 +3 69 67 70 +3 61 68 60 +3 68 61 3 +3 5 3 61 +3 3 4 68 +3 71 72 73 +3 72 71 63 +3 57 63 71 +3 63 64 72 +3 71 74 57 +3 74 71 75 +3 73 75 71 +3 75 76 74 +3 77 78 79 +3 78 77 75 +3 76 75 77 +3 75 73 78 +3 80 74 76 +3 74 80 56 +3 53 56 80 +3 56 57 74 +3 81 82 83 +3 82 81 84 +3 85 84 81 +3 84 86 82 +3 81 87 85 +3 87 81 88 +3 83 88 81 +3 88 89 87 +3 90 91 92 +3 91 90 88 +3 89 88 90 +3 88 83 91 +3 93 87 89 +3 87 93 94 +3 95 94 93 +3 94 85 87 +3 96 91 83 +3 91 96 97 +3 98 97 96 +3 97 92 91 +3 96 99 98 +3 99 96 100 +3 83 100 96 +3 100 101 99 +3 102 82 86 +3 82 102 100 +3 101 100 102 +3 100 83 82 +3 103 99 101 +3 99 103 104 +3 64 104 103 +3 104 98 99 +3 105 78 73 +3 78 105 106 +3 107 106 105 +3 106 79 78 +3 105 108 107 +3 108 105 109 +3 73 109 105 +3 109 101 108 +3 103 72 64 +3 72 103 109 +3 101 109 103 +3 109 73 72 +3 102 108 101 +3 108 102 110 +3 86 110 102 +3 110 107 108 +3 111 70 67 +3 70 111 104 +3 98 104 111 +3 104 64 70 +3 111 112 98 +3 112 111 113 +3 67 113 111 +3 113 114 112 +3 115 66 14 +3 66 115 113 +3 114 113 115 +3 113 67 66 +3 116 112 114 +3 112 116 97 +3 92 97 116 +3 97 98 112 +3 117 118 119 +3 118 117 120 +3 121 120 117 +3 120 122 118 +3 117 123 121 +3 123 117 124 +3 119 124 117 +3 124 76 123 +3 80 125 53 +3 125 80 124 +3 76 124 80 +3 124 119 125 +3 77 123 76 +3 123 77 126 +3 79 126 77 +3 126 121 123 +3 127 125 119 +3 125 127 128 +3 129 128 127 +3 128 53 125 +3 127 130 129 +3 130 127 131 +3 119 131 127 +3 131 132 130 +3 133 118 122 +3 118 133 131 +3 132 131 133 +3 131 119 118 +3 134 130 132 +3 130 134 135 +3 136 135 134 +3 135 129 130 +3 137 138 139 +3 138 137 140 +3 141 140 137 +3 140 142 138 +3 137 143 141 +3 143 137 144 +3 139 144 137 +3 144 132 143 +3 134 145 136 +3 145 134 144 +3 132 144 134 +3 144 139 145 +3 133 143 132 +3 143 133 146 +3 122 146 133 +3 146 141 143 +3 147 148 149 +3 148 147 135 +3 129 135 147 +3 135 136 148 +3 147 150 129 +3 150 147 151 +3 149 151 147 +3 151 50 150 +3 54 152 30 +3 152 54 151 +3 50 151 54 +3 151 149 152 +3 51 150 50 +3 150 51 128 +3 53 128 51 +3 128 129 150 +3 153 154 155 +3 155 156 153 +3 157 153 156 +3 156 155 158 +3 153 157 159 +3 159 160 153 +3 154 153 160 +3 160 159 161 +3 162 163 164 +3 164 160 162 +3 161 162 160 +3 160 164 154 +3 165 161 159 +3 159 166 165 +3 167 165 166 +3 166 159 157 +3 168 154 164 +3 164 169 168 +3 170 168 169 +3 169 164 163 +3 168 170 171 +3 171 172 168 +3 154 168 172 +3 172 171 173 +3 174 158 155 +3 155 172 174 +3 173 174 172 +3 172 155 154 +3 175 173 171 +3 171 176 175 +3 24 175 176 +3 176 171 170 +3 177 27 26 +3 26 178 177 +3 179 177 178 +3 178 26 30 +3 177 179 180 +3 180 181 177 +3 27 177 181 +3 181 180 173 +3 175 24 33 +3 33 181 175 +3 173 175 181 +3 181 33 27 +3 174 173 180 +3 180 182 174 +3 158 174 182 +3 182 180 179 +3 183 37 36 +3 36 176 183 +3 170 183 176 +3 176 36 24 +3 183 170 184 +3 184 185 183 +3 37 183 185 +3 185 184 186 +3 187 43 42 +3 42 185 187 +3 186 187 185 +3 185 42 37 +3 188 186 184 +3 184 169 188 +3 163 188 169 +3 169 184 170 +3 189 190 191 +3 191 182 189 +3 179 189 182 +3 182 191 158 +3 189 179 192 +3 192 193 189 +3 190 189 193 +3 193 192 194 +3 195 196 197 +3 197 193 195 +3 194 195 193 +3 193 197 190 +3 198 194 192 +3 192 178 198 +3 30 198 178 +3 178 192 179 +3 199 190 197 +3 197 200 199 +3 201 199 200 +3 200 197 196 +3 199 201 202 +3 202 203 199 +3 190 199 203 +3 203 202 204 +3 205 158 191 +3 191 203 205 +3 204 205 203 +3 203 191 190 +3 206 204 202 +3 202 207 206 +3 208 206 207 +3 207 202 201 +3 209 210 211 +3 211 166 209 +3 157 209 166 +3 166 211 167 +3 209 157 212 +3 212 213 209 +3 210 209 213 +3 213 212 204 +3 206 208 214 +3 214 213 206 +3 204 206 213 +3 213 214 210 +3 205 204 212 +3 212 156 205 +3 158 205 156 +3 156 212 157 +3 215 216 217 +3 217 207 215 +3 201 215 207 +3 207 217 208 +3 215 201 218 +3 218 219 215 +3 216 215 219 +3 219 218 220 +3 221 222 223 +3 223 219 221 +3 220 221 219 +3 219 223 216 +3 224 220 218 +3 218 200 224 +3 196 224 200 +3 200 218 201 +3 225 226 227 +3 227 228 225 +3 229 225 228 +3 228 227 230 +3 225 229 231 +3 231 232 225 +3 226 225 232 +3 232 231 233 +3 234 235 236 +3 236 232 234 +3 233 234 232 +3 232 236 226 +3 237 233 231 +3 231 238 237 +3 239 237 238 +3 238 231 229 +3 240 226 236 +3 236 241 240 +3 242 240 241 +3 241 236 235 +3 240 242 243 +3 243 244 240 +3 226 240 244 +3 244 243 245 +3 246 230 227 +3 227 244 246 +3 245 246 244 +3 244 227 226 +3 247 245 243 +3 243 248 247 +3 208 247 248 +3 248 243 242 +3 249 216 223 +3 223 250 249 +3 251 249 250 +3 250 223 222 +3 249 251 252 +3 252 253 249 +3 216 249 253 +3 253 252 245 +3 247 208 217 +3 217 253 247 +3 245 247 253 +3 253 217 216 +3 246 245 252 +3 252 254 246 +3 230 246 254 +3 254 252 251 +3 255 210 214 +3 214 248 255 +3 242 255 248 +3 248 214 208 +3 255 242 256 +3 256 257 255 +3 210 255 257 +3 257 256 258 +3 259 167 211 +3 211 257 259 +3 258 259 257 +3 257 211 210 +3 260 258 256 +3 256 241 260 +3 235 260 241 +3 241 256 242 +3 261 262 263 +3 263 264 261 +3 265 261 264 +3 264 263 266 +3 261 265 267 +3 267 268 261 +3 262 261 268 +3 268 267 220 +3 224 196 269 +3 269 268 224 +3 220 224 268 +3 268 269 262 +3 221 220 267 +3 267 270 221 +3 222 221 270 +3 270 267 265 +3 271 262 269 +3 269 272 271 +3 273 271 272 +3 272 269 196 +3 271 273 274 +3 274 275 271 +3 262 271 275 +3 275 274 276 +3 277 266 263 +3 263 275 277 +3 276 277 275 +3 275 263 262 +3 278 276 274 +3 274 279 278 +3 136 278 279 +3 279 274 273 +3 280 139 138 +3 138 281 280 +3 282 280 281 +3 138 142 281 +3 280 282 283 +3 283 284 280 +3 139 280 284 +3 284 283 276 +3 278 136 145 +3 145 284 278 +3 276 278 284 +3 284 145 139 +3 277 276 283 +3 283 285 277 +3 266 277 285 +3 285 283 282 +3 286 149 148 +3 148 279 286 +3 273 286 279 +3 279 148 136 +3 286 273 287 +3 287 288 286 +3 149 286 288 +3 288 287 194 +3 198 30 152 +3 152 288 198 +3 194 198 288 +3 288 152 149 +3 195 194 287 +3 287 272 195 +3 196 195 272 +3 272 287 273 +3 289 290 291 +3 290 289 292 +3 293 292 289 +3 292 294 290 +3 289 295 293 +3 295 289 296 +3 291 296 289 +3 296 297 295 +3 298 299 300 +3 299 298 296 +3 297 296 298 +3 296 291 299 +3 301 295 297 +3 295 301 302 +3 303 302 301 +3 302 293 295 +3 304 299 291 +3 299 304 305 +3 306 305 304 +3 305 300 299 +3 304 307 306 +3 307 304 308 +3 291 308 304 +3 308 309 307 +3 310 290 294 +3 290 310 308 +3 309 308 310 +3 308 291 290 +3 311 307 309 +3 307 311 312 +3 86 312 311 +3 312 306 307 +3 313 106 107 +3 106 313 314 +3 315 314 313 +3 314 79 106 +3 313 316 315 +3 316 313 317 +3 107 317 313 +3 317 309 316 +3 311 110 86 +3 110 311 317 +3 309 317 311 +3 317 107 110 +3 310 316 309 +3 316 310 318 +3 294 318 310 +3 318 315 316 +3 319 84 85 +3 84 319 312 +3 306 312 319 +3 312 86 84 +3 319 320 306 +3 320 319 321 +3 85 321 319 +3 321 322 320 +3 323 94 95 +3 94 323 321 +3 322 321 323 +3 321 85 94 +3 324 320 322 +3 320 324 305 +3 300 305 324 +3 305 306 320 +3 325 326 327 +3 326 325 318 +3 315 318 325 +3 318 294 326 +3 325 328 315 +3 328 325 329 +3 327 329 325 +3 329 330 328 +3 331 332 333 +3 332 331 329 +3 330 329 331 +3 329 327 332 +3 334 328 330 +3 328 334 314 +3 79 314 334 +3 314 315 328 +3 335 332 327 +3 332 335 336 +3 337 336 335 +3 336 333 332 +3 335 338 337 +3 338 335 339 +3 327 339 335 +3 339 340 338 +3 341 326 294 +3 326 341 339 +3 340 339 341 +3 339 327 326 +3 342 338 340 +3 338 342 343 +3 344 343 342 +3 343 337 338 +3 345 346 347 +3 346 345 302 +3 293 302 345 +3 302 303 346 +3 345 348 293 +3 348 345 349 +3 347 349 345 +3 349 340 348 +3 342 350 344 +3 350 342 349 +3 340 349 342 +3 349 347 350 +3 341 348 340 +3 348 341 292 +3 294 292 341 +3 292 293 348 +3 351 352 353 +3 352 351 343 +3 337 343 351 +3 343 344 352 +3 351 354 337 +3 354 351 355 +3 353 355 351 +3 355 356 354 +3 357 358 359 +3 358 357 355 +3 356 355 357 +3 355 353 358 +3 360 354 356 +3 354 360 336 +3 333 336 360 +3 336 337 354 +3 361 362 363 +3 362 361 364 +3 365 364 361 +3 364 366 362 +3 361 367 365 +3 367 361 368 +3 363 368 361 +3 368 369 367 +3 370 371 372 +3 371 370 368 +3 369 368 370 +3 368 363 371 +3 373 367 369 +3 367 373 374 +3 375 374 373 +3 374 365 367 +3 376 371 363 +3 371 376 377 +3 378 377 376 +3 377 372 371 +3 376 379 378 +3 379 376 380 +3 363 380 376 +3 380 381 379 +3 382 362 366 +3 362 382 380 +3 381 380 382 +3 380 363 362 +3 383 379 381 +3 379 383 384 +3 344 384 383 +3 384 378 379 +3 385 358 353 +3 358 385 386 +3 387 386 385 +3 386 359 358 +3 385 388 387 +3 388 385 389 +3 353 389 385 +3 389 381 388 +3 383 352 344 +3 352 383 389 +3 381 389 383 +3 389 353 352 +3 382 388 381 +3 388 382 390 +3 366 390 382 +3 390 387 388 +3 391 350 347 +3 350 391 384 +3 378 384 391 +3 384 344 350 +3 391 392 378 +3 392 391 393 +3 347 393 391 +3 393 394 392 +3 395 346 303 +3 346 395 393 +3 394 393 395 +3 393 347 346 +3 396 392 394 +3 392 396 377 +3 372 377 396 +3 377 378 392 +3 397 398 399 +3 398 397 400 +3 401 400 397 +3 400 402 398 +3 397 403 401 +3 403 397 404 +3 399 404 397 +3 404 356 403 +3 360 405 333 +3 405 360 404 +3 356 404 360 +3 404 399 405 +3 357 403 356 +3 403 357 406 +3 359 406 357 +3 406 401 403 +3 407 405 399 +3 405 407 408 +3 409 408 407 +3 408 333 405 +3 407 410 409 +3 410 407 411 +3 399 411 407 +3 411 412 410 +3 413 398 402 +3 398 413 411 +3 412 411 413 +3 411 399 398 +3 414 410 412 +3 410 414 415 +3 122 415 414 +3 415 409 410 +3 416 140 141 +3 140 416 417 +3 418 417 416 +3 417 142 140 +3 416 419 418 +3 419 416 420 +3 141 420 416 +3 420 412 419 +3 414 146 122 +3 146 414 420 +3 412 420 414 +3 420 141 146 +3 413 419 412 +3 419 413 421 +3 402 421 413 +3 421 418 419 +3 422 120 121 +3 120 422 415 +3 409 415 422 +3 415 122 120 +3 422 423 409 +3 423 422 424 +3 121 424 422 +3 424 330 423 +3 334 126 79 +3 126 334 424 +3 330 424 334 +3 424 121 126 +3 331 423 330 +3 423 331 408 +3 333 408 331 +3 408 409 423 +3 425 426 427 +3 426 425 428 +3 429 428 425 +3 428 430 426 +3 425 431 429 +3 431 425 432 +3 427 432 425 +3 432 433 431 +3 434 435 436 +3 435 434 432 +3 433 432 434 +3 432 427 435 +3 437 431 433 +3 431 437 438 +3 439 438 437 +3 438 429 431 +3 440 435 427 +3 435 440 441 +3 442 441 440 +3 441 436 435 +3 440 443 442 +3 443 440 444 +3 427 444 440 +3 444 445 443 +3 446 426 430 +3 426 446 444 +3 445 444 446 +3 444 427 426 +3 447 443 445 +3 443 447 448 +3 366 448 447 +3 448 442 443 +3 449 386 387 +3 386 449 450 +3 451 450 449 +3 450 359 386 +3 449 452 451 +3 452 449 453 +3 387 453 449 +3 453 445 452 +3 447 390 366 +3 390 447 453 +3 445 453 447 +3 453 387 390 +3 446 452 445 +3 452 446 454 +3 430 454 446 +3 454 451 452 +3 455 364 365 +3 364 455 448 +3 442 448 455 +3 448 366 364 +3 455 456 442 +3 456 455 457 +3 365 457 455 +3 457 458 456 +3 459 374 375 +3 374 459 457 +3 458 457 459 +3 457 365 374 +3 460 456 458 +3 456 460 441 +3 436 441 460 +3 441 442 456 +3 461 462 463 +3 462 461 454 +3 451 454 461 +3 454 430 462 +3 461 464 451 +3 464 461 465 +3 463 465 461 +3 465 466 464 +3 467 468 469 +3 468 467 465 +3 466 465 467 +3 465 463 468 +3 470 464 466 +3 464 470 450 +3 359 450 470 +3 450 451 464 +3 471 468 463 +3 468 471 472 +3 473 472 471 +3 472 469 468 +3 471 474 473 +3 474 471 475 +3 463 475 471 +3 475 476 474 +3 477 462 430 +3 462 477 475 +3 476 475 477 +3 475 463 462 +3 478 474 476 +3 474 478 479 +3 480 479 478 +3 479 473 474 +3 481 482 483 +3 482 481 438 +3 429 438 481 +3 438 439 482 +3 481 484 429 +3 484 481 485 +3 483 485 481 +3 485 476 484 +3 478 486 480 +3 486 478 485 +3 476 485 478 +3 485 483 486 +3 477 484 476 +3 484 477 428 +3 430 428 477 +3 428 429 484 +3 487 488 489 +3 488 487 479 +3 473 479 487 +3 479 480 488 +3 487 490 473 +3 490 487 491 +3 489 491 487 +3 491 492 490 +3 493 494 495 +3 494 493 491 +3 492 491 493 +3 491 489 494 +3 496 490 492 +3 490 496 472 +3 469 472 496 +3 472 473 490 +3 497 498 499 +3 498 497 500 +3 501 500 497 +3 500 502 498 +3 497 503 501 +3 503 497 504 +3 499 504 497 +3 504 505 503 +3 506 507 508 +3 507 506 504 +3 505 504 506 +3 504 499 507 +3 509 503 505 +3 503 509 510 +3 511 510 509 +3 510 501 503 +3 512 507 499 +3 507 512 513 +3 514 513 512 +3 513 508 507 +3 512 515 514 +3 515 512 516 +3 499 516 512 +3 516 517 515 +3 518 498 502 +3 498 518 516 +3 517 516 518 +3 516 499 498 +3 519 515 517 +3 515 519 520 +3 480 520 519 +3 520 514 515 +3 521 494 489 +3 494 521 522 +3 523 522 521 +3 522 495 494 +3 521 524 523 +3 524 521 525 +3 489 525 521 +3 525 517 524 +3 519 488 480 +3 488 519 525 +3 517 525 519 +3 525 489 488 +3 518 524 517 +3 524 518 526 +3 502 526 518 +3 526 523 524 +3 527 486 483 +3 486 527 520 +3 514 520 527 +3 520 480 486 +3 527 528 514 +3 528 527 529 +3 483 529 527 +3 529 530 528 +3 531 482 439 +3 482 531 529 +3 530 529 531 +3 529 483 482 +3 532 528 530 +3 528 532 513 +3 508 513 532 +3 513 514 528 +3 533 534 535 +3 534 533 536 +3 537 536 533 +3 536 538 534 +3 533 539 537 +3 539 533 540 +3 535 540 533 +3 540 492 539 +3 496 541 469 +3 541 496 540 +3 492 540 496 +3 540 535 541 +3 493 539 492 +3 539 493 542 +3 495 542 493 +3 542 537 539 +3 543 541 535 +3 541 543 544 +3 545 544 543 +3 544 469 541 +3 543 546 545 +3 546 543 547 +3 535 547 543 +3 547 548 546 +3 549 534 538 +3 534 549 547 +3 548 547 549 +3 547 535 534 +3 550 546 548 +3 546 550 551 +3 402 551 550 +3 551 545 546 +3 552 417 418 +3 417 552 553 +3 554 553 552 +3 553 142 417 +3 552 555 554 +3 555 552 556 +3 418 556 552 +3 556 548 555 +3 550 421 402 +3 421 550 556 +3 548 556 550 +3 556 418 421 +3 549 555 548 +3 555 549 557 +3 538 557 549 +3 557 554 555 +3 558 400 401 +3 400 558 551 +3 545 551 558 +3 551 402 400 +3 558 559 545 +3 559 558 560 +3 401 560 558 +3 560 466 559 +3 470 406 359 +3 406 470 560 +3 466 560 470 +3 560 401 406 +3 467 559 466 +3 559 467 544 +3 469 544 467 +3 544 545 559 +3 561 562 563 +3 562 561 564 +3 565 564 561 +3 564 566 562 +3 561 567 565 +3 567 561 568 +3 563 568 561 +3 568 569 567 +3 570 571 572 +3 571 570 568 +3 569 568 570 +3 568 563 571 +3 573 567 569 +3 567 573 574 +3 575 574 573 +3 574 565 567 +3 576 571 563 +3 571 576 577 +3 578 577 576 +3 577 572 571 +3 576 579 578 +3 579 576 580 +3 563 580 576 +3 580 581 579 +3 582 562 566 +3 562 582 580 +3 581 580 582 +3 580 563 562 +3 583 579 581 +3 579 583 584 +3 502 584 583 +3 584 578 579 +3 585 522 523 +3 522 585 586 +3 587 586 585 +3 586 495 522 +3 585 588 587 +3 588 585 589 +3 523 589 585 +3 589 581 588 +3 583 526 502 +3 526 583 589 +3 581 589 583 +3 589 523 526 +3 582 588 581 +3 588 582 590 +3 566 590 582 +3 590 587 588 +3 591 500 501 +3 500 591 584 +3 578 584 591 +3 584 502 500 +3 591 592 578 +3 592 591 593 +3 501 593 591 +3 593 594 592 +3 595 510 511 +3 510 595 593 +3 594 593 595 +3 593 501 510 +3 596 592 594 +3 592 596 577 +3 572 577 596 +3 577 578 592 +3 597 598 599 +3 598 597 590 +3 587 590 597 +3 590 566 598 +3 597 600 587 +3 600 597 601 +3 599 601 597 +3 601 602 600 +3 603 604 605 +3 604 603 601 +3 602 601 603 +3 601 599 604 +3 606 600 602 +3 600 606 586 +3 495 586 606 +3 586 587 600 +3 607 604 599 +3 604 607 608 +3 609 608 607 +3 608 605 604 +3 607 610 609 +3 610 607 611 +3 599 611 607 +3 611 612 610 +3 613 598 566 +3 598 613 611 +3 612 611 613 +3 611 599 598 +3 614 610 612 +3 610 614 615 +3 616 615 614 +3 615 609 610 +3 617 618 619 +3 618 617 574 +3 565 574 617 +3 574 575 618 +3 617 620 565 +3 620 617 621 +3 619 621 617 +3 621 612 620 +3 614 622 616 +3 622 614 621 +3 612 621 614 +3 621 619 622 +3 613 620 612 +3 620 613 564 +3 566 564 613 +3 564 565 620 +3 623 624 625 +3 624 623 615 +3 609 615 623 +3 615 616 624 +3 623 626 609 +3 626 623 627 +3 625 627 623 +3 627 628 626 +3 629 630 222 +3 630 629 627 +3 628 627 629 +3 627 625 630 +3 631 626 628 +3 626 631 608 +3 605 608 631 +3 608 609 626 +3 632 633 634 +3 633 632 228 +3 229 228 632 +3 228 230 633 +3 632 635 229 +3 635 632 636 +3 634 636 632 +3 636 637 635 +3 638 639 640 +3 639 638 636 +3 637 636 638 +3 636 634 639 +3 641 635 637 +3 635 641 238 +3 239 238 641 +3 238 229 635 +3 642 639 634 +3 639 642 643 +3 644 643 642 +3 643 640 639 +3 642 645 644 +3 645 642 646 +3 634 646 642 +3 646 647 645 +3 648 633 230 +3 633 648 646 +3 647 646 648 +3 646 634 633 +3 649 645 647 +3 645 649 650 +3 616 650 649 +3 650 644 645 +3 651 630 625 +3 630 651 250 +3 251 250 651 +3 250 222 630 +3 651 652 251 +3 652 651 653 +3 625 653 651 +3 653 647 652 +3 649 624 616 +3 624 649 653 +3 647 653 649 +3 653 625 624 +3 648 652 647 +3 652 648 254 +3 230 254 648 +3 254 251 652 +3 654 622 619 +3 622 654 650 +3 644 650 654 +3 650 616 622 +3 654 655 644 +3 655 654 656 +3 619 656 654 +3 656 657 655 +3 658 618 575 +3 618 658 656 +3 657 656 658 +3 656 619 618 +3 659 655 657 +3 655 659 643 +3 640 643 659 +3 643 644 655 +3 660 661 662 +3 661 660 264 +3 265 264 660 +3 264 266 661 +3 660 663 265 +3 663 660 664 +3 662 664 660 +3 664 628 663 +3 631 665 605 +3 665 631 664 +3 628 664 631 +3 664 662 665 +3 629 663 628 +3 663 629 270 +3 222 270 629 +3 270 265 663 +3 666 665 662 +3 665 666 667 +3 668 667 666 +3 667 605 665 +3 666 669 668 +3 669 666 670 +3 662 670 666 +3 670 671 669 +3 672 661 266 +3 661 672 670 +3 671 670 672 +3 670 662 661 +3 673 669 671 +3 669 673 674 +3 538 674 673 +3 674 668 669 +3 675 553 554 +3 553 675 281 +3 282 281 675 +3 281 142 553 +3 675 676 282 +3 676 675 677 +3 554 677 675 +3 677 671 676 +3 673 557 538 +3 557 673 677 +3 671 677 673 +3 677 554 557 +3 672 676 671 +3 676 672 285 +3 266 285 672 +3 285 282 676 +3 678 536 537 +3 536 678 674 +3 668 674 678 +3 674 538 536 +3 678 679 668 +3 679 678 680 +3 537 680 678 +3 680 602 679 +3 606 542 495 +3 542 606 680 +3 602 680 606 +3 680 537 542 +3 603 679 602 +3 679 603 667 +3 605 667 603 +3 667 668 679 +3 681 682 683 +3 683 684 681 +3 685 681 684 +3 684 683 686 +3 681 685 687 +3 687 688 681 +3 682 681 688 +3 688 687 689 +3 690 691 692 +3 692 688 690 +3 689 690 688 +3 688 692 682 +3 693 689 687 +3 687 694 693 +3 695 693 694 +3 694 687 685 +3 696 682 692 +3 692 697 696 +3 698 696 697 +3 697 692 691 +3 696 698 699 +3 699 700 696 +3 682 696 700 +3 700 699 701 +3 702 686 683 +3 683 700 702 +3 701 702 700 +3 700 683 682 +3 703 701 699 +3 699 704 703 +3 163 703 704 +3 704 699 698 +3 705 161 165 +3 165 706 705 +3 707 705 706 +3 706 165 167 +3 705 707 708 +3 708 709 705 +3 161 705 709 +3 709 708 701 +3 703 163 162 +3 162 709 703 +3 701 703 709 +3 709 162 161 +3 702 701 708 +3 708 710 702 +3 686 702 710 +3 710 708 707 +3 711 186 188 +3 188 704 711 +3 698 711 704 +3 704 188 163 +3 711 698 712 +3 712 713 711 +3 186 711 713 +3 713 712 714 +3 715 43 187 +3 187 713 715 +3 714 715 713 +3 713 187 186 +3 716 714 712 +3 712 697 716 +3 691 716 697 +3 697 712 698 +3 717 718 719 +3 719 710 717 +3 707 717 710 +3 710 719 686 +3 717 707 720 +3 720 721 717 +3 718 717 721 +3 721 720 722 +3 723 724 725 +3 725 721 723 +3 722 723 721 +3 721 725 718 +3 726 722 720 +3 720 706 726 +3 167 726 706 +3 706 720 707 +3 727 718 725 +3 725 728 727 +3 729 727 728 +3 728 725 724 +3 727 729 730 +3 730 731 727 +3 718 727 731 +3 731 730 732 +3 733 686 719 +3 719 731 733 +3 732 733 731 +3 731 719 718 +3 734 732 730 +3 730 735 734 +3 736 734 735 +3 735 730 729 +3 737 738 739 +3 739 694 737 +3 685 737 694 +3 694 739 695 +3 737 685 740 +3 740 741 737 +3 738 737 741 +3 741 740 732 +3 734 736 742 +3 742 741 734 +3 732 734 741 +3 741 742 738 +3 733 732 740 +3 740 684 733 +3 686 733 684 +3 684 740 685 +3 743 744 745 +3 745 735 743 +3 729 743 735 +3 735 745 736 +3 743 729 746 +3 746 747 743 +3 744 743 747 +3 747 746 748 +3 749 750 751 +3 751 747 749 +3 748 749 747 +3 747 751 744 +3 752 748 746 +3 746 728 752 +3 724 752 728 +3 728 746 729 +3 753 754 755 +3 755 756 753 +3 757 753 756 +3 756 755 758 +3 753 757 759 +3 759 760 753 +3 754 753 760 +3 760 759 761 +3 762 763 764 +3 764 760 762 +3 761 762 760 +3 760 764 754 +3 765 761 759 +3 759 766 765 +3 767 765 766 +3 766 759 757 +3 768 754 764 +3 764 769 768 +3 770 768 769 +3 769 764 763 +3 768 770 771 +3 771 772 768 +3 754 768 772 +3 772 771 773 +3 774 758 755 +3 755 772 774 +3 773 774 772 +3 772 755 754 +3 775 773 771 +3 771 776 775 +3 736 775 776 +3 776 771 770 +3 777 744 751 +3 751 778 777 +3 779 777 778 +3 778 751 750 +3 777 779 780 +3 780 781 777 +3 744 777 781 +3 781 780 773 +3 775 736 745 +3 745 781 775 +3 773 775 781 +3 781 745 744 +3 774 773 780 +3 780 782 774 +3 758 774 782 +3 782 780 779 +3 783 738 742 +3 742 776 783 +3 770 783 776 +3 776 742 736 +3 783 770 784 +3 784 785 783 +3 738 783 785 +3 785 784 786 +3 787 695 739 +3 739 785 787 +3 786 787 785 +3 785 739 738 +3 788 786 784 +3 784 769 788 +3 763 788 769 +3 769 784 770 +3 789 790 791 +3 791 792 789 +3 793 789 792 +3 792 791 794 +3 789 793 795 +3 795 796 789 +3 790 789 796 +3 796 795 748 +3 752 724 797 +3 797 796 752 +3 748 752 796 +3 796 797 790 +3 749 748 795 +3 795 798 749 +3 750 749 798 +3 798 795 793 +3 799 790 797 +3 797 800 799 +3 801 799 800 +3 800 797 724 +3 799 801 802 +3 802 803 799 +3 790 799 803 +3 803 802 804 +3 805 794 791 +3 791 803 805 +3 804 805 803 +3 803 791 790 +3 806 804 802 +3 802 807 806 +3 235 806 807 +3 807 802 801 +3 808 233 237 +3 237 809 808 +3 810 808 809 +3 809 237 239 +3 808 810 811 +3 811 812 808 +3 233 808 812 +3 812 811 804 +3 806 235 234 +3 234 812 806 +3 804 806 812 +3 812 234 233 +3 805 804 811 +3 811 813 805 +3 794 805 813 +3 813 811 810 +3 814 258 260 +3 260 807 814 +3 801 814 807 +3 807 260 235 +3 814 801 815 +3 815 816 814 +3 258 814 816 +3 816 815 722 +3 726 167 259 +3 259 816 726 +3 722 726 816 +3 816 259 258 +3 723 722 815 +3 815 800 723 +3 724 723 800 +3 800 815 801 +3 817 818 819 +3 819 820 817 +3 821 817 820 +3 820 819 822 +3 817 821 823 +3 823 824 817 +3 818 817 824 +3 824 823 825 +3 826 827 828 +3 828 824 826 +3 825 826 824 +3 824 828 818 +3 829 825 823 +3 823 830 829 +3 831 829 830 +3 830 823 821 +3 832 818 828 +3 828 833 832 +3 834 832 833 +3 833 828 827 +3 832 834 835 +3 835 836 832 +3 818 832 836 +3 836 835 837 +3 838 822 819 +3 819 836 838 +3 837 838 836 +3 836 819 818 +3 839 837 835 +3 835 840 839 +3 92 839 840 +3 840 835 834 +3 841 114 115 +3 115 842 841 +3 843 841 842 +3 842 115 14 +3 841 843 844 +3 844 845 841 +3 114 841 845 +3 845 844 837 +3 839 92 116 +3 116 845 839 +3 837 839 845 +3 845 116 114 +3 838 837 844 +3 844 846 838 +3 822 838 846 +3 846 844 843 +3 847 89 90 +3 90 840 847 +3 834 847 840 +3 840 90 92 +3 847 834 848 +3 848 849 847 +3 89 847 849 +3 849 848 850 +3 851 95 93 +3 93 849 851 +3 850 851 849 +3 849 93 89 +3 852 850 848 +3 848 833 852 +3 827 852 833 +3 833 848 834 +3 853 854 855 +3 855 846 853 +3 843 853 846 +3 846 855 822 +3 853 843 856 +3 856 857 853 +3 854 853 857 +3 857 856 858 +3 859 860 861 +3 861 857 859 +3 858 859 857 +3 857 861 854 +3 862 858 856 +3 856 842 862 +3 14 862 842 +3 842 856 843 +3 863 854 861 +3 861 864 863 +3 865 863 864 +3 864 861 860 +3 863 865 866 +3 866 867 863 +3 854 863 867 +3 867 866 868 +3 869 822 855 +3 855 867 869 +3 868 869 867 +3 867 855 854 +3 870 868 866 +3 866 871 870 +3 872 870 871 +3 871 866 865 +3 873 874 875 +3 875 830 873 +3 821 873 830 +3 830 875 831 +3 873 821 876 +3 876 877 873 +3 874 873 877 +3 877 876 868 +3 870 872 878 +3 878 877 870 +3 868 870 877 +3 877 878 874 +3 869 868 876 +3 876 820 869 +3 822 869 820 +3 820 876 821 +3 879 880 881 +3 881 871 879 +3 865 879 871 +3 871 881 872 +3 879 865 882 +3 882 883 879 +3 880 879 883 +3 883 882 884 +3 885 886 887 +3 887 883 885 +3 884 885 883 +3 883 887 880 +3 888 884 882 +3 882 864 888 +3 860 888 864 +3 864 882 865 +3 889 890 891 +3 891 892 889 +3 893 889 892 +3 892 891 894 +3 889 893 895 +3 895 896 889 +3 890 889 896 +3 896 895 897 +3 898 899 900 +3 900 896 898 +3 897 898 896 +3 896 900 890 +3 901 897 895 +3 895 902 901 +3 903 901 902 +3 902 895 893 +3 904 890 900 +3 900 905 904 +3 906 904 905 +3 905 900 899 +3 904 906 907 +3 907 908 904 +3 890 904 908 +3 908 907 909 +3 910 894 891 +3 891 908 910 +3 909 910 908 +3 908 891 890 +3 911 909 907 +3 907 912 911 +3 872 911 912 +3 912 907 906 +3 913 880 887 +3 887 914 913 +3 915 913 914 +3 914 887 886 +3 913 915 916 +3 916 917 913 +3 880 913 917 +3 917 916 909 +3 911 872 881 +3 881 917 911 +3 909 911 917 +3 917 881 880 +3 910 909 916 +3 916 918 910 +3 894 910 918 +3 918 916 915 +3 919 874 878 +3 878 912 919 +3 906 919 912 +3 912 878 872 +3 919 906 920 +3 920 921 919 +3 874 919 921 +3 921 920 922 +3 923 831 875 +3 875 921 923 +3 922 923 921 +3 921 875 874 +3 924 922 920 +3 920 905 924 +3 899 924 905 +3 905 920 906 +3 925 926 927 +3 927 928 925 +3 929 925 928 +3 928 927 930 +3 925 929 931 +3 931 932 925 +3 926 925 932 +3 932 931 884 +3 888 860 933 +3 933 932 888 +3 884 888 932 +3 932 933 926 +3 885 884 931 +3 931 934 885 +3 886 885 934 +3 934 931 929 +3 935 926 933 +3 933 936 935 +3 937 935 936 +3 936 933 860 +3 935 937 938 +3 938 939 935 +3 926 935 939 +3 939 938 940 +3 941 930 927 +3 927 939 941 +3 940 941 939 +3 939 927 926 +3 942 940 938 +3 938 943 942 +3 11 942 943 +3 943 938 937 +3 944 40 41 +3 41 945 944 +3 946 944 945 +3 945 41 43 +3 944 946 947 +3 947 948 944 +3 40 944 948 +3 948 947 940 +3 942 11 44 +3 44 948 942 +3 940 942 948 +3 948 44 40 +3 941 940 947 +3 947 949 941 +3 930 941 949 +3 949 947 946 +3 950 8 9 +3 9 943 950 +3 937 950 943 +3 943 9 11 +3 950 937 951 +3 951 952 950 +3 8 950 952 +3 952 951 858 +3 862 14 12 +3 12 952 862 +3 858 862 952 +3 952 12 8 +3 859 858 951 +3 951 936 859 +3 860 859 936 +3 936 951 937 +3 953 954 955 +3 955 956 953 +3 957 953 956 +3 956 955 958 +3 953 957 959 +3 959 960 953 +3 954 953 960 +3 960 959 961 +3 962 963 964 +3 964 960 962 +3 961 962 960 +3 960 964 954 +3 965 961 959 +3 959 966 965 +3 967 965 966 +3 966 959 957 +3 968 954 964 +3 964 969 968 +3 970 968 969 +3 969 964 963 +3 968 970 971 +3 971 972 968 +3 954 968 972 +3 972 971 973 +3 974 958 955 +3 955 972 974 +3 973 974 972 +3 972 955 954 +3 975 973 971 +3 971 976 975 +3 372 975 976 +3 976 971 970 +3 977 394 395 +3 395 978 977 +3 979 977 978 +3 978 395 303 +3 977 979 980 +3 980 981 977 +3 394 977 981 +3 981 980 973 +3 975 372 396 +3 396 981 975 +3 973 975 981 +3 981 396 394 +3 974 973 980 +3 980 982 974 +3 958 974 982 +3 982 980 979 +3 983 369 370 +3 370 976 983 +3 970 983 976 +3 976 370 372 +3 983 970 984 +3 984 985 983 +3 369 983 985 +3 985 984 986 +3 987 375 373 +3 373 985 987 +3 986 987 985 +3 985 373 369 +3 988 986 984 +3 984 969 988 +3 963 988 969 +3 969 984 970 +3 989 990 991 +3 991 982 989 +3 979 989 982 +3 982 991 958 +3 989 979 992 +3 992 993 989 +3 990 989 993 +3 993 992 994 +3 995 996 997 +3 997 993 995 +3 994 995 993 +3 993 997 990 +3 998 994 992 +3 992 978 998 +3 303 998 978 +3 978 992 979 +3 999 990 997 +3 997 1000 999 +3 1001 999 1000 +3 1000 997 996 +3 999 1001 1002 +3 1002 1003 999 +3 990 999 1003 +3 1003 1002 1004 +3 1005 958 991 +3 991 1003 1005 +3 1004 1005 1003 +3 1003 991 990 +3 1006 1004 1002 +3 1002 1007 1006 +3 1008 1006 1007 +3 1007 1002 1001 +3 1009 1010 1011 +3 1011 966 1009 +3 957 1009 966 +3 966 1011 967 +3 1009 957 1012 +3 1012 1013 1009 +3 1010 1009 1013 +3 1013 1012 1004 +3 1006 1008 1014 +3 1014 1013 1006 +3 1004 1006 1013 +3 1013 1014 1010 +3 1005 1004 1012 +3 1012 956 1005 +3 958 1005 956 +3 956 1012 957 +3 1015 1016 1017 +3 1017 1007 1015 +3 1001 1015 1007 +3 1007 1017 1008 +3 1015 1001 1018 +3 1018 1019 1015 +3 1016 1015 1019 +3 1019 1018 1020 +3 1021 1022 1023 +3 1023 1019 1021 +3 1020 1021 1019 +3 1019 1023 1016 +3 1024 1020 1018 +3 1018 1000 1024 +3 996 1024 1000 +3 1000 1018 1001 +3 1025 1026 1027 +3 1027 1028 1025 +3 1029 1025 1028 +3 1028 1027 1030 +3 1025 1029 1031 +3 1031 1032 1025 +3 1026 1025 1032 +3 1032 1031 1033 +3 1034 1035 1036 +3 1036 1032 1034 +3 1033 1034 1032 +3 1032 1036 1026 +3 1037 1033 1031 +3 1031 1038 1037 +3 1039 1037 1038 +3 1038 1031 1029 +3 1040 1026 1036 +3 1036 1041 1040 +3 1042 1040 1041 +3 1041 1036 1035 +3 1040 1042 1043 +3 1043 1044 1040 +3 1026 1040 1044 +3 1044 1043 1045 +3 1046 1030 1027 +3 1027 1044 1046 +3 1045 1046 1044 +3 1044 1027 1026 +3 1047 1045 1043 +3 1043 1048 1047 +3 1008 1047 1048 +3 1048 1043 1042 +3 1049 1016 1023 +3 1023 1050 1049 +3 1051 1049 1050 +3 1050 1023 1022 +3 1049 1051 1052 +3 1052 1053 1049 +3 1016 1049 1053 +3 1053 1052 1045 +3 1047 1008 1017 +3 1017 1053 1047 +3 1045 1047 1053 +3 1053 1017 1016 +3 1046 1045 1052 +3 1052 1054 1046 +3 1030 1046 1054 +3 1054 1052 1051 +3 1055 1010 1014 +3 1014 1048 1055 +3 1042 1055 1048 +3 1048 1014 1008 +3 1055 1042 1056 +3 1056 1057 1055 +3 1010 1055 1057 +3 1057 1056 1058 +3 1059 967 1011 +3 1011 1057 1059 +3 1058 1059 1057 +3 1057 1011 1010 +3 1060 1058 1056 +3 1056 1041 1060 +3 1035 1060 1041 +3 1041 1056 1042 +3 1061 1062 1063 +3 1063 1064 1061 +3 1065 1061 1064 +3 1064 1063 1066 +3 1061 1065 1067 +3 1067 1068 1061 +3 1062 1061 1068 +3 1068 1067 1020 +3 1024 996 1069 +3 1069 1068 1024 +3 1020 1024 1068 +3 1068 1069 1062 +3 1021 1020 1067 +3 1067 1070 1021 +3 1022 1021 1070 +3 1070 1067 1065 +3 1071 1062 1069 +3 1069 1072 1071 +3 1073 1071 1072 +3 1072 1069 996 +3 1071 1073 1074 +3 1074 1075 1071 +3 1062 1071 1075 +3 1075 1074 1076 +3 1077 1066 1063 +3 1063 1075 1077 +3 1076 1077 1075 +3 1075 1063 1062 +3 1078 1076 1074 +3 1074 1079 1078 +3 300 1078 1079 +3 1079 1074 1073 +3 1080 322 323 +3 323 1081 1080 +3 1082 1080 1081 +3 1081 323 95 +3 1080 1082 1083 +3 1083 1084 1080 +3 322 1080 1084 +3 1084 1083 1076 +3 1078 300 324 +3 324 1084 1078 +3 1076 1078 1084 +3 1084 324 322 +3 1077 1076 1083 +3 1083 1085 1077 +3 1066 1077 1085 +3 1085 1083 1082 +3 1086 297 298 +3 298 1079 1086 +3 1073 1086 1079 +3 1079 298 300 +3 1086 1073 1087 +3 1087 1088 1086 +3 297 1086 1088 +3 1088 1087 994 +3 998 303 301 +3 301 1088 998 +3 994 998 1088 +3 1088 301 297 +3 995 994 1087 +3 1087 1072 995 +3 996 995 1072 +3 1072 1087 1073 +3 1089 1090 1091 +3 1091 1092 1089 +3 1093 1089 1092 +3 1092 1091 1094 +3 1089 1093 1095 +3 1095 1096 1089 +3 1090 1089 1096 +3 1096 1095 1097 +3 1098 1099 1100 +3 1100 1096 1098 +3 1097 1098 1096 +3 1096 1100 1090 +3 1101 1097 1095 +3 1095 1102 1101 +3 1103 1101 1102 +3 1102 1095 1093 +3 1104 1090 1100 +3 1100 1105 1104 +3 1106 1104 1105 +3 1105 1100 1099 +3 1104 1106 1107 +3 1107 1108 1104 +3 1090 1104 1108 +3 1108 1107 1109 +3 1110 1094 1091 +3 1091 1108 1110 +3 1109 1110 1108 +3 1108 1091 1090 +3 1111 1109 1107 +3 1107 1112 1111 +3 508 1111 1112 +3 1112 1107 1106 +3 1113 530 531 +3 531 1114 1113 +3 1115 1113 1114 +3 1114 531 439 +3 1113 1115 1116 +3 1116 1117 1113 +3 530 1113 1117 +3 1117 1116 1109 +3 1111 508 532 +3 532 1117 1111 +3 1109 1111 1117 +3 1117 532 530 +3 1110 1109 1116 +3 1116 1118 1110 +3 1094 1110 1118 +3 1118 1116 1115 +3 1119 505 506 +3 506 1112 1119 +3 1106 1119 1112 +3 1112 506 508 +3 1119 1106 1120 +3 1120 1121 1119 +3 505 1119 1121 +3 1121 1120 1122 +3 1123 511 509 +3 509 1121 1123 +3 1122 1123 1121 +3 1121 509 505 +3 1124 1122 1120 +3 1120 1105 1124 +3 1099 1124 1105 +3 1105 1120 1106 +3 1125 1126 1127 +3 1127 1118 1125 +3 1115 1125 1118 +3 1118 1127 1094 +3 1125 1115 1128 +3 1128 1129 1125 +3 1126 1125 1129 +3 1129 1128 1130 +3 1131 1132 1133 +3 1133 1129 1131 +3 1130 1131 1129 +3 1129 1133 1126 +3 1134 1130 1128 +3 1128 1114 1134 +3 439 1134 1114 +3 1114 1128 1115 +3 1135 1126 1133 +3 1133 1136 1135 +3 1137 1135 1136 +3 1136 1133 1132 +3 1135 1137 1138 +3 1138 1139 1135 +3 1126 1135 1139 +3 1139 1138 1140 +3 1141 1094 1127 +3 1127 1139 1141 +3 1140 1141 1139 +3 1139 1127 1126 +3 1142 1140 1138 +3 1138 1143 1142 +3 1144 1142 1143 +3 1143 1138 1137 +3 1145 1146 1147 +3 1147 1102 1145 +3 1093 1145 1102 +3 1102 1147 1103 +3 1145 1093 1148 +3 1148 1149 1145 +3 1146 1145 1149 +3 1149 1148 1140 +3 1142 1144 1150 +3 1150 1149 1142 +3 1140 1142 1149 +3 1149 1150 1146 +3 1141 1140 1148 +3 1148 1092 1141 +3 1094 1141 1092 +3 1092 1148 1093 +3 1151 1152 1153 +3 1153 1143 1151 +3 1137 1151 1143 +3 1143 1153 1144 +3 1151 1137 1154 +3 1154 1155 1151 +3 1152 1151 1155 +3 1155 1154 1156 +3 1157 1158 1159 +3 1159 1155 1157 +3 1156 1157 1155 +3 1155 1159 1152 +3 1160 1156 1154 +3 1154 1136 1160 +3 1132 1160 1136 +3 1136 1154 1137 +3 1161 1162 1163 +3 1163 1164 1161 +3 1165 1161 1164 +3 1164 1163 1166 +3 1161 1165 1167 +3 1167 1168 1161 +3 1162 1161 1168 +3 1168 1167 1169 +3 1170 1171 1172 +3 1172 1168 1170 +3 1169 1170 1168 +3 1168 1172 1162 +3 1173 1169 1167 +3 1167 1174 1173 +3 1175 1173 1174 +3 1174 1167 1165 +3 1176 1162 1172 +3 1172 1177 1176 +3 1178 1176 1177 +3 1177 1172 1171 +3 1176 1178 1179 +3 1179 1180 1176 +3 1162 1176 1180 +3 1180 1179 1181 +3 1182 1166 1163 +3 1163 1180 1182 +3 1181 1182 1180 +3 1180 1163 1162 +3 1183 1181 1179 +3 1179 1184 1183 +3 1144 1183 1184 +3 1184 1179 1178 +3 1185 1152 1159 +3 1159 1186 1185 +3 1187 1185 1186 +3 1186 1159 1158 +3 1185 1187 1188 +3 1188 1189 1185 +3 1152 1185 1189 +3 1189 1188 1181 +3 1183 1144 1153 +3 1153 1189 1183 +3 1181 1183 1189 +3 1189 1153 1152 +3 1182 1181 1188 +3 1188 1190 1182 +3 1166 1182 1190 +3 1190 1188 1187 +3 1191 1146 1150 +3 1150 1184 1191 +3 1178 1191 1184 +3 1184 1150 1144 +3 1191 1178 1192 +3 1192 1193 1191 +3 1146 1191 1193 +3 1193 1192 1194 +3 1195 1103 1147 +3 1147 1193 1195 +3 1194 1195 1193 +3 1193 1147 1146 +3 1196 1194 1192 +3 1192 1177 1196 +3 1171 1196 1177 +3 1177 1192 1178 +3 1197 1198 1199 +3 1199 1200 1197 +3 1201 1197 1200 +3 1200 1199 1202 +3 1197 1201 1203 +3 1203 1204 1197 +3 1198 1197 1204 +3 1204 1203 1156 +3 1160 1132 1205 +3 1205 1204 1160 +3 1156 1160 1204 +3 1204 1205 1198 +3 1157 1156 1203 +3 1203 1206 1157 +3 1158 1157 1206 +3 1206 1203 1201 +3 1207 1198 1205 +3 1205 1208 1207 +3 1209 1207 1208 +3 1208 1205 1132 +3 1207 1209 1210 +3 1210 1211 1207 +3 1198 1207 1211 +3 1211 1210 1212 +3 1213 1202 1199 +3 1199 1211 1213 +3 1212 1213 1211 +3 1211 1199 1198 +3 1214 1212 1210 +3 1210 1215 1214 +3 436 1214 1215 +3 1215 1210 1209 +3 1216 458 459 +3 459 1217 1216 +3 1218 1216 1217 +3 1217 459 375 +3 1216 1218 1219 +3 1219 1220 1216 +3 458 1216 1220 +3 1220 1219 1212 +3 1214 436 460 +3 460 1220 1214 +3 1212 1214 1220 +3 1220 460 458 +3 1213 1212 1219 +3 1219 1221 1213 +3 1202 1213 1221 +3 1221 1219 1218 +3 1222 433 434 +3 434 1215 1222 +3 1209 1222 1215 +3 1215 434 436 +3 1222 1209 1223 +3 1223 1224 1222 +3 433 1222 1224 +3 1224 1223 1130 +3 1134 439 437 +3 437 1224 1134 +3 1130 1134 1224 +3 1224 437 433 +3 1131 1130 1223 +3 1223 1208 1131 +3 1132 1131 1208 +3 1208 1223 1209 +3 1225 1226 1227 +3 1227 1228 1225 +3 1229 1225 1228 +3 1228 1227 1230 +3 1225 1229 1231 +3 1231 1232 1225 +3 1226 1225 1232 +3 1232 1231 1233 +3 1234 1235 1236 +3 1236 1232 1234 +3 1233 1234 1232 +3 1232 1236 1226 +3 1237 1233 1231 +3 1231 1238 1237 +3 1239 1237 1238 +3 1238 1231 1229 +3 1240 1226 1236 +3 1236 1241 1240 +3 1242 1240 1241 +3 1241 1236 1235 +3 1240 1242 1243 +3 1243 1244 1240 +3 1226 1240 1244 +3 1244 1243 1245 +3 1246 1230 1227 +3 1227 1244 1246 +3 1245 1246 1244 +3 1244 1227 1226 +3 1247 1245 1243 +3 1243 1248 1247 +3 640 1247 1248 +3 1248 1243 1242 +3 1249 657 658 +3 658 1250 1249 +3 1251 1249 1250 +3 1250 658 575 +3 1249 1251 1252 +3 1252 1253 1249 +3 657 1249 1253 +3 1253 1252 1245 +3 1247 640 659 +3 659 1253 1247 +3 1245 1247 1253 +3 1253 659 657 +3 1246 1245 1252 +3 1252 1254 1246 +3 1230 1246 1254 +3 1254 1252 1251 +3 1255 637 638 +3 638 1248 1255 +3 1242 1255 1248 +3 1248 638 640 +3 1255 1242 1256 +3 1256 1257 1255 +3 637 1255 1257 +3 1257 1256 1258 +3 1259 239 641 +3 641 1257 1259 +3 1258 1259 1257 +3 1257 641 637 +3 1260 1258 1256 +3 1256 1241 1260 +3 1235 1260 1241 +3 1241 1256 1242 +3 1261 1262 1263 +3 1263 1254 1261 +3 1251 1261 1254 +3 1254 1263 1230 +3 1261 1251 1264 +3 1264 1265 1261 +3 1262 1261 1265 +3 1265 1264 1266 +3 1267 1268 1269 +3 1269 1265 1267 +3 1266 1267 1265 +3 1265 1269 1262 +3 1270 1266 1264 +3 1264 1250 1270 +3 575 1270 1250 +3 1250 1264 1251 +3 1271 1262 1269 +3 1269 1272 1271 +3 1273 1271 1272 +3 1272 1269 1268 +3 1271 1273 1274 +3 1274 1275 1271 +3 1262 1271 1275 +3 1275 1274 1276 +3 1277 1230 1263 +3 1263 1275 1277 +3 1276 1277 1275 +3 1275 1263 1262 +3 1278 1276 1274 +3 1274 1279 1278 +3 1280 1278 1279 +3 1279 1274 1273 +3 1281 1282 1283 +3 1283 1238 1281 +3 1229 1281 1238 +3 1238 1283 1239 +3 1281 1229 1284 +3 1284 1285 1281 +3 1282 1281 1285 +3 1285 1284 1276 +3 1278 1280 1286 +3 1286 1285 1278 +3 1276 1278 1285 +3 1285 1286 1282 +3 1277 1276 1284 +3 1284 1228 1277 +3 1230 1277 1228 +3 1228 1284 1229 +3 1287 1288 1289 +3 1289 1279 1287 +3 1273 1287 1279 +3 1279 1289 1280 +3 1287 1273 1290 +3 1290 1291 1287 +3 1288 1287 1291 +3 1291 1290 1292 +3 1293 1294 1295 +3 1295 1291 1293 +3 1292 1293 1291 +3 1291 1295 1288 +3 1296 1292 1290 +3 1290 1272 1296 +3 1268 1296 1272 +3 1272 1290 1273 +3 1297 1298 1299 +3 1299 1300 1297 +3 1301 1297 1300 +3 1300 1299 1302 +3 1297 1301 1303 +3 1303 1304 1297 +3 1298 1297 1304 +3 1304 1303 1305 +3 1306 1307 1308 +3 1308 1304 1306 +3 1305 1306 1304 +3 1304 1308 1298 +3 1309 1305 1303 +3 1303 1310 1309 +3 1311 1309 1310 +3 1310 1303 1301 +3 1312 1298 1308 +3 1308 1313 1312 +3 1314 1312 1313 +3 1313 1308 1307 +3 1312 1314 1315 +3 1315 1316 1312 +3 1298 1312 1316 +3 1316 1315 1317 +3 1318 1302 1299 +3 1299 1316 1318 +3 1317 1318 1316 +3 1316 1299 1298 +3 1319 1317 1315 +3 1315 1320 1319 +3 1280 1319 1320 +3 1320 1315 1314 +3 1321 1288 1295 +3 1295 1322 1321 +3 1323 1321 1322 +3 1322 1295 1294 +3 1321 1323 1324 +3 1324 1325 1321 +3 1288 1321 1325 +3 1325 1324 1317 +3 1319 1280 1289 +3 1289 1325 1319 +3 1317 1319 1325 +3 1325 1289 1288 +3 1318 1317 1324 +3 1324 1326 1318 +3 1302 1318 1326 +3 1326 1324 1323 +3 1327 1282 1286 +3 1286 1320 1327 +3 1314 1327 1320 +3 1320 1286 1280 +3 1327 1314 1328 +3 1328 1329 1327 +3 1282 1327 1329 +3 1329 1328 1330 +3 1331 1239 1283 +3 1283 1329 1331 +3 1330 1331 1329 +3 1329 1283 1282 +3 1332 1330 1328 +3 1328 1313 1332 +3 1307 1332 1313 +3 1313 1328 1314 +3 1333 1334 1335 +3 1335 1336 1333 +3 1337 1333 1336 +3 1336 1335 1338 +3 1333 1337 1339 +3 1339 1340 1333 +3 1334 1333 1340 +3 1340 1339 1292 +3 1296 1268 1341 +3 1341 1340 1296 +3 1292 1296 1340 +3 1340 1341 1334 +3 1293 1292 1339 +3 1339 1342 1293 +3 1294 1293 1342 +3 1342 1339 1337 +3 1343 1334 1341 +3 1341 1344 1343 +3 1345 1343 1344 +3 1344 1341 1268 +3 1343 1345 1346 +3 1346 1347 1343 +3 1334 1343 1347 +3 1347 1346 1348 +3 1349 1338 1335 +3 1335 1347 1349 +3 1348 1349 1347 +3 1347 1335 1334 +3 1350 1348 1346 +3 1346 1351 1350 +3 572 1350 1351 +3 1351 1346 1345 +3 1352 594 595 +3 595 1353 1352 +3 1354 1352 1353 +3 1353 595 511 +3 1352 1354 1355 +3 1355 1356 1352 +3 594 1352 1356 +3 1356 1355 1348 +3 1350 572 596 +3 596 1356 1350 +3 1348 1350 1356 +3 1356 596 594 +3 1349 1348 1355 +3 1355 1357 1349 +3 1338 1349 1357 +3 1357 1355 1354 +3 1358 569 570 +3 570 1351 1358 +3 1345 1358 1351 +3 1351 570 572 +3 1358 1345 1359 +3 1359 1360 1358 +3 569 1358 1360 +3 1360 1359 1266 +3 1270 575 573 +3 573 1360 1270 +3 1266 1270 1360 +3 1360 573 569 +3 1267 1266 1359 +3 1359 1344 1267 +3 1268 1267 1344 +3 1344 1359 1345 +3 1361 1362 1363 +3 1362 1361 1364 +3 1365 1364 1361 +3 1364 1366 1362 +3 1361 1367 1365 +3 1367 1361 1368 +3 1363 1368 1361 +3 1368 1369 1367 +3 1370 1371 1372 +3 1371 1370 1368 +3 1369 1368 1370 +3 1368 1363 1371 +3 1373 1367 1369 +3 1367 1373 1374 +3 1375 1374 1373 +3 1374 1365 1367 +3 1376 1371 1363 +3 1371 1376 1377 +3 1378 1377 1376 +3 1377 1372 1371 +3 1376 1379 1378 +3 1379 1376 1380 +3 1363 1380 1376 +3 1380 1381 1379 +3 1382 1362 1366 +3 1362 1382 1380 +3 1381 1380 1382 +3 1380 1363 1362 +3 1383 1379 1381 +3 1379 1383 1384 +3 763 1384 1383 +3 1384 1378 1379 +3 1385 787 786 +3 787 1385 1386 +3 1387 1386 1385 +3 1386 695 787 +3 1385 1388 1387 +3 1388 1385 1389 +3 786 1389 1385 +3 1389 1381 1388 +3 1383 788 763 +3 788 1383 1389 +3 1381 1389 1383 +3 1389 786 788 +3 1382 1388 1381 +3 1388 1382 1390 +3 1366 1390 1382 +3 1390 1387 1388 +3 1391 762 761 +3 762 1391 1384 +3 1378 1384 1391 +3 1384 763 762 +3 1391 1392 1378 +3 1392 1391 1393 +3 761 1393 1391 +3 1393 1394 1392 +3 1395 765 767 +3 765 1395 1393 +3 1394 1393 1395 +3 1393 761 765 +3 1396 1392 1394 +3 1392 1396 1377 +3 1372 1377 1396 +3 1377 1378 1392 +3 1397 1398 1399 +3 1398 1397 1390 +3 1387 1390 1397 +3 1390 1366 1398 +3 1397 1400 1387 +3 1400 1397 1401 +3 1399 1401 1397 +3 1401 1402 1400 +3 1403 1404 1405 +3 1404 1403 1401 +3 1402 1401 1403 +3 1401 1399 1404 +3 1406 1400 1402 +3 1400 1406 1386 +3 695 1386 1406 +3 1386 1387 1400 +3 1407 1404 1399 +3 1404 1407 1408 +3 1409 1408 1407 +3 1408 1405 1404 +3 1407 1410 1409 +3 1410 1407 1411 +3 1399 1411 1407 +3 1411 1412 1410 +3 1413 1398 1366 +3 1398 1413 1411 +3 1412 1411 1413 +3 1411 1399 1398 +3 1414 1410 1412 +3 1410 1414 1415 +3 1416 1415 1414 +3 1415 1409 1410 +3 1417 1418 1419 +3 1418 1417 1374 +3 1365 1374 1417 +3 1374 1375 1418 +3 1417 1420 1365 +3 1420 1417 1421 +3 1419 1421 1417 +3 1421 1412 1420 +3 1414 1422 1416 +3 1422 1414 1421 +3 1412 1421 1414 +3 1421 1419 1422 +3 1413 1420 1412 +3 1420 1413 1364 +3 1366 1364 1413 +3 1364 1365 1420 +3 1423 1424 1425 +3 1424 1423 1415 +3 1409 1415 1423 +3 1415 1416 1424 +3 1423 1426 1409 +3 1426 1423 1427 +3 1425 1427 1423 +3 1427 1428 1426 +3 1429 1430 886 +3 1430 1429 1427 +3 1428 1427 1429 +3 1427 1425 1430 +3 1431 1426 1428 +3 1426 1431 1408 +3 1405 1408 1431 +3 1408 1409 1426 +3 1432 1433 1434 +3 1433 1432 892 +3 893 892 1432 +3 892 894 1433 +3 1432 1435 893 +3 1435 1432 1436 +3 1434 1436 1432 +3 1436 1437 1435 +3 1438 1439 1440 +3 1439 1438 1436 +3 1437 1436 1438 +3 1436 1434 1439 +3 1441 1435 1437 +3 1435 1441 902 +3 903 902 1441 +3 902 893 1435 +3 1442 1439 1434 +3 1439 1442 1443 +3 1444 1443 1442 +3 1443 1440 1439 +3 1442 1445 1444 +3 1445 1442 1446 +3 1434 1446 1442 +3 1446 1447 1445 +3 1448 1433 894 +3 1433 1448 1446 +3 1447 1446 1448 +3 1446 1434 1433 +3 1449 1445 1447 +3 1445 1449 1450 +3 1416 1450 1449 +3 1450 1444 1445 +3 1451 1430 1425 +3 1430 1451 914 +3 915 914 1451 +3 914 886 1430 +3 1451 1452 915 +3 1452 1451 1453 +3 1425 1453 1451 +3 1453 1447 1452 +3 1449 1424 1416 +3 1424 1449 1453 +3 1447 1453 1449 +3 1453 1425 1424 +3 1448 1452 1447 +3 1452 1448 918 +3 894 918 1448 +3 918 915 1452 +3 1454 1422 1419 +3 1422 1454 1450 +3 1444 1450 1454 +3 1450 1416 1422 +3 1454 1455 1444 +3 1455 1454 1456 +3 1419 1456 1454 +3 1456 1457 1455 +3 1458 1418 1375 +3 1418 1458 1456 +3 1457 1456 1458 +3 1456 1419 1418 +3 1459 1455 1457 +3 1455 1459 1443 +3 1440 1443 1459 +3 1443 1444 1455 +3 1460 1461 1462 +3 1461 1460 928 +3 929 928 1460 +3 928 930 1461 +3 1460 1463 929 +3 1463 1460 1464 +3 1462 1464 1460 +3 1464 1428 1463 +3 1431 1465 1405 +3 1465 1431 1464 +3 1428 1464 1431 +3 1464 1462 1465 +3 1429 1463 1428 +3 1463 1429 934 +3 886 934 1429 +3 934 929 1463 +3 1466 1465 1462 +3 1465 1466 1467 +3 1468 1467 1466 +3 1467 1405 1465 +3 1466 1469 1468 +3 1469 1466 1470 +3 1462 1470 1466 +3 1470 1471 1469 +3 1472 1461 930 +3 1461 1472 1470 +3 1471 1470 1472 +3 1470 1462 1461 +3 1473 1469 1471 +3 1469 1473 1474 +3 691 1474 1473 +3 1474 1468 1469 +3 1475 715 714 +3 715 1475 945 +3 946 945 1475 +3 945 43 715 +3 1475 1476 946 +3 1476 1475 1477 +3 714 1477 1475 +3 1477 1471 1476 +3 1473 716 691 +3 716 1473 1477 +3 1471 1477 1473 +3 1477 714 716 +3 1472 1476 1471 +3 1476 1472 949 +3 930 949 1472 +3 949 946 1476 +3 1478 690 689 +3 690 1478 1474 +3 1468 1474 1478 +3 1474 691 690 +3 1478 1479 1468 +3 1479 1478 1480 +3 689 1480 1478 +3 1480 1402 1479 +3 1406 693 695 +3 693 1406 1480 +3 1402 1480 1406 +3 1480 689 693 +3 1403 1479 1402 +3 1479 1403 1467 +3 1405 1467 1403 +3 1467 1468 1479 +3 1481 1482 1483 +3 1482 1481 1484 +3 1485 1484 1481 +3 1484 1486 1482 +3 1481 1487 1485 +3 1487 1481 1488 +3 1483 1488 1481 +3 1488 1489 1487 +3 1490 1491 1492 +3 1491 1490 1488 +3 1489 1488 1490 +3 1488 1483 1491 +3 1493 1487 1489 +3 1487 1493 1494 +3 1495 1494 1493 +3 1494 1485 1487 +3 1496 1491 1483 +3 1491 1496 1497 +3 1498 1497 1496 +3 1497 1492 1491 +3 1496 1499 1498 +3 1499 1496 1500 +3 1483 1500 1496 +3 1500 1501 1499 +3 1502 1482 1486 +3 1482 1502 1500 +3 1501 1500 1502 +3 1500 1483 1482 +3 1503 1499 1501 +3 1499 1503 1504 +3 899 1504 1503 +3 1504 1498 1499 +3 1505 923 922 +3 923 1505 1506 +3 1507 1506 1505 +3 1506 831 923 +3 1505 1508 1507 +3 1508 1505 1509 +3 922 1509 1505 +3 1509 1501 1508 +3 1503 924 899 +3 924 1503 1509 +3 1501 1509 1503 +3 1509 922 924 +3 1502 1508 1501 +3 1508 1502 1510 +3 1486 1510 1502 +3 1510 1507 1508 +3 1511 898 897 +3 898 1511 1504 +3 1498 1504 1511 +3 1504 899 898 +3 1511 1512 1498 +3 1512 1511 1513 +3 897 1513 1511 +3 1513 1514 1512 +3 1515 901 903 +3 901 1515 1513 +3 1514 1513 1515 +3 1513 897 901 +3 1516 1512 1514 +3 1512 1516 1497 +3 1492 1497 1516 +3 1497 1498 1512 +3 1517 1518 1519 +3 1518 1517 1510 +3 1507 1510 1517 +3 1510 1486 1518 +3 1517 1520 1507 +3 1520 1517 1521 +3 1519 1521 1517 +3 1521 1522 1520 +3 1523 1524 1525 +3 1524 1523 1521 +3 1522 1521 1523 +3 1521 1519 1524 +3 1526 1520 1522 +3 1520 1526 1506 +3 831 1506 1526 +3 1506 1507 1520 +3 1527 1524 1519 +3 1524 1527 1528 +3 1529 1528 1527 +3 1528 1525 1524 +3 1527 1530 1529 +3 1530 1527 1531 +3 1519 1531 1527 +3 1531 1532 1530 +3 1533 1518 1486 +3 1518 1533 1531 +3 1532 1531 1533 +3 1531 1519 1518 +3 1534 1530 1532 +3 1530 1534 1535 +3 1536 1535 1534 +3 1535 1529 1530 +3 1537 1538 1539 +3 1538 1537 1494 +3 1485 1494 1537 +3 1494 1495 1538 +3 1537 1540 1485 +3 1540 1537 1541 +3 1539 1541 1537 +3 1541 1532 1540 +3 1534 1542 1536 +3 1542 1534 1541 +3 1532 1541 1534 +3 1541 1539 1542 +3 1533 1540 1532 +3 1540 1533 1484 +3 1486 1484 1533 +3 1484 1485 1540 +3 1543 1544 1545 +3 1544 1543 1535 +3 1529 1535 1543 +3 1535 1536 1544 +3 1543 1546 1529 +3 1546 1543 1547 +3 1545 1547 1543 +3 1547 1548 1546 +3 1549 1550 1022 +3 1550 1549 1547 +3 1548 1547 1549 +3 1547 1545 1550 +3 1551 1546 1548 +3 1546 1551 1528 +3 1525 1528 1551 +3 1528 1529 1546 +3 1552 1553 1554 +3 1553 1552 1028 +3 1029 1028 1552 +3 1028 1030 1553 +3 1552 1555 1029 +3 1555 1552 1556 +3 1554 1556 1552 +3 1556 1557 1555 +3 1558 1559 1560 +3 1559 1558 1556 +3 1557 1556 1558 +3 1556 1554 1559 +3 1561 1555 1557 +3 1555 1561 1038 +3 1039 1038 1561 +3 1038 1029 1555 +3 1562 1559 1554 +3 1559 1562 1563 +3 1564 1563 1562 +3 1563 1560 1559 +3 1562 1565 1564 +3 1565 1562 1566 +3 1554 1566 1562 +3 1566 1567 1565 +3 1568 1553 1030 +3 1553 1568 1566 +3 1567 1566 1568 +3 1566 1554 1553 +3 1569 1565 1567 +3 1565 1569 1570 +3 1536 1570 1569 +3 1570 1564 1565 +3 1571 1550 1545 +3 1550 1571 1050 +3 1051 1050 1571 +3 1050 1022 1550 +3 1571 1572 1051 +3 1572 1571 1573 +3 1545 1573 1571 +3 1573 1567 1572 +3 1569 1544 1536 +3 1544 1569 1573 +3 1567 1573 1569 +3 1573 1545 1544 +3 1568 1572 1567 +3 1572 1568 1054 +3 1030 1054 1568 +3 1054 1051 1572 +3 1574 1542 1539 +3 1542 1574 1570 +3 1564 1570 1574 +3 1570 1536 1542 +3 1574 1575 1564 +3 1575 1574 1576 +3 1539 1576 1574 +3 1576 1577 1575 +3 1578 1538 1495 +3 1538 1578 1576 +3 1577 1576 1578 +3 1576 1539 1538 +3 1579 1575 1577 +3 1575 1579 1563 +3 1560 1563 1579 +3 1563 1564 1575 +3 1580 1581 1582 +3 1581 1580 1064 +3 1065 1064 1580 +3 1064 1066 1581 +3 1580 1583 1065 +3 1583 1580 1584 +3 1582 1584 1580 +3 1584 1548 1583 +3 1551 1585 1525 +3 1585 1551 1584 +3 1548 1584 1551 +3 1584 1582 1585 +3 1549 1583 1548 +3 1583 1549 1070 +3 1022 1070 1549 +3 1070 1065 1583 +3 1586 1585 1582 +3 1585 1586 1587 +3 1588 1587 1586 +3 1587 1525 1585 +3 1586 1589 1588 +3 1589 1586 1590 +3 1582 1590 1586 +3 1590 1591 1589 +3 1592 1581 1066 +3 1581 1592 1590 +3 1591 1590 1592 +3 1590 1582 1581 +3 1593 1589 1591 +3 1589 1593 1594 +3 827 1594 1593 +3 1594 1588 1589 +3 1595 851 850 +3 851 1595 1081 +3 1082 1081 1595 +3 1081 95 851 +3 1595 1596 1082 +3 1596 1595 1597 +3 850 1597 1595 +3 1597 1591 1596 +3 1593 852 827 +3 852 1593 1597 +3 1591 1597 1593 +3 1597 850 852 +3 1592 1596 1591 +3 1596 1592 1085 +3 1066 1085 1592 +3 1085 1082 1596 +3 1598 826 825 +3 826 1598 1594 +3 1588 1594 1598 +3 1594 827 826 +3 1598 1599 1588 +3 1599 1598 1600 +3 825 1600 1598 +3 1600 1522 1599 +3 1526 829 831 +3 829 1526 1600 +3 1522 1600 1526 +3 1600 825 829 +3 1523 1599 1522 +3 1599 1523 1587 +3 1525 1587 1523 +3 1587 1588 1599 +3 1601 1602 1603 +3 1602 1601 1604 +3 1605 1604 1601 +3 1604 1606 1602 +3 1601 1607 1605 +3 1607 1601 1608 +3 1603 1608 1601 +3 1608 1609 1607 +3 1610 1611 1612 +3 1611 1610 1608 +3 1609 1608 1610 +3 1608 1603 1611 +3 1613 1607 1609 +3 1607 1613 1614 +3 1615 1614 1613 +3 1614 1605 1607 +3 1616 1611 1603 +3 1611 1616 1617 +3 1618 1617 1616 +3 1617 1612 1611 +3 1616 1619 1618 +3 1619 1616 1620 +3 1603 1620 1616 +3 1620 1621 1619 +3 1622 1602 1606 +3 1602 1622 1620 +3 1621 1620 1622 +3 1620 1603 1602 +3 1623 1619 1621 +3 1619 1623 1624 +3 1035 1624 1623 +3 1624 1618 1619 +3 1625 1059 1058 +3 1059 1625 1626 +3 1627 1626 1625 +3 1626 967 1059 +3 1625 1628 1627 +3 1628 1625 1629 +3 1058 1629 1625 +3 1629 1621 1628 +3 1623 1060 1035 +3 1060 1623 1629 +3 1621 1629 1623 +3 1629 1058 1060 +3 1622 1628 1621 +3 1628 1622 1630 +3 1606 1630 1622 +3 1630 1627 1628 +3 1631 1034 1033 +3 1034 1631 1624 +3 1618 1624 1631 +3 1624 1035 1034 +3 1631 1632 1618 +3 1632 1631 1633 +3 1033 1633 1631 +3 1633 1634 1632 +3 1635 1037 1039 +3 1037 1635 1633 +3 1634 1633 1635 +3 1633 1033 1037 +3 1636 1632 1634 +3 1632 1636 1617 +3 1612 1617 1636 +3 1617 1618 1632 +3 1637 1638 1639 +3 1638 1637 1630 +3 1627 1630 1637 +3 1630 1606 1638 +3 1637 1640 1627 +3 1640 1637 1641 +3 1639 1641 1637 +3 1641 1642 1640 +3 1643 1644 1645 +3 1644 1643 1641 +3 1642 1641 1643 +3 1641 1639 1644 +3 1646 1640 1642 +3 1640 1646 1626 +3 967 1626 1646 +3 1626 1627 1640 +3 1647 1644 1639 +3 1644 1647 1648 +3 1649 1648 1647 +3 1648 1645 1644 +3 1647 1650 1649 +3 1650 1647 1651 +3 1639 1651 1647 +3 1651 1652 1650 +3 1653 1638 1606 +3 1638 1653 1651 +3 1652 1651 1653 +3 1651 1639 1638 +3 1654 1650 1652 +3 1650 1654 1655 +3 1656 1655 1654 +3 1655 1649 1650 +3 1657 1658 1659 +3 1658 1657 1614 +3 1605 1614 1657 +3 1614 1615 1658 +3 1657 1660 1605 +3 1660 1657 1661 +3 1659 1661 1657 +3 1661 1652 1660 +3 1654 1662 1656 +3 1662 1654 1661 +3 1652 1661 1654 +3 1661 1659 1662 +3 1653 1660 1652 +3 1660 1653 1604 +3 1606 1604 1653 +3 1604 1605 1660 +3 1663 1664 1665 +3 1664 1663 1655 +3 1649 1655 1663 +3 1655 1656 1664 +3 1663 1666 1649 +3 1666 1663 1667 +3 1665 1667 1663 +3 1667 1668 1666 +3 1669 1670 1158 +3 1670 1669 1667 +3 1668 1667 1669 +3 1667 1665 1670 +3 1671 1666 1668 +3 1666 1671 1648 +3 1645 1648 1671 +3 1648 1649 1666 +3 1672 1673 1674 +3 1673 1672 1164 +3 1165 1164 1672 +3 1164 1166 1673 +3 1672 1675 1165 +3 1675 1672 1676 +3 1674 1676 1672 +3 1676 1677 1675 +3 1678 1679 1680 +3 1679 1678 1676 +3 1677 1676 1678 +3 1676 1674 1679 +3 1681 1675 1677 +3 1675 1681 1174 +3 1175 1174 1681 +3 1174 1165 1675 +3 1682 1679 1674 +3 1679 1682 1683 +3 1684 1683 1682 +3 1683 1680 1679 +3 1682 1685 1684 +3 1685 1682 1686 +3 1674 1686 1682 +3 1686 1687 1685 +3 1688 1673 1166 +3 1673 1688 1686 +3 1687 1686 1688 +3 1686 1674 1673 +3 1689 1685 1687 +3 1685 1689 1690 +3 1656 1690 1689 +3 1690 1684 1685 +3 1691 1670 1665 +3 1670 1691 1186 +3 1187 1186 1691 +3 1186 1158 1670 +3 1691 1692 1187 +3 1692 1691 1693 +3 1665 1693 1691 +3 1693 1687 1692 +3 1689 1664 1656 +3 1664 1689 1693 +3 1687 1693 1689 +3 1693 1665 1664 +3 1688 1692 1687 +3 1692 1688 1190 +3 1166 1190 1688 +3 1190 1187 1692 +3 1694 1662 1659 +3 1662 1694 1690 +3 1684 1690 1694 +3 1690 1656 1662 +3 1694 1695 1684 +3 1695 1694 1696 +3 1659 1696 1694 +3 1696 1697 1695 +3 1698 1658 1615 +3 1658 1698 1696 +3 1697 1696 1698 +3 1696 1659 1658 +3 1699 1695 1697 +3 1695 1699 1683 +3 1680 1683 1699 +3 1683 1684 1695 +3 1700 1701 1702 +3 1701 1700 1200 +3 1201 1200 1700 +3 1200 1202 1701 +3 1700 1703 1201 +3 1703 1700 1704 +3 1702 1704 1700 +3 1704 1668 1703 +3 1671 1705 1645 +3 1705 1671 1704 +3 1668 1704 1671 +3 1704 1702 1705 +3 1669 1703 1668 +3 1703 1669 1206 +3 1158 1206 1669 +3 1206 1201 1703 +3 1706 1705 1702 +3 1705 1706 1707 +3 1708 1707 1706 +3 1707 1645 1705 +3 1706 1709 1708 +3 1709 1706 1710 +3 1702 1710 1706 +3 1710 1711 1709 +3 1712 1701 1202 +3 1701 1712 1710 +3 1711 1710 1712 +3 1710 1702 1701 +3 1713 1709 1711 +3 1709 1713 1714 +3 963 1714 1713 +3 1714 1708 1709 +3 1715 987 986 +3 987 1715 1217 +3 1218 1217 1715 +3 1217 375 987 +3 1715 1716 1218 +3 1716 1715 1717 +3 986 1717 1715 +3 1717 1711 1716 +3 1713 988 963 +3 988 1713 1717 +3 1711 1717 1713 +3 1717 986 988 +3 1712 1716 1711 +3 1716 1712 1221 +3 1202 1221 1712 +3 1221 1218 1716 +3 1718 962 961 +3 962 1718 1714 +3 1708 1714 1718 +3 1714 963 962 +3 1718 1719 1708 +3 1719 1718 1720 +3 961 1720 1718 +3 1720 1642 1719 +3 1646 965 967 +3 965 1646 1720 +3 1642 1720 1646 +3 1720 961 965 +3 1643 1719 1642 +3 1719 1643 1707 +3 1645 1707 1643 +3 1707 1708 1719 +3 1721 1722 1723 +3 1722 1721 1724 +3 1725 1724 1721 +3 1724 1726 1722 +3 1721 1727 1725 +3 1727 1721 1728 +3 1723 1728 1721 +3 1728 1729 1727 +3 1730 1731 1732 +3 1731 1730 1728 +3 1729 1728 1730 +3 1728 1723 1731 +3 1733 1727 1729 +3 1727 1733 1734 +3 1735 1734 1733 +3 1734 1725 1727 +3 1736 1731 1723 +3 1731 1736 1737 +3 1738 1737 1736 +3 1737 1732 1731 +3 1736 1739 1738 +3 1739 1736 1740 +3 1723 1740 1736 +3 1740 1741 1739 +3 1742 1722 1726 +3 1722 1742 1740 +3 1741 1740 1742 +3 1740 1723 1722 +3 1743 1739 1741 +3 1739 1743 1744 +3 1171 1744 1743 +3 1744 1738 1739 +3 1745 1195 1194 +3 1195 1745 1746 +3 1747 1746 1745 +3 1746 1103 1195 +3 1745 1748 1747 +3 1748 1745 1749 +3 1194 1749 1745 +3 1749 1741 1748 +3 1743 1196 1171 +3 1196 1743 1749 +3 1741 1749 1743 +3 1749 1194 1196 +3 1742 1748 1741 +3 1748 1742 1750 +3 1726 1750 1742 +3 1750 1747 1748 +3 1751 1170 1169 +3 1170 1751 1744 +3 1738 1744 1751 +3 1744 1171 1170 +3 1751 1752 1738 +3 1752 1751 1753 +3 1169 1753 1751 +3 1753 1754 1752 +3 1755 1173 1175 +3 1173 1755 1753 +3 1754 1753 1755 +3 1753 1169 1173 +3 1756 1752 1754 +3 1752 1756 1737 +3 1732 1737 1756 +3 1737 1738 1752 +3 1757 1758 1759 +3 1758 1757 1750 +3 1747 1750 1757 +3 1750 1726 1758 +3 1757 1760 1747 +3 1760 1757 1761 +3 1759 1761 1757 +3 1761 1762 1760 +3 1763 1764 1765 +3 1764 1763 1761 +3 1762 1761 1763 +3 1761 1759 1764 +3 1766 1760 1762 +3 1760 1766 1746 +3 1103 1746 1766 +3 1746 1747 1760 +3 1767 1764 1759 +3 1764 1767 1768 +3 1769 1768 1767 +3 1768 1765 1764 +3 1767 1770 1769 +3 1770 1767 1771 +3 1759 1771 1767 +3 1771 1772 1770 +3 1773 1758 1726 +3 1758 1773 1771 +3 1772 1771 1773 +3 1771 1759 1758 +3 1774 1770 1772 +3 1770 1774 1775 +3 1776 1775 1774 +3 1775 1769 1770 +3 1777 1778 1779 +3 1778 1777 1734 +3 1725 1734 1777 +3 1734 1735 1778 +3 1777 1780 1725 +3 1780 1777 1781 +3 1779 1781 1777 +3 1781 1772 1780 +3 1774 1782 1776 +3 1782 1774 1781 +3 1772 1781 1774 +3 1781 1779 1782 +3 1773 1780 1772 +3 1780 1773 1724 +3 1726 1724 1773 +3 1724 1725 1780 +3 1783 1784 1785 +3 1784 1783 1775 +3 1769 1775 1783 +3 1775 1776 1784 +3 1783 1786 1769 +3 1786 1783 1787 +3 1785 1787 1783 +3 1787 1788 1786 +3 1789 1790 1294 +3 1790 1789 1787 +3 1788 1787 1789 +3 1787 1785 1790 +3 1791 1786 1788 +3 1786 1791 1768 +3 1765 1768 1791 +3 1768 1769 1786 +3 1792 1793 1794 +3 1793 1792 1300 +3 1301 1300 1792 +3 1300 1302 1793 +3 1792 1795 1301 +3 1795 1792 1796 +3 1794 1796 1792 +3 1796 1797 1795 +3 1798 1799 1800 +3 1799 1798 1796 +3 1797 1796 1798 +3 1796 1794 1799 +3 1801 1795 1797 +3 1795 1801 1310 +3 1311 1310 1801 +3 1310 1301 1795 +3 1802 1799 1794 +3 1799 1802 1803 +3 1804 1803 1802 +3 1803 1800 1799 +3 1802 1805 1804 +3 1805 1802 1806 +3 1794 1806 1802 +3 1806 1807 1805 +3 1808 1793 1302 +3 1793 1808 1806 +3 1807 1806 1808 +3 1806 1794 1793 +3 1809 1805 1807 +3 1805 1809 1810 +3 1776 1810 1809 +3 1810 1804 1805 +3 1811 1790 1785 +3 1790 1811 1322 +3 1323 1322 1811 +3 1322 1294 1790 +3 1811 1812 1323 +3 1812 1811 1813 +3 1785 1813 1811 +3 1813 1807 1812 +3 1809 1784 1776 +3 1784 1809 1813 +3 1807 1813 1809 +3 1813 1785 1784 +3 1808 1812 1807 +3 1812 1808 1326 +3 1302 1326 1808 +3 1326 1323 1812 +3 1814 1782 1779 +3 1782 1814 1810 +3 1804 1810 1814 +3 1810 1776 1782 +3 1814 1815 1804 +3 1815 1814 1816 +3 1779 1816 1814 +3 1816 1817 1815 +3 1818 1778 1735 +3 1778 1818 1816 +3 1817 1816 1818 +3 1816 1779 1778 +3 1819 1815 1817 +3 1815 1819 1803 +3 1800 1803 1819 +3 1803 1804 1815 +3 1820 1821 1822 +3 1821 1820 1336 +3 1337 1336 1820 +3 1336 1338 1821 +3 1820 1823 1337 +3 1823 1820 1824 +3 1822 1824 1820 +3 1824 1788 1823 +3 1791 1825 1765 +3 1825 1791 1824 +3 1788 1824 1791 +3 1824 1822 1825 +3 1789 1823 1788 +3 1823 1789 1342 +3 1294 1342 1789 +3 1342 1337 1823 +3 1826 1825 1822 +3 1825 1826 1827 +3 1828 1827 1826 +3 1827 1765 1825 +3 1826 1829 1828 +3 1829 1826 1830 +3 1822 1830 1826 +3 1830 1831 1829 +3 1832 1821 1338 +3 1821 1832 1830 +3 1831 1830 1832 +3 1830 1822 1821 +3 1833 1829 1831 +3 1829 1833 1834 +3 1099 1834 1833 +3 1834 1828 1829 +3 1835 1123 1122 +3 1123 1835 1353 +3 1354 1353 1835 +3 1353 511 1123 +3 1835 1836 1354 +3 1836 1835 1837 +3 1122 1837 1835 +3 1837 1831 1836 +3 1833 1124 1099 +3 1124 1833 1837 +3 1831 1837 1833 +3 1837 1122 1124 +3 1832 1836 1831 +3 1836 1832 1357 +3 1338 1357 1832 +3 1357 1354 1836 +3 1838 1098 1097 +3 1098 1838 1834 +3 1828 1834 1838 +3 1834 1099 1098 +3 1838 1839 1828 +3 1839 1838 1840 +3 1097 1840 1838 +3 1840 1762 1839 +3 1766 1101 1103 +3 1101 1766 1840 +3 1762 1840 1766 +3 1840 1097 1101 +3 1763 1839 1762 +3 1839 1763 1827 +3 1765 1827 1763 +3 1827 1828 1839 +3 1841 1842 1843 +3 1842 1841 1844 +3 1845 1844 1841 +3 1844 1846 1842 +3 1841 1847 1845 +3 1847 1841 1848 +3 1843 1848 1841 +3 1848 1849 1847 +3 1850 1851 1852 +3 1851 1850 1848 +3 1849 1848 1850 +3 1848 1843 1851 +3 1853 1847 1849 +3 1847 1853 1854 +3 1855 1854 1853 +3 1854 1845 1847 +3 1856 1851 1843 +3 1851 1856 1857 +3 1858 1857 1856 +3 1857 1852 1851 +3 1856 1859 1858 +3 1859 1856 1860 +3 1843 1860 1856 +3 1860 1861 1859 +3 1862 1842 1846 +3 1842 1862 1860 +3 1861 1860 1862 +3 1860 1843 1842 +3 1863 1859 1861 +3 1859 1863 1864 +3 1307 1864 1863 +3 1864 1858 1859 +3 1865 1331 1330 +3 1331 1865 1866 +3 1867 1866 1865 +3 1866 1239 1331 +3 1865 1868 1867 +3 1868 1865 1869 +3 1330 1869 1865 +3 1869 1861 1868 +3 1863 1332 1307 +3 1332 1863 1869 +3 1861 1869 1863 +3 1869 1330 1332 +3 1862 1868 1861 +3 1868 1862 1870 +3 1846 1870 1862 +3 1870 1867 1868 +3 1871 1306 1305 +3 1306 1871 1864 +3 1858 1864 1871 +3 1864 1307 1306 +3 1871 1872 1858 +3 1872 1871 1873 +3 1305 1873 1871 +3 1873 1874 1872 +3 1875 1309 1311 +3 1309 1875 1873 +3 1874 1873 1875 +3 1873 1305 1309 +3 1876 1872 1874 +3 1872 1876 1857 +3 1852 1857 1876 +3 1857 1858 1872 +3 1877 1878 1879 +3 1878 1877 1870 +3 1867 1870 1877 +3 1870 1846 1878 +3 1877 1880 1867 +3 1880 1877 1881 +3 1879 1881 1877 +3 1881 1882 1880 +3 1883 1884 1885 +3 1884 1883 1881 +3 1882 1881 1883 +3 1881 1879 1884 +3 1886 1880 1882 +3 1880 1886 1866 +3 1239 1866 1886 +3 1866 1867 1880 +3 1887 1884 1879 +3 1884 1887 1888 +3 1889 1888 1887 +3 1888 1885 1884 +3 1887 1890 1889 +3 1890 1887 1891 +3 1879 1891 1887 +3 1891 1892 1890 +3 1893 1878 1846 +3 1878 1893 1891 +3 1892 1891 1893 +3 1891 1879 1878 +3 1894 1890 1892 +3 1890 1894 1895 +3 1896 1895 1894 +3 1895 1889 1890 +3 1897 1898 1899 +3 1898 1897 1854 +3 1845 1854 1897 +3 1854 1855 1898 +3 1897 1900 1845 +3 1900 1897 1901 +3 1899 1901 1897 +3 1901 1892 1900 +3 1894 1902 1896 +3 1902 1894 1901 +3 1892 1901 1894 +3 1901 1899 1902 +3 1893 1900 1892 +3 1900 1893 1844 +3 1846 1844 1893 +3 1844 1845 1900 +3 1903 1904 1905 +3 1904 1903 1895 +3 1889 1895 1903 +3 1895 1896 1904 +3 1903 1906 1889 +3 1906 1903 1907 +3 1905 1907 1903 +3 1907 1908 1906 +3 1909 1910 750 +3 1910 1909 1907 +3 1908 1907 1909 +3 1907 1905 1910 +3 1911 1906 1908 +3 1906 1911 1888 +3 1885 1888 1911 +3 1888 1889 1906 +3 1912 1913 1914 +3 1913 1912 756 +3 757 756 1912 +3 756 758 1913 +3 1912 1915 757 +3 1915 1912 1916 +3 1914 1916 1912 +3 1916 1917 1915 +3 1918 1919 1920 +3 1919 1918 1916 +3 1917 1916 1918 +3 1916 1914 1919 +3 1921 1915 1917 +3 1915 1921 766 +3 767 766 1921 +3 766 757 1915 +3 1922 1919 1914 +3 1919 1922 1923 +3 1924 1923 1922 +3 1923 1920 1919 +3 1922 1925 1924 +3 1925 1922 1926 +3 1914 1926 1922 +3 1926 1927 1925 +3 1928 1913 758 +3 1913 1928 1926 +3 1927 1926 1928 +3 1926 1914 1913 +3 1929 1925 1927 +3 1925 1929 1930 +3 1896 1930 1929 +3 1930 1924 1925 +3 1931 1910 1905 +3 1910 1931 778 +3 779 778 1931 +3 778 750 1910 +3 1931 1932 779 +3 1932 1931 1933 +3 1905 1933 1931 +3 1933 1927 1932 +3 1929 1904 1896 +3 1904 1929 1933 +3 1927 1933 1929 +3 1933 1905 1904 +3 1928 1932 1927 +3 1932 1928 782 +3 758 782 1928 +3 782 779 1932 +3 1934 1902 1899 +3 1902 1934 1930 +3 1924 1930 1934 +3 1930 1896 1902 +3 1934 1935 1924 +3 1935 1934 1936 +3 1899 1936 1934 +3 1936 1937 1935 +3 1938 1898 1855 +3 1898 1938 1936 +3 1937 1936 1938 +3 1936 1899 1898 +3 1939 1935 1937 +3 1935 1939 1923 +3 1920 1923 1939 +3 1923 1924 1935 +3 1940 1941 1942 +3 1941 1940 792 +3 793 792 1940 +3 792 794 1941 +3 1940 1943 793 +3 1943 1940 1944 +3 1942 1944 1940 +3 1944 1908 1943 +3 1911 1945 1885 +3 1945 1911 1944 +3 1908 1944 1911 +3 1944 1942 1945 +3 1909 1943 1908 +3 1943 1909 798 +3 750 798 1909 +3 798 793 1943 +3 1946 1945 1942 +3 1945 1946 1947 +3 1948 1947 1946 +3 1947 1885 1945 +3 1946 1949 1948 +3 1949 1946 1950 +3 1942 1950 1946 +3 1950 1951 1949 +3 1952 1941 794 +3 1941 1952 1950 +3 1951 1950 1952 +3 1950 1942 1941 +3 1953 1949 1951 +3 1949 1953 1954 +3 1235 1954 1953 +3 1954 1948 1949 +3 1955 1259 1258 +3 1259 1955 809 +3 810 809 1955 +3 809 239 1259 +3 1955 1956 810 +3 1956 1955 1957 +3 1258 1957 1955 +3 1957 1951 1956 +3 1953 1260 1235 +3 1260 1953 1957 +3 1951 1957 1953 +3 1957 1258 1260 +3 1952 1956 1951 +3 1956 1952 813 +3 794 813 1952 +3 813 810 1956 +3 1958 1234 1233 +3 1234 1958 1954 +3 1948 1954 1958 +3 1954 1235 1234 +3 1958 1959 1948 +3 1959 1958 1960 +3 1233 1960 1958 +3 1960 1882 1959 +3 1886 1237 1239 +3 1237 1886 1960 +3 1882 1960 1886 +3 1960 1233 1237 +3 1883 1959 1882 +3 1959 1883 1947 +3 1885 1947 1883 +3 1947 1948 1959 +3 1961 1962 1963 +3 1963 1964 1961 +3 1965 1961 1964 +3 1964 1963 1966 +3 1961 1965 1967 +3 1967 1968 1961 +3 1962 1961 1968 +3 1968 1967 1969 +3 1970 1971 1972 +3 1972 1968 1970 +3 1969 1970 1968 +3 1968 1972 1962 +3 1973 1969 1967 +3 1967 1974 1973 +3 1975 1973 1974 +3 1974 1967 1965 +3 1976 1962 1972 +3 1972 1977 1976 +3 1978 1976 1977 +3 1977 1972 1971 +3 1976 1978 1979 +3 1979 1980 1976 +3 1962 1976 1980 +3 1980 1979 1981 +3 1982 1966 1963 +3 1963 1980 1982 +3 1981 1982 1980 +3 1980 1963 1962 +3 1983 1981 1979 +3 1979 1984 1983 +3 1440 1983 1984 +3 1984 1979 1978 +3 1985 1457 1458 +3 1458 1986 1985 +3 1987 1985 1986 +3 1986 1458 1375 +3 1985 1987 1988 +3 1988 1989 1985 +3 1457 1985 1989 +3 1989 1988 1981 +3 1983 1440 1459 +3 1459 1989 1983 +3 1981 1983 1989 +3 1989 1459 1457 +3 1982 1981 1988 +3 1988 1990 1982 +3 1966 1982 1990 +3 1990 1988 1987 +3 1991 1437 1438 +3 1438 1984 1991 +3 1978 1991 1984 +3 1984 1438 1440 +3 1991 1978 1992 +3 1992 1993 1991 +3 1437 1991 1993 +3 1993 1992 1994 +3 1995 903 1441 +3 1441 1993 1995 +3 1994 1995 1993 +3 1993 1441 1437 +3 1996 1994 1992 +3 1992 1977 1996 +3 1971 1996 1977 +3 1977 1992 1978 +3 1997 1998 1999 +3 1999 1990 1997 +3 1987 1997 1990 +3 1990 1999 1966 +3 1997 1987 2000 +3 2000 2001 1997 +3 1998 1997 2001 +3 2001 2000 2002 +3 2003 2004 2005 +3 2005 2001 2003 +3 2002 2003 2001 +3 2001 2005 1998 +3 2006 2002 2000 +3 2000 1986 2006 +3 1375 2006 1986 +3 1986 2000 1987 +3 2007 1998 2005 +3 2005 2008 2007 +3 2009 2007 2008 +3 2008 2005 2004 +3 2007 2009 2010 +3 2010 2011 2007 +3 1998 2007 2011 +3 2011 2010 2012 +3 2013 1966 1999 +3 1999 2011 2013 +3 2012 2013 2011 +3 2011 1999 1998 +3 2014 2012 2010 +3 2010 2015 2014 +3 2016 2014 2015 +3 2015 2010 2009 +3 2017 2018 2019 +3 2019 1974 2017 +3 1965 2017 1974 +3 1974 2019 1975 +3 2017 1965 2020 +3 2020 2021 2017 +3 2018 2017 2021 +3 2021 2020 2012 +3 2014 2016 2022 +3 2022 2021 2014 +3 2012 2014 2021 +3 2021 2022 2018 +3 2013 2012 2020 +3 2020 1964 2013 +3 1966 2013 1964 +3 1964 2020 1965 +3 2023 2024 2025 +3 2025 2015 2023 +3 2009 2023 2015 +3 2015 2025 2016 +3 2023 2009 2026 +3 2026 2027 2023 +3 2024 2023 2027 +3 2027 2026 2028 +3 2029 2030 2031 +3 2031 2027 2029 +3 2028 2029 2027 +3 2027 2031 2024 +3 2032 2028 2026 +3 2026 2008 2032 +3 2004 2032 2008 +3 2008 2026 2009 +3 2033 2034 2035 +3 2035 2036 2033 +3 2037 2033 2036 +3 2036 2035 2038 +3 2033 2037 2039 +3 2039 2040 2033 +3 2034 2033 2040 +3 2040 2039 2041 +3 2042 2043 2044 +3 2044 2040 2042 +3 2041 2042 2040 +3 2040 2044 2034 +3 2045 2041 2039 +3 2039 2046 2045 +3 2047 2045 2046 +3 2046 2039 2037 +3 2048 2034 2044 +3 2044 2049 2048 +3 2050 2048 2049 +3 2049 2044 2043 +3 2048 2050 2051 +3 2051 2052 2048 +3 2034 2048 2052 +3 2052 2051 2053 +3 2054 2038 2035 +3 2035 2052 2054 +3 2053 2054 2052 +3 2052 2035 2034 +3 2055 2053 2051 +3 2051 2056 2055 +3 2016 2055 2056 +3 2056 2051 2050 +3 2057 2024 2031 +3 2031 2058 2057 +3 2059 2057 2058 +3 2058 2031 2030 +3 2057 2059 2060 +3 2060 2061 2057 +3 2024 2057 2061 +3 2061 2060 2053 +3 2055 2016 2025 +3 2025 2061 2055 +3 2053 2055 2061 +3 2061 2025 2024 +3 2054 2053 2060 +3 2060 2062 2054 +3 2038 2054 2062 +3 2062 2060 2059 +3 2063 2018 2022 +3 2022 2056 2063 +3 2050 2063 2056 +3 2056 2022 2016 +3 2063 2050 2064 +3 2064 2065 2063 +3 2018 2063 2065 +3 2065 2064 2066 +3 2067 1975 2019 +3 2019 2065 2067 +3 2066 2067 2065 +3 2065 2019 2018 +3 2068 2066 2064 +3 2064 2049 2068 +3 2043 2068 2049 +3 2049 2064 2050 +3 2069 2070 2071 +3 2071 2072 2069 +3 2073 2069 2072 +3 2072 2071 2074 +3 2069 2073 2075 +3 2075 2076 2069 +3 2070 2069 2076 +3 2076 2075 2028 +3 2032 2004 2077 +3 2077 2076 2032 +3 2028 2032 2076 +3 2076 2077 2070 +3 2029 2028 2075 +3 2075 2078 2029 +3 2030 2029 2078 +3 2078 2075 2073 +3 2079 2070 2077 +3 2077 2080 2079 +3 2081 2079 2080 +3 2080 2077 2004 +3 2079 2081 2082 +3 2082 2083 2079 +3 2070 2079 2083 +3 2083 2082 2084 +3 2085 2074 2071 +3 2071 2083 2085 +3 2084 2085 2083 +3 2083 2071 2070 +3 2086 2084 2082 +3 2082 2087 2086 +3 1372 2086 2087 +3 2087 2082 2081 +3 2088 1394 1395 +3 1395 2089 2088 +3 2090 2088 2089 +3 2089 1395 767 +3 2088 2090 2091 +3 2091 2092 2088 +3 1394 2088 2092 +3 2092 2091 2084 +3 2086 1372 1396 +3 1396 2092 2086 +3 2084 2086 2092 +3 2092 1396 1394 +3 2085 2084 2091 +3 2091 2093 2085 +3 2074 2085 2093 +3 2093 2091 2090 +3 2094 1369 1370 +3 1370 2087 2094 +3 2081 2094 2087 +3 2087 1370 1372 +3 2094 2081 2095 +3 2095 2096 2094 +3 1369 2094 2096 +3 2096 2095 2002 +3 2006 1375 1373 +3 1373 2096 2006 +3 2002 2006 2096 +3 2096 1373 1369 +3 2003 2002 2095 +3 2095 2080 2003 +3 2004 2003 2080 +3 2080 2095 2081 +3 2097 2098 2099 +3 2099 2100 2097 +3 2101 2097 2100 +3 2100 2099 2102 +3 2097 2101 2103 +3 2103 2104 2097 +3 2098 2097 2104 +3 2104 2103 2105 +3 2106 2107 2108 +3 2108 2104 2106 +3 2105 2106 2104 +3 2104 2108 2098 +3 2109 2105 2103 +3 2103 2110 2109 +3 2111 2109 2110 +3 2110 2103 2101 +3 2112 2098 2108 +3 2108 2113 2112 +3 2114 2112 2113 +3 2113 2108 2107 +3 2112 2114 2115 +3 2115 2116 2112 +3 2098 2112 2116 +3 2116 2115 2117 +3 2118 2102 2099 +3 2099 2116 2118 +3 2117 2118 2116 +3 2116 2099 2098 +3 2119 2117 2115 +3 2115 2120 2119 +3 1560 2119 2120 +3 2120 2115 2114 +3 2121 1577 1578 +3 1578 2122 2121 +3 2123 2121 2122 +3 2122 1578 1495 +3 2121 2123 2124 +3 2124 2125 2121 +3 1577 2121 2125 +3 2125 2124 2117 +3 2119 1560 1579 +3 1579 2125 2119 +3 2117 2119 2125 +3 2125 1579 1577 +3 2118 2117 2124 +3 2124 2126 2118 +3 2102 2118 2126 +3 2126 2124 2123 +3 2127 1557 1558 +3 1558 2120 2127 +3 2114 2127 2120 +3 2120 1558 1560 +3 2127 2114 2128 +3 2128 2129 2127 +3 1557 2127 2129 +3 2129 2128 2130 +3 2131 1039 1561 +3 1561 2129 2131 +3 2130 2131 2129 +3 2129 1561 1557 +3 2132 2130 2128 +3 2128 2113 2132 +3 2107 2132 2113 +3 2113 2128 2114 +3 2133 2134 2135 +3 2135 2126 2133 +3 2123 2133 2126 +3 2126 2135 2102 +3 2133 2123 2136 +3 2136 2137 2133 +3 2134 2133 2137 +3 2137 2136 2138 +3 2139 2140 2141 +3 2141 2137 2139 +3 2138 2139 2137 +3 2137 2141 2134 +3 2142 2138 2136 +3 2136 2122 2142 +3 1495 2142 2122 +3 2122 2136 2123 +3 2143 2134 2141 +3 2141 2144 2143 +3 2145 2143 2144 +3 2144 2141 2140 +3 2143 2145 2146 +3 2146 2147 2143 +3 2134 2143 2147 +3 2147 2146 2148 +3 2149 2102 2135 +3 2135 2147 2149 +3 2148 2149 2147 +3 2147 2135 2134 +3 2150 2148 2146 +3 2146 2151 2150 +3 2152 2150 2151 +3 2151 2146 2145 +3 2153 2154 2155 +3 2155 2110 2153 +3 2101 2153 2110 +3 2110 2155 2111 +3 2153 2101 2156 +3 2156 2157 2153 +3 2154 2153 2157 +3 2157 2156 2148 +3 2150 2152 2158 +3 2158 2157 2150 +3 2148 2150 2157 +3 2157 2158 2154 +3 2149 2148 2156 +3 2156 2100 2149 +3 2102 2149 2100 +3 2100 2156 2101 +3 2159 2160 2161 +3 2161 2151 2159 +3 2145 2159 2151 +3 2151 2161 2152 +3 2159 2145 2162 +3 2162 2163 2159 +3 2160 2159 2163 +3 2163 2162 2164 +3 2165 1975 2166 +3 2166 2163 2165 +3 2164 2165 2163 +3 2163 2166 2160 +3 2167 2164 2162 +3 2162 2144 2167 +3 2140 2167 2144 +3 2144 2162 2145 +3 2168 2169 2170 +3 2170 2042 2168 +3 2041 2168 2042 +3 2042 2170 2043 +3 2168 2041 2171 +3 2171 2172 2168 +3 2169 2168 2172 +3 2172 2171 2173 +3 2174 2175 2176 +3 2176 2172 2174 +3 2173 2174 2172 +3 2172 2176 2169 +3 2177 2173 2171 +3 2171 2045 2177 +3 2047 2177 2045 +3 2045 2171 2041 +3 2178 2169 2176 +3 2176 2179 2178 +3 2180 2178 2179 +3 2179 2176 2175 +3 2178 2180 2181 +3 2181 2182 2178 +3 2169 2178 2182 +3 2182 2181 2183 +3 2184 2043 2170 +3 2170 2182 2184 +3 2183 2184 2182 +3 2182 2170 2169 +3 2185 2183 2181 +3 2181 2186 2185 +3 2152 2185 2186 +3 2186 2181 2180 +3 2187 2160 2166 +3 2166 2067 2187 +3 2066 2187 2067 +3 2067 2166 1975 +3 2187 2066 2188 +3 2188 2189 2187 +3 2160 2187 2189 +3 2189 2188 2183 +3 2185 2152 2161 +3 2161 2189 2185 +3 2183 2185 2189 +3 2189 2161 2160 +3 2184 2183 2188 +3 2188 2068 2184 +3 2043 2184 2068 +3 2068 2188 2066 +3 2190 2154 2158 +3 2158 2186 2190 +3 2180 2190 2186 +3 2186 2158 2152 +3 2190 2180 2191 +3 2191 2192 2190 +3 2154 2190 2192 +3 2192 2191 2193 +3 2194 2111 2155 +3 2155 2192 2194 +3 2193 2194 2192 +3 2192 2155 2154 +3 2195 2193 2191 +3 2191 2179 2195 +3 2175 2195 2179 +3 2179 2191 2180 +3 2196 2197 2198 +3 2198 1970 2196 +3 1969 2196 1970 +3 1970 2198 1971 +3 2196 1969 2199 +3 2199 2200 2196 +3 2197 2196 2200 +3 2200 2199 2164 +3 2167 2140 2201 +3 2201 2200 2167 +3 2164 2167 2200 +3 2200 2201 2197 +3 2165 2164 2199 +3 2199 1973 2165 +3 1975 2165 1973 +3 1973 2199 1969 +3 2202 2197 2201 +3 2201 2203 2202 +3 2204 2202 2203 +3 2203 2201 2140 +3 2202 2204 2205 +3 2205 2206 2202 +3 2197 2202 2206 +3 2206 2205 2207 +3 2208 1971 2198 +3 2198 2206 2208 +3 2207 2208 2206 +3 2206 2198 2197 +3 2209 2207 2205 +3 2205 2210 2209 +3 1492 2209 2210 +3 2210 2205 2204 +3 2211 1514 1515 +3 1515 1995 2211 +3 1994 2211 1995 +3 1995 1515 903 +3 2211 1994 2212 +3 2212 2213 2211 +3 1514 2211 2213 +3 2213 2212 2207 +3 2209 1492 1516 +3 1516 2213 2209 +3 2207 2209 2213 +3 2213 1516 1514 +3 2208 2207 2212 +3 2212 1996 2208 +3 1971 2208 1996 +3 1996 2212 1994 +3 2214 1489 1490 +3 1490 2210 2214 +3 2204 2214 2210 +3 2210 1490 1492 +3 2214 2204 2215 +3 2215 2216 2214 +3 1489 2214 2216 +3 2216 2215 2138 +3 2142 1495 1493 +3 1493 2216 2142 +3 2138 2142 2216 +3 2216 1493 1489 +3 2139 2138 2215 +3 2215 2203 2139 +3 2140 2139 2203 +3 2203 2215 2204 +3 2217 2218 2219 +3 2219 2220 2217 +3 2221 2217 2220 +3 2220 2219 2222 +3 2217 2221 2223 +3 2223 2224 2217 +3 2218 2217 2224 +3 2224 2223 2225 +3 2226 2227 2228 +3 2228 2224 2226 +3 2225 2226 2224 +3 2224 2228 2218 +3 2229 2225 2223 +3 2223 2230 2229 +3 2231 2229 2230 +3 2230 2223 2221 +3 2232 2218 2228 +3 2228 2233 2232 +3 2234 2232 2233 +3 2233 2228 2227 +3 2232 2234 2235 +3 2235 2236 2232 +3 2218 2232 2236 +3 2236 2235 2237 +3 2238 2222 2219 +3 2219 2236 2238 +3 2237 2238 2236 +3 2236 2219 2218 +3 2239 2237 2235 +3 2235 2240 2239 +3 1680 2239 2240 +3 2240 2235 2234 +3 2241 1697 1698 +3 1698 2242 2241 +3 2243 2241 2242 +3 2242 1698 1615 +3 2241 2243 2244 +3 2244 2245 2241 +3 1697 2241 2245 +3 2245 2244 2237 +3 2239 1680 1699 +3 1699 2245 2239 +3 2237 2239 2245 +3 2245 1699 1697 +3 2238 2237 2244 +3 2244 2246 2238 +3 2222 2238 2246 +3 2246 2244 2243 +3 2247 1677 1678 +3 1678 2240 2247 +3 2234 2247 2240 +3 2240 1678 1680 +3 2247 2234 2248 +3 2248 2249 2247 +3 1677 2247 2249 +3 2249 2248 2250 +3 2251 1175 1681 +3 1681 2249 2251 +3 2250 2251 2249 +3 2249 1681 1677 +3 2252 2250 2248 +3 2248 2233 2252 +3 2227 2252 2233 +3 2233 2248 2234 +3 2253 2254 2255 +3 2255 2246 2253 +3 2243 2253 2246 +3 2246 2255 2222 +3 2253 2243 2256 +3 2256 2257 2253 +3 2254 2253 2257 +3 2257 2256 2258 +3 2259 2260 2261 +3 2261 2257 2259 +3 2258 2259 2257 +3 2257 2261 2254 +3 2262 2258 2256 +3 2256 2242 2262 +3 1615 2262 2242 +3 2242 2256 2243 +3 2263 2254 2261 +3 2261 2264 2263 +3 2265 2263 2264 +3 2264 2261 2260 +3 2263 2265 2266 +3 2266 2267 2263 +3 2254 2263 2267 +3 2267 2266 2268 +3 2269 2222 2255 +3 2255 2267 2269 +3 2268 2269 2267 +3 2267 2255 2254 +3 2270 2268 2266 +3 2266 2271 2270 +3 2272 2270 2271 +3 2271 2266 2265 +3 2273 2274 2275 +3 2275 2230 2273 +3 2221 2273 2230 +3 2230 2275 2231 +3 2273 2221 2276 +3 2276 2277 2273 +3 2274 2273 2277 +3 2277 2276 2268 +3 2270 2272 2278 +3 2278 2277 2270 +3 2268 2270 2277 +3 2277 2278 2274 +3 2269 2268 2276 +3 2276 2220 2269 +3 2222 2269 2220 +3 2220 2276 2221 +3 2279 2280 2281 +3 2281 2271 2279 +3 2265 2279 2271 +3 2271 2281 2272 +3 2279 2265 2282 +3 2282 2283 2279 +3 2280 2279 2283 +3 2283 2282 2284 +3 2285 2111 2286 +3 2286 2283 2285 +3 2284 2285 2283 +3 2283 2286 2280 +3 2287 2284 2282 +3 2282 2264 2287 +3 2260 2287 2264 +3 2264 2282 2265 +3 2288 2289 2290 +3 2290 2174 2288 +3 2173 2288 2174 +3 2174 2290 2175 +3 2288 2173 2291 +3 2291 2292 2288 +3 2289 2288 2292 +3 2292 2291 2293 +3 2294 2295 2296 +3 2296 2292 2294 +3 2293 2294 2292 +3 2292 2296 2289 +3 2297 2293 2291 +3 2291 2177 2297 +3 2047 2297 2177 +3 2177 2291 2173 +3 2298 2289 2296 +3 2296 2299 2298 +3 2300 2298 2299 +3 2299 2296 2295 +3 2298 2300 2301 +3 2301 2302 2298 +3 2289 2298 2302 +3 2302 2301 2303 +3 2304 2175 2290 +3 2290 2302 2304 +3 2303 2304 2302 +3 2302 2290 2289 +3 2305 2303 2301 +3 2301 2306 2305 +3 2272 2305 2306 +3 2306 2301 2300 +3 2307 2280 2286 +3 2286 2194 2307 +3 2193 2307 2194 +3 2194 2286 2111 +3 2307 2193 2308 +3 2308 2309 2307 +3 2280 2307 2309 +3 2309 2308 2303 +3 2305 2272 2281 +3 2281 2309 2305 +3 2303 2305 2309 +3 2309 2281 2280 +3 2304 2303 2308 +3 2308 2195 2304 +3 2175 2304 2195 +3 2195 2308 2193 +3 2310 2274 2278 +3 2278 2306 2310 +3 2300 2310 2306 +3 2306 2278 2272 +3 2310 2300 2311 +3 2311 2312 2310 +3 2274 2310 2312 +3 2312 2311 2313 +3 2314 2231 2275 +3 2275 2312 2314 +3 2313 2314 2312 +3 2312 2275 2274 +3 2315 2313 2311 +3 2311 2299 2315 +3 2295 2315 2299 +3 2299 2311 2300 +3 2316 2317 2318 +3 2318 2106 2316 +3 2105 2316 2106 +3 2106 2318 2107 +3 2316 2105 2319 +3 2319 2320 2316 +3 2317 2316 2320 +3 2320 2319 2284 +3 2287 2260 2321 +3 2321 2320 2287 +3 2284 2287 2320 +3 2320 2321 2317 +3 2285 2284 2319 +3 2319 2109 2285 +3 2111 2285 2109 +3 2109 2319 2105 +3 2322 2317 2321 +3 2321 2323 2322 +3 2324 2322 2323 +3 2323 2321 2260 +3 2322 2324 2325 +3 2325 2326 2322 +3 2317 2322 2326 +3 2326 2325 2327 +3 2328 2107 2318 +3 2318 2326 2328 +3 2327 2328 2326 +3 2326 2318 2317 +3 2329 2327 2325 +3 2325 2330 2329 +3 1612 2329 2330 +3 2330 2325 2324 +3 2331 1634 1635 +3 1635 2131 2331 +3 2130 2331 2131 +3 2131 1635 1039 +3 2331 2130 2332 +3 2332 2333 2331 +3 1634 2331 2333 +3 2333 2332 2327 +3 2329 1612 1636 +3 1636 2333 2329 +3 2327 2329 2333 +3 2333 1636 1634 +3 2328 2327 2332 +3 2332 2132 2328 +3 2107 2328 2132 +3 2132 2332 2130 +3 2334 1609 1610 +3 1610 2330 2334 +3 2324 2334 2330 +3 2330 1610 1612 +3 2334 2324 2335 +3 2335 2336 2334 +3 1609 2334 2336 +3 2336 2335 2258 +3 2262 1615 1613 +3 1613 2336 2262 +3 2258 2262 2336 +3 2336 1613 1609 +3 2259 2258 2335 +3 2335 2323 2259 +3 2260 2259 2323 +3 2323 2335 2324 +3 2337 2338 2339 +3 2339 2340 2337 +3 2341 2337 2340 +3 2340 2339 2342 +3 2337 2341 2343 +3 2343 2344 2337 +3 2338 2337 2344 +3 2344 2343 2345 +3 2346 2347 2348 +3 2348 2344 2346 +3 2345 2346 2344 +3 2344 2348 2338 +3 2349 2345 2343 +3 2343 2350 2349 +3 2351 2349 2350 +3 2350 2343 2341 +3 2352 2338 2348 +3 2348 2353 2352 +3 2354 2352 2353 +3 2353 2348 2347 +3 2352 2354 2355 +3 2355 2356 2352 +3 2338 2352 2356 +3 2356 2355 2357 +3 2358 2342 2339 +3 2339 2356 2358 +3 2357 2358 2356 +3 2356 2339 2338 +3 2359 2357 2355 +3 2355 2360 2359 +3 1800 2359 2360 +3 2360 2355 2354 +3 2361 1817 1818 +3 1818 2362 2361 +3 2363 2361 2362 +3 2362 1818 1735 +3 2361 2363 2364 +3 2364 2365 2361 +3 1817 2361 2365 +3 2365 2364 2357 +3 2359 1800 1819 +3 1819 2365 2359 +3 2357 2359 2365 +3 2365 1819 1817 +3 2358 2357 2364 +3 2364 2366 2358 +3 2342 2358 2366 +3 2366 2364 2363 +3 2367 1797 1798 +3 1798 2360 2367 +3 2354 2367 2360 +3 2360 1798 1800 +3 2367 2354 2368 +3 2368 2369 2367 +3 1797 2367 2369 +3 2369 2368 2370 +3 2371 1311 1801 +3 1801 2369 2371 +3 2370 2371 2369 +3 2369 1801 1797 +3 2372 2370 2368 +3 2368 2353 2372 +3 2347 2372 2353 +3 2353 2368 2354 +3 2373 2374 2375 +3 2375 2366 2373 +3 2363 2373 2366 +3 2366 2375 2342 +3 2373 2363 2376 +3 2376 2377 2373 +3 2374 2373 2377 +3 2377 2376 2378 +3 2379 2380 2381 +3 2381 2377 2379 +3 2378 2379 2377 +3 2377 2381 2374 +3 2382 2378 2376 +3 2376 2362 2382 +3 1735 2382 2362 +3 2362 2376 2363 +3 2383 2374 2381 +3 2381 2384 2383 +3 2385 2383 2384 +3 2384 2381 2380 +3 2383 2385 2386 +3 2386 2387 2383 +3 2374 2383 2387 +3 2387 2386 2388 +3 2389 2342 2375 +3 2375 2387 2389 +3 2388 2389 2387 +3 2387 2375 2374 +3 2390 2388 2386 +3 2386 2391 2390 +3 2392 2390 2391 +3 2391 2386 2385 +3 2393 2394 2395 +3 2395 2350 2393 +3 2341 2393 2350 +3 2350 2395 2351 +3 2393 2341 2396 +3 2396 2397 2393 +3 2394 2393 2397 +3 2397 2396 2388 +3 2390 2392 2398 +3 2398 2397 2390 +3 2388 2390 2397 +3 2397 2398 2394 +3 2389 2388 2396 +3 2396 2340 2389 +3 2342 2389 2340 +3 2340 2396 2341 +3 2399 2400 2401 +3 2401 2391 2399 +3 2385 2399 2391 +3 2391 2401 2392 +3 2399 2385 2402 +3 2402 2403 2399 +3 2400 2399 2403 +3 2403 2402 2404 +3 2405 2231 2406 +3 2406 2403 2405 +3 2404 2405 2403 +3 2403 2406 2400 +3 2407 2404 2402 +3 2402 2384 2407 +3 2380 2407 2384 +3 2384 2402 2385 +3 2408 2409 2410 +3 2410 2294 2408 +3 2293 2408 2294 +3 2294 2410 2295 +3 2408 2293 2411 +3 2411 2412 2408 +3 2409 2408 2412 +3 2412 2411 2413 +3 2414 2415 2416 +3 2416 2412 2414 +3 2413 2414 2412 +3 2412 2416 2409 +3 2417 2413 2411 +3 2411 2297 2417 +3 2047 2417 2297 +3 2297 2411 2293 +3 2418 2409 2416 +3 2416 2419 2418 +3 2420 2418 2419 +3 2419 2416 2415 +3 2418 2420 2421 +3 2421 2422 2418 +3 2409 2418 2422 +3 2422 2421 2423 +3 2424 2295 2410 +3 2410 2422 2424 +3 2423 2424 2422 +3 2422 2410 2409 +3 2425 2423 2421 +3 2421 2426 2425 +3 2392 2425 2426 +3 2426 2421 2420 +3 2427 2400 2406 +3 2406 2314 2427 +3 2313 2427 2314 +3 2314 2406 2231 +3 2427 2313 2428 +3 2428 2429 2427 +3 2400 2427 2429 +3 2429 2428 2423 +3 2425 2392 2401 +3 2401 2429 2425 +3 2423 2425 2429 +3 2429 2401 2400 +3 2424 2423 2428 +3 2428 2315 2424 +3 2295 2424 2315 +3 2315 2428 2313 +3 2430 2394 2398 +3 2398 2426 2430 +3 2420 2430 2426 +3 2426 2398 2392 +3 2430 2420 2431 +3 2431 2432 2430 +3 2394 2430 2432 +3 2432 2431 2433 +3 2434 2351 2395 +3 2395 2432 2434 +3 2433 2434 2432 +3 2432 2395 2394 +3 2435 2433 2431 +3 2431 2419 2435 +3 2415 2435 2419 +3 2419 2431 2420 +3 2436 2437 2438 +3 2438 2226 2436 +3 2225 2436 2226 +3 2226 2438 2227 +3 2436 2225 2439 +3 2439 2440 2436 +3 2437 2436 2440 +3 2440 2439 2404 +3 2407 2380 2441 +3 2441 2440 2407 +3 2404 2407 2440 +3 2440 2441 2437 +3 2405 2404 2439 +3 2439 2229 2405 +3 2231 2405 2229 +3 2229 2439 2225 +3 2442 2437 2441 +3 2441 2443 2442 +3 2444 2442 2443 +3 2443 2441 2380 +3 2442 2444 2445 +3 2445 2446 2442 +3 2437 2442 2446 +3 2446 2445 2447 +3 2448 2227 2438 +3 2438 2446 2448 +3 2447 2448 2446 +3 2446 2438 2437 +3 2449 2447 2445 +3 2445 2450 2449 +3 1732 2449 2450 +3 2450 2445 2444 +3 2451 1754 1755 +3 1755 2251 2451 +3 2250 2451 2251 +3 2251 1755 1175 +3 2451 2250 2452 +3 2452 2453 2451 +3 1754 2451 2453 +3 2453 2452 2447 +3 2449 1732 1756 +3 1756 2453 2449 +3 2447 2449 2453 +3 2453 1756 1754 +3 2448 2447 2452 +3 2452 2252 2448 +3 2227 2448 2252 +3 2252 2452 2250 +3 2454 1729 1730 +3 1730 2450 2454 +3 2444 2454 2450 +3 2450 1730 1732 +3 2454 2444 2455 +3 2455 2456 2454 +3 1729 2454 2456 +3 2456 2455 2378 +3 2382 1735 1733 +3 1733 2456 2382 +3 2378 2382 2456 +3 2456 1733 1729 +3 2379 2378 2455 +3 2455 2443 2379 +3 2380 2379 2443 +3 2443 2455 2444 +3 2457 2458 2459 +3 2459 2460 2457 +3 2461 2457 2460 +3 2460 2459 2462 +3 2457 2461 2463 +3 2463 2464 2457 +3 2458 2457 2464 +3 2464 2463 2073 +3 2072 2074 2465 +3 2465 2464 2072 +3 2073 2072 2464 +3 2464 2465 2458 +3 2078 2073 2463 +3 2463 2466 2078 +3 2030 2078 2466 +3 2466 2463 2461 +3 2467 2458 2465 +3 2465 2468 2467 +3 2469 2467 2468 +3 2468 2465 2074 +3 2467 2469 2470 +3 2470 2471 2467 +3 2458 2467 2471 +3 2471 2470 2472 +3 2473 2462 2459 +3 2459 2471 2473 +3 2472 2473 2471 +3 2471 2459 2458 +3 2474 2472 2470 +3 2470 2475 2474 +3 1920 2474 2475 +3 2475 2470 2469 +3 2476 1937 1938 +3 1938 2477 2476 +3 2478 2476 2477 +3 2477 1938 1855 +3 2476 2478 2479 +3 2479 2480 2476 +3 1937 2476 2480 +3 2480 2479 2472 +3 2474 1920 1939 +3 1939 2480 2474 +3 2472 2474 2480 +3 2480 1939 1937 +3 2473 2472 2479 +3 2479 2481 2473 +3 2462 2473 2481 +3 2481 2479 2478 +3 2482 1917 1918 +3 1918 2475 2482 +3 2469 2482 2475 +3 2475 1918 1920 +3 2482 2469 2483 +3 2483 2484 2482 +3 1917 2482 2484 +3 2484 2483 2090 +3 2089 767 1921 +3 1921 2484 2089 +3 2090 2089 2484 +3 2484 1921 1917 +3 2093 2090 2483 +3 2483 2468 2093 +3 2074 2093 2468 +3 2468 2483 2469 +3 2485 2486 2487 +3 2487 2481 2485 +3 2478 2485 2481 +3 2481 2487 2462 +3 2485 2478 2488 +3 2488 2489 2485 +3 2486 2485 2489 +3 2489 2488 2490 +3 2491 2492 2493 +3 2493 2489 2491 +3 2490 2491 2489 +3 2489 2493 2486 +3 2494 2490 2488 +3 2488 2477 2494 +3 1855 2494 2477 +3 2477 2488 2478 +3 2495 2486 2493 +3 2493 2496 2495 +3 2497 2495 2496 +3 2496 2493 2492 +3 2495 2497 2498 +3 2498 2499 2495 +3 2486 2495 2499 +3 2499 2498 2500 +3 2501 2462 2487 +3 2487 2499 2501 +3 2500 2501 2499 +3 2499 2487 2486 +3 2502 2500 2498 +3 2498 2503 2502 +3 2504 2502 2503 +3 2503 2498 2497 +3 2505 2506 2507 +3 2507 2466 2505 +3 2461 2505 2466 +3 2466 2507 2030 +3 2505 2461 2508 +3 2508 2509 2505 +3 2506 2505 2509 +3 2509 2508 2500 +3 2502 2504 2510 +3 2510 2509 2502 +3 2500 2502 2509 +3 2509 2510 2506 +3 2501 2500 2508 +3 2508 2460 2501 +3 2462 2501 2460 +3 2460 2508 2461 +3 2511 2512 2513 +3 2513 2503 2511 +3 2497 2511 2503 +3 2503 2513 2504 +3 2511 2497 2514 +3 2514 2515 2511 +3 2512 2511 2515 +3 2515 2514 2516 +3 2517 2351 2518 +3 2518 2515 2517 +3 2516 2517 2515 +3 2515 2518 2512 +3 2519 2516 2514 +3 2514 2496 2519 +3 2492 2519 2496 +3 2496 2514 2497 +3 2520 2521 2522 +3 2522 2414 2520 +3 2413 2520 2414 +3 2414 2522 2415 +3 2520 2413 2523 +3 2523 2524 2520 +3 2521 2520 2524 +3 2524 2523 2037 +3 2036 2038 2525 +3 2525 2524 2036 +3 2037 2036 2524 +3 2524 2525 2521 +3 2046 2037 2523 +3 2523 2417 2046 +3 2047 2046 2417 +3 2417 2523 2413 +3 2526 2521 2525 +3 2525 2527 2526 +3 2528 2526 2527 +3 2527 2525 2038 +3 2526 2528 2529 +3 2529 2530 2526 +3 2521 2526 2530 +3 2530 2529 2531 +3 2532 2415 2522 +3 2522 2530 2532 +3 2531 2532 2530 +3 2530 2522 2521 +3 2533 2531 2529 +3 2529 2534 2533 +3 2504 2533 2534 +3 2534 2529 2528 +3 2535 2512 2518 +3 2518 2434 2535 +3 2433 2535 2434 +3 2434 2518 2351 +3 2535 2433 2536 +3 2536 2537 2535 +3 2512 2535 2537 +3 2537 2536 2531 +3 2533 2504 2513 +3 2513 2537 2533 +3 2531 2533 2537 +3 2537 2513 2512 +3 2532 2531 2536 +3 2536 2435 2532 +3 2415 2532 2435 +3 2435 2536 2433 +3 2538 2506 2510 +3 2510 2534 2538 +3 2528 2538 2534 +3 2534 2510 2504 +3 2538 2528 2539 +3 2539 2540 2538 +3 2506 2538 2540 +3 2540 2539 2059 +3 2058 2030 2507 +3 2507 2540 2058 +3 2059 2058 2540 +3 2540 2507 2506 +3 2062 2059 2539 +3 2539 2527 2062 +3 2038 2062 2527 +3 2527 2539 2528 +3 2541 2542 2543 +3 2543 2346 2541 +3 2345 2541 2346 +3 2346 2543 2347 +3 2541 2345 2544 +3 2544 2545 2541 +3 2542 2541 2545 +3 2545 2544 2516 +3 2519 2492 2546 +3 2546 2545 2519 +3 2516 2519 2545 +3 2545 2546 2542 +3 2517 2516 2544 +3 2544 2349 2517 +3 2351 2517 2349 +3 2349 2544 2345 +3 2547 2542 2546 +3 2546 2548 2547 +3 2549 2547 2548 +3 2548 2546 2492 +3 2547 2549 2550 +3 2550 2551 2547 +3 2542 2547 2551 +3 2551 2550 2552 +3 2553 2347 2543 +3 2543 2551 2553 +3 2552 2553 2551 +3 2551 2543 2542 +3 2554 2552 2550 +3 2550 2555 2554 +3 1852 2554 2555 +3 2555 2550 2549 +3 2556 1874 1875 +3 1875 2371 2556 +3 2370 2556 2371 +3 2371 1875 1311 +3 2556 2370 2557 +3 2557 2558 2556 +3 1874 2556 2558 +3 2558 2557 2552 +3 2554 1852 1876 +3 1876 2558 2554 +3 2552 2554 2558 +3 2558 1876 1874 +3 2553 2552 2557 +3 2557 2372 2553 +3 2347 2553 2372 +3 2372 2557 2370 +3 2559 1849 1850 +3 1850 2555 2559 +3 2549 2559 2555 +3 2555 1850 1852 +3 2559 2549 2560 +3 2560 2561 2559 +3 1849 2559 2561 +3 2561 2560 2490 +3 2494 1855 1853 +3 1853 2561 2494 +3 2490 2494 2561 +3 2561 1853 1849 +3 2491 2490 2560 +3 2560 2548 2491 +3 2492 2491 2548 +3 2548 2560 2549 diff --git a/thirdparty/carve-1.4.0/data/maxplanck.ply b/thirdparty/carve-1.4.0/data/maxplanck.ply new file mode 100644 index 00000000..19b562d2 Binary files /dev/null and b/thirdparty/carve-1.4.0/data/maxplanck.ply differ diff --git a/thirdparty/carve-1.4.0/data/shells.ply b/thirdparty/carve-1.4.0/data/shells.ply new file mode 100644 index 00000000..14c25430 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/shells.ply @@ -0,0 +1,153649 @@ +ply +format ascii 1.0 +element vertex 51240 +property double x +property double y +property double z +element face 102400 +property list uchar ushort vertex_indices +end_header +-1 0 0 +-0.997437000274658203125 -0.04067499935626983642578125 -0.058866001665592193603515625 +-0.997437000274658203125 0.04067499935626983642578125 -0.058866001665592193603515625 +-0.9969170093536376953125 -0.078458003699779510498046875 0 +-0.9969170093536376953125 0.078458003699779510498046875 0 +-0.99667298793792724609375 -0.04129900038242340087890625 0.0702629983425140380859375 +-0.99667298793792724609375 0.04129900038242340087890625 0.0702629983425140380859375 +-0.993035018444061279296875 0 -0.11781899631023406982421875 +-0.991138994693756103515625 -0.1190769970417022705078125 -0.058857999742031097412109375 +-0.991138994693756103515625 0.1190769970417022705078125 -0.058857999742031097412109375 +-0.990315020084381103515625 -0.11975400149822235107421875 0.070249997079372406005859375 +-0.990315020084381103515625 0.11975400149822235107421875 0.070249997079372406005859375 +-0.990076005458831787109375 0 0.14053599536418914794921875 +-0.98976099491119384765625 -0.081141002476215362548828125 -0.1174300014972686767578125 +-0.98976099491119384765625 0.081141002476215362548828125 -0.1174300014972686767578125 +-0.98768901824951171875 -0.1564320027828216552734375 0 +-0.98768901824951171875 0.1564320027828216552734375 0 +-0.986715018749237060546875 -0.08232200145721435546875 0.140058994293212890625 +-0.986715018749237060546875 0.08232200145721435546875 0.140058994293212890625 +-0.9833819866180419921875 -0.0406769998371601104736328125 -0.17693300545215606689453125 +-0.9833819866180419921875 0.0406769998371601104736328125 -0.17693300545215606689453125 +-0.980130970478057861328125 -0.15961100161075592041015625 -0.117757998406887054443359375 +-0.980130970478057861328125 0.15961100161075592041015625 -0.117757998406887054443359375 +-0.97858202457427978515625 -0.197272002696990966796875 -0.0588279999792575836181640625 +-0.97858202457427978515625 0.197272002696990966796875 -0.0588279999792575836181640625 +-0.977639973163604736328125 -0.19822399318218231201171875 0.070197999477386474609375 +-0.977639973163604736328125 0.19822399318218231201171875 0.070197999477386474609375 +-0.977011024951934814453125 -0.121191002428531646728515625 -0.1753920018672943115234375 +-0.977011024951934814453125 0.121191002428531646728515625 -0.1753920018672943115234375 +-0.976912021636962890625 -0.161004006862640380859375 0.14043100178241729736328125 +-0.976912021636962890625 0.161004006862640380859375 0.14043100178241729736328125 +-0.976656019687652587890625 -0.0413010008633136749267578125 0.2108030021190643310546875 +-0.976656019687652587890625 0.0413010008633136749267578125 0.2108030021190643310546875 +-0.97237098217010498046875 -0.23344199359416961669921875 0 +-0.97237098217010498046875 0.23344199359416961669921875 0 +-0.97187101840972900390625 0 -0.2355130016803741455078125 +-0.970192015171051025390625 -0.122799001634120941162109375 0.2089219987392425537109375 +-0.970192015171051025390625 0.122799001634120941162109375 0.2089219987392425537109375 +-0.96871101856231689453125 -0.080572001636028289794921875 -0.234746992588043212890625 +-0.96871101856231689453125 0.080572001636028289794921875 -0.234746992588043212890625 +-0.964375972747802734375 -0.23708300292491912841796875 -0.11734999716281890869140625 +-0.964375972747802734375 0.23708300292491912841796875 -0.11734999716281890869140625 +-0.964121997356414794921875 -0.199328005313873291015625 -0.175321996212005615234375 +-0.964121997356414794921875 0.199328005313873291015625 -0.175321996212005615234375 +-0.960967004299163818359375 -0.23867399990558624267578125 0.13992099463939666748046875 +-0.960967004299163818359375 0.23867399990558624267578125 0.13992099463939666748046875 +-0.96001398563385009765625 -0.2737030088901519775390625 -0.05881600081920623779296875 +-0.96001398563385009765625 0.2737030088901519775390625 -0.05881600081920623779296875 +-0.959966003894805908203125 0 0.2801170051097869873046875 +-0.959253013134002685546875 -0.1606200039386749267578125 -0.23245500028133392333984375 +-0.959253013134002685546875 0.1606200039386749267578125 -0.23245500028133392333984375 +-0.95896899700164794921875 -0.2746900022029876708984375 0.070176996290683746337890625 +-0.95896899700164794921875 0.2746900022029876708984375 0.070176996290683746337890625 +-0.957040011882781982421875 -0.201186001300811767578125 0.20880199968814849853515625 +-0.957040011882781982421875 0.201186001300811767578125 0.20880199968814849853515625 +-0.956772029399871826171875 -0.081500001251697540283203125 0.279184997081756591796875 +-0.956772029399871826171875 0.081500001251697540283203125 0.279184997081756591796875 +-0.956157028675079345703125 -0.040642000734806060791015625 -0.290021002292633056640625 +-0.956157028675079345703125 0.040642000734806060791015625 -0.290021002292633056640625 +-0.951057970523834228515625 -0.30901300907135009765625 0 +-0.951057970523834228515625 0.30901300907135009765625 0 +-0.949999999999999955591079014994 0 0 +-0.94979298114776611328125 -0.1211419999599456787109375 -0.28847599029541015625 +-0.94979298114776611328125 0.1211419999599456787109375 -0.28847599029541015625 +-0.947565150260925248559829014994 -0.0386412493884563459922709682814 -0.0559227015823125783722247206242 +-0.947565150260925248559829014994 0.0386412493884563459922709682814 -0.0559227015823125783722247206242 +-0.947212994098663330078125 -0.162458002567291259765625 0.2763960063457489013671875 +-0.947212994098663330078125 0.162458002567291259765625 0.2763960063457489013671875 +-0.947071158885955721729033029987 -0.07453510351479053497314453125 0 +-0.947071158885955721729033029987 0.07453510351479053497314453125 0 +-0.946839338541030861584602007497 -0.0392340503633022280594033759371 0.066749848425388336181640625 +-0.946839338541030861584602007497 0.0392340503633022280594033759371 0.066749848425388336181640625 +-0.945115983486175537109375 -0.2673780024051666259765625 -0.18779100477695465087890625 +-0.945115983486175537109375 0.2673780024051666259765625 -0.18779100477695465087890625 +-0.94351100921630859375 -0.3052090108394622802734375 -0.12897099554538726806640625 +-0.94351100921630859375 0.3052090108394622802734375 -0.12897099554538726806640625 +-0.943383267521858193127570757497 0 -0.111928046494722363557450250937 +-0.942717015743255615234375 -0.3076550066471099853515625 0.12897099554538726806640625 +-0.942717015743255615234375 0.3076550066471099853515625 0.12897099554538726806640625 +-0.942014992237091064453125 -0.2288970053195953369140625 -0.24538500607013702392578125 +-0.942014992237091064453125 0.2288970053195953369140625 -0.24538500607013702392578125 +-0.94189798831939697265625 -0.2706229984760284423828125 0.19897399842739105224609375 +-0.94189798831939697265625 0.2706229984760284423828125 0.19897399842739105224609375 +-0.941582044959068276135383257497 -0.113123147189617148655749190311 -0.0559150997549295383781675639057 +-0.941582044959068276135383257497 0.113123147189617148655749190311 -0.0559150997549295383781675639057 +-0.940799269080161981726462272491 -0.1137663014233112335205078125 0.06673749722540378570556640625 +-0.940799269080161981726462272491 0.1137663014233112335205078125 0.06673749722540378570556640625 +-0.940572205185890131140524772491 0 0.133509195595979679449527566248 +-0.940272945165634088660056022491 -0.0770839523524045888702715956242 -0.111558501422405240144364313437 +-0.940272945165634088660056022491 0.0770839523524045888702715956242 -0.111558501422405240144364313437 +-0.938877999782562255859375 0 -0.3442490100860595703125 +-0.938304567337036043994658029987 -0.148610402643680555856420255623 0 +-0.938304567337036043994658029987 0.148610402643680555856420255623 0 +-0.938000023365020751953125 -0.0412500016391277313232421875 0.344173014163970947265625 +-0.938000023365020751953125 0.0412500016391277313232421875 0.344173014163970947265625 +-0.93754899501800537109375 -0.3428440093994140625 0.05881600081920623779296875 +-0.93754899501800537109375 0.3428440093994140625 0.05881600081920623779296875 +-0.937379267811775163110610264994 -0.0782059013843536404708700615629 0.13305604457855224609375 +-0.937379267811775163110610264994 0.0782059013843536404708700615629 0.13305604457855224609375 +-0.937282979488372802734375 -0.3414309918880462646484375 -0.070176996290683746337890625 +-0.937282979488372802734375 0.3414309918880462646484375 -0.070176996290683746337890625 +-0.935787022113800048828125 -0.0810849964618682861328125 -0.343115985393524169921875 +-0.935787022113800048828125 0.0810849964618682861328125 -0.343115985393524169921875 +-0.935123980045318603515625 -0.2324520051479339599609375 0.267412006855010986328125 +-0.935123980045318603515625 0.2324520051479339599609375 0.267412006855010986328125 +-0.934212887287139803760283029987 -0.0386431498453021007866148295307 -0.168086355179548257998689564374 +-0.934212887287139803760283029987 0.0386431498453021007866148295307 -0.168086355179548257998689564374 +-0.933991014957427978515625 -0.1874299943447113037109375 -0.3041889965534210205078125 +-0.933991014957427978515625 0.1874299943447113037109375 -0.3041889965534210205078125 +-0.9315459728240966796875 -0.122727997601032257080078125 0.34228599071502685546875 +-0.9315459728240966796875 0.122727997601032257080078125 0.34228599071502685546875 +-0.931124421954154901648337272491 -0.151630451530218118838533314374 -0.111870098486542696170076283124 +-0.931124421954154901648337272491 0.151630451530218118838533314374 -0.111870098486542696170076283124 +-0.929652923345565707080595529987 -0.18740840256214141845703125 -0.0558865999802947016616982978121 +-0.929652923345565707080595529987 0.18740840256214141845703125 -0.0558865999802947016616982978121 +-0.928757974505424410693876779987 -0.188312793523073174206672319997 0.0666880995035171453277911268742 +-0.928757974505424410693876779987 0.188312793523073174206672319997 0.0666880995035171453277911268742 +-0.92816047370433807373046875 -0.115131452307105058840974720624 -0.166622401773929590396150501874 +-0.92816047370433807373046875 0.115131452307105058840974720624 -0.166622401773929590396150501874 +-0.928066420555114679480368522491 -0.152953806519508350714176003748 0.1334094516932964324951171875 +-0.928066420555114679480368522491 0.152953806519508350714176003748 0.1334094516932964324951171875 +-0.927823218703269891882712272491 -0.0392359508201479897926411410936 0.200262852013111114501953125 +-0.927823218703269891882712272491 0.0392359508201479897926411410936 0.200262852013111114501953125 +-0.923880994319915771484375 -0.382679998874664306640625 0 +-0.923880994319915771484375 0.382679998874664306640625 0 +-0.923752433061599709240852007497 -0.221769893914461113659797319997 0 +-0.923752433061599709240852007497 0.221769893914461113659797319997 0 +-0.9232774674892425537109375 0 -0.223737351596355438232421875 +-0.921907007694244384765625 -0.19177700579166412353515625 0.33661401271820068359375 +-0.921907007694244384765625 0.19177700579166412353515625 0.33661401271820068359375 +-0.921778023242950439453125 -0.339204013347625732421875 0.18779100477695465087890625 +-0.921778023242950439453125 0.339204013347625732421875 0.18779100477695465087890625 +-0.921682414412498429712172764994 -0.116659051552414891328446344687 0.198475898802280420474275501874 +-0.921682414412498429712172764994 0.116659051552414891328446344687 0.198475898802280420474275501874 +-0.921464979648590087890625 -0.147412002086639404296875 -0.359405994415283203125 +-0.921464979648590087890625 0.147412002086639404296875 -0.359405994415283203125 +-0.921082973480224609375 -0.334688007831573486328125 -0.19897399842739105224609375 +-0.921082973480224609375 0.334688007831573486328125 -0.19897399842739105224609375 +-0.920275467634200983191306022491 -0.0765434015542268697540606581242 -0.223009642958641035592748380623 +-0.920275467634200983191306022491 0.0765434015542268697540606581242 -0.223009642958641035592748380623 +-0.91994798183441162109375 -0.2960020005702972412109375 -0.2570579946041107177734375 +-0.91994798183441162109375 0.2960020005702972412109375 -0.2570579946041107177734375 +-0.9195539951324462890625 -0.3750340044498443603515625 0.11734999716281890869140625 +-0.9195539951324462890625 0.3750340044498443603515625 0.11734999716281890869140625 +-0.918241024017333984375 -0.3012549877166748046875 0.2570579946041107177734375 +-0.918241024017333984375 0.3012549877166748046875 0.2570579946041107177734375 +-0.91772997379302978515625 -0.3717440068721771240234375 -0.13992099463939666748046875 +-0.91772997379302978515625 0.3717440068721771240234375 -0.13992099463939666748046875 +-0.91730201244354248046875 -0.0406400002539157867431640625 -0.39611399173736572265625 +-0.91730201244354248046875 0.0406400002539157867431640625 -0.39611399173736572265625 +-0.916157174110412531042868522491 -0.225228852778673160894840066248 -0.1114824973046779632568359375 +-0.916157174110412531042868522491 0.225228852778673160894840066248 -0.1114824973046779632568359375 +-0.915915897488594032971320757497 -0.189361605048179615362613503748 -0.16655589640140533447265625 +-0.915915897488594032971320757497 0.189361605048179615362613503748 -0.16655589640140533447265625 +-0.913685977458953857421875 -0.2551769912242889404296875 -0.3163270056247711181640625 +-0.913685977458953857421875 0.2551769912242889404296875 -0.3163270056247711181640625 +-0.913230001926422119140625 0 0.4074459969997406005859375 +-0.912918654084205583032485264994 -0.226740299910306919439761941248 0.132924944907426817453099943123 +-0.912918654084205583032485264994 0.226740299910306919439761941248 0.132924944907426817453099943123 +-0.912013286352157503955595529987 -0.260017858445644345355418636245 -0.0558752007782459259033203125 +-0.912013286352157503955595529987 0.260017858445644345355418636245 -0.0558752007782459259033203125 +-0.911967703700065523975126779987 0 0.266111154854297649041683371252 +-0.91129036247730255126953125 -0.152589003741741169317691628748 -0.220832250267267216070621316248 +-0.91129036247730255126953125 0.152589003741741169317691628748 -0.220832250267267216070621316248 +-0.9110205471515655517578125 -0.260955502092838298455745871252 0.0666681464761495617965536553129 +-0.9110205471515655517578125 0.260955502092838298455745871252 0.0666681464761495617965536553129 +-0.9101359844207763671875 -0.082240998744964599609375 0.4060649871826171875 +-0.9101359844207763671875 0.082240998744964599609375 0.4060649871826171875 +-0.909188011288642794482939279987 -0.191126701235771162545873380623 0.1983618997037410736083984375 +-0.909188011288642794482939279987 0.191126701235771162545873380623 0.1983618997037410736083984375 +-0.908933427929878190454360264994 -0.07742500118911266326904296875 0.265225747227668728900340511245 +-0.908933427929878190454360264994 0.07742500118911266326904296875 0.265225747227668728900340511245 +-0.908349177241325356213508257497 -0.0386099006980657535881285014057 -0.27551995217800140380859375 +-0.908349177241325356213508257497 0.0386099006980657535881285014057 -0.27551995217800140380859375 +-0.908052027225494384765625 -0.2615469992160797119140625 0.327161014080047607421875 +-0.908052027225494384765625 0.2615469992160797119140625 0.327161014080047607421875 +-0.907646000385284423828125 -0.4155929982662200927734375 0.0588279999792575836181640625 +-0.907646000385284423828125 0.4155929982662200927734375 0.0588279999792575836181640625 +-0.907442986965179443359375 -0.4142690002918243408203125 -0.070197999477386474609375 +-0.907442986965179443359375 0.4142690002918243408203125 -0.070197999477386474609375 +-0.90427601337432861328125 -0.106493003666400909423828125 -0.413453996181488037109375 +-0.90427601337432861328125 0.106493003666400909423828125 -0.413453996181488037109375 +-0.90350507199764251708984375 -0.293562358617782570568977007497 0 +-0.90350507199764251708984375 0.293562358617782570568977007497 0 +-0.903204977512359619140625 -0.15154699981212615966796875 0.40156400203704833984375 +-0.903204977512359619140625 0.15154699981212615966796875 0.40156400203704833984375 +-0.90265500545501708984375 -0.21302099525928497314453125 -0.3739449977874755859375 +-0.90265500545501708984375 0.21302099525928497314453125 -0.3739449977874755859375 +-0.902303332090377718799345529987 -0.115084899961948386448717940311 -0.274052190780639637335269753748 +-0.902303332090377718799345529987 0.115084899961948386448717940311 -0.274052190780639637335269753748 +-0.900000000000000022204460492503 0 0 +-0.899852344393730074756376779987 -0.154335102438926702328458873126 0.262576206028461434094367632497 +-0.899852344393730074756376779987 0.154335102438926702328458873126 0.262576206028461434094367632497 +-0.89786018431186676025390625 -0.254009102284908305779964621252 -0.178401454538106907232730691248 +-0.89786018431186676025390625 0.254009102284908305779964621252 -0.178401454538106907232730691248 +-0.897693300247192405016960492503 -0.0366074994206428555587606865629 -0.0529794014990329770187216240629 +-0.897693300247192405016960492503 0.0366074994206428555587606865629 -0.0529794014990329770187216240629 +-0.897225308418273970190170985006 -0.0706122033298015594482421875 0 +-0.897225308418273970190170985006 0.0706122033298015594482421875 0 +-0.8971560001373291015625 -0.40542900562286376953125 0.17532299458980560302734375 +-0.8971560001373291015625 0.40542900562286376953125 0.17532299458980560302734375 +-0.897005689144134588097756477509 -0.0371691003441810621787944057814 0.06323669850826263427734375 +-0.897005689144134588097756477509 0.0371691003441810621787944057814 0.06323669850826263427734375 +-0.8966510295867919921875 -0.36851298809051513671875 0.24538600444793701171875 +-0.8966510295867919921875 0.36851298809051513671875 0.24538600444793701171875 +-0.896335458755493141858039507497 -0.289948560297489166259765625 -0.122522445768117896336413252811 +-0.896335458755493141858039507497 0.289948560297489166259765625 -0.122522445768117896336413252811 +-0.895581164956092745654814279987 -0.292272256314754452777293636245 0.122522445768117896336413252811 +-0.895581164956092745654814279987 0.292272256314754452777293636245 0.122522445768117896336413252811 +-0.894914242625236444617087272491 -0.217452155053615564517244251874 -0.233115755766630156076146818123 +-0.894914242625236444617087272491 0.217452155053615564517244251874 -0.233115755766630156076146818123 +-0.894803088903427079614516514994 -0.257091848552226998059211382497 0.189025298506021482980443693123 +-0.894803088903427079614516514994 0.257091848552226998059211382497 0.189025298506021482980443693123 +-0.894424974918365478515625 0 -0.4472149908542633056640625 +-0.893731516599655217980568977509 0 -0.106037096679210671168469559689 +-0.89316499233245849609375 -0.361589014530181884765625 -0.267412006855010986328125 +-0.89316499233245849609375 0.361589014530181884765625 -0.267412006855010986328125 +-0.892517983913421630859375 -0.3997650146484375 -0.20880199968814849853515625 +-0.892517983913421630859375 0.3997650146484375 -0.20880199968814849853515625 +-0.892025095224380559777443977509 -0.107169297337532040681473688437 -0.0529721997678279862831196567186 +-0.892025095224380559777443977509 0.107169297337532040681473688437 -0.0529721997678279862831196567186 +-0.891934099793434076453024772491 0 -0.327036559581756591796875 +-0.8918750286102294921875 -0.2201139926910400390625 0.3951070010662078857421875 +-0.8918750286102294921875 0.2201139926910400390625 0.3951070010662078857421875 +-0.891283518075942970959602007497 -0.107778601348400115966796875 0.0632249973714351654052734375 +-0.891283518075942970959602007497 0.107778601348400115966796875 0.0632249973714351654052734375 +-0.891100022196769647742087272491 -0.0391875015571713433693012973436 0.32696436345577239990234375 +-0.891100022196769647742087272491 0.0391875015571713433693012973436 0.32696436345577239990234375 +-0.891068404912948586193977007497 0 0.126482395827770238705411998126 +-0.89100801944732666015625 -0.45398700237274169921875 0 +-0.89100801944732666015625 0.45398700237274169921875 0 +-0.890784895420074440686164507497 -0.0730269022285938290695028740629 -0.105687001347541817408703934689 +-0.890784895420074440686164507497 0.0730269022285938290695028740629 -0.105687001347541817408703934689 +-0.890671545267105013721220529987 -0.325701808929443337170539507497 0.0558752007782459259033203125 +-0.890671545267105013721220529987 0.325701808929443337170539507497 0.0558752007782459259033203125 +-0.890418830513954095984274772491 -0.324359442293643940313785378748 -0.0666681464761495617965536553129 +-0.890418830513954095984274772491 0.324359442293643940313785378748 -0.0666681464761495617965536553129 +-0.8891789913177490234375 -0.330601990222930908203125 0.316327989101409912109375 +-0.8891789913177490234375 0.330601990222930908203125 0.316327989101409912109375 +-0.888997671008110001977797764994 -0.0770307466387748634994991903113 -0.325960186123847972528011496252 +-0.888997671008110001977797764994 0.0770307466387748634994991903113 -0.325960186123847972528011496252 +-0.888920116424560591283920985006 -0.140788802504539484194978626874 0 +-0.888920116424560591283920985006 0.140788802504539484194978626874 0 +-0.888367781043052584522001779987 -0.220829404890537261962890625 0.254041406512260425909488503748 +-0.888367781043052584522001779987 0.220829404890537261962890625 0.254041406512260425909488503748 +-0.888364970684051513671875 -0.322138011455535888671875 -0.327161014080047607421875 +-0.888364970684051513671875 0.322138011455535888671875 -0.327161014080047607421875 +-0.888043516874313376696647992503 -0.0740898013114929254729901231258 0.1260530948638916015625 +-0.888043516874313376696647992503 0.0740898013114929254729901231258 0.1260530948638916015625 +-0.887291464209556512976462272491 -0.178058494627475721872045255623 -0.288979546725749936175731136245 +-0.887291464209556512976462272491 0.178058494627475721872045255623 -0.288979546725749936175731136245 +-0.886892020702362060546875 -0.172529995441436767578125 -0.4285509884357452392578125 +-0.886892020702362060546875 0.172529995441436767578125 -0.4285509884357452392578125 +-0.88676297664642333984375 -0.4469729959964752197265625 0.117757998406887054443359375 +-0.88676297664642333984375 0.4469729959964752197265625 0.117757998406887054443359375 +-0.885043787956237837377670985006 -0.0366092998534440980384907504686 -0.159239704906940476858423494377 +-0.885043787956237837377670985006 0.0366092998534440980384907504686 -0.159239704906940476858423494377 +-0.88497698307037353515625 -0.443953990936279296875 -0.14043100178241729736328125 +-0.88497698307037353515625 0.443953990936279296875 -0.14043100178241729736328125 +-0.884968674182891823498664507497 -0.116591597720980641450516657187 0.325171691179275523797542746252 +-0.884968674182891823498664507497 0.116591597720980641450516657187 0.325171691179275523797542746252 +-0.88311398029327392578125 -0.041248001158237457275390625 0.467341005802154541015625 +-0.88311398029327392578125 0.041248001158237457275390625 0.467341005802154541015625 +-0.882730007171630859375 -0.065756998956203460693359375 -0.4652560055255889892578125 +-0.882730007171630859375 0.065756998956203460693359375 -0.4652560055255889892578125 +-0.882117873430252052990852007497 -0.143649901449680345022485994377 -0.105982198566198351774580999063 +-0.882117873430252052990852007497 0.143649901449680345022485994377 -0.105982198566198351774580999063 +-0.880723822116851851049545985006 -0.1775448024272918701171875 -0.0529451999813318266441264370314 +-0.880723822116851851049545985006 0.1775448024272918701171875 -0.0529451999813318266441264370314 +-0.879875975847244307104233485006 -0.178401593863964091912777121252 0.0631781995296478299239950615629 +-0.879875975847244307104233485006 0.178401593863964091912777121252 0.0631781995296478299239950615629 +-0.8793099224567413330078125 -0.109071902185678484831221624063 -0.157852801680564897024439119377 +-0.8793099224567413330078125 0.109071902185678484831221624063 -0.157852801680564897024439119377 +-0.879220819473266579358039507497 -0.144903606176376348324552623126 0.126387901604175567626953125 +-0.879220819473266579358039507497 0.144903606176376348324552623126 0.126387901604175567626953125 +-0.879082977771759033203125 -0.280317008495330810546875 -0.3855319917201995849609375 +-0.879082977771759033203125 0.280317008495330810546875 -0.3855319917201995849609375 +-0.878990417718887306897102007497 -0.0371709007769823115974183735943 0.18972270190715789794921875 +-0.878990417718887306897102007497 0.0371709007769823115974183735943 0.18972270190715789794921875 +-0.87861502170562744140625 -0.110382996499538421630859375 0.464598000049591064453125 +-0.87861502170562744140625 0.110382996499538421630859375 0.464598000049591064453125 +-0.877686944603919938501235264994 -0.36354599893093109130859375 0 +-0.877686944603919938501235264994 0.36354599893093109130859375 0 +-0.875961005687713623046875 -0.2899250090122222900390625 0.3855330049991607666015625 +-0.875961005687713623046875 0.2899250090122222900390625 0.3855330049991607666015625 +-0.875811657309532143322883257497 -0.182188155502080895153937944997 0.319783312082290660516292746252 +-0.875811657309532143322883257497 0.182188155502080895153937944997 0.319783312082290660516292746252 +-0.875689122080802850867087272491 -0.322243812680244434698551003748 0.178401454538106907232730691248 +-0.875689122080802850867087272491 0.322243812680244434698551003748 0.178401454538106907232730691248 +-0.875391730666160494678251779987 -0.140041401982307439633146373126 -0.341435694694519009662059261245 +-0.875391730666160494678251779987 0.140041401982307439633146373126 -0.341435694694519009662059261245 +-0.875133883953094549035256477509 -0.210097794234752666131527121252 0 +-0.875133883953094549035256477509 0.210097794234752666131527121252 0 +-0.875028824806213356701789507497 -0.317953607439994789807258257497 -0.189025298506021482980443693123 +-0.875028824806213356701789507497 0.317953607439994789807258257497 -0.189025298506021482980443693123 +-0.874683916568756103515625 0 -0.21196170151233673095703125 +-0.873950582742690995630141514994 -0.281201900541782345843699886245 -0.244205094873905181884765625 +-0.873950582742690995630141514994 0.281201900541782345843699886245 -0.244205094873905181884765625 +-0.873576295375823930200454014994 -0.356282304227352131231754128748 0.1114824973046779632568359375 +-0.873576295375823930200454014994 0.356282304227352131231754128748 0.1114824973046779632568359375 +-0.873172813653945945056022992503 -0.110519101470708855372571122189 0.188029798865318314993189119377 +-0.873172813653945945056022992503 0.110519101470708855372571122189 0.188029798865318314993189119377 +-0.872328972816467262951789507497 -0.286192238330841064453125 0.244205094873905181884765625 +-0.872328972816467262951789507497 0.286192238330841064453125 0.244205094873905181884765625 +-0.871843475103378229285056022491 -0.353156806528568234515574886245 -0.132924944907426817453099943123 +-0.871843475103378229285056022491 0.353156806528568234515574886245 -0.132924944907426817453099943123 +-0.87184202671051025390625 -0.486236989498138427734375 0.0588590018451213836669921875 +-0.87184202671051025390625 0.486236989498138427734375 0.0588590018451213836669921875 +-0.871839916706085182873664507497 -0.0725148014724254635909872490629 -0.211272293329238886050447376874 +-0.871839916706085182873664507497 0.0725148014724254635909872490629 -0.211272293329238886050447376874 +-0.871573984622955322265625 -0.485204994678497314453125 -0.070249997079372406005859375 +-0.871573984622955322265625 0.485204994678497314453125 -0.070249997079372406005859375 +-0.871436911821365289831931022491 -0.0386080002412199987937846401564 -0.3763082921504974365234375 +-0.871436911821365289831931022491 0.0386080002412199987937846401564 -0.3763082921504974365234375 +-0.870464980602264404296875 -0.433883011341094970703125 0.2324559986591339111328125 +-0.870464980602264404296875 0.433883011341094970703125 0.2324559986591339111328125 +-0.869913995265960693359375 -0.1795929968357086181640625 0.4593439996242523193359375 +-0.869913995265960693359375 0.1795929968357086181640625 0.4593439996242523193359375 +-0.868001678586006075732939279987 -0.242418141663074487857088001874 -0.300510655343532551153629128748 +-0.868001678586006075732939279987 0.242418141663074487857088001874 -0.300510655343532551153629128748 +-0.867938375473022438733039507497 -0.213374702632427221127286998126 -0.105614997446537017822265625 +-0.867938375473022438733039507497 0.213374702632427221127286998126 -0.105614997446537017822265625 +-0.867709797620773382043068977509 -0.179395204782485967465177623126 -0.1577897965908050537109375 +-0.867709797620773382043068977509 0.179395204782485967465177623126 -0.1577897965908050537109375 +-0.867568501830100924365751779987 0 0.387073697149753537249949886245 +-0.86680901050567626953125 -0.13120000064373016357421875 -0.4810700118541717529296875 +-0.86680901050567626953125 0.13120000064373016357421875 -0.4810700118541717529296875 +-0.865786015987396240234375 -0.397345006465911865234375 0.30419099330902099609375 +-0.865786015987396240234375 0.397345006465911865234375 0.30419099330902099609375 +-0.86545002460479736328125 -0.2372269928455352783203125 -0.44126999378204345703125 +-0.86545002460479736328125 0.2372269928455352783203125 -0.44126999378204345703125 +-0.864870303869247458727897992503 -0.214806599915027623959318248126 0.125928895175456995181306751874 +-0.864870303869247458727897992503 0.214806599915027623959318248126 0.125928895175456995181306751874 +-0.864629185199737526623664507497 -0.07812894880771636962890625 0.385761737823486328125 +-0.864629185199737526623664507497 0.07812894880771636962890625 0.385761737823486328125 +-0.864012587070465132299545985006 -0.246332708001136796438501619377 -0.052934400737285614013671875 +-0.864012587070465132299545985006 0.246332708001136796438501619377 -0.052934400737285614013671875 +-0.863969403505325361791733485006 0 0.252105304598808310778679242503 +-0.8633277118206024169921875 -0.144558003544807439633146373126 -0.209209500253200536556974498126 +-0.8633277118206024169921875 0.144558003544807439633146373126 -0.209209500253200536556974498126 +-0.863072097301483154296875 -0.247221001982688898257478626874 0.0631592966616153772552166856258 +-0.863072097301483154296875 0.247221001982688898257478626874 0.0631592966616153772552166856258 +-0.86264942586421966552734375 -0.248469649255275704113898882497 0.310802963376045238153011496252 +-0.86264942586421966552734375 0.248469649255275704113898882497 0.310802963376045238153011496252 +-0.862263700366020180432258257497 -0.394813348352909043725844639994 0.0558865999802947016616982978121 +-0.862263700366020180432258257497 0.394813348352909043725844639994 0.0558865999802947016616982978121 +-0.862070837616920382373564279987 -0.393555550277233101574836382497 -0.0666880995035171453277911268742 +-0.862070837616920382373564279987 0.393555550277233101574836382497 -0.0666880995035171453277911268742 +-0.86180400848388671875 -0.425321996212005615234375 -0.2763960063457489013671875 +-0.86180400848388671875 0.425321996212005615234375 -0.2763960063457489013671875 +-0.861656010150909423828125 -0.4762209951877593994140625 0.17539300024509429931640625 +-0.861656010150909423828125 0.4762209951877593994140625 0.17539300024509429931640625 +-0.86136400699615478515625 0 -0.50798702239990234375 +-0.861336010694503828588608485006 -0.181067401170730585269197376874 0.187921799719333648681640625 +-0.861336010694503828588608485006 0.181067401170730585269197376874 0.187921799719333648681640625 +-0.861094826459884665759147992503 -0.0733500011265277862548828125 0.251266497373580921514957253748 +-0.861094826459884665759147992503 0.0733500011265277862548828125 0.251266497373580921514957253748 +-0.860541325807571477746193977509 -0.0365778006613254533241352817186 -0.2610189020633697509765625 +-0.860541325807571477746193977509 0.0365778006613254533241352817186 -0.2610189020633697509765625 +-0.859062212705612116003806022491 -0.101168353483080855625964034061 -0.392781296372413601947215511245 +-0.859062212705612116003806022491 0.101168353483080855625964034061 -0.392781296372413601947215511245 +-0.85856401920318603515625 -0.3867270052433013916015625 -0.33661401271820068359375 +-0.85856401920318603515625 0.3867270052433013916015625 -0.33661401271820068359375 +-0.85804472863674163818359375 -0.143969649821519857235685435626 0.381485801935195878442641514994 +-0.85804472863674163818359375 0.143969649821519857235685435626 0.381485801935195878442641514994 +-0.857522255182266213147102007497 -0.202369945496320702282844194997 -0.355247747898101817742855246252 +-0.857522255182266213147102007497 0.202369945496320702282844194997 -0.355247747898101817742855246252 +-0.857271015644073486328125 -0.2473219931125640869140625 0.4515739977359771728515625 +-0.857271015644073486328125 0.2473219931125640869140625 0.4515739977359771728515625 +-0.857083022594451904296875 -0.47091400623321533203125 -0.20892299711704254150390625 +-0.857083022594451904296875 0.47091400623321533203125 -0.20892299711704254150390625 +-0.8559521734714508056640625 -0.278111708164215098992855246252 0 +-0.8559521734714508056640625 0.278111708164215098992855246252 0 +-0.85547602176666259765625 -0.3582240045070648193359375 0.3739469945430755615234375 +-0.85547602176666259765625 0.3582240045070648193359375 0.3739469945430755615234375 +-0.854813683032989546362045985006 -0.109027799963951108064286188437 -0.259628391265869173931690738755 +-0.854813683032989546362045985006 0.109027799963951108064286188437 -0.259628391265869173931690738755 +-0.852641999721527099609375 -0.5224959850311279296875 0 +-0.852641999721527099609375 0.5224959850311279296875 0 +-0.852491694688797041479233485006 -0.146212202310562144891292746252 0.248756405711174022332698996252 +-0.852491694688797041479233485006 0.146212202310562144891292746252 0.248756405711174022332698996252 +-0.852298200130462646484375 -0.3851575553417205810546875 0.166556844860315328427091685626 +-0.852298200130462646484375 0.3851575553417205810546875 0.166556844860315328427091685626 +-0.851818478107452370373664507497 -0.350087338685989346576121761245 0.233116704225540150030582253748 +-0.851818478107452370373664507497 0.350087338685989346576121761245 0.233116704225540150030582253748 +-0.850924015045166015625 -0.34615099430084228515625 -0.3951059877872467041015625 +-0.850924015045166015625 0.34615099430084228515625 -0.3951059877872467041015625 +-0.850647985935211181640625 0 0.52573597431182861328125 +-0.8506043851375579833984375 -0.240640202164649957827791126874 -0.169011904299259191342130748126 +-0.8506043851375579833984375 0.240640202164649957827791126874 -0.169011904299259191342130748126 +-0.849999999999999977795539507497 0 0 +-0.849703726172447160180922764994 0 -0.424854241311550140380859375 +-0.849159908294677800988381477509 -0.27468810975551605224609375 -0.116073895990848538484208063437 +-0.849159908294677800988381477509 0.27468810975551605224609375 -0.116073895990848538484208063437 +-0.848612010478973388671875 -0.06914000213146209716796875 0.524478018283843994140625 +-0.848612010478973388671875 0.06914000213146209716796875 0.524478018283843994140625 +-0.848506742715835482471220529987 -0.343509563803672757220653011245 -0.254041406512260425909488503748 +-0.848506742715835482471220529987 0.343509563803672757220653011245 -0.254041406512260425909488503748 +-0.848445314168930098119858485006 -0.276889505982398975714176003748 0.116073895990848538484208063437 +-0.848445314168930098119858485006 0.276889505982398975714176003748 0.116073895990848538484208063437 +-0.848429024219512939453125 -0.516117990016937255859375 0.11743099987506866455078125 +-0.848429024219512939453125 0.516117990016937255859375 0.11743099987506866455078125 +-0.848287999629974365234375 -0.06581699848175048828125 -0.5254290103912353515625 +-0.848287999629974365234375 0.06581699848175048828125 -0.5254290103912353515625 +-0.847892084717750460498564279987 -0.379776763916015613897769753748 -0.1983618997037410736083984375 +-0.847892084717750460498564279987 0.379776763916015613897769753748 -0.1983618997037410736083984375 +-0.847821450233459450451789507497 -0.0345737494528293581863565009371 -0.0500361014157533617874307196871 +-0.847821450233459450451789507497 0.0345737494528293581863565009371 -0.0500361014157533617874307196871 +-0.847813493013381935803352007497 -0.206007304787635819876001619377 -0.220846505463123315982088001874 +-0.847813493013381935803352007497 0.206007304787635819876001619377 -0.220846505463123315982088001874 +-0.847708189487457297595085492503 -0.243560698628425609246761496252 0.179076598584651941470369251874 +-0.847708189487457297595085492503 0.243560698628425609246761496252 0.179076598584651941470369251874 +-0.847379457950591996606704014994 -0.06668930314481258392333984375 0 +-0.847379457950591996606704014994 0.06668930314481258392333984375 0 +-0.847281277179718017578125 -0.209108293056488037109375 0.375351651012897469250617632497 +-0.847281277179718017578125 0.209108293056488037109375 0.375351651012897469250617632497 +-0.847172039747238092566306022491 -0.0351041503250598893592915317186 0.059723548591136932373046875 +-0.847172039747238092566306022491 0.0351041503250598893592915317186 0.059723548591136932373046875 +-0.8467400074005126953125 -0.19601400196552276611328125 -0.4945810139179229736328125 +-0.8467400074005126953125 0.19601400196552276611328125 -0.4945810139179229736328125 +-0.846659004688262939453125 -0.51337301731109619140625 -0.140058994293212890625 +-0.846659004688262939453125 0.51337301731109619140625 -0.140058994293212890625 +-0.846457618474960260535056022491 -0.431287652254104592053352007497 0 +-0.846457618474960260535056022491 0.431287652254104592053352007497 0 +-0.844990199804306008068977007497 0 -0.30982410907745361328125 +-0.844720041751861550061164507497 -0.314071890711784373895198996252 0.300511589646339394299445757497 +-0.844720041751861550061164507497 0.314071890711784373895198996252 0.300511589646339394299445757497 +-0.844200021028518654553352007497 -0.0371250014752149623542543110943 0.3097557127475738525390625 +-0.844200021028518654553352007497 0.0371250014752149623542543110943 0.3097557127475738525390625 +-0.844079765677452020788962272491 0 -0.100146146863698951023913252811 +-0.843946722149848893579360264994 -0.306031110882759083136051003748 -0.310802963376045238153011496252 +-0.843946722149848893579360264994 0.306031110882759083136051003748 -0.310802963376045238153011496252 +-0.843794095516204878393295985006 -0.308559608459472667352230246252 0.052934400737285614013671875 +-0.843794095516204878393295985006 0.308559608459472667352230246252 0.052934400737285614013671875 +-0.843554681539535500256477007497 -0.307287892699241671490284488755 -0.0631592966616153772552166856258 +-0.843554681539535500256477007497 0.307287892699241671490284488755 -0.0631592966616153772552166856258 +-0.842547419667243890906149772491 -0.163903495669364934750333873126 -0.407123439013957977294921875 +-0.842547419667243890906149772491 0.163903495669364934750333873126 -0.407123439013957977294921875 +-0.84251499176025390625 -0.137950003147125244140625 0.520708978176116943359375 +-0.84251499176025390625 0.137950003147125244140625 0.520708978176116943359375 +-0.842468145489692621374899772491 -0.101215447485446932707198186563 -0.0500292997807264341880717495314 +-0.842468145489692621374899772491 0.101215447485446932707198186563 -0.0500292997807264341880717495314 +-0.842424827814102106238181022491 -0.424624346196651458740234375 0.111870098486542696170076283124 +-0.842424827814102106238181022491 0.424624346196651458740234375 0.111870098486542696170076283124 +-0.842208319902420066149772992503 -0.0729764968156814547439736884371 -0.308804386854171775134147992503 +-0.842208319902420066149772992503 0.0729764968156814547439736884371 -0.308804386854171775134147992503 +-0.841767767071723960192741742503 -0.1017909012734889984130859375 0.05971249751746654510498046875 +-0.841767767071723960192741742503 0.1017909012734889984130859375 0.05971249751746654510498046875 +-0.841611582040786787572983485006 -0.20920680463314056396484375 0.240670806169509893246427623126 +-0.841611582040786787572983485006 0.20920680463314056396484375 0.240670806169509893246427623126 +-0.841564604640007041247429242503 0 0.119455596059560770205720814374 +-0.841296845674514792712272992503 -0.0689698521047830553909463446871 -0.0998155012726783669174679403113 +-0.841296845674514792712272992503 0.0689698521047830553909463446871 -0.0998155012726783669174679403113 +-0.8407281339168548583984375 -0.421756291389465298724559261245 -0.1334094516932964324951171875 +-0.8407281339168548583984375 0.421756291389465298724559261245 -0.1334094516932964324951171875 +-0.840591913461685158459602007497 -0.168686994910240167788728626874 -0.273770096898078907354801003748 +-0.840591913461685158459602007497 0.168686994910240167788728626874 -0.273770096898078907354801003748 +-0.8396070003509521484375 -0.46026098728179931640625 0.2884779870510101318359375 +-0.8396070003509521484375 0.46026098728179931640625 0.2884779870510101318359375 +-0.83960402011871337890625 -0.316772997379302978515625 0.441271007061004638671875 +-0.83960402011871337890625 0.316772997379302978515625 0.441271007061004638671875 +-0.839535665512084916528579014994 -0.132967202365398412533536998126 0 +-0.839535665512084916528579014994 0.132967202365398412533536998126 0 +-0.838958281278610162878806022491 -0.0391856011003255816360635321871 0.443973955512046769555922764994 +-0.838958281278610162878806022491 0.0391856011003255816360635321871 0.443973955512046769555922764994 +-0.838921010494232177734375 -0.3037990033626556396484375 -0.45157301425933837890625 +-0.838921010494232177734375 0.3037990033626556396484375 -0.45157301425933837890625 +-0.838707765936851479260383257497 -0.0699737012386321965973223768742 0.11905014514923095703125 +-0.838707765936851479260383257497 0.0699737012386321965973223768742 0.11905014514923095703125 +-0.838593506813049227588408029987 -0.06246914900839328765869140625 -0.441993205249309517590461382497 +-0.838593506813049227588408029987 0.06246914900839328765869140625 -0.441993205249309517590461382497 +-0.838391375541687078332131477509 -0.110455197840929039698742997189 0.308057391643524192126335492503 +-0.838391375541687078332131477509 0.110455197840929039698742997189 0.308057391643524192126335492503 +-0.835874688625335648950454014994 -0.0345754498615860952903666714064 -0.150393054634332640207006193123 +-0.835874688625335648950454014994 0.0345754498615860952903666714064 -0.150393054634332640207006193123 +-0.83512882888317108154296875 -0.266301158070564258917301003748 -0.366255392134189561303969639994 +-0.83512882888317108154296875 0.266301158070564258917301003748 -0.366255392134189561303969639994 +-0.834684270620346002722556022491 -0.10486384667456150054931640625 0.441368100047111466821547764994 +-0.834684270620346002722556022491 0.10486384667456150054931640625 0.441368100047111466821547764994 +-0.833111324906349204333366742503 -0.135669351369142515695287443123 -0.100094298645853993501297907187 +-0.833111324906349204333366742503 0.135669351369142515695287443123 -0.100094298645853993501297907187 +-0.832385003566741943359375 -0.2060990035533905029296875 0.51444900035858154296875 +-0.832385003566741943359375 0.2060990035533905029296875 0.51444900035858154296875 +-0.832162955403327853076689279987 -0.275428758561611142230418636245 0.366256354749202706067023882497 +-0.832162955403327853076689279987 0.275428758561611142230418636245 0.366256354749202706067023882497 +-0.832130014896392822265625 -0.4223580062389373779296875 0.3594079911708831787109375 +-0.832130014896392822265625 0.4223580062389373779296875 0.3594079911708831787109375 +-0.831794720888137772973891514994 -0.16768120229244232177734375 -0.0500037999823689446876606723436 +-0.831794720888137772973891514994 0.16768120229244232177734375 -0.0500037999823689446876606723436 +-0.831492894887924216540397992503 -0.3444119989871978759765625 0 +-0.831492894887924216540397992503 0.3444119989871978759765625 0 +-0.83106601238250732421875 -0.5042049884796142578125 0.23474900424480438232421875 +-0.83106601238250732421875 0.5042049884796142578125 0.23474900424480438232421875 +-0.830993977189063981469985264994 -0.168490394204854954107730691248 0.0596682995557785006424111884371 +-0.830993977189063981469985264994 0.168490394204854954107730691248 0.0596682995557785006424111884371 +-0.830853998661041259765625 -0.553368985652923583984375 0.058866001665592193603515625 +-0.830853998661041259765625 0.553368985652923583984375 0.058866001665592193603515625 +-0.83075797557830810546875 -0.13174800574779510498046875 -0.5408170223236083984375 +-0.83075797557830810546875 0.13174800574779510498046875 -0.5408170223236083984375 +-0.830601990222930908203125 -0.552416026592254638671875 -0.0702629983425140380859375 +-0.830601990222930908203125 0.552416026592254638671875 -0.0702629983425140380859375 +-0.83045937120914459228515625 -0.103012352064251896943680719687 -0.149083201587200148141576505623 +-0.83045937120914459228515625 0.103012352064251896943680719687 -0.149083201587200148141576505623 +-0.830375218391418479235710492503 -0.136853405833244318179353626874 0.1193663515150547027587890625 +-0.830375218391418479235710492503 0.136853405833244318179353626874 0.1193663515150547027587890625 +-0.830157616734504721911491742503 -0.0351058507338166195244077982807 0.179182551801204681396484375 +-0.830157616734504721911491742503 0.0351058507338166195244077982807 0.179182551801204681396484375 +-0.829716306924820012902443977509 -0.172599305212497722283870871252 0.302952611446380637438835492503 +-0.829716306924820012902443977509 0.172599305212497722283870871252 0.302952611446380637438835492503 +-0.829600220918655373303352007497 -0.305283612012863192486378238755 0.169011904299259191342130748126 +-0.829600220918655373303352007497 0.305283612012863192486378238755 0.169011904299259191342130748126 +-0.829318481683731123510483485006 -0.132670801877975474969417746252 -0.323465394973754871710269753748 +-0.829318481683731123510483485006 0.132670801877975474969417746252 -0.323465394973754871710269753748 +-0.828974676132202215050881477509 -0.301219207048416148797542746252 -0.179076598584651941470369251874 +-0.828974676132202215050881477509 0.301219207048416148797542746252 -0.179076598584651941470369251874 +-0.828249925374984652393095529987 -0.461925140023231484143195757497 0.0559160517528653130958637973436 +-0.828249925374984652393095529987 0.461925140023231484143195757497 0.0559160517528653130958637973436 +-0.82799528539180755615234375 -0.460944744944572437628238503748 -0.06673749722540378570556640625 +-0.82799528539180755615234375 0.460944744944572437628238503748 -0.06673749722540378570556640625 +-0.827953183650970481188835492503 -0.266401800513267505987613503748 -0.23135219514369964599609375 +-0.827953183650970481188835492503 0.266401800513267505987613503748 -0.23135219514369964599609375 +-0.827598595619201682360710492503 -0.337530604004859957623096988755 0.105614997446537017822265625 +-0.827598595619201682360710492503 0.337530604004859957623096988755 0.105614997446537017822265625 +-0.826941731572151117468649772491 -0.412188860774040211065738503748 0.220833198726177210025056751874 +-0.826941731572151117468649772491 0.412188860774040211065738503748 0.220833198726177210025056751874 +-0.826515334844589166785056022491 -0.198425694555044163092105691248 0 +-0.826515334844589166785056022491 0.198425694555044163092105691248 0 +-0.82641829550266265869140625 -0.170613346993923192806974498126 0.436376799643039658960219639994 +-0.82641829550266265869140625 0.170613346993923192806974498126 0.436376799643039658960219639994 +-0.826416921615600652550881477509 -0.27112948894500732421875 0.23135219514369964599609375 +-0.826416921615600652550881477509 0.27112948894500732421875 0.23135219514369964599609375 +-0.8260903656482696533203125 0 -0.200186051428318023681640625 +-0.825956976413726784436164507497 -0.334569606184959400518863503748 -0.125928895175456995181306751874 +-0.825956976413726784436164507497 0.334569606184959400518863503748 -0.125928895175456995181306751874 +-0.82577598094940185546875 -0.4482559859752655029296875 -0.34228599071502685546875 +-0.82577598094940185546875 0.4482559859752655029296875 -0.34228599071502685546875 +-0.825571811199188210217414507497 -0.0365760002285242108444052178129 -0.356502592563629150390625 +-0.825571811199188210217414507497 0.0365760002285242108444052178129 -0.356502592563629150390625 +-0.824663212895393349377570757497 -0.104379151389002791661120284061 0.177583698928356154000951505623 +-0.824663212895393349377570757497 0.104379151389002791661120284061 0.177583698928356154000951505623 +-0.82418000698089599609375 0 -0.566327989101409912109375 +-0.823468559980392367236845529987 -0.124640000611543649844392689374 -0.457016511261463143078742632497 +-0.823468559980392367236845529987 0.124640000611543649844392689374 -0.457016511261463143078742632497 +-0.823404365777969382556022992503 -0.0684862013906240435501260321871 -0.199534943699836736508146373126 +-0.823404365777969382556022992503 0.0684862013906240435501260321871 -0.199534943699836736508146373126 +-0.822618007659912109375 -0.2598899900913238525390625 -0.505724012851715087890625 +-0.822618007659912109375 0.2598899900913238525390625 -0.505724012851715087890625 +-0.822496715188026361609274772491 -0.377477756142616249768195757497 0.288981443643569924084602007497 +-0.822496715188026361609274772491 0.377477756142616249768195757497 0.288981443643569924084602007497 +-0.822317379713058516088608485006 -0.229659292101860063040064119377 -0.284694305062294039654346988755 +-0.822317379713058516088608485006 0.229659292101860063040064119377 -0.284694305062294039654346988755 +-0.822177523374557406299345529987 -0.225365643203258497750951505623 -0.419206494092941250872996761245 +-0.822177523374557406299345529987 0.225365643203258497750951505623 -0.419206494092941250872996761245 +-0.821950972080230712890625 -0.4964390099048614501953125 -0.2791860103607177734375 +-0.821950972080230712890625 0.4964390099048614501953125 -0.2791860103607177734375 +-0.821907001733779951635483485006 0 0.366701397299766529425113503748 +-0.81978702545166015625 -0.4082829952239990234375 -0.40156400203704833984375 +-0.81978702545166015625 0.4082829952239990234375 -0.40156400203704833984375 +-0.819719576835632346423210492503 -0.201520552486181253604158314374 -0.0997474975883960723876953125 +-0.819719576835632346423210492503 0.201520552486181253604158314374 -0.0997474975883960723876953125 +-0.819503697752952509070212272491 -0.169428804516792291812166126874 -0.14902369678020477294921875 +-0.819503697752952509070212272491 0.169428804516792291812166126874 -0.14902369678020477294921875 +-0.8194839954376220703125 -0.54510498046875 0.1769340038299560546875 +-0.8194839954376220703125 0.54510498046875 0.1769340038299560546875 +-0.819122385978698797082131477509 -0.0740168988704681396484375 0.36545848846435546875 +-0.819122385978698797082131477509 0.0740168988704681396484375 0.36545848846435546875 +-0.81892299652099609375 -0.3817160129547119140625 0.42855298519134521484375 +-0.81892299652099609375 0.3817160129547119140625 0.42855298519134521484375 +-0.818713808059692293994658029987 -0.404055896401405323370426003748 -0.262576206028461434094367632497 +-0.818713808059692293994658029987 0.404055896401405323370426003748 -0.262576206028461434094367632497 +-0.818573209643363886023337272491 -0.452409945428371429443359375 0.1666233502328395843505859375 +-0.818573209643363886023337272491 0.452409945428371429443359375 0.1666233502328395843505859375 +-0.8182958066463470458984375 0 -0.482587671279907204358039507497 +-0.81827199459075927734375 -0.2732619941234588623046875 0.50572597980499267578125 +-0.81827199459075927734375 0.2732619941234588623046875 0.50572597980499267578125 +-0.8172468245029449462890625 -0.235392299294471751824886496252 0.294444912672042868884147992503 +-0.8172468245029449462890625 0.235392299294471751824886496252 0.294444912672042868884147992503 +-0.816881400346756048058693977509 -0.374033698439598105700554242503 0.0529451999813318266441264370314 +-0.816881400346756048058693977509 0.374033698439598105700554242503 0.0529451999813318266441264370314 +-0.816821953654289223401008257497 -0.202872899919748300723298939374 0.118932845443487159031725752811 +-0.816821953654289223401008257497 0.202872899919748300723298939374 0.118932845443487159031725752811 +-0.816698688268661543432358485006 -0.372842100262641917840511496252 -0.0631781995296478299239950615629 +-0.816698688268661543432358485006 0.372842100262641917840511496252 -0.0631781995296478299239950615629 +-0.816011887788772538598891514994 -0.232647557556629164254857755623 -0.0499936006963253021240234375 +-0.816011887788772538598891514994 0.232647557556629164254857755623 -0.0499936006963253021240234375 +-0.815971103310584977563735264994 0 0.238099454343318944760099498126 +-0.815635818243026666785056022491 -0.367390654981136322021484375 -0.319783312082290660516292746252 +-0.815635818243026666785056022491 0.367390654981136322021484375 -0.319783312082290660516292746252 +-0.81536506116390228271484375 -0.136527003347873682193025501874 -0.197586750239133829287752064374 +-0.81536506116390228271484375 0.136527003347873682193025501874 -0.197586750239133829287752064374 +-0.8151236474514007568359375 -0.233486501872539525814786998126 0.0596504468470811857749858120314 +-0.8151236474514007568359375 0.233486501872539525814786998126 0.0596504468470811857749858120314 +-0.8144090175628662109375 -0.540647983551025390625 -0.21080400049686431884765625 +-0.8144090175628662109375 0.540647983551025390625 -0.21080400049686431884765625 +-0.814407464861869767602797764994 -0.234955893456935877017244251874 0.428995297849178280902293636245 +-0.814407464861869767602797764994 0.234955893456935877017244251874 0.428995297849178280902293636245 +-0.814228871464729220264189279987 -0.447368305921554521020766514994 -0.1984768472611904144287109375 +-0.814228871464729220264189279987 0.447368305921554521020766514994 -0.1984768472611904144287109375 +-0.813848412036895729748664507497 -0.0958437032997608157058877509371 -0.372108596563339222296207253748 +-0.813848412036895729748664507497 0.0958437032997608157058877509371 -0.372108596563339222296207253748 +-0.813484010100364640649672764994 -0.171008101105690007992521373126 0.1774816997349262237548828125 +-0.813484010100364640649672764994 0.171008101105690007992521373126 0.1774816997349262237548828125 +-0.813256224989891030041633257497 -0.06927500106394290924072265625 0.237307247519493086373998380623 +-0.813256224989891030041633257497 0.06927500106394290924072265625 0.237307247519493086373998380623 +-0.8129370212554931640625 -0.041248001158237457275390625 0.5808889865875244140625 +-0.8129370212554931640625 0.041248001158237457275390625 0.5808889865875244140625 +-0.8128844797611236572265625 -0.136392299830913554803402121252 0.361407601833343528063835492503 +-0.8128844797611236572265625 0.136392299830913554803402121252 0.361407601833343528063835492503 +-0.812733474373817377234274772491 -0.0345457006245851530601420620314 -0.24651785194873809814453125 +-0.812733474373817377234274772491 0.0345457006245851530601420620314 -0.24651785194873809814453125 +-0.812702220678329423364516514994 -0.340312804281711567266910378748 0.355249644815921750140574886245 +-0.812702220678329423364516514994 0.340312804281711567266910378748 0.355249644815921750140574886245 +-0.812389504909515447472756477509 -0.191718895733356486932308371252 -0.336550498008728049548210492503 +-0.812389504909515447472756477509 0.191718895733356486932308371252 -0.336550498008728049548210492503 +-0.810009899735450678015524772491 -0.496371185779571510998664507497 0 +-0.810009899735450678015524772491 0.496371185779571510998664507497 0 +-0.80939197540283203125 -0.065987996757030487060546875 -0.583549976348876953125 +-0.80939197540283203125 0.065987996757030487060546875 -0.583549976348876953125 +-0.809338986873626708984375 -0.3660250008106231689453125 -0.4593429863452911376953125 +-0.809338986873626708984375 0.3660250008106231689453125 -0.4593429863452911376953125 +-0.80927097797393798828125 -0.19641099870204925537109375 -0.553628027439117431640625 +-0.80927097797393798828125 0.19641099870204925537109375 -0.553628027439117431640625 +-0.80901801586151123046875 -0.58778297901153564453125 0 +-0.80901801586151123046875 0.58778297901153564453125 0 +-0.808471977710723876953125 -0.110382996499538421630859375 0.57809102535247802734375 +-0.808471977710723876953125 0.110382996499538421630859375 0.57809102535247802734375 +-0.80839927494525909423828125 -0.262661057710647571905582253748 0 +-0.80839927494525909423828125 0.262661057710647571905582253748 0 +-0.808377814292907670434829014994 -0.3288434445858001708984375 -0.375350688397884324487563389994 +-0.808377814292907670434829014994 0.3288434445858001708984375 -0.375350688397884324487563389994 +-0.80811558663845062255859375 0 0.499449175596237138208266514994 +-0.80744040012359619140625 -0.364886105060577392578125 0.157790695130825053826839621252 +-0.80744040012359619140625 0.364886105060577392578125 0.157790695130825053826839621252 +-0.807324033975601151880141514994 -0.102970699965953829679854436563 -0.245204591751098627261384876874 +-0.807324033975601151880141514994 0.102970699965953829679854436563 -0.245204591751098627261384876874 +-0.806985926628112859582131477509 -0.331661689281463611944644753748 0.220847404003143316097990123126 +-0.806985926628112859582131477509 0.331661689281463611944644753748 0.220847404003143316097990123126 +-0.806181409955024630420439279987 -0.0656830020248889839828976278113 0.498254117369651750024672764994 +-0.806181409955024630420439279987 0.0656830020248889839828976278113 0.498254117369651750024672764994 +-0.806007573008537203662626779987 -0.490312090516090370861945757497 0.111559449881315220221011941248 +-0.806007573008537203662626779987 0.490312090516090370861945757497 0.111559449881315220221011941248 +-0.805873599648475602563735264994 -0.0625261485576629610916299384371 -0.499157559871673539575454014994 +-0.805873599648475602563735264994 0.0625261485576629610916299384371 -0.499157559871673539575454014994 +-0.805131044983863786157485264994 -0.138089302182197559698551003748 0.234936605393886555059879128748 +-0.805131044983863786157485264994 0.138089302182197559698551003748 0.234936605393886555059879128748 +-0.804982477426528952868522992503 0 -0.40249349176883697509765625 +-0.80473101139068603515625 -0.4844360053539276123046875 0.343118011951446533203125 +-0.80473101139068603515625 0.4844360053539276123046875 0.343118011951446533203125 +-0.804403007030487060546875 -0.186213301867246605603156694997 -0.469851963222026824951171875 +-0.804403007030487060546875 0.186213301867246605603156694997 -0.469851963222026824951171875 +-0.804326054453849748071547764994 -0.4877043664455413818359375 -0.13305604457855224609375 +-0.804326054453849748071547764994 0.4877043664455413818359375 -0.13305604457855224609375 +-0.803848493099212690893295985006 -0.325430113077163685186832253748 -0.240670806169509893246427623126 +-0.803848493099212690893295985006 0.325430113077163685186832253748 -0.240670806169509893246427623126 +-0.803384006023406982421875 -0.5836889743804931640625 0.11781899631023406982421875 +-0.803384006023406982421875 0.5836889743804931640625 0.11781899631023406982421875 +-0.80334858596324920654296875 -0.227271302044391637631193248126 -0.159622354060411447695955189374 +-0.80334858596324920654296875 0.227271302044391637631193248126 -0.159622354060411447695955189374 +-0.803266185522079512182358485006 -0.359788513183593783306690738755 -0.187921799719333648681640625 +-0.803266185522079512182358485006 0.359788513183593783306690738755 -0.187921799719333648681640625 +-0.80268752574920654296875 -0.19810259342193603515625 0.355596300959587108270198996252 +-0.80268752574920654296875 0.19810259342193603515625 0.355596300959587108270198996252 +-0.801984357833862238074118522491 -0.259427659213542938232421875 -0.109625346213579180632002874063 +-0.801984357833862238074118522491 0.259427659213542938232421875 -0.109625346213579180632002874063 +-0.801907217502593971936164507497 -0.408588302135467540399105246252 0 +-0.801907217502593971936164507497 0.408588302135467540399105246252 0 +-0.801309463381767228540297764994 -0.261506755650043498651058371252 0.109625346213579180632002874063 +-0.801309463381767228540297764994 0.261506755650043498651058371252 0.109625346213579180632002874063 +-0.800988972187042236328125 -0.581950008869171142578125 -0.14053599536418914794921875 +-0.800988972187042236328125 0.581950008869171142578125 -0.14053599536418914794921875 +-0.800712743401527426989616742503 -0.194562454521656019723607755623 -0.208577255159616475888029185626 +-0.800712743401527426989616742503 0.194562454521656019723607755623 -0.208577255159616475888029185626 +-0.800613290071487404553352007497 -0.230029548704624164923160378748 0.169127898663282399960294810626 +-0.800613290071487404553352007497 0.230029548704624164923160378748 0.169127898663282399960294810626 +-0.800389242172241166528579014994 -0.131052502989768976382478626874 0.494673529267311062884715511245 +-0.800389242172241166528579014994 0.131052502989768976382478626874 0.494673529267311062884715511245 +-0.800261092185974187707131477509 -0.297541791200637839587272992503 0.284695190191268932000667746252 +-0.800261092185974187707131477509 0.297541791200637839587272992503 0.284695190191268932000667746252 +-0.800242006778717041015625 -0.339116990566253662109375 0.49458301067352294921875 +-0.800242006778717041015625 0.339116990566253662109375 0.49458301067352294921875 +-0.800000000000000044408920985006 0 0 +-0.7998809814453125 -0.1795929968357086181640625 0.572658002376556396484375 +-0.7998809814453125 0.1795929968357086181640625 0.572658002376556396484375 +-0.799528473615646384509147992503 -0.289924210309982333111378238755 -0.294444912672042868884147992503 +-0.799528473615646384509147992503 0.289924210309982333111378238755 -0.294444912672042868884147992503 +-0.798202818632125832287727007497 -0.155276995897293101922542746252 -0.38569588959217071533203125 +-0.798202818632125832287727007497 0.155276995897293101922542746252 -0.38569588959217071533203125 +-0.798086678981780983654914507497 -0.40227569639682769775390625 0.105982198566198351774580999063 +-0.798086678981780983654914507497 0.40227569639682769775390625 0.105982198566198351774580999063 +-0.798046299815177939684929242503 0 -0.292611658573150634765625 +-0.797949600219726606908920985006 -0.0325399994850158677528462192186 -0.0470928013324737604339276231258 +-0.797949600219726606908920985006 0.0325399994850158677528462192186 -0.0470928013324737604339276231258 +-0.797626650333404518811164507497 -0.437247937917709328381477007497 0.274054087698459625244140625 +-0.797626650333404518811164507497 0.437247937917709328381477007497 0.274054087698459625244140625 +-0.797623819112777687756477007497 -0.300934347510337818487613503748 0.419207456707954395636051003748 +-0.797623819112777687756477007497 0.300934347510337818487613503748 0.419207456707954395636051003748 +-0.797533607482910245067841970013 -0.0627664029598236083984375 0 +-0.797533607482910245067841970013 0.0627664029598236083984375 0 +-0.79743802547454833984375 -0.52912998199462890625 0.2900229990482330322265625 +-0.79743802547454833984375 0.52912998199462890625 0.2900229990482330322265625 +-0.797338390350341819079460492503 -0.0330392003059387234786825615629 0.05621039867401123046875 +-0.797338390350341819079460492503 0.0330392003059387234786825615629 0.05621039867401123046875 +-0.797300019860267661364616742503 -0.0350625013932585674614195170307 0.29254706203937530517578125 +-0.797300019860267661364616742503 0.0350625013932585674614195170307 0.29254706203937530517578125 +-0.796974959969520502234274772491 -0.288609053194522846563785378748 -0.428994363546371437756477007497 +-0.796974959969520502234274772491 0.288609053194522846563785378748 -0.428994363546371437756477007497 +-0.796916645765304521020766514994 -0.291417407989501942022769753748 0.0499936006963253021240234375 +-0.796916645765304521020766514994 0.291417407989501942022769753748 0.0499936006963253021240234375 +-0.796690532565116904528679242503 -0.290216343104839291644481136245 -0.0596504468470811857749858120314 +-0.796690532565116904528679242503 0.290216343104839291644481136245 -0.0596504468470811857749858120314 +-0.796479284763336181640625 -0.399558591842651356085269753748 -0.126387901604175567626953125 +-0.796479284763336181640625 0.399558591842651356085269753748 -0.126387901604175567626953125 +-0.795418968796730019299445757497 -0.0689222469925880459884481865629 -0.291648587584495522229133257497 +-0.795418968796730019299445757497 0.0689222469925880459884481865629 -0.291648587584495522229133257497 +-0.794855383038520768579360264994 -0.197584204375743865966796875 0.227300205826759332827791126874 +-0.794855383038520768579360264994 0.197584204375743865966796875 0.227300205826759332827791126874 +-0.794802582263946510998664507497 -0.0371232010424137129356303432814 0.420606905221939109118522992503 +-0.794802582263946510998664507497 0.0371232010424137129356303432814 0.420606905221939109118522992503 +-0.794557988643646240234375 -0.32252299785614013671875 -0.514447987079620361328125 +-0.794557988643646240234375 0.32252299785614013671875 -0.514447987079620361328125 +-0.794457006454467817846420985006 -0.0591812990605831146240234375 -0.418730404973030101434261496252 +-0.794457006454467817846420985006 0.0591812990605831146240234375 -0.418730404973030101434261496252 +-0.794428014755249045641960492503 0 -0.0942551970481872586349325615629 +-0.794171988964080810546875 -0.4453589916229248046875 0.4134570062160491943359375 +-0.794171988964080810546875 0.4453589916229248046875 0.4134570062160491943359375 +-0.793892362713813803942741742503 -0.159315495193004613705411998126 -0.258560647070407878533870871252 +-0.793892362713813803942741742503 0.159315495193004613705411998126 -0.258560647070407878533870871252 +-0.792911195755004905016960492503 -0.0952615976333618247329226846887 -0.0470863997936248820930238423443 +-0.792911195755004905016960492503 0.0952615976333618247329226846887 -0.0470863997936248820930238423443 +-0.792252016067504949425881477509 -0.095803201198577880859375 0.0561999976634979248046875 +-0.792252016067504949425881477509 0.095803201198577880859375 0.0561999976634979248046875 +-0.792060804367065496300881477509 0 0.112428796291351329461605246252 +-0.791814076900482111120993522491 -0.104318797960877410191393721561 0.290943092107772804943977007497 +-0.791814076900482111120993522491 0.104318797960877410191393721561 0.290943092107772804943977007497 +-0.791808795928955144738381477509 -0.0649128019809722955901776231258 -0.0939440011978149441818075615629 +-0.791808795928955144738381477509 0.0649128019809722955901776231258 -0.0939440011978149441818075615629 +-0.7911746799945831298828125 -0.252285307645797762798878238755 -0.346978792548179648669304242503 +-0.7911746799945831298828125 0.252285307645797762798878238755 -0.346978792548179648669304242503 +-0.790765753388404823986945757497 -0.195794053375720977783203125 0.488726550340652432513621761245 +-0.790765753388404823986945757497 0.195794053375720977783203125 0.488726550340652432513621761245 +-0.790753519535064675061164507497 -0.0993446968495845794677734375 0.418138200044631980212272992503 +-0.790753519535064675061164507497 0.0993446968495845794677734375 0.418138200044631980212272992503 +-0.790661990642547607421875 -0.13165499269962310791015625 -0.59793102741241455078125 +-0.790661990642547607421875 0.13165499269962310791015625 -0.59793102741241455078125 +-0.79052351415157318115234375 -0.401240105926990497930972878748 0.341437591612338997570930132497 +-0.79052351415157318115234375 0.401240105926990497930972878748 0.341437591612338997570930132497 +-0.790151214599609463817841970013 -0.125145602226257340872095369377 0 +-0.790151214599609463817841970013 0.125145602226257340872095369377 0 +-0.789512711763381891394431022491 -0.478994739055633500512954014994 0.223011554032564146554662443123 +-0.789512711763381891394431022491 0.478994739055633500512954014994 0.223011554032564146554662443123 +-0.789372014999389692846420985006 -0.0658576011657714815994424384371 0.1120471954345703125 +-0.789372014999389692846420985006 0.0658576011657714815994424384371 0.1120471954345703125 +-0.789311298727989107959501779987 -0.525700536370277360376235264994 0.0559227015823125783722247206242 +-0.789311298727989107959501779987 0.525700536370277360376235264994 0.0559227015823125783722247206242 +-0.789220076799392655786391514994 -0.125160605460405333078099943123 -0.513776171207427911902243522491 +-0.789220076799392655786391514994 0.125160605460405333078099943123 -0.513776171207427911902243522491 +-0.789071890711784296179587272491 -0.524795225262641884533820757497 -0.066749848425388336181640625 +-0.789071890711784296179587272491 0.524795225262641884533820757497 -0.066749848425388336181640625 +-0.788364905118942305151108485006 -0.260932508111000049932926003748 0.346979704499244701043636496252 +-0.788364905118942305151108485006 0.260932508111000049932926003748 0.346979704499244701043636496252 +-0.7872769832611083984375 -0.24732099473476409912109375 0.56482398509979248046875 +-0.7872769832611083984375 0.24732099473476409912109375 0.56482398509979248046875 +-0.786705589294433682567841970013 -0.0325415998697280925422425923443 -0.141546404361724859066740123126 +-0.786705589294433682567841970013 0.0325415998697280925422425923443 -0.141546404361724859066740123126 +-0.786261975765228271484375 -0.571247994899749755859375 0.23551499843597412109375 +-0.786261975765228271484375 0.571247994899749755859375 0.23551499843597412109375 +-0.785298845171928383557258257497 -0.32527799904346466064453125 0 +-0.785298845171928383557258257497 0.32527799904346466064453125 0 +-0.784657824039459272924545985006 -0.437613290548324596063167746252 0.0529731016606092494636293110943 +-0.784657824039459272924545985006 0.437613290548324596063167746252 0.0529731016606092494636293110943 +-0.784657001495361328125 -0.468427002429962158203125 -0.406066000461578369140625 +-0.784657001495361328125 0.468427002429962158203125 -0.406066000461578369140625 +-0.784487181901931673877470529987 -0.425843186676502227783203125 -0.325171691179275523797542746252 +-0.784487181901931673877470529987 0.425843186676502227783203125 -0.325171691179275523797542746252 +-0.7844165861606597900390625 -0.436684495210647616314503238755 -0.0632249973714351654052734375 +-0.7844165861606597900390625 0.436684495210647616314503238755 -0.0632249973714351654052734375 +-0.784104776382446355675881477509 -0.127688801288604741879240123126 -0.0942063987255096491058026231258 +-0.784104776382446355675881477509 0.127688801288604741879240123126 -0.0942063987255096491058026231258 +-0.783620956540107660437399772491 -0.163010454922914493902652566248 0.286121910810470558850227007497 +-0.783620956540107660437399772491 0.163010454922914493902652566248 0.286121910810470558850227007497 +-0.783511319756507895739616742503 -0.288323411345481839251903011245 0.159622354060411447695955189374 +-0.783511319756507895739616742503 0.288323411345481839251903011245 0.159622354060411447695955189374 +-0.783418482542037941662727007497 -0.390494710206985506939503238755 0.209210398793220536672876619377 +-0.783418482542037941662727007497 0.390494710206985506939503238755 0.209210398793220536672876619377 +-0.783245232701301530298110264994 -0.125300201773643482550113503748 -0.305495095252990733758480246252 +-0.783245232701301530298110264994 0.125300201773643482550113503748 -0.305495095252990733758480246252 +-0.78310501575469970703125 -0.517967998981475830078125 -0.3441739976406097412109375 +-0.78310501575469970703125 0.517967998981475830078125 -0.3441739976406097412109375 +-0.783051013946533203125 0 -0.6219580173492431640625 +-0.783037006855010986328125 -0.619184017181396484375 0.058866001665592193603515625 +-0.783037006855010986328125 0.619184017181396484375 0.058866001665592193603515625 +-0.782971006631851151880141514994 0 -0.538011589646339438708366742503 +-0.7829225957393646240234375 -0.161633697152137767449886496252 0.413409599661827109606804242503 +-0.7829225957393646240234375 0.161633697152137767449886496252 0.413409599661827109606804242503 +-0.782920527458190851355368522491 -0.284484806656837452276676003748 -0.169127898663282399960294810626 +-0.782920527458190851355368522491 0.284484806656837452276676003748 -0.169127898663282399960294810626 +-0.782865619659423916942841970013 -0.1578176021575927734375 -0.0470623999834060696700888115629 +-0.782865619659423916942841970013 0.1578176021575927734375 -0.0470623999834060696700888115629 +-0.7822949886322021484375 -0.262659013271331787109375 -0.564822971820831298828125 +-0.7822949886322021484375 0.262659013271331787109375 -0.564822971820831298828125 +-0.782111978530883877880341970013 -0.158579194545745871813835492503 0.0561583995819091852386151231258 +-0.782111978530883877880341970013 0.158579194545745871813835492503 0.0561583995819091852386151231258 +-0.782051980495452880859375 -0.619239985942840576171875 -0.0702629983425140380859375 +-0.782051980495452880859375 0.619239985942840576171875 -0.0702629983425140380859375 +-0.781955784559249855725227007497 -0.251601700484752666131527121252 -0.218499295413494110107421875 +-0.781955784559249855725227007497 0.251601700484752666131527121252 -0.218499295413494110107421875 +-0.781620895862579323498664507497 -0.318778903782367672992137386245 0.0997474975883960723876953125 +-0.781620895862579323498664507497 0.318778903782367672992137386245 0.0997474975883960723876953125 +-0.7816088199615478515625 -0.0969528019428253229339276231258 -0.140313601493835454769865123126 +-0.7816088199615478515625 0.0969528019428253229339276231258 -0.140313601493835454769865123126 +-0.781529617309570379113381477509 -0.128803205490112315789730246252 0.112344801425933837890625 +-0.781529617309570379113381477509 0.128803205490112315789730246252 0.112344801425933837890625 +-0.78148710727691650390625 -0.246895490586757637707648882497 -0.480437812209129289087172764994 +-0.78148710727691650390625 0.246895490586757637707648882497 -0.480437812209129289087172764994 +-0.781324815750122136925881477509 -0.0330408006906509413291850307814 0.16864240169525146484375 +-0.781324815750122136925881477509 0.0330408006906509413291850307814 0.16864240169525146484375 +-0.780853423476219110632712272491 -0.471617059409618344378856136245 -0.265226709842681873663394753748 +-0.780853423476219110632712272491 0.471617059409618344378856136245 -0.265226709842681873663394753748 +-0.780504870414733820105368522491 -0.256066739559173583984375 0.218499295413494110107421875 +-0.780504870414733820105368522491 0.256066739559173583984375 0.218499295413494110107421875 +-0.780128109455108686987045985006 -0.118080000579357149992354436563 -0.432963010668754588738948996252 +-0.780128109455108686987045985006 0.118080000579357149992354436563 -0.432963010668754588738948996252 +-0.780070477724075339587272992503 -0.315982405841350566522152121252 -0.118932845443487159031725752811 +-0.780070477724075339587272992503 0.315982405841350566522152121252 -0.118932845443487159031725752811 +-0.779706710577011130602897992503 -0.0345440002158284159561318915621 -0.3366968929767608642578125 +-0.779706710577011130602897992503 0.0345440002158284159561318915621 -0.3366968929767608642578125 +-0.779207414388656594006477007497 -0.357610505819320689813167746252 0.273771893978118907586605246252 +-0.779207414388656594006477007497 0.357610505819320689813167746252 0.273771893978118907586605246252 +-0.778905022144317671362045985006 -0.213504293560981744937166126874 -0.397142994403839100225894753748 +-0.778905022144317671362045985006 0.213504293560981744937166126874 -0.397142994403839100225894753748 +-0.778797674179077081824118522491 -0.387868845462799038958934261245 -0.381485801935195878442641514994 +-0.778797674179077081824118522491 0.387868845462799038958934261245 -0.381485801935195878442641514994 +-0.778509795665740966796875 -0.517849731445312433386618522491 0.168087303638458251953125 +-0.778509795665740966796875 0.517849731445312433386618522491 0.168087303638458251953125 +-0.778382003307342529296875 -0.4033490121364593505859375 0.4810729920864105224609375 +-0.778382003307342529296875 0.4033490121364593505859375 0.4810729920864105224609375 +-0.777976846694946266858039507497 -0.362630212306976285052684261245 0.407125335931777909692641514994 +-0.777976846694946266858039507497 0.362630212306976285052684261245 0.407125335931777909692641514994 +-0.777896785736084006579460492503 -0.186753594875335715563835492503 0 +-0.777896785736084006579460492503 0.186753594875335715563835492503 0 +-0.777496814727783203125 0 -0.18841040134429931640625 +-0.777358394861221269067641514994 -0.259598894417285896984992632497 0.480439680814743030889957253748 +-0.777358394861221269067641514994 0.259598894417285896984992632497 0.480439680814743030889957253748 +-0.776633080840110734399672764994 -0.216900442540645582711889005623 -0.268877954781055417132762386245 +-0.776633080840110734399672764994 0.216900442540645582711889005623 -0.268877954781055417132762386245 +-0.776629984378814697265625 -0.56425201892852783203125 -0.28011798858642578125 +-0.776629984378814697265625 0.56425201892852783203125 -0.28011798858642578125 +-0.776245501637458756860610264994 0 0.346329097449779521600277121252 +-0.776153612136840864721420985006 -0.0982392013072967557052450615629 0.167137598991394048519865123126 +-0.776153612136840864721420985006 0.0982392013072967557052450615629 0.167137598991394048519865123126 +-0.775698006153106689453125 -0.42713201045989990234375 -0.464598000049591064453125 +-0.775698006153106689453125 0.42713201045989990234375 -0.464598000049591064453125 +-0.775623607635498091283920985006 -0.382789796590805087017628238755 -0.248756405711174022332698996252 +-0.775623607635498091283920985006 0.382789796590805087017628238755 -0.248756405711174022332698996252 +-0.775490409135818459240852007497 -0.42859889566898345947265625 0.157853700220584869384765625 +-0.775490409135818459240852007497 0.42859889566898345947265625 0.157853700220584869384765625 +-0.775227606296539306640625 0 -0.457188320159912120477230246252 +-0.774968814849853582238381477509 -0.0644576013088226373870526231258 -0.187797594070434586965845369377 +-0.774968814849853582238381477509 0.0644576013088226373870526231258 -0.187797594070434586965845369377 +-0.773688566684722855981704014994 -0.513615584373474098889289507497 -0.200263800472021080700812944997 +-0.773688566684722855981704014994 0.513615584373474098889289507497 -0.200263800472021080700812944997 +-0.773615586757659845495993522491 -0.06990484893321990966796875 0.345155239105224609375 +-0.773615586757659845495993522491 0.06990484893321990966796875 0.345155239105224609375 +-0.77283298969268798828125 0 0.634609997272491455078125 +-0.772707617282867409436164507497 -0.34805430471897125244140625 -0.302952611446380637438835492503 +-0.772707617282867409436164507497 0.34805430471897125244140625 -0.302952611446380637438835492503 +-0.772290170192718505859375 -0.0391856011003255816360635321871 0.551844537258148193359375 +-0.772290170192718505859375 0.0391856011003255816360635321871 0.551844537258148193359375 +-0.77184422314167022705078125 -0.222314949333667744024722878748 0.278086861968040444104133257497 +-0.77184422314167022705078125 0.222314949333667744024722878748 0.278086861968040444104133257497 +-0.77166497707366943359375 -0.610922992229461669921875 0.1769340038299560546875 +-0.77166497707366943359375 0.610922992229461669921875 0.1769340038299560546875 +-0.771543914079666159899772992503 -0.222589793801307694876001619377 0.406416597962379444464176003748 +-0.771543914079666159899772992503 0.222589793801307694876001619377 0.406416597962379444464176003748 +-0.771500778198242254113381477509 -0.189666402339935313836605246252 -0.093879997730255126953125 +-0.771500778198242254113381477509 0.189666402339935313836605246252 -0.093879997730255126953125 +-0.771499100327491693640524772491 -0.353254048526287056652961382497 0.0500037999823689446876606723436 +-0.771499100327491693640524772491 0.353254048526287056652961382497 0.0500037999823689446876606723436 +-0.771374720335006758276108485006 -0.423822605609893821032585492503 -0.188030697405338287353515625 +-0.771374720335006758276108485006 0.423822605609893821032585492503 -0.188030697405338287353515625 +-0.771326538920402482446547764994 -0.352128650248050678595035378748 -0.0596682995557785006424111884371 +-0.771326538920402482446547764994 0.352128650248050678595035378748 -0.0596682995557785006424111884371 +-0.771297597885131858141960492503 -0.159462404251098643914730246252 -0.1402575969696044921875 +-0.771297597885131858141960492503 0.159462404251098643914730246252 -0.1402575969696044921875 +-0.770214974880218505859375 -0.082240998744964599609375 0.63245999813079833984375 +-0.770214974880218505859375 0.082240998744964599609375 0.63245999813079833984375 +-0.77016198635101318359375 -0.3167720139026641845703125 0.55362999439239501953125 +-0.77016198635101318359375 0.3167720139026641845703125 0.55362999439239501953125 +-0.769928419589996360095085492503 -0.322401604056358370709034488755 0.336552295088767994268863503748 +-0.769928419589996360095085492503 0.322401604056358370709034488755 0.336552295088767994268863503748 +-0.768922376632690363074118522491 -0.0626885969191789543808468465613 -0.554372477531433038855368522491 +-0.768922376632690363074118522491 0.0626885969191789543808468465613 -0.554372477531433038855368522491 +-0.76887203752994537353515625 -0.347723750770091988293586382497 -0.436375837028026569708316628748 +-0.76887203752994537353515625 0.347723750770091988293586382497 -0.436375837028026569708316628748 +-0.768807429075241022253806022491 -0.186590448766946775949193693123 -0.525946626067161582263054242503 +-0.768807429075241022253806022491 0.186590448766946775949193693123 -0.525946626067161582263054242503 +-0.768773603439331099096420985006 -0.190939199924469005242855246252 0.111936795711517336759932561563 +-0.768773603439331099096420985006 0.190939199924469005242855246252 0.111936795711517336759932561563 +-0.768634611368179343493522992503 -0.0905190531164407757858114678129 -0.351435896754264842645198996252 +-0.768634611368179343493522992503 0.0905190531164407757858114678129 -0.351435896754264842645198996252 +-0.7685671150684356689453125 -0.558393830060958884509147992503 0 +-0.7685671150684356689453125 0.558393830060958884509147992503 0 +-0.768048378825187616492087272491 -0.10486384667456150054931640625 0.549186474084854103772102007497 +-0.768048378825187616492087272491 0.10486384667456150054931640625 0.549186474084854103772102007497 +-0.768011188507080166942841970013 -0.218962407112121587582365123126 -0.047052800655364990234375 +-0.768011188507080166942841970013 0.218962407112121587582365123126 -0.047052800655364990234375 +-0.767972803115844815380341970013 0 0.224093604087829606497095369377 +-0.76772423088550567626953125 -0.128814949840307224615543191248 0.341329401731491066662727007497 +-0.76772423088550567626953125 0.128814949840307224615543191248 0.341329401731491066662727007497 +-0.7674024105072021484375 -0.128496003150939952508480246252 -0.185964000225067149774105246252 +-0.7674024105072021484375 0.128496003150939952508480246252 -0.185964000225067149774105246252 +-0.767377799749374367443977007497 -0.470246386528015147820980246252 0 +-0.767377799749374367443977007497 0.470246386528015147820980246252 0 +-0.767256754636764459753806022491 -0.181067845970392216070621316248 -0.317853248119354225842414507497 +-0.767256754636764459753806022491 0.181067845970392216070621316248 -0.317853248119354225842414507497 +-0.767175197601318359375 -0.219752001762390153372095369377 0.0561415970325470012336488423443 +-0.767175197601318359375 0.219752001762390153372095369377 0.0561415970325470012336488423443 +-0.766910970211029052734375 -0.066041998565196990966796875 -0.638346016407012939453125 +-0.766910970211029052734375 0.066041998565196990966796875 -0.638346016407012939453125 +-0.766310989856719970703125 -0.1983850002288818359375 -0.611073017120361328125 +-0.766310989856719970703125 0.1983850002288818359375 -0.611073017120361328125 +-0.76600301265716552734375 -0.50629198551177978515625 0.3961170017719268798828125 +-0.76600301265716552734375 0.50629198551177978515625 0.3961170017719268798828125 +-0.765855014324188232421875 -0.6074759960174560546875 -0.21080400049686431884765625 +-0.765855014324188232421875 0.6074759960174560546875 -0.21080400049686431884765625 +-0.765831613540649436266960492503 -0.311535894870758056640625 -0.355595389008522055895866742503 +-0.765831613540649436266960492503 0.311535894870758056640625 -0.355595389008522055895866742503 +-0.765632009506225674755341970013 -0.160948801040649430715845369377 0.167041599750518798828125 +-0.765632009506225674755341970013 0.160948801040649430715845369377 0.167041599750518798828125 +-0.7655831873416900634765625 0 0.473162376880645774157585492503 +-0.765417623519897505346420985006 -0.0652000010013580322265625 0.223347997665405278988615123126 +-0.765417623519897505346420985006 0.0652000010013580322265625 0.223347997665405278988615123126 +-0.764925622940063498766960492503 -0.0325136005878448527961488423443 -0.2320168018341064453125 +-0.764925622940063498766960492503 0.0325136005878448527961488423443 -0.2320168018341064453125 +-0.764494460821151688989516514994 -0.460214205086231231689453125 0.32596211135387420654296875 +-0.764494460821151688989516514994 0.460214205086231231689453125 0.32596211135387420654296875 +-0.763750809431076094213608485006 -0.0622260019183158916145082173443 0.472030216455459616931022992503 +-0.763750809431076094213608485006 0.0622260019183158916145082173443 0.472030216455459616931022992503 +-0.763586121797561689916733485006 -0.464506191015243541375667746252 0.105687899887561803646818248126 +-0.763586121797561689916733485006 0.464506191015243541375667746252 0.105687899887561803646818248126 +-0.763459199666976950915397992503 -0.0592352986335754408409037807814 -0.472886109352111838610710492503 +-0.763459199666976950915397992503 0.0592352986335754408409037807814 -0.472886109352111838610710492503 +-0.763214805722236544482939279987 -0.554504525661468461450454014994 0.111928046494722363557450250937 +-0.763214805722236544482939279987 0.554504525661468461450454014994 0.111928046494722363557450250937 +-0.76309001445770263671875 -0.151546001434326171875 0.628274023532867431640625 +-0.76309001445770263671875 0.151546001434326171875 0.628274023532867431640625 +-0.7626960277557373046875 -0.3836109936237335205078125 -0.520708978176116943359375 +-0.7626960277557373046875 0.3836109936237335205078125 -0.520708978176116943359375 +-0.762582600116729736328125 -0.3446146547794342041015625 0.149024545401334751471011941248 +-0.762582600116729736328125 0.3446146547794342041015625 0.149024545401334751471011941248 +-0.762153375148773126745993522491 -0.313236039876937877313167746252 0.208578103780746454409822376874 +-0.762153375148773126745993522491 0.313236039876937877313167746252 0.208578103780746454409822376874 +-0.76206600666046142578125 -0.176412601768970500604183371252 -0.44512291252613067626953125 +-0.76206600666046142578125 0.176412601768970500604183371252 -0.44512291252613067626953125 +-0.761993104219436667712272992503 -0.462035715579986572265625 -0.1260530948638916015625 +-0.761993104219436667712272992503 0.462035715579986572265625 -0.1260530948638916015625 +-0.76093952357769012451171875 -0.552852508425712541040297764994 -0.133509195595979679449527566248 +-0.76093952357769012451171875 0.552852508425712541040297764994 -0.133509195595979679449527566248 +-0.7608463764190673828125 -0.247210407257080100329460492503 0 +-0.7608463764190673828125 0.247210407257080100329460492503 0 +-0.760406970977783203125 -0.649447023868560791015625 0 +-0.760406970977783203125 0.649447023868560791015625 0 +-0.760261228680610634533820757497 0 -0.380132742226123809814453125 +-0.760229906439781166760383257497 -0.322161141037940967901676003748 0.469853860139846757348891514994 +-0.760229906439781166760383257497 0.322161141037940967901676003748 0.469853860139846757348891514994 +-0.759886932373046830591079014994 -0.170613346993923192806974498126 0.544025102257728598864616742503 +-0.759886932373046830591079014994 0.170613346993923192806974498126 0.544025102257728598864616742503 +-0.759834384918212979442841970013 -0.0969135999679565512954226846887 -0.230780792236328136102230246252 +-0.759834384918212979442841970013 0.0969135999679565512954226846887 -0.230780792236328136102230246252 +-0.75957000255584716796875 -0.551855027675628662109375 0.34425199031829833984375 +-0.75957000255584716796875 0.551855027675628662109375 0.34425199031829833984375 +-0.759190243482589677270766514994 -0.307350662350654613153011496252 -0.227300205826759332827791126874 +-0.759190243482589677270766514994 0.307350662350654613153011496252 -0.227300205826759332827791126874 +-0.758640286326408341821547764994 -0.339800262451171841693309261245 -0.1774816997349262237548828125 +-0.758640286326408341821547764994 0.339800262451171841693309261245 -0.1774816997349262237548828125 +-0.758263492584228537829460492503 -0.124155002832412722502120061563 0.468638080358505237921207253748 +-0.758263492584228537829460492503 0.124155002832412722502120061563 0.468638080358505237921207253748 +-0.758093774318695068359375 -0.187096893787384033203125 0.335840950906276691778629128748 +-0.758093774318695068359375 0.187096893787384033203125 0.335840950906276691778629128748 +-0.757770395278930752880341970013 -0.129966402053833002261384876874 0.221116805076599143298210492503 +-0.757770395278930752880341970013 0.129966402053833002261384876874 0.221116805076599143298210492503 +-0.7575661242008209228515625 -0.502673482894897438733039507497 0.275521849095821391717464621252 +-0.7575661242008209228515625 0.502673482894897438733039507497 0.275521849095821391717464621252 +-0.757356816530227683337272992503 -0.385888952016830433233707253748 0 +-0.757356816530227683337272992503 0.385888952016830433233707253748 0 +-0.7560927867889404296875 -0.213902401924133317434595369377 -0.150232803821563731805355246252 +-0.7560927867889404296875 0.213902401924133317434595369377 -0.150232803821563731805355246252 +-0.755802142620086603308493522491 -0.281011691689491249768195757497 0.268878790736198414190738503748 +-0.755802142620086603308493522491 0.281011691689491249768195757497 0.268878790736198414190738503748 +-0.755646300315857000207131477509 -0.414234888553619395867855246252 0.25963018834590911865234375 +-0.755646300315857000207131477509 0.414234888553619395867855246252 0.25963018834590911865234375 +-0.755643618106842107629006477509 -0.285095697641372713970753238755 0.397143906354904208111378238755 +-0.755643618106842107629006477509 0.285095697641372713970753238755 0.397143906354904208111378238755 +-0.755110225081443764416633257497 -0.273817309737205472064403011245 -0.278086861968040444104133257497 +-0.755110225081443764416633257497 0.273817309737205472064403011245 -0.278086861968040444104133257497 +-0.755028909444808937756477007497 -0.273419103026390108990284488755 -0.406415712833404552117855246252 +-0.755028909444808937756477007497 0.273419103026390108990284488755 -0.406415712833404552117855246252 +-0.754830089211463883813735264994 -0.306396847963333107678352007497 -0.48872558772563934326171875 +-0.754830089211463883813735264994 0.306396847963333107678352007497 -0.48872558772563934326171875 +-0.754808807373046897204460492503 -0.24416720867156982421875 -0.103176796436309822779797684689 +-0.754808807373046897204460492503 0.24416720867156982421875 -0.103176796436309822779797684689 +-0.75446338951587677001953125 -0.423091042041778553350894753748 0.392784155905246734619140625 +-0.75446338951587677001953125 0.423091042041778553350894753748 0.392784155905246734619140625 +-0.754173612594604581005341970013 -0.246124005317687993832365123126 0.103176796436309822779797684689 +-0.754173612594604581005341970013 0.246124005317687993832365123126 0.103176796436309822779797684689 +-0.753858217597007773669304242503 -0.146650496125221241339176003748 -0.364268340170383453369140625 +-0.753858217597007773669304242503 0.146650496125221241339176003748 -0.364268340170383453369140625 +-0.753748530149459861071647992503 -0.379927046597003936767578125 0.100094298645853993501297907187 +-0.753748530149459861071647992503 0.379927046597003936767578125 0.100094298645853993501297907187 +-0.753611993789672918175881477509 -0.183117604255676275082365123126 -0.196308004856109635793970369377 +-0.753611993789672918175881477509 0.183117604255676275082365123126 -0.196308004856109635793970369377 +-0.753518390655517622533920985006 -0.216498398780822776110710492503 0.159179198741912858450220369377 +-0.753518390655517622533920985006 0.216498398780822776110710492503 0.159179198741912858450220369377 +-0.7530410289764404296875 -0.647409975528717041015625 0.11743099987506866455078125 +-0.7530410289764404296875 0.647409975528717041015625 0.11743099987506866455078125 +-0.752795994281768798828125 -0.4656510055065155029296875 0.4652599990367889404296875 +-0.752795994281768798828125 0.4656510055065155029296875 0.4652599990367889404296875 +-0.7526810169219970703125 -0.324860990047454833984375 -0.57265698909759521484375 +-0.7526810169219970703125 0.324860990047454833984375 -0.57265698909759521484375 +-0.75224697589874267578125 -0.22011299431324005126953125 0.6210269927978515625 +-0.75224697589874267578125 0.22011299431324005126953125 0.6210269927978515625 +-0.7522304356098175048828125 -0.377360892295837413445980246252 -0.1193663515150547027587890625 +-0.7522304356098175048828125 0.377360892295837413445980246252 -0.1193663515150547027587890625 +-0.751128891110420138232939279987 -0.125072243064641958065763560626 -0.568034476041793801037727007497 +-0.751128891110420138232939279987 0.125072243064641958065763560626 -0.568034476041793801037727007497 +-0.751102399826049871300881477509 0 -0.27539920806884765625 +-0.750646883249282859118522992503 -0.0350608009845018372963032504686 0.397239854931831337658820757497 +-0.750646883249282859118522992503 0.0350608009845018372963032504686 0.397239854931831337658820757497 +-0.750400018692016668175881477509 -0.0330000013113021864463725307814 0.2753384113311767578125 +-0.750400018692016668175881477509 0.0330000013113021864463725307814 0.2753384113311767578125 +-0.750320506095886186059829014994 -0.05589344911277294158935546875 -0.395467604696750629766910378748 +-0.750320506095886186059829014994 0.05589344911277294158935546875 -0.395467604696750629766910378748 +-0.750039196014404385692841970013 -0.274275207519531272204460492503 0.047052800655364990234375 +-0.750039196014404385692841970013 0.274275207519531272204460492503 0.047052800655364990234375 +-0.75 0 0 +-0.7498819828033447265625 -0.646575987339019775390625 -0.140058994293212890625 +-0.7498819828033447265625 0.646575987339019775390625 -0.140058994293212890625 +-0.749826383590698308800881477509 -0.273144793510437022820980246252 -0.0561415970325470012336488423443 +-0.749826383590698308800881477509 0.273144793510437022820980246252 -0.0561415970325470012336488423443 +-0.749660015106201171875 -0.594892024993896484375 0.2900229990482330322265625 +-0.749660015106201171875 0.594892024993896484375 0.2900229990482330322265625 +-0.749538004398345947265625 -0.3817160129547119140625 0.54082000255584716796875 +-0.749538004398345947265625 0.3817160129547119140625 0.54082000255584716796875 +-0.749146503210067815636818977509 -0.18548910319805145263671875 0.463004100322723377569644753748 +-0.749146503210067815636818977509 0.18548910319805145263671875 0.463004100322723377569644753748 +-0.7489170134067535400390625 -0.380122205615043673443409488755 0.323467192053794871942073996252 +-0.7489170134067535400390625 0.380122205615043673443409488755 0.323467192053794871942073996252 +-0.748629617691040083471420985006 -0.0648679971694946372329226846887 -0.274492788314819324835269753748 +-0.748629617691040083471420985006 0.0648679971694946372329226846887 -0.274492788314819324835269753748 +-0.748099184036254971630341970013 -0.18596160411834716796875 0.213929605484008800164730246252 +-0.748099184036254971630341970013 0.18596160411834716796875 0.213929605484008800164730246252 +-0.74807775020599365234375 -0.0305062495172023773193359375 -0.04414950124919414520263671875 +-0.74807775020599365234375 0.0305062495172023773193359375 -0.04414950124919414520263671875 +-0.747959411144256569592414507497 -0.453784489631652854235710492503 0.211274103820323938540681751874 +-0.747959411144256569592414507497 0.453784489631652854235710492503 0.211274103820323938540681751874 +-0.747913134098052934106704014994 -0.234954944998025883062808816248 0.536582785844802789831931022491 +-0.747913134098052934106704014994 0.234954944998025883062808816248 0.536582785844802789831931022491 +-0.747768598794937178197983485006 -0.498032087087631247790397992503 0.0529794014990329770187216240629 +-0.747768598794937178197983485006 0.498032087087631247790397992503 0.0529794014990329770187216240629 +-0.747687757015228271484375 -0.05884350277483463287353515625 0 +-0.747687757015228271484375 0.05884350277483463287353515625 0 +-0.747682178020477317126335492503 -0.118573205173015602809094559689 -0.486735320091247591900440738755 +-0.747682178020477317126335492503 0.118573205173015602809094559689 -0.486735320091247591900440738755 +-0.747541791200637795178352007497 -0.497174423933029185906917746252 -0.06323669850826263427734375 +-0.747541791200637795178352007497 0.497174423933029185906917746252 -0.06323669850826263427734375 +-0.7475047409534454345703125 -0.0309742502868175506591796875 0.052697248756885528564453125 +-0.7475047409534454345703125 0.0309742502868175506591796875 0.052697248756885528564453125 +-0.74722053110599517822265625 -0.238269457221031183413728626874 -0.327702192962169625012336382497 +-0.74722053110599517822265625 0.238269457221031183413728626874 -0.327702192962169625012336382497 +-0.747192811965942449425881477509 -0.149943995475769059622095369377 -0.243351197242736821957365123126 +-0.747192811965942449425881477509 0.149943995475769059622095369377 -0.243351197242736821957365123126 +-0.746948876976966769092314279987 -0.542685595154762223657485264994 0.223739248514175398385717130623 +-0.746948876976966769092314279987 0.542685595154762223657485264994 0.223739248514175398385717130623 +-0.746822768449783347399772992503 -0.09382554702460765838623046875 0.394908300042152382580695757497 +-0.746822768449783347399772992503 0.09382554702460765838623046875 0.394908300042152382580695757497 +-0.74542415142059326171875 -0.445005652308464005884047764994 -0.385762700438499417376903011245 +-0.74542415142059326171875 0.445005652308464005884047764994 -0.385762700438499417376903011245 +-0.745236778259277365954460492503 -0.0981823980808258084396200615629 0.273828792572021473272769753748 +-0.745236778259277365954460492503 0.0981823980808258084396200615629 0.273828792572021473272769753748 +-0.744925975799560546875 -0.13256900012493133544921875 -0.653842985630035400390625 +-0.744925975799560546875 0.13256900012493133544921875 -0.653842985630035400390625 +-0.74477626383304595947265625 0 -0.0883642472326755523681640625 +-0.744566854834556535180922764994 -0.246436257660388929879857755623 0.327703054249286640509097878748 +-0.744566854834556535180922764994 0.246436257660388929879857755623 0.327703054249286640509097878748 +-0.743949764966964632861845529987 -0.492069599032401994165297764994 -0.326965297758579243048160378748 +-0.743949764966964632861845529987 0.492069599032401994165297764994 -0.326965297758579243048160378748 +-0.743898463249206498559829014994 0 -0.590860116481780939245993522491 +-0.743885156512260392602797764994 -0.588224816322326593542868522491 0.0559227015823125783722247206242 +-0.743885156512260392602797764994 0.588224816322326593542868522491 0.0559227015823125783722247206242 +-0.74335424602031707763671875 -0.089307747781276702880859375 -0.04414349980652332305908203125 +-0.74335424602031707763671875 0.089307747781276702880859375 -0.04414349980652332305908203125 +-0.743198382854461714330795985006 -0.40343038737773895263671875 -0.308057391643524192126335492503 +-0.743198382854461714330795985006 0.40343038737773895263671875 -0.308057391643524192126335492503 +-0.743180239200591952197783029987 -0.249526062607765192202791126874 -0.536581823229789756091179242503 +-0.743180239200591952197783029987 0.249526062607765192202791126874 -0.536581823229789756091179242503 +-0.74294938147068023681640625 -0.588277986645698525158820757497 -0.066749848425388336181640625 +-0.74294938147068023681640625 0.588277986645698525158820757497 -0.066749848425388336181640625 +-0.74273626506328582763671875 -0.0898155011236667633056640625 0.05268749780952930450439453125 +-0.74273626506328582763671875 0.0898155011236667633056640625 0.05268749780952930450439453125 +-0.74255700409412384033203125 0 0.1054019965231418609619140625 +-0.7423207461833953857421875 -0.06085575185716152191162109375 -0.088072501122951507568359375 +-0.7423207461833953857421875 0.06085575185716152191162109375 -0.088072501122951507568359375 +-0.741762006282806418688835492503 0 -0.509695190191268965307358485006 +-0.741065722703933671411391514994 -0.413301441073417652471988503748 0.0500301515683531719536070170307 +-0.741065722703933671411391514994 0.413301441073417652471988503748 0.0500301515683531719536070170307 +-0.74083788692951202392578125 -0.412424245476722683978465511245 -0.05971249751746654510498046875 +-0.74083788692951202392578125 0.412424245476722683978465511245 -0.05971249751746654510498046875 +-0.7407667636871337890625 -0.117324002087116241455078125 0 +-0.7407667636871337890625 0.117324002087116241455078125 0 +-0.7403562068939208984375 -0.233900991082191478387386496252 -0.455151611566543601306022992503 +-0.7403562068939208984375 0.233900991082191478387386496252 -0.455151611566543601306022992503 +-0.74003626406192779541015625 -0.0617415010929107666015625 0.10504424571990966796875 +-0.74003626406192779541015625 0.0617415010929107666015625 0.10504424571990966796875 +-0.739895233511924765856804242503 -0.368800559639930691790965511245 0.197587598860263807809545255623 +-0.739895233511924765856804242503 0.368800559639930691790965511245 0.197587598860263807809545255623 +-0.739755874872207619397102007497 -0.446795108914375294073551003748 -0.251267409324646029400440738755 +-0.739755874872207619397102007497 0.446795108914375294073551003748 -0.251267409324646029400440738755 +-0.739462903141975380627570757497 -0.383181561529636338647719639994 0.457019342482089974133430132497 +-0.739462903141975380627570757497 0.383181561529636338647719639994 0.457019342482089974133430132497 +-0.73942689597606658935546875 -0.152654047310352314337222878748 0.390442399680614449231086382497 +-0.73942689597606658935546875 0.152654047310352314337222878748 0.390442399680614449231086382497 +-0.739104795455932661596420985006 -0.3061439990997314453125 0 +-0.739104795455932661596420985006 0.3061439990997314453125 0 +-0.73881900310516357421875 -0.536781013011932373046875 -0.4074459969997406005859375 +-0.73881900310516357421875 0.536781013011932373046875 -0.4074459969997406005859375 +-0.73870098590850830078125 -0.485709011554718017578125 -0.4673419892787933349609375 +-0.73870098590850830078125 0.485709011554718017578125 -0.4673419892787933349609375 +-0.738174021244049072265625 0 -0.67461001873016357421875 +-0.7379620075225830078125 -0.26408100128173828125 -0.621025979518890380859375 +-0.7379620075225830078125 0.26408100128173828125 -0.621025979518890380859375 +-0.737808322906494118420539507497 -0.367454695701599109991519753748 -0.361407601833343528063835492503 +-0.737808322906494118420539507497 0.367454695701599109991519753748 -0.361407601833343528063835492503 +-0.737798485159873895788962272491 -0.536039417982101418225227007497 -0.2661120891571044921875 +-0.737798485159873895788962272491 0.536039417982101418225227007497 -0.2661120891571044921875 +-0.737536489963531494140625 -0.030507749877870082855224609375 -0.1326997540891170501708984375 +-0.737536489963531494140625 0.030507749877870082855224609375 -0.1326997540891170501708984375 +-0.73753559589385986328125 -0.490594482421875033306690738755 0.15924060344696044921875 +-0.73753559589385986328125 0.490594482421875033306690738755 0.15924060344696044921875 +-0.737525606155395530016960492503 -0.153421604633331321032585492503 0.269291210174560535772769753748 +-0.737525606155395530016960492503 0.153421604633331321032585492503 0.269291210174560535772769753748 +-0.737422418594360418175881477509 -0.271363210678100597039730246252 0.150232803821563731805355246252 +-0.737422418594360418175881477509 0.271363210678100597039730246252 0.150232803821563731805355246252 +-0.737171983718872159130341970013 -0.117929601669311531764172684689 -0.287524795532226595806690738755 +-0.737171983718872159130341970013 0.117929601669311531764172684689 -0.287524795532226595806690738755 +-0.737030696868896550988381477509 -0.343544411659240711554019753748 0.385697686672210715563835492503 +-0.737030696868896550988381477509 0.343544411659240711554019753748 0.385697686672210715563835492503 +-0.736913105845451332776008257497 -0.405775409936904862817641514994 -0.441368100047111466821547764994 +-0.736913105845451332776008257497 0.405775409936904862817641514994 -0.441368100047111466821547764994 +-0.736866378784179709704460492503 -0.267750406265258811266960492503 -0.159179198741912858450220369377 +-0.736866378784179709704460492503 0.267750406265258811266960492503 -0.159179198741912858450220369377 +-0.736787658929824784692641514994 -0.111520000547170636262528375937 -0.408909510076045978888004128748 +-0.736787658929824784692641514994 0.111520000547170636262528375937 -0.408909510076045978888004128748 +-0.736567020416259765625 -0.2899250090122222900390625 0.611074984073638916015625 +-0.736567020416259765625 0.2899250090122222900390625 0.611074984073638916015625 +-0.736444795131683371813835492503 -0.245935794711112987176448996252 0.455153381824493441509815738755 +-0.736444795131683371813835492503 0.245935794711112987176448996252 0.455153381824493441509815738755 +-0.7363460063934326171875 -0.634576976299285888671875 0.23474900424480438232421875 +-0.7363460063934326171875 0.634576976299285888671875 0.23474900424480438232421875 +-0.735958385467529341283920985006 -0.236801600456237798519865123126 -0.20564639568328857421875 +-0.735958385467529341283920985006 0.236801600456237798519865123126 -0.20564639568328857421875 +-0.735918113589286826403679242503 -0.337743255496025074346988503748 0.258562344312667835577457253748 +-0.735918113589286826403679242503 0.337743255496025074346988503748 0.258562344312667835577457253748 +-0.735643196105957075658920985006 -0.300027203559875499383480246252 0.093879997730255126953125 +-0.735643196105957075658920985006 0.300027203559875499383480246252 0.093879997730255126953125 +-0.735632520914077714380141514994 -0.201642943918704992123380748126 -0.375079494714736949578792746252 +-0.735632520914077714380141514994 0.201642943918704992123380748126 -0.375079494714736949578792746252 +-0.73509822785854339599609375 -0.1197082512080669403076171875 -0.08831849880516529083251953125 +-0.73509822785854339599609375 0.1197082512080669403076171875 -0.08831849880516529083251953125 +-0.734611988067626953125 -0.584713995456695556640625 -0.3441739976406097412109375 +-0.734611988067626953125 0.584713995456695556640625 -0.3441739976406097412109375 +-0.734592819213867209704460492503 -0.24100399017333984375 0.20564639568328857421875 +-0.734592819213867209704460492503 0.24100399017333984375 0.20564639568328857421875 +-0.734191340208053544458266514994 0 0.602879497408866815710837272491 +-0.734183979034423894738381477509 -0.297395205497741732525440738755 -0.111936795711517336759932561563 +-0.734183979034423894738381477509 0.297395205497741732525440738755 -0.111936795711517336759932561563 +-0.7339365184307098388671875 -0.14795400202274322509765625 -0.044120999984443187713623046875 +-0.7339365184307098388671875 0.14795400202274322509765625 -0.044120999984443187713623046875 +-0.733841609954834050988381477509 -0.0325120002031326280067524692186 -0.316891193389892578125 +-0.733841609954834050988381477509 0.0325120002031326280067524692186 -0.316891193389892578125 +-0.73322997987270355224609375 -0.1486679948866367340087890625 0.05264849960803985595703125 +-0.73322997987270355224609375 0.1486679948866367340087890625 0.05264849960803985595703125 +-0.7330817282199859619140625 -0.580376842617988608630241742503 0.168087303638458251953125 +-0.7330817282199859619140625 0.580376842617988608630241742503 0.168087303638458251953125 +-0.732968115806579612048210492503 -0.486583185195922862664730246252 -0.189723600447177898065120871252 +-0.732968115806579612048210492503 0.486583185195922862664730246252 -0.189723600447177898065120871252 +-0.73275826871395111083984375 -0.09089325182139873504638671875 -0.131544001400470733642578125 +-0.73275826871395111083984375 0.09089325182139873504638671875 -0.131544001400470733642578125 +-0.73268401622772216796875 -0.12075300514698028564453125 0.1053232513368129730224609375 +-0.73268401622772216796875 0.12075300514698028564453125 0.1053232513368129730224609375 +-0.732533407211303666528579014994 -0.361523696780204739642528011245 -0.234936605393886555059879128748 +-0.732533407211303666528579014994 0.361523696780204739642528011245 -0.234936605393886555059879128748 +-0.73249201476573944091796875 -0.030975750647485256195068359375 0.158102251589298248291015625 +-0.73249201476573944091796875 0.030975750647485256195068359375 0.158102251589298248291015625 +-0.732407608628273032458366742503 -0.404787845909595489501953125 0.1490840502083301544189453125 +-0.732407608628273032458366742503 0.404787845909595489501953125 0.1490840502083301544189453125 +-0.7321594059467315673828125 0 -0.431788969039916981085269753748 +-0.731857001781463623046875 -0.678911983966827392578125 0.0588590018451213836669921875 +-0.731857001781463623046875 0.678911983966827392578125 0.0588590018451213836669921875 +-0.731704226136207558361945757497 -0.07812894880771636962890625 0.600836998224258400647102007497 +-0.731704226136207558361945757497 0.07812894880771636962890625 0.600836998224258400647102007497 +-0.731653887033462457800681022491 -0.300933413207530975341796875 0.5259484946727752685546875 +-0.731653887033462457800681022491 0.300933413207530975341796875 0.5259484946727752685546875 +-0.73164331912994384765625 -0.0371232010424137129356303432814 0.52280008792877197265625 +-0.73164331912994384765625 0.0371232010424137129356303432814 0.52280008792877197265625 +-0.730948781967163174755341970013 -0.204141592979431157894865123126 -0.253061604499816905633480246252 +-0.730948781967163174755341970013 0.204141592979431157894865123126 -0.253061604499816905633480246252 +-0.730791985988616943359375 -0.678975999355316162109375 -0.070249997079372406005859375 +-0.730791985988616943359375 0.678975999355316162109375 -0.070249997079372406005859375 +-0.730584001541137784130341970013 0 0.325956797599792513775440738755 +-0.729779416322708152087272992503 -0.328717954456806182861328125 -0.286121910810470558850227007497 +-0.729779416322708152087272992503 0.328717954456806182861328125 -0.286121910810470558850227007497 +-0.7292782366275787353515625 -0.1750814951956272125244140625 0 +-0.7292782366275787353515625 0.1750814951956272125244140625 0 +-0.7289032638072967529296875 0 -0.176634751260280609130859375 +-0.728680363297462441174445757497 -0.210223694145679457223607755623 0.383837898075580608026058371252 +-0.728680363297462441174445757497 0.210223694145679457223607755623 0.383837898075580608026058371252 +-0.728565421700477555688735264994 -0.0627398986369371441940145928129 -0.606428715586662225867087272491 +-0.728565421700477555688735264994 0.0627398986369371441940145928129 -0.606428715586662225867087272491 +-0.728520569205284074243422764994 -0.400276905298233010022102007497 -0.1775845475494861602783203125 +-0.728520569205284074243422764994 0.400276905298233010022102007497 -0.1775845475494861602783203125 +-0.728452777862548805920539507497 -0.0593891970813274425178285298443 -0.525194978713989235608039507497 +-0.728452777862548805920539507497 0.0593891970813274425178285298443 -0.525194978713989235608039507497 +-0.7284050881862640380859375 -0.329422500729560863153011496252 -0.413408687710762057232471988755 +-0.7284050881862640380859375 0.329422500729560863153011496252 -0.413408687710762057232471988755 +-0.728343880176544167248664507497 -0.176769898831844324282869251874 -0.498265224695205677374332253748 +-0.728343880176544167248664507497 0.176769898831844324282869251874 -0.498265224695205677374332253748 +-0.728116214275360107421875 -0.529004681110382124487045985006 0 +-0.728116214275360107421875 0.529004681110382124487045985006 0 +-0.728108787536621115954460492503 -0.0657927989959716796875 0.32485198974609375 +-0.728108787536621115954460492503 0.0657927989959716796875 0.32485198974609375 +-0.72799544036388397216796875 -0.188465750217437721936164507497 -0.580519366264343195105368522491 +-0.72799544036388397216796875 0.188465750217437721936164507497 -0.580519366264343195105368522491 +-0.727702862024307228772102007497 -0.4809773862361907958984375 0.376311151683330513684211382497 +-0.727702862024307228772102007497 0.4809773862361907958984375 0.376311151683330513684211382497 +-0.72764401137828826904296875 -0.09209925122559070587158203125 0.156691499054431915283203125 +-0.72764401137828826904296875 0.09209925122559070587158203125 0.156691499054431915283203125 +-0.727624779939651467053352007497 -0.0993446968495845794677734375 0.520281922817230291222756477509 +-0.727624779939651467053352007497 0.0993446968495845794677734375 0.520281922817230291222756477509 +-0.72756226360797882080078125 -0.577102196216583207544204014994 -0.200263800472021080700812944997 +-0.72756226360797882080078125 0.577102196216583207544204014994 -0.200263800472021080700812944997 +-0.727317988872528076171875 -0.0412500016391277313232421875 0.685060024261474609375 +-0.727317988872528076171875 0.0412500016391277313232421875 0.685060024261474609375 +-0.72718298435211181640625 -0.442864000797271728515625 -0.524478018283843994140625 +-0.72718298435211181640625 0.442864000797271728515625 -0.524478018283843994140625 +-0.727154618501663185803352007497 -0.304490403831005063128856136245 0.317854945361614238397152121252 +-0.727154618501663185803352007497 0.304490403831005063128856136245 0.317854945361614238397152121252 +-0.7265332639217376708984375 -0.06042900122702121734619140625 -0.17606024444103240966796875 +-0.7265332639217376708984375 0.06042900122702121734619140625 -0.17606024444103240966796875 +-0.7264416217803955078125 -0.209237599372863791735710492503 0.261728811264038074835269753748 +-0.7264416217803955078125 0.209237599372863791735710492503 0.261728811264038074835269753748 +-0.7261409759521484375 -0.628310978412628173828125 -0.2791860103607177734375 +-0.7261409759521484375 0.628310978412628173828125 -0.2791860103607177734375 +-0.726116800308227561266960492503 -0.332474398612976118627670985006 0.0470623999834060696700888115629 +-0.726116800308227561266960492503 0.332474398612976118627670985006 0.0470623999834060696700888115629 +-0.725954389572143643505341970013 -0.331415200233459494860710492503 -0.0561583995819091852386151231258 +-0.725954389572143643505341970013 0.331415200233459494860710492503 -0.0561583995819091852386151231258 +-0.724965989589691162109375 -0.4453589916229248046875 0.525433003902435302734375 +-0.724965989589691162109375 0.4453589916229248046875 0.525433003902435302734375 +-0.724935513734817460473891514994 -0.14396870136260986328125 0.596860322356223993445212272491 +-0.724935513734817460473891514994 0.14396870136260986328125 0.596860322356223993445212272491 +-0.724745699763298056872429242503 -0.444121587276458729132144753748 0 +-0.724745699763298056872429242503 0.444121587276458729132144753748 0 +-0.724561226367950395044204014994 -0.364430443942546811175731136245 -0.494673529267311062884715511245 +-0.724561226367950395044204014994 0.364430443942546811175731136245 -0.494673529267311062884715511245 +-0.724257910251617453845085492503 -0.43599240481853485107421875 0.3088062107563018798828125 +-0.724257910251617453845085492503 0.43599240481853485107421875 0.3088062107563018798828125 +-0.723599970340728759765625 -0.52572000026702880859375 0.4472149908542633056640625 +-0.723599970340728759765625 0.52572000026702880859375 0.4472149908542633056640625 +-0.723420810699462957238381477509 -0.0851944029331207358657351846887 -0.330763196945190462994190738755 +-0.723420810699462957238381477509 0.0851944029331207358657351846887 -0.330763196945190462994190738755 +-0.723285412788391091076789507497 -0.2942283451557159423828125 -0.335840089619159676281867632497 +-0.723285412788391091076789507497 0.2942283451557159423828125 -0.335840089619159676281867632497 +-0.72328197956085205078125 -0.1778122521936893463134765625 -0.0880124978721141815185546875 +-0.72328197956085205078125 0.1778122521936893463134765625 -0.0880124978721141815185546875 +-0.72309149801731109619140625 -0.14949600398540496826171875 -0.13149149715900421142578125 +-0.72309149801731109619140625 0.14949600398540496826171875 -0.13149149715900421142578125 +-0.72305078804492950439453125 0 0.446875578165054299084602007497 +-0.723045605421066328588608485006 -0.525320076942443869860710492503 0.106037096679210671168469559689 +-0.723045605421066328588608485006 0.525320076942443869860710492503 0.106037096679210671168469559689 +-0.722743988037109375 -0.122726999223232269287109375 0.680131971836090087890625 +-0.722743988037109375 0.122726999223232269287109375 0.680131971836090087890625 +-0.7225639820098876953125 -0.121237599849700936061047684689 0.321251201629638716283920985006 +-0.7225639820098876953125 0.121237599849700936061047684689 0.321251201629638716283920985006 +-0.722386622428893954150908029987 -0.616974672675132729260383257497 0 +-0.722386622428893954150908029987 0.616974672675132729260383257497 0 +-0.722124004364013694079460492503 -0.170416796207428000720085492503 -0.299155998229980457647769753748 +-0.722124004364013694079460492503 0.170416796207428000720085492503 -0.299155998229980457647769753748 +-0.7215915024280548095703125 -0.524262276291847184594985264994 0.3270393908023834228515625 +-0.7215915024280548095703125 0.524262276291847184594985264994 0.3270393908023834228515625 +-0.721320208907127335962172764994 -0.0587690018117427784294370951557 0.445806315541267372815070757497 +-0.721320208907127335962172764994 0.0587690018117427784294370951557 0.445806315541267372815070757497 +-0.721164670586585954126235264994 -0.438700291514396656378238503748 0.0998163498938083593170489393742 +-0.721164670586585954126235264994 0.438700291514396656378238503748 0.0998163498938083593170489393742 +-0.721044799685478188244758257497 -0.0559444487094879136512837192186 -0.446614658832550026623664507497 +-0.721044799685478188244758257497 0.0559444487094879136512837192186 -0.446614658832550026623664507497 +-0.7208900749683380126953125 -0.523755007982254050524772992503 -0.126482395827770238705411998126 +-0.7208900749683380126953125 0.523755007982254050524772992503 -0.126482395827770238705411998126 +-0.72072525322437286376953125 -0.1790054999291896820068359375 0.1049407459795475006103515625 +-0.72072525322437286376953125 0.1790054999291896820068359375 0.1049407459795475006103515625 +-0.720217806100845403527443977509 -0.305205291509628329205128238755 0.445124709606170676501335492503 +-0.720217806100845403527443977509 0.305205291509628329205128238755 0.445124709606170676501335492503 +-0.7200104892253875732421875 -0.205277256667613983154296875 -0.0441120006144046783447265625 +-0.7200104892253875732421875 0.205277256667613983154296875 -0.0441120006144046783447265625 +-0.71997450292110443115234375 0 0.210087753832340240478515625 +-0.719892883300781272204460492503 -0.161633697152137767449886496252 0.515392202138900801244858485006 +-0.719892883300781272204460492503 0.161633697152137767449886496252 0.515392202138900801244858485006 +-0.719729006290435791015625 -0.166611901670694340094058816248 -0.420393861830234527587890625 +-0.719729006290435791015625 0.166611901670694340094058816248 -0.420393861830234527587890625 +-0.719660153985023476330695757497 -0.4363670647144317626953125 -0.11905014514923095703125 +-0.719660153985023476330695757497 0.4363670647144317626953125 -0.11905014514923095703125 +-0.71943975985050201416015625 -0.120465002954006195068359375 -0.1743412502110004425048828125 +-0.71943975985050201416015625 0.120465002954006195068359375 -0.1743412502110004425048828125 +-0.7192267477512359619140625 -0.206017501652240753173828125 0.05263274721801280975341796875 +-0.7192267477512359619140625 0.206017501652240753173828125 0.05263274721801280975341796875 +-0.719183981418609619140625 -0.672317981719970703125 0.17539300024509429931640625 +-0.719183981418609619140625 0.672317981719970703125 0.17539300024509429931640625 +-0.719003975391387939453125 -0.19909299910068511962890625 -0.665880024433135986328125 +-0.719003975391387939453125 0.19909299910068511962890625 -0.665880024433135986328125 +-0.718949973583221435546875 -0.385904014110565185546875 -0.578090012073516845703125 +-0.718949973583221435546875 0.385904014110565185546875 -0.578090012073516845703125 +-0.7185800075531005859375 -0.066565997898578643798828125 -0.692251026630401611328125 +-0.7185800075531005859375 0.066565997898578643798828125 -0.692251026630401611328125 +-0.718226015567779541015625 -0.572050988674163818359375 0.3961170017719268798828125 +-0.718226015567779541015625 0.572050988674163818359375 0.3961170017719268798828125 +-0.71778000891208648681640625 -0.15088950097560882568359375 0.1566014997661113739013671875 +-0.71778000891208648681640625 0.15088950097560882568359375 0.1566014997661113739013671875 +-0.71772480010986328125 -0.324343204498291015625 0.140258395671844476870759876874 +-0.71772480010986328125 0.324343204498291015625 0.140258395671844476870759876874 +-0.717694222927093505859375 -0.476216983795166026727230246252 0.261020699143409751208366742503 +-0.717694222927093505859375 0.476216983795166026727230246252 0.261020699143409751208366742503 +-0.71757902204990386962890625 -0.06112500093877315521240234375 0.20938874781131744384765625 +-0.71757902204990386962890625 0.06112500093877315521240234375 0.20938874781131744384765625 +-0.717320823669433615954460492503 -0.294810390472412142681690738755 0.196308803558349620477230246252 +-0.717320823669433615954460492503 0.294810390472412142681690738755 0.196308803558349620477230246252 +-0.71711777150630950927734375 -0.03048150055110454559326171875 -0.21751575171947479248046875 +-0.71711777150630950927734375 0.03048150055110454559326171875 -0.21751575171947479248046875 +-0.717042982578277587890625 -0.3582229912281036376953125 0.5979340076446533203125 +-0.717042982578277587890625 0.3582229912281036376953125 0.5979340076446533203125 +-0.716137742996215798108039507497 -0.117257502675056454743973688437 0.442602631449699412957698996252 +-0.716137742996215798108039507497 0.117257502675056454743973688437 0.442602631449699412957698996252 +-0.715539979934692427221420985006 0 -0.35777199268341064453125 +-0.715388977527618319385283029987 -0.615039476752281211169304242503 0.111559449881315220221011941248 +-0.715388977527618319385283029987 0.615039476752281211169304242503 0.111559449881315220221011941248 +-0.715156194567680314477797764994 -0.442368455231189727783203125 0.441996999084949493408203125 +-0.715156194567680314477797764994 0.442368455231189727783203125 0.441996999084949493408203125 +-0.715102189779281638415397992503 -0.290270698070526134149105246252 -0.4630031883716583251953125 +-0.715102189779281638415397992503 0.290270698070526134149105246252 -0.4630031883716583251953125 +-0.715046966075897127979033029987 -0.308617940545082070080695757497 -0.5440241396427154541015625 +-0.715046966075897127979033029987 0.308617940545082070080695757497 -0.5440241396427154541015625 +-0.7147547900676727294921875 -0.400823092460632357525440738755 0.37211130559444427490234375 +-0.7147547900676727294921875 0.400823092460632357525440738755 0.37211130559444427490234375 +-0.7146346271038055419921875 -0.209107344597578043154939564374 0.589975643157958917761618522491 +-0.7146346271038055419921875 0.209107344597578043154939564374 0.589975643157958917761618522491 +-0.714531993865966885692841970013 -0.289271211624145541119190738755 -0.213929605484008800164730246252 +-0.714531993865966885692841970013 0.289271211624145541119190738755 -0.213929605484008800164730246252 +-0.714014387130737393505341970013 -0.319812011718750011102230246252 -0.167041599750518798828125 +-0.714014387130737393505341970013 0.319812011718750011102230246252 -0.167041599750518798828125 +-0.713665950298309259558493522491 -0.391221839189529407843082253748 0.245206288993358612060546875 +-0.713665950298309259558493522491 0.391221839189529407843082253748 0.245206288993358612060546875 +-0.713663417100906305456931022491 -0.269257047772407498431590511245 0.375080356001853909564403011245 +-0.713663417100906305456931022491 0.269257047772407498431590511245 0.375080356001853909564403011245 +-0.71350002288818359375 -0.17609119415283203125 0.316085600852966330798210492503 +-0.71350002288818359375 0.17609119415283203125 0.316085600852966330798210492503 +-0.713360011577606201171875 -0.1917760074138641357421875 0.674046993255615234375 +-0.713360011577606201171875 0.1917760074138641357421875 0.674046993255615234375 +-0.71329347789287567138671875 -0.2317597568035125732421875 0 +-0.71329347789287567138671875 0.2317597568035125732421875 0 +-0.713082858920097373278679242503 -0.258229152858257260394481136245 -0.383837062120437610968082253748 +-0.713082858920097373278679242503 0.258229152858257260394481136245 -0.383837062120437610968082253748 +-0.712806415557861394738381477509 -0.363189601898193381579460492503 0 +-0.712806415557861394738381477509 0.363189601898193381579460492503 0 +-0.712722003459930419921875 -0.6696109771728515625 -0.2089219987392425537109375 +-0.712722003459930419921875 0.6696109771728515625 -0.2089219987392425537109375 +-0.712387883663177512438835492503 -0.61424718797206878662109375 -0.13305604457855224609375 +-0.712387883663177512438835492503 0.61424718797206878662109375 -0.13305604457855224609375 +-0.7123447358608245849609375 -0.090856499969959259033203125 -0.2163569927215576171875 +-0.7123447358608245849609375 0.090856499969959259033203125 -0.2163569927215576171875 +-0.712177014350891091076789507497 -0.565147423744201682360710492503 0.275521849095821391717464621252 +-0.712177014350891091076789507497 0.565147423744201682360710492503 0.275521849095821391717464621252 +-0.712061104178428605493422764994 -0.362630212306976285052684261245 0.513779002428054742956931022491 +-0.712061104178428605493422764994 0.362630212306976285052684261245 0.513779002428054742956931022491 +-0.711595791578292891088608485006 -0.118489493429660794343583063437 -0.538137924671173162316506477509 +-0.711595791578292891088608485006 0.118489493429660794343583063437 -0.538137924671173162316506477509 +-0.711343193054199240954460492503 -0.264481592178344715460269753748 0.253062391281127951891960492503 +-0.711343193054199240954460492503 0.264481592178344715460269753748 0.253062391281127951891960492503 +-0.710691976547241255346420985006 -0.257710409164428722039730246252 -0.261728811264038074835269753748 +-0.710691976547241255346420985006 0.257710409164428722039730246252 -0.261728811264038074835269753748 +-0.71040974557399749755859375 -0.12184350192546844482421875 0.207297004759311676025390625 +-0.71040974557399749755859375 0.12184350192546844482421875 0.207297004759311676025390625 +-0.709513616561889715050881477509 -0.138023996353149408511384876874 -0.34284079074859619140625 +-0.709513616561889715050881477509 0.138023996353149408511384876874 -0.34284079074859619140625 +-0.709410381317138738488381477509 -0.35757839679718017578125 0.0942063987255096491058026231258 +-0.709410381317138738488381477509 0.35757839679718017578125 0.0942063987255096491058026231258 +-0.70940697193145751953125 -0.6156389713287353515625 0.343118011951446533203125 +-0.70940697193145751953125 0.6156389713287353515625 0.343118011951446533203125 +-0.70883698761463165283203125 -0.200533501803874969482421875 -0.1408432535827159881591796875 +-0.70883698761463165283203125 0.200533501803874969482421875 -0.1408432535827159881591796875 +-0.708549284934997580798210492503 -0.222588895261287694760099498126 0.508341586589813210217414507497 +-0.708549284934997580798210492503 0.222588895261287694760099498126 0.508341586589813210217414507497 +-0.707981586456298828125 -0.355163192749023470806690738755 -0.112344801425933837890625 +-0.707981586456298828125 0.355163192749023470806690738755 -0.112344801425933837890625 +-0.707679677009582452917868522491 -0.1259405501186847686767578125 -0.62115083634853363037109375 +-0.707679677009582452917868522491 0.1259405501186847686767578125 -0.62115083634853363037109375 +-0.707635778188705488744858485006 -0.514123195409774802477897992503 0.211963498592376703433259876874 +-0.707635778188705488744858485006 0.514123195409774802477897992503 0.211963498592376703433259876874 +-0.7076332569122314453125 -0.228906758129596710205078125 -0.0967282466590404510498046875 +-0.7076332569122314453125 0.228906758129596710205078125 -0.0967282466590404510498046875 +-0.707527253031730585242087272491 -0.175184153020381927490234375 0.437281650304794322625667746252 +-0.707527253031730585242087272491 0.175184153020381927490234375 0.437281650304794322625667746252 +-0.70731051266193389892578125 -0.359004305303096737933543636245 0.305496792495250690802066628748 +-0.70731051266193389892578125 0.359004305303096737933543636245 0.305496792495250690802066628748 +-0.707108020782470703125 -0.70710599422454833984375 0 +-0.707108020782470703125 0.70710599422454833984375 0 +-0.70703776180744171142578125 -0.230741254985332489013671875 0.0967282466590404510498046875 +-0.70703776180744171142578125 0.230741254985332489013671875 0.0967282466590404510498046875 +-0.70651124417781829833984375 -0.171672753989696502685546875 -0.1840387545526027679443359375 +-0.70651124417781829833984375 0.171672753989696502685546875 -0.1840387545526027679443359375 +-0.706491184234619207238381477509 -0.0329984009265899685958700615629 0.373872804641723677221420985006 +-0.706491184234619207238381477509 0.0329984009265899685958700615629 0.373872804641723677221420985006 +-0.706430971622467041015625 -0.3259269893169403076171875 -0.62827301025390625 +-0.706430971622467041015625 0.3259269893169403076171875 -0.62827301025390625 +-0.7064234912395477294921875 -0.202967248857021331787109375 0.1492304988205432891845703125 +-0.7064234912395477294921875 0.202967248857021331787109375 0.1492304988205432891845703125 +-0.706406110525131247790397992503 -0.428574240207672096936164507497 0.199536653608083730526701060626 +-0.706406110525131247790397992503 0.428574240207672096936164507497 0.199536653608083730526701060626 +-0.706225898861885026391860264994 -0.470363637804985024182258257497 0.0500361014157533617874307196871 +-0.706225898861885026391860264994 0.470363637804985024182258257497 0.0500361014157533617874307196871 +-0.7061913013458251953125 -0.421584302186965964587272992503 -0.365459400415420521124332253748 +-0.7061913013458251953125 0.421584302186965964587272992503 -0.365459400415420521124332253748 +-0.706184005737304776317841970013 -0.0526055991649627685546875 -0.372204804420471213610710492503 +-0.706184005737304776317841970013 0.0526055991649627685546875 -0.372204804420471213610710492503 +-0.706144279241561867443977007497 -0.111985804885625830906725752811 -0.459694468975067105365184261245 +-0.706144279241561867443977007497 0.111985804885625830906725752811 -0.459694468975067105365184261245 +-0.706011691689491294177116742503 -0.469553622603416431768863503748 -0.059723548591136932373046875 +-0.706011691689491294177116742503 0.469553622603416431768863503748 -0.059723548591136932373046875 +-0.704794514179229780737045985006 -0.466171199083328269274772992503 -0.309756597876548800396534488755 +-0.704794514179229780737045985006 0.466171199083328269274772992503 -0.309756597876548800396534488755 +-0.704745912551879905016960492503 0 -0.559762215614318825451789507497 +-0.704733306169509909899772992503 -0.557265615463256813733039507497 0.0529794014990329770187216240629 +-0.704733306169509909899772992503 0.557265615463256813733039507497 0.0529794014990329770187216240629 +-0.70415849983692169189453125 0 -0.258186757564544677734375 +-0.704065489768981978002670985006 -0.236393111944198625051782869377 -0.508340674638748213354233485006 +-0.704065489768981978002670985006 0.236393111944198625051782869377 -0.508340674638748213354233485006 +-0.7038467824459075927734375 -0.557315987348556585168068977509 -0.06323669850826263427734375 +-0.7038467824459075927734375 0.557315987348556585168068977509 -0.06323669850826263427734375 +-0.70350001752376556396484375 -0.030937501229345798492431640625 0.25812976062297821044921875 +-0.70350001752376556396484375 0.030937501229345798492431640625 0.25812976062297821044921875 +-0.7032663822174072265625 -0.224253606796264659539730246252 -0.308425593376159712377670985006 +-0.7032663822174072265625 0.224253606796264659539730246252 -0.308425593376159712377670985006 +-0.7031617462635040283203125 -0.257133007049560546875 0.0441120006144046783447265625 +-0.7031617462635040283203125 0.257133007049560546875 0.0441120006144046783447265625 +-0.70296223461627960205078125 -0.256073243916034698486328125 -0.05263274721801280975341796875 +-0.70296223461627960205078125 0.256073243916034698486328125 -0.05263274721801280975341796875 +-0.702892017364502019738381477509 -0.0883063971996307373046875 0.371678400039672895971420985006 +-0.702892017364502019738381477509 0.0883063971996307373046875 0.371678400039672895971420985006 +-0.701909583806991532739516514994 -0.381017588078975677490234375 -0.290943092107772804943977007497 +-0.701909583806991532739516514994 0.381017588078975677490234375 -0.290943092107772804943977007497 +-0.701878052949905351098891514994 -0.509941962361335709985610264994 -0.387073697149753537249949886245 +-0.701878052949905351098891514994 0.509941962361335709985610264994 -0.387073697149753537249949886245 +-0.70184026658535003662109375 -0.060813747346401214599609375 -0.25733698904514312744140625 +-0.70184026658535003662109375 0.060813747346401214599609375 -0.25733698904514312744140625 +-0.701765936613082841333266514994 -0.46142356097698211669921875 -0.443974889814853668212890625 +-0.701765936613082841333266514994 0.46142356097698211669921875 -0.443974889814853668212890625 +-0.70134298503398895263671875 -0.174339003860950469970703125 0.20055900514125823974609375 +-0.70134298503398895263671875 0.174339003860950469970703125 0.20055900514125823974609375 +-0.70126532018184661865234375 0 -0.640879517793655373303352007497 +-0.701063907146453835217414507497 -0.250876951217651356085269753748 -0.589974680542945884020866742503 +-0.701063907146453835217414507497 0.250876951217651356085269753748 -0.589974680542945884020866742503 +-0.700768804550170987255341970013 -0.231940007209777837582365123126 0.308426403999328635485710492503 +-0.700768804550170987255341970013 0.231940007209777837582365123126 0.308426403999328635485710492503 +-0.700553005933761574475227007497 0 -0.481378790736198436395198996252 +-0.700543802976608342980568977509 -0.363014110922813437731804242503 0.432965692877769481317073996252 +-0.700543802976608342980568977509 0.363014110922813437731804242503 0.432965692877769481317073996252 +-0.70049326121807098388671875 -0.140572495758533477783203125 -0.228141747415065765380859375 +-0.70049326121807098388671875 0.140572495758533477783203125 -0.228141747415065765380859375 +-0.699999999999999955591079014994 0 0 +-0.699738669395446710730368522491 -0.275428758561611142230418636245 0.580521234869956992419304242503 +-0.699738669395446710730368522491 0.275428758561611142230418636245 0.580521234869956992419304242503 +-0.699528706073760941919204014994 -0.60284812748432159423828125 0.223011554032564146554662443123 +-0.699528706073760941919204014994 0.60284812748432159423828125 0.223011554032564146554662443123 +-0.69922530651092529296875 -0.220906491577625263555972878748 -0.429865410923957802502570757497 +-0.69922530651092529296875 0.220906491577625263555972878748 -0.429865410923957802502570757497 +-0.6991260051727294921875 -0.705235004425048828125 0.117758996784687042236328125 +-0.6991260051727294921875 0.705235004425048828125 0.117758996784687042236328125 +-0.698966985940933205334602007497 -0.507826817035675115441506477509 -0.252106189727783203125 +-0.698966985940933205334602007497 0.507826817035675115441506477509 -0.252106189727783203125 +-0.698710024356842041015625 -0.2615459859371185302734375 0.66588199138641357421875 +-0.698710024356842041015625 0.2615459859371185302734375 0.66588199138641357421875 +-0.698659479618072509765625 -0.09204599820077419281005859375 0.2567144930362701416015625 +-0.698659479618072509765625 0.09204599820077419281005859375 0.2567144930362701416015625 +-0.698658326268196128161491742503 -0.421973158419132243768245871252 -0.237308108806610101870759876874 +-0.698658326268196128161491742503 0.421973158419132243768245871252 -0.237308108806610101870759876874 +-0.698205900192260697778579014994 -0.0284724995493888834163787038278 -0.0412062011659145299713458143742 +-0.698205900192260697778579014994 0.0284724995493888834163787038278 -0.0412062011659145299713458143742 +-0.698128205537796087121193977509 -0.384418809413909934313835492503 -0.418138200044631980212272992503 +-0.698128205537796087121193977509 0.384418809413909934313835492503 -0.418138200044631980212272992503 +-0.697881388664245538855368522491 -0.555478295683860756604133257497 -0.326965297758579243048160378748 +-0.697881388664245538855368522491 0.555478295683860756604133257497 -0.326965297758579243048160378748 +-0.697841906547546297900908029987 -0.0549206025898456504097389085928 0 +-0.697841906547546297900908029987 0.0549206025898456504097389085928 0 +-0.697671091556549050061164507497 -0.0289093002676963778396768134371 0.04918409883975982666015625 +-0.697671091556549050061164507497 0.0289093002676963778396768134371 0.04918409883975982666015625 +-0.697473621368408291942841970013 -0.388989591598510764391960492503 0.0470872014760971083213725307814 +-0.697473621368408291942841970013 0.388989591598510764391960492503 0.0470872014760971083213725307814 +-0.6972591876983642578125 -0.388163995742797862664730246252 -0.0561999976634979248046875 +-0.6972591876983642578125 0.388163995742797862664730246252 -0.0561999976634979248046875 +-0.69719302654266357421875 -0.656279981136322021484375 0.2884779870510101318359375 +-0.69719302654266357421875 0.656279981136322021484375 0.2884779870510101318359375 +-0.69685900211334228515625 -0.50629198551177978515625 0.5079920291900634765625 +-0.69685900211334228515625 0.50629198551177978515625 0.5079920291900634765625 +-0.696818971633911155016960492503 -0.347040545940399181024105246252 -0.341329401731491066662727007497 +-0.696818971633911155016960492503 0.347040545940399181024105246252 -0.341329401731491066662727007497 +-0.696561396121978759765625 -0.463339233398437466693309261245 0.150393903255462646484375 +-0.696561396121978759765625 0.463339233398437466693309261245 0.150393903255462646484375 +-0.696371984481811590050881477509 -0.347106409072875987664730246252 0.185964798927307134457365123126 +-0.696371984481811590050881477509 0.347106409072875987664730246252 0.185964798927307134457365123126 +-0.696084547042846613074118522491 -0.324458611011505138055355246252 0.364270037412643410412727007497 +-0.696084547042846613074118522491 0.324458611011505138055355246252 0.364270037412643410412727007497 +-0.6959311962127685546875 -0.143674397468566888980134876874 0.367475199699401899877670985006 +-0.6959311962127685546875 0.143674397468566888980134876874 0.367475199699401899877670985006 +-0.695702016353607177734375 -0.704469978809356689453125 -0.14043100178241729736328125 +-0.695702016353607177734375 0.704469978809356689453125 -0.14043100178241729736328125 +-0.695549690723419211657585492503 0 0.571148997545242287365852007497 +-0.695531195402145363537727007497 -0.232272695004940021856754128748 0.429867082834243741107371761245 +-0.695531195402145363537727007497 0.232272695004940021856754128748 0.429867082834243741107371761245 +-0.695303976535797119140625 -0.132791996002197265625 -0.7063419818878173828125 +-0.695303976535797119140625 0.132791996002197265625 -0.7063419818878173828125 +-0.695264151692390419690070757497 -0.644966384768486000744758257497 0.0559160517528653130958637973436 +-0.695264151692390419690070757497 0.644966384768486000744758257497 0.0559160517528653130958637973436 +-0.695124512910842873303352007497 0 -0.0824732974171638461013955634371 +-0.694498479366302490234375 -0.549830693006515547338608485006 0.15924060344696044921875 +-0.694498479366302490234375 0.549830693006515547338608485006 0.15924060344696044921875 +-0.69425238668918609619140625 -0.645027199387550376208366742503 -0.06673749722540378570556640625 +-0.69425238668918609619140625 0.645027199387550376208366742503 -0.06673749722540378570556640625 +-0.693797296285629250256477007497 -0.0833538979291915810287960653113 -0.0412005998194217640251402201557 +-0.693797296285629250256477007497 0.0833538979291915810287960653113 -0.0412005998194217640251402201557 +-0.693597972393035888671875 -0.4223580062389373779296875 0.5835540294647216796875 +-0.693597972393035888671875 0.4223580062389373779296875 0.5835540294647216796875 +-0.693447208404541104442841970013 -0.104960000514984136410490123126 -0.384856009483337424548210492503 +-0.693447208404541104442841970013 0.104960000514984136410490123126 -0.384856009483337424548210492503 +-0.693220514059066705847556022491 -0.083827801048755645751953125 0.0491749979555606842041015625 +-0.693220514059066705847556022491 0.083827801048755645751953125 0.0491749979555606842041015625 +-0.693193477392196721886818977509 -0.0740168988704681396484375 0.569213998317718572472756477509 +-0.693193477392196721886818977509 0.0740168988704681396484375 0.569213998317718572472756477509 +-0.693145787715911843029914507497 -0.28509481251239776611328125 0.498266994953155517578125 +-0.693145787715911843029914507497 0.28509481251239776611328125 0.498266994953155517578125 +-0.693053203821182184363181022491 0 0.0983751967549323924622228787484 +-0.69291074573993682861328125 -0.28700999915599822998046875 0 +-0.69291074573993682861328125 0.28700999915599822998046875 0 +-0.692832696437835626745993522491 -0.0567987017333507482330645643742 -0.0822010010480880709549111884371 +-0.692832696437835626745993522491 0.0567987017333507482330645643742 -0.0822010010480880709549111884371 +-0.692628812789917058800881477509 -0.317876005172729514391960492503 0.243352794647216819079460492503 +-0.692628812789917058800881477509 0.317876005172729514391960492503 0.243352794647216819079460492503 +-0.692360019683837979442841970013 -0.189781594276428239309595369377 -0.353015995025634798931690738755 +-0.692360019683837979442841970013 0.189781594276428239309595369377 -0.353015995025634798931690738755 +-0.692247664928436257092414507497 -0.459550786018371570929019753748 -0.179183400422334659918277566248 +-0.692247664928436257092414507497 0.459550786018371570929019753748 -0.179183400422334659918277566248 +-0.69143025577068328857421875 -0.1438327543437480926513671875 0.2524605095386505126953125 +-0.69143025577068328857421875 0.1438327543437480926513671875 0.2524605095386505126953125 +-0.691382312774658114307158029987 -0.109502401947975155915848688437 0 +-0.691382312774658114307158029987 0.109502401947975155915848688437 0 +-0.69133351743221282958984375 -0.25440301001071929931640625 0.1408432535827159881591796875 +-0.69133351743221282958984375 0.25440301001071929931640625 0.1408432535827159881591796875 +-0.69109873473644256591796875 -0.11055900156497955322265625 -0.26955449581146240234375 +-0.69109873473644256591796875 0.11055900156497955322265625 -0.26955449581146240234375 +-0.690996468067169189453125 -0.0350608009845018372963032504686 0.493755638599395751953125 +-0.690996468067169189453125 0.0350608009845018372963032504686 0.493755638599395751953125 +-0.690952089428901627954360264994 -0.0391875015571713433693012973436 0.65080702304840087890625 +-0.690952089428901627954360264994 0.0391875015571713433693012973436 0.65080702304840087890625 +-0.690823835134506181177016514994 -0.42072080075740814208984375 -0.498254117369651750024672764994 +-0.690823835134506181177016514994 0.42072080075740814208984375 -0.498254117369651750024672764994 +-0.69081223011016845703125 -0.25101600587368011474609375 -0.1492304988205432891845703125 +-0.69081223011016845703125 0.25101600587368011474609375 -0.1492304988205432891845703125 +-0.690700513124465897973891514994 -0.0576254010200500446647886576557 0.0980412960052490234375 +-0.690700513124465897973891514994 0.0576254010200500446647886576557 0.0980412960052490234375 +-0.690219873189926169665397992503 -0.0594377987086772904823384067186 -0.574511414766311623303352007497 +-0.690219873189926169665397992503 0.0594377987086772904823384067186 -0.574511414766311623303352007497 +-0.69020998477935791015625 -0.55245101451873779296875 -0.4673419892787933349609375 +-0.69020998477935791015625 0.55245101451873779296875 -0.4673419892787933349609375 +-0.6899609863758087158203125 -0.222001500427722930908203125 -0.192793495953083038330078125 +-0.6899609863758087158203125 0.222001500427722930908203125 -0.192793495953083038330078125 +-0.68984699249267578125 -0.264149010181427001953125 -0.674045026302337646484375 +-0.68984699249267578125 0.264149010181427001953125 -0.674045026302337646484375 +-0.689833927154540949011618522491 -0.596895429491996698523337272491 -0.265226709842681873663394753748 +-0.689833927154540949011618522491 0.596895429491996698523337272491 -0.265226709842681873663394753748 +-0.6897640228271484375 0 -0.724034011363983154296875 +-0.6896798908710479736328125 -0.178546500205993663445980246252 -0.549965715408325173108039507497 +-0.6896798908710479736328125 0.178546500205993663445980246252 -0.549965715408325173108039507497 +-0.689665496349334716796875 -0.281275503337383270263671875 0.0880124978721141815185546875 +-0.689665496349334716796875 0.281275503337383270263671875 0.0880124978721141815185546875 +-0.689443206787109463817841970013 -0.340257596969604503289730246252 -0.221116805076599143298210492503 +-0.689443206787109463817841970013 0.340257596969604503289730246252 -0.221116805076599143298210492503 +-0.689402711391449041222756477509 -0.455662786960601806640625 0.356505301594734202996761496252 +-0.689402711391449041222756477509 0.455662786960601806640625 0.356505301594734202996761496252 +-0.689324808120727605675881477509 -0.38097679615020751953125 0.140314400196075439453125 +-0.689324808120727605675881477509 0.38097679615020751953125 0.140314400196075439453125 +-0.6892695128917694091796875 -0.546728396415710471423210492503 -0.189723600447177898065120871252 +-0.6892695128917694091796875 0.546728396415710471423210492503 -0.189723600447177898065120871252 +-0.689091205596923828125 0 -0.406389617919921897204460492503 +-0.688717690110206559594985264994 -0.423091042041778553350894753748 0.499161353707313515393195757497 +-0.688717690110206559594985264994 0.423091042041778553350894753748 0.499161353707313515393195757497 +-0.68868076801300048828125 -0.225941240787506103515625 0.192793495953083038330078125 +-0.68868076801300048828125 0.225941240787506103515625 0.192793495953083038330078125 +-0.688367390632629305713408029987 -0.0284738998860120766376535783593 -0.123853103816509241275056751874 +-0.688367390632629305713408029987 0.0284738998860120766376535783593 -0.123853103816509241275056751874 +-0.6882974803447723388671875 -0.278808005154132843017578125 -0.1049407459795475006103515625 +-0.6882974803447723388671875 0.278808005154132843017578125 -0.1049407459795475006103515625 +-0.688189029693603515625 -0.4999969899654388427734375 -0.52573597431182861328125 +-0.688189029693603515625 0.4999969899654388427734375 -0.52573597431182861328125 +-0.687983179092407248766960492503 -0.0560897972434759098381285014057 -0.496017479896545376849559261245 +-0.687983179092407248766960492503 0.0560897972434759098381285014057 -0.496017479896545376849559261245 +-0.6879765093326568603515625 -0.030480000190436840057373046875 -0.2970854938030242919921875 +-0.6879765093326568603515625 0.030480000190436840057373046875 -0.2970854938030242919921875 +-0.687974989414215087890625 -0.601499021053314208984375 -0.406066000461578369140625 +-0.687974989414215087890625 0.601499021053314208984375 -0.406066000461578369140625 +-0.68793813884258270263671875 -0.311121250689029682501285378748 -0.390441538393497433734324886245 +-0.68793813884258270263671875 0.311121250689029682501285378748 -0.390441538393497433734324886245 +-0.687880331277847312243522992503 -0.166949348896741872616544810626 -0.470583823323249827996761496252 +-0.687880331277847312243522992503 0.166949348896741872616544810626 -0.470583823323249827996761496252 +-0.6876653134822845458984375 -0.499615532159805308953792746252 0 +-0.6876653134822845458984375 0.499615532159805308953792746252 0 +-0.687419971823692299572883257497 -0.499434000253677345959602007497 0.424854241311550140380859375 +-0.687419971823692299572883257497 0.499434000253677345959602007497 0.424854241311550140380859375 +-0.687201181054115317614616742503 -0.09382554702460765838623046875 0.491377371549606312139957253748 +-0.687201181054115317614616742503 0.09382554702460765838623046875 0.491377371549606312139957253748 +-0.686851215362548894738381477509 -0.30938160419464111328125 -0.269291210174560535772769753748 +-0.686851215362548894738381477509 0.30938160419464111328125 -0.269291210174560535772769753748 +-0.686781013011932395251335492503 -0.1363914012908935546875 0.565446621179580666272102007497 +-0.686781013011932395251335492503 0.1363914012908935546875 0.565446621179580666272102007497 +-0.686606788635253928454460492503 -0.116590649262070647496081221561 0.646125373244285539087172764994 +-0.686606788635253928454460492503 0.116590649262070647496081221561 0.646125373244285539087172764994 +-0.686426424980163596423210492503 -0.345249894261360157354801003748 -0.468638080358505237921207253748 +-0.686426424980163596423210492503 0.345249894261360157354801003748 -0.468638080358505237921207253748 +-0.686091679334640436316306022491 -0.111727701127529138735994251874 -0.0824305988848209325592364393742 +-0.686091679334640436316306022491 0.111727701127529138735994251874 -0.0824305988848209325592364393742 +-0.685816812515258833471420985006 -0.197857594490051275082365123126 0.361259198188781771587940738755 +-0.685816812515258833471420985006 0.197857594490051275082365123126 0.361259198188781771587940738755 +-0.685666418075561612255341970013 -0.376731204986572310033920985006 -0.167138397693634033203125 +-0.685666418075561612255341970013 0.376731204986572310033920985006 -0.167138397693634033203125 +-0.68526448309421539306640625 -0.191382743418216705322265625 -0.237245254218578338623046875 +-0.68526448309421539306640625 0.191382743418216705322265625 -0.237245254218578338623046875 +-0.685007417201995760791533029987 -0.1380904018878936767578125 -0.0411795999854803057571572821871 +-0.685007417201995760791533029987 0.1380904018878936767578125 -0.0411795999854803057571572821871 +-0.68492250144481658935546875 0 0.305584497749805450439453125 +-0.684380817413330122533920985006 -0.286579203605651866570980246252 0.299157595634460482525440738755 +-0.684380817413330122533920985006 0.286579203605651866570980246252 0.299157595634460482525440738755 +-0.684366273880004927221420985006 -0.584502321481704778527443977509 0 +-0.684366273880004927221420985006 0.584502321481704778527443977509 0 +-0.684347981214523226611845529987 -0.138756795227527596203742632497 0.0491385996341705266754473768742 +-0.684347981214523226611845529987 0.138756795227527596203742632497 0.0491385996341705266754473768742 +-0.684021359682083107678352007497 -0.411770604550838470458984375 0.29165031015872955322265625 +-0.684021359682083107678352007497 0.411770604550838470458984375 0.29165031015872955322265625 +-0.6839077174663543701171875 -0.0848337016999721471588458143742 -0.122774401307106012515291126874 +-0.6839077174663543701171875 0.0848337016999721471588458143742 -0.122774401307106012515291126874 +-0.683838415145873956824118522491 -0.112702804803848255499332253748 0.098301701247692108154296875 +-0.683838415145873956824118522491 0.112702804803848255499332253748 0.098301701247692108154296875 +-0.683659213781356744910056022491 -0.0289107006043195710609516879686 0.14756210148334503173828125 +-0.683659213781356744910056022491 0.0289107006043195710609516879686 0.14756210148334503173828125 +-0.683613002300262451171875 -0.496669524908065818102897992503 0.309826791286468505859375 +-0.683613002300262451171875 0.496669524908065818102897992503 0.309826791286468505859375 +-0.68322478234767913818359375 -0.638702082633972101355368522491 0.1666233502328395843505859375 +-0.68322478234767913818359375 0.638702082633972101355368522491 0.1666233502328395843505859375 +-0.68305377662181854248046875 -0.1891383491456508636474609375 -0.632586023211479164807258257497 +-0.68305377662181854248046875 0.1891383491456508636474609375 -0.632586023211479164807258257497 +-0.683002474904060297156149772491 -0.36660881340503692626953125 -0.549185511469840959009047764994 +-0.683002474904060297156149772491 0.36660881340503692626953125 -0.549185511469840959009047764994 +-0.682876405119895890649672764994 -0.496135628223419167248664507497 0.100146146863698951023913252811 +-0.682876405119895890649672764994 0.496135628223419167248664507497 0.100146146863698951023913252811 +-0.682651007175445578845085492503 -0.0632376980036497143844442803129 -0.65763847529888153076171875 +-0.682651007175445578845085492503 0.0632376980036497143844442803129 -0.65763847529888153076171875 +-0.682601988315582275390625 -0.06168074905872344970703125 0.304548740386962890625 +-0.682601988315582275390625 0.06168074905872344970703125 0.304548740386962890625 +-0.682314714789390541760383257497 -0.543448439240455605236945757497 0.376311151683330513684211382497 +-0.682314714789390541760383257497 0.543448439240455605236945757497 0.376311151683330513684211382497 +-0.682113599777221746300881477509 -0.417996788024902365954460492503 0 +-0.682113599777221746300881477509 0.417996788024902365954460492503 0 +-0.6819260120391845703125 -0.44446098804473876953125 -0.580887973308563232421875 +-0.6819260120391845703125 0.44446098804473876953125 -0.580887973308563232421875 +-0.68164098262786865234375 -0.69377899169921875 0.23245699703693389892578125 +-0.68164098262786865234375 0.69377899169921875 0.23245699703693389892578125 +-0.681499004364013671875 -0.646838009357452392578125 -0.34228599071502685546875 +-0.681499004364013671875 0.646838009357452392578125 -0.34228599071502685546875 +-0.68119083344936370849609375 -0.340311841666698422503856136245 0.568037307262420632092414507497 +-0.68119083344936370849609375 0.340311841666698422503856136245 0.568037307262420632092414507497 +-0.68103902041912078857421875 -0.196160249412059783935546875 0.24537076056003570556640625 +-0.68103902041912078857421875 0.196160249412059783935546875 0.24537076056003570556640625 +-0.68084062635898590087890625 -0.494657507538795448986945757497 -0.119455596059560770205720814374 +-0.68084062635898590087890625 0.494657507538795448986945757497 -0.119455596059560770205720814374 +-0.680739212036132856908920985006 -0.276920795440673828125 -0.316084790229797407690170985006 +-0.680739212036132856908920985006 0.276920795440673828125 -0.316084790229797407690170985006 +-0.68073450028896331787109375 -0.311694748699665069580078125 0.044120999984443187713623046875 +-0.68073450028896331787109375 0.311694748699665069580078125 0.044120999984443187713623046875 +-0.680659687519073464123664507497 -0.163409395515918709484992632497 0 +-0.680659687519073464123664507497 0.163409395515918709484992632497 0 +-0.68058224022388458251953125 -0.310701750218868255615234375 -0.05264849960803985595703125 +-0.68058224022388458251953125 0.310701750218868255615234375 -0.05264849960803985595703125 +-0.68058001995086669921875 -0.3306010067462921142578125 0.6538460254669189453125 +-0.68058001995086669921875 0.3306010067462921142578125 0.6538460254669189453125 +-0.6805183887481689453125 0 0.420588779449462935033920985006 +-0.680309712886810302734375 0 -0.16485910117626190185546875 +-0.680205705761909418249899772491 -0.288249441981315579486278011245 0.420395559072494484631477007497 +-0.680205705761909418249899772491 0.288249441981315579486278011245 0.420395559072494484631477007497 +-0.679898834228515602795539507497 -0.152654047310352314337222878748 0.486759302020072948113948996252 +-0.679898834228515602795539507497 0.152654047310352314337222878748 0.486759302020072948113948996252 +-0.679848015308380126953125 0 0.73335301876068115234375 +-0.679134410619735673364516514994 -0.0859593011438846560379190009371 0.146245399117469782046541126874 +-0.679134410619735673364516514994 0.0859593011438846560379190009371 0.146245399117469782046541126874 +-0.678889608383178799755341970013 -0.0553120017051696791221537807814 0.419582414627075239721420985006 +-0.678889608383178799755341970013 0.0553120017051696791221537807814 0.419582414627075239721420985006 +-0.678743219375610440380341970013 -0.412894392013549826891960492503 0.0939447999000549427428552462516 +-0.678743219375610440380341970013 0.412894392013549826891960492503 0.0939447999000549427428552462516 +-0.678630399703979536596420985006 -0.0526535987854003934005575615629 -0.420343208312988325658920985006 +-0.678630399703979536596420985006 0.0526535987854003934005575615629 -0.420343208312988325658920985006 +-0.6782070100307464599609375 -0.07986975274980068206787109375 -0.31009049713611602783203125 +-0.6782070100307464599609375 0.07986975274980068206787109375 -0.31009049713611602783203125 +-0.678097712993621759558493522491 -0.0564004011452197973053301893742 -0.164322894811630232370092130623 +-0.678097712993621759558493522491 0.0564004011452197973053301893742 -0.164322894811630232370092130623 +-0.6778223216533660888671875 -0.449760484695434559210269753748 0.246519549190998082943693248126 +-0.6778223216533660888671875 0.449760484695434559210269753748 0.246519549190998082943693248126 +-0.677736926078796431127670985006 -0.582668977975845381322983485006 0.105687899887561803646818248126 +-0.677736926078796431127670985006 0.582668977975845381322983485006 0.105687899887561803646818248126 +-0.67769201099872589111328125 -0.182187207043170928955078125 0.640344643592834494860710492503 +-0.67769201099872589111328125 0.182187207043170928955078125 0.640344643592834494860710492503 +-0.677586972713470458984375 -0.081500001251697540283203125 0.730912983417510986328125 +-0.677586972713470458984375 0.081500001251697540283203125 0.730912983417510986328125 +-0.677516394853591941149772992503 -0.41908590495586395263671875 0.41873399913311004638671875 +-0.677516394853591941149772992503 0.41908590495586395263671875 0.41873399913311004638671875 +-0.677412915229797407690170985006 -0.292374891042709361688167746252 -0.515391290187835693359375 +-0.677412915229797407690170985006 0.292374891042709361688167746252 -0.515391290187835693359375 +-0.67740373313426971435546875 -0.1136602498590946197509765625 0.3011730015277862548828125 +-0.67740373313426971435546875 0.1136602498590946197509765625 0.3011730015277862548828125 +-0.67739200592041015625 -0.156811201572418235095085492503 -0.39566481113433837890625 +-0.67739200592041015625 0.156811201572418235095085492503 -0.39566481113433837890625 +-0.677327203750610395971420985006 -0.410698413848876953125 -0.1120471954345703125 +-0.677327203750610395971420985006 0.410698413848876953125 -0.1120471954345703125 +-0.677085903286933854516860264994 -0.636130428314208962170539507497 -0.198475898802280420474275501874 +-0.677085903286933854516860264994 0.636130428314208962170539507497 -0.198475898802280420474275501874 +-0.677022278308868408203125 -0.198101694881916062795923494377 0.558924293518066384045539507497 +-0.677022278308868408203125 0.198101694881916062795923494377 0.558924293518066384045539507497 +-0.6769912540912628173828125 -0.1597657464444637298583984375 -0.280458748340606689453125 +-0.6769912540912628173828125 0.1597657464444637298583984375 -0.280458748340606689453125 +-0.675734996795654296875 -0.734793007373809814453125 0.0588279999792575836181640625 +-0.675734996795654296875 0.734793007373809814453125 0.0588279999792575836181640625 +-0.675494015216827392578125 -0.57204997539520263671875 0.4652599990367889404296875 +-0.675494015216827392578125 0.57204997539520263671875 0.4652599990367889404296875 +-0.675374290347099281994758257497 -0.274144548177719105108707253748 -0.43728078901767730712890625 +-0.675374290347099281994758257497 0.274144548177719105108707253748 -0.43728078901767730712890625 +-0.675063180923461847449118522491 -0.165958102047443378790347878748 -0.082144998013973236083984375 +-0.675063180923461847449118522491 0.165958102047443378790347878748 -0.082144998013973236083984375 +-0.67504619061946868896484375 -0.378555142879486050677684261245 0.351438455283641815185546875 +-0.67504619061946868896484375 0.378555142879486050677684261245 0.351438455283641815185546875 +-0.674893784523010298315170985006 -0.5819183886051177978515625 -0.1260530948638916015625 +-0.674893784523010298315170985006 0.5819183886051177978515625 -0.1260530948638916015625 +-0.674885398149490334240852007497 -0.139529603719711292608707253748 -0.122725397348403916786274692186 +-0.674885398149490334240852007497 0.139529603719711292608707253748 -0.122725397348403916786274692186 +-0.674694013595581121300881477509 -0.535402822494506880346420985006 0.261020699143409751208366742503 +-0.674694013595581121300881477509 0.535402822494506880346420985006 0.261020699143409751208366742503 +-0.674584203958511374743522992503 -0.343544411659240711554019753748 0.486738002300262484478565738755 +-0.674584203958511374743522992503 0.343544411659240711554019753748 0.486738002300262484478565738755 +-0.6744120121002197265625 -0.73501002788543701171875 -0.070197999477386474609375 +-0.6744120121002197265625 0.73501002788543701171875 -0.070197999477386474609375 +-0.674011993408203169408920985006 -0.110360002517700200863615123126 0.416567182540893587994190738755 +-0.674011993408203169408920985006 0.110360002517700200863615123126 0.416567182540893587994190738755 +-0.673936623334884576941306022491 -0.584857022762298561779914507497 0.32596211135387420654296875 +-0.673936623334884576941306022491 0.584857022762298561779914507497 0.32596211135387420654296875 +-0.672867000102996826171875 -0.3040717542171478271484375 0.1314922459423542022705078125 +-0.672867000102996826171875 0.3040717542171478271484375 0.1314922459423542022705078125 +-0.672676903009414628442641514994 -0.167071799933910358770816628748 0.0979446962475776644607705634371 +-0.672676903009414628442641514994 0.167071799933910358770816628748 0.0979446962475776644607705634371 +-0.672488272190093994140625 -0.2763847410678863525390625 0.1840395033359527587890625 +-0.672488272190093994140625 0.2763847410678863525390625 0.1840395033359527587890625 +-0.672062692046165421899672764994 -0.111906743794679644499190374063 -0.508241373300552301550681022491 +-0.672062692046165421899672764994 0.111906743794679644499190374063 -0.508241373300552301550681022491 +-0.672009789943694979541533029987 -0.191592106223106378726228626874 -0.041171200573444366455078125 +-0.672009789943694979541533029987 0.191592106223106378726228626874 -0.041171200573444366455078125 +-0.671976202726364046924345529987 0 0.196081903576850874459935880623 +-0.671752619743347101355368522491 -0.6717506945133209228515625 0 +-0.671752619743347101355368522491 0.6717506945133209228515625 0 +-0.671685600280761740954460492503 -0.368208789825439475329460492503 0.23078238964080810546875 +-0.671685600280761740954460492503 0.368208789825439475329460492503 0.23078238964080810546875 +-0.671683216094970725329460492503 -0.253418397903442393914730246252 0.353016805648803722039730246252 +-0.671683216094970725329460492503 0.253418397903442393914730246252 0.353016805648803722039730246252 +-0.6714771091938018798828125 -0.112434002757072437628238503748 -0.162718500196933735235660378748 +-0.6714771091938018798828125 0.112434002757072437628238503748 -0.162718500196933735235660378748 +-0.671459019184112548828125 -0.386184990406036376953125 -0.632458984851837158203125 +-0.671459019184112548828125 0.386184990406036376953125 -0.632458984851837158203125 +-0.671278297901153564453125 -0.192283001542091352975560880623 0.0491238974034786182731870951557 +-0.671278297901153564453125 0.192283001542091352975560880623 0.0491238974034786182731870951557 +-0.671136808395385808800881477509 -0.243039202690124522820980246252 -0.361258411407470725329460492503 +-0.671136808395385808800881477509 0.243039202690124522820980246252 -0.361258411407470725329460492503 +-0.67110942304134368896484375 -0.309630639851093292236328125 -0.596859359741210959704460492503 +-0.67110942304134368896484375 0.309630639851093292236328125 -0.596859359741210959704460492503 +-0.6708199977874755859375 -0.688189983367919921875 -0.2763960063457489013671875 +-0.6708199977874755859375 0.688189983367919921875 -0.2763960063457489013671875 +-0.67081873118877410888671875 0 -0.335411243140697479248046875 +-0.67081701755523681640625 -0.16245700418949127197265625 0.72361099720001220703125 +-0.67081701755523681640625 0.16245700418949127197265625 0.72361099720001220703125 +-0.670433378219604469983039507497 -0.119312100112438201904296875 -0.5884586870670318603515625 +-0.670433378219604469983039507497 0.119312100112438201904296875 -0.5884586870670318603515625 +-0.669928008317947298877470529987 -0.140830200910568220651342130623 0.146161399781703948974609375 +-0.669928008317947298877470529987 0.140830200910568220651342130623 0.146161399781703948974609375 +-0.6698737442493438720703125 -0.27119176089763641357421875 -0.20055900514125823974609375 +-0.6698737442493438720703125 0.27119176089763641357421875 -0.20055900514125823974609375 +-0.669740420579910233911391514994 -0.0570500008761882712593482835928 0.195429497957229608706697376874 +-0.669740420579910233911391514994 0.0570500008761882712593482835928 0.195429497957229608706697376874 +-0.66938848793506622314453125 -0.299823760986328125 -0.1566014997661113739013671875 +-0.66938848793506622314453125 0.299823760986328125 -0.1566014997661113739013671875 +-0.669309920072555519787727007497 -0.0284494005143642418598215471093 -0.2030147016048431396484375 +-0.669309920072555519787727007497 0.0284494005143642418598215471093 -0.2030147016048431396484375 +-0.669185435771942116467414507497 -0.210222845524549478701814564374 0.480100387334823575091746761245 +-0.669185435771942116467414507497 0.210222845524549478701814564374 0.480100387334823575091746761245 +-0.66898000240325927734375 -0.617672026157379150390625 0.4134570062160491943359375 +-0.66898000240325927734375 0.617672026157379150390625 0.4134570062160491943359375 +-0.668906271457672119140625 -0.165085494518280029296875 0.296330250799655914306640625 +-0.668906271457672119140625 0.165085494518280029296875 0.296330250799655914306640625 +-0.668767988681793212890625 -0.06660400331020355224609375 -0.74048197269439697265625 +-0.668767988681793212890625 0.06660400331020355224609375 -0.74048197269439697265625 +-0.668461978435516357421875 -0.19833600521087646484375 -0.716813027858734130859375 +-0.668461978435516357421875 0.19833600521087646484375 -0.716813027858734130859375 +-0.668322679400443986352797764994 -0.485560795664787270276008257497 0.200187748670578008480802623126 +-0.668322679400443986352797764994 0.485560795664787270276008257497 0.200187748670578008480802623126 +-0.6682560145854949951171875 -0.3404902517795562744140625 0 +-0.6682560145854949951171875 0.3404902517795562744140625 0 +-0.66695845127105712890625 -0.398162952065467812268195757497 -0.345156100392341624871761496252 +-0.66695845127105712890625 0.398162952065467812268195757497 -0.345156100392341624871761496252 +-0.666884243488311767578125 -0.24795149266719818115234375 0.23724599182605743408203125 +-0.666884243488311767578125 0.24795149266719818115234375 0.23724599182605743408203125 +-0.666776001453399658203125 -0.4844349920749664306640625 0.566332995891571044921875 +-0.666776001453399658203125 0.4844349920749664306640625 0.566332995891571044921875 +-0.66627372801303863525390625 -0.24160350859165191650390625 -0.24537076056003570556640625 +-0.66627372801303863525390625 0.24160350859165191650390625 -0.24537076056003570556640625 +-0.665908002853393576891960492503 -0.16487920284271240234375 0.411559200286865267681690738755 +-0.665908002853393576891960492503 0.16487920284271240234375 0.411559200286865267681690738755 +-0.6657405793666839599609375 -0.216309106349945046154914507497 0 +-0.6657405793666839599609375 0.216309106349945046154914507497 0 +-0.6657040119171142578125 -0.337886404991149913445980246252 0.287526392936706565173210492503 +-0.6657040119171142578125 0.337886404991149913445980246252 0.287526392936706565173210492503 +-0.665639263391494706567641514994 -0.440272799134254433361945757497 -0.292547897994518246722606136245 +-0.665639263391494706567641514994 0.440272799134254433361945757497 -0.292547897994518246722606136245 +-0.665593361854553200451789507497 0 -0.528664314746856711657585492503 +-0.665581455826759316174445757497 -0.526306414604187033923210492503 0.0500361014157533617874307196871 +-0.665581455826759316174445757497 0.526306414604187033923210492503 0.0500361014157533617874307196871 +-0.66516901552677154541015625 -0.12939749658107757568359375 -0.321413241326808929443359375 +-0.66516901552677154541015625 0.12939749658107757568359375 -0.321413241326808929443359375 +-0.6650722324848175048828125 -0.335229746997356414794921875 0.08831849880516529083251953125 +-0.6650722324848175048828125 0.335229746997356414794921875 0.08831849880516529083251953125 +-0.664950740337371781762954014994 -0.223260161280632002389623380623 -0.480099526047706615106136496252 +-0.664950740337371781762954014994 0.223260161280632002389623380623 -0.480099526047706615106136496252 +-0.664937102794647239001335492503 -0.483102911710739157946647992503 -0.366701397299766529425113503748 +-0.664937102794647239001335492503 0.483102911710739157946647992503 -0.366701397299766529425113503748 +-0.664855086803436190479033029987 -0.0847993999719619667709835653113 -0.201933193206787098272769753748 +-0.664855086803436190479033029987 0.0847993999719619667709835653113 -0.201933193206787098272769753748 +-0.664852809906005925988381477509 -0.403363990783691450658920985006 0.187799203395843522512720369377 +-0.664852809906005925988381477509 0.403363990783691450658920985006 0.187799203395843522512720369377 +-0.664830887317657492907585492503 -0.4371381103992462158203125 -0.42060779035091400146484375 +-0.664830887317657492907585492503 0.4371381103992462158203125 -0.42060779035091400146484375 +-0.66474418342113494873046875 -0.526353988051414423132712272491 -0.059723548591136932373046875 +-0.66474418342113494873046875 0.526353988051414423132712272491 -0.059723548591136932373046875 +-0.664683198928833096630341970013 -0.442695188522338911596420985006 0.0470928013324737604339276231258 +-0.664683198928833096630341970013 0.442695188522338911596420985006 0.0470928013324737604339276231258 +-0.664606380462646528783920985006 -0.105398404598236086759932561563 -0.432653617858886729852230246252 +-0.664606380462646528783920985006 0.105398404598236086759932561563 -0.432653617858886729852230246252 +-0.664481592178344793175881477509 -0.441932821273803733141960492503 -0.05621039867401123046875 +-0.664481592178344793175881477509 0.441932821273803733141960492503 -0.05621039867401123046875 +-0.6643566191196441650390625 0 -0.607149016857147283410256477509 +-0.664169704914092995373664507497 -0.66997325420379638671875 0.11187104694545269012451171875 +-0.664169704914092995373664507497 0.66997325420379638671875 0.11187104694545269012451171875 +-0.664165806770324773644631477509 -0.237672901153564458676115123126 -0.558923381567001387182358485006 +-0.664165806770324773644631477509 0.237672901153564458676115123126 -0.558923381567001387182358485006 +-0.663774523138999872351462272491 -0.248468686640262587106420255623 0.632587891817092851098891514994 +-0.663774523138999872351462272491 0.248468686640262587106420255623 0.632587891817092851098891514994 +-0.6637327373027801513671875 -0.33296549320220947265625 -0.1053232513368129730224609375 +-0.6637327373027801513671875 0.33296549320220947265625 -0.1053232513368129730224609375 +-0.663049095869064242236845529987 -0.113720601797103873509264815311 0.193477204442024208752570757497 +-0.663049095869064242236845529987 0.113720601797103873509264815311 0.193477204442024208752570757497 +-0.662910318374633766858039507497 -0.260932508111000049932926003748 0.549967485666275068822983485006 +-0.662910318374633766858039507497 0.260932508111000049932926003748 0.549967485666275068822983485006 +-0.662827014923095703125 -0.7279570102691650390625 0.17532299458980560302734375 +-0.662827014923095703125 0.7279570102691650390625 0.17532299458980560302734375 +-0.662711405754089377673210492503 -0.5711192786693572998046875 0.211274103820323938540681751874 +-0.662711405754089377673210492503 0.5711192786693572998046875 0.211274103820323938540681751874 +-0.6623354852199554443359375 -0.03093600086867809295654296875 0.35050575435161590576171875 +-0.6623354852199554443359375 0.03093600086867809295654296875 0.35050575435161590576171875 +-0.662333375215530373303352007497 -0.623465982079505876001235264994 0.274054087698459625244140625 +-0.662333375215530373303352007497 0.623465982079505876001235264994 0.274054087698459625244140625 +-0.66204750537872314453125 -0.04931774921715259552001953125 -0.348942004144191741943359375 +-0.66204750537872314453125 0.04931774921715259552001953125 -0.348942004144191741943359375 +-0.662016052007675104285056022491 -0.4809773862361907958984375 0.482592427730560269427684261245 +-0.662016052007675104285056022491 0.4809773862361907958984375 0.482592427730560269427684261245 +-0.661624702811241083288962272491 -0.342846660315990425793586382497 0.408912043273448932989566628748 +-0.661624702811241083288962272491 0.342846660315990425793586382497 0.408912043273448932989566628748 +-0.6615811884403228759765625 -0.187164601683616621530248380623 -0.131453703343868244513004128748 +-0.6615811884403228759765625 0.187164601683616621530248380623 -0.131453703343868244513004128748 +-0.661150789260864235608039507497 -0.526242595911026067589943977509 -0.309756597876548800396534488755 +-0.661150789260864235608039507497 0.526242595911026067589943977509 -0.309756597876548800396534488755 +-0.660916915535926796643195757497 -0.66924647986888885498046875 -0.1334094516932964324951171875 +-0.660916915535926796643195757497 0.66924647986888885498046875 -0.1334094516932964324951171875 +-0.660620784759521573192841970013 -0.35860478878021240234375 -0.273828792572021473272769753748 +-0.660620784759521573192841970013 0.35860478878021240234375 -0.273828792572021473272769753748 +-0.66053877770900726318359375 -0.12615239620208740234375 -0.671024882793426535876335492503 +-0.66053877770900726318359375 0.12615239620208740234375 -0.671024882793426535876335492503 +-0.660457706451415993420539507497 -0.21364630758762359619140625 -0.0902796968817710793198116903113 +-0.660457706451415993420539507497 0.21364630758762359619140625 -0.0902796968817710793198116903113 +-0.660135486721992514880241742503 -0.479614216089248646124332253748 -0.2381002902984619140625 +-0.660135486721992514880241742503 0.479614216089248646124332253748 -0.2381002902984619140625 +-0.659901911020278841846220529987 -0.215358504652976984194978626874 0.0902796968817710793198116903113 +-0.659901911020278841846220529987 0.215358504652976984194978626874 0.0902796968817710793198116903113 +-0.659410494565963678503806022491 -0.160227903723716730288728626874 -0.171769504249095900094701505623 +-0.659410494565963678503806022491 0.160227903723716730288728626874 -0.171769504249095900094701505623 +-0.659344005584716841283920985006 0 -0.453062391281127962994190738755 +-0.659343305230140619421774772491 -0.363062208890914894787727007497 -0.394908300042152382580695757497 +-0.659343305230140619421774772491 0.363062208890914894787727007497 -0.394908300042152382580695757497 +-0.659328591823577836450454014994 -0.189436098933219887463508257497 0.139281798899173719918920255623 +-0.659328591823577836450454014994 0.189436098933219887463508257497 0.139281798899173719918920255623 +-0.65931223332881927490234375 -0.21023775637149810791015625 -0.289148993790149688720703125 +-0.65931223332881927490234375 0.21023775637149810791015625 -0.289148993790149688720703125 +-0.659262001514434814453125 -0.39734399318695068359375 0.638350009918212890625 +-0.659262001514434814453125 0.39734399318695068359375 0.638350009918212890625 +-0.6589612662792205810546875 -0.08278724737465381622314453125 0.34844850003719329833984375 +-0.6589612662792205810546875 0.08278724737465381622314453125 0.34844850003719329833984375 +-0.658918073773384072033820757497 -0.401240105926990497930972878748 0.554376327991485617907585492503 +-0.658918073773384072033820757497 0.401240105926990497930972878748 0.554376327991485617907585492503 +-0.658833980560302734375 -0.660880982875823974609375 0.3594079911708831787109375 +-0.658833980560302734375 0.660880982875823974609375 0.3594079911708831787109375 +-0.658671301603317327355568977509 -0.611020785570144719933693977509 0.0529731016606092494636293110943 +-0.658671301603317327355568977509 0.611020785570144719933693977509 0.0529731016606092494636293110943 +-0.6580944061279296875 -0.207911992073059104235710492503 -0.404579210281372114721420985006 +-0.6580944061279296875 0.207911992073059104235710492503 -0.404579210281372114721420985006 +-0.6577127873897552490234375 -0.611078399419784590307358485006 -0.0632249973714351654052734375 +-0.6577127873897552490234375 0.611078399419784590307358485006 -0.0632249973714351654052734375 +-0.657560777664184636925881477509 -0.397151207923889193462940738755 -0.223348808288574229852230246252 +-0.657560777664184636925881477509 0.397151207923889193462940738755 -0.223348808288574229852230246252 +-0.657375991344451904296875 -0.23245100677013397216796875 0.71681499481201171875 +-0.657375991344451904296875 0.23245100677013397216796875 0.71681499481201171875 +-0.657214599847793512488181022491 0 -0.240974307060241671463174384371 +-0.65697075426578521728515625 -0.217443756759166717529296875 0.289149753749370574951171875 +-0.65697075426578521728515625 0.217443756759166717529296875 0.289149753749370574951171875 +-0.656908041238784767834602007497 0 0.539418497681617759020866742503 +-0.656850993633270263671875 -0.3255279958248138427734375 -0.680131018161773681640625 +-0.656850993633270263671875 0.3255279958248138427734375 -0.680131018161773681640625 +-0.656600016355514459753806022491 -0.0288750011473894105384907504686 0.240921109914779635330361884371 +-0.656600016355514459753806022491 0.0288750011473894105384907504686 0.240921109914779635330361884371 +-0.656284296512603670947783029987 -0.239990806579589821545539507497 0.041171200573444366455078125 +-0.656284296512603670947783029987 0.239990806579589821545539507497 0.041171200573444366455078125 +-0.656098085641860895300681022491 -0.239001694321632374151676003748 -0.0491238974034786182731870951557 +-0.656098085641860895300681022491 0.239001694321632374151676003748 -0.0491238974034786182731870951557 +-0.65600597858428955078125 -0.725297987461090087890625 -0.20880199968814849853515625 +-0.65600597858428955078125 0.725297987461090087890625 -0.20880199968814849853515625 +-0.6559152305126190185546875 -0.519284543395042375024672764994 0.150393903255462646484375 +-0.6559152305126190185546875 0.519284543395042375024672764994 0.150393903255462646484375 +-0.655829620361328191613381477509 -0.326626396179199252056690738755 -0.321251201629638716283920985006 +-0.655829620361328191613381477509 0.326626396179199252056690738755 -0.321251201629638716283920985006 +-0.655699485540390036852897992503 -0.5248284637928009033203125 -0.443974889814853668212890625 +-0.655699485540390036852897992503 0.5248284637928009033203125 -0.443974889814853668212890625 +-0.65558719635009765625 -0.436083984375000011102230246252 0.14154720306396484375 +-0.65558719635009765625 0.436083984375000011102230246252 0.14154720306396484375 +-0.655354642868042014391960492503 -0.25094155967235565185546875 -0.640342774987220697546774772491 +-0.655354642868042014391960492503 0.25094155967235565185546875 -0.640342774987220697546774772491 +-0.655275821685791015625 0 -0.68783231079578399658203125 +-0.655138397216796897204460492503 -0.305372810363769564556690738755 0.342842388153076216283920985006 +-0.655138397216796897204460492503 0.305372810363769564556690738755 0.342842388153076216283920985006 +-0.655050915479659989770766514994 -0.0567594975233077989051899692186 -0.240181189775466902291967130623 +-0.655050915479659989770766514994 0.0567594975233077989051899692186 -0.240181189775466902291967130623 +-0.654682728648185663367087272491 -0.06990484893321990966796875 0.537590998411178522253806022491 +-0.654682728648185663367087272491 0.06990484893321990966796875 0.537590998411178522253806022491 +-0.654637688398361228259147992503 -0.269256211817264556884765625 0.4705854952335357666015625 +-0.654637688398361228259147992503 0.269256211817264556884765625 0.4705854952335357666015625 +-0.654617595672607466283920985006 -0.218609595298767112048210492503 0.404580783843994151727230246252 +-0.654617595672607466283920985006 0.218609595298767112048210492503 0.404580783843994151727230246252 +-0.654586786031722933643095529987 -0.16271640360355377197265625 0.187188404798507679327457253748 +-0.654586786031722933643095529987 0.16271640360355377197265625 0.187188404798507679327457253748 +-0.654586189985275290759147992503 -0.0371250014752149623542543110943 0.6165540218353271484375 +-0.654586189985275290759147992503 0.0371250014752149623542543110943 0.6165540218353271484375 +-0.654464685916900656970085492503 -0.3985776007175445556640625 -0.472030216455459616931022992503 +-0.654464685916900656970085492503 0.3985776007175445556640625 -0.472030216455459616931022992503 +-0.6538815200328826904296875 -0.36467774212360382080078125 0.044144251383841037750244140625 +-0.6538815200328826904296875 0.36467774212360382080078125 0.044144251383841037750244140625 +-0.653793710470199518347556022491 -0.131200996041297895944310880623 -0.212932297587394708804353626874 +-0.653793710470199518347556022491 0.131200996041297895944310880623 -0.212932297587394708804353626874 +-0.653779578208923295434829014994 -0.474997140467166900634765625 -0.499449175596237138208266514994 +-0.653779578208923295434829014994 0.474997140467166900634765625 -0.499449175596237138208266514994 +-0.65368048846721649169921875 -0.36390374600887298583984375 -0.05268749780952930450439453125 +-0.65368048846721649169921875 0.36390374600887298583984375 -0.05268749780952930450439453125 +-0.65357623994350433349609375 -0.571424070000648431921774772491 -0.385762700438499417376903011245 +-0.65357623994350433349609375 0.571424070000648431921774772491 -0.385762700438499417376903011245 +-0.653526878356933571545539507497 -0.565479880571365334240852007497 -0.251267409324646029400440738755 +-0.653526878356933571545539507497 0.565479880571365334240852007497 -0.251267409324646029400440738755 +-0.65284873545169830322265625 -0.32541225850582122802734375 0.174341998994350433349609375 +-0.65284873545169830322265625 0.32541225850582122802734375 0.174341998994350433349609375 +-0.652469390630722068102897992503 -0.400823092460632357525440738755 0.472889703512191783563167746252 +-0.652469390630722068102897992503 0.400823092460632357525440738755 0.472889703512191783563167746252 +-0.65243549644947052001953125 -0.134694747626781463623046875 0.344507999718189239501953125 +-0.65243549644947052001953125 0.134694747626781463623046875 0.344507999718189239501953125 +-0.652082180976867653576789507497 -0.0859095983207225771804971259371 0.239600193500518782174779630623 +-0.652082180976867653576789507497 0.0859095983207225771804971259371 0.239600193500518782174779630623 +-0.651874324679374672619758257497 -0.0561356987804174437095561245314 -0.542594113945961020739616742503 +-0.651874324679374672619758257497 0.0561356987804174437095561245314 -0.542594113945961020739616742503 +-0.651527214050293013158920985006 -0.432518386840820334704460492503 -0.168643200397491477282585492503 +-0.651527214050293013158920985006 0.432518386840820334704460492503 -0.168643200397491477282585492503 +-0.65136434137821197509765625 -0.168627250194549549444644753748 -0.519412064552307151110710492503 +-0.65136434137821197509765625 0.168627250194549549444644753748 -0.519412064552307151110710492503 +-0.651239973306655950402443977509 -0.473148000240325938836605246252 0.40249349176883697509765625 +-0.651239973306655950402443977509 0.473148000240325938836605246252 0.40249349176883697509765625 +-0.651102560758590631628806022491 -0.4303481876850128173828125 0.336699451506137836798160378748 +-0.651102560758590631628806022491 0.4303481876850128173828125 0.336699451506137836798160378748 +-0.65097676217555999755859375 -0.516354596614837624279914507497 -0.179183400422334659918277566248 +-0.65097676217555999755859375 0.516354596614837624279914507497 -0.179183400422334659918277566248 +-0.650469589233398481908920985006 -0.110454299300909039582840875937 0.612118774652481101306022992503 +-0.650469589233398481908920985006 0.110454299300909039582840875937 0.612118774652481101306022992503 +-0.65034961700439453125 -0.0329984009265899685958700615629 0.46471118927001953125 +-0.65034961700439453125 0.0329984009265899685958700615629 0.46471118927001953125 +-0.6501067578792572021484375 -0.0984000004827976226806640625 -0.360802508890628814697265625 +-0.6501067578792572021484375 0.0984000004827976226806640625 -0.360802508890628814697265625 +-0.650000000000000022204460492503 0 0 +-0.64944899082183837890625 -0.760405004024505615234375 0 +-0.64944899082183837890625 0.760405004024505615234375 0 +-0.64933951199054718017578125 -0.29800875484943389892578125 0.2281432449817657470703125 +-0.64933951199054718017578125 0.29800875484943389892578125 0.2281432449817657470703125 +-0.6490875184535980224609375 -0.177920244634151458740234375 -0.3309524953365325927734375 +-0.6490875184535980224609375 0.177920244634151458740234375 -0.3309524953365325927734375 +-0.648626512289047219006477007497 -0.12881410121917724609375 0.534032920002937339098991742503 +-0.648626512289047219006477007497 0.12881410121917724609375 0.534032920002937339098991742503 +-0.648334050178527854235710492503 -0.0264387495815753929828684221093 -0.0382629010826349286178427178129 +-0.648334050178527854235710492503 0.0264387495815753929828684221093 -0.0382629010826349286178427178129 +-0.648291623592376686779914507497 -0.326069344580173503533870871252 -0.442602631449699412957698996252 +-0.648291623592376686779914507497 0.326069344580173503533870871252 -0.442602631449699412957698996252 +-0.647996056079864546362045985006 -0.05099770240485668182373046875 0 +-0.647996056079864546362045985006 0.05099770240485668182373046875 0 +-0.647837442159652776574318977509 -0.0268443502485752119590678432814 0.045670948922634124755859375 +-0.647837442159652776574318977509 0.0268443502485752119590678432814 0.045670948922634124755859375 +-0.647829711437225341796875 -0.422237938642501808850227007497 -0.551843574643135048596320757497 +-0.647829711437225341796875 0.422237938642501808850227007497 -0.551843574643135048596320757497 +-0.647593975067138671875 -0.551853001117706298828125 0.525433003902435302734375 +-0.647593975067138671875 0.551853001117706298828125 0.525433003902435302734375 +-0.647558933496475197522102007497 -0.6590900421142578125 0.2208341471850872039794921875 +-0.647558933496475197522102007497 0.6590900421142578125 0.2208341471850872039794921875 +-0.647513580322265691613381477509 -0.0527903974056243910362162807814 -0.466839981079101573602230246252 +-0.647513580322265691613381477509 0.0527903974056243910362162807814 -0.466839981079101573602230246252 +-0.6474711894989013671875 -0.292820000648498557360710492503 -0.367474389076232921258480246252 +-0.6474711894989013671875 0.292820000648498557360710492503 -0.367474389076232921258480246252 +-0.647424054145812943872329014994 -0.614496108889579728540297764994 -0.325171691179275523797542746252 +-0.647424054145812943872329014994 0.614496108889579728540297764994 -0.325171691179275523797542746252 +-0.647416782379150457238381477509 -0.157128798961639420950220369377 -0.442902421951293978619190738755 +-0.647416782379150457238381477509 0.157128798961639420950220369377 -0.442902421951293978619190738755 +-0.6472655832767486572265625 -0.605086183547973610608039507497 0.157853700220584869384765625 +-0.6472655832767486572265625 0.605086183547973610608039507497 0.157853700220584869384765625 +-0.647214412689208984375 -0.470226383209228548931690738755 0 +-0.647214412689208984375 0.470226383209228548931690738755 0 +-0.6471035778522491455078125 -0.179183699190616607666015625 -0.599292021989822454308693977509 +-0.6471035778522491455078125 0.179183699190616607666015625 -0.599292021989822454308693977509 +-0.647054976224899269787727007497 -0.3473136126995086669921875 -0.520281010866165183337272992503 +-0.647054976224899269787727007497 0.3473136126995086669921875 -0.520281010866165183337272992503 +-0.646777582168579168175881477509 -0.0883063971996307373046875 0.462472820281982444079460492503 +-0.646777582168579168175881477509 0.0883063971996307373046875 0.462472820281982444079460492503 +-0.646722006797790571752670985006 -0.0599093981087207780311665317186 -0.6230259239673614501953125 +-0.646722006797790571752670985006 0.0599093981087207780311665317186 -0.6230259239673614501953125 +-0.646716696023940995630141514994 -0.2678759992122650146484375 0 +-0.646716696023940995630141514994 0.2678759992122650146484375 0 +-0.646551018953323342053352007497 -0.314070956408977475238231136245 0.621153724193572953637954014994 +-0.646551018953323342053352007497 0.314070956408977475238231136245 0.621153724193572953637954014994 +-0.646403414011001653527443977509 -0.514845889806747503136818977509 0.356505301594734202996761496252 +-0.646403414011001653527443977509 0.514845889806747503136818977509 0.356505301594734202996761496252 +-0.6463530063629150390625 -0.31899149715900421142578125 -0.207297004759311676025390625 +-0.6463530063629150390625 0.31899149715900421142578125 -0.207297004759311676025390625 +-0.646345925331115678247329014994 -0.552029970288276605749899772491 0 +-0.646345925331115678247329014994 0.552029970288276605749899772491 0 +-0.64624200761318206787109375 -0.357165746390819549560546875 0.1315447501838207244873046875 +-0.64624200761318206787109375 0.357165746390819549560546875 0.1315447501838207244873046875 +-0.6460230052471160888671875 0 -0.3809902667999267578125 +-0.645932018756866455078125 -0.60573899745941162109375 -0.46459901332855224609375 +-0.645932018756866455078125 0.60573899745941162109375 -0.46459901332855224609375 +-0.645901978015899658203125 -0.55473697185516357421875 -0.524478018283843994140625 +-0.645901978015899658203125 0.55473697185516357421875 -0.524478018283843994140625 +-0.645855614542961142809929242503 0 0.696685367822647116931022992503 +-0.6456345021724700927734375 -0.469076773524284340588508257497 0.2926141917705535888671875 +-0.6456345021724700927734375 0.469076773524284340588508257497 0.2926141917705535888671875 +-0.645472761988639898156350227509 0 -0.0765823476016521537124148721887 +-0.645446002483367919921875 -0.7006189823150634765625 0.30419099330902099609375 +-0.645446002483367919921875 0.7006189823150634765625 0.30419099330902099609375 +-0.6453386843204498291015625 -0.322400692105293262823551003748 0.538140606880188054894631477509 +-0.6453386843204498291015625 0.322400692105293262823551003748 0.538140606880188054894631477509 +-0.645334905385971047131477007497 -0.134243904054164864270148882497 0.235629808902740461862279630623 +-0.645334905385971047131477007497 0.134243904054164864270148882497 0.235629808902740461862279630623 +-0.645244616270065241003806022491 -0.237442809343338001593082253748 0.131453703343868244513004128748 +-0.645244616270065241003806022491 0.237442809343338001593082253748 0.131453703343868244513004128748 +-0.645025485754012972705595529987 -0.103188401460647574681139815311 -0.251584196090698208880809261245 +-0.645025485754012972705595529987 0.103188401460647574681139815311 -0.251584196090698208880809261245 +-0.644758081436157204358039507497 -0.234281605482101418225227007497 -0.139281798899173719918920255623 +-0.644758081436157204358039507497 0.234281605482101418225227007497 -0.139281798899173719918920255623 +-0.644240346550941533898537727509 -0.0774000480771064730545205634371 -0.0382576998323202119300923129686 +-0.644240346550941533898537727509 0.0774000480771064730545205634371 -0.0382576998323202119300923129686 +-0.643963587284088090356704014994 -0.207201400399208063296541126874 -0.17994059622287750244140625 +-0.643963587284088090356704014994 0.207201400399208063296541126874 -0.17994059622287750244140625 +-0.6439230144023895263671875 -0.290045253932476043701171875 -0.2524605095386505126953125 +-0.6439230144023895263671875 0.290045253932476043701171875 -0.2524605095386505126953125 +-0.643827974796295166015625 -0.1332550048828125 -0.75347697734832763671875 +-0.643827974796295166015625 0.1332550048828125 -0.75347697734832763671875 +-0.643784809112548872533920985006 -0.38754880428314208984375 0.2744944095611572265625 +-0.643784809112548872533920985006 0.38754880428314208984375 0.2744944095611572265625 +-0.643707624077796913830695757497 -0.07742500118911266326904296875 0.69436733424663543701171875 +-0.643707624077796913830695757497 0.07742500118911266326904296875 0.69436733424663543701171875 +-0.643704763054847695080695757497 -0.0778401009738445281982421875 0.04566249810159206390380859375 +-0.643704763054847695080695757497 0.0778401009738445281982421875 0.04566249810159206390380859375 +-0.643687796592712357934829014994 -0.262523803114891041143863503748 0.082144998013973236083984375 +-0.643687796592712357934829014994 0.262523803114891041143863503748 0.082144998013973236083984375 +-0.643549403548240639416633257497 0 0.0913483969867229517181073106258 +-0.643344646692275978772102007497 -0.0527416516095399884322958428129 -0.0763295009732246482192508096887 +-0.643344646692275978772102007497 0.0527416516095399884322958428129 -0.0763295009732246482192508096887 +-0.64295326173305511474609375 -0.185491494834423065185546875 0.338680498301982879638671875 +-0.64295326173305511474609375 0.185491494834423065185546875 0.338680498301982879638671875 +-0.64281226694583892822265625 -0.3531855046749114990234375 -0.1566922478377819061279296875 +-0.64281226694583892822265625 0.3531855046749114990234375 -0.1566922478377819061279296875 +-0.642768716812133766858039507497 -0.21087849140167236328125 0.17994059622287750244140625 +-0.642768716812133766858039507497 0.21087849140167236328125 0.17994059622287750244140625 +-0.642707204818725674755341970013 -0.466951179504394575658920985006 0.0942551970481872586349325615629 +-0.642707204818725674755341970013 0.466951179504394575658920985006 0.0942551970481872586349325615629 +-0.642410981655120782995993522491 -0.260220804810523953509715511245 -0.0979446962475776644607705634371 +-0.642410981655120782995993522491 0.260220804810523953509715511245 -0.0979446962475776644607705634371 +-0.642111408710479669714743522491 -0.0284480001777410486385466725778 -0.277279794216156005859375 +-0.642111408710479669714743522491 0.0284480001777410486385466725778 -0.277279794216156005859375 +-0.6420240104198455810546875 -0.17259840667247772216796875 0.606642293930053755346420985006 +-0.6420240104198455810546875 0.17259840667247772216796875 0.606642293930053755346420985006 +-0.641997861862182661596420985006 -0.101680801808834084254407059689 0 +-0.641997861862182661596420985006 0.101680801808834084254407059689 0 +-0.641948246955871604235710492503 -0.698053357005119279321547764994 0.0558865999802947016616982978121 +-0.641948246955871604235710492503 0.698053357005119279321547764994 0.0558865999802947016616982978121 +-0.641719314455985956335837272491 -0.543447476625442460473891514994 0.441996999084949493408203125 +-0.641719314455985956335837272491 0.543447476625442460473891514994 0.441996999084949493408203125 +-0.64163100719451904296875 -0.653495013713836669921875 -0.4015649855136871337890625 +-0.64163100719451904296875 0.653495013713836669921875 -0.4015649855136871337890625 +-0.6416070163249969482421875 -0.268668003380298614501953125 0.280460245907306671142578125 +-0.6416070163249969482421875 0.268668003380298614501953125 0.280460245907306671142578125 +-0.641449803113937400134147992503 -0.602649879455566472863381477509 -0.188029798865318314993189119377 +-0.641449803113937400134147992503 0.602649879455566472863381477509 -0.188029798865318314993189119377 +-0.641364762187004111559929242503 -0.0535093009471893296669087192186 0.09103834629058837890625 +-0.641364762187004111559929242503 0.0535093009471893296669087192186 0.09103834629058837890625 +-0.640841007232666015625 -0.7586510181427001953125 0.11734999716281890869140625 +-0.640841007232666015625 0.7586510181427001953125 0.11734999716281890869140625 +-0.6407911777496337890625 -0.465560007095336958471420985006 -0.112428796291351329461605246252 +-0.6407911777496337890625 0.465560007095336958471420985006 -0.112428796291351329461605246252 +-0.640691411495208695825454014994 -0.698259526491165183337272992503 -0.0666880995035171453277911268742 +-0.640691411495208695825454014994 0.698259526491165183337272992503 -0.0666880995035171453277911268742 +-0.640564024448394775390625 -0.3012540042400360107421875 0.706345021724700927734375 +-0.640564024448394775390625 0.3012540042400360107421875 0.706345021724700927734375 +-0.640193605422973655016960492503 -0.271293592453002940789730246252 0.395666408538818403783920985006 +-0.640193605422973655016960492503 0.271293592453002940789730246252 0.395666408538818403783920985006 +-0.640084874629974320825454014994 -0.550298479199409440454360264994 0.0998163498938083593170489393742 +-0.640084874629974320825454014994 0.550298479199409440454360264994 0.0998163498938083593170489393742 +-0.639904785156250044408920985006 -0.143674397468566888980134876874 0.458126401901245150494190738755 +-0.639904785156250044408920985006 0.143674397468566888980134876874 0.458126401901245150494190738755 +-0.639876595139503456799445757497 -0.395803354680538177490234375 0.395470999181270599365234375 +-0.639876595139503456799445757497 0.395803354680538177490234375 0.395470999181270599365234375 +-0.639778864383697465356704014994 -0.276131841540336597784488503748 -0.4867584407329559326171875 +-0.639778864383697465356704014994 0.276131841540336597784488503748 -0.4867584407329559326171875 +-0.639580184221267611377470529987 -0.178623893857002252749666126874 -0.221428903937339771612613503748 +-0.639580184221267611377470529987 0.178623893857002252749666126874 -0.221428903937339771612613503748 +-0.63948149979114532470703125 -0.391871988773345947265625 0 +-0.63948149979114532470703125 0.391871988773345947265625 0 +-0.6394099295139312744140625 -0.187096045166254026925756193123 0.527872943878173850329460492503 +-0.6394099295139312744140625 0.187096045166254026925756193123 0.527872943878173850329460492503 +-0.639261001348495394580595529987 0 0.285212197899818387103465511245 +-0.639198291301727339330795985006 -0.0264400498941540738895294992972 -0.115006453543901446257002874063 +-0.639198291301727339330795985006 0.0264400498941540738895294992972 -0.115006453543901446257002874063 +-0.638466274738311745373664507497 -0.554075074195861883019631477509 0.3088062107563018798828125 +-0.638466274738311745373664507497 0.554075074195861883019631477509 0.3088062107563018798828125 +-0.638194978237152099609375 -0.26286399364471435546875 -0.72360897064208984375 +-0.638194978237152099609375 0.26286399364471435546875 -0.72360897064208984375 +-0.63819301128387451171875 -0.2596132457256317138671875 -0.296329490840435028076171875 +-0.63819301128387451171875 0.2596132457256317138671875 -0.296329490840435028076171875 +-0.6380519866943359375 0 -0.769993007183074951171875 +-0.63798598945140838623046875 0 0.3943019807338714599609375 +-0.637950420379638671875 -0.423303985595703147204460492503 0.232018399238586442434595369377 +-0.637950420379638671875 0.423303985595703147204460492503 0.232018399238586442434595369377 +-0.637886068224906899182258257497 -0.366875740885734547003238503748 -0.600836035609245255884047764994 +-0.637886068224906899182258257497 0.366875740885734547003238503748 -0.600836035609245255884047764994 +-0.637399685382842973169204014994 -0.54958958923816680908203125 -0.11905014514923095703125 +-0.637399685382842973169204014994 0.54958958923816680908203125 -0.11905014514923095703125 +-0.637278997898101828845085492503 -0.653780484199523947985710492503 -0.262576206028461434094367632497 +-0.637278997898101828845085492503 0.653780484199523947985710492503 -0.262576206028461434094367632497 +-0.637276166677474997790397992503 -0.1543341539800167083740234375 0.687430447340011574475227007497 +-0.637276166677474997790397992503 0.1543341539800167083740234375 0.687430447340011574475227007497 +-0.637211012840270929480368522491 -0.505658221244811967309829014994 0.246519549190998082943693248126 +-0.637211012840270929480368522491 0.505658221244811967309829014994 0.246519549190998082943693248126 +-0.637147009372711181640625 -0.757934987545013427734375 -0.13992099463939666748046875 +-0.637147009372711181640625 0.757934987545013427734375 -0.13992099463939666748046875 +-0.637107303738594032971320757497 -0.324458611011505138055355246252 0.459697002172470059466746761245 +-0.637107303738594032971320757497 0.324458611011505138055355246252 0.459697002172470059466746761245 +-0.637095189094543434826789507497 -0.0575686991214752127876685960928 0.28424549102783203125 +-0.637095189094543434826789507497 0.0575686991214752127876685960928 0.28424549102783203125 +-0.637085130810737587658820757497 -0.103747151046991351042159124063 -0.0765426989644765881637411553129 +-0.637085130810737587658820757497 0.103747151046991351042159124063 -0.0765426989644765881637411553129 +-0.63645900785923004150390625 -0.0518550015985965728759765625 0.39335851371288299560546875 +-0.63645900785923004150390625 0.0518550015985965728759765625 0.39335851371288299560546875 +-0.636397218704223610608039507497 -0.636395394802093505859375 0 +-0.636397218704223610608039507497 0.636395394802093505859375 0 +-0.63632176816463470458984375 -0.38708849251270294189453125 0.0880732499063014984130859375 +-0.63632176816463470458984375 0.38708849251270294189453125 0.0880732499063014984130859375 +-0.63621599972248077392578125 -0.0493627488613128662109375 -0.394071757793426513671875 +-0.63621599972248077392578125 0.0493627488613128662109375 -0.394071757793426513671875 +-0.636078315973281904760483485006 -0.12822680175304412841796875 -0.0382381999865174307395854214064 +-0.636078315973281904760483485006 0.12822680175304412841796875 -0.0382381999865174307395854214064 +-0.6357878744602203369140625 -0.29333429038524627685546875 -0.565445709228515669408920985006 +-0.6357878744602203369140625 0.29333429038524627685546875 -0.565445709228515669408920985006 +-0.635646390914917036596420985006 -0.258018398284912131579460492503 -0.4115583896636962890625 +-0.635646390914917036596420985006 0.258018398284912131579460492503 -0.4115583896636962890625 +-0.6356364190578460693359375 -0.183082899451255776135383257497 0.229012709856033308541967130623 +-0.6356364190578460693359375 0.183082899451255776135383257497 0.229012709856033308541967130623 +-0.635531002283096335681022992503 -0.586788424849510215075554242503 0.392784155905246734619140625 +-0.635531002283096335681022992503 0.586788424849510215075554242503 0.392784155905246734619140625 +-0.635465982556343123022202235006 -0.128845595568418513909847433752 0.0456286996603012112716513115629 +-0.635465982556343123022202235006 0.128845595568418513909847433752 0.0456286996603012112716513115629 +-0.635352200269699074475227007497 -0.290915098786354020532485264994 0.0411795999854803057571572821871 +-0.635352200269699074475227007497 0.290915098786354020532485264994 0.0411795999854803057571572821871 +-0.6353375911712646484375 -0.356287193298339854852230246252 0.33076560497283935546875 +-0.6353375911712646484375 0.356287193298339854852230246252 0.33076560497283935546875 +-0.63532958924770355224609375 -0.0632738031446933718582315009371 -0.703457874059677079614516514994 +-0.63532958924770355224609375 0.0632738031446933718582315009371 -0.703457874059677079614516514994 +-0.635210090875625521533720529987 -0.289988300204277016369758257497 -0.0491385996341705266754473768742 +-0.635210090875625521533720529987 0.289988300204277016369758257497 -0.0491385996341705266754473768742 +-0.63505716621875762939453125 -0.0787741515785455731490927178129 -0.114004801213741305265791936563 +-0.63505716621875762939453125 0.0787741515785455731490927178129 -0.114004801213741305265791936563 +-0.635055005550384521484375 -0.1470105014741420745849609375 -0.370935760438442230224609375 +-0.635055005550384521484375 0.1470105014741420745849609375 -0.370935760438442230224609375 +-0.635038879513740495141860264994 -0.188419204950332624948217130623 -0.680972376465797446520866742503 +-0.635038879513740495141860264994 0.188419204950332624948217130623 -0.680972376465797446520866742503 +-0.63499425351619720458984375 -0.3850297629833221435546875 -0.10504424571990966796875 +-0.63499425351619720458984375 0.3850297629833221435546875 -0.10504424571990966796875 +-0.634992814064025856701789507497 -0.104652604460716253109708873126 0.0912801511585712432861328125 +-0.634992814064025856701789507497 0.104652604460716253109708873126 0.0912801511585712432861328125 +-0.634826412796974159924445757497 -0.0268456505611538893962819685157 0.137021951377391815185546875 +-0.634826412796974159924445757497 0.0268456505611538893962819685157 0.137021951377391815185546875 +-0.633500993251800537109375 -0.4602600038051605224609375 0.621962010860443115234375 +-0.633500993251800537109375 0.4602600038051605224609375 0.621962010860443115234375 +-0.63343720138072967529296875 -0.460213242471218086926398882497 0.538016346096992448266860264994 +-0.63343720138072967529296875 0.460213242471218086926398882497 0.538016346096992448266860264994 +-0.633436024188995361328125 -0.51120197772979736328125 -0.5808889865875244140625 +-0.633436024188995361328125 0.51120197772979736328125 -0.5808889865875244140625 +-0.633187079429626487048210492503 -0.1126836501061916351318359375 -0.55576653778553009033203125 +-0.633187079429626487048210492503 0.1126836501061916351318359375 -0.55576653778553009033203125 +-0.63311302661895751953125 -0.697035014629364013671875 -0.3366149961948394775390625 +-0.63311302661895751953125 0.697035014629364013671875 -0.3366149961948394775390625 +-0.632993209362029962683493522491 -0.0745451025664806282700070028113 -0.289417797327041592669871761245 +-0.632993209362029962683493522491 0.0745451025664806282700070028113 -0.289417797327041592669871761245 +-0.632529592514038174755341970013 -0.105323994159698494654797684689 -0.478344821929931662829460492503 +-0.632529592514038174755341970013 0.105323994159698494654797684689 -0.478344821929931662829460492503 +-0.6322434842586517333984375 -0.106082899868488303440905440311 0.281094801425933793481704014994 +-0.6322434842586517333984375 0.106082899868488303440905440311 0.281094801425933793481704014994 +-0.632041138410568303918068977509 -0.151737295836210261956722433752 0 +-0.632041138410568303918068977509 0.151737295836210261956722433752 0 +-0.6318862438201904296875 -0.10346250236034393310546875 0.39053173363208770751953125 +-0.6318862438201904296875 0.10346250236034393310546875 0.39053173363208770751953125 +-0.631858503818511940686164507497 -0.149114696681499458996711382497 -0.261761498451232921258480246252 +-0.631858503818511940686164507497 0.149114696681499458996711382497 -0.261761498451232921258480246252 +-0.6317161619663238525390625 0 -0.153083451092243194580078125 +-0.630624809861183188708366742503 -0.0798193510621786200820437784387 0.135799299180507676565454744377 +-0.630624809861183188708366742503 0.0798193510621786200820437784387 0.135799299180507676565454744377 +-0.629821586608886763158920985006 -0.197856795787811290399105246252 0.451859188079833995477230246252 +-0.629821586608886763158920985006 0.197856795787811290399105246252 0.451859188079833995477230246252 +-0.629705250263214111328125 -0.3451957404613494873046875 0.216358490288257598876953125 +-0.629705250263214111328125 0.3451957404613494873046875 0.216358490288257598876953125 +-0.6297030150890350341796875 -0.23757974803447723388671875 0.33095325529575347900390625 +-0.6297030150890350341796875 0.23757974803447723388671875 0.33095325529575347900390625 +-0.629685664176940940173210492503 -0.691559159755706809313835492503 0.166556844860315328427091685626 +-0.629685664176940940173210492503 0.691559159755706809313835492503 0.166556844860315328427091685626 +-0.629662162065505959240852007497 -0.0523718010634183911422567803129 -0.152585545182228082827791126874 +-0.629662162065505959240852007497 0.0523718010634183911422567803129 -0.152585545182228082827791126874 +-0.629213404655456609582131477509 -0.6347115039825439453125 0.1059830971062183380126953125 +-0.629213404655456609582131477509 0.6347115039825439453125 0.1059830971062183380126953125 +-0.62919075787067413330078125 -0.227849252521991729736328125 -0.3386797606945037841796875 +-0.62919075787067413330078125 0.227849252521991729736328125 -0.3386797606945037841796875 +-0.629009580612182706005341970013 -0.456998395919799849096420985006 0.188411998748779313528345369377 +-0.629009580612182706005341970013 0.456998395919799849096420985006 0.188411998748779313528345369377 +-0.628839021921157814709602007497 -0.235391387343406671694978626874 0.599293792247772239001335492503 +-0.628839021921157814709602007497 0.235391387343406671694978626874 0.599293792247772239001335492503 +-0.62800920009613037109375 -0.283800303936004638671875 0.122726096212863913792467940311 +-0.62800920009613037109375 0.283800303936004638671875 0.122726096212863913792467940311 +-0.627996152639389015881477007497 -0.456263861060142494885383257497 -0.346329097449779521600277121252 +-0.627996152639389015881477007497 0.456263861060142494885383257497 -0.346329097449779521600277121252 +-0.627895838022232033459602007497 -0.41285265982151031494140625 -0.397240690886974334716796875 +-0.627895838022232033459602007497 0.41285265982151031494140625 -0.397240690886974334716796875 +-0.6277256011962890625 -0.374741601943969770971420985006 -0.324852800369262728619190738755 +-0.6277256011962890625 0.374741601943969770971420985006 -0.324852800369262728619190738755 +-0.627655720710754372326789507497 -0.257959091663360562396434261245 0.171770203113555897100894753748 +-0.627655720710754372326789507497 0.257959091663360562396434261245 0.171770203113555897100894753748 +-0.627562999725341796875 -0.73888397216796875 0.24538700282573699951171875 +-0.627562999725341796875 0.73888397216796875 0.24538700282573699951171875 +-0.627473723888397283410256477509 -0.590651983022689841540397992503 0.25963018834590911865234375 +-0.627473723888397283410256477509 0.590651983022689841540397992503 0.25963018834590911865234375 +-0.62744791805744171142578125 0 -0.573418515920638971472556022491 +-0.627267706394195490027243522491 -0.224468851089477533511384876874 -0.527872082591056779321547764994 +-0.627267706394195490027243522491 0.224468851089477533511384876874 -0.527872082591056779321547764994 +-0.627173101902008034436164507497 -0.455662786960601806640625 0.457192826271057117804019753748 +-0.627173101902008034436164507497 0.455662786960601806640625 0.457192826271057117804019753748 +-0.626844382286071755139289507497 -0.154103951901197439022794810626 -0.0762774981558322906494140625 +-0.626844382286071755139289507497 0.154103951901197439022794810626 -0.0762774981558322906494140625 +-0.626679298281669683312600227509 -0.129563203454017644711271373126 -0.11395929753780364990234375 +-0.626679298281669683312600227509 0.129563203454017644711271373126 -0.11395929753780364990234375 +-0.626484012603759854442841970013 -0.414374399185180708471420985006 -0.275339198112487804070980246252 +-0.626484012603759854442841970013 0.414374399185180708471420985006 -0.275339198112487804070980246252 +-0.626440811157226606908920985006 0 -0.497566413879394542352230246252 +-0.626429605484008833471420985006 -0.495347213745117198602230246252 0.0470928013324737604339276231258 +-0.626429605484008833471420985006 0.495347213745117198602230246252 0.0470928013324737604339276231258 +-0.626298901438713029321547764994 -0.377476793527603105005141514994 0.606432509422302201684829014994 +-0.626298901438713029321547764994 0.377476793527603105005141514994 0.606432509422302201684829014994 +-0.626131814718246526574318977509 -0.6340229809284210205078125 -0.126387901604175567626953125 +-0.626131814718246526574318977509 0.6340229809284210205078125 -0.126387901604175567626953125 +-0.626097482442855790552016514994 0 -0.31305049359798431396484375 +-0.626081967353820822985710492503 -0.246436257660388929879857755623 0.519413736462593034204360264994 +-0.626081967353820822985710492503 0.246436257660388929879857755623 0.519413736462593034204360264994 +-0.625894105434417702404914507497 -0.53939042985439300537109375 0.199536653608083730526701060626 +-0.625894105434417702404914507497 0.53939042985439300537109375 0.199536653608083730526701060626 +-0.62589228153228759765625 -0.627836933732032753674445757497 0.341437591612338997570930132497 +-0.62589228153228759765625 0.627836933732032753674445757497 0.341437591612338997570930132497 +-0.625835990905761807567841970013 -0.210127210617065435238615123126 -0.451858377456665072369190738755 +-0.625835990905761807567841970013 0.210127210617065435238615123126 -0.451858377456665072369190738755 +-0.6257735788822174072265625 -0.1195127964019775390625 -0.635707783699035688940170985006 +-0.6257735788822174072265625 0.1195127964019775390625 -0.635707783699035688940170985006 +-0.6256415843963623046875 -0.495391988754272483141960492503 -0.05621039867401123046875 +-0.6256415843963623046875 0.495391988754272483141960492503 -0.05621039867401123046875 +-0.62531697750091552734375 -0.0413010008633136749267578125 0.779277980327606201171875 +-0.62531697750091552734375 0.0413010008633136749267578125 0.779277980327606201171875 +-0.625235974788665771484375 -0.4542590081691741943359375 -0.634609997272491455078125 +-0.625235974788665771484375 0.4542590081691741943359375 -0.634609997272491455078125 +-0.625215494632720858447783029987 -0.253112310171127286029246761245 -0.187188404798507679327457253748 +-0.625215494632720858447783029987 0.253112310171127286029246761245 -0.187188404798507679327457253748 +-0.624762588739395052783720529987 -0.279835510253906238897769753748 -0.146161399781703948974609375 +-0.624762588739395052783720529987 0.279835510253906238897769753748 -0.146161399781703948974609375 +-0.624628552794456504138054242503 -0.155138099938631063290372935626 0.0909486465156078421889773721887 +-0.624628552794456504138054242503 0.155138099938631063290372935626 0.0909486465156078421889773721887 +-0.624507191777229242468649772491 -0.220828456431627268008455189374 0.6809742450714111328125 +-0.624507191777229242468649772491 0.220828456431627268008455189374 0.6809742450714111328125 +-0.624420189857482932360710492503 -0.497006896138191212042301003748 -0.292547897994518246722606136245 +-0.624420189857482932360710492503 0.497006896138191212042301003748 -0.292547897994518246722606136245 +-0.62431252002716064453125 -0.15407979488372802734375 0.276574900746345497815070757497 +-0.62431252002716064453125 0.15407979488372802734375 0.276574900746345497815070757497 +-0.62428875267505645751953125 -0.154574252665042877197265625 0.3858367502689361572265625 +-0.62428875267505645751953125 0.154574252665042877197265625 0.3858367502689361572265625 +-0.624238175153732366418068977509 -0.380122205615043673443409488755 0.525198626518249556127670985006 +-0.624238175153732366418068977509 0.380122205615043673443409488755 0.525198626518249556127670985006 +-0.624146997928619384765625 -0.615637004375457763671875 0.4810729920864105224609375 +-0.624146997928619384765625 0.615637004375457763671875 0.4810729920864105224609375 +-0.62409751117229461669921875 -0.316768504679203033447265625 0.269555993378162384033203125 +-0.62409751117229461669921875 0.316768504679203033447265625 0.269555993378162384033203125 +-0.624009090662002607885483485006 -0.177906955778598802053735994377 -0.0382304005324840545654296875 +-0.624009090662002607885483485006 0.177906955778598802053735994377 -0.0382304005324840545654296875 +-0.624008443951606706079360264994 -0.309251596033573161736995871252 -0.64612446725368499755859375 +-0.624008443951606706079360264994 0.309251596033573161736995871252 -0.64612446725368499755859375 +-0.623977902531623884740952235006 0 0.182076053321361536196931751874 +-0.623705613613128595495993522491 -0.317790901660919167248664507497 0 +-0.623705613613128595495993522491 0.317790901660919167248664507497 0 +-0.62351445853710174560546875 -0.104403002560138707943693248126 -0.151095750182867055722013560626 +-0.62351445853710174560546875 0.104403002560138707943693248126 -0.151095750182867055722013560626 +-0.6233298480510711669921875 -0.178548501431941980532869251874 0.0456150475889444337318501254686 +-0.6233298480510711669921875 0.178548501431941980532869251874 0.0456150475889444337318501254686 +-0.6232995092868804931640625 -0.378153741359710693359375 0.1760617531836032867431640625 +-0.6232995092868804931640625 0.378153741359710693359375 0.1760617531836032867431640625 +-0.623205679655075006628806022491 -0.689033088088035539087172764994 -0.1983618997037410736083984375 +-0.623205679655075006628806022491 0.689033088088035539087172764994 -0.1983618997037410736083984375 +-0.62314049899578094482421875 -0.41502673923969268798828125 0.04414950124919414520263671875 +-0.62314049899578094482421875 0.41502673923969268798828125 0.04414950124919414520263671875 +-0.6230684816837310791015625 -0.0988110043108463287353515625 -0.405612766742706298828125 +-0.6230684816837310791015625 0.0988110043108463287353515625 -0.405612766742706298828125 +-0.62295149266719818115234375 -0.41431201994419097900390625 -0.052697248756885528564453125 +-0.62295149266719818115234375 0.41431201994419097900390625 -0.052697248756885528564453125 +-0.622705602645874045641960492503 -0.322679209709167524877670985006 0.384858393669128440173210492503 +-0.622705602645874045641960492503 0.322679209709167524877670985006 0.384858393669128440173210492503 +-0.622425293922424294201789507497 -0.231421393156051619088842130623 0.221429592370986916272102007497 +-0.622425293922424294201789507497 0.231421393156051619088842130623 0.221429592370986916272102007497 +-0.622078451514244012976462272491 -0.577075186371803217078024772491 0.0500301515683531719536070170307 +-0.622078451514244012976462272491 0.577075186371803217078024772491 0.0500301515683531719536070170307 +-0.622076007723808332983139735006 -0.130770900845527643374666126874 0.1357212997972965240478515625 +-0.622076007723808332983139735006 0.130770900845527643374666126874 0.1357212997972965240478515625 +-0.621901819109916709216179242503 -0.05297500081360340118408203125 0.181470248103141801321314119377 +-0.621901819109916709216179242503 0.05297500081360340118408203125 0.181470248103141801321314119377 +-0.621855479478836015161391514994 -0.225496608018875110968082253748 -0.229012709856033308541967130623 +-0.621855479478836015161391514994 0.225496608018875110968082253748 -0.229012709856033308541967130623 +-0.621502068638801641320412727509 -0.0264173004776239415958283274222 -0.18851365149021148681640625 +-0.621502068638801641320412727509 0.0264173004776239415958283274222 -0.18851365149021148681640625 +-0.621303987503051824425881477509 -0.451401615142822287829460492503 -0.224094390869140625 +-0.621303987503051824425881477509 0.451401615142822287829460492503 -0.224094390869140625 +-0.621188986301422163549545985006 -0.497205913066864013671875 -0.42060779035091400146484375 +-0.621188986301422163549545985006 0.497205913066864013671875 -0.42060779035091400146484375 +-0.62117318809032440185546875 -0.577129599452018693384047764994 -0.05971249751746654510498046875 +-0.62117318809032440185546875 0.577129599452018693384047764994 -0.05971249751746654510498046875 +-0.620862293243408247533920985006 -0.2377341091632843017578125 -0.606640523672103859631477007497 +-0.620862293243408247533920985006 0.2377341091632843017578125 -0.606640523672103859631477007497 +-0.620824414491653375769431022491 -0.120770996809005728978014815311 -0.29998569190502166748046875 +-0.620824414491653375769431022491 0.120770996809005728978014815311 -0.29998569190502166748046875 +-0.62078762054443359375 0 -0.6516306102275848388671875 +-0.620742976665496826171875 -0.122798003256320953369140625 0.774336993694305419921875 +-0.620742976665496826171875 0.122798003256320953369140625 0.774336993694305419921875 +-0.620734083652496271277243522491 -0.31288109719753265380859375 0.0824305988848209325592364393742 +-0.620734083652496271277243522491 0.31288109719753265380859375 0.0824305988848209325592364393742 +-0.620558404922485373766960492503 -0.341705608367919966283920985006 -0.371678400039672895971420985006 +-0.620558404922485373766960492503 0.341705608367919966283920985006 -0.371678400039672895971420985006 +-0.620469987392425537109375 -0.36851298809051513671875 0.692254006862640380859375 +-0.620469987392425537109375 0.36851298809051513671875 0.692254006862640380859375 +-0.61989700794219970703125 -0.737711012363433837890625 -0.2674129903316497802734375 +-0.61989700794219970703125 0.737711012363433837890625 -0.2674129903316497802734375 +-0.619483888149261474609375 -0.310767793655395474505809261245 -0.098301701247692108154296875 +-0.619483888149261474609375 0.310767793655395474505809261245 -0.098301701247692108154296875 +-0.619370126724243186266960492503 -0.44999729096889495849609375 -0.473162376880645774157585492503 +-0.619370126724243186266960492503 0.44999729096889495849609375 -0.473162376880645774157585492503 +-0.6193319857120513916015625 -0.336191989481449127197265625 -0.2567144930362701416015625 +-0.6193319857120513916015625 0.336191989481449127197265625 -0.2567144930362701416015625 +-0.6191774904727935791015625 -0.541349118947982765881477007497 -0.365459400415420521124332253748 +-0.6191774904727935791015625 0.541349118947982765881477007497 -0.365459400415420521124332253748 +-0.618266391754150435033920985006 0 0.507687997817993230675881477509 +-0.618220290541648842541633257497 -0.0350625013932585674614195170307 0.58230102062225341796875 +-0.618220290541648842541633257497 0.0350625013932585674614195170307 0.58230102062225341796875 +-0.61818768084049224853515625 -0.200858455896377574578792746252 0 +-0.61818768084049224853515625 0.200858455896377574578792746252 0 +-0.618179786205291681433493522491 -0.0288736008107662173172158759371 0.327138704061508134302016514994 +-0.618179786205291681433493522491 0.0288736008107662173172158759371 0.327138704061508134302016514994 +-0.6181350052356719970703125 0 -0.42474599182605743408203125 +-0.618105536699295021740852007497 -0.37643440067768096923828125 -0.445806315541267372815070757497 +-0.618105536699295021740852007497 0.37643440067768096923828125 -0.445806315541267372815070757497 +-0.617911005020141512744658029987 -0.0460298992693424224853515625 -0.325679203867912270276008257497 +-0.617911005020141512744658029987 0.0460298992693424224853515625 -0.325679203867912270276008257497 +-0.617365437746048018041733485006 -0.0787422999739646883865518134371 -0.187509393692016607113615123126 +-0.617365437746048018041733485006 0.0787422999739646883865518134371 -0.187509393692016607113615123126 +-0.617331981658935546875 -0.488738393783569369244190738755 0.14154720306396484375 +-0.617331981658935546875 0.488738393783569369244190738755 0.14154720306396484375 +-0.617219829559326194079460492503 -0.534064331650733969958366742503 -0.237308108806610101870759876874 +-0.617219829559326194079460492503 0.534064331650733969958366742503 -0.237308108806610101870759876874 +-0.616976541280746415552016514994 -0.722384753823280267859274772491 0 +-0.616976541280746415552016514994 0.722384753823280267859274772491 0 +-0.61696350574493408203125 -0.194917492568492889404296875 -0.37929300963878631591796875 +-0.61696350574493408203125 0.194917492568492889404296875 -0.37929300963878631591796875 +-0.61646322906017303466796875 -0.372329257428646087646484375 -0.209389507770538330078125 +-0.61646322906017303466796875 0.372329257428646087646484375 -0.209389507770538330078125 +-0.616221091151237465588508257497 -0.378555142879486050677684261245 0.446618053317069996221988503748 +-0.616221091151237465588508257497 0.378555142879486050677684261245 0.446618053317069996221988503748 +-0.616171979904174826891960492503 -0.0657927989959716796875 0.505967998504638694079460492503 +-0.616171979904174826891960492503 0.0657927989959716796875 0.505967998504638694079460492503 +-0.616129589080810613488381477509 -0.25341761112213134765625 0.442903995513916015625 +-0.616129589080810613488381477509 0.25341761112213134765625 0.442903995513916015625 +-0.616100013256072998046875 -0.660880029201507568359375 0.428553998470306396484375 +-0.616100013256072998046875 0.660880029201507568359375 0.428553998470306396484375 +-0.61602497100830078125 -0.5291290283203125 0.5835549831390380859375 +-0.61602497100830078125 0.5291290283203125 0.5835549831390380859375 +-0.615787029266357421875 -0.78571498394012451171875 0.05881600081920623779296875 +-0.615787029266357421875 0.78571498394012451171875 0.05881600081920623779296875 +-0.615688446164131208959702235006 -0.105597701668739316072098688437 0.179657404124736796990902121252 +-0.615688446164131208959702235006 0.105597701668739316072098688437 0.179657404124736796990902121252 +-0.615603029727935791015625 -0.19857899844646453857421875 -0.76262700557708740234375 +-0.615603029727935791015625 0.19857899844646453857421875 -0.76262700557708740234375 +-0.6153580844402313232421875 -0.196221905946731556280582253748 -0.269872394204139665063735264994 +-0.6153580844402313232421875 0.196221905946731556280582253748 -0.269872394204139665063735264994 +-0.6152369976043701171875 -0.06670899689197540283203125 -0.78551399707794189453125 +-0.6152369976043701171875 0.06670899689197540283203125 -0.78551399707794189453125 +-0.615214276313781671667868522491 -0.524260351061821006091179242503 0.499161353707313515393195757497 +-0.615214276313781671667868522491 0.524260351061821006091179242503 0.499161353707313515393195757497 +-0.615059974789619379187399772491 -0.446862000226974476202457253748 0.380132742226123809814453125 +-0.615059974789619379187399772491 0.446862000226974476202457253748 0.380132742226123809814453125 +-0.615030515193939142370993522491 -0.0772680975496768951416015625 0.325218600034713700708266514994 +-0.615030515193939142370993522491 0.0772680975496768951416015625 0.325218600034713700708266514994 +-0.6148402690887451171875 -0.306212246417999267578125 -0.3011730015277862548828125 +-0.6148402690887451171875 0.306212246417999267578125 -0.3011730015277862548828125 +-0.614754021167755126953125 -0.20118500292301177978515625 0.762628018856048583984375 +-0.614754021167755126953125 0.20118500292301177978515625 0.762628018856048583984375 +-0.614612996578216552734375 -0.4088287353515625 0.132700502872467041015625 +-0.614612996578216552734375 0.4088287353515625 0.132700502872467041015625 +-0.61435997486114501953125 -0.785898983478546142578125 -0.070176996290683746337890625 +-0.61435997486114501953125 0.785898983478546142578125 -0.070176996290683746337890625 +-0.614332389831542924341079014994 -0.104317949339747431669600530313 0.578112176060676552502570757497 +-0.614332389831542924341079014994 0.104317949339747431669600530313 0.578112176060676552502570757497 +-0.61432538926601409912109375 -0.173795701563358301333650501874 -0.122064153105020528622404185626 +-0.61432538926601409912109375 0.173795701563358301333650501874 -0.122064153105020528622404185626 +-0.6141922473907470703125 -0.286287009716033935546875 0.3214147388935089111328125 +-0.6141922473907470703125 0.286287009716033935546875 0.3214147388935089111328125 +-0.61373341083526611328125 -0.400014889240264903680355246252 -0.522799175977706975793068977509 +-0.61373341083526611328125 0.400014889240264903680355246252 -0.522799175977706975793068977509 +-0.6137039959430694580078125 -0.204946495592594146728515625 0.3792944848537445068359375 +-0.6137039959430694580078125 0.204946495592594146728515625 0.3792944848537445068359375 +-0.613635417819023087915297764994 -0.575452047586440973425681022491 -0.441369062662124611584602007497 +-0.613635417819023087915297764994 0.575452047586440973425681022491 -0.441369062662124611584602007497 +-0.613606879115104697497429242503 -0.527000123262405417712272992503 -0.498254117369651750024672764994 +-0.613606879115104697497429242503 0.527000123262405417712272992503 -0.498254117369651750024672764994 +-0.613528776168823286596420985006 -0.0528335988521575969367738423443 -0.510676813125610418175881477509 +-0.613528776168823286596420985006 0.0528335988521575969367738423443 -0.510676813125610418175881477509 +-0.613476884365081853722756477509 -0.624401092529296875 0.209211297333240509033203125 +-0.613476884365081853722756477509 0.624401092529296875 0.209211297333240509033203125 +-0.613349103927612326891960492503 -0.582154208421707175524772992503 -0.308057391643524192126335492503 +-0.613349103927612326891960492503 0.582154208421707175524772992503 -0.308057391643524192126335492503 +-0.613282155990600652550881477509 -0.198385857045650482177734375 -0.0838311471045017214676065009371 +-0.613282155990600652550881477509 0.198385857045650482177734375 -0.0838311471045017214676065009371 +-0.613173702359199546130241742503 -0.665588033199310258325454014994 0.288981443643569924084602007497 +-0.613173702359199546130241742503 0.665588033199310258325454014994 0.288981443643569924084602007497 +-0.613172703981399447314970529987 -0.202947506308555597476228626874 0.269873103499412514416633257497 +-0.613172703981399447314970529987 0.202947506308555597476228626874 0.269873103499412514416633257497 +-0.6130487918853759765625 -0.158708000183105490954460492503 -0.488858413696289073602230246252 +-0.6130487918853759765625 0.158708000183105490954460492503 -0.488858413696289073602230246252 +-0.612802410125732444079460492503 -0.405033588409423828125 0.316893601417541526110710492503 +-0.612802410125732444079460492503 0.405033588409423828125 0.316893601417541526110710492503 +-0.612766060233116194311264735006 -0.199975754320621507131860994377 0.0838311471045017214676065009371 +-0.612766060233116194311264735006 0.199975754320621507131860994377 0.0838311471045017214676065009371 +-0.6126840114593505859375 -0.485980796813964888158920985006 -0.168643200397491477282585492503 +-0.6126840114593505859375 0.485980796813964888158920985006 -0.168643200397491477282585492503 +-0.612659990787506103515625 -0.3941330015659332275390625 -0.685060024261474609375 +-0.612659990787506103515625 0.3941330015659332275390625 -0.685060024261474609375 +-0.612522017955780095910256477509 -0.297540906071662891729801003748 0.588461422920227072985710492503 +-0.612522017955780095910256477509 0.297540906071662891729801003748 0.588461422920227072985710492503 +-0.612309744954109169690070757497 -0.148783053457736985647485994377 -0.159500253945589060000642689374 +-0.612309744954109169690070757497 0.148783053457736985647485994377 -0.159500253945589060000642689374 +-0.612233692407608054431022992503 -0.175904949009418498651058371252 0.129333098977804178408845814374 +-0.612233692407608054431022992503 0.175904949009418498651058371252 0.129333098977804178408845814374 +-0.611863213777542158666733485006 0 0.660017716884613081518295985006 +-0.611636576056480363305922764994 -0.126592254638671880551115123126 -0.715803128480911210473891514994 +-0.611636576056480363305922764994 0.126592254638671880551115123126 -0.715803128480911210473891514994 +-0.61130638420581817626953125 -0.571470284461975119860710492503 0.1490840502083301544189453125 +-0.61130638420581817626953125 0.571470284461975119860710492503 0.1490840502083301544189453125 +-0.61115337908267974853515625 -0.1692290492355823516845703125 -0.565998020768165521765524772491 +-0.61115337908267974853515625 0.1692290492355823516845703125 -0.565998020768165521765524772491 +-0.611107477545738242419304242503 -0.32801841199398040771484375 -0.491376510262489296643195757497 +-0.611107477545738242419304242503 0.32801841199398040771484375 -0.491376510262489296643195757497 +-0.610806763172149658203125 -0.40548598766326904296875 -0.1581030003726482391357421875 +-0.610806763172149658203125 0.40548598766326904296875 -0.1581030003726482391357421875 +-0.610793006420135453637954014994 -0.0565810982137918486167826870314 -0.58841337263584136962890625 +-0.610793006420135453637954014994 0.0565810982137918486167826870314 -0.58841337263584136962890625 +-0.610492113232612543249899772491 -0.486243340373039234503238503748 0.336699451506137836798160378748 +-0.610492113232612543249899772491 0.486243340373039234503238503748 0.336699451506137836798160378748 +-0.610472011566162153783920985006 -0.1212368011474609375 0.502619218826294011925881477509 +-0.610472011566162153783920985006 0.1212368011474609375 0.502619218826294011925881477509 +-0.610289418697357088916533029987 -0.340365892648696877209602007497 0.0412013012915849671791157504686 +-0.610289418697357088916533029987 0.340365892648696877209602007497 0.0412013012915849671791157504686 +-0.610270699858665444104133257497 0 -0.223761856555938720703125 +-0.610156822204589888158920985006 -0.306888794898986849712940738755 -0.416567182540893587994190738755 +-0.610156822204589888158920985006 0.306888794898986849712940738755 -0.416567182540893587994190738755 +-0.6101017892360687255859375 -0.339643496274948109014957253748 -0.0491749979555606842041015625 +-0.6101017892360687255859375 0.339643496274948109014957253748 -0.0491749979555606842041015625 +-0.609828275442123479699318977509 -0.0733500011265277862548828125 0.6578216850757598876953125 +-0.609828275442123479699318977509 0.0733500011265277862548828125 0.6578216850757598876953125 +-0.609702765941619873046875 -0.03093600086867809295654296875 0.435666739940643310546875 +-0.609702765941619873046875 0.03093600086867809295654296875 0.435666739940643310546875 +-0.609700015187263466565070757497 -0.0268125010654330260539968122657 0.22371245920658111572265625 +-0.609700015187263466565070757497 0.0268125010654330260539968122657 0.22371245920658111572265625 +-0.609549456834793113024772992503 -0.620820263028144858630241742503 -0.381486736238002777099609375 +-0.609549456834793113024772992503 0.620820263028144858630241742503 -0.381486736238002777099609375 +-0.60948653519153594970703125 -0.304489542543888103143245871252 0.508243906497955255652243522491 +-0.60948653519153594970703125 0.304489542543888103143245871252 0.508243906497955255652243522491 +-0.609406846761703535619858485006 -0.222848606109619151727230246252 0.0382304005324840545654296875 +-0.609406846761703535619858485006 0.222848606109619151727230246252 0.0382304005324840545654296875 +-0.609325486421585016394431022491 -0.303718107938766468389957253748 0.162719199061393732241853626874 +-0.609325486421585016394431022491 0.303718107938766468389957253748 0.162719199061393732241853626874 +-0.609233936667442299572883257497 -0.221930144727230077572599498126 -0.0456150475889444337318501254686 +-0.609233936667442299572883257497 0.221930144727230077572599498126 -0.0456150475889444337318501254686 +-0.6089397966861724853515625 -0.125715097784996038265958873126 0.321540799736976579126235264994 +-0.6089397966861724853515625 0.125715097784996038265958873126 0.321540799736976579126235264994 +-0.608798956871032692639289507497 -0.720718467235565096729033029987 0.1114824973046779632568359375 +-0.608798956871032692639289507497 0.720718467235565096729033029987 0.1114824973046779632568359375 +-0.608535823225974992212172764994 -0.286191304028034221307308371252 0.671027770638465859143195757497 +-0.608535823225974992212172764994 0.286191304028034221307308371252 0.671027770638465859143195757497 +-0.608325576782226651317841970013 -0.519557619094848655016960492503 0 +-0.608325576782226651317841970013 0.519557619094848655016960492503 0 +-0.608261564373970053942741742503 -0.0527052477002143901496644673443 -0.223025390505790704898103626874 +-0.608261564373970053942741742503 0.0527052477002143901496644673443 -0.223025390505790704898103626874 +-0.608161497116088911596420985006 -0.661313706636428855212272992503 0.0529451999813318266441264370314 +-0.608161497116088911596420985006 0.661313706636428855212272992503 0.0529451999813318266441264370314 +-0.607944613695144631115852007497 -0.514844977855682395251335492503 0.41873399913311004638671875 +-0.607944613695144631115852007497 0.514844977855682395251335492503 0.41873399913311004638671875 +-0.607830587029457136694077235006 -0.151093803346157073974609375 0.173817804455757146664396373126 +-0.607830587029457136694077235006 0.151093803346157073974609375 0.173817804455757146664396373126 +-0.607656002044677734375 -0.441484022140502974096420985006 0.275401592254638671875 +-0.607656002044677734375 0.441484022140502974096420985006 0.275401592254638671875 +-0.60745298862457275390625 -0.77183902263641357421875 0.18779100477695465087890625 +-0.60745298862457275390625 0.77183902263641357421875 0.18779100477695465087890625 +-0.607094159722328163830695757497 -0.121829496324062355738782059689 -0.197722847759723679983423494377 +-0.607094159722328163830695757497 0.121829496324062355738782059689 -0.197722847759723679983423494377 +-0.6070439815521240234375 -0.04949099756777286529541015625 -0.43766248226165771484375 +-0.6070439815521240234375 0.04949099756777286529541015625 -0.43766248226165771484375 +-0.60700424015522003173828125 -0.274518750607967376708984375 -0.344507239758968353271484375 +-0.60700424015522003173828125 0.274518750607967376708984375 -0.344507239758968353271484375 +-0.606970810890197776110710492503 -0.661509025096893354955795985006 -0.0631781995296478299239950615629 +-0.606970810890197776110710492503 0.661509025096893354955795985006 -0.0631781995296478299239950615629 +-0.6069532334804534912109375 -0.1473082490265369415283203125 -0.41522102057933807373046875 +-0.6069532334804534912109375 0.1473082490265369415283203125 -0.41522102057933807373046875 +-0.606766307353973299854033029987 -0.0918400004506111089508380018742 -0.336749008297920204846320757497 +-0.606766307353973299854033029987 0.0918400004506111089508380018742 -0.336749008297920204846320757497 +-0.6067635118961334228515625 -0.4408372342586517333984375 0 +-0.6067635118961334228515625 0.4408372342586517333984375 0 +-0.60635600984096527099609375 -0.163009606301784515380859375 0.572939944267272904809829014994 +-0.60635600984096527099609375 0.163009606301784515380859375 0.572939944267272904809829014994 +-0.60635398328304290771484375 -0.08278724737465381622314453125 0.4335682690143585205078125 +-0.60635398328304290771484375 0.08278724737465381622314453125 0.4335682690143585205078125 +-0.60628522932529449462890625 -0.249720793962478621041967130623 -0.687428522109985284949118522491 +-0.60628522932529449462890625 0.249720793962478621041967130623 -0.687428522109985284949118522491 +-0.606149387359619096216079014994 0 -0.731493356823921136999899772491 +-0.606050211191177301550681022491 -0.278141504526138283459602007497 0.212933695316314675061164507497 +-0.606050211191177301550681022491 0.278141504526138283459602007497 0.212933695316314675061164507497 +-0.605815017223358065479033029987 -0.166058894991874678170873380623 -0.308888995647430386615184261245 +-0.605815017223358065479033029987 0.166058894991874678170873380623 -0.308888995647430386615184261245 +-0.605813702940940834729133257497 -0.569169330596923761511618522491 -0.177583698928356154000951505623 +-0.605813702940940834729133257497 0.569169330596923761511618522491 -0.177583698928356154000951505623 +-0.605504882335662908410256477509 -0.0797731984406709754287234659387 0.222485893964767450503572376874 +-0.605504882335662908410256477509 0.0797731984406709754287234659387 0.222485893964767450503572376874 +-0.605289658904075600354133257497 -0.720038238167762689734274772491 -0.132924944907426817453099943123 +-0.605289658904075600354133257497 0.720038238167762689734274772491 -0.132924944907426817453099943123 +-0.605053007602691650390625 -0.7029039859771728515625 0.3739469945430755615234375 +-0.605053007602691650390625 0.7029039859771728515625 0.3739469945430755615234375 +-0.604313117265701360558693977509 -0.347566491365432772564503238755 -0.569213086366653464587272992503 +-0.604313117265701360558693977509 0.347566491365432772564503238755 -0.569213086366653464587272992503 +-0.603737998008728071752670985006 -0.619370985031127974096420985006 -0.248756405711174022332698996252 +-0.603737998008728071752670985006 0.619370985031127974096420985006 -0.248756405711174022332698996252 +-0.603735315799713179174545985006 -0.146211303770542144775390625 0.651249897480011052941506477509 +-0.603735315799713179174545985006 0.146211303770542144775390625 0.651249897480011052941506477509 +-0.6035482585430145263671875 -0.363327004015445709228515625 0.25733850896358489990234375 +-0.6035482585430145263671875 0.363327004015445709228515625 0.25733850896358489990234375 +-0.603262805938720614307158029987 -0.297725397348403919561832253748 -0.193477204442024208752570757497 +-0.603262805938720614307158029987 0.297725397348403919561832253748 -0.193477204442024208752570757497 +-0.603159207105636530066306022491 -0.33335469663143157958984375 0.122775100171565995643696567186 +-0.603159207105636530066306022491 0.33335469663143157958984375 0.122775100171565995643696567186 +-0.602995926141738913806022992503 -0.523293125629424982214743522491 0.29165031015872955322265625 +-0.602995926141738913806022992503 0.523293125629424982214743522491 0.29165031015872955322265625 +-0.602954804897308349609375 0 -0.355590915679931618420539507497 +-0.602940022945404052734375 -0.77257502079010009765625 -0.19897399842739105224609375 +-0.602940022945404052734375 0.77257502079010009765625 -0.19897399842739105224609375 +-0.60253800451755523681640625 -0.437766730785369873046875 0.0883642472326755523681640625 +-0.60253800451755523681640625 0.437766730785369873046875 0.0883642472326755523681640625 +-0.602432823181152432567841970013 -0.517927980422973610608039507497 0.0939447999000549427428552462516 +-0.602432823181152432567841970013 0.517927980422973610608039507497 0.0939447999000549427428552462516 +-0.602236795425415083471420985006 -0.37252080440521240234375 0.37220799922943115234375 +-0.602236795425415083471420985006 0.37252080440521240234375 0.37220799922943115234375 +-0.602144813537597745067841970013 -0.259888792037963889391960492503 -0.458125591278076171875 +-0.602144813537597745067841970013 0.259888792037963889391960492503 -0.458125591278076171875 +-0.602082002162933394018295985006 -0.555904823541641279760483485006 0.37211130559444427490234375 +-0.602082002162933394018295985006 0.555904823541641279760483485006 0.37211130559444427490234375 +-0.6018911898136138916015625 -0.0599436029791831984092631557814 -0.666433775424957297595085492503 +-0.6018911898136138916015625 0.0599436029791831984092631557814 -0.666433775424957297595085492503 +-0.601825943589210488049445757497 -0.437247003614902485235660378748 0.590863910317420915063735264994 +-0.601825943589210488049445757497 0.437247003614902485235660378748 0.590863910317420915063735264994 +-0.601797580718994140625 -0.176090395450592046566740123126 0.496821594238281261102230246252 +-0.601797580718994140625 0.176090395450592046566740123126 0.496821594238281261102230246252 +-0.601764222979545571057258257497 -0.485641878843307450708266514994 -0.551844537258148193359375 +-0.601764222979545571057258257497 0.485641878843307450708266514994 -0.551844537258148193359375 +-0.601615780591964743884147992503 -0.178502404689788812808259876874 -0.645131725072860762182358485006 +-0.601615780591964743884147992503 0.178502404689788812808259876874 -0.645131725072860762182358485006 +-0.601457375288009576941306022491 -0.662183263897895835192741742503 -0.319784246385097503662109375 +-0.601457375288009576941306022491 0.662183263897895835192741742503 -0.319784246385097503662109375 +-0.601041817665100119860710492503 -0.6010400950908660888671875 0 +-0.601041817665100119860710492503 0.6010400950908660888671875 0 +-0.600994813442230157995993522491 -0.27070890367031097412109375 -0.235629808902740461862279630623 +-0.600994813442230157995993522491 0.27070890367031097412109375 -0.235629808902740461862279630623 +-0.60074172914028167724609375 -0.43646250665187835693359375 -0.1054019965231418609619140625 +-0.60074172914028167724609375 0.43646250665187835693359375 -0.1054019965231418609619140625 +-0.6005229949951171875 -0.60682201385498046875 -0.520709991455078125 +-0.6005229949951171875 0.60682201385498046875 -0.520709991455078125 +-0.600522646307945273669304242503 -0.24874199926853179931640625 0 +-0.600522646307945273669304242503 0.24874199926853179931640625 0 +-0.60046632587909698486328125 -0.277037940919399261474609375 -0.534032058715820268091079014994 +-0.60046632587909698486328125 0.277037940919399261474609375 -0.534032058715820268091079014994 +-0.60018150508403778076171875 -0.25433774292469024658203125 0.3709372580051422119140625 +-0.60018150508403778076171875 0.25433774292469024658203125 0.3709372580051422119140625 +-0.6000984013080596923828125 -0.435991492867469798699886496252 0.509699696302413962634147992503 +-0.6000984013080596923828125 0.435991492867469798699886496252 0.509699696302413962634147992503 +-0.600089710950851396020766514994 -0.173125395178794855288728626874 0.316101798415183987689403011245 +-0.600089710950851396020766514994 0.173125395178794855288728626874 0.316101798415183987689403011245 +-0.599999999999999977795539507497 0 0 +-0.599958115816116244189970529987 -0.329639804363250688012954014994 -0.146246097981929779052734375 +-0.599958115816116244189970529987 0.329639804363250688012954014994 -0.146246097981929779052734375 +-0.599910736083984375 -0.134694747626781463623046875 0.42949350178241729736328125 +-0.599910736083984375 0.134694747626781463623046875 0.42949350178241729736328125 +-0.599905586242675759045539507497 -0.5172607898712158203125 -0.1120471954345703125 +-0.599905586242675759045539507497 0.5172607898712158203125 -0.1120471954345703125 +-0.599728012084960959704460492503 -0.475913619995117220806690738755 0.232018399238586442434595369377 +-0.599728012084960959704460492503 0.475913619995117220806690738755 0.232018399238586442434595369377 +-0.599630403518676802221420985006 -0.305372810363769564556690738755 0.432656002044677745477230246252 +-0.599630403518676802221420985006 0.305372810363769564556690738755 0.432656002044677745477230246252 +-0.599239555001258916711037727509 -0.124655053764581691400081808752 0.218799108266830438784822376874 +-0.599239555001258916711037727509 0.124655053764581691400081808752 0.218799108266830438784822376874 +-0.59919202327728271484375 -0.2706219851970672607421875 0.753480017185211181640625 +-0.59919202327728271484375 0.2706219851970672607421875 0.753480017185211181640625 +-0.599155715107917763440070757497 -0.220482608675956731625333873126 0.122064153105020528622404185626 +-0.599155715107917763440070757497 0.220482608675956731625333873126 0.122064153105020528622404185626 +-0.598952236771583601537827235006 -0.0958178013563156100174111884371 -0.233613896369934098684595369377 +-0.598952236771583601537827235006 0.0958178013563156100174111884371 -0.233613896369934098684595369377 +-0.598833215236663773950454014994 -0.250756803154945362432926003748 0.261762896180152859759715511245 +-0.598833215236663773950454014994 0.250756803154945362432926003748 0.261762896180152859759715511245 +-0.598703932762146062707131477509 -0.217547205090522777215511496252 -0.129333098977804178408845814374 +-0.598703932762146062707131477509 0.217547205090522777215511496252 -0.129333098977804178408845814374 +-0.598462200164794899670539507497 -0.0244049996137619025493581403907 -0.0353196009993553133865518134371 +-0.598462200164794899670539507497 0.0244049996137619025493581403907 -0.0353196009993553133865518134371 +-0.598210990428924560546875 -0.656616985797882080078125 -0.4593450129032135009765625 +-0.598210990428924560546875 0.656616985797882080078125 -0.4593450129032135009765625 +-0.598150205612182572778579014994 -0.047074802219867706298828125 0 +-0.598150205612182572778579014994 0.047074802219867706298828125 0 +-0.5980785191059112548828125 -0.3968474864959716796875 0.217517249286174774169921875 +-0.5980785191059112548828125 0.3968474864959716796875 0.217517249286174774169921875 +-0.598003792762756281042868522491 -0.0247794002294540391395649692186 0.0421577990055084228515625 +-0.598003792762756281042868522491 0.0247794002294540391395649692186 0.0421577990055084228515625 +-0.597966188192367575915397992503 -0.192401300370693223440454744377 -0.167087696492671966552734375 +-0.597966188192367575915397992503 0.192401300370693223440454744377 -0.167087696492671966552734375 +-0.597710096836090110095085492503 -0.243772102892398839779630748126 0.0762774981558322906494140625 +-0.597710096836090110095085492503 0.243772102892398839779630748126 0.0762774981558322906494140625 +-0.597194015979766845703125 -0.4338819980621337890625 0.67461502552032470703125 +-0.597194015979766845703125 0.4338819980621337890625 0.67461502552032470703125 +-0.596856665611267156457131477509 -0.195815742015838623046875 0.167087696492671966552734375 +-0.596856665611267156457131477509 0.195815742015838623046875 0.167087696492671966552734375 +-0.596849399805068903113181022491 -0.365747189521789528576789507497 0 +-0.596849399805068903113181022491 0.365747189521789528576789507497 0 +-0.596544313430786177221420985006 -0.655161309242248579565170985006 0.157790695130825053826839621252 +-0.596544313430786177221420985006 0.655161309242248579565170985006 0.157790695130825053826839621252 +-0.596524482965469338147102007497 -0.241633604466915147268579744377 -0.0909486465156078421889773721887 +-0.596524482965469338147102007497 0.241633604466915147268579744377 -0.0909486465156078421889773721887 +-0.596246308088302590100227007497 -0.0264160001650452606891672502343 -0.2574740946292877197265625 +-0.596246308088302590100227007497 0.0264160001650452606891672502343 -0.2574740946292877197265625 +-0.59618484973907470703125 -0.701939773559570268091079014994 0.233117652684450143985017689374 +-0.59618484973907470703125 0.701939773559570268091079014994 0.233117652684450143985017689374 +-0.596085011959075927734375 -0.3323400020599365234375 -0.730912983417510986328125 +-0.596085011959075927734375 0.3323400020599365234375 -0.730912983417510986328125 +-0.595940780639648504113381477509 -0.106055200099945068359375 -0.5230743885040283203125 +-0.595940780639648504113381477509 0.106055200099945068359375 -0.5230743885040283203125 +-0.59591849148273468017578125 -0.2418922483921051025390625 -0.38583599030971527099609375 +-0.59591849148273468017578125 0.2418922483921051025390625 -0.38583599030971527099609375 +-0.595821011066436700964743522491 0 -0.0706913977861404335678585653113 +-0.595646810531616166528579014994 -0.242305696010589571853799384371 -0.276574191451072648462172764994 +-0.595646810531616166528579014994 0.242305696010589571853799384371 -0.276574191451072648462172764994 +-0.59562899172306060791015625 -0.334019243717193603515625 0.310092754662036895751953125 +-0.59562899172306060791015625 0.334019243717193603515625 0.310092754662036895751953125 +-0.5954535901546478271484375 0 0.368015182018279984887954014994 +-0.594683396816253595495993522491 -0.0714461982250213650802450615629 -0.0353147998452186598350444057814 +-0.594683396816253595495993522491 0.0714461982250213650802450615629 -0.0353147998452186598350444057814 +-0.59465897083282470703125 -0.59488999843597412109375 0.540821015834808349609375 +-0.59465897083282470703125 0.59488999843597412109375 0.540821015834808349609375 +-0.594257104396820001745993522491 -0.59944975376129150390625 0.10009514726698398590087890625 +-0.594257104396820001745993522491 0.59944975376129150390625 0.10009514726698398590087890625 +-0.594189012050628684313835492503 -0.07185240089893341064453125 0.042149998247623443603515625 +-0.594189012050628684313835492503 0.07185240089893341064453125 0.042149998247623443603515625 +-0.594051128625869728772102007497 -0.0392359508201479897926411410936 0.74031408131122589111328125 +-0.594051128625869728772102007497 0.0392359508201479897926411410936 0.74031408131122589111328125 +-0.594045603275299094470085492503 0 0.0843215972185134832184161268742 +-0.594028407335281283252470529987 -0.0483980014920234666297993442186 0.367134612798690751489516514994 +-0.594028407335281283252470529987 0.0483980014920234666297993442186 0.367134612798690751489516514994 +-0.593974176049232416296774772491 -0.431546057760715473516910378748 -0.602879497408866815710837272491 +-0.593974176049232416296774772491 0.431546057760715473516910378748 -0.602879497408866815710837272491 +-0.593903520703315757067741742503 -0.222314088046550756283536998126 0.565999692678451515881477007497 +-0.593903520703315757067741742503 0.222314088046550756283536998126 0.565999692678451515881477007497 +-0.593900316953658968799345529987 -0.361282593011856056897102007497 0.0822016999125480540833166287484 +-0.593900316953658968799345529987 0.361282593011856056897102007497 0.0822016999125480540833166287484 +-0.593895885348320051733139735006 -0.165865044295787827932642244377 -0.205612553656101232357755748126 +-0.593895885348320051733139735006 0.165865044295787827932642244377 -0.205612553656101232357755748126 +-0.593856596946716330798210492503 -0.0486846014857292147537393134371 -0.0704580008983611977280148153113 +-0.593856596946716330798210492503 0.0486846014857292147537393134371 -0.0704580008983611977280148153113 +-0.593801599740982011255141514994 -0.0460718989372253390213174384371 -0.367800307273864701684829014994 +-0.593801599740982011255141514994 0.0460718989372253390213174384371 -0.367800307273864701684829014994 +-0.593599501252174421850327235006 0 0.264839898049831379278629128748 +-0.593335801362991355212272992503 -0.357609593868255637438835492503 0.574515008926391623766960492503 +-0.593335801362991355212272992503 0.357609593868255637438835492503 0.574515008926391623766960492503 +-0.59299649298191070556640625 -0.0987412445247173309326171875 -0.4484482705593109130859375 +-0.59299649298191070556640625 0.0987412445247173309326171875 -0.4484482705593109130859375 +-0.5929505825042724609375 -0.594792884588241643761818977509 0.323467192053794871942073996252 +-0.5929505825042724609375 0.594792884588241643761818977509 0.323467192053794871942073996252 +-0.592939648032188348913962272491 -0.58485515415668487548828125 0.457019342482089974133430132497 +-0.592939648032188348913962272491 0.58485515415668487548828125 0.457019342482089974133430132497 +-0.59271800518035888671875 -0.137209801375865914074836382497 -0.34620670974254608154296875 +-0.59271800518035888671875 0.137209801375865914074836382497 -0.34620670974254608154296875 +-0.592661303281784013208266514994 -0.359361112117767333984375 -0.0980412960052490234375 +-0.592661303281784013208266514994 0.359361112117767333984375 -0.0980412960052490234375 +-0.592614072561263971472556022491 -0.557837983965873696057258257497 0.245206288993358612060546875 +-0.592614072561263971472556022491 0.557837983965873696057258257497 0.245206288993358612060546875 +-0.592613410949706986841079014994 -0.0938592016696929848373898153113 0 +-0.592613410949706986841079014994 0.0938592016696929848373898153113 0 +-0.592330151796340964587272992503 -0.4303481876850128173828125 0.431793224811553966180355246252 +-0.592330151796340964587272992503 0.4303481876850128173828125 0.431793224811553966180355246252 +-0.5921599864959716796875 -0.702307999134063720703125 -0.3951070010662078857421875 +-0.5921599864959716796875 0.702307999134063720703125 -0.3951070010662078857421875 +-0.592029011249542214123664507497 -0.0493932008743286146690287807814 0.084035396575927734375 +-0.592029011249542214123664507497 0.0493932008743286146690287807814 0.084035396575927734375 +-0.591638392210006691662727007497 -0.209205906093120591604517244377 0.645133495330810546875 +-0.591638392210006691662727007497 0.209205906093120591604517244377 0.645133495330810546875 +-0.591588389873504705285256477509 -0.05345664918422698974609375 0.263942241668701171875 +-0.591588389873504705285256477509 0.05345664918422698974609375 0.263942241668701171875 +-0.591346713900566034460837272491 -0.59879948198795318603515625 -0.1193663515150547027587890625 +-0.591346713900566034460837272491 0.59879948198795318603515625 -0.1193663515150547027587890625 +-0.591165894269943259509147992503 -0.292975196242332480700554242503 -0.6121179163455963134765625 +-0.591165894269943259509147992503 0.292975196242332480700554242503 -0.6121179163455963134765625 +-0.591055202484130903783920985006 -0.429424810409545942846420985006 -0.325956797599792513775440738755 +-0.591055202484130903783920985006 0.429424810409545942846420985006 -0.325956797599792513775440738755 +-0.59100838005542755126953125 -0.11287319660186767578125 -0.600390684604644730981704014994 +-0.59100838005542755126953125 0.11287319660186767578125 -0.600390684604644730981704014994 +-0.590960788726806685033920985006 -0.3885672092437744140625 -0.37387359142303466796875 +-0.590960788726806685033920985006 0.3885672092437744140625 -0.37387359142303466796875 +-0.5905392169952392578125 0 -0.539688014984130881579460492503 +-0.590457737445831298828125 -0.1854907460510730743408203125 0.4236179888248443603515625 +-0.590457737445831298828125 0.1854907460510730743408203125 0.4236179888248443603515625 +-0.590405380725860573498664507497 -0.652768188714981101306022992503 -0.187921799719333648681640625 +-0.590405380725860573498664507497 0.652768188714981101306022992503 -0.187921799719333648681640625 +-0.590369606018066428454460492503 -0.211264801025390636102230246252 -0.496820783615112337994190738755 +-0.590369606018066428454460492503 0.211264801025390636102230246252 -0.496820783615112337994190738755 +-0.59023381769657135009765625 -0.170005549490451823846370871252 0.212654659152030939273103626874 +-0.59023381769657135009765625 0.170005549490451823846370871252 0.212654659152030939273103626874 +-0.590029191970825150903579014994 -0.0244061999022960642025115163278 -0.106159803271293637361161188437 +-0.590029191970825150903579014994 0.0244061999022960642025115163278 -0.106159803271293637361161188437 +-0.589969900250434942101662727509 -0.270135448873043082507194867503 0.0382381999865174307395854214064 +-0.589969900250434942101662727509 0.270135448873043082507194867503 0.0382381999865174307395854214064 +-0.589837941527366682592514735006 -0.269274850189685832635433371252 -0.0456286996603012112716513115629 +-0.589837941527366682592514735006 0.269274850189685832635433371252 -0.0456286996603012112716513115629 +-0.589760494232177689966079014994 -0.0965650022029876653473223768742 0.364496284723281827044871761245 +-0.589760494232177689966079014994 0.0965650022029876653473223768742 0.364496284723281827044871761245 +-0.589705827832221918249899772491 -0.116658103093504897374010909061 0.735620144009590082312399772491 +-0.589705827832221918249899772491 0.116658103093504897374010909061 0.735620144009590082312399772491 +-0.58969648182392120361328125 -0.42843599617481231689453125 0.1766362488269805908203125 +-0.58969648182392120361328125 0.42843599617481231689453125 0.1766362488269805908203125 +-0.589558276534080438757712272491 -0.359004305303096737933543636245 0.496020925045013438836605246252 +-0.589558276534080438757712272491 0.359004305303096737933543636245 0.496020925045013438836605246252 +-0.589446488022804193640524772491 -0.350087338685989346576121761245 0.65764130651950836181640625 +-0.589446488022804193640524772491 0.350087338685989346576121761245 0.65764130651950836181640625 +-0.589253616333007879113381477509 -0.231940007209777837582365123126 0.488859987258911166119190738755 +-0.589253616333007879113381477509 0.231940007209777837582365123126 0.488859987258911166119190738755 +-0.5892159938812255859375 -0.13307000696659088134765625 -0.7969419956207275390625 +-0.5892159938812255859375 0.13307000696659088134765625 -0.7969419956207275390625 +-0.58919799327850341796875 -0.743493020534515380859375 0.31632900238037109375 +-0.58919799327850341796875 0.743493020534515380859375 0.31632900238037109375 +-0.5891849994659423828125 -0.56450998783111572265625 -0.57809197902679443359375 +-0.5891849994659423828125 0.56450998783111572265625 -0.57809197902679443359375 +-0.589076805114746138158920985006 -0.5076615810394287109375 0.187799203395843522512720369377 +-0.589076805114746138158920985006 0.5076615810394287109375 0.187799203395843522512720369377 +-0.588902157545089677270766514994 -0.700825461745262168200554242503 -0.254042340815067269055305132497 +-0.588902157545089677270766514994 0.700825461745262168200554242503 -0.254042340815067269055305132497 +-0.58849275112152099609375 -0.35132025182247161865234375 -0.30454950034618377685546875 +-0.58849275112152099609375 0.35132025182247161865234375 -0.30454950034618377685546875 +-0.588078582286834739001335492503 -0.0957666009664535494705361884371 -0.0706547990441322298904580634371 +-0.588078582286834739001335492503 0.0957666009664535494705361884371 -0.0706547990441322298904580634371 +-0.587786018848419189453125 -0.809017002582550048828125 0 +-0.587786018848419189453125 0.809017002582550048828125 0 +-0.587779408693313576428352007497 -0.0692204523831605883499307196871 -0.268745097517967213018863503748 +-0.587779408693313576428352007497 0.0692204523831605883499307196871 -0.268745097517967213018863503748 +-0.587724900245666481701789507497 -0.322182691097259499279914507497 0.20193459093570709228515625 +-0.587724900245666481701789507497 0.322182691097259499279914507497 0.20193459093570709228515625 +-0.587722814083099343029914507497 -0.221741098165512073858707253748 0.308889704942703235968082253748 +-0.587722814083099343029914507497 0.221741098165512073858707253748 0.308889704942703235968082253748 +-0.587689590454101629113381477509 -0.467771196365356467516960492503 -0.275339198112487804070980246252 +-0.587689590454101629113381477509 0.467771196365356467516960492503 -0.275339198112487804070980246252 +-0.5873287618160247802734375 -0.38847599923610687255859375 -0.258130498230457305908203125 +-0.5873287618160247802734375 0.38847599923610687255859375 -0.258130498230457305908203125 +-0.58728826045989990234375 0 -0.466468513011932373046875 +-0.58727775514125823974609375 -0.46438801288604736328125 0.04414950124919414520263671875 +-0.58727775514125823974609375 0.46438801288604736328125 0.04414950124919414520263671875 +-0.587244707345962457800681022491 -0.212659302353858936651676003748 -0.316101109981536843029914507497 +-0.587244707345962457800681022491 0.212659302353858936651676003748 -0.316101109981536843029914507497 +-0.587149214744567826684829014994 -0.118363201618194580078125 -0.0352967999875545487831196567186 +-0.587149214744567826684829014994 0.118363201618194580078125 -0.0352967999875545487831196567186 +-0.58708323538303375244140625 -0.0985055498778820010086221259371 0.261016601324081443102897992503 +-0.58708323538303375244140625 0.0985055498778820010086221259371 0.261016601324081443102897992503 +-0.586725753545761175011818977509 -0.138463646918535243646175558752 -0.243064248561859125308259876874 +-0.586725753545761175011818977509 0.138463646918535243646175558752 -0.243064248561859125308259876874 +-0.586721241474151611328125 -0.19699425995349884033203125 -0.42361722886562347412109375 +-0.586721241474151611328125 0.19699425995349884033203125 -0.42361722886562347412109375 +-0.586678487062454179223891514994 -0.4695833623409271240234375 -0.397240690886974334716796875 +-0.586678487062454179223891514994 0.4695833623409271240234375 -0.397240690886974334716796875 +-0.586583983898162797387954014994 -0.118934395909309376104801003748 0.0421187996864318819900674384371 +-0.586583983898162797387954014994 0.118934395909309376104801003748 0.0421187996864318819900674384371 +-0.58653898537158966064453125 -0.46442998945713043212890625 -0.052697248756885528564453125 +-0.58653898537158966064453125 0.46442998945713043212890625 -0.052697248756885528564453125 +-0.586369943618774369653579014994 -0.22452665865421295166015625 -0.572938272356987021716179242503 +-0.586369943618774369653579014994 0.22452665865421295166015625 -0.572938272356987021716179242503 +-0.586299419403076171875 0 -0.61542890965938568115234375 +-0.586206614971160888671875 -0.0727146014571189852615518134371 -0.105235201120376584138504938437 +-0.586206614971160888671875 0.0727146014571189852615518134371 -0.105235201120376584138504938437 +-0.586147212982177756579460492503 -0.0966024041175842229645098768742 0.08425860106945037841796875 +-0.586147212982177756579460492503 0.0966024041175842229645098768742 0.08425860106945037841796875 +-0.585993611812591574938835492503 -0.0247806005179882042621652971093 0.1264818012714385986328125 +-0.585993611812591574938835492503 0.0247806005179882042621652971093 0.1264818012714385986328125 +-0.585485601425170920641960492503 -0.543129587173461936266960492503 0.0470872014760971083213725307814 +-0.585485601425170920641960492503 0.543129587173461936266960492503 0.0470872014760971083213725307814 +-0.585295012593269325940070757497 -0.627836027741432212145866742503 0.407126298546791054455695757497 +-0.585295012593269325940070757497 0.627836027741432212145866742503 0.407126298546791054455695757497 +-0.585223722457885675574118522491 -0.502672576904296897204460492503 0.554377233982086159436164507497 +-0.585223722457885675574118522491 0.502672576904296897204460492503 0.554377233982086159436164507497 +-0.584997677803039572985710492503 -0.7464292347431182861328125 0.0558752007782459259033203125 +-0.584997677803039572985710492503 0.7464292347431182861328125 0.0558752007782459259033203125 +-0.584960675239562966076789507497 -0.424997441470623016357421875 -0.446875578165054299084602007497 +-0.584960675239562966076789507497 0.424997441470623016357421875 -0.446875578165054299084602007497 +-0.58482287824153900146484375 -0.188650048524141300543277566248 -0.724495655298233010022102007497 +-0.58482287824153900146484375 0.188650048524141300543277566248 -0.724495655298233010022102007497 +-0.58477874100208282470703125 -0.511274167895317099841179242503 -0.345156100392341624871761496252 +-0.58477874100208282470703125 0.511274167895317099841179242503 -0.345156100392341624871761496252 +-0.5846335887908935546875 -0.543180799484252907483039507497 -0.0561999976634979248046875 +-0.5846335887908935546875 0.543180799484252907483039507497 -0.0561999976634979248046875 +-0.584504091739654563220085492503 -0.684364503622055031506477007497 0 +-0.584504091739654563220085492503 0.684364503622055031506477007497 0 +-0.584475147724151544714743522491 -0.0633735470473766326904296875 -0.746238297224044777600227007497 +-0.584475147724151544714743522491 0.0633735470473766326904296875 -0.746238297224044777600227007497 +-0.584016320109367326196547764994 -0.191125752776861168591437944997 0.72449661791324615478515625 +-0.584016320109367326196547764994 0.191125752776861168591437944997 0.72449661791324615478515625 +-0.58391797542572021484375 -0.801503002643585205078125 0.128971993923187255859375 +-0.58391797542572021484375 0.801503002643585205078125 0.128971993923187255859375 +-0.58378650248050689697265625 -0.302511759102344512939453125 0.360804744064807891845703125 +-0.58378650248050689697265625 0.302511759102344512939453125 0.360804744064807891845703125 +-0.5836419761180877685546875 -0.746604034304618746631376779987 -0.0666681464761495617965536553129 +-0.5836419761180877685546875 0.746604034304618746631376779987 -0.0666681464761495617965536553129 +-0.583422589302062921667868522491 -0.140065196156501758917301003748 0 +-0.583422589302062921667868522491 0.140065196156501758917301003748 0 +-0.5832870006561279296875 0 -0.81226599216461181640625 +-0.583151400089263916015625 -0.2635288536548614501953125 0.113959946483373639192215875937 +-0.583151400089263916015625 0.2635288536548614501953125 0.113959946483373639192215875937 +-0.58312261104583740234375 0 -0.1413078010082244873046875 +-0.582834577560424782483039507497 -0.496667701005935657843082253748 0.472889703512191783563167746252 +-0.582834577560424782483039507497 0.496667701005935657843082253748 0.472889703512191783563167746252 +-0.582823169231414861535256477509 -0.239533442258834855520532869377 0.159500902891159063168302623126 +-0.582823169231414861535256477509 0.239533442258834855520532869377 0.159500902891159063168302623126 +-0.582669502496719338147102007497 -0.14426930248737335205078125 0.360114300251007046771434261245 +-0.582669502496719338147102007497 0.14426930248737335205078125 0.360114300251007046771434261245 +-0.5824910104274749755859375 -0.295650604367256153448551003748 0.251585593819618202893195757497 +-0.5824910104274749755859375 0.295650604367256153448551003748 0.251585593819618202893195757497 +-0.58247248828411102294921875 -0.4231890141963958740234375 -0.2100884914398193359375 +-0.58247248828411102294921875 0.4231890141963958740234375 -0.2100884914398193359375 +-0.582115209102630593029914507497 -0.0736794009804725563705929403113 0.125353199243545515573217130623 +-0.582115209102630593029914507497 0.0736794009804725563705929403113 0.125353199243545515573217130623 +-0.582026991248130731726462272491 -0.374426351487636532855418636245 -0.65080702304840087890625 +-0.582026991248130731726462272491 0.374426351487636532855418636245 -0.65080702304840087890625 +-0.581854391098022505346420985006 -0.0330000013113021864463725307814 0.5480480194091796875 +-0.581854391098022505346420985006 0.0330000013113021864463725307814 0.5480480194091796875 +-0.581834971904754638671875 -0.803016006946563720703125 -0.128971993923187255859375 +-0.581834971904754638671875 0.803016006946563720703125 -0.128971993923187255859375 +-0.58177350461483001708984375 -0.3203490078449249267578125 -0.34844850003719329833984375 +-0.58177350461483001708984375 0.3203490078449249267578125 -0.34844850003719329833984375 +-0.581746387481689497533920985006 -0.3542912006378173828125 -0.419582414627075239721420985006 +-0.581746387481689497533920985006 0.3542912006378173828125 -0.419582414627075239721420985006 +-0.581746208667755060339743522491 -0.352943491935729936059829014994 0.164324302971363050973607755623 +-0.581746208667755060339743522491 0.352943491935729936059829014994 0.164324302971363050973607755623 +-0.5816249847412109375 -0.504203021526336669921875 0.638350009918212890625 +-0.5816249847412109375 0.504203021526336669921875 0.638350009918212890625 +-0.581597799062728793018095529987 -0.387358289957046464380141514994 0.0412062011659145299713458143742 +-0.581597799062728793018095529987 0.387358289957046464380141514994 0.0412062011659145299713458143742 +-0.581530582904815629419204014994 -0.0922236040234565707107705634371 -0.378571915626525867804019753748 +-0.581530582904815629419204014994 0.0922236040234565707107705634371 -0.378571915626525867804019753748 +-0.581421393156051569128806022491 -0.386691218614578224865852007497 -0.04918409883975982666015625 +-0.581421393156051569128806022491 0.386691218614578224865852007497 -0.04918409883975982666015625 +-0.581376233696937583239616742503 0 -0.290689744055271148681640625 +-0.581338816881179831774772992503 -0.545165097713470436779914507497 -0.418139111995697032586605246252 +-0.581338816881179831774772992503 0.545165097713470436779914507497 -0.418139111995697032586605246252 +-0.581311780214309736791733485006 -0.499263274669647205694644753748 -0.472030216455459616931022992503 +-0.581311780214309736791733485006 0.499263274669647205694644753748 -0.472030216455459616931022992503 +-0.581226611137390158923210492503 -0.0483432009816169711013955634371 -0.140848195552825933285490123126 +-0.581226611137390158923210492503 0.0483432009816169711013955634371 -0.140848195552825933285490123126 +-0.580912780761718816613381477509 -0.502648782730102605675881477509 -0.223348808288574229852230246252 +-0.580912780761718816613381477509 0.502648782730102605675881477509 -0.223348808288574229852230246252 +-0.580901402235031172338608485006 -0.630557084083557151110710492503 0.273771893978118907586605246252 +-0.580901402235031172338608485006 0.630557084083557151110710492503 0.273771893978118907586605246252 +-0.580893993377685546875 -0.745337009429931640625 -0.3271619975566864013671875 +-0.580893993377685546875 0.745337009429931640625 -0.3271619975566864013671875 +-0.580557245016098066869858485006 -0.235032859444618241751001619377 -0.173817804455757146664396373126 +-0.580557245016098066869858485006 0.235032859444618241751001619377 -0.173817804455757146664396373126 +-0.580192029476165771484375 -0.33920300006866455078125 0.740485012531280517578125 +-0.580192029476165771484375 0.33920300006866455078125 0.740485012531280517578125 +-0.580136689543724104467514735006 -0.259847259521484408306690738755 -0.1357212997972965240478515625 +-0.580136689543724104467514735006 0.259847259521484408306690738755 -0.1357212997972965240478515625 +-0.579972791671752974096420985006 -0.356287193298339854852230246252 0.420346403121948264391960492503 +-0.579972791671752974096420985006 0.356287193298339854852230246252 0.420346403121948264391960492503 +-0.579718768596649169921875 -0.143074095249176025390625 0.256819550693035136834652121252 +-0.579718768596649169921875 0.143074095249176025390625 0.256819550693035136834652121252 +-0.579637110233306884765625 -0.377791839838027942999332253748 -0.493754777312278736456363503748 +-0.579637110233306884765625 0.377791839838027942999332253748 -0.493754777312278736456363503748 +-0.5796247422695159912109375 0 0.47595749795436859130859375 +-0.579445177316665671618522992503 -0.119929504394531247224442438437 -0.678129279613494895251335492503 +-0.579445177316665671618522992503 0.119929504394531247224442438437 -0.678129279613494895251335492503 +-0.579394835233688287878806022491 -0.5897121429443359375 0.1975884474813938140869140625 +-0.579394835233688287878806022491 0.5897121429443359375 0.1975884474813938140869140625 +-0.579274153709411598889289507497 -0.549812307953834511486945757497 -0.290943092107772804943977007497 +-0.579274153709411598889289507497 0.549812307953834511486945757497 -0.290943092107772804943977007497 +-0.579155212640762306897102007497 -0.295091551542282115594417746252 0 +-0.579155212640762306897102007497 0.295091551542282115594417746252 0 +-0.578879976272583030016960492503 -0.420576000213623069079460492503 0.35777199268341064453125 +-0.578879976272583030016960492503 0.420576000213623069079460492503 0.35777199268341064453125 +-0.5787487328052520751953125 -0.45819224417209625244140625 0.132700502872467041015625 +-0.5787487328052520751953125 0.45819224417209625244140625 0.132700502872467041015625 +-0.578625583648681662829460492503 -0.142249801754951471499666126874 -0.07040999829769134521484375 +-0.578625583648681662829460492503 0.142249801754951471499666126874 -0.07040999829769134521484375 +-0.578493016958236627722556022491 -0.281010855734348308221370871252 0.555769121646881081311164507497 +-0.578493016958236627722556022491 0.281010855734348308221370871252 0.555769121646881081311164507497 +-0.578473198413848810339743522491 -0.119596803188323969058259876874 -0.105193197727203369140625 +-0.578473198413848810339743522491 0.119596803188323969058259876874 -0.105193197727203369140625 +-0.578195190429687477795539507497 -0.0981815993785858237563601846887 0.544105577468872114721420985006 +-0.578195190429687477795539507497 0.0981815993785858237563601846887 0.544105577468872114721420985006 +-0.578043186664581210010283029987 -0.31377919018268585205078125 -0.239600193500518782174779630623 +-0.578043186664581210010283029987 0.31377919018268585205078125 -0.239600193500518782174779630623 +-0.577966344356536931847756477509 -0.214891293644905084780916126874 0.205613192915916453973323996252 +-0.577966344356536931847756477509 0.214891293644905084780916126874 0.205613192915916453973323996252 +-0.577870813012123063501235264994 0 0.623350065946578935083266514994 +-0.57766123116016387939453125 -0.06168074905872344970703125 0.4743449985980987548828125 +-0.57766123116016387939453125 0.06168074905872344970703125 0.4743449985980987548828125 +-0.5776214897632598876953125 -0.237579010426998138427734375 0.4152224957942962646484375 +-0.5776214897632598876953125 0.237579010426998138427734375 0.4152224957942962646484375 +-0.577467906475067183080795985006 -0.588145512342453047338608485006 -0.36140848696231842041015625 +-0.577467906475067183080795985006 0.588145512342453047338608485006 -0.36140848696231842041015625 +-0.577437230944633506091179242503 -0.209389707446098333187833873126 -0.212654659152030939273103626874 +-0.577437230944633506091179242503 0.209389707446098333187833873126 -0.212654659152030939273103626874 +-0.5770803391933441162109375 -0.7332470715045928955078125 0.178401454538106907232730691248 +-0.5770803391933441162109375 0.7332470715045928955078125 0.178401454538106907232730691248 +-0.576926004886627152856704014994 0 -0.396429592370986905169871761245 +-0.576756906509399480675881477509 -0.682785916328430220190170985006 0.105614997446537017822265625 +-0.576756906509399480675881477509 0.682785916328430220190170985006 0.105614997446537017822265625 +-0.576580202579498268811164507497 -0.143204399943351740054353626874 0.0839525967836379921616085653113 +-0.576580202579498268811164507497 0.143204399943351740054353626874 0.0839525967836379921616085653113 +-0.576507622003555320056022992503 -0.271128603816032431872429242503 0.635710519552230901574318977509 +-0.576507622003555320056022992503 0.271128603816032431872429242503 0.635710519552230901574318977509 +-0.576479813456535317151008257497 -0.112144497036933896150223688437 -0.278558142483234405517578125 +-0.576479813456535317151008257497 0.112144497036933896150223688437 -0.278558142483234405517578125 +-0.576395934820175148693977007497 -0.290532447397708892822265625 0.0765426989644765881637411553129 +-0.576395934820175148693977007497 0.290532447397708892822265625 0.0765426989644765881637411553129 +-0.576008391380310014184829014994 -0.164221805334091169870092130623 -0.03528960049152374267578125 +-0.576008391380310014184829014994 0.164221805334091169870092130623 -0.03528960049152374267578125 +-0.575979602336883500512954014994 0 0.168070203065872197933927623126 +-0.575948926806449823523337272491 -0.06927500106394290924072265625 0.62127603590488433837890625 +-0.575948926806449823523337272491 0.06927500106394290924072265625 0.62127603590488433837890625 +-0.5758326053619384765625 -0.181922993063926674572883257497 -0.354006808996200517114516514994 +-0.5758326053619384765625 0.181922993063926674572883257497 -0.354006808996200517114516514994 +-0.575551807880401611328125 -0.0963720023632049505035723768742 -0.139473000168800348452791126874 +-0.575551807880401611328125 0.0963720023632049505035723768742 -0.139473000168800348452791126874 +-0.57538139820098876953125 -0.164814001321792608090177623126 0.0421061977744102491905131557814 +-0.57538139820098876953125 0.164814001321792608090177623126 0.0421061977744102491905131557814 +-0.575365680456161432410056022491 -0.347507306933402981830028011245 -0.195430207252502430304019753748 +-0.575365680456161432410056022491 0.347507306933402981830028011245 -0.195430207252502430304019753748 +-0.5753471851348876953125 -0.537854385375976629113381477509 0.140314400196075439453125 +-0.5753471851348876953125 0.537854385375976629113381477509 0.140314400196075439453125 +-0.5752350389957427978515625 -0.288570094108581531866519753748 -0.0912801511585712432861328125 +-0.5752350389957427978515625 0.288570094108581531866519753748 -0.0912801511585712432861328125 +-0.5752031803131103515625 -0.159274399280548095703125 -0.532704019546508811266960492503 +-0.5752031803131103515625 0.159274399280548095703125 -0.532704019546508811266960492503 +-0.57518322765827178955078125 -0.04953149892389774322509765625 -0.47875951230525970458984375 +-0.57518322765827178955078125 0.04953149892389774322509765625 -0.47875951230525970458984375 +-0.575159978866577215050881477509 -0.3087232112884521484375 -0.462472009658813520971420985006 +-0.575159978866577215050881477509 0.3087232112884521484375 -0.462472009658813520971420985006 +-0.574864006042480446545539507497 -0.0532527983188629192023988423443 -0.5538008213043212890625 +-0.574864006042480446545539507497 0.0532527983188629192023988423443 -0.5538008213043212890625 +-0.57480035722255706787109375 -0.667758786678314231188835492503 0.355249644815921750140574886245 +-0.57480035722255706787109375 0.667758786678314231188835492503 0.355249644815921750140574886245 +-0.574775993824005126953125 -0.519254982471466064453125 -0.632461011409759521484375 +-0.574775993824005126953125 0.519254982471466064453125 -0.632461011409759521484375 +-0.57473324239253997802734375 -0.148788750171661376953125 -0.45830476284027099609375 +-0.57473324239253997802734375 0.148788750171661376953125 -0.45830476284027099609375 +-0.574580812454223655016960492503 -0.457640790939331076891960492503 0.316893601417541526110710492503 +-0.574580812454223655016960492503 0.457640790939331076891960492503 0.316893601417541526110710492503 +-0.5745022594928741455078125 -0.3797189891338348388671875 0.297087751328945159912109375 +-0.5745022594928741455078125 0.3797189891338348388671875 0.297087751328945159912109375 +-0.57439126074314117431640625 -0.455606997013092041015625 -0.1581030003726482391357421875 +-0.57439126074314117431640625 0.455606997013092041015625 -0.1581030003726482391357421875 +-0.5743754804134368896484375 -0.236577594280242914370759876874 -0.651248073577880837170539507497 +-0.5743754804134368896484375 0.236577594280242914370759876874 -0.651248073577880837170539507497 +-0.574374747276306107934829014994 -0.624574056267738320080695757497 0.0500037999823689446876606723436 +-0.574374747276306107934829014994 0.624574056267738320080695757497 0.0500037999823689446876606723436 +-0.5743730068206787109375 -0.2655160129070281982421875 -0.774336993694305419921875 +-0.5743730068206787109375 0.2655160129070281982421875 -0.774336993694305419921875 +-0.574246788024902365954460492503 0 -0.692993706464767433850227007497 +-0.574224007129669145044204014994 -0.120711600780487052220202315311 0.12528119981288909912109375 +-0.574224007129669145044204014994 0.120711600780487052220202315311 0.12528119981288909912109375 +-0.574169912934303305895866742503 -0.486242479085922219006477007497 0.395470999181270599365234375 +-0.574169912934303305895866742503 0.486242479085922219006477007497 0.395470999181270599365234375 +-0.574063217639923073498664507497 -0.048900000751018524169921875 0.167510998249053938424779630623 +-0.574063217639923073498664507497 0.048900000751018524169921875 0.167510998249053938424779630623 +-0.574024087190628029553352007497 -0.0268112007528543486167826870314 0.303771653771400473864616742503 +-0.574024087190628029553352007497 0.0268112007528543486167826870314 0.303771653771400473864616742503 +-0.573850917816162042761618522491 -0.285798096656799283099559261245 -0.281094801425933793481704014994 +-0.573850917816162042761618522491 0.285798096656799283099559261245 -0.281094801425933793481704014994 +-0.573774504661560103002670985006 -0.04274204932153224945068359375 -0.302416403591632854119808371252 +-0.573774504661560103002670985006 0.04274204932153224945068359375 -0.302416403591632854119808371252 +-0.573694217205047540808493522491 -0.0243852004408836343929412038278 -0.174012601375579833984375 +-0.573694217205047540808493522491 0.0243852004408836343929412038278 -0.174012601375579833984375 +-0.57363879680633544921875 -0.381573486328124988897769753748 0.123853802680969224403462192186 +-0.57363879680633544921875 0.381573486328124988897769753748 0.123853802680969224403462192186 +-0.5736343860626220703125 -0.286578392982482943462940738755 0.478347206115722678454460492503 +-0.5736343860626220703125 0.286578392982482943462940738755 0.478347206115722678454460492503 +-0.573432308435440130089943977509 -0.682141488790512062756477007497 -0.125928895175456995181306751874 +-0.573432308435440130089943977509 0.682141488790512062756477007497 -0.125928895175456995181306751874 +-0.573250210285186745373664507497 -0.624758523702621415552016514994 -0.0596682995557785006424111884371 +-0.573250210285186745373664507497 0.624758523702621415552016514994 -0.0596682995557785006424111884371 +-0.573246097564697243420539507497 -0.267201209068298306537059261245 0.299987089633941605981704014994 +-0.573246097564697243420539507497 0.267201209068298306537059261245 0.299987089633941605981704014994 +-0.57279302179813385009765625 -0.733946269750595070568977007497 -0.189025298506021482980443693123 +-0.57279302179813385009765625 0.733946269750595070568977007497 -0.189025298506021482980443693123 +-0.572790396213531449731704014994 -0.191283395886421181408820757497 0.354008185863494861944644753748 +-0.572790396213531449731704014994 0.191283395886421181408820757497 0.354008185863494861944644753748 +-0.5723175108432769775390625 -0.11365950107574462890625 0.47120551764965057373046875 +-0.5723175108432769775390625 0.11365950107574462890625 0.47120551764965057373046875 +-0.572022020816802978515625 -0.287708245217800140380859375 -0.39053173363208770751953125 +-0.572022020816802978515625 0.287708245217800140380859375 -0.39053173363208770751953125 +-0.57140393555164337158203125 -0.182206055521965032406583873126 -0.250595794618129752429069867503 +-0.57140393555164337158203125 0.182206055521965032406583873126 -0.250595794618129752429069867503 +-0.571099764108657814709602007497 -0.07174894772469997406005859375 0.301988700032234214098991742503 +-0.571099764108657814709602007497 0.07174894772469997406005859375 0.301988700032234214098991742503 +-0.570740166306495599890524772491 -0.328257241845130887103465511245 -0.537590137124061562268195757497 +-0.570740166306495599890524772491 0.328257241845130887103465511245 -0.537590137124061562268195757497 +-0.5706880092620849609375 -0.15342080593109130859375 0.539237594604492165295539507497 +-0.5706880092620849609375 0.15342080593109130859375 0.539237594604492165295539507497 +-0.570634782314300537109375 -0.185407805442810047491519753748 0 +-0.570634782314300537109375 0.185407805442810047491519753748 0 +-0.570496845245361261511618522491 -0.576480913162231378699118522491 -0.494674491882324207647769753748 +-0.570496845245361261511618522491 0.576480913162231378699118522491 -0.494674491882324207647769753748 +-0.57030522823333740234375 -0.48708526790142059326171875 0 +-0.57030522823333740234375 0.48708526790142059326171875 0 +-0.570267975330352783203125 -0.780201971530914306640625 0.2570590078830718994140625 +-0.570267975330352783203125 0.780201971530914306640625 0.2570590078830718994140625 +-0.570196998119354203637954014994 -0.584961485862731889184829014994 -0.234936605393886555059879128748 +-0.570196998119354203637954014994 0.584961485862731889184829014994 -0.234936605393886555059879128748 +-0.570194464921951249536391514994 -0.1380884535610675811767578125 0.615069347620010309363181022491 +-0.570194464921951249536391514994 0.1380884535610675811767578125 0.615069347620010309363181022491 +-0.570177602767944380346420985006 -0.535688781738281272204460492503 -0.167137598991394048519865123126 +-0.570177602767944380346420985006 0.535688781738281272204460492503 -0.167137598991394048519865123126 +-0.570150893926620550011818977509 -0.414234003424644503521534488755 0.559765809774398825915397992503 +-0.570150893926620550011818977509 0.414234003424644503521534488755 0.559765809774398825915397992503 +-0.570092421770095891808693977509 -0.460081779956817649157585492503 -0.52280008792877197265625 +-0.570092421770095891808693977509 0.460081779956817649157585492503 -0.52280008792877197265625 +-0.570086312294006303247329014994 -0.378453588485717751233039507497 -0.147562800347805000988898882497 +-0.570086312294006303247329014994 0.378453588485717751233039507497 -0.147562800347805000988898882497 +-0.569875788688659623559829014994 -0.0726851999759674100021200615629 -0.173085594177246088198884876874 +-0.569875788688659623559829014994 0.0726851999759674100021200615629 -0.173085594177246088198884876874 +-0.569814026355743408203125 -0.656277000904083251953125 0.4945839941501617431640625 +-0.569814026355743408203125 0.656277000904083251953125 0.4945839941501617431640625 +-0.569801723957061745373664507497 -0.627331513166427656713608485006 -0.30295349657535552978515625 +-0.569801723957061745373664507497 0.627331513166427656713608485006 -0.30295349657535552978515625 +-0.5696775019168853759765625 -0.41389127075672149658203125 0.2581889927387237548828125 +-0.5696775019168853759765625 0.41389127075672149658203125 0.2581889927387237548828125 +-0.569374653697013899389389735006 -0.188451255857944505178735994377 0.250596453249454509393245871252 +-0.569374653697013899389389735006 0.188451255857944505178735994377 0.250596453249454509393245871252 +-0.569232422113418512488181022491 -0.257090885937213908807308371252 0.715806016325950533740751779987 +-0.569232422113418512488181022491 0.257090885937213908807308371252 0.715806016325950533740751779987 +-0.56905591487884521484375 -0.0288736008107662173172158759371 0.40662229061126708984375 +-0.56905591487884521484375 0.0288736008107662173172158759371 0.40662229061126708984375 +-0.568633002042770341333266514994 -0.525021222233772233423110264994 0.351438455283641815185546875 +-0.568633002042770341333266514994 0.525021222233772233423110264994 0.351438455283641815185546875 +-0.568468987941741943359375 0 0.822704970836639404296875 +-0.56845279037952423095703125 -0.0566134028136730180214009067186 -0.629409676790237404553352007497 +-0.56845279037952423095703125 0.0566134028136730180214009067186 -0.629409676790237404553352007497 +-0.568327796459197953637954014994 -0.0974748015403747586349325615629 0.165837603807449329718082253748 +-0.568327796459197953637954014994 0.0974748015403747586349325615629 0.165837603807449329718082253748 +-0.56830044090747833251953125 -0.62378613650798797607421875 -0.436377762258052803723273882497 +-0.56830044090747833251953125 0.62378613650798797607421875 -0.436377762258052803723273882497 +-0.568192681670188881604133257497 -0.168585604429245000668302623126 -0.609291073679923966821547764994 +-0.568192681670188881604133257497 0.168585604429245000668302623126 -0.609291073679923966821547764994 +-0.567525577545166082238381477509 -0.492511177062988303454460492503 0.2744944095611572265625 +-0.567525577545166082238381477509 0.492511177062988303454460492503 0.2744944095611572265625 +-0.567334315180778481213508257497 -0.412187898159027066302684261245 0.640884274244308493884147992503 +-0.567334315180778481213508257497 0.412187898159027066302684261245 0.640884274244308493884147992503 +-0.567069590091705322265625 -0.160426801443099981137052623126 -0.112674602866172784976228626874 +-0.567069590091705322265625 0.160426801443099981137052623126 -0.112674602866172784976228626874 +-0.56675960123538970947265625 -0.411769743263721454962222878748 0.481383046507835365979133257497 +-0.56675960123538970947265625 0.411769743263721454962222878748 0.481383046507835365979133257497 +-0.566697317361831709447983485006 -0.316054043173789989129573996252 0.0382583511993289035468812642193 +-0.566697317361831709447983485006 0.316054043173789989129573996252 0.0382583511993289035468812642193 +-0.566574382781982355261618522491 -0.0461915977299213395546040317186 -0.408484983444213856085269753748 +-0.566574382781982355261618522491 0.0461915977299213395546040317186 -0.408484983444213856085269753748 +-0.5665400028228759765625 -0.08232200145721435546875 0.819912016391754150390625 +-0.5665400028228759765625 0.08232200145721435546875 0.819912016391754150390625 +-0.5665372908115386962890625 -0.256217500567436196057258257497 -0.321540090441703785284488503748 +-0.5665372908115386962890625 0.256217500567436196057258257497 -0.321540090441703785284488503748 +-0.56652309000492095947265625 -0.315383246541023287701221988755 -0.04566249810159206390380859375 +-0.56652309000492095947265625 0.315383246541023287701221988755 -0.04566249810159206390380859375 +-0.566489684581756525183493522491 -0.137487699091434462106420255623 -0.387539619207382168841746761245 +-0.566489684581756525183493522491 0.137487699091434462106420255623 -0.387539619207382168841746761245 +-0.566312611103057861328125 -0.411448085308074917865184261245 0 +-0.566312611103057861328125 0.411448085308074917865184261245 0 +-0.566280761361122153552116742503 -0.315723001956939697265625 -0.69436733424663543701171875 +-0.566280761361122153552116742503 0.315723001956939697265625 -0.69436733424663543701171875 +-0.566106605529785089636618522491 -0.1831254065036773681640625 -0.0773825973272323636154013115629 +-0.566106605529785089636618522491 0.1831254065036773681640625 -0.0773825973272323636154013115629 +-0.565930384397506647253806022491 -0.0772680975496768951416015625 0.404663717746734596936164507497 +-0.565930384397506647253806022491 0.0772680975496768951416015625 0.404663717746734596936164507497 +-0.565802237391471840588508257497 -0.282023957371711764263721988755 0.151096399128437058889673494377 +-0.565802237391471840588508257497 0.282023957371711764263721988755 0.151096399128437058889673494377 +-0.56579601764678955078125 -0.783451020717620849609375 -0.2570590078830718994140625 +-0.56579601764678955078125 0.783451020717620849609375 -0.2570590078830718994140625 +-0.565686416625976629113381477509 -0.565684795379638671875 0 +-0.565686416625976629113381477509 0.565684795379638671875 0 +-0.565630209445953324731704014994 -0.184593003988265974557592130623 0.0773825973272323636154013115629 +-0.565630209445953324731704014994 0.184593003988265974557592130623 0.0773825973272323636154013115629 +-0.56544409692287445068359375 -0.116735447943210599031083063437 0.298573599755764029772819867503 +-0.56544409692287445068359375 0.116735447943210599031083063437 0.298573599755764029772819867503 +-0.565208995342254660876335492503 -0.137338203191757185495092130623 -0.147231003642082219906583873126 +-0.565208995342254660876335492503 0.137338203191757185495092130623 -0.147231003642082219906583873126 +-0.5651447772979736328125 -0.26074159145355224609375 -0.502618408203124977795539507497 +-0.5651447772979736328125 0.26074159145355224609375 -0.502618408203124977795539507497 +-0.565138792991638161389289507497 -0.162373799085617054327457253748 0.119384399056434623020983565311 +-0.565138792991638161389289507497 0.162373799085617054327457253748 0.119384399056434623020983565311 +-0.564926022291183493884147992503 -0.565145498514175392834602007497 0.513779965043067887719985264994 +-0.564926022291183493884147992503 0.565145498514175392834602007497 0.513779965043067887719985264994 +-0.5648066997528076171875 -0.664995574951171897204460492503 0.220848302543163316213892244377 +-0.5648066997528076171875 0.664995574951171897204460492503 0.220848302543163316213892244377 +-0.564780771732330322265625 -0.48555748164653778076171875 0.0880732499063014984130859375 +-0.564780771732330322265625 0.48555748164653778076171875 0.0880732499063014984130859375 +-0.56459699571132659912109375 -0.349238254129886627197265625 0.348944999277591705322265625 +-0.56459699571132659912109375 0.349238254129886627197265625 0.348944999277591705322265625 +-0.564510762691497802734375 -0.24364574253559112548828125 -0.4294927418231964111328125 +-0.564510762691497802734375 0.24364574253559112548828125 -0.4294927418231964111328125 +-0.5641852319240570068359375 -0.1650847457349300384521484375 0.465770244598388671875 +-0.5641852319240570068359375 0.1650847457349300384521484375 0.465770244598388671875 +-0.564166009426116943359375 -0.46087801456451416015625 -0.685060024261474609375 +-0.564166009426116943359375 0.46087801456451416015625 -0.685060024261474609375 +-0.563425856828689619604233485006 -0.0852800004184246090987997490629 -0.312695507705211650506527121252 +-0.563425856828689619604233485006 0.0852800004184246090987997490629 -0.312695507705211650506527121252 +-0.563402962684631303247329014994 -0.618763458728790238794204014994 0.149024545401334751471011941248 +-0.563402962684631303247329014994 0.618763458728790238794204014994 0.149024545401334751471011941248 +-0.563326799869537375720085492503 0 -0.2065494060516357421875 +-0.563311707973480180200454014994 -0.33910520374774932861328125 0.240182608366012545486611884371 +-0.563311707973480180200454014994 0.33910520374774932861328125 0.240182608366012545486611884371 +-0.562800014019012473376335492503 -0.0247500009834766381000559221093 0.206503808498382568359375 +-0.562800014019012473376335492503 0.0247500009834766381000559221093 0.206503808498382568359375 +-0.562785279750824041222756477509 -0.0371709007769823115974183735943 0.7013501822948455810546875 +-0.562785279750824041222756477509 0.0371709007769823115974183735943 0.7013501822948455810546875 +-0.562760910391807533947883257497 -0.258274254202842723504573996252 0.197724145650863658563167746252 +-0.562760910391807533947883257497 0.258274254202842723504573996252 0.197724145650863658563167746252 +-0.562712377309799172131477007497 -0.408833107352256808209034488755 -0.571148997545242287365852007497 +-0.562712377309799172131477007497 0.408833107352256808209034488755 -0.571148997545242287365852007497 +-0.562551987171173051294204014994 -0.667192599177360512463508257497 -0.375351651012897469250617632497 +-0.562551987171173051294204014994 0.667192599177360512463508257497 -0.375351651012897469250617632497 +-0.562542515993118330541733485006 -0.154197545349597925357088001874 -0.286825495958328235968082253748 +-0.562542515993118330541733485006 0.154197545349597925357088001874 -0.286825495958328235968082253748 +-0.562529397010803178247329014994 -0.205706405639648426397769753748 0.03528960049152374267578125 +-0.562529397010803178247329014994 0.205706405639648426397769753748 0.03528960049152374267578125 +-0.562488973140716552734375 -0.16100299358367919921875 0.81097698211669921875 +-0.562488973140716552734375 0.16100299358367919921875 0.81097698211669921875 +-0.562411487102508544921875 -0.48493199050426483154296875 -0.10504424571990966796875 +-0.562411487102508544921875 0.48493199050426483154296875 -0.10504424571990966796875 +-0.562369787693023703845085492503 -0.204858595132827753237947376874 -0.0421061977744102491905131557814 +-0.562369787693023703845085492503 0.204858595132827753237947376874 -0.0421061977744102491905131557814 +-0.562368804216384798877470529987 -0.408582282066345170434829014994 0.0824732974171638461013955634371 +-0.562368804216384798877470529987 0.408582282066345170434829014994 0.0824732974171638461013955634371 +-0.56227397918701171875 -0.57124602794647216796875 0.597935020923614501953125 +-0.56227397918701171875 0.57124602794647216796875 0.597935020923614501953125 +-0.56224501132965087890625 -0.44616901874542236328125 0.217517249286174774169921875 +-0.56224501132965087890625 0.44616901874542236328125 0.217517249286174774169921875 +-0.56215350329875946044921875 -0.286287009716033935546875 0.4056150019168853759765625 +-0.56215350329875946044921875 0.286287009716033935546875 0.4056150019168853759765625 +-0.561732298135757424084602007497 -0.5540733039379119873046875 0.432965692877769481317073996252 +-0.561732298135757424084602007497 0.5540733039379119873046875 0.432965692877769481317073996252 +-0.561472213268280007092414507497 -0.0486509978771209675163511576557 -0.205869591236114507504240123126 +-0.561472213268280007092414507497 0.0486509978771209675163511576557 -0.205869591236114507504240123126 +-0.561074388027191117700454014994 -0.1394712030887603759765625 0.160447204113006586245759876874 +-0.561074388027191117700454014994 0.1394712030887603759765625 0.160447204113006586245759876874 +-0.560725986957550048828125 -0.700617015361785888671875 0.4412719905376434326171875 +-0.560725986957550048828125 0.700617015361785888671875 0.4412719905376434326171875 +-0.5606922805309295654296875 -0.407365006208419755395766514994 -0.0983751967549323924622228787484 +-0.5606922805309295654296875 0.407365006208419755395766514994 -0.0983751967549323924622228787484 +-0.560394608974456809313835492503 -0.112457996606826773899889815311 -0.182513397932052595651342130623 +-0.560394608974456809313835492503 0.112457996606826773899889815311 -0.182513397932052595651342130623 +-0.560372701287269570080695757497 -0.337742394208908058850227007497 0.542597508430480934826789507497 +-0.560372701287269570080695757497 0.337742394208908058850227007497 0.542597508430480934826789507497 +-0.560172605514526411596420985006 -0.276459297537803683209034488755 -0.179657404124736796990902121252 +-0.560172605514526411596420985006 0.276459297537803683209034488755 -0.179657404124736796990902121252 +-0.560169404745101906506477007497 -0.237381893396377552374332253748 0.346208107471466020044204014994 +-0.560169404745101906506477007497 0.237381893396377552374332253748 0.346208107471466020044204014994 +-0.560076406598091103283820757497 -0.309543646872043609619140625 0.1140054501593112945556640625 +-0.560076406598091103283820757497 0.309543646872043609619140625 0.1140054501593112945556640625 +-0.56000888347625732421875 -0.561748835444450311804587272491 0.305496792495250690802066628748 +-0.56000888347625732421875 0.561748835444450311804587272491 0.305496792495250690802066628748 +-0.559916687011718705591079014994 -0.125715097784996038265958873126 0.400860601663589444232371761245 +-0.559916687011718705591079014994 0.125715097784996038265958873126 0.400860601663589444232371761245 +-0.5598866045475006103515625 0 -0.330191564559936534539730246252 +-0.559755194187164240027243522491 -0.126416506618261342831388560626 -0.757094895839691139904914507497 +-0.559755194187164240027243522491 0.126416506618261342831388560626 -0.757094895839691139904914507497 +-0.559738093614578269274772992503 -0.706318369507789589611945757497 0.3005125522613525390625 +-0.559738093614578269274772992503 0.706318369507789589611945757497 0.3005125522613525390625 +-0.559725749492645197058493522491 -0.536284488439559892114516514994 -0.549187380075454645300681022491 +-0.559725749492645197058493522491 0.536284488439559892114516514994 -0.549187380075454645300681022491 +-0.559300804138183615954460492503 -0.5641880035400390625 0.0942071974277496337890625 +-0.559300804138183615954460492503 0.5641880035400390625 0.0942071974277496337890625 +-0.559197008609771728515625 -0.066740997135639190673828125 -0.826344013214111328125 +-0.559197008609771728515625 0.066740997135639190673828125 -0.826344013214111328125 +-0.558968019485473699425881477509 -0.209236788749694840872095369377 0.532705593109130903783920985006 +-0.558968019485473699425881477509 0.209236788749694840872095369377 0.532705593109130903783920985006 +-0.558927583694457941199118522491 -0.0736367985606193459213741903113 0.205371594429016118832365123126 +-0.558927583694457941199118522491 0.0736367985606193459213741903113 0.205371594429016118832365123126 +-0.558769592642784140856804242503 -0.197583355754613859689428068123 0.6092927455902099609375 +-0.558769592642784140856804242503 0.197583355754613859689428068123 0.6092927455902099609375 +-0.55869448184967041015625 -0.0994267500936985015869140625 -0.49038223922252655029296875 +-0.55869448184967041015625 0.0994267500936985015869140625 -0.49038223922252655029296875 +-0.558668678998947121350227007497 -0.110518202930688855256669000937 0.696903294324874855725227007497 +-0.558668678998947121350227007497 0.110518202930688855256669000937 0.696903294324874855725227007497 +-0.558422988653182961193977007497 -0.331661689281463611944644753748 0.6230286061763763427734375 +-0.558422988653182961193977007497 0.331661689281463611944644753748 0.6230286061763763427734375 +-0.558396717905998207776008257497 -0.768566152453422524182258257497 0 +-0.558396717905998207776008257497 0.768566152453422524182258257497 0 +-0.558323344588279701916633257497 -0.276698796451091744152961382497 -0.57811136543750762939453125 +-0.558323344588279701916633257497 0.276698796451091744152961382497 -0.57811136543750762939453125 +-0.558206617832183837890625 -0.370390987396240212170539507497 0.203016099333763105905248380623 +-0.558206617832183837890625 0.370390987396240212170539507497 0.203016099333763105905248380623 +-0.558066612482070900647102007497 -0.251372553408145904541015625 -0.218799108266830438784822376874 +-0.558066612482070900647102007497 0.251372553408145904541015625 -0.218799108266830438784822376874 +-0.55803000926971435546875 -0.4054270088672637939453125 0.72403800487518310546875 +-0.55803000926971435546875 0.4054270088672637939453125 0.72403800487518310546875 +-0.557907307147979758532585492503 -0.663939911127090498510483485006 -0.240671691298484813348323996252 +-0.557907307147979758532585492503 0.663939911127090498510483485006 -0.240671691298484813348323996252 +-0.557754421234130881579460492503 -0.525023984909057661596420985006 0.23078238964080810546875 +-0.557754421234130881579460492503 0.525023984909057661596420985006 0.23078238964080810546875 +-0.557605081796646140368522992503 -0.616503289341926552502570757497 -0.1774816997349262237548828125 +-0.557605081796646140368522992503 0.616503289341926552502570757497 -0.1774816997349262237548828125 +-0.55758702754974365234375 -0.827147006988525390625 0.070176996290683746337890625 +-0.55758702754974365234375 0.827147006988525390625 0.070176996290683746337890625 +-0.557487201690673894738381477509 -0.405033588409423828125 0.406393623352050814556690738755 +-0.557487201690673894738381477509 0.405033588409423828125 0.406393623352050814556690738755 +-0.557226160168647788317741742503 -0.160759295523166673147485994377 0.293523098528385151251285378748 +-0.557226160168647788317741742503 0.160759295523166673147485994377 0.293523098528385151251285378748 +-0.557103964686393782201889735006 -0.306094104051589988024772992503 -0.1357999481260776519775390625 +-0.557103964686393782201889735006 0.306094104051589988024772992503 -0.1357999481260776519775390625 +-0.556971013545989990234375 -0.82844698429107666015625 -0.05881600081920623779296875 +-0.556971013545989990234375 0.82844698429107666015625 -0.05881600081920623779296875 +-0.556561613082885764391960492503 -0.5635759830474853515625 -0.112344801425933837890625 +-0.556561613082885764391960492503 0.5635759830474853515625 -0.112344801425933837890625 +-0.5562431812286376953125 -0.1062335968017578125 -0.565073585510253884045539507497 +-0.5562431812286376953125 0.1062335968017578125 -0.565073585510253884045539507497 +-0.556190592050552323755141514994 -0.225766098499298073498664507497 -0.3601135909557342529296875 +-0.556190592050552323755141514994 0.225766098499298073498664507497 -0.3601135909557342529296875 +-0.556059414148330710681022992503 -0.232845602929592138119474498126 0.243065546452999131643579744377 +-0.556059414148330710681022992503 0.232845602929592138119474498126 0.243065546452999131643579744377 +-0.5559203922748565673828125 -0.311751294136047352179019753748 0.28941990435123443603515625 +-0.5559203922748565673828125 0.311751294136047352179019753748 0.28941990435123443603515625 +-0.55490100383758544921875 -0.23867200314998626708984375 0.79694402217864990234375 +-0.55490100383758544921875 0.23867200314998626708984375 0.79694402217864990234375 +-0.554878377914428733141960492503 -0.337886404991149913445980246252 0.466843223571777377056690738755 +-0.554878377914428733141960492503 0.337886404991149913445980246252 0.466843223571777377056690738755 +-0.554722076654434181897102007497 -0.761427852511405878210837272491 0.122523394227027890290848688437 +-0.554722076654434181897102007497 0.761427852511405878210837272491 0.122523394227027890290848688437 +-0.554490011930465764855568977509 -0.594792026281356855932358485006 0.385698598623275767938167746252 +-0.554490011930465764855568977509 0.594792026281356855932358485006 0.385698598623275767938167746252 +-0.554422473907470680920539507497 -0.476216125488281238897769753748 0.525199484825134343957131477509 +-0.554422473907470680920539507497 0.476216125488281238897769753748 0.525199484825134343957131477509 +-0.554328596591949440686164507497 -0.229607999324798583984375 0 +-0.554328596591949440686164507497 0.229607999324798583984375 0 +-0.554217299818992592541633257497 -0.339622390270233165399105246252 0 +-0.554217299818992592541633257497 0.339622390270233165399105246252 0 +-0.554208326339721724096420985006 -0.707143485546112060546875 0.052934400737285614013671875 +-0.554208326339721724096420985006 0.707143485546112060546875 0.052934400737285614013671875 +-0.554122650623321555407585492503 0 -0.771652692556381136768095529987 +-0.5541142523288726806640625 -0.40258575975894927978515625 -0.305584497749805450439453125 +-0.5541142523288726806640625 0.40258575975894927978515625 -0.305584497749805450439453125 +-0.5540427267551422119140625 -0.178721098601818090267911998126 -0.686364305019378728722756477509 +-0.5540427267551422119140625 0.178721098601818090267911998126 -0.686364305019378728722756477509 +-0.5540257394313812255859375 -0.36428175866603851318359375 -0.350506491959095001220703125 +-0.5540257394313812255859375 0.36428175866603851318359375 -0.350506491959095001220703125 +-0.553713297843933083264289507497 -0.060038097202777862548828125 -0.706962597370147771691506477509 +-0.553713297843933083264289507497 0.060038097202777862548828125 -0.706962597370147771691506477509 +-0.55363051593303680419921875 0 -0.5059575140476226806640625 +-0.553471505641937255859375 -0.1980607509613037109375 -0.46576948463916778564453125 +-0.553471505641937255859375 0.1980607509613037109375 -0.46576948463916778564453125 +-0.553463393449783236377470529987 -0.0921584948897361672104366903113 -0.418551719188690163342414507497 +-0.553463393449783236377470529987 0.0921584948897361672104366903113 -0.418551719188690163342414507497 +-0.553278619050979636462272992503 -0.181066502630710612908870871252 0.6863652169704437255859375 +-0.553278619050979636462272992503 0.181066502630710612908870871252 0.6863652169704437255859375 +-0.553144204616546564245993522491 -0.115066203474998463018863503748 0.201968407630920415707365123126 +-0.553144204616546564245993522491 0.115066203474998463018863503748 0.201968407630920415707365123126 +-0.553100609779357932360710492503 -0.2249981462955474853515625 -0.256818892061710379870476117503 +-0.553100609779357932360710492503 0.2249981462955474853515625 -0.256818892061710379870476117503 +-0.553066813945770285876335492503 -0.203522408008575433902009876874 0.112674602866172784976228626874 +-0.553066813945770285876335492503 0.203522408008575433902009876874 0.112674602866172784976228626874 +-0.552923977375030517578125 -0.707309085130691572729233485006 -0.0631592966616153772552166856258 +-0.552923977375030517578125 0.707309085130691572729233485006 -0.0631592966616153772552166856258 +-0.55292119085788726806640625 0 0.341728383302688620837272992503 +-0.552878987789154008325454014994 -0.0884472012519836453536825615629 -0.215643596649169905221654630623 +-0.552878987789154008325454014994 0.0884472012519836453536825615629 -0.215643596649169905221654630623 +-0.552743223309516862329360264994 -0.762865206599235512463508257497 -0.122523394227027890290848688437 +-0.552743223309516862329360264994 0.762865206599235512463508257497 -0.122523394227027890290848688437 +-0.552649784088134699011618522491 -0.200812804698944080694644753748 -0.119384399056434623020983565311 +-0.552649784088134699011618522491 0.200812804698944080694644753748 -0.119384399056434623020983565311 +-0.552543735504150368420539507497 -0.478992870450019814221320757497 0.606432509422302201684829014994 +-0.552543735504150368420539507497 0.478992870450019814221320757497 0.606432509422302201684829014994 +-0.55242526531219482421875 -0.217443756759166717529296875 0.45830623805522918701171875 +-0.55242526531219482421875 0.217443756759166717529296875 0.45830623805522918701171875 +-0.552269995212554931640625 -0.65600299835205078125 -0.514450013637542724609375 +-0.552269995212554931640625 0.65600299835205078125 -0.514450013637542724609375 +-0.552259504795074462890625 -0.47593273222446441650390625 0.1760617531836032867431640625 +-0.552259504795074462890625 0.47593273222446441650390625 0.1760617531836032867431640625 +-0.552167987823486305920539507497 -0.441960811614990234375 -0.37387359142303466796875 +-0.552167987823486305920539507497 0.441960811614990234375 -0.37387359142303466796875 +-0.552031642198562599865852007497 -0.646344253420829795153679242503 0 +-0.552031642198562599865852007497 0.646344253420829795153679242503 0 +-0.551968789100646950451789507497 -0.177601200342178328073217130623 -0.1542347967624664306640625 +-0.551968789100646950451789507497 0.177601200342178328073217130623 -0.1542347967624664306640625 +-0.551877593994140602795539507497 -0.2113192081451416015625 -0.539236021041870183800881477509 +-0.551877593994140602795539507497 0.2113192081451416015625 -0.539236021041870183800881477509 +-0.551849293708801202917868522491 -0.70807015895843505859375 -0.310803897678852081298828125 +-0.551849293708801202917868522491 0.70807015895843505859375 -0.310803897678852081298828125 +-0.55181121826171875 0 -0.5792272090911865234375 +-0.551732397079467751233039507497 -0.225020402669906610659822376874 0.07040999829769134521484375 +-0.551732397079467751233039507497 0.225020402669906610659822376874 0.07040999829769134521484375 +-0.551597806811332747045639735006 -0.0449410013854503673225160298443 0.340910711884498618395866742503 +-0.551597806811332747045639735006 0.0449410013854503673225160298443 0.340910711884498618395866742503 +-0.551478865742683455053452235006 -0.335476693511009227410823996252 0.0763301499187946375091229356258 +-0.551478865742683455053452235006 0.335476693511009227410823996252 0.0763301499187946375091229356258 +-0.551393991708755470959602007497 -0.354719701409339893682926003748 -0.6165540218353271484375 +-0.551393991708755470959602007497 0.354719701409339893682926003748 -0.6165540218353271484375 +-0.551387199759483359606804242503 -0.0427810490131378187705912807814 -0.341528856754303000720085492503 +-0.551387199759483359606804242503 0.0427810490131378187705912807814 -0.341528856754303000720085492503 +-0.551182428002357505114616742503 -0.322242850065231289935496761245 0.703460761904716513903679242503 +-0.551182428002357505114616742503 0.322242850065231289935496761245 0.703460761904716513903679242503 +-0.551093888282775834497329014994 -0.173124696314334858282535378748 0.395376789569854725225894753748 +-0.551093888282775834497329014994 0.173124696314334858282535378748 0.395376789569854725225894753748 +-0.55095899105072021484375 -0.43853549659252166748046875 -0.258130498230457305908203125 +-0.55095899105072021484375 0.43853549659252166748046875 -0.258130498230457305908203125 +-0.550944614410400324011618522491 -0.1807529926300048828125 0.1542347967624664306640625 +-0.550944614410400324011618522491 0.1807529926300048828125 0.1542347967624664306640625 +-0.550637984275817893298210492503 -0.223046404123306257760717130623 -0.0839525967836379921616085653113 +-0.550637984275817893298210492503 0.223046404123306257760717130623 -0.0839525967836379921616085653113 +-0.550551223754882856908920985006 -0.39999759197235107421875 -0.420588779449462935033920985006 +-0.550551223754882856908920985006 0.39999759197235107421875 -0.420588779449462935033920985006 +-0.550454878807067893298210492503 -0.469075050950050365106136496252 0.446618053317069996221988503748 +-0.550454878807067893298210492503 0.469075050950050365106136496252 0.446618053317069996221988503748 +-0.550383383035659701221220529987 -0.399873596429824784692641514994 0.164860498905181868112279630623 +-0.550383383035659701221220529987 0.399873596429824784692641514994 0.164860498905181868112279630623 +-0.550381207466125510485710492503 -0.0243840001523494727397878278907 -0.23766839504241943359375 +-0.550381207466125510485710492503 0.0243840001523494727397878278907 -0.23766839504241943359375 +-0.550381004810333251953125 -0.127409101277589809075863058752 -0.321477659046649932861328125 +-0.550381004810333251953125 0.127409101277589809075863058752 -0.321477659046649932861328125 +-0.5503799915313720703125 -0.481199216842651378289730246252 -0.324852800369262728619190738755 +-0.5503799915313720703125 0.481199216842651378289730246252 -0.324852800369262728619190738755 +-0.550328353047370932848991742503 -0.3336924612522125244140625 -0.09103834629058837890625 +-0.550328353047370932848991742503 0.3336924612522125244140625 -0.09103834629058837890625 +-0.5500090122222900390625 -0.3996039927005767822265625 -0.73335301876068115234375 +-0.5500090122222900390625 0.3996039927005767822265625 -0.73335301876068115234375 +-0.550000000000000044408920985006 0 0 +-0.5497009754180908203125 -0.20036600530147552490234375 -0.8109760284423828125 +-0.5497009754180908203125 0.20036600530147552490234375 -0.8109760284423828125 +-0.5492599010467529296875 -0.327898901700973466333266514994 -0.284246200323104825091746761245 +-0.5492599010467529296875 0.327898901700973466333266514994 -0.284246200323104825091746761245 +-0.549042215943336464611945757497 -0.514878147840499900134147992503 -0.394909161329269398077457253748 +-0.549042215943336464611945757497 0.514878147840499900134147992503 -0.394909161329269398077457253748 +-0.549016681313514665063735264994 -0.471526426076889049188167746252 -0.445806315541267372815070757497 +-0.549016681313514665063735264994 0.471526426076889049188167746252 -0.445806315541267372815070757497 +-0.54889275133609771728515625 -0.50918398797512054443359375 0.044144251383841037750244140625 +-0.54889275133609771728515625 0.50918398797512054443359375 0.044144251383841037750244140625 +-0.548629102110862687524672764994 -0.595526134967803932873664507497 0.258562344312667835577457253748 +-0.548629102110862687524672764994 0.595526134967803932873664507497 0.258562344312667835577457253748 +-0.548590350151062056127670985006 -0.0223712496459484121158478586722 -0.0323763009160757120330487168758 +-0.548590350151062056127670985006 0.0223712496459484121158478586722 -0.0323763009160757120330487168758 +-0.5484449863433837890625 -0.81216800212860107421875 0.1989749968051910400390625 +-0.5484449863433837890625 0.81216800212860107421875 0.1989749968051910400390625 +-0.548304355144500821239716970013 -0.0431519020348787377128196851572 0 +-0.548304355144500821239716970013 0.0431519020348787377128196851572 0 +-0.548211586475372270044204014994 -0.153106194734573347604467130623 -0.189796203374862665347322376874 +-0.548211586475372270044204014994 0.153106194734573347604467130623 -0.189796203374862665347322376874 +-0.548173511028289706104033029987 -0.362577599287033036645766514994 -0.240921798348426807745426003748 +-0.548173511028289706104033029987 0.362577599287033036645766514994 -0.240921798348426807745426003748 +-0.5481719970703125 -0.703980028629302978515625 -0.4515750110149383544921875 +-0.5481719970703125 0.703980028629302978515625 -0.4515750110149383544921875 +-0.548170143365860007556022992503 -0.0227144502103328732589559990629 0.038644649088382720947265625 +-0.548170143365860007556022992503 0.0227144502103328732589559990629 0.038644649088382720947265625 +-0.548135709762573197778579014994 0 -0.435370612144470203741519753748 +-0.548125904798507646020766514994 -0.433428812026977527960269753748 0.0412062011659145299713458143742 +-0.548125904798507646020766514994 0.433428812026977527960269753748 0.0412062011659145299713458143742 +-0.54809398949146270751953125 -0.50923199951648712158203125 -0.05268749780952930450439453125 +-0.54809398949146270751953125 0.50923199951648712158203125 -0.05268749780952930450439453125 +-0.547938001155853227075454014994 0 0.244467598199844343698217130623 +-0.547634744644165061266960492503 -0.0896675020456314114669638115629 0.338460835814476002081363503748 +-0.547634744644165061266960492503 0.0896675020456314114669638115629 0.338460835814476002081363503748 +-0.547606492042541415088408029987 -0.183861309289932245425447376874 -0.395376080274581875872996761245 +-0.547606492042541415088408029987 0.183861309289932245425447376874 -0.395376080274581875872996761245 +-0.5474363863468170166015625 -0.433467990159988381115852007497 -0.04918409883975982666015625 +-0.5474363863468170166015625 0.433467990159988381115852007497 -0.04918409883975982666015625 +-0.547253778576850868908820757497 -0.113266754150390627775557561563 -0.640455430746078469006477007497 +-0.547253778576850868908820757497 0.113266754150390627775557561563 -0.640455430746078469006477007497 +-0.546707689762115478515625 -0.694655120372772216796875 0.169011904299259191342130748126 +-0.546707689762115478515625 0.694655120372772216796875 0.169011904299259191342130748126 +-0.546428024768829345703125 -0.74349200725555419921875 0.385533988475799560546875 +-0.546428024768829345703125 0.74349200725555419921875 0.385533988475799560546875 +-0.546351015567779541015625 -0.816232025623321533203125 -0.18779100477695465087890625 +-0.546351015567779541015625 0.816232025623321533203125 -0.18779100477695465087890625 +-0.546169260144233725817741742503 0 -0.0648004479706287411788778740629 +-0.546081590652465753699118522491 -0.049344599246978759765625 0.2436389923095703125 +-0.546081590652465753699118522491 0.049344599246978759765625 0.2436389923095703125 +-0.546037194132804826196547764994 -0.493292233347892739026008257497 -0.60083796083927154541015625 +-0.546037194132804826196547764994 0.493292233347892739026008257497 -0.60083796083927154541015625 +-0.545744550228118963097756477509 -0.299169641733169566766292746252 0.187510691583156585693359375 +-0.545744550228118963097756477509 0.299169641733169566766292746252 0.187510691583156585693359375 +-0.545742613077163762902443977509 -0.205902448296546941586271373126 0.286826154589653048443409488755 +-0.545742613077163762902443977509 0.205902448296546941586271373126 0.286826154589653048443409488755 +-0.545654356479644775390625 -0.252240212261676755023387386245 -0.735620144009590082312399772491 +-0.545654356479644775390625 0.252240212261676755023387386245 -0.735620144009590082312399772491 +-0.54554080963134765625 -0.355568790435791037829460492503 -0.464710378646850608141960492503 +-0.54554080963134765625 0.355568790435791037829460492503 -0.464710378646850608141960492503 +-0.54548849165439605712890625 -0.030937501229345798492431640625 0.51379501819610595703125 +-0.54548849165439605712890625 0.030937501229345798492431640625 0.51379501819610595703125 +-0.5453872382640838623046875 -0.33214800059795379638671875 -0.39335851371288299560546875 +-0.5453872382640838623046875 0.33214800059795379638671875 -0.39335851371288299560546875 +-0.545386356115341142114516514994 -0.555470761656761125024672764994 -0.341330237686634063720703125 +-0.545386356115341142114516514994 0.555470761656761125024672764994 -0.341330237686634063720703125 +-0.545312786102294944079460492503 -0.555023193359375 0.185965597629547119140625 +-0.545312786102294944079460492503 0.555023193359375 0.185965597629547119140625 +-0.545298656821250893322883257497 -0.197469352185726171322599498126 -0.293522459268569957391292746252 +-0.545298656821250893322883257497 0.197469352185726171322599498126 -0.293522459268569957391292746252 +-0.545199203491210981908920985006 -0.517470407485961958471420985006 -0.273828792572021473272769753748 +-0.545199203491210981908920985006 0.517470407485961958471420985006 -0.273828792572021473272769753748 +-0.545126447081565879138054242503 -0.0654923483729362571059695596887 -0.0323718998581171077399964985943 +-0.545126447081565879138054242503 0.0654923483729362571059695596887 -0.0323718998581171077399964985943 +-0.544867402315139748303352007497 -0.282344308495521501001235264994 0.336751094460487343518195757497 +-0.544867402315139748303352007497 0.282344308495521501001235264994 0.336751094460487343518195757497 +-0.544831216335296630859375 -0.156928199529647816046207253748 0.196296608448028570004240123126 +-0.544831216335296630859375 0.156928199529647816046207253748 0.196296608448028570004240123126 +-0.544714856147766046667868522491 -0.644853365421295121606704014994 0.0997474975883960723876953125 +-0.544714856147766046667868522491 0.644853365421295121606704014994 0.0997474975883960723876953125 +-0.544673261046409673546975227509 -0.0658647008240222930908203125 0.03863749839365482330322265625 +-0.544673261046409673546975227509 0.0658647008240222930908203125 0.03863749839365482330322265625 +-0.544605731964111328125 -0.47123323380947113037109375 -0.209389507770538330078125 +-0.544605731964111328125 0.47123323380947113037109375 -0.209389507770538330078125 +-0.544587600231170587683493522491 -0.249355798959732033459602007497 0.0352967999875545487831196567186 +-0.544587600231170587683493522491 0.249355798959732033459602007497 0.0352967999875545487831196567186 +-0.5445477068424224853515625 -0.632613587379455610815170985006 0.336552295088767994268863503748 +-0.5445477068424224853515625 0.632613587379455610815170985006 0.336552295088767994268863503748 +-0.544541803002357549523537727509 0 0.0772947974503040424743005587516 +-0.544479420781135536877570757497 -0.256065903604030586926398882497 0.600393268465995721960837272491 +-0.544479420781135536877570757497 0.256065903604030586926398882497 0.600393268465995721960837272491 +-0.544465792179107621606704014994 -0.248561400175094593389957253748 -0.0421187996864318819900674384371 +-0.544465792179107621606704014994 0.248561400175094593389957253748 -0.0421187996864318819900674384371 +-0.544464015960693381579460492503 -0.264480805397033724712940738755 0.523076820373535200658920985006 +-0.544464015960693381579460492503 0.264480805397033724712940738755 0.523076820373535200658920985006 +-0.544368547201156682824318977509 -0.0446275513619184549529705918758 -0.0645865008234977749923544365629 +-0.544368547201156682824318977509 0.0446275513619184549529705918758 -0.0645865008234977749923544365629 +-0.543878412246704079358039507497 0 0.586682415008544899670539507497 +-0.54372449219226837158203125 -0.334019243717193603515625 0.39407475292682647705078125 +-0.54372449219226837158203125 0.334019243717193603515625 0.39407475292682647705078125 +-0.543640989065170221472556022491 -0.394976413249969460217414507497 -0.196082592010498046875 +-0.543640989065170221472556022491 0.394976413249969460217414507497 -0.196082592010498046875 +-0.543228960037231534130341970013 -0.0860376015305519131759481865629 0 +-0.543228960037231534130341970013 0.0860376015305519131759481865629 0 +-0.542988604307174660412727007497 -0.298992407321929887231704014994 -0.325218600034713700708266514994 +-0.542988604307174660412727007497 0.298992407321929887231704014994 -0.325218600034713700708266514994 +-0.54269997775554656982421875 -0.3942900002002716064453125 0.335411243140697479248046875 +-0.54269997775554656982421875 0.3942900002002716064453125 0.335411243140697479248046875 +-0.542693260312080427709702235006 -0.0452771008014678996711488423443 0.07703244686126708984375 +-0.542693260312080427709702235006 0.0452771008014678996711488423443 0.07703244686126708984375 +-0.5426460206508636474609375 -0.695317518711090154504006477509 -0.179076598584651941470369251874 +-0.5426460206508636474609375 0.695317518711090154504006477509 -0.179076598584651941470369251874 +-0.542565608024597190173210492503 -0.0638958021998405484298544365629 -0.248072397708892805612279630623 +-0.542565608024597190173210492503 0.0638958021998405484298544365629 -0.248072397708892805612279630623 +-0.54246573150157928466796875 -0.223434394598007207699552623126 -0.615067625045776389391960492503 +-0.54246573150157928466796875 0.223434394598007207699552623126 -0.615067625045776389391960492503 +-0.542344188690185524670539507497 0 -0.654494056105613730700554242503 +-0.5422170162200927734375 -0.476218998432159423828125 0.6922550201416015625 +-0.5422170162200927734375 0.476218998432159423828125 0.6922550201416015625 +-0.542069578170776389391960492503 -0.0652000010013580322265625 0.5847303867340087890625 +-0.542069578170776389391960492503 0.0652000010013580322265625 0.5847303867340087890625 +-0.54205799102783203125 -0.09204524941742420196533203125 0.51009897887706756591796875 +-0.54205799102783203125 0.09204524941742420196533203125 0.51009897887706756591796875 +-0.541922986507415771484375 -0.0909281998872756985763388115629 0.240938401222228981701789507497 +-0.541922986507415771484375 0.0909281998872756985763388115629 0.240938401222228981701789507497 +-0.541754576563835077429587272491 -0.741191872954368502490751779987 0.244206057488918298892244251874 +-0.541754576563835077429587272491 0.741191872954368502490751779987 0.244206057488918298892244251874 +-0.541593003273010187292868522491 -0.127812597155570972784488503748 -0.224366998672485357113615123126 +-0.541593003273010187292868522491 0.127812597155570972784488503748 -0.224366998672485357113615123126 +-0.541574957966804437781149772491 -0.644244739413261435778679242503 -0.118932845443487159031725752811 +-0.541574957966804437781149772491 0.644244739413261435778679242503 -0.118932845443487159031725752811 +-0.541553020477294921875 -0.615451991558074951171875 -0.572659015655517578125 +-0.541553020477294921875 0.615451991558074951171875 -0.572659015655517578125 +-0.541323325037956215588508257497 -0.623463150858879044946547764994 0.469854794442653656005859375 +-0.541323325037956215588508257497 0.623463150858879044946547764994 0.469854794442653656005859375 +-0.541050252318382329796975227509 -0.133964352309703826904296875 0.334391850233077991827457253748 +-0.541050252318382329796975227509 0.133964352309703826904296875 0.334391850233077991827457253748 +-0.540983092784881547387954014994 0 0.444226998090744007452457253748 +-0.54088450968265533447265625 -0.274532704055309328960987613755 0.233615194261074077264339621252 +-0.54088450968265533447265625 0.274532704055309328960987613755 0.233615194261074077264339621252 +-0.540860092639923184520966970013 -0.0223723499104380614543874372657 -0.0973131529986858423431073106258 +-0.540860092639923184520966970013 0.0223723499104380614543874372657 -0.0973131529986858423431073106258 +-0.540587997436523415295539507497 -0.587834405899047895971420985006 0.0470623999834060696700888115629 +-0.540587997436523415295539507497 0.587834405899047895971420985006 0.0470623999834060696700888115629 +-0.540470695495605446545539507497 -0.546139812469482399670539507497 -0.468638992309570345806690738755 +-0.540470695495605446545539507497 0.546139812469482399670539507497 -0.468638992309570345806690738755 +-0.540395212173461980675881477509 -0.457639980316162153783920985006 0.37220799922943115234375 +-0.540395212173461980675881477509 0.457639980316162153783920985006 0.37220799922943115234375 +-0.540192908048629738537727007497 -0.327733242511749289782585492503 0.152586852759122842959627064374 +-0.540192908048629738537727007497 0.327733242511749289782585492503 0.152586852759122842959627064374 +-0.540165483951568603515625 -0.427646094560623135638621761245 0.123853802680969224403462192186 +-0.540165483951568603515625 0.427646094560623135638621761245 0.123853802680969224403462192186 +-0.540055099129676863256577235006 -0.359689840674400351794304242503 0.0382629010826349286178427178129 +-0.540055099129676863256577235006 0.359689840674400351794304242503 0.0382629010826349286178427178129 +-0.540045538544654868395866742503 0 0.781569722294807367468649772491 +-0.539992684125900290759147992503 -0.0856362037360668265639773721887 -0.351531064510345492291065738755 +-0.539992684125900290759147992503 0.0856362037360668265639773721887 -0.351531064510345492291065738755 +-0.539891293644905068127570757497 -0.359070417284965526238948996252 -0.045670948922634124755859375 +-0.539891293644905068127570757497 0.359070417284965526238948996252 -0.045670948922634124755859375 +-0.539529609680175825658920985006 -0.588008022308349587170539507497 -0.0561583995819091852386151231258 +-0.539529609680175825658920985006 0.588008022308349587170539507497 -0.0561583995819091852386151231258 +-0.53938798606395721435546875 -0.50423848628997802734375 0.1315447501838207244873046875 +-0.53938798606395721435546875 0.50423848628997802734375 0.1315447501838207244873046875 +-0.539272820949554421154914507497 -0.243559786677360529116853626874 0.678132015466690107885483485006 +-0.539272820949554421154914507497 0.243559786677360529116853626874 0.678132015466690107885483485006 +-0.539267003536224365234375 -0.634573996067047119140625 0.553631007671356201171875 +-0.539267003536224365234375 0.634573996067047119140625 0.553631007671356201171875 +-0.53925298154354095458984375 -0.1493197493255138397216796875 -0.49941001832485198974609375 +-0.53925298154354095458984375 0.1493197493255138397216796875 -0.49941001832485198974609375 +-0.53921248018741607666015625 -0.28942801058292388916015625 -0.43356750905513763427734375 +-0.53921248018741607666015625 0.28942801058292388916015625 -0.43356750905513763427734375 +-0.539150482416152931897102007497 -0.0575686991214752127876685960928 0.442721998691558815686164507497 +-0.539150482416152931897102007497 0.0575686991214752127876685960928 0.442721998691558815686164507497 +-0.539113390445709161902243522491 -0.221740409731864901443643134371 0.387540996074676513671875 +-0.539113390445709161902243522491 0.221740409731864901443643134371 0.387540996074676513671875 +-0.539072033762931890343850227509 -0.0877860508859157617767010606258 -0.0647668991237878854949627793758 +-0.539072033762931890343850227509 0.0877860508859157617767010606258 -0.0647668991237878854949627793758 +-0.538935005664825439453125 -0.04992449842393398284912109375 -0.51918826997280120849609375 +-0.538935005664825439453125 0.04992449842393398284912109375 -0.51918826997280120849609375 +-0.53866951167583465576171875 -0.42903824150562286376953125 0.297087751328945159912109375 +-0.53866951167583465576171875 0.42903824150562286376953125 0.297087751328945159912109375 +-0.538475844264030389929587272491 -0.391221003234386410785106136245 0.528667709231376625744758257497 +-0.538475844264030389929587272491 0.391221003234386410785106136245 0.528667709231376625744758257497 +-0.538420620560645990515524772491 -0.434521681070327736584602007497 -0.493755638599395751953125 +-0.538420620560645990515524772491 0.434521681070327736584602007497 -0.493755638599395751953125 +-0.5383898913860321044921875 -0.5909552872180938720703125 -0.413410511612892161981136496252 +-0.5383898913860321044921875 0.5909552872180938720703125 -0.413410511612892161981136496252 +-0.5382936000823974609375 -0.24325740337371826171875 0.105193796753883364591963811563 +-0.5382936000823974609375 0.24325740337371826171875 0.105193796753883364591963811563 +-0.538250029087066650390625 -0.749433994293212890625 -0.3855330049991607666015625 +-0.538250029087066650390625 0.749433994293212890625 -0.3855330049991607666015625 +-0.538220113515853970653779470013 -0.108499601483345045616069057814 -0.0323553999885916737655477959379 +-0.538220113515853970653779470013 0.108499601483345045616069057814 -0.0323553999885916737655477959379 +-0.538213002681732111120993522491 -0.0782059013843536404708700615629 0.778916415572166398462172764994 +-0.538213002681732111120993522491 0.0782059013843536404708700615629 0.778916415572166398462172764994 +-0.538146072626113913806022992503 -0.592479762434959367212172764994 -0.286122746765613555908203125 +-0.538146072626113913806022992503 0.592479762434959367212172764994 -0.286122746765613555908203125 +-0.537990617752075128699118522491 -0.221107792854309065377904630623 0.147231602668762201480134876874 +-0.537990617752075128699118522491 0.221107792854309065377904630623 0.147231602668762201480134876874 +-0.53778223693370819091796875 -0.268667243421077728271484375 0.448450505733489990234375 +-0.53778223693370819091796875 0.268667243421077728271484375 0.448450505733489990234375 +-0.537701985239982693798310720013 -0.109023196250200279933117997189 0.0386088997125625665862713731258 +-0.537701985239982693798310720013 0.109023196250200279933117997189 0.0386088997125625665862713731258 +-0.537506216764450095446647992503 -0.744278469681739718311064279987 -0.244206057488918298892244251874 +-0.537506216764450095446647992503 0.744278469681739718311064279987 -0.244206057488918298892244251874 +-0.537474614381790227746193977509 -0.390493798255920399054019753748 0.607153522968292280737045985006 +-0.537474614381790227746193977509 0.390493798255920399054019753748 0.607153522968292280737045985006 +-0.53735606372356414794921875 -0.0666550513356924112517987168758 -0.0964656010270118768890057481258 +-0.53735606372356414794921875 0.0666550513356924112517987168758 -0.0964656010270118768890057481258 +-0.537301611900329656457131477509 -0.0885522037744522205748864962516 0.0772370509803295135498046875 +-0.537301611900329656457131477509 0.0885522037744522205748864962516 0.0772370509803295135498046875 +-0.537167215347290061266960492503 -0.308947992324829112664730246252 -0.505967187881469770971420985006 +-0.537167215347290061266960492503 0.308947992324829112664730246252 -0.505967187881469770971420985006 +-0.537160810828208989953225227509 -0.0227155504748225225974955776564 0.115941651165485395957865932814 +-0.537160810828208989953225227509 0.0227155504748225225974955776564 0.115941651165485395957865932814 +-0.5369470119476318359375 -0.3076539933681488037109375 0.7855169773101806640625 +-0.5369470119476318359375 0.3076539933681488037109375 0.7855169773101806640625 +-0.536837679147720292505141514994 -0.0462293989956378895134214701557 -0.446842211484909046514957253748 +-0.536837679147720292505141514994 0.0462293989956378895134214701557 -0.446842211484909046514957253748 +-0.536754387617111250463608485006 -0.291366390883922576904296875 -0.222485893964767450503572376874 +-0.536754387617111250463608485006 0.291366390883922576904296875 -0.222485893964767450503572376874 +-0.536655998229980446545539507497 -0.550551986694335915295539507497 -0.221116805076599143298210492503 +-0.536655998229980446545539507497 0.550551986694335915295539507497 -0.221116805076599143298210492503 +-0.536654984951019264904914507497 0 -0.2683289945125579833984375 +-0.536653614044189430920539507497 -0.129965603351593017578125 0.578888797760009787829460492503 +-0.536653614044189430920539507497 0.129965603351593017578125 0.578888797760009787829460492503 +-0.536476510763168379369858485006 -0.29910600185394287109375 -0.6578216850757598876953125 +-0.536476510763168379369858485006 0.29910600185394287109375 -0.6578216850757598876953125 +-0.5364176928997039794921875 -0.138869500160217262951789507497 -0.427751111984252918585269753748 +-0.5364176928997039794921875 0.138869500160217262951789507497 -0.427751111984252918585269753748 +-0.536202108860015846936164507497 -0.354404389858245849609375 0.277281901240348793713508257497 +-0.536202108860015846936164507497 0.354404389858245849609375 0.277281901240348793713508257497 +-0.5360985100269317626953125 -0.425233197212219193872329014994 -0.147562800347805000988898882497 +-0.5360985100269317626953125 0.425233197212219193872329014994 -0.147562800347805000988898882497 +-0.53595770895481109619140625 -0.4378341138362884521484375 -0.65080702304840087890625 +-0.53595770895481109619140625 0.4378341138362884521484375 -0.65080702304840087890625 +-0.535898995399475053247329014994 -0.216953408718109114206029630623 -0.160447204113006586245759876874 +-0.535898995399475053247329014994 0.216953408718109114206029630623 -0.160447204113006586245759876874 +-0.535717004537582419665397992503 0 -0.368113192915916431768863503748 +-0.535510790348052934106704014994 -0.239859008789062494448884876874 -0.12528119981288909912109375 +-0.535510790348052934106704014994 0.239859008789062494448884876874 -0.12528119981288909912109375 +-0.535193073749542280737045985006 -0.535400998592376775597756477509 0.486738914251327536852897992503 +-0.535193073749542280737045985006 0.535400998592376775597756477509 0.486738914251327536852897992503 +-0.535184001922607399670539507497 -0.494137620925903353619190738755 0.33076560497283935546875 +-0.535184001922607399670539507497 0.494137620925903353619190738755 0.33076560497283935546875 +-0.5351250171661376953125 -0.1320683956146240234375 0.237064200639724720343082253748 +-0.5351250171661376953125 0.1320683956146240234375 0.237064200639724720343082253748 +-0.53502000868320465087890625 -0.143832005560398101806640625 0.50553524494171142578125 +-0.53502000868320465087890625 0.143832005560398101806640625 0.50553524494171142578125 +-0.5350143909454345703125 -0.0532832026481628445724325615629 -0.592385578155517622533920985006 +-0.5350143909454345703125 0.0532832026481628445724325615629 -0.592385578155517622533920985006 +-0.534804040193557761462272992503 -0.128393096476793311389030805003 0 +-0.534804040193557761462272992503 0.128393096476793311389030805003 0 +-0.534769582748413130346420985006 -0.158668804168701188528345369377 -0.573450422286987282483039507497 +-0.534769582748413130346420985006 0.158668804168701188528345369377 -0.573450422286987282483039507497 +-0.53470170497894287109375 -0.168928493559360515252620871252 -0.328720608353614829333366742503 +-0.53470170497894287109375 0.168928493559360515252620871252 -0.328720608353614829333366742503 +-0.534604811668396018298210492503 -0.272392201423645008429019753748 0 +-0.534604811668396018298210492503 0.272392201423645008429019753748 0 +-0.53454150259494781494140625 -0.502208232879638671875 -0.156691499054431915283203125 +-0.53454150259494781494140625 0.502208232879638671875 -0.156691499054431915283203125 +-0.5345290601253509521484375 0 -0.129532150924205780029296875 +-0.534364524483680658484274772491 -0.152952843904495233706697376874 0.770428133010864213403579014994 +-0.534364524483680658484274772491 0.152952843904495233706697376874 0.770428133010864213403579014994 +-0.534268131852149941174445757497 -0.322685356438159931524722878748 -0.181470906734466558285490123126 +-0.534268131852149941174445757497 0.322685356438159931524722878748 -0.181470906734466558285490123126 +-0.534163010120391801294204014994 -0.1060822010040283203125 0.439791816473007191046207253748 +-0.534163010120391801294204014994 0.1060822010040283203125 0.439791816473007191046207253748 +-0.534160280227661155016960492503 -0.542683726549148537365852007497 0.56803826987743377685546875 +-0.534160280227661155016960492503 0.542683726549148537365852007497 0.56803826987743377685546875 +-0.533887219429016068872329014994 -0.268527695536613431048778011245 -0.364496284723281827044871761245 +-0.533887219429016068872329014994 0.268527695536613431048778011245 -0.364496284723281827044871761245 +-0.533605608344078108373764735006 -0.0675394508987665204147177178129 0.114907099306583410092130748126 +-0.533605608344078108373764735006 0.0675394508987665204147177178129 0.114907099306583410092130748126 +-0.533507394790649347449118522491 -0.198361194133758550472990123126 0.189796793460845936163394753748 +-0.533507394790649347449118522491 0.198361194133758550472990123126 0.189796793460845936163394753748 +-0.53342854976654052734375 -0.628051376342773415295539507497 0.208578952401876432931615568123 +-0.53342854976654052734375 0.628051376342773415295539507497 0.208578952401876432931615568123 +-0.5334208011627197265625 -0.387547993659973166735710492503 0.453066396713256880346420985006 +-0.5334208011627197265625 0.387547993659973166735710492503 0.453066396713256880346420985006 +-0.533018982410430885998664507497 -0.193282806873321527652009876874 -0.196296608448028570004240123126 +-0.533018982410430885998664507497 0.193282806873321527652009876874 -0.196296608448028570004240123126 +-0.532943987846374533923210492503 -0.632077199220657415246193977509 -0.355596300959587108270198996252 +-0.532943987846374533923210492503 0.632077199220657415246193977509 -0.355596300959587108270198996252 +-0.532861566543579079358039507497 -0.265383946895599354132144753748 -0.261016601324081443102897992503 +-0.532861566543579079358039507497 0.265383946895599354132144753748 -0.261016601324081443102897992503 +-0.532791060209274358605568977509 -0.0443146008998155649383221543758 -0.129110845923423783743189119377 +-0.532791060209274358605568977509 0.0443146008998155649383221543758 -0.129110845923423783743189119377 +-0.532689687609672501977797764994 -0.665586164593696572033820757497 0.419208391010761238781867632497 +-0.532689687609672501977797764994 0.665586164593696572033820757497 0.419208391010761238781867632497 +-0.532664597034454345703125 -0.354318237304687533306690738755 0.115007102489471435546875 +-0.532664597034454345703125 0.354318237304687533306690738755 0.115007102489471435546875 +-0.532299947738647527550881477509 -0.248115408420562760793970369377 0.278559440374374411852897992503 +-0.532299947738647527550881477509 0.248115408420562760793970369377 0.278559440374374411852897992503 +-0.532284879684448153369658029987 -0.454612916707992531506477007497 0 +-0.532284879684448153369658029987 0.454612916707992531506477007497 0 +-0.532135212421417258532585492503 -0.103517997264862063322432561563 -0.2571305930614471435546875 +-0.532135212421417258532585492503 0.103517997264862063322432561563 -0.2571305930614471435546875 +-0.532057785987854026110710492503 -0.2681837975978851318359375 0.0706547990441322298904580634371 +-0.532057785987854026110710492503 0.2681837975978851318359375 0.0706547990441322298904580634371 +-0.5320552289485931396484375 -0.461729228496551513671875 0.25733850896358489990234375 +-0.5320552289485931396484375 0.461729228496551513671875 0.25733850896358489990234375 +-0.531876796483993552477897992503 -0.177620296180248271600277121252 0.328721886873245272564503238755 +-0.531876796483993552477897992503 0.177620296180248271600277121252 0.328721886873245272564503238755 +-0.531699001789093017578125 -0.386298519372940019067641514994 0.240976393222808810135049384371 +-0.531699001789093017578125 0.386298519372940019067641514994 0.240976393222808810135049384371 +-0.531519430875778131628806022491 -0.0351058507338166195244077982807 0.66238628327846527099609375 +-0.531519430875778131628806022491 0.0351058507338166195244077982807 0.66238628327846527099609375 +-0.531450578570365927966179242503 -0.386120156943798031878856136245 -0.539418497681617759020866742503 +-0.531450578570365927966179242503 0.386120156943798031878856136245 -0.539418497681617759020866742503 +-0.531237158179283075476462272491 -0.06340394727885723114013671875 -0.785026812553405672900908029987 +-0.531237158179283075476462272491 0.06340394727885723114013671875 -0.785026812553405672900908029987 +-0.53098618984222412109375 -0.266372394561767589227230246252 -0.08425860106945037841796875 +-0.53098618984222412109375 0.266372394561767589227230246252 -0.08425860106945037841796875 +-0.530524948239326499255241742503 -0.52329145371913909912109375 0.408912043273448932989566628748 +-0.530524948239326499255241742503 0.52329145371913909912109375 0.408912043273448932989566628748 +-0.530406785011291570519631477509 -0.130395651608705531732113058752 -0.0645424984395503997802734375 +-0.530406785011291570519631477509 0.130395651608705531732113058752 -0.0645424984395503997802734375 +-0.53033101558685302734375 -0.5303294956684112548828125 0 +-0.53033101558685302734375 0.5303294956684112548828125 0 +-0.530294394493103005139289507497 -0.119763006269931790437333063437 -0.717247796058654851769631477509 +-0.530294394493103005139289507497 0.119763006269931790437333063437 -0.717247796058654851769631477509 +-0.530278193950653120580795985006 -0.669143718481063909386818977509 0.284696102142333984375 +-0.530278193950653120580795985006 0.669143718481063909386818977509 0.284696102142333984375 +-0.530267098546028159411491742503 -0.109630402922630321160823996252 -0.0964270979166031022566940578145 +-0.530267098546028159411491742503 0.109630402922630321160823996252 -0.0964270979166031022566940578145 +-0.530266499519348122326789507497 -0.508058989048004172595085492503 -0.520282781124114968029914507497 +-0.530266499519348122326789507497 0.508058989048004172595085492503 -0.520282781124114968029914507497 +-0.530261611938476540295539507497 -0.582365608215332009045539507497 0.140258395671844476870759876874 +-0.530261611938476540295539507497 0.582365608215332009045539507497 0.140258395671844476870759876874 +-0.530169010162353515625 -0.3341369926929473876953125 -0.779277026653289794921875 +-0.530169010162353515625 0.3341369926929473876953125 -0.779277026653289794921875 +-0.5301285088062286376953125 -0.385155658423900593145816628748 0.687836104631423972399772992503 +-0.5301285088062286376953125 0.385155658423900593145816628748 0.687836104631423972399772992503 +-0.529868388175964377673210492503 -0.0247488006949424729774555942186 0.280404603481292702404914507497 +-0.529868388175964377673210492503 0.0247488006949424729774555942186 0.280404603481292702404914507497 +-0.52982322871685028076171875 -0.244445241987705230712890625 -0.4712047576904296875 +-0.52982322871685028076171875 0.244445241987705230712890625 -0.4712047576904296875 +-0.529707676172256447522102007497 -0.785789656639099054480368522491 0.0666681464761495617965536553129 +-0.529707676172256447522102007497 0.785789656639099054480368522491 0.0666681464761495617965536553129 +-0.529638004302978471216079014994 -0.039454199373722076416015625 -0.279153603315353382452457253748 +-0.529638004302978471216079014994 0.039454199373722076416015625 -0.279153603315353382452457253748 +-0.529365861415863059313835492503 -0.351421189308166515008480246252 -0.137022600322961818353206808752 +-0.529365861415863059313835492503 0.351421189308166515008480246252 -0.137022600322961818353206808752 +-0.52935397624969482421875 -0.782782971858978271484375 0.3271619975566864013671875 +-0.52935397624969482421875 0.782782971858978271484375 0.3271619975566864013671875 +-0.529122462868690468518195757497 -0.787024635076522760535056022491 -0.0558752007782459259033203125 +-0.529122462868690468518195757497 0.787024635076522760535056022491 -0.0558752007782459259033203125 +-0.529007416963577337121193977509 -0.728115302324295110558693977509 0 +-0.529007416963577337121193977509 0.728115302324295110558693977509 0 +-0.528531852364540144506577235006 -0.131270699948072444573909933752 0.0769565470516681698898153740629 +-0.528531852364540144506577235006 0.131270699948072444573909933752 0.0769565470516681698898153740629 +-0.528409063816070556640625 -0.0268112007528543486167826870314 0.377577841281890869140625 +-0.528409063816070556640625 0.0268112007528543486167826870314 0.377577841281890869140625 +-0.528273999691009521484375 -0.571137011051177978515625 -0.628274977207183837890625 +-0.528273999691009521484375 0.571137011051177978515625 -0.628274977207183837890625 +-0.528007692098617642528779470013 -0.150536654889583593197599498126 -0.0323488004505634307861328125 +-0.528007692098617642528779470013 0.150536654889583593197599498126 -0.0323488004505634307861328125 +-0.527981302142143338329560720013 0 0.154064352810382859670923494377 +-0.527631530165672324450554242503 -0.104378302767872813139327092813 0.658186444640159629138054242503 +-0.527631530165672324450554242503 0.104378302767872813139327092813 0.658186444640159629138054242503 +-0.52758915722370147705078125 -0.0883410021662712208190271212516 -0.127850250154733668939144308752 +-0.52758915722370147705078125 0.0883410021662712208190271212516 -0.127850250154733668939144308752 +-0.527449786663055419921875 -0.168190205097198480777009876874 -0.231319195032119728772102007497 +-0.527449786663055419921875 0.168190205097198480777009876874 -0.231319195032119728772102007497 +-0.5274329483509063720703125 -0.151079501211643235647485994377 0.0385973479598760646491761860943 +-0.5274329483509063720703125 0.151079501211643235647485994377 0.0385973479598760646491761860943 +-0.527409601211547895971420985006 -0.317875194549560591283920985006 0.510680007934570356908920985006 +-0.527409601211547895971420985006 0.317875194549560591283920985006 0.510680007934570356908920985006 +-0.527399489283561728747429242503 -0.313236039876937877313167746252 0.58841590583324432373046875 +-0.527399489283561728747429242503 0.313236039876937877313167746252 0.58841590583324432373046875 +-0.527169013023376487048210492503 -0.066229797899723052978515625 0.278758800029754616467414507497 +-0.527169013023376487048210492503 0.066229797899723052978515625 0.278758800029754616467414507497 +-0.527155953645706110144431022491 -0.226738402992486931530891069997 0.757096821069717318408720529987 +-0.527155953645706110144431022491 0.226738402992486931530891069997 0.757096821069717318408720529987 +-0.527128720283508211963408029987 -0.453186982870101895404246761245 0.0822016999125480540833166287484 +-0.527128720283508211963408029987 0.453186982870101895404246761245 0.0822016999125480540833166287484 +-0.5270671844482421875 -0.528704786300659201891960492503 0.287526392936706565173210492503 +-0.5270671844482421875 0.528704786300659201891960492503 0.287526392936706565173210492503 +-0.526957195997238114770766514994 -0.32595570385456085205078125 0.32568199932575225830078125 +-0.526957195997238114770766514994 0.32595570385456085205078125 0.32568199932575225830078125 +-0.526912456750869728772102007497 -0.627054360508918717798110264994 -0.227301041781902302130191628748 +-0.526912456750869728772102007497 0.627054360508918717798110264994 -0.227301041781902302130191628748 +-0.526876711845397860400908029987 -0.227402693033218361584602007497 -0.400859892368316650390625 +-0.526876711845397860400908029987 0.227402693033218361584602007497 -0.400859892368316650390625 +-0.526572883129119873046875 -0.154079096019268030337556751874 0.434718894958496082647769753748 +-0.526572883129119873046875 0.154079096019268030337556751874 0.434718894958496082647769753748 +-0.526372006535530179149873220013 -0.110652300715446474943526311563 0.114841099828481688072123745314 +-0.526372006535530179149873220013 0.110652300715446474943526311563 0.114841099828481688072123745314 +-0.526224616169929548803452235006 -0.0448250006884336540946556226572 0.153551748394966131039396373126 +-0.526224616169929548803452235006 0.0448250006884336540946556226572 0.153551748394966131039396373126 +-0.526104784011840798108039507497 -0.0428921978920698207526918110943 -0.379307484626770052837940738755 +-0.526104784011840798108039507497 0.0428921978920698207526918110943 -0.379307484626770052837940738755 +-0.52607034146785736083984375 -0.237916250526905070916683371252 -0.298572941124439272808643863755 +-0.52607034146785736083984375 0.237916250526905070916683371252 -0.298572941124439272808643863755 +-0.526026135683059670178352007497 -0.127667149156332010440095814374 -0.359858217835426319464176003748 +-0.526026135683059670178352007497 0.127667149156332010440095814374 -0.359858217835426319464176003748 +-0.525900793075561590050881477509 -0.185960805416107183285490123126 0.573451995849609375 +-0.525900793075561590050881477509 0.185960805416107183285490123126 0.573451995849609375 +-0.525886365771293662341179242503 -0.0223531004041433341289479841407 -0.15951155126094818115234375 +-0.525886365771293662341179242503 0.0223531004041433341289479841407 -0.15951155126094818115234375 +-0.5258617103099822998046875 -0.382058936357498157843082253748 0 +-0.5258617103099822998046875 0.382058936357498157843082253748 0 +-0.52573001384735107421875 0 -0.8506519794464111328125 +-0.525576603412628129419204014994 -0.173955005407333357370092130623 0.231319802999496448858707253748 +-0.525576603412628129419204014994 0.173955005407333357370092130623 0.231319802999496448858707253748 +-0.525526177883148259972756477509 -0.721352702379226662365852007497 0.116074794530868538600110184689 +-0.525526177883148259972756477509 0.721352702379226662365852007497 0.116074794530868538600110184689 +-0.525506785511970497815070757497 -0.07174894772469997406005859375 0.375759166479110728875667746252 +-0.525506785511970497815070757497 0.07174894772469997406005859375 0.375759166479110728875667746252 +-0.525480794906616255346420985006 -0.260422396659851063116519753748 -0.5441048145294189453125 +-0.525480794906616255346420985006 0.260422396659851063116519753748 -0.5441048145294189453125 +-0.525034010410308837890625 -0.790111005306243896484375 -0.316327989101409912109375 +-0.525034010410308837890625 0.790111005306243896484375 -0.316327989101409912109375 +-0.524958300590515181127670985006 0 -0.731039392948150679174545985006 +-0.524917387962341330798210492503 -0.452603191137313787262286268742 -0.0980412960052490234375 +-0.524917387962341330798210492503 0.452603191137313787262286268742 -0.0980412960052490234375 +-0.524804782867431707238381477509 -0.580238389968872114721420985006 -0.167041599750518798828125 +-0.524804782867431707238381477509 0.580238389968872114721420985006 -0.167041599750518798828125 +-0.524762010574340798108039507497 -0.416424417495727505755809261245 0.203016099333763105905248380623 +-0.524762010574340798108039507497 0.416424417495727505755809261245 0.203016099333763105905248380623 +-0.524735987186431884765625 -0.545103013515472412109375 0.6538460254669189453125 +-0.524735987186431884765625 0.545103013515472412109375 0.6538460254669189453125 +-0.524676603078842118677016514994 -0.267201209068298306537059261245 0.378574001789093006475894753748 +-0.524676603078842118677016514994 0.267201209068298306537059261245 0.378574001789093006475894753748 +-0.524656495451927162854133257497 -0.623202848434448175574118522491 -0.488727512955665577276676003748 +-0.524656495451927162854133257497 0.623202848434448175574118522491 -0.488727512955665577276676003748 +-0.524344503879547119140625 -0.52892625331878662109375 0.08831924758851528167724609375 +-0.524344503879547119140625 0.52892625331878662109375 0.08831924758851528167724609375 +-0.52403251826763153076171875 -0.196159489452838897705078125 0.4994114935398101806640625 +-0.52403251826763153076171875 0.196159489452838897705078125 0.4994114935398101806640625 +-0.523950994014739990234375 -0.840176999568939208984375 0.13992099463939666748046875 +-0.523950994014739990234375 0.840176999568939208984375 0.13992099463939666748046875 +-0.523685011267661981726462272491 -0.561748024821281388696547764994 0.364270898699760425909488503748 +-0.523685011267661981726462272491 0.561748024821281388696547764994 0.364270898699760425909488503748 +-0.523651474714279197009147992503 -0.722714406251907415246193977509 -0.116074794530868538600110184689 +-0.523651474714279197009147992503 0.722714406251907415246193977509 -0.116074794530868538600110184689 +-0.523621225357055686266960492503 -0.449759674072265636102230246252 0.496021735668182361944644753748 +-0.523621225357055686266960492503 0.449759674072265636102230246252 0.496021735668182361944644753748 +-0.523490011692047119140625 -0.843910992145538330078125 -0.11734999716281890869140625 +-0.523490011692047119140625 0.843910992145538330078125 -0.11734999716281890869140625 +-0.523462486267089910363381477509 -0.453782719373703014031917746252 0.574515008926391623766960492503 +-0.523462486267089910363381477509 0.453782719373703014031917746252 0.574515008926391623766960492503 +-0.523418974876403764184829014994 -0.6678577363491058349609375 0.0499936006963253021240234375 +-0.523418974876403764184829014994 0.6678577363491058349609375 0.0499936006963253021240234375 +-0.52326257526874542236328125 -0.168792148679494852236970814374 -0.648232954740524225378806022491 +-0.52326257526874542236328125 0.168792148679494852236970814374 -0.648232954740524225378806022491 +-0.523105216026306107934829014994 -0.291742193698883045538394753748 0.0353154011070728260368589701557 +-0.523105216026306107934829014994 0.291742193698883045538394753748 0.0353154011070728260368589701557 +-0.52308188378810882568359375 -0.169957154989242575915397992503 0 +-0.52308188378810882568359375 0.169957154989242575915397992503 0 +-0.523075157403945945056022992503 -0.314883403480052947998046875 0.22302670776844024658203125 +-0.523075157403945945056022992503 0.314883403480052947998046875 0.22302670776844024658203125 +-0.522951447963714621813835492503 -0.0567026473581790924072265625 -0.667686897516250543738181022491 +-0.522951447963714621813835492503 0.0567026473581790924072265625 -0.667686897516250543738181022491 +-0.522944390773773193359375 -0.291122996807098355365184261245 -0.042149998247623443603515625 +-0.522944390773773193359375 0.291122996807098355365184261245 -0.042149998247623443603515625 +-0.5228947699069976806640625 -0.49220998585224151611328125 0.216358490288257598876953125 +-0.5228947699069976806640625 0.49220998585224151611328125 0.216358490288257598876953125 +-0.522804594039916969983039507497 -0.6708033084869384765625 -0.29444579780101776123046875 +-0.522804594039916969983039507497 0.6708033084869384765625 -0.29444579780101776123046875 +-0.5226442515850067138671875 -0.3797189891338348388671875 0.380994021892547607421875 +-0.5226442515850067138671875 0.3797189891338348388671875 0.380994021892547607421875 +-0.522540917992591835705695757497 -0.171007252484560001715152566248 0.64823381602764129638671875 +-0.522540917992591835705695757497 0.171007252484560001715152566248 0.64823381602764129638671875 +-0.522508561611175537109375 -0.379623793065547943115234375 -0.696685367822647116931022992503 +-0.522508561611175537109375 0.379623793065547943115234375 -0.696685367822647116931022992503 +-0.522499024868011474609375 -0.852639973163604736328125 0 +-0.522499024868011474609375 0.852639973163604736328125 0 +-0.522386139631271451122529470013 -0.0666280999779701316176883096887 -0.158661794662475597039730246252 +-0.522386139631271451122529470013 0.0666280999779701316176883096887 -0.158661794662475597039730246252 +-0.522278988361358664782585492503 -0.260329806804656949115184261245 0.139473599195480330026342130623 +-0.522278988361358664782585492503 0.260329806804656949115184261245 0.139473599195480330026342130623 +-0.522215926647186301501335492503 -0.1903477050364017486572265625 -0.770427227020263671875 +-0.522215926647186301501335492503 0.1903477050364017486572265625 -0.770427227020263671875 +-0.5222059786319732666015625 -0.668014135956764176782485264994 -0.0596504468470811857749858120314 +-0.5222059786319732666015625 0.668014135956764176782485264994 -0.0596504468470811857749858120314 +-0.522199603915214582983139735006 -0.379397833347320578845085492503 0.0765823476016521537124148721887 +-0.522199603915214582983139735006 0.379397833347320578845085492503 0.0765823476016521537124148721887 +-0.522172826528549238744858485006 -0.305282700061798084600894753748 0.666436511278152510229233485006 +-0.522172826528549238744858485006 0.305282700061798084600894753748 0.666436511278152510229233485006 +-0.521948397159576416015625 -0.107755798101425173673995061563 0.275606399774551369397102007497 +-0.521948397159576416015625 0.107755798101425173673995061563 0.275606399774551369397102007497 +-0.52177651226520538330078125 -0.52835248410701751708984375 -0.1053232513368129730224609375 +-0.52177651226520538330078125 0.52835248410701751708984375 -0.1053232513368129730224609375 +-0.52147798240184783935546875 -0.09959399700164794921875 -0.529756486415863037109375 +-0.52147798240184783935546875 0.09959399700164794921875 -0.529756486415863037109375 +-0.521448183059692316199118522491 -0.092798300087451934814453125 -0.457690089941024724762286268742 +-0.521448183059692316199118522491 0.092798300087451934814453125 -0.457690089941024724762286268742 +-0.521022737026214599609375 -0.771559602022170998303352007497 0.189026246964931476934879128748 +-0.521022737026214599609375 0.771559602022170998303352007497 0.189026246964931476934879128748 +-0.521022021770477294921875 -0.1335220038890838623046875 -0.8430349826812744140625 +-0.521022021770477294921875 0.1335220038890838623046875 -0.8430349826812744140625 +-0.520967146754264920360810720013 -0.0893519014120102011977664346887 0.152017803490161917956413617503 +-0.520967146754264920360810720013 0.0893519014120102011977664346887 0.152017803490161917956413617503 +-0.520763397216796875 -0.66878102719783782958984375 -0.428996260464191425665347878748 +-0.520763397216796875 0.66878102719783782958984375 -0.428996260464191425665347878748 +-0.520760992169380210192741742503 -0.335013051331043254510433371252 -0.58230102062225341796875 +-0.520760992169380210192741742503 0.335013051331043254510433371252 -0.58230102062225341796875 +-0.52064283192157745361328125 -0.378267505764961264880241742503 -0.0913483969867229517181073106258 +-0.52064283192157745361328125 0.378267505764961264880241742503 -0.0913483969867229517181073106258 +-0.52019847929477691650390625 -0.316768504679203033447265625 0.437665522098541259765625 +-0.52019847929477691650390625 0.316768504679203033447265625 0.437665522098541259765625 +-0.520157304406166143273537727509 -0.220426043868064885922208873126 0.321478956937789939196647992503 +-0.520157304406166143273537727509 0.220426043868064885922208873126 0.321478956937789939196647992503 +-0.520085406303405717309829014994 -0.0787200003862380953689736884371 -0.288642007112503040655582253748 +-0.520085406303405717309829014994 0.0787200003862380953689736884371 -0.288642007112503040655582253748 +-0.519922637939453147204460492503 -0.116735447943210599031083063437 0.372227701544761646612613503748 +-0.519922637939453147204460492503 0.116735447943210599031083063437 0.372227701544761646612613503748 +-0.51981379091739654541015625 -0.147057901322841660940454744377 -0.103285052627325069085628683752 +-0.51981379091739654541015625 0.147057901322841660940454744377 -0.103285052627325069085628683752 +-0.519559192657470747533920985006 -0.608324003219604558800881477509 0 +-0.519559192657470747533920985006 0.608324003219604558800881477509 0 +-0.519471609592437766345085492503 -0.238407003879547108038394753748 0.182514595985412586554019753748 +-0.519471609592437766345085492503 0.238407003879547108038394753748 0.182514595985412586554019753748 +-0.519270014762878373559829014994 -0.142336195707321172543302623126 -0.264761996269226085320980246252 +-0.519270014762878373559829014994 0.142336195707321172543302623126 -0.264761996269226085320980246252 +-0.519106623530387834009047764994 -0.706317406892776444848891514994 0.366257289052009549212840511245 +-0.519106623530387834009047764994 0.706317406892776444848891514994 0.366257289052009549212840511245 +-0.519033464789390497351462272491 -0.775420424342155412134047764994 -0.178401454538106907232730691248 +-0.519033464789390497351462272491 0.775420424342155412134047764994 -0.178401454538106907232730691248 +-0.518931055068969748766960492503 -0.167864955961704254150390625 -0.0709340475499630057631961221887 +-0.518931055068969748766960492503 0.167864955961704254150390625 -0.0709340475499630057631961221887 +-0.518494358658790677196748220013 -0.169210253655910497494474498126 0.0709340475499630057631961221887 +-0.518494358658790677196748220013 0.169210253655910497494474498126 0.0709340475499630057631961221887 +-0.5183347165584564208984375 -0.343934488296508800164730246252 0.188514949381351465396150501874 +-0.5183347165584564208984375 0.343934488296508800164730246252 0.188514949381351465396150501874 +-0.518108245730400152062600227509 -0.125893352925777440853849498126 -0.134961753338575379812525056877 +-0.518108245730400152062600227509 0.125893352925777440853849498126 -0.134961753338575379812525056877 +-0.518075180053711004113381477509 -0.441482400894165072369190738755 0.420346403121948264391960492503 +-0.518075180053711004113381477509 0.441482400894165072369190738755 0.420346403121948264391960492503 +-0.518043893575668379369858485006 -0.148842649161815665515007367503 0.109435699135065081510909124063 +-0.518043893575668379369858485006 0.148842649161815665515007367503 0.109435699135065081510909124063 +-0.5176574885845184326171875 -0.4143382608890533447265625 -0.350506491959095001220703125 +-0.5176574885845184326171875 0.4143382608890533447265625 -0.350506491959095001220703125 +-0.5173852443695068359375 -0.19811175763607025146484375 -0.50553376972675323486328125 +-0.5173852443695068359375 0.19811175763607025146484375 -0.50553376972675323486328125 +-0.517323017120361328125 0 -0.54302550852298736572265625 +-0.517298394441604636462272992503 -0.467329484224319469110042746252 -0.5692149102687835693359375 +-0.517298394441604636462272992503 0.467329484224319469110042746252 -0.5692149102687835693359375 +-0.517173302173614457544204014994 -0.375746709108352616723891514994 -0.285212197899818387103465511245 +-0.517173302173614457544204014994 0.375746709108352616723891514994 -0.285212197899818387103465511245 +-0.517090690135955766137954014994 -0.3399963080883026123046875 -0.32713939249515533447265625 +-0.517090690135955766137954014994 0.3399963080883026123046875 -0.32713939249515533447265625 +-0.517082405090331986841079014994 -0.255193197727203335833934261245 -0.165837603807449329718082253748 +-0.517082405090331986841079014994 0.255193197727203335833934261245 -0.165837603807449329718082253748 +-0.516993606090545676501335492503 -0.2857325971126556396484375 0.10523580014705657958984375 +-0.516993606090545676501335492503 0.2857325971126556396484375 0.10523580014705657958984375 +-0.51693570613861083984375 -0.238964411616325395071314119377 -0.696903294324874855725227007497 +-0.51693570613861083984375 0.238964411616325395071314119377 -0.696903294324874855725227007497 +-0.51681840419769287109375 0 -0.304792213439941395147769753748 +-0.516745615005493208471420985006 -0.484591197967529307977230246252 -0.371679210662841819079460492503 +-0.516745615005493208471420985006 0.484591197967529307977230246252 -0.371679210662841819079460492503 +-0.5167218148708343505859375 0 -0.472227013111114479748664507497 +-0.516721582412719704358039507497 -0.443789577484130892681690738755 -0.419582414627075239721420985006 +-0.516721582412719704358039507497 0.443789577484130892681690738755 -0.419582414627075239721420985006 +-0.516573405265808083264289507497 -0.184856700897216785772769753748 -0.434718185663223233294871761245 +-0.516573405265808083264289507497 0.184856700897216785772769753748 -0.434718185663223233294871761245 +-0.516462692618370078356804242503 -0.209639948606491099969417746252 -0.33439119160175323486328125 +-0.516462692618370078356804242503 0.209639948606491099969417746252 -0.33439119160175323486328125 +-0.516382899880409307336037727509 0 -0.189336955547332791427450615629 +-0.516356801986694313733039507497 -0.560495185852050825658920985006 0.243352794647216819079460492503 +-0.516356801986694313733039507497 0.560495185852050825658920985006 0.243352794647216819079460492503 +-0.5163350403308868408203125 -0.6560631692409515380859375 0.159622354060411447695955189374 +-0.5163350403308868408203125 0.6560631692409515380859375 0.159622354060411447695955189374 +-0.51621179282665252685546875 -0.289483344554901156353565738755 0.268747054040431976318359375 +-0.51621179282665252685546875 0.289483344554901156353565738755 0.268747054040431976318359375 +-0.51619398593902587890625 -0.375032007694244384765625 0.769995987415313720703125 +-0.51619398593902587890625 0.375032007694244384765625 0.769995987415313720703125 +-0.51614177227020263671875 -0.374997742474079132080078125 -0.3943019807338714599609375 +-0.51614177227020263671875 0.374997742474079132080078125 -0.3943019807338714599609375 +-0.51598124206066131591796875 -0.45112426578998565673828125 -0.30454950034618377685546875 +-0.51598124206066131591796875 0.45112426578998565673828125 -0.30454950034618377685546875 +-0.515900012850761480187600227509 -0.0226875009015202536155619839064 0.189295157790184048751669365629 +-0.515900012850761480187600227509 0.0226875009015202536155619839064 0.189295157790184048751669365629 +-0.515651947259903042919404470013 -0.188564205169677756579460492503 0.0323488004505634307861328125 +-0.515651947259903042919404470013 0.188564205169677756579460492503 0.0323488004505634307861328125 +-0.515596914291381769324118522491 -0.202947506308555597476228626874 0.427752488851547207904246761245 +-0.515596914291381769324118522491 0.202947506308555597476228626874 0.427752488851547207904246761245 +-0.515505638718605108117287727509 -0.187787045538425456658870871252 -0.0385973479598760646491761860943 +-0.515505638718605108117287727509 0.187787045538425456658870871252 -0.0385973479598760646491761860943 +-0.515442204475402787622329014994 -0.444203883409500066559161268742 0.164324302971363050973607755623 +-0.515442204475402787622329014994 0.444203883409500066559161268742 0.164324302971363050973607755623 +-0.515138411521911643298210492503 -0.2320362031459808349609375 -0.201968407630920415707365123126 +-0.515138411521911643298210492503 0.2320362031459808349609375 -0.201968407630920415707365123126 +-0.515106165409088156970085492503 -0.452408048510551441534488503748 0.657642269134521506579460492503 +-0.515106165409088156970085492503 0.452408048510551441534488503748 0.657642269134521506579460492503 +-0.515062379837036177221420985006 -0.106604003906250008326672684689 -0.602781581878662153783920985006 +-0.515062379837036177221420985006 0.106604003906250008326672684689 -0.602781581878662153783920985006 +-0.514682862162590071264389735006 -0.0445967480540275587608256557814 -0.188713791966438310110376619377 +-0.514682862162590071264389735006 0.0445967480540275587608256557814 -0.188713791966438310110376619377 +-0.514475369453430197985710492503 -0.584679391980171159204360264994 -0.544026064872741632605368522491 +-0.514475369453430197985710492503 0.584679391980171159204360264994 -0.544026064872741632605368522491 +-0.514362609386444069592414507497 -0.148393195867538435495092130623 0.270944398641586314813167746252 +-0.514362609386444069592414507497 0.148393195867538435495092130623 0.270944398641586314813167746252 +-0.514318189024925320751435720013 -0.127848602831363677978515625 0.147076603770256053582698996252 +-0.514318189024925320751435720013 0.127848602831363677978515625 0.147076603770256053582698996252 +-0.51429505646228790283203125 -0.597468388080596879419204014994 0.317854945361614238397152121252 +-0.51429505646228790283203125 0.597468388080596879419204014994 0.317854945361614238397152121252 +-0.514249813556671098169204014994 -0.282548403739929177014289507497 -0.12535379827022552490234375 +-0.514249813556671098169204014994 0.282548403739929177014289507497 -0.12535379827022552490234375 +-0.514228391647338800574118522491 -0.409299796819686867443977007497 -0.240921798348426807745426003748 +-0.514228391647338800574118522491 0.409299796819686867443977007497 -0.240921798348426807745426003748 +-0.513930293917655989233139735006 -0.0855757452547550173660440009371 -0.388655167818069469110042746252 +-0.513930293917655989233139735006 0.0855757452547550173660440009371 -0.388655167818069469110042746252 +-0.513695058226585454796975227509 -0.103086496889591219816573186563 -0.167303948104381566830411998126 +-0.513695058226585454796975227509 0.103086496889591219816573186563 -0.167303948104381566830411998126 +-0.513304805755615212170539507497 -0.522796010971069313733039507497 -0.32125198841094970703125 +-0.513304805755615212170539507497 0.522796010971069313733039507497 -0.32125198841094970703125 +-0.513285613059997536389289507497 -0.214934402704238886050447376874 0.224368196725845320260717130623 +-0.513285613059997536389289507497 0.214934402704238886050447376874 0.224368196725845320260717130623 +-0.513241177797317482678352007497 -0.702181774377822920385483485006 0.231353107094764726126001619377 +-0.513241177797317482678352007497 0.702181774377822920385483485006 0.231353107094764726126001619377 +-0.512832623720169133996193977509 -0.590649300813674948962272992503 0.44512559473514556884765625 +-0.512832623720169133996193977509 0.590649300813674948962272992503 0.44512559473514556884765625 +-0.512753009796142578125 -0.693774998188018798828125 0.505726993083953857421875 +-0.512753009796142578125 0.693774998188018798828125 0.505726993083953857421875 +-0.512672805786132834704460492503 -0.606920814514160245067841970013 0.093879997730255126953125 +-0.512672805786132834704460492503 0.606920814514160245067841970013 0.093879997730255126953125 +-0.512574017047882080078125 -0.5241069793701171875 -0.68013298511505126953125 +-0.512574017047882080078125 0.5241069793701171875 -0.68013298511505126953125 +-0.51249901950359344482421875 -0.656688767671585016394431022491 -0.169127898663282399960294810626 +-0.51249901950359344482421875 0.656688767671585016394431022491 -0.169127898663282399960294810626 +-0.512451219558715864721420985006 -0.241003203392028825247095369377 0.565076017379760764391960492503 +-0.512451219558715864721420985006 0.241003203392028825247095369377 0.565076017379760764391960492503 +-0.512350285053253196032585492503 -0.0675003986805677441696005303129 0.188257294893264787161157869377 +-0.512350285053253196032585492503 0.0675003986805677441696005303129 0.188257294893264787161157869377 +-0.512303653359413080359274772491 -0.60284529626369476318359375 0.525949457287788413317741742503 +-0.512303653359413080359274772491 0.60284529626369476318359375 0.525949457287788413317741742503 +-0.512299901247024513928352007497 -0.475238388776779152600227007497 0.0412013012915849671791157504686 +-0.512299901247024513928352007497 0.475238388776779152600227007497 0.0412013012915849671791157504686 +-0.511730039119720481188835492503 -0.160758646577596669979826060626 0.367135590314865145611378238755 +-0.511730039119720481188835492503 0.160758646577596669979826060626 0.367135590314865145611378238755 +-0.511622089147567793432358485006 0 0.740434473752975441662727007497 +-0.511585199832916281970085492503 -0.313497591018676746710269753748 0 +-0.511585199832916281970085492503 0.313497591018676746710269753748 0 +-0.5115543901920318603515625 -0.475283199548721280169871761245 -0.0491749979555606842041015625 +-0.5115543901920318603515625 0.475283199548721280169871761245 -0.0491749979555606842041015625 +-0.511444509029388427734375 -0.3333457410335540771484375 -0.43566597998142242431640625 +-0.511444509029388427734375 0.3333457410335540771484375 -0.43566597998142242431640625 +-0.511337527632713340075554242503 -0.711962294578552201684829014994 -0.366256354749202706067023882497 +-0.511337527632713340075554242503 0.711962294578552201684829014994 -0.366256354749202706067023882497 +-0.5112307369709014892578125 -0.5203342437744140625 0.1743427477777004241943359375 +-0.5112307369709014892578125 0.5203342437744140625 0.1743427477777004241943359375 +-0.51112425327301025390625 -0.48512850701808929443359375 -0.2567144930362701416015625 +-0.51112425327301025390625 0.48512850701808929443359375 -0.2567144930362701416015625 +-0.511070284247398420873764735006 -0.371311196684837363513054242503 0.153084748983383173159822376874 +-0.511070284247398420873764735006 0.371311196684837363513054242503 0.153084748983383173159822376874 +-0.5105559825897216796875 -0.210291194915771501028345369377 -0.578887176513671941613381477509 +-0.5105559825897216796875 0.210291194915771501028345369377 -0.578887176513671941613381477509 +-0.510554409027099587170539507497 -0.20769059658050537109375 -0.237063592672348000256477007497 +-0.510554409027099587170539507497 0.20769059658050537109375 -0.237063592672348000256477007497 +-0.510444545745849631579460492503 -0.515798711776733420641960492503 -0.442603492736816372943309261245 +-0.510444545745849631579460492503 0.515798711776733420641960492503 -0.442603492736816372943309261245 +-0.510441589355468794408920985006 0 -0.615994405746460027550881477509 +-0.5104350149631500244140625 -0.247950755059719085693359375 0.490384519100189208984375 +-0.5104350149631500244140625 0.247950755059719085693359375 0.490384519100189208984375 +-0.510388791561126708984375 0 0.315441584587097145764289507497 +-0.510099661350250199731704014994 -0.292271293699741363525390625 0.746241128444671608654914507497 +-0.510099661350250199731704014994 0.292271293699741363525390625 0.746241128444671608654914507497 +-0.51004898548126220703125 -0.81752097606658935546875 0.2674129903316497802734375 +-0.51004898548126220703125 0.81752097606658935546875 0.2674129903316497802734375 +-0.51002705097198486328125 -0.304477551579475425036491742503 -0.263942900300025928839176003748 +-0.51002705097198486328125 0.304477551579475425036491742503 -0.263942900300025928839176003748 +-0.50988601148128509521484375 0 0.5500147640705108642578125 +-0.509886002540588356701789507497 -0.0740898013114929254729901231258 0.737920814752578757556022992503 +-0.509886002540588356701789507497 0.0740898013114929254729901231258 0.737920814752578757556022992503 +-0.509717607498168967516960492503 -0.606347990036010808800881477509 -0.111936795711517336759932561563 +-0.509717607498168967516960492503 0.606347990036010808800881477509 -0.111936795711517336759932561563 +-0.509313219785690329821647992503 -0.230028687417507177181974498126 0.640458014607429459985610264994 +-0.509313219785690329821647992503 0.230028687417507177181974498126 0.640458014607429459985610264994 +-0.509216415882110640112045985006 -0.705105918645858809057358485006 -0.231353107094764726126001619377 +-0.509216415882110640112045985006 0.705105918645858809057358485006 -0.231353107094764726126001619377 +-0.509167206287383988794204014994 -0.0414840012788772541374449076557 0.314686810970306374279914507497 +-0.509167206287383988794204014994 0.0414840012788772541374449076557 0.314686810970306374279914507497 +-0.509122592210769608911391514994 -0.0288750011473894105384907504686 0.479542016983032171051348768742 +-0.509122592210769608911391514994 0.0288750011473894105384907504686 0.479542016983032171051348768742 +-0.509057414531707719262954014994 -0.309670794010162342413394753748 0.0704585999250411931793536268742 +-0.509057414531707719262954014994 0.309670794010162342413394753748 0.0704585999250411931793536268742 +-0.509028089046478227075454014994 -0.3100048005580902099609375 -0.367134612798690751489516514994 +-0.509028089046478227075454014994 0.3100048005580902099609375 -0.367134612798690751489516514994 +-0.509018260240554853979233485006 -0.336679199337959311755241742503 -0.223713098466396337338224498126 +-0.509018260240554853979233485006 0.336679199337959311755241742503 -0.223713098466396337338224498126 +-0.508983159065246604235710492503 0 -0.404272711277008089947315738755 +-0.508974054455757163317741742503 -0.402469611167907748150440738755 0.0382629010826349286178427178129 +-0.508974054455757163317741742503 0.402469611167907748150440738755 0.0382629010826349286178427178129 +-0.508972799777984596936164507497 -0.0394901990890502915809712192186 -0.315257406234741188733039507497 +-0.508972799777984596936164507497 0.0394901990890502915809712192186 -0.315257406234741188733039507497 +-0.5087950229644775390625 -0.825174987316131591796875 -0.24538700282573699951171875 +-0.5087950229644775390625 0.825174987316131591796875 -0.24538700282573699951171875 +-0.50856697559356689453125 -0.0412979982793331146240234375 0.860032021999359130859375 +-0.50856697559356689453125 0.0412979982793331146240234375 0.860032021999359130859375 +-0.508491742610931440893295985006 -0.170728358626365678274439119377 -0.367134931683540333136051003748 +-0.508491742610931440893295985006 0.170728358626365678274439119377 -0.367134931683540333136051003748 +-0.50847934186458587646484375 -0.55812443792819976806640625 -0.390443260967731464727847878748 +-0.50847934186458587646484375 0.55812443792819976806640625 -0.390443260967731464727847878748 +-0.50833378732204437255859375 -0.402505990862846385613948996252 -0.045670948922634124755859375 +-0.50833378732204437255859375 0.402505990862846385613948996252 -0.045670948922634124755859375 +-0.508298683166503839636618522491 -0.439817684888839710577457253748 -0.195430207252502430304019753748 +-0.508298683166503839636618522491 0.439817684888839710577457253748 -0.195430207252502430304019753748 +-0.50819022953510284423828125 -0.06112500093877315521240234375 0.54818473756313323974609375 +-0.50819022953510284423828125 0.06112500093877315521240234375 0.54818473756313323974609375 +-0.508134546875953718725327235006 -0.210473999381065396407919365629 0 +-0.508134546875953718725327235006 0.210473999381065396407919365629 0 +-0.5080440044403076171875 -0.117608401179313648565738503748 -0.2967486083507537841796875 +-0.5080440044403076171875 0.117608401179313648565738503748 -0.2967486083507537841796875 +-0.507995402812957741467414507497 -0.30802381038665771484375 -0.084035396575927734375 +-0.507995402812957741467414507497 0.30802381038665771484375 -0.084035396575927734375 +-0.5077494084835052490234375 -0.414790213108062744140625 -0.6165540218353271484375 +-0.5077494084835052490234375 0.414790213108062744140625 -0.6165540218353271484375 +-0.507614913582801752234274772491 -0.368799698352813731805355246252 0.573422771692275956567641514994 +-0.507614913582801752234274772491 0.368799698352813731805355246252 0.573422771692275956567641514994 +-0.507476192712783769067641514994 -0.311751294136047352179019753748 0.367803102731704689709602007497 +-0.507476192712783769067641514994 0.311751294136047352179019753748 0.367803102731704689709602007497 +-0.507048854231834433825554242503 -0.105477353185415276271008622189 0.185137706995010392629907869377 +-0.507048854231834433825554242503 0.105477353185415276271008622189 0.185137706995010392629907869377 +-0.506977912783622808312600227509 -0.186562207341194163934261496252 0.103285052627325069085628683752 +-0.506977912783622808312600227509 0.186562207341194163934261496252 0.103285052627325069085628683752 +-0.506805738806724637157685720013 -0.0810766011476516806899539346887 -0.197673296928405767269865123126 +-0.506805738806724637157685720013 0.0810766011476516806899539346887 -0.197673296928405767269865123126 +-0.50680124759674072265625 -0.55109475553035736083984375 0.044120999984443187713623046875 +-0.50680124759674072265625 0.55109475553035736083984375 0.044120999984443187713623046875 +-0.506800794601440451891960492503 -0.368208003044128429070980246252 0.497569608688354536596420985006 +-0.506800794601440451891960492503 0.368208003044128429070980246252 0.497569608688354536596420985006 +-0.506748819351196311266960492503 -0.408961582183837935033920985006 -0.46471118927001953125 +-0.506748819351196311266960492503 0.408961582183837935033920985006 -0.46471118927001953125 +-0.50672900676727294921875 -0.2664020061492919921875 -0.819912016391754150390625 +-0.50672900676727294921875 0.2664020061492919921875 -0.819912016391754150390625 +-0.506672260165214494165297764994 -0.282489001750946044921875 -0.62127603590488433837890625 +-0.506672260165214494165297764994 0.282489001750946044921875 -0.62127603590488433837890625 +-0.50662051141262054443359375 -0.4290374815464019775390625 0.348944999277591705322265625 +-0.50662051141262054443359375 0.4290374815464019775390625 0.348944999277591705322265625 +-0.506595635414123557360710492503 -0.184078404307365439684929242503 -0.109435699135065081510909124063 +-0.506595635414123557360710492503 0.184078404307365439684929242503 -0.109435699135065081510909124063 +-0.506519979238510109631477007497 -0.368004000186920143811164507497 0.31305049359798431396484375 +-0.506519979238510109631477007497 0.368004000186920143811164507497 0.31305049359798431396484375 +-0.506490421295166082238381477509 -0.557628011703491188733039507497 -0.26929199695587158203125 +-0.506490421295166082238381477509 0.557628011703491188733039507497 -0.26929199695587158203125 +-0.506240075826644875256477007497 -0.144902694225311295950220369377 0.729879283905029319079460492503 +-0.506240075826644875256477007497 0.144902694225311295950220369377 0.729879283905029319079460492503 +-0.506046581268310591283920985006 -0.514121425151825017785256477509 0.5381415188312530517578125 +-0.506046581268310591283920985006 0.514121425151825017785256477509 0.5381415188312530517578125 +-0.505971390008926436010483485006 -0.162801100313663488217130748126 -0.141381897032260894775390625 +-0.505971390008926436010483485006 0.162801100313663488217130748126 -0.141381897032260894775390625 +-0.505948302149772710656350227509 -0.262176857888698600085319867503 0.312697444856166850701839621252 +-0.505948302149772710656350227509 0.262176857888698600085319867503 0.312697444856166850701839621252 +-0.505920791625976584704460492503 -0.0859088994562625801743038778113 0.476092380285263017114516514994 +-0.505920791625976584704460492503 0.0859088994562625801743038778113 0.476092380285263017114516514994 +-0.505809009075164794921875 -0.5512575209140777587890625 -0.05264849960803985595703125 +-0.505809009075164794921875 0.5512575209140777587890625 -0.05264849960803985595703125 +-0.505754697322845503393295985006 -0.206268702447414409295589621252 0.0645424984395503997802734375 +-0.505754697322845503393295985006 0.206268702447414409295589621252 0.0645424984395503997802734375 +-0.505711972713470458984375 -0.11975300312042236328125 0.854350984096527099609375 +-0.505711972713470458984375 0.11975300312042236328125 0.854350984096527099609375 +-0.505508995056152321545539507497 -0.0827700018882751437088174384371 0.312425386905670177117855246252 +-0.505508995056152321545539507497 0.0827700018882751437088174384371 0.312425386905670177117855246252 +-0.505460125207900956567641514994 -0.505656498670577936316306022491 0.459697863459587074963508257497 +-0.505460125207900956567641514994 0.505656498670577936316306022491 0.459697863459587074963508257497 +-0.505032563209533713610710492503 -0.165690243244171142578125 0.141381897032260894775390625 +-0.505032563209533713610710492503 0.165690243244171142578125 0.141381897032260894775390625 +-0.504809489846229531018195757497 -0.366763812303543101922542746252 -0.1820766925811767578125 +-0.504809489846229531018195757497 0.366763812303543101922542746252 -0.1820766925811767578125 +-0.504751485586166448449318977509 -0.204459203779697423764005748126 -0.0769565470516681698898153740629 +-0.504751485586166448449318977509 0.204459203779697423764005748126 -0.0769565470516681698898153740629 +-0.504653388261795066149772992503 -0.630555313825607366418068977509 0.397144791483879100457698996252 +-0.504653388261795066149772992503 0.630555313825607366418068977509 0.397144791483879100457698996252 +-0.504516106843948430871193977509 -0.0223520001396536847904084055472 -0.217862695455551175216513115629 +-0.504516106843948430871193977509 0.0223520001396536847904084055472 -0.217862695455551175216513115629 +-0.504203703999519414757912727509 -0.277635806798934958727897992503 -0.301988700032234214098991742503 +-0.504203703999519414757912727509 0.277635806798934958727897992503 -0.301988700032234214098991742503 +-0.503764200210571222449118522491 -0.276156592369079578741519753748 0.1730867922306060791015625 +-0.503764200210571222449118522491 0.276156592369079578741519753748 0.1730867922306060791015625 +-0.503762412071227960730368522491 -0.190063798427581781558259876874 0.264762604236602749896434261245 +-0.503762412071227960730368522491 0.190063798427581781558259876874 0.264762604236602749896434261245 +-0.50366055965423583984375 -0.317430143058300029412777121252 -0.740313175320625238562399772491 +-0.50366055965423583984375 0.317430143058300029412777121252 -0.740313175320625238562399772491 +-0.50359426438808441162109375 -0.28963874280452728271484375 -0.47434423863887786865234375 +-0.50359426438808441162109375 0.28963874280452728271484375 -0.47434423863887786865234375 +-0.5034287869930267333984375 -0.470622587203979481085269753748 0.122775100171565995643696567186 +-0.5034287869930267333984375 0.470622587203979481085269753748 0.122775100171565995643696567186 +-0.503352606296539328845085492503 -0.182279402017593378237947376874 -0.270943808555603016241519753748 +-0.503352606296539328845085492503 0.182279402017593378237947376874 -0.270943808555603016241519753748 +-0.503351986408233642578125 -0.610920011997222900390625 0.61107599735260009765625 +-0.503351986408233642578125 0.610920011997222900390625 0.61107599735260009765625 +-0.503335988521575905529914507497 -0.596961799263954095984274772491 -0.335840950906276691778629128748 +-0.503335988521575905529914507497 0.596961799263954095984274772491 -0.335840950906276691778629128748 +-0.5033027827739715576171875 -0.139365099370479583740234375 -0.466116017103195168225227007497 +-0.5033027827739715576171875 0.139365099370479583740234375 -0.466116017103195168225227007497 +-0.503277307748794533459602007497 -0.0600668974220752716064453125 -0.743709611892700239721420985006 +-0.503277307748794533459602007497 0.0600668974220752716064453125 -0.743709611892700239721420985006 +-0.503264981508254938269431022491 -0.2701328098773956298828125 -0.404663008451461747583266514994 +-0.503264981508254938269431022491 0.2701328098773956298828125 -0.404663008451461747583266514994 +-0.503114998340606689453125 -0.51614248752593994140625 -0.207297004759311676025390625 +-0.503114998340606689453125 0.51614248752593994140625 -0.207297004759311676025390625 +-0.5031127631664276123046875 -0.1218427531421184539794921875 0.5427082479000091552734375 +-0.5031127631664276123046875 0.1218427531421184539794921875 0.5427082479000091552734375 +-0.503006005287170432360710492503 -0.0465961985290050464958433451557 -0.484575718641281072418536268742 +-0.503006005287170432360710492503 0.0465961985290050464958433451557 -0.484575718641281072418536268742 +-0.502886277437210038598891514994 -0.743643823266029291296774772491 0.310803897678852081298828125 +-0.502886277437210038598891514994 0.743643823266029291296774772491 0.310803897678852081298828125 +-0.502758210897445656506477007497 -0.400435692071914650647102007497 0.277281901240348793713508257497 +-0.502758210897445656506477007497 0.400435692071914650647102007497 0.277281901240348793713508257497 +-0.502527287602424710399873220013 -0.140347345173358922787443248126 -0.173979853093624126092464621252 +-0.502527287602424710399873220013 0.140347345173358922787443248126 -0.173979853093624126092464621252 +-0.502341443300247214587272992503 0 0.412496498227119479107471988755 +-0.502276501059532254345185720013 0 0.224095298349857335873380748126 +-0.502227008342742919921875 -0.364884307980537447857471988755 0.651634204387664839330795985006 +-0.502227008342742919921875 0.364884307980537447857471988755 0.651634204387664839330795985006 +-0.5020503997802734375 -0.591107177734375044408920985006 0.196309602260589605160490123126 +-0.5020503997802734375 0.591107177734375044408920985006 0.196309602260589605160490123126 +-0.5019300878047943115234375 -0.250756093859672513080028011245 0.418553805351257302014289507497 +-0.5019300878047943115234375 0.250756093859672513080028011245 0.418553805351257302014289507497 +-0.501895010471343994140625 -0.446970999240875244140625 0.740485012531280517578125 +-0.501895010471343994140625 0.446970999240875244140625 0.740485012531280517578125 +-0.501860299706459067614616742503 -0.542580160498619012976462272491 -0.59686122834682464599609375 +-0.501860299706459067614616742503 0.542580160498619012976462272491 -0.59686122834682464599609375 +-0.501828324794769353722756477509 -0.744432306289672829358039507497 0.0631592966616153772552166856258 +-0.501828324794769353722756477509 0.744432306289672829358039507497 0.0631592966616153772552166856258 +-0.5017350018024444580078125 -0.46325401961803436279296875 0.310092754662036895751953125 +-0.5017350018024444580078125 0.46325401961803436279296875 0.310092754662036895751953125 +-0.5015822350978851318359375 -0.397099944949150074346988503748 0.115007102489471435546875 +-0.5015822350978851318359375 0.397099944949150074346988503748 0.115007102489471435546875 +-0.50157599151134490966796875 -0.0499530024826526641845703125 -0.5553614795207977294921875 +-0.50157599151134490966796875 0.0499530024826526641845703125 -0.5553614795207977294921875 +-0.501372992992401123046875 -0.702042996883392333984375 -0.505726993083953857421875 +-0.501372992992401123046875 0.702042996883392333984375 -0.505726993083953857421875 +-0.50134648382663726806640625 -0.1487520039081573486328125 -0.53760977089405059814453125 +-0.50134648382663726806640625 0.1487520039081573486328125 -0.53760977089405059814453125 +-0.501273912191391057824318977509 -0.745602285861968971936164507497 -0.052934400737285614013671875 +-0.501273912191391057824318977509 0.745602285861968971936164507497 -0.052934400737285614013671875 +-0.500833594799041770251335492503 -0.113109505921602251921065374063 -0.677400696277618341589743522491 +-0.500833594799041770251335492503 0.113109505921602251921065374063 -0.677400696277618341589743522491 +-0.500818294286727860864516514994 -0.631969067454338007117087272491 0.2688796520233154296875 +-0.500818294286727860864516514994 0.631969067454338007117087272491 0.2688796520233154296875 +-0.500807249546051047595085492503 -0.479833489656448342053352007497 -0.491378182172775235247996761245 +-0.500807249546051047595085492503 0.479833489656448342053352007497 -0.491378182172775235247996761245 +-0.500639733672142095421975227509 -0.05345664918422698974609375 0.411098998785018932000667746252 +-0.500639733672142095421975227509 0.05345664918422698974609375 0.411098998785018932000667746252 +-0.500605291128158547131477007497 -0.205901809036731719970703125 0.3598594963550567626953125 +-0.500605291128158547131477007497 0.205901809036731719970703125 0.3598594963550567626953125 +-0.500574791431427024157585492503 -0.0452325493097305367240501539072 0.223335742950439480880575615629 +-0.500574791431427024157585492503 0.0452325493097305367240501539072 0.223335742950439480880575615629 +-0.500274002552032470703125 -0.4642100036144256591796875 -0.73091399669647216796875 +-0.500274002552032470703125 0.4642100036144256591796875 -0.73091399669647216796875 +-0.500253582000732444079460492503 -0.0330408006906509413291850307814 0.6234223842620849609375 +-0.500253582000732444079460492503 0.0330408006906509413291850307814 0.6234223842620849609375 +-0.500188779830932683800881477509 -0.363407206535339366570980246252 -0.507687997817993230675881477509 +-0.500188779830932683800881477509 0.363407206535339366570980246252 -0.507687997817993230675881477509 +-0.500132977962493896484375 -0.738882005214691162109375 0.4515750110149383544921875 +-0.500132977962493896484375 0.738882005214691162109375 0.4515750110149383544921875 +-0.50008200109004974365234375 -0.363326244056224822998046875 0.42474974691867828369140625 +-0.50008200109004974365234375 0.363326244056224822998046875 0.42474974691867828369140625 +-0.5 0 0 +-0.4999969899654388427734375 -0.19822399318218231201171875 0.84303700923919677734375 +-0.4999969899654388427734375 0.19822399318218231201171875 0.84303700923919677734375 +-0.499618116021156299932926003748 -0.687664452195167474890524772491 0 +-0.499618116021156299932926003748 0.687664452195167474890524772491 0 +-0.499443513154983476098891514994 0 -0.808119380474090487354033029987 +-0.499431002140045154913394753748 -0.1236594021320343017578125 0.308669400215148936883480246252 +-0.499431002140045154913394753748 0.1236594021320343017578125 0.308669400215148936883480246252 +-0.499428614974021967132244981258 -0.143850849568843863757194867503 0.179938557744026200735376619377 +-0.499428614974021967132244981258 0.143850849568843863757194867503 0.179938557744026200735376619377 +-0.499410903453826937603565738755 -0.214804802834987651483089621252 0.717249619960784956518295985006 +-0.499410903453826937603565738755 0.214804802834987651483089621252 0.717249619960784956518295985006 +-0.499352008104324285309161268742 -0.13424320518970489501953125 0.471832895278930630755809261245 +-0.499352008104324285309161268742 0.13424320518970489501953125 0.471832895278930630755809261245 +-0.499317598342895518914730246252 -0.4925096035003662109375 0.384858393669128440173210492503 +-0.499317598342895518914730246252 0.4925096035003662109375 0.384858393669128440173210492503 +-0.499278008937835693359375 -0.253414803743362393451121761245 0.215644794702529896124332253748 +-0.499278008937835693359375 0.253414803743362393451121761245 0.215644794702529896124332253748 +-0.499205300211906455309929242503 -0.228576149046421067678735994377 0.0323553999885916737655477959379 +-0.499205300211906455309929242503 0.228576149046421067678735994377 0.0323553999885916737655477959379 +-0.499093642830848727154346988755 -0.227847950160503409655632367503 -0.0386088997125625665862713731258 +-0.499093642830848727154346988755 0.227847950160503409655632367503 -0.0386088997125625665862713731258 +-0.498905402421951249536391514994 -0.468727684020996071545539507497 -0.146245399117469782046541126874 +-0.498905402421951249536391514994 0.468727684020996071545539507497 -0.146245399117469782046541126874 +-0.498782309889793384893863503748 -0.750605455040931679455695757497 -0.300511589646339394299445757497 +-0.498782309889793384893863503748 0.750605455040931679455695757497 -0.300511589646339394299445757497 +-0.4987185001373291015625 -0.020337499678134918212890625 -0.0294330008327960968017578125 +-0.4987185001373291015625 0.020337499678134918212890625 -0.0294330008327960968017578125 +-0.498639607429504361224559261245 -0.302522993087768532483039507497 0.140849402546882634945646373126 +-0.498639607429504361224559261245 0.302522993087768532483039507497 0.140849402546882634945646373126 +-0.498512399196624711450454014994 -0.332021391391754128186164507497 0.0353196009993553133865518134371 +-0.498512399196624711450454014994 0.332021391391754128186164507497 0.0353196009993553133865518134371 +-0.498499187827110279425113503748 -0.517847862839698747094985264994 0.621153724193572953637954014994 +-0.498499187827110279425113503748 0.517847862839698747094985264994 0.621153724193572953637954014994 +-0.498492130637168906481804242503 -0.0429272990673780427406391879686 -0.414924910664558443951221988755 +-0.498492130637168906481804242503 0.0429272990673780427406391879686 -0.414924910664558443951221988755 +-0.49845850467681884765625 -0.0392290018498897552490234375 0 +-0.49845850467681884765625 0.0392290018498897552490234375 0 +-0.498454785346984841076789507497 -0.0790488034486770546616085653113 -0.324490213394165005755809261245 +-0.498454785346984841076789507497 0.0790488034486770546616085653113 -0.324490213394165005755809261245 +-0.498361194133758511615184261245 -0.331449615955352772100894753748 -0.0421577990055084228515625 +-0.498361194133758511615184261245 0.331449615955352772100894753748 -0.0421577990055084228515625 +-0.498336493968963623046875 -0.020649500191211700439453125 0.03513149917125701904296875 +-0.498336493968963623046875 0.020649500191211700439453125 0.03513149917125701904296875 +-0.49810214340686798095703125 -0.128950250148773204461605246252 -0.397197461128234896587940738755 +-0.49810214340686798095703125 0.128950250148773204461605246252 -0.397197461128234896587940738755 +-0.497901958227157603875667746252 -0.3290897905826568603515625 0.257476051151752483026058371252 +-0.497901958227157603875667746252 0.3290897905826568603515625 0.257476051151752483026058371252 +-0.49780575931072235107421875 -0.394859397411346457751335492503 -0.137022600322961818353206808752 +-0.49780575931072235107421875 0.394859397411346457751335492503 -0.137022600322961818353206808752 +-0.497753444314002979620426003748 -0.798168149590492204126235264994 0.132924944907426817453099943123 +-0.497753444314002979620426003748 0.798168149590492204126235264994 0.132924944907426817453099943123 +-0.497351807355880803918068977509 -0.0585711520165205015708842495314 -0.227399697899818425961271373126 +-0.497351807355880803918068977509 0.0585711520165205015708842495314 -0.227399697899818425961271373126 +-0.49731551110744476318359375 -0.801715442538261324756376779987 -0.1114824973046779632568359375 +-0.49731551110744476318359375 0.801715442538261324756376779987 -0.1114824973046779632568359375 +-0.49712026119232177734375 -0.545967757701873779296875 0.1314922459423542022705078125 +-0.49712026119232177734375 0.545967757701873779296875 0.1314922459423542022705078125 +-0.497042995691299449578792746252 -0.590402698516845680920539507497 -0.463005012273788485455128238755 +-0.497042995691299449578792746252 0.590402698516845680920539507497 -0.463005012273788485455128238755 +-0.496762737631797846038494981258 -0.0833508498966693961440554971887 0.220860201120376603567407869377 +-0.496762737631797846038494981258 0.0833508498966693961440554971887 0.220860201120376603567407869377 +-0.496594381332397472039730246252 -0.0982384026050567710219851846887 0.619469594955444402550881477509 +-0.496594381332397472039730246252 0.0982384026050567710219851846887 0.619469594955444402550881477509 +-0.496584880352020252569644753748 -0.430947279930114723889289507497 0.240182608366012545486611884371 +-0.496584880352020252569644753748 0.430947279930114723889289507497 0.240182608366012545486611884371 +-0.4965175092220306396484375 0 -0.058909498155117034912109375 +-0.496460253000259421618522992503 -0.117161547392606743556164872189 -0.205669748783111588918970369377 +-0.496460253000259421618522992503 0.117161547392606743556164872189 -0.205669748783111588918970369377 +-0.496375989913940440789730246252 -0.294810390472412142681690738755 0.5538032054901123046875 +-0.496375989913940440789730246252 0.294810390472412142681690738755 0.5538032054901123046875 +-0.496374073624610889776676003748 -0.81000797450542449951171875 0 +-0.496374073624610889776676003748 0.81000797450542449951171875 0 +-0.496330279111862171514957253748 -0.681277552247047446520866742503 0.109626194834709159153796065311 +-0.496330279111862171514957253748 0.681277552247047446520866742503 0.109626194834709159153796065311 +-0.496008509397506736071647992503 -0.09850490093231201171875 0.408378115296363863873096988755 +-0.496008509397506736071647992503 0.09850490093231201171875 0.408378115296363863873096988755 +-0.495917606353759810033920985006 -0.590168809890747048108039507497 -0.213930392265319846423210492503 +-0.495917606353759810033920985006 0.590168809890747048108039507497 -0.213930392265319846423210492503 +-0.495793950557708751336605246252 0 -0.690426093339919999536391514994 +-0.495752418041229270251335492503 -0.249347145855426804983423494377 -0.338460835814476002081363503748 +-0.495752418041229270251335492503 0.249347145855426804983423494377 -0.338460835814476002081363503748 +-0.4955694973468780517578125 -0.05953849852085113525390625 -0.0294289998710155487060546875 +-0.4955694973468780517578125 0.05953849852085113525390625 -0.0294289998710155487060546875 +-0.495465588569641068872329014994 -0.2689535915851593017578125 -0.205371594429016118832365123126 +-0.495465588569641068872329014994 0.2689535915851593017578125 -0.205371594429016118832365123126 +-0.4951575100421905517578125 -0.059877000749111175537109375 0.0351249985396862030029296875 +-0.4951575100421905517578125 0.059877000749111175537109375 0.0351249985396862030029296875 +-0.4950380027294158935546875 0 0.070267997682094573974609375 +-0.49500811100006103515625 -0.35964359343051910400390625 -0.660017716884613081518295985006 +-0.49500811100006103515625 0.35964359343051910400390625 -0.660017716884613081518295985006 +-0.494975614547729481085269753748 -0.494974195957183782379473768742 0 +-0.494975614547729481085269753748 0.494974195957183782379473768742 0 +-0.494970920681953419073551003748 -0.126845903694629669189453125 -0.800883233547210693359375 +-0.494970920681953419073551003748 0.126845903694629669189453125 -0.800883233547210693359375 +-0.494880497455596923828125 -0.0405705012381076812744140625 -0.05871500074863433837890625 +-0.494880497455596923828125 0.0405705012381076812744140625 -0.05871500074863433837890625 +-0.494730877876281727179019753748 -0.180329404771327972412109375 -0.72987842559814453125 +-0.494730877876281727179019753748 0.180329404771327972412109375 -0.72987842559814453125 +-0.494559726119041420666633257497 -0.682563605904579095984274772491 -0.109626194834709159153796065311 +-0.494559726119041420666633257497 0.682563605904579095984274772491 -0.109626194834709159153796065311 +-0.494508004188537575451789507497 0 -0.339796793460845958367855246252 +-0.494501680135726873199786268742 -0.228148892521858187576455634371 -0.439791107177734341693309261245 +-0.494501680135726873199786268742 0.228148892521858187576455634371 -0.439791107177734341693309261245 +-0.49444650113582611083984375 -0.2980079948902130126953125 0.47876250743865966796875 +-0.49444650113582611083984375 0.2980079948902130126953125 0.47876250743865966796875 +-0.494381237030029285772769753748 -0.428572568297386158331363503748 0.542597508430480934826789507497 +-0.494381237030029285772769753748 0.428572568297386158331363503748 0.542597508430480934826789507497 +-0.494264531135559126440170985006 -0.422140565514564525262386496252 0 +-0.494264531135559126440170985006 0.422140565514564525262386496252 0 +-0.49412548542022705078125 -0.49566073715686798095703125 0.269555993378162384033203125 +-0.49412548542022705078125 0.49566073715686798095703125 0.269555993378162384033203125 +-0.493844509124755859375 -0.07821600139141082763671875 0 +-0.493844509124755859375 0.07821600139141082763671875 0 +-0.493759894371032681537059261245 -0.63353645801544189453125 -0.278087697923183441162109375 +-0.493759894371032681537059261245 0.63353645801544189453125 -0.278087697923183441162109375 +-0.4937205016613006591796875 -0.358705767989158652575554242503 0.2237637937068939208984375 +-0.4937205016613006591796875 0.358705767989158652575554242503 0.2237637937068939208984375 +-0.49360048770904541015625 -0.730951201915741033410256477509 0.179077497124671941586271373126 +-0.49360048770904541015625 0.730951201915741033410256477509 0.179077497124671941586271373126 +-0.493570804595947265625 -0.155933994054794300421207253748 -0.303434407711029030529914507497 +-0.493570804595947265625 0.155933994054794300421207253748 -0.303434407711029030529914507497 +-0.493435800075531061370526231258 -0.222985953092575100997763115629 0.0964276470243930899917117471887 +-0.493435800075531061370526231258 0.222985953092575100997763115629 0.0964276470243930899917117471887 +-0.4933575093746185302734375 -0.041161000728607177734375 0.0700294971466064453125 +-0.4933575093746185302734375 0.041161000728607177734375 0.0700294971466064453125 +-0.49335479736328125 -0.6335820257663726806640625 -0.406417509913444552349659488755 +-0.49335479736328125 0.6335820257663726806640625 -0.406417509913444552349659488755 +-0.493170583248138394427684261245 -0.297863405942916881219417746252 -0.167511606216430658511384876874 +-0.493170583248138394427684261245 0.297863405942916881219417746252 -0.167511606216430658511384876874 +-0.493163225054740916863948996252 -0.288322550058364879266292746252 0.629412260651588395532485264994 +-0.493163225054740916863948996252 0.288322550058364879266292746252 0.629412260651588395532485264994 +-0.493158066272735617907585492503 -0.202682143449783330746427623126 0.134962302446365367547542746252 +-0.493158066272735617907585492503 0.202682143449783330746427623126 0.134962302446365367547542746252 +-0.49305498600006103515625 -0.749783992767333984375 -0.4412719905376434326171875 +-0.49305498600006103515625 0.749783992767333984375 -0.4412719905376434326171875 +-0.49303199350833892822265625 -0.1743382550776004791259765625 0.5376112461090087890625 +-0.49303199350833892822265625 0.1743382550776004791259765625 0.5376112461090087890625 +-0.492880010604858420641960492503 -0.528704023361206032483039507497 0.342843198776245139391960492503 +-0.492880010604858420641960492503 0.528704023361206032483039507497 0.342843198776245139391960492503 +-0.492819976806640636102230246252 -0.423303222656250033306690738755 0.466843986511230490954460492503 +-0.492819976806640636102230246252 0.423303222656250033306690738755 0.466843986511230490954460492503 +-0.49263824522495269775390625 -0.244145996868610382080078125 -0.51009826362133026123046875 +-0.49263824522495269775390625 0.244145996868610382080078125 -0.51009826362133026123046875 +-0.492629623413085970806690738755 -0.628571987152099609375 0.047052800655364990234375 +-0.492629623413085970806690738755 0.628571987152099609375 0.047052800655364990234375 +-0.4924824237823486328125 -0.158863198757171641961605246252 -0.610101604461669944079460492503 +-0.4924824237823486328125 0.158863198757171641961605246252 -0.610101604461669944079460492503 +-0.492189598083496104852230246252 -0.053367197513580322265625 -0.628411197662353537829460492503 +-0.492189598083496104852230246252 0.053367197513580322265625 -0.628411197662353537829460492503 +-0.4920044839382171630859375 -0.54397349059581756591796875 -0.1566014997661113739013671875 +-0.4920044839382171630859375 0.54397349059581756591796875 -0.1566014997661113739013671875 +-0.491933736205101057592514735006 0 -0.245968244969844845870809990629 +-0.491872215270996060443309261245 -0.244969797134399397409154630623 -0.240938401222228981701789507497 +-0.491872215270996060443309261245 0.244969797134399397409154630623 -0.240938401222228981701789507497 +-0.491803216934204145971420985006 -0.160948002338409446032585492503 0.6101024150848388671875 +-0.491803216934204145971420985006 0.160948002338409446032585492503 0.6101024150848388671875 +-0.491785222291946433337272992503 -0.669142806529998801501335492503 0.346980589628219593389957253748 +-0.491785222291946433337272992503 0.669142806529998801501335492503 0.346980589628219593389957253748 +-0.491715914011001620220753238755 -0.734608823060989402087272992503 -0.169011904299259191342130748126 +-0.491715914011001620220753238755 0.734608823060989402087272992503 -0.169011904299259191342130748126 +-0.49169099330902099609375 -0.02033849991858005523681640625 -0.088466502726078033447265625 +-0.49169099330902099609375 0.02033849991858005523681640625 -0.088466502726078033447265625 +-0.4916903972625732421875 -0.327062988281249966693309261245 0.1061604022979736328125 +-0.4916903972625732421875 0.327062988281249966693309261245 0.1061604022979736328125 +-0.491627991199493408203125 -0.2746889889240264892578125 0.826345980167388916015625 +-0.491627991199493408203125 0.2746889889240264892578125 0.826345980167388916015625 +-0.4915460050106048583984375 -0.662838995456695556640625 -0.564824998378753662109375 +-0.4915460050106048583984375 0.662838995456695556640625 -0.564824998378753662109375 +-0.491487979888916015625 -0.628719186782837002880341970013 -0.0561415970325470012336488423443 +-0.491487979888916015625 0.628719186782837002880341970013 -0.0561415970325470012336488423443 +-0.491353797912597645147769753748 -0.229029607772827131784154630623 0.257131791114807106701789507497 +-0.491353797912597645147769753748 0.229029607772827131784154630623 0.257131791114807106701789507497 +-0.491240745782852206158253238755 -0.198873957991600042172208873126 -0.147076603770256053582698996252 +-0.491240745782852206158253238755 0.198873957991600042172208873126 -0.147076603770256053582698996252 +-0.490963196754455544201789507497 -0.163957196474075306280582253748 0.303435587882995572162059261245 +-0.490963196754455544201789507497 0.163957196474075306280582253748 0.303435587882995572162059261245 +-0.490884891152381930279346988755 -0.219870758056640636102230246252 -0.114841099828481688072123745314 +-0.490884891152381930279346988755 0.219870758056640636102230246252 -0.114841099828481688072123745314 +-0.4906330108642578125 -0.868534028530120849609375 0.070197999477386474609375 +-0.4906330108642578125 0.868534028530120849609375 0.070197999477386474609375 +-0.490531265735626276214276231258 -0.121062695980072035362162807814 0.217308850586414359362663617503 +-0.490531265735626276214276231258 0.121062695980072035362162807814 0.217308850586414359362663617503 +-0.490384286642074562756477007497 -0.356280407309532143322883257497 0.731496188044547968054587272491 +-0.490384286642074562756477007497 0.356280407309532143322883257497 0.731496188044547968054587272491 +-0.490127992630004893914730246252 -0.315306401252746615337940738755 -0.5480480194091796875 +-0.490127992630004893914730246252 0.315306401252746615337940738755 -0.5480480194091796875 +-0.4900654852390289306640625 -0.079805500805377960205078125 -0.0588789992034435272216796875 +-0.4900654852390289306640625 0.079805500805377960205078125 -0.0588789992034435272216796875 +-0.490054410696029729699318977509 -0.249692851305007956774772992503 0 +-0.490054410696029729699318977509 0.249692851305007956774772992503 0 +-0.49001801013946533203125 -0.8697249889373779296875 -0.0588279999792575836181640625 +-0.49001801013946533203125 0.8697249889373779296875 -0.0588279999792575836181640625 +-0.489476668834686323705795985006 -0.420816484093666065557926003748 0.0763301499187946375091229356258 +-0.489476668834686323705795985006 0.420816484093666065557926003748 0.0763301499187946375091229356258 +-0.489388203620910622326789507497 -0.493664503097534124176348768742 0.0824312977492809295654296875 +-0.489388203620910622326789507497 0.493664503097534124176348768742 0.0824312977492809295654296875 +-0.489317396283149741442741742503 -0.302673153579235076904296875 0.302418999373912811279296875 +-0.489317396283149741442741742503 0.302673153579235076904296875 0.302418999373912811279296875 +-0.489291012287139892578125 -0.0986360013484954833984375 -0.02941399998962879180908203125 +-0.489291012287139892578125 0.0986360013484954833984375 -0.02941399998962879180908203125 +-0.489242660999298140112045985006 -0.211159643530845653192073996252 -0.3722270429134368896484375 +-0.489242660999298140112045985006 0.211159643530845653192073996252 -0.3722270429134368896484375 +-0.489097017049789417608707253748 -0.183082190155982954538060880623 0.466117393970489457544204014994 +-0.489097017049789417608707253748 0.183082190155982954538060880623 0.466117393970489457544204014994 +-0.489048445224761985095085492503 -0.181831094622612016165064119377 0.173980394005775473864616742503 +-0.489048445224761985095085492503 0.181831094622612016165064119377 0.173980394005775473864616742503 +-0.489021003246307373046875 -0.066740997135639190673828125 -0.8697149753570556640625 +-0.489021003246307373046875 0.066740997135639190673828125 -0.8697149753570556640625 +-0.4889605343341827392578125 -0.143073446303606049978540681877 0.403667545318603548931690738755 +-0.4889605343341827392578125 0.143073446303606049978540681877 0.403667545318603548931690738755 +-0.4888199865818023681640625 -0.099111996591091156005859375 0.0350989997386932373046875 +-0.4888199865818023681640625 0.099111996591091156005859375 0.0350989997386932373046875 +-0.488645410537719704358039507497 -0.324388790130615223272769753748 -0.126482400298118580206363503748 +-0.488645410537719704358039507497 0.324388790130615223272769753748 -0.126482400298118580206363503748 +-0.488600733876228376928452235006 -0.177175906300544749871761496252 -0.179938557744026200735376619377 +-0.488600733876228376928452235006 0.177175906300544749871761496252 -0.179938557744026200735376619377 +-0.488559594750404335705695757497 -0.441366735100746143682926003748 -0.53759185969829559326171875 +-0.488559594750404335705695757497 0.441366735100746143682926003748 -0.53759185969829559326171875 +-0.4885055124759674072265625 -0.0605955012142658233642578125 -0.08769600093364715576171875 +-0.4885055124759674072265625 0.0605955012142658233642578125 -0.08769600093364715576171875 +-0.4884560108184814453125 -0.0805020034313201904296875 0.070215500891208648681640625 +-0.4884560108184814453125 0.0805020034313201904296875 0.070215500891208648681640625 +-0.4883280098438262939453125 -0.02065050043165683746337890625 0.10540150105953216552734375 +-0.4883280098438262939453125 0.02065050043165683746337890625 0.10540150105953216552734375 +-0.488217055797576904296875 -0.225688610970973951852514005623 -0.658186444640159629138054242503 +-0.488217055797576904296875 0.225688610970973951852514005623 -0.658186444640159629138054242503 +-0.488035118579864479748664507497 -0.459395986795425370630141514994 0.20193459093570709228515625 +-0.488035118579864479748664507497 0.459395986795425370630141514994 0.20193459093570709228515625 +-0.487995314598083484991519753748 -0.428597098588943514752003238755 0.623029518127441450658920985006 +-0.487995314598083484991519753748 0.428597098588943514752003238755 0.623029518127441450658920985006 +-0.487801301479339588507144753748 -0.354404389858245849609375 0.355594420433044400287059261245 +-0.487801301479339588507144753748 0.354404389858245849609375 0.355594420433044400287059261245 +-0.487790611386299199914162727509 -0.0948914974927902304946414346887 -0.235703043639659909347372490629 +-0.487790611386299199914162727509 0.0948914974927902304946414346887 -0.235703043639659909347372490629 +-0.4877622127532958984375 -0.0247488006949424729774555942186 0.3485333919525146484375 +-0.4877622127532958984375 0.0247488006949424729774555942186 0.3485333919525146484375 +-0.487719637155532903527443977509 -0.245835147798061398605184990629 0.0647668991237878854949627793758 +-0.487719637155532903527443977509 0.245835147798061398605184990629 0.0647668991237878854949627793758 +-0.48750400543212890625 -0.85533702373504638671875 -0.17532299458980560302734375 +-0.48750400543212890625 0.85533702373504638671875 -0.17532299458980560302734375 +-0.487423288822174061163394753748 -0.42027439177036285400390625 -0.09103834629058837890625 +-0.487423288822174061163394753748 0.42027439177036285400390625 -0.09103834629058837890625 +-0.487397718429565418585269753748 -0.553906792402267478259147992503 -0.515393114089965798108039507497 +-0.487397718429565418585269753748 0.553906792402267478259147992503 -0.515393114089965798108039507497 +-0.487279009819030772820980246252 -0.386679816246032703741519753748 0.188514949381351465396150501874 +-0.487279009819030772820980246252 0.386679816246032703741519753748 0.188514949381351465396150501874 +-0.487199702858924887927116742503 -0.248115408420562760793970369377 0.351533001661300692486378238755 +-0.487199702858924887927116742503 0.248115408420562760793970369377 0.351533001661300692486378238755 +-0.487115359306335427014289507497 -0.659086248278617836682258257497 0.480440643429756120141860264994 +-0.487115359306335427014289507497 0.659086248278617836682258257497 0.480440643429756120141860264994 +-0.4870867431163787841796875 -0.57030375301837921142578125 0 +-0.4870867431163787841796875 0.57030375301837921142578125 0 +-0.4870850145816802978515625 -0.8480269908905029296875 0.208802998065948486328125 +-0.4870850145816802978515625 0.8480269908905029296875 0.208802998065948486328125 +-0.486991411447525002209602007497 -0.493128985166549627106036268742 -0.098301701247692108154296875 +-0.486991411447525002209602007497 0.493128985166549627106036268742 -0.098301701247692108154296875 +-0.48694531619548797607421875 -0.497901630401611283716079014994 -0.646126335859298683850227007497 +-0.48694531619548797607421875 0.497901630401611283716079014994 -0.646126335859298683850227007497 +-0.486737340688705499847088731258 -0.244174695014953646587940738755 -0.0772370509803295135498046875 +-0.486737340688705499847088731258 0.244174695014953646587940738755 -0.0772370509803295135498046875 +-0.486712783575057927887286268742 -0.0929543972015380859375 -0.494439387321472134662059261245 +-0.486712783575057927887286268742 0.0929543972015380859375 -0.494439387321472134662059261245 +-0.486185491085052490234375 -0.116720996797084808349609375 0 +-0.486185491085052490234375 0.116720996797084808349609375 0 +-0.485962390899658203125 -0.617471218109130859375 0.150232803821563731805355246252 +-0.485962390899658203125 0.617471218109130859375 0.150232803821563731805355246252 +-0.485935509204864501953125 0 -0.11775650084018707275390625 +-0.485712689161300725793068977509 -0.0226864006370306042770224053129 0.257037553191185041967514735006 +-0.485712689161300725793068977509 0.0226864006370306042770224053129 0.257037553191185041967514735006 +-0.48569548130035400390625 -0.41388975083827972412109375 0.39407475292682647705078125 +-0.48569548130035400390625 0.41388975083827972412109375 0.39407475292682647705078125 +-0.485635185241699185443309261245 -0.0395927980542182880729917826557 -0.350129985809326138568309261245 +-0.485635185241699185443309261245 0.0395927980542182880729917826557 -0.350129985809326138568309261245 +-0.485603392124176025390625 -0.219615000486373890264957253748 -0.275605791807174649310496761245 +-0.485603392124176025390625 0.219615000486373890264957253748 -0.275605791807174649310496761245 +-0.485562586784362759662059261245 -0.117846599221229544895983565311 -0.332176816463470470086605246252 +-0.485562586784362759662059261245 0.117846599221229544895983565311 -0.332176816463470470086605246252 +-0.485518580675125099865852007497 -0.295650604367256153448551003748 0.408487820625305142474559261245 +-0.485518580675125099865852007497 0.295650604367256153448551003748 0.408487820625305142474559261245 +-0.485501503944397005962940738755 -0.03616634942591190338134765625 -0.255890803039073966296257367503 +-0.485501503944397005962940738755 0.03616634942591190338134765625 -0.255890803039073966296257367503 +-0.48541080951690673828125 -0.352669787406921397820980246252 0 +-0.48541080951690673828125 0.352669787406921397820980246252 0 +-0.485340303182601962017628238755 -0.5711165964603424072265625 0.498267906904220569952457253748 +-0.485340303182601962017628238755 0.5711165964603424072265625 0.498267906904220569952457253748 +-0.4850960075855255126953125 -0.0613995008170604705810546875 0.10446099936962127685546875 +-0.4850960075855255126953125 0.0613995008170604705810546875 0.10446099936962127685546875 +-0.485083186626434292865184261245 -0.066229797899723052978515625 0.346854615211486805304019753748 +-0.485083186626434292865184261245 0.066229797899723052978515625 0.346854615211486805304019753748 +-0.484950006008148193359375 -0.780201017856597900390625 0.3951080143451690673828125 +-0.484950006008148193359375 0.780201017856597900390625 0.3951080143451690673828125 +-0.484727779030799832415965511245 -0.663171675801277116235610264994 0.218500156700611097848607755623 +-0.484727779030799832415965511245 0.663171675801277116235610264994 0.218500156700611097848607755623 +-0.484546536207199063372996761245 -0.776644927263259843286391514994 0.254042340815067269055305132497 +-0.484546536207199063372996761245 0.776644927263259843286391514994 0.254042340815067269055305132497 +-0.4844590127468109130859375 -0.516115009784698486328125 0.706345975399017333984375 +-0.4844590127468109130859375 0.516115009784698486328125 0.706345975399017333984375 +-0.48444901406764984130859375 -0.4543042480945587158203125 -0.3484492599964141845703125 +-0.48444901406764984130859375 0.4543042480945587158203125 -0.3484492599964141845703125 +-0.48442648351192474365234375 -0.4160527288913726806640625 -0.39335851371288299560546875 +-0.48442648351192474365234375 0.4160527288913726806640625 -0.39335851371288299560546875 +-0.484425026178359974249332253748 -0.674490594863891623766960492503 -0.346979704499244701043636496252 +-0.484425026178359974249332253748 0.674490594863891623766960492503 -0.346979704499244701043636496252 +-0.484355509281158447265625 -0.0402860008180141448974609375 -0.1173734962940216064453125 +-0.484355509281158447265625 0.0402860008180141448974609375 -0.1173734962940216064453125 +-0.484341922402381885870426003748 -0.557835450768470741955695757497 0.420396395027637481689453125 +-0.484341922402381885870426003748 0.557835450768470741955695757497 0.420396395027637481689453125 +-0.484201884269714388775440738755 -0.0861698500812053680419921875 -0.42499794065952301025390625 +-0.484201884269714388775440738755 0.0861698500812053680419921875 -0.42499794065952301025390625 +-0.48408450186252593994140625 -0.525464236736297607421875 0.2281432449817657470703125 +-0.48408450186252593994140625 0.525464236736297607421875 0.2281432449817657470703125 +-0.4840424060821533203125 -0.562323188781738259045539507497 0.299157595634460482525440738755 +-0.4840424060821533203125 0.562323188781738259045539507497 0.299157595634460482525440738755 +-0.483495637774467523772869981258 -0.154174354672431956903011496252 -0.212042595446109788381860994377 +-0.483495637774467523772869981258 0.154174354672431956903011496252 -0.212042595446109788381860994377 +-0.483355271816253651007144753748 -0.783916237950324945593649772491 -0.233117652684450143985017689374 +-0.483355271816253651007144753748 0.783916237950324945593649772491 -0.233117652684450143985017689374 +-0.483252310752868674548210492503 -0.27688859403133392333984375 0.706965279579162664269631477509 +-0.483252310752868674548210492503 0.27688859403133392333984375 0.706965279579162664269631477509 +-0.483238261938095159386818977509 -0.0607106480747461388358665601572 0.255528900027275129858139735006 +-0.483238261938095159386818977509 0.0607106480747461388358665601572 0.255528900027275129858139735006 +-0.483198639750480662957698996252 0 0.699299225211143515856804242503 +-0.483146989345550503802684261245 -0.386715710163116455078125 -0.32713939249515533447265625 +-0.483146989345550503802684261245 0.386715710163116455078125 -0.32713939249515533447265625 +-0.483138626813888527600227007497 -0.0392330983653664602806010464064 0.817030420899391152111945757497 +-0.483138626813888527600227007497 0.0392330983653664602806010464064 0.817030420899391152111945757497 +-0.482892894744873013568309261245 -0.1849043071269989013671875 -0.471831518411636341436832253748 +-0.482892894744873013568309261245 0.1849043071269989013671875 -0.471831518411636341436832253748 +-0.48287098109722137451171875 -0.099941253662109375 -0.5651077330112457275390625 +-0.48287098109722137451171875 0.099941253662109375 -0.5651077330112457275390625 +-0.482838606834411598889289507497 -0.2906616032123565673828125 0.205870807170867919921875 +-0.482838606834411598889289507497 0.2906616032123565673828125 0.205870807170867919921875 +-0.482834815979003850738848768742 0 -0.5068238079547882080078125 +-0.4823520183563232421875 -0.618060016632080100329460492503 -0.159179198741912858450220369377 +-0.4823520183563232421875 0.618060016632080100329460492503 -0.159179198741912858450220369377 +-0.4821879863739013671875 -0.118541501462459564208984375 -0.058674998581409454345703125 +-0.4821879863739013671875 0.118541501462459564208984375 -0.058674998581409454345703125 +-0.4820609986782073974609375 -0.0996640026569366455078125 -0.0876609981060028076171875 +-0.4820609986782073974609375 0.0996640026569366455078125 -0.0876609981060028076171875 +-0.482030403614044145044204014994 -0.350213384628295876233039507497 0.0706913977861404335678585653113 +-0.482030403614044145044204014994 0.350213384628295876233039507497 0.0706913977861404335678585653113 +-0.481778553128242525982471988755 -0.159458754956722265072599498126 0.212043152749538443835319867503 +-0.481778553128242525982471988755 0.159458754956722265072599498126 0.212043152749538443835319867503 +-0.481732320785522416528579014994 -0.34999789297580718994140625 -0.368015182018279984887954014994 +-0.481732320785522416528579014994 0.34999789297580718994140625 -0.368015182018279984887954014994 +-0.481615006923675537109375 -0.4009650051593780517578125 -0.779277980327606201171875 +-0.481615006923675537109375 0.4009650051593780517578125 -0.779277980327606201171875 +-0.481582492589950506012286268742 -0.421049314737319935186832253748 -0.284246200323104825091746761245 +-0.481582492589950506012286268742 0.421049314737319935186832253748 -0.284246200323104825091746761245 +-0.481559002399444546771434261245 -0.0699737012386321965973223768742 0.696925213932991005627570757497 +-0.481559002399444546771434261245 0.0699737012386321965973223768742 0.696925213932991005627570757497 +-0.4815309941768646240234375 -0.792648017406463623046875 -0.3739469945430755615234375 +-0.4815309941768646240234375 0.792648017406463623046875 -0.3739469945430755615234375 +-0.481392556428909268451121761245 -0.253081905841827381475894753748 -0.778916415572166398462172764994 +-0.481392556428909268451121761245 0.253081905841827381475894753748 -0.778916415572166398462172764994 +-0.4812232553958892822265625 -0.49012126028537750244140625 -0.301173739135265350341796875 +-0.4812232553958892822265625 0.49012126028537750244140625 -0.301173739135265350341796875 +-0.480926614999771129266292746252 -0.665933367609977677759047764994 -0.218500156700611097848607755623 +-0.480926614999771129266292746252 0.665933367609977677759047764994 -0.218500156700611097848607755623 +-0.48063075542449951171875 -0.568988263607025146484375 0.0880124978721141815185546875 +-0.48063075542449951171875 0.568988263607025146484375 0.0880124978721141815185546875 +-0.480593383312225341796875 -0.349170005321502663342414507497 -0.0843215972185134832184161268742 +-0.480593383312225341796875 0.349170005321502663342414507497 -0.0843215972185134832184161268742 +-0.4804835021495819091796875 -0.119336999952793121337890625 0.069960497319698333740234375 +-0.4804835021495819091796875 0.119336999952793121337890625 0.069960497319698333740234375 +-0.480426374077796924932926003748 -0.113765352964401239566072376874 0.811633434891700700219985264994 +-0.480426374077796924932926003748 0.113765352964401239566072376874 0.811633434891700700219985264994 +-0.48042301833629608154296875 -0.225940503180027008056640625 0.52975876629352569580078125 +-0.48042301833629608154296875 0.225940503180027008056640625 0.52975876629352569580078125 +-0.480418395996093761102230246252 -0.485457611083984386102230246252 -0.416567993164062511102230246252 +-0.480418395996093761102230246252 0.485457611083984386102230246252 -0.416567993164062511102230246252 +-0.480232352018356345446647992503 -0.348907658457756064684929242503 -0.264839898049831379278629128748 +-0.480232352018356345446647992503 0.348907658457756064684929242503 -0.264839898049831379278629128748 +-0.480155640840530417712272992503 -0.31571085751056671142578125 -0.303772293031215667724609375 +-0.480155640840530417712272992503 0.31571085751056671142578125 -0.303772293031215667724609375 +-0.480145204067230213507144753748 -0.203470194339752191714509876874 0.296749806404113747326789507497 +-0.480145204067230213507144753748 0.203470194339752191714509876874 0.296749806404113747326789507497 +-0.480006992816925048828125 -0.13685150444507598876953125 -0.029408000409603118896484375 +-0.480006992816925048828125 0.13685150444507598876953125 -0.029408000409603118896484375 +-0.4799830019474029541015625 0 0.14005850255489349365234375 +-0.479928588867187477795539507497 -0.107755798101425173673995061563 0.343594801425933848992855246252 +-0.479928588867187477795539507497 0.107755798101425173673995061563 0.343594801425933848992855246252 +-0.47981311380863189697265625 0 -0.438496512174606334344417746252 +-0.479675304889678966180355246252 -0.171652650833129888363615123126 -0.403666886687278736456363503748 +-0.479675304889678966180355246252 0.171652650833129888363615123126 -0.403666886687278736456363503748 +-0.4796265065670013427734375 -0.08031000196933746337890625 -0.116227500140666961669921875 +-0.4796265065670013427734375 0.08031000196933746337890625 -0.116227500140666961669921875 +-0.47954110801219940185546875 -0.3917463123798370361328125 -0.58230102062225341796875 +-0.47954110801219940185546875 0.3917463123798370361328125 -0.58230102062225341796875 +-0.4795199930667877197265625 -0.20036600530147552490234375 -0.85434997081756591796875 +-0.4795199930667877197265625 0.20036600530147552490234375 -0.85434997081756591796875 +-0.479513114690780672955128238755 -0.267430344223976157458366742503 0.0323724510148167624046244839064 +-0.479513114690780672955128238755 0.267430344223976157458366742503 0.0323724510148167624046244839064 +-0.479484498500823974609375 -0.13734500110149383544921875 0.0350884981453418731689453125 +-0.479484498500823974609375 0.13734500110149383544921875 0.0350884981453418731689453125 +-0.479365691542625482757244981258 -0.266862747073173534051448996252 -0.03863749839365482330322265625 +-0.479365691542625482757244981258 0.266862747073173534051448996252 -0.03863749839365482330322265625 +-0.479353618621826182977230246252 -0.216497588157653825247095369377 0.602784013748169034130341970013 +-0.479353618621826182977230246252 0.216497588157653825247095369377 0.602784013748169034130341970013 +-0.4791980087757110595703125 -0.620235979557037353515625 -0.621028006076812744140625 +-0.4791980087757110595703125 0.620235979557037353515625 -0.621028006076812744140625 +-0.478768563270568880962940738755 -0.188451255857944505178735994377 0.397198739647865284307926003748 +-0.478768563270568880962940738755 0.188451255857944505178735994377 0.397198739647865284307926003748 +-0.478755739331245433465511496252 -0.238635656237602244988948996252 0.127850799262523656674161998126 +-0.478755739331245433465511496252 0.238635656237602244988948996252 0.127850799262523656674161998126 +-0.47864623367786407470703125 -0.1971479952335357666015625 -0.5427067279815673828125 +-0.47864623367786407470703125 0.1971479952335357666015625 -0.5427067279815673828125 +-0.478624904155731223376335492503 -0.41247503459453582763671875 0.152586852759122842959627064374 +-0.478624904155731223376335492503 0.41247503459453582763671875 0.152586852759122842959627064374 +-0.4785687923431396484375 -0.5252935886383056640625 -0.367476010322570822985710492503 +-0.4785687923431396484375 0.5252935886383056640625 -0.367476010322570822985710492503 +-0.478538990020751953125 0 -0.57749475538730621337890625 +-0.4785200059413909912109375 -0.1005930006504058837890625 0.104400999844074249267578125 +-0.4785200059413909912109375 0.1005930006504058837890625 0.104400999844074249267578125 +-0.478504002094268798828125 -0.672313988208770751953125 0.56482601165771484375 +-0.478504002094268798828125 0.672313988208770751953125 0.56482601165771484375 +-0.47846281528472900390625 -0.317477989196777332647769753748 0.174013799428939824887052623126 +-0.47846281528472900390625 0.317477989196777332647769753748 0.174013799428939824887052623126 +-0.478452697396278436858807481258 -0.0987761482596397483169070596887 0.252639199793338820043686610006 +-0.478452697396278436858807481258 0.0987761482596397483169070596887 0.252639199793338820043686610006 +-0.4783860146999359130859375 -0.0407500006258487701416015625 0.1395924985408782958984375 +-0.4783860146999359130859375 0.0407500006258487701416015625 0.1395924985408782958984375 +-0.47818438708782196044921875 -0.580374011397361777575554242503 0.580522197484970026160056022491 +-0.47818438708782196044921875 0.580374011397361777575554242503 0.580522197484970026160056022491 +-0.478115627169609036517528011245 -0.136852544546127302682592130623 0.689330434799194313733039507497 +-0.478115627169609036517528011245 0.136852544546127302682592130623 0.689330434799194313733039507497 +-0.4780785143375396728515625 -0.0203210003674030303955078125 -0.1450105011463165283203125 +-0.4780785143375396728515625 0.0203210003674030303955078125 -0.1450105011463165283203125 +-0.477932882308959972039730246252 -0.485559123754501331671207253748 0.50824476778507232666015625 +-0.477932882308959972039730246252 0.485559123754501331671207253748 0.50824476778507232666015625 +-0.47786025702953338623046875 -0.56845124065876007080078125 -0.1049407459795475006103515625 +-0.47786025702953338623046875 0.56845124065876007080078125 -0.1049407459795475006103515625 +-0.477755212783813498766960492503 -0.347105598449707064556690738755 0.539692020416259743420539507497 +-0.477755212783813498766960492503 0.347105598449707064556690738755 0.539692020416259743420539507497 +-0.477497792243957552837940738755 -0.380064097046852122918636496252 -0.223713098466396337338224498126 +-0.477497792243957552837940738755 0.380064097046852122918636496252 -0.223713098466396337338224498126 +-0.477348208427429143707598768742 -0.311122691631317116467414507497 -0.406621581315994240490852007497 +-0.477348208427429143707598768742 0.311122691631317116467414507497 -0.406621581315994240490852007497 +-0.4771521091461181640625 -0.300723293423652671130241742503 -0.701349323987960793225227007497 +-0.4771521091461181640625 0.300723293423652671130241742503 -0.701349323987960793225227007497 +-0.477148687839508034436164507497 -0.485645294189453069488848768742 0.162719897925853729248046875 +-0.477148687839508034436164507497 0.485645294189453069488848768742 0.162719897925853729248046875 +-0.477049303054809525903579014994 -0.452786606550216630395766514994 -0.239600193500518782174779630623 +-0.477049303054809525903579014994 0.452786606550216630395766514994 -0.239600193500518782174779630623 +-0.476868009567260775494190738755 -0.26587200164794921875 -0.5847303867340087890625 +-0.476868009567260775494190738755 0.26587200164794921875 -0.5847303867340087890625 +-0.476800259947776750024672764994 -0.424622449278831470831363503748 0.703460761904716513903679242503 +-0.476800259947776750024672764994 0.424622449278831470831363503748 0.703460761904716513903679242503 +-0.476744955778121981548878238755 -0.0721600003540515955169354356258 -0.264588506519794486315788617503 +-0.476744955778121981548878238755 0.0721600003540515955169354356258 -0.264588506519794486315788617503 +-0.476734793186187721936164507497 -0.193513798713684070929019753748 -0.308668792247772216796875 +-0.476734793186187721936164507497 0.193513798713684070929019753748 -0.308668792247772216796875 +-0.476617088913917519299445757497 -0.595524463057517938757712272491 0.375081191956996906622379128748 +-0.476617088913917519299445757497 0.595524463057517938757712272491 0.375081191956996906622379128748 +-0.476503193378448486328125 -0.267215394973754849505809261245 0.2480742037296295166015625 +-0.476503193378448486328125 0.267215394973754849505809261245 0.2480742037296295166015625 +-0.476418578624725364001335492503 -0.704504674673080422131477007497 0.29444579780101776123046875 +-0.476418578624725364001335492503 0.704504674673080422131477007497 0.29444579780101776123046875 +-0.476406013965606667248664507497 -0.231420704722404474429353626874 0.457692217826843217309829014994 +-0.476406013965606667248664507497 0.231420704722404474429353626874 0.457692217826843217309829014994 +-0.476304343342781044690070757497 -0.666940847039222739489616742503 -0.480440643429756120141860264994 +-0.476304343342781044690070757497 0.666940847039222739489616742503 -0.480440643429756120141860264994 +-0.476182308793067943231136496252 -0.218539753556251548083366742503 0.167305046319961570056022992503 +-0.476182308793067943231136496252 0.218539753556251548083366742503 0.167305046319961570056022992503 +-0.475997513532638583111378238755 -0.130474846065044419729517244377 -0.242698496580123934673878238755 +-0.475997513532638583111378238755 0.130474846065044419729517244377 -0.242698496580123934673878238755 +-0.475893610715866055560496761245 0 0.513347113132476828845085492503 +-0.475727176666259798931690738755 -0.475911998748779319079460492503 0.432656812667846724096420985006 +-0.475727176666259798931690738755 0.475911998748779319079460492503 0.432656812667846724096420985006 +-0.475707051157951366082698996252 -0.441292789578437816278011496252 0.0382583511993289035468812642193 +-0.475707051157951366082698996252 0.441292789578437816278011496252 0.0382583511993289035468812642193 +-0.4755289852619171142578125 -0.154506504535675048828125 0 +-0.4755289852619171142578125 0.154506504535675048828125 0 +-0.475446599721908558233707253748 -0.514023309946060158459602007497 -0.5654474794864654541015625 +-0.475446599721908558233707253748 0.514023309946060158459602007497 -0.5654474794864654541015625 +-0.475317457318305935931590511245 -0.05672984756529331207275390625 -0.702392411231994584497329014994 +-0.475317457318305935931590511245 0.05672984756529331207275390625 -0.702392411231994584497329014994 +-0.47526030242443084716796875 -0.440999503433704365118472878748 -0.694368296861648581774772992503 +-0.47526030242443084716796875 0.440999503433704365118472878748 -0.694368296861648581774772992503 +-0.475126329064369190557926003748 -0.701937904953956581799445757497 0.428996260464191425665347878748 +-0.475126329064369190557926003748 0.701937904953956581799445757497 0.428996260464191425665347878748 +-0.47512574493885040283203125 -0.345195002853870391845703125 0.46647150814533233642578125 +-0.47512574493885040283203125 0.345195002853870391845703125 0.46647150814533233642578125 +-0.47507701814174652099609375 -0.3834014832973480224609375 -0.435666739940643310546875 +-0.47507701814174652099609375 0.3834014832973480224609375 -0.435666739940643310546875 +-0.47501479089260101318359375 -0.441334399580955494268863503748 -0.04566249810159206390380859375 +-0.47501479089260101318359375 0.441334399580955494268863503748 -0.04566249810159206390380859375 +-0.474997140467166900634765625 -0.188312793523073174206672319997 0.800885158777236871863181022491 +-0.474997140467166900634765625 0.188312793523073174206672319997 0.800885158777236871863181022491 +-0.474896490573883056640625 -0.06057099997997283935546875 -0.144237995147705078125 +-0.474896490573883056640625 0.06057099997997283935546875 -0.144237995147705078125 +-0.4748347699642181396484375 -0.52277626097202301025390625 -0.252461247146129608154296875 +-0.4748347699642181396484375 0.52277626097202301025390625 -0.252461247146129608154296875 +-0.474397194385528520044204014994 -0.0789929956197738675216513115629 -0.358758616447448719366519753748 +-0.474397194385528520044204014994 0.0789929956197738675216513115629 -0.358758616447448719366519753748 +-0.4743255078792572021484375 -0.344612957537174191546824886245 0.615432304143905595239516514994 +-0.4743255078792572021484375 0.344612957537174191546824886245 0.615432304143905595239516514994 +-0.474310880899429299084602007497 -0.0570500008761882712593482835928 0.5116390883922576904296875 +-0.474310880899429299084602007497 0.0570500008761882712593482835928 0.5116390883922576904296875 +-0.473992204666137728619190738755 -0.233927097916603099481136496252 -0.152017803490161917956413617503 +-0.473992204666137728619190738755 0.233927097916603099481136496252 -0.152017803490161917956413617503 +-0.473948973417282093389957253748 -0.703074955940246604235710492503 0.0596504468470811857749858120314 +-0.473948973417282093389957253748 0.703074955940246604235710492503 0.0596504468470811857749858120314 +-0.473910805583000194207698996252 -0.261921547353267669677734375 0.0964661501348018785018112453145 +-0.473910805583000194207698996252 0.261921547353267669677734375 0.0964661501348018785018112453145 +-0.473750203847885187347088731258 0 -0.279392862319946311266960492503 +-0.473727989196777388158920985006 -0.561846399307250998766960492503 -0.316085600852966330798210492503 +-0.473727989196777388158920985006 0.561846399307250998766960492503 -0.316085600852966330798210492503 +-0.4736064970493316650390625 -0.0812290012836456298828125 0.13819800317287445068359375 +-0.4736064970493316650390625 0.0812290012836456298828125 0.13819800317287445068359375 +-0.473425361514091480596988503748 -0.704179936647415183337272992503 -0.0499936006963253021240234375 +-0.473425361514091480596988503748 0.704179936647415183337272992503 -0.0499936006963253021240234375 +-0.473157012462615989001335492503 0 -0.765586781501770063940170985006 +-0.473014497756957974505809261245 -0.514355105161666825708266514994 0.0411795999854803057571572821871 +-0.473014497756957974505809261245 0.514355105161666825708266514994 0.0411795999854803057571572821871 +-0.472845810651779163702457253748 -0.400434982776641801294204014994 0.32568199932575225830078125 +-0.472845810651779163702457253748 0.400434982776641801294204014994 0.32568199932575225830078125 +-0.472756692767143271716179242503 -0.0268125010654330260539968122657 0.44528901576995849609375 +-0.472756692767143271716179242503 0.0268125010654330260539968122657 0.44528901576995849609375 +-0.472668939828872702868522992503 -0.28786160051822662353515625 -0.340910711884498618395866742503 +-0.472668939828872702868522992503 0.28786160051822662353515625 -0.340910711884498618395866742503 +-0.4725579917430877685546875 -0.13368900120258331298828125 -0.093895502388477325439453125 +-0.4725579917430877685546875 0.13368900120258331298828125 -0.093895502388477325439453125 +-0.472530609369277987408253238755 -0.711099904775619573449318977509 -0.284695190191268932000667746252 +-0.472530609369277987408253238755 0.711099904775619573449318977509 -0.284695190191268932000667746252 +-0.472366189956665016858039507497 -0.148392596840858453921541126874 0.338894391059875454974559261245 +-0.472366189956665016858039507497 0.148392596840858453921541126874 0.338894391059875454974559261245 +-0.472262388467788729595753238755 -0.490592712163925193102897992503 0.588461422920227072985710492503 +-0.472262388467788729595753238755 0.490592712163925193102897992503 0.588461422920227072985710492503 +-0.472210210561752330438167746252 -0.212699852883815793136434990629 -0.185137706995010392629907869377 +-0.472210210561752330438167746252 0.212699852883815793136434990629 -0.185137706995010392629907869377 +-0.472088408470153764184829014994 -0.514507019519805930407585492503 -0.0491385996341705266754473768742 +-0.472088408470153764184829014994 0.514507019519805930407585492503 -0.0491385996341705266754473768742 +-0.471991634368896517681690738755 -0.408402135968208346294971988755 -0.181470906734466558285490123126 +-0.471991634368896517681690738755 0.408402135968208346294971988755 -0.181470906734466558285490123126 +-0.471888005733489990234375 -0.3428420126438140869140625 0.8122689723968505859375 +-0.471888005733489990234375 0.3428420126438140869140625 0.8122689723968505859375 +-0.471757185459136918481704014994 -0.342748796939849831311164507497 0.141308999061584478207365123126 +-0.471757185459136918481704014994 0.342748796939849831311164507497 0.141308999061584478207365123126 +-0.471755504608154296875 -0.15260450541973114013671875 -0.064485497772693634033203125 +-0.471755504608154296875 0.15260450541973114013671875 -0.064485497772693634033203125 +-0.471665853261947598529246761245 -0.202871202677488315924136941248 0.677402418851852372583266514994 +-0.471665853261947598529246761245 0.202871202677488315924136941248 0.677402418851852372583266514994 +-0.471555894613266024517628238755 -0.756159299612045310290397992503 0.125928895175456995181306751874 +-0.471555894613266024517628238755 0.756159299612045310290397992503 0.125928895175456995181306751874 +-0.471499058604240461889389735006 -0.136027096211910253353849498126 0.248365698754787478375050113755 +-0.471499058604240461889389735006 0.136027096211910253353849498126 0.248365698754787478375050113755 +-0.471395662426948580669971988755 -0.259002703428268477026108485006 -0.114907648414373411704936245314 +-0.471395662426948580669971988755 0.259002703428268477026108485006 -0.114907648414373411704936245314 +-0.471372795104980479852230246252 -0.106456005573272713404797684689 -0.637553596496582053454460492503 +-0.471372795104980479852230246252 0.106456005573272713404797684689 -0.637553596496582053454460492503 +-0.4713585078716278076171875 -0.15382750332355499267578125 0.064485497772693634033203125 +-0.4713585078716278076171875 0.15382750332355499267578125 0.064485497772693634033203125 +-0.471358394622802767681690738755 -0.594794416427612326891960492503 0.253063201904296875 +-0.471358394622802767681690738755 0.594794416427612326891960492503 0.253063201904296875 +-0.471347999572753917352230246252 -0.451607990264892622533920985006 -0.462473583221435557977230246252 +-0.471347999572753917352230246252 0.451607990264892622533920985006 -0.462473583221435557977230246252 +-0.471227893233299277575554242503 -0.289483344554901156353565738755 0.341531452536582957879573996252 +-0.471227893233299277575554242503 0.289483344554901156353565738755 0.341531452536582957879573996252 +-0.4711410105228424072265625 -0.759519892930984541479233485006 -0.105614997446537017822265625 +-0.4711410105228424072265625 0.759519892930984541479233485006 -0.105614997446537017822265625 +-0.4710074961185455322265625 -0.11444850265979766845703125 -0.122692503035068511962890625 +-0.4710074961185455322265625 0.11444850265979766845703125 -0.122692503035068511962890625 +-0.470948994159698486328125 -0.13531149923801422119140625 0.099486999213695526123046875 +-0.470948994159698486328125 0.13531149923801422119140625 0.099486999213695526123046875 +-0.470794200897216796875 -0.281056201457977272717414507497 -0.243639600276947004831029630623 +-0.470794200897216796875 0.281056201457977272717414507497 -0.243639600276947004831029630623 +-0.47067224979400634765625 -0.5541629791259765625 0.1840402521193027496337890625 +-0.47067224979400634765625 0.5541629791259765625 0.1840402521193027496337890625 +-0.470511811971664473119858485006 -0.197023202478885661736995871252 0.205670846998691564389005748126 +-0.470511811971664473119858485006 0.197023202478885661736995871252 0.205670846998691564389005748126 +-0.470339980721473704949886496252 -0.341718000173568736688167746252 0.290689744055271148681640625 +-0.470339980721473704949886496252 0.341718000173568736688167746252 0.290689744055271148681640625 +-0.470249122381210360455128238755 -0.7673759758472442626953125 0 +-0.470249122381210360455128238755 0.7673759758472442626953125 0 +-0.470228815078735373766960492503 -0.647213602066040061266960492503 0 +-0.470228815078735373766960492503 0.647213602066040061266960492503 0 +-0.470021313428878761975227007497 -0.270329493284225452764957253748 -0.442721289396285966333266514994 +-0.470021313428878761975227007497 0.270329493284225452764957253748 -0.442721289396285966333266514994 +-0.469863009452819779809829014994 -0.310780799388885475842414507497 -0.206504398584365839175447376874 +-0.469863009452819779809829014994 0.310780799388885475842414507497 -0.206504398584365839175447376874 +-0.469830608367919899670539507497 0 -0.373174810409545865130809261245 +-0.469822204113006569592414507497 -0.371510410308837857318309261245 0.0353196009993553133865518134371 +-0.469822204113006569592414507497 0.371510410308837857318309261245 0.0353196009993553133865518134371 +-0.469783592224121082647769753748 -0.0797725494951009722610635321871 0.442085781693458579333366742503 +-0.469783592224121082647769753748 0.0797725494951009722610635321871 0.442085781693458579333366742503 +-0.469573998451232876849559261245 -0.481732988357543912005809261245 -0.193477204442024208752570757497 +-0.469573998451232876849559261245 0.481732988357543912005809261245 -0.193477204442024208752570757497 +-0.469571912288665738177684261245 -0.113719902932643876503071567186 0.506527698040008522717414507497 +-0.469571912288665738177684261245 0.113719902932643876503071567186 0.506527698040008522717414507497 +-0.4694389998912811279296875 0 -0.17212450504302978515625 +-0.469429495930671680792301003748 -0.557602548599243186266960492503 -0.437282511591911282611278011245 +-0.469429495930671680792301003748 0.557602548599243186266960492503 -0.437282511591911282611278011245 +-0.469376993179321244653579014994 -0.157595407962799055612279630623 -0.338893783092498790399105246252 +-0.469376993179321244653579014994 0.157595407962799055612279630623 -0.338893783092498790399105246252 +-0.469231188297271728515625 -0.371543991565704334600894753748 -0.0421577990055084228515625 +-0.469231188297271728515625 0.371543991565704334600894753748 -0.0421577990055084228515625 +-0.4690000116825103759765625 -0.02062500081956386566162109375 0.1720865070819854736328125 +-0.4690000116825103759765625 0.02062500081956386566162109375 0.1720865070819854736328125 +-0.4689877331256866455078125 -0.030975750647485256195068359375 0.58445848524570465087890625 +-0.4689877331256866455078125 0.030975750647485256195068359375 0.58445848524570465087890625 +-0.468953099846839915887386496252 -0.287372791767120383532585492503 0 +-0.468953099846839915887386496252 0.287372791767120383532585492503 0 +-0.46892698109149932861328125 -0.340694256126880645751953125 -0.47595749795436859130859375 +-0.46892698109149932861328125 0.340694256126880645751953125 -0.47595749795436859130859375 +-0.468919819593429598736378238755 -0.12016980350017547607421875 -0.75873148441314697265625 +-0.468919819593429598736378238755 0.12016980350017547607421875 -0.75873148441314697265625 +-0.468774497509002685546875 -0.17142200469970703125 0.029408000409603118896484375 +-0.468774497509002685546875 0.17142200469970703125 0.029408000409603118896484375 +-0.4686414897441864013671875 -0.17071549594402313232421875 -0.0350884981453418731689453125 +-0.4686414897441864013671875 0.17071549594402313232421875 -0.0350884981453418731689453125 +-0.4684022367000579833984375 -0.712294793128967262951789507497 -0.419208391010761238781867632497 +-0.4684022367000579833984375 0.712294793128967262951789507497 -0.419208391010761238781867632497 +-0.468286001682281460833934261245 -0.432370418310165371966746761245 0.28941990435123443603515625 +-0.468286001682281460833934261245 0.432370418310165371966746761245 0.28941990435123443603515625 +-0.468137592077255193512286268742 -0.0466228023171424837967080634371 -0.518337380886077836450454014994 +-0.468137592077255193512286268742 0.0466228023171424837967080634371 -0.518337380886077836450454014994 +-0.46811024844646453857421875 -0.46172775328159332275390625 0.360804744064807891845703125 +-0.46811024844646453857421875 0.46172775328159332275390625 0.360804744064807891845703125 +-0.468008208274841353002670985006 -0.190383046865463284591513115629 -0.217308293282985703909204744377 +-0.468008208274841353002670985006 0.190383046865463284591513115629 -0.217308293282985703909204744377 +-0.467923384904861405786391514994 -0.138835203647613508737279630623 -0.501769119501113913806022992503 +-0.467923384904861405786391514994 0.138835203647613508737279630623 -0.501769119501113913806022992503 +-0.4678935110569000244140625 -0.04054249823093414306640625 -0.1715579926967620849609375 +-0.4678935110569000244140625 0.04054249823093414306640625 -0.1715579926967620849609375 +-0.467856392264366205413494981258 0 0.289154785871505781713608485006 +-0.4675619900226593017578125 -0.11622600257396697998046875 0.1337060034275054931640625 +-0.4675619900226593017578125 0.11622600257396697998046875 0.1337060034275054931640625 +-0.467507660388946533203125 -0.339663393795490264892578125 -0.623350065946578935083266514994 +-0.467507660388946533203125 0.339663393795490264892578125 -0.623350065946578935083266514994 +-0.46746958792209625244140625 -0.437006688117980990337940738755 0.1140054501593112945556640625 +-0.46746958792209625244140625 0.437006688117980990337940738755 0.1140054501593112945556640625 +-0.46735258400440216064453125 -0.1294104494154453277587890625 -0.432822015881538402215511496252 +-0.46735258400440216064453125 0.1294104494154453277587890625 -0.432822015881538402215511496252 +-0.467317482829093966412159488755 -0.25083760917186737060546875 -0.375758507847785971911491742503 +-0.467317482829093966412159488755 0.25083760917186737060546875 -0.375758507847785971911491742503 +-0.4672810137271881103515625 -0.81752002239227294921875 0.3366149961948394775390625 +-0.4672810137271881103515625 0.81752002239227294921875 0.3366149961948394775390625 +-0.467245829105377208367855246252 -0.1703111045062541961669921875 -0.689329624176025390625 +-0.467245829105377208367855246252 0.1703111045062541961669921875 -0.689329624176025390625 +-0.467134380340576194079460492503 -0.641202402114868230675881477509 0.103177595138549807463057561563 +-0.467134380340576194079460492503 0.641202402114868230675881477509 0.103177595138549807463057561563 +-0.467077004909515369757144753748 -0.0432678986340761170814595004686 -0.44996316730976104736328125 +-0.467077004909515369757144753748 0.0432678986340761170814595004686 -0.44996316730976104736328125 +-0.467046591639518726690738503748 -0.260954539477825153692691628748 0.78502868115901947021484375 +-0.467046591639518726690738503748 0.260954539477825153692691628748 0.78502868115901947021484375 +-0.467029201984405506475894753748 -0.242009407281875588147102007497 0.288643795251846302374332253748 +-0.467029201984405506475894753748 0.242009407281875588147102007497 0.288643795251846302374332253748 +-0.4669955074787139892578125 -0.09371499717235565185546875 -0.15209449827671051025390625 +-0.4669955074787139892578125 0.09371499717235565185546875 -0.15209449827671051025390625 +-0.466968704760074571069594639994 -0.629697045683860756604133257497 -0.536583748459815934594985264994 +-0.466968704760074571069594639994 0.629697045683860756604133257497 -0.536583748459815934594985264994 +-0.4668760001659393310546875 -0.830358028411865234375 -0.30419099330902099609375 +-0.4668760001659393310546875 0.830358028411865234375 -0.30419099330902099609375 +-0.466846910119056712762386496252 -0.371833142638206493035823996252 0.257476051151752483026058371252 +-0.466846910119056712762386496252 0.371833142638206493035823996252 0.257476051151752483026058371252 +-0.466743201017379705231036268742 -0.339104494452476479260383257497 0.396433097124099687036391514994 +-0.466743201017379705231036268742 0.339104494452476479260383257497 0.396433097124099687036391514994 +-0.466736605763435397076221988755 -0.0380270011723041548301615932814 0.288462910056114241186264735006 +-0.466736605763435397076221988755 0.0380270011723041548301615932814 0.288462910056114241186264735006 +-0.466635963320732150005909488755 -0.283864894509315512927116742503 0.0645870499312877766051599337516 +-0.466635963320732150005909488755 0.283864894509315512927116742503 0.0645870499312877766051599337516 +-0.466629600524902377056690738755 0 -0.649812793731689541942841970013 +-0.466558399796485945287827235006 -0.0361993491649627713302450615629 -0.288985955715179487768295985006 +-0.466558399796485945287827235006 0.0361993491649627713302450615629 -0.288985955715179487768295985006 +-0.466178238391876220703125 -0.690342801809310846472556022491 0.169128747284412378482088001874 +-0.466178238391876220703125 0.690342801809310846472556022491 0.169128747284412378482088001874 +-0.466101360321044877466079014994 -0.825107327103614784924445757497 0.0666880995035171453277911268742 +-0.466101360321044877466079014994 0.825107327103614784924445757497 0.0666880995035171453277911268742 +-0.46607793867588043212890625 -0.232844944298267381155298494377 0.388657104969024669305355246252 +-0.46607793867588043212890625 0.232844944298267381155298494377 0.388657104969024669305355246252 +-0.465977990627288785052684261245 -0.338551211357116688116519753748 -0.16807079315185546875 +-0.465977990627288785052684261245 0.338551211357116688116519753748 -0.16807079315185546875 +-0.465946197509765625 -0.59838302433490753173828125 -0.383838759362697568011668636245 +-0.465946197509765625 0.59838302433490753173828125 -0.383838759362697568011668636245 +-0.46577298641204833984375 -0.0613639988005161285400390625 0.171142995357513427734375 +-0.46577298641204833984375 0.0613639988005161285400390625 0.171142995357513427734375 +-0.465707004070282037933026231258 -0.107807701081037529688977372189 -0.272019557654857635498046875 +-0.465707004070282037933026231258 0.107807701081037529688977372189 -0.272019557654857635498046875 +-0.465662452578544661108139735006 -0.2823551595211029052734375 -0.07703244686126708984375 +-0.465662452578544661108139735006 0.2823551595211029052734375 -0.07703244686126708984375 +-0.4656560122966766357421875 0 -0.88496601581573486328125 +-0.46555723249912261962890625 -0.09209850244224071502685546875 0.58075274527072906494140625 +-0.46555723249912261962890625 0.09209850244224071502685546875 0.58075274527072906494140625 +-0.465517109632492043225227007497 -0.826238739490508966589743522491 -0.0558865999802947016616982978121 +-0.465517109632492043225227007497 0.826238739490508966589743522491 -0.0558865999802947016616982978121 +-0.465467977523803755346420985006 -0.642412805557250998766960492503 -0.103177595138549807463057561563 +-0.465467977523803755346420985006 0.642412805557250998766960492503 -0.103177595138549807463057561563 +-0.465418803691864002569644753748 -0.256279206275939919201789507497 -0.278758800029754616467414507497 +-0.465418803691864002569644753748 0.256279206275939919201789507497 -0.278758800029754616467414507497 +-0.46535249054431915283203125 -0.2763847410678863525390625 0.51919050514698028564453125 +-0.46535249054431915283203125 0.2763847410678863525390625 0.51919050514698028564453125 +-0.465299987792968772204460492503 -0.403362417221069358141960492503 0.510680007934570356908920985006 +-0.465299987792968772204460492503 0.403362417221069358141960492503 0.510680007934570356908920985006 +-0.4649227559566497802734375 -0.55328325927257537841796875 -0.200559742748737335205078125 +-0.4649227559566497802734375 0.55328325927257537841796875 -0.200559742748737335205078125 +-0.464715194702148448602230246252 -0.5962696075439453125 -0.26172959804534912109375 +-0.464715194702148448602230246252 0.5962696075439453125 -0.26172959804534912109375 +-0.4646629989147186279296875 -0.583684980869293212890625 0.665883004665374755859375 +-0.4646629989147186279296875 0.583684980869293212890625 0.665883004665374755859375 +-0.464574587345123302117855246252 -0.337528806924819957391292746252 0.692996388673782326428352007497 +-0.464574587345123302117855246252 0.337528806924819957391292746252 0.692996388673782326428352007497 +-0.464569953083991959985610264994 -0.06340394727885723114013671875 -0.826229226589202836450454014994 +-0.464569953083991959985610264994 0.06340394727885723114013671875 -0.826229226589202836450454014994 +-0.464463821053504921643195757497 -0.631968206167221047131477007497 0.327703890204429637567073996252 +-0.464463821053504921643195757497 0.631968206167221047131477007497 0.327703890204429637567073996252 +-0.464398363232612576556590511245 -0.693797221779823281018195757497 -0.159622354060411447695955189374 +-0.464398363232612576556590511245 0.693797221779823281018195757497 -0.159622354060411447695955189374 +-0.464394986629486083984375 -0.574454009532928466796875 -0.674048006534576416015625 +-0.464394986629486083984375 0.574454009532928466796875 -0.674048006534576416015625 +-0.464153623580932650494190738755 -0.271362400054931673931690738755 0.592388010025024391858039507497 +-0.464153623580932650494190738755 0.271362400054931673931690738755 0.592388010025024391858039507497 +-0.463978910446166958880809261245 -0.509569907188415549548210492503 0.122726096212863913792467940311 +-0.463978910446166958880809261245 0.509569907188415549548210492503 0.122726096212863913792467940311 +-0.463699793815612770764289507497 0 0.380765998363494839740184261245 +-0.46368400752544403076171875 -0.124654404819011688232421875 0.438130545616149891241519753748 +-0.46368400752544403076171875 0.124654404819011688232421875 0.438130545616149891241519753748 +-0.463383245468139692846420985006 -0.0758725017309188898284588731258 0.286389937996864352154346988755 +-0.463383245468139692846420985006 0.0758725017309188898284588731258 0.286389937996864352154346988755 +-0.463269302248954795153679242503 -0.435247135162353526727230246252 -0.135799299180507676565454744377 +-0.463269302248954795153679242503 0.435247135162353526727230246252 -0.135799299180507676565454744377 +-0.4631288051605224609375 -0.812570172548294000769431022491 -0.166556844860315328427091685626 +-0.4631288051605224609375 0.812570172548294000769431022491 -0.166556844860315328427091685626 +-0.46299898624420166015625 -0.366553795337677013055355246252 0.1061604022979736328125 +-0.46299898624420166015625 0.366553795337677013055355246252 0.1061604022979736328125 +-0.462730763852596260754523882497 -0.805625641345977694385283029987 0.198362848162651039807258257497 +-0.462730763852596260754523882497 0.805625641345977694385283029987 0.198362848162651039807258257497 +-0.462128984928131092413394753748 -0.049344599246978759765625 0.379475998878478992804019753748 +-0.462128984928131092413394753748 0.049344599246978759765625 0.379475998878478992804019753748 +-0.462097191810607876849559261245 -0.1900632083415985107421875 0.33217799663543701171875 +-0.462097191810607876849559261245 0.1900632083415985107421875 0.33217799663543701171875 +-0.46207500994205474853515625 -0.49566002190113067626953125 0.32141549885272979736328125 +-0.46207500994205474853515625 0.49566002190113067626953125 0.32141549885272979736328125 +-0.4620187282562255859375 -0.396846771240234375 0.437666237354278564453125 +-0.4620187282562255859375 0.396846771240234375 0.437666237354278564453125 +-0.4619404971599578857421875 -0.1913399994373321533203125 0 +-0.4619404971599578857421875 0.1913399994373321533203125 0 +-0.46184027194976806640625 -0.5892862379550933837890625 0.0441120006144046783447265625 +-0.46184027194976806640625 0.5892862379550933837890625 0.0441120006144046783447265625 +-0.461783850193023703845085492503 -0.253143543004989646227897992503 0.158662892878055572509765625 +-0.461783850193023703845085492503 0.253143543004989646227897992503 0.158662892878055572509765625 +-0.461782211065292380602897992503 -0.174225148558616649285823996252 0.242699053883552562371761496252 +-0.461782211065292380602897992503 0.174225148558616649285823996252 0.242699053883552562371761496252 +-0.46170227229595184326171875 -0.1489342488348484039306640625 -0.5719702541828155517578125 +-0.46170227229595184326171875 0.1489342488348484039306640625 -0.5719702541828155517578125 +-0.461483401060104325708266514994 -0.278140795230865434106704014994 0.446845006942748979028579014994 +-0.461483401060104325708266514994 0.278140795230865434106704014994 0.446845006942748979028579014994 +-0.461477708816528331414730246252 -0.624397498369216985558693977509 0.455154293775558493884147992503 +-0.461477708816528331414730246252 0.624397498369216985558693977509 0.455154293775558493884147992503 +-0.461427748203277587890625 -0.0500317476689815521240234375 -0.5891354978084564208984375 +-0.461427748203277587890625 0.0500317476689815521240234375 -0.5891354978084564208984375 +-0.461406555771827708856136496252 -0.167089451849460612908870871252 -0.248365157842636130602897992503 +-0.461406555771827708856136496252 0.167089451849460612908870871252 -0.248365157842636130602897992503 +-0.4613166153430938720703125 -0.471696281433105490954460492503 -0.612119686603546209191506477509 +-0.4613166153430938720703125 0.471696281433105490954460492503 -0.612119686603546209191506477509 +-0.461183786392211858551348768742 -0.462616688013076760022102007497 0.251585593819618202893195757497 +-0.461183786392211858551348768742 0.462616688013076760022102007497 0.251585593819618202893195757497 +-0.461114531755447421002003238755 -0.400165331363677989617855246252 0.22302670776844024658203125 +-0.461114531755447421002003238755 0.400165331363677989617855246252 0.22302670776844024658203125 +-0.46106551587581634521484375 -0.1508887521922588348388671875 0.57197101414203643798828125 +-0.46106551587581634521484375 0.1508887521922588348388671875 0.57197101414203643798828125 +-0.4609535038471221923828125 -0.095888502895832061767578125 0.168307006359100341796875 +-0.4609535038471221923828125 0.095888502895832061767578125 0.168307006359100341796875 +-0.4608890116214752197265625 -0.1696020066738128662109375 0.093895502388477325439453125 +-0.4608890116214752197265625 0.1696020066738128662109375 0.093895502388477325439453125 +-0.460884463787078868524105246252 -0.404786148667335476947215511245 0.588416767120361283716079014994 +-0.460884463787078868524105246252 0.404786148667335476947215511245 0.588416767120361283716079014994 +-0.4607699811458587646484375 -0.58942423760890960693359375 -0.05263274721801280975341796875 +-0.4607699811458587646484375 0.58942423760890960693359375 -0.05263274721801280975341796875 +-0.4607324898242950439453125 -0.0737060010433197021484375 -0.1797029972076416015625 +-0.4607324898242950439453125 0.0737060010433197021484375 -0.1797029972076416015625 +-0.460702505707740739282485264994 -0.741190966963767960962172764994 0.375352613627910614013671875 +-0.460702505707740739282485264994 0.741190966963767960962172764994 0.375352613627910614013671875 +-0.4605414867401123046875 -0.1673440039157867431640625 -0.099486999213695526123046875 +-0.4605414867401123046875 0.1673440039157867431640625 -0.099486999213695526123046875 +-0.460320067405700694695980246252 -0.523134192824363686291633257497 -0.486760163307189908099559261245 +-0.460320067405700694695980246252 0.523134192824363686291633257497 -0.486760163307189908099559261245 +-0.460236062109470323022719639994 -0.490309259295463539807258257497 0.671028676629066400671774772491 +-0.460236062109470323022719639994 0.490309259295463539807258257497 0.671028676629066400671774772491 +-0.460163193941116321905582253748 -0.162715704739093774966463001874 0.501770496368408203125 +-0.460163193941116321905582253748 0.162715704739093774966463001874 0.501770496368408203125 +-0.460146582126617409436164507497 -0.0396251991391181959678569057814 -0.383007609844207730365184261245 +-0.460146582126617409436164507497 0.0396251991391181959678569057814 -0.383007609844207730365184261245 +-0.459973990917205810546875 -0.14800100028514862060546875 -0.12852899730205535888671875 +-0.459973990917205810546875 0.14800100028514862060546875 -0.12852899730205535888671875 +-0.4599010050296783447265625 -0.3341369926929473876953125 -0.822704970836639404296875 +-0.4599010050296783447265625 0.3341369926929473876953125 -0.822704970836639404296875 +-0.459820795059204145971420985006 -0.415403985977172873766960492503 -0.5059688091278076171875 +-0.459820795059204145971420985006 0.415403985977172873766960492503 -0.5059688091278076171875 +-0.459795695543289140161391514994 -0.227869597077369673288060880623 -0.476091712713241521637286268742 +-0.459795695543289140161391514994 0.227869597077369673288060880623 -0.476091712713241521637286268742 +-0.459786593914031982421875 -0.119031000137329090460269753748 -0.366643810272216763568309261245 +-0.459786593914031982421875 0.119031000137329090460269753748 -0.366643810272216763568309261245 +-0.45977699756622314453125 -0.18751700222492218017578125 0.058674998581409454345703125 +-0.45977699756622314453125 0.18751700222492218017578125 0.058674998581409454345703125 +-0.459620213508605990337940738755 -0.4596188962459564208984375 0 +-0.459620213508605990337940738755 0.4596188962459564208984375 0 +-0.459601807594299305304019753748 -0.30377519130706787109375 0.237670201063156116827457253748 +-0.459601807594299305304019753748 0.30377519130706787109375 0.237670201063156116827457253748 +-0.459513008594512939453125 -0.364485597610473610608039507497 -0.126482400298118580206363503748 +-0.459513008594512939453125 0.364485597610473610608039507497 -0.126482400298118580206363503748 +-0.45949840545654296875 -0.212412810325622564144865123126 -0.619469594955444402550881477509 +-0.45949840545654296875 0.212412810325622564144865123126 -0.619469594955444402550881477509 +-0.45949499309062957763671875 -0.295599751174449920654296875 -0.51379501819610595703125 +-0.45949499309062957763671875 0.295599751174449920654296875 -0.51379501819610595703125 +-0.459204185009002674444644753748 -0.507708591222763017114516514994 -0.146161399781703948974609375 +-0.459204185009002674444644753748 0.507708591222763017114516514994 -0.146161399781703948974609375 +-0.45918013155460357666015625 -0.211852543056011199951171875 -0.408377456665039051397769753748 +-0.45918013155460357666015625 0.211852543056011199951171875 -0.408377456665039051397769753748 +-0.4591205120086669921875 -0.15062749385833740234375 0.12852899730205535888671875 +-0.4591205120086669921875 0.15062749385833740234375 0.12852899730205535888671875 +-0.459044086933135975225894753748 -0.735768878459930442126335492503 0.240671691298484813348323996252 +-0.459044086933135975225894753748 0.735768878459930442126335492503 0.240671691298484813348323996252 +-0.458864986896514892578125 -0.18587200343608856201171875 -0.069960497319698333740234375 +-0.458864986896514892578125 0.18587200343608856201171875 -0.069960497319698333740234375 +-0.458651006221771240234375 -0.02032000012695789337158203125 -0.198056995868682861328125 +-0.458651006221771240234375 0.02032000012695789337158203125 -0.198056995868682861328125 +-0.4585259854793548583984375 -0.4155910015106201171875 0.7855169773101806640625 +-0.4585259854793548583984375 0.4155910015106201171875 0.7855169773101806640625 +-0.458376953005790677142528011245 -0.53938789665699005126953125 0.470586356520652782098323996252 +-0.458376953005790677142528011245 0.53938789665699005126953125 0.470586356520652782098323996252 +-0.457915520668029818462940738755 -0.742657488584518410412727007497 -0.220848302543163316213892244377 +-0.457915520668029818462940738755 0.742657488584518410412727007497 -0.220848302543163316213892244377 +-0.457854008674621559826789507497 -0.090927600860595703125 0.376964414119720425677684261245 +-0.457854008674621559826789507497 0.090927600860595703125 0.376964414119720425677684261245 +-0.457811751961708091052116742503 -0.113354451954364790489115932814 0.282946950197219881939503238755 +-0.457811751961708091052116742503 0.113354451954364790489115932814 0.282946950197219881939503238755 +-0.457710278034210216180355246252 -0.0371681984513998059371786553129 0.774028819799423284386818977509 +-0.457710278034210216180355246252 0.0371681984513998059371786553129 0.774028819799423284386818977509 +-0.457671508193016107757244981258 -0.232296903431415568963558371252 0.197674395143985770495476117503 +-0.457671508193016107757244981258 0.232296903431415568963558371252 0.197674395143985770495476117503 +-0.457617616653442360608039507497 -0.230166596174240095651342130623 -0.312425386905670177117855246252 +-0.457617616653442360608039507497 0.230166596174240095651342130623 -0.312425386905670177117855246252 +-0.457534256577491749151676003748 -0.380916754901409138067691628748 -0.74031408131122589111328125 +-0.457534256577491749151676003748 0.380916754901409138067691628748 -0.74031408131122589111328125 +-0.457512524724006663934261496252 -0.637018895149230934826789507497 -0.327703054249286640509097878748 +-0.457512524724006663934261496252 0.637018895149230934826789507497 -0.327703054249286640509097878748 +-0.457454444468021359515574886245 -0.753015616536140353076689279987 -0.355249644815921750140574886245 +-0.457454444468021359515574886245 0.753015616536140353076689279987 -0.355249644815921750140574886245 +-0.457086306810379039422542746252 -0.277312743663787886205795985006 0.129111952334642426931665681877 +-0.457086306810379039422542746252 0.277312743663787886205795985006 0.129111952334642426931665681877 +-0.456969699263572726177784488755 -0.304352942109108015600327235006 0.0323763009160757120330487168758 +-0.456969699263572726177784488755 0.304352942109108015600327235006 0.0323763009160757120330487168758 +-0.456916886568069502416733485006 -0.0724614031612873105148153740629 -0.297449362277984630242855246252 +-0.456916886568069502416733485006 0.0724614031612873105148153740629 -0.297449362277984630242855246252 +-0.4568429887294769287109375 -0.12758849561214447021484375 -0.15816350281238555908203125 +-0.4568429887294769287109375 0.12758849561214447021484375 -0.15816350281238555908203125 +-0.456831094622612010613948996252 -0.303828814625740073473991742503 -0.038644649088382720947265625 +-0.456831094622612010613948996252 0.303828814625740073473991742503 -0.038644649088382720947265625 +-0.4566150009632110595703125 0 0.20372299849987030029296875 +-0.456404960155487038342414507497 -0.261505894362926483154296875 0.667689430713653497839743522491 +-0.456404960155487038342414507497 0.261505894362926483154296875 0.667689430713653497839743522491 +-0.456244182586669877466079014994 -0.389668214321136463507144753748 0 +-0.456244182586669877466079014994 0.389668214321136463507144753748 0 +-0.456214380264282237664730246252 -0.624161577224731534130341970013 0.205647206306457525082365123126 +-0.456214380264282237664730246252 0.624161577224731534130341970013 0.205647206306457525082365123126 +-0.456056106090545643194644753748 -0.239761805534362798519865123126 -0.737920814752578757556022992503 +-0.456056106090545643194644753748 0.239761805534362798519865123126 -0.737920814752578757556022992503 +-0.455851221084594748766960492503 -0.525021600723266645971420985006 0.39566719532012939453125 +-0.455851221084594748766960492503 0.525021600723266645971420985006 0.39566719532012939453125 +-0.45574200153350830078125 -0.331113016605377175061164507497 0.20655119419097900390625 +-0.45574200153350830078125 0.331113016605377175061164507497 0.20655119419097900390625 +-0.4555897414684295654296875 -0.5788792669773101806640625 0.1408432535827159881591796875 +-0.4555897414684295654296875 0.5788792669773101806640625 0.1408432535827159881591796875 +-0.455543993413448311535773882497 -0.1903477050364017486572265625 -0.811632472276687555456931022491 +-0.455543993413448311535773882497 0.1903477050364017486572265625 -0.811632472276687555456931022491 +-0.455238108336925462182875889994 -0.589224180579185463635383257497 -0.589976605772972062524672764994 +-0.455238108336925462182875889994 0.589224180579185463635383257497 -0.589976605772972062524672764994 +-0.455140775442123446392628238755 -0.107777702808380129728682561563 0.768915885686874411852897992503 +-0.455140775442123446392628238755 0.107777702808380129728682561563 0.768915885686874411852897992503 +-0.45506799221038818359375 -0.0411204993724822998046875 0.20303249359130859375 +-0.45506799221038818359375 0.0411204993724822998046875 0.20303249359130859375 +-0.455009996891021728515625 -0.879342973232269287109375 0.14043200016021728515625 +-0.455009996891021728515625 0.879342973232269287109375 0.14043200016021728515625 +-0.454775190353393587994190738755 0 0.658163976669311590050881477509 +-0.454677999019622802734375 -0.882836997509002685546875 -0.117758996784687042236328125 +-0.454677999019622802734375 0.882836997509002685546875 -0.117758996784687042236328125 +-0.454614293575286820825454014994 -0.532283502817153864050681022491 0 +-0.454614293575286820825454014994 0.532283502817153864050681022491 0 +-0.45457880198955535888671875 -0.638698288798332236559929242503 0.536584711074829079358039507497 +-0.45457880198955535888671875 0.638698288798332236559929242503 0.536584711074829079358039507497 +-0.454431903362274181024105246252 -0.45840275287628173828125 0.07654334791004657745361328125 +-0.454431903362274181024105246252 0.45840275287628173828125 0.07654334791004657745361328125 +-0.454176789522171053814503238755 -0.246540792286396054366903740629 -0.188257294893264787161157869377 +-0.454176789522171053814503238755 0.246540792286396054366903740629 -0.188257294893264787161157869377 +-0.454161515831947359966846988755 -0.170004890859127039126619251874 0.432823294401168845446647992503 +-0.454161515831947359966846988755 0.170004890859127039126619251874 0.432823294401168845446647992503 +-0.4540260136127471923828125 -0.13077349960803985595703125 0.1635805070400238037109375 +-0.4540260136127471923828125 0.13077349960803985595703125 0.1635805070400238037109375 +-0.453990995883941650390625 -0.891005992889404296875 0 +-0.453990995883941650390625 0.891005992889404296875 0 +-0.4538230001926422119140625 -0.20779649913311004638671875 0.02941399998962879180908203125 +-0.4538230001926422119140625 0.20779649913311004638671875 0.02941399998962879180908203125 +-0.45378975570201873779296875 -0.527177989482879638671875 0.280460245907306671142578125 +-0.45378975570201873779296875 0.527177989482879638671875 0.280460245907306671142578125 +-0.4537214934825897216796875 -0.20713450014591217041015625 -0.0350989997386932373046875 +-0.4537214934825897216796875 0.20713450014591217041015625 -0.0350989997386932373046875 +-0.453315782546997059210269753748 -0.386297100782394375872996761245 0.367803102731704689709602007497 +-0.453315782546997059210269753748 0.386297100782394375872996761245 0.367803102731704689709602007497 +-0.453299003839492842260483485006 0 -0.311480394005775484966846988755 +-0.453238010406494140625 -0.727953016757965087890625 0.514450013637542724609375 +-0.453238010406494140625 0.727953016757965087890625 0.514450013637542724609375 +-0.453232002258300792352230246252 -0.0658576011657714815994424384371 0.655929613113403364721420985006 +-0.453232002258300792352230246252 0.0658576011657714815994424384371 0.655929613113403364721420985006 +-0.453175467252731334344417746252 -0.426581987738609336169304242503 0.187510691583156585693359375 +-0.453175467252731334344417746252 0.426581987738609336169304242503 0.187510691583156585693359375 +-0.4530167877674102783203125 -0.549828010797500654760483485006 0.549968397617340065686164507497 +-0.4530167877674102783203125 0.549828010797500654760483485006 0.549968397617340065686164507497 +-0.452958351373672518658253238755 -0.3290897905826568603515625 0.330194818973541248663394753748 +-0.452958351373672518658253238755 0.3290897905826568603515625 0.330194818973541248663394753748 +-0.452636814117431673931690738755 -0.626760816574096768505341970013 -0.205647206306457525082365123126 +-0.452636814117431673931690738755 0.626760816574096768505341970013 -0.205647206306457525082365123126 +-0.452439904212951715667401231258 -0.142939494550228141100944867503 -0.278148207068443342748764735006 +-0.452439904212951715667401231258 0.142939494550228141100944867503 -0.278148207068443342748764735006 +-0.452206310629844676629573996252 -0.45790548622608184814453125 -0.0912801511585712432861328125 +-0.452206310629844676629573996252 0.45790548622608184814453125 -0.0912801511585712432861328125 +-0.45220501720905303955078125 -0.5794312655925750732421875 -0.1492304988205432891845703125 +-0.45220501720905303955078125 0.5794312655925750732421875 -0.1492304988205432891845703125 +-0.452152413129806474145766514994 -0.424017298221588123663394753748 -0.325219309329986550061164507497 +-0.452152413129806474145766514994 0.424017298221588123663394753748 -0.325219309329986550061164507497 +-0.452138006687164306640625 -0.0532465018332004547119140625 -0.2067269980907440185546875 +-0.452138006687164306640625 0.0532465018332004547119140625 -0.2067269980907440185546875 +-0.452131384611129727435496761245 -0.388315880298614468646434261245 -0.367134612798690751489516514994 +-0.452131384611129727435496761245 0.388315880298614468646434261245 -0.367134612798690751489516514994 +-0.452073034644126903192073996252 -0.273041455447673830914112613755 -0.153552305698394786492855246252 +-0.452073034644126903192073996252 0.273041455447673830914112613755 -0.153552305698394786492855246252 +-0.45194758474826812744140625 -0.08631479740142822265625 -0.459122288227081287725894753748 +-0.45194758474826812744140625 0.08631479740142822265625 -0.459122288227081287725894753748 +-0.451824617385864213403579014994 -0.388445985317230235711605246252 0.0704585999250411931793536268742 +-0.451824617385864213403579014994 0.388445985317230235711605246252 0.0704585999250411931793536268742 +-0.451812201738357510638621761245 -0.490433287620544389184829014994 0.212933695316314675061164507497 +-0.451812201738357510638621761245 0.490433287620544389184829014994 0.212933695316314675061164507497 +-0.451705509424209616931022992503 -0.402273899316787753033253238755 0.666436511278152510229233485006 +-0.451705509424209616931022992503 0.402273899316787753033253238755 0.666436511278152510229233485006 +-0.451677596569061257092414507497 -0.2793906033039093017578125 0.2791559994220733642578125 +-0.451677596569061257092414507497 0.2793906033039093017578125 0.2791559994220733642578125 +-0.451608610153198197778579014994 -0.194916594028472889288394753748 -0.34359419345855712890625 +-0.451608610153198197778579014994 0.194916594028472889288394753748 -0.34359419345855712890625 +-0.4516024887561798095703125 -0.075773499906063079833984375 0.200782001018524169921875 +-0.4516024887561798095703125 0.075773499906063079833984375 0.200782001018524169921875 +-0.45134818553924560546875 -0.132067796587944014108373380623 0.372616195678710904193309261245 +-0.45134818553924560546875 0.132067796587944014108373380623 0.372616195678710904193309261245 +-0.4513328075408935546875 -0.368702411651611328125 -0.5480480194091796875 +-0.4513328075408935546875 0.368702411651611328125 -0.5480480194091796875 +-0.451327502727508544921875 -0.106510497629642486572265625 -0.18697249889373779296875 +-0.451327502727508544921875 0.106510497629642486572265625 -0.18697249889373779296875 +-0.451235693693161021844417746252 -0.631838697195053144994858485006 -0.455154293775558493884147992503 +-0.451235693693161021844417746252 0.631838697195053144994858485006 -0.455154293775558493884147992503 +-0.450882863998413097039730246252 -0.224555647373199468441740123126 -0.220860201120376603567407869377 +-0.450882863998413097039730246252 0.224555647373199468441740123126 -0.220860201120376603567407869377 +-0.450838682055473338738948996252 -0.274532704055309328960987613755 0.379310119152069080694644753748 +-0.450838682055473338738948996252 0.274532704055309328960987613755 0.379310119152069080694644753748 +-0.450716197490692194183026231258 -0.299807739257812511102230246252 0.0973137021064758439559128078145 +-0.450716197490692194183026231258 0.299807739257812511102230246252 0.0973137021064758439559128078145 +-0.450679582357406571802016514994 -0.0932785034179687416733273153113 -0.527433884143829301294204014994 +-0.450679582357406571802016514994 0.0932785034179687416733273153113 -0.527433884143829301294204014994 +-0.45064365863800048828125 -0.284016443789005257336555132497 -0.662385472655296347888054242503 +-0.45064365863800048828125 0.284016443789005257336555132497 -0.662385472655296347888054242503 +-0.450407648086547873766960492503 -0.209943807125091558285490123126 0.235704141855239884817407869377 +-0.450407648086547873766960492503 0.209943807125091558285490123126 0.235704141855239884817407869377 +-0.450392246246337890625 -0.4551165103912353515625 -0.39053249359130859375 +-0.450392246246337890625 0.4551165103912353515625 -0.39053249359130859375 +-0.4502466022968292236328125 -0.417789003252983126568409488755 -0.657822597026824995580795985006 +-0.4502466022968292236328125 0.417789003252983126568409488755 -0.657822597026824995580795985006 +-0.450119680166244540142628238755 -0.664993804693222112511818977509 0.406417509913444552349659488755 +-0.450119680166244540142628238755 0.664993804693222112511818977509 0.406417509913444552349659488755 +-0.450049597024917646947983485006 -0.150294096767902396472038617503 0.278149288892745982781917746252 +-0.450049597024917646947983485006 0.150294096767902396472038617503 0.278149288892745982781917746252 +-0.450000000000000011102230246252 0 0 +-0.44999729096889495849609375 -0.178401593863964091912777121252 0.758733308315277077404914507497 +-0.44999729096889495849609375 0.178401593863964091912777121252 0.758733308315277077404914507497 +-0.449991178512573253289730246252 -0.128802394866943364926115123126 0.648781585693359419408920985006 +-0.449991178512573253289730246252 0.128802394866943364926115123126 0.648781585693359419408920985006 +-0.449950879812240578381477007497 -0.665365526080131552966179242503 0.278087697923183441162109375 +-0.449950879812240578381477007497 0.665365526080131552966179242503 0.278087697923183441162109375 +-0.449929189682006847039730246252 -0.387945592403411865234375 -0.084035396575927734375 +-0.449929189682006847039730246252 0.387945592403411865234375 -0.084035396575927734375 +-0.449819183349609408306690738755 -0.456996822357177756579460492503 0.4783480167388916015625 +-0.449819183349609408306690738755 0.456996822357177756579460492503 0.4783480167388916015625 +-0.449796009063720692022769753748 -0.356935214996337901727230246252 0.174013799428939824887052623126 +-0.449796009063720692022769753748 0.356935214996337901727230246252 0.174013799428939824887052623126 +-0.449722802639007546154914507497 -0.229029607772827131784154630623 0.324492001533508267474559261245 +-0.449722802639007546154914507497 0.229029607772827131784154630623 0.324492001533508267474559261245 +-0.4493940174579620361328125 -0.202966488897800445556640625 0.56511001288890838623046875 +-0.4493940174579620361328125 0.202966488897800445556640625 0.56511001288890838623046875 +-0.449297010898590087890625 -0.13307000696659088134765625 -0.88341701030731201171875 +-0.449297010898590087890625 0.13307000696659088134765625 -0.88341701030731201171875 +-0.44918501377105712890625 -0.862667977809906005859375 -0.23245699703693389892578125 +-0.44918501377105712890625 0.862667977809906005859375 -0.23245699703693389892578125 +-0.449141705036163296771434261245 -0.457446509599685635638621761245 -0.28109548985958099365234375 +-0.449141705036163296771434261245 0.457446509599685635638621761245 -0.28109548985958099365234375 +-0.449032899737358104363948996252 -0.485466459393501248431590511245 -0.53403373062610626220703125 +-0.449032899737358104363948996252 0.485466459393501248431590511245 -0.53403373062610626220703125 +-0.448846650123596202508480246252 -0.0183037497103214277793803432814 -0.0264897007495164885093608120314 +-0.448846650123596202508480246252 0.0183037497103214277793803432814 -0.0264897007495164885093608120314 +-0.44865824282169342041015625 -0.49246273934841156005859375 -0.344508759677410125732421875 +-0.44865824282169342041015625 0.49246273934841156005859375 -0.344508759677410125732421875 +-0.448636490106582630499332253748 -0.3590931594371795654296875 -0.303772293031215667724609375 +-0.448636490106582630499332253748 0.3590931594371795654296875 -0.303772293031215667724609375 +-0.448612654209136985095085492503 -0.03530610166490077972412109375 0 +-0.448612654209136985095085492503 0.03530610166490077972412109375 0 +-0.448588705062866188733039507497 -0.531055712699890047900908029987 0.082144998013973236083984375 +-0.448588705062866188733039507497 0.531055712699890047900908029987 0.082144998013973236083984375 +-0.448580789566040083471420985006 -0.560493612289428733141960492503 0.353017592430114768298210492503 +-0.448580789566040083471420985006 0.560493612289428733141960492503 0.353017592430114768298210492503 +-0.44857800006866455078125 -0.202714502811431884765625 0.087661497294902801513671875 +-0.44857800006866455078125 0.202714502811431884765625 0.087661497294902801513671875 +-0.448502844572067294048878238755 -0.0185845501720905310893972028907 0.031618349254131317138671875 +-0.448502844572067294048878238755 0.0185845501720905310893972028907 0.031618349254131317138671875 +-0.448400545120239246710269753748 -0.17169685661792755126953125 -0.438129267096519503521534488755 +-0.448400545120239246710269753748 0.17169685661792755126953125 -0.438129267096519503521534488755 +-0.448394817113876298364516514994 -0.210877802968025190866185880623 0.494441515207290627209602007497 +-0.448394817113876298364516514994 0.210877802968025190866185880623 0.494441515207290627209602007497 +-0.448346614837646484375 0 -0.47062210738658905029296875 +-0.44832551479339599609375 -0.184256494045257568359375 0.122693002223968505859375 +-0.44832551479339599609375 0.184256494045257568359375 0.122693002223968505859375 +-0.448293605446815457415965511245 -0.325699912011623349261668636245 0.771655523777007967822783029987 +-0.448293605446815457415965511245 0.325699912011623349261668636245 0.771655523777007967822783029987 +-0.4480769932270050048828125 -0.744723975658416748046875 -0.4945839941501617431640625 +-0.4480769932270050048828125 0.744723975658416748046875 -0.4945839941501617431640625 +-0.447924959659576460424545985006 -0.297356390953063987048210492503 -0.115942200273275383692883622189 +-0.447924959659576460424545985006 0.297356390953063987048210492503 -0.115942200273275383692883622189 +-0.44789551198482513427734375 -0.325411498546600341796875 0.5059612691402435302734375 +-0.44789551198482513427734375 0.325411498546600341796875 0.5059612691402435302734375 +-0.447357606887817393914730246252 -0.0533927977085113525390625 -0.661075210571289151317841970013 +-0.447357606887817393914730246252 0.0533927977085113525390625 -0.661075210571289151317841970013 +-0.447322869300842307360710492503 -0.324998043477535247802734375 -0.341728383302688620837272992503 +-0.447322869300842307360710492503 0.324998043477535247802734375 -0.341728383302688620837272992503 +-0.4472160041332244873046875 -0.850647985935211181640625 0.2763969898223876953125 +-0.4472160041332244873046875 0.850647985935211181640625 0.2763969898223876953125 +-0.4472124874591827392578125 0 -0.22360749542713165283203125 +-0.4472109973430633544921875 -0.525726974010467529296875 -0.723612010478973388671875 +-0.4472109973430633544921875 0.525726974010467529296875 -0.723612010478973388671875 +-0.447210013866424560546875 0 0.894429028034210205078125 +-0.44718374311923980712890625 -0.390974363684654269146534488755 -0.263942900300025928839176003748 +-0.44718374311923980712890625 0.390974363684654269146534488755 -0.263942900300025928839176003748 +-0.447115361690521295745526231258 -0.0226864006370306042770224053129 0.319488942623138427734375 +-0.447115361690521295745526231258 0.0226864006370306042770224053129 0.319488942623138427734375 +-0.44706375896930694580078125 -0.249255001544952392578125 -0.54818473756313323974609375 +-0.44706375896930694580078125 0.249255001544952392578125 -0.54818473756313323974609375 +-0.446955585479736294818309261245 -0.07954140007495880126953125 -0.392305791378021240234375 +-0.446955585479736294818309261245 0.07954140007495880126953125 -0.392305791378021240234375 +-0.446870511770248390881477007497 0 -0.723054182529449418481704014994 +-0.446865758299827608990284488755 0 -0.0530185483396053355842347798443 +-0.446736484766006414215411268742 -0.184004795551300032174779630623 -0.506526279449462824011618522491 +-0.446736484766006414215411268742 0.184004795551300032174779630623 -0.506526279449462824011618522491 +-0.446636390686035111841079014994 0 -0.538995105028152399206931022491 +-0.446582496166229248046875 -0.1807945072650909423828125 -0.1337060034275054931640625 +-0.446582496166229248046875 0.1807945072650909423828125 -0.1337060034275054931640625 +-0.446424007415771484375 -0.324341607093811046258480246252 0.579230403900146462170539507497 +-0.446424007415771484375 0.324341607093811046258480246252 0.579230403900146462170539507497 +-0.446278908848762478900340511245 -0.671594354510307245398337272491 -0.268878790736198414190738503748 +-0.446278908848762478900340511245 0.671594354510307245398337272491 -0.268878790736198414190738503748 +-0.4462589919567108154296875 -0.19988250732421875 -0.104400999844074249267578125 +-0.4462589919567108154296875 0.19988250732421875 -0.104400999844074249267578125 +-0.446069622039794944079460492503 -0.661717605590820379113381477509 0.0561415970325470012336488423443 +-0.446069622039794944079460492503 0.661717605590820379113381477509 0.0561415970325470012336488423443 +-0.446025589108467068744090511245 -0.463337561488151528088508257497 0.555769121646881081311164507497 +-0.446025589108467068744090511245 0.463337561488151528088508257497 0.555769121646881081311164507497 +-0.446012547612190279888721988755 -0.0535846486687660203407368442186 -0.0264860998839139931415598283593 +-0.446012547612190279888721988755 0.0535846486687660203407368442186 -0.0264860998839139931415598283593 +-0.446002906560897804943977007497 -0.530554491281509332800681022491 -0.0979446962475776644607705634371 +-0.446002906560897804943977007497 0.530554491281509332800681022491 -0.0979446962475776644607705634371 +-0.4459942281246185302734375 -0.4461674988269805908203125 0.40561576187610626220703125 +-0.4459942281246185302734375 0.4461674988269805908203125 0.40561576187610626220703125 +-0.44593751430511474609375 -0.11005699634552001953125 0.19755350053310394287109375 +-0.44593751430511474609375 0.11005699634552001953125 0.19755350053310394287109375 +-0.445831000804901123046875 -0.078458003699779510498046875 0.89167201519012451171875 +-0.445831000804901123046875 0.078458003699779510498046875 0.89167201519012451171875 +-0.445641759037971485479801003748 -0.0538893006742000579833984375 0.03161249868571758270263671875 +-0.445641759037971485479801003748 0.0538893006742000579833984375 0.03161249868571758270263671875 +-0.445576810836792014391960492503 -0.662757587432861394738381477509 -0.047052800655364990234375 +-0.445576810836792014391960492503 0.662757587432861394738381477509 -0.047052800655364990234375 +-0.445534202456474293096988503748 0 0.0632411979138851193527059990629 +-0.445504009723663330078125 -0.226993501186370849609375 0 +-0.445504009723663330078125 0.226993501186370849609375 0 +-0.445392447710037220343082253748 -0.0365134511142969145347514370314 -0.0528435006737709087043519673443 +-0.445392447710037220343082253748 0.0365134511142969145347514370314 -0.0528435006737709087043519673443 +-0.445358344912528958392528011245 -0.714150449633598305432258257497 0.118932845443487159031725752811 +-0.445358344912528958392528011245 0.714150449633598305432258257497 0.118932845443487159031725752811 +-0.445165586471557628289730246252 -0.0362933982163667692710795620314 -0.320952486991882335320980246252 +-0.445165586471557628289730246252 0.0362933982163667692710795620314 -0.320952486991882335320980246252 +-0.445136442780494745452557481258 -0.201313750445842765124382367503 -0.252638642489910136834652121252 +-0.445136442780494745452557481258 0.201313750445842765124382367503 -0.252638642489910136834652121252 +-0.445099037885665904656917746252 -0.108026049286127093229659124063 -0.304495415091514620709034488755 +-0.445099037885665904656917746252 0.108026049286127093229659124063 -0.304495415091514620709034488755 +-0.44496650993824005126953125 -0.717324343323707536157485264994 -0.0997474975883960723876953125 +-0.44496650993824005126953125 0.717324343323707536157485264994 -0.0997474975883960723876953125 +-0.444959908723831232268963731258 -0.323280638456344637798878238755 0 +-0.444959908723831232268963731258 0.323280638456344637798878238755 0 +-0.444659587740898143426448996252 -0.0607106480747461388358665601572 0.317950063943862937243522992503 +-0.444659587740898143426448996252 0.0607106480747461388358665601572 0.317950063943862937243522992503 +-0.44458949565887451171875 -0.1653009951114654541015625 0.1581639945507049560546875 +-0.44458949565887451171875 0.1653009951114654541015625 0.1581639945507049560546875 +-0.444460058212280295641960492503 -0.0703944012522697420974893134371 0 +-0.444460058212280295641960492503 0.0703944012522697420974893134371 0 +-0.4441824853420257568359375 -0.1610690057277679443359375 -0.1635805070400238037109375 +-0.4441824853420257568359375 0.1610690057277679443359375 -0.1635805070400238037109375 +-0.444124171137809720111278011245 -0.72474397718906402587890625 0 +-0.444124171137809720111278011245 0.72474397718906402587890625 0 +-0.444119989871978759765625 -0.52673099935054779052734375 -0.296330250799655914306640625 +-0.444119989871978759765625 0.52673099935054779052734375 -0.296330250799655914306640625 +-0.444021758437156688348323996252 -0.0370449006557464627364950615629 0.06302654743194580078125 +-0.444021758437156688348323996252 0.0370449006557464627364950615629 0.06302654743194580078125 +-0.443920803070068370477230246252 -0.190937602519989035876335492503 0.637555217742920010692841970013 +-0.443920803070068370477230246252 0.190937602519989035876335492503 0.637555217742920010692841970013 +-0.443916963040828671527293636245 -0.7766440212726593017578125 0.319784246385097503662109375 +-0.443916963040828671527293636245 0.7766440212726593017578125 0.319784246385097503662109375 +-0.443749487400054931640625 -0.674805593490600652550881477509 -0.397144791483879100457698996252 +-0.443749487400054931640625 0.674805593490600652550881477509 -0.397144791483879100457698996252 +-0.443532200157642331195262386245 -0.788840126991271928247329014994 -0.288981443643569924084602007497 +-0.443532200157642331195262386245 0.788840126991271928247329014994 -0.288981443643569924084602007497 +-0.443450695276260353772102007497 -0.322182002663612354620426003748 0.435373407602310136255141514994 +-0.443450695276260353772102007497 0.322182002663612354620426003748 0.435373407602310136255141514994 +-0.4434460103511810302734375 -0.0862649977207183837890625 -0.21427549421787261962890625 +-0.4434460103511810302734375 0.0862649977207183837890625 -0.21427549421787261962890625 +-0.443405216932296730725227007497 -0.357841384410858109887954014994 -0.40662229061126708984375 +-0.443405216932296730725227007497 0.357841384410858109887954014994 -0.40662229061126708984375 +-0.443381488323211669921875 -0.22348649799823760986328125 0.0588789992034435272216796875 +-0.443381488323211669921875 0.22348649799823760986328125 0.0588789992034435272216796875 +-0.443291401863098122326789507497 -0.322068607807159401623664507497 -0.244467598199844343698217130623 +-0.443291401863098122326789507497 0.322068607807159401623664507497 -0.244467598199844343698217130623 +-0.443251907825469970703125 -0.288899642229080211297542746252 -0.377577182650566112176448996252 +-0.443251907825469970703125 0.288899642229080211297542746252 -0.377577182650566112176448996252 +-0.443220591545104958264289507497 -0.291425406932830810546875 -0.2804051935672760009765625 +-0.443220591545104958264289507497 0.291425406932830810546875 -0.2804051935672760009765625 +-0.443179118633270252569644753748 -0.487924510240554776263621761245 -0.235630497336387606521768134371 +-0.443179118633270252569644753748 0.487924510240554776263621761245 -0.235630497336387606521768134371 +-0.443066638708114635125667746252 -0.4509563446044921875 0.1510970480740070343017578125 +-0.443066638708114635125667746252 0.4509563446044921875 0.1510970480740070343017578125 +-0.442974352836608908923210492503 -0.420444706082344077380241742503 -0.222485893964767450503572376874 +-0.442974352836608908923210492503 0.420444706082344077380241742503 -0.222485893964767450503572376874 +-0.442904412746429443359375 0 -0.404766011238098133429019753748 +-0.442868718504905667376903011245 -0.113493703305721282958984375 -0.716579735279083251953125 +-0.442868718504905667376903011245 0.113493703305721282958984375 -0.716579735279083251953125 +-0.442777204513549793585269753748 -0.158448600769042963198884876874 -0.372615587711334239617855246252 +-0.442777204513549793585269753748 0.158448600769042963198884876874 -0.372615587711334239617855246252 +-0.442602056264877363744858485006 -0.266439802944660186767578125 0.188714906573295621017294365629 +-0.442602056264877363744858485006 0.266439802944660186767578125 0.188714906573295621017294365629 +-0.4425419867038726806640625 -0.486234009265899658203125 0.753480017185211181640625 +-0.4425419867038726806640625 0.486234009265899658203125 0.753480017185211181640625 +-0.442521893978118918688835492503 -0.0183046499267220490192453752343 -0.0796198524534702384292117471887 +-0.442521893978118918688835492503 0.0183046499267220490192453752343 -0.0796198524534702384292117471887 +-0.442488491535186767578125 -0.2219769954681396484375 -0.070215500891208648681640625 +-0.442488491535186767578125 0.2219769954681396484375 -0.070215500891208648681640625 +-0.442465192079544100689503238755 -0.247220090031623845883146373126 0.7437113821506500244140625 +-0.442465192079544100689503238755 0.247220090031623845883146373126 0.7437113821506500244140625 +-0.442391404509544394763054242503 -0.596555095911026067589943977509 -0.508342498540878318102897992503 +-0.442391404509544394763054242503 0.596555095911026067589943977509 -0.508342498540878318102897992503 +-0.442377012968063365594417746252 -0.214890654385089890920923494377 0.424999916553497336657585492503 +-0.442377012968063365594417746252 0.214890654385089890920923494377 0.424999916553497336657585492503 +-0.442373211681842792852847878748 0 -0.840717715024948075708266514994 +-0.441940212249755826068309261245 -0.173955005407333357370092130623 0.366644990444183360711605246252 +-0.441940212249755826068309261245 0.173955005407333357370092130623 0.366644990444183360711605246252 +-0.441911995410919189453125 -0.0998025052249431610107421875 -0.597706496715545654296875 +-0.441911995410919189453125 0.0998025052249431610107421875 -0.597706496715545654296875 +-0.441901209950447071417301003748 0 0.476679462194442737921207253748 +-0.4418984949588775634765625 -0.55761976540088653564453125 0.2372467517852783203125 +-0.4418984949588775634765625 0.55761976540088653564453125 0.2372467517852783203125 +-0.441888749599456787109375 -0.4233824908733367919921875 -0.4335689842700958251953125 +-0.441888749599456787109375 0.4233824908733367919921875 -0.4335689842700958251953125 +-0.441861203312873873638721988755 -0.321028935909271284643295985006 0.0648004479706287411788778740629 +-0.441861203312873873638721988755 0.321028935909271284643295985006 0.0648004479706287411788778740629 +-0.441815996170043967516960492503 -0.524802398681640691613381477509 -0.411560010910034190789730246252 +-0.441815996170043967516960492503 0.524802398681640691613381477509 -0.411560010910034190789730246252 +-0.441807603836059548108039507497 -0.380746185779571533203125 0.140849402546882634945646373126 +-0.441807603836059548108039507497 0.380746185779571533203125 0.140849402546882634945646373126 +-0.4418019950389862060546875 -0.64740598201751708984375 0.621028006076812744140625 +-0.4418019950389862060546875 0.64740598201751708984375 0.621028006076812744140625 +-0.4417040050029754638671875 -0.1564320027828216552734375 0.883418023586273193359375 +-0.4417040050029754638671875 0.1564320027828216552734375 0.883418023586273193359375 +-0.441569709777832053454460492503 -0.781680625677108831261818977509 0.0631781995296478299239950615629 +-0.441569709777832053454460492503 0.781680625677108831261818977509 0.0631781995296478299239950615629 +-0.441556990146636962890625 -0.0206240005791187286376953125 0.2336705029010772705078125 +-0.441556990146636962890625 0.0206240005791187286376953125 0.2336705029010772705078125 +-0.441429848968982685430972878748 -0.554500731825828485632712272491 0.632588854432105995861945757497 +-0.441429848968982685430972878748 0.554500731825828485632712272491 0.632588854432105995861945757497 +-0.4413650035858154296875 -0.0328784994781017303466796875 -0.23262800276279449462890625 +-0.4413650035858154296875 0.0328784994781017303466796875 -0.23262800276279449462890625 +-0.44117523729801177978515625 -0.545731309056281976843649772491 -0.640345606207847528601462272491 +-0.44117523729801177978515625 0.545731309056281976843649772491 -0.640345606207847528601462272491 +-0.441058936715126026495426003748 -0.0718249507248401725112429971887 -0.0529910992830991758872904995314 +-0.441058936715126026495426003748 0.0718249507248401725112429971887 -0.0529910992830991758872904995314 +-0.441016209125518809930355246252 -0.782752490043640114514289507497 -0.0529451999813318266441264370314 +-0.441016209125518809930355246252 0.782752490043640114514289507497 -0.0529451999813318266441264370314 +-0.44083951413631439208984375 -0.60676275193691253662109375 0 +-0.44083951413631439208984375 0.60676275193691253662109375 0 +-0.440767192840576138568309261245 -0.350828397274017322882144753748 -0.206504398584365839175447376874 +-0.440767192840576138568309261245 0.350828397274017322882144753748 -0.206504398584365839175447376874 +-0.440543934702873285491619981258 -0.320072504878044172826889735006 -0.0772947974503040424743005587516 +-0.440543934702873285491619981258 0.320072504878044172826889735006 -0.0772947974503040424743005587516 +-0.440431532263755809442073996252 -0.05297500081360340118408203125 0.47509343922138214111328125 +-0.440431532263755809442073996252 0.05297500081360340118408203125 0.47509343922138214111328125 +-0.440361911058425925524772992503 -0.08877240121364593505859375 -0.0264725999906659133220632185157 +-0.440361911058425925524772992503 0.08877240121364593505859375 -0.0264725999906659133220632185157 +-0.440133103728294394763054242503 -0.186514344811439525262386496252 0.272020655870437666479233485006 +-0.440133103728294394763054242503 0.186514344811439525262386496252 0.272020655870437666479233485006 +-0.440118902921676657946647992503 -0.0600668974220752716064453125 -0.782743477821350119860710492503 +-0.440118902921676657946647992503 0.0600668974220752716064453125 -0.782743477821350119860710492503 +-0.44000720977783203125 -0.31968319416046142578125 -0.586682415008544899670539507497 +-0.44000720977783203125 0.31968319416046142578125 -0.586682415008544899670539507497 +-0.439937987923622153552116742503 -0.0892007969319820459563885606258 0.0315890997648239149619975307814 +-0.439937987923622153552116742503 0.0892007969319820459563885606258 0.0315890997648239149619975307814 +-0.439934539794921919408920985006 -0.0987761482596397483169070596887 0.314961901307106051373096988755 +-0.439934539794921919408920985006 0.0987761482596397483169070596887 0.314961901307106051373096988755 +-0.439760780334472689556690738755 -0.160292804241180419921875 -0.64878082275390625 +-0.439760780334472689556690738755 0.160292804241180419921875 -0.64878082275390625 +-0.43965496122837066650390625 -0.0545359510928392424156108120314 -0.0789264008402824485122195596887 +-0.43965496122837066650390625 0.0545359510928392424156108120314 -0.0789264008402824485122195596887 +-0.4396260082721710205078125 -0.771835982799530029296875 0.4593450129032135009765625 +-0.4396260082721710205078125 0.771835982799530029296875 0.4593450129032135009765625 +-0.439610409736633289679019753748 -0.0724518030881881741622763115629 0.0631939508020877838134765625 +-0.439610409736633289679019753748 0.0724518030881881741622763115629 0.0631939508020877838134765625 +-0.4395414888858795166015625 -0.1401585042476654052734375 -0.19276599586009979248046875 +-0.4395414888858795166015625 0.1401585042476654052734375 -0.19276599586009979248046875 +-0.439495208859443653448551003748 -0.0185854503884911557987091867972 0.094861350953578948974609375 +-0.439495208859443653448551003748 0.0185854503884911557987091867972 0.094861350953578948974609375 +-0.439307510852813720703125 -0.0551914982497692108154296875 0.2322990000247955322265625 +-0.439307510852813720703125 0.0551914982497692108154296875 0.2322990000247955322265625 +-0.439294099807739202301348768742 -0.517218780517578080591079014994 0.171770901978015894107088001874 +-0.439294099807739202301348768742 0.517218780517578080591079014994 0.171770901978015894107088001874 +-0.439227747917175281866519753748 -0.477615454792976401598991742503 0.0382381999865174307395854214064 +-0.439227747917175281866519753748 0.477615454792976401598991742503 0.0382381999865174307395854214064 +-0.439114201068878162725894753748 -0.407347190380096424444644753748 0.0353154011070728260368589701557 +-0.439114201068878162725894753748 0.407347190380096424444644753748 0.0353154011070728260368589701557 +-0.439071109890937838482471988755 -0.371832484006881736071647992503 0.302418999373912811279296875 +-0.439071109890937838482471988755 0.371832484006881736071647992503 0.302418999373912811279296875 +-0.438764888048171985968082253748 -0.318777206540107715948551003748 0.654496589303016684802116742503 +-0.438764888048171985968082253748 0.318777206540107715948551003748 0.654496589303016684802116742503 +-0.43875598907470703125 -0.649734401702880881579460492503 0.159179997444152843133480246252 +-0.43875598907470703125 0.649734401702880881579460492503 0.159179997444152843133480246252 +-0.438753604888916015625 -0.769803321361541725842414507497 -0.157790695130825053826839621252 +-0.438753604888916015625 0.769803321361541725842414507497 -0.157790695130825053826839621252 +-0.438590914011001642425213731258 -0.291021490097045920641960492503 0.159512649476528184377954744377 +-0.438590914011001642425213731258 0.291021490097045920641960492503 0.159512649476528184377954744377 +-0.43853759765625 -0.5631840229034423828125 -0.361260008811950694695980246252 +-0.43853759765625 0.5631840229034423828125 -0.361260008811950694695980246252 +-0.438475191593170166015625 -0.407385599613189708367855246252 -0.042149998247623443603515625 +-0.438475191593170166015625 0.407385599613189708367855246252 -0.042149998247623443603515625 +-0.438376513123512279168636496252 -0.763224291801452681127670985006 0.187922698259353648797542746252 +-0.438376513123512279168636496252 0.763224291801452681127670985006 0.187922698259353648797542746252 +-0.438367807865142844470085492503 -0.477756518125534046514957253748 -0.0456286996603012112716513115629 +-0.438367807865142844470085492503 0.477756518125534046514957253748 -0.0456286996603012112716513115629 +-0.438149988651275634765625 -0.790167987346649169921875 -0.428553998470306396484375 +-0.438149988651275634765625 0.790167987346649169921875 -0.428553998470306396484375 +-0.4379805028438568115234375 -0.14496250450611114501953125 0.19276650249958038330078125 +-0.4379805028438568115234375 0.14496250450611114501953125 0.19276650249958038330078125 +-0.4379384815692901611328125 -0.60112725198268890380859375 0.09672899544239044189453125 +-0.4379384815692901611328125 0.60112725198268890380859375 0.09672899544239044189453125 +-0.437721884250640846936164507497 -0.0289107006043195710609516879686 0.5454945862293243408203125 +-0.437721884250640846936164507497 0.0289107006043195710609516879686 0.5454945862293243408203125 +-0.437665182352066028936832253748 -0.317981305718421924932926003748 -0.444226998090744007452457253748 +-0.437665182352066028936832253748 0.317981305718421924932926003748 -0.444226998090744007452457253748 +-0.437566941976547274517628238755 -0.105048897117376333065763560626 0 +-0.437566941976547274517628238755 0.105048897117376333065763560626 0 +-0.437465250492095947265625 0 -0.6091994941234588623046875 +-0.4373419582843780517578125 0 -0.105980850756168365478515625 +-0.437142419815063520971420985006 -0.594793605804443403783920985006 0.308427190780639681744190738755 +-0.437142419815063520971420985006 0.594793605804443403783920985006 0.308427190780639681744190738755 +-0.437080812454223643914730246252 -0.652985620498657270971420985006 -0.150232803821563731805355246252 +-0.437080812454223643914730246252 0.652985620498657270971420985006 -0.150232803821563731805355246252 +-0.437006893754005476537827235006 -0.177387648820877097399772992503 -0.28294639289379119873046875 +-0.437006893754005476537827235006 0.177387648820877097399772992503 -0.28294639289379119873046875 +-0.436905954778194383081313389994 -0.317430143058300029412777121252 -0.781569722294807367468649772491 +-0.436905954778194383081313389994 0.317430143058300029412777121252 -0.781569722294807367468649772491 +-0.436902898550033558233707253748 -0.4309459030628204345703125 0.336751094460487343518195757497 +-0.436902898550033558233707253748 0.4309459030628204345703125 0.336751094460487343518195757497 +-0.43687498569488525390625 -0.7089660167694091796875 -0.553631007671356201171875 +-0.43687498569488525390625 0.7089660167694091796875 -0.553631007671356201171875 +-0.436794593930244501311932481258 -0.244947445392608653680355246252 0.227401353418827084640341240629 +-0.436794593930244501311932481258 0.244947445392608653680355246252 0.227401353418827084640341240629 +-0.436586406826972972528011496252 -0.0552595507353544276862855610943 0.0940148994326591574965945596887 +-0.436586406826972972528011496252 0.0552595507353544276862855610943 0.0940148994326591574965945596887 +-0.436455005407333396227897992503 -0.702180916070938132556022992503 0.35559721291065216064453125 +-0.436455005407333396227897992503 0.702180916070938132556022992503 0.35559721291065216064453125 +-0.436448362469673167840511496252 -0.251020243763923678326221988755 -0.411098340153694175036491742503 +-0.436448362469673167840511496252 0.251020243763923678326221988755 -0.411098340153694175036491742503 +-0.436390793323516823498664507497 -0.0247500009834766381000559221093 0.411036014556884765625 +-0.436390793323516823498664507497 0.0247500009834766381000559221093 0.411036014556884765625 +-0.43637622892856597900390625 -0.60226200520992279052734375 -0.09672899544239044189453125 +-0.43637622892856597900390625 0.60226200520992279052734375 -0.09672899544239044189453125 +-0.436309790611267067639289507497 -0.265718400478363037109375 -0.314686810970306374279914507497 +-0.436309790611267067639289507497 0.265718400478363037109375 -0.314686810970306374279914507497 +-0.436218738555908203125 -0.37815226614475250244140625 0.47876250743865966796875 +-0.436218738555908203125 0.37815226614475250244140625 0.47876250743865966796875 +-0.436032998561859119757144753748 -0.447323489189147938116519753748 -0.179657404124736796990902121252 +-0.436032998561859119757144753748 0.447323489189147938116519753748 -0.179657404124736796990902121252 +-0.436031061410903919561832253748 -0.1055970527231693267822265625 0.470347148180007945672542746252 +-0.436031061410903919561832253748 0.1055970527231693267822265625 0.470347148180007945672542746252 +-0.436013111472129843981804242503 -0.464503508806228648797542746252 0.635711377859115578381477007497 +-0.436013111472129843981804242503 0.464503508806228648797542746252 0.635711377859115578381477007497 +-0.435921013355255126953125 -0.2431184947490692138671875 0.02942950092256069183349609375 +-0.435921013355255126953125 0.2431184947490692138671875 0.02942950092256069183349609375 +-0.435919958353042591436832253748 -0.0362574007362127317954936245314 -0.105636146664619443025223688437 +-0.435919958353042591436832253748 0.0362574007362127317954936245314 -0.105636146664619443025223688437 +-0.435840058326721180304019753748 -0.589708748459815912390524772491 0.429867944121360756604133257497 +-0.435840058326721180304019753748 0.589708748459815912390524772491 0.429867944121360756604133257497 +-0.4357869923114776611328125 -0.2426024973392486572265625 -0.0351249985396862030029296875 +-0.4357869923114776611328125 0.2426024973392486572265625 -0.0351249985396862030029296875 +-0.4357140064239501953125 -0.2655160129070281982421875 -0.860032021999359130859375 +-0.4357140064239501953125 0.2655160129070281982421875 -0.860032021999359130859375 +-0.43568791449069976806640625 -0.445490932464599587170539507497 -0.578113037347793512488181022491 +-0.43568791449069976806640625 0.445490932464599587170539507497 -0.578113037347793512488181022491 +-0.435684585571289029193309261245 -0.376986587047576870990184261245 -0.167511606216430658511384876874 +-0.435684585571289029193309261245 0.376986587047576870990184261245 -0.167511606216430658511384876874 +-0.43567049503326416015625 -0.55900275707244873046875 -0.245371498167514801025390625 +-0.43567049503326416015625 0.55900275707244873046875 -0.245371498167514801025390625 +-0.435599686205387082171824886245 -0.394811451435089111328125 0.746241128444671608654914507497 +-0.435599686205387082171824886245 0.394811451435089111328125 0.746241128444671608654914507497 +-0.4352324903011322021484375 -0.2169415056705474853515625 0.11622799932956695556640625 +-0.4352324903011322021484375 0.2169415056705474853515625 0.11622799932956695556640625 +-0.43514402210712432861328125 -0.2544022500514984130859375 0.55536375939846038818359375 +-0.43514402210712432861328125 0.2544022500514984130859375 0.55536375939846038818359375 +-0.434979593753814675061164507497 -0.267215394973754849505809261245 0.315259802341461170538394753748 +-0.434979593753814675061164507497 0.267215394973754849505809261245 0.315259802341461170538394753748 +-0.4349569976329803466796875 -0.08979649841785430908203125 0.22967199981212615966796875 +-0.4349569976329803466796875 0.08979649841785430908203125 0.22967199981212615966796875 +-0.434864094853401217388721988755 -0.0724102459847927176772586221887 -0.328862065076828025134147992503 +-0.434864094853401217388721988755 0.0724102459847927176772586221887 -0.328862065076828025134147992503 +-0.4348540008068084716796875 -0.23344099521636962890625 0.86971700191497802734375 +-0.4348540008068084716796875 0.23344099521636962890625 0.86971700191497802734375 +-0.434837001562118519171207253748 -0.401486817002296436651676003748 0.268747054040431976318359375 +-0.434837001562118519171207253748 0.401486817002296436651676003748 0.268747054040431976318359375 +-0.43469919264316558837890625 -0.0432926021516323103477397182814 -0.481313282251358054431022992503 +-0.43469919264316558837890625 0.0432926021516323103477397182814 -0.481313282251358054431022992503 +-0.434520083665847767218082253748 -0.0859586022794246590317257528113 0.542035895586013727331931022491 +-0.434520083665847767218082253748 0.0859586022794246590317257528113 0.542035895586013727331931022491 +-0.434500285983085654528679242503 -0.128918403387069696597322376874 -0.465928468108177173956363503748 +-0.434500285983085654528679242503 0.128918403387069696597322376874 -0.465928468108177173956363503748 +-0.434328991174697864874332253748 -0.257959091663360562396434261245 0.484577804803848211090411268742 +-0.434328991174697864874332253748 0.257959091663360562396434261245 0.484577804803848211090411268742 +-0.434159982204437244757144753748 -0.315432000160217274054019753748 0.2683289945125579833984375 +-0.434159982204437244757144753748 0.315432000160217274054019753748 0.2683289945125579833984375 +-0.433969187736511219366519753748 -0.106687351316213610563643499063 -0.0528074987232685089111328125 +-0.433969187736511219366519753748 0.106687351316213610563643499063 -0.0528074987232685089111328125 +-0.433927905559539750512954014994 -0.516397708654403708727897992503 -0.187189093232154823986945757497 +-0.433927905559539750512954014994 0.516397708654403708727897992503 -0.187189093232154823986945757497 +-0.433854898810386691021534488755 -0.0896976023912429837325888115629 -0.07889489829540252685546875 +-0.433854898810386691021534488755 0.0896976023912429837325888115629 -0.07889489829540252685546875 +-0.433773612976074252056690738755 -0.380975198745727550164730246252 0.553804016113281227795539507497 +-0.433773612976074252056690738755 0.380975198745727550164730246252 0.553804016113281227795539507497 +-0.433646392822265636102230246252 -0.0736361995339393643478231865629 0.408079183101654030529914507497 +-0.433646392822265636102230246252 0.0736361995339393643478231865629 0.408079183101654030529914507497 +-0.433541637659072887078792746252 -0.694892829656600929943977007497 0.227301041781902302130191628748 +-0.433541637659072887078792746252 0.694892829656600929943977007497 0.227301041781902302130191628748 +-0.433453506231308016705128238755 -0.360868504643440279888721988755 -0.7013501822948455810546875 +-0.433453506231308016705128238755 0.360868504643440279888721988755 -0.7013501822948455810546875 +-0.433404505252838134765625 -0.065600000321865081787109375 -0.24053500592708587646484375 +-0.433404505252838134765625 0.065600000321865081787109375 -0.24053500592708587646484375 +-0.43340440094470977783203125 -0.314882744848728191033870871252 0.368116447329521201403679242503 +-0.43340440094470977783203125 0.314882744848728191033870871252 0.368116447329521201403679242503 +-0.433377894759178150518863503748 -0.713383215665817305151108485006 -0.336552295088767994268863503748 +-0.433377894759178150518863503748 0.713383215665817305151108485006 -0.336552295088767994268863503748 +-0.433242416381835970806690738755 -0.492361593246460005346420985006 -0.458127212524414073602230246252 +-0.433242416381835970806690738755 0.492361593246460005346420985006 -0.458127212524414073602230246252 +-0.433002340793609663549545985006 -0.136026547104120265618831808752 0.310653191804885875360042746252 +-0.433002340793609663549545985006 0.136026547104120265618831808752 0.310653191804885875360042746252 +-0.4328930079936981201171875 -0.1986725032329559326171875 0.152095496654510498046875 +-0.4328930079936981201171875 0.1986725032329559326171875 0.152095496654510498046875 +-0.432725012302398681640625 -0.11861349642276763916015625 -0.220634996891021728515625 +-0.432725012302398681640625 0.11861349642276763916015625 -0.220634996891021728515625 +-0.432475769519805874896434261245 -0.701398739218711875231804242503 -0.208578952401876432931615568123 +-0.432475769519805874896434261245 0.701398739218711875231804242503 -0.208578952401876432931615568123 +-0.432444086670875582623096988755 -0.314186397194862410131577235006 0.129533249139785783254907869377 +-0.432444086670875582623096988755 0.314186397194862410131577235006 0.129533249139785783254907869377 +-0.432435151934623729363948996252 -0.107403299957513811979659124063 0.0629644475877284975906533759371 +-0.432435151934623729363948996252 0.107403299957513811979659124063 0.0629644475877284975906533759371 +-0.432281929254531849249332253748 -0.0351032985374331446548623603121 0.731027218699455194617087272491 +-0.432281929254531849249332253748 0.0351032985374331446548623603121 0.731027218699455194617087272491 +-0.432259497046470597680922764994 -0.835375824570655733936064279987 0.133410400152206426449552623126 +-0.432259497046470597680922764994 0.835375824570655733936064279987 0.133410400152206426449552623126 +-0.432006293535232566149772992503 -0.123166354000568398219250809689 -0.0264672003686428070068359375 +-0.432006293535232566149772992503 0.123166354000568398219250809689 -0.0264672003686428070068359375 +-0.431984701752662680895866742503 0 0.126052652299404155389339621252 +-0.431944099068641618188735264994 -0.838695147633552462451689279987 -0.11187104694545269012451171875 +-0.431944099068641618188735264994 0.838695147633552462451689279987 -0.11187104694545269012451171875 +-0.43166385591030120849609375 -0.0722790017724037198165731865629 -0.104604750126600268278487249063 +-0.43166385591030120849609375 0.0722790017724037198165731865629 -0.104604750126600268278487249063 +-0.431567993760108958856136496252 -0.180329404771327972412109375 -0.768914973735809303967414507497 +-0.431567993760108958856136496252 0.180329404771327972412109375 -0.768914973735809303967414507497 +-0.431561350822448785979901231258 -0.257634851336479231420639735006 -0.223336300253868108578458873126 +-0.431561350822448785979901231258 0.257634851336479231420639735006 -0.223336300253868108578458873126 +-0.4315360486507415771484375 -0.123610500991344449128739313437 0.0315796483308076886276083428129 +-0.4315360486507415771484375 0.123610500991344449128739313437 0.0315796483308076886276083428129 +-0.431510388851165771484375 -0.403390789031982388568309261245 0.10523580014705657958984375 +-0.431510388851165771484375 0.403390789031982388568309261245 0.10523580014705657958984375 +-0.431413602828979503289730246252 -0.5076591968536376953125 0.442904806137084994244190738755 +-0.431413602828979503289730246252 0.5076591968536376953125 0.442904806137084994244190738755 +-0.431402385234832763671875 -0.11945579946041107177734375 -0.399528014659881580694644753748 +-0.431402385234832763671875 0.11945579946041107177734375 -0.399528014659881580694644753748 +-0.431369984149932828021434261245 -0.231542408466339111328125 -0.346854007244110085217414507497 +-0.431369984149932828021434261245 0.231542408466339111328125 -0.346854007244110085217414507497 +-0.43129144608974456787109375 -0.84645569324493408203125 0 +-0.43129144608974456787109375 0.84645569324493408203125 0 +-0.431278207898139975817741742503 -0.558212381601333684777443977509 -0.558925205469131491931022992503 +-0.431278207898139975817741742503 0.558212381601333684777443977509 -0.558925205469131491931022992503 +-0.431270009279251076428352007497 -0.462616020441055264544871761245 0.299987798929214455334602007497 +-0.431270009279251076428352007497 0.462616020441055264544871761245 0.299987798929214455334602007497 +-0.431217479705810535772769753748 -0.370390319824218716693309261245 0.408488488197326637951789507497 +-0.431217479705810535772769753748 0.370390319824218716693309261245 0.408488488197326637951789507497 +-0.431148004531860362664730246252 -0.0399395987391471876670756557814 -0.415350615978240966796875 +-0.431148004531860362664730246252 0.0399395987391471876670756557814 -0.415350615978240966796875 +-0.43108199536800384521484375 -0.38944123685359954833984375 -0.47434575855731964111328125 +-0.43108199536800384521484375 0.38944123685359954833984375 -0.47434575855731964111328125 +-0.431050920486450162005809261245 -0.550000488758087158203125 0.041171200573444366455078125 +-0.431050920486450162005809261245 0.550000488758087158203125 0.041171200573444366455078125 +-0.430935609340667713507144753748 -0.343230593204498279913394753748 0.237670201063156116827457253748 +-0.430935609340667713507144753748 0.343230593204498279913394753748 0.237670201063156116827457253748 +-0.4309221208095550537109375 -0.139005298912525165899722878748 -0.533838903903961159436164507497 +-0.4309221208095550537109375 0.139005298912525165899722878748 -0.533838903903961159436164507497 +-0.430902004241943359375 -0.2126609981060028076171875 -0.13819800317287445068359375 +-0.430902004241943359375 0.2126609981060028076171875 -0.13819800317287445068359375 +-0.430837559700012195929019753748 -0.473172056674957264288394753748 0.113959946483373639192215875937 +-0.430837559700012195929019753748 0.473172056674957264288394753748 0.113959946483373639192215875937 +-0.4308280050754547119140625 -0.23811049759387969970703125 0.087696500122547149658203125 +-0.4308280050754547119140625 0.23811049759387969970703125 0.087696500122547149658203125 +-0.430779755115509033203125 -0.199137009680271148681640625 -0.58075274527072906494140625 +-0.430779755115509033203125 0.199137009680271148681640625 -0.58075274527072906494140625 +-0.430719655752182017938167746252 -0.226441705226898187808259876874 -0.696925213932991005627570757497 +-0.430719655752182017938167746252 0.226441705226898187808259876874 -0.696925213932991005627570757497 +-0.430707758665084872173878238755 -0.284882399439811750951889735006 -0.189295698702335368768245871252 +-0.430707758665084872173878238755 0.284882399439811750951889735006 -0.189295698702335368768245871252 +-0.430682003498077392578125 0 -0.253993511199951171875 +-0.430678057670593306127670985006 0 -0.342076909542083751336605246252 +-0.430670353770256086889389735006 -0.340551209449768077508480246252 0.0323763009160757120330487168758 +-0.430670353770256086889389735006 0.340551209449768077508480246252 0.0323763009160757120330487168758 +-0.430668005347251914294304242503 -0.0905337005853652926345986884371 0.0939608998596668243408203125 +-0.430668005347251914294304242503 0.0905337005853652926345986884371 0.0939608998596668243408203125 +-0.430665898323059070929019753748 -0.046696297824382781982421875 -0.549859797954559303967414507497 +-0.430665898323059070929019753748 0.046696297824382781982421875 -0.549859797954559303967414507497 +-0.4306536018848419189453125 -0.605082589387893721166733485006 0.508343410491943425988381477509 +-0.4306536018848419189453125 0.605082589387893721166733485006 0.508343410491943425988381477509 +-0.430600023269653353619190738755 -0.599547195434570356908920985006 -0.308426403999328635485710492503 +-0.430600023269653353619190738755 0.599547195434570356908920985006 -0.308426403999328635485710492503 +-0.430576109886169400287059261245 -0.69155536592006683349609375 0.488727512955665577276676003748 +-0.430576109886169400287059261245 0.69155536592006683349609375 0.488727512955665577276676003748 +-0.430547413229942332879573996252 -0.03667500056326389312744140625 0.125633248686790460757478626874 +-0.430547413229942332879573996252 0.03667500056326389312744140625 0.125633248686790460757478626874 +-0.430327814817428544458266514994 -0.140829502046108223645148882497 0.5338396131992340087890625 +-0.430327814817428544458266514994 0.140829502046108223645148882497 0.5338396131992340087890625 +-0.430270662903785738873096988755 -0.0182889003306627266620676408593 -0.13050945103168487548828125 +-0.430270662903785738873096988755 0.0182889003306627266620676408593 -0.13050945103168487548828125 +-0.430262243747711214947315738755 -0.144462457299232488461271373126 -0.310652634501457247662159488755 +-0.430262243747711214947315738755 0.144462457299232488461271373126 -0.310652634501457247662159488755 +-0.430225789546966552734375 -0.214933794736862165963842130623 0.358760404586791981085269753748 +-0.430225789546966552734375 0.214933794736862165963842130623 0.358760404586791981085269753748 +-0.430128589272499139983807481258 -0.340581992268562339098991742503 -0.038644649088382720947265625 +-0.430128589272499139983807481258 0.340581992268562339098991742503 -0.038644649088382720947265625 +-0.430051982402801513671875 -0.550129288434982210986845529987 -0.0491238974034786182731870951557 +-0.430051982402801513671875 0.550129288434982210986845529987 -0.0491238974034786182731870951557 +-0.4300119876861572265625 -0.4642100036144256591796875 -0.7743380069732666015625 +-0.4300119876861572265625 0.4642100036144256591796875 -0.7743380069732666015625 +-0.429855176806449856830028011245 -0.101790052652359006013504938437 0.726198336482048012463508257497 +-0.429855176806449856830028011245 0.101790052652359006013504938437 0.726198336482048012463508257497 +-0.429557609558105513158920985006 -0.24612319469451904296875 0.628413581848144553454460492503 +-0.429557609558105513158920985006 0.24612319469451904296875 0.628413581848144553454460492503 +-0.429282009601593017578125 -0.19336350262165069580078125 -0.168307006359100341796875 +-0.429282009601593017578125 0.19336350262165069580078125 -0.168307006359100341796875 +-0.428861993551254261358707253748 -0.275893101096153225970653011245 -0.479542016983032171051348768742 +-0.428861993551254261358707253748 0.275893101096153225970653011245 -0.479542016983032171051348768742 +-0.4286355078220367431640625 -0.12366099655628204345703125 0.22578699886798858642578125 +-0.4286355078220367431640625 0.12366099655628204345703125 0.22578699886798858642578125 +-0.4285415112972259521484375 -0.235457003116607666015625 -0.104461498558521270751953125 +-0.4285415112972259521484375 0.235457003116607666015625 -0.104461498558521270751953125 +-0.428520300984382651598991742503 -0.258273595571517966540397992503 0.414927506446838401110710492503 +-0.428520300984382651598991742503 0.258273595571517966540397992503 0.414927506446838401110710492503 +-0.42824208736419677734375 -0.429572638869285594598323996252 0.233615194261074077264339621252 +-0.42824208736419677734375 0.429572638869285594598323996252 0.233615194261074077264339621252 +-0.428110101819038413317741742503 -0.221841956675052659475610994377 0.264590145647525809557976117503 +-0.428110101819038413317741742503 0.221841956675052659475610994377 0.264590145647525809557976117503 +-0.428016006946563720703125 -0.1150656044483184814453125 0.404428195953369151727230246252 +-0.428016006946563720703125 0.1150656044483184814453125 0.404428195953369151727230246252 +-0.42797608673572540283203125 -0.139055854082107549496427623126 0 +-0.42797608673572540283203125 0.139055854082107549496427623126 0 +-0.42784918844699859619140625 -0.519282010197639420923110264994 0.519414597749710105212272992503 +-0.42784918844699859619140625 0.519282010197639420923110264994 0.519414597749710105212272992503 +-0.427738010883331298828125 -0.17911200225353240966796875 0.18697349727153778076171875 +-0.427738010883331298828125 0.17911200225353240966796875 0.18697349727153778076171875 +-0.42770098149776458740234375 -0.58515147864818572998046875 0.192794255912303924560546875 +-0.42770098149776458740234375 0.58515147864818572998046875 0.192794255912303924560546875 +-0.427633202075958229748664507497 -0.401766586303710926397769753748 -0.125353199243545515573217130623 +-0.427633202075958229748664507497 0.401766586303710926397769753748 -0.125353199243545515573217130623 +-0.4274390041828155517578125 -0.06670899689197540283203125 -0.90157902240753173828125 +-0.4274390041828155517578125 0.06670899689197540283203125 -0.90157902240753173828125 +-0.427406841516494773181022992503 -0.0545138999819755540321430942186 -0.129814195632934586965845369377 +-0.427406841516494773181022992503 0.0545138999819755540321430942186 -0.129814195632934586965845369377 +-0.42736051976680755615234375 -0.49220775067806243896484375 0.370937995612621307373046875 +-0.42736051976680755615234375 0.49220775067806243896484375 0.370937995612621307373046875 +-0.427294394373893771099659488755 -0.151093154400587098562525056877 0.4659297466278076171875 +-0.427294394373893771099659488755 0.151093154400587098562525056877 0.4659297466278076171875 +-0.427146491408348094598323996252 -0.310338610410690329821647992503 -0.1540648937225341796875 +-0.427146491408348094598323996252 0.310338610410690329821647992503 -0.1540648937225341796875 +-0.426953145861625693591179242503 -0.211593197286128992251619251874 -0.44208516180515289306640625 +-0.426953145861625693591179242503 0.211593197286128992251619251874 -0.44208516180515289306640625 +-0.426832160353660561291633257497 -0.126416506618261342831388560626 -0.839246159791946388928352007497 +-0.426832160353660561291633257497 0.126416506618261342831388560626 -0.839246159791946388928352007497 +-0.426725763082504261358707253748 -0.819534578919410616748564279987 -0.2208341471850872039794921875 +-0.426725763082504261358707253748 0.819534578919410616748564279987 -0.2208341471850872039794921875 +-0.426633903384208701403679242503 -0.234922605752944962942407869377 -0.255528900027275129858139735006 +-0.426633903384208701403679242503 0.234922605752944962942407869377 -0.255528900027275129858139735006 +-0.426610758900642372815070757497 -0.379925349354743924212840511245 0.629412260651588395532485264994 +-0.426610758900642372815070757497 0.379925349354743924212840511245 0.629412260651588395532485264994 +-0.426403886079788241314503238755 -0.471443691849708579333366742503 -0.1357212997972965240478515625 +-0.426403886079788241314503238755 0.471443691849708579333366742503 -0.1357212997972965240478515625 +-0.42635174095630645751953125 0 0.61702872812747955322265625 +-0.4263209998607635498046875 -0.26124799251556396484375 0 +-0.4263209998607635498046875 0.26124799251556396484375 0 +-0.426245847344398520739616742503 -0.0731061011552810724456463731258 0.124378202855587011166349498126 +-0.426245847344398520739616742503 0.0731061011552810724456463731258 0.124378202855587011166349498126 +-0.426167044043540943487613503748 -0.596736547350883439477797764994 -0.429867944121360756604133257497 +-0.426167044043540943487613503748 0.596736547350883439477797764994 -0.429867944121360756604133257497 +-0.425673143565654721331981136245 -0.70748777687549591064453125 -0.469854794442653656005859375 +-0.425673143565654721331981136245 0.70748777687549591064453125 -0.469854794442653656005859375 +-0.425644183158874478412059261245 -0.369383382797241199835269753748 0.205870807170867919921875 +-0.425644183158874478412059261245 0.369383382797241199835269753748 0.205870807170867919921875 +-0.4254780113697052001953125 -0.667499005794525146484375 -0.61107599735260009765625 +-0.4254780113697052001953125 0.667499005794525146484375 -0.61107599735260009765625 +-0.4254620075225830078125 -0.173075497150421142578125 -0.19755299389362335205078125 +-0.4254620075225830078125 0.173075497150421142578125 -0.19755299389362335205078125 +-0.4253239929676055908203125 0 0.262867987155914306640625 +-0.425323009490966796875 -0.3090110123157501220703125 0.85065400600433349609375 +-0.425323009490966796875 0.3090110123157501220703125 0.85065400600433349609375 +-0.42530219256877899169921875 -0.120320101082324978913895563437 -0.0845059521496295956710653740629 +-0.42530219256877899169921875 0.120320101082324978913895563437 -0.0845059521496295956710653740629 +-0.42523290216922760009765625 -0.394578503072261776996043636245 -0.621276897192001298364516514994 +-0.42523290216922760009765625 0.394578503072261776996043636245 -0.621276897192001298364516514994 +-0.425217092037200927734375 -0.540287315845489501953125 0.131453703343868244513004128748 +-0.425217092037200927734375 0.540287315845489501953125 0.131453703343868244513004128748 +-0.425113031268119778705028011245 -0.628049704432487421179587272491 0.383838759362697568011668636245 +-0.425113031268119778705028011245 0.628049704432487421179587272491 0.383838759362697568011668636245 +-0.425058144330978437963608485006 0 0.349035498499870311395198996252 +-0.424997441470623016357421875 -0.168490394204854954107730691248 0.716581457853317282946647992503 +-0.424997441470623016357421875 0.168490394204854954107730691248 0.716581457853317282946647992503 +-0.42494499683380126953125 -0.830811023712158203125 -0.3594079911708831787109375 +-0.42494499683380126953125 0.830811023712158203125 -0.3594079911708831787109375 +-0.424905002117156982421875 -0.0617415010929107666015625 0.61493401229381561279296875 +-0.424905002117156982421875 0.0617415010929107666015625 0.61493401229381561279296875 +-0.424855203926563229632762386245 -0.80811558663845062255859375 0.262577140331268277240184261245 +-0.424855203926563229632762386245 0.80811558663845062255859375 0.262577140331268277240184261245 +-0.424850447475910164563117632497 -0.49944062530994415283203125 -0.68743140995502471923828125 +-0.424850447475910164563117632497 0.49944062530994415283203125 -0.68743140995502471923828125 +-0.424849513173103321417301003748 0 0.849707576632499628210837272491 +-0.424699205160140980108707253748 -0.308557811379432667120426003748 0.731042075157165571752670985006 +-0.424699205160140980108707253748 0.308557811379432667120426003748 0.731042075157165571752670985006 +-0.424579954147338900494190738755 -0.137344054877758026123046875 -0.0580369479954242692421040317186 +-0.424579954147338900494190738755 0.137344054877758026123046875 -0.0580369479954242692421040317186 +-0.424415737390518243987713731258 -0.336007645726203951763721988755 0.0973137021064758439559128078145 +-0.424415737390518243987713731258 0.336007645726203951763721988755 0.0973137021064758439559128078145 +-0.4243470132350921630859375 -0.58758826553821563720703125 -0.192794255912303924560546875 +-0.4243470132350921630859375 0.58758826553821563720703125 -0.192794255912303924560546875 +-0.4243060052394866943359375 -0.034570001065731048583984375 0.2622390091419219970703125 +-0.4243060052394866943359375 0.034570001065731048583984375 0.2622390091419219970703125 +-0.424264812469482388568309261245 -0.42426359653472900390625 0 +-0.424264812469482388568309261245 0.42426359653472900390625 0 +-0.424222657084465049059929242503 -0.138444752991199487857088001874 0.0580369479954242692421040317186 +-0.424222657084465049059929242503 0.138444752991199487857088001874 0.0580369479954242692421040317186 +-0.42421901226043701171875 -0.553366005420684814453125 0.716816008090972900390625 +-0.42421901226043701171875 0.553366005420684814453125 0.716816008090972900390625 +-0.4242145121097564697265625 -0.2580589950084686279296875 0.058715499937534332275390625 +-0.4242145121097564697265625 0.2580589950084686279296875 0.058715499937534332275390625 +-0.4241439998149871826171875 -0.032908499240875244140625 -0.26271450519561767578125 +-0.4241439998149871826171875 0.032908499240875244140625 -0.26271450519561767578125 +-0.4241352081298828125 -0.267309594154357899054019753748 -0.623421621322631902550881477509 +-0.4241352081298828125 0.267309594154357899054019753748 -0.623421621322631902550881477509 +-0.423906746506690967901676003748 -0.103003652393817909938000809689 -0.110423252731561657991044000937 +-0.423906746506690967901676003748 0.103003652393817909938000809689 -0.110423252731561657991044000937 +-0.423858582973480224609375 -0.1955561935901641845703125 -0.376963806152343761102230246252 +-0.423858582973480224609375 0.1955561935901641845703125 -0.376963806152343761102230246252 +-0.423854094743728648797542746252 -0.121780349314212804623380748126 0.0895382992923259707351846259371 +-0.423854094743728648797542746252 0.121780349314212804623380748126 0.0895382992923259707351846259371 +-0.423618236184120200427116742503 -0.0452325493097305367240501539072 0.347852998971939109118522992503 +-0.423618236184120200427116742503 0.0452325493097305367240501539072 0.347852998971939109118522992503 +-0.423589092493057262078792746252 -0.174224607646465329269247490629 0.3044964969158172607421875 +-0.423589092493057262078792746252 0.174224607646465329269247490629 0.3044964969158172607421875 +-0.423539450764656044690070757497 -0.07453510351479053497314453125 0.847088414430618219519431022491 +-0.423539450764656044690070757497 0.07453510351479053497314453125 0.847088414430618219519431022491 +-0.4235371053218841552734375 -0.492032790184020962787059261245 0.261762896180152859759715511245 +-0.4235371053218841552734375 0.492032790184020962787059261245 0.261762896180152859759715511245 +-0.423483180999755903783920985006 -0.626226377487182683800881477509 0.26172959804534912109375 +-0.423483180999755903783920985006 0.626226377487182683800881477509 0.26172959804534912109375 +-0.42337000370025634765625 -0.098007000982761383056640625 -0.24729050695896148681640625 +-0.42337000370025634765625 0.098007000982761383056640625 -0.24729050695896148681640625 +-0.4233295023441314697265625 -0.256686508655548095703125 -0.0700294971466064453125 +-0.4233295023441314697265625 0.256686508655548095703125 -0.0700294971466064453125 +-0.423240005970001220703125 -0.8121659755706787109375 0.4015649855136871337890625 +-0.423240005970001220703125 0.8121659755706787109375 0.4015649855136871337890625 +-0.42312450706958770751953125 -0.3456585109233856201171875 -0.51379501819610595703125 +-0.42312450706958770751953125 0.3456585109233856201171875 -0.51379501819610595703125 +-0.422619199752807650494190738755 -0.456909608840942393914730246252 -0.5026199817657470703125 +-0.422619199752807650494190738755 0.456909608840942393914730246252 -0.5026199817657470703125 +-0.422495099902153004034488503748 0 -0.154912054538726806640625 +-0.422141844034194968493522992503 -0.494263252615928683209034488755 0 +-0.422141844034194968493522992503 0.494263252615928683209034488755 0 +-0.422100010514259327276676003748 -0.0185625007376074811771271555472 0.15487785637378692626953125 +-0.422100010514259327276676003748 0.0185625007376074811771271555472 0.15487785637378692626953125 +-0.4220580160617828369140625 -0.540802514553070046154914507497 -0.139281798899173719918920255623 +-0.4220580160617828369140625 0.540802514553070046154914507497 -0.139281798899173719918920255623 +-0.421897047758102439196647992503 -0.154279804229736333676115123126 0.0264672003686428070068359375 +-0.421897047758102439196647992503 0.154279804229736333676115123126 0.0264672003686428070068359375 +-0.42186672985553741455078125 -0.1207522451877593994140625 0.6082327365875244140625 +-0.42186672985553741455078125 0.1207522451877593994140625 0.6082327365875244140625 +-0.421801033616066023412827235006 -0.0363230992108583491950746235943 -0.351090309023857127801448996252 +-0.421801033616066023412827235006 0.0363230992108583491950746235943 -0.351090309023857127801448996252 +-0.421777340769767750128238503748 -0.153643946349620835745142244377 -0.0315796483308076886276083428129 +-0.421777340769767750128238503748 0.153643946349620835745142244377 -0.0315796483308076886276083428129 +-0.4217054843902587890625 -0.4284345209598541259765625 0.44845126569271087646484375 +-0.4217054843902587890625 0.4284345209598541259765625 0.44845126569271087646484375 +-0.421471044421196039397869981258 -0.109111750125885018092297684689 -0.336090159416198741570980246252 +-0.421471044421196039397869981258 0.109111750125885018092297684689 -0.336090159416198741570980246252 +-0.421301656961441062243522992503 -0.2784605920314788818359375 0.217864350974559806140007367503 +-0.421301656961441062243522992503 0.2784605920314788818359375 0.217864350974559806140007367503 +-0.421257495880126953125 -0.0689750015735626220703125 0.2603544890880584716796875 +-0.421257495880126953125 0.0689750015735626220703125 0.2603544890880584716796875 +-0.421220257878303583343182481258 -0.334111797809600874487045985006 -0.115942200273275383692883622189 +-0.421220257878303583343182481258 0.334111797809600874487045985006 -0.115942200273275383692883622189 +-0.421104159951210033074886496252 -0.0364882484078407273719868442186 -0.154402193427085887567073996252 +-0.421104159951210033074886496252 0.0364882484078407273719868442186 -0.154402193427085887567073996252 +-0.420936083793640170025440738755 -0.358704450726509083136051003748 0.341531452536582957879573996252 +-0.420936083793640170025440738755 0.358704450726509083136051003748 0.341531452536582957879573996252 +-0.420805791020393393786491742503 -0.104603402316570281982421875 0.120335403084754946623213811563 +-0.420805791020393393786491742503 0.104603402316570281982421875 0.120335403084754946623213811563 +-0.420584011077880903783920985006 0 -0.680521583557128995067841970013 +-0.420552912354469288214176003748 -0.735768020153045654296875 0.30295349657535552978515625 +-0.420552912354469288214176003748 0.735768020153045654296875 0.30295349657535552978515625 +-0.42054449021816253662109375 -0.52546276152133941650390625 0.330953992903232574462890625 +-0.42054449021816253662109375 0.52546276152133941650390625 0.330953992903232574462890625 +-0.420414887368679046630859375 -0.461922308802604653088508257497 0.715806016325950533740751779987 +-0.420414887368679046630859375 0.461922308802604653088508257497 0.715806016325950533740751779987 +-0.420366096496582020147769753748 -0.424775409698486317022769753748 -0.364496994018554676397769753748 +-0.420366096496582020147769753748 0.424775409698486317022769753748 -0.364496994018554676397769753748 +-0.420295956730842579229801003748 -0.0843434974551200838943643134371 -0.136885048449039453677400501874 +-0.420295956730842579229801003748 0.0843434974551200838943643134371 -0.136885048449039453677400501874 +-0.420188400149345386846988503748 -0.747322225570678733141960492503 -0.273771893978118907586605246252 +-0.420188400149345386846988503748 0.747322225570678733141960492503 -0.273771893978118907586605246252 +-0.420027208328247081414730246252 -0.632088804244995139391960492503 -0.253062391281127951891960492503 +-0.420027208328247081414730246252 0.632088804244995139391960492503 -0.253062391281127951891960492503 +-0.41991901397705078125 -0.904838979244232177734375 0.070249997079372406005859375 +-0.41991901397705078125 0.904838979244232177734375 0.070249997079372406005859375 +-0.419855812191963218005241742503 -0.393730348348617587017628238755 -0.301989358663558971063167746252 +-0.419855812191963218005241742503 0.393730348348617587017628238755 -0.301989358663558971063167746252 +-0.419836285710334766729801003748 -0.360579031705856312139957253748 -0.340910711884498618395866742503 +-0.419836285710334766729801003748 0.360579031705856312139957253748 -0.340910711884498618395866742503 +-0.41980350017547607421875 -0.230130493640899658203125 0.14423899352550506591796875 +-0.41980350017547607421875 0.230130493640899658203125 0.14423899352550506591796875 +-0.419802010059356689453125 -0.1583864986896514892578125 0.2206355035305023193359375 +-0.419802010059356689453125 0.1583864986896514892578125 0.2206355035305023193359375 +-0.419788789749145518914730246252 -0.436082410812377974096420985006 0.523076820373535200658920985006 +-0.419788789749145518914730246252 0.436082410812377974096420985006 0.523076820373535200658920985006 +-0.419711895287036895751953125 -0.6150356829166412353515625 0.589976605772972062524672764994 +-0.419711895287036895751953125 0.6150356829166412353515625 0.589976605772972062524672764994 +-0.419699507951736494604233485006 -0.08335030078887939453125 0.345550712943077098504573996252 +-0.419699507951736494604233485006 0.08335030078887939453125 0.345550712943077098504573996252 +-0.419618804752826646264907139994 -0.148610402643680555856420255623 0.83924712240695953369140625 +-0.419618804752826646264907139994 0.148610402643680555856420255623 0.83924712240695953369140625 +-0.419539901614189136846988503748 -0.455402338504791281970085492503 0.197724145650863658563167746252 +-0.419539901614189136846988503748 0.455402338504791281970085492503 0.197724145650863658563167746252 +-0.4195289909839630126953125 -0.905831992626190185546875 -0.0588590018451213836669921875 +-0.4195289909839630126953125 0.905831992626190185546875 -0.0588590018451213836669921875 +-0.419482815265655561987045985006 -0.210986046493053441830411998126 -0.286389937996864352154346988755 +-0.419482815265655561987045985006 0.210986046493053441830411998126 -0.286389937996864352154346988755 +-0.419475603103637684210269753748 -0.423141002655029296875 0.070655398070812225341796875 +-0.419475603103637684210269753748 0.423141002655029296875 0.070655398070812225341796875 +-0.4194605052471160888671875 -0.15189950168132781982421875 -0.225786507129669189453125 +-0.4194605052471160888671875 0.15189950168132781982421875 -0.225786507129669189453125 +-0.419434416294097889288394753748 -0.189435389637947065866185880623 0.527436012029647738330595529987 +-0.419434416294097889288394753748 0.189435389637947065866185880623 0.527436012029647738330595529987 +-0.41939775645732879638671875 -0.05005574785172939300537109375 -0.61975800991058349609375 +-0.41939775645732879638671875 0.05005574785172939300537109375 -0.61975800991058349609375 +-0.419226014614105191302684261245 -0.156927591562271123715177623126 0.399529194831848122326789507497 +-0.419226014614105191302684261245 0.156927591562271123715177623126 0.399529194831848122326789507497 +-0.419195687770843539166065738755 -0.0552275989204645198493714985943 0.154028695821762096063167746252 +-0.419195687770843539166065738755 0.0552275989204645198493714985943 0.154028695821762096063167746252 +-0.419160795211792003289730246252 -0.672141599655151411596420985006 0.111936795711517336759932561563 +-0.419160795211792003289730246252 0.672141599655151411596420985006 0.111936795711517336759932561563 +-0.4190967381000518798828125 -0.637316393852233820105368522491 -0.375081191956996906622379128748 +-0.4190967381000518798828125 0.637316393852233820105368522491 -0.375081191956996906622379128748 +-0.419090411067009005474659488755 0 -0.796469414234161399157585492503 +-0.4187920093536376953125 -0.675128793716430752880341970013 -0.093879997730255126953125 +-0.4187920093536376953125 0.675128793716430752880341970013 -0.093879997730255126953125 +-0.4187476933002471923828125 -0.459631890058517400543536268742 -0.321541509032249428479133257497 +-0.4187476933002471923828125 0.459631890058517400543536268742 -0.321541509032249428479133257497 +-0.4185225069522857666015625 -0.304070256650447845458984375 0.5430285036563873291015625 +-0.4185225069522857666015625 0.304070256650447845458984375 0.5430285036563873291015625 +-0.418488183617591880114616742503 -0.0866157531738281222244424384371 -0.489760035276412986071647992503 +-0.418488183617591880114616742503 0.0866157531738281222244424384371 -0.489760035276412986071647992503 +-0.418315815925598133429019753748 -0.393767988681793190686164507497 0.1730867922306060791015625 +-0.418315815925598133429019753748 0.393767988681793190686164507497 0.1730867922306060791015625 +-0.418223834037780795025440738755 -0.357195863127708457263054242503 0 +-0.418223834037780795025440738755 0.357195863127708457263054242503 0 +-0.418196699023246798443409488755 -0.525316482782363869397102007497 0.599294704198837346886818977509 +-0.418196699023246798443409488755 0.525316482782363869397102007497 0.599294704198837346886818977509 +-0.4181902706623077392578125 -0.62036025524139404296875 0.05263274721801280975341796875 +-0.4181902706623077392578125 0.62036025524139404296875 0.05263274721801280975341796875 +-0.418115401268005337787059261245 -0.30377519130706787109375 0.304795217514038097039730246252 +-0.418115401268005337787059261245 0.30377519130706787109375 0.304795217514038097039730246252 +-0.418035811185836769787727007497 -0.303717398643493619037059261245 0.472230517864227261615184261245 +-0.418035811185836769787727007497 0.303717398643493619037059261245 0.472230517864227261615184261245 +-0.417999219894409190789730246252 -0.6821119785308837890625 0 +-0.417999219894409190789730246252 0.6821119785308837890625 0 +-0.4179849922657012939453125 -0.705231010913848876953125 0.572659015655517578125 +-0.4179849922657012939453125 0.705231010913848876953125 0.572659015655517578125 +-0.4179554879665374755859375 -0.517008608579635597912727007497 -0.606643205881118752209602007497 +-0.4179554879665374755859375 0.517008608579635597912727007497 -0.606643205881118752209602007497 +-0.417883792519569363665965511245 -0.233485640585422510318025501874 0.70239408314228057861328125 +-0.417883792519569363665965511245 0.233485640585422510318025501874 0.70239408314228057861328125 +-0.417814104259014107434211382497 -0.563413146138191156531149772491 -0.480101248621940590588508257497 +-0.417814104259014107434211382497 0.563413146138191156531149772491 -0.480101248621940590588508257497 +-0.417763501405715997893963731258 -0.303520265221595808569077235006 0.189338594675064114669638115629 +-0.417763501405715997893963731258 0.303520265221595808569077235006 0.189338594675064114669638115629 +-0.41772826015949249267578125 -0.6213352382183074951171875 -0.0441120006144046783447265625 +-0.41772826015949249267578125 0.6213352382183074951171875 -0.0441120006144046783447265625 +-0.417644707858562447277961382497 -0.733244183659553461218649772491 0.436377762258052803723273882497 +-0.417644707858562447277961382497 0.733244183659553461218649772491 0.436377762258052803723273882497 +-0.417421209812164295538394753748 -0.422681987285614013671875 -0.08425860106945037841796875 +-0.417421209812164295538394753748 0.422681987285614013671875 -0.08425860106945037841796875 +-0.417259508371353116107371761245 -0.232638001441955538650674384371 -0.5116390883922576904296875 +-0.417259508371353116107371761245 0.232638001441955538650674384371 -0.5116390883922576904296875 +-0.417182385921478271484375 -0.079675197601318359375 -0.423805189132690440789730246252 +-0.417182385921478271484375 0.079675197601318359375 -0.423805189132690440789730246252 +-0.4171729981899261474609375 -0.8917419910430908203125 -0.17539300024509429931640625 +-0.4171729981899261474609375 0.8917419910430908203125 -0.17539300024509429931640625 +-0.417060154676437366827457253748 -0.424771758913993824346988503748 -0.261017240583896636962890625 +-0.417060154676437366827457253748 0.424771758913993824346988503748 -0.261017240583896636962890625 +-0.417038059234619118420539507497 -0.738253924250602655554587272491 0.0596682995557785006424111884371 +-0.417038059234619118420539507497 0.738253924250602655554587272491 0.0596682995557785006424111884371 +-0.416817617416381847039730246252 -0.10681760311126708984375 -0.67442798614501953125 +-0.416817617416381847039730246252 0.10681760311126708984375 -0.67442798614501953125 +-0.4165979921817779541015625 -0.884759008884429931640625 0.20892299711704254150390625 +-0.4165979921817779541015625 0.884759008884429931640625 0.20892299711704254150390625 +-0.416546654701232921258480246252 -0.493123161792755171362045985006 0.0762774981558322906494140625 +-0.416546654701232921258480246252 0.493123161792755171362045985006 0.0762774981558322906494140625 +-0.416515308618545521124332253748 -0.739266240596771262438835492503 -0.0500037999823689446876606723436 +-0.416515308618545521124332253748 0.739266240596771262438835492503 -0.0500037999823689446876606723436 +-0.416366615891456626208366742503 -0.195815102756023401431306751874 0.459124264121055614129573996252 +-0.416366615891456626208366742503 0.195815102756023401431306751874 0.459124264121055614129573996252 +-0.416261279582977261615184261245 -0.416422998905181862561164507497 0.378574711084365800317641514994 +-0.416261279582977261615184261245 0.416422998905181862561164507497 0.378574711084365800317641514994 +-0.416242489218711819720653011245 -0.750659587979316644812399772491 -0.407126298546791054455695757497 +-0.416242489218711819720653011245 0.750659587979316644812399772491 -0.407126298546791054455695757497 +-0.4161925017833709716796875 -0.10304950177669525146484375 0.257224500179290771484375 +-0.4161925017833709716796875 0.10304950177669525146484375 0.257224500179290771484375 +-0.4161757528781890869140625 -0.1790040023624897003173828125 0.5977080166339874267578125 +-0.4161757528781890869140625 0.1790040023624897003173828125 0.5977080166339874267578125 +-0.416158783435821522100894753748 -0.253414803743362393451121761245 0.350132417678833018914730246252 +-0.416158783435821522100894753748 0.253414803743362393451121761245 0.350132417678833018914730246252 +-0.4160650074481964111328125 -0.21117900311946868896484375 0.17970399558544158935546875 +-0.4160650074481964111328125 0.21117900311946868896484375 0.17970399558544158935546875 +-0.415746447443962108270198996252 -0.17220599949359893798828125 0 +-0.415746447443962108270198996252 0.17220599949359893798828125 0 +-0.415667852759361244885383257497 -0.05672984756529331207275390625 -0.739257729053497292248664507497 +-0.415667852759361244885383257497 0.05672984756529331207275390625 -0.739257729053497292248664507497 +-0.415533006191253662109375 -0.25210249423980712890625 0.117374502122402191162109375 +-0.415533006191253662109375 0.25210249423980712890625 0.117374502122402191162109375 +-0.4154269993305206298828125 -0.2766844928264617919921875 0.0294330008327960968017578125 +-0.4154269993305206298828125 0.2766844928264617919921875 0.0294330008327960968017578125 +-0.415378987789154052734375 -0.065874002873897552490234375 -0.27040851116180419921875 +-0.415378987789154052734375 0.065874002873897552490234375 -0.27040851116180419921875 +-0.4153009951114654541015625 -0.2762080132961273193359375 -0.03513149917125701904296875 +-0.4153009951114654541015625 0.2762080132961273193359375 -0.03513149917125701904296875 +-0.415031236410140946802016514994 -0.673517715930938676294204014994 -0.525949457287788413317741742503 +-0.415031236410140946802016514994 0.673517715930938676294204014994 -0.525949457287788413317741742503 +-0.414858153462410006451221988755 -0.0862996526062488611419354356258 0.151476305723190318719417746252 +-0.414858153462410006451221988755 0.0862996526062488611419354356258 0.151476305723190318719417746252 +-0.41482673585414886474609375 -0.170861595869064325503572376874 -0.470345830917358431744190738755 +-0.41482673585414886474609375 0.170861595869064325503572376874 -0.470345830917358431744190738755 +-0.414800110459327686651676003748 -0.152641806006431596243189119377 0.0845059521496295956710653740629 +-0.414800110459327686651676003748 0.152641806006431596243189119377 0.0845059521496295956710653740629 +-0.414733791351318381579460492503 0 -0.500495454668998696057258257497 +-0.414659240841865561755241742503 -0.0663354009389877374847088731258 -0.161732697486877435855134876874 +-0.414659240841865561755241742503 0.0663354009389877374847088731258 -0.161732697486877435855134876874 +-0.414511990547180131372329014994 -0.491615599393844582287727007497 -0.276574900746345497815070757497 +-0.414511990547180131372329014994 0.491615599393844582287727007497 -0.276574900746345497815070757497 +-0.414487338066101107525440738755 -0.150609603524208074398771373126 -0.0895382992923259707351846259371 +-0.414487338066101107525440738755 0.150609603524208074398771373126 -0.0895382992923259707351846259371 +-0.4143784046173095703125 -0.727036470174789450915397992503 -0.149024545401334751471011941248 +-0.4143784046173095703125 0.727036470174789450915397992503 -0.149024545401334751471011941248 +-0.41420249640941619873046875 -0.4920022487640380859375 -0.38583751022815704345703125 +-0.41420249640941619873046875 0.4920022487640380859375 -0.38583751022815704345703125 +-0.414172565937042269634815738755 -0.356075486540794405865284488755 0.0645870499312877766051599337516 +-0.414172565937042269634815738755 0.356075486540794405865284488755 0.0645870499312877766051599337516 +-0.414145556092262279168636496252 -0.492657741904258761334034488755 -0.0909486465156078421889773721887 +-0.414145556092262279168636496252 0.492657741904258761334034488755 -0.0909486465156078421889773721887 +-0.414125990867614757195980246252 -0.33147060871124267578125 -0.2804051935672760009765625 +-0.414125990867614757195980246252 0.33147060871124267578125 -0.2804051935672760009765625 +-0.414037796854972883764389735006 -0.256108053028583526611328125 0.255892999470233917236328125 +-0.414037796854972883764389735006 0.256108053028583526611328125 0.255892999470233917236328125 +-0.414022262394428242071597878748 -0.720822942256927445825454014994 0.177482548356056202276676003748 +-0.414022262394428242071597878748 0.720822942256927445825454014994 0.177482548356056202276676003748 +-0.413976591825485240594417746252 -0.133200900256633752993806751874 -0.115676097571849822998046875 +-0.413976591825485240594417746252 0.133200900256633752993806751874 -0.115676097571849822998046875 +-0.413974559307098421978565738755 -0.178673544526100180895866742503 -0.3149613440036773681640625 +-0.413974559307098421978565738755 0.178673544526100180895866742503 -0.3149613440036773681640625 +-0.413928306102752663342414507497 -0.252240212261676755023387386245 -0.817030420899391152111945757497 +-0.413928306102752663342414507497 0.252240212261676755023387386245 -0.817030420899391152111945757497 +-0.413910904526710532458366742503 -0.300723293423652671130241742503 -0.740434473752975441662727007497 +-0.413910904526710532458366742503 0.300723293423652671130241742503 -0.740434473752975441662727007497 +-0.413908195495605479852230246252 -0.158489406108856201171875 -0.404427015781402554583934261245 +-0.413908195495605479852230246252 0.158489406108856201171875 -0.404427015781402554583934261245 +-0.4138584136962890625 0 -0.434420406818389892578125 +-0.413799297809600841180355246252 -0.168765302002429978811548494377 0.0528074987232685089111328125 +-0.413799297809600841180355246252 0.168765302002429978811548494377 0.0528074987232685089111328125 +-0.413735836744308527190838731258 -0.121062146872282033749357310626 0.341564846038818370477230246252 +-0.413735836744308527190838731258 0.121062146872282033749357310626 0.341564846038818370477230246252 +-0.413208460807800326275440738755 -0.135564744472503662109375 0.115676097571849822998046875 +-0.413208460807800326275440738755 0.135564744472503662109375 0.115676097571849822998046875 +-0.4131689965724945068359375 -0.3826780021190643310546875 0.82634699344635009765625 +-0.4131689965724945068359375 0.3826780021190643310546875 0.82634699344635009765625 +-0.413111300766468014789012386245 -0.2217689454555511474609375 0.8262311518192291259765625 +-0.413111300766468014789012386245 0.2217689454555511474609375 0.8262311518192291259765625 +-0.412978488206863392218082253748 -0.167284803092479700259431751874 -0.0629644475877284975906533759371 +-0.412978488206863392218082253748 0.167284803092479700259431751874 -0.0629644475877284975906533759371 +-0.412955188751220725329460492503 -0.300025606155395530016960492503 0.615996789932251043175881477509 +-0.412955188751220725329460492503 0.300025606155395530016960492503 0.615996789932251043175881477509 +-0.412913417816162087170539507497 -0.2999981939792633056640625 -0.315441584587097145764289507497 +-0.412913417816162087170539507497 0.2999981939792633056640625 -0.315441584587097145764289507497 +-0.412887990474700927734375 -0.22412799298763275146484375 -0.171142995357513427734375 +-0.412887990474700927734375 0.22412799298763275146484375 -0.171142995357513427734375 +-0.412785905599594105108707253748 -0.0182880001142621054222026089064 -0.1782512962818145751953125 +-0.412785905599594105108707253748 0.0182880001142621054222026089064 -0.1782512962818145751953125 +-0.412784993648529052734375 -0.360899412631988492083934261245 -0.243639600276947004831029630623 +-0.412784993648529052734375 0.360899412631988492083934261245 -0.243639600276947004831029630623 +-0.412673386931419361456363503748 -0.37403190135955810546875 0.706965279579162664269631477509 +-0.412673386931419361456363503748 0.37403190135955810546875 0.706965279579162664269631477509 +-0.412506759166717529296875 -0.299702994525432586669921875 -0.5500147640705108642578125 +-0.412506759166717529296875 0.299702994525432586669921875 -0.5500147640705108642578125 +-0.412451195716857899054019753748 -0.0931490048766136086166866903113 -0.557859396934509255139289507497 +-0.412451195716857899054019753748 0.0931490048766136086166866903113 -0.557859396934509255139289507497 +-0.412438595294952359271434261245 -0.520445114374160744397102007497 0.221430301666259737869424384371 +-0.412438595294952359271434261245 0.520445114374160744397102007497 0.221430301666259737869424384371 +-0.412435090541839632916065738755 -0.355616793036460931975994981258 -0.07703244686126708984375 +-0.412435090541839632916065738755 0.355616793036460931975994981258 -0.07703244686126708984375 +-0.412429499626159656866519753748 -0.395156991481780961450454014994 -0.404664385318756092413394753748 +-0.412429499626159656866519753748 0.395156991481780961450454014994 -0.404664385318756092413394753748 +-0.412313008308410666735710492503 -0.327190613746643099712940738755 0.159512649476528184377954744377 +-0.412313008308410666735710492503 0.327190613746643099712940738755 0.159512649476528184377954744377 +-0.412275731563568115234375 -0.1502745039761066436767578125 -0.608232021331787109375 +-0.412275731563568115234375 0.1502745039761066436767578125 -0.608232021331787109375 +-0.412245902419090315405014735006 -0.209943807125091558285490123126 0.297451001405715953485042746252 +-0.412245902419090315405014735006 0.209943807125091558285490123126 0.297451001405715953485042746252 +-0.412207505106925942151008257497 -0.663170865178108193127570757497 0.335841812193393707275390625 +-0.412207505106925942151008257497 0.663170865178108193127570757497 0.335841812193393707275390625 +-0.412090003490447998046875 0 -0.2831639945507049560546875 +-0.411790160834789253918586382497 -0.438697758316993702276676003748 0.600394079089164756091179242503 +-0.411790160834789253918586382497 0.438697758316993702276676003748 0.600394079089164756091179242503 +-0.411775645613670360223323996252 -0.299169002473354372906300113755 0.404275307059288047106804242503 +-0.411775645613670360223323996252 0.299169002473354372906300113755 0.404275307059288047106804242503 +-0.411733415722846995965511496252 -0.332281285524368308337272992503 -0.377577841281890869140625 +-0.411733415722846995965511496252 0.332281285524368308337272992503 -0.377577841281890869140625 +-0.4115310013294219970703125 -0.6222879886627197265625 -0.665883004665374755859375 +-0.4115310013294219970703125 0.6222879886627197265625 -0.665883004665374755859375 +-0.411523467302322421002003238755 -0.453072759509086597784488503748 -0.218799747526645660400390625 +-0.411523467302322421002003238755 0.453072759509086597784488503748 -0.218799747526645660400390625 +-0.411450213193893410412727007497 -0.566311901807785011975227007497 0 +-0.411450213193893410412727007497 0.566311901807785011975227007497 0 +-0.411333739757537841796875 -0.6091260015964508056640625 0.149231247603893280029296875 +-0.411333739757537841796875 0.6091260015964508056640625 0.149231247603893280029296875 +-0.4113090038299560546875 -0.12994499504566192626953125 -0.2528620064258575439453125 +-0.4113090038299560546875 0.12994499504566192626953125 -0.2528620064258575439453125 +-0.411158689856529258044304242503 -0.114829646050930031520032059689 -0.142347152531147019827173494377 +-0.411158689856529258044304242503 0.114829646050930031520032059689 -0.142347152531147019827173494377 +-0.411128997802734375 -0.52798502147197723388671875 -0.338681258261203765869140625 +-0.411128997802734375 0.52798502147197723388671875 -0.338681258261203765869140625 +-0.4109754860401153564453125 -0.24821950495243072509765625 -0.13959300518035888671875 +-0.4109754860401153564453125 0.24821950495243072509765625 -0.13959300518035888671875 +-0.410953500866889975817741742503 0 0.183350698649883264712556751874 +-0.410202407836914084704460492503 -0.555019998550415061266960492503 0.404581594467163130346420985006 +-0.410202407836914084704460492503 0.555019998550415061266960492503 0.404581594467163130346420985006 +-0.4100592136383056640625 -0.419285583496093794408920985006 -0.544106388092041037829460492503 +-0.4100592136383056640625 0.419285583496093794408920985006 -0.544106388092041037829460492503 +-0.4099520146846771240234375 -0.3996039927005767822265625 -0.81991302967071533203125 +-0.4099520146846771240234375 0.3996039927005767822265625 -0.81991302967071533203125 +-0.409893512725830078125 -0.20414149761199951171875 -0.200782001018524169921875 +-0.409893512725830078125 0.20414149761199951171875 -0.200782001018524169921875 +-0.40982101857662200927734375 -0.5576190054416656494140625 0.28915049135684967041015625 +-0.40982101857662200927734375 0.5576190054416656494140625 0.28915049135684967041015625 +-0.40976326167583465576171875 -0.61217401921749114990234375 -0.1408432535827159881591796875 +-0.40976326167583465576171875 0.61217401921749114990234375 -0.1408432535827159881591796875 +-0.40974199771881103515625 -0.272552490234375 0.08846700191497802734375 +-0.40974199771881103515625 0.272552490234375 0.08846700191497802734375 +-0.409709286689758311883480246252 -0.0729129500687122344970703125 -0.359613642096519525725994981258 +-0.409709286689758311883480246252 0.0729129500687122344970703125 -0.359613642096519525725994981258 +-0.409561192989349398541065738755 -0.03700844943523406982421875 0.182729244232177734375 +-0.409561192989349398541065738755 0.03700844943523406982421875 0.182729244232177734375 +-0.409508997201919577868522992503 -0.791408675909042402807358485006 0.126388800144195567742855246252 +-0.409508997201919577868522992503 0.791408675909042402807358485006 0.126388800144195567742855246252 +-0.409461498260498046875 -0.19085800647735595703125 0.214276492595672607421875 +-0.409461498260498046875 0.19085800647735595703125 0.214276492595672607421875 +-0.409372755885124173236278011245 -0.340820254385471310687449886245 -0.66238628327846527099609375 +-0.409372755885124173236278011245 0.340820254385471310687449886245 -0.66238628327846527099609375 +-0.409301345050334941522152121252 -0.673750814795494035180922764994 -0.317854945361614238397152121252 +-0.409301345050334941522152121252 0.673750814795494035180922764994 -0.317854945361614238397152121252 +-0.409210199117660544665397992503 -0.794553297758102461401108485006 -0.1059830971062183380126953125 +-0.409210199117660544665397992503 0.794553297758102461401108485006 -0.1059830971062183380126953125 +-0.4091556072235107421875 -0.266676592826843250616519753748 -0.348532783985137928350894753748 +-0.4091556072235107421875 0.266676592826843250616519753748 -0.348532783985137928350894753748 +-0.409135997295379638671875 -0.13663099706172943115234375 0.252862989902496337890625 +-0.409135997295379638671875 0.13663099706172943115234375 0.252862989902496337890625 +-0.408984589576721180304019753748 -0.41626739501953125 0.13947419822216033935546875 +-0.408984589576721180304019753748 0.41626739501953125 0.13947419822216033935546875 +-0.408899402618408180920539507497 -0.388102805614471413342414507497 -0.205371594429016118832365123126 +-0.408899402618408180920539507497 0.388102805614471413342414507497 -0.205371594429016118832365123126 +-0.408742582798004128186164507497 -0.561052101850509576941306022491 0.0902803957462310763260049384371 +-0.408742582798004128186164507497 0.561052101850509576941306022491 0.0902803957462310763260049384371 +-0.4087150096893310546875 -0.865871012210845947265625 -0.2884779870510101318359375 +-0.4087150096893310546875 0.865871012210845947265625 -0.2884779870510101318359375 +-0.40862341225147247314453125 -0.117696149647235875912443248126 0.147222456336021434442073996252 +-0.40862341225147247314453125 0.117696149647235875912443248126 0.147222456336021434442073996252 +-0.4085918962955474853515625 -0.8019053936004638671875 0 +-0.4085918962955474853515625 0.8019053936004638671875 0 +-0.408511388301849354132144753748 -0.440999503433704365118472878748 -0.735621106624603227075454014994 +-0.408511388301849354132144753748 0.440999503433704365118472878748 -0.735621106624603227075454014994 +-0.408440700173378024029346988755 -0.187016849219799052850277121252 0.0264725999906659133220632185157 +-0.408440700173378024029346988755 0.187016849219799052850277121252 0.0264725999906659133220632185157 +-0.408349344134330771716179242503 -0.186421050131320958920255748126 -0.0315890997648239149619975307814 +-0.408349344134330771716179242503 0.186421050131320958920255748126 -0.0315890997648239149619975307814 +-0.408348011970520008429019753748 -0.198360604047775251901342130623 0.392307615280151344983039507497 +-0.408348011970520008429019753748 0.198360604047775251901342130623 0.392307615280151344983039507497 +-0.408300900459289517474559261245 0 -0.568586194515228182666533029987 +-0.408039188385009798931690738755 -0.654016780853271528783920985006 0.213930392265319846423210492503 +-0.408039188385009798931690738755 0.654016780853271528783920985006 0.213930392265319846423210492503 +-0.40791594982147216796875 -0.480274581909179709704460492503 0.159501551836729066335962556877 +-0.40791594982147216796875 0.480274581909179709704460492503 0.159501551836729066335962556877 +-0.407914209365844715460269753748 -0.6551577150821685791015625 0.463005012273788485455128238755 +-0.407914209365844715460269753748 0.6551577150821685791015625 0.463005012273788485455128238755 +-0.407908809185028087274105246252 0 0.440011811256408702508480246252 +-0.407591994106769550665347878748 -0.1703111045062541961669921875 -0.726197475194931052477897992503 +-0.407591994106769550665347878748 0.1703111045062541961669921875 -0.726197475194931052477897992503 +-0.407318307459354378430305132497 -0.527200582623481683874899772491 -0.527873805165290810315070757497 +-0.407318307459354378430305132497 0.527200582623481683874899772491 -0.527873805165290810315070757497 +-0.407284480333328202661391514994 -0.562111204862594582287727007497 -0.0902803957462310763260049384371 +-0.407284480333328202661391514994 0.562111204862594582287727007497 -0.0902803957462310763260049384371 +-0.40720450878143310546875 -0.2703239917755126953125 -0.105402000248432159423828125 +-0.40720450878143310546875 0.2703239917755126953125 -0.105402000248432159423828125 +-0.407137489318847634045539507497 -0.352942115068435646740852007497 0.446845006942748979028579014994 +-0.407137489318847634045539507497 0.352942115068435646740852007497 0.446845006942748979028579014994 +-0.407036018371582042352230246252 -0.660139989852905340050881477509 -0.196309602260589605160490123126 +-0.407036018371582042352230246252 0.660139989852905340050881477509 -0.196309602260589605160490123126 +-0.406924206018447864874332253748 -0.0479218516498804078529438754686 -0.186054298281669611148103626874 +-0.406924206018447864874332253748 0.0479218516498804078529438754686 -0.186054298281669611148103626874 +-0.406853580474853537829460492503 -0.0330383986234664903114399692186 0.688025617599487326891960492503 +-0.406853580474853537829460492503 0.0330383986234664903114399692186 0.688025617599487326891960492503 +-0.40680301189422607421875 -0.19857899844646453857421875 -0.89167201519012451171875 +-0.40680301189422607421875 0.19857899844646453857421875 -0.89167201519012451171875 +-0.40672840178012847900390625 -0.571466889977455094751235264994 0.480102109909057606085269753748 +-0.40672840178012847900390625 0.571466889977455094751235264994 0.480102109909057606085269753748 +-0.406662762165069580078125 -0.35716424882411956787109375 0.519191265106201171875 +-0.406662762165069580078125 0.35716424882411956787109375 0.519191265106201171875 +-0.406625795364379871710269753748 -0.5217359066009521484375 -0.229013398289680453201455634371 +-0.406625795364379871710269753748 0.5217359066009521484375 -0.229013398289680453201455634371 +-0.406552183628082264288394753748 -0.048900000751018524169921875 0.438547790050506591796875 +-0.406552183628082264288394753748 0.048900000751018524169921875 0.438547790050506591796875 +-0.40646851062774658203125 -0.0206240005791187286376953125 0.29044449329376220703125 +-0.40646851062774658203125 0.0206240005791187286376953125 0.29044449329376220703125 +-0.406456035375595103875667746252 -0.0268456505611538893962819685157 0.50653068721294403076171875 +-0.406456035375595103875667746252 0.0268456505611538893962819685157 0.50653068721294403076171875 +-0.40644223988056182861328125 -0.0681961499154567774017010606258 0.180703800916671764031917746252 +-0.40644223988056182861328125 0.0681961499154567774017010606258 0.180703800916671764031917746252 +-0.406403383612632784771534488755 -0.295268355309963259625050113755 -0.412496498227119479107471988755 +-0.406403383612632784771534488755 0.295268355309963259625050113755 -0.412496498227119479107471988755 +-0.406350451707840010229233485006 -0.295229557156562849584702235006 -0.224095298349857335873380748126 +-0.406350451707840010229233485006 0.295229557156562849584702235006 -0.224095298349857335873380748126 +-0.406285542249679609838608485006 -0.26713995635509490966796875 -0.257038094103336334228515625 +-0.406285542249679609838608485006 0.26713995635509490966796875 -0.257038094103336334228515625 +-0.406194752454757723736378238755 -0.0958594478666782434661541856258 -0.168275249004364024774105246252 +-0.406194752454757723736378238755 0.0958594478666782434661541856258 -0.168275249004364024774105246252 +-0.40616476535797119140625 -0.46158899366855621337890625 -0.42949426174163818359375 +-0.40616476535797119140625 0.46158899366855621337890625 -0.42949426174163818359375 +-0.406134420633316006732371761245 -0.237442100048065179995759876874 0.518339508771896384509147992503 +-0.406134420633316006732371761245 0.237442100048065179995759876874 0.518339508771896384509147992503 +-0.406067053973674763067691628748 -0.0633735470473766326904296875 -0.856500071287155106958266514994 +-0.406067053973674763067691628748 0.0633735470473766326904296875 -0.856500071287155106958266514994 +-0.405995711684227045257244981258 0 -0.371035510301589988024772992503 +-0.405879104137420676501335492503 -0.145244550704956065789730246252 -0.341564288735389742779346988755 +-0.405879104137420676501335492503 0.145244550704956065789730246252 -0.341564288735389742779346988755 +-0.405695548653602633404346988755 -0.40016405284404754638671875 0.312697444856166850701839621252 +-0.405695548653602633404346988755 0.40016405284404754638671875 0.312697444856166850701839621252 +-0.405440998077392589227230246252 -0.440875804424285866467414507497 0.0352967999875545487831196567186 +-0.405440998077392589227230246252 0.440875804424285866467414507497 0.0352967999875545487831196567186 +-0.405383205413818392681690738755 -0.213121604919433604852230246252 -0.655929613113403364721420985006 +-0.405383205413818392681690738755 0.213121604919433604852230246252 -0.655929613113403364721420985006 +-0.405296409130096402240184261245 -0.343229985237121559826789507497 0.2791559994220733642578125 +-0.405296409130096402240184261245 0.343229985237121559826789507497 0.2791559994220733642578125 +-0.405111861228942882195980246252 -0.159458754956722265072599498126 0.336091241240501437115284488755 +-0.405111861228942882195980246252 0.159458754956722265072599498126 0.336091241240501437115284488755 +-0.404990303516387983862045985006 -0.349017336964607294280682481258 0.129111952334642426931665681877 +-0.404990303516387983862045985006 0.349017336964607294280682481258 0.129111952334642426931665681877 +-0.404695987701416015625 -0.0329939983785152435302734375 -0.2917749881744384765625 +-0.404695987701416015625 0.0329939983785152435302734375 -0.2917749881744384765625 +-0.4046694934368133544921875 -0.18301250040531158447265625 -0.22967149317264556884765625 +-0.4046694934368133544921875 0.18301250040531158447265625 -0.22967149317264556884765625 +-0.404647207260131813733039507497 -0.441006016731262218133480246252 -0.0421187996864318819900674384371 +-0.404647207260131813733039507497 0.441006016731262218133480246252 -0.0421187996864318819900674384371 +-0.404635488986968994140625 -0.098205499351024627685546875 -0.2768140137195587158203125 +-0.404635488986968994140625 0.098205499351024627685546875 -0.2768140137195587158203125 +-0.404588997364044189453125 -0.848025977611541748046875 0.342287003993988037109375 +-0.404588997364044189453125 0.848025977611541748046875 0.342287003993988037109375 +-0.404569578170776378289730246252 -0.0958024024963378961761151231258 0.683480787277221724096420985006 +-0.404569578170776378289730246252 0.0958024024963378961761151231258 0.683480787277221724096420985006 +-0.404509007930755615234375 -0.293891489505767822265625 0 +-0.404509007930755615234375 0.293891489505767822265625 0 +-0.40445025265216827392578125 -0.47593049705028533935546875 0.41522325575351715087890625 +-0.40445025265216827392578125 0.47593049705028533935546875 0.41522325575351715087890625 +-0.404367309808731090203792746252 -0.119763006269931790437333063437 -0.795075309276580877160256477509 +-0.404367309808731090203792746252 0.119763006269931790437333063437 -0.795075309276580877160256477509 +-0.404266512393951449322315738755 -0.776401180028915449682358485006 -0.209211297333240509033203125 +-0.404266512393951449322315738755 0.776401180028915449682358485006 -0.209211297333240509033203125 +-0.4042359888553619384765625 -0.0551914982497692108154296875 0.289045512676239013671875 +-0.4042359888553619384765625 0.0551914982497692108154296875 0.289045512676239013671875 +-0.404204110801219929083316628748 -0.63412405550479888916015625 -0.580522197484970026160056022491 +-0.404204110801219929083316628748 0.63412405550479888916015625 -0.580522197484970026160056022491 +-0.404056859016418412622329014994 -0.293560461699962582660106136245 0.808121305704116776880141514994 +-0.404056859016418412622329014994 0.293560461699962582660106136245 0.808121305704116776880141514994 +-0.404036593437194835320980246252 -0.321592697501182578356804242503 -0.189295698702335368768245871252 +-0.404036593437194835320980246252 0.321592697501182578356804242503 -0.189295698702335368768245871252 +-0.403720200061798095703125 -0.1824430525302886962890625 0.0788953475654125269134198106258 +-0.403720200061798095703125 0.1824430525302886962890625 0.0788953475654125269134198106258 +-0.403697746992111194952457253748 -0.789270472526550248559829014994 -0.341437591612338997570930132497 +-0.403697746992111194952457253748 0.789270472526550248559829014994 -0.341437591612338997570930132497 +-0.40368752181529998779296875 -0.56207549571990966796875 -0.289149753749370574951171875 +-0.40368752181529998779296875 0.56207549571990966796875 -0.289149753749370574951171875 +-0.403492963314056429791065738755 -0.165830844640731805972322376874 0.110423702001571658048995061563 +-0.403492963314056429791065738755 0.165830844640731805972322376874 0.110423702001571658048995061563 +-0.403482934832572970318409488755 -0.0798187021166086169143838446871 0.503319045901298500744758257497 +-0.403482934832572970318409488755 0.0798187021166086169143838446871 0.503319045901298500744758257497 +-0.403353989124298095703125 0 -0.915044009685516357421875 +-0.403305491805076632427784488755 -0.239533442258834855520532869377 0.44996510446071624755859375 +-0.403305491805076632427784488755 0.239533442258834855520532869377 0.44996510446071624755859375 +-0.403269293904304493292301003748 -0.6702515780925750732421875 -0.44512559473514556884765625 +-0.403269293904304493292301003748 0.6702515780925750732421875 -0.44512559473514556884765625 +-0.403008061647415150030582253748 -0.525697705149650529321547764994 0.680975207686424277575554242503 +-0.403008061647415150030582253748 0.525697705149650529321547764994 0.680975207686424277575554242503 +-0.402933055162429831774772992503 -0.479512158036231983526676003748 -0.173818443715572368279964621252 +-0.402933055162429831774772992503 0.479512158036231983526676003748 -0.173818443715572368279964621252 +-0.402875411510467518194644753748 -0.231710994243621820620759876874 -0.379475390911102272717414507497 +-0.402875411510467518194644753748 0.231710994243621820620759876874 -0.379475390911102272717414507497 +-0.40283501148223876953125 -0.619180023670196533203125 0.674048006534576416015625 +-0.40283501148223876953125 0.619180023670196533203125 0.674048006534576416015625 +-0.402710258960723876953125 -0.230740495026111602783203125 0.589137732982635498046875 +-0.402710258960723876953125 0.230740495026111602783203125 0.589137732982635498046875 +-0.4026815891265869140625 -0.488736009597778353619190738755 0.488860797882080089227230246252 +-0.4026815891265869140625 0.488736009597778353619190738755 0.488860797882080089227230246252 +-0.402521350979805014880241742503 -0.373401591181755088122429242503 0.0323724510148167624046244839064 +-0.402521350979805014880241742503 0.373401591181755088122429242503 0.0323724510148167624046244839064 +-0.402494403719902027471988503748 -0.7655831873416900634765625 0.248757290840148942434595369377 +-0.402494403719902027471988503748 0.7655831873416900634765625 0.248757290840148942434595369377 +-0.402491998672485362664730246252 -0.412913990020751964227230246252 -0.165837603807449329718082253748 +-0.402491998672485362664730246252 0.412913990020751964227230246252 -0.165837603807449329718082253748 +-0.402491238713264476434261496252 0 -0.201246745884418487548828125 +-0.402490210533142100945980246252 -0.09747420251369476318359375 0.434166598320007313116519753748 +-0.402490210533142100945980246252 0.09747420251369476318359375 0.434166598320007313116519753748 +-0.402489897608757030145198996252 -0.4731542766094207763671875 -0.6512508094310760498046875 +-0.402489897608757030145198996252 0.4731542766094207763671875 -0.6512508094310760498046875 +-0.402489012479782137798878238755 0 0.804986125230789162365852007497 +-0.402365505695343017578125 -0.24221800267696380615234375 0.1715590059757232666015625 +-0.402365505695343017578125 0.24221800267696380615234375 0.1715590059757232666015625 +-0.402343195676803544458266514994 -0.363478487730026222912727007497 -0.442722707986831609527911268742 +-0.402343195676803544458266514994 0.363478487730026222912727007497 -0.442722707986831609527911268742 +-0.402078005671501148565738503748 -0.771557676792144708777243522491 0.381486736238002777099609375 +-0.402078005671501148565738503748 0.771557676792144708777243522491 0.381486736238002777099609375 +-0.40206110477447509765625 -0.185861209034919733218416126874 -0.542035895586013727331931022491 +-0.40206110477447509765625 0.185861209034919733218416126874 -0.542035895586013727331931022491 +-0.401935592293739374358807481258 -0.373436799645423922466846988755 -0.03863749839365482330322265625 +-0.401935592293739374358807481258 0.373436799645423922466846988755 -0.03863749839365482330322265625 +-0.401924246549606345446647992503 -0.162715056538581842593416126874 -0.120335403084754946623213811563 +-0.401924246549606345446647992503 0.162715056538581842593416126874 -0.120335403084754946623213811563 +-0.4016920030117034912109375 -0.29184448719024658203125 0.058909498155117034912109375 +-0.4016920030117034912109375 0.29184448719024658203125 0.058909498155117034912109375 +-0.401633092761039756091179242503 -0.179894256591796891653345369377 -0.0939608998596668243408203125 +-0.401633092761039756091179242503 0.179894256591796891653345369377 -0.0939608998596668243408203125 +-0.401516008377075239721420985006 -0.357576799392700206414730246252 0.592388010025024391858039507497 +-0.401516008377075239721420985006 0.357576799392700206414730246252 0.592388010025024391858039507497 +-0.401388001441955577508480246252 -0.370603215694427501336605246252 0.2480742037296295166015625 +-0.401388001441955577508480246252 0.370603215694427501336605246252 0.2480742037296295166015625 +-0.401343762874603271484375 -0.099051296710968017578125 0.177798150479793554135099498126 +-0.401343762874603271484375 0.099051296710968017578125 0.177798150479793554135099498126 +-0.401260793209075927734375 -0.0399624019861221299598774692186 -0.444289183616638161389289507497 +-0.401260793209075927734375 0.0399624019861221299598774692186 -0.444289183616638161389289507497 +-0.401247900724411021844417746252 -0.0706122033298015594482421875 0.802504813671112038342414507497 +-0.401247900724411021844417746252 0.0706122033298015594482421875 0.802504813671112038342414507497 +-0.401104804873466502801448996252 -0.291415710747241984979183371252 0.690428626537322953637954014994 +-0.401104804873466502801448996252 0.291415710747241984979183371252 0.690428626537322953637954014994 +-0.401098394393920920641960492503 -0.561634397506713844983039507497 -0.404581594467163130346420985006 +-0.401098394393920920641960492503 0.561634397506713844983039507497 -0.404581594467163130346420985006 +-0.401077187061309792248664507497 -0.119001603126525870579577315311 -0.430087816715240489617855246252 +-0.401077187061309792248664507497 0.119001603126525870579577315311 -0.430087816715240489617855246252 +-0.400953608751296985968082253748 -0.204294151067733770199552623126 0 +-0.400953608751296985968082253748 0.204294151067733770199552623126 0 +-0.4004944860935211181640625 -0.2909750044345855712890625 -0.070267997682094573974609375 +-0.4004944860935211181640625 0.2909750044345855712890625 -0.070267997682094573974609375 +-0.400465008616447459832698996252 -0.429572018980979908331363503748 0.278560099005699168817073996252 +-0.400465008616447459832698996252 0.429572018980979908331363503748 0.278560099005699168817073996252 +-0.400416231155395541119190738755 -0.343933868408203113897769753748 0.379310739040374766961605246252 +-0.400416231155395541119190738755 0.343933868408203113897769753748 0.379310739040374766961605246252 +-0.400261569023132313116519753748 -0.5107147395610809326171875 0.0382304005324840545654296875 +-0.400261569023132313116519753748 0.5107147395610809326171875 0.0382304005324840545654296875 +-0.4002192020416259765625 -0.371368002891540538445980246252 -0.584731197357177712170539507497 +-0.4002192020416259765625 0.371368002891540538445980246252 -0.584731197357177712170539507497 +-0.40014196932315826416015625 -0.129076348990201955624357310626 -0.495707553625106822625667746252 +-0.40014196932315826416015625 0.129076348990201955624357310626 -0.495707553625106822625667746252 +-0.400130546092987093853565738755 -0.148770895600318919793636496252 0.142347595095634466000333873126 +-0.400130546092987093853565738755 0.148770895600318919793636496252 0.142347595095634466000333873126 +-0.4001210033893585205078125 -0.1695584952831268310546875 0.247291505336761474609375 +-0.4001210033893585205078125 0.1695584952831268310546875 0.247291505336761474609375 +-0.400106382369995128289730246252 -0.591105604171752951891960492503 0.361260008811950694695980246252 +-0.400106382369995128289730246252 0.591105604171752951891960492503 0.361260008811950694695980246252 +-0.400065600872039794921875 -0.290660995244979847296207253748 0.339799797534942604748664507497 +-0.400065600872039794921875 0.290660995244979847296207253748 0.339799797534942604748664507497 +-0.400024893879890486303452235006 -0.0226875009015202536155619839064 0.376783013343811090667401231258 +-0.400024893879890486303452235006 0.0226875009015202536155619839064 0.376783013343811090667401231258 +-0.400000000000000022204460492503 0 0 +-0.39999759197235107421875 -0.158579194545745871813835492503 0.674429607391357488488381477509 +-0.39999759197235107421875 0.158579194545745871813835492503 0.674429607391357488488381477509 +-0.399950641393661543432358485006 -0.243575200438499478439169365629 -0.288462910056114241186264735006 +-0.399950641393661543432358485006 0.243575200438499478439169365629 -0.288462910056114241186264735006 +-0.39994049072265625 -0.08979649841785430908203125 0.2863290011882781982421875 +-0.39994049072265625 0.08979649841785430908203125 0.2863290011882781982421875 +-0.399904048442840609478565738755 -0.0433608479797840118408203125 -0.510584098100662298058693977509 +-0.399904048442840609478565738755 0.0433608479797840118408203125 -0.510584098100662298058693977509 +-0.399764236807823192254573996252 -0.144962105154991166555689119377 -0.147222456336021434442073996252 +-0.399764236807823192254573996252 0.144962105154991166555689119377 -0.147222456336021434442073996252 +-0.399590113759040854723991742503 -0.130770251899957667962581808752 0.49570821225643157958984375 +-0.399590113759040854723991742503 0.130770251899957667962581808752 0.49570821225643157958984375 +-0.399377536773681651727230246252 -0.345571038126945506707698996252 -0.153552305698394786492855246252 +-0.399377536773681651727230246252 0.345571038126945506707698996252 -0.153552305698394786492855246252 +-0.3993339836597442626953125 -0.510834339261055037084702235006 -0.0456150475889444337318501254686 +-0.3993339836597442626953125 0.510834339261055037084702235006 -0.0456150475889444337318501254686 +-0.399187582731246937139957253748 -0.546141380071639925830595529987 0.179941305518150324038728626874 +-0.399187582731246937139957253748 0.546141380071639925830595529987 0.179941305518150324038728626874 +-0.399101409316062916143863503748 -0.0776384979486465509612713731258 -0.192847944796085357666015625 +-0.399101409316062916143863503748 0.0776384979486465509612713731258 -0.192847944796085357666015625 +-0.399043339490890491827457253748 -0.201137848198413848876953125 0.0529910992830991758872904995314 +-0.399043339490890491827457253748 0.201137848198413848876953125 0.0529910992830991758872904995314 +-0.398974800109863303454460492503 -0.0162699997425079338764231096093 -0.0235464006662368802169638115629 +-0.398974800109863303454460492503 0.0162699997425079338764231096093 -0.0235464006662368802169638115629 +-0.398923063278198208880809261245 -0.859597030282020502234274772491 0.06673749722540378570556640625 +-0.398923063278198208880809261245 0.859597030282020502234274772491 0.06673749722540378570556640625 +-0.398869818449020363537727007497 -0.459393900632858231958266514994 0.34620879590511322021484375 +-0.398869818449020363537727007497 0.459393900632858231958266514994 0.34620879590511322021484375 +-0.398766803741455122533920985006 -0.03138320147991180419921875 0 +-0.398766803741455122533920985006 0.03138320147991180419921875 0 +-0.398731294274330183569077235006 -0.244947445392608653680355246252 0.288988152146339438708366742503 +-0.398731294274330183569077235006 0.244947445392608653680355246252 0.288988152146339438708366742503 +-0.398719012737274169921875 -0.264564990997314453125 0.14501149952411651611328125 +-0.398719012737274169921875 0.264564990997314453125 0.14501149952411651611328125 +-0.398669195175170909539730246252 -0.0165196001529693617393412807814 0.028105199337005615234375 +-0.398669195175170909539730246252 0.0165196001529693617393412807814 0.028105199337005615234375 +-0.398552541434764817651625889994 -0.860540392994880609656149772491 -0.0559160517528653130958637973436 +-0.398552541434764817651625889994 0.860540392994880609656149772491 -0.0559160517528653130958637973436 +-0.3984690010547637939453125 -0.4539850056171417236328125 0.79694497585296630859375 +-0.3984690010547637939453125 0.4539850056171417236328125 0.79694497585296630859375 +-0.39828778803348541259765625 -0.437610608339309703485042746252 0.678132015466690107885483485006 +-0.39828778803348541259765625 0.437610608339309703485042746252 0.678132015466690107885483485006 +-0.3982396423816680908203125 -0.199779295921325678042634876874 -0.0631939508020877838134765625 +-0.3982396423816680908203125 0.199779295921325678042634876874 -0.0631939508020877838134765625 +-0.398228994011879000591846988755 -0.256186451017856586798160378748 -0.44528901576995849609375 +-0.398228994011879000591846988755 0.256186451017856586798160378748 -0.44528901576995849609375 +-0.397979983687400840075554242503 -0.289146000146865866931022992503 0.245968244969844845870809990629 +-0.397979983687400840075554242503 0.289146000146865866931022992503 0.245968244969844845870809990629 +-0.397928291559219327044871761245 0 0.575893479585647516394431022491 +-0.397696208953857432977230246252 -0.436774206161499034539730246252 0.105193796753883364591963811563 +-0.397696208953857432977230246252 0.436774206161499034539730246252 0.105193796753883364591963811563 +-0.39762675762176513671875 -0.250602744519710540771484375 -0.58445776998996734619140625 +-0.39762675762176513671875 0.250602744519710540771484375 -0.58445776998996734619140625 +-0.39762179553508758544921875 -0.582665383815765380859375 0.558925205469131491931022992503 +-0.39762179553508758544921875 0.582665383815765380859375 0.558925205469131491931022992503 +-0.397533604502677939684929242503 -0.140788802504539484194978626874 0.7950762212276458740234375 +-0.397533604502677939684929242503 0.140788802504539484194978626874 0.7950762212276458740234375 +-0.397509193420410189556690738755 -0.0674998495727777564345828409387 0.374072584509849592748764735006 +-0.397509193420410189556690738755 0.0674998495727777564345828409387 0.374072584509849592748764735006 +-0.397401291131973255499332253748 -0.0185616005212068564678151716407 0.210303452610969554559261496252 +-0.397401291131973255499332253748 0.0185616005212068564678151716407 0.210303452610969554559261496252 +-0.3972789943218231201171875 -0.161261498928070068359375 -0.2572239935398101806640625 +-0.3972789943218231201171875 0.161261498928070068359375 -0.2572239935398101806640625 +-0.397228503227233908923210492503 -0.02959064953029155731201171875 -0.209365202486515050717130748126 +-0.397228503227233908923210492503 0.02959064953029155731201171875 -0.209365202486515050717130748126 +-0.397214007377624522820980246252 0 -0.0471275985240936293174662807814 +-0.397188861668109904901058371252 -0.6948920190334320068359375 0.286122746765613555908203125 +-0.397188861668109904901058371252 0.6948920190334320068359375 0.286122746765613555908203125 +-0.3970859944820404052734375 -0.22267949581146240234375 0.20672850310802459716796875 +-0.3970859944820404052734375 0.22267949581146240234375 0.20672850310802459716796875 +-0.397085742652416195941356136245 -0.669969460368156410901008257497 0.544026064872741632605368522491 +-0.397085742652416195941356136245 0.669969460368156410901008257497 0.544026064872741632605368522491 +-0.3970154821872711181640625 -0.58708722889423370361328125 0.245371498167514801025390625 +-0.3970154821872711181640625 0.58708722889423370361328125 0.245371498167514801025390625 +-0.396844600141048442498714621252 -0.705804324150085427014289507497 -0.258562344312667835577457253748 +-0.396844600141048442498714621252 0.705804324150085427014289507497 -0.258562344312667835577457253748 +-0.396578001976013172491519753748 -0.0576254010200500446647886576557 0.573938411474227860864516514994 +-0.396578001976013172491519753748 0.0576254010200500446647886576557 0.573938411474227860864516514994 +-0.396455597877502452508480246252 -0.0476307988166809123664613423443 -0.0235431998968124410465119211722 +-0.396455597877502452508480246252 0.0476307988166809123664613423443 -0.0235431998968124410465119211722 +-0.396314348280429828985660378748 -0.847154891490936257092414507497 -0.1666233502328395843505859375 +-0.396314348280429828985660378748 0.847154891490936257092414507497 -0.1666233502328395843505859375 +-0.39620549976825714111328125 -0.42835275828838348388671875 -0.47120623290538787841796875 +-0.39620549976825714111328125 0.42835275828838348388671875 -0.47120623290538787841796875 +-0.396126008033752474712940738755 -0.0479016005992889404296875 0.02809999883174896240234375 +-0.396126008033752474712940738755 0.0479016005992889404296875 0.02809999883174896240234375 +-0.396057212352752652240184261245 -0.548415714502334505908720529987 -0.179941305518150324038728626874 +-0.396057212352752652240184261245 0.548415714502334505908720529987 -0.179941305518150324038728626874 +-0.396030402183532748150440738755 0 0.0562143981456756647308026231258 +-0.395904397964477572369190738755 -0.0324564009904861477950888115629 -0.0469720005989074720909037807814 +-0.395904397964477572369190738755 0.0324564009904861477950888115629 -0.0469720005989074720909037807814 +-0.395807610452175107074168636245 0 -0.752221113443374611584602007497 +-0.395768092572689023089793636245 -0.840521058440208412854133257497 0.1984768472611904144287109375 +-0.395768092572689023089793636245 0.840521058440208412854133257497 0.1984768472611904144287109375 +-0.395663407444953929559261496252 -0.694652384519577004162727007497 0.413410511612892161981136496252 +-0.395663407444953929559261496252 0.694652384519577004162727007497 0.413410511612892161981136496252 +-0.39558733999729156494140625 -0.126142653822898881399439119377 -0.173489396274089824334652121252 +-0.39558733999729156494140625 0.126142653822898881399439119377 -0.173489396274089824334652121252 +-0.395557200908660866467414507497 -0.238406395912170387951789507497 0.383010005950927712170539507497 +-0.395557200908660866467414507497 0.238406395912170387951789507497 0.383010005950927712170539507497 +-0.395551189780235346038494981258 -0.369774889945983897820980246252 0.0964661501348018785018112453145 +-0.395551189780235346038494981258 0.369774889945983897820980246252 0.0964661501348018785018112453145 +-0.395452186465263422210369981258 -0.109501149505376829673686245314 -0.366234013438224814684929242503 +-0.395452186465263422210369981258 0.109501149505376829673686245314 -0.366234013438224814684929242503 +-0.395422485470771800653011496252 -0.212247207760810879806356865629 -0.317949506640434309545639735006 +-0.395422485470771800653011496252 0.212247207760810879806356865629 -0.317949506640434309545639735006 +-0.395376759767532337530582253748 -0.04967234842479228973388671875 0.209069100022315990106136496252 +-0.395376759767532337530582253748 0.04967234842479228973388671875 0.209069100022315990106136496252 +-0.3953309953212738037109375 -0.065827496349811553955078125 -0.298965513706207275390625 +-0.3953309953212738037109375 0.065827496349811553955078125 -0.298965513706207275390625 +-0.395300388336181640625 -0.396528589725494373663394753748 0.215644794702529896124332253748 +-0.395300388336181640625 0.396528589725494373663394753748 0.215644794702529896124332253748 +-0.395219004154205355572315738755 -0.0366112988442182582526918110943 -0.380738064646720941741619981258 +-0.395219004154205355572315738755 0.0366112988442182582526918110943 -0.380738064646720941741619981258 +-0.3951930105686187744140625 -0.574454009532928466796875 -0.716816008090972900390625 +-0.3951930105686187744140625 0.574454009532928466796875 -0.716816008090972900390625 +-0.395075607299804731908920985006 -0.0625728011131286704360476846887 0 +-0.395075607299804731908920985006 0.0625728011131286704360476846887 0 +-0.395024308562278769763054242503 -0.314628043770790122302116742503 0.217864350974559806140007367503 +-0.395024308562278769763054242503 0.314628043770790122302116742503 0.217864350974559806140007367503 +-0.394963549077510800433543636245 -0.496132233738899197650340511245 0.566000553965568475867087272491 +-0.394963549077510800433543636245 0.496132233738899197650340511245 0.566000553965568475867087272491 +-0.3949162065982818603515625 -0.322614610195159912109375 -0.479542016983032171051348768742 +-0.3949162065982818603515625 0.322614610195159912109375 -0.479542016983032171051348768742 +-0.3948444426059722900390625 -0.5016953647136688232421875 0.122064153105020528622404185626 +-0.3948444426059722900390625 0.5016953647136688232421875 0.122064153105020528622404185626 +-0.39473573863506317138671875 -0.488285908102989163470653011245 -0.572940805554389975817741742503 +-0.39473573863506317138671875 0.488285908102989163470653011245 -0.572940805554389975817741742503 +-0.394686007499694846423210492503 -0.0329288005828857407997212192186 0.05602359771728515625 +-0.394686007499694846423210492503 0.0329288005828857407997212192186 0.05602359771728515625 +-0.394443988800048828125 -0.599827194213867209704460492503 -0.353017592430114768298210492503 +-0.394443988800048828125 0.599827194213867209704460492503 -0.353017592430114768298210492503 +-0.394425594806671109271434261245 -0.139470604062080366647435880623 0.43008899688720703125 +-0.394425594806671109271434261245 0.139470604062080366647435880623 0.43008899688720703125 +-0.394373640418052728850994981258 -0.197022645175457006283536998126 0.328863704204559348376335492503 +-0.394373640418052728850994981258 0.197022645175457006283536998126 0.328863704204559348376335492503 +-0.394334989786148060186832253748 -0.711151188611984230725227007497 -0.385698598623275767938167746252 +-0.394334989786148060186832253748 0.711151188611984230725227007497 -0.385698598623275767938167746252 +-0.3942975103855133056640625 0 -0.637988984584808349609375 +-0.394182452559471152575554242503 -0.130466254055500024966463001874 0.173489852249622350521818248126 +-0.394182452559471152575554242503 0.130466254055500024966463001874 0.173489852249622350521818248126 +-0.394110596179962135998664507497 -0.195316797494888311215177623126 -0.408078610897064208984375 +-0.394110596179962135998664507497 0.195316797494888311215177623126 -0.408078610897064208984375 +-0.39377550780773162841796875 -0.59258325397968292236328125 -0.23724599182605743408203125 +-0.39377550780773162841796875 0.59258325397968292236328125 -0.23724599182605743408203125 +-0.393742281198501575811832253748 -0.112702095508575433902009876874 0.567683887481689408716079014994 +-0.393742281198501575811832253748 0.112702095508575433902009876874 0.567683887481689408716079014994 +-0.39363849163055419921875 -0.123660497367382049560546875 0.282411992549896240234375 +-0.39363849163055419921875 0.123660497367382049560546875 0.282411992549896240234375 +-0.393603587150573697162059261245 -0.435178792476654030529914507497 -0.12528119981288909912109375 +-0.393603587150573697162059261245 0.435178792476654030529914507497 -0.12528119981288909912109375 +-0.393591785430908169818309261245 -0.399872219562530495373664507497 0.4185545146465301513671875 +-0.393591785430908169818309261245 0.399872219562530495373664507497 0.4185545146465301513671875 +-0.39355199038982391357421875 -0.40882726013660430908203125 0.490384519100189208984375 +-0.39355199038982391357421875 0.40882726013660430908203125 0.490384519100189208984375 +-0.393413007259368896484375 -0.0406740009784698486328125 0.918461978435516357421875 +-0.393413007259368896484375 0.0406740009784698486328125 0.918461978435516357421875 +-0.393352794647216841283920985006 -0.0162707999348640462711212961722 -0.0707732021808624295333700615629 +-0.393352794647216841283920985006 0.0162707999348640462711212961722 -0.0707732021808624295333700615629 +-0.393302392959594737664730246252 -0.219751191139221202508480246252 0.6610767841339111328125 +-0.393302392959594737664730246252 0.219751191139221202508480246252 0.6610767841339111328125 +-0.39328445494174957275390625 -0.456887590885162342413394753748 0.243065546452999131643579744377 +-0.39328445494174957275390625 0.456887590885162342413394753748 0.243065546452999131643579744377 +-0.393236804008483931127670985006 -0.530271196365356467516960492503 -0.451859998703002974096420985006 +-0.393236804008483931127670985006 0.530271196365356467516960492503 -0.451859998703002974096420985006 +-0.393187487125396750720085492503 -0.638069415092468283923210492503 -0.498267906904220569952457253748 +-0.393187487125396750720085492503 0.638069415092468283923210492503 -0.498267906904220569952457253748 +-0.3931309878826141357421875 -0.2856239974498748779296875 0.117757499217987060546875 +-0.3931309878826141357421875 0.2856239974498748779296875 0.117757499217987060546875 +-0.39296324551105499267578125 -0.63013274967670440673828125 0.1049407459795475006103515625 +-0.39296324551105499267578125 0.63013274967670440673828125 0.1049407459795475006103515625 +-0.39263498783111572265625 -0.783840000629425048828125 -0.4810729920864105224609375 +-0.39263498783111572265625 0.783840000629425048828125 -0.4810729920864105224609375 +-0.39261750876903533935546875 -0.63293324410915374755859375 -0.0880124978721141815185546875 +-0.39261750876903533935546875 0.63293324410915374755859375 -0.0880124978721141815185546875 +-0.392510546743869759289680132497 -0.363544102013111103399722878748 0.785029643774032503955595529987 +-0.392510546743869759289680132497 0.363544102013111103399722878748 0.785029643774032503955595529987 +-0.392508190870284989770766514994 -0.490431910753250099865852007497 0.308890393376350380627570757497 +-0.392508190870284989770766514994 0.490431910753250099865852007497 0.308890393376350380627570757497 +-0.392506408691406294408920985006 -0.694827222824096701891960492503 0.0561583995819091852386151231258 +-0.392506408691406294408920985006 0.694827222824096701891960492503 0.0561583995819091852386151231258 +-0.392348006367683466155682481258 -0.105476804077625288535990932814 0.370725846290588412212940738755 +-0.392348006367683466155682481258 0.105476804077625288535990932814 0.370725846290588412212940738755 +-0.392328912019729636462272992503 -0.218806645274162298031583873126 0.0264865508303046247318146555472 +-0.392328912019729636462272992503 0.218806645274162298031583873126 0.0264865508303046247318146555472 +-0.3923285007476806640625 -0.2342135012149810791015625 -0.2030330002307891845703125 +-0.3923285007476806640625 0.2342135012149810791015625 -0.2030330002307891845703125 +-0.39220829308032989501953125 -0.218342247605323808157251619377 -0.03161249868571758270263671875 +-0.39220829308032989501953125 0.218342247605323808157251619377 -0.03161249868571758270263671875 +-0.392142605781555186883480246252 -0.238964411616325395071314119377 -0.774028819799423284386818977509 +-0.392142605781555186883480246252 0.238964411616325395071314119377 -0.774028819799423284386818977509 +-0.392052388191223177837940738755 -0.0638444006443023709396200615629 -0.0471031993627548245529013115629 +-0.392052388191223177837940738755 0.0638444006443023709396200615629 -0.0471031993627548245529013115629 +-0.392014408111572287829460492503 -0.695779991149902410363381477509 -0.0470623999834060696700888115629 +-0.392014408111572287829460492503 0.695779991149902410363381477509 -0.0470623999834060696700888115629 +-0.391997101902961775365952235006 -0.368286037445068381579460492503 -0.114907099306583410092130748126 +-0.391997101902961775365952235006 0.368286037445068381579460492503 -0.114907099306583410092130748126 +-0.39191101491451263427734375 -0.502173763513565130089943977509 -0.129333098977804178408845814374 +-0.39191101491451263427734375 0.502173763513565130089943977509 -0.129333098977804178408845814374 +-0.39187426865100860595703125 -0.63947997987270355224609375 0 +-0.39187426865100860595703125 0.63947997987270355224609375 0 +-0.391709241271018970831363503748 -0.195247355103492753469751619377 0.104605199396610268336438309689 +-0.391709241271018970831363503748 0.195247355103492753469751619377 0.104605199396610268336438309689 +-0.391555011272430419921875 -0.758647024631500244140625 0.520711004734039306640625 +-0.391555011272430419921875 0.758647024631500244140625 0.520711004734039306640625 +-0.391552507877349853515625 -0.2589839994907379150390625 -0.17208699882030487060546875 +-0.391552507877349853515625 0.2589839994907379150390625 -0.17208699882030487060546875 +-0.3915255069732666015625 0 -0.31097900867462158203125 +-0.3915185034275054931640625 -0.3095920085906982421875 0.0294330008327960968017578125 +-0.3915185034275054931640625 0.3095920085906982421875 0.0294330008327960968017578125 +-0.39146129786968231201171875 -0.0808168485760688837249432481258 0.206704799830913554803402121252 +-0.39146129786968231201171875 0.0808168485760688837249432481258 0.206704799830913554803402121252 +-0.391437906026840198858707253748 -0.0467186979949474334716796875 -0.578440809249877840869658029987 +-0.391437906026840198858707253748 0.0467186979949474334716796875 -0.578440809249877840869658029987 +-0.391432809829711958471420985006 -0.07890880107879638671875 -0.0235311999917030348350444057814 +-0.391432809829711958471420985006 0.07890880107879638671875 -0.0235311999917030348350444057814 +-0.391368600726127613409488503748 -0.210096895694732666015625 0.782745301723480224609375 +-0.391368600726127613409488503748 0.210096895694732666015625 0.782745301723480224609375 +-0.391216802597045942846420985006 -0.0533927977085113525390625 -0.695771980285644575658920985006 +-0.391216802597045942846420985006 0.0533927977085113525390625 -0.695771980285644575658920985006 +-0.39114749431610107421875 -0.1313295066356658935546875 -0.2824114859104156494140625 +-0.39114749431610107421875 0.1313295066356658935546875 -0.2824114859104156494140625 +-0.391055989265441938940170985006 -0.0792895972728729359069177462516 0.0280791997909545926193075615629 +-0.391055989265441938940170985006 0.0792895972728729359069177462516 0.0280791997909545926193075615629 +-0.3910259902477264404296875 -0.3096199929714202880859375 -0.03513149917125701904296875 +-0.3910259902477264404296875 0.3096199929714202880859375 -0.03513149917125701904296875 +-0.390954451262950863910106136245 -0.591173589229583740234375 -0.632588854432105995861945757497 +-0.390954451262950863910106136245 0.591173589229583740234375 -0.632588854432105995861945757497 +-0.390915854275226570813117632497 -0.284016443789005257336555132497 -0.699299225211143515856804242503 +-0.390915854275226570813117632497 0.284016443789005257336555132497 -0.699299225211143515856804242503 +-0.39080440998077392578125 -0.0484764009714126614669638115629 -0.0701568007469177273849325615629 +-0.39080440998077392578125 0.0484764009714126614669638115629 -0.0701568007469177273849325615629 +-0.39076651632785797119140625 -0.100141502916812896728515625 -0.632276237010955810546875 +-0.39076651632785797119140625 0.100141502916812896728515625 -0.632276237010955810546875 +-0.390764808654785189556690738755 -0.0644016027450561578948651231258 0.0561724007129669189453125 +-0.390764808654785189556690738755 0.0644016027450561578948651231258 0.0561724007129669189453125 +-0.390662407875061068462940738755 -0.0165204003453254706645925153907 0.084321200847625732421875 +-0.390662407875061068462940738755 0.0165204003453254706645925153907 0.084321200847625732421875 +-0.390621006488800048828125 -0.283798906207084644659488503748 0.506826603412628196032585492503 +-0.390621006488800048828125 0.283798906207084644659488503748 0.506826603412628196032585492503 +-0.390603005886077880859375 -0.11907599866390228271484375 0.91282498836517333984375 +-0.390603005886077880859375 0.11907599866390228271484375 0.91282498836517333984375 +-0.390339946746826205181690738755 -0.394434309005737337994190738755 -0.338461494445800814556690738755 +-0.390339946746826205181690738755 0.394434309005737337994190738755 -0.338461494445800814556690738755 +-0.390310919284820534436164507497 -0.579002904891967706824118522491 0.0491238974034786182731870951557 +-0.390310919284820534436164507497 0.579002904891967706824118522491 0.0491238974034786182731870951557 +-0.390173834562301646844417746252 -0.338601434230804465563835492503 0.188714906573295621017294365629 +-0.390173834562301646844417746252 0.338601434230804465563835492503 0.188714906573295621017294365629 +-0.390064054727554343493522992503 -0.0590400002896785749961772182814 -0.216481505334377294369474498126 +-0.390064054727554343493522992503 0.0590400002896785749961772182814 -0.216481505334377294369474498126 +-0.390003204345703125 -0.684269618988037175988381477509 -0.140258395671844476870759876874 +-0.390003204345703125 0.684269618988037175988381477509 -0.140258395671844476870759876874 +-0.389879709482192970959602007497 -0.579912889003753595495993522491 -0.041171200573444366455078125 +-0.389879709482192970959602007497 0.579912889003753595495993522491 -0.041171200573444366455078125 +-0.389747087657451640740902121252 -0.353252351284027099609375 0.667689430713653497839743522491 +-0.389747087657451640740902121252 0.353252351284027099609375 0.667689430713653497839743522491 +-0.389669394493103005139289507497 -0.456243002414703335833934261245 0 +-0.389669394493103005139289507497 0.456243002414703335833934261245 0 +-0.389668011665344260485710492503 -0.678421592712402432567841970013 0.167042398452758811266960492503 +-0.389668011665344260485710492503 0.678421592712402432567841970013 0.167042398452758811266960492503 +-0.389603707194328297003238503748 -0.178805252909660344906583873126 0.136885946989059453793302623126 +-0.389603707194328297003238503748 0.178805252909660344906583873126 0.136885946989059453793302623126 +-0.389474815130233797955128238755 -0.175904290378093713931306751874 0.489762011170387312475327235006 +-0.389474815130233797955128238755 0.175904290378093713931306751874 0.489762011170387312475327235006 +-0.389454413950443223413344639994 -0.379623793065547943115234375 -0.778917378187179543225227007497 +-0.389454413950443223413344639994 0.379623793065547943115234375 -0.778917378187179543225227007497 +-0.389452511072158835681022992503 -0.106752146780490872468583063437 -0.198571497201919550112947376874 +-0.389452511072158835681022992503 0.106752146780490872468583063437 -0.198571497201919550112947376874 +-0.3891910016536712646484375 -0.20167450606822967529296875 0.24053649604320526123046875 +-0.3891910016536712646484375 0.20167450606822967529296875 0.24053649604320526123046875 +-0.388948392868042003289730246252 -0.0933767974376678577819177462516 0 +-0.388948392868042003289730246252 0.0933767974376678577819177462516 0 +-0.388909411430358897820980246252 -0.388908296823501642425213731258 0 +-0.388909411430358897820980246252 0.388908296823501642425213731258 0 +-0.38883714377880096435546875 -0.42680104076862335205078125 -0.298574258387088786736995871252 +-0.38883714377880096435546875 0.42680104076862335205078125 -0.298574258387088786736995871252 +-0.3887484073638916015625 0 -0.094205200672149658203125 +-0.388556385040283169818309261245 -0.331111800670623790399105246252 0.315259802341461170538394753748 +-0.388556385040283169818309261245 0.331111800670623790399105246252 0.315259802341461170538394753748 +-0.388537034392356928069744981258 -0.179259844124317196945028740629 -0.345550155639648470806690738755 +-0.388537034392356928069744981258 0.179259844124317196945028740629 -0.345550155639648470806690738755 +-0.388430702686309803350894753748 -0.167070402204990364758430132497 0.557860815525054842822783029987 +-0.388430702686309803350894753748 0.167070402204990364758430132497 0.557860815525054842822783029987 +-0.3883149921894073486328125 -0.282126009464263916015625 -0.140058994293212890625 +-0.3883149921894073486328125 0.282126009464263916015625 -0.140058994293212890625 +-0.388279259204864501953125 -0.82257746160030364990234375 -0.274054087698459625244140625 +-0.388279259204864501953125 0.82257746160030364990234375 -0.274054087698459625244140625 +-0.388176110386848460809261496252 -0.282023298740386951788394753748 0.438499766588211048468082253748 +-0.388176110386848460809261496252 0.282023298740386951788394753748 0.438499766588211048468082253748 +-0.388076806068420432360710492503 -0.0491196006536483778526225307814 0.0835687994956970242599325615629 +-0.388076806068420432360710492503 0.0491196006536483778526225307814 0.0835687994956970242599325615629 +-0.387960004806518599096420985006 -0.624160814285278364721420985006 0.31608641147613525390625 +-0.387960004806518599096420985006 0.624160814285278364721420985006 0.31608641147613525390625 +-0.3878490030765533447265625 -0.213566005229949951171875 -0.2322990000247955322265625 +-0.3878490030765533447265625 0.213566005229949951171875 -0.2322990000247955322265625 +-0.387811803817749045641960492503 -0.191394898295402543508814119377 -0.124378202855587011166349498126 +-0.387811803817749045641960492503 0.191394898295402543508814119377 -0.124378202855587011166349498126 +-0.387745204567909229620426003748 -0.214299447834491729736328125 0.0789268501102924346923828125 +-0.387745204567909229620426003748 0.214299447834491729736328125 0.0789268501102924346923828125 +-0.3876138031482696533203125 0 -0.228594160079956060238615123126 +-0.387567210197448774877670985006 -0.412892007827758811266960492503 0.565076780319213933800881477509 +-0.387567210197448774877670985006 0.412892007827758811266960492503 0.565076780319213933800881477509 +-0.387559211254119850842414507497 -0.363443398475646939349559261245 -0.278759407997131336554019753748 +-0.387559211254119850842414507497 0.363443398475646939349559261245 -0.278759407997131336554019753748 +-0.387541186809539806024105246252 -0.332842183113098155633480246252 -0.314686810970306374279914507497 +-0.387541186809539806024105246252 0.332842183113098155633480246252 -0.314686810970306374279914507497 +-0.387484407424926791119190738755 -0.0322288006544113186935263115629 -0.0938987970352172934829226846887 +-0.387484407424926791119190738755 0.0322288006544113186935263115629 -0.0938987970352172934829226846887 +-0.387455257773399341925113503748 -0.216021001338958740234375 -0.47509343922138214111328125 +-0.387455257773399341925113503748 0.216021001338958740234375 -0.47509343922138214111328125 +-0.387267601490020763055355246252 -0.420371389389038063733039507497 0.182514595985412586554019753748 +-0.387267601490020763055355246252 0.420371389389038063733039507497 0.182514595985412586554019753748 +-0.38716399669647216796875 -0.332338988780975341796875 -0.860032021999359130859375 +-0.38716399669647216796875 0.332338988780975341796875 -0.860032021999359130859375 +-0.3871454894542694091796875 -0.28127400577068328857421875 0.57749699056148529052734375 +-0.3871454894542694091796875 0.28127400577068328857421875 0.57749699056148529052734375 +-0.387010788917541537212940738755 -0.417789003252983126568409488755 -0.696904206275939963610710492503 +-0.387010788917541537212940738755 0.417789003252983126568409488755 -0.696904206275939963610710492503 +-0.386758497357368447033820757497 -0.747441527247428849634047764994 0.119367200136184695158370061563 +-0.386758497357368447033820757497 0.747441527247428849634047764994 0.119367200136184695158370061563 +-0.386588996648788429943977007497 -0.459202098846435535772769753748 -0.360115009546279896124332253748 +-0.386588996648788429943977007497 0.459202098846435535772769753748 -0.360115009546279896124332253748 +-0.386528331041336048468082253748 -0.386678498983383189813167746252 0.351533660292625449450554242503 +-0.386528331041336048468082253748 0.386678498983383189813167746252 0.351533660292625449450554242503 +-0.386476299166679360119758257497 -0.750411447882652238305922764994 -0.10009514726698398590087890625 +-0.386476299166679360119758257497 0.750411447882652238305922764994 -0.10009514726698398590087890625 +-0.386462861299514737201121761245 -0.188650048524141300543277566248 -0.847088414430618219519431022491 +-0.386462861299514737201121761245 0.188650048524141300543277566248 -0.847088414430618219519431022491 +-0.386416494846343994140625 0 0.3173049986362457275390625 +-0.386353808641433704718082253748 -0.174027152359485626220703125 -0.151476305723190318719417746252 +-0.386353808641433704718082253748 0.174027152359485626220703125 -0.151476305723190318719417746252 +-0.386296784877777077404914507497 -0.0799530029296875027755575615629 -0.452086186408996559826789507497 +-0.386296784877777077404914507497 0.0799530029296875027755575615629 -0.452086186408996559826789507497 +-0.385996997356414794921875 -0.1332550048828125 -0.91282498836517333984375 +-0.385996997356414794921875 0.1332550048828125 -0.91282498836517333984375 +-0.38589234650135040283203125 -0.75735509395599365234375 0 +-0.38589234650135040283203125 0.75735509395599365234375 0 +-0.385832488536834716796875 -0.3054614961147308349609375 0.08846700191497802734375 +-0.385832488536834716796875 0.3054614961147308349609375 0.08846700191497802734375 +-0.385771957039833079949886496252 -0.111294896900653847438000809689 0.203208298981189722232088001874 +-0.385771957039833079949886496252 0.111294896900653847438000809689 0.203208298981189722232088001874 +-0.385750389099121127056690738755 -0.0948332011699676569183026231258 -0.0469399988651275634765625 +-0.385750389099121127056690738755 0.0948332011699676569183026231258 -0.0469399988651275634765625 +-0.385687360167503379138054242503 -0.211911302804946910516292746252 -0.0940153487026691436767578125 +-0.385687360167503379138054242503 0.211911302804946910516292746252 -0.0940153487026691436767578125 +-0.385648798942565929070980246252 -0.0797312021255493219573651231258 -0.07012879848480224609375 +-0.385648798942565929070980246252 0.0797312021255493219573651231258 -0.07012879848480224609375 +-0.385292005538940440789730246252 -0.320772004127502452508480246252 -0.6234223842620849609375 +-0.385292005538940440789730246252 0.320772004127502452508480246252 -0.6234223842620849609375 +-0.385252308845520030633480246252 -0.61876006424427032470703125 0.437282511591911282611278011245 +-0.385252308845520030633480246252 0.61876006424427032470703125 0.437282511591911282611278011245 +-0.385224795341491732525440738755 -0.634118413925170987255341970013 -0.299157595634460482525440738755 +-0.385224795341491732525440738755 0.634118413925170987255341970013 -0.299157595634460482525440738755 +-0.3851074874401092529296875 -0.0411204993724822998046875 0.316229999065399169921875 +-0.3851074874401092529296875 0.0411204993724822998046875 0.316229999065399169921875 +-0.385080993175506591796875 -0.15838600695133209228515625 0.276814997196197509765625 +-0.385080993175506591796875 0.15838600695133209228515625 0.276814997196197509765625 +-0.385015010833740234375 -0.19727100431919097900390625 0.901580989360809326171875 +-0.385015010833740234375 0.19727100431919097900390625 0.901580989360809326171875 +-0.38500630855560302734375 -0.27972279489040374755859375 -0.513347113132476828845085492503 +-0.38500630855560302734375 0.27972279489040374755859375 -0.513347113132476828845085492503 +-0.384978604316711436883480246252 -0.392097008228302013055355246252 -0.2409389913082122802734375 +-0.384978604316711436883480246252 0.392097008228302013055355246252 -0.2409389913082122802734375 +-0.384964209794998180047542746252 -0.161200802028179185354517244377 0.168276147544383997134431751874 +-0.384964209794998180047542746252 0.161200802028179185354517244377 0.168276147544383997134431751874 +-0.384903991222381614001335492503 -0.456500199437141429559261496252 -0.256819550693035136834652121252 +-0.384903991222381614001335492503 0.456500199437141429559261496252 -0.256819550693035136834652121252 +-0.384790682792663540912059261245 -0.140256203711032867431640625 -0.56768321990966796875 +-0.384790682792663540912059261245 0.140256203711032867431640625 -0.56768321990966796875 +-0.384695103764534029888721988755 -0.060038097202777862548828125 -0.811421120166778586657585492503 +-0.384695103764534029888721988755 0.060038097202777862548828125 -0.811421120166778586657585492503 +-0.38456475734710693359375 -0.52033124864101409912109375 0.37929524481296539306640625 +-0.38456475734710693359375 0.52033124864101409912109375 0.37929524481296539306640625 +-0.384519302845001242907585492503 -0.387879252433776910979901231258 0.06476744823157787322998046875 +-0.384519302845001242907585492503 0.387879252433776910979901231258 0.06476744823157787322998046875 +-0.384504604339599598272769753748 -0.455190610885620072778579014994 0.07040999829769134521484375 +-0.384504604339599598272769753748 0.455190610885620072778579014994 0.07040999829769134521484375 +-0.38443051278591156005859375 -0.393080234527587890625 -0.5100997388362884521484375 +-0.38443051278591156005859375 0.393080234527587890625 -0.5100997388362884521484375 +-0.384386801719665549548210492503 -0.0954695999622345026214276231258 0.0559683978557586683799662807814 +-0.384386801719665549548210492503 0.0954695999622345026214276231258 0.0559683978557586683799662807814 +-0.384359547495841946673778011245 -0.80562467873096466064453125 0.325172653794288613049445757497 +-0.384359547495841946673778011245 0.80562467873096466064453125 0.325172653794288613049445757497 +-0.384338414669036843029914507497 -0.180752402544021611996427623126 0.423807013034820545538394753748 +-0.384338414669036843029914507497 0.180752402544021611996427623126 0.423807013034820545538394753748 +-0.384290513396263133660823996252 -0.143850292265415208303735994377 0.366235095262527510229233485006 +-0.384290513396263133660823996252 0.143850292265415208303735994377 0.366235095262527510229233485006 +-0.384005594253540083471420985006 -0.109481203556060793791182561563 -0.0235264003276824951171875 +-0.384005594253540083471420985006 0.109481203556060793791182561563 -0.0235264003276824951171875 +-0.383986401557922407690170985006 0 0.112046802043914803248547684689 +-0.38391149044036865234375 -0.568517601490020729748664507497 0.139282497763633716925113503748 +-0.38391149044036865234375 0.568517601490020729748664507497 0.139282497763633716925113503748 +-0.38372039794921875 -0.492786020040512029449786268742 -0.316102507710456837042301003748 +-0.38372039794921875 0.492786020040512029449786268742 -0.316102507710456837042301003748 +-0.38370120525360107421875 -0.0642480015754699762542401231258 -0.0929820001125335748870526231258 +-0.38370120525360107421875 0.0642480015754699762542401231258 -0.0929820001125335748870526231258 +-0.383688899874687183721988503748 -0.235123193264007573910490123126 0 +-0.383688899874687183721988503748 0.235123193264007573910490123126 0 +-0.383615994453430197985710492503 -0.160292804241180419921875 -0.683479976654052800988381477509 +-0.383615994453430197985710492503 0.160292804241180419921875 -0.683479976654052800988381477509 +-0.3835875988006591796875 -0.109876000881195076686047684689 0.0280707985162735006168244211722 +-0.3835875988006591796875 0.109876000881195076686047684689 0.0280707985162735006168244211722 +-0.383456164598464988024772992503 -0.360953989624977156225327235006 0.158662892878055572509765625 +-0.383456164598464988024772992503 0.360953989624977156225327235006 0.158662892878055572509765625 +-0.3834554851055145263671875 -0.0330209992825984954833984375 -0.3191730082035064697265625 +-0.3834554851055145263671875 0.0330209992825984954833984375 -0.3191730082035064697265625 +-0.383358407020568892065170985006 -0.496188783645629905016960492503 -0.496822404861450239721420985006 +-0.383358407020568892065170985006 0.496188783645629905016960492503 -0.496822404861450239721420985006 +-0.383272451162338267938167746252 -0.2784605920314788818359375 0.279395616054534945416065738755 +-0.383272451162338267938167746252 0.2784605920314788818359375 0.279395616054534945416065738755 +-0.3832069933414459228515625 -0.91298198699951171875 0.140058994293212890625 +-0.3832069933414459228515625 0.91298198699951171875 0.140058994293212890625 +-0.383186289668083157611278011245 0 -0.869291809201240495141860264994 +-0.3831554949283599853515625 -0.09919250011444091796875 -0.3055365085601806640625 +-0.3831554949283599853515625 0.09919250011444091796875 -0.3055365085601806640625 +-0.3830229938030242919921875 -0.916243970394134521484375 -0.11743099987506866455078125 +-0.3830229938030242919921875 0.916243970394134521484375 -0.11743099987506866455078125 +-0.383001506328582763671875 -0.253145992755889892578125 0.19805850088596343994140625 +-0.383001506328582763671875 0.253145992755889892578125 0.19805850088596343994140625 +-0.382990396022796664166065738755 -0.0864955045282840701004190009371 -0.518012297153472967004006477509 +-0.382990396022796664166065738755 0.0864955045282840701004190009371 -0.518012297153472967004006477509 +-0.382978695631027210577457253748 -0.483270463347435008660823996252 0.2056138515472412109375 +-0.382978695631027210577457253748 0.483270463347435008660823996252 0.2056138515472412109375 +-0.382970249652862582134815738755 -0.366931492090225241931022992503 -0.375759786367416415142628238755 +-0.382970249652862582134815738755 0.366931492090225241931022992503 -0.375759786367416415142628238755 +-0.382930210232734713482471988755 -0.6007491052150726318359375 -0.549968397617340065686164507497 +-0.382930210232734713482471988755 0.6007491052150726318359375 -0.549968397617340065686164507497 +-0.3829275071620941162109375 -0.30373799800872802734375 -0.105402000248432159423828125 +-0.3829275071620941162109375 0.30373799800872802734375 -0.105402000248432159423828125 +-0.382916986942291259765625 -0.157718396186828618832365123126 -0.434165382385253872943309261245 +-0.382916986942291259765625 0.157718396186828618832365123126 -0.434165382385253872943309261245 +-0.382915806770324718133480246252 -0.1557679474353790283203125 -0.177797694504261027947933371252 +-0.382915806770324718133480246252 0.1557679474353790283203125 -0.177797694504261027947933371252 +-0.382831192016601540295539507497 0 -0.461995804309844937396434261245 +-0.382816004753112837377670985006 -0.0804744005203247153579226846887 0.0835207998752593994140625 +-0.382816004753112837377670985006 0.0804744005203247153579226846887 0.0835207998752593994140625 +-0.3828032016754150390625 -0.537851190567016579358039507497 0.451860809326171897204460492503 +-0.3828032016754150390625 0.537851190567016579358039507497 0.451860809326171897204460492503 +-0.38279159367084503173828125 0 0.236581188440322887078792746252 +-0.382790708541870139391960492503 -0.278109911084175098761051003748 0.765588605403900168688835492503 +-0.382790708541870139391960492503 0.278109911084175098761051003748 0.765588605403900168688835492503 +-0.382708811759948752673210492503 -0.03260000050067901611328125 0.111673998832702639494307561563 +-0.382708811759948752673210492503 0.03260000050067901611328125 0.111673998832702639494307561563 +-0.3826932609081268310546875 -0.588221022486686728747429242503 0.640345606207847528601462272491 +-0.3826932609081268310546875 0.588221022486686728747429242503 0.640345606207847528601462272491 +-0.3826839923858642578125 -0.92387902736663818359375 0 +-0.3826839923858642578125 0.92387902736663818359375 0 +-0.382636108994483969958366742503 -0.387458488345146234710369981258 -0.0772370509803295135498046875 +-0.382636108994483969958366742503 0.387458488345146234710369981258 -0.0772370509803295135498046875 +-0.3825367391109466552734375 -0.6131407320499420166015625 0.200559742748737335205078125 +-0.3825367391109466552734375 0.6131407320499420166015625 0.200559742748737335205078125 +-0.382499617338180497583266514994 -0.520444405078887895044204014994 0.269873791933059659076121761245 +-0.382499617338180497583266514994 0.520444405078887895044204014994 0.269873791933059659076121761245 +-0.382462811470031749383480246252 -0.0162568002939224263980744211722 -0.11600840091705322265625 +-0.382462811470031749383480246252 0.0162568002939224263980744211722 -0.11600840091705322265625 +-0.382450497150421175884815738755 -0.747729921340942405016960492503 -0.323467192053794871942073996252 +-0.382450497150421175884815738755 0.747729921340942405016960492503 -0.323467192053794871942073996252 +-0.382445710897445667608707253748 -0.571362417936325028833266514994 -0.131453703343868244513004128748 +-0.382445710897445667608707253748 0.571362417936325028833266514994 -0.131453703343868244513004128748 +-0.382417187094688471038494981258 -0.07303559780120849609375 -0.388488090038299593853565738755 +-0.382417187094688471038494981258 0.07303559780120849609375 -0.388488090038299593853565738755 +-0.382288205623626697882144753748 -0.454760992527008023333934261245 -0.0839525967836379921616085653113 +-0.382288205623626697882144753748 0.454760992527008023333934261245 -0.0839525967836379921616085653113 +-0.382060912251472484246761496252 -0.525861051678657598351662727509 0 +-0.382060912251472484246761496252 0.525861051678657598351662727509 0 +-0.382016003131866455078125 -0.749383985996246337890625 -0.540821015834808349609375 +-0.382016003131866455078125 0.749383985996246337890625 -0.540821015834808349609375 +-0.381902459263801563604801003748 -0.113109505921602251921065374063 -0.750904458761215143347556022491 +-0.381902459263801563604801003748 0.113109505921602251921065374063 -0.750904458761215143347556022491 +-0.381875404715538047106804242503 -0.0311130009591579458072541086722 0.236015108227729808465511496252 +-0.381875404715538047106804242503 0.0311130009591579458072541086722 0.236015108227729808465511496252 +-0.381807261705398526263621761245 -0.733267781138420060571547764994 -0.1975884474813938140869140625 +-0.381807261705398526263621761245 0.733267781138420060571547764994 -0.1975884474813938140869140625 +-0.381797111034393343853565738755 -0.498029404878616355212272992503 0.645134407281875654760483485006 +-0.381797111034393343853565738755 0.498029404878616355212272992503 0.645134407281875654760483485006 +-0.381793060898780844958366742503 -0.232253095507621770687833873126 0.0528439499437809018234091240629 +-0.381793060898780844958366742503 0.232253095507621770687833873126 0.0528439499437809018234091240629 +-0.381729599833488475457698996252 -0.0296176493167877204204518903907 -0.236443054676055919305355246252 +-0.381729599833488475457698996252 0.0296176493167877204204518903907 -0.236443054676055919305355246252 +-0.381596267223358154296875 -0.61888124048709869384765625 -0.1840402521193027496337890625 +-0.381596267223358154296875 0.61888124048709869384765625 -0.1840402521193027496337890625 +-0.381545007228851318359375 -0.0757730007171630859375 0.3141370117664337158203125 +-0.381545007228851318359375 0.0757730007171630859375 0.3141370117664337158203125 +-0.381478884816169760973991742503 -0.232296903431415568963558371252 0.320954716205596957134815738755 +-0.381478884816169760973991742503 0.232296903431415568963558371252 0.320954716205596957134815738755 +-0.3814252316951751708984375 -0.030973498709499835968017578125 0.64502401649951934814453125 +-0.3814252316951751708984375 0.030973498709499835968017578125 0.64502401649951934814453125 +-0.38134801387786865234375 -0.19180549681186676025390625 -0.2603544890880584716796875 +-0.38134801387786865234375 0.19180549681186676025390625 -0.2603544890880584716796875 +-0.38131201267242431640625 -0.52249300479888916015625 0.762628972530364990234375 +-0.38131201267242431640625 0.52249300479888916015625 0.762628972530364990234375 +-0.381033003330230712890625 -0.0882063008844852503020916856258 -0.222561456263065338134765625 +-0.381033003330230712890625 0.0882063008844852503020916856258 -0.222561456263065338134765625 +-0.380996552109718333856136496252 -0.2310178577899932861328125 -0.06302654743194580078125 +-0.380996552109718333856136496252 0.2310178577899932861328125 -0.06302654743194580078125 +-0.380916005373001131939503238755 -0.730949378013610817639289507497 0.36140848696231842041015625 +-0.380916005373001131939503238755 0.730949378013610817639289507497 0.36140848696231842041015625 +-0.380865444242954265252620871252 -0.63301537930965423583984375 -0.420396395027637481689453125 +-0.380865444242954265252620871252 0.63301537930965423583984375 -0.420396395027637481689453125 +-0.3807159960269927978515625 -0.82710802555084228515625 -0.4134570062160491943359375 +-0.3807159960269927978515625 0.82710802555084228515625 -0.4134570062160491943359375 +-0.38042318820953369140625 -0.123605203628540050164730246252 0 +-0.38042318820953369140625 0.123605203628540050164730246252 0 +-0.3802034854888916015625 -0.3247235119342803955078125 0 +-0.3802034854888916015625 0.3247235119342803955078125 0 +-0.380133603513240825311214621252 -0.72305078804492950439453125 0.234937441349029524362279630623 +-0.380133603513240825311214621252 0.72305078804492950439453125 0.234937441349029524362279630623 +-0.380129347741603840216129128748 -0.44686792790889739990234375 -0.61507020890712738037109375 +-0.380129347741603840216129128748 0.44686792790889739990234375 -0.61507020890712738037109375 +-0.380128511786460843158153011245 0 0.760264673829078696520866742503 +-0.380100595951080311163394753748 -0.276156002283096280169871761245 0.373177206516265846936164507497 +-0.380100595951080311163394753748 0.276156002283096280169871761245 0.373177206516265846936164507497 +-0.380061614513397205694644753748 -0.306721186637878395764289507497 -0.3485333919525146484375 +-0.380061614513397205694644753748 0.306721186637878395764289507497 -0.3485333919525146484375 +-0.3800467550754547119140625 -0.199801504611968994140625 -0.61493401229381561279296875 +-0.3800467550754547119140625 0.199801504611968994140625 -0.61493401229381561279296875 +-0.37994098663330078125 -0.678906977176666259765625 0.628274977207183837890625 +-0.37994098663330078125 0.678906977176666259765625 0.628274977207183837890625 +-0.379917192459106489721420985006 -0.0484567999839782756477113423443 -0.115390396118164068051115123126 +-0.379917192459106489721420985006 0.0484567999839782756477113423443 -0.115390396118164068051115123126 +-0.379867815971374478412059261245 -0.418221008777618419305355246252 -0.2019689977169036865234375 +-0.379867815971374478412059261245 0.418221008777618419305355246252 -0.2019689977169036865234375 +-0.379785001277923583984375 -0.2759275138378143310546875 0.172125995159149169921875 +-0.379785001277923583984375 0.2759275138378143310546875 0.172125995159149169921875 +-0.379615491628646883892628238755 -0.3038480579853057861328125 -0.257038094103336334228515625 +-0.379615491628646883892628238755 0.3038480579853057861328125 -0.257038094103336334228515625 +-0.379551911354064908099559261245 -0.333353298902511585577457253748 0.484578514099121060443309261245 +-0.379551911354064908099559261245 0.333353298902511585577457253748 0.484578514099121060443309261245 +-0.379546684026718150750667746252 -0.520976951718330361096320757497 0.0838317960500717246352664346887 +-0.379546684026718150750667746252 0.520976951718330361096320757497 0.0838317960500717246352664346887 +-0.379415845870971712994190738755 -0.14528195559978485107421875 -0.370724764466285716668636496252 +-0.379415845870971712994190738755 0.14528195559978485107421875 -0.370724764466285716668636496252 +-0.379370212554931696136151231258 0 -0.398218706250190790374432481258 +-0.37928397953510284423828125 -0.0898147523403167724609375 0.64076323807239532470703125 +-0.37928397953510284423828125 0.0898147523403167724609375 0.64076323807239532470703125 +-0.379136550426483143194644753748 0 -0.527972894906997725072983485006 +-0.379131746292114268914730246252 -0.0620775014162063612510600307814 0.234319040179252618960603626874 +-0.379131746292114268914730246252 0.0620775014162063612510600307814 0.234319040179252618960603626874 +-0.379090011119842529296875 -0.52410602569580078125 -0.762628972530364990234375 +-0.379090011119842529296875 0.52410602569580078125 -0.762628972530364990234375 +-0.379087114334106412005809261245 -0.430816394090652421411391514994 -0.400861310958862293585269753748 +-0.379087114334106412005809261245 0.430816394090652421411391514994 -0.400861310958862293585269753748 +-0.378956350684165943487613503748 -0.06668930314481258392333984375 0.757921212911605857165397992503 +-0.378956350684165943487613503748 0.06668930314481258392333984375 0.757921212911605857165397992503 +-0.378885197639465376440170985006 -0.0649832010269165011306924384371 0.110558402538299571649105246252 +-0.378885197639465376440170985006 0.0649832010269165011306924384371 0.110558402538299571649105246252 +-0.378545551002025582043586382497 -0.431285755336284604144481136245 0.757097727060317970959602007497 +-0.378545551002025582043586382497 0.431285755336284604144481136245 0.757097727060317970959602007497 +-0.378503966331481978002670985006 -0.274998344480991363525390625 -0.289154785871505781713608485006 +-0.378503966331481978002670985006 0.274998344480991363525390625 -0.289154785871505781713608485006 +-0.378386244177818353850994981258 -0.330824461579322826043636496252 -0.223336300253868108578458873126 +-0.378386244177818353850994981258 0.330824461579322826043636496252 -0.223336300253868108578458873126 +-0.378192731738090537341179242503 -0.521960404515266485070412727509 -0.0838317960500717246352664346887 +-0.378192731738090537341179242503 0.521960404515266485070412727509 -0.0838317960500717246352664346887 +-0.378056240081787120477230246252 -0.327731963992118846551448996252 0.414927506446838401110710492503 +-0.378056240081787120477230246252 0.327731963992118846551448996252 0.414927506446838401110710492503 +-0.37804639339447021484375 -0.106951200962066658717297684689 -0.0751164019107818659026776231258 +-0.37804639339447021484375 0.106951200962066658717297684689 -0.0751164019107818659026776231258 +-0.377927112579345692022769753748 -0.814355081319808937756477007497 0.0632249973714351654052734375 +-0.377927112579345692022769753748 0.814355081319808937756477007497 0.0632249973714351654052734375 +-0.377823150157928500103565738755 -0.207117444276809697933927623126 0.129815094172954559326171875 +-0.377823150157928500103565738755 0.207117444276809697933927623126 0.129815094172954559326171875 +-0.377821809053421053814503238755 -0.142547848820686356985376619377 0.198571953177452104055689119377 +-0.377821809053421053814503238755 0.142547848820686356985376619377 0.198571953177452104055689119377 +-0.377581095695495638775440738755 -0.48446905612945556640625 -0.212655298411846160888671875 +-0.377581095695495638775440738755 0.48446905612945556640625 -0.212655298411846160888671875 +-0.377576091885566733630241742503 -0.815248793363571144787727007497 -0.0529731016606092494636293110943 +-0.377576091885566733630241742503 0.815248793363571144787727007497 -0.0529731016606092494636293110943 +-0.377514454722404468878238503748 -0.136709551513195054495142244377 -0.203207856416702276058927623126 +-0.377514454722404468878238503748 0.136709551513195054495142244377 -0.203207856416702276058927623126 +-0.37751398980617523193359375 -0.45819000899791717529296875 0.4583069980144500732421875 +-0.37751398980617523193359375 0.45819000899791717529296875 0.4583069980144500732421875 +-0.377510404586792025494190738755 -0.274273610115051302837940738755 0.649815177917480557567841970013 +-0.377510404586792025494190738755 0.274273610115051302837940738755 0.649815177917480557567841970013 +-0.377486902475357044561832253748 -0.444201797246932927887286268742 0.387541705369949307513621761245 +-0.377486902475357044561832253748 0.444201797246932927887286268742 0.387541705369949307513621761245 +-0.377404403686523448602230246252 -0.122083604335784912109375 -0.0515883982181549113898988423443 +-0.377404403686523448602230246252 0.122083604335784912109375 -0.0515883982181549113898988423443 +-0.377124819159507740362613503748 -0.220481950044631974661157869377 0.481315258145332325323551003748 +-0.377124819159507740362613503748 0.220481950044631974661157869377 0.481315258145332325323551003748 +-0.377086806297302290502670985006 -0.123062002658843996916182561563 0.0515883982181549113898988423443 +-0.377086806297302290502670985006 0.123062002658843996916182561563 0.0515883982181549113898988423443 +-0.376805996894836459087940738755 -0.0915588021278381375411825615629 -0.0981540024280548178969851846887 +-0.376805996894836459087940738755 0.0915588021278381375411825615629 -0.0981540024280548178969851846887 +-0.376775020360946621966746761245 -0.524603796005248979028579014994 -0.269873103499412514416633257497 +-0.376775020360946621966746761245 0.524603796005248979028579014994 -0.269873103499412514416633257497 +-0.376759195327758811266960492503 -0.108249199390411388055355246252 0.0795895993709564292251101846887 +-0.376759195327758811266960492503 0.108249199390411388055355246252 0.0795895993709564292251101846887 +-0.3767220079898834228515625 -0.2737019956111907958984375 0.884967982769012451171875 +-0.3767220079898834228515625 0.2737019956111907958984375 0.884967982769012451171875 +-0.376537799835205078125 -0.443330383300781227795539507497 0.147232201695442183053685880623 +-0.376537799835205078125 0.443330383300781227795539507497 0.147232201695442183053685880623 +-0.37652051448822021484375 -0.3237049877643585205078125 0.058715499937534332275390625 +-0.37652051448822021484375 0.3237049877643585205078125 0.058715499937534332275390625 +-0.3764919936656951904296875 -0.80149900913238525390625 0.4645999968051910400390625 +-0.3764919936656951904296875 0.80149900913238525390625 0.4645999968051910400390625 +-0.37642125785350799560546875 -0.33522824943065643310546875 0.55536375939846038818359375 +-0.37642125785350799560546875 0.33522824943065643310546875 0.55536375939846038818359375 +-0.3763979971408843994140625 -0.23282550275325775146484375 0.23262999951839447021484375 +-0.3763979971408843994140625 0.23282550275325775146484375 0.23262999951839447021484375 +-0.37634050846099853515625 -0.1624304950237274169921875 -0.286328494548797607421875 +-0.37634050846099853515625 0.1624304950237274169921875 -0.286328494548797607421875 +-0.376186493039131153448551003748 -0.634707909822464055871193977509 0.515393114089965798108039507497 +-0.376186493039131153448551003748 0.634707909822464055871193977509 0.515393114089965798108039507497 +-0.376160688698291778564453125 -0.413298907876014698370426003748 0.640458014607429459985610264994 +-0.376160688698291778564453125 0.413298907876014698370426003748 0.640458014607429459985610264994 +-0.376123487949371337890625 -0.110056497156620025634765625 0.31051349639892578125 +-0.376123487949371337890625 0.110056497156620025634765625 0.31051349639892578125 +-0.37602974474430084228515625 -0.52653224766254425048828125 -0.37929524481296539306640625 +-0.37602974474430084228515625 0.52653224766254425048828125 -0.37929524481296539306640625 +-0.3759759962558746337890625 -0.896400988101959228515625 -0.23474900424480438232421875 +-0.3759759962558746337890625 0.896400988101959228515625 -0.23474900424480438232421875 +-0.375862908363342240747329014994 -0.21535779535770416259765625 0.549861884117126442639289507497 +-0.375862908363342240747329014994 0.21535779535770416259765625 0.549861884117126442639289507497 +-0.375551199913024935650440738755 0 -0.137699604034423828125 +-0.375531695783138275146484375 -0.5502950847148895263671875 0.527873805165290810315070757497 +-0.375531695783138275146484375 0.5502950847148895263671875 0.527873805165290810315070757497 +-0.375455698370933566021534488755 -0.802567791938781804894631477509 -0.157853700220584869384765625 +-0.375455698370933566021534488755 0.802567791938781804894631477509 -0.157853700220584869384765625 +-0.375448404252529122082648882497 -0.132967202365398412533536998126 0.75090532004833221435546875 +-0.375448404252529122082648882497 0.132967202365398412533536998126 0.75090532004833221435546875 +-0.375433360040187791284438389994 -0.545731309056281976843649772491 -0.680975207686424277575554242503 +-0.375433360040187791284438389994 0.545731309056281976843649772491 -0.680975207686424277575554242503 +-0.37520550191402435302734375 -0.348157502710819244384765625 -0.5481854975223541259765625 +-0.37520550191402435302734375 0.348157502710819244384765625 -0.5481854975223541259765625 +-0.375200009346008334087940738755 -0.0165000006556510932231862653907 0.13766920566558837890625 +-0.375200009346008334087940738755 0.0165000006556510932231862653907 0.13766920566558837890625 +-0.375190186500549305304019753748 -0.0247806005179882042621652971093 0.467566788196563720703125 +-0.375190186500549305304019753748 0.0247806005179882042621652971093 0.467566788196563720703125 +-0.375141584873199429583934261245 -0.272555404901504483294871761245 -0.380765998363494839740184261245 +-0.375141584873199429583934261245 0.272555404901504483294871761245 -0.380765998363494839740184261245 +-0.37509973347187042236328125 -0.55416150391101837158203125 0.338681258261203765869140625 +-0.37509973347187042236328125 0.55416150391101837158203125 0.338681258261203765869140625 +-0.375059306621551569183026231258 -0.244453543424606345446647992503 -0.319488385319709800036491742503 +-0.375059306621551569183026231258 0.244453543424606345446647992503 -0.319488385319709800036491742503 +-0.375019598007202192846420985006 -0.137137603759765636102230246252 0.0235264003276824951171875 +-0.375019598007202192846420985006 0.137137603759765636102230246252 0.0235264003276824951171875 +-0.374997742474079132080078125 -0.1486679948866367340087890625 0.6322777569293975830078125 +-0.374997742474079132080078125 0.1486679948866367340087890625 0.6322777569293975830078125 +-0.37494099140167236328125 -0.3232879936695098876953125 -0.0700294971466064453125 +-0.37494099140167236328125 0.3232879936695098876953125 -0.0700294971466064453125 +-0.374938192963600147589176003748 -0.796283107995987005089943977509 0.188030697405338287353515625 +-0.374938192963600147589176003748 0.796283107995987005089943977509 0.188030697405338287353515625 +-0.374913191795349154400440738755 -0.136572396755218511410490123126 -0.0280707985162735006168244211722 +-0.374913191795349154400440738755 0.136572396755218511410490123126 -0.0280707985162735006168244211722 +-0.374902540445327780993522992503 -0.381578445434570368011151231258 0.1278513483703136444091796875 +-0.374902540445327780993522992503 0.381578445434570368011151231258 0.1278513483703136444091796875 +-0.3748300075531005859375 -0.2974460124969482421875 0.14501149952411651611328125 +-0.3748300075531005859375 0.2974460124969482421875 0.14501149952411651611328125 +-0.374824452400207563940170985006 -0.355760905146598860326889735006 -0.188257294893264787161157869377 +-0.374824452400207563940170985006 0.355760905146598860326889735006 -0.188257294893264787161157869377 +-0.3747690021991729736328125 -0.19085800647735595703125 0.270410001277923583984375 +-0.3747690021991729736328125 0.19085800647735595703125 0.270410001277923583984375 +-0.374573251605033907818409488755 -0.092744551599025726318359375 0.231502050161361688784822376874 +-0.374573251605033907818409488755 0.092744551599025726318359375 0.231502050161361688784822376874 +-0.374488198757171597552684261245 -0.369382202625274658203125 0.288643795251846302374332253748 +-0.374488198757171597552684261245 0.369382202625274658203125 0.288643795251846302374332253748 +-0.37445850670337677001953125 -0.190061102807521836721704744377 0.161733596026897435971036998126 +-0.37445850670337677001953125 0.190061102807521836721704744377 0.161733596026897435971036998126 +-0.374319010972976706774772992503 -0.181830553710460668392911998126 0.359615314006805464330795985006 +-0.374319010972976706774772992503 0.181830553710460668392911998126 0.359615314006805464330795985006 +-0.374314808845520041735710492503 -0.0324339985847473186164613423443 -0.137246394157409662417634876874 +-0.374314808845520041735710492503 0.0324339985847473186164613423443 -0.137246394157409662417634876874 +-0.374049592018127485815170985006 -0.092980802059173583984375 0.106964802742004400082365123126 +-0.374049592018127485815170985006 0.092980802059173583984375 0.106964802742004400082365123126 +-0.373979705572128284796207253748 -0.226892244815826427117855246252 0.105637051910161969270340875937 +-0.373979705572128284796207253748 0.226892244815826427117855246252 0.105637051910161969270340875937 +-0.373916408419609103130909488755 0 0.403344160318374667095753238755 +-0.373884299397468589098991742503 -0.249016043543815623895198996252 0.0264897007495164885093608120314 +-0.373884299397468589098991742503 0.249016043543815623895198996252 0.0264897007495164885093608120314 +-0.373841089010238658563167746252 -0.0592866025865078014045472798443 -0.243367660045623795950220369377 +-0.373841089010238658563167746252 0.0592866025865078014045472798443 -0.243367660045623795950220369377 +-0.373824810981750521587940738755 -0.654016017913818359375 0.26929199695587158203125 +-0.373824810981750521587940738755 0.654016017913818359375 0.26929199695587158203125 +-0.373770895600318897589176003748 -0.248587211966514592953458873126 -0.031618349254131317138671875 +-0.373770895600318897589176003748 0.248587211966514592953458873126 -0.031618349254131317138671875 +-0.37374235689640045166015625 -0.0386403009295463520378355326557 0.87253887951374053955078125 +-0.37374235689640045166015625 0.0386403009295463520378355326557 0.87253887951374053955078125 +-0.373682107031345356329410378748 -0.656060585379600547106804242503 0.390443260967731464727847878748 +-0.373682107031345356329410378748 0.656060585379600547106804242503 0.390443260967731464727847878748 +-0.373604395985603354723991742503 -0.337515738606452952996761496252 -0.41109965741634368896484375 +-0.373604395985603354723991742503 0.337515738606452952996761496252 -0.41109965741634368896484375 +-0.373596405982971224712940738755 -0.0749719977378845298110476846887 -0.121675598621368410978682561563 +-0.373596405982971224712940738755 0.0749719977378845298110476846887 -0.121675598621368410978682561563 +-0.373500800132751498150440738755 -0.664286422729492231908920985006 -0.243352794647216819079460492503 +-0.373500800132751498150440738755 0.664286422729492231908920985006 -0.243352794647216819079460492503 +-0.373342454433441162109375 -0.172585408389568345510767244377 -0.503319045901298500744758257497 +-0.373342454433441162109375 0.172585408389568345510767244377 -0.503319045901298500744758257497 +-0.3731729984283447265625 -0.88475799560546875 0.2791860103607177734375 +-0.3731729984283447265625 0.88475799560546875 0.2791860103607177734375 +-0.373003238439559903216746761245 -0.744648000597953774182258257497 -0.457019342482089974133430132497 +-0.373003238439559903216746761245 0.744648000597953774182258257497 -0.457019342482089974133430132497 +-0.372672834992408774645866742503 -0.0448250006884336540946556226572 0.402002140879631097991619981258 +-0.372672834992408774645866742503 0.0448250006884336540946556226572 0.402002140879631097991619981258 +-0.372618389129638682977230246252 -0.0490911990404129042198100307814 0.136914396286010736636384876874 +-0.372618389129638682977230246252 0.0490911990404129042198100307814 0.136914396286010736636384876874 +-0.372524809837341319695980246252 0 -0.707972812652587935033920985006 +-0.3724629878997802734375 -0.066284500062465667724609375 -0.3269214928150177001953125 +-0.3724629878997802734375 0.066284500062465667724609375 -0.3269214928150177001953125 +-0.372445785999298062396434261245 -0.0736788019537925747970419365629 0.464602196216583218646434261245 +-0.372445785999298062396434261245 0.0736788019537925747970419365629 0.464602196216583218646434261245 +-0.372427490353584300653011496252 -0.671642789244651816638054242503 -0.364270898699760425909488503748 +-0.372427490353584300653011496252 0.671642789244651816638054242503 -0.364270898699760425909488503748 +-0.372281992435455288958934261245 -0.221107792854309065377904630623 0.415352404117584228515625 +-0.372281992435455288958934261245 0.221107792854309065377904630623 0.415352404117584228515625 +-0.371977260708808876721320757497 -0.72071467339992523193359375 0.494675454497337296899672764994 +-0.371977260708808876721320757497 0.72071467339992523193359375 0.494675454497337296899672764994 +-0.371938204765319802014289507497 -0.442626607418060313836605246252 -0.160447794198989857061832253748 +-0.371938204765319802014289507497 0.442626607418060313836605246252 -0.160447794198989857061832253748 +-0.371852096915245067254573996252 -0.344410201907157931255909488755 0.743712294101715132299545985006 +-0.371852096915245067254573996252 0.344410201907157931255909488755 0.743712294101715132299545985006 +-0.371730399131774913445980246252 -0.466947984695434581414730246252 0.532706403732299826891960492503 +-0.371730399131774913445980246252 0.466947984695434581414730246252 0.532706403732299826891960492503 +-0.371654248237609896587940738755 -0.404136154055595442358139735006 0.0323553999885916737655477959379 +-0.371654248237609896587940738755 0.404136154055595442358139735006 0.0323553999885916737655477959379 +-0.371599191427230857165397992503 -0.201715193688869476318359375 -0.154028695821762096063167746252 +-0.371599191427230857165397992503 0.201715193688869476318359375 -0.154028695821762096063167746252 +-0.371521708369255077020198996252 -0.314627486467361494604233485006 0.255892999470233917236328125 +-0.371521708369255077020198996252 0.314627486467361494604233485006 0.255892999470233917236328125 +-0.3715159893035888671875 -0.459563207626342784539730246252 -0.539238405227661199425881477509 +-0.3715159893035888671875 0.459563207626342784539730246252 -0.539238405227661199425881477509 +-0.371343737840652443615852007497 -0.602621114253997780529914507497 -0.470586356520652782098323996252 +-0.371343737840652443615852007497 0.602621114253997780529914507497 -0.470586356520652782098323996252 +-0.3711183071136474609375 -0.233895894885063154733373380623 -0.545493918657302789831931022491 +-0.3711183071136474609375 0.233895894885063154733373380623 -0.545493918657302789831931022491 +-0.371072855591773942407485264994 -0.1131221987307071685791015625 0.867183738946914584033720529987 +-0.371072855591773942407485264994 0.1131221987307071685791015625 0.867183738946914584033720529987 +-0.370926606655120894018295985006 -0.404255515336990389752003238755 -0.0386088997125625665862713731258 +-0.370926606655120894018295985006 0.404255515336990389752003238755 -0.0386088997125625665862713731258 +-0.370881003141403209344417746252 0 -0.254847595095634482653679242503 +-0.370674183964729342388721988755 -0.507131281495094343725327235006 0.167088355123996751272485994377 +-0.370674183964729342388721988755 0.507131281495094343725327235006 0.167088355123996751272485994377 +-0.370547783374786332544204014994 -0.547948080301284723425681022491 0.229013398289680453201455634371 +-0.370547783374786332544204014994 0.547948080301284723425681022491 0.229013398289680453201455634371 +-0.370379117131233226434261496252 -0.426580050587654135973991742503 0.321479596197605133056640625 +-0.370379117131233226434261496252 0.426580050587654135973991742503 0.321479596197605133056640625 +-0.370377901196479786261051003748 -0.56005918979644775390625 -0.599294704198837346886818977509 +-0.370377901196479786261051003748 0.56005918979644775390625 -0.599294704198837346886818977509 +-0.370356905460357654913394753748 -0.225688610970973951852514005623 -0.731027218699455194617087272491 +-0.370356905460357654913394753748 0.225688610970973951852514005623 -0.731027218699455194617087272491 +-0.37017810344696044921875 -0.116950495541095739193693248126 -0.227575805783271800653011496252 +-0.37017810344696044921875 0.116950495541095739193693248126 -0.227575805783271800653011496252 +-0.369877937436103809698551003748 -0.223397554457187647036775501874 -0.125633704662323014700220369377 +-0.369877937436103809698551003748 0.223397554457187647036775501874 -0.125633704662323014700220369377 +-0.369791799783706631732371761245 -0.399795907735824573858707253748 -0.439792484045028631012286268742 +-0.369791799783706631732371761245 0.399795907735824573858707253748 -0.439792484045028631012286268742 +-0.3697912395000457763671875 -0.56233799457550048828125 -0.330953992903232574462890625 +-0.3697912395000457763671875 0.56233799457550048828125 -0.330953992903232574462890625 +-0.369660007953643787725894753748 -0.396528017520904552117855246252 0.257132399082183826788394753748 +-0.369660007953643787725894753748 0.396528017520904552117855246252 0.257132399082183826788394753748 +-0.369625900685787212029964621252 -0.1984248459339141845703125 0.7392594516277313232421875 +-0.369625900685787212029964621252 0.1984248459339141845703125 0.7392594516277313232421875 +-0.369614982604980435443309261245 -0.317477416992187511102230246252 0.350132989883422840460269753748 +-0.369614982604980435443309261245 0.317477416992187511102230246252 0.350132989883422840460269753748 +-0.369552397727966330798210492503 -0.15307199954986572265625 0 +-0.369552397727966330798210492503 0.15307199954986572265625 0 +-0.3695360124111175537109375 -0.711278021335601806640625 -0.597935020923614501953125 +-0.3695360124111175537109375 0.711278021335601806640625 -0.597935020923614501953125 +-0.369504842162132252081363503748 0 0.534758231043815590588508257497 +-0.369472217559814464227230246252 -0.47142899036407470703125 0.03528960049152374267578125 +-0.369472217559814464227230246252 0.47142899036407470703125 0.03528960049152374267578125 +-0.369409501552581787109375 -0.2683905065059661865234375 -0.20372299849987030029296875 +-0.369409501552581787109375 0.2683905065059661865234375 -0.20372299849987030029296875 +-0.369361817836761474609375 -0.119147399067878717593416126874 -0.457576203346252430304019753748 +-0.369361817836761474609375 0.119147399067878717593416126874 -0.457576203346252430304019753748 +-0.369350492954254150390625 -0.2428545057773590087890625 -0.23367099463939666748046875 +-0.369350492954254150390625 0.2428545057773590087890625 -0.23367099463939666748046875 +-0.369302460551261924059929242503 -0.212401744723320018426448996252 -0.347852441668510481420639735006 +-0.369302460551261924059929242503 0.212401744723320018426448996252 -0.347852441668510481420639735006 +-0.369142198562622037005809261245 -0.04002539813518524169921875 -0.471308398246765125616519753748 +-0.369142198562622037005809261245 0.04002539813518524169921875 -0.471308398246765125616519753748 +-0.3690870106220245361328125 0 -0.337305009365081787109375 +-0.36898100376129150390625 -0.132040500640869140625 -0.3105129897594451904296875 +-0.36898100376129150390625 0.132040500640869140625 -0.3105129897594451904296875 +-0.368956813216209433825554242503 -0.35964359343051910400390625 -0.737921726703643865441506477509 +-0.368956813216209433825554242503 0.35964359343051910400390625 -0.737921726703643865441506477509 +-0.368950998783111605572315738755 -0.378504490852355990337940738755 -0.152017803490161917956413617503 +-0.368950998783111605572315738755 0.378504490852355990337940738755 -0.152017803490161917956413617503 +-0.368949359655380282330128238755 -0.0893513523042202134627487453145 0.397986048460006736071647992503 +-0.368949359655380282330128238755 0.0893513523042202134627487453145 0.397986048460006736071647992503 +-0.368904161453247059210269753748 -0.183727347850799554995759876874 -0.180703800916671764031917746252 +-0.368904161453247059210269753748 0.183727347850799554995759876874 -0.180703800916671764031917746252 +-0.368852412700653053967414507497 -0.120711001753807056768863503748 0.457576811313629150390625 +-0.368852412700653053967414507497 0.120711001753807056768863503748 0.457576811313629150390625 +-0.368767797946929931640625 -0.245297241210937516653345369377 0.079620301723480224609375 +-0.368767797946929931640625 0.245297241210937516653345369377 0.079620301723480224609375 +-0.368762803077697765008480246252 -0.0767108023166656605162927462516 0.134645605087280267886384876874 +-0.368762803077697765008480246252 0.0767108023166656605162927462516 0.134645605087280267886384876874 +-0.36872099339962005615234375 -0.206016741693019866943359375 0.61975948512554168701171875 +-0.36872099339962005615234375 0.206016741693019866943359375 0.61975948512554168701171875 +-0.368711209297180209087940738755 -0.135681605339050298519865123126 0.0751164019107818659026776231258 +-0.368711209297180209087940738755 0.135681605339050298519865123126 0.0751164019107818659026776231258 +-0.368659503757953643798828125 -0.49712924659252166748046875 -0.42361874878406524658203125 +-0.368659503757953643798828125 0.49712924659252166748046875 -0.42361874878406524658203125 +-0.36861598491668701171875 -0.471539390087127641137954014994 -0.0421061977744102491905131557814 +-0.36861598491668701171875 0.471539390087127641137954014994 -0.0421061977744102491905131557814 +-0.368585991859436079565170985006 -0.0589648008346557658820863423443 -0.143762397766113297903345369377 +-0.368585991859436079565170985006 0.0589648008346557658820863423443 -0.143762397766113297903345369377 +-0.368515348434448275494190738755 -0.171772205829620355777009876874 0.192848843336105357781917746252 +-0.368515348434448275494190738755 0.171772205829620355777009876874 0.192848843336105357781917746252 +-0.368433189392089854852230246252 -0.133875203132629405633480246252 -0.0795895993709564292251101846887 +-0.368433189392089854852230246252 0.133875203132629405633480246252 -0.0795895993709564292251101846887 +-0.3682835102081298828125 -0.14496250450611114501953125 0.3055374920368194580078125 +-0.3682835102081298828125 0.14496250450611114501953125 0.3055374920368194580078125 +-0.368251001834869418072315738755 -0.0535093009471893296669087192186 0.532942810654640219958366742503 +-0.368251001834869418072315738755 0.0535093009471893296669087192186 0.532942810654640219958366742503 +-0.368222397565841685906917746252 -0.122967897355556493588224498126 0.227576690912246720754907869377 +-0.368222397565841685906917746252 0.122967897355556493588224498126 0.227576690912246720754907869377 +-0.36817300319671630859375 -0.3172884881496429443359375 0.117374502122402191162109375 +-0.36817300319671630859375 0.3172884881496429443359375 0.117374502122402191162109375 +-0.368011009693145707544204014994 0 -0.595456385612487704150908029987 +-0.367979192733764670641960492503 -0.118400800228118899259932561563 -0.102823197841644287109375 +-0.367979192733764670641960492503 0.118400800228118899259932561563 -0.102823197841644287109375 +-0.367974758148193359375 -0.65140052139759063720703125 0.05264849960803985595703125 +-0.367974758148193359375 0.65140052139759063720703125 0.05264849960803985595703125 +-0.367939001321792635845753238755 -0.339719614386558566021534488755 0.227401353418827084640341240629 +-0.367939001321792635845753238755 0.339719614386558566021534488755 0.227401353418827084640341240629 +-0.367920804023742720190170985006 -0.267309594154357899054019753748 -0.658163976669311590050881477509 +-0.367920804023742720190170985006 0.267309594154357899054019753748 -0.658163976669311590050881477509 +-0.36784350872039794921875 -0.7792839109897613525390625 -0.25963018834590911865234375 +-0.36784350872039794921875 0.7792839109897613525390625 -0.25963018834590911865234375 +-0.367822393774986322600994981258 -0.0366322018206119565109091240629 -0.407265084981918379369858485006 +-0.367822393774986322600994981258 0.0366322018206119565109091240629 -0.407265084981918379369858485006 +-0.367821598052978537829460492503 -0.150013601779937749691740123126 0.0469399988651275634765625 +-0.367821598052978537829460492503 0.150013601779937749691740123126 0.0469399988651275634765625 +-0.367805796861648548468082253748 -0.315722039341926552502570757497 -0.817030420899391152111945757497 +-0.367805796861648548468082253748 0.315722039341926552502570757497 -0.817030420899391152111945757497 +-0.367767411470413196905582253748 -0.509243163466453596655014735006 -0.167088355123996751272485994377 +-0.367767411470413196905582253748 0.509243163466453596655014735006 -0.167088355123996751272485994377 +-0.367654088139534040990952235006 -0.109084802865982058439620061563 -0.394247165322303805279346988755 +-0.367654088139534040990952235006 0.109084802865982058439620061563 -0.394247165322303805279346988755 +-0.367595994472503628802684261245 -0.236479800939559919870092130623 -0.411036014556884765625 +-0.367595994472503628802684261245 0.236479800939559919870092130623 -0.411036014556884765625 +-0.367523807287216175421207253748 -0.553077703714370705334602007497 -0.221429592370986916272102007497 +-0.367523807287216175421207253748 0.553077703714370705334602007497 -0.221429592370986916272102007497 +-0.3675135076045989990234375 -0.652293741703033447265625 -0.044120999984443187713623046875 +-0.3675135076045989990234375 0.652293741703033447265625 -0.044120999984443187713623046875 +-0.367315191030502308233707253748 -0.381572109460830644067641514994 0.457692217826843217309829014994 +-0.367315191030502308233707253748 0.381572109460830644067641514994 0.457692217826843217309829014994 +-0.3673059940338134765625 -0.2923569977283477783203125 -0.17208699882030487060546875 +-0.3673059940338134765625 0.2923569977283477783203125 -0.17208699882030487060546875 +-0.367296409606933604852230246252 -0.120501995086669921875 0.102823197841644287109375 +-0.367296409606933604852230246252 0.120501995086669921875 0.102823197841644287109375 +-0.367091989517211947369190738755 -0.148697602748870866262720369377 -0.0559683978557586683799662807814 +-0.367091989517211947369190738755 0.148697602748870866262720369377 -0.0559683978557586683799662807814 +-0.366920804977417025494190738755 -0.0162560001015663140033762346093 -0.1584455966949462890625 +-0.366920804977417025494190738755 0.0162560001015663140033762346093 -0.1584455966949462890625 +-0.366820788383483920025440738755 -0.33247280120849609375 0.628413581848144553454460492503 +-0.366820788383483920025440738755 0.33247280120849609375 0.628413581848144553454460492503 +-0.36676575243473052978515625 -0.05005574785172939300537109375 -0.652286231517791748046875 +-0.36676575243473052978515625 0.05005574785172939300537109375 -0.652286231517791748046875 +-0.366765695810317982061832253748 -0.588123899698257401880141514994 0.0979446962475776644607705634371 +-0.366765695810317982061832253748 0.588123899698257401880141514994 0.0979446962475776644607705634371 +-0.366726800799369867522869981258 -0.266439245641231559069694867503 0.311483147740364119115952235006 +-0.366726800799369867522869981258 0.266439245641231559069694867503 0.311483147740364119115952235006 +-0.36670790612697601318359375 -0.2995707094669342041015625 -0.44528901576995849609375 +-0.36670790612697601318359375 0.2995707094669342041015625 -0.44528901576995849609375 +-0.36669714748859405517578125 -0.126592254638671880551115123126 -0.867183738946914584033720529987 +-0.36669714748859405517578125 0.126592254638671880551115123126 -0.867183738946914584033720529987 +-0.366484057903289806024105246252 -0.243291592597961431332365123126 -0.0948618002235889490325604356258 +-0.366484057903289806024105246252 0.243291592597961431332365123126 -0.0948618002235889490325604356258 +-0.3664430081844329833984375 -0.590737694501876742236845529987 -0.082144998013973236083984375 +-0.3664430081844329833984375 0.590737694501876742236845529987 -0.082144998013973236083984375 +-0.3662889897823333740234375 -0.864929020404815673828125 -0.343118011951446533203125 +-0.3662889897823333740234375 0.864929020404815673828125 -0.343118011951446533203125 +-0.366122710704803455694644753748 -0.178721098601818090267911998126 -0.802504813671112038342414507497 +-0.366122710704803455694644753748 0.178721098601818090267911998126 -0.802504813671112038342414507497 +-0.3659285008907318115234375 -0.3394559919834136962890625 0.02942950092256069183349609375 +-0.3659285008907318115234375 0.3394559919834136962890625 0.02942950092256069183349609375 +-0.365821659564971923828125 -0.0185616005212068564678151716407 0.261400043964385986328125 +-0.365821659564971923828125 0.0185616005212068564678151716407 0.261400043964385986328125 +-0.36576426029205322265625 -0.187407454103231424502595814374 0.856501939892768793249899772491 +-0.36576426029205322265625 0.187407454103231424502595814374 0.856501939892768793249899772491 +-0.365749317407608021124332253748 -0.5968479812145233154296875 0 +-0.365749317407608021124332253748 0.5968479812145233154296875 0 +-0.3656280040740966796875 -0.6415027678012847900390625 -0.1314922459423542022705078125 +-0.3656280040740966796875 0.6415027678012847900390625 -0.1314922459423542022705078125 +-0.365617832541465792584034488755 -0.104651945829391482267745061563 0.527135038375854514391960492503 +-0.365617832541465792584034488755 0.104651945829391482267745061563 0.527135038375854514391960492503 +-0.365510189533233609271434261245 -0.394578503072261776996043636245 -0.658187305927276589123664507497 +-0.365510189533233609271434261245 0.394578503072261776996043636245 -0.658187305927276589123664507497 +-0.365478086471557606085269753748 -0.371309918165206920281917746252 0.38865776360034942626953125 +-0.365478086471557606085269753748 0.371309918165206920281917746252 0.38865776360034942626953125 +-0.365474390983581587377670985006 -0.102070796489715578947432561563 -0.126530802249908452816740123126 +-0.365474390983581587377670985006 0.102070796489715578947432561563 -0.126530802249908452816740123126 +-0.3653959929943084716796875 -0.3394879996776580810546875 -0.0351249985396862030029296875 +-0.3653959929943084716796875 0.3394879996776580810546875 -0.0351249985396862030029296875 +-0.365313760936260223388671875 -0.636020243167877197265625 0.15660224854946136474609375 +-0.365313760936260223388671875 0.636020243167877197265625 0.15660224854946136474609375 +-0.365292000770568892065170985006 0 0.162978398799896256887720369377 +-0.364715415239334095343082253748 -0.09346540272235870361328125 -0.59012448787689208984375 +-0.364715415239334095343082253748 0.09346540272235870361328125 -0.59012448787689208984375 +-0.364554858207702670025440738755 -0.400376355648040804791065738755 0.0964276470243930899917117471887 +-0.364554858207702670025440738755 0.400376355648040804791065738755 0.0964276470243930899917117471887 +-0.364471891522407553942741742503 -0.455401059985160838738948996252 0.286826793849468242303402121252 +-0.364471891522407553942741742503 0.455401059985160838738948996252 0.286826793849468242303402121252 +-0.36447179317474365234375 -0.46310341358184814453125 0.112674602866172784976228626874 +-0.36447179317474365234375 0.46310341358184814453125 0.112674602866172784976228626874 +-0.364226388931274402960269753748 -0.0296945985406637212589142649222 -0.262597489356994617804019753748 +-0.364226388931274402960269753748 0.0296945985406637212589142649222 -0.262597489356994617804019753748 +-0.36420254409313201904296875 -0.164711250364780431576505748126 -0.206704343855381028616235994377 +-0.36420254409313201904296875 0.164711250364780431576505748126 -0.206704343855381028616235994377 +-0.364171940088272083624332253748 -0.0883849494159221621414346259371 -0.249132612347602838687166126874 +-0.364171940088272083624332253748 0.0883849494159221621414346259371 -0.249132612347602838687166126874 +-0.364130097627639759405582253748 -0.7632233798503875732421875 0.308058303594589244500667746252 +-0.364130097627639759405582253748 0.7632233798503875732421875 0.308058303594589244500667746252 +-0.3640581071376800537109375 -0.264502340555191062243522992503 0 +-0.3640581071376800537109375 0.264502340555191062243522992503 0 +-0.364054393768310557977230246252 -0.03289639949798583984375 0.162425994873046875 +-0.364054393768310557977230246252 0.03289639949798583984375 0.162425994873046875 +-0.364046643674373615606754128748 -0.867332887649536088403579014994 0.13305604457855224609375 +-0.364046643674373615606754128748 0.867332887649536088403579014994 0.13305604457855224609375 +-0.364007997512817427221420985006 -0.703474378585815518505341970013 0.112345600128173836451672684689 +-0.364007997512817427221420985006 0.703474378585815518505341970013 0.112345600128173836451672684689 +-0.363871844112873044085887386245 -0.870431771874427773205695757497 -0.111559449881315220221011941248 +-0.363871844112873044085887386245 0.870431771874427773205695757497 -0.111559449881315220221011941248 +-0.363812389969825733526676003748 -0.04967234842479228973388671875 0.260140961408615145611378238755 +-0.363812389969825733526676003748 0.04967234842479228973388671875 0.260140961408615145611378238755 +-0.363742399215698286596420985006 -0.706269598007202237255341970013 -0.0942071974277496337890625 +-0.363742399215698286596420985006 0.706269598007202237255341970013 -0.0942071974277496337890625 +-0.36371250450611114501953125 -0.58515076339244842529296875 0.296331010758876800537109375 +-0.36371250450611114501953125 0.58515076339244842529296875 0.296331010758876800537109375 +-0.3636589944362640380859375 -0.02062500081956386566162109375 0.3425300121307373046875 +-0.3636589944362640380859375 0.02062500081956386566162109375 0.3425300121307373046875 +-0.363591492176055908203125 -0.2214320003986358642578125 -0.2622390091419219970703125 +-0.363591492176055908203125 0.2214320003986358642578125 -0.2622390091419219970703125 +-0.363549792766571011615184261245 -0.877685075998306252209602007497 0 +-0.363549792766571011615184261245 0.877685075998306252209602007497 0 +-0.363478055596351656841846988755 -0.04338164813816547393798828125 -0.537123608589172407690170985006 +-0.363478055596351656841846988755 0.04338164813816547393798828125 -0.537123608589172407690170985006 +-0.363344259560108184814453125 -0.38708625733852386474609375 0.52975948154926300048828125 +-0.363344259560108184814453125 0.38708625733852386474609375 0.52975948154926300048828125 +-0.363323153555393185687449886245 -0.0567026473581790924072265625 -0.766342169046401955334602007497 +-0.363323153555393185687449886245 0.0567026473581790924072265625 -0.766342169046401955334602007497 +-0.363220989704132080078125 -0.06660400331020355224609375 -0.92931902408599853515625 +-0.363220989704132080078125 0.06660400331020355224609375 -0.92931902408599853515625 +-0.36322081089019775390625 -0.104618799686431895867855246252 0.130864405632019037417634876874 +-0.36322081089019775390625 0.104618799686431895867855246252 0.130864405632019037417634876874 +-0.3631927967071533203125 -0.7128047943115234375 0 +-0.3631927967071533203125 0.7128047943115234375 0 +-0.36307048797607421875 -0.3141554892063140869140625 -0.13959300518035888671875 +-0.36307048797607421875 0.3141554892063140869140625 -0.13959300518035888671875 +-0.363058400154113780633480246252 -0.166237199306488059313835492503 0.0235311999917030348350444057814 +-0.363058400154113780633480246252 0.166237199306488059313835492503 0.0235311999917030348350444057814 +-0.363031804561614990234375 -0.421742391586303722039730246252 0.224368196725845320260717130623 +-0.363031804561614990234375 0.421742391586303722039730246252 0.224368196725845320260717130623 +-0.363018590211868275030582253748 0 -0.823539608716964743884147992503 +-0.362977194786071821752670985006 -0.165707600116729747430355246252 -0.0280791997909545926193075615629 +-0.362977194786071821752670985006 0.165707600116729747430355246252 -0.0280791997909545926193075615629 +-0.36291520297527313232421875 -0.711914786696434043200554242503 -0.513779965043067887719985264994 +-0.36291520297527313232421875 0.711914786696434043200554242503 -0.513779965043067887719985264994 +-0.3627195060253143310546875 -0.263527555763721499371143863755 0.470624703168869007452457253748 +-0.3627195060253143310546875 0.263527555763721499371143863755 0.470624703168869007452457253748 +-0.362594100832939192358139735006 -0.218539196252822892629907869377 0.351092505455017134252670985006 +-0.362594100832939192358139735006 0.218539196252822892629907869377 0.351092505455017134252670985006 +-0.362590408325195345806690738755 -0.5823624134063720703125 0.411560010910034190789730246252 +-0.362590408325195345806690738755 0.5823624134063720703125 0.411560010910034190789730246252 +-0.362551510334014892578125 -0.557262021303176924291733485006 0.606643205881118752209602007497 +-0.362551510334014892578125 0.557262021303176924291733485006 0.606643205881118752209602007497 +-0.3624829947948455810546875 -0.22267949581146240234375 0.2627165019512176513671875 +-0.3624829947948455810546875 0.22267949581146240234375 0.2627165019512176513671875 +-0.362431567907333385125667746252 -0.537645554542541481701789507497 0.0456150475889444337318501254686 +-0.362431567907333385125667746252 0.537645554542541481701789507497 0.0456150475889444337318501254686 +-0.362358689308166559417401231258 -0.363484540581703208239616742503 0.197674395143985770495476117503 +-0.362358689308166559417401231258 0.363484540581703208239616742503 0.197674395143985770495476117503 +-0.362246412038803089483707253748 -0.496368354558944679943977007497 0.724497523903846696313735264994 +-0.362246412038803089483707253748 0.496368354558944679943977007497 0.724497523903846696313735264994 +-0.362128955125808726922542746252 -0.217996202409267425537109375 0.15440310537815093994140625 +-0.362128955125808726922542746252 0.217996202409267425537109375 0.15440310537815093994140625 +-0.362031158804893504754573996252 -0.538490539789199806897102007497 -0.0382304005324840545654296875 +-0.362031158804893504754573996252 0.538490539789199806897102007497 -0.0382304005324840545654296875 +-0.361802995204925537109375 -0.587778985500335693359375 0.723612010478973388671875 +-0.361802995204925537109375 0.587778985500335693359375 0.723612010478973388671875 +-0.3617999851703643798828125 -0.2628630101680755615234375 -0.894429028034210205078125 +-0.3617999851703643798828125 -0.262860000133514404296875 0.22360749542713165283203125 +-0.3617999851703643798828125 0.262860000133514404296875 0.22360749542713165283203125 +-0.3617999851703643798828125 0.2628630101680755615234375 -0.894429028034210205078125 +-0.361764013767242431640625 -0.463545012474060047491519753748 -0.119384399056434623020983565311 +-0.361764013767242431640625 0.463545012474060047491519753748 -0.119384399056434623020983565311 +-0.361710405349731478619190738755 -0.0425972014665603679328675923443 -0.165381598472595231497095369377 +-0.361710405349731478619190738755 0.0425972014665603679328675923443 -0.165381598472595231497095369377 +-0.361680196225643124652293636245 -0.7857526242733001708984375 -0.392784155905246734619140625 +-0.361680196225643124652293636245 0.7857526242733001708984375 -0.392784155905246734619140625 +-0.361656309664249386859324886245 -0.56737415492534637451171875 -0.519414597749710105212272992503 +-0.361656309664249386859324886245 0.56737415492534637451171875 -0.519414597749710105212272992503 +-0.361556795239448558465511496252 -0.127848053723573690243497935626 0.394248247146606500823651231258 +-0.361556795239448558465511496252 0.127848053723573690243497935626 0.394248247146606500823651231258 +-0.361524558067321755139289507497 -0.262659360468387614861995871252 0.723055905103683449475227007497 +-0.361524558067321755139289507497 0.262659360468387614861995871252 0.723055905103683449475227007497 +-0.361522802710533164294304242503 -0.262660038471221934930355246252 0.0530185483396053355842347798443 +-0.361522802710533164294304242503 0.262660038471221934930355246252 0.0530185483396053355842347798443 +-0.3613719940185546875 -0.0613634996116161346435546875 0.3400659859180450439453125 +-0.3613719940185546875 0.0613634996116161346435546875 0.3400659859180450439453125 +-0.361335790157318093029914507497 -0.262522405385971047131477007497 0.538997191190719537878806022491 +-0.361335790157318093029914507497 0.262522405385971047131477007497 0.538997191190719537878806022491 +-0.36128199100494384765625 -0.0606187999248504680305238423443 0.160625600814819358141960492503 +-0.36128199100494384765625 0.0606187999248504680305238423443 0.160625600814819358141960492503 +-0.361268046498298689428452235006 -0.179040397703647630178735994377 -0.374072059988975580413494981258 +-0.361268046498298689428452235006 0.179040397703647630178735994377 -0.374072059988975580413494981258 +-0.36121125519275665283203125 -0.300723753869533538818359375 -0.58445848524570465087890625 +-0.36121125519275665283203125 0.300723753869533538818359375 -0.58445848524570465087890625 +-0.361203247308731045794871761245 -0.706189370155334450451789507497 -0.305496792495250690802066628748 +-0.361203247308731045794871761245 0.706189370155334450451789507497 -0.305496792495250690802066628748 +-0.361148245632648468017578125 -0.59448601305484771728515625 -0.280460245907306671142578125 +-0.361148245632648468017578125 0.59448601305484771728515625 -0.280460245907306671142578125 +-0.361062002182006847039730246252 -0.0852083981037140003600427462516 -0.149577999114990228823884876874 +-0.361062002182006847039730246252 0.0852083981037140003600427462516 -0.149577999114990228823884876874 +-0.360943937301635708880809261245 -0.644961628317832880163962272491 0.59686122834682464599609375 +-0.360943937301635708880809261245 0.644961628317832880163962272491 0.59686122834682464599609375 +-0.360803288221359264031917746252 -0.398913893103599592748764735006 -0.114841099828481688072123745314 +-0.360803288221359264031917746252 0.398913893103599592748764735006 -0.114841099828481688072123745314 +-0.360685652494430575298878238755 -0.155136802047491084710628683752 0.518013614416122480932358485006 +-0.360685652494430575298878238755 0.155136802047491084710628683752 0.518013614416122480932358485006 +-0.360586160421371426654246761245 -0.470361104607582070080695757497 0.609293606877326920923110264994 +-0.360586160421371426654246761245 0.470361104607582070080695757497 0.609293606877326920923110264994 +-0.36044503748416900634765625 -0.261877503991127025262386496252 -0.0632411979138851193527059990629 +-0.36044503748416900634765625 0.261877503991127025262386496252 -0.0632411979138851193527059990629 +-0.36042499542236328125 -0.46087801456451416015625 -0.810977995395660400390625 +-0.36042499542236328125 0.46087801456451416015625 -0.810977995395660400390625 +-0.360313796997070279193309261245 -0.364093208312988247943309261245 -0.312425994873046841693309261245 +-0.360313796997070279193309261245 0.364093208312988247943309261245 -0.312425994873046841693309261245 +-0.36013551056385040283203125 -0.4979007244110107421875 -0.724497523903846696313735264994 +-0.36013551056385040283203125 0.4979007244110107421875 -0.724497523903846696313735264994 +-0.360108903050422701763721988755 -0.152602645754814164602564119377 0.222562354803085338250667746252 +-0.360108903050422701763721988755 0.152602645754814164602564119377 0.222562354803085338250667746252 +-0.359946441650390636102230246252 -0.0808168485760688837249432481258 0.257696101069450400622429242503 +-0.359946441650390636102230246252 0.0808168485760688837249432481258 0.257696101069450400622429242503 +-0.359754005074501004290965511245 -0.690341079235076926501335492503 0.341330237686634063720703125 +-0.359754005074501004290965511245 0.690341079235076926501335492503 0.341330237686634063720703125 +-0.359639994800090789794921875 -0.1502745039761066436767578125 -0.6407624781131744384765625 +-0.359639994800090789794921875 0.1502745039761066436767578125 -0.6407624781131744384765625 +-0.3595919907093048095703125 -0.3361589908599853515625 0.087696500122547149658203125 +-0.3595919907093048095703125 0.3361589908599853515625 0.087696500122547149658203125 +-0.359515213966369595599559261245 -0.162373191118240361996427623126 0.452088010311126664575454014994 +-0.359515213966369595599559261245 0.162373191118240361996427623126 0.452088010311126664575454014994 +-0.3595019876956939697265625 -0.099546499550342559814453125 -0.3329400122165679931640625 +-0.3595019876956939697265625 0.099546499550342559814453125 -0.3329400122165679931640625 +-0.3594749867916107177734375 -0.1929520070552825927734375 -0.2890450060367584228515625 +-0.3594749867916107177734375 0.1929520070552825927734375 -0.2890450060367584228515625 +-0.3594680130481719970703125 -0.840174019336700439453125 0.40606701374053955078125 +-0.3594680130481719970703125 0.840174019336700439453125 0.40606701374053955078125 +-0.359437608718872092516960492503 -0.106456005573272713404797684689 -0.706733608245849631579460492503 +-0.359437608718872092516960492503 0.106456005573272713404797684689 -0.706733608245849631579460492503 +-0.359398506581783294677734375 -0.46517698466777801513671875 -0.46577100455760955810546875 +-0.359398506581783294677734375 0.46517698466777801513671875 -0.46577100455760955810546875 +-0.359348011016845714227230246252 -0.690134382247924893505341970013 -0.185965597629547119140625 +-0.359348011016845714227230246252 0.690134382247924893505341970013 -0.185965597629547119140625 +-0.35929000377655029296875 -0.0332829989492893218994140625 -0.3461255133152008056640625 +-0.35929000377655029296875 0.0332829989492893218994140625 -0.3461255133152008056640625 +-0.3591130077838897705078125 -0.2860254943370819091796875 0.19805850088596343994140625 +-0.3591130077838897705078125 0.2860254943370819091796875 0.19805850088596343994140625 +-0.358975496888160716668636496252 -0.426401948928833041119190738755 -0.334392508864402804302784488755 +-0.358975496888160716668636496252 0.426401948928833041119190738755 -0.334392508864402804302784488755 +-0.358927106857299782483039507497 -0.485642498731613136975227007497 0.354008895158767655786391514994 +-0.358927106857299782483039507497 0.485642498731613136975227007497 0.354008895158767655786391514994 +-0.358926594257354736328125 -0.393970191478729248046875 -0.275607007741928089483707253748 +-0.358926594257354736328125 0.393970191478729248046875 -0.275607007741928089483707253748 +-0.35887800157070159912109375 -0.50423549115657806396484375 0.4236195087432861328125 +-0.35887800157070159912109375 0.50423549115657806396484375 0.4236195087432861328125 +-0.358862400054931640625 -0.1621716022491455078125 0.0701291978359222384353799384371 +-0.358862400054931640625 0.1621716022491455078125 0.0701291978359222384353799384371 +-0.3588471114635467529296875 -0.238108491897583013363615123126 0.130510349571704875604183371252 +-0.3588471114635467529296875 0.238108491897583013363615123126 0.130510349571704875604183371252 +-0.3588018119335174560546875 -0.366874885559081986841079014994 -0.476093089580535866467414507497 +-0.3588018119335174560546875 0.366874885559081986841079014994 -0.476093089580535866467414507497 +-0.358660411834716807977230246252 -0.147405195236206071340845369377 0.0981544017791748102386151231258 +-0.358660411834716807977230246252 0.147405195236206071340845369377 0.0981544017791748102386151231258 +-0.358622100949287425653011496252 -0.408586505055427540167301003748 0.717250478267669744347756477509 +-0.358622100949287425653011496252 0.408586505055427540167301003748 0.717250478267669744347756477509 +-0.3585214912891387939453125 -0.17911149561405181884765625 0.29896700382232666015625 +-0.3585214912891387939453125 0.17911149561405181884765625 0.29896700382232666015625 +-0.358461594581604037212940738755 -0.5957791805267333984375 -0.39566719532012939453125 +-0.358461594581604037212940738755 0.5957791805267333984375 -0.39566719532012939453125 +-0.358316409587860096319644753748 -0.260329198837280284539730246252 0.404769015312194835320980246252 +-0.358316409587860096319644753748 0.260329198837280284539730246252 0.404769015312194835320980246252 +-0.357885907590389240606754128748 -0.260016895830631256103515625 0.840719583630561761999899772491 +-0.357885907590389240606754128748 0.260016895830631256103515625 0.840719583630561761999899772491 +-0.357772803306579623150440738755 -0.6805183887481689453125 0.221117591857910161801115123126 +-0.357772803306579623150440738755 0.6805183887481689453125 0.221117591857910161801115123126 +-0.357769989967346213610710492503 0 -0.178885996341705322265625 +-0.357768797874450705798210492503 -0.4205815792083740234375 -0.5788896083831787109375 +-0.357768797874450705798210492503 0.4205815792083740234375 -0.5788896083831787109375 +-0.357768011093139659539730246252 0 0.715543222427368230675881477509 +-0.357667393982410430908203125 -0.761424058675765902393095529987 0.441369996964931454730418636245 +-0.357667393982410430908203125 0.761424058675765902393095529987 0.441369996964931454730418636245 +-0.357651007175445567742855246252 -0.1994040012359619140625 -0.438547790050506591796875 +-0.357651007175445567742855246252 0.1994040012359619140625 -0.438547790050506591796875 +-0.357551094889640819207698996252 -0.145135349035263067074552623126 -0.23150159418582916259765625 +-0.357551094889640819207698996252 0.145135349035263067074552623126 -0.23150159418582916259765625 +-0.357505857944488525390625 -0.259742595255374908447265625 -0.476679462194442737921207253748 +-0.357505857944488525390625 0.259742595255374908447265625 -0.476679462194442737921207253748 +-0.35737739503383636474609375 -0.200411546230316178762720369377 0.186055652797222137451171875 +-0.35737739503383636474609375 0.200411546230316178762720369377 0.186055652797222137451171875 +-0.357305634021759022100894753748 -0.1302379034459590911865234375 -0.527134418487548828125 +-0.357305634021759022100894753748 0.1302379034459590911865234375 -0.527134418487548828125 +-0.357265996932983442846420985006 -0.144635605812072770559595369377 -0.106964802742004400082365123126 +-0.357265996932983442846420985006 0.144635605812072770559595369377 -0.106964802742004400082365123126 +-0.357196944952011152807358485006 -0.418222752213478099481136496252 0 +-0.357196944952011152807358485006 0.418222752213478099481136496252 0 +-0.357177196443080879895148882497 -0.851580938696861244885383257497 -0.223011554032564146554662443123 +-0.357177196443080879895148882497 0.851580938696861244885383257497 -0.223011554032564146554662443123 +-0.357034289836883511615184261245 -0.572264683246612504419204014994 0.187189093232154823986945757497 +-0.357034289836883511615184261245 0.572264683246612504419204014994 0.187189093232154823986945757497 +-0.357007193565368696752670985006 -0.159906005859375005551115123126 -0.0835207998752593994140625 +-0.357007193565368696752670985006 0.159906005859375005551115123126 -0.0835207998752593994140625 +-0.356931161880493175164730246252 -0.769113132357597373278679242503 0.05971249751746654510498046875 +-0.356931161880493175164730246252 0.769113132357597373278679242503 0.05971249751746654510498046875 +-0.356795382499694835320980246252 -0.356933999061584461554019753748 0.324492609500884987561164507497 +-0.356795382499694835320980246252 0.356933999061584461554019753748 0.324492609500884987561164507497 +-0.356750011444091796875 -0.088045597076416015625 0.158042800426483165399105246252 +-0.356750011444091796875 0.088045597076416015625 0.158042800426483165399105246252 +-0.3566800057888031005859375 -0.09588800370693206787109375 0.3370234966278076171875 +-0.3566800057888031005859375 0.09588800370693206787109375 0.3370234966278076171875 +-0.356664800643920920641960492503 -0.0627664029598236083984375 0.713337612152099675988381477509 +-0.356664800643920920641960492503 0.0627664029598236083984375 0.713337612152099675988381477509 +-0.356599642336368538586555132497 -0.769957193732261679919304242503 -0.0500301515683531719536070170307 +-0.356599642336368538586555132497 0.769957193732261679919304242503 -0.0500301515683531719536070170307 +-0.356489241123199462890625 -0.527909201383590764855568977509 0.129333747923374181576505748126 +-0.356489241123199462890625 0.527909201383590764855568977509 0.129333747923374181576505748126 +-0.356403207778930697369190738755 -0.181594800949096690789730246252 0 +-0.356403207778930697369190738755 0.181594800949096690789730246252 0 +-0.3563959896564483642578125 -0.3414289951324462890625 0.86971700191497802734375 +-0.3563959896564483642578125 0.3414289951324462890625 0.86971700191497802734375 +-0.3563610017299652099609375 -0.33480548858642578125 -0.10446099936962127685546875 +-0.3563610017299652099609375 0.33480548858642578125 -0.10446099936962127685546875 +-0.356311798095703125 -0.45758701860904693603515625 -0.293523757159709963726612613755 +-0.356311798095703125 0.45758701860904693603515625 -0.293523757159709963726612613755 +-0.356272995471954345703125 -0.667499005794525146484375 -0.6538469791412353515625 +-0.356272995471954345703125 0.667499005794525146484375 -0.6538469791412353515625 +-0.356176686286926280633480246252 -0.303519150614738497662159488755 0.288988152146339438708366742503 +-0.356176686286926280633480246252 0.303519150614738497662159488755 0.288988152146339438708366742503 +-0.356156516075134266241519753748 -0.577622491121292047644431022491 -0.171770901978015894107088001874 +-0.356156516075134266241519753748 0.577622491121292047644431022491 -0.171770901978015894107088001874 +-0.355996882915496803967414507497 -0.0289085987955331781551482350778 0.602022415399551369397102007497 +-0.355996882915496803967414507497 0.0289085987955331781551482350778 0.602022415399551369397102007497 +-0.355797895789146445544304242503 -0.0592447467148303971717915317186 -0.269068962335586581158253238755 +-0.355797895789146445544304242503 0.0592447467148303971717915317186 -0.269068962335586581158253238755 +-0.355673709511756919177116742503 -0.517008608579635597912727007497 -0.645134407281875654760483485006 +-0.355673709511756919177116742503 0.517008608579635597912727007497 -0.645134407281875654760483485006 +-0.355671596527099620477230246252 -0.132240796089172357730134876874 0.126531195640563975945980246252 +-0.355671596527099620477230246252 0.132240796089172357730134876874 0.126531195640563975945980246252 +-0.355345988273620627673210492503 -0.128855204582214361019865123126 -0.130864405632019037417634876874 +-0.355345988273620627673210492503 0.128855204582214361019865123126 -0.130864405632019037417634876874 +-0.355295991897582985608039507497 -0.421384799480438221319644753748 -0.237064200639724720343082253748 +-0.355295991897582985608039507497 0.421384799480438221319644753748 -0.237064200639724720343082253748 +-0.355287243425846110955745871252 -0.599446359276771478796774772491 0.486760163307189908099559261245 +-0.355287243425846110955745871252 0.599446359276771478796774772491 0.486760163307189908099559261245 +-0.355262610316276594701889735006 -0.333156448602676402703792746252 -0.255529457330703757556022992503 +-0.355262610316276594701889735006 0.333156448602676402703792746252 -0.255529457330703757556022992503 +-0.355246087908744845318409488755 -0.305105334520339999127003238755 -0.288462910056114241186264735006 +-0.355246087908744845318409488755 0.305105334520339999127003238755 -0.288462910056114241186264735006 +-0.355178216099739096911491742503 -0.483269804716110251696647992503 0.250597092509269703253238503748 +-0.355178216099739096911491742503 0.483269804716110251696647992503 0.250597092509269703253238503748 +-0.355128160119056734966846988755 -0.530550816655159018786491742503 -0.122064153105020528622404185626 +-0.355128160119056734966846988755 0.530550816655159018786491742503 -0.122064153105020528622404185626 +-0.354995301365852389263721988755 -0.385340440273284956518295985006 0.167305046319961570056022992503 +-0.354995301365852389263721988755 0.385340440273284956518295985006 0.167305046319961570056022992503 +-0.3548170030117034912109375 -0.73478901386260986328125 0.57809197902679443359375 +-0.3548170030117034912109375 0.73478901386260986328125 0.57809197902679443359375 +-0.354756808280944857525440738755 -0.0690119981765747042556924384371 -0.171420395374298095703125 +-0.354756808280944857525440738755 0.0690119981765747042556924384371 -0.171420395374298095703125 +-0.354710304737091031146434261245 -0.186481404304504383429019753748 -0.573938411474227860864516514994 +-0.354710304737091031146434261245 0.186481404304504383429019753748 -0.573938411474227860864516514994 +-0.354705190658569369244190738755 -0.178789198398590087890625 0.0471031993627548245529013115629 +-0.354705190658569369244190738755 0.178789198398590087890625 0.0471031993627548245529013115629 +-0.354703485965728759765625 -0.30781948566436767578125 0.1715590059757232666015625 +-0.354703485965728759765625 0.30781948566436767578125 0.1715590059757232666015625 +-0.354597048461437192035106136245 -0.757980692386627130652243522491 -0.1490840502083301544189453125 +-0.354597048461437192035106136245 0.757980692386627130652243522491 -0.1490840502083301544189453125 +-0.354514348506927479132144753748 -0.840520095825195268091079014994 0.265226709842681873663394753748 +-0.354514348506927479132144753748 0.840520095825195268091079014994 0.265226709842681873663394753748 +-0.354274642467498790399105246252 -0.111294447630643847380049749063 0.254170793294906605108707253748 +-0.354274642467498790399105246252 0.111294447630643847380049749063 0.254170793294906605108707253748 +-0.354108293354511272088558371252 -0.752045157551765375281149772491 0.1775845475494861602783203125 +-0.354108293354511272088558371252 0.752045157551765375281149772491 0.1775845475494861602783203125 +-0.354105386137962385717514735006 -0.0732902526855468833266726846887 -0.414412337541580244604233485006 +-0.354105386137962385717514735006 0.0732902526855468833266726846887 -0.414412337541580244604233485006 +-0.3540717065334320068359375 -0.0366066008806228623817524692186 0.8266157805919647216796875 +-0.3540717065334320068359375 0.0366066008806228623817524692186 0.8266157805919647216796875 +-0.35403358936309814453125 -0.388987207412719748766960492503 0.602784013748169034130341970013 +-0.35403358936309814453125 0.388987207412719748766960492503 0.602784013748169034130341970013 +-0.353998380899429310186832253748 -0.0838271021842956487457598768742 0.598045688867568925317641514994 +-0.353998380899429310186832253748 0.0838271021842956487457598768742 0.598045688867568925317641514994 +-0.3539907932281494140625 -0.177581596374511735403345369377 -0.0561724007129669189453125 +-0.3539907932281494140625 0.177581596374511735403345369377 -0.0561724007129669189453125 +-0.35391600430011749267578125 -0.257131509482860565185546875 0.609201729297637939453125 +-0.35391600430011749267578125 0.257131509482860565185546875 0.609201729297637939453125 +-0.353817889094352744372429242503 -0.257061597704887401238948996252 0.105981749296188351716629938437 +-0.353817889094352744372429242503 0.257061597704887401238948996252 0.105981749296188351716629938437 +-0.3535540103912353515625 -0.353552997112274169921875 0 +-0.3535540103912353515625 0.353552997112274169921875 0 +-0.353529596328735318255809261245 -0.0798420041799545315841513115629 -0.478165197372436512335269753748 +-0.353529596328735318255809261245 0.0798420041799545315841513115629 -0.478165197372436512335269753748 +-0.353518795967102061883480246252 -0.446095812320709217413394753748 0.18979740142822265625 +-0.353518795967102061883480246252 0.446095812320709217413394753748 0.18979740142822265625 +-0.353510999679565396380809261245 -0.338705992698669411389289507497 -0.346855187416076626849559261245 +-0.353510999679565396380809261245 0.338705992698669411389289507497 -0.346855187416076626849559261245 +-0.35344159603118896484375 -0.517924785614013671875 0.496822404861450239721420985006 +-0.35344159603118896484375 0.517924785614013671875 0.496822404861450239721420985006 +-0.353371489048004139288394753748 -0.705456000566482610558693977509 -0.432965692877769481317073996252 +-0.353371489048004139288394753748 0.705456000566482610558693977509 -0.432965692877769481317073996252 +-0.353363204002380415502670985006 -0.125145602226257340872095369377 0.7067344188690185546875 +-0.353363204002380415502670985006 0.125145602226257340872095369377 0.7067344188690185546875 +-0.353245592117309603619190738755 -0.0164992004632949842979350307814 0.186936402320861838610710492503 +-0.353245592117309603619190738755 0.0164992004632949842979350307814 0.186936402320861838610710492503 +-0.3532154858112335205078125 -0.16296349465847015380859375 -0.314136505126953125 +-0.3532154858112335205078125 0.16296349465847015380859375 -0.314136505126953125 +-0.35309565067291259765625 -0.210792151093482982293636496252 -0.182729700207710260562166126874 +-0.35309565067291259765625 0.210792151093482982293636496252 -0.182729700207710260562166126874 +-0.353092002868652388158920985006 -0.02630279958248138427734375 -0.186102402210235606805355246252 +-0.353092002868652388158920985006 0.02630279958248138427734375 -0.186102402210235606805355246252 +-0.352897053956985506939503238755 -0.359422257542610201763721988755 -0.220860742032527951339559990629 +-0.352897053956985506939503238755 0.359422257542610201763721988755 -0.220860742032527951339559990629 +-0.352671611309051502569644753748 -0.485410201549530018194644753748 0 +-0.352671611309051502569644753748 0.485410201549530018194644753748 0 +-0.352462553977966330798210492503 -0.417258059978485140728565738755 0.0645424984395503997802734375 +-0.352462553977966330798210492503 0.417258059978485140728565738755 0.0645424984395503997802734375 +-0.352441060543060291632144753748 -0.309542348980903658794971988755 0.449965763092041004522769753748 +-0.352441060543060291632144753748 0.309542348980903658794971988755 0.449965763092041004522769753748 +-0.352399510145187389031917746252 -0.6827823221683502197265625 0.468639904260635398181022992503 +-0.352399510145187389031917746252 0.6827823221683502197265625 0.468639904260635398181022992503 +-0.352397257089614890368522992503 -0.233085599541664134637386496252 -0.154878298938274400198267244377 +-0.352397257089614890368522992503 0.233085599541664134637386496252 -0.154878298938274400198267244377 +-0.352372956275939952508480246252 0 -0.279881107807159412725894753748 +-0.352366653084754954949886496252 -0.278632807731628406866519753748 0.0264897007495164885093608120314 +-0.352366653084754954949886496252 0.278632807731628406866519753748 0.0264897007495164885093608120314 +-0.3523463904857635498046875 -0.427644008398055996966746761245 0.427753198146820057257144753748 +-0.3523463904857635498046875 0.427644008398055996966746761245 0.427753198146820057257144753748 +-0.352310213446617170873764735006 -0.165689702332019822561548494377 0.388489761948585532458366742503 +-0.352310213446617170873764735006 0.165689702332019822561548494377 0.388489761948585532458366742503 +-0.352032744884490989001335492503 -0.118196555972099312525891434689 -0.254170337319374106677116742503 +-0.352032744884490989001335492503 0.118196555972099312525891434689 -0.254170337319374106677116742503 +-0.352009463310241688116519753748 -0.400043794512748740466179242503 -0.372228360176086459087940738755 +-0.352009463310241688116519753748 0.400043794512748740466179242503 -0.372228360176086459087940738755 +-0.35192339122295379638671875 -0.278657993674278292584034488755 -0.031618349254131317138671875 +-0.35192339122295379638671875 0.278657993674278292584034488755 -0.031618349254131317138671875 +-0.351700806617736838610710492503 -0.617468786239624090050881477509 0.367476010322570822985710492503 +-0.351700806617736838610710492503 0.617468786239624090050881477509 0.367476010322570822985710492503 +-0.35163319110870361328125 -0.112126803398132329769865123126 -0.154212796688079856188835492503 +-0.35163319110870361328125 0.112126803398132329769865123126 -0.154212796688079856188835492503 +-0.351542705297470114977897992503 -0.107168398797512054443359375 0.821542489528656050268295985006 +-0.351542705297470114977897992503 0.107168398797512054443359375 0.821542489528656050268295985006 +-0.351446008682251009869190738755 -0.04415319859981536865234375 0.185839200019836447985710492503 +-0.351446008682251009869190738755 0.04415319859981536865234375 0.185839200019836447985710492503 +-0.351326507329940751489516514994 -0.312879699468612659796207253748 0.518339508771896384509147992503 +-0.351326507329940751489516514994 0.312879699468612659796207253748 0.518339508771896384509147992503 +-0.351193647086620319708316628748 -0.325276301801204648089793636245 0.702394944429397538598891514994 +-0.351193647086620319708316628748 0.325276301801204648089793636245 0.702394944429397538598891514994 +-0.351059211790561653820930132497 -0.67571412026882171630859375 -0.56803826987743377685546875 +-0.351059211790561653820930132497 0.67571412026882171630859375 -0.56803826987743377685546875 +-0.351007238030433710296307481258 -0.144575196504592912161157869377 -0.397984933853149425164730246252 +-0.351007238030433710296307481258 0.144575196504592912161157869377 -0.397984933853149425164730246252 +-0.350961095094680763928352007497 -0.491430097818374600482371761245 -0.354008895158767655786391514994 +-0.350961095094680763928352007497 0.491430097818374600482371761245 -0.354008895158767655786391514994 +-0.350928592681884810033920985006 0 -0.423496153950691234246761496252 +-0.350523552298545870709034488755 -0.41247309744358062744140625 0.359860154986381519659488503748 +-0.350523552298545870709034488755 0.41247309744358062744140625 0.359860154986381519659488503748 +-0.350519990921020541119190738755 -0.632134389877319402550881477509 -0.342843198776245139391960492503 +-0.350519990921020541119190738755 0.632134389877319402550881477509 -0.342843198776245139391960492503 +-0.350460760295391082763671875 -0.6131400167942047119140625 0.252461247146129608154296875 +-0.350460760295391082763671875 0.6131400167942047119140625 0.252461247146129608154296875 +-0.350430855154991172106804242503 -0.416864243149757396356136496252 -0.0769565470516681698898153740629 +-0.350430855154991172106804242503 0.416864243149757396356136496252 -0.0769565470516681698898153740629 +-0.350384402275085493627670985006 -0.115970003604888918791182561563 0.154213201999664317742855246252 +-0.350384402275085493627670985006 0.115970003604888918791182561563 0.154213201999664317742855246252 +-0.350350785255432117804019753748 -0.480901801586151089740184261245 0.0773831963539123451889523153113 +-0.350350785255432117804019753748 0.480901801586151089740184261245 0.0773831963539123451889523153113 +-0.350271901488304171490284488755 -0.181507055461406718865902121252 0.216482846438884740658536998126 +-0.350271901488304171490284488755 0.181507055461406718865902121252 0.216482846438884740658536998126 +-0.3501918017864227294921875 -0.324947002530097950323551003748 -0.511639797687530539782585492503 +-0.3501918017864227294921875 0.324947002530097950323551003748 -0.511639797687530539782585492503 +-0.350157000124454498291015625 -0.62276852130889892578125 -0.2281432449817657470703125 +-0.350157000124454498291015625 0.62276852130889892578125 -0.2281432449817657470703125 +-0.350093084573745716436832253748 -0.517217403650283791272102007497 0.316102507710456837042301003748 +-0.350093084573745716436832253748 0.517217403650283791272102007497 0.316102507710456837042301003748 +-0.349999999999999977795539507497 0 0 +-0.34999789297580718994140625 -0.138756795227527596203742632497 0.590125906467437677527243522491 +-0.34999789297580718994140625 0.138756795227527596203742632497 0.590125906467437677527243522491 +-0.349972200393676768914730246252 0 -0.487359595298767045434829014994 +-0.349862518906593311651676003748 -0.487132096290588401110710492503 -0.250596453249454509393245871252 +-0.349862518906593311651676003748 0.487132096290588401110710492503 -0.250596453249454509393245871252 +-0.349801351130008708611995871252 -0.528944790363311767578125 -0.566000553965568475867087272491 +-0.349801351130008708611995871252 0.528944790363311767578125 -0.566000553965568475867087272491 +-0.34956300258636474609375 -0.3526175022125244140625 0.0588794983923435211181640625 +-0.34956300258636474609375 0.3526175022125244140625 0.0588794983923435211181640625 +-0.349499988555908247533920985006 -0.567172813415527388158920985006 -0.442904806137084994244190738755 +-0.349499988555908247533920985006 0.567172813415527388158920985006 -0.442904806137084994244190738755 +-0.349483492970466602667301003748 -0.253913408517837557720753238755 -0.1260530948638916015625 +-0.349483492970466602667301003748 0.253913408517837557720753238755 -0.1260530948638916015625 +-0.3493550121784210205078125 -0.13077299296855926513671875 0.332940995693206787109375 +-0.3493550121784210205078125 0.13077299296855926513671875 0.332940995693206787109375 +-0.349242009222507476806640625 0 -0.6637245118618011474609375 +-0.349102950096130348889289507497 -0.0142362497746944417081893519139 -0.0206031005829572649856729071871 +-0.349102950096130348889289507497 0.0142362497746944417081893519139 -0.0206031005829572649856729071871 +-0.349100983142852760998664507497 -0.481809604167938221319644753748 -0.0773831963539123451889523153113 +-0.349100983142852760998664507497 0.481809604167938221319644753748 -0.0773831963539123451889523153113 +-0.349064102768898043560596988755 -0.192209404706954967156917746252 -0.209069100022315990106136496252 +-0.349064102768898043560596988755 0.192209404706954967156917746252 -0.209069100022315990106136496252 +-0.349015557765960715563835492503 -0.199975095689296722412109375 0.510586035251617498254006477509 +-0.349015557765960715563835492503 0.199975095689296722412109375 0.510586035251617498254006477509 +-0.348974990844726551397769753748 -0.302521812915801990850894753748 0.383010005950927712170539507497 +-0.348974990844726551397769753748 0.302521812915801990850894753748 0.383010005950927712170539507497 +-0.348920953273773148950454014994 -0.0274603012949228252048694542964 0 +-0.348920953273773148950454014994 0.0274603012949228252048694542964 0 +-0.348835545778274525030582253748 -0.0144546501338481889198384067186 0.024592049419879913330078125 +-0.348835545778274525030582253748 0.0144546501338481889198384067186 0.024592049419879913330078125 +-0.348736810684204145971420985006 -0.194494795799255382195980246252 0.0235436007380485541606862653907 +-0.348736810684204145971420985006 0.194494795799255382195980246252 0.0235436007380485541606862653907 +-0.34862959384918212890625 -0.194081997871398931332365123126 -0.02809999883174896240234375 +-0.34862959384918212890625 0.194081997871398931332365123126 -0.02809999883174896240234375 +-0.348596513271331787109375 -0.3281399905681610107421875 0.14423899352550506591796875 +-0.348596513271331787109375 0.3281399905681610107421875 0.14423899352550506591796875 +-0.348571205139160178454460492503 -0.212412810325622564144865123126 -0.688025617599487326891960492503 +-0.348571205139160178454460492503 0.212412810325622564144865123126 -0.688025617599487326891960492503 +-0.348536396026611294818309261245 -0.447202205657958984375 -0.1962971985340118408203125 +-0.348536396026611294818309261245 0.447202205657958984375 -0.1962971985340118408203125 +-0.348497249186038970947265625 -0.43776373565196990966796875 0.49941225349903106689453125 +-0.348497249186038970947265625 0.43776373565196990966796875 0.49941225349903106689453125 +-0.348459212481975533215461382497 -0.339663393795490264892578125 -0.696926075220107965613181022491 +-0.348459212481975533215461382497 0.339663393795490264892578125 -0.696926075220107965613181022491 +-0.348447597026824984478565738755 -0.299105089902877818719417746252 -0.774028819799423284386818977509 +-0.348447597026824984478565738755 0.299105089902877818719417746252 -0.774028819799423284386818977509 +-0.348429501056671142578125 -0.253145992755889892578125 0.25399601459503173828125 +-0.348429501056671142578125 0.253145992755889892578125 0.25399601459503173828125 +-0.348425546288490317614616742503 -0.253143002092838298455745871252 0.342079105973243757787827235006 +-0.348425546288490317614616742503 0.253143002092838298455745871252 0.342079105973243757787827235006 +-0.348389813303947470934929242503 -0.281161087751388594213608485006 -0.319488942623138427734375 +-0.348389813303947470934929242503 0.281161087751388594213608485006 -0.319488942623138427734375 +-0.34829623997211456298828125 -0.43084050714969635009765625 -0.50553600490093231201171875 +-0.34829623997211456298828125 0.43084050714969635009765625 -0.50553600490093231201171875 +-0.348212164640426646844417746252 -0.383369258046150240826221988755 -0.185138247907161740402059990629 +-0.348212164640426646844417746252 0.383369258046150240826221988755 -0.185138247907161740402059990629 +-0.348185992240905795025440738755 -0.173553204536437993832365123126 0.0929823994636535672286825615629 +-0.348185992240905795025440738755 0.173553204536437993832365123126 0.0929823994636535672286825615629 +-0.348115217685699473992855246252 -0.203521800041198713815404630623 0.444291007518768321649105246252 +-0.348115217685699473992855246252 0.203521800041198713815404630623 0.444291007518768321649105246252 +-0.347974540293216672015574886245 -0.821682569384574845727797764994 -0.32596211135387420654296875 +-0.347974540293216672015574886245 0.821682569384574845727797764994 -0.32596211135387420654296875 +-0.34796559810638427734375 -0.0718371987342834444900674384371 0.183737599849700949938835492503 +-0.34796559810638427734375 0.0718371987342834444900674384371 0.183737599849700949938835492503 +-0.347883200645446810650440738755 -0.186752796173095703125 0.695773601531982421875 +-0.347883200645446810650440738755 0.186752796173095703125 0.695773601531982421875 +-0.3478510081768035888671875 -0.3522349894046783447265625 -0.070215500891208648681640625 +-0.3478510081768035888671875 0.3522349894046783447265625 -0.070215500891208648681640625 +-0.347774845361709605828792746252 0 0.285574498772621143682926003748 +-0.3476519882678985595703125 -0.0663959980010986328125 -0.35317099094390869140625 +-0.3476519882678985595703125 0.0663959980010986328125 -0.35317099094390869140625 +-0.347562256455421436651676003748 0 -0.0412366487085819230506977817186 +-0.347407758235931396484375 -0.73599036037921905517578125 -0.245206288993358612060546875 +-0.347407758235931396484375 0.73599036037921905517578125 -0.245206288993358612060546875 +-0.3473972976207733154296875 -0.119929504394531247224442438437 -0.821542489528656050268295985006 +-0.3473972976207733154296875 0.119929504394531247224442438437 -0.821542489528656050268295985006 +-0.34726798534393310546875 -0.93513000011444091796875 0.0702629983425140380859375 +-0.34726798534393310546875 0.93513000011444091796875 0.0702629983425140380859375 +-0.3472492396831512451171875 -0.274915346503257773669304242503 0.079620301723480224609375 +-0.3472492396831512451171875 0.274915346503257773669304242503 0.079620301723480224609375 +-0.346908986568450927734375 -0.936049997806549072265625 -0.058866001665592193603515625 +-0.346908986568450927734375 0.936049997806549072265625 -0.058866001665592193603515625 +-0.346898648142814625128238503748 -0.0416769489645957905143980326557 -0.0206002999097108820125701100778 +-0.346898648142814625128238503748 0.0416769489645957905143980326557 -0.0206002999097108820125701100778 +-0.3467989861965179443359375 -0.21117900311946868896484375 0.29177701473236083984375 +-0.3467989861965179443359375 0.21117900311946868896484375 0.29177701473236083984375 +-0.346723604202270552221420985006 -0.0524800002574920682052450615629 -0.192428004741668712274105246252 +-0.346723604202270552221420985006 0.0524800002574920682052450615629 -0.192428004741668712274105246252 +-0.346610257029533352923778011245 -0.0419139005243778228759765625 0.02458749897778034210205078125 +-0.346610257029533352923778011245 0.0419139005243778228759765625 0.02458749897778034210205078125 +-0.346596738696098360943409488755 -0.03700844943523406982421875 0.284606999158859286236378238755 +-0.346596738696098360943409488755 0.03700844943523406982421875 0.284606999158859286236378238755 +-0.346572893857955921514957253748 -0.142547406256198883056640625 0.2491334974765777587890625 +-0.346572893857955921514957253748 0.142547406256198883056640625 0.2491334974765777587890625 +-0.346526601910591092181590511245 0 0.0491875983774661962311114393742 +-0.3465135097503662109375 -0.177543903887271897756860994377 0.811422890424728371350227007497 +-0.3465135097503662109375 0.177543903887271897756860994377 0.811422890424728371350227007497 +-0.346416348218917813372996761245 -0.0283993508666753741165322821871 -0.0411005005240440354774555942186 +-0.346416348218917813372996761245 0.0283993508666753741165322821871 -0.0411005005240440354774555942186 +-0.346314406394958529400440738755 -0.158938002586364757195980246252 0.121676397323608409539730246252 +-0.346314406394958529400440738755 0.158938002586364757195980246252 0.121676397323608409539730246252 +-0.346180009841918989721420985006 -0.0948907971382141196547976846887 -0.176507997512817399465845369377 +-0.346180009841918989721420985006 0.0948907971382141196547976846887 -0.176507997512817399465845369377 +-0.345782560110092174188167746252 -0.168792148679494852236970814374 -0.757921212911605857165397992503 +-0.345782560110092174188167746252 0.168792148679494852236970814374 -0.757921212911605857165397992503 +-0.345691156387329057153579014994 -0.0547512009739875779579243442186 0 +-0.345691156387329057153579014994 0.0547512009739875779579243442186 0 +-0.345350256562232948986945757497 -0.0288127005100250223323943288278 0.04902064800262451171875 +-0.345350256562232948986945757497 0.0288127005100250223323943288278 0.04902064800262451171875 +-0.345159649848938043792401231258 -0.406386184692382856908920985006 0.134962851554155355282560435626 +-0.345159649848938043792401231258 0.406386184692382856908920985006 0.134962851554155355282560435626 +-0.345138490200042724609375 -0.524848794937133766858039507497 -0.308890393376350380627570757497 +-0.345138490200042724609375 0.524848794937133766858039507497 -0.308890393376350380627570757497 +-0.345109936594963084832698996252 -0.0297188993543386452411692033593 -0.287255707383155811651676003748 +-0.345109936594963084832698996252 0.0297188993543386452411692033593 -0.287255707383155811651676003748 +-0.345104992389678955078125 -0.276225507259368896484375 -0.23367099463939666748046875 +-0.345104992389678955078125 0.276225507259368896484375 -0.23367099463939666748046875 +-0.345059940218925442767528011245 -0.0632738031446933718582315009371 -0.882853072881698563989516514994 +-0.345059940218925442767528011245 0.0632738031446933718582315009371 -0.882853072881698563989516514994 +-0.344925753772258758544921875 -0.250602744519710540771484375 -0.61702872812747955322265625 +-0.344925753772258758544921875 0.250602744519710540771484375 -0.61702872812747955322265625 +-0.344923496246337890625 -0.1320745050907135009765625 -0.3370225131511688232421875 +-0.344923496246337890625 0.1320745050907135009765625 -0.3370225131511688232421875 +-0.344886294007301363873096988755 -0.821683788299560569079460492503 0.1260530948638916015625 +-0.344886294007301363873096988755 0.821683788299560569079460492503 0.1260530948638916015625 +-0.34488201141357421875 0 -0.3620170056819915771484375 +-0.344865596294403053967414507497 -0.311552989482879627569644753748 -0.379476606845855712890625 +-0.344865596294403053967414507497 0.311552989482879627569644753748 -0.379476606845855712890625 +-0.34483994543552398681640625 -0.0892732501029968317229901231258 -0.274982857704162586554019753748 +-0.34483994543552398681640625 0.0892732501029968317229901231258 -0.274982857704162586554019753748 +-0.344721603393554731908920985006 -0.170128798484802251644865123126 -0.110558402538299571649105246252 +-0.344721603393554731908920985006 0.170128798484802251644865123126 -0.110558402538299571649105246252 +-0.344720694422721851690738503748 -0.824619573354721135949318977509 -0.105687899887561803646818248126 +-0.344720694422721851690738503748 0.824619573354721135949318977509 -0.105687899887561803646818248126 +-0.344701355695724520611378238755 -0.2278313934803009033203125 0.178252650797367101498380748126 +-0.344701355695724520611378238755 0.2278313934803009033203125 0.178252650797367101498380748126 +-0.344662404060363802837940738755 -0.190488398075103759765625 0.0701572000980377197265625 +-0.344662404060363802837940738755 0.190488398075103759765625 0.0701572000980377197265625 +-0.34463475644588470458984375 -0.273364198207855235711605246252 -0.0948618002235889490325604356258 +-0.34463475644588470458984375 0.273364198207855235711605246252 -0.0948618002235889490325604356258 +-0.3446238040924072265625 -0.159309607744216902291967130623 -0.464602196216583218646434261245 +-0.3446238040924072265625 0.159309607744216902291967130623 -0.464602196216583218646434261245 +-0.34460985660552978515625 -0.217189045250415796450838001874 -0.506530067324638344494758257497 +-0.34460985660552978515625 0.217189045250415796450838001874 -0.506530067324638344494758257497 +-0.3445456027984619140625 0 -0.203194808959960948602230246252 +-0.344415593147277820929019753748 -0.831491124629974431847756477509 0 +-0.344415593147277820929019753748 0.831491124629974431847756477509 0 +-0.344183695316314652856704014994 -0.0142369499430060383188267891796 -0.0619265519082546206375283759371 +-0.344183695316314652856704014994 0.0142369499430060383188267891796 -0.0619265519082546206375283759371 +-0.344139593839645374639957253748 -0.192282292246818531378238503748 0.5784421861171722412109375 +-0.344139593839645374639957253748 0.192282292246818531378238503748 0.5784421861171722412109375 +-0.3440945148468017578125 -0.24999849498271942138671875 -0.262867987155914306640625 +-0.3440945148468017578125 0.24999849498271942138671875 -0.262867987155914306640625 +-0.344082203507423356469985264994 -0.463987296819686867443977007497 -0.395377498865127519067641514994 +-0.344082203507423356469985264994 0.463987296819686867443977007497 -0.395377498865127519067641514994 +-0.344080084562301657946647992503 -0.508808931708335854260383257497 0.212655298411846160888671875 +-0.344080084562301657946647992503 0.508808931708335854260383257497 0.212655298411846160888671875 +-0.344009590148925792352230246252 -0.371368002891540538445980246252 -0.619470405578613325658920985006 +-0.344009590148925792352230246252 0.371368002891540538445980246252 -0.619470405578613325658920985006 +-0.3439874947071075439453125 -0.3007495105266571044921875 -0.2030330002307891845703125 +-0.3439874947071075439453125 0.3007495105266571044921875 -0.2030330002307891845703125 +-0.343924337625503562243522992503 -0.0227155504748225225974955776564 0.428602889180183466155682481258 +-0.343924337625503562243522992503 0.0227155504748225225974955776564 0.428602889180183466155682481258 +-0.343900647759437572137386496252 -0.72082208096981048583984375 0.290943953394889820440738503748 +-0.343900647759437572137386496252 0.72082208096981048583984375 0.290943953394889820440738503748 +-0.343894489109516143798828125 -0.311693251132965087890625 0.589137732982635498046875 +-0.343894489109516143798828125 0.311693251132965087890625 0.589137732982635498046875 +-0.343879786133766185418636496252 -0.249842454493045817986995871252 -0.349035498499870311395198996252 +-0.343879786133766185418636496252 0.249842454493045817986995871252 -0.349035498499870311395198996252 +-0.3438144028186798095703125 -0.674445587396621748510483485006 -0.486738914251327536852897992503 +-0.3438144028186798095703125 0.674445587396621748510483485006 -0.486738914251327536852897992503 +-0.343712845444679226947215511245 -0.55839003622531890869140625 0.68743140995502471923828125 +-0.343712845444679226947215511245 0.55839003622531890869140625 0.68743140995502471923828125 +-0.343709985911846149786441628748 -0.249719859659671777896150501874 -0.849707576632499628210837272491 +-0.343709985911846149786441628748 0.249719859659671777896150501874 -0.849707576632499628210837272491 +-0.343443107604980424341079014994 -0.607973819971084572522102007497 0.0491385996341705266754473768742 +-0.343443107604980424341079014994 0.607973819971084572522102007497 0.0491385996341705266754473768742 +-0.343425607681274447369190738755 -0.154690802097320556640625 -0.134645605087280267886384876874 +-0.343425607681274447369190738755 0.154690802097320556640625 -0.134645605087280267886384876874 +-0.343390506505966197625667746252 -0.06819570064544677734375 0.282723310589790333136051003748 +-0.343390506505966197625667746252 0.06819570064544677734375 0.282723310589790333136051003748 +-0.343378099799156177862613503748 -0.371239057183265719341846988755 -0.40837873518466949462890625 +-0.343378099799156177862613503748 0.371239057183265719341846988755 -0.40837873518466949462890625 +-0.343280848860740672723323996252 -0.33860035240650177001953125 0.264590145647525809557976117503 +-0.343280848860740672723323996252 0.33860035240650177001953125 0.264590145647525809557976117503 +-0.343213212490081798211605246252 -0.172624947130680078677400501874 -0.234319040179252618960603626874 +-0.343213212490081798211605246252 0.172624947130680078677400501874 -0.234319040179252618960603626874 +-0.343180811405181918072315738755 -0.470243704319000255242855246252 0.686366075277328513415397992503 +-0.343180811405181918072315738755 0.470243704319000255242855246252 0.686366075277328513415397992503 +-0.343045839667320218158153011245 -0.0558638505637645693679971259371 -0.0412152994424104662796182196871 +-0.343045839667320218158153011245 0.0558638505637645693679971259371 -0.0412152994424104662796182196871 +-0.3430329859256744384765625 -0.414267003536224365234375 0.84303700923919677734375 +-0.3430329859256744384765625 0.414267003536224365234375 0.84303700923919677734375 +-0.343012607097625710217414507497 -0.608807492256164484167868522491 -0.0411795999854803057571572821871 +-0.343012607097625710217414507497 0.608807492256164484167868522491 -0.0411795999854803057571572821871 +-0.342908406257629416735710492503 -0.0989287972450256375411825615629 0.180629599094390885793970369377 +-0.342908406257629416735710492503 0.0989287972450256375411825615629 0.180629599094390885793970369377 +-0.342850890755653392449886496252 0 -0.777787408232688881604133257497 +-0.342833209037780806127670985006 -0.188365602493286155016960492503 -0.0835691988468170166015625 +-0.342833209037780806127670985006 0.188365602493286155016960492503 -0.0835691988468170166015625 +-0.342644396424293506964176003748 -0.744397222995758056640625 -0.37211130559444427490234375 +-0.342644396424293506964176003748 0.744397222995758056640625 -0.37211130559444427490234375 +-0.3425669968128204345703125 -0.922681987285614013671875 -0.1769340038299560546875 +-0.3425669968128204345703125 0.922681987285614013671875 -0.1769340038299560546875 +-0.342503708600997880395766514994 -0.06904520094394683837890625 -0.0205897999927401528785786410936 +-0.342503708600997880395766514994 0.06904520094394683837890625 -0.0205897999927401528785786410936 +-0.3424097597599029541015625 -0.526303020119667008813735264994 0.572940805554389975817741742503 +-0.3424097597599029541015625 0.526303020119667008813735264994 0.572940805554389975817741742503 +-0.342403745651245094983039507497 -0.4378341138362884521484375 -0.770429095625877358166633257497 +-0.342403745651245094983039507497 0.4378341138362884521484375 -0.770429095625877358166633257497 +-0.342314702272415116723891514994 -0.0467186979949474334716796875 -0.608800482749938920434829014994 +-0.342314702272415116723891514994 0.0467186979949474334716796875 -0.608800482749938920434829014994 +-0.342190408706665061266960492503 -0.143289601802825933285490123126 0.149578797817230241262720369377 +-0.342190408706665061266960492503 0.143289601802825933285490123126 0.149578797817230241262720369377 +-0.3421860039234161376953125 -0.19833500683307647705078125 -0.918461978435516357421875 +-0.3421860039234161376953125 0.19833500683307647705078125 -0.918461978435516357421875 +-0.342183136940002463610710492503 -0.292251160740852389263721988755 0 +-0.342183136940002463610710492503 0.292251160740852389263721988755 0 +-0.342173990607261613305922764994 -0.0693783976137637981018713162484 0.0245692998170852633377236884371 +-0.342173990607261613305922764994 0.0693783976137637981018713162484 0.0245692998170852633377236884371 +-0.342160785198211636615184261245 -0.468121182918548539575454014994 0.154235404729843122995092130623 +-0.342160785198211636615184261245 0.468121182918548539575454014994 0.154235404729843122995092130623 +-0.34195385873317718505859375 -0.0424168508499860735794229071871 -0.0613872006535530062576455634371 +-0.34195385873317718505859375 0.0424168508499860735794229071871 -0.0613872006535530062576455634371 +-0.341951203346252452508480246252 -0.053367197513580322265625 -0.721263217926025435033920985006 +-0.341951203346252452508480246252 0.053367197513580322265625 -0.721263217926025435033920985006 +-0.341946887969970692022769753748 -0.611016279458999611584602007497 0.5654474794864654541015625 +-0.341946887969970692022769753748 0.611016279458999611584602007497 0.5654474794864654541015625 +-0.341919207572936978412059261245 -0.0563514024019241277496661268742 0.0491508506238460540771484375 +-0.341919207572936978412059261245 0.0563514024019241277496661268742 0.0491508506238460540771484375 +-0.341888415813446033819644753748 -0.393766200542449928967414507497 0.2967503964900970458984375 +-0.341888415813446033819644753748 0.393766200542449928967414507497 0.2967503964900970458984375 +-0.341829606890678372455028011245 -0.0144553503021597855304758439843 0.073781050741672515869140625 +-0.341829606890678372455028011245 0.0144553503021597855304758439843 0.073781050741672515869140625 +-0.3418065011501312255859375 -0.248334762454032909051448996252 0.1549133956432342529296875 +-0.3418065011501312255859375 0.248334762454032909051448996252 0.1549133956432342529296875 +-0.341724509000778220446647992503 0 -0.552923786640167280737045985006 +-0.341494612395763397216796875 -0.798165318369865373071547764994 0.385763663053512562139957253748 +-0.341494612395763397216796875 0.798165318369865373071547764994 0.385763663053512562139957253748 +-0.341408637166023265496761496252 -0.0675389017909765326797000284387 0.425885346531867992059261496252 +-0.341408637166023265496761496252 0.0675389017909765326797000284387 0.425885346531867992059261496252 +-0.341272106766700777935596988755 -0.513572153449058599328225227509 -0.205613192915916453973323996252 +-0.341272106766700777935596988755 0.513572153449058599328225227509 -0.205613192915916453973323996252 +-0.341258493065834056512386496252 -0.202682143449783330746427623126 0.380739703774452264983807481258 +-0.341258493065834056512386496252 0.202682143449783330746427623126 0.380739703774452264983807481258 +-0.34125749766826629638671875 -0.65950722992420196533203125 0.1053240001201629638671875 +-0.34125749766826629638671875 0.65950722992420196533203125 0.1053240001201629638671875 +-0.341252803802490234375 -0.598735916614532404089743522491 -0.122726096212863913792467940311 +-0.341252803802490234375 0.598735916614532404089743522491 -0.122726096212863913792467940311 +-0.3411810100078582763671875 -0.471695423126220703125 -0.686366075277328513415397992503 +-0.3411810100078582763671875 0.471695423126220703125 -0.686366075277328513415397992503 +-0.341149985790252685546875 -0.620235025882720947265625 -0.706345975399017333984375 +-0.341149985790252685546875 0.620235025882720947265625 -0.706345975399017333984375 +-0.3410860002040863037109375 -0.916091024875640869140625 0.21080400049686431884765625 +-0.3410860002040863037109375 0.916091024875640869140625 0.21080400049686431884765625 +-0.341081392765045177117855246252 0 0.493622982501983609271434261245 +-0.341078391671180758404346988755 -0.354316958785057090075554242503 0.424999916553497336657585492503 +-0.341078391671180758404346988755 0.354316958785057090075554242503 0.424999916553497336657585492503 +-0.341056799888610873150440738755 -0.208998394012451182977230246252 0 +-0.341056799888610873150440738755 0.208998394012451182977230246252 0 +-0.34100849926471710205078125 -0.66212774813175201416015625 -0.08831924758851528167724609375 +-0.34100849926471710205078125 0.66212774813175201416015625 -0.08831924758851528167724609375 +-0.34096300601959228515625 -0.222230494022369384765625 -0.2904439866542816162109375 +-0.34096300601959228515625 0.222230494022369384765625 -0.2904439866542816162109375 +-0.340959510207176186291633257497 -0.593618893623351961963408029987 0.146162098646163918225227007497 +-0.340959510207176186291633257497 0.593618893623351961963408029987 0.146162098646163918225227007497 +-0.340943354368209883276108485006 -0.405741056799888644146534488755 -0.147077144682407401354851117503 +-0.340943354368209883276108485006 0.405741056799888644146534488755 -0.147077144682407401354851117503 +-0.340820491313934326171875 -0.346889495849609375 0.116228498518466949462890625 +-0.340820491313934326171875 0.346889495849609375 0.116228498518466949462890625 +-0.3407495021820068359375 -0.3234190046787261962890625 -0.171142995357513427734375 +-0.3407495021820068359375 0.3234190046787261962890625 -0.171142995357513427734375 +-0.340568146109581026959034488755 -0.546115049719810508044304242503 0.0909486465156078421889773721887 +-0.340568146109581026959034488755 0.546115049719810508044304242503 0.0909486465156078421889773721887 +-0.34049324691295623779296875 -0.66825449466705322265625 0 +-0.34049324691295623779296875 0.66825449466705322265625 0 +-0.340382409095764171258480246252 -0.5339992046356201171875 -0.488860797882080089227230246252 +-0.340382409095764171258480246252 0.5339992046356201171875 -0.488860797882080089227230246252 +-0.340369606018066428454460492503 -0.1384603977203369140625 -0.158042395114898703845085492503 +-0.340369606018066428454460492503 0.1384603977203369140625 -0.158042395114898703845085492503 +-0.340329843759536732061832253748 -0.0817046977579593547424963162484 0 +-0.340329843759536732061832253748 0.0817046977579593547424963162484 0 +-0.340290009975433349609375 -0.16530050337314605712890625 0.32692301273345947265625 +-0.340290009975433349609375 0.16530050337314605712890625 0.32692301273345947265625 +-0.34026850759983062744140625 -0.548542144894599958959702235006 -0.0762774981558322906494140625 +-0.34026850759983062744140625 0.548542144894599958959702235006 -0.0762774981558322906494140625 +-0.34025919437408447265625 0 0.210294389724731467516960492503 +-0.340258407592773481908920985006 -0.247208809852600103207365123126 0.680523204803466841283920985006 +-0.340258407592773481908920985006 0.247208809852600103207365123126 0.680523204803466841283920985006 +-0.3401548564434051513671875 0 -0.082429550588130950927734375 +-0.34006500244140625 -0.649442017078399658203125 0.68013298511505126953125 +-0.34006500244140625 0.649442017078399658203125 0.68013298511505126953125 +-0.339955997467041026727230246252 -0.664648818969726606908920985006 -0.287526392936706565173210492503 +-0.339955997467041026727230246252 0.664648818969726606908920985006 -0.287526392936706565173210492503 +-0.33992850780487060546875 -0.54596476256847381591796875 0.38583751022815704345703125 +-0.33992850780487060546875 0.54596476256847381591796875 0.38583751022815704345703125 +-0.3399240076541900634765625 0 0.366676509380340576171875 +-0.339924001693725552630809261245 -0.0493932008743286146690287807814 0.491947209835052468029914507497 +-0.339924001693725552630809261245 0.0493932008743286146690287807814 0.491947209835052468029914507497 +-0.339624366164207491802784488755 -0.55421598255634307861328125 0 +-0.339624366164207491802784488755 0.55421598255634307861328125 0 +-0.339567205309867836682258257497 -0.0429796505719423280189595004686 0.0731226995587348910232705634371 +-0.339567205309867836682258257497 0.0429796505719423280189595004686 0.0731226995587348910232705634371 +-0.339477610588073741570980246252 -0.470070612430572465356704014994 -0.154235404729843122995092130623 +-0.339477610588073741570980246252 0.470070612430572465356704014994 -0.154235404729843122995092130623 +-0.339465004205703690942641514994 -0.546140712499618485864516514994 0.27657561004161834716796875 +-0.339465004205703690942641514994 0.546140712499618485864516514994 0.27657561004161834716796875 +-0.339444804191589399877670985006 -0.0276560008525848395610768903907 0.209791207313537619860710492503 +-0.339444804191589399877670985006 0.0276560008525848395610768903907 0.209791207313537619860710492503 +-0.339375209808349620477230246252 -0.442692804336547895971420985006 0.573452806472778298108039507497 +-0.339375209808349620477230246252 0.442692804336547895971420985006 0.573452806472778298108039507497 +-0.339371609687805220190170985006 -0.206447196006774913445980246252 0.0469723999500274713714276231258 +-0.339371609687805220190170985006 0.206447196006774913445980246252 0.0469723999500274713714276231258 +-0.339315199851989768298210492503 -0.0263267993927001967002787807814 -0.210171604156494162829460492503 +-0.339315199851989768298210492503 0.0263267993927001967002787807814 -0.210171604156494162829460492503 +-0.339121997356414794921875 0 -0.940743029117584228515625 +-0.339121308922767594751235264994 -0.361280506849288918225227007497 0.494442182779312122686832253748 +-0.339121308922767594751235264994 0.361280506849288918225227007497 0.494442182779312122686832253748 +-0.339049807190895113873096988755 -0.24633179605007171630859375 0.796471184492111183850227007497 +-0.339049807190895113873096988755 0.24633179605007171630859375 0.796471184492111183850227007497 +-0.339048856496810879779246761245 -0.0282002005726098986526650946871 -0.0821614474058151161850460653113 +-0.339048856496810879779246761245 0.0282002005726098986526650946871 -0.0821614474058151161850460653113 +-0.338868463039398215563835492503 -0.291334488987922690661491742503 0.0528439499437809018234091240629 +-0.338868463039398215563835492503 0.291334488987922690661491742503 0.0528439499437809018234091240629 +-0.338855007290840171130241742503 -0.363484016060829195904346988755 0.235704699158668540270866742503 +-0.338855007290840171130241742503 0.363484016060829195904346988755 0.235704699158668540270866742503 +-0.33884279429912567138671875 -0.721349108219146772924545985006 0.418139997124671924932926003748 +-0.33884279429912567138671875 0.721349108219146772924545985006 0.418139997124671924932926003748 +-0.338813734054565440789730246252 -0.291020965576171908306690738755 0.320955240726470969470085492503 +-0.338813734054565440789730246252 0.291020965576171908306690738755 0.320955240726470969470085492503 +-0.3387934863567352294921875 -0.0407500006258487701416015625 0.3654564917087554931640625 +-0.3387934863567352294921875 0.0407500006258487701416015625 0.3654564917087554931640625 +-0.338758197426795970574886496252 -0.209542952477931976318359375 0.209366999566555023193359375 +-0.338758197426795970574886496252 0.209542952477931976318359375 0.209366999566555023193359375 +-0.3387379944324493408203125 -0.3941330015659332275390625 -0.854350984096527099609375 +-0.3387379944324493408203125 0.3941330015659332275390625 -0.854350984096527099609375 +-0.3387160003185272216796875 0 0.94088900089263916015625 +-0.338706457614898703845085492503 -0.146187445521354680844083873126 -0.2576956450939178466796875 +-0.338706457614898703845085492503 0.146187445521354680844083873126 -0.2576956450939178466796875 +-0.338698650896549213751285378748 -0.385887254774570476190120871252 0.677403229475021295691306022491 +-0.338698650896549213751285378748 0.385887254774570476190120871252 0.677403229475021295691306022491 +-0.338696002960205078125 -0.0784056007862091175475427462516 -0.197832405567169189453125 +-0.338696002960205078125 0.0784056007862091175475427462516 -0.197832405567169189453125 +-0.338682866096496615337940738755 -0.432143241167068536956463731258 0.0323488004505634307861328125 +-0.338682866096496615337940738755 0.432143241167068536956463731258 0.0323488004505634307861328125 +-0.338664314150810275005909488755 -0.086789302527904510498046875 -0.547972738742828369140625 +-0.338664314150810275005909488755 0.086789302527904510498046875 -0.547972738742828369140625 +-0.338663601875305197985710492503 -0.2053492069244384765625 -0.05602359771728515625 +-0.338663601875305197985710492503 0.2053492069244384765625 -0.05602359771728515625 +-0.338592004776000987664730246252 -0.649732780456543035363381477509 0.32125198841094970703125 +-0.338592004776000987664730246252 0.649732780456543035363381477509 0.32125198841094970703125 +-0.33858166635036468505859375 -0.109218449145555507318050558752 -0.419444853067398093493522992503 +-0.33858166635036468505859375 0.109218449145555507318050558752 -0.419444853067398093493522992503 +-0.338576190173625946044921875 -0.324357545375823952404914507497 0.8262311518192291259765625 +-0.338576190173625946044921875 0.324357545375823952404914507497 0.8262311518192291259765625 +-0.3385111391544342041015625 -0.0990508474409580313979617471887 0.279462146759033192022769753748 +-0.3385111391544342041015625 0.0990508474409580313979617471887 0.279462146759033192022769753748 +-0.338499605655670166015625 -0.27652680873870849609375 -0.411036014556884765625 +-0.338499605655670166015625 0.27652680873870849609375 -0.411036014556884765625 +-0.338459345698356617315738503748 -0.63412405550479888916015625 -0.621154630184173606188835492503 +-0.338459345698356617315738503748 0.63412405550479888916015625 -0.621154630184173606188835492503 +-0.338380348682403575555355246252 -0.0366899482905864715576171875 -0.432032698392868064196647992503 +-0.338380348682403575555355246252 0.0366899482905864715576171875 -0.432032698392868064196647992503 +-0.338378396630287181512386496252 -0.806760889291763372277443977509 -0.211274103820323938540681751874 +-0.338378396630287181512386496252 0.806760889291763372277443977509 -0.211274103820323938540681751874 +-0.338114711642265364233139735006 -0.110651751607656487208508622189 0.419445410370826776702557481258 +-0.338114711642265364233139735006 0.110651751607656487208508622189 0.419445410370826776702557481258 +-0.3378979861736297607421875 -0.432244440913200411724659488755 -0.0385973479598760646491761860943 +-0.3378979861736297607421875 0.432244440913200411724659488755 -0.0385973479598760646491761860943 +-0.3378674983978271484375 -0.3673965036869049072265625 0.02941399998962879180908203125 +-0.3378674983978271484375 0.3673965036869049072265625 0.02941399998962879180908203125 +-0.3377470076084136962890625 -0.286024987697601318359375 0.23262999951839447021484375 +-0.3377470076084136962890625 0.286024987697601318359375 0.23262999951839447021484375 +-0.3375990092754364013671875 -0.08113999664783477783203125 0.93778598308563232421875 +-0.3375990092754364013671875 0.08113999664783477783203125 0.93778598308563232421875 +-0.337531590461730923724559261245 -0.0829790510237216893951739393742 -0.0410724990069866180419921875 +-0.337531590461730923724559261245 0.0829790510237216893951739393742 -0.0410724990069866180419921875 +-0.337493383884429898333934261245 -0.0966017961502075167556924384371 0.486586189270019509045539507497 +-0.337493383884429898333934261245 0.0966017961502075167556924384371 0.486586189270019509045539507497 +-0.337446892261505149157585492503 -0.29095919430255889892578125 -0.06302654743194580078125 +-0.337446892261505149157585492503 0.29095919430255889892578125 -0.06302654743194580078125 +-0.337442699074745167120426003748 -0.0697648018598556463043536268742 -0.0613626986742019583931373460928 +-0.337442699074745167120426003748 0.0697648018598556463043536268742 -0.0613626986742019583931373460928 +-0.337364387512207042352230246252 -0.342747616767883289679019753748 0.358761012554168701171875 +-0.337364387512207042352230246252 0.342747616767883289679019753748 0.358761012554168701171875 +-0.337347006797790560650440738755 -0.267701411247253440173210492503 0.130510349571704875604183371252 +-0.337347006797790560650440738755 0.267701411247253440173210492503 0.130510349571704875604183371252 +-0.337292101979255687371761496252 -0.171772205829620355777009876874 0.243369001150131242239282869377 +-0.337292101979255687371761496252 0.171772205829620355777009876874 0.243369001150131242239282869377 +-0.33720600605010986328125 -0.367505013942718505859375 -0.0350989997386932373046875 +-0.33720600605010986328125 0.367505013942718505859375 -0.0350989997386932373046875 +-0.337130504846572864874332253748 -0.280675503611564625128238503748 -0.5454945862293243408203125 +-0.337130504846572864874332253748 0.280675503611564625128238503748 -0.5454945862293243408203125 +-0.337076152861118305548160378748 -0.698049563169479303503806022491 0.549187380075454645300681022491 +-0.337076152861118305548160378748 0.698049563169479303503806022491 0.549187380075454645300681022491 +-0.337071695923805203509715511245 -0.554853612184524447314970529987 -0.261762896180152859759715511245 +-0.337071695923805203509715511245 0.554853612184524447314970529987 -0.261762896180152859759715511245 +-0.337005996704101584704460492503 -0.0551800012588501004318075615629 0.208283591270446793997095369377 +-0.337005996704101584704460492503 0.0551800012588501004318075615629 0.208283591270446793997095369377 +-0.33697275817394256591796875 -0.0998025052249431610107421875 -0.6625627577304840087890625 +-0.33697275817394256591796875 0.0998025052249431610107421875 -0.6625627577304840087890625 +-0.336962994933128368035823996252 -0.216773150861263280697599498126 -0.376783013343811090667401231258 +-0.336962994933128368035823996252 0.216773150861263280697599498126 -0.376783013343811090667401231258 +-0.3368887603282928466796875 -0.64700098335742950439453125 -0.1743427477777004241943359375 +-0.3368887603282928466796875 0.64700098335742950439453125 -0.1743427477777004241943359375 +-0.336435592174530007092414507497 -0.420370209217071522100894753748 0.264763194322586048468082253748 +-0.336435592174530007092414507497 0.420370209217071522100894753748 0.264763194322586048468082253748 +-0.336338451504707314221320757497 -0.0835358999669551793854083143742 0.0489723481237888322303852817186 +-0.336338451504707314221320757497 0.0835358999669551793854083143742 0.0489723481237888322303852817186 +-0.336057744920253753662109375 -0.55854298174381256103515625 -0.370937995612621307373046875 +-0.336057744920253753662109375 0.55854298174381256103515625 -0.370937995612621307373046875 +-0.336004894971847489770766514994 -0.0957960531115531893631143134371 -0.0205856002867221832275390625 +-0.336004894971847489770766514994 0.0957960531115531893631143134371 -0.0205856002867221832275390625 +-0.335988101363182023462172764994 0 0.0980409517884254372299679403113 +-0.335935211181640658306690738755 -0.723871183395385808800881477509 0.0561999976634979248046875 +-0.335935211181640658306690738755 0.723871183395385808800881477509 0.0561999976634979248046875 +-0.335914058983325936047492632497 -0.488285908102989163470653011245 -0.609293606877326920923110264994 +-0.335914058983325936047492632497 0.488285908102989163470653011245 -0.609293606877326920923110264994 +-0.335855698585510287212940738755 -0.796282196044921897204460492503 0.251267409324646029400440738755 +-0.335855698585510287212940738755 0.796282196044921897204460492503 0.251267409324646029400440738755 +-0.335842800140380870477230246252 -0.184104394912719737664730246252 0.115391194820404052734375 +-0.335842800140380870477230246252 0.184104394912719737664730246252 0.115391194820404052734375 +-0.335841608047485362664730246252 -0.126709198951721196957365123126 0.176508402824401861019865123126 +-0.335841608047485362664730246252 0.126709198951721196957365123126 0.176508402824401861019865123126 +-0.33573855459690093994140625 -0.0562170013785362188141192518742 -0.0813592500984668676178301893742 +-0.33573855459690093994140625 0.0562170013785362188141192518742 -0.0813592500984668676178301893742 +-0.3357295095920562744140625 -0.1930924952030181884765625 -0.3162294924259185791015625 +-0.3357295095920562744140625 0.1930924952030181884765625 -0.3162294924259185791015625 +-0.335663995146751381604133257497 -0.140256203711032867431640625 -0.598044979572296075964743522491 +-0.335663995146751381604133257497 0.140256203711032867431640625 -0.598044979572296075964743522491 +-0.3356391489505767822265625 -0.0961415007710456764877804403113 0.0245619487017393091365935475778 +-0.3356391489505767822265625 0.0961415007710456764877804403113 0.0245619487017393091365935475778 +-0.335623192787170454565170985006 -0.724665594100952215050881477509 -0.0470872014760971083213725307814 +-0.335623192787170454565170985006 0.724665594100952215050881477509 -0.0470872014760971083213725307814 +-0.335568404197692904400440738755 -0.121519601345062261410490123126 -0.180629205703735362664730246252 +-0.335568404197692904400440738755 0.121519601345062261410490123126 -0.180629205703735362664730246252 +-0.335526090860366832391292746252 -0.243770805001258861199886496252 0.500497391819953896252570757497 +-0.335526090860366832391292746252 0.243770805001258861199886496252 0.500497391819953896252570757497 +-0.335518205165863003802684261245 -0.040044598281383514404296875 -0.495806407928466752466079014994 +-0.335518205165863003802684261245 0.040044598281383514404296875 -0.495806407928466752466079014994 +-0.335438606142997697290297764994 -0.434165185689926125256477007497 -0.434719604253768876489516514994 +-0.335438606142997697290297764994 0.434165185689926125256477007497 -0.434719604253768876489516514994 +-0.335412003099918365478515625 -0.63798598945140838623046875 0.207297742366790771484375 +-0.335412003099918365478515625 0.63798598945140838623046875 0.207297742366790771484375 +-0.33540999889373779296875 -0.3440949916839599609375 -0.13819800317287445068359375 +-0.33540999889373779296875 0.3440949916839599609375 -0.13819800317287445068359375 +-0.335408508777618408203125 -0.081228502094745635986328125 0.361805498600006103515625 +-0.335408508777618408203125 0.081228502094745635986328125 0.361805498600006103515625 +-0.335408248007297515869140625 -0.39429523050785064697265625 -0.54270900785923004150390625 +-0.335408248007297515869140625 0.39429523050785064697265625 -0.54270900785923004150390625 +-0.33540751039981842041015625 0 0.67082177102565765380859375 +-0.3353140056133270263671875 -0.819204986095428466796875 -0.4652599990367889404296875 +-0.3353140056133270263671875 0.819204986095428466796875 -0.4652599990367889404296875 +-0.335216689109802234991519753748 -0.0596560500562191009521484375 -0.29422934353351593017578125 +-0.335216689109802234991519753748 0.0596560500562191009521484375 -0.29422934353351593017578125 +-0.334964004158973649438735264994 -0.0704151004552841103256710653113 0.0730806998908519744873046875 +-0.334964004158973649438735264994 0.0704151004552841103256710653113 0.0730806998908519744873046875 +-0.3349528014659881591796875 -0.470619791746139493060496761245 0.395378208160400368420539507497 +-0.3349528014659881591796875 0.470619791746139493060496761245 0.395378208160400368420539507497 +-0.334870210289955116955695757497 -0.0285250004380941356296741417964 0.0977147489786148043533486884371 +-0.334870210289955116955695757497 0.0285250004380941356296741417964 0.0977147489786148043533486884371 +-0.33481800556182861328125 -0.243256205320358270816072376874 0.434422802925109874383480246252 +-0.33481800556182861328125 0.243256205320358270816072376874 0.434422802925109874383480246252 +-0.334654960036277759893863503748 -0.0142247002571821209299107735546 -0.10150735080242156982421875 +-0.334654960036277759893863503748 0.0142247002571821209299107735546 -0.10150735080242156982421875 +-0.334552216529846180304019753748 -0.496288204193115201068309261245 0.0421061977744102491905131557814 +-0.334552216529846180304019753748 0.496288204193115201068309261245 0.0421061977744102491905131557814 +-0.334490001201629638671875 -0.3088360130786895751953125 0.20672850310802459716796875 +-0.334490001201629638671875 0.3088360130786895751953125 0.20672850310802459716796875 +-0.33440105617046356201171875 -0.0345729008316993727256694057814 0.78069268167018890380859375 +-0.33440105617046356201171875 0.0345729008316993727256694057814 0.78069268167018890380859375 +-0.334387993812561068462940738755 -0.564184808731079123766960492503 0.458127212524414073602230246252 +-0.334387993812561068462940738755 0.564184808731079123766960492503 0.458127212524414073602230246252 +-0.3343839943408966064453125 -0.033302001655101776123046875 -0.370240986347198486328125 +-0.3343839943408966064453125 0.033302001655101776123046875 -0.370240986347198486328125 +-0.33437325060367584228515625 -0.05884350277483463287353515625 0.6687540113925933837890625 +-0.33437325060367584228515625 0.05884350277483463287353515625 0.6687540113925933837890625 +-0.3342309892177581787109375 -0.099168002605438232421875 -0.3584065139293670654296875 +-0.3342309892177581787109375 0.099168002605438232421875 -0.3584065139293670654296875 +-0.334182608127593983038394753748 -0.497068190574645962787059261245 -0.03528960049152374267578125 +-0.334182608127593983038394753748 0.497068190574645962787059261245 -0.03528960049152374267578125 +-0.3341189920902252197265625 -0.896799981594085693359375 -0.2900229990482330322265625 +-0.3341189920902252197265625 0.896799981594085693359375 -0.2900229990482330322265625 +-0.3340991437435150146484375 -0.424511462450027521331463731258 0.103285052627325069085628683752 +-0.3340991437435150146484375 0.424511462450027521331463731258 0.103285052627325069085628683752 +-0.333739739656448375360042746252 -0.666264000535011224890524772491 -0.408912043273448932989566628748 +-0.333739739656448375360042746252 0.666264000535011224890524772491 -0.408912043273448932989566628748 +-0.333738398551940929070980246252 -0.713393592834472678454460492503 -0.140314400196075439453125 +-0.333738398551940929070980246252 0.713393592834472678454460492503 -0.140314400196075439453125 +-0.3333880007266998291015625 -0.24221749603748321533203125 0.2831664979457855224609375 +-0.3333880007266998291015625 0.24221749603748321533203125 0.2831664979457855224609375 +-0.333289456367492686883480246252 -0.450953748822212230340511496252 0.328722545504570029528679242503 +-0.333289456367492686883480246252 0.450953748822212230340511496252 0.328722545504570029528679242503 +-0.333278393745422396587940738755 -0.707807207107543967516960492503 0.167138397693634033203125 +-0.333278393745422396587940738755 0.707807207107543967516960492503 0.167138397693634033203125 +-0.33317311108112335205078125 -0.340669536590576194079460492503 -0.442086440324783336297542746252 +-0.33317311108112335205078125 0.340669536590576194079460492503 -0.442086440324783336297542746252 +-0.333000004291534423828125 -0.1596100032329559326171875 0.92931997776031494140625 +-0.333000004291534423828125 0.1596100032329559326171875 0.92931997776031494140625 +-0.332954001426696788445980246252 -0.082439601421356201171875 0.205779600143432633840845369377 +-0.332954001426696788445980246252 0.082439601421356201171875 0.205779600143432633840845369377 +-0.332940602302551236224559261245 -0.143203201889991749151676003748 0.478166413307189896997329014994 +-0.332940602302551236224559261245 0.143203201889991749151676003748 0.478166413307189896997329014994 +-0.33287028968334197998046875 -0.108154553174972523077457253748 0 +-0.33287028968334197998046875 0.108154553174972523077457253748 0 +-0.33285200595855712890625 -0.168943202495574956722990123126 0.143763196468353282586605246252 +-0.33285200595855712890625 0.168943202495574956722990123126 0.143763196468353282586605246252 +-0.332821759581565845831363503748 -0.64484997093677520751953125 0.442604354023933388440070757497 +-0.332821759581565845831363503748 0.64484997093677520751953125 0.442604354023933388440070757497 +-0.33277915418148040771484375 -0.386597192287445101666065738755 0.205670846998691564389005748126 +-0.33277915418148040771484375 0.386597192287445101666065738755 0.205670846998691564389005748126 +-0.332582411170005809442073996252 -0.6401502192020416259765625 -0.5381415188312530517578125 +-0.332582411170005809442073996252 0.6401502192020416259765625 -0.5381415188312530517578125 +-0.332468551397323619500667746252 -0.241551455855369578973323996252 -0.183350698649883264712556751874 +-0.332468551397323619500667746252 0.241551455855369578973323996252 -0.183350698649883264712556751874 +-0.332427543401718095239516514994 -0.0423996999859809833854917826557 -0.100966596603393549136384876874 +-0.332427543401718095239516514994 0.0423996999859809833854917826557 -0.100966596603393549136384876874 +-0.332426404953002962994190738755 -0.201681995391845725329460492503 0.0938996016979217612563601846887 +-0.332426404953002962994190738755 0.201681995391845725329460492503 0.0938996016979217612563601846887 +-0.332415443658828746453792746252 -0.21856905519962310791015625 -0.210303895175457000732421875 +-0.332415443658828746453792746252 0.21856905519962310791015625 -0.210303895175457000732421875 +-0.332341599464416548315170985006 -0.221347594261169455798210492503 0.0235464006662368802169638115629 +-0.332341599464416548315170985006 0.221347594261169455798210492503 0.0235464006662368802169638115629 +-0.332303190231323264391960492503 -0.0526992022991180433799662807814 -0.216326808929443364926115123126 +-0.332303190231323264391960492503 0.0526992022991180433799662807814 -0.216326808929443364926115123126 +-0.332240796089172396587940738755 -0.220966410636901866570980246252 -0.028105199337005615234375 +-0.332240796089172396587940738755 0.220966410636901866570980246252 -0.028105199337005615234375 +-0.33217830955982208251953125 0 -0.303574508428573641705128238755 +-0.332082903385162386822315738755 -0.118836450576782229338057561563 -0.279461690783500693591179242503 +-0.332082903385162386822315738755 0.118836450576782229338057561563 -0.279461690783500693591179242503 +-0.332012555003166176526008257497 -0.1012145988643169403076171875 0.775901240110397294458266514994 +-0.332012555003166176526008257497 0.1012145988643169403076171875 0.775901240110397294458266514994 +-0.331906490027904510498046875 -0.36467550694942474365234375 0.56511001288890838623046875 +-0.331906490027904510498046875 0.36467550694942474365234375 0.56511001288890838623046875 +-0.33161701261997222900390625 -0.424916261434555075915397992503 -0.109435699135065081510909124063 +-0.33161701261997222900390625 0.424916261434555075915397992503 -0.109435699135065081510909124063 +-0.331531840562820423468082253748 -0.531388634443283103259147992503 0.173818443715572368279964621252 +-0.331531840562820423468082253748 0.531388634443283103259147992503 0.173818443715572368279964621252 +-0.331524547934532121118422764994 -0.0568603008985519367546324076557 0.0967386022210121043762853787484 +-0.331524547934532121118422764994 0.0568603008985519367546324076557 0.0967386022210121043762853787484 +-0.331455159187316883429019753748 -0.130466254055500024966463001874 0.274983742833137534411491742503 +-0.331455159187316883429019753748 0.130466254055500024966463001874 0.274983742833137534411491742503 +-0.3314135074615478515625 -0.36397850513458251953125 0.087661497294902801513671875 +-0.3314135074615478515625 0.36397850513458251953125 0.087661497294902801513671875 +-0.331361997127532947882144753748 -0.393601799011230435443309261245 -0.308670008182525601458934261245 +-0.331361997127532947882144753748 0.393601799011230435443309261245 -0.308670008182525601458934261245 +-0.331355702877044688836605246252 -0.28555963933467864990234375 0.105637051910161969270340875937 +-0.331355702877044688836605246252 0.28555963933467864990234375 0.105637051910161969270340875937 +-0.331351496279239654541015625 -0.4855544865131378173828125 0.46577100455760955810546875 +-0.331351496279239654541015625 0.4855544865131378173828125 0.46577100455760955810546875 +-0.331278003752231597900390625 -0.117324002087116241455078125 0.66256351768970489501953125 +-0.331278003752231597900390625 0.117324002087116241455078125 0.66256351768970489501953125 +-0.33079059422016143798828125 -0.0935823008418083107651241903113 -0.0657268516719341222565020643742 +-0.33079059422016143798828125 0.0935823008418083107651241903113 -0.0657268516719341222565020643742 +-0.330716764926910433697315738755 -0.536363741755485512463508257497 -0.159501551836729066335962556877 +-0.330716764926910433697315738755 0.536363741755485512463508257497 -0.159501551836729066335962556877 +-0.330575394630432117804019753748 -0.263121297955513033794971988755 -0.154878298938274400198267244377 +-0.330575394630432117804019753748 0.263121297955513033794971988755 -0.154878298938274400198267244377 +-0.330568534135818492547542746252 -0.0268436988815665238117258439843 0.559020814299583501671975227509 +-0.330568534135818492547542746252 0.0268436988815665238117258439843 0.559020814299583501671975227509 +-0.330535197257995627673210492503 -0.306142401695251475945980246252 0.661077594757080166942841970013 +-0.330535197257995627673210492503 0.306142401695251475945980246252 0.661077594757080166942841970013 +-0.330321604013442959857371761245 -0.239989408850669855288728626874 0.568588280677795321338408029987 +-0.330321604013442959857371761245 0.239989408850669855288728626874 0.568588280677795321338408029987 +-0.330310392379760786596420985006 -0.179302394390106201171875 -0.136914396286010736636384876874 +-0.330310392379760786596420985006 0.179302394390106201171875 -0.136914396286010736636384876874 +-0.330287647247314464227230246252 -0.333752107620239268914730246252 -0.286390495300292979852230246252 +-0.330287647247314464227230246252 0.333752107620239268914730246252 -0.286390495300292979852230246252 +-0.330228853225707996710269753748 -0.106823153793811798095703125 -0.0451398484408855396599058451557 +-0.330228853225707996710269753748 0.106823153793811798095703125 -0.0451398484408855396599058451557 +-0.3300054073333740234375 -0.2397623956203460693359375 -0.440011811256408702508480246252 +-0.3300054073333740234375 0.2397623956203460693359375 -0.440011811256408702508480246252 +-0.329950955510139420923110264994 -0.107679252326488492097489313437 0.0451398484408855396599058451557 +-0.329950955510139420923110264994 0.107679252326488492097489313437 0.0451398484408855396599058451557 +-0.3299045860767364501953125 -0.888373500108718849865852007497 0.066749848425388336181640625 +-0.3299045860767364501953125 0.888373500108718849865852007497 0.066749848425388336181640625 +-0.329820585250854503289730246252 -0.12021960318088531494140625 -0.4865856170654296875 +-0.329820585250854503289730246252 0.12021960318088531494140625 -0.4865856170654296875 +-0.329719506204128265380859375 -0.57887698709964752197265625 0.344508759677410125732421875 +-0.329719506204128265380859375 0.57887698709964752197265625 0.344508759677410125732421875 +-0.329705247282981839251903011245 -0.0801139518618583651443643134371 -0.0858847521245479500473507528113 +-0.329705247282981839251903011245 0.0801139518618583651443643134371 -0.0858847521245479500473507528113 +-0.329672002792358420641960492503 0 -0.226531195640563981497095369377 +-0.329664295911788918225227007497 -0.0947180494666099437317541287484 0.0696408994495868599594601278113 +-0.329664295911788918225227007497 0.0947180494666099437317541287484 0.0696408994495868599594601278113 +-0.329660090804100025518863503748 -0.778436118364334128649772992503 -0.3088062107563018798828125 +-0.329660090804100025518863503748 0.778436118364334128649772992503 -0.3088062107563018798828125 +-0.3296310007572174072265625 -0.198671996593475341796875 0.3191750049591064453125 +-0.3296310007572174072265625 0.198671996593475341796875 0.3191750049591064453125 +-0.329563537240028348040965511245 -0.889247497916221596447883257497 -0.0559227015823125783722247206242 +-0.329563537240028348040965511245 0.889247497916221596447883257497 -0.0559227015823125783722247206242 +-0.329555612802505504266292746252 -0.148842091858387010061548494377 0.414414009451866183209034488755 +-0.329555612802505504266292746252 0.148842091858387010061548494377 0.414414009451866183209034488755 +-0.3294169902801513671875 -0.3304404914379119873046875 0.17970399558544158935546875 +-0.3294169902801513671875 0.3304404914379119873046875 0.17970399558544158935546875 +-0.329373854398727405889957253748 -0.173161303997039800472990123126 -0.532942810654640219958366742503 +-0.329373854398727405889957253748 0.173161303997039800472990123126 -0.532942810654640219958366742503 +-0.329335650801658663677784488755 -0.305510392785072359966846988755 0.0264865508303046247318146555472 +-0.329335650801658663677784488755 0.305510392785072359966846988755 0.0264865508303046247318146555472 +-0.329224801063537630962940738755 -0.49783039093017578125 -0.532706403732299826891960492503 +-0.329224801063537630962940738755 0.49783039093017578125 -0.532706403732299826891960492503 +-0.3290930092334747314453125 -0.879342019557952880859375 0.3441739976406097412109375 +-0.3290930092334747314453125 0.879342019557952880859375 0.3441739976406097412109375 +-0.329089397192001309466746761245 -0.282488140463829029425113503748 -0.731027218699455194617087272491 +-0.329089397192001309466746761245 0.282488140463829029425113503748 -0.731027218699455194617087272491 +-0.3290669918060302734375 -0.487300801277160633429019753748 0.119384998083114618472322376874 +-0.3290669918060302734375 0.487300801277160633429019753748 0.119384998083114618472322376874 +-0.32904720306396484375 -0.103955996036529552117855246252 -0.202289605140686057360710492503 +-0.32904720306396484375 0.103955996036529552117855246252 -0.202289605140686057360710492503 +-0.32901604473590850830078125 -0.361139342188835199554119981258 -0.252639757096767447741569867503 +-0.32901604473590850830078125 0.361139342188835199554119981258 -0.252639757096767447741569867503 +-0.3289031982421875 -0.422388017177581787109375 -0.270945006608962979388621761245 +-0.3289031982421875 0.422388017177581787109375 -0.270945006608962979388621761245 +-0.32885639369487762451171875 -0.305539199709892295153679242503 -0.03161249868571758270263671875 +-0.32885639369487762451171875 0.305539199709892295153679242503 -0.03161249868571758270263671875 +-0.328780388832092318462940738755 -0.198575603961944596731470369377 -0.111674404144287114926115123126 +-0.328780388832092318462940738755 0.198575603961944596731470369377 -0.111674404144287114926115123126 +-0.328712782263755831646534488755 -0.0778394520282745389083700615629 0.555328139662742636950554242503 +-0.328712782263755831646534488755 0.0778394520282745389083700615629 0.555328139662742636950554242503 +-0.3286879956722259521484375 -0.116225503385066986083984375 0.358407497406005859375 +-0.3286879956722259521484375 0.116225503385066986083984375 0.358407497406005859375 +-0.32861249148845672607421875 -0.59262599050998687744140625 -0.32141549885272979736328125 +-0.32861249148845672607421875 0.59262599050998687744140625 -0.32141549885272979736328125 +-0.328607299923896756244090511245 0 -0.120487153530120835731587192186 +-0.328456708788871787341179242503 -0.238635098934173589535490123126 0.371038264036178622173878238755 +-0.328456708788871787341179242503 0.238635098934173589535490123126 0.371038264036178622173878238755 +-0.3284254968166351318359375 -0.16276399791240692138671875 -0.3400655090808868408203125 +-0.3284254968166351318359375 0.16276399791240692138671875 -0.3400655090808868408203125 +-0.328300008177757229876903011245 -0.0144375005736947052692453752343 0.120460554957389817665180942186 +-0.328300008177757229876903011245 0.0144375005736947052692453752343 0.120460554957389817665180942186 +-0.328142148256301835473891514994 -0.119995403289794910772769753748 0.0205856002867221832275390625 +-0.328142148256301835473891514994 0.119995403289794910772769753748 0.0205856002867221832275390625 +-0.32809744775295257568359375 -0.113266754150390627775557561563 -0.775901240110397294458266514994 +-0.32809744775295257568359375 0.113266754150390627775557561563 -0.775901240110397294458266514994 +-0.328049042820930447650340511245 -0.119500847160816187075838001874 -0.0245619487017393091365935475778 +-0.328049042820930447650340511245 0.119500847160816187075838001874 -0.0245619487017393091365935475778 +-0.328002989292144775390625 -0.3626489937305450439453125 -0.104400999844074249267578125 +-0.328002989292144775390625 0.3626489937305450439453125 -0.104400999844074249267578125 +-0.3279969990253448486328125 -0.78570997714996337890625 0.52447998523712158203125 +-0.3279969990253448486328125 0.78570997714996337890625 0.52447998523712158203125 +-0.327961611747741743627670985006 -0.31968319416046142578125 -0.655930423736572287829460492503 +-0.327961611747741743627670985006 0.31968319416046142578125 -0.655930423736572287829460492503 +-0.327914810180664095806690738755 -0.163313198089599626028345369377 -0.160625600814819358141960492503 +-0.327914810180664095806690738755 0.163313198089599626028345369377 -0.160625600814819358141960492503 +-0.327856814861297585217414507497 -0.446095204353332497326789507497 0.231320393085479719674779630623 +-0.327856814861297585217414507497 0.446095204353332497326789507497 0.231320393085479719674779630623 +-0.327846756577491793560596988755 -0.182787001132965115646200615629 -0.402002140879631097991619981258 +-0.327846756577491793560596988755 0.182787001132965115646200615629 -0.402002140879631097991619981258 +-0.327810609340667691302684261245 -0.489739215373992897717414507497 -0.112674602866172784976228626874 +-0.327810609340667691302684261245 0.489739215373992897717414507497 -0.112674602866172784976228626874 +-0.327793598175048828125 -0.218041992187500005551115123126 0.070773601531982421875 +-0.327793598175048828125 0.218041992187500005551115123126 0.070773601531982421875 +-0.3276562392711639404296875 -0.531724512577056884765625 -0.41522325575351715087890625 +-0.3276562392711639404296875 0.531724512577056884765625 -0.41522325575351715087890625 +-0.327569198608398448602230246252 -0.152686405181884782278345369377 0.171421194076538108141960492503 +-0.327569198608398448602230246252 0.152686405181884782278345369377 0.171421194076538108141960492503 +-0.327525457739829994885383257497 -0.0283797487616538994525949846093 -0.120090594887733451145983565311 +-0.327525457739829994885383257497 0.0283797487616538994525949846093 -0.120090594887733451145983565311 +-0.327308797836303733141960492503 -0.109304797649383556024105246252 0.202290391921997075863615123126 +-0.327308797836303733141960492503 0.109304797649383556024105246252 0.202290391921997075863615123126 +-0.327293393015861466821547764994 -0.081358201801776885986328125 0.0935942023992538396637286268742 +-0.327293393015861466821547764994 0.081358201801776885986328125 0.0935942023992538396637286268742 +-0.327293094992637645379573996252 -0.0185625007376074811771271555472 0.30827701091766357421875 +-0.327293094992637645379573996252 0.0185625007376074811771271555472 0.30827701091766357421875 +-0.32726275920867919921875 -0.167680353671312315499974943123 0.766343840956687949450554242503 +-0.32726275920867919921875 0.167680353671312315499974943123 0.766343840956687949450554242503 +-0.327232342958450328485042746252 -0.19928880035877227783203125 -0.236015108227729808465511496252 +-0.327232342958450328485042746252 0.19928880035877227783203125 -0.236015108227729808465511496252 +-0.32717879116535186767578125 -0.397098007798194874151676003748 0.397199398279190096783253238755 +-0.32717879116535186767578125 0.397098007798194874151676003748 0.397199398279190096783253238755 +-0.327096709609031643939403011245 -0.572264015674591064453125 0.235630497336387606521768134371 +-0.327096709609031643939403011245 0.572264015674591064453125 0.235630497336387606521768134371 +-0.327062433958053622173878238755 -0.327189499139785788806022992503 0.297451558709144636694077235006 +-0.327062433958053622173878238755 0.327189499139785788806022992503 0.297451558709144636694077235006 +-0.32697200775146484375 -0.6926968097686767578125 -0.23078238964080810546875 +-0.32697200775146484375 0.6926968097686767578125 -0.23078238964080810546875 +-0.326945006847381591796875 -0.485202014446258544921875 0.810977995395660400390625 +-0.326945006847381591796875 0.485202014446258544921875 0.810977995395660400390625 +-0.326898890733718860968082253748 -0.0599436029791831984092631557814 -0.836387121677398703845085492503 +-0.326898890733718860968082253748 0.0599436029791831984092631557814 -0.836387121677398703845085492503 +-0.326896855235099759173778011245 -0.0656004980206489479721554403113 -0.106466148793697354402176813437 +-0.326896855235099759173778011245 0.0656004980206489479721554403113 -0.106466148793697354402176813437 +-0.326813200116157498431590511245 -0.581250619888305619653579014994 -0.212933695316314675061164507497 +-0.326813200116157498431590511245 0.581250619888305619653579014994 -0.212933695316314675061164507497 +-0.326785504817962646484375 -0.199137009680271148681640625 -0.64502401649951934814453125 +-0.326785504817962646484375 0.199137009680271148681640625 -0.64502401649951934814453125 +-0.326763439178466785772769753748 -0.282739940285682667120426003748 -0.125633704662323014700220369377 +-0.326763439178466785772769753748 0.282739940285682667120426003748 -0.125633704662323014700220369377 +-0.3263190090656280517578125 -0.237082004547119140625 0.9150450229644775390625 +-0.3263190090656280517578125 0.237082004547119140625 0.9150450229644775390625 +-0.326234695315361034051448996252 -0.200411546230316178762720369377 0.236444851756095891781583873126 +-0.326234695315361034051448996252 0.200411546230316178762720369377 0.236444851756095891781583873126 +-0.326231756806373618395866742503 -0.290531149506568941998096988755 0.481315258145332325323551003748 +-0.326231756806373618395866742503 0.290531149506568941998096988755 0.481315258145332325323551003748 +-0.326140500605106353759765625 -0.1750807464122772216796875 0.6522877514362335205078125 +-0.326140500605106353759765625 0.1750807464122772216796875 0.6522877514362335205078125 +-0.326041090488433826788394753748 -0.0429547991603612885902485629686 0.119800096750259391087389815311 +-0.326041090488433826788394753748 0.0429547991603612885902485629686 0.119800096750259391087389815311 +-0.325959208607673633917301003748 0 -0.619476211071014359887954014994 +-0.325892445445060741082698996252 -0.456327947974205005987613503748 -0.328722545504570029528679242503 +-0.325892445445060741082698996252 0.456327947974205005987613503748 -0.328722545504570029528679242503 +-0.325881336629390727654964621252 -0.393553653359413113665965511245 0.800885158777236871863181022491 +-0.325881336629390727654964621252 0.393553653359413113665965511245 0.800885158777236871863181022491 +-0.325763607025146506579460492503 -0.216259193420410167352230246252 -0.0843216001987457386412927462516 +-0.325763607025146506579460492503 0.216259193420410167352230246252 -0.0843216001987457386412927462516 +-0.325725944340229001117137386245 -0.776034688949584938733039507497 0.11905014514923095703125 +-0.325725944340229001117137386245 0.776034688949584938733039507497 0.11905014514923095703125 +-0.325687992572784468237045985006 -0.386269399523735068591179242503 -0.217308850586414359362663617503 +-0.325687992572784468237045985006 0.386269399523735068591179242503 -0.217308850586414359362663617503 +-0.3256849944591522216796875 -0.571135997772216796875 -0.753480970859527587890625 +-0.3256849944591522216796875 0.571135997772216796875 -0.753480970859527587890625 +-0.325622695684432972296207253748 -0.5290010869503021240234375 0.6512508094310760498046875 +-0.325622695684432972296207253748 0.5290010869503021240234375 0.6512508094310760498046875 +-0.325619986653327975201221988755 -0.236576709151268022024439119377 -0.804986125230789162365852007497 +-0.325619986653327975201221988755 -0.236574000120162969418302623126 0.201246745884418487548828125 +-0.325619986653327975201221988755 0.236574000120162969418302623126 0.201246745884418487548828125 +-0.325619986653327975201221988755 0.236576709151268022024439119377 -0.804986125230789162365852007497 +-0.325569544732570659295589621252 -0.778807374835014276648337272491 -0.0998163498938083593170489393742 +-0.325569544732570659295589621252 0.778807374835014276648337272491 -0.0998163498938083593170489393742 +-0.325442409515380892681690738755 -0.158863198757171641961605246252 -0.713337612152099675988381477509 +-0.325442409515380892681690738755 0.158863198757171641961605246252 -0.713337612152099675988381477509 +-0.325438646972179390637336382497 -0.87654788792133331298828125 -0.168087303638458251953125 +-0.325438646972179390637336382497 0.87654788792133331298828125 -0.168087303638458251953125 +-0.325330209732055675164730246252 -0.285731399059295620990184261245 0.415353012084960948602230246252 +-0.325330209732055675164730246252 0.285731399059295620990184261245 0.415353012084960948602230246252 +-0.325281393527984630242855246252 -0.785297173261642389441306022491 0 +-0.325281393527984630242855246252 0.785297173261642389441306022491 0 +-0.325264099240303028448551003748 -0.408579486608505237921207253748 0.466118103265762306897102007497 +-0.325264099240303028448551003748 0.408579486608505237921207253748 0.466118103265762306897102007497 +-0.325234794616699240954460492503 -0.0552271496504545197914204379686 0.306059387326240550653011496252 +-0.325234794616699240954460492503 0.0552271496504545197914204379686 0.306059387326240550653011496252 +-0.32517810165882110595703125 -0.301736502349376711773487613755 -0.475094097852706898077457253748 +-0.32517810165882110595703125 0.301736502349376711773487613755 -0.475094097852706898077457253748 +-0.325174808502197265625 -0.0164992004632949842979350307814 0.232355594635009765625 +-0.325174808502197265625 0.0164992004632949842979350307814 0.232355594635009765625 +-0.325086435675621066021534488755 -0.480273303389549266473323996252 0.293523757159709963726612613755 +-0.325086435675621066021534488755 0.480273303389549266473323996252 0.293523757159709963726612613755 +-0.325076703727245341912777121252 -0.188418256491422630993781694997 -0.87253887951374053955078125 +-0.325076703727245341912777121252 0.188418256491422630993781694997 -0.87253887951374053955078125 +-0.3250764906406402587890625 -0.402117806673049915655582253748 -0.471833604574203480108707253748 +-0.3250764906406402587890625 0.402117806673049915655582253748 -0.471833604574203480108707253748 +-0.324998043477535247802734375 -0.128845595568418513909847433752 0.547974056005477883068977007497 +-0.324998043477535247802734375 0.128845595568418513909847433752 0.547974056005477883068977007497 +-0.324931812286376964227230246252 -0.369271194934844948498664507497 -0.343595409393310513568309261245 +-0.324931812286376964227230246252 0.369271194934844948498664507497 -0.343595409393310513568309261245 +-0.324726998805999755859375 -0.78643000125885009765625 -0.525433003902435302734375 +-0.324726998805999755859375 0.78643000125885009765625 -0.525433003902435302734375 +-0.324724495410919189453125 -0.3802025020122528076171875 0 +-0.324724495410919189453125 0.3802025020122528076171875 0 +-0.32471360266208648681640625 -0.636976388096809342798110264994 -0.459697863459587074963508257497 +-0.32471360266208648681640625 0.636976388096809342798110264994 -0.459697863459587074963508257497 +-0.324382495880126964227230246252 -0.414790213108062744140625 -0.729880195856094426964943977509 +-0.324382495880126964227230246252 0.414790213108062744140625 -0.729880195856094426964943977509 +-0.324115210771560635638621761245 -0.444119054079055775030582253748 0.648234626650810219494758257497 +-0.324115210771560635638621761245 0.444119054079055775030582253748 0.648234626650810219494758257497 +-0.324092486500740017962840511245 -0.589223274588584922106804242503 -0.671028676629066400671774772491 +-0.324092486500740017962840511245 0.589223274588584922106804242503 -0.671028676629066400671774772491 +-0.324068796634674083367855246252 -0.0731885038316249930678836221887 -0.438318097591400168688835492503 +-0.324068796634674083367855246252 0.0731885038316249930678836221887 -0.438318097591400168688835492503 +-0.324058896303176913189503238755 -0.408921161293983481677116742503 0.173980951309204129318075615629 +-0.324058896303176913189503238755 0.408921161293983481677116742503 0.173980951309204129318075615629 +-0.324051749706268321649105246252 -0.310480493307113691869858485006 -0.317950588464736949578792746252 +-0.324051749706268321649105246252 0.310480493307113691869858485006 -0.317950588464736949578792746252 +-0.324031700193881999627620871252 -0.870286473631858736865751779987 0.200263800472021080700812944997 +-0.324031700193881999627620871252 0.870286473631858736865751779987 0.200263800472021080700812944997 +-0.3237969875335693359375 -0.2759265005588531494140625 0.2627165019512176513671875 +-0.3237969875335693359375 0.2759265005588531494140625 0.2627165019512176513671875 +-0.323756790161132845806690738755 -0.0263951987028121955181081403907 -0.233419990539550786801115123126 +-0.323756790161132845806690738755 0.0263951987028121955181081403907 -0.233419990539550786801115123126 +-0.32373559474945068359375 -0.146410000324249278680355246252 -0.183737194538116460629240123126 +-0.32373559474945068359375 0.146410000324249278680355246252 -0.183737194538116460629240123126 +-0.323708391189575228619190738755 -0.0785643994808197104751101846887 -0.221451210975646989309595369377 +-0.323708391189575228619190738755 0.0785643994808197104751101846887 -0.221451210975646989309595369377 +-0.323671197891235384869190738755 -0.6784207820892333984375 0.273829603195190451891960492503 +-0.323671197891235384869190738755 0.6784207820892333984375 0.273829603195190451891960492503 +-0.32363279163837432861328125 -0.302543091773986805304019753748 0.0789268501102924346923828125 +-0.32363279163837432861328125 0.302543091773986805304019753748 0.0789268501102924346923828125 +-0.323608596622943889276058371252 -0.7030418217182159423828125 -0.351438455283641815185546875 +-0.323608596622943889276058371252 0.7030418217182159423828125 -0.351438455283641815185546875 +-0.3236072063446044921875 -0.235113191604614274465845369377 0 +-0.3236072063446044921875 0.235113191604614274465845369377 0 +-0.323560202121734585833934261245 -0.380744397640228271484375 0.332178604602813731805355246252 +-0.323560202121734585833934261245 0.380744397640228271484375 0.332178604602813731805355246252 +-0.32355178892612457275390625 -0.0895918495953083038330078125 -0.299646010994911227154346988755 +-0.32355178892612457275390625 0.0895918495953083038330078125 -0.299646010994911227154346988755 +-0.323527488112449634893863503748 -0.17365680634975433349609375 -0.260140505433082591668636496252 +-0.323527488112449634893863503748 0.17365680634975433349609375 -0.260140505433082591668636496252 +-0.32352121174335479736328125 -0.756156617403030417712272992503 0.365460312366485629009815738755 +-0.32352121174335479736328125 0.756156617403030417712272992503 0.365460312366485629009815738755 +-0.323388791084289584087940738755 -0.04415319859981536865234375 0.231236410140991222039730246252 +-0.323388791084289584087940738755 0.04415319859981536865234375 0.231236410140991222039730246252 +-0.323361003398895285876335492503 -0.0299546990543603890155832658593 -0.31151296198368072509765625 +-0.323361003398895285876335492503 0.0299546990543603890155832658593 -0.31151296198368072509765625 +-0.323358348011970497815070757497 -0.13393799960613250732421875 0 +-0.323358348011970497815070757497 0.13393799960613250732421875 0 +-0.323282310366630576403679242503 -0.444959351420402549059929242503 0 +-0.323282310366630576403679242503 0.444959351420402549059929242503 0 +-0.323201707005500826763721988755 -0.257422944903373751568409488755 0.178252650797367101498380748126 +-0.323201707005500826763721988755 0.257422944903373751568409488755 0.178252650797367101498380748126 +-0.323061752319335926397769753748 -0.616969916224479608679587272491 0.646126335859298683850227007497 +-0.323061752319335926397769753748 0.616969916224479608679587272491 0.646126335859298683850227007497 +-0.3229660093784332275390625 -0.302869498729705810546875 -0.232299506664276123046875 +-0.3229660093784332275390625 0.302869498729705810546875 -0.232299506664276123046875 +-0.3229509890079498291015625 -0.277368485927581787109375 -0.2622390091419219970703125 +-0.3229509890079498291015625 0.277368485927581787109375 -0.2622390091419219970703125 +-0.322950017452240001336605246252 -0.449660396575927712170539507497 -0.231319802999496448858707253748 +-0.322950017452240001336605246252 0.449660396575927712170539507497 -0.231319802999496448858707253748 +-0.322949838638305675164730246252 -0.577070930600166343005241742503 0.53403373062610626220703125 +-0.322949838638305675164730246252 0.577070930600166343005241742503 0.53403373062610626220703125 +-0.3227230012416839599609375 -0.35030949115753173828125 0.152095496654510498046875 +-0.3227230012416839599609375 0.35030949115753173828125 0.152095496654510498046875 +-0.322683191299438509869190738755 0 -0.732035207748413130346420985006 +-0.32266934216022491455078125 -0.161200346052646631411775501874 0.269070303440094027447315738755 +-0.32266934216022491455078125 0.161200346052646631411775501874 0.269070303440094027447315738755 +-0.322667452692985523565738503748 -0.0671219520270824321350744412484 0.117814904451370230931139815311 +-0.322667452692985523565738503748 0.0671219520270824321350744412484 0.117814904451370230931139815311 +-0.322622308135032620501903011245 -0.118721404671669000796541126874 0.0657268516719341222565020643742 +-0.322622308135032620501903011245 0.118721404671669000796541126874 0.0657268516719341222565020643742 +-0.322512742877006486352797764994 -0.0515942007303237873405699076557 -0.125792098045349104440404630623 +-0.322512742877006486352797764994 0.0515942007303237873405699076557 -0.125792098045349104440404630623 +-0.322508990764617919921875 -0.348157502710819244384765625 -0.580753505229949951171875 +-0.322508990764617919921875 0.348157502710819244384765625 -0.580753505229949951171875 +-0.322379040718078602179019753748 -0.117140802741050709112613503748 -0.0696408994495868599594601278113 +-0.322379040718078602179019753748 0.117140802741050709112613503748 -0.0696408994495868599594601278113 +-0.322268009185791015625 -0.495344018936157259869190738755 0.539238405227661199425881477509 +-0.322268009185791015625 0.495344018936157259869190738755 0.539238405227661199425881477509 +-0.32222650945186614990234375 -0.4454901218414306640625 -0.648234626650810219494758257497 +-0.32222650945186614990234375 0.4454901218414306640625 -0.648234626650810219494758257497 +-0.322168207168579079358039507497 -0.1845923960208892822265625 0.471310186386108387335269753748 +-0.322168207168579079358039507497 0.1845923960208892822265625 0.471310186386108387335269753748 +-0.322165897488594032971320757497 0 -0.893705877661704950476462272491 +-0.322109997272491455078125 -0.859847009181976318359375 -0.3961170017719268798828125 +-0.322109997272491455078125 0.859847009181976318359375 -0.3961170017719268798828125 +-0.321981793642044045178352007497 -0.103600700199604031648270563437 -0.089970298111438751220703125 +-0.321981793642044045178352007497 0.103600700199604031648270563437 -0.089970298111438751220703125 +-0.321930703520774796899672764994 -0.233895894885063154733373380623 -0.575893479585647516394431022491 +-0.321930703520774796899672764994 0.233895894885063154733373380623 -0.575893479585647516394431022491 +-0.3219139873981475830078125 -0.06662750244140625 -0.376738488674163818359375 +-0.3219139873981475830078125 0.06662750244140625 -0.376738488674163818359375 +-0.321892404556274436266960492503 -0.193774402141571044921875 0.13724720478057861328125 +-0.321892404556274436266960492503 0.193774402141571044921875 0.13724720478057861328125 +-0.321843898296356178967414507497 -0.131261901557445520571931751874 0.0410724990069866180419921875 +-0.321843898296356178967414507497 0.131261901557445520571931751874 0.0410724990069866180419921875 +-0.321801094710826851574836382497 -0.374426351487636532855418636245 -0.811633434891700700219985264994 +-0.321801094710826851574836382497 0.374426351487636532855418636245 -0.811633434891700700219985264994 +-0.321780200302600849493472878748 0 0.893844550848007179943977007497 +-0.321384358406066883429019753748 -0.105439245700836181640625 0.089970298111438751220703125 +-0.321384358406066883429019753748 0.105439245700836181640625 0.089970298111438751220703125 +-0.321353602409362837377670985006 -0.233475589752197287829460492503 0.0471275985240936293174662807814 +-0.321353602409362837377670985006 0.233475589752197287829460492503 0.0471275985240936293174662807814 +-0.321205490827560391497996761245 -0.130110402405261976754857755623 -0.0489723481237888322303852817186 +-0.321205490827560391497996761245 0.130110402405261976754857755623 -0.0489723481237888322303852817186 +-0.321154886484146140368522992503 -0.440826651453971873895198996252 0.0709345966577529934982138115629 +-0.321154886484146140368522992503 0.440826651453971873895198996252 0.0709345966577529934982138115629 +-0.321055704355239834857371761245 -0.0142240000888705243192733362889 -0.1386398971080780029296875 +-0.321055704355239834857371761245 0.0142240000888705243192733362889 -0.1386398971080780029296875 +-0.32101200520992279052734375 -0.086299203336238861083984375 0.303321146965026877673210492503 +-0.32101200520992279052734375 0.086299203336238861083984375 0.303321146965026877673210492503 +-0.320968189835548367572215511245 -0.29091370105743408203125 0.549861884117126442639289507497 +-0.320968189835548367572215511245 0.29091370105743408203125 0.549861884117126442639289507497 +-0.320818006992340087890625 -0.13279099762439727783203125 -0.93778598308563232421875 +-0.320818006992340087890625 0.13279099762439727783203125 -0.93778598308563232421875 +-0.320815503597259521484375 -0.3267475068569183349609375 -0.20078249275684356689453125 +-0.320815503597259521484375 0.3267475068569183349609375 -0.20078249275684356689453125 +-0.320807850360870394634815738755 0 -0.446746295690536532330128238755 +-0.32075639069080352783203125 -0.307286095619201671258480246252 0.782745301723480224609375 +-0.32075639069080352783203125 0.307286095619201671258480246252 0.782745301723480224609375 +-0.320724901556968700067073996252 -0.301324939727783236431690738755 -0.0940148994326591574965945596887 +-0.320724901556968700067073996252 0.301324939727783236431690738755 -0.0940148994326591574965945596887 +-0.320719058811664570196597878748 -0.0770829968154430333893145643742 0.890896683931350685803352007497 +-0.320719058811664570196597878748 0.0770829968154430333893145643742 0.890896683931350685803352007497 +-0.320645695924758944439503238755 -0.6007491052150726318359375 -0.588462281227111860815170985006 +-0.320645695924758944439503238755 0.6007491052150726318359375 -0.588462281227111860815170985006 +-0.320579253137111663818359375 -0.0500317476689815521240234375 -0.6761842668056488037109375 +-0.320579253137111663818359375 0.0500317476689815521240234375 -0.6761842668056488037109375 +-0.3204857409000396728515625 -0.487359595298767100945980246252 -0.286826793849468242303402121252 +-0.3204857409000396728515625 0.487359595298767100945980246252 -0.286826793849468242303402121252 +-0.3204205036163330078125 -0.37932550907135009765625 0.058674998581409454345703125 +-0.3204205036163330078125 0.37932550907135009765625 0.058674998581409454345703125 +-0.32039558887481689453125 -0.232780003547668479235710492503 -0.0562143981456756647308026231258 +-0.32039558887481689453125 0.232780003547668479235710492503 -0.0562143981456756647308026231258 +-0.3202820122241973876953125 -0.15062700212001800537109375 0.3531725108623504638671875 +-0.3202820122241973876953125 0.15062700212001800537109375 0.3531725108623504638671875 +-0.320213706791400876117137386245 -0.232646696269512176513671875 0.752222785353660605700554242503 +-0.320213706791400876117137386245 0.232646696269512176513671875 0.752222785353660605700554242503 +-0.320096802711486827508480246252 -0.135646796226501470394865123126 0.197833204269409201891960492503 +-0.320096802711486827508480246252 0.135646796226501470394865123126 0.197833204269409201891960492503 +-0.320018194615840911865234375 -0.681274157762527421411391514994 0.394909997284412395135433371252 +-0.320018194615840911865234375 0.681274157762527421411391514994 0.394909997284412395135433371252 +-0.320009234547615095678452235006 -0.441658803820610068591179242503 -0.0709345966577529934982138115629 +-0.320009234547615095678452235006 0.441658803820610068591179242503 -0.0709345966577529934982138115629 +-0.319952392578125022204460492503 -0.0718371987342834444900674384371 0.229063200950622575247095369377 +-0.319952392578125022204460492503 0.0718371987342834444900674384371 0.229063200950622575247095369377 +-0.319893741607666037829460492503 -0.277311661839485190661491742503 0.351092505455017134252670985006 +-0.319893741607666037829460492503 0.277311661839485190661491742503 0.351092505455017134252670985006 +-0.319790092110633805688735264994 -0.0893119469285011263748330634371 -0.110714451968669885806306751874 +-0.319790092110633805688735264994 0.0893119469285011263748330634371 -0.110714451968669885806306751874 +-0.319630500674247697290297764994 0 0.142606098949909193551732755623 +-0.319579596817493427618472878748 -0.761940839886665277624899772491 -0.199536653608083730526701060626 +-0.319579596817493427618472878748 0.761940839886665277624899772491 -0.199536653608083730526701060626 +-0.319558194279670748638721988755 -0.178547842800617223568693248126 0.53712488710880279541015625 +-0.319558194279670748638721988755 0.178547842800617223568693248126 0.53712488710880279541015625 +-0.319504903256893180163444867503 -0.430845347046852122918636496252 -0.367136248946189902575554242503 +-0.319504903256893180163444867503 0.430845347046852122918636496252 -0.367136248946189902575554242503 +-0.319491696357727061883480246252 -0.409935355186462457854901231258 -0.179939098656177548507528740629 +-0.319491696357727061883480246252 0.409935355186462457854901231258 -0.179939098656177548507528740629 +-0.319335302710533175396534488755 -0.661310112476348854748664507497 0.520282781124114968029914507497 +-0.319335302710533175396534488755 0.661310112476348854748664507497 0.520282781124114968029914507497 +-0.319233137369155872686832253748 -0.277037537097930941509815738755 0.15440310537815093994140625 +-0.319233137369155872686832253748 0.277037537097930941509815738755 0.15440310537815093994140625 +-0.319108508527278900146484375 -0.50062425434589385986328125 -0.4583069980144500732421875 +-0.319108508527278900146484375 0.50062425434589385986328125 -0.4583069980144500732421875 +-0.319105616211891207623096988755 -0.186561650037765508480802623126 0.407266756892204317974659488755 +-0.319105616211891207623096988755 0.186561650037765508480802623126 0.407266756892204317974659488755 +-0.3190974891185760498046875 -0.131431996822357177734375 -0.361804485321044921875 +-0.3190974891185760498046875 0.131431996822357177734375 -0.361804485321044921875 +-0.31902599334716796875 0 -0.3849965035915374755859375 +-0.31899225711822509765625 -0.231758259236812591552734375 0.6379905045032501220703125 +-0.31899225711822509765625 0.231758259236812591552734375 0.6379905045032501220703125 +-0.3189752101898193359375 -0.211651992797851573602230246252 0.116009199619293221217297684689 +-0.3189752101898193359375 0.211651992797851573602230246252 0.116009199619293221217297684689 +-0.318911457061767600329460492503 -0.564547118544578618859475227509 0.0456286996603012112716513115629 +-0.318911457061767600329460492503 0.564547118544578618859475227509 0.0456286996603012112716513115629 +-0.318775200843811057360710492503 -0.363188004493713412212940738755 0.637555980682373069079460492503 +-0.318775200843811057360710492503 0.363188004493713412212940738755 0.637555980682373069079460492503 +-0.3187087476253509521484375 -0.62310826778411865234375 -0.269555993378162384033203125 +-0.3187087476253509521484375 0.62310826778411865234375 -0.269555993378162384033203125 +-0.3185735046863555908203125 -0.3789674937725067138671875 -0.069960497319698333740234375 +-0.3185735046863555908203125 0.3789674937725067138671875 -0.069960497319698333740234375 +-0.318548305332660652844367632497 -0.778244736790656976843649772491 -0.441996999084949493408203125 +-0.318548305332660652844367632497 0.778244736790656976843649772491 -0.441996999084949493408203125 +-0.318547594547271717413394753748 -0.0287843495607376063938342980464 0.142122745513916015625 +-0.318547594547271717413394753748 0.0287843495607376063938342980464 0.142122745513916015625 +-0.318511706590652476922542746252 -0.565321242809295632092414507497 -0.0382381999865174307395854214064 +-0.318511706590652476922542746252 0.565321242809295632092414507497 -0.0382381999865174307395854214064 +-0.318506997823715165552016514994 -0.615540081262588412158720529987 0.0983024001121520912827023153113 +-0.318506997823715165552016514994 0.615540081262588412158720529987 0.0983024001121520912827023153113 +-0.318274599313735917505141514994 -0.617985898256301791064970529987 -0.0824312977492809295654296875 +-0.318274599313735917505141514994 0.617985898256301791064970529987 -0.0824312977492809295654296875 +-0.318198609352111805304019753748 -0.3181976974010467529296875 0 +-0.318198609352111805304019753748 0.3181976974010467529296875 0 +-0.3181642591953277587890625 -0.41502450406551361083984375 0.53761200606822967529296875 +-0.3181642591953277587890625 0.41502450406551361083984375 0.53761200606822967529296875 +-0.318101406097412109375 -0.200482195615768438168302623126 -0.467566215991973843646434261245 +-0.318101406097412109375 0.200482195615768438168302623126 -0.467566215991973843646434261245 +-0.31789393723011016845703125 -0.146667145192623138427734375 -0.282722854614257834704460492503 +-0.31789393723011016845703125 0.146667145192623138427734375 -0.282722854614257834704460492503 +-0.317863652110099814684929242503 -0.04338164813816547393798828125 -0.565314733982086203845085492503 +-0.317863652110099814684929242503 0.04338164813816547393798828125 -0.565314733982086203845085492503 +-0.317823195457458518298210492503 -0.129009199142456065789730246252 -0.20577919483184814453125 +-0.317823195457458518298210492503 0.129009199142456065789730246252 -0.20577919483184814453125 +-0.31781820952892303466796875 -0.0915414497256278880676916287484 0.114506354928016654270983565311 +-0.31781820952892303466796875 0.0915414497256278880676916287484 0.114506354928016654270983565311 +-0.3177936971187591552734375 -0.6237041950225830078125 0 +-0.3177936971187591552734375 0.6237041950225830078125 0 +-0.317676100134849537237613503748 -0.145457549393177010266242632497 0.0205897999927401528785786410936 +-0.317676100134849537237613503748 0.145457549393177010266242632497 0.0205897999927401528785786410936 +-0.31766879558563232421875 -0.178143596649169927426115123126 0.165382802486419677734375 +-0.31766879558563232421875 0.178143596649169927426115123126 0.165382802486419677734375 +-0.317612385749816872326789507497 -0.469669783115386929583934261245 0.1962971985340118408203125 +-0.317612385749816872326789507497 0.469669783115386929583934261245 0.1962971985340118408203125 +-0.317605045437812760766860264994 -0.144994150102138508184879128748 -0.0245692998170852633377236884371 +-0.317605045437812760766860264994 0.144994150102138508184879128748 -0.0245692998170852633377236884371 +-0.31743000447750091552734375 -0.609124481678009033203125 0.301173739135265350341796875 +-0.31743000447750091552734375 0.609124481678009033203125 0.301173739135265350341796875 +-0.317413042485713947638004128748 -0.851959982514381319873564279987 -0.275521849095821391717464621252 +-0.317413042485713947638004128748 0.851959982514381319873564279987 -0.275521849095821391717464621252 +-0.317266607284545865130809261245 -0.5095671117305755615234375 0.360115009546279896124332253748 +-0.317266607284545865130809261245 0.5095671117305755615234375 0.360115009546279896124332253748 +-0.317197048664092984271434261245 -0.752044296264648415295539507497 0.237308108806610101870759876874 +-0.317197048664092984271434261245 0.752044296264648415295539507497 0.237308108806610101870759876874 +-0.316964399814605723992855246252 -0.342682206630706753802684261245 -0.376964986324310302734375 +-0.316964399814605723992855246252 0.342682206630706753802684261245 -0.376964986324310302734375 +-0.3168776035308837890625 -0.555969065427780129162727007497 -0.113959946483373639192215875937 +-0.3168776035308837890625 0.555969065427780129162727007497 -0.113959946483373639192215875937 +-0.3167504966259002685546875 -0.23013000190258026123046875 0.3109810054302215576171875 +-0.3167504966259002685546875 0.23013000190258026123046875 0.3109810054302215576171875 +-0.3167180120944976806640625 -0.255600988864898681640625 -0.29044449329376220703125 +-0.3167180120944976806640625 0.255600988864898681640625 -0.29044449329376220703125 +-0.316605259478092204705745871252 -0.551217544078826948705795985006 0.135721948742866527215511496252 +-0.316605259478092204705745871252 0.551217544078826948705795985006 0.135721948742866527215511496252 +-0.316556513309478759765625 -0.3485175073146820068359375 -0.16830749809741973876953125 +-0.316556513309478759765625 0.3485175073146820068359375 -0.16830749809741973876953125 +-0.316496604681014981341746761245 -0.0372725512832403141350035014057 -0.144708898663520796334935880623 +-0.316496604681014981341746761245 0.0372725512832403141350035014057 -0.144708898663520796334935880623 +-0.316350004076957680432258257497 -0.151629503071308124884097878748 0.882853978872299105518095529987 +-0.316350004076957680432258257497 0.151629503071308124884097878748 0.882853978872299105518095529987 +-0.316264796257019087377670985006 -0.0526619970798492473273988423443 -0.239172410964965831414730246252 +-0.316264796257019087377670985006 0.0526619970798492473273988423443 -0.239172410964965831414730246252 +-0.31622898578643798828125 -0.70710098743438720703125 0.632461011409759521484375 +-0.31622898578643798828125 0.70710098743438720703125 0.632461011409759521484375 +-0.316154408454895063940170985006 -0.459563207626342784539730246252 -0.573452806472778298108039507497 +-0.316154408454895063940170985006 0.459563207626342784539730246252 -0.573452806472778298108039507497 +-0.316126796603202864233139735006 -0.285590240359306357653679242503 -0.347853556275367792327557481258 +-0.316126796603202864233139735006 0.285590240359306357653679242503 -0.347853556275367792327557481258 +-0.31612174212932586669921875 -0.0530414499342441517204527201557 0.140547400712966896740852007497 +-0.31612174212932586669921875 0.0530414499342441517204527201557 0.140547400712966896740852007497 +-0.315929251909255970343082253748 -0.0745573483407497294983556912484 -0.130880749225616460629240123126 +-0.315929251909255970343082253748 0.0745573483407497294983556912484 -0.130880749225616460629240123126 +-0.315905153751373291015625 -0.146033807098865514584318248126 -0.425885346531867992059261496252 +-0.315905153751373291015625 0.146033807098865514584318248126 -0.425885346531867992059261496252 +-0.315438008308410622326789507497 0 -0.510391187667846635278579014994 +-0.315217503905296347888054242503 -0.507130661606788657458366742503 0.256820209324359893798828125 +-0.315217503905296347888054242503 0.507130661606788657458366742503 0.256820209324359893798828125 +-0.315020406246185269427684261245 -0.474066603183746326788394753748 -0.189796793460845936163394753748 +-0.315020406246185269427684261245 0.474066603183746326788394753748 -0.189796793460845936163394753748 +-0.3149392604827880859375 -0.67862923443317413330078125 0.05268749780952930450439453125 +-0.3149392604827880859375 0.67862923443317413330078125 0.05268749780952930450439453125 +-0.314910793304443381579460492503 -0.0989283978939056451995526231258 0.225929594039916997738615123126 +-0.314910793304443381579460492503 0.0989283978939056451995526231258 0.225929594039916997738615123126 +-0.314898358285427115710319867503 -0.335474756360054027215511496252 0.459124884009361300396534488755 +-0.314898358285427115710319867503 0.335474756360054027215511496252 0.459124884009361300396534488755 +-0.314841592311859097552684261245 -0.327061808109283425061164507497 0.392307615280151344983039507497 +-0.314841592311859097552684261245 0.327061808109283425061164507497 0.392307615280151344983039507497 +-0.3147304058074951171875 -0.0325392007827758830695863423443 0.7347695827484130859375 +-0.3147304058074951171875 0.0325392007827758830695863423443 0.7347695827484130859375 +-0.314646743237972259521484375 -0.67937399446964263916015625 -0.044144251383841037750244140625 +-0.314646743237972259521484375 0.67937399446964263916015625 -0.044144251383841037750244140625 +-0.314606702327728304791065738755 -0.31735575199127197265625 0.05299154855310916900634765625 +-0.314606702327728304791065738755 0.31735575199127197265625 0.05299154855310916900634765625 +-0.3145680129528045654296875 -0.325527012348175048828125 -0.89167201519012451171875 +-0.3145680129528045654296875 0.325527012348175048828125 -0.89167201519012451171875 +-0.314507907629013039318977007497 -0.0931490048766136086166866903113 -0.618391907215118385998664507497 +-0.314507907629013039318977007497 0.0931490048766136086166866903113 -0.618391907215118385998664507497 +-0.314504790306091353002670985006 -0.228499197959899924548210492503 0.0942059993743896567641726846887 +-0.314504790306091353002670985006 0.228499197959899924548210492503 0.0942059993743896567641726846887 +-0.314429509639739979132144753748 -0.603867584466934115283720529987 -0.162719897925853729248046875 +-0.314429509639739979132144753748 0.603867584466934115283720529987 -0.162719897925853729248046875 +-0.314419510960578907354801003748 -0.117695693671703335847489313437 0.299646896123886119500667746252 +-0.314419510960578907354801003748 0.117695693671703335847489313437 0.299646896123886119500667746252 +-0.314370596408843960833934261245 -0.504106199741363503186164507497 0.0839525967836379921616085653113 +-0.314370596408843960833934261245 0.504106199741363503186164507497 0.0839525967836379921616085653113 +-0.314107990264892611431690738755 -0.627072000503540061266960492503 -0.384858393669128440173210492503 +-0.314107990264892611431690738755 0.627072000503540061266960492503 -0.384858393669128440173210492503 +-0.314105610549449909552066628748 -0.60458631813526153564453125 -0.50824476778507232666015625 +-0.314105610549449909552066628748 0.60458631813526153564453125 -0.50824476778507232666015625 +-0.314094007015228271484375 -0.506346595287322953637954014994 -0.07040999829769134521484375 +-0.314094007015228271484375 0.506346595287322953637954014994 -0.07040999829769134521484375 +-0.314004600048065185546875 -0.1419001519680023193359375 0.0613630481064319568962339701557 +-0.314004600048065185546875 0.1419001519680023193359375 0.0613630481064319568962339701557 +-0.31386280059814453125 -0.187370800971984885485710492503 -0.162426400184631364309595369377 +-0.31386280059814453125 0.187370800971984885485710492503 -0.162426400184631364309595369377 +-0.313827860355377186163394753748 -0.128979545831680281198217130623 0.0858851015567779485504473768742 +-0.313827860355377186163394753748 0.128979545831680281198217130623 0.0858851015567779485504473768742 +-0.3137814998626708984375 -0.369441986083984375 0.122693501412868499755859375 +-0.3137814998626708984375 0.369441986083984375 0.122693501412868499755859375 +-0.313736861944198641705128238755 -0.295325991511344920770198996252 0.129815094172954559326171875 +-0.313736861944198641705128238755 0.295325991511344920770198996252 0.129815094172954559326171875 +-0.313653895258903470111278011245 -0.5213067829608917236328125 -0.34620879590511322021484375 +-0.313653895258903470111278011245 0.5213067829608917236328125 -0.34620879590511322021484375 +-0.313647386431694041863948996252 -0.429111084342002901959034488755 0.141382454335689550228849498126 +-0.313647386431694041863948996252 0.429111084342002901959034488755 0.141382454335689550228849498126 +-0.313586550951004017218082253748 -0.2278313934803009033203125 0.228596413135528558902009876874 +-0.313586550951004017218082253748 0.2278313934803009033203125 0.228596413135528558902009876874 +-0.313499414920806851458934261245 -0.511583983898162841796875 0 +-0.313499414920806851458934261245 0.511583983898162841796875 0 +-0.313488744199275970458984375 -0.52892325818538665771484375 0.42949426174163818359375 +-0.313488744199275970458984375 0.52892325818538665771484375 0.42949426174163818359375 +-0.313397714495658896716179242503 -0.360952350497245832983139735006 0.272021196782588958740234375 +-0.313397714495658896716179242503 0.360952350497245832983139735006 0.272021196782588958740234375 +-0.313244009017944358141960492503 -0.6069176197052001953125 0.416568803787231489721420985006 +-0.313244009017944358141960492503 0.6069176197052001953125 0.416568803787231489721420985006 +-0.313242006301879927221420985006 -0.207187199592590354235710492503 -0.137669599056243902035490123126 +-0.313242006301879927221420985006 0.207187199592590354235710492503 -0.137669599056243902035490123126 +-0.313220405578613303454460492503 0 -0.248783206939697271176115123126 +-0.313214802742004416735710492503 -0.247673606872558599301115123126 0.0235464006662368802169638115629 +-0.313214802742004416735710492503 0.247673606872558599301115123126 0.0235464006662368802169638115629 +-0.313065907359123263287159488755 -0.31701149046421051025390625 -0.0631939508020877838134765625 +-0.313065907359123263287159488755 0.31701149046421051025390625 -0.0631939508020877838134765625 +-0.313051202893257107806590511245 -0.5954535901546478271484375 0.193477892875671381167634876874 +-0.313051202893257107806590511245 0.5954535901546478271484375 0.193477892875671381167634876874 +-0.313049754500389132427784488755 -0.260627253353595766949268863755 -0.50653068721294403076171875 +-0.313049754500389132427784488755 0.260627253353595766949268863755 -0.50653068721294403076171875 +-0.313048741221427895276008257497 0 -0.156525246798992156982421875 +-0.313047698140144325940070757497 -0.3680088818073272705078125 -0.5065284073352813720703125 +-0.313047698140144325940070757497 0.3680088818073272705078125 -0.5065284073352813720703125 +-0.313047009706497181280582253748 0 0.626100319623947076941306022491 +-0.312995146214961994513004128748 -0.515221211314201399389389735006 -0.243065546452999131643579744377 +-0.312995146214961994513004128748 0.515221211314201399389389735006 -0.243065546452999131643579744377 +-0.312917995452880903783920985006 -0.105063605308532717619307561563 -0.225929188728332536184595369377 +-0.312917995452880903783920985006 0.105063605308532717619307561563 -0.225929188728332536184595369377 +-0.31288678944110870361328125 -0.05975639820098876953125 -0.317853891849517844470085492503 +-0.31288678944110870361328125 0.05975639820098876953125 -0.317853891849517844470085492503 +-0.312879748642444610595703125 -0.668806493282318115234375 -0.1315447501838207244873046875 +-0.312879748642444610595703125 0.668806493282318115234375 -0.1315447501838207244873046875 +-0.3128699958324432373046875 -0.749383985996246337890625 -0.5835549831390380859375 +-0.3128699958324432373046875 0.749383985996246337890625 -0.5835549831390380859375 +-0.31282079219818115234375 -0.247695994377136241570980246252 -0.028105199337005615234375 +-0.31282079219818115234375 0.247695994377136241570980246252 -0.028105199337005615234375 +-0.312658488750457763671875 -0.02065050043165683746337890625 0.3896389901638031005859375 +-0.312658488750457763671875 0.02065050043165683746337890625 0.3896389901638031005859375 +-0.312657943367958102154346988755 0 0.452487733960151683465511496252 +-0.312638358771800961566356136245 -0.835374918580055192407485264994 0.326965297758579243048160378748 +-0.312638358771800961566356136245 0.835374918580055192407485264994 0.326965297758579243048160378748 +-0.3126179873943328857421875 -0.22712950408458709716796875 -0.3173049986362457275390625 +-0.3126179873943328857421875 0.22712950408458709716796875 -0.3173049986362457275390625 +-0.312613213062286343646434261245 -0.0801132023334503173828125 -0.5058209896087646484375 +-0.312613213062286343646434261245 0.0801132023334503173828125 -0.5058209896087646484375 +-0.312607747316360429223891514994 -0.126556155085563643014623380623 -0.0935942023992538396637286268742 +-0.312607747316360429223891514994 0.126556155085563643014623380623 -0.0935942023992538396637286268742 +-0.312541186809539794921875 -0.841617000102996892785256477509 0.06323669850826263427734375 +-0.312541186809539794921875 0.841617000102996892785256477509 0.06323669850826263427734375 +-0.312482404708862349096420985006 -0.095260798931121826171875 0.730259990692138760692841970013 +-0.312482404708862349096420985006 0.095260798931121826171875 0.730259990692138760692841970013 +-0.312448494136333465576171875 -0.66356925666332244873046875 0.1566922478377819061279296875 +-0.312448494136333465576171875 0.66356925666332244873046875 0.1566922478377819061279296875 +-0.312381294369697526391860264994 -0.139917755126953119448884876874 -0.0730806998908519744873046875 +-0.312381294369697526391860264994 0.139917755126953119448884876874 -0.0730806998908519744873046875 +-0.312218087911605823858707253748 -0.842444998025894231652443977509 -0.0529794014990329770187216240629 +-0.312218087911605823858707253748 0.842444998025894231652443977509 -0.0529794014990329770187216240629 +-0.312156260013580322265625 -0.077039897441864013671875 0.138287450373172748907535378748 +-0.312156260013580322265625 0.077039897441864013671875 0.138287450373172748907535378748 +-0.312130987644195556640625 -0.827143013477325439453125 0.4673430025577545166015625 +-0.312130987644195556640625 0.827143013477325439453125 0.4673430025577545166015625 +-0.312119087576866183209034488755 -0.190061102807521836721704744377 0.262599313259124778063835492503 +-0.312119087576866183209034488755 0.190061102807521836721704744377 0.262599313259124778063835492503 +-0.312081700563430763928352007497 -0.0549206025898456504097389085928 0.624170410633087091589743522491 +-0.312081700563430763928352007497 0.0549206025898456504097389085928 0.624170410633087091589743522491 +-0.3120734989643096923828125 -0.3078185021877288818359375 0.24053649604320526123046875 +-0.3120734989643096923828125 0.3078185021877288818359375 0.24053649604320526123046875 +-0.311852806806564297747996761245 -0.158895450830459583624332253748 0 +-0.311852806806564297747996761245 0.158895450830459583624332253748 0 +-0.311687995493412028924495871252 -0.1302379034459590911865234375 -0.555327481031417824475227007497 +-0.311687995493412028924495871252 0.1302379034459590911865234375 -0.555327481031417824475227007497 +-0.311597149074077595098941628748 -0.746424478292465165552016514994 0.498255985975265491827457253748 +-0.311597149074077595098941628748 0.746424478292465165552016514994 0.498255985975265491827457253748 +-0.311597001552581798211605246252 -0.0452771008014678996711488423443 0.450951609015464827123764735006 +-0.311597001552581798211605246252 0.0452771008014678996711488423443 0.450951609015464827123764735006 +-0.311478705704212210925163617503 -0.403153386712074290887386496252 -0.403668203949928305895866742503 +-0.311478705704212210925163617503 0.403153386712074290887386496252 -0.403668203949928305895866742503 +-0.311352801322937022820980246252 -0.161339604854583762438835492503 0.192429196834564220086605246252 +-0.311352801322937022820980246252 0.161339604854583762438835492503 0.192429196834564220086605246252 +-0.311345641314983379022152121252 -0.735189667344093300549445757497 -0.29165031015872955322265625 +-0.311345641314983379022152121252 0.735189667344093300549445757497 -0.29165031015872955322265625 +-0.311212646961212147100894753748 -0.115710696578025809544421065311 0.110714796185493458136051003748 +-0.311212646961212147100894753748 0.115710696578025809544421065311 0.110714796185493458136051003748 +-0.311187809705734286236378238755 -0.430898061394691500591846988755 -0.141382454335689550228849498126 +-0.311187809705734286236378238755 0.430898061394691500591846988755 -0.141382454335689550228849498126 +-0.31102760136127471923828125 -0.437004092335700977667301003748 0.367136907577514659539730246252 +-0.31102760136127471923828125 0.437004092335700977667301003748 0.367136907577514659539730246252 +-0.310927739739418007580695757497 -0.112748304009437555484041126874 -0.114506354928016654270983565311 +-0.310927739739418007580695757497 0.112748304009437555484041126874 -0.114506354928016654270983565311 +-0.310651993751525912212940738755 -0.225700807571411143914730246252 -0.1120471954345703125 +-0.310651993751525912212940738755 0.225700807571411143914730246252 -0.1120471954345703125 +-0.310597756505012478900340511245 -0.460941913723945606573551003748 0.770429095625877358166633257497 +-0.310597756505012478900340511245 0.460941913723945606573551003748 0.770429095625877358166633257497 +-0.310594493150711081774772992503 -0.2486029565334320068359375 -0.210303895175457000732421875 +-0.310594493150711081774772992503 0.2486029565334320068359375 -0.210303895175457000732421875 +-0.310431146621704123766960492503 -0.11886705458164215087890625 -0.303320261836051929815738503748 +-0.310431146621704123766960492503 0.11886705458164215087890625 -0.303320261836051929815738503748 +-0.310412207245826687884715511245 -0.0603854984045028644890074076557 -0.149992845952510833740234375 +-0.310412207245826687884715511245 0.0603854984045028644890074076557 -0.149992845952510833740234375 +-0.310393810272216796875 0 -0.32581530511379241943359375 +-0.3103714883327484130859375 -0.0613990016281604766845703125 0.3871684968471527099609375 +-0.3103714883327484130859375 0.0613990016281604766845703125 0.3871684968471527099609375 +-0.310367041826248135638621761245 -0.156440548598766326904296875 0.0412152994424104662796182196871 +-0.310367041826248135638621761245 0.156440548598766326904296875 0.0412152994424104662796182196871 +-0.31029130518436431884765625 -0.2534829080104827880859375 -0.376783013343811090667401231258 +-0.31029130518436431884765625 0.2534829080104827880859375 -0.376783013343811090667401231258 +-0.310279202461242686883480246252 -0.170852804183959983141960492503 -0.185839200019836447985710492503 +-0.310279202461242686883480246252 0.170852804183959983141960492503 -0.185839200019836447985710492503 +-0.3102349936962127685546875 -0.184256494045257568359375 0.3461270034313201904296875 +-0.3102349936962127685546875 0.184256494045257568359375 0.3461270034313201904296875 +-0.310003058612346615863231136245 -0.225227904319763166940404630623 0.869292771816253639904914507497 +-0.310003058612346615863231136245 0.225227904319763166940404630623 0.869292771816253639904914507497 +-0.309948503971099853515625 -0.3688555061817169189453125 -0.13370649516582489013671875 +-0.309948503971099853515625 0.3688555061817169189453125 -0.13370649516582489013671875 +-0.309876747429370880126953125 -0.287008501589298248291015625 0.6197602450847625732421875 +-0.309876747429370880126953125 0.287008501589298248291015625 0.6197602450847625732421875 +-0.30977939069271087646484375 -0.340363806486129738537727007497 0.527436012029647738330595529987 +-0.30977939069271087646484375 0.340363806486129738537727007497 0.527436012029647738330595529987 +-0.3097419440746307373046875 -0.155383896827697737252904630623 -0.0491508506238460540771484375 +-0.3097419440746307373046875 0.155383896827697737252904630623 -0.0491508506238460540771484375 +-0.309731197357177745477230246252 -0.265871191024780295641960492503 -0.688025617599487326891960492503 +-0.309731197357177745477230246252 0.265871191024780295641960492503 -0.688025617599487326891960492503 +-0.309716391563415516241519753748 -0.225019204616546619757144753748 0.461997592449188199115184261245 +-0.309716391563415516241519753748 0.225019204616546619757144753748 0.461997592449188199115184261245 +-0.309685063362121593133480246252 -0.224998645484447479248046875 -0.236581188440322887078792746252 +-0.309685063362121593133480246252 0.224998645484447479248046875 -0.236581188440322887078792746252 +-0.30958874523639678955078125 -0.270674559473991382940738503748 -0.182729700207710260562166126874 +-0.30958874523639678955078125 0.270674559473991382940738503748 -0.182729700207710260562166126874 +-0.309400744736194610595703125 -0.542579197883605979235710492503 -0.715806922316551186291633257497 +-0.309400744736194610595703125 0.542579197883605979235710492503 -0.715806922316551186291633257497 +-0.309368935227394115106136496252 -0.0885516464710235651214276231258 0.446037340164184614721420985006 +-0.309368935227394115106136496252 0.0885516464710235651214276231258 0.446037340164184614721420985006 +-0.30926139652729034423828125 -0.453184187412261907379473768742 0.434719604253768876489516514994 +-0.30926139652729034423828125 0.453184187412261907379473768742 0.434719604253768876489516514994 +-0.309250688552856478619190738755 -0.314185315370559714587272992503 0.32886426150798797607421875 +-0.309250688552856478619190738755 0.314185315370559714587272992503 0.32886426150798797607421875 +-0.309192803502082780298110264994 -0.109502401947975155915848688437 0.6183926165103912353515625 +-0.309192803502082780298110264994 0.109502401947975155915848688437 0.6183926165103912353515625 +-0.309133195877075217516960492503 0 0.253843998908996615337940738755 +-0.309089893102645840716746761245 -0.0144368004053831086586079379686 0.163569352030754067151008257497 +-0.309089893102645840716746761245 0.0144368004053831086586079379686 0.163569352030754067151008257497 +-0.309017002582550048828125 -0.951056003570556640625 0 +-0.309017002582550048828125 0.951056003570556640625 0 +-0.308955502510070756372329014994 -0.02301494963467121124267578125 -0.162839601933956135138004128748 +-0.308955502510070756372329014994 0.02301494963467121124267578125 -0.162839601933956135138004128748 +-0.3087975978851318359375 -0.106604003906250008326672684689 -0.730259990692138760692841970013 +-0.3087975978851318359375 0.106604003906250008326672684689 -0.730259990692138760692841970013 +-0.308737841248512279168636496252 -0.0566134028136730180214009067186 -0.789921170473098732678352007497 +-0.308737841248512279168636496252 0.0566134028136730180214009067186 -0.789921170473098732678352007497 +-0.308729687333107016833366742503 -0.372840303182601917608707253748 0.758733308315277077404914507497 +-0.308729687333107016833366742503 0.372840303182601917608707253748 0.758733308315277077404914507497 +-0.3086659908294677734375 -0.244369196891784684622095369377 0.070773601531982421875 +-0.3086659908294677734375 0.244369196891784684622095369377 0.070773601531982421875 +-0.308648250997066497802734375 -0.466715991497039794921875 -0.49941225349903106689453125 +-0.308648250997066497802734375 0.466715991497039794921875 -0.49941225349903106689453125 +-0.3086329996585845947265625 -0.519254028797149658203125 -0.79694497585296630859375 +-0.3086329996585845947265625 0.519254028797149658203125 -0.79694497585296630859375 +-0.30861198902130126953125 -0.552411973476409912109375 0.7743380069732666015625 +-0.30861198902130126953125 0.552411973476409912109375 0.7743380069732666015625 +-0.30849064886569976806640625 -0.747108501195907548364516514994 -0.499161353707313515393195757497 +-0.30849064886569976806640625 0.747108501195907548364516514994 -0.499161353707313515393195757497 +-0.308399292826652571264389735006 -0.385339358448982260973991742503 0.242699594795703910143913617503 +-0.308399292826652571264389735006 0.385339358448982260973991742503 0.242699594795703910143913617503 +-0.308310297131538402215511496252 -0.8304137885570526123046875 -0.15924060344696044921875 +-0.308310297131538402215511496252 0.8304137885570526123046875 -0.15924060344696044921875 +-0.308085989952087413445980246252 -0.03289639949798583984375 0.252983999252319347039730246252 +-0.308085989952087413445980246252 0.03289639949798583984375 0.252983999252319347039730246252 +-0.308064794540405306744190738755 -0.126708805561065673828125 0.2214519977569580078125 +-0.308064794540405306744190738755 0.126708805561065673828125 0.2214519977569580078125 +-0.3080500066280364990234375 -0.3304400146007537841796875 0.2142769992351531982421875 +-0.3080500066280364990234375 0.3304400146007537841796875 0.2142769992351531982421875 +-0.308012485504150390625 -0.26456451416015625 0.29177749156951904296875 +-0.308012485504150390625 0.26456451416015625 0.29177749156951904296875 +-0.3080120086669921875 -0.157816803455352788754240123126 0.721264791488647527550881477509 +-0.3080120086669921875 0.157816803455352788754240123126 0.721264791488647527550881477509 +-0.307967403531074546130241742503 -0.178501506149768840447933371252 -0.8266157805919647216796875 +-0.307967403531074546130241742503 0.178501506149768840447933371252 -0.8266157805919647216796875 +-0.3078935146331787109375 -0.392857491970062255859375 0.029408000409603118896484375 +-0.3078935146331787109375 0.392857491970062255859375 0.029408000409603118896484375 +-0.3078015148639678955078125 -0.099289499223232269287109375 -0.381313502788543701171875 +-0.3078015148639678955078125 0.099289499223232269287109375 -0.381313502788543701171875 +-0.307738205790519692151008257497 -0.540285187959670953894431022491 0.321541509032249428479133257497 +-0.307738205790519692151008257497 0.540285187959670953894431022491 0.321541509032249428479133257497 +-0.30767904222011566162109375 -0.0981109529733657781402911268742 -0.134936197102069832531867632497 +-0.30767904222011566162109375 0.0981109529733657781402911268742 -0.134936197102069832531867632497 +-0.307651805877685535772769753748 -0.416264998912811268194644753748 0.303436195850372292248664507497 +-0.307651805877685535772769753748 0.416264998912811268194644753748 0.303436195850372292248664507497 +-0.30761849880218505859375 -0.033354498445987701416015625 -0.392756998538970947265625 +-0.30761849880218505859375 0.033354498445987701416015625 -0.392756998538970947265625 +-0.307558354735374461785823996252 -0.03670754842460155487060546875 -0.454489207267761263775440738755 +-0.307558354735374461785823996252 0.03670754842460155487060546875 -0.454489207267761263775440738755 +-0.307544410228729248046875 -0.314464187622070290295539507497 -0.408079791069030750616519753748 +-0.307544410228729248046875 0.314464187622070290295539507497 -0.408079791069030750616519753748 +-0.307532545924186717645198996252 -0.49961213767528533935546875 0.61507020890712738037109375 +-0.307532545924186717645198996252 0.49961213767528533935546875 0.61507020890712738037109375 +-0.307529987394809689593699886245 -0.223433558642864210641576505623 -0.760264673829078696520866742503 +-0.307529987394809689593699886245 0.223433558642864210641576505623 -0.760264673829078696520866742503 +-0.307515257596969571185496761245 -0.03863404877483844757080078125 0.162609300017356850354133257497 +-0.307515257596969571185496761245 0.03863404877483844757080078125 0.162609300017356850354133257497 +-0.307464011013507843017578125 -0.299702994525432586669921875 -0.6149347722530364990234375 +-0.307464011013507843017578125 0.299702994525432586669921875 -0.6149347722530364990234375 +-0.3073770105838775634765625 -0.100592501461505889892578125 0.3813140094280242919921875 +-0.3073770105838775634765625 0.100592501461505889892578125 0.3813140094280242919921875 +-0.307179987430572509765625 -0.3929494917392730712890625 -0.0350884981453418731689453125 +-0.307179987430572509765625 0.3929494917392730712890625 -0.0350884981453418731689453125 +-0.307034987211227405889957253748 -0.558211523294448896947983485006 -0.635711377859115578381477007497 +-0.307034987211227405889957253748 0.558211523294448896947983485006 -0.635711377859115578381477007497 +-0.306977400183677695544304242503 -0.824481922388076826635483485006 0.189723600447177898065120871252 +-0.306977400183677695544304242503 0.824481922388076826635483485006 0.189723600447177898065120871252 +-0.3069165050983428955078125 -0.222984854876995097772152121252 0.398220902681350741314503238755 +-0.3069165050983428955078125 0.222984854876995097772152121252 0.398220902681350741314503238755 +-0.306866705417633056640625 -0.200007444620132451840177623126 -0.261399587988853487896534488755 +-0.306866705417633056640625 0.200007444620132451840177623126 -0.261399587988853487896534488755 +-0.3068639934062957763671875 -0.9444329738616943359375 -0.11781899631023406982421875 +-0.3068639934062957763671875 0.9444329738616943359375 -0.11781899631023406982421875 +-0.306764388084411643298210492503 -0.0264167994260787984683869211722 -0.255338406562805209087940738755 +-0.306764388084411643298210492503 0.0264167994260787984683869211722 -0.255338406562805209087940738755 +-0.306738442182540926861378238755 -0.3122005462646484375 0.1046056486666202545166015625 +-0.306738442182540926861378238755 0.3122005462646484375 0.1046056486666202545166015625 +-0.306727203726768482550113503748 -0.222847308218479173147485994377 0.527974832057952925268295985006 +-0.306727203726768482550113503748 0.222847308218479173147485994377 0.527974832057952925268295985006 +-0.306704992055892911029246761245 -0.553117591142654352331931022491 -0.299987798929214455334602007497 +-0.306704992055892911029246761245 0.553117591142654352331931022491 -0.299987798929214455334602007497 +-0.306674551963806163445980246252 -0.291077104210853587762386496252 -0.154028695821762096063167746252 +-0.306674551963806163445980246252 0.291077104210853587762386496252 -0.154028695821762096063167746252 +-0.306672865152359030993522992503 -0.454930853843688975945980246252 0.0385973479598760646491761860943 +-0.306672865152359030993522992503 0.454930853843688975945980246252 0.0385973479598760646491761860943 +-0.30659401416778564453125 -0.3052070140838623046875 0.901580989360809326171875 +-0.30659401416778564453125 0.3052070140838623046875 0.901580989360809326171875 +-0.306586351990699723657485264994 -0.101473753154277798738114313437 0.134936551749706257208316628748 +-0.306586351990699723657485264994 0.101473753154277798738114313437 0.134936551749706257208316628748 +-0.306565594673156749383480246252 -0.730385589599609419408920985006 0.1120471954345703125 +-0.306565594673156749383480246252 0.730385589599609419408920985006 0.1120471954345703125 +-0.306536257266998291015625 -0.64940325915813446044921875 -0.216358490288257598876953125 +-0.306536257266998291015625 0.64940325915813446044921875 -0.216358490288257598876953125 +-0.30652439594268798828125 -0.0793540000915527454772302462516 -0.244429206848144536801115123126 +-0.30652439594268798828125 0.0793540000915527454772302462516 -0.244429206848144536801115123126 +-0.306418395042419466900440738755 -0.732995176315307639391960492503 -0.0939447999000549427428552462516 +-0.306418395042419466900440738755 0.732995176315307639391960492503 -0.0939447999000549427428552462516 +-0.306401205062866222039730246252 -0.2025167942047119140625 0.158446800708770763055355246252 +-0.306401205062866222039730246252 0.2025167942047119140625 0.158446800708770763055355246252 +-0.306361246109008777960269753748 -0.3917463123798370361328125 -0.689331296086311273718649772491 +-0.306361246109008777960269753748 0.3917463123798370361328125 -0.689331296086311273718649772491 +-0.30634200572967529296875 -0.242990398406982444079460492503 -0.0843216001987457386412927462516 +-0.30634200572967529296875 0.242990398406982444079460492503 -0.0843216001987457386412927462516 +-0.306334057450294516833366742503 -0.455645841360092174188167746252 -0.0323488004505634307861328125 +-0.306334057450294516833366742503 0.455645841360092174188167746252 -0.0323488004505634307861328125 +-0.3063299953937530517578125 -0.19706650078296661376953125 -0.3425300121307373046875 +-0.3063299953937530517578125 0.19706650078296661376953125 -0.3425300121307373046875 +-0.306261008977890047955128238755 -0.148770453035831445864900501874 0.294230711460113536492855246252 +-0.306261008977890047955128238755 0.148770453035831445864900501874 0.294230711460113536492855246252 +-0.306147193908691439556690738755 -0.739103221893310569079460492503 0 +-0.306147193908691439556690738755 0.739103221893310569079460492503 0 +-0.306058502197265658306690738755 -0.584497815370559670178352007497 0.612119686603546209191506477509 +-0.306058502197265658306690738755 0.584497815370559670178352007497 0.612119686603546209191506477509 +-0.306029391288757335320980246252 -0.490512585639953591076789507497 0.160447794198989857061832253748 +-0.306029391288757335320980246252 0.490512585639953591076789507497 0.160447794198989857061832253748 +-0.306004497408866871221988503748 -0.816854658722877435828024772491 -0.376311151683330513684211382497 +-0.306004497408866871221988503748 0.816854658722877435828024772491 -0.376311151683330513684211382497 +-0.305952012538909912109375 -0.94161701202392578125 0.14053599536418914794921875 +-0.305952012538909912109375 0.94161701202392578125 0.14053599536418914794921875 +-0.305931606888771079333366742503 0 0.330008858442306540759147992503 +-0.305812489986419633325454014994 -0.496276211738586381372329014994 -0.387541705369949307513621761245 +-0.305812489986419633325454014994 0.496276211738586381372329014994 -0.387541705369949307513621761245 +-0.3056128025054931640625 -0.599507188796997048108039507497 -0.432656812667846724096420985006 +-0.3056128025054931640625 0.599507188796997048108039507497 -0.432656812667846724096420985006 +-0.305547811090946197509765625 -0.714147916436195351330695757497 0.345156961679458584857371761245 +-0.305547811090946197509765625 0.714147916436195351330695757497 0.345156961679458584857371761245 +-0.305277013778686490130809261245 -0.495104992389678921771434261245 -0.147232201695442183053685880623 +-0.305277013778686490130809261245 0.495104992389678921771434261245 -0.147232201695442183053685880623 +-0.305236005783081076891960492503 -0.06061840057373046875 0.251309609413147005962940738755 +-0.305236005783081076891960492503 0.06061840057373046875 0.251309609413147005962940738755 +-0.305209797620773326531917746252 0 -0.846668726205825783459602007497 +-0.305195552110672008172542746252 -0.131269601732492469103874555003 0.438319212198257479595753238755 +-0.305195552110672008172542746252 0.131269601732492469103874555003 0.438319212198257479595753238755 +-0.305144709348678544458266514994 -0.170182946324348438604801003748 0.0206006506457924835895578752343 +-0.305144709348678544458266514994 0.170182946324348438604801003748 0.0206006506457924835895578752343 +-0.305140185356140125616519753748 -0.0247787989675998694683034528907 0.516019213199615411902243522491 +-0.305140185356140125616519753748 0.0247787989675998694683034528907 0.516019213199615411902243522491 +-0.3051022589206695556640625 -0.1489342488348484039306640625 -0.6687540113925933837890625 +-0.3051022589206695556640625 0.1489342488348484039306640625 -0.6687540113925933837890625 +-0.305078411102294944079460492503 -0.153444397449493424856470369377 -0.208283591270446793997095369377 +-0.305078411102294944079460492503 0.153444397449493424856470369377 -0.208283591270446793997095369377 +-0.30505089461803436279296875 -0.169821748137474054507478626874 -0.02458749897778034210205078125 +-0.30505089461803436279296875 0.169821748137474054507478626874 -0.02458749897778034210205078125 +-0.305049610137939464227230246252 -0.417994403839111350329460492503 0.610103178024292036596420985006 +-0.305049610137939464227230246252 0.417994403839111350329460492503 0.610103178024292036596420985006 +-0.304999804496765114514289507497 -0.185861209034919733218416126874 -0.602022415399551369397102007497 +-0.304999804496765114514289507497 0.185861209034919733218416126874 -0.602022415399551369397102007497 +-0.304914137721061739849659488755 -0.03667500056326389312744140625 0.32891084253787994384765625 +-0.304914137721061739849659488755 0.03667500056326389312744140625 0.32891084253787994384765625 +-0.304864194989204417840511496252 -0.354719701409339893682926003748 -0.768915885686874411852897992503 +-0.304864194989204417840511496252 0.354719701409339893682926003748 -0.768915885686874411852897992503 +-0.304844400286674532818409488755 0 0.846800100803375310754006477509 +-0.304777106642723061291633257497 -0.126151447743177408389314564374 -0.890896683931350685803352007497 +-0.304777106642723061291633257497 0.126151447743177408389314564374 -0.890896683931350685803352007497 +-0.304662743210792508197215511245 -0.151859053969383234194978626874 0.0813595995306968661209268134371 +-0.304662743210792508197215511245 0.151859053969383234194978626874 0.0813595995306968661209268134371 +-0.304572796821594271587940738755 -0.661686420440673828125 -0.33076560497283935546875 +-0.304572796821594271587940738755 0.661686420440673828125 -0.33076560497283935546875 +-0.30446989834308624267578125 -0.0628575488924980191329794365629 0.160770399868488289563117632497 +-0.30446989834308624267578125 0.0628575488924980191329794365629 0.160770399868488289563117632497 +-0.304397800564765896869090511245 -0.163408696651458740234375 0.608801901340484619140625 +-0.304397800564765896869090511245 0.163408696651458740234375 0.608801901340484619140625 +-0.304162788391113325658920985006 -0.259778809547424327508480246252 0 +-0.304162788391113325658920985006 0.259778809547424327508480246252 0 +-0.304080748558044455798210492503 -0.330656853318214427606136496252 0.0264725999906659133220632185157 +-0.304080748558044455798210492503 0.330656853318214427606136496252 0.0264725999906659133220632185157 +-0.304037404060363780633480246252 -0.159841203689575189761384876874 -0.491947209835052468029914507497 +-0.304037404060363780633480246252 0.159841203689575189761384876874 -0.491947209835052468029914507497 +-0.303972306847572315557926003748 -0.257422488927841197625667746252 0.209366999566555023193359375 +-0.303972306847572315557926003748 0.257422488927841197625667746252 0.209366999566555023193359375 +-0.303952789306640658306690738755 -0.543125581741333074425881477509 0.5026199817657470703125 +-0.303952789306640658306690738755 0.543125581741333074425881477509 0.5026199817657470703125 +-0.303839108347892794537159488755 -0.0730259969830513028243856865629 0.844007384777069158410256477509 +-0.303839108347892794537159488755 0.0730259969830513028243856865629 0.844007384777069158410256477509 +-0.3038280010223388671875 -0.220742011070251487048210492503 0.1377007961273193359375 +-0.3038280010223388671875 0.220742011070251487048210492503 0.1377007961273193359375 +-0.303748497366905234606804242503 -0.360801649093627940789730246252 -0.282947507500648509637386496252 +-0.303748497366905234606804242503 0.360801649093627940789730246252 -0.282947507500648509637386496252 +-0.303732658922672260626285378748 -0.5313880145549774169921875 0.218799747526645660400390625 +-0.303732658922672260626285378748 0.5313880145549774169921875 0.218799747526645660400390625 +-0.303726494312286376953125 -0.385919511318206787109375 0.093895502388477325439453125 +-0.303726494312286376953125 0.385919511318206787109375 0.093895502388477325439453125 +-0.303485405445098888055355246252 -0.330754512548446677477897992503 -0.0315890997648239149619975307814 +-0.303485405445098888055355246252 0.330754512548446677477897992503 -0.0315890997648239149619975307814 +-0.303469400107860554083316628748 -0.539732718467712424548210492503 -0.197724145650863658563167746252 +-0.303469400107860554083316628748 0.539732718467712424548210492503 -0.197724145650863658563167746252 +-0.30344174802303314208984375 -0.63601948320865631103515625 0.25671525299549102783203125 +-0.30344174802303314208984375 0.63601948320865631103515625 0.25671525299549102783203125 +-0.303427183628082242083934261245 -0.0718518018722534151931924384371 0.512610590457916237561164507497 +-0.303427183628082242083934261245 0.0718518018722534151931924384371 0.512610590457916237561164507497 +-0.303383153676986649927016514994 -0.0459200002253055544754190009371 -0.168374504148960102423160378748 +-0.303383153676986649927016514994 0.0459200002253055544754190009371 -0.168374504148960102423160378748 +-0.3032720088958740234375 -0.419284820556640625 -0.610103178024292036596420985006 +-0.3032720088958740234375 0.419284820556640625 -0.610103178024292036596420985006 +-0.303025105595588650775340511245 -0.139070752263069141729801003748 0.106466847658157337530582253748 +-0.303025105595588650775340511245 0.139070752263069141729801003748 0.106466847658157337530582253748 +-0.302936591207981109619140625 -0.290214645862579334600894753748 0.7392594516277313232421875 +-0.302936591207981109619140625 0.290214645862579334600894753748 0.7392594516277313232421875 +-0.302907508611679032739516514994 -0.0830294474959373390854366903113 -0.154444497823715193307592130623 +-0.302907508611679032739516514994 0.0830294474959373390854366903113 -0.154444497823715193307592130623 +-0.302832046151161160540965511245 -0.56737415492534637451171875 -0.555769932270050004419204014994 +-0.302832046151161160540965511245 0.56737415492534637451171875 -0.555769932270050004419204014994 +-0.302676407992839846539112613755 0 -0.575227910280227683337272992503 +-0.3025265038013458251953125 -0.35145199298858642578125 0.18697349727153778076171875 +-0.3025265038013458251953125 0.35145199298858642578125 0.18697349727153778076171875 +-0.30251549184322357177734375 0 -0.68628300726413726806640625 +-0.302504956722259521484375 -0.219782195985317257980184990629 -0.403344160318374667095753238755 +-0.302504956722259521484375 0.219782195985317257980184990629 -0.403344160318374667095753238755 +-0.302335536479949984478565738755 -0.110201302915811552574076870314 -0.446036815643310602386151231258 +-0.302335536479949984478565738755 0.110201302915811552574076870314 -0.446036815643310602386151231258 +-0.302156558632850680279346988755 -0.173783245682716386282251619377 -0.284606543183326732293636496252 +-0.302156558632850680279346988755 0.173783245682716386282251619377 -0.284606543183326732293636496252 +-0.3021262586116790771484375 -0.46438501775264739990234375 0.50553600490093231201171875 +-0.3021262586116790771484375 0.46438501775264739990234375 0.50553600490093231201171875 +-0.302030949294567141460987613755 -0.379395237565040621685596988755 0.432823953032493602410823996252 +-0.302030949294567141460987613755 0.379395237565040621685596988755 0.432823953032493602410823996252 +-0.302011191844940185546875 -0.366552007198333751336605246252 0.366645598411560025287059261245 +-0.302011191844940185546875 0.366552007198333751336605246252 0.366645598411560025287059261245 +-0.301868999004364035876335492503 -0.309685492515563987048210492503 -0.124378202855587011166349498126 +-0.301868999004364035876335492503 0.309685492515563987048210492503 -0.124378202855587011166349498126 +-0.301867657899856589587272992503 -0.0731056518852710723876953125 0.325624948740005526470753238755 +-0.301867657899856589587272992503 0.0731056518852710723876953125 0.325624948740005526470753238755 +-0.30185674130916595458984375 -0.373395106196403536724659488755 -0.438131204247474703716846988755 +-0.30185674130916595458984375 0.373395106196403536724659488755 -0.438131204247474703716846988755 +-0.301782605051994334832698996252 -0.737284487485885597912727007497 -0.41873399913311004638671875 +-0.301782605051994334832698996252 0.737284487485885597912727007497 -0.41873399913311004638671875 +-0.301644742488861083984375 -0.446692401170730613024772992503 0.109436248242855083123714621252 +-0.301644742488861083984375 0.446692401170730613024772992503 0.109436248242855083123714621252 +-0.301631402969360307153579014994 -0.148862698674201959780916126874 -0.0967386022210121043762853787484 +-0.301631402969360307153579014994 0.148862698674201959780916126874 -0.0967386022210121043762853787484 +-0.301594452559947934222606136245 -0.624570661783218405993522992503 0.491378182172775235247996761245 +-0.301594452559947934222606136245 0.624570661783218405993522992503 0.491378182172775235247996761245 +-0.301579603552818265033153011245 -0.166677348315715789794921875 0.0613875500857829978218482835928 +-0.301579603552818265033153011245 0.166677348315715789794921875 0.0613875500857829978218482835928 +-0.301494598388671875 -0.387189015746116693694744981258 -0.248366256058216106072933371252 +-0.301494598388671875 0.387189015746116693694744981258 -0.248366256058216106072933371252 +-0.3014774024486541748046875 0 -0.177795457839965809210269753748 +-0.3014700114727020263671875 -0.386287510395050048828125 -0.099486999213695526123046875 +-0.3014700114727020263671875 0.386287510395050048828125 -0.099486999213695526123046875 +-0.301377606391906749383480246252 -0.21896159648895263671875 0.707974386215210027550881477509 +-0.301377606391906749383480246252 0.21896159648895263671875 0.707974386215210027550881477509 +-0.301216411590576216283920985006 -0.258963990211486805304019753748 0.0469723999500274713714276231258 +-0.301216411590576216283920985006 0.258963990211486805304019753748 0.0469723999500274713714276231258 +-0.30119359493255615234375 -0.641199207305908291942841970013 0.371679997444152865337940738755 +-0.30119359493255615234375 0.641199207305908291942841970013 0.371679997444152865337940738755 +-0.301137006282806374279914507497 -0.268182599544525113177684261245 0.444291007518768321649105246252 +-0.301137006282806374279914507497 0.268182599544525113177684261245 0.444291007518768321649105246252 +-0.301118397712707541735710492503 -0.186260402202606201171875 0.186103999614715576171875 +-0.301118397712707541735710492503 0.186260402202606201171875 0.186103999614715576171875 +-0.301072406768798872533920985006 -0.129944396018981944695980246252 -0.2290627956390380859375 +-0.301072406768798872533920985006 0.129944396018981944695980246252 -0.2290627956390380859375 +-0.301041001081466697009147992503 -0.277952411770820639880241742503 0.186055652797222137451171875 +-0.301041001081466697009147992503 0.277952411770820639880241742503 0.186055652797222137451171875 +-0.301008391380310047491519753748 -0.324947002530097950323551003748 -0.542036604881286576684829014994 +-0.301008391380310047491519753748 0.324947002530097950323551003748 -0.542036604881286576684829014994 +-0.30094559490680694580078125 -0.0299718014895915992046315778907 -0.333216887712478648797542746252 +-0.30094559490680694580078125 0.0299718014895915992046315778907 -0.333216887712478648797542746252 +-0.3008987903594970703125 -0.0880451977252960232833700615629 0.248410797119140630551115123126 +-0.3008987903594970703125 0.0880451977252960232833700615629 0.248410797119140630551115123126 +-0.300823795795440662725894753748 -0.421225798130035411492855246252 -0.303436195850372292248664507497 +-0.300823795795440662725894753748 0.421225798130035411492855246252 -0.303436195850372292248664507497 +-0.300807890295982371942073996252 -0.0892512023448944064041299384371 -0.322565862536430381091179242503 +-0.300807890295982371942073996252 0.0892512023448944064041299384371 -0.322565862536430381091179242503 +-0.300780797004699729235710492503 -0.717120790481567405016960492503 -0.187799203395843522512720369377 +-0.300780797004699729235710492503 0.717120790481567405016960492503 -0.187799203395843522512720369377 +-0.300707092881202731060596988755 -0.807119983434677168432358485006 -0.261020699143409751208366742503 +-0.300707092881202731060596988755 0.807119983434677168432358485006 -0.261020699143409751208366742503 +-0.300535413622856184545639735006 -0.408920603990554853979233485006 0.212043693661689763851896373126 +-0.300535413622856184545639735006 0.408920603990554853979233485006 0.212043693661689763851896373126 +-0.300497406721115078997996761245 -0.135354451835155487060546875 -0.117814904451370230931139815311 +-0.300497406721115078997996761245 0.135354451835155487060546875 -0.117814904451370230931139815311 +-0.300493058562278758660823996252 -0.448927614092826887670639735006 -0.103285052627325069085628683752 +-0.300493058562278758660823996252 0.448927614092826887670639735006 -0.103285052627325069085628683752 +-0.300417536497116055560496761245 -0.671745938062667802270766514994 0.60083796083927154541015625 +-0.300417536497116055560496761245 0.671745938062667802270766514994 0.60083796083927154541015625 +-0.300323009490966796875 -0.924305021762847900390625 -0.23551499843597412109375 +-0.300323009490966796875 0.924305021762847900390625 -0.23551499843597412109375 +-0.30026149749755859375 -0.303411006927490234375 -0.2603549957275390625 +-0.30026149749755859375 0.303411006927490234375 -0.2603549957275390625 +-0.300164401531219482421875 -0.278526002168655362201121761245 -0.438548398017883311883480246252 +-0.300164401531219482421875 0.278526002168655362201121761245 -0.438548398017883311883480246252 +-0.300079786777496304583934261245 -0.443329203128814686163394753748 0.270945006608962979388621761245 +-0.300079786777496304583934261245 0.443329203128814686163394753748 0.270945006608962979388621761245 +-0.30004920065402984619140625 -0.217995746433734899349943248126 0.254849848151206981317073996252 +-0.30004920065402984619140625 0.217995746433734899349943248126 0.254849848151206981317073996252 +-0.300044855475425698010383257497 -0.0865626975893974276443643134371 0.158050899207591993844701505623 +-0.300044855475425698010383257497 0.0865626975893974276443643134371 0.158050899207591993844701505623 +-0.299999999999999988897769753748 0 0 +-0.2999981939792633056640625 -0.118934395909309376104801003748 0.505822205543518088610710492503 +-0.2999981939792633056640625 0.118934395909309376104801003748 0.505822205543518088610710492503 +-0.299979057908058122094985264994 -0.164819902181625344006477007497 -0.0731230489909648895263671875 +-0.299979057908058122094985264994 0.164819902181625344006477007497 -0.0731230489909648895263671875 +-0.299952793121337879522769753748 -0.25863039493560791015625 -0.05602359771728515625 +-0.299952793121337879522769753748 0.25863039493560791015625 -0.05602359771728515625 +-0.299864006042480479852230246252 -0.237956809997558610403345369377 0.116009199619293221217297684689 +-0.299864006042480479852230246252 0.237956809997558610403345369377 0.116009199619293221217297684689 +-0.299815201759338401110710492503 -0.152686405181884782278345369377 0.216328001022338872738615123126 +-0.299815201759338401110710492503 0.152686405181884782278345369377 0.216328001022338872738615123126 +-0.2997950017452239990234375 -0.708965003490447998046875 -0.638351023197174072265625 +-0.2997950017452239990234375 0.708965003490447998046875 -0.638351023197174072265625 +-0.299700003862380992547542746252 -0.143649002909660344906583873126 0.836387979984283491674545985006 +-0.299700003862380992547542746252 0.143649002909660344906583873126 0.836387979984283491674545985006 +-0.299596011638641357421875 -0.13531099259853363037109375 0.3767400085926055908203125 +-0.299596011638641357421875 0.13531099259853363037109375 0.3767400085926055908203125 +-0.299416607618331886975227007497 -0.125378401577472681216463001874 0.130881448090076429879857755623 +-0.299416607618331886975227007497 0.125378401577472681216463001874 0.130881448090076429879857755623 +-0.299231100082397449835269753748 -0.0122024998068809512746790701954 -0.0176598004996776566932759067186 +-0.299231100082397449835269753748 0.0122024998068809512746790701954 -0.0176598004996776566932759067186 +-0.299207302927970875128238503748 -0.046696297824382781982421875 -0.631105315685272172387954014994 +-0.299207302927970875128238503748 0.046696297824382781982421875 -0.631105315685272172387954014994 +-0.2991054952144622802734375 -0.3283084928989410400390625 -0.22967250645160675048828125 +-0.2991054952144622802734375 0.3283084928989410400390625 -0.22967250645160675048828125 +-0.299075102806091286389289507497 -0.0235374011099338531494140625 0 +-0.299075102806091286389289507497 0.0235374011099338531494140625 0 +-0.299001896381378140521434261245 -0.0123897001147270195697824846093 0.02107889950275421142578125 +-0.299001896381378140521434261245 0.0123897001147270195697824846093 0.02107889950275421142578125 +-0.298935653269290946276726117503 -0.217189045250415796450838001874 -0.534758231043815590588508257497 +-0.298935653269290946276726117503 0.217189045250415796450838001874 -0.534758231043815590588508257497 +-0.298851750791072845458984375 -0.340488754212856292724609375 0.5977087318897247314453125 +-0.298851750791072845458984375 0.340488754212856292724609375 0.5977087318897247314453125 +-0.298839612305164314953742632497 -0.309250661730766263080028011245 -0.847088414430618219519431022491 +-0.298839612305164314953742632497 0.309250661730766263080028011245 -0.847088414430618219519431022491 +-0.2985970079898834228515625 -0.21694099903106689453125 0.337307512760162353515625 +-0.2985970079898834228515625 0.21694099903106689453125 0.337307512760162353515625 +-0.298538398742675792352230246252 -0.707806396484375044408920985006 0.223348808288574229852230246252 +-0.298538398742675792352230246252 0.707806396484375044408920985006 0.223348808288574229852230246252 +-0.298424699902534451556590511245 -0.182873594760894764288394753748 0 +-0.298424699902534451556590511245 0.182873594760894764288394753748 0 +-0.298272156715393088610710492503 -0.327580654621124289782585492503 0.0788953475654125269134198106258 +-0.298272156715393088610710492503 0.327580654621124289782585492503 0.0788953475654125269134198106258 +-0.298219358921051058697315738755 -0.261920449137687694207698996252 0.380740261077880892681690738755 +-0.298219358921051058697315738755 0.261920449137687694207698996252 0.380740261077880892681690738755 +-0.2980425059795379638671875 -0.16617000102996826171875 -0.3654564917087554931640625 +-0.2980425059795379638671875 0.16617000102996826171875 -0.3654564917087554931640625 +-0.298041890561580646856754128748 -0.270134150981903076171875 0.510586035251617498254006477509 +-0.298041890561580646856754128748 0.270134150981903076171875 0.510586035251617498254006477509 +-0.297970390319824252056690738755 -0.0530276000499725341796875 -0.26153719425201416015625 +-0.297970390319824252056690738755 0.0530276000499725341796875 -0.26153719425201416015625 +-0.297910505533218350482371761245 0 -0.0353456988930702167839292826557 +-0.297854161262512240337940738755 -0.338498595356941267553452235006 -0.314962458610534679070980246252 +-0.297854161262512240337940738755 0.338498595356941267553452235006 -0.314962458610534679070980246252 +-0.297834607958793629034488503748 -0.467249304056167547027911268742 -0.427753198146820057257144753748 +-0.297834607958793629034488503748 0.467249304056167547027911268742 -0.427753198146820057257144753748 +-0.297823405265808083264289507497 -0.121152848005294785926899692186 -0.138287095725536324231086382497 +-0.297823405265808083264289507497 0.121152848005294785926899692186 -0.138287095725536324231086382497 +-0.297805011272430419921875 -0.066565997898578643798828125 -0.952302992343902587890625 +-0.297805011272430419921875 0.066565997898578643798828125 -0.952302992343902587890625 +-0.29772679507732391357421875 0 0.184007591009139992443977007497 +-0.297726106643676713403579014994 -0.216307708621025079898103626874 0.595457804203033402856704014994 +-0.297726106643676713403579014994 0.216307708621025079898103626874 0.595457804203033402856704014994 +-0.297461497783660877569644753748 -0.581567716598510697778579014994 -0.251585593819618202893195757497 +-0.297461497783660877569644753748 0.581567716598510697778579014994 -0.251585593819618202893195757497 +-0.297341698408126797747996761245 -0.0357230991125106825401225307814 -0.0176573999226093299175222028907 +-0.297341698408126797747996761245 0.0357230991125106825401225307814 -0.0176573999226093299175222028907 +-0.297329485416412353515625 -0.297444999217987060546875 0.2704105079174041748046875 +-0.297329485416412353515625 0.297444999217987060546875 0.2704105079174041748046875 +-0.297226496040821075439453125 -0.711914786696434043200554242503 -0.554377233982086159436164507497 +-0.297226496040821075439453125 0.711914786696434043200554242503 -0.554377233982086159436164507497 +-0.297094506025314342156917746252 -0.035926200449466705322265625 0.0210749991238117218017578125 +-0.297094506025314342156917746252 0.035926200449466705322265625 0.0210749991238117218017578125 +-0.297022801637649547235042746252 0 0.0421607986092567416092080634371 +-0.297014203667640641626235264994 -0.0241990007460117333148996721093 0.183567306399345375744758257497 +-0.297014203667640641626235264994 0.0241990007460117333148996721093 0.183567306399345375744758257497 +-0.296953308582305897100894753748 -0.387356203794479325708266514994 0.501771205663681052477897992503 +-0.296953308582305897100894753748 0.387356203794479325708266514994 0.501771205663681052477897992503 +-0.296950158476829484399672764994 -0.180641296505928028448551003748 0.0411008499562740270416583143742 +-0.296950158476829484399672764994 0.180641296505928028448551003748 0.0411008499562740270416583143742 +-0.296928298473358165399105246252 -0.0243423007428646073768696567186 -0.0352290004491805988640074076557 +-0.296928298473358165399105246252 0.0243423007428646073768696567186 -0.0352290004491805988640074076557 +-0.296900799870491005627570757497 -0.0230359494686126695106587192186 -0.183900153636932350842414507497 +-0.296900799870491005627570757497 0.0230359494686126695106587192186 -0.183900153636932350842414507497 +-0.296667900681495677606136496252 -0.178804796934127818719417746252 0.287257504463195811883480246252 +-0.296667900681495677606136496252 0.178804796934127818719417746252 0.287257504463195811883480246252 +-0.2966479957103729248046875 -0.912980973720550537109375 0.28011798858642578125 +-0.2966479957103729248046875 0.912980973720550537109375 0.28011798858642578125 +-0.296596851944923411981136496252 -0.349015697836875971038494981258 0.304497054219245943951221988755 +-0.296596851944923411981136496252 0.349015697836875971038494981258 0.304497054219245943951221988755 +-0.296524438261985767706363503748 -0.785785862803459078662626779987 0.443975852429866757464793636245 +-0.296524438261985767706363503748 0.785785862803459078662626779987 0.443975852429866757464793636245 +-0.29647529125213623046875 -0.297396442294120821880909488755 0.161733596026897435971036998126 +-0.29647529125213623046875 0.297396442294120821880909488755 0.161733596026897435971036998126 +-0.296394757926464080810546875 -0.43084050714969635009765625 -0.53761200606822967529296875 +-0.296394757926464080810546875 0.43084050714969635009765625 -0.53761200606822967529296875 +-0.296359002590179443359375 -0.0686049006879329570374181912484 -0.173103354871273040771484375 +-0.296359002590179443359375 0.0686049006879329570374181912484 -0.173103354871273040771484375 +-0.296330651640892006604133257497 -0.1796805560588836669921875 -0.04902064800262451171875 +-0.296330651640892006604133257497 0.1796805560588836669921875 -0.04902064800262451171875 +-0.296306705474853493420539507497 -0.0469296008348464924186949076557 0 +-0.296306705474853493420539507497 0.0469296008348464924186949076557 0 +-0.296268004179000843389957253748 -0.568516182899475031042868522491 0.28109548985958099365234375 +-0.296268004179000843389957253748 0.568516182899475031042868522491 0.28109548985958099365234375 +-0.296183708310127247198551003748 -0.791407817602157614977897992503 0.309756597876548800396534488755 +-0.296183708310127247198551003748 0.791407817602157614977897992503 0.309756597876548800396534488755 +-0.29607999324798583984375 -0.3511539995670318603515625 -0.19755350053310394287109375 +-0.29607999324798583984375 0.3511539995670318603515625 -0.19755350053310394287109375 +-0.296037515997886691021534488755 -0.412188696861267134252670985006 -0.212043152749538443835319867503 +-0.296037515997886691021534488755 0.412188696861267134252670985006 -0.212043152749538443835319867503 +-0.296014505624771107061832253748 -0.0246966004371643073345143903907 0.0420176982879638671875 +-0.296014505624771107061832253748 0.0246966004371643073345143903907 0.0420176982879638671875 +-0.29583299160003662109375 -0.449870395660400379522769753748 -0.264763194322586048468082253748 +-0.29583299160003662109375 0.449870395660400379522769753748 -0.264763194322586048468082253748 +-0.295819196105003345831363503748 -0.104602953046560295802258622189 0.3225667476654052734375 +-0.295819196105003345831363503748 0.104602953046560295802258622189 0.3225667476654052734375 +-0.295756497979164145739616742503 -0.571572932600975081030014735006 0.0912808001041412325760049384371 +-0.295756497979164145739616742503 0.571572932600975081030014735006 0.0912808001041412325760049384371 +-0.295628809928894065173210492503 -0.5690224170684814453125 -0.4783480167388916015625 +-0.295628809928894065173210492503 0.5690224170684814453125 -0.4783480167388916015625 +-0.295582947134971629754573996252 -0.146487598121166240350277121252 -0.30605895817279815673828125 +-0.295582947134971629754573996252 0.146487598121166240350277121252 -0.30605895817279815673828125 +-0.295540699362754843981804242503 -0.573844048380851790014389735006 -0.07654334791004657745361328125 +-0.295540699362754843981804242503 0.573844048380851790014389735006 -0.07654334791004657745361328125 +-0.295527601242065451891960492503 -0.214712405204772971423210492503 -0.162978398799896256887720369377 +-0.295527601242065451891960492503 0.214712405204772971423210492503 -0.162978398799896256887720369377 +-0.295480394363403342516960492503 -0.19428360462188720703125 -0.186936795711517333984375 +-0.295480394363403342516960492503 0.19428360462188720703125 -0.186936795711517333984375 +-0.295320856571197554174545985006 -0.169209696352481842041015625 0.432034337520599387438835492503 +-0.295320856571197554174545985006 0.169209696352481842041015625 0.432034337520599387438835492503 +-0.29526960849761962890625 0 -0.269844007492065440789730246252 +-0.295202690362930286749332253748 -0.326384094357490550653011496252 -0.0939608998596668243408203125 +-0.295202690362930286749332253748 0.326384094357490550653011496252 -0.0939608998596668243408203125 +-0.295197299122810397076221988755 -0.707138979434967063220085492503 0.472031986713409457134815738755 +-0.295197299122810397076221988755 0.707138979434967063220085492503 0.472031986713409457134815738755 +-0.295184803009033214227230246252 -0.105632400512695318051115123126 -0.248410391807556168997095369377 +-0.295184803009033214227230246252 0.105632400512695318051115123126 -0.248410391807556168997095369377 +-0.2951777875423431396484375 -0.794860500097274713660056022491 0.059723548591136932373046875 +-0.2951777875423431396484375 0.794860500097274713660056022491 0.059723548591136932373046875 +-0.29509414732456207275390625 -0.57915389537811279296875 0 +-0.29509414732456207275390625 0.57915389537811279296875 0 +-0.29505975544452667236328125 -0.030505500733852386474609375 0.68884648382663726806640625 +-0.29505975544452667236328125 0.030505500733852386474609375 0.68884648382663726806640625 +-0.295014595985412575451789507497 -0.0122030999511480321012557581639 -0.0530799016356468186805805942186 +-0.295014595985412575451789507497 0.0122030999511480321012557581639 -0.0530799016356468186805805942186 +-0.294976794719696011615184261245 -0.164813393354415888003572376874 0.495807588100433349609375 +-0.294976794719696011615184261245 0.164813393354415888003572376874 0.495807588100433349609375 +-0.294927603006362892834602007497 -0.397703397274017322882144753748 -0.338894999027252175061164507497 +-0.294927603006362892834602007497 0.397703397274017322882144753748 -0.338894999027252175061164507497 +-0.294880247116088844983039507497 -0.0482825011014938326736611884371 0.182248142361640913522435880623 +-0.294880247116088844983039507497 0.0482825011014938326736611884371 0.182248142361640913522435880623 +-0.294872638583183299676448996252 -0.795642498135566644812399772491 -0.0500361014157533617874307196871 +-0.294872638583183299676448996252 0.795642498135566644812399772491 -0.0500361014157533617874307196871 +-0.294626808166503939556690738755 -0.115970003604888918791182561563 0.244429993629455583059595369377 +-0.294626808166503939556690738755 0.115970003604888918791182561563 0.244429993629455583059595369377 +-0.29460799694061279296875 -0.066535003483295440673828125 -0.39847099781036376953125 +-0.29460799694061279296875 0.066535003483295440673828125 -0.39847099781036376953125 +-0.294604706764221180304019753748 -0.47316946089267730712890625 0.334392508864402804302784488755 +-0.294604706764221180304019753748 0.47316946089267730712890625 0.334392508864402804302784488755 +-0.294598996639251708984375 -0.3717465102672576904296875 0.158164501190185546875 +-0.294598996639251708984375 0.3717465102672576904296875 0.158164501190185546875 +-0.29459249973297119140625 -0.282254993915557861328125 -0.289045989513397216796875 +-0.29459249973297119140625 0.282254993915557861328125 -0.289045989513397216796875 +-0.294538402557373069079460492503 -0.25383079051971435546875 0.0938996016979217612563601846887 +-0.294538402557373069079460492503 0.25383079051971435546875 0.0938996016979217612563601846887 +-0.2944762408733367919921875 -0.58788000047206878662109375 -0.360804744064807891845703125 +-0.2944762408733367919921875 0.58788000047206878662109375 -0.360804744064807891845703125 +-0.294379806518554665295539507497 -0.521120417118072443152243522491 0.0421187996864318819900674384371 +-0.294379806518554665295539507497 0.521120417118072443152243522491 0.0421187996864318819900674384371 +-0.2943690121173858642578125 -0.264149010181427001953125 -0.918461978435516357421875 +-0.2943690121173858642578125 0.264149010181427001953125 -0.918461978435516357421875 +-0.294250506162643421514957253748 -0.436681813001632723736378238755 0.729880195856094426964943977509 +-0.294250506162643421514957253748 0.436681813001632723736378238755 0.729880195856094426964943977509 +-0.294039291143417369500667746252 -0.0478833004832267747352680942186 -0.0353273995220661149452290317186 +-0.294039291143417369500667746252 0.0478833004832267747352680942186 -0.0353273995220661149452290317186 +-0.294010806083679188116519753748 -0.521834993362426780016960492503 -0.0352967999875545487831196567186 +-0.294010806083679188116519753748 0.521834993362426780016960492503 -0.0352967999875545487831196567186 +-0.293943309783935513568309261245 -0.633387285470962457800681022491 0.0491749979555606842041015625 +-0.293943309783935513568309261245 0.633387285470962457800681022491 0.0491749979555606842041015625 +-0.2938930094242095947265625 -0.4045085012912750244140625 0 +-0.2938930094242095947265625 0.4045085012912750244140625 0 +-0.293862450122833240850894753748 -0.161091345548629749639957253748 0.100967295467853546142578125 +-0.293862450122833240850894753748 0.161091345548629749639957253748 0.100967295467853546142578125 +-0.293861407041549671514957253748 -0.110870549082756036929353626874 0.154444852471351617984041126874 +-0.293861407041549671514957253748 0.110870549082756036929353626874 0.154444852471351617984041126874 +-0.293844795227050814556690738755 -0.233885598182678233758480246252 -0.137669599056243902035490123126 +-0.293844795227050814556690738755 0.233885598182678233758480246252 -0.137669599056243902035490123126 +-0.293687108159065235479801003748 -0.213373804092407221011384876874 0.823540520668029851769631477509 +-0.293687108159065235479801003748 0.213373804092407221011384876874 0.823540520668029851769631477509 +-0.293670293688774064477797764994 -0.634082394838333063269431022491 -0.0412013012915849671791157504686 +-0.293670293688774064477797764994 0.634082394838333063269431022491 -0.0412013012915849671791157504686 +-0.29366625845432281494140625 -0.56898526847362518310546875 0.39053325355052947998046875 +-0.29366625845432281494140625 0.56898526847362518310546875 0.39053325355052947998046875 +-0.293622353672981228900340511245 -0.106329651176929468325838001874 -0.158050554990768421514957253748 +-0.293622353672981228900340511245 0.106329651176929468325838001874 -0.158050554990768421514957253748 +-0.293574607372283913342414507497 -0.0591816008090972900390625 -0.0176483999937772743915598283593 +-0.293574607372283913342414507497 0.0591816008090972900390625 -0.0176483999937772743915598283593 +-0.29356615245342254638671875 -0.903503203392028719775908029987 0 +-0.29356615245342254638671875 0.903503203392028719775908029987 0 +-0.293412601947784401623664507497 -0.040044598281383514404296875 -0.521828985214233376233039507497 +-0.293412601947784401623664507497 0.040044598281383514404296875 -0.521828985214233376233039507497 +-0.293291991949081398693977007497 -0.0594671979546546880524005018742 0.0210593998432159409950337192186 +-0.293291991949081398693977007497 0.0594671979546546880524005018742 0.0210593998432159409950337192186 +-0.293201349675655364990234375 -0.493291327357292141986278011245 -0.757097727060317970959602007497 +-0.293201349675655364990234375 0.493291327357292141986278011245 -0.757097727060317970959602007497 +-0.2931813895702362060546875 -0.52479137480258941650390625 0.735621106624603227075454014994 +-0.2931813895702362060546875 0.52479137480258941650390625 0.735621106624603227075454014994 +-0.29311649501323699951171875 -0.514022397994995161596420985006 -0.678132873773574895714943977509 +-0.29311649501323699951171875 0.514022397994995161596420985006 -0.678132873773574895714943977509 +-0.2931033074855804443359375 -0.0363573007285594926307759067186 -0.0526176005601882920692524692186 +-0.2931033074855804443359375 0.0363573007285594926307759067186 -0.0526176005601882920692524692186 +-0.293073606491088878289730246252 -0.0483012020587921114822549384371 0.042129300534725189208984375 +-0.293073606491088878289730246252 0.0483012020587921114822549384371 0.042129300534725189208984375 +-0.293031191825866732525440738755 -0.691943216323852583471420985006 -0.2744944095611572265625 +-0.293031191825866732525440738755 0.691943216323852583471420985006 -0.2744944095611572265625 +-0.292996805906295787469417746252 -0.0123903002589941021310826485546 0.06324090063571929931640625 +-0.292996805906295787469417746252 0.0123903002589941021310826485546 0.06324090063571929931640625 +-0.29295225441455841064453125 -0.0893069989979267120361328125 0.6846187412738800048828125 +-0.29295225441455841064453125 0.0893069989979267120361328125 0.6846187412738800048828125 +-0.292742800712585460320980246252 -0.271564793586730968133480246252 0.0235436007380485541606862653907 +-0.292742800712585460320980246252 0.271564793586730968133480246252 0.0235436007380485541606862653907 +-0.292589494585990872455028011245 -0.493661707639694191662727007497 0.400861310958862293585269753748 +-0.292589494585990872455028011245 0.493661707639694191662727007497 0.400861310958862293585269753748 +-0.29250240325927734375 -0.513202214241027854235710492503 -0.105193796753883364591963811563 +-0.29250240325927734375 0.513202214241027854235710492503 -0.105193796753883364591963811563 +-0.29231679439544677734375 -0.271590399742126453741519753748 -0.02809999883174896240234375 +-0.29231679439544677734375 0.271590399742126453741519753748 -0.02809999883174896240234375 +-0.2922542989253997802734375 -0.707787001132965110095085492503 -0.472889703512191783563167746252 +-0.2922542989253997802734375 0.707787001132965110095085492503 -0.472889703512191783563167746252 +-0.292252045869827281610042746252 -0.342182251811027515753238503748 0 +-0.292252045869827281610042746252 0.342182251811027515753238503748 0 +-0.292251008749008167608707253748 -0.508816194534301713403579014994 0.125281798839569080694644753748 +-0.292251008749008167608707253748 0.508816194534301713403579014994 0.125281798839569080694644753748 +-0.292043057084083568231136496252 -0.0864955045282840701004190009371 -0.574221056699752874230568977509 +-0.292043057084083568231136496252 0.0864955045282840701004190009371 -0.574221056699752874230568977509 +-0.292021098732948292120426003748 -0.624219393730163552014289507497 -0.122775100171565995643696567186 +-0.292021098732948292120426003748 0.624219393730163552014289507497 -0.122775100171565995643696567186 +-0.291970258951187167095753238755 -0.560734185576438948217514735006 -0.1510970480740070343017578125 +-0.291970258951187167095753238755 0.560734185576438948217514735006 -0.1510970480740070343017578125 +-0.291958987712860107421875 -0.4007515013217926025390625 0.0644859969615936279296875 +-0.291958987712860107421875 0.4007515013217926025390625 0.0644859969615936279296875 +-0.291711294651031460833934261245 -0.0700325980782508794586505018742 0 +-0.291711294651031460833934261245 0.0700325980782508794586505018742 0 +-0.29164350032806396484375 0 -0.406132996082305908203125 +-0.291618594527244534564403011245 -0.619331306219100929943977007497 0.146246097981929779052734375 +-0.291618594527244534564403011245 0.619331306219100929943977007497 0.146246097981929779052734375 +-0.29159295558929443359375 -0.183775345981121079885767244377 -0.428602364659309398309261496252 +-0.29159295558929443359375 0.183775345981121079885767244377 -0.428602364659309398309261496252 +-0.291578038036823250500617632497 -0.352126953005790721551448996252 0.716581457853317282946647992503 +-0.291578038036823250500617632497 0.352126953005790721551448996252 0.716581457853317282946647992503 +-0.291561305522918701171875 0 -0.07065390050411224365234375 +-0.291520793735980998651058371252 -0.897211325168609574731704014994 -0.111928046494722363557450250937 +-0.291520793735980998651058371252 0.897211325168609574731704014994 -0.111928046494722363557450250937 +-0.291417288780212391241519753748 -0.248333850502967828921541126874 0.236444851756095891781583873126 +-0.291417288780212391241519753748 0.248333850502967828921541126874 0.236444851756095891781583873126 +-0.291334751248359669073551003748 -0.072134651243686676025390625 0.180057150125503523385717130623 +-0.291334751248359669073551003748 0.072134651243686676025390625 0.180057150125503523385717130623 +-0.291264313459396351202457253748 -0.289946663379669178350894753748 0.856501939892768793249899772491 +-0.291264313459396351202457253748 0.289946663379669178350894753748 0.856501939892768793249899772491 +-0.291250045597553242071597878748 -0.48407058417797088623046875 -0.321479596197605133056640625 +-0.291250045597553242071597878748 0.48407058417797088623046875 -0.321479596197605133056640625 +-0.29124550521373748779296875 -0.147825302183628076724275501874 0.125792796909809101446597878748 +-0.29124550521373748779296875 0.147825302183628076724275501874 0.125792796909809101446597878748 +-0.291181947290897358282535378748 -0.78427968919277191162109375 -0.150393903255462646484375 +-0.291181947290897358282535378748 0.78427968919277191162109375 -0.150393903255462646484375 +-0.291144686937332197729233485006 -0.430530634522438060418636496252 0.179939098656177548507528740629 +-0.291144686937332197729233485006 0.430530634522438060418636496252 0.179939098656177548507528740629 +-0.291057604551315296514957253748 -0.0368397004902362781852964701557 0.0626765996217727577866085653113 +-0.291057604551315296514957253748 0.0368397004902362781852964701557 0.0626765996217727577866085653113 +-0.290970003604888893811164507497 -0.468120610713958718029914507497 0.2370648086071014404296875 +-0.290970003604888893811164507497 0.468120610713958718029914507497 0.2370648086071014404296875 +-0.290927195549011252673210492503 -0.0165000006556510932231862653907 0.27402400970458984375 +-0.290927195549011252673210492503 0.0165000006556510932231862653907 0.27402400970458984375 +-0.2909174859523773193359375 -0.4015080034732818603515625 -0.0644859969615936279296875 +-0.2909174859523773193359375 0.4015080034732818603515625 -0.0644859969615936279296875 +-0.290873193740844748766960492503 -0.17714560031890869140625 -0.209791207313537619860710492503 +-0.290873193740844748766960492503 0.17714560031890869140625 -0.209791207313537619860710492503 +-0.290873104333877530169871761245 -0.176471745967864968029914507497 0.0821621514856815254868038778113 +-0.290873104333877530169871761245 0.176471745967864968029914507497 0.0821621514856815254868038778113 +-0.290858103334903694836555132497 -0.168584755808114994390933816248 -0.78069268167018890380859375 +-0.290858103334903694836555132497 0.168584755808114994390933816248 -0.78069268167018890380859375 +-0.29081249237060546875 -0.2521015107631683349609375 0.3191750049591064453125 +-0.29081249237060546875 0.2521015107631683349609375 0.3191750049591064453125 +-0.290798899531364396509047764994 -0.193679144978523232190070757497 0.0206031005829572649856729071871 +-0.290798899531364396509047764994 0.193679144978523232190070757497 0.0206031005829572649856729071871 +-0.290765291452407814709602007497 -0.0461118020117282853553852817186 -0.189285957813262933902009876874 +-0.290765291452407814709602007497 0.0461118020117282853553852817186 -0.189285957813262933902009876874 +-0.290710696578025784564403011245 -0.193345609307289112432926003748 -0.024592049419879913330078125 +-0.290710696578025784564403011245 0.193345609307289112432926003748 -0.024592049419879913330078125 +-0.290690402686595905645816628748 -0.55292119085788726806640625 0.179658043384552018606470369377 +-0.290690402686595905645816628748 0.55292119085788726806640625 0.179658043384552018606470369377 +-0.290687148272991191522152121252 -0.34172253310680389404296875 -0.47034780681133270263671875 +-0.290687148272991191522152121252 0.34172253310680389404296875 -0.47034780681133270263671875 +-0.290686509013175997662159488755 0 0.581378868222236611096320757497 +-0.290675407648086525647102007497 -0.309669005870819080694644753748 0.423807585239410367083934261245 +-0.290675407648086525647102007497 0.309669005870819080694644753748 0.423807585239410367083934261245 +-0.290669408440589915887386496252 -0.272582548856735218389957253748 -0.209069555997848516293302623126 +-0.290669408440589915887386496252 0.272582548856735218389957253748 -0.209069555997848516293302623126 +-0.290655890107154868395866742503 -0.249631637334823602847322376874 -0.236015108227729808465511496252 +-0.290655890107154868395866742503 0.249631637334823602847322376874 -0.236015108227729808465511496252 +-0.290654411911964394299445757497 -0.894536161422729403369658029987 0.133509195595979679449527566248 +-0.290654411911964394299445757497 0.894536161422729403369658029987 0.133509195595979679449527566248 +-0.290613305568695079461605246252 -0.0241716004908084855506977817186 -0.0704240977764129666427450615629 +-0.290613305568695079461605246252 0.0241716004908084855506977817186 -0.0704240977764129666427450615629 +-0.290576791763305697369190738755 -0.0532832026481628445724325615629 -0.743455219268798872533920985006 +-0.290576791763305697369190738755 0.0532832026481628445724325615629 -0.743455219268798872533920985006 +-0.290550699830055270123096988755 -0.314125356078147899285823996252 -0.345551237463951166350994981258 +-0.290550699830055270123096988755 0.314125356078147899285823996252 -0.345551237463951166350994981258 +-0.290456390380859408306690738755 -0.251324391365051302837940738755 -0.111674404144287114926115123126 +-0.290456390380859408306690738755 0.251324391365051302837940738755 -0.111674404144287114926115123126 +-0.290450701117515586169304242503 -0.315278542041778575555355246252 0.136885946989059453793302623126 +-0.290450701117515586169304242503 0.315278542041778575555355246252 0.136885946989059453793302623126 +-0.2904469966888427734375 -0.3726685047149658203125 -0.16358099877834320068359375 +-0.2904469966888427734375 0.3726685047149658203125 -0.16358099877834320068359375 +-0.2904439866542816162109375 -0.760399997234344482421875 0.580889999866485595703125 +-0.2904439866542816162109375 0.760399997234344482421875 0.580889999866485595703125 +-0.2903729975223541259765625 -0.24925424158573150634765625 -0.64502401649951934814453125 +-0.2903729975223541259765625 0.24925424158573150634765625 -0.64502401649951934814453125 +-0.2901259958744049072265625 -0.8929259777069091796875 -0.34425199031829833984375 +-0.2901259958744049072265625 0.8929259777069091796875 -0.34425199031829833984375 +-0.2900960147380828857421875 -0.169601500034332275390625 0.3702425062656402587890625 +-0.2900960147380828857421875 0.169601500034332275390625 0.3702425062656402587890625 +-0.289986395835876487048210492503 -0.178143596649169927426115123126 0.210173201560974132195980246252 +-0.289986395835876487048210492503 0.178143596649169927426115123126 0.210173201560974132195980246252 +-0.289977487921714793817073996252 -0.527199772000312760766860264994 -0.600394079089164756091179242503 +-0.289977487921714793817073996252 0.527199772000312760766860264994 -0.600394079089164756091179242503 +-0.289923100173473335949836382497 -0.778677371144294694360610264994 0.179183400422334659918277566248 +-0.289923100173473335949836382497 0.778677371144294694360610264994 0.179183400422334659918277566248 +-0.289898997545242342877003238755 -0.773862308263778664318977007497 -0.356505301594734202996761496252 +-0.289898997545242342877003238755 0.773862308263778664318977007497 -0.356505301594734202996761496252 +-0.289790150523185741082698996252 -0.05099770240485668182373046875 0.579586809873580910412727007497 +-0.289790150523185741082698996252 0.05099770240485668182373046875 0.579586809873580910412727007497 +-0.289722588658332835809261496252 -0.0599647521972656236122212192186 -0.339064639806747447625667746252 +-0.289722588658332835809261496252 0.0599647521972656236122212192186 -0.339064639806747447625667746252 +-0.28949774801731109619140625 -0.099941253662109375 -0.6846187412738800048828125 +-0.28949774801731109619140625 0.099941253662109375 -0.6846187412738800048828125 +-0.289442396163940462994190738755 -0.4702231884002685546875 0.5788896083831787109375 +-0.289442396163940462994190738755 0.4702231884002685546875 0.5788896083831787109375 +-0.289439988136291515008480246252 -0.210290408134460454769865123126 -0.715543222427368230675881477509 +-0.289439988136291515008480246252 -0.210288000106811534539730246252 0.178885996341705322265625 +-0.289439988136291515008480246252 0.210288000106811534539730246252 0.178885996341705322265625 +-0.289439988136291515008480246252 0.210290408134460454769865123126 -0.715543222427368230675881477509 +-0.289312791824340831414730246252 -0.0711249008774757357498330634371 -0.035204999148845672607421875 +-0.289312791824340831414730246252 0.0711249008774757357498330634371 -0.035204999148845672607421875 +-0.289236599206924405169871761245 -0.0597984015941619845291299384371 -0.0525965988636016845703125 +-0.289236599206924405169871761245 0.0597984015941619845291299384371 -0.0525965988636016845703125 +-0.289218297600746132580695757497 -0.267874601483345020636051003748 0.578442895412444979541533029987 +-0.289218297600746132580695757497 0.267874601483345020636051003748 0.578442895412444979541533029987 +-0.289151507616043135229233485006 0 -0.467858588695526156353565738755 +-0.289097595214843738897769753748 -0.0490907996892929118781800923443 0.272052788734436057360710492503 +-0.289097595214843738897769753748 0.0490907996892929118781800923443 0.272052788734436057360710492503 +-0.289055252075195279193309261245 -0.552025714516639731677116742503 0.578113037347793512488181022491 +-0.289055252075195279193309261245 0.552025714516639731677116742503 0.578113037347793512488181022491 +-0.289021593332290605005141514994 -0.156889595091342926025390625 -0.119800096750259391087389815311 +-0.289021593332290605005141514994 0.156889595091342926025390625 -0.119800096750259391087389815311 +-0.288969004154205288958934261245 -0.240579003095626825503572376874 -0.467566788196563720703125 +-0.288969004154205288958934261245 0.240579003095626825503572376874 -0.467566788196563720703125 +-0.288918596506118785516292746252 -0.475588810443878129419204014994 -0.224368196725845320260717130623 +-0.288918596506118785516292746252 0.475588810443878129419204014994 -0.224368196725845320260717130623 +-0.288768705725669871942073996252 -0.434561052918434165270866742503 -0.173980394005775473864616742503 +-0.288768705725669871942073996252 0.434561052918434165270866742503 -0.173980394005775473864616742503 +-0.28876125812530517578125 -0.1479532532393932342529296875 0.67618574202060699462890625 +-0.28876125812530517578125 0.1479532532393932342529296875 0.67618574202060699462890625 +-0.288736206293106090203792746252 -0.119511897861957552824385686563 -0.844007384777069158410256477509 +-0.288736206293106090203792746252 0.119511897861957552824385686563 -0.844007384777069158410256477509 +-0.288733953237533591540397992503 -0.294072756171226523669304242503 -0.180704243481159210205078125 +-0.288733953237533591540397992503 0.294072756171226523669304242503 -0.180704243481159210205078125 +-0.288604792952537547723323996252 -0.299806657433509871069077235006 0.359615314006805464330795985006 +-0.288604792952537547723323996252 0.299806657433509871069077235006 0.359615314006805464330795985006 +-0.288463002443313576428352007497 0 -0.198214796185493452584935880623 +-0.288378453254699740337940738755 -0.341392958164215110095085492503 0.0528074987232685089111328125 +-0.288378453254699740337940738755 0.341392958164215110095085492503 0.0528074987232685089111328125 +-0.288339996337890647204460492503 -0.368702411651611328125 -0.648782396316528342516960492503 +-0.288339996337890647204460492503 0.368702411651611328125 -0.648782396316528342516960492503 +-0.288290101289749134405582253748 -0.0716021999716758700271768134371 0.0419762983918189960808042826557 +-0.288290101289749134405582253748 0.0716021999716758700271768134371 0.0419762983918189960808042826557 +-0.288253811001777660028011496252 -0.135564301908016215936214621252 0.317855259776115450787159488755 +-0.288253811001777660028011496252 0.135564301908016215936214621252 0.317855259776115450787159488755 +-0.288253697752952564581363503748 0 -0.799631574749946616442741742503 +-0.288173046708107005731136496252 -0.462097349762916609350327235006 0.0769565470516681698898153740629 +-0.288173046708107005731136496252 0.462097349762916609350327235006 0.0769565470516681698898153740629 +-0.288071700930595364642528011245 -0.43560159206390380859375 -0.466118103265762306897102007497 +-0.288071700930595364642528011245 0.43560159206390380859375 -0.466118103265762306897102007497 +-0.288004195690155007092414507497 -0.0821109026670455849350460653113 -0.017644800245761871337890625 +-0.288004195690155007092414507497 0.0821109026670455849350460653113 -0.017644800245761871337890625 +-0.2879900038242340087890625 -0.4542579948902130126953125 -0.84303700923919677734375 +-0.2879900038242340087890625 0.4542579948902130126953125 -0.84303700923919677734375 +-0.287989801168441750256477007497 0 0.0840351015329360989669638115629 +-0.287927295267581928595035378748 -0.335013051331043254510433371252 -0.726198336482048012463508257497 +-0.287927295267581928595035378748 0.335013051331043254510433371252 -0.726198336482048012463508257497 +-0.28791950643062591552734375 -0.464151045680046114849659488755 -0.0645424984395503997802734375 +-0.28791950643062591552734375 0.464151045680046114849659488755 -0.0645424984395503997802734375 +-0.28791630268096923828125 -0.0909614965319633372864416287484 -0.177003404498100258557258257497 +-0.28791630268096923828125 0.0909614965319633372864416287484 -0.177003404498100258557258257497 +-0.287908600270748105121043636245 0 0.799755650758743219519431022491 +-0.2877759039402008056640625 -0.0481860011816024752517861884371 -0.0697365000844001742263955634371 +-0.2877759039402008056640625 0.0481860011816024752517861884371 -0.0697365000844001742263955634371 +-0.287711995840072620733707253748 -0.12021960318088531494140625 -0.512609982490539572985710492503 +-0.287711995840072620733707253748 0.12021960318088531494140625 -0.512609982490539572985710492503 +-0.287690699100494384765625 -0.0824070006608963040450888115629 0.0210530988872051245952565778907 +-0.287690699100494384765625 0.0824070006608963040450888115629 0.0210530988872051245952565778907 +-0.287682840228080716205028011245 -0.173753653466701490915014005623 -0.0977151036262512151520098768742 +-0.287682840228080716205028011245 0.173753653466701490915014005623 -0.0977151036262512151520098768742 +-0.28767359256744384765625 -0.268927192687988314556690738755 0.0701572000980377197265625 +-0.28767359256744384765625 0.268927192687988314556690738755 0.0701572000980377197265625 +-0.287652291357517242431640625 -0.316052106022834788934261496252 0.489762011170387312475327235006 +-0.287652291357517242431640625 0.316052106022834788934261496252 0.489762011170387312475327235006 +-0.28760159015655517578125 -0.0796371996402740478515625 -0.266352009773254405633480246252 +-0.28760159015655517578125 0.0796371996402740478515625 -0.266352009773254405633480246252 +-0.287579989433288607525440738755 -0.15436160564422607421875 -0.231236004829406760485710492503 +-0.287579989433288607525440738755 0.15436160564422607421875 -0.231236004829406760485710492503 +-0.28757441043853759765625 -0.672139215469360395971420985006 0.324853610992431651727230246252 +-0.28757441043853759765625 0.672139215469360395971420985006 0.324853610992431651727230246252 +-0.287518805265426613537727007497 -0.372141587734222401007144753748 -0.372616803646087624279914507497 +-0.287518805265426613537727007497 0.372141587734222401007144753748 -0.372616803646087624279914507497 +-0.287432003021240223272769753748 -0.0266263991594314596011994211722 -0.27690041065216064453125 +-0.287432003021240223272769753748 0.0266263991594314596011994211722 -0.27690041065216064453125 +-0.287405245006084442138671875 -0.6847364902496337890625 0.10504424571990966796875 +-0.287405245006084442138671875 0.6847364902496337890625 0.10504424571990966796875 +-0.2873879969120025634765625 -0.2596274912357330322265625 -0.3162305057048797607421875 +-0.2873879969120025634765625 0.2596274912357330322265625 -0.3162305057048797607421875 +-0.287374463677406322137386496252 -0.468951985239982660491619981258 0 +-0.287374463677406322137386496252 0.468951985239982660491619981258 0 +-0.287290406227111827508480246252 -0.228820395469665538445980246252 0.158446800708770763055355246252 +-0.287290406227111827508480246252 0.228820395469665538445980246252 0.158446800708770763055355246252 +-0.287267245352268218994140625 -0.68718297779560089111328125 -0.0880732499063014984130859375 +-0.287267245352268218994140625 0.68718297779560089111328125 -0.0880732499063014984130859375 +-0.28718774020671844482421875 -0.118288797140121457185379938437 -0.325624036788940418585269753748 +-0.28718774020671844482421875 0.118288797140121457185379938437 -0.325624036788940418585269753748 +-0.28718650341033935546875 -0.13275800645351409912109375 -0.3871684968471527099609375 +-0.28718650341033935546875 0.13275800645351409912109375 -0.3871684968471527099609375 +-0.287171296775341033935546875 -0.4208138883113861083984375 0.403668203949928305895866742503 +-0.287171296775341033935546875 0.4208138883113861083984375 0.403668203949928305895866742503 +-0.287123394012451182977230246252 0 -0.346496853232383716925113503748 +-0.287112003564834572522102007497 -0.0603558003902435261101011576557 0.062640599906444549560546875 +-0.287112003564834572522102007497 0.0603558003902435261101011576557 0.062640599906444549560546875 +-0.287107603251934073718132367503 -0.101680801808834084254407059689 0.57422171533107757568359375 +-0.287107603251934073718132367503 0.101680801808834084254407059689 0.57422171533107757568359375 +-0.287102401256561279296875 -0.403388392925262462274105246252 0.338895606994628895147769753748 +-0.287102401256561279296875 0.403388392925262462274105246252 0.338895606994628895147769753748 +-0.287031608819961536749332253748 -0.0244500003755092620849609375 0.0837554991245269692123898153113 +-0.287031608819961536749332253748 0.0244500003755092620849609375 0.0837554991245269692123898153113 +-0.287012994289398193359375 -0.6929092705249786376953125 0 +-0.287012994289398193359375 0.6929092705249786376953125 0 +-0.286966410279273942407485264994 -0.27972279489040374755859375 -0.573939120769500710217414507497 +-0.286966410279273942407485264994 0.27972279489040374755859375 -0.573939120769500710217414507497 +-0.286959157884120907855418636245 -0.0689689971506595583816690009371 0.797118085622787408972556022491 +-0.286959157884120907855418636245 0.0689689971506595583816690009371 0.797118085622787408972556022491 +-0.286925458908081021380809261245 -0.142899048328399641549779630623 -0.140547400712966896740852007497 +-0.286925458908081021380809261245 0.142899048328399641549779630623 -0.140547400712966896740852007497 +-0.2869000136852264404296875 -0.619234979152679443359375 0.73091399669647216796875 +-0.2869000136852264404296875 0.619234979152679443359375 0.73091399669647216796875 +-0.286847108602523770404246761245 -0.0121926002204418171964706019139 -0.0870063006877899169921875 +-0.286847108602523770404246761245 0.0121926002204418171964706019139 -0.0870063006877899169921875 +-0.286819398403167724609375 -0.190786743164062494448884876874 0.0619269013404846122017310960928 +-0.286819398403167724609375 0.190786743164062494448884876874 0.0619269013404846122017310960928 +-0.28681719303131103515625 -0.143289196491241471731470369377 0.239173603057861339227230246252 +-0.28681719303131103515625 0.143289196491241471731470369377 0.239173603057861339227230246252 +-0.286716154217720065044971988755 -0.341070744395256031378238503748 -0.0629644475877284975906533759371 +-0.286716154217720065044971988755 0.341070744395256031378238503748 -0.0629644475877284975906533759371 +-0.286623048782348621710269753748 -0.133600604534149153268529630623 0.149993544816970802990852007497 +-0.286623048782348621710269753748 0.133600604534149153268529630623 0.149993544816970802990852007497 +-0.286562111973762523309261496252 -0.073437102138996124267578125 -0.463669240474700983245526231258 +-0.286562111973762523309261496252 0.073437102138996124267578125 -0.463669240474700983245526231258 +-0.28651200234889984130859375 -0.56203798949718475341796875 -0.40561576187610626220703125 +-0.28651200234889984130859375 0.56203798949718475341796875 -0.40561576187610626220703125 +-0.286395198106765724865852007497 -0.0956416979432105907044103787484 0.177004092931747430972322376874 +-0.286395198106765724865852007497 0.0956416979432105907044103787484 0.177004092931747430972322376874 +-0.28610050678253173828125 -0.6061097085475921630859375 -0.20193459093570709228515625 +-0.28610050678253173828125 0.6061097085475921630859375 -0.20193459093570709228515625 +-0.2859840095043182373046875 -0.3918697535991668701171875 0.57197172939777374267578125 +-0.2859840095043182373046875 0.3918697535991668701171875 0.57197172939777374267578125 +-0.285756905376911174432308371252 -0.501693388819694496838508257497 0.298574258387088786736995871252 +-0.285756905376911174432308371252 0.501693388819694496838508257497 0.298574258387088786736995871252 +-0.285536997020244598388671875 -0.6203310191631317138671875 -0.310092754662036895751953125 +-0.285536997020244598388671875 0.6203310191631317138671875 -0.310092754662036895751953125 +-0.285358011722564697265625 -0.662837982177734375 -0.6922550201416015625 +-0.285358011722564697265625 0.662837982177734375 -0.6922550201416015625 +-0.28534400463104248046875 -0.076710402965545654296875 0.269618797302246082647769753748 +-0.28534400463104248046875 0.076710402965545654296875 0.269618797302246082647769753748 +-0.2853173911571502685546875 -0.0927039027214050237457598768742 0 +-0.2853173911571502685546875 0.0927039027214050237457598768742 0 +-0.285306859016418445929019753748 -0.87808977067470550537109375 -0.223739248514175398385717130623 +-0.285306859016418445929019753748 0.87808977067470550537109375 -0.223739248514175398385717130623 +-0.28527200222015380859375 -0.3717420101165771484375 0.883418023586273193359375 +-0.28527200222015380859375 0.3717420101165771484375 0.883418023586273193359375 +-0.2851339876651763916015625 -0.3901009857654571533203125 0.12852950394153594970703125 +-0.2851339876651763916015625 0.3901009857654571533203125 0.12852950394153594970703125 +-0.28511679172515869140625 -0.273143196105957053454460492503 0.695773601531982421875 +-0.28511679172515869140625 0.273143196105957053454460492503 0.695773601531982421875 +-0.285088801383972190173210492503 -0.267844390869140636102230246252 -0.0835687994956970242599325615629 +-0.285088801383972190173210492503 0.267844390869140636102230246252 -0.0835687994956970242599325615629 +-0.285075446963310275005909488755 -0.207117001712322251760767244377 0.279882904887199412957698996252 +-0.285075446963310275005909488755 0.207117001712322251760767244377 0.279882904887199412957698996252 +-0.285046210885047945904346988755 -0.230040889978408824578792746252 -0.261400043964385986328125 +-0.285046210885047945904346988755 0.230040889978408824578792746252 -0.261400043964385986328125 +-0.285043156147003151623664507497 -0.189226794242858875616519753748 -0.0737814001739025004944494412484 +-0.285043156147003151623664507497 0.189226794242858875616519753748 -0.0737814001739025004944494412484 +-0.285018396377563487664730246252 -0.5339992046356201171875 -0.523077583312988259045539507497 +-0.285018396377563487664730246252 0.5339992046356201171875 -0.523077583312988259045539507497 +-0.285016904771327961309879128748 -0.696324238181114218981804242503 -0.395470999181270599365234375 +-0.285016904771327961309879128748 0.696324238181114218981804242503 -0.395470999181270599365234375 +-0.2849557399749755859375 -0.50918023288249969482421875 0.47120623290538787841796875 +-0.2849557399749755859375 0.50918023288249969482421875 0.47120623290538787841796875 +-0.284937894344329811779914507497 -0.0363425999879837050010600307814 -0.0865427970886230440994424384371 +-0.284937894344329811779914507497 0.0363425999879837050010600307814 -0.0865427970886230440994424384371 +-0.2849070131778717041015625 -0.3281385004520416259765625 0.24729199707508087158203125 +-0.2849070131778717041015625 0.3281385004520416259765625 0.24729199707508087158203125 +-0.284900861978530872686832253748 -0.313665756583213828356804242503 -0.151476748287677764892578125 +-0.284900861978530872686832253748 0.313665756583213828356804242503 -0.151476748287677764892578125 +-0.284805251657962776867805132497 -0.673516753315925531531149772491 -0.606433472037315346447883257497 +-0.284805251657962776867805132497 0.673516753315925531531149772491 -0.606433472037315346447883257497 +-0.284797492623329151495426003748 -0.513609191775321938244758257497 -0.278560099005699168817073996252 +-0.284797492623329151495426003748 0.513609191775321938244758257497 -0.278560099005699168817073996252 +-0.284762108325958218646434261245 -0.139005298912525165899722878748 -0.624170410633087091589743522491 +-0.284762108325958218646434261245 0.139005298912525165899722878748 -0.624170410633087091589743522491 +-0.284606087207794178350894753748 -0.636390888690948508532585492503 0.5692149102687835693359375 +-0.284606087207794178350894753748 0.636390888690948508532585492503 0.5692149102687835693359375 +-0.284527957439422607421875 -0.0144368004053831086586079379686 0.203311145305633544921875 +-0.284527957439422607421875 0.0144368004053831086586079379686 0.203311145305633544921875 +-0.28431750833988189697265625 -0.3930795192718505859375 -0.57197172939777374267578125 +-0.28431750833988189697265625 0.3930795192718505859375 -0.57197172939777374267578125 +-0.2842344939708709716796875 0 0.4113524854183197021484375 +-0.284163898229598976818977007497 -0.0487374007701873793174662807814 0.0829188019037246648590411268742 +-0.284163898229598976818977007497 0.0487374007701873793174662807814 0.0829188019037246648590411268742 +-0.284001143276691403460887386245 -0.762279984354972794946547764994 -0.246519549190998082943693248126 +-0.284001143276691403460887386245 0.762279984354972794946547764994 -0.246519549190998082943693248126 +-0.283968740701675437243522992503 -0.460827910900115989001335492503 -0.359860154986381519659488503748 +-0.283968740701675437243522992503 0.460827910900115989001335492503 -0.359860154986381519659488503748 +-0.283906692266464255602897992503 -0.206267604231834433825554242503 0.423497793078422557488948996252 +-0.283906692266464255602897992503 0.206267604231834433825554242503 0.423497793078422557488948996252 +-0.283853602409362804070980246252 -0.587831211090087957238381477509 0.462473583221435557977230246252 +-0.283853602409362804070980246252 0.587831211090087957238381477509 0.462473583221435557977230246252 +-0.283762788772583041119190738755 -0.246255588531494151727230246252 0.13724720478057861328125 +-0.283762788772583041119190738755 0.246255588531494151727230246252 0.13724720478057861328125 +-0.2835347950458526611328125 -0.0802134007215499905685263115629 -0.0563373014330863924881143134371 +-0.2835347950458526611328125 0.0802134007215499905685263115629 -0.0563373014330863924881143134371 +-0.283287191390991177630809261245 -0.0230957988649606697773020158593 -0.204242491722106928042634876874 +-0.283287191390991177630809261245 0.0230957988649606697773020158593 -0.204242491722106928042634876874 +-0.28327000141143798828125 -0.041161000728607177734375 0.4099560081958770751953125 +-0.28327000141143798828125 0.041161000728607177734375 0.4099560081958770751953125 +-0.28326864540576934814453125 -0.128108750283718098028629128748 -0.160770045220851892642244251874 +-0.28326864540576934814453125 0.128108750283718098028629128748 -0.160770045220851892642244251874 +-0.283244842290878262591746761245 -0.0687438495457172310532101278113 -0.193769809603691084420873380623 +-0.283244842290878262591746761245 0.0687438495457172310532101278113 -0.193769809603691084420873380623 +-0.283214104175567638055355246252 -0.172585408389568345510767244377 -0.559020814299583501671975227509 +-0.283214104175567638055355246252 0.172585408389568345510767244377 -0.559020814299583501671975227509 +-0.283212298154830899310496761245 -0.5936181843280792236328125 0.239600902795791603772102007497 +-0.283212298154830899310496761245 0.5936181843280792236328125 0.239600902795791603772102007497 +-0.2831563055515289306640625 -0.205724042654037458932592130623 0 +-0.2831563055515289306640625 0.205724042654037458932592130623 0 +-0.283132803440094005242855246252 -0.205705207586288435495092130623 0.487361383438110307153579014994 +-0.283132803440094005242855246252 0.205705207586288435495092130623 0.487361383438110307153579014994 +-0.283111211657524119988948996252 -0.292974311113357532843082253748 -0.802504813671112038342414507497 +-0.283111211657524119988948996252 0.292974311113357532843082253748 -0.802504813671112038342414507497 +-0.283053302764892544818309261245 -0.09156270325183868408203125 -0.0386912986636161818077006557814 +-0.283053302764892544818309261245 0.09156270325183868408203125 -0.0386912986636161818077006557814 +-0.283050003647804249151676003748 -0.135668502748012537173494251874 0.789921981096267655786391514994 +-0.283050003647804249151676003748 0.135668502748012537173494251874 0.789921981096267655786391514994 +-0.282965192198753323626903011245 -0.03863404877483844757080078125 0.202331858873367298468082253748 +-0.282965192198753323626903011245 0.03863404877483844757080078125 0.202331858873367298468082253748 +-0.282914760708808887823551003748 -0.0632376980036497143844442803129 -0.904687842726707436291633257497 +-0.282914760708808887823551003748 0.0632376980036497143844442803129 -0.904687842726707436291633257497 +-0.282898008823394775390625 -0.3917255103588104248046875 -0.12852950394153594970703125 +-0.282898008823394775390625 0.3917255103588104248046875 -0.12852950394153594970703125 +-0.282843208312988314556690738755 -0.2828423976898193359375 0 +-0.282843208312988314556690738755 0.2828423976898193359375 0 +-0.282815104722976662365852007497 -0.0922965019941329872787960653113 0.0386912986636161818077006557814 +-0.282815104722976662365852007497 0.0922965019941329872787960653113 0.0386912986636161818077006557814 +-0.282655100524425495489566628748 -0.1517366468906402587890625 0.5653160512447357177734375 +-0.282655100524425495489566628748 0.1517366468906402587890625 0.5653160512447357177734375 +-0.282604497671127330438167746252 -0.0686691015958785927475460653113 -0.0736155018210411099532919365629 +-0.282604497671127330438167746252 0.0686691015958785927475460653113 -0.0736155018210411099532919365629 +-0.28257238864898681640625 -0.130370795726776123046875 -0.251309204101562488897769753748 +-0.28257238864898681640625 0.130370795726776123046875 -0.251309204101562488897769753748 +-0.282569396495819080694644753748 -0.0811868995428085271637286268742 0.0596921995282173115104917826557 +-0.282569396495819080694644753748 0.0811868995428085271637286268742 0.0596921995282173115104917826557 +-0.282541505992412567138671875 -0.205276496708393096923828125 0.66372598707675933837890625 +-0.282541505992412567138671875 0.205276496708393096923828125 0.66372598707675933837890625 +-0.28240334987640380859375 -0.332497787475585948602230246252 0.110424151271581658106946122189 +-0.28240334987640380859375 0.332497787475585948602230246252 0.110424151271581658106946122189 +-0.282368995249271392822265625 -0.6011242568492889404296875 0.348449997603893280029296875 +-0.282368995249271392822265625 0.6011242568492889404296875 0.348449997603893280029296875 +-0.282347792387008633685496761245 0 -0.640530806779861405786391514994 +-0.282207012176513671875 -0.8685309886932373046875 0.4074470102787017822265625 +-0.282207012176513671875 0.8685309886932373046875 0.4074470102787017822265625 +-0.2820830047130584716796875 -0.230439007282257080078125 -0.3425300121307373046875 +-0.2820830047130584716796875 0.230439007282257080078125 -0.3425300121307373046875 +-0.282014155387878440173210492503 -0.381576249003410361559929242503 0.278149846196174665990952235006 +-0.282014155387878440173210492503 0.381576249003410361559929242503 0.278149846196174665990952235006 +-0.281984508037567138671875 -0.433426016569137539935496761245 0.471833604574203480108707253748 +-0.281984508037567138671875 0.433426016569137539935496761245 0.471833604574203480108707253748 +-0.281981997191905975341796875 -0.67230074107646942138671875 -0.1760617531836032867431640625 +-0.281981997191905975341796875 0.67230074107646942138671875 -0.1760617531836032867431640625 +-0.28191570937633514404296875 -0.288258838653564497533920985006 -0.374073141813278220446647992503 +-0.28191570937633514404296875 0.288258838653564497533920985006 -0.374073141813278220446647992503 +-0.281815595924854278564453125 -0.867331925034522943640524772491 0.2661120891571044921875 +-0.281815595924854278564453125 0.867331925034522943640524772491 0.2661120891571044921875 +-0.281663399934768687860042746252 0 -0.10327470302581787109375 +-0.281655853986740090100227007497 -0.169552601873874664306640625 0.120091304183006272743305942186 +-0.281655853986740090100227007497 0.169552601873874664306640625 0.120091304183006272743305942186 +-0.28158299624919891357421875 -0.674445587396621748510483485006 -0.525199484825134343957131477509 +-0.28158299624919891357421875 0.674445587396621748510483485006 -0.525199484825134343957131477509 +-0.2815259993076324462890625 -0.0406760014593601226806640625 0.95869100093841552734375 +-0.2815259993076324462890625 0.0406760014593601226806640625 0.95869100093841552734375 +-0.281400007009506236688167746252 -0.0123750004917383190500279610546 0.1032519042491912841796875 +-0.281400007009506236688167746252 0.0123750004917383190500279610546 0.1032519042491912841796875 +-0.281392639875412020611378238755 -0.0185854503884911557987091867972 0.35067509114742279052734375 +-0.281392639875412020611378238755 0.0185854503884911557987091867972 0.35067509114742279052734375 +-0.281356188654899586065738503748 -0.204416553676128404104517244377 -0.285574498772621143682926003748 +-0.281356188654899586065738503748 0.204416553676128404104517244377 -0.285574498772621143682926003748 +-0.281264698505401589123664507497 -0.102853202819824213198884876874 0.017644800245761871337890625 +-0.281264698505401589123664507497 0.102853202819824213198884876874 0.017644800245761871337890625 +-0.2812444865703582763671875 -0.080501496791839599609375 0.405488491058349609375 +-0.2812444865703582763671875 0.080501496791839599609375 0.405488491058349609375 +-0.281184893846511851922542746252 -0.102429297566413876618973688437 -0.0210530988872051245952565778907 +-0.281184893846511851922542746252 0.102429297566413876618973688437 -0.0210530988872051245952565778907 +-0.281184402108192399438735264994 -0.204291141033172585217414507497 0.0412366487085819230506977817186 +-0.281184402108192399438735264994 0.204291141033172585217414507497 0.0412366487085819230506977817186 +-0.281136989593505859375 -0.285623013973236083984375 0.2989675104618072509765625 +-0.281136989593505859375 0.285623013973236083984375 0.2989675104618072509765625 +-0.280917888879776034283253238755 -0.744428712129592939916733485006 0.420608702301979053839176003748 +-0.280917888879776034283253238755 0.744428712129592939916733485006 0.420608702301979053839176003748 +-0.280866149067878712042301003748 -0.27703665196895599365234375 0.216482846438884740658536998126 +-0.280866149067878712042301003748 0.27703665196895599365234375 0.216482846438884740658536998126 +-0.280736106634140003546207253748 -0.0243254989385604837581755788278 -0.102934795618057253752120061563 +-0.280736106634140003546207253748 0.0243254989385604837581755788278 -0.102934795618057253752120061563 +-0.280537194013595558850227007497 -0.06973560154438018798828125 0.0802236020565032931228799384371 +-0.280537194013595558850227007497 0.06973560154438018798828125 0.0802236020565032931228799384371 +-0.280526942014694247173878238755 -0.449636536836624189916733485006 0.147077144682407401354851117503 +-0.280526942014694247173878238755 0.449636536836624189916733485006 0.147077144682407401354851117503 +-0.280368608236312877313167746252 -0.49051201343536376953125 0.2019689977169036865234375 +-0.280368608236312877313167746252 0.49051201343536376953125 0.2019689977169036865234375 +-0.2803629934787750244140625 -0.3503085076808929443359375 0.22063599526882171630859375 +-0.2803629934787750244140625 0.3503085076808929443359375 0.22063599526882171630859375 +-0.28034614026546478271484375 -0.203682503104209877697883257497 -0.0491875983774661962311114393742 +-0.28034614026546478271484375 0.203682503104209877697883257497 -0.0491875983774661962311114393742 +-0.280197304487228404656917746252 -0.0562289983034133869499449076557 -0.0912566989660262978256710653113 +-0.280197304487228404656917746252 0.0562289983034133869499449076557 -0.0912566989660262978256710653113 +-0.280125600099563609735042746252 -0.498214817047119118420539507497 -0.182514595985412586554019753748 +-0.280125600099563609735042746252 0.498214817047119118420539507497 -0.182514595985412586554019753748 +-0.280084702372550953253238503748 -0.118690946698188776187166126874 0.173104053735733010022102007497 +-0.280084702372550953253238503748 0.118690946698188776187166126874 0.173104053735733010022102007497 +-0.280054986476898193359375 -0.12118999660015106201171875 0.95230400562286376953125 +-0.280054986476898193359375 0.12118999660015106201171875 0.95230400562286376953125 +-0.279958343505859352795539507497 -0.0628575488924980191329794365629 0.200430300831794722116185880623 +-0.279958343505859352795539507497 0.0628575488924980191329794365629 0.200430300831794722116185880623 +-0.279879748821258544921875 -0.6635684967041015625 0.209389507770538330078125 +-0.279879748821258544921875 0.6635684967041015625 0.209389507770538330078125 +-0.279837262630462657586605246252 -0.453846243023872386590511496252 -0.134962851554155355282560435626 +-0.279837262630462657586605246252 0.453846243023872386590511496252 -0.134962851554155355282560435626 +-0.279729057848453532830745871252 -0.747440716624259926526008257497 0.292547897994518246722606136245 +-0.279729057848453532830745871252 0.747440716624259926526008257497 0.292547897994518246722606136245 +-0.279711836576461814196647992503 -0.0227138990536332151248810617972 0.473017612099647544177116742503 +-0.279711836576461814196647992503 0.0227138990536332151248810617972 0.473017612099647544177116742503 +-0.279650561511516571044921875 -0.25094155967235565185546875 -0.87253887951374053955078125 +-0.279650561511516571044921875 0.25094155967235565185546875 -0.87253887951374053955078125 +-0.279650402069091807977230246252 -0.28209400177001953125 0.04710359871387481689453125 +-0.279650402069091807977230246252 0.28209400177001953125 0.04710359871387481689453125 +-0.2795985043048858642578125 -0.0333704985678195953369140625 -0.4131720066070556640625 +-0.2795985043048858642578125 0.0333704985678195953369140625 -0.4131720066070556640625 +-0.279507791996002230572315738755 -0.301736502349376711773487613755 -0.503319704532623313220085492503 +-0.279507791996002230572315738755 0.301736502349376711773487613755 -0.503319704532623313220085492503 +-0.279484009742736849712940738755 -0.104618394374847420436047684689 0.266352796554565451891960492503 +-0.279484009742736849712940738755 0.104618394374847420436047684689 0.266352796554565451891960492503 +-0.279463791847228970599559261245 -0.0368183992803096729606870951557 0.102685797214508059416182561563 +-0.279463791847228970599559261245 0.0368183992803096729606870951557 0.102685797214508059416182561563 +-0.279393607378005948138621761245 0 -0.530979609489440895764289507497 +-0.279334339499473560675113503748 -0.0552591014653444276283345004686 0.348451647162437427862613503748 +-0.279334339499473560675113503748 0.0552591014653444276283345004686 0.348451647162437427862613503748 +-0.279211494326591480596988503748 -0.165830844640731805972322376874 0.31151430308818817138671875 +-0.279211494326591480596988503748 0.165830844640731805972322376874 0.31151430308818817138671875 +-0.2791033089160919189453125 -0.185195493698120106085269753748 0.101508049666881552952624190311 +-0.2791033089160919189453125 0.185195493698120106085269753748 0.101508049666881552952624190311 +-0.279015004634857177734375 -0.20271350443363189697265625 0.362019002437591552734375 +-0.279015004634857177734375 0.20271350443363189697265625 0.362019002437591552734375 +-0.278953653573989879266292746252 -0.331969955563545249255241742503 -0.120335845649242406674161998126 +-0.278953653573989879266292746252 0.331969955563545249255241742503 -0.120335845649242406674161998126 +-0.278928300738334633557258257497 -0.317789503931999173236278011245 0.557861483097076393811164507497 +-0.278928300738334633557258257497 0.317789503931999173236278011245 0.557861483097076393811164507497 +-0.278877210617065440789730246252 -0.262511992454528830798210492503 0.115391194820404052734375 +-0.278877210617065440789730246252 0.262511992454528830798210492503 0.115391194820404052734375 +-0.278797799348831143451121761245 -0.350210988521575894427684261245 0.399529802799224842413394753748 +-0.278797799348831143451121761245 0.350210988521575894427684261245 0.399529802799224842413394753748 +-0.278797449171543088031199886245 -0.667853480577468849865852007497 0.445807987451553311419871761245 +-0.278797449171543088031199886245 0.667853480577468849865852007497 0.445807987451553311419871761245 +-0.278793513774871826171875 -0.4135735034942626953125 0.0350884981453418731689453125 +-0.278793513774871826171875 0.4135735034942626953125 0.0350884981453418731689453125 +-0.278743600845336947369190738755 -0.2025167942047119140625 0.203196811676025407278345369377 +-0.278743600845336947369190738755 0.2025167942047119140625 0.203196811676025407278345369377 +-0.278700953722000155377003238755 -0.146521103382110606805355246252 -0.450951609015464827123764735006 +-0.278700953722000155377003238755 0.146521103382110606805355246252 -0.450951609015464827123764735006 +-0.278636991977691650390625 -0.344672405719757046771434261245 -0.404428803920745816302684261245 +-0.278636991977691650390625 0.344672405719757046771434261245 -0.404428803920745816302684261245 +-0.2784855067729949951171875 -0.414223492145538330078125 -0.029408000409603118896484375 +-0.2784855067729949951171875 0.414223492145538330078125 -0.029408000409603118896484375 +-0.278280806541442882195980246252 -0.28178799152374267578125 -0.0561724007129669189453125 +-0.278280806541442882195980246252 0.28178799152374267578125 -0.0561724007129669189453125 +-0.278141584992408763543636496252 -0.0658641517162323053558026231258 0.469893041253089949194077235006 +-0.278141584992408763543636496252 0.0658641517162323053558026231258 0.469893041253089949194077235006 +-0.27812159061431884765625 -0.05311679840087890625 -0.282536792755126942022769753748 +-0.27812159061431884765625 0.05311679840087890625 -0.282536792755126942022769753748 +-0.2781153023242950439453125 -0.855950403213501020971420985006 0 +-0.2781153023242950439453125 0.855950403213501020971420985006 0 +-0.278095296025276161877570757497 -0.112883049249649036749332253748 -0.18005679547786712646484375 +-0.278095296025276161877570757497 0.112883049249649036749332253748 -0.18005679547786712646484375 +-0.27796019613742828369140625 -0.155875647068023676089509876874 0.144709952175617218017578125 +-0.27796019613742828369140625 0.155875647068023676089509876874 0.144709952175617218017578125 +-0.277903255820274364129573996252 -0.412421712279319729876903011245 0.689331296086311273718649772491 +-0.277903255820274364129573996252 0.412421712279319729876903011245 0.689331296086311273718649772491 +-0.277835352718830141949268863755 -0.0433608479797840118408203125 -0.586026364564895652087272992503 +-0.277835352718830141949268863755 0.0433608479797840118408203125 -0.586026364564895652087272992503 +-0.277814388275146484375 -0.748104000091552756579460492503 0.05621039867401123046875 +-0.277814388275146484375 0.748104000091552756579460492503 0.05621039867401123046875 +-0.27776969969272613525390625 -0.467328625917434681280582253748 -0.717250478267669744347756477509 +-0.27776969969272613525390625 0.467328625917434681280582253748 -0.717250478267669744347756477509 +-0.277750790119171142578125 -0.4971707761287689208984375 0.696904206275939963610710492503 +-0.277750790119171142578125 0.4971707761287689208984375 0.696904206275939963610710492503 +-0.277527189254760775494190738755 -0.748839998245239280016960492503 -0.0470928013324737604339276231258 +-0.277527189254760775494190738755 0.748839998245239280016960492503 -0.0470928013324737604339276231258 +-0.277450501918792724609375 -0.119336001574993133544921875 0.398472011089324951171875 +-0.277450501918792724609375 0.119336001574993133544921875 0.398472011089324951171875 +-0.277439188957214366570980246252 -0.168943202495574956722990123126 0.233421611785888688528345369377 +-0.277439188957214366570980246252 0.168943202495574956722990123126 0.233421611785888688528345369377 +-0.277371157705783855096370871252 -0.201519703865051275082365123126 0.777788269519805841589743522491 +-0.277371157705783855096370871252 0.201519703865051275082365123126 0.777788269519805841589743522491 +-0.277245005965232882427784488755 -0.297396013140678427966179242503 0.192849299311637883969083873126 +-0.277245005965232882427784488755 0.297396013140678427966179242503 0.192849299311637883969083873126 +-0.277211236953735340460269753748 -0.238108062744140619448884876874 0.262599742412567171978565738755 +-0.277211236953735340460269753748 0.238108062744140619448884876874 0.262599742412567171978565738755 +-0.277164298295974720343082253748 -0.1148039996623992919921875 0 +-0.277164298295974720343082253748 0.1148039996623992919921875 0 +-0.277152009308338165283203125 -0.53345851600170135498046875 -0.44845126569271087646484375 +-0.277152009308338165283203125 0.53345851600170135498046875 -0.44845126569271087646484375 +-0.277104163169860862048210492503 -0.3535717427730560302734375 0.0264672003686428070068359375 +-0.277104163169860862048210492503 0.3535717427730560302734375 0.0264672003686428070068359375 +-0.27702136337757110595703125 -0.0893605493009090451339559990629 -0.343182152509689364361378238755 +-0.27702136337757110595703125 0.0893605493009090451339559990629 -0.343182152509689364361378238755 +-0.276856648921966541632144753748 -0.0300190486013889312744140625 -0.353481298685073885845753238755 +-0.276856648921966541632144753748 0.0300190486013889312744140625 -0.353481298685073885845753238755 +-0.27684359252452850341796875 -0.336006006598472628521534488755 0.336091798543930064813167746252 +-0.27684359252452850341796875 0.336006006598472628521534488755 0.336091798543930064813167746252 +-0.276832245290279388427734375 -0.485465598106384288445980246252 -0.640458825230598383093649772491 +-0.276832245290279388427734375 0.485465598106384288445980246252 -0.640458825230598383093649772491 +-0.276731696724891618188735264994 -0.0460792474448680836052183451557 -0.209275859594345081671207253748 +-0.276731696724891618188735264994 0.0460792474448680836052183451557 -0.209275859594345081671207253748 +-0.276639309525489818231136496252 -0.0905332513153553064544354356258 0.34318260848522186279296875 +-0.276639309525489818231136496252 0.0905332513153553064544354356258 0.34318260848522186279296875 +-0.276635107398033097680922764994 -0.402117806673049915655582253748 -0.501771205663681052477897992503 +-0.276635107398033097680922764994 0.402117806673049915655582253748 -0.501771205663681052477897992503 +-0.276572102308273282122996761245 -0.0575331017374992315094317518742 0.100984203815460207853682561563 +-0.276572102308273282122996761245 0.0575331017374992315094317518742 0.100984203815460207853682561563 +-0.276560707390308413433643863755 -0.43387435376644134521484375 -0.397199398279190096783253238755 +-0.276560707390308413433643863755 0.43387435376644134521484375 -0.397199398279190096783253238755 +-0.276533406972885142938167746252 -0.101761204004287716951004938437 0.0563373014330863924881143134371 +-0.276533406972885142938167746252 0.101761204004287716951004938437 0.0563373014330863924881143134371 +-0.2764619886875152587890625 -0.353654542565345786364616742503 -0.0315796483308076886276083428129 +-0.2764619886875152587890625 0.353654542565345786364616742503 -0.0315796483308076886276083428129 +-0.276459956169128440173210492503 -0.200857158005237595999048494377 0.552925103902816794665397992503 +-0.276459956169128440173210492503 0.200857158005237595999048494377 0.552925103902816794665397992503 +-0.276439493894577004162727007497 -0.0442236006259918226768412807814 -0.107821798324584952610827315311 +-0.276439493894577004162727007497 0.0442236006259918226768412807814 -0.107821798324584952610827315311 +-0.276385009288787841796875 -0.850639998912811279296875 -0.4472149908542633056640625 +-0.276385009288787841796875 0.850639998912811279296875 -0.4472149908542633056640625 +-0.276324892044067349505809261245 -0.100406402349472040347322376874 -0.0596921995282173115104917826557 +-0.276324892044067349505809261245 0.100406402349472040347322376874 -0.0596921995282173115104917826557 +-0.276214247941970858502003238755 -0.540027165412902854235710492503 -0.233615194261074077264339621252 +-0.276214247941970858502003238755 0.540027165412902854235710492503 -0.233615194261074077264339621252 +-0.276177594065666220934929242503 -0.849989676475524924548210492503 -0.106037096679210671168469559689 +-0.276177594065666220934929242503 0.849989676475524924548210492503 -0.106037096679210671168469559689 +-0.2761349976062774658203125 -0.328001499176025390625 -0.2572250068187713623046875 +-0.2761349976062774658203125 0.328001499176025390625 -0.2572250068187713623046875 +-0.276083993911743152960269753748 -0.2209804058074951171875 -0.186936795711517333984375 +-0.276083993911743152960269753748 0.2209804058074951171875 -0.186936795711517333984375 +-0.276042255759239241186264735006 -0.245834049582481395379573996252 0.407266756892204317974659488755 +-0.276042255759239241186264735006 0.245834049582481395379573996252 0.407266756892204317974659488755 +-0.27601794898509979248046875 -0.668465501070022560803352007497 -0.446618053317069996221988503748 +-0.27601794898509979248046875 0.668465501070022560803352007497 -0.446618053317069996221988503748 +-0.275984394550323475225894753748 -0.0888006001710891640366085653113 -0.07711739838123321533203125 +-0.275984394550323475225894753748 0.0888006001710891640366085653113 -0.07711739838123321533203125 +-0.275940603017806984631477007497 -0.200482195615768438168302623126 -0.493622982501983609271434261245 +-0.275940603017806984631477007497 0.200482195615768438168302623126 -0.493622982501983609271434261245 +-0.275938796997070301397769753748 -0.10565960407257080078125 -0.269618010520935091900440738755 +-0.275938796997070301397769753748 0.10565960407257080078125 -0.269618010520935091900440738755 +-0.275934612751007113384815738755 -0.274686312675476107525440738755 0.811422890424728371350227007497 +-0.275934612751007113384815738755 0.274686312675476107525440738755 0.811422890424728371350227007497 +-0.275921787321567524298160378748 -0.72237999737262725830078125 0.551845499873161338122429242503 +-0.275921787321567524298160378748 0.72237999737262725830078125 0.551845499873161338122429242503 +-0.275905609130859375 0 -0.28961360454559326171875 +-0.275866198539733875616519753748 -0.112510201334953305329911188437 0.035204999148845672607421875 +-0.275866198539733875616519753748 0.112510201334953305329911188437 0.035204999148845672607421875 +-0.275755146145820639880241742503 -0.386123648285865816998096988755 -0.278149846196174665990952235006 +-0.275755146145820639880241742503 0.386123648285865816998096988755 -0.278149846196174665990952235006 +-0.275742357969284090923878238755 -0.359687903523445151598991742503 0.465930405259132374151676003748 +-0.275742357969284090923878238755 0.359687903523445151598991742503 0.465930405259132374151676003748 +-0.275696995854377735479801003748 -0.177359850704669946841463001874 -0.30827701091766357421875 +-0.275696995854377735479801003748 0.177359850704669946841463001874 -0.30827701091766357421875 +-0.275619696080684650763004128748 -0.848279678821563631885283029987 -0.3270393908023834228515625 +-0.275619696080684650763004128748 0.848279678821563631885283029987 -0.3270393908023834228515625 +-0.275546944141387917248664507497 -0.0865623481571674291412676893742 0.197688394784927362612947376874 +-0.275546944141387917248664507497 0.0865623481571674291412676893742 0.197688394784927362612947376874 +-0.275472307205200162005809261245 -0.09037649631500244140625 0.07711739838123321533203125 +-0.275472307205200162005809261245 0.09037649631500244140625 0.07711739838123321533203125 +-0.2753891050815582275390625 -0.0284718006849288933490793596093 0.6429233849048614501953125 +-0.2753891050815582275390625 0.0284718006849288933490793596093 0.6429233849048614501953125 +-0.275356811285018932000667746252 -0.847455310821533247533920985006 0.126482395827770238705411998126 +-0.275356811285018932000667746252 0.847455310821533247533920985006 0.126482395827770238705411998126 +-0.275318992137908946649105246252 -0.111523202061653128880358565311 -0.0419762983918189960808042826557 +-0.275318992137908946649105246252 0.111523202061653128880358565311 -0.0419762983918189960808042826557 +-0.275275611877441428454460492503 -0.199998795986175537109375 -0.210294389724731467516960492503 +-0.275275611877441428454460492503 0.199998795986175537109375 -0.210294389724731467516960492503 +-0.275191691517829850610610264994 -0.199936798214912392346320757497 0.0824302494525909340561398153113 +-0.275191691517829850610610264994 0.199936798214912392346320757497 0.0824302494525909340561398153113 +-0.275190603733062755242855246252 -0.0121920000761747363698939139454 -0.118834197521209716796875 +-0.275190603733062755242855246252 0.0121920000761747363698939139454 -0.118834197521209716796875 +-0.27518999576568603515625 -0.240599608421325689144865123126 -0.162426400184631364309595369377 +-0.27518999576568603515625 0.240599608421325689144865123126 -0.162426400184631364309595369377 +-0.27515070140361785888671875 -0.255315501987934123651058371252 -0.402002698183059725689503238755 +-0.27515070140361785888671875 0.255315501987934123651058371252 -0.402002698183059725689503238755 +-0.275115591287612926141292746252 -0.2493546009063720703125 0.471310186386108387335269753748 +-0.275115591287612926141292746252 0.2493546009063720703125 0.471310186386108387335269753748 +-0.275106003880500826763721988755 -0.527907884120941139904914507497 0.261017240583896636962890625 +-0.275106003880500826763721988755 0.527907884120941139904914507497 0.261017240583896636962890625 +-0.275073137879371654168636496252 -0.406385102868080161364616742503 0.248366256058216106072933371252 +-0.275073137879371654168636496252 0.406385102868080161364616742503 0.248366256058216106072933371252 +-0.27500450611114501953125 -0.19980199635028839111328125 -0.366676509380340576171875 +-0.27500450611114501953125 0.19980199635028839111328125 -0.366676509380340576171875 +-0.274998344480991363525390625 -0.109023196250200279933117997189 0.463670355081558238641292746252 +-0.274998344480991363525390625 0.109023196250200279933117997189 0.463670355081558238641292746252 +-0.27485048770904541015625 -0.100183002650737762451171875 -0.40548801422119140625 +-0.27485048770904541015625 0.100183002650737762451171875 -0.40548801422119140625 +-0.274844491481780972552684261245 -0.548688000440597511975227007497 -0.336751094460487343518195757497 +-0.274844491481780972552684261245 0.548688000440597511975227007497 -0.336751094460487343518195757497 +-0.274716742336750030517578125 -0.64869676530361175537109375 -0.25733850896358489990234375 +-0.274716742336750030517578125 0.64869676530361175537109375 -0.25733850896358489990234375 +-0.27462995052337646484375 -0.163949450850486733166633257497 -0.142123100161552412545873380623 +-0.27462995052337646484375 0.163949450850486733166633257497 -0.142123100161552412545873380623 +-0.274426388740539539679019753748 -0.331413602828979525494190738755 0.674429607391357488488381477509 +-0.274426388740539539679019753748 0.331413602828979525494190738755 0.674429607391357488488381477509 +-0.2743540108203887939453125 -0.19932700693607330322265625 0.940743982791900634765625 +-0.2743540108203887939453125 0.19932700693607330322265625 0.940743982791900634765625 +-0.27422249317169189453125 -0.406084001064300537109375 0.09948749840259552001953125 +-0.27422249317169189453125 0.406084001064300537109375 0.09948749840259552001953125 +-0.274105793237686135022102007497 -0.0765530973672866738022335653113 -0.0948981016874313326736611884371 +-0.274105793237686135022102007497 0.0765530973672866738022335653113 -0.0948981016874313326736611884371 +-0.274088507890701271740852007497 -0.5310529172420501708984375 0.364497703313827470239516514994 +-0.274088507890701271740852007497 0.5310529172420501708984375 0.364497703313827470239516514994 +-0.274086755514144853052016514994 -0.181288799643516518322883257497 -0.120460899174213403872713001874 +-0.274086755514144853052016514994 0.181288799643516518322883257497 -0.120460899174213403872713001874 +-0.27408599853515625 -0.3519900143146514892578125 -0.22578750550746917724609375 +-0.27408599853515625 0.3519900143146514892578125 -0.22578750550746917724609375 +-0.274067854881286598889289507497 0 -0.217685306072235101870759876874 +-0.274062952399253823010383257497 -0.216714406013488763980134876874 0.0206031005829572649856729071871 +-0.274062952399253823010383257497 0.216714406013488763980134876874 0.0206031005829572649856729071871 +-0.274053597450256369860710492503 -0.7381455898284912109375 -0.14154720306396484375 +-0.274053597450256369860710492503 0.7381455898284912109375 -0.14154720306396484375 +-0.27402698993682861328125 -0.1990920007228851318359375 -0.94088900089263916015625 +-0.27402698993682861328125 0.1990920007228851318359375 -0.94088900089263916015625 +-0.273969000577926613537727007497 0 0.122233799099922171849108565311 +-0.273803246021270707544204014994 -0.0919306546449661227127236884371 -0.197688040137290937936498380623 +-0.273803246021270707544204014994 0.0919306546449661227127236884371 -0.197688040137290937936498380623 +-0.273793497681617703509715511245 -0.730869957804679892809929242503 -0.336699451506137836798160378748 +-0.273793497681617703509715511245 0.730869957804679892809929242503 -0.336699451506137836798160378748 +-0.273748803138732899054019753748 -0.158668005466461203845085492503 -0.7347695827484130859375 +-0.273748803138732899054019753748 0.158668005466461203845085492503 -0.7347695827484130859375 +-0.27371819317340850830078125 -0.216733995079994190557926003748 -0.024592049419879913330078125 +-0.27371819317340850830078125 0.216733995079994190557926003748 -0.024592049419879913330078125 +-0.273590503633022286145148882497 -0.431545095145702328753856136245 -0.800885158777236871863181022491 +-0.273590503633022286145148882497 0.431545095145702328753856136245 -0.800885158777236871863181022491 +-0.273422104120254472192641514994 -0.083353199064731597900390625 0.638977491855621249072783029987 +-0.273422104120254472192641514994 0.083353199064731597900390625 0.638977491855621249072783029987 +-0.2733538448810577392578125 -0.3473275601863861083984375 0.0845059521496295956710653740629 +-0.2733538448810577392578125 0.3473275601863861083984375 0.0845059521496295956710653740629 +-0.2732659876346588134765625 0 -0.96193897724151611328125 +-0.2732140123844146728515625 -0.371746003627777099609375 0.1927669942378997802734375 +-0.2732140123844146728515625 0.371746003627777099609375 0.1927669942378997802734375 +-0.2731755077838897705078125 -0.4081160128116607666015625 -0.093895502388477325439453125 +-0.2731755077838897705078125 0.4081160128116607666015625 -0.093895502388477325439453125 +-0.273040795326232876849559261245 -0.0246722996234893798828125 0.12181949615478515625 +-0.273040795326232876849559261245 0.0246722996234893798828125 0.12181949615478515625 +-0.273005998134613014904914507497 -0.527605783939361527856704014994 0.0842592000961303738693075615629 +-0.273005998134613014904914507497 0.527605783939361527856704014994 0.0842592000961303738693075615629 +-0.272947359085082996710269753748 -0.588145336508750893322883257497 0.04566249810159206390380859375 +-0.272947359085082996710269753748 0.588145336508750893322883257497 0.04566249810159206390380859375 +-0.272919988632202181744190738755 -0.496188020706176791119190738755 -0.565076780319213933800881477509 +-0.272919988632202181744190738755 0.496188020706176791119190738755 -0.565076780319213933800881477509 +-0.272868800163269031866519753748 -0.732872819900512784130341970013 0.168643200397491477282585492503 +-0.272868800163269031866519753748 0.732872819900512784130341970013 0.168643200397491477282585492503 +-0.272806799411773659436164507497 -0.529702198505401566919204014994 -0.070655398070812225341796875 +-0.272806799411773659436164507497 0.529702198505401566919204014994 -0.070655398070812225341796875 +-0.272770404815673828125 -0.177784395217895518914730246252 -0.232355189323425304070980246252 +-0.272770404815673828125 0.177784395217895518914730246252 -0.232355189323425304070980246252 +-0.272695305943489063604801003748 -0.112872347980737683381669000937 -0.797118085622787408972556022491 +-0.272695305943489063604801003748 0.112872347980737683381669000937 -0.797118085622787408972556022491 +-0.272693844139575980456413617503 -0.588790795207023598401008257497 -0.0382583511993289035468812642193 +-0.272693844139575980456413617503 0.588790795207023598401008257497 -0.0382583511993289035468812642193 +-0.272656393051147472039730246252 -0.2775115966796875 0.0929827988147735595703125 +-0.272656393051147472039730246252 0.2775115966796875 0.0929827988147735595703125 +-0.272599601745605490954460492503 -0.258735203742980979235710492503 -0.136914396286010736636384876874 +-0.272599601745605490954460492503 0.258735203742980979235710492503 -0.136914396286010736636384876874 +-0.272555013000965129510433371252 -0.588273230195045404578024772491 0.694368296861648581774772992503 +-0.272555013000965129510433371252 0.588273230195045404578024772491 0.694368296861648581774772992503 +-0.272433701157569874151676003748 -0.141172154247760750500617632497 0.168375547230243671759097878748 +-0.272433701157569874151676003748 0.141172154247760750500617632497 0.168375547230243671759097878748 +-0.27241574227809906005859375 -0.0499530024826526641845703125 -0.6969892680644989013671875 +-0.27241574227809906005859375 0.0499530024826526641845703125 -0.6969892680644989013671875 +-0.2724156081676483154296875 -0.0784640997648239080231036268742 0.0981483042240142850021200615629 +-0.2724156081676483154296875 0.0784640997648239080231036268742 0.0981483042240142850021200615629 +-0.272394597530364990234375 -0.534603595733642578125 0 +-0.272394597530364990234375 0.534603595733642578125 0 +-0.272293800115585293841746761245 -0.124677899479866016729801003748 0.0176483999937772743915598283593 +-0.272293800115585293841746761245 0.124677899479866016729801003748 0.0176483999937772743915598283593 +-0.27227385342121124267578125 -0.316306793689727805407585492503 0.168276147544383997134431751874 +-0.27227385342121124267578125 0.316306793689727805407585492503 0.168276147544383997134431751874 +-0.272232896089553810803352007497 -0.124280700087547296694978626874 -0.0210593998432159409950337192186 +-0.272232896089553810803352007497 0.124280700087547296694978626874 -0.0210593998432159409950337192186 +-0.272232007980346690789730246252 -0.132240402698516862356470369377 0.261538410186767600329460492503 +-0.272232007980346690789730246252 0.132240402698516862356470369377 0.261538410186767600329460492503 +-0.272052001953125011102230246252 -0.519553613662719793175881477509 0.544106388092041037829460492503 +-0.272052001953125011102230246252 0.519553613662719793175881477509 0.544106388092041037829460492503 +-0.271942806243896495477230246252 -0.436771810054779052734375 0.308670008182525601458934261245 +-0.271942806243896495477230246252 0.436771810054779052734375 0.308670008182525601458934261245 +-0.271939206123352039679019753748 0 0.293341207504272449835269753748 +-0.271820494532585110736278011245 -0.197488206624984730108707253748 -0.0980412960052490234375 +-0.271820494532585110736278011245 0.197488206624984730108707253748 -0.0980412960052490234375 +-0.271690244972705829962222878748 -0.458400157094001781121761496252 0.372228360176086459087940738755 +-0.271690244972705829962222878748 0.458400157094001781121761496252 0.372228360176086459087940738755 +-0.271494302153587330206363503748 -0.149496203660964943615852007497 -0.162609300017356850354133257497 +-0.271494302153587330206363503748 0.149496203660964943615852007497 -0.162609300017356850354133257497 +-0.27135224640369415283203125 -0.44083423912525177001953125 0.54270900785923004150390625 +-0.27135224640369415283203125 0.44083423912525177001953125 0.54270900785923004150390625 +-0.271349988877773284912109375 -0.197147257626056671142578125 -0.67082177102565765380859375 +-0.271349988877773284912109375 0.197147257626056671142578125 -0.67082177102565765380859375 +-0.27132301032543182373046875 -0.347658759355545077252003238755 -0.0895382992923259707351846259371 +-0.27132301032543182373046875 0.347658759355545077252003238755 -0.0895382992923259707351846259371 +-0.271297597885131858141960492503 0 -0.752594423294067449425881477509 +-0.271282804012298595086605246252 -0.0319479010999202742149272182814 -0.124036198854446402806139815311 +-0.271282804012298595086605246252 0.0319479010999202742149272182814 -0.124036198854446402806139815311 +-0.2711802423000335693359375 -0.412381196022033713610710492503 -0.242699594795703910143913617503 +-0.2711802423000335693359375 0.412381196022033713610710492503 -0.242699594795703910143913617503 +-0.271162448823452029156300113755 -0.579632294178009099816506477509 -0.1140054501593112945556640625 +-0.271162448823452029156300113755 0.579632294178009099816506477509 -0.1140054501593112945556640625 +-0.27110850811004638671875 -0.2381094992160797119140625 0.34612751007080078125 +-0.27110850811004638671875 0.2381094992160797119140625 0.34612751007080078125 +-0.271090111136436440197883257497 -0.629696083068847611841079014994 -0.657642269134521506579460492503 +-0.271090111136436440197883257497 0.629696083068847611841079014994 -0.657642269134521506579460492503 +-0.271034789085388194695980246252 -0.03260000050067901611328125 0.29236519336700439453125 +-0.271034789085388194695980246252 0.03260000050067901611328125 0.29236519336700439453125 +-0.271014797687530506475894753748 -0.232637292146682717053352007497 -0.602022415399551369397102007497 +-0.271014797687530506475894753748 0.232637292146682717053352007497 -0.602022415399551369397102007497 +-0.2710084021091461181640625 -0.353154909610748302117855246252 0.83924712240695953369140625 +-0.2710084021091461181640625 0.353154909610748302117855246252 0.83924712240695953369140625 +-0.270990395545959494860710492503 -0.315306401252746615337940738755 -0.683480787277221724096420985006 +-0.270990395545959494860710492503 0.315306401252746615337940738755 -0.683480787277221724096420985006 +-0.270972800254821788445980246252 0 0.752711200714111350329460492503 +-0.2709614932537078857421875 -0.0454640999436378492881694057814 0.120469200611114490850894753748 +-0.2709614932537078857421875 0.0454640999436378492881694057814 0.120469200611114490850894753748 +-0.270796501636505093646434261245 -0.0639062985777854863922442518742 -0.112183499336242678556807561563 +-0.270796501636505093646434261245 0.0639062985777854863922442518742 -0.112183499336242678556807561563 +-0.270788694918155659063785378748 -0.575093355774879522179787727509 0.1357999481260776519775390625 +-0.270788694918155659063785378748 0.575093355774879522179787727509 0.1357999481260776519775390625 +-0.2707765102386474609375 -0.3077259957790374755859375 -0.2863295078277587890625 +-0.2707765102386474609375 0.3077259957790374755859375 -0.2863295078277587890625 +-0.270491546392440773693977007497 0 0.222113499045372003726228626874 +-0.270395395159721385613948996252 -0.151078943908214580194027121252 0.454490289092063959319744981258 +-0.270395395159721385613948996252 0.151078943908214580194027121252 0.454490289092063959319744981258 +-0.270350302755832716528061610006 -0.364561447501182578356804242503 -0.310653749108314558569077235006 +-0.270350302755832716528061610006 0.364561447501182578356804242503 -0.310653749108314558569077235006 +-0.2703187465667724609375 -0.3456585109233856201171875 -0.60823349654674530029296875 +-0.2703187465667724609375 0.3456585109233856201171875 -0.60823349654674530029296875 +-0.270293998718261707647769753748 -0.293917202949523947985710492503 0.0235311999917030348350444057814 +-0.270293998718261707647769753748 0.293917202949523947985710492503 0.0235311999917030348350444057814 +-0.270290708541870150494190738755 -0.8318745195865631103515625 -0.211963498592376703433259876874 +-0.270290708541870150494190738755 0.8318745195865631103515625 -0.211963498592376703433259876874 +-0.270235347747802723272769753748 -0.273069906234741199835269753748 -0.234319496154785172903345369377 +-0.270235347747802723272769753748 0.273069906234741199835269753748 -0.234319496154785172903345369377 +-0.2701978981494903564453125 -0.0932785034179687416733273153113 -0.638977491855621249072783029987 +-0.2701978981494903564453125 0.0932785034179687416733273153113 -0.638977491855621249072783029987 +-0.270197606086730990337940738755 -0.228819990158081076891960492503 0.186103999614715576171875 +-0.270197606086730990337940738755 0.228819990158081076891960492503 0.186103999614715576171875 +-0.270168006420135498046875 -0.44395101070404052734375 0.854350984096527099609375 +-0.270168006420135498046875 0.44395101070404052734375 0.854350984096527099609375 +-0.2700827419757843017578125 -0.213823047280311567819310880623 0.0619269013404846122017310960928 +-0.2700827419757843017578125 0.213823047280311567819310880623 0.0619269013404846122017310960928 +-0.270079207420349132195980246252 -0.0649119973182678278167401231258 0.750228786468505881579460492503 +-0.270079207420349132195980246252 0.0649119973182678278167401231258 0.750228786468505881579460492503 +-0.270000994205474853515625 -0.615451991558074951171875 -0.74048602581024169921875 +-0.270000994205474853515625 0.615451991558074951171875 -0.74048602581024169921875 +-0.269848155975341841283920985006 -0.477693715691566489489616742503 0.0386088997125625665862713731258 +-0.269848155975341841283920985006 0.477693715691566489489616742503 0.0386088997125625665862713731258 +-0.269815501570701610223323996252 -0.638068503141403176037727007497 -0.574515920877456731652443977509 +-0.269815501570701610223323996252 0.638068503141403176037727007497 -0.574515920877456731652443977509 +-0.269764804840087912829460492503 -0.294004011154174793585269753748 -0.0280791997909545926193075615629 +-0.269764804840087912829460492503 0.294004011154174793585269753748 -0.0280791997909545926193075615629 +-0.269636410474777210577457253748 -0.121779893338680264558426813437 0.339066007733345053942741742503 +-0.269636410474777210577457253748 0.121779893338680264558426813437 0.339066007733345053942741742503 +-0.2696335017681121826171875 -0.3172869980335235595703125 0.2768155038356781005859375 +-0.2696335017681121826171875 0.3172869980335235595703125 0.2768155038356781005859375 +-0.269601009786128997802734375 -0.63013051450252532958984375 0.3045502603054046630859375 +-0.269601009786128997802734375 0.63013051450252532958984375 0.3045502603054046630859375 +-0.269578206539154041632144753748 -0.0798420041799545315841513115629 -0.530050206184387140417868522491 +-0.269578206539154041632144753748 0.0798420041799545315841513115629 -0.530050206184387140417868522491 +-0.269575241208076465948551003748 -0.0287843495607376063938342980464 0.221360999345779407843082253748 +-0.269575241208076465948551003748 0.0287843495607376063938342980464 0.221360999345779407843082253748 +-0.269556695222854580951121761245 -0.110870204865932450721821567186 0.1937704980373382568359375 +-0.269556695222854580951121761245 0.110870204865932450721821567186 0.1937704980373382568359375 +-0.269540011882781982421875 -0.961188018321990966796875 -0.058866001665592193603515625 +-0.269540011882781982421875 0.961188018321990966796875 -0.058866001665592193603515625 +-0.269511008262634244037059261245 -0.517600786685943559106704014994 -0.13947419822216033935546875 +-0.269511008262634244037059261245 0.517600786685943559106704014994 -0.13947419822216033935546875 +-0.2695105075836181640625 -0.138089703023433679751619251874 0.631106692552566461706931022491 +-0.2695105075836181640625 0.138089703023433679751619251874 0.631106692552566461706931022491 +-0.269509905576705954821647992503 -0.478348743915557872430355246252 -0.0323553999885916737655477959379 +-0.269509905576705954821647992503 0.478348743915557872430355246252 -0.0323553999885916737655477959379 +-0.26919494569301605224609375 -0.29547764360904693603515625 -0.206705255806446080990568248126 +-0.26919494569301605224609375 0.29547764360904693603515625 -0.206705255806446080990568248126 +-0.26914680004119873046875 -0.121628701686859130859375 0.0525968983769416822959819057814 +-0.26914680004119873046875 0.121628701686859130859375 0.0525968983769416822959819057814 +-0.2691250145435333251953125 -0.3747169971466064453125 -0.19276650249958038330078125 +-0.2691250145435333251953125 0.3747169971466064453125 -0.19276650249958038330078125 +-0.268995308876037564349559261245 -0.110553896427154532688952315311 0.0736158013343811007400674384371 +-0.268995308876037564349559261245 0.110553896427154532688952315311 0.0736158013343811007400674384371 +-0.268961551785469099584702235006 -0.03670754842460155487060546875 -0.478343236446380659643295985006 +-0.268961551785469099584702235006 0.03670754842460155487060546875 -0.478343236446380659643295985006 +-0.268846195936203014031917746252 -0.446834385395050048828125 -0.2967503964900970458984375 +-0.268846195936203014031917746252 0.446834385395050048828125 -0.2967503964900970458984375 +-0.268794637918472301141292746252 -0.601035839319229103772102007497 0.53759185969829559326171875 +-0.268794637918472301141292746252 0.601035839319229103772102007497 0.53759185969829559326171875 +-0.268737307190895113873096988755 -0.195246899127960199527009876874 0.303576761484146140368522992503 +-0.268737307190895113873096988755 0.195246899127960199527009876874 0.303576761484146140368522992503 +-0.2687120139598846435546875 -0.9606540203094482421875 0.0702629983425140380859375 +-0.2687120139598846435546875 0.9606540203094482421875 0.0702629983425140380859375 +-0.268583607673645030633480246252 -0.154473996162414556332365123126 -0.252983593940734885485710492503 +-0.268583607673645030633480246252 0.154473996162414556332365123126 -0.252983593940734885485710492503 +-0.268559847772121440545589621252 -0.248740701377391820736661998126 0.537125545740127607885483485006 +-0.268559847772121440545589621252 0.248740701377391820736661998126 0.537125545740127607885483485006 +-0.26847350597381591796875 -0.15382699668407440185546875 0.39275848865509033203125 +-0.26847350597381591796875 0.15382699668407440185546875 0.39275848865509033203125 +-0.268418839573860146252570757497 -0.0231146994978189447567107350778 -0.223421105742454523257478626874 +-0.268418839573860146252570757497 0.0231146994978189447567107350778 -0.223421105742454523257478626874 +-0.268329602479934703485042746252 -0.510388791561126708984375 0.165838193893432600534154630623 +-0.268329602479934703485042746252 0.510388791561126708984375 0.165838193893432600534154630623 +-0.268327999114990223272769753748 -0.275275993347167957647769753748 -0.110558402538299571649105246252 +-0.268327999114990223272769753748 0.275275993347167957647769753748 -0.110558402538299571649105246252 +-0.268327492475509632452457253748 0 -0.13416449725627899169921875 +-0.268326807022094715460269753748 -0.0649828016757965087890625 0.289444398880004893914730246252 +-0.268326807022094715460269753748 0.0649828016757965087890625 0.289444398880004893914730246252 +-0.268326598405838001593082253748 -0.315436184406280517578125 -0.434167206287384033203125 +-0.268326598405838001593082253748 0.315436184406280517578125 -0.434167206287384033203125 +-0.268326008319854703021434261245 0 0.536657416820526145251335492503 +-0.268251204490661643298210492503 -0.655363988876342840050881477509 -0.37220799922943115234375 +-0.268251204490661643298210492503 0.655363988876342840050881477509 -0.37220799922943115234375 +-0.268244895339012134893863503748 -0.639087390899658158716079014994 0.0980412960052490234375 +-0.268244895339012134893863503748 0.639087390899658158716079014994 0.0980412960052490234375 +-0.268238255381584189684929242503 -0.149553000926971435546875 -0.32891084253787994384765625 +-0.268238255381584189684929242503 0.149553000926971435546875 -0.32891084253787994384765625 +-0.26820884644985198974609375 -0.0694347500801086314758947537484 -0.213875555992126459292634876874 +-0.26820884644985198974609375 0.0694347500801086314758947537484 -0.213875555992126459292634876874 +-0.2681272029876708984375 -0.470435363054275523797542746252 -0.0964276470243930899917117471887 +-0.2681272029876708984375 0.470435363054275523797542746252 -0.0964276470243930899917117471887 +-0.268116095662116971087840511245 -0.641370779275894142834602007497 -0.0822016999125480540833166287484 +-0.268116095662116971087840511245 0.641370779275894142834602007497 -0.0822016999125480540833166287484 +-0.268101054430007923468082253748 -0.1772021949291229248046875 0.138640950620174396856754128748 +-0.268101054430007923468082253748 0.1772021949291229248046875 0.138640950620174396856754128748 +-0.268096661567687966076789507497 -0.825104439258575350635283029987 0.387074659764766682013004128748 +-0.268096661567687966076789507497 0.825104439258575350635283029987 0.387074659764766682013004128748 +-0.26804925501346588134765625 -0.212616598606109596936164507497 -0.0737814001739025004944494412484 +-0.26804925501346588134765625 0.212616598606109596936164507497 -0.0737814001739025004944494412484 +-0.268024510145187411236378238755 -0.0599093981087207780311665317186 -0.857072693109512395714943977509 +-0.268024510145187411236378238755 0.0599093981087207780311665317186 -0.857072693109512395714943977509 +-0.267949497699737526623664507497 -0.108476704359054557103014815311 -0.0802236020565032931228799384371 +-0.267949497699737526623664507497 0.108476704359054557103014815311 -0.0802236020565032931228799384371 +-0.267896758019924186022819867503 -0.466414844989776644634815738755 0.114841648936271675807141434689 +-0.267896758019924186022819867503 0.466414844989776644634815738755 0.114841648936271675807141434689 +-0.267878794670104947162059261245 -0.646715319156646706311164507497 0 +-0.267878794670104947162059261245 0.646715319156646706311164507497 0 +-0.267755395174026467053352007497 -0.119929504394531247224442438437 -0.062640599906444549560546875 +-0.267755395174026467053352007497 0.119929504394531247224442438437 -0.062640599906444549560546875 +-0.267596536874771140368522992503 -0.267700499296188387798878238755 0.243369457125663768426448996252 +-0.267596536874771140368522992503 0.267700499296188387798878238755 0.243369457125663768426448996252 +-0.267592000961303699835269753748 -0.247068810462951676809595369377 0.165382802486419677734375 +-0.267592000961303699835269753748 0.247068810462951676809595369377 0.165382802486419677734375 +-0.26756250858306884765625 -0.06603419780731201171875 0.118532100319862360171541126874 +-0.26756250858306884765625 0.06603419780731201171875 0.118532100319862360171541126874 +-0.26750719547271728515625 -0.0266416013240814222862162807814 -0.296192789077758811266960492503 +-0.26750719547271728515625 0.0266416013240814222862162807814 -0.296192789077758811266960492503 +-0.267498600482940662725894753748 -0.047074802219867706298828125 0.535003209114074729235710492503 +-0.267498600482940662725894753748 0.047074802219867706298828125 0.535003209114074729235710492503 +-0.267495150864124286993472878748 -0.404487192630767822265625 -0.432823953032493602410823996252 +-0.267495150864124286993472878748 0.404487192630767822265625 -0.432823953032493602410823996252 +-0.267449699342250823974609375 -0.0386422013863921137710732978121 0.910756450891494706567641514994 +-0.267449699342250823974609375 0.0386422013863921137710732978121 0.910756450891494706567641514994 +-0.2674112021923065185546875 -0.524568790197372458727897992503 -0.378574711084365800317641514994 +-0.2674112021923065185546875 0.524568790197372458727897992503 -0.378574711084365800317641514994 +-0.267384791374206565173210492503 -0.0793344020843505942641726846887 -0.286725211143493641241519753748 +-0.267384791374206565173210492503 0.0793344020843505942641726846887 -0.286725211143493641241519753748 +-0.267382811009883869513004128748 -0.276697960495948802606136496252 -0.757921212911605857165397992503 +-0.267382811009883869513004128748 0.276697960495948802606136496252 -0.757921212911605857165397992503 +-0.267302405834198009149105246252 -0.136196100711822504214509876874 0 +-0.267302405834198009149105246252 0.136196100711822504214509876874 0 +-0.267296992242336273193359375 -0.256071746349334716796875 0.6522877514362335205078125 +-0.267296992242336273193359375 0.256071746349334716796875 0.6522877514362335205078125 +-0.267295193672180186883480246252 -0.717439985275268643505341970013 -0.232018399238586442434595369377 +-0.267295193672180186883480246252 0.717439985275268643505341970013 -0.232018399238586442434595369377 +-0.26720474660396575927734375 -0.50062425434589385986328125 -0.490385234355926513671875 +-0.26720474660396575927734375 0.50062425434589385986328125 -0.490385234355926513671875 +-0.267081505060195900647102007497 -0.05304110050201416015625 0.219895908236503595523103626874 +-0.267081505060195900647102007497 0.05304110050201416015625 0.219895908236503595523103626874 +-0.26698319613933563232421875 -0.821682876348495461193977007497 0.252106189727783203125 +-0.26698319613933563232421875 0.821682876348495461193977007497 0.252106189727783203125 +-0.266943609714508034436164507497 -0.134263847768306715524389005623 -0.182248142361640913522435880623 +-0.266943609714508034436164507497 0.134263847768306715524389005623 -0.182248142361640913522435880623 +-0.266918408870697010382144753748 -0.365745103359222389904914507497 0.533840280771255448755141514994 +-0.266918408870697010382144753748 0.365745103359222389904914507497 0.533840280771255448755141514994 +-0.266753697395324673724559261245 -0.0991805970668792752364950615629 0.0948983967304229680816973768742 +-0.266753697395324673724559261245 0.0991805970668792752364950615629 0.0948983967304229680816973768742 +-0.266722503304481550756577235006 -0.429110559821128889623764735006 0.217309407889843014816122490629 +-0.266722503304481550756577235006 0.429110559821128889623764735006 0.217309407889843014816122490629 +-0.26671040058135986328125 -0.193773996829986583367855246252 0.226533198356628440173210492503 +-0.26671040058135986328125 0.193773996829986583367855246252 0.226533198356628440173210492503 +-0.266509491205215442999332253748 -0.0966414034366607638260049384371 -0.0981483042240142850021200615629 +-0.266509491205215442999332253748 0.0966414034366607638260049384371 -0.0981483042240142850021200615629 +-0.266501197218894925189403011245 -0.578975617885589599609375 -0.28941990435123443603515625 +-0.266501197218894925189403011245 0.578975617885589599609375 -0.28941990435123443603515625 +-0.266471993923187266961605246252 -0.316038599610328707623096988755 -0.177798150479793554135099498126 +-0.266471993923187266961605246252 0.316038599610328707623096988755 -0.177798150479793554135099498126 +-0.266468809545040152819694867503 -0.259742595255374908447265625 -0.532943469285965032433693977509 +-0.266468809545040152819694867503 0.259742595255374908447265625 -0.532943469285965032433693977509 +-0.266452457010746046606186610006 -0.283863255381584189684929242503 0.388490286469459544793636496252 +-0.266452457010746046606186610006 0.283863255381584189684929242503 0.388490286469459544793636496252 +-0.266400003433227561266960492503 -0.127688002586364757195980246252 0.743455982208252041942841970013 +-0.266400003433227561266960492503 0.127688002586364757195980246252 0.743455982208252041942841970013 +-0.2661710083484649658203125 -0.819204986095428466796875 -0.5079920291900634765625 +-0.2661710083484649658203125 0.819204986095428466796875 -0.5079920291900634765625 +-0.266142439842224076684829014994 -0.227306458353996265753238503748 0 +-0.266142439842224076684829014994 0.227306458353996265753238503748 0 +-0.266112752258777618408203125 -0.5510917603969573974609375 0.4335689842700958251953125 +-0.266112752258777618408203125 0.5510917603969573974609375 0.4335689842700958251953125 +-0.266067606210708629266292746252 -0.0517589986324310316612162807814 -0.12856529653072357177734375 +-0.266067606210708629266292746252 0.0517589986324310316612162807814 -0.12856529653072357177734375 +-0.266052237153053261486945757497 -0.115130496770143503360017689374 0.9046888053417205810546875 +-0.266052237153053261486945757497 0.115130496770143503360017689374 0.9046888053417205810546875 +-0.266028892993927013055355246252 -0.13409189879894256591796875 0.0353273995220661149452290317186 +-0.266028892993927013055355246252 0.13409189879894256591796875 0.0353273995220661149452290317186 +-0.265958690643310513568309261245 -0.475234884023666370733707253748 0.439792484045028631012286268742 +-0.265958690643310513568309261245 0.475234884023666370733707253748 0.439792484045028631012286268742 +-0.265939496457576751708984375 -0.636976388096809342798110264994 -0.496021735668182361944644753748 +-0.265939496457576751708984375 0.636976388096809342798110264994 -0.496021735668182361944644753748 +-0.2658495008945465087890625 -0.193149259686470009533820757497 0.120488196611404405067524692186 +-0.2658495008945465087890625 0.193149259686470009533820757497 0.120488196611404405067524692186 +-0.265664756298065185546875 -0.56281615793704986572265625 -0.187510691583156585693359375 +-0.265664756298065185546875 0.56281615793704986572265625 -0.187510691583156585693359375 +-0.2655251920223236083984375 -0.291740405559539783819644753748 0.452088010311126664575454014994 +-0.2655251920223236083984375 0.291740405559539783819644753748 0.452088010311126664575454014994 +-0.265493094921112060546875 -0.133186197280883794613615123126 -0.042129300534725189208984375 +-0.265493094921112060546875 0.133186197280883794613615123126 -0.042129300534725189208984375 +-0.265394985675811767578125 -0.3861840069293975830078125 -0.883418023586273193359375 +-0.265394985675811767578125 0.3861840069293975830078125 -0.883418023586273193359375 +-0.2653630077838897705078125 -0.366874217987060546875 -0.533840280771255448755141514994 +-0.2653630077838897705078125 0.366874217987060546875 -0.533840280771255448755141514994 +-0.265311339497566189837840511245 -0.703071561455726579126235264994 0.397241552174091350213558371252 +-0.265311339497566189837840511245 0.703071561455726579126235264994 0.397241552174091350213558371252 +-0.265193998813629150390625 -0.94782197475433349609375 -0.1769340038299560546875 +-0.265193998813629150390625 0.94782197475433349609375 -0.1769340038299560546875 +-0.265147197246551502569644753748 -0.0598815031349658952186665317186 -0.358623898029327425884815738755 +-0.265147197246551502569644753748 0.0598815031349658952186665317186 -0.358623898029327425884815738755 +-0.265139096975326560290397992503 -0.334571859240531954693409488755 0.1423480510711669921875 +-0.265139096975326560290397992503 0.334571859240531954693409488755 0.1423480510711669921875 +-0.265133249759674061163394753748 -0.254029494524002086297542746252 -0.260141390562057484014957253748 +-0.265133249759674061163394753748 0.254029494524002086297542746252 -0.260141390562057484014957253748 +-0.265130805969238270147769753748 -0.291182804107666004522769753748 0.0701291978359222384353799384371 +-0.265130805969238270147769753748 0.291182804107666004522769753748 0.0701291978359222384353799384371 +-0.2650845050811767578125 -0.16706849634647369384765625 -0.3896385133266448974609375 +-0.2650845050811767578125 0.16706849634647369384765625 -0.3896385133266448974609375 +-0.2650811970233917236328125 -0.38844358921051025390625 0.372616803646087624279914507497 +-0.2650811970233917236328125 0.38844358921051025390625 0.372616803646087624279914507497 +-0.265022403001785256115852007497 -0.0938592016696929848373898153113 0.530050814151763916015625 +-0.265022403001785256115852007497 0.0938592016696929848373898153113 0.530050814151763916015625 +-0.264934194087982188836605246252 -0.0123744003474712364887277971093 0.140202301740646351202457253748 +-0.264934194087982188836605246252 0.0123744003474712364887277971093 0.140202301740646351202457253748 +-0.26493211090564727783203125 -0.2377341091632843017578125 -0.8266157805919647216796875 +-0.26493211090564727783203125 0.2377341091632843017578125 -0.8266157805919647216796875 +-0.264888253808021556512386496252 -0.220530752837657939569027121252 -0.428602889180183466155682481258 +-0.264888253808021556512386496252 0.220530752837657939569027121252 -0.428602889180183466155682481258 +-0.264842046797275576519581363755 -0.435956409573555025982471988755 -0.205670846998691564389005748126 +-0.264842046797275576519581363755 0.435956409573555025982471988755 -0.205670846998691564389005748126 +-0.264819002151489235608039507497 -0.0197270996868610382080078125 -0.139576801657676691226228626874 +-0.264819002151489235608039507497 0.0197270996868610382080078125 -0.139576801657676691226228626874 +-0.264676988124847412109375 -0.3913914859294891357421875 0.16358099877834320068359375 +-0.264676988124847412109375 0.3913914859294891357421875 0.16358099877834320068359375 +-0.264503708481788668560596988755 -0.364057651162147555279346988755 0 +-0.264503708481788668560596988755 0.364057651162147555279346988755 0 +-0.264421957731246937139957253748 -0.129076348990201955624357310626 -0.579586809873580910412727007497 +-0.264421957731246937139957253748 0.129076348990201955624357310626 -0.579586809873580910412727007497 +-0.2641369998455047607421875 -0.2855685055255889892578125 -0.3141374886035919189453125 +-0.2641369998455047607421875 0.2855685055255889892578125 -0.3141374886035919189453125 +-0.2639890015125274658203125 -0.678970992565155029296875 0.685060977935791015625 +-0.2639890015125274658203125 0.678970992565155029296875 0.685060977935791015625 +-0.263775604963302601202457253748 -0.463101589679717984271434261245 0.275607007741928089483707253748 +-0.263775604963302601202457253748 0.463101589679717984271434261245 0.275607007741928089483707253748 +-0.263735996186733268054069867503 -0.110201302915811552574076870314 -0.469892483949661265985042746252 +-0.263735996186733268054069867503 0.110201302915811552574076870314 -0.469892483949661265985042746252 +-0.2637248933315277099609375 -0.0840951025485992403885049384371 -0.115659597516059864386051003748 +-0.2637248933315277099609375 0.0840951025485992403885049384371 -0.115659597516059864386051003748 +-0.263705405592918384893863503748 -0.19159139692783355712890625 0.619477587938308649206931022491 +-0.263705405592918384893863503748 0.19159139692783355712890625 0.619477587938308649206931022491 +-0.263704800605773947985710492503 -0.158937597274780295641960492503 0.255340003967285178454460492503 +-0.263704800605773947985710492503 0.158937597274780295641960492503 0.255340003967285178454460492503 +-0.263584506511688243524105246252 -0.0331148989498615264892578125 0.139379400014877308233707253748 +-0.263584506511688243524105246252 0.0331148989498615264892578125 0.139379400014877308233707253748 +-0.263564360141754105981704014994 -0.226593491435050947702123380623 0.0411008499562740270416583143742 +-0.263564360141754105981704014994 0.226593491435050947702123380623 0.0411008499562740270416583143742 +-0.263558904826641127172592860006 -0.341129788756370566638054242503 -0.341565403342247053686264735006 +-0.263558904826641127172592860006 0.341129788756370566638054242503 -0.341565403342247053686264735006 +-0.26354439556598663330078125 -0.561049306392669588916533029987 0.325219997763633694720653011245 +-0.26354439556598663330078125 0.561049306392669588916533029987 0.325219997763633694720653011245 +-0.26353359222412109375 -0.264352393150329600945980246252 0.143763196468353282586605246252 +-0.26353359222412109375 0.264352393150329600945980246252 0.143763196468353282586605246252 +-0.263478597998619057385383257497 -0.162977851927280426025390625 0.162840999662876129150390625 +-0.263478597998619057385383257497 0.162977851927280426025390625 0.162840999662876129150390625 +-0.263438355922698930200454014994 -0.113701346516609180792301003748 -0.2004299461841583251953125 +-0.263438355922698930200454014994 0.113701346516609180792301003748 -0.2004299461841583251953125 +-0.2632864415645599365234375 -0.0770395480096340151687783759371 0.217359447479248041323884876874 +-0.2632864415645599365234375 0.0770395480096340151687783759371 0.217359447479248041323884876874 +-0.263274407386779818462940738755 -0.703473615646362349096420985006 0.275339198112487804070980246252 +-0.263274407386779818462940738755 0.703473615646362349096420985006 0.275339198112487804070980246252 +-0.263183197379112221447883257497 -0.627480691671371437756477007497 -0.164324302971363050973607755623 +-0.263183197379112221447883257497 0.627480691671371437756477007497 -0.164324302971363050973607755623 +-0.26317720115184783935546875 -0.369772693514823946880909488755 0.310654306411743186266960492503 +-0.26317720115184783935546875 0.369772693514823946880909488755 0.310654306411743186266960492503 +-0.262982848286628712042301003748 -0.55121688544750213623046875 0.222486552596092235223323996252 +-0.262982848286628712042301003748 0.55121688544750213623046875 0.222486552596092235223323996252 +-0.262950396537780795025440738755 -0.0929804027080535916427450615629 0.2867259979248046875 +-0.262950396537780795025440738755 0.0929804027080535916427450615629 0.2867259979248046875 +-0.262889993190765391961605246252 -0.474100792407989468646434261245 -0.257132399082183826788394753748 +-0.262889993190765391961605246252 0.474100792407989468646434261245 -0.257132399082183826788394753748 +-0.26286900043487548828125 -0.809011995792388916015625 0.5257380008697509765625 +-0.26286900043487548828125 0.809011995792388916015625 0.5257380008697509765625 +-0.262865006923675537109375 0 -0.42532598972320556640625 +-0.262788301706314064709602007497 -0.0869775027036666786850460653113 0.115659901499748224429353626874 +-0.262788301706314064709602007497 0.0869775027036666786850460653113 0.115659901499748224429353626874 +-0.262763088941574129986378238755 -0.360676351189613331182926003748 0.0580373972654342693000550923443 +-0.262763088941574129986378238755 0.360676351189613331182926003748 0.0580373972654342693000550923443 +-0.262740397453308127673210492503 -0.130211198329925531558259876874 -0.27205240726470947265625 +-0.262740397453308127673210492503 0.130211198329925531558259876874 -0.27205240726470947265625 +-0.26266445219516754150390625 -0.808397603034973100122329014994 0 +-0.26266445219516754150390625 0.808397603034973100122329014994 0 +-0.262565758824348460809261496252 -0.808107998967170670923110264994 -0.424854241311550140380859375 +-0.262565758824348460809261496252 0.808107998967170670923110264994 -0.424854241311550140380859375 +-0.26252400875091552734375 -0.94161701202392578125 0.21080400049686431884765625 +-0.26252400875091552734375 0.94161701202392578125 0.21080400049686431884765625 +-0.2625170052051544189453125 -0.3950555026531219482421875 -0.1581639945507049560546875 +-0.2625170052051544189453125 0.3950555026531219482421875 -0.1581639945507049560546875 +-0.262479150295257590563835492503 0 -0.365519696474075339587272992503 +-0.262458693981170665399105246252 -0.226301595568656893631143134371 -0.04902064800262451171875 +-0.262458693981170665399105246252 0.226301595568656893631143134371 -0.04902064800262451171875 +-0.262402391433715853619190738755 -0.290119194984436057360710492503 -0.0835207998752593994140625 +-0.262402391433715853619190738755 0.290119194984436057360710492503 -0.0835207998752593994140625 +-0.262397599220275890008480246252 -0.628567981719970747533920985006 0.419583988189697276727230246252 +-0.262397599220275890008480246252 0.628567981719970747533920985006 0.419583988189697276727230246252 +-0.262381005287170399054019753748 -0.208212208747863752877904630623 0.101508049666881552952624190311 +-0.262381005287170399054019753748 0.208212208747863752877904630623 0.101508049666881552952624190311 +-0.2623679935932159423828125 -0.2725515067577362060546875 0.32692301273345947265625 +-0.2623679935932159423828125 0.2725515067577362060546875 0.32692301273345947265625 +-0.262338301539421059338508257497 -0.133600604534149153268529630623 0.189287000894546503237947376874 +-0.262338301539421059338508257497 0.133600604534149153268529630623 0.189287000894546503237947376874 +-0.262338049709796905517578125 -0.441365924477577220574886496252 -0.677403229475021295691306022491 +-0.262338049709796905517578125 0.441365924477577220574886496252 -0.677403229475021295691306022491 +-0.2623201906681060791015625 -0.46955017745494842529296875 0.658187305927276589123664507497 +-0.2623201906681060791015625 0.46955017745494842529296875 0.658187305927276589123664507497 +-0.262180092930793751104801003748 0 -0.594778606295585654528679242503 +-0.262124991416931130139289507497 -0.425379610061645485608039507497 -0.332178604602813731805355246252 +-0.262124991416931130139289507497 0.425379610061645485608039507497 -0.332178604602813731805355246252 +-0.2619754970073699951171875 -0.4200884997844696044921875 0.069960497319698333740234375 +-0.2619754970073699951171875 0.4200884997844696044921875 0.069960497319698333740234375 +-0.2618427574634552001953125 -0.402467015385627735479801003748 0.438131204247474703716846988755 +-0.2618427574634552001953125 0.402467015385627735479801003748 0.438131204247474703716846988755 +-0.261825737357139598504573996252 -0.361357203125953707623096988755 -0.0580373972654342693000550923443 +-0.261825737357139598504573996252 0.361357203125953707623096988755 -0.0580373972654342693000550923443 +-0.2617450058460235595703125 -0.4219554960727691650390625 -0.058674998581409454345703125 +-0.2617450058460235595703125 0.4219554960727691650390625 -0.058674998581409454345703125 +-0.261731243133544955181690738755 -0.226891359686851507015958873126 0.287257504463195811883480246252 +-0.261731243133544955181690738755 0.226891359686851507015958873126 0.287257504463195811883480246252 +-0.261556005477905306744190738755 -0.388161611557006847039730246252 0.648782396316528342516960492503 +-0.261556005477905306744190738755 0.388161611557006847039730246252 0.648782396316528342516960492503 +-0.261552608013153053967414507497 -0.145871096849441522769197376874 0.0176577005535364130184294850778 +-0.261552608013153053967414507497 0.145871096849441522769197376874 0.0176577005535364130184294850778 +-0.2614721953868865966796875 -0.145561498403549177682592130623 -0.0210749991238117218017578125 +-0.2614721953868865966796875 0.145561498403549177682592130623 -0.0210749991238117218017578125 +-0.261428403854370106085269753748 -0.159309607744216902291967130623 -0.516019213199615411902243522491 +-0.261428403854370106085269753748 0.159309607744216902291967130623 -0.516019213199615411902243522491 +-0.261402297019958484991519753748 -0.33540165424346923828125 -0.147222898900508880615234375 +-0.261402297019958484991519753748 0.33540165424346923828125 -0.147222898900508880615234375 +-0.261399587988853487896534488755 -0.6843599975109100341796875 0.522800999879837080541733485006 +-0.261399587988853487896534488755 0.6843599975109100341796875 0.522800999879837080541733485006 +-0.2612495124340057373046875 -0.4263199865818023681640625 0 +-0.2612495124340057373046875 0.4263199865818023681640625 0 +-0.261221098899841297491519753748 -0.619330596923828080591079014994 0.195430207252502430304019753748 +-0.261221098899841297491519753748 0.619330596923828080591079014994 0.195430207252502430304019753748 +-0.261139494180679332391292746252 -0.130164903402328474557592130623 0.0697367995977401650131710653113 +-0.261139494180679332391292746252 0.130164903402328474557592130623 0.0697367995977401650131710653113 +-0.261113396286964449810596988755 -0.803633379936218306127670985006 -0.309826791286468505859375 +-0.261113396286964449810596988755 0.803633379936218306127670985006 -0.309826791286468505859375 +-0.261086413264274619372429242503 -0.152641350030899042300447376874 0.333218255639076255114616742503 +-0.261086413264274619372429242503 0.152641350030899042300447376874 0.333218255639076255114616742503 +-0.261055207252502474712940738755 -0.189665603637695329153345369377 0.732036018371582053454460492503 +-0.261055207252502474712940738755 0.189665603637695329153345369377 0.732036018371582053454460492503 +-0.2609741985797882080078125 -0.0538778990507125868369975307814 0.137803199887275684698551003748 +-0.2609741985797882080078125 0.0538778990507125868369975307814 0.137803199887275684698551003748 +-0.260912400484085094110042746252 -0.14006459712982177734375 0.52183020114898681640625 +-0.260912400484085094110042746252 0.14006459712982177734375 0.52183020114898681640625 +-0.260834394395351387707648882497 -0.802768027782440163342414507497 -0.100146146863698951023913252811 +-0.260834394395351387707648882497 0.802768027782440163342414507497 -0.100146146863698951023913252811 +-0.260724091529846158099559261245 -0.0463991500437259674072265625 -0.228845044970512362381143134371 +-0.260724091529846158099559261245 0.0463991500437259674072265625 -0.228845044970512362381143134371 +-0.260636310279369343145816628748 -0.189360656589269621408178068123 0.89370678365230560302734375 +-0.260636310279369343145816628748 0.189360656589269621408178068123 0.89370678365230560302734375 +-0.260604912042617764544871761245 -0.259425961971282925677684261245 0.766343840956687949450554242503 +-0.260604912042617764544871761245 0.259425961971282925677684261245 0.766343840956687949450554242503 +-0.26054799556732177734375 -0.456908798217773470806690738755 -0.602784776687622092516960492503 +-0.26054799556732177734375 0.456908798217773470806690738755 -0.602784776687622092516960492503 +-0.2605110108852386474609375 -0.06676100194454193115234375 -0.42151749134063720703125 +-0.2605110108852386474609375 0.06676100194454193115234375 -0.42151749134063720703125 +-0.2604509890079498291015625 -0.7013475000858306884765625 0.052697248756885528564453125 +-0.2604509890079498291015625 0.7013475000858306884765625 0.052697248756885528564453125 +-0.2603256404399871826171875 -0.189137400686740869693025501874 -0.893844550848007179943977007497 +-0.2603256404399871826171875 0.189137400686740869693025501874 -0.893844550848007179943977007497 +-0.26018173992633819580078125 -0.70203749835491180419921875 -0.04414950124919414520263671875 +-0.26018173992633819580078125 0.70203749835491180419921875 -0.04414950124919414520263671875 +-0.260059210658073414190738503748 -0.800374460220336869653579014994 0.119455596059560770205720814374 +-0.260059210658073414190738503748 0.800374460220336869653579014994 0.119455596059560770205720814374 +-0.260042703151702858654914507497 -0.0393600001931190476844868442186 -0.144321003556251520327791126874 +-0.260042703151702858654914507497 0.0393600001931190476844868442186 -0.144321003556251520327791126874 +-0.2597815990447998046875 -0.629144001007080122533920985006 -0.420346403121948264391960492503 +-0.2597815990447998046875 0.629144001007080122533920985006 -0.420346403121948264391960492503 +-0.259779596328735373766960492503 -0.304162001609802279400440738755 0 +-0.259779596328735373766960492503 0.304162001609802279400440738755 0 +-0.259735804796218883172542746252 -0.119203501939773554019197376874 0.0912572979927062932770098768742 +-0.259735804796218883172542746252 0.119203501939773554019197376874 0.0912572979927062932770098768742 +-0.259635007381439186779914507497 -0.0711680978536605862716513115629 -0.132380998134613042660490123126 +-0.259635007381439186779914507497 0.0711680978536605862716513115629 -0.132380998134613042660490123126 +-0.259602688252925872802734375 0 -0.913842028379440285412727007497 +-0.259538403153419527935596988755 -0.188563106954097753353849498126 0.446747934818267855572315738755 +-0.259538403153419527935596988755 0.188563106954097753353849498126 0.446747934818267855572315738755 +-0.259191003441810619012386496252 -0.408832195401191700323551003748 -0.758733308315277077404914507497 +-0.259191003441810619012386496252 0.408832195401191700323551003748 -0.758733308315277077404914507497 +-0.259037590026855502056690738755 -0.220741200447082536184595369377 0.210173201560974132195980246252 +-0.259037590026855502056690738755 0.220741200447082536184595369377 0.210173201560974132195980246252 +-0.259004850685596477166683371252 -0.295090253651142109259097878748 0.518014234304428167199318977509 +-0.259004850685596477166683371252 0.295090253651142109259097878748 0.518014234304428167199318977509 +-0.258675208687782265393195757497 -0.497894614934921209137286268742 -0.4185545146465301513671875 +-0.258675208687782265393195757497 0.497894614934921209137286268742 -0.4185545146465301513671875 +-0.258649197220802318231136496252 -0.233664742112159734555021373126 -0.28460745513439178466796875 +-0.258649197220802318231136496252 0.233664742112159734555021373126 -0.28460745513439178466796875 +-0.258586651086807228772102007497 -0.187873354554176308361945757497 -0.142606098949909193551732755623 +-0.258586651086807228772102007497 0.187873354554176308361945757497 -0.142606098949909193551732755623 +-0.258545345067977883068977007497 -0.16999815404415130615234375 -0.163569696247577667236328125 +-0.258545345067977883068977007497 0.16999815404415130615234375 -0.163569696247577667236328125 +-0.258541202545165993420539507497 -0.127596598863601667916967130623 -0.0829188019037246648590411268742 +-0.258541202545165993420539507497 0.127596598863601667916967130623 -0.0829188019037246648590411268742 +-0.258496803045272838250667746252 -0.14286629855632781982421875 0.052617900073528289794921875 +-0.258496803045272838250667746252 0.14286629855632781982421875 0.052617900073528289794921875 +-0.258467853069305419921875 -0.119482205808162697535657059689 -0.348451647162437427862613503748 +-0.258467853069305419921875 0.119482205808162697535657059689 -0.348451647162437427862613503748 +-0.258409202098846435546875 0 -0.152396106719970697573884876874 +-0.258372807502746604235710492503 -0.242295598983764653988615123126 -0.185839605331420909539730246252 +-0.258372807502746604235710492503 0.242295598983764653988615123126 -0.185839605331420909539730246252 +-0.25836090743541717529296875 0 -0.236113506555557239874332253748 +-0.258360791206359852179019753748 -0.221894788742065446340845369377 -0.209791207313537619860710492503 +-0.258360791206359852179019753748 0.221894788742065446340845369377 -0.209791207313537619860710492503 +-0.258286702632904041632144753748 -0.0924283504486083928863848768742 -0.217359092831611616647435880623 +-0.258286702632904041632144753748 0.0924283504486083928863848768742 -0.217359092831611616647435880623 +-0.258210012316703818591179242503 -0.557311481237411476818977007497 0.657822597026824995580795985006 +-0.258210012316703818591179242503 0.557311481237411476818977007497 0.657822597026824995580795985006 +-0.258178400993347156866519753748 -0.280247592926025412829460492503 0.121676397323608409539730246252 +-0.258178400993347156866519753748 0.280247592926025412829460492503 0.121676397323608409539730246252 +-0.258096992969512939453125 -0.1875160038471221923828125 0.3849979937076568603515625 +-0.258096992969512939453125 0.1875160038471221923828125 0.3849979937076568603515625 +-0.258007192611694302630809261245 -0.278526002168655362201121761245 -0.464602804183959938733039507497 +-0.258007192611694302630809261245 0.278526002168655362201121761245 -0.464602804183959938733039507497 +-0.257798457145690884662059261245 -0.101473753154277798738114313437 0.213876244425773603952123380623 +-0.257798457145690884662059261245 0.101473753154277798738114313437 0.213876244425773603952123380623 +-0.257721102237701393811164507497 -0.222101941704750033279580634371 0.0821621514856815254868038778113 +-0.257721102237701393811164507497 0.222101941704750033279580634371 0.0821621514856815254868038778113 +-0.257687997817993175164730246252 -0.687877607345581121300881477509 -0.316893601417541526110710492503 +-0.257687997817993175164730246252 0.687877607345581121300881477509 -0.316893601417541526110710492503 +-0.257569205760955821649105246252 -0.11601810157299041748046875 -0.100984203815460207853682561563 +-0.257569205760955821649105246252 0.11601810157299041748046875 -0.100984203815460207853682561563 +-0.257531189918518088610710492503 -0.0533020019531250041633363423443 -0.301390790939331076891960492503 +-0.257531189918518088610710492503 0.0533020019531250041633363423443 -0.301390790939331076891960492503 +-0.257274739444255828857421875 -0.31070025265216827392578125 0.6322777569293975830078125 +-0.257274739444255828857421875 0.31070025265216827392578125 0.6322777569293975830078125 +-0.257181304693222034796207253748 -0.0741965979337692177475460653113 0.135472199320793157406583873126 +-0.257181304693222034796207253748 0.0741965979337692177475460653113 0.135472199320793157406583873126 +-0.257124906778335549084602007497 -0.141274201869964588507144753748 -0.062676899135112762451171875 +-0.257124906778335549084602007497 0.141274201869964588507144753748 -0.062676899135112762451171875 +-0.257114195823669400287059261245 -0.204649898409843433721988503748 -0.120460899174213403872713001874 +-0.257114195823669400287059261245 0.204649898409843433721988503748 -0.120460899174213403872713001874 +-0.257004557549953494000050113755 -0.449636012315750177581463731258 0.185138247907161740402059990629 +-0.257004557549953494000050113755 0.449636012315750177581463731258 0.185138247907161740402059990629 +-0.256925247609615325927734375 -0.69201149046421051025390625 -0.132700502872467041015625 +-0.256925247609615325927734375 0.69201149046421051025390625 -0.132700502872467041015625 +-0.256875456869602225573601117503 -0.373395106196403536724659488755 -0.465930405259132374151676003748 +-0.256875456869602225573601117503 0.373395106196403536724659488755 -0.465930405259132374151676003748 +-0.256822210550308238641292746252 -0.596554183959960959704460492503 -0.623029518127441450658920985006 +-0.256822210550308238641292746252 0.596554183959960959704460492503 -0.623029518127441450658920985006 +-0.2568120062351226806640625 -0.92191898822784423828125 -0.2900229990482330322265625 +-0.2568120062351226806640625 0.92191898822784423828125 -0.2900229990482330322265625 +-0.256781800091266665386768863755 -0.456696915626525923315170985006 -0.167305046319961570056022992503 +-0.256781800091266665386768863755 0.456696915626525923315170985006 -0.167305046319961570056022992503 +-0.256744801998138427734375 -0.334567809104919455798210492503 0.7950762212276458740234375 +-0.256744801998138427734375 0.334567809104919455798210492503 0.7950762212276458740234375 +-0.256659606099128689837840511245 -0.421753460168838467669871761245 0.811633434891700700219985264994 +-0.256659606099128689837840511245 0.421753460168838467669871761245 0.811633434891700700219985264994 +-0.256654405593872092516960492503 -0.106232798099517827816740123126 -0.750228786468505881579460492503 +-0.256654405593872092516960492503 0.106232798099517827816740123126 -0.750228786468505881579460492503 +-0.256652402877807606085269753748 -0.261398005485534656866519753748 -0.160625994205474853515625 +-0.256652402877807606085269753748 0.261398005485534656866519753748 -0.160625994205474853515625 +-0.256642806529998768194644753748 -0.107467201352119443025223688437 0.112184098362922660130358565311 +-0.256642806529998768194644753748 0.107467201352119443025223688437 0.112184098362922660130358565311 +-0.256639502942562103271484375 -0.1487512551248073577880859375 -0.68884648382663726806640625 +-0.256639502942562103271484375 0.1487512551248073577880859375 -0.68884648382663726806640625 +-0.256620588898658741339176003748 -0.351090887188911460192741742503 0.115676553547382363063000809689 +-0.256620588898658741339176003748 0.351090887188911460192741742503 0.115676553547382363063000809689 +-0.25650094449520111083984375 -0.584679391980171159204360264994 -0.703461724519729547644431022491 +-0.25650094449520111083984375 0.584679391980171159204360264994 -0.703461724519729547644431022491 +-0.256463402509689297747996761245 -0.04002539813518524169921875 -0.540947413444519020764289507497 +-0.256463402509689297747996761245 0.04002539813518524169921875 -0.540947413444519020764289507497 +-0.256416311860084566998096988755 -0.295324650406837474481136496252 0.222562797367572784423828125 +-0.256416311860084566998096988755 0.295324650406837474481136496252 0.222562797367572784423828125 +-0.256402292847633328509715511245 -0.605450314283370927270766514994 -0.240182608366012545486611884371 +-0.256402292847633328509715511245 0.605450314283370927270766514994 -0.240182608366012545486611884371 +-0.2563765048980712890625 -0.3468874990940093994140625 0.2528634965419769287109375 +-0.2563765048980712890625 0.3468874990940093994140625 0.2528634965419769287109375 +-0.256336402893066417352230246252 -0.303460407257080122533920985006 0.0469399988651275634765625 +-0.256336402893066417352230246252 0.303460407257080122533920985006 0.0469399988651275634765625 +-0.2562870085239410400390625 -0.26205348968505859375 -0.340066492557525634765625 +-0.2562870085239410400390625 0.26205348968505859375 -0.340066492557525634765625 +-0.256225609779357932360710492503 -0.120501601696014412623547684689 0.282538008689880382195980246252 +-0.256225609779357932360710492503 0.120501601696014412623547684689 0.282538008689880382195980246252 +-0.256149950623512256964176003748 -0.237619194388389576300113503748 0.0206006506457924835895578752343 +-0.256149950623512256964176003748 0.237619194388389576300113503748 0.0206006506457924835895578752343 +-0.256110806763172160760433371252 0 -0.486731308698654219213608485006 +-0.256063011288642894403011496252 -0.913128617405891351843649772491 -0.0559227015823125783722247206242 +-0.256063011288642894403011496252 0.913128617405891351843649772491 -0.0559227015823125783722247206242 +-0.25586248934268951416015625 -0.46517626941204071044921875 -0.52975948154926300048828125 +-0.25586248934268951416015625 0.46517626941204071044921875 -0.52975948154926300048828125 +-0.255814500153064727783203125 -0.68706826865673065185546875 0.1581030003726482391357421875 +-0.255814500153064727783203125 0.68706826865673065185546875 0.1581030003726482391357421875 +-0.255811044573783896716179242503 0 0.370217236876487720831363503748 +-0.255792599916458140985042746252 -0.156748795509338373355134876874 0 +-0.255792599916458140985042746252 0.156748795509338373355134876874 0 +-0.25577719509601593017578125 -0.237641599774360640084935880623 -0.02458749897778034210205078125 +-0.25577719509601593017578125 0.237641599774360640084935880623 -0.02458749897778034210205078125 +-0.25571845471858978271484375 -0.0264381006360054036929962961722 0.59700028598308563232421875 +-0.25571845471858978271484375 0.0264381006360054036929962961722 0.59700028598308563232421875 +-0.255564649403095256463558371252 -0.321026739478111278192073996252 0.366235652565956137927116742503 +-0.255564649403095256463558371252 0.321026739478111278192073996252 0.366235652565956137927116742503 +-0.25541724264621734619140625 -0.315949705243110667840511496252 -0.370726403594017039910823996252 +-0.25541724264621734619140625 0.315949705243110667840511496252 -0.370726403594017039910823996252 +-0.255286806821823086810496761245 -0.400499403476715087890625 -0.366645598411560025287059261245 +-0.255286806821823086810496761245 0.400499403476715087890625 -0.366645598411560025287059261245 +-0.25527799129486083984375 -0.105145597457885750514172684689 -0.289443588256835970806690738755 +-0.25527799129486083984375 0.105145597457885750514172684689 -0.289443588256835970806690738755 +-0.255277204513549793585269753748 -0.103845298290252685546875 -0.118531796336174000128238503748 +-0.255277204513549793585269753748 0.103845298290252685546875 -0.118531796336174000128238503748 +-0.255276413261890378070262386245 -0.912621319293975830078125 0.066749848425388336181640625 +-0.255276413261890378070262386245 0.912621319293975830078125 0.066749848425388336181640625 +-0.255274558067321744037059261245 -0.78565926849842071533203125 -0.200187748670578008480802623126 +-0.255274558067321744037059261245 0.78565926849842071533203125 -0.200187748670578008480802623126 +-0.255220794677734397204460492503 0 -0.307997202873230013775440738755 +-0.255212742090225208624332253748 -0.509496000409126348351662727509 -0.312697444856166850701839621252 +-0.255212742090225208624332253748 0.509496000409126348351662727509 -0.312697444856166850701839621252 +-0.2551943957805633544921875 0 0.157720792293548572882144753748 +-0.255193805694580055920539507497 -0.185406607389450056588842130623 0.510392403602600075451789507497 +-0.255193805694580055920539507497 0.185406607389450056588842130623 0.510392403602600075451789507497 +-0.2550487518310546875 -0.48708151280879974365234375 0.5100997388362884521484375 +-0.2550487518310546875 0.48708151280879974365234375 0.5100997388362884521484375 +-0.255024492740631103515625 -0.408760488033294677734375 0.13370649516582489013671875 +-0.255024492740631103515625 0.408760488033294677734375 0.13370649516582489013671875 +-0.254966998100280728412059261245 -0.498486614227294899670539507497 -0.215644794702529896124332253748 +-0.254966998100280728412059261245 0.498486614227294899670539507497 -0.215644794702529896124332253748 +-0.254943001270294178350894753748 -0.0370449006557464627364950615629 0.368960407376289378778011496252 +-0.254943001270294178350894753748 0.0370449006557464627364950615629 0.368960407376289378778011496252 +-0.254858803749084483758480246252 -0.303173995018005404400440738755 -0.0559683978557586683799662807814 +-0.254858803749084483758480246252 0.303173995018005404400440738755 -0.0559683978557586683799662807814 +-0.254825751483440388067691628748 -0.602620252966880820544304242503 -0.542598369717597894812399772491 +-0.254825751483440388067691628748 0.602620252966880820544304242503 -0.542598369717597894812399772491 +-0.254702985286712646484375 -0.2673769891262054443359375 0.92931997776031494140625 +-0.254702985286712646484375 0.2673769891262054443359375 0.92931997776031494140625 +-0.25468099117279052734375 -0.783840000629425048828125 -0.566332995891571044921875 +-0.25468099117279052734375 0.783840000629425048828125 -0.566332995891571044921875 +-0.254608207941055320056022992503 -0.352552959322929404528679242503 -0.115676553547382363063000809689 +-0.254608207941055320056022992503 0.352552959322929404528679242503 -0.115676553547382363063000809689 +-0.254583603143691994397102007497 -0.0207420006394386270687224538278 0.157343405485153187139957253748 +-0.254583603143691994397102007497 0.0207420006394386270687224538278 0.157343405485153187139957253748 +-0.254561296105384804455695757497 -0.0144375005736947052692453752343 0.239771008491516085525674384371 +-0.254561296105384804455695757497 0.0144375005736947052692453752343 0.239771008491516085525674384371 +-0.254531407356262173724559261245 -0.332019603252410866467414507497 0.430089604854583751336605246252 +-0.254531407356262173724559261245 0.332019603252410866467414507497 0.430089604854583751336605246252 +-0.254528707265853859631477007497 -0.154835397005081171206697376874 0.0352292999625205965896768134371 +-0.254528707265853859631477007497 0.154835397005081171206697376874 0.0352292999625205965896768134371 +-0.254514044523239113537727007497 -0.15500240027904510498046875 -0.183567306399345375744758257497 +-0.254514044523239113537727007497 0.15500240027904510498046875 -0.183567306399345375744758257497 +-0.254510757327079784051448996252 -0.49312056601047515869140625 0.338462153077125571520866742503 +-0.254510757327079784051448996252 0.49312056601047515869140625 0.338462153077125571520866742503 +-0.254486399888992298468082253748 -0.0197450995445251457904856096093 -0.157628703117370594366519753748 +-0.254486399888992298468082253748 0.0197450995445251457904856096093 -0.157628703117370594366519753748 +-0.25439751148223876953125 -0.4125874936580657958984375 -0.122693501412868499755859375 +-0.25439751148223876953125 0.4125874936580657958984375 -0.122693501412868499755859375 +-0.25434149801731109619140625 0 -0.70555727183818817138671875 +-0.254283487796783447265625 -0.02064899913966655731201171875 0.4300160109996795654296875 +-0.254283487796783447265625 0.02064899913966655731201171875 0.4300160109996795654296875 +-0.254254692792892422747996761245 -0.0466228023171424837967080634371 -0.650523316860198930200454014994 +-0.254254692792892422747996761245 0.0466228023171424837967080634371 -0.650523316860198930200454014994 +-0.254149341583251919818309261245 -0.219908842444419855288728626874 -0.0977151036262512151520098768742 +-0.254149341583251919818309261245 0.219908842444419855288728626874 -0.0977151036262512151520098768742 +-0.254053495824337005615234375 -0.295599751174449920654296875 -0.64076323807239532470703125 +-0.254053495824337005615234375 0.295599751174449920654296875 -0.64076323807239532470703125 +-0.254037000238895416259765625 0 0.7056667506694793701171875 +-0.25402200222015380859375 -0.0588042005896568242828692518742 -0.14837430417537689208984375 +-0.25402200222015380859375 0.0588042005896568242828692518742 -0.14837430417537689208984375 +-0.253997701406478870733707253748 -0.154011905193328857421875 -0.0420176982879638671875 +-0.253997701406478870733707253748 0.154011905193328857421875 -0.0420176982879638671875 +-0.253986310958862315789730246252 -0.781677889823913618627670985006 0.366702309250831637310596988755 +-0.253986310958862315789730246252 0.781677889823913618627670985006 0.366702309250831637310596988755 +-0.253944003582000699115184261245 -0.487299585342407193255809261245 0.2409389913082122802734375 +-0.253944003582000699115184261245 0.487299585342407193255809261245 0.2409389913082122802734375 +-0.253891953825950644763054242503 -0.0773993991315364837646484375 0.593336242437362715307358485006 +-0.253891953825950644763054242503 0.0773993991315364837646484375 0.593336242437362715307358485006 +-0.25387470424175262451171875 -0.2073951065540313720703125 -0.30827701091766357421875 +-0.25387470424175262451171875 0.2073951065540313720703125 -0.30827701091766357421875 +-0.253738096356391884533820757497 -0.155875647068023676089509876874 0.183901551365852344854801003748 +-0.253738096356391884533820757497 0.155875647068023676089509876874 0.183901551365852344854801003748 +-0.25355899333953857421875 -0.564508020877838134765625 -0.785517990589141845703125 +-0.25355899333953857421875 0.564508020877838134765625 -0.785517990589141845703125 +-0.253400397300720225945980246252 -0.184104001522064214535490123126 0.248784804344177268298210492503 +-0.253400397300720225945980246252 0.184104001522064214535490123126 0.248784804344177268298210492503 +-0.253374409675598155633480246252 -0.204480791091918967516960492503 -0.232355594635009765625 +-0.253374409675598155633480246252 0.204480791091918967516960492503 -0.232355594635009765625 +-0.25337339937686920166015625 -0.0366084013134241118003764370314 0.862821900844573996813835492503 +-0.25337339937686920166015625 0.0366084013134241118003764370314 0.862821900844573996813835492503 +-0.253365993499755859375 -0.513369023799896240234375 0.81991302967071533203125 +-0.253365993499755859375 0.513369023799896240234375 0.81991302967071533203125 +-0.253364503383636474609375 -0.13320100307464599609375 -0.4099560081958770751953125 +-0.253364503383636474609375 0.13320100307464599609375 -0.4099560081958770751953125 +-0.253262096643447842669871761245 -0.4114452898502349853515625 0.5065284073352813720703125 +-0.253262096643447842669871761245 0.4114452898502349853515625 0.5065284073352813720703125 +-0.253259989619255054815738503748 -0.184004107117652887515291126874 -0.626100319623947076941306022491 +-0.253259989619255054815738503748 -0.184002000093460071905582253748 0.156525246798992156982421875 +-0.253259989619255054815738503748 0.184002000093460071905582253748 0.156525246798992156982421875 +-0.253259989619255054815738503748 0.184004107117652887515291126874 -0.626100319623947076941306022491 +-0.253245210647583041119190738755 -0.278814005851745594366519753748 -0.134645998477935791015625 +-0.253245210647583041119190738755 0.278814005851745594366519753748 -0.134645998477935791015625 +-0.253199256956577301025390625 -0.0608549974858760833740234375 0.7033394873142242431640625 +-0.253199256956577301025390625 0.0608549974858760833740234375 0.7033394873142242431640625 +-0.253134259581565823626903011245 -0.0565810982137918486167826870314 -0.809457543492317133093649772491 +-0.253134259581565823626903011245 0.0565810982137918486167826870314 -0.809457543492317133093649772491 +-0.253120037913322437628238503748 -0.0724513471126556479751101846887 0.364939641952514659539730246252 +-0.253120037913322437628238503748 0.0724513471126556479751101846887 0.364939641952514659539730246252 +-0.253023290634155295641960492503 -0.257060712575912508892628238755 0.26907075941562652587890625 +-0.253023290634155295641960492503 0.257060712575912508892628238755 0.26907075941562652587890625 +-0.252983188629150423931690738755 -0.565680789947509810033920985006 0.5059688091278076171875 +-0.252983188629150423931690738755 0.565680789947509810033920985006 0.5059688091278076171875 +-0.252960395812988292352230246252 -0.0429544497281312900871519389057 0.238046190142631508557258257497 +-0.252960395812988292352230246252 0.0429544497281312900871519389057 0.238046190142631508557258257497 +-0.252945552766323134008530360006 -0.183775345981121079885767244377 -0.452487733960151683465511496252 +-0.252945552766323134008530360006 0.183775345981121079885767244377 -0.452487733960151683465511496252 +-0.252862457931041728631527121252 -0.778244736790656976843649772491 -0.482592427730560269427684261245 +-0.252862457931041728631527121252 0.778244736790656976843649772491 -0.482592427730560269427684261245 +-0.2528559863567352294921875 -0.059876501560211181640625 0.4271754920482635498046875 +-0.2528559863567352294921875 0.059876501560211181640625 0.4271754920482635498046875 +-0.252754497528076160772769753748 -0.0413850009441375718544087192186 0.156212693452835088558927623126 +-0.252754497528076160772769753748 0.0413850009441375718544087192186 0.156212693452835088558927623126 +-0.252326694130897533074886496252 -0.315277656912803683209034488755 0.198572395741939550228849498126 +-0.252326694130897533074886496252 0.315277656912803683209034488755 0.198572395741939550228849498126 +-0.252297496795654274670539507497 -0.322614610195159912109375 -0.567684596776962258068977007497 +-0.252297496795654274670539507497 0.322614610195159912109375 -0.567684596776962258068977007497 +-0.252189292013645205425831363755 -0.228575050830841092208700615629 0.432034337520599387438835492503 +-0.252189292013645205425831363755 0.228575050830841092208700615629 0.432034337520599387438835492503 +-0.252150796353816986083984375 -0.776033827662467978747429242503 0.2381002902984619140625 +-0.252150796353816986083984375 0.776033827662467978747429242503 0.2381002902984619140625 +-0.252125236392021168096988503748 -0.366874806582927703857421875 -0.83924712240695953369140625 +-0.252125236392021168096988503748 0.366874806582927703857421875 -0.83924712240695953369140625 +-0.252049487829208385125667746252 -0.109070996940135958586104436563 0.857073605060577392578125 +-0.252049487829208385125667746252 0.109070996940135958586104436563 0.857073605060577392578125 +-0.251951408386230479852230246252 -0.542903387546539328845085492503 0.042149998247623443603515625 +-0.251951408386230479852230246252 0.542903387546539328845085492503 0.042149998247623443603515625 +-0.251934298872947659564403011245 -0.900430876016616754675681022491 -0.168087303638458251953125 +-0.251934298872947659564403011245 0.900430876016616754675681022491 -0.168087303638458251953125 +-0.251882100105285611224559261245 -0.138078296184539789370759876874 0.08654339611530303955078125 +-0.251882100105285611224559261245 0.138078296184539789370759876874 0.08654339611530303955078125 +-0.251881206035613980365184261245 -0.0950318992137908907791299384371 0.132381302118301374948217130623 +-0.251881206035613980365184261245 0.0950318992137908907791299384371 0.132381302118301374948217130623 +-0.251717394590377785412727007497 -0.543499195575714133532585492503 -0.0353154011070728260368589701557 +-0.251717394590377785412727007497 0.543499195575714133532585492503 -0.0353154011070728260368589701557 +-0.25171439349651336669921875 -0.235311293601989740542634876874 0.0613875500857829978218482835928 +-0.25171439349651336669921875 0.235311293601989740542634876874 0.0613875500857829978218482835928 +-0.251676303148269664422542746252 -0.0911397010087966891189736884371 -0.135471904277801508120759876874 +-0.251676303148269664422542746252 0.0911397010087966891189736884371 -0.135471904277801508120759876874 +-0.2516759932041168212890625 -0.3054600059986114501953125 0.305537998676300048828125 +-0.2516759932041168212890625 0.3054600059986114501953125 0.305537998676300048828125 +-0.251668989658355712890625 -0.13256800174713134765625 -0.95869100093841552734375 +-0.251668989658355712890625 0.13256800174713134765625 -0.95869100093841552734375 +-0.251656597852706942486378238755 -0.216020342707633983270198996252 -0.559020814299583501671975227509 +-0.251656597852706942486378238755 0.216020342707633983270198996252 -0.559020814299583501671975227509 +-0.251654410362243674548210492503 -0.260421609878540072369190738755 -0.713337612152099675988381477509 +-0.251654410362243674548210492503 0.260421609878540072369190738755 -0.713337612152099675988381477509 +-0.25165139138698577880859375 -0.0696825496852397918701171875 -0.233058008551597584112613503748 +-0.25165139138698577880859375 0.0696825496852397918701171875 -0.233058008551597584112613503748 +-0.251638653874397266729801003748 -0.03003344871103763580322265625 -0.371854805946350119860710492503 +-0.251638653874397266729801003748 0.03003344871103763580322265625 -0.371854805946350119860710492503 +-0.251632490754127469134715511245 -0.13506640493869781494140625 -0.202331504225730873791633257497 +-0.251632490754127469134715511245 0.13506640493869781494140625 -0.202331504225730873791633257497 +-0.25162760913372039794921875 -0.588121813535690263208266514994 0.284246909618377674444644753748 +-0.25162760913372039794921875 0.588121813535690263208266514994 0.284246909618377674444644753748 +-0.251503002643585216180355246252 -0.0232980992645025232479216725778 -0.242287859320640536209268134371 +-0.251503002643585216180355246252 0.0232980992645025232479216725778 -0.242287859320640536209268134371 +-0.251485504209995269775390625 -0.61440373957157135009765625 -0.348944999277591705322265625 +-0.251485504209995269775390625 0.61440373957157135009765625 -0.348944999277591705322265625 +-0.251379105448722828253238503748 -0.200217846035957325323551003748 0.138640950620174396856754128748 +-0.251379105448722828253238503748 0.200217846035957325323551003748 0.138640950620174396856754128748 +-0.2511135041713714599609375 -0.182442153990268723928735994377 0.325817102193832419665397992503 +-0.2511135041713714599609375 0.182442153990268723928735994377 0.325817102193832419665397992503 +-0.25102519989013671875 -0.295553588867187522204460492503 0.0981548011302948025802450615629 +-0.25102519989013671875 0.295553588867187522204460492503 0.0981548011302948025802450615629 +-0.25096504390239715576171875 -0.125378046929836256540014005623 0.209276902675628651007144753748 +-0.25096504390239715576171875 0.125378046929836256540014005623 0.209276902675628651007144753748 +-0.2509475052356719970703125 -0.2234854996204376220703125 0.3702425062656402587890625 +-0.2509475052356719970703125 0.2234854996204376220703125 0.3702425062656402587890625 +-0.250914162397384676861378238755 -0.372216153144836414679019753748 0.0315796483308076886276083428129 +-0.250914162397384676861378238755 0.372216153144836414679019753748 0.0315796483308076886276083428129 +-0.25089804828166961669921875 -0.0866157531738281222244424384371 -0.593336242437362715307358485006 +-0.25089804828166961669921875 0.0866157531738281222244424384371 -0.593336242437362715307358485006 +-0.250790995359420787469417746252 -0.423138606548309315069644753748 0.343595409393310513568309261245 +-0.250790995359420787469417746252 0.423138606548309315069644753748 0.343595409393310513568309261245 +-0.250789551436901070324836382497 -0.645022442936897255627570757497 0.650807929039001420434829014994 +-0.250789551436901070324836382497 0.645022442936897255627570757497 0.650807929039001420434829014994 +-0.2506864964962005615234375 -0.3510214984416961669921875 -0.2528634965419769287109375 +-0.2506864964962005615234375 0.3510214984416961669921875 -0.2528634965419769287109375 +-0.250636956095695528912159488755 -0.372801142930984485968082253748 -0.0264672003686428070068359375 +-0.250636956095695528912159488755 0.372801142930984485968082253748 -0.0264672003686428070068359375 +-0.250629007816314697265625 -0.90483701229095458984375 0.3441750109195709228515625 +-0.250629007816314697265625 0.90483701229095458984375 0.3441750109195709228515625 +-0.250589244067668914794921875 -0.67259998619556427001953125 -0.217517249286174774169921875 +-0.250589244067668914794921875 0.67259998619556427001953125 -0.217517249286174774169921875 +-0.250303798913955655169871761245 -0.535045194625854425574118522491 -0.10523580014705657958984375 +-0.250303798913955655169871761245 0.535045194625854425574118522491 -0.10523580014705657958984375 +-0.25029599666595458984375 -0.599507188796997048108039507497 -0.466843986511230490954460492503 +-0.25029599666595458984375 0.599507188796997048108039507497 -0.466843986511230490954460492503 +-0.25025975704193115234375 -0.128226152807474153005884431877 0.586027643084526039807258257497 +-0.25025975704193115234375 0.128226152807474153005884431877 0.586027643084526039807258257497 +-0.250255498290061995092514735006 -0.483638635277748141216846988755 0.0772376000881195151626101846887 +-0.250255498290061995092514735006 0.483638635277748141216846988755 0.0772376000881195151626101846887 +-0.250213660299777984619140625 -0.22452665865421295166015625 -0.78069268167018890380859375 +-0.250213660299777984619140625 0.22452665865421295166015625 -0.78069268167018890380859375 +-0.2501370012760162353515625 -0.23210500180721282958984375 -0.365456998348236083984375 +-0.2501370012760162353515625 0.23210500180721282958984375 -0.365456998348236083984375 +-0.250126791000366222039730246252 -0.0165204003453254706645925153907 0.31171119213104248046875 +-0.250126791000366222039730246252 0.0165204003453254706645925153907 0.31171119213104248046875 +-0.250094389915466341900440738755 -0.181703603267669683285490123126 -0.253843998908996615337940738755 +-0.250094389915466341900440738755 0.181703603267669683285490123126 -0.253843998908996615337940738755 +-0.250072899460792585912827235006 -0.485560348629951510357471988755 -0.06476744823157787322998046875 +-0.250072899460792585912827235006 0.485560348629951510357471988755 -0.06476744823157787322998046875 +-0.2500664889812469482421875 -0.3694410026073455810546875 0.22578750550746917724609375 +-0.2500664889812469482421875 0.3694410026073455810546875 0.22578750550746917724609375 +-0.25 0 0 +-0.24999849498271942138671875 -0.099111996591091156005859375 0.421518504619598388671875 +-0.24999849498271942138671875 0.099111996591091156005859375 0.421518504619598388671875 +-0.249958795309066755807592130623 -0.530855405330657892370993522491 0.12535379827022552490234375 +-0.249958795309066755807592130623 0.530855405330657892370993522491 0.12535379827022552490234375 +-0.24975000321865081787109375 -0.119707502424716949462890625 0.6969899833202362060546875 +-0.24975000321865081787109375 0.119707502424716949462890625 0.6969899833202362060546875 +-0.2497255504131317138671875 -0.768561396002769403601462272491 0.499451100826263427734375 +-0.2497255504131317138671875 0.768561396002769403601462272491 0.499451100826263427734375 +-0.249715501070022577456697376874 -0.06182970106601715087890625 0.154334700107574468441740123126 +-0.249715501070022577456697376874 0.06182970106601715087890625 0.154334700107574468441740123126 +-0.249705451726913468801782869377 -0.107402401417493825741544810626 0.358624809980392478259147992503 +-0.249705451726913468801782869377 0.107402401417493825741544810626 0.358624809980392478259147992503 +-0.249704790115356456414730246252 -0.661714410781860440380341970013 0.373874402046203646587940738755 +-0.249704790115356456414730246252 0.661714410781860440380341970013 0.373874402046203646587940738755 +-0.249695047736167935470419365629 -0.490053296089172418792401231258 0 +-0.249695047736167935470419365629 0.490053296089172418792401231258 0 +-0.249676004052162142654580634371 -0.067121602594852447509765625 0.235916447639465315377904630623 +-0.249676004052162142654580634371 0.067121602594852447509765625 0.235916447639465315377904630623 +-0.249658799171447759457365123126 -0.24625480175018310546875 0.192429196834564220086605246252 +-0.249658799171447759457365123126 0.24625480175018310546875 0.192429196834564220086605246252 +-0.2496390044689178466796875 -0.126707401871681196725560880623 0.107822397351264948062166126874 +-0.2496390044689178466796875 0.126707401871681196725560880623 0.107822397351264948062166126874 +-0.249477192759513827224893134371 -0.239000296592712380139289507497 0.608801901340484619140625 +-0.249477192759513827224893134371 0.239000296592712380139289507497 0.608801901340484619140625 +-0.249452701210975624768195757497 -0.234363842010498035772769753748 -0.0731226995587348910232705634371 +-0.249452701210975624768195757497 0.234363842010498035772769753748 -0.0731226995587348910232705634371 +-0.249397808313369745425447376874 -0.894536161422729403369658029987 0.200263800472021080700812944997 +-0.249397808313369745425447376874 0.894536161422729403369658029987 0.200263800472021080700812944997 +-0.249391096830368030889957253748 -0.467249304056167547027911268742 -0.457692885398864712787059261245 +-0.249391096830368030889957253748 0.467249304056167547027911268742 -0.457692885398864712787059261245 +-0.24935925006866455078125 -0.0101687498390674591064453125 -0.01471650041639804840087890625 +-0.24935925006866455078125 0.0101687498390674591064453125 -0.01471650041639804840087890625 +-0.249319803714752180612279630623 -0.151261496543884266241519753748 0.0704247012734413174728231865629 +-0.249319803714752180612279630623 0.151261496543884266241519753748 0.0704247012734413174728231865629 +-0.249280905723571810650440738755 -0.400374159216880853850994981258 0.282947507500648509637386496252 +-0.249280905723571810650440738755 0.400374159216880853850994981258 0.282947507500648509637386496252 +-0.249256199598312355725227007497 -0.166010695695877064093082253748 0.0176598004996776566932759067186 +-0.249256199598312355725227007497 0.166010695695877064093082253748 0.0176598004996776566932759067186 +-0.249229252338409423828125 -0.01961450092494487762451171875 0 +-0.249229252338409423828125 0.01961450092494487762451171875 0 +-0.249227392673492420538394753748 -0.0395244017243385273308042826557 -0.162245106697082502877904630623 +-0.249227392673492420538394753748 0.0395244017243385273308042826557 -0.162245106697082502877904630623 +-0.249180597066879255807592130623 -0.165724807977676386050447376874 -0.02107889950275421142578125 +-0.249180597066879255807592130623 0.165724807977676386050447376874 -0.02107889950275421142578125 +-0.2491682469844818115234375 -0.0103247500956058502197265625 0.017565749585628509521484375 +-0.2491682469844818115234375 0.0103247500956058502197265625 0.017565749585628509521484375 +-0.249084545671939855404630748126 -0.593438291549682639391960492503 0.09103834629058837890625 +-0.249084545671939855404630748126 0.593438291549682639391960492503 0.09103834629058837890625 +-0.248964945971965806448267244377 -0.595558580756187505578225227509 -0.0763301499187946375091229356258 +-0.248964945971965806448267244377 0.595558580756187505578225227509 -0.0763301499187946375091229356258 +-0.248746508359909052066072376874 -0.765575999021530173571647992503 -0.40249349176883697509765625 +-0.248746508359909052066072376874 0.765575999021530173571647992503 -0.40249349176883697509765625 +-0.248744595050811784231470369377 -0.600521367788314885949318977509 0 +-0.248744595050811784231470369377 0.600521367788314885949318977509 0 +-0.248521497845649724789396373126 -0.295201349258422840460269753748 -0.231502506136894242727564119377 +-0.248521497845649724789396373126 0.295201349258422840460269753748 -0.231502506136894242727564119377 +-0.248371902108192432745426003748 -0.514352309703826837683493522491 0.404664385318756092413394753748 +-0.248371902108192432745426003748 0.514352309703826837683493522491 0.404664385318756092413394753748 +-0.24831040203571319580078125 -0.487099590897560108526676003748 -0.351533660292625449450554242503 +-0.24831040203571319580078125 0.487099590897560108526676003748 -0.351533660292625449450554242503 +-0.248297190666198736019865123126 -0.0491192013025283855109925923443 0.309734797477722201275440738755 +-0.248297190666198736019865123126 0.0491192013025283855109925923443 0.309734797477722201275440738755 +-0.248292440176010126284822376874 -0.215473639965057361944644753748 0.120091304183006272743305942186 +-0.248292440176010126284822376874 0.215473639965057361944644753748 0.120091304183006272743305942186 +-0.24825875461101531982421875 0 -0.0294547490775585174560546875 +-0.248187994956970220394865123126 -0.147405195236206071340845369377 0.27690160274505615234375 +-0.248187994956970220394865123126 0.147405195236206071340845369377 0.27690160274505615234375 +-0.247958803176879905016960492503 -0.295084404945373524054019753748 -0.106965196132659923211605246252 +-0.247958803176879905016960492503 0.295084404945373524054019753748 -0.106965196132659923211605246252 +-0.247901397943496692999332253748 -0.229606801271438593081697376874 0.495808196067810014184829014994 +-0.247901397943496692999332253748 0.229606801271438593081697376874 0.495808196067810014184829014994 +-0.247852808237075811215177623126 -0.339620453119277965203792746252 0.495708832144737265856804242503 +-0.247852808237075811215177623126 0.339620453119277965203792746252 0.495708832144737265856804242503 +-0.24778474867343902587890625 -0.029769249260425567626953125 -0.01471449993550777435302734375 +-0.24778474867343902587890625 0.029769249260425567626953125 -0.01471449993550777435302734375 +-0.247732794284820534436164507497 -0.13447679579257965087890625 -0.102685797214508059416182561563 +-0.247732794284820534436164507497 0.13447679579257965087890625 -0.102685797214508059416182561563 +-0.24757875502109527587890625 -0.0299385003745555877685546875 0.01756249926984310150146484375 +-0.24757875502109527587890625 0.0299385003745555877685546875 0.01756249926984310150146484375 +-0.24751900136470794677734375 0 0.0351339988410472869873046875 +-0.247504055500030517578125 -0.179821796715259552001953125 -0.330008858442306540759147992503 +-0.247504055500030517578125 0.179821796715259552001953125 -0.330008858442306540759147992503 +-0.247487807273864740542634876874 -0.247487097978591891189736884371 0 +-0.247487807273864740542634876874 0.247487097978591891189736884371 0 +-0.247465397417545335256860994377 -0.5376202166080474853515625 -0.268747054040431976318359375 +-0.247465397417545335256860994377 0.5376202166080474853515625 -0.268747054040431976318359375 +-0.2474402487277984619140625 -0.02028525061905384063720703125 -0.029357500374317169189453125 +-0.2474402487277984619140625 0.02028525061905384063720703125 -0.029357500374317169189453125 +-0.247365438938140863589509876874 -0.0901647023856639862060546875 -0.364939212799072265625 +-0.247365438938140863589509876874 0.0901647023856639862060546875 -0.364939212799072265625 +-0.247254002094268787725894753748 0 -0.169898396730422979183927623126 +-0.247250840067863436599893134371 -0.114074446260929093788227817186 -0.219895553588867170846654630623 +-0.247250840067863436599893134371 0.114074446260929093788227817186 -0.219895553588867170846654630623 +-0.2472136020660400390625 -0.760844802856445401317841970013 0 +-0.2472136020660400390625 0.760844802856445401317841970013 0 +-0.247113355994224570544304242503 -0.0731885038316249930678836221887 -0.485879355669021628649772992503 +-0.247113355994224570544304242503 0.0731885038316249930678836221887 -0.485879355669021628649772992503 +-0.247051757574081432000667746252 -0.474467387795448336529346988755 -0.1278513483703136444091796875 +-0.247051757574081432000667746252 0.474467387795448336529346988755 -0.1278513483703136444091796875 +-0.246961641311645524465845369377 -0.441289535164833102154346988755 0.40837873518466949462890625 +-0.246961641311645524465845369377 0.441289535164833102154346988755 0.40837873518466949462890625 +-0.2469222545623779296875 -0.039108000695705413818359375 0 +-0.2469222545623779296875 0.039108000695705413818359375 0 +-0.246918609738349920101896373126 -0.179394306242465967349275501874 0.8466695845127105712890625 +-0.246918609738349920101896373126 0.179394306242465967349275501874 0.8466695845127105712890625 +-0.246918600797653181588842130623 -0.3733727931976318359375 -0.399529802799224842413394753748 +-0.246918600797653181588842130623 0.3733727931976318359375 -0.399529802799224842413394753748 +-0.24690639972686767578125 -0.415403223037719759869190738755 -0.637555980682373069079460492503 +-0.24690639972686767578125 0.415403223037719759869190738755 -0.637555980682373069079460492503 +-0.246889591217041015625 -0.4419295787811279296875 0.619470405578613325658920985006 +-0.246889591217041015625 0.4419295787811279296875 0.619470405578613325658920985006 +-0.246877388656139368228181751874 -0.64633999764919281005859375 0.493756499886512767449886496252 +-0.246877388656139368228181751874 0.64633999764919281005859375 0.493756499886512767449886496252 +-0.246819756925106048583984375 -0.65950651466846466064453125 0.258130498230457305908203125 +-0.246819756925106048583984375 0.65950651466846466064453125 0.258130498230457305908203125 +-0.246800243854522705078125 -0.365475600957870516705128238755 0.0895387485623359707931356865629 +-0.246800243854522705078125 0.365475600957870516705128238755 0.0895387485623359707931356865629 +-0.2467854022979736328125 -0.0779669970273971502106036268742 -0.151717203855514515264957253748 +-0.2467854022979736328125 0.0779669970273971502106036268742 -0.151717203855514515264957253748 +-0.24667875468730926513671875 -0.0205805003643035888671875 0.03501474857330322265625 +-0.24667875468730926513671875 0.0205805003643035888671875 0.03501474857330322265625 +-0.246677398681640625 -0.31679101288318634033203125 -0.203208754956722276174829744377 +-0.246677398681640625 0.31679101288318634033203125 -0.203208754956722276174829744377 +-0.246624290943145751953125 -0.179182800650596635305689119377 -0.846800100803375310754006477509 +-0.246624290943145751953125 0.179182800650596635305689119377 -0.846800100803375310754006477509 +-0.246607096493244165591463001874 -0.758987081050872758325454014994 -0.2926141917705535888671875 +-0.246607096493244165591463001874 0.758987081050872758325454014994 -0.2926141917705535888671875 +-0.246585291624069197213842130623 -0.148931702971458440609708873126 -0.0837558031082153292556924384371 +-0.246585291624069197213842130623 0.148931702971458440609708873126 -0.0837558031082153292556924384371 +-0.246527493000030517578125 -0.3748919963836669921875 -0.22063599526882171630859375 +-0.246527493000030517578125 0.3748919963836669921875 -0.22063599526882171630859375 +-0.246442346274852785992237613755 -0.409598186612129266936932481258 -0.272021196782588958740234375 +-0.246442346274852785992237613755 0.409598186612129266936932481258 -0.272021196782588958740234375 +-0.246440005302429210320980246252 -0.264352011680603016241519753748 0.171421599388122569695980246252 +-0.246440005302429210320980246252 0.264352011680603016241519753748 0.171421599388122569695980246252 +-0.246409988403320318051115123126 -0.211651611328125016653345369377 0.233421993255615245477230246252 +-0.246409988403320318051115123126 0.211651611328125016653345369377 0.233421993255615245477230246252 +-0.24640850722789764404296875 -0.3406689167022705078125 -0.495708832144737265856804242503 +-0.24640850722789764404296875 0.3406689167022705078125 -0.495708832144737265856804242503 +-0.246314811706542985403345369377 -0.3142859935760498046875 0.0235264003276824951171875 +-0.246314811706542985403345369377 0.3142859935760498046875 0.0235264003276824951171875 +-0.24624121189117431640625 -0.0794315993785858209808026231258 -0.305050802230834972039730246252 +-0.24624121189117431640625 0.0794315993785858209808026231258 -0.305050802230834972039730246252 +-0.246094799041748052426115123126 -0.0266835987567901611328125 -0.314205598831176768914730246252 +-0.246094799041748052426115123126 0.0266835987567901611328125 -0.314205598831176768914730246252 +-0.2460120022296905517578125 -0.325926005840301513671875 -0.912826001644134521484375 +-0.2460120022296905517578125 0.325926005840301513671875 -0.912826001644134521484375 +-0.245997749269008636474609375 -0.5892824828624725341796875 0.3933599889278411865234375 +-0.245997749269008636474609375 0.5892824828624725341796875 0.3933599889278411865234375 +-0.245971208810806252209602007497 -0.2397623956203460693359375 -0.491947817802429188116519753748 +-0.245971208810806252209602007497 0.2397623956203460693359375 -0.491947817802429188116519753748 +-0.245968802273273501324268863755 -0.467856392264366205413494981258 0.152018344402313237972990123126 +-0.245968802273273501324268863755 0.467856392264366205413494981258 0.152018344402313237972990123126 +-0.245966048538684867175163617503 -0.28914983570575714111328125 -0.397986605763435419280682481258 +-0.245966048538684867175163617503 0.28914983570575714111328125 -0.397986605763435419280682481258 +-0.245965507626533519403011496252 0 0.491935965418815679406350227509 +-0.24593938887119293212890625 0 -0.865745079517364568566506477509 +-0.245936107635498030221654630623 -0.122484898567199698704577315311 -0.120469200611114490850894753748 +-0.245936107635498030221654630623 0.122484898567199698704577315311 -0.120469200611114490850894753748 +-0.245901608467102072985710492503 -0.0804740011692047230162927462516 0.30505120754241943359375 +-0.245901608467102072985710492503 0.0804740011692047230162927462516 0.30505120754241943359375 +-0.245892611145973216668636496252 -0.334571403264999400750667746252 0.173490294814109796694978626874 +-0.245892611145973216668636496252 0.334571403264999400750667746252 0.173490294814109796694978626874 +-0.245857957005500810110376619377 -0.367304411530494701043636496252 -0.0845059521496295956710653740629 +-0.245857957005500810110376619377 0.367304411530494701043636496252 -0.0845059521496295956710653740629 +-0.245845496654510498046875 -0.010169249959290027618408203125 -0.0442332513630390167236328125 +-0.245845496654510498046875 0.010169249959290027618408203125 -0.0442332513630390167236328125 +-0.24584519863128662109375 -0.163531494140624983346654630623 0.05308020114898681640625 +-0.24584519863128662109375 0.163531494140624983346654630623 0.05308020114898681640625 +-0.2458139955997467041015625 -0.13734449446201324462890625 0.4131729900836944580078125 +-0.2458139955997467041015625 0.13734449446201324462890625 0.4131729900836944580078125 +-0.24577300250530242919921875 -0.3314194977283477783203125 -0.2824124991893768310546875 +-0.24577300250530242919921875 0.3314194977283477783203125 -0.2824124991893768310546875 +-0.2457439899444580078125 -0.314359593391418501440170985006 -0.0280707985162735006168244211722 +-0.2457439899444580078125 0.314359593391418501440170985006 -0.0280707985162735006168244211722 +-0.245676898956298822573884876874 -0.114514803886413565892077315311 0.128565895557403553350894753748 +-0.245676898956298822573884876874 0.114514803886413565892077315311 0.128565895557403553350894753748 +-0.245491194725036637747095369377 -0.755546379089355513158920985006 -0.0942551970481872586349325615629 +-0.245491194725036637747095369377 0.755546379089355513158920985006 -0.0942551970481872586349325615629 +-0.245481598377227772100894753748 -0.0819785982370376531402911268742 0.151717793941497786081029630623 +-0.245481598377227772100894753748 0.0819785982370376531402911268742 0.151717793941497786081029630623 +-0.24531650543212890625 -0.4342670142650604248046875 0.0350989997386932373046875 +-0.24531650543212890625 0.4342670142650604248046875 0.0350989997386932373046875 +-0.245275211334228526727230246252 -0.244165611267089854852230246252 0.721264791488647527550881477509 +-0.245275211334228526727230246252 0.244165611267089854852230246252 0.721264791488647527550881477509 +-0.2452290058135986328125 -0.519522607326507568359375 -0.1730867922306060791015625 +-0.2452290058135986328125 0.519522607326507568359375 -0.1730867922306060791015625 +-0.24520875513553619384765625 -0.36390151083469390869140625 0.60823349654674530029296875 +-0.24520875513553619384765625 0.36390151083469390869140625 0.60823349654674530029296875 +-0.245207050442695639880241742503 -0.0431519020348787377128196851572 0.490419608354568548058693977509 +-0.245207050442695639880241742503 0.0431519020348787377128196851572 0.490419608354568548058693977509 +-0.245063996315002446957365123126 -0.157653200626373307668970369377 -0.27402400970458984375 +-0.245063996315002446957365123126 0.157653200626373307668970369377 -0.27402400970458984375 +-0.24503274261951446533203125 -0.0399027504026889801025390625 -0.02943949960172176361083984375 +-0.24503274261951446533203125 0.0399027504026889801025390625 -0.02943949960172176361083984375 +-0.245009005069732666015625 -0.43486249446868896484375 -0.02941399998962879180908203125 +-0.245009005069732666015625 0.43486249446868896484375 -0.02941399998962879180908203125 +-0.244869305193424230404630748126 -0.177906297147274017333984375 0.575229188799858071057258257497 +-0.244869305193424230404630748126 0.177906297147274017333984375 0.575229188799858071057258257497 +-0.24480600655078887939453125 -0.8849639892578125 -0.3961170017719268798828125 +-0.24480600655078887939453125 0.8849639892578125 -0.3961170017719268798828125 +-0.244791503250598896368472878748 -0.386119295656681071893245871252 -0.716581457853317282946647992503 +-0.244791503250598896368472878748 0.386119295656681071893245871252 -0.716581457853317282946647992503 +-0.244761610031127951891960492503 -0.753293609619140713817841970013 0.112428796291351329461605246252 +-0.244761610031127951891960492503 0.753293609619140713817841970013 0.112428796291351329461605246252 +-0.244739256799221038818359375 -0.17781150341033935546875 0.686283767223358154296875 +-0.244739256799221038818359375 0.17781150341033935546875 0.686283767223358154296875 +-0.244719795882701873779296875 -0.520974355936050459447983485006 0.301989997923374164923160378748 +-0.244719795882701873779296875 0.520974355936050459447983485006 0.301989997923374164923160378748 +-0.244694101810455311163394753748 -0.246832251548767062088174384371 0.04121564887464046478271484375 +-0.244694101810455311163394753748 0.246832251548767062088174384371 0.04121564887464046478271484375 +-0.2446455061435699462890625 -0.04931800067424774169921875 -0.014706999994814395904541015625 +-0.2446455061435699462890625 0.04931800067424774169921875 -0.014706999994814395904541015625 +-0.244548508524894708804353626874 -0.0915410950779914772690304403113 0.233058696985244728772102007497 +-0.244548508524894708804353626874 0.0915410950779914772690304403113 0.233058696985244728772102007497 +-0.2445105016231536865234375 -0.0333704985678195953369140625 -0.43485748767852783203125 +-0.2445105016231536865234375 0.0333704985678195953369140625 -0.43485748767852783203125 +-0.24440999329090118408203125 -0.0495559982955455780029296875 0.01754949986934661865234375 +-0.24440999329090118408203125 0.0495559982955455780029296875 0.01754949986934661865234375 +-0.244384397566318523065120871252 -0.582660642266273565148537727509 -0.152586852759122842959627064374 +-0.244384397566318523065120871252 0.582660642266273565148537727509 -0.152586852759122842959627064374 +-0.244322705268859852179019753748 -0.162194395065307611636384876874 -0.0632412001490592901031817518742 +-0.244322705268859852179019753748 0.162194395065307611636384876874 -0.0632412001490592901031817518742 +-0.244263745844364166259765625 -0.42835199832916259765625 -0.56511072814464569091796875 +-0.244263745844364166259765625 0.42835199832916259765625 -0.56511072814464569091796875 +-0.24425275623798370361328125 -0.03029775060713291168212890625 -0.043848000466823577880859375 +-0.24425275623798370361328125 0.03029775060713291168212890625 -0.043848000466823577880859375 +-0.24422800540924072265625 -0.04025100171566009521484375 0.0351077504456043243408203125 +-0.24422800540924072265625 0.04025100171566009521484375 0.0351077504456043243408203125 +-0.24416400492191314697265625 -0.010325250215828418731689453125 0.052700750529766082763671875 +-0.24416400492191314697265625 0.010325250215828418731689453125 0.052700750529766082763671875 +-0.244081807136535627877904630623 -0.119147399067878717593416126874 -0.535003209114074729235710492503 +-0.244081807136535627877904630623 0.119147399067878717593416126874 -0.535003209114074729235710492503 +-0.244017559289932239874332253748 -0.229697993397712685315070757497 0.100967295467853546142578125 +-0.244017559289932239874332253748 0.229697993397712685315070757497 0.100967295467853546142578125 +-0.243997657299041742495759876874 -0.214298549294471757376001619377 0.311514759063720725329460492503 +-0.243997657299041742495759876874 0.214298549294471757376001619377 0.311514759063720725329460492503 +-0.243971405923366524426398882497 -0.875823038816451959753806022491 -0.275521849095821391717464621252 +-0.243971405923366524426398882497 0.875823038816451959753806022491 -0.275521849095821391717464621252 +-0.243900650739669794253572376874 -0.1772021949291229248046875 0.177797210216522200143529630623 +-0.243900650739669794253572376874 0.1772021949291229248046875 0.177797210216522200143529630623 +-0.24388110637664794921875 -0.0123744003474712364887277971093 0.17426669597625732421875 +-0.24388110637664794921875 0.0123744003474712364887277971093 0.17426669597625732421875 +-0.243865011632442479916349498126 -0.526349732279777549059929242503 0.621276897192001298364516514994 +-0.243865011632442479916349498126 0.526349732279777549059929242503 0.621276897192001298364516514994 +-0.243752002716064453125 -0.427668511867523193359375 -0.087661497294902801513671875 +-0.243752002716064453125 0.427668511867523193359375 -0.087661497294902801513671875 +-0.243698859214782709292634876874 -0.276953396201133739129573996252 -0.257696557044982899054019753748 +-0.243698859214782709292634876874 0.276953396201133739129573996252 -0.257696557044982899054019753748 +-0.24354524910449981689453125 -0.5898225009441375732421875 -0.39407475292682647705078125 +-0.24354524910449981689453125 0.5898225009441375732421875 -0.39407475292682647705078125 +-0.24354250729084014892578125 -0.42401349544525146484375 0.1044014990329742431640625 +-0.24354250729084014892578125 0.42401349544525146484375 0.1044014990329742431640625 +-0.243495705723762501104801003748 -0.246564492583274813553018134371 -0.0491508506238460540771484375 +-0.243495705723762501104801003748 0.246564492583274813553018134371 -0.0491508506238460540771484375 +-0.243398092687130002120809990629 -0.267428705096244834216179242503 0.414414009451866183209034488755 +-0.243398092687130002120809990629 0.267428705096244834216179242503 0.414414009451866183209034488755 +-0.243356391787528963943643134371 -0.04647719860076904296875 -0.247219693660736067331029630623 +-0.243356391787528963943643134371 0.04647719860076904296875 -0.247219693660736067331029630623 +-0.243151205778121964895532869377 -0.399555909633636463507144753748 0.768915885686874411852897992503 +-0.243151205778121964895532869377 0.399555909633636463507144753748 0.768915885686874411852897992503 +-0.2430927455425262451171875 -0.0583604983985424041748046875 0 +-0.2430927455425262451171875 0.0583604983985424041748046875 0 +-0.243087589740753146072549384371 -0.654591000080108620373664507497 0.04918409883975982666015625 +-0.243087589740753146072549384371 0.654591000080108620373664507497 0.04918409883975982666015625 +-0.2430008947849273681640625 -0.553906792402267478259147992503 -0.666437423229217507092414507497 +-0.2430008947849273681640625 0.553906792402267478259147992503 -0.666437423229217507092414507497 +-0.242991097271442441085653740629 -0.356073290109634454925213731258 0.341565403342247053686264735006 +-0.242991097271442441085653740629 0.356073290109634454925213731258 0.341565403342247053686264735006 +-0.2429811954498291015625 -0.3087356090545654296875 0.0751164019107818659026776231258 +-0.2429811954498291015625 0.3087356090545654296875 0.0751164019107818659026776231258 +-0.2429677546024322509765625 0 -0.058878250420093536376953125 +-0.242937202751636521780298494377 -0.0860376015305519131759481865629 0.485879912972450311858807481258 +-0.242937202751636521780298494377 0.0860376015305519131759481865629 0.485879912972450311858807481258 +-0.242836290597915643862947376874 -0.655234998464584328381477007497 -0.0412062011659145299713458143742 +-0.242836290597915643862947376874 0.655234998464584328381477007497 -0.0412062011659145299713458143742 +-0.242817592620849592721654630623 -0.0197963990271091440364958913278 -0.175064992904663069284154630623 +-0.242817592620849592721654630623 0.0197963990271091440364958913278 -0.175064992904663069284154630623 +-0.2428016960620880126953125 -0.109807500243186945132478626874 -0.137802895903587324655248380623 +-0.2428016960620880126953125 0.109807500243186945132478626874 -0.137802895903587324655248380623 +-0.242781293392181379831029630623 -0.0589232996106147724479917826557 -0.166088408231735235043302623126 +-0.242781293392181379831029630623 0.0589232996106147724479917826557 -0.166088408231735235043302623126 +-0.242759290337562549932926003748 -0.147825302183628076724275501874 0.204243910312652571237279630623 +-0.242759290337562549932926003748 0.147825302183628076724275501874 0.204243910312652571237279630623 +-0.242753398418426497018529630623 -0.508815586566925048828125 0.205372202396392811163394753748 +-0.242753398418426497018529630623 0.508815586566925048828125 0.205372202396392811163394753748 +-0.242705404758453369140625 -0.176334893703460698910490123126 0 +-0.242705404758453369140625 0.176334893703460698910490123126 0 +-0.242670151591300981008814119377 -0.28555829823017120361328125 0.249133953452110284976228626874 +-0.242670151591300981008814119377 0.28555829823017120361328125 0.249133953452110284976228626874 +-0.242586010694503778628572376874 -0.865069216489791847912727007497 -0.0529794014990329770187216240629 +-0.242586010694503778628572376874 0.865069216489791847912727007497 -0.0529794014990329770187216240629 +-0.242562448978424077816740123126 -0.575092697143554709704460492503 0.181470906734466558285490123126 +-0.242562448978424077816740123126 0.575092697143554709704460492503 0.181470906734466558285490123126 +-0.242554309964179981573551003748 -0.563412284851074196545539507497 -0.588416767120361283716079014994 +-0.242554309964179981573551003748 0.563412284851074196545539507497 -0.588416767120361283716079014994 +-0.24254800379276275634765625 -0.03069975040853023529052734375 0.052230499684810638427734375 +-0.24254800379276275634765625 0.03069975040853023529052734375 0.052230499684810638427734375 +-0.242541593313217146432592130623 -0.0331148989498615264892578125 0.173427307605743402652009876874 +-0.242541593313217146432592130623 0.0331148989498615264892578125 0.173427307605743402652009876874 +-0.2424812018871307373046875 -0.315980708599090553967414507497 0.75090532004833221435546875 +-0.2424812018871307373046875 0.315980708599090553967414507497 0.75090532004833221435546875 +-0.2424750030040740966796875 -0.3901005089282989501953125 0.19755400717258453369140625 +-0.2424750030040740966796875 0.3901005089282989501953125 0.19755400717258453369140625 +-0.24222950637340545654296875 -0.2580575048923492431640625 0.3531729876995086669921875 +-0.24222950637340545654296875 0.2580575048923492431640625 0.3531729876995086669921875 +-0.242212513089179987124666126874 -0.337245297431945811883480246252 -0.173489852249622350521818248126 +-0.242212513089179987124666126874 0.337245297431945811883480246252 -0.173489852249622350521818248126 +-0.2421777546405792236328125 -0.02014300040900707244873046875 -0.05868674814701080322265625 +-0.2421777546405792236328125 0.02014300040900707244873046875 -0.05868674814701080322265625 +-0.24202120304107666015625 -0.281161594390869129522769753748 0.149578797817230241262720369377 +-0.24202120304107666015625 0.281161594390869129522769753748 0.149578797817230241262720369377 +-0.242012393474578840768529630623 0 -0.549026405811309792248664507497 +-0.24197100102901458740234375 -0.744723021984100341796875 -0.621962010860443115234375 +-0.24197100102901458740234375 0.744723021984100341796875 -0.621962010860443115234375 +-0.241967836022377008609041126874 -0.254008139669895161016910378748 0.882853978872299105518095529987 +-0.241967836022377008609041126874 0.254008139669895161016910378748 0.882853978872299105518095529987 +-0.241946941614150978772102007497 -0.744648000597953774182258257497 -0.538016346096992448266860264994 +-0.241946941614150978772102007497 0.744648000597953774182258257497 -0.538016346096992448266860264994 +-0.241840812563896195852564119377 -0.86458861827850341796875 0.06323669850826263427734375 +-0.241840812563896195852564119377 0.86458861827850341796875 0.06323669850826263427734375 +-0.241794304549694083483757367503 -0.424509790539741527215511496252 0.252639757096767447741569867503 +-0.241794304549694083483757367503 0.424509790539741527215511496252 0.252639757096767447741569867503 +-0.24170100688934326171875 -0.371508014202117931024105246252 0.404428803920745816302684261245 +-0.24170100688934326171875 0.371508014202117931024105246252 0.404428803920745816302684261245 +-0.241626155376434337274105246252 -0.138444297015666961669921875 0.353482639789581332134815738755 +-0.241626155376434337274105246252 0.138444297015666961669921875 0.353482639789581332134815738755 +-0.24158249795436859130859375 -0.64488525688648223876953125 -0.297087751328945159912109375 +-0.24158249795436859130859375 0.64488525688648223876953125 -0.297087751328945159912109375 +-0.241573494672775251901342130623 -0.1933578550815582275390625 -0.163569696247577667236328125 +-0.241573494672775251901342130623 0.1933578550815582275390625 -0.163569696247577667236328125 +-0.241446447372436506784154630623 -0.09245215356349945068359375 -0.235915759205818170718416126874 +-0.241446447372436506784154630623 0.09245215356349945068359375 -0.235915759205818170718416126874 +-0.241419303417205799444644753748 -0.14533080160617828369140625 0.1029354035854339599609375 +-0.241419303417205799444644753748 0.14533080160617828369140625 0.1029354035854339599609375 +-0.241417407989501925369424384371 0 -0.25341190397739410400390625 +-0.24117600917816162109375 -0.309030008316040050164730246252 -0.0795895993709564292251101846887 +-0.24117600917816162109375 0.309030008316040050164730246252 -0.0795895993709564292251101846887 +-0.24109399318695068359375 -0.0592707507312297821044921875 -0.0293374992907047271728515625 +-0.24109399318695068359375 0.0592707507312297821044921875 -0.0293374992907047271728515625 +-0.24103049933910369873046875 -0.04983200132846832275390625 -0.04383049905300140380859375 +-0.24103049933910369873046875 0.04983200132846832275390625 -0.04383049905300140380859375 +-0.241015201807022072522102007497 -0.175106692314147938116519753748 0.0353456988930702167839292826557 +-0.241015201807022072522102007497 0.175106692314147938116519753748 0.0353456988930702167839292826557 +-0.240982493758201632427784488755 -0.434592393040657054559261496252 -0.235704699158668540270866742503 +-0.240982493758201632427784488755 0.434592393040657054559261496252 -0.235704699158668540270866742503 +-0.240881043672561634405582253748 -0.536282619833946205822883257497 -0.74624209105968475341796875 +-0.240881043672561634405582253748 0.536282619833946205822883257497 -0.74624209105968475341796875 +-0.240866160392761208264289507497 -0.174998946487903594970703125 -0.184007591009139992443977007497 +-0.240866160392761208264289507497 0.174998946487903594970703125 -0.184007591009139992443977007497 +-0.2408075034618377685546875 -0.20048250257968902587890625 -0.3896389901638031005859375 +-0.2408075034618377685546875 0.20048250257968902587890625 -0.3896389901638031005859375 +-0.240791246294975253006143134371 -0.210524657368659967593416126874 -0.142123100161552412545873380623 +-0.240791246294975253006143134371 0.210524657368659967593416126874 -0.142123100161552412545873380623 +-0.24076549708843231201171875 -0.3963240087032318115234375 -0.18697349727153778076171875 +-0.24076549708843231201171875 0.3963240087032318115234375 -0.18697349727153778076171875 +-0.240697693824768049752904630623 -0.487700572609901406018195757497 0.778917378187179543225227007497 +-0.240697693824768049752904630623 0.487700572609901406018195757497 0.778917378187179543225227007497 +-0.24061350524425506591796875 -0.0995932482182979583740234375 -0.7033394873142242431640625 +-0.24061350524425506591796875 0.0995932482182979583740234375 -0.7033394873142242431640625 +-0.2402966916561126708984375 -0.174585002660751331671207253748 -0.0421607986092567416092080634371 +-0.2402966916561126708984375 0.174585002660751331671207253748 -0.0421607986092567416092080634371 +-0.240281242132186906301782869377 -0.389931309223175093237045985006 -0.304497054219245943951221988755 +-0.240281242132186906301782869377 0.389931309223175093237045985006 -0.304497054219245943951221988755 +-0.240258407592773448602230246252 -0.7394440174102783203125 -0.188411998748779313528345369377 +-0.240258407592773448602230246252 0.7394440174102783203125 -0.188411998748779313528345369377 +-0.24024175107479095458984375 -0.0596684999763965606689453125 0.0349802486598491668701171875 +-0.24024175107479095458984375 0.0596684999763965606689453125 0.0349802486598491668701171875 +-0.240209197998046880551115123126 -0.242728805541992193051115123126 -0.208283996582031255551115123126 +-0.240209197998046880551115123126 0.242728805541992193051115123126 -0.208283996582031255551115123126 +-0.240198408067226421014339621252 -0.46233071386814117431640625 -0.38865776360034942626953125 +-0.240198408067226421014339621252 0.46233071386814117431640625 -0.38865776360034942626953125 +-0.240123090147972090280248380623 -0.289986902475357022357371761245 0.590125906467437677527243522491 +-0.240123090147972090280248380623 0.289986902475357022357371761245 0.590125906467437677527243522491 +-0.240072602033615106753572376874 -0.101735097169876095857254938437 0.148374903202056873663394753748 +-0.240072602033615106753572376874 0.101735097169876095857254938437 0.148374903202056873663394753748 +-0.2400034964084625244140625 -0.068425752222537994384765625 -0.0147040002048015594482421875 +-0.2400034964084625244140625 0.068425752222537994384765625 -0.0147040002048015594482421875 +-0.23999150097370147705078125 0 0.070029251277446746826171875 +-0.239964294433593738897769753748 -0.0538778990507125868369975307814 0.171797400712966924496427623126 +-0.239964294433593738897769753748 0.0538778990507125868369975307814 0.171797400712966924496427623126 +-0.239875960350036609991519753748 -0.738251340389251664575454014994 0.346329958736896481585887386245 +-0.239875960350036609991519753748 0.738251340389251664575454014994 0.346329958736896481585887386245 +-0.239836001396179221423210492503 -0.567172002792358465050881477509 -0.510680818557739280016960492503 +-0.239836001396179221423210492503 0.567172002792358465050881477509 -0.510680818557739280016960492503 +-0.23981325328350067138671875 -0.040155000984668731689453125 -0.0581137500703334808349609375 +-0.23981325328350067138671875 0.040155000984668731689453125 -0.0581137500703334808349609375 +-0.239796897768974281994758257497 -0.6458773910999298095703125 -0.123853802680969224403462192186 +-0.239796897768974281994758257497 0.6458773910999298095703125 -0.123853802680969224403462192186 +-0.23975999653339385986328125 -0.100183002650737762451171875 -0.427174985408782958984375 +-0.23975999653339385986328125 0.100183002650737762451171875 -0.427174985408782958984375 +-0.2397422492504119873046875 -0.068672500550746917724609375 0.01754424907267093658447265625 +-0.2397422492504119873046875 0.068672500550746917724609375 0.01754424907267093658447265625 +-0.239676809310913091488615123126 -0.108248794078826912623547684689 0.301392006874084517065170985006 +-0.239676809310913091488615123126 0.108248794078826912623547684689 0.301392006874084517065170985006 +-0.239642703533172629626335492503 -0.146033807098865514584318248126 -0.473017612099647544177116742503 +-0.239642703533172629626335492503 0.146033807098865514584318248126 -0.473017612099647544177116742503 +-0.23959900438785552978515625 -0.3101179897785186767578125 -0.3105140030384063720703125 +-0.23959900438785552978515625 0.3101179897785186767578125 -0.3105140030384063720703125 +-0.239553907513618463687166126874 -0.737284487485885597912727007497 -0.457192826271057117804019753748 +-0.239553907513618463687166126874 0.737284487485885597912727007497 -0.457192826271057117804019753748 +-0.239530202746391279733373380623 -0.138834504783153511731086382497 -0.6429233849048614501953125 +-0.239530202746391279733373380623 0.138834504783153511731086382497 -0.6429233849048614501953125 +-0.239297099411487579345703125 -0.0345746012404561028907856723436 0.814887350797653176037727007497 +-0.239297099411487579345703125 0.0345746012404561028907856723436 0.814887350797653176037727007497 +-0.23928439617156982421875 -0.26264679431915283203125 -0.183738005161285411492855246252 +-0.23928439617156982421875 0.26264679431915283203125 -0.183738005161285411492855246252 +-0.23926000297069549560546875 -0.05029650032520294189453125 0.0522004999220371246337890625 +-0.23926000297069549560546875 0.05029650032520294189453125 0.0522004999220371246337890625 +-0.2392520010471343994140625 -0.3361569941043853759765625 0.282413005828857421875 +-0.2392520010471343994140625 0.3361569941043853759765625 0.282413005828857421875 +-0.239231407642364501953125 -0.158738994598388666323884876874 0.0870068997144699124435263115629 +-0.239231407642364501953125 0.158738994598388666323884876874 0.0870068997144699124435263115629 +-0.23919300734996795654296875 -0.02037500031292438507080078125 0.06979624927043914794921875 +-0.23919300734996795654296875 0.02037500031292438507080078125 0.06979624927043914794921875 +-0.239169700443744664974943248126 -0.1283925473690032958984375 0.478344351053237970550213731258 +-0.239169700443744664974943248126 0.1283925473690032958984375 0.478344351053237970550213731258 +-0.23908554017543792724609375 -0.125939601659774774722322376874 -0.910756450891494706567641514994 +-0.23908554017543792724609375 0.125939601659774774722322376874 -0.910756450891494706567641514994 +-0.239081400632858265264957253748 -0.272391003370285045281917746252 0.478166985511779774054019753748 +-0.239081400632858265264957253748 0.272391003370285045281917746252 0.478166985511779774054019753748 +-0.23903925716876983642578125 -0.01016050018370151519775390625 -0.07250525057315826416015625 +-0.23903925716876983642578125 0.01016050018370151519775390625 -0.07250525057315826416015625 +-0.238877606391906749383480246252 -0.173552799224853532278345369377 0.269846010208129871710269753748 +-0.238877606391906749383480246252 0.173552799224853532278345369377 0.269846010208129871710269753748 +-0.238855487108230596371427623126 -0.34756560623645782470703125 -0.7950762212276458740234375 +-0.238855487108230596371427623126 0.34756560623645782470703125 -0.7950762212276458740234375 +-0.23882199823856353759765625 -0.73500502109527587890625 0.63461101055145263671875 +-0.23882199823856353759765625 0.73500502109527587890625 0.63461101055145263671875 +-0.238804990053176874331697376874 -0.434164518117904629779246761245 -0.494442182779312122686832253748 +-0.238804990053176874331697376874 0.434164518117904629779246761245 -0.494442182779312122686832253748 +-0.238760200142860395944310880623 -0.641263717412948519580595529987 0.147562800347805000988898882497 +-0.238760200142860395944310880623 0.641263717412948519580595529987 0.147562800347805000988898882497 +-0.238674598932266252004907869377 -0.853039777278900124279914507497 -0.15924060344696044921875 +-0.238674598932266252004907869377 0.853039777278900124279914507497 -0.15924060344696044921875 +-0.238674104213714571853799384371 -0.155561345815658558233707253748 -0.203310790657997120245426003748 +-0.238674104213714571853799384371 0.155561345815658558233707253748 -0.203310790657997120245426003748 +-0.23857605457305908203125 -0.150361646711826335565120871252 -0.350674661993980396612613503748 +-0.23857605457305908203125 0.150361646711826335565120871252 -0.350674661993980396612613503748 +-0.238574343919754017218082253748 -0.242822647094726534744424384371 0.0813599489629268646240234375 +-0.238574343919754017218082253748 0.242822647094726534744424384371 0.0813599489629268646240234375 +-0.238524651527404762951789507497 -0.226393303275108315197883257497 -0.119800096750259391087389815311 +-0.238524651527404762951789507497 0.226393303275108315197883257497 -0.119800096750259391087389815311 +-0.238434004783630387747095369377 -0.132936000823974609375 -0.29236519336700439453125 +-0.238434004783630387747095369377 0.132936000823974609375 -0.29236519336700439453125 +-0.238367396593093860968082253748 -0.0967568993568420354645098768742 -0.1543343961238861083984375 +-0.238367396593093860968082253748 0.0967568993568420354645098768742 -0.1543343961238861083984375 +-0.2382515966892242431640625 -0.133607697486877424752904630623 0.12403710186481475830078125 +-0.2382515966892242431640625 0.133607697486877424752904630623 0.12403710186481475830078125 +-0.238244009017944347039730246252 -0.0532527983188629192023988423443 -0.761842393875122092516960492503 +-0.238244009017944347039730246252 0.0532527983188629192023988423443 -0.761842393875122092516960492503 +-0.238209289312362682000667746252 -0.352252337336540211065738503748 0.147222898900508880615234375 +-0.238209289312362682000667746252 0.352252337336540211065738503748 0.147222898900508880615234375 +-0.238203006982803333624332253748 -0.115710352361202237214676813437 0.228846108913421608654914507497 +-0.238203006982803333624332253748 0.115710352361202237214676813437 0.228846108913421608654914507497 +-0.238097557425498956851228626874 -0.859595161676406815942641514994 0.326966260373592387811214621252 +-0.238097557425498956851228626874 0.859595161676406815942641514994 0.326966260373592387811214621252 +-0.238087843358516709768579744377 -0.562203863263130210192741742503 -0.22302670776844024658203125 +-0.238087843358516709768579744377 0.562203863263130210192741742503 -0.22302670776844024658203125 +-0.238046738505363453253238503748 -0.103011497110128399934403375937 0.8094584047794342041015625 +-0.238046738505363453253238503748 0.103011497110128399934403375937 0.8094584047794342041015625 +-0.238045501708984363897769753748 -0.454609411954879749639957253748 0.476093089580535866467414507497 +-0.238045501708984363897769753748 0.454609411954879749639957253748 0.476093089580535866467414507497 +-0.237946805357933027780248380623 0 0.256673556566238414422542746252 +-0.237863588333129899465845369377 -0.237955999374389659539730246252 0.216328406333923362048210492503 +-0.237863588333129899465845369377 0.237955999374389659539730246252 0.216328406333923362048210492503 +-0.23776449263095855712890625 -0.0772532522678375244140625 0 +-0.23776449263095855712890625 0.0772532522678375244140625 0 +-0.237723299860954279116853626874 -0.257011654973030079229801003748 -0.28272373974323272705078125 +-0.237723299860954279116853626874 0.257011654973030079229801003748 -0.28272373974323272705078125 +-0.237590101361274730340511496252 -0.611073893308639592980568977509 0.616554880142211936266960492503 +-0.237590101361274730340511496252 0.611073893308639592980568977509 0.616554880142211936266960492503 +-0.2374482452869415283203125 -0.030285499989986419677734375 -0.0721189975738525390625 +-0.2374482452869415283203125 0.030285499989986419677734375 -0.0721189975738525390625 +-0.237385398149490334240852007497 0 -0.658520120382308893347556022491 +-0.23731839656829833984375 -0.730384778976440496300881477509 0.224094390869140625 +-0.23731839656829833984375 0.730384778976440496300881477509 0.224094390869140625 +-0.237198597192764260022102007497 -0.0394964978098869337608256557814 -0.179379308223724359683259876874 +-0.237198597192764260022102007497 0.0394964978098869337608256557814 -0.179379308223724359683259876874 +-0.2371717393398284912109375 -0.5303257405757904052734375 0.47434575855731964111328125 +-0.2371717393398284912109375 0.5303257405757904052734375 0.47434575855731964111328125 +-0.237155440449714649542301003748 -0.0285250004380941356296741417964 0.25581954419612884521484375 +-0.237155440449714649542301003748 0.0285250004380941356296741417964 0.25581954419612884521484375 +-0.237116596102714516369758257497 -0.275893101096153225970653011245 -0.598045688867568925317641514994 +-0.237116596102714516369758257497 0.275893101096153225970653011245 -0.598045688867568925317641514994 +-0.237115806341171242443977007497 -0.344672405719757046771434261245 -0.430089604854583751336605246252 +-0.237115806341171242443977007497 0.344672405719757046771434261245 -0.430089604854583751336605246252 +-0.237101200222969044073551003748 0 0.658622300624847389904914507497 +-0.236863994598388694079460492503 -0.280923199653625499383480246252 -0.158042800426483165399105246252 +-0.236863994598388694079460492503 0.280923199653625499383480246252 -0.158042800426483165399105246252 +-0.23680324852466583251953125 -0.04061450064182281494140625 0.069099001586437225341796875 +-0.23680324852466583251953125 0.04061450064182281494140625 0.069099001586437225341796875 +-0.236582100391387939453125 -0.728110796213150002209602007497 0.47316420078277587890625 +-0.236582100391387939453125 0.728110796213150002209602007497 0.47316420078277587890625 +-0.236578506231307994500667746252 0 -0.382793390750885031970085492503 +-0.236507248878478987252904630623 -0.257177552580833412854133257497 0.0205897999927401528785786410936 +-0.236507248878478987252904630623 0.257177552580833412854133257497 0.0205897999927401528785786410936 +-0.236506593227386485711605246252 -0.255315501987934123651058371252 -0.425885903835296675268295985006 +-0.236506593227386485711605246252 0.255315501987934123651058371252 -0.425885903835296675268295985006 +-0.236422905325889581851228626874 -0.200217491388320900647102007497 0.162840999662876129150390625 +-0.236422905325889581851228626874 0.200217491388320900647102007497 0.162840999662876129150390625 +-0.236319306492805469854801003748 -0.0567979976534843389313067518742 0.656450188159942604748664507497 +-0.236319306492805469854801003748 0.0567979976534843389313067518742 0.656450188159942604748664507497 +-0.23627899587154388427734375 -0.066844500601291656494140625 -0.0469477511942386627197265625 +-0.23627899587154388427734375 0.066844500601291656494140625 -0.0469477511942386627197265625 +-0.23627300560474395751953125 -0.51120102405548095703125 -0.82634699344635009765625 +-0.23627300560474395751953125 0.51120102405548095703125 -0.82634699344635009765625 +-0.236271607875823991262720369377 -0.847455310821533247533920985006 0.189723600447177898065120871252 +-0.236271607875823991262720369377 0.847455310821533247533920985006 0.189723600447177898065120871252 +-0.236265304684638993704126619377 -0.355549952387809786724659488755 -0.142347595095634466000333873126 +-0.236265304684638993704126619377 0.355549952387809786724659488755 -0.142347595095634466000333873126 +-0.236183094978332508429019753748 -0.0741962984204292269607705634371 0.169447195529937727487279630623 +-0.236183094978332508429019753748 0.0741962984204292269607705634371 0.169447195529937727487279630623 +-0.236131194233894364797876619377 -0.245296356081962596551448996252 0.294230711460113536492855246252 +-0.236131194233894364797876619377 0.245296356081962596551448996252 0.294230711460113536492855246252 +-0.236093643307685868704126619377 -0.0432926021516323103477397182814 -0.604057365655899070056022992503 +-0.236093643307685868704126619377 0.0432926021516323103477397182814 -0.604057365655899070056022992503 +-0.236047804355621337890625 -0.0244044005870819070980193288278 0.551077187061309814453125 +-0.236047804355621337890625 0.0244044005870819070980193288278 0.551077187061309814453125 +-0.236044204235076882092414507497 -0.257253509759902965203792746252 -0.0245692998170852633377236884371 +-0.236044204235076882092414507497 0.257253509759902965203792746252 -0.0245692998170852633377236884371 +-0.2359440028667449951171875 -0.17142100632190704345703125 0.40613448619842529296875 +-0.2359440028667449951171875 0.17142100632190704345703125 0.40613448619842529296875 +-0.235926009714603424072265625 -0.24414525926113128662109375 -0.6687540113925933837890625 +-0.235926009714603424072265625 0.24414525926113128662109375 -0.6687540113925933837890625 +-0.235878592729568459240852007497 -0.171374398469924915655582253748 0.0706544995307922391036825615629 +-0.235878592729568459240852007497 0.171374398469924915655582253748 0.0706544995307922391036825615629 +-0.2358777523040771484375 -0.076302252709865570068359375 -0.0322427488863468170166015625 +-0.2358777523040771484375 0.076302252709865570068359375 -0.0322427488863468170166015625 +-0.235777947306633012258814119377 -0.378079649806022655145198996252 0.0629644475877284975906533759371 +-0.235777947306633012258814119377 0.378079649806022655145198996252 0.0629644475877284975906533759371 +-0.235686397552490239926115123126 -0.0532280027866363567023988423443 -0.318776798248291026727230246252 +-0.235686397552490239926115123126 0.0532280027866363567023988423443 -0.318776798248291026727230246252 +-0.23567925393581390380859375 -0.076913751661777496337890625 0.0322427488863468170166015625 +-0.23567925393581390380859375 0.076913751661777496337890625 0.0322427488863468170166015625 +-0.235679197311401383840845369377 -0.297397208213806163445980246252 0.1265316009521484375 +-0.235679197311401383840845369377 0.297397208213806163445980246252 0.1265316009521484375 +-0.235673999786376958676115123126 -0.225803995132446311266960492503 -0.231236791610717778988615123126 +-0.235673999786376958676115123126 0.225803995132446311266960492503 -0.231236791610717778988615123126 +-0.235580992698669416940404630623 -0.470304000377655018194644753748 -0.288643795251846302374332253748 +-0.235580992698669416940404630623 0.470304000377655018194644753748 -0.288643795251846302374332253748 +-0.23557050526142120361328125 -0.379759946465492270739616742503 -0.0528074987232685089111328125 +-0.23557050526142120361328125 0.379759946465492270739616742503 -0.0528074987232685089111328125 +-0.23550374805927276611328125 -0.057224251329898834228515625 -0.0613462515175342559814453125 +-0.23550374805927276611328125 0.057224251329898834228515625 -0.0613462515175342559814453125 +-0.23549520969390869140625 -0.2113192081451416015625 -0.7347695827484130859375 +-0.23549520969390869140625 0.2113192081451416015625 -0.7347695827484130859375 +-0.2354744970798492431640625 -0.067655749619007110595703125 0.0497434996068477630615234375 +-0.2354744970798492431640625 0.067655749619007110595703125 0.0497434996068477630615234375 +-0.2353971004486083984375 -0.140528100728988636358707253748 -0.121819800138473502415514815311 +-0.2353971004486083984375 0.140528100728988636358707253748 -0.121819800138473502415514815311 +-0.235171946883201615774439119377 -0.38205634057521820068359375 0.47034780681133270263671875 +-0.235171946883201615774439119377 0.38205634057521820068359375 0.47034780681133270263671875 +-0.235169990360736852474943248126 -0.170860956609249131643579744377 -0.581378868222236611096320757497 +-0.235169990360736852474943248126 0.170860956609249131643579744377 -0.581378868222236611096320757497 +-0.235124561190605180227564119377 -0.38368798792362213134765625 0 +-0.235124561190605180227564119377 0.38368798792362213134765625 0 +-0.235114407539367686883480246252 -0.323606801033020030633480246252 0 +-0.235114407539367686883480246252 0.323606801033020030633480246252 0 +-0.235091452300548564569027121252 -0.0366899482905864715576171875 -0.495868462324142500463608485006 +-0.235091452300548564569027121252 0.0366899482905864715576171875 -0.495868462324142500463608485006 +-0.235010656714439380987613503748 -0.135164746642112726382478626874 -0.221360644698142983166633257497 +-0.235010656714439380987613503748 0.135164746642112726382478626874 -0.221360644698142983166633257497 +-0.234933006763458240850894753748 -0.455188214778900146484375 0.312426602840423561779914507497 +-0.234933006763458240850894753748 0.455188214778900146484375 0.312426602840423561779914507497 +-0.234931504726409889904914507497 -0.155390399694442737921207253748 -0.103252199292182919587723688437 +-0.234931504726409889904914507497 0.155390399694442737921207253748 -0.103252199292182919587723688437 +-0.234927257895469671078458873126 -0.723043999075889565197883257497 -0.380132742226123809814453125 +-0.234927257895469671078458873126 0.723043999075889565197883257497 -0.380132742226123809814453125 +-0.234915304183959949835269753748 0 -0.186587405204772932565404630623 +-0.234911102056503284796207253748 -0.185755205154418928659154630623 0.0176598004996776566932759067186 +-0.234911102056503284796207253748 0.185755205154418928659154630623 0.0176598004996776566932759067186 +-0.234786999225616438424779630623 -0.240866494178771956002904630623 -0.0967386022210121043762853787484 +-0.234786999225616438424779630623 0.240866494178771956002904630623 -0.0967386022210121043762853787484 +-0.234785956144332869088842130623 -0.0568599514663219382515357835928 0.253263849020004261358707253748 +-0.234785956144332869088842130623 0.0568599514663219382515357835928 0.253263849020004261358707253748 +-0.234719803929328896252570757497 -0.573443490266799860144431022491 -0.32568199932575225830078125 +-0.234719803929328896252570757497 0.573443490266799860144431022491 -0.32568199932575225830078125 +-0.23471949994564056396484375 0 -0.086062252521514892578125 +-0.234688496589660622326789507497 -0.0787977039813995278061398153113 -0.169446891546249395199552623126 +-0.234688496589660622326789507497 0.0787977039813995278061398153113 -0.169446891546249395199552623126 +-0.234652496874332427978515625 -0.56203798949718475341796875 -0.437666237354278564453125 +-0.234652496874332427978515625 0.56203798949718475341796875 -0.437666237354278564453125 +-0.2346155941486358642578125 -0.185771995782852167300447376874 -0.02107889950275421142578125 +-0.2346155941486358642578125 0.185771995782852167300447376874 -0.02107889950275421142578125 +-0.23450000584125518798828125 -0.010312500409781932830810546875 0.08604325354099273681640625 +-0.23450000584125518798828125 0.010312500409781932830810546875 0.08604325354099273681640625 +-0.234459909796714799368189119377 -0.060084901750087738037109375 -0.379365742206573486328125 +-0.234459909796714799368189119377 0.060084901750087738037109375 -0.379365742206573486328125 +-0.2343872487545013427734375 -0.085711002349853515625 0.0147040002048015594482421875 +-0.2343872487545013427734375 0.085711002349853515625 0.0147040002048015594482421875 +-0.234361803531646706311164507497 -0.07144559919834136962890625 0.547694993019103959497329014994 +-0.234361803531646706311164507497 0.07144559919834136962890625 0.547694993019103959497329014994 +-0.23432074487209320068359375 -0.085357747972011566162109375 -0.01754424907267093658447265625 +-0.23432074487209320068359375 0.085357747972011566162109375 -0.01754424907267093658447265625 +-0.234276247024536143914730246252 -0.2995707094669342041015625 -0.527135697007179326867287727509 +-0.234276247024536143914730246252 0.2995707094669342041015625 -0.527135697007179326867287727509 +-0.234143000841140730416967130623 -0.216185209155082685983373380623 0.144709952175617218017578125 +-0.234143000841140730416967130623 0.216185209155082685983373380623 0.144709952175617218017578125 +-0.23409824073314666748046875 -0.62035726010799407958984375 0.350507251918315887451171875 +-0.23409824073314666748046875 0.62035726010799407958984375 0.350507251918315887451171875 +-0.234068796038627596756143134371 -0.0233114011585712418983540317186 -0.259168690443038918225227007497 +-0.234068796038627596756143134371 0.0233114011585712418983540317186 -0.259168690443038918225227007497 +-0.234012906253337871209652121252 -0.367124453186988886077557481258 -0.336091798543930064813167746252 +-0.234012906253337871209652121252 0.367124453186988886077557481258 -0.336091798543930064813167746252 +-0.233961692452430702893195757497 -0.0694176018238067543686398153113 -0.250884559750556956903011496252 +-0.233961692452430702893195757497 0.0694176018238067543686398153113 -0.250884559750556956903011496252 +-0.233952999114990234375 -0.3346860110759735107421875 0.912826001644134521484375 +-0.233952999114990234375 0.3346860110759735107421875 0.912826001644134521484375 +-0.23394675552845001220703125 -0.020271249115467071533203125 -0.08577899634838104248046875 +-0.23394675552845001220703125 0.020271249115467071533203125 -0.08577899634838104248046875 +-0.233927655220031754934595369377 -0.169956056773662572689786998126 0.467859703302383467260483485006 +-0.233927655220031754934595369377 0.169956056773662572689786998126 0.467859703302383467260483485006 +-0.233883294463157642706363503748 -0.627759987115859896533720529987 -0.203016099333763105905248380623 +-0.233883294463157642706363503748 0.627759987115859896533720529987 -0.203016099333763105905248380623 +-0.23378099501132965087890625 -0.058113001286983489990234375 0.06685300171375274658203125 +-0.23378099501132965087890625 0.058113001286983489990234375 0.06685300171375274658203125 +-0.233719748258590709344417746252 -0.456946063041687056127670985006 -0.197674395143985770495476117503 +-0.233719748258590709344417746252 0.456946063041687056127670985006 -0.197674395143985770495476117503 +-0.233711402118206013067691628748 -0.309629705548286449090511496252 -0.867184701561927728796774772491 +-0.233711402118206013067691628748 0.309629705548286449090511496252 -0.867184701561927728796774772491 +-0.2336719930171966552734375 -0.85263597965240478515625 0.4673430025577545166015625 +-0.2336719930171966552734375 0.85263597965240478515625 0.4673430025577545166015625 +-0.233654208481311798095703125 -0.546113112568855307848991742503 0.263943558931350741314503238755 +-0.233654208481311798095703125 0.546113112568855307848991742503 0.263943558931350741314503238755 +-0.23364050686359405517578125 -0.408760011196136474609375 0.16830749809741973876953125 +-0.23364050686359405517578125 0.408760011196136474609375 0.16830749809741973876953125 +-0.233567190170288097039730246252 -0.320601201057434115337940738755 0.0515887975692749037315287807814 +-0.233567190170288097039730246252 0.320601201057434115337940738755 0.0515887975692749037315287807814 +-0.233514600992202753237947376874 -0.121004703640937794073551003748 0.144321897625923151187166126874 +-0.233514600992202753237947376874 0.121004703640937794073551003748 0.144321897625923151187166126874 +-0.23349775373935699462890625 -0.046857498586177825927734375 -0.076047249138355255126953125 +-0.23349775373935699462890625 0.046857498586177825927734375 -0.076047249138355255126953125 +-0.23344600200653076171875 -0.97237002849578857421875 0 +-0.23344600200653076171875 0.97237002849578857421875 0 +-0.23343800008296966552734375 -0.4151790142059326171875 -0.152095496654510498046875 +-0.23343800008296966552734375 0.4151790142059326171875 -0.152095496654510498046875 +-0.233371600508689852615518134371 -0.169552247226238239630191628748 0.198216548562049843518195757497 +-0.233371600508689852615518134371 0.169552247226238239630191628748 0.198216548562049843518195757497 +-0.233320456743240367547542746252 -0.304351302981376692358139735006 0.394248804450035128521534488755 +-0.233320456743240367547542746252 0.304351302981376692358139735006 0.394248804450035128521534488755 +-0.233314800262451188528345369377 0 -0.324906396865844770971420985006 +-0.233200909197330469302400501874 -0.169427955895662313290372935626 0.79963238537311553955078125 +-0.233200909197330469302400501874 0.169427955895662313290372935626 0.79963238537311553955078125 +-0.233100003004074074475227007497 -0.111727002263069141729801003748 0.650523984432220370166533029987 +-0.233100003004074074475227007497 0.111727002263069141729801003748 0.650523984432220370166533029987 +-0.232988995313644392526342130623 -0.169275605678558344058259876874 -0.084035396575927734375 +-0.232988995313644392526342130623 0.169275605678558344058259876874 -0.084035396575927734375 +-0.2329229414463043212890625 -0.169228200614452345407201505623 -0.799755650758743219519431022491 +-0.2329229414463043212890625 0.169228200614452345407201505623 -0.799755650758743219519431022491 +-0.232886493206024169921875 -0.03068199940025806427001953125 0.0855714976787567138671875 +-0.232886493206024169921875 0.03068199940025806427001953125 0.0855714976787567138671875 +-0.23282800614833831787109375 0 -0.442483007907867431640625 +-0.232782003283500682488948996252 -0.446691286563873302117855246252 0.220860742032527951339559990629 +-0.232782003283500682488948996252 0.446691286563873302117855246252 0.220860742032527951339559990629 +-0.232733988761901877673210492503 -0.321206402778625499383480246252 -0.0515887975692749037315287807814 +-0.232733988761901877673210492503 0.321206402778625499383480246252 -0.0515887975692749037315287807814 +-0.232709401845932001284822376874 -0.128139603137969959600894753748 -0.139379400014877308233707253748 +-0.232709401845932001284822376874 0.128139603137969959600894753748 -0.139379400014877308233707253748 +-0.232649993896484386102230246252 -0.201681208610534679070980246252 0.255340003967285178454460492503 +-0.232649993896484386102230246252 0.201681208610534679070980246252 0.255340003967285178454460492503 +-0.232565706223249429873689564374 -0.840715789794921786182158029987 -0.376311151683330513684211382497 +-0.232565706223249429873689564374 0.840715789794921786182158029987 -0.376311151683330513684211382497 +-0.23251600563526153564453125 -0.58194601535797119140625 0.7792789936065673828125 +-0.23251600563526153564453125 0.58194601535797119140625 0.7792789936065673828125 +-0.232357597351074224301115123126 -0.29813480377197265625 -0.130864799022674560546875 +-0.232357597351074224301115123126 0.29813480377197265625 -0.130864799022674560546875 +-0.232355189323425304070980246252 -0.6083199977874755859375 0.464711999893188509869190738755 +-0.232355189323425304070980246252 0.6083199977874755859375 0.464711999893188509869190738755 +-0.23233149945735931396484375 -0.2918424904346466064453125 0.3329415023326873779296875 +-0.23233149945735931396484375 0.2918424904346466064453125 0.3329415023326873779296875 +-0.232298398017883295230134876874 -0.199403393268585193975894753748 -0.516019213199615411902243522491 +-0.232298398017883295230134876874 0.199403393268585193975894753748 -0.516019213199615411902243522491 +-0.232287293672561651058927623126 -0.168764403462409978695646373126 0.346498194336891163214176003748 +-0.232287293672561651058927623126 0.168764403462409978695646373126 0.346498194336891163214176003748 +-0.232276089489459991455078125 0 -0.817648130655288629675681022491 +-0.2321974933147430419921875 -0.2872270047664642333984375 -0.3370240032672882080078125 +-0.2321974933147430419921875 0.2872270047664642333984375 -0.3370240032672882080078125 +-0.232100796699523936883480246252 -0.714340782165527432567841970013 -0.275401592254638671875 +-0.232100796699523936883480246252 0.714340782165527432567841970013 -0.275401592254638671875 +-0.232076811790466325247095369377 -0.135681200027465836965845369377 0.296194005012512195929019753748 +-0.232076811790466325247095369377 0.135681200027465836965845369377 0.296194005012512195929019753748 +-0.231989455223083479440404630623 -0.254784953594207774774105246252 0.0613630481064319568962339701557 +-0.231989455223083479440404630623 0.254784953594207774774105246252 0.0613630481064319568962339701557 +-0.231849896907806385382144753748 0 0.190382999181747419870092130623 +-0.23176275193691253662109375 -0.71329200267791748046875 0 +-0.23176275193691253662109375 0.71329200267791748046875 0 +-0.231657393276691436767578125 -0.221928846836090098992855246252 0.5653160512447357177734375 +-0.231657393276691436767578125 0.221928846836090098992855246252 0.5653160512447357177734375 +-0.231598198413848876953125 -0.0799530029296875027755575615629 -0.547694993019103959497329014994 +-0.231598198413848876953125 0.0799530029296875027755575615629 -0.547694993019103959497329014994 +-0.231577447056770330258146373126 -0.43387435376644134521484375 -0.425000536441802967413394753748 +-0.231577447056770330258146373126 0.43387435376644134521484375 -0.425000536441802967413394753748 +-0.231499493122100830078125 -0.183276897668838506527677623126 0.05308020114898681640625 +-0.231499493122100830078125 0.183276897668838506527677623126 0.05308020114898681640625 +-0.231474749743938446044921875 -0.38944052159786224365234375 -0.5977087318897247314453125 +-0.231474749743938446044921875 0.38944052159786224365234375 -0.5977087318897247314453125 +-0.2314589917659759521484375 -0.41430898010730743408203125 0.580753505229949951171875 +-0.2314589917659759521484375 0.41430898010730743408203125 0.580753505229949951171875 +-0.231130805611610423699886496252 -0.829727089405059792248664507497 -0.261020699143409751208366742503 +-0.231130805611610423699886496252 0.829727089405059792248664507497 -0.261020699143409751208366742503 +-0.231064492464065546206697376874 -0.0246722996234893798828125 0.189737999439239496402009876874 +-0.231064492464065546206697376874 0.0246722996234893798828125 0.189737999439239496402009876874 +-0.231048595905303938424779630623 -0.09503160417079925537109375 0.166088998317718505859375 +-0.231048595905303938424779630623 0.09503160417079925537109375 0.166088998317718505859375 +-0.231009006500244140625 -0.118362602591514584626786188437 0.540948593616485617907585492503 +-0.231009006500244140625 0.118362602591514584626786188437 0.540948593616485617907585492503 +-0.23097024857997894287109375 -0.09566999971866607666015625 0 +-0.23097024857997894287109375 0.09566999971866607666015625 0 +-0.230955457687377935238615123126 -0.497661438584327764367287727509 0.03863749839365482330322265625 +-0.230955457687377935238615123126 0.497661438584327764367287727509 0.03863749839365482330322265625 +-0.230741700530052162854133257497 -0.139070397615432717053352007497 0.223422503471374489514289507497 +-0.230741700530052162854133257497 0.139070397615432717053352007497 0.223422503471374489514289507497 +-0.230740945041179673635767244377 -0.498207595944404668664162727509 -0.0323724510148167624046244839064 +-0.230740945041179673635767244377 0.498207595944404668664162727509 -0.0323724510148167624046244839064 +-0.230738854408264165707365123126 -0.312198749184608492779346988755 0.227577146887779246942073996252 +-0.230738854408264165707365123126 0.312198749184608492779346988755 0.227577146887779246942073996252 +-0.23065830767154693603515625 -0.235848140716552745477230246252 -0.306059843301773104595753238755 +-0.23065830767154693603515625 0.235848140716552745477230246252 -0.306059843301773104595753238755 +-0.230631051957607274838224498126 -0.477612859010696444439503238755 0.375759786367416415142628238755 +-0.230631051957607274838224498126 0.477612859010696444439503238755 0.375759786367416415142628238755 +-0.230591893196105929275674384371 -0.231308344006538380011051003748 0.125792796909809101446597878748 +-0.230591893196105929275674384371 0.231308344006538380011051003748 0.125792796909809101446597878748 +-0.23047675192356109619140625 -0.0479442514479160308837890625 0.0841535031795501708984375 +-0.23047675192356109619140625 0.0479442514479160308837890625 0.0841535031795501708984375 +-0.23044450581073760986328125 -0.08480100333690643310546875 0.0469477511942386627197265625 +-0.23044450581073760986328125 0.08480100333690643310546875 0.0469477511942386627197265625 +-0.230392003059387229235710492503 -0.363406395912170443462940738755 -0.674429607391357488488381477509 +-0.230392003059387229235710492503 0.363406395912170443462940738755 -0.674429607391357488488381477509 +-0.23036624491214752197265625 -0.03685300052165985107421875 -0.08985149860382080078125 +-0.23036624491214752197265625 0.03685300052165985107421875 -0.08985149860382080078125 +-0.230365106463432306460603626874 -0.615539413690566972192641514994 0.240921798348426807745426003748 +-0.230365106463432306460603626874 0.615539413690566972192641514994 0.240921798348426807745426003748 +-0.23027074337005615234375 -0.08367200195789337158203125 -0.0497434996068477630615234375 +-0.23027074337005615234375 0.08367200195789337158203125 -0.0497434996068477630615234375 +-0.230147995054721832275390625 -0.708324730396270751953125 -0.0883642472326755523681640625 +-0.230147995054721832275390625 0.708324730396270751953125 -0.0883642472326755523681640625 +-0.230081596970558160952791126874 -0.0813578523695468874832315009371 0.2508852481842041015625 +-0.230081596970558160952791126874 0.0813578523695468874832315009371 0.2508852481842041015625 +-0.230073291063308704718082253748 -0.0198125995695590979839284528907 -0.191503804922103865182592130623 +-0.230073291063308704718082253748 0.0198125995695590979839284528907 -0.191503804922103865182592130623 +-0.2299869954586029052734375 -0.074000500142574310302734375 -0.064264498651027679443359375 +-0.2299869954586029052734375 0.074000500142574310302734375 -0.064264498651027679443359375 +-0.22995050251483917236328125 -0.16706849634647369384765625 -0.4113524854183197021484375 +-0.22995050251483917236328125 0.16706849634647369384765625 -0.4113524854183197021484375 +-0.2299455106258392333984375 -0.228905260562896728515625 0.67618574202060699462890625 +-0.2299455106258392333984375 0.228905260562896728515625 0.67618574202060699462890625 +-0.229924196004867548159822376874 -0.547789192199707009045539507497 0.084035396575927734375 +-0.229924196004867548159822376874 0.547789192199707009045539507497 0.084035396575927734375 +-0.229910397529602072985710492503 -0.207701992988586436883480246252 -0.25298440456390380859375 +-0.229910397529602072985710492503 0.207701992988586436883480246252 -0.25298440456390380859375 +-0.229897847771644570080695757497 -0.113934798538684836644030440311 -0.238045856356620760818643134371 +-0.229897847771644570080695757497 0.113934798538684836644030440311 -0.238045856356620760818643134371 +-0.2298932969570159912109375 -0.0595155000686645452301348768742 -0.183321905136108381784154630623 +-0.2298932969570159912109375 0.0595155000686645452301348768742 -0.183321905136108381784154630623 +-0.229891745746135717221036998126 -0.387877056002616904528679242503 0.314962458610534679070980246252 +-0.229891745746135717221036998126 0.387877056002616904528679242503 0.314962458610534679070980246252 +-0.229888498783111572265625 -0.093758501112461090087890625 0.0293374992907047271728515625 +-0.229888498783111572265625 0.093758501112461090087890625 0.0293374992907047271728515625 +-0.229872450977563841378881193123 -0.707486870884895258093649772491 -0.590863910317420915063735264994 +-0.229872450977563841378881193123 0.707486870884895258093649772491 -0.590863910317420915063735264994 +-0.229813796281814558541967130623 -0.549746382236480646277243522491 -0.0704585999250411931793536268742 +-0.229813796281814558541967130623 0.549746382236480646277243522491 -0.0704585999250411931793536268742 +-0.229800903797149652652009876874 -0.151887595653533935546875 0.118835100531578058413728626874 +-0.229800903797149652652009876874 0.151887595653533935546875 0.118835100531578058413728626874 +-0.2297565042972564697265625 -0.182242798805236805304019753748 -0.0632412001490592901031817518742 +-0.2297565042972564697265625 0.182242798805236805304019753748 -0.0632412001490592901031817518742 +-0.229749202728271484375 -0.106206405162811282072432561563 -0.309734797477722201275440738755 +-0.229749202728271484375 0.106206405162811282072432561563 -0.309734797477722201275440738755 +-0.229642805457115156686498380623 -0.377358359098434459344417746252 0.726198336482048012463508257497 +-0.229642805457115156686498380623 0.377358359098434459344417746252 0.726198336482048012463508257497 +-0.229610395431518538034154630623 -0.554327416419982843542868522491 0 +-0.229610395431518538034154630623 0.554327416419982843542868522491 0 +-0.229602092504501337222322376874 -0.253854295611381508557258257497 -0.0730806998908519744873046875 +-0.229602092504501337222322376874 0.253854295611381508557258257497 -0.0730806998908519744873046875 +-0.229597899317741382940738503748 -0.549996984004974320825454014994 0.367135989665985096319644753748 +-0.229597899317741382940738503748 0.549996984004974320825454014994 0.367135989665985096319644753748 +-0.22956025600433349609375 -0.075313746929168701171875 0.064264498651027679443359375 +-0.22956025600433349609375 0.075313746929168701171875 0.064264498651027679443359375 +-0.229522043466567987612947376874 -0.367884439229965221063167746252 0.120335845649242406674161998126 +-0.229522043466567987612947376874 0.367884439229965221063167746252 0.120335845649242406674161998126 +-0.229520010948181168997095369377 -0.495387983322143565789730246252 0.584731197357177712170539507497 +-0.229520010948181168997095369377 0.495387983322143565789730246252 0.584731197357177712170539507497 +-0.22950084507465362548828125 -0.523134192824363686291633257497 -0.629413121938705466540397992503 +-0.22950084507465362548828125 0.523134192824363686291633257497 -0.629413121938705466540397992503 +-0.22946400940418243408203125 -0.7062127590179443359375 0.1054019965231418609619140625 +-0.22946400940418243408203125 0.7062127590179443359375 0.1054019965231418609619140625 +-0.229445149004459392205745871252 -0.490458095073699973376335492503 -0.0964661501348018785018112453145 +-0.229445149004459392205745871252 0.490458095073699973376335492503 -0.0964661501348018785018112453145 +-0.2294324934482574462890625 -0.092936001718044281005859375 -0.0349802486598491668701171875 +-0.2294324934482574462890625 0.092936001718044281005859375 -0.0349802486598491668701171875 +-0.2293255031108856201171875 -0.010160000063478946685791015625 -0.0990284979343414306640625 +-0.2293255031108856201171875 0.010160000063478946685791015625 -0.0990284979343414306640625 +-0.22926299273967742919921875 -0.20779550075531005859375 0.39275848865509033203125 +-0.22926299273967742919921875 0.20779550075531005859375 0.39275848865509033203125 +-0.229232686758041398489282869377 -0.240639290213584905453458873126 0.836387979984283491674545985006 +-0.229232686758041398489282869377 0.240639290213584905453458873126 0.836387979984283491674545985006 +-0.229212892055511485711605246252 -0.705456000566482610558693977509 -0.509699696302413962634147992503 +-0.229212892055511485711605246252 0.705456000566482610558693977509 -0.509699696302413962634147992503 +-0.229209601879119873046875 -0.449630391597747813836605246252 -0.324492609500884987561164507497 +-0.229209601879119873046875 0.449630391597747813836605246252 -0.324492609500884987561164507497 +-0.229128895699977880306974498126 -0.486617454886436484606804242503 0.114907648414373411704936245314 +-0.229128895699977880306974498126 0.486617454886436484606804242503 0.114907648414373411704936245314 +-0.229109010100364690609708873126 -0.817009815573692343981804242503 -0.0500361014157533617874307196871 +-0.229109010100364690609708873126 0.817009815573692343981804242503 -0.0500361014157533617874307196871 +-0.228957760334014909231470369377 -0.371328744292259205206363503748 -0.110424151271581658106946122189 +-0.228957760334014909231470369377 0.371328744292259205206363503748 -0.110424151271581658106946122189 +-0.228927004337310779913394753748 -0.0454638004302978515625 0.188482207059860212838842130623 +-0.228927004337310779913394753748 0.0454638004302978515625 0.188482207059860212838842130623 +-0.228861504793167108706697376874 -0.339641410112380970343082253748 0.567684596776962258068977007497 +-0.228861504793167108706697376874 0.339641410112380970343082253748 0.567684596776962258068977007497 +-0.228855139017105108090177623126 -0.0185840992256999029685893276564 0.387014409899711642193409488755 +-0.228855139017105108090177623126 0.0185840992256999029685893276564 0.387014409899711642193409488755 +-0.228808808326721180304019753748 -0.115083298087120047825671065311 -0.156212693452835088558927623126 +-0.228808808326721180304019753748 0.115083298087120047825671065311 -0.156212693452835088558927623126 +-0.228787207603454584292634876874 -0.313495802879333484991519753748 0.457577383518218971936164507497 +-0.228787207603454584292634876874 0.313495802879333484991519753748 0.457577383518218971936164507497 +-0.2286809980869293212890625 -0.966392993927001953125 -0.11743099987506866455078125 +-0.2286809980869293212890625 0.966392993927001953125 -0.11743099987506866455078125 +-0.228429597616195662057592130623 -0.49626481533050537109375 -0.2480742037296295166015625 +-0.228429597616195662057592130623 0.49626481533050537109375 -0.2480742037296295166015625 +-0.228423306345939630679353626874 -0.165957403182983381784154630623 0.640531516075134255139289507497 +-0.228423306345939630679353626874 0.165957403182983381784154630623 0.640531516075134255139289507497 +-0.22842149436473846435546875 -0.063794247806072235107421875 -0.079081751406192779541015625 +-0.22842149436473846435546875 0.063794247806072235107421875 -0.079081751406192779541015625 +-0.228405211865901930368139005623 -0.816555917263031005859375 0.059723548591136932373046875 +-0.228405211865901930368139005623 0.816555917263031005859375 0.059723548591136932373046875 +-0.22830750048160552978515625 0 0.101861499249935150146484375 +-0.228286409378051780016960492503 -0.530270385742187544408920985006 -0.553804016113281227795539507497 +-0.228286409378051780016960492503 0.530270385742187544408920985006 -0.553804016113281227795539507497 +-0.228217601776123046875 -0.297393608093261707647769753748 0.7067344188690185546875 +-0.228217601776123046875 0.297393608093261707647769753748 0.7067344188690185546875 +-0.228203094005584722347990123126 -0.508057218790054387902443977509 -0.7069661915302276611328125 +-0.228203094005584722347990123126 0.508057218790054387902443977509 -0.7069661915302276611328125 +-0.228122091293334938733039507497 -0.194834107160568231753572376874 0 +-0.228122091293334938733039507497 0.194834107160568231753572376874 0 +-0.228107190132141118832365123126 -0.312080788612365767065170985006 0.102823603153228762541182561563 +-0.228107190132141118832365123126 0.312080788612365767065170985006 0.102823603153228762541182561563 +-0.22810299694538116455078125 -0.70204198360443115234375 -0.67461502552032470703125 +-0.22810299694538116455078125 0.70204198360443115234375 -0.67461502552032470703125 +-0.228029394149780267886384876874 -0.462032121419906627313167746252 0.737921726703643865441506477509 +-0.228029394149780267886384876874 0.462032121419906627313167746252 0.737921726703643865441506477509 +-0.228028053045272821597322376874 -0.119880902767181399259932561563 -0.368960407376289378778011496252 +-0.228028053045272821597322376874 0.119880902767181399259932561563 -0.368960407376289378778011496252 +-0.227979496121406527420205634371 -0.399795198440551724505809261245 -0.527436679601669289318977007497 +-0.227979496121406527420205634371 0.399795198440551724505809261245 -0.527436679601669289318977007497 +-0.22797699272632598876953125 -0.066041998565196990966796875 -0.97142398357391357421875 +-0.22797699272632598876953125 0.066041998565196990966796875 -0.97142398357391357421875 +-0.227964591979980452096654630623 -0.407344186305999722552684261245 0.376964986324310302734375 +-0.227964591979980452096654630623 0.407344186305999722552684261245 0.376964986324310302734375 +-0.227925610542297374383480246252 -0.262510800361633322985710492503 0.197833597660064697265625 +-0.227925610542297374383480246252 0.262510800361633322985710492503 0.197833597660064697265625 +-0.227871000766754150390625 -0.165556508302688587530582253748 0.103275597095489501953125 +-0.227871000766754150390625 0.165556508302688587530582253748 0.103275597095489501953125 +-0.227570387721061723196314119377 -0.0538888514041900648643412807814 0.384457942843437205926448996252 +-0.227570387721061723196314119377 0.0538888514041900648643412807814 0.384457942843437205926448996252 +-0.227533996105194091796875 -0.02056024968624114990234375 0.101516246795654296875 +-0.227533996105194091796875 0.02056024968624114990234375 0.101516246795654296875 +-0.2275049984455108642578125 -0.4396714866161346435546875 0.070216000080108642578125 +-0.2275049984455108642578125 0.4396714866161346435546875 0.070216000080108642578125 +-0.227454006671905517578125 -0.31446361541748046875 -0.457577383518218971936164507497 +-0.227454006671905517578125 0.31446361541748046875 -0.457577383518218971936164507497 +-0.227387595176696793997095369377 0 0.329081988334655795025440738755 +-0.2273389995098114013671875 -0.4414184987545013427734375 -0.0588794983923435211181640625 +-0.2273389995098114013671875 0.4414184987545013427734375 -0.0588794983923435211181640625 +-0.227308899164199801345986884371 -0.550501000881195023950454014994 -0.367803102731704689709602007497 +-0.227308899164199801345986884371 0.550501000881195023950454014994 -0.367803102731704689709602007497 +-0.227307146787643410412727007497 -0.266141751408576932025340511245 0 +-0.227307146787643410412727007497 0.266141751408576932025340511245 0 +-0.227242948114872000964226117503 -0.210472901165485393182308371252 0.454490846395492587017628238755 +-0.227242948114872000964226117503 0.210472901165485393182308371252 0.454490846395492587017628238755 +-0.22701300680637359619140625 -0.065386749804019927978515625 0.08179025352001190185546875 +-0.22701300680637359619140625 0.065386749804019927978515625 0.08179025352001190185546875 +-0.2269954979419708251953125 -0.4455029964447021484375 0 +-0.2269954979419708251953125 0.4455029964447021484375 0 +-0.22691150009632110595703125 -0.103898249566555023193359375 0.014706999994814395904541015625 +-0.22691150009632110595703125 0.103898249566555023193359375 0.014706999994814395904541015625 +-0.226880898326635355166658314374 -0.698254770040512062756477007497 0.602880460023879960473891514994 +-0.226880898326635355166658314374 0.698254770040512062756477007497 0.602880460023879960473891514994 +-0.22686074674129486083984375 -0.103567250072956085205078125 -0.01754949986934661865234375 +-0.22686074674129486083984375 0.103567250072956085205078125 -0.01754949986934661865234375 +-0.226657891273498529605134876874 -0.193148550391197187936498380623 0.183901551365852344854801003748 +-0.226657891273498529605134876874 0.193148550391197187936498380623 0.183901551365852344854801003748 +-0.2266190052032470703125 -0.963860988616943359375 0.140058994293212890625 +-0.2266190052032470703125 -0.3639765083789825439453125 0.2572250068187713623046875 +-0.2266190052032470703125 0.3639765083789825439453125 0.2572250068187713623046875 +-0.2266190052032470703125 0.963860988616943359375 0.140058994293212890625 +-0.226616001129150396176115123126 -0.0329288005828857407997212192186 0.327964806556701682360710492503 +-0.226616001129150396176115123126 0.0329288005828857407997212192186 0.327964806556701682360710492503 +-0.22650839388370513916015625 -0.274914005398750327380241742503 0.274984198808670032843082253748 +-0.22650839388370513916015625 0.274914005398750327380241742503 0.274984198808670032843082253748 +-0.2265020906925201416015625 -0.119311201572418215666182561563 -0.862821900844573996813835492503 +-0.2265020906925201416015625 0.119311201572418215666182561563 -0.862821900844573996813835492503 +-0.226342050731182103939786998126 -0.342258393764495849609375 -0.366235652565956137927116742503 +-0.226342050731182103939786998126 0.342258393764495849609375 -0.366235652565956137927116742503 +-0.226318407058715836965845369377 -0.313380408287048384252670985006 -0.102823603153228762541182561563 +-0.226318407058715836965845369377 0.313380408287048384252670985006 -0.102823603153228762541182561563 +-0.226245357096195226498380748126 -0.696324238181114218981804242503 -0.431793224811553966180355246252 +-0.226245357096195226498380748126 0.696324238181114218981804242503 -0.431793224811553966180355246252 +-0.226076206564903237072883257497 -0.212008649110794061831697376874 -0.162609654664993275030582253748 +-0.226076206564903237072883257497 0.212008649110794061831697376874 -0.162609654664993275030582253748 +-0.2260690033435821533203125 -0.02662325091660022735595703125 -0.10336349904537200927734375 +-0.2260690033435821533203125 0.02662325091660022735595703125 -0.10336349904537200927734375 +-0.226065692305564863717748380623 -0.194157940149307234323217130623 -0.183567306399345375744758257497 +-0.226065692305564863717748380623 0.194157940149307234323217130623 -0.183567306399345375744758257497 +-0.226033204793930048159822376874 -0.1642211973667144775390625 0.530980789661407492907585492503 +-0.226033204793930048159822376874 0.1642211973667144775390625 0.530980789661407492907585492503 +-0.225912308692932106701789507497 -0.194222992658615117855802623126 0.0352292999625205965896768134371 +-0.225912308692932106701789507497 0.194222992658615117855802623126 0.0352292999625205965896768134371 +-0.225906100869178755319310880623 -0.245216643810272194592414507497 0.106466847658157337530582253748 +-0.225906100869178755319310880623 0.245216643810272194592414507497 0.106466847658157337530582253748 +-0.2258951961994171142578125 -0.480899405479431107934829014994 0.278759998083114635125667746252 +-0.2258951961994171142578125 0.480899405479431107934829014994 0.278759998083114635125667746252 +-0.225852754712104808465511496252 -0.201136949658393876516626619377 0.333218255639076255114616742503 +-0.225852754712104808465511496252 0.201136949658393876516626619377 0.333218255639076255114616742503 +-0.225838798284530628546207253748 -0.13969530165195465087890625 0.13957799971103668212890625 +-0.225838798284530628546207253748 0.13969530165195465087890625 0.13957799971103668212890625 +-0.225804305076599098889289507497 -0.0974582970142364446441973768742 -0.171797096729278564453125 +-0.225804305076599098889289507497 0.0974582970142364446441973768742 -0.171797096729278564453125 +-0.22580124437808990478515625 -0.0378867499530315399169921875 0.1003910005092620849609375 +-0.22580124437808990478515625 0.0378867499530315399169921875 0.1003910005092620849609375 +-0.225765609741210959704460492503 -0.694824790954589932567841970013 0.325957608222961436883480246252 +-0.225765609741210959704460492503 0.694824790954589932567841970013 0.325957608222961436883480246252 +-0.2257241904735565185546875 -0.607834500074386663293068977509 0.045670948922634124755859375 +-0.2257241904735565185546875 0.607834500074386663293068977509 0.045670948922634124755859375 +-0.225674092769622802734375 -0.0660338982939720070541866903113 0.186308097839355452096654630623 +-0.225674092769622802734375 0.0660338982939720070541866903113 0.186308097839355452096654630623 +-0.22566640377044677734375 -0.1843512058258056640625 -0.27402400970458984375 +-0.22566640377044677734375 0.1843512058258056640625 -0.27402400970458984375 +-0.2256637513637542724609375 -0.0532552488148212432861328125 -0.093486249446868896484375 +-0.2256637513637542724609375 0.0532552488148212432861328125 -0.093486249446868896484375 +-0.225617846846580510922208873126 -0.315919348597526572497429242503 -0.227577146887779246942073996252 +-0.225617846846580510922208873126 0.315919348597526572497429242503 -0.227577146887779246942073996252 +-0.225585737824439996890291126874 -0.328256405889987945556640625 -0.75090532004833221435546875 +-0.225585737824439996890291126874 0.328256405889987945556640625 -0.75090532004833221435546875 +-0.225585597753524769171207253748 -0.537840592861175470495993522491 -0.140849402546882634945646373126 +-0.225585597753524769171207253748 0.537840592861175470495993522491 -0.140849402546882634945646373126 +-0.225566107034683244192407869377 -0.814353311061859153063835492503 0.309757509827613852770866742503 +-0.225566107034683244192407869377 0.814353311061859153063835492503 0.309757509827613852770866742503 +-0.225490841269493119680689119377 -0.608432498574256963586037727509 -0.0382629010826349286178427178129 +-0.225490841269493119680689119377 0.608432498574256963586037727509 -0.0382629010826349286178427178129 +-0.225476998090744007452457253748 -0.601892906427383356238181022491 -0.277281901240348793713508257497 +-0.225476998090744007452457253748 0.601892906427383356238181022491 -0.277281901240348793713508257497 +-0.225473608076572434866235994377 -0.219782195985317257980184990629 -0.450952166318893454821647992503 +-0.225473608076572434866235994377 0.219782195985317257980184990629 -0.450952166318893454821647992503 +-0.225428998470306396484375 -0.264079988002777099609375 -0.93778598308563232421875 +-0.225428998470306396484375 0.264079988002777099609375 -0.93778598308563232421875 +-0.225414898991584761178685880623 -0.805648678541183493884147992503 -0.150393903255462646484375 +-0.225414898991584761178685880623 0.805648678541183493884147992503 -0.150393903255462646484375 +-0.225339791178703285901008257497 -0.0466392517089843708366636576557 -0.263716942071914650647102007497 +-0.225339791178703285901008257497 0.0466392517089843708366636576557 -0.263716942071914650647102007497 +-0.22524225711822509765625 -0.69322876632213592529296875 -0.1766362488269805908203125 +-0.22524225711822509765625 0.69322876632213592529296875 -0.1766362488269805908203125 +-0.22522079944610595703125 -0.0325408011674881009200888115629 0.766952800750732466283920985006 +-0.22522079944610595703125 0.0325408011674881009200888115629 0.766952800750732466283920985006 +-0.22512330114841461181640625 -0.208894501626491563284204744377 -0.328911298513412497790397992503 +-0.22512330114841461181640625 0.208894501626491563284204744377 -0.328911298513412497790397992503 +-0.225059840083122270071314119377 -0.332496902346611056255909488755 0.203208754956722276174829744377 +-0.225059840083122270071314119377 0.332496902346611056255909488755 0.203208754956722276174829744377 +-0.224998645484447479248046875 -0.0892007969319820459563885606258 0.379366654157638538702457253748 +-0.224998645484447479248046875 0.0892007969319820459563885606258 0.379366654157638538702457253748 +-0.224995589256286626644865123126 -0.0644011974334716824630575615629 0.324390792846679709704460492503 +-0.224995589256286626644865123126 0.0644011974334716824630575615629 0.324390792846679709704460492503 +-0.224964594841003423519865123126 -0.1939727962017059326171875 -0.0420176982879638671875 +-0.224964594841003423519865123126 0.1939727962017059326171875 -0.0420176982879638671875 +-0.224909591674804704153345369377 -0.228498411178588878289730246252 0.23917400836944580078125 +-0.224909591674804704153345369377 0.228498411178588878289730246252 0.23917400836944580078125 +-0.224898004531860346011384876874 -0.178467607498168950863615123126 0.0870068997144699124435263115629 +-0.224898004531860346011384876874 0.178467607498168950863615123126 0.0870068997144699124435263115629 +-0.224861401319503773077457253748 -0.114514803886413565892077315311 0.162246000766754133737279630623 +-0.224861401319503773077457253748 0.114514803886413565892077315311 0.162246000766754133737279630623 +-0.224846251308917999267578125 -0.53172375261783599853515625 -0.47876326739788055419921875 +-0.224846251308917999267578125 0.53172375261783599853515625 -0.47876326739788055419921875 +-0.224793255329132107833700615629 -0.476229056715965326507244981258 -0.158662892878055572509765625 +-0.224793255329132107833700615629 0.476229056715965326507244981258 -0.158662892878055572509765625 +-0.2246485054492950439453125 -0.066535003483295440673828125 -0.441708505153656005859375 +-0.2246485054492950439453125 0.066535003483295440673828125 -0.441708505153656005859375 +-0.224592506885528564453125 -0.4313339889049530029296875 -0.116228498518466949462890625 +-0.224592506885528564453125 0.4313339889049530029296875 -0.116228498518466949462890625 +-0.224572604894638039318977007497 -0.0929536983370780889313067518742 -0.656450188159942604748664507497 +-0.224572604894638039318977007497 0.0929536983370780889313067518742 -0.656450188159942604748664507497 +-0.224570852518081648385717130623 -0.228723254799842817819310880623 -0.140547744929790496826171875 +-0.224570852518081648385717130623 0.228723254799842817819310880623 -0.140547744929790496826171875 +-0.224459355324506754092439564374 -0.4856409728527069091796875 -0.785029643774032503955595529987 +-0.224459355324506754092439564374 0.4856409728527069091796875 -0.785029643774032503955595529987 +-0.224390651285648334845035378748 -0.577125343680381708288962272491 0.582301831245422341076789507497 +-0.224390651285648334845035378748 0.577125343680381708288962272491 0.582301831245422341076789507497 +-0.224294352531433094366519753748 -0.265527856349945023950454014994 0.0410724990069866180419921875 +-0.224294352531433094366519753748 0.265527856349945023950454014994 0.0410724990069866180419921875 +-0.224290394783020041735710492503 -0.280246806144714366570980246252 0.176508796215057384149105246252 +-0.224290394783020041735710492503 0.280246806144714366570980246252 0.176508796215057384149105246252 +-0.224289000034332275390625 -0.1013572514057159423828125 0.0438307486474514007568359375 +-0.224289000034332275390625 0.1013572514057159423828125 0.0438307486474514007568359375 +-0.224197408556938149182258257497 -0.105438901484012595433092940311 0.247220757603645313604801003748 +-0.224197408556938149182258257497 0.105438901484012595433092940311 0.247220757603645313604801003748 +-0.224162757396697998046875 -0.0921282470226287841796875 0.0613465011119842529296875 +-0.224162757396697998046875 0.0921282470226287841796875 0.0613465011119842529296875 +-0.224043989181518576891960492503 -0.0969519972801208551604901231258 0.761843204498291015625 +-0.224043989181518576891960492503 0.0969519972801208551604901231258 0.761843204498291015625 +-0.22403849661350250244140625 -0.3723619878292083740234375 -0.24729199707508087158203125 +-0.22403849661350250244140625 0.3723619878292083740234375 -0.24729199707508087158203125 +-0.2239840030670166015625 0 0.974592983722686767578125 +-0.223903799057006830386384876874 -0.530854797363281227795539507497 0.167511606216430658511384876874 +-0.223903799057006830386384876874 0.530854797363281227795539507497 0.167511606216430658511384876874 +-0.223741656541824346371427623126 -0.109218449145555507318050558752 -0.490419608354568548058693977509 +-0.223741656541824346371427623126 0.109218449145555507318050558752 -0.490419608354568548058693977509 +-0.223678803443908696957365123126 -0.02669639885425567626953125 -0.330537605285644575658920985006 +-0.223678803443908696957365123126 0.02669639885425567626953125 -0.330537605285644575658920985006 +-0.22360800206661224365234375 -0.4253239929676055908203125 0.13819849491119384765625 +-0.22360800206661224365234375 0.4253239929676055908203125 0.13819849491119384765625 +-0.22360624372959136962890625 0 -0.111803747713565826416015625 +-0.22360549867153167724609375 -0.2628634870052337646484375 -0.3618060052394866943359375 +-0.22360549867153167724609375 0.2628634870052337646484375 -0.3618060052394866943359375 +-0.2236050069332122802734375 0 0.4472145140171051025390625 +-0.223477792739868147409154630623 -0.039770700037479400634765625 -0.1961528956890106201171875 +-0.223477792739868147409154630623 0.039770700037479400634765625 -0.1961528956890106201171875 +-0.2234386503696441650390625 -0.687660196423530600817741742503 0.446877300739288330078125 +-0.2234386503696441650390625 0.687660196423530600817741742503 0.446877300739288330078125 +-0.223368242383003207107705634371 -0.0920023977756500160873898153113 -0.253263139724731412005809261245 +-0.223368242383003207107705634371 0.0920023977756500160873898153113 -0.253263139724731412005809261245 +-0.22335375845432281494140625 -0.04992449842393398284912109375 -0.71422724425792694091796875 +-0.22335375845432281494140625 0.04992449842393398284912109375 -0.71422724425792694091796875 +-0.223318195343017555920539507497 0 -0.269497552514076199603465511245 +-0.2232912480831146240234375 -0.09039725363254547119140625 -0.06685300171375274658203125 +-0.2232912480831146240234375 0.09039725363254547119140625 -0.06685300171375274658203125 +-0.22325600683689117431640625 -0.080571003258228302001953125 0.97142398357391357421875 +-0.22325600683689117431640625 0.080571003258228302001953125 0.97142398357391357421875 +-0.2232120037078857421875 -0.162170803546905523129240123126 0.289615201950073231085269753748 +-0.2232120037078857421875 0.162170803546905523129240123126 0.289615201950073231085269753748 +-0.223145407438278181588842130623 -0.800374460220336869653579014994 0.179183400422334659918277566248 +-0.223145407438278181588842130623 0.800374460220336869653579014994 0.179183400422334659918277566248 +-0.22312949597835540771484375 -0.099941253662109375 -0.0522004999220371246337890625 +-0.22312949597835540771484375 0.099941253662109375 -0.0522004999220371246337890625 +-0.223034811019897472039730246252 -0.330858802795410189556690738755 0.0280707985162735006168244211722 +-0.223034811019897472039730246252 0.330858802795410189556690738755 0.0280707985162735006168244211722 +-0.223001453280448902471988503748 -0.265277245640754666400340511245 -0.0489723481237888322303852817186 +-0.223001453280448902471988503748 0.265277245640754666400340511245 -0.0489723481237888322303852817186 +-0.222971440851688379458650501874 -0.269273552298545826300113503748 0.547974056005477883068977007497 +-0.222971440851688379458650501874 0.269273552298545826300113503748 0.547974056005477883068977007497 +-0.222968757152557373046875 -0.055028498172760009765625 0.098776750266551971435546875 +-0.222968757152557373046875 0.055028498172760009765625 0.098776750266551971435546875 +-0.2229155004024505615234375 -0.0392290018498897552490234375 0.445836007595062255859375 +-0.2229155004024505615234375 0.0392290018498897552490234375 0.445836007595062255859375 +-0.222788405418396007195980246252 -0.331378793716430697369190738755 -0.0235264003276824951171875 +-0.222788405418396007195980246252 0.331378793716430697369190738755 -0.0235264003276824951171875 +-0.2227520048618316650390625 -0.1134967505931854248046875 0 +-0.2227520048618316650390625 0.1134967505931854248046875 0 +-0.2227160036563873291015625 -0.946197986602783203125 -0.23474900424480438232421875 +-0.2227160036563873291015625 0.946197986602783203125 -0.23474900424480438232421875 +-0.222668547928333293572933371252 -0.59974329173564910888671875 -0.115007102489471435546875 +-0.222668547928333293572933371252 0.59974329173564910888671875 -0.115007102489471435546875 +-0.222523948550224309750333873126 -0.466414287686348016936932481258 0.188257852196693442614616742503 +-0.222523948550224309750333873126 0.466414287686348016936932481258 0.188257852196693442614616742503 +-0.222485996782779693603515625 -0.68473573029041290283203125 0.2100884914398193359375 +-0.222485996782779693603515625 0.68473573029041290283203125 0.2100884914398193359375 +-0.222420902550220483950838001874 -0.128917754441499721185238058752 -0.59700028598308563232421875 +-0.222420902550220483950838001874 0.128917754441499721185238058752 -0.59700028598308563232421875 +-0.222294747829437255859375 -0.08265049755573272705078125 0.07908199727535247802734375 +-0.222294747829437255859375 0.08265049755573272705078125 0.07908199727535247802734375 +-0.22225534915924072265625 -0.317951710522174801898387386245 0.867184701561927728796774772491 +-0.22225534915924072265625 0.317951710522174801898387386245 0.867184701561927728796774772491 +-0.22209124267101287841796875 -0.08053450286388397216796875 -0.08179025352001190185546875 +-0.22209124267101287841796875 0.08053450286388397216796875 -0.08179025352001190185546875 +-0.221988393366336800305305132497 -0.810004180669784523693977007497 0.443975852429866757464793636245 +-0.221988393366336800305305132497 0.810004180669784523693977007497 0.443975852429866757464793636245 +-0.221960401535034185238615123126 -0.0954688012599945179381677462516 0.318777608871460005346420985006 +-0.221960401535034185238615123126 0.0954688012599945179381677462516 0.318777608871460005346420985006 +-0.2218747437000274658203125 -0.337402796745300326275440738755 -0.198572395741939550228849498126 +-0.2218747437000274658203125 0.337402796745300326275440738755 -0.198572395741939550228849498126 +-0.221844694018363958187833873126 0 -0.503274205327034040990952235006 +-0.221773701906204212530582253748 -0.923751527070999056689970529987 0 +-0.221773701906204212530582253748 0.923751527070999056689970529987 0 +-0.221747490763664262258814119377 -0.403152766823768604620426003748 -0.459124884009361300396534488755 +-0.221747490763664262258814119377 0.403152766823768604620426003748 -0.459124884009361300396534488755 +-0.221725347638130176886051003748 -0.161091001331806177310213001874 0.217686703801155068127570757497 +-0.221725347638130176886051003748 0.161091001331806177310213001874 0.217686703801155068127570757497 +-0.22172300517559051513671875 -0.04313249886035919189453125 -0.107137747108936309814453125 +-0.22172300517559051513671875 0.04313249886035919189453125 -0.107137747108936309814453125 +-0.221721607446670521124332253748 -0.426766812801361083984375 -0.358761012554168701171875 +-0.221721607446670521124332253748 0.426766812801361083984375 -0.358761012554168701171875 +-0.221705900132656091860994251874 -0.595459166169166609350327235006 0.137022600322961818353206808752 +-0.221705900132656091860994251874 0.595459166169166609350327235006 0.137022600322961818353206808752 +-0.221702608466148365362613503748 -0.178920692205429054943977007497 -0.203311145305633544921875 +-0.221702608466148365362613503748 0.178920692205429054943977007497 -0.203311145305633544921875 +-0.2216907441616058349609375 -0.111743248999118804931640625 0.02943949960172176361083984375 +-0.2216907441616058349609375 0.111743248999118804931640625 0.02943949960172176361083984375 +-0.221645700931549061163394753748 -0.161034303903579700811832253748 -0.122233799099922171849108565311 +-0.221645700931549061163394753748 0.161034303903579700811832253748 -0.122233799099922171849108565311 +-0.221610295772552479132144753748 -0.1457127034664154052734375 -0.14020259678363800048828125 +-0.221610295772552479132144753748 0.1457127034664154052734375 -0.14020259678363800048828125 +-0.221589559316635126284822376874 -0.243962255120277388131810880623 -0.117815248668193803260884067186 +-0.221589559316635126284822376874 0.243962255120277388131810880623 -0.117815248668193803260884067186 +-0.221559256315231350997763115629 -0.340549013018608126568409488755 0.370726403594017039910823996252 +-0.221559256315231350997763115629 0.340549013018608126568409488755 0.370726403594017039910823996252 +-0.2214522063732147216796875 0 -0.202383005619049066714509876874 +-0.221410802006721502133146373126 -0.293333405256271384509147992503 -0.821543401479721047131477007497 +-0.221410802006721502133146373126 0.293333405256271384509147992503 -0.821543401479721047131477007497 +-0.221388602256774896792634876874 -0.0792243003845214815994424384371 -0.186307793855667119808927623126 +-0.221388602256774896792634876874 0.0792243003845214815994424384371 -0.186307793855667119808927623126 +-0.221360290050506586245759876874 -0.494970691204071000512954014994 0.442722707986831609527911268742 +-0.221360290050506586245759876874 0.494970691204071000512954014994 0.442722707986831609527911268742 +-0.22127099335193634033203125 -0.2431170046329498291015625 0.3767400085926055908203125 +-0.22127099335193634033203125 0.2431170046329498291015625 0.3767400085926055908203125 +-0.2212442457675933837890625 -0.11098849773406982421875 -0.0351077504456043243408203125 +-0.2212442457675933837890625 0.11098849773406982421875 -0.0351077504456043243408203125 +-0.221232596039772050344751619377 -0.123610045015811922941573186563 0.37185569107532501220703125 +-0.221232596039772050344751619377 0.123610045015811922941573186563 0.37185569107532501220703125 +-0.221195702254772197381527121252 -0.298277547955513033794971988755 -0.254171249270439159051448996252 +-0.221195702254772197381527121252 0.298277547955513033794971988755 -0.254171249270439159051448996252 +-0.221108007431030290090845369377 -0.680511999130249067846420985006 -0.35777199268341064453125 +-0.221108007431030290090845369377 0.680511999130249067846420985006 -0.35777199268341064453125 +-0.22107599675655364990234375 -0.16061900556087493896484375 0.96193897724151611328125 +-0.22107599675655364990234375 0.16061900556087493896484375 0.96193897724151611328125 +-0.221042251586914068051115123126 -0.422137311100959811138721988755 0.442086440324783336297542746252 +-0.221042251586914068051115123126 0.422137311100959811138721988755 0.442086440324783336297542746252 +-0.220970106124877913034154630623 -0.0869775027036666786850460653113 0.183322495222091680355802623126 +-0.220970106124877913034154630623 0.0869775027036666786850460653113 0.183322495222091680355802623126 +-0.220907998085021983758480246252 -0.262401199340820345806690738755 -0.205780005455017095394865123126 +-0.220907998085021983758480246252 0.262401199340820345806690738755 -0.205780005455017095394865123126 +-0.220903801918029774054019753748 -0.1903730928897857666015625 0.0704247012734413174728231865629 +-0.220903801918029774054019753748 0.1903730928897857666015625 0.0704247012734413174728231865629 +-0.22090099751949310302734375 -0.323702991008758544921875 0.3105140030384063720703125 +-0.22090099751949310302734375 0.323702991008758544921875 0.3105140030384063720703125 +-0.2208902053534984588623046875 -0.552848714590072565222556022491 0.740315043926238924854033029987 +-0.2208902053534984588623046875 0.552848714590072565222556022491 0.740315043926238924854033029987 +-0.22085200250148773193359375 -0.07821600139141082763671875 0.4417090117931365966796875 +-0.22085200250148773193359375 0.07821600139141082763671875 0.4417090117931365966796875 +-0.220784854888916026727230246252 -0.390840312838554415630909488755 0.0315890997648239149619975307814 +-0.220784854888916026727230246252 0.390840312838554415630909488755 0.0315890997648239149619975307814 +-0.2207784950733184814453125 -0.01031200028955936431884765625 0.11683525145053863525390625 +-0.2207784950733184814453125 0.01031200028955936431884765625 0.11683525145053863525390625 +-0.220776759088039398193359375 -0.19811175763607025146484375 -0.68884648382663726806640625 +-0.220776759088039398193359375 0.19811175763607025146484375 -0.68884648382663726806640625 +-0.22068250179290771484375 -0.01643924973905086517333984375 -0.116314001381397247314453125 +-0.22068250179290771484375 0.01643924973905086517333984375 -0.116314001381397247314453125 +-0.220508104562759404965177623126 -0.391376245021820057257144753748 -0.0264725999906659133220632185157 +-0.220508104562759404965177623126 0.391376245021820057257144753748 -0.0264725999906659133220632185157 +-0.220429298281669627801448996252 0 -0.611482968926429726330695757497 +-0.220383596420288069284154630623 -0.175414198637008661441072376874 -0.103252199292182919587723688437 +-0.220383596420288069284154630623 0.175414198637008661441072376874 -0.103252199292182919587723688437 +-0.220325405895710008108423494377 -0.796467590332031294408920985006 -0.356505301594734202996761496252 +-0.220325405895710008108423494377 0.796467590332031294408920985006 -0.356505301594734202996761496252 +-0.220197609066963173596320757497 -0.227868908643722528628572376874 -0.624170410633087091589743522491 +-0.220197609066963173596320757497 0.227868908643722528628572376874 -0.624170410633087091589743522491 +-0.220179696381092082635433371252 -0.256186451017856586798160378748 -0.555328139662742636950554242503 +-0.220179696381092082635433371252 0.256186451017856586798160378748 -0.555328139662742636950554242503 +-0.220165400207042699642911998126 0 0.611577850580215520714943977509 +-0.220059451460838328973323996252 -0.03003344871103763580322265625 -0.391371738910675059930355246252 +-0.220059451460838328973323996252 0.03003344871103763580322265625 -0.391371738910675059930355246252 +-0.220003604888916015625 -0.159841597080230712890625 -0.293341207504272449835269753748 +-0.220003604888916015625 0.159841597080230712890625 -0.293341207504272449835269753748 +-0.219880390167236344778345369377 -0.0801464021205902099609375 -0.324390411376953125 +-0.219880390167236344778345369377 0.0801464021205902099609375 -0.324390411376953125 +-0.21981300413608551025390625 -0.3859179913997650146484375 0.22967250645160675048828125 +-0.21981300413608551025390625 0.3859179913997650146484375 0.22967250645160675048828125 +-0.219773393869400007760717130623 -0.518957412242889382092414507497 -0.205870807170867919921875 +-0.219773393869400007760717130623 0.518957412242889382092414507497 -0.205870807170867919921875 +-0.21977074444293975830078125 -0.07007925212383270263671875 -0.096382997930049896240234375 +-0.21977074444293975830078125 0.07007925212383270263671875 -0.096382997930049896240234375 +-0.2196537554264068603515625 -0.02759574912488460540771484375 0.11614950001239776611328125 +-0.2196537554264068603515625 0.02759574912488460540771484375 0.11614950001239776611328125 +-0.219647049903869601150674384371 -0.258609390258789040295539507497 0.0858854509890079470535440009371 +-0.219647049903869601150674384371 0.258609390258789040295539507497 0.0858854509890079470535440009371 +-0.219557100534439081362947376874 -0.203673595190048212222322376874 0.0176577005535364130184294850778 +-0.219557100534439081362947376874 0.203673595190048212222322376874 0.0176577005535364130184294850778 +-0.219483208656311046258480246252 -0.159461605548858659231470369377 0.7525951862335205078125 +-0.219483208656311046258480246252 0.159461605548858659231470369377 0.7525951862335205078125 +-0.219439356029033666439786998126 -0.0527409978210926083663778740629 0.609560889005661077355568977509 +-0.219439356029033666439786998126 0.0527409978210926083663778740629 0.609560889005661077355568977509 +-0.219377994537353515625 -0.324867200851440440789730246252 0.0795899987220764215667401231258 +-0.219377994537353515625 0.324867200851440440789730246252 0.0795899987220764215667401231258 +-0.2193768024444580078125 -0.384901660680770862921207253748 -0.0788953475654125269134198106258 +-0.2193768024444580078125 0.384901660680770862921207253748 -0.0788953475654125269134198106258 +-0.219268798828125 -0.28159201145172119140625 -0.180630004405975347347990123126 +-0.219268798828125 0.28159201145172119140625 -0.180630004405975347347990123126 +-0.2192375957965850830078125 -0.203692799806594854183927623126 -0.0210749991238117218017578125 +-0.2192375957965850830078125 0.203692799806594854183927623126 -0.0210749991238117218017578125 +-0.219221591949462890625 -0.159273600578308111019865123126 -0.752711200714111350329460492503 +-0.219221591949462890625 0.159273600578308111019865123126 -0.752711200714111350329460492503 +-0.219188256561756139584318248126 -0.381612145900726340563835492503 0.0939613491296768243987713731258 +-0.219188256561756139584318248126 0.381612145900726340563835492503 0.0939613491296768243987713731258 +-0.219157950580120108874382367503 -0.249691753089427981304737613755 0.438319736719131491931022992503 +-0.219157950580120108874382367503 0.249691753089427981304737613755 0.438319736719131491931022992503 +-0.2190749943256378173828125 -0.3950839936733245849609375 -0.2142769992351531982421875 +-0.2190749943256378173828125 0.3950839936733245849609375 -0.2142769992351531982421875 +-0.219008997082710238357705634371 -0.524568790197372458727897992503 -0.408488488197326637951789507497 +-0.219008997082710238357705634371 0.524568790197372458727897992503 -0.408488488197326637951789507497 +-0.21899025142192840576171875 -0.072481252253055572509765625 0.096383251249790191650390625 +-0.21899025142192840576171875 0.072481252253055572509765625 0.096383251249790191650390625 +-0.218860942125320423468082253748 -0.0144553503021597855304758439843 0.27274729311466217041015625 +-0.218860942125320423468082253748 0.0144553503021597855304758439843 0.27274729311466217041015625 +-0.218832591176033014468416126874 -0.158990652859210962466463001874 -0.222113499045372003726228626874 +-0.218832591176033014468416126874 0.158990652859210962466463001874 -0.222113499045372003726228626874 +-0.21861279010772705078125 0 -0.769551181793212912829460492503 +-0.218571209907531760485710492503 -0.297396802902221701891960492503 0.154213595390319840872095369377 +-0.218571209907531760485710492503 0.297396802902221701891960492503 0.154213595390319840872095369377 +-0.218540406227111821957365123126 -0.326492810249328635485710492503 -0.0751164019107818659026776231258 +-0.218540406227111821957365123126 0.326492810249328635485710492503 -0.0751164019107818659026776231258 +-0.218491691350936878546207253748 -0.579000109434127718799345529987 0.327140101790428128314403011245 +-0.218491691350936878546207253748 0.579000109434127718799345529987 0.327140101790428128314403011245 +-0.218451449275016779116853626874 -0.21547295153141021728515625 0.168375547230243671759097878748 +-0.218451449275016779116853626874 0.21547295153141021728515625 0.168375547230243671759097878748 +-0.218437492847442626953125 -0.35448300838470458984375 -0.2768155038356781005859375 +-0.218437492847442626953125 0.35448300838470458984375 -0.2768155038356781005859375 +-0.218290205299854267462222878748 -0.783631139993667624743522992503 -0.246519549190998082943693248126 +-0.218290205299854267462222878748 0.783631139993667624743522992503 -0.246519549190998082943693248126 +-0.218227502703666698113948996252 -0.351090458035469066278011496252 0.177798606455326080322265625 +-0.218227502703666698113948996252 0.351090458035469066278011496252 0.177798606455326080322265625 +-0.218195396661758411749332253748 -0.0123750004917383190500279610546 0.2055180072784423828125 +-0.218195396661758411749332253748 0.0123750004917383190500279610546 0.2055180072784423828125 +-0.218154895305633533819644753748 -0.1328592002391815185546875 -0.157343405485153187139957253748 +-0.218154895305633533819644753748 0.1328592002391815185546875 -0.157343405485153187139957253748 +-0.218149006366729736328125 -0.935128986835479736328125 0.2791860103607177734375 +-0.218149006366729736328125 0.935128986835479736328125 0.2791860103607177734375 +-0.218006555736064921990902121252 -0.232251754403114324398771373126 0.317855688929557789190738503748 +-0.218006555736064921990902121252 0.232251754403114324398771373126 0.317855688929557789190738503748 +-0.2179605066776275634765625 -0.12155924737453460693359375 0.014714750461280345916748046875 +-0.2179605066776275634765625 0.12155924737453460693359375 0.014714750461280345916748046875 +-0.217954103648662578240902121252 -0.532483240962028481213508257497 -0.302418999373912811279296875 +-0.217954103648662578240902121252 0.532483240962028481213508257497 -0.302418999373912811279296875 +-0.217932593822479231393529630623 -0.0399624019861221299598774692186 -0.557591414451599098889289507497 +-0.217932593822479231393529630623 0.0399624019861221299598774692186 -0.557591414451599098889289507497 +-0.21789349615573883056640625 -0.12130124866962432861328125 -0.01756249926984310150146484375 +-0.21789349615573883056640625 0.12130124866962432861328125 -0.01756249926984310150146484375 +-0.21785700321197509765625 -0.13275800645351409912109375 -0.4300160109996795654296875 +-0.21785700321197509765625 0.13275800645351409912109375 -0.4300160109996795654296875 +-0.217842292785644514596654630623 -0.188493293523788435495092130623 -0.0837558031082153292556924384371 +-0.217842292785644514596654630623 0.188493293523788435495092130623 -0.0837558031082153292556924384371 +-0.217832989990711212158203125 -0.57029999792575836181640625 0.43566749989986419677734375 +-0.217832989990711212158203125 0.57029999792575836181640625 0.43566749989986419677734375 +-0.217773900926113123110994251874 -0.670250719785690285412727007497 -0.559765809774398825915397992503 +-0.217773900926113123110994251874 0.670250719785690285412727007497 -0.559765809774398825915397992503 +-0.21761624515056610107421875 -0.10847075283527374267578125 0.058113999664783477783203125 +-0.21761624515056610107421875 0.10847075283527374267578125 0.058113999664783477783203125 +-0.217594496905803680419921875 -0.669694483280181884765625 -0.2581889927387237548828125 +-0.217594496905803680419921875 0.669694483280181884765625 -0.2581889927387237548828125 +-0.217489796876907337530582253748 -0.133607697486877424752904630623 0.157629901170730585269197376874 +-0.217489796876907337530582253748 0.133607697486877424752904630623 0.157629901170730585269197376874 +-0.21747849881649017333984375 -0.044898249208927154541015625 0.114835999906063079833984375 +-0.21747849881649017333984375 0.044898249208927154541015625 0.114835999906063079833984375 +-0.21742700040340423583984375 -0.116720497608184814453125 0.434858500957489013671875 +-0.21742700040340423583984375 0.116720497608184814453125 0.434858500957489013671875 +-0.217356155812740342581079744377 -0.315949705243110667840511496252 -0.394248804450035128521534488755 +-0.217356155812740342581079744377 0.315949705243110667840511496252 -0.394248804450035128521534488755 +-0.217260041832923883609041126874 -0.0429793011397123295158628764057 0.271017947793006863665965511245 +-0.217260041832923883609041126874 0.0429793011397123295158628764057 0.271017947793006863665965511245 +-0.217246948182582833020148882497 -0.918073344230651788855368522491 -0.111559449881315220221011941248 +-0.217246948182582833020148882497 0.918073344230651788855368522491 -0.111559449881315220221011941248 +-0.217177344858646398373380748126 -0.582919988036155745092514735006 -0.188514949381351465396150501874 +-0.217177344858646398373380748126 0.582919988036155745092514735006 -0.188514949381351465396150501874 +-0.217164495587348932437166126874 -0.128979545831680281198217130623 0.242288902401924105545205634371 +-0.217164495587348932437166126874 0.128979545831680281198217130623 0.242288902401924105545205634371 +-0.217081797122955305612279630623 -0.352667391300201416015625 0.434167206287384033203125 +-0.217081797122955305612279630623 0.352667391300201416015625 0.434167206287384033203125 +-0.217079991102218622378572376874 -0.157717806100845320260717130623 -0.536657416820526145251335492503 +-0.217079991102218622378572376874 -0.157716000080108637027009876874 0.13416449725627899169921875 +-0.217079991102218622378572376874 0.157716000080108637027009876874 0.13416449725627899169921875 +-0.217079991102218622378572376874 0.157717806100845320260717130623 -0.536657416820526145251335492503 +-0.216963952779769875256477007497 -0.258198854327201854363948996252 -0.0935945466160774119934728787484 +-0.216963952779769875256477007497 0.258198854327201854363948996252 -0.0935945466160774119934728787484 +-0.216886806488037126028345369377 -0.190487599372863775082365123126 0.276902008056640613897769753748 +-0.216886806488037126028345369377 0.190487599372863775082365123126 0.276902008056640613897769753748 +-0.216823196411132818051115123126 -0.0368180997669696821739115932814 0.204039591550827015264957253748 +-0.216823196411132818051115123126 0.0368180997669696821739115932814 0.204039591550827015264957253748 +-0.216726753115654008352564119377 -0.180434252321720139944360994377 -0.35067509114742279052734375 +-0.216726753115654008352564119377 0.180434252321720139944360994377 -0.35067509114742279052734375 +-0.2167022526264190673828125 -0.0328000001609325408935546875 -0.120267502963542938232421875 +-0.2167022526264190673828125 0.0328000001609325408935546875 -0.120267502963542938232421875 +-0.216697847098112100772127064374 -0.6669398844242095947265625 -0.640884274244308493884147992503 +-0.216697847098112100772127064374 0.6669398844242095947265625 -0.640884274244308493884147992503 +-0.216688947379589075259431751874 -0.356691607832908652575554242503 -0.168276147544383997134431751874 +-0.216688947379589075259431751874 0.356691607832908652575554242503 -0.168276147544383997134431751874 +-0.216621208190917985403345369377 -0.246180796623230002673210492503 -0.229063606262207036801115123126 +-0.216621208190917985403345369377 0.246180796623230002673210492503 -0.229063606262207036801115123126 +-0.216578143090009667126594194997 -0.0627398986369371441940145928129 -0.9228527843952178955078125 +-0.216578143090009667126594194997 0.0627398986369371441940145928129 -0.9228527843952178955078125 +-0.216497537493705732858373380623 -0.227270440757274622134431751874 0.789921981096267655786391514994 +-0.216497537493705732858373380623 0.227270440757274622134431751874 0.789921981096267655786391514994 +-0.216478842496871937139957253748 -0.666264000535011224890524772491 -0.481383046507835365979133257497 +-0.216478842496871937139957253748 0.666264000535011224890524772491 -0.481383046507835365979133257497 +-0.216450002789497386590511496252 -0.103746502101421361752286998126 0.604057985544204756322983485006 +-0.216450002789497386590511496252 0.103746502101421361752286998126 0.604057985544204756322983485006 +-0.21644650399684906005859375 -0.09933625161647796630859375 0.0760477483272552490234375 +-0.21644650399684906005859375 0.09933625161647796630859375 0.0760477483272552490234375 +-0.216377153992652920821981865629 -0.0223707005381584174419362653907 0.50515408813953399658203125 +-0.216377153992652920821981865629 0.0223707005381584174419362653907 0.50515408813953399658203125 +-0.2163625061511993408203125 -0.059306748211383819580078125 -0.1103174984455108642578125 +-0.2163625061511993408203125 0.059306748211383819580078125 -0.1103174984455108642578125 +-0.2163119018077850341796875 -0.665739202499389559619658029987 0 +-0.2163119018077850341796875 0.665739202499389559619658029987 0 +-0.216254997253417957647769753748 -0.27652680873870849609375 -0.486586797237396229132144753748 +-0.216254997253417957647769753748 0.27652680873870849609375 -0.486586797237396229132144753748 +-0.216134405136108403988615123126 -0.355160808563232455181690738755 0.683480787277221724096420985006 +-0.216134405136108403988615123126 0.355160808563232455181690738755 0.683480787277221724096420985006 +-0.21604309976100921630859375 -0.363477820158004727435496761245 -0.557861483097076393811164507497 +-0.21604309976100921630859375 0.363477820158004727435496761245 -0.557861483097076393811164507497 +-0.216028392314910888671875 -0.3866883814334869384765625 0.542036604881286576684829014994 +-0.216028392314910888671875 0.3866883814334869384765625 0.542036604881286576684829014994 +-0.2160007953643798828125 -0.492361593246460005346420985006 -0.592388820648193425988381477509 +-0.2160007953643798828125 0.492361593246460005346420985006 -0.592388820648193425988381477509 +-0.215992502868175506591796875 -0.340693496167659759521484375 -0.6322777569293975830078125 +-0.215992502868175506591796875 0.340693496167659759521484375 -0.6322777569293975830078125 +-0.215949243307113653012052623126 -0.431112000346183799059929242503 -0.264590145647525809557976117503 +-0.215949243307113653012052623126 0.431112000346183799059929242503 -0.264590145647525809557976117503 +-0.215783996880054479428068248126 -0.0901647023856639862060546875 -0.384457486867904651983707253748 +-0.215783996880054479428068248126 0.0901647023856639862060546875 -0.384457486867904651983707253748 +-0.2157551944255828857421875 -0.201695394515991194284154630623 0.052617900073528289794921875 +-0.2157551944255828857421875 0.201695394515991194284154630623 0.052617900073528289794921875 +-0.215706801414489751644865123126 -0.25382959842681884765625 0.221452403068542497122095369377 +-0.215706801414489751644865123126 0.25382959842681884765625 0.221452403068542497122095369377 +-0.2157011926174163818359375 -0.059727899730205535888671875 -0.199764007329940790347322376874 +-0.2157011926174163818359375 0.059727899730205535888671875 -0.199764007329940790347322376874 +-0.215684992074966414010717130623 -0.1157712042331695556640625 -0.173427003622055042608707253748 +-0.215684992074966414010717130623 0.1157712042331695556640625 -0.173427003622055042608707253748 +-0.2156808078289031982421875 -0.504104411602020241467414507497 0.243640208244323724917634876874 +-0.2156808078289031982421875 0.504104411602020241467414507497 0.243640208244323724917634876874 +-0.215639103949069987908870871252 -0.279106190800666842388721988755 -0.279462602734565745965511496252 +-0.215639103949069987908870871252 0.279106190800666842388721988755 -0.279462602734565745965511496252 +-0.215635004639625538214176003748 -0.231308010220527632272435880623 0.149993899464607227667301003748 +-0.215635004639625538214176003748 0.231308010220527632272435880623 0.149993899464607227667301003748 +-0.215632009506225602590845369377 -0.768950414657592840050881477509 -0.0470928013324737604339276231258 +-0.215632009506225602590845369377 0.768950414657592840050881477509 -0.0470928013324737604339276231258 +-0.215608739852905267886384876874 -0.185195159912109358346654630623 0.204244244098663318975894753748 +-0.215608739852905267886384876874 0.185195159912109358346654630623 0.204244244098663318975894753748 +-0.215574002265930181332365123126 -0.0199697993695735938335378278907 -0.2076753079891204833984375 +-0.215574002265930181332365123126 0.0199697993695735938335378278907 -0.2076753079891204833984375 +-0.215525460243225081002904630623 -0.2750002443790435791015625 0.0205856002867221832275390625 +-0.215525460243225081002904630623 0.2750002443790435791015625 0.0205856002867221832275390625 +-0.215525144338607782534822376874 -0.479831817746162403448551003748 -0.66769029200077056884765625 +-0.215525144338607782534822376874 0.479831817746162403448551003748 -0.66769029200077056884765625 +-0.215467804670333856753572376874 -0.171615296602249139956697376874 0.118835100531578058413728626874 +-0.215467804670333856753572376874 0.171615296602249139956697376874 0.118835100531578058413728626874 +-0.21546106040477752685546875 -0.0695026494562625829498614393742 -0.266919451951980579718082253748 +-0.21546106040477752685546875 0.0695026494562625829498614393742 -0.266919451951980579718082253748 +-0.2154510021209716796875 -0.10633049905300140380859375 -0.069099001586437225341796875 +-0.2154510021209716796875 0.10633049905300140380859375 -0.069099001586437225341796875 +-0.21541400253772735595703125 -0.119055248796939849853515625 0.0438482500612735748291015625 +-0.21541400253772735595703125 0.119055248796939849853515625 0.0438482500612735748291015625 +-0.215361094474792486019865123126 -0.436363670229911793096988503748 0.696926075220107965613181022491 +-0.215361094474792486019865123126 0.436363670229911793096988503748 0.696926075220107965613181022491 +-0.215355256199836753161491742503 -0.417255863547325189788494981258 0.286391052603721663061264735006 +-0.215355256199836753161491742503 0.417255863547325189788494981258 0.286391052603721663061264735006 +-0.2153410017490386962890625 0 -0.1269967555999755859375 +-0.215332949161529535464509876874 -0.0233481489121913909912109375 -0.274929898977279651983707253748 +-0.215332949161529535464509876874 0.0233481489121913909912109375 -0.274929898977279651983707253748 +-0.21532680094242095947265625 -0.302541294693946860583366742503 0.254171705245971712994190738755 +-0.21532680094242095947265625 0.302541294693946860583366742503 0.254171705245971712994190738755 +-0.215300011634826676809595369377 -0.299773597717285178454460492503 -0.154213201999664317742855246252 +-0.215300011634826676809595369377 0.299773597717285178454460492503 -0.154213201999664317742855246252 +-0.215288054943084700143529630623 -0.915667939186096124792868522491 0.13305604457855224609375 +-0.215288054943084700143529630623 0.915667939186096124792868522491 0.13305604457855224609375 +-0.215175010263919830322265625 -0.46442623436450958251953125 0.5481854975223541259765625 +-0.215175010263919830322265625 0.46442623436450958251953125 0.5481854975223541259765625 +-0.215163907408714272229133257497 -0.0704147510230541118225744412484 0.26691980659961700439453125 +-0.215163907408714272229133257497 0.0704147510230541118225744412484 0.26691980659961700439453125 +-0.2151128947734832763671875 -0.107466897368431082981921065311 0.179380202293395990542634876874 +-0.2151128947734832763671875 0.107466897368431082981921065311 0.179380202293395990542634876874 +-0.2150259912014007568359375 -0.275064644217491105493422764994 -0.0245619487017393091365935475778 +-0.2150259912014007568359375 0.275064644217491105493422764994 -0.0245619487017393091365935475778 +-0.21500599384307861328125 -0.23210500180721282958984375 -0.38716900348663330078125 +-0.21500599384307861328125 0.23210500180721282958984375 -0.38716900348663330078125 +-0.214969611167907720394865123126 -0.76852321624755859375 0.05621039867401123046875 +-0.214969611167907720394865123126 0.76852321624755859375 0.05621039867401123046875 +-0.214939798414707200491235994377 -0.661504518985748357629006477509 0.571149909496307395251335492503 +-0.214939798414707200491235994377 0.661504518985748357629006477509 0.571149909496307395251335492503 +-0.214831653237342851126001619377 -0.0654917992651462554931640625 0.502053743600845425731904470013 +-0.214831653237342851126001619377 0.0654917992651462554931640625 0.502053743600845425731904470013 +-0.214804795384407026803685880623 -0.661103081703185990747329014994 -0.0824732974171638461013955634371 +-0.214804795384407026803685880623 0.661103081703185990747329014994 -0.0824732974171638461013955634371 +-0.214778804779052756579460492503 -0.123061597347259521484375 0.314206790924072276727230246252 +-0.214778804779052756579460492503 0.123061597347259521484375 0.314206790924072276727230246252 +-0.2146410048007965087890625 -0.096681751310825347900390625 -0.0841535031795501708984375 +-0.2146410048007965087890625 0.096681751310825347900390625 -0.0841535031795501708984375 +-0.214615809917449940069644753748 -0.213644909858703602179019753748 0.631106692552566461706931022491 +-0.214615809917449940069644753748 0.213644909858703602179019753748 0.631106692552566461706931022491 +-0.2145870029926300048828125 -0.4444600045680999755859375 -0.86971700191497802734375 +-0.2145870029926300048828125 0.4444600045680999755859375 -0.86971700191497802734375 +-0.214430996775627130679353626874 -0.137946550548076612985326505623 -0.239771008491516085525674384371 +-0.214430996775627130679353626874 0.137946550548076612985326505623 -0.239771008491516085525674384371 +-0.21431775391101837158203125 -0.061830498278141021728515625 0.112893499433994293212890625 +-0.21431775391101837158203125 0.061830498278141021728515625 0.112893499433994293212890625 +-0.21427075564861297607421875 -0.1177285015583038330078125 -0.0522307492792606353759765625 +-0.21427075564861297607421875 0.1177285015583038330078125 -0.0522307492792606353759765625 +-0.214166408777236916272102007497 -0.659131908416747958057158029987 0.0983751967549323924622228787484 +-0.214166408777236916272102007497 0.659131908416747958057158029987 0.0983751967549323924622228787484 +-0.214157548546791060006810880623 -0.250875988602638211322215511245 -0.890896683931350685803352007497 +-0.214157548546791060006810880623 0.250875988602638211322215511245 -0.890896683931350685803352007497 +-0.21401850879192352294921875 -0.49712848663330078125 -0.519191265106201171875 +-0.21401850879192352294921875 0.49712848663330078125 -0.519191265106201171875 +-0.2140080034732818603515625 -0.05753280222415924072265625 0.202214097976684575863615123126 +-0.2140080034732818603515625 0.05753280222415924072265625 0.202214097976684575863615123126 +-0.2139540016651153564453125 -0.278806507587432861328125 0.66256351768970489501953125 +-0.2139540016651153564453125 0.278806507587432861328125 0.66256351768970489501953125 +-0.21391864120960235595703125 -0.112682801485061642732254938437 -0.814887350797653176037727007497 +-0.21391864120960235595703125 0.112682801485061642732254938437 -0.814887350797653176037727007497 +-0.213910456001758592092798494377 -0.571572312712669394763054242503 0.223713098466396337338224498126 +-0.213910456001758592092798494377 0.571572312712669394763054242503 0.223713098466396337338224498126 +-0.2138690054416656494140625 -0.089556001126766204833984375 0.093486748635768890380859375 +-0.2138690054416656494140625 0.089556001126766204833984375 0.093486748635768890380859375 +-0.2138375937938690185546875 -0.204857397079467762335269753748 0.52183020114898681640625 +-0.2138375937938690185546875 0.204857397079467762335269753748 0.52183020114898681640625 +-0.213816601037979114874332253748 -0.200883293151855463198884876874 -0.0626765996217727577866085653113 +-0.213816601037979114874332253748 0.200883293151855463198884876874 -0.0626765996217727577866085653113 +-0.213763797283172601870759876874 -0.400499403476715087890625 -0.392308187484741222039730246252 +-0.213763797283172601870759876874 0.400499403476715087890625 -0.392308187484741222039730246252 +-0.21371950209140777587890625 -0.033354498445987701416015625 -0.450789511203765869140625 +-0.21371950209140777587890625 0.033354498445987701416015625 -0.450789511203765869140625 +-0.213198049366474157162443248126 -0.510711485147476218493522992503 0.340911990404129061627003238755 +-0.213198049366474157162443248126 0.510711485147476218493522992503 0.340911990404129061627003238755 +-0.21316049993038177490234375 -0.130623996257781982421875 0 +-0.21316049993038177490234375 0.130623996257781982421875 0 +-0.213144004344940185546875 -0.65600097179412841796875 -0.724039018154144287109375 +-0.213144004344940185546875 0.65600097179412841796875 -0.724039018154144287109375 +-0.213034656643867476022435880623 -0.769111460447311379162727007497 0.292548759281635262219367632497 +-0.213034656643867476022435880623 0.769111460447311379162727007497 0.292548759281635262219367632497 +-0.212940198183059703485042746252 -0.182786443829536460192741742503 -0.473017612099647544177116742503 +-0.212940198183059703485042746252 0.182786443829536460192741742503 -0.473017612099647544177116742503 +-0.212936806678771989309595369377 -0.655363988876342840050881477509 -0.406393623352050814556690738755 +-0.212936806678771989309595369377 0.655363988876342840050881477509 -0.406393623352050814556690738755 +-0.212890201807022089175447376874 -0.440873408317565884662059261245 0.346855187416076626849559261245 +-0.212890201807022089175447376874 0.440873408317565884662059261245 0.346855187416076626849559261245 +-0.212822091579437239206029630623 -0.184691691398620599917634876874 0.1029354035854339599609375 +-0.212822091579437239206029630623 0.184691691398620599917634876874 0.1029354035854339599609375 +-0.212784802913665749279914507497 0 0.925863334536552340381376779987 +-0.21273900568485260009765625 -0.3337495028972625732421875 -0.305537998676300048828125 +-0.21273900568485260009765625 0.3337495028972625732421875 -0.305537998676300048828125 +-0.21273100376129150390625 -0.0865377485752105712890625 -0.098776496946811676025390625 +-0.21273100376129150390625 0.0865377485752105712890625 -0.098776496946811676025390625 +-0.21266199648380279541015625 0 0.1314339935779571533203125 +-0.2126615047454833984375 -0.15450550615787506103515625 0.425327003002166748046875 +-0.2126615047454833984375 0.15450550615787506103515625 0.425327003002166748046875 +-0.212645705044269578420923494377 -0.460080921649932861328125 -0.743712294101715132299545985006 +-0.212645705044269578420923494377 0.460080921649932861328125 -0.743712294101715132299545985006 +-0.2126085460186004638671875 -0.2701436579227447509765625 0.0657268516719341222565020643742 +-0.2126085460186004638671875 0.2701436579227447509765625 0.0657268516719341222565020643742 +-0.212514254450798051321314119377 -0.315381309390068087505909488755 0.527135697007179326867287727509 +-0.212514254450798051321314119377 0.315381309390068087505909488755 0.527135697007179326867287727509 +-0.212472498416900634765625 -0.4154055118560791015625 -0.17970399558544158935546875 +-0.212472498416900634765625 0.4154055118560791015625 -0.17970399558544158935546875 +-0.21238900721073150634765625 -0.39976298809051513671875 0.891673028469085693359375 +-0.21238900721073150634765625 0.39976298809051513671875 0.891673028469085693359375 +-0.212349602580070490054353626874 -0.154278905689716333560213001874 0.365521037578582785876335492503 +-0.212349602580070490054353626874 0.154278905689716333560213001874 0.365521037578582785876335492503 +-0.212315988540649425164730246252 -0.30894720554351806640625 -0.7067344188690185546875 +-0.212315988540649425164730246252 0.30894720554351806640625 -0.7067344188690185546875 +-0.212298348546028164962606865629 -0.0732902526855468833266726846887 -0.502053743600845425731904470013 +-0.212298348546028164962606865629 0.0732902526855468833266726846887 -0.502053743600845425731904470013 +-0.212155199050903325863615123126 -0.758257579803466863488381477509 -0.14154720306396484375 +-0.212155199050903325863615123126 0.758257579803466863488381477509 -0.14154720306396484375 +-0.21215300261974334716796875 -0.0172850005328655242919921875 0.13111950457096099853515625 +-0.21215300261974334716796875 0.0172850005328655242919921875 0.13111950457096099853515625 +-0.212132406234741194284154630623 -0.212131798267364501953125 0 +-0.212132406234741194284154630623 0.212131798267364501953125 0 +-0.212109506130218505859375 -0.2766830027103424072265625 0.3584080040454864501953125 +-0.212109506130218505859375 0.2766830027103424072265625 0.3584080040454864501953125 +-0.212107355892658250295923494377 -0.154103302955627435855134876874 0.594779264926910467004006477509 +-0.212107355892658250295923494377 0.154103302955627435855134876874 0.594779264926910467004006477509 +-0.21210725605487823486328125 -0.12902949750423431396484375 0.0293577499687671661376953125 +-0.21210725605487823486328125 0.12902949750423431396484375 0.0293577499687671661376953125 +-0.212093206495046593396125444997 -0.0765424530953168896774130303129 0.9228527843952178955078125 +-0.212093206495046593396125444997 0.0765424530953168896774130303129 0.9228527843952178955078125 +-0.21207199990749359130859375 -0.0164542496204376220703125 -0.131357252597808837890625 +-0.21207199990749359130859375 0.0164542496204376220703125 -0.131357252597808837890625 +-0.21206760406494140625 -0.133654797077178949527009876874 -0.311710810661315951275440738755 +-0.21206760406494140625 0.133654797077178949527009876874 -0.311710810661315951275440738755 +-0.21205200254917144775390625 -0.91504299640655517578125 -0.343118011951446533203125 +-0.21205200254917144775390625 0.91504299640655517578125 -0.343118011951446533203125 +-0.211986005306243896484375 -0.785893023014068603515625 0.580889999866485595703125 +-0.211986005306243896484375 0.785893023014068603515625 0.580889999866485595703125 +-0.2119292914867401123046875 -0.09777809679508209228515625 -0.188481903076171880551115123126 +-0.2119292914867401123046875 0.09777809679508209228515625 -0.188481903076171880551115123126 +-0.21176855266094207763671875 -0.246016395092010481393529630623 0.130881448090076429879857755623 +-0.21176855266094207763671875 0.246016395092010481393529630623 0.130881448090076429879857755623 +-0.211758255958557156661825615629 -0.108499052375555044003263560626 0.495869544148445196007912727509 +-0.211758255958557156661825615629 0.108499052375555044003263560626 0.495869544148445196007912727509 +-0.211741590499877951891960492503 -0.313113188743591341900440738755 0.130864799022674560546875 +-0.211741590499877951891960492503 0.313113188743591341900440738755 0.130864799022674560546875 +-0.211695246398448944091796875 -0.371238398551940906866519753748 -0.489762631058692943231136496252 +-0.211695246398448944091796875 0.371238398551940906866519753748 -0.489762631058692943231136496252 +-0.211685001850128173828125 -0.0490035004913806915283203125 -0.123645253479480743408203125 +-0.211685001850128173828125 0.0490035004913806915283203125 -0.123645253479480743408203125 +-0.21166475117206573486328125 -0.1283432543277740478515625 -0.03501474857330322265625 +-0.21166475117206573486328125 0.1283432543277740478515625 -0.03501474857330322265625 +-0.21165525913238525390625 -0.651398241519927978515625 0.305585257709026336669921875 +-0.21165525913238525390625 0.651398241519927978515625 0.305585257709026336669921875 +-0.2116200029850006103515625 -0.40608298778533935546875 0.20078249275684356689453125 +-0.2116200029850006103515625 0.40608298778533935546875 0.20078249275684356689453125 +-0.211580203473567957095369251874 -0.898888087272644020764289507497 -0.223011554032564146554662443123 +-0.211580203473567957095369251874 0.898888087272644020764289507497 -0.223011554032564146554662443123 +-0.211309599876403825247095369377 -0.228454804420471196957365123126 -0.25130999088287353515625 +-0.211309599876403825247095369377 0.228454804420471196957365123126 -0.25130999088287353515625 +-0.211191201210021994860710492503 -0.543176794052124045641960492503 0.548048782348632856908920985006 +-0.211191201210021994860710492503 0.543176794052124045641960492503 0.548048782348632856908920985006 +-0.211144499480724334716796875 -0.030507001094520092010498046875 0.7190182507038116455078125 +-0.211144499480724334716796875 0.030507001094520092010498046875 0.7190182507038116455078125 +-0.21107254922389984130859375 -0.511179500818252585681022992503 -0.341531452536582957879573996252 +-0.21107254922389984130859375 0.511179500818252585681022992503 -0.341531452536582957879573996252 +-0.21102900803089141845703125 -0.270401257276535023077457253748 -0.0696408994495868599594601278113 +-0.21102900803089141845703125 0.270401257276535023077457253748 -0.0696408994495868599594601278113 +-0.210763846337795268670589621252 -0.502140092849731489721420985006 0.07703244686126708984375 +-0.210763846337795268670589621252 0.502140092849731489721420985006 0.07703244686126708984375 +-0.210662646591663366146818248126 -0.503934183716774009020866742503 -0.0645870499312877766051599337516 +-0.210662646591663366146818248126 0.503934183716774009020866742503 -0.0645870499312877766051599337516 +-0.2106287479400634765625 -0.03448750078678131103515625 0.13017724454402923583984375 +-0.2106287479400634765625 0.03448750078678131103515625 0.13017724454402923583984375 +-0.2105576992034912109375 -0.301217409968376148565738503748 0.821543401479721047131477007497 +-0.2105576992034912109375 0.301217409968376148565738503748 0.821543401479721047131477007497 +-0.210476195812225347347990123126 -0.508133465051651023181022992503 0 +-0.210476195812225347347990123126 0.508133465051651023181022992503 0 +-0.210304793715477000848323996252 -0.767372381687164373254006477509 0.420608702301979053839176003748 +-0.210304793715477000848323996252 0.767372381687164373254006477509 0.420608702301979053839176003748 +-0.210295200347900390625 -0.647209596633911199425881477509 0.42059040069580078125 +-0.210295200347900390625 0.647209596633911199425881477509 0.42059040069580078125 +-0.210292005538940451891960492503 0 -0.340260791778564497533920985006 +-0.210276456177234644107088001874 -0.3678840100765228271484375 0.151476748287677764892578125 +-0.210276456177234644107088001874 0.3678840100765228271484375 0.151476748287677764892578125 +-0.21023400127887725830078125 -0.85984599590301513671875 -0.4652599990367889404296875 +-0.21023400127887725830078125 0.85984599590301513671875 -0.4652599990367889404296875 +-0.210226106643676746710269753748 -0.6470135152339935302734375 -0.164860498905181868112279630623 +-0.210226106643676746710269753748 0.6470135152339935302734375 -0.164860498905181868112279630623 +-0.210183048248291010073884876874 -0.212387704849243158511384876874 -0.182248497009277338198884876874 +-0.210183048248291010073884876874 0.212387704849243158511384876874 -0.182248497009277338198884876874 +-0.210108801722526578048544365629 -0.412161192297935519146534488755 -0.297451558709144636694077235006 +-0.210108801722526578048544365629 0.412161192297935519146534488755 -0.297451558709144636694077235006 +-0.210101401805877691097990123126 -0.875133025646209761205795985006 0 +-0.210101401805877691097990123126 0.875133025646209761205795985006 0 +-0.210094200074672693423494251874 -0.373661112785339366570980246252 -0.136885946989059453793302623126 +-0.210094200074672693423494251874 0.373661112785339366570980246252 -0.136885946989059453793302623126 +-0.21008799970149993896484375 -0.64657199382781982421875 0.73335397243499755859375 +-0.21008799970149993896484375 0.64657199382781982421875 0.73335397243499755859375 +-0.21004123985767364501953125 -0.0908924974501132965087890625 0.7142280042171478271484375 +-0.21004123985767364501953125 0.0908924974501132965087890625 0.7142280042171478271484375 +-0.210022196918725950753881193123 -0.152588055282831175363256193123 0.913842028379440285412727007497 +-0.210022196918725950753881193123 0.152588055282831175363256193123 0.913842028379440285412727007497 +-0.210019207000732427426115123126 -0.753293609619140713817841970013 0.168643200397491477282585492503 +-0.210019207000732427426115123126 0.753293609619140713817841970013 0.168643200397491477282585492503 +-0.210013604164123540707365123126 -0.316044402122497569695980246252 -0.126531195640563975945980246252 +-0.210013604164123540707365123126 0.316044402122497569695980246252 -0.126531195640563975945980246252 +-0.209959506988525390625 -0.4524194896221160888671875 0.0351249985396862030029296875 +-0.209959506988525390625 0.4524194896221160888671875 0.0351249985396862030029296875 +-0.209901750087738037109375 -0.1150652468204498291015625 0.072119496762752532958984375 +-0.209901750087738037109375 0.1150652468204498291015625 0.072119496762752532958984375 +-0.2099010050296783447265625 -0.07919324934482574462890625 0.11031775176525115966796875 +-0.2099010050296783447265625 0.07919324934482574462890625 0.11031775176525115966796875 +-0.209894394874572759457365123126 -0.218041205406188987048210492503 0.261538410186767600329460492503 +-0.209894394874572759457365123126 0.218041205406188987048210492503 0.261538410186767600329460492503 +-0.209856501221656777111945757497 -0.496275502443313587530582253748 -0.446845716238021828381477007497 +-0.209856501221656777111945757497 0.496275502443313587530582253748 -0.446845716238021828381477007497 +-0.20976449549198150634765625 -0.4529159963130950927734375 -0.02942950092256069183349609375 +-0.20976449549198150634765625 0.4529159963130950927734375 -0.02942950092256069183349609375 +-0.209737801551818842105134876874 -0.2115705013275146484375 0.0353276990354061126708984375 +-0.209737801551818842105134876874 0.2115705013275146484375 0.0353276990354061126708984375 +-0.20973025262355804443359375 -0.075949750840663909912109375 -0.1128932535648345947265625 +-0.20973025262355804443359375 0.075949750840663909912109375 -0.1128932535648345947265625 +-0.209721606969833385125667746252 -0.287371152639389060290397992503 0.419445934891700789037827235006 +-0.209721606969833385125667746252 0.287371152639389060290397992503 0.419445934891700789037827235006 +-0.209717208147048944644197376874 -0.0947176948189735329330929403113 0.263718006014823869165297764994 +-0.209717208147048944644197376874 0.0947176948189735329330929403113 0.263718006014823869165297764994 +-0.209613007307052595651342130623 -0.0784637957811355618575888115629 0.199764597415924061163394753748 +-0.209613007307052595651342130623 0.0784637957811355618575888115629 0.199764597415924061163394753748 +-0.209580397605896001644865123126 -0.336070799827575705798210492503 0.0559683978557586683799662807814 +-0.209580397605896001644865123126 0.336070799827575705798210492503 0.0559683978557586683799662807814 +-0.209545205533504502737329744377 0 -0.398234707117080699578792746252 +-0.20939600467681884765625 -0.337564396858215376440170985006 -0.0469399988651275634765625 +-0.20939600467681884765625 0.337564396858215376440170985006 -0.0469399988651275634765625 +-0.209393797814846044369474498126 -0.454909414052963312347088731258 -0.227401353418827084640341240629 +-0.209393797814846044369474498126 0.454909414052963312347088731258 -0.227401353418827084640341240629 +-0.20937384665012359619140625 -0.229815945029258700271768134371 -0.160770754516124714239566628748 +-0.20937384665012359619140625 0.229815945029258700271768134371 -0.160770754516124714239566628748 +-0.209371498227119451351896373126 -0.558900555968284584729133257497 -0.257476051151752483026058371252 +-0.209371498227119451351896373126 0.558900555968284584729133257497 -0.257476051151752483026058371252 +-0.209264405071735382080078125 -0.523751413822174050061164507497 0.701351094245910688940170985006 +-0.209264405071735382080078125 0.523751413822174050061164507497 0.701351094245910688940170985006 +-0.209157907962799066714509876874 -0.196883994340896595343082253748 0.08654339611530303955078125 +-0.209157907962799066714509876874 0.196883994340896595343082253748 0.08654339611530303955078125 +-0.209110201895236963443025501874 -0.277037104964256264416633257497 -0.775902101397514365466179242503 +-0.209110201895236963443025501874 0.277037104964256264416633257497 -0.775902101397514365466179242503 +-0.209098349511623399221704744377 -0.262658241391181934698551003748 0.299647352099418673443409488755 +-0.209098349511623399221704744377 0.262658241391181934698551003748 0.299647352099418673443409488755 +-0.209057700634002668893529630623 -0.151887595653533935546875 0.152397608757019048519865123126 +-0.209057700634002668893529630623 0.151887595653533935546875 0.152397608757019048519865123126 +-0.209017905592918384893863503748 -0.151858699321746809518529630623 0.236115258932113630807592130623 +-0.209017905592918384893863503748 0.151858699321746809518529630623 0.236115258932113630807592130623 +-0.208999609947204595394865123126 -0.34105598926544189453125 0 +-0.208999609947204595394865123126 0.34105598926544189453125 0 +-0.20899249613285064697265625 -0.3526155054569244384765625 0.2863295078277587890625 +-0.20899249613285064697265625 0.3526155054569244384765625 0.2863295078277587890625 +-0.20897774398326873779296875 -0.258504304289817798956363503748 -0.303321602940559376104801003748 +-0.20897774398326873779296875 0.258504304289817798956363503748 -0.303321602940559376104801003748 +-0.208967542648315435238615123126 -0.373398837447166453973323996252 0.345551237463951166350994981258 +-0.208967542648315435238615123126 0.373398837447166453973323996252 0.345551237463951166350994981258 +-0.208710604906082147769197376874 -0.2113409936428070068359375 -0.042129300534725189208984375 +-0.208710604906082147769197376874 0.2113409936428070068359375 -0.042129300534725189208984375 +-0.208629754185676558053685880623 -0.116319000720977769325337192186 -0.25581954419612884521484375 +-0.208629754185676558053685880623 0.116319000720977769325337192186 -0.25581954419612884521484375 +-0.2085911929607391357421875 -0.0398375988006591796875 -0.211902594566345220394865123126 +-0.2085911929607391357421875 0.0398375988006591796875 -0.211902594566345220394865123126 +-0.20858649909496307373046875 -0.44587099552154541015625 -0.087696500122547149658203125 +-0.20858649909496307373046875 0.44587099552154541015625 -0.087696500122547149658203125 +-0.208531704545021068231136496252 -0.0863141484558582333663778740629 -0.609560889005661077355568977509 +-0.208531704545021068231136496252 0.0863141484558582333663778740629 -0.609560889005661077355568977509 +-0.208499506115913418868856865629 -0.2882583141326904296875 -0.419445934891700789037827235006 +-0.208499506115913418868856865629 0.2882583141326904296875 -0.419445934891700789037827235006 +-0.208463507890701282843082253748 -0.0465961985290050464958433451557 -0.666612094640731789318977007497 +-0.208463507890701282843082253748 0.0465961985290050464958433451557 -0.666612094640731789318977007497 +-0.208408808708190923519865123126 -0.053408801555633544921875 -0.337213993072509765625 +-0.208408808708190923519865123126 0.053408801555633544921875 -0.337213993072509765625 +-0.20836079120635986328125 -0.561078000068664484167868522491 0.0421577990055084228515625 +-0.20836079120635986328125 0.561078000068664484167868522491 0.0421577990055084228515625 +-0.20829899609088897705078125 -0.4423795044422149658203125 0.104461498558521270751953125 +-0.20829899609088897705078125 0.4423795044422149658203125 0.104461498558521270751953125 +-0.208145391941070539987279630623 -0.561629998683929376745993522491 -0.0353196009993553133865518134371 +-0.208145391941070539987279630623 0.561629998683929376745993522491 -0.0353196009993553133865518134371 +-0.208130639791488630807592130623 -0.208211499452590931280582253748 0.189287355542182900158820757497 +-0.208130639791488630807592130623 0.208211499452590931280582253748 0.189287355542182900158820757497 +-0.20809625089168548583984375 -0.051524750888347625732421875 0.1286122500896453857421875 +-0.20809625089168548583984375 0.051524750888347625732421875 0.1286122500896453857421875 +-0.208085105568170530832006193123 -0.752219390869140580591079014994 -0.336699451506137836798160378748 +-0.208085105568170530832006193123 0.752219390869140580591079014994 -0.336699451506137836798160378748 +-0.208079391717910761050447376874 -0.126707401871681196725560880623 0.175066208839416509457365123126 +-0.208079391717910761050447376874 0.126707401871681196725560880623 0.175066208839416509457365123126 +-0.20803250372409820556640625 -0.105589501559734344482421875 0.089851997792720794677734375 +-0.20803250372409820556640625 0.105589501559734344482421875 0.089851997792720794677734375 +-0.2077665030956268310546875 -0.126051247119903564453125 0.0586872510612010955810546875 +-0.2077665030956268310546875 0.126051247119903564453125 0.0586872510612010955810546875 +-0.20771349966526031494140625 -0.13834224641323089599609375 0.01471650041639804840087890625 +-0.20771349966526031494140625 0.13834224641323089599609375 0.01471650041639804840087890625 +-0.2076894938945770263671875 -0.0329370014369487762451171875 -0.135204255580902099609375 +-0.2076894938945770263671875 0.0329370014369487762451171875 -0.135204255580902099609375 +-0.20765359699726104736328125 -0.639086681604385309363181022491 0.196082592010498046875 +-0.20765359699726104736328125 0.639086681604385309363181022491 0.196082592010498046875 +-0.20765049755573272705078125 -0.13810400664806365966796875 -0.017565749585628509521484375 +-0.20765049755573272705078125 0.13810400664806365966796875 -0.017565749585628509521484375 +-0.20728875696659088134765625 -0.63797999918460845947265625 -0.335411243140697479248046875 +-0.20728875696659088134765625 0.63797999918460845947265625 -0.335411243140697479248046875 +-0.207255995273590065686164507497 -0.245807799696922291143863503748 -0.138287450373172748907535378748 +-0.207255995273590065686164507497 0.245807799696922291143863503748 -0.138287450373172748907535378748 +-0.207241556048393227307258257497 -0.888372537493705705102797764994 0.265226709842681873663394753748 +-0.207241556048393227307258257497 0.888372537493705705102797764994 0.265226709842681873663394753748 +-0.207197104394435893670589621252 -0.150536097586154937744140625 0.486732390522956914757912727509 +-0.207197104394435893670589621252 0.150536097586154937744140625 0.486732390522956914757912727509 +-0.207070596516132382491903740629 -0.440824455022811922955128238755 0.255529998242855105328175113755 +-0.207070596516132382491903740629 0.440824455022811922955128238755 0.255529998242855105328175113755 +-0.207062995433807378597990123126 -0.165735304355621337890625 -0.14020259678363800048828125 +-0.207062995433807378597990123126 0.165735304355621337890625 -0.14020259678363800048828125 +-0.206955452263355266229183371252 -0.150361646711826335565120871252 -0.370217236876487720831363503748 +-0.206955452263355266229183371252 0.150361646711826335565120871252 -0.370217236876487720831363503748 +-0.206954097747802739926115123126 -0.0792447030544281005859375 -0.202213507890701277291967130623 +-0.206954097747802739926115123126 0.0792447030544281005859375 -0.202213507890701277291967130623 +-0.20692920684814453125 0 -0.2172102034091949462890625 +-0.206786797940731070788444867503 -0.493020543456077597888054242503 -0.129111952334642426931665681877 +-0.206786797940731070788444867503 0.493020543456077597888054242503 -0.129111952334642426931665681877 +-0.20658449828624725341796875 -0.19133900105953216552734375 0.413173496723175048828125 +-0.20658449828624725341796875 0.19133900105953216552734375 0.413173496723175048828125 +-0.206477594375610362664730246252 -0.150012803077697765008480246252 0.307998394966125521587940738755 +-0.206477594375610362664730246252 0.150012803077697765008480246252 0.307998394966125521587940738755 +-0.206456708908081043585269753748 -0.14999909698963165283203125 -0.157720792293548572882144753748 +-0.206456708908081043585269753748 0.14999909698963165283203125 -0.157720792293548572882144753748 +-0.2064439952373504638671875 -0.112063996493816375732421875 -0.0855714976787567138671875 +-0.2064439952373504638671875 0.112063996493816375732421875 -0.0855714976787567138671875 +-0.2063924968242645263671875 -0.180449706315994246041967130623 -0.121819800138473502415514815311 +-0.2063924968242645263671875 0.180449706315994246041967130623 -0.121819800138473502415514815311 +-0.206336693465709680728181751874 -0.187015950679779052734375 0.353482639789581332134815738755 +-0.206336693465709680728181751874 0.187015950679779052734375 0.353482639789581332134815738755 +-0.206225597858428949527009876874 -0.0465745024383068043083433451557 -0.278929698467254627569644753748 +-0.206225597858428949527009876874 0.0465745024383068043083433451557 -0.278929698467254627569644753748 +-0.206219297647476179635717130623 -0.260222557187080372198551003748 0.110715150833129868934712192186 +-0.206219297647476179635717130623 0.260222557187080372198551003748 0.110715150833129868934712192186 +-0.206214749813079828433259876874 -0.197578495740890480725227007497 -0.202332192659378046206697376874 +-0.206214749813079828433259876874 0.197578495740890480725227007497 -0.202332192659378046206697376874 +-0.20610199868679046630859375 0 -0.97853100299835205078125 +-0.20605830848217010498046875 -0.1849043071269989013671875 -0.6429233849048614501953125 +-0.20605830848217010498046875 0.1849043071269989013671875 -0.6429233849048614501953125 +-0.2060450017452239990234375 0 -0.14158199727535247802734375 +-0.205819791555404668637052623126 -0.248560202121734602487279630623 0.505822205543518088610710492503 +-0.205819791555404668637052623126 0.248560202121734602487279630623 0.505822205543518088610710492503 +-0.205812898278236400262386496252 -0.869753694534301735608039507497 -0.105687899887561803646818248126 +-0.205812898278236400262386496252 0.869753694534301735608039507497 -0.105687899887561803646818248126 +-0.205765508115291595458984375 -0.1494952552020549774169921875 0.70555798709392547607421875 +-0.205765508115291595458984375 0.1494952552020549774169921875 0.70555798709392547607421875 +-0.20576550066471099853515625 -0.31114399433135986328125 -0.3329415023326873779296875 +-0.20576550066471099853515625 0.31114399433135986328125 -0.3329415023326873779296875 +-0.205725106596946705206363503748 -0.283155950903892505987613503748 0 +-0.205725106596946705206363503748 0.283155950903892505987613503748 0 +-0.205675350874662404843107310626 -0.633014568686485312731804242503 -0.528667709231376625744758257497 +-0.205675350874662404843107310626 0.633014568686485312731804242503 -0.528667709231376625744758257497 +-0.20565450191497802734375 -0.064972497522830963134765625 -0.12643100321292877197265625 +-0.20565450191497802734375 0.064972497522830963134765625 -0.12643100321292877197265625 +-0.205548840761184709036157869377 -0.459615641832351706774772992503 0.41109965741634368896484375 +-0.205548840761184709036157869377 0.459615641832351706774772992503 0.41109965741634368896484375 +-0.205540198087692249639957253748 -0.553609192371368408203125 -0.1061604022979736328125 +-0.205540198087692249639957253748 0.553609192371368408203125 -0.1061604022979736328125 +-0.2055202424526214599609375 -0.149319000542163848876953125 -0.7056667506694793701171875 +-0.2055202424526214599609375 0.149319000542163848876953125 -0.7056667506694793701171875 +-0.20548774302005767822265625 -0.124109752476215362548828125 -0.069796502590179443359375 +-0.20548774302005767822265625 0.124109752476215362548828125 -0.069796502590179443359375 +-0.205449604988098166735710492503 -0.737535190582275457238381477509 -0.232018399238586442434595369377 +-0.205449604988098166735710492503 0.737535190582275457238381477509 -0.232018399238586442434595369377 +-0.205311602354049688168302623126 -0.119001004099845875128238503748 -0.551077187061309814453125 +-0.205311602354049688168302623126 0.119001004099845875128238503748 -0.551077187061309814453125 +-0.205292697250843064749048494377 -0.631837785243988037109375 -0.607153522968292280737045985006 +-0.205292697250843064749048494377 0.631837785243988037109375 -0.607153522968292280737045985006 +-0.205245149135589610711605246252 -0.486616897583007856908920985006 0.153552305698394786492855246252 +-0.205245149135589610711605246252 0.486616897583007856908920985006 0.153552305698394786492855246252 +-0.205179293453693400994808371252 -0.0594377987086772904823384067186 -0.874281585216522216796875 +-0.205179293453693400994808371252 0.0594377987086772904823384067186 -0.874281585216522216796875 +-0.205101203918457042352230246252 -0.277509999275207530633480246252 0.202290797233581565173210492503 +-0.205101203918457042352230246252 0.277509999275207530633480246252 0.202290797233581565173210492503 +-0.20502960681915283203125 -0.209642791748046897204460492503 -0.272053194046020518914730246252 +-0.20502960681915283203125 0.209642791748046897204460492503 -0.272053194046020518914730246252 +-0.20497600734233856201171875 -0.19980199635028839111328125 -0.409956514835357666015625 +-0.20497600734233856201171875 0.19980199635028839111328125 -0.409956514835357666015625 +-0.204949490725994110107421875 0 -0.7214542329311370849609375 +-0.2049467563629150390625 -0.102070748805999755859375 -0.1003910005092620849609375 +-0.2049467563629150390625 0.102070748805999755859375 -0.1003910005092620849609375 +-0.204870998859405517578125 -0.1362762451171875 0.044233500957489013671875 +-0.204870998859405517578125 0.1362762451171875 0.044233500957489013671875 +-0.204754498600959788934261496252 -0.395704337954521201403679242503 0.0631944000720977838714276231258 +-0.204754498600959788934261496252 0.395704337954521201403679242503 0.0631944000720977838714276231258 +-0.2047307491302490234375 -0.095429003238677978515625 0.1071382462978363037109375 +-0.2047307491302490234375 0.095429003238677978515625 0.1071382462978363037109375 +-0.204689991474151594674779630623 -0.372141015529632579461605246252 -0.423807585239410367083934261245 +-0.204689991474151594674779630623 0.372141015529632579461605246252 -0.423807585239410367083934261245 +-0.204651600122451787777677623126 -0.549654614925384477075454014994 0.126482400298118580206363503748 +-0.204651600122451787777677623126 0.549654614925384477075454014994 0.126482400298118580206363503748 +-0.204605099558830272332698996252 -0.397276648879051230700554242503 -0.05299154855310916900634765625 +-0.204605099558830272332698996252 0.397276648879051230700554242503 -0.05299154855310916900634765625 +-0.20457780361175537109375 -0.133338296413421625308259876874 -0.174266391992568964175447376874 +-0.20457780361175537109375 0.133338296413421625308259876874 -0.174266391992568964175447376874 +-0.2045679986476898193359375 -0.068315498530864715576171875 0.1264314949512481689453125 +-0.2045679986476898193359375 0.068315498530864715576171875 0.1264314949512481689453125 +-0.204492294788360590152009876874 -0.208133697509765625 0.069737099111080169677734375 +-0.204492294788360590152009876874 0.208133697509765625 0.069737099111080169677734375 +-0.204469208419322978631527121252 -0.211592558026313798391626619377 -0.579586809873580910412727007497 +-0.204469208419322978631527121252 0.211592558026313798391626619377 -0.579586809873580910412727007497 +-0.204449701309204090460269753748 -0.194051402807235706671207253748 -0.102685797214508059416182561563 +-0.204449701309204090460269753748 0.194051402807235706671207253748 -0.102685797214508059416182561563 +-0.204371291399002064093082253748 -0.280526050925254788470653011245 0.0451401978731155381630024692186 +-0.204371291399002064093082253748 0.280526050925254788470653011245 0.0451401978731155381630024692186 +-0.20435750484466552734375 -0.4329355061054229736328125 -0.14423899352550506591796875 +-0.20435750484466552734375 0.4329355061054229736328125 -0.14423899352550506591796875 +-0.20429594814777374267578125 -0.40095269680023193359375 0 +-0.20429594814777374267578125 0.40095269680023193359375 0 +-0.204174005985260004214509876874 -0.0991803020238876259506710653113 0.196153807640075672491519753748 +-0.204174005985260004214509876874 0.0991803020238876259506710653113 0.196153807640075672491519753748 +-0.204150450229644758737279630623 0 -0.284293097257614091333266514994 +-0.204039001464843744448884876874 -0.389665210247039761615184261245 0.408079791069030750616519753748 +-0.204039001464843744448884876874 0.389665210247039761615184261245 0.408079791069030750616519753748 +-0.204019594192504899465845369377 -0.327008390426635764391960492503 0.106965196132659923211605246252 +-0.204019594192504899465845369377 0.327008390426635764391960492503 0.106965196132659923211605246252 +-0.203957104682922357730134876874 -0.867474889755249001233039507497 0.1260530948638916015625 +-0.203957104682922357730134876874 -0.32757885754108428955078125 0.231502506136894242727564119377 +-0.203957104682922357730134876874 0.32757885754108428955078125 0.231502506136894242727564119377 +-0.203957104682922357730134876874 0.867474889755249001233039507497 0.1260530948638916015625 +-0.203954404592514043637052623126 0 0.220005905628204351254240123126 +-0.203857652842998504638671875 -0.422237004339694965704410378748 -0.8262311518192291259765625 +-0.203857652842998504638671875 0.422237004339694965704410378748 -0.8262311518192291259765625 +-0.2038500010967254638671875 -0.1983850002288818359375 -0.95869100093841552734375 +-0.2038500010967254638671875 0.1983850002288818359375 -0.95869100093841552734375 +-0.203762388229370122738615123126 -0.213901591300964366570980246252 0.743455982208252041942841970013 +-0.203762388229370122738615123126 0.213901591300964366570980246252 0.743455982208252041942841970013 +-0.203744792938232444079460492503 -0.627072000503540061266960492503 -0.453066396713256880346420985006 +-0.203744792938232444079460492503 0.627072000503540061266960492503 -0.453066396713256880346420985006 +-0.203642240166664101330695757497 -0.281055602431297291143863503748 -0.0451401978731155381630024692186 +-0.203642240166664101330695757497 0.281055602431297291143863503748 -0.0451401978731155381630024692186 +-0.203602254390716552734375 -0.13516199588775634765625 -0.0527010001242160797119140625 +-0.203602254390716552734375 0.13516199588775634765625 -0.0527010001242160797119140625 +-0.203568744659423817022769753748 -0.176471057534217823370426003748 0.223422503471374489514289507497 +-0.203568744659423817022769753748 0.176471057534217823370426003748 0.223422503471374489514289507497 +-0.203518009185791021176115123126 -0.330069994926452670025440738755 -0.0981548011302948025802450615629 +-0.203518009185791021176115123126 0.330069994926452670025440738755 -0.0981548011302948025802450615629 +-0.203473198413848865850894753748 0 -0.564445817470550559313835492503 +-0.203426790237426768914730246252 -0.0165191993117332451557199846093 0.344012808799743663445980246252 +-0.203426790237426768914730246252 0.0165191993117332451557199846093 0.344012808799743663445980246252 +-0.203401505947113037109375 -0.099289499223232269287109375 -0.445836007595062255859375 +-0.203401505947113037109375 0.099289499223232269287109375 -0.445836007595062255859375 +-0.203365497291088104248046875 -0.487099590897560108526676003748 -0.379310739040374766961605246252 +-0.203365497291088104248046875 0.487099590897560108526676003748 -0.379310739040374766961605246252 +-0.203312897682189935855134876874 -0.26086795330047607421875 -0.114506699144840226600727817186 +-0.203312897682189935855134876874 0.26086795330047607421875 -0.114506699144840226600727817186 +-0.203310790657997120245426003748 -0.5322799980640411376953125 0.406622999906539883685496761245 +-0.203310790657997120245426003748 0.5322799980640411376953125 0.406622999906539883685496761245 +-0.203276091814041132144197376874 -0.0244500003755092620849609375 0.2192738950252532958984375 +-0.203276091814041132144197376874 0.0244500003755092620849609375 0.2192738950252532958984375 +-0.203244806826114676745476117503 -0.391202911734581049163494981258 -0.32886426150798797607421875 +-0.203244806826114676745476117503 0.391202911734581049163494981258 -0.32886426150798797607421875 +-0.203242796659469593389957253748 -0.236479800939559919870092130623 -0.512610590457916237561164507497 +-0.203242796659469593389957253748 0.236479800939559919870092130623 -0.512610590457916237561164507497 +-0.203234255313873291015625 -0.01031200028955936431884765625 0.145222246646881103515625 +-0.203234255313873291015625 0.01031200028955936431884765625 0.145222246646881103515625 +-0.203229600191116327456697376874 0 0.564533400535583429480368522491 +-0.203088197112083423956363503748 -0.625048184394836336963408029987 -0.240976393222808810135049384371 +-0.203088197112083423956363503748 0.625048184394836336963408029987 -0.240976393222808810135049384371 +-0.203067210316658003366185880623 -0.118721050024032589997879938437 0.259169754385948192254573996252 +-0.203067210316658003366185880623 0.118721050024032589997879938437 0.259169754385948192254573996252 +-0.2030330002307891845703125 -0.89100301265716552734375 0.40606701374053955078125 +-0.2030330002307891845703125 0.89100301265716552734375 0.40606701374053955078125 +-0.202998698502778990304662443123 -0.624754267930984430456931022491 0.539419358968734719006477007497 +-0.202998698502778990304662443123 0.624754267930984430456931022491 0.539419358968734719006477007497 +-0.202886098623275751284822376874 -0.237671989202499406301782869377 -0.844007384777069158410256477509 +-0.202886098623275751284822376874 0.237671989202499406301782869377 -0.844007384777069158410256477509 +-0.202885141968727117367521373126 -0.537642958760261580053452235006 0.303772951662540424688785378748 +-0.202885141968727117367521373126 0.537642958760261580053452235006 0.303772951662540424688785378748 +-0.202847194671630870477230246252 -0.451606416702270530016960492503 -0.6284143924713134765625 +-0.202847194671630870477230246252 0.451606416702270530016960492503 -0.6284143924713134765625 +-0.202720499038696294613615123126 -0.220437902212142933233707253748 0.0176483999937772743915598283593 +-0.202720499038696294613615123126 0.220437902212142933233707253748 0.0176483999937772743915598283593 +-0.202692794799804704153345369377 -0.410695219039917014391960492503 0.655930423736572287829460492503 +-0.202692794799804704153345369377 0.410695219039917014391960492503 0.655930423736572287829460492503 +-0.202691602706909196340845369377 -0.106560802459716802426115123126 -0.327964806556701682360710492503 +-0.202691602706909196340845369377 0.106560802459716802426115123126 -0.327964806556701682360710492503 +-0.202648204565048201120092130623 -0.171614992618560779913394753748 0.13957799971103668212890625 +-0.202648204565048201120092130623 0.171614992618560779913394753748 0.13957799971103668212890625 +-0.20262600481510162353515625 -0.3329632580280303955078125 0.64076323807239532470703125 +-0.20262600481510162353515625 0.3329632580280303955078125 0.64076323807239532470703125 +-0.202559405565261835269197376874 -0.0486839979887008639236611884371 0.562671589851379327917868522491 +-0.202559405565261835269197376874 0.0486839979887008639236611884371 0.562671589851379327917868522491 +-0.20250074565410614013671875 -0.46158899366855621337890625 -0.5553645193576812744140625 +-0.20250074565410614013671875 0.46158899366855621337890625 -0.5553645193576812744140625 +-0.202486804127693154065070757497 -0.6232009232044219970703125 -0.687837067246437006140524772491 +-0.202486804127693154065070757497 0.6232009232044219970703125 -0.687837067246437006140524772491 +-0.2023479938507080078125 -0.01649699918925762176513671875 -0.14588749408721923828125 +-0.2023479938507080078125 0.01649699918925762176513671875 -0.14588749408721923828125 +-0.20233474671840667724609375 -0.091506250202655792236328125 -0.114835746586322784423828125 +-0.20233474671840667724609375 0.091506250202655792236328125 -0.114835746586322784423828125 +-0.202323603630065906866519753748 -0.220503008365631109066740123126 -0.0210593998432159409950337192186 +-0.202323603630065906866519753748 0.220503008365631109066740123126 -0.0210593998432159409950337192186 +-0.2023177444934844970703125 -0.0491027496755123138427734375 -0.13840700685977935791015625 +-0.2023177444934844970703125 0.0491027496755123138427734375 -0.13840700685977935791015625 +-0.2022944986820220947265625 -0.4240129888057708740234375 0.1711435019969940185546875 +-0.2022944986820220947265625 0.4240129888057708740234375 0.1711435019969940185546875 +-0.202284789085388189144865123126 -0.0479012012481689480880575615629 0.341740393638610862048210492503 +-0.202284789085388189144865123126 0.0479012012481689480880575615629 0.341740393638610862048210492503 +-0.2022545039653778076171875 -0.1469457447528839111328125 0 +-0.2022545039653778076171875 0.1469457447528839111328125 0 +-0.202183654904365545101896373126 -0.0598815031349658952186665317186 -0.397537654638290438580128238755 +-0.202183654904365545101896373126 0.0598815031349658952186665317186 -0.397537654638290438580128238755 +-0.20215500891208648681640625 -0.72089101374149322509765625 -0.04414950124919414520263671875 +-0.20215500891208648681640625 0.72089101374149322509765625 -0.04414950124919414520263671875 +-0.202133256196975724661157869377 -0.388200590014457724841179242503 -0.1046056486666202545166015625 +-0.202133256196975724661157869377 0.388200590014457724841179242503 -0.1046056486666202545166015625 +-0.20211799442768096923828125 -0.02759574912488460540771484375 0.1445227563381195068359375 +-0.20211799442768096923828125 0.02759574912488460540771484375 0.1445227563381195068359375 +-0.20180200040340423583984375 -0.22889600694179534912109375 0.95230400562286376953125 +-0.20180200040340423583984375 0.22889600694179534912109375 0.95230400562286376953125 +-0.2017695568501949310302734375 -0.3797748386859893798828125 0.847089377045631364282485264994 +-0.2017695568501949310302734375 0.3797748386859893798828125 0.847089377045631364282485264994 +-0.2016769945621490478515625 0 -0.4575220048427581787109375 +-0.201634646952152246646150501874 -0.33512578904628753662109375 -0.222562797367572784423828125 +-0.201634646952152246646150501874 0.33512578904628753662109375 -0.222562797367572784423828125 +-0.201593002676963783947883257497 -0.317980596423149075580028011245 -0.590125906467437677527243522491 +-0.201593002676963783947883257497 0.317980596423149075580028011245 -0.590125906467437677527243522491 +-0.201585602760314952508480246252 0 0.877133685350418135229233485006 +-0.201534010469913482666015625 -0.720490515232086181640625 0.052697248756885528564453125 +-0.201534010469913482666015625 0.720490515232086181640625 0.052697248756885528564453125 +-0.201458944380283361264005748126 -0.475710961222648665014389735006 -0.188714906573295621017294365629 +-0.201458944380283361264005748126 0.475710961222648665014389735006 -0.188714906573295621017294365629 +-0.201449402421712858712865568123 -0.869290846586227350378806022491 -0.32596211135387420654296875 +-0.201449402421712858712865568123 0.869290846586227350378806022491 -0.32596211135387420654296875 +-0.201437705755233759097322376874 -0.115855497121810910310379938437 -0.189737695455551136358707253748 +-0.201437705755233759097322376874 0.115855497121810910310379938437 -0.189737695455551136358707253748 +-0.201417505741119384765625 -0.3095900118350982666015625 0.3370240032672882080078125 +-0.201417505741119384765625 0.3095900118350982666015625 0.3370240032672882080078125 +-0.20138670504093170166015625 -0.746598371863365084522001779987 0.551845499873161338122429242503 +-0.20138670504093170166015625 0.746598371863365084522001779987 0.551845499873161338122429242503 +-0.20134079456329345703125 -0.244368004798889176809595369377 0.244430398941040044613615123126 +-0.20134079456329345703125 0.244368004798889176809595369377 0.244430398941040044613615123126 +-0.2013351917266845703125 -0.106054401397705083676115123126 -0.766952800750732466283920985006 +-0.2013351917266845703125 0.106054401397705083676115123126 -0.766952800750732466283920985006 +-0.201247201859951013735994251874 -0.38279159367084503173828125 0.124378645420074471217297684689 +-0.201247201859951013735994251874 0.38279159367084503173828125 0.124378645420074471217297684689 +-0.201245999336242681332365123126 -0.206456995010375982113615123126 -0.0829188019037246648590411268742 +-0.201245999336242681332365123126 0.206456995010375982113615123126 -0.0829188019037246648590411268742 +-0.201245105266571050472990123126 -0.048737101256847381591796875 0.217083299160003656558259876874 +-0.201245105266571050472990123126 0.048737101256847381591796875 0.217083299160003656558259876874 +-0.201244948804378515072599498126 -0.23657713830471038818359375 -0.32562540471553802490234375 +-0.201244948804378515072599498126 0.23657713830471038818359375 -0.32562540471553802490234375 +-0.201244506239891068899439119377 0 0.402493062615394581182926003748 +-0.201188403367996204718082253748 -0.491522991657257046771434261245 -0.2791559994220733642578125 +-0.201188403367996204718082253748 0.491522991657257046771434261245 -0.2791559994220733642578125 +-0.2011827528476715087890625 -0.121109001338481903076171875 0.08577950298786163330078125 +-0.2011827528476715087890625 0.121109001338481903076171875 0.08577950298786163330078125 +-0.201171597838401772229133257497 -0.181739243865013111456363503748 -0.221361353993415804763955634371 +-0.201171597838401772229133257497 0.181739243865013111456363503748 -0.221361353993415804763955634371 +-0.201030552387237548828125 -0.0929306045174598666092080634371 -0.271017947793006863665965511245 +-0.201030552387237548828125 0.0929306045174598666092080634371 -0.271017947793006863665965511245 +-0.200930406153202067986995871252 -0.0725139029324054773528729356258 0.874281585216522216796875 +-0.200930406153202067986995871252 0.0725139029324054773528729356258 0.874281585216522216796875 +-0.20086105167865753173828125 -0.618186402320861860815170985006 0 +-0.20086105167865753173828125 0.618186402320861860815170985006 0 +-0.20084600150585174560546875 -0.145922243595123291015625 0.0294547490775585174560546875 +-0.20084600150585174560546875 0.145922243595123291015625 0.0294547490775585174560546875 +-0.200832054764032347238256193123 -0.4345208704471588134765625 -0.702394944429397538598891514994 +-0.200832054764032347238256193123 0.4345208704471588134765625 -0.702394944429397538598891514994 +-0.200830009579658491647435880623 -0.433464485406875599249332253748 0.511639797687530539782585492503 +-0.200830009579658491647435880623 0.433464485406875599249332253748 0.511639797687530539782585492503 +-0.200758004188537619860710492503 -0.178788399696350103207365123126 0.296194005012512195929019753748 +-0.200758004188537619860710492503 0.178788399696350103207365123126 0.296194005012512195929019753748 +-0.200694000720977788754240123126 -0.185301607847213750668302623126 0.12403710186481475830078125 +-0.200694000720977788754240123126 0.185301607847213750668302623126 0.12403710186481475830078125 +-0.2006303966045379638671875 -0.0199812009930610649799387346093 -0.222144591808319080694644753748 +-0.2006303966045379638671875 0.0199812009930610649799387346093 -0.222144591808319080694644753748 +-0.200623950362205510922208873126 -0.03530610166490077972412109375 0.401252406835556019171207253748 +-0.200623950362205510922208873126 0.03530610166490077972412109375 0.401252406835556019171207253748 +-0.200611449778079986572265625 -0.337515118718147266729801003748 -0.518014234304428167199318977509 +-0.200611449778079986572265625 0.337515118718147266729801003748 -0.518014234304428167199318977509 +-0.2005977928638458251953125 -0.35906778275966644287109375 0.503319704532623313220085492503 +-0.2005977928638458251953125 0.35906778275966644287109375 0.503319704532623313220085492503 +-0.200549197196960460320980246252 -0.280817198753356922491519753748 -0.202290797233581565173210492503 +-0.200549197196960460320980246252 0.280817198753356922491519753748 -0.202290797233581565173210492503 +-0.200538593530654896124332253748 -0.0595008015632629352897886576557 -0.215043908357620244808927623126 +-0.200538593530654896124332253748 0.0595008015632629352897886576557 -0.215043908357620244808927623126 +-0.200503206253051763363615123126 -0.723869609832763716283920985006 0.275340008735656727179019753748 +-0.200503206253051763363615123126 0.723869609832763716283920985006 0.275340008735656727179019753748 +-0.200471395254135126284822376874 -0.538079988956451371606704014994 -0.174013799428939824887052623126 +-0.200471395254135126284822376874 0.538079988956451371606704014994 -0.174013799428939824887052623126 +-0.200444403290748612844751619377 -0.851578187942504949425881477509 -0.211274103820323938540681751874 +-0.200444403290748612844751619377 0.851578187942504949425881477509 -0.211274103820323938540681751874 +-0.20024724304676055908203125 -0.14548750221729278564453125 -0.0351339988410472869873046875 +-0.20024724304676055908203125 0.14548750221729278564453125 -0.0351339988410472869873046875 +-0.20010960102081298828125 -0.185684001445770269222990123126 -0.292365598678588856085269753748 +-0.20010960102081298828125 0.185684001445770269222990123126 -0.292365598678588856085269753748 +-0.20006050169467926025390625 -0.08477924764156341552734375 0.1236457526683807373046875 +-0.20006050169467926025390625 0.08477924764156341552734375 0.1236457526683807373046875 +-0.200053191184997564144865123126 -0.295552802085876475945980246252 0.180630004405975347347990123126 +-0.200053191184997564144865123126 0.295552802085876475945980246252 0.180630004405975347347990123126 +-0.2000328004360198974609375 -0.145330497622489923648103626874 0.169899898767471302374332253748 +-0.2000328004360198974609375 0.145330497622489923648103626874 0.169899898767471302374332253748 +-0.200000000000000011102230246252 0 0 +-0.199998795986175537109375 -0.0792895972728729359069177462516 0.337214803695678744244190738755 +-0.199998795986175537109375 0.0792895972728729359069177462516 0.337214803695678744244190738755 +-0.199970245361328125 -0.044898249208927154541015625 0.14316450059413909912109375 +-0.199970245361328125 0.044898249208927154541015625 0.14316450059413909912109375 +-0.199800002574920643194644753748 -0.0957660019397735540191973768742 0.557591986656188920434829014994 +-0.199800002574920643194644753748 0.0957660019397735540191973768742 0.557591986656188920434829014994 +-0.199771544337272649594083873126 -0.0366322018206119565109091240629 -0.511125463247299238744858485006 +-0.199771544337272649594083873126 0.0366322018206119565109091240629 -0.511125463247299238744858485006 +-0.199750608205795265881477007497 -0.463986587524414018091079014994 -0.484578514099121060443309261245 +-0.199750608205795265881477007497 0.463986587524414018091079014994 -0.484578514099121060443309261245 +-0.1997223012149333953857421875 -0.816853696107864291064970529987 -0.441996999084949493408203125 +-0.1997223012149333953857421875 0.816853696107864291064970529987 -0.441996999084949493408203125 +-0.199690401554107666015625 -0.260219407081604015008480246252 0.6183926165103912353515625 +-0.199690401554107666015625 0.260219407081604015008480246252 0.6183926165103912353515625 +-0.199628256261348724365234375 -0.61440373957157135009765625 -0.380994021892547607421875 +-0.199628256261348724365234375 0.61440373957157135009765625 -0.380994021892547607421875 +-0.199593791365623468569978626874 -0.273070690035819962915297764994 0.0899706527590751620193643134371 +-0.199593791365623468569978626874 0.273070690035819962915297764994 0.0899706527590751620193643134371 +-0.199583599716424919812141069997 -0.614243394136428810803352007497 0.696686273813247658459602007497 +-0.199583599716424919812141069997 0.614243394136428810803352007497 0.696686273813247658459602007497 +-0.199533998966217041015625 -0.827107012271881103515625 -0.525433003902435302734375 +-0.199533998966217041015625 0.827107012271881103515625 -0.525433003902435302734375 +-0.199487400054931651727230246252 -0.00813499987125396693821155480464 -0.0117732003331184401084819057814 +-0.199487400054931651727230246252 0.00813499987125396693821155480464 -0.0117732003331184401084819057814 +-0.199461595714092249087556751874 -0.613881433010101340563835492503 -0.0765823476016521537124148721887 +-0.199461595714092249087556751874 0.613881433010101340563835492503 -0.0765823476016521537124148721887 +-0.199434909224510181768863503748 -0.229696950316429115979133257497 0.173104397952556610107421875 +-0.199434909224510181768863503748 0.229696950316429115979133257497 0.173104397952556610107421875 +-0.199383401870727561266960492503 -0.015691600739955902099609375 0 +-0.199383401870727561266960492503 0.015691600739955902099609375 0 +-0.1993595063686370849609375 -0.1322824954986572265625 0.072505749762058258056640625 +-0.1993595063686370849609375 0.1322824954986572265625 0.072505749762058258056640625 +-0.199334597587585454769865123126 -0.00825980007648468086967064039072 0.0140525996685028076171875 +-0.199334597587585454769865123126 0.00825980007648468086967064039072 0.0140525996685028076171875 +-0.199286109209060674496427623126 -0.198384559154510503597990123126 0.586027643084526039807258257497 +-0.199286109209060674496427623126 0.198384559154510503597990123126 0.586027643084526039807258257497 +-0.19923450052738189697265625 -0.22699250280857086181640625 0.398472487926483154296875 +-0.19923450052738189697265625 0.22699250280857086181640625 0.398472487926483154296875 +-0.199143894016742706298828125 -0.218805304169654851742521373126 0.339066007733345053942741742503 +-0.199143894016742706298828125 0.218805304169654851742521373126 0.339066007733345053942741742503 +-0.19904623925685882568359375 -0.289638005197048187255859375 -0.66256351768970489501953125 +-0.19904623925685882568359375 0.289638005197048187255859375 -0.66256351768970489501953125 +-0.198991647362709050961271373126 -0.32327844202518463134765625 0.397986605763435419280682481258 +-0.198991647362709050961271373126 0.32327844202518463134765625 0.397986605763435419280682481258 +-0.198989991843700420037777121252 -0.144574655592441564389005748126 -0.491935965418815679406350227509 +-0.198989991843700420037777121252 0.144574655592441564389005748126 -0.491935965418815679406350227509 +-0.198968397080898279360994251874 -0.144557105004787439517244251874 0.865745079517364568566506477509 +-0.198968397080898279360994251874 0.144557105004787439517244251874 0.865745079517364568566506477509 +-0.198964145779609663522435880623 0 0.287946739792823758197215511245 +-0.19889549911022186279296875 -0.7108664810657501220703125 -0.132700502872467041015625 +-0.19889549911022186279296875 0.7108664810657501220703125 -0.132700502872467041015625 +-0.198868808150291453973323996252 -0.612051057815551802221420985006 0.0913483969867229517181073106258 +-0.198868808150291453973323996252 0.612051057815551802221420985006 0.0913483969867229517181073106258 +-0.19886004924774169921875 -0.284483109414577495233089621252 0.775902101397514365466179242503 +-0.19886004924774169921875 0.284483109414577495233089621252 0.775902101397514365466179242503 +-0.198848104476928716488615123126 -0.218387103080749517269865123126 0.0525968983769416822959819057814 +-0.198848104476928716488615123126 0.218387103080749517269865123126 0.0525968983769416822959819057814 +-0.198810897767543792724609375 -0.2913326919078826904296875 0.279462602734565745965511496252 +-0.198810897767543792724609375 0.2913326919078826904296875 0.279462602734565745965511496252 +-0.198766802251338969842464621252 -0.0703944012522697420974893134371 0.39753811061382293701171875 +-0.198766802251338969842464621252 0.0703944012522697420974893134371 0.39753811061382293701171875 +-0.19863949716091156005859375 -0.0806307494640350341796875 -0.12861199676990509033203125 +-0.19863949716091156005859375 0.0806307494640350341796875 -0.12861199676990509033203125 +-0.198621194064617145880191628748 -0.724740582704544000769431022491 0.397241552174091350213558371252 +-0.198621194064617145880191628748 0.724740582704544000769431022491 0.397241552174091350213558371252 +-0.198607003688812261410490123126 0 -0.0235637992620468146587331403907 +-0.19854299724102020263671875 -0.111339747905731201171875 0.103364251554012298583984375 +-0.19854299724102020263671875 0.111339747905731201171875 0.103364251554012298583984375 +-0.198429101705551141909822376874 -0.826514524221420243677016514994 0 +-0.198429101705551141909822376874 0.826514524221420243677016514994 0 +-0.198289000988006586245759876874 -0.0288127005100250223323943288278 0.286969205737113930432258257497 +-0.198289000988006586245759876874 0.0288127005100250223323943288278 0.286969205737113930432258257497 +-0.198233747482299826891960492503 -0.2534829080104827880859375 -0.446037897467613242419304242503 +-0.198233747482299826891960492503 0.2534829080104827880859375 -0.446037897467613242419304242503 +-0.198227798938751226254240123126 -0.0238153994083404561832306711722 -0.0117715999484062205232559605861 +-0.198227798938751226254240123126 0.0238153994083404561832306711722 -0.0117715999484062205232559605861 +-0.198063004016876237356470369377 -0.02395080029964447021484375 0.014049999415874481201171875 +-0.198063004016876237356470369377 0.02395080029964447021484375 0.014049999415874481201171875 +-0.198028606176376326120092130623 -0.274207857251167252954360264994 -0.0899706527590751620193643134371 +-0.198028606176376326120092130623 0.274207857251167252954360264994 -0.0899706527590751620193643134371 +-0.198015201091766374075220369377 0 0.0281071990728378323654013115629 +-0.197991751134395599365234375 -0.50922824442386627197265625 0.51379573345184326171875 +-0.197991751134395599365234375 0.50922824442386627197265625 0.51379573345184326171875 +-0.197952198982238786184595369377 -0.0162282004952430738975444057814 -0.0234860002994537360454518903907 +-0.197952198982238786184595369377 0.0162282004952430738975444057814 -0.0234860002994537360454518903907 +-0.197831703722476964779630748126 -0.347326192259788502081363503748 0.206705255806446080990568248126 +-0.197831703722476964779630748126 0.347326192259788502081363503748 0.206705255806446080990568248126 +-0.197778600454330433233707253748 -0.119203197956085193975894753748 0.191505002975463856085269753748 +-0.197778600454330433233707253748 0.119203197956085193975894753748 0.191505002975463856085269753748 +-0.197707407176494626144247490629 -0.462095710635185286108139735006 0.223336857557296764031917746252 +-0.197707407176494626144247490629 0.462095710635185286108139735006 0.223336857557296764031917746252 +-0.19766549766063690185546875 -0.0329137481749057769775390625 -0.1494827568531036376953125 +-0.19766549766063690185546875 0.0329137481749057769775390625 -0.1494827568531036376953125 +-0.1976501941680908203125 -0.198264294862747186831697376874 0.107822397351264948062166126874 +-0.1976501941680908203125 0.198264294862747186831697376874 0.107822397351264948062166126874 +-0.1976386047899723052978515625 -0.494654113054275479388621761245 0.662387144565582230981704014994 +-0.1976386047899723052978515625 0.494654113054275479388621761245 0.662387144565582230981704014994 +-0.19759650528430938720703125 -0.2872270047664642333984375 -0.3584080040454864501953125 +-0.19759650528430938720703125 0.2872270047664642333984375 -0.3584080040454864501953125 +-0.197544908523559548108039507497 -0.607971692085266024463408029987 0.285212907195091236456363503748 +-0.197544908523559548108039507497 0.607971692085266024463408029987 0.285212907195091236456363503748 +-0.197537803649902365954460492503 -0.0312864005565643352180238423443 0 +-0.197537803649902365954460492503 0.0312864005565643352180238423443 0 +-0.19745810329914093017578125 -0.1613073050975799560546875 -0.239771008491516085525674384371 +-0.19745810329914093017578125 0.1613073050975799560546875 -0.239771008491516085525674384371 +-0.197455805540084822213842130623 -0.527605211734771706311164507497 0.206504398584365839175447376874 +-0.197455805540084822213842130623 0.527605211734771706311164507497 0.206504398584365839175447376874 +-0.197343003749847423211605246252 -0.0164644002914428703998606096093 0.028011798858642578125 +-0.197343003749847423211605246252 0.0164644002914428703998606096093 0.028011798858642578125 +-0.1972219944000244140625 -0.299913597106933604852230246252 -0.176508796215057384149105246252 +-0.1972219944000244140625 0.299913597106933604852230246252 -0.176508796215057384149105246252 +-0.197212797403335554635717130623 -0.0697353020310401833237179403113 0.215044498443603515625 +-0.197212797403335554635717130623 0.0697353020310401833237179403113 0.215044498443603515625 +-0.197167494893074030093416126874 -0.355575594305992115362613503748 -0.192849299311637883969083873126 +-0.197167494893074030093416126874 0.355575594305992115362613503748 -0.192849299311637883969083873126 +-0.19716499745845794677734375 -0.606821000576019287109375 -0.76999700069427490234375 +-0.19716499745845794677734375 0.606821000576019287109375 -0.76999700069427490234375 +-0.1971517503261566162109375 -0.60675899684429168701171875 0.394303500652313232421875 +-0.1971517503261566162109375 0.60675899684429168701171875 0.394303500652313232421875 +-0.19706819951534271240234375 -0.0284732010215520831009072821871 0.671083700656890824731704014994 +-0.19706819951534271240234375 0.0284732010215520831009072821871 0.671083700656890824731704014994 +-0.197055298089981067999332253748 -0.0976583987474441556075888115629 -0.2040393054485321044921875 +-0.197055298089981067999332253748 0.0976583987474441556075888115629 -0.2040393054485321044921875 +-0.1968930065631866455078125 -0.7062127590179443359375 0.1581030003726482391357421875 +-0.1968930065631866455078125 0.7062127590179443359375 0.1581030003726482391357421875 +-0.196871140599250787905916126874 -0.0563510477542877169510049384371 0.283841943740844704358039507497 +-0.196871140599250787905916126874 0.0563510477542877169510049384371 0.283841943740844704358039507497 +-0.196819245815277099609375 -0.0618302486836910247802734375 0.1412059962749481201171875 +-0.196819245815277099609375 0.0618302486836910247802734375 0.1412059962749481201171875 +-0.196809601783752452508480246252 -0.260740804672241199835269753748 -0.730260801315307683800881477509 +-0.196809601783752452508480246252 0.260740804672241199835269753748 -0.730260801315307683800881477509 +-0.196801793575286848581029630623 -0.217589396238327015264957253748 -0.062640599906444549560546875 +-0.196801793575286848581029630623 0.217589396238327015264957253748 -0.062640599906444549560546875 +-0.196798199415206903628572376874 -0.471425986289978005139289507497 0.314687991142272915912059261245 +-0.196798199415206903628572376874 0.471425986289978005139289507497 0.314687991142272915912059261245 +-0.196795892715454084909154630623 -0.199936109781265247686832253748 0.20927725732326507568359375 +-0.196795892715454084909154630623 0.199936109781265247686832253748 0.20927725732326507568359375 +-0.1967065036296844482421875 -0.02033700048923492431640625 0.4592309892177581787109375 +-0.1967065036296844482421875 0.02033700048923492431640625 0.4592309892177581787109375 +-0.196676397323608420641960492503 -0.00813539996743202313556064808608 -0.0353866010904312147666850307814 +-0.196676397323608420641960492503 0.00813539996743202313556064808608 -0.0353866010904312147666850307814 +-0.196651196479797368832365123126 -0.109875595569610601254240123126 0.33053839206695556640625 +-0.196651196479797368832365123126 0.109875595569610601254240123126 0.33053839206695556640625 +-0.196618402004241965563835492503 -0.265135598182678233758480246252 -0.225929999351501487048210492503 +-0.196618402004241965563835492503 0.265135598182678233758480246252 -0.225929999351501487048210492503 +-0.196593743562698375360042746252 -0.319034707546234141961605246252 -0.249133953452110284976228626874 +-0.196593743562698375360042746252 0.319034707546234141961605246252 -0.249133953452110284976228626874 +-0.19656549394130706787109375 -0.14281199872493743896484375 0.0588787496089935302734375 +-0.19656549394130706787109375 0.14281199872493743896484375 0.0588787496089935302734375 +-0.19648300111293792724609375 -0.82844197750091552734375 0.52447998523712158203125 +-0.19648300111293792724609375 0.82844197750091552734375 0.52447998523712158203125 +-0.1964350044727325439453125 -0.4709109961986541748046875 0.860032975673675537109375 +-0.1964350044727325439453125 0.4709109961986541748046875 0.860032975673675537109375 +-0.196334105730056773797542746252 -0.841616088151931784899772992503 0.251267409324646029400440738755 +-0.196334105730056773797542746252 0.841616088151931784899772992503 0.251267409324646029400440738755 +-0.196317493915557861328125 -0.3919200003147125244140625 -0.24053649604320526123046875 +-0.196317493915557861328125 0.3919200003147125244140625 -0.24053649604320526123046875 +-0.196254095435142494885383257497 -0.245215955376625049932926003748 0.154445196688175190313785378748 +-0.196254095435142494885383257497 0.245215955376625049932926003748 0.154445196688175190313785378748 +-0.196253204345703147204460492503 -0.347413611412048350945980246252 0.0280791997909545926193075615629 +-0.196253204345703147204460492503 0.347413611412048350945980246252 0.0280791997909545926193075615629 +-0.196167004108428938424779630623 -0.291121208667755093646434261245 0.486586797237396229132144753748 +-0.196167004108428938424779630623 0.291121208667755093646434261245 0.486586797237396229132144753748 +-0.19616425037384033203125 -0.11710675060749053955078125 -0.10151650011539459228515625 +-0.19616425037384033203125 0.11710675060749053955078125 -0.10151650011539459228515625 +-0.196071302890777593441740123126 -0.119482205808162697535657059689 -0.387014409899711642193409488755 +-0.196071302890777593441740123126 0.119482205808162697535657059689 -0.387014409899711642193409488755 +-0.196038490533828713147102007497 -0.0848329976201057378570880018742 0.666612803936004638671875 +-0.196038490533828713147102007497 0.0848329976201057378570880018742 0.666612803936004638671875 +-0.196026194095611588918970369377 -0.0319222003221511854698100307814 -0.0235515996813774122764506557814 +-0.196026194095611588918970369377 0.0319222003221511854698100307814 -0.0235515996813774122764506557814 +-0.196017794311046628097372490629 -0.187785947322845481188835492503 0.478344351053237970550213731258 +-0.196017794311046628097372490629 0.187785947322845481188835492503 0.478344351053237970550213731258 +-0.196007204055786143914730246252 -0.347889995574951205181690738755 -0.0235311999917030348350444057814 +-0.196007204055786143914730246252 0.347889995574951205181690738755 -0.0235311999917030348350444057814 +-0.195950147509574901238948996252 -0.367124453186988886077557481258 -0.359615838527679476666065738755 +-0.195950147509574901238948996252 0.367124453186988886077557481258 -0.359615838527679476666065738755 +-0.195844805240631109066740123126 -0.707971191406250088817841970013 -0.316893601417541526110710492503 +-0.195844805240631109066740123126 0.707971191406250088817841970013 -0.316893601417541526110710492503 +-0.195796898752450931890933816248 0 -0.929604452848434403833266514994 +-0.195791405439376814401342130623 -0.142249202728271489926115123126 0.549027013778686456824118522491 +-0.195791405439376814401342130623 0.142249202728271489926115123126 0.549027013778686456824118522491 +-0.1957775056362152099609375 -0.3793235123157501220703125 0.2603555023670196533203125 +-0.1957775056362152099609375 0.3793235123157501220703125 0.2603555023670196533203125 +-0.1957762539386749267578125 -0.12949199974536895751953125 -0.086043499410152435302734375 +-0.1957762539386749267578125 0.12949199974536895751953125 -0.086043499410152435302734375 +-0.19576275348663330078125 0 -0.155489504337310791015625 +-0.19575925171375274658203125 -0.15479600429534912109375 0.01471650041639804840087890625 +-0.19575925171375274658203125 0.15479600429534912109375 0.01471650041639804840087890625 +-0.195718953013420099429353626874 -0.02335934899747371673583984375 -0.289220404624938920434829014994 +-0.195718953013420099429353626874 0.02335934899747371673583984375 -0.289220404624938920434829014994 +-0.195716404914855979235710492503 -0.039454400539398193359375 -0.0117655999958515174175222028907 +-0.195716404914855979235710492503 0.039454400539398193359375 -0.0117655999958515174175222028907 +-0.195684300363063806704744251874 -0.1050484478473663330078125 0.3913726508617401123046875 +-0.195684300363063806704744251874 0.1050484478473663330078125 0.3913726508617401123046875 +-0.195608401298522971423210492503 -0.02669639885425567626953125 -0.347885990142822287829460492503 +-0.195608401298522971423210492503 0.02669639885425567626953125 -0.347885990142822287829460492503 +-0.195573747158050537109375 -0.06566475331783294677734375 -0.14120574295520782470703125 +-0.195573747158050537109375 0.06566475331783294677734375 -0.14120574295520782470703125 +-0.195527994632720969470085492503 -0.0396447986364364679534588731258 0.0140395998954772963096537807814 +-0.195527994632720969470085492503 0.0396447986364364679534588731258 0.0140395998954772963096537807814 +-0.19552700221538543701171875 -0.385901987552642822265625 -0.901580989360809326171875 +-0.19552700221538543701171875 0.385901987552642822265625 -0.901580989360809326171875 +-0.19551299512386322021484375 -0.15480999648571014404296875 -0.017565749585628509521484375 +-0.19551299512386322021484375 0.15480999648571014404296875 -0.017565749585628509521484375 +-0.1954109966754913330078125 -0.342681598663330089227230246252 -0.452088582515716541632144753748 +-0.1954109966754913330078125 0.342681598663330089227230246252 -0.452088582515716541632144753748 +-0.195402204990386962890625 -0.0242382004857063307334819057814 -0.0350784003734588636924662807814 +-0.195402204990386962890625 0.0242382004857063307334819057814 -0.0350784003734588636924662807814 +-0.195382404327392594778345369377 -0.0322008013725280789474325615629 0.02808620035648345947265625 +-0.195382404327392594778345369377 0.0322008013725280789474325615629 0.02808620035648345947265625 +-0.195331203937530534231470369377 -0.00826020017266273533229625769536 0.0421606004238128662109375 +-0.195331203937530534231470369377 0.00826020017266273533229625769536 0.0421606004238128662109375 +-0.1953105032444000244140625 -0.141899453103542322329744251874 0.253413301706314098016292746252 +-0.1953105032444000244140625 0.141899453103542322329744251874 0.253413301706314098016292746252 +-0.1953015029430389404296875 -0.059537999331951141357421875 0.456412494182586669921875 +-0.1953015029430389404296875 0.059537999331951141357421875 0.456412494182586669921875 +-0.195209956169128423519865123126 -0.60079826414585113525390625 -0.153084748983383173159822376874 +-0.195209956169128423519865123126 0.60079826414585113525390625 -0.153084748983383173159822376874 +-0.195155459642410267218082253748 -0.289501452445983853412059261245 0.0245619487017393091365935475778 +-0.195155459642410267218082253748 0.289501452445983853412059261245 0.0245619487017393091365935475778 +-0.195149351656436931268245871252 -0.404133957624435435906917746252 0.317950588464736949578792746252 +-0.195149351656436931268245871252 0.404133957624435435906917746252 0.317950588464736949578792746252 +-0.1950016021728515625 -0.342134809494018587994190738755 -0.0701291978359222384353799384371 +-0.1950016021728515625 0.342134809494018587994190738755 -0.0701291978359222384353799384371 +-0.194939854741096485479801003748 -0.289956444501876797747996761245 -0.0205856002867221832275390625 +-0.194939854741096485479801003748 0.289956444501876797747996761245 -0.0205856002867221832275390625 +-0.194866751134395610467464621252 -0.460827252268791232037159488755 -0.414928165078163158074886496252 +-0.194866751134395610467464621252 0.460827252268791232037159488755 -0.414928165078163158074886496252 +-0.194836199283599853515625 -0.471858000755310036389289507497 -0.315259802341461170538394753748 +-0.194836199283599853515625 0.471858000755310036389289507497 -0.315259802341461170538394753748 +-0.194834697246551502569644753748 -0.228121501207351667916967130623 0 +-0.194834697246551502569644753748 0.228121501207351667916967130623 0 +-0.194834005832672130242855246252 -0.339210796356201216283920985006 0.0835211992263794056334802462516 +-0.194834005832672130242855246252 0.339210796356201216283920985006 0.0835211992263794056334802462516 +-0.19459550082683563232421875 -0.100837253034114837646484375 0.120268248021602630615234375 +-0.19459550082683563232421875 0.100837253034114837646484375 0.120268248021602630615234375 +-0.194474196434021001644865123126 -0.0466883987188339288909588731258 0 +-0.194474196434021001644865123126 0.0466883987188339288909588731258 0 +-0.194378848373889911993472878748 -0.821434044837951682360710492503 -0.0998163498938083593170489393742 +-0.194378848373889911993472878748 0.821434044837951682360710492503 -0.0998163498938083593170489393742 +-0.19437420368194580078125 0 -0.0471026003360748291015625 +-0.194278192520141584909154630623 -0.165555900335311895199552623126 0.157629901170730585269197376874 +-0.194278192520141584909154630623 0.165555900335311895199552623126 0.157629901170730585269197376874 +-0.194215351343154901675447376874 -0.0835352011024951823792150662484 0.278930407762527421411391514994 +-0.194215351343154901675447376874 0.0835352011024951823792150662484 0.278930407762527421411391514994 +-0.19415749609470367431640625 -0.1410630047321319580078125 -0.0700294971466064453125 +-0.19415749609470367431640625 0.1410630047321319580078125 -0.0700294971466064453125 +-0.194038403034210216180355246252 -0.0245598003268241889263112653907 0.0417843997478485121299662807814 +-0.194038403034210216180355246252 0.0245598003268241889263112653907 0.0417843997478485121299662807814 +-0.193980002403259299548210492503 -0.312080407142639182360710492503 0.158043205738067626953125 +-0.193980002403259299548210492503 0.312080407142639182360710492503 0.158043205738067626953125 +-0.19392450153827667236328125 -0.1067830026149749755859375 -0.11614950001239776611328125 +-0.19392450153827667236328125 0.1067830026149749755859375 -0.11614950001239776611328125 +-0.193887547403573973214818693123 -0.5967356860637664794921875 -0.573422771692275956567641514994 +-0.193887547403573973214818693123 0.5967356860637664794921875 -0.573422771692275956567641514994 +-0.193783605098724387438835492503 -0.206446003913879405633480246252 0.282538390159606966900440738755 +-0.193783605098724387438835492503 0.206446003913879405633480246252 0.282538390159606966900440738755 +-0.193780443817377079351871316248 -0.0561356987804174437095561245314 -0.8257103860378265380859375 +-0.193780443817377079351871316248 0.0561356987804174437095561245314 -0.8257103860378265380859375 +-0.193779605627059925421207253748 -0.181721699237823469674779630623 -0.139379703998565668277009876874 +-0.193779605627059925421207253748 0.181721699237823469674779630623 -0.139379703998565668277009876874 +-0.193770593404769903012052623126 -0.166421091556549077816740123126 -0.157343405485153187139957253748 +-0.193770593404769903012052623126 0.166421091556549077816740123126 -0.157343405485153187139957253748 +-0.193742203712463395559595369377 -0.0161144003272056593467631557814 -0.0469493985176086467414613423443 +-0.193742203712463395559595369377 0.0161144003272056593467631557814 -0.0469493985176086467414613423443 +-0.193657501041889168469367632497 -0.188465750217437721936164507497 -0.910756450891494706567641514994 +-0.193657501041889168469367632497 0.188465750217437721936164507497 -0.910756450891494706567641514994 +-0.193633800745010381527677623126 -0.210185694694519031866519753748 0.0912572979927062932770098768742 +-0.193633800745010381527677623126 0.210185694694519031866519753748 0.0912572979927062932770098768742 +-0.193581998348236083984375 -0.1661694943904876708984375 -0.4300160109996795654296875 +-0.193581998348236083984375 0.1661694943904876708984375 -0.4300160109996795654296875 +-0.193576800823211686575220369377 -0.595778417587280340050881477509 -0.497569608688354536596420985006 +-0.193576800823211686575220369377 0.595778417587280340050881477509 -0.497569608688354536596420985006 +-0.193573257327079778500333873126 -0.0432678986340761170814595004686 -0.618996945023536748742287727509 +-0.193573257327079778500333873126 0.0432678986340761170814595004686 -0.618996945023536748742287727509 +-0.193505394458770768606470369377 -0.208894501626491563284204744377 -0.348452103137969981805355246252 +-0.193505394458770768606470369377 0.208894501626491563284204744377 -0.348452103137969981805355246252 +-0.193469506502151472604467130623 -0.595447999238967851098891514994 -0.31305049359798431396484375 +-0.193469506502151472604467130623 0.595447999238967851098891514994 -0.31305049359798431396484375 +-0.193294498324394214971988503748 -0.229601049423217767886384876874 -0.180057504773139948062166126874 +-0.193294498324394214971988503748 0.229601049423217767886384876874 -0.180057504773139948062166126874 +-0.193265998363494867495759876874 -0.515908205509185813220085492503 -0.237670201063156116827457253748 +-0.193265998363494867495759876874 0.515908205509185813220085492503 -0.237670201063156116827457253748 +-0.1932082474231719970703125 0 0.15865249931812286376953125 +-0.193148392438888538702457253748 -0.0399765014648437513877787807814 -0.226043093204498279913394753748 +-0.193148392438888538702457253748 0.0399765014648437513877787807814 -0.226043093204498279913394753748 +-0.19312830269336700439453125 -0.400014004111290011334034488755 -0.782745301723480224609375 +-0.19312830269336700439453125 0.400014004111290011334034488755 -0.782745301723480224609375 +-0.1930280029773712158203125 -0.97942602634429931640625 -0.0588590018451213836669921875 +-0.1930280029773712158203125 0.97942602634429931640625 -0.0588590018451213836669921875 +-0.1929984986782073974609375 -0.06662750244140625 -0.456412494182586669921875 +-0.1929984986782073974609375 0.06662750244140625 -0.456412494182586669921875 +-0.1929162442684173583984375 -0.15273074805736541748046875 0.044233500957489013671875 +-0.1929162442684173583984375 0.15273074805736541748046875 0.044233500957489013671875 +-0.192881350219249708688451505623 -0.8464528620243072509765625 0.385763663053512562139957253748 +-0.192881350219249708688451505623 0.8464528620243072509765625 0.385763663053512562139957253748 +-0.192875194549560563528345369377 -0.0474166005849838284591513115629 -0.02346999943256378173828125 +-0.192875194549560563528345369377 0.0474166005849838284591513115629 -0.02346999943256378173828125 +-0.192824399471282964535490123126 -0.0398656010627746609786825615629 -0.035064399242401123046875 +-0.192824399471282964535490123126 0.0398656010627746609786825615629 -0.035064399242401123046875 +-0.192821197211742401123046875 -0.593437632918357826916633257497 0.1820766925811767578125 +-0.192821197211742401123046875 0.593437632918357826916633257497 0.1820766925811767578125 +-0.192646002769470220394865123126 -0.160386002063751226254240123126 -0.31171119213104248046875 +-0.192646002769470220394865123126 0.160386002063751226254240123126 -0.31171119213104248046875 +-0.192626154422760015316740123126 -0.819281840324401877673210492503 0.11905014514923095703125 +-0.192626154422760015316740123126 0.819281840324401877673210492503 0.11905014514923095703125 +-0.192612397670745866262720369377 -0.317059206962585493627670985006 -0.149578797817230241262720369377 +-0.192612397670745866262720369377 0.317059206962585493627670985006 -0.149578797817230241262720369377 +-0.192609004676342010498046875 -0.6914392411708831787109375 -0.217517249286174774169921875 +-0.192609004676342010498046875 0.6914392411708831787109375 -0.217517249286174774169921875 +-0.19255374372005462646484375 -0.02056024968624114990234375 0.1581149995326995849609375 +-0.19255374372005462646484375 0.02056024968624114990234375 0.1581149995326995849609375 +-0.1925404965877532958984375 -0.079193003475666046142578125 0.1384074985980987548828125 +-0.1925404965877532958984375 0.079193003475666046142578125 0.1384074985980987548828125 +-0.1925075054168701171875 -0.098635502159595489501953125 0.4507904946804046630859375 +-0.1925075054168701171875 0.098635502159595489501953125 0.4507904946804046630859375 +-0.192503154277801513671875 -0.139861397445201873779296875 -0.256673556566238414422542746252 +-0.192503154277801513671875 0.139861397445201873779296875 -0.256673556566238414422542746252 +-0.192490804195404041632144753748 -0.0796745985746383639236611884371 -0.562671589851379327917868522491 +-0.192490804195404041632144753748 0.0796745985746383639236611884371 -0.562671589851379327917868522491 +-0.192489302158355718441740123126 -0.196048504114151006527677623126 -0.12046949565410614013671875 +-0.192489302158355718441740123126 0.196048504114151006527677623126 -0.12046949565410614013671875 +-0.192395341396331770456029630623 -0.0701281018555164337158203125 -0.283841609954833984375 +-0.192395341396331770456029630623 0.0701281018555164337158203125 -0.283841609954833984375 +-0.192347551882267014944360994377 -0.0300190486013889312744140625 -0.405710560083389293328792746252 +-0.192347551882267014944360994377 0.0300190486013889312744140625 -0.405710560083389293328792746252 +-0.192252302169799799136384876874 -0.227595305442810036389289507497 0.035204999148845672607421875 +-0.192252302169799799136384876874 0.227595305442810036389289507497 0.035204999148845672607421875 +-0.192193400859832774774105246252 -0.0477347999811172513107138115629 0.0279841989278793341899831403907 +-0.192193400859832774774105246252 0.0477347999811172513107138115629 0.0279841989278793341899831403907 +-0.192169207334518421514957253748 -0.0903762012720108059982138115629 0.211903506517410272769197376874 +-0.192169207334518421514957253748 0.0903762012720108059982138115629 0.211903506517410272769197376874 +-0.19213099777698516845703125 -0.978851974010467529296875 0.070249997079372406005859375 +-0.19213099777698516845703125 0.978851974010467529296875 0.070249997079372406005859375 +-0.192047807574272144659488503748 -0.139528904855251295602514005623 0.6585207879543304443359375 +-0.192047807574272144659488503748 0.139528904855251295602514005623 0.6585207879543304443359375 +-0.192002797126770041735710492503 -0.0547406017780303968955912807814 -0.01176320016384124755859375 +-0.192002797126770041735710492503 0.0547406017780303968955912807814 -0.01176320016384124755859375 +-0.191993200778961203845085492503 0 0.0560234010219574016242738423443 +-0.191955745220184326171875 -0.284258800745010364874332253748 0.0696412488818168584625567518742 +-0.191955745220184326171875 0.284258800745010364874332253748 0.0696412488818168584625567518742 +-0.191860198974609375 -0.246393010020256014724893134371 -0.158051253855228418521150501874 +-0.191860198974609375 0.246393010020256014724893134371 -0.158051253855228418521150501874 +-0.191850602626800537109375 -0.0321240007877349881271200615629 -0.0464910000562667874435263115629 +-0.191850602626800537109375 0.0321240007877349881271200615629 -0.0464910000562667874435263115629 +-0.191829603910446178094417746252 -0.590400874614715576171875 -0.651635116338729836193977007497 +-0.191829603910446178094417746252 0.590400874614715576171875 -0.651635116338729836193977007497 +-0.191818892955780029296875 -0.139364400506019586734041126874 -0.658622300624847389904914507497 +-0.191818892955780029296875 0.139364400506019586734041126874 -0.658622300624847389904914507497 +-0.191807997226715098992855246252 -0.0801464021205902099609375 -0.341739988327026400494190738755 +-0.191807997226715098992855246252 0.0801464021205902099609375 -0.341739988327026400494190738755 +-0.19179379940032958984375 -0.0549380004405975383430238423443 0.0140353992581367503084122105861 +-0.19179379940032958984375 0.0549380004405975383430238423443 0.0140353992581367503084122105861 +-0.19172774255275726318359375 -0.01651049964129924774169921875 -0.15958650410175323486328125 +-0.19172774255275726318359375 0.01651049964129924774169921875 -0.15958650410175323486328125 +-0.191711900383234018496736439374 -0.217451206594705570562808816248 0.9046888053417205810546875 +-0.191711900383234018496736439374 0.217451206594705570562808816248 0.9046888053417205810546875 +-0.191679203510284446032585492503 -0.248094391822814952508480246252 -0.248411202430725119860710492503 +-0.191679203510284446032585492503 0.248094391822814952508480246252 -0.248411202430725119860710492503 +-0.191614648699760442562833873126 -0.224467989802360518014623380623 -0.797118085622787408972556022491 +-0.191614648699760442562833873126 0.224467989802360518014623380623 -0.797118085622787408972556022491 +-0.19160349667072296142578125 -0.456490993499755859375 0.0700294971466064453125 +-0.19160349667072296142578125 0.456490993499755859375 0.0700294971466064453125 +-0.19157774746417999267578125 -0.049596250057220458984375 -0.15276825428009033203125 +-0.19157774746417999267578125 0.049596250057220458984375 -0.15276825428009033203125 +-0.19151149690151214599609375 -0.4581219851970672607421875 -0.058715499937534332275390625 +-0.19151149690151214599609375 0.4581219851970672607421875 -0.058715499937534332275390625 +-0.1915007531642913818359375 -0.1265729963779449462890625 0.099029250442981719970703125 +-0.1915007531642913818359375 0.1265729963779449462890625 0.099029250442981719970703125 +-0.191465105116367356741235994377 -0.30037455260753631591796875 -0.274984198808670032843082253748 +-0.191465105116367356741235994377 0.30037455260753631591796875 -0.274984198808670032843082253748 +-0.19146375358104705810546875 -0.151868999004364013671875 -0.0527010001242160797119140625 +-0.19146375358104705810546875 0.151868999004364013671875 -0.0527010001242160797119140625 +-0.1914584934711456298828125 -0.0788591980934143094161825615629 -0.217082691192626936471654630623 +-0.1914584934711456298828125 0.0788591980934143094161825615629 -0.217082691192626936471654630623 +-0.191415596008300770147769753748 0 -0.230997902154922468698217130623 +-0.191408002376556418688835492503 -0.0402372002601623576789613423443 0.04176039993762969970703125 +-0.191408002376556418688835492503 0.0402372002601623576789613423443 0.04176039993762969970703125 +-0.19140160083770751953125 -0.268925595283508289679019753748 0.225930404663085948602230246252 +-0.19140160083770751953125 0.268925595283508289679019753748 0.225930404663085948602230246252 +-0.191395354270935069695980246252 -0.139054955542087549380525501874 0.382794302701950084344417746252 +-0.191395354270935069695980246252 0.139054955542087549380525501874 0.382794302701950084344417746252 +-0.191354405879974376336605246252 -0.016300000250339508056640625 0.0558369994163513197471537807814 +-0.191354405879974376336605246252 0.016300000250339508056640625 0.0558369994163513197471537807814 +-0.19134199619293212890625 -0.461939513683319091796875 0 +-0.19134199619293212890625 0.461939513683319091796875 0 +-0.191339857876300811767578125 -0.17169685661792755126953125 -0.59700028598308563232421875 +-0.191339857876300811767578125 0.17169685661792755126953125 -0.59700028598308563232421875 +-0.19128619134426116943359375 0 -0.673357284069061257092414507497 +-0.191249808669090248791633257497 -0.260222202539443947522102007497 0.134936895966529829538060880623 +-0.191249808669090248791633257497 0.260222202539443947522102007497 0.134936895966529829538060880623 +-0.191231405735015874691740123126 -0.00812840014696121319903721058608 -0.058004200458526611328125 +-0.191231405735015874691740123126 0.00812840014696121319903721058608 -0.058004200458526611328125 +-0.191225248575210587942407869377 -0.373864960670471202508480246252 -0.161733596026897435971036998126 +-0.191225248575210587942407869377 0.373864960670471202508480246252 -0.161733596026897435971036998126 +-0.191222855448722833804353626874 -0.285681208968162514416633257497 -0.0657268516719341222565020643742 +-0.191222855448722833804353626874 0.285681208968162514416633257497 -0.0657268516719341222565020643742 +-0.191150106489658355712890625 -0.359786689281463623046875 0.802505725622177146227897992503 +-0.191150106489658355712890625 0.359786689281463623046875 0.802505725622177146227897992503 +-0.191144102811813348941072376874 -0.227380496263504011666967130623 -0.0419762983918189960808042826557 +-0.191144102811813348941072376874 0.227380496263504011666967130623 -0.0419762983918189960808042826557 +-0.191057598590850835629240123126 -0.588004016876220725329460492503 0.507688808441162153783920985006 +-0.191057598590850835629240123126 0.588004016876220725329460492503 0.507688808441162153783920985006 +-0.19102723896503448486328125 -0.200532741844654083251953125 0.6969899833202362060546875 +-0.19102723896503448486328125 0.200532741844654083251953125 0.6969899833202362060546875 +-0.1910107433795928955078125 -0.58788000047206878662109375 -0.42474974691867828369140625 +-0.1910107433795928955078125 0.58788000047206878662109375 -0.42474974691867828369140625 +-0.1910080015659332275390625 -0.3746919929981231689453125 -0.2704105079174041748046875 +-0.1910080015659332275390625 0.3746919929981231689453125 -0.2704105079174041748046875 +-0.190997391939163235763388115629 -0.514321500062942527087272992503 0.038644649088382720947265625 +-0.190997391939163235763388115629 0.514321500062942527087272992503 0.038644649088382720947265625 +-0.190898555517196671926782869377 -0.249014702439308177606136496252 0.322567203640937827380241742503 +-0.190898555517196671926782869377 0.249014702439308177606136496252 0.322567203640937827380241742503 +-0.190846802294254297427400501874 -0.823538696765899635998664507497 -0.3088062107563018798828125 +-0.190846802294254297427400501874 0.823538696765899635998664507497 -0.3088062107563018798828125 +-0.190799942612648015805021373126 -0.514827498793602011950554242503 -0.0323763009160757120330487168758 +-0.190799942612648015805021373126 0.514827498793602011950554242503 -0.0323763009160757120330487168758 +-0.1907874047756195068359375 -0.707303720712661787572983485006 0.522800999879837080541733485006 +-0.1907874047756195068359375 0.707303720712661787572983485006 0.522800999879837080541733485006 +-0.1907725036144256591796875 -0.03788650035858154296875 0.15706850588321685791015625 +-0.1907725036144256591796875 0.03788650035858154296875 0.15706850588321685791015625 +-0.190674006938934326171875 -0.095902748405933380126953125 -0.13017724454402923583984375 +-0.190674006938934326171875 0.095902748405933380126953125 -0.13017724454402923583984375 +-0.190656006336212158203125 -0.261246502399444580078125 0.3813144862651824951171875 +-0.190656006336212158203125 0.261246502399444580078125 0.3813144862651824951171875 +-0.190458002686500565969751619377 -0.365474689006805408819644753748 0.180704243481159210205078125 +-0.190458002686500565969751619377 0.365474689006805408819644753748 0.180704243481159210205078125 +-0.190386402606964100225894753748 0 0.828404036164283708032485264994 +-0.19035799801349639892578125 -0.413554012775421142578125 -0.20672850310802459716796875 +-0.19035799801349639892578125 0.413554012775421142578125 -0.20672850310802459716796875 +-0.190211594104766845703125 -0.0618026018142700250823651231258 0 +-0.190211594104766845703125 0.0618026018142700250823651231258 0 +-0.1901692450046539306640625 -0.42338101565837860107421875 -0.58913849294185638427734375 +-0.1901692450046539306640625 0.42338101565837860107421875 -0.58913849294185638427734375 +-0.19010174274444580078125 -0.16236175596714019775390625 0 +-0.19010174274444580078125 0.16236175596714019775390625 0 +-0.190050297975540155581697376874 -0.138078001141548140084935880623 0.186588603258132923468082253748 +-0.190050297975540155581697376874 0.138078001141548140084935880623 0.186588603258132923468082253748 +-0.190030807256698602847322376874 -0.153360593318939197882144753748 -0.17426669597625732421875 +-0.190030807256698602847322376874 0.153360593318939197882144753748 -0.17426669597625732421875 +-0.19002449512481689453125 -0.38502676784992218017578125 0.6149347722530364990234375 +-0.19002449512481689453125 0.38502676784992218017578125 0.6149347722530364990234375 +-0.189970493316650390625 -0.3394534885883331298828125 0.3141374886035919189453125 +-0.189970493316650390625 0.3394534885883331298828125 0.3141374886035919189453125 +-0.189958596229553244860710492503 -0.0242283999919891378238556711722 -0.0576951980590820340255575615629 +-0.189958596229553244860710492503 0.0242283999919891378238556711722 -0.0576951980590820340255575615629 +-0.189933907985687239206029630623 -0.209110504388809209652677623126 -0.10098449885845184326171875 +-0.189933907985687239206029630623 0.209110504388809209652677623126 -0.10098449885845184326171875 +-0.1898925006389617919921875 -0.13796375691890716552734375 0.0860629975795745849609375 +-0.1898925006389617919921875 0.13796375691890716552734375 0.0860629975795745849609375 +-0.189775955677032454049779630623 -0.166676649451255792788728626874 0.242289257049560530221654630623 +-0.189775955677032454049779630623 0.166676649451255792788728626874 0.242289257049560530221654630623 +-0.189767605811357487066715066248 -0.0684853527694940511505450331242 0.8257103860378265380859375 +-0.189767605811357487066715066248 0.0684853527694940511505450331242 0.8257103860378265380859375 +-0.189737391471862776315404630623 -0.424260592460632302014289507497 0.379476606845855712890625 +-0.189737391471862776315404630623 0.424260592460632302014289507497 0.379476606845855712890625 +-0.18955729901790618896484375 -0.785751661658287026135383257497 -0.499161353707313515393195757497 +-0.18955729901790618896484375 0.785751661658287026135383257497 -0.499161353707313515393195757497 +-0.1895450055599212646484375 -0.262053012847900390625 -0.3813144862651824951171875 +-0.1895450055599212646484375 0.262053012847900390625 -0.3813144862651824951171875 +-0.189543557167053206002904630623 -0.215408197045326210705695757497 -0.200430655479431146792634876874 +-0.189543557167053206002904630623 0.215408197045326210705695757497 -0.200430655479431146792634876874 +-0.189442598819732688220085492503 -0.0324916005134582505653462192186 0.0552792012691497858245526231258 +-0.189442598819732688220085492503 0.0324916005134582505653462192186 0.0552792012691497858245526231258 +-0.189308603107929213082982755623 -0.804268288612365656042868522491 -0.199536653608083730526701060626 +-0.189308603107929213082982755623 0.804268288612365656042868522491 -0.199536653608083730526701060626 +-0.189210601150989532470703125 -0.773861396312713667455795985006 -0.41873399913311004638671875 +-0.189210601150989532470703125 0.773861396312713667455795985006 -0.41873399913311004638671875 +-0.189117604494094843081697376874 -0.310765707492828335833934261245 0.598045688867568925317641514994 +-0.189117604494094843081697376874 0.310765707492828335833934261245 0.598045688867568925317641514994 +-0.189079199731349956170589621252 -0.581914794445037908410256477509 0.660018575191497869347756477509 +-0.189079199731349956170589621252 0.581914794445037908410256477509 0.660018575191497869347756477509 +-0.189023196697235107421875 -0.0534756004810333293586488423443 -0.0375582009553909329513388115629 +-0.189023196697235107421875 0.0534756004810333293586488423443 -0.0375582009553909329513388115629 +-0.189018404483795171566740123126 -0.408960819244384765625 -0.661077594757080166942841970013 +-0.189018404483795171566740123126 0.408960819244384765625 -0.661077594757080166942841970013 +-0.1890006959438323974609375 -0.430816394090652421411391514994 -0.518340218067169122839743522491 +-0.1890006959438323974609375 0.430816394090652421411391514994 -0.518340218067169122839743522491 +-0.188963556289672846011384876874 -0.407177540659904468878238503748 0.03161249868571758270263671875 +-0.188963556289672846011384876874 0.407177540659904468878238503748 0.03161249868571758270263671875 +-0.188788591325283056088224498126 -0.49425999820232391357421875 0.377578499913215626104801003748 +-0.188788591325283056088224498126 0.49425999820232391357421875 0.377578499913215626104801003748 +-0.188788045942783366815120871252 -0.407624396681785572393863503748 -0.0264865508303046247318146555472 +-0.188788045942783366815120871252 0.407624396681785572393863503748 -0.0264865508303046247318146555472 +-0.188755202293396012747095369377 -0.137136805057525651418970369377 0.324907588958740278783920985006 +-0.188755202293396012747095369377 0.137136805057525651418970369377 0.324907588958740278783920985006 +-0.18875174224376678466796875 -0.0994260013103485107421875 -0.7190182507038116455078125 +-0.18875174224376678466796875 0.0994260013103485107421875 -0.7190182507038116455078125 +-0.188743451237678522280916126874 -0.222100898623466463943643134371 0.193770852684974653756810880623 +-0.188743451237678522280916126874 0.222100898623466463943643134371 0.193770852684974653756810880623 +-0.188740807771682728155582253748 -0.195316207408905012643529630623 -0.535003209114074729235710492503 +-0.188740807771682728155582253748 0.195316207408905012643529630623 -0.535003209114074729235710492503 +-0.188702201843261724301115123126 -0.0610418021678924560546875 -0.0257941991090774556949494211722 +-0.188702201843261724301115123126 0.0610418021678924560546875 -0.0257941991090774556949494211722 +-0.188678008317947371041967130623 -0.672831612825393610144431022491 -0.0412062011659145299713458143742 +-0.188678008317947371041967130623 0.672831612825393610144431022491 -0.0412062011659145299713458143742 +-0.188668142259120957815454744377 -0.227846851944923406430021373126 0.463670355081558238641292746252 +-0.188668142259120957815454744377 0.227846851944923406430021373126 0.463670355081558238641292746252 +-0.188581897318363195248380748126 -0.580401885509491011205795985006 -0.2237637937068939208984375 +-0.188581897318363195248380748126 0.580401885509491011205795985006 -0.2237637937068939208984375 +-0.188543403148651145251335492503 -0.0615310013294219984580912807814 0.0257941991090774556949494211722 +-0.188543403148651145251335492503 0.0615310013294219984580912807814 0.0257941991090774556949494211722 +-0.188411848247051261218132367503 -0.50747509300708770751953125 -0.0973137021064758439559128078145 +-0.188411848247051261218132367503 0.50747509300708770751953125 -0.0973137021064758439559128078145 +-0.188402998447418229543970369377 -0.0457794010639190687705912807814 -0.0490770012140274089484925923443 +-0.188402998447418229543970369377 0.0457794010639190687705912807814 -0.0490770012140274089484925923443 +-0.188387510180473310983373380623 -0.262301898002624489514289507497 -0.134936551749706257208316628748 +-0.188387510180473310983373380623 0.262301898002624489514289507497 -0.134936551749706257208316628748 +-0.188379597663879405633480246252 -0.0541245996952056940276776231258 0.0397947996854782146125550923443 +-0.188379597663879405633480246252 0.0541245996952056940276776231258 0.0397947996854782146125550923443 +-0.18836100399494171142578125 -0.13685099780559539794921875 0.4424839913845062255859375 +-0.18836100399494171142578125 0.13685099780559539794921875 0.4424839913845062255859375 +-0.1882688999176025390625 -0.221665191650390613897769753748 0.0736161008477210915268429403113 +-0.1882688999176025390625 0.221665191650390613897769753748 0.0736161008477210915268429403113 +-0.188260257244110107421875 -0.16185249388217926025390625 0.0293577499687671661376953125 +-0.188260257244110107421875 0.16185249388217926025390625 0.0293577499687671661376953125 +-0.18824599683284759521484375 -0.400749504566192626953125 0.23229999840259552001953125 +-0.18824599683284759521484375 0.400749504566192626953125 0.23229999840259552001953125 +-0.188202302157878892385767244377 -0.109084253758192070704602372189 -0.50515408813953399658203125 +-0.188202302157878892385767244377 0.109084253758192070704602372189 -0.50515408813953399658203125 +-0.18819899857044219970703125 -0.116412751376628875732421875 0.116314999759197235107421875 +-0.18819899857044219970703125 0.116412751376628875732421875 0.116314999759197235107421875 +-0.188170254230499267578125 -0.08121524751186370849609375 -0.1431642472743988037109375 +-0.188170254230499267578125 0.08121524751186370849609375 -0.1431642472743988037109375 +-0.188098409771919244937166126874 -0.67245781421661376953125 0.04918409883975982666015625 +-0.188098409771919244937166126874 0.67245781421661376953125 0.04918409883975982666015625 +-0.188093246519565576724275501874 -0.317353954911232027935596988755 0.257696557044982899054019753748 +-0.188093246519565576724275501874 0.317353954911232027935596988755 0.257696557044982899054019753748 +-0.1880617439746856689453125 -0.0550282485783100128173828125 0.155256748199462890625 +-0.1880617439746856689453125 0.0550282485783100128173828125 0.155256748199462890625 +-0.18798799812793731689453125 -0.4482004940509796142578125 -0.117374502122402191162109375 +-0.18798799812793731689453125 0.4482004940509796142578125 -0.117374502122402191162109375 +-0.18797175586223602294921875 -0.6786277592182159423828125 0.258131258189678192138671875 +-0.18797175586223602294921875 0.6786277592182159423828125 0.258131258189678192138671875 +-0.187931454181671120373664507497 -0.107678897678852081298828125 0.274930942058563221319644753748 +-0.187931454181671120373664507497 0.107678897678852081298828125 0.274930942058563221319644753748 +-0.187914597243070607968107310626 -0.136526154726743703671232310626 0.817648130655288629675681022491 +-0.187914597243070607968107310626 0.136526154726743703671232310626 0.817648130655288629675681022491 +-0.187775599956512467825220369377 0 -0.0688498020172119140625 +-0.187727849185466783010767244377 -0.401283895969390902447315738755 -0.0789268501102924346923828125 +-0.187727849185466783010767244377 0.401283895969390902447315738755 -0.0789268501102924346923828125 +-0.1877219974994659423828125 -0.449630391597747813836605246252 -0.350132989883422840460269753748 +-0.1877219974994659423828125 0.449630391597747813836605246252 -0.350132989883422840460269753748 +-0.187632492184638982601896373126 -0.341129264235496554302784488755 -0.388490286469459544793636496252 +-0.187632492184638982601896373126 0.341129264235496554302784488755 -0.388490286469459544793636496252 +-0.187600004673004167043970369377 -0.00825000032782554661159313269536 0.068834602832794189453125 +-0.187600004673004167043970369377 0.00825000032782554661159313269536 0.068834602832794189453125 +-0.187597300112247483694360994377 -0.503850063681602566845185720013 0.115942200273275383692883622189 +-0.187597300112247483694360994377 0.503850063681602566845185720013 0.115942200273275383692883622189 +-0.187595093250274652652009876874 -0.0123903002589941021310826485546 0.2337833940982818603515625 +-0.187595093250274652652009876874 0.0123903002589941021310826485546 0.2337833940982818603515625 +-0.187570792436599714791967130623 -0.136277702450752241647435880623 -0.190382999181747419870092130623 +-0.187570792436599714791967130623 0.136277702450752241647435880623 -0.190382999181747419870092130623 +-0.187509799003601096423210492503 -0.0685688018798828180511151231258 0.01176320016384124755859375 +-0.187509799003601096423210492503 0.0685688018798828180511151231258 0.01176320016384124755859375 +-0.187470495700836181640625 -0.16164399683475494384765625 -0.03501474857330322265625 +-0.187470495700836181640625 0.16164399683475494384765625 -0.03501474857330322265625 +-0.187469096481800073794588001874 -0.398141553997993502544971988755 0.0940153487026691436767578125 +-0.187469096481800073794588001874 0.398141553997993502544971988755 0.0940153487026691436767578125 +-0.187456595897674577200220369377 -0.0682861983776092557052450615629 -0.0140353992581367503084122105861 +-0.187456595897674577200220369377 0.0682861983776092557052450615629 -0.0140353992581367503084122105861 +-0.18741500377655029296875 -0.14872300624847412109375 0.072505749762058258056640625 +-0.18741500377655029296875 0.14872300624847412109375 0.072505749762058258056640625 +-0.18738450109958648681640625 -0.095429003238677978515625 0.1352050006389617919921875 +-0.18738450109958648681640625 0.095429003238677978515625 0.1352050006389617919921875 +-0.187352001667022705078125 -0.79016602039337158203125 -0.5835549831390380859375 +-0.187352001667022705078125 0.79016602039337158203125 -0.5835549831390380859375 +-0.187306747585535032785131193123 -0.576479950547218344958366742503 -0.731497150659561112817641514994 +-0.187306747585535032785131193123 0.576479950547218344958366742503 -0.731497150659561112817641514994 +-0.187278592586517328433259876874 -0.496285808086395219262954014994 0.280405801534652721063167746252 +-0.187278592586517328433259876874 0.496285808086395219262954014994 0.280405801534652721063167746252 +-0.187244099378585798776342130623 -0.1846911013126373291015625 0.144321897625923151187166126874 +-0.187244099378585798776342130623 0.1846911013126373291015625 0.144321897625923151187166126874 +-0.187193502485752116815120871252 -0.295267696678638447149722878748 -0.547974056005477883068977007497 +-0.187193502485752116815120871252 0.295267696678638447149722878748 -0.547974056005477883068977007497 +-0.1871623992919921875 -0.267748808860778841900440738755 0.730260801315307683800881477509 +-0.1871623992919921875 0.267748808860778841900440738755 0.730260801315307683800881477509 +-0.187157404422760020867855246252 -0.0162169992923736593082306711722 -0.0686231970787048312088174384371 +-0.187157404422760020867855246252 0.0162169992923736593082306711722 -0.0686231970787048312088174384371 +-0.187035751342773448602230246252 -0.357193109393119823113948996252 0.374073141813278220446647992503 +-0.187035751342773448602230246252 0.357193109393119823113948996252 0.374073141813278220446647992503 +-0.187024796009063742907585492503 -0.0464904010295867919921875 0.0534824013710022000411825615629 +-0.187024796009063742907585492503 0.0464904010295867919921875 0.0534824013710022000411825615629 +-0.186937594413757346423210492503 -0.682108783721923850329460492503 0.373874402046203646587940738755 +-0.186937594413757346423210492503 0.682108783721923850329460492503 0.373874402046203646587940738755 +-0.186912405490875260793970369377 -0.3270080089569091796875 0.134645998477935791015625 +-0.186912405490875260793970369377 0.3270080089569091796875 0.134645998477935791015625 +-0.186798202991485612356470369377 -0.0374859988689422649055238423443 -0.0608377993106842054893412807814 +-0.186798202991485612356470369377 0.0374859988689422649055238423443 -0.0608377993106842054893412807814 +-0.186756801605224620477230246252 -0.777896022796630948192841970013 0 +-0.186756801605224620477230246252 0.777896022796630948192841970013 0 +-0.186750400066375749075220369377 -0.332143211364746115954460492503 -0.121676397323608409539730246252 +-0.186750400066375749075220369377 0.332143211364746115954460492503 -0.121676397323608409539730246252 +-0.186658851057291019781558816248 -0.7870198786258697509765625 0.498255985975265491827457253748 +-0.186658851057291019781558816248 0.7870198786258697509765625 0.498255985975265491827457253748 +-0.1866489946842193603515625 -0.96664297580718994140625 -0.17539300024509429931640625 +-0.1866489946842193603515625 0.96664297580718994140625 -0.17539300024509429931640625 +-0.186613254249095916748046875 -0.447365446388721443859992632497 0.817031326889991693640524772491 +-0.186613254249095916748046875 0.447365446388721443859992632497 0.817031326889991693640524772491 +-0.18658649921417236328125 -0.442378997802734375 0.13959300518035888671875 +-0.18658649921417236328125 0.442378997802734375 0.13959300518035888671875 +-0.186517098546028159411491742503 0 -0.517408666014671392296975227509 +-0.186485008895397180728181751874 -0.402502736449241671490284488755 0.475094097852706898077457253748 +-0.186485008895397180728181751874 0.402502736449241671490284488755 0.475094097852706898077457253748 +-0.186319705843925459420873380623 -0.573443490266799860144431022491 -0.355594420433044400287059261245 +-0.186319705843925459420873380623 0.573443490266799860144431022491 -0.355594420433044400287059261245 +-0.186309194564819341488615123126 -0.0245455995202064521099050153907 0.0684571981430053683181924384371 +-0.186309194564819341488615123126 0.0245455995202064521099050153907 0.0684571981430053683181924384371 +-0.186305896937847159655632367503 -0.216773150861263280697599498126 -0.469893041253089949194077235006 +-0.186305896937847159655632367503 0.216773150861263280697599498126 -0.469893041253089949194077235006 +-0.186293800175189983026058371252 0 0.517488950490951560290397992503 +-0.186262404918670659847990123126 0 -0.353986406326293967516960492503 +-0.18623149394989013671875 -0.0331422500312328338623046875 -0.16346074640750885009765625 +-0.18623149394989013671875 0.0331422500312328338623046875 -0.16346074640750885009765625 +-0.186222892999649031198217130623 -0.0368394009768962873985209682814 0.232301098108291609323217130623 +-0.186222892999649031198217130623 0.0368394009768962873985209682814 0.232301098108291609323217130623 +-0.186140996217727644479467130623 -0.110553896427154532688952315311 0.2076762020587921142578125 +-0.186140996217727644479467130623 0.110553896427154532688952315311 0.2076762020587921142578125 +-0.186012804508209228515625 -0.465556812286376964227230246252 0.623423194885253995067841970013 +-0.186012804508209228515625 0.465556812286376964227230246252 0.623423194885253995067841970013 +-0.185969102382659901007144753748 -0.221313303709030156918302623126 -0.0802238970994949285309161268742 +-0.185969102382659901007144753748 0.221313303709030156918302623126 -0.0802238970994949285309161268742 +-0.185926048457622533627286998126 -0.172205100953578965627954744377 0.371856147050857566149772992503 +-0.185926048457622533627286998126 0.172205100953578965627954744377 0.371856147050857566149772992503 +-0.185865199565887456722990123126 -0.233473992347717290707365123126 0.266353201866149913445980246252 +-0.185865199565887456722990123126 0.233473992347717290707365123126 0.266353201866149913445980246252 +-0.185776489973068226202457253748 -0.27032880485057830810546875 -0.6183926165103912353515625 +-0.185776489973068226202457253748 0.27032880485057830810546875 -0.6183926165103912353515625 +-0.18575799465179443359375 -0.229781603813171392269865123126 -0.269619202613830599712940738755 +-0.18575799465179443359375 0.229781603813171392269865123126 -0.269619202613830599712940738755 +-0.1857506521046161651611328125 -0.366606888175010636743422764994 -0.856501939892768793249899772491 +-0.1857506521046161651611328125 0.366606888175010636743422764994 -0.856501939892768793249899772491 +-0.185679455101490031854183371252 -0.0446269981563091333587323106258 0.515782290697097800524772992503 +-0.185679455101490031854183371252 0.0446269981563091333587323106258 0.515782290697097800524772992503 +-0.185635799169540399722322376874 -0.663475382328033380652243522491 -0.123853802680969224403462192186 +-0.185635799169540399722322376874 0.663475382328033380652243522491 -0.123853802680969224403462192186 +-0.18555915355682373046875 -0.116947947442531577366686690311 -0.272746959328651394915965511245 +-0.18555915355682373046875 0.116947947442531577366686690311 -0.272746959328651394915965511245 +-0.18552599847316741943359375 -0.704464972019195556640625 0.685060977935791015625 +-0.18552599847316741943359375 0.704464972019195556640625 0.685060977935791015625 +-0.185491798818111425228849498126 0 -0.880677902698516867907585492503 +-0.185482707619667064324886496252 -0.430844688415527365954460492503 -0.449965763092041004522769753748 +-0.185482707619667064324886496252 0.430844688415527365954460492503 -0.449965763092041004522769753748 +-0.1854268014430999755859375 -0.241632306575775140933259876874 0.57422171533107757568359375 +-0.1854268014430999755859375 0.241632306575775140933259876874 0.57422171533107757568359375 +-0.185426655411720264776676003748 -0.794859638810157753674445757497 0.237308108806610101870759876874 +-0.185426655411720264776676003748 0.794859638810157753674445757497 0.237308108806610101870759876874 +-0.185410201549530029296875 -0.570633602142333939966079014994 0 +-0.185410201549530029296875 0.570633602142333939966079014994 0 +-0.185273891687393166272102007497 -0.273974040150642361712840511245 0.114506699144840226600727817186 +-0.185273891687393166272102007497 0.273974040150642361712840511245 0.114506699144840226600727817186 +-0.185188950598239893130525501874 -0.280029594898223876953125 -0.299647352099418673443409488755 +-0.185188950598239893130525501874 0.280029594898223876953125 -0.299647352099418673443409488755 +-0.1851797997951507568359375 -0.311552417278289806024105246252 -0.478166985511779774054019753748 +-0.1851797997951507568359375 0.311552417278289806024105246252 -0.478166985511779774054019753748 +-0.18516719341278076171875 -0.331447184085845947265625 0.464602804183959938733039507497 +-0.18516719341278076171875 0.331447184085845947265625 0.464602804183959938733039507497 +-0.184895899891853315866185880623 -0.199897953867912286929353626874 -0.219896242022514315506143134371 +-0.184895899891853315866185880623 0.199897953867912286929353626874 -0.219896242022514315506143134371 +-0.184830003976821893862947376874 -0.198264008760452276058927623126 0.128566199541091913394197376874 +-0.184830003976821893862947376874 0.198264008760452276058927623126 0.128566199541091913394197376874 +-0.184807491302490217721654630623 -0.158738708496093755551115123126 0.175066494941711420230134876874 +-0.184807491302490217721654630623 0.158738708496093755551115123126 0.175066494941711420230134876874 +-0.184792301058769203869758257497 -0.475279694795608498303352007497 0.479542684555053666528579014994 +-0.184792301058769203869758257497 0.475279694795608498303352007497 0.479542684555053666528579014994 +-0.184776198863983165399105246252 -0.076535999774932861328125 0 +-0.184776198863983165399105246252 0.076535999774932861328125 0 +-0.18476800620555877685546875 -0.3556390106678009033203125 -0.2989675104618072509765625 +-0.18476800620555877685546875 0.3556390106678009033203125 -0.2989675104618072509765625 +-0.184736108779907232113615123126 -0.235714495182037353515625 0.017644800245761871337890625 +-0.184736108779907232113615123126 0.235714495182037353515625 0.017644800245761871337890625 +-0.1847047507762908935546875 -0.13419525325298309326171875 -0.101861499249935150146484375 +-0.1847047507762908935546875 0.13419525325298309326171875 -0.101861499249935150146484375 +-0.1846809089183807373046875 -0.0595736995339393587967080634371 -0.228788101673126215152009876874 +-0.1846809089183807373046875 0.0595736995339393587967080634371 -0.228788101673126215152009876874 +-0.1846752464771270751953125 -0.12142725288867950439453125 -0.116835497319698333740234375 +-0.1846752464771270751953125 0.12142725288867950439453125 -0.116835497319698333740234375 +-0.184571099281311018502904630623 -0.020012699067592620849609375 -0.235654199123382562808259876874 +-0.184571099281311018502904630623 0.020012699067592620849609375 -0.235654199123382562808259876874 +-0.18454350531101226806640625 0 -0.1686525046825408935546875 +-0.184509001672267913818359375 -0.24444450438022613525390625 -0.68461950123310089111328125 +-0.184509001672267913818359375 0.24444450438022613525390625 -0.68461950123310089111328125 +-0.184490501880645751953125 -0.0660202503204345703125 -0.15525649487972259521484375 +-0.184490501880645751953125 0.0660202503204345703125 -0.15525649487972259521484375 +-0.184478406608104716912777121252 -0.179821796715259552001953125 -0.368960863351821932720753238755 +-0.184478406608104716912777121252 0.179821796715259552001953125 -0.368960863351821932720753238755 +-0.184426206350326526983707253748 -0.0603555008769035283844317518742 0.2287884056568145751953125 +-0.184426206350326526983707253748 0.0603555008769035283844317518742 0.2287884056568145751953125 +-0.184422703087329886706413617503 -0.450562742352485667840511496252 -0.255892999470233917236328125 +-0.184422703087329886706413617503 0.450562742352485667840511496252 -0.255892999470233917236328125 +-0.184381401538848882504240123126 -0.0383554011583328302581463731258 0.0673228025436401339431924384371 +-0.184381401538848882504240123126 0.0383554011583328302581463731258 0.0673228025436401339431924384371 +-0.184355604648590104543970369377 -0.0678408026695251492599325615629 0.0375582009553909329513388115629 +-0.184355604648590104543970369377 0.0678408026695251492599325615629 0.0375582009553909329513388115629 +-0.184307992458343505859375 -0.235769695043563820568977007497 -0.0210530988872051245952565778907 +-0.184307992458343505859375 0.235769695043563820568977007497 -0.0210530988872051245952565778907 +-0.184292995929718039782585492503 -0.0294824004173278829410431711722 -0.0718811988830566489516726846887 +-0.184292995929718039782585492503 0.0294824004173278829410431711722 -0.0718811988830566489516726846887 +-0.184216594696044927426115123126 -0.0669376015663147028167401231258 -0.0397947996854782146125550923443 +-0.184216594696044927426115123126 0.0669376015663147028167401231258 -0.0397947996854782146125550923443 +-0.18414175510406494140625 -0.072481252253055572509765625 0.15276874601840972900390625 +-0.18414175510406494140625 0.072481252253055572509765625 0.15276874601840972900390625 +-0.184118396043777471371427623126 -0.566659784317016579358039507497 -0.0706913977861404335678585653113 +-0.184118396043777471371427623126 0.566659784317016579358039507497 -0.0706913977861404335678585653113 +-0.184086501598358154296875 -0.15864424407482147216796875 0.0586872510612010955810546875 +-0.184086501598358154296875 0.15864424407482147216796875 0.0586872510612010955810546875 +-0.184008300304412841796875 -0.566308397054672174597556022491 0.36801660060882568359375 +-0.184008300304412841796875 0.566308397054672174597556022491 0.36801660060882568359375 +-0.184005504846572853772102007497 0 -0.297728192806243852075454014994 +-0.183989596366882335320980246252 -0.0592004001140594496299662807814 -0.0514115989208221435546875 +-0.183989596366882335320980246252 0.0592004001140594496299662807814 -0.0514115989208221435546875 +-0.183960402011871360095085492503 -0.133654797077178949527009876874 -0.329081988334655795025440738755 +-0.183960402011871360095085492503 0.133654797077178949527009876874 -0.329081988334655795025440738755 +-0.183956408500671381167634876874 -0.183124208450317377261384876874 0.540948593616485617907585492503 +-0.183956408500671381167634876874 0.183124208450317377261384876874 0.540948593616485617907585492503 +-0.183921754360198974609375 -0.38964195549488067626953125 -0.129815094172954559326171875 +-0.183921754360198974609375 0.38964195549488067626953125 -0.129815094172954559326171875 +-0.183910799026489268914730246252 -0.0750068008899688748458700615629 0.02346999943256378173828125 +-0.183910799026489268914730246252 0.0750068008899688748458700615629 0.02346999943256378173828125 +-0.183797997236251814401342130623 -0.118239900469779959935046065311 -0.2055180072784423828125 +-0.183797997236251814401342130623 0.118239900469779959935046065311 -0.2055180072784423828125 +-0.183766806125640863589509876874 -0.659131908416747958057158029987 0.147562800347805000988898882497 +-0.183766806125640863589509876874 0.659131908416747958057158029987 0.147562800347805000988898882497 +-0.183765445649623881951839621252 -0.493239989876747164654346988755 -0.159512649476528184377954744377 +-0.183765445649623881951839621252 0.493239989876747164654346988755 -0.159512649476528184377954744377 +-0.183761903643608087710603626874 -0.276538851857185352667301003748 -0.110714796185493458136051003748 +-0.183761903643608087710603626874 0.276538851857185352667301003748 -0.110714796185493458136051003748 +-0.183657595515251154116853626874 -0.190786054730415322033820757497 0.228846108913421608654914507497 +-0.183657595515251154116853626874 0.190786054730415322033820757497 0.228846108913421608654914507497 +-0.18365299701690673828125 -0.14617849886417388916015625 -0.086043499410152435302734375 +-0.18365299701690673828125 0.14617849886417388916015625 -0.086043499410152435302734375 +-0.183648204803466802426115123126 -0.0602509975433349609375 0.0514115989208221435546875 +-0.183648204803466802426115123126 0.0602509975433349609375 0.0514115989208221435546875 +-0.1836045049130916595458984375 -0.663722991943359375 -0.297087751328945159912109375 +-0.1836045049130916595458984375 0.663722991943359375 -0.297087751328945159912109375 +-0.183571207523345936163394753748 -0.564970207214355424341079014994 0.0843215972185134832184161268742 +-0.183571207523345936163394753748 0.564970207214355424341079014994 0.0843215972185134832184161268742 +-0.183545994758605973684595369377 -0.0743488013744354331313601846887 -0.0279841989278793341899831403907 +-0.183545994758605973684595369377 0.0743488013744354331313601846887 -0.0279841989278793341899831403907 +-0.183465000987052928582698996252 -0.178546500205993663445980246252 -0.862821900844573996813835492503 +-0.183465000987052928582698996252 0.178546500205993663445980246252 -0.862821900844573996813835492503 +-0.183460402488708512747095369377 -0.00812800005078315700168811730464 -0.07922279834747314453125 +-0.183460402488708512747095369377 0.00812800005078315700168811730464 -0.07922279834747314453125 +-0.183434557914733897820980246252 -0.564545142650604292455795985006 0.264840556681156191753956363755 +-0.183434557914733897820980246252 0.564545142650604292455795985006 0.264840556681156191753956363755 +-0.183410394191741960012720369377 -0.166236400604248046875 0.314206790924072276727230246252 +-0.183410394191741960012720369377 0.166236400604248046875 0.314206790924072276727230246252 +-0.183382847905158991030916126874 -0.294061949849128700940070757497 0.0489723481237888322303852817186 +-0.183382847905158991030916126874 0.294061949849128700940070757497 0.0489723481237888322303852817186 +-0.183376602828502655029296875 -0.930454725027084261768095529987 -0.0559160517528653130958637973436 +-0.183376602828502655029296875 0.930454725027084261768095529987 -0.0559160517528653130958637973436 +-0.18322150409221649169921875 -0.295368847250938371118422764994 -0.0410724990069866180419921875 +-0.18322150409221649169921875 0.295368847250938371118422764994 -0.0410724990069866180419921875 +-0.183150002360343955309929242503 -0.0877855017781257740416833712516 0.511125987768173306591279470013 +-0.183150002360343955309929242503 0.0877855017781257740416833712516 0.511125987768173306591279470013 +-0.18314449489116668701171875 -0.4324645102024078369140625 -0.1715590059757232666015625 +-0.18314449489116668701171875 0.4324645102024078369140625 -0.1715590059757232666015625 +-0.183061355352401727847322376874 -0.0893605493009090451339559990629 -0.401252406835556019171207253748 +-0.183061355352401727847322376874 0.0893605493009090451339559990629 -0.401252406835556019171207253748 +-0.18301700055599212646484375 -0.9606540203094482421875 0.20892299711704254150390625 +-0.18301700055599212646484375 0.9606540203094482421875 0.20892299711704254150390625 +-0.182991899549961090087890625 -0.0264394009485840811302104214064 0.623149150609970114977897992503 +-0.182991899549961090087890625 0.0264394009485840811302104214064 0.623149150609970114977897992503 +-0.18296425044536590576171875 -0.16972799599170684814453125 0.014714750461280345916748046875 +-0.18296425044536590576171875 0.16972799599170684814453125 0.014714750461280345916748046875 +-0.182944798469543479235710492503 -0.773114395141601629113381477509 -0.0939447999000549427428552462516 +-0.182944798469543479235710492503 0.773114395141601629113381477509 -0.0939447999000549427428552462516 +-0.182874658703804010562166126874 -0.29842399060726165771484375 0 +-0.182874658703804010562166126874 0.29842399060726165771484375 0 +-0.182737195491790793688835492503 -0.0510353982448577894737162807814 -0.0632654011249542264083700615629 +-0.182737195491790793688835492503 0.0510353982448577894737162807814 -0.0632654011249542264083700615629 +-0.182729700207710260562166126874 -0.801902711391448974609375 0.365460312366485629009815738755 +-0.182729700207710260562166126874 0.801902711391448974609375 0.365460312366485629009815738755 +-0.18269799649715423583984375 -0.16974399983882904052734375 -0.01756249926984310150146484375 +-0.18269799649715423583984375 0.16974399983882904052734375 -0.01756249926984310150146484375 +-0.182646000385284446032585492503 0 0.0814891993999481284438601846887 +-0.182524447888135904483064564374 -0.929909375309944108423110264994 0.06673749722540378570556640625 +-0.182524447888135904483064564374 0.929909375309944108423110264994 0.06673749722540378570556640625 +-0.182482397556304937191740123126 -0.561633586883544921875 -0.539692020416259743420539507497 +-0.182482397556304937191740123126 0.561633586883544921875 -0.539692020416259743420539507497 +-0.182398952543735504150390625 -0.377791003882884945941356136245 -0.7392594516277313232421875 +-0.182398952543735504150390625 0.377791003882884945941356136245 -0.7392594516277313232421875 +-0.182381594181060813220085492503 -0.0528335988521575969367738423443 -0.777139186859130859375 +-0.182381594181060813220085492503 0.0528335988521575969367738423443 -0.777139186859130859375 +-0.182357707619667047671541126874 -0.046732701361179351806640625 -0.295062243938446044921875 +-0.182357707619667047671541126874 0.046732701361179351806640625 -0.295062243938446044921875 +-0.182235896587371826171875 -0.231551706790924072265625 0.0563373014330863924881143134371 +-0.182235896587371826171875 0.231551706790924072265625 0.0563373014330863924881143134371 +-0.182065048813819879702791126874 -0.38161168992519378662109375 0.154029151797294622250333873126 +-0.182065048813819879702791126874 0.38161168992519378662109375 0.154029151797294622250333873126 +-0.182035741209983836785823996252 -0.0787734977900981930831747490629 0.6189976036548614501953125 +-0.182035741209983836785823996252 0.0787734977900981930831747490629 0.6189976036548614501953125 +-0.182027196884155278988615123126 -0.016448199748992919921875 0.0812129974365234375 +-0.182027196884155278988615123126 0.016448199748992919921875 0.0812129974365234375 +-0.182003998756408713610710492503 -0.351737189292907759252670985006 0.0561728000640869182258363423443 +-0.182003998756408713610710492503 0.351737189292907759252670985006 0.0561728000640869182258363423443 +-0.181871199607849143298210492503 -0.353134799003601118627670985006 -0.04710359871387481689453125 +-0.181871199607849143298210492503 0.353134799003601118627670985006 -0.04710359871387481689453125 +-0.18182949721813201904296875 -0.010312500409781932830810546875 0.17126500606536865234375 +-0.18182949721813201904296875 0.010312500409781932830810546875 0.17126500606536865234375 +-0.1817957460880279541015625 -0.11071600019931793212890625 -0.13111950457096099853515625 +-0.1817957460880279541015625 0.11071600019931793212890625 -0.13111950457096099853515625 +-0.181621800363063828909204744377 -0.206006406247615819760099498126 0.857073605060577392578125 +-0.181621800363063828909204744377 0.206006406247615819760099498126 0.857073605060577392578125 +-0.1816104948520660400390625 -0.033302001655101776123046875 -0.464659512042999267578125 +-0.1816104948520660400390625 0.033302001655101776123046875 -0.464659512042999267578125 +-0.181610405445098876953125 -0.0523093998432159479339276231258 0.0654322028160095187088174384371 +-0.181610405445098876953125 0.0523093998432159479339276231258 0.0654322028160095187088174384371 +-0.18159639835357666015625 -0.35640239715576171875 0 +-0.18159639835357666015625 0.35640239715576171875 0 +-0.181535243988037109375 -0.15707774460315704345703125 -0.069796502590179443359375 +-0.181535243988037109375 0.15707774460315704345703125 -0.069796502590179443359375 +-0.181529200077056890316740123126 -0.0831185996532440296569177462516 0.0117655999958515174175222028907 +-0.181529200077056890316740123126 0.0831185996532440296569177462516 0.0117655999958515174175222028907 +-0.1815159022808074951171875 -0.210871195793151861019865123126 0.112184098362922660130358565311 +-0.1815159022808074951171875 0.210871195793151861019865123126 0.112184098362922660130358565311 +-0.181509295105934137515291126874 0 -0.411769804358482371942073996252 +-0.18149499595165252685546875 -0.296000003814697265625 0.937786996364593505859375 +-0.18149499595165252685546875 0.296000003814697265625 0.937786996364593505859375 +-0.181488597393035910876335492503 -0.0828538000583648737151776231258 -0.0140395998954772963096537807814 +-0.181488597393035910876335492503 0.0828538000583648737151776231258 -0.0140395998954772963096537807814 +-0.1814782507717609405517578125 -0.55854226648807525634765625 -0.46647150814533233642578125 +-0.1814782507717609405517578125 0.55854226648807525634765625 -0.46647150814533233642578125 +-0.181295204162597672903345369377 -0.771088790893554754113381477509 0.1120471954345703125 +-0.181295204162597672903345369377 -0.29118120670318603515625 0.205780005455017095394865123126 +-0.181295204162597672903345369377 0.29118120670318603515625 0.205780005455017095394865123126 +-0.181295204162597672903345369377 0.771088790893554754113381477509 0.1120471954345703125 +-0.1812757551670074462890625 -0.278631010651588462145866742503 0.303321602940559376104801003748 +-0.1812757551670074462890625 0.278631010651588462145866742503 0.303321602940559376104801003748 +-0.18124149739742279052734375 -0.111339747905731201171875 0.13135825097560882568359375 +-0.18124149739742279052734375 0.111339747905731201171875 0.13135825097560882568359375 +-0.181207001209259033203125 -0.1316539943218231201171875 -0.974592983722686767578125 +-0.181207001209259033203125 0.1316539943218231201171875 -0.974592983722686767578125 +-0.181172403693199146612613503748 -0.5576008260250091552734375 -0.615433165431022666247429242503 +-0.181172403693199146612613503748 0.5576008260250091552734375 -0.615433165431022666247429242503 +-0.181001155078411107846036998126 -0.483638110756874128881577235006 0.189295698702335368768245871252 +-0.181001155078411107846036998126 0.483638110756874128881577235006 0.189295698702335368768245871252 +-0.1809014976024627685546875 -0.2938894927501678466796875 0.3618060052394866943359375 +-0.1809014976024627685546875 0.2938894927501678466796875 0.3618060052394866943359375 +-0.18089999258518218994140625 -0.13143150508403778076171875 -0.4472145140171051025390625 +-0.18089999258518218994140625 -0.1314300000667572021484375 0.111803747713565826416015625 +-0.18089999258518218994140625 0.1314300000667572021484375 0.111803747713565826416015625 +-0.18089999258518218994140625 0.13143150508403778076171875 -0.4472145140171051025390625 +-0.1808820068836212158203125 -0.231772506237030023745759876874 -0.0596921995282173115104917826557 +-0.1808820068836212158203125 0.231772506237030023745759876874 -0.0596921995282173115104917826557 +-0.180855202674865739309595369377 -0.0212986007332801839664337961722 -0.0826907992362976157485476846887 +-0.180855202674865739309595369377 0.0212986007332801839664337961722 -0.0826907992362976157485476846887 +-0.18068599700927734375 -0.03068174980580806732177734375 0.17003299295902252197265625 +-0.18068599700927734375 0.03068174980580806732177734375 0.17003299295902252197265625 +-0.180667895078659046514957253748 -0.131261202692985523565738503748 0.269498595595359768939403011245 +-0.180667895078659046514957253748 0.131261202692985523565738503748 0.269498595595359768939403011245 +-0.180640995502471923828125 -0.0303093999624252340152619211722 0.0803128004074096790709802462516 +-0.180640995502471923828125 0.0303093999624252340152619211722 0.0803128004074096790709802462516 +-0.180531001091003423519865123126 -0.0426041990518570001800213731258 -0.0747889995574951144119424384371 +-0.180531001091003423519865123126 0.0426041990518570001800213731258 -0.0747889995574951144119424384371 +-0.1805306561291217803955078125 -0.3397985398769378662109375 0.757922074198722817151008257497 +-0.1805306561291217803955078125 0.3397985398769378662109375 0.757922074198722817151008257497 +-0.180398349463939677850277121252 -0.432140487432479902807358485006 0.288463991880416881219417746252 +-0.180398349463939677850277121252 0.432140487432479902807358485006 0.288463991880416881219417746252 +-0.180343198776245133840845369377 -0.211263990402221685238615123126 -0.750228786468505881579460492503 +-0.180343198776245133840845369377 0.211263990402221685238615123126 -0.750228786468505881579460492503 +-0.180244202166795736141935435626 -0.777786546945571921618522992503 -0.29165031015872955322265625 +-0.180244202166795736141935435626 0.777786546945571921618522992503 -0.29165031015872955322265625 +-0.18024100363254547119140625 -0.554735004901885986328125 -0.8122689723968505859375 +-0.18024100363254547119140625 0.554735004901885986328125 -0.8122689723968505859375 +-0.180212497711181640625 -0.230439007282257080078125 -0.4054889976978302001953125 +-0.180212497711181640625 0.230439007282257080078125 -0.4054889976978302001953125 +-0.180193805694580072573884876874 -0.554583013057708740234375 -0.141308999061584478207365123126 +-0.180193805694580072573884876874 0.554583013057708740234375 -0.141308999061584478207365123126 +-0.18018810451030731201171875 -0.668009069561958268579360264994 0.493756499886512767449886496252 +-0.18018810451030731201171875 0.668009069561958268579360264994 0.493756499886512767449886496252 +-0.180156898498535139596654630623 -0.182046604156494123971654630623 -0.156212997436523420846654630623 +-0.180156898498535139596654630623 0.182046604156494123971654630623 -0.156212997436523420846654630623 +-0.179877001047134388311832253748 -0.425379002094268765521434261245 -0.383010613918304432257144753748 +-0.179877001047134388311832253748 0.425379002094268765521434261245 -0.383010613918304432257144753748 +-0.179819753766059881039396373126 -0.266861107945442210809261496252 0.446037897467613242419304242503 +-0.179819753766059881039396373126 0.266861107945442210809261496252 0.446037897467613242419304242503 +-0.17979599535465240478515625 -0.16807949542999267578125 0.0438482500612735748291015625 +-0.17979599535465240478515625 0.16807949542999267578125 0.0438482500612735748291015625 +-0.179768404364585854260383257497 -0.645343291759490900183493522491 -0.203016099333763105905248380623 +-0.179768404364585854260383257497 0.645343291759490900183493522491 -0.203016099333763105905248380623 +-0.179757606983184797799779630623 -0.0811865955591201809982138115629 0.226044005155563332287727007497 +-0.179757606983184797799779630623 0.0811865955591201809982138115629 0.226044005155563332287727007497 +-0.17975099384784698486328125 -0.0497732497751712799072265625 -0.16647000610828399658203125 +-0.17975099384784698486328125 0.0497732497751712799072265625 -0.16647000610828399658203125 +-0.17973749339580535888671875 -0.09647600352764129638671875 -0.14452250301837921142578125 +-0.17973749339580535888671875 0.09647600352764129638671875 -0.14452250301837921142578125 +-0.17973400652408599853515625 -0.4200870096683502197265625 0.203033506870269775390625 +-0.17973400652408599853515625 0.4200870096683502197265625 0.203033506870269775390625 +-0.179718804359436046258480246252 -0.0532280027866363567023988423443 -0.353366804122924815789730246252 +-0.179718804359436046258480246252 0.0532280027866363567023988423443 -0.353366804122924815789730246252 +-0.179674005508422857113615123126 -0.345067191123962446752670985006 -0.0929827988147735595703125 +-0.179674005508422857113615123126 0.345067191123962446752670985006 -0.0929827988147735595703125 +-0.179650256037712091616853626874 -0.552915999293327353747429242503 -0.290689744055271148681640625 +-0.179650256037712091616853626874 0.552915999293327353747429242503 -0.290689744055271148681640625 +-0.179645001888275146484375 -0.01664149947464466094970703125 -0.17306275665760040283203125 +-0.179645001888275146484375 0.01664149947464466094970703125 -0.17306275665760040283203125 +-0.1795805990695953369140625 -0.744396311044693059777443977509 -0.472889703512191783563167746252 +-0.1795805990695953369140625 0.744396311044693059777443977509 -0.472889703512191783563167746252 +-0.17955650389194488525390625 -0.14301274716854095458984375 0.099029250442981719970703125 +-0.17955650389194488525390625 0.14301274716854095458984375 0.099029250442981719970703125 +-0.179475454986095434017911998126 -0.130395102500915543997095369377 0.503274762630462668688835492503 +-0.179475454986095434017911998126 0.130395102500915543997095369377 0.503274762630462668688835492503 +-0.179463553428649891241519753748 -0.242821249365806568487613503748 0.177004447579383827893195757497 +-0.179463553428649891241519753748 0.242821249365806568487613503748 0.177004447579383827893195757497 +-0.1794632971286773681640625 -0.1969850957393646240234375 -0.137803503870964044741853626874 +-0.1794632971286773681640625 0.1969850957393646240234375 -0.137803503870964044741853626874 +-0.1794312000274658203125 -0.08108580112457275390625 0.0350645989179611192176899692186 +-0.1794312000274658203125 0.08108580112457275390625 0.0350645989179611192176899692186 +-0.17940090596675872802734375 -0.183437442779540993420539507497 -0.238046544790267933233707253748 +-0.17940090596675872802734375 0.183437442779540993420539507497 -0.238046544790267933233707253748 +-0.179330205917358403988615123126 -0.0737025976181030356704226846887 0.0490772008895874051193075615629 +-0.179330205917358403988615123126 0.0737025976181030356704226846887 0.0490772008895874051193075615629 +-0.179311050474643712826505748126 -0.204293252527713770083650501874 0.358625239133834872173878238755 +-0.179311050474643712826505748126 0.204293252527713770083650501874 0.358625239133834872173878238755 +-0.17926074564456939697265625 -0.089555747807025909423828125 0.149483501911163330078125 +-0.17926074564456939697265625 0.089555747807025909423828125 0.149483501911163330078125 +-0.179230797290802018606470369377 -0.29788959026336669921875 -0.197833597660064697265625 +-0.179230797290802018606470369377 0.29788959026336669921875 -0.197833597660064697265625 +-0.179187202453613303454460492503 0 0.779674386978149502880341970013 +-0.179158204793930048159822376874 -0.130164599418640142269865123126 0.202384507656097417660490123126 +-0.179158204793930048159822376874 0.130164599418640142269865123126 0.202384507656097417660490123126 +-0.179126746952533749679403740629 -0.314124798774719271587940738755 -0.414414533972740195544304242503 +-0.179126746952533749679403740629 0.314124798774719271587940738755 -0.414414533972740195544304242503 +-0.1791164986789226531982421875 -0.5512537658214569091796875 0.4759582579135894775390625 +-0.1791164986789226531982421875 0.5512537658214569091796875 0.4759582579135894775390625 +-0.178886401653289811575220369377 -0.34025919437408447265625 0.110558795928955080900557561563 +-0.178886401653289811575220369377 0.34025919437408447265625 0.110558795928955080900557561563 +-0.178884994983673106805355246252 0 -0.0894429981708526611328125 +-0.178884398937225352899105246252 -0.21029078960418701171875 -0.28944480419158935546875 +-0.178884398937225352899105246252 0.21029078960418701171875 -0.28944480419158935546875 +-0.178884005546569829769865123126 0 0.357771611213684115337940738755 +-0.178825503587722783871427623126 -0.09970200061798095703125 -0.2192738950252532958984375 +-0.178825503587722783871427623126 0.09970200061798095703125 -0.2192738950252532958984375 +-0.1786989010870456695556640625 -0.730869096517562821802016514994 -0.395470999181270599365234375 +-0.1786989010870456695556640625 0.730869096517562821802016514994 -0.395470999181270599365234375 +-0.178683006763458246402009876874 -0.0399395987391471876670756557814 -0.571381795406341486120993522491 +-0.178683006763458246402009876874 0.0399395987391471876670756557814 -0.571381795406341486120993522491 +-0.178632998466491721423210492503 -0.0723178029060363852797976846887 -0.0534824013710022000411825615629 +-0.178632998466491721423210492503 0.0723178029060363852797976846887 -0.0534824013710022000411825615629 +-0.178604805469512961657585492503 -0.0644568026065826388260049384371 0.777139186859130859375 +-0.178604805469512961657585492503 0.0644568026065826388260049384371 0.777139186859130859375 +-0.178599849343299893478231865629 -0.432536500692367598119858485006 -0.288988152146339438708366742503 +-0.178599849343299893478231865629 0.432536500692367598119858485006 -0.288988152146339438708366742503 +-0.178574799746274937017886941248 -0.549586194753646783972556022491 0.623350876569747858191306022491 +-0.178574799746274937017886941248 0.549586194753646783972556022491 0.623350876569747858191306022491 +-0.178517144918441755807592130623 -0.286132341623306252209602007497 0.0935945466160774119934728787484 +-0.178517144918441755807592130623 0.286132341623306252209602007497 0.0935945466160774119934728787484 +-0.178503596782684348376335492503 -0.0799530029296875027755575615629 -0.04176039993762969970703125 +-0.178503596782684348376335492503 0.0799530029296875027755575615629 -0.04176039993762969970703125 +-0.178397691249847417660490123126 -0.178466999530792230777009876874 0.162246304750442493780582253748 +-0.178397691249847417660490123126 0.178466999530792230777009876874 0.162246304750442493780582253748 +-0.1783750057220458984375 -0.0440227985382080078125 0.0790214002132415826995526231258 +-0.1783750057220458984375 0.0440227985382080078125 0.0790214002132415826995526231258 +-0.17834000289440155029296875 -0.047944001853466033935546875 0.16851174831390380859375 +-0.17834000289440155029296875 0.047944001853466033935546875 0.16851174831390380859375 +-0.178332400321960460320980246252 -0.03138320147991180419921875 0.356668806076049837994190738755 +-0.178332400321960460320980246252 0.03138320147991180419921875 0.356668806076049837994190738755 +-0.178330107033252721615568248126 -0.129562554508447641543611439374 0.61148358881473541259765625 +-0.178330107033252721615568248126 0.129562554508447641543611439374 0.61148358881473541259765625 +-0.178292089700698846987947376874 -0.187163892388343799932926003748 0.650523984432220370166533029987 +-0.178292089700698846987947376874 0.187163892388343799932926003748 0.650523984432220370166533029987 +-0.1782830059528350830078125 -0.940742015838623046875 -0.2884779870510101318359375 +-0.1782830059528350830078125 0.940742015838623046875 -0.2884779870510101318359375 +-0.178276693820953346936164507497 -0.548688000440597511975227007497 -0.396433097124099687036391514994 +-0.178276693820953346936164507497 0.548688000440597511975227007497 -0.396433097124099687036391514994 +-0.178201603889465348684595369377 -0.0907974004745483453948651231258 0 +-0.178201603889465348684595369377 0.0907974004745483453948651231258 0 +-0.17819799482822418212890625 -0.17071449756622314453125 0.434858500957489013671875 +-0.17819799482822418212890625 0.17071449756622314453125 0.434858500957489013671875 +-0.17818050086498260498046875 -0.167402744293212890625 -0.052230499684810638427734375 +-0.17818050086498260498046875 0.167402744293212890625 -0.052230499684810638427734375 +-0.178172802925109868832365123126 -0.756958389282226584704460492503 -0.187799203395843522512720369377 +-0.178172802925109868832365123126 0.756958389282226584704460492503 -0.187799203395843522512720369377 +-0.178149998188018798828125 -0.8929250240325927734375 -0.4134570062160491943359375 +-0.178149998188018798828125 0.8929250240325927734375 -0.4134570062160491943359375 +-0.1781364977359771728515625 -0.3337495028972625732421875 -0.32692348957061767578125 +-0.1781364977359771728515625 0.3337495028972625732421875 -0.32692348957061767578125 +-0.1781175434589385986328125 -0.129409800469875352346704744377 -0.611577850580215520714943977509 +-0.1781175434589385986328125 0.129409800469875352346704744377 -0.611577850580215520714943977509 +-0.178078258037567133120759876874 -0.288811245560646023822215511245 -0.0858854509890079470535440009371 +-0.178078258037567133120759876874 0.288811245560646023822215511245 -0.0858854509890079470535440009371 +-0.177998441457748401983707253748 -0.0144542993977665890775741175389 0.301011207699775684698551003748 +-0.177998441457748401983707253748 0.0144542993977665890775741175389 0.301011207699775684698551003748 +-0.1779887974262237548828125 -0.547788584232330344470085492503 0.16807079315185546875 +-0.1779887974262237548828125 0.547788584232330344470085492503 0.16807079315185546875 +-0.17798440158367156982421875 -0.750657719373702958520766514994 -0.554377233982086159436164507497 +-0.17798440158367156982421875 0.750657719373702958520766514994 -0.554377233982086159436164507497 +-0.177836854755878459588558371252 -0.258504304289817798956363503748 -0.322567203640937827380241742503 +-0.177836854755878459588558371252 0.258504304289817798956363503748 -0.322567203640937827380241742503 +-0.177835798263549810238615123126 -0.0661203980445861788650674384371 0.0632655978202819879729901231258 +-0.177835798263549810238615123126 0.0661203980445861788650674384371 0.0632655978202819879729901231258 +-0.177672994136810313836605246252 -0.0644276022911071805099325615629 -0.0654322028160095187088174384371 +-0.177672994136810313836605246252 0.0644276022911071805099325615629 -0.0654322028160095187088174384371 +-0.177647995948791492804019753748 -0.210692399740219110659822376874 -0.118532100319862360171541126874 +-0.177647995948791492804019753748 0.210692399740219110659822376874 -0.118532100319862360171541126874 +-0.177622891962528228759765625 0 -0.625260335206985540246193977509 +-0.177491295337676990850894753748 -0.395155614614486672131477007497 -0.5498625934123992919921875 +-0.177491295337676990850894753748 0.395155614614486672131477007497 -0.5498625934123992919921875 +-0.177448497712612146548494251874 -0.546138900518417402807358485006 -0.692997300624847434313835492503 +-0.177448497712612146548494251874 0.546138900518417402807358485006 -0.692997300624847434313835492503 +-0.17740850150585174560546875 -0.367394506931304931640625 0.289045989513397216796875 +-0.17740850150585174560546875 0.367394506931304931640625 0.289045989513397216796875 +-0.177378404140472428762720369377 -0.0345059990882873521278462192186 -0.0857101976871490478515625 +-0.177378404140472428762720369377 0.0345059990882873521278462192186 -0.0857101976871490478515625 +-0.177356195449829084909154630623 -0.359358316659927345959602007497 0.573939120769500710217414507497 +-0.177356195449829084909154630623 0.359358316659927345959602007497 0.573939120769500710217414507497 +-0.177355152368545515573217130623 -0.0932407021522521917145098768742 -0.286969205737113930432258257497 +-0.177355152368545515573217130623 0.0932407021522521917145098768742 -0.286969205737113930432258257497 +-0.177352595329284684622095369377 -0.0893945991992950439453125 0.0235515996813774122764506557814 +-0.177352595329284684622095369377 0.0893945991992950439453125 0.0235515996813774122764506557814 +-0.1773517429828643798828125 -0.153909742832183837890625 0.08577950298786163330078125 +-0.1773517429828643798828125 0.153909742832183837890625 0.08577950298786163330078125 +-0.177316544950008397885099498126 -0.918310827016830422131477007497 -0.1666233502328395843505859375 +-0.177316544950008397885099498126 0.918310827016830422131477007497 -0.1666233502328395843505859375 +-0.1772047542035579681396484375 -0.3834007680416107177734375 -0.6197602450847625732421875 +-0.1772047542035579681396484375 0.3834007680416107177734375 -0.6197602450847625732421875 +-0.177160498499870311395198996252 -0.472915855050086986199886496252 -0.217864350974559806140007367503 +-0.177160498499870311395198996252 0.472915855050086986199886496252 -0.217864350974559806140007367503 +-0.17703585326671600341796875 -0.0183033004403114311908762346093 0.41330789029598236083984375 +-0.17703585326671600341796875 0.0183033004403114311908762346093 0.41330789029598236083984375 +-0.177016794681549072265625 -0.194493603706359874383480246252 0.301392006874084517065170985006 +-0.177016794681549072265625 0.194493603706359874383480246252 0.301392006874084517065170985006 +-0.176999190449714655093416126874 -0.0419135510921478243728799384371 0.299022844433784462658820757497 +-0.176999190449714655093416126874 0.0419135510921478243728799384371 0.299022844433784462658820757497 +-0.17699539661407470703125 -0.0887907981872558677016726846887 -0.02808620035648345947265625 +-0.17699539661407470703125 0.0887907981872558677016726846887 -0.02808620035648345947265625 +-0.176860797405242936575220369377 -0.128495204448699967825220369377 0.769551181793212912829460492503 +-0.176860797405242936575220369377 0.128495204448699967825220369377 0.769551181793212912829460492503 +-0.176834701001644140072599498126 -0.745597779750823974609375 0.472031986713409457134815738755 +-0.176834701001644140072599498126 0.745597779750823974609375 0.472031986713409457134815738755 +-0.17679150402545928955078125 -0.423819896578788768426448996252 0.774029678106307961193977007497 +-0.17679150402545928955078125 0.423819896578788768426448996252 0.774029678106307961193977007497 +-0.17677700519561767578125 -0.1767764985561370849609375 0 +-0.17677700519561767578125 0.1767764985561370849609375 0 +-0.176764798164367659127904630623 -0.0399210020899772657920756557814 -0.239082598686218256167634876874 +-0.176764798164367659127904630623 0.0399210020899772657920756557814 -0.239082598686218256167634876874 +-0.176759397983551030941740123126 -0.223047906160354608706697376874 0.094898700714111328125 +-0.176759397983551030941740123126 0.223047906160354608706697376874 0.094898700714111328125 +-0.176755499839782698190404630623 -0.169352996349334705694644753748 -0.173427593708038313424779630623 +-0.176755499839782698190404630623 0.169352996349334705694644753748 -0.173427593708038313424779630623 +-0.176720798015594482421875 -0.2589623928070068359375 0.248411202430725119860710492503 +-0.176720798015594482421875 0.2589623928070068359375 0.248411202430725119860710492503 +-0.176685744524002069644197376874 -0.352728000283241305279346988755 -0.216482846438884740658536998126 +-0.176685744524002069644197376874 0.352728000283241305279346988755 -0.216482846438884740658536998126 +-0.176681602001190207751335492503 -0.0625728011131286704360476846887 0.35336720943450927734375 +-0.176681602001190207751335492503 0.0625728011131286704360476846887 0.35336720943450927734375 +-0.176622796058654801809595369377 -0.00824960023164749214896751539072 0.0934682011604309193053552462516 +-0.176622796058654801809595369377 0.00824960023164749214896751539072 0.0934682011604309193053552462516 +-0.1766214072704315185546875 -0.158489406108856201171875 -0.551077187061309814453125 +-0.1766214072704315185546875 0.158489406108856201171875 -0.551077187061309814453125 +-0.17660774290561676025390625 -0.081481747329235076904296875 -0.1570682525634765625 +-0.17660774290561676025390625 0.081481747329235076904296875 -0.1570682525634765625 +-0.176546001434326194079460492503 -0.013151399791240692138671875 -0.0930512011051178034026776231258 +-0.176546001434326194079460492503 0.013151399791240692138671875 -0.0930512011051178034026776231258 +-0.176449903845787070544304242503 -0.0730350486934185083587323106258 -0.515782290697097800524772992503 +-0.176449903845787070544304242503 0.0730350486934185083587323106258 -0.515782290697097800524772992503 +-0.176335805654525751284822376874 -0.242705100774765009097322376874 0 +-0.176335805654525751284822376874 0.242705100774765009097322376874 0 +-0.176249698549509031808568693123 -0.669241723418235734399672764994 0.650807929039001420434829014994 +-0.176249698549509031808568693123 0.669241723418235734399672764994 0.650807929039001420434829014994 +-0.176199755072593694515958873126 -0.34139116108417510986328125 0.234319952130317699090511496252 +-0.176199755072593694515958873126 0.34139116108417510986328125 0.234319952130317699090511496252 +-0.17617319524288177490234375 -0.213822004199027998483373380623 0.213876599073410028628572376874 +-0.17617319524288177490234375 0.213822004199027998483373380623 0.213876599073410028628572376874 +-0.1761682927608489990234375 -0.0927976012229919378082598768742 -0.671083700656890824731704014994 +-0.1761682927608489990234375 0.0927976012229919378082598768742 -0.671083700656890824731704014994 +-0.175974301993846893310546875 -0.347311788797378562243522992503 -0.811422890424728371350227007497 +-0.175974301993846893310546875 0.347311788797378562243522992503 -0.811422890424728371350227007497 +-0.175850403308868419305355246252 -0.308734393119812045025440738755 0.183738005161285411492855246252 +-0.175850403308868419305355246252 0.308734393119812045025440738755 0.183738005161285411492855246252 +-0.175816595554351806640625 -0.0560634016990661648849325615629 -0.0771063983440399280944177462516 +-0.175816595554351806640625 0.0560634016990661648849325615629 -0.0771063983440399280944177462516 +-0.175771352648735057488948996252 -0.0535841993987560272216796875 0.410771244764328025134147992503 +-0.175771352648735057488948996252 0.0535841993987560272216796875 0.410771244764328025134147992503 +-0.175723004341125504934595369377 -0.022076599299907684326171875 0.0929196000099182239928552462516 +-0.175723004341125504934595369377 0.022076599299907684326171875 0.0929196000099182239928552462516 +-0.17566899955272674560546875 -0.540643990039825439453125 0.8227059841156005859375 +-0.17566899955272674560546875 0.540643990039825439453125 0.8227059841156005859375 +-0.175663253664970375744758257497 -0.156439849734306329898103626874 0.259169754385948192254573996252 +-0.175663253664970375744758257497 0.156439849734306329898103626874 0.259169754385948192254573996252 +-0.175609204173088090383814119377 -0.288568156957626331671207253748 0.555328139662742636950554242503 +-0.175609204173088090383814119377 0.288568156957626331671207253748 0.555328139662742636950554242503 +-0.17558300495147705078125 -0.3248600065708160400390625 -0.92931997776031494140625 +-0.17558300495147705078125 0.3248600065708160400390625 -0.92931997776031494140625 +-0.17550064623355865478515625 -0.400043794512748740466179242503 -0.481315916776657137798878238755 +-0.17550064623355865478515625 0.400043794512748740466179242503 -0.481315916776657137798878238755 +-0.175480547547340381964176003748 -0.245715048909187300241185880623 -0.177004447579383827893195757497 +-0.175480547547340381964176003748 0.245715048909187300241185880623 -0.177004447579383827893195757497 +-0.17546474933624267578125 -0.251014508306980133056640625 0.68461950123310089111328125 +-0.17546474933624267578125 0.251014508306980133056640625 0.68461950123310089111328125 +-0.175440305471420282534822376874 -0.633385908603668168481704014994 0.240922507643699629342748380623 +-0.175440305471420282534822376874 0.633385908603668168481704014994 0.240922507643699629342748380623 +-0.175259995460510270559595369377 -0.316067194938659701275440738755 -0.171421599388122569695980246252 +-0.175259995460510270559595369377 0.316067194938659701275440738755 -0.171421599388122569695980246252 +-0.175253994762897491455078125 -0.6394769847393035888671875 0.350507251918315887451171875 +-0.175253994762897491455078125 0.6394769847393035888671875 0.350507251918315887451171875 +-0.175201007723808283023103626874 -0.624772211909294106213508257497 -0.0382629010826349286178427178129 +-0.175201007723808283023103626874 0.624772211909294106213508257497 -0.0382629010826349286178427178129 +-0.175192201137542746813835492503 -0.0579850018024444593955912807814 0.0771066009998321588714276231258 +-0.175192201137542746813835492503 0.0579850018024444593955912807814 0.0771066009998321588714276231258 +-0.175186698883771890811189564374 0 -0.831751352548599220959602007497 +-0.175175392627716058902009876874 -0.240450900793075544870092130623 0.0386915981769561725944761576557 +-0.175175392627716058902009876874 0.240450900793075544870092130623 0.0386915981769561725944761576557 +-0.17509590089321136474609375 -0.162473501265048975161775501874 -0.255819898843765269891292746252 +-0.17509590089321136474609375 0.162473501265048975161775501874 -0.255819898843765269891292746252 +-0.1750845015048980712890625 -0.7292775213718414306640625 0 +-0.1750845015048980712890625 0.7292775213718414306640625 0 +-0.175046542286872858218416126874 -0.258608701825141895636051003748 0.158051253855228418521150501874 +-0.175046542286872858218416126874 0.258608701825141895636051003748 0.158051253855228418521150501874 +-0.174998946487903594970703125 -0.0693783976137637981018713162484 0.295062953233718838763621761245 +-0.174998946487903594970703125 0.0693783976137637981018713162484 0.295062953233718838763621761245 +-0.174986100196838384457365123126 0 -0.243679797649383522717414507497 +-0.174781501293182373046875 -0.17630875110626220703125 0.02943974919617176055908203125 +-0.174781501293182373046875 0.17630875110626220703125 0.02943974919617176055908203125 +-0.174749994277954123766960492503 -0.283586406707763694079460492503 -0.221452403068542497122095369377 +-0.174749994277954123766960492503 0.283586406707763694079460492503 -0.221452403068542497122095369377 +-0.17467750608921051025390625 -0.065386496484279632568359375 0.1664704978466033935546875 +-0.17467750608921051025390625 0.065386496484279632568359375 0.1664704978466033935546875 +-0.174662809073925034963892244377 -0.624425113201141357421875 0.045670948922634124755859375 +-0.174662809073925034963892244377 0.624425113201141357421875 0.045670948922634124755859375 +-0.174550491571426380499332253748 -0.240904802083969110659822376874 -0.0386915981769561725944761576557 +-0.174550491571426380499332253748 0.240904802083969110659822376874 -0.0386915981769561725944761576557 +-0.174519205093383811266960492503 -0.748103189468383833471420985006 0.223348808288574229852230246252 +-0.174519205093383811266960492503 0.748103189468383833471420985006 0.223348808288574229852230246252 +-0.174487495422363275698884876874 -0.151260906457900995425447376874 0.191505002975463856085269753748 +-0.174487495422363275698884876874 0.151260906457900995425447376874 0.191505002975463856085269753748 +-0.1743870042264461517333984375 -0.4364595115184783935546875 0.584459245204925537109375 +-0.1743870042264461517333984375 0.4364595115184783935546875 0.584459245204925537109375 +-0.174368405342102072985710492503 -0.0972473978996276910979901231258 0.0117718003690242770803431326954 +-0.174368405342102072985710492503 0.0972473978996276910979901231258 0.0117718003690242770803431326954 +-0.174314796924591064453125 -0.0970409989356994656661825615629 -0.014049999415874481201171875 +-0.174314796924591064453125 0.0970409989356994656661825615629 -0.014049999415874481201171875 +-0.1742982566356658935546875 -0.16406999528408050537109375 0.072119496762752532958984375 +-0.1742982566356658935546875 0.16406999528408050537109375 0.072119496762752532958984375 +-0.174285602569580089227230246252 -0.106206405162811282072432561563 -0.344012808799743663445980246252 +-0.174285602569580089227230246252 0.106206405162811282072432561563 -0.344012808799743663445980246252 +-0.174268198013305647409154630623 -0.2236011028289794921875 -0.09814859926700592041015625 +-0.174268198013305647409154630623 0.2236011028289794921875 -0.09814859926700592041015625 +-0.174266391992568964175447376874 -0.456239998340606689453125 0.348533999919891368524105246252 +-0.174266391992568964175447376874 0.456239998340606689453125 0.348533999919891368524105246252 +-0.174223798513412492239282869377 -0.149552544951438909359708873126 -0.387014409899711642193409488755 +-0.174223798513412492239282869377 0.149552544951438909359708873126 -0.387014409899711642193409488755 +-0.1742147505283355712890625 -0.1265729963779449462890625 0.126998007297515869140625 +-0.1742147505283355712890625 0.1265729963779449462890625 0.126998007297515869140625 +-0.17417399585247039794921875 -0.74978101253509521484375 -0.638351023197174072265625 +-0.17417399585247039794921875 0.74978101253509521484375 -0.638351023197174072265625 +-0.174092996120452897512720369377 -0.0867766022682189969161825615629 0.0464911997318267836143412807814 +-0.174092996120452897512720369377 0.0867766022682189969161825615629 0.0464911997318267836143412807814 +-0.174075597524642938784822376874 -0.535755586624145463403579014994 -0.20655119419097900390625 +-0.174075597524642938784822376874 0.535755586624145463403579014994 -0.20655119419097900390625 +-0.174057608842849736996427623126 -0.101760900020599356907702315311 0.222145503759384160824552623126 +-0.174057608842849736996427623126 0.101760900020599356907702315311 0.222145503759384160824552623126 +-0.173982799053192138671875 -0.0359185993671417222450337192186 0.0918687999248504749694177462516 +-0.173982799053192138671875 0.0359185993671417222450337192186 0.0918687999248504749694177462516 +-0.173941600322723405325220369377 -0.0933763980865478515625 0.3478868007659912109375 +-0.173941600322723405325220369377 0.0933763980865478515625 0.3478868007659912109375 +-0.173925942182540899105802623126 -0.388905543088913008276108485006 0.347853556275367792327557481258 +-0.173925942182540899105802623126 0.388905543088913008276108485006 0.347853556275367792327557481258 +-0.17392550408840179443359375 -0.17611749470233917236328125 -0.0351077504456043243408203125 +-0.17392550408840179443359375 0.17611749470233917236328125 -0.0351077504456043243408203125 +-0.173866150528192514590486439374 -0.912621319293975830078125 0.1984768472611904144287109375 +-0.173866150528192514590486439374 0.912621319293975830078125 0.1984768472611904144287109375 +-0.17382599413394927978515625 -0.03319799900054931640625 -0.176585495471954345703125 +-0.17382599413394927978515625 0.03319799900054931640625 -0.176585495471954345703125 +-0.17372520267963409423828125 -0.881483423709869429174545985006 -0.0529731016606092494636293110943 +-0.17372520267963409423828125 0.881483423709869429174545985006 -0.0529731016606092494636293110943 +-0.17369864881038665771484375 -0.0599647521972656236122212192186 -0.410771244764328025134147992503 +-0.17369864881038665771484375 0.0599647521972656236122212192186 -0.410771244764328025134147992503 +-0.173633992671966552734375 -0.467565000057220458984375 0.03513149917125701904296875 +-0.173633992671966552734375 0.467565000057220458984375 0.03513149917125701904296875 +-0.1734544932842254638671875 -0.4680249989032745361328125 -0.0294330008327960968017578125 +-0.1734544932842254638671875 0.4680249989032745361328125 -0.0294330008327960968017578125 +-0.17339949309825897216796875 -0.105589501559734344482421875 0.145888507366180419921875 +-0.17339949309825897216796875 0.105589501559734344482421875 0.145888507366180419921875 +-0.173361802101135276110710492503 -0.0262400001287460341026225307814 -0.0962140023708343561370526231258 +-0.173361802101135276110710492503 0.0262400001287460341026225307814 -0.0962140023708343561370526231258 +-0.173272500932216633184879128748 -0.168627250194549549444644753748 -0.814887350797653176037727007497 +-0.173272500932216633184879128748 0.168627250194549549444644753748 -0.814887350797653176037727007497 +-0.17325675487518310546875 -0.0887719519436359488784304971887 0.405711445212364185675113503748 +-0.17325675487518310546875 0.0887719519436359488784304971887 0.405711445212364185675113503748 +-0.173157203197479264700220369377 -0.0794690012931823785979901231258 0.0608381986618042047698651231258 +-0.173157203197479264700220369377 0.0794690012931823785979901231258 0.0608381986618042047698651231258 +-0.173090004920959494860710492503 -0.0474453985691070598273988423443 -0.0882539987564086997329226846887 +-0.173090004920959494860710492503 0.0474453985691070598273988423443 -0.0882539987564086997329226846887 +-0.173012407124042533190788617503 -0.179039856791496282406583873126 -0.490419608354568548058693977509 +-0.173012407124042533190788617503 0.179039856791496282406583873126 -0.490419608354568548058693977509 +-0.173011155426502222232088001874 -0.532483240962028481213508257497 -0.330194818973541248663394753748 +-0.173011155426502222232088001874 0.532483240962028481213508257497 -0.330194818973541248663394753748 +-0.172917897999286668264673494377 -0.880966776609420798571647992503 0.0632249973714351654052734375 +-0.172917897999286668264673494377 0.880966776609420798571647992503 0.0632249973714351654052734375 +-0.172794002294540394171207253748 -0.272554796934127818719417746252 -0.505822205543518088610710492503 +-0.172794002294540394171207253748 0.272554796934127818719417746252 -0.505822205543518088610710492503 +-0.172578050196170812435880748126 -0.7573525607585906982421875 0.345156961679458584857371761245 +-0.172578050196170812435880748126 0.7573525607585906982421875 0.345156961679458584857371761245 +-0.1725692451000213623046875 -0.262424397468566883429019753748 -0.154445196688175190313785378748 +-0.1725692451000213623046875 0.262424397468566883429019753748 -0.154445196688175190313785378748 +-0.1725524961948394775390625 -0.1381127536296844482421875 -0.116835497319698333740234375 +-0.1725524961948394775390625 0.1381127536296844482421875 -0.116835497319698333740234375 +-0.172506740689277654476896373126 -0.251019604504108428955078125 -0.57422171533107757568359375 +-0.172506740689277654476896373126 0.251019604504108428955078125 -0.57422171533107757568359375 +-0.1724617481231689453125 -0.06603725254535675048828125 -0.16851125657558441162109375 +-0.1724617481231689453125 0.06603725254535675048828125 -0.16851125657558441162109375 +-0.172443147003650681936548494377 -0.410841894149780284539730246252 0.06302654743194580078125 +-0.172443147003650681936548494377 0.410841894149780284539730246252 0.06302654743194580078125 +-0.172441005706787109375 0 -0.18100850284099578857421875 +-0.172432798147201526983707253748 -0.155776494741439813784822376874 -0.1897383034229278564453125 +-0.172432798147201526983707253748 0.155776494741439813784822376874 -0.1897383034229278564453125 +-0.172420246154069894961580189374 -0.281200003623962413445980246252 0.89089764654636383056640625 +-0.172420246154069894961580189374 0.281200003623962413445980246252 0.89089764654636383056640625 +-0.172376099228858964407251619377 -0.616084283590316750256477007497 -0.115007102489471435546875 +-0.172376099228858964407251619377 0.616084283590316750256477007497 -0.115007102489471435546875 +-0.172360801696777365954460492503 -0.0850643992424011258224325615629 -0.0552792012691497858245526231258 +-0.172360801696777365954460492503 0.0850643992424011258224325615629 -0.0552792012691497858245526231258 +-0.172360347211360925845369251874 -0.412309786677360567974659488755 -0.0528439499437809018234091240629 +-0.172360347211360925845369251874 0.412309786677360567974659488755 -0.0528439499437809018234091240629 +-0.172331202030181901418970369377 -0.0952441990375518798828125 0.03507860004901885986328125 +-0.172331202030181901418970369377 0.0952441990375518798828125 0.03507860004901885986328125 +-0.17231190204620361328125 -0.0796548038721084511459835653113 -0.232301098108291609323217130623 +-0.17231190204620361328125 0.0796548038721084511459835653113 -0.232301098108291609323217130623 +-0.17227280139923095703125 0 -0.101597404479980474301115123126 +-0.172208401560783375128238503748 -0.228148204088211042916967130623 -0.638978201150894098425681022491 +-0.172208401560783375128238503748 0.228148204088211042916967130623 -0.638978201150894098425681022491 +-0.172207796573638910464509876874 -0.415745562314987215923878238755 0 +-0.172207796573638910464509876874 0.415745562314987215923878238755 0 +-0.172146651148796070440738503748 -0.125071294605731964111328125 -0.925863334536552340381376779987 +-0.172146651148796070440738503748 0.125071294605731964111328125 -0.925863334536552340381376779987 +-0.172140008211135869808927623126 -0.371540987491607632708934261245 0.438548398017883311883480246252 +-0.172140008211135869808927623126 0.371540987491607632708934261245 0.438548398017883311883480246252 +-0.172078497707843808273153740629 -0.412161192297935519146534488755 -0.320955240726470969470085492503 +-0.172078497707843808273153740629 0.412161192297935519146534488755 -0.320955240726470969470085492503 +-0.172069796919822687319978626874 -0.0961411461234092656891192518742 0.28922109305858612060546875 +-0.172069796919822687319978626874 0.0961411461234092656891192518742 0.28922109305858612060546875 +-0.17204725742340087890625 -0.124999247491359710693359375 -0.1314339935779571533203125 +-0.17204725742340087890625 0.124999247491359710693359375 -0.1314339935779571533203125 +-0.172041101753711678234992632497 -0.231993648409843433721988503748 -0.197688749432563759533820757497 +-0.172041101753711678234992632497 0.231993648409843433721988503748 -0.197688749432563759533820757497 +-0.172004795074462896176115123126 -0.185684001445770269222990123126 -0.309735202789306662829460492503 +-0.172004795074462896176115123126 0.185684001445770269222990123126 -0.309735202789306662829460492503 +-0.17199374735355377197265625 -0.15037475526332855224609375 -0.10151650011539459228515625 +-0.17199374735355377197265625 0.15037475526332855224609375 -0.10151650011539459228515625 +-0.17190720140933990478515625 -0.337222793698310874255241742503 -0.243369457125663768426448996252 +-0.17190720140933990478515625 0.337222793698310874255241742503 -0.243369457125663768426448996252 +-0.171721553802490212170539507497 -0.303986909985542286261051003748 0.0245692998170852633377236884371 +-0.171721553802490212170539507497 0.303986909985542286261051003748 0.0245692998170852633377236884371 +-0.171712803840637223684595369377 -0.0773454010486602783203125 -0.0673228025436401339431924384371 +-0.171712803840637223684595369377 0.0773454010486602783203125 -0.0673228025436401339431924384371 +-0.171672043204307567254573996252 -0.454928657412529025005909488755 0.257038651406765017437550113755 +-0.171672043204307567254573996252 0.454928657412529025005909488755 0.257038651406765017437550113755 +-0.17166960239410400390625 -0.355568003654479991570980246252 -0.695773601531982421875 +-0.17166960239410400390625 0.355568003654479991570980246252 -0.695773601531982421875 +-0.171592850983142863885433371252 -0.441331145167350780145198996252 0.445289635658264182360710492503 +-0.171592850983142863885433371252 0.441331145167350780145198996252 0.445289635658264182360710492503 +-0.171590405702590959036157869377 -0.235121852159500127621427623126 0.343183037638664256707698996252 +-0.171590405702590959036157869377 0.235121852159500127621427623126 0.343183037638664256707698996252 +-0.171531700342893583810521818123 -0.194561605900526041201814564374 0.8094584047794342041015625 +-0.171531700342893583810521818123 0.194561605900526041201814564374 0.8094584047794342041015625 +-0.17151649296283721923828125 -0.2071335017681121826171875 0.421518504619598388671875 +-0.17151649296283721923828125 0.2071335017681121826171875 0.421518504619598388671875 +-0.171510748565196990966796875 -0.72479474544525146484375 -0.0880732499063014984130859375 +-0.171510748565196990966796875 0.72479474544525146484375 -0.0880732499063014984130859375 +-0.171506303548812855108707253748 -0.304403746128082242083934261245 -0.0205897999927401528785786410936 +-0.171506303548812855108707253748 0.304403746128082242083934261245 -0.0205897999927401528785786410936 +-0.171454203128814708367855246252 -0.0494643986225128187705912807814 0.0903147995471954428969851846887 +-0.171454203128814708367855246252 0.0494643986225128187705912807814 0.0903147995471954428969851846887 +-0.171416604518890403063835492503 -0.0941828012466430775084802462516 -0.04178459942340850830078125 +-0.171416604518890403063835492503 0.0941828012466430775084802462516 -0.04178459942340850830078125 +-0.171364204585552210025056751874 -0.619474792480468661182158029987 -0.277281901240348793713508257497 +-0.171364204585552210025056751874 0.619474792480468661182158029987 -0.277281901240348793713508257497 +-0.171322198212146753482088001874 -0.3721986114978790283203125 -0.186055652797222137451171875 +-0.171322198212146753482088001874 0.3721986114978790283203125 -0.186055652797222137451171875 +-0.17128349840641021728515625 -0.4613409936428070068359375 -0.08846700191497802734375 +-0.17128349840641021728515625 0.4613409936428070068359375 -0.08846700191497802734375 +-0.171228953450918180978490568123 -0.526998254656791620398337272491 -0.771655523777007967822783029987 +-0.171228953450918180978490568123 0.526998254656791620398337272491 -0.771655523777007967822783029987 +-0.171214807033538807257144753748 -0.397702789306640602795539507497 -0.415353012084960948602230246252 +-0.171214807033538807257144753748 0.397702789306640602795539507497 -0.415353012084960948602230246252 +-0.17116320133209228515625 -0.223045206069946294613615123126 0.530050814151763916015625 +-0.17116320133209228515625 0.223045206069946294613615123126 0.530050814151763916015625 +-0.171157351136207558361945757497 -0.02335934899747371673583984375 -0.304400241374969460217414507497 +-0.171157351136207558361945757497 0.02335934899747371673583984375 -0.304400241374969460217414507497 +-0.17114399373531341552734375 -0.9238770008087158203125 0.342287003993988037109375 +-0.17114399373531341552734375 0.9238770008087158203125 0.342287003993988037109375 +-0.171095204353332530633480246252 -0.0716448009014129666427450615629 0.0747893989086151206313601846887 +-0.171095204353332530633480246252 0.0716448009014129666427450615629 0.0747893989086151206313601846887 +-0.17109300196170806884765625 -0.099167503416538238525390625 -0.4592309892177581787109375 +-0.17109300196170806884765625 0.099167503416538238525390625 -0.4592309892177581787109375 +-0.171080392599105818307592130623 -0.234060591459274269787727007497 0.0771177023649215614975460653113 +-0.171080392599105818307592130623 0.234060591459274269787727007497 0.0771177023649215614975460653113 +-0.1710772477090358734130859375 -0.5265314877033233642578125 -0.5059612691402435302734375 +-0.1710772477090358734130859375 0.5265314877033233642578125 -0.5059612691402435302734375 +-0.1709827445447444915771484375 -0.04953149892389774322509765625 -0.7285679876804351806640625 +-0.1709827445447444915771484375 0.04953149892389774322509765625 -0.7285679876804351806640625 +-0.170975601673126226254240123126 -0.0266835987567901611328125 -0.360631608963012717516960492503 +-0.170975601673126226254240123126 0.0266835987567901611328125 -0.360631608963012717516960492503 +-0.170973443984985346011384876874 -0.305508139729499805792301003748 0.28272373974323272705078125 +-0.170973443984985346011384876874 0.305508139729499805792301003748 0.28272373974323272705078125 +-0.170944207906723016909822376874 -0.196883100271224964483707253748 0.14837519824504852294921875 +-0.170944207906723016909822376874 0.196883100271224964483707253748 0.14837519824504852294921875 +-0.1708648502826690673828125 -0.525857797265052773205695757497 0.341729700565338134765625 +-0.1708648502826690673828125 0.525857797265052773205695757497 0.341729700565338134765625 +-0.170640605688095109426782869377 -0.612051057815551802221420985006 0.137022600322961818353206808752 +-0.170640605688095109426782869377 0.612051057815551802221420985006 0.137022600322961818353206808752 +-0.1706264019012451171875 -0.299367958307266202044871761245 -0.0613630481064319568962339701557 +-0.1706264019012451171875 0.299367958307266202044871761245 -0.0613630481064319568962339701557 +-0.17059050500392913818359375 -0.2358477115631103515625 -0.343183037638664256707698996252 +-0.17059050500392913818359375 0.2358477115631103515625 -0.343183037638664256707698996252 +-0.1705749928951263427734375 -0.3101175129413604736328125 -0.3531729876995086669921875 +-0.1705749928951263427734375 0.3101175129413604736328125 -0.3531729876995086669921875 +-0.17054300010204315185546875 -0.4580455124378204345703125 0.105402000248432159423828125 +-0.17054300010204315185546875 0.4580455124378204345703125 0.105402000248432159423828125 +-0.170540696382522588558927623126 0 0.246811491250991804635717130623 +-0.170528399944305436575220369377 -0.104499197006225591488615123126 0 +-0.170528399944305436575220369377 0.104499197006225591488615123126 0 +-0.170515203475952170641960492503 -0.524800777435302734375 -0.579231214523315496300881477509 +-0.170515203475952170641960492503 0.524800777435302734375 -0.579231214523315496300881477509 +-0.170481503009796142578125 -0.1111152470111846923828125 -0.14522199332714080810546875 +-0.170481503009796142578125 0.1111152470111846923828125 -0.14522199332714080810546875 +-0.170479755103588093145816628748 -0.296809446811675980981704014994 0.0730810493230819591126135037484 +-0.170479755103588093145816628748 0.296809446811675980981704014994 0.0730810493230819591126135037484 +-0.1704102456569671630859375 -0.1734447479248046875 0.0581142492592334747314453125 +-0.1704102456569671630859375 0.1734447479248046875 0.0581142492592334747314453125 +-0.17037475109100341796875 -0.16170950233936309814453125 -0.0855714976787567138671875 +-0.17037475109100341796875 0.16170950233936309814453125 -0.0855714976787567138671875 +-0.170191204547882085629240123126 -0.26699960231781005859375 -0.244430398941040044613615123126 +-0.170191204547882085629240123126 0.26699960231781005859375 -0.244430398941040044613615123126 +-0.170184803009033214227230246252 -0.06923019886016845703125 -0.0790211975574493519225427462516 +-0.170184803009033214227230246252 0.06923019886016845703125 -0.0790211975574493519225427462516 +-0.1701450049877166748046875 -0.082650251686573028564453125 0.163461506366729736328125 +-0.1701450049877166748046875 0.082650251686573028564453125 0.163461506366729736328125 +-0.170129597187042236328125 0 0.105147194862365733758480246252 +-0.170129203796386740954460492503 -0.123604404926300051603682561563 0.340261602401733420641960492503 +-0.170129203796386740954460492503 0.123604404926300051603682561563 0.340261602401733420641960492503 +-0.170032501220703125 -0.3247210085391998291015625 0.340066492557525634765625 +-0.170032501220703125 0.3247210085391998291015625 0.340066492557525634765625 +-0.169977998733520513363615123126 -0.332324409484863303454460492503 -0.143763196468353282586605246252 +-0.169977998733520513363615123126 0.332324409484863303454460492503 -0.143763196468353282586605246252 +-0.169964253902435302734375 -0.72289574146270751953125 0.10504424571990966796875 +-0.169964253902435302734375 0.72289574146270751953125 0.10504424571990966796875 +-0.16996200382709503173828125 0 0.1833382546901702880859375 +-0.169962000846862776315404630623 -0.0246966004371643073345143903907 0.245973604917526234014957253748 +-0.169962000846862776315404630623 0.0246966004371643073345143903907 0.245973604917526234014957253748 +-0.16995935142040252685546875 -0.523080801963806241161591970013 0 +-0.16995935142040252685546875 0.523080801963806241161591970013 0 +-0.169911205768585205078125 -0.319810390472412109375 0.713338422775268599096420985006 +-0.169911205768585205078125 0.319810390472412109375 0.713338422775268599096420985006 +-0.169748149812221527099609375 -0.285589715838432345318409488755 -0.438319736719131491931022992503 +-0.169748149812221527099609375 0.285589715838432345318409488755 -0.438319736719131491931022992503 +-0.169738805294036870785490123126 -0.235035306215286232678352007497 -0.0771177023649215614975460653113 +-0.169738805294036870785490123126 0.235035306215286232678352007497 -0.0771177023649215614975460653113 +-0.1697365939617156982421875 -0.30382658541202545166015625 0.425885903835296675268295985006 +-0.1697365939617156982421875 0.30382658541202545166015625 0.425885903835296675268295985006 +-0.169732502102851845471320757497 -0.273070356249809242932258257497 0.138287805020809173583984375 +-0.169732502102851845471320757497 0.273070356249809242932258257497 0.138287805020809173583984375 +-0.169722402095794699938835492503 -0.0138280004262924197805384451954 0.104895603656768809930355246252 +-0.169722402095794699938835492503 0.0138280004262924197805384451954 0.104895603656768809930355246252 +-0.169687604904174810238615123126 -0.221346402168273947985710492503 0.286726403236389149054019753748 +-0.169687604904174810238615123126 0.221346402168273947985710492503 0.286726403236389149054019753748 +-0.169685804843902610095085492503 -0.103223598003387456722990123126 0.0234861999750137356857138115629 +-0.169685804843902610095085492503 0.103223598003387456722990123126 0.0234861999750137356857138115629 +-0.169657599925994884149105246252 -0.0131633996963500983501393903907 -0.105085802078247081414730246252 +-0.169657599925994884149105246252 0.0131633996963500983501393903907 -0.105085802078247081414730246252 +-0.169641602039337174856470369377 -0.732034397125244207238381477509 -0.2744944095611572265625 +-0.169641602039337174856470369377 0.732034397125244207238381477509 -0.2744944095611572265625 +-0.16960389912128448486328125 -0.703040960431098871374899772491 -0.446618053317069996221988503748 +-0.16960389912128448486328125 0.703040960431098871374899772491 -0.446618053317069996221988503748 +-0.1695888042449951171875 -0.628714418411254971630341970013 0.464711999893188509869190738755 +-0.1695888042449951171875 0.628714418411254971630341970013 0.464711999893188509869190738755 +-0.1695609986782073974609375 0 -0.4703715145587921142578125 +-0.169560654461383797375617632497 -0.180640253424644459112613503748 0.247221091389656061343416126874 +-0.169560654461383797375617632497 0.180640253424644459112613503748 0.247221091389656061343416126874 +-0.169524903595447556936548494377 -0.123165898025035858154296875 0.398235592246055591925113503748 +-0.169524903595447556936548494377 0.123165898025035858154296875 0.398235592246055591925113503748 +-0.169421397149562835693359375 -0.360674554109573386462272992503 0.209069998562335962466463001874 +-0.169421397149562835693359375 0.360674554109573386462272992503 0.209069998562335962466463001874 +-0.16939674317836761474609375 -0.02037500031292438507080078125 0.18272824585437774658203125 +-0.16939674317836761474609375 0.02037500031292438507080078125 0.18272824585437774658203125 +-0.169379700720310194528295255623 -0.521306115388870172644431022491 -0.435373407602310136255141514994 +-0.169379700720310194528295255623 0.521306115388870172644431022491 -0.435373407602310136255141514994 +-0.16936899721622467041015625 -0.19706650078296661376953125 -0.4271754920482635498046875 +-0.16936899721622467041015625 0.19706650078296661376953125 -0.4271754920482635498046875 +-0.169368855655193328857421875 -0.893704915046691805713408029987 -0.274054087698459625244140625 +-0.169368855655193328857421875 0.893704915046691805713408029987 -0.274054087698459625244140625 +-0.16935800015926361083984375 0 0.470444500446319580078125 +-0.1693480014801025390625 -0.0392028003931045587737713731258 -0.0989162027835845947265625 +-0.1693480014801025390625 0.0392028003931045587737713731258 -0.0989162027835845947265625 +-0.169331800937652598992855246252 -0.10267460346221923828125 -0.028011798858642578125 +-0.169331800937652598992855246252 0.10267460346221923828125 -0.028011798858642578125 +-0.169324207305908192022769753748 -0.521118593215942338403579014994 0.244468206167221063784822376874 +-0.169324207305908192022769753748 0.521118593215942338403579014994 0.244468206167221063784822376874 +-0.169296002388000493832365123126 -0.324866390228271517681690738755 0.160625994205474853515625 +-0.169296002388000493832365123126 0.324866390228271517681690738755 0.160625994205474853515625 +-0.1692498028278350830078125 -0.138263404369354248046875 -0.2055180072784423828125 +-0.1692498028278350830078125 0.138263404369354248046875 -0.2055180072784423828125 +-0.169242498278617842233373380623 -0.848278772830963090356704014994 -0.392784155905246734619140625 +-0.169242498278617842233373380623 0.848278772830963090356704014994 -0.392784155905246734619140625 +-0.169189198315143590756193248126 -0.403380444645881686138721988755 -0.105637051910161969270340875937 +-0.169189198315143590756193248126 0.403380444645881686138721988755 -0.105637051910161969270340875937 +-0.16907174885272979736328125 -0.19805999100208282470703125 -0.7033394873142242431640625 +-0.16907174885272979736328125 0.19805999100208282470703125 -0.7033394873142242431640625 +-0.16893374919891357421875 -0.18369825184345245361328125 0.014706999994814395904541015625 +-0.16893374919891357421875 0.18369825184345245361328125 0.014706999994814395904541015625 +-0.1689155995845794677734375 -0.0244056008756160722206196567186 0.575214600563049294201789507497 +-0.1689155995845794677734375 0.0244056008756160722206196567186 0.575214600563049294201789507497 +-0.16887350380420684814453125 -0.1430124938488006591796875 0.116314999759197235107421875 +-0.16887350380420684814453125 0.1430124938488006591796875 0.116314999759197235107421875 +-0.16879950463771820068359375 -0.040569998323917388916015625 0.468892991542816162109375 +-0.16879950463771820068359375 0.040569998323917388916015625 0.468892991542816162109375 +-0.168775196373462693655298494377 -0.519438135623931929174545985006 -0.0648004479706287411788778740629 +-0.168775196373462693655298494377 0.519438135623931929174545985006 -0.0648004479706287411788778740629 +-0.168746691942214949166967130623 -0.0483008980751037583778462192186 0.243293094635009754522769753748 +-0.168746691942214949166967130623 0.0483008980751037583778462192186 0.243293094635009754522769753748 +-0.168682193756103521176115123126 -0.171373808383941644839509876874 0.1793805062770843505859375 +-0.168682193756103521176115123126 0.171373808383941644839509876874 0.1793805062770843505859375 +-0.168626707792282115594417746252 -0.167863857746124278680355246252 0.495869544148445196007912727509 +-0.168626707792282115594417746252 0.167863857746124278680355246252 0.495869544148445196007912727509 +-0.1686168015003204345703125 -0.711149418354034446032585492503 -0.525199484825134343957131477509 +-0.1686168015003204345703125 0.711149418354034446032585492503 -0.525199484825134343957131477509 +-0.168603003025054931640625 -0.1837525069713592529296875 -0.01754949986934661865234375 +-0.168603003025054931640625 0.1837525069713592529296875 -0.01754949986934661865234375 +-0.168565252423286432437166126874 -0.140337751805782312564119251874 -0.27274729311466217041015625 +-0.168565252423286432437166126874 0.140337751805782312564119251874 -0.27274729311466217041015625 +-0.168535847961902601754857755623 -0.277426806092262223657485264994 -0.130881448090076429879857755623 +-0.168535847961902601754857755623 0.277426806092262223657485264994 -0.130881448090076429879857755623 +-0.168502998352050792352230246252 -0.0275900006294250502159037807814 0.104141795635223396998547684689 +-0.168502998352050792352230246252 0.0275900006294250502159037807814 0.104141795635223396998547684689 +-0.168273606896400473864616742503 -0.517889356613159268505341970013 0.0772947974503040424743005587516 +-0.168273606896400473864616742503 0.517889356613159268505341970013 0.0772947974503040424743005587516 +-0.168217796087265003546207253748 -0.210185104608535761050447376874 0.132381597161293024234041126874 +-0.168217796087265003546207253748 0.210185104608535761050447376874 0.132381597161293024234041126874 +-0.16820399463176727294921875 -0.0406409986317157745361328125 0.984914004802703857421875 +-0.16820399463176727294921875 0.0406409986317157745361328125 0.984914004802703857421875 +-0.168187201023101806640625 -0.687876796722412198192841970013 -0.37220799922943115234375 +-0.168187201023101806640625 0.687876796722412198192841970013 -0.37220799922943115234375 +-0.168070399761199973376335492503 -0.517257595062255881579460492503 0.586683177947998069079460492503 +-0.168070399761199973376335492503 0.517257595062255881579460492503 0.586683177947998069079460492503 +-0.168032991886138904913394753748 -0.0727139979600906344314736884371 0.57138240337371826171875 +-0.168032991886138904913394753748 0.0727139979600906344314736884371 0.57138240337371826171875 +-0.167988002300262451171875 0 0.73094473779201507568359375 +-0.167984095215797435418636496252 -0.869978678226471013879006477509 -0.157853700220584869384765625 +-0.167984095215797435418636496252 0.869978678226471013879006477509 -0.157853700220584869384765625 +-0.167967605590820329153345369377 -0.361935591697692904400440738755 0.02809999883174896240234375 +-0.167967605590820329153345369377 0.361935591697692904400440738755 0.02809999883174896240234375 +-0.167927849292755143606470369377 -0.398141098022460948602230246252 0.125633704662323014700220369377 +-0.167927849292755143606470369377 0.398141098022460948602230246252 0.125633704662323014700220369377 +-0.167921400070190435238615123126 -0.0920521974563598688323651231258 0.0576955974102020263671875 +-0.167921400070190435238615123126 0.0920521974563598688323651231258 0.0576955974102020263671875 +-0.167920804023742681332365123126 -0.0633545994758605984786825615629 0.0882542014122009305099325615629 +-0.167920804023742681332365123126 0.0633545994758605984786825615629 0.0882542014122009305099325615629 +-0.16786475479602813720703125 -0.09654624760150909423828125 -0.15811474621295928955078125 +-0.16786475479602813720703125 0.09654624760150909423828125 -0.15811474621295928955078125 +-0.167831997573375690802066628748 -0.0701281018555164337158203125 -0.299022489786148037982371761245 +-0.167831997573375690802066628748 0.0701281018555164337158203125 -0.299022489786148037982371761245 +-0.167811596393585227282585492503 -0.362332797050476107525440738755 -0.0235436007380485541606862653907 +-0.167811596393585227282585492503 0.362332797050476107525440738755 -0.0235436007380485541606862653907 +-0.167784202098846452200220369377 -0.0607598006725311307052450615629 -0.0903146028518676813323651231258 +-0.167784202098846452200220369377 0.0607598006725311307052450615629 -0.0903146028518676813323651231258 +-0.167759102582931501901342130623 -0.0200222991406917572021484375 -0.247903203964233376233039507497 +-0.167759102582931501901342130623 0.0200222991406917572021484375 -0.247903203964233376233039507497 +-0.167719303071498848645148882497 -0.217082592844963062628238503748 -0.217359802126884438244758257497 +-0.167719303071498848645148882497 0.217082592844963062628238503748 -0.217359802126884438244758257497 +-0.167704999446868896484375 -0.17204749584197998046875 -0.069099001586437225341796875 +-0.167704999446868896484375 0.17204749584197998046875 -0.069099001586437225341796875 +-0.1677042543888092041015625 -0.0406142510473728179931640625 0.1809027493000030517578125 +-0.1677042543888092041015625 0.0406142510473728179931640625 0.1809027493000030517578125 +-0.16765700280666351318359375 -0.4096024930477142333984375 -0.23262999951839447021484375 +-0.16765700280666351318359375 0.4096024930477142333984375 -0.23262999951839447021484375 +-0.167590247839689260311857310626 -0.515797850489616349634047764994 -0.654497450590133644787727007497 +-0.167590247839689260311857310626 0.515797850489616349634047764994 -0.654497450590133644787727007497 +-0.16747640073299407958984375 -0.235309895873069746530248380623 0.197689104080200184210269753748 +-0.16747640073299407958984375 0.235309895873069746530248380623 0.197689104080200184210269753748 +-0.1674420051276683807373046875 -0.06042825244367122650146484375 0.7285679876804351806640625 +-0.1674420051276683807373046875 0.06042825244367122650146484375 0.7285679876804351806640625 +-0.167409002780914306640625 -0.121628102660179135408036188437 0.217211401462554937191740123126 +-0.167409002780914306640625 0.121628102660179135408036188437 0.217211401462554937191740123126 +-0.167276108264923090152009876874 -0.248144102096557600534154630623 0.0210530988872051245952565778907 +-0.167276108264923090152009876874 0.248144102096557600534154630623 0.0210530988872051245952565778907 +-0.1672450006008148193359375 -0.15441800653934478759765625 0.103364251554012298583984375 +-0.1672450006008148193359375 0.15441800653934478759765625 0.103364251554012298583984375 +-0.167193996906280534231470369377 -0.282092404365539561883480246252 0.229063606262207036801115123126 +-0.167193996906280534231470369377 0.282092404365539561883480246252 0.229063606262207036801115123126 +-0.16719199717044830322265625 -0.0166510008275508880615234375 -0.1851204931735992431640625 +-0.16719199717044830322265625 0.0166510008275508880615234375 -0.1851204931735992431640625 +-0.167175398766994470767244251874 -0.514503514766693093029914507497 0.444227707386016801294204014994 +-0.167175398766994470767244251874 0.514503514766693093029914507497 0.444227707386016801294204014994 +-0.16711549460887908935546875 -0.0495840013027191162109375 -0.17920325696468353271484375 +-0.16711549460887908935546875 0.0495840013027191162109375 -0.17920325696468353271484375 +-0.167091304063796991519197376874 -0.248534095287322981393529630623 -0.017644800245761871337890625 +-0.167091304063796991519197376874 0.248534095287322981393529630623 -0.017644800245761871337890625 +-0.16705949604511260986328125 -0.4483999907970428466796875 -0.14501149952411651611328125 +-0.16705949604511260986328125 0.4483999907970428466796875 -0.14501149952411651611328125 +-0.167037002742290496826171875 -0.70964848995208740234375 -0.1760617531836032867431640625 +-0.167037002742290496826171875 0.70964848995208740234375 -0.1760617531836032867431640625 +-0.167010550945997232608064564374 -0.7041756808757781982421875 0.445807987451553311419871761245 +-0.167010550945997232608064564374 0.7041756808757781982421875 0.445807987451553311419871761245 +-0.166973398625850671939119251874 -0.634018474817276023181022992503 0.616554880142211936266960492503 +-0.166973398625850671939119251874 0.634018474817276023181022992503 0.616554880142211936266960492503 +-0.166969753801822662353515625 -0.400274346768856037481754128748 0.731028029322624228747429242503 +-0.166969753801822662353515625 0.400274346768856037481754128748 0.731028029322624228747429242503 +-0.166927804052829753533870871252 -0.599247342348098732678352007497 -0.188514949381351465396150501874 +-0.166927804052829753533870871252 0.599247342348098732678352007497 -0.188514949381351465396150501874 +-0.166885549575090413876310435626 -0.513611790537834123071547764994 0.781570684909820512231704014994 +-0.166885549575090413876310435626 0.513611790537834123071547764994 0.781570684909820512231704014994 +-0.166869199275970464535490123126 -0.356696796417236339227230246252 -0.0701572000980377197265625 +-0.166869199275970464535490123126 0.356696796417236339227230246252 -0.0701572000980377197265625 +-0.166803854703903187139957253748 -0.308617006242275226934879128748 -0.882853978872299105518095529987 +-0.166803854703903187139957253748 0.308617006242275226934879128748 -0.882853978872299105518095529987 +-0.16673900187015533447265625 -0.1211419999599456787109375 0.97853100299835205078125 +-0.16673900187015533447265625 0.1211419999599456787109375 0.97853100299835205078125 +-0.16669400036334991455078125 -0.121108748018741607666015625 0.14158324897289276123046875 +-0.16669400036334991455078125 0.121108748018741607666015625 0.14158324897289276123046875 +-0.166639196872711198293970369377 -0.353903603553771983758480246252 0.0835691988468170166015625 +-0.166639196872711198293970369377 0.353903603553771983758480246252 0.0835691988468170166015625 +-0.166528999805450439453125 -0.869720995426177978515625 0.4645999968051910400390625 +-0.166528999805450439453125 0.869720995426177978515625 0.4645999968051910400390625 +-0.1665000021457672119140625 -0.07980500161647796630859375 0.464659988880157470703125 +-0.1665000021457672119140625 0.07980500161647796630859375 0.464659988880157470703125 +-0.166477000713348394222990123126 -0.0412198007106781005859375 0.102889800071716316920422684689 +-0.166477000713348394222990123126 0.0412198007106781005859375 0.102889800071716316920422684689 +-0.166470301151275618112279630623 -0.0716016009449958745758380018742 0.239083206653594948498664507497 +-0.166470301151275618112279630623 0.0716016009449958745758380018742 0.239083206653594948498664507497 +-0.166426002979278564453125 -0.0844716012477874783614950615629 0.0718815982341766412933026231258 +-0.166426002979278564453125 0.0844716012477874783614950615629 0.0718815982341766412933026231258 +-0.166291205585002904721036998126 -0.32007510960102081298828125 -0.26907075941562652587890625 +-0.166291205585002904721036998126 0.32007510960102081298828125 -0.26907075941562652587890625 +-0.166213202476501481497095369377 -0.100840997695922862664730246252 0.0469498008489608806281800923443 +-0.166213202476501481497095369377 0.100840997695922862664730246252 0.0469498008489608806281800923443 +-0.1661979518830776214599609375 -0.328016689419746376721320757497 -0.766343840956687949450554242503 +-0.1661979518830776214599609375 0.328016689419746376721320757497 -0.766343840956687949450554242503 +-0.166170799732208274157585492503 -0.110673797130584727899105246252 0.0117732003331184401084819057814 +-0.166170799732208274157585492503 0.110673797130584727899105246252 0.0117732003331184401084819057814 +-0.166151595115661632195980246252 -0.0263496011495590216899831403907 -0.108163404464721682463057561563 +-0.166151595115661632195980246252 0.0263496011495590216899831403907 -0.108163404464721682463057561563 +-0.166120398044586198293970369377 -0.110483205318450933285490123126 -0.0140525996685028076171875 +-0.166120398044586198293970369377 0.110483205318450933285490123126 -0.0140525996685028076171875 +-0.165831005573272710629240123126 -0.510383999347686745373664507497 -0.2683289945125579833984375 +-0.165831005573272710629240123126 0.510383999347686745373664507497 -0.2683289945125579833984375 +-0.1658069975674152374267578125 -0.1204642541706562042236328125 0.7214542329311370849609375 +-0.1658069975674152374267578125 0.1204642541706562042236328125 0.7214542329311370849609375 +-0.16570675373077392578125 -0.181989252567291259765625 0.0438307486474514007568359375 +-0.16570675373077392578125 0.181989252567291259765625 0.0438307486474514007568359375 +-0.165680998563766473941072376874 -0.196800899505615217721654630623 -0.154335004091262800729467130623 +-0.165680998563766473941072376874 0.196800899505615217721654630623 -0.154335004091262800729467130623 +-0.165556940436363236868189119377 -0.173795042932033544369474498126 0.604057985544204756322983485006 +-0.165556940436363236868189119377 0.173795042932033544369474498126 0.604057985544204756322983485006 +-0.165542644262313853875667746252 -0.509496000409126348351662727509 -0.368116447329521201403679242503 +-0.165542644262313853875667746252 0.509496000409126348351662727509 -0.368116447329521201403679242503 +-0.165465296059846861398412443123 -0.712291961908340431897102007497 -0.606433472037315346447883257497 +-0.165465296059846861398412443123 0.712291961908340431897102007497 -0.606433472037315346447883257497 +-0.165391103923320764712556751874 -0.357840716838836669921875 -0.578442895412444979541533029987 +-0.165391103923320764712556751874 0.357840716838836669921875 -0.578442895412444979541533029987 +-0.165267598628997813836605246252 -0.153071200847625737972990123126 0.330538797378540083471420985006 +-0.165267598628997813836605246252 0.153071200847625737972990123126 0.330538797378540083471420985006 +-0.165177655220031749383480246252 -0.50836776196956634521484375 -0.129533249139785783254907869377 +-0.165177655220031749383480246252 0.50836776196956634521484375 -0.129533249139785783254907869377 +-0.165160802006721479928685880623 -0.119994704425334927644364313437 0.284294140338897660669204014994 +-0.165160802006721479928685880623 0.119994704425334927644364313437 0.284294140338897660669204014994 +-0.165155196189880393298210492503 -0.0896511971950531005859375 -0.0684571981430053683181924384371 +-0.165155196189880393298210492503 0.0896511971950531005859375 -0.0684571981430053683181924384371 +-0.16500270366668701171875 -0.11988119781017303466796875 -0.220005905628204351254240123126 +-0.16500270366668701171875 0.11988119781017303466796875 -0.220005905628204351254240123126 +-0.164910292625427251644865123126 -0.060109801590442657470703125 -0.24329280853271484375 +-0.164910292625427251644865123126 0.060109801590442657470703125 -0.24329280853271484375 +-0.164887250959873221667351117503 -0.389930751919746410028011496252 -0.351093062758445761950554242503 +-0.164887250959873221667351117503 0.389930751919746410028011496252 -0.351093062758445761950554242503 +-0.164881598949432384149105246252 0 -0.782824802398681685033920985006 +-0.164836001396179210320980246252 0 -0.113265597820281990748547684689 +-0.164830045402050012759431751874 -0.389218059182167064324886496252 -0.15440310537815093994140625 +-0.164830045402050012759431751874 0.389218059182167064324886496252 -0.15440310537815093994140625 +-0.16481550037860870361328125 -0.0993359982967376708984375 0.15958750247955322265625 +-0.16481550037860870361328125 0.0993359982967376708984375 0.15958750247955322265625 +-0.164813345670700078793302623126 -0.366930213570594798699886496252 -0.51058669388294219970703125 +-0.164813345670700078793302623126 0.366930213570594798699886496252 -0.51058669388294219970703125 +-0.164715300500392930471704744377 -0.86458861827850341796875 0.188030697405338287353515625 +-0.164715300500392930471704744377 0.86458861827850341796875 0.188030697405338287353515625 +-0.16470849514007568359375 -0.16522024571895599365234375 0.089851997792720794677734375 +-0.16470849514007568359375 0.16522024571895599365234375 0.089851997792720794677734375 +-0.164687895774841303042634876874 -0.333689865469932567254573996252 0.532943469285965032433693977509 +-0.164687895774841303042634876874 0.333689865469932567254573996252 0.532943469285965032433693977509 +-0.164612406492233270816072376874 -0.119596204161643973606921065311 0.564446389675140380859375 +-0.164612406492233270816072376874 0.119596204161643973606921065311 0.564446389675140380859375 +-0.164612400531768815481470369377 -0.248915195465087890625 -0.266353201866149913445980246252 +-0.164612400531768815481470369377 0.248915195465087890625 -0.266353201866149913445980246252 +-0.16454650461673736572265625 -0.4396710097789764404296875 0.17208699882030487060546875 +-0.16454650461673736572265625 0.4396710097789764404296875 0.17208699882030487060546875 +-0.16453349590301513671875 -0.243650400638580316714509876874 0.0596924990415573092361611884371 +-0.16453349590301513671875 0.243650400638580316714509876874 0.0596924990415573092361611884371 +-0.164523601531982421875 -0.0519779980182647760589276231258 -0.101144802570343028680355246252 +-0.164523601531982421875 0.0519779980182647760589276231258 -0.101144802570343028680355246252 +-0.16445159912109375 -0.2111940085887908935546875 -0.135472503304481489694310880623 +-0.16445159912109375 0.2111940085887908935546875 -0.135472503304481489694310880623 +-0.16441619396209716796875 -0.119455200433731076326004938437 -0.564533400535583429480368522491 +-0.16441619396209716796875 0.119455200433731076326004938437 -0.564533400535583429480368522491 +-0.164390194416046159231470369377 -0.0992878019809722983657351846887 -0.0558372020721435574630575615629 +-0.164390194416046159231470369377 0.0992878019809722983657351846887 -0.0558372020721435574630575615629 +-0.16434399783611297607421875 -0.0581127516925334930419921875 0.1792037487030029296875 +-0.16434399783611297607421875 0.0581127516925334930419921875 0.1792037487030029296875 +-0.16421274840831756591796875 -0.081381998956203460693359375 -0.17003275454044342041015625 +-0.16421274840831756591796875 0.081381998956203460693359375 -0.17003275454044342041015625 +-0.164073802530765533447265625 -0.832512122392654374536391514994 -0.0500301515683531719536070170307 +-0.164073802530765533447265625 0.832512122392654374536391514994 -0.0500301515683531719536070170307 +-0.1640014946460723876953125 -0.18132449686527252197265625 -0.0522004999220371246337890625 +-0.1640014946460723876953125 0.18132449686527252197265625 -0.0522004999220371246337890625 +-0.16399849951267242431640625 -0.392854988574981689453125 0.262239992618560791015625 +-0.16399849951267242431640625 0.392854988574981689453125 0.262239992618560791015625 +-0.163980805873870871813835492503 -0.159841597080230712890625 -0.327965211868286143914730246252 +-0.163980805873870871813835492503 0.159841597080230712890625 -0.327965211868286143914730246252 +-0.1639595925807952880859375 0 -0.577163386344909601355368522491 +-0.163957405090332047903345369377 -0.0816565990447998130141726846887 -0.0803128004074096790709802462516 +-0.163957405090332047903345369377 0.0816565990447998130141726846887 -0.0803128004074096790709802462516 +-0.163928407430648792608707253748 -0.223047602176666248663394753748 0.115660196542739859837389815311 +-0.163928407430648792608707253748 0.223047602176666248663394753748 0.115660196542739859837389815311 +-0.163905304670333845651342130623 -0.244869607686996448858707253748 -0.0563373014330863924881143134371 +-0.163905304670333845651342130623 0.244869607686996448858707253748 -0.0563373014330863924881143134371 +-0.1638967990875244140625 -0.109020996093750002775557561563 0.0353868007659912109375 +-0.1638967990875244140625 0.109020996093750002775557561563 0.0353868007659912109375 +-0.163792756199836742059261496252 -0.0366112988442182582526918110943 -0.523766645789146445544304242503 +-0.163792756199836742059261496252 0.0366112988442182582526918110943 -0.523766645789146445544304242503 +-0.163784599304199224301115123126 -0.0763432025909423911391726846887 0.0857105970382690540709802462516 +-0.163784599304199224301115123126 0.0763432025909423911391726846887 0.0857105970382690540709802462516 +-0.1637670993804931640625 -0.234280207753181451968416126874 0.638978201150894098425681022491 +-0.1637670993804931640625 0.234280207753181451968416126874 0.638978201150894098425681022491 +-0.163654398918151866570980246252 -0.0546523988246917780120526231258 0.101145195960998537931807561563 +-0.163654398918151866570980246252 0.0546523988246917780120526231258 0.101145195960998537931807561563 +-0.16361175477504730224609375 -0.70134674012660980224609375 0.209389507770538330078125 +-0.16361175477504730224609375 0.70134674012660980224609375 0.209389507770538330078125 +-0.16358484327793121337890625 -0.0861692011356353787521200615629 -0.623149150609970114977897992503 +-0.16358484327793121337890625 0.0861692011356353787521200615629 -0.623149150609970114977897992503 +-0.163570395112037636486945757497 -0.596845185756683327404914507497 0.327140101790428128314403011245 +-0.163570395112037636486945757497 0.596845185756683327404914507497 0.327140101790428128314403011245 +-0.163548354804515821969701505623 -0.2861320078372955322265625 0.117815248668193803260884067186 +-0.163548354804515821969701505623 0.2861320078372955322265625 0.117815248668193803260884067186 +-0.163486003875732421875 -0.34634840488433837890625 -0.115391194820404052734375 +-0.163486003875732421875 0.34634840488433837890625 -0.115391194820404052734375 +-0.1634725034236907958984375 -0.2426010072231292724609375 0.4054889976978302001953125 +-0.1634725034236907958984375 0.2426010072231292724609375 0.4054889976978302001953125 +-0.163449445366859430484041126874 -0.0299718014895915992046315778907 -0.418193560838699351922542746252 +-0.163449445366859430484041126874 0.0299718014895915992046315778907 -0.418193560838699351922542746252 +-0.163412201404571522100894753748 -0.680659019947051913135283029987 0 +-0.163412201404571522100894753748 0.680659019947051913135283029987 0 +-0.163406600058078749215795255623 -0.290625309944152809826789507497 -0.106466847658157337530582253748 +-0.163406600058078749215795255623 0.290625309944152809826789507497 -0.106466847658157337530582253748 +-0.163345496356487290823267244377 -0.266400003433227561266960492503 0.8440082967281341552734375 +-0.163345496356487290823267244377 0.266400003433227561266960492503 0.8440082967281341552734375 +-0.163311348110437376535131193123 -0.832024177908897377697883257497 0.05971249751746654510498046875 +-0.163311348110437376535131193123 0.832024177908897377697883257497 0.05971249751746654510498046875 +-0.16315950453281402587890625 -0.1185410022735595703125 0.45752251148223876953125 +-0.16315950453281402587890625 0.1185410022735595703125 0.45752251148223876953125 +-0.163156397640705108642578125 -0.502139535546302862023537727509 0.1540648937225341796875 +-0.163156397640705108642578125 0.502139535546302862023537727509 0.1540648937225341796875 +-0.163086301088333135433927623126 -0.11848859488964080810546875 -0.877133685350418135229233485006 +-0.163086301088333135433927623126 0.11848859488964080810546875 -0.877133685350418135229233485006 +-0.163080000877380393298210492503 -0.158708000183105490954460492503 -0.766952800750732466283920985006 +-0.163080000877380393298210492503 0.158708000183105490954460492503 -0.766952800750732466283920985006 +-0.162979604303836816958650501874 0 -0.309738105535507179943977007497 +-0.162908855080604569876001619377 -0.588144057989120505602897992503 0.223713757097721094302400501874 +-0.162908855080604569876001619377 0.588144057989120505602897992503 0.223713757097721094302400501874 +-0.162881803512573253289730246252 -0.108129596710205083676115123126 -0.0421608000993728693206463731258 +-0.162881803512573253289730246252 0.108129596710205083676115123126 -0.0421608000993728693206463731258 +-0.16284249722957611083984375 -0.2855679988861083984375 -0.3767404854297637939453125 +-0.16284249722957611083984375 0.2855679988861083984375 -0.3767404854297637939453125 +-0.162811347842216486148103626874 -0.26450054347515106201171875 0.32562540471553802490234375 +-0.162811347842216486148103626874 0.26450054347515106201171875 0.32562540471553802490234375 +-0.162809993326663987600610994377 -0.118288354575634011012219559689 -0.402493062615394581182926003748 +-0.162809993326663987600610994377 0.118288354575634011012219559689 -0.402493062615394581182926003748 +-0.162761203944683074951171875 -0.407362210750579822882144753748 0.545495295524597079150908029987 +-0.162761203944683074951171875 0.407362210750579822882144753748 0.545495295524597079150908029987 +-0.162721204757690446340845369377 -0.0794315993785858209808026231258 -0.356668806076049837994190738755 +-0.162721204757690446340845369377 0.0794315993785858209808026231258 -0.356668806076049837994190738755 +-0.162665104866027837582365123126 -0.142865699529647810495092130623 0.207676506042480474301115123126 +-0.162665104866027837582365123126 0.142865699529647810495092130623 0.207676506042480474301115123126 +-0.162632049620151514224275501874 -0.204289743304252618960603626874 0.233059051632881153448551003748 +-0.162632049620151514224275501874 0.204289743304252618960603626874 0.233059051632881153448551003748 +-0.1625874042510986328125 -0.00824960023164749214896751539072 0.1161777973175048828125 +-0.1625874042510986328125 0.00824960023164749214896751539072 0.1161777973175048828125 +-0.162586794048547728097631193123 -0.877683150768279962683493522491 0.325172653794288613049445757497 +-0.162586794048547728097631193123 0.877683150768279962683493522491 0.325172653794288613049445757497 +-0.16253824532032012939453125 -0.201058903336524957827791126874 -0.235916802287101740054353626874 +-0.16253824532032012939453125 0.201058903336524957827791126874 -0.235916802287101740054353626874 +-0.162465906143188482113615123126 -0.184635597467422474249332253748 -0.171797704696655256784154630623 +-0.162465906143188482113615123126 0.184635597467422474249332253748 -0.171797704696655256784154630623 +-0.1624560058116912841796875 -0.4999949932098388671875 -0.85065400600433349609375 +-0.1624560058116912841796875 0.4999949932098388671875 -0.85065400600433349609375 +-0.162426400184631364309595369377 -0.712802410125732421875 0.324853610992431651727230246252 +-0.162426400184631364309595369377 0.712802410125732421875 0.324853610992431651727230246252 +-0.1623634994029998779296875 -0.393215000629425048828125 -0.2627165019512176513671875 +-0.1623634994029998779296875 0.393215000629425048828125 -0.2627165019512176513671875 +-0.1623622477054595947265625 -0.19010125100612640380859375 0 +-0.1623622477054595947265625 0.19010125100612640380859375 0 +-0.162216903269290918521150501874 -0.499261504411697421002003238755 -0.731042075157165571752670985006 +-0.162216903269290918521150501874 0.499261504411697421002003238755 -0.731042075157165571752670985006 +-0.162191247940063482113615123126 -0.2073951065540313720703125 -0.364940097928047213482471988755 +-0.162191247940063482113615123126 0.2073951065540313720703125 -0.364940097928047213482471988755 +-0.162100803852081282174779630623 -0.266370606422424327508480246252 0.512610590457916237561164507497 +-0.162100803852081282174779630623 0.266370606422424327508480246252 0.512610590457916237561164507497 +-0.162000596523284912109375 -0.369271194934844948498664507497 -0.444291615486144986224559261245 +-0.162000596523284912109375 0.369271194934844948498664507497 -0.444291615486144986224559261245 +-0.161902956664562225341796875 -0.14528195559978485107421875 -0.50515408813953399658203125 +-0.161902956664562225341796875 0.14528195559978485107421875 -0.50515408813953399658203125 +-0.16189849376678466796875 -0.13796325027942657470703125 0.13135825097560882568359375 +-0.16189849376678466796875 0.13796325027942657470703125 0.13135825097560882568359375 +-0.161878395080566422903345369377 -0.0131975993514060977590540701954 -0.116709995269775393400557561563 +-0.161878395080566422903345369377 0.0131975993514060977590540701954 -0.116709995269775393400557561563 +-0.161867797374725341796875 -0.0732050001621246393401776231258 -0.0918685972690582303146200615629 +-0.161867797374725341796875 0.0732050001621246393401776231258 -0.0918685972690582303146200615629 +-0.161854195594787614309595369377 -0.0392821997404098552375550923443 -0.110725605487823494654797684689 +-0.161854195594787614309595369377 0.0392821997404098552375550923443 -0.110725605487823494654797684689 +-0.161835598945617692434595369377 -0.33921039104461669921875 0.136914801597595225945980246252 +-0.161835598945617692434595369377 0.33921039104461669921875 0.136914801597595225945980246252 +-0.16180360317230224609375 -0.117556595802307137232922684689 0 +-0.16180360317230224609375 0.117556595802307137232922684689 0 +-0.161780101060867292916967130623 -0.1903721988201141357421875 0.166089302301406865902677623126 +-0.161780101060867292916967130623 0.1903721988201141357421875 0.166089302301406865902677623126 +-0.161760605871677398681640625 -0.378078308701515208856136496252 0.182730156183242814504907869377 +-0.161760605871677398681640625 0.378078308701515208856136496252 0.182730156183242814504907869377 +-0.161724007129669195004240123126 -0.576712810993194602282585492503 -0.0353196009993553133865518134371 +-0.161724007129669195004240123126 0.576712810993194602282585492503 -0.0353196009993553133865518134371 +-0.161694395542144792043970369377 -0.022076599299907684326171875 0.115618205070495611019865123126 +-0.161694395542144792043970369377 0.022076599299907684326171875 0.115618205070495611019865123126 +-0.16148300468921661376953125 -0.1514347493648529052734375 -0.1161497533321380615234375 +-0.16148300468921661376953125 0.1514347493648529052734375 -0.1161497533321380615234375 +-0.16147549450397491455078125 -0.1386842429637908935546875 -0.13111950457096099853515625 +-0.16147549450397491455078125 0.1386842429637908935546875 -0.13111950457096099853515625 +-0.161475008726120000668302623126 -0.224830198287963856085269753748 -0.115659901499748224429353626874 +-0.161475008726120000668302623126 0.224830198287963856085269753748 -0.115659901499748224429353626874 +-0.161441600322723394222990123126 -0.183116805553436290399105246252 0.761843204498291015625 +-0.161441600322723394222990123126 0.183116805553436290399105246252 0.761843204498291015625 +-0.16136150062084197998046875 -0.175154745578765869140625 0.0760477483272552490234375 +-0.16136150062084197998046875 0.175154745578765869140625 0.0760477483272552490234375 +-0.161341595649719254934595369377 0 -0.366017603874206565173210492503 +-0.161227208375930769479467130623 -0.5763924121856689453125 0.0421577990055084228515625 +-0.161227208375930769479467130623 0.5763924121856689453125 0.0421577990055084228515625 +-0.1611340045928955078125 -0.247672009468078629934595369377 0.269619202613830599712940738755 +-0.1611340045928955078125 0.247672009468078629934595369377 0.269619202613830599712940738755 +-0.161084103584289539679019753748 -0.09229619801044464111328125 0.235655093193054193667634876874 +-0.161084103584289539679019753748 0.09229619801044464111328125 0.235655093193054193667634876874 +-0.1610549986362457275390625 -0.4299235045909881591796875 -0.19805850088596343994140625 +-0.1610549986362457275390625 0.4299235045909881591796875 -0.19805850088596343994140625 +-0.160965351760387398449836382497 -0.116947947442531577366686690311 -0.287946739792823758197215511245 +-0.160965351760387398449836382497 0.116947947442531577366686690311 -0.287946739792823758197215511245 +-0.16095699369907379150390625 -0.033313751220703125 -0.1883692443370819091796875 +-0.16095699369907379150390625 0.033313751220703125 -0.1883692443370819091796875 +-0.160946202278137218133480246252 -0.0968872010707855224609375 0.068623602390289306640625 +-0.160946202278137218133480246252 0.0968872010707855224609375 0.068623602390289306640625 +-0.160940252244472503662109375 -0.333345003426074981689453125 -0.6522877514362335205078125 +-0.160940252244472503662109375 0.333345003426074981689453125 -0.6522877514362335205078125 +-0.160676801204681418688835492503 -0.116737794876098643914730246252 0.0235637992620468146587331403907 +-0.160676801204681418688835492503 0.116737794876098643914730246252 0.0235637992620468146587331403907 +-0.160484094917774183786107755623 -0.145456850528717041015625 0.274930942058563221319644753748 +-0.160484094917774183786107755623 0.145456850528717041015625 0.274930942058563221319644753748 +-0.16045470535755157470703125 -0.846667814254760786596420985006 -0.25963018834590911865234375 +-0.16045470535755157470703125 0.846667814254760786596420985006 -0.25963018834590911865234375 +-0.1604090034961700439453125 -0.066395498812198638916015625 -0.468892991542816162109375 +-0.1604090034961700439453125 0.066395498812198638916015625 -0.468892991542816162109375 +-0.1604077517986297607421875 -0.16337375342845916748046875 -0.100391246378421783447265625 +-0.1604077517986297607421875 0.16337375342845916748046875 -0.100391246378421783447265625 +-0.160378195345401763916015625 -0.153643047809600835629240123126 0.3913726508617401123046875 +-0.160378195345401763916015625 0.153643047809600835629240123126 0.3913726508617401123046875 +-0.160334998369216913394197376874 -0.803632521629333518298210492503 -0.37211130559444427490234375 +-0.160334998369216913394197376874 0.803632521629333518298210492503 -0.37211130559444427490234375 +-0.160322847962379472219751619377 -0.30037455260753631591796875 -0.294231140613555930407585492503 +-0.160322847962379472219751619377 0.30037455260753631591796875 -0.294231140613555930407585492503 +-0.16025699675083160400390625 -0.3615860044956207275390625 0.918461978435516357421875 +-0.16025699675083160400390625 0.3615860044956207275390625 0.918461978435516357421875 +-0.16021025180816650390625 -0.189662754535675048828125 0.0293374992907047271728515625 +-0.16021025180816650390625 0.189662754535675048828125 0.0293374992907047271728515625 +-0.160197794437408447265625 -0.116390001773834239617855246252 -0.0281071990728378323654013115629 +-0.160197794437408447265625 0.116390001773834239617855246252 -0.0281071990728378323654013115629 +-0.16014100611209869384765625 -0.075313501060009002685546875 0.17658625543117523193359375 +-0.16014100611209869384765625 0.075313501060009002685546875 0.17658625543117523193359375 +-0.160076698660850502697883257497 -0.676475095748901300574118522491 -0.0822016999125480540833166287484 +-0.160076698660850502697883257497 0.676475095748901300574118522491 -0.0822016999125480540833166287484 +-0.160048401355743413754240123126 -0.0678233981132507351974325615629 0.0989166021347046009459802462516 +-0.160048401355743413754240123126 0.0678233981132507351974325615629 0.0989166021347046009459802462516 +-0.159976196289062511102230246252 -0.0359185993671417222450337192186 0.114531600475311287623547684689 +-0.159976196289062511102230246252 0.0359185993671417222450337192186 0.114531600475311287623547684689 +-0.1599690020084381103515625 -0.065987996757030487060546875 -0.984914004802703857421875 +-0.1599690020084381103515625 0.065987996757030487060546875 -0.984914004802703857421875 +-0.159907801449298864193693248126 -0.211851903796195978335603626874 -0.593336901068687416760383257497 +-0.159907801449298864193693248126 0.211851903796195978335603626874 -0.593336901068687416760383257497 +-0.15985800325870513916015625 -0.4920007288455963134765625 -0.54302926361560821533203125 +-0.15985800325870513916015625 0.4920007288455963134765625 -0.54302926361560821533203125 +-0.15979699790477752685546875 -0.757929980754852294921875 0.632461011409759521484375 +-0.15979699790477752685546875 0.757929980754852294921875 0.632461011409759521484375 +-0.159793794900178892648412443123 -0.038608948700129985809326171875 0.93566830456256866455078125 +-0.159793794900178892648412443123 0.038608948700129985809326171875 0.93566830456256866455078125 +-0.159744192659854900018245871252 -0.418219998478889520843182481258 0.319489499926567110943409488755 +-0.159744192659854900018245871252 0.418219998478889520843182481258 0.319489499926567110943409488755 +-0.159702605009078985043302623126 -0.491522991657257046771434261245 -0.304795217514038097039730246252 +-0.159702605009078985043302623126 0.491522991657257046771434261245 -0.304795217514038097039730246252 +-0.159672097861766809634431751874 -0.491429388523101751129473768742 -0.472230517864227261615184261245 +-0.159672097861766809634431751874 0.491429388523101751129473768742 -0.472230517864227261615184261245 +-0.159667651355266587698267244377 -0.330655056238174427374332253748 0.260141390562057484014957253748 +-0.159667651355266587698267244377 0.330655056238174427374332253748 0.260141390562057484014957253748 +-0.1596271991729736328125 -0.661685609817504905016960492503 -0.420346403121948264391960492503 +-0.1596271991729736328125 0.661685609817504905016960492503 -0.420346403121948264391960492503 +-0.159583894908428169934211382497 -0.0462293989956378895134214701557 -0.679996788501739501953125 +-0.159583894908428169934211382497 0.0462293989956378895134214701557 -0.679996788501739501953125 +-0.159569297730922710076839621252 -0.491109287738800082134815738755 -0.189338594675064114669638115629 +-0.159569297730922710076839621252 0.491109287738800082134815738755 -0.189338594675064114669638115629 +-0.15954874455928802490234375 -0.0657159984111785888671875 -0.1809022426605224609375 +-0.15954874455928802490234375 0.0657159984111785888671875 -0.1809022426605224609375 +-0.159512996673583984375 0 -0.19249825179576873779296875 +-0.15948760509490966796875 -0.105825996398925786801115123126 0.0580045998096466106086488423443 +-0.15948760509490966796875 0.105825996398925786801115123126 0.0580045998096466106086488423443 +-0.159387600421905528680355246252 -0.181594002246856706106470369377 0.318777990341186534539730246252 +-0.159387600421905528680355246252 0.181594002246856706106470369377 0.318777990341186534539730246252 +-0.1592917554080486297607421875 -0.2998222410678863525390625 0.66875477135181427001953125 +-0.1592917554080486297607421875 0.2998222410678863525390625 0.66875477135181427001953125 +-0.15928675234317779541015625 -0.18948374688625335693359375 -0.0349802486598491668701171875 +-0.15928675234317779541015625 0.18948374688625335693359375 -0.0349802486598491668701171875 +-0.159253498911857582776008257497 -0.307770040631294206079360264994 0.0491512000560760456413511576557 +-0.159253498911857582776008257497 0.307770040631294206079360264994 0.0491512000560760456413511576557 +-0.15924920141696929931640625 -0.671641117334365822522102007497 -0.496021735668182361944644753748 +-0.15924920141696929931640625 0.671641117334365822522102007497 -0.496021735668182361944644753748 +-0.159236991405487054995759876874 -0.2317104041576385498046875 -0.530050814151763916015625 +-0.159236991405487054995759876874 0.2317104041576385498046875 -0.530050814151763916015625 +-0.159137299656867958752570757497 -0.308992949128150895532485264994 -0.04121564887464046478271484375 +-0.159137299656867958752570757497 0.308992949128150895532485264994 -0.04121564887464046478271484375 +-0.159123904258012788259790681877 -0.575226593017578169408920985006 -0.257476051151752483026058371252 +-0.159123904258012788259790681877 0.575226593017578169408920985006 -0.257476051151752483026058371252 +-0.159116399288177473581029630623 -0.568693184852600119860710492503 -0.1061604022979736328125 +-0.159116399288177473581029630623 0.568693184852600119860710492503 -0.1061604022979736328125 +-0.1590507030487060546875 -0.100241097807884219084151311563 -0.233783107995986921823217130623 +-0.1590507030487060546875 0.100241097807884219084151311563 -0.233783107995986921823217130623 +-0.1590390019118785858154296875 -0.6862822473049163818359375 -0.25733850896358489990234375 +-0.1590390019118785858154296875 0.6862822473049163818359375 -0.25733850896358489990234375 +-0.15898950397968292236328125 -0.58941976726055145263671875 0.43566749989986419677734375 +-0.15898950397968292236328125 0.58941976726055145263671875 0.43566749989986419677734375 +-0.158911597728729259149105246252 -0.0645045995712280328948651231258 -0.102889597415924072265625 +-0.158911597728729259149105246252 0.0645045995712280328948651231258 -0.102889597415924072265625 +-0.15889684855937957763671875 -0.31185209751129150390625 0 +-0.15889684855937957763671875 0.31185209751129150390625 0 +-0.158834397792816162109375 -0.0890717983245849637130575615629 0.0826914012432098388671875 +-0.158834397792816162109375 0.0890717983245849637130575615629 0.0826914012432098388671875 +-0.158806192874908436163394753748 -0.234834891557693464791967130623 0.09814859926700592041015625 +-0.158806192874908436163394753748 0.234834891557693464791967130623 0.09814859926700592041015625 +-0.15873999893665313720703125 -0.703978002071380615234375 -0.6922550201416015625 +-0.15873999893665313720703125 0.703978002071380615234375 -0.6922550201416015625 +-0.158651645481586445196597878748 -0.821646529436111383581931022491 -0.1490840502083301544189453125 +-0.158651645481586445196597878748 0.821646529436111383581931022491 -0.1490840502083301544189453125 +-0.158633303642272932565404630623 -0.674702692031860284949118522491 0.0980412960052490234375 +-0.158633303642272932565404630623 -0.25478355586528778076171875 0.180057504773139948062166126874 +-0.158633303642272932565404630623 0.25478355586528778076171875 0.180057504773139948062166126874 +-0.158633303642272932565404630623 0.674702692031860284949118522491 0.0980412960052490234375 +-0.158482199907302861996427623126 -0.171341103315353376901342130623 -0.1884824931621551513671875 +-0.158482199907302861996427623126 0.171341103315353376901342130623 -0.1884824931621551513671875 +-0.1584020517766475677490234375 -0.115084899961948386448717940311 0.929604452848434403833266514994 +-0.1584020517766475677490234375 0.115084899961948386448717940311 0.929604452848434403833266514994 +-0.158394502103328727038444867503 -0.249841897189617190289112613755 -0.463670355081558238641292746252 +-0.158394502103328727038444867503 0.249841897189617190289112613755 -0.463670355081558238641292746252 +-0.158393400907516468389957253748 -0.407382595539093006475894753748 0.411036586761474587170539507497 +-0.158393400907516468389957253748 0.407382595539093006475894753748 0.411036586761474587170539507497 +-0.15837524831295013427734375 -0.115065000951290130615234375 0.15549050271511077880859375 +-0.15837524831295013427734375 0.115065000951290130615234375 0.15549050271511077880859375 +-0.15835900604724884033203125 -0.1278004944324493408203125 -0.145222246646881103515625 +-0.15835900604724884033203125 0.1278004944324493408203125 -0.145222246646881103515625 +-0.1582782566547393798828125 -0.17425875365734100341796875 -0.084153749048709869384765625 +-0.1582782566547393798828125 0.17425875365734100341796875 -0.084153749048709869384765625 +-0.158202549815177923031583873126 -0.826234945654868990772001779987 0.441369996964931454730418636245 +-0.158202549815177923031583873126 0.826234945654868990772001779987 0.441369996964931454730418636245 +-0.158132398128509543688835492503 -0.0263309985399246236636994211722 -0.119586205482482915707365123126 +-0.158132398128509543688835492503 0.0263309985399246236636994211722 -0.119586205482482915707365123126 +-0.158114492893218994140625 -0.353550493717193603515625 0.3162305057048797607421875 +-0.158114492893218994140625 0.353550493717193603515625 0.3162305057048797607421875 +-0.158102099597454082147152121252 -0.486579591035842917712272992503 0.740435385704040549548210492503 +-0.158102099597454082147152121252 0.486579591035842917712272992503 0.740435385704040549548210492503 +-0.158077204227447531970085492503 -0.229781603813171392269865123126 -0.286726403236389149054019753748 +-0.158077204227447531970085492503 0.229781603813171392269865123126 -0.286726403236389149054019753748 +-0.158024704456329351254240123126 -0.292374005913734469341846988755 -0.836387979984283491674545985006 +-0.158024704456329351254240123126 0.292374005913734469341846988755 -0.836387979984283491674545985006 +-0.157800298929214460885717130623 -0.184855991601943964175447376874 -0.656450188159942604748664507497 +-0.157800298929214460885717130623 0.184855991601943964175447376874 -0.656450188159942604748664507497 +-0.157795007526874558889673494377 -0.340579238533973704949886496252 0.402002698183059725689503238755 +-0.157795007526874558889673494377 0.340579238533973704949886496252 0.402002698183059725689503238755 +-0.157731997966766374075220369377 -0.485456800460815462994190738755 -0.615997600555419966283920985006 +-0.157731997966766374075220369377 0.485456800460815462994190738755 -0.615997600555419966283920985006 +-0.15772140026092529296875 -0.485407197475433316302684261245 0.3154428005218505859375 +-0.15772140026092529296875 0.485407197475433316302684261245 0.3154428005218505859375 +-0.157719004154205311163394753748 0 -0.255195593833923317639289507497 +-0.157697098702192312069669810626 -0.598795226216316200940070757497 0.582301831245422341076789507497 +-0.157697098702192312069669810626 0.598795226216316200940070757497 0.582301831245422341076789507497 +-0.1576755009591579437255859375 -0.6448844969272613525390625 -0.348944999277591705322265625 +-0.1576755009591579437255859375 0.6448844969272613525390625 -0.348944999277591705322265625 +-0.1575659997761249542236328125 -0.4849289953708648681640625 0.5500154793262481689453125 +-0.1575659997761249542236328125 0.4849289953708648681640625 0.5500154793262481689453125 +-0.157514405250549299752904630623 -0.564970207214355424341079014994 0.126482400298118580206363503748 +-0.157514405250549299752904630623 0.564970207214355424341079014994 0.126482400298118580206363503748 +-0.157510203123092634713842130623 -0.237033301591873163394197376874 -0.0948983967304229680816973768742 +-0.157510203123092634713842130623 0.237033301591873163394197376874 -0.0948983967304229680816973768742 +-0.157455396652221690789730246252 -0.0494641989469528225997763115629 0.112964797019958498869307561563 +-0.157455396652221690789730246252 0.0494641989469528225997763115629 0.112964797019958498869307561563 +-0.157420796155929548776342130623 -0.163530904054641712530582253748 0.196153807640075672491519753748 +-0.157420796155929548776342130623 0.163530904054641712530582253748 0.196153807640075672491519753748 +-0.15736520290374755859375 -0.0162696003913879415347931711722 0.36738479137420654296875 +-0.15736520290374755859375 0.0162696003913879415347931711722 0.36738479137420654296875 +-0.15728400647640228271484375 -0.1627635061740875244140625 -0.445836007595062255859375 +-0.15728400647640228271484375 0.1627635061740875244140625 -0.445836007595062255859375 +-0.157281150668859476260408314374 -0.484069964289665255474659488755 -0.404275307059288047106804242503 +-0.157281150668859476260408314374 0.484069964289665255474659488755 -0.404275307059288047106804242503 +-0.157253953814506519659488503748 -0.0465745024383068043083433451557 -0.309195953607559192999332253748 +-0.157253953814506519659488503748 0.0465745024383068043083433451557 -0.309195953607559192999332253748 +-0.157252395153045676501335492503 -0.114249598979949962274105246252 0.0471029996871948283820863423443 +-0.157252395153045676501335492503 0.114249598979949962274105246252 0.0471029996871948283820863423443 +-0.157214754819869989566072376874 -0.301933792233467057641860264994 -0.0813599489629268646240234375 +-0.157214754819869989566072376874 0.301933792233467057641860264994 -0.0813599489629268646240234375 +-0.157186400890350352899105246252 -0.662753582000732421875 0.419583988189697276727230246252 +-0.157186400890350352899105246252 0.662753582000732421875 0.419583988189697276727230246252 +-0.157185298204421980416967130623 -0.252053099870681751593082253748 0.0419762983918189960808042826557 +-0.157185298204421980416967130623 0.252053099870681751593082253748 0.0419762983918189960808042826557 +-0.15714800357818603515625 -0.376728796958923362048210492503 0.688026380538940496300881477509 +-0.15714800357818603515625 0.376728796958923362048210492503 0.688026380538940496300881477509 +-0.157053995132446305715845369377 -0.313536000251770030633480246252 -0.192429196834564220086605246252 +-0.157053995132446305715845369377 0.313536000251770030633480246252 -0.192429196834564220086605246252 +-0.1570470035076141357421875 -0.253173297643661476818977007497 -0.035204999148845672607421875 +-0.1570470035076141357421875 0.253173297643661476818977007497 -0.035204999148845672607421875 +-0.156946906447410605700554242503 -0.364560890197753950658920985006 -0.380740261077880892681690738755 +-0.156946906447410605700554242503 0.364560890197753950658920985006 -0.380740261077880892681690738755 +-0.156931400299072265625 -0.0936854004859924427428552462516 -0.0812132000923156821547976846887 +-0.156931400299072265625 0.0936854004859924427428552462516 -0.0812132000923156821547976846887 +-0.1568996012210845947265625 -0.204458105564117448293970369377 0.485879912972450311858807481258 +-0.1568996012210845947265625 0.204458105564117448293970369377 0.485879912972450311858807481258 +-0.15689074993133544921875 -0.1847209930419921875 0.0613467507064342498779296875 +-0.15689074993133544921875 0.1847209930419921875 0.0613467507064342498779296875 +-0.156826947629451735055639005623 -0.26065339148044586181640625 -0.173104397952556610107421875 +-0.156826947629451735055639005623 0.26065339148044586181640625 -0.173104397952556610107421875 +-0.156788802146911598889289507497 0 0.682215088605880648486845529987 +-0.156756596267223352603181751874 -0.674802911281585759972756477509 -0.574515920877456731652443977509 +-0.156756596267223352603181751874 0.674802911281585759972756477509 -0.574515920877456731652443977509 +-0.156749707460403425729467130623 -0.2557919919490814208984375 0 +-0.156749707460403425729467130623 0.2557919919490814208984375 0 +-0.156622004508972179070980246252 -0.30345880985260009765625 0.208284401893615744860710492503 +-0.156622004508972179070980246252 0.30345880985260009765625 0.208284401893615744860710492503 +-0.156621003150939963610710492503 -0.103593599796295177117855246252 -0.0688347995281219510177450615629 +-0.156621003150939963610710492503 0.103593599796295177117855246252 -0.0688347995281219510177450615629 +-0.156610202789306651727230246252 0 -0.124391603469848635588057561563 +-0.156607401371002208367855246252 -0.123836803436279299650557561563 0.0117732003331184401084819057814 +-0.156607401371002208367855246252 0.123836803436279299650557561563 0.0117732003331184401084819057814 +-0.156525601446628553903295255623 -0.29772679507732391357421875 0.0967389464378356905838174384371 +-0.156525601446628553903295255623 0.29772679507732391357421875 0.0967389464378356905838174384371 +-0.156523849070072162970035378748 -0.18400444090366363525390625 -0.25326420366764068603515625 +-0.156523849070072162970035378748 0.18400444090366363525390625 -0.25326420366764068603515625 +-0.156523504853248590640291126874 0 0.313050159811973538470653011245 +-0.156458997726440451891960492503 -0.0525318026542663588096537807814 -0.112964594364166268092297684689 +-0.156458997726440451891960492503 0.0525318026542663588096537807814 -0.112964594364166268092297684689 +-0.15643499791622161865234375 -0.987688004970550537109375 0 +-0.15643499791622161865234375 -0.3746919929981231689453125 -0.29177749156951904296875 +-0.15643499791622161865234375 0.3746919929981231689453125 -0.29177749156951904296875 +-0.15643499791622161865234375 0.987688004970550537109375 0 +-0.156421601772308349609375 -0.308721590042114302221420985006 -0.721264791488647527550881477509 +-0.156421601772308349609375 0.308721590042114302221420985006 -0.721264791488647527550881477509 +-0.156410396099090576171875 -0.123847997188568120785490123126 -0.0140525996685028076171875 +-0.156410396099090576171875 0.123847997188568120785490123126 -0.0140525996685028076171875 +-0.1563292443752288818359375 -0.010325250215828418731689453125 0.19481949508190155029296875 +-0.1563292443752288818359375 0.010325250215828418731689453125 0.19481949508190155029296875 +-0.15630899369716644287109375 -0.113564752042293548583984375 -0.15865249931812286376953125 +-0.15630899369716644287109375 0.113564752042293548583984375 -0.15865249931812286376953125 +-0.156306606531143171823217130623 -0.04005660116672515869140625 -0.25291049480438232421875 +-0.156306606531143171823217130623 0.04005660116672515869140625 -0.25291049480438232421875 +-0.156279204785823799817023882497 -0.0563997022807598072380308451557 0.679996788501739501953125 +-0.156279204785823799817023882497 0.0563997022807598072380308451557 0.679996788501739501953125 +-0.1562705934047698974609375 -0.420808500051498446392628238755 0.031618349254131317138671875 +-0.1562705934047698974609375 0.420808500051498446392628238755 0.031618349254131317138671875 +-0.156241202354431174548210492503 -0.0476303994655609130859375 0.365129995346069380346420985006 +-0.156241202354431174548210492503 0.0476303994655609130859375 0.365129995346069380346420985006 +-0.156109043955802911929353626874 -0.421222499012947115826221988755 -0.0264897007495164885093608120314 +-0.156109043955802911929353626874 0.421222499012947115826221988755 -0.0264897007495164885093608120314 +-0.1560654938220977783203125 -0.4135715067386627197265625 0.23367150127887725830078125 +-0.1560654938220977783203125 0.4135715067386627197265625 0.23367150127887725830078125 +-0.156040850281715381964176003748 -0.0274603012949228252048694542964 0.312085205316543545794871761245 +-0.156040850281715381964176003748 0.0274603012949228252048694542964 0.312085205316543545794871761245 +-0.15603674948215484619140625 -0.15390925109386444091796875 0.120268248021602630615234375 +-0.15603674948215484619140625 0.15390925109386444091796875 0.120268248021602630615234375 +-0.155901202559471124819978626874 -0.662338590621948219983039507497 -0.164324302971363050973607755623 +-0.155901202559471124819978626874 0.662338590621948219983039507497 -0.164324302971363050973607755623 +-0.155676400661468511410490123126 -0.0806698024272918812194177462516 0.0962145984172821100433026231258 +-0.155676400661468511410490123126 0.0806698024272918812194177462516 0.0962145984172821100433026231258 +-0.155564450472593290841771818123 -0.816555917263031005859375 0.1775845475494861602783203125 +-0.155564450472593290841771818123 0.816555917263031005859375 0.1775845475494861602783203125 +-0.155333995819091796875 -0.26265799999237060546875 -0.95230400562286376953125 +-0.155333995819091796875 0.26265799999237060546875 -0.95230400562286376953125 +-0.155325996875762956106470369377 -0.112850403785705571957365123126 -0.05602359771728515625 +-0.155325996875762956106470369377 0.112850403785705571957365123126 -0.05602359771728515625 +-0.155234298855066316091821931877 -0.477753263711929332391292746252 0.412497156858444236071647992503 +-0.155234298855066316091821931877 0.477753263711929332391292746252 0.412497156858444236071647992503 +-0.155213856697082541735710492503 -0.477692043781280550884815738755 0.224095855653285991326839621252 +-0.155213856697082541735710492503 0.477692043781280550884815738755 0.224095855653285991326839621252 +-0.15518574416637420654296875 -0.03069950081408023834228515625 0.19358424842357635498046875 +-0.15518574416637420654296875 0.03069950081408023834228515625 0.19358424842357635498046875 +-0.155139601230621343441740123126 -0.0854264020919799915709802462516 -0.0929196000099182239928552462516 +-0.155139601230621343441740123126 0.0854264020919799915709802462516 -0.0929196000099182239928552462516 +-0.15511749684810638427734375 -0.0921282470226287841796875 0.17306350171566009521484375 +-0.15511749684810638427734375 0.0921282470226287841796875 0.17306350171566009521484375 +-0.1549742519855499267578125 -0.18442775309085845947265625 -0.066853247582912445068359375 +-0.1549742519855499267578125 0.18442775309085845947265625 -0.066853247582912445068359375 +-0.154889695346355438232421875 -0.170181903243064869268863503748 0.263718006014823869165297764994 +-0.154889695346355438232421875 0.170181903243064869268863503748 0.263718006014823869165297764994 +-0.154865598678588872738615123126 -0.132935595512390147820980246252 -0.344012808799743663445980246252 +-0.154865598678588872738615123126 0.132935595512390147820980246252 -0.344012808799743663445980246252 +-0.154858195781707758120759876874 -0.112509602308273309878572376874 0.230998796224594099557592130623 +-0.154858195781707758120759876874 0.112509602308273309878572376874 0.230998796224594099557592130623 +-0.154839299619197845458984375 -0.0223718008026480702499227959379 0.527280050516128584447983485006 +-0.154839299619197845458984375 0.0223718008026480702499227959379 0.527280050516128584447983485006 +-0.154753197729587538278295255623 -0.112433303892612454499833063437 0.673357284069061257092414507497 +-0.154753197729587538278295255623 0.112433303892612454499833063437 0.673357284069061257092414507497 +-0.154630698263645172119140625 -0.226592093706130953689736884371 0.217359802126884438244758257497 +-0.154630698263645172119140625 0.226592093706130953689736884371 0.217359802126884438244758257497 +-0.154596401751041390149055132497 -0.0547512009739875779579243442186 0.30919630825519561767578125 +-0.154596401751041390149055132497 0.0547512009739875779579243442186 0.30919630825519561767578125 +-0.1545764990150928497314453125 0 -0.7338982522487640380859375 +-0.154566597938537608758480246252 0 0.126921999454498307668970369377 +-0.1545085012912750244140625 -0.4755280017852783203125 0 +-0.1545085012912750244140625 0.4755280017852783203125 0 +-0.15442240238189697265625 -0.783540821075439541942841970013 -0.0470872014760971083213725307814 +-0.15442240238189697265625 0.783540821075439541942841970013 -0.0470872014760971083213725307814 +-0.15439879894256591796875 -0.0533020019531250041633363423443 -0.365129995346069380346420985006 +-0.15439879894256591796875 0.0533020019531250041633363423443 -0.365129995346069380346420985006 +-0.154364843666553508416683371252 -0.186420151591300958804353626874 0.379366654157638538702457253748 +-0.154364843666553508416683371252 0.186420151591300958804353626874 0.379366654157638538702457253748 +-0.154333205521106714419588001874 -0.474995243549346912725894753748 -0.808121305704116776880141514994 +-0.154333205521106714419588001874 0.474995243549346912725894753748 -0.808121305704116776880141514994 +-0.15433299541473388671875 -0.122184598445892342311047684689 0.0353868007659912109375 +-0.15433299541473388671875 0.122184598445892342311047684689 0.0353868007659912109375 +-0.15431649982929229736328125 -0.2596270143985748291015625 -0.398472487926483154296875 +-0.15431649982929229736328125 0.2596270143985748291015625 -0.398472487926483154296875 +-0.154305994510650634765625 -0.2762059867382049560546875 0.38716900348663330078125 +-0.154305994510650634765625 0.2762059867382049560546875 0.38716900348663330078125 +-0.154270746558904631173803068123 -0.251600003242492653576789507497 0.79711894690990447998046875 +-0.154270746558904631173803068123 0.251600003242492653576789507497 0.79711894690990447998046875 +-0.154155148565769201107755748126 -0.41520689427852630615234375 -0.079620301723480224609375 +-0.154155148565769201107755748126 0.41520689427852630615234375 -0.079620301723480224609375 +-0.154087203741073597296207253748 -0.553151392936706565173210492503 -0.174013799428939824887052623126 +-0.154087203741073597296207253748 0.553151392936706565173210492503 -0.174013799428939824887052623126 +-0.154042994976043706722990123126 -0.016448199748992919921875 0.126491999626159673519865123126 +-0.154042994976043706722990123126 0.016448199748992919921875 0.126491999626159673519865123126 +-0.154032397270202653372095369377 -0.0633544027805328369140625 0.11072599887847900390625 +-0.154032397270202653372095369377 0.0633544027805328369140625 0.11072599887847900390625 +-0.154030242562294028552116742503 -0.0666544981300830896575604356258 0.5237672030925750732421875 +-0.154030242562294028552116742503 0.0666544981300830896575604356258 0.5237672030925750732421875 +-0.154029594361782068423494251874 -0.831489300727844216076789507497 0.308058303594589244500667746252 +-0.154029594361782068423494251874 0.831489300727844216076789507497 0.308058303594589244500667746252 +-0.154025951027870172671541126874 -0.111905895173549652099609375 -0.828404036164283708032485264994 +-0.154025951027870172671541126874 0.111905895173549652099609375 -0.828404036164283708032485264994 +-0.15402500331401824951171875 -0.16522000730037689208984375 0.10713849961757659912109375 +-0.15402500331401824951171875 0.16522000730037689208984375 0.10713849961757659912109375 +-0.1540062427520751953125 -0.132282257080078125 0.145888745784759521484375 +-0.1540062427520751953125 0.132282257080078125 0.145888745784759521484375 +-0.15400600433349609375 -0.0789084017276763943771200615629 0.360632395744323763775440738755 +-0.15400600433349609375 0.0789084017276763943771200615629 0.360632395744323763775440738755 +-0.153983701765537273065120871252 -0.0892507530748844202239666856258 -0.41330789029598236083984375 +-0.153983701765537273065120871252 0.0892507530748844202239666856258 -0.41330789029598236083984375 +-0.153955996036529541015625 -0.607472002506256103515625 0.7792789936065673828125 +-0.153955996036529541015625 0.607472002506256103515625 0.7792789936065673828125 +-0.15394675731658935546875 -0.1964287459850311279296875 0.0147040002048015594482421875 +-0.15394675731658935546875 0.1964287459850311279296875 0.0147040002048015594482421875 +-0.15390075743198394775390625 -0.0496447496116161346435546875 -0.1906567513942718505859375 +-0.15390075743198394775390625 0.0496447496116161346435546875 -0.1906567513942718505859375 +-0.153869102895259846075504128748 -0.270142593979835476947215511245 0.160770754516124714239566628748 +-0.153869102895259846075504128748 0.270142593979835476947215511245 0.160770754516124714239566628748 +-0.153825902938842767886384876874 -0.208132499456405634097322376874 0.151718097925186146124332253748 +-0.153825902938842767886384876874 0.208132499456405634097322376874 0.151718097925186146124332253748 +-0.153809249401092529296875 -0.0166772492229938507080078125 -0.1963784992694854736328125 +-0.153809249401092529296875 0.0166772492229938507080078125 -0.1963784992694854736328125 +-0.1537722051143646240234375 -0.157232093811035145147769753748 -0.204039895534515375308259876874 +-0.1537722051143646240234375 0.157232093811035145147769753748 -0.204039895534515375308259876874 +-0.153704798221588140316740123126 -0.783081579208374067846420985006 0.0561999976634979248046875 +-0.153704798221588140316740123126 0.783081579208374067846420985006 0.0561999976634979248046875 +-0.15368850529193878173828125 -0.0502962507307529449462890625 0.19065700471401214599609375 +-0.15368850529193878173828125 0.0502962507307529449462890625 0.19065700471401214599609375 +-0.1535899937152862548828125 -0.19647474586963653564453125 -0.01754424907267093658447265625 +-0.1535899937152862548828125 0.19647474586963653564453125 -0.01754424907267093658447265625 +-0.153577453643083589041040681877 -0.3322806656360626220703125 -0.537125545740127607885483485006 +-0.153577453643083589041040681877 0.3322806656360626220703125 -0.537125545740127607885483485006 +-0.153517493605613702944978626874 -0.279105761647224448473991742503 -0.317855688929557789190738503748 +-0.153517493605613702944978626874 0.279105761647224448473991742503 -0.317855688929557789190738503748 +-0.153488700091838847772152121252 -0.412240961194038413317741742503 0.0948618002235889490325604356258 +-0.153488700091838847772152121252 0.412240961194038413317741742503 0.0948618002235889490325604356258 +-0.15343199670314788818359375 -0.47221648693084716796875 -0.058909498155117034912109375 +-0.15343199670314788818359375 0.47221648693084716796875 -0.058909498155117034912109375 +-0.153382194042205821649105246252 -0.0132083997130393992341934605861 -0.127669203281402604543970369377 +-0.153382194042205821649105246252 0.0132083997130393992341934605861 -0.127669203281402604543970369377 +-0.153352496027946455514623380623 -0.276558795571327176165965511245 -0.149993899464607227667301003748 +-0.153352496027946455514623380623 0.276558795571327176165965511245 -0.149993899464607227667301003748 +-0.153297007083892822265625 -0.15260350704193115234375 0.4507904946804046630859375 +-0.153297007083892822265625 0.15260350704193115234375 0.4507904946804046630859375 +-0.153282797336578374691740123126 -0.365192794799804709704460492503 0.05602359771728515625 +-0.153282797336578374691740123126 0.365192794799804709704460492503 0.05602359771728515625 +-0.153262197971343994140625 -0.0396770000457763727386151231258 -0.122214603424072268400557561563 +-0.153262197971343994140625 0.0396770000457763727386151231258 -0.122214603424072268400557561563 +-0.153209197521209733450220369377 -0.366497588157653819695980246252 -0.0469723999500274713714276231258 +-0.153209197521209733450220369377 0.366497588157653819695980246252 -0.0469723999500274713714276231258 +-0.153204853087663656063810435626 -0.471524754166603055072215511245 -0.690428626537322953637954014994 +-0.153204853087663656063810435626 0.471524754166603055072215511245 -0.690428626537322953637954014994 +-0.153200602531433111019865123126 -0.10125839710235595703125 0.0792234003543853815276776231258 +-0.153200602531433111019865123126 0.10125839710235595703125 0.0792234003543853815276776231258 +-0.153171002864837646484375 -0.121495199203491222039730246252 -0.0421608000993728693206463731258 +-0.153171002864837646484375 0.121495199203491222039730246252 -0.0421608000993728693206463731258 +-0.15316499769687652587890625 -0.098533250391483306884765625 -0.17126500606536865234375 +-0.15316499769687652587890625 0.098533250391483306884765625 -0.17126500606536865234375 +-0.153073596954345719778345369377 -0.369551610946655284539730246252 0 +-0.153073596954345719778345369377 0.369551610946655284539730246252 0 +-0.153029251098632829153345369377 -0.292248907685279835089176003748 0.306059843301773104595753238755 +-0.153029251098632829153345369377 0.292248907685279835089176003748 0.306059843301773104595753238755 +-0.153014695644378667660490123126 -0.245256292819976795538394753748 0.0802238970994949285309161268742 +-0.153014695644378667660490123126 0.245256292819976795538394753748 0.0802238970994949285309161268742 +-0.1529760062694549560546875 -0.470808506011962890625 0.070267997682094573974609375 +-0.1529760062694549560546875 0.470808506011962890625 0.070267997682094573974609375 +-0.152906244993209816662727007497 -0.248138105869293190686164507497 -0.193770852684974653756810880623 +-0.152906244993209816662727007497 0.248138105869293190686164507497 -0.193770852684974653756810880623 +-0.152887500822544097900390625 -0.148788750171661376953125 -0.7190182507038116455078125 +-0.152887500822544097900390625 0.148788750171661376953125 -0.7190182507038116455078125 +-0.152821791172027571237279630623 -0.160426193475723261050447376874 0.557591986656188920434829014994 +-0.152821791172027571237279630623 0.160426193475723261050447376874 0.557591986656188920434829014994 +-0.152808594703674305304019753748 -0.470304000377655018194644753748 -0.339799797534942604748664507497 +-0.152808594703674305304019753748 0.470304000377655018194644753748 -0.339799797534942604748664507497 +-0.15280640125274658203125 -0.299753594398498524054019753748 -0.216328406333923362048210492503 +-0.15280640125274658203125 0.299753594398498524054019753748 -0.216328406333923362048210492503 +-0.152704304456710793225227007497 -0.654590290784835771020766514994 0.195430207252502430304019753748 +-0.152704304456710793225227007497 0.654590290784835771020766514994 0.195430207252502430304019753748 +-0.152638506889343245065404630623 -0.247552496194839460885717130623 -0.0736161008477210915268429403113 +-0.152638506889343245065404630623 0.247552496194839460885717130623 -0.0736161008477210915268429403113 +-0.152618002891540538445980246252 -0.030309200286865234375 0.125654804706573502981470369377 +-0.152618002891540538445980246252 0.030309200286865234375 0.125654804706573502981470369377 +-0.152604898810386663265958873126 0 -0.423334363102912891729801003748 +-0.152570092678070062808259876874 -0.0123893994837999347341517264454 0.258009606599807705951121761245 +-0.152570092678070062808259876874 0.0123893994837999347341517264454 0.258009606599807705951121761245 +-0.152539205551147472039730246252 -0.0767221987247467124282351846887 -0.104141795635223396998547684689 +-0.152539205551147472039730246252 0.0767221987247467124282351846887 -0.104141795635223396998547684689 +-0.152524805068969732113615123126 -0.208997201919555675164730246252 0.305051589012146018298210492503 +-0.152524805068969732113615123126 0.208997201919555675164730246252 0.305051589012146018298210492503 +-0.152499902248382557257144753748 -0.0929306045174598666092080634371 -0.301011207699775684698551003748 +-0.152499902248382557257144753748 0.0929306045174598666092080634371 -0.301011207699775684698551003748 +-0.152432097494602208920255748126 -0.177359850704669946841463001874 -0.384457942843437205926448996252 +-0.152432097494602208920255748126 0.177359850704669946841463001874 -0.384457942843437205926448996252 +-0.152422200143337266409204744377 0 0.423400050401687655377003238755 +-0.152286398410797135793970369377 -0.3308432102203369140625 -0.165382802486419677734375 +-0.152286398410797135793970369377 0.3308432102203369140625 -0.165382802486419677734375 +-0.152274750173091888427734375 -0.6682522594928741455078125 0.3045502603054046630859375 +-0.152274750173091888427734375 0.6682522594928741455078125 0.3045502603054046630859375 +-0.1522441469132900238037109375 -0.343506704270839680059879128748 0.87253887951374053955078125 +-0.1522441469132900238037109375 0.343506704270839680059879128748 0.87253887951374053955078125 +-0.152198900282382948434545255623 -0.0817043483257293701171875 0.3044009506702423095703125 +-0.152198900282382948434545255623 0.0817043483257293701171875 0.3044009506702423095703125 +-0.152135396003723138980134876874 -0.338704812526702869757144753748 -0.471310794353485107421875 +-0.152135396003723138980134876874 0.338704812526702869757144753748 -0.471310794353485107421875 +-0.152081394195556662829460492503 -0.129889404773712163754240123126 0 +-0.152081394195556662829460492503 0.129889404773712163754240123126 0 +-0.15206944942474365234375 -0.217545907199382798635767244377 0.593336901068687416760383257497 +-0.15206944942474365234375 0.217545907199382798635767244377 0.593336901068687416760383257497 +-0.152019596099853521176115123126 -0.308021414279937733038394753748 0.491947817802429188116519753748 +-0.152019596099853521176115123126 0.308021414279937733038394753748 0.491947817802429188116519753748 +-0.152018702030181890316740123126 -0.0799206018447875948806924384371 -0.245973604917526234014957253748 +-0.152018702030181890316740123126 0.0799206018447875948806924384371 -0.245973604917526234014957253748 +-0.152011755108833329641626619377 -0.467851999402046248022202235006 -0.245968244969844845870809990629 +-0.152011755108833329641626619377 0.467851999402046248022202235006 -0.245968244969844845870809990629 +-0.151976394653320329153345369377 -0.271562790870666537212940738755 0.25130999088287353515625 +-0.151976394653320329153345369377 0.271562790870666537212940738755 0.25130999088287353515625 +-0.151970551908016199282869251874 -0.0626885969191789543808468465613 -0.93566830456256866455078125 +-0.151970551908016199282869251874 0.0626885969191789543808468465613 -0.93566830456256866455078125 +-0.151919554173946397268579744377 -0.0365129984915256514121928432814 0.422003692388534579205128238755 +-0.151919554173946397268579744377 0.0365129984915256514121928432814 0.422003692388534579205128238755 +-0.15191400051116943359375 -0.110371005535125743524105246252 0.06885039806365966796875 +-0.15191400051116943359375 0.110371005535125743524105246252 0.06885039806365966796875 +-0.151886795461177837029964621252 -0.554213386774063176964943977509 0.303772951662540424688785378748 +-0.151886795461177837029964621252 0.554213386774063176964943977509 0.303772951662540424688785378748 +-0.1518632471561431884765625 -0.1929597556591033935546875 0.0469477511942386627197265625 +-0.1518632471561431884765625 0.1929597556591033935546875 0.0469477511942386627197265625 +-0.1518071480095386505126953125 -0.72003348171710968017578125 0.60083796083927154541015625 +-0.1518071480095386505126953125 0.72003348171710968017578125 0.60083796083927154541015625 +-0.151739901304245000668302623126 -0.632040518522262617651108485006 0 +-0.151739901304245000668302623126 0.632040518522262617651108485006 0 +-0.151713591814041121041967130623 -0.0359259009361267075965962192186 0.256305295228958118780582253748 +-0.151713591814041121041967130623 0.0359259009361267075965962192186 0.256305295228958118780582253748 +-0.15163600444793701171875 -0.2096424102783203125 -0.305051589012146018298210492503 +-0.15163600444793701171875 0.2096424102783203125 -0.305051589012146018298210492503 +-0.151540555059909820556640625 -0.799630713462829545434829014994 -0.245206288993358612060546875 +-0.151540555059909820556640625 0.799630713462829545434829014994 -0.245206288993358612060546875 +-0.151427498459815984555021373126 -0.758986270427703835217414507497 -0.351438455283641815185546875 +-0.151427498459815984555021373126 0.758986270427703835217414507497 -0.351438455283641815185546875 +-0.151383595168590540103181751874 -0.03657689876854419708251953125 0.8864226043224334716796875 +-0.151383595168590540103181751874 0.03657689876854419708251953125 0.8864226043224334716796875 +-0.1513515003025531768798828125 -0.1716720052063465118408203125 0.7142280042171478271484375 +-0.1513515003025531768798828125 0.1716720052063465118408203125 0.7142280042171478271484375 +-0.15126325190067291259765625 -0.175725996494293212890625 0.093486748635768890380859375 +-0.15126325190067291259765625 0.175725996494293212890625 0.093486748635768890380859375 +-0.1511354036629199981689453125 -0.378264909982681307720753238755 0.506531345844268843237045985006 +-0.1511354036629199981689453125 0.378264909982681307720753238755 0.506531345844268843237045985006 +-0.15107500553131103515625 -0.981482982635498046875 -0.117757998406887054443359375 +-0.15107500553131103515625 0.981482982635498046875 -0.117757998406887054443359375 +-0.1510055959224700927734375 -0.183276003599166875668302623126 0.183322799205780012643529630623 +-0.1510055959224700927734375 0.183276003599166875668302623126 0.183322799205780012643529630623 +-0.151001393795013427734375 -0.0795408010482788058181924384371 -0.575214600563049294201789507497 +-0.151001393795013427734375 0.0795408010482788058181924384371 -0.575214600563049294201789507497 +-0.150894705951213847772152121252 -0.109629853814840319548018499063 0.51740919053554534912109375 +-0.150894705951213847772152121252 0.109629853814840319548018499063 0.51740919053554534912109375 +-0.150891302525997167416349498126 -0.368642243742942798956363503748 -0.209366999566555023193359375 +-0.150891302525997167416349498126 0.368642243742942798956363503748 -0.209366999566555023193359375 +-0.150802998989820469244449441248 -0.668779101967811540063735264994 -0.657642269134521506579460492503 +-0.150802998989820469244449441248 0.668779101967811540063735264994 -0.657642269134521506579460492503 +-0.15073500573635101318359375 -0.1931437551975250244140625 -0.0497434996068477630615234375 +-0.15073500573635101318359375 0.1931437551975250244140625 -0.0497434996068477630615234375 +-0.1507148444652557373046875 -0.109500600397586828060880748126 -0.517488950490951560290397992503 +-0.1507148444652557373046875 0.109500600397586828060880748126 -0.517488950490951560290397992503 +-0.150688803195953374691740123126 -0.109480798244476318359375 0.353987193107605013775440738755 +-0.150688803195953374691740123126 0.109480798244476318359375 0.353987193107605013775440738755 +-0.150608205795288108141960492503 -0.129481995105743402652009876874 0.0234861999750137356857138115629 +-0.150608205795288108141960492503 0.129481995105743402652009876874 0.0234861999750137356857138115629 +-0.150596797466278076171875 -0.320599603652954145971420985006 0.185839998722076432668970369377 +-0.150596797466278076171875 0.320599603652954145971420985006 0.185839998722076432668970369377 +-0.150568503141403187139957253748 -0.134091299772262556588842130623 0.222145503759384160824552623126 +-0.150568503141403187139957253748 0.134091299772262556588842130623 0.222145503759384160824552623126 +-0.150559198856353770867855246252 -0.0931302011013031005859375 0.0930519998073577880859375 +-0.150559198856353770867855246252 0.0931302011013031005859375 0.0930519998073577880859375 +-0.150536203384399436266960492503 -0.0649721980094909723479901231258 -0.11453139781951904296875 +-0.150536203384399436266960492503 0.0649721980094909723479901231258 -0.11453139781951904296875 +-0.150504195690155023745759876874 -0.162473501265048975161775501874 -0.271018302440643288342414507497 +-0.150504195690155023745759876874 0.162473501265048975161775501874 -0.271018302440643288342414507497 +-0.15044939517974853515625 -0.0440225988626480116416850307814 0.124205398559570315275557561563 +-0.15044939517974853515625 0.0440225988626480116416850307814 0.124205398559570315275557561563 +-0.150411897897720331362947376874 -0.210612899065017705746427623126 -0.151718097925186146124332253748 +-0.150411897897720331362947376874 0.210612899065017705746427623126 -0.151718097925186146124332253748 +-0.150390398502349864617855246252 -0.358560395240783702508480246252 -0.0938996016979217612563601846887 +-0.150390398502349864617855246252 0.358560395240783702508480246252 -0.0938996016979217612563601846887 +-0.150377404689788801706029630623 -0.542902207374572731701789507497 0.206505006551742559262052623126 +-0.150377404689788801706029630623 0.542902207374572731701789507497 0.206505006551742559262052623126 +-0.150353546440601365530298494377 -0.403559991717338584216179242503 -0.130510349571704875604183371252 +-0.150353546440601365530298494377 0.403559991717338584216179242503 -0.130510349571704875604183371252 +-0.150296293199062347412109375 0 -0.529066437482833884509147992503 +-0.15021090209484100341796875 -0.311122003197669971807926003748 -0.608801901340484619140625 +-0.15021090209484100341796875 0.311122003197669971807926003748 -0.608801901340484619140625 +-0.1501615047454833984375 -0.4621525108814239501953125 -0.117757499217987060546875 +-0.1501615047454833984375 0.4621525108814239501953125 -0.117757499217987060546875 +-0.150130748748779296875 -0.1517055034637451171875 -0.13017749786376953125 +-0.150130748748779296875 0.1517055034637451171875 -0.13017749786376953125 +-0.1500822007656097412109375 -0.139263001084327681100560880623 -0.219274199008941655941740123126 +-0.1500822007656097412109375 0.139263001084327681100560880623 -0.219274199008941655941740123126 +-0.150065101683139801025390625 -0.109027799963951108064286188437 0.880677902698516867907585492503 +-0.150065101683139801025390625 0.109027799963951108064286188437 0.880677902698516867907585492503 +-0.150039893388748152291967130623 -0.221664601564407343081697376874 0.135472503304481489694310880623 +-0.150039893388748152291967130623 0.221664601564407343081697376874 0.135472503304481489694310880623 +-0.149999999999999994448884876874 0 0 +-0.14999909698963165283203125 -0.0594671979546546880524005018742 0.252911102771759044305355246252 +-0.14999909698963165283203125 0.0594671979546546880524005018742 0.252911102771759044305355246252 +-0.149976396560668939761384876874 -0.129315197467803955078125 -0.028011798858642578125 +-0.149976396560668939761384876874 0.129315197467803955078125 -0.028011798858642578125 +-0.149932003021240239926115123126 -0.118978404998779305201672684689 0.0580045998096466106086488423443 +-0.149932003021240239926115123126 0.118978404998779305201672684689 0.0580045998096466106086488423443 +-0.149907600879669200555355246252 -0.0763432025909423911391726846887 0.108164000511169436369307561563 +-0.149907600879669200555355246252 0.0763432025909423911391726846887 0.108164000511169436369307561563 +-0.14989750087261199951171875 -0.3544825017452239990234375 -0.3191755115985870361328125 +-0.14989750087261199951171875 0.3544825017452239990234375 -0.3191755115985870361328125 +-0.1498816013336181640625 -0.632132816314697310033920985006 -0.466843986511230490954460492503 +-0.1498816013336181640625 0.632132816314697310033920985006 -0.466843986511230490954460492503 +-0.149876099824905406610042746252 -0.782748895883560225072983485006 0.418139997124671924932926003748 +-0.149876099824905406610042746252 0.782748895883560225072983485006 0.418139997124671924932926003748 +-0.149850001931190496273771373126 -0.0718245014548301724532919365629 0.418193989992141745837272992503 +-0.149850001931190496273771373126 0.0718245014548301724532919365629 0.418193989992141745837272992503 +-0.1497980058193206787109375 -0.067655496299266815185546875 0.18837000429630279541015625 +-0.1497980058193206787109375 0.067655496299266815185546875 0.18837000429630279541015625 +-0.14965049922466278076171875 -0.62033025920391082763671875 -0.39407475292682647705078125 +-0.14965049922466278076171875 0.62033025920391082763671875 -0.39407475292682647705078125 +-0.149615550041198724917634876874 -0.00610124990344047563733953509768 -0.00882990024983882834663795335928 +-0.149615550041198724917634876874 0.00610124990344047563733953509768 -0.00882990024983882834663795335928 +-0.149603651463985437564119251874 -0.0233481489121913909912109375 -0.315552657842636086193977007497 +-0.149603651463985437564119251874 0.0233481489121913909912109375 -0.315552657842636086193977007497 +-0.14955274760723114013671875 -0.16415424644947052001953125 -0.114836253225803375244140625 +-0.14955274760723114013671875 0.16415424644947052001953125 -0.114836253225803375244140625 +-0.149537551403045643194644753748 -0.01176870055496692657470703125 0 +-0.149537551403045643194644753748 0.01176870055496692657470703125 0 +-0.149500948190689070260717130623 -0.00619485005736350978489124230464 0.010539449751377105712890625 +-0.149500948190689070260717130623 0.00619485005736350978489124230464 0.010539449751377105712890625 +-0.149319195747375482730134876874 -0.773314380645751975329460492503 -0.140314400196075439453125 +-0.149319195747375482730134876874 0.773314380645751975329460492503 -0.140314400196075439453125 +-0.149318649619817722662418191248 -0.459547391533851601330695757497 0.699300086498260475842414507497 +-0.149318649619817722662418191248 0.459547391533851601330695757497 0.699300086498260475842414507497 +-0.14929850399494171142578125 -0.108470499515533447265625 0.1686537563800811767578125 +-0.14929850399494171142578125 0.108470499515533447265625 0.1686537563800811767578125 +-0.149269199371337896176115123126 -0.353903198242187522204460492503 0.111674404144287114926115123126 +-0.149269199371337896176115123126 0.353903198242187522204460492503 0.111674404144287114926115123126 +-0.149245554208755487612947376874 -0.276131005585193600726512386245 -0.789921981096267655786391514994 +-0.149245554208755487612947376874 0.276131005585193600726512386245 -0.789921981096267655786391514994 +-0.149200803041458107678352007497 -0.459200680255889837066973768742 -0.506827312707900934363181022491 +-0.149200803041458107678352007497 0.459200680255889837066973768742 -0.506827312707900934363181022491 +-0.14902125298976898193359375 -0.083085000514984130859375 -0.18272824585437774658203125 +-0.14902125298976898193359375 0.083085000514984130859375 -0.18272824585437774658203125 +-0.148985195159912126028345369377 -0.02651380002498626708984375 -0.130768597126007080078125 +-0.148985195159912126028345369377 0.02651380002498626708984375 -0.130768597126007080078125 +-0.148955252766609175241185880623 0 -0.0176728494465351083919646413278 +-0.148917303979396814517244251874 -0.233624652028083773513955634371 -0.213876599073410028628572376874 +-0.148917303979396814517244251874 0.233624652028083773513955634371 -0.213876599073410028628572376874 +-0.1489025056362152099609375 -0.0332829989492893218994140625 -0.4761514961719512939453125 +-0.1489025056362152099609375 0.0332829989492893218994140625 -0.4761514961719512939453125 +-0.148863053321838356701789507497 -0.108153854310512539949051813437 0.297728902101516701428352007497 +-0.148863053321838356701789507497 0.108153854310512539949051813437 0.297728902101516701428352007497 +-0.14875699579715728759765625 -0.978851020336151123046875 0.14043200016021728515625 +-0.14875699579715728759765625 0.978851020336151123046875 0.14043200016021728515625 +-0.148730748891830438784822376874 -0.290783858299255348889289507497 -0.125792796909809101446597878748 +-0.148730748891830438784822376874 0.290783858299255348889289507497 -0.125792796909809101446597878748 +-0.148672305047512054443359375 -0.279834091663360595703125 0.624171119928359940942641514994 +-0.148672305047512054443359375 0.279834091663360595703125 0.624171119928359940942641514994 +-0.148670849204063398873998380623 -0.0178615495562553412700612653907 -0.00882869996130466495876110144536 +-0.148670849204063398873998380623 0.0178615495562553412700612653907 -0.00882869996130466495876110144536 +-0.1486647427082061767578125 -0.1487224996089935302734375 0.13520525395870208740234375 +-0.1486647427082061767578125 0.1487224996089935302734375 0.13520525395870208740234375 +-0.148642648756504069940120871252 -0.628155446052551247326789507497 -0.0763301499187946375091229356258 +-0.148642648756504069940120871252 0.628155446052551247326789507497 -0.0763301499187946375091229356258 +-0.1486132480204105377197265625 -0.93830360472202301025390625 0 +-0.1486132480204105377197265625 0.93830360472202301025390625 0 +-0.148592403531074529476896373126 -0.244173055887222323345753238755 0.469893041253089949194077235006 +-0.148592403531074529476896373126 0.244173055887222323345753238755 0.469893041253089949194077235006 +-0.148547253012657171078458873126 -0.0179631002247333526611328125 0.01053749956190586090087890625 +-0.148547253012657171078458873126 0.0179631002247333526611328125 0.01053749956190586090087890625 +-0.148511400818824773617521373126 0 0.0210803993046283708046040317186 +-0.14850054681301116943359375 -0.338498595356941267553452235006 -0.407267314195632945672542746252 +-0.14850054681301116943359375 0.338498595356941267553452235006 -0.407267314195632945672542746252 +-0.148476654291152948550447376874 -0.193678101897239662854133257497 0.250885602831840526238948996252 +-0.148476654291152948550447376874 0.193678101897239662854133257497 0.250885602831840526238948996252 +-0.148464149236679082699552623126 -0.0121711503714323036884348283593 -0.0176145002245902994320037038278 +-0.148464149236679082699552623126 0.0121711503714323036884348283593 -0.0176145002245902994320037038278 +-0.148436401784419996774389005623 -0.640530097484588556433493522491 -0.240182608366012545486611884371 +-0.148436401784419996774389005623 0.640530097484588556433493522491 -0.240182608366012545486611884371 +-0.148420798778533952200220369377 -0.563571977615356489721420985006 0.548048782348632856908920985006 +-0.148420798778533952200220369377 0.563571977615356489721420985006 0.548048782348632856908920985006 +-0.1483902037143707275390625 -0.550125116109847933643095529987 0.406622999906539883685496761245 +-0.1483902037143707275390625 0.550125116109847933643095529987 0.406622999906539883685496761245 +-0.14832399785518646240234375 -0.4564904868602752685546875 0.140058994293212890625 +-0.14832399785518646240234375 0.4564904868602752685546875 0.140058994293212890625 +-0.148266948014497773611353181877 -0.4563272893428802490234375 -0.438499766588211048468082253748 +-0.148266948014497773611353181877 0.4563272893428802490234375 -0.438499766588211048468082253748 +-0.148247006535530106985376619377 -0.528653410077095098351662727509 -0.0323763009160757120330487168758 +-0.148247006535530106985376619377 0.528653410077095098351662727509 -0.0323763009160757120330487168758 +-0.148185045272111903802425558752 -0.0429272990673780427406391879686 -0.6314255893230438232421875 +-0.148185045272111903802425558752 0.0429272990673780427406391879686 -0.6314255893230438232421875 +-0.148153352737426746710269753748 -0.0234648004174232462093474538278 0 +-0.148153352737426746710269753748 0.0234648004174232462093474538278 0 +-0.148134002089500421694978626874 -0.284258091449737515521434261245 0.140547744929790496826171875 +-0.148134002089500421694978626874 0.284258091449737515521434261245 0.140547744929790496826171875 +-0.148091854155063623599275501874 -0.395703908801078807488948996252 0.154878298938274400198267244377 +-0.148091854155063623599275501874 0.395703908801078807488948996252 0.154878298938274400198267244377 +-0.148047896474599843807951060626 -0.637313860654830866003806022491 -0.542598369717597894812399772491 +-0.148047896474599843807951060626 0.637313860654830866003806022491 -0.542598369717597894812399772491 +-0.148039996623992919921875 -0.17557699978351593017578125 -0.098776750266551971435546875 +-0.148039996623992919921875 0.17557699978351593017578125 -0.098776750266551971435546875 +-0.148007252812385553530916126874 -0.0123483002185821536672571951954 0.02100884914398193359375 +-0.148007252812385553530916126874 0.0123483002185821536672571951954 0.02100884914398193359375 +-0.147916495800018310546875 -0.224935197830200189761384876874 -0.132381597161293024234041126874 +-0.147916495800018310546875 0.224935197830200189761384876874 -0.132381597161293024234041126874 +-0.1478737480938434600830078125 -0.45511575043201446533203125 -0.5774977505207061767578125 +-0.1478737480938434600830078125 0.45511575043201446533203125 -0.5774977505207061767578125 +-0.147814404964447032586605246252 -0.28451120853424072265625 -0.23917400836944580078125 +-0.147814404964447032586605246252 0.28451120853424072265625 -0.23917400836944580078125 +-0.147791607677936559506193248126 -0.528359711170196533203125 0.038644649088382720947265625 +-0.147791607677936559506193248126 0.528359711170196533203125 0.038644649088382720947265625 +-0.147763800621032725945980246252 -0.107356202602386485711605246252 -0.0814891993999481284438601846887 +-0.147763800621032725945980246252 0.107356202602386485711605246252 -0.0814891993999481284438601846887 +-0.147740197181701671258480246252 -0.097141802310943603515625 -0.0934683978557586669921875 +-0.147740197181701671258480246252 0.097141802310943603515625 -0.0934683978557586669921875 +-0.147634804248809814453125 0 -0.134922003746032720394865123126 +-0.147607201337814325503572376874 -0.195555603504180913754240123126 -0.547695600986480735095085492503 +-0.147607201337814325503572376874 0.195555603504180913754240123126 -0.547695600986480735095085492503 +-0.147598649561405198538110994377 -0.353569489717483531610042746252 0.236015993356704728567407869377 +-0.147598649561405198538110994377 0.353569489717483531610042746252 0.236015993356704728567407869377 +-0.147592401504516607113615123126 -0.0528162002563476590255575615629 -0.124205195903778084498547684689 +-0.147592401504516607113615123126 0.0528162002563476590255575615629 -0.124205195903778084498547684689 +-0.147567296028137201480134876874 -0.2495250999927520751953125 -0.9046888053417205810546875 +-0.147567296028137201480134876874 0.2495250999927520751953125 -0.9046888053417205810546875 +-0.147507297992706287725894753748 -0.00610154997557401605062787908196 -0.0265399508178234093402902971093 +-0.147507297992706287725894753748 0.00610154997557401605062787908196 -0.0265399508178234093402902971093 +-0.147488397359848005807592130623 -0.0824066966772079440017861884371 0.2479037940502166748046875 +-0.147488397359848005807592130623 0.0824066966772079440017861884371 0.2479037940502166748046875 +-0.147463801503181446417301003748 -0.198851698637008661441072376874 -0.169447499513626087530582253748 +-0.147463801503181446417301003748 0.198851698637008661441072376874 -0.169447499513626087530582253748 +-0.1473622508347034454345703125 -0.6213314831256866455078125 0.3933599889278411865234375 +-0.1473622508347034454345703125 0.6213314831256866455078125 0.3933599889278411865234375 +-0.147326253354549407958984375 -0.353183247148990631103515625 0.64502473175525665283203125 +-0.147326253354549407958984375 0.353183247148990631103515625 0.64502473175525665283203125 +-0.147313404083251969778345369377 -0.0579850018024444593955912807814 0.122214996814727791529797684689 +-0.147313404083251969778345369377 0.0579850018024444593955912807814 0.122214996814727791529797684689 +-0.147303998470306396484375 -0.0332675017416477203369140625 -0.199235498905181884765625 +-0.147303998470306396484375 0.0332675017416477203369140625 -0.199235498905181884765625 +-0.147302353382110590152009876874 -0.626509642601013161389289507497 0.09103834629058837890625 +-0.147302353382110590152009876874 0.626509642601013161389289507497 0.09103834629058837890625 +-0.1472994983196258544921875 -0.18587325513362884521484375 0.0790822505950927734375 +-0.1472994983196258544921875 0.18587325513362884521484375 0.0790822505950927734375 +-0.147296249866485595703125 -0.1411274969577789306640625 -0.1445229947566986083984375 +-0.147296249866485595703125 0.1411274969577789306640625 -0.1445229947566986083984375 +-0.147269201278686534539730246252 -0.126915395259857177734375 0.0469498008489608806281800923443 +-0.147269201278686534539730246252 0.126915395259857177734375 0.0469498008489608806281800923443 +-0.147189903259277332647769753748 -0.260560208559036221576121761245 0.0210593998432159409950337192186 +-0.147189903259277332647769753748 0.260560208559036221576121761245 0.0210593998432159409950337192186 +-0.14718450605869293212890625 -0.1320745050907135009765625 -0.4592309892177581787109375 +-0.14718450605869293212890625 0.1320745050907135009765625 -0.4592309892177581787109375 +-0.147163800895214080810546875 -0.601892197132110506885283029987 -0.32568199932575225830078125 +-0.147163800895214080810546875 0.601892197132110506885283029987 -0.32568199932575225830078125 +-0.147125253081321710757478626874 -0.218340906500816361868189119377 0.364940097928047213482471988755 +-0.147125253081321710757478626874 0.218340906500816361868189119377 0.364940097928047213482471988755 +-0.147061599791049935070930132497 -0.452600395679473854748664507497 0.513347780704498268811164507497 +-0.147061599791049935070930132497 0.452600395679473854748664507497 0.513347780704498268811164507497 +-0.147019645571708684750333873126 -0.0239416502416133873676340471093 -0.0176636997610330574726145158593 +-0.147019645571708684750333873126 0.0239416502416133873676340471093 -0.0176636997610330574726145158593 +-0.147005403041839594058259876874 -0.260917496681213390008480246252 -0.0176483999937772743915598283593 +-0.147005403041839594058259876874 0.260917496681213390008480246252 -0.0176483999937772743915598283593 +-0.146971654891967756784154630623 -0.316693642735481228900340511245 0.02458749897778034210205078125 +-0.146971654891967756784154630623 0.316693642735481228900340511245 0.02458749897778034210205078125 +-0.14694650471210479736328125 -0.20225425064563751220703125 0 +-0.14694650471210479736328125 0.20225425064563751220703125 0 +-0.146922397613525407278345369377 -0.116942799091339116879240123126 -0.0688347995281219510177450615629 +-0.146922397613525407278345369377 0.116942799091339116879240123126 -0.0688347995281219510177450615629 +-0.146883603930473310983373380623 -0.530978393554687455591079014994 -0.237670201063156116827457253748 +-0.146883603930473310983373380623 0.530978393554687455591079014994 -0.237670201063156116827457253748 +-0.146843554079532617739900501874 -0.106686902046203610505692438437 0.411770260334014925884815738755 +-0.146843554079532617739900501874 0.106686902046203610505692438437 0.411770260334014925884815738755 +-0.146835146844387032238898882497 -0.317041197419166531634715511245 -0.0206006506457924835895578752343 +-0.146835146844387032238898882497 0.317041197419166531634715511245 -0.0206006506457924835895578752343 +-0.146787303686141956671207253748 -0.02959080040454864501953125 -0.00882419999688863719577991417964 +-0.146787303686141956671207253748 0.02959080040454864501953125 -0.00882419999688863719577991417964 +-0.146706300973892200811832253748 -0.0200222991406917572021484375 -0.260914492607116688116519753748 +-0.146706300973892200811832253748 0.0200222991406917572021484375 -0.260914492607116688116519753748 +-0.146645995974540699346988503748 -0.0297335989773273440262002509371 0.0105296999216079704975168596093 +-0.146645995974540699346988503748 0.0297335989773273440262002509371 0.0105296999216079704975168596093 +-0.1466452516615390777587890625 -0.28942649066448211669921875 -0.67618574202060699462890625 +-0.1466452516615390777587890625 0.28942649066448211669921875 -0.67618574202060699462890625 +-0.146558247506618499755859375 -0.257011198997497580798210492503 -0.339066436886787447857471988755 +-0.146558247506618499755859375 0.257011198997497580798210492503 -0.339066436886787447857471988755 +-0.14655165374279022216796875 -0.0181786503642797463153879533593 -0.0263088002800941460346262346093 +-0.14655165374279022216796875 0.0181786503642797463153879533593 -0.0263088002800941460346262346093 +-0.146536803245544439144865123126 -0.0241506010293960557411274692186 0.0210646502673625946044921875 +-0.146536803245544439144865123126 0.0241506010293960557411274692186 0.0210646502673625946044921875 +-0.146528849005699152163728626874 -0.171651992201805131399439119377 -0.609560889005661077355568977509 +-0.146528849005699152163728626874 0.171651992201805131399439119377 -0.609560889005661077355568977509 +-0.146515595912933366262720369377 -0.345971608161926291735710492503 -0.13724720478057861328125 +-0.146515595912933366262720369377 0.345971608161926291735710492503 -0.13724720478057861328125 +-0.146498402953147893734708873126 -0.00619515012949705106554132427732 0.031620450317859649658203125 +-0.146498402953147893734708873126 0.00619515012949705106554132427732 0.031620450317859649658203125 +-0.146413600444793706722990123126 -0.76852321624755859375 0.167138397693634033203125 +-0.146413600444793706722990123126 0.76852321624755859375 0.167138397693634033203125 +-0.146394054591655747854517244377 -0.450562742352485667840511496252 -0.279395616054534945416065738755 +-0.146394054591655747854517244377 0.450562742352485667840511496252 -0.279395616054534945416065738755 +-0.146371400356292730160490123126 -0.135782396793365484066740123126 0.0117718003690242770803431326954 +-0.146371400356292730160490123126 0.135782396793365484066740123126 0.0117718003690242770803431326954 +-0.146294747292995436227514005623 -0.246830853819847095831363503748 0.200430655479431146792634876874 +-0.146294747292995436227514005623 0.246830853819847095831363503748 0.200430655479431146792634876874 +-0.146258196234703069515958873126 -0.577098402380943231726462272491 0.740315043926238924854033029987 +-0.146258196234703069515958873126 0.577098402380943231726462272491 0.740315043926238924854033029987 +-0.146251201629638671875 -0.256601107120513927117855246252 -0.0525968983769416822959819057814 +-0.146251201629638671875 0.256601107120513927117855246252 -0.0525968983769416822959819057814 +-0.146210405230522172415064119377 -0.449995493888855013775440738755 -0.765588605403900168688835492503 +-0.146210405230522172415064119377 0.449995493888855013775440738755 -0.765588605403900168688835492503 +-0.146158397197723388671875 -0.135795199871063226870759876874 -0.014049999415874481201171875 +-0.146158397197723388671875 0.135795199871063226870759876874 -0.014049999415874481201171875 +-0.14612714946269989013671875 -0.353893500566482555047542746252 -0.236444851756095891781583873126 +-0.14612714946269989013671875 0.353893500566482555047542746252 -0.236444851756095891781583873126 +-0.146125504374504083804353626874 -0.254408097267150856701789507497 0.0626408994197845403473223768742 +-0.146125504374504083804353626874 0.254408097267150856701789507497 0.0626408994197845403473223768742 +-0.146010549366474146060213001874 -0.312109696865081776007144753748 -0.0613875500857829978218482835928 +-0.146010549366474146060213001874 0.312109696865081776007144753748 -0.0613875500857829978218482835928 +-0.1459794938564300537109375 -0.20037575066089630126953125 0.03224299848079681396484375 +-0.1459794938564300537109375 0.20037575066089630126953125 0.03224299848079681396484375 +-0.145967242121696483270198996252 -0.212401203811168698409872490629 -0.485879912972450311858807481258 +-0.145967242121696483270198996252 0.212401203811168698409872490629 -0.485879912972450311858807481258 +-0.145856699347496038265958873126 -0.521302086114883489464943977509 -0.0973137021064758439559128078145 +-0.145856699347496038265958873126 0.521302086114883489464943977509 -0.0973137021064758439559128078145 +-0.145855647325515730416967130623 -0.0350162990391254397293252509371 0 +-0.145855647325515730416967130623 0.0350162990391254397293252509371 0 +-0.145821750164031982421875 0 -0.2030664980411529541015625 +-0.145809297263622267282201505623 -0.309665653109550464971988503748 0.0731230489909648895263671875 +-0.145809297263622267282201505623 0.309665653109550464971988503748 0.0731230489909648895263671875 +-0.1457806527614593505859375 0 -0.035326950252056121826171875 +-0.1456190049648284912109375 -0.18742899596691131591796875 0.97142398357391357421875 +-0.1456190049648284912109375 0.18742899596691131591796875 0.97142398357391357421875 +-0.145589601993560802117855246252 0 0.633485439419746443334702235006 +-0.145528802275657648257478626874 -0.0184198502451181390926482350778 0.0313382998108863788933042826557 +-0.145528802275657648257478626874 0.0184198502451181390926482350778 0.0313382998108863788933042826557 +-0.145485001802444446905582253748 -0.234060305356979359014957253748 0.11853240430355072021484375 +-0.145485001802444446905582253748 0.234060305356979359014957253748 0.11853240430355072021484375 +-0.145472394675016408749357310626 -0.785295450687408469470085492503 0.290943953394889820440738503748 +-0.145472394675016408749357310626 0.785295450687408469470085492503 0.290943953394889820440738503748 +-0.145463597774505626336605246252 -0.00825000032782554661159313269536 0.137012004852294921875 +-0.145463597774505626336605246252 0.00825000032782554661159313269536 0.137012004852294921875 +-0.14545874297618865966796875 -0.20075400173664093017578125 -0.03224299848079681396484375 +-0.14545874297618865966796875 0.20075400173664093017578125 -0.03224299848079681396484375 +-0.145436596870422374383480246252 -0.088572800159454345703125 -0.104895603656768809930355246252 +-0.145436596870422374383480246252 0.088572800159454345703125 -0.104895603656768809930355246252 +-0.145406246185302734375 -0.12605075538158416748046875 0.15958750247955322265625 +-0.145406246185302734375 0.12605075538158416748046875 0.15958750247955322265625 +-0.145337703824043262823551003748 -0.154834502935409540347322376874 0.211903792619705183541967130623 +-0.145337703824043262823551003748 0.154834502935409540347322376874 0.211903792619705183541967130623 +-0.145306652784347539730802623126 -0.0120858002454042427753488908593 -0.0352120488882064833213725307814 +-0.145306652784347539730802623126 0.0120858002454042427753488908593 -0.0352120488882064833213725307814 +-0.145288395881652848684595369377 -0.0266416013240814222862162807814 -0.371727609634399436266960492503 +-0.145288395881652848684595369377 0.0266416013240814222862162807814 -0.371727609634399436266960492503 +-0.145228195190429704153345369377 -0.125662195682525651418970369377 -0.0558372020721435574630575615629 +-0.145228195190429704153345369377 0.125662195682525651418970369377 -0.0558372020721435574630575615629 +-0.14522349834442138671875 -0.18633425235748291015625 -0.081790499389171600341796875 +-0.14522349834442138671875 0.18633425235748291015625 -0.081790499389171600341796875 +-0.14522199332714080810546875 -0.3801999986171722412109375 0.2904449999332427978515625 +-0.14522199332714080810546875 0.3801999986171722412109375 0.2904449999332427978515625 +-0.145195996761322027035490123126 -0.236800003051757829153345369377 0.7502295970916748046875 +-0.145195996761322027035490123126 0.236800003051757829153345369377 0.7502295970916748046875 +-0.145193950831890128405632367503 -0.373434045910835288317741742503 0.376783537864685103002670985006 +-0.145193950831890128405632367503 0.373434045910835288317741742503 0.376783537864685103002670985006 +-0.145182600617408757992521373126 -0.446833813190460171771434261245 -0.373177206516265846936164507497 +-0.145182600617408757992521373126 0.446833813190460171771434261245 -0.373177206516265846936164507497 +-0.145116404443979274407894308752 -0.0523711521178483949134907504686 0.6314255893230438232421875 +-0.145116404443979274407894308752 0.0523711521178483949134907504686 0.6314255893230438232421875 +-0.14506299793720245361328125 -0.44646298885345458984375 -0.172125995159149169921875 +-0.14506299793720245361328125 0.44646298885345458984375 -0.172125995159149169921875 +-0.14504800736904144287109375 -0.0848007500171661376953125 0.18512125313282012939453125 +-0.14504800736904144287109375 0.0848007500171661376953125 0.18512125313282012939453125 +-0.144993197917938243524105246252 -0.0890717983245849637130575615629 0.105086600780487066097990123126 +-0.144993197917938243524105246252 0.0890717983245849637130575615629 0.105086600780487066097990123126 +-0.144965600967407237664730246252 -0.10532319545745849609375 -0.779674386978149502880341970013 +-0.144965600967407237664730246252 0.10532319545745849609375 -0.779674386978149502880341970013 +-0.144949498772621171438501619377 -0.386931154131889332159488503748 -0.178252650797367101498380748126 +-0.144949498772621171438501619377 0.386931154131889332159488503748 -0.178252650797367101498380748126 +-0.14485399425029754638671875 -0.803011000156402587890625 0.578092992305755615234375 +-0.14485399425029754638671875 0.803011000156402587890625 0.578092992305755615234375 +-0.144771002233028411865234375 -0.7345695197582244873046875 -0.044144251383841037750244140625 +-0.144771002233028411865234375 0.7345695197582244873046875 -0.044144251383841037750244140625 +-0.144765402376651780569360994377 -0.615028691291809148644631477509 -0.152586852759122842959627064374 +-0.144765402376651780569360994377 0.615028691291809148644631477509 -0.152586852759122842959627064374 +-0.144721198081970231497095369377 -0.23511159420013427734375 0.28944480419158935546875 +-0.144721198081970231497095369377 0.23511159420013427734375 0.28944480419158935546875 +-0.144719994068145757504240123126 -0.105145204067230227384932561563 -0.357771611213684115337940738755 +-0.144719994068145757504240123126 -0.105144000053405767269865123126 0.0894429981708526611328125 +-0.144719994068145757504240123126 0.105144000053405767269865123126 0.0894429981708526611328125 +-0.144719994068145757504240123126 0.105145204067230227384932561563 -0.357771611213684115337940738755 +-0.144656395912170415707365123126 -0.0355624504387378678749165317186 -0.0176024995744228363037109375 +-0.144656395912170415707365123126 0.0355624504387378678749165317186 -0.0176024995744228363037109375 +-0.144618299603462202584935880623 -0.0298992007970809922645649692186 -0.02629829943180084228515625 +-0.144618299603462202584935880623 0.0298992007970809922645649692186 -0.02629829943180084228515625 +-0.144609148800373066290347878748 -0.133937300741672510318025501874 0.289221447706222489770766514994 +-0.144609148800373066290347878748 0.133937300741672510318025501874 0.289221447706222489770766514994 +-0.1445779502391815185546875 -0.444956597685813914910823996252 0.289155900478363037109375 +-0.1445779502391815185546875 0.444956597685813914910823996252 0.289155900478363037109375 +-0.144548797607421869448884876874 -0.0245453998446464559390900461722 0.136026394367218028680355246252 +-0.144548797607421869448884876874 0.0245453998446464559390900461722 0.136026394367218028680355246252 +-0.14454500377178192138671875 -0.921917974948883056640625 -0.3594079911708831787109375 +-0.14454500377178192138671875 0.921917974948883056640625 -0.3594079911708831787109375 +-0.144484502077102644479467130623 -0.120289501547813412751786188437 -0.2337833940982818603515625 +-0.144484502077102644479467130623 0.120289501547813412751786188437 -0.2337833940982818603515625 +-0.144459298253059392758146373126 -0.237794405221939064709602007497 -0.112184098362922660130358565311 +-0.144459298253059392758146373126 0.237794405221939064709602007497 -0.112184098362922660130358565311 +-0.144388204813003545590177623126 -0.517889356613159268505341970013 0.115942200273275383692883622189 +-0.144388204813003545590177623126 0.517889356613159268505341970013 0.115942200273275383692883622189 +-0.144368103146553045101896373126 -0.0597559489309787764121928432814 -0.422003692388534579205128238755 +-0.144368103146553045101896373126 0.0597559489309787764121928432814 -0.422003692388534579205128238755 +-0.144271399080753315313785378748 0 -0.684971702098846391137954014994 +-0.144231297075748443603515625 -0.325427404046058688091846988755 0.8266157805919647216796875 +-0.144231297075748443603515625 0.325427404046058688091846988755 0.8266157805919647216796875 +-0.144192802906036393606470369377 -0.443788003921508800164730246252 -0.649815177917480557567841970013 +-0.144192802906036393606470369377 0.443788003921508800164730246252 -0.649815177917480557567841970013 +-0.144169998168945323602230246252 -0.1843512058258056640625 -0.324391198158264171258480246252 +-0.144169998168945323602230246252 0.1843512058258056640625 -0.324391198158264171258480246252 +-0.144145050644874567202791126874 -0.0358010999858379350135884067186 0.0209881491959094980404021413278 +-0.144145050644874567202791126874 0.0358010999858379350135884067186 0.0209881491959094980404021413278 +-0.1440982483327388763427734375 -0.73413898050785064697265625 0.05268749780952930450439453125 +-0.1440982483327388763427734375 0.73413898050785064697265625 0.05268749780952930450439453125 +-0.144035850465297682321264005623 -0.217800796031951904296875 -0.233059051632881153448551003748 +-0.144035850465297682321264005623 0.217800796031951904296875 -0.233059051632881153448551003748 +-0.144002097845077503546207253748 -0.0410554513335227924675230326557 -0.0088224001228809356689453125 +-0.144002097845077503546207253748 0.0410554513335227924675230326557 -0.0088224001228809356689453125 +-0.14399500191211700439453125 -0.22712899744510650634765625 -0.421518504619598388671875 +-0.14399500191211700439453125 0.22712899744510650634765625 -0.421518504619598388671875 +-0.143994900584220875128238503748 0 0.0420175507664680494834819057814 +-0.143972101807594315969751619377 -0.0593891970813274425178285298443 -0.8864226043224334716796875 +-0.143972101807594315969751619377 0.0593891970813274425178285298443 -0.8864226043224334716796875 +-0.14389200508594512939453125 -0.4428620040416717529296875 -0.884967982769012451171875 +-0.14389200508594512939453125 0.4428620040416717529296875 -0.884967982769012451171875 +-0.14388795197010040283203125 -0.0240930005908012376258930942186 -0.0348682500422000871131977817186 +-0.14388795197010040283203125 0.0240930005908012376258930942186 -0.0348682500422000871131977817186 +-0.143855997920036310366853626874 -0.060109801590442657470703125 -0.256304991245269786492855246252 +-0.143855997920036310366853626874 0.060109801590442657470703125 -0.256304991245269786492855246252 +-0.1438453495502471923828125 -0.0412035003304481520225444057814 0.0105265494436025622976282889454 +-0.1438453495502471923828125 0.0412035003304481520225444057814 0.0105265494436025622976282889454 +-0.143836796283721923828125 -0.134463596343994157278345369377 0.03507860004901885986328125 +-0.143836796283721923828125 0.134463596343994157278345369377 0.03507860004901885986328125 +-0.143817298114299774169921875 -0.6821369826793670654296875 0.5692149102687835693359375 +-0.143817298114299774169921875 0.6821369826793670654296875 0.5692149102687835693359375 +-0.143800795078277587890625 -0.03981859982013702392578125 -0.133176004886627202816740123126 +-0.143800795078277587890625 0.03981859982013702392578125 -0.133176004886627202816740123126 +-0.143789994716644303762720369377 -0.077180802822113037109375 -0.115618002414703380242855246252 +-0.143789994716644303762720369377 0.077180802822113037109375 -0.115618002414703380242855246252 +-0.143787205219268798828125 -0.336069607734680197985710492503 0.162426805496215825863615123126 +-0.143787205219268798828125 0.336069607734680197985710492503 0.162426805496215825863615123126 +-0.143759402632713306768863503748 -0.186070793867111200503572376874 -0.186308401823043812139957253748 +-0.143759402632713306768863503748 0.186070793867111200503572376874 -0.186308401823043812139957253748 +-0.143716001510620111636384876874 -0.0133131995797157298005997105861 -0.138450205326080322265625 +-0.143716001510620111636384876874 0.0133131995797157298005997105861 -0.138450205326080322265625 +-0.143699397891759866885408314374 -0.104402353614568718653821122189 0.625260335206985540246193977509 +-0.143699397891759866885408314374 0.104402353614568718653821122189 0.625260335206985540246193977509 +-0.14369399845600128173828125 -0.12981374561786651611328125 -0.15811525285243988037109375 +-0.14369399845600128173828125 0.12981374561786651611328125 -0.15811525285243988037109375 +-0.14366100728511810302734375 -0.96193802356719970703125 -0.2324559986591339111328125 +-0.14366100728511810302734375 0.96193802356719970703125 -0.2324559986591339111328125 +-0.143645203113555913754240123126 -0.114410197734832769222990123126 0.0792234003543853815276776231258 +-0.143645203113555913754240123126 0.114410197734832769222990123126 0.0792234003543853815276776231258 +-0.143593251705169677734375 -0.066379003226757049560546875 -0.19358424842357635498046875 +-0.143593251705169677734375 0.066379003226757049560546875 -0.19358424842357635498046875 +-0.143556001782417286261051003748 -0.0301779001951217630550505788278 0.0313202999532222747802734375 +-0.143556001782417286261051003748 0.0301779001951217630550505788278 0.0313202999532222747802734375 +-0.1435512006282806396484375 -0.201694196462631231137052623126 0.169447803497314447573884876874 +-0.1435512006282806396484375 0.201694196462631231137052623126 0.169447803497314447573884876874 +-0.143521255254745488949552623126 -0.932408833503723055713408029987 -0.111870098486542696170076283124 +-0.143521255254745488949552623126 0.932408833503723055713408029987 -0.111870098486542696170076283124 +-0.143515804409980768374666126874 -0.01222500018775463104248046875 0.0418777495622634846061949076557 +-0.143515804409980768374666126874 0.01222500018775463104248046875 0.0418777495622634846061949076557 +-0.143483205139636971203742632497 -0.139861397445201873779296875 -0.286969560384750355108707253748 +-0.143483205139636971203742632497 0.139861397445201873779296875 -0.286969560384750355108707253748 +-0.14345000684261322021484375 -0.3096174895763397216796875 0.365456998348236083984375 +-0.14345000684261322021484375 0.3096174895763397216796875 0.365456998348236083984375 +-0.143423554301261885202123380623 -0.00609630011022090859823530095696 -0.04350315034389495849609375 +-0.143423554301261885202123380623 0.00609630011022090859823530095696 -0.04350315034389495849609375 +-0.143408596515655517578125 -0.0716445982456207358657351846887 0.119586801528930669613615123126 +-0.143408596515655517578125 0.0716445982456207358657351846887 0.119586801528930669613615123126 +-0.1433120071887969970703125 -0.6566150188446044921875 -0.740485012531280517578125 +-0.1433120071887969970703125 0.6566150188446044921875 -0.740485012531280517578125 +-0.143293198943138105905248380623 -0.441003012657165516241519753748 0.380766606330871559826789507497 +-0.143293198943138105905248380623 0.441003012657165516241519753748 0.380766606330871559826789507497 +-0.1430740058422088623046875 -0.864926993846893310546875 -0.4810740053653717041015625 +-0.1430740058422088623046875 0.864926993846893310546875 -0.4810740053653717041015625 +-0.143050253391265869140625 -0.30305485427379608154296875 -0.100967295467853546142578125 +-0.143050253391265869140625 0.30305485427379608154296875 -0.100967295467853546142578125 +-0.142973395437002187557951060626 -0.034544848836958408355712890625 0.83717690408229827880859375 +-0.142973395437002187557951060626 0.034544848836958408355712890625 0.83717690408229827880859375 +-0.142865999042987829037443248126 -0.633580201864242575915397992503 -0.623029518127441450658920985006 +-0.142865999042987829037443248126 0.633580201864242575915397992503 -0.623029518127441450658920985006 +-0.142695000767707802502570757497 -0.138869500160217262951789507497 -0.671083700656890824731704014994 +-0.142695000767707802502570757497 0.138869500160217262951789507497 -0.671083700656890824731704014994 +-0.1426790058612823486328125 -0.3314189910888671875 -0.34612751007080078125 +-0.1426790058612823486328125 0.3314189910888671875 -0.34612751007080078125 +-0.142672002315521240234375 -0.0383552014827728271484375 0.134809398651123041323884876874 +-0.142672002315521240234375 0.0383552014827728271484375 0.134809398651123041323884876874 +-0.14265869557857513427734375 -0.0463519513607025118728799384371 0 +-0.14265869557857513427734375 0.0463519513607025118728799384371 0 +-0.142636001110076904296875 -0.18587100505828857421875 0.4417090117931365966796875 +-0.142636001110076904296875 0.18587100505828857421875 0.4417090117931365966796875 +-0.14262640476226806640625 -0.752593612670898526317841970013 -0.23078238964080810546875 +-0.14262640476226806640625 0.752593612670898526317841970013 -0.23078238964080810546875 +-0.14256699383258819580078125 -0.19505049288272857666015625 0.064264751970767974853515625 +-0.14256699383258819580078125 0.19505049288272857666015625 0.064264751970767974853515625 +-0.142558395862579345703125 -0.136571598052978526727230246252 0.3478868007659912109375 +-0.142558395862579345703125 0.136571598052978526727230246252 0.3478868007659912109375 +-0.142544400691986095086605246252 -0.133922195434570318051115123126 -0.0417843997478485121299662807814 +-0.142544400691986095086605246252 0.133922195434570318051115123126 -0.0417843997478485121299662807814 +-0.142519998550415055715845369377 -0.714340019226074263158920985006 -0.33076560497283935546875 +-0.142519998550415055715845369377 0.714340019226074263158920985006 -0.33076560497283935546875 +-0.142509198188781743832365123126 -0.26699960231781005859375 -0.261538791656494129522769753748 +-0.142509198188781743832365123126 0.26699960231781005859375 -0.261538791656494129522769753748 +-0.142468947172164905889957253748 -0.0181712999939918525005300153907 -0.0432713985443115220497212192186 +-0.142468947172164905889957253748 0.0181712999939918525005300153907 -0.0432713985443115220497212192186 +-0.14245350658893585205078125 -0.16406925022602081298828125 0.123645998537540435791015625 +-0.14245350658893585205078125 0.16406925022602081298828125 0.123645998537540435791015625 +-0.142381054162979109323217130623 -0.0695026494562625829498614393742 -0.312085205316543545794871761245 +-0.142381054162979109323217130623 0.0695026494562625829498614393742 -0.312085205316543545794871761245 +-0.142303043603897089175447376874 -0.318195444345474254266292746252 0.28460745513439178466796875 +-0.142303043603897089175447376874 0.318195444345474254266292746252 0.28460745513439178466796875 +-0.142123100161552412545873380623 -0.623702108860015869140625 0.284246909618377674444644753748 +-0.142123100161552412545873380623 0.623702108860015869140625 0.284246909618377674444644753748 +-0.14211724698543548583984375 0 0.20567624270915985107421875 +-0.142081949114799488409488503748 -0.0243687003850936896587331403907 0.0414594009518623324295205634371 +-0.142081949114799488409488503748 0.0243687003850936896587331403907 0.0414594009518623324295205634371 +-0.141926801204681402035490123126 -0.293915605545043978619190738755 0.231236791610717778988615123126 +-0.141926801204681402035490123126 0.293915605545043978619190738755 0.231236791610717778988615123126 +-0.141881394386291520559595369377 -0.123127794265747075863615123126 0.068623602390289306640625 +-0.141881394386291520559595369377 0.123127794265747075863615123126 0.068623602390289306640625 +-0.141796854138374339715511496252 -0.607833841443061850817741742503 0.181470906734466558285490123126 +-0.141796854138374339715511496252 0.607833841443061850817741742503 0.181470906734466558285490123126 +-0.14176739752292633056640625 -0.0401067003607749952842631557814 -0.0281686507165431962440571567186 +-0.14176739752292633056640625 0.0401067003607749952842631557814 -0.0281686507165431962440571567186 +-0.141763803362846357858373380623 -0.30672061443328857421875 -0.495808196067810014184829014994 +-0.141763803362846357858373380623 0.30672061443328857421875 -0.495808196067810014184829014994 +-0.1417281515896320343017578125 -0.102970699965953829679854436563 0.831751352548599220959602007497 +-0.1417281515896320343017578125 0.102970699965953829679854436563 0.831751352548599220959602007497 +-0.141635000705718994140625 -0.0205805003643035888671875 0.20497800409793853759765625 +-0.141635000705718994140625 0.0205805003643035888671875 0.20497800409793853759765625 +-0.141606149077415449655248380623 -0.29680909216403961181640625 0.119800451397895801886051003748 +-0.141606149077415449655248380623 0.29680909216403961181640625 0.119800451397895801886051003748 +-0.141566401720047002621427623126 -0.102852603793144217747546065311 0.243680691719055153576789507497 +-0.141566401720047002621427623126 0.102852603793144217747546065311 0.243680691719055153576789507497 +-0.141555605828762059994474498126 -0.146487155556678766421541126874 -0.401252406835556019171207253748 +-0.141555605828762059994474498126 0.146487155556678766421541126874 -0.401252406835556019171207253748 +-0.141549649834632862432926003748 -0.739262846112251237329360264994 0.394909997284412395135433371252 +-0.141549649834632862432926003748 0.739262846112251237329360264994 0.394909997284412395135433371252 +-0.141526651382446272409154630623 -0.045781351625919342041015625 -0.0193456493318080909038503278907 +-0.141526651382446272409154630623 0.045781351625919342041015625 -0.0193456493318080909038503278907 +-0.1414490044116973876953125 -0.19586275517940521240234375 -0.064264751970767974853515625 +-0.1414490044116973876953125 0.19586275517940521240234375 -0.064264751970767974853515625 +-0.141421604156494157278345369377 -0.14142119884490966796875 0 +-0.141421604156494157278345369377 0.14142119884490966796875 0 +-0.141407552361488331182926003748 -0.0461482509970664936393980326557 0.0193456493318080909038503278907 +-0.141407552361488331182926003748 0.0461482509970664936393980326557 0.0193456493318080909038503278907 +-0.141319146007299417666658314374 -0.92990846931934356689453125 0.133410400152206426449552623126 +-0.141319146007299417666658314374 0.92990846931934356689453125 0.133410400152206426449552623126 +-0.141302248835563665219083873126 -0.0343345507979392963737730326557 -0.0368077509105205549766459682814 +-0.141302248835563665219083873126 0.0343345507979392963737730326557 -0.0368077509105205549766459682814 +-0.141286194324493408203125 -0.0651853978633880615234375 -0.125654602050781244448884876874 +-0.141286194324493408203125 0.0651853978633880615234375 -0.125654602050781244448884876874 +-0.141284698247909540347322376874 -0.0405934497714042635818643134371 0.0298460997641086557552458913278 +-0.141284698247909540347322376874 0.0405934497714042635818643134371 0.0298460997641086557552458913278 +-0.141261400282382959536775501874 -0.160227204859256733282535378748 0.666612803936004638671875 +-0.141261400282382959536775501874 0.160227204859256733282535378748 0.666612803936004638671875 +-0.141246603429317496569694867503 -0.507055443525314397668068977509 -0.159512649476528184377954744377 +-0.141246603429317496569694867503 0.507055443525314397668068977509 -0.159512649476528184377954744377 +-0.141173896193504316842748380623 0 -0.320265403389930702893195757497 +-0.1411035060882568359375 -0.43426549434661865234375 0.20372350513935089111328125 +-0.1411035060882568359375 0.43426549434661865234375 0.20372350513935089111328125 +-0.14104150235652923583984375 -0.1152195036411285400390625 -0.17126500606536865234375 +-0.14104150235652923583984375 0.1152195036411285400390625 -0.17126500606536865234375 +-0.1409922540187835693359375 -0.216713008284568769967748380623 0.235916802287101740054353626874 +-0.1409922540187835693359375 0.216713008284568769967748380623 0.235916802287101740054353626874 +-0.140831699967384343930021373126 0 -0.051637351512908935546875 +-0.140791498124599456787109375 -0.8889192044734954833984375 0 +-0.140791498124599456787109375 -0.337222793698310874255241742503 -0.262599742412567171978565738755 +-0.140791498124599456787109375 0.337222793698310874255241742503 -0.262599742412567171978565738755 +-0.140791498124599456787109375 0.8889192044734954833984375 0 +-0.14076299965381622314453125 -0.02033800072968006134033203125 0.479345500469207763671875 +-0.14076299965381622314453125 0.02033800072968006134033203125 0.479345500469207763671875 +-0.140700003504753118344083873126 -0.00618750024586915952501398052732 0.05162595212459564208984375 +-0.140700003504753118344083873126 0.00618750024586915952501398052732 0.05162595212459564208984375 +-0.140632349252700794561832253748 -0.0514266014099121065994424384371 0.0088224001228809356689453125 +-0.140632349252700794561832253748 0.0514266014099121065994424384371 0.0088224001228809356689453125 +-0.14062224328517913818359375 -0.0402507483959197998046875 0.2027442455291748046875 +-0.14062224328517913818359375 0.0402507483959197998046875 0.2027442455291748046875 +-0.140592446923255925961271373126 -0.0512146487832069383094868442186 -0.0105265494436025622976282889454 +-0.140592446923255925961271373126 0.0512146487832069383094868442186 -0.0105265494436025622976282889454 +-0.1405684947967529296875 -0.1428115069866180419921875 0.14948375523090362548828125 +-0.1405684947967529296875 0.1428115069866180419921875 0.14948375523090362548828125 +-0.140535199642181390933259876874 -0.432515192031860395971420985006 0.658164787292480513158920985006 +-0.140535199642181390933259876874 0.432515192031860395971420985006 0.658164787292480513158920985006 +-0.14051400125026702880859375 -0.5926245152950286865234375 -0.437666237354278564453125 +-0.14051400125026702880859375 0.5926245152950286865234375 -0.437666237354278564453125 +-0.140466403961181651727230246252 -0.259888005256652843133480246252 -0.743455982208252041942841970013 +-0.140466403961181651727230246252 0.259888005256652843133480246252 -0.743455982208252041942841970013 +-0.140458944439888017141626619377 -0.372214356064796469958366742503 0.210304351150989526919588001874 +-0.140458944439888017141626619377 0.372214356064796469958366742503 0.210304351150989526919588001874 +-0.140371799468994140625 -0.200811606645584089791967130623 0.547695600986480735095085492503 +-0.140371799468994140625 0.200811606645584089791967130623 0.547695600986480735095085492503 +-0.140368053317070001773103626874 -0.0121627494692802418790877894139 -0.0514673978090286268760600307814 +-0.140368053317070001773103626874 0.0121627494692802418790877894139 -0.0514673978090286268760600307814 +-0.140268597006797779425113503748 -0.034867800772190093994140625 0.0401118010282516465614399692186 +-0.140268597006797779425113503748 0.034867800772190093994140625 0.0401118010282516465614399692186 +-0.140203195810317982061832253748 -0.511581587791442804480368522491 0.280405801534652721063167746252 +-0.140203195810317982061832253748 0.511581587791442804480368522491 0.280405801534652721063167746252 +-0.140184304118156438656583873126 -0.245256006717681884765625 0.10098449885845184326171875 +-0.140184304118156438656583873126 0.245256006717681884765625 0.10098449885845184326171875 +-0.14018149673938751220703125 -0.17515425384044647216796875 0.110317997634410858154296875 +-0.14018149673938751220703125 0.17515425384044647216796875 0.110317997634410858154296875 +-0.140098652243614202328458873126 -0.0281144991517066934749724538278 -0.0456283494830131489128355326557 +-0.140098652243614202328458873126 0.0281144991517066934749724538278 -0.0456283494830131489128355326557 +-0.140086641907691961117521373126 -0.147057344019413005486995871252 0.511125987768173306591279470013 +-0.140086641907691961117521373126 0.147057344019413005486995871252 0.511125987768173306591279470013 +-0.140074545145034812243522992503 -0.431112000346183799059929242503 -0.311483147740364119115952235006 +-0.140074545145034812243522992503 0.431112000346183799059929242503 -0.311483147740364119115952235006 +-0.140067601203918451480134876874 -0.583422017097473100122329014994 0 +-0.140067601203918451480134876874 0.583422017097473100122329014994 0 +-0.140062800049781804867521373126 -0.249107408523559559210269753748 -0.0912572979927062932770098768742 +-0.140062800049781804867521373126 0.249107408523559559210269753748 -0.0912572979927062932770098768742 +-0.1400274932384490966796875 -0.060594998300075531005859375 0.476152002811431884765625 +-0.1400274932384490966796875 0.060594998300075531005859375 0.476152002811431884765625 +-0.139986746013164520263671875 -0.7249822318553924560546875 -0.1315447501838207244873046875 +-0.139986746013164520263671875 0.7249822318553924560546875 -0.1315447501838207244873046875 +-0.139825201034545903988615123126 -0.141047000885009765625 0.023551799356937408447265625 +-0.139825201034545903988615123126 0.141047000885009765625 0.023551799356937408447265625 +-0.139800596237182633840845369377 -0.236392199993133544921875 -0.857073605060577392578125 +-0.139800596237182633840845369377 0.236392199993133544921875 -0.857073605060577392578125 +-0.13979925215244293212890625 -0.01668524928390979766845703125 -0.20658600330352783203125 +-0.13979925215244293212890625 0.01668524928390979766845703125 -0.20658600330352783203125 +-0.139742004871368424856470369377 -0.0523091971874237102180238423443 0.133176398277282725945980246252 +-0.139742004871368424856470369377 0.0523091971874237102180238423443 0.133176398277282725945980246252 +-0.139731895923614485299779630623 -0.0184091996401548364803435475778 0.0513428986072540297080912807814 +-0.139731895923614485299779630623 0.0184091996401548364803435475778 0.0513428986072540297080912807814 +-0.139696803689002974069310880623 0 -0.265489804744720447882144753748 +-0.1396737992763519287109375 -0.578974908590316750256477007497 -0.367803102731704689709602007497 +-0.1396737992763519287109375 0.578974908590316750256477007497 -0.367803102731704689709602007497 +-0.13950960338115692138671875 -0.349167609214782681537059261245 0.467567396163940385278579014994 +-0.13950960338115692138671875 0.349167609214782681537059261245 0.467567396163940385278579014994 +-0.1395075023174285888671875 -0.101356752216815948486328125 0.1810095012187957763671875 +-0.1395075023174285888671875 0.101356752216815948486328125 0.1810095012187957763671875 +-0.139481551945209503173828125 -0.288899002969265017437550113755 -0.5653160512447357177734375 +-0.139481551945209503173828125 0.288899002969265017437550113755 -0.5653160512447357177734375 +-0.139464150369167316778629128748 -0.158894751965999586618139005623 0.278930741548538196905582253748 +-0.139464150369167316778629128748 0.158894751965999586618139005623 0.278930741548538196905582253748 +-0.139457446336746226922542746252 -0.310479411482810996325554242503 -0.432034894824028070647869981258 +-0.139457446336746226922542746252 0.310479411482810996325554242503 -0.432034894824028070647869981258 +-0.139438605308532720394865123126 -0.131255996227264415399105246252 0.0576955974102020263671875 +-0.139438605308532720394865123126 0.131255996227264415399105246252 0.0576955974102020263671875 +-0.139398899674415571725560880623 -0.175105494260787947213842130623 0.199764901399612421206697376874 +-0.139398899674415571725560880623 0.175105494260787947213842130623 0.199764901399612421206697376874 +-0.1393967568874359130859375 -0.20678675174713134765625 0.01754424907267093658447265625 +-0.1393967568874359130859375 0.20678675174713134765625 0.01754424907267093658447265625 +-0.139371800422668473684595369377 -0.10125839710235595703125 0.101598405838012703639172684689 +-0.139371800422668473684595369377 0.10125839710235595703125 0.101598405838012703639172684689 +-0.139351296424865739309595369377 -0.282352963089942954333366742503 0.450952166318893454821647992503 +-0.139351296424865739309595369377 0.282352963089942954333366742503 0.450952166318893454821647992503 +-0.139339196681976335012720369377 -0.599824810028076194079460492503 -0.510680818557739280016960492503 +-0.139339196681976335012720369377 0.599824810028076194079460492503 -0.510680818557739280016960492503 +-0.1393184959888458251953125 -0.172336202859878523385717130623 -0.202214401960372908151342130623 +-0.1393184959888458251953125 0.172336202859878523385717130623 -0.202214401960372908151342130623 +-0.13924275338649749755859375 -0.2071117460727691650390625 -0.0147040002048015594482421875 +-0.13924275338649749755859375 0.2071117460727691650390625 -0.0147040002048015594482421875 +-0.1391444988548755645751953125 -0.52834872901439666748046875 0.51379573345184326171875 +-0.1391444988548755645751953125 0.52834872901439666748046875 0.51379573345184326171875 +-0.139140403270721441097990123126 -0.140893995761871337890625 -0.02808620035648345947265625 +-0.139140403270721441097990123126 0.140893995761871337890625 -0.02808620035648345947265625 +-0.139060795307159423828125 -0.026558399200439453125 -0.141268396377563471011384876874 +-0.139060795307159423828125 0.026558399200439453125 -0.141268396377563471011384876874 +-0.13905765116214752197265625 -0.427975201606750510485710492503 0 +-0.13905765116214752197265625 0.427975201606750510485710492503 0 +-0.1389071941375732421875 -0.374052000045776378289730246252 0.028105199337005615234375 +-0.1389071941375732421875 0.374052000045776378289730246252 0.028105199337005615234375 +-0.138884849846363067626953125 -0.233664312958717340640291126874 -0.358625239133834872173878238755 +-0.138884849846363067626953125 0.233664312958717340640291126874 -0.358625239133834872173878238755 +-0.1388753950595855712890625 -0.24858538806438446044921875 0.348452103137969981805355246252 +-0.1388753950595855712890625 0.24858538806438446044921875 0.348452103137969981805355246252 +-0.138763594627380387747095369377 -0.374419999122619640008480246252 -0.0235464006662368802169638115629 +-0.138763594627380387747095369377 0.374419999122619640008480246252 -0.0235464006662368802169638115629 +-0.1387252509593963623046875 -0.0596680007874965667724609375 0.1992360055446624755859375 +-0.1387252509593963623046875 0.0596680007874965667724609375 0.1992360055446624755859375 +-0.138719594478607183285490123126 -0.0844716012477874783614950615629 0.116710805892944344264172684689 +-0.138719594478607183285490123126 0.0844716012477874783614950615629 0.116710805892944344264172684689 +-0.138582149147987360171541126874 -0.05740199983119964599609375 0 +-0.138582149147987360171541126874 0.05740199983119964599609375 0 +-0.138560396432876598016292746252 -0.546724802255630470959602007497 0.701351094245910688940170985006 +-0.138560396432876598016292746252 0.546724802255630470959602007497 0.701351094245910688940170985006 +-0.138543602824211131707698996252 -0.4264006316661834716796875 -0.470625361800193819927784488755 +-0.138543602824211131707698996252 0.4264006316661834716796875 -0.470625361800193819927784488755 +-0.13841794431209564208984375 -0.0729124009609222467620526231258 -0.527280050516128584447983485006 +-0.13841794431209564208984375 0.0729124009609222467620526231258 -0.527280050516128584447983485006 +-0.138338054716587055548160378748 -0.178057546168565755673185435626 0.9228527843952178955078125 +-0.138338054716587055548160378748 0.178057546168565755673185435626 0.9228527843952178955078125 +-0.138317553699016548840461382497 -0.201058903336524957827791126874 -0.250885602831840526238948996252 +-0.138317553699016548840461382497 0.201058903336524957827791126874 -0.250885602831840526238948996252 +-0.138286051154136641061498380623 -0.0287665508687496157547158759371 0.0504921019077301039268412807814 +-0.138286051154136641061498380623 0.0287665508687496157547158759371 0.0504921019077301039268412807814 +-0.138266703486442571469083873126 -0.0508806020021438584755024692186 0.0281686507165431962440571567186 +-0.138266703486442571469083873126 0.0508806020021438584755024692186 0.0281686507165431962440571567186 +-0.138219746947288502081363503748 -0.0221118003129959113384206403907 -0.0539108991622924763054136576557 +-0.138219746947288502081363503748 0.0221118003129959113384206403907 -0.0539108991622924763054136576557 +-0.1381990015506744384765625 -0.951054990291595458984375 0.2763969898223876953125 +-0.1381990015506744384765625 0.951054990291595458984375 0.2763969898223876953125 +-0.138197004795074462890625 -0.4253189861774444580078125 0.894429981708526611328125 +-0.138197004795074462890625 0.4253189861774444580078125 0.894429981708526611328125 +-0.1381925046443939208984375 -0.4253199994564056396484375 -0.22360749542713165283203125 +-0.1381925046443939208984375 0.4253199994564056396484375 -0.22360749542713165283203125 +-0.138162446022033674752904630623 -0.0502032011747360201736611884371 -0.0298460997641086557552458913278 +-0.138162446022033674752904630623 0.0502032011747360201736611884371 -0.0298460997641086557552458913278 +-0.138088797032833110467464621252 -0.424994838237762462274105246252 -0.0530185483396053355842347798443 +-0.138088797032833110467464621252 0.424994838237762462274105246252 -0.0530185483396053355842347798443 +-0.138087604939937574899389005623 -0.424995744228363003802684261245 -0.723055905103683449475227007497 +-0.138087604939937574899389005623 0.424995744228363003802684261245 -0.723055905103683449475227007497 +-0.13806749880313873291015625 -0.1640007495880126953125 -0.12861250340938568115234375 +-0.13806749880313873291015625 0.1640007495880126953125 -0.12861250340938568115234375 +-0.1380528546869754791259765625 -0.2598459422588348388671875 0.579587468504905722888054242503 +-0.1380528546869754791259765625 0.2598459422588348388671875 0.579587468504905722888054242503 +-0.138041996955871576480134876874 -0.11049020290374755859375 -0.0934683978557586669921875 +-0.138041996955871576480134876874 0.11049020290374755859375 -0.0934683978557586669921875 +-0.138015498220920546090795255623 -0.424774700403213467669871761245 -0.538997900485992387231704014994 +-0.138015498220920546090795255623 0.424774700403213467669871761245 -0.538997900485992387231704014994 +-0.137992197275161737612947376874 -0.0444003000855445820183042826557 -0.038558699190616607666015625 +-0.137992197275161737612947376874 0.0444003000855445820183042826557 -0.038558699190616607666015625 +-0.137970301508903492315738503748 -0.100241097807884219084151311563 -0.246811491250991804635717130623 +-0.137970301508903492315738503748 0.100241097807884219084151311563 -0.246811491250991804635717130623 +-0.137969398498535150698884876874 -0.052829802036285400390625 -0.134809005260467545950220369377 +-0.137969398498535150698884876874 0.052829802036285400390625 -0.134809005260467545950220369377 +-0.137967306375503556692407869377 -0.137343156337738053762720369377 0.405711445212364185675113503748 +-0.137967306375503556692407869377 0.137343156337738053762720369377 0.405711445212364185675113503748 +-0.1379528045654296875 0 -0.144806802272796630859375 +-0.1379519999027252197265625 0 -0.990438997745513916015625 +-0.137933099269866937808259876874 -0.0562551006674766526649555942186 0.0176024995744228363037109375 +-0.137933099269866937808259876874 0.0562551006674766526649555942186 0.0176024995744228363037109375 +-0.137845954298973089047208873126 -0.497660356760025068822983485006 0.189296256005764024221704744377 +-0.137845954298973089047208873126 0.497660356760025068822983485006 0.189296256005764024221704744377 +-0.137833801656961435488923939374 -0.594777947664260842053352007497 -0.22302670776844024658203125 +-0.137833801656961435488923939374 0.594777947664260842053352007497 -0.22302670776844024658203125 +-0.13779090344905853271484375 -0.510830464959144636694077235006 0.377578499913215626104801003748 +-0.13779090344905853271484375 0.510830464959144636694077235006 0.377578499913215626104801003748 +-0.137736153602600081002904630623 -0.045188248157501220703125 0.038558699190616607666015625 +-0.137736153602600081002904630623 0.045188248157501220703125 0.038558699190616607666015625 +-0.13769455254077911376953125 -0.0142359003424644466745396798046 0.32146169245243072509765625 +-0.13769455254077911376953125 0.0142359003424644466745396798046 0.32146169245243072509765625 +-0.137678405642509466000333873126 -0.423727655410766623766960492503 0.0632411979138851193527059990629 +-0.137678405642509466000333873126 0.423727655410766623766960492503 0.0632411979138851193527059990629 +-0.137659496068954473324552623126 -0.0557616010308265644401792826557 -0.0209881491959094980404021413278 +-0.137659496068954473324552623126 0.0557616010308265644401792826557 -0.0209881491959094980404021413278 +-0.137637805938720714227230246252 -0.0999993979930877685546875 -0.105147194862365733758480246252 +-0.137637805938720714227230246252 0.0999993979930877685546875 -0.105147194862365733758480246252 +-0.137611294537782674618497935626 -0.762860450148582391882712272491 0.549188342690467790063735264994 +-0.137611294537782674618497935626 0.762860450148582391882712272491 0.549188342690467790063735264994 +-0.137595301866531377621427623126 -0.00609600003808736818494695697268 -0.0594170987606048583984375 +-0.137595301866531377621427623126 0.00609600003808736818494695697268 -0.0594170987606048583984375 +-0.137594997882843017578125 -0.120299804210662844572432561563 -0.0812132000923156821547976846887 +-0.137594997882843017578125 0.120299804210662844572432561563 -0.0812132000923156821547976846887 +-0.137557795643806463070646373126 -0.12467730045318603515625 0.235655093193054193667634876874 +-0.137557795643806463070646373126 0.12467730045318603515625 0.235655093193054193667634876874 +-0.137538100779056537970035378748 -0.579909384250640869140625 0.367135989665985096319644753748 +-0.137538100779056537970035378748 0.579909384250640869140625 0.367135989665985096319644753748 +-0.13750450313091278076171875 -0.329637697339057900158820757497 0.602023082971572809363181022491 +-0.13750450313091278076171875 0.329637697339057900158820757497 0.602023082971572809363181022491 +-0.137502253055572509765625 -0.099900998175144195556640625 -0.1833382546901702880859375 +-0.137502253055572509765625 0.099900998175144195556640625 -0.1833382546901702880859375 +-0.137425243854522705078125 -0.0500915013253688812255859375 -0.202744007110595703125 +-0.137425243854522705078125 0.0500915013253688812255859375 -0.202744007110595703125 +-0.137422245740890486276342130623 -0.274344000220298755987613503748 -0.168375547230243671759097878748 +-0.137422245740890486276342130623 0.274344000220298755987613503748 -0.168375547230243671759097878748 +-0.137317753583192814215152566248 -0.875822076201438814990751779987 -0.341437591612338997570930132497 +-0.137317753583192814215152566248 0.875822076201438814990751779987 -0.341437591612338997570930132497 +-0.1372627504169940948486328125 -0.720490515232086181640625 0.1566922478377819061279296875 +-0.1372627504169940948486328125 0.720490515232086181640625 0.1566922478377819061279296875 +-0.137213194370269769839509876874 -0.165706801414489762747095369377 0.337214803695678744244190738755 +-0.137213194370269769839509876874 0.165706801414489762747095369377 0.337214803695678744244190738755 +-0.137208598852157581671207253748 -0.579835796356201194079460492503 -0.0704585999250411931793536268742 +-0.137208598852157581671207253748 0.579835796356201194079460492503 -0.0704585999250411931793536268742 +-0.13717700541019439697265625 -0.099663503468036651611328125 0.4703719913959503173828125 +-0.13717700541019439697265625 0.099663503468036651611328125 0.4703719913959503173828125 +-0.137111246585845947265625 -0.2030420005321502685546875 0.049743749201297760009765625 +-0.137111246585845947265625 0.2030420005321502685546875 0.049743749201297760009765625 +-0.137052896618843067511051003748 -0.0382765486836433369011167826557 -0.0474490508437156663368305942186 +-0.137052896618843067511051003748 0.0382765486836433369011167826557 -0.0474490508437156663368305942186 +-0.137044253945350635870426003748 -0.26552645862102508544921875 0.182248851656913735119758257497 +-0.137044253945350635870426003748 0.26552645862102508544921875 0.182248851656913735119758257497 +-0.137042999267578125 -0.17599500715732574462890625 -0.112893752753734588623046875 +-0.137042999267578125 0.17599500715732574462890625 -0.112893752753734588623046875 +-0.137026798725128184930355246252 -0.36907279491424560546875 -0.070773601531982421875 +-0.137026798725128184930355246252 0.36907279491424560546875 -0.070773601531982421875 +-0.137013494968414306640625 -0.09954600036144256591796875 -0.470444500446319580078125 +-0.137013494968414306640625 0.09954600036144256591796875 -0.470444500446319580078125 +-0.136984500288963306768863503748 0 0.0611168995499610859245542826557 +-0.136915194988250749075220369377 -0.739101600646972722863381477509 0.273829603195190451891960492503 +-0.136915194988250749075220369377 0.739101600646972722863381477509 0.273829603195190451891960492503 +-0.136874401569366449527009876874 -0.0793340027332306019225427462516 -0.36738479137420654296875 +-0.136874401569366449527009876874 0.0793340027332306019225427462516 -0.36738479137420654296875 +-0.136868901550769805908203125 -0.270131391286849931177016514994 -0.631106692552566461706931022491 +-0.136868901550769805908203125 0.270131391286849931177016514994 -0.631106692552566461706931022491 +-0.136861798167228682077123380623 -0.42122519016265869140625 -0.404769015312194835320980246252 +-0.136861798167228682077123380623 0.42122519016265869140625 -0.404769015312194835320980246252 +-0.136786195635795582159488503748 -0.0396251991391181959678569057814 -0.58285439014434814453125 +-0.136786195635795582159488503748 0.0396251991391181959678569057814 -0.58285439014434814453125 +-0.136711052060127236096320757497 -0.0416765995323657989501953125 0.319488745927810624536391514994 +-0.136711052060127236096320757497 0.0416765995323657989501953125 0.319488745927810624536391514994 +-0.136697404831647856271459318123 -0.420718903839588154180972878748 -0.840719583630561761999899772491 +-0.136697404831647856271459318123 0.420718903839588154180972878748 -0.840719583630561761999899772491 +-0.1366521008312702178955078125 -0.558899897336959883276108485006 -0.302418999373912811279296875 +-0.1366521008312702178955078125 0.558899897336959883276108485006 -0.302418999373912811279296875 +-0.13663299381732940673828125 0 -0.480969488620758056640625 +-0.13660700619220733642578125 -0.1858730018138885498046875 0.09638349711894989013671875 +-0.13660700619220733642578125 0.1858730018138885498046875 0.09638349711894989013671875 +-0.13658775389194488525390625 -0.20405800640583038330078125 -0.0469477511942386627197265625 +-0.13658775389194488525390625 0.20405800640583038330078125 -0.0469477511942386627197265625 +-0.136557199805974971429378683752 -0.420271795988082896844417746252 0.476680082082748424188167746252 +-0.136557199805974971429378683752 0.420271795988082896844417746252 0.476680082082748424188167746252 +-0.136520397663116438424779630623 -0.01233614981174468994140625 0.060909748077392578125 +-0.136520397663116438424779630623 0.01233614981174468994140625 0.060909748077392578125 +-0.136502999067306507452457253748 -0.263802891969680763928352007497 0.0421296000480651869346537807814 +-0.136502999067306507452457253748 0.263802891969680763928352007497 0.0421296000480651869346537807814 +-0.136477956920862203427091685626 -0.913841122388839632861845529987 -0.220833198726177210025056751874 +-0.136477956920862203427091685626 0.913841122388839632861845529987 -0.220833198726177210025056751874 +-0.136459994316101090872095369377 -0.248094010353088395559595369377 -0.282538390159606966900440738755 +-0.136459994316101090872095369377 0.248094010353088395559595369377 -0.282538390159606966900440738755 +-0.136434400081634515933259876874 -0.366436409950256392065170985006 0.0843216001987457386412927462516 +-0.136434400081634515933259876874 0.366436409950256392065170985006 0.0843216001987457386412927462516 +-0.136403399705886829718082253748 -0.264851099252700783459602007497 -0.0353276990354061126708984375 +-0.136403399705886829718082253748 0.264851099252700783459602007497 -0.0353276990354061126708984375 +-0.1363852024078369140625 -0.0888921976089477594573651231258 -0.116177594661712652035490123126 +-0.1363852024078369140625 0.0888921976089477594573651231258 -0.116177594661712652035490123126 +-0.136328196525573736019865123126 -0.13875579833984375 0.04649139940738677978515625 +-0.136328196525573736019865123126 0.13875579833984375 0.04649139940738677978515625 +-0.136299800872802745477230246252 -0.129367601871490489617855246252 -0.0684571981430053683181924384371 +-0.136299800872802745477230246252 0.129367601871490489617855246252 -0.0684571981430053683181924384371 +-0.1362184472382068634033203125 -0.307348103821277585101512386245 0.78069268167018890380859375 +-0.1362184472382068634033203125 0.307348103821277585101512386245 0.78069268167018890380859375 +-0.13620780408382415771484375 -0.0392320498824119540115518134371 0.0490741521120071425010600307814 +-0.13620780408382415771484375 0.0392320498824119540115518134371 0.0490741521120071425010600307814 +-0.1361972987651824951171875 -0.2673017978668212890625 0 +-0.1361972987651824951171875 0.2673017978668212890625 0 +-0.136146900057792646920873380623 -0.0623389497399330083649005018742 0.00882419999688863719577991417964 +-0.136146900057792646920873380623 0.0623389497399330083649005018742 0.00882419999688863719577991417964 +-0.136146406829357136114566628748 -0.623784267902374289782585492503 -0.703460761904716513903679242503 +-0.136146406829357136114566628748 0.623784267902374289782585492503 -0.703460761904716513903679242503 +-0.1361212469637393951416015625 -0.22200000286102294921875 0.70334024727344512939453125 +-0.1361212469637393951416015625 0.22200000286102294921875 0.70334024727344512939453125 +-0.136116448044776905401676003748 -0.0621403500437736483474893134371 -0.0105296999216079704975168596093 +-0.136116448044776905401676003748 0.0621403500437736483474893134371 -0.0105296999216079704975168596093 +-0.136116003990173345394865123126 -0.0661202013492584311782351846887 0.130769205093383800164730246252 +-0.136116003990173345394865123126 0.0661202013492584311782351846887 0.130769205093383800164730246252 +-0.136026000976562505551115123126 -0.259776806831359896587940738755 0.272053194046020518914730246252 +-0.136026000976562505551115123126 0.259776806831359896587940738755 0.272053194046020518914730246252 +-0.135973651707172377145482755623 -0.0560897972434759098381285014057 -0.83717690408229827880859375 +-0.135973651707172377145482755623 0.0560897972434759098381285014057 -0.83717690408229827880859375 +-0.135971403121948247738615123126 -0.578316593170166037829460492503 0.084035396575927734375 +-0.135971403121948247738615123126 -0.2183859050273895263671875 0.154335004091262800729467130623 +-0.135971403121948247738615123126 0.2183859050273895263671875 0.154335004091262800729467130623 +-0.135971403121948247738615123126 0.578316593170166037829460492503 0.084035396575927734375 +-0.135969603061676019839509876874 0 0.146670603752136224917634876874 +-0.135967504978179942742855246252 -0.883334684371948286596420985006 -0.105982198566198351774580999063 +-0.135967504978179942742855246252 0.883334684371948286596420985006 -0.105982198566198351774580999063 +-0.135920305550098402536107755623 -0.821680644154548556201689279987 -0.457020305097103118896484375 +-0.135920305550098402536107755623 0.821680644154548556201689279987 -0.457020305097103118896484375 +-0.13590525090694427490234375 -0.098740495741367340087890625 -0.73094473779201507568359375 +-0.13590525090694427490234375 0.098740495741367340087890625 -0.73094473779201507568359375 +-0.1358274482190608978271484375 -0.64424048364162445068359375 0.53759185969829559326171875 +-0.1358274482190608978271484375 0.64424048364162445068359375 0.53759185969829559326171875 +-0.135648798942565929070980246252 0 -0.376297211647033724712940738755 +-0.135641402006149297543302623126 -0.0159739505499601371074636091407 -0.0620180994272232014030699076557 +-0.135641402006149297543302623126 0.0159739505499601371074636091407 -0.0620180994272232014030699076557 +-0.135554254055023193359375 -0.11905474960803985595703125 0.173063755035400390625 +-0.135554254055023193359375 0.11905474960803985595703125 0.173063755035400390625 +-0.135517394542694097347990123126 -0.016300000250339508056640625 0.146182596683502197265625 +-0.135517394542694097347990123126 0.016300000250339508056640625 0.146182596683502197265625 +-0.135507398843765253237947376874 -0.116318646073341358526676003748 -0.301011207699775684698551003748 +-0.135507398843765253237947376874 0.116318646073341358526676003748 -0.301011207699775684698551003748 +-0.135495197772979747430355246252 -0.157653200626373307668970369377 -0.341740393638610862048210492503 +-0.135495197772979747430355246252 0.157653200626373307668970369377 -0.341740393638610862048210492503 +-0.135486400127410894222990123126 0 0.376355600357055675164730246252 +-0.13548074662685394287109375 -0.0227320499718189246440847028907 0.0602346003055572454254473768742 +-0.13548074662685394287109375 0.0227320499718189246440847028907 0.0602346003055572454254473768742 +-0.135398250818252546823217130623 -0.0319531492888927431961221259371 -0.0560917496681213392784037807814 +-0.135398250818252546823217130623 0.0319531492888927431961221259371 -0.0560917496681213392784037807814 +-0.13538825511932373046875 -0.15386299788951873779296875 -0.14316475391387939453125 +-0.13538825511932373046875 0.15386299788951873779296875 -0.14316475391387939453125 +-0.135306601226329814569027121252 -0.179259303212165849172876619377 -0.502054300904274053429787727509 +-0.135306601226329814569027121252 0.179259303212165849172876619377 -0.502054300904274053429787727509 +-0.135257399082183843441740123126 -0.158447992801666243112279630623 -0.562671589851379327917868522491 +-0.135257399082183843441740123126 0.158447992801666243112279630623 -0.562671589851379327917868522491 +-0.1351807527244091033935546875 -0.41605125367641448974609375 -0.609201729297637939453125 +-0.1351807527244091033935546875 0.41605125367641448974609375 -0.609201729297637939453125 +-0.135146999359130853823884876874 -0.146958601474761973992855246252 0.0117655999958515174175222028907 +-0.135146999359130853823884876874 0.146958601474761973992855246252 0.0117655999958515174175222028907 +-0.135145354270935075247095369377 -0.41593725979328155517578125 -0.105981749296188351716629938437 +-0.135145354270935075247095369377 0.41593725979328155517578125 -0.105981749296188351716629938437 +-0.13511960208415985107421875 -0.685598218441009432666533029987 -0.0412013012915849671791157504686 +-0.13511960208415985107421875 0.685598218441009432666533029987 -0.0412013012915849671791157504686 +-0.13509894907474517822265625 -0.0466392517089843708366636576557 -0.319488745927810624536391514994 +-0.13509894907474517822265625 0.0466392517089843708366636576557 -0.319488745927810624536391514994 +-0.135098803043365495168970369377 -0.114409995079040538445980246252 0.0930519998073577880859375 +-0.135098803043365495168970369377 0.114409995079040538445980246252 0.0930519998073577880859375 +-0.1350840032100677490234375 -0.221975505352020263671875 0.4271754920482635498046875 +-0.1350840032100677490234375 0.221975505352020263671875 0.4271754920482635498046875 +-0.135039603710174566097990123126 -0.0324559986591339139083700615629 0.375114393234252940789730246252 +-0.135039603710174566097990123126 0.0324559986591339139083700615629 0.375114393234252940789730246252 +-0.1350004971027374267578125 -0.3077259957790374755859375 -0.370243012905120849609375 +-0.1350004971027374267578125 0.3077259957790374755859375 -0.370243012905120849609375 +-0.134977996349334716796875 -0.905829012393951416015625 0.4015659987926483154296875 +-0.134977996349334716796875 0.905829012393951416015625 0.4015659987926483154296875 +-0.134928999096155161074861439374 -0.598381301760673500744758257497 -0.588416767120361283716079014994 +-0.134928999096155161074861439374 0.598381301760673500744758257497 -0.588416767120361283716079014994 +-0.134907750785350805111661998126 -0.319034251570701588018863503748 -0.287257960438728365826221988755 +-0.134907750785350805111661998126 0.319034251570701588018863503748 -0.287257960438728365826221988755 +-0.134882402420043956414730246252 -0.147002005577087396792634876874 -0.0140395998954772963096537807814 +-0.134882402420043956414730246252 0.147002005577087396792634876874 -0.0140395998954772963096537807814 +-0.13481675088405609130859375 -0.15864349901676177978515625 0.13840775191783905029296875 +-0.13481675088405609130859375 0.15864349901676177978515625 0.13840775191783905029296875 +-0.134789103269577020816072376874 -0.0399210020899772657920756557814 -0.265025103092193570208934261245 +-0.134789103269577020816072376874 0.0399210020899772657920756557814 -0.265025103092193570208934261245 +-0.1347700059413909912109375 -0.4805940091609954833984375 -0.0294330008327960968017578125 +-0.1347700059413909912109375 0.4805940091609954833984375 -0.0294330008327960968017578125 +-0.134755504131317122018529630623 -0.258800393342971779553352007497 -0.069737099111080169677734375 +-0.134755504131317122018529630623 0.258800393342971779553352007497 -0.069737099111080169677734375 +-0.13475525379180908203125 -0.0690448515117168398758096259371 0.315553346276283230853465511245 +-0.13475525379180908203125 0.0690448515117168398758096259371 0.315553346276283230853465511245 +-0.134643303602933889218107310626 -0.486730194091796908306690738755 -0.217864350974559806140007367503 +-0.134643303602933889218107310626 0.486730194091796908306690738755 -0.217864350974559806140007367503 +-0.134573400020599365234375 -0.0608143508434295654296875 0.0262984491884708411479909528907 +-0.134573400020599365234375 0.0608143508434295654296875 0.0262984491884708411479909528907 +-0.134563195705413835012720369377 -0.03251279890537261962890625 0.7879312038421630859375 +-0.134563195705413835012720369377 0.03251279890537261962890625 0.7879312038421630859375 +-0.13456250727176666259765625 -0.18735849857330322265625 -0.096383251249790191650390625 +-0.13456250727176666259765625 0.18735849857330322265625 -0.096383251249790191650390625 +-0.134497654438018782174779630623 -0.0552769482135772663444761576557 0.0368079006671905503700337192186 +-0.134497654438018782174779630623 0.0552769482135772663444761576557 0.0368079006671905503700337192186 +-0.134491698443889612368806751874 -0.685196381807327226098891514994 0.0491749979555606842041015625 +-0.134491698443889612368806751874 0.685196381807327226098891514994 0.0491749979555606842041015625 +-0.134423097968101507015958873126 -0.2234171926975250244140625 -0.14837519824504852294921875 +-0.134423097968101507015958873126 0.2234171926975250244140625 -0.14837519824504852294921875 +-0.134390401840209949835269753748 0 0.584755790233612016137954014994 +-0.13435600697994232177734375 -0.48032701015472412109375 0.03513149917125701904296875 +-0.13435600697994232177734375 0.48032701015472412109375 0.03513149917125701904296875 +-0.134291803836822515316740123126 -0.0772369980812072781661825615629 -0.126491796970367442742855246252 +-0.134291803836822515316740123126 0.0772369980812072781661825615629 -0.126491796970367442742855246252 +-0.134236752986907958984375 -0.076913498342037200927734375 0.196379244327545166015625 +-0.134236752986907958984375 0.076913498342037200927734375 0.196379244327545166015625 +-0.134164801239967351742521373126 -0.2551943957805633544921875 0.0829190969467163002670773153113 +-0.134164801239967351742521373126 0.2551943957805633544921875 0.0829190969467163002670773153113 +-0.134163999557495111636384876874 -0.137637996673583978823884876874 -0.0552792012691497858245526231258 +-0.134163999557495111636384876874 0.137637996673583978823884876874 -0.0552792012691497858245526231258 +-0.134163746237754816226228626874 0 -0.067082248628139495849609375 +-0.134163403511047357730134876874 -0.03249140083789825439453125 0.144722199440002446957365123126 +-0.134163403511047357730134876874 0.03249140083789825439453125 0.144722199440002446957365123126 +-0.134163299202919000796541126874 -0.1577180922031402587890625 -0.2170836031436920166015625 +-0.134163299202919000796541126874 0.1577180922031402587890625 -0.2170836031436920166015625 +-0.134163004159927351510717130623 0 0.268328708410263072625667746252 +-0.134125602245330821649105246252 -0.327681994438171420025440738755 -0.186103999614715576171875 +-0.134125602245330821649105246252 0.327681994438171420025440738755 -0.186103999614715576171875 +-0.134122447669506067446931751874 -0.319543695449829079358039507497 0.04902064800262451171875 +-0.134122447669506067446931751874 0.319543695449829079358039507497 0.04902064800262451171875 +-0.134058047831058485543920255623 -0.320685389637947071417301003748 -0.0411008499562740270416583143742 +-0.134058047831058485543920255623 0.320685389637947071417301003748 -0.0411008499562740270416583143742 +-0.134012255072593705618189119377 -0.0299546990543603890155832658593 -0.428536346554756197857471988755 +-0.134012255072593705618189119377 0.0299546990543603890155832658593 -0.428536346554756197857471988755 +-0.133974748849868763311832253748 -0.0542383521795272785515074076557 -0.0401118010282516465614399692186 +-0.133974748849868763311832253748 0.0542383521795272785515074076557 -0.0401118010282516465614399692186 +-0.133966299146413808651701060626 0 -0.636045151948928855212272992503 +-0.133953604102134693487613503748 -0.0483426019549369825889506557814 0.58285439014434814453125 +-0.133953604102134693487613503748 0.0483426019549369825889506557814 0.58285439014434814453125 +-0.133939397335052473581029630623 -0.323357659578323353155582253748 0 +-0.133939397335052473581029630623 0.323357659578323353155582253748 0 +-0.133881296217441575491235994377 -0.8809659183025360107421875 0.126388800144195567742855246252 +-0.133881296217441575491235994377 0.8809659183025360107421875 0.126388800144195567742855246252 +-0.133877697587013233526676003748 -0.0599647521972656236122212192186 -0.0313202999532222747802734375 +-0.133877697587013233526676003748 0.0599647521972656236122212192186 -0.0313202999532222747802734375 +-0.133796000480651849917634876874 -0.123534405231475838404797684689 0.0826914012432098388671875 +-0.133796000480651849917634876874 0.123534405231475838404797684689 0.0826914012432098388671875 +-0.133781254291534423828125 -0.033017098903656005859375 0.0592660501599311800857705634371 +-0.133781254291534423828125 0.033017098903656005859375 0.0592660501599311800857705634371 +-0.133753597736358642578125 -0.0133208006620407111431081403907 -0.148096394538879405633480246252 +-0.133753597736358642578125 0.0133208006620407111431081403907 -0.148096394538879405633480246252 +-0.133749300241470331362947376874 -0.0235374011099338531494140625 0.267501604557037364617855246252 +-0.133749300241470331362947376874 0.0235374011099338531494140625 0.267501604557037364617855246252 +-0.133712254464626312255859375 -0.70555651187896728515625 -0.216358490288257598876953125 +-0.133712254464626312255859375 0.70555651187896728515625 -0.216358490288257598876953125 +-0.13370560109615325927734375 -0.262284395098686229363948996252 -0.189287355542182900158820757497 +-0.13370560109615325927734375 0.262284395098686229363948996252 -0.189287355542182900158820757497 +-0.133692395687103282586605246252 -0.0396672010421752971320863423443 -0.143362605571746820620759876874 +-0.133692395687103282586605246252 0.0396672010421752971320863423443 -0.143362605571746820620759876874 +-0.133651202917099004574552623126 -0.0680980503559112521072549384371 0 +-0.133651202917099004574552623126 0.0680980503559112521072549384371 0 +-0.133647596836090093441740123126 -0.358719992637634321752670985006 -0.116009199619293221217297684689 +-0.133647596836090093441740123126 0.358719992637634321752670985006 -0.116009199619293221217297684689 +-0.133629602193832380807592130623 -0.567718791961669855261618522491 -0.140849402546882634945646373126 +-0.133629602193832380807592130623 0.567718791961669855261618522491 -0.140849402546882634945646373126 +-0.13361249864101409912109375 -0.669693768024444580078125 -0.310092754662036895751953125 +-0.13361249864101409912109375 0.669693768024444580078125 -0.310092754662036895751953125 +-0.133491598069667816162109375 -0.410841438174247730596988503748 0.1260530948638916015625 +-0.133491598069667816162109375 0.410841438174247730596988503748 0.1260530948638916015625 +-0.133459204435348505191072376874 -0.182872551679611194952457253748 0.266920140385627724377570757497 +-0.133459204435348505191072376874 0.182872551679611194952457253748 0.266920140385627724377570757497 +-0.133391201496124267578125 -0.0969135999679565512954226846887 0.782824802398681685033920985006 +-0.133391201496124267578125 0.0969135999679565512954226846887 0.782824802398681685033920985006 +-0.133376848697662336862279630623 -0.0495902985334396376182475307814 0.0474491983652114840408486884371 +-0.133376848697662336862279630623 0.0495902985334396376182475307814 0.0474491983652114840408486884371 +-0.133355200290679931640625 -0.0968869984149932916839276231258 0.113266599178314220086605246252 +-0.133355200290679931640625 0.0968869984149932916839276231258 0.113266599178314220086605246252 +-0.1332570016384124755859375 -0.196410000324249267578125 -0.97142398357391357421875 +-0.1332570016384124755859375 0.196410000324249267578125 -0.97142398357391357421875 +-0.133254745602607721499666126874 -0.0483207017183303819130024692186 -0.0490741521120071425010600307814 +-0.133254745602607721499666126874 0.0483207017183303819130024692186 -0.0490741521120071425010600307814 +-0.133250598609447462594701505623 -0.2894878089427947998046875 -0.144709952175617218017578125 +-0.133250598609447462594701505623 0.2894878089427947998046875 -0.144709952175617218017578125 +-0.133223199844360346011384876874 -0.695776796340942471630341970013 0.371679997444152865337940738755 +-0.133223199844360346011384876874 0.695776796340942471630341970013 0.371679997444152865337940738755 +-0.133200001716613780633480246252 -0.0638440012931823785979901231258 0.371727991104126020971420985006 +-0.133200001716613780633480246252 0.0638440012931823785979901231258 0.371727991104126020971420985006 +-0.13308550417423248291015625 -0.4096024930477142333984375 -0.25399601459503173828125 +-0.13308550417423248291015625 0.4096024930477142333984375 -0.25399601459503173828125 +-0.133084050565958039724634431877 -0.409597662091255199090511496252 -0.342079105973243757787827235006 +-0.133084050565958039724634431877 0.409597662091255199090511496252 -0.342079105973243757787827235006 +-0.133033803105354314633146373126 -0.0258794993162155158306081403907 -0.064282648265361785888671875 +-0.133033803105354314633146373126 0.0258794993162155158306081403907 -0.064282648265361785888671875 +-0.133014446496963506527677623126 -0.067045949399471282958984375 0.0176636997610330574726145158593 +-0.133014446496963506527677623126 0.067045949399471282958984375 0.0176636997610330574726145158593 +-0.132979345321655256784154630623 -0.237617442011833185366853626874 0.219896242022514315506143134371 +-0.132979345321655256784154630623 0.237617442011833185366853626874 0.219896242022514315506143134371 +-0.1329697482287883758544921875 -0.83953480422496795654296875 0 +-0.1329697482287883758544921875 0.83953480422496795654296875 0 +-0.13276259601116180419921875 -0.145870202779769891909822376874 0.226044005155563332287727007497 +-0.13276259601116180419921875 0.145870202779769891909822376874 0.226044005155563332287727007497 +-0.1327465474605560302734375 -0.0665930986404418973068075615629 -0.0210646502673625946044921875 +-0.1327465474605560302734375 0.0665930986404418973068075615629 -0.0210646502673625946044921875 +-0.1326974928379058837890625 -0.19309200346469879150390625 -0.4417090117931365966796875 +-0.1326974928379058837890625 0.19309200346469879150390625 -0.4417090117931365966796875 +-0.13268150389194488525390625 -0.1834371089935302734375 -0.266920140385627724377570757497 +-0.13268150389194488525390625 0.1834371089935302734375 -0.266920140385627724377570757497 +-0.132645598053932195492521373126 -0.0963714033365249550522335653113 0.577163386344909601355368522491 +-0.132645598053932195492521373126 0.0963714033365249550522335653113 0.577163386344909601355368522491 +-0.1325969994068145751953125 -0.473910987377166748046875 -0.08846700191497802734375 +-0.1325969994068145751953125 0.473910987377166748046875 -0.08846700191497802734375 +-0.132565402984619135073884876874 -0.145591402053833002261384876874 0.0350645989179611192176899692186 +-0.132565402984619135073884876874 0.145591402053833002261384876874 0.0350645989179611192176899692186 +-0.13254225254058837890625 -0.083534248173236846923828125 -0.19481925666332244873046875 +-0.13254225254058837890625 0.083534248173236846923828125 -0.19481925666332244873046875 +-0.13254059851169586181640625 -0.194221794605255126953125 0.186308401823043812139957253748 +-0.13254059851169586181640625 0.194221794605255126953125 0.186308401823043812139957253748 +-0.132511201500892628057926003748 -0.0469296008348464924186949076557 0.2650254070758819580078125 +-0.132511201500892628057926003748 0.0469296008348464924186949076557 0.2650254070758819580078125 +-0.132502500712871562615902121252 -0.128950250148773204461605246252 -0.623149150609970114977897992503 +-0.132502500712871562615902121252 0.128950250148773204461605246252 -0.623149150609970114977897992503 +-0.132467097043991094418302623126 -0.00618720017373561824436389855464 0.0701011508703231756012286268742 +-0.132467097043991094418302623126 0.00618720017373561824436389855464 0.0701011508703231756012286268742 +-0.132466055452823638916015625 -0.11886705458164215087890625 -0.41330789029598236083984375 +-0.132466055452823638916015625 0.11886705458164215087890625 -0.41330789029598236083984375 +-0.132409501075744617804019753748 -0.00986354984343051910400390625 -0.0697884008288383456131143134371 +-0.132409501075744617804019753748 0.00986354984343051910400390625 -0.0697884008288383456131143134371 +-0.1323384940624237060546875 -0.19569574296474456787109375 0.081790499389171600341796875 +-0.1323384940624237060546875 0.19569574296474456787109375 0.081790499389171600341796875 +-0.13206849992275238037109375 -0.14278425276279449462890625 -0.15706874430179595947265625 +-0.13206849992275238037109375 0.14278425276279449462890625 -0.15706874430179595947265625 +-0.132033896446228010690404630623 -0.2232592999935150146484375 -0.8094584047794342041015625 +-0.132033896446228010690404630623 0.2232592999935150146484375 -0.8094584047794342041015625 +-0.13199450075626373291015625 -0.3394854962825775146484375 0.3425304889678955078125 +-0.13199450075626373291015625 0.3394854962825775146484375 0.3425304889678955078125 +-0.131971450150012964419588001874 -0.5791519582271575927734375 0.263943558931350741314503238755 +-0.131971450150012964419588001874 0.5791519582271575927734375 0.263943558931350741314503238755 +-0.131887802481651300601228626874 -0.231550794839858992135717130623 0.137803503870964044741853626874 +-0.131887802481651300601228626874 0.231550794839858992135717130623 0.137803503870964044741853626874 +-0.13187800347805023193359375 -0.6696059703826904296875 0.73091399669647216796875 +-0.13187800347805023193359375 0.6696059703826904296875 0.73091399669647216796875 +-0.13186244666576385498046875 -0.0420475512742996201942524692186 -0.0578297987580299321930255018742 +-0.13186244666576385498046875 0.0420475512742996201942524692186 -0.0578297987580299321930255018742 +-0.131852702796459192446931751874 -0.095795698463916778564453125 0.309738793969154324603465511245 +-0.131852702796459192446931751874 0.095795698463916778564453125 0.309738793969154324603465511245 +-0.131852400302886973992855246252 -0.0794687986373901478209802462516 0.127670001983642589227230246252 +-0.131852400302886973992855246252 0.0794687986373901478209802462516 0.127670001983642589227230246252 +-0.131792253255844121762052623126 -0.01655744947493076324462890625 0.0696897000074386541168536268742 +-0.131792253255844121762052623126 0.01655744947493076324462890625 0.0696897000074386541168536268742 +-0.131772197782993316650390625 -0.280524653196334794458266514994 0.162609998881816847360326505623 +-0.131772197782993316650390625 0.280524653196334794458266514994 0.162609998881816847360326505623 +-0.131766796112060546875 -0.132176196575164800472990123126 0.0718815982341766412933026231258 +-0.131766796112060546875 0.132176196575164800472990123126 0.0718815982341766412933026231258 +-0.1317517496645450592041015625 -0.40548299252986907958984375 0.617029488086700439453125 +-0.1317517496645450592041015625 0.40548299252986907958984375 0.617029488086700439453125 +-0.1316872537136077880859375 -0.243645004928112030029296875 -0.6969899833202362060546875 +-0.1316872537136077880859375 0.243645004928112030029296875 -0.6969899833202362060546875 +-0.131637203693389909231470369377 -0.351736807823181174548210492503 0.137669599056243902035490123126 +-0.131637203693389909231470369377 0.351736807823181174548210492503 0.137669599056243902035490123126 +-0.131591598689556110723941628748 -0.313740345835685718878238503748 -0.0821621514856815254868038778113 +-0.131591598689556110723941628748 0.313740345835685718878238503748 -0.0821621514856815254868038778113 +-0.131475198268890397512720369377 -0.0464902013540267958213725307814 0.14336299896240234375 +-0.131475198268890397512720369377 0.0464902013540267958213725307814 0.14336299896240234375 +-0.131444996595382695980802623126 -0.237050396203994734323217130623 -0.128566199541091913394197376874 +-0.131444996595382695980802623126 0.237050396203994734323217130623 -0.128566199541091913394197376874 +-0.131434500217437744140625 -0.4045059978961944580078125 0.26286900043487548828125 +-0.131434500217437744140625 0.4045059978961944580078125 0.26286900043487548828125 +-0.1314325034618377685546875 0 -0.212662994861602783203125 +-0.1314119994640350341796875 -0.83080899715423583984375 -0.540821015834808349609375 +-0.1314119994640350341796875 0.83080899715423583984375 -0.540821015834808349609375 +-0.131394150853157032354801003748 -0.0434887513518333393425230326557 0.0578299507498741122146768134371 +-0.131394150853157032354801003748 0.0434887513518333393425230326557 0.0578299507498741122146768134371 +-0.131370198726654063836605246252 -0.0651055991649627657791299384371 -0.136026203632354736328125 +-0.131370198726654063836605246252 0.0651055991649627657791299384371 -0.136026203632354736328125 +-0.131352099031209951229826060626 -0.404252761602401755602897992503 0.349036055803298994604233485006 +-0.131352099031209951229826060626 0.404252761602401755602897992503 0.349036055803298994604233485006 +-0.131289051473140711001619251874 -0.90350224077701568603515625 0.262577140331268277240184261245 +-0.131289051473140711001619251874 0.90350224077701568603515625 0.262577140331268277240184261245 +-0.131287154555320723092748380623 -0.404053036868572190698500889994 0.84970848262310028076171875 +-0.131287154555320723092748380623 0.404053036868572190698500889994 0.84970848262310028076171875 +-0.131262004375457763671875 -0.470808506011962890625 0.105402000248432159423828125 +-0.131262004375457763671875 0.470808506011962890625 0.105402000248432159423828125 +-0.13125850260257720947265625 -0.19752775132656097412109375 -0.07908199727535247802734375 +-0.13125850260257720947265625 0.19752775132656097412109375 -0.07908199727535247802734375 +-0.131201195716857926809595369377 -0.145059597492218028680355246252 -0.04176039993762969970703125 +-0.131201195716857926809595369377 0.145059597492218028680355246252 -0.04176039993762969970703125 +-0.131198799610137945004240123126 -0.314283990859985373766960492503 0.209791994094848638363615123126 +-0.131198799610137945004240123126 0.314283990859985373766960492503 0.209791994094848638363615123126 +-0.13118399679660797119140625 -0.13627575337886810302734375 0.163461506366729736328125 +-0.13118399679660797119140625 0.13627575337886810302734375 0.163461506366729736328125 +-0.131171300262212769949243806877 -0.148782404512166982479826060626 0.6189976036548614501953125 +-0.131171300262212769949243806877 0.148782404512166982479826060626 0.6189976036548614501953125 +-0.1311464011669158935546875 -0.553116214275360063012954014994 -0.408488488197326637951789507497 +-0.1311464011669158935546875 0.553116214275360063012954014994 -0.408488488197326637951789507497 +-0.131062495708465565069644753748 -0.212689805030822742804019753748 -0.166089302301406865902677623126 +-0.131062495708465565069644753748 0.212689805030822742804019753748 -0.166089302301406865902677623126 +-0.131057104468345647640958873126 -0.168686096370220195428402121252 0.874281585216522216796875 +-0.131057104468345647640958873126 0.168686096370220195428402121252 0.874281585216522216796875 +-0.131054399907588964291349498126 0 -0.940917047858238153601462272491 +-0.13098774850368499755859375 -0.21004424989223480224609375 0.0349802486598491668701171875 +-0.13098774850368499755859375 0.21004424989223480224609375 0.0349802486598491668701171875 +-0.130889403820037830694644753748 -0.561077392101287819592414507497 0.167511606216430658511384876874 +-0.130889403820037830694644753748 0.561077392101287819592414507497 0.167511606216430658511384876874 +-0.13087250292301177978515625 -0.21097774803638458251953125 -0.0293374992907047271728515625 +-0.13087250292301177978515625 0.21097774803638458251953125 -0.0293374992907047271728515625 +-0.130862596631050098761051003748 -0.516351202130317710192741742503 0.662387144565582230981704014994 +-0.130862596631050098761051003748 0.516351202130317710192741742503 0.662387144565582230981704014994 +-0.130778002738952653372095369377 -0.194080805778503423519865123126 0.324391198158264171258480246252 +-0.130778002738952653372095369377 0.194080805778503423519865123126 0.324391198158264171258480246252 +-0.130776304006576526983707253748 -0.0729355484247207613845986884371 0.00882885027676820650921474253892 +-0.130776304006576526983707253748 0.0729355484247207613845986884371 0.00882885027676820650921474253892 +-0.13073609769344329833984375 -0.0727807492017745888412960653113 -0.01053749956190586090087890625 +-0.13073609769344329833984375 0.0727807492017745888412960653113 -0.01053749956190586090087890625 +-0.130714201927185053042634876874 -0.0796548038721084511459835653113 -0.258009606599807705951121761245 +-0.130714201927185053042634876874 0.0796548038721084511459835653113 -0.258009606599807705951121761245 +-0.130699793994426743948267244377 -0.34217999875545501708984375 0.261400499939918540270866742503 +-0.130699793994426743948267244377 0.34217999875545501708984375 0.261400499939918540270866742503 +-0.130654296278953557797208873126 -0.676650083065032936779914507497 -0.122775100171565995643696567186 +-0.130654296278953557797208873126 0.676650083065032936779914507497 -0.122775100171565995643696567186 +-0.1306304968893527984619140625 -0.5623357594013214111328125 -0.47876326739788055419921875 +-0.1306304968893527984619140625 0.5623357594013214111328125 -0.47876326739788055419921875 +-0.13062475621700286865234375 -0.21315999329090118408203125 0 +-0.13062475621700286865234375 0.21315999329090118408203125 0 +-0.130610549449920648745759876874 -0.309665298461914040295539507497 0.0977151036262512151520098768742 +-0.130610549449920648745759876874 0.309665298461914040295539507497 0.0977151036262512151520098768742 +-0.130569747090339666195646373126 -0.0650824517011642372787960653113 0.0348683997988700825065855326557 +-0.130569747090339666195646373126 0.0650824517011642372787960653113 0.0348683997988700825065855326557 +-0.130556698143482224905298494377 -0.401816689968109153063835492503 -0.1549133956432342529296875 +-0.130556698143482224905298494377 0.401816689968109153063835492503 -0.1549133956432342529296875 +-0.130527603626251237356470369377 -0.0948328018188476645766726846887 0.366018009185791026727230246252 +-0.130527603626251237356470369377 0.0948328018188476645766726846887 0.366018009185791026727230246252 +-0.13048709928989410400390625 -0.0269389495253562934184987653907 0.0689015999436378423492755018742 +-0.13048709928989410400390625 0.0269389495253562934184987653907 0.0689015999436378423492755018742 +-0.130456200242042547055021373126 -0.070032298564910888671875 0.260915100574493408203125 +-0.130456200242042547055021373126 0.070032298564910888671875 0.260915100574493408203125 +-0.130368594825267802850277121252 -0.722709900140762306897102007497 0.520283693075180075915397992503 +-0.130368594825267802850277121252 0.722709900140762306897102007497 0.520283693075180075915397992503 +-0.130273997783660888671875 -0.228454399108886735403345369377 -0.301392388343811046258480246252 +-0.130273997783660888671875 0.228454399108886735403345369377 -0.301392388343811046258480246252 +-0.13025550544261932373046875 -0.033380500972270965576171875 -0.210758745670318603515625 +-0.13025550544261932373046875 0.033380500972270965576171875 -0.210758745670318603515625 +-0.130090503394603734799161998126 -0.829726177453994795385483485006 -0.323467192053794871942073996252 +-0.130090503394603734799161998126 0.829726177453994795385483485006 -0.323467192053794871942073996252 +-0.130021351575851429327457253748 -0.0196800000965595238422434221093 -0.0721605017781257601638955634371 +-0.130021351575851429327457253748 0.0196800000965595238422434221093 -0.0721605017781257601638955634371 +-0.129964804649353032894865123126 -0.399995994567871104852230246252 -0.680523204803466841283920985006 +-0.129964804649353032894865123126 0.399995994567871104852230246252 -0.680523204803466841283920985006 +-0.129950153082609182186857310626 -0.2811605632305145263671875 -0.454490846395492587017628238755 +-0.129950153082609182186857310626 0.2811605632305145263671875 -0.454490846395492587017628238755 +-0.12989079952239990234375 -0.314572000503540061266960492503 -0.210173201560974132195980246252 +-0.12989079952239990234375 0.314572000503540061266960492503 -0.210173201560974132195980246252 +-0.129889798164367686883480246252 -0.152081000804901139700220369377 0 +-0.129889798164367686883480246252 0.152081000804901139700220369377 0 +-0.129868198931217176950170255623 -0.493125480413436845239516514994 0.479542684555053666528579014994 +-0.129868198931217176950170255623 0.493125480413436845239516514994 0.479542684555053666528579014994 +-0.129867902398109441586271373126 -0.0596017509698867770095986884371 0.0456286489963531466385049384371 +-0.129867902398109441586271373126 0.0596017509698867770095986884371 0.0456286489963531466385049384371 +-0.129817503690719593389957253748 -0.0355840489268302931358256557814 -0.0661904990673065213302450615629 +-0.129817503690719593389957253748 0.0355840489268302931358256557814 -0.0661904990673065213302450615629 +-0.12969709932804107666015625 -0.537619557976722783898537727509 -0.341531452536582957879573996252 +-0.12969709932804107666015625 0.537619557976722783898537727509 -0.341531452536582957879573996252 +-0.129595501720905309506193248126 -0.204416097700595850161775501874 -0.379366654157638538702457253748 +-0.129595501720905309506193248126 0.204416097700595850161775501874 -0.379366654157638538702457253748 +-0.129518795013427751028345369377 -0.110370600223541268092297684689 0.105086600780487066097990123126 +-0.129518795013427751028345369377 0.110370600223541268092297684689 0.105086600780487066097990123126 +-0.129502804577350610903963001874 -0.398575803637504610943409488755 -0.796471184492111183850227007497 +-0.129502804577350610903963001874 0.398575803637504610943409488755 -0.796471184492111183850227007497 +-0.129337604343891132696597878748 -0.248947307467460604568643134371 -0.20927725732326507568359375 +-0.129337604343891132696597878748 0.248947307467460604568643134371 -0.20927725732326507568359375 +-0.129294906556606303826839621252 -0.865744221210479780737045985006 -0.209210398793220536672876619377 +-0.129294906556606303826839621252 0.865744221210479780737045985006 -0.209210398793220536672876619377 +-0.129270601272582996710269753748 -0.0637982994318008339584835653113 -0.0414594009518623324295205634371 +-0.129270601272582996710269753748 0.0637982994318008339584835653113 -0.0414594009518623324295205634371 +-0.129248401522636419125333873126 -0.071433149278163909912109375 0.0263089500367641448974609375 +-0.129248401522636419125333873126 0.071433149278163909912109375 0.0263089500367641448974609375 +-0.1292046010494232177734375 0 -0.0761980533599853487869424384371 +-0.129186403751373302117855246252 -0.121147799491882326994307561563 -0.0929198026657104547698651231258 +-0.129186403751373302117855246252 0.121147799491882326994307561563 -0.0929198026657104547698651231258 +-0.129180395603179926089509876874 -0.110947394371032723170422684689 -0.104895603656768809930355246252 +-0.129180395603179926089509876874 0.110947394371032723170422684689 -0.104895603656768809930355246252 +-0.129157006740570068359375 -0.84390699863433837890625 0.520711004734039306640625 +-0.129157006740570068359375 0.84390699863433837890625 0.520711004734039306640625 +-0.129105006158351909295589621252 -0.278655740618705738409488503748 0.328911298513412497790397992503 +-0.129105006158351909295589621252 0.278655740618705738409488503748 0.328911298513412497790397992503 +-0.129089200496673578433259876874 -0.140123796463012706414730246252 0.0608381986618042047698651231258 +-0.129089200496673578433259876874 0.140123796463012706414730246252 0.0608381986618042047698651231258 +-0.1290484964847564697265625 -0.09375800192356109619140625 0.19249899685382843017578125 +-0.1290484964847564697265625 0.09375800192356109619140625 0.19249899685382843017578125 +-0.129003596305847151315404630623 -0.139263001084327681100560880623 -0.232301402091979969366519753748 +-0.129003596305847151315404630623 0.139263001084327681100560880623 -0.232301402091979969366519753748 +-0.128980806469917302914396373126 -0.590953516960144087377670985006 -0.666436511278152510229233485006 +-0.128980806469917302914396373126 0.590953516960144087377670985006 -0.666436511278152510229233485006 +-0.128843998908996587582365123126 -0.343938803672790560650440738755 -0.158446800708770763055355246252 +-0.128843998908996587582365123126 0.343938803672790560650440738755 -0.158446800708770763055355246252 +-0.128784602880477910824552623126 -0.058009050786495208740234375 -0.0504921019077301039268412807814 +-0.128784602880477910824552623126 0.058009050786495208740234375 -0.0504921019077301039268412807814 +-0.128766605257987970523103626874 -0.778434294462204023901108485006 -0.43296660482883453369140625 +-0.128766605257987970523103626874 0.778434294462204023901108485006 -0.43296660482883453369140625 +-0.128765594959259044305355246252 -0.0266510009765625020816681711722 -0.150695395469665538445980246252 +-0.128765594959259044305355246252 0.0266510009765625020816681711722 -0.150695395469665538445980246252 +-0.1287522017955780029296875 -0.266676002740859952044871761245 -0.52183020114898681640625 +-0.1287522017955780029296875 0.266676002740859952044871761245 -0.52183020114898681640625 +-0.12867414951324462890625 -0.184077306091785436459318248126 0.502054300904274053429787727509 +-0.12867414951324462890625 0.184077306091785436459318248126 0.502054300904274053429787727509 +-0.128590652346611017398103626874 -0.0370982989668846088737730326557 0.0677360996603965787032919365629 +-0.128590652346611017398103626874 0.0370982989668846088737730326557 0.0677360996603965787032919365629 +-0.128562453389167774542301003748 -0.0706371009349822942535723768742 -0.0313384495675563812255859375 +-0.128562453389167774542301003748 0.0706371009349822942535723768742 -0.0313384495675563812255859375 +-0.128519596159458182604851117503 -0.468949788808822654040397992503 0.257038651406765017437550113755 +-0.128519596159458182604851117503 0.468949788808822654040397992503 0.257038651406765017437550113755 +-0.128413754701614368780582253748 -0.834260535240173295434829014994 -0.100094298645853993501297907187 +-0.128413754701614368780582253748 0.834260535240173295434829014994 -0.100094298645853993501297907187 +-0.128411105275154119320646373126 -0.298277091979980479852230246252 -0.311514759063720725329460492503 +-0.128411105275154119320646373126 0.298277091979980479852230246252 -0.311514759063720725329460492503 +-0.12840600311756134033203125 -0.460959494113922119140625 -0.14501149952411651611328125 +-0.12840600311756134033203125 0.460959494113922119140625 -0.14501149952411651611328125 +-0.128395301103591930047542746252 -0.534803515672683804638154470013 0 +-0.128395301103591930047542746252 0.534803515672683804638154470013 0 +-0.1283724009990692138671875 -0.167283904552459727899105246252 0.39753811061382293701171875 +-0.1283724009990692138671875 0.167283904552459727899105246252 0.39753811061382293701171875 +-0.1283579953014850616455078125 -0.692907750606536865234375 0.25671525299549102783203125 +-0.1283579953014850616455078125 0.692907750606536865234375 0.25671525299549102783203125 +-0.128327202796936046258480246252 -0.0531163990497589139083700615629 -0.375114393234252940789730246252 +-0.128327202796936046258480246252 0.0531163990497589139083700615629 -0.375114393234252940789730246252 +-0.128326201438903803042634876874 -0.130699002742767328433259876874 -0.0803129971027374267578125 +-0.128326201438903803042634876874 0.130699002742767328433259876874 -0.0803129971027374267578125 +-0.128321403264999384097322376874 -0.0537336006760597215126118442186 0.0560920491814613300651792826557 +-0.128321403264999384097322376874 0.0537336006760597215126118442186 0.0560920491814613300651792826557 +-0.128231701254844648873998380623 -0.020012699067592620849609375 -0.270473706722259510382144753748 +-0.128231701254844648873998380623 0.020012699067592620849609375 -0.270473706722259510382144753748 +-0.12822909653186798095703125 -0.860537561774253778601462272491 0.381487698853015866351512386245 +-0.12822909653186798095703125 0.860537561774253778601462272491 0.381487698853015866351512386245 +-0.128205597400665283203125 -0.289268803596496593133480246252 0.7347695827484130859375 +-0.128205597400665283203125 0.289268803596496593133480246252 0.7347695827484130859375 +-0.128201146423816664254857755623 -0.302725157141685463635383257497 -0.120091304183006272743305942186 +-0.128201146423816664254857755623 0.302725157141685463635383257497 -0.120091304183006272743305942186 +-0.12818825244903564453125 -0.17344374954700469970703125 0.12643174827098846435546875 +-0.12818825244903564453125 0.17344374954700469970703125 0.12643174827098846435546875 +-0.128168201446533208676115123126 -0.151730203628540061266960492503 0.02346999943256378173828125 +-0.128168201446533208676115123126 0.151730203628540061266960492503 0.02346999943256378173828125 +-0.128157248347997659854158314374 -0.394433650374412525518863503748 -0.500498050451278708727897992503 +-0.128157248347997659854158314374 0.394433650374412525518863503748 -0.500498050451278708727897992503 +-0.12814350426197052001953125 -0.131026744842529296875 -0.1700332462787628173828125 +-0.12814350426197052001953125 0.131026744842529296875 -0.1700332462787628173828125 +-0.128112804889678966180355246252 -0.0602508008480072063117738423443 0.141269004344940191097990123126 +-0.128112804889678966180355246252 0.0602508008480072063117738423443 0.141269004344940191097990123126 +-0.128111900389194482974275501874 -0.67245781421661376953125 0.146246097981929779052734375 +-0.128111900389194482974275501874 0.67245781421661376953125 0.146246097981929779052734375 +-0.127975201606750493832365123126 -0.0527903974056243910362162807814 -0.7879312038421630859375 +-0.127975201606750493832365123126 0.0527903974056243910362162807814 -0.7879312038421630859375 +-0.127896299958229070492521373126 -0.0783743977546691866775674384371 0 +-0.127896299958229070492521373126 0.0783743977546691866775674384371 0 +-0.127886402606964100225894753748 -0.39360058307647705078125 -0.434423410892486538958934261245 +-0.127886402606964100225894753748 0.39360058307647705078125 -0.434423410892486538958934261245 +-0.1278838030993938446044921875 -0.320070308446884166375667746252 0.428603446483612093853565738755 +-0.1278838030993938446044921875 0.320070308446884166375667746252 0.428603446483612093853565738755 +-0.127837598323822021484375 -0.6063439846038818359375 0.5059688091278076171875 +-0.127837598323822021484375 0.6063439846038818359375 0.5059688091278076171875 +-0.127713950723409658261076060626 -0.5384872853755950927734375 0.340911990404129061627003238755 +-0.127713950723409658261076060626 0.5384872853755950927734375 0.340911990404129061627003238755 +-0.127682752907276153564453125 -0.306092147529125224725277121252 0.559021434187889076916633257497 +-0.127682752907276153564453125 0.306092147529125224725277121252 0.559021434187889076916633257497 +-0.127643403410911543405248380623 -0.2002497017383575439453125 -0.183322799205780012643529630623 +-0.127643403410911543405248380623 0.2002497017383575439453125 -0.183322799205780012643529630623 +-0.127638995647430419921875 -0.0525727987289428752570863423443 -0.144721794128417985403345369377 +-0.127638995647430419921875 0.0525727987289428752570863423443 -0.144721794128417985403345369377 +-0.127638602256774896792634876874 -0.0519226491451263427734375 -0.0592658981680870000641192518742 +-0.127638602256774896792634876874 0.0519226491451263427734375 -0.0592658981680870000641192518742 +-0.127610397338867198602230246252 0 -0.153998601436615006887720369377 +-0.12759719789028167724609375 0 0.0788603961467742864410723768742 +-0.127596902847290027960269753748 -0.0927033036947250282944210653113 0.255196201801300037725894753748 +-0.127596902847290027960269753748 0.0927033036947250282944210653113 0.255196201801300037725894753748 +-0.1275122463703155517578125 -0.2043802440166473388671875 0.066853247582912445068359375 +-0.1275122463703155517578125 0.2043802440166473388671875 0.066853247582912445068359375 +-0.127483499050140364206029630623 -0.249243307113647449835269753748 -0.107822397351264948062166126874 +-0.127483499050140364206029630623 0.249243307113647449835269753748 -0.107822397351264948062166126874 +-0.12743340432643890380859375 -0.23985779285430908203125 0.535003817081451393811164507497 +-0.12743340432643890380859375 0.23985779285430908203125 0.535003817081451393811164507497 +-0.127429401874542241879240123126 -0.151586997509002702200220369377 -0.0279841989278793341899831403907 +-0.127429401874542241879240123126 0.151586997509002702200220369377 -0.0279841989278793341899831403907 +-0.1273514926433563232421875 -0.13368849456310272216796875 0.464659988880157470703125 +-0.1273514926433563232421875 0.13368849456310272216796875 0.464659988880157470703125 +-0.127340495586395263671875 -0.3919200003147125244140625 -0.2831664979457855224609375 +-0.127340495586395263671875 0.3919200003147125244140625 -0.2831664979457855224609375 +-0.127291801571845997198551003748 -0.0103710003197193135343612269139 0.0786717027425765935699786268742 +-0.127291801571845997198551003748 0.0103710003197193135343612269139 0.0786717027425765935699786268742 +-0.127265703678131086862279630623 -0.166009801626205433233707253748 0.215044802427291875668302623126 +-0.127265703678131086862279630623 0.166009801626205433233707253748 0.215044802427291875668302623126 +-0.127264353632926929815738503748 -0.0774176985025405856033486884371 0.0176146499812602982948384067186 +-0.127264353632926929815738503748 0.0774176985025405856033486884371 0.0176146499812602982948384067186 +-0.127243199944496149234041126874 -0.00987254977226257289524280480464 -0.0788143515586852971832598768742 +-0.127243199944496149234041126874 0.00987254977226257289524280480464 -0.0788143515586852971832598768742 +-0.127231201529502874203458873126 -0.549025797843933127673210492503 -0.205870807170867919921875 +-0.127231201529502874203458873126 0.549025797843933127673210492503 -0.205870807170867919921875 +-0.127198755741119384765625 -0.20629374682903289794921875 -0.0613467507064342498779296875 +-0.127198755741119384765625 0.20629374682903289794921875 -0.0613467507064342498779296875 +-0.127191603183746337890625 -0.471535813808441117700454014994 0.348533999919891368524105246252 +-0.127191603183746337890625 0.471535813808441117700454014994 0.348533999919891368524105246252 +-0.1271417438983917236328125 -0.010324499569833278656005859375 0.21500800549983978271484375 +-0.1271417438983917236328125 0.010324499569833278656005859375 0.21500800549983978271484375 +-0.127127346396446211373998380623 -0.0233114011585712418983540317186 -0.325261658430099465100227007497 +-0.127127346396446211373998380623 0.0233114011585712418983540317186 -0.325261658430099465100227007497 +-0.1270925514400005340576171875 -0.250836291909217856677116742503 -0.586027643084526039807258257497 +-0.1270925514400005340576171875 0.250836291909217856677116742503 -0.586027643084526039807258257497 +-0.127046497166156763247713001874 -0.207200002670288069284154630623 0.6564508974552154541015625 +-0.127046497166156763247713001874 0.207200002670288069284154630623 0.6564508974552154541015625 +-0.127011001110076904296875 -0.0294021002948284121414346259371 -0.074187152087688446044921875 +-0.127011001110076904296875 0.0294021002948284121414346259371 -0.074187152087688446044921875 +-0.126998850703239435366853626874 -0.0770059525966644287109375 -0.02100884914398193359375 +-0.126998850703239435366853626874 0.0770059525966644287109375 -0.02100884914398193359375 +-0.126993155479431157894865123126 -0.390838944911956809313835492503 0.183351154625415818655298494377 +-0.126993155479431157894865123126 0.390838944911956809313835492503 0.183351154625415818655298494377 +-0.126991999149322520867855246252 -0.563182401657104536596420985006 -0.553804016113281227795539507497 +-0.126991999149322520867855246252 0.563182401657104536596420985006 -0.553804016113281227795539507497 +-0.126972001791000349557592130623 -0.243649792671203596627904630623 0.12046949565410614013671875 +-0.126972001791000349557592130623 0.243649792671203596627904630623 0.12046949565410614013671875 +-0.126844900846481312139957253748 -0.09215779602527618408203125 -0.682215088605880648486845529987 +-0.126844900846481312139957253748 0.09215779602527618408203125 -0.682215088605880648486845529987 +-0.126779496669769287109375 -0.2822540104389190673828125 -0.3927589952945709228515625 +-0.126779496669769287109375 0.2822540104389190673828125 -0.3927589952945709228515625 +-0.126700198650360112972990123126 -0.0920520007610321072677450615629 0.124392402172088634149105246252 +-0.126700198650360112972990123126 0.0920520007610321072677450615629 0.124392402172088634149105246252 +-0.126687204837799077816740123126 -0.102240395545959483758480246252 -0.1161777973175048828125 +-0.126687204837799077816740123126 0.102240395545959483758480246252 -0.1161777973175048828125 +-0.126686699688434600830078125 -0.0183042006567120559001882185157 0.431410950422286998406917746252 +-0.126686699688434600830078125 0.0183042006567120559001882185157 0.431410950422286998406917746252 +-0.1266829967498779296875 -0.2566845118999481201171875 0.409956514835357666015625 +-0.1266829967498779296875 0.2566845118999481201171875 0.409956514835357666015625 +-0.1266822516918182373046875 -0.066600501537322998046875 -0.20497800409793853759765625 +-0.1266822516918182373046875 0.066600501537322998046875 -0.20497800409793853759765625 +-0.12667000293731689453125 -0.6057369709014892578125 -0.785517990589141845703125 +-0.12667000293731689453125 0.6057369709014892578125 -0.785517990589141845703125 +-0.126631048321723921334935880623 -0.20572264492511749267578125 0.25326420366764068603515625 +-0.126631048321723921334935880623 0.20572264492511749267578125 0.25326420366764068603515625 +-0.126629994809627527407869251874 -0.0920020535588264437576455634371 -0.313050159811973538470653011245 +-0.126629994809627527407869251874 0.0920020535588264437576455634371 -0.313050159811973538470653011245 +-0.126622605323791520559595369377 -0.139407002925872797183259876874 -0.0673229992389678955078125 +-0.126622605323791520559595369377 0.139407002925872797183259876874 -0.0673229992389678955078125 +-0.126594151556491840704410378748 -0.186589500308036781994758257497 -0.9228527843952178955078125 +-0.126594151556491840704410378748 0.186589500308036781994758257497 -0.9228527843952178955078125 +-0.126491594314575211965845369377 -0.282840394973754905016960492503 0.25298440456390380859375 +-0.126491594314575211965845369377 0.282840394973754905016960492503 0.25298440456390380859375 +-0.126443446427583677804662443123 -0.83202336728572845458984375 0.119367200136184695158370061563 +-0.126443446427583677804662443123 0.83202336728572845458984375 0.119367200136184695158370061563 +-0.12642799317836761474609375 -0.0299382507801055908203125 0.21358774602413177490234375 +-0.12642799317836761474609375 0.0299382507801055908203125 0.21358774602413177490234375 +-0.126377248764038080386384876874 -0.0206925004720687859272043596093 0.0781063467264175442794638115629 +-0.126377248764038080386384876874 0.0206925004720687859272043596093 0.0781063467264175442794638115629 +-0.126168702542781813180639005623 -0.388314503431320179327457253748 -0.568588280677795321338408029987 +-0.126168702542781813180639005623 0.388314503431320179327457253748 -0.568588280677795321338408029987 +-0.1261529959738254547119140625 -0.030480748973786830902099609375 0.73868550360202789306640625 +-0.1261529959738254547119140625 0.030480748973786830902099609375 0.73868550360202789306640625 +-0.126148748397827137335269753748 -0.1613073050975799560546875 -0.283842298388481129034488503748 +-0.126148748397827137335269753748 0.1613073050975799560546875 -0.283842298388481129034488503748 +-0.12614040076732635498046875 -0.515907597541809037622329014994 -0.2791559994220733642578125 +-0.12614040076732635498046875 0.515907597541809037622329014994 -0.2791559994220733642578125 +-0.126052799820899952276676003748 -0.387943196296691883429019753748 0.440012383460998524054019753748 +-0.126052799820899952276676003748 0.387943196296691883429019753748 0.440012383460998524054019753748 +-0.126024743914604192562833873126 -0.0545354984700679792930522182814 0.4285368025302886962890625 +-0.126024743914604192562833873126 0.0545354984700679792930522182814 0.4285368025302886962890625 +-0.125975704193115239926115123126 -0.271451693773269664422542746252 0.0210749991238117218017578125 +-0.125975704193115239926115123126 0.271451693773269664422542746252 0.0210749991238117218017578125 +-0.125941050052642805612279630623 -0.0690391480922698946853799384371 0.043271698057651519775390625 +-0.125941050052642805612279630623 0.0690391480922698946853799384371 0.043271698057651519775390625 +-0.125940603017806990182592130623 -0.0475159496068954453895649692186 0.0661906510591506874741085653113 +-0.125940603017806990182592130623 0.0475159496068954453895649692186 0.0661906510591506874741085653113 +-0.125858697295188892706363503748 -0.271749597787857066766292746252 -0.0176577005535364130184294850778 +-0.125858697295188892706363503748 0.271749597787857066766292746252 -0.0176577005535364130184294850778 +-0.125838151574134832211271373126 -0.0455698505043983445594868442186 -0.0677359521389007540603799384371 +-0.125838151574134832211271373126 0.0455698505043983445594868442186 -0.0677359521389007540603799384371 +-0.12583799660205841064453125 -0.15273000299930572509765625 0.1527689993381500244140625 +-0.12583799660205841064453125 0.15273000299930572509765625 0.1527689993381500244140625 +-0.1258344948291778564453125 -0.066284000873565673828125 -0.479345500469207763671875 +-0.1258344948291778564453125 0.066284000873565673828125 -0.479345500469207763671875 +-0.125827205181121837274105246252 -0.130210804939270036184595369377 -0.356668806076049837994190738755 +-0.125827205181121837274105246252 0.130210804939270036184595369377 -0.356668806076049837994190738755 +-0.125813804566860198974609375 -0.294060906767845131604133257497 0.142123454809188837222322376874 +-0.125813804566860198974609375 0.294060906767845131604133257497 0.142123454809188837222322376874 +-0.125774548947811148913444867503 -0.531516146659851140832131477509 -0.0645870499312877766051599337516 +-0.125774548947811148913444867503 0.531516146659851140832131477509 -0.0645870499312877766051599337516 +-0.12568299472332000732421875 -0.255176007747650146484375 0.95869100093841552734375 +-0.12568299472332000732421875 0.255176007747650146484375 0.95869100093841552734375 +-0.125512599945068359375 -0.147776794433593761102230246252 0.0490774005651474012901225307814 +-0.125512599945068359375 0.147776794433593761102230246252 0.0490774005651474012901225307814 +-0.12547375261783599853515625 -0.11174274981021881103515625 0.18512125313282012939453125 +-0.12547375261783599853515625 0.11174274981021881103515625 0.18512125313282012939453125 +-0.125468201935291290283203125 -0.636626917123794600072983485006 -0.0382583511993289035468812642193 +-0.125468201935291290283203125 0.636626917123794600072983485006 -0.0382583511993289035468812642193 +-0.125456648319959646054044810626 -0.386123090982437189300213731258 -0.371038264036178622173878238755 +-0.125456648319959646054044810626 0.386123090982437189300213731258 -0.371038264036178622173878238755 +-0.125395497679710393734708873126 -0.211569303274154657534822376874 0.171797704696655256784154630623 +-0.125395497679710393734708873126 0.211569303274154657534822376874 0.171797704696655256784154630623 +-0.125387345999479316027702680003 -0.0363230992108583491950746235943 -0.5342831909656524658203125 +-0.125387345999479316027702680003 0.0363230992108583491950746235943 -0.5342831909656524658203125 +-0.12534324824810028076171875 -0.17551074922084808349609375 -0.12643174827098846435546875 +-0.12534324824810028076171875 0.17551074922084808349609375 -0.12643174827098846435546875 +-0.1253145039081573486328125 -0.452418506145477294921875 0.17208750545978546142578125 +-0.1253145039081573486328125 0.452418506145477294921875 0.17208750545978546142578125 +-0.125284103304147714785798939374 -0.636125671863555841589743522491 0.694368296861648581774772992503 +-0.125284103304147714785798939374 0.636125671863555841589743522491 0.694368296861648581774772992503 +-0.125151899456977827584935880623 -0.267522597312927212787059261245 -0.052617900073528289794921875 +-0.125151899456977827584935880623 0.267522597312927212787059261245 -0.052617900073528289794921875 +-0.125147998332977294921875 -0.7901504039764404296875 0 +-0.125147998332977294921875 -0.299753594398498524054019753748 -0.233421993255615245477230246252 +-0.125147998332977294921875 0.299753594398498524054019753748 -0.233421993255615245477230246252 +-0.125147998332977294921875 0.7901504039764404296875 0 +-0.12506850063800811767578125 -0.116052500903606414794921875 -0.1827284991741180419921875 +-0.12506850063800811767578125 0.116052500903606414794921875 -0.1827284991741180419921875 +-0.125063395500183111019865123126 -0.00826020017266273533229625769536 0.155855596065521240234375 +-0.125063395500183111019865123126 0.00826020017266273533229625769536 0.155855596065521240234375 +-0.1250542514026165008544921875 -0.090856499969959259033203125 0.7338982522487640380859375 +-0.1250542514026165008544921875 0.090856499969959259033203125 0.7338982522487640380859375 +-0.125047194957733170950220369377 -0.0908518016338348416427450615629 -0.126921999454498307668970369377 +-0.125047194957733170950220369377 0.0908518016338348416427450615629 -0.126921999454498307668970369377 +-0.12503324449062347412109375 -0.18472050130367279052734375 0.112893752753734588623046875 +-0.12503324449062347412109375 0.18472050130367279052734375 0.112893752753734588623046875 +-0.124999247491359710693359375 -0.0495559982955455780029296875 0.2107592523097991943359375 +-0.124999247491359710693359375 0.0495559982955455780029296875 0.2107592523097991943359375 +-0.124979397654533377903796065311 -0.265427702665328946185496761245 0.062676899135112762451171875 +-0.124979397654533377903796065311 0.265427702665328946185496761245 0.062676899135112762451171875 +-0.12489674985408782958984375 -0.65229074656963348388671875 0.348449997603893280029296875 +-0.12489674985408782958984375 0.65229074656963348388671875 0.348449997603893280029296875 +-0.124885148555040362272627874063 -0.636253783106803916247429242503 0.04566249810159206390380859375 +-0.124885148555040362272627874063 0.636253783106803916247429242503 0.04566249810159206390380859375 +-0.124857750535011288728348688437 -0.030914850533008575439453125 0.0771673500537872342208700615629 +-0.124857750535011288728348688437 0.030914850533008575439453125 0.0771673500537872342208700615629 +-0.124852395057678228207365123126 -0.330857205390930220190170985006 0.186937201023101823293970369377 +-0.124852395057678228207365123126 0.330857205390930220190170985006 0.186937201023101823293970369377 +-0.124841399490833282470703125 -0.789268547296523959033720529987 -0.513779965043067887719985264994 +-0.124841399490833282470703125 0.789268547296523959033720529987 -0.513779965043067887719985264994 +-0.124829399585723879728682561563 -0.123127400875091552734375 0.0962145984172821100433026231258 +-0.124829399585723879728682561563 0.123127400875091552734375 0.0962145984172821100433026231258 +-0.12481950223445892333984375 -0.0633537009358405983627804403113 0.0539111986756324740310830634371 +-0.12481950223445892333984375 0.0633537009358405983627804403113 0.0539111986756324740310830634371 +-0.124798104166984544227680942186 -0.658519411087036043994658029987 -0.20193459093570709228515625 +-0.124798104166984544227680942186 0.658519411087036043994658029987 -0.20193459093570709228515625 +-0.124738596379756913612446567186 -0.119500148296356190069644753748 0.3044009506702423095703125 +-0.124738596379756913612446567186 0.119500148296356190069644753748 0.3044009506702423095703125 +-0.124704998731613156404129938437 -0.625047516822814896997329014994 -0.28941990435123443603515625 +-0.124704998731613156404129938437 0.625047516822814896997329014994 -0.28941990435123443603515625 +-0.124695548415184015444978626874 -0.233624652028083773513955634371 -0.228846442699432356393529630623 +-0.124695548415184015444978626874 0.233624652028083773513955634371 -0.228846442699432356393529630623 +-0.124659901857376090306139815311 -0.0756307482719421331207598768742 0.0352123506367206587364115932814 +-0.124659901857376090306139815311 0.0756307482719421331207598768742 0.0352123506367206587364115932814 +-0.124640452861785905325220369377 -0.530123543739318914269631477509 0.07703244686126708984375 +-0.124640452861785905325220369377 0.530123543739318914269631477509 0.07703244686126708984375 +-0.12464000284671783447265625 -0.3836100101470947265625 -0.9150450229644775390625 +-0.12464000284671783447265625 0.3836100101470947265625 -0.9150450229644775390625 +-0.124628099799156177862613503748 -0.0830053478479385320465411268742 0.00882990024983882834663795335928 +-0.124628099799156177862613503748 0.0830053478479385320465411268742 0.00882990024983882834663795335928 +-0.124613696336746210269197376874 -0.0197622008621692636654021413278 -0.0811225533485412514389523153113 +-0.124613696336746210269197376874 0.0197622008621692636654021413278 -0.0811225533485412514389523153113 +-0.124590298533439627903796065311 -0.0828624039888381930252236884371 -0.010539449751377105712890625 +-0.124590298533439627903796065311 0.0828624039888381930252236884371 -0.010539449751377105712890625 +-0.124379101395606997404463811563 -0.8559494912624359130859375 0.248757290840148942434595369377 +-0.124379101395606997404463811563 0.8559494912624359130859375 0.248757290840148942434595369377 +-0.124377304315567024928235184689 -0.382787087559700034411491742503 0.8049869835376739501953125 +-0.124377304315567024928235184689 0.382787087559700034411491742503 0.8049869835376739501953125 +-0.124373254179954526033036188437 -0.382787999510765086785823996252 -0.201246745884418487548828125 +-0.124373254179954526033036188437 0.382787999510765086785823996252 -0.201246745884418487548828125 +-0.124267196655273443051115123126 -0.210126399993896484375 -0.761843204498291015625 +-0.124267196655273443051115123126 0.210126399993896484375 -0.761843204498291015625 +-0.124185951054096216372713001874 -0.257176154851913418841746761245 0.202332192659378046206697376874 +-0.124185951054096216372713001874 0.257176154851913418841746761245 0.202332192659378046206697376874 +-0.124156799912452694978348688437 0 -0.891395097970962502209602007497 +-0.124148595333099368009932561563 -0.0245596006512641927554962961722 0.154867398738861100637720369377 +-0.124148595333099368009932561563 0.0245596006512641927554962961722 0.154867398738861100637720369377 +-0.124093997478485110197432561563 -0.0737025976181030356704226846887 0.138450801372528076171875 +-0.124093997478485110197432561563 0.0737025976181030356704226846887 0.138450801372528076171875 +-0.123985949158668534719751619377 -0.145243993401527410336271373126 -0.515782290697097800524772992503 +-0.123985949158668534719751619377 0.145243993401527410336271373126 -0.515782290697097800524772992503 +-0.123979401588439952508480246252 -0.147542202472686762027009876874 -0.0534825980663299616058026231258 +-0.123979401588439952508480246252 0.147542202472686762027009876874 -0.0534825980663299616058026231258 +-0.123950698971748346499666126874 -0.114803400635719296540848688437 0.247904098033905007092414507497 +-0.123950698971748346499666126874 0.114803400635719296540848688437 0.247904098033905007092414507497 +-0.123866397142410267218082253748 -0.067238397896289825439453125 -0.0513428986072540297080912807814 +-0.123866397142410267218082253748 0.067238397896289825439453125 -0.0513428986072540297080912807814 +-0.123776154220104211978181751874 -0.159314646571874607428043191248 0.8257103860378265380859375 +-0.123776154220104211978181751874 0.159314646571874607428043191248 0.8257103860378265380859375 +-0.123661199212074274234041126874 0 -0.587118601799011208264289507497 +-0.123627001047134393862947376874 0 -0.0849491983652114895919638115629 +-0.12360680103302001953125 -0.380422401428222700658920985006 0 +-0.12360680103302001953125 0.380422401428222700658920985006 0 +-0.123459304869174960050948186563 -0.0896971531212329836746377509371 0.42333479225635528564453125 +-0.123459304869174960050948186563 0.0896971531212329836746377509371 0.42333479225635528564453125 +-0.123459300398826590794421065311 -0.18668639659881591796875 -0.199764901399612421206697376874 +-0.123459300398826590794421065311 0.18668639659881591796875 -0.199764901399612421206697376874 +-0.123453199863433837890625 -0.207701611518859879934595369377 -0.318777990341186534539730246252 +-0.123453199863433837890625 0.207701611518859879934595369377 -0.318777990341186534539730246252 +-0.1234447956085205078125 -0.22096478939056396484375 0.309735202789306662829460492503 +-0.1234447956085205078125 0.22096478939056396484375 0.309735202789306662829460492503 +-0.12339270114898681640625 -0.0389834985136985751053018134371 -0.0758586019277572576324786268742 +-0.12339270114898681640625 0.0389834985136985751053018134371 -0.0758586019277572576324786268742 +-0.1233121454715728759765625 -0.0895914003252983176528445596887 -0.423400050401687655377003238755 +-0.1233121454715728759765625 0.0895914003252983176528445596887 -0.423400050401687655377003238755 +-0.123292645812034598606921065311 -0.0744658514857292203048544365629 -0.0418779015541076646278462192186 +-0.123292645812034598606921065311 0.0744658514857292203048544365629 -0.0418779015541076646278462192186 +-0.1232637465000152587890625 -0.18744599819183349609375 -0.110317997634410858154296875 +-0.1232637465000152587890625 0.18744599819183349609375 -0.110317997634410858154296875 +-0.123220002651214605160490123126 -0.132176005840301508120759876874 0.0857107996940612848479901231258 +-0.123220002651214605160490123126 0.132176005840301508120759876874 0.0857107996940612848479901231258 +-0.123204994201660159025557561563 -0.105825805664062508326672684689 0.116710996627807622738615123126 +-0.123204994201660159025557561563 0.105825805664062508326672684689 0.116710996627807622738615123126 +-0.123191201686859139186047684689 0 0.536026141047477810985810720013 +-0.123164796829223641139172684689 -0.485977602005004893914730246252 0.623423194885253995067841970013 +-0.123164796829223641139172684689 0.485977602005004893914730246252 0.623423194885253995067841970013 +-0.123157405853271492701672684689 -0.15714299678802490234375 0.01176320016384124755859375 +-0.123157405853271492701672684689 0.15714299678802490234375 0.01176320016384124755859375 +-0.123125895112752917204268499063 -0.682559350132942221911491742503 0.491379043459892250744758257497 +-0.123125895112752917204268499063 0.682559350132942221911491742503 0.491379043459892250744758257497 +-0.123120605945587158203125 -0.0397157996892929104904013115629 -0.152525401115417486019865123126 +-0.123120605945587158203125 0.0397157996892929104904013115629 -0.152525401115417486019865123126 +-0.123047399520874026213057561563 -0.01334179937839508056640625 -0.157102799415588384457365123126 +-0.123047399520874026213057561563 0.01334179937839508056640625 -0.157102799415588384457365123126 +-0.12300600111484527587890625 -0.1629630029201507568359375 -0.4564130008220672607421875 +-0.12300600111484527587890625 0.1629630029201507568359375 -0.4564130008220672607421875 +-0.122985604405403126104801003748 -0.11988119781017303466796875 -0.245973908901214594058259876874 +-0.122985604405403126104801003748 0.11988119781017303466796875 -0.245973908901214594058259876874 +-0.122969694435596466064453125 0 -0.432872539758682284283253238755 +-0.122968299686908713597155440311 -0.378450793027877763208266514994 0.575894188880920365747329014994 +-0.122968299686908713597155440311 0.378450793027877763208266514994 0.575894188880920365747329014994 +-0.122968053817749015110827315311 -0.0612424492835998493522886576557 -0.0602346003055572454254473768742 +-0.122968053817749015110827315311 0.0612424492835998493522886576557 -0.0602346003055572454254473768742 +-0.122950804233551036492855246252 -0.0402370005846023615081463731258 0.152525603771209716796875 +-0.122950804233551036492855246252 0.0402370005846023615081463731258 0.152525603771209716796875 +-0.122922599315643310546875 -0.0817657470703124916733273153113 0.026540100574493408203125 +-0.122922599315643310546875 0.0817657470703124916733273153113 0.026540100574493408203125 +-0.122908103466033924444644753748 -0.227402004599571216925113503748 -0.650523984432220370166533029987 +-0.122908103466033924444644753748 0.227402004599571216925113503748 -0.650523984432220370166533029987 +-0.12290699779987335205078125 -0.068672247231006622314453125 0.20658649504184722900390625 +-0.12290699779987335205078125 0.068672247231006622314453125 0.20658649504184722900390625 +-0.122886501252651214599609375 -0.16570974886417388916015625 -0.14120624959468841552734375 +-0.122886501252651214599609375 0.16570974886417388916015625 -0.14120624959468841552734375 +-0.12287199497222900390625 -0.157179796695709250720085492503 -0.0140353992581367503084122105861 +-0.12287199497222900390625 0.157179796695709250720085492503 -0.0140353992581367503084122105861 +-0.122863253206014627627595814374 -0.783630278706550553735610264994 -0.305496792495250690802066628748 +-0.122863253206014627627595814374 0.783630278706550553735610264994 -0.305496792495250690802066628748 +-0.122838449478149411286942438437 -0.0572574019432067829460386576557 0.0642829477787017766754473768742 +-0.122838449478149411286942438437 0.0572574019432067829460386576557 0.0642829477787017766754473768742 +-0.122790803760290154200696122189 -0.0443140517920255702644105610943 0.5342831909656524658203125 +-0.122790803760290154200696122189 0.0443140517920255702644105610943 0.5342831909656524658203125 +-0.122745597362518318873547684689 -0.377773189544677756579460492503 -0.0471275985240936293174662807814 +-0.122745597362518318873547684689 0.377773189544677756579460492503 -0.0471275985240936293174662807814 +-0.122740799188613886050447376874 -0.0409892991185188265701455634371 0.0758588969707488930405148153113 +-0.122740799188613886050447376874 0.0409892991185188265701455634371 0.0758588969707488930405148153113 +-0.12269915640354156494140625 -0.8017116487026214599609375 0.494675454497337296899672764994 +-0.12269915640354156494140625 0.8017116487026214599609375 0.494675454497337296899672764994 +-0.122658252716064453125 -0.21713350713253021240234375 0.01754949986934661865234375 +-0.122658252716064453125 0.21713350713253021240234375 0.01754949986934661865234375 +-0.122637605667114263363615123126 -0.122082805633544927426115123126 0.360632395744323763775440738755 +-0.122637605667114263363615123126 0.122082805633544927426115123126 0.360632395744323763775440738755 +-0.12261450290679931640625 -0.2597613036632537841796875 -0.08654339611530303955078125 +-0.12261450290679931640625 0.2597613036632537841796875 -0.08654339611530303955078125 +-0.122531998157501223478682561563 -0.0788266003131866538344851846887 -0.137012004852294921875 +-0.122531998157501223478682561563 0.0788266003131866538344851846887 -0.137012004852294921875 +-0.1225045025348663330078125 -0.217431247234344482421875 -0.014706999994814395904541015625 +-0.1225045025348663330078125 0.217431247234344482421875 -0.014706999994814395904541015625 +-0.122493802011013036556974498126 -0.520408892631530783923210492503 -0.129111952334642426931665681877 +-0.122493802011013036556974498126 0.520408892631530783923210492503 -0.129111952334642426931665681877 +-0.122403003275394439697265625 -0.44248199462890625 -0.19805850088596343994140625 +-0.122403003275394439697265625 0.44248199462890625 -0.19805850088596343994140625 +-0.122380805015563975945980246252 -0.376646804809570356908920985006 0.0562143981456756647308026231258 +-0.122380805015563975945980246252 0.376646804809570356908920985006 0.0562143981456756647308026231258 +-0.122310000658035267218082253748 -0.119031000137329090460269753748 -0.575214600563049294201789507497 +-0.122310000658035267218082253748 0.119031000137329090460269753748 -0.575214600563049294201789507497 +-0.122308204323053351658678877811 -0.376432703435420956683543636245 -0.752222785353660605700554242503 +-0.122308204323053351658678877811 0.376432703435420956683543636245 -0.752222785353660605700554242503 +-0.12225525081157684326171875 -0.01668524928390979766845703125 -0.217428743839263916015625 +-0.12225525081157684326171875 0.01668524928390979766845703125 -0.217428743839263916015625 +-0.122161352634429926089509876874 -0.0810971975326538058181924384371 -0.0316206000745296450515908759371 +-0.122161352634429926089509876874 0.0810971975326538058181924384371 -0.0316206000745296450515908759371 +-0.122111856192350390348799749063 -0.817647320032119706567641514994 -0.197587598860263807809545255623 +-0.122111856192350390348799749063 0.817647320032119706567641514994 -0.197587598860263807809545255623 +-0.122040903568267813938952315311 -0.0595736995339393587967080634371 -0.267501604557037364617855246252 +-0.122040903568267813938952315311 0.0595736995339393587967080634371 -0.267501604557037364617855246252 +-0.121940553188323974609375 -0.00618720017373561824436389855464 0.087133347988128662109375 +-0.121940553188323974609375 0.00618720017373561824436389855464 0.087133347988128662109375 +-0.121921797096729275788895563437 -0.524846708774566628186164507497 -0.446845716238021828381477007497 +-0.121921797096729275788895563437 0.524846708774566628186164507497 -0.446845716238021828381477007497 +-0.1218760013580322265625 -0.2138342559337615966796875 -0.0438307486474514007568359375 +-0.1218760013580322265625 0.2138342559337615966796875 -0.0438307486474514007568359375 +-0.121842004358768463134765625 -0.374996244907379150390625 -0.6379905045032501220703125 +-0.121842004358768463134765625 0.374996244907379150390625 -0.6379905045032501220703125 +-0.121819800138473502415514815311 -0.53460180759429931640625 0.243640208244323724917634876874 +-0.121819800138473502415514815311 0.53460180759429931640625 0.243640208244323724917634876874 +-0.121815206110477441958650501874 -0.558122766017913773950454014994 -0.629412260651588395532485264994 +-0.121815206110477441958650501874 0.558122766017913773950454014994 -0.629412260651588395532485264994 +-0.12177880108356475830078125 -0.513607913255691550524772992503 -0.379310739040374766961605246252 +-0.12177880108356475830078125 0.513607913255691550524772992503 -0.379310739040374766961605246252 +-0.121771253645420074462890625 -0.212006747722625732421875 0.05220074951648712158203125 +-0.121771253645420074462890625 0.212006747722625732421875 0.05220074951648712158203125 +-0.121612904965877524632311690311 -0.735187944769859269555922764994 -0.408912904560565948486328125 +-0.121612904965877524632311690311 0.735187944769859269555922764994 -0.408912904560565948486328125 +-0.121591798216104524099634431877 -0.0883404530584812192062216240629 0.529066437482833884509147992503 +-0.121591798216104524099634431877 0.0883404530584812192062216240629 0.529066437482833884509147992503 +-0.121575602889060982447766434689 -0.199777954816818231753572376874 0.384457942843437205926448996252 +-0.121575602889060982447766434689 0.199777954816818231753572376874 0.384457942843437205926448996252 +-0.121543794870376573036274692186 -0.327295500040054310186832253748 0.024592049419879913330078125 +-0.121543794870376573036274692186 0.327295500040054310186832253748 0.024592049419879913330078125 +-0.12150044739246368408203125 -0.276953396201133739129573996252 -0.333218711614608753546207253748 +-0.12150044739246368408203125 0.276953396201133739129573996252 -0.333218711614608753546207253748 +-0.12149059772491455078125 -0.15436780452728271484375 0.0375582009553909329513388115629 +-0.12149059772491455078125 0.15436780452728271484375 0.0375582009553909329513388115629 +-0.1214801967144012451171875 -0.815246111154556252209602007497 0.361409398913383472784488503748 +-0.1214801967144012451171875 0.815246111154556252209602007497 0.361409398913383472784488503748 +-0.121418145298957821931473688437 -0.327617499232292164190738503748 -0.0206031005829572649856729071871 +-0.121418145298957821931473688437 0.327617499232292164190738503748 -0.0206031005829572649856729071871 +-0.121408796310424796360827315311 -0.00989819951355457201824794566392 -0.0875324964523315346420773153113 +-0.121408796310424796360827315311 0.00989819951355457201824794566392 -0.0875324964523315346420773153113 +-0.12140084803104400634765625 -0.0549037501215934725662393134371 -0.0689014479517936623276241903113 +-0.12140084803104400634765625 0.0549037501215934725662393134371 -0.0689014479517936623276241903113 +-0.121390646696090689915514815311 -0.0294616498053073862239958913278 -0.0830442041158676175216513115629 +-0.121390646696090689915514815311 0.0294616498053073862239958913278 -0.0830442041158676175216513115629 +-0.121376699209213248509264815311 -0.2544077932834625244140625 0.102686101198196405581697376874 +-0.121376699209213248509264815311 0.2544077932834625244140625 0.102686101198196405581697376874 +-0.1213527023792266845703125 -0.0881674468517303494552450615629 0 +-0.1213527023792266845703125 0.0881674468517303494552450615629 0 +-0.121321846544742581452958063437 -0.628317934274673528527443977509 -0.1140054501593112945556640625 +-0.121321846544742581452958063437 0.628317934274673528527443977509 -0.1140054501593112945556640625 +-0.121293005347251889314286188437 -0.432534608244895923956363503748 -0.0264897007495164885093608120314 +-0.121293005347251889314286188437 0.432534608244895923956363503748 -0.0264897007495164885093608120314 +-0.121270796656608573216296065311 -0.01655744947493076324462890625 0.0867136538028717013260049384371 +-0.121270796656608573216296065311 0.01655744947493076324462890625 0.0867136538028717013260049384371 +-0.12123750150203704833984375 -0.19505025446414947509765625 0.098777003586292266845703125 +-0.12123750150203704833984375 0.19505025446414947509765625 0.098777003586292266845703125 +-0.121114753186702728271484375 -0.12902875244617462158203125 0.17658649384975433349609375 +-0.121114753186702728271484375 0.12902875244617462158203125 0.17658649384975433349609375 +-0.121081200242042538728348688437 -0.137337604165077203921541126874 0.57138240337371826171875 +-0.121081200242042538728348688437 0.137337604165077203921541126874 0.57138240337371826171875 +-0.121010601520538330078125 -0.140580797195434564761384876874 0.0747893989086151206313601846887 +-0.121010601520538330078125 0.140580797195434564761384876874 0.0747893989086151206313601846887 +-0.121006196737289420384264815311 0 -0.274513202905654896124332253748 +-0.120985500514507293701171875 -0.3723615109920501708984375 -0.3109810054302215576171875 +-0.120985500514507293701171875 0.3723615109920501708984375 -0.3109810054302215576171875 +-0.120920406281948097926282059689 -0.432294309139251708984375 0.031618349254131317138671875 +-0.120920406281948097926282059689 0.432294309139251708984375 0.031618349254131317138671875 +-0.120860004425048836451672684689 -0.785186386108398526317841970013 -0.0942063987255096491058026231258 +-0.120860004425048836451672684689 0.785186386108398526317841970013 -0.0942063987255096491058026231258 +-0.120850503444671630859375 -0.185754007101058965512052623126 0.202214401960372908151342130623 +-0.120850503444671630859375 0.185754007101058965512052623126 0.202214401960372908151342130623 +-0.120709651708602899722322376874 -0.072665400803089141845703125 0.05146770179271697998046875 +-0.120709651708602899722322376874 0.072665400803089141845703125 0.05146770179271697998046875 +-0.120591899007558830958508622189 -0.457902231812477134020866742503 0.445289635658264182360710492503 +-0.120591899007558830958508622189 0.457902231812477134020866742503 0.445289635658264182360710492503 +-0.120588004589080810546875 -0.154515004158020025082365123126 -0.0397947996854782146125550923443 +-0.120588004589080810546875 0.154515004158020025082365123126 -0.0397947996854782146125550923443 +-0.120507600903511036261051003748 -0.0875533461570739690582598768742 0.0176728494465351083919646413278 +-0.120507600903511036261051003748 0.0875533461570739690582598768742 0.0176728494465351083919646413278 +-0.12040375173091888427734375 -0.100241251289844512939453125 -0.19481949508190155029296875 +-0.12040375173091888427734375 0.100241251289844512939453125 -0.19481949508190155029296875 +-0.120382748544216156005859375 -0.19816200435161590576171875 -0.093486748635768890380859375 +-0.120382748544216156005859375 0.19816200435161590576171875 -0.093486748635768890380859375 +-0.1203365027904510498046875 -0.575450122356414794921875 -0.74624209105968475341796875 +-0.1203365027904510498046875 0.575450122356414794921875 -0.74624209105968475341796875 +-0.1201927475631237030029296875 -0.271189503371715545654296875 0.68884648382663726806640625 +-0.1201927475631237030029296875 0.271189503371715545654296875 0.68884648382663726806640625 +-0.12014834582805633544921875 -0.0872925013303756658356036268742 -0.0210803993046283708046040317186 +-0.12014834582805633544921875 0.0872925013303756658356036268742 -0.0210803993046283708046040317186 +-0.120129203796386724301115123126 -0.36972200870513916015625 -0.0942059993743896567641726846887 +-0.120129203796386724301115123126 0.36972200870513916015625 -0.0942059993743896567641726846887 +-0.120104598999023440275557561563 -0.121364402770996096525557561563 -0.104141998291015627775557561563 +-0.120104598999023440275557561563 0.121364402770996096525557561563 -0.104141998291015627775557561563 +-0.120061545073986045140124190311 -0.144993451237678511178685880623 0.295062953233718838763621761245 +-0.120061545073986045140124190311 0.144993451237678511178685880623 0.295062953233718838763621761245 +-0.120036301016807553376786188437 -0.0508675485849380479286274692186 0.0741874516010284368316973768742 +-0.120036301016807553376786188437 0.0508675485849380479286274692186 0.0741874516010284368316973768742 +-0.119982147216796869448884876874 -0.0269389495253562934184987653907 0.0858987003564834622482138115629 +-0.119982147216796869448884876874 0.0269389495253562934184987653907 0.0858987003564834622482138115629 +-0.119981953501701363307141434689 -0.514320942759513899389389735006 0.153552305698394786492855246252 +-0.119981953501701363307141434689 0.514320942759513899389389735006 0.153552305698394786492855246252 +-0.119976751506328582763671875 -0.04949099756777286529541015625 -0.73868550360202789306640625 +-0.119976751506328582763671875 0.04949099756777286529541015625 -0.73868550360202789306640625 +-0.119931301474571233578458873126 -0.176769000291824351922542746252 -0.874281585216522216796875 +-0.119931301474571233578458873126 0.176769000291824351922542746252 -0.874281585216522216796875 +-0.119918000698089610711605246252 -0.283586001396179232525440738755 -0.255340409278869640008480246252 +-0.119918000698089610711605246252 0.283586001396179232525440738755 -0.255340409278869640008480246252 +-0.119898448884487140997379128748 -0.32293869554996490478515625 -0.0619269013404846122017310960928 +-0.119898448884487140997379128748 0.32293869554996490478515625 -0.0619269013404846122017310960928 +-0.119879998266696929931640625 -0.0500915013253688812255859375 -0.2135874927043914794921875 +-0.119879998266696929931640625 0.0500915013253688812255859375 -0.2135874927043914794921875 +-0.1198477484285831451416015625 -0.56844748556613922119140625 0.47434575855731964111328125 +-0.1198477484285831451416015625 0.56844748556613922119140625 0.47434575855731964111328125 +-0.119838404655456545744307561563 -0.0541243970394134563117738423443 0.150696003437042258532585492503 +-0.119838404655456545744307561563 0.0541243970394134563117738423443 0.150696003437042258532585492503 +-0.119800795614719388093583063437 -0.646713900566101007605368522491 0.239600902795791603772102007497 +-0.119800795614719388093583063437 0.646713900566101007605368522491 0.239600902795791603772102007497 +-0.119799502193927764892578125 -0.15505899488925933837890625 -0.15525700151920318603515625 +-0.119799502193927764892578125 0.15505899488925933837890625 -0.15525700151920318603515625 +-0.119776953756809231843583063437 -0.368642243742942798956363503748 -0.228596413135528558902009876874 +-0.119776953756809231843583063437 0.368642243742942798956363503748 -0.228596413135528558902009876874 +-0.119765101373195639866686690311 -0.0694172523915767558655431912484 -0.32146169245243072509765625 +-0.119765101373195639866686690311 0.0694172523915767558655431912484 -0.32146169245243072509765625 +-0.119720399379730224609375 -0.496264207363128651007144753748 -0.315259802341461170538394753748 +-0.119720399379730224609375 0.496264207363128651007144753748 -0.315259802341461170538394753748 +-0.119642198085784912109375 -0.131323397159576416015625 -0.0918690025806427057464276231258 +-0.119642198085784912109375 0.131323397159576416015625 -0.0918690025806427057464276231258 +-0.11962600052356719970703125 -0.16807849705219268798828125 0.1412065029144287109375 +-0.11962600052356719970703125 0.16807849705219268798828125 0.1412065029144287109375 +-0.1196157038211822509765625 -0.0793694972991943331619424384371 0.0435034498572349562217631557814 +-0.1196157038211822509765625 0.0793694972991943331619424384371 0.0435034498572349562217631557814 +-0.119540700316429132632478626874 -0.136195501685142522640958873126 0.239083492755889887027009876874 +-0.119540700316429132632478626874 0.136195501685142522640958873126 0.239083492755889887027009876874 +-0.119438803195953374691740123126 -0.0867763996124267661391726846887 0.134923005104064935855134876874 +-0.119438803195953374691740123126 0.0867763996124267661391726846887 0.134923005104064935855134876874 +-0.119427743554115298185713811563 -0.173782803118228912353515625 -0.39753811061382293701171875 +-0.119427743554115298185713811563 0.173782803118228912353515625 -0.39753811061382293701171875 +-0.119410999119281768798828125 -0.367502510547637939453125 0.317305505275726318359375 +-0.119410999119281768798828125 0.367502510547637939453125 0.317305505275726318359375 +-0.119402495026588437165848688437 -0.217082259058952314889623380623 -0.247221091389656061343416126874 +-0.119402495026588437165848688437 0.217082259058952314889623380623 -0.247221091389656061343416126874 +-0.119398844987154001406892689374 -0.242417207360267616955695757497 0.910756450891494706567641514994 +-0.119398844987154001406892689374 0.242417207360267616955695757497 0.910756450891494706567641514994 +-0.119380100071430197972155440311 -0.320631858706474259790297764994 0.0737814001739025004944494412484 +-0.119380100071430197972155440311 0.320631858706474259790297764994 0.0737814001739025004944494412484 +-0.119337299466133126002453934689 -0.426519888639450062139957253748 -0.079620301723480224609375 +-0.119337299466133126002453934689 0.426519888639450062139957253748 -0.079620301723480224609375 +-0.119217002391815193873547684689 -0.0664680004119873046875 -0.146182596683502197265625 +-0.119217002391815193873547684689 0.0664680004119873046875 -0.146182596683502197265625 +-0.119183698296546930484041126874 -0.0483784496784210177322549384371 -0.07716719806194305419921875 +-0.119183698296546930484041126874 0.0483784496784210177322549384371 -0.07716719806194305419921875 +-0.11912579834461212158203125 -0.0668038487434387123764523153113 0.062018550932407379150390625 +-0.11912579834461212158203125 0.0668038487434387123764523153113 0.062018550932407379150390625 +-0.119122004508972173519865123126 -0.0266263991594314596011994211722 -0.380921196937561046258480246252 +-0.119122004508972173519865123126 0.0266263991594314596011994211722 -0.380921196937561046258480246252 +-0.119111001491546630859375 -0.792644977569580078125 -0.597935020923614501953125 +-0.119111001491546630859375 0.792644977569580078125 -0.597935020923614501953125 +-0.1190549992024898529052734375 -0.52798350155353546142578125 -0.519191265106201171875 +-0.1190549992024898529052734375 0.52798350155353546142578125 -0.519191265106201171875 +-0.119022750854492181948884876874 -0.227304705977439874819978626874 0.238046544790267933233707253748 +-0.119022750854492181948884876874 0.227304705977439874819978626874 0.238046544790267933233707253748 +-0.119005596637725835629240123126 -0.7830808162689208984375 0.112345600128173836451672684689 +-0.119005596637725835629240123126 0.7830808162689208984375 0.112345600128173836451672684689 +-0.118961050361394884977705999063 -0.624425113201141357421875 0.1357999481260776519775390625 +-0.118961050361394884977705999063 0.624425113201141357421875 0.1357999481260776519775390625 +-0.118931794166564949732922684689 -0.118977999687194829769865123126 0.108164203166961681024105246252 +-0.118931794166564949732922684689 0.118977999687194829769865123126 0.108164203166961681024105246252 +-0.118795050680637365170255748126 -0.305536946654319796490284488755 0.308277440071105968133480246252 +-0.118795050680637365170255748126 0.305536946654319796490284488755 0.308277440071105968133480246252 +-0.118692699074745167120426003748 0 -0.329260060191154446673778011245 +-0.118690203130245211515791936563 -0.602645373344421364514289507497 0.657822597026824995580795985006 +-0.118690203130245211515791936563 0.602645373344421364514289507497 0.657822597026824995580795985006 +-0.118659198284149169921875 -0.365192389488220248150440738755 0.1120471954345703125 +-0.118659198284149169921875 0.365192389488220248150440738755 0.1120471954345703125 +-0.118599298596382130011051003748 -0.0197482489049434668804128278907 -0.0896896541118621798416299384371 +-0.118599298596382130011051003748 0.0197482489049434668804128278907 -0.0896896541118621798416299384371 +-0.118558298051357258184879128748 -0.137946550548076612985326505623 -0.299022844433784462658820757497 +-0.118558298051357258184879128748 0.137946550548076612985326505623 -0.299022844433784462658820757497 +-0.118557903170585621221988503748 -0.172336202859878523385717130623 -0.215044802427291875668302623126 +-0.118557903170585621221988503748 0.172336202859878523385717130623 -0.215044802427291875668302623126 +-0.118550600111484522036775501874 0 0.329311150312423694952457253748 +-0.118431997299194347039730246252 -0.140461599826812749691740123126 -0.0790214002132415826995526231258 +-0.118431997299194347039730246252 0.140461599826812749691740123126 -0.0790214002132415826995526231258 +-0.118408002704381939973465875937 -0.364429509639739968029914507497 -0.869292771816253639904914507497 +-0.118408002704381939973465875937 0.364429509639739968029914507497 -0.869292771816253639904914507497 +-0.118298998475074759739733565311 -0.364092600345611583367855246252 -0.461998200416564919201789507497 +-0.118298998475074759739733565311 0.364092600345611583367855246252 -0.461998200416564919201789507497 +-0.1182910501956939697265625 -0.364055398106575001104801003748 0.236582100391387939453125 +-0.1182910501956939697265625 0.364055398106575001104801003748 0.236582100391387939453125 +-0.11827079951763153076171875 -0.747728097438812300268295985006 -0.486738914251327536852897992503 +-0.11827079951763153076171875 0.747728097438812300268295985006 -0.486738914251327536852897992503 +-0.118159653246402734927400501874 -0.0283989988267421694656533759371 0.328225094079971302374332253748 +-0.118159653246402734927400501874 0.0283989988267421694656533759371 0.328225094079971302374332253748 +-0.118136502802371978759765625 -0.255600512027740478515625 -0.413173496723175048828125 +-0.118136502802371978759765625 0.255600512027740478515625 -0.413173496723175048828125 +-0.118135803937911995631360184689 -0.423727655410766623766960492503 0.0948618002235889490325604356258 +-0.118135803937911995631360184689 0.423727655410766623766960492503 0.0948618002235889490325604356258 +-0.118091547489166254214509876874 -0.0370981492102146134803852817186 0.0847235977649688637436398153113 +-0.118091547489166254214509876874 0.0370981492102146134803852817186 0.0847235977649688637436398153113 +-0.1180239021778106689453125 -0.0122022002935409535490096644139 0.2755385935306549072265625 +-0.1180239021778106689453125 0.0122022002935409535490096644139 0.2755385935306549072265625 +-0.118022851645946516563334682814 -0.244453002512454997674495871252 -0.478344351053237970550213731258 +-0.118022851645946516563334682814 0.244453002512454997674495871252 -0.478344351053237970550213731258 +-0.11797200143337249755859375 -0.085710503160953521728515625 0.203067243099212646484375 +-0.11797200143337249755859375 0.085710503160953521728515625 0.203067243099212646484375 +-0.117971747368574145231612249063 -0.192400002479553217105134876874 0.60956154763698577880859375 +-0.117971747368574145231612249063 0.192400002479553217105134876874 0.60956154763698577880859375 +-0.117939296364784229620426003748 -0.0856871992349624578277911268742 0.0353272497653961195518412807814 +-0.117939296364784229620426003748 0.0856871992349624578277911268742 0.0353272497653961195518412807814 +-0.117889800667762750796541126874 -0.49706518650054931640625 0.314687991142272915912059261245 +-0.117889800667762750796541126874 0.49706518650054931640625 0.314687991142272915912059261245 +-0.117881000041961669921875 -0.496434986591339111328125 0.860032975673675537109375 +-0.117881000041961669921875 0.496434986591339111328125 0.860032975673675537109375 +-0.1178610026836395263671875 -0.282546597719192493780582253748 0.516019785404205344470085492503 +-0.1178610026836395263671875 0.282546597719192493780582253748 0.516019785404205344470085492503 +-0.117843198776245119963057561563 -0.0266140013933181783511994211722 -0.159388399124145513363615123126 +-0.117843198776245119963057561563 0.0266140013933181783511994211722 -0.159388399124145513363615123126 +-0.117839598655700691920422684689 -0.148698604106903081722990123126 0.06326580047607421875 +-0.117839598655700691920422684689 0.148698604106903081722990123126 0.06326580047607421875 +-0.117836999893188479338057561563 -0.112901997566223155633480246252 -0.115618395805358889494307561563 +-0.117836999893188479338057561563 0.112901997566223155633480246252 -0.115618395805358889494307561563 +-0.117790496349334708470202315311 -0.235152000188827509097322376874 -0.144321897625923151187166126874 +-0.117790496349334708470202315311 0.235152000188827509097322376874 -0.144321897625923151187166126874 +-0.117784550786018377133146373126 -0.085575096309185028076171875 -0.633485439419746443334702235006 +-0.117784550786018377133146373126 0.085575096309185028076171875 -0.633485439419746443334702235006 +-0.117747604846954345703125 -0.10565960407257080078125 -0.36738479137420654296875 +-0.117747604846954345703125 0.10565960407257080078125 -0.36738479137420654296875 +-0.117742796242237088288895563437 -0.0284486990422010387058460167964 0.6894398033618927001953125 +-0.117742796242237088288895563437 0.0284486990422010387058460167964 0.6894398033618927001953125 +-0.11769855022430419921875 -0.0702640503644943181793536268742 -0.0609099000692367512077574076557 +-0.11769855022430419921875 0.0702640503644943181793536268742 -0.0609099000692367512077574076557 +-0.117557203769683843441740123126 -0.161803400516510015316740123126 0 +-0.117557203769683843441740123126 0.161803400516510015316740123126 0 +-0.117469151318073269929520563437 -0.80839674174785614013671875 0.234937441349029524362279630623 +-0.117469151318073269929520563437 0.80839674174785614013671875 0.234937441349029524362279630623 +-0.117467454075813285130358565311 -0.361521138250827767102180132497 0.76026548445224761962890625 +-0.117467454075813285130358565311 0.361521138250827767102180132497 0.76026548445224761962890625 +-0.117466503381729120425447376874 -0.2275941073894500732421875 0.156213301420211780889957253748 +-0.117466503381729120425447376874 0.2275941073894500732421875 0.156213301420211780889957253748 +-0.117465752363204944952457253748 -0.0776951998472213689606036268742 -0.0516260996460914597938618442186 +-0.117465752363204944952457253748 0.0776951998472213689606036268742 -0.0516260996460914597938618442186 +-0.117457652091979974917634876874 0 -0.0932937026023864662827023153113 +-0.117455551028251642398103626874 -0.0928776025772094643295773153113 0.00882990024983882834663795335928 +-0.117455551028251642398103626874 0.0928776025772094643295773153113 0.00882990024983882834663795335928 +-0.117359901964664448126285378748 -0.286721745133399930072215511245 -0.162840999662876129150390625 +-0.117359901964664448126285378748 0.286721745133399930072215511245 -0.162840999662876129150390625 +-0.117344248294830311163394753748 -0.0393988519906997639030699076557 -0.0847234457731246975997763115629 +-0.117344248294830311163394753748 0.0393988519906997639030699076557 -0.0847234457731246975997763115629 +-0.1173262484371662139892578125 -0.74076600372791290283203125 0 +-0.1173262484371662139892578125 0.74076600372791290283203125 0 +-0.11731620132923126220703125 -0.231541192531585671154914507497 -0.540948593616485617907585492503 +-0.11731620132923126220703125 0.231541192531585671154914507497 -0.540948593616485617907585492503 +-0.11730779707431793212890625 -0.0928859978914260836502236884371 -0.010539449751377105712890625 +-0.11730779707431793212890625 0.0928859978914260836502236884371 -0.010539449751377105712890625 +-0.117259199917316439543135686563 0 -0.841873148083686850817741742503 +-0.117229202389717110377453934689 -0.360800534486770685393963731258 -0.398221459984779369012386496252 +-0.117229202389717110377453934689 0.360800534486770685393963731258 -0.398221459984779369012386496252 +-0.117180901765823353155582253748 -0.035722799599170684814453125 0.273847496509551979748664507497 +-0.117180901765823353155582253748 0.035722799599170684814453125 0.273847496509551979748664507497 +-0.117156652361154564601086747189 -0.360577753186225924419971988755 -0.527974832057952925268295985006 +-0.117156652361154564601086747189 0.360577753186225924419971988755 -0.527974832057952925268295985006 +-0.1169764995574951171875 -0.16734300553798675537109375 0.4564130008220672607421875 +-0.1169764995574951171875 0.16734300553798675537109375 0.4564130008220672607421875 +-0.116941647231578821353181751874 -0.313879993557929948266860264994 -0.101508049666881552952624190311 +-0.116941647231578821353181751874 0.313879993557929948266860264994 -0.101508049666881552952624190311 +-0.11683599650859832763671875 -0.426317989826202392578125 0.23367150127887725830078125 +-0.11683599650859832763671875 0.426317989826202392578125 0.23367150127887725830078125 +-0.116820253431797027587890625 -0.2043800055980682373046875 0.084153749048709869384765625 +-0.116820253431797027587890625 0.2043800055980682373046875 0.084153749048709869384765625 +-0.116813953965902342368998745314 -0.219869643449783352950888115629 0.490420165657997175756577235006 +-0.116813953965902342368998745314 0.219869643449783352950888115629 0.490420165657997175756577235006 +-0.116783595085144048519865123126 -0.160300600528717057668970369377 0.0257943987846374518657643903907 +-0.116783595085144048519865123126 0.160300600528717057668970369377 0.0257943987846374518657643903907 +-0.116757300496101376618973688437 -0.0605023518204688970367755018742 0.0721609488129615755935830634371 +-0.116757300496101376618973688437 0.0605023518204688970367755018742 0.0721609488129615755935830634371 +-0.116723001003265380859375 -0.486185014247894287109375 0 +-0.116723001003265380859375 0.486185014247894287109375 0 +-0.116719000041484832763671875 -0.20758950710296630859375 -0.0760477483272552490234375 +-0.116719000041484832763671875 0.20758950710296630859375 -0.0760477483272552490234375 +-0.116717301309108720253071567186 -0.0847993999719619667709835653113 0.684971702098846391137954014994 +-0.116717301309108720253071567186 0.0847993999719619667709835653113 0.684971702098846391137954014994 +-0.116657400131225594264172684689 0 -0.162453198432922385485710492503 +-0.116628601402044299040205999063 -0.503273648023605413293068977509 -0.188714906573295621017294365629 +-0.116628601402044299040205999063 0.503273648023605413293068977509 -0.188714906573295621017294365629 +-0.116592302918434156944194057814 -0.432241162657737765240284488755 0.319489499926567110943409488755 +-0.116592302918434156944194057814 0.432241162657737765240284488755 0.319489499926567110943409488755 +-0.116570299863815299290514815311 -0.608804696798324496143095529987 0.325219997763633694720653011245 +-0.116570299863815299290514815311 0.608804696798324496143095529987 0.325219997763633694720653011245 +-0.116550001502037037237613503748 -0.0558635011315345708649005018742 0.325261992216110185083266514994 +-0.116550001502037037237613503748 0.0558635011315345708649005018742 0.325261992216110185083266514994 +-0.11650049686431884765625 -0.1969934999942779541015625 -0.7142280042171478271484375 +-0.11650049686431884765625 0.1969934999942779541015625 -0.7142280042171478271484375 +-0.116495203971862804070980246252 -0.149943196773529047183259876874 0.777139186859130859375 +-0.116495203971862804070980246252 0.149943196773529047183259876874 0.777139186859130859375 +-0.116494497656822196263171065311 -0.0846378028392791720291299384371 -0.0420176982879638671875 +-0.116494497656822196263171065311 0.0846378028392791720291299384371 -0.0420176982879638671875 +-0.116414003074169158935546875 0 -0.2212415039539337158203125 +-0.116366994380950938836605246252 -0.160603201389312749691740123126 -0.0257943987846374518657643903907 +-0.116366994380950938836605246252 0.160603201389312749691740123126 -0.0257943987846374518657643903907 +-0.116354700922966000642411188437 -0.0640698015689849798004473768742 -0.0696897000074386541168536268742 +-0.116354700922966000642411188437 0.0640698015689849798004473768742 -0.0696897000074386541168536268742 +-0.116324996948242193051115123126 -0.100840604305267339535490123126 0.127670001983642589227230246252 +-0.116324996948242193051115123126 0.100840604305267339535490123126 0.127670001983642589227230246252 +-0.116258002817630767822265625 -0.290973007678985595703125 0.38963949680328369140625 +-0.116258002817630767822265625 0.290973007678985595703125 0.38963949680328369140625 +-0.1162413060665130615234375 -0.759516298770904541015625 0.468639904260635398181022992503 +-0.1162413060665130615234375 0.759516298770904541015625 0.468639904260635398181022992503 +-0.116178798675537112150557561563 -0.149067401885986328125 -0.0654323995113372802734375 +-0.116178798675537112150557561563 0.149067401885986328125 -0.0654323995113372802734375 +-0.116177594661712652035490123126 -0.30415999889373779296875 0.232355999946594254934595369377 +-0.116177594661712652035490123126 0.30415999889373779296875 0.232355999946594254934595369377 +-0.116165749728679656982421875 -0.14592124521732330322265625 0.16647075116634368896484375 +-0.116165749728679656982421875 0.14592124521732330322265625 0.16647075116634368896484375 +-0.116149199008941647615067438437 -0.0997016966342925969879473768742 -0.258009606599807705951121761245 +-0.116149199008941647615067438437 0.0997016966342925969879473768742 -0.258009606599807705951121761245 +-0.11609874665737152099609375 -0.14361350238323211669921875 -0.16851200163364410400390625 +-0.11609874665737152099609375 0.14361350238323211669921875 -0.16851200163364410400390625 +-0.116050398349761968441740123126 -0.357170391082763716283920985006 -0.1377007961273193359375 +-0.116050398349761968441740123126 0.357170391082763716283920985006 -0.1377007961273193359375 +-0.116038405895233162623547684689 -0.0678406000137329184829226846887 0.148097002506256097964509876874 +-0.116038405895233162623547684689 0.0678406000137329184829226846887 0.148097002506256097964509876874 +-0.115924948453903192691072376874 0 0.0951914995908737099350460653113 +-0.115883953869342803955078125 -0.611482310295105024877670985006 -0.187510691583156585693359375 +-0.115883953869342803955078125 0.611482310295105024877670985006 -0.187510691583156585693359375 +-0.115883195400238045436047684689 -0.642408800125122136925881477509 0.462474393844604536596420985006 +-0.115883195400238045436047684689 0.642408800125122136925881477509 0.462474393844604536596420985006 +-0.1158168017864227294921875 -0.587655615806579545434829014994 -0.0353154011070728260368589701557 +-0.1158168017864227294921875 0.587655615806579545434829014994 -0.0353154011070728260368589701557 +-0.1157990992069244384765625 -0.0399765014648437513877787807814 -0.273847496509551979748664507497 +-0.1157990992069244384765625 0.0399765014648437513877787807814 -0.273847496509551979748664507497 +-0.115797498822212227564953934689 -0.580401265621185324938835492503 -0.268747054040431976318359375 +-0.115797498822212227564953934689 0.580401265621185324938835492503 -0.268747054040431976318359375 +-0.1157497465610504150390625 -0.0916384488344192532638388115629 0.026540100574493408203125 +-0.1157497465610504150390625 0.0916384488344192532638388115629 0.026540100574493408203125 +-0.115636003017425548211605246252 -0.737534379959106534130341970013 -0.287526392936706565173210492503 +-0.115636003017425548211605246252 0.737534379959106534130341970013 -0.287526392936706565173210492503 +-0.115628700703382505943217495314 -0.472915297746658358502003238755 -0.255892999470233917236328125 +-0.115628700703382505943217495314 0.472915297746658358502003238755 -0.255892999470233917236328125 +-0.115565402805805211849943248126 -0.414863544702529896124332253748 -0.130510349571704875604183371252 +-0.115565402805805211849943248126 0.414863544702529896124332253748 -0.130510349571704875604183371252 +-0.115548399835824974757336747189 -0.355614596605300925524772992503 0.403344684839248679431022992503 +-0.115548399835824974757336747189 0.355614596605300925524772992503 0.403344684839248679431022992503 +-0.115532246232032773103348688437 -0.01233614981174468994140625 0.0948689997196197482010049384371 +-0.115532246232032773103348688437 0.01233614981174468994140625 0.0948689997196197482010049384371 +-0.115524297952651969212389815311 -0.047515802085399627685546875 0.0830444991588592529296875 +-0.115524297952651969212389815311 0.047515802085399627685546875 0.0830444991588592529296875 +-0.1155045032501220703125 -0.0591813012957572923133930942186 0.270474296808242808953792746252 +-0.1155045032501220703125 0.0591813012957572923133930942186 0.270474296808242808953792746252 +-0.11546699702739715576171875 -0.45560400187969207763671875 0.584459245204925537109375 +-0.11546699702739715576171875 0.45560400187969207763671875 0.584459245204925537109375 +-0.115278598666191098298661188437 -0.587311184406280495373664507497 0.042149998247623443603515625 +-0.115278598666191098298661188437 0.587311184406280495373664507497 0.042149998247623443603515625 +-0.115196001529693614617855246252 -0.181703197956085221731470369377 -0.337214803695678744244190738755 +-0.115196001529693614617855246252 0.181703197956085221731470369377 -0.337214803695678744244190738755 +-0.115182553231716153230301813437 -0.307769706845283486096320757497 0.120460899174213403872713001874 +-0.115182553231716153230301813437 0.307769706845283486096320757497 0.120460899174213403872713001874 +-0.115113604068756106291182561563 -0.354289603233337413445980246252 -0.707974386215210027550881477509 +-0.115113604068756106291182561563 0.354289603233337413445980246252 -0.707974386215210027550881477509 +-0.115036645531654352359041126874 -0.00990629978477954899196422644536 -0.0957519024610519325912960653113 +-0.115036645531654352359041126874 0.00990629978477954899196422644536 -0.0957519024610519325912960653113 +-0.114975251257419586181640625 -0.083534248173236846923828125 -0.20567624270915985107421875 +-0.114975251257419586181640625 0.083534248173236846923828125 -0.20567624270915985107421875 +-0.114962098002433774079911188437 -0.273894596099853504522769753748 0.0420176982879638671875 +-0.114962098002433774079911188437 0.273894596099853504522769753748 0.0420176982879638671875 +-0.114955198764801036492855246252 -0.103850996494293218441740123126 -0.126492202281951904296875 +-0.114955198764801036492855246252 0.103850996494293218441740123126 -0.126492202281951904296875 +-0.11494664847850799560546875 -0.0297577500343322726150674384371 -0.0916609525680541908920773153113 +-0.11494664847850799560546875 0.0297577500343322726150674384371 -0.0916609525680541908920773153113 +-0.114928805828094490748547684689 -0.769550418853759854442841970013 -0.185964798927307134457365123126 +-0.114928805828094490748547684689 0.769550418853759854442841970013 -0.185964798927307134457365123126 +-0.114906898140907279270983565311 -0.274873191118240323138621761245 -0.0352292999625205965896768134371 +-0.114906898140907279270983565311 0.274873191118240323138621761245 -0.0352292999625205965896768134371 +-0.114900451898574826326004938437 -0.0759437978267669677734375 0.0594175502657890292068643134371 +-0.114900451898574826326004938437 0.0759437978267669677734375 0.0594175502657890292068643134371 +-0.11487825214862823486328125 -0.0911213994026184026520098768742 -0.0316206000745296450515908759371 +-0.11487825214862823486328125 0.0911213994026184026520098768742 -0.0316206000745296450515908759371 +-0.1148746013641357421875 -0.0531032025814056410362162807814 -0.154867398738861100637720369377 +-0.1148746013641357421875 0.0531032025814056410362162807814 -0.154867398738861100637720369377 +-0.114805197715759269017077315311 -0.277163708209991421771434261245 0 +-0.114805197715759269017077315311 0.277163708209991421771434261245 0 +-0.114798949658870691470369251874 -0.274998492002487160412727007497 0.183567994832992548159822376874 +-0.114798949658870691470369251874 0.274998492002487160412727007497 0.183567994832992548159822376874 +-0.11477799713611602783203125 -0.991648018360137939453125 -0.0588279999792575836181640625 +-0.11477799713611602783203125 0.991648018360137939453125 -0.0588279999792575836181640625 +-0.114760005474090584498547684689 -0.247693991661071782894865123126 0.292365598678588856085269753748 +-0.114760005474090584498547684689 0.247693991661071782894865123126 0.292365598678588856085269753748 +-0.11473129689693450927734375 -0.769954660534858725817741742503 0.341331098973751079217464621252 +-0.11473129689693450927734375 0.769954660534858725817741742503 0.341331098973751079217464621252 +-0.114649605751037608758480246252 -0.525292015075683571545539507497 -0.592388010025024391858039507497 +-0.114649605751037608758480246252 0.525292015075683571545539507497 -0.592388010025024391858039507497 +-0.114631496369838714599609375 -0.103897750377655029296875 0.196379244327545166015625 +-0.114631496369838714599609375 0.103897750377655029296875 0.196379244327545166015625 +-0.114616343379020699244641434689 -0.120319645106792452726729436563 0.418193989992141745837272992503 +-0.114616343379020699244641434689 0.120319645106792452726729436563 0.418193989992141745837272992503 +-0.114606446027755742855802623126 -0.352728000283241305279346988755 -0.254849848151206981317073996252 +-0.114606446027755742855802623126 0.352728000283241305279346988755 -0.254849848151206981317073996252 +-0.1146048009395599365234375 -0.224815195798873906918302623126 -0.162246304750442493780582253748 +-0.1146048009395599365234375 0.224815195798873906918302623126 -0.162246304750442493780582253748 +-0.114463502168655389956697376874 -0.02273190021514892578125 0.0942411035299301064194210653113 +-0.114463502168655389956697376874 0.02273190021514892578125 0.0942411035299301064194210653113 +-0.114459204673767092619307561563 -0.691941595077514737255341970013 -0.38485920429229736328125 +-0.114459204673767092619307561563 0.691941595077514737255341970013 -0.38485920429229736328125 +-0.114430752396583554353348688437 -0.169820705056190485171541126874 0.283842298388481129034488503748 +-0.114430752396583554353348688437 0.169820705056190485171541126874 0.283842298388481129034488503748 +-0.114404404163360590152009876874 -0.0575416490435600239128355326557 -0.0781063467264175442794638115629 +-0.114404404163360590152009876874 0.0575416490435600239128355326557 -0.0781063467264175442794638115629 +-0.114393603801727292146317438437 -0.156747901439666742495759876874 0.228788691759109485968082253748 +-0.114393603801727292146317438437 0.156747901439666742495759876874 0.228788691759109485968082253748 +-0.11434049904346466064453125 -0.4831964969635009765625 -0.058715499937534332275390625 +-0.11434049904346466064453125 0.4831964969635009765625 -0.058715499937534332275390625 +-0.114214798808097831028796065311 -0.248132407665252685546875 -0.12403710186481475830078125 +-0.114214798808097831028796065311 0.248132407665252685546875 -0.12403710186481475830078125 +-0.114211653172969815339676813437 -0.0829787015914916908920773153113 0.320265758037567127569644753748 +-0.114211653172969815339676813437 0.0829787015914916908920773153113 0.320265758037567127569644753748 +-0.114184849709272381867997125937 -0.351418593525886557848991742503 0.534758889675140403063835492503 +-0.114184849709272381867997125937 0.351418593525886557848991742503 0.534758889675140403063835492503 +-0.114143204689025890008480246252 -0.265135192871093772204460492503 -0.276902008056640613897769753748 +-0.114143204689025890008480246252 0.265135192871093772204460492503 -0.276902008056640613897769753748 +-0.114128953218460088558927623126 -0.211159004271030431576505748126 -0.604057985544204756322983485006 +-0.114128953218460088558927623126 0.211159004271030431576505748126 -0.604057985544204756322983485006 +-0.1141088008880615234375 -0.148696804046630853823884876874 0.35336720943450927734375 +-0.1141088008880615234375 0.148696804046630853823884876874 0.35336720943450927734375 +-0.114101547002792361173995061563 -0.254028609395027193951221988755 -0.35348309576511383056640625 +-0.114101547002792361173995061563 0.254028609395027193951221988755 -0.35348309576511383056640625 +-0.114061045646667469366519753748 -0.0974170535802841158767861884371 0 +-0.114061045646667469366519753748 0.0974170535802841158767861884371 0 +-0.114053595066070559416182561563 -0.156040394306182883532585492503 0.0514118015766143812705912807814 +-0.114053595066070559416182561563 0.156040394306182883532585492503 0.0514118015766143812705912807814 +-0.114051498472690582275390625 -0.351020991802215576171875 -0.337307512760162353515625 +-0.114051498472690582275390625 0.351020991802215576171875 -0.337307512760162353515625 +-0.114014697074890133943192438437 -0.231016060709953313656583873126 0.368960863351821932720753238755 +-0.114014697074890133943192438437 0.231016060709953313656583873126 0.368960863351821932720753238755 +-0.114003002643585205078125 -0.54516327381134033203125 -0.7069661915302276611328125 +-0.114003002643585205078125 0.54516327381134033203125 -0.7069661915302276611328125 +-0.113989748060703263710102817186 -0.199897599220275862252904630623 -0.263718339800834644659488503748 +-0.113989748060703263710102817186 0.199897599220275862252904630623 -0.263718339800834644659488503748 +-0.113988496363162994384765625 -0.0330209992825984954833984375 -0.485711991786956787109375 +-0.113988496363162994384765625 0.0330209992825984954833984375 -0.485711991786956787109375 +-0.113982295989990226048327315311 -0.203672093152999861276342130623 0.1884824931621551513671875 +-0.113982295989990226048327315311 0.203672093152999861276342130623 0.1884824931621551513671875 +-0.113962805271148687191740123126 -0.131255400180816661492855246252 0.0989167988300323486328125 +-0.113962805271148687191740123126 0.131255400180816661492855246252 0.0989167988300323486328125 +-0.1139355003833770751953125 -0.0827782541513442937652911268742 0.0516377985477447509765625 +-0.1139355003833770751953125 0.0827782541513442937652911268742 0.0516377985477447509765625 +-0.11375249922275543212890625 -0.21983574330806732177734375 0.0351080000400543212890625 +-0.11375249922275543212890625 0.21983574330806732177734375 0.0351080000400543212890625 +-0.1137270033359527587890625 -0.157231807708740234375 -0.228788691759109485968082253748 +-0.1137270033359527587890625 0.157231807708740234375 -0.228788691759109485968082253748 +-0.113719204068183893374666126874 -0.349996495246887195929019753748 -0.595457804203033402856704014994 +-0.113719204068183893374666126874 0.349996495246887195929019753748 -0.595457804203033402856704014994 +-0.113693797588348396998547684689 0 0.164540994167327897512720369377 +-0.11366949975490570068359375 -0.22070924937725067138671875 -0.02943974919617176055908203125 +-0.11366949975490570068359375 0.22070924937725067138671875 -0.02943974919617176055908203125 +-0.113654449582099900672993442186 -0.275250500440597511975227007497 -0.183901551365852344854801003748 +-0.113654449582099900672993442186 0.275250500440597511975227007497 -0.183901551365852344854801003748 +-0.11358200013637542724609375 -0.991046011447906494140625 0.070197999477386474609375 +-0.11358200013637542724609375 0.991046011447906494140625 0.070197999477386474609375 +-0.11349774897098541259765625 -0.22275149822235107421875 0 +-0.11349774897098541259765625 0.22275149822235107421875 0 +-0.113356099277734767571956808752 0 -0.538192051649093672338608485006 +-0.11330950260162353515625 -0.4819304943084716796875 0.0700294971466064453125 +-0.11330950260162353515625 -0.18198825418949127197265625 0.12861250340938568115234375 +-0.11330950260162353515625 0.18198825418949127197265625 0.12861250340938568115234375 +-0.11330950260162353515625 0.4819304943084716796875 0.0700294971466064453125 +-0.113308000564575198088057561563 -0.0164644002914428703998606096093 0.163982403278350841180355246252 +-0.113308000564575198088057561563 0.0164644002914428703998606096093 0.163982403278350841180355246252 +-0.1133062541484832763671875 -0.73611223697662353515625 -0.08831849880516529083251953125 +-0.1133062541484832763671875 0.73611223697662353515625 -0.08831849880516529083251953125 +-0.113268451392650598696931751874 -0.166948500275611866339176003748 -0.8257103860378265380859375 +-0.113268451392650598696931751874 0.166948500275611866339176003748 -0.8257103860378265380859375 +-0.11325104534626007080078125 -0.0596556007862091078330912807814 -0.431410950422286998406917746252 +-0.11325104534626007080078125 0.0596556007862091078330912807814 -0.431410950422286998406917746252 +-0.113213097304105766993664872189 -0.487357658147811900750667746252 -0.414928165078163158074886496252 +-0.113213097304105766993664872189 0.487357658147811900750667746252 -0.414928165078163158074886496252 +-0.113159203529357918482922684689 -0.156690204143524192126335492503 -0.0514118015766143812705912807814 +-0.113159203529357918482922684689 0.156690204143524192126335492503 -0.0514118015766143812705912807814 +-0.113155451416969296540848688437 -0.753012728691101029809829014994 -0.56803826987743377685546875 +-0.113155451416969296540848688437 0.753012728691101029809829014994 -0.56803826987743377685546875 +-0.113114695250988009367354436563 -0.229658406972885142938167746252 0.862821900844573996813835492503 +-0.113114695250988009367354436563 0.229658406972885142938167746252 0.862821900844573996813835492503 +-0.113016602396965024079911188437 -0.08211059868335723876953125 0.265490394830703746453792746252 +-0.113016602396965024079911188437 0.08211059868335723876953125 0.265490394830703746453792746252 +-0.112956154346466053350894753748 -0.0971114963293075589279013115629 0.0176146499812602982948384067186 +-0.112956154346466053350894753748 0.0971114963293075589279013115629 0.0176146499812602982948384067186 +-0.11294759809970855712890625 -0.240449702739715553967414507497 0.139379999041557317562833873126 +-0.11294759809970855712890625 0.240449702739715553967414507497 0.139379999041557317562833873126 +-0.112919399142265314273103626874 -0.069847650825977325439453125 0.069788999855518341064453125 +-0.112919399142265314273103626874 0.069847650825977325439453125 0.069788999855518341064453125 +-0.112902152538299549444644753748 -0.0487291485071182223220986884371 -0.0858985483646392822265625 +-0.112902152538299549444644753748 0.0487291485071182223220986884371 -0.0858985483646392822265625 +-0.112882804870605479852230246252 -0.347412395477294966283920985006 0.162978804111480718441740123126 +-0.112882804870605479852230246252 0.347412395477294966283920985006 0.162978804111480718441740123126 +-0.1128370463848114013671875 -0.0330169491469860035270933451557 0.0931540489196777260483273153113 +-0.1128370463848114013671875 0.0330169491469860035270933451557 0.0931540489196777260483273153113 +-0.112833201885223388671875 -0.09217560291290283203125 -0.137012004852294921875 +-0.112833201885223388671875 0.09217560291290283203125 -0.137012004852294921875 +-0.112792798876762384585603626874 -0.268920296430587735247996761245 -0.0704247012734413174728231865629 +-0.112792798876762384585603626874 0.268920296430587735247996761245 -0.0704247012734413174728231865629 +-0.112783053517341622096203934689 -0.407176655530929576531917746252 0.154878754913806926385433371252 +-0.112783053517341622096203934689 0.407176655530929576531917746252 0.154878754913806926385433371252 +-0.112738499045372003726228626874 -0.300946453213691678119090511245 -0.138640950620174396856754128748 +-0.112738499045372003726228626874 0.300946453213691678119090511245 -0.138640950620174396856754128748 +-0.1127144992351531982421875 -0.1320399940013885498046875 -0.468892991542816162109375 +-0.1127144992351531982421875 0.1320399940013885498046875 -0.468892991542816162109375 +-0.112610399723052978515625 -0.0162704005837440504600444057814 0.383476400375366233141960492503 +-0.112610399723052978515625 0.0162704005837440504600444057814 0.383476400375366233141960492503 +-0.112497794628143313322432561563 -0.0322005987167358412315287807814 0.162195396423339854852230246252 +-0.112497794628143313322432561563 0.0322005987167358412315287807814 0.162195396423339854852230246252 +-0.112482297420501711759932561563 -0.09698639810085296630859375 -0.02100884914398193359375 +-0.112482297420501711759932561563 0.09698639810085296630859375 -0.02100884914398193359375 +-0.112454795837402352076672684689 -0.114249205589294439144865123126 0.119587004184722900390625 +-0.112454795837402352076672684689 0.114249205589294439144865123126 0.119587004184722900390625 +-0.112449002265930173005692438437 -0.0892338037490844754318075615629 0.0435034498572349562217631557814 +-0.112449002265930173005692438437 0.0892338037490844754318075615629 0.0435034498572349562217631557814 +-0.112430700659751886538728626874 -0.0572574019432067829460386576557 0.0811230003833770668686398153113 +-0.112430700659751886538728626874 0.0572574019432067829460386576557 0.0811230003833770668686398153113 +-0.112411201000213623046875 -0.474099612236022927014289507497 -0.350132989883422840460269753748 +-0.112411201000213623046875 0.474099612236022927014289507497 -0.350132989883422840460269753748 +-0.11232425272464752197265625 -0.0332675017416477203369140625 -0.2208542525768280029296875 +-0.11232425272464752197265625 0.0332675017416477203369140625 -0.2208542525768280029296875 +-0.1122962534427642822265625 -0.21566699445247650146484375 -0.0581142492592334747314453125 +-0.1122962534427642822265625 0.21566699445247650146484375 -0.0581142492592334747314453125 +-0.112286302447319019659488503748 -0.0464768491685390444656533759371 -0.328225094079971302374332253748 +-0.112286302447319019659488503748 0.0464768491685390444656533759371 -0.328225094079971302374332253748 +-0.112190999090671539306640625 -0.1317470073699951171875 -0.984914004802703857421875 +-0.112190999090671539306640625 0.1317470073699951171875 -0.984914004802703857421875 +-0.112179897725582108924946567186 -0.253110203146934498175113503748 0.6429233849048614501953125 +-0.112179897725582108924946567186 0.253110203146934498175113503748 0.6429233849048614501953125 +-0.112176002562046059352063309689 -0.345249009132385265008480246252 -0.823540520668029851769631477509 +-0.112176002562046059352063309689 0.345249009132385265008480246252 -0.823540520668029851769631477509 +-0.112145197391510020867855246252 -0.140123403072357183285490123126 0.0882543981075286920745526231258 +-0.112145197391510020867855246252 0.140123403072357183285490123126 0.0882543981075286920745526231258 +-0.112117500603199013453625809689 -0.109111750125885018092297684689 -0.527280050516128584447983485006 +-0.112117500603199013453625809689 0.109111750125885018092297684689 -0.527280050516128584447983485006 +-0.112096302956342694367997125937 -0.569165074825286887438835492503 0.621276897192001298364516514994 +-0.112096302956342694367997125937 0.569165074825286887438835492503 0.621276897192001298364516514994 +-0.112021994590759288445980246252 -0.0484759986400604275802450615629 0.3809216022491455078125 +-0.112021994590759288445980246252 0.0484759986400604275802450615629 0.3809216022491455078125 +-0.112019248306751251220703125 -0.18618099391460418701171875 -0.123645998537540435791015625 +-0.112019248306751251220703125 0.18618099391460418701171875 -0.123645998537540435791015625 +-0.11199200153350830078125 0 0.4872964918613433837890625 +-0.111989396810531618986495061563 -0.579985785484313898230368522491 -0.10523580014705657958984375 +-0.111989396810531618986495061563 0.579985785484313898230368522491 -0.10523580014705657958984375 +-0.11198695003986358642578125 -0.471613237261772122455028011245 0.817031326889991693640524772491 +-0.11198695003986358642578125 0.471613237261772122455028011245 0.817031326889991693640524772491 +-0.111978301405906671694978626874 -0.0461915977299213395546040317186 -0.6894398033618927001953125 +-0.111978301405906671694978626874 0.0461915977299213395546040317186 -0.6894398033618927001953125 +-0.1119740009307861328125 0 0.993710994720458984375 +-0.111951899528503415193192438437 -0.265427398681640613897769753748 0.0837558031082153292556924384371 +-0.111951899528503415193192438437 0.265427398681640613897769753748 0.0837558031082153292556924384371 +-0.111857898533344254921040317186 -0.5305509865283966064453125 0.442722707986831609527911268742 +-0.111857898533344254921040317186 0.5305509865283966064453125 0.442722707986831609527911268742 +-0.111839401721954348478682561563 -0.013348199427127838134765625 -0.165268802642822287829460492503 +-0.111839401721954348478682561563 0.013348199427127838134765625 -0.165268802642822287829460492503 +-0.111804001033306121826171875 -0.21266199648380279541015625 0.069099247455596923828125 +-0.111804001033306121826171875 0.21266199648380279541015625 0.069099247455596923828125 +-0.111802749335765838623046875 -0.13143174350261688232421875 -0.18090300261974334716796875 +-0.111802749335765838623046875 0.13143174350261688232421875 -0.18090300261974334716796875 +-0.11180250346660614013671875 0 0.22360725700855255126953125 +-0.111738896369934073704577315311 -0.0198853500187397003173828125 -0.09807644784450531005859375 +-0.111738896369934073704577315311 0.0198853500187397003173828125 -0.09807644784450531005859375 +-0.111700199544429779052734375 -0.706187647581100419458266514994 -0.459697863459587074963508257497 +-0.111700199544429779052734375 0.706187647581100419458266514994 -0.459697863459587074963508257497 +-0.111668150126934054289229436563 -0.490051656961441095550213731258 0.223336857557296764031917746252 +-0.111668150126934054289229436563 0.490051656961441095550213731258 0.223336857557296764031917746252 +-0.111628003418445587158203125 -0.0402855016291141510009765625 0.485711991786956787109375 +-0.111628003418445587158203125 0.0402855016291141510009765625 0.485711991786956787109375 +-0.11160600185394287109375 -0.0810854017734527615646200615629 0.144807600975036615542634876874 +-0.11160600185394287109375 0.0810854017734527615646200615629 0.144807600975036615542634876874 +-0.11160500347614288330078125 -0.0810849964618682861328125 0.990438997745513916015625 +-0.11160500347614288330078125 0.0810849964618682861328125 0.990438997745513916015625 +-0.1115677468478679656982421875 -0.73413826525211334228515625 0.1053240001201629638671875 +-0.1115677468478679656982421875 0.73413826525211334228515625 0.1053240001201629638671875 +-0.111517405509948736019865123126 -0.165429401397705094778345369377 0.0140353992581367503084122105861 +-0.111517405509948736019865123126 0.165429401397705094778345369377 0.0140353992581367503084122105861 +-0.11145775020122528076171875 -0.01961450092494487762451171875 0.2229180037975311279296875 +-0.11145775020122528076171875 0.01961450092494487762451171875 0.2229180037975311279296875 +-0.111394202709198003597990123126 -0.165689396858215348684595369377 -0.01176320016384124755859375 +-0.111394202709198003597990123126 0.165689396858215348684595369377 -0.01176320016384124755859375 +-0.11135800182819366455078125 -0.4730989933013916015625 -0.117374502122402191162109375 +-0.11135800182819366455078125 0.4730989933013916015625 -0.117374502122402191162109375 +-0.111315599083900443333483565311 -0.422678983211517311779914507497 0.411036586761474587170539507497 +-0.111315599083900443333483565311 0.422678983211517311779914507497 0.411036586761474587170539507497 +-0.111243595927953728419446122189 -0.600520050525665260998664507497 0.222486552596092235223323996252 +-0.111243595927953728419446122189 0.600520050525665260998664507497 0.222486552596092235223323996252 +-0.111117999255657184942691628748 -0.492784601449966386255141514994 -0.484578514099121060443309261245 +-0.111117999255657184942691628748 0.492784601449966386255141514994 -0.484578514099121060443309261245 +-0.110991100221872335263029185626 -0.125892803817987453118831808752 0.5237672030925750732421875 +-0.110991100221872335263029185626 0.125892803817987453118831808752 0.5237672030925750732421875 +-0.110980200767517092619307561563 -0.0477344006299972589690838731258 0.159388804435730002673210492503 +-0.110980200767517092619307561563 0.0477344006299972589690838731258 0.159388804435730002673210492503 +-0.110860803723335260562166126874 -0.2133834064006805419921875 -0.1793805062770843505859375 +-0.110860803723335260562166126874 0.2133834064006805419921875 -0.1793805062770843505859375 +-0.110822850465774530581697376874 -0.0805171519517898504059161268742 -0.0611168995499610859245542826557 +-0.110822850465774530581697376874 0.0805171519517898504059161268742 -0.0611168995499610859245542826557 +-0.110805147886276239566072376874 -0.07285635173320770263671875 -0.070101298391819000244140625 +-0.110805147886276239566072376874 0.07285635173320770263671875 -0.070101298391819000244140625 +-0.11072610318660736083984375 0 -0.101191502809524533357254938437 +-0.110705401003360751066573186563 -0.146666702628135692254573996252 -0.410771700739860523565738503748 +-0.110705401003360751066573186563 0.146666702628135692254573996252 -0.410771700739860523565738503748 +-0.110694301128387448396317438437 -0.0396121501922607407997212192186 -0.0931538969278335599044638115629 +-0.110694301128387448396317438437 0.0396121501922607407997212192186 -0.0931538969278335599044638115629 +-0.110680145025253293122879938437 -0.247485345602035500256477007497 0.221361353993415804763955634371 +-0.110680145025253293122879938437 0.247485345602035500256477007497 0.221361353993415804763955634371 +-0.110635496675968170166015625 -0.12155850231647491455078125 0.18837000429630279541015625 +-0.110635496675968170166015625 0.12155850231647491455078125 0.18837000429630279541015625 +-0.110559201240539556332365123126 -0.7608439922332763671875 0.221117591857910161801115123126 +-0.110559201240539556332365123126 0.7608439922332763671875 0.221117591857910161801115123126 +-0.110557603836059573088057561563 -0.340255188941955610815170985006 0.7155439853668212890625 +-0.110557603836059573088057561563 0.340255188941955610815170985006 0.7155439853668212890625 +-0.110554003715515145045422684689 -0.340255999565124533923210492503 -0.178885996341705322265625 +-0.110554003715515145045422684689 0.340255999565124533923210492503 -0.178885996341705322265625 +-0.110537998378276824951171875 -0.080309502780437469482421875 0.480969488620758056640625 +-0.110537998378276824951171875 0.080309502780437469482421875 0.480969488620758056640625 +-0.110485053062438956517077315311 -0.0434887513518333393425230326557 0.0916612476110458401779013115629 +-0.110485053062438956517077315311 0.0434887513518333393425230326557 0.0916612476110458401779013115629 +-0.110453999042510991879240123126 -0.131200599670410172903345369377 -0.102890002727508547697432561563 +-0.110453999042510991879240123126 0.131200599670410172903345369377 -0.102890002727508547697432561563 +-0.110451900959014887027009876874 -0.09518654644489288330078125 0.0352123506367206587364115932814 +-0.110451900959014887027009876874 0.09518654644489288330078125 0.0352123506367206587364115932814 +-0.110450498759746551513671875 -0.1618514955043792724609375 0.15525700151920318603515625 +-0.110450498759746551513671875 0.1618514955043792724609375 0.15525700151920318603515625 +-0.110426001250743865966796875 -0.039108000695705413818359375 0.22085450589656829833984375 +-0.110426001250743865966796875 0.039108000695705413818359375 0.22085450589656829833984375 +-0.110361599922180184107922684689 0 -0.792351198196411199425881477509 +-0.11035700142383575439453125 -0.946196973323822021484375 -0.30419099330902099609375 +-0.11035700142383575439453125 0.946196973323822021484375 -0.30419099330902099609375 +-0.110191798210144034642077315311 -0.0877070993185043307205361884371 -0.0516260996460914597938618442186 +-0.110191798210144034642077315311 0.0877070993185043307205361884371 -0.0516260996460914597938618442186 +-0.110162702947855004054211747189 -0.398233795166015647204460492503 -0.178252650797367101498380748126 +-0.110162702947855004054211747189 0.398233795166015647204460492503 -0.178252650797367101498380748126 +-0.110098804533481586798160378748 -0.113934454321861264314286188437 -0.312085205316543545794871761245 +-0.110098804533481586798160378748 0.113934454321861264314286188437 -0.312085205316543545794871761245 +-0.1100018024444580078125 -0.0799207985401153564453125 -0.146670603752136224917634876874 +-0.1100018024444580078125 0.0799207985401153564453125 -0.146670603752136224917634876874 +-0.1099720001220703125 -0.89679801464080810546875 -0.428553998470306396484375 +-0.1099720001220703125 0.89679801464080810546875 -0.428553998470306396484375 +-0.109940195083618172389172684689 -0.04007320106029510498046875 -0.1621952056884765625 +-0.109940195083618172389172684689 0.04007320106029510498046875 -0.1621952056884765625 +-0.109906502068042755126953125 -0.19295899569988250732421875 0.114836253225803375244140625 +-0.109906502068042755126953125 0.19295899569988250732421875 0.114836253225803375244140625 +-0.109886696934700003880358565311 -0.259478706121444691046207253748 -0.1029354035854339599609375 +-0.109886696934700003880358565311 0.259478706121444691046207253748 -0.1029354035854339599609375 +-0.109810200333595273103348688437 -0.5763924121856689453125 0.12535379827022552490234375 +-0.109810200333595273103348688437 0.5763924121856689453125 0.12535379827022552490234375 +-0.10978345572948455810546875 -0.7173209488391876220703125 0.442604354023933388440070757497 +-0.10978345572948455810546875 0.7173209488391876220703125 0.442604354023933388440070757497 +-0.109778550267219540681473688437 -0.101836797595024106111161188437 0.00882885027676820650921474253892 +-0.109778550267219540681473688437 0.101836797595024106111161188437 0.00882885027676820650921474253892 +-0.109743699431419386436381557814 -0.454908856749534629138054242503 -0.288988152146339438708366742503 +-0.109743699431419386436381557814 0.454908856749534629138054242503 -0.288988152146339438708366742503 +-0.109741604328155523129240123126 -0.0797308027744293296157351846887 0.37629759311676025390625 +-0.109741604328155523129240123126 0.0797308027744293296157351846887 0.37629759311676025390625 +-0.1096889972686767578125 -0.162433600425720220394865123126 0.0397949993610382107833700615629 +-0.1096889972686767578125 0.162433600425720220394865123126 0.0397949993610382107833700615629 +-0.1096343994140625 -0.140796005725860595703125 -0.0903150022029876736739950615629 +-0.1096343994140625 0.140796005725860595703125 -0.0903150022029876736739950615629 +-0.10961879789829254150390625 -0.101846399903297427091963811563 -0.01053749956190586090087890625 +-0.10961879789829254150390625 0.101846399903297427091963811563 -0.01053749956190586090087890625 +-0.1096107959747314453125 -0.0796368002891540555099325615629 -0.376355600357055675164730246252 +-0.1096107959747314453125 0.0796368002891540555099325615629 -0.376355600357055675164730246252 +-0.10953749716281890869140625 -0.19754199683666229248046875 -0.10713849961757659912109375 +-0.10953749716281890869140625 0.19754199683666229248046875 -0.10713849961757659912109375 +-0.109504498541355119178852817186 -0.6913816034793853759765625 0 +-0.109504498541355119178852817186 -0.262284395098686229363948996252 -0.204244244098663318975894753748 +-0.109504498541355119178852817186 0.262284395098686229363948996252 -0.204244244098663318975894753748 +-0.109504498541355119178852817186 0.6913816034793853759765625 0 +-0.109332596510648735743664872189 -0.026416649110615253448486328125 0.64019410312175750732421875 +-0.109332596510648735743664872189 0.026416649110615253448486328125 0.64019410312175750732421875 +-0.109323002398014068603515625 -0.5524489879608154296875 -0.82634699344635009765625 +-0.109323002398014068603515625 0.5524489879608154296875 -0.82634699344635009765625 +-0.109306395053863525390625 0 -0.384775590896606456414730246252 +-0.109285604953765880242855246252 -0.148698401451110850945980246252 0.0771067976951599204360476846887 +-0.109285604953765880242855246252 0.148698401451110850945980246252 0.0771067976951599204360476846887 +-0.109270203113555910978682561563 -0.163246405124664317742855246252 -0.0375582009553909329513388115629 +-0.109270203113555910978682561563 0.163246405124664317742855246252 -0.0375582009553909329513388115629 +-0.109245845675468439273103626874 -0.289500054717063859399672764994 0.163570050895214064157201505623 +-0.109245845675468439273103626874 0.289500054717063859399672764994 0.163570050895214064157201505623 +-0.1092187464237213134765625 -0.177241504192352294921875 -0.13840775191783905029296875 +-0.1092187464237213134765625 0.177241504192352294921875 -0.13840775191783905029296875 +-0.109214253723621368408203125 -0.1405717469751834869384765625 0.7285679876804351806640625 +-0.109214253723621368408203125 0.1405717469751834869384765625 0.7285679876804351806640625 +-0.109097698330879205874666126874 -0.00618750024586915952501398052732 0.10275900363922119140625 +-0.109097698330879205874666126874 0.00618750024586915952501398052732 0.10275900363922119140625 +-0.109077447652816766909822376874 -0.06642960011959075927734375 -0.0786717027425765935699786268742 +-0.109077447652816766909822376874 0.06642960011959075927734375 -0.0786717027425765935699786268742 +-0.1090745031833648681640625 -0.4675644934177398681640625 0.13959300518035888671875 +-0.1090745031833648681640625 0.4675644934177398681640625 0.13959300518035888671875 +-0.109039097279310215338199441248 -0.942065617442131020276008257497 -0.0558865999802947016616982978121 +-0.109039097279310215338199441248 0.942065617442131020276008257497 -0.0558865999802947016616982978121 +-0.108966296911239615696764815311 -0.0199812009930610649799387346093 -0.278795707225799549444644753748 +-0.108966296911239615696764815311 0.0199812009930610649799387346093 -0.278795707225799549444644753748 +-0.108928501605987548828125 -0.066379003226757049560546875 -0.21500800549983978271484375 +-0.108928501605987548828125 0.066379003226757049560546875 -0.21500800549983978271484375 +-0.108921146392822257298327315311 -0.0942466467618942177475460653113 -0.0418779015541076646278462192186 +-0.108921146392822257298327315311 0.0942466467618942177475460653113 -0.0418779015541076646278462192186 +-0.108896997570991513337723688437 -0.177600002288818364926115123126 0.562672197818756103515625 +-0.108896997570991513337723688437 0.177600002288818364926115123126 0.562672197818756103515625 +-0.108886950463056561555497125937 -0.335125359892845142706363503748 -0.279882904887199412957698996252 +-0.108886950463056561555497125937 0.335125359892845142706363503748 -0.279882904887199412957698996252 +-0.108744898438453668765291126874 -0.0668038487434387123764523153113 0.0788149505853652926345986884371 +-0.108744898438453668765291126874 0.0668038487434387123764523153113 0.0788149505853652926345986884371 +-0.108733797073364252261384876874 -0.183860599994659423828125 -0.666612803936004638671875 +-0.108733797073364252261384876874 0.183860599994659423828125 -0.666612803936004638671875 +-0.108724200725555414370759876874 -0.0789923965930938720703125 -0.584755790233612016137954014994 +-0.108724200725555414370759876874 0.0789923965930938720703125 -0.584755790233612016137954014994 +-0.108713500201702117919921875 -0.0583602488040924072265625 0.2174292504787445068359375 +-0.108713500201702117919921875 0.0583602488040924072265625 0.2174292504787445068359375 +-0.1086404956877231597900390625 -0.60225825011730194091796875 0.43356974422931671142578125 +-0.1086404956877231597900390625 0.60225825011730194091796875 0.43356974422931671142578125 +-0.108540898561477652806139815311 -0.1763336956501007080078125 0.2170836031436920166015625 +-0.108540898561477652806139815311 0.1763336956501007080078125 0.2170836031436920166015625 +-0.108539995551109311189286188437 -0.0788589030504226601303585653113 -0.268328708410263072625667746252 +-0.108539995551109311189286188437 -0.0788580000400543185135049384371 0.067082248628139495849609375 +-0.108539995551109311189286188437 0.0788580000400543185135049384371 0.067082248628139495849609375 +-0.108539995551109311189286188437 0.0788589030504226601303585653113 -0.268328708410263072625667746252 +-0.108443403244018563014172684689 -0.0952437996864318875411825615629 0.138451004028320306948884876874 +-0.108443403244018563014172684689 0.0952437996864318875411825615629 0.138451004028320306948884876874 +-0.108440748602151873503096624063 -0.333751550316810641216846988755 -0.423498350381851240697983485006 +-0.108440748602151873503096624063 0.333751550316810641216846988755 -0.423498350381851240697983485006 +-0.108411598205566409025557561563 -0.0184090498834848410869557966407 0.102019795775413507632478626874 +-0.108411598205566409025557561563 0.0184090498834848410869557966407 0.102019795775413507632478626874 +-0.1084087528288364410400390625 -0.69143848121166229248046875 -0.269555993378162384033203125 +-0.1084087528288364410400390625 0.69143848121166229248046875 -0.269555993378162384033203125 +-0.1083803512156009674072265625 -0.0787422999739646883865518134371 0.636045151948928855212272992503 +-0.1083803512156009674072265625 0.0787422999739646883865518134371 0.636045151948928855212272992503 +-0.108351998031139373779296875 -0.978529989719390869140625 -0.17532299458980560302734375 +-0.108351998031139373779296875 0.978529989719390869140625 -0.17532299458980560302734375 +-0.108310604095458992701672684689 -0.123090398311615001336605246252 -0.114531803131103518400557561563 +-0.108310604095458992701672684689 0.123090398311615001336605246252 -0.114531803131103518400557561563 +-0.108243849873542782868973688437 -0.565318647027015730444077235006 0.301989997923374164923160378748 +-0.108243849873542782868973688437 0.565318647027015730444077235006 0.301989997923374164923160378748 +-0.10815595090389251708984375 -0.332869601249694779809829014994 0 +-0.10815595090389251708984375 0.332869601249694779809829014994 0 +-0.108144602179527274388171065311 -0.332841002941131558490184261245 -0.487361383438110307153579014994 +-0.108144602179527274388171065311 0.332841002941131558490184261245 -0.487361383438110307153579014994 +-0.108127498626708978823884876874 -0.138263404369354248046875 -0.243293398618698114566072376874 +-0.108127498626708978823884876874 0.138263404369354248046875 -0.243293398618698114566072376874 +-0.108067202568054201994307561563 -0.177580404281616227590845369377 0.341740393638610862048210492503 +-0.108067202568054201994307561563 0.177580404281616227590845369377 0.341740393638610862048210492503 +-0.108065650612115871087581808752 -0.455643087625503595550213731258 0.288463991880416881219417746252 +-0.108065650612115871087581808752 0.455643087625503595550213731258 0.288463991880416881219417746252 +-0.108039252460002913047709682814 -0.259001047909259818347038617503 0.473018136620521556512386496252 +-0.108039252460002913047709682814 0.259001047909259818347038617503 0.473018136620521556512386496252 +-0.108021549880504608154296875 -0.181738910079002363717748380623 -0.278930741548538196905582253748 +-0.108021549880504608154296875 0.181738910079002363717748380623 -0.278930741548538196905582253748 +-0.1080141961574554443359375 -0.19334419071674346923828125 0.271018302440643288342414507497 +-0.1080141961574554443359375 0.19334419071674346923828125 0.271018302440643288342414507497 +-0.10800039768218994140625 -0.246180796623230002673210492503 -0.296194410324096712994190738755 +-0.10800039768218994140625 0.246180796623230002673210492503 -0.296194410324096712994190738755 +-0.1079823970794677734375 -0.724663209915161199425881477509 0.321252799034118685650440738755 +-0.1079823970794677734375 0.724663209915161199425881477509 0.321252799034118685650440738755 +-0.1079190038144588470458984375 -0.332146503031253814697265625 -0.66372598707675933837890625 +-0.1079190038144588470458984375 0.332146503031253814697265625 -0.66372598707675933837890625 +-0.107902900129556653108231500937 -0.941493710875511147229133257497 0.0666880995035171453277911268742 +-0.107902900129556653108231500937 0.941493710875511147229133257497 0.0666880995035171453277911268742 +-0.10787759721279144287109375 -0.100847697257995597142077315311 0.0263089500367641448974609375 +-0.10787759721279144287109375 0.100847697257995597142077315311 0.0263089500367641448974609375 +-0.107853400707244875822432561563 -0.126914799213409423828125 0.110726201534271248561047684689 +-0.107853400707244875822432561563 0.126914799213409423828125 0.110726201534271248561047684689 +-0.10785059630870819091796875 -0.0298639498651027679443359375 -0.0998820036649703951736611884371 +-0.10785059630870819091796875 0.0298639498651027679443359375 -0.0998820036649703951736611884371 +-0.107842496037483207005358565311 -0.05788560211658477783203125 -0.0867135018110275213043536268742 +-0.107842496037483207005358565311 0.05788560211658477783203125 -0.0867135018110275213043536268742 +-0.10784040391445159912109375 -0.252052205801010120733707253748 0.121820104122161862458817438437 +-0.10784040391445159912109375 0.252052205801010120733707253748 0.121820104122161862458817438437 +-0.107816004753112801295422684689 -0.384475207328796420025440738755 -0.0235464006662368802169638115629 +-0.107816004753112801295422684689 0.384475207328796420025440738755 -0.0235464006662368802169638115629 +-0.107787001132965090666182561563 -0.00998489968478679691676891394536 -0.10383765399456024169921875 +-0.107787001132965090666182561563 0.00998489968478679691676891394536 -0.10383765399456024169921875 +-0.107769197225570670384264815311 -0.425230401754379261358707253748 0.545495295524597079150908029987 +-0.107769197225570670384264815311 0.425230401754379261358707253748 0.545495295524597079150908029987 +-0.1077457554638385772705078125 -0.7214535176753997802734375 -0.174341998994350433349609375 +-0.1077457554638385772705078125 0.7214535176753997802734375 -0.174341998994350433349609375 +-0.107733902335166928376786188437 -0.0858076483011245699783486884371 0.0594175502657890292068643134371 +-0.107733902335166928376786188437 0.0858076483011245699783486884371 0.0594175502657890292068643134371 +-0.1076695024967193603515625 -0.514876425266265869140625 -0.66769029200077056884765625 +-0.1076695024967193603515625 0.514876425266265869140625 -0.66769029200077056884765625 +-0.107650005817413338404797684689 -0.149886798858642589227230246252 -0.0771066009998321588714276231258 +-0.107650005817413338404797684689 0.149886798858642589227230246252 -0.0771066009998321588714276231258 +-0.10755644738674163818359375 -0.0537334486842155414909605326557 0.0896901011466979952713174384371 +-0.10755644738674163818359375 0.0537334486842155414909605326557 0.0896901011466979952713174384371 +-0.107539851218462004234233120314 -0.212246093153953568899439119377 -0.495869544148445196007912727509 +-0.107539851218462004234233120314 0.212246093153953568899439119377 -0.495869544148445196007912727509 +-0.107502996921539306640625 -0.116052500903606414794921875 -0.193584501743316650390625 +-0.107502996921539306640625 0.116052500903606414794921875 -0.193584501743316650390625 +-0.107484805583953860197432561563 -0.384261608123779296875 0.028105199337005615234375 +-0.107484805583953860197432561563 0.384261608123779296875 0.028105199337005615234375 +-0.107484005391597747802734375 -0.492461264133453369140625 -0.55536375939846038818359375 +-0.107484005391597747802734375 0.492461264133453369140625 -0.55536375939846038818359375 +-0.107469899207353600245617997189 -0.330752259492874178814503238755 0.285574954748153697625667746252 +-0.107469899207353600245617997189 0.330752259492874178814503238755 0.285574954748153697625667746252 +-0.107402397692203513401842940311 -0.330551540851592995373664507497 -0.0412366487085819230506977817186 +-0.107402397692203513401842940311 0.330551540851592995373664507497 -0.0412366487085819230506977817186 +-0.107389402389526378289730246252 -0.0615307986736297607421875 0.157103395462036138363615123126 +-0.107389402389526378289730246252 0.0615307986736297607421875 0.157103395462036138363615123126 +-0.107307904958724970034822376874 -0.106822454929351801089509876874 0.315553346276283230853465511245 +-0.107307904958724970034822376874 0.106822454929351801089509876874 0.315553346276283230853465511245 +-0.107305504381656646728515625 -0.64869524538516998291015625 -0.360805504024028778076171875 +-0.107305504381656646728515625 0.64869524538516998291015625 -0.360805504024028778076171875 +-0.10729350149631500244140625 -0.22223000228404998779296875 -0.434858500957489013671875 +-0.10729350149631500244140625 0.22223000228404998779296875 -0.434858500957489013671875 +-0.107199901342391976100110184689 -0.713380479812622092516960492503 -0.5381415188312530517578125 +-0.107199901342391976100110184689 0.713380479812622092516960492503 -0.5381415188312530517578125 +-0.107083204388618458136051003748 -0.329565954208373979028579014994 0.0491875983774661962311114393742 +-0.107083204388618458136051003748 0.329565954208373979028579014994 0.0491875983774661962311114393742 +-0.10700400173664093017578125 -0.028766401112079620361328125 0.101107048988342287931807561563 +-0.10700400173664093017578125 0.028766401112079620361328125 0.101107048988342287931807561563 +-0.1069698035717010498046875 -0.564445209503173783716079014994 -0.1730867922306060791015625 +-0.1069698035717010498046875 0.564445209503173783716079014994 -0.1730867922306060791015625 +-0.10691879689693450927734375 -0.102428698539733881167634876874 0.260915100574493408203125 +-0.10691879689693450927734375 0.102428698539733881167634876874 0.260915100574493408203125 +-0.106908300518989557437166126874 -0.100441646575927731599442438437 -0.0313382998108863788933042826557 +-0.106908300518989557437166126874 0.100441646575927731599442438437 -0.0313382998108863788933042826557 +-0.106889998912811270970202315311 -0.535755014419555641858039507497 -0.2480742037296295166015625 +-0.106889998912811270970202315311 0.535755014419555641858039507497 -0.2480742037296295166015625 +-0.106881898641586300935379938437 -0.2002497017383575439453125 -0.196154093742370611019865123126 +-0.106881898641586300935379938437 0.2002497017383575439453125 -0.196154093742370611019865123126 +-0.106859751045703887939453125 -0.0166772492229938507080078125 -0.2253947556018829345703125 +-0.106859751045703887939453125 0.0166772492229938507080078125 -0.2253947556018829345703125 +-0.106830545514822003450028375937 -0.216899606585502613409488503748 0.814887350797653176037727007497 +-0.106830545514822003450028375937 0.216899606585502613409488503748 0.814887350797653176037727007497 +-0.106622003018856048583984375 -0.725292980670928955078125 0.68013298511505126953125 +-0.106622003018856048583984375 0.725292980670928955078125 0.68013298511505126953125 +-0.106605601310729991570980246252 -0.157128000259399436266960492503 -0.777139186859130859375 +-0.106605601310729991570980246252 0.157128000259399436266960492503 -0.777139186859130859375 +-0.106581449136137956790193470624 -0.125159657001495366879240123126 -0.93566830456256866455078125 +-0.106581449136137956790193470624 0.125159657001495366879240123126 -0.93566830456256866455078125 +-0.1065720021724700927734375 -0.328000485897064208984375 -0.3620195090770721435546875 +-0.1065720021724700927734375 0.328000485897064208984375 -0.3620195090770721435546875 +-0.106468403339385994654797684689 -0.327681994438171420025440738755 -0.203196811676025407278345369377 +-0.106468403339385994654797684689 0.327681994438171420025440738755 -0.203196811676025407278345369377 +-0.106445100903511044587723688437 -0.220436704158782942331029630623 0.173427593708038313424779630623 +-0.106445100903511044587723688437 0.220436704158782942331029630623 0.173427593708038313424779630623 +-0.106411045789718619603014815311 -0.0923458456993102999588174384371 0.05146770179271697998046875 +-0.106411045789718619603014815311 0.0923458456993102999588174384371 0.05146770179271697998046875 +-0.106375300884246820620759876874 0 0.944025444984435968542868522491 +-0.106369502842426300048828125 -0.16687475144863128662109375 -0.1527689993381500244140625 +-0.106369502842426300048828125 0.16687475144863128662109375 -0.1527689993381500244140625 +-0.10633075237274169921875 -0.077252753078937530517578125 0.2126635015010833740234375 +-0.10633075237274169921875 0.077252753078937530517578125 0.2126635015010833740234375 +-0.106322852522134789210461747189 -0.2300404608249664306640625 -0.371856147050857566149772992503 +-0.106322852522134789210461747189 0.2300404608249664306640625 -0.371856147050857566149772992503 +-0.1062362492084503173828125 -0.20770275592803955078125 -0.089851997792720794677734375 +-0.1062362492084503173828125 0.20770275592803955078125 -0.089851997792720794677734375 +-0.106194503605365753173828125 -0.199881494045257568359375 0.4458365142345428466796875 +-0.106194503605365753173828125 0.199881494045257568359375 0.4458365142345428466796875 +-0.106165401637554182578959682814 -0.538684314489364712841279470013 -0.0323724510148167624046244839064 +-0.106165401637554182578959682814 0.538684314489364712841279470013 -0.0323724510148167624046244839064 +-0.106157994270324712582365123126 -0.154473602771759033203125 -0.35336720943450927734375 +-0.106157994270324712582365123126 0.154473602771759033203125 -0.35336720943450927734375 +-0.1060929000377655029296875 -0.446791487932205189093082253748 0.774029678106307961193977007497 +-0.1060929000377655029296875 0.446791487932205189093082253748 0.774029678106307961193977007497 +-0.106077599525451662931807561563 -0.379128789901733431744190738755 -0.070773601531982421875 +-0.106077599525451662931807561563 0.379128789901733431744190738755 -0.070773601531982421875 +-0.106066203117370597142077315311 -0.1060658991336822509765625 0 +-0.106066203117370597142077315311 0.1060658991336822509765625 0 +-0.1060547530651092529296875 -0.13834150135517120361328125 0.17920400202274322509765625 +-0.1060547530651092529296875 0.13834150135517120361328125 0.17920400202274322509765625 +-0.106033802032470703125 -0.0668273985385894747635049384371 -0.155855405330657975637720369377 +-0.106033802032470703125 0.0668273985385894747635049384371 -0.155855405330657975637720369377 +-0.106026001274585723876953125 -0.457521498203277587890625 -0.1715590059757232666015625 +-0.106026001274585723876953125 0.457521498203277587890625 -0.1715590059757232666015625 +-0.1060247533023357391357421875 -0.0770307466387748634994991903113 0.940917047858238153601462272491 +-0.1060247533023357391357421875 0.0770307466387748634994991903113 0.940917047858238153601462272491 +-0.1059930026531219482421875 -0.3929465115070343017578125 0.2904449999332427978515625 +-0.1059930026531219482421875 0.3929465115070343017578125 0.2904449999332427978515625 +-0.10596464574337005615234375 -0.048889048397541046142578125 -0.0942409515380859402755575615629 +-0.10596464574337005615234375 0.048889048397541046142578125 -0.0942409515380859402755575615629 +-0.105944002419710150975085127811 -0.326068508625030506475894753748 -0.777788269519805841589743522491 +-0.105944002419710150975085127811 0.326068508625030506475894753748 -0.777788269519805841589743522491 +-0.105870795249938975945980246252 -0.156556594371795670950220369377 0.0654323995113372802734375 +-0.105870795249938975945980246252 0.156556594371795670950220369377 0.0654323995113372802734375 +-0.10581000149250030517578125 -0.203041493892669677734375 0.100391246378421783447265625 +-0.10581000149250030517578125 0.203041493892669677734375 0.100391246378421783447265625 +-0.105752503871917716282702315311 -0.687038087844848543994658029987 -0.0824305988848209325592364393742 +-0.105752503871917716282702315311 0.687038087844848543994658029987 -0.0824305988848209325592364393742 +-0.105672048777341848202482310626 -0.538368585705757185522202235006 0.03863749839365482330322265625 +-0.105672048777341848202482310626 0.538368585705757185522202235006 0.03863749839365482330322265625 +-0.105654799938201912623547684689 -0.114227402210235598478682561563 -0.125654995441436767578125 +-0.105654799938201912623547684689 0.114227402210235598478682561563 -0.125654995441436767578125 +-0.105596403777599337492354436563 -0.324996745586395296978565738755 -0.552925103902816794665397992503 +-0.105596403777599337492354436563 0.324996745586395296978565738755 -0.552925103902816794665397992503 +-0.105595600605010997430355246252 -0.271588397026062022820980246252 0.274024391174316428454460492503 +-0.105595600605010997430355246252 0.271588397026062022820980246252 0.274024391174316428454460492503 +-0.105502402782440191097990123126 -0.535684776306152410363381477509 0.584731197357177712170539507497 +-0.105502402782440191097990123126 0.535684776306152410363381477509 0.584731197357177712170539507497 +-0.105401399731636050138838811563 -0.324386394023895241467414507497 0.493623590469360329358039507497 +-0.105401399731636050138838811563 0.324386394023895241467414507497 0.493623590469360329358039507497 +-0.105349802970886224917634876874 -0.194916003942489618472322376874 -0.557591986656188920434829014994 +-0.105349802970886224917634876874 0.194916003942489618472322376874 -0.557591986656188920434829014994 +-0.10527884960174560546875 -0.150608704984188074282869251874 0.410771700739860523565738503748 +-0.10527884960174560546875 0.150608704984188074282869251874 0.410771700739860523565738503748 +-0.105152396857738500424161998126 -0.383686190843582186627003238755 0.210304351150989526919588001874 +-0.105152396857738500424161998126 0.383686190843582186627003238755 0.210304351150989526919588001874 +-0.1051476001739501953125 -0.323604798316955599712940738755 0.210295200347900390625 +-0.1051476001739501953125 0.323604798316955599712940738755 0.210295200347900390625 +-0.105146002769470225945980246252 0 -0.170130395889282248766960492503 +-0.10512959957122802734375 -0.664647197723388760692841970013 -0.432656812667846724096420985006 +-0.10512959957122802734375 0.664647197723388760692841970013 -0.432656812667846724096420985006 +-0.105117000639438629150390625 -0.429922997951507568359375 -0.23262999951839447021484375 +-0.105117000639438629150390625 0.429922997951507568359375 -0.23262999951839447021484375 +-0.105113053321838373355134876874 -0.32350675761699676513671875 -0.0824302494525909340561398153113 +-0.105113053321838373355134876874 0.32350675761699676513671875 -0.0824302494525909340561398153113 +-0.105050700902938845548995061563 -0.437566512823104880602897992503 0 +-0.105050700902938845548995061563 0.437566512823104880602897992503 0 +-0.105043999850749969482421875 -0.323285996913909912109375 0.366676986217498779296875 +-0.105043999850749969482421875 0.323285996913909912109375 0.366676986217498779296875 +-0.105009603500366213713057561563 -0.376646804809570356908920985006 0.0843216001987457386412927462516 +-0.105009603500366213713057561563 0.376646804809570356908920985006 0.0843216001987457386412927462516 +-0.105006802082061770353682561563 -0.158022201061248784847990123126 -0.0632655978202819879729901231258 +-0.105006802082061770353682561563 0.158022201061248784847990123126 -0.0632655978202819879729901231258 +-0.1049797534942626953125 -0.22620974481105804443359375 0.01756249926984310150146484375 +-0.1049797534942626953125 0.22620974481105804443359375 0.01756249926984310150146484375 +-0.104947197437286379728682561563 -0.109020602703094493524105246252 0.130769205093383800164730246252 +-0.104947197437286379728682561563 0.109020602703094493524105246252 0.130769205093383800164730246252 +-0.104928250610828388555972878748 -0.248137751221656793765291126874 -0.223422858119010914190738503748 +-0.104928250610828388555972878748 0.248137751221656793765291126874 -0.223422858119010914190738503748 +-0.104882247745990753173828125 -0.22645799815654754638671875 -0.014714750461280345916748046875 +-0.104882247745990753173828125 0.22645799815654754638671875 -0.014714750461280345916748046875 +-0.104868900775909421052567438437 -0.10578525066375732421875 0.01766384951770305633544921875 +-0.104868900775909421052567438437 0.10578525066375732421875 0.01766384951770305633544921875 +-0.104839151352643961123689564374 -0.898887124657630876001235264994 -0.288981443643569924084602007497 +-0.104839151352643961123689564374 0.898887124657630876001235264994 -0.288981443643569924084602007497 +-0.104806503653526297825671065311 -0.0392318978905677809287944057814 0.0998822987079620305816973768742 +-0.104806503653526297825671065311 0.0392318978905677809287944057814 0.0998822987079620305816973768742 +-0.10479199886322021484375 -0.3225210011005401611328125 -0.940743982791900634765625 +-0.10479199886322021484375 0.3225210011005401611328125 -0.940743982791900634765625 +-0.104790198802948000822432561563 -0.168035399913787852899105246252 0.0279841989278793341899831403907 +-0.104790198802948000822432561563 0.168035399913787852899105246252 0.0279841989278793341899831403907 +-0.104698002338409423828125 -0.168782198429107688220085492503 -0.02346999943256378173828125 +-0.104698002338409423828125 0.168782198429107688220085492503 -0.02346999943256378173828125 +-0.10467000305652618408203125 -0.3221360146999359130859375 0.94088900089263916015625 +-0.10467000305652618408203125 0.3221360146999359130859375 0.94088900089263916015625 +-0.1046322025358676910400390625 -0.261875706911087025030582253748 0.350675547122955344470085492503 +-0.1046322025358676910400390625 0.261875706911087025030582253748 0.350675547122955344470085492503 +-0.104578953981399533357254938437 -0.0984419971704482976715411268742 0.043271698057651519775390625 +-0.104578953981399533357254938437 0.0984419971704482976715411268742 0.043271698057651519775390625 +-0.104528850317001334446764815311 -0.0759437978267669677734375 0.0761988043785095242599325615629 +-0.104528850317001334446764815311 0.0759437978267669677734375 0.0761988043785095242599325615629 +-0.104504397511482230442858565311 -0.449868607521057117804019753748 -0.383010613918304432257144753748 +-0.104504397511482230442858565311 0.449868607521057117804019753748 -0.383010613918304432257144753748 +-0.104499804973602297697432561563 -0.170527994632720947265625 0 +-0.104499804973602297697432561563 0.170527994632720947265625 0 +-0.104496248066425323486328125 -0.17630775272846221923828125 0.14316475391387939453125 +-0.104496248066425323486328125 0.17630775272846221923828125 0.14316475391387939453125 +-0.104473400115966785772769753748 -0.851958113908767633581931022491 -0.407126298546791054455695757497 +-0.104473400115966785772769753748 0.851958113908767633581931022491 -0.407126298546791054455695757497 +-0.104400999844074249267578125 -0.972369015216827392578125 0.208802998065948486328125 +-0.104400999844074249267578125 0.972369015216827392578125 0.208802998065948486328125 +-0.104355302453041073884598688437 -0.10567049682140350341796875 -0.0210646502673625946044921875 +-0.104355302453041073884598688437 0.10567049682140350341796875 -0.0210646502673625946044921875 +-0.10429559648036956787109375 -0.01991879940032958984375 -0.105951297283172610197432561563 +-0.10429559648036956787109375 0.01991879940032958984375 -0.105951297283172610197432561563 +-0.104293249547481536865234375 -0.222935497760772705078125 -0.0438482500612735748291015625 +-0.104293249547481536865234375 0.222935497760772705078125 -0.0438482500612735748291015625 +-0.104231753945350641421541126874 -0.0232980992645025232479216725778 -0.333306047320365894659488503748 +-0.104231753945350641421541126874 0.0232980992645025232479216725778 -0.333306047320365894659488503748 +-0.104204404354095461759932561563 -0.0267044007778167724609375 -0.1686069965362548828125 +-0.104204404354095461759932561563 0.0267044007778167724609375 -0.1686069965362548828125 +-0.104180395603179931640625 -0.280539000034332242083934261245 0.02107889950275421142578125 +-0.104180395603179931640625 0.280539000034332242083934261245 0.02107889950275421142578125 +-0.1041670478880405426025390625 -0.235030902922153478451505748126 0.59700028598308563232421875 +-0.1041670478880405426025390625 0.235030902922153478451505748126 0.59700028598308563232421875 +-0.104149498045444488525390625 -0.22118975222110748291015625 0.0522307492792606353759765625 +-0.104149498045444488525390625 0.22118975222110748291015625 0.0522307492792606353759765625 +-0.104129897058010095767244251874 -0.6851957142353057861328125 0.0983024001121520912827023153113 +-0.104129897058010095767244251874 0.6851957142353057861328125 0.0983024001121520912827023153113 +-0.104108996689319610595703125 -0.74943101406097412109375 -0.6538469791412353515625 +-0.104108996689319610595703125 0.74943101406097412109375 -0.6538469791412353515625 +-0.104072695970535269993639815311 -0.280814999341964688372996761245 -0.0176598004996776566932759067186 +-0.104072695970535269993639815311 0.280814999341964688372996761245 -0.0176598004996776566932759067186 +-0.104039695858955380525223688437 -0.0633537009358405983627804403113 0.0875331044197082547286825615629 +-0.104039695858955380525223688437 0.0633537009358405983627804403113 0.0875331044197082547286825615629 +-0.103979851305484774504073186563 -0.0428921978920698207526918110943 -0.64019410312175750732421875 +-0.103979851305484774504073186563 0.0428921978920698207526918110943 -0.64019410312175750732421875 +-0.1038680486381053924560546875 -0.49265448749065399169921875 0.41109965741634368896484375 +-0.1038680486381053924560546875 0.49265448749065399169921875 0.41109965741634368896484375 +-0.10385685227811336517333984375 -0.524826538562774613794204014994 -0.785029643774032503955595529987 +-0.10385685227811336517333984375 0.524826538562774613794204014994 -0.785029643774032503955595529987 +-0.103826798498630523681640625 -0.319543340802192654681590511245 0.0980412960052490234375 +-0.103826798498630523681640625 0.319543340802192654681590511245 0.0980412960052490234375 +-0.103649251163005828857421875 -0.71329124271869659423828125 0.207297742366790771484375 +-0.103649251163005828857421875 0.71329124271869659423828125 0.207297742366790771484375 +-0.10364775359630584716796875 -0.318989239633083343505859375 0.67082248628139495849609375 +-0.10364775359630584716796875 0.318989239633083343505859375 0.67082248628139495849609375 +-0.103531497716903689298995061563 -0.0828676521778106689453125 -0.070101298391819000244140625 +-0.103531497716903689298995061563 0.0828676521778106689453125 -0.070101298391819000244140625 +-0.103477048873901369963057561563 -0.03962235152721405029296875 -0.101106753945350638645983565311 +-0.103477048873901369963057561563 0.03962235152721405029296875 -0.101106753945350638645983565311 +-0.103464603424072265625 0 -0.10860510170459747314453125 +-0.103463999927043914794921875 0 -0.74282924830913543701171875 +-0.1033256053924560546875 -0.675125598907470703125 0.416568803787231489721420985006 +-0.1033256053924560546875 0.675125598907470703125 0.416568803787231489721420985006 +-0.103300197422504430599943248126 -0.892483216524124212121193977509 -0.0529451999813318266441264370314 +-0.103300197422504430599943248126 0.892483216524124212121193977509 -0.0529451999813318266441264370314 +-0.103292249143123626708984375 -0.095669500529766082763671875 0.2065867483615875244140625 +-0.103292249143123626708984375 0.095669500529766082763671875 0.2065867483615875244140625 +-0.103238797187805181332365123126 -0.0750064015388488825042401231258 0.153999197483062760793970369377 +-0.103238797187805181332365123126 0.0750064015388488825042401231258 0.153999197483062760793970369377 +-0.103228354454040521792634876874 -0.074999548494815826416015625 -0.0788603961467742864410723768742 +-0.103228354454040521792634876874 0.074999548494815826416015625 -0.0788603961467742864410723768742 +-0.10319624841213226318359375 -0.0902248531579971230209835653113 -0.0609099000692367512077574076557 +-0.10319624841213226318359375 0.0902248531579971230209835653113 -0.0609099000692367512077574076557 +-0.103180999308824544735685435626 -0.457585701346397422106804242503 -0.449965763092041004522769753748 +-0.103180999308824544735685435626 0.457585701346397422106804242503 -0.449965763092041004522769753748 +-0.103050999343395233154296875 0 -0.489265501499176025390625 +-0.103043600916862501670756557814 -0.434591311216354414526108485006 -0.320955240726470969470085492503 +-0.103043600916862501670756557814 0.434591311216354414526108485006 -0.320955240726470969470085492503 +-0.103029154241085052490234375 -0.09245215356349945068359375 -0.32146169245243072509765625 +-0.103029154241085052490234375 0.09245215356349945068359375 -0.32146169245243072509765625 +-0.102934398129582396763659346561 -0.929603490233421259070212272491 -0.166556844860315328427091685626 +-0.102934398129582396763659346561 0.929603490233421259070212272491 -0.166556844860315328427091685626 +-0.102909895777702334318526311563 -0.124280101060867301243639815311 0.252911102771759044305355246252 +-0.102909895777702334318526311563 0.124280101060867301243639815311 0.252911102771759044305355246252 +-0.102906449139118200131193248126 -0.434876847267150867804019753748 -0.0528439499437809018234091240629 +-0.102906449139118200131193248126 0.434876847267150867804019753748 -0.0528439499437809018234091240629 +-0.102882750332355499267578125 -0.155571997165679931640625 -0.16647075116634368896484375 +-0.102882750332355499267578125 0.155571997165679931640625 -0.16647075116634368896484375 +-0.102770099043846124819978626874 -0.2768045961856842041015625 -0.05308020114898681640625 +-0.102770099043846124819978626874 0.2768045961856842041015625 -0.05308020114898681640625 +-0.102724802494049083367855246252 -0.368767595291137728619190738755 -0.116009199619293221217297684689 +-0.102724802494049083367855246252 0.368767595291137728619190738755 -0.116009199619293221217297684689 +-0.102686396241188040989733565311 -0.554326200485229514391960492503 0.205372202396392811163394753748 +-0.102686396241188040989733565311 0.554326200485229514391960492503 0.205372202396392811163394753748 +-0.102656947076320656520032059689 -0.531653636693954489977897992503 -0.0964661501348018785018112453145 +-0.102656947076320656520032059689 0.531653636693954489977897992503 -0.0964661501348018785018112453145 +-0.102655801177024844084151311563 -0.0595005020499229375641192518742 -0.2755385935306549072265625 +-0.102655801177024844084151311563 0.0595005020499229375641192518742 -0.2755385935306549072265625 +-0.102646348625421532374524247189 -0.3159188926219940185546875 -0.303576761484146140368522992503 +-0.102646348625421532374524247189 0.3159188926219940185546875 -0.303576761484146140368522992503 +-0.102589646726846700497404185626 -0.0297188993543386452411692033593 -0.4371407926082611083984375 +-0.102589646726846700497404185626 0.0297188993543386452411692033593 -0.4371407926082611083984375 +-0.102550601959228521176115123126 -0.138754999637603765316740123126 0.101145398616790782586605246252 +-0.102550601959228521176115123126 0.138754999637603765316740123126 0.101145398616790782586605246252 +-0.102514803409576416015625 -0.104821395874023448602230246252 -0.136026597023010259457365123126 +-0.102514803409576416015625 0.104821395874023448602230246252 -0.136026597023010259457365123126 +-0.1024940013885498046875 -0.936047971248626708984375 0.3366149961948394775390625 +-0.1024940013885498046875 0.936047971248626708984375 0.3366149961948394775390625 +-0.102488003671169281005859375 -0.099900998175144195556640625 -0.2049782574176788330078125 +-0.102488003671169281005859375 0.099900998175144195556640625 -0.2049782574176788330078125 +-0.102344995737075797337389815311 -0.186070507764816289730802623126 -0.211903792619705183541967130623 +-0.102344995737075797337389815311 0.186070507764816289730802623126 -0.211903792619705183541967130623 +-0.102325800061225893888838811563 -0.274827307462692238537727007497 0.0632412001490592901031817518742 +-0.102325800061225893888838811563 0.274827307462692238537727007497 0.0632412001490592901031817518742 +-0.102288901805877685546875 -0.0666691482067108126541299384371 -0.0871331959962844820877236884371 +-0.102288901805877685546875 0.0666691482067108126541299384371 -0.0871331959962844820877236884371 +-0.102246147394180295076004938437 -0.1040668487548828125 0.0348685495555400848388671875 +-0.102246147394180295076004938437 0.1040668487548828125 0.0348685495555400848388671875 +-0.102224850654602045230134876874 -0.0970257014036178533356036268742 -0.0513428986072540297080912807814 +-0.102224850654602045230134876874 0.0970257014036178533356036268742 -0.0513428986072540297080912807814 +-0.102223800122737892848157059689 -0.891941410303115911339943977509 0.0631781995296478299239950615629 +-0.102223800122737892848157059689 0.891941410303115911339943977509 0.0631781995296478299239950615629 +-0.102178752422332763671875 -0.21646775305271148681640625 -0.072119496762752532958984375 +-0.102178752422332763671875 0.21646775305271148681640625 -0.072119496762752532958984375 +-0.102087002992630002107254938437 -0.0495901510119438129753355326557 0.0980769038200378362457598768742 +-0.102087002992630002107254938437 0.0495901510119438129753355326557 0.0980769038200378362457598768742 +-0.102039299160242083464034124063 -0.387455734610557600561264735006 0.376783537864685103002670985006 +-0.102039299160242083464034124063 0.387455734610557600561264735006 0.376783537864685103002670985006 +-0.102019500732421872224442438437 -0.194832605123519880807592130623 0.204039895534515375308259876874 +-0.102019500732421872224442438437 0.194832605123519880807592130623 0.204039895534515375308259876874 +-0.102009797096252449732922684689 -0.163504195213317882195980246252 0.0534825980663299616058026231258 +-0.102009797096252449732922684689 0.163504195213317882195980246252 0.0534825980663299616058026231258 +-0.101978552341461178865067438437 -0.433737444877624500616519753748 0.06302654743194580078125 +-0.101978552341461178865067438437 0.433737444877624500616519753748 0.06302654743194580078125 +-0.101977202296257021818526311563 0 0.110002952814102175627120061563 +-0.101933303475379932745426003748 -0.131200297176837926693693248126 0.679996788501739501953125 +-0.101933303475379932745426003748 0.131200297176837926693693248126 0.679996788501739501953125 +-0.10192500054836273193359375 -0.09919250011444091796875 -0.479345500469207763671875 +-0.10192500054836273193359375 0.09919250011444091796875 -0.479345500469207763671875 +-0.101881194114685061369307561563 -0.106950795650482183285490123126 0.371727991104126020971420985006 +-0.101881194114685061369307561563 0.106950795650482183285490123126 0.371727991104126020971420985006 +-0.101872396469116222039730246252 -0.313536000251770030633480246252 -0.226533198356628440173210492503 +-0.101872396469116222039730246252 0.313536000251770030633480246252 -0.226533198356628440173210492503 +-0.101759004592895510588057561563 -0.165034997463226335012720369377 -0.0490774005651474012901225307814 +-0.101759004592895510588057561563 0.165034997463226335012720369377 -0.0490774005651474012901225307814 +-0.101736599206924432925447376874 0 -0.282222908735275279656917746252 +-0.101713395118713384457365123126 -0.00825959965586662257785999230464 0.172006404399871831722990123126 +-0.101713395118713384457365123126 0.00825959965586662257785999230464 0.172006404399871831722990123126 +-0.1017007529735565185546875 -0.0496447496116161346435546875 -0.2229180037975311279296875 +-0.1017007529735565185546875 0.0496447496116161346435546875 -0.2229180037975311279296875 +-0.1016827486455440521240234375 -0.64199720323085784912109375 0 +-0.1016827486455440521240234375 0.64199720323085784912109375 0 +-0.101655395328998560122713001874 -0.26613999903202056884765625 0.203311499953269941842748380623 +-0.101655395328998560122713001874 0.26613999903202056884765625 0.203311499953269941842748380623 +-0.101638045907020566072098688437 -0.01222500018775463104248046875 0.10963694751262664794921875 +-0.101638045907020566072098688437 0.01222500018775463104248046875 0.10963694751262664794921875 +-0.101621398329734796694978626874 -0.118239900469779959935046065311 -0.256305295228958118780582253748 +-0.101621398329734796694978626874 0.118239900469779959935046065311 -0.256305295228958118780582253748 +-0.101614800095558163728348688437 0 0.282266700267791714740184261245 +-0.101544098556041711978181751874 -0.312524092197418168481704014994 -0.120488196611404405067524692186 +-0.101544098556041711978181751874 0.312524092197418168481704014994 -0.120488196611404405067524692186 +-0.10151650011539459228515625 -0.445501506328582763671875 0.203033506870269775390625 +-0.10151650011539459228515625 0.445501506328582763671875 0.203033506870269775390625 +-0.101443049311637875642411188437 -0.118835994601249703150891434689 -0.422003692388534579205128238755 +-0.101443049311637875642411188437 0.118835994601249703150891434689 -0.422003692388534579205128238755 +-0.101423597335815435238615123126 -0.225803208351135265008480246252 -0.31420719623565673828125 +-0.101423597335815435238615123126 0.225803208351135265008480246252 -0.31420719623565673828125 +-0.101397795975208274144030440311 -0.562107700109481744910056022491 0.404665094614028886255141514994 +-0.101397795975208274144030440311 0.562107700109481744910056022491 0.404665094614028886255141514994 +-0.101360249519348147306807561563 -0.110218951106071466616853626874 0.00882419999688863719577991417964 +-0.101360249519348147306807561563 0.110218951106071466616853626874 0.00882419999688863719577991417964 +-0.101346397399902352076672684689 -0.205347609519958507195980246252 0.327965211868286143914730246252 +-0.101346397399902352076672684689 0.205347609519958507195980246252 0.327965211868286143914730246252 +-0.101345801353454598170422684689 -0.0532804012298584012130575615629 -0.163982403278350841180355246252 +-0.101345801353454598170422684689 0.0532804012298584012130575615629 -0.163982403278350841180355246252 +-0.101336002349853515625 -0.48458957672119140625 -0.6284143924713134765625 +-0.101336002349853515625 0.48458957672119140625 -0.6284143924713134765625 +-0.101324102282524100560046065311 -0.0858074963092803899566973768742 0.069788999855518341064453125 +-0.101324102282524100560046065311 0.0858074963092803899566973768742 0.069788999855518341064453125 +-0.101290902867913243379227594687 -0.689028331637382529528679242503 0.646126335859298683850227007497 +-0.101290902867913243379227594687 0.689028331637382529528679242503 0.646126335859298683850227007497 +-0.101279702782630917634598688437 -0.0243419989943504319618305942186 0.281335794925689663958934261245 +-0.101279702782630917634598688437 0.0243419989943504319618305942186 0.281335794925689663958934261245 +-0.101244351267814627903796065311 -0.673748230934143044201789507497 -0.50824476778507232666015625 +-0.101244351267814627903796065311 0.673748230934143044201789507497 -0.50824476778507232666015625 +-0.10123349726200103759765625 -0.67937175929546356201171875 0.301174499094486236572265625 +-0.10123349726200103759765625 0.67937175929546356201171875 0.301174499094486236572265625 +-0.101181502640247333868472878748 -0.645342582464218050830595529987 -0.251585593819618202893195757497 +-0.101181502640247333868472878748 0.645342582464218050830595529987 -0.251585593819618202893195757497 +-0.101161801815032953433259876874 -0.110251504182815554533370061563 -0.0105296999216079704975168596093 +-0.101161801815032953433259876874 0.110251504182815554533370061563 -0.0105296999216079704975168596093 +-0.10114724934101104736328125 -0.21200649440288543701171875 0.08557175099849700927734375 +-0.10114724934101104736328125 0.21200649440288543701171875 0.08557175099849700927734375 +-0.101142394542694094572432561563 -0.0239506006240844740440287807814 0.170870196819305431024105246252 +-0.101142394542694094572432561563 0.0239506006240844740440287807814 0.170870196819305431024105246252 +-0.100971899181604388151534124063 -0.118572306632995602693192438437 -0.8864226043224334716796875 +-0.100971899181604388151534124063 0.118572306632995602693192438437 -0.8864226043224334716796875 +-0.100967097282409670744307561563 -0.1707276999950408935546875 -0.6189976036548614501953125 +-0.100967097282409670744307561563 0.1707276999950408935546875 -0.6189976036548614501953125 +-0.100922396779060355442858565311 -0.0243845991790294647216796875 0.590948402881622314453125 +-0.100922396779060355442858565311 0.0243845991790294647216796875 0.590948402881622314453125 +-0.100901000201702117919921875 -0.114448003470897674560546875 0.476152002811431884765625 +-0.100901000201702117919921875 0.114448003470897674560546875 0.476152002811431884765625 +-0.10083849728107452392578125 0 -0.22876100242137908935546875 +-0.100796501338481891973941628748 -0.158990298211574537790014005623 -0.295062953233718838763621761245 +-0.100796501338481891973941628748 0.158990298211574537790014005623 -0.295062953233718838763621761245 +-0.100792801380157476254240123126 0 0.438566842675209067614616742503 +-0.100776600837707522306807561563 0 0.894339895248413063733039507497 +-0.100724403560161587800614313437 -0.310003402829170215948551003748 -0.619477587938308649206931022491 +-0.100724403560161587800614313437 0.310003402829170215948551003748 -0.619477587938308649206931022491 +-0.100718852877616879548661188437 -0.0579277485609054551551899692186 -0.0948688477277755681793536268742 +-0.100718852877616879548661188437 0.0579277485609054551551899692186 -0.0948688477277755681793536268742 +-0.1007087528705596923828125 -0.15479500591754913330078125 0.16851200163364410400390625 +-0.1007087528705596923828125 0.15479500591754913330078125 0.16851200163364410400390625 +-0.100670397281646728515625 -0.122184002399444588404797684689 0.122215199470520022306807561563 +-0.100670397281646728515625 0.122184002399444588404797684689 0.122215199470520022306807561563 +-0.10066759586334228515625 -0.0530272006988525418380575615629 -0.383476400375366233141960492503 +-0.10066759586334228515625 0.0530272006988525418380575615629 -0.383476400375366233141960492503 +-0.100659350305795675106779185626 -0.528359711170196533203125 0.114907648414373411704936245314 +-0.100659350305795675106779185626 0.528359711170196533203125 0.114907648414373411704936245314 +-0.100622999668121340666182561563 -0.103228497505187991056807561563 -0.0414594009518623324295205634371 +-0.100622999668121340666182561563 0.103228497505187991056807561563 -0.0414594009518623324295205634371 +-0.100622552633285525236495061563 -0.0243685506284236907958984375 0.108541649580001828279129938437 +-0.100622552633285525236495061563 0.0243685506284236907958984375 0.108541649580001828279129938437 +-0.100594201683998102359041126874 -0.245761495828628523385717130623 -0.13957799971103668212890625 +-0.100594201683998102359041126874 0.245761495828628523385717130623 -0.13957799971103668212890625 +-0.100562705099582663792467940311 -0.673356616497039706104033029987 -0.162719199061393732241853626874 +-0.100562705099582663792467940311 0.673356616497039706104033029987 -0.162719199061393732241853626874 +-0.100546395778656011410490123126 -0.204140806198120139391960492503 0.766952800750732466283920985006 +-0.100546395778656011410490123126 0.204140806198120139391960492503 0.766952800750732466283920985006 +-0.100465203076601033993497935626 -0.0362569514662027386764364678129 0.4371407926082611083984375 +-0.100465203076601033993497935626 0.0362569514662027386764364678129 0.4371407926082611083984375 +-0.100444503128528594970703125 -0.0729764968156814547439736884371 0.891395097970962502209602007497 +-0.100444503128528594970703125 0.0729764968156814547439736884371 0.891395097970962502209602007497 +-0.100415004789829245823717940311 -0.216732242703437799624666126874 0.255819898843765269891292746252 +-0.100415004789829245823717940311 0.216732242703437799624666126874 0.255819898843765269891292746252 +-0.100379002094268809930355246252 -0.0893941998481750516036825615629 0.148097002506256097964509876874 +-0.100379002094268809930355246252 0.0893941998481750516036825615629 0.148097002506256097964509876874 +-0.100347000360488894377120061563 -0.0926508039236068753341513115629 0.062018550932407379150390625 +-0.100347000360488894377120061563 0.0926508039236068753341513115629 0.062018550932407379150390625 +-0.100318405032157886846988503748 -0.459630513191223111224559261245 -0.518339508771896384509147992503 +-0.100318405032157886846988503748 0.459630513191223111224559261245 -0.518339508771896384509147992503 +-0.10031519830226898193359375 -0.00999060049653053248996936730464 -0.111072295904159540347322376874 +-0.10031519830226898193359375 0.00999060049653053248996936730464 -0.111072295904159540347322376874 +-0.100274598598480230160490123126 -0.140408599376678461245759876874 -0.101145398616790782586605246252 +-0.100274598598480230160490123126 0.140408599376678461245759876874 -0.101145398616790782586605246252 +-0.100269296765327448062166126874 -0.0297504007816314676448943288278 -0.107521954178810122404463811563 +-0.100269296765327448062166126874 0.0297504007816314676448943288278 -0.107521954178810122404463811563 +-0.100251603126525881681807561563 -0.361934804916381858141960492503 0.137670004367828363589509876874 +-0.100251603126525881681807561563 0.361934804916381858141960492503 0.137670004367828363589509876874 +-0.100235697627067563142411188437 -0.269039994478225685803352007497 -0.0870068997144699124435263115629 +-0.100235697627067563142411188437 0.269039994478225685803352007497 -0.0870068997144699124435263115629 +-0.100222201645374306422375809689 -0.425789093971252474712940738755 -0.105637051910161969270340875937 +-0.100222201645374306422375809689 0.425789093971252474712940738755 -0.105637051910161969270340875937 +-0.10019885003566741943359375 -0.421969738602638255731136496252 0.731028029322624228747429242503 +-0.10019885003566741943359375 0.421969738602638255731136496252 0.731028029322624228747429242503 +-0.100151804089546200837723688437 -0.605448895692825228564970529987 -0.33675180375576019287109375 +-0.100151804089546200837723688437 0.605448895692825228564970529987 -0.33675180375576019287109375 +-0.100071397423744198884598688437 -0.394856801629066500591846988755 0.506531345844268843237045985006 +-0.100071397423744198884598688437 0.394856801629066500591846988755 0.506531345844268843237045985006 +-0.100054800510406494140625 -0.0928420007228851346114950615629 -0.146182799339294428042634876874 +-0.100054800510406494140625 0.0928420007228851346114950615629 -0.146182799339294428042634876874 +-0.10004340112209320068359375 -0.0726851999759674100021200615629 0.587118601799011208264289507497 +-0.10004340112209320068359375 0.0726851999759674100021200615629 0.587118601799011208264289507497 +-0.100026595592498782072432561563 -0.147776401042938237972990123126 0.0903150022029876736739950615629 +-0.100026595592498782072432561563 0.147776401042938237972990123126 0.0903150022029876736739950615629 +-0.10001640021800994873046875 -0.0726652488112449618240518134371 0.0849499493837356511871661268742 +-0.10001640021800994873046875 0.0726652488112449618240518134371 0.0849499493837356511871661268742 +-0.100000000000000005551115123126 0 0 +-0.0999993979930877685546875 -0.0396447986364364679534588731258 0.168607401847839372122095369377 +-0.0999993979930877685546875 0.0396447986364364679534588731258 0.168607401847839372122095369377 +-0.099942751228809356689453125 -0.14730750024318695068359375 -0.7285679876804351806640625 +-0.099942751228809356689453125 0.14730750024318695068359375 -0.7285679876804351806640625 +-0.0999173998832702664474325615629 -0.521832597255706742700454014994 0.278759998083114635125667746252 +-0.0999173998832702664474325615629 0.521832597255706742700454014994 0.278759998083114635125667746252 +-0.0999000012874603215973223768742 -0.0478830009698867770095986884371 0.278795993328094460217414507497 +-0.0999000012874603215973223768742 0.0478830009698867770095986884371 0.278795993328094460217414507497 +-0.0998753041028976329407385037484 -0.231993293762207009045539507497 -0.242289257049560530221654630623 +-0.0998753041028976329407385037484 0.231993293762207009045539507497 -0.242289257049560530221654630623 +-0.0998452007770538330078125 -0.130109703540802007504240123126 0.30919630825519561767578125 +-0.0998452007770538330078125 0.130109703540802007504240123126 0.30919630825519561767578125 +-0.0998222477734088953216229356258 -0.162800002098083512747095369377 0.51578284800052642822265625 +-0.0998222477734088953216229356258 0.162800002098083512747095369377 0.51578284800052642822265625 +-0.0997669994831085205078125 -0.4135535061359405517578125 -0.2627165019512176513671875 +-0.0997669994831085205078125 0.4135535061359405517578125 -0.2627165019512176513671875 +-0.0997437000274658258636151231258 -0.00406749993562698346910577740232 -0.00588660016655922005424095289072 +-0.0997437000274658258636151231258 0.00406749993562698346910577740232 -0.00588660016655922005424095289072 +-0.0997120022773742703536825615629 -0.306888008117675803454460492503 -0.732036018371582053454460492503 +-0.0997120022773742703536825615629 0.306888008117675803454460492503 -0.732036018371582053454460492503 +-0.0996917009353637806334802462516 -0.0078458003699779510498046875 0 +-0.0996917009353637806334802462516 0.0078458003699779510498046875 0 +-0.0996672987937927273849325615629 -0.00412990003824234043483532019536 0.00702629983425140380859375 +-0.0996672987937927273849325615629 0.00412990003824234043483532019536 0.00702629983425140380859375 +-0.0996638506650924793639489962516 -0.072409696877002716064453125 -0.536026141047477810985810720013 +-0.0996638506650924793639489962516 0.072409696877002716064453125 -0.536026141047477810985810720013 +-0.099617250263690948486328125 -0.113496251404285430908203125 0.1992362439632415771484375 +-0.099617250263690948486328125 0.113496251404285430908203125 0.1992362439632415771484375 +-0.0995523989200591957748898153113 -0.306394951045513119769481136245 -0.89370678365230560302734375 +-0.0995523989200591957748898153113 0.306394951045513119769481136245 -0.89370678365230560302734375 +-0.0994841985404491396804971259371 -0.0722785525023937197586221259371 0.432872539758682284283253238755 +-0.0994841985404491396804971259371 0.0722785525023937197586221259371 0.432872539758682284283253238755 +-0.0994365029036998748779296875 -0.306029213964939095227180132497 0.893844550848007179943977007497 +-0.0994365029036998748779296875 0.306029213964939095227180132497 0.893844550848007179943977007497 +-0.0994240522384643582443075615629 -0.109193551540374758634932561563 0.0262984491884708411479909528907 +-0.0994240522384643582443075615629 0.109193551540374758634932561563 0.0262984491884708411479909528907 +-0.0993213012814521817306356865629 -0.851577275991439841540397992503 -0.273771893978118907586605246252 +-0.0993213012814521817306356865629 0.851577275991439841540397992503 -0.273771893978118907586605246252 +-0.0993035018444061307052450615629 0 -0.0117818996310234073293665701954 +-0.09918094985187053680419921875 -0.92375056445598602294921875 0.198362848162651039807258257497 +-0.09918094985187053680419921875 0.92375056445598602294921875 0.198362848162651039807258257497 +-0.0991325519979000119308309990629 -0.305104252696037303582698996252 -0.446747934818267855572315738755 +-0.0991325519979000119308309990629 0.305104252696037303582698996252 -0.446747934818267855572315738755 +-0.0991138994693756131271200615629 -0.0119076997041702280916153355861 -0.00588579997420311026162798029304 +-0.0991138994693756131271200615629 0.0119076997041702280916153355861 -0.00588579997420311026162798029304 +-0.0990315020084381186782351846887 -0.011975400149822235107421875 0.0070249997079372406005859375 +-0.0990315020084381186782351846887 0.011975400149822235107421875 0.0070249997079372406005859375 +-0.0990076005458831870376101846887 0 0.0140535995364189161827006557814 +-0.0989760994911193930922976846887 -0.00811410024762153694877220289072 -0.0117430001497268680227259451954 +-0.0989760994911193930922976846887 0.00811410024762153694877220289072 -0.0117430001497268680227259451954 +-0.0989748001098632868011151231258 -0.807118213176727272717414507497 -0.385698598623275767938167746252 +-0.0989748001098632868011151231258 0.807118213176727272717414507497 -0.385698598623275767938167746252 +-0.0989085026085376739501953125 -0.502204477787017822265625 0.5481854975223541259765625 +-0.0989085026085376739501953125 0.502204477787017822265625 0.5481854975223541259765625 +-0.0989035468548536272903604071871 -0.711959463357925370630141514994 -0.621154630184173606188835492503 +-0.0989035468548536272903604071871 0.711959463357925370630141514994 -0.621154630184173606188835492503 +-0.0988893002271652166168536268742 -0.0596015989780425969879473768742 0.0957525014877319280426348768742 +-0.0988893002271652166168536268742 0.0596015989780425969879473768742 0.0957525014877319280426348768742 +-0.09882509708404541015625 -0.0991321474313735934158486884371 0.0539111986756324740310830634371 +-0.09882509708404541015625 0.0991321474313735934158486884371 0.0539111986756324740310830634371 +-0.098798252642154693603515625 -0.14361350238323211669921875 -0.17920400202274322509765625 +-0.098798252642154693603515625 0.14361350238323211669921875 -0.17920400202274322509765625 +-0.0987724542617797740540197537484 -0.303985846042633012231704014994 0.142606453597545618228181751874 +-0.0987724542617797740540197537484 0.303985846042633012231704014994 0.142606453597545618228181751874 +-0.0987689018249511829772302462516 -0.0156432002782821676090119211722 0 +-0.0987689018249511829772302462516 0.0156432002782821676090119211722 0 +-0.0987279027700424111069210653113 -0.263802605867385853155582253748 0.103252199292182919587723688437 +-0.0987279027700424111069210653113 0.263802605867385853155582253748 0.103252199292182919587723688437 +-0.0986715018749237116058026231258 -0.00823220014572143519993030480464 0.0140058994293212890625 +-0.0986715018749237116058026231258 0.00823220014572143519993030480464 0.0140058994293212890625 +-0.09861099720001220703125 -0.149956798553466802426115123126 -0.0882543981075286920745526231258 +-0.09861099720001220703125 0.149956798553466802426115123126 -0.0882543981075286920745526231258 +-0.0986063987016677773178585653113 -0.0348676510155200916618589701557 0.1075222492218017578125 +-0.0986063987016677773178585653113 0.0348676510155200916618589701557 0.1075222492218017578125 +-0.098582498729228973388671875 -0.3034105002880096435546875 -0.384998500347137451171875 +-0.098582498729228973388671875 0.3034105002880096435546875 -0.384998500347137451171875 +-0.098558999598026275634765625 -0.6231067478656768798828125 -0.40561576187610626220703125 +-0.098558999598026275634765625 0.6231067478656768798828125 -0.40561576187610626220703125 +-0.098534099757671356201171875 -0.0142366005107760415504536410936 0.335541850328445412365852007497 +-0.098534099757671356201171875 0.0142366005107760415504536410936 0.335541850328445412365852007497 +-0.0985276490449905339996661268742 -0.0488291993737220778037944057814 -0.10201965272426605224609375 +-0.0985276490449905339996661268742 0.0488291993737220778037944057814 -0.10201965272426605224609375 +-0.0984048008918762262542401231258 -0.130370402336120599917634876874 -0.365130400657653841900440738755 +-0.0984048008918762262542401231258 0.130370402336120599917634876874 -0.365130400657653841900440738755 +-0.0984008967876434242905148153113 -0.108794698119163507632478626874 -0.0313202999532222747802734375 +-0.0984008967876434242905148153113 0.108794698119163507632478626874 -0.0313202999532222747802734375 +-0.0983990997076034518142861884371 -0.235712993144989002569644753748 0.157343995571136457956029630623 +-0.0983990997076034518142861884371 0.235712993144989002569644753748 0.157343995571136457956029630623 +-0.0983907021582126617431640625 -0.497204089164733908923210492503 -0.743712294101715132299545985006 +-0.0983907021582126617431640625 0.497204089164733908923210492503 -0.743712294101715132299545985006 +-0.09835325181484222412109375 -0.010168500244617462158203125 0.22961549460887908935546875 +-0.09835325181484222412109375 0.010168500244617462158203125 0.22961549460887908935546875 +-0.0983381986618042103209802462516 -0.00406769998371601156778032404304 -0.0176933005452156073833425153907 +-0.0983381986618042103209802462516 0.00406769998371601156778032404304 -0.0176933005452156073833425153907 +-0.0983255982398986844161825615629 -0.0549377977848053006271200615629 0.165269196033477783203125 +-0.0983255982398986844161825615629 0.0549377977848053006271200615629 0.165269196033477783203125 +-0.0983092010021209827819177462516 -0.132567799091339116879240123126 -0.112964999675750743524105246252 +-0.0983092010021209827819177462516 0.132567799091339116879240123126 -0.112964999675750743524105246252 +-0.098241500556468963623046875 -0.414220988750457763671875 0.262239992618560791015625 +-0.098241500556468963623046875 0.414220988750457763671875 0.262239992618560791015625 +-0.09821750223636627197265625 -0.23545549809932708740234375 0.4300164878368377685546875 +-0.09821750223636627197265625 0.23545549809932708740234375 0.4300164878368377685546875 +-0.0981987535953521700760049384371 -0.637963938713073774877670985006 -0.0765426989644765881637411553129 +-0.0981987535953521700760049384371 0.637963938713073774877670985006 -0.0765426989644765881637411553129 +-0.0981670528650283868987713731258 -0.420808044075965892449886496252 0.125633704662323014700220369377 +-0.0981670528650283868987713731258 0.420808044075965892449886496252 0.125633704662323014700220369377 +-0.0981587469577789306640625 -0.19596000015735626220703125 -0.120268248021602630615234375 +-0.0981587469577789306640625 0.19596000015735626220703125 -0.120268248021602630615234375 +-0.0981266021728515736022302462516 -0.173706805706024175472990123126 0.0140395998954772963096537807814 +-0.0981266021728515736022302462516 0.173706805706024175472990123126 0.0140395998954772963096537807814 +-0.0980835020542144692123898153113 -0.145560604333877546823217130623 0.243293398618698114566072376874 +-0.0980835020542144692123898153113 0.145560604333877546823217130623 0.243293398618698114566072376874 +-0.0980556532740593095320846828145 -0.517408108711242764599091970013 -0.158662892878055572509765625 +-0.0980556532740593095320846828145 0.517408108711242764599091970013 -0.158662892878055572509765625 +-0.0980192452669143565735510037484 -0.0424164988100528689285440009371 0.3333064019680023193359375 +-0.0980192452669143565735510037484 0.0424164988100528689285440009371 0.3333064019680023193359375 +-0.098016999661922454833984375 -0.882833003997802734375 0.4593450129032135009765625 +-0.098016999661922454833984375 0.882833003997802734375 0.4593450129032135009765625 +-0.0980130970478057944594851846887 -0.0159611001610755927349050153907 -0.0117757998406887061382253278907 +-0.0980130970478057944594851846887 0.0159611001610755927349050153907 -0.0117757998406887061382253278907 +-0.0980036020278930719573651231258 -0.173944997787475602590845369377 -0.0117655999958515174175222028907 +-0.0980036020278930719573651231258 0.173944997787475602590845369377 -0.0117655999958515174175222028907 +-0.0979824990034103421310263115629 -0.491108763217926069799545985006 -0.227401353418827084640341240629 +-0.0979824990034103421310263115629 0.491108763217926069799545985006 -0.227401353418827084640341240629 +-0.0979224026203155545333700615629 -0.353985595703125044408920985006 -0.158446800708770763055355246252 +-0.0979224026203155545333700615629 0.353985595703125044408920985006 -0.158446800708770763055355246252 +-0.0978957027196884072006710653113 -0.0711246013641357449630575615629 0.274513506889343228412059261245 +-0.0978957027196884072006710653113 0.0711246013641357449630575615629 0.274513506889343228412059261245 +-0.09788875281810760498046875 -0.18966175615787506103515625 0.13017775118350982666015625 +-0.09788875281810760498046875 0.18966175615787506103515625 0.13017775118350982666015625 +-0.0978582024574279896178552462516 -0.0197272002696990966796875 -0.00588279999792575870876110144536 +-0.0978582024574279896178552462516 0.0197272002696990966796875 -0.00588279999792575870876110144536 +-0.0978042006492614857116052462516 -0.013348199427127838134765625 -0.173942995071411143914730246252 +-0.0978042006492614857116052462516 0.013348199427127838134765625 -0.173942995071411143914730246252 +-0.0977639973163604847350427462516 -0.0198223993182182339767294365629 0.00701979994773864815482689039072 +-0.0977639973163604847350427462516 0.0198223993182182339767294365629 0.00701979994773864815482689039072 +-0.097763501107692718505859375 -0.1929509937763214111328125 -0.4507904946804046630859375 +-0.097763501107692718505859375 0.1929509937763214111328125 -0.4507904946804046630859375 +-0.09770549833774566650390625 -0.171340799331665044613615123126 -0.226044291257858270816072376874 +-0.09770549833774566650390625 0.171340799331665044613615123126 -0.226044291257858270816072376874 +-0.0977011024951934814453125 -0.0121191002428531653667409528907 -0.0175392001867294318462331403907 +-0.0977011024951934814453125 0.0121191002428531653667409528907 -0.0175392001867294318462331403907 +-0.0976912021636962973891726846887 -0.0161004006862640394737162807814 0.014043100178241729736328125 +-0.0976912021636962973891726846887 0.0161004006862640394737162807814 0.014043100178241729736328125 +-0.0976656019687652671157351846887 -0.00413010008633136766614812884768 0.02108030021190643310546875 +-0.0976656019687652671157351846887 0.00413010008633136766614812884768 0.02108030021190643310546875 +-0.09765075147151947021484375 -0.0297689996659755706787109375 0.2282062470912933349609375 +-0.09765075147151947021484375 0.0297689996659755706787109375 0.2282062470912933349609375 +-0.0975612975656986181061114393742 -0.842900815606117181921774772491 -0.0500037999823689446876606723436 +-0.0975612975656986181061114393742 0.842900815606117181921774772491 -0.0500037999823689446876606723436 +-0.0975167982280254336258096259371 -0.880676990747451760022102007497 -0.157790695130825053826839621252 +-0.0975167982280254336258096259371 0.880676990747451760022102007497 -0.157790695130825053826839621252 +-0.09750080108642578125 -0.171067404747009293997095369377 -0.0350645989179611192176899692186 +-0.09750080108642578125 0.171067404747009293997095369377 -0.0350645989179611192176899692186 +-0.0974736034870147677322549384371 -0.299996995925903287005809261245 -0.510392403602600075451789507497 +-0.0974736034870147677322549384371 0.299996995925903287005809261245 -0.510392403602600075451789507497 +-0.0974180996417999267578125 -0.235929000377655018194644753748 -0.157629901170730585269197376874 +-0.0974180996417999267578125 0.235929000377655018194644753748 -0.157629901170730585269197376874 +-0.0974173486232757512848223768742 -0.114060750603675833958483565311 0 +-0.0974173486232757512848223768742 0.114060750603675833958483565311 0 +-0.0974170029163360651214276231258 -0.169605398178100608141960492503 0.0417605996131897028167401231258 +-0.0974170029163360651214276231258 0.169605398178100608141960492503 0.0417605996131897028167401231258 +-0.0973693013191223033508947537484 -0.889245572686195306921774772491 0.319784246385097503662109375 +-0.0973693013191223033508947537484 0.889245572686195306921774772491 0.319784246385097503662109375 +-0.0972370982170105008224325615629 -0.0233441993594169644454794365629 0 +-0.0972370982170105008224325615629 0.0233441993594169644454794365629 0 +-0.097187101840972900390625 0 -0.02355130016803741455078125 +-0.0971390962600707924545773153113 -0.0827779501676559475997763115629 0.0788149505853652926345986884371 +-0.0971390962600707924545773153113 0.0827779501676559475997763115629 0.0788149505853652926345986884371 +-0.0970192015171051080901776231258 -0.0122799001634120944631556326954 0.0208921998739242560649831403907 +-0.0970192015171051080901776231258 0.0122799001634120944631556326954 0.0208921998739242560649831403907 +-0.0969900012016296497741052462516 -0.156040203571319591180355246252 0.0790216028690338134765625 +-0.0969900012016296497741052462516 0.156040203571319591180355246252 0.0790216028690338134765625 +-0.0968918025493621937194177462516 -0.103223001956939702816740123126 0.141269195079803483450220369377 +-0.0968918025493621937194177462516 0.103223001956939702816740123126 0.141269195079803483450220369377 +-0.0968898028135299627106036268742 -0.0908608496189117348373898153113 -0.0696898519992828341385049384371 +-0.0968898028135299627106036268742 0.0908608496189117348373898153113 -0.0696898519992828341385049384371 +-0.0968852967023849515060263115629 -0.0832105457782745389083700615629 -0.0786717027425765935699786268742 +-0.0968852967023849515060263115629 0.0832105457782745389083700615629 -0.0786717027425765935699786268742 +-0.0968711018562316977797976846887 -0.00805720016360282967338157789072 -0.0234746992588043233707306711722 +-0.0968711018562316977797976846887 0.00805720016360282967338157789072 -0.0234746992588043233707306711722 +-0.09686775505542755126953125 -0.6329302489757537841796875 0.39053325355052947998046875 +-0.09686775505542755126953125 0.6329302489757537841796875 0.39053325355052947998046875 +-0.0968169003725051907638388115629 -0.105092847347259515933259876874 0.0456286489963531466385049384371 +-0.0968169003725051907638388115629 0.105092847347259515933259876874 0.0456286489963531466385049384371 +-0.0967909991741180419921875 -0.08308474719524383544921875 -0.21500800549983978271484375 +-0.0967909991741180419921875 0.08308474719524383544921875 -0.21500800549983978271484375 +-0.0967884004116058432876101846887 -0.297889208793640170025440738755 -0.248784804344177268298210492503 +-0.0967884004116058432876101846887 0.297889208793640170025440738755 -0.248784804344177268298210492503 +-0.096778996288776397705078125 -0.564248025417327880859375 0.81991302967071533203125 +-0.096778996288776397705078125 0.564248025417327880859375 0.81991302967071533203125 +-0.0967393010854721013824786268742 -0.6657384932041168212890625 0.193477892875671381167634876874 +-0.0967393010854721013824786268742 0.6657384932041168212890625 0.193477892875671381167634876874 +-0.0967379033565521212478799384371 -0.297723290324211076196547764994 0.6261009871959686279296875 +-0.0967379033565521212478799384371 0.297723290324211076196547764994 0.6261009871959686279296875 +-0.0967347532510757363022335653113 -0.297723999619483925549445757497 -0.156525246798992156982421875 +-0.0967347532510757363022335653113 0.297723999619483925549445757497 -0.156525246798992156982421875 +-0.0966920472681522397140341240629 -0.63625316321849822998046875 0.0912808001041412325760049384371 +-0.0966920472681522397140341240629 0.63625316321849822998046875 0.0912808001041412325760049384371 +-0.0966329991817474337478799384371 -0.257954102754592906610042746252 -0.118835100531578058413728626874 +-0.0966329991817474337478799384371 0.257954102754592906610042746252 -0.118835100531578058413728626874 +-0.0966179497539997184096804971887 -0.297354194521904036108139735006 0.452488291263580366674545985006 +-0.0966179497539997184096804971887 0.297354194521904036108139735006 0.452488291263580366674545985006 +-0.0965741962194442693512286268742 -0.0199882507324218756938893903907 -0.113021546602249139956697376874 +-0.0965741962194442693512286268742 0.0199882507324218756938893903907 -0.113021546602249139956697376874 +-0.0965706527233123890319177462516 -0.178673003613948833123714621252 -0.511125987768173306591279470013 +-0.0965706527233123890319177462516 0.178673003613948833123714621252 -0.511125987768173306591279470013 +-0.0965663999319076454819210653113 0 -0.693307298421859674597556022491 +-0.096564151346683502197265625 -0.200007002055645005667017244377 -0.3913726508617401123046875 +-0.096564151346683502197265625 0.200007002055645005667017244377 -0.3913726508617401123046875 +-0.0965447001159191048325070028113 -0.842389109730720453406149772491 0.0596682995557785006424111884371 +-0.0965447001159191048325070028113 0.842389109730720453406149772491 0.0596682995557785006424111884371 +-0.09651400148868560791015625 -0.489713013172149658203125 -0.02942950092256069183349609375 +-0.09651400148868560791015625 0.489713013172149658203125 -0.02942950092256069183349609375 +-0.09649924933910369873046875 -0.033313751220703125 -0.2282062470912933349609375 +-0.09649924933910369873046875 0.033313751220703125 -0.2282062470912933349609375 +-0.0964375972747802817641726846887 -0.0237083002924919142295756557814 -0.011734999716281890869140625 +-0.0964375972747802817641726846887 0.0237083002924919142295756557814 -0.011734999716281890869140625 +-0.0964121997356414822677450615629 -0.0199328005313873304893412807814 -0.0175321996212005615234375 +-0.0964121997356414822677450615629 0.0199328005313873304893412807814 -0.0175321996212005615234375 +-0.0963230013847351101974325615629 -0.0801930010318756131271200615629 -0.155855596065521240234375 +-0.0963230013847351101974325615629 0.0801930010318756131271200615629 -0.155855596065521240234375 +-0.0963061988353729331313601846887 -0.158529603481292746813835492503 -0.0747893989086151206313601846887 +-0.0963061988353729331313601846887 0.158529603481292746813835492503 -0.0747893989086151206313601846887 +-0.09625375270843505859375 -0.0493177510797977447509765625 0.22539524734020233154296875 +-0.09625375270843505859375 0.0493177510797977447509765625 0.22539524734020233154296875 +-0.0962454020977020208160723768742 -0.0398372992873191819618305942186 -0.281335794925689663958934261245 +-0.0962454020977020208160723768742 0.0398372992873191819618305942186 -0.281335794925689663958934261245 +-0.0962446510791778592208700615629 -0.0980242520570755032638388115629 -0.060234747827053070068359375 +-0.0962446510791778592208700615629 0.0980242520570755032638388115629 -0.060234747827053070068359375 +-0.09615419805049896240234375 -0.216951602697372430972322376874 0.551077187061309814453125 +-0.09615419805049896240234375 0.216951602697372430972322376874 0.551077187061309814453125 +-0.0961261510848998995681924384371 -0.113797652721405018194644753748 0.0176024995744228363037109375 +-0.0961261510848998995681924384371 0.113797652721405018194644753748 0.0176024995744228363037109375 +-0.0960967004299163873870526231258 -0.0238673999905586256553569057814 0.0139920994639396670949915701954 +-0.0960967004299163873870526231258 0.0238673999905586256553569057814 0.0139920994639396670949915701954 +-0.0960846036672592107574786268742 -0.0451881006360054029991069057814 0.105951753258705136384598688437 +-0.0960846036672592107574786268742 0.0451881006360054029991069057814 0.105951753258705136384598688437 +-0.096065498888492584228515625 -0.4894259870052337646484375 0.0351249985396862030029296875 +-0.096065498888492584228515625 0.4894259870052337646484375 0.0351249985396862030029296875 +-0.0960239037871360723297442518742 -0.0697644524276256478012570028113 0.32926039397716522216796875 +-0.0960239037871360723297442518742 0.0697644524276256478012570028113 0.32926039397716522216796875 +-0.0960013985633850208678552462516 -0.0273703008890151984477956403907 -0.005881600081920623779296875 +-0.0960013985633850208678552462516 0.0273703008890151984477956403907 -0.005881600081920623779296875 +-0.0959966003894806019225427462516 0 0.0280117005109787008121369211722 +-0.0959814012050628634353799384371 -0.0395927980542182880729917826557 -0.590948402881622314453125 +-0.0959814012050628634353799384371 0.0395927980542182880729917826557 -0.590948402881622314453125 +-0.0959598027169704520522586221887 -0.652763682603836103979233485006 0.612119686603546209191506477509 +-0.0959598027169704520522586221887 0.652763682603836103979233485006 0.612119686603546209191506477509 +-0.0959253013134002685546875 -0.0160620003938674940635600307814 -0.0232455000281333937217631557814 +-0.0959253013134002685546875 0.0160620003938674940635600307814 -0.0232455000281333937217631557814 +-0.0959148019552230890472088731258 -0.2952004373073577880859375 -0.325817558169364918096988503748 +-0.0959148019552230890472088731258 0.2952004373073577880859375 -0.325817558169364918096988503748 +-0.0959094464778900146484375 -0.0696822002530097933670205634371 -0.329311150312423694952457253748 +-0.0959094464778900146484375 0.0696822002530097933670205634371 -0.329311150312423694952457253748 +-0.0959039986133575494964276231258 -0.04007320106029510498046875 -0.170869994163513200247095369377 +-0.0959039986133575494964276231258 0.04007320106029510498046875 -0.170869994163513200247095369377 +-0.095896899700164794921875 -0.0274690002202987691715119211722 0.00701769962906837515420610529304 +-0.095896899700164794921875 0.0274690002202987691715119211722 0.00701769962906837515420610529304 +-0.09587819874286651611328125 -0.454757988452911376953125 0.379476606845855712890625 +-0.09587819874286651611328125 0.454757988452911376953125 0.379476606845855712890625 +-0.0958396017551422230162927462516 -0.124047195911407476254240123126 -0.124205601215362559930355246252 +-0.0958396017551422230162927462516 0.124047195911407476254240123126 -0.124205601215362559930355246252 +-0.095801748335361480712890625 -0.2282454967498779296875 0.03501474857330322265625 +-0.095801748335361480712890625 0.2282454967498779296875 0.03501474857330322265625 +-0.0957956977188587216476278740629 -0.412379556894302390368522992503 -0.351093062758445761950554242503 +-0.0957956977188587216476278740629 0.412379556894302390368522992503 -0.351093062758445761950554242503 +-0.095755748450756072998046875 -0.22906099259853363037109375 -0.0293577499687671661376953125 +-0.095755748450756072998046875 0.22906099259853363037109375 -0.0293577499687671661376953125 +-0.09572924673557281494140625 -0.0394295990467071547080912807814 -0.108541345596313468235827315311 +-0.09572924673557281494140625 0.0394295990467071547080912807814 -0.108541345596313468235827315311 +-0.0957077980041503850738848768742 0 -0.115498951077461234349108565311 +-0.0957040011882782093444177462516 -0.0201186001300811788394806711722 0.020880199968814849853515625 +-0.0957040011882782093444177462516 0.0201186001300811788394806711722 0.020880199968814849853515625 +-0.095700800418853759765625 -0.134462797641754144839509876874 0.112965202331542974301115123126 +-0.095700800418853759765625 0.134462797641754144839509876874 0.112965202331542974301115123126 +-0.0956772029399871881683026231258 -0.0081500001251697540283203125 0.0279184997081756598735768903907 +-0.0956772029399871881683026231258 0.0081500001251697540283203125 0.0279184997081756598735768903907 +-0.095670998096466064453125 -0.2309697568416595458984375 0 +-0.095670998096466064453125 0.2309697568416595458984375 0 +-0.095643095672130584716796875 0 -0.336678642034530628546207253748 +-0.0956157028675079373458700615629 -0.00406420007348060659951860529304 -0.0290021002292633056640625 +-0.0956157028675079373458700615629 0.00406420007348060659951860529304 -0.0290021002292633056640625 +-0.0955750532448291778564453125 -0.1798933446407318115234375 0.401252862811088573113948996252 +-0.0955750532448291778564453125 0.1798933446407318115234375 0.401252862811088573113948996252 +-0.0955720514059066744705361884371 -0.113690248131752005833483565311 -0.0209881491959094980404021413278 +-0.0955720514059066744705361884371 0.113690248131752005833483565311 -0.0209881491959094980404021413278 +-0.0955287992954254178146200615629 -0.294002008438110362664730246252 0.253844404220581076891960492503 +-0.0955287992954254178146200615629 0.294002008438110362664730246252 0.253844404220581076891960492503 +-0.09550400078296661376953125 -0.18734599649906158447265625 -0.13520525395870208740234375 +-0.09550400078296661376953125 0.18734599649906158447265625 -0.13520525395870208740234375 +-0.0954234011471271487137002509371 -0.411769348382949817999332253748 -0.15440310537815093994140625 +-0.0954234011471271487137002509371 0.411769348382949817999332253748 -0.15440310537815093994140625 +-0.09539370238780975341796875 -0.353651860356330893786491742503 0.261400499939918540270866742503 +-0.09539370238780975341796875 0.353651860356330893786491742503 0.261400499939918540270866742503 +-0.0953623492270708056350869696871 -0.111984956264495852384932561563 -0.83717690408229827880859375 +-0.0953623492270708056350869696871 0.111984956264495852384932561563 -0.83717690408229827880859375 +-0.0953280031681060791015625 -0.1306232511997222900390625 0.19065724313259124755859375 +-0.0953280031681060791015625 0.1306232511997222900390625 0.19065724313259124755859375 +-0.0952888011932373074630575615629 -0.634115982055664106908920985006 -0.4783480167388916015625 +-0.0952888011932373074630575615629 0.634115982055664106908920985006 -0.4783480167388916015625 +-0.0952439993619918767731036268742 -0.422386801242828346936164507497 -0.415353012084960948602230246252 +-0.0952439993619918767731036268742 0.422386801242828346936164507497 -0.415353012084960948602230246252 +-0.095178999006748199462890625 -0.2067770063877105712890625 -0.103364251554012298583984375 +-0.095178999006748199462890625 0.2067770063877105712890625 -0.103364251554012298583984375 +-0.0951779007911682101150674384371 0 0.844654345512390158923210492503 +-0.0951057970523834228515625 -0.0309013009071350125411825615629 0 +-0.0951057970523834228515625 0.0309013009071350125411825615629 0 +-0.0950251489877700777908486884371 -0.0690390005707740700424679403113 0.0932943016290664617340411268742 +-0.0950251489877700777908486884371 0.0690390005707740700424679403113 0.0932943016290664617340411268742 +-0.0950154036283493014236611884371 -0.0766802966594695989410723768742 -0.087133347988128662109375 +-0.0950154036283493014236611884371 0.0766802966594695989410723768742 -0.087133347988128662109375 +-0.0950025022029876708984375 -0.454302728176116943359375 -0.58913849294185638427734375 +-0.0950025022029876708984375 0.454302728176116943359375 -0.58913849294185638427734375 +-0.0949852466583251953125 -0.16972674429416656494140625 0.15706874430179595947265625 +-0.0949852466583251953125 0.16972674429416656494140625 0.15706874430179595947265625 +-0.0949792981147766224303552462516 -0.0121141999959945689119278355861 -0.0288475990295410170127787807814 +-0.0949792981147766224303552462516 0.0121141999959945689119278355861 -0.0288475990295410170127787807814 +-0.0949669539928436196030148153113 -0.104555252194404604826338811563 -0.050492249429225921630859375 +-0.0949669539928436196030148153113 0.104555252194404604826338811563 -0.050492249429225921630859375 +-0.0948686957359313881577023153113 -0.212130296230316151007144753748 0.1897383034229278564453125 +-0.0948686957359313881577023153113 0.212130296230316151007144753748 0.1897383034229278564453125 +-0.0948642529547214508056640625 -0.0689222469925880459884481865629 0.841873148083686850817741742503 +-0.0948642529547214508056640625 0.0689222469925880459884481865629 0.841873148083686850817741742503 +-0.09477250277996063232421875 -0.1310265064239501953125 -0.19065724313259124755859375 +-0.09477250277996063232421875 0.1310265064239501953125 -0.19065724313259124755859375 +-0.0947212994098663441100427462516 -0.0162458002567291252826731096093 0.0276396006345748929122763115629 +-0.0947212994098663441100427462516 0.0162458002567291252826731096093 0.0276396006345748929122763115629 +-0.0946523532271385248382244981258 -0.121828847378492352571122125937 0.6314255893230438232421875 +-0.0946523532271385248382244981258 0.121828847378492352571122125937 0.6314255893230438232421875 +-0.0946053005754947662353515625 -0.386930698156356833727897992503 -0.209366999566555023193359375 +-0.0946053005754947662353515625 0.386930698156356833727897992503 -0.209366999566555023193359375 +-0.0945588022470474215408486884371 -0.155382853746414167916967130623 0.299022844433784462658820757497 +-0.0945588022470474215408486884371 0.155382853746414167916967130623 0.299022844433784462658820757497 +-0.0945395998656749780852948106258 -0.290957397222518954205128238755 0.330009287595748934673878238755 +-0.0945395998656749780852948106258 0.290957397222518954205128238755 0.330009287595748934673878238755 +-0.0945115983486175537109375 -0.0267378002405166646793244211722 -0.0187791004776954664756694057814 +-0.0945115983486175537109375 0.0267378002405166646793244211722 -0.0187791004776954664756694057814 +-0.0945092022418975857833700615629 -0.2044804096221923828125 -0.330538797378540083471420985006 +-0.0945092022418975857833700615629 0.2044804096221923828125 -0.330538797378540083471420985006 +-0.09450034797191619873046875 -0.215408197045326210705695757497 -0.259170109033584561419871761245 +-0.09450034797191619873046875 0.215408197045326210705695757497 -0.259170109033584561419871761245 +-0.0944845974445343017578125 -0.634080308675765924597556022491 0.281096199154853787494090511245 +-0.0944845974445343017578125 0.634080308675765924597556022491 0.281096199154853787494090511245 +-0.0943776011466980063735476846887 -0.0685684025287628257094851846887 0.162453794479370139391960492503 +-0.0943776011466980063735476846887 0.0685684025287628257094851846887 0.162453794479370139391960492503 +-0.0943704038858413640777911268742 -0.0976581037044525063217648153113 -0.267501604557037364617855246252 +-0.0943704038858413640777911268742 0.0976581037044525063217648153113 -0.267501604557037364617855246252 +-0.0943511009216308621505575615629 -0.03052090108394622802734375 -0.0128970995545387278474747105861 +-0.0943511009216308621505575615629 0.03052090108394622802734375 -0.0128970995545387278474747105861 +-0.0943390041589736855209835653113 -0.336415806412696805072215511245 -0.0206031005829572649856729071871 +-0.0943390041589736855209835653113 0.336415806412696805072215511245 -0.0206031005829572649856729071871 +-0.0943127989768981905838174384371 -0.290268900990486133917301003748 -0.8466695845127105712890625 +-0.0943127989768981905838174384371 0.290268900990486133917301003748 -0.8466695845127105712890625 +-0.0943048000335693359375 -0.397147989273071322369190738755 0.688026380538940496300881477509 +-0.0943048000335693359375 0.397147989273071322369190738755 0.688026380538940496300881477509 +-0.0942717015743255726256677462516 -0.0307655006647109992290456403907 0.0128970995545387278474747105861 +-0.0942717015743255726256677462516 0.0307655006647109992290456403907 0.0128970995545387278474747105861 +-0.0942622460424900054931640625 -0.19138200581073760986328125 0.7190182507038116455078125 +-0.0942622460424900054931640625 0.19138200581073760986328125 0.7190182507038116455078125 +-0.094203002750873565673828125 -0.289922413229942332879573996252 0.846800100803375310754006477509 +-0.094203002750873565673828125 0.289922413229942332879573996252 0.846800100803375310754006477509 +-0.0942014992237091147719851846887 -0.0228897005319595343852956403907 -0.0245385006070137044742462961722 +-0.0942014992237091147719851846887 0.0228897005319595343852956403907 -0.0245385006070137044742462961722 +-0.0941897988319397028167401231258 -0.0270622998476028470138388115629 0.0198973998427391073062775461722 +-0.0941897988319397028167401231258 0.0270622998476028470138388115629 0.0198973998427391073062775461722 +-0.094180501997470855712890625 -0.068425498902797698974609375 0.22124199569225311279296875 +-0.094180501997470855712890625 0.068425498902797698974609375 0.22124199569225311279296875 +-0.0941550962626934023758096259371 -0.521957150101661659924445757497 0.375760444998741172106804242503 +-0.0941550962626934023758096259371 0.521957150101661659924445757497 0.375760444998741172106804242503 +-0.09413444995880126953125 -0.110832595825195306948884876874 0.0368080504238605457634214701557 +-0.09413444995880126953125 0.110832595825195306948884876874 0.0368080504238605457634214701557 +-0.0941291965544223813155966240629 -0.508132350444793767785256477509 0.188257852196693442614616742503 +-0.0941291965544223813155966240629 0.508132350444793767785256477509 0.188257852196693442614616742503 +-0.094122998416423797607421875 -0.2003747522830963134765625 0.116149999201297760009765625 +-0.094122998416423797607421875 0.2003747522830963134765625 0.116149999201297760009765625 +-0.0940492048859596224685830634371 -0.336228907108306884765625 0.024592049419879913330078125 +-0.0940492048859596224685830634371 0.336228907108306884765625 0.024592049419879913330078125 +-0.093993999063968658447265625 -0.22410024702548980712890625 -0.0586872510612010955810546875 +-0.093993999063968658447265625 0.22410024702548980712890625 -0.0586872510612010955810546875 +-0.0939608998596668243408203125 -0.8751321136951446533203125 0.187922698259353648797542746252 +-0.0939608998596668243408203125 0.8751321136951446533203125 0.187922698259353648797542746252 +-0.0939542524516582544524823106258 -0.599246683716774031225327235006 -0.233615194261074077264339621252 +-0.0939542524516582544524823106258 0.599246683716774031225327235006 -0.233615194261074077264339621252 +-0.0938877999782562339126101846887 0 -0.03442490100860595703125 +-0.09386099874973297119140625 -0.592612802982330322265625 0 +-0.09386099874973297119140625 -0.224815195798873906918302623126 -0.175066494941711420230134876874 +-0.09386099874973297119140625 0.224815195798873906918302623126 -0.175066494941711420230134876874 +-0.09386099874973297119140625 0.592612802982330322265625 0 +-0.0938034512102603884597940009371 -0.804267427325248696057258257497 -0.258562344312667835577457253748 +-0.0938034512102603884597940009371 0.804267427325248696057258257497 -0.258562344312667835577457253748 +-0.0938000023365020835219851846887 -0.00412500016391277330579656634768 0.0344173014163970947265625 +-0.0938000023365020835219851846887 0.00412500016391277330579656634768 0.0344173014163970947265625 +-0.0937975466251373263260049384371 -0.00619515012949705106554132427732 0.11689169704914093017578125 +-0.0937975466251373263260049384371 0.00619515012949705106554132427732 0.11689169704914093017578125 +-0.0937853962182998573959835653113 -0.0681388512253761208237179403113 -0.0951914995908737099350460653113 +-0.0937853962182998573959835653113 0.0681388512253761208237179403113 -0.0951914995908737099350460653113 +-0.0937548995018005482116052462516 -0.0342844009399414090255575615629 0.005881600081920623779296875 +-0.0937548995018005482116052462516 0.0342844009399414090255575615629 0.005881600081920623779296875 +-0.0937282979488372886001101846887 -0.0341430991888046278526225307814 -0.00701769962906837515420610529304 +-0.0937282979488372886001101846887 0.0341430991888046278526225307814 -0.00701769962906837515420610529304 +-0.0936980970203876578628054971887 -0.674487912654876731188835492503 -0.588462281227111860815170985006 +-0.0936980970203876578628054971887 0.674487912654876731188835492503 -0.588462281227111860815170985006 +-0.0936760008335113525390625 -0.395083010196685791015625 -0.29177749156951904296875 +-0.0936760008335113525390625 0.395083010196685791015625 -0.29177749156951904296875 +-0.0936392962932586642166299384371 -0.248142904043197609631477007497 0.140202900767326360531583873126 +-0.0936392962932586642166299384371 0.248142904043197609631477007497 0.140202900767326360531583873126 +-0.0936220496892928993881710653113 -0.09234555065631866455078125 0.0721609488129615755935830634371 +-0.0936220496892928993881710653113 0.09234555065631866455078125 0.0721609488129615755935830634371 +-0.09358119964599609375 -0.133874404430389420950220369377 0.365130400657653841900440738755 +-0.09358119964599609375 0.133874404430389420950220369377 0.365130400657653841900440738755 +-0.0935787022113800104339276231258 -0.00810849964618682965411533558608 -0.0343115985393524156044087192186 +-0.0935787022113800104339276231258 0.00810849964618682965411533558608 -0.0343115985393524156044087192186 +-0.0935298033058643424331179971887 -0.287860302627086672710987613755 -0.575229188799858071057258257497 +-0.0935298033058643424331179971887 0.287860302627086672710987613755 -0.575229188799858071057258257497 +-0.0935123980045318714537927462516 -0.02324520051479339599609375 0.0267412006855011000205912807814 +-0.0935123980045318714537927462516 0.02324520051479339599609375 0.0267412006855011000205912807814 +-0.0934800021350383758544921875 -0.287707507610321044921875 -0.686283767223358154296875 +-0.0934800021350383758544921875 0.287707507610321044921875 -0.686283767223358154296875 +-0.0934762001037597600738848768742 -0.762278312444686911852897992503 -0.364270898699760425909488503748 +-0.0934762001037597600738848768742 0.762278312444686911852897992503 -0.364270898699760425909488503748 +-0.0934687972068786732116052462516 -0.341054391860961925164730246252 0.186937201023101823293970369377 +-0.0934687972068786732116052462516 0.341054391860961925164730246252 0.186937201023101823293970369377 +-0.0934562027454376303969851846887 -0.16350400447845458984375 0.0673229992389678955078125 +-0.0934562027454376303969851846887 0.16350400447845458984375 0.0673229992389678955078125 +-0.0933991014957428061782351846887 -0.0187429994344711324527619211722 -0.0304188996553421027446706403907 +-0.0933991014957428061782351846887 0.0187429994344711324527619211722 -0.0304188996553421027446706403907 +-0.0933796547353267641922158759371 -0.625259715318679853979233485006 -0.151096399128437058889673494377 +-0.0933796547353267641922158759371 0.625259715318679853979233485006 -0.151096399128437058889673494377 +-0.0933784008026123102386151231258 -0.388948011398315474096420985006 0 +-0.0933784008026123102386151231258 0.388948011398315474096420985006 0 +-0.0933752000331878745376101846887 -0.166071605682373057977230246252 -0.0608381986618042047698651231258 +-0.0933752000331878745376101846887 0.166071605682373057977230246252 -0.0608381986618042047698651231258 +-0.09332449734210968017578125 -0.483321487903594970703125 -0.087696500122547149658203125 +-0.09332449734210968017578125 0.483321487903594970703125 -0.087696500122547149658203125 +-0.093293249607086181640625 -0.2211894989013671875 0.069796502590179443359375 +-0.093293249607086181640625 0.2211894989013671875 0.069796502590179443359375 +-0.0932799011468887218079260037484 -0.137487000226974465100227007497 -0.679996788501739501953125 +-0.0932799011468887218079260037484 0.137487000226974465100227007497 -0.679996788501739501953125 +-0.0932003974914550753494424384371 -0.15759479999542236328125 -0.57138240337371826171875 +-0.0932003974914550753494424384371 0.15759479999542236328125 -0.57138240337371826171875 +-0.0931598529219627297104366903113 -0.286721745133399930072215511245 -0.177797210216522200143529630623 +-0.0931598529219627297104366903113 0.286721745133399930072215511245 -0.177797210216522200143529630623 +-0.0931545972824096707443075615629 -0.0122727997601032260549525076954 0.0342285990715026841590962192186 +-0.0931545972824096707443075615629 0.0122727997601032260549525076954 0.0342285990715026841590962192186 +-0.0931528046727180536468182481258 -0.426799762248992908819644753748 -0.481315258145332325323551003748 +-0.0931528046727180536468182481258 0.426799762248992908819644753748 -0.481315258145332325323551003748 +-0.0931312024593353299239950615629 0 -0.176993203163146983758480246252 +-0.0931161496788263237656124715613 -0.83869135379791259765625 0.436377762258052803723273882497 +-0.0931161496788263237656124715613 0.83869135379791259765625 0.436377762258052803723273882497 +-0.0931114464998245155991085653113 -0.0184197004884481436992604841407 0.116150549054145804661608565311 +-0.0931114464998245155991085653113 0.0184197004884481436992604841407 0.116150549054145804661608565311 +-0.0930704981088638222397335653113 -0.0552769482135772663444761576557 0.10383810102939605712890625 +-0.0930704981088638222397335653113 0.0552769482135772663444761576557 0.10383810102939605712890625 +-0.0930064022541046142578125 -0.232778406143188482113615123126 0.311711597442626997533920985006 +-0.0930064022541046142578125 0.232778406143188482113615123126 0.311711597442626997533920985006 +-0.0929981037974357688247195596887 -0.562202546000480696264389735006 -0.312698103487491607666015625 +-0.0929981037974357688247195596887 0.562202546000480696264389735006 -0.312698103487491607666015625 +-0.0929845511913299505035723768742 -0.110656651854515078459151311563 -0.0401119485497474642654580634371 +-0.0929845511913299505035723768742 0.110656651854515078459151311563 -0.0401119485497474642654580634371 +-0.0929325997829437283614950615629 -0.116736996173858645353682561563 0.133176600933074956722990123126 +-0.0929325997829437283614950615629 0.116736996173858645353682561563 0.133176600933074956722990123126 +-0.09292455203831195831298828125 -0.469581639766693093029914507497 -0.702394944429397538598891514994 +-0.09292455203831195831298828125 0.469581639766693093029914507497 -0.702394944429397538598891514994 +-0.0928882449865341131012286268742 -0.135164402425289154052734375 -0.30919630825519561767578125 +-0.0928882449865341131012286268742 0.135164402425289154052734375 -0.30919630825519561767578125 +-0.092878997325897216796875 -0.114890801906585696134932561563 -0.134809601306915299856470369377 +-0.092878997325897216796875 0.114890801906585696134932561563 -0.134809601306915299856470369377 +-0.0928178995847701998611611884371 -0.331737691164016690326121761245 -0.0619269013404846122017310960928 +-0.0928178995847701998611611884371 0.331737691164016690326121761245 -0.0619269013404846122017310960928 +-0.092762999236583709716796875 -0.3522324860095977783203125 0.3425304889678955078125 +-0.092762999236583709716796875 0.3522324860095977783203125 0.3425304889678955078125 +-0.0927458994090557126144247490629 0 -0.440338951349258433953792746252 +-0.0927051007747650146484375 -0.285316801071166969983039507497 0 +-0.0927051007747650146484375 0.285316801071166969983039507497 0 +-0.09258989989757537841796875 -0.155776208639144903012052623126 -0.239083492755889887027009876874 +-0.09258989989757537841796875 0.155776208639144903012052623126 -0.239083492755889887027009876874 +-0.092583596706390380859375 -0.1657235920429229736328125 0.232301402091979969366519753748 +-0.092583596706390380859375 0.1657235920429229736328125 0.232301402091979969366519753748 +-0.0925121970474720028976278740629 -0.0223525492474436794643199988286 0.54170270264148712158203125 +-0.0925121970474720028976278740629 0.0223525492474436794643199988286 0.54170270264148712158203125 +-0.0924150019884109469314736884371 -0.0991320043802261380294638115629 0.0642830997705459566970986884371 +-0.0924150019884109469314736884371 0.0991320043802261380294638115629 0.0642830997705459566970986884371 +-0.0924037456512451088608273153113 -0.0793693542480468777755575615629 0.0875332474708557101150674384371 +-0.0924037456512451088608273153113 0.0793693542480468777755575615629 0.0875332474708557101150674384371 +-0.0923961505293846019348791287484 -0.237639847397804249151676003748 0.239771342277526833264289507497 +-0.0923961505293846019348791287484 0.237639847397804249151676003748 0.239771342277526833264289507497 +-0.0923880994319915826995526231258 -0.0382679998874664306640625 0 +-0.0923880994319915826995526231258 0.0382679998874664306640625 0 +-0.092384003102779388427734375 -0.17781950533390045166015625 -0.14948375523090362548828125 +-0.092384003102779388427734375 0.17781950533390045166015625 -0.14948375523090362548828125 +-0.0923735976219177273849325615629 -0.364483201503753628802684261245 0.467567396163940385278579014994 +-0.0923735976219177273849325615629 0.364483201503753628802684261245 0.467567396163940385278579014994 +-0.0923680543899536160568075615629 -0.1178572475910186767578125 0.0088224001228809356689453125 +-0.0923680543899536160568075615629 0.1178572475910186767578125 0.0088224001228809356689453125 +-0.09234045445919036865234375 -0.0297868497669696793983540317186 -0.114394050836563107576004938437 +-0.09234045445919036865234375 0.0297868497669696793983540317186 -0.114394050836563107576004938437 +-0.0923146024346351568024005018742 -0.468724179267883289679019753748 0.511639797687530539782585492503 +-0.0923146024346351568024005018742 0.468724179267883289679019753748 0.511639797687530539782585492503 +-0.0922855496406555092514523153113 -0.0100063495337963104248046875 -0.117827099561691281404129938437 +-0.0922855496406555092514523153113 0.0100063495337963104248046875 -0.117827099561691281404129938437 +-0.0922446012496948297698651231258 -0.842443174123764015881477007497 0.30295349657535552978515625 +-0.0922446012496948297698651231258 0.842443174123764015881477007497 0.30295349657535552978515625 +-0.0922131031751632634918536268742 -0.0301777504384517641922158759371 0.11439420282840728759765625 +-0.0922131031751632634918536268742 0.0301777504384517641922158759371 0.11439420282840728759765625 +-0.0921907007694244412521200615629 -0.0191777005791664151290731865629 0.0336614012718200669715962192186 +-0.0921907007694244412521200615629 0.0191777005791664151290731865629 0.0336614012718200669715962192186 +-0.0921778023242950522719851846887 -0.0339204013347625746299662807814 0.0187791004776954664756694057814 +-0.0921778023242950522719851846887 0.0339204013347625746299662807814 0.0187791004776954664756694057814 +-0.0921539962291717529296875 -0.117884847521781910284488503748 -0.0105265494436025622976282889454 +-0.0921539962291717529296875 0.117884847521781910284488503748 -0.0105265494436025622976282889454 +-0.0921464979648590198912927462516 -0.0147412002086639414705215855861 -0.0359405994415283244758363423443 +-0.0921464979648590198912927462516 0.0147412002086639414705215855861 -0.0359405994415283244758363423443 +-0.0921082973480224637130575615629 -0.0334688007831573514083700615629 -0.0198973998427391073062775461722 +-0.0921082973480224637130575615629 0.0334688007831573514083700615629 -0.0198973998427391073062775461722 +-0.0920991983264684704879599053129 -0.831750491261482260973991742503 -0.149024545401334751471011941248 +-0.0920991983264684704879599053129 0.831750491261482260973991742503 -0.149024545401334751471011941248 +-0.0920591980218887356857138115629 -0.283329892158508289679019753748 -0.0353456988930702167839292826557 +-0.0920591980218887356857138115629 0.283329892158508289679019753748 -0.0353456988930702167839292826557 +-0.0920041501522064208984375 -0.283154198527336087298778011245 0.184008300304412841796875 +-0.0920041501522064208984375 0.283154198527336087298778011245 0.184008300304412841796875 +-0.0919947981834411676604901231258 -0.0296002000570297248149831403907 -0.02570579946041107177734375 +-0.0919947981834411676604901231258 0.0296002000570297248149831403907 -0.02570579946041107177734375 +-0.09198839962482452392578125 -0.581566298007964999072783029987 -0.378574711084365800317641514994 +-0.09198839962482452392578125 0.581566298007964999072783029987 -0.378574711084365800317641514994 +-0.0919802010059356800475427462516 -0.0668273985385894747635049384371 -0.164540994167327897512720369377 +-0.0919802010059356800475427462516 0.0668273985385894747635049384371 -0.164540994167327897512720369377 +-0.0919782042503356905838174384371 -0.0915621042251586886306924384371 0.270474296808242808953792746252 +-0.0919782042503356905838174384371 0.0915621042251586886306924384371 0.270474296808242808953792746252 +-0.0919553995132446344573651231258 -0.0375034004449844374229350307814 0.011734999716281890869140625 +-0.0919553995132446344573651231258 0.0375034004449844374229350307814 0.011734999716281890869140625 +-0.0919400464743375667175939724984 -0.536035624146461442407485264994 0.778917378187179543225227007497 +-0.0919400464743375667175939724984 0.536035624146461442407485264994 0.778917378187179543225227007497 +-0.0918989986181259072006710653113 -0.0591199502348899799675230326557 -0.10275900363922119140625 +-0.0918989986181259072006710653113 0.0591199502348899799675230326557 -0.10275900363922119140625 +-0.0918834030628204317947549384371 -0.329565954208373979028579014994 0.0737814001739025004944494412484 +-0.0918834030628204317947549384371 0.329565954208373979028579014994 0.0737814001739025004944494412484 +-0.0918241024017334012130575615629 -0.03012549877166748046875 0.02570579946041107177734375 +-0.0918241024017334012130575615629 0.03012549877166748046875 0.02570579946041107177734375 +-0.0918223977088928333678552462516 -0.793318414688110373766960492503 -0.0470623999834060696700888115629 +-0.0918223977088928333678552462516 0.793318414688110373766960492503 -0.0470623999834060696700888115629 +-0.0917856037616729680816973768742 -0.282485103607177712170539507497 0.0421607986092567416092080634371 +-0.0917856037616729680816973768742 0.282485103607177712170539507497 0.0421607986092567416092080634371 +-0.0917729973793029868422976846887 -0.0371744006872177165656800923443 -0.0139920994639396670949915701954 +-0.0917729973793029868422976846887 0.0371744006872177165656800923443 -0.0139920994639396670949915701954 +-0.0917325004935264642913494981258 -0.0892732501029968317229901231258 -0.431410950422286998406917746252 +-0.0917325004935264642913494981258 0.0892732501029968317229901231258 -0.431410950422286998406917746252 +-0.0917302012443542563735476846887 -0.00406400002539157850084405865232 -0.039611399173736572265625 +-0.0917302012443542563735476846887 0.00406400002539157850084405865232 -0.039611399173736572265625 +-0.0917064510285854478377487453145 -0.0666280999779701316176883096887 0.538192051649093672338608485006 +-0.0917064510285854478377487453145 0.0666280999779701316176883096887 0.538192051649093672338608485006 +-0.0917051970958709800063601846887 -0.0831182003021240234375 0.157103395462036138363615123126 +-0.0917051970958709800063601846887 0.0831182003021240234375 0.157103395462036138363615123126 +-0.091681003570556640625 -0.77257001399993896484375 0.628274977207183837890625 +-0.091681003570556640625 0.77257001399993896484375 0.628274977207183837890625 +-0.0915909498929977500258914346887 -0.478346547484397921490284488755 0.255529998242855105328175113755 +-0.0915909498929977500258914346887 0.478346547484397921490284488755 0.255529998242855105328175113755 +-0.091572247445583343505859375 -0.21623225510120391845703125 -0.08577950298786163330078125 +-0.091572247445583343505859375 0.21623225510120391845703125 -0.08577950298786163330078125 +-0.091508500277996063232421875 -0.48032701015472412109375 0.104461498558521270751953125 +-0.091508500277996063232421875 0.48032701015472412109375 0.104461498558521270751953125 +-0.0914723992347717396178552462516 -0.386557197570800814556690738755 -0.0469723999500274713714276231258 +-0.0914723992347717396178552462516 0.386557197570800814556690738755 -0.0469723999500274713714276231258 +-0.0913685977458953968444177462516 -0.0255176991224288947368581403907 -0.0316327005624771132041850307814 +-0.0913685977458953968444177462516 0.0255176991224288947368581403907 -0.0316327005624771132041850307814 +-0.0913648501038551302810830634371 -0.4009513556957244873046875 0.182730156183242814504907869377 +-0.0913648501038551302810830634371 0.4009513556957244873046875 0.182730156183242814504907869377 +-0.0913230001926422230162927462516 0 0.0407445996999740642219300923443 +-0.0912411987781524685958700615629 -0.2808167934417724609375 -0.269846010208129871710269753748 +-0.0912411987781524685958700615629 0.2808167934417724609375 -0.269846010208129871710269753748 +-0.0911907970905304066100427462516 -0.0264167994260787984683869211722 -0.3885695934295654296875 +-0.0911907970905304066100427462516 0.0264167994260787984683869211722 -0.3885695934295654296875 +-0.0911179482936859130859375 -0.1157758533954620361328125 0.0281686507165431962440571567186 +-0.0911179482936859130859375 0.1157758533954620361328125 0.0281686507165431962440571567186 +-0.0910135984420776394943075615629 -0.0082240998744964599609375 0.04060649871826171875 +-0.0910135984420776394943075615629 0.0082240998744964599609375 0.04060649871826171875 +-0.0910019993782043568053552462516 -0.175868594646453879626335492503 0.0280864000320434591129181711722 +-0.0910019993782043568053552462516 0.175868594646453879626335492503 0.0280864000320434591129181711722 +-0.0909355998039245716491052462516 -0.176567399501800559313835492503 -0.023551799356937408447265625 +-0.0909355998039245716491052462516 0.176567399501800559313835492503 -0.023551799356937408447265625 +-0.0908656001091003445724325615629 -0.792836809158325217516960492503 0.0561583995819091852386151231258 +-0.0908656001091003445724325615629 0.792836809158325217516960492503 0.0561583995819091852386151231258 +-0.0908109001815319144546023721887 -0.103003203123807909880049749063 0.4285368025302886962890625 +-0.0908109001815319144546023721887 0.103003203123807909880049749063 0.4285368025302886962890625 +-0.09080524742603302001953125 -0.0166510008275508880615234375 -0.2323297560214996337890625 +-0.09080524742603302001953125 0.0166510008275508880615234375 -0.2323297560214996337890625 +-0.0908052027225494384765625 -0.0261546999216079739669638115629 0.0327161014080047593544087192186 +-0.0908052027225494384765625 0.0261546999216079739669638115629 0.0327161014080047593544087192186 +-0.090798199176788330078125 -0.178201198577880859375 0 +-0.090798199176788330078125 0.178201198577880859375 0 +-0.0907646000385284451583700615629 -0.0415592998266220148284588731258 0.00588279999792575870876110144536 +-0.0907646000385284451583700615629 0.0415592998266220148284588731258 0.00588279999792575870876110144536 +-0.09075795114040374755859375 -0.105435597896575930509932561563 0.0560920491814613300651792826557 +-0.09075795114040374755859375 0.105435597896575930509932561563 0.0560920491814613300651792826557 +-0.090747497975826263427734375 -0.1480000019073486328125 0.4688934981822967529296875 +-0.090747497975826263427734375 0.1480000019073486328125 0.4688934981822967529296875 +-0.0907442986965179554381677462516 -0.0414269000291824368575888115629 -0.00701979994773864815482689039072 +-0.0907442986965179554381677462516 0.0414269000291824368575888115629 -0.00701979994773864815482689039072 +-0.0906476020812988364516726846887 -0.385544395446777377056690738755 0.05602359771728515625 +-0.0906476020812988364516726846887 -0.145590603351593017578125 0.102890002727508547697432561563 +-0.0906476020812988364516726846887 0.145590603351593017578125 0.102890002727508547697432561563 +-0.0906476020812988364516726846887 0.385544395446777377056690738755 0.05602359771728515625 +-0.0906450033187866238693075615629 -0.588889789581298783716079014994 -0.0706547990441322298904580634371 +-0.0906450033187866238693075615629 0.588889789581298783716079014994 -0.0706547990441322298904580634371 +-0.090631000697612762451171875 -0.14741100370883941650390625 0.984914004802703857421875 +-0.090631000697612762451171875 0.14741100370883941650390625 0.984914004802703857421875 +-0.0906287025660276329697140340613 -0.616499033570289567407485264994 0.578113037347793512488181022491 +-0.0906287025660276329697140340613 0.616499033570289567407485264994 0.578113037347793512488181022491 +-0.0906035006046295166015625 -0.06582699716091156005859375 -0.4872964918613433837890625 +-0.0906035006046295166015625 0.06582699716091156005859375 -0.4872964918613433837890625 +-0.0905880033969879150390625 -0.06581600010395050048828125 -0.993710994720458984375 +-0.0905880033969879150390625 0.06581600010395050048828125 -0.993710994720458984375 +-0.09045074880123138427734375 -0.14694474637508392333984375 0.18090300261974334716796875 +-0.09045074880123138427734375 0.14694474637508392333984375 0.18090300261974334716796875 +-0.090449996292591094970703125 -0.065715752542018890380859375 -0.22360725700855255126953125 +-0.090449996292591094970703125 0.065715752542018890380859375 -0.22360725700855255126953125 +-0.09044100344181060791015625 -0.115886253118515011872879938437 -0.0298460997641086557552458913278 +-0.09044100344181060791015625 0.115886253118515011872879938437 -0.0298460997641086557552458913278 +-0.0904276013374328696547976846887 -0.0106493003666400919832168980861 -0.0413453996181488078742738423443 +-0.0904276013374328696547976846887 0.0106493003666400919832168980861 -0.0413453996181488078742738423443 +-0.0904099047183990478515625 -0.590734899044036865234375 0.364497703313827470239516514994 +-0.0904099047183990478515625 0.590734899044036865234375 0.364497703313827470239516514994 +-0.0903204977512359619140625 -0.0151546999812126170076309605861 0.0401564002037048395354901231258 +-0.0903204977512359619140625 0.0151546999812126170076309605861 0.0401564002037048395354901231258 +-0.0902655005455017117599325615629 -0.0213020995259285000900106865629 -0.0373944997787475572059712192186 +-0.0902655005455017117599325615629 0.0213020995259285000900106865629 -0.0373944997787475572059712192186 +-0.0901715993881225669204226846887 -0.105631995201110842619307561563 -0.375114393234252940789730246252 +-0.0901715993881225669204226846887 0.105631995201110842619307561563 -0.375114393234252940789730246252 +-0.090120501816272735595703125 -0.2773675024509429931640625 -0.40613448619842529296875 +-0.090120501816272735595703125 0.2773675024509429931640625 -0.40613448619842529296875 +-0.0901062488555908203125 -0.1152195036411285400390625 -0.20274449884891510009765625 +-0.0901062488555908203125 0.1152195036411285400390625 -0.20274449884891510009765625 +-0.0900969028472900362869424384371 -0.2772915065288543701171875 -0.0706544995307922391036825615629 +-0.0900969028472900362869424384371 0.2772915065288543701171875 -0.0706544995307922391036825615629 +-0.0900784492492675697983273153113 -0.0910233020782470619858273153113 -0.0781064987182617104233273153113 +-0.0900784492492675697983273153113 0.0910233020782470619858273153113 -0.0781064987182617104233273153113 +-0.0899385005235671941559161268742 -0.212689501047134382760717130623 -0.191505306959152216128572376874 +-0.0899385005235671941559161268742 0.212689501047134382760717130623 -0.191505306959152216128572376874 +-0.0898842021822929271301916287484 -0.322671645879745450091746761245 -0.101508049666881552952624190311 +-0.0898842021822929271301916287484 0.322671645879745450091746761245 -0.101508049666881552952624190311 +-0.0898788034915923988998898153113 -0.0405932977795600904991069057814 0.113022002577781666143863503748 +-0.0898788034915923988998898153113 0.0405932977795600904991069057814 0.113022002577781666143863503748 +-0.089867003262042999267578125 -0.21004350483417510986328125 0.1015167534351348876953125 +-0.089867003262042999267578125 0.21004350483417510986328125 0.1015167534351348876953125 +-0.0898594021797180231292401231258 -0.0266140013933181783511994211722 -0.176683402061462407894865123126 +-0.0898594021797180231292401231258 0.0266140013933181783511994211722 -0.176683402061462407894865123126 +-0.0898370027542114285568075615629 -0.172533595561981223376335492503 -0.04649139940738677978515625 +-0.0898370027542114285568075615629 0.172533595561981223376335492503 -0.04649139940738677978515625 +-0.0898293510079383877853231865629 -0.61818574368953704833984375 0.179658043384552018606470369377 +-0.0898293510079383877853231865629 0.61818574368953704833984375 0.179658043384552018606470369377 +-0.0898280531167984092055789346887 -0.276457341015338919909538617503 0.58137948811054229736328125 +-0.0898280531167984092055789346887 0.276457341015338919909538617503 0.58137948811054229736328125 +-0.08979029953479766845703125 -0.372198155522346529888721988755 -0.236444851756095891781583873126 +-0.08979029953479766845703125 0.372198155522346529888721988755 -0.236444851756095891781583873126 +-0.0897527992725372369964276231258 -0.105397605895996102076672684689 -0.7879312038421630859375 +-0.0897527992725372369964276231258 0.105397605895996102076672684689 -0.7879312038421630859375 +-0.08973164856433868408203125 -0.09849254786968231201171875 -0.0689017519354820223709268134371 +-0.08973164856433868408203125 0.09849254786968231201171875 -0.0689017519354820223709268134371 +-0.08971560001373291015625 -0.040542900562286376953125 0.0175322994589805596088449846093 +-0.08971560001373291015625 0.040542900562286376953125 0.0175322994589805596088449846093 +-0.0896687999367713900467080634371 0 -0.643785348534584023205695757497 +-0.0896651029586792019943075615629 -0.0368512988090515178352113423443 0.0245386004447937025596537807814 +-0.0896651029586792019943075615629 0.0368512988090515178352113423443 0.0245386004447937025596537807814 +-0.0896153986454010093032351846887 -0.148944795131683349609375 -0.0989167988300323486328125 +-0.0896153986454010093032351846887 0.148944795131683349609375 -0.0989167988300323486328125 +-0.0895936012268066517272302462516 0 0.389837193489074751440170985006 +-0.0895792007446289118011151231258 0 0.794968795776367254113381477509 +-0.0895791023969650240799111884371 -0.0650822997093200711349325615629 0.101192253828048708830245061563 +-0.0895791023969650240799111884371 0.0650822997093200711349325615629 0.101192253828048708830245061563 +-0.0894432008266449057876101846887 -0.170129597187042236328125 0.0552793979644775404502787807814 +-0.0894432008266449057876101846887 0.170129597187042236328125 0.0552793979644775404502787807814 +-0.0894424974918365534026776231258 0 -0.04472149908542633056640625 +-0.0894421994686126764495526231258 -0.105145394802093505859375 -0.144722402095794677734375 +-0.0894421994686126764495526231258 0.105145394802093505859375 -0.144722402095794677734375 +-0.0894420027732849148849325615629 0 0.178885805606842057668970369377 +-0.0894127517938613919357138115629 -0.049851000308990478515625 -0.10963694751262664794921875 +-0.0894127517938613919357138115629 0.049851000308990478515625 -0.10963694751262664794921875 +-0.0893508031964302118499432481258 -0.274997246265411388055355246252 -0.467859703302383467260483485006 +-0.0893508031964302118499432481258 0.274997246265411388055355246252 -0.467859703302383467260483485006 +-0.0893415033817291232010049384371 -0.0199697993695735938335378278907 -0.285690897703170743060496761245 +-0.0893415033817291232010049384371 0.0199697993695735938335378278907 -0.285690897703170743060496761245 +-0.08933325111865997314453125 -0.59448373317718505859375 -0.44845126569271087646484375 +-0.08933325111865997314453125 0.59448373317718505859375 -0.44845126569271087646484375 +-0.0893164992332458607116052462516 -0.0361589014530181926398988423443 -0.0267412006855011000205912807814 +-0.0893164992332458607116052462516 0.0361589014530181926398988423443 -0.0267412006855011000205912807814 +-0.0893024027347564808287927462516 -0.0322284013032913194130024692186 0.3885695934295654296875 +-0.0893024027347564808287927462516 0.0322284013032913194130024692186 0.3885695934295654296875 +-0.089284002780914306640625 -0.0648679971694946372329226846887 0.792351198196411199425881477509 +-0.089284002780914306640625 0.0648679971694946372329226846887 0.792351198196411199425881477509 +-0.0892541974782943697830361884371 -0.587310612201690673828125 0.0842592000961303738693075615629 +-0.0892541974782943697830361884371 0.587310612201690673828125 0.0842592000961303738693075615629 +-0.0892517983913421741881677462516 -0.0399765014648437513877787807814 -0.020880199968814849853515625 +-0.0892517983913421741881677462516 0.0399765014648437513877787807814 -0.020880199968814849853515625 +-0.0891988456249237088302450615629 -0.0892334997653961153885049384371 0.0811231523752212468902911268742 +-0.0891988456249237088302450615629 0.0892334997653961153885049384371 0.0811231523752212468902911268742 +-0.08918750286102294921875 -0.02201139926910400390625 0.0395107001066207913497763115629 +-0.08918750286102294921875 0.02201139926910400390625 0.0395107001066207913497763115629 +-0.0891662001609802301604901231258 -0.015691600739955902099609375 0.178334403038024918997095369377 +-0.0891662001609802301604901231258 0.015691600739955902099609375 0.178334403038024918997095369377 +-0.0891460448503494234939736884371 -0.0935819461941718999664630018742 0.325261992216110185083266514994 +-0.0891460448503494234939736884371 0.0935819461941718999664630018742 0.325261992216110185083266514994 +-0.08914150297641754150390625 -0.4703710079193115234375 -0.14423899352550506591796875 +-0.08914150297641754150390625 0.4703710079193115234375 -0.14423899352550506591796875 +-0.0891383469104766734680822537484 -0.274344000220298755987613503748 -0.198216548562049843518195757497 +-0.0891383469104766734680822537484 0.274344000220298755987613503748 -0.198216548562049843518195757497 +-0.0891008019447326743422976846887 -0.0453987002372741726974325615629 0 +-0.0891008019447326743422976846887 0.0453987002372741726974325615629 0 +-0.089098997414112091064453125 -0.085357248783111572265625 0.2174292504787445068359375 +-0.089098997414112091064453125 0.085357248783111572265625 0.2174292504787445068359375 +-0.0890864014625549344161825615629 -0.378479194641113292352230246252 -0.0938996016979217612563601846887 +-0.0890864014625549344161825615629 0.378479194641113292352230246252 -0.0938996016979217612563601846887 +-0.0890749990940093994140625 -0.44646251201629638671875 -0.20672850310802459716796875 +-0.0890749990940093994140625 0.44646251201629638671875 -0.20672850310802459716796875 +-0.0890731990337371853927450615629 -0.274142850935459148065120871252 -0.79963238537311553955078125 +-0.0890731990337371853927450615629 0.274142850935459148065120871252 -0.79963238537311553955078125 +-0.08906824886798858642578125 -0.16687475144863128662109375 -0.163461744785308837890625 +-0.08906824886798858642578125 0.16687475144863128662109375 -0.163461744785308837890625 +-0.08899439871311187744140625 -0.273894292116165172235042746252 0.084035396575927734375 +-0.08899439871311187744140625 0.273894292116165172235042746252 0.084035396575927734375 +-0.0889695025980472564697265625 -0.273815612494945515020816628748 0.799755650758743219519431022491 +-0.0889695025980472564697265625 0.273815612494945515020816628748 0.799755650758743219519431022491 +-0.0889178991317749051193075615629 -0.0330601990222930894325337192186 0.0316327989101409939864950615629 +-0.0889178991317749051193075615629 0.0330601990222930894325337192186 0.0316327989101409939864950615629 +-0.0888364970684051569183026231258 -0.0322138011455535902549662807814 -0.0327161014080047593544087192186 +-0.0888364970684051569183026231258 0.0322138011455535902549662807814 -0.0327161014080047593544087192186 +-0.0888239979743957464020098768742 -0.105346199870109555329911188437 -0.0592660501599311800857705634371 +-0.0888239979743957464020098768742 0.105346199870109555329911188437 -0.0592660501599311800857705634371 +-0.0887456476688384954254473768742 -0.197577807307243336065738503748 -0.27493129670619964599609375 +-0.0887456476688384954254473768742 0.197577807307243336065738503748 -0.27493129670619964599609375 +-0.08874084986746311187744140625 -0.82651366293430328369140625 0.177482548356056202276676003748 +-0.08874084986746311187744140625 0.82651366293430328369140625 0.177482548356056202276676003748 +-0.0887242488563060732742471259371 -0.273069450259208701403679242503 -0.346498650312423717156917746252 +-0.0887242488563060732742471259371 0.273069450259208701403679242503 -0.346498650312423717156917746252 +-0.088704250752925872802734375 -0.1836972534656524658203125 0.1445229947566986083984375 +-0.088704250752925872802734375 0.1836972534656524658203125 0.1445229947566986083984375 +-0.0886892020702362143813601846887 -0.0172529995441436760639231096093 -0.04285509884357452392578125 +-0.0886892020702362143813601846887 0.0172529995441436760639231096093 -0.04285509884357452392578125 +-0.0886780977249145424545773153113 -0.179679158329963672979801003748 0.286969560384750355108707253748 +-0.0886780977249145424545773153113 0.179679158329963672979801003748 0.286969560384750355108707253748 +-0.0886762976646423423110476846887 -0.04469729959964752197265625 0.0117757998406887061382253278907 +-0.0886762976646423423110476846887 0.04469729959964752197265625 0.0117757998406887061382253278907 +-0.088669002056121826171875 -0.42401587963104248046875 -0.5498625934123992919921875 +-0.088669002056121826171875 0.42401587963104248046875 -0.5498625934123992919921875 +-0.088563002645969390869140625 -0.702305018901824951171875 -0.706345975399017333984375 +-0.088563002645969390869140625 0.702305018901824951171875 -0.706345975399017333984375 +-0.0885083973407745361328125 -0.0972468018531799371917401231258 0.150696003437042258532585492503 +-0.0885083973407745361328125 0.0972468018531799371917401231258 0.150696003437042258532585492503 +-0.088497698307037353515625 -0.0443953990936279338508363423443 -0.014043100178241729736328125 +-0.088497698307037353515625 0.0443953990936279338508363423443 -0.014043100178241729736328125 +-0.0884926471859216606796749715613 -0.637016361951827980725227007497 -0.555769932270050004419204014994 +-0.0884926471859216606796749715613 0.637016361951827980725227007497 -0.555769932270050004419204014994 +-0.0884303987026214682876101846887 -0.0642476022243499839126101846887 0.384775590896606456414730246252 +-0.0884303987026214682876101846887 0.0642476022243499839126101846887 0.384775590896606456414730246252 +-0.0884173505008220700362997490629 -0.3727988898754119873046875 0.236015993356704728567407869377 +-0.0884173505008220700362997490629 0.3727988898754119873046875 0.236015993356704728567407869377 +-0.08841075003147125244140625 -0.37232623994350433349609375 0.64502473175525665283203125 +-0.08841075003147125244140625 0.37232623994350433349609375 0.64502473175525665283203125 +-0.088395752012729644775390625 -0.211909948289394384213224498126 0.387014839053153980596988503748 +-0.088395752012729644775390625 0.211909948289394384213224498126 0.387014839053153980596988503748 +-0.0883823990821838295639523153113 -0.0199605010449886328960378278907 -0.119541299343109128083817438437 +-0.0883823990821838295639523153113 0.0199605010449886328960378278907 -0.119541299343109128083817438437 +-0.0883796989917755154708700615629 -0.111523953080177304353348688437 0.0474493503570556640625 +-0.0883796989917755154708700615629 0.111523953080177304353348688437 0.0474493503570556640625 +-0.0883777499198913490952023153113 -0.0846764981746673528473223768742 -0.0867137968540191567123898153113 +-0.0883777499198913490952023153113 0.0846764981746673528473223768742 -0.0867137968540191567123898153113 +-0.0883603990077972412109375 -0.12948119640350341796875 0.124205601215362559930355246252 +-0.0883603990077972412109375 0.12948119640350341796875 0.124205601215362559930355246252 +-0.0883408010005951038756677462516 -0.0312864005565643352180238423443 0.176683604717254638671875 +-0.0883408010005951038756677462516 0.0312864005565643352180238423443 0.176683604717254638671875 +-0.0883113980293274009047976846887 -0.00412480011582374607448375769536 0.0467341005802154596526776231258 +-0.0883113980293274009047976846887 0.00412480011582374607448375769536 0.0467341005802154596526776231258 +-0.08831070363521575927734375 -0.0792447030544281005859375 -0.2755385935306549072265625 +-0.08831070363521575927734375 0.0792447030544281005859375 -0.2755385935306549072265625 +-0.0882856011390686090667401231258 -0.756957578659057661596420985006 -0.243352794647216819079460492503 +-0.0882856011390686090667401231258 0.756957578659057661596420985006 -0.243352794647216819079460492503 +-0.0882730007171630970397302462516 -0.0065756998956203460693359375 -0.0465256005525589017013388115629 +-0.0882730007171630970397302462516 0.0065756998956203460693359375 -0.0465256005525589017013388115629 +-0.0882152996957302065750283759371 -0.7945497035980224609375 0.413410511612892161981136496252 +-0.0882152996957302065750283759371 0.7945497035980224609375 0.413410511612892161981136496252 +-0.0881679028272628756424111884371 -0.121352550387382504548661188437 0 +-0.0881679028272628756424111884371 0.121352550387382504548661188437 0 +-0.0881413482129573960799362453145 -0.198872302472591411248714621252 0.50515408813953399658203125 +-0.0881413482129573960799362453145 0.198872302472591411248714621252 0.50515408813953399658203125 +-0.08808414638042449951171875 -0.0463988006114959689041299384371 -0.335541850328445412365852007497 +-0.08808414638042449951171875 0.0463988006114959689041299384371 -0.335541850328445412365852007497 +-0.0879871509969234466552734375 -0.173655894398689281121761496252 -0.405711445212364185675113503748 +-0.0879871509969234466552734375 0.173655894398689281121761496252 -0.405711445212364185675113503748 +-0.0879829511046409662444744981258 -0.0362933982163667692710795620314 -0.54170270264148712158203125 +-0.0879829511046409662444744981258 0.0362933982163667692710795620314 -0.54170270264148712158203125 +-0.0879780963063239995758380018742 -0.178623205423355080334602007497 0.671083700656890824731704014994 +-0.0879780963063239995758380018742 0.178623205423355080334602007497 0.671083700656890824731704014994 +-0.0879776000976562611022302462516 -0.717438411712646550988381477509 -0.342843198776245139391960492503 +-0.0879776000976562611022302462516 0.717438411712646550988381477509 -0.342843198776245139391960492503 +-0.0879252016544342096526776231258 -0.154367196559906022512720369377 0.0918690025806427057464276231258 +-0.0879252016544342096526776231258 0.154367196559906022512720369377 0.0918690025806427057464276231258 +-0.0879082977771759033203125 -0.0280317008495330824424662807814 -0.0385531991720199640472088731258 +-0.0879082977771759033203125 0.0280317008495330824424662807814 -0.0385531991720199640472088731258 +-0.0878883488476276536482956203145 -0.416861489415168817718182481258 0.347853556275367792327557481258 +-0.0878883488476276536482956203145 0.416861489415168817718182481258 0.347853556275367792327557481258 +-0.0878615021705627524672976846887 -0.0110382996499538421630859375 0.0464598000049591119964276231258 +-0.0878615021705627524672976846887 0.0110382996499538421630859375 0.0464598000049591119964276231258 +-0.087834499776363372802734375 -0.2703219950199127197265625 0.41135299205780029296875 +-0.087834499776363372802734375 0.2703219950199127197265625 0.41135299205780029296875 +-0.087791502475738525390625 -0.16243000328540802001953125 -0.464659988880157470703125 +-0.087791502475738525390625 0.16243000328540802001953125 -0.464659988880157470703125 +-0.08773569762706756591796875 -0.588788858056068398205695757497 0.261017899215221393927066628748 +-0.08773569762706756591796875 0.588788858056068398205695757497 0.261017899215221393927066628748 +-0.0877201527357101412674111884371 -0.316692954301834084240852007497 0.120461253821849814671374190311 +-0.0877201527357101412674111884371 0.316692954301834084240852007497 0.120461253821849814671374190311 +-0.087637998163700103759765625 -0.4857070147991180419921875 -0.86971700191497802734375 +-0.087637998163700103759765625 0.4857070147991180419921875 -0.86971700191497802734375 +-0.0876299977302551352797976846887 -0.158033597469329850637720369377 -0.0857107996940612848479901231258 +-0.0876299977302551352797976846887 0.158033597469329850637720369377 -0.0857107996940612848479901231258 +-0.0875961005687713734069177462516 -0.0289925009012222296977956403907 0.0385533004999160794357138115629 +-0.0875961005687713734069177462516 0.0289925009012222296977956403907 0.0385533004999160794357138115629 +-0.0875876963138580294510049384371 -0.120225450396537772435046065311 0.0193457990884780862972380788278 +-0.0875876963138580294510049384371 0.120225450396537772435046065311 0.0193457990884780862972380788278 +-0.0874930500984191922286825615629 0 -0.121839898824691761358707253748 +-0.0874584019184112548828125 -0.441959190368652388158920985006 -0.661077594757080166942841970013 +-0.0874584019184112548828125 0.441959190368652388158920985006 -0.661077594757080166942841970013 +-0.0873749971389770618834802462516 -0.141793203353881847039730246252 -0.110726201534271248561047684689 +-0.0873749971389770618834802462516 0.141793203353881847039730246252 -0.110726201534271248561047684689 +-0.0873714029788970891754473768742 -0.112457397580146792326338811563 0.58285439014434814453125 +-0.0873714029788970891754473768742 0.112457397580146792326338811563 0.58285439014434814453125 +-0.0873069994151592365660974337516 -0.387187901139259382787827235006 -0.380740261077880892681690738755 +-0.0873069994151592365660974337516 0.387187901139259382787827235006 -0.380740261077880892681690738755 +-0.0872752457857131902496661268742 -0.120452401041984555329911188437 -0.0193457990884780862972380788278 +-0.0872752457857131902496661268742 0.120452401041984555329911188437 -0.0193457990884780862972380788278 +-0.0872596025466919056334802462516 -0.374051594734191916735710492503 0.111674404144287114926115123126 +-0.0872596025466919056334802462516 0.374051594734191916735710492503 0.111674404144287114926115123126 +-0.0872480019927024813553018134371 -0.268527007102966286389289507497 -0.640531516075134255139289507497 +-0.0872480019927024813553018134371 0.268527007102966286389289507497 -0.640531516075134255139289507497 +-0.0872437477111816378494424384371 -0.0756304532289504977127236884371 0.0957525014877319280426348768742 +-0.0872437477111816378494424384371 0.0756304532289504977127236884371 0.0957525014877319280426348768742 +-0.0871842026710510364928552462516 -0.0486236989498138455489950615629 0.00588590018451213854017156634768 +-0.0871842026710510364928552462516 0.0486236989498138455489950615629 0.00588590018451213854017156634768 +-0.0871573984622955322265625 -0.0485204994678497328330912807814 -0.0070249997079372406005859375 +-0.0871573984622955322265625 0.0485204994678497328330912807814 -0.0070249997079372406005859375 +-0.0871428012847900446136151231258 -0.0531032025814056410362162807814 -0.172006404399871831722990123126 +-0.0871428012847900446136151231258 0.0531032025814056410362162807814 -0.172006404399871831722990123126 +-0.0871340990066528237045773153113 -0.11180055141448974609375 -0.049074299633502960205078125 +-0.0871340990066528237045773153113 0.11180055141448974609375 -0.049074299633502960205078125 +-0.0871331959962844820877236884371 -0.2281199991703033447265625 0.174266999959945684262052623126 +-0.0871331959962844820877236884371 0.2281199991703033447265625 0.174266999959945684262052623126 +-0.0871199011802673284332598768742 -0.795640775561332724841179242503 0.286122746765613555908203125 +-0.0871199011802673284332598768742 0.795640775561332724841179242503 0.286122746765613555908203125 +-0.0871010966598987634856854356258 -0.507823222875595114977897992503 0.737921726703643865441506477509 +-0.0871010966598987634856854356258 0.507823222875595114977897992503 0.737921726703643865441506477509 +-0.0870969533920288030426348768742 -0.733941513299941949988181022491 0.59686122834682464599609375 +-0.0870969533920288030426348768742 0.733941513299941949988181022491 0.59686122834682464599609375 +-0.087086997926235198974609375 -0.374890506267547607421875 -0.3191755115985870361328125 +-0.087086997926235198974609375 0.374890506267547607421875 -0.3191755115985870361328125 +-0.0870464980602264487563601846887 -0.0433883011341094984580912807814 0.0232455998659133918071706403907 +-0.0870464980602264487563601846887 0.0433883011341094984580912807814 0.0232455998659133918071706403907 +-0.0870377987623214693924111884371 -0.267877793312072731701789507497 -0.103275597095489501953125 +-0.0870377987623214693924111884371 0.267877793312072731701789507497 -0.103275597095489501953125 +-0.0870288044214248684982138115629 -0.0508804500102996784538511576557 0.111072751879692080412276311563 +-0.0870288044214248684982138115629 0.0508804500102996784538511576557 0.111072751879692080412276311563 +-0.0869913995265960693359375 -0.0179592996835708611225168596093 0.0459343999624252374847088731258 +-0.0869913995265960693359375 0.0179592996835708611225168596093 0.0459343999624252374847088731258 +-0.0869708001613617026626101846887 -0.04668819904327392578125 0.17394340038299560546875 +-0.0869708001613617026626101846887 0.04668819904327392578125 0.17394340038299560546875 +-0.0869123965501785306075888115629 -0.481806600093841519427684261245 0.346855795383453346936164507497 +-0.0869123965501785306075888115629 0.481806600093841519427684261245 0.346855795383453346936164507497 +-0.086862601339817047119140625 -0.440741711854934714587272992503 -0.0264865508303046247318146555472 +-0.086862601339817047119140625 0.440741711854934714587272992503 -0.0264865508303046247318146555472 +-0.0868169963359832763671875 -0.2337825000286102294921875 0.017565749585628509521484375 +-0.0868169963359832763671875 0.2337825000286102294921875 0.017565749585628509521484375 +-0.08672724664211273193359375 -0.23401249945163726806640625 -0.01471650041639804840087890625 +-0.08672724664211273193359375 0.23401249945163726806640625 -0.01471650041639804840087890625 +-0.0867270022630691472809161268742 -0.553150784969329789575454014994 -0.215644794702529896124332253748 +-0.0867270022630691472809161268742 0.553150784969329789575454014994 -0.215644794702529896124332253748 +-0.0866815984249115073501101846887 -0.782823991775512761925881477509 -0.140258395671844476870759876874 +-0.0866815984249115073501101846887 0.782823991775512761925881477509 -0.140258395671844476870759876874 +-0.0866809010505676380553552462516 -0.0131200000643730170513112653907 -0.0481070011854171780685263115629 +-0.0866809010505676380553552462516 0.0131200000643730170513112653907 -0.0481070011854171780685263115629 +-0.0866170510649681146819744981258 -0.127666500210762035028011496252 -0.6314255893230438232421875 +-0.0866170510649681146819744981258 0.127666500210762035028011496252 -0.6314255893230438232421875 +-0.0865786015987396323501101846887 -0.0397345006465911892989950615629 0.0304190993309021023849325615629 +-0.0865786015987396323501101846887 0.0397345006465911892989950615629 0.0304190993309021023849325615629 +-0.0865450024604797474303552462516 -0.0237226992845535299136994211722 -0.0441269993782043498664613423443 +-0.0865450024604797474303552462516 0.0237226992845535299136994211722 -0.0441269993782043498664613423443 +-0.0864589489996433341323367471887 -0.440483388304710399285823996252 0.03161249868571758270263671875 +-0.0864589489996433341323367471887 0.440483388304710399285823996252 0.03161249868571758270263671875 +-0.0863970011472701970856036268742 -0.136277398467063909359708873126 -0.252911102771759044305355246252 +-0.0863970011472701970856036268742 0.136277398467063909359708873126 -0.252911102771759044305355246252 +-0.0863352030515670693100460653113 -0.265717202425003018451121761245 -0.530980789661407492907585492503 +-0.0863352030515670693100460653113 0.265717202425003018451121761245 -0.530980789661407492907585492503 +-0.0862163990736007634918536268742 -0.0778882473707199068924111884371 -0.09486915171146392822265625 +-0.0862163990736007634918536268742 0.0778882473707199068924111884371 -0.09486915171146392822265625 +-0.0861966043710708645919638115629 -0.577162814140319779809829014994 -0.139473599195480330026342130623 +-0.0861966043710708645919638115629 0.577162814140319779809829014994 -0.139473599195480330026342130623 +-0.0861804008483886829772302462516 -0.0425321996212005629112162807814 -0.0276396006345748929122763115629 +-0.0861804008483886829772302462516 0.0425321996212005629112162807814 -0.0276396006345748929122763115629 +-0.0861656010150909507094851846887 -0.04762209951877593994140625 0.017539300024509429931640625 +-0.0861656010150909507094851846887 0.04762209951877593994140625 0.017539300024509429931640625 +-0.086155951023101806640625 -0.0398274019360542255729917826557 -0.116150549054145804661608565311 +-0.086155951023101806640625 0.0398274019360542255729917826557 -0.116150549054145804661608565311 +-0.086136400699615478515625 0 -0.0507987022399902371505575615629 +-0.0861042007803916875641192518742 -0.114074102044105521458483565311 -0.319489100575447049212840511245 +-0.0861042007803916875641192518742 0.114074102044105521458483565311 -0.319489100575447049212840511245 +-0.0860994506627321271041708428129 -0.1400404535233974456787109375 0.93566830456256866455078125 +-0.0860994506627321271041708428129 0.1400404535233974456787109375 0.93566830456256866455078125 +-0.0860834978520870208740234375 -0.74373601377010345458984375 -0.044120999984443187713623046875 +-0.0860834978520870208740234375 0.74373601377010345458984375 -0.044120999984443187713623046875 +-0.0860700041055679349044638115629 -0.185770493745803816354467130623 0.219274199008941655941740123126 +-0.0860700041055679349044638115629 0.185770493745803816354467130623 0.219274199008941655941740123126 +-0.0860586032271385137359942518742 -0.0625252000987529671371945028113 -0.944025444984435968542868522491 +-0.0860586032271385137359942518742 0.0625252000987529671371945028113 -0.944025444984435968542868522491 +-0.0860392488539219041365768703145 -0.54322840273380279541015625 0 +-0.0860392488539219041365768703145 0.54322840273380279541015625 0 +-0.0860023975372314480880575615629 -0.0928420007228851346114950615629 -0.154867601394653331414730246252 +-0.0860023975372314480880575615629 0.0928420007228851346114950615629 -0.154867601394653331414730246252 +-0.0859872043132781926910723768742 -0.393969011306762706414730246252 -0.444291007518768321649105246252 +-0.0859872043132781926910723768742 0.393969011306762706414730246252 -0.444291007518768321649105246252 +-0.0858564019203186118422976846887 -0.03867270052433013916015625 -0.0336614012718200669715962192186 +-0.0858564019203186118422976846887 0.03867270052433013916015625 -0.0336614012718200669715962192186 +-0.0858444035053253090561398153113 -0.518956196308135941919204014994 -0.2886444032192230224609375 +-0.0858444035053253090561398153113 0.518956196308135941919204014994 -0.2886444032192230224609375 +-0.085834801197052001953125 -0.177784001827239995785490123126 -0.3478868007659912109375 +-0.085834801197052001953125 0.177784001827239995785490123126 -0.3478868007659912109375 +-0.085758246481418609619140625 -0.10356675088405609130859375 0.2107592523097991943359375 +-0.085758246481418609619140625 0.10356675088405609130859375 0.2107592523097991943359375 +-0.0857271015644073541839276231258 -0.0247321993112564093852956403907 0.0451573997735977214484925923443 +-0.0857271015644073541839276231258 0.0247321993112564093852956403907 0.0451573997735977214484925923443 +-0.0857207022607326535323934990629 -0.435243880748748812603565738755 0.475094097852706898077457253748 +-0.0857207022607326535323934990629 0.435243880748748812603565738755 0.475094097852706898077457253748 +-0.0857083022594452015319177462516 -0.0470914006233215387542401231258 -0.020892299711704254150390625 +-0.0857083022594452015319177462516 0.0470914006233215387542401231258 -0.020892299711704254150390625 +-0.0856821022927761050125283759371 -0.309737396240234330591079014994 -0.138640950620174396856754128748 +-0.0856821022927761050125283759371 0.309737396240234330591079014994 -0.138640950620174396856754128748 +-0.085641749203205108642578125 -0.23067049682140350341796875 -0.044233500957489013671875 +-0.085641749203205108642578125 0.23067049682140350341796875 -0.044233500957489013671875 +-0.0856074035167694036285723768742 -0.198851394653320301397769753748 -0.207676506042480474301115123126 +-0.0856074035167694036285723768742 0.198851394653320301397769753748 -0.207676506042480474301115123126 +-0.085581600666046142578125 -0.111522603034973147306807561563 0.2650254070758819580078125 +-0.085581600666046142578125 0.111522603034973147306807561563 0.2650254070758819580078125 +-0.085571996867656707763671875 -0.46193850040435791015625 0.1711435019969940185546875 +-0.085571996867656707763671875 0.46193850040435791015625 0.1711435019969940185546875 +-0.0855476021766662653167401231258 -0.0358224004507064833213725307814 0.0373946994543075603156800923443 +-0.0855476021766662653167401231258 0.0358224004507064833213725307814 0.0373946994543075603156800923443 +-0.085546500980854034423828125 -0.0495837517082691192626953125 -0.22961549460887908935546875 +-0.085546500980854034423828125 0.0495837517082691192626953125 -0.22961549460887908935546875 +-0.0855401962995529091537960653113 -0.117030295729637134893863503748 0.0385588511824607807487730326557 +-0.0855401962995529091537960653113 0.117030295729637134893863503748 0.0385588511824607807487730326557 +-0.0854878008365631131271200615629 -0.01334179937839508056640625 -0.180315804481506358758480246252 +-0.0854878008365631131271200615629 0.01334179937839508056640625 -0.180315804481506358758480246252 +-0.0854721039533615084549111884371 -0.0984415501356124822418536268742 0.074187599122524261474609375 +-0.0854721039533615084549111884371 0.0984415501356124822418536268742 0.074187599122524261474609375 +-0.0854336977005004938323651231258 -0.1444618999958038330078125 -0.5237672030925750732421875 +-0.0854336977005004938323651231258 0.1444618999958038330078125 -0.5237672030925750732421875 +-0.085417799651622772216796875 -0.540025848150253340307358485006 -0.351533660292625449450554242503 +-0.085417799651622772216796875 0.540025848150253340307358485006 -0.351533660292625449450554242503 +-0.0852976024150848416427450615629 -0.580234384536743141858039507497 0.544106388092041037829460492503 +-0.0852976024150848416427450615629 0.580234384536743141858039507497 0.544106388092041037829460492503 +-0.08528749644756317138671875 -0.15505875647068023681640625 -0.17658649384975433349609375 +-0.08528749644756317138671875 0.15505875647068023681640625 -0.17658649384975433349609375 +-0.085271500051021575927734375 -0.22902275621891021728515625 0.0527010001242160797119140625 +-0.085271500051021575927734375 0.22902275621891021728515625 0.0527010001242160797119140625 +-0.0852703481912612942794638115629 0 0.123405745625495902317858565311 +-0.0852641999721527182876101846887 -0.0522495985031127957443075615629 0 +-0.0852641999721527182876101846887 0.0522495985031127957443075615629 0 +-0.0852576017379760853209802462516 -0.2624003887176513671875 -0.289615607261657748150440738755 +-0.0852576017379760853209802462516 0.2624003887176513671875 -0.289615607261657748150440738755 +-0.0851865001022815704345703125 -0.74328450858592987060546875 0.05264849960803985595703125 +-0.0851865001022815704345703125 0.74328450858592987060546875 0.05264849960803985595703125 +-0.0850956022739410428146200615629 -0.133499801158905029296875 -0.122215199470520022306807561563 +-0.0850956022739410428146200615629 0.133499801158905029296875 -0.122215199470520022306807561563 +-0.0850924015045166071136151231258 -0.034615099430084228515625 -0.0395105987787246759612713731258 +-0.0850924015045166071136151231258 0.034615099430084228515625 -0.0395105987787246759612713731258 +-0.0850647985935211181640625 0 0.0525735974311828668792401231258 +-0.0850646018981933704772302462516 -0.0618022024631500258018412807814 0.170130801200866710320980246252 +-0.0850646018981933704772302462516 0.0618022024631500258018412807814 0.170130801200866710320980246252 +-0.0850162506103515625 -0.16236050426959991455078125 0.1700332462787628173828125 +-0.0850162506103515625 0.16236050426959991455078125 0.1700332462787628173828125 +-0.0849889993667602566818075615629 -0.166162204742431651727230246252 -0.0718815982341766412933026231258 +-0.0849889993667602566818075615629 0.166162204742431651727230246252 -0.0718815982341766412933026231258 +-0.0849810004234313881577023153113 -0.0123483002185821536672571951954 0.122986802458763117007478626874 +-0.0849810004234313881577023153113 0.0123483002185821536672571951954 0.122986802458763117007478626874 +-0.0849556028842926025390625 -0.1599051952362060546875 0.356669211387634299548210492503 +-0.0849556028842926025390625 0.1599051952362060546875 0.356669211387634299548210492503 +-0.0848694026470184353927450615629 -0.117517653107643116339176003748 -0.0385588511824607807487730326557 +-0.0848694026470184353927450615629 0.117517653107643116339176003748 -0.0385588511824607807487730326557 +-0.0848612010478973499694177462516 -0.00691400021314620989026922259768 0.0524478018283844049651776231258 +-0.0848612010478973499694177462516 0.00691400021314620989026922259768 0.0524478018283844049651776231258 +-0.0848438024520874051193075615629 -0.110673201084136973992855246252 0.143363201618194574527009876874 +-0.0848438024520874051193075615629 0.110673201084136973992855246252 0.143363201618194574527009876874 +-0.0848429024219513050475427462516 -0.0516117990016937283614950615629 0.0117430999875068678428569057814 +-0.0848429024219513050475427462516 0.0516117990016937283614950615629 0.0117430999875068678428569057814 +-0.0848287999629974420745526231258 -0.00658169984817504917506969519536 -0.0525429010391235407073651231258 +-0.0848287999629974420745526231258 0.00658169984817504917506969519536 -0.0525429010391235407073651231258 +-0.0848208010196685874282351846887 -0.366017198562622103619190738755 -0.13724720478057861328125 +-0.0848208010196685874282351846887 0.366017198562622103619190738755 -0.13724720478057861328125 +-0.08479440212249755859375 -0.314357209205627485815170985006 0.232355999946594254934595369377 +-0.08479440212249755859375 0.314357209205627485815170985006 0.232355999946594254934595369377 +-0.08478049933910369873046875 0 -0.23518575727939605712890625 +-0.0846898503601550972641476278113 -0.260653057694435086322215511245 -0.217686703801155068127570757497 +-0.0846898503601550972641476278113 0.260653057694435086322215511245 -0.217686703801155068127570757497 +-0.084684498608112335205078125 -0.098533250391483306884765625 -0.21358774602413177490234375 +-0.084684498608112335205078125 0.098533250391483306884765625 -0.21358774602413177490234375 +-0.084679000079631805419921875 0 0.2352222502231597900390625 +-0.0846757978200912558852664346887 -0.334109601378440868035823996252 0.428603446483612093853565738755 +-0.0846757978200912558852664346887 0.334109601378440868035823996252 0.428603446483612093853565738755 +-0.08467400074005126953125 -0.0196014001965522793868856865629 -0.04945810139179229736328125 +-0.08467400074005126953125 0.0196014001965522793868856865629 -0.04945810139179229736328125 +-0.0846659004688262994964276231258 -0.051337301731109619140625 -0.0140058994293212890625 +-0.0846659004688262994964276231258 0.051337301731109619140625 -0.0140058994293212890625 +-0.0846621036529540960113848768742 -0.260559296607971169201789507497 0.122234103083610531892411188437 +-0.0846621036529540960113848768742 0.260559296607971169201789507497 0.122234103083610531892411188437 +-0.0846480011940002469161825615629 -0.162433195114135758840845369377 0.0803129971027374267578125 +-0.0846480011940002469161825615629 0.162433195114135758840845369377 0.0803129971027374267578125 +-0.08462490141391754150390625 -0.0691317021846771240234375 -0.10275900363922119140625 +-0.08462490141391754150390625 0.0691317021846771240234375 -0.10275900363922119140625 +-0.08445779979228973388671875 -0.0122028004378080361103098283593 0.287607300281524647100894753748 +-0.08445779979228973388671875 0.0122028004378080361103098283593 0.287607300281524647100894753748 +-0.084441997110843658447265625 -0.25988900661468505859375 -0.96193897724151611328125 +-0.084441997110843658447265625 0.25988900661468505859375 -0.96193897724151611328125 +-0.084399752318859100341796875 -0.0202849991619586944580078125 0.2344464957714080810546875 +-0.084399752318859100341796875 0.0202849991619586944580078125 0.2344464957714080810546875 +-0.0843733459711074745834835653113 -0.0241504490375518791889231096093 0.121646547317504877261384876874 +-0.0843733459711074745834835653113 0.0241504490375518791889231096093 0.121646547317504877261384876874 +-0.0843410968780517605880575615629 -0.0856869041919708224197549384371 0.08969025313854217529296875 +-0.0843410968780517605880575615629 0.0856869041919708224197549384371 0.08969025313854217529296875 +-0.08430840075016021728515625 -0.355574709177017223016292746252 -0.262599742412567171978565738755 +-0.08430840075016021728515625 0.355574709177017223016292746252 -0.262599742412567171978565738755 +-0.0842514991760253961761151231258 -0.0137950003147125251079518903907 0.0520708978176116984992738423443 +-0.0842514991760253961761151231258 0.0137950003147125251079518903907 0.0520708978176116984992738423443 +-0.08414324931800365447998046875 -0.098810255527496337890625 -0.73868550360202789306640625 +-0.08414324931800365447998046875 0.098810255527496337890625 -0.73868550360202789306640625 +-0.08413485251367092132568359375 -0.667189767956733681408820757497 -0.671028676629066400671774772491 +-0.08413485251367092132568359375 0.667189767956733681408820757497 -0.671028676629066400671774772491 +-0.0841088980436325017731036268742 -0.105092552304267880525223688437 0.0661907985806465121170205634371 +-0.0841088980436325017731036268742 0.105092552304267880525223688437 0.0661907985806465121170205634371 +-0.084101997315883636474609375 -0.02032049931585788726806640625 0.4924570024013519287109375 +-0.084101997315883636474609375 0.02032049931585788726806640625 0.4924570024013519287109375 +-0.0840936005115509033203125 -0.343938398361206099096420985006 -0.186103999614715576171875 +-0.0840936005115509033203125 0.343938398361206099096420985006 -0.186103999614715576171875 +-0.0840351998805999866881677462516 -0.258628797531127940789730246252 0.293341588973999034539730246252 +-0.0840351998805999866881677462516 0.258628797531127940789730246252 0.293341588973999034539730246252 +-0.0840164959430694524566973768742 -0.0363569989800453172157368442186 0.285691201686859130859375 +-0.0840164959430694524566973768742 0.0363569989800453172157368442186 0.285691201686859130859375 +-0.0839920476078987177093182481258 -0.434989339113235506939503238755 -0.0789268501102924346923828125 +-0.0839920476078987177093182481258 0.434989339113235506939503238755 -0.0789268501102924346923828125 +-0.0839838027954101645766726846887 -0.180967795848846452200220369377 0.014049999415874481201171875 +-0.0839838027954101645766726846887 0.180967795848846452200220369377 0.014049999415874481201171875 +-0.083980500698089599609375 0 0.74528324604034423828125 +-0.0839607000350952176193075615629 -0.0460260987281799344161825615629 0.02884779870510101318359375 +-0.0839607000350952176193075615629 0.0460260987281799344161825615629 0.02884779870510101318359375 +-0.0839604020118713406661825615629 -0.0316772997379302992393412807814 0.0441271007061004652549662807814 +-0.0839604020118713406661825615629 0.0316772997379302992393412807814 0.0441271007061004652549662807814 +-0.08395205438137054443359375 -0.5485395491123199462890625 0.338462153077125571520866742503 +-0.08395205438137054443359375 0.5485395491123199462890625 0.338462153077125571520866742503 +-0.0839057981967926136412927462516 -0.181166398525238053762720369377 -0.0117718003690242770803431326954 +-0.0839057981967926136412927462516 0.181166398525238053762720369377 -0.0117718003690242770803431326954 +-0.0838921010494232261001101846887 -0.0303799003362655653526225307814 -0.0451573014259338406661825615629 +-0.0838921010494232261001101846887 0.0303799003362655653526225307814 -0.0451573014259338406661825615629 +-0.0838795512914657509506710653113 -0.01001114957034587860107421875 -0.123951601982116688116519753748 +-0.0838795512914657509506710653113 0.01001114957034587860107421875 -0.123951601982116688116519753748 +-0.0838335990905761802016726846887 -0.258016800880432162212940738755 -0.7525951862335205078125 +-0.0838335990905761802016726846887 0.258016800880432162212940738755 -0.7525951862335205078125 +-0.083828501403331756591796875 -0.20480124652385711669921875 -0.116314999759197235107421875 +-0.083828501403331756591796875 0.20480124652385711669921875 -0.116314999759197235107421875 +-0.083736002445220947265625 -0.257708811759948752673210492503 0.752711200714111350329460492503 +-0.083736002445220947265625 0.257708811759948752673210492503 0.752711200714111350329460492503 +-0.0837045013904571533203125 -0.0608140513300895677040180942186 0.108605700731277468595870061563 +-0.0837045013904571533203125 0.0608140513300895677040180942186 0.108605700731277468595870061563 +-0.0837037526071071624755859375 -0.060813747346401214599609375 0.74282924830913543701171875 +-0.0837037526071071624755859375 0.060813747346401214599609375 0.74282924830913543701171875 +-0.0836380541324615450760049384371 -0.124072051048278800267077315311 0.0105265494436025622976282889454 +-0.0836380541324615450760049384371 0.124072051048278800267077315311 0.0105265494436025622976282889454 +-0.0835969984531402671157351846887 -0.141046202182769780941740123126 0.114531803131103518400557561563 +-0.0835969984531402671157351846887 0.141046202182769780941740123126 0.114531803131103518400557561563 +-0.0835876993834972353836221259371 -0.257251757383346546514957253748 0.222113853693008400647102007497 +-0.0835876993834972353836221259371 0.257251757383346546514957253748 0.222113853693008400647102007497 +-0.0835456520318984957595986884371 -0.124267047643661490696764815311 -0.0088224001228809356689453125 +-0.0835456520318984957595986884371 0.124267047643661490696764815311 -0.0088224001228809356689453125 +-0.083529748022556304931640625 -0.22419999539852142333984375 -0.072505749762058258056640625 +-0.083529748022556304931640625 0.22419999539852142333984375 -0.072505749762058258056640625 +-0.0835207998752593994140625 -0.7778952121734619140625 0.167042398452758811266960492503 +-0.0835207998752593994140625 0.7778952121734619140625 0.167042398452758811266960492503 +-0.0834866993129253359695596259371 -0.317009237408638011590511496252 0.308277440071105968133480246252 +-0.0834866993129253359695596259371 0.317009237408638011590511496252 0.308277440071105968133480246252 +-0.0834345996379852322677450615629 -0.178348398208618169613615123126 -0.03507860004901885986328125 +-0.0834345996379852322677450615629 0.178348398208618169613615123126 -0.03507860004901885986328125 +-0.0833777010440826388260049384371 -0.554851484298706010278579014994 -0.4185545146465301513671875 +-0.0833777010440826388260049384371 0.554851484298706010278579014994 -0.4185545146465301513671875 +-0.083369500935077667236328125 -0.06057099997997283935546875 0.489265501499176025390625 +-0.083369500935077667236328125 0.06057099997997283935546875 0.489265501499176025390625 +-0.0833195984363555991469851846887 -0.176951801776885991879240123126 0.04178459942340850830078125 +-0.0833195984363555991469851846887 0.176951801776885991879240123126 0.04178459942340850830078125 +-0.0833144497126340893844442803129 -0.75040805339813232421875 0.390443260967731464727847878748 +-0.0833144497126340893844442803129 0.75040805339813232421875 0.390443260967731464727847878748 +-0.0832871973514556912521200615629 -0.599544811248779341283920985006 -0.523077583312988259045539507497 +-0.0832871973514556912521200615629 0.599544811248779341283920985006 -0.523077583312988259045539507497 +-0.0832644999027252197265625 -0.4348604977130889892578125 0.23229999840259552001953125 +-0.0832644999027252197265625 0.4348604977130889892578125 0.23229999840259552001953125 +-0.0832560982555150957962197821871 -0.461421664059162128790347878748 -0.8262311518192291259765625 +-0.0832560982555150957962197821871 0.461421664059162128790347878748 -0.8262311518192291259765625 +-0.08325000107288360595703125 -0.039902500808238983154296875 0.2323299944400787353515625 +-0.08325000107288360595703125 0.039902500808238983154296875 0.2323299944400787353515625 +-0.0832385003566741971114950615629 -0.02060990035533905029296875 0.0514449000358581584602113423443 +-0.0832385003566741971114950615629 0.02060990035533905029296875 0.0514449000358581584602113423443 +-0.0832351505756378090561398153113 -0.0358008004724979372879190009371 0.119541603326797474249332253748 +-0.0832351505756378090561398153113 0.0358008004724979372879190009371 0.119541603326797474249332253748 +-0.0832130014896392822265625 -0.0422358006238937391807475307814 0.0359407991170883206466513115629 +-0.0832130014896392822265625 0.0422358006238937391807475307814 0.0359407991170883206466513115629 +-0.0831066012382507407485476846887 -0.0504204988479614313323651231258 0.0234749004244804403140900461722 +-0.0831066012382507407485476846887 0.0504204988479614313323651231258 0.0234749004244804403140900461722 +-0.0830912530422210776626101846887 -0.539815640449524014599091970013 -0.0647668991237878854949627793758 +-0.0830912530422210776626101846887 0.539815640449524014599091970013 -0.0647668991237878854949627793758 +-0.0830853998661041370787927462516 -0.0553368985652923639495526231258 0.00588660016655922005424095289072 +-0.0830853998661041370787927462516 0.0553368985652923639495526231258 0.00588660016655922005424095289072 +-0.0830757975578308160979901231258 -0.0131748005747795108449915701954 -0.0540817022323608412315287807814 +-0.0830757975578308160979901231258 0.0131748005747795108449915701954 -0.0540817022323608412315287807814 +-0.0830601990222930991469851846887 -0.0552416026592254666427450615629 -0.00702629983425140380859375 +-0.0830601990222930991469851846887 0.0552416026592254666427450615629 -0.00702629983425140380859375 +-0.0829194009304046603103799384371 -0.570632994174957275390625 0.165838193893432600534154630623 +-0.0829194009304046603103799384371 0.570632994174957275390625 0.165838193893432600534154630623 +-0.0829182028770446694077023153113 -0.255191391706466652600227007497 0.536657989025115966796875 +-0.0829182028770446694077023153113 0.255191391706466652600227007497 0.536657989025115966796875 +-0.0829155027866363553146200615629 -0.255191999673843372686832253748 -0.13416449725627899169921875 +-0.0829155027866363553146200615629 0.255191999673843372686832253748 -0.13416449725627899169921875 +-0.082888998091220855712890625 -0.386725008487701416015625 0.918461978435516357421875 +-0.082888998091220855712890625 0.386725008487701416015625 0.918461978435516357421875 +-0.0828404992818832369705361884371 -0.0984004497528076088608273153113 -0.0771675020456314003647335653113 +-0.0828404992818832369705361884371 0.0984004497528076088608273153113 -0.0771675020456314003647335653113 +-0.0827711999416351346114950615629 0 -0.594263398647308371813835492503 +-0.0827677510678768157958984375 -0.70964772999286651611328125 -0.2281432449817657470703125 +-0.0827677510678768157958984375 0.70964772999286651611328125 -0.2281432449817657470703125 +-0.0826955519616603823562783759371 -0.1789203584194183349609375 -0.289221447706222489770766514994 +-0.0826955519616603823562783759371 0.1789203584194183349609375 -0.289221447706222489770766514994 +-0.0826337993144989069183026231258 -0.0765356004238128689864950615629 0.165269398689270041735710492503 +-0.0826337993144989069183026231258 0.0765356004238128689864950615629 0.165269398689270041735710492503 +-0.0825775980949401966491052462516 -0.04482559859752655029296875 -0.0342285990715026841590962192186 +-0.0825775980949401966491052462516 0.04482559859752655029296875 -0.0342285990715026841590962192186 +-0.0825167000293731689453125 -0.347504490613937344622996761245 0.602023082971572809363181022491 +-0.0825167000293731689453125 0.347504490613937344622996761245 0.602023082971572809363181022491 +-0.0825129032135009793380575615629 -0.695313012599945046154914507497 0.5654474794864654541015625 +-0.0825129032135009793380575615629 0.695313012599945046154914507497 0.5654474794864654541015625 +-0.082501351833343505859375 -0.059940598905086517333984375 -0.110002952814102175627120061563 +-0.082501351833343505859375 0.059940598905086517333984375 -0.110002952814102175627120061563 +-0.082479000091552734375 -0.6725985109806060791015625 -0.32141549885272979736328125 +-0.082479000091552734375 0.6725985109806060791015625 -0.32141549885272979736328125 +-0.0824551463127136258224325615629 -0.0300549007952213287353515625 -0.121646404266357421875 +-0.0824551463127136258224325615629 0.0300549007952213287353515625 -0.121646404266357421875 +-0.0824407994747161920745526231258 0 -0.391412401199340842516960492503 +-0.0824180006980896051604901231258 0 -0.0566327989101409953742738423443 +-0.0823576502501964652358523721887 -0.432294309139251708984375 0.0940153487026691436767578125 +-0.0823576502501964652358523721887 0.432294309139251708984375 0.0940153487026691436767578125 +-0.0823355019092559814453125 -0.393729031085968017578125 -0.51058669388294219970703125 +-0.0823355019092559814453125 0.393729031085968017578125 -0.51058669388294219970703125 +-0.0823062032461166354080361884371 -0.0597981020808219868034605326557 0.2822231948375701904296875 +-0.0823062032461166354080361884371 0.0597981020808219868034605326557 0.2822231948375701904296875 +-0.0823062002658844077407351846887 -0.1244575977325439453125 -0.133176600933074956722990123126 +-0.0823062002658844077407351846887 0.1244575977325439453125 -0.133176600933074956722990123126 +-0.082273252308368682861328125 -0.21983550488948822021484375 0.086043499410152435302734375 +-0.082273252308368682861328125 0.21983550488948822021484375 0.086043499410152435302734375 +-0.082266747951507568359375 -0.121825200319290158357254938437 0.0298462495207786546180805942186 +-0.082266747951507568359375 0.121825200319290158357254938437 0.0298462495207786546180805942186 +-0.0822621468454599324982012831242 -0.479610821604728676526008257497 0.696926075220107965613181022491 +-0.0822621468454599324982012831242 0.479610821604728676526008257497 0.696926075220107965613181022491 +-0.0822618007659912109375 -0.0259889990091323880294638115629 -0.0505724012851715143401776231258 +-0.0822618007659912109375 0.0259889990091323880294638115629 -0.0505724012851715143401776231258 +-0.082225799560546875 -0.10559700429439544677734375 -0.0677362516522407448471554403113 +-0.082225799560546875 0.10559700429439544677734375 -0.0677362516522407448471554403113 +-0.082208096981048583984375 -0.0597276002168655381630024692186 -0.282266700267791714740184261245 +-0.082208096981048583984375 0.0597276002168655381630024692186 -0.282266700267791714740184261245 +-0.0821950972080230796157351846887 -0.0496439009904861491828675923443 -0.0279186010360717787315287807814 +-0.0821950972080230796157351846887 0.0496439009904861491828675923443 -0.0279186010360717787315287807814 +-0.081999249756336212158203125 -0.1964274942874908447265625 0.1311199963092803955078125 +-0.081999249756336212158203125 0.1964274942874908447265625 0.1311199963092803955078125 +-0.0819952011108398548522302462516 -0.748838376998901433800881477509 0.26929199695587158203125 +-0.0819952011108398548522302462516 0.748838376998901433800881477509 0.26929199695587158203125 +-0.08199225179851055145263671875 -0.414336740970611572265625 -0.6197602450847625732421875 +-0.08199225179851055145263671875 0.414336740970611572265625 -0.6197602450847625732421875 +-0.0819904029369354359069177462516 -0.0799207985401153564453125 -0.163982605934143071957365123126 +-0.0819904029369354359069177462516 0.0799207985401153564453125 -0.163982605934143071957365123126 +-0.08197979629039764404296875 0 -0.288581693172454800677684261245 +-0.0819787025451660239516726846887 -0.0408282995223999065070863423443 -0.0401564002037048395354901231258 +-0.0819787025451660239516726846887 0.0408282995223999065070863423443 -0.0401564002037048395354901231258 +-0.0819642037153243963043536268742 -0.111523801088333124331697376874 0.0578300982713699299186949076557 +-0.0819642037153243963043536268742 0.111523801088333124331697376874 0.0578300982713699299186949076557 +-0.0819526523351669228256710653113 -0.122434803843498224429353626874 -0.0281686507165431962440571567186 +-0.0819526523351669228256710653113 0.122434803843498224429353626874 -0.0281686507165431962440571567186 +-0.08194839954376220703125 -0.0545104980468750013877787807814 0.01769340038299560546875 +-0.08194839954376220703125 0.0545104980468750013877787807814 0.01769340038299560546875 +-0.0818922996520996121505575615629 -0.0381716012954711955695863423443 0.0428552985191345270354901231258 +-0.0818922996520996121505575615629 0.0381716012954711955695863423443 0.0428552985191345270354901231258 +-0.08188354969024658203125 -0.117140103876590725984208063437 0.319489100575447049212840511245 +-0.08188354969024658203125 0.117140103876590725984208063437 0.319489100575447049212840511245 +-0.0818271994590759332854901231258 -0.0273261994123458890060263115629 0.0505725979804992689659037807814 +-0.0818271994590759332854901231258 0.0273261994123458890060263115629 0.0505725979804992689659037807814 +-0.0818163476884365137298260606258 -0.53836806118488311767578125 0.0772376000881195151626101846887 +-0.0818163476884365137298260606258 0.53836806118488311767578125 0.0772376000881195151626101846887 +-0.0817851975560188182434728787484 -0.298422592878341663702457253748 0.163570050895214064157201505623 +-0.0817851975560188182434728787484 0.298422592878341663702457253748 0.163570050895214064157201505623 +-0.0817430019378662109375 -0.173174202442169189453125 -0.0576955974102020263671875 +-0.0817430019378662109375 0.173174202442169189453125 -0.0576955974102020263671875 +-0.08173625171184539794921875 -0.12130050361156463623046875 0.20274449884891510009765625 +-0.08173625171184539794921875 0.12130050361156463623046875 0.20274449884891510009765625 +-0.0817061007022857610504473768742 -0.340329509973525956567641514994 0 +-0.0817061007022857610504473768742 0.340329509973525956567641514994 0 +-0.0816939465701580075362997490629 -0.165864405035972606317073996252 0.623149150609970114977897992503 +-0.0816939465701580075362997490629 0.165864405035972606317073996252 0.623149150609970114977897992503 +-0.0816727481782436454116336221887 -0.133200001716613780633480246252 0.42200414836406707763671875 +-0.0816727481782436454116336221887 0.133200001716613780633480246252 0.42200414836406707763671875 +-0.081579752266407012939453125 -0.05927050113677978515625 0.228761255741119384765625 +-0.081579752266407012939453125 0.05927050113677978515625 0.228761255741119384765625 +-0.0815679006278514917571698106258 -0.132669903337955474853515625 0.8864226043224334716796875 +-0.0815679006278514917571698106258 0.132669903337955474853515625 0.8864226043224334716796875 +-0.0815431505441665677169638115629 -0.059244297444820404052734375 -0.438566842675209067614616742503 +-0.0815431505441665677169638115629 0.059244297444820404052734375 -0.438566842675209067614616742503 +-0.0815400004386901966491052462516 -0.0793540000915527454772302462516 -0.383476400375366233141960492503 +-0.0815400004386901966491052462516 0.0793540000915527454772302462516 -0.383476400375366233141960492503 +-0.0815292030572891263107138115629 -0.0592344000935554546027894673443 -0.894339895248413063733039507497 +-0.0815292030572891263107138115629 0.0592344000935554546027894673443 -0.894339895248413063733039507497 +-0.0814409017562866266448651231258 -0.0540647983551025418380575615629 -0.0210804000496864346603231865629 +-0.0814409017562866266448651231258 0.0540647983551025418380575615629 -0.0210804000496864346603231865629 +-0.081421248614788055419921875 -0.14278399944305419921875 -0.18837024271488189697265625 +-0.081421248614788055419921875 0.14278399944305419921875 -0.18837024271488189697265625 +-0.0813806019723415374755859375 -0.203681105375289911441072376874 0.272747647762298539575454014994 +-0.0813806019723415374755859375 0.203681105375289911441072376874 0.272747647762298539575454014994 +-0.0813606023788452231704226846887 -0.0397157996892929104904013115629 -0.178334403038024918997095369377 +-0.0813606023788452231704226846887 0.0397157996892929104904013115629 -0.178334403038024918997095369377 +-0.0813325524330139187911825615629 -0.0714328497648239052475460653113 0.103838253021240237150557561563 +-0.0813325524330139187911825615629 0.0714328497648239052475460653113 0.103838253021240237150557561563 +-0.08129370212554931640625 -0.00412480011582374607448375769536 0.05808889865875244140625 +-0.08129370212554931640625 0.00412480011582374607448375769536 0.05808889865875244140625 +-0.08126399852335453033447265625 -0.73389749228954315185546875 -0.1314922459423542022705078125 +-0.08126399852335453033447265625 0.73389749228954315185546875 -0.1314922459423542022705078125 +-0.0812329530715942410568075615629 -0.0923177987337112371246661268742 -0.0858988523483276283920773153113 +-0.0812329530715942410568075615629 0.0923177987337112371246661268742 -0.0858988523483276283920773153113 +-0.08122800290584564208984375 -0.24999749660491943359375 -0.425327003002166748046875 +-0.08122800290584564208984375 0.24999749660491943359375 -0.425327003002166748046875 +-0.0812132000923156821547976846887 -0.3564012050628662109375 0.162426805496215825863615123126 +-0.0812132000923156821547976846887 0.3564012050628662109375 0.162426805496215825863615123126 +-0.08118174970149993896484375 -0.1966075003147125244140625 -0.13135825097560882568359375 +-0.08118174970149993896484375 0.1966075003147125244140625 -0.13135825097560882568359375 +-0.0811084516346454592605752509371 -0.249630752205848710501001619377 -0.365521037578582785876335492503 +-0.0811084516346454592605752509371 0.249630752205848710501001619377 -0.365521037578582785876335492503 +-0.0810504019260406410873898153113 -0.133185303211212163754240123126 0.256305295228958118780582253748 +-0.0810504019260406410873898153113 0.133185303211212163754240123126 0.256305295228958118780582253748 +-0.0810160018503666007338992471887 -0.249346506595611583367855246252 -0.594779264926910467004006477509 +-0.0810160018503666007338992471887 0.249346506595611583367855246252 -0.594779264926910467004006477509 +-0.0810002982616424560546875 -0.184635597467422474249332253748 -0.222145807743072493112279630623 +-0.0810002982616424560546875 0.184635597467422474249332253748 -0.222145807743072493112279630623 +-0.080986797809600830078125 -0.543497407436370871813835492503 0.240939599275588972604467130623 +-0.080986797809600830078125 0.543497407436370871813835492503 0.240939599275588972604467130623 +-0.0809391975402832114516726846887 -0.00659879967570304887952703509768 -0.0583549976348876967002787807814 +-0.0809391975402832114516726846887 0.00659879967570304887952703509768 -0.0583549976348876967002787807814 +-0.0809338986873626708984375 -0.0366025000810623196700888115629 -0.0459342986345291151573100307814 +-0.0809338986873626708984375 0.0366025000810623196700888115629 -0.0459342986345291151573100307814 +-0.0809270977973938071547976846887 -0.0196410998702049276187775461722 -0.0553628027439117473273988423443 +-0.0809270977973938071547976846887 0.0196410998702049276187775461722 -0.0553628027439117473273988423443 +-0.0809177994728088462172976846887 -0.169605195522308349609375 0.0684574007987976129729901231258 +-0.0809177994728088462172976846887 0.169605195522308349609375 0.0684574007987976129729901231258 +-0.080901801586151123046875 -0.0587782979011535686164613423443 0 +-0.080901801586151123046875 0.0587782979011535686164613423443 0 +-0.0808900505304336464584835653113 -0.09518609941005706787109375 0.0830446511507034329513388115629 +-0.0808900505304336464584835653113 0.09518609941005706787109375 0.0830446511507034329513388115629 +-0.0808620035648345975021200615629 -0.288356405496597301141292746252 -0.0176598004996776566932759067186 +-0.0808620035648345975021200615629 0.288356405496597301141292746252 -0.0176598004996776566932759067186 +-0.0808471977710723960219851846887 -0.0110382996499538421630859375 0.0578091025352478055099325615629 +-0.0808471977710723960219851846887 0.0110382996499538421630859375 0.0578091025352478055099325615629 +-0.0807375043630600003341513115629 -0.112415099143981928042634876874 -0.0578299507498741122146768134371 +-0.0807375043630600003341513115629 0.112415099143981928042634876874 -0.0578299507498741122146768134371 +-0.0807208001613616971114950615629 -0.0915584027767181451995526231258 0.3809216022491455078125 +-0.0807208001613616971114950615629 0.0915584027767181451995526231258 0.3809216022491455078125 +-0.0806707978248596274672976846887 0 -0.183008801937103282586605246252 +-0.0806136041879653847397335653113 -0.28819620609283447265625 0.02107889950275421142578125 +-0.0806136041879653847397335653113 0.28819620609283447265625 0.02107889950275421142578125 +-0.08056700229644775390625 -0.123836004734039314967297684689 0.134809601306915299856470369377 +-0.08056700229644775390625 0.123836004734039314967297684689 0.134809601306915299856470369377 +-0.0805420517921447698395098768742 -0.046148099005222320556640625 0.117827546596527096833817438437 +-0.0805420517921447698395098768742 0.046148099005222320556640625 0.117827546596527096833817438437 +-0.08052749931812286376953125 -0.21496175229549407958984375 -0.099029250442981719970703125 +-0.08052749931812286376953125 0.21496175229549407958984375 -0.099029250442981719970703125 +-0.0804731011390686090667401231258 -0.04844360053539276123046875 0.0343118011951446533203125 +-0.0804731011390686090667401231258 0.04844360053539276123046875 0.0343118011951446533203125 +-0.0803445979952812083801916287484 -0.694153612852096535412727007497 -0.0411795999854803057571572821871 +-0.0803445979952812083801916287484 0.694153612852096535412727007497 -0.0411795999854803057571572821871 +-0.0803384006023407093444177462516 -0.0583688974380493219573651231258 0.0117818996310234073293665701954 +-0.0803384006023407093444177462516 0.0583688974380493219573651231258 0.0117818996310234073293665701954 +-0.080227352678775787353515625 -0.423333907127380393298210492503 -0.129815094172954559326171875 +-0.080227352678775787353515625 0.423333907127380393298210492503 -0.129815094172954559326171875 +-0.0802198972553014727493447821871 -0.246894556283950794561832253748 -0.913842028379440285412727007497 +-0.0802198972553014727493447821871 0.246894556283950794561832253748 -0.913842028379440285412727007497 +-0.08020450174808502197265625 -0.0331977494060993194580078125 -0.2344464957714080810546875 +-0.08020450174808502197265625 0.0331977494060993194580078125 -0.2344464957714080810546875 +-0.0801674991846084566970986884371 -0.401816260814666759149105246252 -0.186055652797222137451171875 +-0.0801674991846084566970986884371 0.401816260814666759149105246252 -0.186055652797222137451171875 +-0.080128498375415802001953125 -0.18079300224781036376953125 0.4592309892177581787109375 +-0.080128498375415802001953125 0.18079300224781036376953125 0.4592309892177581787109375 +-0.0800988972187042236328125 -0.0581950008869171198089276231258 -0.0140535995364189161827006557814 +-0.0800988972187042236328125 0.0581950008869171198089276231258 -0.0140535995364189161827006557814 +-0.0800904527306556812682458712516 -0.103085947781801232081555497189 0.5342831909656524658203125 +-0.0800904527306556812682458712516 0.103085947781801232081555497189 0.5342831909656524658203125 +-0.0800383493304252513489416287484 -0.338237547874450650287059261245 -0.0411008499562740270416583143742 +-0.0800383493304252513489416287484 0.338237547874450650287059261245 -0.0411008499562740270416583143742 +-0.0800242006778717068771200615629 -0.0339116990566253675987162807814 0.0494583010673523004729901231258 +-0.0800242006778717068771200615629 0.0339116990566253675987162807814 0.0494583010673523004729901231258 +-0.0799880981445312555511151231258 -0.0179592996835708611225168596093 0.0572658002376556438117738423443 +-0.0799880981445312555511151231258 0.0179592996835708611225168596093 0.0572658002376556438117738423443 +-0.07998450100421905517578125 -0.0329939983785152435302734375 -0.4924570024013519287109375 +-0.07998450100421905517578125 0.0329939983785152435302734375 -0.4924570024013519287109375 +-0.07996650226414203643798828125 -0.54396973550319671630859375 0.5100997388362884521484375 +-0.07996650226414203643798828125 0.54396973550319671630859375 0.5100997388362884521484375 +-0.0799542009830474798004473768742 -0.117846000194549549444644753748 -0.58285439014434814453125 +-0.0799542009830474798004473768742 0.117846000194549549444644753748 -0.58285439014434814453125 +-0.079898498952388763427734375 -0.3789649903774261474609375 0.3162305057048797607421875 +-0.079898498952388763427734375 0.3789649903774261474609375 0.3162305057048797607421875 +-0.0798513025045394925216513115629 -0.245761495828628523385717130623 -0.152397608757019048519865123126 +-0.0798513025045394925216513115629 0.245761495828628523385717130623 -0.152397608757019048519865123126 +-0.0798360489308834048172158759371 -0.245714694261550875564736884371 -0.236115258932113630807592130623 +-0.0798360489308834048172158759371 0.245714694261550875564736884371 -0.236115258932113630807592130623 +-0.07981359958648681640625 -0.330842804908752452508480246252 -0.210173201560974132195980246252 +-0.07981359958648681640625 0.330842804908752452508480246252 -0.210173201560974132195980246252 +-0.0797919474542140849671056912484 -0.0231146994978189447567107350778 -0.3399983942508697509765625 +-0.0797919474542140849671056912484 0.0231146994978189447567107350778 -0.3399983942508697509765625 +-0.079743802547454833984375 -0.0529129981994628934005575615629 0.0290022999048233053043244211722 +-0.079743802547454833984375 0.0529129981994628934005575615629 0.0290022999048233053043244211722 +-0.0797067023813724517822265625 -0.632074517011642522668068977509 -0.635711377859115578381477007497 +-0.0797067023813724517822265625 0.632074517011642522668068977509 -0.635711377859115578381477007497 +-0.0796938002109527643401776231258 -0.0907970011234283530532351846887 0.159388995170593267269865123126 +-0.0796938002109527643401776231258 0.0907970011234283530532351846887 0.159388995170593267269865123126 +-0.0796696968376636588393679971887 -0.441656050086021434442073996252 0.317951145768165632787827235006 +-0.0796696968376636588393679971887 0.441656050086021434442073996252 0.317951145768165632787827235006 +-0.0796184957027435274978799384371 -0.11585520207881927490234375 -0.2650254070758819580078125 +-0.0796184957027435274978799384371 0.11585520207881927490234375 -0.2650254070758819580078125 +-0.0795581996440887367905148153113 -0.284346592426300059930355246252 -0.05308020114898681640625 +-0.0795581996440887367905148153113 0.284346592426300059930355246252 -0.05308020114898681640625 +-0.07952535152435302734375 -0.0501205489039421095420756557814 -0.116891553997993460911608565311 +-0.07952535152435302734375 0.0501205489039421095420756557814 -0.116891553997993460911608565311 +-0.0795074000954627962967080634371 -0.693732208013534523693977007497 0.0491385996341705266754473768742 +-0.0795074000954627962967080634371 0.693732208013534523693977007497 0.0491385996341705266754473768742 +-0.0794997520744800678649255587516 -0.507054886221885769970185720013 -0.197674395143985770495476117503 +-0.0794997520744800678649255587516 0.507054886221885769970185720013 -0.197674395143985770495476117503 +-0.0794557988643646295745526231258 -0.0322522997856140164474325615629 -0.0514447987079620361328125 +-0.0794557988643646295745526231258 0.0322522997856140164474325615629 -0.0514447987079620361328125 +-0.0794171988964080810546875 -0.0445358991622924818565287807814 0.04134570062160491943359375 +-0.0794171988964080810546875 0.0445358991622924818565287807814 0.04134570062160491943359375 +-0.0794030964374542180816973768742 -0.117417445778846732395983565311 0.049074299633502960205078125 +-0.0794030964374542180816973768742 0.117417445778846732395983565311 0.049074299633502960205078125 +-0.079369999468326568603515625 -0.3519890010356903076171875 -0.34612751007080078125 +-0.079369999468326568603515625 0.3519890010356903076171875 -0.34612751007080078125 +-0.0793166518211364662827023153113 -0.337351346015930142474559261245 0.04902064800262451171875 +-0.0793166518211364662827023153113 0.337351346015930142474559261245 0.04902064800262451171875 +-0.0792410999536514309982138115629 -0.0856705516576766884506710653113 -0.09424124658107757568359375 +-0.0792410999536514309982138115629 0.0856705516576766884506710653113 -0.09424124658107757568359375 +-0.0791967004537582341949786268742 -0.203691297769546503237947376874 0.205518293380737293585269753748 +-0.0791967004537582341949786268742 0.203691297769546503237947376874 0.205518293380737293585269753748 +-0.0791406027972698239425497490629 -0.243574102222919475213558371252 -0.486732390522956914757912727509 +-0.0791406027972698239425497490629 0.243574102222919475213558371252 -0.486732390522956914757912727509 +-0.0791268020868301363845986884371 -0.401763582229614224505809261245 0.438548398017883311883480246252 +-0.0791268020868301363845986884371 0.401763582229614224505809261245 0.438548398017883311883480246252 +-0.0790661990642547718444177462516 -0.0131654992699623118318497105861 -0.0597931027412414578536825615629 +-0.0790661990642547718444177462516 0.0131654992699623118318497105861 -0.0597931027412414578536825615629 +-0.0790572464466094970703125 -0.1767752468585968017578125 0.15811525285243988037109375 +-0.0790572464466094970703125 0.1767752468585968017578125 0.15811525285243988037109375 +-0.0790510497987270410735760606258 -0.243289795517921458856136496252 0.370217692852020274774105246252 +-0.0790510497987270410735760606258 0.243289795517921458856136496252 0.370217692852020274774105246252 +-0.0790386021137237659850427462516 -0.114890801906585696134932561563 -0.143363201618194574527009876874 +-0.0790386021137237659850427462516 0.114890801906585696134932561563 -0.143363201618194574527009876874 +-0.0790135540068149649917117471887 -0.529065912961959927685029470013 -0.127850799262523656674161998126 +-0.0790135540068149649917117471887 0.529065912961959927685029470013 -0.127850799262523656674161998126 +-0.0790123522281646756271200615629 -0.146187002956867234670923494377 -0.418193989992141745837272992503 +-0.0790123522281646756271200615629 0.146187002956867234670923494377 -0.418193989992141745837272992503 +-0.0789001494646072304428585653113 -0.0924279958009719820877236884371 -0.328225094079971302374332253748 +-0.0789001494646072304428585653113 0.0924279958009719820877236884371 -0.328225094079971302374332253748 +-0.0788741983473301017104617471887 -0.437136313319206271099659488755 -0.782745301723480224609375 +-0.0788741983473301017104617471887 0.437136313319206271099659488755 -0.782745301723480224609375 +-0.0788659989833831870376101846887 -0.242728400230407731497095369377 -0.307998800277709983141960492503 +-0.0788659989833831870376101846887 0.242728400230407731497095369377 -0.307998800277709983141960492503 +-0.078860700130462646484375 -0.242703598737716658151342130623 0.15772140026092529296875 +-0.078860700130462646484375 0.242703598737716658151342130623 0.15772140026092529296875 +-0.0788595020771026555816973768742 0 -0.127597796916961658819644753748 +-0.0788471996784210205078125 -0.498485398292541459497329014994 -0.324492609500884987561164507497 +-0.0788471996784210205078125 0.498485398292541459497329014994 -0.324492609500884987561164507497 +-0.0788216039538383594909021212516 -0.361138260364532504009815738755 -0.407266756892204317974659488755 +-0.0788216039538383594909021212516 0.361138260364532504009815738755 -0.407266756892204317974659488755 +-0.0787572026252746498764523153113 -0.282485103607177712170539507497 0.0632412001490592901031817518742 +-0.0787572026252746498764523153113 0.282485103607177712170539507497 0.0632412001490592901031817518742 +-0.0787551015615463173569210653113 -0.118516650795936581697098688437 -0.0474491983652114840408486884371 +-0.0787551015615463173569210653113 0.118516650795936581697098688437 -0.0474491983652114840408486884371 +-0.0787445481866598101516885321871 -0.367388758063316334112613503748 0.87253887951374053955078125 +-0.0787445481866598101516885321871 0.367388758063316334112613503748 0.87253887951374053955078125 +-0.0787276983261108453948651231258 -0.0247320994734764112998881557814 0.0564823985099792494346537807814 +-0.0787276983261108453948651231258 0.0247320994734764112998881557814 0.0564823985099792494346537807814 +-0.0787103980779647743881710653113 -0.0817654520273208562652911268742 0.0980769038200378362457598768742 +-0.0787103980779647743881710653113 0.0817654520273208562652911268742 0.0980769038200378362457598768742 +-0.0786907032132148770431356865629 -0.475709846615791354107471988755 -0.264590702950954437255859375 +-0.0786907032132148770431356865629 0.475709846615791354107471988755 -0.264590702950954437255859375 +-0.078682601451873779296875 -0.00813480019569397076739658558608 0.183692395687103271484375 +-0.078682601451873779296875 0.00813480019569397076739658558608 0.183692395687103271484375 +-0.078642003238201141357421875 -0.08138175308704376220703125 -0.2229180037975311279296875 +-0.078642003238201141357421875 0.08138175308704376220703125 -0.2229180037975311279296875 +-0.0786261975765228382506677462516 -0.0571247994899749811370526231258 0.0235514998435974141910431711722 +-0.0786261975765228382506677462516 0.0571247994899749811370526231258 0.0235514998435974141910431711722 +-0.0785939991474151611328125 -0.241890750825405120849609375 -0.70555798709392547607421875 +-0.0785939991474151611328125 0.241890750825405120849609375 -0.70555798709392547607421875 +-0.0785932004451751764495526231258 -0.3313767910003662109375 0.209791994094848638363615123126 +-0.0785932004451751764495526231258 0.3313767910003662109375 0.209791994094848638363615123126 +-0.0785926491022109902084835653113 -0.126026549935340875796541126874 0.0209881491959094980404021413278 +-0.0785926491022109902084835653113 0.126026549935340875796541126874 0.0209881491959094980404021413278 +-0.078574001789093017578125 -0.188364398479461681024105246252 0.344013190269470248150440738755 +-0.078574001789093017578125 0.188364398479461681024105246252 0.344013190269470248150440738755 +-0.0785336993634700719635333143742 -0.0922229051589965737045773153113 -0.6894398033618927001953125 +-0.0785336993634700719635333143742 0.0922229051589965737045773153113 -0.6894398033618927001953125 +-0.0785269975662231528579226846887 -0.156768000125885015316740123126 -0.0962145984172821100433026231258 +-0.0785269975662231528579226846887 0.156768000125885015316740123126 -0.0962145984172821100433026231258 +-0.07852350175380706787109375 -0.126586648821830738409488503748 -0.0176024995744228363037109375 +-0.07852350175380706787109375 0.126586648821830738409488503748 -0.0176024995744228363037109375 +-0.0785025022923946380615234375 -0.241602011024951934814453125 0.7056667506694793701171875 +-0.0785025022923946380615234375 0.241602011024951934814453125 0.7056667506694793701171875 +-0.0784657001495361328125 -0.0468427002429962213714276231258 -0.0406066000461578410773988423443 +-0.0784657001495361328125 0.0468427002429962213714276231258 -0.0406066000461578410773988423443 +-0.078459002077579498291015625 -0.9969170093536376953125 0 +-0.078459002077579498291015625 0.9969170093536376953125 0 +-0.0784135997295379721938601846887 -0.7062664031982421875 0.367476010322570822985710492503 +-0.0784135997295379721938601846887 0.7062664031982421875 0.367476010322570822985710492503 +-0.0783944010734557994446447537484 0 0.341107544302940324243422764994 +-0.0783818006515502874176348768742 0 0.695597696304321222449118522491 +-0.0783782981336116763015908759371 -0.337401455640792879986378238755 -0.287257960438728365826221988755 +-0.0783782981336116763015908759371 0.337401455640792879986378238755 -0.287257960438728365826221988755 +-0.0783748537302017128647335653113 -0.12789599597454071044921875 0 +-0.0783748537302017128647335653113 0.12789599597454071044921875 0 +-0.0783110022544860895354901231258 -0.151729404926300048828125 0.104142200946807872430355246252 +-0.0783110022544860895354901231258 0.151729404926300048828125 0.104142200946807872430355246252 +-0.0783105015754699818053552462516 -0.0517967998981475885589276231258 -0.0344173997640609755088725307814 +-0.0783105015754699818053552462516 0.0517967998981475885589276231258 -0.0344173997640609755088725307814 +-0.0783051013946533258636151231258 0 -0.0621958017349243177940287807814 +-0.0783037006855011041839276231258 -0.0619184017181396498252787807814 0.00588660016655922005424095289072 +-0.0783037006855011041839276231258 0.0619184017181396498252787807814 0.00588660016655922005424095289072 +-0.07830074988305568695068359375 -0.72927676141262054443359375 0.15660224854946136474609375 +-0.07830074988305568695068359375 0.72927676141262054443359375 0.15660224854946136474609375 +-0.0782294988632202259459802462516 -0.0262659013271331794048268903907 -0.0564822971820831340461488423443 +-0.0782294988632202259459802462516 0.0262659013271331794048268903907 -0.0564822971820831340461488423443 +-0.078217498958110809326171875 -0.4938440024852752685546875 0 +-0.078217498958110809326171875 -0.18734599649906158447265625 -0.145888745784759521484375 +-0.078217498958110809326171875 0.18734599649906158447265625 -0.145888745784759521484375 +-0.078217498958110809326171875 0.4938440024852752685546875 0 +-0.0782108008861541748046875 -0.154360795021057151110710492503 -0.360632395744323763775440738755 +-0.0782108008861541748046875 0.154360795021057151110710492503 -0.360632395744323763775440738755 +-0.0782051980495452880859375 -0.0619239985942840603927450615629 -0.00702629983425140380859375 +-0.0782051980495452880859375 0.0619239985942840603927450615629 -0.00702629983425140380859375 +-0.0781533032655715859116085653113 -0.020028300583362579345703125 -0.126455247402191162109375 +-0.0781533032655715859116085653113 0.020028300583362579345703125 -0.126455247402191162109375 +-0.0781396023929118999085119412484 -0.0281998511403799036190154225778 0.3399983942508697509765625 +-0.0781396023929118999085119412484 0.0281998511403799036190154225778 0.3399983942508697509765625 +-0.078123502433300018310546875 -0.0567594975233077989051899692186 0.693307298421859674597556022491 +-0.078123502433300018310546875 0.0567594975233077989051899692186 0.693307298421859674597556022491 +-0.0781206011772155872741052462516 -0.02381519973278045654296875 0.182564997673034690173210492503 +-0.0781206011772155872741052462516 0.02381519973278045654296875 0.182564997673034690173210492503 +-0.07808174751698970794677734375 -0.5620732605457305908203125 -0.490385234355926513671875 +-0.07808174751698970794677734375 0.5620732605457305908203125 -0.490385234355926513671875 +-0.07803274691104888916015625 -0.20678575336933135986328125 0.116835750639438629150390625 +-0.07803274691104888916015625 0.20678575336933135986328125 0.116835750639438629150390625 +-0.0779506012797355624099893134371 -0.331169295310974109991519753748 -0.0821621514856815254868038778113 +-0.0779506012797355624099893134371 0.331169295310974109991519753748 -0.0821621514856815254868038778113 +-0.0779288530349731417556924384371 -0.656684511899948142321647992503 0.53403373062610626220703125 +-0.0779288530349731417556924384371 0.656684511899948142321647992503 0.53403373062610626220703125 +-0.0778382003307342557052450615629 -0.0403349012136459406097088731258 0.0481072992086410550216513115629 +-0.0778382003307342557052450615629 0.0403349012136459406097088731258 0.0481072992086410550216513115629 +-0.0776669979095458984375 -0.131328999996185302734375 -0.476152002811431884765625 +-0.0776669979095458984375 0.131328999996185302734375 -0.476152002811431884765625 +-0.0776629984378814780532351846887 -0.0564252018928527859786825615629 -0.028011798858642578125 +-0.0776629984378814780532351846887 0.0564252018928527859786825615629 -0.028011798858642578125 +-0.0775698006153106717208700615629 -0.0427132010459899957854901231258 -0.0464598000049591119964276231258 +-0.0775698006153106717208700615629 0.0427132010459899957854901231258 -0.0464598000049591119964276231258 +-0.077494204044342041015625 -0.50634419918060302734375 0.312426602840423561779914507497 +-0.077494204044342041015625 0.50634419918060302734375 0.312426602840423561779914507497 +-0.0774327993392944363693075615629 -0.0664677977561950739104901231258 -0.172006404399871831722990123126 +-0.0774327993392944363693075615629 0.0664677977561950739104901231258 -0.172006404399871831722990123126 +-0.0774290978908538790603799384371 -0.0562548011541366549392861884371 0.115499398112297049778796065311 +-0.0774290978908538790603799384371 0.0562548011541366549392861884371 0.115499398112297049778796065311 +-0.0774231970310211292662927462516 -0.451398420333862349096420985006 0.655930423736572287829460492503 +-0.0774231970310211292662927462516 0.451398420333862349096420985006 0.655930423736572287829460492503 +-0.0774221509695053183852664346887 -0.515219235420227072985710492503 -0.38865776360034942626953125 +-0.0774221509695053183852664346887 0.515219235420227072985710492503 -0.38865776360034942626953125 +-0.0773765988647937691391476278113 -0.0562166519463062272499165317186 0.336678642034530628546207253748 +-0.0773765988647937691391476278113 0.0562166519463062272499165317186 0.336678642034530628546207253748 +-0.0772832989692688043792401231258 0 0.0634609997272491538344851846887 +-0.07725425064563751220703125 -0.23776400089263916015625 0 +-0.07725425064563751220703125 0.23776400089263916015625 0 +-0.0772499009966850225250567518742 -0.662337881326675370630141514994 -0.212933695316314675061164507497 +-0.0772499009966850225250567518742 0.662337881326675370630141514994 -0.212933695316314675061164507497 +-0.077211201190948486328125 -0.391770410537719770971420985006 -0.0235436007380485541606862653907 +-0.077211201190948486328125 0.391770410537719770971420985006 -0.0235436007380485541606862653907 +-0.077199399471282958984375 -0.0266510009765625020816681711722 -0.182564997673034690173210492503 +-0.077199399471282958984375 0.0266510009765625020816681711722 -0.182564997673034690173210492503 +-0.077166497707366943359375 -0.0610922992229461711555238423443 0.01769340038299560546875 +-0.077166497707366943359375 0.0610922992229461711555238423443 0.01769340038299560546875 +-0.077158249914646148681640625 -0.12981350719928741455078125 -0.1992362439632415771484375 +-0.077158249914646148681640625 0.12981350719928741455078125 -0.1992362439632415771484375 +-0.0771529972553253173828125 -0.13810299336910247802734375 0.193584501743316650390625 +-0.0771529972553253173828125 0.13810299336910247802734375 0.193584501743316650390625 +-0.0770436018705367986481036268742 -0.276575696468353282586605246252 -0.0870068997144699124435263115629 +-0.0770436018705367986481036268742 0.276575696468353282586605246252 -0.0870068997144699124435263115629 +-0.0770363505929708425323809706242 -0.1252993531525135040283203125 0.83717690408229827880859375 +-0.0770363505929708425323809706242 0.1252993531525135040283203125 0.83717690408229827880859375 +-0.0770214974880218533614950615629 -0.0082240998744964599609375 0.0632459998130798367599325615629 +-0.0770214974880218533614950615629 0.0082240998744964599609375 0.0632459998130798367599325615629 +-0.0770161986351013266860476846887 -0.03167720139026641845703125 0.055362999439239501953125 +-0.0770161986351013266860476846887 0.03167720139026641845703125 0.055362999439239501953125 +-0.0770147971808910342117471259371 -0.415744650363922108038394753748 0.154029151797294622250333873126 +-0.0770147971808910342117471259371 0.415744650363922108038394753748 0.154029151797294622250333873126 +-0.077003002166748046875 -0.0394542008638381971885600307814 0.180316197872161881887720369377 +-0.077003002166748046875 0.0394542008638381971885600307814 0.180316197872161881887720369377 +-0.0769998028874397250076455634371 -0.0559436000883579212517027201557 -0.844654345512390158923210492503 +-0.0769998028874397250076455634371 0.0559436000883579212517027201557 -0.844654345512390158923210492503 +-0.0769804000854492076477697537484 -0.627758610248565607214743522491 -0.299987798929214455334602007497 +-0.0769804000854492076477697537484 0.627758610248565607214743522491 -0.299987798929214455334602007497 +-0.0769779980182647705078125 -0.3037360012531280517578125 0.38963949680328369140625 +-0.0769779980182647705078125 0.3037360012531280517578125 0.38963949680328369140625 +-0.0769129514694213839431924384371 -0.104066249728202817048661188437 0.0758590489625930730621661268742 +-0.0769129514694213839431924384371 0.104066249728202817048661188437 0.0758590489625930730621661268742 +-0.07688610255718231201171875 -0.0786160469055175725738848768742 -0.102019947767257687654129938437 +-0.07688610255718231201171875 0.0786160469055175725738848768742 -0.102019947767257687654129938437 +-0.076870501041412353515625 -0.70203597843647003173828125 0.252461247146129608154296875 +-0.076870501041412353515625 0.70203597843647003173828125 0.252461247146129608154296875 +-0.0768523991107940701583700615629 -0.391540789604187033923210492503 0.02809999883174896240234375 +-0.0768523991107940701583700615629 0.391540789604187033923210492503 0.02809999883174896240234375 +-0.076715998351573944091796875 -0.236108243465423583984375 -0.0294547490775585174560546875 +-0.076715998351573944091796875 0.236108243465423583984375 -0.0294547490775585174560546875 +-0.0766910970211029108245526231258 -0.00660419985651969961709673029304 -0.0638346016407013022719851846887 +-0.0766910970211029108245526231258 0.00660419985651969961709673029304 -0.0638346016407013022719851846887 +-0.0766485035419464111328125 -0.076301753520965576171875 0.22539524734020233154296875 +-0.0766485035419464111328125 0.076301753520965576171875 0.22539524734020233154296875 +-0.0766413986682891873458700615629 -0.182596397399902354852230246252 0.028011798858642578125 +-0.0766413986682891873458700615629 0.182596397399902354852230246252 0.028011798858642578125 +-0.0766310989856719970703125 -0.0198385000228881863693075615629 -0.0611073017120361342002787807814 +-0.0766310989856719970703125 0.0198385000228881863693075615629 -0.0611073017120361342002787807814 +-0.07662265002727508544921875 -0.322682741284370411261051003748 0.559021434187889076916633257497 +-0.07662265002727508544921875 0.322682741284370411261051003748 0.559021434187889076916633257497 +-0.0766045987606048667251101846887 -0.183248794078826909847990123126 -0.0234861999750137356857138115629 +-0.0766045987606048667251101846887 0.183248794078826909847990123126 -0.0234861999750137356857138115629 +-0.0766003012657165555099325615629 -0.050629198551177978515625 0.0396117001771926907638388115629 +-0.0766003012657165555099325615629 0.050629198551177978515625 0.0396117001771926907638388115629 +-0.0765855014324188232421875 -0.0607475996017456110198651231258 -0.0210804000496864346603231865629 +-0.0765855014324188232421875 0.0607475996017456110198651231258 -0.0210804000496864346603231865629 +-0.0765367984771728598891726846887 -0.184775805473327642269865123126 0 +-0.0765367984771728598891726846887 0.184775805473327642269865123126 0 +-0.0765261016786098480224609375 -0.386714291572570756372329014994 -0.578442895412444979541533029987 +-0.0765261016786098480224609375 0.386714291572570756372329014994 -0.578442895412444979541533029987 +-0.0765073478221893338302450615629 -0.122628146409988397769197376874 0.0401119485497474642654580634371 +-0.0765073478221893338302450615629 0.122628146409988397769197376874 0.0401119485497474642654580634371 +-0.07648800313472747802734375 -0.2354042530059814453125 0.0351339988410472869873046875 +-0.07648800313472747802734375 0.2354042530059814453125 0.0351339988410472869873046875 +-0.0764108955860137856186398153113 -0.0802130967378616305252236884371 0.278795993328094460217414507497 +-0.0764108955860137856186398153113 0.0802130967378616305252236884371 0.278795993328094460217414507497 +-0.0764042973518371526520098768742 -0.235152000188827509097322376874 -0.169899898767471302374332253748 +-0.0764042973518371526520098768742 0.235152000188827509097322376874 -0.169899898767471302374332253748 +-0.076403200626373291015625 -0.149876797199249262027009876874 -0.108164203166961681024105246252 +-0.076403200626373291015625 0.149876797199249262027009876874 -0.108164203166961681024105246252 +-0.076376996934413909912109375 -0.816227972507476806640625 0.572660028934478759765625 +-0.076376996934413909912109375 0.816227972507476806640625 0.572660028934478759765625 +-0.0763521522283553966126135037484 -0.327295145392417885510383257497 0.0977151036262512151520098768742 +-0.0763521522283553966126135037484 0.327295145392417885510383257497 0.0977151036262512151520098768742 +-0.07633499801158905029296875 -0.924302995204925537109375 -0.3739480078220367431640625 +-0.07633499801158905029296875 0.924302995204925537109375 -0.3739480078220367431640625 +-0.0763192534446716225327023153113 -0.123776248097419730442858565311 -0.0368080504238605457634214701557 +-0.0763192534446716225327023153113 0.123776248097419730442858565311 -0.0368080504238605457634214701557 +-0.0763090014457702692229901231258 -0.0151546001434326171875 0.0628274023532867514907351846887 +-0.0763090014457702692229901231258 0.0151546001434326171875 0.0628274023532867514907351846887 +-0.0762850463390350314041299384371 -0.00619469974189996736707586322268 0.129004803299903852975560880623 +-0.0762850463390350314041299384371 0.00619469974189996736707586322268 0.129004803299903852975560880623 +-0.0762696027755737360198651231258 -0.0383610993623733562141175923443 -0.0520708978176116984992738423443 +-0.0762696027755737360198651231258 0.0383610993623733562141175923443 -0.0520708978176116984992738423443 +-0.0762624025344848660568075615629 -0.104498600959777837582365123126 0.152525794506073009149105246252 +-0.0762624025344848660568075615629 0.104498600959777837582365123126 0.152525794506073009149105246252 +-0.0761431992053985678969851846887 -0.16542160511016845703125 -0.0826914012432098388671875 +-0.0761431992053985678969851846887 0.16542160511016845703125 -0.0826914012432098388671875 +-0.0760676980018615694900674384371 -0.169352406263351434878572376874 -0.2356553971767425537109375 +-0.0760676980018615694900674384371 0.169352406263351434878572376874 -0.2356553971767425537109375 +-0.0760406970977783314147302462516 -0.0649447023868560818771200615629 0 +-0.0760406970977783314147302462516 0.0649447023868560818771200615629 0 +-0.0760097980499267605880575615629 -0.154010707139968866519197376874 0.245973908901214594058259876874 +-0.0760097980499267605880575615629 0.154010707139968866519197376874 0.245973908901214594058259876874 +-0.0760094508528709467132244981258 -0.52308024466037750244140625 0.152018344402313237972990123126 +-0.0760094508528709467132244981258 0.52308024466037750244140625 0.152018344402313237972990123126 +-0.0760093510150909451583700615629 -0.0399603009223937974403462192186 -0.122986802458763117007478626874 +-0.0760093510150909451583700615629 0.0399603009223937974403462192186 -0.122986802458763117007478626874 +-0.0760083526372909573654013115629 -0.233925442397594468557642244377 0.491936489939689691741619981258 +-0.0760083526372909573654013115629 0.233925442397594468557642244377 0.491936489939689691741619981258 +-0.07600200176239013671875 -0.3634421825408935546875 -0.471310794353485107421875 +-0.07600200176239013671875 0.3634421825408935546875 -0.471310794353485107421875 +-0.0759977973997593009292117471887 -0.233900105953216558285490123126 -0.865745079517364568566506477509 +-0.0759977973997593009292117471887 0.233900105953216558285490123126 -0.865745079517364568566506477509 +-0.0759881973266601645766726846887 -0.135781395435333268606470369377 0.125654995441436767578125 +-0.0759881973266601645766726846887 0.135781395435333268606470369377 0.125654995441436767578125 +-0.075957000255584716796875 -0.0551855027675628717620526231258 0.034425199031829833984375 +-0.075957000255584716796875 0.0551855027675628717620526231258 0.034425199031829833984375 +-0.0758735999464988791762820596887 0 -0.544741448760032720421975227509 +-0.0758567959070205605209835653113 -0.0179629504680633537982981096093 0.128152647614479059390291126874 +-0.0758567959070205605209835653113 0.0179629504680633537982981096093 0.128152647614479059390291126874 +-0.0758463986217975533188351278113 -0.684970992803573541785056022491 -0.122726096212863913792467940311 +-0.0758463986217975533188351278113 0.684970992803573541785056022491 -0.122726096212863913792467940311 +-0.075818002223968505859375 -0.10482120513916015625 -0.152525794506073009149105246252 +-0.075818002223968505859375 0.10482120513916015625 -0.152525794506073009149105246252 +-0.0756917975842952700515908759371 -0.018288449384272098541259765625 0.44321130216121673583984375 +-0.0756917975842952700515908759371 0.018288449384272098541259765625 0.44321130216121673583984375 +-0.075537502765655517578125 -0.4907414913177490234375 -0.0588789992034435272216796875 +-0.075537502765655517578125 0.4907414913177490234375 -0.0588789992034435272216796875 +-0.07550279796123504638671875 -0.0916380017995834378341513115629 0.0916613996028900063217648153113 +-0.07550279796123504638671875 0.0916380017995834378341513115629 0.0916613996028900063217648153113 +-0.0755006968975067138671875 -0.0397704005241394029090962192186 -0.287607300281524647100894753748 +-0.0755006968975067138671875 0.0397704005241394029090962192186 -0.287607300281524647100894753748 +-0.0754097968339920016189736884371 -0.153105604648590076788394753748 0.575214600563049294201789507497 +-0.0754097968339920016189736884371 0.153105604648590076788394753748 0.575214600563049294201789507497 +-0.0753444015979766873458700615629 -0.0547403991222381591796875 0.176993596553802506887720369377 +-0.0753444015979766873458700615629 0.0547403991222381591796875 0.176993596553802506887720369377 +-0.0753041028976440540709802462516 -0.0647409975528717013260049384371 0.0117430999875068678428569057814 +-0.0753041028976440540709802462516 0.0647409975528717013260049384371 0.0117430999875068678428569057814 +-0.0752983987331390380859375 -0.160299801826477072985710492503 0.0929199993610382163344851846887 +-0.0752983987331390380859375 0.160299801826477072985710492503 0.0929199993610382163344851846887 +-0.0752842515707015935699786268742 -0.0670456498861312782944210653113 0.111072751879692080412276311563 +-0.0752842515707015935699786268742 0.0670456498861312782944210653113 0.111072751879692080412276311563 +-0.0752795994281768854339276231258 -0.04656510055065155029296875 0.04652599990367889404296875 +-0.0752795994281768854339276231258 0.04656510055065155029296875 0.04652599990367889404296875 +-0.07527855224907398223876953125 -0.596959266066551141882712272491 -0.600394079089164756091179242503 +-0.07527855224907398223876953125 0.596959266066551141882712272491 -0.600394079089164756091179242503 +-0.0752681016921997181334802462516 -0.0324860990047454861739950615629 -0.057265698909759521484375 +-0.0752681016921997181334802462516 0.0324860990047454861739950615629 -0.057265698909759521484375 +-0.07523000240325927734375 -0.86586797237396240234375 -0.4945839941501617431640625 +-0.07523000240325927734375 0.86586797237396240234375 -0.4945839941501617431640625 +-0.075224697589874267578125 -0.0220112994313240058208425153907 0.0621026992797851576377787807814 +-0.075224697589874267578125 0.0220112994313240058208425153907 0.0621026992797851576377787807814 +-0.0752059489488601656814736884371 -0.105306449532508852873213811563 -0.0758590489625930730621661268742 +-0.0752059489488601656814736884371 0.105306449532508852873213811563 -0.0758590489625930730621661268742 +-0.0751951992511749323089276231258 -0.179280197620391851254240123126 -0.0469498008489608806281800923443 +-0.0751951992511749323089276231258 0.179280197620391851254240123126 -0.0469498008489608806281800923443 +-0.0751887023448944008530148153113 -0.271451103687286365850894753748 0.103252503275871279631026311563 +-0.0751887023448944008530148153113 0.271451103687286365850894753748 0.103252503275871279631026311563 +-0.075105451047420501708984375 -0.155561001598834985903963001874 -0.3044009506702423095703125 +-0.075105451047420501708984375 0.155561001598834985903963001874 -0.3044009506702423095703125 +-0.07508075237274169921875 -0.23107625544071197509765625 -0.0588787496089935302734375 +-0.07508075237274169921875 0.23107625544071197509765625 -0.0588787496089935302734375 +-0.07504110038280487060546875 -0.0696315005421638405502804403113 -0.109637099504470827970870061563 +-0.07504110038280487060546875 0.0696315005421638405502804403113 -0.109637099504470827970870061563 +-0.075034998357295989990234375 -0.62830698490142822265625 0.7743380069732666015625 +-0.075034998357295989990234375 0.62830698490142822265625 0.7743380069732666015625 +-0.0750325508415699005126953125 -0.0545138999819755540321430942186 0.440338951349258433953792746252 +-0.0750325508415699005126953125 0.0545138999819755540321430942186 0.440338951349258433953792746252 +-0.0750199466943740761459835653113 -0.110832300782203671540848688437 0.0677362516522407448471554403113 +-0.0750199466943740761459835653113 0.110832300782203671540848688437 0.0677362516522407448471554403113 +-0.074999548494815826416015625 -0.0297335989773273440262002509371 0.126455551385879522152677623126 +-0.074999548494815826416015625 0.0297335989773273440262002509371 0.126455551385879522152677623126 +-0.0749881982803344698806924384371 -0.0646575987339019775390625 -0.0140058994293212890625 +-0.0749881982803344698806924384371 0.0646575987339019775390625 -0.0140058994293212890625 +-0.0749660015106201199630575615629 -0.0594892024993896526008363423443 0.0290022999048233053043244211722 +-0.0749660015106201199630575615629 0.0594892024993896526008363423443 0.0290022999048233053043244211722 +-0.0749538004398346002776776231258 -0.0381716012954711955695863423443 0.0540820002555847181846537807814 +-0.0749538004398346002776776231258 0.0381716012954711955695863423443 0.0540820002555847181846537807814 +-0.074948750436305999755859375 -0.17724125087261199951171875 -0.15958775579929351806640625 +-0.074948750436305999755859375 0.17724125087261199951171875 -0.15958775579929351806640625 +-0.07494080066680908203125 -0.316066408157348655016960492503 -0.233421993255615245477230246252 +-0.07494080066680908203125 0.316066408157348655016960492503 -0.233421993255615245477230246252 +-0.0749380499124527033050213731258 -0.391374447941780112536491742503 0.209069998562335962466463001874 +-0.0749380499124527033050213731258 0.391374447941780112536491742503 0.209069998562335962466463001874 +-0.0747840017080306923569210653113 -0.230166006088256824835269753748 -0.549027013778686456824118522491 +-0.0747840017080306923569210653113 0.230166006088256824835269753748 -0.549027013778686456824118522491 +-0.0746595978736877413650674384371 -0.386657190322875987664730246252 -0.0701572000980377197265625 +-0.0746595978736877413650674384371 0.386657190322875987664730246252 -0.0701572000980377197265625 +-0.0746354021131992312332315009371 -0.507705086469650290759147992503 0.476093089580535866467414507497 +-0.0746354021131992312332315009371 0.507705086469650290759147992503 0.476093089580535866467414507497 +-0.0746345996856689480880575615629 -0.176951599121093761102230246252 0.0558372020721435574630575615629 +-0.0746345996856689480880575615629 0.176951599121093761102230246252 0.0558372020721435574630575615629 +-0.0746056981384754236419354356258 -0.644571211934089727257912727509 -0.0382381999865174307395854214064 +-0.0746056981384754236419354356258 0.644571211934089727257912727509 -0.0382381999865174307395854214064 +-0.0746004015207290538391760037484 -0.229600340127944918533486884371 -0.253413656353950467181590511245 +-0.0746004015207290538391760037484 0.229600340127944918533486884371 -0.253413656353950467181590511245 +-0.0746000982820987784682742471887 -0.348052507638931307720753238755 0.8266157805919647216796875 +-0.0746000982820987784682742471887 0.348052507638931307720753238755 0.8266157805919647216796875 +-0.0745360519737005150497921590613 -0.947071158885955721729033029987 0 +-0.0745360519737005150497921590613 0.947071158885955721729033029987 0 +-0.0744925975799560630141726846887 -0.013256900012493133544921875 -0.0653842985630035400390625 +-0.0744925975799560630141726846887 0.013256900012493133544921875 -0.0653842985630035400390625 +-0.0744922984391450798691280965613 -0.412850962579250302386668636245 -0.7392594516277313232421875 +-0.0744922984391450798691280965613 0.412850962579250302386668636245 -0.7392594516277313232421875 +-0.07445125281810760498046875 -0.01664149947464466094970703125 -0.23807574808597564697265625 +-0.07445125281810760498046875 0.01664149947464466094970703125 -0.23807574808597564697265625 +-0.074378497898578643798828125 -0.4894255101680755615234375 0.070216000080108642578125 +-0.074378497898578643798828125 0.4894255101680755615234375 0.070216000080108642578125 +-0.0743361525237560272216796875 -0.1399170458316802978515625 0.312085559964179970471320757497 +-0.0743361525237560272216796875 0.1399170458316802978515625 0.312085559964179970471320757497 +-0.07423789799213409423828125 -0.498205956816673345421975227509 0.220861299335956579037443248126 +-0.07423789799213409423828125 0.498205956816673345421975227509 0.220861299335956579037443248126 +-0.0742182008922099983871945028113 -0.320265048742294278216746761245 -0.120091304183006272743305942186 +-0.0742182008922099983871945028113 0.320265048742294278216746761245 -0.120091304183006272743305942186 +-0.0742103993892669761001101846887 -0.281785988807678244860710492503 0.274024391174316428454460492503 +-0.0742103993892669761001101846887 0.281785988807678244860710492503 0.274024391174316428454460492503 +-0.07419510185718536376953125 -0.275062558054923966821547764994 0.203311499953269941842748380623 +-0.07419510185718536376953125 0.275062558054923966821547764994 0.203311499953269941842748380623 +-0.074161998927593231201171875 -0.22824524343013763427734375 0.0700294971466064453125 +-0.074161998927593231201171875 0.22824524343013763427734375 0.0700294971466064453125 +-0.0739582479000091552734375 -0.112467598915100094880692438437 -0.0661907985806465121170205634371 +-0.0739582479000091552734375 0.112467598915100094880692438437 -0.0661907985806465121170205634371 +-0.0739072024822235162933026231258 -0.142255604267120361328125 -0.119587004184722900390625 +-0.0739072024822235162933026231258 0.142255604267120361328125 -0.119587004184722900390625 +-0.0738819003105163629729901231258 -0.0536781013011932428558026231258 -0.0407445996999740642219300923443 +-0.0738819003105163629729901231258 0.0536781013011932428558026231258 -0.0407445996999740642219300923443 +-0.0738700985908508356292401231258 -0.0485709011554718017578125 -0.04673419892787933349609375 +-0.0738700985908508356292401231258 0.0485709011554718017578125 -0.04673419892787933349609375 +-0.0738283000886440360366336221887 -0.644179907441139287804787727509 0.0456286996603012112716513115629 +-0.0738283000886440360366336221887 0.644179907441139287804787727509 0.0456286996603012112716513115629 +-0.0738174021244049072265625 0 -0.0674610018730163601974325615629 +-0.0738036006689071627517861884371 -0.0977778017520904568771200615629 -0.273847800493240367547542746252 +-0.0738036006689071627517861884371 0.0977778017520904568771200615629 -0.273847800493240367547542746252 +-0.0737962007522583035568075615629 -0.0264081001281738295127787807814 -0.0621025979518890422492738423443 +-0.0737962007522583035568075615629 0.0264081001281738295127787807814 -0.0621025979518890422492738423443 +-0.0737441986799240029037960653113 -0.0412033483386039720008930942186 0.12395189702510833740234375 +-0.0737441986799240029037960653113 0.0412033483386039720008930942186 0.12395189702510833740234375 +-0.0737319007515907232086505018742 -0.0994258493185043307205361884371 -0.0847237497568130437652911268742 +-0.0737319007515907232086505018742 0.0994258493185043307205361884371 -0.0847237497568130437652911268742 +-0.0736567020416259848891726846887 -0.0289925009012222296977956403907 0.0611074984073638957648988423443 +-0.0736567020416259848891726846887 0.0289925009012222296977956403907 0.0611074984073638957648988423443 +-0.0736346006393432672698651231258 -0.0634576976299285888671875 0.0234749004244804403140900461722 +-0.0736346006393432672698651231258 0.0634576976299285888671875 0.0234749004244804403140900461722 +-0.0735949516296386663238848768742 -0.130280104279518110788060880623 0.0105296999216079704975168596093 +-0.0735949516296386663238848768742 0.130280104279518110788060880623 0.0105296999216079704975168596093 +-0.073592253029346466064453125 -0.06603725254535675048828125 -0.22961549460887908935546875 +-0.073592253029346466064453125 0.06603725254535675048828125 -0.22961549460887908935546875 +-0.0735819004476070404052734375 -0.300946098566055253442641514994 -0.162840999662876129150390625 +-0.0735819004476070404052734375 0.300946098566055253442641514994 -0.162840999662876129150390625 +-0.0735307998955249675354650662484 -0.226300197839736927374332253748 0.256673890352249134405582253748 +-0.0735307998955249675354650662484 0.226300197839736927374332253748 0.256673890352249134405582253748 +-0.07351274974644184112548828125 -0.66212475299835205078125 0.344508759677410125732421875 +-0.07351274974644184112548828125 0.66212475299835205078125 0.344508759677410125732421875 +-0.0735027015209197970291299384371 -0.130458748340606695004240123126 -0.00882419999688863719577991417964 +-0.0735027015209197970291299384371 0.130458748340606695004240123126 -0.00882419999688863719577991417964 +-0.0734611988067627036391726846887 -0.0584713995456695584396200615629 -0.0344173997640609755088725307814 +-0.0734611988067627036391726846887 0.0584713995456695584396200615629 -0.0344173997640609755088725307814 +-0.0734418019652366554916866903113 -0.265489196777343727795539507497 -0.118835100531578058413728626874 +-0.0734418019652366554916866903113 0.265489196777343727795539507497 -0.118835100531578058413728626874 +-0.073398999869823455810546875 -0.96664297580718994140625 -0.24538700282573699951171875 +-0.073398999869823455810546875 0.96664297580718994140625 -0.24538700282573699951171875 +-0.0733543992042541420639523153113 -0.225764700770378107241853626874 -0.6585207879543304443359375 +-0.0733543992042541420639523153113 0.225764700770378107241853626874 -0.6585207879543304443359375 +-0.0733531504869461004059161268742 -0.01001114957034587860107421875 -0.130457246303558344058259876874 +-0.0733531504869461004059161268742 0.01001114957034587860107421875 -0.130457246303558344058259876874 +-0.0733448028564453180511151231258 -0.618056011199951238488381477509 0.5026199817657470703125 +-0.0733448028564453180511151231258 0.618056011199951238488381477509 0.5026199817657470703125 +-0.0732913509011268726744958712516 -0.108025500178337105494641434689 -0.5342831909656524658203125 +-0.0732913509011268726744958712516 0.108025500178337105494641434689 -0.5342831909656524658203125 +-0.073269002139568328857421875 -0.225495210289955116955695757497 0.658622300624847389904914507497 +-0.073269002139568328857421875 0.225495210289955116955695757497 0.658622300624847389904914507497 +-0.0732577979564666831313601846887 -0.172985804080963145867855246252 -0.068623602390289306640625 +-0.0732577979564666831313601846887 0.172985804080963145867855246252 -0.068623602390289306640625 +-0.0732068002223968533614950615629 -0.384261608123779296875 0.0835691988468170166015625 +-0.0732068002223968533614950615629 0.384261608123779296875 0.0835691988468170166015625 +-0.0731857001781463650802450615629 -0.0678911983966827420333700615629 0.00588590018451213854017156634768 +-0.0731857001781463650802450615629 0.0678911983966827420333700615629 0.00588590018451213854017156634768 +-0.0731256008148193359375 -0.128300553560256963558927623126 -0.0262984491884708411479909528907 +-0.0731256008148193359375 0.128300553560256963558927623126 -0.0262984491884708411479909528907 +-0.0731052026152610862075320596887 -0.224997746944427506887720369377 -0.382794302701950084344417746252 +-0.0731052026152610862075320596887 0.224997746944427506887720369377 -0.382794302701950084344417746252 +-0.0730806998908519744873046875 -0.6806583106517791748046875 0.146162098646163918225227007497 +-0.0730806998908519744873046875 0.6806583106517791748046875 0.146162098646163918225227007497 +-0.0730791985988616943359375 -0.0678975999355316134353799384371 -0.0070249997079372406005859375 +-0.0730791985988616943359375 0.0678975999355316134353799384371 -0.0070249997079372406005859375 +-0.0730627521872520419021768134371 -0.127204048633575428350894753748 0.0313204497098922701736611884371 +-0.0730627521872520419021768134371 0.127204048633575428350894753748 0.0313204497098922701736611884371 +-0.0729241494089365033248739678129 -0.0856355547904968233963174384371 -0.64019410312175750732421875 +-0.0729241494089365033248739678129 0.0856355547904968233963174384371 -0.64019410312175750732421875 +-0.0728762976825237246414346259371 -0.524601709842681840356704014994 -0.457692885398864712787059261245 +-0.0728762976825237246414346259371 0.524601709842681840356704014994 -0.457692885398864712787059261245 +-0.07280950248241424560546875 -0.093714497983455657958984375 0.485711991786956787109375 +-0.07280950248241424560546875 0.093714497983455657958984375 0.485711991786956787109375 +-0.0727831006050109891036825615629 0 0.645912146568298317639289507497 +-0.0727425009012222234527911268742 -0.117030152678489679507478626874 0.059266202151775360107421875 +-0.0727425009012222234527911268742 0.117030152678489679507478626874 0.059266202151775360107421875 +-0.0727317988872528131683026231258 -0.00412500016391277330579656634768 0.0685060024261474609375 +-0.0727317988872528131683026231258 0.00412500016391277330579656634768 0.0685060024261474609375 +-0.0727182984352111871917401231258 -0.0442864000797271728515625 -0.0524478018283844049651776231258 +-0.0727182984352111871917401231258 0.0442864000797271728515625 -0.0524478018283844049651776231258 +-0.0726688519120216314117755018742 -0.0774172514677047701736611884371 0.105951896309852591770983565311 +-0.0726688519120216314117755018742 0.0774172514677047701736611884371 0.105951896309852591770983565311 +-0.0726441979408264243422976846887 -0.0133208006620407111431081403907 -0.185863804817199718133480246252 +-0.0726441979408264243422976846887 0.0133208006620407111431081403907 -0.185863804817199718133480246252 +-0.0726140975952148520766726846887 -0.0628310978412628257094851846887 -0.0279186010360717787315287807814 +-0.0726140975952148520766726846887 0.0628310978412628257094851846887 -0.0279186010360717787315287807814 +-0.072610996663570404052734375 -0.19009999930858612060546875 0.14522249996662139892578125 +-0.072610996663570404052734375 0.19009999930858612060546875 0.14522249996662139892578125 +-0.0725979983806610135177450615629 -0.118400001525878914576672684689 0.37511479854583740234375 +-0.0725979983806610135177450615629 0.118400001525878914576672684689 0.37511479854583740234375 +-0.0725913003087043789962606865629 -0.223416906595230085885717130623 -0.186588603258132923468082253748 +-0.0725913003087043789962606865629 0.223416906595230085885717130623 -0.186588603258132923468082253748 +-0.07258424721658229827880859375 -0.42318601906299591064453125 0.6149347722530364990234375 +-0.07258424721658229827880859375 0.42318601906299591064453125 0.6149347722530364990234375 +-0.0725581470876932171920614678129 -0.775416573882102944104133257497 0.544027027487754777368422764994 +-0.0725581470876932171920614678129 0.775416573882102944104133257497 0.544027027487754777368422764994 +-0.0725432522594928741455078125 -0.0527052477002143901496644673443 0.643785348534584023205695757497 +-0.0725432522594928741455078125 0.0527052477002143901496644673443 0.643785348534584023205695757497 +-0.0725329019129276331145916856258 -0.368283283710479747430355246252 0.402002698183059725689503238755 +-0.0725329019129276331145916856258 0.368283283710479747430355246252 0.402002698183059725689503238755 +-0.072531498968601226806640625 -0.223231494426727294921875 -0.0860629975795745849609375 +-0.072531498968601226806640625 0.223231494426727294921875 -0.0860629975795745849609375 +-0.072524003684520721435546875 -0.990438997745513916015625 -0.11734999716281890869140625 +-0.072524003684520721435546875 0.990438997745513916015625 -0.11734999716281890869140625 +-0.0725182481110095977783203125 -0.878087845444679215844985264994 -0.355250607430934894903629128748 +-0.0725182481110095977783203125 0.878087845444679215844985264994 -0.355250607430934894903629128748 +-0.0725048005580902071853799384371 -0.117928802967071533203125 0.7879312038421630859375 +-0.0725048005580902071853799384371 0.117928802967071533203125 0.7879312038421630859375 +-0.0724965989589691217620526231258 -0.0445358991622924818565287807814 0.0525433003902435330489950615629 +-0.0724965989589691217620526231258 0.0445358991622924818565287807814 0.0525433003902435330489950615629 +-0.0724828004837036188323651231258 -0.052661597728729248046875 -0.389837193489074751440170985006 +-0.0724828004837036188323651231258 0.052661597728729248046875 -0.389837193489074751440170985006 +-0.0724704027175903375823651231258 -0.0526528000831604017784037807814 -0.794968795776367254113381477509 +-0.0724704027175903375823651231258 0.0526528000831604017784037807814 -0.794968795776367254113381477509 +-0.072426997125148773193359375 -0.4015055000782012939453125 0.2890464961528778076171875 +-0.072426997125148773193359375 0.4015055000782012939453125 0.2890464961528778076171875 +-0.0723605990409851157485476846887 -0.117555797100067138671875 0.144722402095794677734375 +-0.0723605990409851157485476846887 0.117555797100067138671875 0.144722402095794677734375 +-0.0723599970340728787521200615629 -0.0525726020336151136924662807814 -0.178885805606842057668970369377 +-0.0723599970340728787521200615629 -0.0525720000267028836349325615629 0.04472149908542633056640625 +-0.0723599970340728787521200615629 0.0525720000267028836349325615629 0.04472149908542633056640625 +-0.0723599970340728787521200615629 0.0525726020336151136924662807814 -0.178885805606842057668970369377 +-0.072276599705219268798828125 -0.456944948434829745220753238755 -0.297451558709144636694077235006 +-0.072276599705219268798828125 0.456944948434829745220753238755 -0.297451558709144636694077235006 +-0.0722743988037109347244424384371 -0.0122726999223232279695450230861 0.0680131971836090143401776231258 +-0.0722743988037109347244424384371 0.0122726999223232279695450230861 0.0680131971836090143401776231258 +-0.072272501885890960693359375 -0.4609589874744415283203125 -0.17970399558544158935546875 +-0.072272501885890960693359375 0.4609589874744415283203125 -0.17970399558544158935546875 +-0.0722422510385513222397335653113 -0.0601447507739067063758930942186 -0.11689169704914093017578125 +-0.0722422510385513222397335653113 0.0601447507739067063758930942186 -0.11689169704914093017578125 +-0.0722296491265296963790731865629 -0.118897202610969532354801003748 -0.0560920491814613300651792826557 +-0.0722296491265296963790731865629 0.118897202610969532354801003748 -0.0560920491814613300651792826557 +-0.072215996682643890380859375 -0.653491973876953125 -0.753480970859527587890625 +-0.072215996682643890380859375 0.653491973876953125 -0.753480970859527587890625 +-0.0721356995403766576568926893742 0 -0.342485851049423195568977007497 +-0.0721156485378742218017578125 -0.162713702023029344045923494377 0.41330789029598236083984375 +-0.0721156485378742218017578125 0.162713702023029344045923494377 0.41330789029598236083984375 +-0.0720964014530181968032351846887 -0.221894001960754400082365123126 -0.324907588958740278783920985006 +-0.0720964014530181968032351846887 0.221894001960754400082365123126 -0.324907588958740278783920985006 +-0.0720849990844726618011151231258 -0.09217560291290283203125 -0.162195599079132085629240123126 +-0.0720849990844726618011151231258 0.09217560291290283203125 -0.162195599079132085629240123126 +-0.071997500956058502197265625 -0.113564498722553253173828125 -0.2107592523097991943359375 +-0.071997500956058502197265625 0.113564498722553253173828125 -0.2107592523097991943359375 +-0.0719860509037971579848758096887 -0.0296945985406637212589142649222 -0.44321130216121673583984375 +-0.0719860509037971579848758096887 0.0296945985406637212589142649222 -0.44321130216121673583984375 +-0.071946002542972564697265625 -0.22143100202083587646484375 -0.4424839913845062255859375 +-0.071946002542972564697265625 0.22143100202083587646484375 -0.4424839913845062255859375 +-0.0719279989600181551834268134371 -0.0300549007952213287353515625 -0.128152495622634893246427623126 +-0.0719279989600181551834268134371 0.0300549007952213287353515625 -0.128152495622634893246427623126 +-0.0719183981418609619140625 -0.0672317981719970786391726846887 0.017539300024509429931640625 +-0.0719183981418609619140625 0.0672317981719970786391726846887 0.017539300024509429931640625 +-0.0719086490571498870849609375 -0.34106849133968353271484375 0.28460745513439178466796875 +-0.0719086490571498870849609375 0.34106849133968353271484375 0.28460745513439178466796875 +-0.0719003975391387939453125 -0.019909299910068511962890625 -0.0665880024433136014083700615629 +-0.0719003975391387939453125 0.019909299910068511962890625 -0.0665880024433136014083700615629 +-0.0718949973583221518813601846887 -0.0385904014110565185546875 -0.0578090012073516901214276231258 +-0.0718949973583221518813601846887 0.0385904014110565185546875 -0.0578090012073516901214276231258 +-0.0718936026096343994140625 -0.168034803867340098992855246252 0.0812134027481079129318075615629 +-0.0718936026096343994140625 0.168034803867340098992855246252 0.0812134027481079129318075615629 +-0.0718797013163566533844317518742 -0.0930353969335556002517861884371 -0.0931542009115219060699786268742 +-0.0718797013163566533844317518742 0.0930353969335556002517861884371 -0.0931542009115219060699786268742 +-0.0718580007553100558181924384371 -0.00665659978985786490029985529304 -0.0692251026630401611328125 +-0.0718580007553100558181924384371 0.00665659978985786490029985529304 -0.0692251026630401611328125 +-0.071830503642559051513671875 -0.480969011783599853515625 -0.11622799932956695556640625 +-0.071830503642559051513671875 0.480969011783599853515625 -0.11622799932956695556640625 +-0.0718226015567779568771200615629 -0.0572050988674163846114950615629 0.0396117001771926907638388115629 +-0.0718226015567779568771200615629 0.0572050988674163846114950615629 0.0396117001771926907638388115629 +-0.0717756975442171013535030965613 -0.220905655622482294253572376874 -0.817648130655288629675681022491 +-0.0717756975442171013535030965613 0.220905655622482294253572376874 -0.817648130655288629675681022491 +-0.07177560031414031982421875 -0.100847098231315615568526311563 0.0847239017486572237869424384371 +-0.07177560031414031982421875 0.100847098231315615568526311563 0.0847239017486572237869424384371 +-0.0717458009719848521790197537484 -0.655233579874038629675681022491 0.235630497336387606521768134371 +-0.0717458009719848521790197537484 0.655233579874038629675681022491 0.235630497336387606521768134371 +-0.0717320509254932431320028740629 -0.615028032660484336169304242503 -0.197724145650863658563167746252 +-0.0717320509254932431320028740629 0.615028032660484336169304242503 -0.197724145650863658563167746252 +-0.071725003421306610107421875 -0.15480874478816986083984375 0.1827284991741180419921875 +-0.071725003421306610107421875 0.15480874478816986083984375 0.1827284991741180419921875 +-0.0717042982578277587890625 -0.0358222991228103679328675923443 0.0597934007644653348068075615629 +-0.0717042982578277587890625 0.0358222991228103679328675923443 0.0597934007644653348068075615629 +-0.07165600359439849853515625 -0.32830750942230224609375 -0.3702425062656402587890625 +-0.07165600359439849853515625 0.32830750942230224609375 -0.3702425062656402587890625 +-0.0716465994715690529526241903113 -0.220501506328582758120759876874 0.190383303165435779913394753748 +-0.0716465994715690529526241903113 0.220501506328582758120759876874 0.190383303165435779913394753748 +-0.07153700292110443115234375 -0.4324634969234466552734375 -0.24053700268268585205078125 +-0.07153700292110443115234375 0.4324634969234466552734375 -0.24053700268268585205078125 +-0.0714818000793457086761151231258 -0.582918709516525246350227007497 -0.278560099005699168817073996252 +-0.0714818000793457086761151231258 0.582918709516525246350227007497 -0.278560099005699168817073996252 +-0.0714685022830963134765625 -0.822574573755264215613181022491 -0.469854794442653656005859375 +-0.0714685022830963134765625 0.822574573755264215613181022491 -0.469854794442653656005859375 +-0.0714666008949279701889523153113 -0.475586986541748024670539507497 -0.358761012554168701171875 +-0.0714666008949279701889523153113 0.475586986541748024670539507497 -0.358761012554168701171875 +-0.0714329995214939145187216240629 -0.316790100932121287957698996252 -0.311514759063720725329460492503 +-0.0714329995214939145187216240629 0.316790100932121287957698996252 -0.311514759063720725329460492503 +-0.0713475003838539012512853787484 -0.0694347500801086314758947537484 -0.335541850328445412365852007497 +-0.0713475003838539012512853787484 0.0694347500801086314758947537484 -0.335541850328445412365852007497 +-0.07133950293064117431640625 -0.16570949554443359375 -0.173063755035400390625 +-0.07133950293064117431640625 0.16570949554443359375 -0.173063755035400390625 +-0.0713360011577606201171875 -0.01917760074138641357421875 0.0674046993255615206619424384371 +-0.0713360011577606201171875 0.01917760074138641357421875 0.0674046993255615206619424384371 +-0.0713180005550384521484375 -0.092935502529144287109375 0.22085450589656829833984375 +-0.0713180005550384521484375 0.092935502529144287109375 0.22085450589656829833984375 +-0.071313202381134033203125 -0.376296806335449263158920985006 -0.115391194820404052734375 +-0.071313202381134033203125 0.376296806335449263158920985006 -0.115391194820404052734375 +-0.0712832484394311932662802178129 -0.596891635656356833727897992503 0.735621106624603227075454014994 +-0.0712832484394311932662802178129 0.596891635656356833727897992503 0.735621106624603227075454014994 +-0.0712791979312896728515625 -0.0682857990264892633636151231258 0.17394340038299560546875 +-0.0712791979312896728515625 0.0682857990264892633636151231258 0.17394340038299560546875 +-0.0712722003459930475433026231258 -0.0669610977172851590255575615629 -0.0208921998739242560649831403907 +-0.0712722003459930475433026231258 0.0669610977172851590255575615629 -0.0208921998739242560649831403907 +-0.0712599992752075278579226846887 -0.357170009613037131579460492503 -0.165382802486419677734375 +-0.0712599992752075278579226846887 0.357170009613037131579460492503 -0.165382802486419677734375 +-0.0712545990943908719161825615629 -0.133499801158905029296875 -0.130769395828247064761384876874 +-0.0712545990943908719161825615629 0.133499801158905029296875 -0.130769395828247064761384876874 +-0.0710615500807762062729366903113 -0.3118510544300079345703125 0.142123454809188837222322376874 +-0.0710615500807762062729366903113 0.3118510544300079345703125 0.142123454809188837222322376874 +-0.07105995155870914459228515625 -0.359091842174530051501335492503 -0.537125545740127607885483485006 +-0.07105995155870914459228515625 0.359091842174530051501335492503 -0.537125545740127607885483485006 +-0.07103635370731353759765625 -0.464148849248886163909588731258 0.286391052603721663061264735006 +-0.07103635370731353759765625 0.464148849248886163909588731258 0.286391052603721663061264735006 +-0.0709634006023407010177450615629 -0.146957802772521989309595369377 0.115618395805358889494307561563 +-0.0709634006023407010177450615629 0.146957802772521989309595369377 0.115618395805358889494307561563 +-0.0709406971931457602797976846887 -0.0615638971328735379318075615629 0.0343118011951446533203125 +-0.0709406971931457602797976846887 0.0615638971328735379318075615629 0.0343118011951446533203125 +-0.0708819016814231789291866903113 -0.153360307216644287109375 -0.247904098033905007092414507497 +-0.0708819016814231789291866903113 0.153360307216644287109375 -0.247904098033905007092414507497 +-0.0708504021167755126953125 -0.561844015121459983141960492503 -0.565076780319213933800881477509 +-0.0708504021167755126953125 0.561844015121459983141960492503 -0.565076780319213933800881477509 +-0.0707832008600235013107138115629 -0.0514263018965721088737730326557 0.121840345859527576788394753748 +-0.0707832008600235013107138115629 0.0514263018965721088737730326557 0.121840345859527576788394753748 +-0.070728600025177001953125 -0.297860991954803477899105246252 0.516019785404205344470085492503 +-0.070728600025177001953125 0.297860991954803477899105246252 0.516019785404205344470085492503 +-0.0707108020782470786391726846887 -0.070710599422454833984375 0 +-0.0707108020782470786391726846887 0.070710599422454833984375 0 +-0.0706430971622467041015625 -0.03259269893169403076171875 -0.0628273010253906222244424384371 +-0.0706430971622467041015625 0.03259269893169403076171875 -0.0628273010253906222244424384371 +-0.0706307001411914797683877509371 -0.0801136024296283666412676893742 0.3333064019680023193359375 +-0.0706307001411914797683877509371 0.0801136024296283666412676893742 0.3333064019680023193359375 +-0.0706131018698215456863565009371 -0.897225308418273970190170985006 0 +-0.0706131018698215456863565009371 0.897225308418273970190170985006 0 +-0.07055175304412841796875 -0.217132747173309326171875 0.101861752569675445556640625 +-0.07055175304412841796875 0.217132747173309326171875 0.101861752569675445556640625 +-0.0704556483775377190292843465613 -0.328716257214546170306590511245 0.78069268167018890380859375 +-0.0704556483775377190292843465613 0.328716257214546170306590511245 0.78069268167018890380859375 +-0.0704287987202405901809854071871 -0.636044493317604042736945757497 -0.113959946483373639192215875937 +-0.0704287987202405901809854071871 0.636044493317604042736945757497 -0.113959946483373639192215875937 +-0.0703957490622997283935546875 -0.44445960223674774169921875 0 +-0.0703957490622997283935546875 0.44445960223674774169921875 0 +-0.070381499826908111572265625 -0.010169000364840030670166015625 0.2396727502346038818359375 +-0.070381499826908111572265625 0.010169000364840030670166015625 0.2396727502346038818359375 +-0.0702675998210906954666299384371 -0.216257596015930197985710492503 0.329082393646240256579460492503 +-0.0702675998210906954666299384371 0.216257596015930197985710492503 0.329082393646240256579460492503 +-0.0702332019805908258636151231258 -0.129944002628326421566740123126 -0.371727991104126020971420985006 +-0.0702332019805908258636151231258 0.129944002628326421566740123126 -0.371727991104126020971420985006 +-0.0701858997344970703125 -0.100405803322792044895983565311 0.273847800493240367547542746252 +-0.0701858997344970703125 0.100405803322792044895983565311 0.273847800493240367547542746252 +-0.0701103985309600857833700615629 -0.388565611839294444695980246252 -0.695773601531982421875 +-0.0701103985309600857833700615629 0.388565611839294444695980246252 -0.695773601531982421875 +-0.0701015979051589910309161268742 -0.255790793895721402240184261245 0.140202900767326360531583873126 +-0.0701015979051589910309161268742 0.255790793895721402240184261245 0.140202900767326360531583873126 +-0.0700921520590782193282919365629 -0.1226280033588409423828125 0.050492249429225921630859375 +-0.0700921520590782193282919365629 0.1226280033588409423828125 0.050492249429225921630859375 +-0.0700338006019592257400674384371 -0.291711008548736550061164507497 0 +-0.0700338006019592257400674384371 0.291711008548736550061164507497 0 +-0.0700314000248909024337606865629 -0.124553704261779779605134876874 -0.0456286489963531466385049384371 +-0.0700314000248909024337606865629 0.124553704261779779605134876874 -0.0456286489963531466385049384371 +-0.07001374661922454833984375 -0.0302974991500377655029296875 0.2380760014057159423828125 +-0.07001374661922454833984375 0.0302974991500377655029296875 0.2380760014057159423828125 +-0.06996099650859832763671875 -0.987688004970550537109375 0.13992099463939666748046875 +-0.06996099650859832763671875 0.987688004970550537109375 0.13992099463939666748046875 +-0.0699126005172729519943075615629 -0.0705235004425048828125 0.0117758996784687042236328125 +-0.0699126005172729519943075615629 0.0705235004425048828125 0.0117758996784687042236328125 +-0.0699002981185913169204226846887 -0.1181960999965667724609375 -0.4285368025302886962890625 +-0.0699002981185913169204226846887 0.1181960999965667724609375 -0.4285368025302886962890625 +-0.0698710024356842124282351846887 -0.0261545985937118551090119211722 0.0665881991386413629729901231258 +-0.0698710024356842124282351846887 0.0261545985937118551090119211722 0.0665881991386413629729901231258 +-0.0698484018445014870346554403113 0 -0.132744902372360223941072376874 +-0.06983689963817596435546875 -0.289487454295158375128238503748 -0.183901551365852344854801003748 +-0.06983689963817596435546875 0.289487454295158375128238503748 -0.183901551365852344854801003748 +-0.069754801690578460693359375 -0.174583804607391340768529630623 0.233783698081970192639289507497 +-0.069754801690578460693359375 0.174583804607391340768529630623 0.233783698081970192639289507497 +-0.0697290498763322857955770928129 -0.918310827016830422131477007497 -0.233117652684450143985017689374 +-0.0697290498763322857955770928129 0.918310827016830422131477007497 -0.233117652684450143985017689374 +-0.0697193026542663601974325615629 -0.0656279981136322076995526231258 0.02884779870510101318359375 +-0.0697193026542663601974325615629 0.0656279981136322076995526231258 0.02884779870510101318359375 +-0.0696994498372077858627804403113 -0.0875527471303939736069210653113 0.0998824506998062106033486884371 +-0.0696994498372077858627804403113 0.0875527471303939736069210653113 0.0998824506998062106033486884371 +-0.0696859002113342368422976846887 -0.050629198551177978515625 0.0507992029190063518195863423443 +-0.0696859002113342368422976846887 0.050629198551177978515625 0.0507992029190063518195863423443 +-0.0696695983409881675063601846887 -0.299912405014038097039730246252 -0.255340409278869640008480246252 +-0.0696695983409881675063601846887 0.299912405014038097039730246252 -0.255340409278869640008480246252 +-0.0696685016155242919921875 -0.333155333995819091796875 -0.432034894824028070647869981258 +-0.0696685016155242919921875 0.333155333995819091796875 -0.432034894824028070647869981258 +-0.06965924799442291259765625 -0.0861681014299392616928585653113 -0.101107200980186454075671065311 +-0.06965924799442291259765625 0.0861681014299392616928585653113 -0.101107200980186454075671065311 +-0.0695702016353607205489950615629 -0.0704469978809356689453125 -0.014043100178241729736328125 +-0.0695702016353607205489950615629 0.0704469978809356689453125 -0.014043100178241729736328125 +-0.0695303976535797119140625 -0.0132791996002197265625 -0.0706341981887817355056924384371 +-0.0695303976535797119140625 0.0132791996002197265625 -0.0706341981887817355056924384371 +-0.06945359706878662109375 -0.187026000022888189144865123126 0.0140525996685028076171875 +-0.06945359706878662109375 0.187026000022888189144865123126 0.0140525996685028076171875 +-0.0693817973136901938735476846887 -0.187209999561309820004240123126 -0.0117732003331184401084819057814 +-0.0693817973136901938735476846887 0.187209999561309820004240123126 -0.0117732003331184401084819057814 +-0.0693597972393035916427450615629 -0.0422358006238937391807475307814 0.0583554029464721721320863423443 +-0.0693597972393035916427450615629 0.0422358006238937391807475307814 0.0583554029464721721320863423443 +-0.0693043019622564399062625284387 -0.471440437436103809698551003748 0.442086440324783336297542746252 +-0.0693043019622564399062625284387 0.471440437436103809698551003748 0.442086440324783336297542746252 +-0.0692801982164382990081463731258 -0.273362401127815235479801003748 0.350675547122955344470085492503 +-0.0692801982164382990081463731258 0.273362401127815235479801003748 0.350675547122955344470085492503 +-0.06921599805355072021484375 -0.2130199968814849853515625 0.974592983722686767578125 +-0.06921599805355072021484375 0.2130199968814849853515625 0.974592983722686767578125 +-0.0691410005092620849609375 0 -0.9976069927215576171875 +-0.0691256470978260095794354356258 -0.140346804261207602770866742503 0.527280050516128584447983485006 +-0.0691256470978260095794354356258 0.140346804261207602770866742503 0.527280050516128584447983485006 +-0.06909950077533721923828125 -0.4755274951457977294921875 0.13819849491119384765625 +-0.06909950077533721923828125 0.4755274951457977294921875 0.13819849491119384765625 +-0.0690985023975372314453125 -0.21265949308872222900390625 0.4472149908542633056640625 +-0.0690985023975372314453125 0.21265949308872222900390625 0.4472149908542633056640625 +-0.06909625232219696044921875 -0.21265999972820281982421875 -0.111803747713565826416015625 +-0.06909625232219696044921875 0.21265999972820281982421875 -0.111803747713565826416015625 +-0.0690209984779357882400674384371 -0.055245101451873779296875 -0.04673419892787933349609375 +-0.0690209984779357882400674384371 0.055245101451873779296875 -0.04673419892787933349609375 +-0.0690077491104602730453976278113 -0.212387350201606733834935880623 -0.269498950242996193615852007497 +-0.0690077491104602730453976278113 0.212387350201606733834935880623 -0.269498950242996193615852007497 +-0.0689851507544517461578692518742 -0.0501205489039421095420756557814 -0.123405745625495902317858565311 +-0.0689851507544517461578692518742 0.0501205489039421095420756557814 -0.123405745625495902317858565311 +-0.0689846992492675753494424384371 -0.0264149010181427001953125 -0.0674045026302337729751101846887 +-0.0689846992492675753494424384371 0.0264149010181427001953125 -0.0674045026302337729751101846887 +-0.06897640228271484375 0 -0.0724034011363983154296875 +-0.06897599995136260986328125 0 -0.4952194988727569580078125 +-0.0688978035002946881393270928129 -0.940917047858238153601462272491 -0.1114824973046779632568359375 +-0.0688978035002946881393270928129 0.940917047858238153601462272491 -0.1114824973046779632568359375 +-0.0688667982816696111481036268742 -0.594988811016082697058493522491 -0.0352967999875545487831196567186 +-0.0688667982816696111481036268742 0.594988811016082697058493522491 -0.0352967999875545487831196567186 +-0.0688189029693603571136151231258 -0.04999969899654388427734375 -0.0525735974311828668792401231258 +-0.0688189029693603571136151231258 0.04999969899654388427734375 -0.0525735974311828668792401231258 +-0.0687974989414215087890625 -0.0601499021053314222862162807814 -0.0406066000461578410773988423443 +-0.0687974989414215087890625 0.0601499021053314222862162807814 -0.0406066000461578410773988423443 +-0.0687788978219032315353231865629 -0.062338650226593017578125 0.117827546596527096833817438437 +-0.0687788978219032315353231865629 0.062338650226593017578125 0.117827546596527096833817438437 +-0.0687690503895282689850176893742 -0.2899546921253204345703125 0.183567994832992548159822376874 +-0.0687690503895282689850176893742 0.2899546921253204345703125 0.183567994832992548159822376874 +-0.06876075267791748046875 -0.5794275104999542236328125 0.47120623290538787841796875 +-0.06876075267791748046875 0.5794275104999542236328125 0.47120623290538787841796875 +-0.068752251565456390380859375 -0.164818848669528950079410378748 0.301011541485786404681590511245 +-0.068752251565456390380859375 0.164818848669528950079410378748 0.301011541485786404681590511245 +-0.0687392972409725244720135606258 -0.734605175256729192589943977509 0.515394026041030905993522992503 +-0.0687392972409725244720135606258 0.734605175256729192589943977509 0.515394026041030905993522992503 +-0.068701498210430145263671875 -0.831872695684433005602897992503 -0.336553207039833102154346988755 +-0.068701498210430145263671875 0.831872695684433005602897992503 -0.336553207039833102154346988755 +-0.068639002740383148193359375 -0.4271300137042999267578125 -0.901580989360809326171875 +-0.068639002740383148193359375 0.4271300137042999267578125 -0.901580989360809326171875 +-0.0686118997633457100571163778113 -0.6179831027984619140625 0.321541509032249428479133257497 +-0.0686118997633457100571163778113 0.6179831027984619140625 0.321541509032249428479133257497 +-0.0686065971851348849197549384371 -0.0828534007072448813735476846887 0.168607401847839372122095369377 +-0.0686065971851348849197549384371 0.0828534007072448813735476846887 0.168607401847839372122095369377 +-0.0686051968485116986373739678129 -0.620817375183105424341079014994 -0.715806922316551186291633257497 +-0.0686051968485116986373739678129 0.620817375183105424341079014994 -0.715806922316551186291633257497 +-0.0686042994260787908356036268742 -0.289917898178100597039730246252 -0.0352292999625205965896768134371 +-0.0686042994260787908356036268742 0.289917898178100597039730246252 -0.0352292999625205965896768134371 +-0.068588502705097198486328125 -0.0498317517340183258056640625 0.23518599569797515869140625 +-0.068588502705097198486328125 0.0498317517340183258056640625 0.23518599569797515869140625 +-0.0685520015656948117355184990629 -0.210985505580902121813835492503 -0.503274762630462668688835492503 +-0.0685520015656948117355184990629 0.210985505580902121813835492503 -0.503274762630462668688835492503 +-0.0685133993625640924651776231258 -0.184536397457122802734375 -0.0353868007659912109375 +-0.0685133993625640924651776231258 0.184536397457122802734375 -0.0353868007659912109375 +-0.0685067474842071533203125 -0.049773000180721282958984375 -0.2352222502231597900390625 +-0.0685067474842071533203125 0.049773000180721282958984375 -0.2352222502231597900390625 +-0.0684575974941253745376101846887 -0.369550800323486361431690738755 0.136914801597595225945980246252 +-0.0684575974941253745376101846887 0.369550800323486361431690738755 0.136914801597595225945980246252 +-0.0684372007846832247635049384371 -0.0396670013666153009612713731258 -0.183692395687103271484375 +-0.0684372007846832247635049384371 0.0396670013666153009612713731258 -0.183692395687103271484375 +-0.0684344507753849029541015625 -0.135065695643424965588508257497 -0.315553346276283230853465511245 +-0.0684344507753849029541015625 0.135065695643424965588508257497 -0.315553346276283230853465511245 +-0.0684308990836143410385616903113 -0.210612595081329345703125 -0.202384507656097417660490123126 +-0.0684308990836143410385616903113 0.210612595081329345703125 -0.202384507656097417660490123126 +-0.0683930978178977910797442518742 -0.0198125995695590979839284528907 -0.291427195072174072265625 +-0.0683930978178977910797442518742 0.0198125995695590979839284528907 -0.291427195072174072265625 +-0.068316496908664703369140625 0 -0.2404847443103790283203125 +-0.0682514995336532537262286268742 -0.131901445984840381964176003748 0.0210648000240325934673268903907 +-0.0682514995336532537262286268742 0.131901445984840381964176003748 0.0210648000240325934673268903907 +-0.0682299971580505454360476846887 -0.124047005176544197779797684689 -0.141269195079803483450220369377 +-0.0682299971580505454360476846887 0.124047005176544197779797684689 -0.141269195079803483450220369377 +-0.0682172000408172579666299384371 -0.183218204975128196032585492503 0.0421608000993728693206463731258 +-0.0682172000408172579666299384371 0.183218204975128196032585492503 0.0421608000993728693206463731258 +-0.0682016998529434148590411268742 -0.132425549626350391729801003748 -0.01766384951770305633544921875 +-0.0682016998529434148590411268742 0.132425549626350391729801003748 -0.01766384951770305633544921875 +-0.06819260120391845703125 -0.0444460988044738797286825615629 -0.0580887973308563260177450615629 +-0.06819260120391845703125 0.0444460988044738797286825615629 -0.0580887973308563260177450615629 +-0.0681640982627868680099325615629 -0.069377899169921875 0.023245699703693389892578125 +-0.0681640982627868680099325615629 0.069377899169921875 0.023245699703693389892578125 +-0.0681499004364013727386151231258 -0.0646838009357452448089276231258 -0.0342285990715026841590962192186 +-0.0681499004364013727386151231258 0.0646838009357452448089276231258 -0.0342285990715026841590962192186 +-0.0681492000818252480209835653113 -0.594627606868743829870993522491 0.0421187996864318819900674384371 +-0.0681492000818252480209835653113 0.594627606868743829870993522491 0.0421187996864318819900674384371 +-0.0681147992610931368728799384371 -0.209638650715351121389673494377 -0.61148358881473541259765625 +-0.0681147992610931368728799384371 0.209638650715351121389673494377 -0.61148358881473541259765625 +-0.06809864938259124755859375 -0.13365089893341064453125 0 +-0.06809864938259124755859375 0.13365089893341064453125 0 +-0.0680580019950866726974325615629 -0.0330601006746292155891175923443 0.0653846025466919000823651231258 +-0.0680580019950866726974325615629 0.0330601006746292155891175923443 0.0653846025466919000823651231258 +-0.0680355019867420196533203125 -0.209388409554958354608089621252 0.611577850580215520714943977509 +-0.0680355019867420196533203125 0.209388409554958354608089621252 0.611577850580215520714943977509 +-0.0680130004882812527755575615629 -0.129888403415679948293970369377 0.136026597023010259457365123126 +-0.0680130004882812527755575615629 0.129888403415679948293970369377 0.136026597023010259457365123126 +-0.0679857015609741238693075615629 -0.289158296585083018914730246252 0.0420176982879638671875 +-0.0679857015609741238693075615629 -0.10919295251369476318359375 0.0771675020456314003647335653113 +-0.0679857015609741238693075615629 0.10919295251369476318359375 0.0771675020456314003647335653113 +-0.0679857015609741238693075615629 0.289158296585083018914730246252 0.0420176982879638671875 +-0.0679848015308380099197549384371 0 0.0733353018760681124588174384371 +-0.0679837524890899713714276231258 -0.441667342185974143298210492503 -0.0529910992830991758872904995314 +-0.0679837524890899713714276231258 0.441667342185974143298210492503 -0.0529910992830991758872904995314 +-0.06797325052320957183837890625 -0.1105582527816295623779296875 0.73868550360202789306640625 +-0.06797325052320957183837890625 0.1105582527816295623779296875 0.73868550360202789306640625 +-0.067941002547740936279296875 -0.0493620000779628753662109375 -0.74528324604034423828125 +-0.067941002547740936279296875 0.0493620000779628753662109375 -0.74528324604034423828125 +-0.0678929984569549560546875 -0.96118700504302978515625 0.2674129903316497802734375 +-0.0678929984569549560546875 0.96118700504302978515625 0.2674129903316497802734375 +-0.06786064989864826202392578125 -0.63203985989093780517578125 0.135721948742866527215511496252 +-0.06786064989864826202392578125 0.63203985989093780517578125 0.135721948742866527215511496252 +-0.0678243994712829645354901231258 0 -0.188148605823516862356470369377 +-0.0677586972713470486739950615629 -0.0081500001251697540283203125 0.0730912983417510986328125 +-0.0677586972713470486739950615629 0.0081500001251697540283203125 0.0730912983417510986328125 +-0.0677475988864898737151776231258 -0.0788266003131866538344851846887 -0.170870196819305431024105246252 +-0.0677475988864898737151776231258 0.0788266003131866538344851846887 -0.170870196819305431024105246252 +-0.0677452974021434672913244412484 -0.394973617792129472192641514994 0.573939120769500710217414507497 +-0.0677452974021434672913244412484 0.394973617792129472192641514994 0.573939120769500710217414507497 +-0.0677432000637054471114950615629 0 0.188177800178527837582365123126 +-0.067707002162933349609375 -0.779281175136566139904914507497 -0.44512559473514556884765625 +-0.067707002162933349609375 0.779281175136566139904914507497 -0.44512559473514556884765625 +-0.0676708478480577552138797159387 -0.487130159139633200915397992503 -0.425000536441802967413394753748 +-0.0676708478480577552138797159387 0.487130159139633200915397992503 -0.425000536441802967413394753748 +-0.0676286995410919217208700615629 -0.0792239964008331215561398153113 -0.281335794925689663958934261245 +-0.0676286995410919217208700615629 0.0792239964008331215561398153113 -0.281335794925689663958934261245 +-0.0675734996795654269119424384371 -0.0734793007373809869964276231258 0.00588279999792575870876110144536 +-0.0675734996795654269119424384371 0.0734793007373809869964276231258 0.00588279999792575870876110144536 +-0.067559801042079925537109375 -0.342799109220504716333266514994 -0.0206006506457924835895578752343 +-0.067559801042079925537109375 0.342799109220504716333266514994 -0.0206006506457924835895578752343 +-0.0675535976886749295333700615629 -0.207911205291748057977230246252 -0.769551181793212912829460492503 +-0.0675535976886749295333700615629 0.207911205291748057977230246252 -0.769551181793212912829460492503 +-0.0675494015216827475844851846887 -0.0572049975395202692229901231258 0.04652599990367889404296875 +-0.0675494015216827475844851846887 0.0572049975395202692229901231258 0.04652599990367889404296875 +-0.06754200160503387451171875 -0.1109877526760101318359375 0.21358774602413177490234375 +-0.06754200160503387451171875 0.1109877526760101318359375 0.21358774602413177490234375 +-0.0675314985215663965423260606258 -0.565476286411285444799545985006 0.696904206275939963610710492503 +-0.0675314985215663965423260606258 0.565476286411285444799545985006 0.696904206275939963610710492503 +-0.0675198018550872830489950615629 -0.0162279993295669569541850307814 0.187557196617126470394865123126 +-0.0675198018550872830489950615629 0.0162279993295669569541850307814 0.187557196617126470394865123126 +-0.06750024855136871337890625 -0.15386299788951873779296875 -0.1851215064525604248046875 +-0.06750024855136871337890625 0.15386299788951873779296875 -0.1851215064525604248046875 +-0.0674889981746673583984375 -0.4529145061969757080078125 0.20078299939632415771484375 +-0.0674889981746673583984375 0.4529145061969757080078125 0.20078299939632415771484375 +-0.0674412012100219782073651231258 -0.0735010027885436983963174384371 -0.00701979994773864815482689039072 +-0.0674412012100219782073651231258 0.0735010027885436983963174384371 -0.00701979994773864815482689039072 +-0.0673945516347885104080361884371 -0.0199605010449886328960378278907 -0.132512551546096785104467130623 +-0.0673945516347885104080361884371 0.0199605010449886328960378278907 -0.132512551546096785104467130623 +-0.06738500297069549560546875 -0.24029700458049774169921875 -0.01471650041639804840087890625 +-0.06738500297069549560546875 0.24029700458049774169921875 -0.01471650041639804840087890625 +-0.0673777520656585610092648153113 -0.129400196671485889776676003748 -0.0348685495555400848388671875 +-0.0673777520656585610092648153113 0.129400196671485889776676003748 -0.0348685495555400848388671875 +-0.0673145994544029208084268134371 -0.0790482044219970730880575615629 -0.590948402881622314453125 +-0.0673145994544029208084268134371 0.0790482044219970730880575615629 -0.590948402881622314453125 +-0.0672815978527069175063601846887 -0.016256399452686309814453125 0.39396560192108154296875 +-0.0672815978527069175063601846887 0.016256399452686309814453125 0.39396560192108154296875 +-0.0672458492219448061844033759371 -0.342598190903663613049445757497 0.02458749897778034210205078125 +-0.0672458492219448061844033759371 0.342598190903663613049445757497 0.02458749897778034210205078125 +-0.0672115489840507535079794365629 -0.11170859634876251220703125 -0.074187599122524261474609375 +-0.0672115489840507535079794365629 0.11170859634876251220703125 -0.074187599122524261474609375 +-0.0671952009201049749176348768742 0 0.292377895116806008068977007497 +-0.0671844005584716769119424384371 0 0.596226596832275412829460492503 +-0.067178003489971160888671875 -0.240163505077362060546875 0.017565749585628509521484375 +-0.067178003489971160888671875 0.240163505077362060546875 0.017565749585628509521484375 +-0.0671459019184112576583700615629 -0.0386184990406036390830912807814 -0.0632458984851837213714276231258 +-0.0671459019184112576583700615629 0.0386184990406036390830912807814 -0.0632458984851837213714276231258 +-0.0670824006199836758712606865629 -0.12759719789028167724609375 0.0414595484733581501335386576557 +-0.0670824006199836758712606865629 0.12759719789028167724609375 0.0414595484733581501335386576557 +-0.0670819997787475558181924384371 -0.0688189983367919894119424384371 -0.0276396006345748929122763115629 +-0.0670819997787475558181924384371 0.0688189983367919894119424384371 -0.0276396006345748929122763115629 +-0.0670817017555236788650674384371 -0.016245700418949127197265625 0.0723610997200012234786825615629 +-0.0670817017555236788650674384371 0.016245700418949127197265625 0.0723610997200012234786825615629 +-0.0670816496014595003982705634371 -0.07885904610157012939453125 -0.10854180157184600830078125 +-0.0670816496014595003982705634371 0.07885904610157012939453125 -0.10854180157184600830078125 +-0.0670815020799636757553585653113 0 0.134164354205131536312833873126 +-0.0670628011226654108245526231258 -0.163840997219085710012720369377 -0.0930519998073577880859375 +-0.0670628011226654108245526231258 0.163840997219085710012720369377 -0.0930519998073577880859375 +-0.0669768020510673467438067518742 -0.0241713009774684912944753278907 0.291427195072174072265625 +-0.0669768020510673467438067518742 0.0241713009774684912944753278907 0.291427195072174072265625 +-0.06696300208568572998046875 -0.0486509978771209675163511576557 0.594263398647308371813835492503 +-0.06696300208568572998046875 0.0486509978771209675163511576557 0.594263398647308371813835492503 +-0.0669406481087207877456179971887 -0.44048295915126800537109375 0.0631944000720977838714276231258 +-0.0669406481087207877456179971887 0.44048295915126800537109375 0.0631944000720977838714276231258 +-0.0668980002403259249588174384371 -0.0617672026157379192023988423443 0.04134570062160491943359375 +-0.0668980002403259249588174384371 0.0617672026157379192023988423443 0.04134570062160491943359375 +-0.0668767988681793212890625 -0.00666040033102035557155407019536 -0.0740481972694397028167401231258 +-0.0668767988681793212890625 0.00666040033102035557155407019536 -0.0740481972694397028167401231258 +-0.0668746501207351656814736884371 -0.01176870055496692657470703125 0.133750802278518682308927623126 +-0.0668746501207351656814736884371 0.01176870055496692657470703125 0.133750802278518682308927623126 +-0.0668461978435516412933026231258 -0.0198336005210876485660431711722 -0.0716813027858734103103799384371 +-0.0668461978435516412933026231258 0.0198336005210876485660431711722 -0.0716813027858734103103799384371 +-0.0668237984180450467208700615629 -0.179359996318817160876335492503 -0.0580045998096466106086488423443 +-0.0668237984180450467208700615629 0.179359996318817160876335492503 -0.0580045998096466106086488423443 +-0.0668148010969161904037960653113 -0.283859395980834927630809261245 -0.0704247012734413174728231865629 +-0.0668148010969161904037960653113 0.283859395980834927630809261245 -0.0704247012734413174728231865629 +-0.0666956007480621337890625 -0.0484567999839782756477113423443 0.391412401199340842516960492503 +-0.0666956007480621337890625 0.0484567999839782756477113423443 0.391412401199340842516960492503 +-0.0666901517659425763229208428129 -0.847379457950591996606704014994 0 +-0.0666901517659425763229208428129 0.847379457950591996606704014994 0 +-0.0666776001453399658203125 -0.0484434992074966458419638115629 0.0566332995891571100433026231258 +-0.0666776001453399658203125 0.0484434992074966458419638115629 0.0566332995891571100433026231258 +-0.06662850081920623779296875 -0.0982050001621246337890625 -0.485711991786956787109375 +-0.06662850081920623779296875 0.0982050001621246337890625 -0.485711991786956787109375 +-0.0666211009025573785979901231258 -0.608431181311607338635383257497 0.218799747526645660400390625 +-0.0666211009025573785979901231258 0.608431181311607338635383257497 0.218799747526645660400390625 +-0.0666115999221801730056924384371 -0.347888398170471235815170985006 0.185839998722076432668970369377 +-0.0666115999221801730056924384371 0.347888398170471235815170985006 0.185839998722076432668970369377 +-0.0666000008583068903167401231258 -0.0319220006465911892989950615629 0.185863995552063010485710492503 +-0.0666000008583068903167401231258 0.0319220006465911892989950615629 0.185863995552063010485710492503 +-0.066542752087116241455078125 -0.20480124652385711669921875 -0.126998007297515869140625 +-0.066542752087116241455078125 0.20480124652385711669921875 -0.126998007297515869140625 +-0.0664629466831684057037676893742 -0.93830360472202301025390625 0.132924944907426817453099943123 +-0.0664629466831684057037676893742 0.93830360472202301025390625 0.132924944907426817453099943123 +-0.06642225198447704315185546875 -0.52672876417636871337890625 -0.52975948154926300048828125 +-0.06642225198447704315185546875 0.52672876417636871337890625 -0.52975948154926300048828125 +-0.066381298005580902099609375 -0.0729351013898849459549111884371 0.113022002577781666143863503748 +-0.066381298005580902099609375 0.0729351013898849459549111884371 0.113022002577781666143863503748 +-0.06634874641895294189453125 -0.096546001732349395751953125 -0.22085450589656829833984375 +-0.06634874641895294189453125 0.096546001732349395751953125 -0.22085450589656829833984375 +-0.0663227990269660977462606865629 -0.0481857016682624775261167826557 0.288581693172454800677684261245 +-0.0663227990269660977462606865629 0.0481857016682624775261167826557 0.288581693172454800677684261245 +-0.0663111984729766873458700615629 -0.309380006790161143914730246252 0.7347695827484130859375 +-0.0663111984729766873458700615629 0.309380006790161143914730246252 0.7347695827484130859375 +-0.06629849970340728759765625 -0.2369554936885833740234375 -0.044233500957489013671875 +-0.06629849970340728759765625 0.2369554936885833740234375 -0.044233500957489013671875 +-0.0662827014923095675369424384371 -0.0727957010269165011306924384371 0.0175322994589805596088449846093 +-0.0662827014923095675369424384371 0.0727957010269165011306924384371 0.0175322994589805596088449846093 +-0.066270299255847930908203125 -0.0971108973026275634765625 0.0931542009115219060699786268742 +-0.066270299255847930908203125 0.0971108973026275634765625 0.0931542009115219060699786268742 +-0.06626500189304351806640625 -0.91624200344085693359375 0.3951080143451690673828125 +-0.06626500189304351806640625 0.91624200344085693359375 0.3951080143451690673828125 +-0.0662556007504463140289630018742 -0.0234648004174232462093474538278 0.13251270353794097900390625 +-0.0662556007504463140289630018742 0.0234648004174232462093474538278 0.13251270353794097900390625 +-0.0662142008543014498611611884371 -0.567718183994293190686164507497 -0.182514595985412586554019753748 +-0.0662142008543014498611611884371 0.567718183994293190686164507497 -0.182514595985412586554019753748 +-0.0660590998828411157806073106258 -0.869978678226471013879006477509 -0.220848302543163316213892244377 +-0.0660590998828411157806073106258 0.869978678226471013879006477509 -0.220848302543163316213892244377 +-0.065997250378131866455078125 -0.16974274814128875732421875 0.17126524448394775390625 +-0.065997250378131866455078125 0.16974274814128875732421875 0.17126524448394775390625 +-0.0659832000732421819488848768742 -0.538078808784484885485710492503 -0.257132399082183826788394753748 +-0.0659832000732421819488848768742 0.538078808784484885485710492503 -0.257132399082183826788394753748 +-0.0659439012408256503006143134371 -0.115775397419929496067858565311 0.0689017519354820223709268134371 +-0.0659439012408256503006143134371 0.115775397419929496067858565311 0.0689017519354820223709268134371 +-0.065939001739025115966796875 -0.33480298519134521484375 0.365456998348236083984375 +-0.065939001739025115966796875 0.33480298519134521484375 0.365456998348236083984375 +-0.0659262001514434869964276231258 -0.0397343993186950739104901231258 0.0638350009918212946136151231258 +-0.0659262001514434869964276231258 0.0397343993186950739104901231258 0.0638350009918212946136151231258 +-0.0658833980560302734375 -0.0660880982875824002364950615629 0.0359407991170883206466513115629 +-0.0658833980560302734375 0.0660880982875824002364950615629 0.0359407991170883206466513115629 +-0.0658186018466949546157351846887 -0.175868403911590587274105246252 0.0688347995281219510177450615629 +-0.0658186018466949546157351846887 0.175868403911590587274105246252 0.0688347995281219510177450615629 +-0.0657551981508731758774288778113 -0.202368997037410736083984375 0.925863334536552340381376779987 +-0.0657551981508731758774288778113 0.202368997037410736083984375 0.925863334536552340381376779987 +-0.0657375991344451987563601846887 -0.0232451006770133979106862653907 0.071681499481201171875 +-0.0657375991344451987563601846887 0.0232451006770133979106862653907 0.071681499481201171875 +-0.06572849862277507781982421875 -0.364280261099338531494140625 -0.6522877514362335205078125 +-0.06572849862277507781982421875 0.364280261099338531494140625 -0.6522877514362335205078125 +-0.0657224982976913479904013115629 -0.118525198101997367161608565311 -0.0642830997705459566970986884371 +-0.0657224982976913479904013115629 0.118525198101997367161608565311 -0.0642830997705459566970986884371 +-0.0657172501087188720703125 -0.20225299894809722900390625 0.131434500217437744140625 +-0.0657172501087188720703125 0.20225299894809722900390625 0.131434500217437744140625 +-0.06570599973201751708984375 -0.415404498577117919921875 -0.2704105079174041748046875 +-0.06570599973201751708984375 0.415404498577117919921875 -0.2704105079174041748046875 +-0.0656850993633270319183026231258 -0.0325527995824813828895649692186 -0.0680131018161773681640625 +-0.0656850993633270319183026231258 0.0325527995824813828895649692186 -0.0680131018161773681640625 +-0.0656839504837989779373330634371 0 -0.947726643085479714123664507497 +-0.0656310021877288818359375 -0.2354042530059814453125 0.0527010001242160797119140625 +-0.0656310021877288818359375 0.2354042530059814453125 0.0527010001242160797119140625 +-0.0656005978584289634047976846887 -0.0725297987461090143401776231258 -0.020880199968814849853515625 +-0.0656005978584289634047976846887 0.0725297987461090143401776231258 -0.020880199968814849853515625 +-0.0655993998050689725021200615629 -0.157141995429992686883480246252 0.104895997047424319181807561563 +-0.0655993998050689725021200615629 0.157141995429992686883480246252 0.104895997047424319181807561563 +-0.065593801438808441162109375 -0.331469392776489235608039507497 -0.495808196067810014184829014994 +-0.065593801438808441162109375 0.331469392776489235608039507497 -0.495808196067810014184829014994 +-0.06557320058345794677734375 -0.276558107137680031506477007497 -0.204244244098663318975894753748 +-0.06557320058345794677734375 0.276558107137680031506477007497 -0.204244244098663318975894753748 +-0.0655312478542327825348223768742 -0.106344902515411371402009876874 -0.0830446511507034329513388115629 +-0.0655312478542327825348223768742 0.106344902515411371402009876874 -0.0830446511507034329513388115629 +-0.0655285522341728238204794365629 -0.0843430481851100977142010606258 0.4371407926082611083984375 +-0.0655285522341728238204794365629 0.0843430481851100977142010606258 0.4371407926082611083984375 +-0.0655110508203506497482138115629 -0.435954737663269087377670985006 -0.32886426150798797607421875 +-0.0655110508203506497482138115629 0.435954737663269087377670985006 -0.32886426150798797607421875 +-0.0654447019100189153473223768742 -0.280538696050643909796207253748 0.0837558031082153292556924384371 +-0.0654447019100189153473223768742 0.280538696050643909796207253748 0.0837558031082153292556924384371 +-0.0653890013694763266860476846887 -0.0970404028892517117599325615629 0.162195599079132085629240123126 +-0.0653890013694763266860476846887 0.0970404028892517117599325615629 0.162195599079132085629240123126 +-0.0653571009635925265213174384371 -0.0398274019360542255729917826557 -0.129004803299903852975560880623 +-0.0653571009635925265213174384371 0.0398274019360542255729917826557 -0.129004803299903852975560880623 +-0.0653271481394767788986044365629 -0.338325041532516468389957253748 -0.0613875500857829978218482835928 +-0.0653271481394767788986044365629 0.338325041532516468389957253748 -0.0613875500857829978218482835928 +-0.0652716033160686548431073106258 -0.891395097970962502209602007497 -0.105614997446537017822265625 +-0.0652716033160686548431073106258 0.891395097970962502209602007497 -0.105614997446537017822265625 +-0.0652638018131256186782351846887 -0.0474164009094238322883363423443 0.183009004592895513363615123126 +-0.0652638018131256186782351846887 0.0474164009094238322883363423443 0.183009004592895513363615123126 +-0.0652281001210212735275106865629 -0.0350161492824554443359375 0.1304575502872467041015625 +-0.0652281001210212735275106865629 0.0350161492824554443359375 0.1304575502872467041015625 +-0.0652070526033639852325762831242 -0.405773513019084930419921875 -0.856501939892768793249899772491 +-0.0652070526033639852325762831242 0.405773513019084930419921875 -0.856501939892768793249899772491 +-0.0651842974126339014251385606258 -0.361354950070381153448551003748 0.260141846537590037957698996252 +-0.0651842974126339014251385606258 0.361354950070381153448551003748 0.260141846537590037957698996252 +-0.0651369988918304443359375 -0.114227199554443367701672684689 -0.150696194171905523129240123126 +-0.0651369988918304443359375 0.114227199554443367701672684689 -0.150696194171905523129240123126 +-0.0650452516973018673995809990629 -0.414863088726997397692741742503 -0.161733596026897435971036998126 +-0.0650452516973018673995809990629 0.414863088726997397692741742503 -0.161733596026897435971036998126 +-0.0650111988186836270431356865629 -0.587117993831634543688835492503 -0.105193796753883364591963811563 +-0.0650111988186836270431356865629 0.587117993831634543688835492503 -0.105193796753883364591963811563 +-0.0649943970143795068938885606258 -0.588142776489257834704460492503 -0.678132873773574895714943977509 +-0.0649943970143795068938885606258 0.588142776489257834704460492503 -0.678132873773574895714943977509 +-0.0649824023246765164474325615629 -0.199997997283935552426115123126 -0.340261602401733420641960492503 +-0.0649824023246765164474325615629 0.199997997283935552426115123126 -0.340261602401733420641960492503 +-0.064945399761199951171875 -0.157286000251770030633480246252 -0.105086600780487066097990123126 +-0.064945399761199951171875 0.157286000251770030633480246252 -0.105086600780487066097990123126 +-0.0649448990821838434417401231258 -0.0760405004024505698501101846887 0 +-0.0649448990821838434417401231258 0.0760405004024505698501101846887 0 +-0.0649340994656085884750851278113 -0.246562740206718422619758257497 0.239771342277526833264289507497 +-0.0649340994656085884750851278113 0.246562740206718422619758257497 0.239771342277526833264289507497 +-0.0649204473942518178741778456242 -0.693793776631355219031149772491 0.486761024594306923596320757497 +-0.0649204473942518178741778456242 0.693793776631355219031149772491 0.486761024594306923596320757497 +-0.0648847483098506927490234375 -0.785657545924186684338508257497 -0.317855806648731198382762386245 +-0.0648847483098506927490234375 0.785657545924186684338508257497 -0.317855806648731198382762386245 +-0.06483455002307891845703125 -0.273039242625236544537159488755 0.473018136620521556512386496252 +-0.06483455002307891845703125 0.273039242625236544537159488755 0.473018136620521556512386496252 +-0.0647593975067138755141726846887 -0.0551853001117706340461488423443 0.0525433003902435330489950615629 +-0.0647593975067138755141726846887 0.0551853001117706340461488423443 0.0525433003902435330489950615629 +-0.0647514022886753054519815009371 -0.199287901818752305471704744377 -0.398235592246055591925113503748 +-0.0647514022886753054519815009371 0.199287901818752305471704744377 -0.398235592246055591925113503748 +-0.0646474532783031519134198106258 -0.432872110605239890368522992503 -0.104605199396610268336438309689 +-0.0646474532783031519134198106258 0.432872110605239890368522992503 -0.104605199396610268336438309689 +-0.0645932018756866510589276231258 -0.0605738997459411634971537807814 -0.0464599013328552273849325615629 +-0.0645932018756866510589276231258 0.0605738997459411634971537807814 -0.0464599013328552273849325615629 +-0.0645901978015899630447549384371 -0.0554736971855163615852113423443 -0.0524478018283844049651776231258 +-0.0645901978015899630447549384371 0.0554736971855163615852113423443 -0.0524478018283844049651776231258 +-0.0645785033702850341796875 -0.421953499317169189453125 0.2603555023670196533203125 +-0.0645785033702850341796875 0.421953499317169189453125 0.2603555023670196533203125 +-0.0645446002483367892166299384371 -0.0700618982315063532073651231258 0.0304190993309021023849325615629 +-0.0645446002483367892166299384371 0.0700618982315063532073651231258 0.0304190993309021023849325615629 +-0.0645017981529235756577023153113 -0.0696315005421638405502804403113 -0.116150701045989984683259876874 +-0.0645017981529235756577023153113 0.0696315005421638405502804403113 -0.116150701045989984683259876874 +-0.0644983485341071999252804403113 -0.913127654790878207080595529987 0.254042340815067269055305132497 +-0.0644983485341071999252804403113 0.913127654790878207080595529987 0.254042340815067269055305132497 +-0.0644904032349586514571981865629 -0.295476758480072043688835492503 -0.333218255639076255114616742503 +-0.0644904032349586514571981865629 0.295476758480072043688835492503 -0.333218255639076255114616742503 +-0.0644219994544982937911825615629 -0.171969401836395280325220369377 -0.0792234003543853815276776231258 +-0.0644219994544982937911825615629 0.171969401836395280325220369377 -0.0792234003543853815276776231258 +-0.0643833026289939852615518134371 -0.389217147231102011950554242503 -0.216483302414417266845703125 +-0.0643833026289939852615518134371 0.389217147231102011950554242503 -0.216483302414417266845703125 +-0.0643827974796295221526776231258 -0.0133255004882812510408340855861 -0.0753476977348327692229901231258 +-0.0643827974796295221526776231258 0.0133255004882812510408340855861 -0.0753476977348327692229901231258 +-0.06437610089778900146484375 -0.133338001370429976022435880623 -0.260915100574493408203125 +-0.06437610089778900146484375 0.133338001370429976022435880623 -0.260915100574493408203125 +-0.064203001558780670166015625 -0.2304797470569610595703125 -0.072505749762058258056640625 +-0.064203001558780670166015625 0.2304797470569610595703125 -0.072505749762058258056640625 +-0.0641767024993896428863848768742 -0.540799009799957208777243522491 0.439792484045028631012286268742 +-0.0641767024993896428863848768742 0.540799009799957208777243522491 0.439792484045028631012286268742 +-0.0641636013984680231292401231258 -0.0265581995248794569541850307814 -0.187557196617126470394865123126 +-0.0641636013984680231292401231258 0.0265581995248794569541850307814 -0.187557196617126470394865123126 +-0.0641631007194519015213174384371 -0.0653495013713836642166299384371 -0.04015649855136871337890625 +-0.0641631007194519015213174384371 0.0653495013713836642166299384371 -0.04015649855136871337890625 +-0.0641158506274223244369991903113 -0.0100063495337963104248046875 -0.135236853361129755191072376874 +-0.0641158506274223244369991903113 0.0100063495337963104248046875 -0.135236853361129755191072376874 +-0.0641027987003326416015625 -0.144634401798248296566740123126 0.36738479137420654296875 +-0.0641027987003326416015625 0.144634401798248296566740123126 0.36738479137420654296875 +-0.0640841007232666043380575615629 -0.0758651018142700306334802462516 0.011734999716281890869140625 +-0.0640841007232666043380575615629 0.0758651018142700306334802462516 0.011734999716281890869140625 +-0.0640564024448394830901776231258 -0.0301254004240036031558869211722 0.0706345021724700955489950615629 +-0.0640564024448394830901776231258 0.0301254004240036031558869211722 0.0706345021724700955489950615629 +-0.0640559501945972414871377509371 -0.336228907108306884765625 0.0731230489909648895263671875 +-0.0640559501945972414871377509371 0.336228907108306884765625 0.0731230489909648895263671875 +-0.0639876008033752469161825615629 -0.0263951987028121955181081403907 -0.39396560192108154296875 +-0.0639876008033752469161825615629 0.0263951987028121955181081403907 -0.39396560192108154296875 +-0.0639732018113136208237179403113 -0.435175788402557384149105246252 0.408079791069030750616519753748 +-0.0639732018113136208237179403113 0.435175788402557384149105246252 0.408079791069030750616519753748 +-0.0639455020427703857421875 -0.735987776517868064196647992503 -0.420396395027637481689453125 +-0.0639455020427703857421875 0.735987776517868064196647992503 -0.420396395027637481689453125 +-0.0639432013034820501129473768742 -0.196800291538238525390625 -0.217211705446243269479467130623 +-0.0639432013034820501129473768742 0.196800291538238525390625 -0.217211705446243269479467130623 +-0.0639187991619110107421875 -0.30317199230194091796875 0.25298440456390380859375 +-0.0639187991619110107421875 0.30317199230194091796875 0.25298440456390380859375 +-0.0638217017054557717026241903113 -0.10012485086917877197265625 -0.0916613996028900063217648153113 +-0.0638217017054557717026241903113 0.10012485086917877197265625 -0.0916613996028900063217648153113 +-0.0638194978237152099609375 -0.0262863993644714376285431711722 -0.0723608970642089927016726846887 +-0.0638194978237152099609375 0.0262863993644714376285431711722 -0.0723608970642089927016726846887 +-0.0638051986694335993011151231258 0 -0.0769993007183075034438601846887 +-0.0637984514236450139801348768742 -0.0463516518473625141472105326557 0.127598100900650018862947376874 +-0.0637984514236450139801348768742 0.0463516518473625141472105326557 0.127598100900650018862947376874 +-0.0637797486037015859405840956242 -0.534060937166213944848891514994 0.658187305927276589123664507497 +-0.0637797486037015859405840956242 0.534060937166213944848891514994 0.658187305927276589123664507497 +-0.0637417495250701821030148153113 -0.124621653556823724917634876874 -0.0539111986756324740310830634371 +-0.0637417495250701821030148153113 0.124621653556823724917634876874 -0.0539111986756324740310830634371 +-0.063716702163219451904296875 -0.119928896427154541015625 0.267501908540725696905582253748 +-0.063716702163219451904296875 0.119928896427154541015625 0.267501908540725696905582253748 +-0.0637147009372711209396200615629 -0.0757934987545013511001101846887 -0.0139920994639396670949915701954 +-0.0637147009372711209396200615629 0.0757934987545013511001101846887 -0.0139920994639396670949915701954 +-0.0637110497802495928665322821871 -0.57384145259857177734375 0.298574258387088786736995871252 +-0.0637110497802495928665322821871 0.57384145259857177734375 0.298574258387088786736995871252 +-0.0636869966983795166015625 -0.1960130035877227783203125 -0.97853100299835205078125 +-0.0636869966983795166015625 0.1960130035877227783203125 -0.97853100299835205078125 +-0.06367574632167816162109375 -0.066844247281551361083984375 0.2323299944400787353515625 +-0.06367574632167816162109375 0.066844247281551361083984375 0.2323299944400787353515625 +-0.0636702477931976318359375 -0.19596000015735626220703125 -0.14158324897289276123046875 +-0.0636702477931976318359375 0.19596000015735626220703125 -0.14158324897289276123046875 +-0.0636328518390655434311398153113 -0.0830049008131027166168536268742 0.107522401213645937834151311563 +-0.0636328518390655434311398153113 0.0830049008131027166168536268742 0.107522401213645937834151311563 +-0.0636156007647514371017294365629 -0.274512898921966563836605246252 -0.1029354035854339599609375 +-0.0636156007647514371017294365629 0.274512898921966563836605246252 -0.1029354035854339599609375 +-0.0635958015918731689453125 -0.235767906904220558850227007497 0.174266999959945684262052623126 +-0.0635958015918731689453125 0.235767906904220558850227007497 0.174266999959945684262052623126 +-0.0635232485830783816238565009371 -0.103600001335144034642077315311 0.32822544872760772705078125 +-0.0635232485830783816238565009371 0.103600001335144034642077315311 0.32822544872760772705078125 +-0.0634959995746612604339276231258 -0.281591200828552268298210492503 -0.276902008056640613897769753748 +-0.0634959995746612604339276231258 0.281591200828552268298210492503 -0.276902008056640613897769753748 +-0.0634860008955001747787960653113 -0.121824896335601798313952315311 0.060234747827053070068359375 +-0.0634860008955001747787960653113 0.121824896335601798313952315311 0.060234747827053070068359375 +-0.0634417004883289364913778740629 -0.103187702596187591552734375 0.6894398033618927001953125 +-0.0634417004883289364913778740629 0.103187702596187591552734375 0.6894398033618927001953125 +-0.0634224504232406560699786268742 -0.046078898012638092041015625 -0.341107544302940324243422764994 +-0.0634224504232406560699786268742 0.046078898012638092041015625 -0.341107544302940324243422764994 +-0.0634116023778915349762286268742 -0.0460712000727653489540180942186 -0.695597696304321222449118522491 +-0.0634116023778915349762286268742 0.0460712000727653489540180942186 -0.695597696304321222449118522491 +-0.0633897483348846435546875 -0.14112700521945953369140625 -0.19637949764728546142578125 +-0.0633897483348846435546875 0.14112700521945953369140625 -0.19637949764728546142578125 +-0.0633500993251800564864950615629 -0.0460260003805160536338725307814 0.0621962010860443170745526231258 +-0.0633500993251800564864950615629 0.0460260003805160536338725307814 0.0621962010860443170745526231258 +-0.0633436024188995389083700615629 -0.0511201977729797418792401231258 -0.05808889865875244140625 +-0.0633436024188995389083700615629 0.0511201977729797418792401231258 -0.05808889865875244140625 +-0.06334149837493896484375 -0.12834225594997406005859375 0.2049782574176788330078125 +-0.06334149837493896484375 0.12834225594997406005859375 0.2049782574176788330078125 +-0.063335001468658447265625 -0.30286848545074462890625 -0.3927589952945709228515625 +-0.063335001468658447265625 0.30286848545074462890625 -0.3927589952945709228515625 +-0.06333149783313274383544921875 -0.1949167549610137939453125 -0.7214542329311370849609375 +-0.06333149783313274383544921875 0.1949167549610137939453125 -0.7214542329311370849609375 +-0.0633113026618957602797976846887 -0.0697035014629363985916299384371 -0.03366149961948394775390625 +-0.0633113026618957602797976846887 0.0697035014629363985916299384371 -0.03366149961948394775390625 +-0.063274003565311431884765625 -0.830354988574981689453125 -0.553631007671356201171875 +-0.063274003565311431884765625 0.830354988574981689453125 -0.553631007671356201171875 +-0.0632457971572876059829226846887 -0.141420197486877452508480246252 0.126492202281951904296875 +-0.0632457971572876059829226846887 0.141420197486877452508480246252 0.126492202281951904296875 +-0.0631529986858367919921875 -0.44825398921966552734375 0.891673028469085693359375 +-0.0631529986858367919921875 0.44825398921966552734375 0.891673028469085693359375 +-0.0631278984248638264098474337516 -0.545406410098075888903679242503 -0.0323553999885916737655477959379 +-0.0631278984248638264098474337516 0.545406410098075888903679242503 -0.0323553999885916737655477959379 +-0.0630843512713909065903195028113 -0.194157251715660089663728626874 -0.284294140338897660669204014994 +-0.0630843512713909065903195028113 0.194157251715660089663728626874 -0.284294140338897660669204014994 +-0.063070200383663177490234375 -0.257953798770904518811164507497 -0.13957799971103668212890625 +-0.063070200383663177490234375 0.257953798770904518811164507497 -0.13957799971103668212890625 +-0.0630263999104499761383380018742 -0.193971598148345941714509876874 0.220006191730499262027009876874 +-0.0630263999104499761383380018742 0.193971598148345941714509876874 0.220006191730499262027009876874 +-0.0629878520965576199630575615629 -0.135725846886634832211271373126 0.01053749956190586090087890625 +-0.0629878520965576199630575615629 0.135725846886634832211271373126 0.01053749956190586090087890625 +-0.0629648968577384976486044365629 -0.8889192044734954833984375 0.125928895175456995181306751874 +-0.0629648968577384976486044365629 0.8889192044734954833984375 0.125928895175456995181306751874 +-0.0629517517983913393875283759371 -0.8704299032688140869140625 0.375352613627910614013671875 +-0.0629517517983913393875283759371 0.8704299032688140869140625 0.375352613627910614013671875 +-0.0629293486475944463531817518742 -0.135874798893928533383146373126 -0.00882885027676820650921474253892 +-0.0629293486475944463531817518742 0.135874798893928533383146373126 -0.00882885027676820650921474253892 +-0.06291724741458892822265625 -0.0331420004367828369140625 -0.2396727502346038818359375 +-0.06291724741458892822265625 0.0331420004367828369140625 -0.2396727502346038818359375 +-0.0629136025905609186370526231258 -0.0651054024696350180922976846887 -0.178334403038024918997095369377 +-0.0629136025905609186370526231258 0.0651054024696350180922976846887 -0.178334403038024918997095369377 +-0.0629063475877046640594159043758 -0.366761216521263144763054242503 0.532943469285965032433693977509 +-0.0629063475877046640594159043758 0.366761216521263144763054242503 0.532943469285965032433693977509 +-0.0628751993179321316818075615629 -0.193512600660324080026342130623 -0.564446389675140380859375 +-0.0628751993179321316818075615629 0.193512600660324080026342130623 -0.564446389675140380859375 +-0.062841497361660003662109375 -0.1275880038738250732421875 0.479345500469207763671875 +-0.062841497361660003662109375 0.1275880038738250732421875 0.479345500469207763671875 +-0.06280200183391571044921875 -0.193281608819961536749332253748 0.564533400535583429480368522491 +-0.06280200183391571044921875 0.193281608819961536749332253748 0.564533400535583429480368522491 +-0.0627672016620636069594851846887 -0.797533607482910245067841970013 0 +-0.0627672016620636069594851846887 0.797533607482910245067841970013 0 +-0.0627562999725341796875 -0.0738883972167968805511151231258 0.0245387002825737006450612653907 +-0.0627562999725341796875 0.0738883972167968805511151231258 0.0245387002825737006450612653907 +-0.0626977488398551968673544365629 -0.105784651637077328767411188437 0.0858988523483276283920773153113 +-0.0626977488398551968673544365629 0.105784651637077328767411188437 0.0858988523483276283920773153113 +-0.06265725195407867431640625 -0.2262092530727386474609375 0.086043752729892730712890625 +-0.06265725195407867431640625 0.2262092530727386474609375 0.086043752729892730712890625 +-0.062640599906444549560546875 -0.583421409130096435546875 0.125281798839569080694644753748 +-0.062640599906444549560546875 0.583421409130096435546875 0.125281798839569080694644753748 +-0.0625759497284889137924679403113 -0.133761298656463606393529630623 -0.0263089500367641448974609375 +-0.0625759497284889137924679403113 0.133761298656463606393529630623 -0.0263089500367641448974609375 +-0.0625739991664886474609375 -0.39507520198822021484375 0 +-0.0625739991664886474609375 -0.149876797199249262027009876874 -0.116710996627807622738615123126 +-0.0625739991664886474609375 0.149876797199249262027009876874 -0.116710996627807622738615123126 +-0.0625739991664886474609375 0.39507520198822021484375 0 +-0.0625316977500915555099325615629 -0.00413010008633136766614812884768 0.0779277980327606201171875 +-0.0625316977500915555099325615629 0.00413010008633136766614812884768 0.0779277980327606201171875 +-0.0625235974788665854751101846887 -0.0454259008169174208213725307814 -0.0634609997272491538344851846887 +-0.0625235974788665854751101846887 0.0454259008169174208213725307814 -0.0634609997272491538344851846887 +-0.0624896988272666889518980326557 -0.132713851332664473092748380623 0.0313384495675563812255859375 +-0.0624896988272666889518980326557 0.132713851332664473092748380623 0.0313384495675563812255859375 +-0.0624701000750064877609091240629 -0.545075306296348593981804242503 0.0386088997125625665862713731258 +-0.0624701000750064877609091240629 0.545075306296348593981804242503 0.0386088997125625665862713731258 +-0.0624653980135917649696430942186 -0.449658608436584450451789507497 -0.392308187484741222039730246252 +-0.0624653980135917649696430942186 0.449658608436584450451789507497 -0.392308187484741222039730246252 +-0.0624261975288391141036825615629 -0.165428602695465110095085492503 0.0934686005115509116469851846887 +-0.0624261975288391141036825615629 0.165428602695465110095085492503 0.0934686005115509116469851846887 +-0.0624146997928619398643412807814 -0.0615637004375457763671875 0.0481072992086410550216513115629 +-0.0624146997928619398643412807814 0.0615637004375457763671875 0.0481072992086410550216513115629 +-0.0623990520834922721138404710928 -0.329259705543518021997329014994 -0.100967295467853546142578125 +-0.0623990520834922721138404710928 0.329259705543518021997329014994 -0.100967295467853546142578125 +-0.0623891498893499388267436245314 -0.821646529436111383581931022491 -0.208578952401876432931615568123 +-0.0623891498893499388267436245314 0.821646529436111383581931022491 -0.208578952401876432931615568123 +-0.0623524993658065782020649692186 -0.312523758411407448498664507497 -0.144709952175617218017578125 +-0.0623524993658065782020649692186 0.312523758411407448498664507497 -0.144709952175617218017578125 +-0.062320001423358917236328125 -0.19180500507354736328125 -0.45752251148223876953125 +-0.062320001423358917236328125 0.19180500507354736328125 -0.45752251148223876953125 +-0.0622943982481956523566957173443 -0.19171799719333648681640625 0.877133685350418135229233485006 +-0.0622943982481956523566957173443 0.19171799719333648681640625 0.877133685350418135229233485006 +-0.0622269004583358778526225307814 0 -0.897846293449401922082131477509 +-0.0621895506978034987022319057814 -0.42797474563121795654296875 0.124378645420074471217297684689 +-0.0621895506978034987022319057814 0.42797474563121795654296875 0.124378645420074471217297684689 +-0.0621886521577835124641175923443 -0.191393543779850017205745871252 0.40249349176883697509765625 +-0.0621886521577835124641175923443 0.191393543779850017205745871252 0.40249349176883697509765625 +-0.06216674856841564178466796875 -0.29004375636577606201171875 0.68884648382663726806640625 +-0.06216674856841564178466796875 0.29004375636577606201171875 0.68884648382663726806640625 +-0.0621335983276367215255575615629 -0.1050631999969482421875 -0.3809216022491455078125 +-0.0621335983276367215255575615629 0.1050631999969482421875 -0.3809216022491455078125 +-0.0620783999562263474891743442186 0 -0.445697548985481251104801003748 +-0.0620742976665496840049662807814 -0.0122798003256320963777481480861 0.0774336993694305503188601846887 +-0.0620742976665496840049662807814 0.0122798003256320963777481480861 0.0774336993694305503188601846887 +-0.0620469987392425550987162807814 -0.0368512988090515178352113423443 0.0692254006862640380859375 +-0.0620469987392425550987162807814 0.0368512988090515178352113423443 0.0692254006862640380859375 +-0.0619941018521785666695045335928 -0.491613513231277443615852007497 -0.494442182779312122686832253748 +-0.0619941018521785666695045335928 0.491613513231277443615852007497 -0.494442182779312122686832253748 +-0.0619897007942199762542401231258 -0.0737711012363433810135049384371 -0.0267412990331649808029013115629 +-0.0619897007942199762542401231258 0.0737711012363433810135049384371 -0.0267412990331649808029013115629 +-0.0619753494858741732498330634371 -0.0574017003178596482704243442186 0.123952049016952503546207253748 +-0.0619753494858741732498330634371 0.0574017003178596482704243442186 0.123952049016952503546207253748 +-0.0618305996060371371170205634371 0 -0.293559300899505604132144753748 +-0.061803400516510009765625 -0.190211200714111350329460492503 0 +-0.061803400516510009765625 0.190211200714111350329460492503 0 +-0.0617751024663448361495809990629 -0.38441701233386993408203125 -0.811422890424728371350227007497 +-0.0617751024663448361495809990629 0.38441701233386993408203125 -0.811422890424728371350227007497 +-0.0617296501994132953972105326557 -0.093343198299407958984375 -0.0998824506998062106033486884371 +-0.0617296501994132953972105326557 0.093343198299407958984375 -0.0998824506998062106033486884371 +-0.0617265999317169189453125 -0.103850805759429939967297684689 -0.159388995170593267269865123126 +-0.0617265999317169189453125 0.103850805759429939967297684689 -0.159388995170593267269865123126 +-0.06172239780426025390625 -0.110482394695281982421875 0.154867601394653331414730246252 +-0.06172239780426025390625 0.110482394695281982421875 0.154867601394653331414730246252 +-0.0617050494998693521697674668758 -0.0724608540534973227797976846887 -0.54170270264148712158203125 +-0.0617050494998693521697674668758 0.0724608540534973227797976846887 -0.54170270264148712158203125 +-0.0616454031318426146079936245314 -0.841873148083686850817741742503 -0.0997474975883960723876953125 +-0.0616454031318426146079936245314 0.841873148083686850817741742503 -0.0997474975883960723876953125 +-0.0616100013256073025802450615629 -0.0660880029201507540603799384371 0.0428553998470306424239950615629 +-0.0616100013256073025802450615629 0.0660880029201507540603799384371 0.0428553998470306424239950615629 +-0.0616024971008300795127787807814 -0.0529129028320312541633363423443 0.0583554983139038113693075615629 +-0.0616024971008300795127787807814 0.0529129028320312541633363423443 0.0583554983139038113693075615629 +-0.0615857005119323785979901231258 0 0.546541047096252508019631477509 +-0.0615823984146118205695863423443 -0.242988801002502446957365123126 0.311711597442626997533920985006 +-0.0615823984146118205695863423443 0.242988801002502446957365123126 0.311711597442626997533920985006 +-0.0615787029266357463508363423443 -0.078571498394012451171875 0.005881600081920623779296875 +-0.0615787029266357463508363423443 0.078571498394012451171875 0.005881600081920623779296875 +-0.0615603029727935791015625 -0.0198578998446464552452006557814 -0.0762627005577087430099325615629 +-0.0615603029727935791015625 0.0198578998446464552452006557814 -0.0762627005577087430099325615629 +-0.0615236997604370131065287807814 -0.006670899689197540283203125 -0.0785513997077941922286825615629 +-0.0615236997604370131065287807814 0.006670899689197540283203125 -0.0785513997077941922286825615629 +-0.061503000557422637939453125 -0.08148150146007537841796875 -0.22820650041103363037109375 +-0.061503000557422637939453125 0.08148150146007537841796875 -0.22820650041103363037109375 +-0.0614964008331298772613848768742 -0.561628782749176047595085492503 0.2019689977169036865234375 +-0.0614964008331298772613848768742 0.561628782749176047595085492503 0.2019689977169036865234375 +-0.0614928022027015630524005018742 -0.059940598905086517333984375 -0.122986954450607297029129938437 +-0.0614928022027015630524005018742 0.059940598905086517333984375 -0.122986954450607297029129938437 +-0.0614841498434543567985777201557 -0.189225396513938881604133257497 0.287947094440460182873664507497 +-0.0614841498434543567985777201557 0.189225396513938881604133257497 0.287947094440460182873664507497 +-0.0614754021167755182464276231258 -0.0201185002923011807540731865629 0.0762628018856048583984375 +-0.0614754021167755182464276231258 0.0201185002923011807540731865629 0.0762628018856048583984375 +-0.0614540517330169622223223768742 -0.113701002299785608462556751874 -0.325261992216110185083266514994 +-0.0614540517330169622223223768742 0.113701002299785608462556751874 -0.325261992216110185083266514994 +-0.061435997486114501953125 -0.0785898983478546253600427462516 -0.00701769962906837515420610529304 +-0.061435997486114501953125 0.0785898983478546253600427462516 -0.00701769962906837515420610529304 +-0.0613835971802473082115092495314 -0.555468177795410134045539507497 -0.640458825230598383093649772491 +-0.0613835971802473082115092495314 0.555468177795410134045539507497 -0.640458825230598383093649772491 +-0.0613827519118785927543235914072 -0.0445967480540275587608256557814 0.544741448760032720421975227509 +-0.0613827519118785927543235914072 0.0445967480540275587608256557814 0.544741448760032720421975227509 +-0.0613727986812591594367738423443 -0.188886594772338878289730246252 -0.0235637992620468146587331403907 +-0.0613727986812591594367738423443 0.188886594772338878289730246252 -0.0235637992620468146587331403907 +-0.0613465987145900698562783759371 -0.339994910359382618292301003748 -0.608801901340484619140625 +-0.0613465987145900698562783759371 0.339994910359382618292301003748 -0.608801901340484619140625 +-0.0613188028335571316818075615629 -0.0610414028167724637130575615629 0.180316197872161881887720369377 +-0.0613188028335571316818075615629 0.0610414028167724637130575615629 0.180316197872161881887720369377 +-0.061307251453399658203125 -0.12988065183162689208984375 -0.043271698057651519775390625 +-0.061307251453399658203125 0.12988065183162689208984375 -0.043271698057651519775390625 +-0.0612659990787506117393412807814 -0.0394133001565933269172425923443 -0.0685060024261474609375 +-0.0612659990787506117393412807814 0.0394133001565933269172425923443 -0.0685060024261474609375 +-0.0612119995057582855224609375 -0.85533297061920166015625 0.51445102691650390625 +-0.0612119995057582855224609375 0.85533297061920166015625 0.51445102691650390625 +-0.0612015016376972198486328125 -0.221240997314453125 -0.099029250442981719970703125 +-0.0612015016376972198486328125 0.221240997314453125 -0.099029250442981719970703125 +-0.0611904025077819879729901231258 -0.188323402404785178454460492503 0.0281071990728378323654013115629 +-0.0611904025077819879729901231258 0.188323402404785178454460492503 0.0281071990728378323654013115629 +-0.0611550003290176336090411268742 -0.0595155000686645452301348768742 -0.287607300281524647100894753748 +-0.0611550003290176336090411268742 0.0595155000686645452301348768742 -0.287607300281524647100894753748 +-0.0611036986112594646125550923443 -0.865068304538726851049545985006 0.240671691298484813348323996252 +-0.0611036986112594646125550923443 0.865068304538726851049545985006 0.240671691298484813348323996252 +-0.0611015975475311320930238423443 -0.652982378005981467516960492503 0.458128023147583052221420985006 +-0.0611015975475311320930238423443 0.652982378005981467516960492503 0.458128023147583052221420985006 +-0.061067998409271240234375 -0.739442396163940474096420985006 -0.299158406257629405633480246252 +-0.061067998409271240234375 0.739442396163940474096420985006 -0.299158406257629405633480246252 +-0.0610204517841339069694761576557 -0.0297868497669696793983540317186 -0.133750802278518682308927623126 +-0.0610204517841339069694761576557 0.0297868497669696793983540317186 -0.133750802278518682308927623126 +-0.0609608985483646378944477817186 -0.262423354387283314093082253748 -0.223422858119010914190738503748 +-0.0609608985483646378944477817186 0.262423354387283314093082253748 -0.223422858119010914190738503748 +-0.0609099000692367512077574076557 -0.267300903797149658203125 0.121820104122161862458817438437 +-0.0609099000692367512077574076557 0.267300903797149658203125 0.121820104122161862458817438437 +-0.060745298862457275390625 -0.077183902263641357421875 0.0187791004776954664756694057814 +-0.060745298862457275390625 0.077183902263641357421875 0.0187791004776954664756694057814 +-0.06074009835720062255859375 -0.407623055577278126104801003748 0.180704699456691736392244251874 +-0.06074009835720062255859375 0.407623055577278126104801003748 0.180704699456691736392244251874 +-0.0606963507831096704681073106258 -0.520408335328102156225327235006 -0.167305046319961570056022992503 +-0.0606963507831096704681073106258 0.520408335328102156225327235006 -0.167305046319961570056022992503 +-0.0606883496046066242546324076557 -0.12720389664173126220703125 0.0513430505990982027908486884371 +-0.0606883496046066242546324076557 0.12720389664173126220703125 0.0513430505990982027908486884371 +-0.0605406001210212693641743442186 -0.0686688020825386019607705634371 0.285691201686859130859375 +-0.0605406001210212693641743442186 0.0686688020825386019607705634371 0.285691201686859130859375 +-0.0605053007602691650390625 -0.0702903985977172823806924384371 0.0373946994543075603156800923443 +-0.0605053007602691650390625 0.0702903985977172823806924384371 0.0373946994543075603156800923443 +-0.0605030983686447101921324076557 0 -0.137256601452827448062166126874 +-0.0605026468634605393837055942186 -0.186212353408336639404296875 -0.929604452848434403833266514994 +-0.0605026468634605393837055942186 0.186212353408336639404296875 -0.929604452848434403833266514994 +-0.0604927502572536468505859375 -0.18618075549602508544921875 -0.15549050271511077880859375 +-0.0604927502572536468505859375 0.18618075549602508544921875 -0.15549050271511077880859375 +-0.0604846000671386760383363423443 -0.493238908052444524621193977509 -0.235704699158668540270866742503 +-0.0604846000671386760383363423443 0.493238908052444524621193977509 -0.235704699158668540270866742503 +-0.0604300022125244182258363423443 -0.392593193054199263158920985006 -0.0471031993627548245529013115629 +-0.0604300022125244182258363423443 0.392593193054199263158920985006 -0.0471031993627548245529013115629 +-0.0604252517223358154296875 -0.0928770035505294827560263115629 0.101107200980186454075671065311 +-0.0604252517223358154296875 0.0928770035505294827560263115629 0.101107200980186454075671065311 +-0.0602940022945404052734375 -0.0772575020790100125411825615629 -0.0198973998427391073062775461722 +-0.0602940022945404052734375 0.0772575020790100125411825615629 -0.0198973998427391073062775461722 +-0.060184001922607421875 -0.692694377899169988488381477509 -0.39566719532012939453125 +-0.060184001922607421875 0.692694377899169988488381477509 -0.39566719532012939453125 +-0.0601276513189077446708274976572 -0.303846943378448530737045985006 -0.454490846395492587017628238755 +-0.0601276513189077446708274976572 0.303846943378448530737045985006 -0.454490846395492587017628238755 +-0.0601103033870458575149697821871 -0.78883723914623260498046875 -0.525949457287788413317741742503 +-0.0601103033870458575149697821871 0.78883723914623260498046875 -0.525949457287788413317741742503 +-0.0600646018981933621505575615629 -0.184861004352569580078125 -0.0471029996871948283820863423443 +-0.0600646018981933621505575615629 0.184861004352569580078125 -0.0471029996871948283820863423443 +-0.0600522994995117201377787807814 -0.0606822013854980482627787807814 -0.0520709991455078138877787807814 +-0.0600522994995117201377787807814 0.0606822013854980482627787807814 -0.0520709991455078138877787807814 +-0.0600279986858367961555238423443 -0.502645587921142555920539507497 0.619470405578613325658920985006 +-0.0600279986858367961555238423443 0.502645587921142555920539507497 0.619470405578613325658920985006 +-0.0599953487515449482292417826557 -0.425841289758682239874332253748 0.847089377045631364282485264994 +-0.0599953487515449482292417826557 0.425841289758682239874332253748 0.847089377045631364282485264994 +-0.0599656507372856167892294365629 -0.0883845001459121759612713731258 -0.4371407926082611083984375 +-0.0599656507372856167892294365629 0.0883845001459121759612713731258 -0.4371407926082611083984375 +-0.0599590003490448053558026231258 -0.141793000698089616262720369377 -0.127670204639434820004240123126 +-0.0599590003490448053558026231258 0.141793000698089616262720369377 -0.127670204639434820004240123126 +-0.0599192023277282728721537807814 -0.0270621985197067281558869211722 0.0753480017185211292662927462516 +-0.0599192023277282728721537807814 0.0270621985197067281558869211722 0.0753480017185211292662927462516 +-0.0599003978073596940467915317186 -0.323356950283050503802684261245 0.119800451397895801886051003748 +-0.0599003978073596940467915317186 0.323356950283050503802684261245 0.119800451397895801886051003748 +-0.0598601996898651123046875 -0.248132103681564325503572376874 -0.157629901170730585269197376874 +-0.0598601996898651123046875 0.248132103681564325503572376874 -0.157629901170730585269197376874 +-0.0598210990428924560546875 -0.0656616985797882080078125 -0.0459345012903213528732138115629 +-0.0598210990428924560546875 0.0656616985797882080078125 -0.0459345012903213528732138115629 +-0.0597703501582145663162393134371 -0.0680977508425712613204794365629 0.119541746377944943513504938437 +-0.0597703501582145663162393134371 0.0680977508425712613204794365629 0.119541746377944943513504938437 +-0.0597194015979766873458700615629 -0.0433881998062133830695863423443 0.0674615025520324679275674384371 +-0.0597194015979766873458700615629 0.0433881998062133830695863423443 0.0674615025520324679275674384371 +-0.0597054995596408843994140625 -0.1837512552738189697265625 0.1586527526378631591796875 +-0.0597054995596408843994140625 0.1837512552738189697265625 0.1586527526378631591796875 +-0.0596385017037391676475444057814 -0.824617803096771240234375 0.35559721291065216064453125 +-0.0596385017037391676475444057814 0.824617803096771240234375 0.35559721291065216064453125 +-0.0596085011959075969367738423443 -0.03323400020599365234375 -0.0730912983417510986328125 +-0.0596085011959075969367738423443 0.03323400020599365234375 -0.0730912983417510986328125 +-0.0595935989171266569663920620314 -0.538191494345665044640725227509 -0.0964276470243930899917117471887 +-0.0595935989171266569663920620314 0.538191494345665044640725227509 -0.0964276470243930899917117471887 +-0.0595926523208618191818075615629 -0.502170509099960304943977007497 0.40837873518466949462890625 +-0.0595926523208618191818075615629 0.502170509099960304943977007497 0.40837873518466949462890625 +-0.0595610022544860867599325615629 -0.0133131995797157298005997105861 -0.190460598468780523129240123126 +-0.0595610022544860867599325615629 0.0133131995797157298005997105861 -0.190460598468780523129240123126 +-0.0595555007457733154296875 -0.3963224887847900390625 -0.2989675104618072509765625 +-0.0595555007457733154296875 0.3963224887847900390625 -0.2989675104618072509765625 +-0.0595027983188629178146200615629 -0.39154040813446044921875 0.0561728000640869182258363423443 +-0.0595027983188629178146200615629 0.39154040813446044921875 0.0561728000640869182258363423443 +-0.0594668470323085757156533759371 -0.83953480422496795654296875 0.118932845443487159031725752811 +-0.0594668470323085757156533759371 0.83953480422496795654296875 0.118932845443487159031725752811 +-0.0594658970832824748664613423443 -0.0594889998435974148849325615629 0.0540821015834808405120526231258 +-0.0594658970832824748664613423443 0.0594889998435974148849325615629 0.0540821015834808405120526231258 +-0.0593451015651226057578959682814 -0.301322686672210682257144753748 0.328911298513412497790397992503 +-0.0593451015651226057578959682814 0.301322686672210682257144753748 0.328911298513412497790397992503 +-0.0593295991420745849609375 -0.182596194744110124075220369377 0.05602359771728515625 +-0.0593295991420745849609375 0.182596194744110124075220369377 0.05602359771728515625 +-0.0592789515852928106109942518742 -0.0861681014299392616928585653113 -0.107522401213645937834151311563 +-0.0592789515852928106109942518742 0.0861681014299392616928585653113 -0.107522401213645937834151311563 +-0.0592159986495971735198651231258 -0.0702307999134063748458700615629 -0.0395107001066207913497763115629 +-0.0592159986495971735198651231258 0.0702307999134063748458700615629 -0.0395107001066207913497763115629 +-0.0591494992375373798698667826557 -0.182046300172805791683927623126 -0.230999100208282459600894753748 +-0.0591494992375373798698667826557 0.182046300172805791683927623126 -0.230999100208282459600894753748 +-0.059135399758815765380859375 -0.373864048719406150134147992503 -0.243369457125663768426448996252 +-0.059135399758815765380859375 0.373864048719406150134147992503 -0.243369457125663768426448996252 +-0.0591093979775905581375283759371 -0.181922304630279529913394753748 -0.673357284069061257092414507497 +-0.0591093979775905581375283759371 0.181922304630279529913394753748 -0.673357284069061257092414507497 +-0.0590682514011859893798828125 -0.1278002560138702392578125 -0.2065867483615875244140625 +-0.0590682514011859893798828125 0.1278002560138702392578125 -0.2065867483615875244140625 +-0.05901195108890533447265625 -0.00610110014677047677450483220696 0.13776929676532745361328125 +-0.05901195108890533447265625 0.00610110014677047677450483220696 0.13776929676532745361328125 +-0.0589449003338813753982705634371 -0.248532593250274658203125 0.157343995571136457956029630623 +-0.0589449003338813753982705634371 0.248532593250274658203125 0.157343995571136457956029630623 +-0.0589405000209808349609375 -0.2482174932956695556640625 0.4300164878368377685546875 +-0.0589405000209808349609375 0.2482174932956695556640625 0.4300164878368377685546875 +-0.05893050134181976318359375 -0.141273298859596246890291126874 0.258009892702102672235042746252 +-0.05893050134181976318359375 0.141273298859596246890291126874 0.258009892702102672235042746252 +-0.0589215993881225599815287807814 -0.0133070006966590891755997105861 -0.0796941995620727566818075615629 +-0.0589215993881225599815287807814 0.0133070006966590891755997105861 -0.0796941995620727566818075615629 +-0.0589197993278503459602113423443 -0.0743493020534515408614950615629 0.031632900238037109375 +-0.0589197993278503459602113423443 0.0743493020534515408614950615629 0.031632900238037109375 +-0.0589184999465942396690287807814 -0.0564509987831115778167401231258 -0.0578091979026794447471537807814 +-0.0589184999465942396690287807814 0.0564509987831115778167401231258 -0.0578091979026794447471537807814 +-0.0589101504534482942054829379686 -0.0958171524107456207275390625 0.64019410312175750732421875 +-0.0589101504534482942054829379686 0.0958171524107456207275390625 0.64019410312175750732421875 +-0.0588952481746673542351011576557 -0.117576000094413754548661188437 -0.0721609488129615755935830634371 +-0.0588952481746673542351011576557 0.117576000094413754548661188437 -0.0721609488129615755935830634371 +-0.0588822022080421475509481865629 -0.0427804000675678294807191548443 -0.645912146568298317639289507497 +-0.0588822022080421475509481865629 0.0427804000675678294807191548443 -0.645912146568298317639289507497 +-0.0588738024234771728515625 -0.052829802036285400390625 -0.183692395687103271484375 +-0.0588738024234771728515625 0.052829802036285400390625 -0.183692395687103271484375 +-0.0588713981211185441444477817186 -0.0142243495211005193529230083982 0.34471990168094635009765625 +-0.0588713981211185441444477817186 0.0142243495211005193529230083982 0.34471990168094635009765625 +-0.05884425155818462371826171875 -0.747687757015228271484375 0 +-0.05884425155818462371826171875 0.747687757015228271484375 0 +-0.0588335983455181080192808451557 -0.181066997349262237548828125 0.828404036164283708032485264994 +-0.0588335983455181080192808451557 0.181066997349262237548828125 0.828404036164283708032485264994 +-0.0588101997971534687370542826557 -0.529699802398681640625 0.275607007741928089483707253748 +-0.0588101997971534687370542826557 0.529699802398681640625 0.275607007741928089483707253748 +-0.0587786018848419217208700615629 -0.0809017002582550076583700615629 0 +-0.0587786018848419217208700615629 0.0809017002582550076583700615629 0 +-0.0587698504328727708290180942186 0 -0.847965943813323907995993522491 +-0.0587332516908645602127236884371 -0.11379705369472503662109375 0.0781066507101058904449786268742 +-0.0587332516908645602127236884371 0.11379705369472503662109375 0.0781066507101058904449786268742 +-0.0587191998958587688117738423443 -0.773314380645751975329460492503 -0.196309602260589605160490123126 +-0.0587191998958587688117738423443 0.773314380645751975329460492503 -0.196309602260589605160490123126 +-0.058658100664615631103515625 -0.115770596265792835577457253748 -0.270474296808242808953792746252 +-0.058658100664615631103515625 0.115770596265792835577457253748 -0.270474296808242808953792746252 +-0.0586421016603708294967489678129 -0.398911139369010958599659488755 0.374073141813278220446647992503 +-0.0586421016603708294967489678129 0.398911139369010958599659488755 0.374073141813278220446647992503 +-0.0585904508829116765777911268742 -0.0178613997995853424072265625 0.136923748254775989874332253748 +-0.0585904508829116765777911268742 0.0178613997995853424072265625 0.136923748254775989874332253748 +-0.05848824977874755859375 -0.083671502768993377685546875 0.22820650041103363037109375 +-0.05848824977874755859375 0.083671502768993377685546875 0.22820650041103363037109375 +-0.058417998254299163818359375 -0.2131589949131011962890625 0.116835750639438629150390625 +-0.058417998254299163818359375 0.2131589949131011962890625 0.116835750639438629150390625 +-0.0583917975425720242599325615629 -0.0801503002643585288344851846887 0.0128971993923187259328821951954 +-0.0583917975425720242599325615629 0.0801503002643585288344851846887 0.0128971993923187259328821951954 +-0.0583615005016326904296875 -0.2430925071239471435546875 0 +-0.0583615005016326904296875 0.2430925071239471435546875 0 +-0.0583586506545543601265357835928 -0.0423996999859809833854917826557 0.342485851049423195568977007497 +-0.0583586506545543601265357835928 0.0423996999859809833854917826557 0.342485851049423195568977007497 +-0.0583431523293256731887979071871 -0.363060511648654937744140625 -0.766343840956687949450554242503 +-0.0583431523293256731887979071871 0.363060511648654937744140625 -0.766343840956687949450554242503 +-0.0583287000656127971320863423443 0 -0.0812265992164611927428552462516 +-0.0582851499319076496452574076557 -0.304402348399162248071547764994 0.162609998881816847360326505623 +-0.0582851499319076496452574076557 0.304402348399162248071547764994 0.162609998881816847360326505623 +-0.0582476019859314020354901231258 -0.0749715983867645235916299384371 0.3885695934295654296875 +-0.0582476019859314020354901231258 0.0749715983867645235916299384371 0.3885695934295654296875 +-0.0581834971904754694183026231258 -0.0803016006946563748458700615629 -0.0128971993923187259328821951954 +-0.0581834971904754694183026231258 0.0803016006946563748458700615629 -0.0128971993923187259328821951954 +-0.0581624984741210965255575615629 -0.0504203021526336697677450615629 0.0638350009918212946136151231258 +-0.0581624984741210965255575615629 0.0504203021526336697677450615629 0.0638350009918212946136151231258 +-0.0581513995304703684707803290621 -0.812566322088241532739516514994 0.488728475570678666528579014994 +-0.0581513995304703684707803290621 0.812566322088241532739516514994 0.488728475570678666528579014994 +-0.0581290014088153839111328125 -0.1454865038394927978515625 0.194819748401641845703125 +-0.0581290014088153839111328125 0.1454865038394927978515625 0.194819748401641845703125 +-0.05812065303325653076171875 -0.3797581493854522705078125 0.234319952130317699090511496252 +-0.05812065303325653076171875 0.3797581493854522705078125 0.234319952130317699090511496252 +-0.0580893993377685560752787807814 -0.0745337009429931640625 -0.03271619975566864013671875 +-0.0580893993377685560752787807814 0.0745337009429931640625 -0.03271619975566864013671875 +-0.0580887973308563260177450615629 -0.152079999446868896484375 0.116177999973297127467297684689 +-0.0580887973308563260177450615629 0.152079999446868896484375 0.116177999973297127467297684689 +-0.0580745995044708238075337192186 -0.0498508483171462984939736884371 -0.129004803299903852975560880623 +-0.0580745995044708238075337192186 0.0498508483171462984939736884371 -0.129004803299903852975560880623 +-0.0580673977732658330719317518742 -0.338548815250396706311164507497 0.491947817802429188116519753748 +-0.0580673977732658330719317518742 0.338548815250396706311164507497 0.491947817802429188116519753748 +-0.0580251991748809842208700615629 -0.178585195541381858141960492503 -0.06885039806365966796875 +-0.0580251991748809842208700615629 0.178585195541381858141960492503 -0.06885039806365966796875 +-0.0580222986638545962234658759371 -0.270707505941390980108707253748 0.6429233849048614501953125 +-0.0580222986638545962234658759371 0.270707505941390980108707253748 0.6429233849048614501953125 +-0.0580192029476165813117738423443 -0.792351198196411199425881477509 -0.093879997730255126953125 +-0.0580192029476165813117738423443 -0.0339203000068664592414613423443 0.0740485012531280489822549384371 +-0.0580192029476165813117738423443 0.0339203000068664592414613423443 0.0740485012531280489822549384371 +-0.0580192029476165813117738423443 0.792351198196411199425881477509 -0.093879997730255126953125 +-0.0579415977001190227180238423443 -0.321204400062561068462940738755 0.231237196922302268298210492503 +-0.0579415977001190227180238423443 0.321204400062561068462940738755 0.231237196922302268298210492503 +-0.05790840089321136474609375 -0.293827807903289772717414507497 -0.0176577005535364130184294850778 +-0.05790840089321136474609375 0.293827807903289772717414507497 -0.0176577005535364130184294850778 +-0.05789954960346221923828125 -0.0199882507324218756938893903907 -0.136923748254775989874332253748 +-0.05789954960346221923828125 0.0199882507324218756938893903907 -0.136923748254775989874332253748 +-0.0578180015087127741058026231258 -0.368767189979553267065170985006 -0.143763196468353282586605246252 +-0.0578180015087127741058026231258 0.368767189979553267065170985006 -0.143763196468353282586605246252 +-0.0577727973461151164680238423443 -0.522793579101562544408920985006 -0.602784776687622092516960492503 +-0.0577727973461151164680238423443 0.522793579101562544408920985006 -0.602784776687622092516960492503 +-0.05775225162506103515625 -0.0295906506478786461566965471093 0.135237148404121404476896373126 +-0.05775225162506103515625 0.0295906506478786461566965471093 0.135237148404121404476896373126 +-0.0577090486884117084831480326557 -0.817008954286575272973891514994 0.227301041781902302130191628748 +-0.0577090486884117084831480326557 0.817008954286575272973891514994 0.227301041781902302130191628748 +-0.0576392993330955491493305942186 -0.293655592203140247686832253748 0.0210749991238117218017578125 +-0.0576392993330955491493305942186 0.293655592203140247686832253748 0.0210749991238117218017578125 +-0.0576355993747711195518412807814 -0.177386550605297094174161998126 -0.51740919053554534912109375 +-0.0576355993747711195518412807814 0.177386550605297094174161998126 -0.51740919053554534912109375 +-0.0575980007648468073089276231258 -0.0908515989780426108657351846887 -0.168607401847839372122095369377 +-0.0575980007648468073089276231258 0.0908515989780426108657351846887 -0.168607401847839372122095369377 +-0.0575685016810894081840110914072 -0.177174808084964774401726117503 0.517488950490951560290397992503 +-0.0575685016810894081840110914072 0.177174808084964774401726117503 0.517488950490951560290397992503 +-0.05756595171988010406494140625 -0.456498262286186229363948996252 -0.459124884009361300396534488755 +-0.05756595171988010406494140625 0.456498262286186229363948996252 -0.459124884009361300396534488755 +-0.0575568020343780531455912807814 -0.177144801616668706722990123126 -0.353987193107605013775440738755 +-0.0575568020343780531455912807814 0.177144801616668706722990123126 -0.353987193107605013775440738755 +-0.0574810490012168870399555942186 -0.136947298049926752261384876874 0.02100884914398193359375 +-0.0574810490012168870399555942186 0.136947298049926752261384876874 0.02100884914398193359375 +-0.0574775993824005182464276231258 -0.0519254982471466092208700615629 -0.0632461011409759521484375 +-0.0574775993824005182464276231258 0.0519254982471466092208700615629 -0.0632461011409759521484375 +-0.0574644029140472453742738423443 -0.384775209426879927221420985006 -0.0929823994636535672286825615629 +-0.0574644029140472453742738423443 0.384775209426879927221420985006 -0.0929823994636535672286825615629 +-0.0574534490704536396354917826557 -0.137436595559120161569310880623 -0.0176146499812602982948384067186 +-0.0574534490704536396354917826557 0.137436595559120161569310880623 -0.0176146499812602982948384067186 +-0.05743730068206787109375 -0.0265516012907028205181081403907 -0.0774336993694305503188601846887 +-0.05743730068206787109375 0.0265516012907028205181081403907 -0.0774336993694305503188601846887 +-0.0574205499142408440360618726572 -0.53480295836925506591796875 0.114841648936271675807141434689 +-0.0574205499142408440360618726572 0.53480295836925506591796875 0.114841648936271675807141434689 +-0.0574025988578796345085386576557 -0.138581854104995710885717130623 0 +-0.0574025988578796345085386576557 0.138581854104995710885717130623 0 +-0.057388998568058013916015625 -0.4958240091800689697265625 -0.02941399998962879180908203125 +-0.057388998568058013916015625 0.4958240091800689697265625 -0.02941399998962879180908203125 +-0.0573800027370452922492738423443 -0.123846995830535891447432561563 0.146182799339294428042634876874 +-0.0573800027370452922492738423443 0.123846995830535891447432561563 0.146182799339294428042634876874 +-0.0573248028755188043792401231258 -0.262646007537841785772769753748 -0.296194005012512195929019753748 +-0.0573248028755188043792401231258 0.262646007537841785772769753748 -0.296194005012512195929019753748 +-0.0573182970285415691047425923443 -0.17641170322895050048828125 -0.880677902698516867907585492503 +-0.0573182970285415691047425923443 0.17641170322895050048828125 -0.880677902698516867907585492503 +-0.05730240046977996826171875 -0.112407597899436953459151311563 -0.0811231523752212468902911268742 +-0.05730240046977996826171875 0.112407597899436953459151311563 -0.0811231523752212468902911268742 +-0.05728274770081043243408203125 -0.61217097938060760498046875 0.42949502170085906982421875 +-0.05728274770081043243408203125 0.61217097938060760498046875 0.42949502170085906982421875 +-0.0572599481791257886031942803129 -0.412187057733535811010483485006 -0.359615838527679476666065738755 +-0.0572599481791257886031942803129 0.412187057733535811010483485006 -0.359615838527679476666065738755 +-0.0572512485086917877197265625 -0.69322724640369415283203125 -0.280461005866527557373046875 +-0.0572512485086917877197265625 0.69322724640369415283203125 -0.280461005866527557373046875 +-0.0572296023368835463096537807814 -0.345970797538757368627670985006 -0.192429602146148681640625 +-0.0572296023368835463096537807814 0.345970797538757368627670985006 -0.192429602146148681640625 +-0.0571968019008636460731587192186 -0.0783739507198333712478799384371 0.114394345879554742984041126874 +-0.0571968019008636460731587192186 0.0783739507198333712478799384371 0.114394345879554742984041126874 +-0.057170249521732330322265625 -0.24159824848175048828125 -0.0293577499687671661376953125 +-0.057170249521732330322265625 0.24159824848175048828125 -0.0293577499687671661376953125 +-0.0571073994040489155143980326557 -0.1240662038326263427734375 -0.062018550932407379150390625 +-0.0571073994040489155143980326557 0.1240662038326263427734375 -0.062018550932407379150390625 +-0.0570716023445129450042401231258 -0.132567596435546886102230246252 -0.138451004028320306948884876874 +-0.0570716023445129450042401231258 0.132567596435546886102230246252 -0.138451004028320306948884876874 +-0.05705440044403076171875 -0.0743484020233154269119424384371 0.176683604717254638671875 +-0.05705440044403076171875 0.0743484020233154269119424384371 0.176683604717254638671875 +-0.0570267975330352797080912807814 -0.0780201971530914417662927462516 0.0257059007883071906352956403907 +-0.0570267975330352797080912807814 0.0780201971530914417662927462516 0.0257059007883071906352956403907 +-0.0570257492363452911376953125 -0.1755104959011077880859375 -0.1686537563800811767578125 +-0.0570257492363452911376953125 0.1755104959011077880859375 -0.1686537563800811767578125 +-0.0570015013217926025390625 -0.272581636905670166015625 -0.35348309576511383056640625 +-0.0570015013217926025390625 0.272581636905670166015625 -0.35348309576511383056640625 +-0.0569942481815814971923828125 -0.01651049964129924774169921875 -0.2428559958934783935546875 +-0.0569942481815814971923828125 0.01651049964129924774169921875 -0.2428559958934783935546875 +-0.0569911479949951130241636576557 -0.101836046576499930638171065311 0.09424124658107757568359375 +-0.0569911479949951130241636576557 0.101836046576499930638171065311 0.09424124658107757568359375 +-0.0569814026355743435958700615629 -0.0656277000904083307464276231258 0.04945839941501617431640625 +-0.0569814026355743435958700615629 0.0656277000904083307464276231258 0.04945839941501617431640625 +-0.0569646988064050688316264370314 -0.315709559619426760601612613755 -0.5653160512447357177734375 +-0.0569646988064050688316264370314 0.315709559619426760601612613755 -0.5653160512447357177734375 +-0.0569466032087802900840678432814 -0.7473194897174835205078125 -0.498267906904220569952457253748 +-0.0569466032087802900840678432814 0.7473194897174835205078125 -0.498267906904220569952457253748 +-0.05686350166797637939453125 -0.0786159038543701171875 -0.114394345879554742984041126874 +-0.05686350166797637939453125 0.0786159038543701171875 -0.114394345879554742984041126874 +-0.0568596020340919466873330634371 -0.174998247623443597964509876874 -0.297728902101516701428352007497 +-0.0568596020340919466873330634371 0.174998247623443597964509876874 -0.297728902101516701428352007497 +-0.0568468987941741984992738423443 0 0.0822704970836639487563601846887 +-0.0568376988172531114051899692186 -0.403428590297699007916065738755 0.802505725622177146227897992503 +-0.0568376988172531114051899692186 0.403428590297699007916065738755 0.802505725622177146227897992503 +-0.056791000068187713623046875 -0.4955230057239532470703125 0.0350989997386932373046875 +-0.056791000068187713623046875 0.4955230057239532470703125 0.0350989997386932373046875 +-0.056654751300811767578125 -0.24096524715423583984375 0.03501474857330322265625 +-0.056654751300811767578125 0.24096524715423583984375 0.03501474857330322265625 +-0.0566540002822875990440287807814 -0.00823220014572143519993030480464 0.0819912016391754205901776231258 +-0.0566540002822875990440287807814 0.00823220014572143519993030480464 0.0819912016391754205901776231258 +-0.0565796017646789592414613423443 -0.0783451020717620960631677462516 -0.0257059007883071906352956403907 +-0.0565796017646789592414613423443 0.0783451020717620960631677462516 -0.0257059007883071906352956403907 +-0.0565573476254940046836772182814 -0.114829203486442571469083873126 0.431410950422286998406917746252 +-0.0565573476254940046836772182814 0.114829203486442571469083873126 0.431410950422286998406917746252 +-0.0565083011984825120399555942186 -0.041055299341678619384765625 0.132745197415351873226896373126 +-0.0565083011984825120399555942186 0.041055299341678619384765625 0.132745197415351873226896373126 +-0.056473799049854278564453125 -0.120224851369857776983707253748 0.0696899995207786587814169365629 +-0.056473799049854278564453125 0.120224851369857776983707253748 0.0696899995207786587814169365629 +-0.0564414024353027399261151231258 -0.173706197738647483141960492503 0.0814894020557403592208700615629 +-0.0564414024353027399261151231258 0.173706197738647483141960492503 0.0814894020557403592208700615629 +-0.0564225018024444580078125 -0.6494009792804718017578125 -0.370937995612621307373046875 +-0.0564225018024444580078125 0.6494009792804718017578125 -0.370937995612621307373046875 +-0.0564166009426116943359375 -0.046087801456451416015625 -0.0685060024261474609375 +-0.0564166009426116943359375 0.046087801456451416015625 -0.0685060024261474609375 +-0.0563963994383811922928018134371 -0.134460148215293867623998380623 -0.0352123506367206587364115932814 +-0.0563963994383811922928018134371 0.134460148215293867623998380623 -0.0352123506367206587364115932814 +-0.0563717007637023967414613423443 -0.514826384186744756554787727509 0.185138247907161740402059990629 +-0.0563717007637023967414613423443 0.514826384186744756554787727509 0.185138247907161740402059990629 +-0.05635724961757659912109375 -0.06601999700069427490234375 -0.2344464957714080810546875 +-0.05635724961757659912109375 0.06601999700069427490234375 -0.2344464957714080810546875 +-0.0563252516090869889686665317186 -0.7788057029247283935546875 0.335841812193393707275390625 +-0.0563252516090869889686665317186 0.7788057029247283935546875 0.335841812193393707275390625 +-0.0563051998615264892578125 -0.00813520029187202523002220289072 0.191738200187683116570980246252 +-0.0563051998615264892578125 0.00813520029187202523002220289072 0.191738200187683116570980246252 +-0.05627624876797199249267578125 -0.4712302386760711669921875 0.580753505229949951171875 +-0.05627624876797199249267578125 0.4712302386760711669921875 0.580753505229949951171875 +-0.0562488973140716566612162807814 -0.0161002993583679206157643903907 0.0810976982116699274261151231258 +-0.0562488973140716566612162807814 0.0161002993583679206157643903907 0.0810976982116699274261151231258 +-0.0562273979187011760383363423443 -0.0571246027946472195724325615629 0.0597935020923614501953125 +-0.0562273979187011760383363423443 0.0571246027946472195724325615629 0.0597935020923614501953125 +-0.0562056005001068115234375 -0.237049806118011463507144753748 -0.175066494941711420230134876874 +-0.0562056005001068115234375 0.237049806118011463507144753748 -0.175066494941711420230134876874 +-0.0560954995453357696533203125 -0.06587350368499755859375 -0.4924570024013519287109375 +-0.0560954995453357696533203125 0.06587350368499755859375 -0.4924570024013519287109375 +-0.0560899488627910544624732835928 -0.126555101573467249087556751874 0.32146169245243072509765625 +-0.0560899488627910544624732835928 0.126555101573467249087556751874 0.32146169245243072509765625 +-0.0560880012810230296760316548443 -0.172624504566192632504240123126 -0.411770260334014925884815738755 +-0.0560880012810230296760316548443 0.172624504566192632504240123126 -0.411770260334014925884815738755 +-0.0560725986957550104339276231258 -0.0700617015361785916427450615629 0.0441271990537643460372763115629 +-0.0560725986957550104339276231258 0.0700617015361785916427450615629 0.0441271990537643460372763115629 +-0.0560109972953796442229901231258 -0.0242379993200302137901225307814 0.19046080112457275390625 +-0.0560109972953796442229901231258 0.0242379993200302137901225307814 0.19046080112457275390625 +-0.055996000766754150390625 0 0.24364824593067169189453125 +-0.0559946984052658094932475307814 -0.289992892742156949115184261245 -0.052617900073528289794921875 +-0.0559946984052658094932475307814 0.289992892742156949115184261245 -0.052617900073528289794921875 +-0.0559891507029533358474893134371 -0.0230957988649606697773020158593 -0.34471990168094635009765625 +-0.0559891507029533358474893134371 0.0230957988649606697773020158593 -0.34471990168094635009765625 +-0.05598700046539306640625 0 0.4968554973602294921875 +-0.0559759497642517075965962192186 -0.132713699340820306948884876874 0.0418779015541076646278462192186 +-0.0559759497642517075965962192186 0.132713699340820306948884876874 0.0418779015541076646278462192186 +-0.0559687972068786676604901231258 -0.7901504039764404296875 0.111936795711517336759932561563 +-0.0559687972068786676604901231258 0.7901504039764404296875 0.111936795711517336759932561563 +-0.055936001241207122802734375 -0.0406400002539157867431640625 0.9976069927215576171875 +-0.055936001241207122802734375 0.0406400002539157867431640625 0.9976069927215576171875 +-0.0559289492666721274605201585928 -0.26527549326419830322265625 0.221361353993415804763955634371 +-0.0559289492666721274605201585928 0.26527549326419830322265625 0.221361353993415804763955634371 +-0.0559197008609771742393412807814 -0.0066740997135639190673828125 -0.0826344013214111439147302462516 +-0.0559197008609771742393412807814 0.0066740997135639190673828125 -0.0826344013214111439147302462516 +-0.0558140017092227935791015625 -0.02014275081455707550048828125 0.2428559958934783935546875 +-0.0558140017092227935791015625 0.02014275081455707550048828125 0.2428559958934783935546875 +-0.055803000926971435546875 -0.0405427008867263807823100307814 0.0724038004875183077713174384371 +-0.055803000926971435546875 0.0405427008867263807823100307814 0.0724038004875183077713174384371 +-0.055802501738071441650390625 -0.04054249823093414306640625 0.4952194988727569580078125 +-0.055802501738071441650390625 0.04054249823093414306640625 0.4952194988727569580078125 +-0.0557587027549743680099325615629 -0.0827147006988525473891726846887 0.00701769962906837515420610529304 +-0.0557587027549743680099325615629 0.0827147006988525473891726846887 0.00701769962906837515420610529304 +-0.0556971013545990017989950615629 -0.0828446984291076743422976846887 -0.005881600081920623779296875 +-0.0556971013545990017989950615629 0.0828446984291076743422976846887 -0.005881600081920623779296875 +-0.055679000914096832275390625 -0.23654949665069580078125 -0.0586872510612010955810546875 +-0.055679000914096832275390625 0.23654949665069580078125 -0.0586872510612010955810546875 +-0.0556577995419502216667417826557 -0.211339491605758655889957253748 0.205518293380737293585269753748 +-0.0556577995419502216667417826557 0.211339491605758655889957253748 0.205518293380737293585269753748 +-0.0555589996278285924713458143742 -0.246392300724983193127570757497 -0.242289257049560530221654630623 +-0.0555589996278285924713458143742 0.246392300724983193127570757497 -0.242289257049560530221654630623 +-0.0555160008370876312255859375 -0.6014959812164306640625 -0.79694497585296630859375 +-0.0555160008370876312255859375 0.6014959812164306640625 -0.79694497585296630859375 +-0.0554901003837585463096537807814 -0.0238672003149986294845419365629 0.0796944022178650013366052462516 +-0.0554901003837585463096537807814 0.0238672003149986294845419365629 0.0796944022178650013366052462516 +-0.0554304018616676302810830634371 -0.10669170320034027099609375 -0.08969025313854217529296875 +-0.0554304018616676302810830634371 0.10669170320034027099609375 -0.08969025313854217529296875 +-0.0553727984428405775596537807814 -0.17041599750518798828125 0.779674386978149502880341970013 +-0.0553727984428405775596537807814 0.17041599750518798828125 0.779674386978149502880341970013 +-0.0553128004074096707443075615629 0 -0.798085594177246115954460492503 +-0.0552796006202697781661825615629 -0.38042199611663818359375 0.110558795928955080900557561563 +-0.0552796006202697781661825615629 0.38042199611663818359375 0.110558795928955080900557561563 +-0.0552788019180297865440287807814 -0.170127594470977805407585492503 0.35777199268341064453125 +-0.0552788019180297865440287807814 0.170127594470977805407585492503 0.35777199268341064453125 +-0.0552770018577575725227113423443 -0.170127999782562266961605246252 -0.0894429981708526611328125 +-0.0552770018577575725227113423443 0.170127999782562266961605246252 -0.0894429981708526611328125 +-0.0552689991891384124755859375 -0.0401547513902187347412109375 0.2404847443103790283203125 +-0.0552689991891384124755859375 0.0401547513902187347412109375 0.2404847443103790283203125 +-0.0552269995212554959396200615629 -0.0656002998352050864516726846887 -0.0514450013637542738487162807814 +-0.0552269995212554959396200615629 0.0656002998352050864516726846887 -0.0514450013637542738487162807814 +-0.0551807999610900920539613423443 0 -0.396175599098205599712940738755 +-0.055178500711917877197265625 -0.4730984866619110107421875 -0.152095496654510498046875 +-0.055178500711917877197265625 0.4730984866619110107421875 -0.152095496654510498046875 +-0.0550907995551824583579936245314 -0.769799673557281516345085492503 0.463005924224853537829460492503 +-0.0550907995551824583579936245314 0.769799673557281516345085492503 0.463005924224853537829460492503 +-0.05504924990236759185791015625 -0.7249822318553924560546875 -0.1840402521193027496337890625 +-0.05504924990236759185791015625 0.7249822318553924560546875 -0.1840402521193027496337890625 +-0.0550086021423339815994424384371 -0.463542008399963345599559261245 0.376964986324310302734375 +-0.0550086021423339815994424384371 0.463542008399963345599559261245 0.376964986324310302734375 +-0.05500090122222900390625 -0.03996039927005767822265625 -0.0733353018760681124588174384371 +-0.05500090122222900390625 0.03996039927005767822265625 -0.0733353018760681124588174384371 +-0.05498600006103515625 -0.448399007320404052734375 -0.2142769992351531982421875 +-0.05498600006103515625 0.448399007320404052734375 -0.2142769992351531982421875 +-0.0549700975418090861945863423443 -0.020036600530147552490234375 -0.08109760284423828125 +-0.0549700975418090861945863423443 0.020036600530147552490234375 -0.08109760284423828125 +-0.0549433484673500019401792826557 -0.129739353060722345523103626874 -0.05146770179271697998046875 +-0.0549433484673500019401792826557 0.129739353060722345523103626874 -0.05146770179271697998046875 +-0.0549213014543056474159321567186 -0.697841906547546297900908029987 0 +-0.0549213014543056474159321567186 0.697841906547546297900908029987 0 +-0.0549112021923065241058026231258 -0.34170401096343994140625 -0.721264791488647527550881477509 +-0.0549112021923065241058026231258 0.34170401096343994140625 -0.721264791488647527550881477509 +-0.0549051001667976365516743442186 -0.28819620609283447265625 0.062676899135112762451171875 +-0.0549051001667976365516743442186 0.28819620609283447265625 0.062676899135112762451171875 +-0.0548872981220483793785014370314 -0.168927854299545293637052623126 -0.625260335206985540246193977509 +-0.0548872981220483793785014370314 0.168927854299545293637052623126 -0.625260335206985540246193977509 +-0.0548708021640777615646200615629 -0.0398654013872146648078675923443 0.188148796558380126953125 +-0.0548708021640777615646200615629 0.0398654013872146648078675923443 0.188148796558380126953125 +-0.05484449863433837890625 -0.0812168002128601101974325615629 0.0198974996805191053916850307814 +-0.05484449863433837890625 0.0812168002128601101974325615629 0.0198974996805191053916850307814 +-0.05481719970703125 -0.0703980028629302978515625 -0.0451575011014938368369975307814 +-0.05481719970703125 0.0703980028629302978515625 -0.0451575011014938368369975307814 +-0.05480539798736572265625 -0.0398184001445770277549662807814 -0.188177800178527837582365123126 +-0.05480539798736572265625 0.0398184001445770277549662807814 -0.188177800178527837582365123126 +-0.0547522492706775595894264085928 -0.34569080173969268798828125 0 +-0.0547522492706775595894264085928 0.34569080173969268798828125 0 +-0.0546615011990070343017578125 -0.27622449398040771484375 -0.413173496723175048828125 +-0.0546615011990070343017578125 0.27622449398040771484375 -0.413173496723175048828125 +-0.0546531975269317626953125 0 -0.192387795448303228207365123126 +-0.0546428024768829401214276231258 -0.0743492007255554254729901231258 0.0385533988475799602180238423443 +-0.0546428024768829401214276231258 0.0743492007255554254729901231258 0.0385533988475799602180238423443 +-0.0546351015567779554893412807814 -0.0816232025623321588714276231258 -0.0187791004776954664756694057814 +-0.0546351015567779554893412807814 0.0816232025623321588714276231258 -0.0187791004776954664756694057814 +-0.05453725159168243408203125 -0.23378224670886993408203125 0.069796502590179443359375 +-0.05453725159168243408203125 0.23378224670886993408203125 0.069796502590179443359375 +-0.0544831484556198078483824076557 -0.00999060049653053248996936730464 -0.139397853612899774722322376874 +-0.0544831484556198078483824076557 0.00999060049653053248996936730464 -0.139397853612899774722322376874 +-0.0544484987854957566688618442186 -0.0888000011444091824630575615629 0.2813360989093780517578125 +-0.0544484987854957566688618442186 0.0888000011444091824630575615629 0.2813360989093780517578125 +-0.05439300276339054107666015625 -0.74282924830913543701171875 -0.0880124978721141815185546875 +-0.05439300276339054107666015625 0.74282924830913543701171875 -0.0880124978721141815185546875 +-0.0543786004185676588584819057814 -0.08844660222530364990234375 0.590948402881622314453125 +-0.0543786004185676588584819057814 0.08844660222530364990234375 0.590948402881622314453125 +-0.0543668985366821261306924384371 -0.0919302999973297119140625 -0.3333064019680023193359375 +-0.0543668985366821261306924384371 0.0919302999973297119140625 -0.3333064019680023193359375 +-0.0543621003627777071853799384371 -0.03949619829654693603515625 -0.292377895116806008068977007497 +-0.0543621003627777071853799384371 0.03949619829654693603515625 -0.292377895116806008068977007497 +-0.0543528020381927462478799384371 -0.0394896000623702961296324076557 -0.596226596832275412829460492503 +-0.0543528020381927462478799384371 0.0394896000623702961296324076557 -0.596226596832275412829460492503 +-0.0543143987655639662315287807814 -0.768949604034423916942841970013 0.213930392265319846423210492503 +-0.0543143987655639662315287807814 0.768949604034423916942841970013 0.213930392265319846423210492503 +-0.0542704492807388264030699076557 -0.08816684782505035400390625 0.10854180157184600830078125 +-0.0542704492807388264030699076557 0.08816684782505035400390625 0.10854180157184600830078125 +-0.0542699977755546555946430942186 -0.0394294515252113300651792826557 -0.134164354205131536312833873126 +-0.0542699977755546555946430942186 0.0394294515252113300651792826557 -0.134164354205131536312833873126 +-0.0542217016220092815070863423443 -0.0476218998432159437705912807814 0.0692255020141601534744424384371 +-0.0542217016220092815070863423443 0.0476218998432159437705912807814 0.0692255020141601534744424384371 +-0.0541759990155696868896484375 -0.4892649948596954345703125 -0.087661497294902801513671875 +-0.0541759990155696868896484375 0.4892649948596954345703125 -0.087661497294902801513671875 +-0.05416199751198291778564453125 -0.49011898040771484375 -0.56511072814464569091796875 +-0.05416199751198291778564453125 0.49011898040771484375 -0.56511072814464569091796875 +-0.0541553020477294963508363423443 -0.0615451991558075006683026231258 -0.0572659015655517592002787807814 +-0.0541553020477294963508363423443 0.0615451991558075006683026231258 -0.0572659015655517592002787807814 +-0.0541339471936225849479917826557 -0.166611053049564361572265625 -0.831751352548599220959602007497 +-0.0541339471936225849479917826557 0.166611053049564361572265625 -0.831751352548599220959602007497 +-0.0540723010897636371940855326557 -0.166420501470565779245092130623 -0.243680691719055153576789507497 +-0.0540723010897636371940855326557 0.166420501470565779245092130623 -0.243680691719055153576789507497 +-0.0540637493133544894119424384371 -0.0691317021846771240234375 -0.121646699309349057283036188437 +-0.0540637493133544894119424384371 0.0691317021846771240234375 -0.121646699309349057283036188437 +-0.0540336012840271009971537807814 -0.0887902021408081137954226846887 0.170870196819305431024105246252 +-0.0540336012840271009971537807814 0.0887902021408081137954226846887 0.170870196819305431024105246252 +-0.054000198841094970703125 -0.123090398311615001336605246252 -0.148097205162048356497095369377 +-0.054000198841094970703125 0.123090398311615001336605246252 -0.148097205162048356497095369377 +-0.05399119853973388671875 -0.362331604957580599712940738755 0.160626399517059342825220369377 +-0.05399119853973388671875 0.362331604957580599712940738755 0.160626399517059342825220369377 +-0.0539267003536224379112162807814 -0.0634573996067047119140625 0.0553631007671356242805238423443 +-0.0539267003536224379112162807814 0.0634573996067047119140625 0.0553631007671356242805238423443 +-0.053920201957225799560546875 -0.126026102900505060366853626874 0.0609100520610809312294087192186 +-0.053920201957225799560546875 0.126026102900505060366853626874 0.0609100520610809312294087192186 +-0.0539093498140573515464701870314 -0.485558152198791559417401231258 0.252639757096767447741569867503 +-0.0539093498140573515464701870314 0.485558152198791559417401231258 0.252639757096767447741569867503 +-0.0539080023765564006477113423443 -0.192237603664398210012720369377 -0.0117732003331184401084819057814 +-0.0539080023765564006477113423443 0.192237603664398210012720369377 -0.0117732003331184401084819057814 +-0.0538845986127853351921324076557 -0.212615200877189630679353626874 0.272747647762298539575454014994 +-0.0538845986127853351921324076557 0.212615200877189630679353626874 0.272747647762298539575454014994 +-0.0538778487592935576011576870314 -0.251371255517005953716846988755 0.59700028598308563232421875 +-0.0538778487592935576011576870314 0.251371255517005953716846988755 0.59700028598308563232421875 +-0.0538250029087066692023988423443 -0.0749433994293212946136151231258 -0.0385533004999160794357138115629 +-0.0538250029087066692023988423443 0.0749433994293212946136151231258 -0.0385533004999160794357138115629 +-0.0537829030305147157142720004686 -0.70580174028873443603515625 -0.470586356520652782098323996252 +-0.0537829030305147157142720004686 0.70580174028873443603515625 -0.470586356520652782098323996252 +-0.0537424027919769300987162807814 -0.1921308040618896484375 0.0140525996685028076171875 +-0.0537424027919769300987162807814 0.1921308040618896484375 0.0140525996685028076171875 +-0.0536947011947631891448651231258 -0.03076539933681488037109375 0.0785516977310180691818075615629 +-0.0536947011947631891448651231258 0.03076539933681488037109375 0.0785516977310180691818075615629 +-0.0536800488829612745811381557814 -0.381015890836715664935496761245 0.757922074198722817151008257497 +-0.0536800488829612745811381557814 0.381015890836715664935496761245 0.757922074198722817151008257497 +-0.053646750748157501220703125 -0.111115001142024993896484375 -0.2174292504787445068359375 +-0.053646750748157501220703125 0.111115001142024993896484375 -0.2174292504787445068359375 +-0.0535999506711959880500550923443 -0.356690239906311046258480246252 -0.26907075941562652587890625 +-0.0535999506711959880500550923443 0.356690239906311046258480246252 -0.26907075941562652587890625 +-0.05348490178585052490234375 -0.282222604751586891858039507497 -0.08654339611530303955078125 +-0.05348490178585052490234375 0.282222604751586891858039507497 -0.08654339611530303955078125 +-0.0534638978540897327751402201557 -0.571359580755233742443977007497 0.400862020254135087427016514994 +-0.0534638978540897327751402201557 0.571359580755233742443977007497 0.400862020254135087427016514994 +-0.053459398448467254638671875 -0.0512143492698669405838174384371 0.1304575502872467041015625 +-0.053459398448467254638671875 0.0512143492698669405838174384371 0.1304575502872467041015625 +-0.0534449994564056354851011576557 -0.267877507209777820929019753748 -0.12403710186481475830078125 +-0.0534449994564056354851011576557 0.267877507209777820929019753748 -0.12403710186481475830078125 +-0.0534409493207931504676899692186 -0.10012485086917877197265625 -0.0980770468711853055099325615629 +-0.0534409493207931504676899692186 0.10012485086917877197265625 -0.0980770468711853055099325615629 +-0.053434498608112335205078125 -0.647012096643447831567641514994 -0.261763605475425709112613503748 +-0.053434498608112335205078125 0.647012096643447831567641514994 -0.261763605475425709112613503748 +-0.0533110015094280242919921875 -0.3626464903354644775390625 0.340066492557525634765625 +-0.0533110015094280242919921875 0.3626464903354644775390625 0.340066492557525634765625 +-0.0533028006553649957854901231258 -0.0785640001296997181334802462516 -0.3885695934295654296875 +-0.0533028006553649957854901231258 0.0785640001296997181334802462516 -0.3885695934295654296875 +-0.05328600108623504638671875 -0.1640002429485321044921875 -0.18100975453853607177734375 +-0.05328600108623504638671875 0.1640002429485321044921875 -0.18100975453853607177734375 +-0.0532342016696929973273988423443 -0.163840997219085710012720369377 -0.101598405838012703639172684689 +-0.0532342016696929973273988423443 0.163840997219085710012720369377 -0.101598405838012703639172684689 +-0.0532284479588270229011293110943 -0.310336413979530378881577235006 0.450952166318893454821647992503 +-0.0532284479588270229011293110943 0.310336413979530378881577235006 0.450952166318893454821647992503 +-0.0532225504517555222938618442186 -0.110218352079391471165514815311 0.0867137968540191567123898153113 +-0.0532225504517555222938618442186 0.110218352079391471165514815311 0.0867137968540191567123898153113 +-0.0531392011791467638870400946871 -0.0386080002412199987937846401564 0.947726643085479714123664507497 +-0.0531392011791467638870400946871 0.0386080002412199987937846401564 0.947726643085479714123664507497 +-0.053137801587581634521484375 -0.421383011341094959600894753748 -0.423807585239410367083934261245 +-0.053137801587581634521484375 0.421383011341094959600894753748 -0.423807585239410367083934261245 +-0.0530972518026828765869140625 -0.0999407470226287841796875 0.22291825711727142333984375 +-0.0530972518026828765869140625 0.0999407470226287841796875 0.22291825711727142333984375 +-0.0530789971351623562911825615629 -0.0772368013858795166015625 -0.176683604717254638671875 +-0.0530789971351623562911825615629 0.0772368013858795166015625 -0.176683604717254638671875 +-0.05304645001888275146484375 -0.223395743966102594546541126874 0.387014839053153980596988503748 +-0.05304645001888275146484375 0.223395743966102594546541126874 0.387014839053153980596988503748 +-0.0530387997627258314659037807814 -0.189564394950866715872095369377 -0.0353868007659912109375 +-0.0530387997627258314659037807814 0.189564394950866715872095369377 -0.0353868007659912109375 +-0.0530169010162353515625 -0.0334136992692947373817524692186 -0.0779277026653289878188601846887 +-0.0530169010162353515625 0.0334136992692947373817524692186 -0.0779277026653289878188601846887 +-0.0530130006372928619384765625 -0.2287607491016387939453125 -0.08577950298786163330078125 +-0.0530130006372928619384765625 0.2287607491016387939453125 -0.08577950298786163330078125 +-0.0530120015144348172286825615629 -0.732993602752685546875 0.31608641147613525390625 +-0.0530120015144348172286825615629 0.732993602752685546875 0.31608641147613525390625 +-0.05299650132656097412109375 -0.19647325575351715087890625 0.14522249996662139892578125 +-0.05299650132656097412109375 0.19647325575351715087890625 0.14522249996662139892578125 +-0.0529353976249694879729901231258 -0.0782782971858978354751101846887 0.03271619975566864013671875 +-0.0529353976249694879729901231258 0.0782782971858978354751101846887 0.03271619975566864013671875 +-0.0528762519359588581413511576557 -0.343519043922424271997329014994 -0.0412152994424104662796182196871 +-0.0528762519359588581413511576557 0.343519043922424271997329014994 -0.0412152994424104662796182196871 +-0.0528273999691009563117738423443 -0.0571137011051177992393412807814 -0.0628274977207183837890625 +-0.0528273999691009563117738423443 0.0571137011051177992393412807814 -0.0628274977207183837890625 +-0.0527978003025054987151776231258 -0.135794198513031011410490123126 0.137012195587158214227230246252 +-0.0527978003025054987151776231258 0.135794198513031011410490123126 0.137012195587158214227230246252 +-0.05279000103473663330078125 -0.6881849765777587890625 0.723612010478973388671875 +-0.05279000103473663330078125 0.6881849765777587890625 0.723612010478973388671875 +-0.0527512013912200955489950615629 -0.267842388153076205181690738755 0.292365598678588856085269753748 +-0.0527512013912200955489950615629 0.267842388153076205181690738755 0.292365598678588856085269753748 +-0.0527402007952332482765278598436 -0.571421182155609108654914507497 -0.757097727060317970959602007497 +-0.0527402007952332482765278598436 0.571421182155609108654914507497 -0.757097727060317970959602007497 +-0.0527006998658180250694194057814 -0.162193197011947620733707253748 0.246811795234680164679019753748 +-0.0527006998658180250694194057814 0.162193197011947620733707253748 0.246811795234680164679019753748 +-0.0526749014854431124588174384371 -0.0974580019712448092361611884371 -0.278795993328094460217414507497 +-0.0526749014854431124588174384371 0.0974580019712448092361611884371 -0.278795993328094460217414507497 +-0.052661001682281494140625 -0.606107580661773615027243522491 -0.34620879590511322021484375 +-0.052661001682281494140625 0.606107580661773615027243522491 -0.34620879590511322021484375 +-0.0525827988982200608680805942186 -0.291424208879470791888621761245 -0.52183020114898681640625 +-0.0525827988982200608680805942186 0.291424208879470791888621761245 -0.52183020114898681640625 +-0.05257380008697509765625 -0.161802399158477799856470369377 0.1051476001739501953125 +-0.05257380008697509765625 0.161802399158477799856470369377 0.1051476001739501953125 +-0.0525730013847351129729901231258 0 -0.0850651979446411243834802462516 +-0.052564799785614013671875 -0.332323598861694380346420985006 -0.216328406333923362048210492503 +-0.052564799785614013671875 0.332323598861694380346420985006 -0.216328406333923362048210492503 +-0.0525585003197193145751953125 -0.2149614989757537841796875 -0.116314999759197235107421875 +-0.0525585003197193145751953125 0.2149614989757537841796875 -0.116314999759197235107421875 +-0.0525244988501071888298277201557 -0.439814889430999722552684261245 0.542036604881286576684829014994 +-0.0525244988501071888298277201557 0.439814889430999722552684261245 0.542036604881286576684829014994 +-0.0525219999253749847412109375 -0.1616429984569549560546875 0.1833384931087493896484375 +-0.0525219999253749847412109375 0.1616429984569549560546875 0.1833384931087493896484375 +-0.0525048017501831068565287807814 -0.188323402404785178454460492503 0.0421608000993728693206463731258 +-0.0525048017501831068565287807814 0.188323402404785178454460492503 0.0421608000993728693206463731258 +-0.0525034010410308851768412807814 -0.0790111005306243924239950615629 -0.0316327989101409939864950615629 +-0.0525034010410308851768412807814 0.0790111005306243924239950615629 -0.0316327989101409939864950615629 +-0.0524735987186431898643412807814 -0.0545103013515472467620526231258 0.0653846025466919000823651231258 +-0.0524735987186431898643412807814 0.0545103013515472467620526231258 0.0653846025466919000823651231258 +-0.0524707473814487457275390625 -0.74076600372791290283203125 0.1049407459795475006103515625 +-0.0524707473814487457275390625 0.74076600372791290283203125 0.1049407459795475006103515625 +-0.052395999431610107421875 -0.16126050055027008056640625 -0.4703719913959503173828125 +-0.052395999431610107421875 0.16126050055027008056640625 -0.4703719913959503173828125 +-0.0523950994014740004112162807814 -0.0840176999568939264495526231258 0.0139920994639396670949915701954 +-0.0523950994014740004112162807814 0.0840176999568939264495526231258 0.0139920994639396670949915701954 +-0.0523490011692047119140625 -0.0843910992145538441100427462516 -0.011734999716281890869140625 +-0.0523490011692047119140625 0.0843910992145538441100427462516 -0.011734999716281890869140625 +-0.052335001528263092041015625 -0.16106800734996795654296875 0.470444500446319580078125 +-0.052335001528263092041015625 0.16106800734996795654296875 0.470444500446319580078125 +-0.0522521987557411152214292826557 -0.224934303760528558902009876874 -0.191505306959152216128572376874 +-0.0522521987557411152214292826557 0.224934303760528558902009876874 -0.191505306959152216128572376874 +-0.0522499024868011488487162807814 -0.0852639973163604736328125 0 +-0.0522499024868011488487162807814 0.0852639973163604736328125 0 +-0.0522004999220371246337890625 -0.4861845076084136962890625 0.1044014990329742431640625 +-0.0522004999220371246337890625 0.4861845076084136962890625 0.1044014990329742431640625 +-0.0521022021770477308799662807814 -0.01335220038890838623046875 -0.08430349826812744140625 +-0.0521022021770477308799662807814 0.01335220038890838623046875 -0.08430349826812744140625 +-0.0520901978015899658203125 -0.140269500017166121041967130623 0.010539449751377105712890625 +-0.0520901978015899658203125 0.140269500017166121041967130623 0.010539449751377105712890625 +-0.0520649485290050478836221259371 -0.34259785711765289306640625 0.0491512000560760456413511576557 +-0.0520649485290050478836221259371 0.34259785711765289306640625 0.0491512000560760456413511576557 +-0.0520544983446598052978515625 -0.374715507030487060546875 -0.32692348957061767578125 +-0.0520544983446598052978515625 0.374715507030487060546875 -0.32692348957061767578125 +-0.0520363479852676349968199076557 -0.140407499670982344186498380623 -0.00882990024983882834663795335928 +-0.0520363479852676349968199076557 0.140407499670982344186498380623 -0.00882990024983882834663795335928 +-0.0520301995798945413063130160936 -0.727033025026321388928352007497 0.437283372879028298108039507497 +-0.0520301995798945413063130160936 0.727033025026321388928352007497 0.437283372879028298108039507497 +-0.0519119985401630401611328125 -0.159764997661113739013671875 0.73094473779201507568359375 +-0.0519119985401630401611328125 0.159764997661113739013671875 0.73094473779201507568359375 +-0.051855750381946563720703125 0 -0.748205244541168212890625 +-0.05166280269622802734375 -0.3375627994537353515625 0.208284401893615744860710492503 +-0.05166280269622802734375 0.3375627994537353515625 0.208284401893615744860710492503 +-0.0516500987112522152999716240629 -0.446241608262062106060596988755 -0.0264725999906659133220632185157 +-0.0516500987112522152999716240629 0.446241608262062106060596988755 -0.0264725999906659133220632185157 +-0.0516193985939025906661825615629 -0.0375032007694244412521200615629 0.0769995987415313803969851846887 +-0.0516193985939025906661825615629 0.0375032007694244412521200615629 0.0769995987415313803969851846887 +-0.0515254996716976165771484375 0 -0.2446327507495880126953125 +-0.05147925205528736114501953125 -0.320347510278224945068359375 -0.67618574202060699462890625 +-0.05147925205528736114501953125 0.320347510278224945068359375 -0.67618574202060699462890625 +-0.0514549478888511671592631557814 -0.0621400505304336506218199076557 0.126455551385879522152677623126 +-0.0514549478888511671592631557814 0.0621400505304336506218199076557 0.126455551385879522152677623126 +-0.0513850495219230624099893134371 -0.13840229809284210205078125 -0.026540100574493408203125 +-0.0513850495219230624099893134371 0.13840229809284210205078125 -0.026540100574493408203125 +-0.0513792999088764149040464701557 -0.676650083065032936779914507497 -0.171770901978015894107088001874 +-0.0513792999088764149040464701557 0.676650083065032936779914507497 -0.171770901978015894107088001874 +-0.0513624012470245416839276231258 -0.184383797645568864309595369377 -0.0580045998096466106086488423443 +-0.0513624012470245416839276231258 0.184383797645568864309595369377 -0.0580045998096466106086488423443 +-0.0513431981205940204948667826557 -0.277163100242614757195980246252 0.102686101198196405581697376874 +-0.0513431981205940204948667826557 0.277163100242614757195980246252 0.102686101198196405581697376874 +-0.0513279005885124220420756557814 -0.0297502510249614687820596259371 -0.13776929676532745361328125 +-0.0513279005885124220420756557814 0.0297502510249614687820596259371 -0.13776929676532745361328125 +-0.0512753009796142605880575615629 -0.0693774998188018826583700615629 0.0505726993083953912933026231258 +-0.0512753009796142605880575615629 0.0693774998188018826583700615629 0.0505726993083953912933026231258 +-0.0512574017047882080078125 -0.0524106979370117243011151231258 -0.0680132985115051297286825615629 +-0.0512574017047882080078125 0.0524106979370117243011151231258 -0.0680132985115051297286825615629 +-0.05124700069427490234375 -0.4680239856243133544921875 0.16830749809741973876953125 +-0.05124700069427490234375 0.4680239856243133544921875 0.16830749809741973876953125 +-0.0511724978685378986686949076557 -0.0930352538824081448654013115629 -0.105951896309852591770983565311 +-0.0511724978685378986686949076557 0.0930352538824081448654013115629 -0.105951896309852591770983565311 +-0.0511629000306129469444194057814 -0.137413653731346119268863503748 0.0316206000745296450515908759371 +-0.0511629000306129469444194057814 0.137413653731346119268863503748 0.0316206000745296450515908759371 +-0.0511119000613689464240785298443 -0.445970705151557955669971988755 0.0315890997648239149619975307814 +-0.0511119000613689464240785298443 0.445970705151557955669971988755 0.0315890997648239149619975307814 +-0.0510097503662109361122212192186 -0.0974163025617599404037960653113 0.102019947767257687654129938437 +-0.0510097503662109361122212192186 0.0974163025617599404037960653113 0.102019947767257687654129938437 +-0.0510048985481262248664613423443 -0.0817520976066589410979901231258 0.0267412990331649808029013115629 +-0.0510048985481262248664613423443 0.0817520976066589410979901231258 0.0267412990331649808029013115629 +-0.0509983513504266780524964985943 -0.647996056079864546362045985006 0 +-0.0509983513504266780524964985943 0.647996056079864546362045985006 0 +-0.0509666517376899663727130018742 -0.0656001485884189633468466240629 0.3399983942508697509765625 +-0.0509666517376899663727130018742 0.0656001485884189633468466240629 0.3399983942508697509765625 +-0.050962500274181365966796875 -0.049596250057220458984375 -0.2396727502346038818359375 +-0.050962500274181365966796875 0.049596250057220458984375 -0.2396727502346038818359375 +-0.0509495973587036146690287807814 -0.15681040287017822265625 -0.782824802398681685033920985006 +-0.0509495973587036146690287807814 0.15681040287017822265625 -0.782824802398681685033920985006 +-0.0509405970573425306846537807814 -0.0534753978252410916427450615629 0.185863995552063010485710492503 +-0.0509405970573425306846537807814 0.0534753978252410916427450615629 0.185863995552063010485710492503 +-0.0509361982345581110198651231258 -0.156768000125885015316740123126 -0.113266599178314220086605246252 +-0.0509361982345581110198651231258 0.156768000125885015316740123126 -0.113266599178314220086605246252 +-0.050919748842716217041015625 -0.7208902537822723388671875 0.200559742748737335205078125 +-0.050919748842716217041015625 0.7208902537822723388671875 0.200559742748737335205078125 +-0.0508795022964477552940287807814 -0.0825174987316131675063601846887 -0.0245387002825737006450612653907 +-0.0508795022964477552940287807814 0.0825174987316131675063601846887 -0.0245387002825737006450612653907 +-0.0508682996034622164627236884371 0 -0.141111454367637639828458873126 +-0.0508566975593566922286825615629 -0.00412979982793331128892999615232 0.0860032021999359158614950615629 +-0.0508566975593566922286825615629 0.00412979982793331128892999615232 0.0860032021999359158614950615629 +-0.0508106991648673983474893134371 -0.0591199502348899799675230326557 -0.128152647614479059390291126874 +-0.0508106991648673983474893134371 0.0591199502348899799675230326557 -0.128152647614479059390291126874 +-0.0508074000477790818641743442186 0 0.141133350133895857370092130623 +-0.0507668025791645008415464701557 -0.693307298421859674597556022491 -0.082144998013973236083984375 +-0.0507668025791645008415464701557 0.693307298421859674597556022491 -0.082144998013973236083984375 +-0.050758250057697296142578125 -0.2227507531642913818359375 0.1015167534351348876953125 +-0.050758250057697296142578125 0.2227507531642913818359375 0.1015167534351348876953125 +-0.0507117986679077176193075615629 -0.112901604175567632504240123126 -0.157103598117828369140625 +-0.0507117986679077176193075615629 0.112901604175567632504240123126 -0.157103598117828369140625 +-0.0506988979876041370720152201557 -0.281053850054740872455028011245 0.202332547307014443127570757497 +-0.0506988979876041370720152201557 0.281053850054740872455028011245 0.202332547307014443127570757497 +-0.0506731986999511760383363423443 -0.102673804759979253597990123126 0.163982605934143071957365123126 +-0.0506731986999511760383363423443 0.102673804759979253597990123126 0.163982605934143071957365123126 +-0.0506729006767272990852113423443 -0.0266402006149292006065287807814 -0.0819912016391754205901776231258 +-0.0506729006767272990852113423443 0.0266402006149292006065287807814 -0.0819912016391754205901776231258 +-0.0506680011749267578125 -0.242294788360595703125 -0.31420719623565673828125 +-0.0506680011749267578125 0.242294788360595703125 -0.31420719623565673828125 +-0.0506651982665061936805805942186 -0.155933403968811029605134876874 -0.577163386344909601355368522491 +-0.0506651982665061936805805942186 0.155933403968811029605134876874 -0.577163386344909601355368522491 +-0.0506398513913154588172993442186 -0.0121709994971752159809152971093 0.140667897462844831979467130623 +-0.0506398513913154588172993442186 0.0121709994971752159809152971093 0.140667897462844831979467130623 +-0.0506192028522491482833700615629 -0.6642839908599853515625 -0.442904806137084994244190738755 +-0.0506192028522491482833700615629 0.6642839908599853515625 -0.442904806137084994244190738755 +-0.0505907513201236669342364393742 -0.322671291232109025415297764994 -0.125792796909809101446597878748 +-0.0505907513201236669342364393742 0.322671291232109025415297764994 -0.125792796909809101446597878748 +-0.0505711972713470472862162807814 -0.0119753003120422370220143903907 0.0854350984096527155120526231258 +-0.0505711972713470472862162807814 0.0119753003120422370220143903907 0.0854350984096527155120526231258 +-0.0505511976778507191032652201557 -0.457444381713867143091079014994 -0.527436679601669289318977007497 +-0.0505511976778507191032652201557 0.457444381713867143091079014994 -0.527436679601669289318977007497 +-0.0505223989486694377570863423443 -0.358603191375732432977230246252 0.713338422775268599096420985006 +-0.0505223989486694377570863423443 0.358603191375732432977230246252 0.713338422775268599096420985006 +-0.0504859495908021940757670620314 -0.0592861533164978013465962192186 -0.44321130216121673583984375 +-0.0504859495908021940757670620314 0.0592861533164978013465962192186 -0.44321130216121673583984375 +-0.0504611983895301777214292826557 -0.01219229958951473236083984375 0.2954742014408111572265625 +-0.0504611983895301777214292826557 0.01219229958951473236083984375 0.2954742014408111572265625 +-0.0504505001008510589599609375 -0.0572240017354488372802734375 0.2380760014057159423828125 +-0.0504505001008510589599609375 0.0572240017354488372802734375 0.2380760014057159423828125 +-0.0504245519638061578948651231258 -0.424913507699966441766292746252 0.345551237463951166350994981258 +-0.0504245519638061578948651231258 0.424913507699966441766292746252 0.345551237463951166350994981258 +-0.0503883004188537611534037807814 0 0.447169947624206531866519753748 +-0.0503622017800807939003071567186 -0.155001701414585107974275501874 -0.309738793969154324603465511245 +-0.0503622017800807939003071567186 0.155001701414585107974275501874 -0.309738793969154324603465511245 +-0.0503424011170864119102397182814 -0.0365760002285242108444052178129 0.897846293449401922082131477509 +-0.0503424011170864119102397182814 0.0365760002285242108444052178129 0.897846293449401922082131477509 +-0.0503351986408233642578125 -0.0610920011997222942023988423443 0.0611075997352600111534037807814 +-0.0503351986408233642578125 0.0610920011997222942023988423443 0.0611075997352600111534037807814 +-0.050333797931671142578125 -0.0265136003494262709190287807814 -0.191738200187683116570980246252 +-0.050333797931671142578125 0.0265136003494262709190287807814 -0.191738200187683116570980246252 +-0.0502971008419990511795205634371 -0.122880747914314261692858565311 -0.069788999855518341064453125 +-0.0502971008419990511795205634371 0.122880747914314261692858565311 -0.069788999855518341064453125 +-0.0502813525497913318962339701557 -0.336678308248519853052016514994 -0.0813595995306968661209268134371 +-0.0502813525497913318962339701557 0.336678308248519853052016514994 -0.0813595995306968661209268134371 +-0.0502731978893280057052450615629 -0.102070403099060069695980246252 0.383476400375366233141960492503 +-0.0502731978893280057052450615629 0.102070403099060069695980246252 0.383476400375366233141960492503 +-0.0502222515642642974853515625 -0.0364882484078407273719868442186 0.445697548985481251104801003748 +-0.0502222515642642974853515625 0.0364882484078407273719868442186 0.445697548985481251104801003748 +-0.0501895010471344049651776231258 -0.0446970999240875258018412807814 0.0740485012531280489822549384371 +-0.0501895010471344049651776231258 0.0446970999240875258018412807814 0.0740485012531280489822549384371 +-0.0501592025160789434234942518742 -0.229815256595611555612279630623 -0.259169754385948192254573996252 +-0.0501592025160789434234942518742 0.229815256595611555612279630623 -0.259169754385948192254573996252 +-0.0501505009829998002479634067186 -0.653775727748870827404914507497 0.68743140995502471923828125 +-0.0501505009829998002479634067186 0.653775727748870827404914507497 0.68743140995502471923828125 +-0.0501372992992401150802450615629 -0.0702042996883392306228799384371 -0.0505726993083953912933026231258 +-0.0501372992992401150802450615629 0.0702042996883392306228799384371 -0.0505726993083953912933026231258 +-0.0501258015632629408409037807814 -0.180967402458190929070980246252 0.0688350021839141817947549384371 +-0.0501258015632629408409037807814 0.180967402458190929070980246252 0.0688350021839141817947549384371 +-0.0501178488135337815712055942186 -0.134519997239112842901676003748 -0.0435034498572349562217631557814 +-0.0501178488135337815712055942186 0.134519997239112842901676003748 -0.0435034498572349562217631557814 +-0.0500759020447731004188618442186 -0.302724447846412614282485264994 -0.168375901877880096435546875 +-0.0500759020447731004188618442186 0.302724447846412614282485264994 -0.168375901877880096435546875 +-0.0500274002552032470703125 -0.0464210003614425673057475307814 -0.0730913996696472140213174384371 +-0.0500274002552032470703125 0.0464210003614425673057475307814 -0.0730913996696472140213174384371 +-0.050021700561046600341796875 -0.0363425999879837050010600307814 0.293559300899505604132144753748 +-0.050021700561046600341796875 0.0363425999879837050010600307814 0.293559300899505604132144753748 +-0.0500132977962493910362162807814 -0.0738882005214691189864950615629 0.0451575011014938368369975307814 +-0.0500132977962493910362162807814 0.0738882005214691189864950615629 0.0451575011014938368369975307814 +-0.0500000000000000027755575615629 0 0 +-0.04999969899654388427734375 -0.0198223993182182339767294365629 0.0843037009239196860610476846887 +-0.04999969899654388427734375 0.0198223993182182339767294365629 0.0843037009239196860610476846887 +-0.0499644007533788722663636860943 -0.541346383094787664269631477509 -0.717250478267669744347756477509 +-0.0499644007533788722663636860943 0.541346383094787664269631477509 -0.717250478267669744347756477509 +-0.0499586999416351332237162807814 -0.260916298627853371350227007497 0.139379999041557317562833873126 +-0.0499586999416351332237162807814 0.260916298627853371350227007497 0.139379999041557317562833873126 +-0.0499500006437301607986611884371 -0.0239415004849433885047993442186 0.139397996664047230108707253748 +-0.0499500006437301607986611884371 0.0239415004849433885047993442186 0.139397996664047230108707253748 +-0.04988349974155426025390625 -0.20677675306797027587890625 -0.13135825097560882568359375 +-0.04988349974155426025390625 0.20677675306797027587890625 -0.13135825097560882568359375 +-0.0498718500137329129318075615629 -0.00203374996781349173455288870116 -0.00294330008327961002712047644536 +-0.0498718500137329129318075615629 0.00203374996781349173455288870116 -0.00294330008327961002712047644536 +-0.0498560011386871351768412807814 -0.153444004058837901727230246252 -0.366018009185791026727230246252 +-0.0498560011386871351768412807814 0.153444004058837901727230246252 -0.366018009185791026727230246252 +-0.0498470503836870235114808735943 -0.0810760520398616790771484375 0.54170270264148712158203125 +-0.0498470503836870235114808735943 0.0810760520398616790771484375 0.54170270264148712158203125 +-0.0498458504676818903167401231258 -0.00392290018498897552490234375 0 +-0.0498458504676818903167401231258 0.00392290018498897552490234375 0 +-0.0498336493968963636924662807814 -0.00206495001912117021741766009768 0.003513149917125701904296875 +-0.0498336493968963636924662807814 0.00206495001912117021741766009768 0.003513149917125701904296875 +-0.0498234018683433588225994981258 -0.0361988000571727766563334682814 -0.546541047096252508019631477509 +-0.0498234018683433588225994981258 0.0361988000571727766563334682814 -0.546541047096252508019631477509 +-0.0497333988547325120399555942186 -0.232035005092620844058259876874 0.551077187061309814453125 +-0.0497333988547325120399555942186 0.232035005092620844058259876874 0.551077187061309814453125 +-0.0496987514197826385498046875 -0.6871815025806427001953125 0.296331010758876800537109375 +-0.0496987514197826385498046875 0.6871815025806427001953125 0.296331010758876800537109375 +-0.0496606506407260908653178432814 -0.425788637995719920770198996252 -0.136885946989059453793302623126 +-0.0496606506407260908653178432814 0.425788637995719920770198996252 -0.136885946989059453793302623126 +-0.0496517509222030653526225307814 0 -0.00589094981551170366468328509768 +-0.0496450480073690400550923129686 -0.530548182129859990929787727509 0.372229018807411216052116742503 +-0.0496450480073690400550923129686 0.530548182129859990929787727509 0.372229018807411216052116742503 +-0.0496177487075328826904296875 -0.600796946883201621325554242503 -0.243066205084323888607755748126 +-0.0496177487075328826904296875 0.600796946883201621325554242503 -0.243066205084323888607755748126 +-0.0495569497346878065635600307814 -0.00595384985208511404580766779304 -0.00294289998710155513081399014652 +-0.0495569497346878065635600307814 0.00595384985208511404580766779304 -0.00294289998710155513081399014652 +-0.0495157510042190593391175923443 -0.0059877000749111175537109375 0.00351249985396862030029296875 +-0.0495157510042190593391175923443 0.0059877000749111175537109375 0.00351249985396862030029296875 +-0.0495038002729415935188050923443 0 0.00702679976820945809135032789072 +-0.0494880497455596965461488423443 -0.00405705012381076847438610144536 -0.00587150007486343401136297259768 +-0.0494880497455596965461488423443 0.00405705012381076847438610144536 -0.00587150007486343401136297259768 +-0.0494874000549316434005575615629 -0.403559106588363636358707253748 -0.192849299311637883969083873126 +-0.0494874000549316434005575615629 0.403559106588363636358707253748 -0.192849299311637883969083873126 +-0.0493844509124755914886151231258 -0.00782160013914108380450596058608 0 +-0.0493844509124755914886151231258 0.00782160013914108380450596058608 0 +-0.0493639513850212055534605326557 -0.131901302933692926577791126874 0.0516260996460914597938618442186 +-0.0493639513850212055534605326557 0.131901302933692926577791126874 0.0516260996460914597938618442186 +-0.0493357509374618558029013115629 -0.00411610007286071759996515240232 0.00700294971466064453125 +-0.0493357509374618558029013115629 0.00411610007286071759996515240232 0.00700294971466064453125 +-0.049305498600006103515625 -0.0749783992767334012130575615629 -0.0441271990537643460372763115629 +-0.049305498600006103515625 0.0749783992767334012130575615629 -0.0441271990537643460372763115629 +-0.0492912493646144866943359375 -0.15170525014400482177734375 -0.1924992501735687255859375 +-0.0492912493646144866943359375 0.15170525014400482177734375 -0.1924992501735687255859375 +-0.0492024004459381131271200615629 -0.0651852011680602999588174384371 -0.182565200328826920950220369377 +-0.0492024004459381131271200615629 0.0651852011680602999588174384371 -0.182565200328826920950220369377 +-0.0491995498538017259071430942186 -0.117856496572494501284822376874 0.0786719977855682289780148153113 +-0.0491995498538017259071430942186 0.117856496572494501284822376874 0.0786719977855682289780148153113 +-0.04919535107910633087158203125 -0.248602044582366954461605246252 -0.371856147050857566149772992503 +-0.04919535107910633087158203125 0.248602044582366954461605246252 -0.371856147050857566149772992503 +-0.0491690993309021051604901231258 -0.00203384999185800578389016202152 -0.00884665027260780369167125769536 +-0.0491690993309021051604901231258 0.00203384999185800578389016202152 -0.00884665027260780369167125769536 +-0.0491627991199493422080912807814 -0.0274688988924026503135600307814 0.0826345980167388916015625 +-0.0491627991199493422080912807814 0.0274688988924026503135600307814 0.0826345980167388916015625 +-0.0491546005010604913909588731258 -0.0662838995456695584396200615629 -0.0564824998378753717620526231258 +-0.0491546005010604913909588731258 0.0662838995456695584396200615629 -0.0564824998378753717620526231258 +-0.0491207502782344818115234375 -0.2071104943752288818359375 0.1311199963092803955078125 +-0.0491207502782344818115234375 0.2071104943752288818359375 0.1311199963092803955078125 +-0.049108751118183135986328125 -0.117727749049663543701171875 0.21500824391841888427734375 +-0.049108751118183135986328125 0.117727749049663543701171875 0.21500824391841888427734375 +-0.0490633010864257868011151231258 -0.0868534028530120877364950615629 0.00701979994773864815482689039072 +-0.0490633010864257868011151231258 0.0868534028530120877364950615629 0.00701979994773864815482689039072 +-0.0490417510271072346061949076557 -0.0727803021669387734116085653113 0.121646699309349057283036188437 +-0.0490417510271072346061949076557 0.0727803021669387734116085653113 0.121646699309349057283036188437 +-0.0490084998309612274169921875 -0.4414165019989013671875 0.22967250645160675048828125 +-0.0490084998309612274169921875 0.4414165019989013671875 0.22967250645160675048828125 +-0.0490065485239028972297425923443 -0.00798055008053779636745250769536 -0.00588789992034435306911266394536 +-0.0490065485239028972297425923443 0.00798055008053779636745250769536 -0.00588789992034435306911266394536 +-0.0490018010139465359786825615629 -0.0869724988937378012954226846887 -0.00588279999792575870876110144536 +-0.0490018010139465359786825615629 0.0869724988937378012954226846887 -0.00588279999792575870876110144536 +-0.0489726975560188237945880018742 -0.6913816034793853759765625 0.0979446962475776644607705634371 +-0.0489726975560188237945880018742 0.6913816034793853759765625 0.0979446962475776644607705634371 +-0.0489695996046066311935263115629 -0.684266376495361372533920985006 0.411560821533203169408920985006 +-0.0489695996046066311935263115629 0.684266376495361372533920985006 0.411560821533203169408920985006 +-0.0489612013101577772666850307814 -0.176992797851562522204460492503 -0.0792234003543853815276776231258 +-0.0489612013101577772666850307814 0.176992797851562522204460492503 -0.0792234003543853815276776231258 +-0.0489478513598442036003355326557 -0.0355623006820678724815287807814 0.137256753444671614206029630623 +-0.0489478513598442036003355326557 0.0355623006820678724815287807814 0.137256753444671614206029630623 +-0.0489291012287139948089276231258 -0.00986360013484954833984375 -0.00294139999896287935438055072268 +-0.0489291012287139948089276231258 0.00986360013484954833984375 -0.00294139999896287935438055072268 +-0.0489021003246307428558026231258 -0.0066740997135639190673828125 -0.0869714975357055719573651231258 +-0.0489021003246307428558026231258 0.0066740997135639190673828125 -0.0869714975357055719573651231258 +-0.0488995015621185302734375 -0.562814182043075539318977007497 -0.321479596197605133056640625 +-0.0488995015621185302734375 0.562814182043075539318977007497 -0.321479596197605133056640625 +-0.04889500141143798828125 -0.366023004055023193359375 -0.92931997776031494140625 +-0.04889500141143798828125 0.366023004055023193359375 -0.92931997776031494140625 +-0.0488819986581802423675213731258 -0.00991119965910911698836471828145 0.00350989997386932407741344519536 +-0.0488819986581802423675213731258 0.00991119965910911698836471828145 0.00350989997386932407741344519536 +-0.0488817505538463592529296875 -0.09647549688816070556640625 -0.22539524734020233154296875 +-0.0488817505538463592529296875 0.09647549688816070556640625 -0.22539524734020233154296875 +-0.048852749168872833251953125 -0.0856703996658325223068075615629 -0.113022145628929135408036188437 +-0.048852749168872833251953125 0.0856703996658325223068075615629 -0.113022145628929135408036188437 +-0.04885055124759674072265625 -0.00605955012142658268337047644536 -0.00876960009336471592311657019536 +-0.04885055124759674072265625 0.00605955012142658268337047644536 -0.00876960009336471592311657019536 +-0.0488456010818481486945863423443 -0.00805020034313201973685814039072 0.0070215500891208648681640625 +-0.0488456010818481486945863423443 0.00805020034313201973685814039072 0.0070215500891208648681640625 +-0.0488328009843826335578675923443 -0.00206505004316568383307406442384 0.010540150105953216552734375 +-0.0488328009843826335578675923443 0.00206505004316568383307406442384 0.010540150105953216552734375 +-0.0487727489322423921058735629686 -0.408399540185928333624332253748 0.503319704532623313220085492503 +-0.0487727489322423921058735629686 0.408399540185928333624332253748 0.503319704532623313220085492503 +-0.0487583991140127168129048129686 -0.440338495373725880011051003748 -0.0788953475654125269134198106258 +-0.0487583991140127168129048129686 0.440338495373725880011051003748 -0.0788953475654125269134198106258 +-0.048750400543212890625 -0.0855337023735046469985476846887 -0.0175322994589805596088449846093 +-0.048750400543212890625 0.0855337023735046469985476846887 -0.0175322994589805596088449846093 +-0.0487368017435073838661274692186 -0.149998497962951643502904630623 -0.255196201801300037725894753748 +-0.0487368017435073838661274692186 0.149998497962951643502904630623 -0.255196201801300037725894753748 +-0.0487096514552831719169212476572 -0.386267760396003745348991742503 -0.388490286469459544793636496252 +-0.0487096514552831719169212476572 0.386267760396003745348991742503 -0.388490286469459544793636496252 +-0.04870904982089996337890625 -0.117964500188827509097322376874 -0.0788149505853652926345986884371 +-0.04870904982089996337890625 0.117964500188827509097322376874 -0.0788149505853652926345986884371 +-0.0487085014581680325607138115629 -0.0848026990890503040709802462516 0.0208802998065948514083700615629 +-0.0487085014581680325607138115629 0.0848026990890503040709802462516 0.0208802998065948514083700615629 +-0.0486185491085052504112162807814 -0.0116720996797084822227397182814 0 +-0.0486185491085052504112162807814 0.0116720996797084822227397182814 0 +-0.0485935509204864501953125 0 -0.011775650084018707275390625 +-0.0485096007585525540450888115629 -0.00613995008170604723157781634768 0.0104460999369621280324915701954 +-0.0485096007585525540450888115629 0.00613995008170604723157781634768 0.0104460999369621280324915701954 +-0.0484950006008148248870526231258 -0.0780201017856597955901776231258 0.03951080143451690673828125 +-0.0484950006008148248870526231258 0.0780201017856597955901776231258 0.03951080143451690673828125 +-0.0484511986374855027626118442186 -0.14911399781703948974609375 0.682215088605880648486845529987 +-0.0484511986374855027626118442186 0.14911399781703948974609375 0.682215088605880648486845529987 +-0.0484459012746810968597088731258 -0.0516115009784698514083700615629 0.0706345975399017417251101846887 +-0.0484459012746810968597088731258 0.0516115009784698514083700615629 0.0706345975399017417251101846887 +-0.0484355509281158488898988423443 -0.00402860008180141483669078894536 -0.0117373496294021616853653355861 +-0.0484355509281158488898988423443 0.00402860008180141483669078894536 -0.0117373496294021616853653355861 +-0.0483987003564834566970986884371 0 -0.698324894905090309826789507497 +-0.0483942002058029216438050923443 -0.148944604396820085012720369377 -0.124392402172088634149105246252 +-0.0483942002058029216438050923443 0.148944604396820085012720369377 -0.124392402172088634149105246252 +-0.0483894981443881988525390625 -0.2821240127086639404296875 0.409956514835357666015625 +-0.0483894981443881988525390625 0.2821240127086639404296875 0.409956514835357666015625 +-0.0483696505427360506912393134371 -0.33286924660205841064453125 0.0967389464378356905838174384371 +-0.0483696505427360506912393134371 0.33286924660205841064453125 0.0967389464378356905838174384371 +-0.0483689516782760606239399692186 -0.148861645162105538098273882497 0.31305049359798431396484375 +-0.0483689516782760606239399692186 0.148861645162105538098273882497 0.31305049359798431396484375 +-0.0483164995908737168739399692186 -0.128977051377296453305021373126 -0.0594175502657890292068643134371 +-0.0483164995908737168739399692186 0.128977051377296453305021373126 -0.0594175502657890292068643134371 +-0.048312000930309295654296875 -0.28031599521636962890625 0.95869100093841552734375 +-0.048312000930309295654296875 0.28031599521636962890625 0.95869100093841552734375 +-0.0482831999659538227409605326557 0 -0.346653649210929837298778011245 +-0.048257000744342803955078125 -0.2448565065860748291015625 -0.014714750461280345916748046875 +-0.048257000744342803955078125 0.2448565065860748291015625 -0.014714750461280345916748046875 +-0.0482187986373901408820863423443 -0.0118541501462459571147878278907 -0.0058674998581409454345703125 +-0.0482187986373901408820863423443 0.0118541501462459571147878278907 -0.0058674998581409454345703125 +-0.0482060998678207411338725307814 -0.00996640026569366524467064039072 -0.00876609981060028076171875 +-0.0482060998678207411338725307814 0.00996640026569366524467064039072 -0.00876609981060028076171875 +-0.0482008989900350598434286553129 -0.267138858139514934197933371252 -0.478344351053237970550213731258 +-0.0482008989900350598434286553129 0.267138858139514934197933371252 -0.478344351053237970550213731258 +-0.0481615006923675550987162807814 -0.0400965005159378065635600307814 -0.0779277980327606201171875 +-0.0481615006923675550987162807814 0.0400965005159378065635600307814 -0.0779277980327606201171875 +-0.0481530994176864665656800923443 -0.0792648017406463734069177462516 -0.0373946994543075603156800923443 +-0.0481530994176864665656800923443 0.0792648017406463734069177462516 -0.0373946994543075603156800923443 +-0.0481227010488510104080361884371 -0.0199186496436595909809152971093 -0.140667897462844831979467130623 +-0.0481227010488510104080361884371 0.0199186496436595909809152971093 -0.140667897462844831979467130623 +-0.0481219999492168426513671875 -0.790108025074005126953125 -0.61107599735260009765625 +-0.0481219999492168426513671875 0.790108025074005126953125 -0.61107599735260009765625 +-0.048077099025249481201171875 -0.108475801348686215486161188437 0.2755385935306549072265625 +-0.048077099025249481201171875 0.108475801348686215486161188437 0.2755385935306549072265625 +-0.0480483502149581936935263115629 -0.0119336999952793128276784528907 0.00699604973196983354749578509768 +-0.0480483502149581936935263115629 0.0119336999952793128276784528907 0.00699604973196983354749578509768 +-0.0480473019182681981842364393742 -0.29899100959300994873046875 -0.631106692552566461706931022491 +-0.0480473019182681981842364393742 0.29899100959300994873046875 -0.631106692552566461706931022491 +-0.0480327494442462921142578125 -0.24471299350261688232421875 0.01756249926984310150146484375 +-0.0480327494442462921142578125 0.24471299350261688232421875 0.01756249926984310150146484375 +-0.0480006992816925104339276231258 -0.0136851504445075992238978201954 -0.0029408000409603118896484375 +-0.0480006992816925104339276231258 0.0136851504445075992238978201954 -0.0029408000409603118896484375 +-0.0479983001947403009612713731258 0 0.0140058502554893504060684605861 +-0.0479907006025314317176899692186 -0.0197963990271091440364958913278 -0.2954742014408111572265625 +-0.0479907006025314317176899692186 0.0197963990271091440364958913278 -0.2954742014408111572265625 +-0.0479799013584852260261293110943 -0.326381841301918051989616742503 0.306059843301773104595753238755 +-0.0479799013584852260261293110943 0.326381841301918051989616742503 0.306059843301773104595753238755 +-0.04796265065670013427734375 -0.00803100019693374703178001539072 -0.0116227500140666968608815778907 +-0.04796265065670013427734375 0.00803100019693374703178001539072 -0.0116227500140666968608815778907 +-0.0479519993066787747482138115629 -0.020036600530147552490234375 -0.0854349970817566001235476846887 +-0.0479519993066787747482138115629 0.020036600530147552490234375 -0.0854349970817566001235476846887 +-0.0479484498500823974609375 -0.0137345001101493845857559605861 0.00350884981453418757710305264652 +-0.0479484498500823974609375 0.0137345001101493845857559605861 0.00350884981453418757710305264652 +-0.047939099371433258056640625 -0.2273789942264556884765625 0.1897383034229278564453125 +-0.047939099371433258056640625 0.2273789942264556884765625 0.1897383034229278564453125 +-0.0479198008775711115081463731258 -0.0620235979557037381271200615629 -0.0621028006076812799651776231258 +-0.0479198008775711115081463731258 0.0620235979557037381271200615629 -0.0621028006076812799651776231258 +-0.0478520005941391046722088731258 -0.0100593000650405894197403355861 0.0104400999844074249267578125 +-0.0478520005941391046722088731258 0.0100593000650405894197403355861 0.0104400999844074249267578125 +-0.0478504002094268798828125 -0.0672313988208770724197549384371 0.0564826011657714871505575615629 +-0.0478504002094268798828125 0.0672313988208770724197549384371 0.0564826011657714871505575615629 +-0.0478386014699935940841513115629 -0.00407500006258487701416015625 0.0139592498540878299367884451954 +-0.0478386014699935940841513115629 0.00407500006258487701416015625 0.0139592498540878299367884451954 +-0.0478078514337539686729350307814 -0.00203210003674030329975930264652 -0.01450105011463165283203125 +-0.0478078514337539686729350307814 0.00203210003674030329975930264652 -0.01450105011463165283203125 +-0.047765247523784637451171875 -0.147009752690792083740234375 -0.7338982522487640380859375 +-0.047765247523784637451171875 0.147009752690792083740234375 -0.7338982522487640380859375 +-0.0477643996477127089073100307814 -0.147001004219055181332365123126 0.126922202110290538445980246252 +-0.0477643996477127089073100307814 0.147001004219055181332365123126 0.126922202110290538445980246252 +-0.0477093499153852448890766879686 -0.628317934274673528527443977509 -0.159501551836729066335962556877 +-0.0477093499153852448890766879686 0.628317934274673528527443977509 -0.159501551836729066335962556877 +-0.0476444005966186537315287807814 -0.317057991027832053454460492503 -0.23917400836944580078125 +-0.0476444005966186537315287807814 0.317057991027832053454460492503 -0.23917400836944580078125 +-0.0476219996809959383865518134371 -0.211193400621414173468082253748 -0.207676506042480474301115123126 +-0.0476219996809959383865518134371 0.211193400621414173468082253748 -0.207676506042480474301115123126 +-0.04755289852619171142578125 -0.0154506504535675062705912807814 0 +-0.04755289852619171142578125 0.0154506504535675062705912807814 0 +-0.0475456010550260529945454379686 -0.0345440002158284159561318915621 0.847965943813323907995993522491 +-0.0475456010550260529945454379686 0.0345440002158284159561318915621 0.847965943813323907995993522491 +-0.0475250989198684678505024692186 -0.672830903530120760791533029987 0.187189093232154823986945757497 +-0.0475250989198684678505024692186 0.672830903530120760791533029987 0.187189093232154823986945757497 +-0.0475110009312629741340394673443 -0.619366478919982976769631477509 0.6512508094310760498046875 +-0.0475110009312629741340394673443 0.619366478919982976769631477509 0.6512508094310760498046875 +-0.0474896490573883112151776231258 -0.00605709999799728445596391779304 -0.0144237995147705085063893903907 +-0.0474896490573883112151776231258 0.00605709999799728445596391779304 -0.0144237995147705085063893903907 +-0.04745550267398357391357421875 -0.62276624143123626708984375 -0.41522325575351715087890625 +-0.04745550267398357391357421875 0.62276624143123626708984375 -0.41522325575351715087890625 +-0.0474343478679656940788511576557 -0.106065148115158075503572376874 0.09486915171146392822265625 +-0.0474343478679656940788511576557 0.106065148115158075503572376874 0.09486915171146392822265625 +-0.047364749014377593994140625 -0.3361904919147491455078125 0.66875477135181427001953125 +-0.047364749014377593994140625 0.3361904919147491455078125 0.66875477135181427001953125 +-0.0473606497049331720550213731258 -0.00812290012836456264133655480464 0.0138198003172874464561381557814 +-0.0473606497049331720550213731258 0.00812290012836456264133655480464 0.0138198003172874464561381557814 +-0.04725579917430877685546875 -0.0133689001202583323396622105861 -0.00938955023884773323783470289072 +-0.04725579917430877685546875 0.0133689001202583323396622105861 -0.00938955023884773323783470289072 +-0.0472546011209487928916850307814 -0.10224020481109619140625 -0.165269398689270041735710492503 +-0.0472546011209487928916850307814 0.10224020481109619140625 -0.165269398689270041735710492503 +-0.04724229872226715087890625 -0.317040154337882962298778011245 0.140548099577426893747045255623 +-0.04724229872226715087890625 0.317040154337882962298778011245 0.140548099577426893747045255623 +-0.0471888005733490031867738423443 -0.0342842012643814128547425923443 0.0812268972396850696959802462516 +-0.0471888005733490031867738423443 0.0342842012643814128547425923443 0.0812268972396850696959802462516 +-0.0471886007115244823784117045307 -0.511271584033965997839743522491 -0.677403229475021295691306022491 +-0.0471886007115244823784117045307 0.511271584033965997839743522491 -0.677403229475021295691306022491 +-0.0471852019429206820388955634371 -0.0488290518522262531608824076557 -0.133750802278518682308927623126 +-0.0471852019429206820388955634371 0.0488290518522262531608824076557 -0.133750802278518682308927623126 +-0.0471755504608154310752787807814 -0.015260450541973114013671875 -0.00644854977726936392373735529304 +-0.0471755504608154310752787807814 0.015260450541973114013671875 -0.00644854977726936392373735529304 +-0.0471563994884490952919087192186 -0.145134450495243066958650501874 -0.42333479225635528564453125 +-0.0471563994884490952919087192186 0.145134450495243066958650501874 -0.42333479225635528564453125 +-0.04715240001678466796875 -0.198573994636535661184595369377 0.344013190269470248150440738755 +-0.04715240001678466796875 0.198573994636535661184595369377 0.344013190269470248150440738755 +-0.0471406023949384675453266879686 -0.643785348534584023205695757497 -0.0762774981558322906494140625 +-0.0471406023949384675453266879686 0.643785348534584023205695757497 -0.0762774981558322906494140625 +-0.0471358507871627863128338731258 -0.0153827503323554996145228201954 0.00644854977726936392373735529304 +-0.0471358507871627863128338731258 0.0153827503323554996145228201954 0.00644854977726936392373735529304 +-0.0471015013754367828369140625 -0.144961206614971166439786998126 0.423400050401687655377003238755 +-0.0471015013754367828369140625 0.144961206614971166439786998126 0.423400050401687655377003238755 +-0.0471007496118545573859925923443 -0.0114448502659797671926478201954 -0.0122692503035068522371231480861 +-0.0471007496118545573859925923443 0.0114448502659797671926478201954 -0.0122692503035068522371231480861 +-0.0470948994159698514083700615629 -0.0135311499238014235069194057814 0.00994869992136955365313877308608 +-0.0470948994159698514083700615629 0.0135311499238014235069194057814 0.00994869992136955365313877308608 +-0.0470754012465476948112730326557 -0.598150205612182572778579014994 0 +-0.0470754012465476948112730326557 0.598150205612182572778579014994 0 +-0.04698044992983341217041015625 -0.43756605684757232666015625 0.0939613491296768243987713731258 +-0.04698044992983341217041015625 0.43756605684757232666015625 0.0939613491296768243987713731258 +-0.0469438999891281169563050923443 0 -0.017212450504302978515625 +-0.0469403978437185273597798129686 -0.424769783020019553454460492503 -0.489762631058692943231136496252 +-0.0469403978437185273597798129686 0.424769783020019553454460492503 -0.489762631058692943231136496252 +-0.046930499374866485595703125 -0.2963064014911651611328125 0 +-0.046930499374866485595703125 -0.112407597899436953459151311563 -0.0875332474708557101150674384371 +-0.046930499374866485595703125 0.112407597899436953459151311563 -0.0875332474708557101150674384371 +-0.046930499374866485595703125 0.2963064014911651611328125 0 +-0.0469000011682510417609925923443 -0.00206250008195638665289828317384 0.01720865070819854736328125 +-0.0469000011682510417609925923443 0.00206250008195638665289828317384 0.01720865070819854736328125 +-0.0468774497509002741058026231258 -0.0171422004699707045127787807814 0.0029408000409603118896484375 +-0.0468774497509002741058026231258 0.0171422004699707045127787807814 0.0029408000409603118896484375 +-0.0468641489744186443000550923443 -0.0170715495944023139263112653907 -0.00350884981453418757710305264652 +-0.0468641489744186443000550923443 0.0170715495944023139263112653907 -0.00350884981453418757710305264652 +-0.0468490485101938289314027485943 -0.337243956327438365594417746252 -0.294231140613555930407585492503 +-0.0468490485101938289314027485943 0.337243956327438365594417746252 -0.294231140613555930407585492503 +-0.04683800041675567626953125 -0.1975415050983428955078125 -0.145888745784759521484375 +-0.04683800041675567626953125 0.1975415050983428955078125 -0.145888745784759521484375 +-0.0468196481466293321083149692186 -0.124071452021598804815738503748 0.0701014503836631802657919365629 +-0.0468196481466293321083149692186 0.124071452021598804815738503748 0.0701014503836631802657919365629 +-0.046790599822998046875 -0.0669372022151947104751101846887 0.182565200328826920950220369377 +-0.046790599822998046875 0.0669372022151947104751101846887 0.182565200328826920950220369377 +-0.0467893511056900052169638115629 -0.00405424982309341482705766779304 -0.0171557992696762078022043596093 +-0.0467893511056900052169638115629 0.00405424982309341482705766779304 -0.0171557992696762078022043596093 +-0.0467561990022659357268963731258 -0.011622600257396697998046875 0.0133706003427505500102956403907 +-0.0467561990022659357268963731258 0.011622600257396697998046875 0.0133706003427505500102956403907 +-0.0467343986034393366058026231258 -0.170527195930480962582365123126 0.0934686005115509116469851846887 +-0.0467343986034393366058026231258 0.170527195930480962582365123126 0.0934686005115509116469851846887 +-0.0467281013727188151984925923443 -0.081752002239227294921875 0.03366149961948394775390625 +-0.0467281013727188151984925923443 0.081752002239227294921875 0.03366149961948394775390625 +-0.0466995507478714030891175923443 -0.00937149971723556622638096058608 -0.0152094498276710513723353201954 +-0.0466995507478714030891175923443 0.00937149971723556622638096058608 -0.0152094498276710513723353201954 +-0.0466892004013061551193075615629 -0.194474005699157737048210492503 0 +-0.0466892004013061551193075615629 0.194474005699157737048210492503 0 +-0.0466876000165939372688050923443 -0.0830358028411865289886151231258 -0.0304190993309021023849325615629 +-0.0466876000165939372688050923443 0.0830358028411865289886151231258 -0.0304190993309021023849325615629 +-0.046662248671054840087890625 -0.2416607439517974853515625 -0.0438482500612735748291015625 +-0.046662248671054840087890625 0.2416607439517974853515625 -0.0438482500612735748291015625 +-0.0466399505734443609039630018742 -0.0687435001134872325501135037484 -0.3399983942508697509765625 +-0.0466399505734443609039630018742 0.0687435001134872325501135037484 -0.3399983942508697509765625 +-0.0466001987457275376747212192186 -0.078797399997711181640625 -0.285691201686859130859375 +-0.0466001987457275376747212192186 0.078797399997711181640625 -0.285691201686859130859375 +-0.0465772986412048353721537807814 -0.00613639988005161302747625384768 0.0171142995357513420795481096093 +-0.0465772986412048353721537807814 0.00613639988005161302747625384768 0.0171142995357513420795481096093 +-0.0465656012296676649619975307814 0 -0.0884966015815734918792401231258 +-0.04650320112705230712890625 -0.116389203071594241056807561563 0.155855798721313498766960492503 +-0.04650320112705230712890625 0.116389203071594241056807561563 0.155855798721313498766960492503 +-0.0464662998914718641807475307814 -0.0583684980869293226768412807814 0.0665883004665374783614950615629 +-0.0464662998914718641807475307814 0.0583684980869293226768412807814 0.0665883004665374783614950615629 +-0.0464502513408660833160723768742 -0.347721853852272000384715511245 -0.882853978872299105518095529987 +-0.0464502513408660833160723768742 0.347721853852272000384715511245 -0.882853978872299105518095529987 +-0.0464430984109640149215536553129 -0.142938953638076793328792746252 -0.529066437482833884509147992503 +-0.0464430984109640149215536553129 0.142938953638076793328792746252 -0.529066437482833884509147992503 +-0.0464394986629486083984375 -0.0574454009532928480674662807814 -0.0674048006534576499282351846887 +-0.0464394986629486083984375 0.0574454009532928480674662807814 -0.0674048006534576499282351846887 +-0.0463855013251304598709268134371 -0.641369402408599853515625 0.27657561004161834716796875 +-0.0463855013251304598709268134371 0.641369402408599853515625 0.27657561004161834716796875 +-0.0463814996182918548583984375 -0.17611624300479888916015625 0.17126524448394775390625 +-0.0463814996182918548583984375 0.17611624300479888916015625 0.17126524448394775390625 +-0.04635255038738250732421875 -0.142658400535583484991519753748 0 +-0.04635255038738250732421875 0.142658400535583484991519753748 0 +-0.046294949948787689208984375 -0.0778881043195724515060263115629 -0.119541746377944943513504938437 +-0.046294949948787689208984375 0.0778881043195724515060263115629 -0.119541746377944943513504938437 +-0.0462917983531951904296875 -0.08286179602146148681640625 0.116150701045989984683259876874 +-0.0462917983531951904296875 0.08286179602146148681640625 0.116150701045989984683259876874 +-0.0461940497159957913497763115629 -0.01913399994373321533203125 0 +-0.0461940497159957913497763115629 0.01913399994373321533203125 0 +-0.0461867988109588636924662807814 -0.182241600751876814401342130623 0.233783698081970192639289507497 +-0.0461867988109588636924662807814 0.182241600751876814401342130623 0.233783698081970192639289507497 +-0.0461573012173175784012002509371 -0.234362089633941644839509876874 0.255819898843765269891292746252 +-0.0461573012173175784012002509371 0.234362089633941644839509876874 0.255819898843765269891292746252 +-0.0461223006248474148849325615629 -0.421221587061882007940738503748 0.151476748287677764892578125 +-0.0461223006248474148849325615629 0.421221587061882007940738503748 0.151476748287677764892578125 +-0.0460953503847122206260600307814 -0.00958885028958320756453659328145 0.0168307006359100334857981096093 +-0.0460953503847122206260600307814 0.00958885028958320756453659328145 0.0168307006359100334857981096093 +-0.0460889011621475261359925923443 -0.0169602006673812873149831403907 0.00938955023884773323783470289072 +-0.0460889011621475261359925923443 0.0169602006673812873149831403907 0.00938955023884773323783470289072 +-0.0460732489824295099456463731258 -0.00737060010433197073526079279304 -0.0179702997207641622379181711722 +-0.0460732489824295099456463731258 0.00737060010433197073526079279304 -0.0179702997207641622379181711722 +-0.0460541486740112318565287807814 -0.0167344003915786757041850307814 -0.00994869992136955365313877308608 +-0.0460541486740112318565287807814 0.0167344003915786757041850307814 -0.00994869992136955365313877308608 +-0.0460295990109443678428569057814 -0.141664946079254144839509876874 -0.0176728494465351083919646413278 +-0.0460295990109443678428569057814 0.141664946079254144839509876874 -0.0176728494465351083919646413278 +-0.0459973990917205838302450615629 -0.0148001000285148624074915701954 -0.012852899730205535888671875 +-0.0459973990917205838302450615629 0.0148001000285148624074915701954 -0.012852899730205535888671875 +-0.045994199812412261962890625 -0.290783149003982499536391514994 -0.189287355542182900158820757497 +-0.045994199812412261962890625 0.290783149003982499536391514994 -0.189287355542182900158820757497 +-0.0459901005029678400237713731258 -0.0334136992692947373817524692186 -0.0822704970836639487563601846887 +-0.0459901005029678400237713731258 0.0334136992692947373817524692186 -0.0822704970836639487563601846887 +-0.0459891021251678452919087192186 -0.0457810521125793443153462192186 0.135237148404121404476896373126 +-0.0459891021251678452919087192186 0.0457810521125793443153462192186 0.135237148404121404476896373126 +-0.0459776997566223172286825615629 -0.0187517002224922187114675153907 0.0058674998581409454345703125 +-0.0459776997566223172286825615629 0.0187517002224922187114675153907 0.0058674998581409454345703125 +-0.0459120512008667006065287807814 -0.015062749385833740234375 0.012852899730205535888671875 +-0.0459120512008667006065287807814 0.015062749385833740234375 0.012852899730205535888671875 +-0.0459111988544464166839276231258 -0.396659207344055186883480246252 -0.0235311999917030348350444057814 +-0.0459111988544464166839276231258 0.396659207344055186883480246252 -0.0235311999917030348350444057814 +-0.045908999629318714141845703125 -0.6414997279644012451171875 0.3858382701873779296875 +-0.045908999629318714141845703125 0.6414997279644012451171875 0.3858382701873779296875 +-0.0458964008837938267082456889057 -0.266300195455551114154246761245 0.910756450891494706567641514994 +-0.0458964008837938267082456889057 0.266300195455551114154246761245 0.910756450891494706567641514994 +-0.0458928018808364840408486884371 -0.141242551803588856085269753748 0.0210803993046283708046040317186 +-0.0458928018808364840408486884371 0.141242551803588856085269753748 0.0210803993046283708046040317186 +-0.0458864986896514934211488423443 -0.0185872003436088582828400461722 -0.00699604973196983354749578509768 +-0.0458864986896514934211488423443 0.0185872003436088582828400461722 -0.00699604973196983354749578509768 +-0.0458651006221771281867738423443 -0.00203200001269578925042202932616 -0.0198056995868682861328125 +-0.0458651006221771281867738423443 0.00203200001269578925042202932616 -0.0198056995868682861328125 +-0.0458525985479354900031800923443 -0.04155910015106201171875 0.0785516977310180691818075615629 +-0.0458525985479354900031800923443 0.04155910015106201171875 0.0785516977310180691818075615629 +-0.0458405017852783203125 -0.386285006999969482421875 0.3141374886035919189453125 +-0.0458405017852783203125 0.386285006999969482421875 0.3141374886035919189453125 +-0.0458261981606483473350444057814 -0.489736783504486072882144753748 0.343596017360687233654914507497 +-0.0458261981606483473350444057814 0.489736783504486072882144753748 0.343596017360687233654914507497 +-0.04580099880695343017578125 -0.554581797122955300061164507497 -0.224368804693222040347322376874 +-0.04580099880695343017578125 0.554581797122955300061164507497 -0.224368804693222040347322376874 +-0.0457542501389980316162109375 -0.240163505077362060546875 0.0522307492792606353759765625 +-0.0457542501389980316162109375 0.240163505077362060546875 0.0522307492792606353759765625 +-0.0457361996173858698089276231258 -0.193278598785400407278345369377 -0.0234861999750137356857138115629 +-0.0457361996173858698089276231258 0.193278598785400407278345369377 -0.0234861999750137356857138115629 +-0.0457158999517559977432412665621 -0.750602623820304848401008257497 -0.580522197484970026160056022491 +-0.0457158999517559977432412665621 0.750602623820304848401008257497 -0.580522197484970026160056022491 +-0.0456842988729476984222088731258 -0.0127588495612144473684290701954 -0.0158163502812385566020925153907 +-0.0456842988729476984222088731258 0.0127588495612144473684290701954 -0.0158163502812385566020925153907 +-0.0456615000963211115081463731258 0 0.0203722998499870321109650461722 +-0.0456205993890762342979350307814 -0.14040839672088623046875 -0.134923005104064935855134876874 +-0.0456205993890762342979350307814 0.14040839672088623046875 -0.134923005104064935855134876874 +-0.0455953985452652033050213731258 -0.0132083997130393992341934605861 -0.19428479671478271484375 +-0.0455953985452652033050213731258 0.0132083997130393992341934605861 -0.19428479671478271484375 +-0.0455889489501714734176474053129 -0.212698754668235789910823996252 0.50515408813953399658203125 +-0.0455889489501714734176474053129 0.212698754668235789910823996252 0.50515408813953399658203125 +-0.0455067992210388197471537807814 -0.00411204993724822998046875 0.020303249359130859375 +-0.0455067992210388197471537807814 0.00411204993724822998046875 0.020303249359130859375 +-0.0455009996891021784026776231258 -0.0879342973232269398131677462516 0.0140432000160217295564590855861 +-0.0455009996891021784026776231258 0.0879342973232269398131677462516 0.0140432000160217295564590855861 +-0.0454746477305889157394247490629 -0.64199720323085784912109375 0.0909486465156078421889773721887 +-0.0454746477305889157394247490629 0.64199720323085784912109375 0.0909486465156078421889773721887 +-0.0454677999019622858245526231258 -0.0882836997509002796569177462516 -0.0117758996784687042236328125 +-0.0454677999019622858245526231258 0.0882836997509002796569177462516 -0.0117758996784687042236328125 +-0.0454328000545501722862162807814 -0.396418404579162608758480246252 0.0280791997909545926193075615629 +-0.0454328000545501722862162807814 0.396418404579162608758480246252 0.0280791997909545926193075615629 +-0.04540260136127471923828125 -0.0130773499608039869834819057814 0.0163580507040023796772043596093 +-0.04540260136127471923828125 0.0130773499608039869834819057814 0.0163580507040023796772043596093 +-0.0453990995883941650390625 -0.0891005992889404296875 0 +-0.0453990995883941650390625 0.0891005992889404296875 0 +-0.0453823000192642225791850307814 -0.0207796499133110074142294365629 0.00294139999896287935438055072268 +-0.0453823000192642225791850307814 0.0207796499133110074142294365629 0.00294139999896287935438055072268 +-0.0453737489879131317138671875 -0.07400000095367431640625 0.23444674909114837646484375 +-0.0453737489879131317138671875 0.07400000095367431640625 0.23444674909114837646484375 +-0.0453721493482589777190838731258 -0.0207134500145912184287944057814 -0.00350989997386932407741344519536 +-0.0453721493482589777190838731258 0.0207134500145912184287944057814 -0.00350989997386932407741344519536 +-0.0453238010406494182258363423443 -0.192772197723388688528345369377 0.028011798858642578125 +-0.0453238010406494182258363423443 -0.0727953016757965087890625 0.0514450013637542738487162807814 +-0.0453238010406494182258363423443 0.0727953016757965087890625 0.0514450013637542738487162807814 +-0.0453238010406494182258363423443 0.192772197723388688528345369377 0.028011798858642578125 +-0.0453225016593933119346537807814 -0.294444894790649391858039507497 -0.0353273995220661149452290317186 +-0.0453225016593933119346537807814 0.294444894790649391858039507497 -0.0353273995220661149452290317186 +-0.0453155003488063812255859375 -0.073705501854419708251953125 0.4924570024013519287109375 +-0.0453155003488063812255859375 0.073705501854419708251953125 0.4924570024013519287109375 +-0.04530175030231475830078125 -0.032913498580455780029296875 -0.24364824593067169189453125 +-0.04530175030231475830078125 0.032913498580455780029296875 -0.24364824593067169189453125 +-0.04529400169849395751953125 -0.032908000051975250244140625 -0.4968554973602294921875 +-0.04529400169849395751953125 0.032908000051975250244140625 -0.4968554973602294921875 +-0.0452138006687164348273988423443 -0.00532465018332004599160844904304 -0.0206726998090744039371369211722 +-0.0452138006687164348273988423443 0.00532465018332004599160844904304 -0.0206726998090744039371369211722 +-0.04520495235919952392578125 -0.2953674495220184326171875 0.182248851656913735119758257497 +-0.04520495235919952392578125 0.2953674495220184326171875 0.182248851656913735119758257497 +-0.04516024887561798095703125 -0.00757734999060630850381548029304 0.0200782001018524197677450615629 +-0.04516024887561798095703125 0.00757734999060630850381548029304 0.0200782001018524197677450615629 +-0.04513800144195556640625 -0.519520783424377463610710492503 -0.2967503964900970458984375 +-0.04513800144195556640625 0.519520783424377463610710492503 -0.2967503964900970458984375 +-0.0451327502727508558799662807814 -0.0106510497629642500450053432814 -0.0186972498893737786029856096093 +-0.0451327502727508558799662807814 0.0106510497629642500450053432814 -0.0186972498893737786029856096093 +-0.0450857996940612834602113423443 -0.0528159976005554213096537807814 -0.187557196617126470394865123126 +-0.0450857996940612834602113423443 0.0528159976005554213096537807814 -0.187557196617126470394865123126 +-0.0450602509081363677978515625 -0.13868375122547149658203125 -0.203067243099212646484375 +-0.0450602509081363677978515625 0.13868375122547149658203125 -0.203067243099212646484375 +-0.0450484514236450181434712192186 -0.13864575326442718505859375 -0.0353272497653961195518412807814 +-0.0450484514236450181434712192186 0.13864575326442718505859375 -0.0353272497653961195518412807814 +-0.0450209990143775953819194057814 -0.376984190940856944695980246252 0.464602804183959938733039507497 +-0.0450209990143775953819194057814 0.376984190940856944695980246252 0.464602804183959938733039507497 +-0.0449903987348079723029847798443 -0.138462997972965240478515625 0.633485439419746443334702235006 +-0.0449903987348079723029847798443 0.138462997972965240478515625 0.633485439419746443334702235006 +-0.0449692502617835970779580634371 -0.106344750523567191380358565311 -0.0957526534795761080642861884371 +-0.0449692502617835970779580634371 0.106344750523567191380358565311 -0.0957526534795761080642861884371 +-0.0449416503310203566123881557814 0 -0.648444545269012517785256477509 +-0.0449297010898590115646200615629 -0.0133070006966590891755997105861 -0.0883417010307312039474325615629 +-0.0449297010898590115646200615629 0.0133070006966590891755997105861 -0.0883417010307312039474325615629 +-0.0449185013771057142784037807814 -0.0862667977809906116881677462516 -0.023245699703693389892578125 +-0.0449185013771057142784037807814 0.0862667977809906116881677462516 -0.023245699703693389892578125 +-0.0448763996362686184982138115629 -0.0526988029479980510383363423443 -0.39396560192108154296875 +-0.0448763996362686184982138115629 0.0526988029479980510383363423443 -0.39396560192108154296875 +-0.0448715008795261341423277201557 -0.584957230091094904089743522491 0.61507020890712738037109375 +-0.0448715008795261341423277201557 0.584957230091094904089743522491 0.61507020890712738037109375 +-0.044857800006866455078125 -0.0202714502811431884765625 0.00876614972949027980442249230464 +-0.044857800006866455078125 0.0202714502811431884765625 0.00876614972949027980442249230464 +-0.0448325514793396009971537807814 -0.0184256494045257589176056711722 0.0122693002223968512798268903907 +-0.0448325514793396009971537807814 0.0184256494045257589176056711722 0.0122693002223968512798268903907 +-0.0448076993227005046516175923443 -0.0744723975658416748046875 -0.04945839941501617431640625 +-0.0448076993227005046516175923443 0.0744723975658416748046875 -0.04945839941501617431640625 +-0.0447968006134033258636151231258 0 0.194918596744537375720085492503 +-0.0447896003723144559005575615629 0 0.397484397888183627056690738755 +-0.0447488009929657010177450615629 -0.0325120002031326280067524692186 0.798085594177246115954460492503 +-0.0447488009929657010177450615629 0.0325120002031326280067524692186 0.798085594177246115954460492503 +-0.0447216004133224528938050923443 -0.0850647985935211181640625 0.0276396989822387702251393903907 +-0.0447216004133224528938050923443 0.0850647985935211181640625 0.0276396989822387702251393903907 +-0.0447212487459182767013388115629 0 -0.022360749542713165283203125 +-0.0447210997343063382247763115629 -0.0525726974010467529296875 -0.0723612010478973388671875 +-0.0447210997343063382247763115629 0.0525726974010467529296875 -0.0723612010478973388671875 +-0.0447210013866424574424662807814 0 0.0894429028034210288344851846887 +-0.0446707516908645616005024692186 -0.00998489968478679691676891394536 -0.142845448851585371530248380623 +-0.0446707516908645616005024692186 0.00998489968478679691676891394536 -0.142845448851585371530248380623 +-0.0446582496166229303558026231258 -0.0180794507265090963199494211722 -0.0133706003427505500102956403907 +-0.0446582496166229303558026231258 0.0180794507265090963199494211722 -0.0133706003427505500102956403907 +-0.0446512013673782404143963731258 -0.0161142006516456597065012346093 0.19428479671478271484375 +-0.0446512013673782404143963731258 0.0161142006516456597065012346093 0.19428479671478271484375 +-0.0446420013904571533203125 -0.0324339985847473186164613423443 0.396175599098205599712940738755 +-0.0446420013904571533203125 0.0324339985847473186164613423443 0.396175599098205599712940738755 +-0.0446270987391471848915180942186 -0.2936553061008453369140625 0.0421296000480651869346537807814 +-0.0446270987391471848915180942186 0.2936553061008453369140625 0.0421296000480651869346537807814 +-0.0446258991956710870940838731258 -0.0199882507324218756938893903907 -0.0104400999844074249267578125 +-0.0446258991956710870940838731258 0.0199882507324218756938893903907 -0.0104400999844074249267578125 +-0.0446153517812490491012411553129 -0.277634508907794952392578125 -0.586027643084526039807258257497 +-0.0446153517812490491012411553129 0.277634508907794952392578125 -0.586027643084526039807258257497 +-0.044593751430511474609375 -0.011005699634552001953125 0.0197553500533103956748881557814 +-0.044593751430511474609375 0.011005699634552001953125 0.0197553500533103956748881557814 +-0.0445831000804901150802450615629 -0.0078458003699779510498046875 0.0891672015190124594985476846887 +-0.0445831000804901150802450615629 0.0078458003699779510498046875 0.0891672015190124594985476846887 +-0.0445808976888656602333149692186 -0.13720910251140594482421875 -0.684971702098846391137954014994 +-0.0445808976888656602333149692186 0.13720910251140594482421875 -0.684971702098846391137954014994 +-0.044570751488208770751953125 -0.23518550395965576171875 -0.072119496762752532958984375 +-0.044570751488208770751953125 0.23518550395965576171875 -0.072119496762752532958984375 +-0.0445504009723663371711488423443 -0.0226993501186370863487162807814 0 +-0.0445504009723663371711488423443 0.0226993501186370863487162807814 0 +-0.0445432007312774672080912807814 -0.189239597320556646176115123126 -0.0469498008489608806281800923443 +-0.0445432007312774672080912807814 0.189239597320556646176115123126 -0.0469498008489608806281800923443 +-0.04453749954700469970703125 -0.223231256008148193359375 -0.103364251554012298583984375 +-0.04453749954700469970703125 0.223231256008148193359375 -0.103364251554012298583984375 +-0.044497199356555938720703125 -0.136947146058082586117521373126 0.0420176982879638671875 +-0.044497199356555938720703125 0.136947146058082586117521373126 0.0420176982879638671875 +-0.0444589495658874525596537807814 -0.0165300995111465447162668596093 0.0158163994550704969932475307814 +-0.0444589495658874525596537807814 0.0165300995111465447162668596093 0.0158163994550704969932475307814 +-0.0444182485342025784591513115629 -0.0161069005727767951274831403907 -0.0163580507040023796772043596093 +-0.0444182485342025784591513115629 0.0161069005727767951274831403907 -0.0163580507040023796772043596093 +-0.0444128006696701063682475307814 -0.481196784973144553454460492503 -0.637555980682373069079460492503 +-0.0444128006696701063682475307814 0.481196784973144553454460492503 -0.637555980682373069079460492503 +-0.0443446010351181071906800923443 -0.00862649977207183803196155480464 -0.021427549421787261962890625 +-0.0443446010351181071906800923443 0.00862649977207183803196155480464 -0.021427549421787261962890625 +-0.0443381488323211711555238423443 -0.022348649799823760986328125 0.00588789992034435306911266394536 +-0.0443381488323211711555238423443 0.022348649799823760986328125 0.00588789992034435306911266394536 +-0.0443345010280609130859375 -0.212007939815521240234375 -0.27493129670619964599609375 +-0.0443345010280609130859375 0.212007939815521240234375 -0.27493129670619964599609375 +-0.0442918024957179995437783759371 -0.5812484920024871826171875 -0.387541705369949307513621761245 +-0.0442918024957179995437783759371 0.5812484920024871826171875 -0.387541705369949307513621761245 +-0.0442815013229846954345703125 -0.3511525094509124755859375 -0.3531729876995086669921875 +-0.0442815013229846954345703125 0.3511525094509124755859375 -0.3531729876995086669921875 +-0.04425419867038726806640625 -0.0486234009265899685958700615629 0.0753480017185211292662927462516 +-0.04425419867038726806640625 0.0486234009265899685958700615629 0.0753480017185211292662927462516 +-0.0442488491535186767578125 -0.0221976995468139669254181711722 -0.0070215500891208648681640625 +-0.0442488491535186767578125 0.0221976995468139669254181711722 -0.0070215500891208648681640625 +-0.0442151993513107341438050923443 -0.0321238011121749919563050923443 0.192387795448303228207365123126 +-0.0442151993513107341438050923443 0.0321238011121749919563050923443 0.192387795448303228207365123126 +-0.0442070990800857502311949076557 -0.313777792453765858038394753748 0.624171119928359940942641514994 +-0.0442070990800857502311949076557 0.313777792453765858038394753748 0.624171119928359940942641514994 +-0.04418019950389862060546875 -0.064740598201751708984375 0.0621028006076812799651776231258 +-0.04418019950389862060546875 0.064740598201751708984375 0.0621028006076812799651776231258 +-0.0441704005002975519378338731258 -0.0156432002782821676090119211722 0.0883418023586273193359375 +-0.0441704005002975519378338731258 0.0156432002782821676090119211722 0.0883418023586273193359375 +-0.0441556990146637004523988423443 -0.00206240005791187303724187884768 0.0233670502901077298263388115629 +-0.0441556990146637004523988423443 0.00206240005791187303724187884768 0.0233670502901077298263388115629 +-0.044155351817607879638671875 -0.03962235152721405029296875 -0.13776929676532745361328125 +-0.044155351817607879638671875 0.03962235152721405029296875 -0.13776929676532745361328125 +-0.0441428005695343045333700615629 -0.378478789329528830798210492503 -0.121676397323608409539730246252 +-0.0441428005695343045333700615629 0.378478789329528830798210492503 -0.121676397323608409539730246252 +-0.0441365003585815485198651231258 -0.00328784994781017303466796875 -0.0232628002762794508506694057814 +-0.0441365003585815485198651231258 0.00328784994781017303466796875 -0.0232628002762794508506694057814 +-0.0441304489970207255988832173443 -0.624771553277969404760483485006 0.173818443715572368279964621252 +-0.0441304489970207255988832173443 0.624771553277969404760483485006 0.173818443715572368279964621252 +-0.0441076498478651032875141879686 -0.39727485179901123046875 0.206705255806446080990568248126 +-0.0441076498478651032875141879686 0.39727485179901123046875 0.206705255806446080990568248126 +-0.0440393999218940748741069057814 -0.579985785484313898230368522491 -0.147232201695442183053685880623 +-0.0440393999218940748741069057814 0.579985785484313898230368522491 -0.147232201695442183053685880623 +-0.0440055012702941922286825615629 -0.329420703649520862921207253748 -0.836387979984283491674545985006 +-0.0440055012702941922286825615629 0.329420703649520862921207253748 -0.836387979984283491674545985006 +-0.0439890481531619997879190009371 -0.0893116027116775401673010037484 0.335541850328445412365852007497 +-0.0439890481531619997879190009371 0.0893116027116775401673010037484 0.335541850328445412365852007497 +-0.0439888000488281305511151231258 -0.358719205856323275494190738755 -0.171421599388122569695980246252 +-0.0439888000488281305511151231258 0.358719205856323275494190738755 -0.171421599388122569695980246252 +-0.0439626008272171048263388115629 -0.0771835982799530112563601846887 0.0459345012903213528732138115629 +-0.0439626008272171048263388115629 0.0771835982799530112563601846887 0.0459345012903213528732138115629 +-0.04395414888858795166015625 -0.0140158504247665412212331403907 -0.0192765995860099820236044365629 +-0.04395414888858795166015625 0.0140158504247665412212331403907 -0.0192765995860099820236044365629 +-0.0439307510852813762336488423443 -0.00551914982497692108154296875 0.0232299000024795559982138115629 +-0.0439307510852813762336488423443 0.00551914982497692108154296875 0.0232299000024795559982138115629 +-0.0439172498881816864013671875 -0.13516099750995635986328125 0.205676496028900146484375 +-0.0439172498881816864013671875 0.13516099750995635986328125 0.205676496028900146484375 +-0.0438957512378692626953125 -0.081215001642704010009765625 -0.2323299944400787353515625 +-0.0438957512378692626953125 0.081215001642704010009765625 -0.2323299944400787353515625 +-0.0438189990818500518798828125 -0.24285350739955902099609375 -0.434858500957489013671875 +-0.0438189990818500518798828125 0.24285350739955902099609375 -0.434858500957489013671875 +-0.0438149988651275676398988423443 -0.0790167987346649253188601846887 -0.0428553998470306424239950615629 +-0.0438149988651275676398988423443 0.0790167987346649253188601846887 -0.0428553998470306424239950615629 +-0.0437980502843856867034588731258 -0.0144962504506111148488978201954 0.0192766502499580397178569057814 +-0.0437980502843856867034588731258 0.0144962504506111148488978201954 0.0192766502499580397178569057814 +-0.04372920095920562744140625 -0.220979595184326194079460492503 -0.330538797378540083471420985006 +-0.04372920095920562744140625 0.220979595184326194079460492503 -0.330538797378540083471420985006 +-0.0436874985694885309417401231258 -0.0708966016769409235198651231258 -0.0553631007671356242805238423443 +-0.0436874985694885309417401231258 0.0708966016769409235198651231258 -0.0553631007671356242805238423443 +-0.0436857014894485445877236884371 -0.0562286987900733961631694057814 0.291427195072174072265625 +-0.0436857014894485445877236884371 0.0562286987900733961631694057814 0.291427195072174072265625 +-0.0436298012733459528167401231258 -0.187025797367095958367855246252 0.0558372020721435574630575615629 +-0.0436298012733459528167401231258 0.187025797367095958367855246252 0.0558372020721435574630575615629 +-0.0436240009963512406776509067186 -0.134263503551483143194644753748 -0.320265758037567127569644753748 +-0.0436240009963512406776509067186 0.134263503551483143194644753748 -0.320265758037567127569644753748 +-0.0435921013355255182464276231258 -0.0243118494749069227744975307814 0.00294295009225606927008578317384 +-0.0435921013355255182464276231258 0.0243118494749069227744975307814 0.00294295009225606927008578317384 +-0.04357869923114776611328125 -0.0242602497339248664165456403907 -0.00351249985396862030029296875 +-0.04357869923114776611328125 0.0242602497339248664165456403907 -0.00351249985396862030029296875 +-0.0435714006423950223068075615629 -0.0265516012907028205181081403907 -0.0860032021999359158614950615629 +-0.0435714006423950223068075615629 0.0265516012907028205181081403907 -0.0860032021999359158614950615629 +-0.0435665979981422410438618442186 -0.11405999958515167236328125 0.0871334999799728421310263115629 +-0.0435665979981422410438618442186 0.11405999958515167236328125 0.0871334999799728421310263115629 +-0.0435505483299493817428427178129 -0.253911611437797557488948996252 0.368960863351821932720753238755 +-0.0435505483299493817428427178129 0.253911611437797557488948996252 0.368960863351821932720753238755 +-0.0435434989631175994873046875 -0.1874452531337738037109375 -0.15958775579929351806640625 +-0.0435434989631175994873046875 0.1874452531337738037109375 -0.15958775579929351806640625 +-0.0435232490301132243781800923443 -0.0216941505670547492290456403907 0.0116227999329566959035853201954 +-0.0435232490301132243781800923443 0.0216941505670547492290456403907 0.0116227999329566959035853201954 +-0.0435188993811607346962055942186 -0.133938896656036365850894753748 -0.0516377985477447509765625 +-0.0435188993811607346962055942186 0.133938896656036365850894753748 -0.0516377985477447509765625 +-0.0435144022107124342491069057814 -0.594263398647308371813835492503 -0.07040999829769134521484375 +-0.0435144022107124342491069057814 0.594263398647308371813835492503 -0.07040999829769134521484375 +-0.04349569976329803466796875 -0.00897964984178543056125842980464 0.0229671999812126187423544365629 +-0.04349569976329803466796875 0.00897964984178543056125842980464 0.0229671999812126187423544365629 +-0.0434854000806808513313050923443 -0.023344099521636962890625 0.086971700191497802734375 +-0.0434854000806808513313050923443 0.023344099521636962890625 0.086971700191497802734375 +-0.0434808008372783647010884067186 -0.252284395694732654913394753748 0.862821900844573996813835492503 +-0.0434808008372783647010884067186 0.252284395694732654913394753748 0.862821900844573996813835492503 +-0.0434561982750892653037944057814 -0.240903300046920759713842130623 0.173427897691726673468082253748 +-0.0434561982750892653037944057814 0.240903300046920759713842130623 0.173427897691726673468082253748 +-0.0433635011315345736404580634371 -0.276575392484664894787727007497 -0.107822397351264948062166126874 +-0.0433635011315345736404580634371 0.276575392484664894787727007497 -0.107822397351264948062166126874 +-0.0433407992124557536750550923443 -0.391411995887756380962940738755 -0.0701291978359222384353799384371 +-0.0433407992124557536750550923443 0.391411995887756380962940738755 -0.0701291978359222384353799384371 +-0.0433404505252838190276776231258 -0.00656000003218650852565563269536 -0.0240535005927085890342631557814 +-0.0433404505252838190276776231258 0.00656000003218650852565563269536 -0.0240535005927085890342631557814 +-0.0433295980095863356162944057814 -0.392095184326171852795539507497 -0.452088582515716541632144753748 +-0.0433295980095863356162944057814 0.392095184326171852795539507497 -0.452088582515716541632144753748 +-0.0433097999542951597740092495314 -0.711097222566604680871193977509 -0.549968397617340065686164507497 +-0.0433097999542951597740092495314 0.711097222566604680871193977509 -0.549968397617340065686164507497 +-0.0432893007993698161750550923443 -0.0198672503232955946494975307814 0.0152095496654510511924662807814 +-0.0432893007993698161750550923443 0.0198672503232955946494975307814 0.0152095496654510511924662807814 +-0.0432725012302398737151776231258 -0.0118613496422767649568497105861 -0.0220634996891021749332306711722 +-0.0432725012302398737151776231258 0.0118613496422767649568497105861 -0.0220634996891021749332306711722 +-0.0431985005736350985428018134371 -0.0681386992335319546798544365629 -0.126455551385879522152677623126 +-0.0431985005736350985428018134371 0.0681386992335319546798544365629 -0.126455551385879522152677623126 +-0.0431676015257835346550230326557 -0.132858601212501509225560880623 -0.265490394830703746453792746252 +-0.0431676015257835346550230326557 0.132858601212501509225560880623 -0.265490394830703746453792746252 +-0.0431524511426687254478373745314 -0.548304355144500821239716970013 0 +-0.0431524511426687254478373745314 0.548304355144500821239716970013 0 +-0.0430983021855354322959819057814 -0.288581407070159889904914507497 -0.0697367995977401650131710653113 +-0.0430983021855354322959819057814 0.288581407070159889904914507497 -0.0697367995977401650131710653113 +-0.0430902004241943414886151231258 -0.0212660998106002814556081403907 -0.0138198003172874464561381557814 +-0.0430902004241943414886151231258 0.0212660998106002814556081403907 -0.0138198003172874464561381557814 +-0.0430828005075454753547425923443 -0.023811049759387969970703125 0.0087696500122547149658203125 +-0.0430828005075454753547425923443 0.023811049759387969970703125 0.0087696500122547149658203125 +-0.0430722512304782881309428432814 -0.5955573022365570068359375 0.256820209324359893798828125 +-0.0430722512304782881309428432814 0.5955573022365570068359375 0.256820209324359893798828125 +-0.0430682003498077392578125 0 -0.0253993511199951185752787807814 +-0.0430350020527839674522319057814 -0.0928852468729019081772335653113 0.109637099504470827970870061563 +-0.0430350020527839674522319057814 0.0928852468729019081772335653113 0.109637099504470827970870061563 +-0.0430011987686157240440287807814 -0.0464210003614425673057475307814 -0.0774338006973266657073651231258 +-0.0430011987686157240440287807814 0.0464210003614425673057475307814 -0.0774338006973266657073651231258 +-0.0429936021566390963455361884371 -0.196984505653381353207365123126 -0.222145503759384160824552623126 +-0.0429936021566390963455361884371 0.196984505653381353207365123126 -0.222145503759384160824552623126 +-0.0429282009601593059211488423443 -0.019336350262165069580078125 -0.0168307006359100334857981096093 +-0.0429282009601593059211488423443 0.019336350262165069580078125 -0.0168307006359100334857981096093 +-0.0429222017526626545280699076557 -0.259478098154067970959602007497 -0.14432220160961151123046875 +-0.0429222017526626545280699076557 0.259478098154067970959602007497 -0.14432220160961151123046875 +-0.0429174005985260009765625 -0.0888920009136199978927450615629 -0.17394340038299560546875 +-0.0429174005985260009765625 0.0888920009136199978927450615629 -0.17394340038299560546875 +-0.0428635507822036770919638115629 -0.0123660996556282046926478201954 0.0225786998867988607242462961722 +-0.0428635507822036770919638115629 0.0123660996556282046926478201954 0.0225786998867988607242462961722 +-0.0428541511297226007659588731258 -0.0235457003116607693771200615629 -0.0104461498558521270751953125 +-0.0428541511297226007659588731258 0.0235457003116607693771200615629 -0.0104461498558521270751953125 +-0.0428483996540307970901650946871 -0.598733079433441117700454014994 0.360115718841552689966079014994 +-0.0428483996540307970901650946871 0.598733079433441117700454014994 0.360115718841552689966079014994 +-0.0428037017583847018142861884371 -0.0994256973266601506988848768742 -0.103838253021240237150557561563 +-0.0428037017583847018142861884371 0.0994256973266601506988848768742 -0.103838253021240237150557561563 +-0.0427908003330230712890625 -0.0557613015174865736534037807814 0.13251270353794097900390625 +-0.0427908003330230712890625 0.0557613015174865736534037807814 0.13251270353794097900390625 +-0.0427859984338283538818359375 -0.230969250202178955078125 0.08557175099849700927734375 +-0.0427859984338283538818359375 0.230969250202178955078125 0.08557175099849700927734375 +-0.0427738010883331326583700615629 -0.0179112002253532416606862653907 0.0186973497271537801578400461722 +-0.0427738010883331326583700615629 0.0179112002253532416606862653907 0.0186973497271537801578400461722 +-0.0427439004182815565635600307814 -0.006670899689197540283203125 -0.0901579022407531793792401231258 +-0.0427439004182815565635600307814 0.006670899689197540283203125 -0.0901579022407531793792401231258 +-0.0426488012075424208213725307814 -0.290117192268371570929019753748 0.272053194046020518914730246252 +-0.0426488012075424208213725307814 0.290117192268371570929019753748 0.272053194046020518914730246252 +-0.0426320999860763591438050923443 -0.0261247992515563978721537807814 0 +-0.0426320999860763591438050923443 0.0261247992515563978721537807814 0 +-0.0426288008689880426604901231258 -0.13120019435882568359375 -0.144807803630828874075220369377 +-0.0426288008689880426604901231258 0.13120019435882568359375 -0.144807803630828874075220369377 +-0.0426280014216899871826171875 -0.13119900226593017578125 -0.990438997745513916015625 +-0.0426280014216899871826171875 0.13119900226593017578125 -0.990438997745513916015625 +-0.0425478011369705214073100307814 -0.0667499005794525146484375 -0.0611075997352600111534037807814 +-0.0425478011369705214073100307814 0.0667499005794525146484375 -0.0611075997352600111534037807814 +-0.0425462007522583035568075615629 -0.0173075497150421142578125 -0.0197552993893623379806356865629 +-0.0425462007522583035568075615629 0.0173075497150421142578125 -0.0197552993893623379806356865629 +-0.04253239929676055908203125 0 0.0262867987155914334396200615629 +-0.0425323009490966852386151231258 -0.0309011012315750129009206403907 0.0850654006004333551604901231258 +-0.0425323009490966852386151231258 0.0309011012315750129009206403907 0.0850654006004333551604901231258 +-0.0424944996833801283409037807814 -0.0830811023712158258636151231258 -0.0359407991170883206466513115629 +-0.0424944996833801283409037807814 0.0830811023712158258636151231258 -0.0359407991170883206466513115629 +-0.04247780144214630126953125 -0.07995259761810302734375 0.178334605693817149774105246252 +-0.04247780144214630126953125 0.07995259761810302734375 0.178334605693817149774105246252 +-0.0424306005239486749847088731258 -0.00345700010657310494513461129884 0.0262239009141922024825888115629 +-0.0424306005239486749847088731258 0.00345700010657310494513461129884 0.0262239009141922024825888115629 +-0.0424219012260437025596537807814 -0.0553366005420684869964276231258 0.0716816008090972872635049384371 +-0.0424219012260437025596537807814 0.0553366005420684869964276231258 0.0716816008090972872635049384371 +-0.0424214512109756525237713731258 -0.0258058995008468641807475307814 0.00587154999375343392142845289072 +-0.0424214512109756525237713731258 0.0258058995008468641807475307814 0.00587154999375343392142845289072 +-0.0424143999814987210372763115629 -0.00329084992408752458753484759768 -0.0262714505195617703536825615629 +-0.0424143999814987210372763115629 0.00329084992408752458753484759768 -0.0262714505195617703536825615629 +-0.0424104005098342937141175923443 -0.183008599281311051809595369377 -0.068623602390289306640625 +-0.0424104005098342937141175923443 0.183008599281311051809595369377 -0.068623602390289306640625 +-0.042397201061248779296875 -0.157178604602813742907585492503 0.116177999973297127467297684689 +-0.042397201061248779296875 0.157178604602813742907585492503 0.116177999973297127467297684689 +-0.04238300025463104248046875 -0.517965018749237060546875 0.854350984096527099609375 +-0.04238300025463104248046875 0.517965018749237060546875 0.854350984096527099609375 +-0.042337000370025634765625 -0.00980070009827613969344284328145 -0.024729050695896148681640625 +-0.042337000370025634765625 0.00980070009827613969344284328145 -0.024729050695896148681640625 +-0.0423329502344131497482138115629 -0.0256686508655548095703125 -0.00700294971466064453125 +-0.0423329502344131497482138115629 0.0256686508655548095703125 -0.00700294971466064453125 +-0.0423310518264770480056924384371 -0.130279648303985584600894753748 0.0611170515418052659462055942186 +-0.0423310518264770480056924384371 0.130279648303985584600894753748 0.0611170515418052659462055942186 +-0.0423240005970001234580912807814 -0.0812165975570678794204226846887 0.04015649855136871337890625 +-0.0423240005970001234580912807814 0.0812165975570678794204226846887 0.04015649855136871337890625 +-0.0422320008277893080284037807814 -0.550547981262207053454460492503 0.5788896083831787109375 +-0.0422320008277893080284037807814 0.550547981262207053454460492503 0.5788896083831787109375 +-0.042228899896144866943359375 -0.00610140021890401805515491417964 0.143803650140762323550447376874 +-0.042228899896144866943359375 0.00610140021890401805515491417964 0.143803650140762323550447376874 +-0.0422209985554218292236328125 -0.129944503307342529296875 -0.480969488620758056640625 +-0.0422209985554218292236328125 0.129944503307342529296875 -0.480969488620758056640625 +-0.0421257495880126980880575615629 -0.00689750015735626255397594519536 0.0260354489088058492496369211722 +-0.0421257495880126980880575615629 0.00689750015735626255397594519536 0.0260354489088058492496369211722 +-0.0420509986579418182373046875 -0.010160249657928943634033203125 0.24622850120067596435546875 +-0.0420509986579418182373046875 0.010160249657928943634033203125 0.24622850120067596435546875 +-0.04204680025577545166015625 -0.171969199180603049548210492503 -0.0930519998073577880859375 +-0.04204680025577545166015625 0.171969199180603049548210492503 -0.0930519998073577880859375 +-0.0420175999402999933440838731258 -0.129314398765563970394865123126 0.146670794486999517269865123126 +-0.0420175999402999933440838731258 0.129314398765563970394865123126 0.146670794486999517269865123126 +-0.0420082479715347262283486884371 -0.0181784994900226586078684221093 0.1428456008434295654296875 +-0.0420082479715347262283486884371 0.0181784994900226586078684221093 0.1428456008434295654296875 +-0.0420073483139276546149964985943 -0.448925384879112265856804242503 0.314963015913963362280014735006 +-0.0420073483139276546149964985943 0.448925384879112265856804242503 0.314963015913963362280014735006 +-0.0419919013977050822883363423443 -0.0904838979244232261001101846887 0.0070249997079372406005859375 +-0.0419919013977050822883363423443 0.0904838979244232261001101846887 0.0070249997079372406005859375 +-0.0419842489063739776611328125 -0.508366647362709089819077235006 -0.205671404302120219842464621252 +-0.0419842489063739776611328125 0.508366647362709089819077235006 -0.205671404302120219842464621252 +-0.0419803500175476088096537807814 -0.0230130493640899672080912807814 0.014423899352550506591796875 +-0.0419803500175476088096537807814 0.0230130493640899672080912807814 0.014423899352550506591796875 +-0.0419802010059356703330912807814 -0.0158386498689651496196706403907 0.0220635503530502326274831403907 +-0.0419802010059356703330912807814 0.0158386498689651496196706403907 0.0220635503530502326274831403907 +-0.0419765979051589938064736884371 -0.592612802982330322265625 0.0839525967836379921616085653113 +-0.0419765979051589938064736884371 0.592612802982330322265625 0.0839525967836379921616085653113 +-0.0419528990983963068206463731258 -0.0905831992626190268813601846887 -0.00588590018451213854017156634768 +-0.0419528990983963068206463731258 0.0905831992626190268813601846887 -0.00588590018451213854017156634768 +-0.04195200093090534210205078125 -0.030480000190436840057373046875 0.748205244541168212890625 +-0.04195200093090534210205078125 0.030480000190436840057373046875 0.748205244541168212890625 +-0.0419460505247116130500550923443 -0.0151899501681327826763112653907 -0.0225786507129669203330912807814 +-0.0419460505247116130500550923443 0.0151899501681327826763112653907 -0.0225786507129669203330912807814 +-0.0419167995452880901008363423443 -0.129008400440216081106470369377 -0.37629759311676025390625 +-0.0419167995452880901008363423443 0.129008400440216081106470369377 -0.37629759311676025390625 +-0.0418680012226104736328125 -0.128854405879974376336605246252 0.376355600357055675164730246252 +-0.0418680012226104736328125 0.128854405879974376336605246252 0.376355600357055675164730246252 +-0.0418159998953342437744140625 -0.896398007869720458984375 -0.4412719905376434326171875 +-0.0418159998953342437744140625 0.896398007869720458984375 -0.4412719905376434326171875 +-0.0417984992265701335578675923443 -0.0705231010913848904708700615629 0.0572659015655517592002787807814 +-0.0417984992265701335578675923443 0.0705231010913848904708700615629 0.0572659015655517592002787807814 +-0.04176039993762969970703125 -0.38894760608673095703125 0.0835211992263794056334802462516 +-0.04176039993762969970703125 0.38894760608673095703125 0.0835211992263794056334802462516 +-0.0417172998189926161338725307814 -0.0891741991043090848068075615629 -0.017539300024509429931640625 +-0.0417172998189926161338725307814 0.0891741991043090848068075615629 -0.017539300024509429931640625 +-0.0416888505220413194130024692186 -0.277425742149353005139289507497 -0.20927725732326507568359375 +-0.0416888505220413194130024692186 0.277425742149353005139289507497 -0.20927725732326507568359375 +-0.0416847504675388336181640625 -0.030285499989986419677734375 0.2446327507495880126953125 +-0.0416847504675388336181640625 0.030285499989986419677734375 0.2446327507495880126953125 +-0.0416597992181777995734925923443 -0.0884759008884429959396200615629 0.020892299711704254150390625 +-0.0416597992181777995734925923443 0.0884759008884429959396200615629 0.020892299711704254150390625 +-0.0416435986757278456260600307814 -0.299772405624389670641960492503 -0.261538791656494129522769753748 +-0.0416435986757278456260600307814 0.299772405624389670641960492503 -0.261538791656494129522769753748 +-0.041637000627815723419189453125 -0.451121985912322998046875 -0.5977087318897247314453125 +-0.041637000627815723419189453125 0.451121985912322998046875 -0.5977087318897247314453125 +-0.04163224995136260986328125 -0.21743024885654449462890625 0.116149999201297760009765625 +-0.04163224995136260986328125 0.21743024885654449462890625 0.116149999201297760009765625 +-0.0416192501783370985557475307814 -0.010304950177669525146484375 0.0257224500179290792301056711722 +-0.0416192501783370985557475307814 0.010304950177669525146484375 0.0257224500179290792301056711722 +-0.04160650074481964111328125 -0.0211179003119468695903737653907 0.0179703995585441603233256557814 +-0.04160650074481964111328125 0.0211179003119468695903737653907 0.0179703995585441603233256557814 +-0.0415607511997222872635049384371 -0.311119553446769725457698996252 -0.789921981096267655786391514994 +-0.0415607511997222872635049384371 0.311119553446769725457698996252 -0.789921981096267655786391514994 +-0.0415533006191253703742738423443 -0.0252102494239807156661825615629 0.0117374502122402201570450230861 +-0.0415533006191253703742738423443 0.0252102494239807156661825615629 0.0117374502122402201570450230861 +-0.0415426999330520685393963731258 -0.0276684492826461819747763115629 0.00294330008327961002712047644536 +-0.0415426999330520685393963731258 0.0276684492826461819747763115629 0.00294330008327961002712047644536 +-0.0415378987789154080489950615629 -0.00658740028738975542249578509768 -0.0270408511161804206157643903907 +-0.0415378987789154080489950615629 0.00658740028738975542249578509768 -0.0270408511161804206157643903907 +-0.0415300995111465495734925923443 -0.0276208013296127333213725307814 -0.003513149917125701904296875 +-0.0415300995111465495734925923443 0.0276208013296127333213725307814 -0.003513149917125701904296875 +-0.0415295988321304279655699076557 -0.1278119981288909912109375 0.584755790233612016137954014994 +-0.0415295988321304279655699076557 0.1278119981288909912109375 0.584755790233612016137954014994 +-0.0414846003055572495887837192186 0 -0.598564195632934503699118522491 +-0.0414597004652023301551899692186 -0.2853164970874786376953125 0.0829190969467163002670773153113 +-0.0414597004652023301551899692186 0.2853164970874786376953125 0.0829190969467163002670773153113 +-0.0414591014385223347038511576557 -0.127595695853233326300113503748 0.2683289945125579833984375 +-0.0414591014385223347038511576557 0.127595695853233326300113503748 0.2683289945125579833984375 +-0.0414577513933181776573100307814 -0.127595999836921686343416126874 -0.067082248628139495849609375 +-0.0414577513933181776573100307814 0.127595999836921686343416126874 -0.067082248628139495849609375 +-0.0414444990456104278564453125 -0.1933625042438507080078125 0.4592309892177581787109375 +-0.0414444990456104278564453125 0.1933625042438507080078125 0.4592309892177581787109375 +-0.0413965478539466899543519673443 -0.127408452332019805908203125 -0.636045151948928855212272992503 +-0.0413965478539466899543519673443 0.127408452332019805908203125 -0.636045151948928855212272992503 +-0.0413855999708175673057475307814 0 -0.297131699323654185906917746252 +-0.0413765013217926025390625 -0.476227384805679332391292746252 -0.272021196782588958740234375 +-0.0413765013217926025390625 0.476227384805679332391292746252 -0.272021196782588958740234375 +-0.0413168996572494534591513115629 -0.0382678002119064344932475307814 0.0826346993446350208678552462516 +-0.0413168996572494534591513115629 0.0382678002119064344932475307814 0.0826346993446350208678552462516 +-0.0412887990474700983245526231258 -0.022412799298763275146484375 -0.0171142995357513420795481096093 +-0.0412887990474700983245526231258 0.022412799298763275146484375 -0.0171142995357513420795481096093 +-0.0412692490965127986579652485943 -0.345568841695785555767628238755 0.425885903835296675268295985006 +-0.0412692490965127986579652485943 0.345568841695785555767628238755 0.425885903835296675268295985006 +-0.04125835001468658447265625 -0.173752245306968672311498380623 0.301011541485786404681590511245 +-0.04125835001468658447265625 0.173752245306968672311498380623 0.301011541485786404681590511245 +-0.0412564516067504896690287807814 -0.347656506299972523077457253748 0.28272373974323272705078125 +-0.0412564516067504896690287807814 0.347656506299972523077457253748 0.28272373974323272705078125 +-0.0412203997373580960372763115629 0 -0.195706200599670421258480246252 +-0.0412090003490448025802450615629 0 -0.0283163994550704976871369211722 +-0.0411834016442298861404580634371 -0.2562780082225799560546875 -0.540948593616485617907585492503 +-0.0411834016442298861404580634371 0.2562780082225799560546875 -0.540948593616485617907585492503 +-0.0411531016230583177040180942186 -0.0298990510404109934017302663278 0.14111159741878509521484375 +-0.0411531016230583177040180942186 0.0298990510404109934017302663278 0.14111159741878509521484375 +-0.0411531001329422038703675923443 -0.06222879886627197265625 -0.0665883004665374783614950615629 +-0.0411531001329422038703675923443 0.06222879886627197265625 -0.0665883004665374783614950615629 +-0.04113090038299560546875 -0.0129944995045661940147319057814 -0.0252862006425857571700888115629 +-0.04113090038299560546875 0.0129944995045661940147319057814 -0.0252862006425857571700888115629 +-0.0411281023174524321128764370314 -0.53973074257373809814453125 -0.359860154986381519659488503748 +-0.0411281023174524321128764370314 0.53973074257373809814453125 -0.359860154986381519659488503748 +-0.0411040484905242919921875 -0.0298638001084327690815012346093 -0.141133350133895857370092130623 +-0.0411040484905242919921875 0.0298638001084327690815012346093 -0.141133350133895857370092130623 +-0.0410975486040115398078675923443 -0.0248219504952430745914337961722 -0.0139593005180358893657643903907 +-0.0410975486040115398078675923443 0.0248219504952430745914337961722 -0.0139593005180358893657643903907 +-0.0410652007907629026939311245314 -0.238268595933914167916967130623 0.814887350797653176037727007497 +-0.0410652007907629026939311245314 0.238268595933914167916967130623 0.814887350797653176037727007497 +-0.0410494491457939134071430942186 -0.291365092992782626080128238755 0.579587468504905722888054242503 +-0.0410494491457939134071430942186 0.291365092992782626080128238755 0.579587468504905722888054242503 +-0.0409976005554199274261151231258 -0.374419188499450716900440738755 0.134645998477935791015625 +-0.0409976005554199274261151231258 0.374419188499450716900440738755 0.134645998477935791015625 +-0.0409952014684677179534588731258 -0.03996039927005767822265625 -0.0819913029670715359786825615629 +-0.0409952014684677179534588731258 0.03996039927005767822265625 -0.0819913029670715359786825615629 +-0.040989898145198822021484375 0 -0.144290846586227400338842130623 +-0.0409893512725830119758363423443 -0.0204141497611999532535431711722 -0.0200782001018524197677450615629 +-0.0409893512725830119758363423443 0.0204141497611999532535431711722 -0.0200782001018524197677450615629 +-0.040974199771881103515625 -0.0272552490234375006938893903907 0.008846700191497802734375 +-0.040974199771881103515625 0.0272552490234375006938893903907 0.008846700191497802734375 +-0.0409461498260498060752787807814 -0.0190858006477355977847931711722 0.0214276492595672635177450615629 +-0.0409461498260498060752787807814 0.0190858006477355977847931711722 0.0214276492595672635177450615629 +-0.0409135997295379666427450615629 -0.0136630997061729445030131557814 0.0252862989902496344829518903907 +-0.0409135997295379666427450615629 0.0136630997061729445030131557814 0.0252862989902496344829518903907 +-0.0409036999568343148658833285936 -0.671591821312904291296774772491 -0.519414597749710105212272992503 +-0.0409036999568343148658833285936 0.671591821312904291296774772491 -0.519414597749710105212272992503 +-0.04087150096893310546875 -0.0865871012210845947265625 -0.02884779870510101318359375 +-0.04087150096893310546875 0.0865871012210845947265625 -0.02884779870510101318359375 +-0.0407839503139257458785849053129 -0.0663349516689777374267578125 0.44321130216121673583984375 +-0.0407839503139257458785849053129 0.0663349516689777374267578125 0.44321130216121673583984375 +-0.0407700002193450983245526231258 -0.0396770000457763727386151231258 -0.191738200187683116570980246252 +-0.0407700002193450983245526231258 0.0396770000457763727386151231258 -0.191738200187683116570980246252 +-0.0407646015286445631553569057814 -0.0296172000467777273013947336722 -0.447169947624206531866519753748 +-0.0407646015286445631553569057814 0.0296172000467777273013947336722 -0.447169947624206531866519753748 +-0.0407357990741729694694761576557 -0.576712203025817826684829014994 0.160447794198989857061832253748 +-0.0407357990741729694694761576557 0.576712203025817826684829014994 0.160447794198989857061832253748 +-0.0407204508781433133224325615629 -0.0270323991775512709190287807814 -0.0105402000248432173301615932814 +-0.0407204508781433133224325615629 0.0270323991775512709190287807814 -0.0105402000248432173301615932814 +-0.0406803011894226115852113423443 -0.0198578998446464552452006557814 -0.0891672015190124594985476846887 +-0.0406803011894226115852113423443 0.0198578998446464552452006557814 -0.0891672015190124594985476846887 +-0.040646851062774658203125 -0.00206240005791187303724187884768 0.029044449329376220703125 +-0.040646851062774658203125 0.00206240005791187303724187884768 0.029044449329376220703125 +-0.040614001452922821044921875 -0.124998748302459716796875 -0.2126635015010833740234375 +-0.040614001452922821044921875 0.124998748302459716796875 -0.2126635015010833740234375 +-0.0406066000461578410773988423443 -0.17820060253143310546875 0.0812134027481079129318075615629 +-0.0406066000461578410773988423443 0.17820060253143310546875 0.0812134027481079129318075615629 +-0.0405252009630203205436949076557 -0.0665926516056060818771200615629 0.128152647614479059390291126874 +-0.0405252009630203205436949076557 0.0665926516056060818771200615629 0.128152647614479059390291126874 +-0.04050014913082122802734375 -0.0923177987337112371246661268742 -0.111072903871536246556139815311 +-0.04050014913082122802734375 0.0923177987337112371246661268742 -0.111072903871536246556139815311 +-0.0404966013506054892112651089064 -0.124639052152633655889957253748 -0.940917047858238153601462272491 +-0.0404966013506054892112651089064 0.124639052152633655889957253748 -0.940917047858238153601462272491 +-0.0404933989048004150390625 -0.271748703718185435906917746252 0.120469799637794486302233565311 +-0.0404933989048004150390625 0.271748703718185435906917746252 0.120469799637794486302233565311 +-0.0404695987701416057258363423443 -0.00329939983785152443976351754884 -0.0291774988174438483501393903907 +-0.0404695987701416057258363423443 0.00329939983785152443976351754884 -0.0291774988174438483501393903907 +-0.04046694934368133544921875 -0.0183012500405311598350444057814 -0.0229671493172645575786550153907 +-0.04046694934368133544921875 0.0183012500405311598350444057814 -0.0229671493172645575786550153907 +-0.0404635488986969035773988423443 -0.00982054993510246380938877308608 -0.0276814013719558736636994211722 +-0.0404635488986969035773988423443 0.00982054993510246380938877308608 -0.0276814013719558736636994211722 +-0.0404588997364044231086488423443 -0.0848025977611541748046875 0.0342287003993988064864950615629 +-0.0404588997364044231086488423443 0.0848025977611541748046875 0.0342287003993988064864950615629 +-0.0404509007930755615234375 -0.0293891489505767843082306711722 0 +-0.0404509007930755615234375 0.0293891489505767843082306711722 0 +-0.0404310017824172987510600307814 -0.144178202748298650570646373126 -0.00882990024983882834663795335928 +-0.0404310017824172987510600307814 0.144178202748298650570646373126 -0.00882990024983882834663795335928 +-0.0404235988855361980109925923443 -0.00551914982497692108154296875 0.0289045512676239027549662807814 +-0.0404235988855361980109925923443 0.00551914982497692108154296875 0.0289045512676239027549662807814 +-0.0403694499284029048591371235943 -0.531653636693954489977897992503 -0.134962851554155355282560435626 +-0.0403694499284029048591371235943 0.531653636693954489977897992503 -0.134962851554155355282560435626 +-0.0403604000806808485557475307814 -0.0457792013883590725997763115629 0.19046080112457275390625 +-0.0403604000806808485557475307814 0.0457792013883590725997763115629 0.19046080112457275390625 +-0.0403353989124298137336488423443 0 -0.0915044009685516412933026231258 +-0.0403068020939826923698667826557 -0.144098103046417236328125 0.010539449751377105712890625 +-0.0403068020939826923698667826557 0.144098103046417236328125 0.010539449751377105712890625 +-0.040283501148223876953125 -0.0619180023670196574836488423443 0.0674048006534576499282351846887 +-0.040283501148223876953125 0.0619180023670196574836488423443 0.0674048006534576499282351846887 +-0.0402638502418994903564453125 -0.492066767811775163110610264994 0.811633434891700700219985264994 +-0.0402638502418994903564453125 0.492066767811775163110610264994 0.811633434891700700219985264994 +-0.0402365505695343045333700615629 -0.024221800267696380615234375 0.01715590059757232666015625 +-0.0402365505695343045333700615629 0.024221800267696380615234375 0.01715590059757232666015625 +-0.0401722989976406041900958143742 -0.347076806426048267706363503748 -0.0205897999927401528785786410936 +-0.0401722989976406041900958143742 0.347076806426048267706363503748 -0.0205897999927401528785786410936 +-0.0401692003011703546722088731258 -0.0291844487190246609786825615629 0.00589094981551170366468328509768 +-0.0401692003011703546722088731258 0.0291844487190246609786825615629 0.00589094981551170366468328509768 +-0.0400642491877079010009765625 -0.090396501123905181884765625 0.22961549460887908935546875 +-0.0400642491877079010009765625 0.090396501123905181884765625 0.22961549460887908935546875 +-0.04004944860935211181640625 -0.0290975004434585599044638115629 -0.00702679976820945809135032789072 +-0.04004944860935211181640625 0.0290975004434585599044638115629 -0.00702679976820945809135032789072 +-0.0400121003389358534385600307814 -0.0169558495283126837993581403907 0.0247291505336761502364950615629 +-0.0400121003389358534385600307814 0.0169558495283126837993581403907 0.0247291505336761502364950615629 +-0.0399940490722656277755575615629 -0.00897964984178543056125842980464 0.0286329001188278219058869211722 +-0.0399940490722656277755575615629 0.00897964984178543056125842980464 0.0286329001188278219058869211722 +-0.039992250502109527587890625 -0.01649699918925762176513671875 -0.24622850120067596435546875 +-0.039992250502109527587890625 0.01649699918925762176513671875 -0.24622850120067596435546875 +-0.0399771004915237399002236884371 -0.0589230000972747747223223768742 -0.291427195072174072265625 +-0.0399771004915237399002236884371 0.0589230000972747747223223768742 -0.291427195072174072265625 +-0.0399492494761943817138671875 -0.18948249518871307373046875 0.15811525285243988037109375 +-0.0399492494761943817138671875 0.18948249518871307373046875 0.15811525285243988037109375 +-0.0399256512522697462608256557814 -0.122880747914314261692858565311 -0.0761988043785095242599325615629 +-0.0399256512522697462608256557814 0.122880747914314261692858565311 -0.0761988043785095242599325615629 +-0.039906799793243408203125 -0.165421402454376226254240123126 -0.105086600780487066097990123126 +-0.039906799793243408203125 0.165421402454376226254240123126 -0.105086600780487066097990123126 +-0.0398882020264864009528871235943 -0.544741448760032720421975227509 -0.0645424984395503997802734375 +-0.0398882020264864009528871235943 0.544741448760032720421975227509 -0.0645424984395503997802734375 +-0.0398719012737274169921875 -0.0264564990997314467002787807814 0.0145011499524116526521622105861 +-0.0398719012737274169921875 0.0264564990997314467002787807814 0.0145011499524116526521622105861 +-0.03985335119068622589111328125 -0.316037258505821261334034488755 -0.317855688929557789190738503748 +-0.03985335119068622589111328125 0.316037258505821261334034488755 -0.317855688929557789190738503748 +-0.0398469001054763821700888115629 -0.0453985005617141765266175923443 0.0796944975852966336349325615629 +-0.0398469001054763821700888115629 0.0453985005617141765266175923443 0.0796944975852966336349325615629 +-0.0398092478513717637489399692186 -0.057927601039409637451171875 -0.13251270353794097900390625 +-0.0398092478513717637489399692186 0.057927601039409637451171875 -0.13251270353794097900390625 +-0.0397877996787428869773783901564 -0.555966430902481101306022992503 0.334393167495727561266960492503 +-0.0397877996787428869773783901564 0.555966430902481101306022992503 0.334393167495727561266960492503 +-0.0397790998220443683952574076557 -0.142173296213150029965177623126 -0.026540100574493408203125 +-0.0397790998220443683952574076557 0.142173296213150029965177623126 -0.026540100574493408203125 +-0.0397590011358261094520649692186 -0.54974520206451416015625 0.2370648086071014404296875 +-0.0397590011358261094520649692186 0.54974520206451416015625 0.2370648086071014404296875 +-0.0397537000477313981483540317186 -0.346866104006767261846988503748 0.0245692998170852633377236884371 +-0.0397537000477313981483540317186 0.346866104006767261846988503748 0.0245692998170852633377236884371 +-0.0397278994321823147872763115629 -0.0161261498928070082237162807814 -0.02572239935398101806640625 +-0.0397278994321823147872763115629 0.0161261498928070082237162807814 -0.02572239935398101806640625 +-0.0397251999005675329734721401564 -0.851578107476234413830695757497 -0.419208391010761238781867632497 +-0.0397251999005675329734721401564 0.851578107476234413830695757497 -0.419208391010761238781867632497 +-0.0397187981754541438728089985943 -0.359420585632324263158920985006 -0.414414533972740195544304242503 +-0.0397187981754541438728089985943 0.359420585632324263158920985006 -0.414414533972740195544304242503 +-0.03970859944820404052734375 -0.0222679495811462409282643903907 0.020672850310802459716796875 +-0.03970859944820404052734375 0.0222679495811462409282643903907 0.020672850310802459716796875 +-0.0396849997341632843017578125 -0.17599450051784515380859375 -0.173063755035400390625 +-0.0396849997341632843017578125 0.17599450051784515380859375 -0.173063755035400390625 +-0.039650999009609222412109375 -0.94782102108001708984375 -0.31632900238037109375 +-0.039650999009609222412109375 0.94782102108001708984375 -0.31632900238037109375 +-0.0395983502268791170974893134371 -0.101845648884773251618973688437 0.102759146690368646792634876874 +-0.0395983502268791170974893134371 0.101845648884773251618973688437 0.102759146690368646792634876874 +-0.0395925007760524749755859375 -0.516138732433319091796875 0.54270900785923004150390625 +-0.0395925007760524749755859375 0.516138732433319091796875 0.54270900785923004150390625 +-0.0395634010434150681922993442186 -0.200881791114807112252904630623 0.219274199008941655941740123126 +-0.0395634010434150681922993442186 0.200881791114807112252904630623 0.219274199008941655941740123126 +-0.0395330995321273859222088731258 -0.00658274963498115591592485529304 -0.0298965513706207289268412807814 +-0.0395330995321273859222088731258 0.00658274963498115591592485529304 -0.0298965513706207289268412807814 +-0.0395193010568618829925213731258 -0.0574454009532928480674662807814 -0.0716816008090972872635049384371 +-0.0395193010568618829925213731258 0.0574454009532928480674662807814 -0.0716816008090972872635049384371 +-0.0394370991736650508552308735943 -0.218568156659603135549829744377 -0.3913726508617401123046875 +-0.0394370991736650508552308735943 0.218568156659603135549829744377 -0.3913726508617401123046875 +-0.0394329994916915935188050923443 -0.121364200115203865748547684689 -0.153999400138854991570980246252 +-0.0394329994916915935188050923443 0.121364200115203865748547684689 -0.153999400138854991570980246252 +-0.0394303500652313232421875 -0.121351799368858329075671065311 0.078860700130462646484375 +-0.0394303500652313232421875 0.121351799368858329075671065311 0.078860700130462646484375 +-0.03942359983921051025390625 -0.249242699146270729748664507497 -0.162246304750442493780582253748 +-0.03942359983921051025390625 0.249242699146270729748664507497 -0.162246304750442493780582253748 +-0.0393786013126373249382261576557 -0.141242551803588856085269753748 0.0316206000745296450515908759371 +-0.0393786013126373249382261576557 0.141242551803588856085269753748 0.0316206000745296450515908759371 +-0.0393638491630554226974325615629 -0.0123660497367382056499440778907 0.0282411992549896247173268903907 +-0.0393638491630554226974325615629 0.0123660497367382056499440778907 0.0282411992549896247173268903907 +-0.0393413007259368896484375 -0.00406740009784698538369829279304 0.0918461978435516357421875 +-0.0393413007259368896484375 0.00406740009784698538369829279304 0.0918461978435516357421875 +-0.0393130987882614191253338731258 -0.0285623997449874905685263115629 0.0117757499217987070955215855861 +-0.0393130987882614191253338731258 0.0285623997449874905685263115629 0.0117757499217987070955215855861 +-0.0392966002225875882247763115629 -0.16568839550018310546875 0.104895997047424319181807561563 +-0.0392966002225875882247763115629 0.16568839550018310546875 0.104895997047424319181807561563 +-0.0392870008945465087890625 -0.0941821992397308405120526231258 0.172006595134735124075220369377 +-0.0392870008945465087890625 0.0941821992397308405120526231258 0.172006595134735124075220369377 +-0.0392668496817350359817666571871 -0.0461114525794982868522886576557 -0.34471990168094635009765625 +-0.0392668496817350359817666571871 0.0461114525794982868522886576557 -0.34471990168094635009765625 +-0.0392634987831115764289613423443 -0.0783840000629425076583700615629 -0.0481072992086410550216513115629 +-0.0392634987831115764289613423443 0.0783840000629425076583700615629 -0.0481072992086410550216513115629 +-0.03923285007476806640625 -0.0234213501214981106857138115629 -0.0203033000230789205386994211722 +-0.03923285007476806640625 0.0234213501214981106857138115629 -0.0203033000230789205386994211722 +-0.0392295010387897491455078125 -0.49845850467681884765625 0 +-0.0392295010387897491455078125 0.49845850467681884765625 0 +-0.0392067998647689860969300923443 -0.35313320159912109375 0.183738005161285411492855246252 +-0.0392067998647689860969300923443 0.35313320159912109375 0.183738005161285411492855246252 +-0.0391909003257751437088174384371 0 0.347798848152160611224559261245 +-0.0391555011272430447677450615629 -0.0758647024631500244140625 0.0520711004734039362151776231258 +-0.0391555011272430447677450615629 0.0758647024631500244140625 0.0520711004734039362151776231258 +-0.0391552507877349909026776231258 -0.0258983999490737942794638115629 -0.0172086998820304877544362653907 +-0.0391552507877349909026776231258 0.0258983999490737942794638115629 -0.0172086998820304877544362653907 +-0.0391552008688449831863565009371 -0.0284480001777410486385466725778 0.698324894905090309826789507497 +-0.0391552008688449831863565009371 0.0284480001777410486385466725778 0.698324894905090309826789507497 +-0.0391525506973266629318075615629 0 -0.0310979008674621588970143903907 +-0.0391518503427505520919638115629 -0.0309592008590698249126393903907 0.00294330008327961002712047644536 +-0.0391518503427505520919638115629 0.0309592008590698249126393903907 0.00294330008327961002712047644536 +-0.0391160011291503961761151231258 -0.292818403244018587994190738755 -0.743455982208252041942841970013 +-0.0391160011291503961761151231258 0.292818403244018587994190738755 -0.743455982208252041942841970013 +-0.0391147494316101129729901231258 -0.0131329506635665897024134451954 -0.0282411485910415670230744211722 +-0.0391147494316101129729901231258 0.0131329506635665897024134451954 -0.0282411485910415670230744211722 +-0.0391087494790554046630859375 -0.24692200124263763427734375 0 +-0.0391087494790554046630859375 0.24692200124263763427734375 0 +-0.03910540044307708740234375 -0.0771803975105285755553552462516 -0.180316197872161881887720369377 +-0.03910540044307708740234375 0.0771803975105285755553552462516 -0.180316197872161881887720369377 +-0.03910259902477264404296875 -0.0309619992971420301963725307814 -0.003513149917125701904296875 +-0.03910259902477264404296875 0.0309619992971420301963725307814 -0.003513149917125701904296875 +-0.0390617512166500091552734375 -0.0283797487616538994525949846093 0.346653649210929837298778011245 +-0.0390617512166500091552734375 0.0283797487616538994525949846093 0.346653649210929837298778011245 +-0.0390603005886077936370526231258 -0.011907599866390228271484375 0.0912824988365173450866052462516 +-0.0390603005886077936370526231258 0.011907599866390228271484375 0.0912824988365173450866052462516 +-0.0389191001653671278526225307814 -0.0201674506068229703048544365629 0.0240536496043205275108256557814 +-0.0389191001653671278526225307814 0.0201674506068229703048544365629 0.0240536496043205275108256557814 +-0.0388612005859613404701313754686 -0.421047186851501442639289507497 -0.557861483097076393811164507497 +-0.0388612005859613404701313754686 0.421047186851501442639289507497 -0.557861483097076393811164507497 +-0.03883349895477294921875 -0.0656644999980926513671875 -0.2380760014057159423828125 +-0.03883349895477294921875 0.0656644999980926513671875 -0.2380760014057159423828125 +-0.0388314992189407390266175923443 -0.0282126009464263929893412807814 -0.0140058994293212890625 +-0.0388314992189407390266175923443 0.0282126009464263929893412807814 -0.0140058994293212890625 +-0.0387849003076553358604350307814 -0.0213566005229949978927450615629 -0.0232299000024795559982138115629 +-0.0387849003076553358604350307814 0.0213566005229949978927450615629 -0.0232299000024795559982138115629 +-0.0387471020221710205078125 -0.253172099590301513671875 0.156213301420211780889957253748 +-0.0387471020221710205078125 0.253172099590301513671875 0.156213301420211780889957253748 +-0.0387163996696472181846537807814 -0.0332338988780975369552450615629 -0.0860032021999359158614950615629 +-0.0387163996696472181846537807814 0.0332338988780975369552450615629 -0.0860032021999359158614950615629 +-0.0387115985155105646331463731258 -0.225699210166931174548210492503 0.327965211868286143914730246252 +-0.0387115985155105646331463731258 0.225699210166931174548210492503 0.327965211868286143914730246252 +-0.0386496007442474406867738423443 -0.224252796173095708676115123126 0.766952800750732466283920985006 +-0.0386496007442474406867738423443 0.224252796173095708676115123126 0.766952800750732466283920985006 +-0.0386416494846344021896200615629 0 0.0317304998636245769172425923443 +-0.0386249504983425112625283759371 -0.331168940663337685315070757497 -0.106466847658157337530582253748 +-0.0386249504983425112625283759371 0.331168940663337685315070757497 -0.106466847658157337530582253748 +-0.0386056005954742431640625 -0.195885205268859885485710492503 -0.0117718003690242770803431326954 +-0.0386056005954742431640625 0.195885205268859885485710492503 -0.0117718003690242770803431326954 +-0.0385996997356414794921875 -0.0133255004882812510408340855861 -0.0912824988365173450866052462516 +-0.0385996997356414794921875 0.0133255004882812510408340855861 -0.0912824988365173450866052462516 +-0.0385832488536834716796875 -0.0305461496114730855777619211722 0.008846700191497802734375 +-0.0385832488536834716796875 0.0305461496114730855777619211722 0.008846700191497802734375 +-0.0385218009352683993240518134371 -0.138287848234176641293302623126 -0.0435034498572349562217631557814 +-0.0385218009352683993240518134371 0.138287848234176641293302623126 -0.0435034498572349562217631557814 +-0.0385107487440109266807475307814 -0.00411204993724822998046875 0.0316229999065399183799662807814 +-0.0385107487440109266807475307814 0.00411204993724822998046875 0.0316229999065399183799662807814 +-0.0385080993175506633430238423443 -0.015838600695133209228515625 0.0276814997196197509765625 +-0.0385080993175506633430238423443 0.015838600695133209228515625 0.0276814997196197509765625 +-0.0385015010833740234375 -0.0197271004319190985942800153907 0.0901580989360809409438601846887 +-0.0385015010833740234375 0.0197271004319190985942800153907 0.0901580989360809409438601846887 +-0.0384975999593734768966513115629 -0.632086420059204123766960492503 -0.488860797882080089227230246252 +-0.0384975999593734768966513115629 0.632086420059204123766960492503 -0.488860797882080089227230246252 +-0.0384902000427246038238848768742 -0.313879305124282803607371761245 -0.149993899464607227667301003748 +-0.0384902000427246038238848768742 0.313879305124282803607371761245 -0.149993899464607227667301003748 +-0.03848899900913238525390625 -0.15186800062656402587890625 0.194819748401641845703125 +-0.03848899900913238525390625 0.15186800062656402587890625 0.194819748401641845703125 +-0.0384785480797290857513104356258 -0.54322840273380279541015625 0.0769565470516681698898153740629 +-0.0384785480797290857513104356258 0.54322840273380279541015625 0.0769565470516681698898153740629 +-0.0384261995553970350791850307814 -0.195770394802093516961605246252 0.014049999415874481201171875 +-0.0384261995553970350791850307814 0.195770394802093516961605246252 0.014049999415874481201171875 +-0.0383652012795209912399130303129 -0.118079102039337163754240123126 -0.891395097970962502209602007497 +-0.0383652012795209912399130303129 0.118079102039337163754240123126 -0.891395097970962502209602007497 +-0.0383455485105514554122763115629 -0.00330209992825984980854836514652 -0.0319173008203506511359925923443 +-0.0383455485105514554122763115629 0.00330209992825984980854836514652 -0.0319173008203506511359925923443 +-0.0383206993341445936729350307814 -0.0912981986999511774261151231258 0.0140058994293212890625 +-0.0383206993341445936729350307814 0.0912981986999511774261151231258 0.0140058994293212890625 +-0.03831554949283599853515625 -0.00991925001144409318465378078145 -0.0305536508560180671001393903907 +-0.03831554949283599853515625 0.00991925001144409318465378078145 -0.0305536508560180671001393903907 +-0.0383022993803024333625550923443 -0.0916243970394134549239950615629 -0.0117430999875068678428569057814 +-0.0383022993803024333625550923443 0.0916243970394134549239950615629 -0.0117430999875068678428569057814 +-0.0383001506328582777549662807814 -0.0253145992755889892578125 0.0198058500885963453819194057814 +-0.0383001506328582777549662807814 0.0253145992755889892578125 0.0198058500885963453819194057814 +-0.03829275071620941162109375 -0.0303737998008728055099325615629 -0.0105402000248432173301615932814 +-0.03829275071620941162109375 0.0303737998008728055099325615629 -0.0105402000248432173301615932814 +-0.0382683992385864299445863423443 -0.0923879027366638211349325615629 0 +-0.0382683992385864299445863423443 0.0923879027366638211349325615629 0 +-0.03826305083930492401123046875 -0.193357145786285378186164507497 -0.289221447706222489770766514994 +-0.03826305083930492401123046875 0.193357145786285378186164507497 -0.289221447706222489770766514994 +-0.0382121980190277057976011576557 -0.1176078021526336669921875 -0.587118601799011208264289507497 +-0.0382121980190277057976011576557 0.1176078021526336669921875 -0.587118601799011208264289507497 +-0.0382054477930068928093199076557 -0.0401065483689308152626118442186 0.139397996664047230108707253748 +-0.0382054477930068928093199076557 0.0401065483689308152626118442186 0.139397996664047230108707253748 +-0.0382021486759185763260049384371 -0.117576000094413754548661188437 -0.0849499493837356511871661268742 +-0.0382021486759185763260049384371 0.117576000094413754548661188437 -0.0849499493837356511871661268742 +-0.0382016003131866455078125 -0.0749383985996246310135049384371 -0.0540821015834808405120526231258 +-0.0382016003131866455078125 0.0749383985996246310135049384371 -0.0540821015834808405120526231258 +-0.0381884984672069549560546875 -0.4081139862537384033203125 0.2863300144672393798828125 +-0.0381884984672069549560546875 0.4081139862537384033203125 0.2863300144672393798828125 +-0.038167499005794525146484375 -0.4621514976024627685546875 -0.18697400391101837158203125 +-0.038167499005794525146484375 0.4621514976024627685546875 -0.18697400391101837158203125 +-0.0381545007228851346114950615629 -0.00757730007171630859375 0.0314137011766433757453675923443 +-0.0381545007228851346114950615629 0.00757730007171630859375 0.0314137011766433757453675923443 +-0.038144700229167938232421875 -0.466168516874313376696647992503 0.768915885686874411852897992503 +-0.038144700229167938232421875 0.466168516874313376696647992503 0.768915885686874411852897992503 +-0.0381348013877868680099325615629 -0.0191805496811866781070587961722 -0.0260354489088058492496369211722 +-0.0381348013877868680099325615629 0.0191805496811866781070587961722 -0.0260354489088058492496369211722 +-0.0381312012672424330284037807814 -0.0522493004798889187911825615629 0.0762628972530365045745526231258 +-0.0381312012672424330284037807814 0.0522493004798889187911825615629 0.0762628972530365045745526231258 +-0.0380715996026992839484925923443 -0.082710802555084228515625 -0.04134570062160491943359375 +-0.0380715996026992839484925923443 0.082710802555084228515625 -0.04134570062160491943359375 +-0.0380687989294528975059428432814 -0.117160998284816755821147182814 0.536026141047477810985810720013 +-0.0380687989294528975059428432814 0.117160998284816755821147182814 0.536026141047477810985810720013 +-0.038052000105381011962890625 -0.73770701885223388671875 0.674048006534576416015625 +-0.038052000105381011962890625 0.73770701885223388671875 0.674048006534576416015625 +-0.0380338490009307847450337192186 -0.0846762031316757174392861884371 -0.11782769858837127685546875 +-0.0380338490009307847450337192186 0.0846762031316757174392861884371 -0.11782769858837127685546875 +-0.0380275502800941495040731865629 0 -0.548683845996856711657585492503 +-0.0380203485488891657073651231258 -0.0324723511934280409385600307814 0 +-0.0380203485488891657073651231258 0.0324723511934280409385600307814 0 +-0.0380048990249633802940287807814 -0.0770053535699844332595986884371 0.122986954450607297029129938437 +-0.0380048990249633802940287807814 0.0770053535699844332595986884371 0.122986954450607297029129938437 +-0.038001000881195068359375 -0.18172109127044677734375 -0.2356553971767425537109375 +-0.038001000881195068359375 0.18172109127044677734375 -0.2356553971767425537109375 +-0.0379988986998796504646058735943 -0.116950052976608279142745061563 -0.432872539758682284283253238755 +-0.0379988986998796504646058735943 0.116950052976608279142745061563 -0.432872539758682284283253238755 +-0.0379940986633300822883363423443 -0.0678906977176666343032351846887 0.0628274977207183837890625 +-0.0379940986633300822883363423443 0.0678906977176666343032351846887 0.0628274977207183837890625 +-0.0379785001277923583984375 -0.0275927513837814358810263115629 0.0172125995159149169921875 +-0.0379785001277923583984375 0.0275927513837814358810263115629 0.0172125995159149169921875 +-0.0379644021391868577430805942186 -0.498212993144989013671875 -0.332178604602813731805355246252 +-0.0379644021391868577430805942186 0.498212993144989013671875 -0.332178604602813731805355246252 +-0.0379231993108987766594175639057 -0.342485496401786770892528011245 -0.0613630481064319568962339701557 +-0.0379231993108987766594175639057 0.342485496401786770892528011245 -0.0613630481064319568962339701557 +-0.0379090011119842529296875 -0.052410602569580078125 -0.0762628972530365045745526231258 +-0.0379090011119842529296875 0.052410602569580078125 -0.0762628972530365045745526231258 +-0.0378917992115020765830912807814 -0.268952393531799283099559261245 0.535003817081451393811164507497 +-0.0378917992115020765830912807814 0.268952393531799283099559261245 0.535003817081451393811164507497 +-0.0377687513828277587890625 -0.24537074565887451171875 -0.02943949960172176361083984375 +-0.0377687513828277587890625 0.24537074565887451171875 -0.02943949960172176361083984375 +-0.0377600006759166717529296875 -0.981482982635498046875 -0.18779100477695465087890625 +-0.0377600006759166717529296875 0.981482982635498046875 -0.18779100477695465087890625 +-0.0377514515072107370574627793758 -0.234921507537364987472372490629 -0.495869544148445196007912727509 +-0.0377514515072107370574627793758 0.234921507537364987472372490629 -0.495869544148445196007912727509 +-0.03775034844875335693359375 -0.0198852002620697014545481096093 -0.143803650140762323550447376874 +-0.03775034844875335693359375 0.0198852002620697014545481096093 -0.143803650140762323550447376874 +-0.0377048984169960008094868442186 -0.0765528023242950383941973768742 0.287607300281524647100894753748 +-0.0377048984169960008094868442186 0.0765528023242950383941973768742 0.287607300281524647100894753748 +-0.0376722007989883436729350307814 -0.02737019956111907958984375 0.0884967982769012534438601846887 +-0.0376722007989883436729350307814 0.02737019956111907958984375 0.0884967982769012534438601846887 +-0.0376684490591287571281675639057 -0.900429970026016213147102007497 -0.3005125522613525390625 +-0.0376684490591287571281675639057 0.900429970026016213147102007497 -0.3005125522613525390625 +-0.0376520514488220270354901231258 -0.0323704987764358506630024692186 0.00587154999375343392142845289072 +-0.0376520514488220270354901231258 0.0323704987764358506630024692186 0.00587154999375343392142845289072 +-0.03764919936656951904296875 -0.0801499009132385364928552462516 0.0464599996805191081672425923443 +-0.03764919936656951904296875 0.0801499009132385364928552462516 0.0464599996805191081672425923443 +-0.0376397997140884427169638115629 -0.023282550275325775146484375 0.023262999951839447021484375 +-0.0376397997140884427169638115629 0.023282550275325775146484375 0.023262999951839447021484375 +-0.0376343999058008221725302178129 -0.806758207082748479699318977509 -0.397144791483879100457698996252 +-0.0376343999058008221725302178129 0.806758207082748479699318977509 -0.397144791483879100457698996252 +-0.0376340508460998590667401231258 -0.0162430495023727430869975307814 -0.0286328494548797607421875 +-0.0376340508460998590667401231258 0.0162430495023727430869975307814 -0.0286328494548797607421875 +-0.037615001201629638671875 -0.432933986186981201171875 -0.24729199707508087158203125 +-0.037615001201629638671875 0.432933986186981201171875 -0.24729199707508087158203125 +-0.0376123487949371337890625 -0.0110056497156620029104212576954 0.0310513496398925788188893903907 +-0.0376123487949371337890625 0.0110056497156620029104212576954 0.0310513496398925788188893903907 +-0.0375975996255874661544638115629 -0.0896400988101959256271200615629 -0.0234749004244804403140900461722 +-0.0375975996255874661544638115629 0.0896400988101959256271200615629 -0.0234749004244804403140900461722 +-0.0375943511724472004265074076557 -0.135725551843643182925447376874 0.0516262516379356398155131557814 +-0.0375943511724472004265074076557 0.135725551843643182925447376874 0.0516262516379356398155131557814 +-0.0375174991786479949951171875 -0.314153492450714111328125 0.38716900348663330078125 +-0.0375174991786479949951171875 0.314153492450714111328125 0.38716900348663330078125 +-0.0374940991401672349403462192186 -0.03232879936695098876953125 -0.00700294971466064453125 +-0.0374940991401672349403462192186 0.03232879936695098876953125 -0.00700294971466064453125 +-0.0374830007553100599815287807814 -0.0297446012496948263004181711722 0.0145011499524116526521622105861 +-0.0374830007553100599815287807814 0.0297446012496948263004181711722 0.0145011499524116526521622105861 +-0.0374769002199173001388388115629 -0.0190858006477355977847931711722 0.0270410001277923590923268903907 +-0.0374769002199173001388388115629 0.0190858006477355977847931711722 0.0270410001277923590923268903907 +-0.037470400333404541015625 -0.158033204078674327508480246252 -0.116710996627807622738615123126 +-0.037470400333404541015625 0.158033204078674327508480246252 -0.116710996627807622738615123126 +-0.0373920008540153461784605326557 -0.115083003044128412417634876874 -0.274513506889343228412059261245 +-0.0373920008540153461784605326557 0.115083003044128412417634876874 -0.274513506889343228412059261245 +-0.0373411491513252272178569057814 -0.528652852773666470653779470013 0.147077144682407401354851117503 +-0.0373411491513252272178569057814 0.528652852773666470653779470013 0.147077144682407401354851117503 +-0.0373297989368438706825337192186 -0.193328595161437993832365123126 -0.03507860004901885986328125 +-0.0373297989368438706825337192186 0.193328595161437993832365123126 -0.03507860004901885986328125 +-0.0373177010565996156166157504686 -0.253852543234825145379573996252 0.238046544790267933233707253748 +-0.0373177010565996156166157504686 0.253852543234825145379573996252 0.238046544790267933233707253748 +-0.0373172998428344740440287807814 -0.0884757995605468805511151231258 0.0279186010360717787315287807814 +-0.0373172998428344740440287807814 0.0884757995605468805511151231258 0.0279186010360717787315287807814 +-0.0373000491410493892341371235943 -0.174026253819465653860376619377 0.41330789029598236083984375 +-0.0373000491410493892341371235943 0.174026253819465653860376619377 0.41330789029598236083984375 +-0.0372462987899780315070863423443 -0.0066284500062465667724609375 -0.03269214928150177001953125 +-0.0372462987899780315070863423443 0.0066284500062465667724609375 -0.03269214928150177001953125 +-0.0371892489492893218994140625 -0.24471275508403778076171875 0.0351080000400543212890625 +-0.0371892489492893218994140625 0.24471275508403778076171875 0.0351080000400543212890625 +-0.0371051996946334880500550923443 -0.140892994403839122430355246252 0.137012195587158214227230246252 +-0.0371051996946334880500550923443 0.140892994403839122430355246252 0.137012195587158214227230246252 +-0.0369536012411117581466513115629 -0.0711278021335601806640625 -0.0597935020923614501953125 +-0.0369536012411117581466513115629 0.0711278021335601806640625 -0.0597935020923614501953125 +-0.0369530007243156419227680942186 -0.481729483604431130139289507497 0.5065284073352813720703125 +-0.0369530007243156419227680942186 0.481729483604431130139289507497 0.5065284073352813720703125 +-0.0369409501552581814864950615629 -0.0268390506505966214279013115629 -0.0203722998499870321109650461722 +-0.0369409501552581814864950615629 0.0268390506505966214279013115629 -0.0203722998499870321109650461722 +-0.0369350492954254178146200615629 -0.02428545057773590087890625 -0.023367099463939666748046875 +-0.0369350492954254178146200615629 0.02428545057773590087890625 -0.023367099463939666748046875 +-0.03690870106220245361328125 0 -0.0337305009365081800987162807814 +-0.0369018003344535813758930942186 -0.0488889008760452284385600307814 -0.136923900246620183773771373126 +-0.0369018003344535813758930942186 0.0488889008760452284385600307814 -0.136923900246620183773771373126 +-0.0368981003761291517784037807814 -0.0132040500640869147563893903907 -0.0310512989759445211246369211722 +-0.0368981003761291517784037807814 0.0132040500640869147563893903907 -0.0310512989759445211246369211722 +-0.0368283510208129924445863423443 -0.0144962504506111148488978201954 0.0305537492036819478824494211722 +-0.0368283510208129924445863423443 0.0144962504506111148488978201954 0.0305537492036819478824494211722 +-0.0368173003196716336349325615629 -0.03172884881496429443359375 0.0117374502122402201570450230861 +-0.0368173003196716336349325615629 0.03172884881496429443359375 0.0117374502122402201570450230861 +-0.0367305994033813518195863423443 -0.0292356997728347792198100307814 -0.0172086998820304877544362653907 +-0.0367305994033813518195863423443 0.0292356997728347792198100307814 -0.0172086998820304877544362653907 +-0.0367271997034549699256977817186 -0.513199782371520973889289507497 0.308670616149902321545539507497 +-0.0367271997034549699256977817186 0.513199782371520973889289507497 0.308670616149902321545539507497 +-0.0367209009826183277458433451557 -0.132744598388671863897769753748 -0.0594175502657890292068643134371 +-0.0367209009826183277458433451557 0.132744598388671863897769753748 -0.0594175502657890292068643134371 +-0.0366994999349117279052734375 -0.483321487903594970703125 -0.122693501412868499755859375 +-0.0366994999349117279052734375 0.483321487903594970703125 -0.122693501412868499755859375 +-0.0366771996021270710319761576557 -0.112882350385189053620926813437 -0.32926039397716522216796875 +-0.0366771996021270710319761576557 0.112882350385189053620926813437 -0.32926039397716522216796875 +-0.0366724014282226590255575615629 -0.309028005599975619244190738755 0.25130999088287353515625 +-0.0366724014282226590255575615629 0.309028005599975619244190738755 0.25130999088287353515625 +-0.0366712510585784912109375 -0.27451725304126739501953125 -0.6969899833202362060546875 +-0.0366712510585784912109375 0.27451725304126739501953125 -0.6969899833202362060546875 +-0.0366345010697841644287109375 -0.112747605144977558477847878748 0.329311150312423694952457253748 +-0.0366345010697841644287109375 0.112747605144977558477847878748 0.329311150312423694952457253748 +-0.0366288989782333415656800923443 -0.0864929020404815729339276231258 -0.0343118011951446533203125 +-0.0366288989782333415656800923443 0.0864929020404815729339276231258 -0.0343118011951446533203125 +-0.0366034001111984266807475307814 -0.1921308040618896484375 0.04178459942340850830078125 +-0.0366034001111984266807475307814 0.1921308040618896484375 0.04178459942340850830078125 +-0.0365928500890731825401225307814 -0.0339455991983413710166850307814 0.00294295009225606927008578317384 +-0.0365928500890731825401225307814 0.0339455991983413710166850307814 0.00294295009225606927008578317384 +-0.03654034994542598724365234375 -0.34032915532588958740234375 0.0730810493230819591126135037484 +-0.03654034994542598724365234375 0.34032915532588958740234375 0.0730810493230819591126135037484 +-0.03653959929943084716796875 -0.0339487999677658067176899692186 -0.00351249985396862030029296875 +-0.03653959929943084716796875 0.0339487999677658067176899692186 -0.00351249985396862030029296875 +-0.0364457510411739377120809990629 -0.5039331018924713134765625 0.217309407889843014816122490629 +-0.0364457510411739377120809990629 0.5039331018924713134765625 0.217309407889843014816122490629 +-0.0364381488412618623207173129686 -0.262300854921340920178352007497 -0.228846442699432356393529630623 +-0.0364381488412618623207173129686 0.262300854921340920178352007497 -0.228846442699432356393529630623 +-0.036404751241207122802734375 -0.0468572489917278289794921875 0.2428559958934783935546875 +-0.036404751241207122802734375 0.0468572489917278289794921875 0.2428559958934783935546875 +-0.0363658994436264065841513115629 -0.00206250008195638665289828317384 0.03425300121307373046875 +-0.0363658994436264065841513115629 0.00206250008195638665289828317384 0.03425300121307373046875 +-0.0363591492176055935958700615629 -0.02214320003986358642578125 -0.0262239009141922024825888115629 +-0.0363591492176055935958700615629 0.02214320003986358642578125 -0.0262239009141922024825888115629 +-0.0363584008067846312095561245314 -0.0264160001650452606891672502343 0.648444545269012517785256477509 +-0.0363584008067846312095561245314 0.0264160001650452606891672502343 0.648444545269012517785256477509 +-0.036348998546600341796875 -0.9976069927215576171875 -0.05881600081920623779296875 +-0.036348998546600341796875 0.9976069927215576171875 -0.05881600081920623779296875 +-0.0363220989704132121711488423443 -0.00666040033102035557155407019536 -0.0929319024085998590667401231258 +-0.0363220989704132121711488423443 0.00666040033102035557155407019536 -0.0929319024085998590667401231258 +-0.0363070487976074260383363423443 -0.0314155489206314128547425923443 -0.0139593005180358893657643903907 +-0.0363070487976074260383363423443 0.0314155489206314128547425923443 -0.0139593005180358893657643903907 +-0.0362989991903305067588725307814 -0.0592000007629394572883363423443 0.187557399272918701171875 +-0.0362989991903305067588725307814 0.0592000007629394572883363423443 0.187557399272918701171875 +-0.0362956501543521894981303432814 -0.111708453297615042942858565311 -0.0932943016290664617340411268742 +-0.0362956501543521894981303432814 0.111708453297615042942858565311 -0.0932943016290664617340411268742 +-0.0362620018422603607177734375 -0.4952194988727569580078125 -0.058674998581409454345703125 +-0.0362620018422603607177734375 0.4952194988727569580078125 -0.058674998581409454345703125 +-0.0362524002790451035926899692186 -0.0589644014835357666015625 0.39396560192108154296875 +-0.0362524002790451035926899692186 0.0589644014835357666015625 0.39396560192108154296875 +-0.0362482994794845608810263115629 -0.0222679495811462409282643903907 0.0262716501951217665244975307814 +-0.0362482994794845608810263115629 0.0222679495811462409282643903907 0.0262716501951217665244975307814 +-0.0362414002418518094161825615629 -0.0263307988643646240234375 -0.194918596744537375720085492503 +-0.0362414002418518094161825615629 0.0263307988643646240234375 -0.194918596744537375720085492503 +-0.0362352013587951687911825615629 -0.0263264000415802008892018903907 -0.397484397888183627056690738755 +-0.0362352013587951687911825615629 0.0263264000415802008892018903907 -0.397484397888183627056690738755 +-0.03623400069773197174072265625 -0.2102369964122772216796875 0.7190182507038116455078125 +-0.03623400069773197174072265625 0.2102369964122772216796875 0.7190182507038116455078125 +-0.0362338012084364863296670478121 -0.111519151926040643862947376874 -0.841873148083686850817741742503 +-0.0362338012084364863296670478121 0.111519151926040643862947376874 -0.841873148083686850817741742503 +-0.0362134985625743865966796875 -0.20075275003910064697265625 0.14452324807643890380859375 +-0.0362134985625743865966796875 0.20075275003910064697265625 0.14452324807643890380859375 +-0.0361802995204925578742738423443 -0.0587778985500335693359375 0.0723612010478973388671875 +-0.0361802995204925578742738423443 0.0587778985500335693359375 0.0723612010478973388671875 +-0.0361799985170364393760600307814 -0.0262863010168075568462331403907 -0.0894429028034210288344851846887 +-0.0361799985170364393760600307814 -0.0262860000133514418174662807814 0.022360749542713165283203125 +-0.0361799985170364393760600307814 0.0262860000133514418174662807814 0.022360749542713165283203125 +-0.0361799985170364393760600307814 0.0262863010168075568462331403907 -0.0894429028034210288344851846887 +-0.0361494001001119585891885321871 -0.7008216679096221923828125 0.640345606207847528601462272491 +-0.0361494001001119585891885321871 0.7008216679096221923828125 0.640345606207847528601462272491 +-0.0361371994018554673622212192186 -0.00613634996116161398477251154304 0.0340065985918045071700888115629 +-0.0361371994018554673622212192186 0.00613634996116161398477251154304 0.0340065985918045071700888115629 +-0.0361362509429454803466796875 -0.23047949373722076416015625 -0.089851997792720794677734375 +-0.0361362509429454803466796875 0.23047949373722076416015625 -0.089851997792720794677734375 +-0.0361079983413219451904296875 -0.3267459869384765625 -0.3767404854297637939453125 +-0.0361079983413219451904296875 0.3267459869384765625 -0.3767404854297637939453125 +-0.036091499961912631988525390625 -0.59258101880550384521484375 -0.4583069980144500732421875 +-0.036091499961912631988525390625 0.59258101880550384521484375 -0.4583069980144500732421875 +-0.0360854005441069644599672017193 -0.390972387790679942742855246252 -0.518014234304428167199318977509 +-0.0360854005441069644599672017193 0.390972387790679942742855246252 -0.518014234304428167199318977509 +-0.0360482007265090984016175923443 -0.110947000980377200041182561563 -0.162453794479370139391960492503 +-0.0360482007265090984016175923443 0.110947000980377200041182561563 -0.162453794479370139391960492503 +-0.0360424995422363309005575615629 -0.046087801456451416015625 -0.0810977995395660428146200615629 +-0.0360424995422363309005575615629 0.046087801456451416015625 -0.0810977995395660428146200615629 +-0.0360255502164363861083984375 -0.440270265936851479260383257497 0.726198336482048012463508257497 +-0.0360255502164363861083984375 0.440270265936851479260383257497 0.726198336482048012463508257497 +-0.0359730012714862823486328125 -0.110715501010417938232421875 -0.22124199569225311279296875 +-0.0359730012714862823486328125 0.110715501010417938232421875 -0.22124199569225311279296875 +-0.03595919907093048095703125 -0.0336158990859985393195863423443 0.0087696500122547149658203125 +-0.03595919907093048095703125 0.0336158990859985393195863423443 0.0087696500122547149658203125 +-0.03595019876956939697265625 -0.0099546499550342559814453125 -0.0332940012216568007041850307814 +-0.03595019876956939697265625 0.0099546499550342559814453125 -0.0332940012216568007041850307814 +-0.0359474986791610759406800923443 -0.01929520070552825927734375 -0.0289045006036758450607138115629 +-0.0359474986791610759406800923443 0.01929520070552825927734375 -0.0289045006036758450607138115629 +-0.03594680130481719970703125 -0.0840174019336700494964276231258 0.0406067013740539564659037807814 +-0.03594680130481719970703125 0.0840174019336700494964276231258 0.0406067013740539564659037807814 +-0.0359290003776550279090962192186 -0.00332829989492893245014992764652 -0.03461255133152008056640625 +-0.0359290003776550279090962192186 0.00332829989492893245014992764652 -0.03461255133152008056640625 +-0.0359152518212795257568359375 -0.2404845058917999267578125 -0.058113999664783477783203125 +-0.0359152518212795257568359375 0.2404845058917999267578125 -0.058113999664783477783203125 +-0.0359113007783889784385600307814 -0.0286025494337081923057475307814 0.0198058500885963453819194057814 +-0.0359113007783889784385600307814 0.0286025494337081923057475307814 0.0198058500885963453819194057814 +-0.0358729004859924260895098768742 -0.327616789937019314837840511245 0.117815248668193803260884067186 +-0.0358729004859924260895098768742 0.327616789937019314837840511245 0.117815248668193803260884067186 +-0.0358720006421208367775044223436 -0.932408833503723055713408029987 -0.178401454538106907232730691248 +-0.0358720006421208367775044223436 0.932408833503723055713408029987 -0.178401454538106907232730691248 +-0.03585214912891387939453125 -0.0179111495614051839664337961722 0.0298967003822326674034037807814 +-0.03585214912891387939453125 0.0179111495614051839664337961722 0.0298967003822326674034037807814 +-0.035828001797199249267578125 -0.164153754711151123046875 -0.18512125313282012939453125 +-0.035828001797199249267578125 0.164153754711151123046875 -0.18512125313282012939453125 +-0.0358232997357845264763120951557 -0.110250753164291379060379938437 0.0951916515827178899566973768742 +-0.0358232997357845264763120951557 0.110250753164291379060379938437 0.0951916515827178899566973768742 +-0.035768501460552215576171875 -0.21623174846172332763671875 -0.120268501341342926025390625 +-0.035768501460552215576171875 0.21623174846172332763671875 -0.120268501341342926025390625 +-0.0357333004474639850944761576557 -0.237793493270874012335269753748 -0.1793805062770843505859375 +-0.0357333004474639850944761576557 0.237793493270874012335269753748 -0.1793805062770843505859375 +-0.0356858991086482987831196567186 -0.853038918972015447472756477509 -0.284696102142333984375 +-0.0356858991086482987831196567186 0.853038918972015447472756477509 -0.284696102142333984375 +-0.03566800057888031005859375 -0.009588800370693206787109375 0.0337023496627807603309712192186 +-0.03566800057888031005859375 0.009588800370693206787109375 0.0337023496627807603309712192186 +-0.0356566011905670166015625 -0.188148403167724631579460492503 -0.0576955974102020263671875 +-0.0356566011905670166015625 0.188148403167724631579460492503 -0.0576955974102020263671875 +-0.03563959896564483642578125 -0.0341428995132446316818075615629 0.086971700191497802734375 +-0.03563959896564483642578125 0.0341428995132446316818075615629 0.086971700191497802734375 +-0.0356361001729965237716513115629 -0.0334805488586425795127787807814 -0.0104460999369621280324915701954 +-0.0356361001729965237716513115629 0.0334805488586425795127787807814 -0.0104460999369621280324915701954 +-0.0356299996376037639289613423443 -0.178585004806518565789730246252 -0.0826914012432098388671875 +-0.0356299996376037639289613423443 0.178585004806518565789730246252 -0.0826914012432098388671875 +-0.0356272995471954359580912807814 -0.0667499005794525146484375 -0.0653846979141235323806924384371 +-0.0356272995471954359580912807814 0.0667499005794525146484375 -0.0653846979141235323806924384371 +-0.0355435999110341044326943915621 -0.761938306689262323523337272491 -0.375081191956996906622379128748 +-0.0355435999110341044326943915621 0.761938306689262323523337272491 -0.375081191956996906622379128748 +-0.0354817003011703505088725307814 -0.0734789013862609946547976846887 0.0578091979026794447471537807814 +-0.0354817003011703505088725307814 0.0734789013862609946547976846887 0.0578091979026794447471537807814 +-0.0354703485965728801398988423443 -0.0307819485664367689659037807814 0.01715590059757232666015625 +-0.0354703485965728801398988423443 0.0307819485664367689659037807814 0.01715590059757232666015625 +-0.0354409508407115894645933451557 -0.0766801536083221435546875 -0.123952049016952503546207253748 +-0.0354409508407115894645933451557 0.0766801536083221435546875 -0.123952049016952503546207253748 +-0.03542520105838775634765625 -0.280922007560729991570980246252 -0.282538390159606966900440738755 +-0.03542520105838775634765625 0.280922007560729991570980246252 -0.282538390159606966900440738755 +-0.0353643000125885009765625 -0.148930495977401738949552623126 0.258009892702102672235042746252 +-0.0353643000125885009765625 0.148930495977401738949552623126 0.258009892702102672235042746252 +-0.0353554010391235393195863423443 -0.0353552997112274169921875 0 +-0.0353554010391235393195863423443 0.0353552997112274169921875 0 +-0.03532154858112335205078125 -0.016296349465847015380859375 -0.0314136505126953111122212192186 +-0.03532154858112335205078125 0.016296349465847015380859375 -0.0314136505126953111122212192186 +-0.0353065509349107728431782504686 -0.448612654209136985095085492503 0 +-0.0353065509349107728431782504686 0.448612654209136985095085492503 0 +-0.0351337999105453477333149692186 -0.108128798007965098992855246252 0.164541196823120128289730246252 +-0.0351337999105453477333149692186 0.108128798007965098992855246252 0.164541196823120128289730246252 +-0.0351166009902954129318075615629 -0.0649720013141632107833700615629 -0.185863995552063010485710492503 +-0.0351166009902954129318075615629 0.0649720013141632107833700615629 -0.185863995552063010485710492503 +-0.03509294986724853515625 -0.0502029016613960224479917826557 0.136923900246620183773771373126 +-0.03509294986724853515625 0.0502029016613960224479917826557 0.136923900246620183773771373126 +-0.0350879989564418792724609375 -0.9969170093536376953125 0.070176996290683746337890625 +-0.0350879989564418792724609375 0.9969170093536376953125 0.070176996290683746337890625 +-0.0350551992654800428916850307814 -0.194282805919647222347990123126 -0.3478868007659912109375 +-0.0350551992654800428916850307814 0.194282805919647222347990123126 -0.3478868007659912109375 +-0.0350507989525794955154580634371 -0.127895396947860701120092130623 0.0701014503836631802657919365629 +-0.0350507989525794955154580634371 0.127895396947860701120092130623 0.0701014503836631802657919365629 +-0.0350278481841087355186381557814 -0.107807151973247541953959682814 -0.538192051649093672338608485006 +-0.0350278481841087355186381557814 0.107807151973247541953959682814 -0.538192051649093672338608485006 +-0.0350169003009796128700337192186 -0.145855504274368275030582253748 0 +-0.0350169003009796128700337192186 0.145855504274368275030582253748 0 +-0.034980498254299163818359375 -0.4938440024852752685546875 0.069960497319698333740234375 +-0.034980498254299163818359375 0.4938440024852752685546875 0.069960497319698333740234375 +-0.0349563002586364759971537807814 -0.03526175022125244140625 0.00588794983923435211181640625 +-0.0349563002586364759971537807814 0.03526175022125244140625 0.00588794983923435211181640625 +-0.0349355012178421062141175923443 -0.0130772992968559275545059605861 0.0332940995693206814864950615629 +-0.0349355012178421062141175923443 0.0130772992968559275545059605861 0.0332940995693206814864950615629 +-0.0348774008452892303466796875 -0.0872919023036956703842648153113 0.116891849040985096319644753748 +-0.0348774008452892303466796875 0.0872919023036956703842648153113 0.116891849040985096319644753748 +-0.0348596513271331800987162807814 -0.0328139990568161038497763115629 0.014423899352550506591796875 +-0.0348596513271331800987162807814 0.0328139990568161038497763115629 0.014423899352550506591796875 +-0.0348429501056671184211488423443 -0.0253145992755889892578125 0.0253996014595031759097931711722 +-0.0348429501056671184211488423443 0.0253145992755889892578125 0.0253996014595031759097931711722 +-0.0348347991704940837531800923443 -0.149956202507019048519865123126 -0.127670204639434820004240123126 +-0.0348347991704940837531800923443 0.149956202507019048519865123126 -0.127670204639434820004240123126 +-0.0348007019609212903121786553129 -0.456695243716239984710369981258 -0.304497054219245943951221988755 +-0.0348007019609212903121786553129 0.456695243716239984710369981258 -0.304497054219245943951221988755 +-0.0347851008176803602744975307814 -0.03522349894046783447265625 -0.0070215500891208648681640625 +-0.0347851008176803602744975307814 0.03522349894046783447265625 -0.0070215500891208648681640625 +-0.03476519882678985595703125 -0.00663959980010986328125 -0.0353170990943908677528462192186 +-0.03476519882678985595703125 0.00663959980010986328125 -0.0353170990943908677528462192186 +-0.0347341492772102397590394673443 -0.246539694070816051141292746252 0.490420165657997175756577235006 +-0.0347341492772102397590394673443 0.246539694070816051141292746252 0.490420165657997175756577235006 +-0.034726798534393310546875 -0.0935130000114440945724325615629 0.00702629983425140380859375 +-0.034726798534393310546875 0.0935130000114440945724325615629 0.00702629983425140380859375 +-0.0346908986568450969367738423443 -0.0936049997806549100021200615629 -0.00588660016655922005424095289072 +-0.0346908986568450969367738423443 0.0936049997806549100021200615629 -0.00588660016655922005424095289072 +-0.0346798986196517958213725307814 -0.0211179003119468695903737653907 0.0291777014732360860660431711722 +-0.0346798986196517958213725307814 0.0211179003119468695903737653907 0.0291777014732360860660431711722 +-0.034607999026775360107421875 -0.10650999844074249267578125 0.4872964918613433837890625 +-0.034607999026775360107421875 0.10650999844074249267578125 0.4872964918613433837890625 +-0.03460200130939483642578125 -0.106493003666400909423828125 0.993710994720458984375 +-0.03460200130939483642578125 0.106493003666400909423828125 0.993710994720458984375 +-0.03457050025463104248046875 0 -0.49880349636077880859375 +-0.034549750387668609619140625 -0.23776374757289886474609375 0.069099247455596923828125 +-0.034549750387668609619140625 0.23776374757289886474609375 0.069099247455596923828125 +-0.03454925119876861572265625 -0.106329746544361114501953125 0.22360749542713165283203125 +-0.03454925119876861572265625 0.106329746544361114501953125 0.22360749542713165283203125 +-0.03453154861927032470703125 -0.947726643085479714123664507497 -0.0558752007782459259033203125 +-0.03453154861927032470703125 0.947726643085479714123664507497 -0.0558752007782459259033203125 +-0.0345104992389678941200337192186 -0.0276225507259368896484375 -0.023367099463939666748046875 +-0.0345104992389678941200337192186 0.0276225507259368896484375 -0.023367099463939666748046875 +-0.0344923496246337876747212192186 -0.01320745050907135009765625 -0.0337022513151168864875550923443 +-0.0344923496246337876747212192186 0.01320745050907135009765625 -0.0337022513151168864875550923443 +-0.034488201141357421875 0 -0.03620170056819915771484375 +-0.034487999975681304931640625 0 -0.24760974943637847900390625 +-0.0344333991408348055740518134371 -0.297494405508041348529246761245 -0.0176483999937772743915598283593 +-0.0344333991408348055740518134371 0.297494405508041348529246761245 -0.0176483999937772743915598283593 +-0.0344094514846801785568075615629 -0.024999849498271942138671875 -0.0262867987155914334396200615629 +-0.0344094514846801785568075615629 0.024999849498271942138671875 -0.0262867987155914334396200615629 +-0.03439874947071075439453125 -0.0300749510526657111431081403907 -0.0203033000230789205386994211722 +-0.03439874947071075439453125 0.0300749510526657111431081403907 -0.0203033000230789205386994211722 +-0.0343696486204862622360067803129 -0.367302587628364596294971988755 0.257697013020515452996761496252 +-0.0343696486204862622360067803129 0.367302587628364596294971988755 0.257697013020515452996761496252 +-0.0343507491052150726318359375 -0.415936347842216502801448996252 -0.168276603519916551077173494377 +-0.0343507491052150726318359375 0.415936347842216502801448996252 -0.168276603519916551077173494377 +-0.0343195013701915740966796875 -0.21356500685214996337890625 -0.4507904946804046630859375 +-0.0343195013701915740966796875 0.21356500685214996337890625 -0.4507904946804046630859375 +-0.0343135006725788158088441548443 -0.447320234775543223992855246252 0.47034780681133270263671875 +-0.0343135006725788158088441548443 0.447320234775543223992855246252 0.47034780681133270263671875 +-0.0343059498816728550285581889057 -0.30899155139923095703125 0.160770754516124714239566628748 +-0.0343059498816728550285581889057 0.30899155139923095703125 0.160770754516124714239566628748 +-0.0343032985925674424598774692186 -0.0414267003536224406867738423443 0.0843037009239196860610476846887 +-0.0343032985925674424598774692186 0.0414267003536224406867738423443 0.0843037009239196860610476846887 +-0.0343021497130393954178018134371 -0.144958949089050298519865123126 -0.0176146499812602982948384067186 +-0.0343021497130393954178018134371 0.144958949089050298519865123126 -0.0176146499812602982948384067186 +-0.0342566996812820462325888115629 -0.0922681987285614013671875 -0.01769340038299560546875 +-0.0342566996812820462325888115629 0.0922681987285614013671875 -0.01769340038299560546875 +-0.0342468000948429121543803432814 -0.663936316967010498046875 0.606643205881118752209602007497 +-0.0342468000948429121543803432814 0.663936316967010498046875 0.606643205881118752209602007497 +-0.0342287987470626872688050923443 -0.184775400161743180715845369377 0.0684574007987976129729901231258 +-0.0342287987470626872688050923443 0.184775400161743180715845369377 0.0684574007987976129729901231258 +-0.0342265009880065862457598768742 -0.256216102838516202044871761245 -0.650523984432220370166533029987 +-0.0342265009880065862457598768742 0.256216102838516202044871761245 -0.650523984432220370166533029987 +-0.0342186003923416123817524692186 -0.0198335006833076504806356865629 -0.0918461978435516357421875 +-0.0342186003923416123817524692186 0.0198335006833076504806356865629 -0.0918461978435516357421875 +-0.0342154495418071705192808451557 -0.1053062975406646728515625 -0.101192253828048708830245061563 +-0.0342154495418071705192808451557 0.1053062975406646728515625 -0.101192253828048708830245061563 +-0.0341965489089488955398721259371 -0.00990629978477954899196422644536 -0.1457135975360870361328125 +-0.0341965489089488955398721259371 0.00990629978477954899196422644536 -0.1457135975360870361328125 +-0.0341149985790252727180238423443 -0.0620235025882720988898988423443 -0.0706345975399017417251101846887 +-0.0341149985790252727180238423443 0.0620235025882720988898988423443 -0.0706345975399017417251101846887 +-0.0341086000204086289833149692186 -0.0916091024875640980162927462516 0.0210804000496864346603231865629 +-0.0341086000204086289833149692186 0.0916091024875640980162927462516 0.0210804000496864346603231865629 +-0.0341024011373519883583149692186 -0.104959201812744151727230246252 -0.792351198196411199425881477509 +-0.0341024011373519883583149692186 0.104959201812744151727230246252 -0.792351198196411199425881477509 +-0.034096300601959228515625 -0.0222230494022369398643412807814 -0.0290443986654281630088725307814 +-0.034096300601959228515625 0.0222230494022369398643412807814 -0.0290443986654281630088725307814 +-0.0340820491313934340049662807814 -0.0346889495849609375 0.0116228498518466949462890625 +-0.0340820491313934340049662807814 0.0346889495849609375 0.0116228498518466949462890625 +-0.0340749502182006863693075615629 -0.0323419004678726224044638115629 -0.0171142995357513420795481096093 +-0.0340749502182006863693075615629 0.0323419004678726224044638115629 -0.0171142995357513420795481096093 +-0.0340746000409126240104917826557 -0.297313803434371914935496761245 0.0210593998432159409950337192186 +-0.0340746000409126240104917826557 0.297313803434371914935496761245 0.0210593998432159409950337192186 +-0.0340290009975433363487162807814 -0.0165300503373146077945587961722 0.0326923012733459500411825615629 +-0.0340290009975433363487162807814 0.0165300503373146077945587961722 0.0326923012733459500411825615629 +-0.0340129993855953216552734375 -0.536777973175048828125 -0.84303700923919677734375 +-0.0340129993855953216552734375 0.536777973175048828125 -0.84303700923919677734375 +-0.0340065002441406263877787807814 -0.0649442017078399741469851846887 0.0680132985115051297286825615629 +-0.0340065002441406263877787807814 0.0649442017078399741469851846887 0.0680132985115051297286825615629 +-0.0339928507804870619346537807814 -0.144579148292541509457365123126 0.02100884914398193359375 +-0.0339928507804870619346537807814 0.144579148292541509457365123126 0.02100884914398193359375 +-0.0339924007654190049598774692186 0 0.0366676509380340562294087192186 +-0.0339840006083250087409730610943 -0.883334684371948286596420985006 -0.169011904299259191342130748126 +-0.0339840006083250087409730610943 0.883334684371948286596420985006 -0.169011904299259191342130748126 +-0.03394649922847747802734375 -0.480593502521514892578125 0.13370649516582489013671875 +-0.03394649922847747802734375 0.480593502521514892578125 0.13370649516582489013671875 +-0.0339121997356414822677450615629 0 -0.0940743029117584311782351846887 +-0.033906400203704833984375 -0.414372014999389692846420985006 0.683480787277221724096420985006 +-0.033906400203704833984375 0.414372014999389692846420985006 0.683480787277221724096420985006 +-0.0338793486356735243369975307814 -0.00407500006258487701416015625 0.03654564917087554931640625 +-0.0338793486356735243369975307814 0.00407500006258487701416015625 0.03654564917087554931640625 +-0.0338737994432449368575888115629 -0.0394133001565933269172425923443 -0.0854350984096527155120526231258 +-0.0338737994432449368575888115629 0.0394133001565933269172425923443 -0.0854350984096527155120526231258 +-0.0338726487010717336456622206242 -0.197486808896064736096320757497 0.286969560384750355108707253748 +-0.0338726487010717336456622206242 0.197486808896064736096320757497 0.286969560384750355108707253748 +-0.0338716000318527235557475307814 0 0.0940889000892639187911825615629 +-0.0338535010814666748046875 -0.389640587568283069952457253748 -0.222562797367572784423828125 +-0.0338535010814666748046875 0.389640587568283069952457253748 -0.222562797367572784423828125 +-0.0338184006512165027946714701557 -0.196221196651458734683259876874 0.671083700656890824731704014994 +-0.0338184006512165027946714701557 0.196221196651458734683259876874 0.671083700656890824731704014994 +-0.0338143497705459608604350307814 -0.0396119982004165607780699076557 -0.140667897462844831979467130623 +-0.0338143497705459608604350307814 0.0396119982004165607780699076557 -0.140667897462844831979467130623 +-0.0337867498397827134559712192186 -0.0367396503686904934982138115629 0.00294139999896287935438055072268 +-0.0337867498397827134559712192186 0.0367396503686904934982138115629 0.00294139999896287935438055072268 +-0.0337767988443374647666850307814 -0.103955602645874028988615123126 -0.384775590896606456414730246252 +-0.0337767988443374647666850307814 0.103955602645874028988615123126 -0.384775590896606456414730246252 +-0.0337747007608413737922425923443 -0.0286024987697601346114950615629 0.023262999951839447021484375 +-0.0337747007608413737922425923443 0.0286024987697601346114950615629 0.023262999951839447021484375 +-0.0337657492607831982711630303129 -0.282738143205642722399772992503 0.348452103137969981805355246252 +-0.0337657492607831982711630303129 0.282738143205642722399772992503 0.348452103137969981805355246252 +-0.0337599009275436415244975307814 -0.00811399966478347847709251539072 0.0937785983085632351974325615629 +-0.0337599009275436415244975307814 0.00811399966478347847709251539072 0.0937785983085632351974325615629 +-0.03374449908733367919921875 -0.22645725309848785400390625 0.100391499698162078857421875 +-0.03374449908733367919921875 0.22645725309848785400390625 0.100391499698162078857421875 +-0.0337206006050109891036825615629 -0.0367505013942718491981587192186 -0.00350989997386932407741344519536 +-0.0337206006050109891036825615629 0.0367505013942718491981587192186 -0.00350989997386932407741344519536 +-0.0337033491581678404380717495314 -0.805647867918014459753806022491 -0.2688796520233154296875 +-0.0337033491581678404380717495314 0.805647867918014459753806022491 -0.2688796520233154296875 +-0.0336853999644517870803994696871 -0.553075617551803566662727007497 -0.427753198146820057257144753748 +-0.0336853999644517870803994696871 0.553075617551803566662727007497 -0.427753198146820057257144753748 +-0.0336829982697963714599609375 -0.97942602634429931640625 0.1989749968051910400390625 +-0.0336829982697963714599609375 0.97942602634429931640625 0.1989749968051910400390625 +-0.0336665997281670598129110771879 -0.470433133840560957494858485006 0.282948064804077192846420985006 +-0.0336665997281670598129110771879 0.470433133840560957494858485006 0.282948064804077192846420985006 +-0.0336572997272014604042134067186 -0.0395241022109985365440287807814 -0.2954742014408111572265625 +-0.0336572997272014604042134067186 0.0395241022109985365440287807814 -0.2954742014408111572265625 +-0.0336407989263534587531800923443 -0.0081281997263431549072265625 0.196982800960540771484375 +-0.0336407989263534587531800923443 0.0081281997263431549072265625 0.196982800960540771484375 +-0.0335976004600524874588174384371 0 0.146188947558403004034488503748 +-0.0335922002792358384559712192186 0 0.298113298416137706414730246252 +-0.0335729509592056288291850307814 -0.0193092495203018195415456403907 -0.0316229492425918606857138115629 +-0.0335729509592056288291850307814 0.0193092495203018195415456403907 -0.0316229492425918606857138115629 +-0.0335616007447242722938618442186 -0.0243840001523494727397878278907 0.598564195632934503699118522491 +-0.0335616007447242722938618442186 0.0243840001523494727397878278907 0.598564195632934503699118522491 +-0.0335409998893737779090962192186 -0.0344094991683959947059712192186 -0.0138198003172874464561381557814 +-0.0335409998893737779090962192186 0.0344094991683959947059712192186 -0.0138198003172874464561381557814 +-0.0335408508777618394325337192186 -0.0081228502094745635986328125 0.0361805498600006117393412807814 +-0.0335408508777618394325337192186 0.0081228502094745635986328125 0.0361805498600006117393412807814 +-0.0335314005613327054122763115629 -0.0819204986095428550063601846887 -0.04652599990367889404296875 +-0.0335314005613327054122763115629 0.0819204986095428550063601846887 -0.04652599990367889404296875 +-0.0334884010255336733719033759371 -0.0120856504887342456472376639454 0.1457135975360870361328125 +-0.0334884010255336733719033759371 0.0120856504887342456472376639454 0.1457135975360870361328125 +-0.033481501042842864990234375 -0.0243254989385604837581755788278 0.297131699323654185906917746252 +-0.033481501042842864990234375 0.0243254989385604837581755788278 0.297131699323654185906917746252 +-0.0334527999162673936317524692186 -0.717118406295776389391960492503 -0.353017592430114768298210492503 +-0.0334527999162673936317524692186 0.717118406295776389391960492503 -0.353017592430114768298210492503 +-0.0334490001201629624794087192186 -0.0308836013078689596011994211722 0.020672850310802459716796875 +-0.0334490001201629624794087192186 0.0308836013078689596011994211722 0.020672850310802459716796875 +-0.03343839943408966064453125 -0.00333020016551017778577703509768 -0.0370240986347198514083700615629 +-0.03343839943408966064453125 0.00333020016551017778577703509768 -0.0370240986347198514083700615629 +-0.0334230989217758206466513115629 -0.00991680026054382428302158558608 -0.0358406513929367051551899692186 +-0.0334230989217758206466513115629 0.00991680026054382428302158558608 -0.0358406513929367051551899692186 +-0.0334118992090225233604350307814 -0.0896799981594085804381677462516 -0.0290022999048233053043244211722 +-0.0334118992090225233604350307814 0.0896799981594085804381677462516 -0.0290022999048233053043244211722 +-0.0334074005484580952018980326557 -0.141929697990417463815404630623 -0.0352123506367206587364115932814 +-0.0334074005484580952018980326557 0.141929697990417463815404630623 -0.0352123506367206587364115932814 +-0.03334780037403106689453125 -0.0242283999919891378238556711722 0.195706200599670421258480246252 +-0.03334780037403106689453125 0.0242283999919891378238556711722 0.195706200599670421258480246252 +-0.03333880007266998291015625 -0.0242217496037483229209819057814 0.0283166497945785550216513115629 +-0.03333880007266998291015625 0.0242217496037483229209819057814 0.0283166497945785550216513115629 +-0.0333335990086197839210591098436 -0.947071158885955721729033029987 0.0666681464761495617965536553129 +-0.0333335990086197839210591098436 0.947071158885955721729033029987 0.0666681464761495617965536553129 +-0.033314250409603118896484375 -0.04910250008106231689453125 -0.2428559958934783935546875 +-0.033314250409603118896484375 0.04910250008106231689453125 -0.2428559958934783935546875 +-0.0333096005022525745720152201557 -0.360897588729858387335269753748 -0.478166985511779774054019753748 +-0.0333096005022525745720152201557 0.360897588729858387335269753748 -0.478166985511779774054019753748 +-0.0333057999610900865028462192186 -0.173944199085235617907585492503 0.0929199993610382163344851846887 +-0.0333057999610900865028462192186 0.173944199085235617907585492503 0.0929199993610382163344851846887 +-0.0333000004291534451583700615629 -0.0159610003232955946494975307814 0.0929319977760315052428552462516 +-0.0333000004291534451583700615629 0.0159610003232955946494975307814 0.0929319977760315052428552462516 +-0.0331613995134830488731303432814 -0.0240928508341312387630583913278 0.144290846586227400338842130623 +-0.0331613995134830488731303432814 0.0240928508341312387630583913278 0.144290846586227400338842130623 +-0.0331555992364883436729350307814 -0.154690003395080571957365123126 0.36738479137420654296875 +-0.0331555992364883436729350307814 0.154690003395080571957365123126 0.36738479137420654296875 +-0.0331413507461547837684712192186 -0.0363978505134582505653462192186 0.00876614972949027980442249230464 +-0.0331413507461547837684712192186 0.0363978505134582505653462192186 0.00876614972949027980442249230464 +-0.033132500946521759033203125 -0.458121001720428466796875 0.19755400717258453369140625 +-0.033132500946521759033203125 0.458121001720428466796875 0.19755400717258453369140625 +-0.0331071004271507249305805942186 -0.283859091997146595343082253748 -0.0912572979927062932770098768742 +-0.0331071004271507249305805942186 0.283859091997146595343082253748 -0.0912572979927062932770098768742 +-0.0330295499414205578903036553129 -0.434989339113235506939503238755 -0.110424151271581658106946122189 +-0.0330295499414205578903036553129 0.434989339113235506939503238755 -0.110424151271581658106946122189 +-0.0329916000366210909744424384371 -0.269039404392242442742855246252 -0.128566199541091913394197376874 +-0.0329916000366210909744424384371 0.269039404392242442742855246252 -0.128566199541091913394197376874 +-0.0329695008695125579833984375 -0.167401492595672607421875 0.1827284991741180419921875 +-0.0329695008695125579833984375 0.167401492595672607421875 0.1827284991741180419921875 +-0.0329631000757217434982138115629 -0.0198671996593475369552450615629 0.0319175004959106473068075615629 +-0.0329631000757217434982138115629 0.0198671996593475369552450615629 0.0319175004959106473068075615629 +-0.03294169902801513671875 -0.0330440491437912001182475307814 0.0179703995585441603233256557814 +-0.03294169902801513671875 0.0330440491437912001182475307814 0.0179703995585441603233256557814 +-0.0329093009233474773078675923443 -0.0879342019557952936370526231258 0.0344173997640609755088725307814 +-0.0329093009233474773078675923443 0.0879342019557952936370526231258 0.0344173997640609755088725307814 +-0.0328719012439250904411558451557 -0.101168353483080855625964034061 0.944025444984435968542868522491 +-0.0328719012439250904411558451557 0.101168353483080855625964034061 0.944025444984435968542868522491 +-0.0328687995672225993781800923443 -0.0116225503385066989553431326954 0.0358407497406005859375 +-0.0328687995672225993781800923443 0.0116225503385066989553431326954 0.0358407497406005859375 +-0.032852999866008758544921875 -0.2077022492885589599609375 -0.13520525395870208740234375 +-0.032852999866008758544921875 0.2077022492885589599609375 -0.13520525395870208740234375 +-0.0328425496816635159591513115629 -0.0162763997912406914447824846093 -0.03400655090808868408203125 +-0.0328425496816635159591513115629 0.0162763997912406914447824846093 -0.03400655090808868408203125 +-0.0328299999237060546875 -0.745333015918731689453125 -0.665883004665374755859375 +-0.0328299999237060546875 0.745333015918731689453125 -0.665883004665374755859375 +-0.0328002989292144817023988423443 -0.0362648993730545071700888115629 -0.0104400999844074249267578125 +-0.0328002989292144817023988423443 0.0362648993730545071700888115629 -0.0104400999844074249267578125 +-0.0327996999025344862510600307814 -0.0785709977149963434417401231258 0.0524479985237121595909037807814 +-0.0327996999025344862510600307814 0.0785709977149963434417401231258 0.0524479985237121595909037807814 +-0.0327969007194042205810546875 -0.165734696388244617804019753748 -0.247904098033905007092414507497 +-0.0327969007194042205810546875 0.165734696388244617804019753748 -0.247904098033905007092414507497 +-0.0327223509550094576736611884371 -0.140269348025321954898103626874 0.0418779015541076646278462192186 +-0.0327223509550094576736611884371 0.140269348025321954898103626874 0.0418779015541076646278462192186 +-0.0327140986919403076171875 -0.897846293449401922082131477509 -0.052934400737285614013671875 +-0.0327140986919403076171875 0.897846293449401922082131477509 -0.052934400737285614013671875 +-0.0326945006847381633430238423443 -0.0485202014446258558799662807814 0.0810977995395660428146200615629 +-0.0326945006847381633430238423443 0.0485202014446258558799662807814 0.0810977995395660428146200615629 +-0.0326358016580343274215536553129 -0.445697548985481251104801003748 -0.0528074987232685089111328125 +-0.0326358016580343274215536553129 0.445697548985481251104801003748 -0.0528074987232685089111328125 +-0.0326319009065628093391175923443 -0.0237082004547119161441681711722 0.0915045022964477566818075615629 +-0.0326319009065628093391175923443 0.0237082004547119161441681711722 0.0915045022964477566818075615629 +-0.03256849944591522216796875 -0.0571135997772216838508363423443 -0.0753480970859527615646200615629 +-0.03256849944591522216796875 0.0571135997772216838508363423443 -0.0753480970859527615646200615629 +-0.0325055994093418135215678432814 -0.293558996915817271844417746252 -0.0525968983769416822959819057814 +-0.0325055994093418135215678432814 0.293558996915817271844417746252 -0.0525968983769416822959819057814 +-0.0324971985071897534469442803129 -0.294071388244628917352230246252 -0.339066436886787447857471988755 +-0.0324971985071897534469442803129 0.294071388244628917352230246252 -0.339066436886787447857471988755 +-0.0324912011623382582237162807814 -0.0999989986419677762130575615629 -0.170130801200866710320980246252 +-0.0324912011623382582237162807814 0.0999989986419677762130575615629 -0.170130801200866710320980246252 +-0.0324726998805999755859375 -0.0786430001258850153167401231258 -0.0525433003902435330489950615629 +-0.0324726998805999755859375 0.0786430001258850153167401231258 -0.0525433003902435330489950615629 +-0.0324724495410919217208700615629 -0.0380202502012252849250550923443 0 +-0.0324724495410919217208700615629 0.0380202502012252849250550923443 0 +-0.0323796987533569377570863423443 -0.0275926500558853170230744211722 0.0262716501951217665244975307814 +-0.0323796987533569377570863423443 0.0275926500558853170230744211722 0.0262716501951217665244975307814 +-0.0323442000895738587806782504686 -0.6270509660243988037109375 0.572940805554389975817741742503 +-0.0323442000895738587806782504686 0.6270509660243988037109375 0.572940805554389975817741742503 +-0.032312349416315555572509765625 -0.50993907451629638671875 -0.800885158777236871863181022491 +-0.032312349416315555572509765625 0.50993907451629638671875 -0.800885158777236871863181022491 +-0.0322966009378433255294638115629 -0.0302869498729705817485768903907 -0.0232299506664276136924662807814 +-0.0322966009378433255294638115629 0.0302869498729705817485768903907 -0.0232299506664276136924662807814 +-0.0322950989007949815223774692186 -0.0277368485927581807926056711722 -0.0262239009141922024825888115629 +-0.0322950989007949815223774692186 0.0277368485927581807926056711722 -0.0262239009141922024825888115629 +-0.03228925168514251708984375 -0.2109767496585845947265625 0.13017775118350982666015625 +-0.03228925168514251708984375 0.2109767496585845947265625 0.13017775118350982666015625 +-0.0322723001241683946083149692186 -0.0350309491157531766036825615629 0.0152095496654510511924662807814 +-0.0322723001241683946083149692186 0.0350309491157531766036825615629 0.0152095496654510511924662807814 +-0.0322109997272491468955912807814 -0.0859847009181976401626101846887 -0.0396117001771926907638388115629 +-0.0322109997272491468955912807814 0.0859847009181976401626101846887 -0.0396117001771926907638388115629 +-0.0321913987398147610763388115629 -0.00666275024414062552041704279304 -0.0376738488674163846114950615629 +-0.0321913987398147610763388115629 0.00666275024414062552041704279304 -0.0376738488674163846114950615629 +-0.032188050448894500732421875 -0.0666690006852149880112179403113 -0.1304575502872467041015625 +-0.032188050448894500732421875 0.0666690006852149880112179403113 -0.1304575502872467041015625 +-0.0320960005745291668266538920307 -0.834260535240173295434829014994 -0.159622354060411447695955189374 +-0.0320960005745291668266538920307 0.834260535240173295434829014994 -0.159622354060411447695955189374 +-0.0320883512496948214431924384371 -0.270399504899978604388621761245 0.219896242022514315506143134371 +-0.0320883512496948214431924384371 0.270399504899978604388621761245 0.219896242022514315506143134371 +-0.0320818006992340115646200615629 -0.0132790997624397284770925153907 -0.0937785983085632351974325615629 +-0.0320818006992340115646200615629 0.0132790997624397284770925153907 -0.0937785983085632351974325615629 +-0.0320815503597259507606587192186 -0.0326747506856918321083149692186 -0.020078249275684356689453125 +-0.0320815503597259507606587192186 0.0326747506856918321083149692186 -0.020078249275684356689453125 +-0.03205139935016632080078125 -0.0723172008991241482833700615629 0.183692395687103271484375 +-0.03205139935016632080078125 0.0723172008991241482833700615629 0.183692395687103271484375 +-0.0320420503616333021690287807814 -0.0379325509071350153167401231258 0.0058674998581409454345703125 +-0.0320420503616333021690287807814 0.0379325509071350153167401231258 0.0058674998581409454345703125 +-0.0320282012224197415450888115629 -0.0150627002120018015779434605861 0.0353172510862350477744975307814 +-0.0320282012224197415450888115629 0.0150627002120018015779434605861 0.0353172510862350477744975307814 +-0.0319988483563065501114053290621 -0.930454725027084261768095529987 0.189026246964931476934879128748 +-0.0319988483563065501114053290621 0.930454725027084261768095529987 0.189026246964931476934879128748 +-0.0319938004016876234580912807814 -0.0131975993514060977590540701954 -0.196982800960540771484375 +-0.0319938004016876234580912807814 0.0131975993514060977590540701954 -0.196982800960540771484375 +-0.0319866009056568104118589701557 -0.217587894201278692074552623126 0.204039895534515375308259876874 +-0.0319866009056568104118589701557 0.217587894201278692074552623126 0.204039895534515375308259876874 +-0.0319716006517410250564736884371 -0.0984001457691192626953125 -0.108605852723121634739733565311 +-0.0319716006517410250564736884371 0.0984001457691192626953125 -0.108605852723121634739733565311 +-0.031971001066267490386962890625 -0.0983992516994476318359375 -0.74282924830913543701171875 +-0.031971001066267490386962890625 0.0983992516994476318359375 -0.74282924830913543701171875 +-0.03195939958095550537109375 -0.151585996150970458984375 0.126492202281951904296875 +-0.03195939958095550537109375 0.151585996150970458984375 0.126492202281951904296875 +-0.03190974891185760498046875 -0.0131431996822357188142715855861 -0.0361804485321044963508363423443 +-0.03190974891185760498046875 0.0131431996822357188142715855861 -0.0361804485321044963508363423443 +-0.0319025993347167996505575615629 0 -0.0384996503591537517219300923443 +-0.0318583510816097259521484375 -0.0599644482135772705078125 0.133750954270362848452791126874 +-0.0318583510816097259521484375 0.0599644482135772705078125 0.133750954270362848452791126874 +-0.0318580009043216705322265625 -0.944431006908416748046875 0.3271619975566864013671875 +-0.0318580009043216705322265625 0.944431006908416748046875 0.3271619975566864013671875 +-0.0318573504686355604698100307814 -0.0378967493772506755500550923443 -0.00699604973196983354749578509768 +-0.0318573504686355604698100307814 0.0378967493772506755500550923443 -0.00699604973196983354749578509768 +-0.03184349834918975830078125 -0.09800650179386138916015625 -0.489265501499176025390625 +-0.03184349834918975830078125 0.09800650179386138916015625 -0.489265501499176025390625 +-0.0318078003823757185508647182814 -0.137256449460983281918302623126 -0.05146770179271697998046875 +-0.0318078003823757185508647182814 0.137256449460983281918302623126 -0.05146770179271697998046875 +-0.03179790079593658447265625 -0.117883953452110279425113503748 0.0871334999799728421310263115629 +-0.03179790079593658447265625 0.117883953452110279425113503748 0.0871334999799728421310263115629 +-0.0317872501909732818603515625 -0.38847376406192779541015625 0.64076323807239532470703125 +-0.0317872501909732818603515625 0.38847376406192779541015625 0.64076323807239532470703125 +-0.0317817509174346951583700615629 -0.237914952635765092336939119377 -0.604057985544204756322983485006 +-0.0317817509174346951583700615629 0.237914952635765092336939119377 -0.604057985544204756322983485006 +-0.0317479997873306302169638115629 -0.140795600414276134149105246252 -0.138451004028320306948884876874 +-0.0317479997873306302169638115629 0.140795600414276134149105246252 -0.138451004028320306948884876874 +-0.0317208502441644682456889370314 -0.0515938512980937957763671875 0.34471990168094635009765625 +-0.0317208502441644682456889370314 0.0515938512980937957763671875 0.34471990168094635009765625 +-0.0317207992076873820930238423443 -0.758256816864013694079460492503 -0.253063201904296875 +-0.0317207992076873820930238423443 0.758256816864013694079460492503 -0.253063201904296875 +-0.0317058011889457674881143134371 -0.0230356000363826744770090471093 -0.347798848152160611224559261245 +-0.0317058011889457674881143134371 0.0230356000363826744770090471093 -0.347798848152160611224559261245 +-0.0316750496625900282432475307814 -0.0230130001902580268169362653907 0.0310981005430221585372763115629 +-0.0316750496625900282432475307814 0.0230130001902580268169362653907 0.0310981005430221585372763115629 +-0.0316740006208419758171324076557 -0.412910985946655262335269753748 0.434167206287384033203125 +-0.0316740006208419758171324076557 0.412910985946655262335269753748 0.434167206287384033203125 +-0.0316718012094497694541850307814 -0.0255600988864898709396200615629 -0.029044449329376220703125 +-0.0316718012094497694541850307814 0.0255600988864898709396200615629 -0.029044449329376220703125 +-0.0316675007343292236328125 -0.151434242725372314453125 -0.19637949764728546142578125 +-0.0316675007343292236328125 0.151434242725372314453125 -0.19637949764728546142578125 +-0.0316556513309478801398988423443 -0.0348517507314681992958149692186 -0.016830749809741973876953125 +-0.0316556513309478801398988423443 0.0348517507314681992958149692186 -0.016830749809741973876953125 +-0.0316370017826557159423828125 -0.4151774942874908447265625 -0.2768155038356781005859375 +-0.0316370017826557159423828125 0.4151774942874908447265625 -0.2768155038356781005859375 +-0.0316228985786438029914613423443 -0.0707100987434387262542401231258 0.0632461011409759521484375 +-0.0316228985786438029914613423443 0.0707100987434387262542401231258 0.0632461011409759521484375 +-0.0315791990607976955085511860943 -0.897225308418273970190170985006 0.0631592966616153772552166856258 +-0.0315791990607976955085511860943 0.897225308418273970190170985006 0.0631592966616153772552166856258 +-0.03157649934291839599609375 -0.224126994609832763671875 0.4458365142345428466796875 +-0.03157649934291839599609375 0.224126994609832763671875 0.4458365142345428466796875 +-0.0315351001918315887451171875 -0.128976899385452259405582253748 -0.069788999855518341064453125 +-0.0315351001918315887451171875 0.128976899385452259405582253748 -0.069788999855518341064453125 +-0.0315131999552249880691690009371 -0.0969857990741729708572549384371 0.110003095865249631013504938437 +-0.0315131999552249880691690009371 0.0969857990741729708572549384371 0.110003095865249631013504938437 +-0.0314824484288692488243022182814 -0.44445960223674774169921875 0.0629644475877284975906533759371 +-0.0314824484288692488243022182814 0.44445960223674774169921875 0.0629644475877284975906533759371 +-0.0314568012952804593185263115629 -0.0325527012348175090461488423443 -0.0891672015190124594985476846887 +-0.0314568012952804593185263115629 0.0325527012348175090461488423443 -0.0891672015190124594985476846887 +-0.0314375996589660658409037807814 -0.0967563003301620400131710653113 -0.2822231948375701904296875 +-0.0314375996589660658409037807814 0.0967563003301620400131710653113 -0.2822231948375701904296875 +-0.0314207486808300018310546875 -0.06379400193691253662109375 0.2396727502346038818359375 +-0.0314207486808300018310546875 0.06379400193691253662109375 0.2396727502346038818359375 +-0.0314028006047010407875141879686 -0.182205396890640275442407869377 0.623149150609970114977897992503 +-0.0314028006047010407875141879686 0.182205396890640275442407869377 0.623149150609970114977897992503 +-0.031401000916957855224609375 -0.0966408044099807683746661268742 0.282266700267791714740184261245 +-0.031401000916957855224609375 0.0966408044099807683746661268742 0.282266700267791714740184261245 +-0.0313836008310318034797425923443 -0.398766803741455122533920985006 0 +-0.0313836008310318034797425923443 0.398766803741455122533920985006 0 +-0.03137814998626708984375 -0.0369441986083984402755575615629 0.0122693501412868503225306326954 +-0.03137814998626708984375 0.0369441986083984402755575615629 0.0122693501412868503225306326954 +-0.031361999921500682830810546875 -0.67229850590229034423828125 -0.330953992903232574462890625 +-0.031361999921500682830810546875 0.67229850590229034423828125 -0.330953992903232574462890625 +-0.0313202999532222747802734375 -0.2917107045650482177734375 0.0626408994197845403473223768742 +-0.0313202999532222747802734375 0.2917107045650482177734375 0.0626408994197845403473223768742 +-0.03128699958324432373046875 -0.197537600994110107421875 0 +-0.03128699958324432373046875 -0.0749383985996246310135049384371 -0.0583554983139038113693075615629 +-0.03128699958324432373046875 0.0749383985996246310135049384371 -0.0583554983139038113693075615629 +-0.03128699958324432373046875 0.197537600994110107421875 0 +-0.0312792999669909491111674526564 -0.513570216298103399132912727509 -0.397199398279190096783253238755 +-0.0312792999669909491111674526564 0.513570216298103399132912727509 -0.397199398279190096783253238755 +-0.0312658488750457777549662807814 -0.00206505004316568383307406442384 0.03896389901638031005859375 +-0.0312658488750457777549662807814 0.00206505004316568383307406442384 0.03896389901638031005859375 +-0.0312617987394332927375550923443 -0.0227129504084587104106862653907 -0.0317304998636245769172425923443 +-0.0312617987394332927375550923443 0.0227129504084587104106862653907 -0.0317304998636245769172425923443 +-0.0312326990067958824848215471093 -0.224829304218292225225894753748 -0.196154093742370611019865123126 +-0.0312326990067958824848215471093 0.224829304218292225225894753748 -0.196154093742370611019865123126 +-0.0312130987644195570518412807814 -0.0827143013477325550475427462516 0.0467343002557754558234925923443 +-0.0312130987644195570518412807814 0.0827143013477325550475427462516 0.0467343002557754558234925923443 +-0.0312073498964309699321706403907 -0.03078185021877288818359375 0.0240536496043205275108256557814 +-0.0312073498964309699321706403907 0.03078185021877288818359375 0.0240536496043205275108256557814 +-0.0311884999275207491775674384371 -0.708066365122795082776008257497 -0.632588854432105995861945757497 +-0.0311884999275207491775674384371 0.708066365122795082776008257497 -0.632588854432105995861945757497 +-0.0311600007116794586181640625 -0.095902502536773681640625 -0.228761255741119384765625 +-0.0311600007116794586181640625 0.095902502536773681640625 -0.228761255741119384765625 +-0.0311471991240978261783478586722 -0.095858998596668243408203125 0.438566842675209067614616742503 +-0.0311471991240978261783478586722 0.095858998596668243408203125 0.438566842675209067614616742503 +-0.0311418011784553548648712961722 -0.0958437032997608157058877509371 0.894339895248413063733039507497 +-0.0311418011784553548648712961722 0.0958437032997608157058877509371 0.894339895248413063733039507497 +-0.0311134502291679389263112653907 0 -0.448923146724700961041065738755 +-0.0310667991638183607627787807814 -0.05253159999847412109375 -0.19046080112457275390625 +-0.0310667991638183607627787807814 0.05253159999847412109375 -0.19046080112457275390625 +-0.0310371488332748420024831403907 -0.00613990016281604818887407404304 0.0387168496847152751594300923443 +-0.0310371488332748420024831403907 0.00613990016281604818887407404304 0.0387168496847152751594300923443 +-0.0310234993696212775493581403907 -0.0184256494045257589176056711722 0.03461270034313201904296875 +-0.0310234993696212775493581403907 0.0184256494045257589176056711722 0.03461270034313201904296875 +-0.0309970509260892833347522667964 -0.245806756615638721807926003748 -0.247221091389656061343416126874 +-0.0309970509260892833347522667964 0.245806756615638721807926003748 -0.247221091389656061343416126874 +-0.0309948503971099881271200615629 -0.0368855506181716905067524692186 -0.0133706495165824904014506557814 +-0.0309948503971099881271200615629 0.0368855506181716905067524692186 -0.0133706495165824904014506557814 +-0.0309152998030185685585102817186 0 -0.146779650449752802066072376874 +-0.0309017002582550048828125 -0.0951056003570556751647302462516 0 +-0.0309017002582550048828125 0.0951056003570556751647302462516 0 +-0.03089664876461029052734375 -0.847965943813323907995993522491 -0.0499936006963253021240234375 +-0.03089664876461029052734375 0.847965943813323907995993522491 -0.0499936006963253021240234375 +-0.0308875512331724180747904995314 -0.192208506166934967041015625 -0.405711445212364185675113503748 +-0.0308875512331724180747904995314 0.192208506166934967041015625 -0.405711445212364185675113503748 +-0.03086329996585845947265625 -0.0519254028797149699836488423443 -0.0796944975852966336349325615629 +-0.03086329996585845947265625 0.0519254028797149699836488423443 -0.0796944975852966336349325615629 +-0.030861198902130126953125 -0.0552411973476409912109375 0.0774338006973266657073651231258 +-0.030861198902130126953125 0.0552411973476409912109375 0.0774338006973266657073651231258 +-0.0308050006628036512901225307814 -0.0330440014600753770301899692186 0.0214276999235153212119975307814 +-0.0308050006628036512901225307814 0.0330440014600753770301899692186 0.0214276999235153212119975307814 +-0.0308012485504150397563893903907 -0.0264564514160156270816681711722 0.0291777491569519056846537807814 +-0.0308012485504150397563893903907 0.0264564514160156270816681711722 0.0291777491569519056846537807814 +-0.0307911992073059102847931711722 -0.121494400501251223478682561563 0.155855798721313498766960492503 +-0.0307911992073059102847931711722 0.121494400501251223478682561563 0.155855798721313498766960492503 +-0.0307893514633178731754181711722 -0.0392857491970062255859375 0.0029408000409603118896484375 +-0.0307893514633178731754181711722 0.0392857491970062255859375 0.0029408000409603118896484375 +-0.03078015148639678955078125 -0.00992894992232322762260032789072 -0.0381313502788543715049662807814 +-0.03078015148639678955078125 0.00992894992232322762260032789072 -0.0381313502788543715049662807814 +-0.0307648006826639203170614678129 -0.0223520001396536847904084055472 0.548683845996856711657585492503 +-0.0307648006826639203170614678129 0.0223520001396536847904084055472 0.548683845996856711657585492503 +-0.0307618498802185065532643903907 -0.0033354498445987701416015625 -0.0392756998538970961143412807814 +-0.0307618498802185065532643903907 0.0033354498445987701416015625 -0.0392756998538970961143412807814 +-0.0307482004165649386306924384371 -0.280814391374588023797542746252 0.10098449885845184326171875 +-0.0307482004165649386306924384371 0.280814391374588023797542746252 0.10098449885845184326171875 +-0.0307377010583877591232138115629 -0.0100592501461505903770365932814 0.03813140094280242919921875 +-0.0307377010583877591232138115629 0.0100592501461505903770365932814 0.03813140094280242919921875 +-0.0307179987430572509765625 -0.0392949491739273126800213731258 -0.00350884981453418757710305264652 +-0.0307179987430572509765625 0.0392949491739273126800213731258 -0.00350884981453418757710305264652 +-0.0306863993406295797183869211722 -0.0944432973861694391448651231258 -0.0117818996310234073293665701954 +-0.0306863993406295797183869211722 0.0944432973861694391448651231258 -0.0117818996310234073293665701954 +-0.0306732993572950349281391879686 -0.169997455179691309146150501874 -0.3044009506702423095703125 +-0.0306732993572950349281391879686 0.169997455179691309146150501874 -0.3044009506702423095703125 +-0.0306594014167785658409037807814 -0.0305207014083862318565287807814 0.0901580989360809409438601846887 +-0.0306594014167785658409037807814 0.0305207014083862318565287807814 0.0901580989360809409438601846887 +-0.0306329995393753058696706403907 -0.0197066500782966634586212961722 -0.03425300121307373046875 +-0.0306329995393753058696706403907 0.0197066500782966634586212961722 -0.03425300121307373046875 +-0.03061169944703578948974609375 -0.4831001758575439453125 -0.758733308315277077404914507497 +-0.03061169944703578948974609375 0.4831001758575439453125 -0.758733308315277077404914507497 +-0.03060599975287914276123046875 -0.427666485309600830078125 0.257225513458251953125 +-0.03060599975287914276123046875 0.427666485309600830078125 0.257225513458251953125 +-0.0305952012538909939864950615629 -0.0941617012023925892272302462516 0.0140535995364189161827006557814 +-0.0305952012538909939864950615629 0.0941617012023925892272302462516 0.0140535995364189161827006557814 +-0.0305775001645088168045205634371 -0.0297577500343322726150674384371 -0.143803650140762323550447376874 +-0.0305775001645088168045205634371 0.0297577500343322726150674384371 -0.143803650140762323550447376874 +-0.0305518493056297323062775461722 -0.432534152269363425524772992503 0.120335845649242406674161998126 +-0.0305518493056297323062775461722 0.432534152269363425524772992503 0.120335845649242406674161998126 +-0.0305507987737655660465119211722 -0.326491189002990733758480246252 0.229064011573791526110710492503 +-0.0305507987737655660465119211722 0.326491189002990733758480246252 0.229064011573791526110710492503 +-0.0305339992046356201171875 -0.369721198081970237048210492503 -0.149579203128814702816740123126 +-0.0305339992046356201171875 0.369721198081970237048210492503 -0.149579203128814702816740123126 +-0.0305338004603981985618510464064 -0.330822789669036887438835492503 -0.438319736719131491931022992503 +-0.0305338004603981985618510464064 0.330822789669036887438835492503 -0.438319736719131491931022992503 +-0.0304549500346183756038787038278 -0.1336504518985748291015625 0.0609100520610809312294087192186 +-0.0304549500346183756038787038278 0.1336504518985748291015625 0.0609100520610809312294087192186 +-0.0304416000843048123458700615629 -0.590165615081787109375 0.539238405227661199425881477509 +-0.0304416000843048123458700615629 0.590165615081787109375 0.539238405227661199425881477509 +-0.0303726494312286376953125 -0.0385919511318206787109375 0.00938955023884773323783470289072 +-0.0303726494312286376953125 0.0385919511318206787109375 0.00938955023884773323783470289072 +-0.0303146984428167357017436245314 -0.881483423709869429174545985006 0.179077497124671941586271373126 +-0.0303146984428167357017436245314 0.881483423709869429174545985006 0.179077497124671941586271373126 +-0.0302703000605106346820871721093 -0.0343344010412693009803852817186 0.1428456008434295654296875 +-0.0302703000605106346820871721093 0.0343344010412693009803852817186 0.1428456008434295654296875 +-0.0302651008591055849239470632028 -0.897209456562995888440070757497 0.310803897678852081298828125 +-0.0302651008591055849239470632028 0.897209456562995888440070757497 0.310803897678852081298828125 +-0.03025265038013458251953125 -0.0351451992988586411903462192186 0.0186973497271537801578400461722 +-0.03025265038013458251953125 0.0351451992988586411903462192186 0.0186973497271537801578400461722 +-0.0302150011062622091129181711722 -0.196296596527099631579460492503 -0.0235515996813774122764506557814 +-0.0302150011062622091129181711722 0.196296596527099631579460492503 -0.0235515996813774122764506557814 +-0.0302080005407333387901225307814 -0.785186386108398526317841970013 -0.150232803821563731805355246252 +-0.0302080005407333387901225307814 0.785186386108398526317841970013 -0.150232803821563731805355246252 +-0.03014700114727020263671875 -0.0386287510395050062705912807814 -0.00994869992136955365313877308608 +-0.03014700114727020263671875 0.0386287510395050062705912807814 -0.00994869992136955365313877308608 +-0.0300920009613037109375 -0.346347188949584994244190738755 -0.197833597660064697265625 +-0.0300920009613037109375 0.346347188949584994244190738755 -0.197833597660064697265625 +-0.0300323009490966810752787807814 -0.0924305021762847900390625 -0.0235514998435974141910431711722 +-0.0300323009490966810752787807814 0.0924305021762847900390625 -0.0235514998435974141910431711722 +-0.0300261497497558600688893903907 -0.0303411006927490241313893903907 -0.0260354995727539069438893903907 +-0.0300261497497558600688893903907 0.0303411006927490241313893903907 -0.0260354995727539069438893903907 +-0.0300139993429183980777619211722 -0.251322793960571277960269753748 0.309735202789306662829460492503 +-0.0300139993429183980777619211722 0.251322793960571277960269753748 0.309735202789306662829460492503 +-0.0299795001745224026779013115629 -0.0708965003490448081313601846887 -0.0638351023197174100021200615629 +-0.0299795001745224026779013115629 0.0708965003490448081313601846887 -0.0638351023197174100021200615629 +-0.0299596011638641364360768903907 -0.0135310992598533640779434605861 0.0376740008592605646331463731258 +-0.0299596011638641364360768903907 0.0135310992598533640779434605861 0.0376740008592605646331463731258 +-0.02993009984493255615234375 -0.124066051840782162751786188437 -0.0788149505853652926345986884371 +-0.02993009984493255615234375 0.124066051840782162751786188437 -0.0788149505853652926345986884371 +-0.02991054952144622802734375 -0.03283084928989410400390625 -0.0229672506451606764366069057814 +-0.02991054952144622802734375 0.03283084928989410400390625 -0.0229672506451606764366069057814 +-0.0298597007989883436729350307814 -0.0216940999031066915347931711722 0.0337307512760162339637837192186 +-0.0298597007989883436729350307814 0.0216940999031066915347931711722 0.0337307512760162339637837192186 +-0.0298396009951829889461638600778 -0.0918393015861511119446447537484 -0.693307298421859674597556022491 +-0.0298396009951829889461638600778 0.0918393015861511119446447537484 -0.693307298421859674597556022491 +-0.0298247991129755966877024064843 -0.847379457950591996606704014994 0.0596504468470811857749858120314 +-0.0298247991129755966877024064843 0.847379457950591996606704014994 0.0596504468470811857749858120314 +-0.0298192508518695838237722028907 -0.4123089015483856201171875 0.177798606455326080322265625 +-0.0298192508518695838237722028907 0.4123089015483856201171875 0.177798606455326080322265625 +-0.0298042505979537984683869211722 -0.016617000102996826171875 -0.03654564917087554931640625 +-0.0298042505979537984683869211722 0.016617000102996826171875 -0.03654564917087554931640625 +-0.0297805011272430433799662807814 -0.00665659978985786490029985529304 -0.0952302992343902615646200615629 +-0.0297805011272430433799662807814 0.00665659978985786490029985529304 -0.0952302992343902615646200615629 +-0.02977775037288665771484375 -0.19816124439239501953125 -0.14948375523090362548828125 +-0.02977775037288665771484375 0.19816124439239501953125 -0.14948375523090362548828125 +-0.0297513991594314589073100307814 -0.195770204067230224609375 0.0280864000320434591129181711722 +-0.0297513991594314589073100307814 0.195770204067230224609375 0.0280864000320434591129181711722 +-0.02973824925720691680908203125 -0.7108657658100128173828125 -0.2372467517852783203125 +-0.02973824925720691680908203125 0.7108657658100128173828125 -0.2372467517852783203125 +-0.0297329485416412374332306711722 -0.0297444999217987074424662807814 0.0270410507917404202560263115629 +-0.0297329485416412374332306711722 0.0297444999217987074424662807814 0.0270410507917404202560263115629 +-0.02969600073993206024169921875 -0.89173901081085205078125 0.4515750110149383544921875 +-0.02969600073993206024169921875 0.89173901081085205078125 0.4515750110149383544921875 +-0.0296681001782417262668811730464 -0.362575513124465897973891514994 0.598045688867568925317641514994 +-0.0296681001782417262668811730464 0.362575513124465897973891514994 0.598045688867568925317641514994 +-0.02966479957103729248046875 -0.0912980973720550620376101846887 0.028011798858642578125 +-0.02966479957103729248046875 0.0912980973720550620376101846887 0.028011798858642578125 +-0.0296079993247985867599325615629 -0.0351153999567031874229350307814 -0.0197553500533103956748881557814 +-0.0296079993247985867599325615629 0.0351153999567031874229350307814 -0.0197553500533103956748881557814 +-0.0295747496187686899349333913278 -0.0910231500864028958419638115629 -0.115499550104141229800447376874 +-0.0295747496187686899349333913278 0.0910231500864028958419638115629 -0.115499550104141229800447376874 +-0.0295546989887952790687641879686 -0.0909611523151397649566973768742 -0.336678642034530628546207253748 +-0.0295546989887952790687641879686 0.0909611523151397649566973768742 -0.336678642034530628546207253748 +-0.0295469999313354506065287807814 -0.670799714326858587121193977509 -0.599294704198837346886818977509 +-0.0295469999313354506065287807814 0.670799714326858587121193977509 -0.599294704198837346886818977509 +-0.0294724501669406876991352817186 -0.1242662966251373291015625 0.0786719977855682289780148153113 +-0.0294724501669406876991352817186 0.1242662966251373291015625 0.0786719977855682289780148153113 +-0.02947025001049041748046875 -0.12410874664783477783203125 0.21500824391841888427734375 +-0.02947025001049041748046875 0.12410874664783477783203125 0.21500824391841888427734375 +-0.029465250670909881591796875 -0.0706366494297981234451455634371 0.129004946351051336117521373126 +-0.029465250670909881591796875 0.0706366494297981234451455634371 0.129004946351051336117521373126 +-0.0294607996940612799907643903907 -0.00665350034832954458779985529304 -0.0398470997810363783409037807814 +-0.0294607996940612799907643903907 0.00665350034832954458779985529304 -0.0398470997810363783409037807814 +-0.0294598996639251729801056711722 -0.0371746510267257704307475307814 0.0158164501190185546875 +-0.0294598996639251729801056711722 0.0371746510267257704307475307814 0.0158164501190185546875 +-0.0294592499732971198345143903907 -0.0282254993915557889083700615629 -0.0289045989513397223735768903907 +-0.0294592499732971198345143903907 0.0282254993915557889083700615629 -0.0289045989513397223735768903907 +-0.02943690121173858642578125 -0.0264149010181427001953125 -0.0918461978435516357421875 +-0.02943690121173858642578125 0.0264149010181427001953125 -0.0918461978435516357421875 +-0.0294117011129856088802458913278 -0.0905190531164407757858114678129 0.844654345512390158923210492503 +-0.0294117011129856088802458913278 0.0905190531164407757858114678129 0.844654345512390158923210492503 +-0.0294050998985767343685271413278 -0.2648499011993408203125 0.137803503870964044741853626874 +-0.0294050998985767343685271413278 0.2648499011993408203125 0.137803503870964044741853626874 +-0.0293893009424209608604350307814 -0.0404508501291275038291850307814 0 +-0.0293893009424209608604350307814 0.0404508501291275038291850307814 0 +-0.0293595999479293844058869211722 -0.386657190322875987664730246252 -0.0981548011302948025802450615629 +-0.0293595999479293844058869211722 0.386657190322875987664730246252 -0.0981548011302948025802450615629 +-0.0293370008468627901931924384371 -0.219613802433013899362279630623 -0.557591986656188920434829014994 +-0.0293370008468627901931924384371 0.219613802433013899362279630623 -0.557591986656188920434829014994 +-0.0293290503323078155517578125 -0.0578852981328964177887286268742 -0.135237148404121404476896373126 +-0.0293290503323078155517578125 0.0578852981328964177887286268742 -0.135237148404121404476896373126 +-0.0292711999267339685604216725778 -0.627478605508804299084602007497 -0.308890393376350380627570757497 +-0.0292711999267339685604216725778 0.627478605508804299084602007497 -0.308890393376350380627570757497 +-0.0291958987712860121299662807814 -0.0400751501321792644172425923443 0.00644859969615936296644109759768 +-0.0291958987712860121299662807814 0.0400751501321792644172425923443 0.00644859969615936296644109759768 +-0.0291643500328063985660431711722 0 -0.0406132996082305963714276231258 +-0.0291238009929657010177450615629 -0.0374857991933822617958149692186 0.19428479671478271484375 +-0.0291238009929657010177450615629 0.0374857991933822617958149692186 0.19428479671478271484375 +-0.0290917485952377347091513115629 -0.0401508003473281874229350307814 -0.00644859969615936296644109759768 +-0.0290917485952377347091513115629 0.0401508003473281874229350307814 -0.00644859969615936296644109759768 +-0.0290812492370605482627787807814 -0.0252101510763168348838725307814 0.0319175004959106473068075615629 +-0.0290812492370605482627787807814 0.0252101510763168348838725307814 0.0319175004959106473068075615629 +-0.0290791988372802734375 -0.798085594177246115954460492503 -0.047052800655364990234375 +-0.0290791988372802734375 0.798085594177246115954460492503 -0.047052800655364990234375 +-0.0290446996688842780376393903907 -0.03726685047149658203125 -0.016358099877834320068359375 +-0.0290446996688842780376393903907 0.03726685047149658203125 -0.016358099877834320068359375 +-0.0290443986654281630088725307814 -0.0760399997234344482421875 0.0580889999866485637336488423443 +-0.0290443986654281630088725307814 0.0760399997234344482421875 0.0580889999866485637336488423443 +-0.0290345005691051497032084682814 -0.378501737117767356188835492503 0.397986605763435419280682481258 +-0.0290345005691051497032084682814 0.378501737117767356188835492503 0.397986605763435419280682481258 +-0.0290336988866329165359658759371 -0.169274407625198353155582253748 0.245973908901214594058259876874 +-0.0290336988866329165359658759371 0.169274407625198353155582253748 0.245973908901214594058259876874 +-0.0290125995874404921104350307814 -0.0892925977706909290709802462516 -0.034425199031829833984375 +-0.0290125995874404921104350307814 0.0892925977706909290709802462516 -0.034425199031829833984375 +-0.0290111493319272981117329379686 -0.135353752970695490054353626874 0.32146169245243072509765625 +-0.0290111493319272981117329379686 0.135353752970695490054353626874 0.32146169245243072509765625 +-0.0290096014738082906558869211722 -0.396175599098205599712940738755 -0.0469399988651275634765625 +-0.0290096014738082906558869211722 -0.0169601500034332296207306711722 0.0370242506265640244911274692186 +-0.0290096014738082906558869211722 0.0169601500034332296207306711722 0.0370242506265640244911274692186 +-0.0290096014738082906558869211722 0.396175599098205599712940738755 -0.0469399988651275634765625 +-0.0289872005581855753109099538278 -0.168189597129821760690404630623 0.575214600563049294201789507497 +-0.0289872005581855753109099538278 0.168189597129821760690404630623 0.575214600563049294201789507497 +-0.0289707988500595113590119211722 -0.160602200031280534231470369377 0.115618598461151134149105246252 +-0.0289707988500595113590119211722 0.160602200031280534231470369377 0.115618598461151134149105246252 +-0.028954200446605682373046875 -0.146913903951644886358707253748 -0.00882885027676820650921474253892 +-0.028954200446605682373046875 0.146913903951644886358707253748 -0.00882885027676820650921474253892 +-0.028911049477756023406982421875 -0.45626127719879150390625 -0.716581457853317282946647992503 +-0.028911049477756023406982421875 0.45626127719879150390625 -0.716581457853317282946647992503 +-0.0289090007543563870529013115629 -0.184383594989776633532585492503 -0.0718815982341766412933026231258 +-0.0289090007543563870529013115629 0.184383594989776633532585492503 -0.0718815982341766412933026231258 +-0.0288863986730575582340119211722 -0.261396789550781272204460492503 -0.301392388343811046258480246252 +-0.0288863986730575582340119211722 0.261396789550781272204460492503 -0.301392388343811046258480246252 +-0.0288731999695301042030415317186 -0.474064815044403065069644753748 -0.366645598411560025287059261245 +-0.0288731999695301042030415317186 0.474064815044403065069644753748 -0.366645598411560025287059261245 +-0.0288196496665477745746652971093 -0.146827796101570123843416126874 0.01053749956190586090087890625 +-0.0288196496665477745746652971093 0.146827796101570123843416126874 0.01053749956190586090087890625 +-0.0287990003824234036544638115629 -0.0454257994890213054328675923443 -0.0843037009239196860610476846887 +-0.0287990003824234036544638115629 0.0454257994890213054328675923443 -0.0843037009239196860610476846887 +-0.0287784010171890265727956403907 -0.0885724008083343533614950615629 -0.176993596553802506887720369377 +-0.0287784010171890265727956403907 0.0885724008083343533614950615629 -0.176993596553802506887720369377 +-0.0287387996912002591232138115629 -0.0259627491235733046104350307814 -0.03162305057048797607421875 +-0.0287387996912002591232138115629 0.0259627491235733046104350307814 -0.03162305057048797607421875 +-0.0287322014570236226871369211722 -0.192387604713439963610710492503 -0.0464911997318267836143412807814 +-0.0287322014570236226871369211722 0.192387604713439963610710492503 -0.0464911997318267836143412807814 +-0.028718650341033935546875 -0.0132758006453514102590540701954 -0.0387168496847152751594300923443 +-0.028718650341033935546875 0.0132758006453514102590540701954 -0.0387168496847152751594300923443 +-0.0287170000374317169189453125 -0.3037979900836944580078125 -0.95230400562286376953125 +-0.0287170000374317169189453125 0.3037979900836944580078125 -0.95230400562286376953125 +-0.0286944992840290069580078125 -0.24791200459003448486328125 -0.014706999994814395904541015625 +-0.0286944992840290069580078125 0.24791200459003448486328125 -0.014706999994814395904541015625 +-0.0286900013685226461246369211722 -0.0619234979152679457237162807814 0.0730913996696472140213174384371 +-0.0286900013685226461246369211722 0.0619234979152679457237162807814 0.0730913996696472140213174384371 +-0.0286722008138895027851145158593 -0.849987906217575139855568977509 0.29444579780101776123046875 +-0.0286722008138895027851145158593 0.849987906217575139855568977509 0.29444579780101776123046875 +-0.0286624014377594021896200615629 -0.131323003768920892886384876874 -0.148097002506256097964509876874 +-0.0286624014377594021896200615629 0.131323003768920892886384876874 -0.148097002506256097964509876874 +-0.0286591485142707845523712961722 -0.088205851614475250244140625 -0.440338951349258433953792746252 +-0.0286591485142707845523712961722 0.088205851614475250244140625 -0.440338951349258433953792746252 +-0.0286305485293269143531880160936 -0.832512122392654374536391514994 0.169128747284412378482088001874 +-0.0286305485293269143531880160936 0.832512122392654374536391514994 0.169128747284412378482088001874 +-0.0286148011684417731548268903907 -0.172985398769378684313835492503 -0.0962148010730743408203125 +-0.0286148011684417731548268903907 0.172985398769378684313835492503 -0.0962148010730743408203125 +-0.02853900007903575897216796875 -0.5532802641391754150390625 0.50553600490093231201171875 +-0.02853900007903575897216796875 0.5532802641391754150390625 0.50553600490093231201171875 +-0.0285358011722564725021200615629 -0.0662837982177734430511151231258 -0.0692255020141601534744424384371 +-0.0285358011722564725021200615629 0.0662837982177734430511151231258 -0.0692255020141601534744424384371 +-0.028527200222015380859375 -0.0371742010116577134559712192186 0.0883418023586273193359375 +-0.028527200222015380859375 0.0371742010116577134559712192186 0.0883418023586273193359375 +-0.0285133987665176398540456403907 -0.0390100985765457208831463731258 0.0128529503941535953176478201954 +-0.0285133987665176398540456403907 0.0390100985765457208831463731258 0.0128529503941535953176478201954 +-0.0284907013177871717979350307814 -0.0328138500452041653732138115629 0.024729199707508087158203125 +-0.0284907013177871717979350307814 0.0328138500452041653732138115629 0.024729199707508087158203125 +-0.0284733016043901450420339216407 -0.37365974485874176025390625 -0.249133953452110284976228626874 +-0.0284733016043901450420339216407 0.37365974485874176025390625 -0.249133953452110284976228626874 +-0.0284234493970870992496369211722 0 0.0411352485418319743781800923443 +-0.0284188494086265557025949846093 -0.201714295148849503958032869377 0.401252862811088573113948996252 +-0.0284188494086265557025949846093 0.201714295148849503958032869377 0.401252862811088573113948996252 +-0.0283955000340938568115234375 -0.24776150286197662353515625 0.01754949986934661865234375 +-0.0283955000340938568115234375 0.24776150286197662353515625 0.01754949986934661865234375 +-0.0283270001411437995220143903907 -0.00411610007286071759996515240232 0.0409956008195877102950888115629 +-0.0283270001411437995220143903907 0.00411610007286071759996515240232 0.0409956008195877102950888115629 +-0.028320000506937503814697265625 -0.73611223697662353515625 -0.1408432535827159881591796875 +-0.028320000506937503814697265625 0.73611223697662353515625 -0.1408432535827159881591796875 +-0.0282898008823394796207306711722 -0.0391725510358810480315838731258 -0.0128529503941535953176478201954 +-0.0282898008823394796207306711722 0.0391725510358810480315838731258 -0.0128529503941535953176478201954 +-0.0282207012176513699630575615629 -0.0868530988693237415709802462516 0.0407447010278701796104350307814 +-0.0282207012176513699630575615629 0.0868530988693237415709802462516 0.0407447010278701796104350307814 +-0.0282112007029354551479460866403 -0.847152060270309426037727007497 0.428996260464191425665347878748 +-0.0282112007029354551479460866403 0.847152060270309426037727007497 0.428996260464191425665347878748 +-0.02820830047130584716796875 -0.0230439007282257080078125 -0.03425300121307373046875 +-0.02820830047130584716796875 0.0230439007282257080078125 -0.03425300121307373046875 +-0.02815259993076324462890625 -0.00406760014593601261501110144536 0.0958691000938415582854901231258 +-0.02815259993076324462890625 0.00406760014593601261501110144536 0.0958691000938415582854901231258 +-0.0281244486570358283306081403907 -0.00805014967918396030788219519536 0.0405488491058349637130575615629 +-0.0281244486570358283306081403907 0.00805014967918396030788219519536 0.0405488491058349637130575615629 +-0.0281136989593505880191681711722 -0.0285623013973236097862162807814 0.02989675104618072509765625 +-0.0281136989593505880191681711722 0.0285623013973236097862162807814 0.02989675104618072509765625 +-0.02810280025005340576171875 -0.118524903059005731753572376874 -0.0875332474708557101150674384371 +-0.02810280025005340576171875 0.118524903059005731753572376874 -0.0875332474708557101150674384371 +-0.0280703991651535048057475307814 -0.797533607482910245067841970013 0.0561415970325470012336488423443 +-0.0280703991651535048057475307814 0.797533607482910245067841970013 0.0561415970325470012336488423443 +-0.02804774977266788482666015625 -0.032936751842498779296875 -0.24622850120067596435546875 +-0.02804774977266788482666015625 0.032936751842498779296875 -0.24622850120067596435546875 +-0.0280362993478775052169638115629 -0.0350308507680892958213725307814 0.0220635995268821730186381557814 +-0.0280362993478775052169638115629 0.0350308507680892958213725307814 0.0220635995268821730186381557814 +-0.0280054986476898221114950615629 -0.0121189996600151068950612653907 0.095230400562286376953125 +-0.0280054986476898221114950615629 0.0121189996600151068950612653907 0.095230400562286376953125 +-0.0279973492026329047466237653907 -0.144996446371078474557592130623 -0.0263089500367641448974609375 +-0.0279973492026329047466237653907 0.144996446371078474557592130623 -0.0263089500367641448974609375 +-0.027993500232696533203125 0 0.24842774868011474609375 +-0.0279843986034393338302450615629 -0.39507520198822021484375 0.0559683978557586683799662807814 +-0.0279843986034393338302450615629 0.39507520198822021484375 0.0559683978557586683799662807814 +-0.0279680006206035614013671875 -0.02032000012695789337158203125 0.49880349636077880859375 +-0.0279680006206035614013671875 0.02032000012695789337158203125 0.49880349636077880859375 +-0.0279598504304885871196706403907 -0.00333704985678195953369140625 -0.0413172006607055719573651231258 +-0.0279598504304885871196706403907 0.00333704985678195953369140625 -0.0413172006607055719573651231258 +-0.0279054999351501450965962192186 -0.633533063530921869421774772491 -0.566000553965568475867087272491 +-0.0279054999351501450965962192186 0.633533063530921869421774772491 -0.566000553965568475867087272491 +-0.0279015004634857177734375 -0.0202713504433631903911550153907 0.0362019002437591538856587192186 +-0.0279015004634857177734375 0.0202713504433631903911550153907 0.0362019002437591538856587192186 +-0.0279012508690357208251953125 -0.020271249115467071533203125 0.24760974943637847900390625 +-0.0279012508690357208251953125 0.020271249115467071533203125 0.24760974943637847900390625 +-0.0278793513774871840049662807814 -0.0413573503494262736945863423443 0.00350884981453418757710305264652 +-0.0278793513774871840049662807814 0.0413573503494262736945863423443 0.00350884981453418757710305264652 +-0.0278485506772995008994975307814 -0.0414223492145538371711488423443 -0.0029408000409603118896484375 +-0.0278485506772995008994975307814 0.0414223492145538371711488423443 -0.0029408000409603118896484375 +-0.0278288997709751108333708913278 -0.105669745802879327944978626874 0.102759146690368646792634876874 +-0.0278288997709751108333708913278 0.105669745802879327944978626874 0.102759146690368646792634876874 +-0.02775800041854381561279296875 -0.30074799060821533203125 -0.398472487926483154296875 +-0.02775800041854381561279296875 0.30074799060821533203125 -0.398472487926483154296875 +-0.0277556993067264549945871721093 -0.663474714756011940686164507497 -0.221430301666259737869424384371 +-0.0277556993067264549945871721093 0.663474714756011940686164507497 -0.221430301666259737869424384371 +-0.0277450501918792731548268903907 -0.0119336001574993147422709682814 0.0398472011089325006683026231258 +-0.0277450501918792731548268903907 0.0119336001574993147422709682814 0.0398472011089325006683026231258 +-0.0277082009240984909748117814843 -0.0852793514728546198089276231258 -0.643785348534584023205695757497 +-0.0277082009240984909748117814843 0.0852793514728546198089276231258 -0.643785348534584023205695757497 +-0.0276863992214202887798268903907 -0.085207998752593994140625 0.389837193489074751440170985006 +-0.0276863992214202887798268903907 0.085207998752593994140625 0.389837193489074751440170985006 +-0.0276816010475158698345143903907 -0.0851944029331207358657351846887 0.794968795776367254113381477509 +-0.0276816010475158698345143903907 0.0851944029331207358657351846887 0.794968795776367254113381477509 +-0.0276564002037048353721537807814 0 -0.399042797088623057977230246252 +-0.0276398003101348890830912807814 -0.190210998058319091796875 0.0552793979644775404502787807814 +-0.0276398003101348890830912807814 0.190210998058319091796875 0.0552793979644775404502787807814 +-0.0276394009590148932720143903907 -0.0850637972354889027037927462516 0.178885996341705322265625 +-0.0276394009590148932720143903907 0.0850637972354889027037927462516 0.178885996341705322265625 +-0.0276385009288787862613556711722 -0.0850639998912811334808026231258 -0.04472149908542633056640625 +-0.0276385009288787862613556711722 0.0850639998912811334808026231258 -0.04472149908542633056640625 +-0.0276134997606277479698100307814 -0.0328001499176025432258363423443 -0.0257225006818771369243581403907 +-0.0276134997606277479698100307814 0.0328001499176025432258363423443 -0.0257225006818771369243581403907 +-0.0275903999805450460269806711722 0 -0.198087799549102799856470369377 +-0.0275892503559589385986328125 -0.23654924333095550537109375 -0.0760477483272552490234375 +-0.0275892503559589385986328125 0.23654924333095550537109375 -0.0760477483272552490234375 +-0.0275489501655101776123046875 -0.336677262187004111559929242503 0.555328139662742636950554242503 +-0.0275489501655101776123046875 0.336677262187004111559929242503 0.555328139662742636950554242503 +-0.0275453997775912291789968122657 -0.384899836778640758172542746252 0.231502962112426768914730246252 +-0.0275453997775912291789968122657 0.384899836778640758172542746252 0.231502962112426768914730246252 +-0.0275043010711669907997212192186 -0.231771004199981672799779630623 0.1884824931621551513671875 +-0.0275043010711669907997212192186 0.231771004199981672799779630623 0.1884824931621551513671875 +-0.027500450611114501953125 -0.019980199635028839111328125 -0.0366676509380340562294087192186 +-0.027500450611114501953125 0.019980199635028839111328125 -0.0366676509380340562294087192186 +-0.027493000030517578125 -0.2241995036602020263671875 -0.10713849961757659912109375 +-0.027493000030517578125 0.2241995036602020263671875 -0.10713849961757659912109375 +-0.0274850487709045430972931711722 -0.0100183002650737762451171875 -0.040548801422119140625 +-0.0274850487709045430972931711722 0.0100183002650737762451171875 -0.040548801422119140625 +-0.0274606507271528237079660783593 -0.348920953273773148950454014994 0 +-0.0274606507271528237079660783593 0.348920953273773148950454014994 0 +-0.0274556010961532620529013115629 -0.170852005481719970703125 -0.360632395744323763775440738755 +-0.0274556010961532620529013115629 0.170852005481719970703125 -0.360632395744323763775440738755 +-0.0274525500833988182758371721093 -0.144098103046417236328125 0.0313384495675563812255859375 +-0.0274525500833988182758371721093 0.144098103046417236328125 0.0313384495675563812255859375 +-0.0274354010820388807823100307814 -0.0199327006936073324039337961722 0.0940743982791900634765625 +-0.0274354010820388807823100307814 0.0199327006936073324039337961722 0.0940743982791900634765625 +-0.027422249317169189453125 -0.0406084001064300550987162807814 0.00994874984025955269584251539072 +-0.027422249317169189453125 0.0406084001064300550987162807814 0.00994874984025955269584251539072 +-0.027408599853515625 -0.03519900143146514892578125 -0.0225787505507469184184987653907 +-0.027408599853515625 0.03519900143146514892578125 -0.0225787505507469184184987653907 +-0.027402698993682861328125 -0.0199092000722885138774831403907 -0.0940889000892639187911825615629 +-0.027402698993682861328125 0.0199092000722885138774831403907 -0.0940889000892639187911825615629 +-0.02733075059950351715087890625 -0.138112246990203857421875 -0.2065867483615875244140625 +-0.02733075059950351715087890625 0.138112246990203857421875 -0.2065867483615875244140625 +-0.02732659876346588134765625 0 -0.0961938977241516141036825615629 +-0.0273214012384414700607138115629 -0.0371746003627777127364950615629 0.0192766994237899801090119211722 +-0.0273214012384414700607138115629 0.0371746003627777127364950615629 0.0192766994237899801090119211722 +-0.0273175507783889777446706403907 -0.0408116012811660794357138115629 -0.00938955023884773323783470289072 +-0.0273175507783889777446706403907 0.0408116012811660794357138115629 -0.00938955023884773323783470289072 +-0.0272811500355601282974404853121 -0.288608090579509701800731136245 -0.9046888053417205810546875 +-0.0272811500355601282974404853121 0.288608090579509701800731136245 -0.9046888053417205810546875 +-0.02726174890995025634765625 -0.748205244541168212890625 -0.0441120006144046783447265625 +-0.02726174890995025634765625 0.748205244541168212890625 -0.0441120006144046783447265625 +-0.0272242493927478783344309221093 -0.0444000005722045912315287807814 0.14066804945468902587890625 +-0.0272242493927478783344309221093 0.0444000005722045912315287807814 0.14066804945468902587890625 +-0.02721039950847625732421875 -0.4294223785400390625 -0.674429607391357488488381477509 +-0.02721039950847625732421875 0.4294223785400390625 -0.674429607391357488488381477509 +-0.0271893002092838294292409528907 -0.044223301112651824951171875 0.2954742014408111572265625 +-0.0271893002092838294292409528907 0.044223301112651824951171875 0.2954742014408111572265625 +-0.0271810501813888535926899692186 -0.019748099148273468017578125 -0.146188947558403004034488503748 +-0.0271810501813888535926899692186 0.019748099148273468017578125 -0.146188947558403004034488503748 +-0.0271803999319672577594797502343 -0.582658705115318364953225227509 -0.286826793849468242303402121252 +-0.0271803999319672577594797502343 0.582658705115318364953225227509 -0.286826793849468242303402121252 +-0.0271764010190963731239399692186 -0.0197448000311851480648162038278 -0.298113298416137706414730246252 +-0.0271764010190963731239399692186 0.0197448000311851480648162038278 -0.298113298416137706414730246252 +-0.0271571993827819831157643903907 -0.384474802017211958471420985006 0.106965196132659923211605246252 +-0.0271571993827819831157643903907 0.384474802017211958471420985006 0.106965196132659923211605246252 +-0.0271559990942478179931640625 -0.3461489975452423095703125 0.937786996364593505859375 +-0.0271559990942478179931640625 0.3461489975452423095703125 0.937786996364593505859375 +-0.0271108508110046407535431711722 -0.0238109499216079718852956403907 0.0346127510070800767372212192186 +-0.0271108508110046407535431711722 0.0238109499216079718852956403907 0.0346127510070800767372212192186 +-0.02708799950778484344482421875 -0.24463249742984771728515625 -0.0438307486474514007568359375 +-0.02708799950778484344482421875 0.24463249742984771728515625 -0.0438307486474514007568359375 +-0.0270793007686734206462819685157 -0.802766355872154169226462272491 0.278087697923183441162109375 +-0.0270793007686734206462819685157 0.802766355872154169226462272491 0.278087697923183441162109375 +-0.0270776510238647481754181711722 -0.0307725995779037503341513115629 -0.0286329507827758796001393903907 +-0.0270776510238647481754181711722 0.0307725995779037503341513115629 -0.0286329507827758796001393903907 +-0.0270361505448818185970427663278 -0.0832102507352828896225460653113 -0.121840345859527576788394753748 +-0.0270361505448818185970427663278 0.0832102507352828896225460653113 -0.121840345859527576788394753748 +-0.0270168006420135504985768903907 -0.0443951010704040568977113423443 0.0854350984096527155120526231258 +-0.0270168006420135504985768903907 0.0443951010704040568977113423443 0.0854350984096527155120526231258 +-0.0270000994205474853515625 -0.0615451991558075006683026231258 -0.0740486025810241782485476846887 +-0.0270000994205474853515625 0.0615451991558075006683026231258 -0.0740486025810241782485476846887 +-0.026995599269866943359375 -0.181165802478790299856470369377 0.0803131997585296714126101846887 +-0.026995599269866943359375 0.181165802478790299856470369377 0.0803131997585296714126101846887 +-0.0269633501768112189556081403907 -0.03172869980335235595703125 0.0276815503835678121402619211722 +-0.0269633501768112189556081403907 0.03172869980335235595703125 0.0276815503835678121402619211722 +-0.0269540011882782003238556711722 -0.0961188018321991050063601846887 -0.00588660016655922005424095289072 +-0.0269540011882782003238556711722 0.0961188018321991050063601846887 -0.00588660016655922005424095289072 +-0.0269463986158370999435263115629 -0.783540821075439541942841970013 0.159179997444152843133480246252 +-0.0269463986158370999435263115629 0.783540821075439541942841970013 0.159179997444152843133480246252 +-0.0269125014543533346011994211722 -0.0374716997146606473068075615629 -0.0192766502499580397178569057814 +-0.0269125014543533346011994211722 0.0374716997146606473068075615629 -0.0192766502499580397178569057814 +-0.0268922507762908956363556711722 -0.201312652230262761898771373126 -0.511125987768173306591279470013 +-0.0268922507762908956363556711722 0.201312652230262761898771373126 -0.511125987768173306591279470013 +-0.0268712013959884650493581403907 -0.09606540203094482421875 0.00702629983425140380859375 +-0.0268712013959884650493581403907 0.09606540203094482421875 0.00702629983425140380859375 +-0.0268473505973815945724325615629 -0.015382699668407440185546875 0.0392758488655090345909037807814 +-0.0268473505973815945724325615629 0.015382699668407440185546875 0.0392758488655090345909037807814 +-0.026742450892925262451171875 -0.141111302375793445929019753748 -0.043271698057651519775390625 +-0.026742450892925262451171875 0.141111302375793445929019753748 -0.043271698057651519775390625 +-0.0267319489270448663875701100778 -0.285679790377616871221988503748 0.200431010127067543713508257497 +-0.0267319489270448663875701100778 0.285679790377616871221988503748 0.200431010127067543713508257497 +-0.0267264006659388535236399064843 -0.802565109729766912316506477509 0.406417509913444552349659488755 +-0.0267264006659388535236399064843 0.802565109729766912316506477509 0.406417509913444552349659488755 +-0.0267224997282028177425505788278 -0.133938753604888910464509876874 -0.062018550932407379150390625 +-0.0267224997282028177425505788278 0.133938753604888910464509876874 -0.062018550932407379150390625 +-0.0267172493040561676025390625 -0.323506048321723915783820757497 -0.130881802737712854556306751874 +-0.0267172493040561676025390625 0.323506048321723915783820757497 -0.130881802737712854556306751874 +-0.02665550075471401214599609375 -0.18132324516773223876953125 0.1700332462787628173828125 +-0.02665550075471401214599609375 0.18132324516773223876953125 0.1700332462787628173828125 +-0.0266514003276824978927450615629 -0.0392820000648498590667401231258 -0.19428479671478271484375 +-0.0266514003276824978927450615629 0.0392820000648498590667401231258 -0.19428479671478271484375 +-0.0266364000737667055984658759371 -0.516394913196563720703125 0.471833604574203480108707253748 +-0.0266364000737667055984658759371 0.516394913196563720703125 0.471833604574203480108707253748 +-0.0266171008348464986636994211722 -0.0819204986095428550063601846887 -0.0507992029190063518195863423443 +-0.0266171008348464986636994211722 0.0819204986095428550063601846887 -0.0507992029190063518195863423443 +-0.0265716005116701133037526716407 -0.154173797369003301449552623126 0.527280050516128584447983485006 +-0.0265716005116701133037526716407 0.154173797369003301449552623126 0.527280050516128584447983485006 +-0.0265689007937908172607421875 -0.210691505670547479800447376874 -0.211903792619705183541967130623 +-0.0265689007937908172607421875 0.210691505670547479800447376874 -0.211903792619705183541967130623 +-0.0265394985675811781455912807814 -0.03861840069293975830078125 -0.0883418023586273193359375 +-0.0265394985675811781455912807814 0.03861840069293975830078125 -0.0883418023586273193359375 +-0.0265193998813629157329518903907 -0.0947821974754333579360476846887 -0.01769340038299560546875 +-0.0265193998813629157329518903907 0.0947821974754333579360476846887 -0.01769340038299560546875 +-0.02650845050811767578125 -0.0167068496346473686908762346093 -0.0389638513326644939094300923443 +-0.02650845050811767578125 0.0167068496346473686908762346093 -0.0389638513326644939094300923443 +-0.0265060007572174086143412807814 -0.3664968013763427734375 0.158043205738067626953125 +-0.0265060007572174086143412807814 0.3664968013763427734375 0.158043205738067626953125 +-0.0264676988124847439864950615629 -0.0391391485929489177375550923443 0.016358099877834320068359375 +-0.0264676988124847439864950615629 0.0391391485929489177375550923443 0.016358099877834320068359375 +-0.0264670999720692662338095146879 -0.434559413790702842028679242503 -0.336091798543930064813167746252 +-0.0264670999720692662338095146879 0.434559413790702842028679242503 -0.336091798543930064813167746252 +-0.0264320004731416688392720004686 -0.687038087844848543994658029987 -0.131453703343868244513004128748 +-0.0264320004731416688392720004686 0.687038087844848543994658029987 -0.131453703343868244513004128748 +-0.0264136999845504781558869211722 -0.0285568505525588996196706403907 -0.03141374886035919189453125 +-0.0264136999845504781558869211722 0.0285568505525588996196706403907 -0.03141374886035919189453125 +-0.0263989001512527493575888115629 -0.0678970992565155057052450615629 0.0685060977935791071136151231258 +-0.0263989001512527493575888115629 0.0678970992565155057052450615629 0.0685060977935791071136151231258 +-0.026395000517368316650390625 -0.34409248828887939453125 0.3618060052394866943359375 +-0.026395000517368316650390625 0.34409248828887939453125 0.3618060052394866943359375 +-0.0263756006956100477744975307814 -0.133921194076538102590845369377 0.146182799339294428042634876874 +-0.0263756006956100477744975307814 0.133921194076538102590845369377 0.146182799339294428042634876874 +-0.0263503499329090125347097028907 -0.0810965985059738103668536268742 0.123405897617340082339509876874 +-0.0263503499329090125347097028907 0.0810965985059738103668536268742 0.123405897617340082339509876874 +-0.0263374507427215562294087192186 -0.0487290009856224046180805942186 -0.139397996664047230108707253748 +-0.0263374507427215562294087192186 0.0487290009856224046180805942186 -0.139397996664047230108707253748 +-0.0263305008411407470703125 -0.303053790330886807513621761245 -0.173104397952556610107421875 +-0.0263305008411407470703125 0.303053790330886807513621761245 -0.173104397952556610107421875 +-0.026315999217331409454345703125 -0.747687757015228271484375 0.05263274721801280975341796875 +-0.026315999217331409454345703125 0.747687757015228271484375 0.05263274721801280975341796875 +-0.0262913994491100304340402971093 -0.145712104439735395944310880623 -0.260915100574493408203125 +-0.0262913994491100304340402971093 0.145712104439735395944310880623 -0.260915100574493408203125 +-0.026286900043487548828125 -0.0809011995792388999282351846887 0.05257380008697509765625 +-0.026286900043487548828125 0.0809011995792388999282351846887 0.05257380008697509765625 +-0.0262865006923675564864950615629 0 -0.0425325989723205621917401231258 +-0.0262823998928070068359375 -0.166161799430847190173210492503 -0.108164203166961681024105246252 +-0.0262823998928070068359375 0.166161799430847190173210492503 -0.108164203166961681024105246252 +-0.0262639999389648465255575615629 -0.596266412734985373766960492503 -0.532706403732299826891960492503 +-0.0262639999389648465255575615629 0.596266412734985373766960492503 -0.532706403732299826891960492503 +-0.0262622494250535944149138600778 -0.219907444715499861276342130623 0.271018302440643288342414507497 +-0.0262622494250535944149138600778 0.219907444715499861276342130623 0.271018302440643288342414507497 +-0.0262524008750915534282643903907 -0.0941617012023925892272302462516 0.0210804000496864346603231865629 +-0.0262524008750915534282643903907 0.0941617012023925892272302462516 0.0210804000496864346603231865629 +-0.0262517005205154425884206403907 -0.0395055502653121962119975307814 -0.0158163994550704969932475307814 +-0.0262517005205154425884206403907 0.0395055502653121962119975307814 -0.0158163994550704969932475307814 +-0.0262367993593215949321706403907 -0.0272551506757736233810263115629 0.0326923012733459500411825615629 +-0.0262367993593215949321706403907 0.0272551506757736233810263115629 0.0326923012733459500411825615629 +-0.0261979997158050537109375 -0.080630250275135040283203125 -0.23518599569797515869140625 +-0.0261979997158050537109375 0.080630250275135040283203125 -0.23518599569797515869140625 +-0.0261975497007370002056081403907 -0.0420088499784469632247763115629 0.00699604973196983354749578509768 +-0.0261975497007370002056081403907 0.0420088499784469632247763115629 0.00699604973196983354749578509768 +-0.02617450058460235595703125 -0.0421955496072769220550213731258 -0.0058674998581409454345703125 +-0.02617450058460235595703125 0.0421955496072769220550213731258 -0.0058674998581409454345703125 +-0.0261675007641315460205078125 -0.080534003674983978271484375 0.2352222502231597900390625 +-0.0261675007641315460205078125 0.080534003674983978271484375 0.2352222502231597900390625 +-0.0261260993778705576107146413278 -0.112467151880264279451004938437 -0.0957526534795761080642861884371 +-0.0261260993778705576107146413278 0.112467151880264279451004938437 -0.0957526534795761080642861884371 +-0.0261249512434005744243581403907 -0.04263199865818023681640625 0 +-0.0261249512434005744243581403907 0.04263199865818023681640625 0 +-0.02610024996101856231689453125 -0.24309225380420684814453125 0.05220074951648712158203125 +-0.02610024996101856231689453125 0.24309225380420684814453125 0.05220074951648712158203125 +-0.0260511010885238654399831403907 -0.006676100194454193115234375 -0.042151749134063720703125 +-0.0260511010885238654399831403907 0.006676100194454193115234375 -0.042151749134063720703125 +-0.02602724917232990264892578125 -0.1873577535152435302734375 -0.163461744785308837890625 +-0.02602724917232990264892578125 0.1873577535152435302734375 -0.163461744785308837890625 +-0.0259515009820461273193359375 -0.07986975274980068206787109375 0.74528324604034423828125 +-0.0259515009820461273193359375 0.07986975274980068206787109375 0.74528324604034423828125 +-0.0258453000336885466148295620314 -0.273418191075325001104801003748 -0.857073605060577392578125 +-0.0258453000336885466148295620314 0.273418191075325001104801003748 -0.857073605060577392578125 +-0.025831401348114013671875 -0.16878139972686767578125 0.104142200946807872430355246252 +-0.025831401348114013671875 0.16878139972686767578125 0.104142200946807872430355246252 +-0.0258096992969512953330912807814 -0.0187516003847122206260600307814 0.0384997993707656901984925923443 +-0.0258096992969512953330912807814 0.0187516003847122206260600307814 0.0384997993707656901984925923443 +-0.0257981991395354257057270785936 -0.328841547667980182989566628748 0.89089764654636383056640625 +-0.0257981991395354257057270785936 0.328841547667980182989566628748 0.89089764654636383056640625 +-0.0257731493562459966495392649222 -0.616083663702011175011818977509 -0.2056138515472412109375 +-0.0257731493562459966495392649222 0.616083663702011175011818977509 -0.2056138515472412109375 +-0.0256896499544382074520232350778 -0.338325041532516468389957253748 -0.0858854509890079470535440009371 +-0.0256896499544382074520232350778 0.338325041532516468389957253748 -0.0858854509890079470535440009371 +-0.0256812006235122708419638115629 -0.0921918988227844321547976846887 -0.0290022999048233053043244211722 +-0.0256812006235122708419638115629 0.0921918988227844321547976846887 -0.0290022999048233053043244211722 +-0.0256715990602970102474333913278 -0.138581550121307378597990123126 0.0513430505990982027908486884371 +-0.0256715990602970102474333913278 0.138581550121307378597990123126 0.0513430505990982027908486884371 +-0.0256376504898071302940287807814 -0.0346887499094009413291850307814 0.0252863496541976956466513115629 +-0.0256376504898071302940287807814 0.0346887499094009413291850307814 0.0252863496541976956466513115629 +-0.02562870085239410400390625 -0.0262053489685058621505575615629 -0.0340066492557525648643412807814 +-0.02562870085239410400390625 0.0262053489685058621505575615629 -0.0340066492557525648643412807814 +-0.025623500347137451171875 -0.23401199281215667724609375 0.084153749048709869384765625 +-0.025623500347137451171875 0.23401199281215667724609375 0.084153749048709869384765625 +-0.0255768008530139930034597028907 -0.0787194013595580999176348768742 -0.594263398647308371813835492503 +-0.0255768008530139930034597028907 0.0787194013595580999176348768742 -0.594263398647308371813835492503 +-0.025509749539196491241455078125 -0.40258347988128662109375 -0.6322777569293975830078125 +-0.025509749539196491241455078125 0.40258347988128662109375 -0.6322777569293975830078125 +-0.0255024492740631124332306711722 -0.0408760488033294705489950615629 0.0133706495165824904014506557814 +-0.0255024492740631124332306711722 0.0408760488033294705489950615629 0.0133706495165824904014506557814 +-0.0254864007234573385074494211722 -0.755544805526733420641960492503 0.26172959804534912109375 +-0.0254864007234573385074494211722 0.755544805526733420641960492503 0.26172959804534912109375 +-0.0254747986793518073345143903907 -0.078405201435089111328125 -0.391412401199340842516960492503 +-0.0254747986793518073345143903907 0.078405201435089111328125 -0.391412401199340842516960492503 +-0.0254702985286712653423268903907 -0.0267376989126205458213725307814 0.0929319977760315052428552462516 +-0.0254702985286712653423268903907 0.0267376989126205458213725307814 0.0929319977760315052428552462516 +-0.0254680991172790555099325615629 -0.0783840000629425076583700615629 -0.0566332995891571100433026231258 +-0.0254680991172790555099325615629 0.0783840000629425076583700615629 -0.0566332995891571100433026231258 +-0.0254442989826202392578125 -0.698324894905090309826789507497 -0.041171200573444366455078125 +-0.0254442989826202392578125 0.698324894905090309826789507497 -0.041171200573444366455078125 +-0.0254397511482238776470143903907 -0.0412587493658065837531800923443 -0.0122693501412868503225306326954 +-0.0254397511482238776470143903907 0.0412587493658065837531800923443 -0.0122693501412868503225306326954 +-0.02542980015277862548828125 -0.310779011249542214123664507497 0.512610590457916237561164507497 +-0.02542980015277862548828125 0.310779011249542214123664507497 0.512610590457916237561164507497 +-0.0254283487796783461143412807814 -0.00206489991396665564446499807616 0.0430016010999679579307475307814 +-0.0254283487796783461143412807814 0.00206489991396665564446499807616 0.0430016010999679579307475307814 +-0.0253834012895822504207732350778 -0.346653649210929837298778011245 -0.0410724990069866180419921875 +-0.0253834012895822504207732350778 0.346653649210929837298778011245 -0.0410724990069866180419921875 +-0.0253558993339538588096537807814 -0.0564508020877838162521200615629 -0.0785517990589141845703125 +-0.0253558993339538588096537807814 0.0564508020877838162521200615629 -0.0785517990589141845703125 +-0.0253365993499755880191681711722 -0.0513369023799896267989950615629 0.0819913029670715359786825615629 +-0.0253365993499755880191681711722 0.0513369023799896267989950615629 0.0819913029670715359786825615629 +-0.0253364503383636495426056711722 -0.0133201003074646003032643903907 -0.0409956008195877102950888115629 +-0.0253364503383636495426056711722 0.0133201003074646003032643903907 -0.0409956008195877102950888115629 +-0.02533400058746337890625 -0.1211473941802978515625 -0.157103598117828369140625 +-0.02533400058746337890625 0.1211473941802978515625 -0.157103598117828369140625 +-0.0253325991332530968402902971093 -0.0779667019844055148025674384371 -0.288581693172454800677684261245 +-0.0253325991332530968402902971093 0.0779667019844055148025674384371 -0.288581693172454800677684261245 +-0.0253096014261245741416850307814 -0.33214199542999267578125 -0.221452403068542497122095369377 +-0.0253096014261245741416850307814 0.33214199542999267578125 -0.221452403068542497122095369377 +-0.0252855986356735236431081403907 -0.00598765015602111851100719519536 0.0427175492048263577560263115629 +-0.0252855986356735236431081403907 0.00598765015602111851100719519536 0.0427175492048263577560263115629 +-0.0252755988389253595516326100778 -0.228722190856933571545539507497 -0.263718339800834644659488503748 +-0.0252755988389253595516326100778 0.228722190856933571545539507497 -0.263718339800834644659488503748 +-0.025262248702347278594970703125 -0.7345695197582244873046875 0.149231247603893280029296875 +-0.025262248702347278594970703125 0.7345695197582244873046875 0.149231247603893280029296875 +-0.0252611994743347188785431711722 -0.179301595687866216488615123126 0.356669211387634299548210492503 +-0.0252611994743347188785431711722 0.179301595687866216488615123126 0.356669211387634299548210492503 +-0.0252416006289422518993337263282 -0.757978159189224176550681022491 0.383838759362697568011668636245 +-0.0252416006289422518993337263282 0.757978159189224176550681022491 0.383838759362697568011668636245 +-0.0252305991947650888607146413278 -0.006096149794757366180419921875 0.14773710072040557861328125 +-0.0252305991947650888607146413278 0.006096149794757366180419921875 0.14773710072040557861328125 +-0.0251712005585432059551198591407 -0.0182880001142621054222026089064 0.448923146724700961041065738755 +-0.0251712005585432059551198591407 0.0182880001142621054222026089064 0.448923146724700961041065738755 +-0.02516759932041168212890625 -0.0305460005998611471011994211722 0.0305537998676300055767018903907 +-0.02516759932041168212890625 0.0305460005998611471011994211722 0.0305537998676300055767018903907 +-0.0251668989658355712890625 -0.0132568001747131354595143903907 -0.0958691000938415582854901231258 +-0.0251668989658355712890625 0.0132568001747131354595143903907 -0.0958691000938415582854901231258 +-0.0251365989446640028526225307814 -0.0510352015495300348479901231258 0.191738200187683116570980246252 +-0.0251365989446640028526225307814 0.0510352015495300348479901231258 0.191738200187683116570980246252 +-0.0250947505235672024825888115629 -0.0223485499620437629009206403907 0.0370242506265640244911274692186 +-0.0250947505235672024825888115629 0.0223485499620437629009206403907 0.0370242506265640244911274692186 +-0.0250895999372005469585378278907 -0.537838804721832208777243522491 -0.264763194322586048468082253748 +-0.0250895999372005469585378278907 0.537838804721832208777243522491 -0.264763194322586048468082253748 +-0.0250686496496200575401225307814 -0.0351021498441696153114399692186 -0.0252863496541976956466513115629 +-0.0250686496496200575401225307814 0.0351021498441696153114399692186 -0.0252863496541976956466513115629 +-0.0250629007816314704204518903907 -0.0904837012290954645354901231258 0.0344175010919570908973774692186 +-0.0250629007816314704204518903907 0.0904837012290954645354901231258 0.0344175010919570908973774692186 +-0.02501370012760162353515625 -0.0232105001807212836528737653907 -0.0365456998348236070106587192186 +-0.02501370012760162353515625 0.0232105001807212836528737653907 -0.0365456998348236070106587192186 +-0.0250108502805233001708984375 -0.0181712999939918525005300153907 0.146779650449752802066072376874 +-0.0250108502805233001708984375 0.0181712999939918525005300153907 0.146779650449752802066072376874 +-0.0250066488981246955181081403907 -0.0369441002607345594932475307814 0.0225787505507469184184987653907 +-0.0250066488981246955181081403907 0.0369441002607345594932475307814 0.0225787505507469184184987653907 +-0.024999849498271942138671875 -0.00991119965910911698836471828145 0.0421518504619598430305238423443 +-0.024999849498271942138671875 0.00991119965910911698836471828145 0.0421518504619598430305238423443 +-0.0249822003766894361331818430472 -0.270673191547393832134815738755 -0.358625239133834872173878238755 +-0.0249822003766894361331818430472 0.270673191547393832134815738755 -0.358625239133834872173878238755 +-0.0249793499708175666118581403907 -0.130458149313926685675113503748 0.0696899995207786587814169365629 +-0.0249793499708175666118581403907 0.130458149313926685675113503748 0.0696899995207786587814169365629 +-0.0249280005693435675884206403907 -0.0767220020294189508636151231258 -0.183009004592895513363615123126 +-0.0249280005693435675884206403907 0.0767220020294189508636151231258 -0.183009004592895513363615123126 +-0.0248666994273662560199777971093 -0.116017502546310422029129938437 0.2755385935306549072265625 +-0.0248666994273662560199777971093 0.116017502546310422029129938437 0.2755385935306549072265625 +-0.0247338000684976591636576870314 -0.4795095622539520263671875 0.438131204247474703716846988755 +-0.0247338000684976591636576870314 0.4795095622539520263671875 0.438131204247474703716846988755 +-0.0246527493000030517578125 -0.0374891996383667006065287807814 -0.0220635995268821730186381557814 +-0.0246527493000030517578125 0.0374891996383667006065287807814 -0.0220635995268821730186381557814 +-0.024622499942779541015625 -0.55899976193904876708984375 -0.49941225349903106689453125 +-0.024622499942779541015625 0.55899976193904876708984375 -0.49941225349903106689453125 +-0.0246012002229690565635600307814 -0.0325926005840301499794087192186 -0.0912826001644134604751101846887 +-0.0246012002229690565635600307814 0.0325926005840301499794087192186 -0.0912826001644134604751101846887 +-0.0245813995599746711040456403907 -0.0137344494462013251567800153907 0.04131729900836944580078125 +-0.0245813995599746711040456403907 0.0137344494462013251567800153907 0.04131729900836944580078125 +-0.0245773002505302456954794365629 -0.0331419497728347792198100307814 -0.0282412499189376858810263115629 +-0.0245773002505302456954794365629 0.0331419497728347792198100307814 -0.0282412499189376858810263115629 +-0.0245615992695093141029438754686 -0.697841906547546297900908029987 0.0491238974034786182731870951557 +-0.0245615992695093141029438754686 0.697841906547546297900908029987 0.0491238974034786182731870951557 +-0.0245440004393458373332936872657 -0.637963938713073774877670985006 -0.122064153105020528622404185626 +-0.0245440004393458373332936872657 0.637963938713073774877670985006 -0.122064153105020528622404185626 +-0.0245316505432128934005575615629 -0.0434267014265060438682475307814 0.00350989997386932407741344519536 +-0.0245316505432128934005575615629 0.0434267014265060438682475307814 0.00350989997386932407741344519536 +-0.02450424991548061370849609375 -0.22070825099945068359375 0.114836253225803375244140625 +-0.02450424991548061370849609375 0.22070825099945068359375 0.114836253225803375244140625 +-0.0245009005069732679893412807814 -0.0434862494468689006477113423443 -0.00294139999896287935438055072268 +-0.0245009005069732679893412807814 0.0434862494468689006477113423443 -0.00294139999896287935438055072268 +-0.0244863487780094118972940009371 -0.34569080173969268798828125 0.0489723481237888322303852817186 +-0.0244863487780094118972940009371 0.34569080173969268798828125 0.0489723481237888322303852817186 +-0.0244847998023033155967631557814 -0.342133188247680686266960492503 0.205780410766601584704460492503 +-0.0244847998023033155967631557814 0.342133188247680686266960492503 0.205780410766601584704460492503 +-0.0244806006550788886333425153907 -0.0884963989257812611022302462516 -0.0396117001771926907638388115629 +-0.0244806006550788886333425153907 0.0884963989257812611022302462516 -0.0396117001771926907638388115629 +-0.0244510501623153714279013115629 -0.00333704985678195953369140625 -0.0434857487678527859786825615629 +-0.0244510501623153714279013115629 0.00333704985678195953369140625 -0.0434857487678527859786825615629 +-0.024447500705718994140625 -0.1830115020275115966796875 -0.464659988880157470703125 +-0.024447500705718994140625 0.1830115020275115966796875 -0.464659988880157470703125 +-0.0244403991848230368877370466407 -0.311534097790718111919971988755 0.8440082967281341552734375 +-0.0244403991848230368877370466407 0.311534097790718111919971988755 0.8440082967281341552734375 +-0.0244094500318169579933247348436 -0.258228291571140300408870871252 -0.8094584047794342041015625 +-0.0244094500318169579933247348436 0.258228291571140300408870871252 -0.8094584047794342041015625 +-0.0243752002716064453125 -0.0427668511867523234992738423443 -0.00876614972949027980442249230464 +-0.0243752002716064453125 0.0427668511867523234992738423443 -0.00876614972949027980442249230464 +-0.0243684008717536919330637346093 -0.0749992489814758217514523153113 -0.127598100900650018862947376874 +-0.0243684008717536919330637346093 0.0749992489814758217514523153113 -0.127598100900650018862947376874 +-0.0243542507290840162803569057814 -0.0424013495445251520354901231258 0.0104401499032974257041850307814 +-0.0243542507290840162803569057814 0.0424013495445251520354901231258 0.0104401499032974257041850307814 +-0.0242475003004074124435263115629 -0.0390100508928298977950888115629 0.019755400717258453369140625 +-0.0242475003004074124435263115629 0.0390100508928298977950888115629 0.019755400717258453369140625 +-0.0242255993187427513813059221093 -0.074556998908519744873046875 0.341107544302940324243422764994 +-0.0242255993187427513813059221093 0.074556998908519744873046875 0.341107544302940324243422764994 +-0.0242229506373405484298544365629 -0.0258057504892349257041850307814 0.0353172987699508708625550923443 +-0.0242229506373405484298544365629 0.0258057504892349257041850307814 0.0353172987699508708625550923443 +-0.0242214009165763848041574846093 -0.0745451025664806282700070028113 0.695597696304321222449118522491 +-0.0242214009165763848041574846093 0.0745451025664806282700070028113 0.695597696304321222449118522491 +-0.0241993501782417283485493442186 0 -0.349162447452545154913394753748 +-0.0241971001029014608219025461722 -0.0744723021984100425063601846887 -0.0621962010860443170745526231258 +-0.0241971001029014608219025461722 0.0744723021984100425063601846887 -0.0621962010860443170745526231258 +-0.02419474907219409942626953125 -0.14106200635433197021484375 0.2049782574176788330078125 +-0.02419474907219409942626953125 0.14106200635433197021484375 0.2049782574176788330078125 +-0.0241560004651546478271484375 -0.140157997608184814453125 0.479345500469207763671875 +-0.0241560004651546478271484375 0.140157997608184814453125 0.479345500469207763671875 +-0.0240807503461837775493581403907 -0.0200482502579689032817800153907 -0.03896389901638031005859375 +-0.0240807503461837775493581403907 0.0200482502579689032817800153907 -0.03896389901638031005859375 +-0.0240765497088432332828400461722 -0.0396324008703231867034588731258 -0.0186973497271537801578400461722 +-0.0240765497088432332828400461722 0.0396324008703231867034588731258 -0.0186973497271537801578400461722 +-0.02406099997460842132568359375 -0.3950540125370025634765625 -0.305537998676300048828125 +-0.02406099997460842132568359375 0.3950540125370025634765625 -0.305537998676300048828125 +-0.0240385495126247406005859375 -0.0542379006743431077430805942186 0.13776929676532745361328125 +-0.0240385495126247406005859375 0.0542379006743431077430805942186 0.13776929676532745361328125 +-0.0240236509591340990921182196871 -0.149495504796504974365234375 -0.315553346276283230853465511245 +-0.0240236509591340990921182196871 0.149495504796504974365234375 -0.315553346276283230853465511245 +-0.0239953503012657158588449846093 -0.00989819951355457201824794566392 -0.14773710072040557861328125 +-0.0239953503012657158588449846093 0.00989819951355457201824794566392 -0.14773710072040557861328125 +-0.0239759996533393873741069057814 -0.0100183002650737762451171875 -0.0427174985408783000617738423443 +-0.0239759996533393873741069057814 0.0100183002650737762451171875 -0.0427174985408783000617738423443 +-0.0239695496857166290283203125 -0.11368949711322784423828125 0.09486915171146392822265625 +-0.0239695496857166290283203125 0.11368949711322784423828125 0.09486915171146392822265625 +-0.0239599004387855557540731865629 -0.0310117989778518690635600307814 -0.0310514003038406399825888115629 +-0.0239599004387855557540731865629 0.0310117989778518690635600307814 -0.0310514003038406399825888115629 +-0.02392520010471343994140625 -0.0336156994104385362098774692186 0.0282413005828857435752787807814 +-0.02392520010471343994140625 0.0336156994104385362098774692186 0.0282413005828857435752787807814 +-0.023893500678241252899169921875 -0.70832325518131256103515625 0.245371498167514801025390625 +-0.023893500678241252899169921875 0.70832325518131256103515625 0.245371498167514801025390625 +-0.0238821998238563544536550153907 -0.0735005021095275906661825615629 0.0634611010551452692229901231258 +-0.0238821998238563544536550153907 0.0735005021095275906661825615629 0.0634611010551452692229901231258 +-0.0238222002983093268657643903907 -0.158528995513916026727230246252 -0.119587004184722900390625 +-0.0238222002983093268657643903907 0.158528995513916026727230246252 -0.119587004184722900390625 +-0.0238109998404979691932759067186 -0.105596700310707086734041126874 -0.103838253021240237150557561563 +-0.0238109998404979691932759067186 0.105596700310707086734041126874 -0.103838253021240237150557561563 +-0.02380909956991672515869140625 -0.3757445812225341796875 -0.590125906467437677527243522491 +-0.02380909956991672515869140625 0.3757445812225341796875 -0.590125906467437677527243522491 +-0.0237905994057655313655974538278 -0.568692612648010187292868522491 -0.18979740142822265625 +-0.0237905994057655313655974538278 0.568692612648010187292868522491 -0.18979740142822265625 +-0.0237625494599342339252512346093 -0.336415451765060380395766514994 0.0935945466160774119934728787484 +-0.0237625494599342339252512346093 0.336415451765060380395766514994 0.0935945466160774119934728787484 +-0.0237568005919456502750275461722 -0.713391208648681662829460492503 0.361260008811950694695980246252 +-0.0237568005919456502750275461722 0.713391208648681662829460492503 0.361260008811950694695980246252 +-0.0237555004656314870670197336722 -0.309683239459991488384815738755 0.32562540471553802490234375 +-0.0237555004656314870670197336722 0.309683239459991488384815738755 0.32562540471553802490234375 +-0.0236273005604743964458425153907 -0.051120102405548095703125 -0.0826346993446350208678552462516 +-0.0236273005604743964458425153907 0.051120102405548095703125 -0.0826346993446350208678552462516 +-0.02362684905529022216796875 -0.648444545269012517785256477509 -0.0382304005324840545654296875 +-0.02362684905529022216796875 0.648444545269012517785256477509 -0.0382304005324840545654296875 +-0.0235944002866745015933869211722 -0.0171421006321907064273712961722 0.0406134486198425348479901231258 +-0.0235944002866745015933869211722 0.0171421006321907064273712961722 0.0406134486198425348479901231258 +-0.0235780987888574572464150946871 -0.685598218441009432666533029987 0.139282497763633716925113503748 +-0.0235780987888574572464150946871 0.685598218441009432666533029987 0.139282497763633716925113503748 +-0.023576200008392333984375 -0.0992869973182678305922976846887 0.172006595134735124075220369377 +-0.023576200008392333984375 0.0992869973182678305922976846887 0.172006595134735124075220369377 +-0.0235377006232738474056365163278 -0.299075102806091286389289507497 0 +-0.0235377006232738474056365163278 0.299075102806091286389289507497 0 +-0.0234652496874332427978515625 -0.14815320074558258056640625 0 +-0.0234652496874332427978515625 0.14815320074558258056640625 0 +-0.0234454007819294950321076242972 -0.0721594512462616077819177462516 -0.544741448760032720421975227509 +-0.0234454007819294950321076242972 0.0721594512462616077819177462516 -0.544741448760032720421975227509 +-0.0233952999114990234375 -0.0334686011075973552375550923443 0.0912826001644134604751101846887 +-0.0233952999114990234375 0.0334686011075973552375550923443 0.0912826001644134604751101846887 +-0.0233671993017196683029013115629 -0.0852635979652404812911825615629 0.0467343002557754558234925923443 +-0.0233671993017196683029013115629 0.0852635979652404812911825615629 0.0467343002557754558234925923443 +-0.0233640506863594075992462961722 -0.0408760011196136474609375 0.016830749809741973876953125 +-0.0233640506863594075992462961722 0.0408760011196136474609375 0.016830749809741973876953125 +-0.0233446002006530775596537807814 -0.0972370028495788685241052462516 0 +-0.0233446002006530775596537807814 0.0972370028495788685241052462516 0 +-0.0233438000082969686344025461722 -0.0415179014205932644943075615629 -0.0152095496654510511924662807814 +-0.0233438000082969686344025461722 0.0415179014205932644943075615629 -0.0152095496654510511924662807814 +-0.0233106501400470768337047644536 -0.284880760312080427709702235006 0.469893041253089949194077235006 +-0.0233106501400470768337047644536 0.284880760312080427709702235006 0.469893041253089949194077235006 +-0.0233000993728637688373606096093 -0.0393986999988555908203125 -0.1428456008434295654296875 +-0.0233000993728637688373606096093 0.0393986999988555908203125 -0.1428456008434295654296875 +-0.0232828006148338324809987653907 0 -0.0442483007907867459396200615629 +-0.023251600563526153564453125 -0.0581946015357971205284037807814 0.0779278993606567493834802462516 +-0.023251600563526153564453125 0.0581946015357971205284037807814 0.0779278993606567493834802462516 +-0.0232331499457359320903737653907 -0.0291842490434646613384206403907 0.0332941502332687391807475307814 +-0.0232331499457359320903737653907 0.0291842490434646613384206403907 0.0332941502332687391807475307814 +-0.02321974933147430419921875 -0.0287227004766464240337331403907 -0.0337024003267288249641175923443 +-0.02321974933147430419921875 0.0287227004766464240337331403907 -0.0337024003267288249641175923443 +-0.0231927506625652299354634067186 -0.3206847012042999267578125 0.138287805020809173583984375 +-0.0231927506625652299354634067186 0.3206847012042999267578125 0.138287805020809173583984375 +-0.02311900071799755096435546875 -0.7834470272064208984375 0.62102901935577392578125 +-0.02311900071799755096435546875 0.7834470272064208984375 0.62102901935577392578125 +-0.0230933994054794318462331403907 -0.0911208003759384072006710653113 0.116891849040985096319644753748 +-0.0230933994054794318462331403907 0.0911208003759384072006710653113 0.116891849040985096319644753748 +-0.0230825992301106446003000627343 -0.294226647913455929828074886245 0.79711894690990447998046875 +-0.0230825992301106446003000627343 0.294226647913455929828074886245 0.79711894690990447998046875 +-0.0229987999424338361575959055472 -0.493018904328346274645866742503 -0.242699594795703910143913617503 +-0.0229987999424338361575959055472 0.493018904328346274645866742503 -0.242699594795703910143913617503 +-0.0229950502514839200118856865629 -0.0167068496346473686908762346093 -0.0411352485418319743781800923443 +-0.0229950502514839200118856865629 0.0167068496346473686908762346093 -0.0411352485418319743781800923443 +-0.0229809999465942355056924384371 -0.521733111143112160412727007497 -0.466118103265762306897102007497 +-0.0229809999465942355056924384371 0.521733111143112160412727007497 -0.466118103265762306897102007497 +-0.0229736000299453763107138115629 -0.243038392066955571957365123126 -0.761843204498291015625 +-0.0229736000299453763107138115629 0.243038392066955571957365123126 -0.761843204498291015625 +-0.0229555994272232083419638115629 -0.198329603672027593441740123126 -0.0117655999958515174175222028907 +-0.0229555994272232083419638115629 0.198329603672027593441740123126 -0.0117655999958515174175222028907 +-0.0229262992739677450015900461722 -0.020779550075531005859375 0.0392758488655090345909037807814 +-0.0229262992739677450015900461722 0.020779550075531005859375 0.0392758488655090345909037807814 +-0.02292025089263916015625 -0.1931425034999847412109375 0.15706874430179595947265625 +-0.02292025089263916015625 0.1931425034999847412109375 0.15706874430179595947265625 +-0.0229130990803241736675222028907 -0.244868391752243036441072376874 0.171798008680343616827457253748 +-0.0229130990803241736675222028907 0.244868391752243036441072376874 0.171798008680343616827457253748 +-0.022900499403476715087890625 -0.277290898561477650030582253748 -0.112184402346611020173661188437 +-0.022900499403476715087890625 0.277290898561477650030582253748 -0.112184402346611020173661188437 +-0.0228680998086929349044638115629 -0.0966392993927002036391726846887 -0.0117430999875068678428569057814 +-0.0228680998086929349044638115629 0.0966392993927002036391726846887 -0.0117430999875068678428569057814 +-0.0228312000632286057899555942186 -0.44262421131134033203125 0.404428803920745816302684261245 +-0.0228312000632286057899555942186 0.44262421131134033203125 0.404428803920745816302684261245 +-0.0228102996945381171489675153907 -0.070204198360443115234375 -0.0674615025520324679275674384371 +-0.0228102996945381171489675153907 0.070204198360443115234375 -0.0674615025520324679275674384371 +-0.0228071993216872222209889997657 -0.647996056079864546362045985006 0.0456150475889444337318501254686 +-0.0228071993216872222209889997657 0.647996056079864546362045985006 0.0456150475889444337318501254686 +-0.0227976992726326016525106865629 -0.00660419985651969961709673029304 -0.097142398357391357421875 +-0.0227976992726326016525106865629 0.00660419985651969961709673029304 -0.097142398357391357421875 +-0.0227504998445510892013388115629 -0.0439671486616134699065838731258 0.00702160000801086477822954279304 +-0.0227504998445510892013388115629 0.0439671486616134699065838731258 0.00702160000801086477822954279304 +-0.0227338999509811429122763115629 -0.0441418498754501398284588731258 -0.00588794983923435211181640625 +-0.0227338999509811429122763115629 0.0441418498754501398284588731258 -0.00588794983923435211181640625 +-0.0227164000272750861431081403907 -0.198209202289581304379240123126 0.0140395998954772963096537807814 +-0.0227164000272750861431081403907 0.198209202289581304379240123126 0.0140395998954772963096537807814 +-0.02269954979419708251953125 -0.04455029964447021484375 0 +-0.02269954979419708251953125 0.04455029964447021484375 0 +-0.0226619005203247091129181711722 -0.0963860988616943442641726846887 0.0140058994293212890625 +-0.0226619005203247091129181711722 -0.03639765083789825439453125 0.0257225006818771369243581403907 +-0.0226619005203247091129181711722 0.03639765083789825439453125 0.0257225006818771369243581403907 +-0.0226619005203247091129181711722 0.0963860988616943442641726846887 0.0140058994293212890625 +-0.0226612508296966559673268903907 -0.147222447395324695929019753748 -0.0176636997610330574726145158593 +-0.0226612508296966559673268903907 0.147222447395324695929019753748 -0.0176636997610330574726145158593 +-0.02265775017440319061279296875 -0.0368527509272098541259765625 0.24622850120067596435546875 +-0.02265775017440319061279296875 0.0368527509272098541259765625 0.24622850120067596435546875 +-0.0226560004055500023578684221093 -0.588889789581298783716079014994 -0.112674602866172784976228626874 +-0.0226560004055500023578684221093 0.588889789581298783716079014994 -0.112674602866172784976228626874 +-0.022647000849246978759765625 -0.0164540000259876251220703125 -0.24842774868011474609375 +-0.022647000849246978759765625 0.0164540000259876251220703125 -0.24842774868011474609375 +-0.022569000720977783203125 -0.259760391712188731805355246252 -0.14837519824504852294921875 +-0.022569000720977783203125 0.259760391712188731805355246252 -0.14837519824504852294921875 +-0.0225428998470306417301056711722 -0.0264079988002777106548268903907 -0.0937785983085632351974325615629 +-0.0225428998470306417301056711722 0.0264079988002777106548268903907 -0.0937785983085632351974325615629 +-0.0225104995071887976909597028907 -0.188492095470428472347990123126 0.232301402091979969366519753748 +-0.0225104995071887976909597028907 0.188492095470428472347990123126 0.232301402091979969366519753748 +-0.0224913008511066457584259836722 -0.0692204523831605883499307196871 0.645912146568298317639289507497 +-0.0224913008511066457584259836722 0.0692204523831605883499307196871 0.645912146568298317639289507497 +-0.0224648505449295057823100307814 -0.00665350034832954458779985529304 -0.0441708505153656019737162807814 +-0.0224648505449295057823100307814 0.00665350034832954458779985529304 -0.0441708505153656019737162807814 +-0.0224592506885528571392018903907 -0.0431333988904953058440838731258 -0.0116228498518466949462890625 +-0.0224592506885528571392018903907 0.0431333988904953058440838731258 -0.0116228498518466949462890625 +-0.0224381998181343092491069057814 -0.0263494014739990255191681711722 -0.196982800960540771484375 +-0.0224381998181343092491069057814 0.0263494014739990255191681711722 -0.196982800960540771484375 +-0.0224038496613502523258087961722 -0.03723619878292083740234375 -0.024729199707508087158203125 +-0.0224038496613502523258087961722 0.03723619878292083740234375 -0.024729199707508087158203125 +-0.0223984003067016629318075615629 0 0.0974592983722686878600427462516 +-0.0223948001861572279502787807814 0 0.198742198944091813528345369377 +-0.0223744004964828505088725307814 -0.0162560001015663140033762346093 0.399042797088623057977230246252 +-0.0223744004964828505088725307814 0.0162560001015663140033762346093 0.399042797088623057977230246252 +-0.0223608002066612264469025461722 -0.04253239929676055908203125 0.0138198494911193851125696951954 +-0.0223608002066612264469025461722 0.04253239929676055908203125 0.0138198494911193851125696951954 +-0.0223605498671531691123881557814 -0.02628634870052337646484375 -0.03618060052394866943359375 +-0.0223605498671531691123881557814 0.02628634870052337646484375 -0.03618060052394866943359375 +-0.0223605006933212287212331403907 0 0.0447214514017105144172425923443 +-0.0223256006836891202071981865629 -0.00805710032582282985325061730464 0.097142398357391357421875 +-0.0223256006836891202071981865629 0.00805710032582282985325061730464 0.097142398357391357421875 +-0.02232100069522857666015625 -0.0162169992923736593082306711722 0.198087799549102799856470369377 +-0.02232100069522857666015625 0.0162169992923736593082306711722 0.198087799549102799856470369377 +-0.0223135493695735924457590471093 -0.14682765305042266845703125 0.0210648000240325934673268903907 +-0.0223135493695735924457590471093 0.14682765305042266845703125 0.0210648000240325934673268903907 +-0.0223006006330251672908904225778 -0.661101704835891701428352007497 0.229013398289680453201455634371 +-0.0223006006330251672908904225778 0.661101704835891701428352007497 0.229013398289680453201455634371 +-0.0222915500402450575401225307814 -0.00392290018498897552490234375 0.0445836007595062297492738423443 +-0.0222915500402450575401225307814 0.00392290018498897552490234375 0.0445836007595062297492738423443 +-0.0222904488444328301166574846093 -0.068604551255702972412109375 -0.342485851049423195568977007497 +-0.0222904488444328301166574846093 0.068604551255702972412109375 -0.342485851049423195568977007497 +-0.0222720005549490451812744140625 -0.6688042581081390380859375 0.338681258261203765869140625 +-0.0222720005549490451812744140625 0.6688042581081390380859375 0.338681258261203765869140625 +-0.0222716003656387336040456403907 -0.0946197986602783230880575615629 -0.0234749004244804403140900461722 +-0.0222716003656387336040456403907 0.0946197986602783230880575615629 -0.0234749004244804403140900461722 +-0.0222064003348350531841237653907 -0.240598392486572276727230246252 -0.318777990341186534539730246252 +-0.0222064003348350531841237653907 0.240598392486572276727230246252 -0.318777990341186534539730246252 +-0.0221459012478589997718891879686 -0.29062424600124359130859375 -0.193770852684974653756810880623 +-0.0221459012478589997718891879686 0.29062424600124359130859375 -0.193770852684974653756810880623 +-0.02214075066149234771728515625 -0.17557625472545623779296875 -0.17658649384975433349609375 +-0.02214075066149234771728515625 0.17557625472545623779296875 -0.17658649384975433349609375 +-0.022127099335193634033203125 -0.0243117004632949842979350307814 0.0376740008592605646331463731258 +-0.022127099335193634033203125 0.0243117004632949842979350307814 0.0376740008592605646331463731258 +-0.022108449600636959075927734375 -0.34890568256378173828125 -0.547974056005477883068977007497 +-0.022108449600636959075927734375 0.34890568256378173828125 -0.547974056005477883068977007497 +-0.0221075996756553670719025461722 -0.0160619005560874959781525461722 0.0961938977241516141036825615629 +-0.0221075996756553670719025461722 0.0160619005560874959781525461722 0.0961938977241516141036825615629 +-0.0221035495400428751155974538278 -0.156888896226882929019197376874 0.312085559964179970471320757497 +-0.0221035495400428751155974538278 0.156888896226882929019197376874 0.312085559964179970471320757497 +-0.022090099751949310302734375 -0.0323702991008758544921875 0.0310514003038406399825888115629 +-0.022090099751949310302734375 0.0323702991008758544921875 0.0310514003038406399825888115629 +-0.0220852002501487759689169365629 -0.00782160013914108380450596058608 0.04417090117931365966796875 +-0.0220852002501487759689169365629 0.00782160013914108380450596058608 0.04417090117931365966796875 +-0.0220714002847671522666850307814 -0.189239394664764415399105246252 -0.0608381986618042047698651231258 +-0.0220714002847671522666850307814 0.189239394664764415399105246252 -0.0608381986618042047698651231258 +-0.0220196999609470374370534528907 -0.289992892742156949115184261245 -0.0736161008477210915268429403113 +-0.0220196999609470374370534528907 0.289992892742156949115184261245 -0.0736161008477210915268429403113 +-0.0220027506351470961143412807814 -0.164710351824760431460603626874 -0.418193989992141745837272992503 +-0.0220027506351470961143412807814 0.164710351824760431460603626874 -0.418193989992141745837272992503 +-0.0219944000244140652755575615629 -0.179359602928161637747095369377 -0.0857107996940612848479901231258 +-0.0219944000244140652755575615629 0.179359602928161637747095369377 -0.0857107996940612848479901231258 +-0.0219813004136085524131694057814 -0.0385917991399765056281800923443 0.0229672506451606764366069057814 +-0.0219813004136085524131694057814 0.0385917991399765056281800923443 0.0229672506451606764366069057814 +-0.0219630506820976713344695241403 -0.744274675846099853515625 0.589977568387985207287727007497 +-0.0219630506820976713344695241403 0.744274675846099853515625 0.589977568387985207287727007497 +-0.02190949954092502593994140625 -0.121426753699779510498046875 -0.2174292504787445068359375 +-0.02190949954092502593994140625 0.121426753699779510498046875 -0.2174292504787445068359375 +-0.0219074994325637838199494211722 -0.0395083993673324626594300923443 -0.0214276999235153212119975307814 +-0.0219074994325637838199494211722 0.0395083993673324626594300923443 -0.0214276999235153212119975307814 +-0.0218939488753676428367533901564 -0.636626917123794600072983485006 0.129333747923374181576505748126 +-0.0218939488753676428367533901564 0.636626917123794600072983485006 0.129333747923374181576505748126 +-0.021864600479602813720703125 -0.110489797592163097039730246252 -0.165269398689270041735710492503 +-0.021864600479602813720703125 0.110489797592163097039730246252 -0.165269398689270041735710492503 +-0.0218437492847442654708700615629 -0.0354483008384704617599325615629 -0.0276815503835678121402619211722 +-0.0218437492847442654708700615629 0.0354483008384704617599325615629 -0.0276815503835678121402619211722 +-0.0218428507447242722938618442186 -0.0281143493950366980815847028907 0.1457135975360870361328125 +-0.0218428507447242722938618442186 0.0281143493950366980815847028907 0.1457135975360870361328125 +-0.0218149006366729764083700615629 -0.0935128986835479791839276231258 0.0279186010360717787315287807814 +-0.0218149006366729764083700615629 0.0935128986835479791839276231258 0.0279186010360717787315287807814 +-0.021809399127960205078125 -0.598564195632934503699118522491 -0.03528960049152374267578125 +-0.021809399127960205078125 0.598564195632934503699118522491 -0.03528960049152374267578125 +-0.0218080494552850730205495466407 -0.521301561594009421618522992503 -0.173980951309204129318075615629 +-0.0218080494552850730205495466407 0.521301561594009421618522992503 -0.173980951309204129318075615629 +-0.0217857003211975111534037807814 -0.0132758006453514102590540701954 -0.0430016010999679579307475307814 +-0.0217857003211975111534037807814 0.0132758006453514102590540701954 -0.0430016010999679579307475307814 +-0.0217572011053562171245534528907 -0.297131699323654185906917746252 -0.035204999148845672607421875 +-0.0217572011053562171245534528907 0.297131699323654185906917746252 -0.035204999148845672607421875 +-0.0217427000403404256656525461722 -0.0116720497608184814453125 0.0434858500957489013671875 +-0.0217427000403404256656525461722 0.0116720497608184814453125 0.0434858500957489013671875 +-0.0217404004186391823505442033593 -0.126142197847366327456697376874 0.431410950422286998406917746252 +-0.0217404004186391823505442033593 0.126142197847366327456697376874 0.431410950422286998406917746252 +-0.0217280991375446326518972028907 -0.120451650023460379856921065311 0.0867139488458633367340411268742 +-0.0217280991375446326518972028907 0.120451650023460379856921065311 0.0867139488458633367340411268742 +-0.0217247992753982557823100307814 -0.276919198036193858758480246252 0.7502295970916748046875 +-0.0217247992753982557823100307814 0.276919198036193858758480246252 0.7502295970916748046875 +-0.0216817505657672868202290317186 -0.138287696242332447393863503748 -0.0539111986756324740310830634371 +-0.0216817505657672868202290317186 0.138287696242332447393863503748 -0.0539111986756324740310830634371 +-0.0216703996062278768375275461722 -0.195705997943878190481470369377 -0.0350645989179611192176899692186 +-0.0216703996062278768375275461722 0.195705997943878190481470369377 -0.0350645989179611192176899692186 +-0.0216647990047931678081472028907 -0.196047592163085926397769753748 -0.226044291257858270816072376874 +-0.0216647990047931678081472028907 0.196047592163085926397769753748 -0.226044291257858270816072376874 +-0.0216548999771475798870046247657 -0.355548611283302340435596988755 -0.274984198808670032843082253748 +-0.0216548999771475798870046247657 0.355548611283302340435596988755 -0.274984198808670032843082253748 +-0.0215838007628917673275115163278 -0.0664293006062507546127804403113 -0.132745197415351873226896373126 +-0.0215838007628917673275115163278 0.0664293006062507546127804403113 -0.132745197415351873226896373126 +-0.0215491510927677161479909528907 -0.144290703535079944952457253748 -0.0348683997988700825065855326557 +-0.0215491510927677161479909528907 0.144290703535079944952457253748 -0.0348683997988700825065855326557 +-0.021537750028073787689208984375 -0.227848492562770843505859375 -0.7142280042171478271484375 +-0.021537750028073787689208984375 0.227848492562770843505859375 -0.7142280042171478271484375 +-0.0215005993843078620220143903907 -0.0232105001807212836528737653907 -0.0387169003486633328536825615629 +-0.0215005993843078620220143903907 0.0232105001807212836528737653907 -0.0387169003486633328536825615629 +-0.0214968010783195481727680942186 -0.0984922528266906766036825615629 -0.111072751879692080412276311563 +-0.0214968010783195481727680942186 0.0984922528266906766036825615629 -0.111072751879692080412276311563 +-0.0214611008763313272640349538278 -0.129739049077033985479801003748 -0.072161100804805755615234375 +-0.0214611008763313272640349538278 0.129739049077033985479801003748 -0.072161100804805755615234375 +-0.02145870029926300048828125 -0.0444460004568099989463725307814 -0.086971700191497802734375 +-0.02145870029926300048828125 0.0444460004568099989463725307814 -0.086971700191497802734375 +-0.0214241998270153985450825473436 -0.299366539716720558850227007497 0.180057859420776344983039507497 +-0.0214241998270153985450825473436 0.299366539716720558850227007497 0.180057859420776344983039507497 +-0.0213719502091407782817800153907 -0.0033354498445987701416015625 -0.0450789511203765896896200615629 +-0.0213719502091407782817800153907 0.0033354498445987701416015625 -0.0450789511203765896896200615629 +-0.02136499993503093719482421875 -0.065756998956203460693359375 -0.9976069927215576171875 +-0.02136499993503093719482421875 0.065756998956203460693359375 -0.9976069927215576171875 +-0.0213394999504089369346537807814 -0.484466460347175609246761496252 -0.432823953032493602410823996252 +-0.0213394999504089369346537807814 0.484466460347175609246761496252 -0.432823953032493602410823996252 +-0.0213244006037712104106862653907 -0.145058596134185785464509876874 0.136026597023010259457365123126 +-0.0213244006037712104106862653907 0.145058596134185785464509876874 0.136026597023010259457365123126 +-0.0213144004344940213302450615629 -0.065600097179412841796875 -0.0724039018154144370376101846887 +-0.0213144004344940213302450615629 0.065600097179412841796875 -0.0724039018154144370376101846887 +-0.02131400071084499359130859375 -0.065599501132965087890625 -0.4952194988727569580078125 +-0.02131400071084499359130859375 0.065599501132965087890625 -0.4952194988727569580078125 +-0.0212739005684852607036550153907 -0.03337495028972625732421875 -0.0305537998676300055767018903907 +-0.0212739005684852607036550153907 0.03337495028972625732421875 -0.0305537998676300055767018903907 +-0.0212661504745483426193075615629 -0.0154505506157875064504603201954 0.0425327003002166775802450615629 +-0.0212661504745483426193075615629 0.0154505506157875064504603201954 0.0425327003002166775802450615629 +-0.0212472498416900641704518903907 -0.0415405511856079129318075615629 -0.0179703995585441603233256557814 +-0.0212472498416900641704518903907 0.0415405511856079129318075615629 -0.0179703995585441603233256557814 +-0.021238900721073150634765625 -0.039976298809051513671875 0.0891673028469085748870526231258 +-0.021238900721073150634765625 0.039976298809051513671875 0.0891673028469085748870526231258 +-0.0212109506130218512798268903907 -0.0276683002710342434982138115629 0.0358408004045486436317524692186 +-0.0212109506130218512798268903907 0.0276683002710342434982138115629 0.0358408004045486436317524692186 +-0.0212052002549171468570587961722 -0.0915042996406555259047976846887 -0.0343118011951446533203125 +-0.0212052002549171468570587961722 0.0915042996406555259047976846887 -0.0343118011951446533203125 +-0.0211986005306243896484375 -0.0785893023014068714537927462516 0.0580889999866485637336488423443 +-0.0211986005306243896484375 0.0785893023014068714537927462516 0.0580889999866485637336488423443 +-0.021191500127315521240234375 -0.2589825093746185302734375 0.4271754920482635498046875 +-0.021191500127315521240234375 0.2589825093746185302734375 0.4271754920482635498046875 +-0.0211620002985000617290456403907 -0.0406082987785339397102113423443 0.020078249275684356689453125 +-0.0211620002985000617290456403907 0.0406082987785339397102113423443 0.020078249275684356689453125 +-0.0211160004138946540142018903907 -0.275273990631103526727230246252 0.28944480419158935546875 +-0.0211160004138946540142018903907 0.275273990631103526727230246252 0.28944480419158935546875 +-0.02111049927771091461181640625 -0.0649722516536712646484375 -0.2404847443103790283203125 +-0.02111049927771091461181640625 0.0649722516536712646484375 -0.2404847443103790283203125 +-0.0210527993738651268695871721093 -0.598150205612182572778579014994 0.0421061977744102491905131557814 +-0.0210527993738651268695871721093 0.598150205612182572778579014994 0.0421061977744102491905131557814 +-0.021023400127887725830078125 -0.0859845995903015247741052462516 -0.04652599990367889404296875 +-0.021023400127887725830078125 0.0859845995903015247741052462516 -0.04652599990367889404296875 +-0.0210087999701499966720419365629 -0.0646571993827819851974325615629 0.0733353972434997586349325615629 +-0.0210087999701499966720419365629 0.0646571993827819851974325615629 0.0733353972434997586349325615629 +-0.0209959506988525411441681711722 -0.0452419489622116130500550923443 0.00351249985396862030029296875 +-0.0209959506988525411441681711722 0.0452419489622116130500550923443 0.00351249985396862030029296875 +-0.0209882989525794969032368442186 -0.2963064014911651611328125 0.0419762983918189960808042826557 +-0.0209882989525794969032368442186 0.2963064014911651611328125 0.0419762983918189960808042826557 +-0.0209764495491981534103231865629 -0.0452915996313095134406800923443 -0.00294295009225606927008578317384 +-0.0209764495491981534103231865629 0.0452915996313095134406800923443 -0.00294295009225606927008578317384 +-0.0209583997726440450504181711722 -0.0645042002201080405532351846887 -0.188148796558380126953125 +-0.0209583997726440450504181711722 0.0645042002201080405532351846887 -0.188148796558380126953125 +-0.02093400061130523681640625 -0.0644272029399871881683026231258 0.188177800178527837582365123126 +-0.02093400061130523681640625 0.0644272029399871881683026231258 0.188177800178527837582365123126 +-0.0209286000579595593551474053129 -0.405738860368728693206463731258 0.370726403594017039910823996252 +-0.0209286000579595593551474053129 0.405738860368728693206463731258 0.370726403594017039910823996252 +-0.02090799994766712188720703125 -0.4481990039348602294921875 -0.22063599526882171630859375 +-0.02090799994766712188720703125 0.4481990039348602294921875 -0.22063599526882171630859375 +-0.0208992496132850667789337961722 -0.0352615505456924452354350307814 0.0286329507827758796001393903907 +-0.0208992496132850667789337961722 0.0352615505456924452354350307814 0.0286329507827758796001393903907 +-0.020880199968814849853515625 -0.194473803043365478515625 0.0417605996131897028167401231258 +-0.020880199968814849853515625 0.194473803043365478515625 0.0417605996131897028167401231258 +-0.0208586499094963080669362653907 -0.0445870995521545424034037807814 -0.0087696500122547149658203125 +-0.0208586499094963080669362653907 0.0445870995521545424034037807814 -0.0087696500122547149658203125 +-0.0208298996090888997867462961722 -0.0442379504442214979698100307814 0.0104461498558521270751953125 +-0.0208298996090888997867462961722 0.0442379504442214979698100307814 0.0104461498558521270751953125 +-0.0208217993378639228130300153907 -0.149886202812194835320980246252 -0.130769395828247064761384876874 +-0.0208217993378639228130300153907 0.149886202812194835320980246252 -0.130769395828247064761384876874 +-0.0208071006461977951740305314843 -0.70510232448577880859375 0.558926117420196599816506477509 +-0.0208071006461977951740305314843 0.70510232448577880859375 0.558926117420196599816506477509 +-0.0207872005179524400875212819528 -0.624217307567596413342414507497 0.316102507710456837042301003748 +-0.0207872005179524400875212819528 0.624217307567596413342414507497 0.316102507710456837042301003748 +-0.0207680003717541708518901089064 -0.539815640449524014599091970013 -0.103285052627325069085628683752 +-0.0207680003717541708518901089064 0.539815640449524014599091970013 -0.103285052627325069085628683752 +-0.0207647994160652139827849538278 -0.06390599906444549560546875 0.292377895116806008068977007497 +-0.0207647994160652139827849538278 0.06390599906444549560546875 0.292377895116806008068977007497 +-0.0207612007856368997738005788278 -0.0638958021998405484298544365629 0.596226596832275412829460492503 +-0.0207612007856368997738005788278 0.0638958021998405484298544365629 0.596226596832275412829460492503 +-0.0207423001527786247943918596093 0 -0.299282097816467251849559261245 +-0.0207298502326011650775949846093 -0.14265824854373931884765625 0.0414595484733581501335386576557 +-0.0207298502326011650775949846093 0.14265824854373931884765625 0.0414595484733581501335386576557 +-0.0207295507192611673519255788278 -0.0637978479266166631500567518742 0.13416449725627899169921875 +-0.0207295507192611673519255788278 0.0637978479266166631500567518742 0.13416449725627899169921875 +-0.02072224952280521392822265625 -0.09668125212192535400390625 0.22961549460887908935546875 +-0.02072224952280521392822265625 0.09668125212192535400390625 0.22961549460887908935546875 +-0.0207077005878090851520578752343 -0.613880154490470952843850227509 0.212655298411846160888671875 +-0.0207077005878090851520578752343 0.613880154490470952843850227509 0.212655298411846160888671875 +-0.02069699950516223907470703125 -0.58471000194549560546875 0.810977995395660400390625 +-0.02069699950516223907470703125 0.58471000194549560546875 0.810977995395660400390625 +-0.0206927999854087836528737653907 0 -0.148565849661827092953458873126 +-0.0206584498286247267295756557814 -0.0191339001059532172466237653907 0.0413173496723175104339276231258 +-0.0206584498286247267295756557814 0.0191339001059532172466237653907 0.0413173496723175104339276231258 +-0.0206101998686790480186381557814 0 -0.0978531002998352106292401231258 +-0.0205917008221149430702290317186 -0.12813900411128997802734375 -0.270474296808242808953792746252 +-0.0205917008221149430702290317186 0.12813900411128997802734375 -0.270474296808242808953792746252 +-0.0205765500664711019351837961722 -0.031114399433135986328125 -0.0332941502332687391807475307814 +-0.0205765500664711019351837961722 0.031114399433135986328125 -0.0332941502332687391807475307814 +-0.0204988002777099637130575615629 -0.187209594249725358450220369377 0.0673229992389678955078125 +-0.0204988002777099637130575615629 0.187209594249725358450220369377 0.0673229992389678955078125 +-0.0204976007342338589767294365629 -0.019980199635028839111328125 -0.0409956514835357679893412807814 +-0.0204976007342338589767294365629 0.019980199635028839111328125 -0.0409956514835357679893412807814 +-0.020435750484466552734375 -0.04329355061054229736328125 -0.014423899352550506591796875 +-0.020435750484466552734375 0.04329355061054229736328125 -0.014423899352550506591796875 +-0.0204077996313571929931640625 -0.322066783905029296875 -0.505822205543518088610710492503 +-0.0204077996313571929931640625 0.322066783905029296875 -0.505822205543518088610710492503 +-0.0203850001096725491622763115629 -0.0198385000228881863693075615629 -0.0958691000938415582854901231258 +-0.0203850001096725491622763115629 0.0198385000228881863693075615629 -0.0958691000938415582854901231258 +-0.0203678995370864847347380788278 -0.288356101512908913342414507497 0.0802238970994949285309161268742 +-0.0203678995370864847347380788278 0.288356101512908913342414507497 0.0802238970994949285309161268742 +-0.020366999320685863494873046875 -0.259611748158931732177734375 0.70334024727344512939453125 +-0.020366999320685863494873046875 0.259611748158931732177734375 0.70334024727344512939453125 +-0.0203401505947113057926056711722 -0.00992894992232322762260032789072 -0.0445836007595062297492738423443 +-0.0203401505947113057926056711722 0.00992894992232322762260032789072 -0.0445836007595062297492738423443 +-0.0203033000230789205386994211722 -0.089100301265716552734375 0.0406067013740539564659037807814 +-0.0203033000230789205386994211722 0.089100301265716552734375 0.0406067013740539564659037807814 +-0.0202967499382793910289723982032 -0.06246914900839328765869140625 -0.947726643085479714123664507497 +-0.0202967499382793910289723982032 0.06246914900839328765869140625 -0.947726643085479714123664507497 +-0.02024669945240020751953125 -0.135874351859092717953458873126 0.0602348998188972431511167826557 +-0.02024669945240020751953125 0.135874351859092717953458873126 0.0602348998188972431511167826557 +-0.0202294498682022115543244211722 -0.04240129888057708740234375 0.0171143501996994032432475307814 +-0.0202294498682022115543244211722 0.04240129888057708740234375 0.0171143501996994032432475307814 +-0.0202097989618778214881977817186 -0.587655615806579545434829014994 0.119384998083114618472322376874 +-0.0202097989618778214881977817186 0.587655615806579545434829014994 0.119384998083114618472322376874 +-0.0201802000403404242778737653907 -0.0228896006941795362998881557814 0.095230400562286376953125 +-0.0201802000403404242778737653907 0.0228896006941795362998881557814 0.095230400562286376953125 +-0.0201676994562149068668244211722 0 -0.0457522004842758206466513115629 +-0.0201417505741119384765625 -0.0309590011835098287418244211722 0.0337024003267288249641175923443 +-0.0201417505741119384765625 0.0309590011835098287418244211722 0.0337024003267288249641175923443 +-0.0201019000262021990677041571871 -0.212658593058586115054353626874 -0.666612803936004638671875 +-0.0201019000262021990677041571871 0.212658593058586115054353626874 -0.666612803936004638671875 +-0.01999194920063018798828125 -0.548683845996856711657585492503 -0.0323488004505634307861328125 +-0.01999194920063018798828125 0.548683845996856711657585492503 -0.0323488004505634307861328125 +-0.0199885502457618699501118442186 -0.0294615000486373873611611884371 -0.1457135975360870361328125 +-0.0199885502457618699501118442186 0.0294615000486373873611611884371 -0.1457135975360870361328125 +-0.0199533998966217041015625 -0.0827107012271881131271200615629 -0.0525433003902435330489950615629 +-0.0199533998966217041015625 0.0827107012271881131271200615629 -0.0525433003902435330489950615629 +-0.0199234500527381910850444057814 -0.0226992502808570882633087961722 0.0398472487926483168174662807814 +-0.0199234500527381910850444057814 0.0226992502808570882633087961722 0.0398472487926483168174662807814 +-0.0198795005679130547260324846093 -0.274872601032257080078125 0.11853240430355072021484375 +-0.0198795005679130547260324846093 0.274872601032257080078125 0.11853240430355072021484375 +-0.0198254995048046112060546875 -0.473910510540008544921875 -0.158164501190185546875 +-0.0198254995048046112060546875 0.473910510540008544921875 -0.158164501190185546875 +-0.0197817005217075340961496721093 -0.100440895557403556126452315311 0.109637099504470827970870061563 +-0.0197817005217075340961496721093 0.100440895557403556126452315311 0.109637099504470827970870061563 +-0.0197596505284309414962606865629 -0.0287227004766464240337331403907 -0.0358408004045486436317524692186 +-0.0197596505284309414962606865629 0.0287227004766464240337331403907 -0.0358408004045486436317524692186 +-0.0197164997458457967594025461722 -0.0606821000576019328742738423443 -0.0769997000694274957854901231258 +-0.0197164997458457967594025461722 0.0606821000576019328742738423443 -0.0769997000694274957854901231258 +-0.019711799919605255126953125 -0.124621349573135364874332253748 -0.0811231523752212468902911268742 +-0.019711799919605255126953125 0.124621349573135364874332253748 -0.0811231523752212468902911268742 +-0.0196979999542236314247212192186 -0.447199809551239002569644753748 -0.399529802799224842413394753748 +-0.0196979999542236314247212192186 0.447199809551239002569644753748 -0.399529802799224842413394753748 +-0.01967065036296844482421875 -0.00203370004892349269184914639652 0.04592309892177581787109375 +-0.01967065036296844482421875 0.00203370004892349269184914639652 0.04592309892177581787109375 +-0.0196621495299041278148610700782 -0.555474501848220780786391514994 0.770429095625877358166633257497 +-0.0196621495299041278148610700782 0.555474501848220780786391514994 0.770429095625877358166633257497 +-0.0196511506102979190135915388282 -0.665929973125457763671875 0.527874666452407770300681022491 +-0.0196511506102979190135915388282 0.665929973125457763671875 0.527874666452407770300681022491 +-0.0196483001112937941123881557814 -0.082844197750091552734375 0.0524479985237121595909037807814 +-0.0196483001112937941123881557814 0.082844197750091552734375 0.0524479985237121595909037807814 +-0.01964350044727325439453125 -0.0470910996198654202560263115629 0.0860032975673675620376101846887 +-0.01964350044727325439453125 0.0470910996198654202560263115629 0.0860032975673675620376101846887 +-0.0196317493915557882144806711722 -0.0391920000314712538291850307814 -0.0240536496043205275108256557814 +-0.0196317493915557882144806711722 0.0391920000314712538291850307814 -0.0240536496043205275108256557814 +-0.01961475051939487457275390625 -0.249229252338409423828125 0 +-0.01961475051939487457275390625 0.249229252338409423828125 0 +-0.0196033999323844930484650461722 -0.176566600799560546875 0.0918690025806427057464276231258 +-0.0196033999323844930484650461722 0.176566600799560546875 0.0918690025806427057464276231258 +-0.0195777505636215223838725307814 -0.03793235123157501220703125 0.0260355502367019681075888115629 +-0.0195777505636215223838725307814 0.03793235123157501220703125 0.0260355502367019681075888115629 +-0.0195776004344224915931782504686 -0.0142240000888705243192733362889 0.349162447452545154913394753748 +-0.0195776004344224915931782504686 0.0142240000888705243192733362889 0.349162447452545154913394753748 +-0.0195580005645751980880575615629 -0.146409201622009293997095369377 -0.371727991104126020971420985006 +-0.0195580005645751980880575615629 0.146409201622009293997095369377 -0.371727991104126020971420985006 +-0.019552700221538543701171875 -0.0385901987552642877776776231258 -0.0901580989360809409438601846887 +-0.019552700221538543701171875 0.0385901987552642877776776231258 -0.0901580989360809409438601846887 +-0.0195301502943038968185263115629 -0.0059537999331951141357421875 0.0456412494182586725433026231258 +-0.0195301502943038968185263115629 0.0059537999331951141357421875 0.0456412494182586725433026231258 +-0.0194306002929806702350656877343 -0.210523593425750721319644753748 -0.278930741548538196905582253748 +-0.0194306002929806702350656877343 0.210523593425750721319644753748 -0.278930741548538196905582253748 +-0.01937355101108551025390625 -0.1265860497951507568359375 0.0781066507101058904449786268742 +-0.01937355101108551025390625 0.1265860497951507568359375 0.0781066507101058904449786268742 +-0.0193581998348236090923268903907 -0.0166169494390487684776225307814 -0.0430016010999679579307475307814 +-0.0193581998348236090923268903907 0.0166169494390487684776225307814 -0.0430016010999679579307475307814 +-0.0193557992577552823165731865629 -0.112849605083465587274105246252 0.163982605934143071957365123126 +-0.0193557992577552823165731865629 0.112849605083465587274105246252 0.163982605934143071957365123126 +-0.0193248003721237203433869211722 -0.112126398086547854338057561563 0.383476400375366233141960492503 +-0.0193248003721237203433869211722 0.112126398086547854338057561563 0.383476400375366233141960492503 +-0.01930280029773712158203125 -0.0979426026344299427428552462516 -0.00588590018451213854017156634768 +-0.01930280029773712158203125 0.0979426026344299427428552462516 -0.00588590018451213854017156634768 +-0.0193024004809558384632151017968 -0.579630357027053899621193977509 0.293523757159709963726612613755 +-0.0193024004809558384632151017968 0.579630357027053899621193977509 0.293523757159709963726612613755 +-0.01929984986782073974609375 -0.00666275024414062552041704279304 -0.0456412494182586725433026231258 +-0.01929984986782073974609375 0.00666275024414062552041704279304 -0.0456412494182586725433026231258 +-0.0192983994260430349876322964064 -0.548304355144500821239716970013 0.0385973479598760646491761860943 +-0.0192983994260430349876322964064 0.548304355144500821239716970013 0.0385973479598760646491761860943 +-0.01925075054168701171875 -0.00986355021595954929714000769536 0.0450790494680404704719300923443 +-0.01925075054168701171875 0.00986355021595954929714000769536 0.0450790494680404704719300923443 +-0.0192487999796867384483256557814 -0.316043210029602061883480246252 -0.244430398941040044613615123126 +-0.0192487999796867384483256557814 0.316043210029602061883480246252 -0.244430398941040044613615123126 +-0.0192284999415278448631205776564 -0.0591812990605831146240234375 -0.897846293449401922082131477509 +-0.0192284999415278448631205776564 0.0591812990605831146240234375 -0.897846293449401922082131477509 +-0.0192130997776985175395925153907 -0.0978851974010467584808026231258 0.0070249997079372406005859375 +-0.0192130997776985175395925153907 0.0978851974010467584808026231258 0.0070249997079372406005859375 +-0.0191826006397604956199565151564 -0.0590395510196685818771200615629 -0.445697548985481251104801003748 +-0.0191826006397604956199565151564 0.0590395510196685818771200615629 -0.445697548985481251104801003748 +-0.0191603496670722968364675153907 -0.0456490993499755887130575615629 0.00700294971466064453125 +-0.0191603496670722968364675153907 0.0456490993499755887130575615629 0.00700294971466064453125 +-0.0191511496901512166812775461722 -0.0458121985197067274619975307814 -0.00587154999375343392142845289072 +-0.0191511496901512166812775461722 0.0458121985197067274619975307814 -0.00587154999375343392142845289072 +-0.0191341996192932149722931711722 -0.0461939513683319105674662807814 0 +-0.0191341996192932149722931711722 0.0461939513683319105674662807814 0 +-0.0191148005425930030132253278907 -0.566658604145049982214743522491 0.1962971985340118408203125 +-0.0191148005425930030132253278907 0.566658604145049982214743522491 0.1962971985340118408203125 +-0.0191060990095138528988005788278 -0.05880390107631683349609375 -0.293559300899505604132144753748 +-0.0191060990095138528988005788278 0.05880390107631683349609375 -0.293559300899505604132144753748 +-0.01910080015659332275390625 -0.0374691992998123155067524692186 -0.0270410507917404202560263115629 +-0.01910080015659332275390625 0.0374691992998123155067524692186 -0.0270410507917404202560263115629 +-0.01909424923360347747802734375 -0.20405699312686920166015625 0.14316500723361968994140625 +-0.01909424923360347747802734375 0.20405699312686920166015625 0.14316500723361968994140625 +-0.0190837495028972625732421875 -0.23107574880123138427734375 -0.093487001955509185791015625 +-0.0190837495028972625732421875 0.23107574880123138427734375 -0.093487001955509185791015625 +-0.0190723501145839691162109375 -0.233084258437156688348323996252 0.384457942843437205926448996252 +-0.0190723501145839691162109375 0.233084258437156688348323996252 0.384457942843437205926448996252 +-0.0190656006336212165142018903907 -0.0261246502399444593955912807814 0.0381314486265182522872763115629 +-0.0190656006336212165142018903907 0.0261246502399444593955912807814 0.0381314486265182522872763115629 +-0.0190357998013496419742462961722 -0.0413554012775421142578125 -0.020672850310802459716796875 +-0.0190357998013496419742462961722 0.0413554012775421142578125 -0.020672850310802459716796875 +-0.0190311007201671607280690778907 -0.0585711520165205015708842495314 0.546541047096252508019631477509 +-0.0190311007201671607280690778907 0.0585711520165205015708842495314 0.546541047096252508019631477509 +-0.0190260000526905059814453125 -0.368853509426116943359375 0.3370240032672882080078125 +-0.0190260000526905059814453125 0.368853509426116943359375 0.3370240032672882080078125 +-0.0190091993659734712074360629686 -0.242304298281669605596988503748 0.6564508974552154541015625 +-0.0190091993659734712074360629686 0.242304298281669605596988503748 0.6564508974552154541015625 +-0.0190005004405975341796875 -0.090860545635223388671875 -0.11782769858837127685546875 +-0.0190005004405975341796875 0.090860545635223388671875 -0.11782769858837127685546875 +-0.0189970493316650411441681711722 -0.0339453488588333171516175923443 0.03141374886035919189453125 +-0.0189970493316650411441681711722 0.0339453488588333171516175923443 0.03141374886035919189453125 +-0.0189822010695934288715402971093 -0.2491064965724945068359375 -0.166089302301406865902677623126 +-0.0189822010695934288715402971093 0.2491064965724945068359375 -0.166089302301406865902677623126 +-0.01895450055599212646484375 -0.0262053012847900390625 -0.0381314486265182522872763115629 +-0.01895450055599212646484375 0.0262053012847900390625 -0.0381314486265182522872763115629 +-0.0189458996057510382915456403907 -0.134476196765899641549779630623 0.267501908540725696905582253748 +-0.0189458996057510382915456403907 0.134476196765899641549779630623 0.267501908540725696905582253748 +-0.01888000033795833587646484375 -0.4907414913177490234375 -0.093895502388477325439453125 +-0.01888000033795833587646484375 0.4907414913177490234375 -0.093895502388477325439453125 +-0.0188524492084980004047434221093 -0.0382764011621475191970986884371 0.143803650140762323550447376874 +-0.0188524492084980004047434221093 0.0382764011621475191970986884371 0.143803650140762323550447376874 +-0.0188361003994941718364675153907 -0.013685099780559539794921875 0.0442483991384506267219300923443 +-0.0188361003994941718364675153907 0.013685099780559539794921875 0.0442483991384506267219300923443 +-0.018824599683284759521484375 -0.0400749504566192682464276231258 0.0232299998402595540836212961722 +-0.018824599683284759521484375 0.0400749504566192682464276231258 0.0232299998402595540836212961722 +-0.0188171999529004110862651089064 -0.403379103541374239849659488755 -0.198572395741939550228849498126 +-0.0188171999529004110862651089064 0.403379103541374239849659488755 -0.198572395741939550228849498126 +-0.0188075006008148193359375 -0.2164669930934906005859375 -0.123645998537540435791015625 +-0.0188075006008148193359375 0.2164669930934906005859375 -0.123645998537540435791015625 +-0.0187987998127937330772319057814 -0.0448200494050979628135600307814 -0.0117374502122402201570450230861 +-0.0187987998127937330772319057814 0.0448200494050979628135600307814 -0.0117374502122402201570450230861 +-0.01875874958932399749755859375 -0.1570767462253570556640625 0.193584501743316650390625 +-0.01875874958932399749755859375 0.1570767462253570556640625 0.193584501743316650390625 +-0.0187352001667022705078125 -0.0790166020393371637542401231258 -0.0583554983139038113693075615629 +-0.0187352001667022705078125 0.0790166020393371637542401231258 -0.0583554983139038113693075615629 +-0.018707149662077426910400390625 -0.29522788524627685546875 -0.463670355081558238641292746252 +-0.018707149662077426910400390625 0.29522788524627685546875 -0.463670355081558238641292746252 +-0.0186960004270076730892302663278 -0.0575415015220642062088174384371 -0.137256753444671614206029630623 +-0.0186960004270076730892302663278 0.0575415015220642062088174384371 -0.137256753444671614206029630623 +-0.0186660500243306173850932339064 -0.197468693554401414358423494377 -0.6189976036548614501953125 +-0.0186660500243306173850932339064 0.197468693554401414358423494377 -0.6189976036548614501953125 +-0.0186648994684219353412668596093 -0.0966642975807189969161825615629 -0.017539300024509429931640625 +-0.0186648994684219353412668596093 0.0966642975807189969161825615629 -0.017539300024509429931640625 +-0.0186586499214172370220143903907 -0.0442378997802734402755575615629 0.0139593005180358893657643903907 +-0.0186586499214172370220143903907 0.0442378997802734402755575615629 0.0139593005180358893657643903907 +-0.0186272995546460165550151089064 -0.526239001750946067126335492503 0.729880195856094426964943977509 +-0.0186272995546460165550151089064 0.526239001750946067126335492503 0.729880195856094426964943977509 +-0.0185525998473167440250275461722 -0.0704464972019195612151776231258 0.0685060977935791071136151231258 +-0.0185525998473167440250275461722 0.0704464972019195612151776231258 0.0685060977935791071136151231258 +-0.0185256490483880070785360771879 -0.538684314489364712841279470013 0.109436248242855083123714621252 +-0.0185256490483880070785360771879 0.538684314489364712841279470013 0.109436248242855083123714621252 +-0.0184952005743980428531525461722 -0.62675762176513671875 0.496823215484619162829460492503 +-0.0184952005743980428531525461722 0.62675762176513671875 0.496823215484619162829460492503 +-0.0184768006205558790733256557814 -0.03556390106678009033203125 -0.02989675104618072509765625 +-0.0184768006205558790733256557814 0.03556390106678009033203125 -0.02989675104618072509765625 +-0.0184765003621578209613840471093 -0.240864741802215565069644753748 0.25326420366764068603515625 +-0.0184765003621578209613840471093 0.240864741802215565069644753748 0.25326420366764068603515625 +-0.0183635998517274849628488908593 -0.256599891185760486944644753748 0.154335308074951160772769753748 +-0.0183635998517274849628488908593 0.256599891185760486944644753748 0.154335308074951160772769753748 +-0.01834974996745586395263671875 -0.2416607439517974853515625 -0.0613467507064342498779296875 +-0.01834974996745586395263671875 0.2416607439517974853515625 -0.0613467507064342498779296875 +-0.0183362007141113295127787807814 -0.154514002799987809622095369377 0.125654995441436767578125 +-0.0183362007141113295127787807814 0.154514002799987809622095369377 0.125654995441436767578125 +-0.0183144494891166707828400461722 -0.0432464510202407864669638115629 -0.01715590059757232666015625 +-0.0183144494891166707828400461722 0.0432464510202407864669638115629 -0.01715590059757232666015625 +-0.0183017000555992133403737653907 -0.09606540203094482421875 0.020892299711704254150390625 +-0.0183017000555992133403737653907 0.09606540203094482421875 0.020892299711704254150390625 +-0.0181744992733001708984375 -0.49880349636077880859375 -0.029408000409603118896484375 +-0.0181744992733001708984375 0.49880349636077880859375 -0.029408000409603118896484375 +-0.0181610494852066060855744211722 -0.00333020016551017778577703509768 -0.0464659512042999295333700615629 +-0.0181610494852066060855744211722 0.00333020016551017778577703509768 -0.0464659512042999295333700615629 +-0.0181602499447762952278218051561 -0.05589344911277294158935546875 -0.847965943813323907995993522491 +-0.0181602499447762952278218051561 0.05589344911277294158935546875 -0.847965943813323907995993522491 +-0.0181494995951652533794362653907 -0.0296000003814697286441681711722 0.0937786996364593505859375 +-0.0181494995951652533794362653907 0.0296000003814697286441681711722 0.0937786996364593505859375 +-0.01813100092113018035888671875 -0.24760974943637847900390625 -0.0293374992907047271728515625 +-0.01813100092113018035888671875 0.24760974943637847900390625 -0.0293374992907047271728515625 +-0.0181262001395225517963449846093 -0.02948220074176788330078125 0.196982800960540771484375 +-0.0181262001395225517963449846093 0.02948220074176788330078125 0.196982800960540771484375 +-0.0181207001209259047080912807814 -0.01316539943218231201171875 -0.0974592983722686878600427462516 +-0.0181207001209259047080912807814 0.01316539943218231201171875 -0.0974592983722686878600427462516 +-0.0181176006793975843955912807814 -0.0131632000207901004446009451954 -0.198742198944091813528345369377 +-0.0181176006793975843955912807814 0.0131632000207901004446009451954 -0.198742198944091813528345369377 +-0.0180901497602462789371369211722 -0.02938894927501678466796875 0.03618060052394866943359375 +-0.0180901497602462789371369211722 0.02938894927501678466796875 0.03618060052394866943359375 +-0.0180899992585182196880300153907 -0.0131431505084037784231165701954 -0.0447214514017105144172425923443 +-0.0180899992585182196880300153907 0.0131431505084037784231165701954 -0.0447214514017105144172425923443 +-0.0180564999580383328536825615629 -0.409933158755302451403679242503 -0.366235652565956137927116742503 +-0.0180564999580383328536825615629 0.409933158755302451403679242503 -0.366235652565956137927116742503 +-0.01805399917066097259521484375 -0.16337299346923828125 -0.18837024271488189697265625 +-0.01805399917066097259521484375 0.16337299346923828125 -0.18837024271488189697265625 +-0.0180241003632545492008087961722 -0.0554735004901886000205912807814 -0.0812268972396850696959802462516 +-0.0180241003632545492008087961722 0.0554735004901886000205912807814 -0.0812268972396850696959802462516 +-0.0180212497711181654502787807814 -0.0230439007282257080078125 -0.0405488997697830214073100307814 +-0.0180212497711181654502787807814 0.0230439007282257080078125 -0.0405488997697830214073100307814 +-0.017973400652408599853515625 -0.0420087009668350247482138115629 0.0203033506870269782329518903907 +-0.017973400652408599853515625 0.0420087009668350247482138115629 0.0203033506870269782329518903907 +-0.01793199963867664337158203125 -0.69703197479248046875 -0.716816008090972900390625 +-0.01793199963867664337158203125 0.69703197479248046875 -0.716816008090972900390625 +-0.0178666502237319925472380788278 -0.118896746635437006167634876874 -0.08969025313854217529296875 +-0.0178666502237319925472380788278 0.118896746635437006167634876874 -0.08969025313854217529296875 +-0.0178429495543241493915598283593 -0.426519459486007723736378238755 -0.1423480510711669921875 +-0.0178429495543241493915598283593 0.426519459486007723736378238755 -0.1423480510711669921875 +-0.01782830059528350830078125 -0.0940742015838623157897302462516 -0.02884779870510101318359375 +-0.01782830059528350830078125 0.0940742015838623157897302462516 -0.02884779870510101318359375 +-0.017819799482822418212890625 -0.0170714497566223158409037807814 0.0434858500957489013671875 +-0.017819799482822418212890625 0.0170714497566223158409037807814 0.0434858500957489013671875 +-0.0178176004439592368389089216407 -0.535043406486511163855368522491 0.270945006608962979388621761245 +-0.0178176004439592368389089216407 0.535043406486511163855368522491 0.270945006608962979388621761245 +-0.0178149998188018819644806711722 -0.0892925024032592828948651231258 -0.04134570062160491943359375 +-0.0178149998188018819644806711722 0.0892925024032592828948651231258 -0.04134570062160491943359375 +-0.0178136497735977179790456403907 -0.03337495028972625732421875 -0.0326923489570617661903462192186 +-0.0178136497735977179790456403907 0.03337495028972625732421875 -0.0326923489570617661903462192186 +-0.0177408501505851752544362653907 -0.0367394506931304973273988423443 0.0289045989513397223735768903907 +-0.0177408501505851752544362653907 0.0367394506931304973273988423443 0.0289045989513397223735768903907 +-0.017712600529193878173828125 -0.140461003780364995785490123126 -0.141269195079803483450220369377 +-0.017712600529193878173828125 0.140461003780364995785490123126 -0.141269195079803483450220369377 +-0.01768215000629425048828125 -0.0744652479887008694747763115629 0.129004946351051336117521373126 +-0.01768215000629425048828125 0.0744652479887008694747763115629 0.129004946351051336117521373126 +-0.0176513994112610823894460310157 -0.224996848404407506771818248126 0.60956154763698577880859375 +-0.0176513994112610823894460310157 0.224996848404407506771818248126 0.60956154763698577880859375 +-0.0175924495793879018257221957811 -0.497003501653671242443977007497 0.689331296086311273718649772491 +-0.0175924495793879018257221957811 0.497003501653671242443977007497 0.689331296086311273718649772491 +-0.0175668999552726738666574846093 -0.0540643990039825494964276231258 0.0822705984115600641448651231258 +-0.0175668999552726738666574846093 0.0540643990039825494964276231258 0.0822705984115600641448651231258 +-0.0175583004951477064659037807814 -0.0324860006570816053916850307814 -0.0929319977760315052428552462516 +-0.0175583004951477064659037807814 0.0324860006570816053916850307814 -0.0929319977760315052428552462516 +-0.01754399947822093963623046875 -0.49845850467681884765625 0.0350884981453418731689453125 +-0.01754399947822093963623046875 0.49845850467681884765625 0.0350884981453418731689453125 +-0.0175275996327400214458425153907 -0.0971414029598236111739950615629 -0.17394340038299560546875 +-0.0175275996327400214458425153907 0.0971414029598236111739950615629 -0.17394340038299560546875 +-0.0175219004973769208743927805472 -0.519437053799629233630241742503 0.179939098656177548507528740629 +-0.0175219004973769208743927805472 0.519437053799629233630241742503 0.179939098656177548507528740629 +-0.0174902491271495819091796875 -0.24692200124263763427734375 0.0349802486598491668701171875 +-0.0174902491271495819091796875 0.24692200124263763427734375 0.0349802486598491668701171875 +-0.0174173995852470418765900461722 -0.0749781012535095242599325615629 -0.0638351023197174100021200615629 +-0.0174173995852470418765900461722 0.0749781012535095242599325615629 -0.0638351023197174100021200615629 +-0.0173633992671966552734375 -0.0467565000057220472862162807814 0.003513149917125701904296875 +-0.0173633992671966552734375 0.0467565000057220472862162807814 0.003513149917125701904296875 +-0.0173454493284225484683869211722 -0.0468024998903274550010600307814 -0.00294330008327961002712047644536 +-0.0173454493284225484683869211722 0.0468024998903274550010600307814 -0.00294330008327961002712047644536 +-0.0173392505384981632232666015625 -0.587585270404815673828125 0.4657717645168304443359375 +-0.0173392505384981632232666015625 0.587585270404815673828125 0.4657717645168304443359375 +-0.0173039995133876800537109375 -0.053254999220371246337890625 0.24364824593067169189453125 +-0.0173039995133876800537109375 0.053254999220371246337890625 0.24364824593067169189453125 +-0.017301000654697418212890625 -0.0532465018332004547119140625 0.4968554973602294921875 +-0.017301000654697418212890625 0.0532465018332004547119140625 0.4968554973602294921875 +-0.017285250127315521240234375 0 -0.249401748180389404296875 +-0.0172302000224590287635884067186 -0.182278794050216658151342130623 -0.57138240337371826171875 +-0.0172302000224590287635884067186 0.182278794050216658151342130623 -0.57138240337371826171875 +-0.0172166995704174027870259067186 -0.148747202754020674264623380623 -0.00882419999688863719577991417964 +-0.0172166995704174027870259067186 0.148747202754020674264623380623 -0.00882419999688863719577991417964 +-0.01715975068509578704833984375 -0.106782503426074981689453125 -0.22539524734020233154296875 +-0.01715975068509578704833984375 0.106782503426074981689453125 -0.22539524734020233154296875 +-0.0171516492962837212299387346093 -0.0207133501768112203433869211722 0.0421518504619598430305238423443 +-0.0171516492962837212299387346093 0.0207133501768112203433869211722 0.0421518504619598430305238423443 +-0.0171283498406410231162944057814 -0.04613409936428070068359375 -0.008846700191497802734375 +-0.0171283498406410231162944057814 0.04613409936428070068359375 -0.008846700191497802734375 +-0.0171234000474214560771901716407 -0.3319681584835052490234375 0.303321602940559376104801003748 +-0.0171234000474214560771901716407 0.3319681584835052490234375 0.303321602940559376104801003748 +-0.0171143993735313436344025461722 -0.0923877000808715903579226846887 0.0342287003993988064864950615629 +-0.0171143993735313436344025461722 0.0923877000808715903579226846887 0.0342287003993988064864950615629 +-0.0171132504940032931228799384371 -0.128108051419258101022435880623 -0.325261992216110185083266514994 +-0.0171132504940032931228799384371 0.128108051419258101022435880623 -0.325261992216110185083266514994 +-0.0171093001961708061908762346093 -0.00991675034165382524031784328145 -0.04592309892177581787109375 +-0.0171093001961708061908762346093 0.00991675034165382524031784328145 -0.04592309892177581787109375 +-0.0170919999480247490619699846093 -0.0526055991649627685546875 -0.798085594177246115954460492503 +-0.0170919999480247490619699846093 0.0526055991649627685546875 -0.798085594177246115954460492503 +-0.0170574992895126363590119211722 -0.0310117512941360494449494211722 -0.0353172987699508708625550923443 +-0.0170574992895126363590119211722 0.0310117512941360494449494211722 -0.0353172987699508708625550923443 +-0.0170543000102043144916574846093 -0.0458045512437820490081463731258 0.0105402000248432173301615932814 +-0.0170543000102043144916574846093 0.0458045512437820490081463731258 0.0105402000248432173301615932814 +-0.0170512005686759941791574846093 -0.0524796009063720758636151231258 -0.396175599098205599712940738755 +-0.0170512005686759941791574846093 0.0524796009063720758636151231258 -0.396175599098205599712940738755 +-0.0170373000204563120052458913278 -0.148656901717185957467748380623 0.0105296999216079704975168596093 +-0.0170373000204563120052458913278 0.148656901717185957467748380623 0.0105296999216079704975168596093 +-0.0170353996567428091213347585153 -0.662180376052856400903579014994 -0.680975207686424277575554242503 +-0.0170353996567428091213347585153 0.662180376052856400903579014994 -0.680975207686424277575554242503 +-0.01700649969279766082763671875 -0.2683889865875244140625 -0.421518504619598388671875 +-0.01700649969279766082763671875 0.2683889865875244140625 -0.421518504619598388671875 +-0.0170032501220703131938893903907 -0.0324721008539199870734925923443 0.0340066492557525648643412807814 +-0.0170032501220703131938893903907 0.0324721008539199870734925923443 0.0340066492557525648643412807814 +-0.0169920003041625043704865305472 -0.441667342185974143298210492503 -0.0845059521496295956710653740629 +-0.0169920003041625043704865305472 0.441667342185974143298210492503 -0.0845059521496295956710653740629 +-0.016973249614238739013671875 -0.2402967512607574462890625 0.066853247582912445068359375 +-0.016973249614238739013671875 0.2402967512607574462890625 0.066853247582912445068359375 +-0.0169560998678207411338725307814 0 -0.0470371514558792155891175923443 +-0.0169532001018524169921875 -0.207186007499694846423210492503 0.341740393638610862048210492503 +-0.0169532001018524169921875 0.207186007499694846423210492503 0.341740393638610862048210492503 +-0.0169368997216224684287944057814 -0.0197066500782966634586212961722 -0.0427175492048263577560263115629 +-0.0169368997216224684287944057814 0.0197066500782966634586212961722 -0.0427175492048263577560263115629 +-0.0169358000159263617778737653907 0 0.0470444500446319593955912807814 +-0.0169092003256082513973357350778 -0.0981105983257293673416299384371 0.335541850328445412365852007497 +-0.0169092003256082513973357350778 0.0981105983257293673416299384371 0.335541850328445412365852007497 +-0.0168883994221687323833425153907 -0.0519778013229370144943075615629 -0.192387795448303228207365123126 +-0.0168883994221687323833425153907 0.0519778013229370144943075615629 -0.192387795448303228207365123126 +-0.0168799504637718207622487653907 -0.00405699983239173923854625769536 0.0468892991542816175987162807814 +-0.0168799504637718207622487653907 0.00405699983239173923854625769536 0.0468892991542816175987162807814 +-0.0168426999822258935401997348436 -0.276537808775901783331363503748 -0.213876599073410028628572376874 +-0.0168426999822258935401997348436 0.276537808775901783331363503748 -0.213876599073410028628572376874 +-0.01684149913489818572998046875 -0.489713013172149658203125 0.09948749840259552001953125 +-0.01684149913489818572998046875 0.489713013172149658203125 0.09948749840259552001953125 +-0.0168286498636007302021067033593 -0.0197620511054992682720143903907 -0.14773710072040557861328125 +-0.0168286498636007302021067033593 0.0197620511054992682720143903907 -0.14773710072040557861328125 +-0.0168203994631767293765900461722 -0.00406409986317157745361328125 0.0984914004802703857421875 +-0.0168203994631767293765900461722 0.00406409986317157745361328125 0.0984914004802703857421875 +-0.0167961001396179192279856096093 0 0.149056649208068853207365123126 +-0.0167808003723621361469309221093 -0.0121920000761747363698939139454 0.299282097816467251849559261245 +-0.0167808003723621361469309221093 0.0121920000761747363698939139454 0.299282097816467251849559261245 +-0.0167657002806663527061381557814 -0.0409602493047714275031800923443 -0.023262999951839447021484375 +-0.0167657002806663527061381557814 0.0409602493047714275031800923443 -0.023262999951839447021484375 +-0.0167407505214214324951171875 -0.0121627494692802418790877894139 0.148565849661827092953458873126 +-0.0167407505214214324951171875 0.0121627494692802418790877894139 0.148565849661827092953458873126 +-0.0167263999581336968158762346093 -0.358559203147888194695980246252 -0.176508796215057384149105246252 +-0.0167263999581336968158762346093 0.358559203147888194695980246252 -0.176508796215057384149105246252 +-0.0167059496045112616802175153907 -0.0448399990797042902190838731258 -0.0145011499524116526521622105861 +-0.0167059496045112616802175153907 0.0448399990797042902190838731258 -0.0145011499524116526521622105861 +-0.016673900187015533447265625 -0.0121141999959945689119278355861 0.0978531002998352106292401231258 +-0.016673900187015533447265625 0.0121141999959945689119278355861 0.0978531002998352106292401231258 +-0.0166548002511262872860076100778 -0.180448794364929193667634876874 -0.239083492755889887027009876874 +-0.0166548002511262872860076100778 0.180448794364929193667634876874 -0.239083492755889887027009876874 +-0.0166528999805450432514231096093 -0.0869720995426178089537927462516 0.0464599996805191081672425923443 +-0.0166528999805450432514231096093 0.0869720995426178089537927462516 0.0464599996805191081672425923443 +-0.0166500002145767225791850307814 -0.00798050016164779732474876539072 0.0464659988880157526214276231258 +-0.0166500002145767225791850307814 0.00798050016164779732474876539072 0.0464659988880157526214276231258 +-0.0165777996182441718364675153907 -0.0773450016975402859786825615629 0.183692395687103271484375 +-0.0165777996182441718364675153907 0.0773450016975402859786825615629 0.183692395687103271484375 +-0.0165662504732608795166015625 -0.2290605008602142333984375 0.098777003586292266845703125 +-0.0165662504732608795166015625 0.2290605008602142333984375 0.098777003586292266845703125 +-0.0165575996041297905658762346093 -0.467768001556396528783920985006 0.648782396316528342516960492503 +-0.0165575996041297905658762346093 0.467768001556396528783920985006 0.648782396316528342516960492503 +-0.0165535502135753624652902971093 -0.141929545998573297671541126874 -0.0456286489963531466385049384371 +-0.0165535502135753624652902971093 0.141929545998573297671541126874 -0.0456286489963531466385049384371 +-0.0164958000183105454872212192186 -0.134519702196121221371427623126 -0.0642830997705459566970986884371 +-0.0164958000183105454872212192186 0.134519702196121221371427623126 -0.0642830997705459566970986884371 +-0.0164546504616737386539337961722 -0.0439671009778976468185263115629 0.0172086998820304877544362653907 +-0.0164546504616737386539337961722 0.0439671009778976468185263115629 0.0172086998820304877544362653907 +-0.01641499996185302734375 -0.3726665079593658447265625 -0.3329415023326873779296875 +-0.01641499996185302734375 0.3726665079593658447265625 -0.3329415023326873779296875 +-0.0163998499512672431255300153907 -0.0392854988574981717208700615629 0.0262239992618560797954518903907 +-0.0163998499512672431255300153907 0.0392854988574981717208700615629 0.0262239992618560797954518903907 +-0.01639845035970211029052734375 -0.0828673481941223089020098768742 -0.123952049016952503546207253748 +-0.01639845035970211029052734375 0.0828673481941223089020098768742 -0.123952049016952503546207253748 +-0.01635704934597015380859375 -0.448923146724700961041065738755 -0.0264672003686428070068359375 +-0.01635704934597015380859375 0.448923146724700961041065738755 -0.0264672003686428070068359375 +-0.0163472503423690816715119211722 -0.0242601007223129279399831403907 0.0405488997697830214073100307814 +-0.0163472503423690816715119211722 0.0242601007223129279399831403907 0.0405488997697830214073100307814 +-0.0163328004069626352146027414847 -0.490456455945968650134147992503 0.248366256058216106072933371252 +-0.0163328004069626352146027414847 0.490456455945968650134147992503 0.248366256058216106072933371252 +-0.0163159504532814046695587961722 -0.0118541002273559580720840855861 0.0457522511482238783409037807814 +-0.0163159504532814046695587961722 0.0118541002273559580720840855861 0.0457522511482238783409037807814 +-0.0162935994565486901020090471093 -0.207689398527145380191072376874 0.562672197818756103515625 +-0.0162935994565486901020090471093 0.207689398527145380191072376874 0.562672197818756103515625 +-0.016284249722957611083984375 -0.0285567998886108419254181711722 -0.0376740485429763807823100307814 +-0.016284249722957611083984375 0.0285567998886108419254181711722 -0.0376740485429763807823100307814 +-0.0162527997046709067607839216407 -0.146779498457908635922208873126 -0.0262984491884708411479909528907 +-0.0162527997046709067607839216407 0.146779498457908635922208873126 -0.0262984491884708411479909528907 +-0.0162456005811691291118581403907 -0.0499994993209838881065287807814 -0.0850654006004333551604901231258 +-0.0162456005811691291118581403907 0.0499994993209838881065287807814 -0.0850654006004333551604901231258 +-0.01623634994029998779296875 -0.0393215000629425076583700615629 -0.0262716501951217665244975307814 +-0.01623634994029998779296875 0.0393215000629425076583700615629 -0.0262716501951217665244975307814 +-0.0161833005025982835933806569528 -0.54841291904449462890625 0.434720313549041725842414507497 +-0.0161833005025982835933806569528 0.54841291904449462890625 0.434720313549041725842414507497 +-0.0161387996748089783405344377343 -0.627328777313232444079460492503 -0.645134407281875654760483485006 +-0.0161387996748089783405344377343 0.627328777313232444079460492503 -0.645134407281875654760483485006 +-0.0161054998636245734477956403907 -0.0429923504590988200813050923443 -0.0198058500885963453819194057814 +-0.0161054998636245734477956403907 0.0429923504590988200813050923443 -0.0198058500885963453819194057814 +-0.0160409003496170057823100307814 -0.00663954988121986423854625769536 -0.0468892991542816175987162807814 +-0.0160409003496170057823100307814 0.00663954988121986423854625769536 -0.0468892991542816175987162807814 +-0.016025699675083160400390625 -0.0361586004495620741416850307814 0.0918461978435516357421875 +-0.016025699675083160400390625 0.0361586004495620741416850307814 0.0918461978435516357421875 +-0.0160237499512732028961181640625 -0.04931774921715259552001953125 -0.748205244541168212890625 +-0.0160237499512732028961181640625 0.04931774921715259552001953125 -0.748205244541168212890625 +-0.0159969002008438117290456403907 -0.00659879967570304887952703509768 -0.0984914004802703857421875 +-0.0159969002008438117290456403907 0.00659879967570304887952703509768 -0.0984914004802703857421875 +-0.0159933004528284052059294850778 -0.108793947100639346037276311563 0.102019947767257687654129938437 +-0.0159933004528284052059294850778 0.108793947100639346037276311563 0.102019947767257687654129938437 +-0.015979699790477752685546875 -0.0757929980754852294921875 0.0632461011409759521484375 +-0.015979699790477752685546875 0.0757929980754852294921875 0.0632461011409759521484375 +-0.01592900045216083526611328125 -0.4722155034542083740234375 0.16358099877834320068359375 +-0.01592900045216083526611328125 0.4722155034542083740234375 0.16358099877834320068359375 +-0.015921749174594879150390625 -0.049003250896930694580078125 -0.2446327507495880126953125 +-0.015921749174594879150390625 0.049003250896930694580078125 -0.2446327507495880126953125 +-0.0158739998936653151084819057814 -0.0703978002071380670745526231258 -0.0692255020141601534744424384371 +-0.0158739998936653151084819057814 0.0703978002071380670745526231258 -0.0692255020141601534744424384371 +-0.0158603996038436910465119211722 -0.379128408432006847039730246252 -0.1265316009521484375 +-0.0158603996038436910465119211722 0.379128408432006847039730246252 -0.1265316009521484375 +-0.0158370003104209879085662038278 -0.206455492973327631167634876874 0.2170836031436920166015625 +-0.0158370003104209879085662038278 0.206455492973327631167634876874 0.2170836031436920166015625 +-0.01581850089132785797119140625 -0.20758874714374542236328125 -0.13840775191783905029296875 +-0.01581850089132785797119140625 0.20758874714374542236328125 -0.13840775191783905029296875 +-0.0158114492893219014957306711722 -0.0353550493717193631271200615629 0.03162305057048797607421875 +-0.0158114492893219014957306711722 0.0353550493717193631271200615629 0.03162305057048797607421875 +-0.0157943500205874470809774834379 -0.167088894546031957455411998126 -0.5237672030925750732421875 +-0.0157943500205874470809774834379 0.167088894546031957455411998126 -0.5237672030925750732421875 +-0.0157895995303988477542755930472 -0.448612654209136985095085492503 0.0315796483308076886276083428129 +-0.0157895995303988477542755930472 0.448612654209136985095085492503 0.0315796483308076886276083428129 +-0.015788249671459197998046875 -0.1120634973049163818359375 0.22291825711727142333984375 +-0.015788249671459197998046875 0.1120634973049163818359375 0.22291825711727142333984375 +-0.0157284006476402296592631557814 -0.0162763506174087545230744211722 -0.0445836007595062297492738423443 +-0.0157284006476402296592631557814 0.0162763506174087545230744211722 -0.0445836007595062297492738423443 +-0.0157187998294830329204518903907 -0.0483781501650810200065855326557 -0.14111159741878509521484375 +-0.0157187998294830329204518903907 0.0483781501650810200065855326557 -0.14111159741878509521484375 +-0.0157005004584789276123046875 -0.0483204022049903841873330634371 0.141133350133895857370092130623 +-0.0157005004584789276123046875 0.0483204022049903841873330634371 0.141133350133895857370092130623 +-0.0156918004155159017398712961722 -0.199383401870727561266960492503 0 +-0.0156918004155159017398712961722 0.199383401870727561266960492503 0 +-0.01566014997661113739013671875 -0.14585535228252410888671875 0.0313204497098922701736611884371 +-0.01566014997661113739013671875 0.14585535228252410888671875 0.0313204497098922701736611884371 +-0.015643499791622161865234375 -0.0987688004970550537109375 0 +-0.015643499791622161865234375 -0.0374691992998123155067524692186 -0.0291777491569519056846537807814 +-0.015643499791622161865234375 0.0374691992998123155067524692186 -0.0291777491569519056846537807814 +-0.015643499791622161865234375 0.0987688004970550537109375 0 +-0.0156163495033979412424107735546 -0.112414652109146112612947376874 -0.0980770468711853055099325615629 +-0.0156163495033979412424107735546 0.112414652109146112612947376874 -0.0980770468711853055099325615629 +-0.0156065493822097785259206403907 -0.0413571506738662775237713731258 0.0233671501278877279117462961722 +-0.0156065493822097785259206403907 0.0413571506738662775237713731258 0.0233671501278877279117462961722 +-0.0155709005892276774324356480861 -0.0479218516498804078529438754686 0.447169947624206531866519753748 +-0.0155709005892276774324356480861 0.0479218516498804078529438754686 0.447169947624206531866519753748 +-0.0155333995819091803813893903907 -0.026265799999237060546875 -0.095230400562286376953125 +-0.0155333995819091803813893903907 0.026265799999237060546875 -0.095230400562286376953125 +-0.0155227496288716793060302734375 -0.4385325014591217041015625 0.60823349654674530029296875 +-0.0155227496288716793060302734375 0.4385325014591217041015625 0.60823349654674530029296875 +-0.01545085012912750244140625 -0.0475528001785278375823651231258 0 +-0.01545085012912750244140625 0.0475528001785278375823651231258 0 +-0.015431649982929229736328125 -0.0259627014398574849918244211722 -0.0398472487926483168174662807814 +-0.015431649982929229736328125 0.0259627014398574849918244211722 -0.0398472487926483168174662807814 +-0.0154305994510650634765625 -0.02762059867382049560546875 0.0387169003486633328536825615629 +-0.0154305994510650634765625 0.02762059867382049560546875 0.0387169003486633328536825615629 +-0.0153955996036529551423965855861 -0.0607472002506256117393412807814 0.0779278993606567493834802462516 +-0.0153955996036529551423965855861 0.0607472002506256117393412807814 0.0779278993606567493834802462516 +-0.0153741002082824693153462192186 -0.140407195687294011898771373126 0.050492249429225921630859375 +-0.0153741002082824693153462192186 0.140407195687294011898771373126 0.050492249429225921630859375 +-0.0153431996703147898591934605861 -0.0472216486930847195724325615629 -0.00589094981551170366468328509768 +-0.0153431996703147898591934605861 0.0472216486930847195724325615629 -0.00589094981551170366468328509768 +-0.0153297007083892829204518903907 -0.0152603507041931159282643903907 0.0450790494680404704719300923443 +-0.0153297007083892829204518903907 0.0152603507041931159282643903907 0.0450790494680404704719300923443 +-0.015305849723517894744873046875 -0.24155008792877197265625 -0.379366654157638538702457253748 +-0.015305849723517894744873046875 0.24155008792877197265625 -0.379366654157638538702457253748 +-0.015302999876439571380615234375 -0.2138332426548004150390625 0.1286127567291259765625 +-0.015302999876439571380615234375 0.2138332426548004150390625 0.1286127567291259765625 +-0.0152976006269454969932475307814 -0.0470808506011962946136151231258 0.00702679976820945809135032789072 +-0.0152976006269454969932475307814 0.0470808506011962946136151231258 0.00702679976820945809135032789072 +-0.0152753993868827830232559605861 -0.163245594501495366879240123126 0.114532005786895763055355246252 +-0.0152753993868827830232559605861 0.163245594501495366879240123126 0.114532005786895763055355246252 +-0.01526699960231781005859375 -0.184860599040985118524105246252 -0.0747896015644073514083700615629 +-0.01526699960231781005859375 0.184860599040985118524105246252 -0.0747896015644073514083700615629 +-0.0152421996928751458250106409764 -0.592477178573608376233039507497 -0.609293606877326920923110264994 +-0.0152421996928751458250106409764 0.592477178573608376233039507497 -0.609293606877326920923110264994 +-0.0152208000421524061729350307814 -0.2950828075408935546875 0.269619202613830599712940738755 +-0.0152208000421524061729350307814 0.2950828075408935546875 0.269619202613830599712940738755 +-0.0151573492214083678508718122657 -0.440741711854934714587272992503 0.0895387485623359707931356865629 +-0.0151573492214083678508718122657 0.440741711854934714587272992503 0.0895387485623359707931356865629 +-0.0151075005531311045564590855861 -0.0981482982635498157897302462516 -0.0117757998406887061382253278907 +-0.0151075005531311045564590855861 0.0981482982635498157897302462516 -0.0117757998406887061382253278907 +-0.0151040002703666693950612653907 -0.392593193054199263158920985006 -0.0751164019107818659026776231258 +-0.0151040002703666693950612653907 0.392593193054199263158920985006 -0.0751164019107818659026776231258 +-0.01504600048065185546875 -0.173173594474792497122095369377 -0.0989167988300323486328125 +-0.01504600048065185546875 0.173173594474792497122095369377 -0.0989167988300323486328125 +-0.0150273504666984091676651402736 -0.509240567684173583984375 0.403668862581253062860042746252 +-0.0150273504666984091676651402736 0.509240567684173583984375 0.403668862581253062860042746252 +-0.0150161504745483405376393903907 -0.04621525108814239501953125 -0.0117757499217987070955215855861 +-0.0150161504745483405376393903907 0.04621525108814239501953125 -0.0117757499217987070955215855861 +-0.0150069996714591990388809605861 -0.125661396980285638980134876874 0.154867601394653331414730246252 +-0.0150069996714591990388809605861 0.125661396980285638980134876874 0.154867601394653331414730246252 +-0.0149897500872612013389506557814 -0.0354482501745224040656800923443 -0.0319175511598587050010600307814 +-0.0149897500872612013389506557814 0.0354482501745224040656800923443 -0.0319175511598587050010600307814 +-0.0149554999545216549955428675389 -0.0460298992693424224853515625 -0.698324894905090309826789507497 +-0.0149554999545216549955428675389 0.0460298992693424224853515625 -0.698324894905090309826789507497 +-0.0149357995018363012840190151564 -0.190381948649883281365902121252 0.51578284800052642822265625 +-0.0149357995018363012840190151564 0.190381948649883281365902121252 0.51578284800052642822265625 +-0.0149198004975914944730819300389 -0.0459196507930755559723223768742 -0.346653649210929837298778011245 +-0.0149198004975914944730819300389 0.0459196507930755559723223768742 -0.346653649210929837298778011245 +-0.0148902505636215216899831403907 -0.00332829989492893245014992764652 -0.0476151496171951307823100307814 +-0.0148902505636215216899831403907 0.00332829989492893245014992764652 -0.0476151496171951307823100307814 +-0.0148756995797157294536550153907 -0.0978851020336151123046875 0.0140432000160217295564590855861 +-0.0148756995797157294536550153907 0.0978851020336151123046875 0.0140432000160217295564590855861 +-0.014848000369966030120849609375 -0.445869505405426025390625 0.22578750550746917724609375 +-0.014848000369966030120849609375 0.445869505405426025390625 0.22578750550746917724609375 +-0.0148340500891208631334405865232 -0.181287756562232948986945757497 0.299022844433784462658820757497 +-0.0148340500891208631334405865232 0.181287756562232948986945757497 0.299022844433784462658820757497 +-0.014832399785518646240234375 -0.0456490486860275310188050923443 0.0140058994293212890625 +-0.014832399785518646240234375 0.0456490486860275310188050923443 0.0140058994293212890625 +-0.0147734999656677253032643903907 -0.335399857163429293560596988755 -0.299647352099418673443409488755 +-0.0147734999656677253032643903907 0.335399857163429293560596988755 -0.299647352099418673443409488755 +-0.014718450605869293212890625 -0.01320745050907135009765625 -0.04592309892177581787109375 +-0.014718450605869293212890625 0.01320745050907135009765625 -0.04592309892177581787109375 +-0.0147025499492883671842635706639 -0.13242495059967041015625 0.0689017519354820223709268134371 +-0.0147025499492883671842635706639 0.13242495059967041015625 0.0689017519354820223709268134371 +-0.0146797999739646922029434605861 -0.193328595161437993832365123126 -0.0490774005651474012901225307814 +-0.0146797999739646922029434605861 0.193328595161437993832365123126 -0.0490774005651474012901225307814 +-0.0146685004234313950965962192186 -0.109806901216506949681139815311 -0.278795993328094460217414507497 +-0.0146685004234313950965962192186 0.109806901216506949681139815311 -0.278795993328094460217414507497 +-0.0146355999633669842802108362889 -0.313739302754402149542301003748 -0.154445196688175190313785378748 +-0.0146355999633669842802108362889 0.313739302754402149542301003748 -0.154445196688175190313785378748 +-0.0145619004964828505088725307814 -0.0187428995966911308979074846093 0.097142398357391357421875 +-0.0145619004964828505088725307814 0.0187428995966911308979074846093 0.097142398357391357421875 +-0.01453959941864013671875 -0.399042797088623057977230246252 -0.0235264003276824951171875 +-0.01453959941864013671875 0.399042797088623057977230246252 -0.0235264003276824951171875 +-0.0145221993327140815044362653907 -0.03801999986171722412109375 0.0290444999933242818668244211722 +-0.0145221993327140815044362653907 0.03801999986171722412109375 0.0290444999933242818668244211722 +-0.0145168494433164582679829379686 -0.0846372038125991765777911268742 0.122986954450607297029129938437 +-0.0145168494433164582679829379686 0.0846372038125991765777911268742 0.122986954450607297029129938437 +-0.0145062997937202460552175153907 -0.0446462988853454645354901231258 -0.0172125995159149169921875 +-0.0145062997937202460552175153907 0.0446462988853454645354901231258 -0.0172125995159149169921875 +-0.0145048007369041453279434605861 -0.198087799549102799856470369377 -0.02346999943256378173828125 +-0.0145048007369041453279434605861 0.198087799549102799856470369377 -0.02346999943256378173828125 +-0.0144936002790927876554549769139 -0.0840947985649108803452023153113 0.287607300281524647100894753748 +-0.0144936002790927876554549769139 0.0840947985649108803452023153113 0.287607300281524647100894753748 +-0.0144878996536135663114608362889 -0.409297001361846879419204014994 0.567684596776962258068977007497 +-0.0144878996536135663114608362889 0.409297001361846879419204014994 0.567684596776962258068977007497 +-0.0144853994250297556795059605861 -0.0803011000156402671157351846887 0.0578092992305755670745526231258 +-0.0144853994250297556795059605861 0.0803011000156402671157351846887 0.0578092992305755670745526231258 +-0.0144545003771781935264506557814 -0.0921917974948883167662927462516 -0.0359407991170883206466513115629 +-0.0144545003771781935264506557814 0.0921917974948883167662927462516 -0.0359407991170883206466513115629 +-0.0144431993365287791170059605861 -0.130698394775390636102230246252 -0.150696194171905523129240123126 +-0.0144431993365287791170059605861 0.130698394775390636102230246252 -0.150696194171905523129240123126 +-0.0144365999847650521015207658593 -0.237032407522201532534822376874 -0.183322799205780012643529630623 +-0.0144365999847650521015207658593 0.237032407522201532534822376874 -0.183322799205780012643529630623 +-0.0143995001912117018272319057814 -0.0227128997445106527164337961722 -0.0421518504619598430305238423443 +-0.0143995001912117018272319057814 0.0227128997445106527164337961722 -0.0421518504619598430305238423443 +-0.0143892005085945132863978201954 -0.0442862004041671766807475307814 -0.0884967982769012534438601846887 +-0.0143892005085945132863978201954 0.0442862004041671766807475307814 -0.0884967982769012534438601846887 +-0.0143661007285118113435684605861 -0.0961938023567199818053552462516 -0.0232455998659133918071706403907 +-0.0143661007285118113435684605861 0.0961938023567199818053552462516 -0.0232455998659133918071706403907 +-0.01435850001871585845947265625 -0.15189899504184722900390625 -0.476152002811431884765625 +-0.01435850001871585845947265625 0.15189899504184722900390625 -0.476152002811431884765625 +-0.0143455997109413150442103201954 -0.557625579833984419408920985006 -0.573452806472778298108039507497 +-0.0143455997109413150442103201954 0.557625579833984419408920985006 -0.573452806472778298108039507497 +-0.0143450006842613230623184605861 -0.0309617489576339728618581403907 0.0365456998348236070106587192186 +-0.0143450006842613230623184605861 0.0309617489576339728618581403907 0.0365456998348236070106587192186 +-0.0143361004069447513925572579296 -0.424993953108787569927784488755 0.147222898900508880615234375 +-0.0143361004069447513925572579296 0.424993953108787569927784488755 0.147222898900508880615234375 +-0.0143312007188797010948100307814 -0.0656615018844604464431924384371 -0.0740485012531280489822549384371 +-0.0143312007188797010948100307814 0.0656615018844604464431924384371 -0.0740485012531280489822549384371 +-0.0143074005842208865774134451954 -0.0864926993846893421569177462516 -0.04810740053653717041015625 +-0.0143074005842208865774134451954 0.0864926993846893421569177462516 -0.04810740053653717041015625 +-0.0142679005861282362510600307814 -0.0331418991088867215255575615629 -0.0346127510070800767372212192186 +-0.0142679005861282362510600307814 0.0331418991088867215255575615629 -0.0346127510070800767372212192186 +-0.0142636001110076904296875 -0.0185871005058288567279856096093 0.04417090117931365966796875 +-0.0142636001110076904296875 0.0185871005058288567279856096093 0.04417090117931365966796875 +-0.0141103506088256849815287807814 -0.0434265494346618707854901231258 0.0203723505139350898052175153907 +-0.0141103506088256849815287807814 0.0434265494346618707854901231258 0.0203723505139350898052175153907 +-0.014076299965381622314453125 -0.00203380007296800630750555072268 0.0479345500469207791427450615629 +-0.014076299965381622314453125 0.00203380007296800630750555072268 0.0479345500469207791427450615629 +-0.0140351995825767524028737653907 -0.398766803741455122533920985006 0.0280707985162735006168244211722 +-0.0140351995825767524028737653907 0.398766803741455122533920985006 0.0280707985162735006168244211722 +-0.0140027493238449110557475307814 -0.00605949983000755344753063269536 0.0476152002811431884765625 +-0.0140027493238449110557475307814 0.00605949983000755344753063269536 0.0476152002811431884765625 +-0.0139921993017196669151225307814 -0.197537600994110107421875 0.0279841989278793341899831403907 +-0.0139921993017196669151225307814 0.197537600994110107421875 0.0279841989278793341899831403907 +-0.01398400031030178070068359375 -0.010160000063478946685791015625 0.249401748180389404296875 +-0.01398400031030178070068359375 0.010160000063478946685791015625 0.249401748180389404296875 +-0.0138872499577701088296910469921 -0.04274204932153224945068359375 -0.648444545269012517785256477509 +-0.0138872499577701088296910469921 0.04274204932153224945068359375 -0.648444545269012517785256477509 +-0.013879000209271907806396484375 -0.150373995304107666015625 -0.1992362439632415771484375 +-0.013879000209271907806396484375 0.150373995304107666015625 -0.1992362439632415771484375 +-0.0138778496533632274972935860546 -0.331737357378005970343082253748 -0.110715150833129868934712192186 +-0.0138778496533632274972935860546 0.331737357378005970343082253748 -0.110715150833129868934712192186 +-0.0138714004307985295377791956639 -0.4700682163238525390625 0.372617411613464344366519753748 +-0.0138714004307985295377791956639 0.4700682163238525390625 0.372617411613464344366519753748 +-0.0138431996107101443899134451954 -0.0426039993762969970703125 0.194918596744537375720085492503 +-0.0138431996107101443899134451954 0.0426039993762969970703125 0.194918596744537375720085492503 +-0.0138408005237579349172571951954 -0.0425972014665603679328675923443 0.397484397888183627056690738755 +-0.0138408005237579349172571951954 0.0425972014665603679328675923443 0.397484397888183627056690738755 +-0.0138282001018524176860768903907 0 -0.199521398544311528988615123126 +-0.0138199001550674445415456403907 -0.0951054990291595458984375 0.0276396989822387702251393903907 +-0.0138199001550674445415456403907 0.0951054990291595458984375 0.0276396989822387702251393903907 +-0.0138197004795074466360071951954 -0.0425318986177444513518963731258 0.0894429981708526611328125 +-0.0138197004795074466360071951954 0.0425318986177444513518963731258 0.0894429981708526611328125 +-0.0138192504644393931306778355861 -0.0425319999456405667404013115629 -0.022360749542713165283203125 +-0.0138192504644393931306778355861 0.0425319999456405667404013115629 -0.022360749542713165283203125 +-0.0137951999902725230134903355861 0 -0.0990438997745513999282351846887 +-0.0137521505355834953998606096093 -0.115885502099990836399889815311 0.09424124658107757568359375 +-0.0137521505355834953998606096093 0.115885502099990836399889815311 0.09424124658107757568359375 +-0.0137278005480766310264506557814 -0.0854260027408599853515625 -0.180316197872161881887720369377 +-0.0137278005480766310264506557814 0.0854260027408599853515625 -0.180316197872161881887720369377 +-0.0137177005410194403911550153907 -0.00996635034680366620196689808608 0.04703719913959503173828125 +-0.0137177005410194403911550153907 0.00996635034680366620196689808608 0.04703719913959503173828125 +-0.0137013494968414306640625 -0.00995460003614425693874157019536 -0.0470444500446319593955912807814 +-0.0137013494968414306640625 0.00995460003614425693874157019536 -0.0470444500446319593955912807814 +-0.013663299381732940673828125 0 -0.0480969488620758070518412807814 +-0.013605199754238128662109375 -0.21471118927001953125 -0.337214803695678744244190738755 +-0.013605199754238128662109375 0.21471118927001953125 -0.337214803695678744244190738755 +-0.0135946501046419147146204764454 -0.0221116505563259124755859375 0.14773710072040557861328125 +-0.0135946501046419147146204764454 0.0221116505563259124755859375 0.14773710072040557861328125 +-0.0135882005095481865619699846093 -0.00987240001559257403240810191392 -0.149056649208068853207365123126 +-0.0135882005095481865619699846093 0.00987240001559257403240810191392 -0.149056649208068853207365123126 +-0.0135785996913909915578821951954 -0.192237401008605979235710492503 0.0534825980663299616058026231258 +-0.0135785996913909915578821951954 0.192237401008605979235710492503 0.0534825980663299616058026231258 +-0.01357799954712390899658203125 -0.17307449877262115478515625 0.4688934981822967529296875 +-0.01357799954712390899658203125 0.17307449877262115478515625 0.4688934981822967529296875 +-0.0135084003210067752492884451954 -0.0221975505352020284488556711722 0.0427175492048263577560263115629 +-0.0135084003210067752492884451954 0.0221975505352020284488556711722 0.0427175492048263577560263115629 +-0.01350004971027374267578125 -0.0307725995779037503341513115629 -0.0370243012905120891242738423443 +-0.01350004971027374267578125 0.0307725995779037503341513115629 -0.0370243012905120891242738423443 +-0.0134977996349334716796875 -0.0905829012393951499282351846887 0.0401565998792648357063050923443 +-0.0134977996349334716796875 0.0905829012393951499282351846887 0.0401565998792648357063050923443 +-0.0134770005941391001619278355861 -0.0480594009160995525031800923443 -0.00294330008327961002712047644536 +-0.0134770005941391001619278355861 0.0480594009160995525031800923443 -0.00294330008327961002712047644536 +-0.0134731993079185499717631557814 -0.391770410537719770971420985006 0.0795899987220764215667401231258 +-0.0134731993079185499717631557814 0.391770410537719770971420985006 0.0795899987220764215667401231258 +-0.0134530496783554550516148751171 -0.380061501264572165759147992503 0.527135697007179326867287727509 +-0.0134530496783554550516148751171 0.380061501264572165759147992503 0.527135697007179326867287727509 +-0.0134489997290074825286865234375 -0.5227739810943603515625 -0.53761200606822967529296875 +-0.0134489997290074825286865234375 0.5227739810943603515625 -0.53761200606822967529296875 +-0.0134356006979942325246790701954 -0.048032701015472412109375 0.003513149917125701904296875 +-0.0134356006979942325246790701954 0.048032701015472412109375 0.003513149917125701904296875 +-0.0133632003329694267618199532421 -0.401282554864883456158253238755 0.203208754956722276174829744377 +-0.0133632003329694267618199532421 0.401282554864883456158253238755 0.203208754956722276174829744377 +-0.0133260004222393035888671875 -0.172529995441436767578125 0.984914004802703857421875 +-0.0133260004222393035888671875 0.172529995441436767578125 0.984914004802703857421875 +-0.0133257001638412489463725307814 -0.0196410000324249295333700615629 -0.097142398357391357421875 +-0.0133257001638412489463725307814 0.0196410000324249295333700615629 -0.097142398357391357421875 +-0.0133182000368833527992329379686 -0.2581974565982818603515625 0.235916802287101740054353626874 +-0.0133182000368833527992329379686 0.2581974565982818603515625 0.235916802287101740054353626874 +-0.0133085504174232493318497105861 -0.0409602493047714275031800923443 -0.0253996014595031759097931711722 +-0.0133085504174232493318497105861 0.0409602493047714275031800923443 -0.0253996014595031759097931711722 +-0.01328445039689540863037109375 -0.105345752835273739900223688437 -0.105951896309852591770983565311 +-0.01328445039689540863037109375 0.105345752835273739900223688437 -0.105951896309852591770983565311 +-0.0132697492837905890727956403907 -0.019309200346469879150390625 -0.04417090117931365966796875 +-0.0132697492837905890727956403907 0.019309200346469879150390625 -0.04417090117931365966796875 +-0.0132596999406814578664759451954 -0.0473910987377166789680238423443 -0.008846700191497802734375 +-0.0132596999406814578664759451954 0.0473910987377166789680238423443 -0.008846700191497802734375 +-0.0132530003786087043071706403907 -0.18324840068817138671875 0.0790216028690338134765625 +-0.0132530003786087043071706403907 0.18324840068817138671875 0.0790216028690338134765625 +-0.0132160002365708344196360002343 -0.343519043922424271997329014994 -0.0657268516719341222565020643742 +-0.0132160002365708344196360002343 0.343519043922424271997329014994 -0.0657268516719341222565020643742 +-0.0131994500756263746787944057814 -0.0339485496282577528526225307814 0.0342530488967895535568075615629 +-0.0131994500756263746787944057814 0.0339485496282577528526225307814 0.0342530488967895535568075615629 +-0.0131975002586841583251953125 -0.172046244144439697265625 0.18090300261974334716796875 +-0.0131975002586841583251953125 0.172046244144439697265625 0.18090300261974334716796875 +-0.0131878003478050238872487653907 -0.0669605970382690512954226846887 0.0730913996696472140213174384371 +-0.0131878003478050238872487653907 0.0669605970382690512954226846887 0.0730913996696472140213174384371 +-0.0131456997245550152170201485546 -0.0728560522198676979721554403113 -0.1304575502872467041015625 +-0.0131456997245550152170201485546 0.0728560522198676979721554403113 -0.1304575502872467041015625 +-0.0131434500217437744140625 -0.0404505997896194499641175923443 0.026286900043487548828125 +-0.0131434500217437744140625 0.0404505997896194499641175923443 0.026286900043487548828125 +-0.01314119994640350341796875 -0.0830808997154235950866052462516 -0.0540821015834808405120526231258 +-0.01314119994640350341796875 0.0830808997154235950866052462516 -0.0540821015834808405120526231258 +-0.0131319999694824232627787807814 -0.298133206367492686883480246252 -0.266353201866149913445980246252 +-0.0131319999694824232627787807814 0.298133206367492686883480246252 -0.266353201866149913445980246252 +-0.0131262004375457767141321951954 -0.0470808506011962946136151231258 0.0105402000248432173301615932814 +-0.0131262004375457767141321951954 0.0470808506011962946136151231258 0.0105402000248432173301615932814 +-0.0129226500168442733074147810157 -0.136709095537662500552400501874 -0.4285368025302886962890625 +-0.0129226500168442733074147810157 0.136709095537662500552400501874 -0.4285368025302886962890625 +-0.0129157006740570068359375 -0.084390699863433837890625 0.0520711004734039362151776231258 +-0.0129157006740570068359375 0.084390699863433837890625 0.0520711004734039362151776231258 +-0.0128406003117561354209819057814 -0.0460959494113922160773988423443 -0.0145011499524116526521622105861 +-0.0128406003117561354209819057814 0.0460959494113922160773988423443 -0.0145011499524116526521622105861 +-0.0128189999610185626638392264454 -0.039454199373722076416015625 -0.598564195632934503699118522491 +-0.0128189999610185626638392264454 0.039454199373722076416015625 -0.598564195632934503699118522491 +-0.0127884004265069965017298514454 -0.0393597006797790499588174384371 -0.297131699323654185906917746252 +-0.0127884004265069965017298514454 0.0393597006797790499588174384371 -0.297131699323654185906917746252 +-0.0127432003617286692537247105861 -0.377772402763366710320980246252 0.130864799022674560546875 +-0.0127432003617286692537247105861 0.377772402763366710320980246252 0.130864799022674560546875 +-0.0127373993396759036672571951954 -0.0392026007175445556640625 -0.195706200599670421258480246252 +-0.0127373993396759036672571951954 0.0392026007175445556640625 -0.195706200599670421258480246252 +-0.0127351492643356326711634451954 -0.0133688494563102729106862653907 0.0464659988880157526214276231258 +-0.0127351492643356326711634451954 0.0133688494563102729106862653907 0.0464659988880157526214276231258 +-0.0127340495586395277549662807814 -0.0391920000314712538291850307814 -0.0283166497945785550216513115629 +-0.0127340495586395277549662807814 0.0391920000314712538291850307814 -0.0283166497945785550216513115629 +-0.01272214949131011962890625 -0.349162447452545154913394753748 -0.0205856002867221832275390625 +-0.01272214949131011962890625 0.349162447452545154913394753748 -0.0205856002867221832275390625 +-0.0127154503948986533773402030079 -0.430895864963531549651776231258 0.341565960645675681384147992503 +-0.0127154503948986533773402030079 0.430895864963531549651776231258 0.341565960645675681384147992503 +-0.012714900076389312744140625 -0.155389505624771107061832253748 0.256305295228958118780582253748 +-0.012714900076389312744140625 0.155389505624771107061832253748 0.256305295228958118780582253748 +-0.0126779496669769294048268903907 -0.0282254010438919081260600307814 -0.03927589952945709228515625 +-0.0126779496669769294048268903907 0.0282254010438919081260600307814 -0.03927589952945709228515625 +-0.0126682996749877940095840855861 -0.0256684511899948133994975307814 0.0409956514835357679893412807814 +-0.0126682996749877940095840855861 0.0256684511899948133994975307814 0.0409956514835357679893412807814 +-0.012667000293731689453125 -0.06057369709014892578125 -0.0785517990589141845703125 +-0.012667000293731689453125 0.06057369709014892578125 -0.0785517990589141845703125 +-0.0126662995666265484201451485546 -0.0389833509922027574012837192186 -0.144290846586227400338842130623 +-0.0126662995666265484201451485546 0.0389833509922027574012837192186 -0.144290846586227400338842130623 +-0.0126597004011273373685897425389 -0.163903495669364934750333873126 0.93566830456256866455078125 +-0.0126597004011273373685897425389 0.163903495669364934750333873126 0.93566830456256866455078125 +-0.0126548007130622870708425153907 -0.166070997714996337890625 -0.110726201534271248561047684689 +-0.0126548007130622870708425153907 0.166070997714996337890625 -0.110726201534271248561047684689 +-0.0126305997371673594392715855861 -0.0896507978439331082443075615629 0.178334605693817149774105246252 +-0.0126305997371673594392715855861 0.0896507978439331082443075615629 0.178334605693817149774105246252 +-0.01258344948291778564453125 -0.00662840008735656772975719519536 -0.0479345500469207791427450615629 +-0.01258344948291778564453125 0.00662840008735656772975719519536 -0.0479345500469207791427450615629 +-0.0125682994723320014263112653907 -0.0255176007747650174239950615629 0.0958691000938415582854901231258 +-0.0125682994723320014263112653907 0.0255176007747650174239950615629 0.0958691000938415582854901231258 +-0.0125523997470736500131627266796 -0.487922382354736283716079014994 -0.501771205663681052477897992503 +-0.0125523997470736500131627266796 0.487922382354736283716079014994 -0.501771205663681052477897992503 +-0.0125447999686002734792689139454 -0.268919402360916104388621761245 -0.132381597161293024234041126874 +-0.0125447999686002734792689139454 0.268919402360916104388621761245 -0.132381597161293024234041126874 +-0.0125314503908157352102259451954 -0.0452418506145477322677450615629 0.0172087505459785454486887346093 +-0.0125314503908157352102259451954 0.0452418506145477322677450615629 0.0172087505459785454486887346093 +-0.0124640002846717837942103201954 -0.0383610010147094754318075615629 -0.0915045022964477566818075615629 +-0.0124640002846717837942103201954 0.0383610010147094754318075615629 -0.0915045022964477566818075615629 +-0.0124333497136831280099888985546 -0.0580087512731552110145649692186 0.13776929676532745361328125 +-0.0124333497136831280099888985546 0.0580087512731552110145649692186 0.13776929676532745361328125 +-0.0124181997030973437917689139454 -0.350826001167297341076789507497 0.486586797237396229132144753748 +-0.0124181997030973437917689139454 0.350826001167297341076789507497 0.486586797237396229132144753748 +-0.0123006001114845282817800153907 -0.0162963002920150749897043596093 -0.0456413000822067302375550923443 +-0.0123006001114845282817800153907 0.0162963002920150749897043596093 -0.0456413000822067302375550923443 +-0.0122807996347546570514719377343 -0.348920953273773148950454014994 0.0245619487017393091365935475778 +-0.0122807996347546570514719377343 0.348920953273773148950454014994 0.0245619487017393091365935475778 +-0.01228000037372112274169921875 -0.4684239923954010009765625 -0.883418023586273193359375 +-0.01228000037372112274169921875 0.4684239923954010009765625 -0.883418023586273193359375 +-0.0122423999011516577983815778907 -0.171066594123840343133480246252 0.102890205383300792352230246252 +-0.0122423999011516577983815778907 0.171066594123840343133480246252 0.102890205383300792352230246252 +-0.0122403003275394443166712576954 -0.0442481994628906305511151231258 -0.0198058500885963453819194057814 +-0.0122403003275394443166712576954 0.0442481994628906305511151231258 -0.0198058500885963453819194057814 +-0.0122237503528594970703125 -0.09150575101375579833984375 -0.2323299944400787353515625 +-0.0122237503528594970703125 0.09150575101375579833984375 -0.2323299944400787353515625 +-0.0122201995924115184438685233204 -0.155767048895359055959985994377 0.42200414836406707763671875 +-0.0122201995924115184438685233204 0.155767048895359055959985994377 0.42200414836406707763671875 +-0.0121107004582881924020787423046 -0.0372725512832403141350035014057 0.347798848152160611224559261245 +-0.0121107004582881924020787423046 0.0372725512832403141350035014057 0.347798848152160611224559261245 +-0.0120985500514507304109512730861 -0.0372361510992050212531800923443 -0.0310981005430221585372763115629 +-0.0120985500514507304109512730861 0.0372361510992050212531800923443 -0.0310981005430221585372763115629 +-0.01207800023257732391357421875 -0.0700789988040924072265625 0.2396727502346038818359375 +-0.01207800023257732391357421875 0.0700789988040924072265625 0.2396727502346038818359375 +-0.012030499987304210662841796875 -0.19752700626850128173828125 -0.1527689993381500244140625 +-0.012030499987304210662841796875 0.19752700626850128173828125 -0.1527689993381500244140625 +-0.0119934003800153728830357735546 -0.155276995897293101922542746252 0.8864226043224334716796875 +-0.0119934003800153728830357735546 0.155276995897293101922542746252 0.8864226043224334716796875 +-0.0119410999119281772268275076954 -0.0367502510547637953330912807814 0.0317305505275726346114950615629 +-0.0119410999119281772268275076954 0.0367502510547637953330912807814 0.0317305505275726346114950615629 +-0.0119111001491546634328821951954 -0.0792644977569580133636151231258 -0.0597935020923614501953125 +-0.0119111001491546634328821951954 0.0792644977569580133636151231258 -0.0597935020923614501953125 +-0.011904549784958362579345703125 -0.18787229061126708984375 -0.295062953233718838763621761245 +-0.011904549784958362579345703125 0.18787229061126708984375 -0.295062953233718838763621761245 +-0.0118952997028827656827987269139 -0.284346306324005093646434261245 -0.094898700714111328125 +-0.0118952997028827656827987269139 0.284346306324005093646434261245 -0.094898700714111328125 +-0.0118784002959728251375137730861 -0.356695604324340831414730246252 0.180630004405975347347990123126 +-0.0118784002959728251375137730861 0.356695604324340831414730246252 0.180630004405975347347990123126 +-0.0118136502802371982229212576954 -0.0255600512027740478515625 -0.0413173496723175104339276231258 +-0.0118136502802371982229212576954 0.0255600512027740478515625 -0.0413173496723175104339276231258 +-0.0117890493944287286232075473436 -0.342799109220504716333266514994 0.0696412488818168584625567518742 +-0.0117890493944287286232075473436 0.342799109220504716333266514994 0.0696412488818168584625567518742 +-0.0117881000041961669921875 -0.0496434986591339152961488423443 0.0860032975673675620376101846887 +-0.0117881000041961669921875 0.0496434986591339152961488423443 0.0860032975673675620376101846887 +-0.0117688503116369237028182581639 -0.149537551403045643194644753748 0 +-0.0117688503116369237028182581639 0.149537551403045643194644753748 0 +-0.0117507499642670164979874058986 -0.03616634942591190338134765625 -0.548683845996856711657585492503 +-0.0117507499642670164979874058986 0.03616634942591190338134765625 -0.548683845996856711657585492503 +-0.01169764995574951171875 -0.0167343005537986776187775461722 0.0456413000822067302375550923443 +-0.01169764995574951171875 0.0167343005537986776187775461722 0.0456413000822067302375550923443 +-0.0116835996508598341514506557814 -0.0426317989826202406455912807814 0.0233671501278877279117462961722 +-0.0116835996508598341514506557814 0.0426317989826202406455912807814 0.0233671501278877279117462961722 +-0.0116723001003265387798268903907 -0.0486185014247894342620526231258 0 +-0.0116723001003265387798268903907 0.0486185014247894342620526231258 0 +-0.0116660003550350666046142578125 -0.445002792775630928723273882497 -0.83924712240695953369140625 +-0.0116660003550350666046142578125 0.445002792775630928723273882497 -0.83924712240695953369140625 +-0.0116557997651398192323624058986 -0.453070783615112326891960492503 -0.465930405259132374151676003748 +-0.0116557997651398192323624058986 0.453070783615112326891960492503 -0.465930405259132374151676003748 +-0.0116258002817630767822265625 -0.0290973007678985602642018903907 0.0389639496803283746917401231258 +-0.0116258002817630767822265625 0.0290973007678985602642018903907 0.0389639496803283746917401231258 +-0.011559500358998775482177734375 -0.39172351360321044921875 0.310514509677886962890625 +-0.011559500358998775482177734375 0.39172351360321044921875 0.310514509677886962890625 +-0.0114904999732971177528462192186 -0.260866555571556080206363503748 -0.233059051632881153448551003748 +-0.0114904999732971177528462192186 0.260866555571556080206363503748 -0.233059051632881153448551003748 +-0.0114868000149726881553569057814 -0.121519196033477785978682561563 -0.3809216022491455078125 +-0.0114868000149726881553569057814 0.121519196033477785978682561563 -0.3809216022491455078125 +-0.0114777997136116041709819057814 -0.0991648018360137967208700615629 -0.00588279999792575870876110144536 +-0.0114777997136116041709819057814 0.0991648018360137967208700615629 -0.00588279999792575870876110144536 +-0.0114565495401620868337611014454 -0.122434195876121518220536188437 0.0858990043401718084137286268742 +-0.0114565495401620868337611014454 0.122434195876121518220536188437 0.0858990043401718084137286268742 +-0.0114502497017383575439453125 -0.138645449280738825015291126874 -0.0560922011733055100868305942186 +-0.0114502497017383575439453125 0.138645449280738825015291126874 -0.0560922011733055100868305942186 +-0.0114340499043464674522319057814 -0.0483196496963501018195863423443 -0.00587154999375343392142845289072 +-0.0114340499043464674522319057814 0.0483196496963501018195863423443 -0.00587154999375343392142845289072 +-0.0114156000316143028949777971093 -0.221312105655670166015625 0.202214401960372908151342130623 +-0.0114156000316143028949777971093 0.221312105655670166015625 0.202214401960372908151342130623 +-0.0114051498472690585744837576954 -0.0351020991802215576171875 -0.0337307512760162339637837192186 +-0.0114051498472690585744837576954 0.0351020991802215576171875 -0.0337307512760162339637837192186 +-0.0113988496363163008262553432814 -0.00330209992825984980854836514652 -0.0485711991786956787109375 +-0.0113988496363163008262553432814 0.00330209992825984980854836514652 -0.0485711991786956787109375 +-0.0113833497278392325319229527736 -0.321590501070022627416733485006 0.446037897467613242419304242503 +-0.0113833497278392325319229527736 0.321590501070022627416733485006 0.446037897467613242419304242503 +-0.0113582000136375430715540701954 -0.0991046011447906521896200615629 0.00701979994773864815482689039072 +-0.0113582000136375430715540701954 0.0991046011447906521896200615629 0.00701979994773864815482689039072 +-0.0113309502601623545564590855861 -0.0481930494308471721320863423443 0.00700294971466064453125 +-0.0113309502601623545564590855861 0.0481930494308471721320863423443 0.00700294971466064453125 +-0.0113280002027750011789342110546 -0.294444894790649391858039507497 -0.0563373014330863924881143134371 +-0.0113280002027750011789342110546 0.294444894790649391858039507497 -0.0563373014330863924881143134371 +-0.0113271003589034083974818045704 -0.146650496125221241339176003748 0.83717690408229827880859375 +-0.0113271003589034083974818045704 0.146650496125221241339176003748 0.83717690408229827880859375 +-0.0112845003604888916015625 -0.129880195856094365902677623126 -0.074187599122524261474609375 +-0.0112845003604888916015625 0.129880195856094365902677623126 -0.074187599122524261474609375 +-0.0112714499235153208650528355861 -0.0132039994001388553274134451954 -0.0468892991542816175987162807814 +-0.0112714499235153208650528355861 0.0132039994001388553274134451954 -0.0468892991542816175987162807814 +-0.0112552497535943988454798514454 -0.0942460477352142361739950615629 0.116150701045989984683259876874 +-0.0112552497535943988454798514454 0.0942460477352142361739950615629 0.116150701045989984683259876874 +-0.0112190999090671546245534528907 -0.0131747007369995127595840855861 -0.0984914004802703857421875 +-0.0112190999090671546245534528907 0.0131747007369995127595840855861 -0.0984914004802703857421875 +-0.0111992001533508314659037807814 0 0.0487296491861343439300213731258 +-0.0111974000930786139751393903907 0 0.0993710994720459067641726846887 +-0.0111872002482414252544362653907 -0.00812800005078315700168811730464 0.199521398544311528988615123126 +-0.0111872002482414252544362653907 0.00812800005078315700168811730464 0.199521398544311528988615123126 +-0.0111628003418445601035990932814 -0.00402855016291141492662530865232 0.0485711991786956787109375 +-0.0111628003418445601035990932814 0.00402855016291141492662530865232 0.0485711991786956787109375 +-0.011160500347614288330078125 -0.00810849964618682965411533558608 0.0990438997745513999282351846887 +-0.011160500347614288330078125 0.00810849964618682965411533558608 0.0990438997745513999282351846887 +-0.0111503003165125836454452112889 -0.330550852417945850714176003748 0.114506699144840226600727817186 +-0.0111503003165125836454452112889 0.330550852417945850714176003748 0.114506699144840226600727817186 +-0.0111358001828193668020228201954 -0.0473098993301391615440287807814 -0.0117374502122402201570450230861 +-0.0111358001828193668020228201954 0.0473098993301391615440287807814 -0.0117374502122402201570450230861 +-0.0111032001674175265920618826954 -0.120299196243286138363615123126 -0.159388995170593267269865123126 +-0.0111032001674175265920618826954 0.120299196243286138363615123126 -0.159388995170593267269865123126 +-0.0110537998378276835359512730861 -0.00803095027804374798907627308608 0.0480969488620758070518412807814 +-0.0110537998378276835359512730861 0.00803095027804374798907627308608 0.0480969488620758070518412807814 +-0.011052000336349010467529296875 -0.421581593155860911981136496252 -0.7950762212276458740234375 +-0.011052000336349010467529296875 0.421581593155860911981136496252 -0.7950762212276458740234375 +-0.0110357001423835761333425153907 -0.0946196973323822076995526231258 -0.0304190993309021023849325615629 +-0.0110357001423835761333425153907 0.0946196973323822076995526231258 -0.0304190993309021023849325615629 +-0.0110098499804735187185267264454 -0.144996446371078474557592130623 -0.0368080504238605457634214701557 +-0.0110098499804735187185267264454 0.144996446371078474557592130623 -0.0368080504238605457634214701557 +-0.0109972000122070326377787807814 -0.0896798014640808188735476846887 -0.0428553998470306424239950615629 +-0.0109972000122070326377787807814 0.0896798014640808188735476846887 -0.0428553998470306424239950615629 +-0.0109323002398014068603515625 -0.0552448987960815485198651231258 -0.0826346993446350208678552462516 +-0.0109323002398014068603515625 0.0552448987960815485198651231258 -0.0826346993446350208678552462516 +-0.0109074503183364882041850307814 -0.0467564493417739895919638115629 0.0139593005180358893657643903907 +-0.0109074503183364882041850307814 0.0467564493417739895919638115629 0.0139593005180358893657643903907 +-0.0109046995639801025390625 -0.299282097816467251849559261245 -0.017644800245761871337890625 +-0.0109046995639801025390625 0.299282097816467251849559261245 -0.017644800245761871337890625 +-0.0108786005526781085622767264454 -0.148565849661827092953458873126 -0.0176024995744228363037109375 +-0.0108786005526781085622767264454 0.148565849661827092953458873126 -0.0176024995744228363037109375 +-0.0108623996376991278911550153907 -0.138459599018096929379240123126 0.37511479854583740234375 +-0.0108623996376991278911550153907 0.138459599018096929379240123126 0.37511479854583740234375 +-0.0108351998031139384187637730861 -0.0978529989719390952407351846887 -0.0175322994589805596088449846093 +-0.0108351998031139384187637730861 0.0978529989719390952407351846887 -0.0175322994589805596088449846093 +-0.0108323995023965839040736014454 -0.0980237960815429631988848768742 -0.113022145628929135408036188437 +-0.0108323995023965839040736014454 0.0980237960815429631988848768742 -0.113022145628929135408036188437 +-0.0107591997832059849821151331639 -0.418219184875488259045539507497 -0.430089604854583751336605246252 +-0.0107591997832059849821151331639 0.418219184875488259045539507497 -0.430089604854583751336605246252 +-0.010729350149631500244140625 -0.0222230002284049994731862653907 -0.0434858500957489013671875 +-0.010729350149631500244140625 0.0222230002284049994731862653907 -0.0434858500957489013671875 +-0.010682499967515468597412109375 -0.0328784994781017303466796875 -0.49880349636077880859375 +-0.010682499967515468597412109375 0.0328784994781017303466796875 -0.49880349636077880859375 +-0.0106622003018856052053431326954 -0.0725292980670928927322549384371 0.0680132985115051297286825615629 +-0.0106622003018856052053431326954 0.0725292980670928927322549384371 0.0680132985115051297286825615629 +-0.0106608003377914439119278355861 -0.138023996353149408511384876874 0.7879312038421630859375 +-0.0106608003377914439119278355861 0.138023996353149408511384876874 0.7879312038421630859375 +-0.0106572002172470106651225307814 -0.0328000485897064208984375 -0.0362019509077072185188050923443 +-0.0106572002172470106651225307814 0.0328000485897064208984375 -0.0362019509077072185188050923443 +-0.010657000355422496795654296875 -0.0327997505664825439453125 -0.24760974943637847900390625 +-0.010657000355422496795654296875 0.0327997505664825439453125 -0.24760974943637847900390625 +-0.0106194503605365753173828125 -0.0199881494045257568359375 0.0445836514234542874435263115629 +-0.0106194503605365753173828125 0.0199881494045257568359375 0.0445836514234542874435263115629 +-0.0106026001274585734285293980861 -0.0457521498203277629523988423443 -0.01715590059757232666015625 +-0.0106026001274585734285293980861 0.0457521498203277629523988423443 -0.01715590059757232666015625 +-0.01059930026531219482421875 -0.0392946511507034357268963731258 0.0290444999933242818668244211722 +-0.01059930026531219482421875 0.0392946511507034357268963731258 0.0290444999933242818668244211722 +-0.0105957500636577606201171875 -0.12949125468730926513671875 0.21358774602413177490234375 +-0.0105957500636577606201171875 0.12949125468730926513671875 0.21358774602413177490234375 +-0.0105580002069473270071009451954 -0.137636995315551763363615123126 0.144722402095794677734375 +-0.0105580002069473270071009451954 0.137636995315551763363615123126 0.144722402095794677734375 +-0.0105263996869325634347935860546 -0.299075102806091286389289507497 0.0210530988872051245952565778907 +-0.0105263996869325634347935860546 0.299075102806091286389289507497 0.0210530988872051245952565778907 +-0.0105117000639438629150390625 -0.0429922997951507623870526231258 -0.023262999951839447021484375 +-0.0105117000639438629150390625 0.0429922997951507623870526231258 -0.023262999951839447021484375 +-0.0105043999850749983360209682814 -0.0323285996913909925987162807814 0.0366676986217498793174662807814 +-0.0105043999850749983360209682814 0.0323285996913909925987162807814 0.0366676986217498793174662807814 +-0.0104941494762897484516184221093 -0.14815320074558258056640625 0.0209881491959094980404021413278 +-0.0104941494762897484516184221093 0.14815320074558258056640625 0.0209881491959094980404021413278 +-0.0104791998863220225252090855861 -0.0322521001100540202766175923443 -0.0940743982791900634765625 +-0.0104791998863220225252090855861 0.0322521001100540202766175923443 -0.0940743982791900634765625 +-0.010467000305652618408203125 -0.0322136014699935940841513115629 0.0940889000892639187911825615629 +-0.010467000305652618408203125 0.0322136014699935940841513115629 0.0940889000892639187911825615629 +-0.010453999973833560943603515625 -0.22409950196743011474609375 -0.110317997634410858154296875 +-0.010453999973833560943603515625 0.22409950196743011474609375 -0.110317997634410858154296875 +-0.0104400999844074249267578125 -0.0972369015216827392578125 0.0208802998065948514083700615629 +-0.0104400999844074249267578125 0.0972369015216827392578125 0.0208802998065948514083700615629 +-0.0104380003176629543304443359375 -0.398160393536090839727847878748 -0.75090532004833221435546875 +-0.0104380003176629543304443359375 0.398160393536090839727847878748 -0.75090532004833221435546875 +-0.0104108996689319614065150076954 -0.0749431014060974176604901231258 -0.0653846979141235323806924384371 +-0.0104108996689319614065150076954 0.0749431014060974176604901231258 -0.0653846979141235323806924384371 +-0.0104035503230988975870152657421 -0.352551162242889404296875 0.279463058710098299908253238755 +-0.0104035503230988975870152657421 0.352551162242889404296875 0.279463058710098299908253238755 +-0.0103936002589762200437606409764 -0.312108653783798206671207253748 0.158051253855228418521150501874 +-0.0103936002589762200437606409764 0.312108653783798206671207253748 0.158051253855228418521150501874 +-0.0103823997080326069913924769139 -0.031952999532222747802734375 0.146188947558403004034488503748 +-0.0103823997080326069913924769139 0.031952999532222747802734375 0.146188947558403004034488503748 +-0.0103806003928184498869002894139 -0.0319479010999202742149272182814 0.298113298416137706414730246252 +-0.0103806003928184498869002894139 0.0319479010999202742149272182814 0.298113298416137706414730246252 +-0.0103711500763893123971959298046 0 -0.149641048908233625924779630623 +-0.010348499752581119537353515625 -0.292355000972747802734375 0.4054889976978302001953125 +-0.010348499752581119537353515625 0.292355000972747802734375 0.4054889976978302001953125 +-0.0103050999343395240093190778907 0 -0.0489265501499176053146200615629 +-0.0102958504110574715351145158593 -0.064069502055644989013671875 -0.135237148404121404476896373126 +-0.0102958504110574715351145158593 0.064069502055644989013671875 -0.135237148404121404476896373126 +-0.0102494001388549818565287807814 -0.0936047971248626792251101846887 0.03366149961948394775390625 +-0.0102494001388549818565287807814 0.0936047971248626792251101846887 0.03366149961948394775390625 +-0.01020389981567859649658203125 -0.1610333919525146484375 -0.252911102771759044305355246252 +-0.01020389981567859649658203125 0.1610333919525146484375 -0.252911102771759044305355246252 +-0.0101925000548362745811381557814 -0.00991925001144409318465378078145 -0.0479345500469207791427450615629 +-0.0101925000548362745811381557814 0.00991925001144409318465378078145 -0.0479345500469207791427450615629 +-0.0101839497685432423673690394139 -0.144178050756454456671207253748 0.0401119485497474642654580634371 +-0.0101839497685432423673690394139 0.144178050756454456671207253748 0.0401119485497474642654580634371 +-0.0101516500115394602693497105861 -0.0445501506328582763671875 0.0203033506870269782329518903907 +-0.0101516500115394602693497105861 0.0445501506328582763671875 0.0203033506870269782329518903907 +-0.0101048994809389107440988908593 -0.293827807903289772717414507497 0.0596924990415573092361611884371 +-0.0101048994809389107440988908593 0.293827807903289772717414507497 0.0596924990415573092361611884371 +-0.0100901000201702121389368826954 -0.0114448003470897681499440778907 0.0476152002811431884765625 +-0.0100901000201702121389368826954 0.0114448003470897681499440778907 0.0476152002811431884765625 +-0.0100509500131010995338520785936 -0.106329296529293057527176813437 -0.3333064019680023193359375 +-0.0100509500131010995338520785936 0.106329296529293057527176813437 -0.3333064019680023193359375 +-0.009994500316679477691650390625 -0.12939749658107757568359375 0.73868550360202789306640625 +-0.009994500316679477691650390625 0.12939749658107757568359375 0.73868550360202789306640625 +-0.00997669994831085205078125 -0.0413553506135940565635600307814 -0.0262716501951217665244975307814 +-0.00997669994831085205078125 0.0413553506135940565635600307814 -0.0262716501951217665244975307814 +-0.00993975028395652736301624230464 -0.1374363005161285400390625 0.059266202151775360107421875 +-0.00993975028395652736301624230464 0.1374363005161285400390625 0.059266202151775360107421875 +-0.00991274975240230560302734375 -0.2369552552700042724609375 -0.0790822505950927734375 +-0.00991274975240230560302734375 0.2369552552700042724609375 -0.0790822505950927734375 +-0.00986259980127215420131481238286 -0.383367586135864302221420985006 -0.394248804450035128521534488755 +-0.00986259980127215420131481238286 0.383367586135864302221420985006 -0.394248804450035128521534488755 +-0.00985824987292289837970127308608 -0.0303410500288009664371369211722 -0.0384998500347137478927450615629 +-0.00985824987292289837970127308608 0.0303410500288009664371369211722 -0.0384998500347137478927450615629 +-0.00984899997711181571236060960928 -0.223599904775619501284822376874 -0.199764901399612421206697376874 +-0.00984899997711181571236060960928 0.223599904775619501284822376874 -0.199764901399612421206697376874 +-0.00982415005564689705619407789072 -0.0414220988750457763671875 0.0262239992618560797954518903907 +-0.00982415005564689705619407789072 0.0414220988750457763671875 0.0262239992618560797954518903907 +-0.009824000298976898193359375 -0.374739193916320822985710492503 -0.7067344188690185546875 +-0.009824000298976898193359375 0.374739193916320822985710492503 -0.7067344188690185546875 +-0.009821750223636627197265625 -0.0235455498099327101280131557814 0.0430016487836837810188050923443 +-0.009821750223636627197265625 0.0235455498099327101280131557814 0.0430016487836837810188050923443 +-0.00980169996619224652423252308608 -0.0882833003997802734375 0.0459345012903213528732138115629 +-0.00980169996619224652423252308608 0.0882833003997802734375 0.0459345012903213528732138115629 +-0.00977900028228759904402878078145 -0.0732046008110046469985476846887 -0.185863995552063010485710492503 +-0.00977900028228759904402878078145 0.0732046008110046469985476846887 -0.185863995552063010485710492503 +-0.0097763501107692718505859375 -0.0192950993776321438888388115629 -0.0450790494680404704719300923443 +-0.0097763501107692718505859375 0.0192950993776321438888388115629 -0.0450790494680404704719300923443 +-0.00967789962887764115828659328145 -0.0564248025417327936370526231258 0.0819913029670715359786825615629 +-0.00967789962887764115828659328145 0.0564248025417327936370526231258 0.0819913029670715359786825615629 +-0.00966240018606186017169346058608 -0.0560631990432739271690287807814 0.191738200187683116570980246252 +-0.00966240018606186017169346058608 0.0560631990432739271690287807814 0.191738200187683116570980246252 +-0.009651400148868560791015625 -0.0489713013172149713714276231258 -0.00294295009225606927008578317384 +-0.009651400148868560791015625 0.0489713013172149713714276231258 -0.00294295009225606927008578317384 +-0.00962439998984336922416282789072 -0.158021605014801030941740123126 -0.122215199470520022306807561563 +-0.00962439998984336922416282789072 0.158021605014801030941740123126 -0.122215199470520022306807561563 +-0.00961424997076392243156028882822 -0.02959064953029155731201171875 -0.448923146724700961041065738755 +-0.00961424997076392243156028882822 0.02959064953029155731201171875 -0.448923146724700961041065738755 +-0.00960654988884925876979625769536 -0.0489425987005233792404013115629 0.00351249985396862030029296875 +-0.00960654988884925876979625769536 0.0489425987005233792404013115629 0.00351249985396862030029296875 +-0.00955740027129650150661266394536 -0.283329302072524991107371761245 0.09814859926700592041015625 +-0.00955740027129650150661266394536 0.283329302072524991107371761245 0.09814859926700592041015625 +-0.00955304950475692644940028941392 -0.029401950538158416748046875 -0.146779650449752802066072376874 +-0.00955304950475692644940028941392 0.029401950538158416748046875 -0.146779650449752802066072376874 +-0.00951300002634525299072265625 -0.1844267547130584716796875 0.16851200163364410400390625 +-0.00951300002634525299072265625 0.1844267547130584716796875 0.16851200163364410400390625 +-0.00950459968298673560371803148428 -0.121152149140834802798494251874 0.32822544872760772705078125 +-0.00950459968298673560371803148428 0.121152149140834802798494251874 0.32822544872760772705078125 +-0.00949110053479671443577014855464 -0.12455324828624725341796875 -0.0830446511507034329513388115629 +-0.00949110053479671443577014855464 0.12455324828624725341796875 -0.0830446511507034329513388115629 +-0.00947294980287551914577282019536 -0.0672380983829498207748898153113 0.133750954270362848452791126874 +-0.00947294980287551914577282019536 0.0672380983829498207748898153113 0.133750954270362848452791126874 +-0.009440000168979167938232421875 -0.24537074565887451171875 -0.0469477511942386627197265625 +-0.009440000168979167938232421875 0.24537074565887451171875 -0.0469477511942386627197265625 +-0.00936760008335113525390625 -0.0395083010196685818771200615629 -0.0291777491569519056846537807814 +-0.00936760008335113525390625 0.0395083010196685818771200615629 -0.0291777491569519056846537807814 +-0.00933244973421096767063342980464 -0.0483321487903594984580912807814 -0.0087696500122547149658203125 +-0.00933244973421096767063342980464 0.0483321487903594984580912807814 -0.0087696500122547149658203125 +-0.00932820029556751147137294566392 -0.120770996809005728978014815311 0.6894398033618927001953125 +-0.00932820029556751147137294566392 0.120770996809005728978014815311 0.6894398033618927001953125 +-0.00931364977732300827750755445322 -0.263119500875473033563167746252 0.364940097928047213482471988755 +-0.00931364977732300827750755445322 0.263119500875473033563167746252 0.364940097928047213482471988755 +-0.00927629992365837201251377308608 -0.0352232486009597806075888115629 0.0342530488967895535568075615629 +-0.00927629992365837201251377308608 0.0352232486009597806075888115629 0.0342530488967895535568075615629 +-0.00924760028719902142657627308608 -0.313378810882568359375 0.248411607742309581414730246252 +-0.00924760028719902142657627308608 0.313378810882568359375 0.248411607742309581414730246252 +-0.0092100002802908420562744140625 -0.351317994296550750732421875 -0.66256351768970489501953125 +-0.0092100002802908420562744140625 0.351317994296550750732421875 -0.66256351768970489501953125 +-0.00918179992586374248142444542964 -0.128299945592880243472322376874 0.0771676540374755803863848768742 +-0.00918179992586374248142444542964 0.128299945592880243472322376874 0.0771676540374755803863848768742 +-0.00916810035705566475638939039072 -0.0772570013999939048110476846887 0.0628274977207183837890625 +-0.00916810035705566475638939039072 0.0772570013999939048110476846887 0.0628274977207183837890625 +-0.00915085002779960667018688269536 -0.048032701015472412109375 0.0104461498558521270751953125 +-0.00915085002779960667018688269536 0.048032701015472412109375 0.0104461498558521270751953125 +-0.00908724963665008544921875 -0.249401748180389404296875 -0.0147040002048015594482421875 +-0.00908724963665008544921875 0.249401748180389404296875 -0.0147040002048015594482421875 +-0.00907474979758262668971813269536 -0.0148000001907348643220840855861 0.04688934981822967529296875 +-0.00907474979758262668971813269536 0.0148000001907348643220840855861 0.04688934981822967529296875 +-0.00906310006976127589817249230464 -0.014741100370883941650390625 0.0984914004802703857421875 +-0.00906310006976127589817249230464 0.014741100370883941650390625 0.0984914004802703857421875 +-0.00906035006046295235404564039072 -0.006582699716091156005859375 -0.0487296491861343439300213731258 +-0.00906035006046295235404564039072 0.006582699716091156005859375 -0.0487296491861343439300213731258 +-0.00905880033969879219779564039072 -0.00658160001039505022230047259768 -0.0993710994720459067641726846887 +-0.00905880033969879219779564039072 0.00658160001039505022230047259768 -0.0993710994720459067641726846887 +-0.00901205018162727460040439808608 -0.0277367502450943000102956403907 -0.0406134486198425348479901231258 +-0.00901205018162727460040439808608 0.0277367502450943000102956403907 -0.0406134486198425348479901231258 +-0.008965999819338321685791015625 -0.348515987396240234375 -0.3584080040454864501953125 +-0.008965999819338321685791015625 0.348515987396240234375 -0.3584080040454864501953125 +-0.008914150297641754150390625 -0.0470371007919311578948651231258 -0.014423899352550506591796875 +-0.008914150297641754150390625 0.0470371007919311578948651231258 -0.014423899352550506591796875 +-0.00890880022197961841945446082036 -0.267521703243255581927684261245 0.135472503304481489694310880623 +-0.00890880022197961841945446082036 0.267521703243255581927684261245 0.135472503304481489694310880623 +-0.00890749990940094098224033558608 -0.0446462512016296414474325615629 -0.020672850310802459716796875 +-0.00890749990940094098224033558608 0.0446462512016296414474325615629 -0.020672850310802459716796875 +-0.0088563002645969390869140625 -0.0702305018901824978927450615629 -0.0706345975399017417251101846887 +-0.0088563002645969390869140625 0.0702305018901824978927450615629 -0.0706345975399017417251101846887 +-0.00878344997763633693332874230464 -0.0270321995019912747482138115629 0.0411352992057800320724325615629 +-0.00878344997763633693332874230464 0.0270321995019912747482138115629 0.0411352992057800320724325615629 +-0.00877915024757385323295189039072 -0.0162430003285408026958425153907 -0.0464659988880157526214276231258 +-0.00877915024757385323295189039072 0.0162430003285408026958425153907 -0.0464659988880157526214276231258 +-0.008771999739110469818115234375 -0.249229252338409423828125 0.01754424907267093658447265625 +-0.008771999739110469818115234375 0.249229252338409423828125 0.01754424907267093658447265625 +-0.00876379981637001072292125769536 -0.0485707014799118055869975307814 -0.086971700191497802734375 +-0.00876379981637001072292125769536 0.0485707014799118055869975307814 -0.086971700191497802734375 +-0.00870869979262352093829502308608 -0.0374890506267547621299662807814 -0.0319175511598587050010600307814 +-0.00870869979262352093829502308608 0.0374890506267547621299662807814 -0.0319175511598587050010600307814 +-0.00866190027445554698581897667964 -0.112144497036933896150223688437 0.64019410312175750732421875 +-0.00866190027445554698581897667964 0.112144497036933896150223688437 0.64019410312175750732421875 +-0.0086505003273487091064453125 -0.02662325091660022735595703125 0.24842774868011474609375 +-0.0086505003273487091064453125 0.02662325091660022735595703125 0.24842774868011474609375 +-0.00861510001122951438179420335928 -0.0911393970251083290756710653113 -0.285691201686859130859375 +-0.00861510001122951438179420335928 0.0911393970251083290756710653113 -0.285691201686859130859375 +-0.008596000261604785919189453125 -0.327896794676780678479133257497 -0.6183926165103912353515625 +-0.008596000261604785919189453125 0.327896794676780678479133257497 -0.6183926165103912353515625 +-0.00855719968676567181720127308608 -0.0461938500404357951789613423443 0.0171143501996994032432475307814 +-0.00855719968676567181720127308608 0.0461938500404357951789613423443 0.0171143501996994032432475307814 +-0.00854599997401237453098499230464 -0.02630279958248138427734375 -0.399042797088623057977230246252 +-0.00854599997401237453098499230464 0.02630279958248138427734375 -0.399042797088623057977230246252 +-0.00852560028433799708957874230464 -0.0262398004531860379318075615629 -0.198087799549102799856470369377 +-0.00852560028433799708957874230464 0.0262398004531860379318075615629 -0.198087799549102799856470369377 +-0.008503249846398830413818359375 -0.13419449329376220703125 -0.2107592523097991943359375 +-0.008503249846398830413818359375 0.13419449329376220703125 -0.2107592523097991943359375 +-0.00847660005092620849609375 -0.103593003749847423211605246252 0.170870196819305431024105246252 +-0.00847660005092620849609375 0.103593003749847423211605246252 0.170870196819305431024105246252 +-0.00844419971108436619167125769536 -0.0259889006614685072471537807814 -0.0961938977241516141036825615629 +-0.00844419971108436619167125769536 0.0259889006614685072471537807814 -0.0961938977241516141036825615629 +-0.008420749567449092864990234375 -0.2448565065860748291015625 0.049743749201297760009765625 +-0.008420749567449092864990234375 0.2448565065860748291015625 0.049743749201297760009765625 +-0.00841019973158836468829502308608 -0.002032049931585788726806640625 0.04924570024013519287109375 +-0.00841019973158836468829502308608 0.002032049931585788726806640625 0.04924570024013519287109375 +-0.00839040018618106807346546105464 -0.00609600003808736818494695697268 0.149641048908233625924779630623 +-0.00839040018618106807346546105464 0.00609600003808736818494695697268 0.149641048908233625924779630623 +-0.00836319997906684840793811730464 -0.179279601573944097347990123126 -0.0882543981075286920745526231258 +-0.00836319997906684840793811730464 0.179279601573944097347990123126 -0.0882543981075286920745526231258 +-0.0083369500935077667236328125 -0.00605709999799728445596391779304 0.0489265501499176053146200615629 +-0.0083369500935077667236328125 0.00605709999799728445596391779304 0.0489265501499176053146200615629 +-0.00832740012556314364300380503892 -0.0902243971824645968338174384371 -0.119541746377944943513504938437 +-0.00832740012556314364300380503892 0.0902243971824645968338174384371 -0.119541746377944943513504938437 +-0.00832644999027252162571155480464 -0.0434860497713089044768963731258 0.0232299998402595540836212961722 +-0.00832644999027252162571155480464 0.0434860497713089044768963731258 0.0232299998402595540836212961722 +-0.00828889980912208591823375769536 -0.0386725008487701429893412807814 0.0918461978435516357421875 +-0.00828889980912208591823375769536 0.0386725008487701429893412807814 0.0918461978435516357421875 +-0.00827879980206489528293811730464 -0.233884000778198264391960492503 0.324391198158264171258480246252 +-0.00827879980206489528293811730464 0.233884000778198264391960492503 0.324391198158264171258480246252 +-0.008207499980926513671875 -0.18633325397968292236328125 -0.16647075116634368896484375 +-0.008207499980926513671875 0.18633325397968292236328125 -0.16647075116634368896484375 +-0.00814679972827434505100452355464 -0.103844699263572690095536188437 0.2813360989093780517578125 +-0.00814679972827434505100452355464 0.103844699263572690095536188437 0.2813360989093780517578125 +-0.00812280029058456455592907019536 -0.0249997496604919440532643903907 -0.0425327003002166775802450615629 +-0.00812280029058456455592907019536 0.0249997496604919440532643903907 -0.0425327003002166775802450615629 +-0.00809165025129914179669032847642 -0.274206459522247314453125 0.217360156774520862921207253748 +-0.00809165025129914179669032847642 0.274206459522247314453125 0.217360156774520862921207253748 +-0.00806939983740448917026721886714 -0.313664388656616222039730246252 -0.322567203640937827380241742503 +-0.00806939983740448917026721886714 0.313664388656616222039730246252 -0.322567203640937827380241742503 +-0.008066999725997447967529296875 -0.825170993804931640625 0.56482601165771484375 +-0.008066999725997447967529296875 0.825170993804931640625 0.56482601165771484375 +-0.0080128498375415802001953125 -0.0180793002247810370708425153907 0.04592309892177581787109375 +-0.0080128498375415802001953125 0.0180793002247810370708425153907 0.04592309892177581787109375 +-0.00799845010042190586452282019536 -0.00329939983785152443976351754884 -0.04924570024013519287109375 +-0.00799845010042190586452282019536 0.00329939983785152443976351754884 -0.04924570024013519287109375 +-0.00799560025334358250026500769536 -0.103517997264862063322432561563 0.590948402881622314453125 +-0.00799560025334358250026500769536 0.103517997264862063322432561563 0.590948402881622314453125 +-0.0079898498952388763427734375 -0.03789649903774261474609375 0.03162305057048797607421875 +-0.0079898498952388763427734375 0.03789649903774261474609375 0.03162305057048797607421875 +-0.0079820002429187297821044921875 -0.304475595057010661736995871252 -0.57422171533107757568359375 +-0.0079820002429187297821044921875 0.304475595057010661736995871252 -0.57422171533107757568359375 +-0.007964500226080417633056640625 -0.23610775172710418701171875 0.081790499389171600341796875 +-0.007964500226080417633056640625 0.23610775172710418701171875 0.081790499389171600341796875 +-0.00793699994683265755424095289072 -0.0351989001035690335372763115629 -0.0346127510070800767372212192186 +-0.00793699994683265755424095289072 0.0351989001035690335372763115629 -0.0346127510070800767372212192186 +-0.00793019980192184552325596058608 -0.189564204216003423519865123126 -0.06326580047607421875 +-0.00793019980192184552325596058608 0.189564204216003423519865123126 -0.06326580047607421875 +-0.00791850015521049395428310191392 -0.103227746486663815583817438437 0.10854180157184600830078125 +-0.00791850015521049395428310191392 0.103227746486663815583817438437 0.10854180157184600830078125 +-0.00784590020775795086993564808608 -0.0996917009353637806334802462516 0 +-0.00784590020775795086993564808608 0.0996917009353637806334802462516 0 +-0.0078217498958110809326171875 -0.04938440024852752685546875 0 +-0.0078217498958110809326171875 0.04938440024852752685546875 0 +-0.00776669979095459019069469519536 -0.0131328999996185302734375 -0.0476152002811431884765625 +-0.00776669979095459019069469519536 0.0131328999996185302734375 -0.0476152002811431884765625 +-0.00769779980182647757119829279304 -0.0303736001253128058696706403907 0.0389639496803283746917401231258 +-0.00769779980182647757119829279304 0.0303736001253128058696706403907 0.0389639496803283746917401231258 +-0.00766364973969757556915283203125 -0.783912444114684969775908029987 0.536584711074829079358039507497 +-0.00766364973969757556915283203125 0.783912444114684969775908029987 0.536584711074829079358039507497 +-0.007637999951839447021484375 -0.23722599446773529052734375 -0.971424996852874755859375 +-0.007637999951839447021484375 0.23722599446773529052734375 -0.971424996852874755859375 +-0.00763769969344139151162798029304 -0.0816227972507476834396200615629 0.0572660028934478815276776231258 +-0.00763769969344139151162798029304 0.0816227972507476834396200615629 0.0572660028934478815276776231258 +-0.007633499801158905029296875 -0.0924302995204925592620526231258 -0.0373948007822036757041850307814 +-0.007633499801158905029296875 0.0924302995204925592620526231258 -0.0373948007822036757041850307814 +-0.00761040002107620308646751539072 -0.14754140377044677734375 0.134809601306915299856470369377 +-0.00761040002107620308646751539072 0.14754140377044677734375 0.134809601306915299856470369377 +-0.00755375027656555227822954279304 -0.0490741491317749078948651231258 -0.00588789992034435306911266394536 +-0.00755375027656555227822954279304 0.0490741491317749078948651231258 -0.00588789992034435306911266394536 +-0.00755200013518333469753063269536 -0.196296596527099631579460492503 -0.0375582009553909329513388115629 +-0.00755200013518333469753063269536 0.196296596527099631579460492503 -0.0375582009553909329513388115629 +-0.007523000240325927734375 -0.0865867972373962485610476846887 -0.04945839941501617431640625 +-0.007523000240325927734375 0.0865867972373962485610476846887 -0.04945839941501617431640625 +-0.00750349983572959951944048029304 -0.0628306984901428194900674384371 0.0774338006973266657073651231258 +-0.00750349983572959951944048029304 0.0628306984901428194900674384371 0.0774338006973266657073651231258 +-0.00747774997726082749777143376946 -0.02301494963467121124267578125 -0.349162447452545154913394753748 +-0.00747774997726082749777143376946 0.02301494963467121124267578125 -0.349162447452545154913394753748 +-0.007455999962985515594482421875 -0.4082809984683990478515625 0.912826001644134521484375 +-0.007455999962985515594482421875 0.4082809984683990478515625 0.912826001644134521484375 +-0.00743784978985786472682750769536 -0.04894255101680755615234375 0.00702160000801086477822954279304 +-0.00743784978985786472682750769536 0.04894255101680755615234375 0.00702160000801086477822954279304 +-0.0074240001849830150604248046875 -0.2229347527027130126953125 0.112893752753734588623046875 +-0.0074240001849830150604248046875 0.2229347527027130126953125 0.112893752753734588623046875 +-0.00736800022423267364501953125 -0.281054395437240589483707253748 -0.530050814151763916015625 +-0.00736800022423267364501953125 0.281054395437240589483707253748 -0.530050814151763916015625 +-0.00733989998698234610147173029304 -0.0966642975807189969161825615629 -0.0245387002825737006450612653907 +-0.00733989998698234610147173029304 0.0966642975807189969161825615629 -0.0245387002825737006450612653907 +-0.00733425021171569754829810960928 -0.0549034506082534748405699076557 -0.139397996664047230108707253748 +-0.00733425021171569754829810960928 0.0549034506082534748405699076557 -0.139397996664047230108707253748 +-0.00732930023223161714734930072268 -0.0948914974927902304946414346887 0.54170270264148712158203125 +-0.00732930023223161714734930072268 0.0948914974927902304946414346887 0.54170270264148712158203125 +-0.00728095024824142525443626539072 -0.00937144979834556544895374230464 0.0485711991786956787109375 +-0.00728095024824142525443626539072 0.00937144979834556544895374230464 0.0485711991786956787109375 +-0.007269799709320068359375 -0.199521398544311528988615123126 -0.01176320016384124755859375 +-0.007269799709320068359375 0.199521398544311528988615123126 -0.01176320016384124755859375 +-0.0072602997533977031707763671875 -0.742653894424438520971420985006 0.508343410491943425988381477509 +-0.0072602997533977031707763671875 0.742653894424438520971420985006 0.508343410491943425988381477509 +-0.00725609995424747467041015625 -0.225364694744348503796516069997 -0.922853747010230929248564279987 +-0.00725609995424747467041015625 0.225364694744348503796516069997 -0.922853747010230929248564279987 +-0.00725240036845207266397173029304 -0.0990438997745513999282351846887 -0.011734999716281890869140625 +-0.00725240036845207266397173029304 0.0990438997745513999282351846887 -0.011734999716281890869140625 +-0.00724680013954639382772748845696 -0.0420473992824554401726011576557 0.143803650140762323550447376874 +-0.00724680013954639382772748845696 0.0420473992824554401726011576557 0.143803650140762323550447376874 +-0.00724394982680678315573041814446 -0.204648500680923439709602007497 0.283842298388481129034488503748 +-0.00724394982680678315573041814446 0.204648500680923439709602007497 0.283842298388481129034488503748 +-0.00724269971251487783975298029304 -0.0401505500078201335578675923443 0.0289046496152877835372763115629 +-0.00724269971251487783975298029304 0.0401505500078201335578675923443 0.0289046496152877835372763115629 +-0.00722725018858909676322532789072 -0.0460958987474441583831463731258 -0.0179703995585441603233256557814 +-0.00722725018858909676322532789072 0.0460958987474441583831463731258 -0.0179703995585441603233256557814 +-0.00722159966826438955850298029304 -0.0653491973876953180511151231258 -0.0753480970859527615646200615629 +-0.00722159966826438955850298029304 0.0653491973876953180511151231258 -0.0753480970859527615646200615629 +-0.00721829999238252605076038292964 -0.118516203761100766267411188437 -0.0916613996028900063217648153113 +-0.00721829999238252605076038292964 0.118516203761100766267411188437 -0.0916613996028900063217648153113 +-0.00719460025429725664319891009768 -0.0221431002020835883403737653907 -0.0442483991384506267219300923443 +-0.00719460025429725664319891009768 0.0221431002020835883403737653907 -0.0442483991384506267219300923443 +-0.00718305036425590567178423029304 -0.0480969011783599909026776231258 -0.0116227999329566959035853201954 +-0.00718305036425590567178423029304 0.0480969011783599909026776231258 -0.0116227999329566959035853201954 +-0.007179250009357929229736328125 -0.075949497520923614501953125 -0.2380760014057159423828125 +-0.007179250009357929229736328125 0.075949497520923614501953125 -0.2380760014057159423828125 +-0.00717279985547065752210516009768 -0.278812789916992209704460492503 -0.286726403236389149054019753748 +-0.00717279985547065752210516009768 0.278812789916992209704460492503 -0.286726403236389149054019753748 +-0.00716560035943985054740501539072 -0.0328307509422302232215962192186 -0.0370242506265640244911274692186 +-0.00716560035943985054740501539072 0.0328307509422302232215962192186 -0.0370242506265640244911274692186 +-0.00715370029211044328870672259768 -0.0432463496923446710784588731258 -0.024053700268268585205078125 +-0.00715370029211044328870672259768 0.0432463496923446710784588731258 -0.024053700268268585205078125 +-0.00708319996483623964128595318357 -0.387866948544979051050063389994 0.867184701561927728796774772491 +-0.00708319996483623964128595318357 0.387866948544979051050063389994 0.867184701561927728796774772491 +-0.00702599994838237762451171875 -0.862664997577667236328125 -0.5057280063629150390625 +-0.00702599994838237762451171875 0.862664997577667236328125 -0.5057280063629150390625 +-0.00701759979128837620143688269536 -0.199383401870727561266960492503 0.0140353992581367503084122105861 +-0.00701759979128837620143688269536 0.199383401870727561266960492503 0.0140353992581367503084122105861 +-0.00699609965085983345756126539072 -0.0987688004970550537109375 0.0139920994639396670949915701954 +-0.00699609965085983345756126539072 0.0987688004970550537109375 0.0139920994639396670949915701954 +-0.00693570021539926476888959783196 -0.23503410816192626953125 0.186308705806732172183259876874 +-0.00693570021539926476888959783196 0.23503410816192626953125 0.186308705806732172183259876874 +-0.00692159980535507219495672259768 -0.02130199968814849853515625 0.0974592983722686878600427462516 +-0.00692159980535507219495672259768 0.02130199968814849853515625 0.0974592983722686878600427462516 +-0.00692040026187896745862859759768 -0.0212986007332801839664337961722 0.198742198944091813528345369377 +-0.00692040026187896745862859759768 0.0212986007332801839664337961722 0.198742198944091813528345369377 +-0.00691410005092620884303844519536 0 -0.0997606992721557644943075615629 +-0.00690995007753372227077282019536 -0.04755274951457977294921875 0.0138198494911193851125696951954 +-0.00690995007753372227077282019536 0.04755274951457977294921875 0.0138198494911193851125696951954 +-0.00690985023975372331800359759768 -0.0212659493088722256759481865629 0.04472149908542633056640625 +-0.00690985023975372331800359759768 0.0212659493088722256759481865629 0.04472149908542633056640625 +-0.00689759999513626150674516779304 0 -0.0495219498872756999641175923443 +-0.0068741999566555023193359375 -0.213503395020961772576839621252 -0.874282497167587324682358485006 +-0.0068741999566555023193359375 0.213503395020961772576839621252 -0.874282497167587324682358485006 +-0.00686390027403831551322532789072 -0.04271300137042999267578125 -0.0901580989360809409438601846887 +-0.00686390027403831551322532789072 0.04271300137042999267578125 -0.0901580989360809409438601846887 +-0.00685694976709783077239990234375 -0.701395344734191850122329014994 0.480102109909057606085269753748 +-0.00685694976709783077239990234375 0.701395344734191850122329014994 0.480102109909057606085269753748 +-0.0068025998771190643310546875 -0.107355594635009765625 -0.168607401847839372122095369377 +-0.0068025998771190643310546875 0.107355594635009765625 -0.168607401847839372122095369377 +-0.00678929984569549577894109759768 -0.0961187005043029896178552462516 0.0267412990331649808029013115629 +-0.00678929984569549577894109759768 0.0961187005043029896178552462516 0.0267412990331649808029013115629 +-0.006788999773561954498291015625 -0.086537249386310577392578125 0.23444674909114837646484375 +-0.006788999773561954498291015625 0.086537249386310577392578125 0.23444674909114837646484375 +-0.0067540002055466183752963083009 -0.257633195817470572741569867503 -0.485879912972450311858807481258 +-0.0067540002055466183752963083009 0.257633195817470572741569867503 -0.485879912972450311858807481258 +-0.00674889981746673583984375 -0.0452914506196975749641175923443 0.0200782999396324178531525461722 +-0.00674889981746673583984375 0.0452914506196975749641175923443 0.0200782999396324178531525461722 +-0.00673659965395927498588157789072 -0.195885205268859885485710492503 0.0397949993610382107833700615629 +-0.00673659965395927498588157789072 0.195885205268859885485710492503 0.0397949993610382107833700615629 +-0.00671039996668696455545122248054 -0.367452898621559165270866742503 0.821543401479721047131477007497 +-0.00671039996668696455545122248054 0.367452898621559165270866742503 0.821543401479721047131477007497 +-0.0066746999509632587432861328125 -0.819531747698783785693876779987 -0.480441606044769264904914507497 +-0.0066746999509632587432861328125 0.819531747698783785693876779987 -0.480441606044769264904914507497 +-0.00666300021111965179443359375 -0.0862649977207183837890625 0.4924570024013519287109375 +-0.00666300021111965179443359375 0.0862649977207183837890625 0.4924570024013519287109375 +-0.00666285008192062447318626539072 -0.00982050001621246476668503078145 -0.0485711991786956787109375 +-0.00666285008192062447318626539072 0.00982050001621246476668503078145 -0.0485711991786956787109375 +-0.00662650018930435215358532019536 -0.091624200344085693359375 0.03951080143451690673828125 +-0.00662650018930435215358532019536 0.091624200344085693359375 0.03951080143451690673828125 +-0.00659390017390251194362438269536 -0.0334802985191345256477113423443 0.0365456998348236070106587192186 +-0.00659390017390251194362438269536 0.0334802985191345256477113423443 0.0365456998348236070106587192186 +-0.006570599973201751708984375 -0.0415404498577117975433026231258 -0.0270410507917404202560263115629 +-0.006570599973201751708984375 0.0415404498577117975433026231258 -0.0270410507917404202560263115629 +-0.00656599998474121163138939039072 -0.149066603183746343441740123126 -0.133176600933074956722990123126 +-0.00656599998474121163138939039072 0.149066603183746343441740123126 -0.133176600933074956722990123126 +-0.00649229995906352996826171875 -0.201642095297574985846011941248 -0.825711247324943498071547764994 +-0.00649229995906352996826171875 0.201642095297574985846011941248 -0.825711247324943498071547764994 +-0.00645785033702850341796875 -0.0421953499317169189453125 0.0260355502367019681075888115629 +-0.00645785033702850341796875 0.0421953499317169189453125 0.0260355502367019681075888115629 +-0.0064535997807979583740234375 -0.660136795043945401317841970013 0.451860809326171897204460492503 +-0.0064535997807979583740234375 0.660136795043945401317841970013 0.451860809326171897204460492503 +-0.00640949998050928133191961322268 -0.0197270996868610382080078125 -0.299282097816467251849559261245 +-0.00640949998050928133191961322268 0.0197270996868610382080078125 -0.299282097816467251849559261245 +-0.00639420021325349825086492572268 -0.0196798503398895249794087192186 -0.148565849661827092953458873126 +-0.00639420021325349825086492572268 0.0196798503398895249794087192186 -0.148565849661827092953458873126 +-0.00637160018086433462686235529304 -0.188886201381683355160490123126 0.0654323995113372802734375 +-0.00637160018086433462686235529304 0.188886201381683355160490123126 0.0654323995113372802734375 +-0.00636869966983795183362859759768 -0.01960130035877227783203125 -0.0978531002998352106292401231258 +-0.00636869966983795183362859759768 0.01960130035877227783203125 -0.0978531002998352106292401231258 +-0.0063574500381946563720703125 -0.0776947528123855535309161268742 0.128152647614479059390291126874 +-0.0063574500381946563720703125 0.0776947528123855535309161268742 0.128152647614479059390291126874 +-0.00633759996853768773489301580071 -0.347038848698139168469367632497 0.775902101397514365466179242503 +-0.00633759996853768773489301580071 0.347038848698139168469367632497 0.775902101397514365466179242503 +-0.0063335001468658447265625 -0.030286848545074462890625 -0.03927589952945709228515625 +-0.0063335001468658447265625 0.030286848545074462890625 -0.03927589952945709228515625 +-0.00632740035653114353542125769536 -0.0830354988574981689453125 -0.0553631007671356242805238423443 +-0.00632740035653114353542125769536 0.0830354988574981689453125 -0.0553631007671356242805238423443 +-0.006323399953544139862060546875 -0.776398497819900557104233485006 -0.455155205726623546258480246252 +-0.006323399953544139862060546875 0.776398497819900557104233485006 -0.455155205726623546258480246252 +-0.00631529986858367971963579279304 -0.0448253989219665541221537807814 0.0891673028469085748870526231258 +-0.00631529986858367971963579279304 0.0448253989219665541221537807814 0.0891673028469085748870526231258 +-0.00628414973616600071315563269536 -0.0127588003873825087119975307814 0.0479345500469207791427450615629 +-0.00628414973616600071315563269536 0.0127588003873825087119975307814 0.0479345500469207791427450615629 +-0.00627619987353682500658136333982 -0.243961191177368141858039507497 -0.250885602831840526238948996252 +-0.00627619987353682500658136333982 0.243961191177368141858039507497 -0.250885602831840526238948996252 +-0.00627239998430013673963445697268 -0.134459701180458052194310880623 -0.0661907985806465121170205634371 +-0.00627239998430013673963445697268 0.134459701180458052194310880623 -0.0661907985806465121170205634371 +-0.00623200014233589189710516009768 -0.0191805005073547377159037807814 -0.0457522511482238783409037807814 +-0.00623200014233589189710516009768 0.0191805005073547377159037807814 -0.0457522511482238783409037807814 +-0.00620909985154867189588445697268 -0.175413000583648670538394753748 0.243293398618698114566072376874 +-0.00620909985154867189588445697268 0.175413000583648670538394753748 0.243293398618698114566072376874 +-0.006140000186860561370849609375 -0.23421199619770050048828125 -0.4417090117931365966796875 +-0.006140000186860561370849609375 0.23421199619770050048828125 -0.4417090117931365966796875 +-0.00612119995057582889919078894536 -0.0855332970619201715667401231258 0.0514451026916503961761151231258 +-0.00612119995057582889919078894536 0.0855332970619201715667401231258 0.0514451026916503961761151231258 +-0.0061103999614715576171875 -0.189780795574188254626335492503 -0.777139997482299893505341970013 +-0.0061103999614715576171875 0.189780795574188254626335492503 -0.777139997482299893505341970013 +-0.00605024979449808597564697265625 -0.61887824535369873046875 0.4236195087432861328125 +-0.00605024979449808597564697265625 0.61887824535369873046875 0.4236195087432861328125 +-0.00599670019000768644151788677732 -0.0776384979486465509612713731258 0.44321130216121673583984375 +-0.00599670019000768644151788677732 0.0776384979486465509612713731258 0.44321130216121673583984375 +-0.0059720999561250209808349609375 -0.733265247941017106469985264994 -0.429868805408477772100894753748 +-0.0059720999561250209808349609375 0.733265247941017106469985264994 -0.429868805408477772100894753748 +-0.00596479997038841264905828509768 -0.326624798774719282690170985006 0.730260801315307683800881477509 +-0.00596479997038841264905828509768 0.326624798774719282690170985006 0.730260801315307683800881477509 +-0.00595555007457733171644109759768 -0.0396322488784790066818075615629 -0.02989675104618072509765625 +-0.00595555007457733171644109759768 0.0396322488784790066818075615629 -0.02989675104618072509765625 +-0.00594764985144138284139936345696 -0.142173153162002546823217130623 -0.0474493503570556640625 +-0.00594764985144138284139936345696 0.142173153162002546823217130623 -0.0474493503570556640625 +-0.00593920014798641256875688654304 -0.178347802162170415707365123126 0.0903150022029876736739950615629 +-0.00593920014798641256875688654304 0.178347802162170415707365123126 0.0903150022029876736739950615629 +-0.00589405000209808349609375 -0.0248217493295669576480744211722 0.0430016487836837810188050923443 +-0.00589405000209808349609375 0.0248217493295669576480744211722 0.0430016487836837810188050923443 +-0.0057797501794993877410888671875 -0.195861756801605224609375 0.1552572548389434814453125 +-0.0057797501794993877410888671875 0.195861756801605224609375 0.1552572548389434814453125 +-0.00574340000748634407767845289072 -0.0607595980167388929893412807814 -0.19046080112457275390625 +-0.00574340000748634407767845289072 0.0607595980167388929893412807814 -0.19046080112457275390625 +-0.00573889985680580208549095289072 -0.0495824009180068983604350307814 -0.00294139999896287935438055072268 +-0.00573889985680580208549095289072 0.0495824009180068983604350307814 -0.00294139999896287935438055072268 +-0.00572849996387958526611328125 -0.1779194958508014678955078125 -0.72856874763965606689453125 +-0.00572849996387958526611328125 0.1779194958508014678955078125 -0.72856874763965606689453125 +-0.00570780001580715144748889855464 -0.1106560528278350830078125 0.101107200980186454075671065311 +-0.00570780001580715144748889855464 0.1106560528278350830078125 0.101107200980186454075671065311 +-0.00567910000681877153577703509768 -0.0495523005723953260948100307814 0.00350989997386932407741344519536 +-0.00567910000681877153577703509768 0.0495523005723953260948100307814 0.00350989997386932407741344519536 +-0.00566400010138750058946710552732 -0.147222447395324695929019753748 -0.0281686507165431962440571567186 +-0.00566400010138750058946710552732 0.147222447395324695929019753748 -0.0281686507165431962440571567186 +-0.0056468998081982135772705078125 -0.577619695663452059619658029987 0.395378208160400368420539507497 +-0.0056468998081982135772705078125 0.577619695663452059619658029987 0.395378208160400368420539507497 +-0.005620799958705902099609375 -0.690131998062133877880341970013 -0.404582405090332053454460492503 +-0.005620799958705902099609375 0.690131998062133877880341970013 -0.404582405090332053454460492503 +-0.00560954995453357731227672644536 -0.00658735036849975637979204279304 -0.04924570024013519287109375 +-0.00560954995453357731227672644536 0.00658735036849975637979204279304 -0.04924570024013519287109375 +-0.00559870004653930698756969519536 0 0.0496855497360229533820863423443 +-0.00559360012412071262721813269536 -0.00406400002539157850084405865232 0.0997606992721557644943075615629 +-0.00559360012412071262721813269536 0.00406400002539157850084405865232 0.0997606992721557644943075615629 +-0.00559199997223913669586181640625 -0.306210748851299285888671875 0.68461950123310089111328125 +-0.00559199997223913669586181640625 0.306210748851299285888671875 0.68461950123310089111328125 +-0.0055802501738071441650390625 -0.00405424982309341482705766779304 0.0495219498872756999641175923443 +-0.0055802501738071441650390625 0.00405424982309341482705766779304 0.0495219498872756999641175923443 +-0.00555160008370876329603094134768 -0.0601495981216430691818075615629 -0.0796944975852966336349325615629 +-0.00555160008370876329603094134768 0.0601495981216430691818075615629 -0.0796944975852966336349325615629 +-0.0055260001681745052337646484375 -0.210790796577930455990568248126 -0.39753811061382293701171875 +-0.0055260001681745052337646484375 0.210790796577930455990568248126 -0.39753811061382293701171875 +-0.00551785007119178806667125769536 -0.0473098486661911038497763115629 -0.0152095496654510511924662807814 +-0.00551785007119178806667125769536 0.0473098486661911038497763115629 -0.0152095496654510511924662807814 +-0.00549860000610351631888939039072 -0.0448399007320404094367738423443 -0.0214276999235153212119975307814 +-0.00549860000610351631888939039072 0.0448399007320404094367738423443 -0.0214276999235153212119975307814 +-0.00546615011990070343017578125 -0.0276224493980407742599325615629 -0.0413173496723175104339276231258 +-0.00546615011990070343017578125 0.0276224493980407742599325615629 -0.0413173496723175104339276231258 +-0.00545234978199005126953125 -0.149641048908233625924779630623 -0.0088224001228809356689453125 +-0.00545234978199005126953125 0.149641048908233625924779630623 -0.0088224001228809356689453125 +-0.00543119981884956394557750769536 -0.0692297995090484646896200615629 0.187557399272918701171875 +-0.00543119981884956394557750769536 0.0692297995090484646896200615629 0.187557399272918701171875 +-0.00541759990155696920938188654304 -0.0489264994859695476203675923443 -0.00876614972949027980442249230464 +-0.00541759990155696920938188654304 0.0489264994859695476203675923443 -0.00876614972949027980442249230464 +-0.00537959989160299249105756658196 -0.209109592437744129522769753748 -0.215044802427291875668302623126 +-0.00537959989160299249105756658196 0.209109592437744129522769753748 -0.215044802427291875668302623126 +-0.0053465999662876129150390625 -0.166058196127414681164680132497 -0.679997497797012240283720529987 +-0.0053465999662876129150390625 0.166058196127414681164680132497 -0.679997497797012240283720529987 +-0.0053412499837577342987060546875 -0.01643924973905086517333984375 -0.249401748180389404296875 +-0.0053412499837577342987060546875 0.01643924973905086517333984375 -0.249401748180389404296875 +-0.00533110015094280260267156634768 -0.0362646490335464463661274692186 0.0340066492557525648643412807814 +-0.00533110015094280260267156634768 0.0362646490335464463661274692186 0.0340066492557525648643412807814 +-0.00533040016889572195596391779304 -0.0690119981765747042556924384371 0.39396560192108154296875 +-0.00533040016889572195596391779304 0.0690119981765747042556924384371 0.39396560192108154296875 +-0.00527900010347366350355047259768 -0.0688184976577758816818075615629 0.0723612010478973388671875 +-0.00527900010347366350355047259768 0.0688184976577758816818075615629 0.0723612010478973388671875 +-0.0052694999612867832183837890625 -0.64699874818325042724609375 -0.379296004772186279296875 +-0.0052694999612867832183837890625 0.64699874818325042724609375 -0.379296004772186279296875 +-0.00526319984346628171739679302732 -0.149537551403045643194644753748 0.0105265494436025622976282889454 +-0.00526319984346628171739679302732 0.149537551403045643194644753748 0.0105265494436025622976282889454 +-0.00524354982189834117889404296875 -0.536361145973205610815170985006 0.367136907577514659539730246252 +-0.00524354982189834117889404296875 0.536361145973205610815170985006 0.367136907577514659539730246252 +-0.00523959994316101126260454279304 -0.0161260500550270101383087961722 -0.04703719913959503173828125 +-0.00523959994316101126260454279304 0.0161260500550270101383087961722 -0.04703719913959503173828125 +-0.0052335001528263092041015625 -0.0161068007349967970420756557814 0.0470444500446319593955912807814 +-0.0052335001528263092041015625 0.0161068007349967970420756557814 0.0470444500446319593955912807814 +-0.00522004999220371246337890625 -0.04861845076084136962890625 0.0104401499032974257041850307814 +-0.00522004999220371246337890625 0.04861845076084136962890625 0.0104401499032974257041850307814 +-0.00521919997408986074266534771482 -0.285796698927879289087172764994 0.638978201150894098425681022491 +-0.00521919997408986074266534771482 0.285796698927879289087172764994 0.638978201150894098425681022491 +-0.00520544983446598070325750384768 -0.0374715507030487088302450615629 -0.0326923489570617661903462192186 +-0.00520544983446598070325750384768 0.0374715507030487088302450615629 -0.0326923489570617661903462192186 +-0.00519030019640922494345014470696 -0.0159739505499601371074636091407 0.149056649208068853207365123126 +-0.00519030019640922494345014470696 0.0159739505499601371074636091407 0.149056649208068853207365123126 +-0.0051742498762905597686767578125 -0.1461775004863739013671875 0.20274449884891510009765625 +-0.0051742498762905597686767578125 0.1461775004863739013671875 0.20274449884891510009765625 +-0.00512470006942749092826439039072 -0.0468023985624313396125550923443 0.016830749809741973876953125 +-0.00512470006942749092826439039072 0.0468023985624313396125550923443 0.016830749809741973876953125 +-0.005101949907839298248291015625 -0.08051669597625732421875 -0.126455551385879522152677623126 +-0.005101949907839298248291015625 0.08051669597625732421875 -0.126455551385879522152677623126 +-0.00505244974046945537204944542964 -0.146913903951644886358707253748 0.0298462495207786546180805942186 +-0.00505244974046945537204944542964 0.146913903951644886358707253748 0.0298462495207786546180805942186 +-0.0050479997880756855010986328125 -0.92268002033233642578125 -0.385533988475799560546875 +-0.0050479997880756855010986328125 0.92268002033233642578125 -0.385533988475799560546875 +-0.00496469996869564056396484375 -0.154196896404027949945003683752 -0.631426247954368635717514735006 +-0.00496469996869564056396484375 0.154196896404027949945003683752 -0.631426247954368635717514735006 +-0.00492449998855590785618030480464 -0.111799952387809750642411188437 -0.0998824506998062106033486884371 +-0.00492449998855590785618030480464 0.111799952387809750642411188437 -0.0998824506998062106033486884371 +-0.004918199963867664337158203125 -0.603865498304366976611845529987 -0.354009604454040505139289507497 +-0.004918199963867664337158203125 0.603865498304366976611845529987 -0.354009604454040505139289507497 +-0.0049120001494884490966796875 -0.187369596958160411492855246252 -0.35336720943450927734375 +-0.0049120001494884490966796875 0.187369596958160411492855246252 -0.35336720943450927734375 +-0.00490084998309612326211626154304 -0.04414165019989013671875 0.0229672506451606764366069057814 +-0.00490084998309612326211626154304 0.04414165019989013671875 0.0229672506451606764366069057814 +-0.00488950014114379952201439039072 -0.0366023004055023234992738423443 -0.0929319977760315052428552462516 +-0.00488950014114379952201439039072 0.0366023004055023234992738423443 -0.0929319977760315052428552462516 +-0.00484639997594058565683061701179 -0.265382649004459403307976117503 0.593336901068687416760383257497 +-0.00484639997594058565683061701179 0.265382649004459403307976117503 0.593336901068687416760383257497 +-0.004840199835598468780517578125 -0.495102596282958939966079014994 0.338895606994628895147769753748 +-0.004840199835598468780517578125 0.495102596282958939966079014994 0.338895606994628895147769753748 +-0.00483894981443882057914329664072 -0.0282124012708663968185263115629 0.0409956514835357679893412807814 +-0.00483894981443882057914329664072 0.0282124012708663968185263115629 0.0409956514835357679893412807814 +-0.00483120009303093008584673029304 -0.0280315995216369635845143903907 0.0958691000938415582854901231258 +-0.00483120009303093008584673029304 0.0280315995216369635845143903907 0.0958691000938415582854901231258 +-0.00481219999492168461208141394536 -0.0790108025074005154708700615629 -0.0611075997352600111534037807814 +-0.00481219999492168461208141394536 0.0790108025074005154708700615629 -0.0611075997352600111534037807814 +-0.00479559979867190139951604876956 -0.876546019315719515674345529987 -0.366257289052009549212840511245 +-0.00479559979867190139951604876956 0.876546019315719515674345529987 -0.366257289052009549212840511245 +-0.00477870013564825075330633197268 -0.141664651036262495553685880623 0.049074299633502960205078125 +-0.00477870013564825075330633197268 0.141664651036262495553685880623 0.049074299633502960205078125 +-0.00466410014778375573568647283196 -0.0603854984045028644890074076557 0.34471990168094635009765625 +-0.00466410014778375573568647283196 0.0603854984045028644890074076557 0.34471990168094635009765625 +-0.00462380014359951071328813654304 -0.1566894054412841796875 0.124205803871154790707365123126 +-0.00462380014359951071328813654304 0.1566894054412841796875 0.124205803871154790707365123126 +-0.00458405017852783237819469519536 -0.0386285006999969524055238423443 0.03141374886035919189453125 +-0.00458405017852783237819469519536 0.0386285006999969524055238423443 0.03141374886035919189453125 +-0.004582799971103668212890625 -0.142335596680641163214176003748 -0.582854998111724809106704014994 +-0.004582799971103668212890625 0.142335596680641163214176003748 -0.582854998111724809106704014994 +-0.0045668999664485454559326171875 -0.560732248425483748022202235006 -0.328723204135894786492855246252 +-0.0045668999664485454559326171875 0.560732248425483748022202235006 -0.328723204135894786492855246252 +-0.00454319980926811729793346472661 -0.830412018299102827612045985006 -0.346980589628219593389957253748 +-0.00454319980926811729793346472661 0.830412018299102827612045985006 -0.346980589628219593389957253748 +-0.00453155003488063794908624615232 -0.0073705501854419708251953125 0.04924570024013519287109375 +-0.00453155003488063794908624615232 0.0073705501854419708251953125 0.04924570024013519287109375 +-0.00452940016984939609889782019536 -0.00329080000519752511115023629884 -0.0496855497360229533820863423443 +-0.00452940016984939609889782019536 0.00329080000519752511115023629884 -0.0496855497360229533820863423443 +-0.0044829999096691608428955078125 -0.1742579936981201171875 -0.17920400202274322509765625 +-0.0044829999096691608428955078125 0.1742579936981201171875 -0.17920400202274322509765625 +-0.00447359997779130883627241033196 -0.244968599081039406506477007497 0.547695600986480735095085492503 +-0.00447359997779130883627241033196 0.244968599081039406506477007497 0.547695600986480735095085492503 +-0.00445440011098980920972723041018 -0.133760851621627790963842130623 0.0677362516522407448471554403113 +-0.00445440011098980920972723041018 0.133760851621627790963842130623 0.0677362516522407448471554403113 +-0.00443684984929859638214111328125 -0.453844046592712435650440738755 0.310654306411743186266960492503 +-0.00443684984929859638214111328125 0.453844046592712435650440738755 0.310654306411743186266960492503 +-0.00442815013229846954345703125 -0.0351152509450912489463725307814 -0.0353172987699508708625550923443 +-0.00442815013229846954345703125 0.0351152509450912489463725307814 -0.0353172987699508708625550923443 +-0.00438189990818500536146062884768 -0.0242853507399559027934987653907 -0.0434858500957489013671875 +-0.00438189990818500536146062884768 0.0242853507399559027934987653907 -0.0434858500957489013671875 +-0.00430755000561475719089710167964 -0.0455696985125541645378355326557 -0.1428456008434295654296875 +-0.00430755000561475719089710167964 0.0455696985125541645378355326557 -0.1428456008434295654296875 +-0.0042980001308023929595947265625 -0.163948397338390339239566628748 -0.30919630825519561767578125 +-0.0042980001308023929595947265625 0.163948397338390339239566628748 -0.30919630825519561767578125 +-0.00429079981986433232898914269526 -0.784278017282485917505141514994 -0.327703890204429637567073996252 +-0.00429079981986433232898914269526 0.784278017282485917505141514994 -0.327703890204429637567073996252 +-0.00427299998700618726549249615232 -0.013151399791240692138671875 -0.199521398544311528988615123126 +-0.00427299998700618726549249615232 0.013151399791240692138671875 -0.199521398544311528988615123126 +-0.00426280014216899854478937115232 -0.0131199002265930189659037807814 -0.0990438997745513999282351846887 +-0.00426280014216899854478937115232 0.0131199002265930189659037807814 -0.0990438997745513999282351846887 +-0.004238300025463104248046875 -0.0517965018749237116058026231258 0.0854350984096527155120526231258 +-0.004238300025463104248046875 0.0517965018749237116058026231258 0.0854350984096527155120526231258 +-0.00422209985554218309583562884768 -0.0129944503307342536235768903907 -0.0480969488620758070518412807814 +-0.00422209985554218309583562884768 0.0129944503307342536235768903907 -0.0480969488620758070518412807814 +-0.00421559996902942657470703125 -0.517598998546600297387954014994 -0.303436803817749012335269753748 +-0.00421559996902942657470703125 0.517598998546600297387954014994 -0.303436803817749012335269753748 +-0.00420089997351169586181640625 -0.130474296957254431994499555003 -0.534283748269081204540498220013 +-0.00420089997351169586181640625 0.130474296957254431994499555003 -0.534283748269081204540498220013 +-0.00418159998953342420396905865232 -0.0896398007869720486739950615629 -0.0441271990537643460372763115629 +-0.00418159998953342420396905865232 0.0896398007869720486739950615629 -0.0441271990537643460372763115629 +-0.00414444990456104295911687884768 -0.0193362504243850714946706403907 0.04592309892177581787109375 +-0.00414444990456104295911687884768 0.0193362504243850714946706403907 0.04592309892177581787109375 +-0.00413939990103244764146905865232 -0.116942000389099132195980246252 0.162195599079132085629240123126 +-0.00413939990103244764146905865232 0.116942000389099132195980246252 0.162195599079132085629240123126 +-0.00410079997964203375043767962893 -0.224554549157619492971704744377 0.502054300904274053429787727509 +-0.00410079997964203375043767962893 0.224554549157619492971704744377 0.502054300904274053429787727509 +-0.00407339986413717252550226177732 -0.0519223496317863450477680942186 0.14066804945468902587890625 +-0.00407339986413717252550226177732 0.0519223496317863450477680942186 0.14066804945468902587890625 +-0.00403839983046054822740655865232 -0.738144016265869229442841970013 -0.308427190780639681744190738755 +-0.00403839983046054822740655865232 0.738144016265869229442841970013 -0.308427190780639681744190738755 +-0.0040334998629987239837646484375 -0.4125854969024658203125 0.282413005828857421875 +-0.0040334998629987239837646484375 0.4125854969024658203125 0.282413005828857421875 +-0.00399780012667179125013250384768 -0.0517589986324310316612162807814 0.2954742014408111572265625 +-0.00399780012667179125013250384768 0.0517589986324310316612162807814 0.2954742014408111572265625 +-0.00396509990096092276162798029304 -0.0947821021080017117599325615629 -0.031632900238037109375 +-0.00396509990096092276162798029304 0.0947821021080017117599325615629 -0.031632900238037109375 +-0.00392295010387897543496782404304 -0.0498458504676818903167401231258 0 +-0.00392295010387897543496782404304 0.0498458504676818903167401231258 0 +-0.0038642999716103081271623143067 -0.474465748667717013287159488755 -0.278150403499603293688835492503 +-0.0038642999716103081271623143067 0.474465748667717013287159488755 -0.278150403499603293688835492503 +-0.0038189999759197235107421875 -0.118612997233867645263671875 -0.4857124984264373779296875 +-0.0038189999759197235107421875 0.118612997233867645263671875 -0.4857124984264373779296875 +-0.00381884984672069575581399014652 -0.0408113986253738417198100307814 0.0286330014467239407638388115629 +-0.00381884984672069575581399014652 0.0408113986253738417198100307814 0.0286330014467239407638388115629 +-0.0038167499005794525146484375 -0.0462151497602462796310263115629 -0.0186974003911018378520925153907 +-0.0038167499005794525146484375 0.0462151497602462796310263115629 -0.0186974003911018378520925153907 +-0.00380520001053810154323375769536 -0.073770701885223388671875 0.0674048006534576499282351846887 +-0.00380520001053810154323375769536 0.073770701885223388671875 0.0674048006534576499282351846887 +-0.00378599984105676412582397460938 -0.6920100152492523193359375 -0.28915049135684967041015625 +-0.00378599984105676412582397460938 0.6920100152492523193359375 -0.28915049135684967041015625 +-0.00377600006759166734876531634768 -0.0981482982635498157897302462516 -0.0187791004776954664756694057814 +-0.00377600006759166734876531634768 0.0981482982635498157897302462516 -0.0187791004776954664756694057814 +-0.0037615001201629638671875 -0.0432933986186981242805238423443 -0.024729199707508087158203125 +-0.0037615001201629638671875 0.0432933986186981242805238423443 -0.024729199707508087158203125 +-0.00375174991786479975972024014652 -0.0314153492450714097450337192186 0.0387169003486633328536825615629 +-0.00375174991786479975972024014652 0.0314153492450714097450337192186 0.0387169003486633328536825615629 +-0.0037279999814927577972412109375 -0.20414049923419952392578125 0.4564130008220672607421875 +-0.0037279999814927577972412109375 0.20414049923419952392578125 0.4564130008220672607421875 +-0.003684000112116336822509765625 -0.140527197718620294741853626874 -0.2650254070758819580078125 +-0.003684000112116336822509765625 0.140527197718620294741853626874 -0.2650254070758819580078125 +-0.00366994999349117305073586514652 -0.0483321487903594984580912807814 -0.0122693501412868503225306326954 +-0.00366994999349117305073586514652 0.0483321487903594984580912807814 -0.0122693501412868503225306326954 +-0.0036348998546600341796875 -0.0997606992721557644943075615629 -0.005881600081920623779296875 +-0.0036348998546600341796875 0.0997606992721557644943075615629 -0.005881600081920623779296875 +-0.00363014987669885158538818359375 -0.371326947212219260485710492503 0.254171705245971712994190738755 +-0.00363014987669885158538818359375 0.371326947212219260485710492503 0.254171705245971712994190738755 +-0.00362620018422603633198586514652 -0.0495219498872756999641175923443 -0.0058674998581409454345703125 +-0.00362620018422603633198586514652 0.0495219498872756999641175923443 -0.0058674998581409454345703125 +-0.00361079983413219477925149014652 -0.0326745986938476590255575615629 -0.0376740485429763807823100307814 +-0.00361079983413219477925149014652 0.0326745986938476590255575615629 -0.0376740485429763807823100307814 +-0.00358639992773532876105258004884 -0.139406394958496104852230246252 -0.143363201618194574527009876874 +-0.00358639992773532876105258004884 0.139406394958496104852230246252 -0.143363201618194574527009876874 +-0.00353359985165297959056052157223 -0.645876014232635409229033029987 -0.269873791933059659076121761245 +-0.00353359985165297959056052157223 0.645876014232635409229033029987 -0.269873791933059659076121761245 +-0.003512999974191188812255859375 -0.4313324987888336181640625 -0.25286400318145751953125 +-0.003512999974191188812255859375 0.4313324987888336181640625 -0.25286400318145751953125 +-0.00350879989564418810071844134768 -0.0996917009353637806334802462516 0.00701769962906837515420610529304 +-0.00350879989564418810071844134768 0.0996917009353637806334802462516 0.00701769962906837515420610529304 +-0.00349804982542991672878063269536 -0.04938440024852752685546875 0.00699604973196983354749578509768 +-0.00349804982542991672878063269536 0.04938440024852752685546875 0.00699604973196983354749578509768 +-0.00346785010769963238444479891598 -0.117517054080963134765625 0.0931543529033660860916299384371 +-0.00346785010769963238444479891598 0.117517054080963134765625 0.0931543529033660860916299384371 +-0.00346079990267753609747836129884 -0.010650999844074249267578125 0.0487296491861343439300213731258 +-0.00346079990267753609747836129884 0.010650999844074249267578125 0.0487296491861343439300213731258 +-0.00346020013093948372931429879884 -0.0106493003666400919832168980861 0.0993710994720459067641726846887 +-0.00346020013093948372931429879884 0.0106493003666400919832168980861 0.0993710994720459067641726846887 +-0.00345705002546310442151922259768 0 -0.0498803496360778822471537807814 +-0.00343709997832775115966796875 -0.106751697510480886288419810626 -0.437141248583793662341179242503 +-0.00343709997832775115966796875 0.106751697510480886288419810626 -0.437141248583793662341179242503 +-0.00343195013701915775661266394536 -0.021356500685214996337890625 -0.0450790494680404704719300923443 +-0.00343195013701915775661266394536 0.021356500685214996337890625 -0.0450790494680404704719300923443 +-0.00340129993855953216552734375 -0.0536777973175048828125 -0.0843037009239196860610476846887 +-0.00340129993855953216552734375 0.0536777973175048828125 -0.0843037009239196860610476846887 +-0.00339464992284774788947054879884 -0.0480593502521514948089276231258 0.0133706495165824904014506557814 +-0.00339464992284774788947054879884 0.0480593502521514948089276231258 0.0133706495165824904014506557814 +-0.00336829982697963749294078894536 -0.0979426026344299427428552462516 0.0198974996805191053916850307814 +-0.00336829982697963749294078894536 0.0979426026344299427428552462516 0.0198974996805191053916850307814 +-0.00335519998334348227772561124027 -0.183726449310779582635433371252 0.410771700739860523565738503748 +-0.00335519998334348227772561124027 0.183726449310779582635433371252 0.410771700739860523565738503748 +-0.003331500105559825897216796875 -0.04313249886035919189453125 0.24622850120067596435546875 +-0.003331500105559825897216796875 0.04313249886035919189453125 0.24622850120067596435546875 +-0.00331325009465217607679266009768 -0.0458121001720428466796875 0.019755400717258453369140625 +-0.00331325009465217607679266009768 0.0458121001720428466796875 0.019755400717258453369140625 +-0.00328299999237060581569469519536 -0.0745333015918731717208700615629 -0.0665883004665374783614950615629 +-0.00328299999237060581569469519536 0.0745333015918731717208700615629 -0.0665883004665374783614950615629 +-0.00328119986224919548897793752928 -0.599742013216018721166733485006 -0.250597092509269703253238503748 +-0.00328119986224919548897793752928 0.599742013216018721166733485006 -0.250597092509269703253238503748 +-0.00322679989039897918701171875 -0.330068397521972700658920985006 0.225930404663085948602230246252 +-0.00322679989039897918701171875 0.330068397521972700658920985006 0.225930404663085948602230246252 +-0.00320474999025464066595980661134 -0.00986354984343051910400390625 -0.149641048908233625924779630623 +-0.00320474999025464066595980661134 0.00986354984343051910400390625 -0.149641048908233625924779630623 +-0.00318580009043216731343117764652 -0.0944431006908416775802450615629 0.03271619975566864013671875 +-0.00318580009043216731343117764652 0.0944431006908416775802450615629 0.03271619975566864013671875 +-0.00318434983491897591681429879884 -0.009800650179386138916015625 -0.0489265501499176053146200615629 +-0.00318434983491897591681429879884 0.009800650179386138916015625 -0.0489265501499176053146200615629 +-0.00316370017826557176771062884768 -0.04151774942874908447265625 -0.0276815503835678121402619211722 +-0.00316370017826557176771062884768 0.04151774942874908447265625 -0.0276815503835678121402619211722 +-0.0031616999767720699310302734375 -0.388199248909950278552116742503 -0.227577602863311773129240123126 +-0.0031616999767720699310302734375 0.388199248909950278552116742503 -0.227577602863311773129240123126 +-0.00315764993429183985981789639652 -0.0224126994609832770610768903907 0.0445836514234542874435263115629 +-0.00315764993429183985981789639652 0.0224126994609832770610768903907 0.0445836514234542874435263115629 +-0.00310454992577433594794222848634 -0.0877065002918243352691973768742 0.121646699309349057283036188437 +-0.00310454992577433594794222848634 0.0877065002918243352691973768742 0.121646699309349057283036188437 +-0.0030700000934302806854248046875 -0.117105998098850250244140625 -0.22085450589656829833984375 +-0.0030700000934302806854248046875 0.117105998098850250244140625 -0.22085450589656829833984375 +-0.00306059997528791444959539447268 -0.0427666485309600857833700615629 0.0257225513458251980880575615629 +-0.00306059997528791444959539447268 0.0427666485309600857833700615629 0.0257225513458251980880575615629 +-0.00305519998073577880859375 -0.0948903977870941273131677462516 -0.388569998741149946752670985006 +-0.00305519998073577880859375 0.0948903977870941273131677462516 -0.388569998741149946752670985006 +-0.00302879987284541138739535348634 -0.553608012199401811059829014994 -0.231320393085479719674779630623 +-0.00302879987284541138739535348634 0.553608012199401811059829014994 -0.231320393085479719674779630623 +-0.00298239998519420632452914254884 -0.163312399387359641345085492503 0.365130400657653841900440738755 +-0.00298239998519420632452914254884 0.163312399387359641345085492503 0.365130400657653841900440738755 +-0.00296960007399320628437844327152 -0.0891739010810852078536825615629 0.0451575011014938368369975307814 +-0.00296960007399320628437844327152 0.0891739010810852078536825615629 0.0451575011014938368369975307814 +-0.00287170000374317203883922644536 -0.0303797990083694464946706403907 -0.095230400562286376953125 +-0.00287170000374317203883922644536 0.0303797990083694464946706403907 -0.095230400562286376953125 +-0.00282344990409910678863525390625 -0.288809847831726029809829014994 0.197689104080200184210269753748 +-0.00282344990409910678863525390625 0.288809847831726029809829014994 0.197689104080200184210269753748 +-0.0028103999793529510498046875 -0.345065999031066938940170985006 -0.202291202545166026727230246252 +-0.0028103999793529510498046875 0.345065999031066938940170985006 -0.202291202545166026727230246252 +-0.00279680006206035631360906634768 -0.00203200001269578925042202932616 0.0498803496360778822471537807814 +-0.00279680006206035631360906634768 0.00203200001269578925042202932616 0.0498803496360778822471537807814 +-0.0027763998834416272858127694434 -0.507474011182785122997529470013 -0.212043693661689763851896373126 +-0.0027763998834416272858127694434 0.507474011182785122997529470013 -0.212043693661689763851896373126 +-0.00277580004185438164801547067384 -0.0300747990608215345909037807814 -0.0398472487926483168174662807814 +-0.00277580004185438164801547067384 0.0300747990608215345909037807814 -0.0398472487926483168174662807814 +-0.0027600000612437725067138671875 -0.966391980648040771484375 -0.2570590078830718994140625 +-0.0027600000612437725067138671875 0.966391980648040771484375 -0.2570590078830718994140625 +-0.00271559990942478197278875384768 -0.0346148997545242323448100307814 0.0937786996364593505859375 +-0.00271559990942478197278875384768 0.0346148997545242323448100307814 0.0937786996364593505859375 +-0.00268979994580149624552878329098 -0.104554796218872064761384876874 -0.107522401213645937834151311563 +-0.00268979994580149624552878329098 0.104554796218872064761384876874 -0.107522401213645937834151311563 +-0.00267329998314380645751953125 -0.0830290980637073405823400662484 -0.339998748898506120141860264994 +-0.00267329998314380645751953125 0.0830290980637073405823400662484 -0.339998748898506120141860264994 +-0.00266520008444786097798195889652 -0.0345059990882873521278462192186 0.196982800960540771484375 +-0.00266520008444786097798195889652 0.0345059990882873521278462192186 0.196982800960540771484375 +-0.00263950005173683175177523629884 -0.0344092488288879408409037807814 0.03618060052394866943359375 +-0.00263950005173683175177523629884 0.0344092488288879408409037807814 0.03618060052394866943359375 +-0.00262200005818158388137817382812 -0.918072381615638644092314279987 -0.244206057488918298892244251874 +-0.00262200005818158388137817382812 0.918072381615638644092314279987 -0.244206057488918298892244251874 +-0.00260959998704493037133267385741 -0.142898349463939644543586382497 0.319489100575447049212840511245 +-0.00260959998704493037133267385741 0.142898349463939644543586382497 0.319489100575447049212840511245 +-0.00252399989403784275054931640625 -0.461340010166168212890625 -0.1927669942378997802734375 +-0.00252399989403784275054931640625 0.461340010166168212890625 -0.1927669942378997802734375 +-0.00248400005511939525604248046875 -0.869752782583236738744858485006 -0.231353107094764726126001619377 +-0.00248400005511939525604248046875 0.869752782583236738744858485006 -0.231353107094764726126001619377 +-0.0024590999819338321685791015625 -0.301932749152183488305922764994 -0.177004802227020252569644753748 +-0.0024590999819338321685791015625 0.301932749152183488305922764994 -0.177004802227020252569644753748 +-0.00245600007474422454833984375 -0.0936847984790802057464276231258 -0.176683604717254638671875 +-0.00245600007474422454833984375 0.0936847984790802057464276231258 -0.176683604717254638671875 +-0.00244475007057189976100719519536 -0.0183011502027511617496369211722 -0.0464659988880157526214276231258 +-0.00244475007057189976100719519536 0.0183011502027511617496369211722 -0.0464659988880157526214276231258 +-0.0024200999177992343902587890625 -0.247551298141479469983039507497 0.169447803497314447573884876874 +-0.0024200999177992343902587890625 0.247551298141479469983039507497 0.169447803497314447573884876874 +-0.00241560004651546504292336514652 -0.0140157997608184817922571951954 0.0479345500469207791427450615629 +-0.00241560004651546504292336514652 0.0140157997608184817922571951954 0.0479345500469207791427450615629 +-0.00240609999746084230604070697268 -0.0395054012537002577354350307814 -0.0305537998676300055767018903907 +-0.00240609999746084230604070697268 0.0395054012537002577354350307814 -0.0305537998676300055767018903907 +-0.00234600005205720663070678710938 -0.821433183550834611352797764994 -0.218500156700611097848607755623 +-0.00234600005205720663070678710938 0.821433183550834611352797764994 -0.218500156700611097848607755623 +-0.00231190007179975535664406827152 -0.07834470272064208984375 0.0621029019355773953536825615629 +-0.00231190007179975535664406827152 0.07834470272064208984375 0.0621029019355773953536825615629 +-0.0022913999855518341064453125 -0.0711677983403205816070880018742 -0.291427499055862404553352007497 +-0.0022913999855518341064453125 0.0711677983403205816070880018742 -0.291427499055862404553352007497 +-0.00227159990463405864896673236331 -0.415206009149551413806022992503 -0.173490294814109796694978626874 +-0.00227159990463405864896673236331 0.415206009149551413806022992503 -0.173490294814109796694978626874 +-0.00223679998889565441813620516598 -0.122484299540519703253238503748 0.273847800493240367547542746252 +-0.00223679998889565441813620516598 0.122484299540519703253238503748 0.273847800493240367547542746252 +-0.00220800004899501800537109375 -0.773113584518432706005341970013 -0.205647206306457525082365123126 +-0.00220800004899501800537109375 0.773113584518432706005341970013 -0.205647206306457525082365123126 +-0.00213649999350309363274624807616 -0.0065756998956203460693359375 -0.0997606992721557644943075615629 +-0.00213649999350309363274624807616 0.0065756998956203460693359375 -0.0997606992721557644943075615629 +-0.00213140007108449927239468557616 -0.00655995011329650948295189039072 -0.0495219498872756999641175923443 +-0.00213140007108449927239468557616 0.00655995011329650948295189039072 -0.0495219498872756999641175923443 +-0.0021191500127315521240234375 -0.0258982509374618558029013115629 0.0427175492048263577560263115629 +-0.0021191500127315521240234375 0.0258982509374618558029013115629 0.0427175492048263577560263115629 +-0.002107799984514713287353515625 -0.258799499273300148693977007497 -0.151718401908874506167634876874 +-0.002107799984514713287353515625 0.258799499273300148693977007497 -0.151718401908874506167634876874 +-0.00209079999476671210198452932616 -0.0448199003934860243369975307814 -0.0220635995268821730186381557814 +-0.00209079999476671210198452932616 0.0448199003934860243369975307814 -0.0220635995268821730186381557814 +-0.00207000004593282938003540039062 -0.72479398548603057861328125 -0.192794255912303924560546875 +-0.00207000004593282938003540039062 0.72479398548603057861328125 -0.192794255912303924560546875 +-0.00206969995051622382073452932616 -0.0584710001945495660979901231258 0.0810977995395660428146200615629 +-0.00206969995051622382073452932616 0.0584710001945495660979901231258 0.0810977995395660428146200615629 +-0.00201919991523027411370327932616 -0.369072008132934614721420985006 -0.154213595390319840872095369377 +-0.00201919991523027411370327932616 0.369072008132934614721420985006 -0.154213595390319840872095369377 +-0.00201674993149936199188232421875 -0.20629274845123291015625 0.1412065029144287109375 +-0.00201674993149936199188232421875 0.20629274845123291015625 0.1412065029144287109375 +-0.00199890006333589562506625192384 -0.0258794993162155158306081403907 0.14773710072040557861328125 +-0.00199890006333589562506625192384 0.0258794993162155158306081403907 0.14773710072040557861328125 +-0.00198254995048046138081399014652 -0.0473910510540008558799662807814 -0.0158164501190185546875 +-0.00198254995048046138081399014652 0.0473910510540008558799662807814 -0.0158164501190185546875 +-0.00193200004287064053785927253415 -0.676474386453628451221220529987 -0.179941305518150324038728626874 +-0.00193200004287064053785927253415 0.676474386453628451221220529987 -0.179941305518150324038728626874 +-0.00190949998795986175537109375 -0.0593064986169338226318359375 -0.24285624921321868896484375 +-0.00190949998795986175537109375 0.0593064986169338226318359375 -0.24285624921321868896484375 +-0.00190260000526905077161687884768 -0.0368853509426116943359375 0.0337024003267288249641175923443 +-0.00190260000526905077161687884768 0.0368853509426116943359375 0.0337024003267288249641175923443 +-0.00188800003379583367438265817384 -0.0490741491317749078948651231258 -0.00938955023884773323783470289072 +-0.00188800003379583367438265817384 0.0490741491317749078948651231258 -0.00938955023884773323783470289072 +-0.00186399999074637889862060546875 -0.102070249617099761962890625 0.22820650041103363037109375 +-0.00186399999074637889862060546875 0.102070249617099761962890625 0.22820650041103363037109375 +-0.0018420000560581684112548828125 -0.0702635988593101473709268134371 -0.13251270353794097900390625 +-0.0018420000560581684112548828125 0.0702635988593101473709268134371 -0.13251270353794097900390625 +-0.00181744992733001708984375 -0.0498803496360778822471537807814 -0.0029408000409603118896484375 +-0.00181744992733001708984375 0.0498803496360778822471537807814 -0.0029408000409603118896484375 +-0.00179400003980845212936401367188 -0.628154787421226545873764735006 -0.167088355123996751272485994377 +-0.00179400003980845212936401367188 0.628154787421226545873764735006 -0.167088355123996751272485994377 +-0.00179319996386766438052629002442 -0.0697031974792480524261151231258 -0.0716816008090972872635049384371 +-0.00179319996386766438052629002442 0.0697031974792480524261151231258 -0.0716816008090972872635049384371 +-0.00176679992582648979528026078611 -0.322938007116317704614516514994 -0.134936895966529829538060880623 +-0.00176679992582648979528026078611 0.322938007116317704614516514994 -0.134936895966529829538060880623 +-0.0017564999870955944061279296875 -0.21566624939441680908203125 -0.126432001590728759765625 +-0.0017564999870955944061279296875 0.21566624939441680908203125 -0.126432001590728759765625 +-0.00175439994782209405035922067384 -0.0498458504676818903167401231258 0.00350884981453418757710305264652 +-0.00175439994782209405035922067384 0.0498458504676818903167401231258 0.00350884981453418757710305264652 +-0.00173010006546974186465714939942 -0.00532465018332004599160844904304 0.0496855497360229533820863423443 +-0.00173010006546974186465714939942 0.00532465018332004599160844904304 0.0496855497360229533820863423443 +-0.001700649969279766082763671875 -0.02683889865875244140625 -0.0421518504619598430305238423443 +-0.001700649969279766082763671875 0.02683889865875244140625 -0.0421518504619598430305238423443 +-0.00168414991348981874647039447268 -0.0489713013172149713714276231258 0.00994874984025955269584251539072 +-0.00168414991348981874647039447268 0.0489713013172149713714276231258 0.00994874984025955269584251539072 +-0.0016560000367462635040283203125 -0.579835188388824418481704014994 -0.154235404729843122995092130623 +-0.0016560000367462635040283203125 0.579835188388824418481704014994 -0.154235404729843122995092130623 +-0.00164149999618530290784734759768 -0.0372666507959365858604350307814 -0.0332941502332687391807475307814 +-0.00164149999618530290784734759768 0.0372666507959365858604350307814 -0.0332941502332687391807475307814 +-0.001613399945199489593505859375 -0.165034198760986350329460492503 0.112965202331542974301115123126 +-0.001613399945199489593505859375 0.165034198760986350329460492503 0.112965202331542974301115123126 +-0.00159290004521608365671558882326 -0.0472215503454208387901225307814 0.016358099877834320068359375 +-0.00159290004521608365671558882326 0.0472215503454208387901225307814 0.016358099877834320068359375 +-0.001527599990367889404296875 -0.0474451988935470636565838731258 -0.194284999370574973376335492503 +-0.001527599990367889404296875 0.0474451988935470636565838731258 -0.194284999370574973376335492503 +-0.00151800003368407509553306145023 -0.531515589356422513134248220013 -0.141382454335689550228849498126 +-0.00151800003368407509553306145023 0.531515589356422513134248220013 -0.141382454335689550228849498126 +-0.00151439993642270569369767674317 -0.276804006099700905529914507497 -0.115660196542739859837389815311 +-0.00151439993642270569369767674317 0.276804006099700905529914507497 -0.115660196542739859837389815311 +-0.00149119999259710316226457127442 -0.0816561996936798206725427462516 0.182565200328826920950220369377 +-0.00149119999259710316226457127442 0.0816561996936798206725427462516 0.182565200328826920950220369377 +-0.00148480003699660314218922163576 -0.0445869505405426039268412807814 0.0225787505507469184184987653907 +-0.00148480003699660314218922163576 0.0445869505405426039268412807814 0.0225787505507469184184987653907 +-0.00143585000187158601941961322268 -0.0151898995041847232473353201954 -0.0476152002811431884765625 +-0.00143585000187158601941961322268 0.0151898995041847232473353201954 -0.0476152002811431884765625 +-0.00140519998967647552490234375 -0.172532999515533469470085492503 -0.101145601272583013363615123126 +-0.00140519998967647552490234375 0.172532999515533469470085492503 -0.101145601272583013363615123126 +-0.00138000003062188625335693359375 -0.4831959903240203857421875 -0.12852950394153594970703125 +-0.00138000003062188625335693359375 0.4831959903240203857421875 -0.12852950394153594970703125 +-0.00136700004804879426956176757812 -0.646835029125213623046875 -0.762628972530364990234375 +-0.00136700004804879426956176757812 0.646835029125213623046875 -0.762628972530364990234375 +-0.00135779995471239098639437692384 -0.0173074498772621161724050153907 0.04688934981822967529296875 +-0.00135779995471239098639437692384 0.0173074498772621161724050153907 0.04688934981822967529296875 +-0.00133260004222393048899097944826 -0.0172529995441436760639231096093 0.0984914004802703857421875 +-0.00133260004222393048899097944826 0.0172529995441436760639231096093 0.0984914004802703857421875 +-0.00129865004564635446934750540038 -0.614493277668952897485610264994 -0.724497523903846696313735264994 +-0.00129865004564635446934750540038 0.614493277668952897485610264994 -0.724497523903846696313735264994 +-0.00128500000573694705963134765625 -0.9916470050811767578125 -0.128971993923187255859375 +-0.00128500000573694705963134765625 0.9916470050811767578125 -0.128971993923187255859375 +-0.00126199994701892137527465820312 -0.2306700050830841064453125 -0.09638349711894989013671875 +-0.00126199994701892137527465820312 0.2306700050830841064453125 -0.09638349711894989013671875 +-0.00124200002755969762802124023438 -0.434876391291618369372429242503 -0.115676553547382363063000809689 +-0.00124200002755969762802124023438 0.434876391291618369372429242503 -0.115676553547382363063000809689 +-0.00123030004324391488597367771973 -0.582151526212692282946647992503 -0.686366075277328513415397992503 +-0.00123030004324391488597367771973 0.582151526212692282946647992503 -0.686366075277328513415397992503 +-0.001228000037372112274169921875 -0.0468423992395401028732138115629 -0.0883418023586273193359375 +-0.001228000037372112274169921875 0.0468423992395401028732138115629 -0.0883418023586273193359375 +-0.0012207500054500996199136064746 -0.942064654827117875512954014994 -0.122523394227027890290848688437 +-0.0012207500054500996199136064746 0.942064654827117875512954014994 -0.122523394227027890290848688437 +-0.00121004995889961719512939453125 -0.123775649070739734991519753748 0.0847239017486572237869424384371 +-0.00121004995889961719512939453125 0.123775649070739734991519753748 0.0847239017486572237869424384371 +-0.00116195004084147508575941554199 -0.549809774756431557385383257497 -0.648234626650810219494758257497 +-0.00116195004084147508575941554199 0.549809774756431557385383257497 -0.648234626650810219494758257497 +-0.00115650000516325239703629979005 -0.892482304573059104235710492503 -0.116074794530868538600110184689 +-0.00115650000516325239703629979005 0.892482304573059104235710492503 -0.116074794530868538600110184689 +-0.00115595003589987767832203413576 -0.039172351360321044921875 0.0310514509677886976768412807814 +-0.00115595003589987767832203413576 0.039172351360321044921875 0.0310514509677886976768412807814 +-0.00114569999277591705322265625 -0.0355838991701602908035440009371 -0.145713749527931202276676003748 +-0.00114569999277591705322265625 0.0355838991701602908035440009371 -0.145713749527931202276676003748 +-0.00111839999444782720906810258299 -0.0612421497702598516266192518742 0.136923900246620183773771373126 +-0.00111839999444782720906810258299 0.0612421497702598516266192518742 0.136923900246620183773771373126 +-0.001104000024497509002685546875 -0.386556792259216353002670985006 -0.102823603153228762541182561563 +-0.001104000024497509002685546875 0.386556792259216353002670985006 -0.102823603153228762541182561563 +-0.00109360003843903550238558786134 -0.517468023300170942846420985006 -0.610103178024292036596420985006 +-0.00109360003843903550238558786134 0.517468023300170942846420985006 -0.610103178024292036596420985006 +-0.00109225000487640495731855860839 -0.842899954319000221936164507497 -0.109626194834709159153796065311 +-0.00109225000487640495731855860839 0.842899954319000221936164507497 -0.109626194834709159153796065311 +-0.00106824999675154681637312403808 -0.00328784994781017303466796875 -0.0498803496360778822471537807814 +-0.00106824999675154681637312403808 0.00328784994781017303466796875 -0.0498803496360778822471537807814 +-0.0010538999922573566436767578125 -0.129399749636650074346988503748 -0.0758592009544372530838174384371 +-0.0010538999922573566436767578125 0.129399749636650074346988503748 -0.0758592009544372530838174384371 +-0.00103484997525811191036726466308 -0.0292355000972747830489950615629 0.0405488997697830214073100307814 +-0.00103484997525811191036726466308 0.0292355000972747830489950615629 0.0405488997697830214073100307814 +-0.00102800000458955773444125192384 -0.793317604064941450658920985006 -0.103177595138549807463057561563 +-0.00102800000458955773444125192384 0.793317604064941450658920985006 -0.103177595138549807463057561563 +-0.00102525003603659570217132568359 -0.48512627184391021728515625 -0.57197172939777374267578125 +-0.00102525003603659570217132568359 0.48512627184391021728515625 -0.57197172939777374267578125 +-0.00100959995761513705685163966308 -0.184536004066467307360710492503 -0.0771067976951599204360476846887 +-0.00100959995761513705685163966308 0.184536004066467307360710492503 -0.0771067976951599204360476846887 +-0.000966000021435320268929636267075 -0.338237193226814225610610264994 -0.0899706527590751620193643134371 +-0.000966000021435320268929636267075 0.338237193226814225610610264994 -0.0899706527590751620193643134371 +-0.000963750004302710294723510742188 -0.743735253810882568359375 -0.09672899544239044189453125 +-0.000963750004302710294723510742188 0.743735253810882568359375 -0.09672899544239044189453125 +-0.000956900033634155901957063505847 -0.452784520387649491723891514994 -0.533840280771255448755141514994 +-0.000956900033634155901957063505847 0.452784520387649491723891514994 -0.533840280771255448755141514994 +-0.000899500004015862855005769560535 -0.694152903556823686059829014994 -0.0902803957462310763260049384371 +-0.000899500004015862855005769560535 0.694152903556823686059829014994 -0.0902803957462310763260049384371 +-0.00089659998193383219026314501221 -0.0348515987396240262130575615629 -0.0358408004045486436317524692186 +-0.00089659998193383219026314501221 0.0348515987396240262130575615629 -0.0358408004045486436317524692186 +-0.000888550031231716318583235825201 -0.420442768931388877184929242503 -0.495708832144737265856804242503 +-0.000888550031231716318583235825201 0.420442768931388877184929242503 -0.495708832144737265856804242503 +-0.000835250003729015632128462875983 -0.644570553302764914782585492503 -0.0838317960500717246352664346887 +-0.000835250003729015632128462875983 0.644570553302764914782585492503 -0.0838317960500717246352664346887 +-0.00082800001837313175201416015625 -0.289917594194412209240852007497 -0.0771177023649215614975460653113 +-0.00082800001837313175201416015625 0.289917594194412209240852007497 -0.0771177023649215614975460653113 +-0.000820200028829276518368973647455 -0.388101017475128151623664507497 -0.457577383518218971936164507497 +-0.000820200028829276518368973647455 0.388101017475128151623664507497 -0.457577383518218971936164507497 +-0.0008066999725997447967529296875 -0.0825170993804931751647302462516 0.0564826011657714871505575615629 +-0.0008066999725997447967529296875 0.0825170993804931751647302462516 0.0564826011657714871505575615629 +-0.00077100000344216819241072169433 -0.594988203048706032483039507497 -0.0773831963539123451889523153113 +-0.00077100000344216819241072169433 0.594988203048706032483039507497 -0.0773831963539123451889523153113 +-0.0007637999951839447021484375 -0.0237225994467735318282919365629 -0.0971424996852874866881677462516 +-0.0007637999951839447021484375 0.0237225994467735318282919365629 -0.0971424996852874866881677462516 +-0.000757199968211352846848838371585 -0.138402003049850452764957253748 -0.0578300982713699299186949076557 +-0.000757199968211352846848838371585 0.138402003049850452764957253748 -0.0578300982713699299186949076557 +-0.000751850026426836934995145966809 -0.355759266018867537084702235006 -0.419445934891700789037827235006 +-0.000751850026426836934995145966809 0.355759266018867537084702235006 -0.419445934891700789037827235006 +-0.00074559999629855158113228563721 -0.0408280998468399103362713731258 0.0912826001644134604751101846887 +-0.00074559999629855158113228563721 0.0408280998468399103362713731258 0.0912826001644134604751101846887 +-0.000706750003155320969533415009778 -0.545405852794647261205795985006 -0.0709345966577529934982138115629 +-0.000706750003155320969533415009778 0.545405852794647261205795985006 -0.0709345966577529934982138115629 +-0.000702599994838237762451171875 -0.0862664997577667347350427462516 -0.0505728006362915066818075615629 +-0.000702599994838237762451171875 0.0862664997577667347350427462516 -0.0505728006362915066818075615629 +-0.000690000015310943126678466796875 -0.24159799516201019287109375 -0.064264751970767974853515625 +-0.000690000015310943126678466796875 0.24159799516201019287109375 -0.064264751970767974853515625 +-0.000683500024024397134780883789062 -0.3234175145626068115234375 -0.3813144862651824951171875 +-0.000683500024024397134780883789062 0.3234175145626068115234375 -0.3813144862651824951171875 +-0.00066630002111196524449548972413 -0.00862649977207183803196155480464 0.04924570024013519287109375 +-0.00066630002111196524449548972413 0.00862649977207183803196155480464 0.04924570024013519287109375 +-0.000642500002868473529815673828125 -0.49582350254058837890625 -0.0644859969615936279296875 +-0.000642500002868473529815673828125 0.49582350254058837890625 -0.0644859969615936279296875 +-0.000615150021621957442986838859866 -0.291075763106346141473323996252 -0.343183037638664256707698996252 +-0.000615150021621957442986838859866 0.291075763106346141473323996252 -0.343183037638664256707698996252 +-0.0006140000186860561370849609375 -0.0234211996197700514366069057814 -0.04417090117931365966796875 +-0.0006140000186860561370849609375 0.0234211996197700514366069057814 -0.04417090117931365966796875 +-0.000578250002581626198518149895023 -0.446241152286529552117855246252 -0.0580373972654342693000550923443 +-0.000578250002581626198518149895023 0.446241152286529552117855246252 -0.0580373972654342693000550923443 +-0.0005520000122487545013427734375 -0.193278396129608176501335492503 -0.0514118015766143812705912807814 +-0.0005520000122487545013427734375 0.193278396129608176501335492503 -0.0514118015766143812705912807814 +-0.00054680001921951775119279393067 -0.258734011650085471423210492503 -0.305051589012146018298210492503 +-0.00054680001921951775119279393067 0.258734011650085471423210492503 -0.305051589012146018298210492503 +-0.00051400000229477886722062596192 -0.396658802032470725329460492503 -0.0515887975692749037315287807814 +-0.00051400000229477886722062596192 0.396658802032470725329460492503 -0.0515887975692749037315287807814 +-0.00050479997880756852842581983154 -0.0922680020332336536803552462516 -0.0385533988475799602180238423443 +-0.00050479997880756852842581983154 0.0922680020332336536803552462516 -0.0385533988475799602180238423443 +-0.000478450016817077950978531752924 -0.226392260193824745861945757497 -0.266920140385627724377570757497 +-0.000478450016817077950978531752924 0.226392260193824745861945757497 -0.266920140385627724377570757497 +-0.000449750002007931427502884780267 -0.347076451778411843029914507497 -0.0451401978731155381630024692186 +-0.000449750002007931427502884780267 0.347076451778411843029914507497 -0.0451401978731155381630024692186 +-0.000414000009186565876007080078125 -0.144958797097206104620426003748 -0.0385588511824607807487730326557 +-0.000414000009186565876007080078125 0.144958797097206104620426003748 -0.0385588511824607807487730326557 +-0.000410100014414638259184486823727 -0.194050508737564075811832253748 -0.228788691759109485968082253748 +-0.000410100014414638259184486823727 0.194050508737564075811832253748 -0.228788691759109485968082253748 +-0.00040334998629987239837646484375 -0.0412585496902465875823651231258 0.0282413005828857435752787807814 +-0.00040334998629987239837646484375 0.0412585496902465875823651231258 0.0282413005828857435752787807814 +-0.000385500001721084096205360847165 -0.297494101524353016241519753748 -0.0386915981769561725944761576557 +-0.000385500001721084096205360847165 0.297494101524353016241519753748 -0.0386915981769561725944761576557 +-0.00038189999759197235107421875 -0.0118612997233867659141459682814 -0.0485712498426437433440838731258 +-0.00038189999759197235107421875 0.0118612997233867659141459682814 -0.0485712498426437433440838731258 +-0.000372799998149275790566142818605 -0.0204140499234199551681356865629 0.0456413000822067302375550923443 +-0.000372799998149275790566142818605 0.0204140499234199551681356865629 0.0456413000822067302375550923443 +-0.0003512999974191188812255859375 -0.0431332498788833673675213731258 -0.0252864003181457533409037807814 +-0.0003512999974191188812255859375 0.0431332498788833673675213731258 -0.0252864003181457533409037807814 +-0.000341750012012198567390441894531 -0.16170875728130340576171875 -0.19065724313259124755859375 +-0.000341750012012198567390441894531 0.16170875728130340576171875 -0.19065724313259124755859375 +-0.000321250001434236764907836914062 -0.247911751270294189453125 -0.03224299848079681396484375 +-0.000321250001434236764907836914062 0.247911751270294189453125 -0.03224299848079681396484375 +-0.00027600000612437725067138671875 -0.0966391980648040882506677462516 -0.0257059007883071906352956403907 +-0.00027600000612437725067138671875 0.0966391980648040882506677462516 -0.0257059007883071906352956403907 +-0.000273400009609758875596396965335 -0.129367005825042735711605246252 -0.152525794506073009149105246252 +-0.000273400009609758875596396965335 0.129367005825042735711605246252 -0.152525794506073009149105246252 +-0.00025700000114738943361031298096 -0.198329401016235362664730246252 -0.0257943987846374518657643903907 +-0.00025700000114738943361031298096 0.198329401016235362664730246252 -0.0257943987846374518657643903907 +-0.00025239998940378426421290991577 -0.0461340010166168268401776231258 -0.0192766994237899801090119211722 +-0.00025239998940378426421290991577 0.0461340010166168268401776231258 -0.0192766994237899801090119211722 +-0.000205050007207319129592243411864 -0.0970252543687820379059161268742 -0.114394345879554742984041126874 +-0.000205050007207319129592243411864 0.0970252543687820379059161268742 -0.114394345879554742984041126874 +-0.000192750000860542048102680423582 -0.148747050762176508120759876874 -0.0193457990884780862972380788278 +-0.000192750000860542048102680423582 0.148747050762176508120759876874 -0.0193457990884780862972380788278 +-0.000138000003062188625335693359375 -0.0483195990324020441253338731258 -0.0128529503941535953176478201954 +-0.000138000003062188625335693359375 0.0483195990324020441253338731258 -0.0128529503941535953176478201954 +-0.000136700004804879437798198482668 -0.0646835029125213678558026231258 -0.0762628972530365045745526231258 +-0.000136700004804879437798198482668 0.0646835029125213678558026231258 -0.0762628972530365045745526231258 +-0.00012850000057369471680515649048 -0.0991647005081176813323651231258 -0.0128971993923187259328821951954 +-0.00012850000057369471680515649048 0.0991647005081176813323651231258 -0.0128971993923187259328821951954 +-6.83500024024397188990992413338e-05 -0.0323417514562606839279013115629 -0.0381314486265182522872763115629 +-6.83500024024397188990992413338e-05 0.0323417514562606839279013115629 -0.0381314486265182522872763115629 +-6.425000028684735840257824524e-05 -0.0495823502540588406661825615629 -0.00644859969615936296644109759768 +-6.425000028684735840257824524e-05 0.0495823502540588406661825615629 -0.00644859969615936296644109759768 +0 -1 0 +0 -0.949999999999999955591079014994 0 +0 -0.900000000000000022204460492503 0 +0 -0.849999999999999977795539507497 0 +0 -0.800000000000000044408920985006 0 +0 -0.75 0 +0 -0.699999999999999955591079014994 0 +0 -0.650000000000000022204460492503 0 +0 -0.599999999999999977795539507497 0 +0 -0.550000000000000044408920985006 0 +0 -0.5 0 +0 -0.450000000000000011102230246252 0 +0 -0.400000000000000022204460492503 0 +0 -0.349999999999999977795539507497 0 +0 -0.299999999999999988897769753748 0 +0 -0.25 0 +0 -0.200000000000000011102230246252 0 +0 -0.149999999999999994448884876874 0 +0 -0.100000000000000005551115123126 0 +0 -0.0500000000000000027755575615629 0 +0 0 -1 +0 0 -0.949999999999999955591079014994 +0 0 -0.900000000000000022204460492503 +0 0 -0.849999999999999977795539507497 +0 0 -0.800000000000000044408920985006 +0 0 -0.75 +0 0 -0.699999999999999955591079014994 +0 0 -0.650000000000000022204460492503 +0 0 -0.599999999999999977795539507497 +0 0 -0.550000000000000044408920985006 +0 0 -0.5 +0 0 -0.450000000000000011102230246252 +0 0 -0.400000000000000022204460492503 +0 0 -0.349999999999999977795539507497 +0 0 -0.299999999999999988897769753748 +0 0 -0.25 +0 0 -0.200000000000000011102230246252 +0 0 -0.149999999999999994448884876874 +0 0 -0.100000000000000005551115123126 +0 0 -0.0500000000000000027755575615629 +0 0 0.0500000000000000027755575615629 +0 0 0.100000000000000005551115123126 +0 0 0.149999999999999994448884876874 +0 0 0.200000000000000011102230246252 +0 0 0.25 +0 0 0.299999999999999988897769753748 +0 0 0.349999999999999977795539507497 +0 0 0.400000000000000022204460492503 +0 0 0.450000000000000011102230246252 +0 0 0.5 +0 0 0.550000000000000044408920985006 +0 0 0.599999999999999977795539507497 +0 0 0.650000000000000022204460492503 +0 0 0.699999999999999955591079014994 +0 0 0.75 +0 0 0.800000000000000044408920985006 +0 0 0.849999999999999977795539507497 +0 0 0.900000000000000022204460492503 +0 0 0.949999999999999955591079014994 +0 0 1 +0 0.0500000000000000027755575615629 0 +0 0.100000000000000005551115123126 0 +0 0.149999999999999994448884876874 0 +0 0.200000000000000011102230246252 0 +0 0.25 0 +0 0.299999999999999988897769753748 0 +0 0.349999999999999977795539507497 0 +0 0.400000000000000022204460492503 0 +0 0.450000000000000011102230246252 0 +0 0.5 0 +0 0.550000000000000044408920985006 0 +0 0.599999999999999977795539507497 0 +0 0.650000000000000022204460492503 0 +0 0.699999999999999955591079014994 0 +0 0.75 0 +0 0.800000000000000044408920985006 0 +0 0.849999999999999977795539507497 0 +0 0.900000000000000022204460492503 0 +0 0.949999999999999955591079014994 0 +0 1 0 +6.425000028684735840257824524e-05 -0.0495823502540588406661825615629 0.00644859969615936296644109759768 +6.425000028684735840257824524e-05 0.0495823502540588406661825615629 0.00644859969615936296644109759768 +6.83500024024397188990992413338e-05 -0.0323417007923126262336488423443 0.0381314486265182522872763115629 +6.83500024024397188990992413338e-05 0.0323417007923126262336488423443 0.0381314486265182522872763115629 +0.00012850000057369471680515649048 -0.0991647005081176813323651231258 0.0128971993923187259328821951954 +0.00012850000057369471680515649048 0.0991647005081176813323651231258 0.0128971993923187259328821951954 +0.000136700004804879437798198482668 -0.0646834015846252524672976846887 0.0762628972530365045745526231258 +0.000136700004804879437798198482668 0.0646834015846252524672976846887 0.0762628972530365045745526231258 +0.000138000003062188625335693359375 -0.0483195990324020441253338731258 0.0128529503941535953176478201954 +0.000138000003062188625335693359375 0.0483195990324020441253338731258 0.0128529503941535953176478201954 +0.000192750000860542048102680423582 -0.148747050762176508120759876874 0.0193457990884780862972380788278 +0.000192750000860542048102680423582 0.148747050762176508120759876874 0.0193457990884780862972380788278 +0.000205050007207319129592243411864 -0.0970251023769378578842648153113 0.114394345879554742984041126874 +0.000205050007207319129592243411864 0.0970251023769378578842648153113 0.114394345879554742984041126874 +0.00025239998940378426421290991577 -0.0461340010166168268401776231258 0.0192766994237899801090119211722 +0.00025239998940378426421290991577 0.0461340010166168268401776231258 0.0192766994237899801090119211722 +0.00025700000114738943361031298096 -0.198329401016235362664730246252 0.0257943987846374518657643903907 +0.00025700000114738943361031298096 0.198329401016235362664730246252 0.0257943987846374518657643903907 +0.000273400009609758875596396965335 -0.129366803169250504934595369377 0.152525794506073009149105246252 +0.000273400009609758875596396965335 0.129366803169250504934595369377 0.152525794506073009149105246252 +0.00027600000612437725067138671875 -0.0966391980648040882506677462516 0.0257059007883071906352956403907 +0.00027600000612437725067138671875 0.0966391980648040882506677462516 0.0257059007883071906352956403907 +0.000321250001434236764907836914062 -0.247911751270294189453125 0.03224299848079681396484375 +0.000321250001434236764907836914062 0.247911751270294189453125 0.03224299848079681396484375 +0.000341750012012198567390441894531 -0.1617085039615631103515625 0.19065724313259124755859375 +0.000341750012012198567390441894531 0.1617085039615631103515625 0.19065724313259124755859375 +0.0003512999974191188812255859375 -0.0431332498788833673675213731258 0.0252864003181457533409037807814 +0.0003512999974191188812255859375 0.0431332498788833673675213731258 0.0252864003181457533409037807814 +0.000372799998149275790566142818605 -0.0204140499234199551681356865629 -0.0456413000822067302375550923443 +0.000372799998149275790566142818605 0.0204140499234199551681356865629 -0.0456413000822067302375550923443 +0.00038189999759197235107421875 -0.0118612997233867659141459682814 0.0485712498426437433440838731258 +0.00038189999759197235107421875 0.0118612997233867659141459682814 0.0485712498426437433440838731258 +0.000385500001721084096205360847165 -0.297494101524353016241519753748 0.0386915981769561725944761576557 +0.000385500001721084096205360847165 0.297494101524353016241519753748 0.0386915981769561725944761576557 +0.00040334998629987239837646484375 -0.0412585496902465875823651231258 -0.0282413005828857435752787807814 +0.00040334998629987239837646484375 0.0412585496902465875823651231258 -0.0282413005828857435752787807814 +0.000410100014414638259184486823727 -0.194050204753875715768529630623 0.228788691759109485968082253748 +0.000410100014414638259184486823727 0.194050204753875715768529630623 0.228788691759109485968082253748 +0.000414000009186565876007080078125 -0.144958797097206104620426003748 0.0385588511824607807487730326557 +0.000414000009186565876007080078125 0.144958797097206104620426003748 0.0385588511824607807487730326557 +0.000449750002007931427502884780267 -0.347076451778411843029914507497 0.0451401978731155381630024692186 +0.000449750002007931427502884780267 0.347076451778411843029914507497 0.0451401978731155381630024692186 +0.000478450016817077950978531752924 -0.226391905546188348941072376874 0.266920140385627724377570757497 +0.000478450016817077950978531752924 0.226391905546188348941072376874 0.266920140385627724377570757497 +0.00050479997880756852842581983154 -0.0922680020332336536803552462516 0.0385533988475799602180238423443 +0.00050479997880756852842581983154 0.0922680020332336536803552462516 0.0385533988475799602180238423443 +0.00051400000229477886722062596192 -0.396658802032470725329460492503 0.0515887975692749037315287807814 +0.00051400000229477886722062596192 0.396658802032470725329460492503 0.0515887975692749037315287807814 +0.00054680001921951775119279393067 -0.258733606338501009869190738755 0.305051589012146018298210492503 +0.00054680001921951775119279393067 0.258733606338501009869190738755 0.305051589012146018298210492503 +0.0005520000122487545013427734375 -0.193278396129608176501335492503 0.0514118015766143812705912807814 +0.0005520000122487545013427734375 0.193278396129608176501335492503 0.0514118015766143812705912807814 +0.000578250002581626198518149895023 -0.446241152286529552117855246252 0.0580373972654342693000550923443 +0.000578250002581626198518149895023 0.446241152286529552117855246252 0.0580373972654342693000550923443 +0.0006140000186860561370849609375 -0.0234211996197700514366069057814 0.04417090117931365966796875 +0.0006140000186860561370849609375 0.0234211996197700514366069057814 0.04417090117931365966796875 +0.000615150021621957442986838859866 -0.291075307130813587530582253748 0.343183037638664256707698996252 +0.000615150021621957442986838859866 0.291075307130813587530582253748 0.343183037638664256707698996252 +0.000642500002868473529815673828125 -0.49582350254058837890625 0.0644859969615936279296875 +0.000642500002868473529815673828125 0.49582350254058837890625 0.0644859969615936279296875 +0.00066630002111196524449548972413 -0.00862649977207183803196155480464 -0.04924570024013519287109375 +0.00066630002111196524449548972413 0.00862649977207183803196155480464 -0.04924570024013519287109375 +0.000683500024024397134780883789062 -0.323417007923126220703125 0.3813144862651824951171875 +0.000683500024024397134780883789062 0.323417007923126220703125 0.3813144862651824951171875 +0.000690000015310943126678466796875 -0.24159799516201019287109375 0.064264751970767974853515625 +0.000690000015310943126678466796875 0.24159799516201019287109375 0.064264751970767974853515625 +0.000702599994838237762451171875 -0.0862664997577667347350427462516 0.0505728006362915066818075615629 +0.000702599994838237762451171875 0.0862664997577667347350427462516 0.0505728006362915066818075615629 +0.000706750003155320969533415009778 -0.545405852794647261205795985006 0.0709345966577529934982138115629 +0.000706750003155320969533415009778 0.545405852794647261205795985006 0.0709345966577529934982138115629 +0.00074559999629855158113228563721 -0.0408280998468399103362713731258 -0.0912826001644134604751101846887 +0.00074559999629855158113228563721 0.0408280998468399103362713731258 -0.0912826001644134604751101846887 +0.000751850026426836934995145966809 -0.355758708715438853875667746252 0.419445934891700789037827235006 +0.000751850026426836934995145966809 0.355758708715438853875667746252 0.419445934891700789037827235006 +0.000757199968211352846848838371585 -0.138402003049850452764957253748 0.0578300982713699299186949076557 +0.000757199968211352846848838371585 0.138402003049850452764957253748 0.0578300982713699299186949076557 +0.0007637999951839447021484375 -0.0237225994467735318282919365629 0.0971424996852874866881677462516 +0.0007637999951839447021484375 0.0237225994467735318282919365629 0.0971424996852874866881677462516 +0.00077100000344216819241072169433 -0.594988203048706032483039507497 0.0773831963539123451889523153113 +0.00077100000344216819241072169433 0.594988203048706032483039507497 0.0773831963539123451889523153113 +0.0008066999725997447967529296875 -0.0825170993804931751647302462516 -0.0564826011657714871505575615629 +0.0008066999725997447967529296875 0.0825170993804931751647302462516 -0.0564826011657714871505575615629 +0.000820200028829276518368973647455 -0.388100409507751431537059261245 0.457577383518218971936164507497 +0.000820200028829276518368973647455 0.388100409507751431537059261245 0.457577383518218971936164507497 +0.00082800001837313175201416015625 -0.289917594194412209240852007497 0.0771177023649215614975460653113 +0.00082800001837313175201416015625 0.289917594194412209240852007497 0.0771177023649215614975460653113 +0.000835250003729015632128462875983 -0.644570553302764914782585492503 0.0838317960500717246352664346887 +0.000835250003729015632128462875983 0.644570553302764914782585492503 0.0838317960500717246352664346887 +0.000888550031231716318583235825201 -0.420442110300064120220753238755 0.495708832144737265856804242503 +0.000888550031231716318583235825201 0.420442110300064120220753238755 0.495708832144737265856804242503 +0.00089659998193383219026314501221 -0.0348515987396240262130575615629 0.0358408004045486436317524692186 +0.00089659998193383219026314501221 0.0348515987396240262130575615629 0.0358408004045486436317524692186 +0.000899500004015862855005769560535 -0.694152903556823686059829014994 0.0902803957462310763260049384371 +0.000899500004015862855005769560535 0.694152903556823686059829014994 0.0902803957462310763260049384371 +0.000956900033634155901957063505847 -0.452783811092376697882144753748 0.533840280771255448755141514994 +0.000956900033634155901957063505847 0.452783811092376697882144753748 0.533840280771255448755141514994 +0.000963750004302710294723510742188 -0.743735253810882568359375 0.09672899544239044189453125 +0.000963750004302710294723510742188 0.743735253810882568359375 0.09672899544239044189453125 +0.000966000021435320268929636267075 -0.338237193226814225610610264994 0.0899706527590751620193643134371 +0.000966000021435320268929636267075 0.338237193226814225610610264994 0.0899706527590751620193643134371 +0.00100959995761513705685163966308 -0.184536004066467307360710492503 0.0771067976951599204360476846887 +0.00100959995761513705685163966308 0.184536004066467307360710492503 0.0771067976951599204360476846887 +0.00102525003603659570217132568359 -0.4851255118846893310546875 0.57197172939777374267578125 +0.00102525003603659570217132568359 0.4851255118846893310546875 0.57197172939777374267578125 +0.00102800000458955773444125192384 -0.793317604064941450658920985006 0.103177595138549807463057561563 +0.00102800000458955773444125192384 0.793317604064941450658920985006 0.103177595138549807463057561563 +0.00103484997525811191036726466308 -0.0292355000972747830489950615629 -0.0405488997697830214073100307814 +0.00103484997525811191036726466308 0.0292355000972747830489950615629 -0.0405488997697830214073100307814 +0.0010538999922573566436767578125 -0.129399749636650074346988503748 0.0758592009544372530838174384371 +0.0010538999922573566436767578125 0.129399749636650074346988503748 0.0758592009544372530838174384371 +0.00106824999675154681637312403808 -0.00328784994781017303466796875 0.0498803496360778822471537807814 +0.00106824999675154681637312403808 0.00328784994781017303466796875 0.0498803496360778822471537807814 +0.00109225000487640495731855860839 -0.842899954319000221936164507497 0.109626194834709159153796065311 +0.00109225000487640495731855860839 0.842899954319000221936164507497 0.109626194834709159153796065311 +0.00109360003843903550238558786134 -0.517467212677002019738381477509 0.610103178024292036596420985006 +0.00109360003843903550238558786134 0.517467212677002019738381477509 0.610103178024292036596420985006 +0.001104000024497509002685546875 -0.386556792259216353002670985006 0.102823603153228762541182561563 +0.001104000024497509002685546875 0.386556792259216353002670985006 0.102823603153228762541182561563 +0.00111839999444782720906810258299 -0.0612421497702598516266192518742 -0.136923900246620183773771373126 +0.00111839999444782720906810258299 0.0612421497702598516266192518742 -0.136923900246620183773771373126 +0.00114569999277591705322265625 -0.0355838991701602908035440009371 0.145713749527931202276676003748 +0.00114569999277591705322265625 0.0355838991701602908035440009371 0.145713749527931202276676003748 +0.00115595003589987767832203413576 -0.039172351360321044921875 -0.0310514509677886976768412807814 +0.00115595003589987767832203413576 0.039172351360321044921875 -0.0310514509677886976768412807814 +0.00115650000516325239703629979005 -0.892482304573059104235710492503 0.116074794530868538600110184689 +0.00115650000516325239703629979005 0.892482304573059104235710492503 0.116074794530868538600110184689 +0.00116195004084147508575941554199 -0.549808913469314597399772992503 0.648234626650810219494758257497 +0.00116195004084147508575941554199 0.549808913469314597399772992503 0.648234626650810219494758257497 +0.00121004995889961719512939453125 -0.123775649070739734991519753748 -0.0847239017486572237869424384371 +0.00121004995889961719512939453125 0.123775649070739734991519753748 -0.0847239017486572237869424384371 +0.0012207500054500996199136064746 -0.942064654827117875512954014994 0.122523394227027890290848688437 +0.0012207500054500996199136064746 0.942064654827117875512954014994 0.122523394227027890290848688437 +0.001228000037372112274169921875 -0.0468423992395401028732138115629 0.0883418023586273193359375 +0.001228000037372112274169921875 0.0468423992395401028732138115629 0.0883418023586273193359375 +0.00123030004324391488597367771973 -0.582150614261627175061164507497 0.686366075277328513415397992503 +0.00123030004324391488597367771973 0.582150614261627175061164507497 0.686366075277328513415397992503 +0.00124200002755969762802124023438 -0.434876391291618369372429242503 0.115676553547382363063000809689 +0.00124200002755969762802124023438 0.434876391291618369372429242503 0.115676553547382363063000809689 +0.00126199994701892137527465820312 -0.2306700050830841064453125 0.09638349711894989013671875 +0.00126199994701892137527465820312 0.2306700050830841064453125 0.09638349711894989013671875 +0.00128500000573694705963134765625 -0.9916470050811767578125 0.128971993923187255859375 +0.00128500000573694705963134765625 0.9916470050811767578125 0.128971993923187255859375 +0.00129865004564635446934750540038 -0.614492315053939752722556022491 0.724497523903846696313735264994 +0.00129865004564635446934750540038 0.614492315053939752722556022491 0.724497523903846696313735264994 +0.00133260004222393048899097944826 -0.0172529995441436760639231096093 -0.0984914004802703857421875 +0.00133260004222393048899097944826 0.0172529995441436760639231096093 -0.0984914004802703857421875 +0.00135779995471239098639437692384 -0.0173074498772621161724050153907 -0.04688934981822967529296875 +0.00135779995471239098639437692384 0.0173074498772621161724050153907 -0.04688934981822967529296875 +0.00136700004804879426956176757812 -0.64683401584625244140625 0.762628972530364990234375 +0.00136700004804879426956176757812 0.64683401584625244140625 0.762628972530364990234375 +0.00138000003062188625335693359375 -0.4831959903240203857421875 0.12852950394153594970703125 +0.00138000003062188625335693359375 0.4831959903240203857421875 0.12852950394153594970703125 +0.00140519998967647552490234375 -0.172532999515533469470085492503 0.101145601272583013363615123126 +0.00140519998967647552490234375 0.172532999515533469470085492503 0.101145601272583013363615123126 +0.00143585000187158601941961322268 -0.0151898995041847232473353201954 0.0476152002811431884765625 +0.00143585000187158601941961322268 0.0151898995041847232473353201954 0.0476152002811431884765625 +0.00148480003699660314218922163576 -0.0445869505405426039268412807814 -0.0225787505507469184184987653907 +0.00148480003699660314218922163576 0.0445869505405426039268412807814 -0.0225787505507469184184987653907 +0.00149119999259710316226457127442 -0.0816561996936798206725427462516 -0.182565200328826920950220369377 +0.00149119999259710316226457127442 0.0816561996936798206725427462516 -0.182565200328826920950220369377 +0.00151439993642270569369767674317 -0.276804006099700905529914507497 0.115660196542739859837389815311 +0.00151439993642270569369767674317 0.276804006099700905529914507497 0.115660196542739859837389815311 +0.00151800003368407509553306145023 -0.531515589356422513134248220013 0.141382454335689550228849498126 +0.00151800003368407509553306145023 0.531515589356422513134248220013 0.141382454335689550228849498126 +0.001527599990367889404296875 -0.0474451988935470636565838731258 0.194284999370574973376335492503 +0.001527599990367889404296875 0.0474451988935470636565838731258 0.194284999370574973376335492503 +0.00159290004521608365671558882326 -0.0472215503454208387901225307814 -0.016358099877834320068359375 +0.00159290004521608365671558882326 0.0472215503454208387901225307814 -0.016358099877834320068359375 +0.001613399945199489593505859375 -0.165034198760986350329460492503 -0.112965202331542974301115123126 +0.001613399945199489593505859375 0.165034198760986350329460492503 -0.112965202331542974301115123126 +0.00164149999618530290784734759768 -0.0372666507959365858604350307814 0.0332941502332687391807475307814 +0.00164149999618530290784734759768 0.0372666507959365858604350307814 0.0332941502332687391807475307814 +0.0016560000367462635040283203125 -0.579835188388824418481704014994 0.154235404729843122995092130623 +0.0016560000367462635040283203125 0.579835188388824418481704014994 0.154235404729843122995092130623 +0.00168414991348981874647039447268 -0.0489713013172149713714276231258 -0.00994874984025955269584251539072 +0.00168414991348981874647039447268 0.0489713013172149713714276231258 -0.00994874984025955269584251539072 +0.001700649969279766082763671875 -0.02683889865875244140625 0.0421518504619598430305238423443 +0.001700649969279766082763671875 0.02683889865875244140625 0.0421518504619598430305238423443 +0.00173010006546974186465714939942 -0.00532465018332004599160844904304 -0.0496855497360229533820863423443 +0.00173010006546974186465714939942 0.00532465018332004599160844904304 -0.0496855497360229533820863423443 +0.00175439994782209405035922067384 -0.0498458504676818903167401231258 -0.00350884981453418757710305264652 +0.00175439994782209405035922067384 0.0498458504676818903167401231258 -0.00350884981453418757710305264652 +0.0017564999870955944061279296875 -0.21566624939441680908203125 0.126432001590728759765625 +0.0017564999870955944061279296875 0.21566624939441680908203125 0.126432001590728759765625 +0.00176679992582648979528026078611 -0.322938007116317704614516514994 0.134936895966529829538060880623 +0.00176679992582648979528026078611 0.322938007116317704614516514994 0.134936895966529829538060880623 +0.00179319996386766438052629002442 -0.0697031974792480524261151231258 0.0716816008090972872635049384371 +0.00179319996386766438052629002442 0.0697031974792480524261151231258 0.0716816008090972872635049384371 +0.00179400003980845212936401367188 -0.628154787421226545873764735006 0.167088355123996751272485994377 +0.00179400003980845212936401367188 0.628154787421226545873764735006 0.167088355123996751272485994377 +0.00181744992733001708984375 -0.0498803496360778822471537807814 0.0029408000409603118896484375 +0.00181744992733001708984375 0.0498803496360778822471537807814 0.0029408000409603118896484375 +0.0018420000560581684112548828125 -0.0702635988593101473709268134371 0.13251270353794097900390625 +0.0018420000560581684112548828125 0.0702635988593101473709268134371 0.13251270353794097900390625 +0.00186399999074637889862060546875 -0.102070249617099761962890625 -0.22820650041103363037109375 +0.00186399999074637889862060546875 0.102070249617099761962890625 -0.22820650041103363037109375 +0.00188800003379583367438265817384 -0.0490741491317749078948651231258 0.00938955023884773323783470289072 +0.00188800003379583367438265817384 0.0490741491317749078948651231258 0.00938955023884773323783470289072 +0.00190260000526905077161687884768 -0.0368853509426116943359375 -0.0337024003267288249641175923443 +0.00190260000526905077161687884768 0.0368853509426116943359375 -0.0337024003267288249641175923443 +0.00190949998795986175537109375 -0.0593064986169338226318359375 0.24285624921321868896484375 +0.00190949998795986175537109375 0.0593064986169338226318359375 0.24285624921321868896484375 +0.00193200004287064053785927253415 -0.676474386453628451221220529987 0.179941305518150324038728626874 +0.00193200004287064053785927253415 0.676474386453628451221220529987 0.179941305518150324038728626874 +0.00198254995048046138081399014652 -0.0473910510540008558799662807814 0.0158164501190185546875 +0.00198254995048046138081399014652 0.0473910510540008558799662807814 0.0158164501190185546875 +0.00199890006333589562506625192384 -0.0258794993162155158306081403907 -0.14773710072040557861328125 +0.00199890006333589562506625192384 0.0258794993162155158306081403907 -0.14773710072040557861328125 +0.00201674993149936199188232421875 -0.20629274845123291015625 -0.1412065029144287109375 +0.00201674993149936199188232421875 0.20629274845123291015625 -0.1412065029144287109375 +0.00201919991523027411370327932616 -0.369072008132934614721420985006 0.154213595390319840872095369377 +0.00201919991523027411370327932616 0.369072008132934614721420985006 0.154213595390319840872095369377 +0.00206969995051622382073452932616 -0.0584710001945495660979901231258 -0.0810977995395660428146200615629 +0.00206969995051622382073452932616 0.0584710001945495660979901231258 -0.0810977995395660428146200615629 +0.00207000004593282938003540039062 -0.72479398548603057861328125 0.192794255912303924560546875 +0.00207000004593282938003540039062 0.72479398548603057861328125 0.192794255912303924560546875 +0.00209079999476671210198452932616 -0.0448199003934860243369975307814 0.0220635995268821730186381557814 +0.00209079999476671210198452932616 0.0448199003934860243369975307814 0.0220635995268821730186381557814 +0.002107799984514713287353515625 -0.258799499273300148693977007497 0.151718401908874506167634876874 +0.002107799984514713287353515625 0.258799499273300148693977007497 0.151718401908874506167634876874 +0.0021191500127315521240234375 -0.0258982509374618558029013115629 -0.0427175492048263577560263115629 +0.0021191500127315521240234375 0.0258982509374618558029013115629 -0.0427175492048263577560263115629 +0.00213140007108449927239468557616 -0.00655995011329650948295189039072 0.0495219498872756999641175923443 +0.00213140007108449927239468557616 0.00655995011329650948295189039072 0.0495219498872756999641175923443 +0.00213649999350309363274624807616 -0.0065756998956203460693359375 0.0997606992721557644943075615629 +0.00213649999350309363274624807616 0.0065756998956203460693359375 0.0997606992721557644943075615629 +0.00220800004899501800537109375 -0.773113584518432706005341970013 0.205647206306457525082365123126 +0.00220800004899501800537109375 0.773113584518432706005341970013 0.205647206306457525082365123126 +0.00223679998889565441813620516598 -0.122484299540519703253238503748 -0.273847800493240367547542746252 +0.00223679998889565441813620516598 0.122484299540519703253238503748 -0.273847800493240367547542746252 +0.00227159990463405864896673236331 -0.415206009149551413806022992503 0.173490294814109796694978626874 +0.00227159990463405864896673236331 0.415206009149551413806022992503 0.173490294814109796694978626874 +0.0022913999855518341064453125 -0.0711677983403205816070880018742 0.291427499055862404553352007497 +0.0022913999855518341064453125 0.0711677983403205816070880018742 0.291427499055862404553352007497 +0.00231190007179975535664406827152 -0.07834470272064208984375 -0.0621029019355773953536825615629 +0.00231190007179975535664406827152 0.07834470272064208984375 -0.0621029019355773953536825615629 +0.00234600005205720663070678710938 -0.821433183550834611352797764994 0.218500156700611097848607755623 +0.00234600005205720663070678710938 0.821433183550834611352797764994 0.218500156700611097848607755623 +0.00240609999746084230604070697268 -0.0395054012537002577354350307814 0.0305537998676300055767018903907 +0.00240609999746084230604070697268 0.0395054012537002577354350307814 0.0305537998676300055767018903907 +0.00241560004651546504292336514652 -0.0140157997608184817922571951954 -0.0479345500469207791427450615629 +0.00241560004651546504292336514652 0.0140157997608184817922571951954 -0.0479345500469207791427450615629 +0.0024200999177992343902587890625 -0.247551298141479469983039507497 -0.169447803497314447573884876874 +0.0024200999177992343902587890625 0.247551298141479469983039507497 -0.169447803497314447573884876874 +0.00244475007057189976100719519536 -0.0183011502027511617496369211722 0.0464659988880157526214276231258 +0.00244475007057189976100719519536 0.0183011502027511617496369211722 0.0464659988880157526214276231258 +0.00245600007474422454833984375 -0.0936847984790802057464276231258 0.176683604717254638671875 +0.00245600007474422454833984375 0.0936847984790802057464276231258 0.176683604717254638671875 +0.0024590999819338321685791015625 -0.301932749152183488305922764994 0.177004802227020252569644753748 +0.0024590999819338321685791015625 0.301932749152183488305922764994 0.177004802227020252569644753748 +0.00248400005511939525604248046875 -0.869752782583236738744858485006 0.231353107094764726126001619377 +0.00248400005511939525604248046875 0.869752782583236738744858485006 0.231353107094764726126001619377 +0.00252399989403784275054931640625 -0.461340010166168212890625 0.1927669942378997802734375 +0.00252399989403784275054931640625 0.461340010166168212890625 0.1927669942378997802734375 +0.00260959998704493037133267385741 -0.142898349463939644543586382497 -0.319489100575447049212840511245 +0.00260959998704493037133267385741 0.142898349463939644543586382497 -0.319489100575447049212840511245 +0.00262200005818158388137817382812 -0.918072381615638644092314279987 0.244206057488918298892244251874 +0.00262200005818158388137817382812 0.918072381615638644092314279987 0.244206057488918298892244251874 +0.00263950005173683175177523629884 -0.0344092488288879408409037807814 -0.03618060052394866943359375 +0.00263950005173683175177523629884 0.0344092488288879408409037807814 -0.03618060052394866943359375 +0.00266520008444786097798195889652 -0.0345059990882873521278462192186 -0.196982800960540771484375 +0.00266520008444786097798195889652 0.0345059990882873521278462192186 -0.196982800960540771484375 +0.00267329998314380645751953125 -0.0830290980637073405823400662484 0.339998748898506120141860264994 +0.00267329998314380645751953125 0.0830290980637073405823400662484 0.339998748898506120141860264994 +0.00268979994580149624552878329098 -0.104554796218872064761384876874 0.107522401213645937834151311563 +0.00268979994580149624552878329098 0.104554796218872064761384876874 0.107522401213645937834151311563 +0.00271559990942478197278875384768 -0.0346148997545242323448100307814 -0.0937786996364593505859375 +0.00271559990942478197278875384768 0.0346148997545242323448100307814 -0.0937786996364593505859375 +0.0027600000612437725067138671875 -0.966391980648040771484375 0.2570590078830718994140625 +0.0027600000612437725067138671875 0.966391980648040771484375 0.2570590078830718994140625 +0.00277580004185438164801547067384 -0.0300747990608215345909037807814 0.0398472487926483168174662807814 +0.00277580004185438164801547067384 0.0300747990608215345909037807814 0.0398472487926483168174662807814 +0.0027763998834416272858127694434 -0.507474011182785122997529470013 0.212043693661689763851896373126 +0.0027763998834416272858127694434 0.507474011182785122997529470013 0.212043693661689763851896373126 +0.00279680006206035631360906634768 -0.00203200001269578925042202932616 -0.0498803496360778822471537807814 +0.00279680006206035631360906634768 0.00203200001269578925042202932616 -0.0498803496360778822471537807814 +0.0028103999793529510498046875 -0.345065999031066938940170985006 0.202291202545166026727230246252 +0.0028103999793529510498046875 0.345065999031066938940170985006 0.202291202545166026727230246252 +0.00282344990409910678863525390625 -0.288809847831726029809829014994 -0.197689104080200184210269753748 +0.00282344990409910678863525390625 0.288809847831726029809829014994 -0.197689104080200184210269753748 +0.00287170000374317203883922644536 -0.0303797990083694464946706403907 0.095230400562286376953125 +0.00287170000374317203883922644536 0.0303797990083694464946706403907 0.095230400562286376953125 +0.00296960007399320628437844327152 -0.0891739010810852078536825615629 -0.0451575011014938368369975307814 +0.00296960007399320628437844327152 0.0891739010810852078536825615629 -0.0451575011014938368369975307814 +0.00298239998519420632452914254884 -0.163312399387359641345085492503 -0.365130400657653841900440738755 +0.00298239998519420632452914254884 0.163312399387359641345085492503 -0.365130400657653841900440738755 +0.00302879987284541138739535348634 -0.553608012199401811059829014994 0.231320393085479719674779630623 +0.00302879987284541138739535348634 0.553608012199401811059829014994 0.231320393085479719674779630623 +0.00305519998073577880859375 -0.0948903977870941273131677462516 0.388569998741149946752670985006 +0.00305519998073577880859375 0.0948903977870941273131677462516 0.388569998741149946752670985006 +0.00306059997528791444959539447268 -0.0427666485309600857833700615629 -0.0257225513458251980880575615629 +0.00306059997528791444959539447268 0.0427666485309600857833700615629 -0.0257225513458251980880575615629 +0.0030700000934302806854248046875 -0.117105998098850250244140625 0.22085450589656829833984375 +0.0030700000934302806854248046875 0.117105998098850250244140625 0.22085450589656829833984375 +0.00310454992577433594794222848634 -0.0877065002918243352691973768742 -0.121646699309349057283036188437 +0.00310454992577433594794222848634 0.0877065002918243352691973768742 -0.121646699309349057283036188437 +0.00315764993429183985981789639652 -0.0224126994609832770610768903907 -0.0445836514234542874435263115629 +0.00315764993429183985981789639652 0.0224126994609832770610768903907 -0.0445836514234542874435263115629 +0.0031616999767720699310302734375 -0.388199248909950278552116742503 0.227577602863311773129240123126 +0.0031616999767720699310302734375 0.388199248909950278552116742503 0.227577602863311773129240123126 +0.00316370017826557176771062884768 -0.04151774942874908447265625 0.0276815503835678121402619211722 +0.00316370017826557176771062884768 0.04151774942874908447265625 0.0276815503835678121402619211722 +0.00318434983491897591681429879884 -0.009800650179386138916015625 0.0489265501499176053146200615629 +0.00318434983491897591681429879884 0.009800650179386138916015625 0.0489265501499176053146200615629 +0.00318580009043216731343117764652 -0.0944431006908416775802450615629 -0.03271619975566864013671875 +0.00318580009043216731343117764652 0.0944431006908416775802450615629 -0.03271619975566864013671875 +0.00320474999025464066595980661134 -0.00986354984343051910400390625 0.149641048908233625924779630623 +0.00320474999025464066595980661134 0.00986354984343051910400390625 0.149641048908233625924779630623 +0.00322679989039897918701171875 -0.330068397521972700658920985006 -0.225930404663085948602230246252 +0.00322679989039897918701171875 0.330068397521972700658920985006 -0.225930404663085948602230246252 +0.00328119986224919548897793752928 -0.599742013216018721166733485006 0.250597092509269703253238503748 +0.00328119986224919548897793752928 0.599742013216018721166733485006 0.250597092509269703253238503748 +0.00328299999237060581569469519536 -0.0745333015918731717208700615629 0.0665883004665374783614950615629 +0.00328299999237060581569469519536 0.0745333015918731717208700615629 0.0665883004665374783614950615629 +0.00331325009465217607679266009768 -0.0458121001720428466796875 -0.019755400717258453369140625 +0.00331325009465217607679266009768 0.0458121001720428466796875 -0.019755400717258453369140625 +0.003331500105559825897216796875 -0.04313249886035919189453125 -0.24622850120067596435546875 +0.003331500105559825897216796875 0.04313249886035919189453125 -0.24622850120067596435546875 +0.00335519998334348227772561124027 -0.183726449310779582635433371252 -0.410771700739860523565738503748 +0.00335519998334348227772561124027 0.183726449310779582635433371252 -0.410771700739860523565738503748 +0.00336829982697963749294078894536 -0.0979426026344299427428552462516 -0.0198974996805191053916850307814 +0.00336829982697963749294078894536 0.0979426026344299427428552462516 -0.0198974996805191053916850307814 +0.00339464992284774788947054879884 -0.0480593502521514948089276231258 -0.0133706495165824904014506557814 +0.00339464992284774788947054879884 0.0480593502521514948089276231258 -0.0133706495165824904014506557814 +0.00340129993855953216552734375 -0.0536777973175048828125 0.0843037009239196860610476846887 +0.00340129993855953216552734375 0.0536777973175048828125 0.0843037009239196860610476846887 +0.00343195013701915775661266394536 -0.021356500685214996337890625 0.0450790494680404704719300923443 +0.00343195013701915775661266394536 0.021356500685214996337890625 0.0450790494680404704719300923443 +0.00343709997832775115966796875 -0.106751697510480886288419810626 0.437141248583793662341179242503 +0.00343709997832775115966796875 0.106751697510480886288419810626 0.437141248583793662341179242503 +0.00345705002546310442151922259768 0 0.0498803496360778822471537807814 +0.00346020013093948372931429879884 -0.0106493003666400919832168980861 -0.0993710994720459067641726846887 +0.00346020013093948372931429879884 0.0106493003666400919832168980861 -0.0993710994720459067641726846887 +0.00346079990267753609747836129884 -0.010650999844074249267578125 -0.0487296491861343439300213731258 +0.00346079990267753609747836129884 0.010650999844074249267578125 -0.0487296491861343439300213731258 +0.00346785010769963238444479891598 -0.117517054080963134765625 -0.0931543529033660860916299384371 +0.00346785010769963238444479891598 0.117517054080963134765625 -0.0931543529033660860916299384371 +0.00349804982542991672878063269536 -0.04938440024852752685546875 -0.00699604973196983354749578509768 +0.00349804982542991672878063269536 0.04938440024852752685546875 -0.00699604973196983354749578509768 +0.00350879989564418810071844134768 -0.0996917009353637806334802462516 -0.00701769962906837515420610529304 +0.00350879989564418810071844134768 0.0996917009353637806334802462516 -0.00701769962906837515420610529304 +0.003512999974191188812255859375 -0.4313324987888336181640625 0.25286400318145751953125 +0.003512999974191188812255859375 0.4313324987888336181640625 0.25286400318145751953125 +0.00353359985165297959056052157223 -0.645876014232635409229033029987 0.269873791933059659076121761245 +0.00353359985165297959056052157223 0.645876014232635409229033029987 0.269873791933059659076121761245 +0.00358639992773532876105258004884 -0.139406394958496104852230246252 0.143363201618194574527009876874 +0.00358639992773532876105258004884 0.139406394958496104852230246252 0.143363201618194574527009876874 +0.00361079983413219477925149014652 -0.0326745986938476590255575615629 0.0376740485429763807823100307814 +0.00361079983413219477925149014652 0.0326745986938476590255575615629 0.0376740485429763807823100307814 +0.00362620018422603633198586514652 -0.0495219498872756999641175923443 0.0058674998581409454345703125 +0.00362620018422603633198586514652 0.0495219498872756999641175923443 0.0058674998581409454345703125 +0.00363014987669885158538818359375 -0.371326947212219260485710492503 -0.254171705245971712994190738755 +0.00363014987669885158538818359375 0.371326947212219260485710492503 -0.254171705245971712994190738755 +0.0036348998546600341796875 -0.0997606992721557644943075615629 0.005881600081920623779296875 +0.0036348998546600341796875 0.0997606992721557644943075615629 0.005881600081920623779296875 +0.00366994999349117305073586514652 -0.0483321487903594984580912807814 0.0122693501412868503225306326954 +0.00366994999349117305073586514652 0.0483321487903594984580912807814 0.0122693501412868503225306326954 +0.003684000112116336822509765625 -0.140527197718620294741853626874 0.2650254070758819580078125 +0.003684000112116336822509765625 0.140527197718620294741853626874 0.2650254070758819580078125 +0.0037279999814927577972412109375 -0.20414049923419952392578125 -0.4564130008220672607421875 +0.0037279999814927577972412109375 0.20414049923419952392578125 -0.4564130008220672607421875 +0.00375174991786479975972024014652 -0.0314153492450714097450337192186 -0.0387169003486633328536825615629 +0.00375174991786479975972024014652 0.0314153492450714097450337192186 -0.0387169003486633328536825615629 +0.0037615001201629638671875 -0.0432933986186981242805238423443 0.024729199707508087158203125 +0.0037615001201629638671875 0.0432933986186981242805238423443 0.024729199707508087158203125 +0.00377600006759166734876531634768 -0.0981482982635498157897302462516 0.0187791004776954664756694057814 +0.00377600006759166734876531634768 0.0981482982635498157897302462516 0.0187791004776954664756694057814 +0.00378599984105676412582397460938 -0.6920100152492523193359375 0.28915049135684967041015625 +0.00378599984105676412582397460938 0.6920100152492523193359375 0.28915049135684967041015625 +0.00380520001053810154323375769536 -0.073770701885223388671875 -0.0674048006534576499282351846887 +0.00380520001053810154323375769536 0.073770701885223388671875 -0.0674048006534576499282351846887 +0.0038167499005794525146484375 -0.0462151497602462796310263115629 0.0186974003911018378520925153907 +0.0038167499005794525146484375 0.0462151497602462796310263115629 0.0186974003911018378520925153907 +0.00381884984672069575581399014652 -0.0408113986253738417198100307814 -0.0286330014467239407638388115629 +0.00381884984672069575581399014652 0.0408113986253738417198100307814 -0.0286330014467239407638388115629 +0.0038189999759197235107421875 -0.118612997233867645263671875 0.4857124984264373779296875 +0.0038189999759197235107421875 0.118612997233867645263671875 0.4857124984264373779296875 +0.0038642999716103081271623143067 -0.474465748667717013287159488755 0.278150403499603293688835492503 +0.0038642999716103081271623143067 0.474465748667717013287159488755 0.278150403499603293688835492503 +0.00392295010387897543496782404304 -0.0498458504676818903167401231258 0 +0.00392295010387897543496782404304 0.0498458504676818903167401231258 0 +0.00396509990096092276162798029304 -0.0947821021080017117599325615629 0.031632900238037109375 +0.00396509990096092276162798029304 0.0947821021080017117599325615629 0.031632900238037109375 +0.00399780012667179125013250384768 -0.0517589986324310316612162807814 -0.2954742014408111572265625 +0.00399780012667179125013250384768 0.0517589986324310316612162807814 -0.2954742014408111572265625 +0.0040334998629987239837646484375 -0.4125854969024658203125 -0.282413005828857421875 +0.0040334998629987239837646484375 0.4125854969024658203125 -0.282413005828857421875 +0.00403839983046054822740655865232 -0.738144016265869229442841970013 0.308427190780639681744190738755 +0.00403839983046054822740655865232 0.738144016265869229442841970013 0.308427190780639681744190738755 +0.00407339986413717252550226177732 -0.0519223496317863450477680942186 -0.14066804945468902587890625 +0.00407339986413717252550226177732 0.0519223496317863450477680942186 -0.14066804945468902587890625 +0.00410079997964203375043767962893 -0.224554549157619492971704744377 -0.502054300904274053429787727509 +0.00410079997964203375043767962893 0.224554549157619492971704744377 -0.502054300904274053429787727509 +0.00413939990103244764146905865232 -0.116942000389099132195980246252 -0.162195599079132085629240123126 +0.00413939990103244764146905865232 0.116942000389099132195980246252 -0.162195599079132085629240123126 +0.00414444990456104295911687884768 -0.0193362504243850714946706403907 -0.04592309892177581787109375 +0.00414444990456104295911687884768 0.0193362504243850714946706403907 -0.04592309892177581787109375 +0.00418159998953342420396905865232 -0.0896398007869720486739950615629 0.0441271990537643460372763115629 +0.00418159998953342420396905865232 0.0896398007869720486739950615629 0.0441271990537643460372763115629 +0.00420089997351169586181640625 -0.130474296957254431994499555003 0.534283748269081204540498220013 +0.00420089997351169586181640625 0.130474296957254431994499555003 0.534283748269081204540498220013 +0.00421559996902942657470703125 -0.517598998546600297387954014994 0.303436803817749012335269753748 +0.00421559996902942657470703125 0.517598998546600297387954014994 0.303436803817749012335269753748 +0.00422209985554218309583562884768 -0.0129944503307342536235768903907 0.0480969488620758070518412807814 +0.00422209985554218309583562884768 0.0129944503307342536235768903907 0.0480969488620758070518412807814 +0.004238300025463104248046875 -0.0517965018749237116058026231258 -0.0854350984096527155120526231258 +0.004238300025463104248046875 0.0517965018749237116058026231258 -0.0854350984096527155120526231258 +0.00426280014216899854478937115232 -0.0131199002265930189659037807814 0.0990438997745513999282351846887 +0.00426280014216899854478937115232 0.0131199002265930189659037807814 0.0990438997745513999282351846887 +0.00427299998700618726549249615232 -0.013151399791240692138671875 0.199521398544311528988615123126 +0.00427299998700618726549249615232 0.013151399791240692138671875 0.199521398544311528988615123126 +0.00429079981986433232898914269526 -0.784278017282485917505141514994 0.327703890204429637567073996252 +0.00429079981986433232898914269526 0.784278017282485917505141514994 0.327703890204429637567073996252 +0.0042980001308023929595947265625 -0.163948397338390339239566628748 0.30919630825519561767578125 +0.0042980001308023929595947265625 0.163948397338390339239566628748 0.30919630825519561767578125 +0.00430755000561475719089710167964 -0.0455696985125541645378355326557 0.1428456008434295654296875 +0.00430755000561475719089710167964 0.0455696985125541645378355326557 0.1428456008434295654296875 +0.00438189990818500536146062884768 -0.0242853507399559027934987653907 0.0434858500957489013671875 +0.00438189990818500536146062884768 0.0242853507399559027934987653907 0.0434858500957489013671875 +0.00442815013229846954345703125 -0.0351152509450912489463725307814 0.0353172987699508708625550923443 +0.00442815013229846954345703125 0.0351152509450912489463725307814 0.0353172987699508708625550923443 +0.00443684984929859638214111328125 -0.453844046592712435650440738755 -0.310654306411743186266960492503 +0.00443684984929859638214111328125 0.453844046592712435650440738755 -0.310654306411743186266960492503 +0.00445440011098980920972723041018 -0.133760851621627790963842130623 -0.0677362516522407448471554403113 +0.00445440011098980920972723041018 0.133760851621627790963842130623 -0.0677362516522407448471554403113 +0.00447359997779130883627241033196 -0.244968599081039406506477007497 -0.547695600986480735095085492503 +0.00447359997779130883627241033196 0.244968599081039406506477007497 -0.547695600986480735095085492503 +0.0044829999096691608428955078125 -0.1742579936981201171875 0.17920400202274322509765625 +0.0044829999096691608428955078125 0.1742579936981201171875 0.17920400202274322509765625 +0.00452940016984939609889782019536 -0.00329080000519752511115023629884 0.0496855497360229533820863423443 +0.00452940016984939609889782019536 0.00329080000519752511115023629884 0.0496855497360229533820863423443 +0.00453155003488063794908624615232 -0.0073705501854419708251953125 -0.04924570024013519287109375 +0.00453155003488063794908624615232 0.0073705501854419708251953125 -0.04924570024013519287109375 +0.00454319980926811729793346472661 -0.830412018299102827612045985006 0.346980589628219593389957253748 +0.00454319980926811729793346472661 0.830412018299102827612045985006 0.346980589628219593389957253748 +0.0045668999664485454559326171875 -0.560732248425483748022202235006 0.328723204135894786492855246252 +0.0045668999664485454559326171875 0.560732248425483748022202235006 0.328723204135894786492855246252 +0.004582799971103668212890625 -0.142335596680641163214176003748 0.582854998111724809106704014994 +0.004582799971103668212890625 0.142335596680641163214176003748 0.582854998111724809106704014994 +0.00458405017852783237819469519536 -0.0386285006999969524055238423443 -0.03141374886035919189453125 +0.00458405017852783237819469519536 0.0386285006999969524055238423443 -0.03141374886035919189453125 +0.00462380014359951071328813654304 -0.1566894054412841796875 -0.124205803871154790707365123126 +0.00462380014359951071328813654304 0.1566894054412841796875 -0.124205803871154790707365123126 +0.00466410014778375573568647283196 -0.0603854984045028644890074076557 -0.34471990168094635009765625 +0.00466410014778375573568647283196 0.0603854984045028644890074076557 -0.34471990168094635009765625 +0.00477870013564825075330633197268 -0.141664651036262495553685880623 -0.049074299633502960205078125 +0.00477870013564825075330633197268 0.141664651036262495553685880623 -0.049074299633502960205078125 +0.00479559979867190139951604876956 -0.876546019315719515674345529987 0.366257289052009549212840511245 +0.00479559979867190139951604876956 0.876546019315719515674345529987 0.366257289052009549212840511245 +0.00481219999492168461208141394536 -0.0790108025074005154708700615629 0.0611075997352600111534037807814 +0.00481219999492168461208141394536 0.0790108025074005154708700615629 0.0611075997352600111534037807814 +0.00483120009303093008584673029304 -0.0280315995216369635845143903907 -0.0958691000938415582854901231258 +0.00483120009303093008584673029304 0.0280315995216369635845143903907 -0.0958691000938415582854901231258 +0.00483900010585784981498314039072 -0.0282124012708663968185263115629 -0.0409956514835357679893412807814 +0.00483900010585784981498314039072 0.0282124012708663968185263115629 -0.0409956514835357679893412807814 +0.004840199835598468780517578125 -0.495102596282958939966079014994 -0.338895606994628895147769753748 +0.004840199835598468780517578125 0.495102596282958939966079014994 -0.338895606994628895147769753748 +0.00484639997594058565683061701179 -0.265382649004459403307976117503 -0.593336901068687416760383257497 +0.00484639997594058565683061701179 0.265382649004459403307976117503 -0.593336901068687416760383257497 +0.00488950014114379952201439039072 -0.0366023004055023234992738423443 0.0929319977760315052428552462516 +0.00488950014114379952201439039072 0.0366023004055023234992738423443 0.0929319977760315052428552462516 +0.00490084998309612326211626154304 -0.04414165019989013671875 -0.0229672506451606764366069057814 +0.00490084998309612326211626154304 0.04414165019989013671875 -0.0229672506451606764366069057814 +0.0049120001494884490966796875 -0.187369596958160411492855246252 0.35336720943450927734375 +0.0049120001494884490966796875 0.187369596958160411492855246252 0.35336720943450927734375 +0.004918199963867664337158203125 -0.603865498304366976611845529987 0.354009604454040505139289507497 +0.004918199963867664337158203125 0.603865498304366976611845529987 0.354009604454040505139289507497 +0.00492449998855590785618030480464 -0.111799952387809750642411188437 0.0998824506998062106033486884371 +0.00492449998855590785618030480464 0.111799952387809750642411188437 0.0998824506998062106033486884371 +0.00496469996869564056396484375 -0.154196896404027949945003683752 0.631426247954368635717514735006 +0.00496469996869564056396484375 0.154196896404027949945003683752 0.631426247954368635717514735006 +0.0050479997880756855010986328125 -0.92268002033233642578125 0.385533988475799560546875 +0.0050479997880756855010986328125 0.92268002033233642578125 0.385533988475799560546875 +0.00505244974046945537204944542964 -0.146913903951644886358707253748 -0.0298462495207786546180805942186 +0.00505244974046945537204944542964 0.146913903951644886358707253748 -0.0298462495207786546180805942186 +0.005101949907839298248291015625 -0.08051669597625732421875 0.126455551385879522152677623126 +0.005101949907839298248291015625 0.08051669597625732421875 0.126455551385879522152677623126 +0.00512470006942749092826439039072 -0.0468023985624313396125550923443 -0.016830749809741973876953125 +0.00512470006942749092826439039072 0.0468023985624313396125550923443 -0.016830749809741973876953125 +0.0051742498762905597686767578125 -0.1461775004863739013671875 -0.20274449884891510009765625 +0.0051742498762905597686767578125 0.1461775004863739013671875 -0.20274449884891510009765625 +0.00519030019640922494345014470696 -0.0159739505499601371074636091407 -0.149056649208068853207365123126 +0.00519030019640922494345014470696 0.0159739505499601371074636091407 -0.149056649208068853207365123126 +0.00520544983446598070325750384768 -0.0374715507030487088302450615629 0.0326923489570617661903462192186 +0.00520544983446598070325750384768 0.0374715507030487088302450615629 0.0326923489570617661903462192186 +0.00521919997408986074266534771482 -0.285796698927879289087172764994 -0.638978201150894098425681022491 +0.00521919997408986074266534771482 0.285796698927879289087172764994 -0.638978201150894098425681022491 +0.00522004999220371246337890625 -0.04861845076084136962890625 -0.0104401499032974257041850307814 +0.00522004999220371246337890625 0.04861845076084136962890625 -0.0104401499032974257041850307814 +0.0052335001528263092041015625 -0.0161068007349967970420756557814 -0.0470444500446319593955912807814 +0.0052335001528263092041015625 0.0161068499088287374332306711722 -0.0470444500446319593955912807814 +0.00523959994316101126260454279304 -0.0161260500550270101383087961722 0.04703719913959503173828125 +0.00523959994316101126260454279304 0.0161260500550270101383087961722 0.04703719913959503173828125 +0.00524354982189834117889404296875 -0.536361145973205610815170985006 -0.367136907577514659539730246252 +0.00524354982189834117889404296875 0.536361145973205610815170985006 -0.367136907577514659539730246252 +0.00526319984346628171739679302732 -0.149537551403045643194644753748 -0.0105265494436025622976282889454 +0.00526319984346628171739679302732 0.149537551403045643194644753748 -0.0105265494436025622976282889454 +0.0052694999612867832183837890625 -0.64699874818325042724609375 0.379296004772186279296875 +0.0052694999612867832183837890625 0.64699874818325042724609375 0.379296004772186279296875 +0.00527900010347366350355047259768 -0.0688184976577758816818075615629 -0.0723612010478973388671875 +0.00527900010347366350355047259768 0.0688184976577758816818075615629 -0.0723612010478973388671875 +0.00533040016889572195596391779304 -0.0690119981765747042556924384371 -0.39396560192108154296875 +0.00533040016889572195596391779304 0.0690119981765747042556924384371 -0.39396560192108154296875 +0.00533110015094280260267156634768 -0.0362646490335464463661274692186 -0.0340066492557525648643412807814 +0.00533110015094280260267156634768 0.0362646490335464463661274692186 -0.0340066492557525648643412807814 +0.0053412499837577342987060546875 -0.01643924973905086517333984375 0.249401748180389404296875 +0.0053412499837577342987060546875 0.01643924973905086517333984375 0.249401748180389404296875 +0.0053465999662876129150390625 -0.166058196127414681164680132497 0.679997497797012240283720529987 +0.0053465999662876129150390625 0.166058196127414681164680132497 0.679997497797012240283720529987 +0.00537959989160299249105756658196 -0.209109592437744129522769753748 0.215044802427291875668302623126 +0.00537959989160299249105756658196 0.209109592437744129522769753748 0.215044802427291875668302623126 +0.00541759990155696920938188654304 -0.0489264994859695476203675923443 0.00876614972949027980442249230464 +0.00541759990155696920938188654304 0.0489264994859695476203675923443 0.00876614972949027980442249230464 +0.00543119981884956394557750769536 -0.0692297995090484646896200615629 -0.187557399272918701171875 +0.00543119981884956394557750769536 0.0692297995090484646896200615629 -0.187557399272918701171875 +0.00545234978199005126953125 -0.149641048908233625924779630623 0.0088224001228809356689453125 +0.00545234978199005126953125 0.149641048908233625924779630623 0.0088224001228809356689453125 +0.00546615011990070343017578125 -0.0276223987340927130962331403907 0.0413173496723175104339276231258 +0.00546615011990070343017578125 0.0276223987340927130962331403907 0.0413173496723175104339276231258 +0.00549860000610351631888939039072 -0.0448399007320404094367738423443 0.0214276999235153212119975307814 +0.00549860000610351631888939039072 0.0448399007320404094367738423443 0.0214276999235153212119975307814 +0.00551785007119178806667125769536 -0.0473098486661911038497763115629 0.0152095496654510511924662807814 +0.00551785007119178806667125769536 0.0473098486661911038497763115629 0.0152095496654510511924662807814 +0.0055260001681745052337646484375 -0.210790796577930455990568248126 0.39753811061382293701171875 +0.0055260001681745052337646484375 0.210790796577930455990568248126 0.39753811061382293701171875 +0.00555160008370876329603094134768 -0.0601495981216430691818075615629 0.0796944975852966336349325615629 +0.00555160008370876329603094134768 0.0601495981216430691818075615629 0.0796944975852966336349325615629 +0.0055802501738071441650390625 -0.00405424982309341482705766779304 -0.0495219498872756999641175923443 +0.0055802501738071441650390625 0.00405424982309341482705766779304 -0.0495219498872756999641175923443 +0.00559199997223913669586181640625 -0.306210748851299285888671875 -0.68461950123310089111328125 +0.00559199997223913669586181640625 0.306210748851299285888671875 -0.68461950123310089111328125 +0.00559360012412071262721813269536 -0.00406400002539157850084405865232 -0.0997606992721557644943075615629 +0.00559360012412071262721813269536 0.00406400002539157850084405865232 -0.0997606992721557644943075615629 +0.00559870004653930698756969519536 0 -0.0496855497360229533820863423443 +0.00560954995453357731227672644536 -0.00658735036849975637979204279304 0.04924570024013519287109375 +0.00560954995453357731227672644536 0.00658735036849975637979204279304 0.04924570024013519287109375 +0.005620799958705902099609375 -0.690131998062133877880341970013 0.404582405090332053454460492503 +0.005620799958705902099609375 0.690131998062133877880341970013 0.404582405090332053454460492503 +0.0056468998081982135772705078125 -0.577619695663452059619658029987 -0.395378208160400368420539507497 +0.0056468998081982135772705078125 0.577619695663452059619658029987 -0.395378208160400368420539507497 +0.00566400010138750058946710552732 -0.147222447395324695929019753748 0.0281686507165431962440571567186 +0.00566400010138750058946710552732 0.147222447395324695929019753748 0.0281686507165431962440571567186 +0.00567910000681877153577703509768 -0.0495523005723953260948100307814 -0.00350989997386932407741344519536 +0.00567910000681877153577703509768 0.0495523005723953260948100307814 -0.00350989997386932407741344519536 +0.00570780001580715144748889855464 -0.1106560528278350830078125 -0.101107200980186454075671065311 +0.00570780001580715144748889855464 0.1106560528278350830078125 -0.101107200980186454075671065311 +0.00572849996387958526611328125 -0.1779194958508014678955078125 0.72856874763965606689453125 +0.00572849996387958526611328125 0.1779194958508014678955078125 0.72856874763965606689453125 +0.00573889985680580208549095289072 -0.0495824009180068983604350307814 0.00294139999896287935438055072268 +0.00573889985680580208549095289072 0.0495824009180068983604350307814 0.00294139999896287935438055072268 +0.00574340000748634407767845289072 -0.0607595980167388929893412807814 0.19046080112457275390625 +0.00574340000748634407767845289072 0.0607595980167388929893412807814 0.19046080112457275390625 +0.0057797501794993877410888671875 -0.195861756801605224609375 -0.1552572548389434814453125 +0.0057797501794993877410888671875 0.195861756801605224609375 -0.1552572548389434814453125 +0.00589405000209808349609375 -0.0248217493295669576480744211722 -0.0430016487836837810188050923443 +0.00589405000209808349609375 0.0248217493295669576480744211722 -0.0430016487836837810188050923443 +0.00593920014798641256875688654304 -0.178347802162170415707365123126 -0.0903150022029876736739950615629 +0.00593920014798641256875688654304 0.178347802162170415707365123126 -0.0903150022029876736739950615629 +0.00594764985144138284139936345696 -0.142173153162002546823217130623 0.0474493503570556640625 +0.00594764985144138284139936345696 0.142173153162002546823217130623 0.0474493503570556640625 +0.00595555007457733171644109759768 -0.0396322488784790066818075615629 0.02989675104618072509765625 +0.00595555007457733171644109759768 0.0396322488784790066818075615629 0.02989675104618072509765625 +0.00596479997038841264905828509768 -0.326624798774719282690170985006 -0.730260801315307683800881477509 +0.00596479997038841264905828509768 0.326624798774719282690170985006 -0.730260801315307683800881477509 +0.0059720999561250209808349609375 -0.733265247941017106469985264994 0.429868805408477772100894753748 +0.0059720999561250209808349609375 0.733265247941017106469985264994 0.429868805408477772100894753748 +0.00599670019000768644151788677732 -0.0776384979486465509612713731258 -0.44321130216121673583984375 +0.00599670019000768644151788677732 0.0776384979486465509612713731258 -0.44321130216121673583984375 +0.00605024979449808597564697265625 -0.61887824535369873046875 -0.4236195087432861328125 +0.00605024979449808597564697265625 0.61887824535369873046875 -0.4236195087432861328125 +0.0061103999614715576171875 -0.189780795574188254626335492503 0.777139997482299893505341970013 +0.0061103999614715576171875 0.189780795574188254626335492503 0.777139997482299893505341970013 +0.00612119995057582889919078894536 -0.0855332970619201715667401231258 -0.0514451026916503961761151231258 +0.00612119995057582889919078894536 0.0855332970619201715667401231258 -0.0514451026916503961761151231258 +0.006140000186860561370849609375 -0.23421199619770050048828125 0.4417090117931365966796875 +0.006140000186860561370849609375 0.23421199619770050048828125 0.4417090117931365966796875 +0.00620909985154867189588445697268 -0.175413000583648670538394753748 -0.243293398618698114566072376874 +0.00620909985154867189588445697268 0.175413000583648670538394753748 -0.243293398618698114566072376874 +0.00623200014233589189710516009768 -0.0191805005073547377159037807814 0.0457522511482238783409037807814 +0.00623200014233589189710516009768 0.0191805005073547377159037807814 0.0457522511482238783409037807814 +0.00627239998430013673963445697268 -0.134459701180458052194310880623 0.0661907985806465121170205634371 +0.00627239998430013673963445697268 0.134459701180458052194310880623 0.0661907985806465121170205634371 +0.00627619987353682500658136333982 -0.243961191177368141858039507497 0.250885602831840526238948996252 +0.00627619987353682500658136333982 0.243961191177368141858039507497 0.250885602831840526238948996252 +0.00628414973616600071315563269536 -0.0127588003873825087119975307814 -0.0479345500469207791427450615629 +0.00628414973616600071315563269536 0.0127588003873825087119975307814 -0.0479345500469207791427450615629 +0.00631529986858367971963579279304 -0.0448253989219665541221537807814 -0.0891673028469085748870526231258 +0.00631529986858367971963579279304 0.0448253989219665541221537807814 -0.0891673028469085748870526231258 +0.006323399953544139862060546875 -0.776398497819900557104233485006 0.455155205726623546258480246252 +0.006323399953544139862060546875 0.776398497819900557104233485006 0.455155205726623546258480246252 +0.00632740035653114353542125769536 -0.0830354988574981689453125 0.0553631007671356242805238423443 +0.00632740035653114353542125769536 0.0830354988574981689453125 0.0553631007671356242805238423443 +0.0063335001468658447265625 -0.0302868008613586432720143903907 0.03927589952945709228515625 +0.0063335001468658447265625 0.0302868008613586432720143903907 0.03927589952945709228515625 +0.00633759996853768773489301580071 -0.347038848698139168469367632497 -0.775902101397514365466179242503 +0.00633759996853768773489301580071 0.347038848698139168469367632497 -0.775902101397514365466179242503 +0.0063574500381946563720703125 -0.0776947528123855535309161268742 -0.128152647614479059390291126874 +0.0063574500381946563720703125 0.0776947528123855535309161268742 -0.128152647614479059390291126874 +0.00636869966983795183362859759768 -0.01960130035877227783203125 0.0978531002998352106292401231258 +0.00636869966983795183362859759768 0.01960130035877227783203125 0.0978531002998352106292401231258 +0.00637160018086433462686235529304 -0.188886201381683355160490123126 -0.0654323995113372802734375 +0.00637160018086433462686235529304 0.188886201381683355160490123126 -0.0654323995113372802734375 +0.00639420021325349825086492572268 -0.0196798503398895249794087192186 0.148565849661827092953458873126 +0.00639420021325349825086492572268 0.0196798503398895249794087192186 0.148565849661827092953458873126 +0.00640949998050928133191961322268 -0.0197270996868610382080078125 0.299282097816467251849559261245 +0.00640949998050928133191961322268 0.0197270996868610382080078125 0.299282097816467251849559261245 +0.0064535997807979583740234375 -0.660136795043945401317841970013 -0.451860809326171897204460492503 +0.0064535997807979583740234375 0.660136795043945401317841970013 -0.451860809326171897204460492503 +0.00645785033702850341796875 -0.0421953499317169189453125 -0.0260355502367019681075888115629 +0.00645785033702850341796875 0.0421953499317169189453125 -0.0260355502367019681075888115629 +0.00649229995906352996826171875 -0.201642095297574985846011941248 0.825711247324943498071547764994 +0.00649229995906352996826171875 0.201642095297574985846011941248 0.825711247324943498071547764994 +0.00656599998474121163138939039072 -0.149066603183746343441740123126 0.133176600933074956722990123126 +0.00656599998474121163138939039072 0.149066603183746343441740123126 0.133176600933074956722990123126 +0.006570599973201751708984375 -0.0415404498577117975433026231258 0.0270410507917404202560263115629 +0.006570599973201751708984375 0.0415404498577117975433026231258 0.0270410507917404202560263115629 +0.00659390017390251194362438269536 -0.0334802985191345256477113423443 -0.0365456998348236070106587192186 +0.00659390017390251194362438269536 0.0334802985191345256477113423443 -0.0365456998348236070106587192186 +0.00662650018930435215358532019536 -0.091624200344085693359375 -0.03951080143451690673828125 +0.00662650018930435215358532019536 0.091624200344085693359375 -0.03951080143451690673828125 +0.00666285008192062447318626539072 -0.00982050001621246476668503078145 0.0485711991786956787109375 +0.00666285008192062447318626539072 0.00982050001621246476668503078145 0.0485711991786956787109375 +0.00666300021111965179443359375 -0.0862649977207183837890625 -0.4924570024013519287109375 +0.00666300021111965179443359375 0.0862649977207183837890625 -0.4924570024013519287109375 +0.0066746999509632587432861328125 -0.819531747698783785693876779987 0.480441606044769264904914507497 +0.0066746999509632587432861328125 0.819531747698783785693876779987 0.480441606044769264904914507497 +0.00671039996668696455545122248054 -0.367452898621559165270866742503 -0.821543401479721047131477007497 +0.00671039996668696455545122248054 0.367452898621559165270866742503 -0.821543401479721047131477007497 +0.00673659965395927498588157789072 -0.195885205268859885485710492503 -0.0397949993610382107833700615629 +0.00673659965395927498588157789072 0.195885205268859885485710492503 -0.0397949993610382107833700615629 +0.00674889981746673583984375 -0.0452914506196975749641175923443 -0.0200782999396324178531525461722 +0.00674889981746673583984375 0.0452914506196975749641175923443 -0.0200782999396324178531525461722 +0.0067540002055466183752963083009 -0.257633195817470572741569867503 0.485879912972450311858807481258 +0.0067540002055466183752963083009 0.257633195817470572741569867503 0.485879912972450311858807481258 +0.006788999773561954498291015625 -0.086537249386310577392578125 -0.23444674909114837646484375 +0.006788999773561954498291015625 0.086537249386310577392578125 -0.23444674909114837646484375 +0.00678929984569549577894109759768 -0.0961187005043029896178552462516 -0.0267412990331649808029013115629 +0.00678929984569549577894109759768 0.0961187005043029896178552462516 -0.0267412990331649808029013115629 +0.0068025998771190643310546875 -0.107355594635009765625 0.168607401847839372122095369377 +0.0068025998771190643310546875 0.107355594635009765625 0.168607401847839372122095369377 +0.00685694976709783077239990234375 -0.701395344734191850122329014994 -0.480102109909057606085269753748 +0.00685694976709783077239990234375 0.701395344734191850122329014994 -0.480102109909057606085269753748 +0.00686390027403831551322532789072 -0.04271300137042999267578125 0.0901580989360809409438601846887 +0.00686390027403831551322532789072 0.04271300137042999267578125 0.0901580989360809409438601846887 +0.0068741999566555023193359375 -0.213503395020961772576839621252 0.874282497167587324682358485006 +0.0068741999566555023193359375 0.213503395020961772576839621252 0.874282497167587324682358485006 +0.00689759999513626150674516779304 0 0.0495219498872756999641175923443 +0.00690985023975372331800359759768 -0.0212659999728202833702006557814 -0.04472149908542633056640625 +0.00690985023975372331800359759768 0.0212659999728202833702006557814 -0.04472149908542633056640625 +0.00690995007753372227077282019536 -0.04755274951457977294921875 -0.0138198494911193851125696951954 +0.00690995007753372227077282019536 0.04755274951457977294921875 -0.0138198494911193851125696951954 +0.00691410005092620884303844519536 0 0.0997606992721557644943075615629 +0.00692040026187896745862859759768 -0.0212986007332801839664337961722 -0.198742198944091813528345369377 +0.00692040026187896745862859759768 0.0212986007332801839664337961722 -0.198742198944091813528345369377 +0.00692159980535507219495672259768 -0.02130199968814849853515625 -0.0974592983722686878600427462516 +0.00692159980535507219495672259768 0.02130199968814849853515625 -0.0974592983722686878600427462516 +0.00693570021539926476888959783196 -0.23503410816192626953125 -0.186308705806732172183259876874 +0.00693570021539926476888959783196 0.23503410816192626953125 -0.186308705806732172183259876874 +0.00699609965085983345756126539072 -0.0987688004970550537109375 -0.0139920994639396670949915701954 +0.00699609965085983345756126539072 0.0987688004970550537109375 -0.0139920994639396670949915701954 +0.00701759979128837620143688269536 -0.199383401870727561266960492503 -0.0140353992581367503084122105861 +0.00701759979128837620143688269536 0.199383401870727561266960492503 -0.0140353992581367503084122105861 +0.00702599994838237762451171875 -0.862664997577667236328125 0.5057280063629150390625 +0.00702599994838237762451171875 0.862664997577667236328125 0.5057280063629150390625 +0.00708319996483623964128595318357 -0.387866948544979051050063389994 -0.867184701561927728796774772491 +0.00708319996483623964128595318357 0.387866948544979051050063389994 -0.867184701561927728796774772491 +0.00715370029211044328870672259768 -0.0432463496923446710784588731258 0.024053700268268585205078125 +0.00715370029211044328870672259768 0.0432463496923446710784588731258 0.024053700268268585205078125 +0.00716560035943985054740501539072 -0.0328307509422302232215962192186 0.0370242506265640244911274692186 +0.00716560035943985054740501539072 0.0328307509422302232215962192186 0.0370242506265640244911274692186 +0.00717279985547065752210516009768 -0.278812789916992209704460492503 0.286726403236389149054019753748 +0.00717279985547065752210516009768 0.278812789916992209704460492503 0.286726403236389149054019753748 +0.007179250009357929229736328125 -0.075949497520923614501953125 0.2380760014057159423828125 +0.007179250009357929229736328125 0.075949497520923614501953125 0.2380760014057159423828125 +0.00718305036425590567178423029304 -0.0480969011783599909026776231258 0.0116227999329566959035853201954 +0.00718305036425590567178423029304 0.0480969011783599909026776231258 0.0116227999329566959035853201954 +0.00719460025429725664319891009768 -0.0221431002020835883403737653907 0.0442483991384506267219300923443 +0.00719460025429725664319891009768 0.0221431002020835883403737653907 0.0442483991384506267219300923443 +0.00721829999238252605076038292964 -0.118516203761100766267411188437 0.0916613996028900063217648153113 +0.00721829999238252605076038292964 0.118516203761100766267411188437 0.0916613996028900063217648153113 +0.00722159966826438955850298029304 -0.0653491973876953180511151231258 0.0753480970859527615646200615629 +0.00722159966826438955850298029304 0.0653491973876953180511151231258 0.0753480970859527615646200615629 +0.00722725018858909676322532789072 -0.0460958987474441583831463731258 0.0179703995585441603233256557814 +0.00722725018858909676322532789072 0.0460958987474441583831463731258 0.0179703995585441603233256557814 +0.00724269971251487783975298029304 -0.0401505500078201335578675923443 -0.0289046496152877835372763115629 +0.00724269971251487783975298029304 0.0401505500078201335578675923443 -0.0289046496152877835372763115629 +0.00724394982680678315573041814446 -0.204648500680923439709602007497 -0.283842298388481129034488503748 +0.00724394982680678315573041814446 0.204648500680923439709602007497 -0.283842298388481129034488503748 +0.00724680013954639382772748845696 -0.0420473992824554401726011576557 -0.143803650140762323550447376874 +0.00724680013954639382772748845696 0.0420473992824554401726011576557 -0.143803650140762323550447376874 +0.00725240036845207266397173029304 -0.0990438997745513999282351846887 0.011734999716281890869140625 +0.00725240036845207266397173029304 0.0990438997745513999282351846887 0.011734999716281890869140625 +0.00725609995424747467041015625 -0.225364694744348503796516069997 0.922853747010230929248564279987 +0.00725609995424747467041015625 0.225364694744348503796516069997 0.922853747010230929248564279987 +0.0072602997533977031707763671875 -0.742653894424438520971420985006 -0.508343410491943425988381477509 +0.0072602997533977031707763671875 0.742653894424438520971420985006 -0.508343410491943425988381477509 +0.007269799709320068359375 -0.199521398544311528988615123126 0.01176320016384124755859375 +0.007269799709320068359375 0.199521398544311528988615123126 0.01176320016384124755859375 +0.00728095024824142525443626539072 -0.00937144979834556544895374230464 -0.0485711991786956787109375 +0.00728095024824142525443626539072 0.00937144979834556544895374230464 -0.0485711991786956787109375 +0.00732930023223161714734930072268 -0.0948914974927902304946414346887 -0.54170270264148712158203125 +0.00732930023223161714734930072268 0.0948914974927902304946414346887 -0.54170270264148712158203125 +0.00733425021171569754829810960928 -0.0549034506082534748405699076557 0.139397996664047230108707253748 +0.00733425021171569754829810960928 0.0549034506082534748405699076557 0.139397996664047230108707253748 +0.00733989998698234610147173029304 -0.0966642975807189969161825615629 0.0245387002825737006450612653907 +0.00733989998698234610147173029304 0.0966642975807189969161825615629 0.0245387002825737006450612653907 +0.00736800022423267364501953125 -0.281054395437240589483707253748 0.530050814151763916015625 +0.00736800022423267364501953125 0.281054395437240589483707253748 0.530050814151763916015625 +0.0074240001849830150604248046875 -0.2229347527027130126953125 -0.112893752753734588623046875 +0.0074240001849830150604248046875 0.2229347527027130126953125 -0.112893752753734588623046875 +0.00743784978985786472682750769536 -0.04894255101680755615234375 -0.00702160000801086477822954279304 +0.00743784978985786472682750769536 0.04894255101680755615234375 -0.00702160000801086477822954279304 +0.007455999962985515594482421875 -0.4082809984683990478515625 -0.912826001644134521484375 +0.007455999962985515594482421875 0.4082809984683990478515625 -0.912826001644134521484375 +0.00747774997726082749777143376946 -0.02301494963467121124267578125 0.349162447452545154913394753748 +0.00747774997726082749777143376946 0.02301494963467121124267578125 0.349162447452545154913394753748 +0.00750349983572959951944048029304 -0.0628306984901428194900674384371 -0.0774338006973266657073651231258 +0.00750349983572959951944048029304 0.0628306984901428194900674384371 -0.0774338006973266657073651231258 +0.007523000240325927734375 -0.0865867972373962485610476846887 0.04945839941501617431640625 +0.007523000240325927734375 0.0865867972373962485610476846887 0.04945839941501617431640625 +0.00755200013518333469753063269536 -0.196296596527099631579460492503 0.0375582009553909329513388115629 +0.00755200013518333469753063269536 0.196296596527099631579460492503 0.0375582009553909329513388115629 +0.00755375027656555227822954279304 -0.0490741491317749078948651231258 0.00588789992034435306911266394536 +0.00755375027656555227822954279304 0.0490741491317749078948651231258 0.00588789992034435306911266394536 +0.00761040002107620308646751539072 -0.14754140377044677734375 -0.134809601306915299856470369377 +0.00761040002107620308646751539072 0.14754140377044677734375 -0.134809601306915299856470369377 +0.007633499801158905029296875 -0.0924302995204925592620526231258 0.0373948007822036757041850307814 +0.007633499801158905029296875 0.0924302995204925592620526231258 0.0373948007822036757041850307814 +0.00763769969344139151162798029304 -0.0816227972507476834396200615629 -0.0572660028934478815276776231258 +0.00763769969344139151162798029304 0.0816227972507476834396200615629 -0.0572660028934478815276776231258 +0.007637999951839447021484375 -0.23722599446773529052734375 0.971424996852874755859375 +0.007637999951839447021484375 0.23722599446773529052734375 0.971424996852874755859375 +0.00766364973969757556915283203125 -0.783912444114684969775908029987 -0.536584711074829079358039507497 +0.00766364973969757556915283203125 0.783912444114684969775908029987 -0.536584711074829079358039507497 +0.00769779980182647757119829279304 -0.0303736001253128058696706403907 -0.0389639496803283746917401231258 +0.00769779980182647757119829279304 0.0303736001253128058696706403907 -0.0389639496803283746917401231258 +0.00776669979095459019069469519536 -0.0131328999996185302734375 0.0476152002811431884765625 +0.00776669979095459019069469519536 0.0131328999996185302734375 0.0476152002811431884765625 +0.0078217498958110809326171875 -0.04938440024852752685546875 0 +0.0078217498958110809326171875 0.04938440024852752685546875 0 +0.00784590020775795086993564808608 -0.0996917009353637806334802462516 0 +0.00784590020775795086993564808608 0.0996917009353637806334802462516 0 +0.00791850015521049395428310191392 -0.103227746486663815583817438437 -0.10854180157184600830078125 +0.00791850015521049395428310191392 0.103227746486663815583817438437 -0.10854180157184600830078125 +0.00793019980192184552325596058608 -0.189564204216003423519865123126 0.06326580047607421875 +0.00793019980192184552325596058608 0.189564204216003423519865123126 0.06326580047607421875 +0.00793699994683265755424095289072 -0.0351989001035690335372763115629 0.0346127510070800767372212192186 +0.00793699994683265755424095289072 0.0351989001035690335372763115629 0.0346127510070800767372212192186 +0.007964500226080417633056640625 -0.23610775172710418701171875 -0.081790499389171600341796875 +0.007964500226080417633056640625 0.23610775172710418701171875 -0.081790499389171600341796875 +0.0079820002429187297821044921875 -0.304475595057010661736995871252 0.57422171533107757568359375 +0.0079820002429187297821044921875 0.304475595057010661736995871252 0.57422171533107757568359375 +0.0079898498952388763427734375 -0.03789649903774261474609375 -0.03162305057048797607421875 +0.0079898498952388763427734375 0.03789649903774261474609375 -0.03162305057048797607421875 +0.00799560025334358250026500769536 -0.103517997264862063322432561563 -0.590948402881622314453125 +0.00799560025334358250026500769536 0.103517997264862063322432561563 -0.590948402881622314453125 +0.00799845010042190586452282019536 -0.00329939983785152443976351754884 0.04924570024013519287109375 +0.00799845010042190586452282019536 0.00329939983785152443976351754884 0.04924570024013519287109375 +0.0080128498375415802001953125 -0.0180793493986129774619975307814 -0.04592309892177581787109375 +0.0080128498375415802001953125 0.0180793493986129774619975307814 -0.04592309892177581787109375 +0.008066999725997447967529296875 -0.825170993804931640625 -0.56482601165771484375 +0.008066999725997447967529296875 0.825170993804931640625 -0.56482601165771484375 +0.00806939983740448917026721886714 -0.313664388656616222039730246252 0.322567203640937827380241742503 +0.00806939983740448917026721886714 0.313664388656616222039730246252 0.322567203640937827380241742503 +0.00809165025129914179669032847642 -0.274206459522247314453125 -0.217360156774520862921207253748 +0.00809165025129914179669032847642 0.274206459522247314453125 -0.217360156774520862921207253748 +0.00812280029058456455592907019536 -0.0249997496604919440532643903907 0.0425327003002166775802450615629 +0.00812280029058456455592907019536 0.0249997496604919440532643903907 0.0425327003002166775802450615629 +0.00814679972827434505100452355464 -0.103844699263572690095536188437 -0.2813360989093780517578125 +0.00814679972827434505100452355464 0.103844699263572690095536188437 -0.2813360989093780517578125 +0.008207499980926513671875 -0.18633325397968292236328125 0.16647075116634368896484375 +0.008207499980926513671875 0.18633325397968292236328125 0.16647075116634368896484375 +0.00827879980206489528293811730464 -0.233884000778198264391960492503 -0.324391198158264171258480246252 +0.00827879980206489528293811730464 0.233884000778198264391960492503 -0.324391198158264171258480246252 +0.00828889980912208591823375769536 -0.0386725008487701429893412807814 -0.0918461978435516357421875 +0.00828889980912208591823375769536 0.0386725008487701429893412807814 -0.0918461978435516357421875 +0.00832644999027252162571155480464 -0.0434860497713089044768963731258 -0.0232299998402595540836212961722 +0.00832644999027252162571155480464 0.0434860497713089044768963731258 -0.0232299998402595540836212961722 +0.00832740012556314364300380503892 -0.0902243971824645968338174384371 0.119541746377944943513504938437 +0.00832740012556314364300380503892 0.0902243971824645968338174384371 0.119541746377944943513504938437 +0.0083369500935077667236328125 -0.00605709999799728445596391779304 -0.0489265501499176053146200615629 +0.0083369500935077667236328125 0.00605709999799728445596391779304 -0.0489265501499176053146200615629 +0.00836319997906684840793811730464 -0.179279601573944097347990123126 0.0882543981075286920745526231258 +0.00836319997906684840793811730464 0.179279601573944097347990123126 0.0882543981075286920745526231258 +0.00839040018618106807346546105464 -0.00609600003808736818494695697268 -0.149641048908233625924779630623 +0.00839040018618106807346546105464 0.00609600003808736818494695697268 -0.149641048908233625924779630623 +0.00841019973158836468829502308608 -0.002032049931585788726806640625 -0.04924570024013519287109375 +0.00841019973158836468829502308608 0.002032049931585788726806640625 -0.04924570024013519287109375 +0.008420749567449092864990234375 -0.2448565065860748291015625 -0.049743749201297760009765625 +0.008420749567449092864990234375 0.2448565065860748291015625 -0.049743749201297760009765625 +0.00844419971108436619167125769536 -0.0259889006614685072471537807814 0.0961938977241516141036825615629 +0.00844419971108436619167125769536 0.0259889006614685072471537807814 0.0961938977241516141036825615629 +0.00847660005092620849609375 -0.103593003749847423211605246252 -0.170870196819305431024105246252 +0.00847660005092620849609375 0.103593003749847423211605246252 -0.170870196819305431024105246252 +0.008503249846398830413818359375 -0.13419449329376220703125 0.2107592523097991943359375 +0.008503249846398830413818359375 0.13419449329376220703125 0.2107592523097991943359375 +0.00852560028433799708957874230464 -0.0262398004531860379318075615629 0.198087799549102799856470369377 +0.00852560028433799708957874230464 0.0262398004531860379318075615629 0.198087799549102799856470369377 +0.00854599997401237453098499230464 -0.02630279958248138427734375 0.399042797088623057977230246252 +0.00854599997401237453098499230464 0.02630279958248138427734375 0.399042797088623057977230246252 +0.00855719968676567181720127308608 -0.0461938500404357951789613423443 -0.0171143501996994032432475307814 +0.00855719968676567181720127308608 0.0461938500404357951789613423443 -0.0171143501996994032432475307814 +0.008596000261604785919189453125 -0.327896794676780678479133257497 0.6183926165103912353515625 +0.008596000261604785919189453125 0.327896794676780678479133257497 0.6183926165103912353515625 +0.00861510001122951438179420335928 -0.0911393970251083290756710653113 0.285691201686859130859375 +0.00861510001122951438179420335928 0.0911393970251083290756710653113 0.285691201686859130859375 +0.0086505003273487091064453125 -0.02662325091660022735595703125 -0.24842774868011474609375 +0.0086505003273487091064453125 0.02662325091660022735595703125 -0.24842774868011474609375 +0.00866190027445554698581897667964 -0.112144497036933896150223688437 -0.64019410312175750732421875 +0.00866190027445554698581897667964 0.112144497036933896150223688437 -0.64019410312175750732421875 +0.00870869979262352093829502308608 -0.0374890506267547621299662807814 0.0319175511598587050010600307814 +0.00870869979262352093829502308608 0.0374890506267547621299662807814 0.0319175511598587050010600307814 +0.00876379981637001072292125769536 -0.0485707014799118055869975307814 0.086971700191497802734375 +0.00876379981637001072292125769536 0.0485707014799118055869975307814 0.086971700191497802734375 +0.008771999739110469818115234375 -0.249229252338409423828125 -0.01754424907267093658447265625 +0.008771999739110469818115234375 0.249229252338409423828125 -0.01754424907267093658447265625 +0.00877915024757385323295189039072 -0.0162430003285408026958425153907 0.0464659988880157526214276231258 +0.00877915024757385323295189039072 0.0162430003285408026958425153907 0.0464659988880157526214276231258 +0.00878344997763633693332874230464 -0.0270321995019912747482138115629 -0.0411352992057800320724325615629 +0.00878344997763633693332874230464 0.0270321995019912747482138115629 -0.0411352992057800320724325615629 +0.0088563002645969390869140625 -0.0702305018901824978927450615629 0.0706345975399017417251101846887 +0.0088563002645969390869140625 0.0702305018901824978927450615629 0.0706345975399017417251101846887 +0.00890749990940094098224033558608 -0.0446462512016296414474325615629 0.020672850310802459716796875 +0.00890749990940094098224033558608 0.0446462512016296414474325615629 0.020672850310802459716796875 +0.00890880022197961841945446082036 -0.267521703243255581927684261245 -0.135472503304481489694310880623 +0.00890880022197961841945446082036 0.267521703243255581927684261245 -0.135472503304481489694310880623 +0.008914150297641754150390625 -0.0470371007919311578948651231258 0.014423899352550506591796875 +0.008914150297641754150390625 0.0470371007919311578948651231258 0.014423899352550506591796875 +0.008965999819338321685791015625 -0.348515987396240234375 0.3584080040454864501953125 +0.008965999819338321685791015625 0.348515987396240234375 0.3584080040454864501953125 +0.00901205018162727460040439808608 -0.0277367502450943000102956403907 0.0406134486198425348479901231258 +0.00901205018162727460040439808608 0.0277367502450943000102956403907 0.0406134486198425348479901231258 +0.00905880033969879219779564039072 -0.00658160001039505022230047259768 0.0993710994720459067641726846887 +0.00905880033969879219779564039072 0.00658160001039505022230047259768 0.0993710994720459067641726846887 +0.00906035006046295235404564039072 -0.006582699716091156005859375 0.0487296491861343439300213731258 +0.00906035006046295235404564039072 0.006582699716091156005859375 0.0487296491861343439300213731258 +0.00906310006976127589817249230464 -0.014741100370883941650390625 -0.0984914004802703857421875 +0.00906310006976127589817249230464 0.014741100370883941650390625 -0.0984914004802703857421875 +0.00907474979758262668971813269536 -0.0148000001907348643220840855861 -0.04688934981822967529296875 +0.00907474979758262668971813269536 0.0148000001907348643220840855861 -0.04688934981822967529296875 +0.00908724963665008544921875 -0.249401748180389404296875 0.0147040002048015594482421875 +0.00908724963665008544921875 0.249401748180389404296875 0.0147040002048015594482421875 +0.00915085002779960667018688269536 -0.048032701015472412109375 -0.0104461498558521270751953125 +0.00915085002779960667018688269536 0.048032701015472412109375 -0.0104461498558521270751953125 +0.00916810035705566475638939039072 -0.0772570013999939048110476846887 -0.0628274977207183837890625 +0.00916810035705566475638939039072 0.0772570013999939048110476846887 -0.0628274977207183837890625 +0.00918179992586374248142444542964 -0.128299945592880243472322376874 -0.0771676540374755803863848768742 +0.00918179992586374248142444542964 0.128299945592880243472322376874 -0.0771676540374755803863848768742 +0.0092100002802908420562744140625 -0.351317994296550750732421875 0.66256351768970489501953125 +0.0092100002802908420562744140625 0.351317994296550750732421875 0.66256351768970489501953125 +0.00924760028719902142657627308608 -0.313378810882568359375 -0.248411607742309581414730246252 +0.00924760028719902142657627308608 0.313378810882568359375 -0.248411607742309581414730246252 +0.00927629992365837201251377308608 -0.0352232486009597806075888115629 -0.0342530488967895535568075615629 +0.00927629992365837201251377308608 0.0352232486009597806075888115629 -0.0342530488967895535568075615629 +0.00931364977732300827750755445322 -0.263119500875473033563167746252 -0.364940097928047213482471988755 +0.00931364977732300827750755445322 0.263119500875473033563167746252 -0.364940097928047213482471988755 +0.00932820029556751147137294566392 -0.120770996809005728978014815311 -0.6894398033618927001953125 +0.00932820029556751147137294566392 0.120770996809005728978014815311 -0.6894398033618927001953125 +0.00933244973421096767063342980464 -0.0483321487903594984580912807814 0.0087696500122547149658203125 +0.00933244973421096767063342980464 0.0483321487903594984580912807814 0.0087696500122547149658203125 +0.00936760008335113525390625 -0.0395083010196685818771200615629 0.0291777491569519056846537807814 +0.00936760008335113525390625 0.0395083010196685818771200615629 0.0291777491569519056846537807814 +0.009440000168979167938232421875 -0.24537074565887451171875 0.0469477511942386627197265625 +0.009440000168979167938232421875 0.24537074565887451171875 0.0469477511942386627197265625 +0.00947294980287551914577282019536 -0.0672380983829498207748898153113 -0.133750954270362848452791126874 +0.00947294980287551914577282019536 0.0672380983829498207748898153113 -0.133750954270362848452791126874 +0.00949110053479671443577014855464 -0.12455324828624725341796875 0.0830446511507034329513388115629 +0.00949110053479671443577014855464 0.12455324828624725341796875 0.0830446511507034329513388115629 +0.00950459968298673560371803148428 -0.121152149140834802798494251874 -0.32822544872760772705078125 +0.00950459968298673560371803148428 0.121152149140834802798494251874 -0.32822544872760772705078125 +0.00951300002634525299072265625 -0.1844267547130584716796875 -0.16851200163364410400390625 +0.00951300002634525299072265625 0.1844267547130584716796875 -0.16851200163364410400390625 +0.00955304950475692644940028941392 -0.029401950538158416748046875 0.146779650449752802066072376874 +0.00955304950475692644940028941392 0.029401950538158416748046875 0.146779650449752802066072376874 +0.00955740027129650150661266394536 -0.283329302072524991107371761245 -0.09814859926700592041015625 +0.00955740027129650150661266394536 0.283329302072524991107371761245 -0.09814859926700592041015625 +0.00960654988884925876979625769536 -0.0489425987005233792404013115629 -0.00351249985396862030029296875 +0.00960654988884925876979625769536 0.0489425987005233792404013115629 -0.00351249985396862030029296875 +0.00961424997076392243156028882822 -0.02959064953029155731201171875 0.448923146724700961041065738755 +0.00961424997076392243156028882822 0.02959064953029155731201171875 0.448923146724700961041065738755 +0.00962439998984336922416282789072 -0.158021605014801030941740123126 0.122215199470520022306807561563 +0.00962439998984336922416282789072 0.158021605014801030941740123126 0.122215199470520022306807561563 +0.009651400148868560791015625 -0.0489713013172149713714276231258 0.00294295009225606927008578317384 +0.009651400148868560791015625 0.0489713013172149713714276231258 0.00294295009225606927008578317384 +0.00966240018606186017169346058608 -0.0560631990432739271690287807814 -0.191738200187683116570980246252 +0.00966240018606186017169346058608 0.0560631990432739271690287807814 -0.191738200187683116570980246252 +0.00967800021171569962996628078145 -0.0564248025417327936370526231258 -0.0819913029670715359786825615629 +0.00967800021171569962996628078145 0.0564248025417327936370526231258 -0.0819913029670715359786825615629 +0.0097763501107692718505859375 -0.0192950993776321438888388115629 0.0450790494680404704719300923443 +0.0097763501107692718505859375 0.0192950993776321438888388115629 0.0450790494680404704719300923443 +0.00977900028228759904402878078145 -0.0732046008110046469985476846887 0.185863995552063010485710492503 +0.00977900028228759904402878078145 0.0732046008110046469985476846887 0.185863995552063010485710492503 +0.00980169996619224652423252308608 -0.0882833003997802734375 -0.0459345012903213528732138115629 +0.00980169996619224652423252308608 0.0882833003997802734375 -0.0459345012903213528732138115629 +0.009821750223636627197265625 -0.0235455498099327101280131557814 -0.0430016487836837810188050923443 +0.009821750223636627197265625 0.0235455498099327101280131557814 -0.0430016487836837810188050923443 +0.009824000298976898193359375 -0.374739193916320822985710492503 0.7067344188690185546875 +0.009824000298976898193359375 0.374739193916320822985710492503 0.7067344188690185546875 +0.00982415005564689705619407789072 -0.0414220988750457763671875 -0.0262239992618560797954518903907 +0.00982415005564689705619407789072 0.0414220988750457763671875 -0.0262239992618560797954518903907 +0.00984899997711181571236060960928 -0.223599904775619501284822376874 0.199764901399612421206697376874 +0.00984899997711181571236060960928 0.223599904775619501284822376874 0.199764901399612421206697376874 +0.00985824987292289837970127308608 -0.0303410500288009664371369211722 0.0384998500347137478927450615629 +0.00985824987292289837970127308608 0.0303410500288009664371369211722 0.0384998500347137478927450615629 +0.00986259980127215420131481238286 -0.383367586135864302221420985006 0.394248804450035128521534488755 +0.00986259980127215420131481238286 0.383367586135864302221420985006 0.394248804450035128521534488755 +0.00991274975240230560302734375 -0.2369552552700042724609375 0.0790822505950927734375 +0.00991274975240230560302734375 0.2369552552700042724609375 0.0790822505950927734375 +0.00993975028395652736301624230464 -0.1374363005161285400390625 -0.059266202151775360107421875 +0.00993975028395652736301624230464 0.1374363005161285400390625 -0.059266202151775360107421875 +0.00997669994831085205078125 -0.0413553506135940565635600307814 0.0262716501951217665244975307814 +0.00997669994831085205078125 0.0413553506135940565635600307814 0.0262716501951217665244975307814 +0.009994500316679477691650390625 -0.12939749658107757568359375 -0.73868550360202789306640625 +0.009994500316679477691650390625 0.12939749658107757568359375 -0.73868550360202789306640625 +0.0100509500131010995338520785936 -0.106329296529293057527176813437 0.3333064019680023193359375 +0.0100509500131010995338520785936 0.106329296529293057527176813437 0.3333064019680023193359375 +0.0100901000201702121389368826954 -0.0114448003470897681499440778907 -0.0476152002811431884765625 +0.0100901000201702121389368826954 0.0114448003470897681499440778907 -0.0476152002811431884765625 +0.0101048994809389107440988908593 -0.293827807903289772717414507497 -0.0596924990415573092361611884371 +0.0101048994809389107440988908593 0.293827807903289772717414507497 -0.0596924990415573092361611884371 +0.0101516500115394602693497105861 -0.0445501506328582763671875 -0.0203033506870269782329518903907 +0.0101516500115394602693497105861 0.0445501506328582763671875 -0.0203033506870269782329518903907 +0.0101839497685432423673690394139 -0.144178050756454456671207253748 -0.0401119485497474642654580634371 +0.0101839497685432423673690394139 0.144178050756454456671207253748 -0.0401119485497474642654580634371 +0.0101925000548362745811381557814 -0.00991925001144409318465378078145 0.0479345500469207791427450615629 +0.0101925000548362745811381557814 0.00991925001144409318465378078145 0.0479345500469207791427450615629 +0.01020389981567859649658203125 -0.1610333919525146484375 0.252911102771759044305355246252 +0.01020389981567859649658203125 0.1610333919525146484375 0.252911102771759044305355246252 +0.0102494001388549818565287807814 -0.0936047971248626792251101846887 -0.03366149961948394775390625 +0.0102494001388549818565287807814 0.0936047971248626792251101846887 -0.03366149961948394775390625 +0.0102958504110574715351145158593 -0.064069502055644989013671875 0.135237148404121404476896373126 +0.0102958504110574715351145158593 0.064069502055644989013671875 0.135237148404121404476896373126 +0.0103050999343395240093190778907 0 0.0489265501499176053146200615629 +0.010348499752581119537353515625 -0.292355000972747802734375 -0.4054889976978302001953125 +0.010348499752581119537353515625 0.292355000972747802734375 -0.4054889976978302001953125 +0.0103711500763893123971959298046 0 0.149641048908233625924779630623 +0.0103806003928184498869002894139 -0.0319479010999202742149272182814 -0.298113298416137706414730246252 +0.0103806003928184498869002894139 0.0319479010999202742149272182814 -0.298113298416137706414730246252 +0.0103823997080326069913924769139 -0.031952999532222747802734375 -0.146188947558403004034488503748 +0.0103823997080326069913924769139 0.031952999532222747802734375 -0.146188947558403004034488503748 +0.0103936002589762200437606409764 -0.312108653783798206671207253748 -0.158051253855228418521150501874 +0.0103936002589762200437606409764 0.312108653783798206671207253748 -0.158051253855228418521150501874 +0.0104035503230988975870152657421 -0.352551162242889404296875 -0.279463058710098299908253238755 +0.0104035503230988975870152657421 0.352551162242889404296875 -0.279463058710098299908253238755 +0.0104108996689319614065150076954 -0.0749431014060974176604901231258 0.0653846979141235323806924384371 +0.0104108996689319614065150076954 0.0749431014060974176604901231258 0.0653846979141235323806924384371 +0.0104380003176629543304443359375 -0.398160393536090839727847878748 0.75090532004833221435546875 +0.0104380003176629543304443359375 0.398160393536090839727847878748 0.75090532004833221435546875 +0.0104400999844074249267578125 -0.0972369015216827392578125 -0.0208802998065948514083700615629 +0.0104400999844074249267578125 0.0972369015216827392578125 -0.0208802998065948514083700615629 +0.010453999973833560943603515625 -0.22409950196743011474609375 0.110317997634410858154296875 +0.010453999973833560943603515625 0.22409950196743011474609375 0.110317997634410858154296875 +0.010467000305652618408203125 -0.0322136014699935940841513115629 -0.0940889000892639187911825615629 +0.010467000305652618408203125 0.0322136998176574748664613423443 -0.0940889000892639187911825615629 +0.0104791998863220225252090855861 -0.0322521001100540202766175923443 0.0940743982791900634765625 +0.0104791998863220225252090855861 0.0322521001100540202766175923443 0.0940743982791900634765625 +0.0104941494762897484516184221093 -0.14815320074558258056640625 -0.0209881491959094980404021413278 +0.0104941494762897484516184221093 0.14815320074558258056640625 -0.0209881491959094980404021413278 +0.0105043999850749983360209682814 -0.0323285996913909925987162807814 -0.0366676986217498793174662807814 +0.0105043999850749983360209682814 0.0323285996913909925987162807814 -0.0366676986217498793174662807814 +0.0105117000639438629150390625 -0.0429922997951507623870526231258 0.023262999951839447021484375 +0.0105117000639438629150390625 0.0429922997951507623870526231258 0.023262999951839447021484375 +0.0105263996869325634347935860546 -0.299075102806091286389289507497 -0.0210530988872051245952565778907 +0.0105263996869325634347935860546 0.299075102806091286389289507497 -0.0210530988872051245952565778907 +0.0105580002069473270071009451954 -0.137636995315551763363615123126 -0.144722402095794677734375 +0.0105580002069473270071009451954 0.137636995315551763363615123126 -0.144722402095794677734375 +0.0105957500636577606201171875 -0.12949125468730926513671875 -0.21358774602413177490234375 +0.0105957500636577606201171875 0.12949125468730926513671875 -0.21358774602413177490234375 +0.01059930026531219482421875 -0.0392946511507034357268963731258 -0.0290444999933242818668244211722 +0.01059930026531219482421875 0.0392946511507034357268963731258 -0.0290444999933242818668244211722 +0.0106026001274585734285293980861 -0.0457521498203277629523988423443 0.01715590059757232666015625 +0.0106026001274585734285293980861 0.0457521498203277629523988423443 0.01715590059757232666015625 +0.0106194503605365753173828125 -0.0199881494045257568359375 -0.0445836514234542874435263115629 +0.0106194503605365753173828125 0.0199881494045257568359375 -0.0445836514234542874435263115629 +0.010657000355422496795654296875 -0.0327997505664825439453125 0.24760974943637847900390625 +0.010657000355422496795654296875 0.0327997505664825439453125 0.24760974943637847900390625 +0.0106572002172470106651225307814 -0.0328000485897064208984375 0.0362019509077072185188050923443 +0.0106572002172470106651225307814 0.0328000485897064208984375 0.0362019509077072185188050923443 +0.0106608003377914439119278355861 -0.138023996353149408511384876874 -0.7879312038421630859375 +0.0106608003377914439119278355861 0.138023996353149408511384876874 -0.7879312038421630859375 +0.0106622003018856052053431326954 -0.0725292980670928927322549384371 -0.0680132985115051297286825615629 +0.0106622003018856052053431326954 0.0725292980670928927322549384371 -0.0680132985115051297286825615629 +0.010682499967515468597412109375 -0.0328784994781017303466796875 0.49880349636077880859375 +0.010682499967515468597412109375 0.0328784994781017303466796875 0.49880349636077880859375 +0.010729350149631500244140625 -0.0222230002284049994731862653907 0.0434858500957489013671875 +0.010729350149631500244140625 0.0222230002284049994731862653907 0.0434858500957489013671875 +0.0107591997832059849821151331639 -0.418219184875488259045539507497 0.430089604854583751336605246252 +0.0107591997832059849821151331639 0.418219184875488259045539507497 0.430089604854583751336605246252 +0.0108323995023965839040736014454 -0.0980237960815429631988848768742 0.113022145628929135408036188437 +0.0108323995023965839040736014454 0.0980237960815429631988848768742 0.113022145628929135408036188437 +0.0108351998031139384187637730861 -0.0978529989719390952407351846887 0.0175322994589805596088449846093 +0.0108351998031139384187637730861 0.0978529989719390952407351846887 0.0175322994589805596088449846093 +0.0108623996376991278911550153907 -0.138459599018096929379240123126 -0.37511479854583740234375 +0.0108623996376991278911550153907 0.138459599018096929379240123126 -0.37511479854583740234375 +0.0108786005526781085622767264454 -0.148565849661827092953458873126 0.0176024995744228363037109375 +0.0108786005526781085622767264454 0.148565849661827092953458873126 0.0176024995744228363037109375 +0.0109046995639801025390625 -0.299282097816467251849559261245 0.017644800245761871337890625 +0.0109046995639801025390625 0.299282097816467251849559261245 0.017644800245761871337890625 +0.0109074503183364882041850307814 -0.0467564493417739895919638115629 -0.0139593005180358893657643903907 +0.0109074503183364882041850307814 0.0467564493417739895919638115629 -0.0139593005180358893657643903907 +0.0109323002398014068603515625 -0.0552447974681854261924662807814 0.0826346993446350208678552462516 +0.0109323002398014068603515625 0.0552447974681854261924662807814 0.0826346993446350208678552462516 +0.0109972000122070326377787807814 -0.0896798014640808188735476846887 0.0428553998470306424239950615629 +0.0109972000122070326377787807814 0.0896798014640808188735476846887 0.0428553998470306424239950615629 +0.0110098499804735187185267264454 -0.144996446371078474557592130623 0.0368080504238605457634214701557 +0.0110098499804735187185267264454 0.144996446371078474557592130623 0.0368080504238605457634214701557 +0.0110357001423835761333425153907 -0.0946196973323822076995526231258 0.0304190993309021023849325615629 +0.0110357001423835761333425153907 0.0946196973323822076995526231258 0.0304190993309021023849325615629 +0.011052000336349010467529296875 -0.421581593155860911981136496252 0.7950762212276458740234375 +0.011052000336349010467529296875 0.421581593155860911981136496252 0.7950762212276458740234375 +0.0110537998378276835359512730861 -0.00803095027804374798907627308608 -0.0480969488620758070518412807814 +0.0110537998378276835359512730861 0.00803095027804374798907627308608 -0.0480969488620758070518412807814 +0.0111032001674175265920618826954 -0.120299196243286138363615123126 0.159388995170593267269865123126 +0.0111032001674175265920618826954 0.120299196243286138363615123126 0.159388995170593267269865123126 +0.0111358001828193668020228201954 -0.0473098993301391615440287807814 0.0117374502122402201570450230861 +0.0111358001828193668020228201954 0.0473098993301391615440287807814 0.0117374502122402201570450230861 +0.0111503003165125836454452112889 -0.330550852417945850714176003748 -0.114506699144840226600727817186 +0.0111503003165125836454452112889 0.330550852417945850714176003748 -0.114506699144840226600727817186 +0.011160500347614288330078125 -0.00810849964618682965411533558608 -0.0990438997745513999282351846887 +0.011160500347614288330078125 0.00810849964618682965411533558608 -0.0990438997745513999282351846887 +0.0111628003418445601035990932814 -0.00402855016291141492662530865232 -0.0485711991786956787109375 +0.0111628003418445601035990932814 0.00402855016291141492662530865232 -0.0485711991786956787109375 +0.0111872002482414252544362653907 -0.00812800005078315700168811730464 -0.199521398544311528988615123126 +0.0111872002482414252544362653907 0.00812800005078315700168811730464 -0.199521398544311528988615123126 +0.0111974000930786139751393903907 0 -0.0993710994720459067641726846887 +0.0111992001533508314659037807814 0 -0.0487296491861343439300213731258 +0.0112190999090671546245534528907 -0.0131747007369995127595840855861 0.0984914004802703857421875 +0.0112190999090671546245534528907 0.0131747007369995127595840855861 0.0984914004802703857421875 +0.0112552497535943988454798514454 -0.0942460477352142361739950615629 -0.116150701045989984683259876874 +0.0112552497535943988454798514454 0.0942460477352142361739950615629 -0.116150701045989984683259876874 +0.0112714499235153208650528355861 -0.0132039994001388553274134451954 0.0468892991542816175987162807814 +0.0112714499235153208650528355861 0.0132039994001388553274134451954 0.0468892991542816175987162807814 +0.0112845003604888916015625 -0.129880195856094365902677623126 0.074187599122524261474609375 +0.0112845003604888916015625 0.129880195856094365902677623126 0.074187599122524261474609375 +0.0113271003589034083974818045704 -0.146650496125221241339176003748 -0.83717690408229827880859375 +0.0113271003589034083974818045704 0.146650496125221241339176003748 -0.83717690408229827880859375 +0.0113280002027750011789342110546 -0.294444894790649391858039507497 0.0563373014330863924881143134371 +0.0113280002027750011789342110546 0.294444894790649391858039507497 0.0563373014330863924881143134371 +0.0113309502601623545564590855861 -0.0481930494308471721320863423443 -0.00700294971466064453125 +0.0113309502601623545564590855861 0.0481930494308471721320863423443 -0.00700294971466064453125 +0.0113582000136375430715540701954 -0.0991046011447906521896200615629 -0.00701979994773864815482689039072 +0.0113582000136375430715540701954 0.0991046011447906521896200615629 -0.00701979994773864815482689039072 +0.0113833497278392325319229527736 -0.321590501070022627416733485006 -0.446037897467613242419304242503 +0.0113833497278392325319229527736 0.321590501070022627416733485006 -0.446037897467613242419304242503 +0.0113988496363163008262553432814 -0.00330209992825984980854836514652 0.0485711991786956787109375 +0.0113988496363163008262553432814 0.00330209992825984980854836514652 0.0485711991786956787109375 +0.0114051498472690585744837576954 -0.0351020991802215576171875 0.0337307512760162339637837192186 +0.0114051498472690585744837576954 0.0351020991802215576171875 0.0337307512760162339637837192186 +0.0114156000316143028949777971093 -0.221312105655670166015625 -0.202214401960372908151342130623 +0.0114156000316143028949777971093 0.221312105655670166015625 -0.202214401960372908151342130623 +0.0114340499043464674522319057814 -0.0483196496963501018195863423443 0.00587154999375343392142845289072 +0.0114340499043464674522319057814 0.0483196496963501018195863423443 0.00587154999375343392142845289072 +0.0114502497017383575439453125 -0.138645449280738825015291126874 0.0560922011733055100868305942186 +0.0114502497017383575439453125 0.138645449280738825015291126874 0.0560922011733055100868305942186 +0.0114565495401620868337611014454 -0.122434195876121518220536188437 -0.0858990043401718084137286268742 +0.0114565495401620868337611014454 0.122434195876121518220536188437 -0.0858990043401718084137286268742 +0.0114777997136116041709819057814 -0.0991648018360137967208700615629 0.00588279999792575870876110144536 +0.0114777997136116041709819057814 0.0991648018360137967208700615629 0.00588279999792575870876110144536 +0.0114868000149726881553569057814 -0.121519196033477785978682561563 0.3809216022491455078125 +0.0114868000149726881553569057814 0.121519196033477785978682561563 0.3809216022491455078125 +0.0114904999732971177528462192186 -0.260866555571556080206363503748 0.233059051632881153448551003748 +0.0114904999732971177528462192186 0.260866555571556080206363503748 0.233059051632881153448551003748 +0.011559500358998775482177734375 -0.39172351360321044921875 -0.310514509677886962890625 +0.011559500358998775482177734375 0.39172351360321044921875 -0.310514509677886962890625 +0.0116258002817630767822265625 -0.0290973007678985602642018903907 -0.0389639496803283746917401231258 +0.0116258002817630767822265625 0.0290973007678985602642018903907 -0.0389639496803283746917401231258 +0.0116557997651398192323624058986 -0.453070783615112326891960492503 0.465930405259132374151676003748 +0.0116557997651398192323624058986 0.453070783615112326891960492503 0.465930405259132374151676003748 +0.0116660003550350666046142578125 -0.445002792775630928723273882497 0.83924712240695953369140625 +0.0116660003550350666046142578125 0.445002792775630928723273882497 0.83924712240695953369140625 +0.0116723001003265387798268903907 -0.0486185014247894342620526231258 0 +0.0116723001003265387798268903907 0.0486185014247894342620526231258 0 +0.0116835996508598341514506557814 -0.0426317989826202406455912807814 -0.0233671501278877279117462961722 +0.0116835996508598341514506557814 0.0426317989826202406455912807814 -0.0233671501278877279117462961722 +0.01169764995574951171875 -0.0167343005537986776187775461722 -0.0456413000822067302375550923443 +0.01169764995574951171875 0.0167343005537986776187775461722 -0.0456413000822067302375550923443 +0.0117507499642670164979874058986 -0.03616634942591190338134765625 0.548683845996856711657585492503 +0.0117507499642670164979874058986 0.03616634942591190338134765625 0.548683845996856711657585492503 +0.0117688503116369237028182581639 -0.149537551403045643194644753748 0 +0.0117688503116369237028182581639 0.149537551403045643194644753748 0 +0.0117881000041961669921875 -0.0496434986591339152961488423443 -0.0860032975673675620376101846887 +0.0117881000041961669921875 0.0496434986591339152961488423443 -0.0860032975673675620376101846887 +0.0117890493944287286232075473436 -0.342799109220504716333266514994 -0.0696412488818168584625567518742 +0.0117890493944287286232075473436 0.342799109220504716333266514994 -0.0696412488818168584625567518742 +0.0118136502802371982229212576954 -0.0255600512027740478515625 0.0413173496723175104339276231258 +0.0118136502802371982229212576954 0.0255600512027740478515625 0.0413173496723175104339276231258 +0.0118784002959728251375137730861 -0.356695604324340831414730246252 -0.180630004405975347347990123126 +0.0118784002959728251375137730861 0.356695604324340831414730246252 -0.180630004405975347347990123126 +0.0118952997028827656827987269139 -0.284346306324005093646434261245 0.094898700714111328125 +0.0118952997028827656827987269139 0.284346306324005093646434261245 0.094898700714111328125 +0.011904549784958362579345703125 -0.18787229061126708984375 0.295062953233718838763621761245 +0.011904549784958362579345703125 0.18787229061126708984375 0.295062953233718838763621761245 +0.0119111001491546634328821951954 -0.0792644977569580133636151231258 0.0597935020923614501953125 +0.0119111001491546634328821951954 0.0792644977569580133636151231258 0.0597935020923614501953125 +0.0119410999119281772268275076954 -0.0367502510547637953330912807814 -0.0317305505275726346114950615629 +0.0119410999119281772268275076954 0.0367502510547637953330912807814 -0.0317305505275726346114950615629 +0.0119934003800153728830357735546 -0.155276995897293101922542746252 -0.8864226043224334716796875 +0.0119934003800153728830357735546 0.155276995897293101922542746252 -0.8864226043224334716796875 +0.012030499987304210662841796875 -0.19752700626850128173828125 0.1527689993381500244140625 +0.012030499987304210662841796875 0.19752700626850128173828125 0.1527689993381500244140625 +0.01207800023257732391357421875 -0.0700789988040924072265625 -0.2396727502346038818359375 +0.01207800023257732391357421875 0.0700789988040924072265625 -0.2396727502346038818359375 +0.0120985500514507304109512730861 -0.0372361510992050212531800923443 0.0310981005430221585372763115629 +0.0120985500514507304109512730861 0.0372361510992050212531800923443 0.0310981005430221585372763115629 +0.0121107004582881924020787423046 -0.0372725512832403141350035014057 -0.347798848152160611224559261245 +0.0121107004582881924020787423046 0.0372725512832403141350035014057 -0.347798848152160611224559261245 +0.0122201995924115184438685233204 -0.155767048895359055959985994377 -0.42200414836406707763671875 +0.0122201995924115184438685233204 0.155767048895359055959985994377 -0.42200414836406707763671875 +0.0122237503528594970703125 -0.09150575101375579833984375 0.2323299944400787353515625 +0.0122237503528594970703125 0.09150575101375579833984375 0.2323299944400787353515625 +0.0122403003275394443166712576954 -0.0442481994628906305511151231258 0.0198058500885963453819194057814 +0.0122403003275394443166712576954 0.0442481994628906305511151231258 0.0198058500885963453819194057814 +0.0122423999011516577983815778907 -0.171066594123840343133480246252 -0.102890205383300792352230246252 +0.0122423999011516577983815778907 0.171066594123840343133480246252 -0.102890205383300792352230246252 +0.01228000037372112274169921875 -0.4684239923954010009765625 0.883418023586273193359375 +0.01228000037372112274169921875 0.4684239923954010009765625 0.883418023586273193359375 +0.0122807996347546570514719377343 -0.348920953273773148950454014994 -0.0245619487017393091365935475778 +0.0122807996347546570514719377343 0.348920953273773148950454014994 -0.0245619487017393091365935475778 +0.0123006001114845282817800153907 -0.0162963002920150749897043596093 0.0456413000822067302375550923443 +0.0123006001114845282817800153907 0.0162963002920150749897043596093 0.0456413000822067302375550923443 +0.0124181997030973437917689139454 -0.350826001167297341076789507497 -0.486586797237396229132144753748 +0.0124181997030973437917689139454 0.350826001167297341076789507497 -0.486586797237396229132144753748 +0.0124333497136831280099888985546 -0.0580087512731552110145649692186 -0.13776929676532745361328125 +0.0124333497136831280099888985546 0.0580087512731552110145649692186 -0.13776929676532745361328125 +0.0124640002846717837942103201954 -0.0383610010147094754318075615629 0.0915045022964477566818075615629 +0.0124640002846717837942103201954 0.0383610010147094754318075615629 0.0915045022964477566818075615629 +0.0125314503908157352102259451954 -0.0452418506145477322677450615629 -0.0172087505459785454486887346093 +0.0125314503908157352102259451954 0.0452418506145477322677450615629 -0.0172087505459785454486887346093 +0.0125447999686002734792689139454 -0.268919402360916104388621761245 0.132381597161293024234041126874 +0.0125447999686002734792689139454 0.268919402360916104388621761245 0.132381597161293024234041126874 +0.0125523997470736500131627266796 -0.487922382354736283716079014994 0.501771205663681052477897992503 +0.0125523997470736500131627266796 0.487922382354736283716079014994 0.501771205663681052477897992503 +0.0125682994723320014263112653907 -0.0255176007747650174239950615629 -0.0958691000938415582854901231258 +0.0125682994723320014263112653907 0.0255176007747650174239950615629 -0.0958691000938415582854901231258 +0.01258344948291778564453125 -0.00662840008735656772975719519536 0.0479345500469207791427450615629 +0.01258344948291778564453125 0.00662840008735656772975719519536 0.0479345500469207791427450615629 +0.0126305997371673594392715855861 -0.0896507978439331082443075615629 -0.178334605693817149774105246252 +0.0126305997371673594392715855861 0.0896507978439331082443075615629 -0.178334605693817149774105246252 +0.0126548007130622870708425153907 -0.166070997714996337890625 0.110726201534271248561047684689 +0.0126548007130622870708425153907 0.166070997714996337890625 0.110726201534271248561047684689 +0.0126597004011273373685897425389 -0.163903495669364934750333873126 -0.93566830456256866455078125 +0.0126597004011273373685897425389 0.163903495669364934750333873126 -0.93566830456256866455078125 +0.0126662995666265484201451485546 -0.0389833509922027574012837192186 0.144290846586227400338842130623 +0.0126662995666265484201451485546 0.0389833509922027574012837192186 0.144290846586227400338842130623 +0.012667000293731689453125 -0.0605736017227172865440287807814 0.0785517990589141845703125 +0.012667000293731689453125 0.0605736017227172865440287807814 0.0785517990589141845703125 +0.0126682996749877940095840855861 -0.0256684511899948133994975307814 -0.0409956514835357679893412807814 +0.0126682996749877940095840855861 0.0256684511899948133994975307814 -0.0409956514835357679893412807814 +0.0126779496669769294048268903907 -0.0282254010438919081260600307814 0.03927589952945709228515625 +0.0126779496669769294048268903907 0.0282254010438919081260600307814 0.03927589952945709228515625 +0.012714900076389312744140625 -0.155389505624771107061832253748 -0.256305295228958118780582253748 +0.012714900076389312744140625 0.155389505624771107061832253748 -0.256305295228958118780582253748 +0.0127154503948986533773402030079 -0.430895864963531549651776231258 -0.341565960645675681384147992503 +0.0127154503948986533773402030079 0.430895864963531549651776231258 -0.341565960645675681384147992503 +0.01272214949131011962890625 -0.349162447452545154913394753748 0.0205856002867221832275390625 +0.01272214949131011962890625 0.349162447452545154913394753748 0.0205856002867221832275390625 +0.0127340495586395277549662807814 -0.0391920000314712538291850307814 0.0283166497945785550216513115629 +0.0127340495586395277549662807814 0.0391920000314712538291850307814 0.0283166497945785550216513115629 +0.0127351492643356326711634451954 -0.0133688494563102729106862653907 -0.0464659988880157526214276231258 +0.0127351492643356326711634451954 0.0133688494563102729106862653907 -0.0464659988880157526214276231258 +0.0127373993396759036672571951954 -0.0392026007175445556640625 0.195706200599670421258480246252 +0.0127373993396759036672571951954 0.0392026007175445556640625 0.195706200599670421258480246252 +0.0127432003617286692537247105861 -0.377772402763366710320980246252 -0.130864799022674560546875 +0.0127432003617286692537247105861 0.377772402763366710320980246252 -0.130864799022674560546875 +0.0127884004265069965017298514454 -0.0393597006797790499588174384371 0.297131699323654185906917746252 +0.0127884004265069965017298514454 0.0393597006797790499588174384371 0.297131699323654185906917746252 +0.0128189999610185626638392264454 -0.039454199373722076416015625 0.598564195632934503699118522491 +0.0128189999610185626638392264454 0.039454199373722076416015625 0.598564195632934503699118522491 +0.0128406003117561354209819057814 -0.0460959494113922160773988423443 0.0145011499524116526521622105861 +0.0128406003117561354209819057814 0.0460959494113922160773988423443 0.0145011499524116526521622105861 +0.0129157006740570068359375 -0.084390699863433837890625 -0.0520711004734039362151776231258 +0.0129157006740570068359375 0.084390699863433837890625 -0.0520711004734039362151776231258 +0.0129226500168442733074147810157 -0.136709095537662500552400501874 0.4285368025302886962890625 +0.0129226500168442733074147810157 0.136709095537662500552400501874 0.4285368025302886962890625 +0.0131262004375457767141321951954 -0.0470808506011962946136151231258 -0.0105402000248432173301615932814 +0.0131262004375457767141321951954 0.0470808506011962946136151231258 -0.0105402000248432173301615932814 +0.0131319999694824232627787807814 -0.298133206367492686883480246252 0.266353201866149913445980246252 +0.0131319999694824232627787807814 0.298133206367492686883480246252 0.266353201866149913445980246252 +0.01314119994640350341796875 -0.0830808997154235950866052462516 0.0540821015834808405120526231258 +0.01314119994640350341796875 0.0830808997154235950866052462516 0.0540821015834808405120526231258 +0.0131434500217437744140625 -0.0404505997896194499641175923443 -0.026286900043487548828125 +0.0131434500217437744140625 0.0404505997896194499641175923443 -0.026286900043487548828125 +0.0131456997245550152170201485546 -0.0728560522198676979721554403113 0.1304575502872467041015625 +0.0131456997245550152170201485546 0.0728560522198676979721554403113 0.1304575502872467041015625 +0.0131878003478050238872487653907 -0.0669605970382690512954226846887 -0.0730913996696472140213174384371 +0.0131878003478050238872487653907 0.0669605970382690512954226846887 -0.0730913996696472140213174384371 +0.0131975002586841583251953125 -0.172046244144439697265625 -0.18090300261974334716796875 +0.0131975002586841583251953125 0.172046244144439697265625 -0.18090300261974334716796875 +0.0131994500756263746787944057814 -0.0339485496282577528526225307814 -0.0342530488967895535568075615629 +0.0131994500756263746787944057814 0.0339485496282577528526225307814 -0.0342530488967895535568075615629 +0.0132160002365708344196360002343 -0.343519043922424271997329014994 0.0657268516719341222565020643742 +0.0132160002365708344196360002343 0.343519043922424271997329014994 0.0657268516719341222565020643742 +0.0132530003786087043071706403907 -0.18324840068817138671875 -0.0790216028690338134765625 +0.0132530003786087043071706403907 0.18324840068817138671875 -0.0790216028690338134765625 +0.0132596999406814578664759451954 -0.0473910987377166789680238423443 0.008846700191497802734375 +0.0132596999406814578664759451954 0.0473910987377166789680238423443 0.008846700191497802734375 +0.0132697492837905890727956403907 -0.019309200346469879150390625 0.04417090117931365966796875 +0.0132697492837905890727956403907 0.019309200346469879150390625 0.04417090117931365966796875 +0.01328445039689540863037109375 -0.105345752835273739900223688437 0.105951896309852591770983565311 +0.01328445039689540863037109375 0.105345752835273739900223688437 0.105951896309852591770983565311 +0.0133085504174232493318497105861 -0.0409602493047714275031800923443 0.0253996014595031759097931711722 +0.0133085504174232493318497105861 0.0409602493047714275031800923443 0.0253996014595031759097931711722 +0.0133182000368833527992329379686 -0.2581974565982818603515625 -0.235916802287101740054353626874 +0.0133182000368833527992329379686 0.2581974565982818603515625 -0.235916802287101740054353626874 +0.0133257001638412489463725307814 -0.0196410000324249295333700615629 0.097142398357391357421875 +0.0133257001638412489463725307814 0.0196410000324249295333700615629 0.097142398357391357421875 +0.0133260004222393035888671875 -0.172529995441436767578125 -0.984914004802703857421875 +0.0133260004222393035888671875 0.172529995441436767578125 -0.984914004802703857421875 +0.0133632003329694267618199532421 -0.401282554864883456158253238755 -0.203208754956722276174829744377 +0.0133632003329694267618199532421 0.401282554864883456158253238755 -0.203208754956722276174829744377 +0.0134356006979942325246790701954 -0.048032701015472412109375 -0.003513149917125701904296875 +0.0134356006979942325246790701954 0.048032701015472412109375 -0.003513149917125701904296875 +0.0134489997290074825286865234375 -0.5227739810943603515625 0.53761200606822967529296875 +0.0134489997290074825286865234375 0.5227739810943603515625 0.53761200606822967529296875 +0.0134530496783554550516148751171 -0.380061501264572165759147992503 -0.527135697007179326867287727509 +0.0134530496783554550516148751171 0.380061501264572165759147992503 -0.527135697007179326867287727509 +0.0134731993079185499717631557814 -0.391770410537719770971420985006 -0.0795899987220764215667401231258 +0.0134731993079185499717631557814 0.391770410537719770971420985006 -0.0795899987220764215667401231258 +0.0134770005941391001619278355861 -0.0480594009160995525031800923443 0.00294330008327961002712047644536 +0.0134770005941391001619278355861 0.0480594009160995525031800923443 0.00294330008327961002712047644536 +0.0134977996349334716796875 -0.0905829012393951499282351846887 -0.0401565998792648357063050923443 +0.0134977996349334716796875 0.0905829012393951499282351846887 -0.0401565998792648357063050923443 +0.01350004971027374267578125 -0.0307725995779037503341513115629 0.0370243012905120891242738423443 +0.01350004971027374267578125 0.0307725995779037503341513115629 0.0370243012905120891242738423443 +0.0135084003210067752492884451954 -0.0221975505352020284488556711722 -0.0427175492048263577560263115629 +0.0135084003210067752492884451954 0.0221975505352020284488556711722 -0.0427175492048263577560263115629 +0.01357799954712390899658203125 -0.17307449877262115478515625 -0.4688934981822967529296875 +0.01357799954712390899658203125 0.17307449877262115478515625 -0.4688934981822967529296875 +0.0135785996913909915578821951954 -0.192237401008605979235710492503 -0.0534825980663299616058026231258 +0.0135785996913909915578821951954 0.192237401008605979235710492503 -0.0534825980663299616058026231258 +0.0135882005095481865619699846093 -0.00987240001559257403240810191392 0.149056649208068853207365123126 +0.0135882005095481865619699846093 0.00987240001559257403240810191392 0.149056649208068853207365123126 +0.0135946501046419147146204764454 -0.0221116505563259124755859375 -0.14773710072040557861328125 +0.0135946501046419147146204764454 0.0221116505563259124755859375 -0.14773710072040557861328125 +0.013605199754238128662109375 -0.21471118927001953125 0.337214803695678744244190738755 +0.013605199754238128662109375 0.21471118927001953125 0.337214803695678744244190738755 +0.013663299381732940673828125 0 0.0480969488620758070518412807814 +0.0137013494968414306640625 -0.00995460003614425693874157019536 0.0470444500446319593955912807814 +0.0137013494968414306640625 0.00995460003614425693874157019536 0.0470444500446319593955912807814 +0.0137177005410194403911550153907 -0.00996635034680366620196689808608 -0.04703719913959503173828125 +0.0137177005410194403911550153907 0.00996635034680366620196689808608 -0.04703719913959503173828125 +0.0137278005480766310264506557814 -0.0854260027408599853515625 0.180316197872161881887720369377 +0.0137278005480766310264506557814 0.0854260027408599853515625 0.180316197872161881887720369377 +0.0137521505355834953998606096093 -0.115885502099990836399889815311 -0.09424124658107757568359375 +0.0137521505355834953998606096093 0.115885502099990836399889815311 -0.09424124658107757568359375 +0.0137951999902725230134903355861 0 0.0990438997745513999282351846887 +0.0138192504644393931306778355861 -0.0425319999456405667404013115629 0.022360749542713165283203125 +0.0138192504644393931306778355861 0.0425319999456405667404013115629 0.022360749542713165283203125 +0.0138197004795074466360071951954 -0.0425319999456405667404013115629 -0.0894429981708526611328125 +0.0138197004795074466360071951954 0.0425319999456405667404013115629 -0.0894429981708526611328125 +0.0138199001550674445415456403907 -0.0951054990291595458984375 -0.0276396989822387702251393903907 +0.0138199001550674445415456403907 0.0951054990291595458984375 -0.0276396989822387702251393903907 +0.0138282001018524176860768903907 0 0.199521398544311528988615123126 +0.0138408005237579349172571951954 -0.0425972014665603679328675923443 -0.397484397888183627056690738755 +0.0138408005237579349172571951954 0.0425972014665603679328675923443 -0.397484397888183627056690738755 +0.0138431996107101443899134451954 -0.0426039993762969970703125 -0.194918596744537375720085492503 +0.0138431996107101443899134451954 0.0426039993762969970703125 -0.194918596744537375720085492503 +0.0138714004307985295377791956639 -0.4700682163238525390625 -0.372617411613464344366519753748 +0.0138714004307985295377791956639 0.4700682163238525390625 -0.372617411613464344366519753748 +0.0138778496533632274972935860546 -0.331737357378005970343082253748 0.110715150833129868934712192186 +0.0138778496533632274972935860546 0.331737357378005970343082253748 0.110715150833129868934712192186 +0.013879000209271907806396484375 -0.150373995304107666015625 0.1992362439632415771484375 +0.013879000209271907806396484375 0.150373995304107666015625 0.1992362439632415771484375 +0.0138872499577701088296910469921 -0.04274204932153224945068359375 0.648444545269012517785256477509 +0.0138872499577701088296910469921 0.04274204932153224945068359375 0.648444545269012517785256477509 +0.01398400031030178070068359375 -0.010160000063478946685791015625 -0.249401748180389404296875 +0.01398400031030178070068359375 0.010160000063478946685791015625 -0.249401748180389404296875 +0.0139921993017196669151225307814 -0.197537600994110107421875 -0.0279841989278793341899831403907 +0.0139921993017196669151225307814 0.197537600994110107421875 -0.0279841989278793341899831403907 +0.0140027493238449110557475307814 -0.00605949983000755344753063269536 -0.0476151496171951307823100307814 +0.0140027493238449110557475307814 0.00605949983000755344753063269536 -0.0476151496171951307823100307814 +0.0140351995825767524028737653907 -0.398766803741455122533920985006 -0.0280707985162735006168244211722 +0.0140351995825767524028737653907 0.398766803741455122533920985006 -0.0280707985162735006168244211722 +0.014076299965381622314453125 -0.00203380007296800630750555072268 -0.0479345500469207791427450615629 +0.014076299965381622314453125 0.00203380007296800630750555072268 -0.0479345500469207791427450615629 +0.0141103506088256849815287807814 -0.0434265494346618707854901231258 -0.0203723505139350898052175153907 +0.0141103506088256849815287807814 0.0434265494346618707854901231258 -0.0203723505139350898052175153907 +0.0142636001110076904296875 -0.0185871005058288567279856096093 -0.04417090117931365966796875 +0.0142636001110076904296875 0.0185871005058288567279856096093 -0.04417090117931365966796875 +0.0142679005861282362510600307814 -0.0331418991088867215255575615629 0.0346127510070800767372212192186 +0.0142679005861282362510600307814 0.0331418991088867215255575615629 0.0346127510070800767372212192186 +0.0143074005842208865774134451954 -0.0864926993846893421569177462516 0.04810740053653717041015625 +0.0143074005842208865774134451954 0.0864926993846893421569177462516 0.04810740053653717041015625 +0.0143312007188797010948100307814 -0.0656615018844604464431924384371 0.0740485012531280489822549384371 +0.0143312007188797010948100307814 0.0656615018844604464431924384371 0.0740485012531280489822549384371 +0.0143361004069447513925572579296 -0.424993953108787569927784488755 -0.147222898900508880615234375 +0.0143361004069447513925572579296 0.424993953108787569927784488755 -0.147222898900508880615234375 +0.0143450006842613230623184605861 -0.0309617489576339728618581403907 -0.0365456998348236070106587192186 +0.0143450006842613230623184605861 0.0309617489576339728618581403907 -0.0365456998348236070106587192186 +0.0143455997109413150442103201954 -0.557625579833984419408920985006 0.573452806472778298108039507497 +0.0143455997109413150442103201954 0.557625579833984419408920985006 0.573452806472778298108039507497 +0.01435850001871585845947265625 -0.15189899504184722900390625 0.476152002811431884765625 +0.01435850001871585845947265625 0.15189899504184722900390625 0.476152002811431884765625 +0.0143661007285118113435684605861 -0.0961938023567199818053552462516 0.0232455998659133918071706403907 +0.0143661007285118113435684605861 0.0961938023567199818053552462516 0.0232455998659133918071706403907 +0.0143892005085945132863978201954 -0.0442862004041671766807475307814 0.0884967982769012534438601846887 +0.0143892005085945132863978201954 0.0442862004041671766807475307814 0.0884967982769012534438601846887 +0.0143995001912117018272319057814 -0.0227128997445106527164337961722 0.0421518504619598430305238423443 +0.0143995001912117018272319057814 0.0227128997445106527164337961722 0.0421518504619598430305238423443 +0.0144365999847650521015207658593 -0.237032407522201532534822376874 0.183322799205780012643529630623 +0.0144365999847650521015207658593 0.237032407522201532534822376874 0.183322799205780012643529630623 +0.0144431993365287791170059605861 -0.130698394775390636102230246252 0.150696194171905523129240123126 +0.0144431993365287791170059605861 0.130698394775390636102230246252 0.150696194171905523129240123126 +0.0144545003771781935264506557814 -0.0921917974948883167662927462516 0.0359407991170883206466513115629 +0.0144545003771781935264506557814 0.0921917974948883167662927462516 0.0359407991170883206466513115629 +0.0144853994250297556795059605861 -0.0803011000156402671157351846887 -0.0578092992305755670745526231258 +0.0144853994250297556795059605861 0.0803011000156402671157351846887 -0.0578092992305755670745526231258 +0.0144878996536135663114608362889 -0.409297001361846879419204014994 -0.567684596776962258068977007497 +0.0144878996536135663114608362889 0.409297001361846879419204014994 -0.567684596776962258068977007497 +0.0144936002790927876554549769139 -0.0840947985649108803452023153113 -0.287607300281524647100894753748 +0.0144936002790927876554549769139 0.0840947985649108803452023153113 -0.287607300281524647100894753748 +0.0145048007369041453279434605861 -0.198087799549102799856470369377 0.02346999943256378173828125 +0.0145048007369041453279434605861 0.198087799549102799856470369377 0.02346999943256378173828125 +0.0145062997937202460552175153907 -0.0446462988853454645354901231258 0.0172125995159149169921875 +0.0145062997937202460552175153907 0.0446462988853454645354901231258 0.0172125995159149169921875 +0.0145170003175735459755024692186 -0.0846372038125991765777911268742 -0.122986954450607297029129938437 +0.0145170003175735459755024692186 0.0846372038125991765777911268742 -0.122986954450607297029129938437 +0.0145221993327140815044362653907 -0.03801999986171722412109375 -0.0290444999933242818668244211722 +0.0145221993327140815044362653907 0.03801999986171722412109375 -0.0290444999933242818668244211722 +0.01453959941864013671875 -0.399042797088623057977230246252 0.0235264003276824951171875 +0.01453959941864013671875 0.399042797088623057977230246252 0.0235264003276824951171875 +0.0145619004964828505088725307814 -0.0187428995966911308979074846093 -0.097142398357391357421875 +0.0145619004964828505088725307814 0.0187428995966911308979074846093 -0.097142398357391357421875 +0.0146355999633669842802108362889 -0.313739302754402149542301003748 0.154445196688175190313785378748 +0.0146355999633669842802108362889 0.313739302754402149542301003748 0.154445196688175190313785378748 +0.0146685004234313950965962192186 -0.109806901216506949681139815311 0.278795993328094460217414507497 +0.0146685004234313950965962192186 0.109806901216506949681139815311 0.278795993328094460217414507497 +0.0146797999739646922029434605861 -0.193328595161437993832365123126 0.0490774005651474012901225307814 +0.0146797999739646922029434605861 0.193328595161437993832365123126 0.0490774005651474012901225307814 +0.0147025499492883671842635706639 -0.13242495059967041015625 -0.0689017519354820223709268134371 +0.0147025499492883671842635706639 0.13242495059967041015625 -0.0689017519354820223709268134371 +0.014718450605869293212890625 -0.01320745050907135009765625 0.04592309892177581787109375 +0.014718450605869293212890625 0.01320745050907135009765625 0.04592309892177581787109375 +0.0147734999656677253032643903907 -0.335399857163429293560596988755 0.299647352099418673443409488755 +0.0147734999656677253032643903907 0.335399857163429293560596988755 0.299647352099418673443409488755 +0.014832399785518646240234375 -0.0456490486860275310188050923443 -0.0140058994293212890625 +0.014832399785518646240234375 0.0456490486860275310188050923443 -0.0140058994293212890625 +0.0148340500891208631334405865232 -0.181287756562232948986945757497 -0.299022844433784462658820757497 +0.0148340500891208631334405865232 0.181287756562232948986945757497 -0.299022844433784462658820757497 +0.014848000369966030120849609375 -0.445869505405426025390625 -0.22578750550746917724609375 +0.014848000369966030120849609375 0.445869505405426025390625 -0.22578750550746917724609375 +0.0148756995797157294536550153907 -0.0978851020336151123046875 -0.0140432000160217295564590855861 +0.0148756995797157294536550153907 0.0978851020336151123046875 -0.0140432000160217295564590855861 +0.0148902505636215216899831403907 -0.00332829989492893245014992764652 0.0476151496171951307823100307814 +0.0148902505636215216899831403907 0.00332829989492893245014992764652 0.0476151496171951307823100307814 +0.0149198004975914944730819300389 -0.0459196507930755559723223768742 0.346653649210929837298778011245 +0.0149198004975914944730819300389 0.0459196507930755559723223768742 0.346653649210929837298778011245 +0.0149357995018363012840190151564 -0.190381948649883281365902121252 -0.51578284800052642822265625 +0.0149357995018363012840190151564 0.190381948649883281365902121252 -0.51578284800052642822265625 +0.0149554999545216549955428675389 -0.0460298992693424224853515625 0.698324894905090309826789507497 +0.0149554999545216549955428675389 0.0460298992693424224853515625 0.698324894905090309826789507497 +0.0149897500872612013389506557814 -0.0354482501745224040656800923443 0.0319175511598587050010600307814 +0.0149897500872612013389506557814 0.0354482501745224040656800923443 0.0319175511598587050010600307814 +0.0150069996714591990388809605861 -0.125661396980285638980134876874 -0.154867601394653331414730246252 +0.0150069996714591990388809605861 0.125661396980285638980134876874 -0.154867601394653331414730246252 +0.0150161504745483405376393903907 -0.04621525108814239501953125 0.0117757499217987070955215855861 +0.0150161504745483405376393903907 0.04621525108814239501953125 0.0117757499217987070955215855861 +0.0150273504666984091676651402736 -0.509240567684173583984375 -0.403668862581253062860042746252 +0.0150273504666984091676651402736 0.509240567684173583984375 -0.403668862581253062860042746252 +0.01504600048065185546875 -0.173173594474792497122095369377 0.0989167988300323486328125 +0.01504600048065185546875 0.173173594474792497122095369377 0.0989167988300323486328125 +0.0151040002703666693950612653907 -0.392593193054199263158920985006 0.0751164019107818659026776231258 +0.0151040002703666693950612653907 0.392593193054199263158920985006 0.0751164019107818659026776231258 +0.0151075005531311045564590855861 -0.0981482982635498157897302462516 0.0117757998406887061382253278907 +0.0151075005531311045564590855861 0.0981482982635498157897302462516 0.0117757998406887061382253278907 +0.0151573492214083678508718122657 -0.440741711854934714587272992503 -0.0895387485623359707931356865629 +0.0151573492214083678508718122657 0.440741711854934714587272992503 -0.0895387485623359707931356865629 +0.0152208000421524061729350307814 -0.2950828075408935546875 -0.269619202613830599712940738755 +0.0152208000421524061729350307814 0.2950828075408935546875 -0.269619202613830599712940738755 +0.0152421996928751458250106409764 -0.592477178573608376233039507497 0.609293606877326920923110264994 +0.0152421996928751458250106409764 0.592477178573608376233039507497 0.609293606877326920923110264994 +0.01526699960231781005859375 -0.184860599040985118524105246252 0.0747896015644073514083700615629 +0.01526699960231781005859375 0.184860599040985118524105246252 0.0747896015644073514083700615629 +0.0152753993868827830232559605861 -0.163245594501495366879240123126 -0.114532005786895763055355246252 +0.0152753993868827830232559605861 0.163245594501495366879240123126 -0.114532005786895763055355246252 +0.0152976006269454969932475307814 -0.0470808506011962946136151231258 -0.00702679976820945809135032789072 +0.0152976006269454969932475307814 0.0470808506011962946136151231258 -0.00702679976820945809135032789072 +0.015302999876439571380615234375 -0.2138332426548004150390625 -0.1286127567291259765625 +0.015302999876439571380615234375 0.2138332426548004150390625 -0.1286127567291259765625 +0.015305849723517894744873046875 -0.24155008792877197265625 0.379366654157638538702457253748 +0.015305849723517894744873046875 0.24155008792877197265625 0.379366654157638538702457253748 +0.0153297007083892829204518903907 -0.0152603507041931159282643903907 -0.0450790494680404704719300923443 +0.0153297007083892829204518903907 0.0152603507041931159282643903907 -0.0450790494680404704719300923443 +0.0153431996703147898591934605861 -0.0472216486930847195724325615629 0.00589094981551170366468328509768 +0.0153431996703147898591934605861 0.0472216486930847195724325615629 0.00589094981551170366468328509768 +0.0153741002082824693153462192186 -0.140407195687294011898771373126 -0.050492249429225921630859375 +0.0153741002082824693153462192186 0.140407195687294011898771373126 -0.050492249429225921630859375 +0.0153955996036529551423965855861 -0.0607472002506256117393412807814 -0.0779278993606567493834802462516 +0.0153955996036529551423965855861 0.0607472002506256117393412807814 -0.0779278993606567493834802462516 +0.0154305994510650634765625 -0.02762059867382049560546875 -0.0387169003486633328536825615629 +0.0154305994510650634765625 0.02762059867382049560546875 -0.0387169003486633328536825615629 +0.015431649982929229736328125 -0.0259627014398574849918244211722 0.0398472487926483168174662807814 +0.015431649982929229736328125 0.0259627014398574849918244211722 0.0398472487926483168174662807814 +0.01545085012912750244140625 -0.0475528001785278375823651231258 0 +0.01545085012912750244140625 0.0475528001785278375823651231258 0 +0.0155227496288716793060302734375 -0.4385325014591217041015625 -0.60823349654674530029296875 +0.0155227496288716793060302734375 0.4385325014591217041015625 -0.60823349654674530029296875 +0.0155333995819091803813893903907 -0.026265799999237060546875 0.095230400562286376953125 +0.0155333995819091803813893903907 0.026265799999237060546875 0.095230400562286376953125 +0.0155709005892276774324356480861 -0.0479218516498804078529438754686 -0.447169947624206531866519753748 +0.0155709005892276774324356480861 0.0479218516498804078529438754686 -0.447169947624206531866519753748 +0.0156065493822097785259206403907 -0.0413571506738662775237713731258 -0.0233671501278877279117462961722 +0.0156065493822097785259206403907 0.0413571506738662775237713731258 -0.0233671501278877279117462961722 +0.0156163495033979412424107735546 -0.112414652109146112612947376874 0.0980770468711853055099325615629 +0.0156163495033979412424107735546 0.112414652109146112612947376874 0.0980770468711853055099325615629 +0.015643499791622161865234375 -0.0987688004970550537109375 0 +0.015643499791622161865234375 -0.0374691992998123155067524692186 0.0291777491569519056846537807814 +0.015643499791622161865234375 0.0374691992998123155067524692186 0.0291777491569519056846537807814 +0.015643499791622161865234375 0.0987688004970550537109375 0 +0.01566014997661113739013671875 -0.14585535228252410888671875 -0.0313204497098922701736611884371 +0.01566014997661113739013671875 0.14585535228252410888671875 -0.0313204497098922701736611884371 +0.0156918004155159017398712961722 -0.199383401870727561266960492503 0 +0.0156918004155159017398712961722 0.199383401870727561266960492503 0 +0.0157005004584789276123046875 -0.0483204022049903841873330634371 -0.141133350133895857370092130623 +0.0157005004584789276123046875 0.0483205497264862018913511576557 -0.141133350133895857370092130623 +0.0157187998294830329204518903907 -0.0483781501650810200065855326557 0.14111159741878509521484375 +0.0157187998294830329204518903907 0.0483781501650810200065855326557 0.14111159741878509521484375 +0.0157284006476402296592631557814 -0.0162763506174087545230744211722 0.0445836007595062297492738423443 +0.0157284006476402296592631557814 0.0162763506174087545230744211722 0.0445836007595062297492738423443 +0.015788249671459197998046875 -0.1120634973049163818359375 -0.22291825711727142333984375 +0.015788249671459197998046875 0.1120634973049163818359375 -0.22291825711727142333984375 +0.0157895995303988477542755930472 -0.448612654209136985095085492503 -0.0315796483308076886276083428129 +0.0157895995303988477542755930472 0.448612654209136985095085492503 -0.0315796483308076886276083428129 +0.0157943500205874470809774834379 -0.167088894546031957455411998126 0.5237672030925750732421875 +0.0157943500205874470809774834379 0.167088894546031957455411998126 0.5237672030925750732421875 +0.0158114492893219014957306711722 -0.0353550493717193631271200615629 -0.03162305057048797607421875 +0.0158114492893219014957306711722 0.0353550493717193631271200615629 -0.03162305057048797607421875 +0.01581850089132785797119140625 -0.20758874714374542236328125 0.13840775191783905029296875 +0.01581850089132785797119140625 0.20758874714374542236328125 0.13840775191783905029296875 +0.0158370003104209879085662038278 -0.206455492973327631167634876874 -0.2170836031436920166015625 +0.0158370003104209879085662038278 0.206455492973327631167634876874 -0.2170836031436920166015625 +0.0158603996038436910465119211722 -0.379128408432006847039730246252 0.1265316009521484375 +0.0158603996038436910465119211722 0.379128408432006847039730246252 0.1265316009521484375 +0.0158739998936653151084819057814 -0.0703978002071380670745526231258 0.0692255020141601534744424384371 +0.0158739998936653151084819057814 0.0703978002071380670745526231258 0.0692255020141601534744424384371 +0.015921749174594879150390625 -0.049003250896930694580078125 0.2446327507495880126953125 +0.015921749174594879150390625 0.049003250896930694580078125 0.2446327507495880126953125 +0.01592900045216083526611328125 -0.4722155034542083740234375 -0.16358099877834320068359375 +0.01592900045216083526611328125 0.4722155034542083740234375 -0.16358099877834320068359375 +0.015979699790477752685546875 -0.0757929980754852294921875 -0.0632461011409759521484375 +0.015979699790477752685546875 0.0757929980754852294921875 -0.0632461011409759521484375 +0.0159933004528284052059294850778 -0.108793947100639346037276311563 -0.102019947767257687654129938437 +0.0159933004528284052059294850778 0.108793947100639346037276311563 -0.102019947767257687654129938437 +0.0159969002008438117290456403907 -0.00659879967570304887952703509768 0.0984914004802703857421875 +0.0159969002008438117290456403907 0.00659879967570304887952703509768 0.0984914004802703857421875 +0.0160237499512732028961181640625 -0.04931774921715259552001953125 0.748205244541168212890625 +0.0160237499512732028961181640625 0.04931774921715259552001953125 0.748205244541168212890625 +0.016025699675083160400390625 -0.0361586987972259549239950615629 -0.0918461978435516357421875 +0.016025699675083160400390625 0.0361586987972259549239950615629 -0.0918461978435516357421875 +0.0160409003496170057823100307814 -0.00663954988121986423854625769536 0.0468892991542816175987162807814 +0.0160409003496170057823100307814 0.00663954988121986423854625769536 0.0468892991542816175987162807814 +0.0161054998636245734477956403907 -0.0429923504590988200813050923443 0.0198058500885963453819194057814 +0.0161054998636245734477956403907 0.0429923504590988200813050923443 0.0198058500885963453819194057814 +0.0161387996748089783405344377343 -0.627328777313232444079460492503 0.645134407281875654760483485006 +0.0161387996748089783405344377343 0.627328777313232444079460492503 0.645134407281875654760483485006 +0.0161833005025982835933806569528 -0.54841291904449462890625 -0.434720313549041725842414507497 +0.0161833005025982835933806569528 0.54841291904449462890625 -0.434720313549041725842414507497 +0.01623634994029998779296875 -0.0393215000629425076583700615629 0.0262716501951217665244975307814 +0.01623634994029998779296875 0.0393215000629425076583700615629 0.0262716501951217665244975307814 +0.0162456005811691291118581403907 -0.0499994993209838881065287807814 0.0850654006004333551604901231258 +0.0162456005811691291118581403907 0.0499994993209838881065287807814 0.0850654006004333551604901231258 +0.0162527997046709067607839216407 -0.146779498457908635922208873126 0.0262984491884708411479909528907 +0.0162527997046709067607839216407 0.146779498457908635922208873126 0.0262984491884708411479909528907 +0.016284249722957611083984375 -0.0285567998886108419254181711722 0.0376740485429763807823100307814 +0.016284249722957611083984375 0.0285567998886108419254181711722 0.0376740485429763807823100307814 +0.0162935994565486901020090471093 -0.207689398527145380191072376874 -0.562672197818756103515625 +0.0162935994565486901020090471093 0.207689398527145380191072376874 -0.562672197818756103515625 +0.0163159504532814046695587961722 -0.0118541002273559580720840855861 -0.0457522511482238783409037807814 +0.0163159504532814046695587961722 0.0118541002273559580720840855861 -0.0457522511482238783409037807814 +0.0163328004069626352146027414847 -0.490456455945968650134147992503 -0.248366256058216106072933371252 +0.0163328004069626352146027414847 0.490456455945968650134147992503 -0.248366256058216106072933371252 +0.0163472503423690816715119211722 -0.0242601007223129279399831403907 -0.0405488997697830214073100307814 +0.0163472503423690816715119211722 0.0242601007223129279399831403907 -0.0405488997697830214073100307814 +0.01635704934597015380859375 -0.448923146724700961041065738755 0.0264672003686428070068359375 +0.01635704934597015380859375 0.448923146724700961041065738755 0.0264672003686428070068359375 +0.01639845035970211029052734375 -0.0828671962022781288803585653113 0.123952049016952503546207253748 +0.01639845035970211029052734375 0.0828671962022781288803585653113 0.123952049016952503546207253748 +0.0163998499512672431255300153907 -0.0392854988574981717208700615629 -0.0262239992618560797954518903907 +0.0163998499512672431255300153907 0.0392854988574981717208700615629 -0.0262239992618560797954518903907 +0.01641499996185302734375 -0.3726665079593658447265625 0.3329415023326873779296875 +0.01641499996185302734375 0.3726665079593658447265625 0.3329415023326873779296875 +0.0164546504616737386539337961722 -0.0439671009778976468185263115629 -0.0172086998820304877544362653907 +0.0164546504616737386539337961722 0.0439671009778976468185263115629 -0.0172086998820304877544362653907 +0.0164958000183105454872212192186 -0.134519702196121221371427623126 0.0642830997705459566970986884371 +0.0164958000183105454872212192186 0.134519702196121221371427623126 0.0642830997705459566970986884371 +0.0165535502135753624652902971093 -0.141929545998573297671541126874 0.0456286489963531466385049384371 +0.0165535502135753624652902971093 0.141929545998573297671541126874 0.0456286489963531466385049384371 +0.0165575996041297905658762346093 -0.467768001556396528783920985006 -0.648782396316528342516960492503 +0.0165575996041297905658762346093 0.467768001556396528783920985006 -0.648782396316528342516960492503 +0.0165662504732608795166015625 -0.2290605008602142333984375 -0.098777003586292266845703125 +0.0165662504732608795166015625 0.2290605008602142333984375 -0.098777003586292266845703125 +0.0165777996182441718364675153907 -0.0773450016975402859786825615629 -0.183692395687103271484375 +0.0165777996182441718364675153907 0.0773450016975402859786825615629 -0.183692395687103271484375 +0.0166500002145767225791850307814 -0.00798050016164779732474876539072 -0.0464659988880157526214276231258 +0.0166500002145767225791850307814 0.00798050016164779732474876539072 -0.0464659988880157526214276231258 +0.0166528999805450432514231096093 -0.0869720995426178089537927462516 -0.0464599996805191081672425923443 +0.0166528999805450432514231096093 0.0869720995426178089537927462516 -0.0464599996805191081672425923443 +0.0166548002511262872860076100778 -0.180448794364929193667634876874 0.239083492755889887027009876874 +0.0166548002511262872860076100778 0.180448794364929193667634876874 0.239083492755889887027009876874 +0.016673900187015533447265625 -0.0121141999959945689119278355861 -0.0978531002998352106292401231258 +0.016673900187015533447265625 0.0121141999959945689119278355861 -0.0978531002998352106292401231258 +0.0167059496045112616802175153907 -0.0448399990797042902190838731258 0.0145011499524116526521622105861 +0.0167059496045112616802175153907 0.0448399990797042902190838731258 0.0145011499524116526521622105861 +0.0167263999581336968158762346093 -0.358559203147888194695980246252 0.176508796215057384149105246252 +0.0167263999581336968158762346093 0.358559203147888194695980246252 0.176508796215057384149105246252 +0.0167407505214214324951171875 -0.0121627494692802418790877894139 -0.148565849661827092953458873126 +0.0167407505214214324951171875 0.0121627494692802418790877894139 -0.148565849661827092953458873126 +0.0167657002806663527061381557814 -0.0409602493047714275031800923443 0.023262999951839447021484375 +0.0167657002806663527061381557814 0.0409602493047714275031800923443 0.023262999951839447021484375 +0.0167808003723621361469309221093 -0.0121920000761747363698939139454 -0.299282097816467251849559261245 +0.0167808003723621361469309221093 0.0121920000761747363698939139454 -0.299282097816467251849559261245 +0.0167961001396179192279856096093 0 -0.149056649208068853207365123126 +0.0168203994631767293765900461722 -0.00406409986317157745361328125 -0.0984914004802703857421875 +0.0168203994631767293765900461722 0.00406409986317157745361328125 -0.0984914004802703857421875 +0.0168286498636007302021067033593 -0.0197620511054992682720143903907 0.14773710072040557861328125 +0.0168286498636007302021067033593 0.0197620511054992682720143903907 0.14773710072040557861328125 +0.01684149913489818572998046875 -0.489713013172149658203125 -0.09948749840259552001953125 +0.01684149913489818572998046875 0.489713013172149658203125 -0.09948749840259552001953125 +0.0168426999822258935401997348436 -0.276537808775901783331363503748 0.213876599073410028628572376874 +0.0168426999822258935401997348436 0.276537808775901783331363503748 0.213876599073410028628572376874 +0.0168799504637718207622487653907 -0.00405699983239173923854625769536 -0.0468892991542816175987162807814 +0.0168799504637718207622487653907 0.00405699983239173923854625769536 -0.0468892991542816175987162807814 +0.0168883994221687323833425153907 -0.0519778013229370144943075615629 0.192387795448303228207365123126 +0.0168883994221687323833425153907 0.0519778013229370144943075615629 0.192387795448303228207365123126 +0.0169092003256082513973357350778 -0.0981105983257293673416299384371 -0.335541850328445412365852007497 +0.0169092003256082513973357350778 0.0981105983257293673416299384371 -0.335541850328445412365852007497 +0.0169358000159263617778737653907 0 -0.0470444500446319593955912807814 +0.0169368997216224684287944057814 -0.0197066500782966634586212961722 0.0427175492048263577560263115629 +0.0169368997216224684287944057814 0.0197066500782966634586212961722 0.0427175492048263577560263115629 +0.0169532001018524169921875 -0.207186007499694846423210492503 -0.341740393638610862048210492503 +0.0169532001018524169921875 0.207186007499694846423210492503 -0.341740393638610862048210492503 +0.0169560998678207411338725307814 0 0.0470371514558792155891175923443 +0.016973249614238739013671875 -0.2402967512607574462890625 -0.066853247582912445068359375 +0.016973249614238739013671875 0.2402967512607574462890625 -0.066853247582912445068359375 +0.0169920003041625043704865305472 -0.441667342185974143298210492503 0.0845059521496295956710653740629 +0.0169920003041625043704865305472 0.441667342185974143298210492503 0.0845059521496295956710653740629 +0.0170032501220703131938893903907 -0.0324721008539199870734925923443 -0.0340066492557525648643412807814 +0.0170032501220703131938893903907 0.0324721008539199870734925923443 -0.0340066492557525648643412807814 +0.01700649969279766082763671875 -0.2683889865875244140625 0.421518504619598388671875 +0.01700649969279766082763671875 0.2683889865875244140625 0.421518504619598388671875 +0.0170353996567428091213347585153 -0.662180376052856400903579014994 0.680975207686424277575554242503 +0.0170353996567428091213347585153 0.662180376052856400903579014994 0.680975207686424277575554242503 +0.0170373000204563120052458913278 -0.148656901717185957467748380623 -0.0105296999216079704975168596093 +0.0170373000204563120052458913278 0.148656901717185957467748380623 -0.0105296999216079704975168596093 +0.0170512005686759941791574846093 -0.0524796009063720758636151231258 0.396175599098205599712940738755 +0.0170512005686759941791574846093 0.0524796009063720758636151231258 0.396175599098205599712940738755 +0.0170543000102043144916574846093 -0.0458045512437820490081463731258 -0.0105402000248432173301615932814 +0.0170543000102043144916574846093 0.0458045512437820490081463731258 -0.0105402000248432173301615932814 +0.0170574992895126363590119211722 -0.0310117512941360494449494211722 0.0353172987699508708625550923443 +0.0170574992895126363590119211722 0.0310117512941360494449494211722 0.0353172987699508708625550923443 +0.0170919999480247490619699846093 -0.0526055991649627685546875 0.798085594177246115954460492503 +0.0170919999480247490619699846093 0.0526055991649627685546875 0.798085594177246115954460492503 +0.0171093001961708061908762346093 -0.00991675034165382524031784328145 0.04592309892177581787109375 +0.0171093001961708061908762346093 0.00991675034165382524031784328145 0.04592309892177581787109375 +0.0171132504940032931228799384371 -0.128108051419258101022435880623 0.325261992216110185083266514994 +0.0171132504940032931228799384371 0.128108051419258101022435880623 0.325261992216110185083266514994 +0.0171143993735313436344025461722 -0.0923877000808715903579226846887 -0.0342287003993988064864950615629 +0.0171143993735313436344025461722 0.0923877000808715903579226846887 -0.0342287003993988064864950615629 +0.0171234000474214560771901716407 -0.3319681584835052490234375 -0.303321602940559376104801003748 +0.0171234000474214560771901716407 0.3319681584835052490234375 -0.303321602940559376104801003748 +0.0171283498406410231162944057814 -0.04613409936428070068359375 0.008846700191497802734375 +0.0171283498406410231162944057814 0.04613409936428070068359375 0.008846700191497802734375 +0.0171516492962837212299387346093 -0.0207133501768112203433869211722 -0.0421518504619598430305238423443 +0.0171516492962837212299387346093 0.0207133501768112203433869211722 -0.0421518504619598430305238423443 +0.01715975068509578704833984375 -0.106782503426074981689453125 0.22539524734020233154296875 +0.01715975068509578704833984375 0.106782503426074981689453125 0.22539524734020233154296875 +0.0172166995704174027870259067186 -0.148747202754020674264623380623 0.00882419999688863719577991417964 +0.0172166995704174027870259067186 0.148747202754020674264623380623 0.00882419999688863719577991417964 +0.0172302000224590287635884067186 -0.182278794050216658151342130623 0.57138240337371826171875 +0.0172302000224590287635884067186 0.182278794050216658151342130623 0.57138240337371826171875 +0.017285250127315521240234375 0 0.249401748180389404296875 +0.017301000654697418212890625 -0.0532465018332004547119140625 -0.4968554973602294921875 +0.017301000654697418212890625 0.0532465018332004547119140625 -0.4968554973602294921875 +0.0173039995133876800537109375 -0.053254999220371246337890625 -0.24364824593067169189453125 +0.0173039995133876800537109375 0.053254999220371246337890625 -0.24364824593067169189453125 +0.0173392505384981632232666015625 -0.587585270404815673828125 -0.4657717645168304443359375 +0.0173392505384981632232666015625 0.587585270404815673828125 -0.4657717645168304443359375 +0.0173454493284225484683869211722 -0.0468024998903274550010600307814 0.00294330008327961002712047644536 +0.0173454493284225484683869211722 0.0468024998903274550010600307814 0.00294330008327961002712047644536 +0.0173633992671966552734375 -0.0467565000057220472862162807814 -0.003513149917125701904296875 +0.0173633992671966552734375 0.0467565000057220472862162807814 -0.003513149917125701904296875 +0.0174173995852470418765900461722 -0.0749781012535095242599325615629 0.0638351023197174100021200615629 +0.0174173995852470418765900461722 0.0749781012535095242599325615629 0.0638351023197174100021200615629 +0.0174902491271495819091796875 -0.24692200124263763427734375 -0.0349802486598491668701171875 +0.0174902491271495819091796875 0.24692200124263763427734375 -0.0349802486598491668701171875 +0.0175219004973769208743927805472 -0.519437053799629233630241742503 -0.179939098656177548507528740629 +0.0175219004973769208743927805472 0.519437053799629233630241742503 -0.179939098656177548507528740629 +0.0175275996327400214458425153907 -0.0971414029598236111739950615629 0.17394340038299560546875 +0.0175275996327400214458425153907 0.0971414029598236111739950615629 0.17394340038299560546875 +0.01754399947822093963623046875 -0.49845850467681884765625 -0.0350884981453418731689453125 +0.01754399947822093963623046875 0.49845850467681884765625 -0.0350884981453418731689453125 +0.0175583004951477064659037807814 -0.0324860006570816053916850307814 0.0929319977760315052428552462516 +0.0175583004951477064659037807814 0.0324860006570816053916850307814 0.0929319977760315052428552462516 +0.0175668999552726738666574846093 -0.0540643990039825494964276231258 -0.0822705984115600641448651231258 +0.0175668999552726738666574846093 0.0540643990039825494964276231258 -0.0822705984115600641448651231258 +0.0175924495793879018257221957811 -0.497003501653671242443977007497 -0.689331296086311273718649772491 +0.0175924495793879018257221957811 0.497003501653671242443977007497 -0.689331296086311273718649772491 +0.0176513994112610823894460310157 -0.224996848404407506771818248126 -0.60956154763698577880859375 +0.0176513994112610823894460310157 0.224996848404407506771818248126 -0.60956154763698577880859375 +0.01768215000629425048828125 -0.0744652479887008694747763115629 -0.129004946351051336117521373126 +0.01768215000629425048828125 0.0744652479887008694747763115629 -0.129004946351051336117521373126 +0.017712600529193878173828125 -0.140461003780364995785490123126 0.141269195079803483450220369377 +0.017712600529193878173828125 0.140461003780364995785490123126 0.141269195079803483450220369377 +0.0177408501505851752544362653907 -0.0367394506931304973273988423443 -0.0289045989513397223735768903907 +0.0177408501505851752544362653907 0.0367394506931304973273988423443 -0.0289045989513397223735768903907 +0.0178136497735977179790456403907 -0.03337495028972625732421875 0.0326923489570617661903462192186 +0.0178136497735977179790456403907 0.03337495028972625732421875 0.0326923489570617661903462192186 +0.0178149998188018819644806711722 -0.0892925024032592828948651231258 0.04134570062160491943359375 +0.0178149998188018819644806711722 0.0892925024032592828948651231258 0.04134570062160491943359375 +0.0178176004439592368389089216407 -0.535043406486511163855368522491 -0.270945006608962979388621761245 +0.0178176004439592368389089216407 0.535043406486511163855368522491 -0.270945006608962979388621761245 +0.017819799482822418212890625 -0.0170714497566223158409037807814 -0.0434858500957489013671875 +0.017819799482822418212890625 0.0170714497566223158409037807814 -0.0434858500957489013671875 +0.01782830059528350830078125 -0.0940742015838623157897302462516 0.02884779870510101318359375 +0.01782830059528350830078125 0.0940742015838623157897302462516 0.02884779870510101318359375 +0.0178429495543241493915598283593 -0.426519459486007723736378238755 0.1423480510711669921875 +0.0178429495543241493915598283593 0.426519459486007723736378238755 0.1423480510711669921875 +0.0178666502237319925472380788278 -0.118896746635437006167634876874 0.08969025313854217529296875 +0.0178666502237319925472380788278 0.118896746635437006167634876874 0.08969025313854217529296875 +0.01793199963867664337158203125 -0.69703197479248046875 0.716816008090972900390625 +0.01793199963867664337158203125 0.69703197479248046875 0.716816008090972900390625 +0.017973400652408599853515625 -0.0420087009668350247482138115629 -0.0203033506870269782329518903907 +0.017973400652408599853515625 0.0420087009668350247482138115629 -0.0203033506870269782329518903907 +0.0180212497711181654502787807814 -0.0230439007282257080078125 0.0405488997697830214073100307814 +0.0180212497711181654502787807814 0.0230439007282257080078125 0.0405488997697830214073100307814 +0.0180241003632545492008087961722 -0.0554735004901886000205912807814 0.0812268972396850696959802462516 +0.0180241003632545492008087961722 0.0554735004901886000205912807814 0.0812268972396850696959802462516 +0.01805399917066097259521484375 -0.16337299346923828125 0.18837024271488189697265625 +0.01805399917066097259521484375 0.16337299346923828125 0.18837024271488189697265625 +0.0180564999580383328536825615629 -0.409933158755302451403679242503 0.366235652565956137927116742503 +0.0180564999580383328536825615629 0.409933158755302451403679242503 0.366235652565956137927116742503 +0.0180899992585182196880300153907 -0.0131431505084037784231165701954 0.0447214514017105144172425923443 +0.0180899992585182196880300153907 0.0131431505084037784231165701954 0.0447214514017105144172425923443 +0.0180902004241943366313893903907 -0.02938894927501678466796875 -0.03618060052394866943359375 +0.0180902004241943366313893903907 0.02938894927501678466796875 -0.03618060052394866943359375 +0.0181176006793975843955912807814 -0.0131632000207901004446009451954 0.198742198944091813528345369377 +0.0181176006793975843955912807814 0.0131632000207901004446009451954 0.198742198944091813528345369377 +0.0181207001209259047080912807814 -0.01316539943218231201171875 0.0974592983722686878600427462516 +0.0181207001209259047080912807814 0.01316539943218231201171875 0.0974592983722686878600427462516 +0.0181262001395225517963449846093 -0.02948220074176788330078125 -0.196982800960540771484375 +0.0181262001395225517963449846093 0.02948220074176788330078125 -0.196982800960540771484375 +0.01813100092113018035888671875 -0.24760974943637847900390625 0.0293374992907047271728515625 +0.01813100092113018035888671875 0.24760974943637847900390625 0.0293374992907047271728515625 +0.0181494995951652533794362653907 -0.0296000003814697286441681711722 -0.0937786996364593505859375 +0.0181494995951652533794362653907 0.0296000003814697286441681711722 -0.0937786996364593505859375 +0.0181602499447762952278218051561 -0.05589344911277294158935546875 0.847965943813323907995993522491 +0.0181602499447762952278218051561 0.05589344911277294158935546875 0.847965943813323907995993522491 +0.0181610494852066060855744211722 -0.00333020016551017778577703509768 0.0464659512042999295333700615629 +0.0181610494852066060855744211722 0.00333020016551017778577703509768 0.0464659512042999295333700615629 +0.0181744992733001708984375 -0.49880349636077880859375 0.029408000409603118896484375 +0.0181744992733001708984375 0.49880349636077880859375 0.029408000409603118896484375 +0.0183017000555992133403737653907 -0.09606540203094482421875 -0.020892299711704254150390625 +0.0183017000555992133403737653907 0.09606540203094482421875 -0.020892299711704254150390625 +0.0183144494891166707828400461722 -0.0432464510202407864669638115629 0.01715590059757232666015625 +0.0183144494891166707828400461722 0.0432464510202407864669638115629 0.01715590059757232666015625 +0.0183362007141113295127787807814 -0.154514002799987809622095369377 -0.125654995441436767578125 +0.0183362007141113295127787807814 0.154514002799987809622095369377 -0.125654995441436767578125 +0.01834974996745586395263671875 -0.2416607439517974853515625 0.0613467507064342498779296875 +0.01834974996745586395263671875 0.2416607439517974853515625 0.0613467507064342498779296875 +0.0183635998517274849628488908593 -0.256599891185760486944644753748 -0.154335308074951160772769753748 +0.0183635998517274849628488908593 0.256599891185760486944644753748 -0.154335308074951160772769753748 +0.0184765003621578209613840471093 -0.240864741802215565069644753748 -0.25326420366764068603515625 +0.0184765003621578209613840471093 0.240864741802215565069644753748 -0.25326420366764068603515625 +0.0184768006205558790733256557814 -0.03556390106678009033203125 0.02989675104618072509765625 +0.0184768006205558790733256557814 0.03556390106678009033203125 0.02989675104618072509765625 +0.0184952005743980428531525461722 -0.62675762176513671875 -0.496823215484619162829460492503 +0.0184952005743980428531525461722 0.62675762176513671875 -0.496823215484619162829460492503 +0.0185256490483880070785360771879 -0.538684314489364712841279470013 -0.109436248242855083123714621252 +0.0185256490483880070785360771879 0.538684314489364712841279470013 -0.109436248242855083123714621252 +0.0185525998473167440250275461722 -0.0704464972019195612151776231258 -0.0685060977935791071136151231258 +0.0185525998473167440250275461722 0.0704464972019195612151776231258 -0.0685060977935791071136151231258 +0.0186272995546460165550151089064 -0.526239001750946067126335492503 -0.729880195856094426964943977509 +0.0186272995546460165550151089064 0.526239001750946067126335492503 -0.729880195856094426964943977509 +0.0186586499214172370220143903907 -0.0442378997802734402755575615629 -0.0139593005180358893657643903907 +0.0186586499214172370220143903907 0.0442378997802734402755575615629 -0.0139593005180358893657643903907 +0.0186648994684219353412668596093 -0.0966642975807189969161825615629 0.017539300024509429931640625 +0.0186648994684219353412668596093 0.0966642975807189969161825615629 0.017539300024509429931640625 +0.0186660500243306173850932339064 -0.197468693554401414358423494377 0.6189976036548614501953125 +0.0186660500243306173850932339064 0.197468693554401414358423494377 0.6189976036548614501953125 +0.0186960004270076730892302663278 -0.0575415015220642062088174384371 0.137256753444671614206029630623 +0.0186960004270076730892302663278 0.0575415015220642062088174384371 0.137256753444671614206029630623 +0.018707149662077426910400390625 -0.29522788524627685546875 0.463670355081558238641292746252 +0.018707149662077426910400390625 0.29522788524627685546875 0.463670355081558238641292746252 +0.0187352001667022705078125 -0.0790166020393371637542401231258 0.0583554983139038113693075615629 +0.0187352001667022705078125 0.0790166020393371637542401231258 0.0583554983139038113693075615629 +0.01875874958932399749755859375 -0.1570767462253570556640625 -0.193584501743316650390625 +0.01875874958932399749755859375 0.1570767462253570556640625 -0.193584501743316650390625 +0.0187987998127937330772319057814 -0.0448200494050979628135600307814 0.0117374502122402201570450230861 +0.0187987998127937330772319057814 0.0448200494050979628135600307814 0.0117374502122402201570450230861 +0.0188075006008148193359375 -0.2164669930934906005859375 0.123645998537540435791015625 +0.0188075006008148193359375 0.2164669930934906005859375 0.123645998537540435791015625 +0.0188171999529004110862651089064 -0.403379103541374239849659488755 0.198572395741939550228849498126 +0.0188171999529004110862651089064 0.403379103541374239849659488755 0.198572395741939550228849498126 +0.018824599683284759521484375 -0.0400749504566192682464276231258 -0.0232299998402595540836212961722 +0.018824599683284759521484375 0.0400749504566192682464276231258 -0.0232299998402595540836212961722 +0.0188361003994941718364675153907 -0.013685099780559539794921875 -0.0442483991384506267219300923443 +0.0188361003994941718364675153907 0.013685099780559539794921875 -0.0442483991384506267219300923443 +0.0188524492084980004047434221093 -0.0382764011621475191970986884371 -0.143803650140762323550447376874 +0.0188524492084980004047434221093 0.0382764011621475191970986884371 -0.143803650140762323550447376874 +0.01888000033795833587646484375 -0.4907414913177490234375 0.093895502388477325439453125 +0.01888000033795833587646484375 0.4907414913177490234375 0.093895502388477325439453125 +0.0189458996057510382915456403907 -0.134476196765899641549779630623 -0.267501908540725696905582253748 +0.0189458996057510382915456403907 0.134476196765899641549779630623 -0.267501908540725696905582253748 +0.01895450055599212646484375 -0.0262053012847900390625 0.0381314486265182522872763115629 +0.01895450055599212646484375 0.0262053012847900390625 0.0381314486265182522872763115629 +0.0189822010695934288715402971093 -0.2491064965724945068359375 0.166089302301406865902677623126 +0.0189822010695934288715402971093 0.2491064965724945068359375 0.166089302301406865902677623126 +0.0189970493316650411441681711722 -0.0339453488588333171516175923443 -0.03141374886035919189453125 +0.0189970493316650411441681711722 0.0339453488588333171516175923443 -0.03141374886035919189453125 +0.0190005004405975341796875 -0.0908604025840759194077023153113 0.11782769858837127685546875 +0.0190005004405975341796875 0.0908604025840759194077023153113 0.11782769858837127685546875 +0.0190091993659734712074360629686 -0.242304298281669605596988503748 -0.6564508974552154541015625 +0.0190091993659734712074360629686 0.242304298281669605596988503748 -0.6564508974552154541015625 +0.0190260000526905059814453125 -0.368853509426116943359375 -0.3370240032672882080078125 +0.0190260000526905059814453125 0.368853509426116943359375 -0.3370240032672882080078125 +0.0190311007201671607280690778907 -0.0585711520165205015708842495314 -0.546541047096252508019631477509 +0.0190311007201671607280690778907 0.0585711520165205015708842495314 -0.546541047096252508019631477509 +0.0190357998013496419742462961722 -0.0413554012775421142578125 0.020672850310802459716796875 +0.0190357998013496419742462961722 0.0413554012775421142578125 0.020672850310802459716796875 +0.0190656006336212165142018903907 -0.0261245995759964017013388115629 -0.0381314486265182522872763115629 +0.0190656006336212165142018903907 0.0261245995759964017013388115629 -0.0381314486265182522872763115629 +0.0190723501145839691162109375 -0.233084258437156688348323996252 -0.384457942843437205926448996252 +0.0190723501145839691162109375 0.233084258437156688348323996252 -0.384457942843437205926448996252 +0.0190837495028972625732421875 -0.23107574880123138427734375 0.093487001955509185791015625 +0.0190837495028972625732421875 0.23107574880123138427734375 0.093487001955509185791015625 +0.01909424923360347747802734375 -0.20405699312686920166015625 -0.14316500723361968994140625 +0.01909424923360347747802734375 0.20405699312686920166015625 -0.14316500723361968994140625 +0.01910080015659332275390625 -0.0374691992998123155067524692186 0.0270410507917404202560263115629 +0.01910080015659332275390625 0.0374691992998123155067524692186 0.0270410507917404202560263115629 +0.0191060990095138528988005788278 -0.05880390107631683349609375 0.293559300899505604132144753748 +0.0191060990095138528988005788278 0.05880390107631683349609375 0.293559300899505604132144753748 +0.0191148005425930030132253278907 -0.566658604145049982214743522491 -0.1962971985340118408203125 +0.0191148005425930030132253278907 0.566658604145049982214743522491 -0.1962971985340118408203125 +0.0191341996192932149722931711722 -0.0461939513683319105674662807814 0 +0.0191341996192932149722931711722 0.0461939513683319105674662807814 0 +0.0191511496901512166812775461722 -0.0458121985197067274619975307814 0.00587154999375343392142845289072 +0.0191511496901512166812775461722 0.0458121985197067274619975307814 0.00587154999375343392142845289072 +0.0191603496670722968364675153907 -0.0456490993499755887130575615629 -0.00700294971466064453125 +0.0191603496670722968364675153907 0.0456490993499755887130575615629 -0.00700294971466064453125 +0.0191826006397604956199565151564 -0.0590395510196685818771200615629 0.445697548985481251104801003748 +0.0191826006397604956199565151564 0.0590395510196685818771200615629 0.445697548985481251104801003748 +0.0192130997776985175395925153907 -0.0978851974010467584808026231258 -0.0070249997079372406005859375 +0.0192130997776985175395925153907 0.0978851974010467584808026231258 -0.0070249997079372406005859375 +0.0192284999415278448631205776564 -0.0591812990605831146240234375 0.897846293449401922082131477509 +0.0192284999415278448631205776564 0.0591812990605831146240234375 0.897846293449401922082131477509 +0.0192487999796867384483256557814 -0.316043210029602061883480246252 0.244430398941040044613615123126 +0.0192487999796867384483256557814 0.316043210029602061883480246252 0.244430398941040044613615123126 +0.01925075054168701171875 -0.00986355021595954929714000769536 -0.0450790494680404704719300923443 +0.01925075054168701171875 0.00986355021595954929714000769536 -0.0450790494680404704719300923443 +0.0192983994260430349876322964064 -0.548304355144500821239716970013 -0.0385973479598760646491761860943 +0.0192983994260430349876322964064 0.548304355144500821239716970013 -0.0385973479598760646491761860943 +0.01929984986782073974609375 -0.00666275024414062552041704279304 0.0456412494182586725433026231258 +0.01929984986782073974609375 0.00666275024414062552041704279304 0.0456412494182586725433026231258 +0.0193024004809558384632151017968 -0.579630357027053899621193977509 -0.293523757159709963726612613755 +0.0193024004809558384632151017968 0.579630357027053899621193977509 -0.293523757159709963726612613755 +0.01930280029773712158203125 -0.0979426026344299427428552462516 0.00588590018451213854017156634768 +0.01930280029773712158203125 0.0979426026344299427428552462516 0.00588590018451213854017156634768 +0.0193248003721237203433869211722 -0.112126398086547854338057561563 -0.383476400375366233141960492503 +0.0193248003721237203433869211722 0.112126398086547854338057561563 -0.383476400375366233141960492503 +0.0193560004234313992599325615629 -0.112849605083465587274105246252 -0.163982605934143071957365123126 +0.0193560004234313992599325615629 0.112849605083465587274105246252 -0.163982605934143071957365123126 +0.0193581998348236090923268903907 -0.0166169494390487684776225307814 0.0430016010999679579307475307814 +0.0193581998348236090923268903907 0.0166169494390487684776225307814 0.0430016010999679579307475307814 +0.01937355101108551025390625 -0.1265860497951507568359375 -0.0781066507101058904449786268742 +0.01937355101108551025390625 0.1265860497951507568359375 -0.0781066507101058904449786268742 +0.0194306002929806702350656877343 -0.210523593425750721319644753748 0.278930741548538196905582253748 +0.0194306002929806702350656877343 0.210523593425750721319644753748 0.278930741548538196905582253748 +0.0195301502943038968185263115629 -0.0059537999331951141357421875 -0.0456412494182586725433026231258 +0.0195301502943038968185263115629 0.0059537999331951141357421875 -0.0456412494182586725433026231258 +0.019552700221538543701171875 -0.0385901987552642877776776231258 0.0901580989360809409438601846887 +0.019552700221538543701171875 0.0385901987552642877776776231258 0.0901580989360809409438601846887 +0.0195580005645751980880575615629 -0.146409201622009293997095369377 0.371727991104126020971420985006 +0.0195580005645751980880575615629 0.146409201622009293997095369377 0.371727991104126020971420985006 +0.0195776004344224915931782504686 -0.0142240000888705243192733362889 -0.349162447452545154913394753748 +0.0195776004344224915931782504686 0.0142240000888705243192733362889 -0.349162447452545154913394753748 +0.0195777505636215223838725307814 -0.03793235123157501220703125 -0.0260355502367019681075888115629 +0.0195777505636215223838725307814 0.03793235123157501220703125 -0.0260355502367019681075888115629 +0.0196033999323844930484650461722 -0.176566600799560546875 -0.0918690025806427057464276231258 +0.0196033999323844930484650461722 0.176566600799560546875 -0.0918690025806427057464276231258 +0.01961475051939487457275390625 -0.249229252338409423828125 0 +0.01961475051939487457275390625 0.249229252338409423828125 0 +0.0196317493915557882144806711722 -0.0391920000314712538291850307814 0.0240536496043205275108256557814 +0.0196317493915557882144806711722 0.0391920000314712538291850307814 0.0240536496043205275108256557814 +0.01964350044727325439453125 -0.0470910996198654202560263115629 -0.0860032975673675620376101846887 +0.01964350044727325439453125 0.0470910996198654202560263115629 -0.0860032975673675620376101846887 +0.0196483001112937941123881557814 -0.082844197750091552734375 -0.0524479985237121595909037807814 +0.0196483001112937941123881557814 0.082844197750091552734375 -0.0524479985237121595909037807814 +0.0196511506102979190135915388282 -0.665929973125457763671875 -0.527874666452407770300681022491 +0.0196511506102979190135915388282 0.665929973125457763671875 -0.527874666452407770300681022491 +0.0196621495299041278148610700782 -0.555474501848220780786391514994 -0.770429095625877358166633257497 +0.0196621495299041278148610700782 0.555474501848220780786391514994 -0.770429095625877358166633257497 +0.01967065036296844482421875 -0.00203370004892349269184914639652 -0.04592309892177581787109375 +0.01967065036296844482421875 0.00203370004892349269184914639652 -0.04592309892177581787109375 +0.0196979999542236314247212192186 -0.447199809551239002569644753748 0.399529802799224842413394753748 +0.0196979999542236314247212192186 0.447199809551239002569644753748 0.399529802799224842413394753748 +0.019711799919605255126953125 -0.124621349573135364874332253748 0.0811231523752212468902911268742 +0.019711799919605255126953125 0.124621349573135364874332253748 0.0811231523752212468902911268742 +0.0197164997458457967594025461722 -0.0606821000576019328742738423443 0.0769997000694274957854901231258 +0.0197164997458457967594025461722 0.0606821000576019328742738423443 0.0769997000694274957854901231258 +0.0197596505284309414962606865629 -0.0287227004766464240337331403907 0.0358408004045486436317524692186 +0.0197596505284309414962606865629 0.0287227004766464240337331403907 0.0358408004045486436317524692186 +0.0197817005217075340961496721093 -0.100440895557403556126452315311 -0.109637099504470827970870061563 +0.0197817005217075340961496721093 0.100440895557403556126452315311 -0.109637099504470827970870061563 +0.0198254995048046112060546875 -0.473910510540008544921875 0.158164501190185546875 +0.0198254995048046112060546875 0.473910510540008544921875 0.158164501190185546875 +0.0198795005679130547260324846093 -0.274872601032257080078125 -0.11853240430355072021484375 +0.0198795005679130547260324846093 0.274872601032257080078125 -0.11853240430355072021484375 +0.0199234500527381910850444057814 -0.0226992502808570882633087961722 -0.0398472011089325006683026231258 +0.0199234500527381910850444057814 0.0226992502808570882633087961722 -0.0398472011089325006683026231258 +0.0199533998966217041015625 -0.0827107012271881131271200615629 0.0525433003902435330489950615629 +0.0199533998966217041015625 0.0827107012271881131271200615629 0.0525433003902435330489950615629 +0.0199885502457618699501118442186 -0.0294615000486373873611611884371 0.1457135975360870361328125 +0.0199885502457618699501118442186 0.0294615000486373873611611884371 0.1457135975360870361328125 +0.01999194920063018798828125 -0.548683845996856711657585492503 0.0323488004505634307861328125 +0.01999194920063018798828125 0.548683845996856711657585492503 0.0323488004505634307861328125 +0.0201019000262021990677041571871 -0.212658593058586115054353626874 0.666612803936004638671875 +0.0201019000262021990677041571871 0.212658593058586115054353626874 0.666612803936004638671875 +0.0201417505741119384765625 -0.0309590011835098287418244211722 -0.0337024003267288249641175923443 +0.0201417505741119384765625 0.0309590011835098287418244211722 -0.0337024003267288249641175923443 +0.0201676994562149068668244211722 0 0.0457522004842758206466513115629 +0.0201802000403404242778737653907 -0.0228896006941795362998881557814 -0.095230400562286376953125 +0.0201802000403404242778737653907 0.0228896006941795362998881557814 -0.095230400562286376953125 +0.0202097989618778214881977817186 -0.587655615806579545434829014994 -0.119384998083114618472322376874 +0.0202097989618778214881977817186 0.587655615806579545434829014994 -0.119384998083114618472322376874 +0.0202294498682022115543244211722 -0.04240129888057708740234375 -0.0171143501996994032432475307814 +0.0202294498682022115543244211722 0.04240129888057708740234375 -0.0171143501996994032432475307814 +0.02024669945240020751953125 -0.135874351859092717953458873126 -0.0602348998188972431511167826557 +0.02024669945240020751953125 0.135874351859092717953458873126 -0.0602348998188972431511167826557 +0.0202967499382793910289723982032 -0.06246914900839328765869140625 0.947726643085479714123664507497 +0.0202967499382793910289723982032 0.06246914900839328765869140625 0.947726643085479714123664507497 +0.0203033000230789205386994211722 -0.089100301265716552734375 -0.0406067013740539564659037807814 +0.0203033000230789205386994211722 0.089100301265716552734375 -0.0406067013740539564659037807814 +0.02034009993076324462890625 -0.00992894992232322762260032789072 0.0445836007595062297492738423443 +0.02034009993076324462890625 0.00992894992232322762260032789072 0.0445836007595062297492738423443 +0.020366999320685863494873046875 -0.259611748158931732177734375 -0.70334024727344512939453125 +0.020366999320685863494873046875 0.259611748158931732177734375 -0.70334024727344512939453125 +0.0203678995370864847347380788278 -0.288356101512908913342414507497 -0.0802238970994949285309161268742 +0.0203678995370864847347380788278 0.288356101512908913342414507497 -0.0802238970994949285309161268742 +0.0203850001096725491622763115629 -0.0198385000228881863693075615629 0.0958691000938415582854901231258 +0.0203850001096725491622763115629 0.0198385000228881863693075615629 0.0958691000938415582854901231258 +0.0204077996313571929931640625 -0.322066783905029296875 0.505822205543518088610710492503 +0.0204077996313571929931640625 0.322066783905029296875 0.505822205543518088610710492503 +0.020435750484466552734375 -0.04329355061054229736328125 0.014423899352550506591796875 +0.020435750484466552734375 0.04329355061054229736328125 0.014423899352550506591796875 +0.0204975500702857978130300153907 -0.019980199635028839111328125 0.0409956514835357679893412807814 +0.0204975500702857978130300153907 0.019980199635028839111328125 0.0409956514835357679893412807814 +0.0204988002777099637130575615629 -0.187209594249725358450220369377 -0.0673229992389678955078125 +0.0204988002777099637130575615629 0.187209594249725358450220369377 -0.0673229992389678955078125 +0.0205765500664711019351837961722 -0.031114399433135986328125 0.0332941502332687391807475307814 +0.0205765500664711019351837961722 0.031114399433135986328125 0.0332941502332687391807475307814 +0.0205917008221149430702290317186 -0.12813900411128997802734375 0.270474296808242808953792746252 +0.0205917008221149430702290317186 0.12813900411128997802734375 0.270474296808242808953792746252 +0.0206101998686790480186381557814 0 0.0978531002998352106292401231258 +0.0206584498286247267295756557814 -0.0191339001059532172466237653907 -0.0413173496723175104339276231258 +0.0206584498286247267295756557814 0.0191339001059532172466237653907 -0.0413173496723175104339276231258 +0.0206927999854087836528737653907 0 0.148565849661827092953458873126 +0.02069699950516223907470703125 -0.58471000194549560546875 -0.810977995395660400390625 +0.02069699950516223907470703125 0.58471000194549560546875 -0.810977995395660400390625 +0.0207077005878090851520578752343 -0.613880154490470952843850227509 -0.212655298411846160888671875 +0.0207077005878090851520578752343 0.613880154490470952843850227509 -0.212655298411846160888671875 +0.02072224952280521392822265625 -0.09668125212192535400390625 -0.22961549460887908935546875 +0.02072224952280521392822265625 0.09668125212192535400390625 -0.22961549460887908935546875 +0.0207295507192611673519255788278 -0.0637979999184608431717080634371 -0.13416449725627899169921875 +0.0207295507192611673519255788278 0.0637979999184608431717080634371 -0.13416449725627899169921875 +0.0207298502326011650775949846093 -0.14265824854373931884765625 -0.0414595484733581501335386576557 +0.0207298502326011650775949846093 0.14265824854373931884765625 -0.0414595484733581501335386576557 +0.0207423001527786247943918596093 0 0.299282097816467251849559261245 +0.0207612007856368997738005788278 -0.0638958021998405484298544365629 -0.596226596832275412829460492503 +0.0207612007856368997738005788278 0.0638958021998405484298544365629 -0.596226596832275412829460492503 +0.0207647994160652139827849538278 -0.06390599906444549560546875 -0.292377895116806008068977007497 +0.0207647994160652139827849538278 0.06390599906444549560546875 -0.292377895116806008068977007497 +0.0207680003717541708518901089064 -0.539815640449524014599091970013 0.103285052627325069085628683752 +0.0207680003717541708518901089064 0.539815640449524014599091970013 0.103285052627325069085628683752 +0.0207872005179524400875212819528 -0.624217307567596413342414507497 -0.316102507710456837042301003748 +0.0207872005179524400875212819528 0.624217307567596413342414507497 -0.316102507710456837042301003748 +0.0208071006461977951740305314843 -0.70510232448577880859375 -0.558926117420196599816506477509 +0.0208071006461977951740305314843 0.70510232448577880859375 -0.558926117420196599816506477509 +0.0208217993378639228130300153907 -0.149886202812194835320980246252 0.130769395828247064761384876874 +0.0208217993378639228130300153907 0.149886202812194835320980246252 0.130769395828247064761384876874 +0.0208298996090888997867462961722 -0.0442379504442214979698100307814 -0.0104461498558521270751953125 +0.0208298996090888997867462961722 0.0442379504442214979698100307814 -0.0104461498558521270751953125 +0.0208586499094963080669362653907 -0.0445870995521545424034037807814 0.0087696500122547149658203125 +0.0208586499094963080669362653907 0.0445870995521545424034037807814 0.0087696500122547149658203125 +0.020880199968814849853515625 -0.194473803043365478515625 -0.0417605996131897028167401231258 +0.020880199968814849853515625 0.194473803043365478515625 -0.0417605996131897028167401231258 +0.0208992496132850667789337961722 -0.0352615505456924452354350307814 -0.0286329507827758796001393903907 +0.0208992496132850667789337961722 0.0352615505456924452354350307814 -0.0286329507827758796001393903907 +0.02090799994766712188720703125 -0.4481990039348602294921875 0.22063599526882171630859375 +0.02090799994766712188720703125 0.4481990039348602294921875 0.22063599526882171630859375 +0.0209286000579595593551474053129 -0.405738860368728693206463731258 -0.370726403594017039910823996252 +0.0209286000579595593551474053129 0.405738860368728693206463731258 -0.370726403594017039910823996252 +0.02093400061130523681640625 -0.0644272029399871881683026231258 -0.188177800178527837582365123126 +0.02093400061130523681640625 0.0644273996353149497329226846887 -0.188177800178527837582365123126 +0.0209583997726440450504181711722 -0.0645042002201080405532351846887 0.188148796558380126953125 +0.0209583997726440450504181711722 0.0645042002201080405532351846887 0.188148796558380126953125 +0.0209764495491981534103231865629 -0.0452915996313095134406800923443 0.00294295009225606927008578317384 +0.0209764495491981534103231865629 0.0452915996313095134406800923443 0.00294295009225606927008578317384 +0.0209882989525794969032368442186 -0.2963064014911651611328125 -0.0419762983918189960808042826557 +0.0209882989525794969032368442186 0.2963064014911651611328125 -0.0419762983918189960808042826557 +0.0209959506988525411441681711722 -0.0452419489622116130500550923443 -0.00351249985396862030029296875 +0.0209959506988525411441681711722 0.0452419489622116130500550923443 -0.00351249985396862030029296875 +0.0210087999701499966720419365629 -0.0646571993827819851974325615629 -0.0733353972434997586349325615629 +0.0210087999701499966720419365629 0.0646571993827819851974325615629 -0.0733353972434997586349325615629 +0.021023400127887725830078125 -0.0859845995903015247741052462516 0.04652599990367889404296875 +0.021023400127887725830078125 0.0859845995903015247741052462516 0.04652599990367889404296875 +0.0210527993738651268695871721093 -0.598150205612182572778579014994 -0.0421061977744102491905131557814 +0.0210527993738651268695871721093 0.598150205612182572778579014994 -0.0421061977744102491905131557814 +0.02111049927771091461181640625 -0.0649722516536712646484375 0.2404847443103790283203125 +0.02111049927771091461181640625 0.0649722516536712646484375 0.2404847443103790283203125 +0.0211160004138946540142018903907 -0.275273990631103526727230246252 -0.28944480419158935546875 +0.0211160004138946540142018903907 0.275273990631103526727230246252 -0.28944480419158935546875 +0.0211620002985000617290456403907 -0.0406082987785339397102113423443 -0.020078249275684356689453125 +0.0211620002985000617290456403907 0.0406082987785339397102113423443 -0.020078249275684356689453125 +0.021191500127315521240234375 -0.2589825093746185302734375 -0.4271754920482635498046875 +0.021191500127315521240234375 0.2589825093746185302734375 -0.4271754920482635498046875 +0.0211986005306243896484375 -0.0785893023014068714537927462516 -0.0580889999866485637336488423443 +0.0211986005306243896484375 0.0785893023014068714537927462516 -0.0580889999866485637336488423443 +0.0212052002549171468570587961722 -0.0915042996406555259047976846887 0.0343118011951446533203125 +0.0212052002549171468570587961722 0.0915042996406555259047976846887 0.0343118011951446533203125 +0.0212109506130218512798268903907 -0.0276683002710342434982138115629 -0.0358408004045486436317524692186 +0.0212109506130218512798268903907 0.0276683002710342434982138115629 -0.0358408004045486436317524692186 +0.021238900721073150634765625 -0.039976298809051513671875 -0.0891673028469085748870526231258 +0.021238900721073150634765625 0.039976298809051513671875 -0.0891673028469085748870526231258 +0.0212472498416900641704518903907 -0.0415405511856079129318075615629 0.0179703995585441603233256557814 +0.0212472498416900641704518903907 0.0415405511856079129318075615629 0.0179703995585441603233256557814 +0.0212661504745483426193075615629 -0.0154505506157875064504603201954 -0.0425327003002166775802450615629 +0.0212661504745483426193075615629 0.0154505506157875064504603201954 -0.0425327003002166775802450615629 +0.0212739005684852607036550153907 -0.03337495028972625732421875 0.0305537998676300055767018903907 +0.0212739005684852607036550153907 0.03337495028972625732421875 0.0305537998676300055767018903907 +0.02131400071084499359130859375 -0.065599501132965087890625 0.4952194988727569580078125 +0.02131400071084499359130859375 0.065599501132965087890625 0.4952194988727569580078125 +0.0213144004344940213302450615629 -0.065600097179412841796875 0.0724039018154144370376101846887 +0.0213144004344940213302450615629 0.065600097179412841796875 0.0724039018154144370376101846887 +0.0213244006037712104106862653907 -0.145058596134185785464509876874 -0.136026597023010259457365123126 +0.0213244006037712104106862653907 0.145058596134185785464509876874 -0.136026597023010259457365123126 +0.0213394999504089369346537807814 -0.484466460347175609246761496252 0.432823953032493602410823996252 +0.0213394999504089369346537807814 0.484466460347175609246761496252 0.432823953032493602410823996252 +0.02136499993503093719482421875 -0.065756998956203460693359375 0.9976069927215576171875 +0.02136499993503093719482421875 0.065756998956203460693359375 0.9976069927215576171875 +0.0213719502091407782817800153907 -0.0033354498445987701416015625 0.0450789511203765896896200615629 +0.0213719502091407782817800153907 0.0033354498445987701416015625 0.0450789511203765896896200615629 +0.0214241998270153985450825473436 -0.299366539716720558850227007497 -0.180057859420776344983039507497 +0.0214241998270153985450825473436 0.299366539716720558850227007497 -0.180057859420776344983039507497 +0.02145870029926300048828125 -0.0444460004568099989463725307814 0.086971700191497802734375 +0.02145870029926300048828125 0.0444460004568099989463725307814 0.086971700191497802734375 +0.0214611008763313272640349538278 -0.129739049077033985479801003748 0.072161100804805755615234375 +0.0214611008763313272640349538278 0.129739049077033985479801003748 0.072161100804805755615234375 +0.0214968010783195481727680942186 -0.0984922528266906766036825615629 0.111072751879692080412276311563 +0.0214968010783195481727680942186 0.0984922528266906766036825615629 0.111072751879692080412276311563 +0.0215005993843078620220143903907 -0.0232105001807212836528737653907 0.0387169003486633328536825615629 +0.0215005993843078620220143903907 0.0232105001807212836528737653907 0.0387169003486633328536825615629 +0.021537750028073787689208984375 -0.227848492562770843505859375 0.7142280042171478271484375 +0.021537750028073787689208984375 0.227848492562770843505859375 0.7142280042171478271484375 +0.0215491510927677161479909528907 -0.144290703535079944952457253748 0.0348683997988700825065855326557 +0.0215491510927677161479909528907 0.144290703535079944952457253748 0.0348683997988700825065855326557 +0.0215838007628917673275115163278 -0.0664293006062507546127804403113 0.132745197415351873226896373126 +0.0215838007628917673275115163278 0.0664293006062507546127804403113 0.132745197415351873226896373126 +0.0216548999771475798870046247657 -0.355548611283302340435596988755 0.274984198808670032843082253748 +0.0216548999771475798870046247657 0.355548611283302340435596988755 0.274984198808670032843082253748 +0.0216647990047931678081472028907 -0.196047592163085926397769753748 0.226044291257858270816072376874 +0.0216647990047931678081472028907 0.196047592163085926397769753748 0.226044291257858270816072376874 +0.0216703996062278768375275461722 -0.195705997943878190481470369377 0.0350645989179611192176899692186 +0.0216703996062278768375275461722 0.195705997943878190481470369377 0.0350645989179611192176899692186 +0.0216817505657672868202290317186 -0.138287696242332447393863503748 0.0539111986756324740310830634371 +0.0216817505657672868202290317186 0.138287696242332447393863503748 0.0539111986756324740310830634371 +0.0217247992753982557823100307814 -0.276919198036193858758480246252 -0.7502295970916748046875 +0.0217247992753982557823100307814 0.276919198036193858758480246252 -0.7502295970916748046875 +0.0217280991375446326518972028907 -0.120451650023460379856921065311 -0.0867139488458633367340411268742 +0.0217280991375446326518972028907 0.120451650023460379856921065311 -0.0867139488458633367340411268742 +0.0217404004186391823505442033593 -0.126142197847366327456697376874 -0.431410950422286998406917746252 +0.0217404004186391823505442033593 0.126142197847366327456697376874 -0.431410950422286998406917746252 +0.0217427000403404256656525461722 -0.0116720497608184814453125 -0.0434858500957489013671875 +0.0217427000403404256656525461722 0.0116720497608184814453125 -0.0434858500957489013671875 +0.0217572011053562171245534528907 -0.297131699323654185906917746252 0.035204999148845672607421875 +0.0217572011053562171245534528907 0.297131699323654185906917746252 0.035204999148845672607421875 +0.0217857003211975111534037807814 -0.0132758006453514102590540701954 0.0430016010999679579307475307814 +0.0217857003211975111534037807814 0.0132758006453514102590540701954 0.0430016010999679579307475307814 +0.0218080494552850730205495466407 -0.521301561594009421618522992503 0.173980951309204129318075615629 +0.0218080494552850730205495466407 0.521301561594009421618522992503 0.173980951309204129318075615629 +0.021809399127960205078125 -0.598564195632934503699118522491 0.03528960049152374267578125 +0.021809399127960205078125 0.598564195632934503699118522491 0.03528960049152374267578125 +0.0218149006366729764083700615629 -0.0935128986835479791839276231258 -0.0279186010360717787315287807814 +0.0218149006366729764083700615629 0.0935128986835479791839276231258 -0.0279186010360717787315287807814 +0.0218428507447242722938618442186 -0.0281143493950366980815847028907 -0.1457135975360870361328125 +0.0218428507447242722938618442186 0.0281143493950366980815847028907 -0.1457135975360870361328125 +0.0218437492847442654708700615629 -0.0354483008384704617599325615629 0.0276815503835678121402619211722 +0.0218437492847442654708700615629 0.0354483008384704617599325615629 0.0276815503835678121402619211722 +0.021864600479602813720703125 -0.110489594936370852384932561563 0.165269398689270041735710492503 +0.021864600479602813720703125 0.110489594936370852384932561563 0.165269398689270041735710492503 +0.0218939488753676428367533901564 -0.636626917123794600072983485006 -0.129333747923374181576505748126 +0.0218939488753676428367533901564 0.636626917123794600072983485006 -0.129333747923374181576505748126 +0.0219074994325637838199494211722 -0.0395083993673324626594300923443 0.0214276999235153212119975307814 +0.0219074994325637838199494211722 0.0395083993673324626594300923443 0.0214276999235153212119975307814 +0.02190949954092502593994140625 -0.121426753699779510498046875 0.2174292504787445068359375 +0.02190949954092502593994140625 0.121426753699779510498046875 0.2174292504787445068359375 +0.0219630506820976713344695241403 -0.744274675846099853515625 -0.589977568387985207287727007497 +0.0219630506820976713344695241403 0.744274675846099853515625 -0.589977568387985207287727007497 +0.0219813004136085524131694057814 -0.0385917991399765056281800923443 -0.0229672506451606764366069057814 +0.0219813004136085524131694057814 0.0385917991399765056281800923443 -0.0229672506451606764366069057814 +0.0219944000244140652755575615629 -0.179359602928161637747095369377 0.0857107996940612848479901231258 +0.0219944000244140652755575615629 0.179359602928161637747095369377 0.0857107996940612848479901231258 +0.0220027506351470961143412807814 -0.164710351824760431460603626874 0.418193989992141745837272992503 +0.0220027506351470961143412807814 0.164710351824760431460603626874 0.418193989992141745837272992503 +0.0220196999609470374370534528907 -0.289992892742156949115184261245 0.0736161008477210915268429403113 +0.0220196999609470374370534528907 0.289992892742156949115184261245 0.0736161008477210915268429403113 +0.0220714002847671522666850307814 -0.189239394664764415399105246252 0.0608381986618042047698651231258 +0.0220714002847671522666850307814 0.189239394664764415399105246252 0.0608381986618042047698651231258 +0.0220852002501487759689169365629 -0.00782160013914108380450596058608 -0.04417090117931365966796875 +0.0220852002501487759689169365629 0.00782160013914108380450596058608 -0.04417090117931365966796875 +0.022090099751949310302734375 -0.0323702991008758544921875 -0.0310514003038406399825888115629 +0.022090099751949310302734375 0.0323702991008758544921875 -0.0310514003038406399825888115629 +0.0221035495400428751155974538278 -0.156888896226882929019197376874 -0.312085559964179970471320757497 +0.0221035495400428751155974538278 0.156888896226882929019197376874 -0.312085559964179970471320757497 +0.0221075996756553670719025461722 -0.0160619005560874959781525461722 -0.0961938977241516141036825615629 +0.0221075996756553670719025461722 0.0160619005560874959781525461722 -0.0961938977241516141036825615629 +0.022108449600636959075927734375 -0.34890568256378173828125 0.547974056005477883068977007497 +0.022108449600636959075927734375 0.34890568256378173828125 0.547974056005477883068977007497 +0.022127099335193634033203125 -0.0243117004632949842979350307814 -0.0376740008592605646331463731258 +0.022127099335193634033203125 0.0243117004632949842979350307814 -0.0376740008592605646331463731258 +0.02214075066149234771728515625 -0.17557625472545623779296875 0.17658649384975433349609375 +0.02214075066149234771728515625 0.17557625472545623779296875 0.17658649384975433349609375 +0.0221459012478589997718891879686 -0.29062424600124359130859375 0.193770852684974653756810880623 +0.0221459012478589997718891879686 0.29062424600124359130859375 0.193770852684974653756810880623 +0.0222064003348350531841237653907 -0.240598392486572276727230246252 0.318777990341186534539730246252 +0.0222064003348350531841237653907 0.240598392486572276727230246252 0.318777990341186534539730246252 +0.0222716003656387336040456403907 -0.0946197986602783230880575615629 0.0234749004244804403140900461722 +0.0222716003656387336040456403907 0.0946197986602783230880575615629 0.0234749004244804403140900461722 +0.0222720005549490451812744140625 -0.6688042581081390380859375 -0.338681258261203765869140625 +0.0222720005549490451812744140625 0.6688042581081390380859375 -0.338681258261203765869140625 +0.0222904488444328301166574846093 -0.068604551255702972412109375 0.342485851049423195568977007497 +0.0222904488444328301166574846093 0.068604551255702972412109375 0.342485851049423195568977007497 +0.0222915500402450575401225307814 -0.00392290018498897552490234375 -0.0445836007595062297492738423443 +0.0222915500402450575401225307814 0.00392290018498897552490234375 -0.0445836007595062297492738423443 +0.0223006006330251672908904225778 -0.661101704835891701428352007497 -0.229013398289680453201455634371 +0.0223006006330251672908904225778 0.661101704835891701428352007497 -0.229013398289680453201455634371 +0.0223135493695735924457590471093 -0.14682765305042266845703125 -0.0210648000240325934673268903907 +0.0223135493695735924457590471093 0.14682765305042266845703125 -0.0210648000240325934673268903907 +0.02232100069522857666015625 -0.0162169992923736593082306711722 -0.198087799549102799856470369377 +0.02232100069522857666015625 0.0162169992923736593082306711722 -0.198087799549102799856470369377 +0.0223256006836891202071981865629 -0.00805710032582282985325061730464 -0.097142398357391357421875 +0.0223256006836891202071981865629 0.00805710032582282985325061730464 -0.097142398357391357421875 +0.0223605006933212287212331403907 0 -0.0447214514017105144172425923443 +0.0223605498671531691123881557814 -0.02628634870052337646484375 0.03618060052394866943359375 +0.0223605498671531691123881557814 0.02628634870052337646484375 0.03618060052394866943359375 +0.0223608002066612264469025461722 -0.04253239929676055908203125 -0.0138198494911193851125696951954 +0.0223608002066612264469025461722 0.04253239929676055908203125 -0.0138198494911193851125696951954 +0.0223744004964828505088725307814 -0.0162560001015663140033762346093 -0.399042797088623057977230246252 +0.0223744004964828505088725307814 0.0162560001015663140033762346093 -0.399042797088623057977230246252 +0.0223948001861572279502787807814 0 -0.198742198944091813528345369377 +0.0223984003067016629318075615629 0 -0.0974592983722686878600427462516 +0.0224038496613502523258087961722 -0.03723619878292083740234375 0.024729199707508087158203125 +0.0224038496613502523258087961722 0.03723619878292083740234375 0.024729199707508087158203125 +0.0224381998181343092491069057814 -0.0263494014739990255191681711722 0.196982800960540771484375 +0.0224381998181343092491069057814 0.0263494014739990255191681711722 0.196982800960540771484375 +0.0224592506885528571392018903907 -0.0431333988904953058440838731258 0.0116228498518466949462890625 +0.0224592506885528571392018903907 0.0431333988904953058440838731258 0.0116228498518466949462890625 +0.0224648505449295057823100307814 -0.00665350034832954458779985529304 0.0441708505153656019737162807814 +0.0224648505449295057823100307814 0.00665350034832954458779985529304 0.0441708505153656019737162807814 +0.0224913008511066457584259836722 -0.0692204523831605883499307196871 -0.645912146568298317639289507497 +0.0224913008511066457584259836722 0.0692204523831605883499307196871 -0.645912146568298317639289507497 +0.0225104995071887976909597028907 -0.188492095470428472347990123126 -0.232301402091979969366519753748 +0.0225104995071887976909597028907 0.188492095470428472347990123126 -0.232301402091979969366519753748 +0.0225428998470306417301056711722 -0.0264079988002777106548268903907 0.0937785983085632351974325615629 +0.0225428998470306417301056711722 0.0264079988002777106548268903907 0.0937785983085632351974325615629 +0.022569000720977783203125 -0.259760391712188731805355246252 0.14837519824504852294921875 +0.022569000720977783203125 0.259760391712188731805355246252 0.14837519824504852294921875 +0.022647000849246978759765625 -0.0164540000259876251220703125 0.24842774868011474609375 +0.022647000849246978759765625 0.0164540000259876251220703125 0.24842774868011474609375 +0.0226560004055500023578684221093 -0.588889789581298783716079014994 0.112674602866172784976228626874 +0.0226560004055500023578684221093 0.588889789581298783716079014994 0.112674602866172784976228626874 +0.02265775017440319061279296875 -0.0368527509272098541259765625 -0.24622850120067596435546875 +0.02265775017440319061279296875 0.0368527509272098541259765625 -0.24622850120067596435546875 +0.0226612508296966559673268903907 -0.147222447395324695929019753748 0.0176636997610330574726145158593 +0.0226612508296966559673268903907 0.147222447395324695929019753748 0.0176636997610330574726145158593 +0.0226619005203247091129181711722 -0.0963860988616943442641726846887 -0.0140058994293212890625 +0.0226619005203247091129181711722 -0.03639765083789825439453125 -0.0257225006818771369243581403907 +0.0226619005203247091129181711722 0.03639765083789825439453125 -0.0257225006818771369243581403907 +0.0226619005203247091129181711722 0.0963860988616943442641726846887 -0.0140058994293212890625 +0.02269954979419708251953125 -0.04455029964447021484375 0 +0.02269954979419708251953125 0.04455029964447021484375 0 +0.0227164000272750861431081403907 -0.198209202289581304379240123126 -0.0140395998954772963096537807814 +0.0227164000272750861431081403907 0.198209202289581304379240123126 -0.0140395998954772963096537807814 +0.0227338999509811429122763115629 -0.0441418498754501398284588731258 0.00588794983923435211181640625 +0.0227338999509811429122763115629 0.0441418498754501398284588731258 0.00588794983923435211181640625 +0.0227504998445510892013388115629 -0.0439671486616134699065838731258 -0.00702160000801086477822954279304 +0.0227504998445510892013388115629 0.0439671486616134699065838731258 -0.00702160000801086477822954279304 +0.0227976992726326016525106865629 -0.00660419985651969961709673029304 0.097142398357391357421875 +0.0227976992726326016525106865629 0.00660419985651969961709673029304 0.097142398357391357421875 +0.0228071993216872222209889997657 -0.647996056079864546362045985006 -0.0456150475889444337318501254686 +0.0228071993216872222209889997657 0.647996056079864546362045985006 -0.0456150475889444337318501254686 +0.0228102996945381171489675153907 -0.070204198360443115234375 0.0674615025520324679275674384371 +0.0228102996945381171489675153907 0.070204198360443115234375 0.0674615025520324679275674384371 +0.0228312000632286057899555942186 -0.44262421131134033203125 -0.404428803920745816302684261245 +0.0228312000632286057899555942186 0.44262421131134033203125 -0.404428803920745816302684261245 +0.0228680998086929349044638115629 -0.0966392993927002036391726846887 0.0117430999875068678428569057814 +0.0228680998086929349044638115629 0.0966392993927002036391726846887 0.0117430999875068678428569057814 +0.022900499403476715087890625 -0.277290898561477650030582253748 0.112184402346611020173661188437 +0.022900499403476715087890625 0.277290898561477650030582253748 0.112184402346611020173661188437 +0.0229130990803241736675222028907 -0.244868391752243036441072376874 -0.171798008680343616827457253748 +0.0229130990803241736675222028907 0.244868391752243036441072376874 -0.171798008680343616827457253748 +0.02292025089263916015625 -0.1931425034999847412109375 -0.15706874430179595947265625 +0.02292025089263916015625 0.1931425034999847412109375 -0.15706874430179595947265625 +0.0229262992739677450015900461722 -0.020779550075531005859375 -0.0392758488655090345909037807814 +0.0229262992739677450015900461722 0.020779550075531005859375 -0.0392758488655090345909037807814 +0.0229555994272232083419638115629 -0.198329603672027593441740123126 0.0117655999958515174175222028907 +0.0229555994272232083419638115629 0.198329603672027593441740123126 0.0117655999958515174175222028907 +0.0229736000299453763107138115629 -0.243038392066955571957365123126 0.761843204498291015625 +0.0229736000299453763107138115629 0.243038392066955571957365123126 0.761843204498291015625 +0.0229809999465942355056924384371 -0.521733111143112160412727007497 0.466118103265762306897102007497 +0.0229809999465942355056924384371 0.521733111143112160412727007497 0.466118103265762306897102007497 +0.0229950502514839200118856865629 -0.0167068496346473686908762346093 0.0411352485418319743781800923443 +0.0229950502514839200118856865629 0.0167068496346473686908762346093 0.0411352485418319743781800923443 +0.0229987999424338361575959055472 -0.493018904328346274645866742503 0.242699594795703910143913617503 +0.0229987999424338361575959055472 0.493018904328346274645866742503 0.242699594795703910143913617503 +0.0230825992301106446003000627343 -0.294226647913455929828074886245 -0.79711894690990447998046875 +0.0230825992301106446003000627343 0.294226647913455929828074886245 -0.79711894690990447998046875 +0.0230933994054794318462331403907 -0.0911208003759384072006710653113 -0.116891849040985096319644753748 +0.0230933994054794318462331403907 0.0911208003759384072006710653113 -0.116891849040985096319644753748 +0.02311900071799755096435546875 -0.7834470272064208984375 -0.62102901935577392578125 +0.02311900071799755096435546875 0.7834470272064208984375 -0.62102901935577392578125 +0.0231927506625652299354634067186 -0.3206847012042999267578125 -0.138287805020809173583984375 +0.0231927506625652299354634067186 0.3206847012042999267578125 -0.138287805020809173583984375 +0.02321974933147430419921875 -0.0287227004766464240337331403907 0.0337024003267288249641175923443 +0.02321974933147430419921875 0.0287227004766464240337331403907 0.0337024003267288249641175923443 +0.0232331499457359320903737653907 -0.0291842490434646613384206403907 -0.0332941502332687391807475307814 +0.0232331499457359320903737653907 0.0291842490434646613384206403907 -0.0332941502332687391807475307814 +0.023251600563526153564453125 -0.0581946015357971205284037807814 -0.0779278993606567493834802462516 +0.023251600563526153564453125 0.0581946015357971205284037807814 -0.0779278993606567493834802462516 +0.0232828006148338324809987653907 0 0.0442483007907867459396200615629 +0.0233000993728637688373606096093 -0.0393986999988555908203125 0.1428456008434295654296875 +0.0233000993728637688373606096093 0.0393986999988555908203125 0.1428456008434295654296875 +0.0233106501400470768337047644536 -0.284880760312080427709702235006 -0.469893041253089949194077235006 +0.0233106501400470768337047644536 0.284880760312080427709702235006 -0.469893041253089949194077235006 +0.0233438000082969686344025461722 -0.0415179014205932644943075615629 0.0152095496654510511924662807814 +0.0233438000082969686344025461722 0.0415179014205932644943075615629 0.0152095496654510511924662807814 +0.0233446002006530775596537807814 -0.0972370028495788685241052462516 0 +0.0233446002006530775596537807814 0.0972370028495788685241052462516 0 +0.0233640506863594075992462961722 -0.0408760011196136474609375 -0.016830749809741973876953125 +0.0233640506863594075992462961722 0.0408760011196136474609375 -0.016830749809741973876953125 +0.0233671993017196683029013115629 -0.0852635979652404812911825615629 -0.0467343002557754558234925923443 +0.0233671993017196683029013115629 0.0852635979652404812911825615629 -0.0467343002557754558234925923443 +0.0233952999114990234375 -0.0334686011075973552375550923443 -0.0912826001644134604751101846887 +0.0233952999114990234375 0.0334686011075973552375550923443 -0.0912826001644134604751101846887 +0.0234454007819294950321076242972 -0.0721594512462616077819177462516 0.544741448760032720421975227509 +0.0234454007819294950321076242972 0.0721594512462616077819177462516 0.544741448760032720421975227509 +0.0234652496874332427978515625 -0.14815320074558258056640625 0 +0.0234652496874332427978515625 0.14815320074558258056640625 0 +0.0235377006232738474056365163278 -0.299075102806091286389289507497 0 +0.0235377006232738474056365163278 0.299075102806091286389289507497 0 +0.023576200008392333984375 -0.0992869973182678305922976846887 -0.172006595134735124075220369377 +0.023576200008392333984375 0.0992869973182678305922976846887 -0.172006595134735124075220369377 +0.0235780987888574572464150946871 -0.685598218441009432666533029987 -0.139282497763633716925113503748 +0.0235780987888574572464150946871 0.685598218441009432666533029987 -0.139282497763633716925113503748 +0.0235944002866745015933869211722 -0.0171421006321907064273712961722 -0.0406134486198425348479901231258 +0.0235944002866745015933869211722 0.0171421006321907064273712961722 -0.0406134486198425348479901231258 +0.02362684905529022216796875 -0.648444545269012517785256477509 0.0382304005324840545654296875 +0.02362684905529022216796875 0.648444545269012517785256477509 0.0382304005324840545654296875 +0.0236273005604743964458425153907 -0.051120102405548095703125 0.0826346993446350208678552462516 +0.0236273005604743964458425153907 0.051120102405548095703125 0.0826346993446350208678552462516 +0.0237555004656314870670197336722 -0.309683239459991488384815738755 -0.32562540471553802490234375 +0.0237555004656314870670197336722 0.309683239459991488384815738755 -0.32562540471553802490234375 +0.0237568005919456502750275461722 -0.713391208648681662829460492503 -0.361260008811950694695980246252 +0.0237568005919456502750275461722 0.713391208648681662829460492503 -0.361260008811950694695980246252 +0.0237625494599342339252512346093 -0.336415451765060380395766514994 -0.0935945466160774119934728787484 +0.0237625494599342339252512346093 0.336415451765060380395766514994 -0.0935945466160774119934728787484 +0.0237905994057655313655974538278 -0.568692612648010187292868522491 0.18979740142822265625 +0.0237905994057655313655974538278 0.568692612648010187292868522491 0.18979740142822265625 +0.02380909956991672515869140625 -0.3757445812225341796875 0.590125906467437677527243522491 +0.02380909956991672515869140625 0.3757445812225341796875 0.590125906467437677527243522491 +0.0238109998404979691932759067186 -0.105596700310707086734041126874 0.103838253021240237150557561563 +0.0238109998404979691932759067186 0.105596700310707086734041126874 0.103838253021240237150557561563 +0.0238222002983093268657643903907 -0.158528995513916026727230246252 0.119587004184722900390625 +0.0238222002983093268657643903907 0.158528995513916026727230246252 0.119587004184722900390625 +0.0238821998238563544536550153907 -0.0735005021095275906661825615629 -0.0634611010551452692229901231258 +0.0238821998238563544536550153907 0.0735005021095275906661825615629 -0.0634611010551452692229901231258 +0.023893500678241252899169921875 -0.70832325518131256103515625 -0.245371498167514801025390625 +0.023893500678241252899169921875 0.70832325518131256103515625 -0.245371498167514801025390625 +0.02392520010471343994140625 -0.0336156994104385362098774692186 -0.0282413005828857435752787807814 +0.02392520010471343994140625 0.0336156994104385362098774692186 -0.0282413005828857435752787807814 +0.0239599004387855557540731865629 -0.0310117989778518690635600307814 0.0310514003038406399825888115629 +0.0239599004387855557540731865629 0.0310117989778518690635600307814 0.0310514003038406399825888115629 +0.0239695496857166290283203125 -0.11368949711322784423828125 -0.09486915171146392822265625 +0.0239695496857166290283203125 0.11368949711322784423828125 -0.09486915171146392822265625 +0.0239759996533393873741069057814 -0.0100183002650737762451171875 0.0427174985408783000617738423443 +0.0239759996533393873741069057814 0.0100183002650737762451171875 0.0427174985408783000617738423443 +0.0239953503012657158588449846093 -0.00989819951355457201824794566392 0.14773710072040557861328125 +0.0239953503012657158588449846093 0.00989819951355457201824794566392 0.14773710072040557861328125 +0.0240236509591340990921182196871 -0.149495504796504974365234375 0.315553346276283230853465511245 +0.0240236509591340990921182196871 0.149495504796504974365234375 0.315553346276283230853465511245 +0.0240385495126247406005859375 -0.0542380481958389254470986884371 -0.13776929676532745361328125 +0.0240385495126247406005859375 0.0542380481958389254470986884371 -0.13776929676532745361328125 +0.02406099997460842132568359375 -0.3950540125370025634765625 0.305537998676300048828125 +0.02406099997460842132568359375 0.3950540125370025634765625 0.305537998676300048828125 +0.0240765497088432332828400461722 -0.0396324008703231867034588731258 0.0186973497271537801578400461722 +0.0240765497088432332828400461722 0.0396324008703231867034588731258 0.0186973497271537801578400461722 +0.0240807503461837775493581403907 -0.0200482502579689032817800153907 0.03896389901638031005859375 +0.0240807503461837775493581403907 0.0200482502579689032817800153907 0.03896389901638031005859375 +0.0241560004651546478271484375 -0.140157997608184814453125 -0.479345500469207763671875 +0.0241560004651546478271484375 0.140157997608184814453125 -0.479345500469207763671875 +0.02419500052928924560546875 -0.14106200635433197021484375 -0.2049782574176788330078125 +0.02419500052928924560546875 0.14106200635433197021484375 -0.2049782574176788330078125 +0.0241971001029014608219025461722 -0.0744723021984100425063601846887 0.0621962010860443170745526231258 +0.0241971001029014608219025461722 0.0744723021984100425063601846887 0.0621962010860443170745526231258 +0.0241993501782417283485493442186 0 0.349162447452545154913394753748 +0.0242214009165763848041574846093 -0.0745451025664806282700070028113 -0.695597696304321222449118522491 +0.0242214009165763848041574846093 0.0745451025664806282700070028113 -0.695597696304321222449118522491 +0.0242229506373405484298544365629 -0.0258057504892349257041850307814 -0.0353172987699508708625550923443 +0.0242229506373405484298544365629 0.0258057504892349257041850307814 -0.0353172987699508708625550923443 +0.0242255993187427513813059221093 -0.074556998908519744873046875 -0.341107544302940324243422764994 +0.0242255993187427513813059221093 0.074556998908519744873046875 -0.341107544302940324243422764994 +0.0242475003004074124435263115629 -0.0390100508928298977950888115629 -0.019755400717258453369140625 +0.0242475003004074124435263115629 0.0390100508928298977950888115629 -0.019755400717258453369140625 +0.0243542507290840162803569057814 -0.0424013495445251520354901231258 -0.0104401499032974257041850307814 +0.0243542507290840162803569057814 0.0424013495445251520354901231258 -0.0104401499032974257041850307814 +0.0243684008717536919330637346093 -0.0749992489814758217514523153113 0.127598100900650018862947376874 +0.0243684008717536919330637346093 0.0749992489814758217514523153113 0.127598100900650018862947376874 +0.0243752002716064453125 -0.0427668511867523234992738423443 0.00876614972949027980442249230464 +0.0243752002716064453125 0.0427668511867523234992738423443 0.00876614972949027980442249230464 +0.0244094500318169579933247348436 -0.258228291571140300408870871252 0.8094584047794342041015625 +0.0244094500318169579933247348436 0.258228291571140300408870871252 0.8094584047794342041015625 +0.0244403991848230368877370466407 -0.311534097790718111919971988755 -0.8440082967281341552734375 +0.0244403991848230368877370466407 0.311534097790718111919971988755 -0.8440082967281341552734375 +0.024447500705718994140625 -0.1830115020275115966796875 0.464659988880157470703125 +0.024447500705718994140625 0.1830115020275115966796875 0.464659988880157470703125 +0.0244510501623153714279013115629 -0.00333704985678195953369140625 0.0434857487678527859786825615629 +0.0244510501623153714279013115629 0.00333704985678195953369140625 0.0434857487678527859786825615629 +0.0244806006550788886333425153907 -0.0884963989257812611022302462516 0.0396117001771926907638388115629 +0.0244806006550788886333425153907 0.0884963989257812611022302462516 0.0396117001771926907638388115629 +0.0244847998023033155967631557814 -0.342133188247680686266960492503 -0.205780410766601584704460492503 +0.0244847998023033155967631557814 0.342133188247680686266960492503 -0.205780410766601584704460492503 +0.0244863487780094118972940009371 -0.34569080173969268798828125 -0.0489723481237888322303852817186 +0.0244863487780094118972940009371 0.34569080173969268798828125 -0.0489723481237888322303852817186 +0.0245009005069732679893412807814 -0.0434862494468689006477113423443 0.00294139999896287935438055072268 +0.0245009005069732679893412807814 0.0434862494468689006477113423443 0.00294139999896287935438055072268 +0.02450424991548061370849609375 -0.22070825099945068359375 -0.114836253225803375244140625 +0.02450424991548061370849609375 0.22070825099945068359375 -0.114836253225803375244140625 +0.0245316505432128934005575615629 -0.0434267014265060438682475307814 -0.00350989997386932407741344519536 +0.0245316505432128934005575615629 0.0434267014265060438682475307814 -0.00350989997386932407741344519536 +0.0245440004393458373332936872657 -0.637963938713073774877670985006 0.122064153105020528622404185626 +0.0245440004393458373332936872657 0.637963938713073774877670985006 0.122064153105020528622404185626 +0.0245615992695093141029438754686 -0.697841906547546297900908029987 -0.0491238974034786182731870951557 +0.0245615992695093141029438754686 0.697841906547546297900908029987 -0.0491238974034786182731870951557 +0.0245773002505302456954794365629 -0.0331419497728347792198100307814 0.0282412499189376858810263115629 +0.0245773002505302456954794365629 0.0331419497728347792198100307814 0.0282412499189376858810263115629 +0.0245813995599746711040456403907 -0.0137344494462013251567800153907 -0.04131729900836944580078125 +0.0245813995599746711040456403907 0.0137344494462013251567800153907 -0.04131729900836944580078125 +0.0246012002229690565635600307814 -0.0325926005840301499794087192186 0.0912826001644134604751101846887 +0.0246012002229690565635600307814 0.0325926005840301499794087192186 0.0912826001644134604751101846887 +0.024622499942779541015625 -0.55899976193904876708984375 0.49941225349903106689453125 +0.024622499942779541015625 0.55899976193904876708984375 0.49941225349903106689453125 +0.0246527493000030517578125 -0.0374891996383667006065287807814 0.0220635995268821730186381557814 +0.0246527493000030517578125 0.0374891996383667006065287807814 0.0220635995268821730186381557814 +0.0247338000684976591636576870314 -0.4795095622539520263671875 -0.438131204247474703716846988755 +0.0247338000684976591636576870314 0.4795095622539520263671875 -0.438131204247474703716846988755 +0.0248666994273662560199777971093 -0.116017502546310422029129938437 -0.2755385935306549072265625 +0.0248666994273662560199777971093 0.116017502546310422029129938437 -0.2755385935306549072265625 +0.0249280005693435675884206403907 -0.0767220020294189508636151231258 0.183009004592895513363615123126 +0.0249280005693435675884206403907 0.0767220020294189508636151231258 0.183009004592895513363615123126 +0.0249793499708175666118581403907 -0.130458149313926685675113503748 -0.0696899995207786587814169365629 +0.0249793499708175666118581403907 0.130458149313926685675113503748 -0.0696899995207786587814169365629 +0.0249822003766894361331818430472 -0.270673191547393832134815738755 0.358625239133834872173878238755 +0.0249822003766894361331818430472 0.270673191547393832134815738755 0.358625239133834872173878238755 +0.024999849498271942138671875 -0.00991119965910911698836471828145 -0.0421518504619598430305238423443 +0.024999849498271942138671875 0.00991119965910911698836471828145 -0.0421518504619598430305238423443 +0.0250066488981246955181081403907 -0.0369441002607345594932475307814 -0.0225787505507469184184987653907 +0.0250066488981246955181081403907 0.0369441002607345594932475307814 -0.0225787505507469184184987653907 +0.0250108502805233001708984375 -0.0181712999939918525005300153907 -0.146779650449752802066072376874 +0.0250108502805233001708984375 0.0181712999939918525005300153907 -0.146779650449752802066072376874 +0.02501370012760162353515625 -0.0232105001807212836528737653907 0.0365456998348236070106587192186 +0.02501370012760162353515625 0.0232105001807212836528737653907 0.0365456998348236070106587192186 +0.0250629007816314704204518903907 -0.0904837012290954645354901231258 -0.0344175010919570908973774692186 +0.0250629007816314704204518903907 0.0904837012290954645354901231258 -0.0344175010919570908973774692186 +0.0250686496496200575401225307814 -0.0351021498441696153114399692186 0.0252863496541976956466513115629 +0.0250686496496200575401225307814 0.0351021498441696153114399692186 0.0252863496541976956466513115629 +0.0250895999372005469585378278907 -0.537838804721832208777243522491 0.264763194322586048468082253748 +0.0250895999372005469585378278907 0.537838804721832208777243522491 0.264763194322586048468082253748 +0.0250947505235672024825888115629 -0.0223485499620437629009206403907 -0.0370242506265640244911274692186 +0.0250947505235672024825888115629 0.0223485499620437629009206403907 -0.0370242506265640244911274692186 +0.0251365989446640028526225307814 -0.0510352015495300348479901231258 -0.191738200187683116570980246252 +0.0251365989446640028526225307814 0.0510352015495300348479901231258 -0.191738200187683116570980246252 +0.0251668989658355712890625 -0.0132568001747131354595143903907 0.0958691000938415582854901231258 +0.0251668989658355712890625 0.0132568001747131354595143903907 0.0958691000938415582854901231258 +0.02516759932041168212890625 -0.0305460005998611471011994211722 -0.0305537998676300055767018903907 +0.02516759932041168212890625 0.0305460005998611471011994211722 -0.0305537998676300055767018903907 +0.0251712005585432059551198591407 -0.0182880001142621054222026089064 -0.448923146724700961041065738755 +0.0251712005585432059551198591407 0.0182880001142621054222026089064 -0.448923146724700961041065738755 +0.0252305991947650888607146413278 -0.006096149794757366180419921875 -0.14773710072040557861328125 +0.0252305991947650888607146413278 0.006096149794757366180419921875 -0.14773710072040557861328125 +0.0252416006289422518993337263282 -0.757978159189224176550681022491 -0.383838759362697568011668636245 +0.0252416006289422518993337263282 0.757978159189224176550681022491 -0.383838759362697568011668636245 +0.0252611994743347188785431711722 -0.179301595687866216488615123126 -0.356669211387634299548210492503 +0.0252611994743347188785431711722 0.179301595687866216488615123126 -0.356669211387634299548210492503 +0.025262248702347278594970703125 -0.7345695197582244873046875 -0.149231247603893280029296875 +0.025262248702347278594970703125 0.7345695197582244873046875 -0.149231247603893280029296875 +0.0252755988389253595516326100778 -0.228722190856933571545539507497 0.263718339800834644659488503748 +0.0252755988389253595516326100778 0.228722190856933571545539507497 0.263718339800834644659488503748 +0.0252855986356735236431081403907 -0.00598765015602111851100719519536 -0.0427174985408783000617738423443 +0.0252855986356735236431081403907 0.00598765015602111851100719519536 -0.0427174985408783000617738423443 +0.0253096014261245741416850307814 -0.33214199542999267578125 0.221452403068542497122095369377 +0.0253096014261245741416850307814 0.33214199542999267578125 0.221452403068542497122095369377 +0.0253325991332530968402902971093 -0.0779667019844055148025674384371 0.288581693172454800677684261245 +0.0253325991332530968402902971093 0.0779667019844055148025674384371 0.288581693172454800677684261245 +0.02533400058746337890625 -0.121147203445434573088057561563 0.157103598117828369140625 +0.02533400058746337890625 0.121147203445434573088057561563 0.157103598117828369140625 +0.0253364503383636495426056711722 -0.0133201003074646003032643903907 0.0409956008195877102950888115629 +0.0253364503383636495426056711722 0.0133201003074646003032643903907 0.0409956008195877102950888115629 +0.0253365993499755880191681711722 -0.0513369023799896267989950615629 -0.0819913029670715359786825615629 +0.0253365993499755880191681711722 0.0513369023799896267989950615629 -0.0819913029670715359786825615629 +0.0253558993339538588096537807814 -0.0564508020877838162521200615629 0.0785517990589141845703125 +0.0253558993339538588096537807814 0.0564508020877838162521200615629 0.0785517990589141845703125 +0.0253834012895822504207732350778 -0.346653649210929837298778011245 0.0410724990069866180419921875 +0.0253834012895822504207732350778 0.346653649210929837298778011245 0.0410724990069866180419921875 +0.0254283487796783461143412807814 -0.00206489991396665564446499807616 -0.0430016010999679579307475307814 +0.0254283487796783461143412807814 0.00206489991396665564446499807616 -0.0430016010999679579307475307814 +0.02542980015277862548828125 -0.310779011249542214123664507497 -0.512610590457916237561164507497 +0.02542980015277862548828125 0.310779011249542214123664507497 -0.512610590457916237561164507497 +0.0254397511482238776470143903907 -0.0412587493658065837531800923443 0.0122693501412868503225306326954 +0.0254397511482238776470143903907 0.0412587493658065837531800923443 0.0122693501412868503225306326954 +0.0254442989826202392578125 -0.698324894905090309826789507497 0.041171200573444366455078125 +0.0254442989826202392578125 0.698324894905090309826789507497 0.041171200573444366455078125 +0.0254680991172790555099325615629 -0.0783840000629425076583700615629 0.0566332995891571100433026231258 +0.0254680991172790555099325615629 0.0783840000629425076583700615629 0.0566332995891571100433026231258 +0.0254702985286712653423268903907 -0.0267376989126205458213725307814 -0.0929319977760315052428552462516 +0.0254702985286712653423268903907 0.0267376989126205458213725307814 -0.0929319977760315052428552462516 +0.0254747986793518073345143903907 -0.078405201435089111328125 0.391412401199340842516960492503 +0.0254747986793518073345143903907 0.078405201435089111328125 0.391412401199340842516960492503 +0.0254864007234573385074494211722 -0.755544805526733420641960492503 -0.26172959804534912109375 +0.0254864007234573385074494211722 0.755544805526733420641960492503 -0.26172959804534912109375 +0.0255024492740631124332306711722 -0.0408760488033294705489950615629 -0.0133706495165824904014506557814 +0.0255024492740631124332306711722 0.0408760488033294705489950615629 -0.0133706495165824904014506557814 +0.025509749539196491241455078125 -0.40258347988128662109375 0.6322777569293975830078125 +0.025509749539196491241455078125 0.40258347988128662109375 0.6322777569293975830078125 +0.0255768008530139930034597028907 -0.0787194013595580999176348768742 0.594263398647308371813835492503 +0.0255768008530139930034597028907 0.0787194013595580999176348768742 0.594263398647308371813835492503 +0.025623500347137451171875 -0.23401199281215667724609375 -0.084153749048709869384765625 +0.025623500347137451171875 0.23401199281215667724609375 -0.084153749048709869384765625 +0.02562870085239410400390625 -0.0262053489685058621505575615629 0.0340066492557525648643412807814 +0.02562870085239410400390625 0.0262053489685058621505575615629 0.0340066492557525648643412807814 +0.0256376504898071302940287807814 -0.0346887499094009413291850307814 -0.0252863496541976956466513115629 +0.0256376504898071302940287807814 0.0346887499094009413291850307814 -0.0252863496541976956466513115629 +0.0256715990602970102474333913278 -0.138581550121307378597990123126 -0.0513430505990982027908486884371 +0.0256715990602970102474333913278 0.138581550121307378597990123126 -0.0513430505990982027908486884371 +0.0256812006235122708419638115629 -0.0921918988227844321547976846887 0.0290022999048233053043244211722 +0.0256812006235122708419638115629 0.0921918988227844321547976846887 0.0290022999048233053043244211722 +0.0256896499544382074520232350778 -0.338325041532516468389957253748 0.0858854509890079470535440009371 +0.0256896499544382074520232350778 0.338325041532516468389957253748 0.0858854509890079470535440009371 +0.0257731493562459966495392649222 -0.616083663702011175011818977509 0.2056138515472412109375 +0.0257731493562459966495392649222 0.616083663702011175011818977509 0.2056138515472412109375 +0.0257981991395354257057270785936 -0.328841547667980182989566628748 -0.89089764654636383056640625 +0.0257981991395354257057270785936 0.328841547667980182989566628748 -0.89089764654636383056640625 +0.0258096992969512953330912807814 -0.0187516003847122206260600307814 -0.0384997993707656901984925923443 +0.0258096992969512953330912807814 0.0187516003847122206260600307814 -0.0384997993707656901984925923443 +0.025831401348114013671875 -0.16878139972686767578125 -0.104142200946807872430355246252 +0.025831401348114013671875 0.16878139972686767578125 -0.104142200946807872430355246252 +0.0258453000336885466148295620314 -0.273418191075325001104801003748 0.857073605060577392578125 +0.0258453000336885466148295620314 0.273418191075325001104801003748 0.857073605060577392578125 +0.0259515009820461273193359375 -0.07986975274980068206787109375 -0.74528324604034423828125 +0.0259515009820461273193359375 0.07986975274980068206787109375 -0.74528324604034423828125 +0.02602724917232990264892578125 -0.1873577535152435302734375 0.163461744785308837890625 +0.02602724917232990264892578125 0.1873577535152435302734375 0.163461744785308837890625 +0.0260510504245758077457306711722 -0.006676100194454193115234375 0.042151749134063720703125 +0.0260510504245758077457306711722 0.006676100194454193115234375 0.042151749134063720703125 +0.02610024996101856231689453125 -0.24309225380420684814453125 -0.05220074951648712158203125 +0.02610024996101856231689453125 0.24309225380420684814453125 -0.05220074951648712158203125 +0.0261249512434005744243581403907 -0.04263199865818023681640625 0 +0.0261249512434005744243581403907 0.04263199865818023681640625 0 +0.0261260993778705576107146413278 -0.112467151880264279451004938437 0.0957526534795761080642861884371 +0.0261260993778705576107146413278 0.112467151880264279451004938437 0.0957526534795761080642861884371 +0.0261675007641315460205078125 -0.080534003674983978271484375 -0.2352222502231597900390625 +0.0261675007641315460205078125 0.0805342495441436767578125 -0.2352222502231597900390625 +0.02617450058460235595703125 -0.0421955496072769220550213731258 0.0058674998581409454345703125 +0.02617450058460235595703125 0.0421955496072769220550213731258 0.0058674998581409454345703125 +0.0261975497007370002056081403907 -0.0420088499784469632247763115629 -0.00699604973196983354749578509768 +0.0261975497007370002056081403907 0.0420088499784469632247763115629 -0.00699604973196983354749578509768 +0.0261979997158050537109375 -0.080630250275135040283203125 0.23518599569797515869140625 +0.0261979997158050537109375 0.080630250275135040283203125 0.23518599569797515869140625 +0.0262367993593215949321706403907 -0.0272551506757736233810263115629 -0.0326923012733459500411825615629 +0.0262367993593215949321706403907 0.0272551506757736233810263115629 -0.0326923012733459500411825615629 +0.0262517005205154425884206403907 -0.0395055502653121962119975307814 0.0158163994550704969932475307814 +0.0262517005205154425884206403907 0.0395055502653121962119975307814 0.0158163994550704969932475307814 +0.0262524008750915534282643903907 -0.0941617012023925892272302462516 -0.0210804000496864346603231865629 +0.0262524008750915534282643903907 0.0941617012023925892272302462516 -0.0210804000496864346603231865629 +0.0262622494250535944149138600778 -0.219907444715499861276342130623 -0.271018302440643288342414507497 +0.0262622494250535944149138600778 0.219907444715499861276342130623 -0.271018302440643288342414507497 +0.0262639999389648465255575615629 -0.596266412734985373766960492503 0.532706403732299826891960492503 +0.0262639999389648465255575615629 0.596266412734985373766960492503 0.532706403732299826891960492503 +0.0262823998928070068359375 -0.166161799430847190173210492503 0.108164203166961681024105246252 +0.0262823998928070068359375 0.166161799430847190173210492503 0.108164203166961681024105246252 +0.0262865006923675564864950615629 0 0.0425325989723205621917401231258 +0.026286900043487548828125 -0.0809011995792388999282351846887 -0.05257380008697509765625 +0.026286900043487548828125 0.0809011995792388999282351846887 -0.05257380008697509765625 +0.0262913994491100304340402971093 -0.145712104439735395944310880623 0.260915100574493408203125 +0.0262913994491100304340402971093 0.145712104439735395944310880623 0.260915100574493408203125 +0.026315999217331409454345703125 -0.747687757015228271484375 -0.05263274721801280975341796875 +0.026315999217331409454345703125 0.747687757015228271484375 -0.05263274721801280975341796875 +0.0263305008411407470703125 -0.303053790330886807513621761245 0.173104397952556610107421875 +0.0263305008411407470703125 0.303053790330886807513621761245 0.173104397952556610107421875 +0.0263374507427215562294087192186 -0.0487290009856224046180805942186 0.139397996664047230108707253748 +0.0263374507427215562294087192186 0.0487290009856224046180805942186 0.139397996664047230108707253748 +0.0263503499329090125347097028907 -0.0810965985059738103668536268742 -0.123405897617340082339509876874 +0.0263503499329090125347097028907 0.0810965985059738103668536268742 -0.123405897617340082339509876874 +0.0263756006956100477744975307814 -0.133921194076538102590845369377 -0.146182799339294428042634876874 +0.0263756006956100477744975307814 0.133921194076538102590845369377 -0.146182799339294428042634876874 +0.026395000517368316650390625 -0.34409248828887939453125 -0.3618060052394866943359375 +0.026395000517368316650390625 0.34409248828887939453125 -0.3618060052394866943359375 +0.0263989001512527493575888115629 -0.0678970992565155057052450615629 -0.0685060977935791071136151231258 +0.0263989001512527493575888115629 0.0678970992565155057052450615629 -0.0685060977935791071136151231258 +0.0264136999845504781558869211722 -0.0285568505525588996196706403907 0.03141374886035919189453125 +0.0264136999845504781558869211722 0.0285568505525588996196706403907 0.03141374886035919189453125 +0.0264320004731416688392720004686 -0.687038087844848543994658029987 0.131453703343868244513004128748 +0.0264320004731416688392720004686 0.687038087844848543994658029987 0.131453703343868244513004128748 +0.0264670999720692662338095146879 -0.434559413790702842028679242503 0.336091798543930064813167746252 +0.0264670999720692662338095146879 0.434559413790702842028679242503 0.336091798543930064813167746252 +0.0264676988124847439864950615629 -0.0391391485929489177375550923443 -0.016358099877834320068359375 +0.0264676988124847439864950615629 0.0391391485929489177375550923443 -0.016358099877834320068359375 +0.0265060007572174086143412807814 -0.3664968013763427734375 -0.158043205738067626953125 +0.0265060007572174086143412807814 0.3664968013763427734375 -0.158043205738067626953125 +0.02650845050811767578125 -0.0167068496346473686908762346093 0.0389638513326644939094300923443 +0.02650845050811767578125 0.0167068496346473686908762346093 0.0389638513326644939094300923443 +0.0265193998813629157329518903907 -0.0947821974754333579360476846887 0.01769340038299560546875 +0.0265193998813629157329518903907 0.0947821974754333579360476846887 0.01769340038299560546875 +0.0265394985675811781455912807814 -0.03861840069293975830078125 0.0883418023586273193359375 +0.0265394985675811781455912807814 0.03861840069293975830078125 0.0883418023586273193359375 +0.0265689007937908172607421875 -0.210691505670547479800447376874 0.211903792619705183541967130623 +0.0265689007937908172607421875 0.210691505670547479800447376874 0.211903792619705183541967130623 +0.0265716005116701133037526716407 -0.154173797369003301449552623126 -0.527280050516128584447983485006 +0.0265716005116701133037526716407 0.154173797369003301449552623126 -0.527280050516128584447983485006 +0.0266171008348464986636994211722 -0.0819204986095428550063601846887 0.0507992029190063518195863423443 +0.0266171008348464986636994211722 0.0819204986095428550063601846887 0.0507992029190063518195863423443 +0.0266364000737667055984658759371 -0.516394913196563720703125 -0.471833604574203480108707253748 +0.0266364000737667055984658759371 0.516394913196563720703125 -0.471833604574203480108707253748 +0.0266514003276824978927450615629 -0.0392820000648498590667401231258 0.19428479671478271484375 +0.0266514003276824978927450615629 0.0392820000648498590667401231258 0.19428479671478271484375 +0.02665550075471401214599609375 -0.18132324516773223876953125 -0.1700332462787628173828125 +0.02665550075471401214599609375 0.18132324516773223876953125 -0.1700332462787628173828125 +0.0267172493040561676025390625 -0.323506048321723915783820757497 0.130881802737712854556306751874 +0.0267172493040561676025390625 0.323506048321723915783820757497 0.130881802737712854556306751874 +0.0267224997282028177425505788278 -0.133938753604888910464509876874 0.062018550932407379150390625 +0.0267224997282028177425505788278 0.133938753604888910464509876874 0.062018550932407379150390625 +0.0267264006659388535236399064843 -0.802565109729766912316506477509 -0.406417509913444552349659488755 +0.0267264006659388535236399064843 0.802565109729766912316506477509 -0.406417509913444552349659488755 +0.0267319489270448663875701100778 -0.285679790377616871221988503748 -0.200431010127067543713508257497 +0.0267319489270448663875701100778 0.285679790377616871221988503748 -0.200431010127067543713508257497 +0.026742450892925262451171875 -0.141111302375793445929019753748 0.043271698057651519775390625 +0.026742450892925262451171875 0.141111302375793445929019753748 0.043271698057651519775390625 +0.0268473505973815945724325615629 -0.015382699668407440185546875 -0.0392758488655090345909037807814 +0.0268473505973815945724325615629 0.015382699668407440185546875 -0.0392758488655090345909037807814 +0.0268712013959884650493581403907 -0.09606540203094482421875 -0.00702629983425140380859375 +0.0268712013959884650493581403907 0.09606540203094482421875 -0.00702629983425140380859375 +0.0268922507762908956363556711722 -0.201312652230262761898771373126 0.511125987768173306591279470013 +0.0268922507762908956363556711722 0.201312652230262761898771373126 0.511125987768173306591279470013 +0.0269125014543533346011994211722 -0.0374716997146606473068075615629 0.0192766502499580397178569057814 +0.0269125014543533346011994211722 0.0374716997146606473068075615629 0.0192766502499580397178569057814 +0.0269463986158370999435263115629 -0.783540821075439541942841970013 -0.159179997444152843133480246252 +0.0269463986158370999435263115629 0.783540821075439541942841970013 -0.159179997444152843133480246252 +0.0269540011882782003238556711722 -0.0961188018321991050063601846887 0.00588660016655922005424095289072 +0.0269540011882782003238556711722 0.0961188018321991050063601846887 0.00588660016655922005424095289072 +0.0269633501768112189556081403907 -0.03172869980335235595703125 -0.0276815503835678121402619211722 +0.0269633501768112189556081403907 0.03172869980335235595703125 -0.0276815503835678121402619211722 +0.026995599269866943359375 -0.181165802478790299856470369377 -0.0803131997585296714126101846887 +0.026995599269866943359375 0.181165802478790299856470369377 -0.0803131997585296714126101846887 +0.0270000994205474853515625 -0.0615451991558075006683026231258 0.0740486025810241782485476846887 +0.0270000994205474853515625 0.0615451991558075006683026231258 0.0740486025810241782485476846887 +0.0270168006420135504985768903907 -0.0443951010704040568977113423443 -0.0854350984096527155120526231258 +0.0270168006420135504985768903907 0.0443951010704040568977113423443 -0.0854350984096527155120526231258 +0.0270361505448818185970427663278 -0.0832102507352828896225460653113 0.121840345859527576788394753748 +0.0270361505448818185970427663278 0.0832102507352828896225460653113 0.121840345859527576788394753748 +0.0270776510238647481754181711722 -0.0307725995779037503341513115629 0.0286329507827758796001393903907 +0.0270776510238647481754181711722 0.0307725995779037503341513115629 0.0286329507827758796001393903907 +0.0270793007686734206462819685157 -0.802766355872154169226462272491 -0.278087697923183441162109375 +0.0270793007686734206462819685157 0.802766355872154169226462272491 -0.278087697923183441162109375 +0.02708799950778484344482421875 -0.24463249742984771728515625 0.0438307486474514007568359375 +0.02708799950778484344482421875 0.24463249742984771728515625 0.0438307486474514007568359375 +0.0271108508110046407535431711722 -0.0238109499216079718852956403907 -0.0346127510070800767372212192186 +0.0271108508110046407535431711722 0.0238109499216079718852956403907 -0.0346127510070800767372212192186 +0.0271559990942478179931640625 -0.3461489975452423095703125 -0.937786996364593505859375 +0.0271559990942478179931640625 0.3461489975452423095703125 -0.937786996364593505859375 +0.0271571993827819831157643903907 -0.384474802017211958471420985006 -0.106965196132659923211605246252 +0.0271571993827819831157643903907 0.384474802017211958471420985006 -0.106965196132659923211605246252 +0.0271764010190963731239399692186 -0.0197448000311851480648162038278 0.298113298416137706414730246252 +0.0271764010190963731239399692186 0.0197448000311851480648162038278 0.298113298416137706414730246252 +0.0271803999319672577594797502343 -0.582658705115318364953225227509 0.286826793849468242303402121252 +0.0271803999319672577594797502343 0.582658705115318364953225227509 0.286826793849468242303402121252 +0.0271810501813888535926899692186 -0.019748099148273468017578125 0.146188947558403004034488503748 +0.0271810501813888535926899692186 0.019748099148273468017578125 0.146188947558403004034488503748 +0.0271893002092838294292409528907 -0.044223301112651824951171875 -0.2954742014408111572265625 +0.0271893002092838294292409528907 0.044223301112651824951171875 -0.2954742014408111572265625 +0.02721039950847625732421875 -0.4294223785400390625 0.674429607391357488488381477509 +0.02721039950847625732421875 0.4294223785400390625 0.674429607391357488488381477509 +0.0272242493927478783344309221093 -0.0444000005722045912315287807814 -0.14066804945468902587890625 +0.0272242493927478783344309221093 0.0444000005722045912315287807814 -0.14066804945468902587890625 +0.02726174890995025634765625 -0.748205244541168212890625 0.0441120006144046783447265625 +0.02726174890995025634765625 0.748205244541168212890625 0.0441120006144046783447265625 +0.0272811500355601282974404853121 -0.288608090579509701800731136245 0.9046888053417205810546875 +0.0272811500355601282974404853121 0.288608090579509701800731136245 0.9046888053417205810546875 +0.0273175507783889777446706403907 -0.0408116012811660794357138115629 0.00938955023884773323783470289072 +0.0273175507783889777446706403907 0.0408116012811660794357138115629 0.00938955023884773323783470289072 +0.0273214012384414700607138115629 -0.0371746003627777127364950615629 -0.0192766994237899801090119211722 +0.0273214012384414700607138115629 0.0371746003627777127364950615629 -0.0192766994237899801090119211722 +0.02732659876346588134765625 0 0.0961938977241516141036825615629 +0.02733075059950351715087890625 -0.13811199367046356201171875 0.2065867483615875244140625 +0.02733075059950351715087890625 0.13811199367046356201171875 0.2065867483615875244140625 +0.027402698993682861328125 -0.0199092000722885138774831403907 0.0940889000892639187911825615629 +0.027402698993682861328125 0.0199092000722885138774831403907 0.0940889000892639187911825615629 +0.027408599853515625 -0.03519900143146514892578125 0.0225787505507469184184987653907 +0.027408599853515625 0.03519900143146514892578125 0.0225787505507469184184987653907 +0.027422249317169189453125 -0.0406084001064300550987162807814 -0.00994874984025955269584251539072 +0.027422249317169189453125 0.0406084001064300550987162807814 -0.00994874984025955269584251539072 +0.0274354010820388807823100307814 -0.0199327006936073324039337961722 -0.0940743982791900634765625 +0.0274354010820388807823100307814 0.0199327006936073324039337961722 -0.0940743982791900634765625 +0.0274525500833988182758371721093 -0.144098103046417236328125 -0.0313384495675563812255859375 +0.0274525500833988182758371721093 0.144098103046417236328125 -0.0313384495675563812255859375 +0.0274556010961532620529013115629 -0.170852005481719970703125 0.360632395744323763775440738755 +0.0274556010961532620529013115629 0.170852005481719970703125 0.360632395744323763775440738755 +0.0274606507271528237079660783593 -0.348920953273773148950454014994 0 +0.0274606507271528237079660783593 0.348920953273773148950454014994 0 +0.0274850487709045430972931711722 -0.0100183002650737762451171875 0.040548801422119140625 +0.0274850487709045430972931711722 0.0100183002650737762451171875 0.040548801422119140625 +0.027493000030517578125 -0.2241995036602020263671875 0.10713849961757659912109375 +0.027493000030517578125 0.2241995036602020263671875 0.10713849961757659912109375 +0.027500450611114501953125 -0.019980199635028839111328125 0.0366676509380340562294087192186 +0.027500450611114501953125 0.019980199635028839111328125 0.0366676509380340562294087192186 +0.0275043010711669907997212192186 -0.231771004199981672799779630623 -0.1884824931621551513671875 +0.0275043010711669907997212192186 0.231771004199981672799779630623 -0.1884824931621551513671875 +0.0275453997775912291789968122657 -0.384899836778640758172542746252 -0.231502962112426768914730246252 +0.0275453997775912291789968122657 0.384899836778640758172542746252 -0.231502962112426768914730246252 +0.0275489501655101776123046875 -0.336677262187004111559929242503 -0.555328139662742636950554242503 +0.0275489501655101776123046875 0.336677262187004111559929242503 -0.555328139662742636950554242503 +0.0275892503559589385986328125 -0.23654924333095550537109375 0.0760477483272552490234375 +0.0275892503559589385986328125 0.23654924333095550537109375 0.0760477483272552490234375 +0.0275903999805450460269806711722 0 0.198087799549102799856470369377 +0.0276134997606277479698100307814 -0.0328001499176025432258363423443 0.0257225006818771369243581403907 +0.0276134997606277479698100307814 0.0328001499176025432258363423443 0.0257225006818771369243581403907 +0.0276385009288787862613556711722 -0.0850639998912811334808026231258 0.04472149908542633056640625 +0.0276385009288787862613556711722 0.0850639998912811334808026231258 0.04472149908542633056640625 +0.0276394009590148932720143903907 -0.0850639998912811334808026231258 -0.178885996341705322265625 +0.0276394009590148932720143903907 0.0850639998912811334808026231258 -0.178885996341705322265625 +0.0276398003101348890830912807814 -0.190210998058319091796875 -0.0552793979644775404502787807814 +0.0276398003101348890830912807814 0.190210998058319091796875 -0.0552793979644775404502787807814 +0.0276564002037048353721537807814 0 0.399042797088623057977230246252 +0.0276816010475158698345143903907 -0.0851944029331207358657351846887 -0.794968795776367254113381477509 +0.0276816010475158698345143903907 0.0851944029331207358657351846887 -0.794968795776367254113381477509 +0.0276863992214202887798268903907 -0.085207998752593994140625 -0.389837193489074751440170985006 +0.0276863992214202887798268903907 0.085207998752593994140625 -0.389837193489074751440170985006 +0.0277082009240984909748117814843 -0.0852793514728546198089276231258 0.643785348534584023205695757497 +0.0277082009240984909748117814843 0.0852793514728546198089276231258 0.643785348534584023205695757497 +0.0277451008558273343185263115629 -0.0119336500763893137849747105861 -0.0398472011089325006683026231258 +0.0277451008558273343185263115629 0.0119336500763893137849747105861 -0.0398472011089325006683026231258 +0.0277556993067264549945871721093 -0.663474714756011940686164507497 0.221430301666259737869424384371 +0.0277556993067264549945871721093 0.663474714756011940686164507497 0.221430301666259737869424384371 +0.02775800041854381561279296875 -0.30074799060821533203125 0.398472487926483154296875 +0.02775800041854381561279296875 0.30074799060821533203125 0.398472487926483154296875 +0.0278288997709751108333708913278 -0.105669745802879327944978626874 -0.102759146690368646792634876874 +0.0278288997709751108333708913278 0.105669745802879327944978626874 -0.102759146690368646792634876874 +0.0278485506772995008994975307814 -0.0414223492145538371711488423443 0.0029408000409603118896484375 +0.0278485506772995008994975307814 0.0414223492145538371711488423443 0.0029408000409603118896484375 +0.0278793513774871840049662807814 -0.0413573503494262736945863423443 -0.00350884981453418757710305264652 +0.0278793513774871840049662807814 0.0413573503494262736945863423443 -0.00350884981453418757710305264652 +0.0279012508690357208251953125 -0.020271249115467071533203125 -0.24760974943637847900390625 +0.0279012508690357208251953125 0.020271249115467071533203125 -0.24760974943637847900390625 +0.0279015004634857177734375 -0.0202713996171951307823100307814 -0.0362019002437591538856587192186 +0.0279015004634857177734375 0.0202713996171951307823100307814 -0.0362019002437591538856587192186 +0.0279054999351501450965962192186 -0.633533063530921869421774772491 0.566000553965568475867087272491 +0.0279054999351501450965962192186 0.633533063530921869421774772491 0.566000553965568475867087272491 +0.0279598504304885871196706403907 -0.00333704985678195953369140625 0.0413172006607055719573651231258 +0.0279598504304885871196706403907 0.00333704985678195953369140625 0.0413172006607055719573651231258 +0.0279680006206035614013671875 -0.02032000012695789337158203125 -0.49880349636077880859375 +0.0279680006206035614013671875 0.02032000012695789337158203125 -0.49880349636077880859375 +0.0279843986034393338302450615629 -0.39507520198822021484375 -0.0559683978557586683799662807814 +0.0279843986034393338302450615629 0.39507520198822021484375 -0.0559683978557586683799662807814 +0.027993500232696533203125 0 -0.24842774868011474609375 +0.0279973492026329047466237653907 -0.144996446371078474557592130623 0.0263089500367641448974609375 +0.0279973492026329047466237653907 0.144996446371078474557592130623 0.0263089500367641448974609375 +0.0280054986476898221114950615629 -0.0121189996600151068950612653907 -0.0952302992343902615646200615629 +0.0280054986476898221114950615629 0.0121189996600151068950612653907 -0.0952302992343902615646200615629 +0.0280362993478775052169638115629 -0.0350308507680892958213725307814 -0.0220635995268821730186381557814 +0.0280362993478775052169638115629 0.0350308507680892958213725307814 -0.0220635995268821730186381557814 +0.02804774977266788482666015625 -0.032936751842498779296875 0.24622850120067596435546875 +0.02804774977266788482666015625 0.032936751842498779296875 0.24622850120067596435546875 +0.0280703991651535048057475307814 -0.797533607482910245067841970013 -0.0561415970325470012336488423443 +0.0280703991651535048057475307814 0.797533607482910245067841970013 -0.0561415970325470012336488423443 +0.02810280025005340576171875 -0.118524903059005731753572376874 0.0875332474708557101150674384371 +0.02810280025005340576171875 0.118524903059005731753572376874 0.0875332474708557101150674384371 +0.0281136989593505880191681711722 -0.0285623013973236097862162807814 -0.02989675104618072509765625 +0.0281136989593505880191681711722 0.0285623013973236097862162807814 -0.02989675104618072509765625 +0.0281244486570358283306081403907 -0.00805014967918396030788219519536 -0.0405488491058349637130575615629 +0.0281244486570358283306081403907 0.00805014967918396030788219519536 -0.0405488491058349637130575615629 +0.02815259993076324462890625 -0.00406760014593601261501110144536 -0.0958691000938415582854901231258 +0.02815259993076324462890625 0.00406760014593601261501110144536 -0.0958691000938415582854901231258 +0.02820830047130584716796875 -0.0230439007282257080078125 0.03425300121307373046875 +0.02820830047130584716796875 0.0230439007282257080078125 0.03425300121307373046875 +0.0282112007029354551479460866403 -0.847152060270309426037727007497 -0.428996260464191425665347878748 +0.0282112007029354551479460866403 0.847152060270309426037727007497 -0.428996260464191425665347878748 +0.0282207012176513699630575615629 -0.0868530988693237415709802462516 -0.0407447010278701796104350307814 +0.0282207012176513699630575615629 0.0868530988693237415709802462516 -0.0407447010278701796104350307814 +0.0282898008823394796207306711722 -0.0391725510358810480315838731258 0.0128529503941535953176478201954 +0.0282898008823394796207306711722 0.0391725510358810480315838731258 0.0128529503941535953176478201954 +0.028320000506937503814697265625 -0.73611223697662353515625 0.1408432535827159881591796875 +0.028320000506937503814697265625 0.73611223697662353515625 0.1408432535827159881591796875 +0.0283270001411437995220143903907 -0.00411610007286071759996515240232 -0.0409956008195877102950888115629 +0.0283270001411437995220143903907 0.00411610007286071759996515240232 -0.0409956008195877102950888115629 +0.0283955000340938568115234375 -0.24776150286197662353515625 -0.01754949986934661865234375 +0.0283955000340938568115234375 0.24776150286197662353515625 -0.01754949986934661865234375 +0.0284188494086265557025949846093 -0.201714295148849503958032869377 -0.401252862811088573113948996252 +0.0284188494086265557025949846093 0.201714295148849503958032869377 -0.401252862811088573113948996252 +0.0284234493970870992496369211722 0 -0.0411352008581161512901225307814 +0.0284733016043901450420339216407 -0.37365974485874176025390625 0.249133953452110284976228626874 +0.0284733016043901450420339216407 0.37365974485874176025390625 0.249133953452110284976228626874 +0.0284907013177871717979350307814 -0.0328138500452041653732138115629 -0.024729199707508087158203125 +0.0284907013177871717979350307814 0.0328138500452041653732138115629 -0.024729199707508087158203125 +0.0285133987665176398540456403907 -0.0390100985765457208831463731258 -0.0128529503941535953176478201954 +0.0285133987665176398540456403907 0.0390100985765457208831463731258 -0.0128529503941535953176478201954 +0.028527200222015380859375 -0.0371742010116577134559712192186 -0.0883418023586273193359375 +0.028527200222015380859375 0.0371742010116577134559712192186 -0.0883418023586273193359375 +0.0285358011722564725021200615629 -0.0662837982177734430511151231258 0.0692255020141601534744424384371 +0.0285358011722564725021200615629 0.0662837982177734430511151231258 0.0692255020141601534744424384371 +0.02853900007903575897216796875 -0.5532802641391754150390625 -0.50553600490093231201171875 +0.02853900007903575897216796875 0.5532802641391754150390625 -0.50553600490093231201171875 +0.0286148011684417731548268903907 -0.172985398769378684313835492503 0.0962148010730743408203125 +0.0286148011684417731548268903907 0.172985398769378684313835492503 0.0962148010730743408203125 +0.0286305485293269143531880160936 -0.832512122392654374536391514994 -0.169128747284412378482088001874 +0.0286305485293269143531880160936 0.832512122392654374536391514994 -0.169128747284412378482088001874 +0.0286591485142707845523712961722 -0.088205851614475250244140625 0.440338951349258433953792746252 +0.0286591485142707845523712961722 0.088205851614475250244140625 0.440338951349258433953792746252 +0.0286624014377594021896200615629 -0.131323003768920892886384876874 0.148097002506256097964509876874 +0.0286624014377594021896200615629 0.131323003768920892886384876874 0.148097002506256097964509876874 +0.0286722008138895027851145158593 -0.849987906217575139855568977509 -0.29444579780101776123046875 +0.0286722008138895027851145158593 0.849987906217575139855568977509 -0.29444579780101776123046875 +0.0286900013685226461246369211722 -0.0619234979152679457237162807814 -0.0730913996696472140213174384371 +0.0286900013685226461246369211722 0.0619234979152679457237162807814 -0.0730913996696472140213174384371 +0.0286944992840290069580078125 -0.24791200459003448486328125 0.014706999994814395904541015625 +0.0286944992840290069580078125 0.24791200459003448486328125 0.014706999994814395904541015625 +0.0287170000374317169189453125 -0.3037979900836944580078125 0.95230400562286376953125 +0.0287170000374317169189453125 0.3037979900836944580078125 0.95230400562286376953125 +0.028718650341033935546875 -0.0132758006453514102590540701954 0.0387168496847152751594300923443 +0.028718650341033935546875 0.0132758006453514102590540701954 0.0387168496847152751594300923443 +0.0287322014570236226871369211722 -0.192387604713439963610710492503 0.0464911997318267836143412807814 +0.0287322014570236226871369211722 0.192387604713439963610710492503 0.0464911997318267836143412807814 +0.0287387996912002591232138115629 -0.0259627491235733046104350307814 0.03162305057048797607421875 +0.0287387996912002591232138115629 0.0259627491235733046104350307814 0.03162305057048797607421875 +0.0287784010171890265727956403907 -0.0885724008083343533614950615629 0.176993596553802506887720369377 +0.0287784010171890265727956403907 0.0885724008083343533614950615629 0.176993596553802506887720369377 +0.0287990003824234036544638115629 -0.0454257994890213054328675923443 0.0843037009239196860610476846887 +0.0287990003824234036544638115629 0.0454257994890213054328675923443 0.0843037009239196860610476846887 +0.0288196496665477745746652971093 -0.146827796101570123843416126874 -0.01053749956190586090087890625 +0.0288196496665477745746652971093 0.146827796101570123843416126874 -0.01053749956190586090087890625 +0.0288731999695301042030415317186 -0.474064815044403065069644753748 0.366645598411560025287059261245 +0.0288731999695301042030415317186 0.474064815044403065069644753748 0.366645598411560025287059261245 +0.0288863986730575582340119211722 -0.261396789550781272204460492503 0.301392388343811046258480246252 +0.0288863986730575582340119211722 0.261396789550781272204460492503 0.301392388343811046258480246252 +0.0289090007543563870529013115629 -0.184383594989776633532585492503 0.0718815982341766412933026231258 +0.0289090007543563870529013115629 0.184383594989776633532585492503 0.0718815982341766412933026231258 +0.028911049477756023406982421875 -0.45626127719879150390625 0.716581457853317282946647992503 +0.028911049477756023406982421875 0.45626127719879150390625 0.716581457853317282946647992503 +0.028954200446605682373046875 -0.146913903951644886358707253748 0.00882885027676820650921474253892 +0.028954200446605682373046875 0.146913903951644886358707253748 0.00882885027676820650921474253892 +0.0289707988500595113590119211722 -0.160602200031280534231470369377 -0.115618598461151134149105246252 +0.0289707988500595113590119211722 0.160602200031280534231470369377 -0.115618598461151134149105246252 +0.0289872005581855753109099538278 -0.168189597129821760690404630623 -0.575214600563049294201789507497 +0.0289872005581855753109099538278 0.168189597129821760690404630623 -0.575214600563049294201789507497 +0.0290096014738082906558869211722 -0.396175599098205599712940738755 0.0469399988651275634765625 +0.0290096014738082906558869211722 -0.0169601500034332296207306711722 -0.0370242506265640244911274692186 +0.0290096014738082906558869211722 0.0169601500034332296207306711722 -0.0370242506265640244911274692186 +0.0290096014738082906558869211722 0.396175599098205599712940738755 0.0469399988651275634765625 +0.0290111493319272981117329379686 -0.135353752970695490054353626874 -0.32146169245243072509765625 +0.0290111493319272981117329379686 0.135353752970695490054353626874 -0.32146169245243072509765625 +0.0290125995874404921104350307814 -0.0892925977706909290709802462516 0.034425199031829833984375 +0.0290125995874404921104350307814 0.0892925977706909290709802462516 0.034425199031829833984375 +0.0290340006351470919510049384371 -0.169274407625198353155582253748 -0.245973908901214594058259876874 +0.0290340006351470919510049384371 0.169274407625198353155582253748 -0.245973908901214594058259876874 +0.0290345005691051497032084682814 -0.378501737117767356188835492503 -0.397986605763435419280682481258 +0.0290345005691051497032084682814 0.378501737117767356188835492503 -0.397986605763435419280682481258 +0.0290443986654281630088725307814 -0.0760399997234344482421875 -0.0580889999866485637336488423443 +0.0290443986654281630088725307814 0.0760399997234344482421875 -0.0580889999866485637336488423443 +0.0290446996688842780376393903907 -0.03726685047149658203125 0.016358099877834320068359375 +0.0290446996688842780376393903907 0.03726685047149658203125 0.016358099877834320068359375 +0.0290791988372802734375 -0.798085594177246115954460492503 0.047052800655364990234375 +0.0290791988372802734375 0.798085594177246115954460492503 0.047052800655364990234375 +0.0290812492370605482627787807814 -0.0252101510763168348838725307814 -0.0319175004959106473068075615629 +0.0290812492370605482627787807814 0.0252101510763168348838725307814 -0.0319175004959106473068075615629 +0.0290917485952377347091513115629 -0.0401508003473281874229350307814 0.00644859969615936296644109759768 +0.0290917485952377347091513115629 0.0401508003473281874229350307814 0.00644859969615936296644109759768 +0.0291238009929657010177450615629 -0.0374857991933822617958149692186 -0.19428479671478271484375 +0.0291238009929657010177450615629 0.0374857991933822617958149692186 -0.19428479671478271484375 +0.0291643500328063985660431711722 0 0.0406132996082305963714276231258 +0.0291958987712860121299662807814 -0.0400751501321792644172425923443 -0.00644859969615936296644109759768 +0.0291958987712860121299662807814 0.0400751501321792644172425923443 -0.00644859969615936296644109759768 +0.0292711999267339685604216725778 -0.627478605508804299084602007497 0.308890393376350380627570757497 +0.0292711999267339685604216725778 0.627478605508804299084602007497 0.308890393376350380627570757497 +0.0293290503323078155517578125 -0.0578852981328964177887286268742 0.135237148404121404476896373126 +0.0293290503323078155517578125 0.0578852981328964177887286268742 0.135237148404121404476896373126 +0.0293370008468627901931924384371 -0.219613802433013899362279630623 0.557591986656188920434829014994 +0.0293370008468627901931924384371 0.219613802433013899362279630623 0.557591986656188920434829014994 +0.0293595999479293844058869211722 -0.386657190322875987664730246252 0.0981548011302948025802450615629 +0.0293595999479293844058869211722 0.386657190322875987664730246252 0.0981548011302948025802450615629 +0.0293893009424209608604350307814 -0.0404508501291275038291850307814 0 +0.0293893009424209608604350307814 0.0404508501291275038291850307814 0 +0.0294050998985767343685271413278 -0.2648499011993408203125 -0.137803503870964044741853626874 +0.0294050998985767343685271413278 0.2648499011993408203125 -0.137803503870964044741853626874 +0.0294117011129856088802458913278 -0.0905190531164407757858114678129 -0.844654345512390158923210492503 +0.0294117011129856088802458913278 0.0905190531164407757858114678129 -0.844654345512390158923210492503 +0.02943690121173858642578125 -0.0264149010181427001953125 0.0918461978435516357421875 +0.02943690121173858642578125 0.0264149010181427001953125 0.0918461978435516357421875 +0.0294592499732971198345143903907 -0.0282254487276077277446706403907 0.0289045989513397223735768903907 +0.0294592499732971198345143903907 0.0282254487276077277446706403907 0.0289045989513397223735768903907 +0.0294598996639251729801056711722 -0.0371746510267257704307475307814 -0.0158164501190185546875 +0.0294598996639251729801056711722 0.0371746510267257704307475307814 -0.0158164501190185546875 +0.0294607996940612799907643903907 -0.00665350034832954458779985529304 0.0398470997810363783409037807814 +0.0294607996940612799907643903907 0.00665350034832954458779985529304 0.0398470997810363783409037807814 +0.029465250670909881591796875 -0.0706366494297981234451455634371 -0.129004946351051336117521373126 +0.029465250670909881591796875 0.0706366494297981234451455634371 -0.129004946351051336117521373126 +0.02947025001049041748046875 -0.12410874664783477783203125 -0.21500824391841888427734375 +0.02947025001049041748046875 0.12410874664783477783203125 -0.21500824391841888427734375 +0.0294724501669406876991352817186 -0.1242662966251373291015625 -0.0786719977855682289780148153113 +0.0294724501669406876991352817186 0.1242662966251373291015625 -0.0786719977855682289780148153113 +0.0295469999313354506065287807814 -0.670799714326858587121193977509 0.599294704198837346886818977509 +0.0295469999313354506065287807814 0.670799714326858587121193977509 0.599294704198837346886818977509 +0.0295546989887952790687641879686 -0.0909611523151397649566973768742 0.336678642034530628546207253748 +0.0295546989887952790687641879686 0.0909611523151397649566973768742 0.336678642034530628546207253748 +0.0295747496187686899349333913278 -0.0910231500864028958419638115629 0.115499550104141229800447376874 +0.0295747496187686899349333913278 0.0910231500864028958419638115629 0.115499550104141229800447376874 +0.0296079993247985867599325615629 -0.0351153999567031874229350307814 0.0197553500533103956748881557814 +0.0296079993247985867599325615629 0.0351153999567031874229350307814 0.0197553500533103956748881557814 +0.02966479957103729248046875 -0.0912980973720550620376101846887 -0.028011798858642578125 +0.02966479957103729248046875 0.0912980973720550620376101846887 -0.028011798858642578125 +0.0296681001782417262668811730464 -0.362575513124465897973891514994 -0.598045688867568925317641514994 +0.0296681001782417262668811730464 0.362575513124465897973891514994 -0.598045688867568925317641514994 +0.02969600073993206024169921875 -0.89173901081085205078125 -0.4515750110149383544921875 +0.02969600073993206024169921875 0.89173901081085205078125 -0.4515750110149383544921875 +0.0297329485416412374332306711722 -0.0297444999217987074424662807814 -0.0270410507917404202560263115629 +0.0297329485416412374332306711722 0.0297444999217987074424662807814 -0.0270410507917404202560263115629 +0.02973824925720691680908203125 -0.7108657658100128173828125 0.2372467517852783203125 +0.02973824925720691680908203125 0.7108657658100128173828125 0.2372467517852783203125 +0.0297513991594314589073100307814 -0.195770204067230224609375 -0.0280864000320434591129181711722 +0.0297513991594314589073100307814 0.195770204067230224609375 -0.0280864000320434591129181711722 +0.02977775037288665771484375 -0.19816124439239501953125 0.14948375523090362548828125 +0.02977775037288665771484375 0.19816124439239501953125 0.14948375523090362548828125 +0.0297805011272430433799662807814 -0.00665659978985786490029985529304 0.0952302992343902615646200615629 +0.0297805011272430433799662807814 0.00665659978985786490029985529304 0.0952302992343902615646200615629 +0.0298042505979537984683869211722 -0.016617000102996826171875 0.03654564917087554931640625 +0.0298042505979537984683869211722 0.016617000102996826171875 0.03654564917087554931640625 +0.0298192508518695838237722028907 -0.4123089015483856201171875 -0.177798606455326080322265625 +0.0298192508518695838237722028907 0.4123089015483856201171875 -0.177798606455326080322265625 +0.0298247991129755966877024064843 -0.847379457950591996606704014994 -0.0596504468470811857749858120314 +0.0298247991129755966877024064843 0.847379457950591996606704014994 -0.0596504468470811857749858120314 +0.0298396009951829889461638600778 -0.0918393015861511119446447537484 0.693307298421859674597556022491 +0.0298396009951829889461638600778 0.0918393015861511119446447537484 0.693307298421859674597556022491 +0.0298597007989883436729350307814 -0.0216940999031066915347931711722 -0.0337307512760162339637837192186 +0.0298597007989883436729350307814 0.0216940999031066915347931711722 -0.0337307512760162339637837192186 +0.02991054952144622802734375 -0.03283084928989410400390625 0.0229672506451606764366069057814 +0.02991054952144622802734375 0.03283084928989410400390625 0.0229672506451606764366069057814 +0.02993009984493255615234375 -0.124066051840782162751786188437 0.0788149505853652926345986884371 +0.02993009984493255615234375 0.124066051840782162751786188437 0.0788149505853652926345986884371 +0.0299596488475799560546875 -0.0135310992598533640779434605861 -0.0376740008592605646331463731258 +0.0299596488475799560546875 0.0135310992598533640779434605861 -0.0376740008592605646331463731258 +0.0299795001745224026779013115629 -0.0708965003490448081313601846887 0.0638351023197174100021200615629 +0.0299795001745224026779013115629 0.0708965003490448081313601846887 0.0638351023197174100021200615629 +0.0300139993429183980777619211722 -0.251322793960571277960269753748 -0.309735202789306662829460492503 +0.0300139993429183980777619211722 0.251322793960571277960269753748 -0.309735202789306662829460492503 +0.0300261497497558600688893903907 -0.0303411006927490241313893903907 0.0260354995727539069438893903907 +0.0300261497497558600688893903907 0.0303411006927490241313893903907 0.0260354995727539069438893903907 +0.0300323009490966810752787807814 -0.0924305021762847900390625 0.0235514998435974141910431711722 +0.0300323009490966810752787807814 0.0924305021762847900390625 0.0235514998435974141910431711722 +0.0300920009613037109375 -0.346347188949584994244190738755 0.197833597660064697265625 +0.0300920009613037109375 0.346347188949584994244190738755 0.197833597660064697265625 +0.03014700114727020263671875 -0.0386287510395050062705912807814 0.00994869992136955365313877308608 +0.03014700114727020263671875 0.0386287510395050062705912807814 0.00994869992136955365313877308608 +0.0302080005407333387901225307814 -0.785186386108398526317841970013 0.150232803821563731805355246252 +0.0302080005407333387901225307814 0.785186386108398526317841970013 0.150232803821563731805355246252 +0.0302150011062622091129181711722 -0.196296596527099631579460492503 0.0235515996813774122764506557814 +0.0302150011062622091129181711722 0.196296596527099631579460492503 0.0235515996813774122764506557814 +0.03025265038013458251953125 -0.0351451992988586411903462192186 -0.0186973497271537801578400461722 +0.03025265038013458251953125 0.0351451992988586411903462192186 -0.0186973497271537801578400461722 +0.0302651008591055849239470632028 -0.897209456562995888440070757497 -0.310803897678852081298828125 +0.0302651008591055849239470632028 0.897209456562995888440070757497 -0.310803897678852081298828125 +0.0302703000605106346820871721093 -0.0343344010412693009803852817186 -0.1428456008434295654296875 +0.0302703000605106346820871721093 0.0343344010412693009803852817186 -0.1428456008434295654296875 +0.0303146984428167357017436245314 -0.881483423709869429174545985006 -0.179077497124671941586271373126 +0.0303146984428167357017436245314 0.881483423709869429174545985006 -0.179077497124671941586271373126 +0.0303726494312286376953125 -0.0385919511318206787109375 -0.00938955023884773323783470289072 +0.0303726494312286376953125 0.0385919511318206787109375 -0.00938955023884773323783470289072 +0.0304416000843048123458700615629 -0.590165615081787109375 -0.539238405227661199425881477509 +0.0304416000843048123458700615629 0.590165615081787109375 -0.539238405227661199425881477509 +0.0304549500346183756038787038278 -0.1336504518985748291015625 -0.0609100520610809312294087192186 +0.0304549500346183756038787038278 0.1336504518985748291015625 -0.0609100520610809312294087192186 +0.0305338004603981985618510464064 -0.330822789669036887438835492503 0.438319736719131491931022992503 +0.0305338004603981985618510464064 0.330822789669036887438835492503 0.438319736719131491931022992503 +0.0305339992046356201171875 -0.369721198081970237048210492503 0.149579203128814702816740123126 +0.0305339992046356201171875 0.369721198081970237048210492503 0.149579203128814702816740123126 +0.0305507987737655660465119211722 -0.326491189002990733758480246252 -0.229064011573791526110710492503 +0.0305507987737655660465119211722 0.326491189002990733758480246252 -0.229064011573791526110710492503 +0.0305518493056297323062775461722 -0.432534152269363425524772992503 -0.120335845649242406674161998126 +0.0305518493056297323062775461722 0.432534152269363425524772992503 -0.120335845649242406674161998126 +0.0305775001645088168045205634371 -0.0297577500343322726150674384371 0.143803650140762323550447376874 +0.0305775001645088168045205634371 0.0297577500343322726150674384371 0.143803650140762323550447376874 +0.0305952012538909939864950615629 -0.0941617012023925892272302462516 -0.0140535995364189161827006557814 +0.0305952012538909939864950615629 0.0941617012023925892272302462516 -0.0140535995364189161827006557814 +0.03060599975287914276123046875 -0.427666485309600830078125 -0.257225513458251953125 +0.03060599975287914276123046875 0.427666485309600830078125 -0.257225513458251953125 +0.03061169944703578948974609375 -0.4831001758575439453125 0.758733308315277077404914507497 +0.03061169944703578948974609375 0.4831001758575439453125 0.758733308315277077404914507497 +0.0306329995393753058696706403907 -0.0197066500782966634586212961722 0.03425300121307373046875 +0.0306329995393753058696706403907 0.0197066500782966634586212961722 0.03425300121307373046875 +0.0306594014167785658409037807814 -0.0305207014083862318565287807814 -0.0901580989360809409438601846887 +0.0306594014167785658409037807814 0.0305207014083862318565287807814 -0.0901580989360809409438601846887 +0.0306732993572950349281391879686 -0.169997455179691309146150501874 0.3044009506702423095703125 +0.0306732993572950349281391879686 0.169997455179691309146150501874 0.3044009506702423095703125 +0.0306863993406295797183869211722 -0.0944432973861694391448651231258 0.0117818996310234073293665701954 +0.0306863993406295797183869211722 0.0944432973861694391448651231258 0.0117818996310234073293665701954 +0.0307179987430572509765625 -0.0392949491739273126800213731258 0.00350884981453418757710305264652 +0.0307179987430572509765625 0.0392949491739273126800213731258 0.00350884981453418757710305264652 +0.0307377010583877591232138115629 -0.0100592501461505903770365932814 -0.03813140094280242919921875 +0.0307377010583877591232138115629 0.0100592501461505903770365932814 -0.03813140094280242919921875 +0.0307482004165649386306924384371 -0.280814391374588023797542746252 -0.10098449885845184326171875 +0.0307482004165649386306924384371 0.280814391374588023797542746252 -0.10098449885845184326171875 +0.0307618498802185065532643903907 -0.0033354498445987701416015625 0.0392756998538970961143412807814 +0.0307618498802185065532643903907 0.0033354498445987701416015625 0.0392756998538970961143412807814 +0.0307648006826639203170614678129 -0.0223520001396536847904084055472 -0.548683845996856711657585492503 +0.0307648006826639203170614678129 0.0223520001396536847904084055472 -0.548683845996856711657585492503 +0.03078015148639678955078125 -0.00992894992232322762260032789072 0.0381313502788543715049662807814 +0.03078015148639678955078125 0.00992894992232322762260032789072 0.0381313502788543715049662807814 +0.0307893514633178731754181711722 -0.0392857491970062255859375 -0.0029408000409603118896484375 +0.0307893514633178731754181711722 0.0392857491970062255859375 -0.0029408000409603118896484375 +0.0307911992073059102847931711722 -0.121494400501251223478682561563 -0.155855798721313498766960492503 +0.0307911992073059102847931711722 0.121494400501251223478682561563 -0.155855798721313498766960492503 +0.0308012485504150397563893903907 -0.0264564514160156270816681711722 -0.0291777491569519056846537807814 +0.0308012485504150397563893903907 0.0264564514160156270816681711722 -0.0291777491569519056846537807814 +0.0308050006628036512901225307814 -0.0330440014600753770301899692186 -0.0214276999235153212119975307814 +0.0308050006628036512901225307814 0.0330440014600753770301899692186 -0.0214276999235153212119975307814 +0.030861198902130126953125 -0.0552411973476409912109375 -0.0774338006973266657073651231258 +0.030861198902130126953125 0.0552411973476409912109375 -0.0774338006973266657073651231258 +0.03086329996585845947265625 -0.0519254028797149699836488423443 0.0796944975852966336349325615629 +0.03086329996585845947265625 0.0519254028797149699836488423443 0.0796944975852966336349325615629 +0.0308875512331724180747904995314 -0.192208506166934967041015625 0.405711445212364185675113503748 +0.0308875512331724180747904995314 0.192208506166934967041015625 0.405711445212364185675113503748 +0.03089664876461029052734375 -0.847965943813323907995993522491 0.0499936006963253021240234375 +0.03089664876461029052734375 0.847965943813323907995993522491 0.0499936006963253021240234375 +0.0309017002582550048828125 -0.0951056003570556751647302462516 0 +0.0309017002582550048828125 0.0951056003570556751647302462516 0 +0.0309152998030185685585102817186 0 0.146779650449752802066072376874 +0.0309948503971099881271200615629 -0.0368855506181716905067524692186 0.0133706495165824904014506557814 +0.0309948503971099881271200615629 0.0368855506181716905067524692186 0.0133706495165824904014506557814 +0.0309970509260892833347522667964 -0.245806756615638721807926003748 0.247221091389656061343416126874 +0.0309970509260892833347522667964 0.245806756615638721807926003748 0.247221091389656061343416126874 +0.0310234993696212775493581403907 -0.0184256494045257589176056711722 -0.03461270034313201904296875 +0.0310234993696212775493581403907 0.0184256494045257589176056711722 -0.03461270034313201904296875 +0.0310371488332748420024831403907 -0.00613990016281604818887407404304 -0.0387168496847152751594300923443 +0.0310371488332748420024831403907 0.00613990016281604818887407404304 -0.0387168496847152751594300923443 +0.0310667991638183607627787807814 -0.05253159999847412109375 0.19046080112457275390625 +0.0310667991638183607627787807814 0.05253159999847412109375 0.19046080112457275390625 +0.0311134502291679389263112653907 0 0.448923146724700961041065738755 +0.0311418011784553548648712961722 -0.0958437032997608157058877509371 -0.894339895248413063733039507497 +0.0311418011784553548648712961722 0.0958437032997608157058877509371 -0.894339895248413063733039507497 +0.0311471991240978261783478586722 -0.095858998596668243408203125 -0.438566842675209067614616742503 +0.0311471991240978261783478586722 0.095858998596668243408203125 -0.438566842675209067614616742503 +0.0311600007116794586181640625 -0.095902502536773681640625 0.228761255741119384765625 +0.0311600007116794586181640625 0.095902502536773681640625 0.228761255741119384765625 +0.0311884999275207491775674384371 -0.708066365122795082776008257497 0.632588854432105995861945757497 +0.0311884999275207491775674384371 0.708066365122795082776008257497 0.632588854432105995861945757497 +0.0312073498964309699321706403907 -0.03078185021877288818359375 -0.0240536496043205275108256557814 +0.0312073498964309699321706403907 0.03078185021877288818359375 -0.0240536496043205275108256557814 +0.0312130987644195570518412807814 -0.0827143013477325550475427462516 -0.0467343002557754558234925923443 +0.0312130987644195570518412807814 0.0827143013477325550475427462516 -0.0467343002557754558234925923443 +0.0312326990067958824848215471093 -0.224829304218292225225894753748 0.196154093742370611019865123126 +0.0312326990067958824848215471093 0.224829304218292225225894753748 0.196154093742370611019865123126 +0.0312617987394332927375550923443 -0.0227129504084587104106862653907 0.0317304998636245769172425923443 +0.0312617987394332927375550923443 0.0227129504084587104106862653907 0.0317304998636245769172425923443 +0.0312658488750457777549662807814 -0.00206505004316568383307406442384 -0.03896389901638031005859375 +0.0312658488750457777549662807814 0.00206505004316568383307406442384 -0.03896389901638031005859375 +0.0312792999669909491111674526564 -0.513570216298103399132912727509 0.397199398279190096783253238755 +0.0312792999669909491111674526564 0.513570216298103399132912727509 0.397199398279190096783253238755 +0.03128699958324432373046875 -0.197537600994110107421875 0 +0.03128699958324432373046875 -0.0749383985996246310135049384371 0.0583554983139038113693075615629 +0.03128699958324432373046875 0.0749383985996246310135049384371 0.0583554983139038113693075615629 +0.03128699958324432373046875 0.197537600994110107421875 0 +0.0313202999532222747802734375 -0.2917107045650482177734375 -0.0626408994197845403473223768742 +0.0313202999532222747802734375 0.2917107045650482177734375 -0.0626408994197845403473223768742 +0.031361999921500682830810546875 -0.67229850590229034423828125 0.330953992903232574462890625 +0.031361999921500682830810546875 0.67229850590229034423828125 0.330953992903232574462890625 +0.03137814998626708984375 -0.0369441986083984402755575615629 -0.0122693501412868503225306326954 +0.03137814998626708984375 0.0369441986083984402755575615629 -0.0122693501412868503225306326954 +0.0313836008310318034797425923443 -0.398766803741455122533920985006 0 +0.0313836008310318034797425923443 0.398766803741455122533920985006 0 +0.031401000916957855224609375 -0.0966408044099807683746661268742 -0.282266700267791714740184261245 +0.031401000916957855224609375 0.0966410994529724037827023153113 -0.282266700267791714740184261245 +0.0314028006047010407875141879686 -0.182205396890640275442407869377 -0.623149150609970114977897992503 +0.0314028006047010407875141879686 0.182205396890640275442407869377 -0.623149150609970114977897992503 +0.0314207486808300018310546875 -0.06379400193691253662109375 -0.2396727502346038818359375 +0.0314207486808300018310546875 0.06379400193691253662109375 -0.2396727502346038818359375 +0.0314375996589660658409037807814 -0.0967563003301620400131710653113 0.2822231948375701904296875 +0.0314375996589660658409037807814 0.0967563003301620400131710653113 0.2822231948375701904296875 +0.0314568012952804593185263115629 -0.0325527012348175090461488423443 0.0891672015190124594985476846887 +0.0314568012952804593185263115629 0.0325527012348175090461488423443 0.0891672015190124594985476846887 +0.0314824484288692488243022182814 -0.44445960223674774169921875 -0.0629644475877284975906533759371 +0.0314824484288692488243022182814 0.44445960223674774169921875 -0.0629644475877284975906533759371 +0.0315131999552249880691690009371 -0.0969857990741729708572549384371 -0.110003095865249631013504938437 +0.0315131999552249880691690009371 0.0969857990741729708572549384371 -0.110003095865249631013504938437 +0.0315351001918315887451171875 -0.128976899385452259405582253748 0.069788999855518341064453125 +0.0315351001918315887451171875 0.128976899385452259405582253748 0.069788999855518341064453125 +0.03157649934291839599609375 -0.224126994609832763671875 -0.4458365142345428466796875 +0.03157649934291839599609375 0.224126994609832763671875 -0.4458365142345428466796875 +0.0315791990607976955085511860943 -0.897225308418273970190170985006 -0.0631592966616153772552166856258 +0.0315791990607976955085511860943 0.897225308418273970190170985006 -0.0631592966616153772552166856258 +0.0316228985786438029914613423443 -0.0707100987434387262542401231258 -0.0632461011409759521484375 +0.0316228985786438029914613423443 0.0707100987434387262542401231258 -0.0632461011409759521484375 +0.0316370017826557159423828125 -0.4151774942874908447265625 0.2768155038356781005859375 +0.0316370017826557159423828125 0.4151774942874908447265625 0.2768155038356781005859375 +0.0316556513309478801398988423443 -0.0348517507314681992958149692186 0.016830749809741973876953125 +0.0316556513309478801398988423443 0.0348517507314681992958149692186 0.016830749809741973876953125 +0.0316675007343292236328125 -0.151434004306793212890625 0.19637949764728546142578125 +0.0316675007343292236328125 0.151434004306793212890625 0.19637949764728546142578125 +0.0316718012094497694541850307814 -0.0255600988864898709396200615629 0.029044449329376220703125 +0.0316718012094497694541850307814 0.0255600988864898709396200615629 0.029044449329376220703125 +0.0316740006208419758171324076557 -0.412910985946655262335269753748 -0.434167206287384033203125 +0.0316740006208419758171324076557 0.412910985946655262335269753748 -0.434167206287384033203125 +0.0316750496625900282432475307814 -0.0230130001902580268169362653907 -0.0310981005430221585372763115629 +0.0316750496625900282432475307814 0.0230130001902580268169362653907 -0.0310981005430221585372763115629 +0.0317058011889457674881143134371 -0.0230356000363826744770090471093 0.347798848152160611224559261245 +0.0317058011889457674881143134371 0.0230356000363826744770090471093 0.347798848152160611224559261245 +0.0317207992076873820930238423443 -0.758256816864013694079460492503 0.253063201904296875 +0.0317207992076873820930238423443 0.758256816864013694079460492503 0.253063201904296875 +0.0317208502441644682456889370314 -0.0515938512980937957763671875 -0.34471990168094635009765625 +0.0317208502441644682456889370314 0.0515938512980937957763671875 -0.34471990168094635009765625 +0.0317479997873306302169638115629 -0.140795600414276134149105246252 0.138451004028320306948884876874 +0.0317479997873306302169638115629 0.140795600414276134149105246252 0.138451004028320306948884876874 +0.0317817509174346951583700615629 -0.237914952635765092336939119377 0.604057985544204756322983485006 +0.0317817509174346951583700615629 0.237914952635765092336939119377 0.604057985544204756322983485006 +0.0317872501909732818603515625 -0.38847376406192779541015625 -0.64076323807239532470703125 +0.0317872501909732818603515625 0.38847376406192779541015625 -0.64076323807239532470703125 +0.03179790079593658447265625 -0.117883953452110279425113503748 -0.0871334999799728421310263115629 +0.03179790079593658447265625 0.117883953452110279425113503748 -0.0871334999799728421310263115629 +0.0318078003823757185508647182814 -0.137256449460983281918302623126 0.05146770179271697998046875 +0.0318078003823757185508647182814 0.137256449460983281918302623126 0.05146770179271697998046875 +0.03184349834918975830078125 -0.09800650179386138916015625 0.489265501499176025390625 +0.03184349834918975830078125 0.09800650179386138916015625 0.489265501499176025390625 +0.0318573504686355604698100307814 -0.0378967493772506755500550923443 0.00699604973196983354749578509768 +0.0318573504686355604698100307814 0.0378967493772506755500550923443 0.00699604973196983354749578509768 +0.0318580009043216705322265625 -0.944431006908416748046875 -0.3271619975566864013671875 +0.0318580009043216705322265625 0.944431006908416748046875 -0.3271619975566864013671875 +0.0318583510816097259521484375 -0.0599644482135772705078125 -0.133750954270362848452791126874 +0.0318583510816097259521484375 0.0599644482135772705078125 -0.133750954270362848452791126874 +0.0319025993347167996505575615629 0 0.0384996503591537517219300923443 +0.03190974891185760498046875 -0.0131431996822357188142715855861 0.0361804485321044963508363423443 +0.03190974891185760498046875 0.0131431996822357188142715855861 0.0361804485321044963508363423443 +0.03195939958095550537109375 -0.151585996150970458984375 -0.126492202281951904296875 +0.03195939958095550537109375 0.151585996150970458984375 -0.126492202281951904296875 +0.031971001066267490386962890625 -0.0983992516994476318359375 0.74282924830913543701171875 +0.031971001066267490386962890625 0.0983992516994476318359375 0.74282924830913543701171875 +0.0319716006517410250564736884371 -0.0984001457691192626953125 0.108605852723121634739733565311 +0.0319716006517410250564736884371 0.0984001457691192626953125 0.108605852723121634739733565311 +0.0319866009056568104118589701557 -0.217587894201278692074552623126 -0.204039895534515375308259876874 +0.0319866009056568104118589701557 0.217587894201278692074552623126 -0.204039895534515375308259876874 +0.0319938004016876234580912807814 -0.0131975993514060977590540701954 0.196982800960540771484375 +0.0319938004016876234580912807814 0.0131975993514060977590540701954 0.196982800960540771484375 +0.0319988483563065501114053290621 -0.930454725027084261768095529987 -0.189026246964931476934879128748 +0.0319988483563065501114053290621 0.930454725027084261768095529987 -0.189026246964931476934879128748 +0.0320282012224197415450888115629 -0.0150627002120018015779434605861 -0.0353172510862350477744975307814 +0.0320282012224197415450888115629 0.0150627002120018015779434605861 -0.0353172510862350477744975307814 +0.0320420503616333021690287807814 -0.0379325509071350153167401231258 -0.0058674998581409454345703125 +0.0320420503616333021690287807814 0.0379325509071350153167401231258 -0.0058674998581409454345703125 +0.03205139935016632080078125 -0.0723173975944519098479901231258 -0.183692395687103271484375 +0.03205139935016632080078125 0.0723173975944519098479901231258 -0.183692395687103271484375 +0.0320815503597259507606587192186 -0.0326747506856918321083149692186 0.020078249275684356689453125 +0.0320815503597259507606587192186 0.0326747506856918321083149692186 0.020078249275684356689453125 +0.0320818006992340115646200615629 -0.0132790997624397284770925153907 0.0937785983085632351974325615629 +0.0320818006992340115646200615629 0.0132790997624397284770925153907 0.0937785983085632351974325615629 +0.0320883512496948214431924384371 -0.270399504899978604388621761245 -0.219896242022514315506143134371 +0.0320883512496948214431924384371 0.270399504899978604388621761245 -0.219896242022514315506143134371 +0.0320960005745291668266538920307 -0.834260535240173295434829014994 0.159622354060411447695955189374 +0.0320960005745291668266538920307 0.834260535240173295434829014994 0.159622354060411447695955189374 +0.032188050448894500732421875 -0.0666690006852149880112179403113 0.1304575502872467041015625 +0.032188050448894500732421875 0.0666690006852149880112179403113 0.1304575502872467041015625 +0.0321913987398147610763388115629 -0.00666275024414062552041704279304 0.0376738488674163846114950615629 +0.0321913987398147610763388115629 0.00666275024414062552041704279304 0.0376738488674163846114950615629 +0.0322109997272491468955912807814 -0.0859847009181976401626101846887 0.0396117001771926907638388115629 +0.0322109997272491468955912807814 0.0859847009181976401626101846887 0.0396117001771926907638388115629 +0.0322723001241683946083149692186 -0.0350309491157531766036825615629 -0.0152095496654510511924662807814 +0.0322723001241683946083149692186 0.0350309491157531766036825615629 -0.0152095496654510511924662807814 +0.03228925168514251708984375 -0.2109767496585845947265625 -0.13017775118350982666015625 +0.03228925168514251708984375 0.2109767496585845947265625 -0.13017775118350982666015625 +0.0322950989007949815223774692186 -0.0277368485927581807926056711722 0.0262239009141922024825888115629 +0.0322950989007949815223774692186 0.0277368485927581807926056711722 0.0262239009141922024825888115629 +0.0322966009378433255294638115629 -0.0302869498729705817485768903907 0.0232299506664276136924662807814 +0.0322966009378433255294638115629 0.0302869498729705817485768903907 0.0232299506664276136924662807814 +0.032312349416315555572509765625 -0.50993907451629638671875 0.800885158777236871863181022491 +0.032312349416315555572509765625 0.50993907451629638671875 0.800885158777236871863181022491 +0.0323442000895738587806782504686 -0.6270509660243988037109375 -0.572940805554389975817741742503 +0.0323442000895738587806782504686 0.6270509660243988037109375 -0.572940805554389975817741742503 +0.0323796987533569377570863423443 -0.0275926500558853170230744211722 -0.0262716501951217665244975307814 +0.0323796987533569377570863423443 0.0275926500558853170230744211722 -0.0262716501951217665244975307814 +0.0324724495410919217208700615629 -0.0380202502012252849250550923443 0 +0.0324724495410919217208700615629 0.0380202502012252849250550923443 0 +0.0324726998805999755859375 -0.0786430001258850153167401231258 0.0525433003902435330489950615629 +0.0324726998805999755859375 0.0786430001258850153167401231258 0.0525433003902435330489950615629 +0.0324912011623382582237162807814 -0.0999989986419677762130575615629 0.170130801200866710320980246252 +0.0324912011623382582237162807814 0.0999989986419677762130575615629 0.170130801200866710320980246252 +0.0324971985071897534469442803129 -0.294071388244628917352230246252 0.339066436886787447857471988755 +0.0324971985071897534469442803129 0.294071388244628917352230246252 0.339066436886787447857471988755 +0.0325055994093418135215678432814 -0.293558996915817271844417746252 0.0525968983769416822959819057814 +0.0325055994093418135215678432814 0.293558996915817271844417746252 0.0525968983769416822959819057814 +0.03256849944591522216796875 -0.0571135997772216838508363423443 0.0753480970859527615646200615629 +0.03256849944591522216796875 0.0571135997772216838508363423443 0.0753480970859527615646200615629 +0.0326319009065628093391175923443 -0.0237082004547119161441681711722 -0.0915045022964477566818075615629 +0.0326319009065628093391175923443 0.0237082004547119161441681711722 -0.0915045022964477566818075615629 +0.0326358016580343274215536553129 -0.445697548985481251104801003748 0.0528074987232685089111328125 +0.0326358016580343274215536553129 0.445697548985481251104801003748 0.0528074987232685089111328125 +0.0326945006847381633430238423443 -0.0485202014446258558799662807814 -0.0810977995395660428146200615629 +0.0326945006847381633430238423443 0.0485202014446258558799662807814 -0.0810977995395660428146200615629 +0.0327140986919403076171875 -0.897846293449401922082131477509 0.052934400737285614013671875 +0.0327140986919403076171875 0.897846293449401922082131477509 0.052934400737285614013671875 +0.0327223509550094576736611884371 -0.140269348025321954898103626874 -0.0418779015541076646278462192186 +0.0327223509550094576736611884371 0.140269348025321954898103626874 -0.0418779015541076646278462192186 +0.0327969007194042205810546875 -0.165734392404556257760717130623 0.247904098033905007092414507497 +0.0327969007194042205810546875 0.165734392404556257760717130623 0.247904098033905007092414507497 +0.0327996999025344862510600307814 -0.0785709977149963434417401231258 -0.0524479985237121595909037807814 +0.0327996999025344862510600307814 0.0785709977149963434417401231258 -0.0524479985237121595909037807814 +0.0328002989292144817023988423443 -0.0362648993730545071700888115629 0.0104400999844074249267578125 +0.0328002989292144817023988423443 0.0362648993730545071700888115629 0.0104400999844074249267578125 +0.0328299999237060546875 -0.745333015918731689453125 0.665883004665374755859375 +0.0328299999237060546875 0.745333015918731689453125 0.665883004665374755859375 +0.0328425496816635159591513115629 -0.0162763997912406914447824846093 0.03400655090808868408203125 +0.0328425496816635159591513115629 0.0162763997912406914447824846093 0.03400655090808868408203125 +0.032852999866008758544921875 -0.2077022492885589599609375 0.13520525395870208740234375 +0.032852999866008758544921875 0.2077022492885589599609375 0.13520525395870208740234375 +0.0328687995672225993781800923443 -0.0116225503385066989553431326954 -0.0358407497406005859375 +0.0328687995672225993781800923443 0.0116225503385066989553431326954 -0.0358407497406005859375 +0.0328719012439250904411558451557 -0.101168353483080855625964034061 -0.944025444984435968542868522491 +0.0328719012439250904411558451557 0.101168353483080855625964034061 -0.944025444984435968542868522491 +0.0329093009233474773078675923443 -0.0879342019557952936370526231258 -0.0344173997640609755088725307814 +0.0329093009233474773078675923443 0.0879342019557952936370526231258 -0.0344173997640609755088725307814 +0.03294169902801513671875 -0.0330440491437912001182475307814 -0.0179703995585441603233256557814 +0.03294169902801513671875 0.0330440491437912001182475307814 -0.0179703995585441603233256557814 +0.0329631000757217434982138115629 -0.0198671996593475369552450615629 -0.0319175004959106473068075615629 +0.0329631000757217434982138115629 0.0198671996593475369552450615629 -0.0319175004959106473068075615629 +0.0329695008695125579833984375 -0.167401492595672607421875 -0.1827284991741180419921875 +0.0329695008695125579833984375 0.167401492595672607421875 -0.1827284991741180419921875 +0.0329916000366210909744424384371 -0.269039404392242442742855246252 0.128566199541091913394197376874 +0.0329916000366210909744424384371 0.269039404392242442742855246252 0.128566199541091913394197376874 +0.0330295499414205578903036553129 -0.434989339113235506939503238755 0.110424151271581658106946122189 +0.0330295499414205578903036553129 0.434989339113235506939503238755 0.110424151271581658106946122189 +0.0331071004271507249305805942186 -0.283859091997146595343082253748 0.0912572979927062932770098768742 +0.0331071004271507249305805942186 0.283859091997146595343082253748 0.0912572979927062932770098768742 +0.033132500946521759033203125 -0.458121001720428466796875 -0.19755400717258453369140625 +0.033132500946521759033203125 0.458121001720428466796875 -0.19755400717258453369140625 +0.0331413507461547837684712192186 -0.0363978505134582505653462192186 -0.00876614972949027980442249230464 +0.0331413507461547837684712192186 0.0363978505134582505653462192186 -0.00876614972949027980442249230464 +0.0331555992364883436729350307814 -0.154690003395080571957365123126 -0.36738479137420654296875 +0.0331555992364883436729350307814 0.154690003395080571957365123126 -0.36738479137420654296875 +0.0331613995134830488731303432814 -0.0240928508341312387630583913278 -0.144290846586227400338842130623 +0.0331613995134830488731303432814 0.0240928508341312387630583913278 -0.144290846586227400338842130623 +0.0333000004291534451583700615629 -0.0159610003232955946494975307814 -0.0929319977760315052428552462516 +0.0333000004291534451583700615629 0.0159610003232955946494975307814 -0.0929319977760315052428552462516 +0.0333057999610900865028462192186 -0.173944199085235617907585492503 -0.0929199993610382163344851846887 +0.0333057999610900865028462192186 0.173944199085235617907585492503 -0.0929199993610382163344851846887 +0.0333096005022525745720152201557 -0.360897588729858387335269753748 0.478166985511779774054019753748 +0.0333096005022525745720152201557 0.360897588729858387335269753748 0.478166985511779774054019753748 +0.033314250409603118896484375 -0.04910250008106231689453125 0.2428559958934783935546875 +0.033314250409603118896484375 0.04910250008106231689453125 0.2428559958934783935546875 +0.0333335990086197839210591098436 -0.947071158885955721729033029987 -0.0666681464761495617965536553129 +0.0333335990086197839210591098436 0.947071158885955721729033029987 -0.0666681464761495617965536553129 +0.03333880007266998291015625 -0.0242217496037483229209819057814 -0.0283166497945785550216513115629 +0.03333880007266998291015625 0.0242217496037483229209819057814 -0.0283166497945785550216513115629 +0.03334780037403106689453125 -0.0242283999919891378238556711722 -0.195706200599670421258480246252 +0.03334780037403106689453125 0.0242283999919891378238556711722 -0.195706200599670421258480246252 +0.0334074005484580952018980326557 -0.141929697990417463815404630623 0.0352123506367206587364115932814 +0.0334074005484580952018980326557 0.141929697990417463815404630623 0.0352123506367206587364115932814 +0.0334118992090225233604350307814 -0.0896799981594085804381677462516 0.0290022999048233053043244211722 +0.0334118992090225233604350307814 0.0896799981594085804381677462516 0.0290022999048233053043244211722 +0.0334230989217758206466513115629 -0.00991680026054382428302158558608 0.0358406513929367051551899692186 +0.0334230989217758206466513115629 0.00991680026054382428302158558608 0.0358406513929367051551899692186 +0.03343839943408966064453125 -0.00333020016551017778577703509768 0.0370240986347198514083700615629 +0.03343839943408966064453125 0.00333020016551017778577703509768 0.0370240986347198514083700615629 +0.0334490001201629624794087192186 -0.0308836013078689596011994211722 -0.020672850310802459716796875 +0.0334490001201629624794087192186 0.0308836013078689596011994211722 -0.020672850310802459716796875 +0.0334527999162673936317524692186 -0.717118406295776389391960492503 0.353017592430114768298210492503 +0.0334527999162673936317524692186 0.717118406295776389391960492503 0.353017592430114768298210492503 +0.033481501042842864990234375 -0.0243254989385604837581755788278 -0.297131699323654185906917746252 +0.033481501042842864990234375 0.0243254989385604837581755788278 -0.297131699323654185906917746252 +0.0334884010255336733719033759371 -0.0120856504887342456472376639454 -0.1457135975360870361328125 +0.0334884010255336733719033759371 0.0120856504887342456472376639454 -0.1457135975360870361328125 +0.0335314005613327054122763115629 -0.0819204986095428550063601846887 0.04652599990367889404296875 +0.0335314005613327054122763115629 0.0819204986095428550063601846887 0.04652599990367889404296875 +0.0335408508777618394325337192186 -0.0081228502094745635986328125 -0.0361805498600006117393412807814 +0.0335408508777618394325337192186 0.0081228502094745635986328125 -0.0361805498600006117393412807814 +0.0335409998893737779090962192186 -0.0344094991683959947059712192186 0.0138198003172874464561381557814 +0.0335409998893737779090962192186 0.0344094991683959947059712192186 0.0138198003172874464561381557814 +0.0335616007447242722938618442186 -0.0243840001523494727397878278907 -0.598564195632934503699118522491 +0.0335616007447242722938618442186 0.0243840001523494727397878278907 -0.598564195632934503699118522491 +0.0335729509592056288291850307814 -0.0193092495203018195415456403907 0.0316229492425918606857138115629 +0.0335729509592056288291850307814 0.0193092495203018195415456403907 0.0316229492425918606857138115629 +0.0335922002792358384559712192186 0 -0.298113298416137706414730246252 +0.0335976004600524874588174384371 0 -0.146188947558403004034488503748 +0.0336407989263534587531800923443 -0.0081281997263431549072265625 -0.196982800960540771484375 +0.0336407989263534587531800923443 0.0081281997263431549072265625 -0.196982800960540771484375 +0.0336572997272014604042134067186 -0.0395241022109985365440287807814 0.2954742014408111572265625 +0.0336572997272014604042134067186 0.0395241022109985365440287807814 0.2954742014408111572265625 +0.0336665997281670598129110771879 -0.470433133840560957494858485006 -0.282948064804077192846420985006 +0.0336665997281670598129110771879 0.470433133840560957494858485006 -0.282948064804077192846420985006 +0.0336829982697963714599609375 -0.97942602634429931640625 -0.1989749968051910400390625 +0.0336829982697963714599609375 0.97942602634429931640625 -0.1989749968051910400390625 +0.0336853999644517870803994696871 -0.553075617551803566662727007497 0.427753198146820057257144753748 +0.0336853999644517870803994696871 0.553075617551803566662727007497 0.427753198146820057257144753748 +0.0337033491581678404380717495314 -0.805647867918014459753806022491 0.2688796520233154296875 +0.0337033491581678404380717495314 0.805647867918014459753806022491 0.2688796520233154296875 +0.0337206006050109891036825615629 -0.0367505013942718491981587192186 0.00350989997386932407741344519536 +0.0337206006050109891036825615629 0.0367505013942718491981587192186 0.00350989997386932407741344519536 +0.03374449908733367919921875 -0.22645725309848785400390625 -0.100391499698162078857421875 +0.03374449908733367919921875 0.22645725309848785400390625 -0.100391499698162078857421875 +0.0337599009275436415244975307814 -0.00811399966478347847709251539072 -0.0937785983085632351974325615629 +0.0337599009275436415244975307814 0.00811399966478347847709251539072 -0.0937785983085632351974325615629 +0.0337657492607831982711630303129 -0.282738143205642722399772992503 -0.348452103137969981805355246252 +0.0337657492607831982711630303129 0.282738143205642722399772992503 -0.348452103137969981805355246252 +0.0337747007608413737922425923443 -0.0286024987697601346114950615629 -0.023262999951839447021484375 +0.0337747007608413737922425923443 0.0286024987697601346114950615629 -0.023262999951839447021484375 +0.0337767988443374647666850307814 -0.103955602645874028988615123126 0.384775590896606456414730246252 +0.0337767988443374647666850307814 0.103955602645874028988615123126 0.384775590896606456414730246252 +0.0337867498397827134559712192186 -0.0367396503686904934982138115629 -0.00294139999896287935438055072268 +0.0337867498397827134559712192186 0.0367396503686904934982138115629 -0.00294139999896287935438055072268 +0.0338143497705459608604350307814 -0.0396119982004165607780699076557 0.140667897462844831979467130623 +0.0338143497705459608604350307814 0.0396119982004165607780699076557 0.140667897462844831979467130623 +0.0338184006512165027946714701557 -0.196221196651458734683259876874 -0.671083700656890824731704014994 +0.0338184006512165027946714701557 0.196221196651458734683259876874 -0.671083700656890824731704014994 +0.0338535010814666748046875 -0.389640587568283069952457253748 0.222562797367572784423828125 +0.0338535010814666748046875 0.389640587568283069952457253748 0.222562797367572784423828125 +0.0338716000318527235557475307814 0 -0.0940889000892639187911825615629 +0.0338730007410049382965411268742 -0.197486808896064736096320757497 -0.286969560384750355108707253748 +0.0338730007410049382965411268742 0.197486808896064736096320757497 -0.286969560384750355108707253748 +0.0338737994432449368575888115629 -0.0394133001565933269172425923443 0.0854350984096527155120526231258 +0.0338737994432449368575888115629 0.0394133001565933269172425923443 0.0854350984096527155120526231258 +0.0338793486356735243369975307814 -0.00407500006258487701416015625 -0.03654564917087554931640625 +0.0338793486356735243369975307814 0.00407500006258487701416015625 -0.03654564917087554931640625 +0.033906400203704833984375 -0.414372014999389692846420985006 -0.683480787277221724096420985006 +0.033906400203704833984375 0.414372014999389692846420985006 -0.683480787277221724096420985006 +0.0339121997356414822677450615629 0 0.0940743029117584311782351846887 +0.03394649922847747802734375 -0.480593502521514892578125 -0.13370649516582489013671875 +0.03394649922847747802734375 0.480593502521514892578125 -0.13370649516582489013671875 +0.0339840006083250087409730610943 -0.883334684371948286596420985006 0.169011904299259191342130748126 +0.0339840006083250087409730610943 0.883334684371948286596420985006 0.169011904299259191342130748126 +0.0339924007654190049598774692186 0 -0.0366676509380340562294087192186 +0.0339928507804870619346537807814 -0.144579148292541509457365123126 -0.02100884914398193359375 +0.0339928507804870619346537807814 0.144579148292541509457365123126 -0.02100884914398193359375 +0.0340065002441406263877787807814 -0.0649442017078399741469851846887 -0.0680132985115051297286825615629 +0.0340065002441406263877787807814 0.0649442017078399741469851846887 -0.0680132985115051297286825615629 +0.0340129993855953216552734375 -0.536777973175048828125 0.84303700923919677734375 +0.0340129993855953216552734375 0.536777973175048828125 0.84303700923919677734375 +0.0340290009975433363487162807814 -0.0165300503373146077945587961722 -0.0326923012733459500411825615629 +0.0340290009975433363487162807814 0.0165300503373146077945587961722 -0.0326923012733459500411825615629 +0.0340746000409126240104917826557 -0.297313803434371914935496761245 -0.0210593998432159409950337192186 +0.0340746000409126240104917826557 0.297313803434371914935496761245 -0.0210593998432159409950337192186 +0.0340749502182006863693075615629 -0.0323419004678726224044638115629 0.0171142995357513420795481096093 +0.0340749502182006863693075615629 0.0323419004678726224044638115629 0.0171142995357513420795481096093 +0.0340820491313934340049662807814 -0.0346889495849609375 -0.0116228498518466949462890625 +0.0340820491313934340049662807814 0.0346889495849609375 -0.0116228498518466949462890625 +0.034096300601959228515625 -0.0222230494022369398643412807814 0.0290443986654281630088725307814 +0.034096300601959228515625 0.0222230494022369398643412807814 0.0290443986654281630088725307814 +0.0341024011373519883583149692186 -0.104959201812744151727230246252 0.792351198196411199425881477509 +0.0341024011373519883583149692186 0.104959201812744151727230246252 0.792351198196411199425881477509 +0.0341086000204086289833149692186 -0.0916091024875640980162927462516 -0.0210804000496864346603231865629 +0.0341086000204086289833149692186 0.0916091024875640980162927462516 -0.0210804000496864346603231865629 +0.0341149985790252727180238423443 -0.0620235025882720988898988423443 0.0706345975399017417251101846887 +0.0341149985790252727180238423443 0.0620235025882720988898988423443 0.0706345975399017417251101846887 +0.0341965489089488955398721259371 -0.00990629978477954899196422644536 0.1457135975360870361328125 +0.0341965489089488955398721259371 0.00990629978477954899196422644536 0.1457135975360870361328125 +0.0342154495418071705192808451557 -0.1053062975406646728515625 0.101192253828048708830245061563 +0.0342154495418071705192808451557 0.1053062975406646728515625 0.101192253828048708830245061563 +0.0342186003923416123817524692186 -0.0198335006833076504806356865629 0.0918461978435516357421875 +0.0342186003923416123817524692186 0.0198335006833076504806356865629 0.0918461978435516357421875 +0.0342265009880065862457598768742 -0.256216102838516202044871761245 0.650523984432220370166533029987 +0.0342265009880065862457598768742 0.256216102838516202044871761245 0.650523984432220370166533029987 +0.0342287987470626872688050923443 -0.184775400161743180715845369377 -0.0684574007987976129729901231258 +0.0342287987470626872688050923443 0.184775400161743180715845369377 -0.0684574007987976129729901231258 +0.0342468000948429121543803432814 -0.663936316967010498046875 -0.606643205881118752209602007497 +0.0342468000948429121543803432814 0.663936316967010498046875 -0.606643205881118752209602007497 +0.0342566996812820462325888115629 -0.0922681987285614013671875 0.01769340038299560546875 +0.0342566996812820462325888115629 0.0922681987285614013671875 0.01769340038299560546875 +0.0343021497130393954178018134371 -0.144958949089050298519865123126 0.0176146499812602982948384067186 +0.0343021497130393954178018134371 0.144958949089050298519865123126 0.0176146499812602982948384067186 +0.0343032985925674424598774692186 -0.0414267003536224406867738423443 -0.0843037009239196860610476846887 +0.0343032985925674424598774692186 0.0414267003536224406867738423443 -0.0843037009239196860610476846887 +0.0343059498816728550285581889057 -0.30899155139923095703125 -0.160770754516124714239566628748 +0.0343059498816728550285581889057 0.30899155139923095703125 -0.160770754516124714239566628748 +0.0343135006725788158088441548443 -0.447320234775543223992855246252 -0.47034780681133270263671875 +0.0343135006725788158088441548443 0.447320234775543223992855246252 -0.47034780681133270263671875 +0.0343195013701915740966796875 -0.21356500685214996337890625 0.4507904946804046630859375 +0.0343195013701915740966796875 0.21356500685214996337890625 0.4507904946804046630859375 +0.0343507491052150726318359375 -0.415936347842216502801448996252 0.168276603519916551077173494377 +0.0343507491052150726318359375 0.415936347842216502801448996252 0.168276603519916551077173494377 +0.0343696486204862622360067803129 -0.367302587628364596294971988755 -0.257697013020515452996761496252 +0.0343696486204862622360067803129 0.367302587628364596294971988755 -0.257697013020515452996761496252 +0.03439874947071075439453125 -0.0300749510526657111431081403907 0.0203033000230789205386994211722 +0.03439874947071075439453125 0.0300749510526657111431081403907 0.0203033000230789205386994211722 +0.0344094514846801785568075615629 -0.024999849498271942138671875 0.0262867987155914334396200615629 +0.0344094514846801785568075615629 0.024999849498271942138671875 0.0262867987155914334396200615629 +0.0344333991408348055740518134371 -0.297494405508041348529246761245 0.0176483999937772743915598283593 +0.0344333991408348055740518134371 0.297494405508041348529246761245 0.0176483999937772743915598283593 +0.034487999975681304931640625 0 0.24760974943637847900390625 +0.034488201141357421875 0 0.03620170056819915771484375 +0.0344923496246337876747212192186 -0.01320745050907135009765625 0.0337022513151168864875550923443 +0.0344923496246337876747212192186 0.01320745050907135009765625 0.0337022513151168864875550923443 +0.0345104992389678941200337192186 -0.0276225507259368896484375 0.023367099463939666748046875 +0.0345104992389678941200337192186 0.0276225507259368896484375 0.023367099463939666748046875 +0.03453154861927032470703125 -0.947726643085479714123664507497 0.0558752007782459259033203125 +0.03453154861927032470703125 0.947726643085479714123664507497 0.0558752007782459259033203125 +0.03454925119876861572265625 -0.106329999864101409912109375 -0.22360749542713165283203125 +0.03454925119876861572265625 0.106329999864101409912109375 -0.22360749542713165283203125 +0.034549750387668609619140625 -0.23776374757289886474609375 -0.069099247455596923828125 +0.034549750387668609619140625 0.23776374757289886474609375 -0.069099247455596923828125 +0.03457050025463104248046875 0 0.49880349636077880859375 +0.03460200130939483642578125 -0.106493003666400909423828125 -0.993710994720458984375 +0.03460200130939483642578125 0.106493003666400909423828125 -0.993710994720458984375 +0.034607999026775360107421875 -0.10650999844074249267578125 -0.4872964918613433837890625 +0.034607999026775360107421875 0.10650999844074249267578125 -0.4872964918613433837890625 +0.0346798986196517958213725307814 -0.0211179003119468695903737653907 -0.0291777014732360860660431711722 +0.0346798986196517958213725307814 0.0211179003119468695903737653907 -0.0291777014732360860660431711722 +0.0346908986568450969367738423443 -0.0936049997806549100021200615629 0.00588660016655922005424095289072 +0.0346908986568450969367738423443 0.0936049997806549100021200615629 0.00588660016655922005424095289072 +0.034726798534393310546875 -0.0935130000114440945724325615629 -0.00702629983425140380859375 +0.034726798534393310546875 0.0935130000114440945724325615629 -0.00702629983425140380859375 +0.0347341492772102397590394673443 -0.246539694070816051141292746252 -0.490420165657997175756577235006 +0.0347341492772102397590394673443 0.246539694070816051141292746252 -0.490420165657997175756577235006 +0.03476519882678985595703125 -0.00663959980010986328125 0.0353170990943908677528462192186 +0.03476519882678985595703125 0.00663959980010986328125 0.0353170990943908677528462192186 +0.0347851008176803602744975307814 -0.03522349894046783447265625 0.0070215500891208648681640625 +0.0347851008176803602744975307814 0.03522349894046783447265625 0.0070215500891208648681640625 +0.0348007019609212903121786553129 -0.456695243716239984710369981258 0.304497054219245943951221988755 +0.0348007019609212903121786553129 0.456695243716239984710369981258 0.304497054219245943951221988755 +0.0348347991704940837531800923443 -0.149956202507019048519865123126 0.127670204639434820004240123126 +0.0348347991704940837531800923443 0.149956202507019048519865123126 0.127670204639434820004240123126 +0.0348429501056671184211488423443 -0.0253145992755889892578125 -0.0253996014595031759097931711722 +0.0348429501056671184211488423443 0.0253145992755889892578125 -0.0253996014595031759097931711722 +0.0348596513271331800987162807814 -0.0328139990568161038497763115629 -0.014423899352550506591796875 +0.0348596513271331800987162807814 0.0328139990568161038497763115629 -0.014423899352550506591796875 +0.0348774008452892303466796875 -0.0872919023036956703842648153113 -0.116891849040985096319644753748 +0.0348774008452892303466796875 0.0872919023036956703842648153113 -0.116891849040985096319644753748 +0.0349355012178421062141175923443 -0.0130772992968559275545059605861 -0.0332940995693206814864950615629 +0.0349355012178421062141175923443 0.0130772992968559275545059605861 -0.0332940995693206814864950615629 +0.0349563002586364759971537807814 -0.03526175022125244140625 -0.00588794983923435211181640625 +0.0349563002586364759971537807814 0.03526175022125244140625 -0.00588794983923435211181640625 +0.034980498254299163818359375 -0.4938440024852752685546875 -0.069960497319698333740234375 +0.034980498254299163818359375 0.4938440024852752685546875 -0.069960497319698333740234375 +0.0350169003009796128700337192186 -0.145855504274368275030582253748 0 +0.0350169003009796128700337192186 0.145855504274368275030582253748 0 +0.0350278481841087355186381557814 -0.107807151973247541953959682814 0.538192051649093672338608485006 +0.0350278481841087355186381557814 0.107807151973247541953959682814 0.538192051649093672338608485006 +0.0350507989525794955154580634371 -0.127895396947860701120092130623 -0.0701014503836631802657919365629 +0.0350507989525794955154580634371 0.127895396947860701120092130623 -0.0701014503836631802657919365629 +0.0350551992654800428916850307814 -0.194282805919647222347990123126 0.3478868007659912109375 +0.0350551992654800428916850307814 0.194282805919647222347990123126 0.3478868007659912109375 +0.0350879989564418792724609375 -0.9969170093536376953125 -0.070176996290683746337890625 +0.0350879989564418792724609375 0.9969170093536376953125 -0.070176996290683746337890625 +0.03509294986724853515625 -0.0502029016613960224479917826557 -0.136923900246620183773771373126 +0.03509294986724853515625 0.0502029016613960224479917826557 -0.136923900246620183773771373126 +0.0351166009902954129318075615629 -0.0649720013141632107833700615629 0.185863995552063010485710492503 +0.0351166009902954129318075615629 0.0649720013141632107833700615629 0.185863995552063010485710492503 +0.0351337999105453477333149692186 -0.108128798007965098992855246252 -0.164541196823120128289730246252 +0.0351337999105453477333149692186 0.108128798007965098992855246252 -0.164541196823120128289730246252 +0.0353065509349107728431782504686 -0.448612654209136985095085492503 0 +0.0353065509349107728431782504686 0.448612654209136985095085492503 0 +0.03532154858112335205078125 -0.016296349465847015380859375 0.0314136505126953111122212192186 +0.03532154858112335205078125 0.016296349465847015380859375 0.0314136505126953111122212192186 +0.0353554010391235393195863423443 -0.0353552997112274169921875 0 +0.0353554010391235393195863423443 0.0353552997112274169921875 0 +0.0353643000125885009765625 -0.148930495977401738949552623126 -0.258009892702102672235042746252 +0.0353643000125885009765625 0.148930495977401738949552623126 -0.258009892702102672235042746252 +0.03542520105838775634765625 -0.280922007560729991570980246252 0.282538390159606966900440738755 +0.03542520105838775634765625 0.280922007560729991570980246252 0.282538390159606966900440738755 +0.0354409508407115894645933451557 -0.0766801536083221435546875 0.123952049016952503546207253748 +0.0354409508407115894645933451557 0.0766801536083221435546875 0.123952049016952503546207253748 +0.0354703485965728801398988423443 -0.0307819485664367689659037807814 -0.01715590059757232666015625 +0.0354703485965728801398988423443 0.0307819485664367689659037807814 -0.01715590059757232666015625 +0.0354817003011703505088725307814 -0.0734789013862609946547976846887 -0.0578091979026794447471537807814 +0.0354817003011703505088725307814 0.0734789013862609946547976846887 -0.0578091979026794447471537807814 +0.0355435999110341044326943915621 -0.761938306689262323523337272491 0.375081191956996906622379128748 +0.0355435999110341044326943915621 0.761938306689262323523337272491 0.375081191956996906622379128748 +0.0356272995471954359580912807814 -0.0667499005794525146484375 0.0653846979141235323806924384371 +0.0356272995471954359580912807814 0.0667499005794525146484375 0.0653846979141235323806924384371 +0.0356299996376037639289613423443 -0.178585004806518565789730246252 0.0826914012432098388671875 +0.0356299996376037639289613423443 0.178585004806518565789730246252 0.0826914012432098388671875 +0.0356361001729965237716513115629 -0.0334805488586425795127787807814 0.0104460999369621280324915701954 +0.0356361001729965237716513115629 0.0334805488586425795127787807814 0.0104460999369621280324915701954 +0.03563959896564483642578125 -0.0341428995132446316818075615629 -0.086971700191497802734375 +0.03563959896564483642578125 0.0341428995132446316818075615629 -0.086971700191497802734375 +0.0356566011905670166015625 -0.188148403167724631579460492503 0.0576955974102020263671875 +0.0356566011905670166015625 0.188148403167724631579460492503 0.0576955974102020263671875 +0.03566800057888031005859375 -0.009588800370693206787109375 -0.0337023496627807603309712192186 +0.03566800057888031005859375 0.009588800370693206787109375 -0.0337023496627807603309712192186 +0.0356858991086482987831196567186 -0.853038918972015447472756477509 0.284696102142333984375 +0.0356858991086482987831196567186 0.853038918972015447472756477509 0.284696102142333984375 +0.0357333004474639850944761576557 -0.237793493270874012335269753748 0.1793805062770843505859375 +0.0357333004474639850944761576557 0.237793493270874012335269753748 0.1793805062770843505859375 +0.035768501460552215576171875 -0.21623174846172332763671875 0.120268501341342926025390625 +0.035768501460552215576171875 0.21623174846172332763671875 0.120268501341342926025390625 +0.0358232997357845264763120951557 -0.110250753164291379060379938437 -0.0951916515827178899566973768742 +0.0358232997357845264763120951557 0.110250753164291379060379938437 -0.0951916515827178899566973768742 +0.035828001797199249267578125 -0.164153754711151123046875 0.18512125313282012939453125 +0.035828001797199249267578125 0.164153754711151123046875 0.18512125313282012939453125 +0.03585214912891387939453125 -0.0179111495614051839664337961722 -0.0298967003822326674034037807814 +0.03585214912891387939453125 0.0179111495614051839664337961722 -0.0298967003822326674034037807814 +0.0358720006421208367775044223436 -0.932408833503723055713408029987 0.178401454538106907232730691248 +0.0358720006421208367775044223436 0.932408833503723055713408029987 0.178401454538106907232730691248 +0.0358729004859924260895098768742 -0.327616789937019314837840511245 -0.117815248668193803260884067186 +0.0358729004859924260895098768742 0.327616789937019314837840511245 -0.117815248668193803260884067186 +0.0359113007783889784385600307814 -0.0286025494337081923057475307814 -0.0198058500885963453819194057814 +0.0359113007783889784385600307814 0.0286025494337081923057475307814 -0.0198058500885963453819194057814 +0.0359152518212795257568359375 -0.2404845058917999267578125 0.058113999664783477783203125 +0.0359152518212795257568359375 0.2404845058917999267578125 0.058113999664783477783203125 +0.0359290003776550279090962192186 -0.00332829989492893245014992764652 0.03461255133152008056640625 +0.0359290003776550279090962192186 0.00332829989492893245014992764652 0.03461255133152008056640625 +0.03594680130481719970703125 -0.0840174019336700494964276231258 -0.0406067013740539564659037807814 +0.03594680130481719970703125 0.0840174019336700494964276231258 -0.0406067013740539564659037807814 +0.0359474986791610759406800923443 -0.01929520070552825927734375 0.0289045006036758450607138115629 +0.0359474986791610759406800923443 0.01929520070552825927734375 0.0289045006036758450607138115629 +0.03595019876956939697265625 -0.0099546499550342559814453125 0.0332940012216568007041850307814 +0.03595019876956939697265625 0.0099546499550342559814453125 0.0332940012216568007041850307814 +0.03595919907093048095703125 -0.0336158990859985393195863423443 -0.0087696500122547149658203125 +0.03595919907093048095703125 0.0336158990859985393195863423443 -0.0087696500122547149658203125 +0.0359730012714862823486328125 -0.110715501010417938232421875 0.22124199569225311279296875 +0.0359730012714862823486328125 0.110715501010417938232421875 0.22124199569225311279296875 +0.0360255502164363861083984375 -0.440270265936851479260383257497 -0.726198336482048012463508257497 +0.0360255502164363861083984375 0.440270265936851479260383257497 -0.726198336482048012463508257497 +0.0360424995422363309005575615629 -0.046087801456451416015625 0.0810977995395660428146200615629 +0.0360424995422363309005575615629 0.046087801456451416015625 0.0810977995395660428146200615629 +0.0360482007265090984016175923443 -0.110947000980377200041182561563 0.162453794479370139391960492503 +0.0360482007265090984016175923443 0.110947000980377200041182561563 0.162453794479370139391960492503 +0.0360854005441069644599672017193 -0.390972387790679942742855246252 0.518014234304428167199318977509 +0.0360854005441069644599672017193 0.390972387790679942742855246252 0.518014234304428167199318977509 +0.036091499961912631988525390625 -0.59258101880550384521484375 0.4583069980144500732421875 +0.036091499961912631988525390625 0.59258101880550384521484375 0.4583069980144500732421875 +0.0361079983413219451904296875 -0.3267459869384765625 0.3767404854297637939453125 +0.0361079983413219451904296875 0.3267459869384765625 0.3767404854297637939453125 +0.0361362509429454803466796875 -0.23047949373722076416015625 0.089851997792720794677734375 +0.0361362509429454803466796875 0.23047949373722076416015625 0.089851997792720794677734375 +0.0361371994018554673622212192186 -0.00613634996116161398477251154304 -0.0340065985918045071700888115629 +0.0361371994018554673622212192186 0.00613634996116161398477251154304 -0.0340065985918045071700888115629 +0.0361494001001119585891885321871 -0.7008216679096221923828125 -0.640345606207847528601462272491 +0.0361494001001119585891885321871 0.7008216679096221923828125 -0.640345606207847528601462272491 +0.0361799985170364393760600307814 -0.0262863010168075568462331403907 0.0894429028034210288344851846887 +0.0361799985170364393760600307814 -0.0262860000133514418174662807814 -0.022360749542713165283203125 +0.0361799985170364393760600307814 0.0262860000133514418174662807814 -0.022360749542713165283203125 +0.0361799985170364393760600307814 0.0262863010168075568462331403907 0.0894429028034210288344851846887 +0.0361804008483886732627787807814 -0.0587778985500335693359375 -0.0723612010478973388671875 +0.0361804008483886732627787807814 0.0587778985500335693359375 -0.0723612010478973388671875 +0.0362134985625743865966796875 -0.20075275003910064697265625 -0.14452324807643890380859375 +0.0362134985625743865966796875 0.20075275003910064697265625 -0.14452324807643890380859375 +0.0362338012084364863296670478121 -0.111519151926040643862947376874 0.841873148083686850817741742503 +0.0362338012084364863296670478121 0.111519151926040643862947376874 0.841873148083686850817741742503 +0.03623400069773197174072265625 -0.2102369964122772216796875 -0.7190182507038116455078125 +0.03623400069773197174072265625 0.2102369964122772216796875 -0.7190182507038116455078125 +0.0362352013587951687911825615629 -0.0263264000415802008892018903907 0.397484397888183627056690738755 +0.0362352013587951687911825615629 0.0263264000415802008892018903907 0.397484397888183627056690738755 +0.0362414002418518094161825615629 -0.0263307988643646240234375 0.194918596744537375720085492503 +0.0362414002418518094161825615629 0.0263307988643646240234375 0.194918596744537375720085492503 +0.0362482994794845608810263115629 -0.0222679495811462409282643903907 -0.0262716501951217665244975307814 +0.0362482994794845608810263115629 0.0222679495811462409282643903907 -0.0262716501951217665244975307814 +0.0362524002790451035926899692186 -0.0589644014835357666015625 -0.39396560192108154296875 +0.0362524002790451035926899692186 0.0589644014835357666015625 -0.39396560192108154296875 +0.0362620018422603607177734375 -0.4952194988727569580078125 0.058674998581409454345703125 +0.0362620018422603607177734375 0.4952194988727569580078125 0.058674998581409454345703125 +0.0362956501543521894981303432814 -0.111708453297615042942858565311 0.0932943016290664617340411268742 +0.0362956501543521894981303432814 0.111708453297615042942858565311 0.0932943016290664617340411268742 +0.0362989991903305067588725307814 -0.0592000007629394572883363423443 -0.187557399272918701171875 +0.0362989991903305067588725307814 0.0592000007629394572883363423443 -0.187557399272918701171875 +0.0363070487976074260383363423443 -0.0314155489206314128547425923443 0.0139593005180358893657643903907 +0.0363070487976074260383363423443 0.0314155489206314128547425923443 0.0139593005180358893657643903907 +0.0363220989704132121711488423443 -0.00666040033102035557155407019536 0.0929319024085998590667401231258 +0.0363220989704132121711488423443 0.00666040033102035557155407019536 0.0929319024085998590667401231258 +0.036348998546600341796875 -0.9976069927215576171875 0.05881600081920623779296875 +0.036348998546600341796875 0.9976069927215576171875 0.05881600081920623779296875 +0.0363584008067846312095561245314 -0.0264160001650452606891672502343 -0.648444545269012517785256477509 +0.0363584008067846312095561245314 0.0264160001650452606891672502343 -0.648444545269012517785256477509 +0.0363591492176055935958700615629 -0.02214320003986358642578125 0.0262239009141922024825888115629 +0.0363591492176055935958700615629 0.02214320003986358642578125 0.0262239009141922024825888115629 +0.0363658994436264065841513115629 -0.00206250008195638665289828317384 -0.03425300121307373046875 +0.0363658994436264065841513115629 0.00206250008195638665289828317384 -0.03425300121307373046875 +0.036404751241207122802734375 -0.0468572489917278289794921875 -0.2428559958934783935546875 +0.036404751241207122802734375 0.0468572489917278289794921875 -0.2428559958934783935546875 +0.0364381488412618623207173129686 -0.262300854921340920178352007497 0.228846442699432356393529630623 +0.0364381488412618623207173129686 0.262300854921340920178352007497 0.228846442699432356393529630623 +0.0364457510411739377120809990629 -0.5039331018924713134765625 -0.217309407889843014816122490629 +0.0364457510411739377120809990629 0.5039331018924713134765625 -0.217309407889843014816122490629 +0.03653959929943084716796875 -0.0339487999677658067176899692186 0.00351249985396862030029296875 +0.03653959929943084716796875 0.0339487999677658067176899692186 0.00351249985396862030029296875 +0.03654034994542598724365234375 -0.34032915532588958740234375 -0.0730810493230819591126135037484 +0.03654034994542598724365234375 0.34032915532588958740234375 -0.0730810493230819591126135037484 +0.0365928500890731825401225307814 -0.0339455991983413710166850307814 -0.00294295009225606927008578317384 +0.0365928500890731825401225307814 0.0339455991983413710166850307814 -0.00294295009225606927008578317384 +0.0366034001111984266807475307814 -0.1921308040618896484375 -0.04178459942340850830078125 +0.0366034001111984266807475307814 0.1921308040618896484375 -0.04178459942340850830078125 +0.0366288989782333415656800923443 -0.0864929020404815729339276231258 0.0343118011951446533203125 +0.0366288989782333415656800923443 0.0864929020404815729339276231258 0.0343118011951446533203125 +0.0366345010697841644287109375 -0.112747605144977558477847878748 -0.329311150312423694952457253748 +0.0366345010697841644287109375 0.112747949361801144685379938437 -0.329311150312423694952457253748 +0.0366712510585784912109375 -0.27451725304126739501953125 0.6969899833202362060546875 +0.0366712510585784912109375 0.27451725304126739501953125 0.6969899833202362060546875 +0.0366724014282226590255575615629 -0.309028005599975619244190738755 -0.25130999088287353515625 +0.0366724014282226590255575615629 0.309028005599975619244190738755 -0.25130999088287353515625 +0.0366771996021270710319761576557 -0.112882350385189053620926813437 0.32926039397716522216796875 +0.0366771996021270710319761576557 0.112882350385189053620926813437 0.32926039397716522216796875 +0.0366994999349117279052734375 -0.483321487903594970703125 0.122693501412868499755859375 +0.0366994999349117279052734375 0.483321487903594970703125 0.122693501412868499755859375 +0.0367209009826183277458433451557 -0.132744598388671863897769753748 0.0594175502657890292068643134371 +0.0367209009826183277458433451557 0.132744598388671863897769753748 0.0594175502657890292068643134371 +0.0367271997034549699256977817186 -0.513199782371520973889289507497 -0.308670616149902321545539507497 +0.0367271997034549699256977817186 0.513199782371520973889289507497 -0.308670616149902321545539507497 +0.0367305994033813518195863423443 -0.0292356997728347792198100307814 0.0172086998820304877544362653907 +0.0367305994033813518195863423443 0.0292356997728347792198100307814 0.0172086998820304877544362653907 +0.0368173003196716336349325615629 -0.03172884881496429443359375 -0.0117374502122402201570450230861 +0.0368173003196716336349325615629 0.03172884881496429443359375 -0.0117374502122402201570450230861 +0.0368283510208129924445863423443 -0.0144962504506111148488978201954 -0.0305537492036819478824494211722 +0.0368283510208129924445863423443 0.0144962504506111148488978201954 -0.0305537492036819478824494211722 +0.0368981003761291517784037807814 -0.0132040500640869147563893903907 0.0310512989759445211246369211722 +0.0368981003761291517784037807814 0.0132040500640869147563893903907 0.0310512989759445211246369211722 +0.0369018003344535813758930942186 -0.0488889008760452284385600307814 0.136923900246620183773771373126 +0.0369018003344535813758930942186 0.0488889008760452284385600307814 0.136923900246620183773771373126 +0.03690870106220245361328125 0 0.0337305009365081800987162807814 +0.0369350492954254178146200615629 -0.02428545057773590087890625 0.023367099463939666748046875 +0.0369350492954254178146200615629 0.02428545057773590087890625 0.023367099463939666748046875 +0.0369409501552581814864950615629 -0.0268390506505966214279013115629 0.0203722998499870321109650461722 +0.0369409501552581814864950615629 0.0268390506505966214279013115629 0.0203722998499870321109650461722 +0.0369530007243156419227680942186 -0.481729483604431130139289507497 -0.5065284073352813720703125 +0.0369530007243156419227680942186 0.481729483604431130139289507497 -0.5065284073352813720703125 +0.0369536012411117581466513115629 -0.0711278021335601806640625 0.0597935020923614501953125 +0.0369536012411117581466513115629 0.0711278021335601806640625 0.0597935020923614501953125 +0.0371051996946334880500550923443 -0.140892994403839122430355246252 -0.137012195587158214227230246252 +0.0371051996946334880500550923443 0.140892994403839122430355246252 -0.137012195587158214227230246252 +0.0371892489492893218994140625 -0.24471275508403778076171875 -0.0351080000400543212890625 +0.0371892489492893218994140625 0.24471275508403778076171875 -0.0351080000400543212890625 +0.0372462987899780315070863423443 -0.0066284500062465667724609375 0.03269214928150177001953125 +0.0372462987899780315070863423443 0.0066284500062465667724609375 0.03269214928150177001953125 +0.0373000491410493892341371235943 -0.174026253819465653860376619377 -0.41330789029598236083984375 +0.0373000491410493892341371235943 0.174026253819465653860376619377 -0.41330789029598236083984375 +0.0373172998428344740440287807814 -0.0884757995605468805511151231258 -0.0279186010360717787315287807814 +0.0373172998428344740440287807814 0.0884757995605468805511151231258 -0.0279186010360717787315287807814 +0.0373177010565996156166157504686 -0.253852543234825145379573996252 -0.238046544790267933233707253748 +0.0373177010565996156166157504686 0.253852543234825145379573996252 -0.238046544790267933233707253748 +0.0373297989368438706825337192186 -0.193328595161437993832365123126 0.03507860004901885986328125 +0.0373297989368438706825337192186 0.193328595161437993832365123126 0.03507860004901885986328125 +0.0373411491513252272178569057814 -0.528652852773666470653779470013 -0.147077144682407401354851117503 +0.0373411491513252272178569057814 0.528652852773666470653779470013 -0.147077144682407401354851117503 +0.0373920008540153461784605326557 -0.115083003044128412417634876874 0.274513506889343228412059261245 +0.0373920008540153461784605326557 0.115083003044128412417634876874 0.274513506889343228412059261245 +0.037470400333404541015625 -0.158033204078674327508480246252 0.116710996627807622738615123126 +0.037470400333404541015625 0.158033204078674327508480246252 0.116710996627807622738615123126 +0.0374769002199173001388388115629 -0.0190858006477355977847931711722 -0.0270410001277923590923268903907 +0.0374769002199173001388388115629 0.0190858006477355977847931711722 -0.0270410001277923590923268903907 +0.0374830007553100599815287807814 -0.0297446012496948263004181711722 -0.0145011499524116526521622105861 +0.0374830007553100599815287807814 0.0297446012496948263004181711722 -0.0145011499524116526521622105861 +0.0374940991401672349403462192186 -0.03232879936695098876953125 0.00700294971466064453125 +0.0374940991401672349403462192186 0.03232879936695098876953125 0.00700294971466064453125 +0.0375174991786479949951171875 -0.314153492450714111328125 -0.38716900348663330078125 +0.0375174991786479949951171875 0.314153492450714111328125 -0.38716900348663330078125 +0.0375943511724472004265074076557 -0.135725551843643182925447376874 -0.0516262516379356398155131557814 +0.0375943511724472004265074076557 0.135725551843643182925447376874 -0.0516262516379356398155131557814 +0.0375975996255874661544638115629 -0.0896400988101959256271200615629 0.0234749004244804403140900461722 +0.0375975996255874661544638115629 0.0896400988101959256271200615629 0.0234749004244804403140900461722 +0.0376123487949371337890625 -0.0110056497156620029104212576954 -0.0310513496398925788188893903907 +0.0376123487949371337890625 0.0110056497156620029104212576954 -0.0310513496398925788188893903907 +0.037615001201629638671875 -0.432933986186981201171875 0.24729199707508087158203125 +0.037615001201629638671875 0.432933986186981201171875 0.24729199707508087158203125 +0.0376340508460998590667401231258 -0.0162430495023727430869975307814 0.0286328494548797607421875 +0.0376340508460998590667401231258 0.0162430495023727430869975307814 0.0286328494548797607421875 +0.0376343999058008221725302178129 -0.806758207082748479699318977509 0.397144791483879100457698996252 +0.0376343999058008221725302178129 0.806758207082748479699318977509 0.397144791483879100457698996252 +0.0376397997140884427169638115629 -0.023282550275325775146484375 -0.023262999951839447021484375 +0.0376397997140884427169638115629 0.023282550275325775146484375 -0.023262999951839447021484375 +0.03764919936656951904296875 -0.0801499009132385364928552462516 -0.0464599996805191081672425923443 +0.03764919936656951904296875 0.0801499009132385364928552462516 -0.0464599996805191081672425923443 +0.0376520514488220270354901231258 -0.0323704987764358506630024692186 -0.00587154999375343392142845289072 +0.0376520514488220270354901231258 0.0323704987764358506630024692186 -0.00587154999375343392142845289072 +0.0376684490591287571281675639057 -0.900429970026016213147102007497 0.3005125522613525390625 +0.0376684490591287571281675639057 0.900429970026016213147102007497 0.3005125522613525390625 +0.0376722007989883436729350307814 -0.02737019956111907958984375 -0.0884967982769012534438601846887 +0.0376722007989883436729350307814 0.02737019956111907958984375 -0.0884967982769012534438601846887 +0.0377048984169960008094868442186 -0.0765528023242950383941973768742 -0.287607300281524647100894753748 +0.0377048984169960008094868442186 0.0765528023242950383941973768742 -0.287607300281524647100894753748 +0.03775034844875335693359375 -0.0198852002620697014545481096093 0.143803650140762323550447376874 +0.03775034844875335693359375 0.0198852002620697014545481096093 0.143803650140762323550447376874 +0.0377514515072107370574627793758 -0.234921507537364987472372490629 0.495869544148445196007912727509 +0.0377514515072107370574627793758 0.234921507537364987472372490629 0.495869544148445196007912727509 +0.0377600006759166717529296875 -0.981482982635498046875 0.18779100477695465087890625 +0.0377600006759166717529296875 0.981482982635498046875 0.18779100477695465087890625 +0.0377687513828277587890625 -0.24537074565887451171875 0.02943949960172176361083984375 +0.0377687513828277587890625 0.24537074565887451171875 0.02943949960172176361083984375 +0.0378917992115020765830912807814 -0.268952393531799283099559261245 -0.535003817081451393811164507497 +0.0378917992115020765830912807814 0.268952393531799283099559261245 -0.535003817081451393811164507497 +0.0379090011119842529296875 -0.052410602569580078125 0.0762628972530365045745526231258 +0.0379090011119842529296875 0.052410602569580078125 0.0762628972530365045745526231258 +0.0379231993108987766594175639057 -0.342485496401786770892528011245 0.0613630481064319568962339701557 +0.0379231993108987766594175639057 0.342485496401786770892528011245 0.0613630481064319568962339701557 +0.0379644021391868577430805942186 -0.498212993144989013671875 0.332178604602813731805355246252 +0.0379644021391868577430805942186 0.498212993144989013671875 0.332178604602813731805355246252 +0.0379785001277923583984375 -0.0275927513837814358810263115629 -0.0172125995159149169921875 +0.0379785001277923583984375 0.0275927513837814358810263115629 -0.0172125995159149169921875 +0.0379940986633300822883363423443 -0.0678906977176666343032351846887 -0.0628274977207183837890625 +0.0379940986633300822883363423443 0.0678906977176666343032351846887 -0.0628274977207183837890625 +0.0379988986998796504646058735943 -0.116950052976608279142745061563 0.432872539758682284283253238755 +0.0379988986998796504646058735943 0.116950052976608279142745061563 0.432872539758682284283253238755 +0.038001000881195068359375 -0.181720805168151838815404630623 0.2356553971767425537109375 +0.038001000881195068359375 0.181720805168151838815404630623 0.2356553971767425537109375 +0.0380048990249633802940287807814 -0.0770053535699844332595986884371 -0.122986954450607297029129938437 +0.0380048990249633802940287807814 0.0770053535699844332595986884371 -0.122986954450607297029129938437 +0.0380203485488891657073651231258 -0.0324723511934280409385600307814 0 +0.0380203485488891657073651231258 0.0324723511934280409385600307814 0 +0.0380275502800941495040731865629 0 0.548683845996856711657585492503 +0.0380338490009307847450337192186 -0.0846762031316757174392861884371 0.11782769858837127685546875 +0.0380338490009307847450337192186 0.0846762031316757174392861884371 0.11782769858837127685546875 +0.038052000105381011962890625 -0.73770701885223388671875 -0.674048006534576416015625 +0.038052000105381011962890625 0.73770701885223388671875 -0.674048006534576416015625 +0.0380687989294528975059428432814 -0.117160998284816755821147182814 -0.536026141047477810985810720013 +0.0380687989294528975059428432814 0.117160998284816755821147182814 -0.536026141047477810985810720013 +0.0380715996026992839484925923443 -0.082710802555084228515625 0.04134570062160491943359375 +0.0380715996026992839484925923443 0.082710802555084228515625 0.04134570062160491943359375 +0.0381312012672424330284037807814 -0.0522491991519928034026776231258 -0.0762628972530365045745526231258 +0.0381312012672424330284037807814 0.0522491991519928034026776231258 -0.0762628972530365045745526231258 +0.0381348013877868680099325615629 -0.0191805496811866781070587961722 0.0260354489088058492496369211722 +0.0381348013877868680099325615629 0.0191805496811866781070587961722 0.0260354489088058492496369211722 +0.038144700229167938232421875 -0.466168516874313376696647992503 -0.768915885686874411852897992503 +0.038144700229167938232421875 0.466168516874313376696647992503 -0.768915885686874411852897992503 +0.0381545007228851346114950615629 -0.00757730007171630859375 -0.0314137011766433757453675923443 +0.0381545007228851346114950615629 0.00757730007171630859375 -0.0314137011766433757453675923443 +0.038167499005794525146484375 -0.4621514976024627685546875 0.18697400391101837158203125 +0.038167499005794525146484375 0.4621514976024627685546875 0.18697400391101837158203125 +0.0381884984672069549560546875 -0.4081139862537384033203125 -0.2863300144672393798828125 +0.0381884984672069549560546875 0.4081139862537384033203125 -0.2863300144672393798828125 +0.0382016003131866455078125 -0.0749383985996246310135049384371 0.0540821015834808405120526231258 +0.0382016003131866455078125 0.0749383985996246310135049384371 0.0540821015834808405120526231258 +0.0382021486759185763260049384371 -0.117576000094413754548661188437 0.0849499493837356511871661268742 +0.0382021486759185763260049384371 0.117576000094413754548661188437 0.0849499493837356511871661268742 +0.0382054477930068928093199076557 -0.0401065483689308152626118442186 -0.139397996664047230108707253748 +0.0382054477930068928093199076557 0.0401065483689308152626118442186 -0.139397996664047230108707253748 +0.0382121980190277057976011576557 -0.1176078021526336669921875 0.587118601799011208264289507497 +0.0382121980190277057976011576557 0.1176078021526336669921875 0.587118601799011208264289507497 +0.03826305083930492401123046875 -0.193356791138648981265291126874 0.289221447706222489770766514994 +0.03826305083930492401123046875 0.193356791138648981265291126874 0.289221447706222489770766514994 +0.0382683992385864299445863423443 -0.0923879027366638211349325615629 0 +0.0382683992385864299445863423443 0.0923879027366638211349325615629 0 +0.03829275071620941162109375 -0.0303737998008728055099325615629 0.0105402000248432173301615932814 +0.03829275071620941162109375 0.0303737998008728055099325615629 0.0105402000248432173301615932814 +0.0383001506328582777549662807814 -0.0253145992755889892578125 -0.0198058500885963453819194057814 +0.0383001506328582777549662807814 0.0253145992755889892578125 -0.0198058500885963453819194057814 +0.0383022993803024333625550923443 -0.0916243970394134549239950615629 0.0117430999875068678428569057814 +0.0383022993803024333625550923443 0.0916243970394134549239950615629 0.0117430999875068678428569057814 +0.03831554949283599853515625 -0.00991925001144409318465378078145 0.0305536508560180671001393903907 +0.03831554949283599853515625 0.00991925001144409318465378078145 0.0305536508560180671001393903907 +0.0383206993341445936729350307814 -0.0912981986999511774261151231258 -0.0140058994293212890625 +0.0383206993341445936729350307814 0.0912981986999511774261151231258 -0.0140058994293212890625 +0.0383455485105514554122763115629 -0.00330209992825984980854836514652 0.0319173008203506511359925923443 +0.0383455485105514554122763115629 0.00330209992825984980854836514652 0.0319173008203506511359925923443 +0.0383652012795209912399130303129 -0.118079102039337163754240123126 0.891395097970962502209602007497 +0.0383652012795209912399130303129 0.118079102039337163754240123126 0.891395097970962502209602007497 +0.0384261995553970350791850307814 -0.195770394802093516961605246252 -0.014049999415874481201171875 +0.0384261995553970350791850307814 0.195770394802093516961605246252 -0.014049999415874481201171875 +0.0384785480797290857513104356258 -0.54322840273380279541015625 -0.0769565470516681698898153740629 +0.0384785480797290857513104356258 0.54322840273380279541015625 -0.0769565470516681698898153740629 +0.03848899900913238525390625 -0.15186800062656402587890625 -0.194819748401641845703125 +0.03848899900913238525390625 0.15186800062656402587890625 -0.194819748401641845703125 +0.0384902000427246038238848768742 -0.313879305124282803607371761245 0.149993899464607227667301003748 +0.0384902000427246038238848768742 0.313879305124282803607371761245 0.149993899464607227667301003748 +0.0384975999593734768966513115629 -0.632086420059204123766960492503 0.488860797882080089227230246252 +0.0384975999593734768966513115629 0.632086420059204123766960492503 0.488860797882080089227230246252 +0.0385015010833740234375 -0.0197271004319190985942800153907 -0.0901580989360809409438601846887 +0.0385015010833740234375 0.0197271004319190985942800153907 -0.0901580989360809409438601846887 +0.0385080993175506633430238423443 -0.015838600695133209228515625 -0.0276814997196197509765625 +0.0385080993175506633430238423443 0.015838600695133209228515625 -0.0276814997196197509765625 +0.0385107487440109266807475307814 -0.00411204993724822998046875 -0.0316229999065399183799662807814 +0.0385107487440109266807475307814 0.00411204993724822998046875 -0.0316229999065399183799662807814 +0.0385218009352683993240518134371 -0.138287848234176641293302623126 0.0435034498572349562217631557814 +0.0385218009352683993240518134371 0.138287848234176641293302623126 0.0435034498572349562217631557814 +0.0385832488536834716796875 -0.0305461496114730855777619211722 -0.008846700191497802734375 +0.0385832488536834716796875 0.0305461496114730855777619211722 -0.008846700191497802734375 +0.0385996997356414794921875 -0.0133255004882812510408340855861 0.0912824988365173450866052462516 +0.0385996997356414794921875 0.0133255004882812510408340855861 0.0912824988365173450866052462516 +0.0386056005954742431640625 -0.195885205268859885485710492503 0.0117718003690242770803431326954 +0.0386056005954742431640625 0.195885205268859885485710492503 0.0117718003690242770803431326954 +0.0386249504983425112625283759371 -0.331168940663337685315070757497 0.106466847658157337530582253748 +0.0386249504983425112625283759371 0.331168940663337685315070757497 0.106466847658157337530582253748 +0.0386416494846344021896200615629 0 -0.0317304998636245769172425923443 +0.0386496007442474406867738423443 -0.224252796173095708676115123126 -0.766952800750732466283920985006 +0.0386496007442474406867738423443 0.224252796173095708676115123126 -0.766952800750732466283920985006 +0.0387120008468627985198651231258 -0.225699210166931174548210492503 -0.327965211868286143914730246252 +0.0387120008468627985198651231258 0.225699210166931174548210492503 -0.327965211868286143914730246252 +0.0387163996696472181846537807814 -0.0332338988780975369552450615629 0.0860032021999359158614950615629 +0.0387163996696472181846537807814 0.0332338988780975369552450615629 0.0860032021999359158614950615629 +0.0387471020221710205078125 -0.253172099590301513671875 -0.156213301420211780889957253748 +0.0387471020221710205078125 0.253172099590301513671875 -0.156213301420211780889957253748 +0.0387849003076553358604350307814 -0.0213566005229949978927450615629 0.0232299000024795559982138115629 +0.0387849003076553358604350307814 0.0213566005229949978927450615629 0.0232299000024795559982138115629 +0.0388314992189407390266175923443 -0.0282126009464263929893412807814 0.0140058994293212890625 +0.0388314992189407390266175923443 0.0282126009464263929893412807814 0.0140058994293212890625 +0.03883349895477294921875 -0.0656644999980926513671875 0.2380760014057159423828125 +0.03883349895477294921875 0.0656644999980926513671875 0.2380760014057159423828125 +0.0388612005859613404701313754686 -0.421047186851501442639289507497 0.557861483097076393811164507497 +0.0388612005859613404701313754686 0.421047186851501442639289507497 0.557861483097076393811164507497 +0.0389191001653671278526225307814 -0.0201674506068229703048544365629 -0.0240536496043205275108256557814 +0.0389191001653671278526225307814 0.0201674506068229703048544365629 -0.0240536496043205275108256557814 +0.0390603005886077936370526231258 -0.011907599866390228271484375 -0.0912824988365173450866052462516 +0.0390603005886077936370526231258 0.011907599866390228271484375 -0.0912824988365173450866052462516 +0.0390617512166500091552734375 -0.0283797487616538994525949846093 -0.346653649210929837298778011245 +0.0390617512166500091552734375 0.0283797487616538994525949846093 -0.346653649210929837298778011245 +0.03910259902477264404296875 -0.0309619992971420301963725307814 0.003513149917125701904296875 +0.03910259902477264404296875 0.0309619992971420301963725307814 0.003513149917125701904296875 +0.03910540044307708740234375 -0.0771803975105285755553552462516 0.180316197872161881887720369377 +0.03910540044307708740234375 0.0771803975105285755553552462516 0.180316197872161881887720369377 +0.0391087494790554046630859375 -0.24692200124263763427734375 0 +0.0391087494790554046630859375 0.24692200124263763427734375 0 +0.0391147494316101129729901231258 -0.0131329506635665897024134451954 0.0282411485910415670230744211722 +0.0391147494316101129729901231258 0.0131329506635665897024134451954 0.0282411485910415670230744211722 +0.0391160011291503961761151231258 -0.292818403244018587994190738755 0.743455982208252041942841970013 +0.0391160011291503961761151231258 0.292818403244018587994190738755 0.743455982208252041942841970013 +0.0391518503427505520919638115629 -0.0309592008590698249126393903907 -0.00294330008327961002712047644536 +0.0391518503427505520919638115629 0.0309592008590698249126393903907 -0.00294330008327961002712047644536 +0.0391525506973266629318075615629 0 0.0310979008674621588970143903907 +0.0391552008688449831863565009371 -0.0284480001777410486385466725778 -0.698324894905090309826789507497 +0.0391552008688449831863565009371 0.0284480001777410486385466725778 -0.698324894905090309826789507497 +0.0391552507877349909026776231258 -0.0258983999490737942794638115629 0.0172086998820304877544362653907 +0.0391552507877349909026776231258 0.0258983999490737942794638115629 0.0172086998820304877544362653907 +0.0391555011272430447677450615629 -0.0758647024631500244140625 -0.0520711004734039362151776231258 +0.0391555011272430447677450615629 0.0758647024631500244140625 -0.0520711004734039362151776231258 +0.0391909003257751437088174384371 0 -0.347798848152160611224559261245 +0.0392067998647689860969300923443 -0.35313320159912109375 -0.183738005161285411492855246252 +0.0392067998647689860969300923443 0.35313320159912109375 -0.183738005161285411492855246252 +0.0392295010387897491455078125 -0.49845850467681884765625 0 +0.0392295010387897491455078125 0.49845850467681884765625 0 +0.03923285007476806640625 -0.0234213501214981106857138115629 0.0203033000230789205386994211722 +0.03923285007476806640625 0.0234213501214981106857138115629 0.0203033000230789205386994211722 +0.0392634987831115764289613423443 -0.0783840000629425076583700615629 0.0481072992086410550216513115629 +0.0392634987831115764289613423443 0.0783840000629425076583700615629 0.0481072992086410550216513115629 +0.0392668496817350359817666571871 -0.0461114525794982868522886576557 0.34471990168094635009765625 +0.0392668496817350359817666571871 0.0461114525794982868522886576557 0.34471990168094635009765625 +0.0392870008945465087890625 -0.0941821992397308405120526231258 -0.172006595134735124075220369377 +0.0392870008945465087890625 0.0941821992397308405120526231258 -0.172006595134735124075220369377 +0.0392966002225875882247763115629 -0.16568839550018310546875 -0.104895997047424319181807561563 +0.0392966002225875882247763115629 0.16568839550018310546875 -0.104895997047424319181807561563 +0.0393130987882614191253338731258 -0.0285623997449874905685263115629 -0.0117757499217987070955215855861 +0.0393130987882614191253338731258 0.0285623997449874905685263115629 -0.0117757499217987070955215855861 +0.0393413007259368896484375 -0.00406740009784698538369829279304 -0.0918461978435516357421875 +0.0393413007259368896484375 0.00406740009784698538369829279304 -0.0918461978435516357421875 +0.0393638491630554226974325615629 -0.0123660497367382056499440778907 -0.0282411992549896247173268903907 +0.0393638491630554226974325615629 0.0123660497367382056499440778907 -0.0282411992549896247173268903907 +0.0393786013126373249382261576557 -0.141242551803588856085269753748 -0.0316206000745296450515908759371 +0.0393786013126373249382261576557 0.141242551803588856085269753748 -0.0316206000745296450515908759371 +0.03942359983921051025390625 -0.249242699146270729748664507497 0.162246304750442493780582253748 +0.03942359983921051025390625 0.249242699146270729748664507497 0.162246304750442493780582253748 +0.0394303500652313232421875 -0.121351799368858329075671065311 -0.078860700130462646484375 +0.0394303500652313232421875 0.121351799368858329075671065311 -0.078860700130462646484375 +0.0394329994916915935188050923443 -0.121364200115203865748547684689 0.153999400138854991570980246252 +0.0394329994916915935188050923443 0.121364200115203865748547684689 0.153999400138854991570980246252 +0.0394370991736650508552308735943 -0.218568156659603135549829744377 0.3913726508617401123046875 +0.0394370991736650508552308735943 0.218568156659603135549829744377 0.3913726508617401123046875 +0.0395193010568618829925213731258 -0.0574454009532928480674662807814 0.0716816008090972872635049384371 +0.0395193010568618829925213731258 0.0574454009532928480674662807814 0.0716816008090972872635049384371 +0.0395330995321273859222088731258 -0.00658274963498115591592485529304 0.0298965513706207289268412807814 +0.0395330995321273859222088731258 0.00658274963498115591592485529304 0.0298965513706207289268412807814 +0.0395634010434150681922993442186 -0.200881791114807112252904630623 -0.219274199008941655941740123126 +0.0395634010434150681922993442186 0.200881791114807112252904630623 -0.219274199008941655941740123126 +0.0395925007760524749755859375 -0.516138732433319091796875 -0.54270900785923004150390625 +0.0395925007760524749755859375 0.516138732433319091796875 -0.54270900785923004150390625 +0.0395983502268791170974893134371 -0.101845648884773251618973688437 -0.102759146690368646792634876874 +0.0395983502268791170974893134371 0.101845648884773251618973688437 -0.102759146690368646792634876874 +0.039650999009609222412109375 -0.94782102108001708984375 0.31632900238037109375 +0.039650999009609222412109375 0.94782102108001708984375 0.31632900238037109375 +0.0396849997341632843017578125 -0.17599450051784515380859375 0.173063755035400390625 +0.0396849997341632843017578125 0.17599450051784515380859375 0.173063755035400390625 +0.03970859944820404052734375 -0.0222679495811462409282643903907 -0.020672850310802459716796875 +0.03970859944820404052734375 0.0222679495811462409282643903907 -0.020672850310802459716796875 +0.0397187981754541438728089985943 -0.359420585632324263158920985006 0.414414533972740195544304242503 +0.0397187981754541438728089985943 0.359420585632324263158920985006 0.414414533972740195544304242503 +0.0397251999005675329734721401564 -0.851578107476234413830695757497 0.419208391010761238781867632497 +0.0397251999005675329734721401564 0.851578107476234413830695757497 0.419208391010761238781867632497 +0.0397278994321823147872763115629 -0.0161261498928070082237162807814 0.02572239935398101806640625 +0.0397278994321823147872763115629 0.0161261498928070082237162807814 0.02572239935398101806640625 +0.0397537000477313981483540317186 -0.346866104006767261846988503748 -0.0245692998170852633377236884371 +0.0397537000477313981483540317186 0.346866104006767261846988503748 -0.0245692998170852633377236884371 +0.0397590011358261094520649692186 -0.54974520206451416015625 -0.2370648086071014404296875 +0.0397590011358261094520649692186 0.54974520206451416015625 -0.2370648086071014404296875 +0.0397790998220443683952574076557 -0.142173296213150029965177623126 0.026540100574493408203125 +0.0397790998220443683952574076557 0.142173296213150029965177623126 0.026540100574493408203125 +0.0397877996787428869773783901564 -0.555966430902481101306022992503 -0.334393167495727561266960492503 +0.0397877996787428869773783901564 0.555966430902481101306022992503 -0.334393167495727561266960492503 +0.0398092478513717637489399692186 -0.057927601039409637451171875 0.13251270353794097900390625 +0.0398092478513717637489399692186 0.057927601039409637451171875 0.13251270353794097900390625 +0.0398469001054763821700888115629 -0.0453985005617141765266175923443 -0.0796944022178650013366052462516 +0.0398469001054763821700888115629 0.0453985005617141765266175923443 -0.0796944022178650013366052462516 +0.03985335119068622589111328125 -0.316037258505821261334034488755 0.317855688929557789190738503748 +0.03985335119068622589111328125 0.316037258505821261334034488755 0.317855688929557789190738503748 +0.0398719012737274169921875 -0.0264564990997314467002787807814 -0.0145011499524116526521622105861 +0.0398719012737274169921875 0.0264564990997314467002787807814 -0.0145011499524116526521622105861 +0.0398882020264864009528871235943 -0.544741448760032720421975227509 0.0645424984395503997802734375 +0.0398882020264864009528871235943 0.544741448760032720421975227509 0.0645424984395503997802734375 +0.039906799793243408203125 -0.165421402454376226254240123126 0.105086600780487066097990123126 +0.039906799793243408203125 0.165421402454376226254240123126 0.105086600780487066097990123126 +0.0399256512522697462608256557814 -0.122880747914314261692858565311 0.0761988043785095242599325615629 +0.0399256512522697462608256557814 0.122880747914314261692858565311 0.0761988043785095242599325615629 +0.0399492494761943817138671875 -0.18948249518871307373046875 -0.15811525285243988037109375 +0.0399492494761943817138671875 0.18948249518871307373046875 -0.15811525285243988037109375 +0.0399771004915237399002236884371 -0.0589230000972747747223223768742 0.291427195072174072265625 +0.0399771004915237399002236884371 0.0589230000972747747223223768742 0.291427195072174072265625 +0.039992250502109527587890625 -0.01649699918925762176513671875 0.24622850120067596435546875 +0.039992250502109527587890625 0.01649699918925762176513671875 0.24622850120067596435546875 +0.0399940490722656277755575615629 -0.00897964984178543056125842980464 -0.0286329001188278219058869211722 +0.0399940490722656277755575615629 0.00897964984178543056125842980464 -0.0286329001188278219058869211722 +0.0400121003389358534385600307814 -0.0169558495283126837993581403907 -0.0247291505336761502364950615629 +0.0400121003389358534385600307814 0.0169558495283126837993581403907 -0.0247291505336761502364950615629 +0.04004944860935211181640625 -0.0290975004434585599044638115629 0.00702679976820945809135032789072 +0.04004944860935211181640625 0.0290975004434585599044638115629 0.00702679976820945809135032789072 +0.0400642491877079010009765625 -0.09039674699306488037109375 -0.22961549460887908935546875 +0.0400642491877079010009765625 0.09039674699306488037109375 -0.22961549460887908935546875 +0.0401692003011703546722088731258 -0.0291844487190246609786825615629 -0.00589094981551170366468328509768 +0.0401692003011703546722088731258 0.0291844487190246609786825615629 -0.00589094981551170366468328509768 +0.0401722989976406041900958143742 -0.347076806426048267706363503748 0.0205897999927401528785786410936 +0.0401722989976406041900958143742 0.347076806426048267706363503748 0.0205897999927401528785786410936 +0.0402365505695343045333700615629 -0.024221800267696380615234375 -0.01715590059757232666015625 +0.0402365505695343045333700615629 0.024221800267696380615234375 -0.01715590059757232666015625 +0.0402638502418994903564453125 -0.492066767811775163110610264994 -0.811633434891700700219985264994 +0.0402638502418994903564453125 0.492066767811775163110610264994 -0.811633434891700700219985264994 +0.040283501148223876953125 -0.0619180023670196574836488423443 -0.0674048006534576499282351846887 +0.040283501148223876953125 0.0619180023670196574836488423443 -0.0674048006534576499282351846887 +0.0403068020939826923698667826557 -0.144098103046417236328125 -0.010539449751377105712890625 +0.0403068020939826923698667826557 0.144098103046417236328125 -0.010539449751377105712890625 +0.0403353989124298137336488423443 0 0.0915044009685516412933026231258 +0.0403604000806808485557475307814 -0.0457792013883590725997763115629 -0.19046080112457275390625 +0.0403604000806808485557475307814 0.0457792013883590725997763115629 -0.19046080112457275390625 +0.0403694499284029048591371235943 -0.531653636693954489977897992503 0.134962851554155355282560435626 +0.0403694499284029048591371235943 0.531653636693954489977897992503 0.134962851554155355282560435626 +0.0404235988855361980109925923443 -0.00551914982497692108154296875 -0.0289045512676239027549662807814 +0.0404235988855361980109925923443 0.00551914982497692108154296875 -0.0289045512676239027549662807814 +0.0404310017824172987510600307814 -0.144178202748298650570646373126 0.00882990024983882834663795335928 +0.0404310017824172987510600307814 0.144178202748298650570646373126 0.00882990024983882834663795335928 +0.0404509007930755615234375 -0.0293891489505767843082306711722 0 +0.0404509007930755615234375 0.0293891489505767843082306711722 0 +0.0404588997364044231086488423443 -0.0848025977611541748046875 -0.0342287003993988064864950615629 +0.0404588997364044231086488423443 0.0848025977611541748046875 -0.0342287003993988064864950615629 +0.0404635488986969035773988423443 -0.00982054993510246380938877308608 0.0276814013719558736636994211722 +0.0404635488986969035773988423443 0.00982054993510246380938877308608 0.0276814013719558736636994211722 +0.04046694934368133544921875 -0.0183012500405311598350444057814 0.0229671493172645575786550153907 +0.04046694934368133544921875 0.0183012500405311598350444057814 0.0229671493172645575786550153907 +0.0404695987701416057258363423443 -0.00329939983785152443976351754884 0.0291774988174438483501393903907 +0.0404695987701416057258363423443 0.00329939983785152443976351754884 0.0291774988174438483501393903907 +0.0404933989048004150390625 -0.271748703718185435906917746252 -0.120469799637794486302233565311 +0.0404933989048004150390625 0.271748703718185435906917746252 -0.120469799637794486302233565311 +0.0404966013506054892112651089064 -0.124639052152633655889957253748 0.940917047858238153601462272491 +0.0404966013506054892112651089064 0.124639052152633655889957253748 0.940917047858238153601462272491 +0.04050014913082122802734375 -0.0923177987337112371246661268742 0.111072903871536246556139815311 +0.04050014913082122802734375 0.0923177987337112371246661268742 0.111072903871536246556139815311 +0.0405252009630203205436949076557 -0.0665926516056060818771200615629 -0.128152647614479059390291126874 +0.0405252009630203205436949076557 0.0665926516056060818771200615629 -0.128152647614479059390291126874 +0.0406066000461578410773988423443 -0.17820060253143310546875 -0.0812134027481079129318075615629 +0.0406066000461578410773988423443 0.17820060253143310546875 -0.0812134027481079129318075615629 +0.040614001452922821044921875 -0.124998748302459716796875 0.2126635015010833740234375 +0.040614001452922821044921875 0.124998748302459716796875 0.2126635015010833740234375 +0.040646851062774658203125 -0.00206240005791187303724187884768 -0.029044449329376220703125 +0.040646851062774658203125 0.00206240005791187303724187884768 -0.029044449329376220703125 +0.0406801998615264892578125 -0.0198578998446464552452006557814 0.0891672015190124594985476846887 +0.0406801998615264892578125 0.0198578998446464552452006557814 0.0891672015190124594985476846887 +0.0407204508781433133224325615629 -0.0270323991775512709190287807814 0.0105402000248432173301615932814 +0.0407204508781433133224325615629 0.0270323991775512709190287807814 0.0105402000248432173301615932814 +0.0407357990741729694694761576557 -0.576712203025817826684829014994 -0.160447794198989857061832253748 +0.0407357990741729694694761576557 0.576712203025817826684829014994 -0.160447794198989857061832253748 +0.0407646015286445631553569057814 -0.0296172000467777273013947336722 0.447169947624206531866519753748 +0.0407646015286445631553569057814 0.0296172000467777273013947336722 0.447169947624206531866519753748 +0.0407700002193450983245526231258 -0.0396770000457763727386151231258 0.191738200187683116570980246252 +0.0407700002193450983245526231258 0.0396770000457763727386151231258 0.191738200187683116570980246252 +0.0407839503139257458785849053129 -0.0663349516689777374267578125 -0.44321130216121673583984375 +0.0407839503139257458785849053129 0.0663349516689777374267578125 -0.44321130216121673583984375 +0.04087150096893310546875 -0.0865871012210845947265625 0.02884779870510101318359375 +0.04087150096893310546875 0.0865871012210845947265625 0.02884779870510101318359375 +0.0409036999568343148658833285936 -0.671591821312904291296774772491 0.519414597749710105212272992503 +0.0409036999568343148658833285936 0.671591821312904291296774772491 0.519414597749710105212272992503 +0.0409135997295379666427450615629 -0.0136630997061729445030131557814 -0.0252862989902496344829518903907 +0.0409135997295379666427450615629 0.0136630997061729445030131557814 -0.0252862989902496344829518903907 +0.0409461498260498060752787807814 -0.0190858006477355977847931711722 -0.0214276492595672635177450615629 +0.0409461498260498060752787807814 0.0190858006477355977847931711722 -0.0214276492595672635177450615629 +0.040974199771881103515625 -0.0272552490234375006938893903907 -0.008846700191497802734375 +0.040974199771881103515625 0.0272552490234375006938893903907 -0.008846700191497802734375 +0.0409893512725830119758363423443 -0.0204141497611999532535431711722 0.0200782001018524197677450615629 +0.0409893512725830119758363423443 0.0204141497611999532535431711722 0.0200782001018524197677450615629 +0.040989898145198822021484375 0 0.144290846586227400338842130623 +0.0409951001405715956260600307814 -0.03996039927005767822265625 0.0819913029670715359786825615629 +0.0409951001405715956260600307814 0.03996039927005767822265625 0.0819913029670715359786825615629 +0.0409976005554199274261151231258 -0.374419188499450716900440738755 -0.134645998477935791015625 +0.0409976005554199274261151231258 0.374419188499450716900440738755 -0.134645998477935791015625 +0.0410494491457939134071430942186 -0.291365092992782626080128238755 -0.579587468504905722888054242503 +0.0410494491457939134071430942186 0.291365092992782626080128238755 -0.579587468504905722888054242503 +0.0410652007907629026939311245314 -0.238268595933914167916967130623 -0.814887350797653176037727007497 +0.0410652007907629026939311245314 0.238268595933914167916967130623 -0.814887350797653176037727007497 +0.0410975486040115398078675923443 -0.0248219504952430745914337961722 0.0139593005180358893657643903907 +0.0410975486040115398078675923443 0.0248219504952430745914337961722 0.0139593005180358893657643903907 +0.0411040484905242919921875 -0.0298638001084327690815012346093 0.141133350133895857370092130623 +0.0411040484905242919921875 0.0298638001084327690815012346093 0.141133350133895857370092130623 +0.0411281023174524321128764370314 -0.53973074257373809814453125 0.359860154986381519659488503748 +0.0411281023174524321128764370314 0.53973074257373809814453125 0.359860154986381519659488503748 +0.04113090038299560546875 -0.0129944995045661940147319057814 0.0252862006425857571700888115629 +0.04113090038299560546875 0.0129944995045661940147319057814 0.0252862006425857571700888115629 +0.0411531001329422038703675923443 -0.06222879886627197265625 0.0665883004665374783614950615629 +0.0411531001329422038703675923443 0.06222879886627197265625 0.0665883004665374783614950615629 +0.0411531016230583177040180942186 -0.0298990510404109934017302663278 -0.14111159741878509521484375 +0.0411531016230583177040180942186 0.0298990510404109934017302663278 -0.14111159741878509521484375 +0.0411834016442298861404580634371 -0.2562780082225799560546875 0.540948593616485617907585492503 +0.0411834016442298861404580634371 0.2562780082225799560546875 0.540948593616485617907585492503 +0.0412090003490448025802450615629 0 0.0283163994550704976871369211722 +0.0412203997373580960372763115629 0 0.195706200599670421258480246252 +0.0412564516067504896690287807814 -0.347656506299972523077457253748 -0.28272373974323272705078125 +0.0412564516067504896690287807814 0.347656506299972523077457253748 -0.28272373974323272705078125 +0.04125835001468658447265625 -0.173752245306968672311498380623 -0.301011541485786404681590511245 +0.04125835001468658447265625 0.173752245306968672311498380623 -0.301011541485786404681590511245 +0.0412692490965127986579652485943 -0.345568841695785555767628238755 -0.425885903835296675268295985006 +0.0412692490965127986579652485943 0.345568841695785555767628238755 -0.425885903835296675268295985006 +0.0412887990474700983245526231258 -0.022412799298763275146484375 0.0171142995357513420795481096093 +0.0412887990474700983245526231258 0.022412799298763275146484375 0.0171142995357513420795481096093 +0.0413168996572494534591513115629 -0.0382678002119064344932475307814 -0.0826346993446350208678552462516 +0.0413168996572494534591513115629 0.0382678002119064344932475307814 -0.0826346993446350208678552462516 +0.0413765013217926025390625 -0.476227384805679332391292746252 0.272021196782588958740234375 +0.0413765013217926025390625 0.476227384805679332391292746252 0.272021196782588958740234375 +0.0413855999708175673057475307814 0 0.297131699323654185906917746252 +0.0413965478539466899543519673443 -0.127408452332019805908203125 0.636045151948928855212272992503 +0.0413965478539466899543519673443 0.127408452332019805908203125 0.636045151948928855212272992503 +0.0414444990456104278564453125 -0.1933625042438507080078125 -0.4592309892177581787109375 +0.0414444990456104278564453125 0.1933625042438507080078125 -0.4592309892177581787109375 +0.0414577513933181776573100307814 -0.127595999836921686343416126874 0.067082248628139495849609375 +0.0414577513933181776573100307814 0.127595999836921686343416126874 0.067082248628139495849609375 +0.0414591014385223347038511576557 -0.127595999836921686343416126874 -0.2683289945125579833984375 +0.0414591014385223347038511576557 0.127595999836921686343416126874 -0.2683289945125579833984375 +0.0414597004652023301551899692186 -0.2853164970874786376953125 -0.0829190969467163002670773153113 +0.0414597004652023301551899692186 0.2853164970874786376953125 -0.0829190969467163002670773153113 +0.0414846003055572495887837192186 0 0.598564195632934503699118522491 +0.0415295988321304279655699076557 -0.1278119981288909912109375 -0.584755790233612016137954014994 +0.0415295988321304279655699076557 0.1278119981288909912109375 -0.584755790233612016137954014994 +0.0415300995111465495734925923443 -0.0276208013296127333213725307814 0.003513149917125701904296875 +0.0415300995111465495734925923443 0.0276208013296127333213725307814 0.003513149917125701904296875 +0.0415378987789154080489950615629 -0.00658740028738975542249578509768 0.0270408511161804206157643903907 +0.0415378987789154080489950615629 0.00658740028738975542249578509768 0.0270408511161804206157643903907 +0.0415426999330520685393963731258 -0.0276684492826461819747763115629 -0.00294330008327961002712047644536 +0.0415426999330520685393963731258 0.0276684492826461819747763115629 -0.00294330008327961002712047644536 +0.0415533006191253703742738423443 -0.0252102494239807156661825615629 -0.0117374502122402201570450230861 +0.0415533006191253703742738423443 0.0252102494239807156661825615629 -0.0117374502122402201570450230861 +0.0415607511997222872635049384371 -0.311119553446769725457698996252 0.789921981096267655786391514994 +0.0415607511997222872635049384371 0.311119553446769725457698996252 0.789921981096267655786391514994 +0.04160650074481964111328125 -0.0211179003119468695903737653907 -0.0179703995585441603233256557814 +0.04160650074481964111328125 0.0211179003119468695903737653907 -0.0179703995585441603233256557814 +0.0416192501783370985557475307814 -0.010304950177669525146484375 -0.0257224500179290792301056711722 +0.0416192501783370985557475307814 0.010304950177669525146484375 -0.0257224500179290792301056711722 +0.04163224995136260986328125 -0.21743024885654449462890625 -0.116149999201297760009765625 +0.04163224995136260986328125 0.21743024885654449462890625 -0.116149999201297760009765625 +0.041637000627815723419189453125 -0.451121985912322998046875 0.5977087318897247314453125 +0.041637000627815723419189453125 0.451121985912322998046875 0.5977087318897247314453125 +0.0416435986757278456260600307814 -0.299772405624389670641960492503 0.261538791656494129522769753748 +0.0416435986757278456260600307814 0.299772405624389670641960492503 0.261538791656494129522769753748 +0.0416597992181777995734925923443 -0.0884759008884429959396200615629 -0.020892299711704254150390625 +0.0416597992181777995734925923443 0.0884759008884429959396200615629 -0.020892299711704254150390625 +0.0416847504675388336181640625 -0.030285499989986419677734375 -0.2446327507495880126953125 +0.0416847504675388336181640625 0.030285499989986419677734375 -0.2446327507495880126953125 +0.0416888505220413194130024692186 -0.277425742149353005139289507497 0.20927725732326507568359375 +0.0416888505220413194130024692186 0.277425742149353005139289507497 0.20927725732326507568359375 +0.0417172998189926161338725307814 -0.0891741991043090848068075615629 0.017539300024509429931640625 +0.0417172998189926161338725307814 0.0891741991043090848068075615629 0.017539300024509429931640625 +0.04176039993762969970703125 -0.38894760608673095703125 -0.0835211992263794056334802462516 +0.04176039993762969970703125 0.38894760608673095703125 -0.0835211992263794056334802462516 +0.0417984992265701335578675923443 -0.0705231010913848904708700615629 -0.0572659015655517592002787807814 +0.0417984992265701335578675923443 0.0705231010913848904708700615629 -0.0572659015655517592002787807814 +0.0418159998953342437744140625 -0.896398007869720458984375 0.4412719905376434326171875 +0.0418159998953342437744140625 0.896398007869720458984375 0.4412719905376434326171875 +0.0418680012226104736328125 -0.128854405879974376336605246252 -0.376355600357055675164730246252 +0.0418680012226104736328125 0.128854799270629899465845369377 -0.376355600357055675164730246252 +0.0419167995452880901008363423443 -0.129008400440216081106470369377 0.37629759311676025390625 +0.0419167995452880901008363423443 0.129008400440216081106470369377 0.37629759311676025390625 +0.0419460505247116130500550923443 -0.0151899501681327826763112653907 0.0225786507129669203330912807814 +0.0419460505247116130500550923443 0.0151899501681327826763112653907 0.0225786507129669203330912807814 +0.04195200093090534210205078125 -0.030480000190436840057373046875 -0.748205244541168212890625 +0.04195200093090534210205078125 0.030480000190436840057373046875 -0.748205244541168212890625 +0.0419528990983963068206463731258 -0.0905831992626190268813601846887 0.00588590018451213854017156634768 +0.0419528990983963068206463731258 0.0905831992626190268813601846887 0.00588590018451213854017156634768 +0.0419765979051589938064736884371 -0.592612802982330322265625 -0.0839525967836379921616085653113 +0.0419765979051589938064736884371 0.592612802982330322265625 -0.0839525967836379921616085653113 +0.0419802010059356703330912807814 -0.0158386498689651496196706403907 -0.0220635503530502326274831403907 +0.0419802010059356703330912807814 0.0158386498689651496196706403907 -0.0220635503530502326274831403907 +0.0419803500175476088096537807814 -0.0230130493640899672080912807814 -0.014423899352550506591796875 +0.0419803500175476088096537807814 0.0230130493640899672080912807814 -0.014423899352550506591796875 +0.0419842489063739776611328125 -0.508366647362709089819077235006 0.205671404302120219842464621252 +0.0419842489063739776611328125 0.508366647362709089819077235006 0.205671404302120219842464621252 +0.0419919013977050822883363423443 -0.0904838979244232261001101846887 -0.0070249997079372406005859375 +0.0419919013977050822883363423443 0.0904838979244232261001101846887 -0.0070249997079372406005859375 +0.0420073483139276546149964985943 -0.448925384879112265856804242503 -0.314963015913963362280014735006 +0.0420073483139276546149964985943 0.448925384879112265856804242503 -0.314963015913963362280014735006 +0.0420082479715347262283486884371 -0.0181784994900226586078684221093 -0.142845448851585371530248380623 +0.0420082479715347262283486884371 0.0181784994900226586078684221093 -0.142845448851585371530248380623 +0.0420175999402999933440838731258 -0.129314398765563970394865123126 -0.146670794486999517269865123126 +0.0420175999402999933440838731258 0.129314398765563970394865123126 -0.146670794486999517269865123126 +0.04204680025577545166015625 -0.171969199180603049548210492503 0.0930519998073577880859375 +0.04204680025577545166015625 0.171969199180603049548210492503 0.0930519998073577880859375 +0.0420509986579418182373046875 -0.010160249657928943634033203125 -0.24622850120067596435546875 +0.0420509986579418182373046875 0.010160249657928943634033203125 -0.24622850120067596435546875 +0.0421257495880126980880575615629 -0.00689750015735626255397594519536 -0.0260354489088058492496369211722 +0.0421257495880126980880575615629 0.00689750015735626255397594519536 -0.0260354489088058492496369211722 +0.0422209985554218292236328125 -0.129944503307342529296875 0.480969488620758056640625 +0.0422209985554218292236328125 0.129944503307342529296875 0.480969488620758056640625 +0.042228899896144866943359375 -0.00610140021890401805515491417964 -0.143803650140762323550447376874 +0.042228899896144866943359375 0.00610140021890401805515491417964 -0.143803650140762323550447376874 +0.0422320008277893080284037807814 -0.550547981262207053454460492503 -0.5788896083831787109375 +0.0422320008277893080284037807814 0.550547981262207053454460492503 -0.5788896083831787109375 +0.0423240005970001234580912807814 -0.0812165975570678794204226846887 -0.04015649855136871337890625 +0.0423240005970001234580912807814 0.0812165975570678794204226846887 -0.04015649855136871337890625 +0.0423310518264770480056924384371 -0.130279648303985584600894753748 -0.0611170515418052659462055942186 +0.0423310518264770480056924384371 0.130279648303985584600894753748 -0.0611170515418052659462055942186 +0.0423329502344131497482138115629 -0.0256686508655548095703125 0.00700294971466064453125 +0.0423329502344131497482138115629 0.0256686508655548095703125 0.00700294971466064453125 +0.042337000370025634765625 -0.00980070009827613969344284328145 0.024729050695896148681640625 +0.042337000370025634765625 0.00980070009827613969344284328145 0.024729050695896148681640625 +0.04238300025463104248046875 -0.517965018749237060546875 -0.854350984096527099609375 +0.04238300025463104248046875 0.517965018749237060546875 -0.854350984096527099609375 +0.042397201061248779296875 -0.157178604602813742907585492503 -0.116177999973297127467297684689 +0.042397201061248779296875 0.157178604602813742907585492503 -0.116177999973297127467297684689 +0.0424104005098342937141175923443 -0.183008599281311051809595369377 0.068623602390289306640625 +0.0424104005098342937141175923443 0.183008599281311051809595369377 0.068623602390289306640625 +0.0424143999814987210372763115629 -0.00329084992408752458753484759768 0.0262714505195617703536825615629 +0.0424143999814987210372763115629 0.00329084992408752458753484759768 0.0262714505195617703536825615629 +0.0424214512109756525237713731258 -0.0258058995008468641807475307814 -0.00587154999375343392142845289072 +0.0424214512109756525237713731258 0.0258058995008468641807475307814 -0.00587154999375343392142845289072 +0.0424219012260437025596537807814 -0.0553366005420684869964276231258 -0.0716816008090972872635049384371 +0.0424219012260437025596537807814 0.0553366005420684869964276231258 -0.0716816008090972872635049384371 +0.0424306005239486749847088731258 -0.00345700010657310494513461129884 -0.0262239009141922024825888115629 +0.0424306005239486749847088731258 0.00345700010657310494513461129884 -0.0262239009141922024825888115629 +0.04247780144214630126953125 -0.07995259761810302734375 -0.178334605693817149774105246252 +0.04247780144214630126953125 0.07995259761810302734375 -0.178334605693817149774105246252 +0.0424944996833801283409037807814 -0.0830811023712158258636151231258 0.0359407991170883206466513115629 +0.0424944996833801283409037807814 0.0830811023712158258636151231258 0.0359407991170883206466513115629 +0.0425323009490966852386151231258 -0.0309011012315750129009206403907 -0.0850654006004333551604901231258 +0.0425323009490966852386151231258 0.0309011012315750129009206403907 -0.0850654006004333551604901231258 +0.04253239929676055908203125 0 -0.0262867987155914334396200615629 +0.0425462007522583035568075615629 -0.0173075497150421142578125 0.0197552993893623379806356865629 +0.0425462007522583035568075615629 0.0173075497150421142578125 0.0197552993893623379806356865629 +0.0425478011369705214073100307814 -0.0667499005794525146484375 0.0611075997352600111534037807814 +0.0425478011369705214073100307814 0.0667499005794525146484375 0.0611075997352600111534037807814 +0.0426280014216899871826171875 -0.13119900226593017578125 0.990438997745513916015625 +0.0426280014216899871826171875 0.13119900226593017578125 0.990438997745513916015625 +0.0426288008689880426604901231258 -0.13120019435882568359375 0.144807803630828874075220369377 +0.0426288008689880426604901231258 0.13120019435882568359375 0.144807803630828874075220369377 +0.0426320999860763591438050923443 -0.0261247992515563978721537807814 0 +0.0426320999860763591438050923443 0.0261247992515563978721537807814 0 +0.0426488012075424208213725307814 -0.290117192268371570929019753748 -0.272053194046020518914730246252 +0.0426488012075424208213725307814 0.290117192268371570929019753748 -0.272053194046020518914730246252 +0.0427439004182815565635600307814 -0.006670899689197540283203125 0.0901579022407531793792401231258 +0.0427439004182815565635600307814 0.006670899689197540283203125 0.0901579022407531793792401231258 +0.0427738010883331326583700615629 -0.0179112002253532416606862653907 -0.0186973497271537801578400461722 +0.0427738010883331326583700615629 0.0179112002253532416606862653907 -0.0186973497271537801578400461722 +0.0427859984338283538818359375 -0.230969250202178955078125 -0.08557175099849700927734375 +0.0427859984338283538818359375 0.230969250202178955078125 -0.08557175099849700927734375 +0.0427908003330230712890625 -0.0557613015174865736534037807814 -0.13251270353794097900390625 +0.0427908003330230712890625 0.0557613015174865736534037807814 -0.13251270353794097900390625 +0.0428037017583847018142861884371 -0.0994256973266601506988848768742 0.103838253021240237150557561563 +0.0428037017583847018142861884371 0.0994256973266601506988848768742 0.103838253021240237150557561563 +0.0428483996540307970901650946871 -0.598733079433441117700454014994 -0.360115718841552689966079014994 +0.0428483996540307970901650946871 0.598733079433441117700454014994 -0.360115718841552689966079014994 +0.0428541511297226007659588731258 -0.0235457003116607693771200615629 0.0104461498558521270751953125 +0.0428541511297226007659588731258 0.0235457003116607693771200615629 0.0104461498558521270751953125 +0.0428635507822036770919638115629 -0.0123660996556282046926478201954 -0.0225786998867988607242462961722 +0.0428635507822036770919638115629 0.0123660996556282046926478201954 -0.0225786998867988607242462961722 +0.0429174005985260009765625 -0.0888920009136199978927450615629 0.17394340038299560546875 +0.0429174005985260009765625 0.0888920009136199978927450615629 0.17394340038299560546875 +0.0429222017526626545280699076557 -0.259478098154067970959602007497 0.14432220160961151123046875 +0.0429222017526626545280699076557 0.259478098154067970959602007497 0.14432220160961151123046875 +0.0429282009601593059211488423443 -0.019336350262165069580078125 0.0168307006359100334857981096093 +0.0429282009601593059211488423443 0.019336350262165069580078125 0.0168307006359100334857981096093 +0.0429936021566390963455361884371 -0.196984505653381353207365123126 0.222145503759384160824552623126 +0.0429936021566390963455361884371 0.196984505653381353207365123126 0.222145503759384160824552623126 +0.0430011987686157240440287807814 -0.0464210003614425673057475307814 0.0774338006973266657073651231258 +0.0430011987686157240440287807814 0.0464210003614425673057475307814 0.0774338006973266657073651231258 +0.0430350020527839674522319057814 -0.0928852468729019081772335653113 -0.109637099504470827970870061563 +0.0430350020527839674522319057814 0.0928852468729019081772335653113 -0.109637099504470827970870061563 +0.0430682003498077392578125 0 0.0253993511199951185752787807814 +0.0430722512304782881309428432814 -0.5955573022365570068359375 -0.256820209324359893798828125 +0.0430722512304782881309428432814 0.5955573022365570068359375 -0.256820209324359893798828125 +0.0430828005075454753547425923443 -0.023811049759387969970703125 -0.0087696500122547149658203125 +0.0430828005075454753547425923443 0.023811049759387969970703125 -0.0087696500122547149658203125 +0.0430902004241943414886151231258 -0.0212660998106002814556081403907 0.0138198003172874464561381557814 +0.0430902004241943414886151231258 0.0212660998106002814556081403907 0.0138198003172874464561381557814 +0.0430983021855354322959819057814 -0.288581407070159889904914507497 0.0697367995977401650131710653113 +0.0430983021855354322959819057814 0.288581407070159889904914507497 0.0697367995977401650131710653113 +0.0431524511426687254478373745314 -0.548304355144500821239716970013 0 +0.0431524511426687254478373745314 0.548304355144500821239716970013 0 +0.0431676015257835346550230326557 -0.132858601212501509225560880623 0.265490394830703746453792746252 +0.0431676015257835346550230326557 0.132858601212501509225560880623 0.265490394830703746453792746252 +0.0431985005736350985428018134371 -0.0681386992335319546798544365629 0.126455551385879522152677623126 +0.0431985005736350985428018134371 0.0681386992335319546798544365629 0.126455551385879522152677623126 +0.0432725012302398737151776231258 -0.0118613496422767649568497105861 0.0220634996891021749332306711722 +0.0432725012302398737151776231258 0.0118613496422767649568497105861 0.0220634996891021749332306711722 +0.0432893007993698161750550923443 -0.0198672503232955946494975307814 -0.0152095496654510511924662807814 +0.0432893007993698161750550923443 0.0198672503232955946494975307814 -0.0152095496654510511924662807814 +0.0433097999542951597740092495314 -0.711097222566604680871193977509 0.549968397617340065686164507497 +0.0433097999542951597740092495314 0.711097222566604680871193977509 0.549968397617340065686164507497 +0.0433295980095863356162944057814 -0.392095184326171852795539507497 0.452088582515716541632144753748 +0.0433295980095863356162944057814 0.392095184326171852795539507497 0.452088582515716541632144753748 +0.0433404505252838190276776231258 -0.00656000003218650852565563269536 0.0240535005927085890342631557814 +0.0433404505252838190276776231258 0.00656000003218650852565563269536 0.0240535005927085890342631557814 +0.0433407992124557536750550923443 -0.391411995887756380962940738755 0.0701291978359222384353799384371 +0.0433407992124557536750550923443 0.391411995887756380962940738755 0.0701291978359222384353799384371 +0.0433635011315345736404580634371 -0.276575392484664894787727007497 0.107822397351264948062166126874 +0.0433635011315345736404580634371 0.276575392484664894787727007497 0.107822397351264948062166126874 +0.0434561982750892653037944057814 -0.240903300046920759713842130623 -0.173427897691726673468082253748 +0.0434561982750892653037944057814 0.240903300046920759713842130623 -0.173427897691726673468082253748 +0.0434808008372783647010884067186 -0.252284395694732654913394753748 -0.862821900844573996813835492503 +0.0434808008372783647010884067186 0.252284395694732654913394753748 -0.862821900844573996813835492503 +0.0434854000806808513313050923443 -0.023344099521636962890625 -0.086971700191497802734375 +0.0434854000806808513313050923443 0.023344099521636962890625 -0.086971700191497802734375 +0.04349569976329803466796875 -0.00897964984178543056125842980464 -0.0229671999812126187423544365629 +0.04349569976329803466796875 0.00897964984178543056125842980464 -0.0229671999812126187423544365629 +0.0435144022107124342491069057814 -0.594263398647308371813835492503 0.07040999829769134521484375 +0.0435144022107124342491069057814 0.594263398647308371813835492503 0.07040999829769134521484375 +0.0435188993811607346962055942186 -0.133938896656036365850894753748 0.0516377985477447509765625 +0.0435188993811607346962055942186 0.133938896656036365850894753748 0.0516377985477447509765625 +0.0435232490301132243781800923443 -0.0216941505670547492290456403907 -0.0116227999329566959035853201954 +0.0435232490301132243781800923443 0.0216941505670547492290456403907 -0.0116227999329566959035853201954 +0.0435434989631175994873046875 -0.1874452531337738037109375 0.15958775579929351806640625 +0.0435434989631175994873046875 0.1874452531337738037109375 0.15958775579929351806640625 +0.0435510009527206448654013115629 -0.253911611437797557488948996252 -0.368960863351821932720753238755 +0.0435510009527206448654013115629 0.253911611437797557488948996252 -0.368960863351821932720753238755 +0.0435665979981422410438618442186 -0.11405999958515167236328125 -0.0871334999799728421310263115629 +0.0435665979981422410438618442186 0.11405999958515167236328125 -0.0871334999799728421310263115629 +0.0435714006423950223068075615629 -0.0265516012907028205181081403907 0.0860032021999359158614950615629 +0.0435714006423950223068075615629 0.0265516012907028205181081403907 0.0860032021999359158614950615629 +0.04357869923114776611328125 -0.0242602497339248664165456403907 0.00351249985396862030029296875 +0.04357869923114776611328125 0.0242602497339248664165456403907 0.00351249985396862030029296875 +0.0435921013355255182464276231258 -0.0243118494749069227744975307814 -0.00294295009225606927008578317384 +0.0435921013355255182464276231258 0.0243118494749069227744975307814 -0.00294295009225606927008578317384 +0.0436240009963512406776509067186 -0.134263503551483143194644753748 0.320265758037567127569644753748 +0.0436240009963512406776509067186 0.134263503551483143194644753748 0.320265758037567127569644753748 +0.0436298012733459528167401231258 -0.187025797367095958367855246252 -0.0558372020721435574630575615629 +0.0436298012733459528167401231258 0.187025797367095958367855246252 -0.0558372020721435574630575615629 +0.0436857014894485445877236884371 -0.0562286987900733961631694057814 -0.291427195072174072265625 +0.0436857014894485445877236884371 0.0562286987900733961631694057814 -0.291427195072174072265625 +0.0436874985694885309417401231258 -0.0708966016769409235198651231258 0.0553631007671356242805238423443 +0.0436874985694885309417401231258 0.0708966016769409235198651231258 0.0553631007671356242805238423443 +0.04372920095920562744140625 -0.220979189872741704769865123126 0.330538797378540083471420985006 +0.04372920095920562744140625 0.220979189872741704769865123126 0.330538797378540083471420985006 +0.0437980502843856867034588731258 -0.0144962504506111148488978201954 -0.0192766502499580397178569057814 +0.0437980502843856867034588731258 0.0144962504506111148488978201954 -0.0192766502499580397178569057814 +0.0438149988651275676398988423443 -0.0790167987346649253188601846887 0.0428553998470306424239950615629 +0.0438149988651275676398988423443 0.0790167987346649253188601846887 0.0428553998470306424239950615629 +0.0438189990818500518798828125 -0.24285350739955902099609375 0.434858500957489013671875 +0.0438189990818500518798828125 0.24285350739955902099609375 0.434858500957489013671875 +0.0438957512378692626953125 -0.081215001642704010009765625 0.2323299944400787353515625 +0.0438957512378692626953125 0.081215001642704010009765625 0.2323299944400787353515625 +0.0439172498881816864013671875 -0.13516099750995635986328125 -0.205676496028900146484375 +0.0439172498881816864013671875 0.13516099750995635986328125 -0.205676496028900146484375 +0.0439307510852813762336488423443 -0.00551914982497692108154296875 -0.0232299000024795559982138115629 +0.0439307510852813762336488423443 0.00551914982497692108154296875 -0.0232299000024795559982138115629 +0.04395414888858795166015625 -0.0140158504247665412212331403907 0.0192765995860099820236044365629 +0.04395414888858795166015625 0.0140158504247665412212331403907 0.0192765995860099820236044365629 +0.0439626008272171048263388115629 -0.0771835982799530112563601846887 -0.0459345012903213528732138115629 +0.0439626008272171048263388115629 0.0771835982799530112563601846887 -0.0459345012903213528732138115629 +0.0439888000488281305511151231258 -0.358719205856323275494190738755 0.171421599388122569695980246252 +0.0439888000488281305511151231258 0.358719205856323275494190738755 0.171421599388122569695980246252 +0.0439890481531619997879190009371 -0.0893116027116775401673010037484 -0.335541850328445412365852007497 +0.0439890481531619997879190009371 0.0893116027116775401673010037484 -0.335541850328445412365852007497 +0.0440055012702941922286825615629 -0.329420703649520862921207253748 0.836387979984283491674545985006 +0.0440055012702941922286825615629 0.329420703649520862921207253748 0.836387979984283491674545985006 +0.0440393999218940748741069057814 -0.579985785484313898230368522491 0.147232201695442183053685880623 +0.0440393999218940748741069057814 0.579985785484313898230368522491 0.147232201695442183053685880623 +0.0441076498478651032875141879686 -0.39727485179901123046875 -0.206705255806446080990568248126 +0.0441076498478651032875141879686 0.39727485179901123046875 -0.206705255806446080990568248126 +0.0441304489970207255988832173443 -0.624771553277969404760483485006 -0.173818443715572368279964621252 +0.0441304489970207255988832173443 0.624771553277969404760483485006 -0.173818443715572368279964621252 +0.0441365003585815485198651231258 -0.00328784994781017303466796875 0.0232628002762794508506694057814 +0.0441365003585815485198651231258 0.00328784994781017303466796875 0.0232628002762794508506694057814 +0.0441428005695343045333700615629 -0.378478789329528830798210492503 0.121676397323608409539730246252 +0.0441428005695343045333700615629 0.378478789329528830798210492503 0.121676397323608409539730246252 +0.044155351817607879638671875 -0.03962235152721405029296875 0.13776929676532745361328125 +0.044155351817607879638671875 0.03962235152721405029296875 0.13776929676532745361328125 +0.0441556990146637004523988423443 -0.00206240005791187303724187884768 -0.0233670502901077298263388115629 +0.0441556990146637004523988423443 0.00206240005791187303724187884768 -0.0233670502901077298263388115629 +0.0441704005002975519378338731258 -0.0156432002782821676090119211722 -0.0883418023586273193359375 +0.0441704005002975519378338731258 0.0156432002782821676090119211722 -0.0883418023586273193359375 +0.04418019950389862060546875 -0.064740598201751708984375 -0.0621028006076812799651776231258 +0.04418019950389862060546875 0.064740598201751708984375 -0.0621028006076812799651776231258 +0.0442070990800857502311949076557 -0.313777792453765858038394753748 -0.624171119928359940942641514994 +0.0442070990800857502311949076557 0.313777792453765858038394753748 -0.624171119928359940942641514994 +0.0442151993513107341438050923443 -0.0321238011121749919563050923443 -0.192387795448303228207365123126 +0.0442151993513107341438050923443 0.0321238011121749919563050923443 -0.192387795448303228207365123126 +0.0442488491535186767578125 -0.0221976995468139669254181711722 0.0070215500891208648681640625 +0.0442488491535186767578125 0.0221976995468139669254181711722 0.0070215500891208648681640625 +0.04425419867038726806640625 -0.0486234009265899685958700615629 -0.0753480017185211292662927462516 +0.04425419867038726806640625 0.0486234009265899685958700615629 -0.0753480017185211292662927462516 +0.0442815013229846954345703125 -0.3511525094509124755859375 0.3531729876995086669921875 +0.0442815013229846954345703125 0.3511525094509124755859375 0.3531729876995086669921875 +0.0442918024957179995437783759371 -0.5812484920024871826171875 0.387541705369949307513621761245 +0.0442918024957179995437783759371 0.5812484920024871826171875 0.387541705369949307513621761245 +0.0443345010280609130859375 -0.212007606029510492495759876874 0.27493129670619964599609375 +0.0443345010280609130859375 0.212007606029510492495759876874 0.27493129670619964599609375 +0.0443381488323211711555238423443 -0.022348649799823760986328125 -0.00588789992034435306911266394536 +0.0443381488323211711555238423443 0.022348649799823760986328125 -0.00588789992034435306911266394536 +0.0443446010351181071906800923443 -0.00862649977207183803196155480464 0.021427549421787261962890625 +0.0443446010351181071906800923443 0.00862649977207183803196155480464 0.021427549421787261962890625 +0.0444128006696701063682475307814 -0.481196784973144553454460492503 0.637555980682373069079460492503 +0.0444128006696701063682475307814 0.481196784973144553454460492503 0.637555980682373069079460492503 +0.0444182485342025784591513115629 -0.0161069005727767951274831403907 0.0163580507040023796772043596093 +0.0444182485342025784591513115629 0.0161069005727767951274831403907 0.0163580507040023796772043596093 +0.0444589495658874525596537807814 -0.0165300995111465447162668596093 -0.0158163994550704969932475307814 +0.0444589495658874525596537807814 0.0165300995111465447162668596093 -0.0158163994550704969932475307814 +0.044497199356555938720703125 -0.136947146058082586117521373126 -0.0420176982879638671875 +0.044497199356555938720703125 0.136947146058082586117521373126 -0.0420176982879638671875 +0.04453749954700469970703125 -0.223231256008148193359375 0.103364251554012298583984375 +0.04453749954700469970703125 0.223231256008148193359375 0.103364251554012298583984375 +0.0445432007312774672080912807814 -0.189239597320556646176115123126 0.0469498008489608806281800923443 +0.0445432007312774672080912807814 0.189239597320556646176115123126 0.0469498008489608806281800923443 +0.0445504009723663371711488423443 -0.0226993501186370863487162807814 0 +0.0445504009723663371711488423443 0.0226993501186370863487162807814 0 +0.044570751488208770751953125 -0.23518550395965576171875 0.072119496762752532958984375 +0.044570751488208770751953125 0.23518550395965576171875 0.072119496762752532958984375 +0.0445808976888656602333149692186 -0.13720910251140594482421875 0.684971702098846391137954014994 +0.0445808976888656602333149692186 0.13720910251140594482421875 0.684971702098846391137954014994 +0.0445831000804901150802450615629 -0.0078458003699779510498046875 -0.0891672015190124594985476846887 +0.0445831000804901150802450615629 0.0078458003699779510498046875 -0.0891672015190124594985476846887 +0.044593751430511474609375 -0.011005699634552001953125 -0.0197553500533103956748881557814 +0.044593751430511474609375 0.011005699634552001953125 -0.0197553500533103956748881557814 +0.0446153517812490491012411553129 -0.277634508907794952392578125 0.586027643084526039807258257497 +0.0446153517812490491012411553129 0.277634508907794952392578125 0.586027643084526039807258257497 +0.0446258991956710870940838731258 -0.0199882507324218756938893903907 0.0104400999844074249267578125 +0.0446258991956710870940838731258 0.0199882507324218756938893903907 0.0104400999844074249267578125 +0.0446270987391471848915180942186 -0.2936553061008453369140625 -0.0421296000480651869346537807814 +0.0446270987391471848915180942186 0.2936553061008453369140625 -0.0421296000480651869346537807814 +0.0446420013904571533203125 -0.0324339985847473186164613423443 -0.396175599098205599712940738755 +0.0446420013904571533203125 0.0324339985847473186164613423443 -0.396175599098205599712940738755 +0.0446512013673782404143963731258 -0.0161142006516456597065012346093 -0.19428479671478271484375 +0.0446512013673782404143963731258 0.0161142006516456597065012346093 -0.19428479671478271484375 +0.0446582496166229303558026231258 -0.0180794507265090963199494211722 0.0133706003427505500102956403907 +0.0446582496166229303558026231258 0.0180794507265090963199494211722 0.0133706003427505500102956403907 +0.0446707516908645616005024692186 -0.00998489968478679691676891394536 0.142845448851585371530248380623 +0.0446707516908645616005024692186 0.00998489968478679691676891394536 0.142845448851585371530248380623 +0.0447210013866424574424662807814 0 -0.0894429028034210288344851846887 +0.0447210997343063382247763115629 -0.0525726974010467529296875 0.0723612010478973388671875 +0.0447210997343063382247763115629 0.0525726974010467529296875 0.0723612010478973388671875 +0.0447212487459182767013388115629 0 0.022360749542713165283203125 +0.0447216004133224528938050923443 -0.0850647985935211181640625 -0.0276396989822387702251393903907 +0.0447216004133224528938050923443 0.0850647985935211181640625 -0.0276396989822387702251393903907 +0.0447488009929657010177450615629 -0.0325120002031326280067524692186 -0.798085594177246115954460492503 +0.0447488009929657010177450615629 0.0325120002031326280067524692186 -0.798085594177246115954460492503 +0.0447896003723144559005575615629 0 -0.397484397888183627056690738755 +0.0447968006134033258636151231258 0 -0.194918596744537375720085492503 +0.0448076993227005046516175923443 -0.0744723975658416748046875 0.04945839941501617431640625 +0.0448076993227005046516175923443 0.0744723975658416748046875 0.04945839941501617431640625 +0.0448325514793396009971537807814 -0.0184256494045257589176056711722 -0.0122693002223968512798268903907 +0.0448325514793396009971537807814 0.0184256494045257589176056711722 -0.0122693002223968512798268903907 +0.044857800006866455078125 -0.0202714502811431884765625 -0.00876614972949027980442249230464 +0.044857800006866455078125 0.0202714502811431884765625 -0.00876614972949027980442249230464 +0.0448715008795261341423277201557 -0.584957230091094904089743522491 -0.61507020890712738037109375 +0.0448715008795261341423277201557 0.584957230091094904089743522491 -0.61507020890712738037109375 +0.0448763996362686184982138115629 -0.0526988029479980510383363423443 0.39396560192108154296875 +0.0448763996362686184982138115629 0.0526988029479980510383363423443 0.39396560192108154296875 +0.0449185013771057142784037807814 -0.0862667977809906116881677462516 0.023245699703693389892578125 +0.0449185013771057142784037807814 0.0862667977809906116881677462516 0.023245699703693389892578125 +0.0449297010898590115646200615629 -0.0133070006966590891755997105861 0.0883417010307312039474325615629 +0.0449297010898590115646200615629 0.0133070006966590891755997105861 0.0883417010307312039474325615629 +0.0449416503310203566123881557814 0 0.648444545269012517785256477509 +0.0449692502617835970779580634371 -0.106344750523567191380358565311 0.0957526534795761080642861884371 +0.0449692502617835970779580634371 0.106344750523567191380358565311 0.0957526534795761080642861884371 +0.0449903987348079723029847798443 -0.138462997972965240478515625 -0.633485439419746443334702235006 +0.0449903987348079723029847798443 0.138462997972965240478515625 -0.633485439419746443334702235006 +0.0450209990143775953819194057814 -0.376984190940856944695980246252 -0.464602804183959938733039507497 +0.0450209990143775953819194057814 0.376984190940856944695980246252 -0.464602804183959938733039507497 +0.0450484514236450181434712192186 -0.13864575326442718505859375 0.0353272497653961195518412807814 +0.0450484514236450181434712192186 0.13864575326442718505859375 0.0353272497653961195518412807814 +0.0450602509081363677978515625 -0.13868375122547149658203125 0.203067243099212646484375 +0.0450602509081363677978515625 0.13868375122547149658203125 0.203067243099212646484375 +0.0450857996940612834602113423443 -0.0528159976005554213096537807814 0.187557196617126470394865123126 +0.0450857996940612834602113423443 0.0528159976005554213096537807814 0.187557196617126470394865123126 +0.0451327502727508558799662807814 -0.0106510497629642500450053432814 0.0186972498893737786029856096093 +0.0451327502727508558799662807814 0.0106510497629642500450053432814 0.0186972498893737786029856096093 +0.04513800144195556640625 -0.519520783424377463610710492503 0.2967503964900970458984375 +0.04513800144195556640625 0.519520783424377463610710492503 0.2967503964900970458984375 +0.04516024887561798095703125 -0.00757734999060630850381548029304 -0.0200782001018524197677450615629 +0.04516024887561798095703125 0.00757734999060630850381548029304 -0.0200782001018524197677450615629 +0.04520495235919952392578125 -0.2953674495220184326171875 -0.182248851656913735119758257497 +0.04520495235919952392578125 0.2953674495220184326171875 -0.182248851656913735119758257497 +0.0452138006687164348273988423443 -0.00532465018332004599160844904304 0.0206726998090744039371369211722 +0.0452138006687164348273988423443 0.00532465018332004599160844904304 0.0206726998090744039371369211722 +0.04529400169849395751953125 -0.032908000051975250244140625 0.4968554973602294921875 +0.04529400169849395751953125 0.032908000051975250244140625 0.4968554973602294921875 +0.04530175030231475830078125 -0.032913498580455780029296875 0.24364824593067169189453125 +0.04530175030231475830078125 0.032913498580455780029296875 0.24364824593067169189453125 +0.0453155003488063812255859375 -0.073705501854419708251953125 -0.4924570024013519287109375 +0.0453155003488063812255859375 0.073705501854419708251953125 -0.4924570024013519287109375 +0.0453225016593933119346537807814 -0.294444894790649391858039507497 0.0353273995220661149452290317186 +0.0453225016593933119346537807814 0.294444894790649391858039507497 0.0353273995220661149452290317186 +0.0453238010406494182258363423443 -0.192772197723388688528345369377 -0.028011798858642578125 +0.0453238010406494182258363423443 -0.0727953016757965087890625 -0.0514450013637542738487162807814 +0.0453238010406494182258363423443 0.0727953016757965087890625 -0.0514450013637542738487162807814 +0.0453238010406494182258363423443 0.192772197723388688528345369377 -0.028011798858642578125 +0.0453721493482589777190838731258 -0.0207134500145912184287944057814 0.00350989997386932407741344519536 +0.0453721493482589777190838731258 0.0207134500145912184287944057814 0.00350989997386932407741344519536 +0.0453737489879131317138671875 -0.07400000095367431640625 -0.23444674909114837646484375 +0.0453737489879131317138671875 0.07400000095367431640625 -0.23444674909114837646484375 +0.0453823000192642225791850307814 -0.0207796499133110074142294365629 -0.00294139999896287935438055072268 +0.0453823000192642225791850307814 0.0207796499133110074142294365629 -0.00294139999896287935438055072268 +0.0453990995883941650390625 -0.0891005992889404296875 0 +0.0453990995883941650390625 0.0891005992889404296875 0 +0.04540260136127471923828125 -0.0130773499608039869834819057814 -0.0163580507040023796772043596093 +0.04540260136127471923828125 0.0130773499608039869834819057814 -0.0163580507040023796772043596093 +0.0454328000545501722862162807814 -0.396418404579162608758480246252 -0.0280791997909545926193075615629 +0.0454328000545501722862162807814 0.396418404579162608758480246252 -0.0280791997909545926193075615629 +0.0454677999019622858245526231258 -0.0882836997509002796569177462516 0.0117758996784687042236328125 +0.0454677999019622858245526231258 0.0882836997509002796569177462516 0.0117758996784687042236328125 +0.0454746477305889157394247490629 -0.64199720323085784912109375 -0.0909486465156078421889773721887 +0.0454746477305889157394247490629 0.64199720323085784912109375 -0.0909486465156078421889773721887 +0.0455009996891021784026776231258 -0.0879342973232269398131677462516 -0.0140432000160217295564590855861 +0.0455009996891021784026776231258 0.0879342973232269398131677462516 -0.0140432000160217295564590855861 +0.0455067992210388197471537807814 -0.00411204993724822998046875 -0.020303249359130859375 +0.0455067992210388197471537807814 0.00411204993724822998046875 -0.020303249359130859375 +0.0455889489501714734176474053129 -0.212698754668235789910823996252 -0.50515408813953399658203125 +0.0455889489501714734176474053129 0.212698754668235789910823996252 -0.50515408813953399658203125 +0.0455953985452652033050213731258 -0.0132083997130393992341934605861 0.19428479671478271484375 +0.0455953985452652033050213731258 0.0132083997130393992341934605861 0.19428479671478271484375 +0.0456205993890762342979350307814 -0.14040839672088623046875 0.134923005104064935855134876874 +0.0456205993890762342979350307814 0.14040839672088623046875 0.134923005104064935855134876874 +0.0456615000963211115081463731258 0 -0.0203722998499870321109650461722 +0.0456842988729476984222088731258 -0.0127588495612144473684290701954 0.0158163502812385566020925153907 +0.0456842988729476984222088731258 0.0127588495612144473684290701954 0.0158163502812385566020925153907 +0.0457158999517559977432412665621 -0.750602623820304848401008257497 0.580522197484970026160056022491 +0.0457158999517559977432412665621 0.750602623820304848401008257497 0.580522197484970026160056022491 +0.0457361996173858698089276231258 -0.193278598785400407278345369377 0.0234861999750137356857138115629 +0.0457361996173858698089276231258 0.193278598785400407278345369377 0.0234861999750137356857138115629 +0.0457542501389980316162109375 -0.240163505077362060546875 -0.0522307492792606353759765625 +0.0457542501389980316162109375 0.240163505077362060546875 -0.0522307492792606353759765625 +0.04580099880695343017578125 -0.554581797122955300061164507497 0.224368804693222040347322376874 +0.04580099880695343017578125 0.554581797122955300061164507497 0.224368804693222040347322376874 +0.0458261981606483473350444057814 -0.489736783504486072882144753748 -0.343596017360687233654914507497 +0.0458261981606483473350444057814 0.489736783504486072882144753748 -0.343596017360687233654914507497 +0.0458405017852783203125 -0.386285006999969482421875 -0.3141374886035919189453125 +0.0458405017852783203125 0.386285006999969482421875 -0.3141374886035919189453125 +0.0458525985479354900031800923443 -0.04155910015106201171875 -0.0785516977310180691818075615629 +0.0458525985479354900031800923443 0.04155910015106201171875 -0.0785516977310180691818075615629 +0.0458651006221771281867738423443 -0.00203200001269578925042202932616 0.0198056995868682861328125 +0.0458651006221771281867738423443 0.00203200001269578925042202932616 0.0198056995868682861328125 +0.0458864986896514934211488423443 -0.0185872003436088582828400461722 0.00699604973196983354749578509768 +0.0458864986896514934211488423443 0.0185872003436088582828400461722 0.00699604973196983354749578509768 +0.0458928018808364840408486884371 -0.141242551803588856085269753748 -0.0210803993046283708046040317186 +0.0458928018808364840408486884371 0.141242551803588856085269753748 -0.0210803993046283708046040317186 +0.0458964008837938267082456889057 -0.266300195455551114154246761245 -0.910756450891494706567641514994 +0.0458964008837938267082456889057 0.266300195455551114154246761245 -0.910756450891494706567641514994 +0.045908999629318714141845703125 -0.6414997279644012451171875 -0.3858382701873779296875 +0.045908999629318714141845703125 0.6414997279644012451171875 -0.3858382701873779296875 +0.0459111988544464166839276231258 -0.396659207344055186883480246252 0.0235311999917030348350444057814 +0.0459111988544464166839276231258 0.396659207344055186883480246252 0.0235311999917030348350444057814 +0.0459120512008667006065287807814 -0.015062749385833740234375 -0.012852899730205535888671875 +0.0459120512008667006065287807814 0.015062749385833740234375 -0.012852899730205535888671875 +0.0459776997566223172286825615629 -0.0187517002224922187114675153907 -0.0058674998581409454345703125 +0.0459776997566223172286825615629 0.0187517002224922187114675153907 -0.0058674998581409454345703125 +0.0459891021251678452919087192186 -0.0457810521125793443153462192186 -0.135237148404121404476896373126 +0.0459891021251678452919087192186 0.0457810521125793443153462192186 -0.135237148404121404476896373126 +0.0459901005029678400237713731258 -0.0334136992692947373817524692186 0.0822704970836639487563601846887 +0.0459901005029678400237713731258 0.0334136992692947373817524692186 0.0822704970836639487563601846887 +0.045994199812412261962890625 -0.290783149003982499536391514994 0.189287355542182900158820757497 +0.045994199812412261962890625 0.290783149003982499536391514994 0.189287355542182900158820757497 +0.0459973990917205838302450615629 -0.0148001000285148624074915701954 0.012852899730205535888671875 +0.0459973990917205838302450615629 0.0148001000285148624074915701954 0.012852899730205535888671875 +0.0460295990109443678428569057814 -0.141664946079254144839509876874 0.0176728494465351083919646413278 +0.0460295990109443678428569057814 0.141664946079254144839509876874 0.0176728494465351083919646413278 +0.0460541486740112318565287807814 -0.0167344003915786757041850307814 0.00994869992136955365313877308608 +0.0460541486740112318565287807814 0.0167344003915786757041850307814 0.00994869992136955365313877308608 +0.0460732489824295099456463731258 -0.00737060010433197073526079279304 0.0179702997207641622379181711722 +0.0460732489824295099456463731258 0.00737060010433197073526079279304 0.0179702997207641622379181711722 +0.0460889011621475261359925923443 -0.0169602006673812873149831403907 -0.00938955023884773323783470289072 +0.0460889011621475261359925923443 0.0169602006673812873149831403907 -0.00938955023884773323783470289072 +0.0460953503847122206260600307814 -0.00958885028958320756453659328145 -0.0168307006359100334857981096093 +0.0460953503847122206260600307814 0.00958885028958320756453659328145 -0.0168307006359100334857981096093 +0.0461223006248474148849325615629 -0.421221587061882007940738503748 -0.151476748287677764892578125 +0.0461223006248474148849325615629 0.421221587061882007940738503748 -0.151476748287677764892578125 +0.0461573012173175784012002509371 -0.234362089633941644839509876874 -0.255819898843765269891292746252 +0.0461573012173175784012002509371 0.234362089633941644839509876874 -0.255819898843765269891292746252 +0.0461867988109588636924662807814 -0.182241600751876814401342130623 -0.233783698081970192639289507497 +0.0461867988109588636924662807814 0.182241600751876814401342130623 -0.233783698081970192639289507497 +0.0461940497159957913497763115629 -0.01913399994373321533203125 0 +0.0461940497159957913497763115629 0.01913399994373321533203125 0 +0.0462917983531951904296875 -0.08286179602146148681640625 -0.116150701045989984683259876874 +0.0462917983531951904296875 0.08286179602146148681640625 -0.116150701045989984683259876874 +0.046294949948787689208984375 -0.0778881043195724515060263115629 0.119541746377944943513504938437 +0.046294949948787689208984375 0.0778881043195724515060263115629 0.119541746377944943513504938437 +0.04635255038738250732421875 -0.142658400535583484991519753748 0 +0.04635255038738250732421875 0.142658400535583484991519753748 0 +0.0463814996182918548583984375 -0.17611624300479888916015625 -0.17126524448394775390625 +0.0463814996182918548583984375 0.17611624300479888916015625 -0.17126524448394775390625 +0.0463855013251304598709268134371 -0.641369402408599853515625 -0.27657561004161834716796875 +0.0463855013251304598709268134371 0.641369402408599853515625 -0.27657561004161834716796875 +0.0464394986629486083984375 -0.0574454009532928480674662807814 0.0674048006534576499282351846887 +0.0464394986629486083984375 0.0574454009532928480674662807814 0.0674048006534576499282351846887 +0.0464430984109640149215536553129 -0.142938953638076793328792746252 0.529066437482833884509147992503 +0.0464430984109640149215536553129 0.142938953638076793328792746252 0.529066437482833884509147992503 +0.0464502513408660833160723768742 -0.347721853852272000384715511245 0.882853978872299105518095529987 +0.0464502513408660833160723768742 0.347721853852272000384715511245 0.882853978872299105518095529987 +0.0464662998914718641807475307814 -0.0583684980869293226768412807814 -0.0665883004665374783614950615629 +0.0464662998914718641807475307814 0.0583684980869293226768412807814 -0.0665883004665374783614950615629 +0.04650320112705230712890625 -0.116389203071594241056807561563 -0.155855798721313498766960492503 +0.04650320112705230712890625 0.116389203071594241056807561563 -0.155855798721313498766960492503 +0.0465656012296676649619975307814 0 0.0884966015815734918792401231258 +0.0465772986412048353721537807814 -0.00613639988005161302747625384768 -0.0171142995357513420795481096093 +0.0465772986412048353721537807814 0.00613639988005161302747625384768 -0.0171142995357513420795481096093 +0.0466001987457275376747212192186 -0.078797399997711181640625 0.285691201686859130859375 +0.0466001987457275376747212192186 0.078797399997711181640625 0.285691201686859130859375 +0.0466399505734443609039630018742 -0.0687435001134872325501135037484 0.3399983942508697509765625 +0.0466399505734443609039630018742 0.0687435001134872325501135037484 0.3399983942508697509765625 +0.046662248671054840087890625 -0.2416607439517974853515625 0.0438482500612735748291015625 +0.046662248671054840087890625 0.2416607439517974853515625 0.0438482500612735748291015625 +0.0466876000165939372688050923443 -0.0830358028411865289886151231258 0.0304190993309021023849325615629 +0.0466876000165939372688050923443 0.0830358028411865289886151231258 0.0304190993309021023849325615629 +0.0466892004013061551193075615629 -0.194474005699157737048210492503 0 +0.0466892004013061551193075615629 0.194474005699157737048210492503 0 +0.0466995507478714030891175923443 -0.00937149971723556622638096058608 0.0152094498276710513723353201954 +0.0466995507478714030891175923443 0.00937149971723556622638096058608 0.0152094498276710513723353201954 +0.0467281013727188151984925923443 -0.081752002239227294921875 -0.03366149961948394775390625 +0.0467281013727188151984925923443 0.081752002239227294921875 -0.03366149961948394775390625 +0.0467343986034393366058026231258 -0.170527195930480962582365123126 -0.0934686005115509116469851846887 +0.0467343986034393366058026231258 0.170527195930480962582365123126 -0.0934686005115509116469851846887 +0.0467561990022659357268963731258 -0.011622600257396697998046875 -0.0133706003427505500102956403907 +0.0467561990022659357268963731258 0.011622600257396697998046875 -0.0133706003427505500102956403907 +0.0467893511056900052169638115629 -0.00405424982309341482705766779304 0.0171557992696762078022043596093 +0.0467893511056900052169638115629 0.00405424982309341482705766779304 0.0171557992696762078022043596093 +0.046790599822998046875 -0.0669372022151947104751101846887 -0.182565200328826920950220369377 +0.046790599822998046875 0.0669372022151947104751101846887 -0.182565200328826920950220369377 +0.0468196481466293321083149692186 -0.124071452021598804815738503748 -0.0701014503836631802657919365629 +0.0468196481466293321083149692186 0.124071452021598804815738503748 -0.0701014503836631802657919365629 +0.04683800041675567626953125 -0.1975415050983428955078125 0.145888745784759521484375 +0.04683800041675567626953125 0.1975415050983428955078125 0.145888745784759521484375 +0.0468490485101938289314027485943 -0.337243956327438365594417746252 0.294231140613555930407585492503 +0.0468490485101938289314027485943 0.337243956327438365594417746252 0.294231140613555930407585492503 +0.0468641489744186443000550923443 -0.0170715495944023139263112653907 0.00350884981453418757710305264652 +0.0468641489744186443000550923443 0.0170715495944023139263112653907 0.00350884981453418757710305264652 +0.0468774497509002741058026231258 -0.0171422004699707045127787807814 -0.0029408000409603118896484375 +0.0468774497509002741058026231258 0.0171422004699707045127787807814 -0.0029408000409603118896484375 +0.0469000011682510417609925923443 -0.00206250008195638665289828317384 -0.01720865070819854736328125 +0.0469000011682510417609925923443 0.00206250008195638665289828317384 -0.01720865070819854736328125 +0.046930499374866485595703125 -0.2963064014911651611328125 0 +0.046930499374866485595703125 -0.112407597899436953459151311563 0.0875332474708557101150674384371 +0.046930499374866485595703125 0.112407597899436953459151311563 0.0875332474708557101150674384371 +0.046930499374866485595703125 0.2963064014911651611328125 0 +0.0469403978437185273597798129686 -0.424769783020019553454460492503 0.489762631058692943231136496252 +0.0469403978437185273597798129686 0.424769783020019553454460492503 0.489762631058692943231136496252 +0.0469438999891281169563050923443 0 0.017212450504302978515625 +0.04698044992983341217041015625 -0.43756605684757232666015625 -0.0939613491296768243987713731258 +0.04698044992983341217041015625 0.43756605684757232666015625 -0.0939613491296768243987713731258 +0.0470754012465476948112730326557 -0.598150205612182572778579014994 0 +0.0470754012465476948112730326557 0.598150205612182572778579014994 0 +0.0470948994159698514083700615629 -0.0135311499238014235069194057814 -0.00994869992136955365313877308608 +0.0470948994159698514083700615629 0.0135311499238014235069194057814 -0.00994869992136955365313877308608 +0.0471007496118545573859925923443 -0.0114448502659797671926478201954 0.0122692503035068522371231480861 +0.0471007496118545573859925923443 0.0114448502659797671926478201954 0.0122692503035068522371231480861 +0.0471015013754367828369140625 -0.144961206614971166439786998126 -0.423400050401687655377003238755 +0.0471015013754367828369140625 0.144961649179458612612947376874 -0.423400050401687655377003238755 +0.0471358507871627863128338731258 -0.0153827503323554996145228201954 -0.00644854977726936392373735529304 +0.0471358507871627863128338731258 0.0153827503323554996145228201954 -0.00644854977726936392373735529304 +0.0471406023949384675453266879686 -0.643785348534584023205695757497 0.0762774981558322906494140625 +0.0471406023949384675453266879686 0.643785348534584023205695757497 0.0762774981558322906494140625 +0.04715240001678466796875 -0.198573994636535661184595369377 -0.344013190269470248150440738755 +0.04715240001678466796875 0.198573994636535661184595369377 -0.344013190269470248150440738755 +0.0471563994884490952919087192186 -0.145134450495243066958650501874 0.42333479225635528564453125 +0.0471563994884490952919087192186 0.145134450495243066958650501874 0.42333479225635528564453125 +0.0471755504608154310752787807814 -0.015260450541973114013671875 0.00644854977726936392373735529304 +0.0471755504608154310752787807814 0.015260450541973114013671875 0.00644854977726936392373735529304 +0.0471852019429206820388955634371 -0.0488290518522262531608824076557 0.133750802278518682308927623126 +0.0471852019429206820388955634371 0.0488290518522262531608824076557 0.133750802278518682308927623126 +0.0471886007115244823784117045307 -0.511271584033965997839743522491 0.677403229475021295691306022491 +0.0471886007115244823784117045307 0.511271584033965997839743522491 0.677403229475021295691306022491 +0.0471888005733490031867738423443 -0.0342842012643814128547425923443 -0.0812268972396850696959802462516 +0.0471888005733490031867738423443 0.0342842012643814128547425923443 -0.0812268972396850696959802462516 +0.04724229872226715087890625 -0.317040154337882962298778011245 -0.140548099577426893747045255623 +0.04724229872226715087890625 0.317040154337882962298778011245 -0.140548099577426893747045255623 +0.0472546011209487928916850307814 -0.10224020481109619140625 0.165269398689270041735710492503 +0.0472546011209487928916850307814 0.10224020481109619140625 0.165269398689270041735710492503 +0.04725579917430877685546875 -0.0133689001202583323396622105861 0.00938955023884773323783470289072 +0.04725579917430877685546875 0.0133689001202583323396622105861 0.00938955023884773323783470289072 +0.0473606497049331720550213731258 -0.00812290012836456264133655480464 -0.0138198003172874464561381557814 +0.0473606497049331720550213731258 0.00812290012836456264133655480464 -0.0138198003172874464561381557814 +0.047364749014377593994140625 -0.3361904919147491455078125 -0.66875477135181427001953125 +0.047364749014377593994140625 0.3361904919147491455078125 -0.66875477135181427001953125 +0.0474343478679656940788511576557 -0.106065148115158075503572376874 -0.09486915171146392822265625 +0.0474343478679656940788511576557 0.106065148115158075503572376874 -0.09486915171146392822265625 +0.04745550267398357391357421875 -0.62276624143123626708984375 0.41522325575351715087890625 +0.04745550267398357391357421875 0.62276624143123626708984375 0.41522325575351715087890625 +0.0474896490573883112151776231258 -0.00605709999799728445596391779304 0.0144237995147705085063893903907 +0.0474896490573883112151776231258 0.00605709999799728445596391779304 0.0144237995147705085063893903907 +0.0475110009312629741340394673443 -0.619366478919982976769631477509 -0.6512508094310760498046875 +0.0475110009312629741340394673443 0.619366478919982976769631477509 -0.6512508094310760498046875 +0.0475250989198684678505024692186 -0.672830903530120760791533029987 -0.187189093232154823986945757497 +0.0475250989198684678505024692186 0.672830903530120760791533029987 -0.187189093232154823986945757497 +0.0475456010550260529945454379686 -0.0345440002158284159561318915621 -0.847965943813323907995993522491 +0.0475456010550260529945454379686 0.0345440002158284159561318915621 -0.847965943813323907995993522491 +0.04755289852619171142578125 -0.0154506504535675062705912807814 0 +0.04755289852619171142578125 0.0154506504535675062705912807814 0 +0.0476219996809959383865518134371 -0.211193400621414173468082253748 0.207676506042480474301115123126 +0.0476219996809959383865518134371 0.211193400621414173468082253748 0.207676506042480474301115123126 +0.0476444005966186537315287807814 -0.317057991027832053454460492503 0.23917400836944580078125 +0.0476444005966186537315287807814 0.317057991027832053454460492503 0.23917400836944580078125 +0.0477093499153852448890766879686 -0.628317934274673528527443977509 0.159501551836729066335962556877 +0.0477093499153852448890766879686 0.628317934274673528527443977509 0.159501551836729066335962556877 +0.0477643996477127089073100307814 -0.147001004219055181332365123126 -0.126922202110290538445980246252 +0.0477643996477127089073100307814 0.147001004219055181332365123126 -0.126922202110290538445980246252 +0.047765247523784637451171875 -0.147009752690792083740234375 0.7338982522487640380859375 +0.047765247523784637451171875 0.147009752690792083740234375 0.7338982522487640380859375 +0.0478078514337539686729350307814 -0.00203210003674030329975930264652 0.01450105011463165283203125 +0.0478078514337539686729350307814 0.00203210003674030329975930264652 0.01450105011463165283203125 +0.0478386014699935940841513115629 -0.00407500006258487701416015625 -0.0139592498540878299367884451954 +0.0478386014699935940841513115629 0.00407500006258487701416015625 -0.0139592498540878299367884451954 +0.0478504002094268798828125 -0.0672313988208770724197549384371 -0.0564826011657714871505575615629 +0.0478504002094268798828125 0.0672313988208770724197549384371 -0.0564826011657714871505575615629 +0.0478520005941391046722088731258 -0.0100593000650405894197403355861 -0.0104400999844074249267578125 +0.0478520005941391046722088731258 0.0100593000650405894197403355861 -0.0104400999844074249267578125 +0.0479198008775711115081463731258 -0.0620235979557037381271200615629 0.0621028006076812799651776231258 +0.0479198008775711115081463731258 0.0620235979557037381271200615629 0.0621028006076812799651776231258 +0.047939099371433258056640625 -0.2273789942264556884765625 -0.1897383034229278564453125 +0.047939099371433258056640625 0.2273789942264556884765625 -0.1897383034229278564453125 +0.0479484498500823974609375 -0.0137345001101493845857559605861 -0.00350884981453418757710305264652 +0.0479484498500823974609375 0.0137345001101493845857559605861 -0.00350884981453418757710305264652 +0.0479519993066787747482138115629 -0.020036600530147552490234375 0.0854349970817566001235476846887 +0.0479519993066787747482138115629 0.020036600530147552490234375 0.0854349970817566001235476846887 +0.04796265065670013427734375 -0.00803100019693374703178001539072 0.0116227500140666968608815778907 +0.04796265065670013427734375 0.00803100019693374703178001539072 0.0116227500140666968608815778907 +0.0479799013584852260261293110943 -0.326381841301918051989616742503 -0.306059843301773104595753238755 +0.0479799013584852260261293110943 0.326381841301918051989616742503 -0.306059843301773104595753238755 +0.0479907006025314317176899692186 -0.0197963990271091440364958913278 0.2954742014408111572265625 +0.0479907006025314317176899692186 0.0197963990271091440364958913278 0.2954742014408111572265625 +0.0479983001947403009612713731258 0 -0.0140058502554893504060684605861 +0.0480006992816925104339276231258 -0.0136851504445075992238978201954 0.0029408000409603118896484375 +0.0480006992816925104339276231258 0.0136851504445075992238978201954 0.0029408000409603118896484375 +0.0480327494442462921142578125 -0.24471299350261688232421875 -0.01756249926984310150146484375 +0.0480327494442462921142578125 0.24471299350261688232421875 -0.01756249926984310150146484375 +0.0480473019182681981842364393742 -0.29899100959300994873046875 0.631106692552566461706931022491 +0.0480473019182681981842364393742 0.29899100959300994873046875 0.631106692552566461706931022491 +0.0480483502149581936935263115629 -0.0119336999952793128276784528907 -0.00699604973196983354749578509768 +0.0480483502149581936935263115629 0.0119336999952793128276784528907 -0.00699604973196983354749578509768 +0.048077099025249481201171875 -0.108476096391677850894197376874 -0.2755385935306549072265625 +0.048077099025249481201171875 0.108476096391677850894197376874 -0.2755385935306549072265625 +0.0481219999492168426513671875 -0.790108025074005126953125 0.61107599735260009765625 +0.0481219999492168426513671875 0.790108025074005126953125 0.61107599735260009765625 +0.0481227010488510104080361884371 -0.0199186496436595909809152971093 0.140667897462844831979467130623 +0.0481227010488510104080361884371 0.0199186496436595909809152971093 0.140667897462844831979467130623 +0.0481530994176864665656800923443 -0.0792648017406463734069177462516 0.0373946994543075603156800923443 +0.0481530994176864665656800923443 0.0792648017406463734069177462516 0.0373946994543075603156800923443 +0.0481615006923675550987162807814 -0.0400965005159378065635600307814 0.0779277980327606201171875 +0.0481615006923675550987162807814 0.0400965005159378065635600307814 0.0779277980327606201171875 +0.0482008989900350598434286553129 -0.267138858139514934197933371252 0.478344351053237970550213731258 +0.0482008989900350598434286553129 0.267138858139514934197933371252 0.478344351053237970550213731258 +0.0482060998678207411338725307814 -0.00996640026569366524467064039072 0.00876609981060028076171875 +0.0482060998678207411338725307814 0.00996640026569366524467064039072 0.00876609981060028076171875 +0.0482187986373901408820863423443 -0.0118541501462459571147878278907 0.0058674998581409454345703125 +0.0482187986373901408820863423443 0.0118541501462459571147878278907 0.0058674998581409454345703125 +0.048257000744342803955078125 -0.2448565065860748291015625 0.014714750461280345916748046875 +0.048257000744342803955078125 0.2448565065860748291015625 0.014714750461280345916748046875 +0.0482831999659538227409605326557 0 0.346653649210929837298778011245 +0.048312000930309295654296875 -0.28031599521636962890625 -0.95869100093841552734375 +0.048312000930309295654296875 0.28031599521636962890625 -0.95869100093841552734375 +0.0483164995908737168739399692186 -0.128977051377296453305021373126 0.0594175502657890292068643134371 +0.0483164995908737168739399692186 0.128977051377296453305021373126 0.0594175502657890292068643134371 +0.0483689516782760606239399692186 -0.148861999809741962774722878748 -0.31305049359798431396484375 +0.0483689516782760606239399692186 0.148861999809741962774722878748 -0.31305049359798431396484375 +0.0483696505427360506912393134371 -0.33286924660205841064453125 -0.0967389464378356905838174384371 +0.0483696505427360506912393134371 0.33286924660205841064453125 -0.0967389464378356905838174384371 +0.0483900010585784912109375 -0.2821240127086639404296875 -0.409956514835357666015625 +0.0483900010585784912109375 0.2821240127086639404296875 -0.409956514835357666015625 +0.0483942002058029216438050923443 -0.148944604396820085012720369377 0.124392402172088634149105246252 +0.0483942002058029216438050923443 0.148944604396820085012720369377 0.124392402172088634149105246252 +0.0483987003564834566970986884371 0 0.698324894905090309826789507497 +0.0484355509281158488898988423443 -0.00402860008180141483669078894536 0.0117373496294021616853653355861 +0.0484355509281158488898988423443 0.00402860008180141483669078894536 0.0117373496294021616853653355861 +0.0484459012746810968597088731258 -0.0516115009784698514083700615629 -0.0706345975399017417251101846887 +0.0484459012746810968597088731258 0.0516115009784698514083700615629 -0.0706345975399017417251101846887 +0.0484511986374855027626118442186 -0.14911399781703948974609375 -0.682215088605880648486845529987 +0.0484511986374855027626118442186 0.14911399781703948974609375 -0.682215088605880648486845529987 +0.0484950006008148248870526231258 -0.0780201017856597955901776231258 -0.03951080143451690673828125 +0.0484950006008148248870526231258 0.0780201017856597955901776231258 -0.03951080143451690673828125 +0.0485096007585525540450888115629 -0.00613995008170604723157781634768 -0.0104460999369621280324915701954 +0.0485096007585525540450888115629 0.00613995008170604723157781634768 -0.0104460999369621280324915701954 +0.0485935509204864501953125 0 0.011775650084018707275390625 +0.0486185491085052504112162807814 -0.0116720996797084822227397182814 0 +0.0486185491085052504112162807814 0.0116720996797084822227397182814 0 +0.0487085014581680325607138115629 -0.0848026990890503040709802462516 -0.0208802998065948514083700615629 +0.0487085014581680325607138115629 0.0848026990890503040709802462516 -0.0208802998065948514083700615629 +0.04870904982089996337890625 -0.117964500188827509097322376874 0.0788149505853652926345986884371 +0.04870904982089996337890625 0.117964500188827509097322376874 0.0788149505853652926345986884371 +0.0487096514552831719169212476572 -0.386267760396003745348991742503 0.388490286469459544793636496252 +0.0487096514552831719169212476572 0.386267760396003745348991742503 0.388490286469459544793636496252 +0.0487368017435073838661274692186 -0.149998497962951643502904630623 0.255196201801300037725894753748 +0.0487368017435073838661274692186 0.149998497962951643502904630623 0.255196201801300037725894753748 +0.048750400543212890625 -0.0855337023735046469985476846887 0.0175322994589805596088449846093 +0.048750400543212890625 0.0855337023735046469985476846887 0.0175322994589805596088449846093 +0.0487583991140127168129048129686 -0.440338495373725880011051003748 0.0788953475654125269134198106258 +0.0487583991140127168129048129686 0.440338495373725880011051003748 0.0788953475654125269134198106258 +0.0487727489322423921058735629686 -0.408399540185928333624332253748 -0.503319704532623313220085492503 +0.0487727489322423921058735629686 0.408399540185928333624332253748 -0.503319704532623313220085492503 +0.0488328009843826335578675923443 -0.00206505004316568383307406442384 -0.010540150105953216552734375 +0.0488328009843826335578675923443 0.00206505004316568383307406442384 -0.010540150105953216552734375 +0.0488456010818481486945863423443 -0.00805020034313201973685814039072 -0.0070215500891208648681640625 +0.0488456010818481486945863423443 0.00805020034313201973685814039072 -0.0070215500891208648681640625 +0.04885055124759674072265625 -0.00605955012142658268337047644536 0.00876960009336471592311657019536 +0.04885055124759674072265625 0.00605955012142658268337047644536 0.00876960009336471592311657019536 +0.048852749168872833251953125 -0.0856703996658325223068075615629 0.113022145628929135408036188437 +0.048852749168872833251953125 0.0856703996658325223068075615629 0.113022145628929135408036188437 +0.0488817505538463592529296875 -0.09647549688816070556640625 0.22539524734020233154296875 +0.0488817505538463592529296875 0.09647549688816070556640625 0.22539524734020233154296875 +0.0488819986581802423675213731258 -0.00991119965910911698836471828145 -0.00350989997386932407741344519536 +0.0488819986581802423675213731258 0.00991119965910911698836471828145 -0.00350989997386932407741344519536 +0.04889500141143798828125 -0.366023004055023193359375 0.92931997776031494140625 +0.04889500141143798828125 0.366023004055023193359375 0.92931997776031494140625 +0.0488995015621185302734375 -0.562814182043075539318977007497 0.321479596197605133056640625 +0.0488995015621185302734375 0.562814182043075539318977007497 0.321479596197605133056640625 +0.0489021003246307428558026231258 -0.0066740997135639190673828125 0.0869714975357055719573651231258 +0.0489021003246307428558026231258 0.0066740997135639190673828125 0.0869714975357055719573651231258 +0.0489291012287139948089276231258 -0.00986360013484954833984375 0.00294139999896287935438055072268 +0.0489291012287139948089276231258 0.00986360013484954833984375 0.00294139999896287935438055072268 +0.0489478513598442036003355326557 -0.0355623006820678724815287807814 -0.137256753444671614206029630623 +0.0489478513598442036003355326557 0.0355623006820678724815287807814 -0.137256753444671614206029630623 +0.0489612013101577772666850307814 -0.176992797851562522204460492503 0.0792234003543853815276776231258 +0.0489612013101577772666850307814 0.176992797851562522204460492503 0.0792234003543853815276776231258 +0.0489695996046066311935263115629 -0.684266376495361372533920985006 -0.411560821533203169408920985006 +0.0489695996046066311935263115629 0.684266376495361372533920985006 -0.411560821533203169408920985006 +0.0489726975560188237945880018742 -0.6913816034793853759765625 -0.0979446962475776644607705634371 +0.0489726975560188237945880018742 0.6913816034793853759765625 -0.0979446962475776644607705634371 +0.0490018010139465359786825615629 -0.0869724988937378012954226846887 0.00588279999792575870876110144536 +0.0490018010139465359786825615629 0.0869724988937378012954226846887 0.00588279999792575870876110144536 +0.0490065485239028972297425923443 -0.00798055008053779636745250769536 0.00588789992034435306911266394536 +0.0490065485239028972297425923443 0.00798055008053779636745250769536 0.00588789992034435306911266394536 +0.0490084998309612274169921875 -0.4414165019989013671875 -0.22967250645160675048828125 +0.0490084998309612274169921875 0.4414165019989013671875 -0.22967250645160675048828125 +0.0490417510271072346061949076557 -0.0727803021669387734116085653113 -0.121646699309349057283036188437 +0.0490417510271072346061949076557 0.0727803021669387734116085653113 -0.121646699309349057283036188437 +0.0490633010864257868011151231258 -0.0868534028530120877364950615629 -0.00701979994773864815482689039072 +0.0490633010864257868011151231258 0.0868534028530120877364950615629 -0.00701979994773864815482689039072 +0.049108751118183135986328125 -0.117727749049663543701171875 -0.21500824391841888427734375 +0.049108751118183135986328125 0.117727749049663543701171875 -0.21500824391841888427734375 +0.0491207502782344818115234375 -0.2071104943752288818359375 -0.1311199963092803955078125 +0.0491207502782344818115234375 0.2071104943752288818359375 -0.1311199963092803955078125 +0.0491546005010604913909588731258 -0.0662838995456695584396200615629 0.0564824998378753717620526231258 +0.0491546005010604913909588731258 0.0662838995456695584396200615629 0.0564824998378753717620526231258 +0.0491627991199493422080912807814 -0.0274688988924026503135600307814 -0.0826345980167388916015625 +0.0491627991199493422080912807814 0.0274688988924026503135600307814 -0.0826345980167388916015625 +0.0491690993309021051604901231258 -0.00203384999185800578389016202152 0.00884665027260780369167125769536 +0.0491690993309021051604901231258 0.00203384999185800578389016202152 0.00884665027260780369167125769536 +0.04919535107910633087158203125 -0.248601588606834428274439119377 0.371856147050857566149772992503 +0.04919535107910633087158203125 0.248601588606834428274439119377 0.371856147050857566149772992503 +0.0491995498538017259071430942186 -0.117856496572494501284822376874 -0.0786719977855682289780148153113 +0.0491995498538017259071430942186 0.117856496572494501284822376874 -0.0786719977855682289780148153113 +0.0492024004459381131271200615629 -0.0651852011680602999588174384371 0.182565200328826920950220369377 +0.0492024004459381131271200615629 0.0651852011680602999588174384371 0.182565200328826920950220369377 +0.0492912493646144866943359375 -0.15170525014400482177734375 0.1924992501735687255859375 +0.0492912493646144866943359375 0.15170525014400482177734375 0.1924992501735687255859375 +0.049305498600006103515625 -0.0749783992767334012130575615629 0.0441271990537643460372763115629 +0.049305498600006103515625 0.0749783992767334012130575615629 0.0441271990537643460372763115629 +0.0493357509374618558029013115629 -0.00411610007286071759996515240232 -0.00700294971466064453125 +0.0493357509374618558029013115629 0.00411610007286071759996515240232 -0.00700294971466064453125 +0.0493639513850212055534605326557 -0.131901302933692926577791126874 -0.0516260996460914597938618442186 +0.0493639513850212055534605326557 0.131901302933692926577791126874 -0.0516260996460914597938618442186 +0.0493844509124755914886151231258 -0.00782160013914108380450596058608 0 +0.0493844509124755914886151231258 0.00782160013914108380450596058608 0 +0.0494874000549316434005575615629 -0.403559106588363636358707253748 0.192849299311637883969083873126 +0.0494874000549316434005575615629 0.403559106588363636358707253748 0.192849299311637883969083873126 +0.0494880497455596965461488423443 -0.00405705012381076847438610144536 0.00587150007486343401136297259768 +0.0494880497455596965461488423443 0.00405705012381076847438610144536 0.00587150007486343401136297259768 +0.0495038002729415935188050923443 0 -0.00702679976820945809135032789072 +0.0495157510042190593391175923443 -0.0059877000749111175537109375 -0.00351249985396862030029296875 +0.0495157510042190593391175923443 0.0059877000749111175537109375 -0.00351249985396862030029296875 +0.0495569497346878065635600307814 -0.00595384985208511404580766779304 0.00294289998710155513081399014652 +0.0495569497346878065635600307814 0.00595384985208511404580766779304 0.00294289998710155513081399014652 +0.0496177487075328826904296875 -0.600796946883201621325554242503 0.243066205084323888607755748126 +0.0496177487075328826904296875 0.600796946883201621325554242503 0.243066205084323888607755748126 +0.0496450480073690400550923129686 -0.530548182129859990929787727509 -0.372229018807411216052116742503 +0.0496450480073690400550923129686 0.530548182129859990929787727509 -0.372229018807411216052116742503 +0.0496517509222030653526225307814 0 0.00589094981551170366468328509768 +0.0496606506407260908653178432814 -0.425788637995719920770198996252 0.136885946989059453793302623126 +0.0496606506407260908653178432814 0.425788637995719920770198996252 0.136885946989059453793302623126 +0.0496987514197826385498046875 -0.6871815025806427001953125 -0.296331010758876800537109375 +0.0496987514197826385498046875 0.6871815025806427001953125 -0.296331010758876800537109375 +0.0497333988547325120399555942186 -0.232035005092620844058259876874 -0.551077187061309814453125 +0.0497333988547325120399555942186 0.232035005092620844058259876874 -0.551077187061309814453125 +0.0498234018683433588225994981258 -0.0361988000571727766563334682814 0.546541047096252508019631477509 +0.0498234018683433588225994981258 0.0361988000571727766563334682814 0.546541047096252508019631477509 +0.0498336493968963636924662807814 -0.00206495001912117021741766009768 -0.003513149917125701904296875 +0.0498336493968963636924662807814 0.00206495001912117021741766009768 -0.003513149917125701904296875 +0.0498458504676818903167401231258 -0.00392290018498897552490234375 0 +0.0498458504676818903167401231258 0.00392290018498897552490234375 0 +0.0498470503836870235114808735943 -0.0810760520398616790771484375 -0.54170270264148712158203125 +0.0498470503836870235114808735943 0.0810760520398616790771484375 -0.54170270264148712158203125 +0.0498560011386871351768412807814 -0.153444004058837901727230246252 0.366018009185791026727230246252 +0.0498560011386871351768412807814 0.153444004058837901727230246252 0.366018009185791026727230246252 +0.0498718500137329129318075615629 -0.00203374996781349173455288870116 0.00294330008327961002712047644536 +0.0498718500137329129318075615629 0.00203374996781349173455288870116 0.00294330008327961002712047644536 +0.04988349974155426025390625 -0.20677675306797027587890625 0.13135825097560882568359375 +0.04988349974155426025390625 0.20677675306797027587890625 0.13135825097560882568359375 +0.0499500006437301607986611884371 -0.0239415004849433885047993442186 -0.139397996664047230108707253748 +0.0499500006437301607986611884371 0.0239415004849433885047993442186 -0.139397996664047230108707253748 +0.0499586999416351332237162807814 -0.260916298627853371350227007497 -0.139379999041557317562833873126 +0.0499586999416351332237162807814 0.260916298627853371350227007497 -0.139379999041557317562833873126 +0.0499644007533788722663636860943 -0.541346383094787664269631477509 0.717250478267669744347756477509 +0.0499644007533788722663636860943 0.541346383094787664269631477509 0.717250478267669744347756477509 +0.04999969899654388427734375 -0.0198223993182182339767294365629 -0.0843037009239196860610476846887 +0.04999969899654388427734375 0.0198223993182182339767294365629 -0.0843037009239196860610476846887 +0.0500000000000000027755575615629 0 0 +0.0500132977962493910362162807814 -0.0738882005214691189864950615629 -0.0451575011014938368369975307814 +0.0500132977962493910362162807814 0.0738882005214691189864950615629 -0.0451575011014938368369975307814 +0.050021700561046600341796875 -0.0363425999879837050010600307814 -0.293559300899505604132144753748 +0.050021700561046600341796875 0.0363425999879837050010600307814 -0.293559300899505604132144753748 +0.0500274002552032470703125 -0.0464210003614425673057475307814 0.0730913996696472140213174384371 +0.0500274002552032470703125 0.0464210003614425673057475307814 0.0730913996696472140213174384371 +0.0500759020447731004188618442186 -0.302724447846412614282485264994 0.168375901877880096435546875 +0.0500759020447731004188618442186 0.302724447846412614282485264994 0.168375901877880096435546875 +0.0501178488135337815712055942186 -0.134519997239112842901676003748 0.0435034498572349562217631557814 +0.0501178488135337815712055942186 0.134519997239112842901676003748 0.0435034498572349562217631557814 +0.0501258015632629408409037807814 -0.180967402458190929070980246252 -0.0688350021839141817947549384371 +0.0501258015632629408409037807814 0.180967402458190929070980246252 -0.0688350021839141817947549384371 +0.0501372992992401150802450615629 -0.0702042996883392306228799384371 0.0505726993083953912933026231258 +0.0501372992992401150802450615629 0.0702042996883392306228799384371 0.0505726993083953912933026231258 +0.0501505009829998002479634067186 -0.653775727748870827404914507497 -0.68743140995502471923828125 +0.0501505009829998002479634067186 0.653775727748870827404914507497 -0.68743140995502471923828125 +0.0501592025160789434234942518742 -0.229815256595611555612279630623 0.259169754385948192254573996252 +0.0501592025160789434234942518742 0.229815256595611555612279630623 0.259169754385948192254573996252 +0.0501895010471344049651776231258 -0.0446970999240875258018412807814 -0.0740485012531280489822549384371 +0.0501895010471344049651776231258 0.0446970999240875258018412807814 -0.0740485012531280489822549384371 +0.0502222515642642974853515625 -0.0364882484078407273719868442186 -0.445697548985481251104801003748 +0.0502222515642642974853515625 0.0364882484078407273719868442186 -0.445697548985481251104801003748 +0.0502731978893280057052450615629 -0.102070403099060069695980246252 -0.383476400375366233141960492503 +0.0502731978893280057052450615629 0.102070403099060069695980246252 -0.383476400375366233141960492503 +0.0502813525497913318962339701557 -0.336678308248519853052016514994 0.0813595995306968661209268134371 +0.0502813525497913318962339701557 0.336678308248519853052016514994 0.0813595995306968661209268134371 +0.0502971008419990511795205634371 -0.122880747914314261692858565311 0.069788999855518341064453125 +0.0502971008419990511795205634371 0.122880747914314261692858565311 0.069788999855518341064453125 +0.050333797931671142578125 -0.0265136003494262709190287807814 0.191738200187683116570980246252 +0.050333797931671142578125 0.0265136003494262709190287807814 0.191738200187683116570980246252 +0.0503351986408233642578125 -0.0610920011997222942023988423443 -0.0611075997352600111534037807814 +0.0503351986408233642578125 0.0610920011997222942023988423443 -0.0611075997352600111534037807814 +0.0503424011170864119102397182814 -0.0365760002285242108444052178129 -0.897846293449401922082131477509 +0.0503424011170864119102397182814 0.0365760002285242108444052178129 -0.897846293449401922082131477509 +0.0503622017800807939003071567186 -0.155001701414585107974275501874 0.309738793969154324603465511245 +0.0503622017800807939003071567186 0.155001701414585107974275501874 0.309738793969154324603465511245 +0.0503883004188537611534037807814 0 -0.447169947624206531866519753748 +0.0504245519638061578948651231258 -0.424913507699966441766292746252 -0.345551237463951166350994981258 +0.0504245519638061578948651231258 0.424913507699966441766292746252 -0.345551237463951166350994981258 +0.0504505001008510589599609375 -0.0572240017354488372802734375 -0.2380760014057159423828125 +0.0504505001008510589599609375 0.0572240017354488372802734375 -0.2380760014057159423828125 +0.0504611983895301777214292826557 -0.01219229958951473236083984375 -0.2954742014408111572265625 +0.0504611983895301777214292826557 0.01219229958951473236083984375 -0.2954742014408111572265625 +0.0504859495908021940757670620314 -0.0592861533164978013465962192186 0.44321130216121673583984375 +0.0504859495908021940757670620314 0.0592861533164978013465962192186 0.44321130216121673583984375 +0.0505223989486694377570863423443 -0.358603191375732432977230246252 -0.713338422775268599096420985006 +0.0505223989486694377570863423443 0.358603191375732432977230246252 -0.713338422775268599096420985006 +0.0505511976778507191032652201557 -0.457444381713867143091079014994 0.527436679601669289318977007497 +0.0505511976778507191032652201557 0.457444381713867143091079014994 0.527436679601669289318977007497 +0.0505711972713470472862162807814 -0.0119753003120422370220143903907 -0.0854349970817566001235476846887 +0.0505711972713470472862162807814 0.0119753003120422370220143903907 -0.0854349970817566001235476846887 +0.0505907513201236669342364393742 -0.322671291232109025415297764994 0.125792796909809101446597878748 +0.0505907513201236669342364393742 0.322671291232109025415297764994 0.125792796909809101446597878748 +0.0506192028522491482833700615629 -0.6642839908599853515625 0.442904806137084994244190738755 +0.0506192028522491482833700615629 0.6642839908599853515625 0.442904806137084994244190738755 +0.0506398513913154588172993442186 -0.0121709994971752159809152971093 -0.140667897462844831979467130623 +0.0506398513913154588172993442186 0.0121709994971752159809152971093 -0.140667897462844831979467130623 +0.0506651982665061936805805942186 -0.155933403968811029605134876874 0.577163386344909601355368522491 +0.0506651982665061936805805942186 0.155933403968811029605134876874 0.577163386344909601355368522491 +0.0506680011749267578125 -0.242294406890869146176115123126 0.31420719623565673828125 +0.0506680011749267578125 0.242294406890869146176115123126 0.31420719623565673828125 +0.0506729006767272990852113423443 -0.0266402006149292006065287807814 0.0819912016391754205901776231258 +0.0506729006767272990852113423443 0.0266402006149292006065287807814 0.0819912016391754205901776231258 +0.0506731986999511760383363423443 -0.102673804759979253597990123126 -0.163982605934143071957365123126 +0.0506731986999511760383363423443 0.102673804759979253597990123126 -0.163982605934143071957365123126 +0.0506988979876041370720152201557 -0.281053850054740872455028011245 -0.202332547307014443127570757497 +0.0506988979876041370720152201557 0.281053850054740872455028011245 -0.202332547307014443127570757497 +0.0507117986679077176193075615629 -0.112901604175567632504240123126 0.157103598117828369140625 +0.0507117986679077176193075615629 0.112901604175567632504240123126 0.157103598117828369140625 +0.050758250057697296142578125 -0.2227507531642913818359375 -0.1015167534351348876953125 +0.050758250057697296142578125 0.2227507531642913818359375 -0.1015167534351348876953125 +0.0507668025791645008415464701557 -0.693307298421859674597556022491 0.082144998013973236083984375 +0.0507668025791645008415464701557 0.693307298421859674597556022491 0.082144998013973236083984375 +0.0508074000477790818641743442186 0 -0.141133350133895857370092130623 +0.0508106991648673983474893134371 -0.0591199502348899799675230326557 0.128152647614479059390291126874 +0.0508106991648673983474893134371 0.0591199502348899799675230326557 0.128152647614479059390291126874 +0.0508566975593566922286825615629 -0.00412979982793331128892999615232 -0.0860032021999359158614950615629 +0.0508566975593566922286825615629 0.00412979982793331128892999615232 -0.0860032021999359158614950615629 +0.0508682996034622164627236884371 0 0.141111454367637639828458873126 +0.0508795022964477552940287807814 -0.0825174987316131675063601846887 0.0245387002825737006450612653907 +0.0508795022964477552940287807814 0.0825174987316131675063601846887 0.0245387002825737006450612653907 +0.050919748842716217041015625 -0.7208902537822723388671875 -0.200559742748737335205078125 +0.050919748842716217041015625 0.7208902537822723388671875 -0.200559742748737335205078125 +0.0509361982345581110198651231258 -0.156768000125885015316740123126 0.113266599178314220086605246252 +0.0509361982345581110198651231258 0.156768000125885015316740123126 0.113266599178314220086605246252 +0.0509405970573425306846537807814 -0.0534753978252410916427450615629 -0.185863995552063010485710492503 +0.0509405970573425306846537807814 0.0534753978252410916427450615629 -0.185863995552063010485710492503 +0.0509495973587036146690287807814 -0.15681040287017822265625 0.782824802398681685033920985006 +0.0509495973587036146690287807814 0.15681040287017822265625 0.782824802398681685033920985006 +0.050962500274181365966796875 -0.049596250057220458984375 0.2396727502346038818359375 +0.050962500274181365966796875 0.049596250057220458984375 0.2396727502346038818359375 +0.0509666517376899663727130018742 -0.0656001485884189633468466240629 -0.3399983942508697509765625 +0.0509666517376899663727130018742 0.0656001485884189633468466240629 -0.3399983942508697509765625 +0.0509983513504266780524964985943 -0.647996056079864546362045985006 0 +0.0509983513504266780524964985943 0.647996056079864546362045985006 0 +0.0510048985481262248664613423443 -0.0817520976066589410979901231258 -0.0267412990331649808029013115629 +0.0510048985481262248664613423443 0.0817520976066589410979901231258 -0.0267412990331649808029013115629 +0.0510097503662109361122212192186 -0.0974163025617599404037960653113 -0.102019947767257687654129938437 +0.0510097503662109361122212192186 0.0974163025617599404037960653113 -0.102019947767257687654129938437 +0.0511119000613689464240785298443 -0.445970705151557955669971988755 -0.0315890997648239149619975307814 +0.0511119000613689464240785298443 0.445970705151557955669971988755 -0.0315890997648239149619975307814 +0.0511629000306129469444194057814 -0.137413653731346119268863503748 -0.0316206000745296450515908759371 +0.0511629000306129469444194057814 0.137413653731346119268863503748 -0.0316206000745296450515908759371 +0.0511724978685378986686949076557 -0.0930352538824081448654013115629 0.105951896309852591770983565311 +0.0511724978685378986686949076557 0.0930352538824081448654013115629 0.105951896309852591770983565311 +0.05124700069427490234375 -0.4680239856243133544921875 -0.16830749809741973876953125 +0.05124700069427490234375 0.4680239856243133544921875 -0.16830749809741973876953125 +0.0512574017047882080078125 -0.0524106979370117243011151231258 0.0680132985115051297286825615629 +0.0512574017047882080078125 0.0524106979370117243011151231258 0.0680132985115051297286825615629 +0.0512753009796142605880575615629 -0.0693774998188018826583700615629 -0.0505726993083953912933026231258 +0.0512753009796142605880575615629 0.0693774998188018826583700615629 -0.0505726993083953912933026231258 +0.0513279005885124220420756557814 -0.0297502510249614687820596259371 0.13776929676532745361328125 +0.0513279005885124220420756557814 0.0297502510249614687820596259371 0.13776929676532745361328125 +0.0513431981205940204948667826557 -0.277163100242614757195980246252 -0.102686101198196405581697376874 +0.0513431981205940204948667826557 0.277163100242614757195980246252 -0.102686101198196405581697376874 +0.0513624012470245416839276231258 -0.184383797645568864309595369377 0.0580045998096466106086488423443 +0.0513624012470245416839276231258 0.184383797645568864309595369377 0.0580045998096466106086488423443 +0.0513792999088764149040464701557 -0.676650083065032936779914507497 0.171770901978015894107088001874 +0.0513792999088764149040464701557 0.676650083065032936779914507497 0.171770901978015894107088001874 +0.0513850495219230624099893134371 -0.13840229809284210205078125 0.026540100574493408203125 +0.0513850495219230624099893134371 0.13840229809284210205078125 0.026540100574493408203125 +0.0514549478888511671592631557814 -0.0621400505304336506218199076557 -0.126455551385879522152677623126 +0.0514549478888511671592631557814 0.0621400505304336506218199076557 -0.126455551385879522152677623126 +0.05147925205528736114501953125 -0.320347510278224945068359375 0.67618574202060699462890625 +0.05147925205528736114501953125 0.320347510278224945068359375 0.67618574202060699462890625 +0.0515254996716976165771484375 0 0.2446327507495880126953125 +0.0516193985939025906661825615629 -0.0375032007694244412521200615629 -0.0769995987415313803969851846887 +0.0516193985939025906661825615629 0.0375032007694244412521200615629 -0.0769995987415313803969851846887 +0.0516500987112522152999716240629 -0.446241608262062106060596988755 0.0264725999906659133220632185157 +0.0516500987112522152999716240629 0.446241608262062106060596988755 0.0264725999906659133220632185157 +0.05166280269622802734375 -0.3375627994537353515625 -0.208284401893615744860710492503 +0.05166280269622802734375 0.3375627994537353515625 -0.208284401893615744860710492503 +0.051855750381946563720703125 0 0.748205244541168212890625 +0.0519119985401630401611328125 -0.159764997661113739013671875 -0.73094473779201507568359375 +0.0519119985401630401611328125 0.159764997661113739013671875 -0.73094473779201507568359375 +0.0520301995798945413063130160936 -0.727033025026321388928352007497 -0.437283372879028298108039507497 +0.0520301995798945413063130160936 0.727033025026321388928352007497 -0.437283372879028298108039507497 +0.0520363479852676349968199076557 -0.140407499670982344186498380623 0.00882990024983882834663795335928 +0.0520363479852676349968199076557 0.140407499670982344186498380623 0.00882990024983882834663795335928 +0.0520544983446598052978515625 -0.374715507030487060546875 0.32692348957061767578125 +0.0520544983446598052978515625 0.374715507030487060546875 0.32692348957061767578125 +0.0520649485290050478836221259371 -0.34259785711765289306640625 -0.0491512000560760456413511576557 +0.0520649485290050478836221259371 0.34259785711765289306640625 -0.0491512000560760456413511576557 +0.0520901978015899658203125 -0.140269500017166121041967130623 -0.010539449751377105712890625 +0.0520901978015899658203125 0.140269500017166121041967130623 -0.010539449751377105712890625 +0.0521021008491516154914613423443 -0.01335220038890838623046875 0.08430349826812744140625 +0.0521021008491516154914613423443 0.01335220038890838623046875 0.08430349826812744140625 +0.0522004999220371246337890625 -0.4861845076084136962890625 -0.1044014990329742431640625 +0.0522004999220371246337890625 0.4861845076084136962890625 -0.1044014990329742431640625 +0.0522499024868011488487162807814 -0.0852639973163604736328125 0 +0.0522499024868011488487162807814 0.0852639973163604736328125 0 +0.0522521987557411152214292826557 -0.224934303760528558902009876874 0.191505306959152216128572376874 +0.0522521987557411152214292826557 0.224934303760528558902009876874 0.191505306959152216128572376874 +0.052335001528263092041015625 -0.16106800734996795654296875 -0.470444500446319580078125 +0.052335001528263092041015625 0.161068499088287353515625 -0.470444500446319580078125 +0.0523490011692047119140625 -0.0843910992145538441100427462516 0.011734999716281890869140625 +0.0523490011692047119140625 0.0843910992145538441100427462516 0.011734999716281890869140625 +0.0523950994014740004112162807814 -0.0840176999568939264495526231258 -0.0139920994639396670949915701954 +0.0523950994014740004112162807814 0.0840176999568939264495526231258 -0.0139920994639396670949915701954 +0.052395999431610107421875 -0.16126050055027008056640625 0.4703719913959503173828125 +0.052395999431610107421875 0.16126050055027008056640625 0.4703719913959503173828125 +0.0524707473814487457275390625 -0.74076600372791290283203125 -0.1049407459795475006103515625 +0.0524707473814487457275390625 0.74076600372791290283203125 -0.1049407459795475006103515625 +0.0524735987186431898643412807814 -0.0545103013515472467620526231258 -0.0653846025466919000823651231258 +0.0524735987186431898643412807814 0.0545103013515472467620526231258 -0.0653846025466919000823651231258 +0.0525034010410308851768412807814 -0.0790111005306243924239950615629 0.0316327989101409939864950615629 +0.0525034010410308851768412807814 0.0790111005306243924239950615629 0.0316327989101409939864950615629 +0.0525048017501831068565287807814 -0.188323402404785178454460492503 -0.0421608000993728693206463731258 +0.0525048017501831068565287807814 0.188323402404785178454460492503 -0.0421608000993728693206463731258 +0.0525219999253749847412109375 -0.1616429984569549560546875 -0.1833384931087493896484375 +0.0525219999253749847412109375 0.1616429984569549560546875 -0.1833384931087493896484375 +0.0525244988501071888298277201557 -0.439814889430999722552684261245 -0.542036604881286576684829014994 +0.0525244988501071888298277201557 0.439814889430999722552684261245 -0.542036604881286576684829014994 +0.0525585003197193145751953125 -0.2149614989757537841796875 0.116314999759197235107421875 +0.0525585003197193145751953125 0.2149614989757537841796875 0.116314999759197235107421875 +0.052564799785614013671875 -0.332323598861694380346420985006 0.216328406333923362048210492503 +0.052564799785614013671875 0.332323598861694380346420985006 0.216328406333923362048210492503 +0.0525730013847351129729901231258 0 0.0850651979446411243834802462516 +0.05257380008697509765625 -0.161802399158477799856470369377 -0.1051476001739501953125 +0.05257380008697509765625 0.161802399158477799856470369377 -0.1051476001739501953125 +0.0525827988982200608680805942186 -0.291424208879470791888621761245 0.52183020114898681640625 +0.0525827988982200608680805942186 0.291424208879470791888621761245 0.52183020114898681640625 +0.052661001682281494140625 -0.606107580661773615027243522491 0.34620879590511322021484375 +0.052661001682281494140625 0.606107580661773615027243522491 0.34620879590511322021484375 +0.0526749014854431124588174384371 -0.0974580019712448092361611884371 0.278795993328094460217414507497 +0.0526749014854431124588174384371 0.0974580019712448092361611884371 0.278795993328094460217414507497 +0.0527006998658180250694194057814 -0.162193197011947620733707253748 -0.246811795234680164679019753748 +0.0527006998658180250694194057814 0.162193197011947620733707253748 -0.246811795234680164679019753748 +0.0527402007952332482765278598436 -0.571421182155609108654914507497 0.757097727060317970959602007497 +0.0527402007952332482765278598436 0.571421182155609108654914507497 0.757097727060317970959602007497 +0.0527512013912200955489950615629 -0.267842388153076205181690738755 -0.292365598678588856085269753748 +0.0527512013912200955489950615629 0.267842388153076205181690738755 -0.292365598678588856085269753748 +0.05279000103473663330078125 -0.6881849765777587890625 -0.723612010478973388671875 +0.05279000103473663330078125 0.6881849765777587890625 -0.723612010478973388671875 +0.0527978003025054987151776231258 -0.135794198513031011410490123126 -0.137012195587158214227230246252 +0.0527978003025054987151776231258 0.135794198513031011410490123126 -0.137012195587158214227230246252 +0.0528273999691009563117738423443 -0.0571137011051177992393412807814 0.0628274977207183837890625 +0.0528273999691009563117738423443 0.0571137011051177992393412807814 0.0628274977207183837890625 +0.0528762519359588581413511576557 -0.343519043922424271997329014994 0.0412152994424104662796182196871 +0.0528762519359588581413511576557 0.343519043922424271997329014994 0.0412152994424104662796182196871 +0.0529353976249694879729901231258 -0.0782782971858978354751101846887 -0.03271619975566864013671875 +0.0529353976249694879729901231258 0.0782782971858978354751101846887 -0.03271619975566864013671875 +0.05299650132656097412109375 -0.19647325575351715087890625 -0.14522249996662139892578125 +0.05299650132656097412109375 0.19647325575351715087890625 -0.14522249996662139892578125 +0.0530120015144348172286825615629 -0.732993602752685546875 -0.31608641147613525390625 +0.0530120015144348172286825615629 0.732993602752685546875 -0.31608641147613525390625 +0.0530130006372928619384765625 -0.2287607491016387939453125 0.08577950298786163330078125 +0.0530130006372928619384765625 0.2287607491016387939453125 0.08577950298786163330078125 +0.0530169010162353515625 -0.0334136992692947373817524692186 0.0779277026653289878188601846887 +0.0530169010162353515625 0.0334136992692947373817524692186 0.0779277026653289878188601846887 +0.0530387997627258314659037807814 -0.189564394950866715872095369377 0.0353868007659912109375 +0.0530387997627258314659037807814 0.189564394950866715872095369377 0.0353868007659912109375 +0.05304645001888275146484375 -0.223395743966102594546541126874 -0.387014839053153980596988503748 +0.05304645001888275146484375 0.223395743966102594546541126874 -0.387014839053153980596988503748 +0.0530789971351623562911825615629 -0.0772368013858795166015625 0.176683604717254638671875 +0.0530789971351623562911825615629 0.0772368013858795166015625 0.176683604717254638671875 +0.0530972518026828765869140625 -0.0999407470226287841796875 -0.22291825711727142333984375 +0.0530972518026828765869140625 0.0999407470226287841796875 -0.22291825711727142333984375 +0.053137801587581634521484375 -0.421383011341094959600894753748 0.423807585239410367083934261245 +0.053137801587581634521484375 0.421383011341094959600894753748 0.423807585239410367083934261245 +0.0531392011791467638870400946871 -0.0386080002412199987937846401564 -0.947726643085479714123664507497 +0.0531392011791467638870400946871 0.0386080002412199987937846401564 -0.947726643085479714123664507497 +0.0532225504517555222938618442186 -0.110218352079391471165514815311 -0.0867137968540191567123898153113 +0.0532225504517555222938618442186 0.110218352079391471165514815311 -0.0867137968540191567123898153113 +0.0532290011644363444953675923443 -0.310336413979530378881577235006 -0.450952166318893454821647992503 +0.0532290011644363444953675923443 0.310336413979530378881577235006 -0.450952166318893454821647992503 +0.0532342016696929973273988423443 -0.163840997219085710012720369377 0.101598405838012703639172684689 +0.0532342016696929973273988423443 0.163840997219085710012720369377 0.101598405838012703639172684689 +0.05328600108623504638671875 -0.1640002429485321044921875 0.18100975453853607177734375 +0.05328600108623504638671875 0.1640002429485321044921875 0.18100975453853607177734375 +0.0533028006553649957854901231258 -0.0785640001296997181334802462516 0.3885695934295654296875 +0.0533028006553649957854901231258 0.0785640001296997181334802462516 0.3885695934295654296875 +0.0533110015094280242919921875 -0.3626464903354644775390625 -0.340066492557525634765625 +0.0533110015094280242919921875 0.3626464903354644775390625 -0.340066492557525634765625 +0.053434498608112335205078125 -0.647012096643447831567641514994 0.261763605475425709112613503748 +0.053434498608112335205078125 0.647012096643447831567641514994 0.261763605475425709112613503748 +0.0534409493207931504676899692186 -0.10012485086917877197265625 0.0980770468711853055099325615629 +0.0534409493207931504676899692186 0.10012485086917877197265625 0.0980770468711853055099325615629 +0.0534449994564056354851011576557 -0.267877507209777820929019753748 0.12403710186481475830078125 +0.0534449994564056354851011576557 0.267877507209777820929019753748 0.12403710186481475830078125 +0.053459398448467254638671875 -0.0512143492698669405838174384371 -0.1304575502872467041015625 +0.053459398448467254638671875 0.0512143492698669405838174384371 -0.1304575502872467041015625 +0.0534638978540897327751402201557 -0.571359580755233742443977007497 -0.400862020254135087427016514994 +0.0534638978540897327751402201557 0.571359580755233742443977007497 -0.400862020254135087427016514994 +0.05348490178585052490234375 -0.282222604751586891858039507497 0.08654339611530303955078125 +0.05348490178585052490234375 0.282222604751586891858039507497 0.08654339611530303955078125 +0.0535999506711959880500550923443 -0.356690239906311046258480246252 0.26907075941562652587890625 +0.0535999506711959880500550923443 0.356690239906311046258480246252 0.26907075941562652587890625 +0.053646750748157501220703125 -0.111115001142024993896484375 0.2174292504787445068359375 +0.053646750748157501220703125 0.111115001142024993896484375 0.2174292504787445068359375 +0.0536800488829612745811381557814 -0.381015890836715664935496761245 -0.757922074198722817151008257497 +0.0536800488829612745811381557814 0.381015890836715664935496761245 -0.757922074198722817151008257497 +0.0536947011947631891448651231258 -0.03076539933681488037109375 -0.0785516977310180691818075615629 +0.0536947011947631891448651231258 0.03076539933681488037109375 -0.0785516977310180691818075615629 +0.0537424027919769300987162807814 -0.1921308040618896484375 -0.0140525996685028076171875 +0.0537424027919769300987162807814 0.1921308040618896484375 -0.0140525996685028076171875 +0.0537829030305147157142720004686 -0.70580174028873443603515625 0.470586356520652782098323996252 +0.0537829030305147157142720004686 0.70580174028873443603515625 0.470586356520652782098323996252 +0.0538250029087066692023988423443 -0.0749433994293212946136151231258 0.0385533004999160794357138115629 +0.0538250029087066692023988423443 0.0749433994293212946136151231258 0.0385533004999160794357138115629 +0.0538778487592935576011576870314 -0.251371255517005953716846988755 -0.59700028598308563232421875 +0.0538778487592935576011576870314 0.251371255517005953716846988755 -0.59700028598308563232421875 +0.0538845986127853351921324076557 -0.212615200877189630679353626874 -0.272747647762298539575454014994 +0.0538845986127853351921324076557 0.212615200877189630679353626874 -0.272747647762298539575454014994 +0.0539080023765564006477113423443 -0.192237603664398210012720369377 0.0117732003331184401084819057814 +0.0539080023765564006477113423443 0.192237603664398210012720369377 0.0117732003331184401084819057814 +0.0539093498140573515464701870314 -0.485558152198791559417401231258 -0.252639757096767447741569867503 +0.0539093498140573515464701870314 0.485558152198791559417401231258 -0.252639757096767447741569867503 +0.053920201957225799560546875 -0.126026102900505060366853626874 -0.0609100520610809312294087192186 +0.053920201957225799560546875 0.126026102900505060366853626874 -0.0609100520610809312294087192186 +0.0539267003536224379112162807814 -0.0634573996067047119140625 -0.0553631007671356242805238423443 +0.0539267003536224379112162807814 0.0634573996067047119140625 -0.0553631007671356242805238423443 +0.05399119853973388671875 -0.362331604957580599712940738755 -0.160626399517059342825220369377 +0.05399119853973388671875 0.362331604957580599712940738755 -0.160626399517059342825220369377 +0.054000198841094970703125 -0.123090398311615001336605246252 0.148097205162048356497095369377 +0.054000198841094970703125 0.123090398311615001336605246252 0.148097205162048356497095369377 +0.0540336012840271009971537807814 -0.0887902021408081137954226846887 -0.170870196819305431024105246252 +0.0540336012840271009971537807814 0.0887902021408081137954226846887 -0.170870196819305431024105246252 +0.0540637493133544894119424384371 -0.0691317021846771240234375 0.121646699309349057283036188437 +0.0540637493133544894119424384371 0.0691317021846771240234375 0.121646699309349057283036188437 +0.0540723010897636371940855326557 -0.166420501470565779245092130623 0.243680691719055153576789507497 +0.0540723010897636371940855326557 0.166420501470565779245092130623 0.243680691719055153576789507497 +0.0541339471936225849479917826557 -0.166611053049564361572265625 0.831751352548599220959602007497 +0.0541339471936225849479917826557 0.166611053049564361572265625 0.831751352548599220959602007497 +0.0541553020477294963508363423443 -0.0615451991558075006683026231258 0.0572659015655517592002787807814 +0.0541553020477294963508363423443 0.0615451991558075006683026231258 0.0572659015655517592002787807814 +0.05416199751198291778564453125 -0.49011898040771484375 0.56511072814464569091796875 +0.05416199751198291778564453125 0.49011898040771484375 0.56511072814464569091796875 +0.0541759990155696868896484375 -0.4892649948596954345703125 0.087661497294902801513671875 +0.0541759990155696868896484375 0.4892649948596954345703125 0.087661497294902801513671875 +0.0542217016220092815070863423443 -0.0476218998432159437705912807814 -0.0692255020141601534744424384371 +0.0542217016220092815070863423443 0.0476218998432159437705912807814 -0.0692255020141601534744424384371 +0.0542699977755546555946430942186 -0.0394294515252113300651792826557 0.134164354205131536312833873126 +0.0542699977755546555946430942186 0.0394294515252113300651792826557 0.134164354205131536312833873126 +0.0542706012725830064247212192186 -0.08816684782505035400390625 -0.10854180157184600830078125 +0.0542706012725830064247212192186 0.08816684782505035400390625 -0.10854180157184600830078125 +0.0543143987655639662315287807814 -0.768949604034423916942841970013 -0.213930392265319846423210492503 +0.0543143987655639662315287807814 0.768949604034423916942841970013 -0.213930392265319846423210492503 +0.0543528020381927462478799384371 -0.0394896000623702961296324076557 0.596226596832275412829460492503 +0.0543528020381927462478799384371 0.0394896000623702961296324076557 0.596226596832275412829460492503 +0.0543621003627777071853799384371 -0.03949619829654693603515625 0.292377895116806008068977007497 +0.0543621003627777071853799384371 0.03949619829654693603515625 0.292377895116806008068977007497 +0.0543668985366821261306924384371 -0.0919302999973297119140625 0.3333064019680023193359375 +0.0543668985366821261306924384371 0.0919302999973297119140625 0.3333064019680023193359375 +0.0543786004185676588584819057814 -0.08844660222530364990234375 -0.590948402881622314453125 +0.0543786004185676588584819057814 0.08844660222530364990234375 -0.590948402881622314453125 +0.05439300276339054107666015625 -0.74282924830913543701171875 0.0880124978721141815185546875 +0.05439300276339054107666015625 0.74282924830913543701171875 0.0880124978721141815185546875 +0.0544484987854957566688618442186 -0.0888000011444091824630575615629 -0.2813360989093780517578125 +0.0544484987854957566688618442186 0.0888000011444091824630575615629 -0.2813360989093780517578125 +0.0544831484556198078483824076557 -0.00999060049653053248996936730464 0.139397853612899774722322376874 +0.0544831484556198078483824076557 0.00999060049653053248996936730464 0.139397853612899774722322376874 +0.05453725159168243408203125 -0.23378224670886993408203125 -0.069796502590179443359375 +0.05453725159168243408203125 0.23378224670886993408203125 -0.069796502590179443359375 +0.0546351015567779554893412807814 -0.0816232025623321588714276231258 0.0187791004776954664756694057814 +0.0546351015567779554893412807814 0.0816232025623321588714276231258 0.0187791004776954664756694057814 +0.0546428024768829401214276231258 -0.0743492007255554254729901231258 -0.0385533988475799602180238423443 +0.0546428024768829401214276231258 0.0743492007255554254729901231258 -0.0385533988475799602180238423443 +0.0546531975269317626953125 0 0.192387795448303228207365123126 +0.0546615011990070343017578125 -0.2762239873409271240234375 0.413173496723175048828125 +0.0546615011990070343017578125 0.2762239873409271240234375 0.413173496723175048828125 +0.0547522492706775595894264085928 -0.34569080173969268798828125 0 +0.0547522492706775595894264085928 0.34569080173969268798828125 0 +0.05480539798736572265625 -0.0398184001445770277549662807814 0.188177800178527837582365123126 +0.05480539798736572265625 0.0398184001445770277549662807814 0.188177800178527837582365123126 +0.05481719970703125 -0.0703980028629302978515625 0.0451575011014938368369975307814 +0.05481719970703125 0.0703980028629302978515625 0.0451575011014938368369975307814 +0.05484449863433837890625 -0.0812168002128601101974325615629 -0.0198974996805191053916850307814 +0.05484449863433837890625 0.0812168002128601101974325615629 -0.0198974996805191053916850307814 +0.0548708021640777615646200615629 -0.0398654013872146648078675923443 -0.188148796558380126953125 +0.0548708021640777615646200615629 0.0398654013872146648078675923443 -0.188148796558380126953125 +0.0548872981220483793785014370314 -0.168927854299545293637052623126 0.625260335206985540246193977509 +0.0548872981220483793785014370314 0.168927854299545293637052623126 0.625260335206985540246193977509 +0.0549051001667976365516743442186 -0.28819620609283447265625 -0.062676899135112762451171875 +0.0549051001667976365516743442186 0.28819620609283447265625 -0.062676899135112762451171875 +0.0549112021923065241058026231258 -0.34170401096343994140625 0.721264791488647527550881477509 +0.0549112021923065241058026231258 0.34170401096343994140625 0.721264791488647527550881477509 +0.0549213014543056474159321567186 -0.697841906547546297900908029987 0 +0.0549213014543056474159321567186 0.697841906547546297900908029987 0 +0.0549433484673500019401792826557 -0.129739353060722345523103626874 0.05146770179271697998046875 +0.0549433484673500019401792826557 0.129739353060722345523103626874 0.05146770179271697998046875 +0.0549700975418090861945863423443 -0.020036600530147552490234375 0.08109760284423828125 +0.0549700975418090861945863423443 0.020036600530147552490234375 0.08109760284423828125 +0.05498600006103515625 -0.448399007320404052734375 0.2142769992351531982421875 +0.05498600006103515625 0.448399007320404052734375 0.2142769992351531982421875 +0.05500090122222900390625 -0.03996039927005767822265625 0.0733353018760681124588174384371 +0.05500090122222900390625 0.03996039927005767822265625 0.0733353018760681124588174384371 +0.0550086021423339815994424384371 -0.463542008399963345599559261245 -0.376964986324310302734375 +0.0550086021423339815994424384371 0.463542008399963345599559261245 -0.376964986324310302734375 +0.05504924990236759185791015625 -0.7249822318553924560546875 0.1840402521193027496337890625 +0.05504924990236759185791015625 0.7249822318553924560546875 0.1840402521193027496337890625 +0.0550907995551824583579936245314 -0.769799673557281516345085492503 -0.463005924224853537829460492503 +0.0550907995551824583579936245314 0.769799673557281516345085492503 -0.463005924224853537829460492503 +0.055178500711917877197265625 -0.4730984866619110107421875 0.152095496654510498046875 +0.055178500711917877197265625 0.4730984866619110107421875 0.152095496654510498046875 +0.0551807999610900920539613423443 0 0.396175599098205599712940738755 +0.0552269995212554959396200615629 -0.0656002998352050864516726846887 0.0514450013637542738487162807814 +0.0552269995212554959396200615629 0.0656002998352050864516726846887 0.0514450013637542738487162807814 +0.0552689991891384124755859375 -0.0401547513902187347412109375 -0.2404847443103790283203125 +0.0552689991891384124755859375 0.0401547513902187347412109375 -0.2404847443103790283203125 +0.0552770018577575725227113423443 -0.170127999782562266961605246252 0.0894429981708526611328125 +0.0552770018577575725227113423443 0.170127999782562266961605246252 0.0894429981708526611328125 +0.0552788019180297865440287807814 -0.170127999782562266961605246252 -0.35777199268341064453125 +0.0552788019180297865440287807814 0.170127999782562266961605246252 -0.35777199268341064453125 +0.0552796006202697781661825615629 -0.38042199611663818359375 -0.110558795928955080900557561563 +0.0552796006202697781661825615629 0.38042199611663818359375 -0.110558795928955080900557561563 +0.0553128004074096707443075615629 0 0.798085594177246115954460492503 +0.0553727984428405775596537807814 -0.17041599750518798828125 -0.779674386978149502880341970013 +0.0553727984428405775596537807814 0.17041599750518798828125 -0.779674386978149502880341970013 +0.0554304018616676302810830634371 -0.10669170320034027099609375 0.08969025313854217529296875 +0.0554304018616676302810830634371 0.10669170320034027099609375 0.08969025313854217529296875 +0.0554902017116546686370526231258 -0.0238673001527786275699494211722 -0.0796944022178650013366052462516 +0.0554902017116546686370526231258 0.0238673001527786275699494211722 -0.0796944022178650013366052462516 +0.0555160008370876312255859375 -0.6014959812164306640625 0.79694497585296630859375 +0.0555160008370876312255859375 0.6014959812164306640625 0.79694497585296630859375 +0.0555589996278285924713458143742 -0.246392300724983193127570757497 0.242289257049560530221654630623 +0.0555589996278285924713458143742 0.246392300724983193127570757497 0.242289257049560530221654630623 +0.0556577995419502216667417826557 -0.211339491605758655889957253748 -0.205518293380737293585269753748 +0.0556577995419502216667417826557 0.211339491605758655889957253748 -0.205518293380737293585269753748 +0.055679000914096832275390625 -0.23654949665069580078125 0.0586872510612010955810546875 +0.055679000914096832275390625 0.23654949665069580078125 0.0586872510612010955810546875 +0.0556971013545990017989950615629 -0.0828446984291076743422976846887 0.005881600081920623779296875 +0.0556971013545990017989950615629 0.0828446984291076743422976846887 0.005881600081920623779296875 +0.0557587027549743680099325615629 -0.0827147006988525473891726846887 -0.00701769962906837515420610529304 +0.0557587027549743680099325615629 0.0827147006988525473891726846887 -0.00701769962906837515420610529304 +0.055802501738071441650390625 -0.04054249823093414306640625 -0.4952194988727569580078125 +0.055802501738071441650390625 0.04054249823093414306640625 -0.4952194988727569580078125 +0.055803000926971435546875 -0.0405427992343902615646200615629 -0.0724038004875183077713174384371 +0.055803000926971435546875 0.0405427992343902615646200615629 -0.0724038004875183077713174384371 +0.0558140017092227935791015625 -0.02014275081455707550048828125 -0.2428559958934783935546875 +0.0558140017092227935791015625 0.02014275081455707550048828125 -0.2428559958934783935546875 +0.0559197008609771742393412807814 -0.0066740997135639190673828125 0.0826344013214111439147302462516 +0.0559197008609771742393412807814 0.0066740997135639190673828125 0.0826344013214111439147302462516 +0.0559289492666721274605201585928 -0.26527549326419830322265625 -0.221361353993415804763955634371 +0.0559289492666721274605201585928 0.26527549326419830322265625 -0.221361353993415804763955634371 +0.055936001241207122802734375 -0.0406400002539157867431640625 -0.9976069927215576171875 +0.055936001241207122802734375 0.0406400002539157867431640625 -0.9976069927215576171875 +0.0559687972068786676604901231258 -0.7901504039764404296875 -0.111936795711517336759932561563 +0.0559687972068786676604901231258 0.7901504039764404296875 -0.111936795711517336759932561563 +0.0559759497642517075965962192186 -0.132713699340820306948884876874 -0.0418779015541076646278462192186 +0.0559759497642517075965962192186 0.132713699340820306948884876874 -0.0418779015541076646278462192186 +0.05598700046539306640625 0 -0.4968554973602294921875 +0.0559891507029533358474893134371 -0.0230957988649606697773020158593 0.34471990168094635009765625 +0.0559891507029533358474893134371 0.0230957988649606697773020158593 0.34471990168094635009765625 +0.0559946984052658094932475307814 -0.289992892742156949115184261245 0.052617900073528289794921875 +0.0559946984052658094932475307814 0.289992892742156949115184261245 0.052617900073528289794921875 +0.055996000766754150390625 0 -0.24364824593067169189453125 +0.0560109972953796442229901231258 -0.0242379993200302137901225307814 -0.190460598468780523129240123126 +0.0560109972953796442229901231258 0.0242379993200302137901225307814 -0.190460598468780523129240123126 +0.0560725986957550104339276231258 -0.0700617015361785916427450615629 -0.0441271990537643460372763115629 +0.0560725986957550104339276231258 0.0700617015361785916427450615629 -0.0441271990537643460372763115629 +0.0560880012810230296760316548443 -0.172624504566192632504240123126 0.411770260334014925884815738755 +0.0560880012810230296760316548443 0.172624504566192632504240123126 0.411770260334014925884815738755 +0.0560899488627910544624732835928 -0.126555445790290821417301003748 -0.32146169245243072509765625 +0.0560899488627910544624732835928 0.126555445790290821417301003748 -0.32146169245243072509765625 +0.0560954995453357696533203125 -0.06587350368499755859375 0.4924570024013519287109375 +0.0560954995453357696533203125 0.06587350368499755859375 0.4924570024013519287109375 +0.0562056005001068115234375 -0.237049806118011463507144753748 0.175066494941711420230134876874 +0.0562056005001068115234375 0.237049806118011463507144753748 0.175066494941711420230134876874 +0.0562273979187011760383363423443 -0.0571246027946472195724325615629 -0.0597935020923614501953125 +0.0562273979187011760383363423443 0.0571246027946472195724325615629 -0.0597935020923614501953125 +0.0562488973140716566612162807814 -0.0161002993583679206157643903907 -0.0810976982116699274261151231258 +0.0562488973140716566612162807814 0.0161002993583679206157643903907 -0.0810976982116699274261151231258 +0.05627624876797199249267578125 -0.4712302386760711669921875 -0.580753505229949951171875 +0.05627624876797199249267578125 0.4712302386760711669921875 -0.580753505229949951171875 +0.0563051998615264892578125 -0.00813520029187202523002220289072 -0.191738200187683116570980246252 +0.0563051998615264892578125 0.00813520029187202523002220289072 -0.191738200187683116570980246252 +0.0563252516090869889686665317186 -0.7788057029247283935546875 -0.335841812193393707275390625 +0.0563252516090869889686665317186 0.7788057029247283935546875 -0.335841812193393707275390625 +0.05635724961757659912109375 -0.06601999700069427490234375 0.2344464957714080810546875 +0.05635724961757659912109375 0.06601999700069427490234375 0.2344464957714080810546875 +0.0563717007637023967414613423443 -0.514826384186744756554787727509 -0.185138247907161740402059990629 +0.0563717007637023967414613423443 0.514826384186744756554787727509 -0.185138247907161740402059990629 +0.0563963994383811922928018134371 -0.134460148215293867623998380623 0.0352123506367206587364115932814 +0.0563963994383811922928018134371 0.134460148215293867623998380623 0.0352123506367206587364115932814 +0.0564166009426116943359375 -0.046087801456451416015625 0.0685060024261474609375 +0.0564166009426116943359375 0.046087801456451416015625 0.0685060024261474609375 +0.0564225018024444580078125 -0.6494009792804718017578125 0.370937995612621307373046875 +0.0564225018024444580078125 0.6494009792804718017578125 0.370937995612621307373046875 +0.0564414024353027399261151231258 -0.173706197738647483141960492503 -0.0814894020557403592208700615629 +0.0564414024353027399261151231258 0.173706197738647483141960492503 -0.0814894020557403592208700615629 +0.056473799049854278564453125 -0.120224851369857776983707253748 -0.0696899995207786587814169365629 +0.056473799049854278564453125 0.120224851369857776983707253748 -0.0696899995207786587814169365629 +0.0565083011984825120399555942186 -0.041055299341678619384765625 -0.132745197415351873226896373126 +0.0565083011984825120399555942186 0.041055299341678619384765625 -0.132745197415351873226896373126 +0.0565573476254940046836772182814 -0.114829203486442571469083873126 -0.431410950422286998406917746252 +0.0565573476254940046836772182814 0.114829203486442571469083873126 -0.431410950422286998406917746252 +0.0565796017646789592414613423443 -0.0783451020717620960631677462516 0.0257059007883071906352956403907 +0.0565796017646789592414613423443 0.0783451020717620960631677462516 0.0257059007883071906352956403907 +0.0566540002822875990440287807814 -0.00823220014572143519993030480464 -0.0819912016391754205901776231258 +0.0566540002822875990440287807814 0.00823220014572143519993030480464 -0.0819912016391754205901776231258 +0.056654751300811767578125 -0.24096524715423583984375 -0.03501474857330322265625 +0.056654751300811767578125 0.24096524715423583984375 -0.03501474857330322265625 +0.056791000068187713623046875 -0.4955230057239532470703125 -0.0350989997386932373046875 +0.056791000068187713623046875 0.4955230057239532470703125 -0.0350989997386932373046875 +0.0568376988172531114051899692186 -0.403428590297699007916065738755 -0.802505725622177146227897992503 +0.0568376988172531114051899692186 0.403428590297699007916065738755 -0.802505725622177146227897992503 +0.0568468987941741984992738423443 0 -0.0822704017162323025802450615629 +0.0568596020340919466873330634371 -0.174998247623443597964509876874 0.297728902101516701428352007497 +0.0568596020340919466873330634371 0.174998247623443597964509876874 0.297728902101516701428352007497 +0.05686350166797637939453125 -0.0786159038543701171875 0.114394345879554742984041126874 +0.05686350166797637939453125 0.0786159038543701171875 0.114394345879554742984041126874 +0.0569466032087802900840678432814 -0.7473194897174835205078125 0.498267906904220569952457253748 +0.0569466032087802900840678432814 0.7473194897174835205078125 0.498267906904220569952457253748 +0.0569646988064050688316264370314 -0.315709559619426760601612613755 0.5653160512447357177734375 +0.0569646988064050688316264370314 0.315709559619426760601612613755 0.5653160512447357177734375 +0.0569814026355743435958700615629 -0.0656277000904083307464276231258 -0.04945839941501617431640625 +0.0569814026355743435958700615629 0.0656277000904083307464276231258 -0.04945839941501617431640625 +0.0569911479949951130241636576557 -0.101836046576499930638171065311 -0.09424124658107757568359375 +0.0569911479949951130241636576557 0.101836046576499930638171065311 -0.09424124658107757568359375 +0.0569942481815814971923828125 -0.01651049964129924774169921875 0.2428559958934783935546875 +0.0569942481815814971923828125 0.01651049964129924774169921875 0.2428559958934783935546875 +0.0570015013217926025390625 -0.272581207752227772100894753748 0.35348309576511383056640625 +0.0570015013217926025390625 0.272581207752227772100894753748 0.35348309576511383056640625 +0.0570257492363452911376953125 -0.1755104959011077880859375 0.1686537563800811767578125 +0.0570257492363452911376953125 0.1755104959011077880859375 0.1686537563800811767578125 +0.0570267975330352797080912807814 -0.0780201971530914417662927462516 -0.0257059007883071906352956403907 +0.0570267975330352797080912807814 0.0780201971530914417662927462516 -0.0257059007883071906352956403907 +0.05705440044403076171875 -0.0743484020233154269119424384371 -0.176683604717254638671875 +0.05705440044403076171875 0.0743484020233154269119424384371 -0.176683604717254638671875 +0.0570716023445129450042401231258 -0.132567596435546886102230246252 0.138451004028320306948884876874 +0.0570716023445129450042401231258 0.132567596435546886102230246252 0.138451004028320306948884876874 +0.0571073994040489155143980326557 -0.1240662038326263427734375 0.062018550932407379150390625 +0.0571073994040489155143980326557 0.1240662038326263427734375 0.062018550932407379150390625 +0.057170249521732330322265625 -0.24159824848175048828125 0.0293577499687671661376953125 +0.057170249521732330322265625 0.24159824848175048828125 0.0293577499687671661376953125 +0.0571968019008636460731587192186 -0.0783737987279891912262286268742 -0.114394345879554742984041126874 +0.0571968019008636460731587192186 0.0783737987279891912262286268742 -0.114394345879554742984041126874 +0.0572296023368835463096537807814 -0.345970797538757368627670985006 0.192429602146148681640625 +0.0572296023368835463096537807814 0.345970797538757368627670985006 0.192429602146148681640625 +0.0572512485086917877197265625 -0.69322724640369415283203125 0.280461005866527557373046875 +0.0572512485086917877197265625 0.69322724640369415283203125 0.280461005866527557373046875 +0.0572599481791257886031942803129 -0.412187057733535811010483485006 0.359615838527679476666065738755 +0.0572599481791257886031942803129 0.412187057733535811010483485006 0.359615838527679476666065738755 +0.05728274770081043243408203125 -0.61217097938060760498046875 -0.42949502170085906982421875 +0.05728274770081043243408203125 0.61217097938060760498046875 -0.42949502170085906982421875 +0.05730240046977996826171875 -0.112407597899436953459151311563 0.0811231523752212468902911268742 +0.05730240046977996826171875 0.112407597899436953459151311563 0.0811231523752212468902911268742 +0.0573182970285415691047425923443 -0.17641170322895050048828125 0.880677902698516867907585492503 +0.0573182970285415691047425923443 0.17641170322895050048828125 0.880677902698516867907585492503 +0.0573248028755188043792401231258 -0.262646007537841785772769753748 0.296194005012512195929019753748 +0.0573248028755188043792401231258 0.262646007537841785772769753748 0.296194005012512195929019753748 +0.0573800027370452922492738423443 -0.123846995830535891447432561563 -0.146182799339294428042634876874 +0.0573800027370452922492738423443 0.123846995830535891447432561563 -0.146182799339294428042634876874 +0.057388998568058013916015625 -0.4958240091800689697265625 0.02941399998962879180908203125 +0.057388998568058013916015625 0.4958240091800689697265625 0.02941399998962879180908203125 +0.0574025988578796345085386576557 -0.138581854104995710885717130623 0 +0.0574025988578796345085386576557 0.138581854104995710885717130623 0 +0.0574205499142408440360618726572 -0.53480295836925506591796875 -0.114841648936271675807141434689 +0.0574205499142408440360618726572 0.53480295836925506591796875 -0.114841648936271675807141434689 +0.05743730068206787109375 -0.0265516012907028205181081403907 0.0774336993694305503188601846887 +0.05743730068206787109375 0.0265516012907028205181081403907 0.0774336993694305503188601846887 +0.0574534490704536396354917826557 -0.137436595559120161569310880623 0.0176146499812602982948384067186 +0.0574534490704536396354917826557 0.137436595559120161569310880623 0.0176146499812602982948384067186 +0.0574644029140472453742738423443 -0.384775209426879927221420985006 0.0929823994636535672286825615629 +0.0574644029140472453742738423443 0.384775209426879927221420985006 0.0929823994636535672286825615629 +0.0574775993824005182464276231258 -0.0519254982471466092208700615629 0.0632461011409759521484375 +0.0574775993824005182464276231258 0.0519254982471466092208700615629 0.0632461011409759521484375 +0.0574810490012168870399555942186 -0.136947298049926752261384876874 -0.02100884914398193359375 +0.0574810490012168870399555942186 0.136947298049926752261384876874 -0.02100884914398193359375 +0.0575568020343780531455912807814 -0.177144801616668706722990123126 0.353987193107605013775440738755 +0.0575568020343780531455912807814 0.177144801616668706722990123126 0.353987193107605013775440738755 +0.05756595171988010406494140625 -0.456498262286186229363948996252 0.459124884009361300396534488755 +0.05756595171988010406494140625 0.456498262286186229363948996252 0.459124884009361300396534488755 +0.0575685016810894081840110914072 -0.177174808084964774401726117503 -0.517488950490951560290397992503 +0.0575685016810894081840110914072 0.177175348997116094418302623126 -0.517488950490951560290397992503 +0.0575980007648468073089276231258 -0.0908515989780426108657351846887 0.168607401847839372122095369377 +0.0575980007648468073089276231258 0.0908515989780426108657351846887 0.168607401847839372122095369377 +0.0576355993747711195518412807814 -0.177386550605297094174161998126 0.51740919053554534912109375 +0.0576355993747711195518412807814 0.177386550605297094174161998126 0.51740919053554534912109375 +0.0576392993330955491493305942186 -0.293655592203140247686832253748 -0.0210749991238117218017578125 +0.0576392993330955491493305942186 0.293655592203140247686832253748 -0.0210749991238117218017578125 +0.0577090486884117084831480326557 -0.817008954286575272973891514994 -0.227301041781902302130191628748 +0.0577090486884117084831480326557 0.817008954286575272973891514994 -0.227301041781902302130191628748 +0.05775225162506103515625 -0.0295906506478786461566965471093 -0.135237148404121404476896373126 +0.05775225162506103515625 0.0295906506478786461566965471093 -0.135237148404121404476896373126 +0.0577727973461151164680238423443 -0.522793579101562544408920985006 0.602784776687622092516960492503 +0.0577727973461151164680238423443 0.522793579101562544408920985006 0.602784776687622092516960492503 +0.0578180015087127741058026231258 -0.368767189979553267065170985006 0.143763196468353282586605246252 +0.0578180015087127741058026231258 0.368767189979553267065170985006 0.143763196468353282586605246252 +0.05789954960346221923828125 -0.0199882507324218756938893903907 0.136923748254775989874332253748 +0.05789954960346221923828125 0.0199882507324218756938893903907 0.136923748254775989874332253748 +0.05790840089321136474609375 -0.293827807903289772717414507497 0.0176577005535364130184294850778 +0.05790840089321136474609375 0.293827807903289772717414507497 0.0176577005535364130184294850778 +0.0579415977001190227180238423443 -0.321204400062561068462940738755 -0.231237196922302268298210492503 +0.0579415977001190227180238423443 0.321204400062561068462940738755 -0.231237196922302268298210492503 +0.0580192029476165813117738423443 -0.792351198196411199425881477509 0.093879997730255126953125 +0.0580192029476165813117738423443 -0.0339203000068664592414613423443 -0.0740485012531280489822549384371 +0.0580192029476165813117738423443 0.0339203000068664592414613423443 -0.0740485012531280489822549384371 +0.0580192029476165813117738423443 0.792351198196411199425881477509 0.093879997730255126953125 +0.0580222986638545962234658759371 -0.270707505941390980108707253748 -0.6429233849048614501953125 +0.0580222986638545962234658759371 0.270707505941390980108707253748 -0.6429233849048614501953125 +0.0580251991748809842208700615629 -0.178585195541381858141960492503 0.06885039806365966796875 +0.0580251991748809842208700615629 0.178585195541381858141960492503 0.06885039806365966796875 +0.0580680012702941839020098768742 -0.338548815250396706311164507497 -0.491947817802429188116519753748 +0.0580680012702941839020098768742 0.338548815250396706311164507497 -0.491947817802429188116519753748 +0.0580745995044708238075337192186 -0.0498508483171462984939736884371 0.129004803299903852975560880623 +0.0580745995044708238075337192186 0.0498508483171462984939736884371 0.129004803299903852975560880623 +0.0580887973308563260177450615629 -0.152079999446868896484375 -0.116177999973297127467297684689 +0.0580887973308563260177450615629 0.152079999446868896484375 -0.116177999973297127467297684689 +0.0580893993377685560752787807814 -0.0745337009429931640625 0.03271619975566864013671875 +0.0580893993377685560752787807814 0.0745337009429931640625 0.03271619975566864013671875 +0.05812065303325653076171875 -0.3797581493854522705078125 -0.234319952130317699090511496252 +0.05812065303325653076171875 0.3797581493854522705078125 -0.234319952130317699090511496252 +0.0581290014088153839111328125 -0.1454865038394927978515625 -0.194819748401641845703125 +0.0581290014088153839111328125 0.1454865038394927978515625 -0.194819748401641845703125 +0.0581513995304703684707803290621 -0.812566322088241532739516514994 -0.488728475570678666528579014994 +0.0581513995304703684707803290621 0.812566322088241532739516514994 -0.488728475570678666528579014994 +0.0581624984741210965255575615629 -0.0504203021526336697677450615629 -0.0638350009918212946136151231258 +0.0581624984741210965255575615629 0.0504203021526336697677450615629 -0.0638350009918212946136151231258 +0.0581834971904754694183026231258 -0.0803016006946563748458700615629 0.0128971993923187259328821951954 +0.0581834971904754694183026231258 0.0803016006946563748458700615629 0.0128971993923187259328821951954 +0.0582476019859314020354901231258 -0.0749715983867645235916299384371 -0.3885695934295654296875 +0.0582476019859314020354901231258 0.0749715983867645235916299384371 -0.3885695934295654296875 +0.0582851499319076496452574076557 -0.304402348399162248071547764994 -0.162609998881816847360326505623 +0.0582851499319076496452574076557 0.304402348399162248071547764994 -0.162609998881816847360326505623 +0.0583287000656127971320863423443 0 0.0812265992164611927428552462516 +0.0583431523293256731887979071871 -0.363060511648654937744140625 0.766343840956687949450554242503 +0.0583431523293256731887979071871 0.363060511648654937744140625 0.766343840956687949450554242503 +0.0583586506545543601265357835928 -0.0423996999859809833854917826557 -0.342485851049423195568977007497 +0.0583586506545543601265357835928 0.0423996999859809833854917826557 -0.342485851049423195568977007497 +0.0583615005016326904296875 -0.2430925071239471435546875 0 +0.0583615005016326904296875 0.2430925071239471435546875 0 +0.0583917975425720242599325615629 -0.0801503002643585288344851846887 -0.0128971993923187259328821951954 +0.0583917975425720242599325615629 0.0801503002643585288344851846887 -0.0128971993923187259328821951954 +0.058417998254299163818359375 -0.2131589949131011962890625 -0.116835750639438629150390625 +0.058417998254299163818359375 0.2131589949131011962890625 -0.116835750639438629150390625 +0.05848824977874755859375 -0.083671502768993377685546875 -0.22820650041103363037109375 +0.05848824977874755859375 0.083671502768993377685546875 -0.22820650041103363037109375 +0.0585904508829116765777911268742 -0.0178613997995853424072265625 -0.136923748254775989874332253748 +0.0585904508829116765777911268742 0.0178613997995853424072265625 -0.136923748254775989874332253748 +0.0586421016603708294967489678129 -0.398911139369010958599659488755 -0.374073141813278220446647992503 +0.0586421016603708294967489678129 0.398911139369010958599659488755 -0.374073141813278220446647992503 +0.058658100664615631103515625 -0.115770596265792835577457253748 0.270474296808242808953792746252 +0.058658100664615631103515625 0.115770596265792835577457253748 0.270474296808242808953792746252 +0.0587191998958587688117738423443 -0.773314380645751975329460492503 0.196309602260589605160490123126 +0.0587191998958587688117738423443 0.773314380645751975329460492503 0.196309602260589605160490123126 +0.0587332516908645602127236884371 -0.11379705369472503662109375 -0.0781066507101058904449786268742 +0.0587332516908645602127236884371 0.11379705369472503662109375 -0.0781066507101058904449786268742 +0.0587698504328727708290180942186 0 0.847965943813323907995993522491 +0.0587786018848419217208700615629 -0.0809017002582550076583700615629 0 +0.0587786018848419217208700615629 0.0809017002582550076583700615629 0 +0.0588101997971534687370542826557 -0.529699802398681640625 -0.275607007741928089483707253748 +0.0588101997971534687370542826557 0.529699802398681640625 -0.275607007741928089483707253748 +0.0588335983455181080192808451557 -0.181066997349262237548828125 -0.828404036164283708032485264994 +0.0588335983455181080192808451557 0.181066997349262237548828125 -0.828404036164283708032485264994 +0.05884425155818462371826171875 -0.747687757015228271484375 0 +0.05884425155818462371826171875 0.747687757015228271484375 0 +0.0588713981211185441444477817186 -0.0142243495211005193529230083982 -0.34471990168094635009765625 +0.0588713981211185441444477817186 0.0142243495211005193529230083982 -0.34471990168094635009765625 +0.0588738024234771728515625 -0.052829802036285400390625 0.183692395687103271484375 +0.0588738024234771728515625 0.052829802036285400390625 0.183692395687103271484375 +0.0588822022080421475509481865629 -0.0427804000675678294807191548443 0.645912146568298317639289507497 +0.0588822022080421475509481865629 0.0427804000675678294807191548443 0.645912146568298317639289507497 +0.0588952481746673542351011576557 -0.117576000094413754548661188437 0.0721609488129615755935830634371 +0.0588952481746673542351011576557 0.117576000094413754548661188437 0.0721609488129615755935830634371 +0.0589101504534482942054829379686 -0.0958171524107456207275390625 -0.64019410312175750732421875 +0.0589101504534482942054829379686 0.0958171524107456207275390625 -0.64019410312175750732421875 +0.0589184999465942396690287807814 -0.0564508974552154554893412807814 0.0578091979026794447471537807814 +0.0589184999465942396690287807814 0.0564508974552154554893412807814 0.0578091979026794447471537807814 +0.0589197993278503459602113423443 -0.0743493020534515408614950615629 -0.031632900238037109375 +0.0589197993278503459602113423443 0.0743493020534515408614950615629 -0.031632900238037109375 +0.0589215993881225599815287807814 -0.0133070006966590891755997105861 0.0796941995620727566818075615629 +0.0589215993881225599815287807814 0.0133070006966590891755997105861 0.0796941995620727566818075615629 +0.05893050134181976318359375 -0.141273298859596246890291126874 -0.258009892702102672235042746252 +0.05893050134181976318359375 0.141273298859596246890291126874 -0.258009892702102672235042746252 +0.0589405000209808349609375 -0.2482174932956695556640625 -0.4300164878368377685546875 +0.0589405000209808349609375 0.2482174932956695556640625 -0.4300164878368377685546875 +0.0589449003338813753982705634371 -0.248532593250274658203125 -0.157343995571136457956029630623 +0.0589449003338813753982705634371 0.248532593250274658203125 -0.157343995571136457956029630623 +0.05901195108890533447265625 -0.00610110014677047677450483220696 -0.13776929676532745361328125 +0.05901195108890533447265625 0.00610110014677047677450483220696 -0.13776929676532745361328125 +0.0590682514011859893798828125 -0.1278002560138702392578125 0.2065867483615875244140625 +0.0590682514011859893798828125 0.1278002560138702392578125 0.2065867483615875244140625 +0.0591093979775905581375283759371 -0.181922304630279529913394753748 0.673357284069061257092414507497 +0.0591093979775905581375283759371 0.181922304630279529913394753748 0.673357284069061257092414507497 +0.059135399758815765380859375 -0.373864048719406150134147992503 0.243369457125663768426448996252 +0.059135399758815765380859375 0.373864048719406150134147992503 0.243369457125663768426448996252 +0.0591494992375373798698667826557 -0.182046300172805791683927623126 0.230999100208282459600894753748 +0.0591494992375373798698667826557 0.182046300172805791683927623126 0.230999100208282459600894753748 +0.0592159986495971735198651231258 -0.0702307999134063748458700615629 0.0395107001066207913497763115629 +0.0592159986495971735198651231258 0.0702307999134063748458700615629 0.0395107001066207913497763115629 +0.0592789515852928106109942518742 -0.0861681014299392616928585653113 0.107522401213645937834151311563 +0.0592789515852928106109942518742 0.0861681014299392616928585653113 0.107522401213645937834151311563 +0.0593295991420745849609375 -0.182596194744110124075220369377 -0.05602359771728515625 +0.0593295991420745849609375 0.182596194744110124075220369377 -0.05602359771728515625 +0.0593451015651226057578959682814 -0.301322686672210682257144753748 -0.328911298513412497790397992503 +0.0593451015651226057578959682814 0.301322686672210682257144753748 -0.328911298513412497790397992503 +0.0594658970832824748664613423443 -0.0594889998435974148849325615629 -0.0540821015834808405120526231258 +0.0594658970832824748664613423443 0.0594889998435974148849325615629 -0.0540821015834808405120526231258 +0.0594668470323085757156533759371 -0.83953480422496795654296875 -0.118932845443487159031725752811 +0.0594668470323085757156533759371 0.83953480422496795654296875 -0.118932845443487159031725752811 +0.0595027983188629178146200615629 -0.39154040813446044921875 -0.0561728000640869182258363423443 +0.0595027983188629178146200615629 0.39154040813446044921875 -0.0561728000640869182258363423443 +0.0595555007457733154296875 -0.3963224887847900390625 0.2989675104618072509765625 +0.0595555007457733154296875 0.3963224887847900390625 0.2989675104618072509765625 +0.0595610022544860867599325615629 -0.0133131995797157298005997105861 0.190460598468780523129240123126 +0.0595610022544860867599325615629 0.0133131995797157298005997105861 0.190460598468780523129240123126 +0.0595926523208618191818075615629 -0.502170509099960304943977007497 -0.40837873518466949462890625 +0.0595926523208618191818075615629 0.502170509099960304943977007497 -0.40837873518466949462890625 +0.0595935989171266569663920620314 -0.538191494345665044640725227509 0.0964276470243930899917117471887 +0.0595935989171266569663920620314 0.538191494345665044640725227509 0.0964276470243930899917117471887 +0.0596085011959075969367738423443 -0.03323400020599365234375 0.0730912983417510986328125 +0.0596085011959075969367738423443 0.03323400020599365234375 0.0730912983417510986328125 +0.0596385017037391676475444057814 -0.824617803096771240234375 -0.35559721291065216064453125 +0.0596385017037391676475444057814 0.824617803096771240234375 -0.35559721291065216064453125 +0.0597054995596408843994140625 -0.1837512552738189697265625 -0.1586527526378631591796875 +0.0597054995596408843994140625 0.1837512552738189697265625 -0.1586527526378631591796875 +0.0597194015979766873458700615629 -0.0433881998062133830695863423443 -0.0674615025520324679275674384371 +0.0597194015979766873458700615629 0.0433881998062133830695863423443 -0.0674615025520324679275674384371 +0.0597703501582145663162393134371 -0.0680977508425712613204794365629 -0.119541603326797474249332253748 +0.0597703501582145663162393134371 0.0680977508425712613204794365629 -0.119541603326797474249332253748 +0.0598210990428924560546875 -0.0656616985797882080078125 0.0459345012903213528732138115629 +0.0598210990428924560546875 0.0656616985797882080078125 0.0459345012903213528732138115629 +0.0598601996898651123046875 -0.248132103681564325503572376874 0.157629901170730585269197376874 +0.0598601996898651123046875 0.248132103681564325503572376874 0.157629901170730585269197376874 +0.0599003978073596940467915317186 -0.323356950283050503802684261245 -0.119800451397895801886051003748 +0.0599003978073596940467915317186 0.323356950283050503802684261245 -0.119800451397895801886051003748 +0.059919297695159912109375 -0.0270621985197067281558869211722 -0.0753480017185211292662927462516 +0.059919297695159912109375 0.0270621985197067281558869211722 -0.0753480017185211292662927462516 +0.0599590003490448053558026231258 -0.141793000698089616262720369377 0.127670204639434820004240123126 +0.0599590003490448053558026231258 0.141793000698089616262720369377 0.127670204639434820004240123126 +0.0599656507372856167892294365629 -0.0883845001459121759612713731258 0.4371407926082611083984375 +0.0599656507372856167892294365629 0.0883845001459121759612713731258 0.4371407926082611083984375 +0.0599953487515449482292417826557 -0.425841289758682239874332253748 -0.847089377045631364282485264994 +0.0599953487515449482292417826557 0.425841289758682239874332253748 -0.847089377045631364282485264994 +0.0600279986858367961555238423443 -0.502645587921142555920539507497 -0.619470405578613325658920985006 +0.0600279986858367961555238423443 0.502645587921142555920539507497 -0.619470405578613325658920985006 +0.0600522994995117201377787807814 -0.0606822013854980482627787807814 0.0520709991455078138877787807814 +0.0600522994995117201377787807814 0.0606822013854980482627787807814 0.0520709991455078138877787807814 +0.0600646018981933621505575615629 -0.184861004352569580078125 0.0471029996871948283820863423443 +0.0600646018981933621505575615629 0.184861004352569580078125 0.0471029996871948283820863423443 +0.0601103033870458575149697821871 -0.78883723914623260498046875 0.525949457287788413317741742503 +0.0601103033870458575149697821871 0.78883723914623260498046875 0.525949457287788413317741742503 +0.0601276513189077446708274976572 -0.303846386075019847528011496252 0.454490846395492587017628238755 +0.0601276513189077446708274976572 0.303846386075019847528011496252 0.454490846395492587017628238755 +0.060184001922607421875 -0.692694377899169988488381477509 0.39566719532012939453125 +0.060184001922607421875 0.692694377899169988488381477509 0.39566719532012939453125 +0.0602940022945404052734375 -0.0772575020790100125411825615629 0.0198973998427391073062775461722 +0.0602940022945404052734375 0.0772575020790100125411825615629 0.0198973998427391073062775461722 +0.0604252517223358154296875 -0.0928770035505294827560263115629 -0.101107200980186454075671065311 +0.0604252517223358154296875 0.0928770035505294827560263115629 -0.101107200980186454075671065311 +0.0604300022125244182258363423443 -0.392593193054199263158920985006 0.0471031993627548245529013115629 +0.0604300022125244182258363423443 0.392593193054199263158920985006 0.0471031993627548245529013115629 +0.0604846000671386760383363423443 -0.493238908052444524621193977509 0.235704699158668540270866742503 +0.0604846000671386760383363423443 0.493238908052444524621193977509 0.235704699158668540270866742503 +0.0604927502572536468505859375 -0.18618075549602508544921875 0.15549050271511077880859375 +0.0604927502572536468505859375 0.18618075549602508544921875 0.15549050271511077880859375 +0.0605026468634605393837055942186 -0.186212353408336639404296875 0.929604452848434403833266514994 +0.0605026468634605393837055942186 0.186212353408336639404296875 0.929604452848434403833266514994 +0.0605030983686447101921324076557 0 0.137256601452827448062166126874 +0.0605053007602691650390625 -0.0702903985977172823806924384371 -0.0373946994543075603156800923443 +0.0605053007602691650390625 0.0702903985977172823806924384371 -0.0373946994543075603156800923443 +0.0605406001210212693641743442186 -0.0686688020825386019607705634371 -0.285691201686859130859375 +0.0605406001210212693641743442186 0.0686688020825386019607705634371 -0.285691201686859130859375 +0.0606883496046066242546324076557 -0.12720389664173126220703125 -0.0513430505990982027908486884371 +0.0606883496046066242546324076557 0.12720389664173126220703125 -0.0513430505990982027908486884371 +0.0606963507831096704681073106258 -0.520408335328102156225327235006 0.167305046319961570056022992503 +0.0606963507831096704681073106258 0.520408335328102156225327235006 0.167305046319961570056022992503 +0.06074009835720062255859375 -0.407623055577278126104801003748 -0.180704699456691736392244251874 +0.06074009835720062255859375 0.407623055577278126104801003748 -0.180704699456691736392244251874 +0.060745298862457275390625 -0.077183902263641357421875 -0.0187791004776954664756694057814 +0.060745298862457275390625 0.077183902263641357421875 -0.0187791004776954664756694057814 +0.0609099000692367512077574076557 -0.267300903797149658203125 -0.121820104122161862458817438437 +0.0609099000692367512077574076557 0.267300903797149658203125 -0.121820104122161862458817438437 +0.0609608985483646378944477817186 -0.262423354387283314093082253748 0.223422858119010914190738503748 +0.0609608985483646378944477817186 0.262423354387283314093082253748 0.223422858119010914190738503748 +0.06102029979228973388671875 -0.0297868497669696793983540317186 0.133750802278518682308927623126 +0.06102029979228973388671875 0.0297868497669696793983540317186 0.133750802278518682308927623126 +0.061067998409271240234375 -0.739442396163940474096420985006 0.299158406257629405633480246252 +0.061067998409271240234375 0.739442396163940474096420985006 0.299158406257629405633480246252 +0.0611015975475311320930238423443 -0.652982378005981467516960492503 -0.458128023147583052221420985006 +0.0611015975475311320930238423443 0.652982378005981467516960492503 -0.458128023147583052221420985006 +0.0611036986112594646125550923443 -0.865068304538726851049545985006 -0.240671691298484813348323996252 +0.0611036986112594646125550923443 0.865068304538726851049545985006 -0.240671691298484813348323996252 +0.0611550003290176336090411268742 -0.0595155000686645452301348768742 0.287607300281524647100894753748 +0.0611550003290176336090411268742 0.0595155000686645452301348768742 0.287607300281524647100894753748 +0.0611904025077819879729901231258 -0.188323402404785178454460492503 -0.0281071990728378323654013115629 +0.0611904025077819879729901231258 0.188323402404785178454460492503 -0.0281071990728378323654013115629 +0.0612015016376972198486328125 -0.221240997314453125 0.099029250442981719970703125 +0.0612015016376972198486328125 0.221240997314453125 0.099029250442981719970703125 +0.0612119995057582855224609375 -0.85533297061920166015625 -0.51445102691650390625 +0.0612119995057582855224609375 0.85533297061920166015625 -0.51445102691650390625 +0.0612659990787506117393412807814 -0.0394133001565933269172425923443 0.0685060024261474609375 +0.0612659990787506117393412807814 0.0394133001565933269172425923443 0.0685060024261474609375 +0.061307251453399658203125 -0.12988065183162689208984375 0.043271698057651519775390625 +0.061307251453399658203125 0.12988065183162689208984375 0.043271698057651519775390625 +0.0613188028335571316818075615629 -0.0610414028167724637130575615629 -0.180316197872161881887720369377 +0.0613188028335571316818075615629 0.0610414028167724637130575615629 -0.180316197872161881887720369377 +0.0613465987145900698562783759371 -0.339994910359382618292301003748 0.608801901340484619140625 +0.0613465987145900698562783759371 0.339994910359382618292301003748 0.608801901340484619140625 +0.0613727986812591594367738423443 -0.188886594772338878289730246252 0.0235637992620468146587331403907 +0.0613727986812591594367738423443 0.188886594772338878289730246252 0.0235637992620468146587331403907 +0.0613827519118785927543235914072 -0.0445967480540275587608256557814 -0.544741448760032720421975227509 +0.0613827519118785927543235914072 0.0445967480540275587608256557814 -0.544741448760032720421975227509 +0.0613835971802473082115092495314 -0.555468177795410134045539507497 0.640458825230598383093649772491 +0.0613835971802473082115092495314 0.555468177795410134045539507497 0.640458825230598383093649772491 +0.061435997486114501953125 -0.0785898983478546253600427462516 0.00701769962906837515420610529304 +0.061435997486114501953125 0.0785898983478546253600427462516 0.00701769962906837515420610529304 +0.0614540517330169622223223768742 -0.113701002299785608462556751874 0.325261992216110185083266514994 +0.0614540517330169622223223768742 0.113701002299785608462556751874 0.325261992216110185083266514994 +0.0614754021167755182464276231258 -0.0201185002923011807540731865629 -0.0762628018856048583984375 +0.0614754021167755182464276231258 0.0201185002923011807540731865629 -0.0762628018856048583984375 +0.0614841498434543567985777201557 -0.189225396513938881604133257497 -0.287947094440460182873664507497 +0.0614841498434543567985777201557 0.189225396513938881604133257497 -0.287947094440460182873664507497 +0.0614926502108573899696430942186 -0.059940598905086517333984375 0.122986954450607297029129938437 +0.0614926502108573899696430942186 0.059940598905086517333984375 0.122986954450607297029129938437 +0.0614964008331298772613848768742 -0.561628782749176047595085492503 -0.2019689977169036865234375 +0.0614964008331298772613848768742 0.561628782749176047595085492503 -0.2019689977169036865234375 +0.061503000557422637939453125 -0.08148150146007537841796875 0.22820650041103363037109375 +0.061503000557422637939453125 0.08148150146007537841796875 0.22820650041103363037109375 +0.0615236997604370131065287807814 -0.006670899689197540283203125 0.0785513997077941922286825615629 +0.0615236997604370131065287807814 0.006670899689197540283203125 0.0785513997077941922286825615629 +0.0615603029727935791015625 -0.0198578998446464552452006557814 0.0762627005577087430099325615629 +0.0615603029727935791015625 0.0198578998446464552452006557814 0.0762627005577087430099325615629 +0.0615787029266357463508363423443 -0.078571498394012451171875 -0.005881600081920623779296875 +0.0615787029266357463508363423443 0.078571498394012451171875 -0.005881600081920623779296875 +0.0615823984146118205695863423443 -0.242988801002502446957365123126 -0.311711597442626997533920985006 +0.0615823984146118205695863423443 0.242988801002502446957365123126 -0.311711597442626997533920985006 +0.0615857005119323785979901231258 0 -0.546541047096252508019631477509 +0.0616024971008300795127787807814 -0.0529129028320312541633363423443 -0.0583554983139038113693075615629 +0.0616024971008300795127787807814 0.0529129028320312541633363423443 -0.0583554983139038113693075615629 +0.0616100013256073025802450615629 -0.0660880029201507540603799384371 -0.0428553998470306424239950615629 +0.0616100013256073025802450615629 0.0660880029201507540603799384371 -0.0428553998470306424239950615629 +0.0616454031318426146079936245314 -0.841873148083686850817741742503 0.0997474975883960723876953125 +0.0616454031318426146079936245314 0.841873148083686850817741742503 0.0997474975883960723876953125 +0.0617050494998693521697674668758 -0.0724608540534973227797976846887 0.54170270264148712158203125 +0.0617050494998693521697674668758 0.0724608540534973227797976846887 0.54170270264148712158203125 +0.06172239780426025390625 -0.110482394695281982421875 -0.154867601394653331414730246252 +0.06172239780426025390625 0.110482394695281982421875 -0.154867601394653331414730246252 +0.0617265999317169189453125 -0.103850805759429939967297684689 0.159388995170593267269865123126 +0.0617265999317169189453125 0.103850805759429939967297684689 0.159388995170593267269865123126 +0.0617296501994132953972105326557 -0.093343198299407958984375 0.0998824506998062106033486884371 +0.0617296501994132953972105326557 0.093343198299407958984375 0.0998824506998062106033486884371 +0.0617751024663448361495809990629 -0.38441701233386993408203125 0.811422890424728371350227007497 +0.0617751024663448361495809990629 0.38441701233386993408203125 0.811422890424728371350227007497 +0.061803400516510009765625 -0.190211200714111350329460492503 0 +0.061803400516510009765625 0.190211200714111350329460492503 0 +0.0618305996060371371170205634371 0 0.293559300899505604132144753748 +0.0619753494858741732498330634371 -0.0574017003178596482704243442186 -0.123952049016952503546207253748 +0.0619753494858741732498330634371 0.0574017003178596482704243442186 -0.123952049016952503546207253748 +0.0619897007942199762542401231258 -0.0737711012363433810135049384371 0.0267412990331649808029013115629 +0.0619897007942199762542401231258 0.0737711012363433810135049384371 0.0267412990331649808029013115629 +0.0619941018521785666695045335928 -0.491613513231277443615852007497 0.494442182779312122686832253748 +0.0619941018521785666695045335928 0.491613513231277443615852007497 0.494442182779312122686832253748 +0.0620469987392425550987162807814 -0.0368512988090515178352113423443 -0.0692254006862640380859375 +0.0620469987392425550987162807814 0.0368512988090515178352113423443 -0.0692254006862640380859375 +0.0620742976665496840049662807814 -0.0122798003256320963777481480861 -0.0774336993694305503188601846887 +0.0620742976665496840049662807814 0.0122798003256320963777481480861 -0.0774336993694305503188601846887 +0.0620783999562263474891743442186 0 0.445697548985481251104801003748 +0.0621335983276367215255575615629 -0.1050631999969482421875 0.3809216022491455078125 +0.0621335983276367215255575615629 0.1050631999969482421875 0.3809216022491455078125 +0.06216674856841564178466796875 -0.29004375636577606201171875 -0.68884648382663726806640625 +0.06216674856841564178466796875 0.29004375636577606201171875 -0.68884648382663726806640625 +0.0621886521577835124641175923443 -0.191393999755382543392911998126 -0.40249349176883697509765625 +0.0621886521577835124641175923443 0.191393999755382543392911998126 -0.40249349176883697509765625 +0.0621895506978034987022319057814 -0.42797474563121795654296875 -0.124378645420074471217297684689 +0.0621895506978034987022319057814 0.42797474563121795654296875 -0.124378645420074471217297684689 +0.0622269004583358778526225307814 0 0.897846293449401922082131477509 +0.0622943982481956523566957173443 -0.19171799719333648681640625 -0.877133685350418135229233485006 +0.0622943982481956523566957173443 0.19171799719333648681640625 -0.877133685350418135229233485006 +0.062320001423358917236328125 -0.19180500507354736328125 0.45752251148223876953125 +0.062320001423358917236328125 0.19180500507354736328125 0.45752251148223876953125 +0.0623524993658065782020649692186 -0.312523758411407448498664507497 0.144709952175617218017578125 +0.0623524993658065782020649692186 0.312523758411407448498664507497 0.144709952175617218017578125 +0.0623891498893499388267436245314 -0.821646529436111383581931022491 0.208578952401876432931615568123 +0.0623891498893499388267436245314 0.821646529436111383581931022491 0.208578952401876432931615568123 +0.0623990520834922721138404710928 -0.329259705543518021997329014994 0.100967295467853546142578125 +0.0623990520834922721138404710928 0.329259705543518021997329014994 0.100967295467853546142578125 +0.0624146997928619398643412807814 -0.0615637004375457763671875 -0.0481072992086410550216513115629 +0.0624146997928619398643412807814 0.0615637004375457763671875 -0.0481072992086410550216513115629 +0.0624261975288391141036825615629 -0.165428602695465110095085492503 -0.0934686005115509116469851846887 +0.0624261975288391141036825615629 0.165428602695465110095085492503 -0.0934686005115509116469851846887 +0.0624653980135917649696430942186 -0.449658608436584450451789507497 0.392308187484741222039730246252 +0.0624653980135917649696430942186 0.449658608436584450451789507497 0.392308187484741222039730246252 +0.0624701000750064877609091240629 -0.545075306296348593981804242503 -0.0386088997125625665862713731258 +0.0624701000750064877609091240629 0.545075306296348593981804242503 -0.0386088997125625665862713731258 +0.0624896988272666889518980326557 -0.132713851332664473092748380623 -0.0313384495675563812255859375 +0.0624896988272666889518980326557 0.132713851332664473092748380623 -0.0313384495675563812255859375 +0.0625235974788665854751101846887 -0.0454259008169174208213725307814 0.0634609997272491538344851846887 +0.0625235974788665854751101846887 0.0454259008169174208213725307814 0.0634609997272491538344851846887 +0.0625316977500915555099325615629 -0.00413010008633136766614812884768 -0.0779277980327606201171875 +0.0625316977500915555099325615629 0.00413010008633136766614812884768 -0.0779277980327606201171875 +0.0625739991664886474609375 -0.39507520198822021484375 0 +0.0625739991664886474609375 -0.149876797199249262027009876874 0.116710996627807622738615123126 +0.0625739991664886474609375 0.149876797199249262027009876874 0.116710996627807622738615123126 +0.0625739991664886474609375 0.39507520198822021484375 0 +0.0625759497284889137924679403113 -0.133761298656463606393529630623 0.0263089500367641448974609375 +0.0625759497284889137924679403113 0.133761298656463606393529630623 0.0263089500367641448974609375 +0.062640599906444549560546875 -0.583421409130096435546875 -0.125281798839569080694644753748 +0.062640599906444549560546875 0.583421409130096435546875 -0.125281798839569080694644753748 +0.06265725195407867431640625 -0.2262092530727386474609375 -0.086043752729892730712890625 +0.06265725195407867431640625 0.2262092530727386474609375 -0.086043752729892730712890625 +0.0626977488398551968673544365629 -0.105784651637077328767411188437 -0.0858988523483276283920773153113 +0.0626977488398551968673544365629 0.105784651637077328767411188437 -0.0858988523483276283920773153113 +0.0627562999725341796875 -0.0738883972167968805511151231258 -0.0245387002825737006450612653907 +0.0627562999725341796875 0.0738883972167968805511151231258 -0.0245387002825737006450612653907 +0.0627672016620636069594851846887 -0.797533607482910245067841970013 0 +0.0627672016620636069594851846887 0.797533607482910245067841970013 0 +0.06280200183391571044921875 -0.193281608819961536749332253748 -0.564533400535583429480368522491 +0.06280200183391571044921875 0.193282198905944807565404630623 -0.564533400535583429480368522491 +0.062841497361660003662109375 -0.1275880038738250732421875 -0.479345500469207763671875 +0.062841497361660003662109375 0.1275880038738250732421875 -0.479345500469207763671875 +0.0628751993179321316818075615629 -0.193512600660324080026342130623 0.564446389675140380859375 +0.0628751993179321316818075615629 0.193512600660324080026342130623 0.564446389675140380859375 +0.0629070013761520441253338731258 -0.366761216521263144763054242503 -0.532943469285965032433693977509 +0.0629070013761520441253338731258 0.366761216521263144763054242503 -0.532943469285965032433693977509 +0.0629136025905609186370526231258 -0.0651054024696350180922976846887 0.178334403038024918997095369377 +0.0629136025905609186370526231258 0.0651054024696350180922976846887 0.178334403038024918997095369377 +0.06291724741458892822265625 -0.0331420004367828369140625 0.2396727502346038818359375 +0.06291724741458892822265625 0.0331420004367828369140625 0.2396727502346038818359375 +0.0629293486475944463531817518742 -0.135874798893928533383146373126 0.00882885027676820650921474253892 +0.0629293486475944463531817518742 0.135874798893928533383146373126 0.00882885027676820650921474253892 +0.0629517517983913393875283759371 -0.8704299032688140869140625 -0.375352613627910614013671875 +0.0629517517983913393875283759371 0.8704299032688140869140625 -0.375352613627910614013671875 +0.0629648968577384976486044365629 -0.8889192044734954833984375 -0.125928895175456995181306751874 +0.0629648968577384976486044365629 0.8889192044734954833984375 -0.125928895175456995181306751874 +0.0629878520965576199630575615629 -0.135725846886634832211271373126 -0.01053749956190586090087890625 +0.0629878520965576199630575615629 0.135725846886634832211271373126 -0.01053749956190586090087890625 +0.0630263999104499761383380018742 -0.193971598148345941714509876874 -0.220006191730499262027009876874 +0.0630263999104499761383380018742 0.193971598148345941714509876874 -0.220006191730499262027009876874 +0.063070200383663177490234375 -0.257953798770904518811164507497 0.13957799971103668212890625 +0.063070200383663177490234375 0.257953798770904518811164507497 0.13957799971103668212890625 +0.0630843512713909065903195028113 -0.194157251715660089663728626874 0.284294140338897660669204014994 +0.0630843512713909065903195028113 0.194157251715660089663728626874 0.284294140338897660669204014994 +0.0631278984248638264098474337516 -0.545406410098075888903679242503 0.0323553999885916737655477959379 +0.0631278984248638264098474337516 0.545406410098075888903679242503 0.0323553999885916737655477959379 +0.0631529986858367919921875 -0.44825398921966552734375 -0.891673028469085693359375 +0.0631529986858367919921875 0.44825398921966552734375 -0.891673028469085693359375 +0.0632457971572876059829226846887 -0.141420197486877452508480246252 -0.126492202281951904296875 +0.0632457971572876059829226846887 0.141420197486877452508480246252 -0.126492202281951904296875 +0.063274003565311431884765625 -0.830354988574981689453125 0.553631007671356201171875 +0.063274003565311431884765625 0.830354988574981689453125 0.553631007671356201171875 +0.0633113026618957602797976846887 -0.0697035014629363985916299384371 0.03366149961948394775390625 +0.0633113026618957602797976846887 0.0697035014629363985916299384371 0.03366149961948394775390625 +0.06333149783313274383544921875 -0.1949167549610137939453125 0.7214542329311370849609375 +0.06333149783313274383544921875 0.1949167549610137939453125 0.7214542329311370849609375 +0.063335001468658447265625 -0.30286800861358642578125 0.3927589952945709228515625 +0.063335001468658447265625 0.30286800861358642578125 0.3927589952945709228515625 +0.06334149837493896484375 -0.12834225594997406005859375 -0.2049782574176788330078125 +0.06334149837493896484375 0.12834225594997406005859375 -0.2049782574176788330078125 +0.0633436024188995389083700615629 -0.0511201977729797418792401231258 0.05808889865875244140625 +0.0633436024188995389083700615629 0.0511201977729797418792401231258 0.05808889865875244140625 +0.0633500993251800564864950615629 -0.0460260003805160536338725307814 -0.0621962010860443170745526231258 +0.0633500993251800564864950615629 0.0460260003805160536338725307814 -0.0621962010860443170745526231258 +0.0633897483348846435546875 -0.14112700521945953369140625 0.19637949764728546142578125 +0.0633897483348846435546875 0.14112700521945953369140625 0.19637949764728546142578125 +0.0634116023778915349762286268742 -0.0460712000727653489540180942186 0.695597696304321222449118522491 +0.0634116023778915349762286268742 0.0460712000727653489540180942186 0.695597696304321222449118522491 +0.0634224504232406560699786268742 -0.046078898012638092041015625 0.341107544302940324243422764994 +0.0634224504232406560699786268742 0.046078898012638092041015625 0.341107544302940324243422764994 +0.0634417004883289364913778740629 -0.103187702596187591552734375 -0.6894398033618927001953125 +0.0634417004883289364913778740629 0.103187702596187591552734375 -0.6894398033618927001953125 +0.0634860008955001747787960653113 -0.121824896335601798313952315311 -0.060234747827053070068359375 +0.0634860008955001747787960653113 0.121824896335601798313952315311 -0.060234747827053070068359375 +0.0634959995746612604339276231258 -0.281591200828552268298210492503 0.276902008056640613897769753748 +0.0634959995746612604339276231258 0.281591200828552268298210492503 0.276902008056640613897769753748 +0.0635232485830783816238565009371 -0.103600001335144034642077315311 -0.32822544872760772705078125 +0.0635232485830783816238565009371 0.103600001335144034642077315311 -0.32822544872760772705078125 +0.0635958015918731689453125 -0.235767906904220558850227007497 -0.174266999959945684262052623126 +0.0635958015918731689453125 0.235767906904220558850227007497 -0.174266999959945684262052623126 +0.0636156007647514371017294365629 -0.274512898921966563836605246252 0.1029354035854339599609375 +0.0636156007647514371017294365629 0.274512898921966563836605246252 0.1029354035854339599609375 +0.0636328518390655434311398153113 -0.0830049008131027166168536268742 -0.107522401213645937834151311563 +0.0636328518390655434311398153113 0.0830049008131027166168536268742 -0.107522401213645937834151311563 +0.0636702477931976318359375 -0.19596000015735626220703125 0.14158324897289276123046875 +0.0636702477931976318359375 0.19596000015735626220703125 0.14158324897289276123046875 +0.06367574632167816162109375 -0.066844247281551361083984375 -0.2323299944400787353515625 +0.06367574632167816162109375 0.066844247281551361083984375 -0.2323299944400787353515625 +0.0636869966983795166015625 -0.1960130035877227783203125 0.97853100299835205078125 +0.0636869966983795166015625 0.1960130035877227783203125 0.97853100299835205078125 +0.0637110497802495928665322821871 -0.57384145259857177734375 -0.298574258387088786736995871252 +0.0637110497802495928665322821871 0.57384145259857177734375 -0.298574258387088786736995871252 +0.0637147009372711209396200615629 -0.0757934987545013511001101846887 0.0139920994639396670949915701954 +0.0637147009372711209396200615629 0.0757934987545013511001101846887 0.0139920994639396670949915701954 +0.063716702163219451904296875 -0.119928896427154541015625 -0.267501908540725696905582253748 +0.063716702163219451904296875 0.119928896427154541015625 -0.267501908540725696905582253748 +0.0637417495250701821030148153113 -0.124621653556823724917634876874 0.0539111986756324740310830634371 +0.0637417495250701821030148153113 0.124621653556823724917634876874 0.0539111986756324740310830634371 +0.0637797486037015859405840956242 -0.534060937166213944848891514994 -0.658187305927276589123664507497 +0.0637797486037015859405840956242 0.534060937166213944848891514994 -0.658187305927276589123664507497 +0.0637984514236450139801348768742 -0.0463516518473625141472105326557 -0.127598100900650018862947376874 +0.0637984514236450139801348768742 0.0463516518473625141472105326557 -0.127598100900650018862947376874 +0.0638051986694335993011151231258 0 0.0769993007183075034438601846887 +0.0638194978237152099609375 -0.0262863993644714376285431711722 0.0723608970642089927016726846887 +0.0638194978237152099609375 0.0262863993644714376285431711722 0.0723608970642089927016726846887 +0.0638217017054557717026241903113 -0.10012485086917877197265625 0.0916613996028900063217648153113 +0.0638217017054557717026241903113 0.10012485086917877197265625 0.0916613996028900063217648153113 +0.0639187991619110107421875 -0.30317199230194091796875 -0.25298440456390380859375 +0.0639187991619110107421875 0.30317199230194091796875 -0.25298440456390380859375 +0.0639432013034820501129473768742 -0.196800291538238525390625 0.217211705446243269479467130623 +0.0639432013034820501129473768742 0.196800291538238525390625 0.217211705446243269479467130623 +0.0639455020427703857421875 -0.735987776517868064196647992503 0.420396395027637481689453125 +0.0639455020427703857421875 0.735987776517868064196647992503 0.420396395027637481689453125 +0.0639732018113136208237179403113 -0.435175788402557384149105246252 -0.408079791069030750616519753748 +0.0639732018113136208237179403113 0.435175788402557384149105246252 -0.408079791069030750616519753748 +0.0639876008033752469161825615629 -0.0263951987028121955181081403907 0.39396560192108154296875 +0.0639876008033752469161825615629 0.0263951987028121955181081403907 0.39396560192108154296875 +0.0640559501945972414871377509371 -0.336228907108306884765625 -0.0731230489909648895263671875 +0.0640559501945972414871377509371 0.336228907108306884765625 -0.0731230489909648895263671875 +0.0640564024448394830901776231258 -0.0301254004240036031558869211722 -0.0706345021724700955489950615629 +0.0640564024448394830901776231258 0.0301254004240036031558869211722 -0.0706345021724700955489950615629 +0.0640841007232666043380575615629 -0.0758651018142700306334802462516 -0.011734999716281890869140625 +0.0640841007232666043380575615629 0.0758651018142700306334802462516 -0.011734999716281890869140625 +0.0641027987003326416015625 -0.144634795188903819695980246252 -0.36738479137420654296875 +0.0641027987003326416015625 0.144634795188903819695980246252 -0.36738479137420654296875 +0.0641158506274223244369991903113 -0.0100063495337963104248046875 0.135236853361129755191072376874 +0.0641158506274223244369991903113 0.0100063495337963104248046875 0.135236853361129755191072376874 +0.0641631007194519015213174384371 -0.0653495013713836642166299384371 0.04015649855136871337890625 +0.0641631007194519015213174384371 0.0653495013713836642166299384371 0.04015649855136871337890625 +0.0641636013984680231292401231258 -0.0265581995248794569541850307814 0.187557196617126470394865123126 +0.0641636013984680231292401231258 0.0265581995248794569541850307814 0.187557196617126470394865123126 +0.0641767024993896428863848768742 -0.540799009799957208777243522491 -0.439792484045028631012286268742 +0.0641767024993896428863848768742 0.540799009799957208777243522491 -0.439792484045028631012286268742 +0.064203001558780670166015625 -0.2304797470569610595703125 0.072505749762058258056640625 +0.064203001558780670166015625 0.2304797470569610595703125 0.072505749762058258056640625 +0.06437610089778900146484375 -0.133338001370429976022435880623 0.260915100574493408203125 +0.06437610089778900146484375 0.133338001370429976022435880623 0.260915100574493408203125 +0.0643827974796295221526776231258 -0.0133255004882812510408340855861 0.0753476977348327692229901231258 +0.0643827974796295221526776231258 0.0133255004882812510408340855861 0.0753476977348327692229901231258 +0.0643833026289939852615518134371 -0.389217147231102011950554242503 0.216483302414417266845703125 +0.0643833026289939852615518134371 0.389217147231102011950554242503 0.216483302414417266845703125 +0.0644219994544982937911825615629 -0.171969401836395280325220369377 0.0792234003543853815276776231258 +0.0644219994544982937911825615629 0.171969401836395280325220369377 0.0792234003543853815276776231258 +0.0644904032349586514571981865629 -0.295476758480072043688835492503 0.333218255639076255114616742503 +0.0644904032349586514571981865629 0.295476758480072043688835492503 0.333218255639076255114616742503 +0.0644983485341071999252804403113 -0.913127654790878207080595529987 -0.254042340815067269055305132497 +0.0644983485341071999252804403113 0.913127654790878207080595529987 -0.254042340815067269055305132497 +0.0645017981529235756577023153113 -0.0696315005421638405502804403113 0.116150701045989984683259876874 +0.0645017981529235756577023153113 0.0696315005421638405502804403113 0.116150701045989984683259876874 +0.0645446002483367892166299384371 -0.0700618982315063532073651231258 -0.0304190993309021023849325615629 +0.0645446002483367892166299384371 0.0700618982315063532073651231258 -0.0304190993309021023849325615629 +0.0645785033702850341796875 -0.421953499317169189453125 -0.2603555023670196533203125 +0.0645785033702850341796875 0.421953499317169189453125 -0.2603555023670196533203125 +0.0645901978015899630447549384371 -0.0554736971855163615852113423443 0.0524478018283844049651776231258 +0.0645901978015899630447549384371 0.0554736971855163615852113423443 0.0524478018283844049651776231258 +0.0645932018756866510589276231258 -0.0605738997459411634971537807814 0.0464599013328552273849325615629 +0.0645932018756866510589276231258 0.0605738997459411634971537807814 0.0464599013328552273849325615629 +0.0646474532783031519134198106258 -0.432872110605239890368522992503 0.104605199396610268336438309689 +0.0646474532783031519134198106258 0.432872110605239890368522992503 0.104605199396610268336438309689 +0.0647514022886753054519815009371 -0.199287901818752305471704744377 0.398235592246055591925113503748 +0.0647514022886753054519815009371 0.199287901818752305471704744377 0.398235592246055591925113503748 +0.0647593975067138755141726846887 -0.0551853001117706340461488423443 -0.0525433003902435330489950615629 +0.0647593975067138755141726846887 0.0551853001117706340461488423443 -0.0525433003902435330489950615629 +0.06483455002307891845703125 -0.273039242625236544537159488755 -0.473018136620521556512386496252 +0.06483455002307891845703125 0.273039242625236544537159488755 -0.473018136620521556512386496252 +0.0648847483098506927490234375 -0.785657545924186684338508257497 0.317855806648731198382762386245 +0.0648847483098506927490234375 0.785657545924186684338508257497 0.317855806648731198382762386245 +0.0649204473942518178741778456242 -0.693793776631355219031149772491 -0.486761024594306923596320757497 +0.0649204473942518178741778456242 0.693793776631355219031149772491 -0.486761024594306923596320757497 +0.0649340994656085884750851278113 -0.246562740206718422619758257497 -0.239771342277526833264289507497 +0.0649340994656085884750851278113 0.246562740206718422619758257497 -0.239771342277526833264289507497 +0.0649448990821838434417401231258 -0.0760405004024505698501101846887 0 +0.0649448990821838434417401231258 0.0760405004024505698501101846887 0 +0.064945399761199951171875 -0.157286000251770030633480246252 0.105086600780487066097990123126 +0.064945399761199951171875 0.157286000251770030633480246252 0.105086600780487066097990123126 +0.0649824023246765164474325615629 -0.199997997283935552426115123126 0.340261602401733420641960492503 +0.0649824023246765164474325615629 0.199997997283935552426115123126 0.340261602401733420641960492503 +0.0649943970143795068938885606258 -0.588142776489257834704460492503 0.678132873773574895714943977509 +0.0649943970143795068938885606258 0.588142776489257834704460492503 0.678132873773574895714943977509 +0.0650111988186836270431356865629 -0.587117993831634543688835492503 0.105193796753883364591963811563 +0.0650111988186836270431356865629 0.587117993831634543688835492503 0.105193796753883364591963811563 +0.0650452516973018673995809990629 -0.414863088726997397692741742503 0.161733596026897435971036998126 +0.0650452516973018673995809990629 0.414863088726997397692741742503 0.161733596026897435971036998126 +0.0651369988918304443359375 -0.114227199554443367701672684689 0.150696194171905523129240123126 +0.0651369988918304443359375 0.114227199554443367701672684689 0.150696194171905523129240123126 +0.0651842974126339014251385606258 -0.361354950070381153448551003748 -0.260141846537590037957698996252 +0.0651842974126339014251385606258 0.361354950070381153448551003748 -0.260141846537590037957698996252 +0.0652070526033639852325762831242 -0.405773513019084930419921875 0.856501939892768793249899772491 +0.0652070526033639852325762831242 0.405773513019084930419921875 0.856501939892768793249899772491 +0.0652281001210212735275106865629 -0.0350161492824554443359375 -0.1304575502872467041015625 +0.0652281001210212735275106865629 0.0350161492824554443359375 -0.1304575502872467041015625 +0.0652638018131256186782351846887 -0.0474164009094238322883363423443 -0.183009004592895513363615123126 +0.0652638018131256186782351846887 0.0474164009094238322883363423443 -0.183009004592895513363615123126 +0.0652716033160686548431073106258 -0.891395097970962502209602007497 0.105614997446537017822265625 +0.0652716033160686548431073106258 0.891395097970962502209602007497 0.105614997446537017822265625 +0.0653271481394767788986044365629 -0.338325041532516468389957253748 0.0613875500857829978218482835928 +0.0653271481394767788986044365629 0.338325041532516468389957253748 0.0613875500857829978218482835928 +0.0653571009635925265213174384371 -0.0398274019360542255729917826557 0.129004803299903852975560880623 +0.0653571009635925265213174384371 0.0398274019360542255729917826557 0.129004803299903852975560880623 +0.0653890013694763266860476846887 -0.0970404028892517117599325615629 -0.162195599079132085629240123126 +0.0653890013694763266860476846887 0.0970404028892517117599325615629 -0.162195599079132085629240123126 +0.0654447019100189153473223768742 -0.280538696050643909796207253748 -0.0837558031082153292556924384371 +0.0654447019100189153473223768742 0.280538696050643909796207253748 -0.0837558031082153292556924384371 +0.0655110508203506497482138115629 -0.435954737663269087377670985006 0.32886426150798797607421875 +0.0655110508203506497482138115629 0.435954737663269087377670985006 0.32886426150798797607421875 +0.0655285522341728238204794365629 -0.0843430481851100977142010606258 -0.4371407926082611083984375 +0.0655285522341728238204794365629 0.0843430481851100977142010606258 -0.4371407926082611083984375 +0.0655312478542327825348223768742 -0.106344902515411371402009876874 0.0830446511507034329513388115629 +0.0655312478542327825348223768742 0.106344902515411371402009876874 0.0830446511507034329513388115629 +0.06557320058345794677734375 -0.276558107137680031506477007497 0.204244244098663318975894753748 +0.06557320058345794677734375 0.276558107137680031506477007497 0.204244244098663318975894753748 +0.065593801438808441162109375 -0.331468784809112515521434261245 0.495808196067810014184829014994 +0.065593801438808441162109375 0.331468784809112515521434261245 0.495808196067810014184829014994 +0.0655993998050689725021200615629 -0.157141995429992686883480246252 -0.104895997047424319181807561563 +0.0655993998050689725021200615629 0.157141995429992686883480246252 -0.104895997047424319181807561563 +0.0656005978584289634047976846887 -0.0725297987461090143401776231258 0.020880199968814849853515625 +0.0656005978584289634047976846887 0.0725297987461090143401776231258 0.020880199968814849853515625 +0.0656310021877288818359375 -0.2354042530059814453125 -0.0527010001242160797119140625 +0.0656310021877288818359375 0.2354042530059814453125 -0.0527010001242160797119140625 +0.0656839504837989779373330634371 0 0.947726643085479714123664507497 +0.0656850993633270319183026231258 -0.0325527995824813828895649692186 0.0680131018161773681640625 +0.0656850993633270319183026231258 0.0325527995824813828895649692186 0.0680131018161773681640625 +0.06570599973201751708984375 -0.415404498577117919921875 0.2704105079174041748046875 +0.06570599973201751708984375 0.415404498577117919921875 0.2704105079174041748046875 +0.0657172501087188720703125 -0.20225299894809722900390625 -0.131434500217437744140625 +0.0657172501087188720703125 0.20225299894809722900390625 -0.131434500217437744140625 +0.0657224982976913479904013115629 -0.118525198101997367161608565311 0.0642830997705459566970986884371 +0.0657224982976913479904013115629 0.118525198101997367161608565311 0.0642830997705459566970986884371 +0.06572849862277507781982421875 -0.364280261099338531494140625 0.6522877514362335205078125 +0.06572849862277507781982421875 0.364280261099338531494140625 0.6522877514362335205078125 +0.0657375991344451987563601846887 -0.0232451006770133979106862653907 -0.071681499481201171875 +0.0657375991344451987563601846887 0.0232451006770133979106862653907 -0.071681499481201171875 +0.0657551981508731758774288778113 -0.202368997037410736083984375 -0.925863334536552340381376779987 +0.0657551981508731758774288778113 0.202368997037410736083984375 -0.925863334536552340381376779987 +0.0658186018466949546157351846887 -0.175868403911590587274105246252 -0.0688347995281219510177450615629 +0.0658186018466949546157351846887 0.175868403911590587274105246252 -0.0688347995281219510177450615629 +0.0658833980560302734375 -0.0660880982875824002364950615629 -0.0359407991170883206466513115629 +0.0658833980560302734375 0.0660880982875824002364950615629 -0.0359407991170883206466513115629 +0.0659262001514434869964276231258 -0.0397343993186950739104901231258 -0.0638350009918212946136151231258 +0.0659262001514434869964276231258 0.0397343993186950739104901231258 -0.0638350009918212946136151231258 +0.065939001739025115966796875 -0.33480298519134521484375 -0.365456998348236083984375 +0.065939001739025115966796875 0.33480298519134521484375 -0.365456998348236083984375 +0.0659439012408256503006143134371 -0.115775397419929496067858565311 -0.0689017519354820223709268134371 +0.0659439012408256503006143134371 0.115775397419929496067858565311 -0.0689017519354820223709268134371 +0.0659832000732421819488848768742 -0.538078808784484885485710492503 0.257132399082183826788394753748 +0.0659832000732421819488848768742 0.538078808784484885485710492503 0.257132399082183826788394753748 +0.065997250378131866455078125 -0.16974274814128875732421875 -0.17126524448394775390625 +0.065997250378131866455078125 0.16974274814128875732421875 -0.17126524448394775390625 +0.0660590998828411157806073106258 -0.869978678226471013879006477509 0.220848302543163316213892244377 +0.0660590998828411157806073106258 0.869978678226471013879006477509 0.220848302543163316213892244377 +0.0662142008543014498611611884371 -0.567718183994293190686164507497 0.182514595985412586554019753748 +0.0662142008543014498611611884371 0.567718183994293190686164507497 0.182514595985412586554019753748 +0.0662556007504463140289630018742 -0.0234648004174232462093474538278 -0.13251270353794097900390625 +0.0662556007504463140289630018742 0.0234648004174232462093474538278 -0.13251270353794097900390625 +0.06626500189304351806640625 -0.91624200344085693359375 -0.3951080143451690673828125 +0.06626500189304351806640625 0.91624200344085693359375 -0.3951080143451690673828125 +0.066270299255847930908203125 -0.0971108973026275634765625 -0.0931542009115219060699786268742 +0.066270299255847930908203125 0.0971108973026275634765625 -0.0931542009115219060699786268742 +0.0662827014923095675369424384371 -0.0727957010269165011306924384371 -0.0175322994589805596088449846093 +0.0662827014923095675369424384371 0.0727957010269165011306924384371 -0.0175322994589805596088449846093 +0.06629849970340728759765625 -0.2369554936885833740234375 0.044233500957489013671875 +0.06629849970340728759765625 0.2369554936885833740234375 0.044233500957489013671875 +0.0663111984729766873458700615629 -0.309380006790161143914730246252 -0.7347695827484130859375 +0.0663111984729766873458700615629 0.309380006790161143914730246252 -0.7347695827484130859375 +0.0663227990269660977462606865629 -0.0481857016682624775261167826557 -0.288581693172454800677684261245 +0.0663227990269660977462606865629 0.0481857016682624775261167826557 -0.288581693172454800677684261245 +0.06634874641895294189453125 -0.096546001732349395751953125 0.22085450589656829833984375 +0.06634874641895294189453125 0.096546001732349395751953125 0.22085450589656829833984375 +0.066381298005580902099609375 -0.0729351013898849459549111884371 -0.113022002577781666143863503748 +0.066381298005580902099609375 0.0729351013898849459549111884371 -0.113022002577781666143863503748 +0.06642225198447704315185546875 -0.52672876417636871337890625 0.52975948154926300048828125 +0.06642225198447704315185546875 0.52672876417636871337890625 0.52975948154926300048828125 +0.0664629466831684057037676893742 -0.93830360472202301025390625 -0.132924944907426817453099943123 +0.0664629466831684057037676893742 0.93830360472202301025390625 -0.132924944907426817453099943123 +0.066542752087116241455078125 -0.20480124652385711669921875 0.126998007297515869140625 +0.066542752087116241455078125 0.20480124652385711669921875 0.126998007297515869140625 +0.0666000008583068903167401231258 -0.0319220006465911892989950615629 -0.185863995552063010485710492503 +0.0666000008583068903167401231258 0.0319220006465911892989950615629 -0.185863995552063010485710492503 +0.0666115999221801730056924384371 -0.347888398170471235815170985006 -0.185839998722076432668970369377 +0.0666115999221801730056924384371 0.347888398170471235815170985006 -0.185839998722076432668970369377 +0.0666211009025573785979901231258 -0.608431181311607338635383257497 -0.218799747526645660400390625 +0.0666211009025573785979901231258 0.608431181311607338635383257497 -0.218799747526645660400390625 +0.06662850081920623779296875 -0.0982050001621246337890625 0.485711991786956787109375 +0.06662850081920623779296875 0.0982050001621246337890625 0.485711991786956787109375 +0.0666776001453399658203125 -0.0484434992074966458419638115629 -0.0566332995891571100433026231258 +0.0666776001453399658203125 0.0484434992074966458419638115629 -0.0566332995891571100433026231258 +0.0666901517659425763229208428129 -0.847379457950591996606704014994 0 +0.0666901517659425763229208428129 0.847379457950591996606704014994 0 +0.0666956007480621337890625 -0.0484567999839782756477113423443 -0.391412401199340842516960492503 +0.0666956007480621337890625 0.0484567999839782756477113423443 -0.391412401199340842516960492503 +0.0668148010969161904037960653113 -0.283859395980834927630809261245 0.0704247012734413174728231865629 +0.0668148010969161904037960653113 0.283859395980834927630809261245 0.0704247012734413174728231865629 +0.0668237984180450467208700615629 -0.179359996318817160876335492503 0.0580045998096466106086488423443 +0.0668237984180450467208700615629 0.179359996318817160876335492503 0.0580045998096466106086488423443 +0.0668461978435516412933026231258 -0.0198336005210876485660431711722 0.0716813027858734103103799384371 +0.0668461978435516412933026231258 0.0198336005210876485660431711722 0.0716813027858734103103799384371 +0.0668746501207351656814736884371 -0.01176870055496692657470703125 -0.133750802278518682308927623126 +0.0668746501207351656814736884371 0.01176870055496692657470703125 -0.133750802278518682308927623126 +0.0668767988681793212890625 -0.00666040033102035557155407019536 0.0740481972694397028167401231258 +0.0668767988681793212890625 0.00666040033102035557155407019536 0.0740481972694397028167401231258 +0.0668980002403259249588174384371 -0.0617672026157379192023988423443 -0.04134570062160491943359375 +0.0668980002403259249588174384371 0.0617672026157379192023988423443 -0.04134570062160491943359375 +0.0669406481087207877456179971887 -0.44048295915126800537109375 -0.0631944000720977838714276231258 +0.0669406481087207877456179971887 0.44048295915126800537109375 -0.0631944000720977838714276231258 +0.06696300208568572998046875 -0.0486509978771209675163511576557 -0.594263398647308371813835492503 +0.06696300208568572998046875 0.0486509978771209675163511576557 -0.594263398647308371813835492503 +0.0669768020510673467438067518742 -0.0241713009774684912944753278907 -0.291427195072174072265625 +0.0669768020510673467438067518742 0.0241713009774684912944753278907 -0.291427195072174072265625 +0.0670628011226654108245526231258 -0.163840997219085710012720369377 0.0930519998073577880859375 +0.0670628011226654108245526231258 0.163840997219085710012720369377 0.0930519998073577880859375 +0.0670815020799636757553585653113 0 -0.134164354205131536312833873126 +0.0670816496014595003982705634371 -0.07885904610157012939453125 0.10854180157184600830078125 +0.0670816496014595003982705634371 0.07885904610157012939453125 0.10854180157184600830078125 +0.0670817017555236788650674384371 -0.016245700418949127197265625 -0.0723610997200012234786825615629 +0.0670817017555236788650674384371 0.016245700418949127197265625 -0.0723610997200012234786825615629 +0.0670819997787475558181924384371 -0.0688189983367919894119424384371 0.0276396006345748929122763115629 +0.0670819997787475558181924384371 0.0688189983367919894119424384371 0.0276396006345748929122763115629 +0.0670824006199836758712606865629 -0.12759719789028167724609375 -0.0414595484733581501335386576557 +0.0670824006199836758712606865629 0.12759719789028167724609375 -0.0414595484733581501335386576557 +0.0671459019184112576583700615629 -0.0386184990406036390830912807814 0.0632458984851837213714276231258 +0.0671459019184112576583700615629 0.0386184990406036390830912807814 0.0632458984851837213714276231258 +0.067178003489971160888671875 -0.240163505077362060546875 -0.017565749585628509521484375 +0.067178003489971160888671875 0.240163505077362060546875 -0.017565749585628509521484375 +0.0671844005584716769119424384371 0 -0.596226596832275412829460492503 +0.0671952009201049749176348768742 0 -0.292377895116806008068977007497 +0.0672115489840507535079794365629 -0.11170859634876251220703125 0.074187599122524261474609375 +0.0672115489840507535079794365629 0.11170859634876251220703125 0.074187599122524261474609375 +0.0672458492219448061844033759371 -0.342598190903663613049445757497 -0.02458749897778034210205078125 +0.0672458492219448061844033759371 0.342598190903663613049445757497 -0.02458749897778034210205078125 +0.0672815978527069175063601846887 -0.016256399452686309814453125 -0.39396560192108154296875 +0.0672815978527069175063601846887 0.016256399452686309814453125 -0.39396560192108154296875 +0.0673145994544029208084268134371 -0.0790482044219970730880575615629 0.590948402881622314453125 +0.0673145994544029208084268134371 0.0790482044219970730880575615629 0.590948402881622314453125 +0.0673777520656585610092648153113 -0.129400196671485889776676003748 0.0348685495555400848388671875 +0.0673777520656585610092648153113 0.129400196671485889776676003748 0.0348685495555400848388671875 +0.06738500297069549560546875 -0.24029700458049774169921875 0.01471650041639804840087890625 +0.06738500297069549560546875 0.24029700458049774169921875 0.01471650041639804840087890625 +0.0673945516347885104080361884371 -0.0199605010449886328960378278907 0.132512551546096785104467130623 +0.0673945516347885104080361884371 0.0199605010449886328960378278907 0.132512551546096785104467130623 +0.0674412012100219782073651231258 -0.0735010027885436983963174384371 0.00701979994773864815482689039072 +0.0674412012100219782073651231258 0.0735010027885436983963174384371 0.00701979994773864815482689039072 +0.0674889981746673583984375 -0.4529145061969757080078125 -0.20078299939632415771484375 +0.0674889981746673583984375 0.4529145061969757080078125 -0.20078299939632415771484375 +0.06750024855136871337890625 -0.15386299788951873779296875 0.1851215064525604248046875 +0.06750024855136871337890625 0.15386299788951873779296875 0.1851215064525604248046875 +0.0675198018550872830489950615629 -0.0162279993295669569541850307814 -0.187557196617126470394865123126 +0.0675198018550872830489950615629 0.0162279993295669569541850307814 -0.187557196617126470394865123126 +0.0675314985215663965423260606258 -0.565476286411285444799545985006 -0.696904206275939963610710492503 +0.0675314985215663965423260606258 0.565476286411285444799545985006 -0.696904206275939963610710492503 +0.06754200160503387451171875 -0.1109877526760101318359375 -0.21358774602413177490234375 +0.06754200160503387451171875 0.1109877526760101318359375 -0.21358774602413177490234375 +0.0675494015216827475844851846887 -0.0572049975395202692229901231258 -0.04652599990367889404296875 +0.0675494015216827475844851846887 0.0572049975395202692229901231258 -0.04652599990367889404296875 +0.0675535976886749295333700615629 -0.207911205291748057977230246252 0.769551181793212912829460492503 +0.0675535976886749295333700615629 0.207911205291748057977230246252 0.769551181793212912829460492503 +0.067559801042079925537109375 -0.342799109220504716333266514994 0.0206006506457924835895578752343 +0.067559801042079925537109375 0.342799109220504716333266514994 0.0206006506457924835895578752343 +0.0675734996795654269119424384371 -0.0734793007373809869964276231258 -0.00588279999792575870876110144536 +0.0675734996795654269119424384371 0.0734793007373809869964276231258 -0.00588279999792575870876110144536 +0.0676286995410919217208700615629 -0.0792239964008331215561398153113 0.281335794925689663958934261245 +0.0676286995410919217208700615629 0.0792239964008331215561398153113 0.281335794925689663958934261245 +0.0676708478480577552138797159387 -0.487130159139633200915397992503 0.425000536441802967413394753748 +0.0676708478480577552138797159387 0.487130159139633200915397992503 0.425000536441802967413394753748 +0.067707002162933349609375 -0.779281175136566139904914507497 0.44512559473514556884765625 +0.067707002162933349609375 0.779281175136566139904914507497 0.44512559473514556884765625 +0.0677432000637054471114950615629 0 -0.188177800178527837582365123126 +0.0677460014820098765930822537484 -0.394973617792129472192641514994 -0.573939120769500710217414507497 +0.0677460014820098765930822537484 0.394973617792129472192641514994 -0.573939120769500710217414507497 +0.0677475988864898737151776231258 -0.0788266003131866538344851846887 0.170870196819305431024105246252 +0.0677475988864898737151776231258 0.0788266003131866538344851846887 0.170870196819305431024105246252 +0.0677586972713470486739950615629 -0.0081500001251697540283203125 -0.0730912983417510986328125 +0.0677586972713470486739950615629 0.0081500001251697540283203125 -0.0730912983417510986328125 +0.0678243994712829645354901231258 0 0.188148605823516862356470369377 +0.06786064989864826202392578125 -0.63203985989093780517578125 -0.135721948742866527215511496252 +0.06786064989864826202392578125 0.63203985989093780517578125 -0.135721948742866527215511496252 +0.0678929984569549560546875 -0.96118700504302978515625 -0.2674129903316497802734375 +0.0678929984569549560546875 0.96118700504302978515625 -0.2674129903316497802734375 +0.067941002547740936279296875 -0.0493620000779628753662109375 0.74528324604034423828125 +0.067941002547740936279296875 0.0493620000779628753662109375 0.74528324604034423828125 +0.06797325052320957183837890625 -0.1105582527816295623779296875 -0.73868550360202789306640625 +0.06797325052320957183837890625 0.1105582527816295623779296875 -0.73868550360202789306640625 +0.0679837524890899713714276231258 -0.441667342185974143298210492503 0.0529910992830991758872904995314 +0.0679837524890899713714276231258 0.441667342185974143298210492503 0.0529910992830991758872904995314 +0.0679848015308380099197549384371 0 -0.0733353018760681124588174384371 +0.0679857015609741238693075615629 -0.289158296585083018914730246252 -0.0420176982879638671875 +0.0679857015609741238693075615629 -0.10919295251369476318359375 -0.0771675020456314003647335653113 +0.0679857015609741238693075615629 0.10919295251369476318359375 -0.0771675020456314003647335653113 +0.0679857015609741238693075615629 0.289158296585083018914730246252 -0.0420176982879638671875 +0.0680130004882812527755575615629 -0.129888403415679948293970369377 -0.136026597023010259457365123126 +0.0680130004882812527755575615629 0.129888403415679948293970369377 -0.136026597023010259457365123126 +0.0680355019867420196533203125 -0.209388409554958354608089621252 -0.611577850580215520714943977509 +0.0680355019867420196533203125 0.209389048814773576223657869377 -0.611577850580215520714943977509 +0.0680580019950866726974325615629 -0.0330601006746292155891175923443 -0.0653846025466919000823651231258 +0.0680580019950866726974325615629 0.0330601006746292155891175923443 -0.0653846025466919000823651231258 +0.06809864938259124755859375 -0.13365089893341064453125 0 +0.06809864938259124755859375 0.13365089893341064453125 0 +0.0681147992610931368728799384371 -0.209638650715351121389673494377 0.61148358881473541259765625 +0.0681147992610931368728799384371 0.209638650715351121389673494377 0.61148358881473541259765625 +0.0681492000818252480209835653113 -0.594627606868743829870993522491 -0.0421187996864318819900674384371 +0.0681492000818252480209835653113 0.594627606868743829870993522491 -0.0421187996864318819900674384371 +0.0681499004364013727386151231258 -0.0646838009357452448089276231258 0.0342285990715026841590962192186 +0.0681499004364013727386151231258 0.0646838009357452448089276231258 0.0342285990715026841590962192186 +0.0681640982627868680099325615629 -0.069377899169921875 -0.023245699703693389892578125 +0.0681640982627868680099325615629 0.069377899169921875 -0.023245699703693389892578125 +0.06819260120391845703125 -0.0444460988044738797286825615629 0.0580887973308563260177450615629 +0.06819260120391845703125 0.0444460988044738797286825615629 0.0580887973308563260177450615629 +0.0682016998529434148590411268742 -0.132425549626350391729801003748 0.01766384951770305633544921875 +0.0682016998529434148590411268742 0.132425549626350391729801003748 0.01766384951770305633544921875 +0.0682172000408172579666299384371 -0.183218204975128196032585492503 -0.0421608000993728693206463731258 +0.0682172000408172579666299384371 0.183218204975128196032585492503 -0.0421608000993728693206463731258 +0.0682299971580505454360476846887 -0.124047005176544197779797684689 0.141269195079803483450220369377 +0.0682299971580505454360476846887 0.124047005176544197779797684689 0.141269195079803483450220369377 +0.0682514995336532537262286268742 -0.131901445984840381964176003748 -0.0210648000240325934673268903907 +0.0682514995336532537262286268742 0.131901445984840381964176003748 -0.0210648000240325934673268903907 +0.068316496908664703369140625 0 0.2404847443103790283203125 +0.0683930978178977910797442518742 -0.0198125995695590979839284528907 0.291427195072174072265625 +0.0683930978178977910797442518742 0.0198125995695590979839284528907 0.291427195072174072265625 +0.0684308990836143410385616903113 -0.210612595081329345703125 0.202384507656097417660490123126 +0.0684308990836143410385616903113 0.210612595081329345703125 0.202384507656097417660490123126 +0.0684344507753849029541015625 -0.135065695643424965588508257497 0.315553346276283230853465511245 +0.0684344507753849029541015625 0.135065695643424965588508257497 0.315553346276283230853465511245 +0.0684372007846832247635049384371 -0.0396670013666153009612713731258 0.183692395687103271484375 +0.0684372007846832247635049384371 0.0396670013666153009612713731258 0.183692395687103271484375 +0.0684575974941253745376101846887 -0.369550800323486361431690738755 -0.136914801597595225945980246252 +0.0684575974941253745376101846887 0.369550800323486361431690738755 -0.136914801597595225945980246252 +0.0685067474842071533203125 -0.049773000180721282958984375 0.2352222502231597900390625 +0.0685067474842071533203125 0.049773000180721282958984375 0.2352222502231597900390625 +0.0685133993625640924651776231258 -0.184536397457122802734375 0.0353868007659912109375 +0.0685133993625640924651776231258 0.184536397457122802734375 0.0353868007659912109375 +0.0685520015656948117355184990629 -0.210985505580902121813835492503 0.503274762630462668688835492503 +0.0685520015656948117355184990629 0.210985505580902121813835492503 0.503274762630462668688835492503 +0.068588502705097198486328125 -0.0498317517340183258056640625 -0.23518599569797515869140625 +0.068588502705097198486328125 0.0498317517340183258056640625 -0.23518599569797515869140625 +0.0686042994260787908356036268742 -0.289917898178100597039730246252 0.0352292999625205965896768134371 +0.0686042994260787908356036268742 0.289917898178100597039730246252 0.0352292999625205965896768134371 +0.0686051968485116986373739678129 -0.620817375183105424341079014994 0.715806922316551186291633257497 +0.0686051968485116986373739678129 0.620817375183105424341079014994 0.715806922316551186291633257497 +0.0686065971851348849197549384371 -0.0828534007072448813735476846887 -0.168607401847839372122095369377 +0.0686065971851348849197549384371 0.0828534007072448813735476846887 -0.168607401847839372122095369377 +0.0686118997633457100571163778113 -0.6179831027984619140625 -0.321541509032249428479133257497 +0.0686118997633457100571163778113 0.6179831027984619140625 -0.321541509032249428479133257497 +0.068639002740383148193359375 -0.4271300137042999267578125 0.901580989360809326171875 +0.068639002740383148193359375 0.4271300137042999267578125 0.901580989360809326171875 +0.068701498210430145263671875 -0.831872695684433005602897992503 0.336553207039833102154346988755 +0.068701498210430145263671875 0.831872695684433005602897992503 0.336553207039833102154346988755 +0.0687392972409725244720135606258 -0.734605175256729192589943977509 -0.515394026041030905993522992503 +0.0687392972409725244720135606258 0.734605175256729192589943977509 -0.515394026041030905993522992503 +0.068752251565456390380859375 -0.164818848669528950079410378748 -0.301011541485786404681590511245 +0.068752251565456390380859375 0.164818848669528950079410378748 -0.301011541485786404681590511245 +0.06876075267791748046875 -0.5794275104999542236328125 -0.47120623290538787841796875 +0.06876075267791748046875 0.5794275104999542236328125 -0.47120623290538787841796875 +0.0687690503895282689850176893742 -0.2899546921253204345703125 -0.183567994832992548159822376874 +0.0687690503895282689850176893742 0.2899546921253204345703125 -0.183567994832992548159822376874 +0.0687788978219032315353231865629 -0.062338650226593017578125 -0.117827546596527096833817438437 +0.0687788978219032315353231865629 0.062338650226593017578125 -0.117827546596527096833817438437 +0.0687974989414215087890625 -0.0601499021053314222862162807814 0.0406066000461578410773988423443 +0.0687974989414215087890625 0.0601499021053314222862162807814 0.0406066000461578410773988423443 +0.0688189029693603571136151231258 -0.04999969899654388427734375 0.0525735974311828668792401231258 +0.0688189029693603571136151231258 0.04999969899654388427734375 0.0525735974311828668792401231258 +0.0688667982816696111481036268742 -0.594988811016082697058493522491 0.0352967999875545487831196567186 +0.0688667982816696111481036268742 0.594988811016082697058493522491 0.0352967999875545487831196567186 +0.0688978035002946881393270928129 -0.940917047858238153601462272491 0.1114824973046779632568359375 +0.0688978035002946881393270928129 0.940917047858238153601462272491 0.1114824973046779632568359375 +0.06897599995136260986328125 0 0.4952194988727569580078125 +0.06897640228271484375 0 0.0724034011363983154296875 +0.0689846992492675753494424384371 -0.0264149010181427001953125 0.0674045026302337729751101846887 +0.0689846992492675753494424384371 0.0264149010181427001953125 0.0674045026302337729751101846887 +0.0689851507544517461578692518742 -0.0501205489039421095420756557814 0.123405745625495902317858565311 +0.0689851507544517461578692518742 0.0501205489039421095420756557814 0.123405745625495902317858565311 +0.0690077491104602730453976278113 -0.212387350201606733834935880623 0.269498950242996193615852007497 +0.0690077491104602730453976278113 0.212387350201606733834935880623 0.269498950242996193615852007497 +0.0690209984779357882400674384371 -0.055245101451873779296875 0.04673419892787933349609375 +0.0690209984779357882400674384371 0.055245101451873779296875 0.04673419892787933349609375 +0.06909625232219696044921875 -0.21265999972820281982421875 0.111803747713565826416015625 +0.06909625232219696044921875 0.21265999972820281982421875 0.111803747713565826416015625 +0.0690985023975372314453125 -0.21265999972820281982421875 -0.4472149908542633056640625 +0.0690985023975372314453125 0.21265999972820281982421875 -0.4472149908542633056640625 +0.06909950077533721923828125 -0.4755274951457977294921875 -0.13819849491119384765625 +0.06909950077533721923828125 0.4755274951457977294921875 -0.13819849491119384765625 +0.0691256470978260095794354356258 -0.140346804261207602770866742503 -0.527280050516128584447983485006 +0.0691256470978260095794354356258 0.140346804261207602770866742503 -0.527280050516128584447983485006 +0.0691410005092620849609375 0 0.9976069927215576171875 +0.06921599805355072021484375 -0.2130199968814849853515625 -0.974592983722686767578125 +0.06921599805355072021484375 0.2130199968814849853515625 -0.974592983722686767578125 +0.0692801982164382990081463731258 -0.273362401127815235479801003748 -0.350675547122955344470085492503 +0.0692801982164382990081463731258 0.273362401127815235479801003748 -0.350675547122955344470085492503 +0.0693043019622564399062625284387 -0.471440437436103809698551003748 -0.442086440324783336297542746252 +0.0693043019622564399062625284387 0.471440437436103809698551003748 -0.442086440324783336297542746252 +0.0693597972393035916427450615629 -0.0422358006238937391807475307814 -0.0583554029464721721320863423443 +0.0693597972393035916427450615629 0.0422358006238937391807475307814 -0.0583554029464721721320863423443 +0.0693817973136901938735476846887 -0.187209999561309820004240123126 0.0117732003331184401084819057814 +0.0693817973136901938735476846887 0.187209999561309820004240123126 0.0117732003331184401084819057814 +0.06945359706878662109375 -0.187026000022888189144865123126 -0.0140525996685028076171875 +0.06945359706878662109375 0.187026000022888189144865123126 -0.0140525996685028076171875 +0.0695303976535797119140625 -0.0132791996002197265625 0.0706341981887817355056924384371 +0.0695303976535797119140625 0.0132791996002197265625 0.0706341981887817355056924384371 +0.0695702016353607205489950615629 -0.0704469978809356689453125 0.014043100178241729736328125 +0.0695702016353607205489950615629 0.0704469978809356689453125 0.014043100178241729736328125 +0.06965924799442291259765625 -0.0861681014299392616928585653113 0.101107200980186454075671065311 +0.06965924799442291259765625 0.0861681014299392616928585653113 0.101107200980186454075671065311 +0.0696685016155242919921875 -0.333154809474945079461605246252 0.432034894824028070647869981258 +0.0696685016155242919921875 0.333154809474945079461605246252 0.432034894824028070647869981258 +0.0696695983409881675063601846887 -0.299912405014038097039730246252 0.255340409278869640008480246252 +0.0696695983409881675063601846887 0.299912405014038097039730246252 0.255340409278869640008480246252 +0.0696859002113342368422976846887 -0.050629198551177978515625 -0.0507992029190063518195863423443 +0.0696859002113342368422976846887 0.050629198551177978515625 -0.0507992029190063518195863423443 +0.0696994498372077858627804403113 -0.0875527471303939736069210653113 -0.0998824506998062106033486884371 +0.0696994498372077858627804403113 0.0875527471303939736069210653113 -0.0998824506998062106033486884371 +0.0697193026542663601974325615629 -0.0656279981136322076995526231258 -0.02884779870510101318359375 +0.0697193026542663601974325615629 0.0656279981136322076995526231258 -0.02884779870510101318359375 +0.0697290498763322857955770928129 -0.918310827016830422131477007497 0.233117652684450143985017689374 +0.0697290498763322857955770928129 0.918310827016830422131477007497 0.233117652684450143985017689374 +0.069754801690578460693359375 -0.174583804607391340768529630623 -0.233783698081970192639289507497 +0.069754801690578460693359375 0.174583804607391340768529630623 -0.233783698081970192639289507497 +0.06983689963817596435546875 -0.289487454295158375128238503748 0.183901551365852344854801003748 +0.06983689963817596435546875 0.289487454295158375128238503748 0.183901551365852344854801003748 +0.0698484018445014870346554403113 0 0.132744902372360223941072376874 +0.0698710024356842124282351846887 -0.0261545985937118551090119211722 -0.0665881991386413629729901231258 +0.0698710024356842124282351846887 0.0261545985937118551090119211722 -0.0665881991386413629729901231258 +0.0699002981185913169204226846887 -0.1181960999965667724609375 0.4285368025302886962890625 +0.0699002981185913169204226846887 0.1181960999965667724609375 0.4285368025302886962890625 +0.0699126005172729519943075615629 -0.0705235004425048828125 -0.0117758996784687042236328125 +0.0699126005172729519943075615629 0.0705235004425048828125 -0.0117758996784687042236328125 +0.06996099650859832763671875 -0.987688004970550537109375 -0.13992099463939666748046875 +0.06996099650859832763671875 0.987688004970550537109375 -0.13992099463939666748046875 +0.07001374661922454833984375 -0.0302974991500377655029296875 -0.23807574808597564697265625 +0.07001374661922454833984375 0.0302974991500377655029296875 -0.23807574808597564697265625 +0.0700314000248909024337606865629 -0.124553704261779779605134876874 0.0456286489963531466385049384371 +0.0700314000248909024337606865629 0.124553704261779779605134876874 0.0456286489963531466385049384371 +0.0700338006019592257400674384371 -0.291711008548736550061164507497 0 +0.0700338006019592257400674384371 0.291711008548736550061164507497 0 +0.0700921520590782193282919365629 -0.1226280033588409423828125 -0.050492249429225921630859375 +0.0700921520590782193282919365629 0.1226280033588409423828125 -0.050492249429225921630859375 +0.0701015979051589910309161268742 -0.255790793895721402240184261245 -0.140202900767326360531583873126 +0.0701015979051589910309161268742 0.255790793895721402240184261245 -0.140202900767326360531583873126 +0.0701103985309600857833700615629 -0.388565611839294444695980246252 0.695773601531982421875 +0.0701103985309600857833700615629 0.388565611839294444695980246252 0.695773601531982421875 +0.0701858997344970703125 -0.100405803322792044895983565311 -0.273847800493240367547542746252 +0.0701858997344970703125 0.100405803322792044895983565311 -0.273847800493240367547542746252 +0.0702332019805908258636151231258 -0.129944002628326421566740123126 0.371727991104126020971420985006 +0.0702332019805908258636151231258 0.129944002628326421566740123126 0.371727991104126020971420985006 +0.0702675998210906954666299384371 -0.216257596015930197985710492503 -0.329082393646240256579460492503 +0.0702675998210906954666299384371 0.216257596015930197985710492503 -0.329082393646240256579460492503 +0.070381499826908111572265625 -0.010169000364840030670166015625 -0.2396727502346038818359375 +0.070381499826908111572265625 0.010169000364840030670166015625 -0.2396727502346038818359375 +0.0703957490622997283935546875 -0.44445960223674774169921875 0 +0.0703957490622997283935546875 0.44445960223674774169921875 0 +0.0704287987202405901809854071871 -0.636044493317604042736945757497 0.113959946483373639192215875937 +0.0704287987202405901809854071871 0.636044493317604042736945757497 0.113959946483373639192215875937 +0.0704556483775377190292843465613 -0.328716257214546170306590511245 -0.78069268167018890380859375 +0.0704556483775377190292843465613 0.328716257214546170306590511245 -0.78069268167018890380859375 +0.07055175304412841796875 -0.217132747173309326171875 -0.101861752569675445556640625 +0.07055175304412841796875 0.217132747173309326171875 -0.101861752569675445556640625 +0.0706131018698215456863565009371 -0.897225308418273970190170985006 0 +0.0706131018698215456863565009371 0.897225308418273970190170985006 0 +0.0706307001411914797683877509371 -0.0801136024296283666412676893742 -0.3333064019680023193359375 +0.0706307001411914797683877509371 0.0801136024296283666412676893742 -0.3333064019680023193359375 +0.0706430971622467041015625 -0.03259269893169403076171875 0.0628273010253906222244424384371 +0.0706430971622467041015625 0.03259269893169403076171875 0.0628273010253906222244424384371 +0.0707108020782470786391726846887 -0.070710599422454833984375 0 +0.0707108020782470786391726846887 0.070710599422454833984375 0 +0.070728600025177001953125 -0.297860991954803477899105246252 -0.516019785404205344470085492503 +0.070728600025177001953125 0.297860991954803477899105246252 -0.516019785404205344470085492503 +0.0707832008600235013107138115629 -0.0514263018965721088737730326557 -0.121840345859527576788394753748 +0.0707832008600235013107138115629 0.0514263018965721088737730326557 -0.121840345859527576788394753748 +0.0708504021167755126953125 -0.561844015121459983141960492503 0.565076780319213933800881477509 +0.0708504021167755126953125 0.561844015121459983141960492503 0.565076780319213933800881477509 +0.0708819016814231789291866903113 -0.153360307216644287109375 0.247904098033905007092414507497 +0.0708819016814231789291866903113 0.153360307216644287109375 0.247904098033905007092414507497 +0.0709406971931457602797976846887 -0.0615638971328735379318075615629 -0.0343118011951446533203125 +0.0709406971931457602797976846887 0.0615638971328735379318075615629 -0.0343118011951446533203125 +0.0709634006023407010177450615629 -0.146957802772521989309595369377 -0.115618395805358889494307561563 +0.0709634006023407010177450615629 0.146957802772521989309595369377 -0.115618395805358889494307561563 +0.07103635370731353759765625 -0.464148849248886163909588731258 -0.286391052603721663061264735006 +0.07103635370731353759765625 0.464148849248886163909588731258 -0.286391052603721663061264735006 +0.07105995155870914459228515625 -0.359091183543205294537159488755 0.537125545740127607885483485006 +0.07105995155870914459228515625 0.359091183543205294537159488755 0.537125545740127607885483485006 +0.0710615500807762062729366903113 -0.3118510544300079345703125 -0.142123454809188837222322376874 +0.0710615500807762062729366903113 0.3118510544300079345703125 -0.142123454809188837222322376874 +0.0712545990943908719161825615629 -0.133499801158905029296875 0.130769395828247064761384876874 +0.0712545990943908719161825615629 0.133499801158905029296875 0.130769395828247064761384876874 +0.0712599992752075278579226846887 -0.357170009613037131579460492503 0.165382802486419677734375 +0.0712599992752075278579226846887 0.357170009613037131579460492503 0.165382802486419677734375 +0.0712722003459930475433026231258 -0.0669610977172851590255575615629 0.0208921998739242560649831403907 +0.0712722003459930475433026231258 0.0669610977172851590255575615629 0.0208921998739242560649831403907 +0.0712791979312896728515625 -0.0682857990264892633636151231258 -0.17394340038299560546875 +0.0712791979312896728515625 0.0682857990264892633636151231258 -0.17394340038299560546875 +0.0712832484394311932662802178129 -0.596891635656356833727897992503 -0.735621106624603227075454014994 +0.0712832484394311932662802178129 0.596891635656356833727897992503 -0.735621106624603227075454014994 +0.071313202381134033203125 -0.376296806335449263158920985006 0.115391194820404052734375 +0.071313202381134033203125 0.376296806335449263158920985006 0.115391194820404052734375 +0.0713180005550384521484375 -0.092935502529144287109375 -0.22085450589656829833984375 +0.0713180005550384521484375 0.092935502529144287109375 -0.22085450589656829833984375 +0.0713360011577606201171875 -0.01917760074138641357421875 -0.0674046993255615206619424384371 +0.0713360011577606201171875 0.01917760074138641357421875 -0.0674046993255615206619424384371 +0.07133950293064117431640625 -0.16570949554443359375 0.173063755035400390625 +0.07133950293064117431640625 0.16570949554443359375 0.173063755035400390625 +0.0713475003838539012512853787484 -0.0694347500801086314758947537484 0.335541850328445412365852007497 +0.0713475003838539012512853787484 0.0694347500801086314758947537484 0.335541850328445412365852007497 +0.0714329995214939145187216240629 -0.316790100932121287957698996252 0.311514759063720725329460492503 +0.0714329995214939145187216240629 0.316790100932121287957698996252 0.311514759063720725329460492503 +0.0714666008949279701889523153113 -0.475586986541748024670539507497 0.358761012554168701171875 +0.0714666008949279701889523153113 0.475586986541748024670539507497 0.358761012554168701171875 +0.0714685022830963134765625 -0.822574573755264215613181022491 0.469854794442653656005859375 +0.0714685022830963134765625 0.822574573755264215613181022491 0.469854794442653656005859375 +0.0714818000793457086761151231258 -0.582918709516525246350227007497 0.278560099005699168817073996252 +0.0714818000793457086761151231258 0.582918709516525246350227007497 0.278560099005699168817073996252 +0.07153700292110443115234375 -0.4324634969234466552734375 0.24053700268268585205078125 +0.07153700292110443115234375 0.4324634969234466552734375 0.24053700268268585205078125 +0.0716465994715690529526241903113 -0.220501506328582758120759876874 -0.190383303165435779913394753748 +0.0716465994715690529526241903113 0.220501506328582758120759876874 -0.190383303165435779913394753748 +0.07165600359439849853515625 -0.32830750942230224609375 0.3702425062656402587890625 +0.07165600359439849853515625 0.32830750942230224609375 0.3702425062656402587890625 +0.0717042982578277587890625 -0.0358222991228103679328675923443 -0.0597934007644653348068075615629 +0.0717042982578277587890625 0.0358222991228103679328675923443 -0.0597934007644653348068075615629 +0.071725003421306610107421875 -0.15480874478816986083984375 -0.1827284991741180419921875 +0.071725003421306610107421875 0.15480874478816986083984375 -0.1827284991741180419921875 +0.0717320509254932431320028740629 -0.615028032660484336169304242503 0.197724145650863658563167746252 +0.0717320509254932431320028740629 0.615028032660484336169304242503 0.197724145650863658563167746252 +0.0717458009719848521790197537484 -0.655233579874038629675681022491 -0.235630497336387606521768134371 +0.0717458009719848521790197537484 0.655233579874038629675681022491 -0.235630497336387606521768134371 +0.07177560031414031982421875 -0.100847098231315615568526311563 -0.0847239017486572237869424384371 +0.07177560031414031982421875 0.100847098231315615568526311563 -0.0847239017486572237869424384371 +0.0717756975442171013535030965613 -0.220905655622482294253572376874 0.817648130655288629675681022491 +0.0717756975442171013535030965613 0.220905655622482294253572376874 0.817648130655288629675681022491 +0.0718226015567779568771200615629 -0.0572050988674163846114950615629 -0.0396117001771926907638388115629 +0.0718226015567779568771200615629 0.0572050988674163846114950615629 -0.0396117001771926907638388115629 +0.071830503642559051513671875 -0.480969011783599853515625 0.11622799932956695556640625 +0.071830503642559051513671875 0.480969011783599853515625 0.11622799932956695556640625 +0.0718580007553100558181924384371 -0.00665659978985786490029985529304 0.0692251026630401611328125 +0.0718580007553100558181924384371 0.00665659978985786490029985529304 0.0692251026630401611328125 +0.0718797013163566533844317518742 -0.0930353969335556002517861884371 0.0931542009115219060699786268742 +0.0718797013163566533844317518742 0.0930353969335556002517861884371 0.0931542009115219060699786268742 +0.0718936026096343994140625 -0.168034803867340098992855246252 -0.0812134027481079129318075615629 +0.0718936026096343994140625 0.168034803867340098992855246252 -0.0812134027481079129318075615629 +0.0718949973583221518813601846887 -0.0385904014110565185546875 0.0578090012073516901214276231258 +0.0718949973583221518813601846887 0.0385904014110565185546875 0.0578090012073516901214276231258 +0.0719003975391387939453125 -0.019909299910068511962890625 0.0665880024433136014083700615629 +0.0719003975391387939453125 0.019909299910068511962890625 0.0665880024433136014083700615629 +0.0719086490571498870849609375 -0.34106849133968353271484375 -0.28460745513439178466796875 +0.0719086490571498870849609375 0.34106849133968353271484375 -0.28460745513439178466796875 +0.0719183981418609619140625 -0.0672317981719970786391726846887 -0.017539300024509429931640625 +0.0719183981418609619140625 0.0672317981719970786391726846887 -0.017539300024509429931640625 +0.0719279989600181551834268134371 -0.0300549007952213287353515625 0.128152495622634893246427623126 +0.0719279989600181551834268134371 0.0300549007952213287353515625 0.128152495622634893246427623126 +0.071946002542972564697265625 -0.22143100202083587646484375 0.4424839913845062255859375 +0.071946002542972564697265625 0.22143100202083587646484375 0.4424839913845062255859375 +0.0719860509037971579848758096887 -0.0296945985406637212589142649222 0.44321130216121673583984375 +0.0719860509037971579848758096887 0.0296945985406637212589142649222 0.44321130216121673583984375 +0.071997500956058502197265625 -0.113564498722553253173828125 0.2107592523097991943359375 +0.071997500956058502197265625 0.113564498722553253173828125 0.2107592523097991943359375 +0.0720849990844726618011151231258 -0.09217560291290283203125 0.162195599079132085629240123126 +0.0720849990844726618011151231258 0.09217560291290283203125 0.162195599079132085629240123126 +0.0720964014530181968032351846887 -0.221894001960754400082365123126 0.324907588958740278783920985006 +0.0720964014530181968032351846887 0.221894001960754400082365123126 0.324907588958740278783920985006 +0.0721156485378742218017578125 -0.162714144587516790219083873126 -0.41330789029598236083984375 +0.0721156485378742218017578125 0.162714144587516790219083873126 -0.41330789029598236083984375 +0.0721356995403766576568926893742 0 0.342485851049423195568977007497 +0.072215996682643890380859375 -0.653491973876953125 0.753480970859527587890625 +0.072215996682643890380859375 0.653491973876953125 0.753480970859527587890625 +0.0722296491265296963790731865629 -0.118897202610969532354801003748 0.0560920491814613300651792826557 +0.0722296491265296963790731865629 0.118897202610969532354801003748 0.0560920491814613300651792826557 +0.0722422510385513222397335653113 -0.0601447507739067063758930942186 0.11689169704914093017578125 +0.0722422510385513222397335653113 0.0601447507739067063758930942186 0.11689169704914093017578125 +0.072272501885890960693359375 -0.4609589874744415283203125 0.17970399558544158935546875 +0.072272501885890960693359375 0.4609589874744415283203125 0.17970399558544158935546875 +0.0722743988037109347244424384371 -0.0122726999223232279695450230861 -0.0680131971836090143401776231258 +0.0722743988037109347244424384371 0.0122726999223232279695450230861 -0.0680131971836090143401776231258 +0.072276599705219268798828125 -0.456944948434829745220753238755 0.297451558709144636694077235006 +0.072276599705219268798828125 0.456944948434829745220753238755 0.297451558709144636694077235006 +0.0723599970340728787521200615629 -0.0525726020336151136924662807814 0.178885805606842057668970369377 +0.0723599970340728787521200615629 -0.0525720000267028836349325615629 -0.04472149908542633056640625 +0.0723599970340728787521200615629 0.0525720000267028836349325615629 -0.04472149908542633056640625 +0.0723599970340728787521200615629 0.0525726020336151136924662807814 0.178885805606842057668970369377 +0.0723608016967773465255575615629 -0.117555797100067138671875 -0.144722402095794677734375 +0.0723608016967773465255575615629 0.117555797100067138671875 -0.144722402095794677734375 +0.072426997125148773193359375 -0.4015055000782012939453125 -0.2890464961528778076171875 +0.072426997125148773193359375 0.4015055000782012939453125 -0.2890464961528778076171875 +0.0724704027175903375823651231258 -0.0526528000831604017784037807814 0.794968795776367254113381477509 +0.0724704027175903375823651231258 0.0526528000831604017784037807814 0.794968795776367254113381477509 +0.0724828004837036188323651231258 -0.052661597728729248046875 0.389837193489074751440170985006 +0.0724828004837036188323651231258 0.052661597728729248046875 0.389837193489074751440170985006 +0.0724965989589691217620526231258 -0.0445358991622924818565287807814 -0.0525433003902435330489950615629 +0.0724965989589691217620526231258 0.0445358991622924818565287807814 -0.0525433003902435330489950615629 +0.0725048005580902071853799384371 -0.117928802967071533203125 -0.7879312038421630859375 +0.0725048005580902071853799384371 0.117928802967071533203125 -0.7879312038421630859375 +0.0725182481110095977783203125 -0.878087845444679215844985264994 0.355250607430934894903629128748 +0.0725182481110095977783203125 0.878087845444679215844985264994 0.355250607430934894903629128748 +0.072524003684520721435546875 -0.990438997745513916015625 0.11734999716281890869140625 +0.072524003684520721435546875 0.990438997745513916015625 0.11734999716281890869140625 +0.072531498968601226806640625 -0.223231494426727294921875 0.0860629975795745849609375 +0.072531498968601226806640625 0.223231494426727294921875 0.0860629975795745849609375 +0.0725329019129276331145916856258 -0.368283283710479747430355246252 -0.402002698183059725689503238755 +0.0725329019129276331145916856258 0.368283283710479747430355246252 -0.402002698183059725689503238755 +0.0725432522594928741455078125 -0.0527052477002143901496644673443 -0.643785348534584023205695757497 +0.0725432522594928741455078125 0.0527052477002143901496644673443 -0.643785348534584023205695757497 +0.0725581470876932171920614678129 -0.775416573882102944104133257497 -0.544027027487754777368422764994 +0.0725581470876932171920614678129 0.775416573882102944104133257497 -0.544027027487754777368422764994 +0.07258500158786773681640625 -0.42318601906299591064453125 -0.6149347722530364990234375 +0.07258500158786773681640625 0.42318601906299591064453125 -0.6149347722530364990234375 +0.0725913003087043789962606865629 -0.223416906595230085885717130623 0.186588603258132923468082253748 +0.0725913003087043789962606865629 0.223416906595230085885717130623 0.186588603258132923468082253748 +0.0725979983806610135177450615629 -0.118400001525878914576672684689 -0.37511479854583740234375 +0.0725979983806610135177450615629 0.118400001525878914576672684689 -0.37511479854583740234375 +0.072610996663570404052734375 -0.19009999930858612060546875 -0.14522249996662139892578125 +0.072610996663570404052734375 0.19009999930858612060546875 -0.14522249996662139892578125 +0.0726140975952148520766726846887 -0.0628310978412628257094851846887 0.0279186010360717787315287807814 +0.0726140975952148520766726846887 0.0628310978412628257094851846887 0.0279186010360717787315287807814 +0.0726441979408264243422976846887 -0.0133208006620407111431081403907 0.185863804817199718133480246252 +0.0726441979408264243422976846887 0.0133208006620407111431081403907 0.185863804817199718133480246252 +0.0726688519120216314117755018742 -0.0774172514677047701736611884371 -0.105951896309852591770983565311 +0.0726688519120216314117755018742 0.0774172514677047701736611884371 -0.105951896309852591770983565311 +0.0727182984352111871917401231258 -0.0442864000797271728515625 0.0524478018283844049651776231258 +0.0727182984352111871917401231258 0.0442864000797271728515625 0.0524478018283844049651776231258 +0.0727317988872528131683026231258 -0.00412500016391277330579656634768 -0.0685060024261474609375 +0.0727317988872528131683026231258 0.00412500016391277330579656634768 -0.0685060024261474609375 +0.0727425009012222234527911268742 -0.117030152678489679507478626874 -0.059266202151775360107421875 +0.0727425009012222234527911268742 0.117030152678489679507478626874 -0.059266202151775360107421875 +0.0727831006050109891036825615629 0 -0.645912146568298317639289507497 +0.07280950248241424560546875 -0.093714497983455657958984375 -0.485711991786956787109375 +0.07280950248241424560546875 0.093714497983455657958984375 -0.485711991786956787109375 +0.0728762976825237246414346259371 -0.524601709842681840356704014994 0.457692885398864712787059261245 +0.0728762976825237246414346259371 0.524601709842681840356704014994 0.457692885398864712787059261245 +0.0729241494089365033248739678129 -0.0856355547904968233963174384371 0.64019410312175750732421875 +0.0729241494089365033248739678129 0.0856355547904968233963174384371 0.64019410312175750732421875 +0.0730627521872520419021768134371 -0.127204048633575428350894753748 -0.0313204497098922701736611884371 +0.0730627521872520419021768134371 0.127204048633575428350894753748 -0.0313204497098922701736611884371 +0.0730791985988616943359375 -0.0678975999355316134353799384371 0.0070249997079372406005859375 +0.0730791985988616943359375 0.0678975999355316134353799384371 0.0070249997079372406005859375 +0.0730806998908519744873046875 -0.6806583106517791748046875 -0.146162098646163918225227007497 +0.0730806998908519744873046875 0.6806583106517791748046875 -0.146162098646163918225227007497 +0.0731052026152610862075320596887 -0.224997746944427506887720369377 0.382794302701950084344417746252 +0.0731052026152610862075320596887 0.224997746944427506887720369377 0.382794302701950084344417746252 +0.0731256008148193359375 -0.128300553560256963558927623126 0.0262984491884708411479909528907 +0.0731256008148193359375 0.128300553560256963558927623126 0.0262984491884708411479909528907 +0.0731857001781463650802450615629 -0.0678911983966827420333700615629 -0.00588590018451213854017156634768 +0.0731857001781463650802450615629 0.0678911983966827420333700615629 -0.00588590018451213854017156634768 +0.0732068002223968533614950615629 -0.384261608123779296875 -0.0835691988468170166015625 +0.0732068002223968533614950615629 0.384261608123779296875 -0.0835691988468170166015625 +0.0732577979564666831313601846887 -0.172985804080963145867855246252 0.068623602390289306640625 +0.0732577979564666831313601846887 0.172985804080963145867855246252 0.068623602390289306640625 +0.073269002139568328857421875 -0.225495210289955116955695757497 -0.658622300624847389904914507497 +0.073269002139568328857421875 0.225495898723602289370759876874 -0.658622300624847389904914507497 +0.0732913509011268726744958712516 -0.108025500178337105494641434689 0.5342831909656524658203125 +0.0732913509011268726744958712516 0.108025500178337105494641434689 0.5342831909656524658203125 +0.0733448028564453180511151231258 -0.618056011199951238488381477509 -0.5026199817657470703125 +0.0733448028564453180511151231258 0.618056011199951238488381477509 -0.5026199817657470703125 +0.0733531504869461004059161268742 -0.01001114957034587860107421875 0.130457246303558344058259876874 +0.0733531504869461004059161268742 0.01001114957034587860107421875 0.130457246303558344058259876874 +0.0733543992042541420639523153113 -0.225764700770378107241853626874 0.6585207879543304443359375 +0.0733543992042541420639523153113 0.225764700770378107241853626874 0.6585207879543304443359375 +0.073398999869823455810546875 -0.96664297580718994140625 0.24538700282573699951171875 +0.073398999869823455810546875 0.96664297580718994140625 0.24538700282573699951171875 +0.0734418019652366554916866903113 -0.265489196777343727795539507497 0.118835100531578058413728626874 +0.0734418019652366554916866903113 0.265489196777343727795539507497 0.118835100531578058413728626874 +0.0734611988067627036391726846887 -0.0584713995456695584396200615629 0.0344173997640609755088725307814 +0.0734611988067627036391726846887 0.0584713995456695584396200615629 0.0344173997640609755088725307814 +0.0735027015209197970291299384371 -0.130458748340606695004240123126 0.00882419999688863719577991417964 +0.0735027015209197970291299384371 0.130458748340606695004240123126 0.00882419999688863719577991417964 +0.07351274974644184112548828125 -0.66212475299835205078125 -0.344508759677410125732421875 +0.07351274974644184112548828125 0.66212475299835205078125 -0.344508759677410125732421875 +0.0735307998955249675354650662484 -0.226300197839736927374332253748 -0.256673890352249134405582253748 +0.0735307998955249675354650662484 0.226300197839736927374332253748 -0.256673890352249134405582253748 +0.0735819004476070404052734375 -0.300946098566055253442641514994 0.162840999662876129150390625 +0.0735819004476070404052734375 0.300946098566055253442641514994 0.162840999662876129150390625 +0.073592253029346466064453125 -0.06603725254535675048828125 0.22961549460887908935546875 +0.073592253029346466064453125 0.06603725254535675048828125 0.22961549460887908935546875 +0.0735949516296386663238848768742 -0.130280104279518110788060880623 -0.0105296999216079704975168596093 +0.0735949516296386663238848768742 0.130280104279518110788060880623 -0.0105296999216079704975168596093 +0.0736346006393432672698651231258 -0.0634576976299285888671875 -0.0234749004244804403140900461722 +0.0736346006393432672698651231258 0.0634576976299285888671875 -0.0234749004244804403140900461722 +0.0736567020416259848891726846887 -0.0289925009012222296977956403907 -0.0611074984073638957648988423443 +0.0736567020416259848891726846887 0.0289925009012222296977956403907 -0.0611074984073638957648988423443 +0.0737319007515907232086505018742 -0.0994258493185043307205361884371 0.0847237497568130437652911268742 +0.0737319007515907232086505018742 0.0994258493185043307205361884371 0.0847237497568130437652911268742 +0.0737441986799240029037960653113 -0.0412033483386039720008930942186 -0.12395189702510833740234375 +0.0737441986799240029037960653113 0.0412033483386039720008930942186 -0.12395189702510833740234375 +0.0737962007522583035568075615629 -0.0264081001281738295127787807814 0.0621025979518890422492738423443 +0.0737962007522583035568075615629 0.0264081001281738295127787807814 0.0621025979518890422492738423443 +0.0738036006689071627517861884371 -0.0977778017520904568771200615629 0.273847800493240367547542746252 +0.0738036006689071627517861884371 0.0977778017520904568771200615629 0.273847800493240367547542746252 +0.0738174021244049072265625 0 0.0674610018730163601974325615629 +0.0738283000886440360366336221887 -0.644179907441139287804787727509 -0.0456286996603012112716513115629 +0.0738283000886440360366336221887 0.644179907441139287804787727509 -0.0456286996603012112716513115629 +0.0738700985908508356292401231258 -0.0485709011554718017578125 0.04673419892787933349609375 +0.0738700985908508356292401231258 0.0485709011554718017578125 0.04673419892787933349609375 +0.0738819003105163629729901231258 -0.0536781013011932428558026231258 0.0407445996999740642219300923443 +0.0738819003105163629729901231258 0.0536781013011932428558026231258 0.0407445996999740642219300923443 +0.0739072024822235162933026231258 -0.142255604267120361328125 0.119587004184722900390625 +0.0739072024822235162933026231258 0.142255604267120361328125 0.119587004184722900390625 +0.0739582479000091552734375 -0.112467598915100094880692438437 0.0661907985806465121170205634371 +0.0739582479000091552734375 0.112467598915100094880692438437 0.0661907985806465121170205634371 +0.074161998927593231201171875 -0.22824524343013763427734375 -0.0700294971466064453125 +0.074161998927593231201171875 0.22824524343013763427734375 -0.0700294971466064453125 +0.07419510185718536376953125 -0.275062558054923966821547764994 -0.203311499953269941842748380623 +0.07419510185718536376953125 0.275062558054923966821547764994 -0.203311499953269941842748380623 +0.0742103993892669761001101846887 -0.281785988807678244860710492503 -0.274024391174316428454460492503 +0.0742103993892669761001101846887 0.281785988807678244860710492503 -0.274024391174316428454460492503 +0.0742182008922099983871945028113 -0.320265048742294278216746761245 0.120091304183006272743305942186 +0.0742182008922099983871945028113 0.320265048742294278216746761245 0.120091304183006272743305942186 +0.07423789799213409423828125 -0.498205956816673345421975227509 -0.220861299335956579037443248126 +0.07423789799213409423828125 0.498205956816673345421975227509 -0.220861299335956579037443248126 +0.0743361525237560272216796875 -0.1399170458316802978515625 -0.312085559964179970471320757497 +0.0743361525237560272216796875 0.1399170458316802978515625 -0.312085559964179970471320757497 +0.074378497898578643798828125 -0.4894255101680755615234375 -0.070216000080108642578125 +0.074378497898578643798828125 0.4894255101680755615234375 -0.070216000080108642578125 +0.07445125281810760498046875 -0.01664149947464466094970703125 0.23807574808597564697265625 +0.07445125281810760498046875 0.01664149947464466094970703125 0.23807574808597564697265625 +0.0744922984391450798691280965613 -0.412850962579250302386668636245 0.7392594516277313232421875 +0.0744922984391450798691280965613 0.412850962579250302386668636245 0.7392594516277313232421875 +0.0744925975799560630141726846887 -0.013256900012493133544921875 0.0653842985630035400390625 +0.0744925975799560630141726846887 0.013256900012493133544921875 0.0653842985630035400390625 +0.0745360519737005150497921590613 -0.947071158885955721729033029987 0 +0.0745360519737005150497921590613 0.947071158885955721729033029987 0 +0.0746000982820987784682742471887 -0.348052507638931307720753238755 -0.8266157805919647216796875 +0.0746000982820987784682742471887 0.348052507638931307720753238755 -0.8266157805919647216796875 +0.0746004015207290538391760037484 -0.229600340127944918533486884371 0.253413656353950467181590511245 +0.0746004015207290538391760037484 0.229600340127944918533486884371 0.253413656353950467181590511245 +0.0746056981384754236419354356258 -0.644571211934089727257912727509 0.0382381999865174307395854214064 +0.0746056981384754236419354356258 0.644571211934089727257912727509 0.0382381999865174307395854214064 +0.0746345996856689480880575615629 -0.176951599121093761102230246252 -0.0558372020721435574630575615629 +0.0746345996856689480880575615629 0.176951599121093761102230246252 -0.0558372020721435574630575615629 +0.0746354021131992312332315009371 -0.507705086469650290759147992503 -0.476093089580535866467414507497 +0.0746354021131992312332315009371 0.507705086469650290759147992503 -0.476093089580535866467414507497 +0.0746595978736877413650674384371 -0.386657190322875987664730246252 0.0701572000980377197265625 +0.0746595978736877413650674384371 0.386657190322875987664730246252 0.0701572000980377197265625 +0.0747840017080306923569210653113 -0.230166006088256824835269753748 0.549027013778686456824118522491 +0.0747840017080306923569210653113 0.230166006088256824835269753748 0.549027013778686456824118522491 +0.0749380499124527033050213731258 -0.391374447941780112536491742503 -0.209069998562335962466463001874 +0.0749380499124527033050213731258 0.391374447941780112536491742503 -0.209069998562335962466463001874 +0.07494080066680908203125 -0.316066408157348655016960492503 0.233421993255615245477230246252 +0.07494080066680908203125 0.316066408157348655016960492503 0.233421993255615245477230246252 +0.074948750436305999755859375 -0.17724125087261199951171875 0.15958775579929351806640625 +0.074948750436305999755859375 0.17724125087261199951171875 0.15958775579929351806640625 +0.0749538004398346002776776231258 -0.0381716012954711955695863423443 -0.0540820002555847181846537807814 +0.0749538004398346002776776231258 0.0381716012954711955695863423443 -0.0540820002555847181846537807814 +0.0749660015106201199630575615629 -0.0594892024993896526008363423443 -0.0290022999048233053043244211722 +0.0749660015106201199630575615629 0.0594892024993896526008363423443 -0.0290022999048233053043244211722 +0.0749881982803344698806924384371 -0.0646575987339019775390625 0.0140058994293212890625 +0.0749881982803344698806924384371 0.0646575987339019775390625 0.0140058994293212890625 +0.074999548494815826416015625 -0.0297335989773273440262002509371 -0.126455551385879522152677623126 +0.074999548494815826416015625 0.0297335989773273440262002509371 -0.126455551385879522152677623126 +0.0750199466943740761459835653113 -0.110832300782203671540848688437 -0.0677362516522407448471554403113 +0.0750199466943740761459835653113 0.110832300782203671540848688437 -0.0677362516522407448471554403113 +0.0750325508415699005126953125 -0.0545138999819755540321430942186 -0.440338951349258433953792746252 +0.0750325508415699005126953125 0.0545138999819755540321430942186 -0.440338951349258433953792746252 +0.075034998357295989990234375 -0.62830698490142822265625 -0.7743380069732666015625 +0.075034998357295989990234375 0.62830698490142822265625 -0.7743380069732666015625 +0.07504110038280487060546875 -0.0696315005421638405502804403113 0.109637099504470827970870061563 +0.07504110038280487060546875 0.0696315005421638405502804403113 0.109637099504470827970870061563 +0.07508075237274169921875 -0.23107625544071197509765625 0.0588787496089935302734375 +0.07508075237274169921875 0.23107625544071197509765625 0.0588787496089935302734375 +0.075105451047420501708984375 -0.155561001598834985903963001874 0.3044009506702423095703125 +0.075105451047420501708984375 0.155561001598834985903963001874 0.3044009506702423095703125 +0.0751887023448944008530148153113 -0.271451103687286365850894753748 -0.103252503275871279631026311563 +0.0751887023448944008530148153113 0.271451103687286365850894753748 -0.103252503275871279631026311563 +0.0751951992511749323089276231258 -0.179280197620391851254240123126 0.0469498008489608806281800923443 +0.0751951992511749323089276231258 0.179280197620391851254240123126 0.0469498008489608806281800923443 +0.0752059489488601656814736884371 -0.105306449532508852873213811563 0.0758590489625930730621661268742 +0.0752059489488601656814736884371 0.105306449532508852873213811563 0.0758590489625930730621661268742 +0.075224697589874267578125 -0.0220112994313240058208425153907 -0.0621026992797851576377787807814 +0.075224697589874267578125 0.0220112994313240058208425153907 -0.0621026992797851576377787807814 +0.07523000240325927734375 -0.86586797237396240234375 0.4945839941501617431640625 +0.07523000240325927734375 0.86586797237396240234375 0.4945839941501617431640625 +0.0752681016921997181334802462516 -0.0324860990047454861739950615629 0.057265698909759521484375 +0.0752681016921997181334802462516 0.0324860990047454861739950615629 0.057265698909759521484375 +0.07527855224907398223876953125 -0.596959266066551141882712272491 0.600394079089164756091179242503 +0.07527855224907398223876953125 0.596959266066551141882712272491 0.600394079089164756091179242503 +0.0752795994281768854339276231258 -0.04656510055065155029296875 -0.04652599990367889404296875 +0.0752795994281768854339276231258 0.04656510055065155029296875 -0.04652599990367889404296875 +0.0752842515707015935699786268742 -0.0670456498861312782944210653113 -0.111072751879692080412276311563 +0.0752842515707015935699786268742 0.0670456498861312782944210653113 -0.111072751879692080412276311563 +0.0752983987331390380859375 -0.160299801826477072985710492503 -0.0929199993610382163344851846887 +0.0752983987331390380859375 0.160299801826477072985710492503 -0.0929199993610382163344851846887 +0.0753041028976440540709802462516 -0.0647409975528717013260049384371 -0.0117430999875068678428569057814 +0.0753041028976440540709802462516 0.0647409975528717013260049384371 -0.0117430999875068678428569057814 +0.0753444015979766873458700615629 -0.0547403991222381591796875 -0.176993596553802506887720369377 +0.0753444015979766873458700615629 0.0547403991222381591796875 -0.176993596553802506887720369377 +0.0754097968339920016189736884371 -0.153105604648590076788394753748 -0.575214600563049294201789507497 +0.0754097968339920016189736884371 0.153105604648590076788394753748 -0.575214600563049294201789507497 +0.0755006968975067138671875 -0.0397704005241394029090962192186 0.287607300281524647100894753748 +0.0755006968975067138671875 0.0397704005241394029090962192186 0.287607300281524647100894753748 +0.07550279796123504638671875 -0.0916380017995834378341513115629 -0.0916613996028900063217648153113 +0.07550279796123504638671875 0.0916380017995834378341513115629 -0.0916613996028900063217648153113 +0.075537502765655517578125 -0.4907414913177490234375 0.0588789992034435272216796875 +0.075537502765655517578125 0.4907414913177490234375 0.0588789992034435272216796875 +0.0756917975842952700515908759371 -0.018288449384272098541259765625 -0.44321130216121673583984375 +0.0756917975842952700515908759371 0.018288449384272098541259765625 -0.44321130216121673583984375 +0.075818002223968505859375 -0.10482120513916015625 0.152525794506073009149105246252 +0.075818002223968505859375 0.10482120513916015625 0.152525794506073009149105246252 +0.0758463986217975533188351278113 -0.684970992803573541785056022491 0.122726096212863913792467940311 +0.0758463986217975533188351278113 0.684970992803573541785056022491 0.122726096212863913792467940311 +0.0758567959070205605209835653113 -0.0179629504680633537982981096093 -0.128152495622634893246427623126 +0.0758567959070205605209835653113 0.0179629504680633537982981096093 -0.128152495622634893246427623126 +0.0758735999464988791762820596887 0 0.544741448760032720421975227509 +0.075957000255584716796875 -0.0551855027675628717620526231258 -0.034425199031829833984375 +0.075957000255584716796875 0.0551855027675628717620526231258 -0.034425199031829833984375 +0.0759881973266601645766726846887 -0.135781395435333268606470369377 -0.125654995441436767578125 +0.0759881973266601645766726846887 0.135781395435333268606470369377 -0.125654995441436767578125 +0.0759977973997593009292117471887 -0.233900105953216558285490123126 0.865745079517364568566506477509 +0.0759977973997593009292117471887 0.233900105953216558285490123126 0.865745079517364568566506477509 +0.07600200176239013671875 -0.363441610336303677630809261245 0.471310794353485107421875 +0.07600200176239013671875 0.363441610336303677630809261245 0.471310794353485107421875 +0.0760083526372909573654013115629 -0.233925999701023124011101117503 -0.491936489939689691741619981258 +0.0760083526372909573654013115629 0.233925999701023124011101117503 -0.491936489939689691741619981258 +0.0760093510150909451583700615629 -0.0399603009223937974403462192186 0.122986802458763117007478626874 +0.0760093510150909451583700615629 0.0399603009223937974403462192186 0.122986802458763117007478626874 +0.0760094508528709467132244981258 -0.52308024466037750244140625 -0.152018344402313237972990123126 +0.0760094508528709467132244981258 0.52308024466037750244140625 -0.152018344402313237972990123126 +0.0760097980499267605880575615629 -0.154010707139968866519197376874 -0.245973908901214594058259876874 +0.0760097980499267605880575615629 0.154010707139968866519197376874 -0.245973908901214594058259876874 +0.0760406970977783314147302462516 -0.0649447023868560818771200615629 0 +0.0760406970977783314147302462516 0.0649447023868560818771200615629 0 +0.0760676980018615694900674384371 -0.169352406263351434878572376874 0.2356553971767425537109375 +0.0760676980018615694900674384371 0.169352406263351434878572376874 0.2356553971767425537109375 +0.0761431992053985678969851846887 -0.16542160511016845703125 0.0826914012432098388671875 +0.0761431992053985678969851846887 0.16542160511016845703125 0.0826914012432098388671875 +0.0762624025344848660568075615629 -0.104498398303985606805355246252 -0.152525794506073009149105246252 +0.0762624025344848660568075615629 0.104498398303985606805355246252 -0.152525794506073009149105246252 +0.0762696027755737360198651231258 -0.0383610993623733562141175923443 0.0520708978176116984992738423443 +0.0762696027755737360198651231258 0.0383610993623733562141175923443 0.0520708978176116984992738423443 +0.0762850463390350314041299384371 -0.00619469974189996736707586322268 -0.129004803299903852975560880623 +0.0762850463390350314041299384371 0.00619469974189996736707586322268 -0.129004803299903852975560880623 +0.0763090014457702692229901231258 -0.0151546001434326171875 -0.0628274023532867514907351846887 +0.0763090014457702692229901231258 0.0151546001434326171875 -0.0628274023532867514907351846887 +0.0763192534446716225327023153113 -0.123776248097419730442858565311 0.0368080504238605457634214701557 +0.0763192534446716225327023153113 0.123776248097419730442858565311 0.0368080504238605457634214701557 +0.07633499801158905029296875 -0.924302995204925537109375 0.3739480078220367431640625 +0.07633499801158905029296875 0.924302995204925537109375 0.3739480078220367431640625 +0.0763521522283553966126135037484 -0.327295145392417885510383257497 -0.0977151036262512151520098768742 +0.0763521522283553966126135037484 0.327295145392417885510383257497 -0.0977151036262512151520098768742 +0.076376996934413909912109375 -0.816227972507476806640625 -0.572660028934478759765625 +0.076376996934413909912109375 0.816227972507476806640625 -0.572660028934478759765625 +0.076403200626373291015625 -0.149876797199249262027009876874 0.108164203166961681024105246252 +0.076403200626373291015625 0.149876797199249262027009876874 0.108164203166961681024105246252 +0.0764042973518371526520098768742 -0.235152000188827509097322376874 0.169899898767471302374332253748 +0.0764042973518371526520098768742 0.235152000188827509097322376874 0.169899898767471302374332253748 +0.0764108955860137856186398153113 -0.0802130967378616305252236884371 -0.278795993328094460217414507497 +0.0764108955860137856186398153113 0.0802130967378616305252236884371 -0.278795993328094460217414507497 +0.07648800313472747802734375 -0.2354042530059814453125 -0.0351339988410472869873046875 +0.07648800313472747802734375 0.2354042530059814453125 -0.0351339988410472869873046875 +0.0765073478221893338302450615629 -0.122628146409988397769197376874 -0.0401119485497474642654580634371 +0.0765073478221893338302450615629 0.122628146409988397769197376874 -0.0401119485497474642654580634371 +0.0765261016786098480224609375 -0.386713582277297962530582253748 0.578442895412444979541533029987 +0.0765261016786098480224609375 0.386713582277297962530582253748 0.578442895412444979541533029987 +0.0765367984771728598891726846887 -0.184775805473327642269865123126 0 +0.0765367984771728598891726846887 0.184775805473327642269865123126 0 +0.0765855014324188232421875 -0.0607475996017456110198651231258 0.0210804000496864346603231865629 +0.0765855014324188232421875 0.0607475996017456110198651231258 0.0210804000496864346603231865629 +0.0766003012657165555099325615629 -0.050629198551177978515625 -0.0396117001771926907638388115629 +0.0766003012657165555099325615629 0.050629198551177978515625 -0.0396117001771926907638388115629 +0.0766045987606048667251101846887 -0.183248794078826909847990123126 0.0234861999750137356857138115629 +0.0766045987606048667251101846887 0.183248794078826909847990123126 0.0234861999750137356857138115629 +0.07662265002727508544921875 -0.322682741284370411261051003748 -0.559021434187889076916633257497 +0.07662265002727508544921875 0.322682741284370411261051003748 -0.559021434187889076916633257497 +0.0766310989856719970703125 -0.0198385000228881863693075615629 0.0611073017120361342002787807814 +0.0766310989856719970703125 0.0198385000228881863693075615629 0.0611073017120361342002787807814 +0.0766413986682891873458700615629 -0.182596397399902354852230246252 -0.028011798858642578125 +0.0766413986682891873458700615629 0.182596397399902354852230246252 -0.028011798858642578125 +0.0766485035419464111328125 -0.076301753520965576171875 -0.22539524734020233154296875 +0.0766485035419464111328125 0.076301753520965576171875 -0.22539524734020233154296875 +0.0766910970211029108245526231258 -0.00660419985651969961709673029304 0.0638346016407013022719851846887 +0.0766910970211029108245526231258 0.00660419985651969961709673029304 0.0638346016407013022719851846887 +0.076715998351573944091796875 -0.236108243465423583984375 0.0294547490775585174560546875 +0.076715998351573944091796875 0.236108243465423583984375 0.0294547490775585174560546875 +0.0768523991107940701583700615629 -0.391540789604187033923210492503 -0.02809999883174896240234375 +0.0768523991107940701583700615629 0.391540789604187033923210492503 -0.02809999883174896240234375 +0.076870501041412353515625 -0.70203597843647003173828125 -0.252461247146129608154296875 +0.076870501041412353515625 0.70203597843647003173828125 -0.252461247146129608154296875 +0.07688610255718231201171875 -0.0786160469055175725738848768742 0.102019947767257687654129938437 +0.07688610255718231201171875 0.0786160469055175725738848768742 0.102019947767257687654129938437 +0.0769129514694213839431924384371 -0.104066249728202817048661188437 -0.0758590489625930730621661268742 +0.0769129514694213839431924384371 0.104066249728202817048661188437 -0.0758590489625930730621661268742 +0.0769779980182647705078125 -0.3037360012531280517578125 -0.38963949680328369140625 +0.0769779980182647705078125 0.3037360012531280517578125 -0.38963949680328369140625 +0.0769804000854492076477697537484 -0.627758610248565607214743522491 0.299987798929214455334602007497 +0.0769804000854492076477697537484 0.627758610248565607214743522491 0.299987798929214455334602007497 +0.0769998028874397250076455634371 -0.0559436000883579212517027201557 0.844654345512390158923210492503 +0.0769998028874397250076455634371 0.0559436000883579212517027201557 0.844654345512390158923210492503 +0.077003002166748046875 -0.0394542008638381971885600307814 -0.180316197872161881887720369377 +0.077003002166748046875 0.0394542008638381971885600307814 -0.180316197872161881887720369377 +0.0770147971808910342117471259371 -0.415744650363922108038394753748 -0.154029151797294622250333873126 +0.0770147971808910342117471259371 0.415744650363922108038394753748 -0.154029151797294622250333873126 +0.0770161986351013266860476846887 -0.03167720139026641845703125 -0.055362999439239501953125 +0.0770161986351013266860476846887 0.03167720139026641845703125 -0.055362999439239501953125 +0.0770214974880218533614950615629 -0.0082240998744964599609375 -0.0632459998130798367599325615629 +0.0770214974880218533614950615629 0.0082240998744964599609375 -0.0632459998130798367599325615629 +0.0770363505929708425323809706242 -0.1252993531525135040283203125 -0.83717690408229827880859375 +0.0770363505929708425323809706242 0.1252993531525135040283203125 -0.83717690408229827880859375 +0.0770436018705367986481036268742 -0.276575696468353282586605246252 0.0870068997144699124435263115629 +0.0770436018705367986481036268742 0.276575696468353282586605246252 0.0870068997144699124435263115629 +0.0771529972553253173828125 -0.13810299336910247802734375 -0.193584501743316650390625 +0.0771529972553253173828125 0.13810299336910247802734375 -0.193584501743316650390625 +0.077158249914646148681640625 -0.12981350719928741455078125 0.1992362439632415771484375 +0.077158249914646148681640625 0.12981350719928741455078125 0.1992362439632415771484375 +0.077166497707366943359375 -0.0610922992229461711555238423443 -0.01769340038299560546875 +0.077166497707366943359375 0.0610922992229461711555238423443 -0.01769340038299560546875 +0.077199399471282958984375 -0.0266510009765625020816681711722 0.182564997673034690173210492503 +0.077199399471282958984375 0.0266510009765625020816681711722 0.182564997673034690173210492503 +0.077211201190948486328125 -0.391770410537719770971420985006 0.0235436007380485541606862653907 +0.077211201190948486328125 0.391770410537719770971420985006 0.0235436007380485541606862653907 +0.0772499009966850225250567518742 -0.662337881326675370630141514994 0.212933695316314675061164507497 +0.0772499009966850225250567518742 0.662337881326675370630141514994 0.212933695316314675061164507497 +0.07725425064563751220703125 -0.23776400089263916015625 0 +0.07725425064563751220703125 0.23776400089263916015625 0 +0.0772832989692688043792401231258 0 -0.0634609997272491538344851846887 +0.0773765988647937691391476278113 -0.0562166519463062272499165317186 -0.336678642034530628546207253748 +0.0773765988647937691391476278113 0.0562166519463062272499165317186 -0.336678642034530628546207253748 +0.0774221509695053183852664346887 -0.515219235420227072985710492503 0.38865776360034942626953125 +0.0774221509695053183852664346887 0.515219235420227072985710492503 0.38865776360034942626953125 +0.0774240016937255970397302462516 -0.451398420333862349096420985006 -0.655930423736572287829460492503 +0.0774240016937255970397302462516 0.451398420333862349096420985006 -0.655930423736572287829460492503 +0.0774290978908538790603799384371 -0.0562548011541366549392861884371 -0.115499398112297049778796065311 +0.0774290978908538790603799384371 0.0562548011541366549392861884371 -0.115499398112297049778796065311 +0.0774327993392944363693075615629 -0.0664677977561950739104901231258 0.172006404399871831722990123126 +0.0774327993392944363693075615629 0.0664677977561950739104901231258 0.172006404399871831722990123126 +0.077494204044342041015625 -0.50634419918060302734375 -0.312426602840423561779914507497 +0.077494204044342041015625 0.50634419918060302734375 -0.312426602840423561779914507497 +0.0775698006153106717208700615629 -0.0427132010459899957854901231258 0.0464598000049591119964276231258 +0.0775698006153106717208700615629 0.0427132010459899957854901231258 0.0464598000049591119964276231258 +0.0776629984378814780532351846887 -0.0564252018928527859786825615629 0.028011798858642578125 +0.0776629984378814780532351846887 0.0564252018928527859786825615629 0.028011798858642578125 +0.0776669979095458984375 -0.131328999996185302734375 0.476152002811431884765625 +0.0776669979095458984375 0.131328999996185302734375 0.476152002811431884765625 +0.0778382003307342557052450615629 -0.0403349012136459406097088731258 -0.0481072992086410550216513115629 +0.0778382003307342557052450615629 0.0403349012136459406097088731258 -0.0481072992086410550216513115629 +0.0779288530349731417556924384371 -0.656684511899948142321647992503 -0.53403373062610626220703125 +0.0779288530349731417556924384371 0.656684511899948142321647992503 -0.53403373062610626220703125 +0.0779506012797355624099893134371 -0.331169295310974109991519753748 0.0821621514856815254868038778113 +0.0779506012797355624099893134371 0.331169295310974109991519753748 0.0821621514856815254868038778113 +0.07803274691104888916015625 -0.20678575336933135986328125 -0.116835750639438629150390625 +0.07803274691104888916015625 0.20678575336933135986328125 -0.116835750639438629150390625 +0.07808174751698970794677734375 -0.5620732605457305908203125 0.490385234355926513671875 +0.07808174751698970794677734375 0.5620732605457305908203125 0.490385234355926513671875 +0.0781206011772155872741052462516 -0.02381519973278045654296875 -0.182564997673034690173210492503 +0.0781206011772155872741052462516 0.02381519973278045654296875 -0.182564997673034690173210492503 +0.078123502433300018310546875 -0.0567594975233077989051899692186 -0.693307298421859674597556022491 +0.078123502433300018310546875 0.0567594975233077989051899692186 -0.693307298421859674597556022491 +0.0781396023929118999085119412484 -0.0281998511403799036190154225778 -0.3399983942508697509765625 +0.0781396023929118999085119412484 0.0281998511403799036190154225778 -0.3399983942508697509765625 +0.0781531512737274197677450615629 -0.020028300583362579345703125 0.126455247402191162109375 +0.0781531512737274197677450615629 0.020028300583362579345703125 0.126455247402191162109375 +0.0782051980495452880859375 -0.0619239985942840603927450615629 0.00702629983425140380859375 +0.0782051980495452880859375 0.0619239985942840603927450615629 0.00702629983425140380859375 +0.0782108008861541748046875 -0.154360795021057151110710492503 0.360632395744323763775440738755 +0.0782108008861541748046875 0.154360795021057151110710492503 0.360632395744323763775440738755 +0.078217498958110809326171875 -0.4938440024852752685546875 0 +0.078217498958110809326171875 -0.18734599649906158447265625 0.145888745784759521484375 +0.078217498958110809326171875 0.18734599649906158447265625 0.145888745784759521484375 +0.078217498958110809326171875 0.4938440024852752685546875 0 +0.0782294988632202259459802462516 -0.0262659013271331794048268903907 0.0564822971820831340461488423443 +0.0782294988632202259459802462516 0.0262659013271331794048268903907 0.0564822971820831340461488423443 +0.07830074988305568695068359375 -0.72927676141262054443359375 -0.15660224854946136474609375 +0.07830074988305568695068359375 0.72927676141262054443359375 -0.15660224854946136474609375 +0.0783037006855011041839276231258 -0.0619184017181396498252787807814 -0.00588660016655922005424095289072 +0.0783037006855011041839276231258 0.0619184017181396498252787807814 -0.00588660016655922005424095289072 +0.0783051013946533258636151231258 0 0.0621958017349243177940287807814 +0.0783105015754699818053552462516 -0.0517967998981475885589276231258 0.0344173997640609755088725307814 +0.0783105015754699818053552462516 0.0517967998981475885589276231258 0.0344173997640609755088725307814 +0.0783110022544860895354901231258 -0.151729404926300048828125 -0.104142200946807872430355246252 +0.0783110022544860895354901231258 0.151729404926300048828125 -0.104142200946807872430355246252 +0.0783748537302017128647335653113 -0.12789599597454071044921875 0 +0.0783748537302017128647335653113 0.12789599597454071044921875 0 +0.0783782981336116763015908759371 -0.337401455640792879986378238755 0.287257960438728365826221988755 +0.0783782981336116763015908759371 0.337401455640792879986378238755 0.287257960438728365826221988755 +0.0783818006515502874176348768742 0 -0.695597696304321222449118522491 +0.0783944010734557994446447537484 0 -0.341107544302940324243422764994 +0.0784135997295379721938601846887 -0.7062664031982421875 -0.367476010322570822985710492503 +0.0784135997295379721938601846887 0.7062664031982421875 -0.367476010322570822985710492503 +0.078459002077579498291015625 -0.9969170093536376953125 0 +0.078459002077579498291015625 0.9969170093536376953125 0 +0.0784657001495361328125 -0.0468427002429962213714276231258 0.0406066000461578410773988423443 +0.0784657001495361328125 0.0468427002429962213714276231258 0.0406066000461578410773988423443 +0.0785025022923946380615234375 -0.241602011024951934814453125 -0.7056667506694793701171875 +0.0785025022923946380615234375 0.2416027486324310302734375 -0.7056667506694793701171875 +0.07852350175380706787109375 -0.126586648821830738409488503748 0.0176024995744228363037109375 +0.07852350175380706787109375 0.126586648821830738409488503748 0.0176024995744228363037109375 +0.0785269975662231528579226846887 -0.156768000125885015316740123126 0.0962145984172821100433026231258 +0.0785269975662231528579226846887 0.156768000125885015316740123126 0.0962145984172821100433026231258 +0.0785336993634700719635333143742 -0.0922229051589965737045773153113 0.6894398033618927001953125 +0.0785336993634700719635333143742 0.0922229051589965737045773153113 0.6894398033618927001953125 +0.078574001789093017578125 -0.188364398479461681024105246252 -0.344013190269470248150440738755 +0.078574001789093017578125 0.188364398479461681024105246252 -0.344013190269470248150440738755 +0.0785926491022109902084835653113 -0.126026549935340875796541126874 -0.0209881491959094980404021413278 +0.0785926491022109902084835653113 0.126026549935340875796541126874 -0.0209881491959094980404021413278 +0.0785932004451751764495526231258 -0.3313767910003662109375 -0.209791994094848638363615123126 +0.0785932004451751764495526231258 0.3313767910003662109375 -0.209791994094848638363615123126 +0.0785939991474151611328125 -0.241890750825405120849609375 0.70555798709392547607421875 +0.0785939991474151611328125 0.241890750825405120849609375 0.70555798709392547607421875 +0.0786261975765228382506677462516 -0.0571247994899749811370526231258 -0.0235514998435974141910431711722 +0.0786261975765228382506677462516 0.0571247994899749811370526231258 -0.0235514998435974141910431711722 +0.078642003238201141357421875 -0.08138175308704376220703125 0.2229180037975311279296875 +0.078642003238201141357421875 0.08138175308704376220703125 0.2229180037975311279296875 +0.078682601451873779296875 -0.00813480019569397076739658558608 -0.183692395687103271484375 +0.078682601451873779296875 0.00813480019569397076739658558608 -0.183692395687103271484375 +0.0786907032132148770431356865629 -0.475709846615791354107471988755 0.264590702950954437255859375 +0.0786907032132148770431356865629 0.475709846615791354107471988755 0.264590702950954437255859375 +0.0787103980779647743881710653113 -0.0817654520273208562652911268742 -0.0980769038200378362457598768742 +0.0787103980779647743881710653113 0.0817654520273208562652911268742 -0.0980769038200378362457598768742 +0.0787276983261108453948651231258 -0.0247320994734764112998881557814 -0.0564823985099792494346537807814 +0.0787276983261108453948651231258 0.0247320994734764112998881557814 -0.0564823985099792494346537807814 +0.0787445481866598101516885321871 -0.367388758063316334112613503748 -0.87253887951374053955078125 +0.0787445481866598101516885321871 0.367388758063316334112613503748 -0.87253887951374053955078125 +0.0787551015615463173569210653113 -0.118516650795936581697098688437 0.0474491983652114840408486884371 +0.0787551015615463173569210653113 0.118516650795936581697098688437 0.0474491983652114840408486884371 +0.0787572026252746498764523153113 -0.282485103607177712170539507497 -0.0632412001490592901031817518742 +0.0787572026252746498764523153113 0.282485103607177712170539507497 -0.0632412001490592901031817518742 +0.0788216039538383594909021212516 -0.361138260364532504009815738755 0.407266756892204317974659488755 +0.0788216039538383594909021212516 0.361138260364532504009815738755 0.407266756892204317974659488755 +0.0788471996784210205078125 -0.498485398292541459497329014994 0.324492609500884987561164507497 +0.0788471996784210205078125 0.498485398292541459497329014994 0.324492609500884987561164507497 +0.0788595020771026555816973768742 0 0.127597796916961658819644753748 +0.078860700130462646484375 -0.242703598737716658151342130623 -0.15772140026092529296875 +0.078860700130462646484375 0.242703598737716658151342130623 -0.15772140026092529296875 +0.0788659989833831870376101846887 -0.242728400230407731497095369377 0.307998800277709983141960492503 +0.0788659989833831870376101846887 0.242728400230407731497095369377 0.307998800277709983141960492503 +0.0788741983473301017104617471887 -0.437136313319206271099659488755 0.782745301723480224609375 +0.0788741983473301017104617471887 0.437136313319206271099659488755 0.782745301723480224609375 +0.0789001494646072304428585653113 -0.0924279958009719820877236884371 0.328225094079971302374332253748 +0.0789001494646072304428585653113 0.0924279958009719820877236884371 0.328225094079971302374332253748 +0.0790123522281646756271200615629 -0.146187002956867234670923494377 0.418193989992141745837272992503 +0.0790123522281646756271200615629 0.146187002956867234670923494377 0.418193989992141745837272992503 +0.0790135540068149649917117471887 -0.529065912961959927685029470013 0.127850799262523656674161998126 +0.0790135540068149649917117471887 0.529065912961959927685029470013 0.127850799262523656674161998126 +0.0790386021137237659850427462516 -0.114890801906585696134932561563 0.143363201618194574527009876874 +0.0790386021137237659850427462516 0.114890801906585696134932561563 0.143363201618194574527009876874 +0.0790510497987270410735760606258 -0.243289795517921458856136496252 -0.370217692852020274774105246252 +0.0790510497987270410735760606258 0.243289795517921458856136496252 -0.370217692852020274774105246252 +0.0790572464466094970703125 -0.1767752468585968017578125 -0.15811525285243988037109375 +0.0790572464466094970703125 0.1767752468585968017578125 -0.15811525285243988037109375 +0.0790661990642547718444177462516 -0.0131654992699623118318497105861 0.0597931027412414578536825615629 +0.0790661990642547718444177462516 0.0131654992699623118318497105861 0.0597931027412414578536825615629 +0.0791268020868301363845986884371 -0.401763582229614224505809261245 -0.438548398017883311883480246252 +0.0791268020868301363845986884371 0.401763582229614224505809261245 -0.438548398017883311883480246252 +0.0791406027972698239425497490629 -0.243574102222919475213558371252 0.486732390522956914757912727509 +0.0791406027972698239425497490629 0.243574102222919475213558371252 0.486732390522956914757912727509 +0.0791967004537582341949786268742 -0.203691297769546503237947376874 -0.205518293380737293585269753748 +0.0791967004537582341949786268742 0.203691297769546503237947376874 -0.205518293380737293585269753748 +0.0792410999536514309982138115629 -0.0856705516576766884506710653113 0.09424124658107757568359375 +0.0792410999536514309982138115629 0.0856705516576766884506710653113 0.09424124658107757568359375 +0.0793166518211364662827023153113 -0.337351346015930142474559261245 -0.04902064800262451171875 +0.0793166518211364662827023153113 0.337351346015930142474559261245 -0.04902064800262451171875 +0.079369999468326568603515625 -0.3519890010356903076171875 0.34612751007080078125 +0.079369999468326568603515625 0.3519890010356903076171875 0.34612751007080078125 +0.0794030964374542180816973768742 -0.117417445778846732395983565311 -0.049074299633502960205078125 +0.0794030964374542180816973768742 0.117417445778846732395983565311 -0.049074299633502960205078125 +0.0794171988964080810546875 -0.0445358991622924818565287807814 -0.04134570062160491943359375 +0.0794171988964080810546875 0.0445358991622924818565287807814 -0.04134570062160491943359375 +0.0794557988643646295745526231258 -0.0322522997856140164474325615629 0.0514447987079620361328125 +0.0794557988643646295745526231258 0.0322522997856140164474325615629 0.0514447987079620361328125 +0.0794997520744800678649255587516 -0.507054886221885769970185720013 0.197674395143985770495476117503 +0.0794997520744800678649255587516 0.507054886221885769970185720013 0.197674395143985770495476117503 +0.0795074000954627962967080634371 -0.693732208013534523693977007497 -0.0491385996341705266754473768742 +0.0795074000954627962967080634371 0.693732208013534523693977007497 -0.0491385996341705266754473768742 +0.07952535152435302734375 -0.0501205489039421095420756557814 0.116891553997993460911608565311 +0.07952535152435302734375 0.0501205489039421095420756557814 0.116891553997993460911608565311 +0.0795581996440887367905148153113 -0.284346592426300059930355246252 0.05308020114898681640625 +0.0795581996440887367905148153113 0.284346592426300059930355246252 0.05308020114898681640625 +0.0796184957027435274978799384371 -0.11585520207881927490234375 0.2650254070758819580078125 +0.0796184957027435274978799384371 0.11585520207881927490234375 0.2650254070758819580078125 +0.0796696968376636588393679971887 -0.441656050086021434442073996252 -0.317951145768165632787827235006 +0.0796696968376636588393679971887 0.441656050086021434442073996252 -0.317951145768165632787827235006 +0.0796938002109527643401776231258 -0.0907970011234283530532351846887 -0.159388804435730002673210492503 +0.0796938002109527643401776231258 0.0907970011234283530532351846887 -0.159388804435730002673210492503 +0.0797067023813724517822265625 -0.632074517011642522668068977509 0.635711377859115578381477007497 +0.0797067023813724517822265625 0.632074517011642522668068977509 0.635711377859115578381477007497 +0.079743802547454833984375 -0.0529129981994628934005575615629 -0.0290022999048233053043244211722 +0.079743802547454833984375 0.0529129981994628934005575615629 -0.0290022999048233053043244211722 +0.0797919474542140849671056912484 -0.0231146994978189447567107350778 0.3399983942508697509765625 +0.0797919474542140849671056912484 0.0231146994978189447567107350778 0.3399983942508697509765625 +0.07981359958648681640625 -0.330842804908752452508480246252 0.210173201560974132195980246252 +0.07981359958648681640625 0.330842804908752452508480246252 0.210173201560974132195980246252 +0.0798360489308834048172158759371 -0.245714694261550875564736884371 0.236115258932113630807592130623 +0.0798360489308834048172158759371 0.245714694261550875564736884371 0.236115258932113630807592130623 +0.0798513025045394925216513115629 -0.245761495828628523385717130623 0.152397608757019048519865123126 +0.0798513025045394925216513115629 0.245761495828628523385717130623 0.152397608757019048519865123126 +0.079898498952388763427734375 -0.3789649903774261474609375 -0.3162305057048797607421875 +0.079898498952388763427734375 0.3789649903774261474609375 -0.3162305057048797607421875 +0.0799542009830474798004473768742 -0.117846000194549549444644753748 0.58285439014434814453125 +0.0799542009830474798004473768742 0.117846000194549549444644753748 0.58285439014434814453125 +0.07996650226414203643798828125 -0.54396973550319671630859375 -0.5100997388362884521484375 +0.07996650226414203643798828125 0.54396973550319671630859375 -0.5100997388362884521484375 +0.07998450100421905517578125 -0.0329939983785152435302734375 0.4924570024013519287109375 +0.07998450100421905517578125 0.0329939983785152435302734375 0.4924570024013519287109375 +0.0799880981445312555511151231258 -0.0179592996835708611225168596093 -0.0572658002376556438117738423443 +0.0799880981445312555511151231258 0.0179592996835708611225168596093 -0.0572658002376556438117738423443 +0.0800242006778717068771200615629 -0.0339116990566253675987162807814 -0.0494583010673523004729901231258 +0.0800242006778717068771200615629 0.0339116990566253675987162807814 -0.0494583010673523004729901231258 +0.0800383493304252513489416287484 -0.338237547874450650287059261245 0.0411008499562740270416583143742 +0.0800383493304252513489416287484 0.338237547874450650287059261245 0.0411008499562740270416583143742 +0.0800904527306556812682458712516 -0.103085947781801232081555497189 -0.5342831909656524658203125 +0.0800904527306556812682458712516 0.103085947781801232081555497189 -0.5342831909656524658203125 +0.0800988972187042236328125 -0.0581950008869171198089276231258 0.0140535995364189161827006557814 +0.0800988972187042236328125 0.0581950008869171198089276231258 0.0140535995364189161827006557814 +0.080128498375415802001953125 -0.1807934939861297607421875 -0.4592309892177581787109375 +0.080128498375415802001953125 0.1807934939861297607421875 -0.4592309892177581787109375 +0.0801674991846084566970986884371 -0.401816260814666759149105246252 0.186055652797222137451171875 +0.0801674991846084566970986884371 0.401816260814666759149105246252 0.186055652797222137451171875 +0.08020450174808502197265625 -0.0331977494060993194580078125 0.2344464957714080810546875 +0.08020450174808502197265625 0.0331977494060993194580078125 0.2344464957714080810546875 +0.0802198972553014727493447821871 -0.246894556283950794561832253748 0.913842028379440285412727007497 +0.0802198972553014727493447821871 0.246894556283950794561832253748 0.913842028379440285412727007497 +0.080227352678775787353515625 -0.423333907127380393298210492503 0.129815094172954559326171875 +0.080227352678775787353515625 0.423333907127380393298210492503 0.129815094172954559326171875 +0.0803384006023407093444177462516 -0.0583688974380493219573651231258 -0.0117818996310234073293665701954 +0.0803384006023407093444177462516 0.0583688974380493219573651231258 -0.0117818996310234073293665701954 +0.0803445979952812083801916287484 -0.694153612852096535412727007497 0.0411795999854803057571572821871 +0.0803445979952812083801916287484 0.694153612852096535412727007497 0.0411795999854803057571572821871 +0.0804731011390686090667401231258 -0.04844360053539276123046875 -0.0343118011951446533203125 +0.0804731011390686090667401231258 0.04844360053539276123046875 -0.0343118011951446533203125 +0.08052749931812286376953125 -0.21496175229549407958984375 0.099029250442981719970703125 +0.08052749931812286376953125 0.21496175229549407958984375 0.099029250442981719970703125 +0.0805420517921447698395098768742 -0.046148099005222320556640625 -0.117827546596527096833817438437 +0.0805420517921447698395098768742 0.046148099005222320556640625 -0.117827546596527096833817438437 +0.08056700229644775390625 -0.123836004734039314967297684689 -0.134809601306915299856470369377 +0.08056700229644775390625 0.123836004734039314967297684689 -0.134809601306915299856470369377 +0.0806136041879653847397335653113 -0.28819620609283447265625 -0.02107889950275421142578125 +0.0806136041879653847397335653113 0.28819620609283447265625 -0.02107889950275421142578125 +0.0806707978248596274672976846887 0 0.183008801937103282586605246252 +0.0807208001613616971114950615629 -0.0915584027767181451995526231258 -0.3809216022491455078125 +0.0807208001613616971114950615629 0.0915584027767181451995526231258 -0.3809216022491455078125 +0.0807375043630600003341513115629 -0.112415099143981928042634876874 0.0578299507498741122146768134371 +0.0807375043630600003341513115629 0.112415099143981928042634876874 0.0578299507498741122146768134371 +0.0808471977710723960219851846887 -0.0110382996499538421630859375 -0.0578091025352478055099325615629 +0.0808471977710723960219851846887 0.0110382996499538421630859375 -0.0578091025352478055099325615629 +0.0808620035648345975021200615629 -0.288356405496597301141292746252 0.0176598004996776566932759067186 +0.0808620035648345975021200615629 0.288356405496597301141292746252 0.0176598004996776566932759067186 +0.0808900505304336464584835653113 -0.09518609941005706787109375 -0.0830446511507034329513388115629 +0.0808900505304336464584835653113 0.09518609941005706787109375 -0.0830446511507034329513388115629 +0.080901801586151123046875 -0.0587782979011535686164613423443 0 +0.080901801586151123046875 0.0587782979011535686164613423443 0 +0.0809177994728088462172976846887 -0.169605195522308349609375 -0.0684574007987976129729901231258 +0.0809177994728088462172976846887 0.169605195522308349609375 -0.0684574007987976129729901231258 +0.0809270977973938071547976846887 -0.0196410998702049276187775461722 0.0553628027439117473273988423443 +0.0809270977973938071547976846887 0.0196410998702049276187775461722 0.0553628027439117473273988423443 +0.0809338986873626708984375 -0.0366025000810623196700888115629 0.0459342986345291151573100307814 +0.0809338986873626708984375 0.0366025000810623196700888115629 0.0459342986345291151573100307814 +0.0809391975402832114516726846887 -0.00659879967570304887952703509768 0.0583549976348876967002787807814 +0.0809391975402832114516726846887 0.00659879967570304887952703509768 0.0583549976348876967002787807814 +0.080986797809600830078125 -0.543497407436370871813835492503 -0.240939599275588972604467130623 +0.080986797809600830078125 0.543497407436370871813835492503 -0.240939599275588972604467130623 +0.0810002982616424560546875 -0.184635597467422474249332253748 0.222145807743072493112279630623 +0.0810002982616424560546875 0.184635597467422474249332253748 0.222145807743072493112279630623 +0.0810160018503666007338992471887 -0.249346506595611583367855246252 0.594779264926910467004006477509 +0.0810160018503666007338992471887 0.249346506595611583367855246252 0.594779264926910467004006477509 +0.0810504019260406410873898153113 -0.133185303211212163754240123126 -0.256305295228958118780582253748 +0.0810504019260406410873898153113 0.133185303211212163754240123126 -0.256305295228958118780582253748 +0.0811084516346454592605752509371 -0.249630752205848710501001619377 0.365521037578582785876335492503 +0.0811084516346454592605752509371 0.249630752205848710501001619377 0.365521037578582785876335492503 +0.08118174970149993896484375 -0.1966075003147125244140625 0.13135825097560882568359375 +0.08118174970149993896484375 0.1966075003147125244140625 0.13135825097560882568359375 +0.0812132000923156821547976846887 -0.3564012050628662109375 -0.162426805496215825863615123126 +0.0812132000923156821547976846887 0.3564012050628662109375 -0.162426805496215825863615123126 +0.08122800290584564208984375 -0.24999749660491943359375 0.425327003002166748046875 +0.08122800290584564208984375 0.24999749660491943359375 0.425327003002166748046875 +0.0812329530715942410568075615629 -0.0923177987337112371246661268742 0.0858988523483276283920773153113 +0.0812329530715942410568075615629 0.0923177987337112371246661268742 0.0858988523483276283920773153113 +0.08126399852335453033447265625 -0.73389749228954315185546875 0.1314922459423542022705078125 +0.08126399852335453033447265625 0.73389749228954315185546875 0.1314922459423542022705078125 +0.08129370212554931640625 -0.00412480011582374607448375769536 -0.05808889865875244140625 +0.08129370212554931640625 0.00412480011582374607448375769536 -0.05808889865875244140625 +0.0813325524330139187911825615629 -0.0714328497648239052475460653113 -0.103838253021240237150557561563 +0.0813325524330139187911825615629 0.0714328497648239052475460653113 -0.103838253021240237150557561563 +0.081360399723052978515625 -0.0397157996892929104904013115629 0.178334403038024918997095369377 +0.081360399723052978515625 0.0397157996892929104904013115629 0.178334403038024918997095369377 +0.0813806019723415374755859375 -0.203681105375289911441072376874 -0.272747647762298539575454014994 +0.0813806019723415374755859375 0.203681105375289911441072376874 -0.272747647762298539575454014994 +0.081421248614788055419921875 -0.14278399944305419921875 0.18837024271488189697265625 +0.081421248614788055419921875 0.14278399944305419921875 0.18837024271488189697265625 +0.0814409017562866266448651231258 -0.0540647983551025418380575615629 0.0210804000496864346603231865629 +0.0814409017562866266448651231258 0.0540647983551025418380575615629 0.0210804000496864346603231865629 +0.0815292030572891263107138115629 -0.0592344000935554546027894673443 0.894339895248413063733039507497 +0.0815292030572891263107138115629 0.0592344000935554546027894673443 0.894339895248413063733039507497 +0.0815400004386901966491052462516 -0.0793540000915527454772302462516 0.383476400375366233141960492503 +0.0815400004386901966491052462516 0.0793540000915527454772302462516 0.383476400375366233141960492503 +0.0815431505441665677169638115629 -0.059244297444820404052734375 0.438566842675209067614616742503 +0.0815431505441665677169638115629 0.059244297444820404052734375 0.438566842675209067614616742503 +0.0815679006278514917571698106258 -0.132669903337955474853515625 -0.8864226043224334716796875 +0.0815679006278514917571698106258 0.132669903337955474853515625 -0.8864226043224334716796875 +0.081579752266407012939453125 -0.05927050113677978515625 -0.228761255741119384765625 +0.081579752266407012939453125 0.05927050113677978515625 -0.228761255741119384765625 +0.0816727481782436454116336221887 -0.133200001716613780633480246252 -0.42200414836406707763671875 +0.0816727481782436454116336221887 0.133200001716613780633480246252 -0.42200414836406707763671875 +0.0816939465701580075362997490629 -0.165864405035972606317073996252 -0.623149150609970114977897992503 +0.0816939465701580075362997490629 0.165864405035972606317073996252 -0.623149150609970114977897992503 +0.0817061007022857610504473768742 -0.340329509973525956567641514994 0 +0.0817061007022857610504473768742 0.340329509973525956567641514994 0 +0.08173625171184539794921875 -0.12130050361156463623046875 -0.20274449884891510009765625 +0.08173625171184539794921875 0.12130050361156463623046875 -0.20274449884891510009765625 +0.0817430019378662109375 -0.173174202442169189453125 0.0576955974102020263671875 +0.0817430019378662109375 0.173174202442169189453125 0.0576955974102020263671875 +0.0817851975560188182434728787484 -0.298422592878341663702457253748 -0.163570050895214064157201505623 +0.0817851975560188182434728787484 0.298422592878341663702457253748 -0.163570050895214064157201505623 +0.0818163476884365137298260606258 -0.53836806118488311767578125 -0.0772376000881195151626101846887 +0.0818163476884365137298260606258 0.53836806118488311767578125 -0.0772376000881195151626101846887 +0.0818271994590759332854901231258 -0.0273261994123458890060263115629 -0.0505725979804992689659037807814 +0.0818271994590759332854901231258 0.0273261994123458890060263115629 -0.0505725979804992689659037807814 +0.08188354969024658203125 -0.117140103876590725984208063437 -0.319489100575447049212840511245 +0.08188354969024658203125 0.117140103876590725984208063437 -0.319489100575447049212840511245 +0.0818922996520996121505575615629 -0.0381716012954711955695863423443 -0.0428552985191345270354901231258 +0.0818922996520996121505575615629 0.0381716012954711955695863423443 -0.0428552985191345270354901231258 +0.08194839954376220703125 -0.0545104980468750013877787807814 -0.01769340038299560546875 +0.08194839954376220703125 0.0545104980468750013877787807814 -0.01769340038299560546875 +0.0819526523351669228256710653113 -0.122434803843498224429353626874 0.0281686507165431962440571567186 +0.0819526523351669228256710653113 0.122434803843498224429353626874 0.0281686507165431962440571567186 +0.0819642037153243963043536268742 -0.111523801088333124331697376874 -0.0578300982713699299186949076557 +0.0819642037153243963043536268742 0.111523801088333124331697376874 -0.0578300982713699299186949076557 +0.0819787025451660239516726846887 -0.0408282995223999065070863423443 0.0401564002037048395354901231258 +0.0819787025451660239516726846887 0.0408282995223999065070863423443 0.0401564002037048395354901231258 +0.08197979629039764404296875 0 0.288581693172454800677684261245 +0.0819902002811431912521200615629 -0.0799207985401153564453125 0.163982605934143071957365123126 +0.0819902002811431912521200615629 0.0799207985401153564453125 0.163982605934143071957365123126 +0.08199225179851055145263671875 -0.41433598101139068603515625 0.6197602450847625732421875 +0.08199225179851055145263671875 0.41433598101139068603515625 0.6197602450847625732421875 +0.0819952011108398548522302462516 -0.748838376998901433800881477509 -0.26929199695587158203125 +0.0819952011108398548522302462516 0.748838376998901433800881477509 -0.26929199695587158203125 +0.081999249756336212158203125 -0.1964274942874908447265625 -0.1311199963092803955078125 +0.081999249756336212158203125 0.1964274942874908447265625 -0.1311199963092803955078125 +0.0821950972080230796157351846887 -0.0496439009904861491828675923443 0.0279186010360717787315287807814 +0.0821950972080230796157351846887 0.0496439009904861491828675923443 0.0279186010360717787315287807814 +0.082208096981048583984375 -0.0597276002168655381630024692186 0.282266700267791714740184261245 +0.082208096981048583984375 0.0597276002168655381630024692186 0.282266700267791714740184261245 +0.082225799560546875 -0.10559700429439544677734375 0.0677362516522407448471554403113 +0.082225799560546875 0.10559700429439544677734375 0.0677362516522407448471554403113 +0.0822618007659912109375 -0.0259889990091323880294638115629 0.0505724012851715143401776231258 +0.0822618007659912109375 0.0259889990091323880294638115629 0.0505724012851715143401776231258 +0.0822630017995834295074786268742 -0.479610821604728676526008257497 -0.696926075220107965613181022491 +0.0822630017995834295074786268742 0.479610821604728676526008257497 -0.696926075220107965613181022491 +0.082266747951507568359375 -0.121825200319290158357254938437 -0.0298462495207786546180805942186 +0.082266747951507568359375 0.121825200319290158357254938437 -0.0298462495207786546180805942186 +0.082273252308368682861328125 -0.21983550488948822021484375 -0.086043499410152435302734375 +0.082273252308368682861328125 0.21983550488948822021484375 -0.086043499410152435302734375 +0.0823062002658844077407351846887 -0.1244575977325439453125 0.133176600933074956722990123126 +0.0823062002658844077407351846887 0.1244575977325439453125 0.133176600933074956722990123126 +0.0823062032461166354080361884371 -0.0597981020808219868034605326557 -0.2822231948375701904296875 +0.0823062032461166354080361884371 0.0597981020808219868034605326557 -0.2822231948375701904296875 +0.0823355019092559814453125 -0.393728411197662386822315738755 0.51058669388294219970703125 +0.0823355019092559814453125 0.393728411197662386822315738755 0.51058669388294219970703125 +0.0823576502501964652358523721887 -0.432294309139251708984375 -0.0940153487026691436767578125 +0.0823576502501964652358523721887 0.432294309139251708984375 -0.0940153487026691436767578125 +0.0824180006980896051604901231258 0 0.0566327989101409953742738423443 +0.0824407994747161920745526231258 0 0.391412401199340842516960492503 +0.0824551463127136258224325615629 -0.0300549007952213287353515625 0.121646404266357421875 +0.0824551463127136258224325615629 0.0300549007952213287353515625 0.121646404266357421875 +0.082479000091552734375 -0.6725985109806060791015625 0.32141549885272979736328125 +0.082479000091552734375 0.6725985109806060791015625 0.32141549885272979736328125 +0.082501351833343505859375 -0.059940598905086517333984375 0.110002952814102175627120061563 +0.082501351833343505859375 0.059940598905086517333984375 0.110002952814102175627120061563 +0.0825129032135009793380575615629 -0.695313012599945046154914507497 -0.5654474794864654541015625 +0.0825129032135009793380575615629 0.695313012599945046154914507497 -0.5654474794864654541015625 +0.0825167000293731689453125 -0.347504490613937344622996761245 -0.602023082971572809363181022491 +0.0825167000293731689453125 0.347504490613937344622996761245 -0.602023082971572809363181022491 +0.0825775980949401966491052462516 -0.04482559859752655029296875 0.0342285990715026841590962192186 +0.0825775980949401966491052462516 0.04482559859752655029296875 0.0342285990715026841590962192186 +0.0826337993144989069183026231258 -0.0765356004238128689864950615629 -0.165269398689270041735710492503 +0.0826337993144989069183026231258 0.0765356004238128689864950615629 -0.165269398689270041735710492503 +0.0826955519616603823562783759371 -0.1789203584194183349609375 0.289221447706222489770766514994 +0.0826955519616603823562783759371 0.1789203584194183349609375 0.289221447706222489770766514994 +0.0827677510678768157958984375 -0.70964772999286651611328125 0.2281432449817657470703125 +0.0827677510678768157958984375 0.70964772999286651611328125 0.2281432449817657470703125 +0.0827711999416351346114950615629 0 0.594263398647308371813835492503 +0.0828404992818832369705361884371 -0.0984004497528076088608273153113 0.0771675020456314003647335653113 +0.0828404992818832369705361884371 0.0984004497528076088608273153113 0.0771675020456314003647335653113 +0.082888998091220855712890625 -0.386725008487701416015625 -0.918461978435516357421875 +0.082888998091220855712890625 0.386725008487701416015625 -0.918461978435516357421875 +0.0829155027866363553146200615629 -0.255191999673843372686832253748 0.13416449725627899169921875 +0.0829155027866363553146200615629 0.255191999673843372686832253748 0.13416449725627899169921875 +0.0829182028770446694077023153113 -0.255191999673843372686832253748 -0.536657989025115966796875 +0.0829182028770446694077023153113 0.255191999673843372686832253748 -0.536657989025115966796875 +0.0829194009304046603103799384371 -0.570632994174957275390625 -0.165838193893432600534154630623 +0.0829194009304046603103799384371 0.570632994174957275390625 -0.165838193893432600534154630623 +0.0830601990222930991469851846887 -0.0552416026592254666427450615629 0.00702629983425140380859375 +0.0830601990222930991469851846887 0.0552416026592254666427450615629 0.00702629983425140380859375 +0.0830757975578308160979901231258 -0.0131748005747795108449915701954 0.0540817022323608412315287807814 +0.0830757975578308160979901231258 0.0131748005747795108449915701954 0.0540817022323608412315287807814 +0.0830853998661041370787927462516 -0.0553368985652923639495526231258 -0.00588660016655922005424095289072 +0.0830853998661041370787927462516 0.0553368985652923639495526231258 -0.00588660016655922005424095289072 +0.0830912530422210776626101846887 -0.539815640449524014599091970013 0.0647668991237878854949627793758 +0.0830912530422210776626101846887 0.539815640449524014599091970013 0.0647668991237878854949627793758 +0.0831066012382507407485476846887 -0.0504204988479614313323651231258 -0.0234749004244804403140900461722 +0.0831066012382507407485476846887 0.0504204988479614313323651231258 -0.0234749004244804403140900461722 +0.0832130014896392822265625 -0.0422358006238937391807475307814 -0.0359407991170883206466513115629 +0.0832130014896392822265625 0.0422358006238937391807475307814 -0.0359407991170883206466513115629 +0.0832353025674819890777911268742 -0.0358009502291679396202006557814 -0.119541603326797474249332253748 +0.0832353025674819890777911268742 0.0358009502291679396202006557814 -0.119541603326797474249332253748 +0.0832385003566741971114950615629 -0.02060990035533905029296875 -0.0514449000358581584602113423443 +0.0832385003566741971114950615629 0.02060990035533905029296875 -0.0514449000358581584602113423443 +0.08325000107288360595703125 -0.039902500808238983154296875 -0.2323299944400787353515625 +0.08325000107288360595703125 0.039902500808238983154296875 -0.2323299944400787353515625 +0.0832560982555150957962197821871 -0.461421664059162128790347878748 0.8262311518192291259765625 +0.0832560982555150957962197821871 0.461421664059162128790347878748 0.8262311518192291259765625 +0.0832644999027252197265625 -0.4348604977130889892578125 -0.23229999840259552001953125 +0.0832644999027252197265625 0.4348604977130889892578125 -0.23229999840259552001953125 +0.0832871973514556912521200615629 -0.599544811248779341283920985006 0.523077583312988259045539507497 +0.0832871973514556912521200615629 0.599544811248779341283920985006 0.523077583312988259045539507497 +0.0833144497126340893844442803129 -0.75040805339813232421875 -0.390443260967731464727847878748 +0.0833144497126340893844442803129 0.75040805339813232421875 -0.390443260967731464727847878748 +0.0833195984363555991469851846887 -0.176951801776885991879240123126 -0.04178459942340850830078125 +0.0833195984363555991469851846887 0.176951801776885991879240123126 -0.04178459942340850830078125 +0.083369500935077667236328125 -0.06057099997997283935546875 -0.489265501499176025390625 +0.083369500935077667236328125 0.06057099997997283935546875 -0.489265501499176025390625 +0.0833777010440826388260049384371 -0.554851484298706010278579014994 0.4185545146465301513671875 +0.0833777010440826388260049384371 0.554851484298706010278579014994 0.4185545146465301513671875 +0.0834345996379852322677450615629 -0.178348398208618169613615123126 0.03507860004901885986328125 +0.0834345996379852322677450615629 0.178348398208618169613615123126 0.03507860004901885986328125 +0.0834866993129253359695596259371 -0.317009237408638011590511496252 -0.308277440071105968133480246252 +0.0834866993129253359695596259371 0.317009237408638011590511496252 -0.308277440071105968133480246252 +0.0835207998752593994140625 -0.7778952121734619140625 -0.167042398452758811266960492503 +0.0835207998752593994140625 0.7778952121734619140625 -0.167042398452758811266960492503 +0.083529748022556304931640625 -0.22419999539852142333984375 0.072505749762058258056640625 +0.083529748022556304931640625 0.22419999539852142333984375 0.072505749762058258056640625 +0.0835456520318984957595986884371 -0.124267047643661490696764815311 0.0088224001228809356689453125 +0.0835456520318984957595986884371 0.124267047643661490696764815311 0.0088224001228809356689453125 +0.0835876993834972353836221259371 -0.257251757383346546514957253748 -0.222113853693008400647102007497 +0.0835876993834972353836221259371 0.257251757383346546514957253748 -0.222113853693008400647102007497 +0.0835969984531402671157351846887 -0.141046202182769780941740123126 -0.114531803131103518400557561563 +0.0835969984531402671157351846887 0.141046202182769780941740123126 -0.114531803131103518400557561563 +0.0836380541324615450760049384371 -0.124072051048278800267077315311 -0.0105265494436025622976282889454 +0.0836380541324615450760049384371 0.124072051048278800267077315311 -0.0105265494436025622976282889454 +0.0837037526071071624755859375 -0.060813747346401214599609375 -0.74282924830913543701171875 +0.0837037526071071624755859375 0.060813747346401214599609375 -0.74282924830913543701171875 +0.0837045013904571533203125 -0.0608141988515853854080361884371 -0.108605700731277468595870061563 +0.0837045013904571533203125 0.0608141988515853854080361884371 -0.108605700731277468595870061563 +0.083736002445220947265625 -0.257708811759948752673210492503 -0.752711200714111350329460492503 +0.083736002445220947265625 0.257709598541259798931690738755 -0.752711200714111350329460492503 +0.083828501403331756591796875 -0.20480124652385711669921875 0.116314999759197235107421875 +0.083828501403331756591796875 0.20480124652385711669921875 0.116314999759197235107421875 +0.0838335990905761802016726846887 -0.258016800880432162212940738755 0.7525951862335205078125 +0.0838335990905761802016726846887 0.258016800880432162212940738755 0.7525951862335205078125 +0.0838795512914657509506710653113 -0.01001114957034587860107421875 0.123951601982116688116519753748 +0.0838795512914657509506710653113 0.01001114957034587860107421875 0.123951601982116688116519753748 +0.0838921010494232261001101846887 -0.0303799003362655653526225307814 0.0451573014259338406661825615629 +0.0838921010494232261001101846887 0.0303799003362655653526225307814 0.0451573014259338406661825615629 +0.0839057981967926136412927462516 -0.181166398525238053762720369377 0.0117718003690242770803431326954 +0.0839057981967926136412927462516 0.181166398525238053762720369377 0.0117718003690242770803431326954 +0.08395205438137054443359375 -0.5485395491123199462890625 -0.338462153077125571520866742503 +0.08395205438137054443359375 0.5485395491123199462890625 -0.338462153077125571520866742503 +0.0839604020118713406661825615629 -0.0316772997379302992393412807814 -0.0441271007061004652549662807814 +0.0839604020118713406661825615629 0.0316772997379302992393412807814 -0.0441271007061004652549662807814 +0.0839607000350952176193075615629 -0.0460260987281799344161825615629 -0.02884779870510101318359375 +0.0839607000350952176193075615629 0.0460260987281799344161825615629 -0.02884779870510101318359375 +0.083980500698089599609375 0 -0.74528324604034423828125 +0.0839838027954101645766726846887 -0.180967795848846452200220369377 -0.014049999415874481201171875 +0.0839838027954101645766726846887 0.180967795848846452200220369377 -0.014049999415874481201171875 +0.0839920476078987177093182481258 -0.434989339113235506939503238755 0.0789268501102924346923828125 +0.0839920476078987177093182481258 0.434989339113235506939503238755 0.0789268501102924346923828125 +0.0840164959430694524566973768742 -0.0363569989800453172157368442186 -0.285690897703170743060496761245 +0.0840164959430694524566973768742 0.0363569989800453172157368442186 -0.285690897703170743060496761245 +0.0840351998805999866881677462516 -0.258628797531127940789730246252 -0.293341588973999034539730246252 +0.0840351998805999866881677462516 0.258628797531127940789730246252 -0.293341588973999034539730246252 +0.0840936005115509033203125 -0.343938398361206099096420985006 0.186103999614715576171875 +0.0840936005115509033203125 0.343938398361206099096420985006 0.186103999614715576171875 +0.084101997315883636474609375 -0.02032049931585788726806640625 -0.4924570024013519287109375 +0.084101997315883636474609375 0.02032049931585788726806640625 -0.4924570024013519287109375 +0.0841088980436325017731036268742 -0.105092552304267880525223688437 -0.0661907985806465121170205634371 +0.0841088980436325017731036268742 0.105092552304267880525223688437 -0.0661907985806465121170205634371 +0.08413485251367092132568359375 -0.667189767956733681408820757497 0.671028676629066400671774772491 +0.08413485251367092132568359375 0.667189767956733681408820757497 0.671028676629066400671774772491 +0.08414324931800365447998046875 -0.098810255527496337890625 0.73868550360202789306640625 +0.08414324931800365447998046875 0.098810255527496337890625 0.73868550360202789306640625 +0.0842514991760253961761151231258 -0.0137950003147125251079518903907 -0.0520708978176116984992738423443 +0.0842514991760253961761151231258 0.0137950003147125251079518903907 -0.0520708978176116984992738423443 +0.08430840075016021728515625 -0.355574709177017223016292746252 0.262599742412567171978565738755 +0.08430840075016021728515625 0.355574709177017223016292746252 0.262599742412567171978565738755 +0.0843410968780517605880575615629 -0.0856869041919708224197549384371 -0.08969025313854217529296875 +0.0843410968780517605880575615629 0.0856869041919708224197549384371 -0.08969025313854217529296875 +0.0843733459711074745834835653113 -0.0241504490375518791889231096093 -0.121646547317504877261384876874 +0.0843733459711074745834835653113 0.0241504490375518791889231096093 -0.121646547317504877261384876874 +0.084399752318859100341796875 -0.0202849991619586944580078125 -0.2344464957714080810546875 +0.084399752318859100341796875 0.0202849991619586944580078125 -0.2344464957714080810546875 +0.084441997110843658447265625 -0.25988900661468505859375 0.96193897724151611328125 +0.084441997110843658447265625 0.25988900661468505859375 0.96193897724151611328125 +0.08445779979228973388671875 -0.0122028004378080361103098283593 -0.287607300281524647100894753748 +0.08445779979228973388671875 0.0122028004378080361103098283593 -0.287607300281524647100894753748 +0.08462490141391754150390625 -0.0691317021846771240234375 0.10275900363922119140625 +0.08462490141391754150390625 0.0691317021846771240234375 0.10275900363922119140625 +0.0846480011940002469161825615629 -0.162433195114135758840845369377 -0.0803129971027374267578125 +0.0846480011940002469161825615629 0.162433195114135758840845369377 -0.0803129971027374267578125 +0.0846621036529540960113848768742 -0.260559296607971169201789507497 -0.122234103083610531892411188437 +0.0846621036529540960113848768742 0.260559296607971169201789507497 -0.122234103083610531892411188437 +0.0846659004688262994964276231258 -0.051337301731109619140625 0.0140058994293212890625 +0.0846659004688262994964276231258 0.051337301731109619140625 0.0140058994293212890625 +0.08467400074005126953125 -0.0196014001965522793868856865629 0.04945810139179229736328125 +0.08467400074005126953125 0.0196014001965522793868856865629 0.04945810139179229736328125 +0.0846757978200912558852664346887 -0.334109601378440868035823996252 -0.428603446483612093853565738755 +0.0846757978200912558852664346887 0.334109601378440868035823996252 -0.428603446483612093853565738755 +0.084679000079631805419921875 0 -0.2352222502231597900390625 +0.084684498608112335205078125 -0.098533250391483306884765625 0.21358774602413177490234375 +0.084684498608112335205078125 0.098533250391483306884765625 0.21358774602413177490234375 +0.0846898503601550972641476278113 -0.260653057694435086322215511245 0.217686703801155068127570757497 +0.0846898503601550972641476278113 0.260653057694435086322215511245 0.217686703801155068127570757497 +0.08478049933910369873046875 0 0.23518575727939605712890625 +0.08479440212249755859375 -0.314357209205627485815170985006 -0.232355999946594254934595369377 +0.08479440212249755859375 0.314357209205627485815170985006 -0.232355999946594254934595369377 +0.0848208010196685874282351846887 -0.366017198562622103619190738755 0.13724720478057861328125 +0.0848208010196685874282351846887 0.366017198562622103619190738755 0.13724720478057861328125 +0.0848287999629974420745526231258 -0.00658169984817504917506969519536 0.0525429010391235407073651231258 +0.0848287999629974420745526231258 0.00658169984817504917506969519536 0.0525429010391235407073651231258 +0.0848429024219513050475427462516 -0.0516117990016937283614950615629 -0.0117430999875068678428569057814 +0.0848429024219513050475427462516 0.0516117990016937283614950615629 -0.0117430999875068678428569057814 +0.0848438024520874051193075615629 -0.110673201084136973992855246252 -0.143363201618194574527009876874 +0.0848438024520874051193075615629 0.110673201084136973992855246252 -0.143363201618194574527009876874 +0.0848612010478973499694177462516 -0.00691400021314620989026922259768 -0.0524478018283844049651776231258 +0.0848612010478973499694177462516 0.00691400021314620989026922259768 -0.0524478018283844049651776231258 +0.0848694026470184353927450615629 -0.117517653107643116339176003748 0.0385588511824607807487730326557 +0.0848694026470184353927450615629 0.117517653107643116339176003748 0.0385588511824607807487730326557 +0.0849556028842926025390625 -0.1599051952362060546875 -0.356669211387634299548210492503 +0.0849556028842926025390625 0.1599051952362060546875 -0.356669211387634299548210492503 +0.0849810004234313881577023153113 -0.0123483002185821536672571951954 -0.122986802458763117007478626874 +0.0849810004234313881577023153113 0.0123483002185821536672571951954 -0.122986802458763117007478626874 +0.0849889993667602566818075615629 -0.166162204742431651727230246252 0.0718815982341766412933026231258 +0.0849889993667602566818075615629 0.166162204742431651727230246252 0.0718815982341766412933026231258 +0.0850162506103515625 -0.16236050426959991455078125 -0.1700332462787628173828125 +0.0850162506103515625 0.16236050426959991455078125 -0.1700332462787628173828125 +0.0850646018981933704772302462516 -0.0618022024631500258018412807814 -0.170130801200866710320980246252 +0.0850646018981933704772302462516 0.0618022024631500258018412807814 -0.170130801200866710320980246252 +0.0850647985935211181640625 0 -0.0525735974311828668792401231258 +0.0850924015045166071136151231258 -0.034615099430084228515625 0.0395105987787246759612713731258 +0.0850924015045166071136151231258 0.034615099430084228515625 0.0395105987787246759612713731258 +0.0850956022739410428146200615629 -0.133499801158905029296875 0.122215199470520022306807561563 +0.0850956022739410428146200615629 0.133499801158905029296875 0.122215199470520022306807561563 +0.0851865001022815704345703125 -0.74328450858592987060546875 -0.05264849960803985595703125 +0.0851865001022815704345703125 0.74328450858592987060546875 -0.05264849960803985595703125 +0.0852576017379760853209802462516 -0.2624003887176513671875 0.289615607261657748150440738755 +0.0852576017379760853209802462516 0.2624003887176513671875 0.289615607261657748150440738755 +0.0852641999721527182876101846887 -0.0522495985031127957443075615629 0 +0.0852641999721527182876101846887 0.0522495985031127957443075615629 0 +0.0852703481912612942794638115629 0 -0.123405602574348446931473688437 +0.085271500051021575927734375 -0.22902275621891021728515625 -0.0527010001242160797119140625 +0.085271500051021575927734375 0.22902275621891021728515625 -0.0527010001242160797119140625 +0.08528749644756317138671875 -0.15505875647068023681640625 0.17658649384975433349609375 +0.08528749644756317138671875 0.15505875647068023681640625 0.17658649384975433349609375 +0.0852976024150848416427450615629 -0.580234384536743141858039507497 -0.544106388092041037829460492503 +0.0852976024150848416427450615629 0.580234384536743141858039507497 -0.544106388092041037829460492503 +0.085417799651622772216796875 -0.540025848150253340307358485006 0.351533660292625449450554242503 +0.085417799651622772216796875 0.540025848150253340307358485006 0.351533660292625449450554242503 +0.0854336977005004938323651231258 -0.1444618999958038330078125 0.5237672030925750732421875 +0.0854336977005004938323651231258 0.1444618999958038330078125 0.5237672030925750732421875 +0.0854721039533615084549111884371 -0.0984415501356124822418536268742 -0.074187599122524261474609375 +0.0854721039533615084549111884371 0.0984415501356124822418536268742 -0.074187599122524261474609375 +0.0854878008365631131271200615629 -0.01334179937839508056640625 0.180315804481506358758480246252 +0.0854878008365631131271200615629 0.01334179937839508056640625 0.180315804481506358758480246252 +0.0855401962995529091537960653113 -0.117030295729637134893863503748 -0.0385588511824607807487730326557 +0.0855401962995529091537960653113 0.117030295729637134893863503748 -0.0385588511824607807487730326557 +0.085546500980854034423828125 -0.0495837517082691192626953125 0.22961549460887908935546875 +0.085546500980854034423828125 0.0495837517082691192626953125 0.22961549460887908935546875 +0.0855476021766662653167401231258 -0.0358224004507064833213725307814 -0.0373946994543075603156800923443 +0.0855476021766662653167401231258 0.0358224004507064833213725307814 -0.0373946994543075603156800923443 +0.085571996867656707763671875 -0.46193850040435791015625 -0.1711435019969940185546875 +0.085571996867656707763671875 0.46193850040435791015625 -0.1711435019969940185546875 +0.085581600666046142578125 -0.111522603034973147306807561563 -0.2650254070758819580078125 +0.085581600666046142578125 0.111522603034973147306807561563 -0.2650254070758819580078125 +0.0856074035167694036285723768742 -0.198851394653320301397769753748 0.207676506042480474301115123126 +0.0856074035167694036285723768742 0.198851394653320301397769753748 0.207676506042480474301115123126 +0.085641749203205108642578125 -0.23067049682140350341796875 0.044233500957489013671875 +0.085641749203205108642578125 0.23067049682140350341796875 0.044233500957489013671875 +0.0856821022927761050125283759371 -0.309737396240234330591079014994 0.138640950620174396856754128748 +0.0856821022927761050125283759371 0.309737396240234330591079014994 0.138640950620174396856754128748 +0.0857083022594452015319177462516 -0.0470914006233215387542401231258 0.020892299711704254150390625 +0.0857083022594452015319177462516 0.0470914006233215387542401231258 0.020892299711704254150390625 +0.0857207022607326535323934990629 -0.435243880748748812603565738755 -0.475094097852706898077457253748 +0.0857207022607326535323934990629 0.435243880748748812603565738755 -0.475094097852706898077457253748 +0.0857271015644073541839276231258 -0.0247321993112564093852956403907 -0.0451573997735977214484925923443 +0.0857271015644073541839276231258 0.0247321993112564093852956403907 -0.0451573997735977214484925923443 +0.085758246481418609619140625 -0.10356675088405609130859375 -0.2107592523097991943359375 +0.085758246481418609619140625 0.10356675088405609130859375 -0.2107592523097991943359375 +0.085834801197052001953125 -0.177784001827239995785490123126 0.3478868007659912109375 +0.085834801197052001953125 0.177784001827239995785490123126 0.3478868007659912109375 +0.0858444035053253090561398153113 -0.518956196308135941919204014994 0.2886444032192230224609375 +0.0858444035053253090561398153113 0.518956196308135941919204014994 0.2886444032192230224609375 +0.0858564019203186118422976846887 -0.03867270052433013916015625 0.0336614012718200669715962192186 +0.0858564019203186118422976846887 0.03867270052433013916015625 0.0336614012718200669715962192186 +0.0859872043132781926910723768742 -0.393969011306762706414730246252 0.444291007518768321649105246252 +0.0859872043132781926910723768742 0.393969011306762706414730246252 0.444291007518768321649105246252 +0.0860023975372314480880575615629 -0.0928420007228851346114950615629 0.154867601394653331414730246252 +0.0860023975372314480880575615629 0.0928420007228851346114950615629 0.154867601394653331414730246252 +0.0860392488539219041365768703145 -0.54322840273380279541015625 0 +0.0860392488539219041365768703145 0.54322840273380279541015625 0 +0.0860586032271385137359942518742 -0.0625252000987529671371945028113 0.944025444984435968542868522491 +0.0860586032271385137359942518742 0.0625252000987529671371945028113 0.944025444984435968542868522491 +0.0860700041055679349044638115629 -0.185770493745803816354467130623 -0.219274199008941655941740123126 +0.0860700041055679349044638115629 0.185770493745803816354467130623 -0.219274199008941655941740123126 +0.0860834978520870208740234375 -0.74373601377010345458984375 0.044120999984443187713623046875 +0.0860834978520870208740234375 0.74373601377010345458984375 0.044120999984443187713623046875 +0.0860994506627321271041708428129 -0.1400404535233974456787109375 -0.93566830456256866455078125 +0.0860994506627321271041708428129 0.1400404535233974456787109375 -0.93566830456256866455078125 +0.0861042007803916875641192518742 -0.114074102044105521458483565311 0.319489100575447049212840511245 +0.0861042007803916875641192518742 0.114074102044105521458483565311 0.319489100575447049212840511245 +0.086136400699615478515625 0 0.0507987022399902371505575615629 +0.086155951023101806640625 -0.0398274019360542255729917826557 0.116150549054145804661608565311 +0.086155951023101806640625 0.0398274019360542255729917826557 0.116150549054145804661608565311 +0.0861656010150909507094851846887 -0.04762209951877593994140625 -0.017539300024509429931640625 +0.0861656010150909507094851846887 0.04762209951877593994140625 -0.017539300024509429931640625 +0.0861804008483886829772302462516 -0.0425321996212005629112162807814 0.0276396006345748929122763115629 +0.0861804008483886829772302462516 0.0425321996212005629112162807814 0.0276396006345748929122763115629 +0.0861966043710708645919638115629 -0.577162814140319779809829014994 0.139473599195480330026342130623 +0.0861966043710708645919638115629 0.577162814140319779809829014994 0.139473599195480330026342130623 +0.0862163990736007634918536268742 -0.0778882473707199068924111884371 0.09486915171146392822265625 +0.0862163990736007634918536268742 0.0778882473707199068924111884371 0.09486915171146392822265625 +0.0863352030515670693100460653113 -0.265717202425003018451121761245 0.530980789661407492907585492503 +0.0863352030515670693100460653113 0.265717202425003018451121761245 0.530980789661407492907585492503 +0.0863970011472701970856036268742 -0.136277398467063909359708873126 0.252911102771759044305355246252 +0.0863970011472701970856036268742 0.136277398467063909359708873126 0.252911102771759044305355246252 +0.0864589489996433341323367471887 -0.440483388304710399285823996252 -0.03161249868571758270263671875 +0.0864589489996433341323367471887 0.440483388304710399285823996252 -0.03161249868571758270263671875 +0.0865450024604797474303552462516 -0.0237226992845535299136994211722 0.0441269993782043498664613423443 +0.0865450024604797474303552462516 0.0237226992845535299136994211722 0.0441269993782043498664613423443 +0.0865786015987396323501101846887 -0.0397345006465911892989950615629 -0.0304190993309021023849325615629 +0.0865786015987396323501101846887 0.0397345006465911892989950615629 -0.0304190993309021023849325615629 +0.0866170510649681146819744981258 -0.127666500210762035028011496252 0.6314255893230438232421875 +0.0866170510649681146819744981258 0.127666500210762035028011496252 0.6314255893230438232421875 +0.0866809010505676380553552462516 -0.0131200000643730170513112653907 0.0481070011854171780685263115629 +0.0866809010505676380553552462516 0.0131200000643730170513112653907 0.0481070011854171780685263115629 +0.0866815984249115073501101846887 -0.782823991775512761925881477509 0.140258395671844476870759876874 +0.0866815984249115073501101846887 0.782823991775512761925881477509 0.140258395671844476870759876874 +0.0867270022630691472809161268742 -0.553150784969329789575454014994 0.215644794702529896124332253748 +0.0867270022630691472809161268742 0.553150784969329789575454014994 0.215644794702529896124332253748 +0.08672724664211273193359375 -0.23401249945163726806640625 0.01471650041639804840087890625 +0.08672724664211273193359375 0.23401249945163726806640625 0.01471650041639804840087890625 +0.0868169963359832763671875 -0.2337825000286102294921875 -0.017565749585628509521484375 +0.0868169963359832763671875 0.2337825000286102294921875 -0.017565749585628509521484375 +0.086862601339817047119140625 -0.440741711854934714587272992503 0.0264865508303046247318146555472 +0.086862601339817047119140625 0.440741711854934714587272992503 0.0264865508303046247318146555472 +0.0869123965501785306075888115629 -0.481806600093841519427684261245 -0.346855795383453346936164507497 +0.0869123965501785306075888115629 0.481806600093841519427684261245 -0.346855795383453346936164507497 +0.0869708001613617026626101846887 -0.04668819904327392578125 -0.17394340038299560546875 +0.0869708001613617026626101846887 0.04668819904327392578125 -0.17394340038299560546875 +0.0869913995265960693359375 -0.0179592996835708611225168596093 -0.0459343999624252374847088731258 +0.0869913995265960693359375 0.0179592996835708611225168596093 -0.0459343999624252374847088731258 +0.0870288044214248684982138115629 -0.0508804500102996784538511576557 -0.111072751879692080412276311563 +0.0870288044214248684982138115629 0.0508804500102996784538511576557 -0.111072751879692080412276311563 +0.0870377987623214693924111884371 -0.267877793312072731701789507497 0.103275597095489501953125 +0.0870377987623214693924111884371 0.267877793312072731701789507497 0.103275597095489501953125 +0.0870464980602264487563601846887 -0.0433883011341094984580912807814 -0.0232455998659133918071706403907 +0.0870464980602264487563601846887 0.0433883011341094984580912807814 -0.0232455998659133918071706403907 +0.087086997926235198974609375 -0.374890506267547607421875 0.3191755115985870361328125 +0.087086997926235198974609375 0.374890506267547607421875 0.3191755115985870361328125 +0.0870969533920288030426348768742 -0.733941513299941949988181022491 -0.59686122834682464599609375 +0.0870969533920288030426348768742 0.733941513299941949988181022491 -0.59686122834682464599609375 +0.0871020019054412897308026231258 -0.507823222875595114977897992503 -0.737921726703643865441506477509 +0.0871020019054412897308026231258 0.507823222875595114977897992503 -0.737921726703643865441506477509 +0.0871199011802673284332598768742 -0.795640775561332724841179242503 -0.286122746765613555908203125 +0.0871199011802673284332598768742 0.795640775561332724841179242503 -0.286122746765613555908203125 +0.0871331959962844820877236884371 -0.2281199991703033447265625 -0.174266999959945684262052623126 +0.0871331959962844820877236884371 0.2281199991703033447265625 -0.174266999959945684262052623126 +0.0871340990066528237045773153113 -0.11180055141448974609375 0.049074299633502960205078125 +0.0871340990066528237045773153113 0.11180055141448974609375 0.049074299633502960205078125 +0.0871428012847900446136151231258 -0.0531032025814056410362162807814 0.172006404399871831722990123126 +0.0871428012847900446136151231258 0.0531032025814056410362162807814 0.172006404399871831722990123126 +0.0871573984622955322265625 -0.0485204994678497328330912807814 0.0070249997079372406005859375 +0.0871573984622955322265625 0.0485204994678497328330912807814 0.0070249997079372406005859375 +0.0871842026710510364928552462516 -0.0486236989498138455489950615629 -0.00588590018451213854017156634768 +0.0871842026710510364928552462516 0.0486236989498138455489950615629 -0.00588590018451213854017156634768 +0.0872437477111816378494424384371 -0.0756304532289504977127236884371 -0.0957525014877319280426348768742 +0.0872437477111816378494424384371 0.0756304532289504977127236884371 -0.0957525014877319280426348768742 +0.0872480019927024813553018134371 -0.268527007102966286389289507497 0.640531516075134255139289507497 +0.0872480019927024813553018134371 0.268527007102966286389289507497 0.640531516075134255139289507497 +0.0872596025466919056334802462516 -0.374051594734191916735710492503 -0.111674404144287114926115123126 +0.0872596025466919056334802462516 0.374051594734191916735710492503 -0.111674404144287114926115123126 +0.0872752457857131902496661268742 -0.120452401041984555329911188437 0.0193457990884780862972380788278 +0.0872752457857131902496661268742 0.120452401041984555329911188437 0.0193457990884780862972380788278 +0.0873069994151592365660974337516 -0.387187901139259382787827235006 0.380740261077880892681690738755 +0.0873069994151592365660974337516 0.387187901139259382787827235006 0.380740261077880892681690738755 +0.0873714029788970891754473768742 -0.112457397580146792326338811563 -0.58285439014434814453125 +0.0873714029788970891754473768742 0.112457397580146792326338811563 -0.58285439014434814453125 +0.0873749971389770618834802462516 -0.141793203353881847039730246252 0.110726201534271248561047684689 +0.0873749971389770618834802462516 0.141793203353881847039730246252 0.110726201534271248561047684689 +0.0874584019184112548828125 -0.441958379745483409539730246252 0.661077594757080166942841970013 +0.0874584019184112548828125 0.441958379745483409539730246252 0.661077594757080166942841970013 +0.0874930500984191922286825615629 0 0.121839898824691761358707253748 +0.0875876963138580294510049384371 -0.120225450396537772435046065311 -0.0193457990884780862972380788278 +0.0875876963138580294510049384371 0.120225450396537772435046065311 -0.0193457990884780862972380788278 +0.0875961005687713734069177462516 -0.0289925009012222296977956403907 -0.0385533004999160794357138115629 +0.0875961005687713734069177462516 0.0289925009012222296977956403907 -0.0385533004999160794357138115629 +0.0876299977302551352797976846887 -0.158033597469329850637720369377 0.0857107996940612848479901231258 +0.0876299977302551352797976846887 0.158033597469329850637720369377 0.0857107996940612848479901231258 +0.087637998163700103759765625 -0.4857070147991180419921875 0.86971700191497802734375 +0.087637998163700103759765625 0.4857070147991180419921875 0.86971700191497802734375 +0.0877201527357101412674111884371 -0.316692954301834084240852007497 -0.120461253821849814671374190311 +0.0877201527357101412674111884371 0.316692954301834084240852007497 -0.120461253821849814671374190311 +0.08773569762706756591796875 -0.588788858056068398205695757497 -0.261017899215221393927066628748 +0.08773569762706756591796875 0.588788858056068398205695757497 -0.261017899215221393927066628748 +0.087791502475738525390625 -0.16243000328540802001953125 0.464659988880157470703125 +0.087791502475738525390625 0.16243000328540802001953125 0.464659988880157470703125 +0.087834499776363372802734375 -0.2703219950199127197265625 -0.41135299205780029296875 +0.087834499776363372802734375 0.2703219950199127197265625 -0.41135299205780029296875 +0.0878615021705627524672976846887 -0.0110382996499538421630859375 -0.0464598000049591119964276231258 +0.0878615021705627524672976846887 0.0110382996499538421630859375 -0.0464598000049591119964276231258 +0.0878883488476276536482956203145 -0.416861489415168817718182481258 -0.347853556275367792327557481258 +0.0878883488476276536482956203145 0.416861489415168817718182481258 -0.347853556275367792327557481258 +0.0879082977771759033203125 -0.0280317008495330824424662807814 0.0385531991720199640472088731258 +0.0879082977771759033203125 0.0280317008495330824424662807814 0.0385531991720199640472088731258 +0.0879252016544342096526776231258 -0.154367196559906022512720369377 -0.0918690025806427057464276231258 +0.0879252016544342096526776231258 0.154367196559906022512720369377 -0.0918690025806427057464276231258 +0.0879776000976562611022302462516 -0.717438411712646550988381477509 0.342843198776245139391960492503 +0.0879776000976562611022302462516 0.717438411712646550988381477509 0.342843198776245139391960492503 +0.0879780963063239995758380018742 -0.178623205423355080334602007497 -0.671083700656890824731704014994 +0.0879780963063239995758380018742 0.178623205423355080334602007497 -0.671083700656890824731704014994 +0.0879829511046409662444744981258 -0.0362933982163667692710795620314 0.54170270264148712158203125 +0.0879829511046409662444744981258 0.0362933982163667692710795620314 0.54170270264148712158203125 +0.0879871509969234466552734375 -0.173655894398689281121761496252 0.405711445212364185675113503748 +0.0879871509969234466552734375 0.173655894398689281121761496252 0.405711445212364185675113503748 +0.08808414638042449951171875 -0.0463988006114959689041299384371 0.335541850328445412365852007497 +0.08808414638042449951171875 0.0463988006114959689041299384371 0.335541850328445412365852007497 +0.0881413482129573960799362453145 -0.198872843384742759020866742503 -0.50515408813953399658203125 +0.0881413482129573960799362453145 0.198872843384742759020866742503 -0.50515408813953399658203125 +0.0881679028272628756424111884371 -0.121352550387382504548661188437 0 +0.0881679028272628756424111884371 0.121352550387382504548661188437 0 +0.0882152996957302065750283759371 -0.7945497035980224609375 -0.413410511612892161981136496252 +0.0882152996957302065750283759371 0.7945497035980224609375 -0.413410511612892161981136496252 +0.0882730007171630970397302462516 -0.0065756998956203460693359375 0.0465256005525589017013388115629 +0.0882730007171630970397302462516 0.0065756998956203460693359375 0.0465256005525589017013388115629 +0.0882856011390686090667401231258 -0.756957578659057661596420985006 0.243352794647216819079460492503 +0.0882856011390686090667401231258 0.756957578659057661596420985006 0.243352794647216819079460492503 +0.08831070363521575927734375 -0.0792447030544281005859375 0.2755385935306549072265625 +0.08831070363521575927734375 0.0792447030544281005859375 0.2755385935306549072265625 +0.0883113980293274009047976846887 -0.00412480011582374607448375769536 -0.0467341005802154596526776231258 +0.0883113980293274009047976846887 0.00412480011582374607448375769536 -0.0467341005802154596526776231258 +0.0883408010005951038756677462516 -0.0312864005565643352180238423443 -0.176683604717254638671875 +0.0883408010005951038756677462516 0.0312864005565643352180238423443 -0.176683604717254638671875 +0.0883603990077972412109375 -0.12948119640350341796875 -0.124205601215362559930355246252 +0.0883603990077972412109375 0.12948119640350341796875 -0.124205601215362559930355246252 +0.0883777499198913490952023153113 -0.0846763461828231728256710653113 0.0867137968540191567123898153113 +0.0883777499198913490952023153113 0.0846763461828231728256710653113 0.0867137968540191567123898153113 +0.0883796989917755154708700615629 -0.111523953080177304353348688437 -0.0474493503570556640625 +0.0883796989917755154708700615629 0.111523953080177304353348688437 -0.0474493503570556640625 +0.0883823990821838295639523153113 -0.0199605010449886328960378278907 0.119541299343109128083817438437 +0.0883823990821838295639523153113 0.0199605010449886328960378278907 0.119541299343109128083817438437 +0.088395752012729644775390625 -0.211909948289394384213224498126 -0.387014839053153980596988503748 +0.088395752012729644775390625 0.211909948289394384213224498126 -0.387014839053153980596988503748 +0.08841075003147125244140625 -0.37232623994350433349609375 -0.64502473175525665283203125 +0.08841075003147125244140625 0.37232623994350433349609375 -0.64502473175525665283203125 +0.0884173505008220700362997490629 -0.3727988898754119873046875 -0.236015993356704728567407869377 +0.0884173505008220700362997490629 0.3727988898754119873046875 -0.236015993356704728567407869377 +0.0884303987026214682876101846887 -0.0642476022243499839126101846887 -0.384775590896606456414730246252 +0.0884303987026214682876101846887 0.0642476022243499839126101846887 -0.384775590896606456414730246252 +0.0884926471859216606796749715613 -0.637016361951827980725227007497 0.555769932270050004419204014994 +0.0884926471859216606796749715613 0.637016361951827980725227007497 0.555769932270050004419204014994 +0.088497698307037353515625 -0.0443953990936279338508363423443 0.014043100178241729736328125 +0.088497698307037353515625 0.0443953990936279338508363423443 0.014043100178241729736328125 +0.0885083973407745361328125 -0.0972468018531799371917401231258 -0.150696003437042258532585492503 +0.0885083973407745361328125 0.0972468018531799371917401231258 -0.150696003437042258532585492503 +0.088563002645969390869140625 -0.702305018901824951171875 0.706345975399017333984375 +0.088563002645969390869140625 0.702305018901824951171875 0.706345975399017333984375 +0.088669002056121826171875 -0.424015212059020984991519753748 0.5498625934123992919921875 +0.088669002056121826171875 0.424015212059020984991519753748 0.5498625934123992919921875 +0.0886762976646423423110476846887 -0.04469729959964752197265625 -0.0117757998406887061382253278907 +0.0886762976646423423110476846887 0.04469729959964752197265625 -0.0117757998406887061382253278907 +0.0886780977249145424545773153113 -0.179679158329963672979801003748 -0.286969560384750355108707253748 +0.0886780977249145424545773153113 0.179679158329963672979801003748 -0.286969560384750355108707253748 +0.0886892020702362143813601846887 -0.0172529995441436760639231096093 0.04285509884357452392578125 +0.0886892020702362143813601846887 0.0172529995441436760639231096093 0.04285509884357452392578125 +0.088704250752925872802734375 -0.1836972534656524658203125 -0.1445229947566986083984375 +0.088704250752925872802734375 0.1836972534656524658203125 -0.1445229947566986083984375 +0.0887242488563060732742471259371 -0.273069450259208701403679242503 0.346498650312423717156917746252 +0.0887242488563060732742471259371 0.273069450259208701403679242503 0.346498650312423717156917746252 +0.08874084986746311187744140625 -0.82651366293430328369140625 -0.177482548356056202276676003748 +0.08874084986746311187744140625 0.82651366293430328369140625 -0.177482548356056202276676003748 +0.0887456476688384954254473768742 -0.197577807307243336065738503748 0.27493129670619964599609375 +0.0887456476688384954254473768742 0.197577807307243336065738503748 0.27493129670619964599609375 +0.0888239979743957464020098768742 -0.105346199870109555329911188437 0.0592660501599311800857705634371 +0.0888239979743957464020098768742 0.105346199870109555329911188437 0.0592660501599311800857705634371 +0.0888364970684051569183026231258 -0.0322138011455535902549662807814 0.0327161014080047593544087192186 +0.0888364970684051569183026231258 0.0322138011455535902549662807814 0.0327161014080047593544087192186 +0.0889178991317749051193075615629 -0.0330601990222930894325337192186 -0.0316327989101409939864950615629 +0.0889178991317749051193075615629 0.0330601990222930894325337192186 -0.0316327989101409939864950615629 +0.0889695025980472564697265625 -0.273815612494945515020816628748 -0.799755650758743219519431022491 +0.0889695025980472564697265625 0.273816448450088512078792746252 -0.799755650758743219519431022491 +0.08899439871311187744140625 -0.273894292116165172235042746252 -0.084035396575927734375 +0.08899439871311187744140625 0.273894292116165172235042746252 -0.084035396575927734375 +0.08906824886798858642578125 -0.16687475144863128662109375 0.163461744785308837890625 +0.08906824886798858642578125 0.16687475144863128662109375 0.163461744785308837890625 +0.0890731990337371853927450615629 -0.274142850935459148065120871252 0.79963238537311553955078125 +0.0890731990337371853927450615629 0.274142850935459148065120871252 0.79963238537311553955078125 +0.0890749990940093994140625 -0.44646251201629638671875 0.20672850310802459716796875 +0.0890749990940093994140625 0.44646251201629638671875 0.20672850310802459716796875 +0.0890864014625549344161825615629 -0.378479194641113292352230246252 0.0938996016979217612563601846887 +0.0890864014625549344161825615629 0.378479194641113292352230246252 0.0938996016979217612563601846887 +0.089098997414112091064453125 -0.085357248783111572265625 -0.2174292504787445068359375 +0.089098997414112091064453125 0.085357248783111572265625 -0.2174292504787445068359375 +0.0891008019447326743422976846887 -0.0453987002372741726974325615629 0 +0.0891008019447326743422976846887 0.0453987002372741726974325615629 0 +0.0891383469104766734680822537484 -0.274344000220298755987613503748 0.198216548562049843518195757497 +0.0891383469104766734680822537484 0.274344000220298755987613503748 0.198216548562049843518195757497 +0.08914150297641754150390625 -0.4703710079193115234375 0.14423899352550506591796875 +0.08914150297641754150390625 0.4703710079193115234375 0.14423899352550506591796875 +0.0891460448503494234939736884371 -0.0935819461941718999664630018742 -0.325261992216110185083266514994 +0.0891460448503494234939736884371 0.0935819461941718999664630018742 -0.325261992216110185083266514994 +0.0891662001609802301604901231258 -0.015691600739955902099609375 -0.178334403038024918997095369377 +0.0891662001609802301604901231258 0.015691600739955902099609375 -0.178334403038024918997095369377 +0.08918750286102294921875 -0.02201139926910400390625 -0.0395107001066207913497763115629 +0.08918750286102294921875 0.02201139926910400390625 -0.0395107001066207913497763115629 +0.0891988456249237088302450615629 -0.0892334997653961153885049384371 -0.0811231523752212468902911268742 +0.0891988456249237088302450615629 0.0892334997653961153885049384371 -0.0811231523752212468902911268742 +0.0892517983913421741881677462516 -0.0399765014648437513877787807814 0.020880199968814849853515625 +0.0892517983913421741881677462516 0.0399765014648437513877787807814 0.020880199968814849853515625 +0.0892541974782943697830361884371 -0.587310612201690673828125 -0.0842592000961303738693075615629 +0.0892541974782943697830361884371 0.587310612201690673828125 -0.0842592000961303738693075615629 +0.089284002780914306640625 -0.0648679971694946372329226846887 -0.792351198196411199425881477509 +0.089284002780914306640625 0.0648679971694946372329226846887 -0.792351198196411199425881477509 +0.0893024027347564808287927462516 -0.0322284013032913194130024692186 -0.3885695934295654296875 +0.0893024027347564808287927462516 0.0322284013032913194130024692186 -0.3885695934295654296875 +0.0893164992332458607116052462516 -0.0361589014530181926398988423443 0.0267412006855011000205912807814 +0.0893164992332458607116052462516 0.0361589014530181926398988423443 0.0267412006855011000205912807814 +0.08933325111865997314453125 -0.59448373317718505859375 0.44845126569271087646484375 +0.08933325111865997314453125 0.59448373317718505859375 0.44845126569271087646484375 +0.0893415033817291232010049384371 -0.0199697993695735938335378278907 0.285690897703170743060496761245 +0.0893415033817291232010049384371 0.0199697993695735938335378278907 0.285690897703170743060496761245 +0.0893508031964302118499432481258 -0.274997246265411388055355246252 0.467859703302383467260483485006 +0.0893508031964302118499432481258 0.274997246265411388055355246252 0.467859703302383467260483485006 +0.0894127517938613919357138115629 -0.049851000308990478515625 0.10963694751262664794921875 +0.0894127517938613919357138115629 0.049851000308990478515625 0.10963694751262664794921875 +0.0894420027732849148849325615629 0 -0.178885805606842057668970369377 +0.0894421994686126764495526231258 -0.105145394802093505859375 0.144722402095794677734375 +0.0894421994686126764495526231258 0.105145394802093505859375 0.144722402095794677734375 +0.0894424974918365534026776231258 0 0.04472149908542633056640625 +0.0894432008266449057876101846887 -0.170129597187042236328125 -0.0552793979644775404502787807814 +0.0894432008266449057876101846887 0.170129597187042236328125 -0.0552793979644775404502787807814 +0.0895791023969650240799111884371 -0.0650822997093200711349325615629 -0.101192253828048708830245061563 +0.0895791023969650240799111884371 0.0650822997093200711349325615629 -0.101192253828048708830245061563 +0.0895792007446289118011151231258 0 -0.794968795776367254113381477509 +0.0895936012268066517272302462516 0 -0.389837193489074751440170985006 +0.0896153986454010093032351846887 -0.148944795131683349609375 0.0989167988300323486328125 +0.0896153986454010093032351846887 0.148944795131683349609375 0.0989167988300323486328125 +0.0896651029586792019943075615629 -0.0368512988090515178352113423443 -0.0245386004447937025596537807814 +0.0896651029586792019943075615629 0.0368512988090515178352113423443 -0.0245386004447937025596537807814 +0.0896687999367713900467080634371 0 0.643785348534584023205695757497 +0.08971560001373291015625 -0.040542900562286376953125 -0.0175322994589805596088449846093 +0.08971560001373291015625 0.040542900562286376953125 -0.0175322994589805596088449846093 +0.08973164856433868408203125 -0.09849254786968231201171875 0.0689017519354820223709268134371 +0.08973164856433868408203125 0.09849254786968231201171875 0.0689017519354820223709268134371 +0.0897527992725372369964276231258 -0.105397605895996102076672684689 0.7879312038421630859375 +0.0897527992725372369964276231258 0.105397605895996102076672684689 0.7879312038421630859375 +0.08979029953479766845703125 -0.372198155522346529888721988755 0.236444851756095891781583873126 +0.08979029953479766845703125 0.372198155522346529888721988755 0.236444851756095891781583873126 +0.0898280531167984092055789346887 -0.276457999646663676873714621252 -0.58137948811054229736328125 +0.0898280531167984092055789346887 0.276457999646663676873714621252 -0.58137948811054229736328125 +0.0898293510079383877853231865629 -0.61818574368953704833984375 -0.179658043384552018606470369377 +0.0898293510079383877853231865629 0.61818574368953704833984375 -0.179658043384552018606470369377 +0.0898370027542114285568075615629 -0.172533595561981223376335492503 0.04649139940738677978515625 +0.0898370027542114285568075615629 0.172533595561981223376335492503 0.04649139940738677978515625 +0.0898594021797180231292401231258 -0.0266140013933181783511994211722 0.176683402061462407894865123126 +0.0898594021797180231292401231258 0.0266140013933181783511994211722 0.176683402061462407894865123126 +0.089867003262042999267578125 -0.21004350483417510986328125 -0.1015167534351348876953125 +0.089867003262042999267578125 0.21004350483417510986328125 -0.1015167534351348876953125 +0.0898789465427398681640625 -0.0405932977795600904991069057814 -0.113022002577781666143863503748 +0.0898789465427398681640625 0.0405932977795600904991069057814 -0.113022002577781666143863503748 +0.0898842021822929271301916287484 -0.322671645879745450091746761245 0.101508049666881552952624190311 +0.0898842021822929271301916287484 0.322671645879745450091746761245 0.101508049666881552952624190311 +0.0899385005235671941559161268742 -0.212689501047134382760717130623 0.191505306959152216128572376874 +0.0899385005235671941559161268742 0.212689501047134382760717130623 0.191505306959152216128572376874 +0.0900784492492675697983273153113 -0.0910233020782470619858273153113 0.0781064987182617104233273153113 +0.0900784492492675697983273153113 0.0910233020782470619858273153113 0.0781064987182617104233273153113 +0.0900969028472900362869424384371 -0.2772915065288543701171875 0.0706544995307922391036825615629 +0.0900969028472900362869424384371 0.2772915065288543701171875 0.0706544995307922391036825615629 +0.0901062488555908203125 -0.1152195036411285400390625 0.20274449884891510009765625 +0.0901062488555908203125 0.1152195036411285400390625 0.20274449884891510009765625 +0.090120501816272735595703125 -0.2773675024509429931640625 0.40613448619842529296875 +0.090120501816272735595703125 0.2773675024509429931640625 0.40613448619842529296875 +0.0901715993881225669204226846887 -0.105631995201110842619307561563 0.375114393234252940789730246252 +0.0901715993881225669204226846887 0.105631995201110842619307561563 0.375114393234252940789730246252 +0.0902655005455017117599325615629 -0.0213020995259285000900106865629 0.0373944997787475572059712192186 +0.0902655005455017117599325615629 0.0213020995259285000900106865629 0.0373944997787475572059712192186 +0.0903204977512359619140625 -0.0151546999812126170076309605861 -0.0401564002037048395354901231258 +0.0903204977512359619140625 0.0151546999812126170076309605861 -0.0401564002037048395354901231258 +0.0904099047183990478515625 -0.590734899044036865234375 -0.364497703313827470239516514994 +0.0904099047183990478515625 0.590734899044036865234375 -0.364497703313827470239516514994 +0.0904276013374328696547976846887 -0.0106493003666400919832168980861 0.0413453996181488078742738423443 +0.0904276013374328696547976846887 0.0106493003666400919832168980861 0.0413453996181488078742738423443 +0.09044100344181060791015625 -0.115886253118515011872879938437 0.0298460997641086557552458913278 +0.09044100344181060791015625 0.115886253118515011872879938437 0.0298460997641086557552458913278 +0.090449996292591094970703125 -0.065715752542018890380859375 0.22360725700855255126953125 +0.090449996292591094970703125 0.065715752542018890380859375 0.22360725700855255126953125 +0.0904510021209716796875 -0.14694474637508392333984375 -0.18090300261974334716796875 +0.0904510021209716796875 0.14694474637508392333984375 -0.18090300261974334716796875 +0.0905880033969879150390625 -0.06581600010395050048828125 0.993710994720458984375 +0.0905880033969879150390625 0.06581600010395050048828125 0.993710994720458984375 +0.0906035006046295166015625 -0.06582699716091156005859375 0.4872964918613433837890625 +0.0906035006046295166015625 0.06582699716091156005859375 0.4872964918613433837890625 +0.0906287025660276329697140340613 -0.616499033570289567407485264994 -0.578113037347793512488181022491 +0.0906287025660276329697140340613 0.616499033570289567407485264994 -0.578113037347793512488181022491 +0.090631000697612762451171875 -0.14741100370883941650390625 -0.984914004802703857421875 +0.090631000697612762451171875 0.14741100370883941650390625 -0.984914004802703857421875 +0.0906450033187866238693075615629 -0.588889789581298783716079014994 0.0706547990441322298904580634371 +0.0906450033187866238693075615629 0.588889789581298783716079014994 0.0706547990441322298904580634371 +0.0906476020812988364516726846887 -0.385544395446777377056690738755 -0.05602359771728515625 +0.0906476020812988364516726846887 -0.145590603351593017578125 -0.102890002727508547697432561563 +0.0906476020812988364516726846887 0.145590603351593017578125 -0.102890002727508547697432561563 +0.0906476020812988364516726846887 0.385544395446777377056690738755 -0.05602359771728515625 +0.0907442986965179554381677462516 -0.0414269000291824368575888115629 0.00701979994773864815482689039072 +0.0907442986965179554381677462516 0.0414269000291824368575888115629 0.00701979994773864815482689039072 +0.090747497975826263427734375 -0.1480000019073486328125 -0.4688934981822967529296875 +0.090747497975826263427734375 0.1480000019073486328125 -0.4688934981822967529296875 +0.09075795114040374755859375 -0.105435597896575930509932561563 -0.0560920491814613300651792826557 +0.09075795114040374755859375 0.105435597896575930509932561563 -0.0560920491814613300651792826557 +0.0907646000385284451583700615629 -0.0415592998266220148284588731258 -0.00588279999792575870876110144536 +0.0907646000385284451583700615629 0.0415592998266220148284588731258 -0.00588279999792575870876110144536 +0.090798199176788330078125 -0.178201198577880859375 0 +0.090798199176788330078125 0.178201198577880859375 0 +0.0908052027225494384765625 -0.0261546999216079739669638115629 -0.0327161014080047593544087192186 +0.0908052027225494384765625 0.0261546999216079739669638115629 -0.0327161014080047593544087192186 +0.09080524742603302001953125 -0.0166510008275508880615234375 0.2323297560214996337890625 +0.09080524742603302001953125 0.0166510008275508880615234375 0.2323297560214996337890625 +0.0908109001815319144546023721887 -0.103003203123807909880049749063 -0.4285368025302886962890625 +0.0908109001815319144546023721887 0.103003203123807909880049749063 -0.4285368025302886962890625 +0.0908656001091003445724325615629 -0.792836809158325217516960492503 -0.0561583995819091852386151231258 +0.0908656001091003445724325615629 0.792836809158325217516960492503 -0.0561583995819091852386151231258 +0.0909355998039245716491052462516 -0.176567399501800559313835492503 0.023551799356937408447265625 +0.0909355998039245716491052462516 0.176567399501800559313835492503 0.023551799356937408447265625 +0.0910019993782043568053552462516 -0.175868594646453879626335492503 -0.0280864000320434591129181711722 +0.0910019993782043568053552462516 0.175868594646453879626335492503 -0.0280864000320434591129181711722 +0.0910135984420776394943075615629 -0.0082240998744964599609375 -0.04060649871826171875 +0.0910135984420776394943075615629 0.0082240998744964599609375 -0.04060649871826171875 +0.0911179482936859130859375 -0.1157758533954620361328125 -0.0281686507165431962440571567186 +0.0911179482936859130859375 0.1157758533954620361328125 -0.0281686507165431962440571567186 +0.0911907970905304066100427462516 -0.0264167994260787984683869211722 0.3885695934295654296875 +0.0911907970905304066100427462516 0.0264167994260787984683869211722 0.3885695934295654296875 +0.0912411987781524685958700615629 -0.2808167934417724609375 0.269846010208129871710269753748 +0.0912411987781524685958700615629 0.2808167934417724609375 0.269846010208129871710269753748 +0.0913230001926422230162927462516 0 -0.0407445996999740642219300923443 +0.0913648501038551302810830634371 -0.4009513556957244873046875 -0.182730156183242814504907869377 +0.0913648501038551302810830634371 0.4009513556957244873046875 -0.182730156183242814504907869377 +0.0913685977458953968444177462516 -0.0255176991224288947368581403907 0.0316327005624771132041850307814 +0.0913685977458953968444177462516 0.0255176991224288947368581403907 0.0316327005624771132041850307814 +0.0914723992347717396178552462516 -0.386557197570800814556690738755 0.0469723999500274713714276231258 +0.0914723992347717396178552462516 0.386557197570800814556690738755 0.0469723999500274713714276231258 +0.091508500277996063232421875 -0.48032701015472412109375 -0.104461498558521270751953125 +0.091508500277996063232421875 0.48032701015472412109375 -0.104461498558521270751953125 +0.091572247445583343505859375 -0.21623225510120391845703125 0.08577950298786163330078125 +0.091572247445583343505859375 0.21623225510120391845703125 0.08577950298786163330078125 +0.0915909498929977500258914346887 -0.478346547484397921490284488755 -0.255529998242855105328175113755 +0.0915909498929977500258914346887 0.478346547484397921490284488755 -0.255529998242855105328175113755 +0.091681003570556640625 -0.77257001399993896484375 -0.628274977207183837890625 +0.091681003570556640625 0.77257001399993896484375 -0.628274977207183837890625 +0.0917051970958709800063601846887 -0.0831182003021240234375 -0.157103395462036138363615123126 +0.0917051970958709800063601846887 0.0831182003021240234375 -0.157103395462036138363615123126 +0.0917064510285854478377487453145 -0.0666280999779701316176883096887 -0.538192051649093672338608485006 +0.0917064510285854478377487453145 0.0666280999779701316176883096887 -0.538192051649093672338608485006 +0.0917302012443542563735476846887 -0.00406400002539157850084405865232 0.039611399173736572265625 +0.0917302012443542563735476846887 0.00406400002539157850084405865232 0.039611399173736572265625 +0.0917325004935264642913494981258 -0.0892732501029968317229901231258 0.431410950422286998406917746252 +0.0917325004935264642913494981258 0.0892732501029968317229901231258 0.431410950422286998406917746252 +0.0917729973793029868422976846887 -0.0371744006872177165656800923443 0.0139920994639396670949915701954 +0.0917729973793029868422976846887 0.0371744006872177165656800923443 0.0139920994639396670949915701954 +0.0917856037616729680816973768742 -0.282485103607177712170539507497 -0.0421607986092567416092080634371 +0.0917856037616729680816973768742 0.282485103607177712170539507497 -0.0421607986092567416092080634371 +0.0918223977088928333678552462516 -0.793318414688110373766960492503 0.0470623999834060696700888115629 +0.0918223977088928333678552462516 0.793318414688110373766960492503 0.0470623999834060696700888115629 +0.0918241024017334012130575615629 -0.03012549877166748046875 -0.02570579946041107177734375 +0.0918241024017334012130575615629 0.03012549877166748046875 -0.02570579946041107177734375 +0.0918834030628204317947549384371 -0.329565954208373979028579014994 -0.0737814001739025004944494412484 +0.0918834030628204317947549384371 0.329565954208373979028579014994 -0.0737814001739025004944494412484 +0.0918989986181259072006710653113 -0.0591199502348899799675230326557 0.10275900363922119140625 +0.0918989986181259072006710653113 0.0591199502348899799675230326557 0.10275900363922119140625 +0.0919410020112991221985510037484 -0.536035624146461442407485264994 -0.778917378187179543225227007497 +0.0919410020112991221985510037484 0.536035624146461442407485264994 -0.778917378187179543225227007497 +0.0919553995132446344573651231258 -0.0375034004449844374229350307814 -0.011734999716281890869140625 +0.0919553995132446344573651231258 0.0375034004449844374229350307814 -0.011734999716281890869140625 +0.0919782042503356905838174384371 -0.0915621042251586886306924384371 -0.270474296808242808953792746252 +0.0919782042503356905838174384371 0.0915621042251586886306924384371 -0.270474296808242808953792746252 +0.0919802010059356800475427462516 -0.0668273985385894747635049384371 0.164540994167327897512720369377 +0.0919802010059356800475427462516 0.0668273985385894747635049384371 0.164540994167327897512720369377 +0.09198839962482452392578125 -0.581566298007964999072783029987 0.378574711084365800317641514994 +0.09198839962482452392578125 0.581566298007964999072783029987 0.378574711084365800317641514994 +0.0919947981834411676604901231258 -0.0296002000570297248149831403907 0.02570579946041107177734375 +0.0919947981834411676604901231258 0.0296002000570297248149831403907 0.02570579946041107177734375 +0.0920041501522064208984375 -0.283154198527336087298778011245 -0.184008300304412841796875 +0.0920041501522064208984375 0.283154198527336087298778011245 -0.184008300304412841796875 +0.0920591980218887356857138115629 -0.283329892158508289679019753748 0.0353456988930702167839292826557 +0.0920591980218887356857138115629 0.283329892158508289679019753748 0.0353456988930702167839292826557 +0.0920991983264684704879599053129 -0.831750491261482260973991742503 0.149024545401334751471011941248 +0.0920991983264684704879599053129 0.831750491261482260973991742503 0.149024545401334751471011941248 +0.0921082973480224637130575615629 -0.0334688007831573514083700615629 0.0198973998427391073062775461722 +0.0921082973480224637130575615629 0.0334688007831573514083700615629 0.0198973998427391073062775461722 +0.0921464979648590198912927462516 -0.0147412002086639414705215855861 0.0359405994415283244758363423443 +0.0921464979648590198912927462516 0.0147412002086639414705215855861 0.0359405994415283244758363423443 +0.0921539962291717529296875 -0.117884847521781910284488503748 0.0105265494436025622976282889454 +0.0921539962291717529296875 0.117884847521781910284488503748 0.0105265494436025622976282889454 +0.0921778023242950522719851846887 -0.0339204013347625746299662807814 -0.0187791004776954664756694057814 +0.0921778023242950522719851846887 0.0339204013347625746299662807814 -0.0187791004776954664756694057814 +0.0921907007694244412521200615629 -0.0191777005791664151290731865629 -0.0336614012718200669715962192186 +0.0921907007694244412521200615629 0.0191777005791664151290731865629 -0.0336614012718200669715962192186 +0.0922131031751632634918536268742 -0.0301777504384517641922158759371 -0.11439420282840728759765625 +0.0922131031751632634918536268742 0.0301777504384517641922158759371 -0.11439420282840728759765625 +0.0922446012496948297698651231258 -0.842443174123764015881477007497 -0.30295349657535552978515625 +0.0922446012496948297698651231258 0.842443174123764015881477007497 -0.30295349657535552978515625 +0.0922855496406555092514523153113 -0.0100063495337963104248046875 0.117827099561691281404129938437 +0.0922855496406555092514523153113 0.0100063495337963104248046875 0.117827099561691281404129938437 +0.0923146024346351568024005018742 -0.468724179267883289679019753748 -0.511639797687530539782585492503 +0.0923146024346351568024005018742 0.468724179267883289679019753748 -0.511639797687530539782585492503 +0.09234045445919036865234375 -0.0297868497669696793983540317186 0.114394050836563107576004938437 +0.09234045445919036865234375 0.0297868497669696793983540317186 0.114394050836563107576004938437 +0.0923680543899536160568075615629 -0.1178572475910186767578125 -0.0088224001228809356689453125 +0.0923680543899536160568075615629 0.1178572475910186767578125 -0.0088224001228809356689453125 +0.0923735976219177273849325615629 -0.364483201503753628802684261245 -0.467567396163940385278579014994 +0.0923735976219177273849325615629 0.364483201503753628802684261245 -0.467567396163940385278579014994 +0.092384003102779388427734375 -0.17781950533390045166015625 0.14948375523090362548828125 +0.092384003102779388427734375 0.17781950533390045166015625 0.14948375523090362548828125 +0.0923880994319915826995526231258 -0.0382679998874664306640625 0 +0.0923880994319915826995526231258 0.0382679998874664306640625 0 +0.0923961505293846019348791287484 -0.237639847397804249151676003748 -0.239771342277526833264289507497 +0.0923961505293846019348791287484 0.237639847397804249151676003748 -0.239771342277526833264289507497 +0.0924037456512451088608273153113 -0.0793693542480468777755575615629 -0.0875332474708557101150674384371 +0.0924037456512451088608273153113 0.0793693542480468777755575615629 -0.0875332474708557101150674384371 +0.0924150019884109469314736884371 -0.0991320043802261380294638115629 -0.0642830997705459566970986884371 +0.0924150019884109469314736884371 0.0991320043802261380294638115629 -0.0642830997705459566970986884371 +0.0925121970474720028976278740629 -0.0223525492474436794643199988286 -0.54170270264148712158203125 +0.0925121970474720028976278740629 0.0223525492474436794643199988286 -0.54170270264148712158203125 +0.092583596706390380859375 -0.1657235920429229736328125 -0.232301402091979969366519753748 +0.092583596706390380859375 0.1657235920429229736328125 -0.232301402091979969366519753748 +0.09258989989757537841796875 -0.155776208639144903012052623126 0.239083492755889887027009876874 +0.09258989989757537841796875 0.155776208639144903012052623126 0.239083492755889887027009876874 +0.0927051007747650146484375 -0.285316801071166969983039507497 0 +0.0927051007747650146484375 0.285316801071166969983039507497 0 +0.0927458994090557126144247490629 0 0.440338951349258433953792746252 +0.092762999236583709716796875 -0.3522324860095977783203125 -0.3425304889678955078125 +0.092762999236583709716796875 0.3522324860095977783203125 -0.3425304889678955078125 +0.0928178995847701998611611884371 -0.331737691164016690326121761245 0.0619269013404846122017310960928 +0.0928178995847701998611611884371 0.331737691164016690326121761245 0.0619269013404846122017310960928 +0.092878997325897216796875 -0.114890801906585696134932561563 0.134809601306915299856470369377 +0.092878997325897216796875 0.114890801906585696134932561563 0.134809601306915299856470369377 +0.0928882449865341131012286268742 -0.135164402425289154052734375 0.30919630825519561767578125 +0.0928882449865341131012286268742 0.135164402425289154052734375 0.30919630825519561767578125 +0.09292455203831195831298828125 -0.469580778479576077533153011245 0.702394944429397538598891514994 +0.09292455203831195831298828125 0.469580778479576077533153011245 0.702394944429397538598891514994 +0.0929325997829437283614950615629 -0.116736996173858645353682561563 -0.133176600933074956722990123126 +0.0929325997829437283614950615629 0.116736996173858645353682561563 -0.133176600933074956722990123126 +0.0929845511913299505035723768742 -0.110656651854515078459151311563 0.0401119485497474642654580634371 +0.0929845511913299505035723768742 0.110656651854515078459151311563 0.0401119485497474642654580634371 +0.0929981037974357688247195596887 -0.562202546000480696264389735006 0.312698103487491607666015625 +0.0929981037974357688247195596887 0.562202546000480696264389735006 0.312698103487491607666015625 +0.0930064022541046142578125 -0.232778406143188482113615123126 -0.311711597442626997533920985006 +0.0930064022541046142578125 0.232778406143188482113615123126 -0.311711597442626997533920985006 +0.0930704981088638222397335653113 -0.0552769482135772663444761576557 -0.10383810102939605712890625 +0.0930704981088638222397335653113 0.0552769482135772663444761576557 -0.10383810102939605712890625 +0.0931114464998245155991085653113 -0.0184197004884481436992604841407 -0.116150549054145804661608565311 +0.0931114464998245155991085653113 0.0184197004884481436992604841407 -0.116150549054145804661608565311 +0.0931161496788263237656124715613 -0.83869135379791259765625 -0.436377762258052803723273882497 +0.0931161496788263237656124715613 0.83869135379791259765625 -0.436377762258052803723273882497 +0.0931312024593353299239950615629 0 0.176993203163146983758480246252 +0.0931528046727180536468182481258 -0.426799762248992908819644753748 0.481315258145332325323551003748 +0.0931528046727180536468182481258 0.426799762248992908819644753748 0.481315258145332325323551003748 +0.0931545972824096707443075615629 -0.0122727997601032260549525076954 -0.0342285990715026841590962192186 +0.0931545972824096707443075615629 0.0122727997601032260549525076954 -0.0342285990715026841590962192186 +0.0931598529219627297104366903113 -0.286721745133399930072215511245 0.177797210216522200143529630623 +0.0931598529219627297104366903113 0.286721745133399930072215511245 0.177797210216522200143529630623 +0.0932003974914550753494424384371 -0.15759479999542236328125 0.57138240337371826171875 +0.0932003974914550753494424384371 0.15759479999542236328125 0.57138240337371826171875 +0.0932799011468887218079260037484 -0.137487000226974465100227007497 0.679996788501739501953125 +0.0932799011468887218079260037484 0.137487000226974465100227007497 0.679996788501739501953125 +0.093293249607086181640625 -0.2211894989013671875 -0.069796502590179443359375 +0.093293249607086181640625 0.2211894989013671875 -0.069796502590179443359375 +0.09332449734210968017578125 -0.483321487903594970703125 0.087696500122547149658203125 +0.09332449734210968017578125 0.483321487903594970703125 0.087696500122547149658203125 +0.0933752000331878745376101846887 -0.166071605682373057977230246252 0.0608381986618042047698651231258 +0.0933752000331878745376101846887 0.166071605682373057977230246252 0.0608381986618042047698651231258 +0.0933784008026123102386151231258 -0.388948011398315474096420985006 0 +0.0933784008026123102386151231258 0.388948011398315474096420985006 0 +0.0933796547353267641922158759371 -0.625259715318679853979233485006 0.151096399128437058889673494377 +0.0933796547353267641922158759371 0.625259715318679853979233485006 0.151096399128437058889673494377 +0.0933991014957428061782351846887 -0.0187429994344711324527619211722 0.0304188996553421027446706403907 +0.0933991014957428061782351846887 0.0187429994344711324527619211722 0.0304188996553421027446706403907 +0.0934562027454376303969851846887 -0.16350400447845458984375 -0.0673229992389678955078125 +0.0934562027454376303969851846887 0.16350400447845458984375 -0.0673229992389678955078125 +0.0934687972068786732116052462516 -0.341054391860961925164730246252 -0.186937201023101823293970369377 +0.0934687972068786732116052462516 0.341054391860961925164730246252 -0.186937201023101823293970369377 +0.0934762001037597600738848768742 -0.762278312444686911852897992503 0.364270898699760425909488503748 +0.0934762001037597600738848768742 0.762278312444686911852897992503 0.364270898699760425909488503748 +0.0934800021350383758544921875 -0.287707507610321044921875 0.686283767223358154296875 +0.0934800021350383758544921875 0.287707507610321044921875 0.686283767223358154296875 +0.0935123980045318714537927462516 -0.02324520051479339599609375 -0.0267412006855011000205912807814 +0.0935123980045318714537927462516 0.02324520051479339599609375 -0.0267412006855011000205912807814 +0.0935298033058643424331179971887 -0.287860302627086672710987613755 0.575229188799858071057258257497 +0.0935298033058643424331179971887 0.287860302627086672710987613755 0.575229188799858071057258257497 +0.0935787022113800104339276231258 -0.00810849964618682965411533558608 0.0343115985393524156044087192186 +0.0935787022113800104339276231258 0.00810849964618682965411533558608 0.0343115985393524156044087192186 +0.09358119964599609375 -0.133874404430389420950220369377 -0.365130400657653841900440738755 +0.09358119964599609375 0.133874404430389420950220369377 -0.365130400657653841900440738755 +0.0936220496892928993881710653113 -0.09234555065631866455078125 -0.0721609488129615755935830634371 +0.0936220496892928993881710653113 0.09234555065631866455078125 -0.0721609488129615755935830634371 +0.0936392962932586642166299384371 -0.248142904043197609631477007497 -0.140202900767326360531583873126 +0.0936392962932586642166299384371 0.248142904043197609631477007497 -0.140202900767326360531583873126 +0.0936760008335113525390625 -0.395083010196685791015625 0.29177749156951904296875 +0.0936760008335113525390625 0.395083010196685791015625 0.29177749156951904296875 +0.0936980970203876578628054971887 -0.674487912654876731188835492503 0.588462281227111860815170985006 +0.0936980970203876578628054971887 0.674487912654876731188835492503 0.588462281227111860815170985006 +0.0937282979488372886001101846887 -0.0341430991888046278526225307814 0.00701769962906837515420610529304 +0.0937282979488372886001101846887 0.0341430991888046278526225307814 0.00701769962906837515420610529304 +0.0937548995018005482116052462516 -0.0342844009399414090255575615629 -0.005881600081920623779296875 +0.0937548995018005482116052462516 0.0342844009399414090255575615629 -0.005881600081920623779296875 +0.0937853962182998573959835653113 -0.0681388512253761208237179403113 0.0951914995908737099350460653113 +0.0937853962182998573959835653113 0.0681388512253761208237179403113 0.0951914995908737099350460653113 +0.0937975466251373263260049384371 -0.00619515012949705106554132427732 -0.11689169704914093017578125 +0.0937975466251373263260049384371 0.00619515012949705106554132427732 -0.11689169704914093017578125 +0.0938000023365020835219851846887 -0.00412500016391277330579656634768 -0.0344173014163970947265625 +0.0938000023365020835219851846887 0.00412500016391277330579656634768 -0.0344173014163970947265625 +0.0938034512102603884597940009371 -0.804267427325248696057258257497 0.258562344312667835577457253748 +0.0938034512102603884597940009371 0.804267427325248696057258257497 0.258562344312667835577457253748 +0.09386099874973297119140625 -0.592612802982330322265625 0 +0.09386099874973297119140625 -0.224815195798873906918302623126 0.175066494941711420230134876874 +0.09386099874973297119140625 0.224815195798873906918302623126 0.175066494941711420230134876874 +0.09386099874973297119140625 0.592612802982330322265625 0 +0.0938877999782562339126101846887 0 0.03442490100860595703125 +0.0939542524516582544524823106258 -0.599246683716774031225327235006 0.233615194261074077264339621252 +0.0939542524516582544524823106258 0.599246683716774031225327235006 0.233615194261074077264339621252 +0.0939608998596668243408203125 -0.8751321136951446533203125 -0.187922698259353648797542746252 +0.0939608998596668243408203125 0.8751321136951446533203125 -0.187922698259353648797542746252 +0.093993999063968658447265625 -0.22410024702548980712890625 0.0586872510612010955810546875 +0.093993999063968658447265625 0.22410024702548980712890625 0.0586872510612010955810546875 +0.0940492048859596224685830634371 -0.336228907108306884765625 -0.024592049419879913330078125 +0.0940492048859596224685830634371 0.336228907108306884765625 -0.024592049419879913330078125 +0.094122998416423797607421875 -0.2003747522830963134765625 -0.116149999201297760009765625 +0.094122998416423797607421875 0.2003747522830963134765625 -0.116149999201297760009765625 +0.0941291965544223813155966240629 -0.508132350444793767785256477509 -0.188257852196693442614616742503 +0.0941291965544223813155966240629 0.508132350444793767785256477509 -0.188257852196693442614616742503 +0.09413444995880126953125 -0.110832595825195306948884876874 -0.0368080504238605457634214701557 +0.09413444995880126953125 0.110832595825195306948884876874 -0.0368080504238605457634214701557 +0.0941550962626934023758096259371 -0.521957150101661659924445757497 -0.375760444998741172106804242503 +0.0941550962626934023758096259371 0.521957150101661659924445757497 -0.375760444998741172106804242503 +0.094180501997470855712890625 -0.068425498902797698974609375 -0.22124199569225311279296875 +0.094180501997470855712890625 0.068425498902797698974609375 -0.22124199569225311279296875 +0.0941897988319397028167401231258 -0.0270622998476028470138388115629 -0.0198973998427391073062775461722 +0.0941897988319397028167401231258 0.0270622998476028470138388115629 -0.0198973998427391073062775461722 +0.0942014992237091147719851846887 -0.0228897005319595343852956403907 0.0245385006070137044742462961722 +0.0942014992237091147719851846887 0.0228897005319595343852956403907 0.0245385006070137044742462961722 +0.094203002750873565673828125 -0.289922413229942332879573996252 -0.846800100803375310754006477509 +0.094203002750873565673828125 0.289923298358917225225894753748 -0.846800100803375310754006477509 +0.0942622460424900054931640625 -0.19138200581073760986328125 -0.7190182507038116455078125 +0.0942622460424900054931640625 0.19138200581073760986328125 -0.7190182507038116455078125 +0.0942717015743255726256677462516 -0.0307655006647109992290456403907 -0.0128970995545387278474747105861 +0.0942717015743255726256677462516 0.0307655006647109992290456403907 -0.0128970995545387278474747105861 +0.0943048000335693359375 -0.397147989273071322369190738755 -0.688026380538940496300881477509 +0.0943048000335693359375 0.397147989273071322369190738755 -0.688026380538940496300881477509 +0.0943127989768981905838174384371 -0.290268900990486133917301003748 0.8466695845127105712890625 +0.0943127989768981905838174384371 0.290268900990486133917301003748 0.8466695845127105712890625 +0.0943390041589736855209835653113 -0.336415806412696805072215511245 0.0206031005829572649856729071871 +0.0943390041589736855209835653113 0.336415806412696805072215511245 0.0206031005829572649856729071871 +0.0943511009216308621505575615629 -0.03052090108394622802734375 0.0128970995545387278474747105861 +0.0943511009216308621505575615629 0.03052090108394622802734375 0.0128970995545387278474747105861 +0.0943704038858413640777911268742 -0.0976581037044525063217648153113 0.267501604557037364617855246252 +0.0943704038858413640777911268742 0.0976581037044525063217648153113 0.267501604557037364617855246252 +0.0943776011466980063735476846887 -0.0685684025287628257094851846887 -0.162453794479370139391960492503 +0.0943776011466980063735476846887 0.0685684025287628257094851846887 -0.162453794479370139391960492503 +0.0944845974445343017578125 -0.634080308675765924597556022491 -0.281096199154853787494090511245 +0.0944845974445343017578125 0.634080308675765924597556022491 -0.281096199154853787494090511245 +0.09450034797191619873046875 -0.215408197045326210705695757497 0.259170109033584561419871761245 +0.09450034797191619873046875 0.215408197045326210705695757497 0.259170109033584561419871761245 +0.0945092022418975857833700615629 -0.2044804096221923828125 0.330538797378540083471420985006 +0.0945092022418975857833700615629 0.2044804096221923828125 0.330538797378540083471420985006 +0.0945115983486175537109375 -0.0267378002405166646793244211722 0.0187791004776954664756694057814 +0.0945115983486175537109375 0.0267378002405166646793244211722 0.0187791004776954664756694057814 +0.0945395998656749780852948106258 -0.290957397222518954205128238755 -0.330009287595748934673878238755 +0.0945395998656749780852948106258 0.290957397222518954205128238755 -0.330009287595748934673878238755 +0.0945588022470474215408486884371 -0.155382853746414167916967130623 -0.299022844433784462658820757497 +0.0945588022470474215408486884371 0.155382853746414167916967130623 -0.299022844433784462658820757497 +0.0946053005754947662353515625 -0.386930698156356833727897992503 0.209366999566555023193359375 +0.0946053005754947662353515625 0.386930698156356833727897992503 0.209366999566555023193359375 +0.0946523532271385248382244981258 -0.121828847378492352571122125937 -0.6314255893230438232421875 +0.0946523532271385248382244981258 0.121828847378492352571122125937 -0.6314255893230438232421875 +0.0947212994098663441100427462516 -0.0162458002567291252826731096093 -0.0276396006345748929122763115629 +0.0947212994098663441100427462516 0.0162458002567291252826731096093 -0.0276396006345748929122763115629 +0.09477250277996063232421875 -0.1310265064239501953125 0.19065724313259124755859375 +0.09477250277996063232421875 0.1310265064239501953125 0.19065724313259124755859375 +0.0948642529547214508056640625 -0.0689222469925880459884481865629 -0.841873148083686850817741742503 +0.0948642529547214508056640625 0.0689222469925880459884481865629 -0.841873148083686850817741742503 +0.0948686957359313881577023153113 -0.212130296230316151007144753748 -0.1897383034229278564453125 +0.0948686957359313881577023153113 0.212130296230316151007144753748 -0.1897383034229278564453125 +0.0949669539928436196030148153113 -0.104555252194404604826338811563 0.050492249429225921630859375 +0.0949669539928436196030148153113 0.104555252194404604826338811563 0.050492249429225921630859375 +0.0949792981147766224303552462516 -0.0121141999959945689119278355861 0.0288475990295410170127787807814 +0.0949792981147766224303552462516 0.0121141999959945689119278355861 0.0288475990295410170127787807814 +0.0949852466583251953125 -0.16972674429416656494140625 -0.15706874430179595947265625 +0.0949852466583251953125 0.16972674429416656494140625 -0.15706874430179595947265625 +0.0950025022029876708984375 -0.454302012920379638671875 0.58913849294185638427734375 +0.0950025022029876708984375 0.454302012920379638671875 0.58913849294185638427734375 +0.0950154036283493014236611884371 -0.0766802966594695989410723768742 0.087133347988128662109375 +0.0950154036283493014236611884371 0.0766802966594695989410723768742 0.087133347988128662109375 +0.0950251489877700777908486884371 -0.0690390005707740700424679403113 -0.0932943016290664617340411268742 +0.0950251489877700777908486884371 0.0690390005707740700424679403113 -0.0932943016290664617340411268742 +0.0951057970523834228515625 -0.0309013009071350125411825615629 0 +0.0951057970523834228515625 0.0309013009071350125411825615629 0 +0.0951779007911682101150674384371 0 -0.844654345512390158923210492503 +0.095178999006748199462890625 -0.2067770063877105712890625 0.103364251554012298583984375 +0.095178999006748199462890625 0.2067770063877105712890625 0.103364251554012298583984375 +0.0952439993619918767731036268742 -0.422386801242828346936164507497 0.415353012084960948602230246252 +0.0952439993619918767731036268742 0.422386801242828346936164507497 0.415353012084960948602230246252 +0.0952888011932373074630575615629 -0.634115982055664106908920985006 0.4783480167388916015625 +0.0952888011932373074630575615629 0.634115982055664106908920985006 0.4783480167388916015625 +0.0953280031681060791015625 -0.13062299787998199462890625 -0.19065724313259124755859375 +0.0953280031681060791015625 0.13062299787998199462890625 -0.19065724313259124755859375 +0.0953623492270708056350869696871 -0.111984956264495852384932561563 0.83717690408229827880859375 +0.0953623492270708056350869696871 0.111984956264495852384932561563 0.83717690408229827880859375 +0.09539370238780975341796875 -0.353651860356330893786491742503 -0.261400499939918540270866742503 +0.09539370238780975341796875 0.353651860356330893786491742503 -0.261400499939918540270866742503 +0.0954234011471271487137002509371 -0.411769348382949817999332253748 0.15440310537815093994140625 +0.0954234011471271487137002509371 0.411769348382949817999332253748 0.15440310537815093994140625 +0.09550400078296661376953125 -0.18734599649906158447265625 0.13520525395870208740234375 +0.09550400078296661376953125 0.18734599649906158447265625 0.13520525395870208740234375 +0.0955287992954254178146200615629 -0.294002008438110362664730246252 -0.253844404220581076891960492503 +0.0955287992954254178146200615629 0.294002008438110362664730246252 -0.253844404220581076891960492503 +0.0955720514059066744705361884371 -0.113690248131752005833483565311 0.0209881491959094980404021413278 +0.0955720514059066744705361884371 0.113690248131752005833483565311 0.0209881491959094980404021413278 +0.0955750532448291778564453125 -0.1798933446407318115234375 -0.401252862811088573113948996252 +0.0955750532448291778564453125 0.1798933446407318115234375 -0.401252862811088573113948996252 +0.0956157028675079373458700615629 -0.00406420007348060659951860529304 0.0290021002292633056640625 +0.0956157028675079373458700615629 0.00406420007348060659951860529304 0.0290021002292633056640625 +0.095643095672130584716796875 0 0.336678642034530628546207253748 +0.095670998096466064453125 -0.2309697568416595458984375 0 +0.095670998096466064453125 0.2309697568416595458984375 0 +0.0956772029399871881683026231258 -0.0081500001251697540283203125 -0.0279184997081756598735768903907 +0.0956772029399871881683026231258 0.0081500001251697540283203125 -0.0279184997081756598735768903907 +0.095700800418853759765625 -0.134462797641754144839509876874 -0.112965202331542974301115123126 +0.095700800418853759765625 0.134462797641754144839509876874 -0.112965202331542974301115123126 +0.0957040011882782093444177462516 -0.0201186001300811788394806711722 -0.020880199968814849853515625 +0.0957040011882782093444177462516 0.0201186001300811788394806711722 -0.020880199968814849853515625 +0.0957077980041503850738848768742 0 0.115498951077461234349108565311 +0.09572924673557281494140625 -0.0394295990467071547080912807814 0.108541345596313468235827315311 +0.09572924673557281494140625 0.0394295990467071547080912807814 0.108541345596313468235827315311 +0.095755748450756072998046875 -0.22906099259853363037109375 0.0293577499687671661376953125 +0.095755748450756072998046875 0.22906099259853363037109375 0.0293577499687671661376953125 +0.0957956977188587216476278740629 -0.412379556894302390368522992503 0.351093062758445761950554242503 +0.0957956977188587216476278740629 0.412379556894302390368522992503 0.351093062758445761950554242503 +0.095801748335361480712890625 -0.2282454967498779296875 -0.03501474857330322265625 +0.095801748335361480712890625 0.2282454967498779296875 -0.03501474857330322265625 +0.0958396017551422230162927462516 -0.124047195911407476254240123126 0.124205601215362559930355246252 +0.0958396017551422230162927462516 0.124047195911407476254240123126 0.124205601215362559930355246252 +0.09587819874286651611328125 -0.454757988452911376953125 -0.379476606845855712890625 +0.09587819874286651611328125 0.454757988452911376953125 -0.379476606845855712890625 +0.095896899700164794921875 -0.0274690002202987691715119211722 -0.00701769962906837515420610529304 +0.095896899700164794921875 0.0274690002202987691715119211722 -0.00701769962906837515420610529304 +0.0959039986133575494964276231258 -0.04007320106029510498046875 0.170869994163513200247095369377 +0.0959039986133575494964276231258 0.04007320106029510498046875 0.170869994163513200247095369377 +0.0959094464778900146484375 -0.0696822002530097933670205634371 0.329311150312423694952457253748 +0.0959094464778900146484375 0.0696822002530097933670205634371 0.329311150312423694952457253748 +0.0959148019552230890472088731258 -0.2952004373073577880859375 0.325817558169364918096988503748 +0.0959148019552230890472088731258 0.2952004373073577880859375 0.325817558169364918096988503748 +0.0959253013134002685546875 -0.0160620003938674940635600307814 0.0232455000281333937217631557814 +0.0959253013134002685546875 0.0160620003938674940635600307814 0.0232455000281333937217631557814 +0.0959598027169704520522586221887 -0.652763682603836103979233485006 -0.612119686603546209191506477509 +0.0959598027169704520522586221887 0.652763682603836103979233485006 -0.612119686603546209191506477509 +0.0959814012050628634353799384371 -0.0395927980542182880729917826557 0.590948402881622314453125 +0.0959814012050628634353799384371 0.0395927980542182880729917826557 0.590948402881622314453125 +0.0959966003894806019225427462516 0 -0.0280117005109787008121369211722 +0.0960013985633850208678552462516 -0.0273703008890151984477956403907 0.005881600081920623779296875 +0.0960013985633850208678552462516 0.0273703008890151984477956403907 0.005881600081920623779296875 +0.0960239037871360723297442518742 -0.0697644524276256478012570028113 -0.32926039397716522216796875 +0.0960239037871360723297442518742 0.0697644524276256478012570028113 -0.32926039397716522216796875 +0.096065498888492584228515625 -0.4894259870052337646484375 -0.0351249985396862030029296875 +0.096065498888492584228515625 0.4894259870052337646484375 -0.0351249985396862030029296875 +0.0960846036672592107574786268742 -0.0451881006360054029991069057814 -0.105951753258705136384598688437 +0.0960846036672592107574786268742 0.0451881006360054029991069057814 -0.105951753258705136384598688437 +0.0960967004299163873870526231258 -0.0238673999905586256553569057814 -0.0139920994639396670949915701954 +0.0960967004299163873870526231258 0.0238673999905586256553569057814 -0.0139920994639396670949915701954 +0.0961261510848998995681924384371 -0.113797652721405018194644753748 -0.0176024995744228363037109375 +0.0961261510848998995681924384371 0.113797652721405018194644753748 -0.0176024995744228363037109375 +0.09615419805049896240234375 -0.216952192783355701788394753748 -0.551077187061309814453125 +0.09615419805049896240234375 0.216952192783355701788394753748 -0.551077187061309814453125 +0.0962446510791778592208700615629 -0.0980242520570755032638388115629 0.060234747827053070068359375 +0.0962446510791778592208700615629 0.0980242520570755032638388115629 0.060234747827053070068359375 +0.0962454020977020208160723768742 -0.0398372992873191819618305942186 0.281335794925689663958934261245 +0.0962454020977020208160723768742 0.0398372992873191819618305942186 0.281335794925689663958934261245 +0.09625375270843505859375 -0.0493177510797977447509765625 -0.22539524734020233154296875 +0.09625375270843505859375 0.0493177510797977447509765625 -0.22539524734020233154296875 +0.0963061988353729331313601846887 -0.158529603481292746813835492503 0.0747893989086151206313601846887 +0.0963061988353729331313601846887 0.158529603481292746813835492503 0.0747893989086151206313601846887 +0.0963230013847351101974325615629 -0.0801930010318756131271200615629 0.155855596065521240234375 +0.0963230013847351101974325615629 0.0801930010318756131271200615629 0.155855596065521240234375 +0.0964121997356414822677450615629 -0.0199328005313873304893412807814 0.0175321996212005615234375 +0.0964121997356414822677450615629 0.0199328005313873304893412807814 0.0175321996212005615234375 +0.0964375972747802817641726846887 -0.0237083002924919142295756557814 0.011734999716281890869140625 +0.0964375972747802817641726846887 0.0237083002924919142295756557814 0.011734999716281890869140625 +0.09649924933910369873046875 -0.033313751220703125 0.2282062470912933349609375 +0.09649924933910369873046875 0.033313751220703125 0.2282062470912933349609375 +0.09651400148868560791015625 -0.489713013172149658203125 0.02942950092256069183349609375 +0.09651400148868560791015625 0.489713013172149658203125 0.02942950092256069183349609375 +0.0965447001159191048325070028113 -0.842389109730720453406149772491 -0.0596682995557785006424111884371 +0.0965447001159191048325070028113 0.842389109730720453406149772491 -0.0596682995557785006424111884371 +0.096564151346683502197265625 -0.200007002055645005667017244377 0.3913726508617401123046875 +0.096564151346683502197265625 0.200007002055645005667017244377 0.3913726508617401123046875 +0.0965663999319076454819210653113 0 0.693307298421859674597556022491 +0.0965706527233123890319177462516 -0.178673003613948833123714621252 0.511125987768173306591279470013 +0.0965706527233123890319177462516 0.178673003613948833123714621252 0.511125987768173306591279470013 +0.0965741962194442693512286268742 -0.0199882507324218756938893903907 0.113021546602249139956697376874 +0.0965741962194442693512286268742 0.0199882507324218756938893903907 0.113021546602249139956697376874 +0.0966179497539997184096804971887 -0.297354194521904036108139735006 -0.452488291263580366674545985006 +0.0966179497539997184096804971887 0.297354194521904036108139735006 -0.452488291263580366674545985006 +0.0966329991817474337478799384371 -0.257954102754592906610042746252 0.118835100531578058413728626874 +0.0966329991817474337478799384371 0.257954102754592906610042746252 0.118835100531578058413728626874 +0.0966920472681522397140341240629 -0.63625316321849822998046875 -0.0912808001041412325760049384371 +0.0966920472681522397140341240629 0.63625316321849822998046875 -0.0912808001041412325760049384371 +0.0967347532510757363022335653113 -0.297723999619483925549445757497 0.156525246798992156982421875 +0.0967347532510757363022335653113 0.297723999619483925549445757497 0.156525246798992156982421875 +0.0967379033565521212478799384371 -0.297723999619483925549445757497 -0.6261009871959686279296875 +0.0967379033565521212478799384371 0.297723999619483925549445757497 -0.6261009871959686279296875 +0.0967393010854721013824786268742 -0.6657384932041168212890625 -0.193477892875671381167634876874 +0.0967393010854721013824786268742 0.6657384932041168212890625 -0.193477892875671381167634876874 +0.096780002117156982421875 -0.564248025417327880859375 -0.81991302967071533203125 +0.096780002117156982421875 0.564248025417327880859375 -0.81991302967071533203125 +0.0967884004116058432876101846887 -0.297889208793640170025440738755 0.248784804344177268298210492503 +0.0967884004116058432876101846887 0.297889208793640170025440738755 0.248784804344177268298210492503 +0.0967909991741180419921875 -0.08308474719524383544921875 0.21500800549983978271484375 +0.0967909991741180419921875 0.08308474719524383544921875 0.21500800549983978271484375 +0.0968169003725051907638388115629 -0.105092847347259515933259876874 -0.0456286489963531466385049384371 +0.0968169003725051907638388115629 0.105092847347259515933259876874 -0.0456286489963531466385049384371 +0.09686775505542755126953125 -0.6329302489757537841796875 -0.39053325355052947998046875 +0.09686775505542755126953125 0.6329302489757537841796875 -0.39053325355052947998046875 +0.0968711018562316977797976846887 -0.00805720016360282967338157789072 0.0234746992588043233707306711722 +0.0968711018562316977797976846887 0.00805720016360282967338157789072 0.0234746992588043233707306711722 +0.0968852967023849515060263115629 -0.0832105457782745389083700615629 0.0786717027425765935699786268742 +0.0968852967023849515060263115629 0.0832105457782745389083700615629 0.0786717027425765935699786268742 +0.0968898028135299627106036268742 -0.0908608496189117348373898153113 0.0696898519992828341385049384371 +0.0968898028135299627106036268742 0.0908608496189117348373898153113 0.0696898519992828341385049384371 +0.0968918025493621937194177462516 -0.103223001956939702816740123126 -0.141269195079803483450220369377 +0.0968918025493621937194177462516 0.103223001956939702816740123126 -0.141269195079803483450220369377 +0.0969900012016296497741052462516 -0.156040203571319591180355246252 -0.0790216028690338134765625 +0.0969900012016296497741052462516 0.156040203571319591180355246252 -0.0790216028690338134765625 +0.0970192015171051080901776231258 -0.0122799001634120944631556326954 -0.0208921998739242560649831403907 +0.0970192015171051080901776231258 0.0122799001634120944631556326954 -0.0208921998739242560649831403907 +0.0971390962600707924545773153113 -0.0827779501676559475997763115629 -0.0788149505853652926345986884371 +0.0971390962600707924545773153113 0.0827779501676559475997763115629 -0.0788149505853652926345986884371 +0.097187101840972900390625 0 0.02355130016803741455078125 +0.0972370982170105008224325615629 -0.0233441993594169644454794365629 0 +0.0972370982170105008224325615629 0.0233441993594169644454794365629 0 +0.0973693013191223033508947537484 -0.889245572686195306921774772491 -0.319784246385097503662109375 +0.0973693013191223033508947537484 0.889245572686195306921774772491 -0.319784246385097503662109375 +0.0974170029163360651214276231258 -0.169605398178100608141960492503 -0.0417605996131897028167401231258 +0.0974170029163360651214276231258 0.169605398178100608141960492503 -0.0417605996131897028167401231258 +0.0974173486232757512848223768742 -0.114060750603675833958483565311 0 +0.0974173486232757512848223768742 0.114060750603675833958483565311 0 +0.0974180996417999267578125 -0.235929000377655018194644753748 0.157629901170730585269197376874 +0.0974180996417999267578125 0.235929000377655018194644753748 0.157629901170730585269197376874 +0.0974736034870147677322549384371 -0.299996995925903287005809261245 0.510392403602600075451789507497 +0.0974736034870147677322549384371 0.299996995925903287005809261245 0.510392403602600075451789507497 +0.09750080108642578125 -0.171067404747009293997095369377 0.0350645989179611192176899692186 +0.09750080108642578125 0.171067404747009293997095369377 0.0350645989179611192176899692186 +0.0975167982280254336258096259371 -0.880676990747451760022102007497 0.157790695130825053826839621252 +0.0975167982280254336258096259371 0.880676990747451760022102007497 0.157790695130825053826839621252 +0.0975612975656986181061114393742 -0.842900815606117181921774772491 0.0500037999823689446876606723436 +0.0975612975656986181061114393742 0.842900815606117181921774772491 0.0500037999823689446876606723436 +0.09765075147151947021484375 -0.0297689996659755706787109375 -0.2282062470912933349609375 +0.09765075147151947021484375 0.0297689996659755706787109375 -0.2282062470912933349609375 +0.0976656019687652671157351846887 -0.00413010008633136766614812884768 -0.02108030021190643310546875 +0.0976656019687652671157351846887 0.00413010008633136766614812884768 -0.02108030021190643310546875 +0.0976912021636962973891726846887 -0.0161004006862640394737162807814 -0.014043100178241729736328125 +0.0976912021636962973891726846887 0.0161004006862640394737162807814 -0.014043100178241729736328125 +0.0977011024951934814453125 -0.0121191002428531653667409528907 0.0175392001867294318462331403907 +0.0977011024951934814453125 0.0121191002428531653667409528907 0.0175392001867294318462331403907 +0.09770549833774566650390625 -0.171340799331665044613615123126 0.226044291257858270816072376874 +0.09770549833774566650390625 0.171340799331665044613615123126 0.226044291257858270816072376874 +0.097763501107692718505859375 -0.1929509937763214111328125 0.4507904946804046630859375 +0.097763501107692718505859375 0.1929509937763214111328125 0.4507904946804046630859375 +0.0977639973163604847350427462516 -0.0198223993182182339767294365629 -0.00701979994773864815482689039072 +0.0977639973163604847350427462516 0.0198223993182182339767294365629 -0.00701979994773864815482689039072 +0.0978042006492614857116052462516 -0.013348199427127838134765625 0.173942995071411143914730246252 +0.0978042006492614857116052462516 0.013348199427127838134765625 0.173942995071411143914730246252 +0.0978582024574279896178552462516 -0.0197272002696990966796875 0.00588279999792575870876110144536 +0.0978582024574279896178552462516 0.0197272002696990966796875 0.00588279999792575870876110144536 +0.09788875281810760498046875 -0.18966175615787506103515625 -0.13017775118350982666015625 +0.09788875281810760498046875 0.18966175615787506103515625 -0.13017775118350982666015625 +0.0978957027196884072006710653113 -0.0711246013641357449630575615629 -0.274513506889343228412059261245 +0.0978957027196884072006710653113 0.0711246013641357449630575615629 -0.274513506889343228412059261245 +0.0979224026203155545333700615629 -0.353985595703125044408920985006 0.158446800708770763055355246252 +0.0979224026203155545333700615629 0.353985595703125044408920985006 0.158446800708770763055355246252 +0.0979824990034103421310263115629 -0.491108763217926069799545985006 0.227401353418827084640341240629 +0.0979824990034103421310263115629 0.491108763217926069799545985006 0.227401353418827084640341240629 +0.0980036020278930719573651231258 -0.173944997787475602590845369377 0.0117655999958515174175222028907 +0.0980036020278930719573651231258 0.173944997787475602590845369377 0.0117655999958515174175222028907 +0.0980130970478057944594851846887 -0.0159611001610755927349050153907 0.0117757998406887061382253278907 +0.0980130970478057944594851846887 0.0159611001610755927349050153907 0.0117757998406887061382253278907 +0.098016999661922454833984375 -0.882833003997802734375 -0.4593450129032135009765625 +0.098016999661922454833984375 0.882833003997802734375 -0.4593450129032135009765625 +0.0980192452669143565735510037484 -0.0424164988100528689285440009371 -0.333306047320365894659488503748 +0.0980192452669143565735510037484 0.0424164988100528689285440009371 -0.333306047320365894659488503748 +0.0980556532740593095320846828145 -0.517408108711242764599091970013 0.158662892878055572509765625 +0.0980556532740593095320846828145 0.517408108711242764599091970013 0.158662892878055572509765625 +0.0980835020542144692123898153113 -0.145560604333877546823217130623 -0.243293398618698114566072376874 +0.0980835020542144692123898153113 0.145560604333877546823217130623 -0.243293398618698114566072376874 +0.0981266021728515736022302462516 -0.173706805706024175472990123126 -0.0140395998954772963096537807814 +0.0981266021728515736022302462516 0.173706805706024175472990123126 -0.0140395998954772963096537807814 +0.0981587469577789306640625 -0.19596000015735626220703125 0.120268248021602630615234375 +0.0981587469577789306640625 0.19596000015735626220703125 0.120268248021602630615234375 +0.0981670528650283868987713731258 -0.420808044075965892449886496252 -0.125633704662323014700220369377 +0.0981670528650283868987713731258 0.420808044075965892449886496252 -0.125633704662323014700220369377 +0.0981987535953521700760049384371 -0.637963938713073774877670985006 0.0765426989644765881637411553129 +0.0981987535953521700760049384371 0.637963938713073774877670985006 0.0765426989644765881637411553129 +0.09821750223636627197265625 -0.23545549809932708740234375 -0.4300164878368377685546875 +0.09821750223636627197265625 0.23545549809932708740234375 -0.4300164878368377685546875 +0.098241500556468963623046875 -0.414220988750457763671875 -0.262239992618560791015625 +0.098241500556468963623046875 0.414220988750457763671875 -0.262239992618560791015625 +0.0983092010021209827819177462516 -0.132567799091339116879240123126 0.112964999675750743524105246252 +0.0983092010021209827819177462516 0.132567799091339116879240123126 0.112964999675750743524105246252 +0.0983255982398986844161825615629 -0.0549377977848053006271200615629 -0.165269196033477783203125 +0.0983255982398986844161825615629 0.0549377977848053006271200615629 -0.165269196033477783203125 +0.0983381986618042103209802462516 -0.00406769998371601156778032404304 0.0176933005452156073833425153907 +0.0983381986618042103209802462516 0.00406769998371601156778032404304 0.0176933005452156073833425153907 +0.09835325181484222412109375 -0.010168500244617462158203125 -0.22961549460887908935546875 +0.09835325181484222412109375 0.010168500244617462158203125 -0.22961549460887908935546875 +0.0983907021582126617431640625 -0.497203177213668856548878238755 0.743712294101715132299545985006 +0.0983907021582126617431640625 0.497203177213668856548878238755 0.743712294101715132299545985006 +0.0983990997076034518142861884371 -0.235712993144989002569644753748 -0.157343995571136457956029630623 +0.0983990997076034518142861884371 0.235712993144989002569644753748 -0.157343995571136457956029630623 +0.0984008967876434242905148153113 -0.108794698119163507632478626874 0.0313202999532222747802734375 +0.0984008967876434242905148153113 0.108794698119163507632478626874 0.0313202999532222747802734375 +0.0984048008918762262542401231258 -0.130370402336120599917634876874 0.365130400657653841900440738755 +0.0984048008918762262542401231258 0.130370402336120599917634876874 0.365130400657653841900440738755 +0.0985276490449905339996661268742 -0.0488291993737220778037944057814 0.10201965272426605224609375 +0.0985276490449905339996661268742 0.0488291993737220778037944057814 0.10201965272426605224609375 +0.098534099757671356201171875 -0.0142366005107760415504536410936 -0.335541850328445412365852007497 +0.098534099757671356201171875 0.0142366005107760415504536410936 -0.335541850328445412365852007497 +0.098558999598026275634765625 -0.6231067478656768798828125 0.40561576187610626220703125 +0.098558999598026275634765625 0.6231067478656768798828125 0.40561576187610626220703125 +0.098582498729228973388671875 -0.3034105002880096435546875 0.384998500347137451171875 +0.098582498729228973388671875 0.3034105002880096435546875 0.384998500347137451171875 +0.0986063987016677773178585653113 -0.0348676510155200916618589701557 -0.1075222492218017578125 +0.0986063987016677773178585653113 0.0348676510155200916618589701557 -0.1075222492218017578125 +0.09861099720001220703125 -0.149956798553466802426115123126 0.0882543981075286920745526231258 +0.09861099720001220703125 0.149956798553466802426115123126 0.0882543981075286920745526231258 +0.0986715018749237116058026231258 -0.00823220014572143519993030480464 -0.0140058994293212890625 +0.0986715018749237116058026231258 0.00823220014572143519993030480464 -0.0140058994293212890625 +0.0987279027700424111069210653113 -0.263802605867385853155582253748 -0.103252199292182919587723688437 +0.0987279027700424111069210653113 0.263802605867385853155582253748 -0.103252199292182919587723688437 +0.0987689018249511829772302462516 -0.0156432002782821676090119211722 0 +0.0987689018249511829772302462516 0.0156432002782821676090119211722 0 +0.0987724542617797740540197537484 -0.303985846042633012231704014994 -0.142606453597545618228181751874 +0.0987724542617797740540197537484 0.303985846042633012231704014994 -0.142606453597545618228181751874 +0.098798252642154693603515625 -0.14361350238323211669921875 0.17920400202274322509765625 +0.098798252642154693603515625 0.14361350238323211669921875 0.17920400202274322509765625 +0.09882509708404541015625 -0.0991321474313735934158486884371 -0.0539111986756324740310830634371 +0.09882509708404541015625 0.0991321474313735934158486884371 -0.0539111986756324740310830634371 +0.0988893002271652166168536268742 -0.0596015989780425969879473768742 -0.0957525014877319280426348768742 +0.0988893002271652166168536268742 0.0596015989780425969879473768742 -0.0957525014877319280426348768742 +0.0989035468548536272903604071871 -0.711959463357925370630141514994 0.621154630184173606188835492503 +0.0989035468548536272903604071871 0.711959463357925370630141514994 0.621154630184173606188835492503 +0.0989085026085376739501953125 -0.502204477787017822265625 -0.5481854975223541259765625 +0.0989085026085376739501953125 0.502204477787017822265625 -0.5481854975223541259765625 +0.0989748001098632868011151231258 -0.807118213176727272717414507497 0.385698598623275767938167746252 +0.0989748001098632868011151231258 0.807118213176727272717414507497 0.385698598623275767938167746252 +0.0989760994911193930922976846887 -0.00811410024762153694877220289072 0.0117430001497268680227259451954 +0.0989760994911193930922976846887 0.00811410024762153694877220289072 0.0117430001497268680227259451954 +0.0990076005458831870376101846887 0 -0.0140535995364189161827006557814 +0.0990315020084381186782351846887 -0.011975400149822235107421875 -0.0070249997079372406005859375 +0.0990315020084381186782351846887 0.011975400149822235107421875 -0.0070249997079372406005859375 +0.0991138994693756131271200615629 -0.0119076997041702280916153355861 0.00588579997420311026162798029304 +0.0991138994693756131271200615629 0.0119076997041702280916153355861 0.00588579997420311026162798029304 +0.0991325519979000119308309990629 -0.305104252696037303582698996252 0.446747934818267855572315738755 +0.0991325519979000119308309990629 0.305104252696037303582698996252 0.446747934818267855572315738755 +0.09918094985187053680419921875 -0.92375056445598602294921875 -0.198362848162651039807258257497 +0.09918094985187053680419921875 0.92375056445598602294921875 -0.198362848162651039807258257497 +0.0993035018444061307052450615629 0 0.0117818996310234073293665701954 +0.0993213012814521817306356865629 -0.851577275991439841540397992503 0.273771893978118907586605246252 +0.0993213012814521817306356865629 0.851577275991439841540397992503 0.273771893978118907586605246252 +0.0994240522384643582443075615629 -0.109193551540374758634932561563 -0.0262984491884708411479909528907 +0.0994240522384643582443075615629 0.109193551540374758634932561563 -0.0262984491884708411479909528907 +0.0994365029036998748779296875 -0.306029213964939095227180132497 -0.893844550848007179943977007497 +0.0994365029036998748779296875 0.306030148267745938372996761245 -0.893844550848007179943977007497 +0.0994841985404491396804971259371 -0.0722785525023937197586221259371 -0.432872539758682284283253238755 +0.0994841985404491396804971259371 0.0722785525023937197586221259371 -0.432872539758682284283253238755 +0.0995523989200591957748898153113 -0.306394951045513119769481136245 0.89370678365230560302734375 +0.0995523989200591957748898153113 0.306394951045513119769481136245 0.89370678365230560302734375 +0.099617250263690948486328125 -0.113496251404285430908203125 -0.1992360055446624755859375 +0.099617250263690948486328125 0.113496251404285430908203125 -0.1992360055446624755859375 +0.0996638506650924793639489962516 -0.072409696877002716064453125 0.536026141047477810985810720013 +0.0996638506650924793639489962516 0.072409696877002716064453125 0.536026141047477810985810720013 +0.0996672987937927273849325615629 -0.00412990003824234043483532019536 -0.00702629983425140380859375 +0.0996672987937927273849325615629 0.00412990003824234043483532019536 -0.00702629983425140380859375 +0.0996917009353637806334802462516 -0.0078458003699779510498046875 0 +0.0996917009353637806334802462516 0.0078458003699779510498046875 0 +0.0997120022773742703536825615629 -0.306888008117675803454460492503 0.732036018371582053454460492503 +0.0997120022773742703536825615629 0.306888008117675803454460492503 0.732036018371582053454460492503 +0.0997437000274658258636151231258 -0.00406749993562698346910577740232 0.00588660016655922005424095289072 +0.0997437000274658258636151231258 0.00406749993562698346910577740232 0.00588660016655922005424095289072 +0.0997669994831085205078125 -0.4135535061359405517578125 0.2627165019512176513671875 +0.0997669994831085205078125 0.4135535061359405517578125 0.2627165019512176513671875 +0.0998222477734088953216229356258 -0.162800002098083512747095369377 -0.51578284800052642822265625 +0.0998222477734088953216229356258 0.162800002098083512747095369377 -0.51578284800052642822265625 +0.0998452007770538330078125 -0.130109703540802007504240123126 -0.30919630825519561767578125 +0.0998452007770538330078125 0.130109703540802007504240123126 -0.30919630825519561767578125 +0.0998753041028976329407385037484 -0.231993293762207009045539507497 0.242289257049560530221654630623 +0.0998753041028976329407385037484 0.231993293762207009045539507497 0.242289257049560530221654630623 +0.0999000012874603215973223768742 -0.0478830009698867770095986884371 -0.278795993328094460217414507497 +0.0999000012874603215973223768742 0.0478830009698867770095986884371 -0.278795993328094460217414507497 +0.0999173998832702664474325615629 -0.521832597255706742700454014994 -0.278759998083114635125667746252 +0.0999173998832702664474325615629 0.521832597255706742700454014994 -0.278759998083114635125667746252 +0.099942751228809356689453125 -0.14730750024318695068359375 0.7285679876804351806640625 +0.099942751228809356689453125 0.14730750024318695068359375 0.7285679876804351806640625 +0.0999993979930877685546875 -0.0396447986364364679534588731258 -0.168607401847839372122095369377 +0.0999993979930877685546875 0.0396447986364364679534588731258 -0.168607401847839372122095369377 +0.100000000000000005551115123126 0 0 +0.10001640021800994873046875 -0.0726652488112449618240518134371 -0.0849499493837356511871661268742 +0.10001640021800994873046875 0.0726652488112449618240518134371 -0.0849499493837356511871661268742 +0.100026595592498782072432561563 -0.147776401042938237972990123126 -0.0903150022029876736739950615629 +0.100026595592498782072432561563 0.147776401042938237972990123126 -0.0903150022029876736739950615629 +0.10004340112209320068359375 -0.0726851999759674100021200615629 -0.587118601799011208264289507497 +0.10004340112209320068359375 0.0726851999759674100021200615629 -0.587118601799011208264289507497 +0.100054800510406494140625 -0.0928420007228851346114950615629 0.146182799339294428042634876874 +0.100054800510406494140625 0.0928420007228851346114950615629 0.146182799339294428042634876874 +0.100071397423744198884598688437 -0.394856801629066500591846988755 -0.506531345844268843237045985006 +0.100071397423744198884598688437 0.394856801629066500591846988755 -0.506531345844268843237045985006 +0.100151804089546200837723688437 -0.605448895692825228564970529987 0.33675180375576019287109375 +0.100151804089546200837723688437 0.605448895692825228564970529987 0.33675180375576019287109375 +0.10019885003566741943359375 -0.421969738602638255731136496252 -0.731028029322624228747429242503 +0.10019885003566741943359375 0.421969738602638255731136496252 -0.731028029322624228747429242503 +0.100222201645374306422375809689 -0.425789093971252474712940738755 0.105637051910161969270340875937 +0.100222201645374306422375809689 0.425789093971252474712940738755 0.105637051910161969270340875937 +0.100235697627067563142411188437 -0.269039994478225685803352007497 0.0870068997144699124435263115629 +0.100235697627067563142411188437 0.269039994478225685803352007497 0.0870068997144699124435263115629 +0.100251603126525881681807561563 -0.361934804916381858141960492503 -0.137670004367828363589509876874 +0.100251603126525881681807561563 0.361934804916381858141960492503 -0.137670004367828363589509876874 +0.100269296765327448062166126874 -0.0297504007816314676448943288278 0.107521954178810122404463811563 +0.100269296765327448062166126874 0.0297504007816314676448943288278 0.107521954178810122404463811563 +0.100274598598480230160490123126 -0.140408599376678461245759876874 0.101145398616790782586605246252 +0.100274598598480230160490123126 0.140408599376678461245759876874 0.101145398616790782586605246252 +0.10031519830226898193359375 -0.00999060049653053248996936730464 0.111072295904159540347322376874 +0.10031519830226898193359375 0.00999060049653053248996936730464 0.111072295904159540347322376874 +0.100318405032157886846988503748 -0.459630513191223111224559261245 0.518339508771896384509147992503 +0.100318405032157886846988503748 0.459630513191223111224559261245 0.518339508771896384509147992503 +0.100347000360488894377120061563 -0.0926508039236068753341513115629 -0.062018550932407379150390625 +0.100347000360488894377120061563 0.0926508039236068753341513115629 -0.062018550932407379150390625 +0.100379002094268809930355246252 -0.0893941998481750516036825615629 -0.148097002506256097964509876874 +0.100379002094268809930355246252 0.0893941998481750516036825615629 -0.148097002506256097964509876874 +0.100415004789829245823717940311 -0.216732242703437799624666126874 -0.255819898843765269891292746252 +0.100415004789829245823717940311 0.216732242703437799624666126874 -0.255819898843765269891292746252 +0.100444503128528594970703125 -0.0729764968156814547439736884371 -0.891395097970962502209602007497 +0.100444503128528594970703125 0.0729764968156814547439736884371 -0.891395097970962502209602007497 +0.100465203076601033993497935626 -0.0362569514662027386764364678129 -0.4371407926082611083984375 +0.100465203076601033993497935626 0.0362569514662027386764364678129 -0.4371407926082611083984375 +0.100546395778656011410490123126 -0.204140806198120139391960492503 -0.766952800750732466283920985006 +0.100546395778656011410490123126 0.204140806198120139391960492503 -0.766952800750732466283920985006 +0.100562705099582663792467940311 -0.673356616497039706104033029987 0.162719199061393732241853626874 +0.100562705099582663792467940311 0.673356616497039706104033029987 0.162719199061393732241853626874 +0.100594201683998102359041126874 -0.245761495828628523385717130623 0.13957799971103668212890625 +0.100594201683998102359041126874 0.245761495828628523385717130623 0.13957799971103668212890625 +0.100622552633285525236495061563 -0.0243685506284236907958984375 -0.108541649580001828279129938437 +0.100622552633285525236495061563 0.0243685506284236907958984375 -0.108541649580001828279129938437 +0.100622999668121340666182561563 -0.103228497505187991056807561563 0.0414594009518623324295205634371 +0.100622999668121340666182561563 0.103228497505187991056807561563 0.0414594009518623324295205634371 +0.100659350305795675106779185626 -0.528359711170196533203125 -0.114907648414373411704936245314 +0.100659350305795675106779185626 0.528359711170196533203125 -0.114907648414373411704936245314 +0.10066759586334228515625 -0.0530272006988525418380575615629 0.383476400375366233141960492503 +0.10066759586334228515625 0.0530272006988525418380575615629 0.383476400375366233141960492503 +0.100670397281646728515625 -0.122184002399444588404797684689 -0.122215199470520022306807561563 +0.100670397281646728515625 0.122184002399444588404797684689 -0.122215199470520022306807561563 +0.1007087528705596923828125 -0.15479500591754913330078125 -0.16851200163364410400390625 +0.1007087528705596923828125 0.15479500591754913330078125 -0.16851200163364410400390625 +0.100718852877616879548661188437 -0.0579277485609054551551899692186 0.0948688477277755681793536268742 +0.100718852877616879548661188437 0.0579277485609054551551899692186 0.0948688477277755681793536268742 +0.100724403560161587800614313437 -0.310003402829170215948551003748 0.619477587938308649206931022491 +0.100724403560161587800614313437 0.310003402829170215948551003748 0.619477587938308649206931022491 +0.100776600837707522306807561563 0 -0.894339895248413063733039507497 +0.100792801380157476254240123126 0 -0.438566842675209067614616742503 +0.100796501338481891973941628748 -0.158990298211574537790014005623 0.295062953233718838763621761245 +0.100796501338481891973941628748 0.158990298211574537790014005623 0.295062953233718838763621761245 +0.10083849728107452392578125 0 0.22876100242137908935546875 +0.100901000201702117919921875 -0.114448003470897674560546875 -0.476152002811431884765625 +0.100901000201702117919921875 0.114448003470897674560546875 -0.476152002811431884765625 +0.100922396779060355442858565311 -0.0243845991790294647216796875 -0.590948402881622314453125 +0.100922396779060355442858565311 0.0243845991790294647216796875 -0.590948402881622314453125 +0.100967097282409670744307561563 -0.1707276999950408935546875 0.6189976036548614501953125 +0.100967097282409670744307561563 0.1707276999950408935546875 0.6189976036548614501953125 +0.100971899181604388151534124063 -0.118572306632995602693192438437 0.8864226043224334716796875 +0.100971899181604388151534124063 0.118572306632995602693192438437 0.8864226043224334716796875 +0.101142394542694094572432561563 -0.0239506006240844740440287807814 -0.170869994163513200247095369377 +0.101142394542694094572432561563 0.0239506006240844740440287807814 -0.170869994163513200247095369377 +0.10114724934101104736328125 -0.21200649440288543701171875 -0.08557175099849700927734375 +0.10114724934101104736328125 0.21200649440288543701171875 -0.08557175099849700927734375 +0.101161801815032953433259876874 -0.110251504182815554533370061563 0.0105296999216079704975168596093 +0.101161801815032953433259876874 0.110251504182815554533370061563 0.0105296999216079704975168596093 +0.101181502640247333868472878748 -0.645342582464218050830595529987 0.251585593819618202893195757497 +0.101181502640247333868472878748 0.645342582464218050830595529987 0.251585593819618202893195757497 +0.10123349726200103759765625 -0.67937175929546356201171875 -0.301174499094486236572265625 +0.10123349726200103759765625 0.67937175929546356201171875 -0.301174499094486236572265625 +0.101244351267814627903796065311 -0.673748230934143044201789507497 0.50824476778507232666015625 +0.101244351267814627903796065311 0.673748230934143044201789507497 0.50824476778507232666015625 +0.101279702782630917634598688437 -0.0243419989943504319618305942186 -0.281335794925689663958934261245 +0.101279702782630917634598688437 0.0243419989943504319618305942186 -0.281335794925689663958934261245 +0.101290902867913243379227594687 -0.689028331637382529528679242503 -0.646126335859298683850227007497 +0.101290902867913243379227594687 0.689028331637382529528679242503 -0.646126335859298683850227007497 +0.101324102282524100560046065311 -0.0858074963092803899566973768742 -0.069788999855518341064453125 +0.101324102282524100560046065311 0.0858074963092803899566973768742 -0.069788999855518341064453125 +0.101336002349853515625 -0.484588813781738292352230246252 0.6284143924713134765625 +0.101336002349853515625 0.484588813781738292352230246252 0.6284143924713134765625 +0.101345801353454598170422684689 -0.0532804012298584012130575615629 0.163982403278350841180355246252 +0.101345801353454598170422684689 0.0532804012298584012130575615629 0.163982403278350841180355246252 +0.101346397399902352076672684689 -0.205347609519958507195980246252 -0.327965211868286143914730246252 +0.101346397399902352076672684689 0.205347609519958507195980246252 -0.327965211868286143914730246252 +0.101360249519348147306807561563 -0.110218951106071466616853626874 -0.00882419999688863719577991417964 +0.101360249519348147306807561563 0.110218951106071466616853626874 -0.00882419999688863719577991417964 +0.101397795975208274144030440311 -0.562107700109481744910056022491 -0.404665094614028886255141514994 +0.101397795975208274144030440311 0.562107700109481744910056022491 -0.404665094614028886255141514994 +0.101423597335815435238615123126 -0.225803208351135265008480246252 0.31420719623565673828125 +0.101423597335815435238615123126 0.225803208351135265008480246252 0.31420719623565673828125 +0.101443049311637875642411188437 -0.118835994601249703150891434689 0.422003692388534579205128238755 +0.101443049311637875642411188437 0.118835994601249703150891434689 0.422003692388534579205128238755 +0.10151650011539459228515625 -0.445501506328582763671875 -0.203033506870269775390625 +0.10151650011539459228515625 0.445501506328582763671875 -0.203033506870269775390625 +0.101544098556041711978181751874 -0.312524092197418168481704014994 0.120488196611404405067524692186 +0.101544098556041711978181751874 0.312524092197418168481704014994 0.120488196611404405067524692186 +0.101614800095558163728348688437 0 -0.282266700267791714740184261245 +0.101621398329734796694978626874 -0.118239900469779959935046065311 0.256305295228958118780582253748 +0.101621398329734796694978626874 0.118239900469779959935046065311 0.256305295228958118780582253748 +0.101638045907020566072098688437 -0.01222500018775463104248046875 -0.10963694751262664794921875 +0.101638045907020566072098688437 0.01222500018775463104248046875 -0.10963694751262664794921875 +0.101655395328998560122713001874 -0.26613999903202056884765625 -0.203311499953269941842748380623 +0.101655395328998560122713001874 0.26613999903202056884765625 -0.203311499953269941842748380623 +0.1016827486455440521240234375 -0.64199720323085784912109375 0 +0.1016827486455440521240234375 0.64199720323085784912109375 0 +0.10170049965381622314453125 -0.0496447496116161346435546875 0.2229180037975311279296875 +0.10170049965381622314453125 0.0496447496116161346435546875 0.2229180037975311279296875 +0.101713395118713384457365123126 -0.00825959965586662257785999230464 -0.172006404399871831722990123126 +0.101713395118713384457365123126 0.00825959965586662257785999230464 -0.172006404399871831722990123126 +0.101736599206924432925447376874 0 0.282222908735275279656917746252 +0.101759004592895510588057561563 -0.165034997463226335012720369377 0.0490774005651474012901225307814 +0.101759004592895510588057561563 0.165034997463226335012720369377 0.0490774005651474012901225307814 +0.101872396469116222039730246252 -0.313536000251770030633480246252 0.226533198356628440173210492503 +0.101872396469116222039730246252 0.313536000251770030633480246252 0.226533198356628440173210492503 +0.101881194114685061369307561563 -0.106950795650482183285490123126 -0.371727991104126020971420985006 +0.101881194114685061369307561563 0.106950795650482183285490123126 -0.371727991104126020971420985006 +0.10192500054836273193359375 -0.09919250011444091796875 0.479345500469207763671875 +0.10192500054836273193359375 0.09919250011444091796875 0.479345500469207763671875 +0.101933303475379932745426003748 -0.131200297176837926693693248126 -0.679996788501739501953125 +0.101933303475379932745426003748 0.131200297176837926693693248126 -0.679996788501739501953125 +0.101977202296257021818526311563 0 -0.110002952814102175627120061563 +0.101978552341461178865067438437 -0.433737444877624500616519753748 -0.06302654743194580078125 +0.101978552341461178865067438437 0.433737444877624500616519753748 -0.06302654743194580078125 +0.102009797096252449732922684689 -0.163504195213317882195980246252 -0.0534825980663299616058026231258 +0.102009797096252449732922684689 0.163504195213317882195980246252 -0.0534825980663299616058026231258 +0.102019500732421872224442438437 -0.194832605123519880807592130623 -0.204039895534515375308259876874 +0.102019500732421872224442438437 0.194832605123519880807592130623 -0.204039895534515375308259876874 +0.102039299160242083464034124063 -0.387455734610557600561264735006 -0.376783537864685103002670985006 +0.102039299160242083464034124063 0.387455734610557600561264735006 -0.376783537864685103002670985006 +0.102087002992630002107254938437 -0.0495901510119438129753355326557 -0.0980769038200378362457598768742 +0.102087002992630002107254938437 0.0495901510119438129753355326557 -0.0980769038200378362457598768742 +0.102178752422332763671875 -0.21646775305271148681640625 0.072119496762752532958984375 +0.102178752422332763671875 0.21646775305271148681640625 0.072119496762752532958984375 +0.102223800122737892848157059689 -0.891941410303115911339943977509 -0.0631781995296478299239950615629 +0.102223800122737892848157059689 0.891941410303115911339943977509 -0.0631781995296478299239950615629 +0.102224850654602045230134876874 -0.0970257014036178533356036268742 0.0513428986072540297080912807814 +0.102224850654602045230134876874 0.0970257014036178533356036268742 0.0513428986072540297080912807814 +0.102246147394180295076004938437 -0.1040668487548828125 -0.0348685495555400848388671875 +0.102246147394180295076004938437 0.1040668487548828125 -0.0348685495555400848388671875 +0.102288901805877685546875 -0.0666691482067108126541299384371 0.0871331959962844820877236884371 +0.102288901805877685546875 0.0666691482067108126541299384371 0.0871331959962844820877236884371 +0.102325800061225893888838811563 -0.274827307462692238537727007497 -0.0632412001490592901031817518742 +0.102325800061225893888838811563 0.274827307462692238537727007497 -0.0632412001490592901031817518742 +0.102344995737075797337389815311 -0.186070507764816289730802623126 0.211903792619705183541967130623 +0.102344995737075797337389815311 0.186070507764816289730802623126 0.211903792619705183541967130623 +0.102487750351428985595703125 -0.099900998175144195556640625 0.2049782574176788330078125 +0.102487750351428985595703125 0.099900998175144195556640625 0.2049782574176788330078125 +0.1024940013885498046875 -0.936047971248626708984375 -0.3366149961948394775390625 +0.1024940013885498046875 0.936047971248626708984375 -0.3366149961948394775390625 +0.102514803409576416015625 -0.104821395874023448602230246252 0.136026597023010259457365123126 +0.102514803409576416015625 0.104821395874023448602230246252 0.136026597023010259457365123126 +0.102550601959228521176115123126 -0.138754999637603765316740123126 -0.101145398616790782586605246252 +0.102550601959228521176115123126 0.138754999637603765316740123126 -0.101145398616790782586605246252 +0.102589646726846700497404185626 -0.0297188993543386452411692033593 0.4371407926082611083984375 +0.102589646726846700497404185626 0.0297188993543386452411692033593 0.4371407926082611083984375 +0.102646348625421532374524247189 -0.3159188926219940185546875 0.303576761484146140368522992503 +0.102646348625421532374524247189 0.3159188926219940185546875 0.303576761484146140368522992503 +0.102655801177024844084151311563 -0.0595005020499229375641192518742 0.2755385935306549072265625 +0.102655801177024844084151311563 0.0595005020499229375641192518742 0.2755385935306549072265625 +0.102656947076320656520032059689 -0.531653636693954489977897992503 0.0964661501348018785018112453145 +0.102656947076320656520032059689 0.531653636693954489977897992503 0.0964661501348018785018112453145 +0.102686396241188040989733565311 -0.554326200485229514391960492503 -0.205372202396392811163394753748 +0.102686396241188040989733565311 0.554326200485229514391960492503 -0.205372202396392811163394753748 +0.102724802494049083367855246252 -0.368767595291137728619190738755 0.116009199619293221217297684689 +0.102724802494049083367855246252 0.368767595291137728619190738755 0.116009199619293221217297684689 +0.102770099043846124819978626874 -0.2768045961856842041015625 0.05308020114898681640625 +0.102770099043846124819978626874 0.2768045961856842041015625 0.05308020114898681640625 +0.102882750332355499267578125 -0.155571997165679931640625 0.16647075116634368896484375 +0.102882750332355499267578125 0.155571997165679931640625 0.16647075116634368896484375 +0.102906449139118200131193248126 -0.434876847267150867804019753748 0.0528439499437809018234091240629 +0.102906449139118200131193248126 0.434876847267150867804019753748 0.0528439499437809018234091240629 +0.102909895777702334318526311563 -0.124280101060867301243639815311 -0.252911102771759044305355246252 +0.102909895777702334318526311563 0.124280101060867301243639815311 -0.252911102771759044305355246252 +0.102934398129582396763659346561 -0.929603490233421259070212272491 0.166556844860315328427091685626 +0.102934398129582396763659346561 0.929603490233421259070212272491 0.166556844860315328427091685626 +0.103029154241085052490234375 -0.09245215356349945068359375 0.32146169245243072509765625 +0.103029154241085052490234375 0.09245215356349945068359375 0.32146169245243072509765625 +0.103043600916862501670756557814 -0.434591311216354414526108485006 0.320955240726470969470085492503 +0.103043600916862501670756557814 0.434591311216354414526108485006 0.320955240726470969470085492503 +0.103050999343395233154296875 0 0.489265501499176025390625 +0.103180999308824544735685435626 -0.457585701346397422106804242503 0.449965763092041004522769753748 +0.103180999308824544735685435626 0.457585701346397422106804242503 0.449965763092041004522769753748 +0.10319624841213226318359375 -0.0902248531579971230209835653113 0.0609099000692367512077574076557 +0.10319624841213226318359375 0.0902248531579971230209835653113 0.0609099000692367512077574076557 +0.103228354454040521792634876874 -0.074999548494815826416015625 0.0788603961467742864410723768742 +0.103228354454040521792634876874 0.074999548494815826416015625 0.0788603961467742864410723768742 +0.103238797187805181332365123126 -0.0750064015388488825042401231258 -0.153999197483062760793970369377 +0.103238797187805181332365123126 0.0750064015388488825042401231258 -0.153999197483062760793970369377 +0.103292249143123626708984375 -0.095669500529766082763671875 -0.2065867483615875244140625 +0.103292249143123626708984375 0.095669500529766082763671875 -0.2065867483615875244140625 +0.103300197422504430599943248126 -0.892483216524124212121193977509 0.0529451999813318266441264370314 +0.103300197422504430599943248126 0.892483216524124212121193977509 0.0529451999813318266441264370314 +0.1033256053924560546875 -0.675125598907470703125 -0.416568803787231489721420985006 +0.1033256053924560546875 0.675125598907470703125 -0.416568803787231489721420985006 +0.103463999927043914794921875 0 0.74282924830913543701171875 +0.103464603424072265625 0 0.10860510170459747314453125 +0.103477048873901369963057561563 -0.03962235152721405029296875 0.101106753945350638645983565311 +0.103477048873901369963057561563 0.03962235152721405029296875 0.101106753945350638645983565311 +0.103531497716903689298995061563 -0.0828676521778106689453125 0.070101298391819000244140625 +0.103531497716903689298995061563 0.0828676521778106689453125 0.070101298391819000244140625 +0.10364775359630584716796875 -0.318989999592304229736328125 -0.67082248628139495849609375 +0.10364775359630584716796875 0.318989999592304229736328125 -0.67082248628139495849609375 +0.103649251163005828857421875 -0.71329124271869659423828125 -0.207297742366790771484375 +0.103649251163005828857421875 0.71329124271869659423828125 -0.207297742366790771484375 +0.103826798498630523681640625 -0.319543340802192654681590511245 -0.0980412960052490234375 +0.103826798498630523681640625 0.319543340802192654681590511245 -0.0980412960052490234375 +0.10385685227811336517333984375 -0.524825575947761469031149772491 0.785029643774032503955595529987 +0.10385685227811336517333984375 0.524825575947761469031149772491 0.785029643774032503955595529987 +0.1038680486381053924560546875 -0.49265448749065399169921875 -0.41109965741634368896484375 +0.1038680486381053924560546875 0.49265448749065399169921875 -0.41109965741634368896484375 +0.103979851305484774504073186563 -0.0428921978920698207526918110943 0.64019410312175750732421875 +0.103979851305484774504073186563 0.0428921978920698207526918110943 0.64019410312175750732421875 +0.104039695858955380525223688437 -0.0633537009358405983627804403113 -0.0875331044197082547286825615629 +0.104039695858955380525223688437 0.0633537009358405983627804403113 -0.0875331044197082547286825615629 +0.104072695970535269993639815311 -0.280814999341964688372996761245 0.0176598004996776566932759067186 +0.104072695970535269993639815311 0.280814999341964688372996761245 0.0176598004996776566932759067186 +0.104108996689319610595703125 -0.74943101406097412109375 0.6538469791412353515625 +0.104108996689319610595703125 0.74943101406097412109375 0.6538469791412353515625 +0.104129897058010095767244251874 -0.6851957142353057861328125 -0.0983024001121520912827023153113 +0.104129897058010095767244251874 0.6851957142353057861328125 -0.0983024001121520912827023153113 +0.104149498045444488525390625 -0.22118975222110748291015625 -0.0522307492792606353759765625 +0.104149498045444488525390625 0.22118975222110748291015625 -0.0522307492792606353759765625 +0.1041670478880405426025390625 -0.235031542181968700067073996252 -0.59700028598308563232421875 +0.1041670478880405426025390625 0.235031542181968700067073996252 -0.59700028598308563232421875 +0.104180395603179931640625 -0.280539000034332242083934261245 -0.02107889950275421142578125 +0.104180395603179931640625 0.280539000034332242083934261245 -0.02107889950275421142578125 +0.104204201698303230982922684689 -0.0267044007778167724609375 0.1686069965362548828125 +0.104204201698303230982922684689 0.0267044007778167724609375 0.1686069965362548828125 +0.104231753945350641421541126874 -0.0232980992645025232479216725778 0.333306047320365894659488503748 +0.104231753945350641421541126874 0.0232980992645025232479216725778 0.333306047320365894659488503748 +0.104293249547481536865234375 -0.222935497760772705078125 0.0438482500612735748291015625 +0.104293249547481536865234375 0.222935497760772705078125 0.0438482500612735748291015625 +0.10429559648036956787109375 -0.01991879940032958984375 0.105951297283172610197432561563 +0.10429559648036956787109375 0.01991879940032958984375 0.105951297283172610197432561563 +0.104355302453041073884598688437 -0.10567049682140350341796875 0.0210646502673625946044921875 +0.104355302453041073884598688437 0.10567049682140350341796875 0.0210646502673625946044921875 +0.104400999844074249267578125 -0.972369015216827392578125 -0.208802998065948486328125 +0.104400999844074249267578125 0.972369015216827392578125 -0.208802998065948486328125 +0.104473400115966785772769753748 -0.851958113908767633581931022491 0.407126298546791054455695757497 +0.104473400115966785772769753748 0.851958113908767633581931022491 0.407126298546791054455695757497 +0.104496248066425323486328125 -0.17630775272846221923828125 -0.14316475391387939453125 +0.104496248066425323486328125 0.17630775272846221923828125 -0.14316475391387939453125 +0.104499804973602297697432561563 -0.170527994632720947265625 0 +0.104499804973602297697432561563 0.170527994632720947265625 0 +0.104504397511482230442858565311 -0.449868607521057117804019753748 0.383010613918304432257144753748 +0.104504397511482230442858565311 0.449868607521057117804019753748 0.383010613918304432257144753748 +0.104528850317001334446764815311 -0.0759437978267669677734375 -0.0761988043785095242599325615629 +0.104528850317001334446764815311 0.0759437978267669677734375 -0.0761988043785095242599325615629 +0.104578953981399533357254938437 -0.0984419971704482976715411268742 -0.043271698057651519775390625 +0.104578953981399533357254938437 0.0984419971704482976715411268742 -0.043271698057651519775390625 +0.1046322025358676910400390625 -0.261875706911087025030582253748 -0.350675547122955344470085492503 +0.1046322025358676910400390625 0.261875706911087025030582253748 -0.350675547122955344470085492503 +0.10467000305652618408203125 -0.3221360146999359130859375 -0.94088900089263916015625 +0.10467000305652618408203125 0.32213699817657470703125 -0.94088900089263916015625 +0.104698002338409423828125 -0.168782198429107688220085492503 0.02346999943256378173828125 +0.104698002338409423828125 0.168782198429107688220085492503 0.02346999943256378173828125 +0.104790198802948000822432561563 -0.168035399913787852899105246252 -0.0279841989278793341899831403907 +0.104790198802948000822432561563 0.168035399913787852899105246252 -0.0279841989278793341899831403907 +0.10479199886322021484375 -0.3225210011005401611328125 0.940743982791900634765625 +0.10479199886322021484375 0.3225210011005401611328125 0.940743982791900634765625 +0.104806503653526297825671065311 -0.0392318978905677809287944057814 -0.0998822987079620305816973768742 +0.104806503653526297825671065311 0.0392318978905677809287944057814 -0.0998822987079620305816973768742 +0.104839151352643961123689564374 -0.898887124657630876001235264994 0.288981443643569924084602007497 +0.104839151352643961123689564374 0.898887124657630876001235264994 0.288981443643569924084602007497 +0.104868900775909421052567438437 -0.10578525066375732421875 -0.01766384951770305633544921875 +0.104868900775909421052567438437 0.10578525066375732421875 -0.01766384951770305633544921875 +0.104882247745990753173828125 -0.22645799815654754638671875 0.014714750461280345916748046875 +0.104882247745990753173828125 0.22645799815654754638671875 0.014714750461280345916748046875 +0.104928250610828388555972878748 -0.248137751221656793765291126874 0.223422858119010914190738503748 +0.104928250610828388555972878748 0.248137751221656793765291126874 0.223422858119010914190738503748 +0.104947197437286379728682561563 -0.109020602703094493524105246252 -0.130769205093383800164730246252 +0.104947197437286379728682561563 0.109020602703094493524105246252 -0.130769205093383800164730246252 +0.1049797534942626953125 -0.22620974481105804443359375 -0.01756249926984310150146484375 +0.1049797534942626953125 0.22620974481105804443359375 -0.01756249926984310150146484375 +0.105006802082061770353682561563 -0.158022201061248784847990123126 0.0632655978202819879729901231258 +0.105006802082061770353682561563 0.158022201061248784847990123126 0.0632655978202819879729901231258 +0.105009603500366213713057561563 -0.376646804809570356908920985006 -0.0843216001987457386412927462516 +0.105009603500366213713057561563 0.376646804809570356908920985006 -0.0843216001987457386412927462516 +0.105043999850749969482421875 -0.323285996913909912109375 -0.366676986217498779296875 +0.105043999850749969482421875 0.323285996913909912109375 -0.366676986217498779296875 +0.105050700902938845548995061563 -0.437566512823104880602897992503 0 +0.105050700902938845548995061563 0.437566512823104880602897992503 0 +0.105113053321838373355134876874 -0.32350675761699676513671875 0.0824302494525909340561398153113 +0.105113053321838373355134876874 0.32350675761699676513671875 0.0824302494525909340561398153113 +0.105117000639438629150390625 -0.429922997951507568359375 0.23262999951839447021484375 +0.105117000639438629150390625 0.429922997951507568359375 0.23262999951839447021484375 +0.10512959957122802734375 -0.664647197723388760692841970013 0.432656812667846724096420985006 +0.10512959957122802734375 0.664647197723388760692841970013 0.432656812667846724096420985006 +0.105146002769470225945980246252 0 0.170130395889282248766960492503 +0.1051476001739501953125 -0.323604798316955599712940738755 -0.210295200347900390625 +0.1051476001739501953125 0.323604798316955599712940738755 -0.210295200347900390625 +0.105152396857738500424161998126 -0.383686190843582186627003238755 -0.210304351150989526919588001874 +0.105152396857738500424161998126 0.383686190843582186627003238755 -0.210304351150989526919588001874 +0.10527884960174560546875 -0.150608704984188074282869251874 -0.410771700739860523565738503748 +0.10527884960174560546875 0.150608704984188074282869251874 -0.410771700739860523565738503748 +0.105349802970886224917634876874 -0.194916003942489618472322376874 0.557591986656188920434829014994 +0.105349802970886224917634876874 0.194916003942489618472322376874 0.557591986656188920434829014994 +0.105401399731636050138838811563 -0.324386394023895241467414507497 -0.493623590469360329358039507497 +0.105401399731636050138838811563 0.324386394023895241467414507497 -0.493623590469360329358039507497 +0.105502402782440191097990123126 -0.535684776306152410363381477509 -0.584731197357177712170539507497 +0.105502402782440191097990123126 0.535684776306152410363381477509 -0.584731197357177712170539507497 +0.105595600605010997430355246252 -0.271588397026062022820980246252 -0.274024391174316428454460492503 +0.105595600605010997430355246252 0.271588397026062022820980246252 -0.274024391174316428454460492503 +0.105596403777599337492354436563 -0.324996745586395296978565738755 0.552925103902816794665397992503 +0.105596403777599337492354436563 0.324996745586395296978565738755 0.552925103902816794665397992503 +0.105654799938201912623547684689 -0.114227402210235598478682561563 0.125654995441436767578125 +0.105654799938201912623547684689 0.114227402210235598478682561563 0.125654995441436767578125 +0.105672048777341848202482310626 -0.538368585705757185522202235006 -0.03863749839365482330322265625 +0.105672048777341848202482310626 0.538368585705757185522202235006 -0.03863749839365482330322265625 +0.105752503871917716282702315311 -0.687038087844848543994658029987 0.0824305988848209325592364393742 +0.105752503871917716282702315311 0.687038087844848543994658029987 0.0824305988848209325592364393742 +0.10581000149250030517578125 -0.203041493892669677734375 -0.100391246378421783447265625 +0.10581000149250030517578125 0.203041493892669677734375 -0.100391246378421783447265625 +0.105870795249938975945980246252 -0.156556594371795670950220369377 -0.0654323995113372802734375 +0.105870795249938975945980246252 0.156556594371795670950220369377 -0.0654323995113372802734375 +0.105944002419710150975085127811 -0.326068508625030506475894753748 0.777788269519805841589743522491 +0.105944002419710150975085127811 0.326068508625030506475894753748 0.777788269519805841589743522491 +0.10596464574337005615234375 -0.048889048397541046142578125 0.0942409515380859402755575615629 +0.10596464574337005615234375 0.048889048397541046142578125 0.0942409515380859402755575615629 +0.1059930026531219482421875 -0.3929465115070343017578125 -0.2904449999332427978515625 +0.1059930026531219482421875 0.3929465115070343017578125 -0.2904449999332427978515625 +0.1060247533023357391357421875 -0.0770307466387748634994991903113 -0.940917047858238153601462272491 +0.1060247533023357391357421875 0.0770307466387748634994991903113 -0.940917047858238153601462272491 +0.106026001274585723876953125 -0.457521498203277587890625 0.1715590059757232666015625 +0.106026001274585723876953125 0.457521498203277587890625 0.1715590059757232666015625 +0.106033802032470703125 -0.0668273985385894747635049384371 0.155855405330657975637720369377 +0.106033802032470703125 0.0668273985385894747635049384371 0.155855405330657975637720369377 +0.1060547530651092529296875 -0.13834150135517120361328125 -0.17920400202274322509765625 +0.1060547530651092529296875 0.13834150135517120361328125 -0.17920400202274322509765625 +0.106066203117370597142077315311 -0.1060658991336822509765625 0 +0.106066203117370597142077315311 0.1060658991336822509765625 0 +0.106077599525451662931807561563 -0.379128789901733431744190738755 0.070773601531982421875 +0.106077599525451662931807561563 0.379128789901733431744190738755 0.070773601531982421875 +0.1060929000377655029296875 -0.446791487932205189093082253748 -0.774029678106307961193977007497 +0.1060929000377655029296875 0.446791487932205189093082253748 -0.774029678106307961193977007497 +0.106157994270324712582365123126 -0.154473602771759033203125 0.35336720943450927734375 +0.106157994270324712582365123126 0.154473602771759033203125 0.35336720943450927734375 +0.106165401637554182578959682814 -0.538684314489364712841279470013 0.0323724510148167624046244839064 +0.106165401637554182578959682814 0.538684314489364712841279470013 0.0323724510148167624046244839064 +0.106194503605365753173828125 -0.199881494045257568359375 -0.4458365142345428466796875 +0.106194503605365753173828125 0.199881494045257568359375 -0.4458365142345428466796875 +0.1062362492084503173828125 -0.20770275592803955078125 0.089851997792720794677734375 +0.1062362492084503173828125 0.20770275592803955078125 0.089851997792720794677734375 +0.106322852522134789210461747189 -0.2300404608249664306640625 0.371856147050857566149772992503 +0.106322852522134789210461747189 0.2300404608249664306640625 0.371856147050857566149772992503 +0.10633075237274169921875 -0.077252753078937530517578125 -0.2126635015010833740234375 +0.10633075237274169921875 0.077252753078937530517578125 -0.2126635015010833740234375 +0.106369502842426300048828125 -0.16687475144863128662109375 0.1527689993381500244140625 +0.106369502842426300048828125 0.16687475144863128662109375 0.1527689993381500244140625 +0.106375300884246820620759876874 0 -0.944025444984435968542868522491 +0.106411045789718619603014815311 -0.0923458456993102999588174384371 -0.05146770179271697998046875 +0.106411045789718619603014815311 0.0923458456993102999588174384371 -0.05146770179271697998046875 +0.106445100903511044587723688437 -0.220436704158782942331029630623 -0.173427593708038313424779630623 +0.106445100903511044587723688437 0.220436704158782942331029630623 -0.173427593708038313424779630623 +0.106468403339385994654797684689 -0.327681994438171420025440738755 0.203196811676025407278345369377 +0.106468403339385994654797684689 0.327681994438171420025440738755 0.203196811676025407278345369377 +0.1065720021724700927734375 -0.328000485897064208984375 0.3620195090770721435546875 +0.1065720021724700927734375 0.328000485897064208984375 0.3620195090770721435546875 +0.106581449136137956790193470624 -0.125159657001495366879240123126 0.93566830456256866455078125 +0.106581449136137956790193470624 0.125159657001495366879240123126 0.93566830456256866455078125 +0.106605601310729991570980246252 -0.157128000259399436266960492503 0.777139186859130859375 +0.106605601310729991570980246252 0.157128000259399436266960492503 0.777139186859130859375 +0.106622003018856048583984375 -0.725292980670928955078125 -0.68013298511505126953125 +0.106622003018856048583984375 0.725292980670928955078125 -0.68013298511505126953125 +0.106830545514822003450028375937 -0.216899606585502613409488503748 -0.814887350797653176037727007497 +0.106830545514822003450028375937 0.216899606585502613409488503748 -0.814887350797653176037727007497 +0.106859751045703887939453125 -0.0166772492229938507080078125 0.2253947556018829345703125 +0.106859751045703887939453125 0.0166772492229938507080078125 0.2253947556018829345703125 +0.106881898641586300935379938437 -0.2002497017383575439453125 0.196154093742370611019865123126 +0.106881898641586300935379938437 0.2002497017383575439453125 0.196154093742370611019865123126 +0.106889998912811270970202315311 -0.535755014419555641858039507497 0.2480742037296295166015625 +0.106889998912811270970202315311 0.535755014419555641858039507497 0.2480742037296295166015625 +0.106908300518989557437166126874 -0.100441646575927731599442438437 0.0313382998108863788933042826557 +0.106908300518989557437166126874 0.100441646575927731599442438437 0.0313382998108863788933042826557 +0.10691879689693450927734375 -0.102428698539733881167634876874 -0.260915100574493408203125 +0.10691879689693450927734375 0.102428698539733881167634876874 -0.260915100574493408203125 +0.1069698035717010498046875 -0.564445209503173783716079014994 0.1730867922306060791015625 +0.1069698035717010498046875 0.564445209503173783716079014994 0.1730867922306060791015625 +0.10700400173664093017578125 -0.028766401112079620361328125 -0.101107048988342287931807561563 +0.10700400173664093017578125 0.028766401112079620361328125 -0.101107048988342287931807561563 +0.107083204388618458136051003748 -0.329565954208373979028579014994 -0.0491875983774661962311114393742 +0.107083204388618458136051003748 0.329565954208373979028579014994 -0.0491875983774661962311114393742 +0.107199901342391976100110184689 -0.713380479812622092516960492503 0.5381415188312530517578125 +0.107199901342391976100110184689 0.713380479812622092516960492503 0.5381415188312530517578125 +0.10729350149631500244140625 -0.22223000228404998779296875 0.434858500957489013671875 +0.10729350149631500244140625 0.22223000228404998779296875 0.434858500957489013671875 +0.107305504381656646728515625 -0.64869524538516998291015625 0.360805504024028778076171875 +0.107305504381656646728515625 0.64869524538516998291015625 0.360805504024028778076171875 +0.107307904958724970034822376874 -0.106822454929351801089509876874 -0.315553346276283230853465511245 +0.107307904958724970034822376874 0.106822454929351801089509876874 -0.315553346276283230853465511245 +0.107389402389526378289730246252 -0.0615307986736297607421875 -0.157103395462036138363615123126 +0.107389402389526378289730246252 0.0615307986736297607421875 -0.157103395462036138363615123126 +0.107402397692203513401842940311 -0.330551540851592995373664507497 0.0412366487085819230506977817186 +0.107402397692203513401842940311 0.330551540851592995373664507497 0.0412366487085819230506977817186 +0.107469899207353600245617997189 -0.330752259492874178814503238755 -0.285574954748153697625667746252 +0.107469899207353600245617997189 0.330752259492874178814503238755 -0.285574954748153697625667746252 +0.107484005391597747802734375 -0.492461264133453369140625 0.55536375939846038818359375 +0.107484005391597747802734375 0.492461264133453369140625 0.55536375939846038818359375 +0.107484805583953860197432561563 -0.384261608123779296875 -0.028105199337005615234375 +0.107484805583953860197432561563 0.384261608123779296875 -0.028105199337005615234375 +0.107502996921539306640625 -0.116052500903606414794921875 0.193584501743316650390625 +0.107502996921539306640625 0.116052500903606414794921875 0.193584501743316650390625 +0.107539851218462004234233120314 -0.212246093153953568899439119377 0.495869544148445196007912727509 +0.107539851218462004234233120314 0.212246093153953568899439119377 0.495869544148445196007912727509 +0.10755644738674163818359375 -0.0537334486842155414909605326557 -0.0896901011466979952713174384371 +0.10755644738674163818359375 0.0537334486842155414909605326557 -0.0896901011466979952713174384371 +0.107650005817413338404797684689 -0.149886798858642589227230246252 0.0771066009998321588714276231258 +0.107650005817413338404797684689 0.149886798858642589227230246252 0.0771066009998321588714276231258 +0.1076695024967193603515625 -0.514875614643096946032585492503 0.66769029200077056884765625 +0.1076695024967193603515625 0.514875614643096946032585492503 0.66769029200077056884765625 +0.107733902335166928376786188437 -0.0858076483011245699783486884371 -0.0594175502657890292068643134371 +0.107733902335166928376786188437 0.0858076483011245699783486884371 -0.0594175502657890292068643134371 +0.1077457554638385772705078125 -0.7214535176753997802734375 0.174341998994350433349609375 +0.1077457554638385772705078125 0.7214535176753997802734375 0.174341998994350433349609375 +0.107769197225570670384264815311 -0.425230401754379261358707253748 -0.545495295524597079150908029987 +0.107769197225570670384264815311 0.425230401754379261358707253748 -0.545495295524597079150908029987 +0.107787001132965090666182561563 -0.00998489968478679691676891394536 0.10383765399456024169921875 +0.107787001132965090666182561563 0.00998489968478679691676891394536 0.10383765399456024169921875 +0.107816004753112801295422684689 -0.384475207328796420025440738755 0.0235464006662368802169638115629 +0.107816004753112801295422684689 0.384475207328796420025440738755 0.0235464006662368802169638115629 +0.10784040391445159912109375 -0.252052205801010120733707253748 -0.121820104122161862458817438437 +0.10784040391445159912109375 0.252052205801010120733707253748 -0.121820104122161862458817438437 +0.107842496037483207005358565311 -0.05788560211658477783203125 0.0867135018110275213043536268742 +0.107842496037483207005358565311 0.05788560211658477783203125 0.0867135018110275213043536268742 +0.10785059630870819091796875 -0.0298639498651027679443359375 0.0998820036649703951736611884371 +0.10785059630870819091796875 0.0298639498651027679443359375 0.0998820036649703951736611884371 +0.107853400707244875822432561563 -0.126914799213409423828125 -0.110726201534271248561047684689 +0.107853400707244875822432561563 0.126914799213409423828125 -0.110726201534271248561047684689 +0.10787759721279144287109375 -0.100847697257995597142077315311 -0.0263089500367641448974609375 +0.10787759721279144287109375 0.100847697257995597142077315311 -0.0263089500367641448974609375 +0.107902900129556653108231500937 -0.941493710875511147229133257497 -0.0666880995035171453277911268742 +0.107902900129556653108231500937 0.941493710875511147229133257497 -0.0666880995035171453277911268742 +0.1079190038144588470458984375 -0.332146503031253814697265625 0.66372598707675933837890625 +0.1079190038144588470458984375 0.332146503031253814697265625 0.66372598707675933837890625 +0.1079823970794677734375 -0.724663209915161199425881477509 -0.321252799034118685650440738755 +0.1079823970794677734375 0.724663209915161199425881477509 -0.321252799034118685650440738755 +0.10800039768218994140625 -0.246180796623230002673210492503 0.296194410324096712994190738755 +0.10800039768218994140625 0.246180796623230002673210492503 0.296194410324096712994190738755 +0.1080141961574554443359375 -0.19334419071674346923828125 -0.271018302440643288342414507497 +0.1080141961574554443359375 0.19334419071674346923828125 -0.271018302440643288342414507497 +0.108021549880504608154296875 -0.181738910079002363717748380623 0.278930741548538196905582253748 +0.108021549880504608154296875 0.181738910079002363717748380623 0.278930741548538196905582253748 +0.108039252460002913047709682814 -0.259001047909259818347038617503 -0.473018136620521556512386496252 +0.108039252460002913047709682814 0.259001047909259818347038617503 -0.473018136620521556512386496252 +0.108065650612115871087581808752 -0.455643087625503595550213731258 -0.288463991880416881219417746252 +0.108065650612115871087581808752 0.455643087625503595550213731258 -0.288463991880416881219417746252 +0.108067202568054201994307561563 -0.177580404281616227590845369377 -0.341740393638610862048210492503 +0.108067202568054201994307561563 0.177580404281616227590845369377 -0.341740393638610862048210492503 +0.108127498626708978823884876874 -0.138263404369354248046875 0.243293398618698114566072376874 +0.108127498626708978823884876874 0.138263404369354248046875 0.243293398618698114566072376874 +0.108144602179527274388171065311 -0.332841002941131558490184261245 0.487361383438110307153579014994 +0.108144602179527274388171065311 0.332841002941131558490184261245 0.487361383438110307153579014994 +0.10815595090389251708984375 -0.332869601249694779809829014994 0 +0.10815595090389251708984375 0.332869601249694779809829014994 0 +0.108243849873542782868973688437 -0.565318647027015730444077235006 -0.301989997923374164923160378748 +0.108243849873542782868973688437 0.565318647027015730444077235006 -0.301989997923374164923160378748 +0.108310604095458992701672684689 -0.123090398311615001336605246252 0.114531803131103518400557561563 +0.108310604095458992701672684689 0.123090398311615001336605246252 0.114531803131103518400557561563 +0.108351998031139373779296875 -0.978529989719390869140625 0.17532299458980560302734375 +0.108351998031139373779296875 0.978529989719390869140625 0.17532299458980560302734375 +0.1083803512156009674072265625 -0.0787422999739646883865518134371 -0.636045151948928855212272992503 +0.1083803512156009674072265625 0.0787422999739646883865518134371 -0.636045151948928855212272992503 +0.1084087528288364410400390625 -0.69143848121166229248046875 0.269555993378162384033203125 +0.1084087528288364410400390625 0.69143848121166229248046875 0.269555993378162384033203125 +0.108411598205566409025557561563 -0.0184090498834848410869557966407 -0.102019795775413507632478626874 +0.108411598205566409025557561563 0.0184090498834848410869557966407 -0.102019795775413507632478626874 +0.108440748602151873503096624063 -0.333751550316810641216846988755 0.423498350381851240697983485006 +0.108440748602151873503096624063 0.333751550316810641216846988755 0.423498350381851240697983485006 +0.108443403244018563014172684689 -0.0952437996864318875411825615629 -0.138451004028320306948884876874 +0.108443403244018563014172684689 0.0952437996864318875411825615629 -0.138451004028320306948884876874 +0.108539995551109311189286188437 -0.0788589030504226601303585653113 0.268328708410263072625667746252 +0.108539995551109311189286188437 -0.0788580000400543185135049384371 -0.067082248628139495849609375 +0.108539995551109311189286188437 0.0788580000400543185135049384371 -0.067082248628139495849609375 +0.108539995551109311189286188437 0.0788589030504226601303585653113 0.268328708410263072625667746252 +0.108541202545166012849442438437 -0.1763336956501007080078125 -0.2170836031436920166015625 +0.108541202545166012849442438437 0.1763336956501007080078125 -0.2170836031436920166015625 +0.1086404956877231597900390625 -0.60225825011730194091796875 -0.43356974422931671142578125 +0.1086404956877231597900390625 0.60225825011730194091796875 -0.43356974422931671142578125 +0.108713500201702117919921875 -0.0583602488040924072265625 -0.2174292504787445068359375 +0.108713500201702117919921875 0.0583602488040924072265625 -0.2174292504787445068359375 +0.108724200725555414370759876874 -0.0789923965930938720703125 0.584755790233612016137954014994 +0.108724200725555414370759876874 0.0789923965930938720703125 0.584755790233612016137954014994 +0.108733797073364252261384876874 -0.183860599994659423828125 0.666612803936004638671875 +0.108733797073364252261384876874 0.183860599994659423828125 0.666612803936004638671875 +0.108744898438453668765291126874 -0.0668038487434387123764523153113 -0.0788149505853652926345986884371 +0.108744898438453668765291126874 0.0668038487434387123764523153113 -0.0788149505853652926345986884371 +0.108886950463056561555497125937 -0.335125359892845142706363503748 0.279882904887199412957698996252 +0.108886950463056561555497125937 0.335125359892845142706363503748 0.279882904887199412957698996252 +0.108896997570991513337723688437 -0.177600002288818364926115123126 -0.562672197818756103515625 +0.108896997570991513337723688437 0.177600002288818364926115123126 -0.562672197818756103515625 +0.108921146392822257298327315311 -0.0942466467618942177475460653113 0.0418779015541076646278462192186 +0.108921146392822257298327315311 0.0942466467618942177475460653113 0.0418779015541076646278462192186 +0.108928501605987548828125 -0.066379003226757049560546875 0.21500800549983978271484375 +0.108928501605987548828125 0.066379003226757049560546875 0.21500800549983978271484375 +0.108966296911239615696764815311 -0.0199812009930610649799387346093 0.278795707225799549444644753748 +0.108966296911239615696764815311 0.0199812009930610649799387346093 0.278795707225799549444644753748 +0.109039097279310215338199441248 -0.942065617442131020276008257497 0.0558865999802947016616982978121 +0.109039097279310215338199441248 0.942065617442131020276008257497 0.0558865999802947016616982978121 +0.1090745031833648681640625 -0.4675644934177398681640625 -0.13959300518035888671875 +0.1090745031833648681640625 0.4675644934177398681640625 -0.13959300518035888671875 +0.109077447652816766909822376874 -0.06642960011959075927734375 0.0786717027425765935699786268742 +0.109077447652816766909822376874 0.06642960011959075927734375 0.0786717027425765935699786268742 +0.109097698330879205874666126874 -0.00618750024586915952501398052732 -0.10275900363922119140625 +0.109097698330879205874666126874 0.00618750024586915952501398052732 -0.10275900363922119140625 +0.109214253723621368408203125 -0.1405717469751834869384765625 -0.7285679876804351806640625 +0.109214253723621368408203125 0.1405717469751834869384765625 -0.7285679876804351806640625 +0.1092187464237213134765625 -0.177241504192352294921875 0.13840775191783905029296875 +0.1092187464237213134765625 0.177241504192352294921875 0.13840775191783905029296875 +0.109245845675468439273103626874 -0.289500054717063859399672764994 -0.163570050895214064157201505623 +0.109245845675468439273103626874 0.289500054717063859399672764994 -0.163570050895214064157201505623 +0.109270203113555910978682561563 -0.163246405124664317742855246252 0.0375582009553909329513388115629 +0.109270203113555910978682561563 0.163246405124664317742855246252 0.0375582009553909329513388115629 +0.109285604953765880242855246252 -0.148698401451110850945980246252 -0.0771067976951599204360476846887 +0.109285604953765880242855246252 0.148698401451110850945980246252 -0.0771067976951599204360476846887 +0.109306395053863525390625 0 0.384775590896606456414730246252 +0.109323002398014068603515625 -0.552447974681854248046875 0.82634699344635009765625 +0.109323002398014068603515625 0.552447974681854248046875 0.82634699344635009765625 +0.109332596510648735743664872189 -0.026416649110615253448486328125 -0.64019410312175750732421875 +0.109332596510648735743664872189 0.026416649110615253448486328125 -0.64019410312175750732421875 +0.109504498541355119178852817186 -0.6913816034793853759765625 0 +0.109504498541355119178852817186 -0.262284395098686229363948996252 0.204244244098663318975894753748 +0.109504498541355119178852817186 0.262284395098686229363948996252 0.204244244098663318975894753748 +0.109504498541355119178852817186 0.6913816034793853759765625 0 +0.10953749716281890869140625 -0.19754199683666229248046875 0.10713849961757659912109375 +0.10953749716281890869140625 0.19754199683666229248046875 0.10713849961757659912109375 +0.1096107959747314453125 -0.0796368002891540555099325615629 0.376355600357055675164730246252 +0.1096107959747314453125 0.0796368002891540555099325615629 0.376355600357055675164730246252 +0.10961879789829254150390625 -0.101846399903297427091963811563 0.01053749956190586090087890625 +0.10961879789829254150390625 0.101846399903297427091963811563 0.01053749956190586090087890625 +0.1096343994140625 -0.140796005725860595703125 0.0903150022029876736739950615629 +0.1096343994140625 0.140796005725860595703125 0.0903150022029876736739950615629 +0.1096889972686767578125 -0.162433600425720220394865123126 -0.0397949993610382107833700615629 +0.1096889972686767578125 0.162433600425720220394865123126 -0.0397949993610382107833700615629 +0.109741604328155523129240123126 -0.0797308027744293296157351846887 -0.37629759311676025390625 +0.109741604328155523129240123126 0.0797308027744293296157351846887 -0.37629759311676025390625 +0.109743699431419386436381557814 -0.454908856749534629138054242503 0.288988152146339438708366742503 +0.109743699431419386436381557814 0.454908856749534629138054242503 0.288988152146339438708366742503 +0.109778550267219540681473688437 -0.101836797595024106111161188437 -0.00882885027676820650921474253892 +0.109778550267219540681473688437 0.101836797595024106111161188437 -0.00882885027676820650921474253892 +0.10978345572948455810546875 -0.7173209488391876220703125 -0.442604354023933388440070757497 +0.10978345572948455810546875 0.7173209488391876220703125 -0.442604354023933388440070757497 +0.109810200333595273103348688437 -0.5763924121856689453125 -0.12535379827022552490234375 +0.109810200333595273103348688437 0.5763924121856689453125 -0.12535379827022552490234375 +0.109886696934700003880358565311 -0.259478706121444691046207253748 0.1029354035854339599609375 +0.109886696934700003880358565311 0.259478706121444691046207253748 0.1029354035854339599609375 +0.109906502068042755126953125 -0.19295899569988250732421875 -0.114836253225803375244140625 +0.109906502068042755126953125 0.19295899569988250732421875 -0.114836253225803375244140625 +0.109940195083618172389172684689 -0.04007320106029510498046875 0.1621952056884765625 +0.109940195083618172389172684689 0.04007320106029510498046875 0.1621952056884765625 +0.1099720001220703125 -0.89679801464080810546875 0.428553998470306396484375 +0.1099720001220703125 0.89679801464080810546875 0.428553998470306396484375 +0.1100018024444580078125 -0.0799207985401153564453125 0.146670603752136224917634876874 +0.1100018024444580078125 0.0799207985401153564453125 0.146670603752136224917634876874 +0.110098804533481586798160378748 -0.113934454321861264314286188437 0.312085205316543545794871761245 +0.110098804533481586798160378748 0.113934454321861264314286188437 0.312085205316543545794871761245 +0.110162702947855004054211747189 -0.398233795166015647204460492503 0.178252650797367101498380748126 +0.110162702947855004054211747189 0.398233795166015647204460492503 0.178252650797367101498380748126 +0.110191798210144034642077315311 -0.0877070993185043307205361884371 0.0516260996460914597938618442186 +0.110191798210144034642077315311 0.0877070993185043307205361884371 0.0516260996460914597938618442186 +0.11035700142383575439453125 -0.946196973323822021484375 0.30419099330902099609375 +0.11035700142383575439453125 0.946196973323822021484375 0.30419099330902099609375 +0.110361599922180184107922684689 0 0.792351198196411199425881477509 +0.110426001250743865966796875 -0.039108000695705413818359375 -0.22085450589656829833984375 +0.110426001250743865966796875 0.039108000695705413818359375 -0.22085450589656829833984375 +0.110450498759746551513671875 -0.1618514955043792724609375 -0.15525700151920318603515625 +0.110450498759746551513671875 0.1618514955043792724609375 -0.15525700151920318603515625 +0.110451900959014887027009876874 -0.09518654644489288330078125 -0.0352123506367206587364115932814 +0.110451900959014887027009876874 0.09518654644489288330078125 -0.0352123506367206587364115932814 +0.110453999042510991879240123126 -0.131200599670410172903345369377 0.102890002727508547697432561563 +0.110453999042510991879240123126 0.131200599670410172903345369377 0.102890002727508547697432561563 +0.110485053062438956517077315311 -0.0434887513518333393425230326557 -0.0916612476110458401779013115629 +0.110485053062438956517077315311 0.0434887513518333393425230326557 -0.0916612476110458401779013115629 +0.110537998378276824951171875 -0.080309502780437469482421875 -0.480969488620758056640625 +0.110537998378276824951171875 0.080309502780437469482421875 -0.480969488620758056640625 +0.110554003715515145045422684689 -0.340255999565124533923210492503 0.178885996341705322265625 +0.110554003715515145045422684689 0.340255999565124533923210492503 0.178885996341705322265625 +0.110557603836059573088057561563 -0.340255999565124533923210492503 -0.7155439853668212890625 +0.110557603836059573088057561563 0.340255999565124533923210492503 -0.7155439853668212890625 +0.110559201240539556332365123126 -0.7608439922332763671875 -0.221117591857910161801115123126 +0.110559201240539556332365123126 0.7608439922332763671875 -0.221117591857910161801115123126 +0.110635496675968170166015625 -0.12155850231647491455078125 -0.18837000429630279541015625 +0.110635496675968170166015625 0.12155850231647491455078125 -0.18837000429630279541015625 +0.110680145025253293122879938437 -0.247485345602035500256477007497 -0.221361353993415804763955634371 +0.110680145025253293122879938437 0.247485345602035500256477007497 -0.221361353993415804763955634371 +0.110694301128387448396317438437 -0.0396121501922607407997212192186 0.0931538969278335599044638115629 +0.110694301128387448396317438437 0.0396121501922607407997212192186 0.0931538969278335599044638115629 +0.110705401003360751066573186563 -0.146666702628135692254573996252 0.410771700739860523565738503748 +0.110705401003360751066573186563 0.146666702628135692254573996252 0.410771700739860523565738503748 +0.11072610318660736083984375 0 0.101191502809524533357254938437 +0.110805147886276239566072376874 -0.07285635173320770263671875 0.070101298391819000244140625 +0.110805147886276239566072376874 0.07285635173320770263671875 0.070101298391819000244140625 +0.110822850465774530581697376874 -0.0805171519517898504059161268742 0.0611168995499610859245542826557 +0.110822850465774530581697376874 0.0805171519517898504059161268742 0.0611168995499610859245542826557 +0.110860803723335260562166126874 -0.2133834064006805419921875 0.1793805062770843505859375 +0.110860803723335260562166126874 0.2133834064006805419921875 0.1793805062770843505859375 +0.110980403423309337274105246252 -0.0477346003055572551398988423443 -0.159388804435730002673210492503 +0.110980403423309337274105246252 0.0477346003055572551398988423443 -0.159388804435730002673210492503 +0.110991100221872335263029185626 -0.125892803817987453118831808752 -0.5237672030925750732421875 +0.110991100221872335263029185626 0.125892803817987453118831808752 -0.5237672030925750732421875 +0.111117999255657184942691628748 -0.492784601449966386255141514994 0.484578514099121060443309261245 +0.111117999255657184942691628748 0.492784601449966386255141514994 0.484578514099121060443309261245 +0.111243595927953728419446122189 -0.600520050525665260998664507497 -0.222486552596092235223323996252 +0.111243595927953728419446122189 0.600520050525665260998664507497 -0.222486552596092235223323996252 +0.111315599083900443333483565311 -0.422678983211517311779914507497 -0.411036586761474587170539507497 +0.111315599083900443333483565311 0.422678983211517311779914507497 -0.411036586761474587170539507497 +0.11135800182819366455078125 -0.4730989933013916015625 0.117374502122402191162109375 +0.11135800182819366455078125 0.4730989933013916015625 0.117374502122402191162109375 +0.111394202709198003597990123126 -0.165689396858215348684595369377 0.01176320016384124755859375 +0.111394202709198003597990123126 0.165689396858215348684595369377 0.01176320016384124755859375 +0.11145775020122528076171875 -0.01961450092494487762451171875 -0.2229180037975311279296875 +0.11145775020122528076171875 0.01961450092494487762451171875 -0.2229180037975311279296875 +0.111517405509948736019865123126 -0.165429401397705094778345369377 -0.0140353992581367503084122105861 +0.111517405509948736019865123126 0.165429401397705094778345369377 -0.0140353992581367503084122105861 +0.1115677468478679656982421875 -0.73413826525211334228515625 -0.1053240001201629638671875 +0.1115677468478679656982421875 0.73413826525211334228515625 -0.1053240001201629638671875 +0.11160500347614288330078125 -0.0810849964618682861328125 -0.990438997745513916015625 +0.11160500347614288330078125 0.0810849964618682861328125 -0.990438997745513916015625 +0.11160600185394287109375 -0.0810855984687805231292401231258 -0.144807600975036615542634876874 +0.11160600185394287109375 0.0810855984687805231292401231258 -0.144807600975036615542634876874 +0.111628003418445587158203125 -0.0402855016291141510009765625 -0.485711991786956787109375 +0.111628003418445587158203125 0.0402855016291141510009765625 -0.485711991786956787109375 +0.111668150126934054289229436563 -0.490051656961441095550213731258 -0.223336857557296764031917746252 +0.111668150126934054289229436563 0.490051656961441095550213731258 -0.223336857557296764031917746252 +0.111700199544429779052734375 -0.706187647581100419458266514994 0.459697863459587074963508257497 +0.111700199544429779052734375 0.706187647581100419458266514994 0.459697863459587074963508257497 +0.111738896369934073704577315311 -0.0198853500187397003173828125 0.09807644784450531005859375 +0.111738896369934073704577315311 0.0198853500187397003173828125 0.09807644784450531005859375 +0.11180250346660614013671875 0 -0.22360725700855255126953125 +0.111802749335765838623046875 -0.13143174350261688232421875 0.18090300261974334716796875 +0.111802749335765838623046875 0.13143174350261688232421875 0.18090300261974334716796875 +0.111804001033306121826171875 -0.21266199648380279541015625 -0.069099247455596923828125 +0.111804001033306121826171875 0.21266199648380279541015625 -0.069099247455596923828125 +0.111839401721954348478682561563 -0.013348199427127838134765625 0.165268802642822287829460492503 +0.111839401721954348478682561563 0.013348199427127838134765625 0.165268802642822287829460492503 +0.111857898533344254921040317186 -0.5305509865283966064453125 -0.442722707986831609527911268742 +0.111857898533344254921040317186 0.5305509865283966064453125 -0.442722707986831609527911268742 +0.111951899528503415193192438437 -0.265427398681640613897769753748 -0.0837558031082153292556924384371 +0.111951899528503415193192438437 0.265427398681640613897769753748 -0.0837558031082153292556924384371 +0.1119740009307861328125 0 -0.993710994720458984375 +0.111978301405906671694978626874 -0.0461915977299213395546040317186 0.6894398033618927001953125 +0.111978301405906671694978626874 0.0461915977299213395546040317186 0.6894398033618927001953125 +0.11198695003986358642578125 -0.471613237261772122455028011245 -0.817031326889991693640524772491 +0.11198695003986358642578125 0.471613237261772122455028011245 -0.817031326889991693640524772491 +0.111989396810531618986495061563 -0.579985785484313898230368522491 0.10523580014705657958984375 +0.111989396810531618986495061563 0.579985785484313898230368522491 0.10523580014705657958984375 +0.11199200153350830078125 0 -0.4872964918613433837890625 +0.112019248306751251220703125 -0.18618099391460418701171875 0.123645998537540435791015625 +0.112019248306751251220703125 0.18618099391460418701171875 0.123645998537540435791015625 +0.112021994590759288445980246252 -0.0484759986400604275802450615629 -0.380921196937561046258480246252 +0.112021994590759288445980246252 0.0484759986400604275802450615629 -0.380921196937561046258480246252 +0.112096302956342694367997125937 -0.569165074825286887438835492503 -0.621276897192001298364516514994 +0.112096302956342694367997125937 0.569165074825286887438835492503 -0.621276897192001298364516514994 +0.112117500603199013453625809689 -0.109111750125885018092297684689 0.527280050516128584447983485006 +0.112117500603199013453625809689 0.109111750125885018092297684689 0.527280050516128584447983485006 +0.112145197391510020867855246252 -0.140123403072357183285490123126 -0.0882543981075286920745526231258 +0.112145197391510020867855246252 0.140123403072357183285490123126 -0.0882543981075286920745526231258 +0.112176002562046059352063309689 -0.345249009132385265008480246252 0.823540520668029851769631477509 +0.112176002562046059352063309689 0.345249009132385265008480246252 0.823540520668029851769631477509 +0.112179897725582108924946567186 -0.253110891580581642834602007497 -0.6429233849048614501953125 +0.112179897725582108924946567186 0.253110891580581642834602007497 -0.6429233849048614501953125 +0.112190999090671539306640625 -0.1317470073699951171875 0.984914004802703857421875 +0.112190999090671539306640625 0.1317470073699951171875 0.984914004802703857421875 +0.112286302447319019659488503748 -0.0464768491685390444656533759371 0.328225094079971302374332253748 +0.112286302447319019659488503748 0.0464768491685390444656533759371 0.328225094079971302374332253748 +0.1122962534427642822265625 -0.21566699445247650146484375 0.0581142492592334747314453125 +0.1122962534427642822265625 0.21566699445247650146484375 0.0581142492592334747314453125 +0.11232425272464752197265625 -0.0332675017416477203369140625 0.2208542525768280029296875 +0.11232425272464752197265625 0.0332675017416477203369140625 0.2208542525768280029296875 +0.112411201000213623046875 -0.474099612236022927014289507497 0.350132989883422840460269753748 +0.112411201000213623046875 0.474099612236022927014289507497 0.350132989883422840460269753748 +0.112430700659751886538728626874 -0.0572574019432067829460386576557 -0.0811230003833770668686398153113 +0.112430700659751886538728626874 0.0572574019432067829460386576557 -0.0811230003833770668686398153113 +0.112449002265930173005692438437 -0.0892338037490844754318075615629 -0.0435034498572349562217631557814 +0.112449002265930173005692438437 0.0892338037490844754318075615629 -0.0435034498572349562217631557814 +0.112454795837402352076672684689 -0.114249205589294439144865123126 -0.119587004184722900390625 +0.112454795837402352076672684689 0.114249205589294439144865123126 -0.119587004184722900390625 +0.112482297420501711759932561563 -0.09698639810085296630859375 0.02100884914398193359375 +0.112482297420501711759932561563 0.09698639810085296630859375 0.02100884914398193359375 +0.112497794628143313322432561563 -0.0322005987167358412315287807814 -0.162195396423339854852230246252 +0.112497794628143313322432561563 0.0322005987167358412315287807814 -0.162195396423339854852230246252 +0.112610399723052978515625 -0.0162704005837440504600444057814 -0.383476400375366233141960492503 +0.112610399723052978515625 0.0162704005837440504600444057814 -0.383476400375366233141960492503 +0.1127144992351531982421875 -0.1320399940013885498046875 0.468892991542816162109375 +0.1127144992351531982421875 0.1320399940013885498046875 0.468892991542816162109375 +0.112738499045372003726228626874 -0.300946453213691678119090511245 0.138640950620174396856754128748 +0.112738499045372003726228626874 0.300946453213691678119090511245 0.138640950620174396856754128748 +0.112783053517341622096203934689 -0.407176655530929576531917746252 -0.154878754913806926385433371252 +0.112783053517341622096203934689 0.407176655530929576531917746252 -0.154878754913806926385433371252 +0.112792798876762384585603626874 -0.268920296430587735247996761245 0.0704247012734413174728231865629 +0.112792798876762384585603626874 0.268920296430587735247996761245 0.0704247012734413174728231865629 +0.112833201885223388671875 -0.09217560291290283203125 0.137012004852294921875 +0.112833201885223388671875 0.09217560291290283203125 0.137012004852294921875 +0.1128370463848114013671875 -0.0330169491469860035270933451557 -0.0931540489196777260483273153113 +0.1128370463848114013671875 0.0330169491469860035270933451557 -0.0931540489196777260483273153113 +0.112882804870605479852230246252 -0.347412395477294966283920985006 -0.162978804111480718441740123126 +0.112882804870605479852230246252 0.347412395477294966283920985006 -0.162978804111480718441740123126 +0.112902152538299549444644753748 -0.0487291485071182223220986884371 0.0858985483646392822265625 +0.112902152538299549444644753748 0.0487291485071182223220986884371 0.0858985483646392822265625 +0.112919399142265314273103626874 -0.069847650825977325439453125 -0.069788999855518341064453125 +0.112919399142265314273103626874 0.069847650825977325439453125 -0.069788999855518341064453125 +0.11294759809970855712890625 -0.240449702739715553967414507497 -0.139379999041557317562833873126 +0.11294759809970855712890625 0.240449702739715553967414507497 -0.139379999041557317562833873126 +0.112956154346466053350894753748 -0.0971114963293075589279013115629 -0.0176146499812602982948384067186 +0.112956154346466053350894753748 0.0971114963293075589279013115629 -0.0176146499812602982948384067186 +0.113016602396965024079911188437 -0.08211059868335723876953125 -0.265490394830703746453792746252 +0.113016602396965024079911188437 0.08211059868335723876953125 -0.265490394830703746453792746252 +0.113114695250988009367354436563 -0.229658406972885142938167746252 -0.862821900844573996813835492503 +0.113114695250988009367354436563 0.229658406972885142938167746252 -0.862821900844573996813835492503 +0.113155451416969296540848688437 -0.753012728691101029809829014994 0.56803826987743377685546875 +0.113155451416969296540848688437 0.753012728691101029809829014994 0.56803826987743377685546875 +0.113159203529357918482922684689 -0.156690204143524192126335492503 0.0514118015766143812705912807814 +0.113159203529357918482922684689 0.156690204143524192126335492503 0.0514118015766143812705912807814 +0.113213097304105766993664872189 -0.487357658147811900750667746252 0.414928165078163158074886496252 +0.113213097304105766993664872189 0.487357658147811900750667746252 0.414928165078163158074886496252 +0.11325104534626007080078125 -0.0596556007862091078330912807814 0.431410950422286998406917746252 +0.11325104534626007080078125 0.0596556007862091078330912807814 0.431410950422286998406917746252 +0.113268451392650598696931751874 -0.166948500275611866339176003748 0.8257103860378265380859375 +0.113268451392650598696931751874 0.166948500275611866339176003748 0.8257103860378265380859375 +0.1133062541484832763671875 -0.73611223697662353515625 0.08831849880516529083251953125 +0.1133062541484832763671875 0.73611223697662353515625 0.08831849880516529083251953125 +0.113308000564575198088057561563 -0.0164644002914428703998606096093 -0.163982403278350841180355246252 +0.113308000564575198088057561563 0.0164644002914428703998606096093 -0.163982403278350841180355246252 +0.11330950260162353515625 -0.4819304943084716796875 -0.0700294971466064453125 +0.11330950260162353515625 -0.18198825418949127197265625 -0.12861250340938568115234375 +0.11330950260162353515625 0.18198825418949127197265625 -0.12861250340938568115234375 +0.11330950260162353515625 0.4819304943084716796875 -0.0700294971466064453125 +0.113356099277734767571956808752 0 0.538192051649093672338608485006 +0.11349774897098541259765625 -0.22275149822235107421875 0 +0.11349774897098541259765625 0.22275149822235107421875 0 +0.11358200013637542724609375 -0.991046011447906494140625 -0.070197999477386474609375 +0.11358200013637542724609375 0.991046011447906494140625 -0.070197999477386474609375 +0.113654449582099900672993442186 -0.275250500440597511975227007497 0.183901551365852344854801003748 +0.113654449582099900672993442186 0.275250500440597511975227007497 0.183901551365852344854801003748 +0.11366949975490570068359375 -0.22070924937725067138671875 0.02943974919617176055908203125 +0.11366949975490570068359375 0.22070924937725067138671875 0.02943974919617176055908203125 +0.113693797588348396998547684689 0 -0.164540803432464605160490123126 +0.113719204068183893374666126874 -0.349996495246887195929019753748 0.595457804203033402856704014994 +0.113719204068183893374666126874 0.349996495246887195929019753748 0.595457804203033402856704014994 +0.1137270033359527587890625 -0.157231807708740234375 0.228788691759109485968082253748 +0.1137270033359527587890625 0.157231807708740234375 0.228788691759109485968082253748 +0.11375249922275543212890625 -0.21983574330806732177734375 -0.0351080000400543212890625 +0.11375249922275543212890625 0.21983574330806732177734375 -0.0351080000400543212890625 +0.1139355003833770751953125 -0.0827782541513442937652911268742 -0.0516377985477447509765625 +0.1139355003833770751953125 0.0827782541513442937652911268742 -0.0516377985477447509765625 +0.113962805271148687191740123126 -0.131255400180816661492855246252 -0.0989167988300323486328125 +0.113962805271148687191740123126 0.131255400180816661492855246252 -0.0989167988300323486328125 +0.113982295989990226048327315311 -0.203672093152999861276342130623 -0.1884824931621551513671875 +0.113982295989990226048327315311 0.203672093152999861276342130623 -0.1884824931621551513671875 +0.113988496363162994384765625 -0.0330209992825984954833984375 0.485711991786956787109375 +0.113988496363162994384765625 0.0330209992825984954833984375 0.485711991786956787109375 +0.113989748060703263710102817186 -0.199897599220275862252904630623 0.263718339800834644659488503748 +0.113989748060703263710102817186 0.199897599220275862252904630623 0.263718339800834644659488503748 +0.114003002643585205078125 -0.545162415504455544201789507497 0.7069661915302276611328125 +0.114003002643585205078125 0.545162415504455544201789507497 0.7069661915302276611328125 +0.114014697074890133943192438437 -0.231016060709953313656583873126 -0.368960863351821932720753238755 +0.114014697074890133943192438437 0.231016060709953313656583873126 -0.368960863351821932720753238755 +0.114051498472690582275390625 -0.351020991802215576171875 0.337307512760162353515625 +0.114051498472690582275390625 0.351020991802215576171875 0.337307512760162353515625 +0.114053595066070559416182561563 -0.156040394306182883532585492503 -0.0514118015766143812705912807814 +0.114053595066070559416182561563 0.156040394306182883532585492503 -0.0514118015766143812705912807814 +0.114061045646667469366519753748 -0.0974170535802841158767861884371 0 +0.114061045646667469366519753748 0.0974170535802841158767861884371 0 +0.114101547002792361173995061563 -0.254028609395027193951221988755 0.35348309576511383056640625 +0.114101547002792361173995061563 0.254028609395027193951221988755 0.35348309576511383056640625 +0.1141088008880615234375 -0.148696804046630853823884876874 -0.35336720943450927734375 +0.1141088008880615234375 0.148696804046630853823884876874 -0.35336720943450927734375 +0.114128953218460088558927623126 -0.211159004271030431576505748126 0.604057985544204756322983485006 +0.114128953218460088558927623126 0.211159004271030431576505748126 0.604057985544204756322983485006 +0.114143204689025890008480246252 -0.265135192871093772204460492503 0.276902008056640613897769753748 +0.114143204689025890008480246252 0.265135192871093772204460492503 0.276902008056640613897769753748 +0.114184849709272381867997125937 -0.351418593525886557848991742503 -0.534758889675140403063835492503 +0.114184849709272381867997125937 0.351418593525886557848991742503 -0.534758889675140403063835492503 +0.114211653172969815339676813437 -0.0829787015914916908920773153113 -0.320265758037567127569644753748 +0.114211653172969815339676813437 0.0829787015914916908920773153113 -0.320265758037567127569644753748 +0.114214798808097831028796065311 -0.248132407665252685546875 0.12403710186481475830078125 +0.114214798808097831028796065311 0.248132407665252685546875 0.12403710186481475830078125 +0.11434049904346466064453125 -0.4831964969635009765625 0.058715499937534332275390625 +0.11434049904346466064453125 0.4831964969635009765625 0.058715499937534332275390625 +0.114393603801727292146317438437 -0.156747597455978382452457253748 -0.228788691759109485968082253748 +0.114393603801727292146317438437 0.156747597455978382452457253748 -0.228788691759109485968082253748 +0.114404404163360590152009876874 -0.0575416490435600239128355326557 0.0781063467264175442794638115629 +0.114404404163360590152009876874 0.0575416490435600239128355326557 0.0781063467264175442794638115629 +0.114430752396583554353348688437 -0.169820705056190485171541126874 -0.283842298388481129034488503748 +0.114430752396583554353348688437 0.169820705056190485171541126874 -0.283842298388481129034488503748 +0.114459204673767092619307561563 -0.691941595077514737255341970013 0.38485920429229736328125 +0.114459204673767092619307561563 0.691941595077514737255341970013 0.38485920429229736328125 +0.114463502168655389956697376874 -0.02273190021514892578125 -0.0942411035299301064194210653113 +0.114463502168655389956697376874 0.02273190021514892578125 -0.0942411035299301064194210653113 +0.1146048009395599365234375 -0.224815195798873906918302623126 0.162246304750442493780582253748 +0.1146048009395599365234375 0.224815195798873906918302623126 0.162246304750442493780582253748 +0.114606446027755742855802623126 -0.352728000283241305279346988755 0.254849848151206981317073996252 +0.114606446027755742855802623126 0.352728000283241305279346988755 0.254849848151206981317073996252 +0.114616343379020699244641434689 -0.120319645106792452726729436563 -0.418193989992141745837272992503 +0.114616343379020699244641434689 0.120319645106792452726729436563 -0.418193989992141745837272992503 +0.114631496369838714599609375 -0.103897750377655029296875 -0.196379244327545166015625 +0.114631496369838714599609375 0.103897750377655029296875 -0.196379244327545166015625 +0.114649605751037608758480246252 -0.525292015075683571545539507497 0.592388010025024391858039507497 +0.114649605751037608758480246252 0.525292015075683571545539507497 0.592388010025024391858039507497 +0.11473129689693450927734375 -0.769954660534858725817741742503 -0.341331098973751079217464621252 +0.11473129689693450927734375 0.769954660534858725817741742503 -0.341331098973751079217464621252 +0.114760005474090584498547684689 -0.247693991661071782894865123126 -0.292365598678588856085269753748 +0.114760005474090584498547684689 0.247693991661071782894865123126 -0.292365598678588856085269753748 +0.11477799713611602783203125 -0.991648018360137939453125 0.0588279999792575836181640625 +0.11477799713611602783203125 0.991648018360137939453125 0.0588279999792575836181640625 +0.114798949658870691470369251874 -0.274998492002487160412727007497 -0.183567994832992548159822376874 +0.114798949658870691470369251874 0.274998492002487160412727007497 -0.183567994832992548159822376874 +0.114805197715759269017077315311 -0.277163708209991421771434261245 0 +0.114805197715759269017077315311 0.277163708209991421771434261245 0 +0.1148746013641357421875 -0.0531032025814056410362162807814 0.154867398738861100637720369377 +0.1148746013641357421875 0.0531032025814056410362162807814 0.154867398738861100637720369377 +0.11487825214862823486328125 -0.0911213994026184026520098768742 0.0316206000745296450515908759371 +0.11487825214862823486328125 0.0911213994026184026520098768742 0.0316206000745296450515908759371 +0.114900451898574826326004938437 -0.0759437978267669677734375 -0.0594175502657890292068643134371 +0.114900451898574826326004938437 0.0759437978267669677734375 -0.0594175502657890292068643134371 +0.114906898140907279270983565311 -0.274873191118240323138621761245 0.0352292999625205965896768134371 +0.114906898140907279270983565311 0.274873191118240323138621761245 0.0352292999625205965896768134371 +0.114928805828094490748547684689 -0.769550418853759854442841970013 0.185964798927307134457365123126 +0.114928805828094490748547684689 0.769550418853759854442841970013 0.185964798927307134457365123126 +0.11494664847850799560546875 -0.0297577500343322726150674384371 0.0916609525680541908920773153113 +0.11494664847850799560546875 0.0297577500343322726150674384371 0.0916609525680541908920773153113 +0.114955198764801036492855246252 -0.103850996494293218441740123126 0.126492202281951904296875 +0.114955198764801036492855246252 0.103850996494293218441740123126 0.126492202281951904296875 +0.114962098002433774079911188437 -0.273894596099853504522769753748 -0.0420176982879638671875 +0.114962098002433774079911188437 0.273894596099853504522769753748 -0.0420176982879638671875 +0.114975251257419586181640625 -0.083534248173236846923828125 0.20567624270915985107421875 +0.114975251257419586181640625 0.083534248173236846923828125 0.20567624270915985107421875 +0.115036645531654352359041126874 -0.00990629978477954899196422644536 0.0957519024610519325912960653113 +0.115036645531654352359041126874 0.00990629978477954899196422644536 0.0957519024610519325912960653113 +0.115113604068756106291182561563 -0.354289603233337413445980246252 0.707974386215210027550881477509 +0.115113604068756106291182561563 0.354289603233337413445980246252 0.707974386215210027550881477509 +0.115182553231716153230301813437 -0.307769706845283486096320757497 -0.120460899174213403872713001874 +0.115182553231716153230301813437 0.307769706845283486096320757497 -0.120460899174213403872713001874 +0.115196001529693614617855246252 -0.181703197956085221731470369377 0.337214803695678744244190738755 +0.115196001529693614617855246252 0.181703197956085221731470369377 0.337214803695678744244190738755 +0.115278598666191098298661188437 -0.587311184406280495373664507497 -0.042149998247623443603515625 +0.115278598666191098298661188437 0.587311184406280495373664507497 -0.042149998247623443603515625 +0.11546699702739715576171875 -0.45560400187969207763671875 -0.584459245204925537109375 +0.11546699702739715576171875 0.45560400187969207763671875 -0.584459245204925537109375 +0.1155045032501220703125 -0.0591813012957572923133930942186 -0.270474296808242808953792746252 +0.1155045032501220703125 0.0591813012957572923133930942186 -0.270474296808242808953792746252 +0.115524297952651969212389815311 -0.047515802085399627685546875 -0.0830444991588592529296875 +0.115524297952651969212389815311 0.047515802085399627685546875 -0.0830444991588592529296875 +0.115532246232032773103348688437 -0.01233614981174468994140625 -0.0948689997196197482010049384371 +0.115532246232032773103348688437 0.01233614981174468994140625 -0.0948689997196197482010049384371 +0.115548399835824974757336747189 -0.355614596605300925524772992503 -0.403344684839248679431022992503 +0.115548399835824974757336747189 0.355614596605300925524772992503 -0.403344684839248679431022992503 +0.115565402805805211849943248126 -0.414863544702529896124332253748 0.130510349571704875604183371252 +0.115565402805805211849943248126 0.414863544702529896124332253748 0.130510349571704875604183371252 +0.115628700703382505943217495314 -0.472915297746658358502003238755 0.255892999470233917236328125 +0.115628700703382505943217495314 0.472915297746658358502003238755 0.255892999470233917236328125 +0.115636003017425548211605246252 -0.737534379959106534130341970013 0.287526392936706565173210492503 +0.115636003017425548211605246252 0.737534379959106534130341970013 0.287526392936706565173210492503 +0.1157497465610504150390625 -0.0916384488344192532638388115629 -0.026540100574493408203125 +0.1157497465610504150390625 0.0916384488344192532638388115629 -0.026540100574493408203125 +0.115797498822212227564953934689 -0.580401265621185324938835492503 0.268747054040431976318359375 +0.115797498822212227564953934689 0.580401265621185324938835492503 0.268747054040431976318359375 +0.1157990992069244384765625 -0.0399765014648437513877787807814 0.273847496509551979748664507497 +0.1157990992069244384765625 0.0399765014648437513877787807814 0.273847496509551979748664507497 +0.1158168017864227294921875 -0.587655615806579545434829014994 0.0353154011070728260368589701557 +0.1158168017864227294921875 0.587655615806579545434829014994 0.0353154011070728260368589701557 +0.115883195400238045436047684689 -0.642408800125122136925881477509 -0.462474393844604536596420985006 +0.115883195400238045436047684689 0.642408800125122136925881477509 -0.462474393844604536596420985006 +0.115883953869342803955078125 -0.611482310295105024877670985006 0.187510691583156585693359375 +0.115883953869342803955078125 0.611482310295105024877670985006 0.187510691583156585693359375 +0.115924948453903192691072376874 0 -0.0951914995908737099350460653113 +0.116038405895233162623547684689 -0.0678406000137329184829226846887 -0.148097002506256097964509876874 +0.116038405895233162623547684689 0.0678406000137329184829226846887 -0.148097002506256097964509876874 +0.116050398349761968441740123126 -0.357170391082763716283920985006 0.1377007961273193359375 +0.116050398349761968441740123126 0.357170391082763716283920985006 0.1377007961273193359375 +0.11609874665737152099609375 -0.14361350238323211669921875 0.16851200163364410400390625 +0.11609874665737152099609375 0.14361350238323211669921875 0.16851200163364410400390625 +0.116149199008941647615067438437 -0.0997016966342925969879473768742 0.258009606599807705951121761245 +0.116149199008941647615067438437 0.0997016966342925969879473768742 0.258009606599807705951121761245 +0.116165749728679656982421875 -0.14592124521732330322265625 -0.16647075116634368896484375 +0.116165749728679656982421875 0.14592124521732330322265625 -0.16647075116634368896484375 +0.116177594661712652035490123126 -0.30415999889373779296875 -0.232355999946594254934595369377 +0.116177594661712652035490123126 0.30415999889373779296875 -0.232355999946594254934595369377 +0.116178798675537112150557561563 -0.149067401885986328125 0.0654323995113372802734375 +0.116178798675537112150557561563 0.149067401885986328125 0.0654323995113372802734375 +0.1162413060665130615234375 -0.759516298770904541015625 -0.468639904260635398181022992503 +0.1162413060665130615234375 0.759516298770904541015625 -0.468639904260635398181022992503 +0.116258002817630767822265625 -0.290973007678985595703125 -0.38963949680328369140625 +0.116258002817630767822265625 0.290973007678985595703125 -0.38963949680328369140625 +0.116324996948242193051115123126 -0.100840604305267339535490123126 -0.127670001983642589227230246252 +0.116324996948242193051115123126 0.100840604305267339535490123126 -0.127670001983642589227230246252 +0.116354700922966000642411188437 -0.0640698015689849798004473768742 0.0696897000074386541168536268742 +0.116354700922966000642411188437 0.0640698015689849798004473768742 0.0696897000074386541168536268742 +0.116366994380950938836605246252 -0.160603201389312749691740123126 0.0257943987846374518657643903907 +0.116366994380950938836605246252 0.160603201389312749691740123126 0.0257943987846374518657643903907 +0.116414003074169158935546875 0 0.2212415039539337158203125 +0.116494497656822196263171065311 -0.0846378028392791720291299384371 0.0420176982879638671875 +0.116494497656822196263171065311 0.0846378028392791720291299384371 0.0420176982879638671875 +0.116495203971862804070980246252 -0.149943196773529047183259876874 -0.777139186859130859375 +0.116495203971862804070980246252 0.149943196773529047183259876874 -0.777139186859130859375 +0.11650049686431884765625 -0.1969934999942779541015625 0.7142280042171478271484375 +0.11650049686431884765625 0.1969934999942779541015625 0.7142280042171478271484375 +0.116550001502037037237613503748 -0.0558635011315345708649005018742 -0.325261992216110185083266514994 +0.116550001502037037237613503748 0.0558635011315345708649005018742 -0.325261992216110185083266514994 +0.116570299863815299290514815311 -0.608804696798324496143095529987 -0.325219997763633694720653011245 +0.116570299863815299290514815311 0.608804696798324496143095529987 -0.325219997763633694720653011245 +0.116592302918434156944194057814 -0.432241162657737765240284488755 -0.319489499926567110943409488755 +0.116592302918434156944194057814 0.432241162657737765240284488755 -0.319489499926567110943409488755 +0.116628601402044299040205999063 -0.503273648023605413293068977509 0.188714906573295621017294365629 +0.116628601402044299040205999063 0.503273648023605413293068977509 0.188714906573295621017294365629 +0.116657400131225594264172684689 0 0.162453198432922385485710492503 +0.116717301309108720253071567186 -0.0847993999719619667709835653113 -0.684971702098846391137954014994 +0.116717301309108720253071567186 0.0847993999719619667709835653113 -0.684971702098846391137954014994 +0.116719000041484832763671875 -0.20758950710296630859375 0.0760477483272552490234375 +0.116719000041484832763671875 0.20758950710296630859375 0.0760477483272552490234375 +0.116723001003265380859375 -0.486185014247894287109375 0 +0.116723001003265380859375 0.486185014247894287109375 0 +0.116757300496101376618973688437 -0.0605023518204688970367755018742 -0.0721609488129615755935830634371 +0.116757300496101376618973688437 0.0605023518204688970367755018742 -0.0721609488129615755935830634371 +0.116783595085144048519865123126 -0.160300600528717057668970369377 -0.0257943987846374518657643903907 +0.116783595085144048519865123126 0.160300600528717057668970369377 -0.0257943987846374518657643903907 +0.116813953965902342368998745314 -0.219869643449783352950888115629 -0.490420165657997175756577235006 +0.116813953965902342368998745314 0.219869643449783352950888115629 -0.490420165657997175756577235006 +0.116820253431797027587890625 -0.2043800055980682373046875 -0.084153749048709869384765625 +0.116820253431797027587890625 0.2043800055980682373046875 -0.084153749048709869384765625 +0.11683599650859832763671875 -0.426317989826202392578125 -0.23367150127887725830078125 +0.11683599650859832763671875 0.426317989826202392578125 -0.23367150127887725830078125 +0.116941647231578821353181751874 -0.313879993557929948266860264994 0.101508049666881552952624190311 +0.116941647231578821353181751874 0.313879993557929948266860264994 0.101508049666881552952624190311 +0.1169764995574951171875 -0.16734300553798675537109375 -0.4564130008220672607421875 +0.1169764995574951171875 0.16734300553798675537109375 -0.4564130008220672607421875 +0.117156652361154564601086747189 -0.360577753186225924419971988755 0.527974832057952925268295985006 +0.117156652361154564601086747189 0.360577753186225924419971988755 0.527974832057952925268295985006 +0.117180901765823353155582253748 -0.035722799599170684814453125 -0.273847496509551979748664507497 +0.117180901765823353155582253748 0.035722799599170684814453125 -0.273847496509551979748664507497 +0.117229202389717110377453934689 -0.360800534486770685393963731258 0.398221459984779369012386496252 +0.117229202389717110377453934689 0.360800534486770685393963731258 0.398221459984779369012386496252 +0.117259199917316439543135686563 0 0.841873148083686850817741742503 +0.11730779707431793212890625 -0.0928859978914260836502236884371 0.010539449751377105712890625 +0.11730779707431793212890625 0.0928859978914260836502236884371 0.010539449751377105712890625 +0.11731620132923126220703125 -0.231541192531585671154914507497 0.540948593616485617907585492503 +0.11731620132923126220703125 0.231541192531585671154914507497 0.540948593616485617907585492503 +0.1173262484371662139892578125 -0.74076600372791290283203125 0 +0.1173262484371662139892578125 0.74076600372791290283203125 0 +0.117344248294830311163394753748 -0.0393988519906997639030699076557 0.0847234457731246975997763115629 +0.117344248294830311163394753748 0.0393988519906997639030699076557 0.0847234457731246975997763115629 +0.117359901964664448126285378748 -0.286721745133399930072215511245 0.162840999662876129150390625 +0.117359901964664448126285378748 0.286721745133399930072215511245 0.162840999662876129150390625 +0.117455551028251642398103626874 -0.0928776025772094643295773153113 -0.00882990024983882834663795335928 +0.117455551028251642398103626874 0.0928776025772094643295773153113 -0.00882990024983882834663795335928 +0.117457652091979974917634876874 0 0.0932937026023864662827023153113 +0.117465752363204944952457253748 -0.0776951998472213689606036268742 0.0516260996460914597938618442186 +0.117465752363204944952457253748 0.0776951998472213689606036268742 0.0516260996460914597938618442186 +0.117466503381729120425447376874 -0.2275941073894500732421875 -0.156213301420211780889957253748 +0.117466503381729120425447376874 0.2275941073894500732421875 -0.156213301420211780889957253748 +0.117467454075813285130358565311 -0.361521999537944782598941628748 -0.76026548445224761962890625 +0.117467454075813285130358565311 0.361521999537944782598941628748 -0.76026548445224761962890625 +0.117469151318073269929520563437 -0.80839674174785614013671875 -0.234937441349029524362279630623 +0.117469151318073269929520563437 0.80839674174785614013671875 -0.234937441349029524362279630623 +0.117557203769683843441740123126 -0.161803400516510015316740123126 0 +0.117557203769683843441740123126 0.161803400516510015316740123126 0 +0.11769855022430419921875 -0.0702640503644943181793536268742 0.0609099000692367512077574076557 +0.11769855022430419921875 0.0702640503644943181793536268742 0.0609099000692367512077574076557 +0.117742796242237088288895563437 -0.0284486990422010387058460167964 -0.6894398033618927001953125 +0.117742796242237088288895563437 0.0284486990422010387058460167964 -0.6894398033618927001953125 +0.117747604846954345703125 -0.10565960407257080078125 0.36738479137420654296875 +0.117747604846954345703125 0.10565960407257080078125 0.36738479137420654296875 +0.117784550786018377133146373126 -0.085575096309185028076171875 0.633485439419746443334702235006 +0.117784550786018377133146373126 0.085575096309185028076171875 0.633485439419746443334702235006 +0.117790496349334708470202315311 -0.235152000188827509097322376874 0.144321897625923151187166126874 +0.117790496349334708470202315311 0.235152000188827509097322376874 0.144321897625923151187166126874 +0.117836999893188479338057561563 -0.112901794910430910978682561563 0.115618395805358889494307561563 +0.117836999893188479338057561563 0.112901794910430910978682561563 0.115618395805358889494307561563 +0.117839598655700691920422684689 -0.148698604106903081722990123126 -0.06326580047607421875 +0.117839598655700691920422684689 0.148698604106903081722990123126 -0.06326580047607421875 +0.117843198776245119963057561563 -0.0266140013933181783511994211722 0.159388399124145513363615123126 +0.117843198776245119963057561563 0.0266140013933181783511994211722 0.159388399124145513363615123126 +0.1178610026836395263671875 -0.282546597719192493780582253748 -0.516019785404205344470085492503 +0.1178610026836395263671875 0.282546597719192493780582253748 -0.516019785404205344470085492503 +0.117881000041961669921875 -0.496434986591339111328125 -0.860032975673675537109375 +0.117881000041961669921875 0.496434986591339111328125 -0.860032975673675537109375 +0.117889800667762750796541126874 -0.49706518650054931640625 -0.314687991142272915912059261245 +0.117889800667762750796541126874 0.49706518650054931640625 -0.314687991142272915912059261245 +0.117939296364784229620426003748 -0.0856871992349624578277911268742 -0.0353272497653961195518412807814 +0.117939296364784229620426003748 0.0856871992349624578277911268742 -0.0353272497653961195518412807814 +0.117971747368574145231612249063 -0.192400002479553217105134876874 -0.60956154763698577880859375 +0.117971747368574145231612249063 0.192400002479553217105134876874 -0.60956154763698577880859375 +0.11797200143337249755859375 -0.085710503160953521728515625 -0.203067243099212646484375 +0.11797200143337249755859375 0.085710503160953521728515625 -0.203067243099212646484375 +0.118022851645946516563334682814 -0.244453002512454997674495871252 0.478344351053237970550213731258 +0.118022851645946516563334682814 0.244453002512454997674495871252 0.478344351053237970550213731258 +0.1180239021778106689453125 -0.0122022002935409535490096644139 -0.2755385935306549072265625 +0.1180239021778106689453125 0.0122022002935409535490096644139 -0.2755385935306549072265625 +0.118091547489166254214509876874 -0.0370981492102146134803852817186 -0.0847235977649688637436398153113 +0.118091547489166254214509876874 0.0370981492102146134803852817186 -0.0847235977649688637436398153113 +0.118135803937911995631360184689 -0.423727655410766623766960492503 -0.0948618002235889490325604356258 +0.118135803937911995631360184689 0.423727655410766623766960492503 -0.0948618002235889490325604356258 +0.118136502802371978759765625 -0.255600512027740478515625 0.413173496723175048828125 +0.118136502802371978759765625 0.255600512027740478515625 0.413173496723175048828125 +0.118159653246402734927400501874 -0.0283989988267421694656533759371 -0.328225094079971302374332253748 +0.118159653246402734927400501874 0.0283989988267421694656533759371 -0.328225094079971302374332253748 +0.11827079951763153076171875 -0.747728097438812300268295985006 0.486738914251327536852897992503 +0.11827079951763153076171875 0.747728097438812300268295985006 0.486738914251327536852897992503 +0.1182910501956939697265625 -0.364055398106575001104801003748 -0.236582100391387939453125 +0.1182910501956939697265625 0.364055398106575001104801003748 -0.236582100391387939453125 +0.118298998475074759739733565311 -0.364092600345611583367855246252 0.461998200416564919201789507497 +0.118298998475074759739733565311 0.364092600345611583367855246252 0.461998200416564919201789507497 +0.118408002704381939973465875937 -0.364429509639739968029914507497 0.869292771816253639904914507497 +0.118408002704381939973465875937 0.364429509639739968029914507497 0.869292771816253639904914507497 +0.118431997299194347039730246252 -0.140461599826812749691740123126 0.0790214002132415826995526231258 +0.118431997299194347039730246252 0.140461599826812749691740123126 0.0790214002132415826995526231258 +0.118550600111484522036775501874 0 -0.329311150312423694952457253748 +0.118557903170585621221988503748 -0.172336202859878523385717130623 0.215044802427291875668302623126 +0.118557903170585621221988503748 0.172336202859878523385717130623 0.215044802427291875668302623126 +0.118558298051357258184879128748 -0.137946550548076612985326505623 0.299022844433784462658820757497 +0.118558298051357258184879128748 0.137946550548076612985326505623 0.299022844433784462658820757497 +0.118599298596382130011051003748 -0.0197482489049434668804128278907 0.0896896541118621798416299384371 +0.118599298596382130011051003748 0.0197482489049434668804128278907 0.0896896541118621798416299384371 +0.118659198284149169921875 -0.365192389488220248150440738755 -0.1120471954345703125 +0.118659198284149169921875 0.365192389488220248150440738755 -0.1120471954345703125 +0.118690203130245211515791936563 -0.602645373344421364514289507497 -0.657822597026824995580795985006 +0.118690203130245211515791936563 0.602645373344421364514289507497 -0.657822597026824995580795985006 +0.118692699074745167120426003748 0 0.329260060191154446673778011245 +0.118795050680637365170255748126 -0.305536946654319796490284488755 -0.308277440071105968133480246252 +0.118795050680637365170255748126 0.305536946654319796490284488755 -0.308277440071105968133480246252 +0.118931794166564949732922684689 -0.118977999687194829769865123126 -0.108164203166961681024105246252 +0.118931794166564949732922684689 0.118977999687194829769865123126 -0.108164203166961681024105246252 +0.118961050361394884977705999063 -0.624425113201141357421875 -0.1357999481260776519775390625 +0.118961050361394884977705999063 0.624425113201141357421875 -0.1357999481260776519775390625 +0.119005596637725835629240123126 -0.7830808162689208984375 -0.112345600128173836451672684689 +0.119005596637725835629240123126 0.7830808162689208984375 -0.112345600128173836451672684689 +0.119022750854492181948884876874 -0.227304705977439874819978626874 -0.238046544790267933233707253748 +0.119022750854492181948884876874 0.227304705977439874819978626874 -0.238046544790267933233707253748 +0.1190549992024898529052734375 -0.52798350155353546142578125 0.519191265106201171875 +0.1190549992024898529052734375 0.52798350155353546142578125 0.519191265106201171875 +0.119111001491546630859375 -0.792644977569580078125 0.597935020923614501953125 +0.119111001491546630859375 0.792644977569580078125 0.597935020923614501953125 +0.119122004508972173519865123126 -0.0266263991594314596011994211722 0.380921196937561046258480246252 +0.119122004508972173519865123126 0.0266263991594314596011994211722 0.380921196937561046258480246252 +0.11912579834461212158203125 -0.0668038487434387123764523153113 -0.062018550932407379150390625 +0.11912579834461212158203125 0.0668038487434387123764523153113 -0.062018550932407379150390625 +0.119183698296546930484041126874 -0.0483784496784210177322549384371 0.07716719806194305419921875 +0.119183698296546930484041126874 0.0483784496784210177322549384371 0.07716719806194305419921875 +0.119217002391815193873547684689 -0.0664680004119873046875 0.146182596683502197265625 +0.119217002391815193873547684689 0.0664680004119873046875 0.146182596683502197265625 +0.119337299466133126002453934689 -0.426519888639450062139957253748 0.079620301723480224609375 +0.119337299466133126002453934689 0.426519888639450062139957253748 0.079620301723480224609375 +0.119380100071430197972155440311 -0.320631858706474259790297764994 -0.0737814001739025004944494412484 +0.119380100071430197972155440311 0.320631858706474259790297764994 -0.0737814001739025004944494412484 +0.119398844987154001406892689374 -0.242417207360267616955695757497 -0.910756450891494706567641514994 +0.119398844987154001406892689374 0.242417207360267616955695757497 -0.910756450891494706567641514994 +0.119402495026588437165848688437 -0.217082259058952314889623380623 0.247221091389656061343416126874 +0.119402495026588437165848688437 0.217082259058952314889623380623 0.247221091389656061343416126874 +0.119410999119281768798828125 -0.367502510547637939453125 -0.317305505275726318359375 +0.119410999119281768798828125 0.367502510547637939453125 -0.317305505275726318359375 +0.119427743554115298185713811563 -0.173782803118228912353515625 0.39753811061382293701171875 +0.119427743554115298185713811563 0.173782803118228912353515625 0.39753811061382293701171875 +0.119438803195953374691740123126 -0.0867763996124267661391726846887 -0.134923005104064935855134876874 +0.119438803195953374691740123126 0.0867763996124267661391726846887 -0.134923005104064935855134876874 +0.119540700316429132632478626874 -0.136195501685142522640958873126 -0.239083206653594948498664507497 +0.119540700316429132632478626874 0.136195501685142522640958873126 -0.239083206653594948498664507497 +0.1196157038211822509765625 -0.0793694972991943331619424384371 -0.0435034498572349562217631557814 +0.1196157038211822509765625 0.0793694972991943331619424384371 -0.0435034498572349562217631557814 +0.11962600052356719970703125 -0.16807849705219268798828125 -0.1412065029144287109375 +0.11962600052356719970703125 0.16807849705219268798828125 -0.1412065029144287109375 +0.119642198085784912109375 -0.131323397159576416015625 0.0918690025806427057464276231258 +0.119642198085784912109375 0.131323397159576416015625 0.0918690025806427057464276231258 +0.119720399379730224609375 -0.496264207363128651007144753748 0.315259802341461170538394753748 +0.119720399379730224609375 0.496264207363128651007144753748 0.315259802341461170538394753748 +0.119765101373195639866686690311 -0.0694172523915767558655431912484 0.32146169245243072509765625 +0.119765101373195639866686690311 0.0694172523915767558655431912484 0.32146169245243072509765625 +0.119776953756809231843583063437 -0.368642243742942798956363503748 0.228596413135528558902009876874 +0.119776953756809231843583063437 0.368642243742942798956363503748 0.228596413135528558902009876874 +0.119799502193927764892578125 -0.15505899488925933837890625 0.15525700151920318603515625 +0.119799502193927764892578125 0.15505899488925933837890625 0.15525700151920318603515625 +0.119800795614719388093583063437 -0.646713900566101007605368522491 -0.239600902795791603772102007497 +0.119800795614719388093583063437 0.646713900566101007605368522491 -0.239600902795791603772102007497 +0.11983859539031982421875 -0.0541243970394134563117738423443 -0.150696003437042258532585492503 +0.11983859539031982421875 0.0541243970394134563117738423443 -0.150696003437042258532585492503 +0.1198477484285831451416015625 -0.56844748556613922119140625 -0.47434575855731964111328125 +0.1198477484285831451416015625 0.56844748556613922119140625 -0.47434575855731964111328125 +0.119879998266696929931640625 -0.0500915013253688812255859375 0.2135874927043914794921875 +0.119879998266696929931640625 0.0500915013253688812255859375 0.2135874927043914794921875 +0.119898448884487140997379128748 -0.32293869554996490478515625 0.0619269013404846122017310960928 +0.119898448884487140997379128748 0.32293869554996490478515625 0.0619269013404846122017310960928 +0.119918000698089610711605246252 -0.283586001396179232525440738755 0.255340409278869640008480246252 +0.119918000698089610711605246252 0.283586001396179232525440738755 0.255340409278869640008480246252 +0.119931301474571233578458873126 -0.176769000291824351922542746252 0.874281585216522216796875 +0.119931301474571233578458873126 0.176769000291824351922542746252 0.874281585216522216796875 +0.119976751506328582763671875 -0.04949099756777286529541015625 0.73868550360202789306640625 +0.119976751506328582763671875 0.04949099756777286529541015625 0.73868550360202789306640625 +0.119981953501701363307141434689 -0.514320942759513899389389735006 -0.153552305698394786492855246252 +0.119981953501701363307141434689 0.514320942759513899389389735006 -0.153552305698394786492855246252 +0.119982147216796869448884876874 -0.0269389495253562934184987653907 -0.0858987003564834622482138115629 +0.119982147216796869448884876874 0.0269389495253562934184987653907 -0.0858987003564834622482138115629 +0.120036301016807553376786188437 -0.0508675485849380479286274692186 -0.0741874516010284368316973768742 +0.120036301016807553376786188437 0.0508675485849380479286274692186 -0.0741874516010284368316973768742 +0.120061545073986045140124190311 -0.144993451237678511178685880623 -0.295062953233718838763621761245 +0.120061545073986045140124190311 0.144993451237678511178685880623 -0.295062953233718838763621761245 +0.120104598999023440275557561563 -0.121364402770996096525557561563 0.104141998291015627775557561563 +0.120104598999023440275557561563 0.121364402770996096525557561563 0.104141998291015627775557561563 +0.120129203796386724301115123126 -0.36972200870513916015625 0.0942059993743896567641726846887 +0.120129203796386724301115123126 0.36972200870513916015625 0.0942059993743896567641726846887 +0.12014834582805633544921875 -0.0872925013303756658356036268742 0.0210803993046283708046040317186 +0.12014834582805633544921875 0.0872925013303756658356036268742 0.0210803993046283708046040317186 +0.1201927475631237030029296875 -0.27119024097919464111328125 -0.68884648382663726806640625 +0.1201927475631237030029296875 0.27119024097919464111328125 -0.68884648382663726806640625 +0.1203365027904510498046875 -0.575449216365814142370993522491 0.74624209105968475341796875 +0.1203365027904510498046875 0.575449216365814142370993522491 0.74624209105968475341796875 +0.120382748544216156005859375 -0.19816200435161590576171875 0.093486748635768890380859375 +0.120382748544216156005859375 0.19816200435161590576171875 0.093486748635768890380859375 +0.12040375173091888427734375 -0.100241251289844512939453125 0.19481949508190155029296875 +0.12040375173091888427734375 0.100241251289844512939453125 0.19481949508190155029296875 +0.120507600903511036261051003748 -0.0875533461570739690582598768742 -0.0176728494465351083919646413278 +0.120507600903511036261051003748 0.0875533461570739690582598768742 -0.0176728494465351083919646413278 +0.120588004589080810546875 -0.154515004158020025082365123126 0.0397947996854782146125550923443 +0.120588004589080810546875 0.154515004158020025082365123126 0.0397947996854782146125550923443 +0.120591899007558830958508622189 -0.457902231812477134020866742503 -0.445289635658264182360710492503 +0.120591899007558830958508622189 0.457902231812477134020866742503 -0.445289635658264182360710492503 +0.120709651708602899722322376874 -0.072665400803089141845703125 -0.05146770179271697998046875 +0.120709651708602899722322376874 0.072665400803089141845703125 -0.05146770179271697998046875 +0.120850503444671630859375 -0.185754007101058965512052623126 -0.202214401960372908151342130623 +0.120850503444671630859375 0.185754007101058965512052623126 -0.202214401960372908151342130623 +0.120860004425048836451672684689 -0.785186386108398526317841970013 0.0942063987255096491058026231258 +0.120860004425048836451672684689 0.785186386108398526317841970013 0.0942063987255096491058026231258 +0.120920406281948097926282059689 -0.432294309139251708984375 -0.031618349254131317138671875 +0.120920406281948097926282059689 0.432294309139251708984375 -0.031618349254131317138671875 +0.120985500514507293701171875 -0.3723615109920501708984375 0.3109810054302215576171875 +0.120985500514507293701171875 0.3723615109920501708984375 0.3109810054302215576171875 +0.121006196737289420384264815311 0 0.274513202905654896124332253748 +0.121010601520538330078125 -0.140580797195434564761384876874 -0.0747893989086151206313601846887 +0.121010601520538330078125 0.140580797195434564761384876874 -0.0747893989086151206313601846887 +0.121081200242042538728348688437 -0.137337604165077203921541126874 -0.57138240337371826171875 +0.121081200242042538728348688437 0.137337604165077203921541126874 -0.57138240337371826171875 +0.121114753186702728271484375 -0.12902875244617462158203125 -0.17658649384975433349609375 +0.121114753186702728271484375 0.12902875244617462158203125 -0.17658649384975433349609375 +0.12123750150203704833984375 -0.19505025446414947509765625 -0.098777003586292266845703125 +0.12123750150203704833984375 0.19505025446414947509765625 -0.098777003586292266845703125 +0.121270796656608573216296065311 -0.01655744947493076324462890625 -0.0867136538028717013260049384371 +0.121270796656608573216296065311 0.01655744947493076324462890625 -0.0867136538028717013260049384371 +0.121293005347251889314286188437 -0.432534608244895923956363503748 0.0264897007495164885093608120314 +0.121293005347251889314286188437 0.432534608244895923956363503748 0.0264897007495164885093608120314 +0.121321846544742581452958063437 -0.628317934274673528527443977509 0.1140054501593112945556640625 +0.121321846544742581452958063437 0.628317934274673528527443977509 0.1140054501593112945556640625 +0.1213527023792266845703125 -0.0881674468517303494552450615629 0 +0.1213527023792266845703125 0.0881674468517303494552450615629 0 +0.121376699209213248509264815311 -0.2544077932834625244140625 -0.102686101198196405581697376874 +0.121376699209213248509264815311 0.2544077932834625244140625 -0.102686101198196405581697376874 +0.121390646696090689915514815311 -0.0294616498053073862239958913278 0.0830442041158676175216513115629 +0.121390646696090689915514815311 0.0294616498053073862239958913278 0.0830442041158676175216513115629 +0.12140084803104400634765625 -0.0549037501215934725662393134371 0.0689014479517936623276241903113 +0.12140084803104400634765625 0.0549037501215934725662393134371 0.0689014479517936623276241903113 +0.121408796310424796360827315311 -0.00989819951355457201824794566392 0.0875324964523315346420773153113 +0.121408796310424796360827315311 0.00989819951355457201824794566392 0.0875324964523315346420773153113 +0.121418145298957821931473688437 -0.327617499232292164190738503748 0.0206031005829572649856729071871 +0.121418145298957821931473688437 0.327617499232292164190738503748 0.0206031005829572649856729071871 +0.1214801967144012451171875 -0.815246111154556252209602007497 -0.361409398913383472784488503748 +0.1214801967144012451171875 0.815246111154556252209602007497 -0.361409398913383472784488503748 +0.12149059772491455078125 -0.15436780452728271484375 -0.0375582009553909329513388115629 +0.12149059772491455078125 0.15436780452728271484375 -0.0375582009553909329513388115629 +0.12150044739246368408203125 -0.276953396201133739129573996252 0.333218711614608753546207253748 +0.12150044739246368408203125 0.276953396201133739129573996252 0.333218711614608753546207253748 +0.121543794870376573036274692186 -0.327295500040054310186832253748 -0.024592049419879913330078125 +0.121543794870376573036274692186 0.327295500040054310186832253748 -0.024592049419879913330078125 +0.121575602889060982447766434689 -0.199777954816818231753572376874 -0.384457942843437205926448996252 +0.121575602889060982447766434689 0.199777954816818231753572376874 -0.384457942843437205926448996252 +0.121591798216104524099634431877 -0.0883404530584812192062216240629 -0.529066437482833884509147992503 +0.121591798216104524099634431877 0.0883404530584812192062216240629 -0.529066437482833884509147992503 +0.121612904965877524632311690311 -0.735187944769859269555922764994 0.408912904560565948486328125 +0.121612904965877524632311690311 0.735187944769859269555922764994 0.408912904560565948486328125 +0.121771253645420074462890625 -0.212006747722625732421875 -0.05220074951648712158203125 +0.121771253645420074462890625 0.212006747722625732421875 -0.05220074951648712158203125 +0.12177880108356475830078125 -0.513607913255691550524772992503 0.379310739040374766961605246252 +0.12177880108356475830078125 0.513607913255691550524772992503 0.379310739040374766961605246252 +0.121815206110477441958650501874 -0.558122766017913773950454014994 0.629412260651588395532485264994 +0.121815206110477441958650501874 0.558122766017913773950454014994 0.629412260651588395532485264994 +0.121819800138473502415514815311 -0.53460180759429931640625 -0.243640208244323724917634876874 +0.121819800138473502415514815311 0.53460180759429931640625 -0.243640208244323724917634876874 +0.121842004358768463134765625 -0.374996244907379150390625 0.6379905045032501220703125 +0.121842004358768463134765625 0.374996244907379150390625 0.6379905045032501220703125 +0.1218760013580322265625 -0.2138342559337615966796875 0.0438307486474514007568359375 +0.1218760013580322265625 0.2138342559337615966796875 0.0438307486474514007568359375 +0.121921797096729275788895563437 -0.524846708774566628186164507497 0.446845716238021828381477007497 +0.121921797096729275788895563437 0.524846708774566628186164507497 0.446845716238021828381477007497 +0.121940553188323974609375 -0.00618720017373561824436389855464 -0.087133347988128662109375 +0.121940553188323974609375 0.00618720017373561824436389855464 -0.087133347988128662109375 +0.1220405995845794677734375 -0.0595736995339393587967080634371 0.267501604557037364617855246252 +0.1220405995845794677734375 0.0595736995339393587967080634371 0.267501604557037364617855246252 +0.122111856192350390348799749063 -0.817647320032119706567641514994 0.197587598860263807809545255623 +0.122111856192350390348799749063 0.817647320032119706567641514994 0.197587598860263807809545255623 +0.122161352634429926089509876874 -0.0810971975326538058181924384371 0.0316206000745296450515908759371 +0.122161352634429926089509876874 0.0810971975326538058181924384371 0.0316206000745296450515908759371 +0.12225525081157684326171875 -0.01668524928390979766845703125 0.217428743839263916015625 +0.12225525081157684326171875 0.01668524928390979766845703125 0.217428743839263916015625 +0.122308204323053351658678877811 -0.376432703435420956683543636245 0.752222785353660605700554242503 +0.122308204323053351658678877811 0.376432703435420956683543636245 0.752222785353660605700554242503 +0.122310000658035267218082253748 -0.119031000137329090460269753748 0.575214600563049294201789507497 +0.122310000658035267218082253748 0.119031000137329090460269753748 0.575214600563049294201789507497 +0.122380805015563975945980246252 -0.376646804809570356908920985006 -0.0562143981456756647308026231258 +0.122380805015563975945980246252 0.376646804809570356908920985006 -0.0562143981456756647308026231258 +0.122403003275394439697265625 -0.44248199462890625 0.19805850088596343994140625 +0.122403003275394439697265625 0.44248199462890625 0.19805850088596343994140625 +0.122493802011013036556974498126 -0.520408892631530783923210492503 0.129111952334642426931665681877 +0.122493802011013036556974498126 0.520408892631530783923210492503 0.129111952334642426931665681877 +0.1225045025348663330078125 -0.217431247234344482421875 0.014706999994814395904541015625 +0.1225045025348663330078125 0.217431247234344482421875 0.014706999994814395904541015625 +0.122531998157501223478682561563 -0.0788266003131866538344851846887 0.137012004852294921875 +0.122531998157501223478682561563 0.0788266003131866538344851846887 0.137012004852294921875 +0.12261450290679931640625 -0.2597613036632537841796875 0.08654339611530303955078125 +0.12261450290679931640625 0.2597613036632537841796875 0.08654339611530303955078125 +0.122637605667114263363615123126 -0.122082805633544927426115123126 -0.360632395744323763775440738755 +0.122637605667114263363615123126 0.122082805633544927426115123126 -0.360632395744323763775440738755 +0.122658252716064453125 -0.21713350713253021240234375 -0.01754949986934661865234375 +0.122658252716064453125 0.21713350713253021240234375 -0.01754949986934661865234375 +0.12269915640354156494140625 -0.8017116487026214599609375 -0.494675454497337296899672764994 +0.12269915640354156494140625 0.8017116487026214599609375 -0.494675454497337296899672764994 +0.122740799188613886050447376874 -0.0409892991185188265701455634371 -0.0758588969707488930405148153113 +0.122740799188613886050447376874 0.0409892991185188265701455634371 -0.0758588969707488930405148153113 +0.122745597362518318873547684689 -0.377773189544677756579460492503 0.0471275985240936293174662807814 +0.122745597362518318873547684689 0.377773189544677756579460492503 0.0471275985240936293174662807814 +0.122790803760290154200696122189 -0.0443140517920255702644105610943 -0.5342831909656524658203125 +0.122790803760290154200696122189 0.0443140517920255702644105610943 -0.5342831909656524658203125 +0.122838449478149411286942438437 -0.0572574019432067829460386576557 -0.0642829477787017766754473768742 +0.122838449478149411286942438437 0.0572574019432067829460386576557 -0.0642829477787017766754473768742 +0.122863253206014627627595814374 -0.783630278706550553735610264994 0.305496792495250690802066628748 +0.122863253206014627627595814374 0.783630278706550553735610264994 0.305496792495250690802066628748 +0.12287199497222900390625 -0.157179796695709250720085492503 0.0140353992581367503084122105861 +0.12287199497222900390625 0.157179796695709250720085492503 0.0140353992581367503084122105861 +0.122886501252651214599609375 -0.16570974886417388916015625 0.14120624959468841552734375 +0.122886501252651214599609375 0.16570974886417388916015625 0.14120624959468841552734375 +0.12290699779987335205078125 -0.068672247231006622314453125 -0.20658649504184722900390625 +0.12290699779987335205078125 0.068672247231006622314453125 -0.20658649504184722900390625 +0.122908103466033924444644753748 -0.227402004599571216925113503748 0.650523984432220370166533029987 +0.122908103466033924444644753748 0.227402004599571216925113503748 0.650523984432220370166533029987 +0.122922599315643310546875 -0.0817657470703124916733273153113 -0.026540100574493408203125 +0.122922599315643310546875 0.0817657470703124916733273153113 -0.026540100574493408203125 +0.122950804233551036492855246252 -0.0402370005846023615081463731258 -0.152525603771209716796875 +0.122950804233551036492855246252 0.0402370005846023615081463731258 -0.152525603771209716796875 +0.122968053817749015110827315311 -0.0612424492835998493522886576557 0.0602346003055572454254473768742 +0.122968053817749015110827315311 0.0612424492835998493522886576557 0.0602346003055572454254473768742 +0.122968299686908713597155440311 -0.378450793027877763208266514994 -0.575894188880920365747329014994 +0.122968299686908713597155440311 0.378450793027877763208266514994 -0.575894188880920365747329014994 +0.122969694435596466064453125 0 0.432872539758682284283253238755 +0.122985300421714779939286188437 -0.11988119781017303466796875 0.245973908901214594058259876874 +0.122985300421714779939286188437 0.11988119781017303466796875 0.245973908901214594058259876874 +0.12300600111484527587890625 -0.1629630029201507568359375 0.4564130008220672607421875 +0.12300600111484527587890625 0.1629630029201507568359375 0.4564130008220672607421875 +0.123047399520874026213057561563 -0.01334179937839508056640625 0.157102799415588384457365123126 +0.123047399520874026213057561563 0.01334179937839508056640625 0.157102799415588384457365123126 +0.123120605945587158203125 -0.0397157996892929104904013115629 0.152525401115417486019865123126 +0.123120605945587158203125 0.0397157996892929104904013115629 0.152525401115417486019865123126 +0.123125895112752917204268499063 -0.682559350132942221911491742503 -0.491379043459892250744758257497 +0.123125895112752917204268499063 0.682559350132942221911491742503 -0.491379043459892250744758257497 +0.123157405853271492701672684689 -0.15714299678802490234375 -0.01176320016384124755859375 +0.123157405853271492701672684689 0.15714299678802490234375 -0.01176320016384124755859375 +0.123164796829223641139172684689 -0.485977602005004893914730246252 -0.623423194885253995067841970013 +0.123164796829223641139172684689 0.485977602005004893914730246252 -0.623423194885253995067841970013 +0.123191201686859139186047684689 0 -0.536026141047477810985810720013 +0.123204994201660159025557561563 -0.105825805664062508326672684689 -0.116710996627807622738615123126 +0.123204994201660159025557561563 0.105825805664062508326672684689 -0.116710996627807622738615123126 +0.123220002651214605160490123126 -0.132176005840301508120759876874 -0.0857107996940612848479901231258 +0.123220002651214605160490123126 0.132176005840301508120759876874 -0.0857107996940612848479901231258 +0.1232637465000152587890625 -0.18744599819183349609375 0.110317997634410858154296875 +0.1232637465000152587890625 0.18744599819183349609375 0.110317997634410858154296875 +0.123292645812034598606921065311 -0.0744658514857292203048544365629 0.0418779015541076646278462192186 +0.123292645812034598606921065311 0.0744658514857292203048544365629 0.0418779015541076646278462192186 +0.1233121454715728759765625 -0.0895914003252983176528445596887 0.423400050401687655377003238755 +0.1233121454715728759765625 0.0895914003252983176528445596887 0.423400050401687655377003238755 +0.12339270114898681640625 -0.0389834985136985751053018134371 0.0758586019277572576324786268742 +0.12339270114898681640625 0.0389834985136985751053018134371 0.0758586019277572576324786268742 +0.1234447956085205078125 -0.22096478939056396484375 -0.309735202789306662829460492503 +0.1234447956085205078125 0.22096478939056396484375 -0.309735202789306662829460492503 +0.123453199863433837890625 -0.207701611518859879934595369377 0.318777990341186534539730246252 +0.123453199863433837890625 0.207701611518859879934595369377 0.318777990341186534539730246252 +0.123459300398826590794421065311 -0.18668639659881591796875 0.199764901399612421206697376874 +0.123459300398826590794421065311 0.18668639659881591796875 0.199764901399612421206697376874 +0.123459304869174960050948186563 -0.0896971531212329836746377509371 -0.42333479225635528564453125 +0.123459304869174960050948186563 0.0896971531212329836746377509371 -0.42333479225635528564453125 +0.12360680103302001953125 -0.380422401428222700658920985006 0 +0.12360680103302001953125 0.380422401428222700658920985006 0 +0.123627001047134393862947376874 0 0.0849491983652114895919638115629 +0.123661199212074274234041126874 0 0.587118601799011208264289507497 +0.123776154220104211978181751874 -0.159314646571874607428043191248 -0.8257103860378265380859375 +0.123776154220104211978181751874 0.159314646571874607428043191248 -0.8257103860378265380859375 +0.123866397142410267218082253748 -0.067238397896289825439453125 0.0513428986072540297080912807814 +0.123866397142410267218082253748 0.067238397896289825439453125 0.0513428986072540297080912807814 +0.123950698971748346499666126874 -0.114803400635719296540848688437 -0.247904098033905007092414507497 +0.123950698971748346499666126874 0.114803400635719296540848688437 -0.247904098033905007092414507497 +0.123979401588439952508480246252 -0.147542202472686762027009876874 0.0534825980663299616058026231258 +0.123979401588439952508480246252 0.147542202472686762027009876874 0.0534825980663299616058026231258 +0.123985949158668534719751619377 -0.145243993401527410336271373126 0.515782290697097800524772992503 +0.123985949158668534719751619377 0.145243993401527410336271373126 0.515782290697097800524772992503 +0.124093997478485110197432561563 -0.0737025976181030356704226846887 -0.138450801372528076171875 +0.124093997478485110197432561563 0.0737025976181030356704226846887 -0.138450801372528076171875 +0.124148595333099368009932561563 -0.0245596006512641927554962961722 -0.154867398738861100637720369377 +0.124148595333099368009932561563 0.0245596006512641927554962961722 -0.154867398738861100637720369377 +0.124156799912452694978348688437 0 0.891395097970962502209602007497 +0.124185951054096216372713001874 -0.257176154851913418841746761245 -0.202332192659378046206697376874 +0.124185951054096216372713001874 0.257176154851913418841746761245 -0.202332192659378046206697376874 +0.124267196655273443051115123126 -0.210126399993896484375 0.761843204498291015625 +0.124267196655273443051115123126 0.210126399993896484375 0.761843204498291015625 +0.124373254179954526033036188437 -0.382787999510765086785823996252 0.201246745884418487548828125 +0.124373254179954526033036188437 0.382787999510765086785823996252 0.201246745884418487548828125 +0.124377304315567024928235184689 -0.382787999510765086785823996252 -0.8049869835376739501953125 +0.124377304315567024928235184689 0.382787999510765086785823996252 -0.8049869835376739501953125 +0.124379101395606997404463811563 -0.8559494912624359130859375 -0.248757290840148942434595369377 +0.124379101395606997404463811563 0.8559494912624359130859375 -0.248757290840148942434595369377 +0.124590298533439627903796065311 -0.0828624039888381930252236884371 0.010539449751377105712890625 +0.124590298533439627903796065311 0.0828624039888381930252236884371 0.010539449751377105712890625 +0.124613696336746210269197376874 -0.0197622008621692636654021413278 0.0811225533485412514389523153113 +0.124613696336746210269197376874 0.0197622008621692636654021413278 0.0811225533485412514389523153113 +0.124628099799156177862613503748 -0.0830053478479385320465411268742 -0.00882990024983882834663795335928 +0.124628099799156177862613503748 0.0830053478479385320465411268742 -0.00882990024983882834663795335928 +0.12464000284671783447265625 -0.3836100101470947265625 0.9150450229644775390625 +0.12464000284671783447265625 0.3836100101470947265625 0.9150450229644775390625 +0.124640452861785905325220369377 -0.530123543739318914269631477509 -0.07703244686126708984375 +0.124640452861785905325220369377 0.530123543739318914269631477509 -0.07703244686126708984375 +0.124659901857376090306139815311 -0.0756307482719421331207598768742 -0.0352123506367206587364115932814 +0.124659901857376090306139815311 0.0756307482719421331207598768742 -0.0352123506367206587364115932814 +0.124695548415184015444978626874 -0.233624652028083773513955634371 0.228846442699432356393529630623 +0.124695548415184015444978626874 0.233624652028083773513955634371 0.228846442699432356393529630623 +0.124704998731613156404129938437 -0.625047516822814896997329014994 0.28941990435123443603515625 +0.124704998731613156404129938437 0.625047516822814896997329014994 0.28941990435123443603515625 +0.124738596379756913612446567186 -0.119500148296356190069644753748 -0.3044009506702423095703125 +0.124738596379756913612446567186 0.119500148296356190069644753748 -0.3044009506702423095703125 +0.124798104166984544227680942186 -0.658519411087036043994658029987 0.20193459093570709228515625 +0.124798104166984544227680942186 0.658519411087036043994658029987 0.20193459093570709228515625 +0.12481950223445892333984375 -0.0633537009358405983627804403113 -0.0539111986756324740310830634371 +0.12481950223445892333984375 0.0633537009358405983627804403113 -0.0539111986756324740310830634371 +0.124829399585723879728682561563 -0.123127400875091552734375 -0.0962145984172821100433026231258 +0.124829399585723879728682561563 0.123127400875091552734375 -0.0962145984172821100433026231258 +0.124841399490833282470703125 -0.789268547296523959033720529987 0.513779965043067887719985264994 +0.124841399490833282470703125 0.789268547296523959033720529987 0.513779965043067887719985264994 +0.124852395057678228207365123126 -0.330857205390930220190170985006 -0.186937201023101823293970369377 +0.124852395057678228207365123126 0.330857205390930220190170985006 -0.186937201023101823293970369377 +0.124857750535011288728348688437 -0.030914850533008575439453125 -0.0771673500537872342208700615629 +0.124857750535011288728348688437 0.030914850533008575439453125 -0.0771673500537872342208700615629 +0.124885148555040362272627874063 -0.636253783106803916247429242503 -0.04566249810159206390380859375 +0.124885148555040362272627874063 0.636253783106803916247429242503 -0.04566249810159206390380859375 +0.12489674985408782958984375 -0.65229074656963348388671875 -0.348449997603893280029296875 +0.12489674985408782958984375 0.65229074656963348388671875 -0.348449997603893280029296875 +0.124979397654533377903796065311 -0.265427702665328946185496761245 -0.062676899135112762451171875 +0.124979397654533377903796065311 0.265427702665328946185496761245 -0.062676899135112762451171875 +0.124999247491359710693359375 -0.0495559982955455780029296875 -0.2107592523097991943359375 +0.124999247491359710693359375 0.0495559982955455780029296875 -0.2107592523097991943359375 +0.12503324449062347412109375 -0.18472050130367279052734375 -0.112893752753734588623046875 +0.12503324449062347412109375 0.18472050130367279052734375 -0.112893752753734588623046875 +0.125047194957733170950220369377 -0.0908518016338348416427450615629 0.126921999454498307668970369377 +0.125047194957733170950220369377 0.0908518016338348416427450615629 0.126921999454498307668970369377 +0.1250542514026165008544921875 -0.090856499969959259033203125 -0.7338982522487640380859375 +0.1250542514026165008544921875 0.090856499969959259033203125 -0.7338982522487640380859375 +0.125063395500183111019865123126 -0.00826020017266273533229625769536 -0.155855596065521240234375 +0.125063395500183111019865123126 0.00826020017266273533229625769536 -0.155855596065521240234375 +0.12506850063800811767578125 -0.116052500903606414794921875 0.1827284991741180419921875 +0.12506850063800811767578125 0.116052500903606414794921875 0.1827284991741180419921875 +0.125147998332977294921875 -0.7901504039764404296875 0 +0.125147998332977294921875 -0.299753594398498524054019753748 0.233421993255615245477230246252 +0.125147998332977294921875 0.299753594398498524054019753748 0.233421993255615245477230246252 +0.125147998332977294921875 0.7901504039764404296875 0 +0.125151899456977827584935880623 -0.267522597312927212787059261245 0.052617900073528289794921875 +0.125151899456977827584935880623 0.267522597312927212787059261245 0.052617900073528289794921875 +0.125284103304147714785798939374 -0.636125671863555841589743522491 -0.694368296861648581774772992503 +0.125284103304147714785798939374 0.636125671863555841589743522491 -0.694368296861648581774772992503 +0.1253145039081573486328125 -0.452418506145477294921875 -0.17208750545978546142578125 +0.1253145039081573486328125 0.452418506145477294921875 -0.17208750545978546142578125 +0.12534324824810028076171875 -0.17551074922084808349609375 0.12643174827098846435546875 +0.12534324824810028076171875 0.17551074922084808349609375 0.12643174827098846435546875 +0.125387345999479316027702680003 -0.0363230992108583491950746235943 0.5342831909656524658203125 +0.125387345999479316027702680003 0.0363230992108583491950746235943 0.5342831909656524658203125 +0.125395497679710393734708873126 -0.211569303274154657534822376874 -0.171797704696655256784154630623 +0.125395497679710393734708873126 0.211569303274154657534822376874 -0.171797704696655256784154630623 +0.125456648319959646054044810626 -0.386123090982437189300213731258 0.371038264036178622173878238755 +0.125456648319959646054044810626 0.386123090982437189300213731258 0.371038264036178622173878238755 +0.125468201935291290283203125 -0.636626917123794600072983485006 0.0382583511993289035468812642193 +0.125468201935291290283203125 0.636626917123794600072983485006 0.0382583511993289035468812642193 +0.12547375261783599853515625 -0.11174274981021881103515625 -0.18512125313282012939453125 +0.12547375261783599853515625 0.11174274981021881103515625 -0.18512125313282012939453125 +0.125512599945068359375 -0.147776794433593761102230246252 -0.0490774005651474012901225307814 +0.125512599945068359375 0.147776794433593761102230246252 -0.0490774005651474012901225307814 +0.12568299472332000732421875 -0.255176007747650146484375 -0.95869100093841552734375 +0.12568299472332000732421875 0.255176007747650146484375 -0.95869100093841552734375 +0.125774548947811148913444867503 -0.531516146659851140832131477509 0.0645870499312877766051599337516 +0.125774548947811148913444867503 0.531516146659851140832131477509 0.0645870499312877766051599337516 +0.125813804566860198974609375 -0.294060906767845131604133257497 -0.142123454809188837222322376874 +0.125813804566860198974609375 0.294060906767845131604133257497 -0.142123454809188837222322376874 +0.125827205181121837274105246252 -0.130210804939270036184595369377 0.356668806076049837994190738755 +0.125827205181121837274105246252 0.130210804939270036184595369377 0.356668806076049837994190738755 +0.1258344948291778564453125 -0.066284000873565673828125 0.479345500469207763671875 +0.1258344948291778564453125 0.066284000873565673828125 0.479345500469207763671875 +0.12583799660205841064453125 -0.15273000299930572509765625 -0.1527689993381500244140625 +0.12583799660205841064453125 0.15273000299930572509765625 -0.1527689993381500244140625 +0.125838151574134832211271373126 -0.0455698505043983445594868442186 0.0677359521389007540603799384371 +0.125838151574134832211271373126 0.0455698505043983445594868442186 0.0677359521389007540603799384371 +0.125858697295188892706363503748 -0.271749597787857066766292746252 0.0176577005535364130184294850778 +0.125858697295188892706363503748 0.271749597787857066766292746252 0.0176577005535364130184294850778 +0.125940603017806990182592130623 -0.0475159496068954453895649692186 -0.0661906510591506874741085653113 +0.125940603017806990182592130623 0.0475159496068954453895649692186 -0.0661906510591506874741085653113 +0.125941050052642805612279630623 -0.0690391480922698946853799384371 -0.043271698057651519775390625 +0.125941050052642805612279630623 0.0690391480922698946853799384371 -0.043271698057651519775390625 +0.125975704193115239926115123126 -0.271451693773269664422542746252 -0.0210749991238117218017578125 +0.125975704193115239926115123126 0.271451693773269664422542746252 -0.0210749991238117218017578125 +0.126024743914604192562833873126 -0.0545354984700679792930522182814 -0.428536346554756197857471988755 +0.126024743914604192562833873126 0.0545354984700679792930522182814 -0.428536346554756197857471988755 +0.126052799820899952276676003748 -0.387943196296691883429019753748 -0.440012383460998524054019753748 +0.126052799820899952276676003748 0.387943196296691883429019753748 -0.440012383460998524054019753748 +0.12614040076732635498046875 -0.515907597541809037622329014994 0.2791559994220733642578125 +0.12614040076732635498046875 0.515907597541809037622329014994 0.2791559994220733642578125 +0.126148748397827137335269753748 -0.1613073050975799560546875 0.283842298388481129034488503748 +0.126148748397827137335269753748 0.1613073050975799560546875 0.283842298388481129034488503748 +0.1261529959738254547119140625 -0.030480748973786830902099609375 -0.73868550360202789306640625 +0.1261529959738254547119140625 0.030480748973786830902099609375 -0.73868550360202789306640625 +0.126168702542781813180639005623 -0.388314503431320179327457253748 0.568588280677795321338408029987 +0.126168702542781813180639005623 0.388314503431320179327457253748 0.568588280677795321338408029987 +0.126377248764038080386384876874 -0.0206925004720687859272043596093 -0.0781063467264175442794638115629 +0.126377248764038080386384876874 0.0206925004720687859272043596093 -0.0781063467264175442794638115629 +0.12642799317836761474609375 -0.0299382507801055908203125 -0.2135874927043914794921875 +0.12642799317836761474609375 0.0299382507801055908203125 -0.2135874927043914794921875 +0.126443446427583677804662443123 -0.83202336728572845458984375 -0.119367200136184695158370061563 +0.126443446427583677804662443123 0.83202336728572845458984375 -0.119367200136184695158370061563 +0.126491594314575211965845369377 -0.282840394973754905016960492503 -0.25298440456390380859375 +0.126491594314575211965845369377 0.282840394973754905016960492503 -0.25298440456390380859375 +0.126594151556491840704410378748 -0.186589500308036781994758257497 0.9228527843952178955078125 +0.126594151556491840704410378748 0.186589500308036781994758257497 0.9228527843952178955078125 +0.126622605323791520559595369377 -0.139407002925872797183259876874 0.0673229992389678955078125 +0.126622605323791520559595369377 0.139407002925872797183259876874 0.0673229992389678955078125 +0.126629994809627527407869251874 -0.0920020535588264437576455634371 0.313050159811973538470653011245 +0.126629994809627527407869251874 0.0920020535588264437576455634371 0.313050159811973538470653011245 +0.126631402969360346011384876874 -0.20572264492511749267578125 -0.25326420366764068603515625 +0.126631402969360346011384876874 0.20572264492511749267578125 -0.25326420366764068603515625 +0.12667000293731689453125 -0.6057360172271728515625 0.785517990589141845703125 +0.12667000293731689453125 0.6057360172271728515625 0.785517990589141845703125 +0.1266822516918182373046875 -0.066600501537322998046875 0.20497800409793853759765625 +0.1266822516918182373046875 0.066600501537322998046875 0.20497800409793853759765625 +0.1266829967498779296875 -0.2566845118999481201171875 -0.409956514835357666015625 +0.1266829967498779296875 0.2566845118999481201171875 -0.409956514835357666015625 +0.126686699688434600830078125 -0.0183042006567120559001882185157 -0.431410950422286998406917746252 +0.126686699688434600830078125 0.0183042006567120559001882185157 -0.431410950422286998406917746252 +0.126687204837799077816740123126 -0.102240395545959483758480246252 0.1161777973175048828125 +0.126687204837799077816740123126 0.102240395545959483758480246252 0.1161777973175048828125 +0.126700198650360112972990123126 -0.0920520007610321072677450615629 -0.124392402172088634149105246252 +0.126700198650360112972990123126 0.0920520007610321072677450615629 -0.124392402172088634149105246252 +0.126779496669769287109375 -0.2822540104389190673828125 0.3927589952945709228515625 +0.126779496669769287109375 0.2822540104389190673828125 0.3927589952945709228515625 +0.126844900846481312139957253748 -0.09215779602527618408203125 0.682215088605880648486845529987 +0.126844900846481312139957253748 0.09215779602527618408203125 0.682215088605880648486845529987 +0.126972001791000349557592130623 -0.243649792671203596627904630623 -0.12046949565410614013671875 +0.126972001791000349557592130623 0.243649792671203596627904630623 -0.12046949565410614013671875 +0.126991999149322520867855246252 -0.563182401657104536596420985006 0.553804016113281227795539507497 +0.126991999149322520867855246252 0.563182401657104536596420985006 0.553804016113281227795539507497 +0.126993155479431157894865123126 -0.390838944911956809313835492503 -0.183351154625415818655298494377 +0.126993155479431157894865123126 0.390838944911956809313835492503 -0.183351154625415818655298494377 +0.126998850703239435366853626874 -0.0770059525966644287109375 0.02100884914398193359375 +0.126998850703239435366853626874 0.0770059525966644287109375 0.02100884914398193359375 +0.127011001110076904296875 -0.0294021002948284121414346259371 0.074187152087688446044921875 +0.127011001110076904296875 0.0294021002948284121414346259371 0.074187152087688446044921875 +0.127046497166156763247713001874 -0.207200002670288069284154630623 -0.6564508974552154541015625 +0.127046497166156763247713001874 0.207200002670288069284154630623 -0.6564508974552154541015625 +0.1270925514400005340576171875 -0.250836291909217856677116742503 0.586027643084526039807258257497 +0.1270925514400005340576171875 0.250836291909217856677116742503 0.586027643084526039807258257497 +0.127127346396446211373998380623 -0.0233114011585712418983540317186 0.325261658430099465100227007497 +0.127127346396446211373998380623 0.0233114011585712418983540317186 0.325261658430099465100227007497 +0.1271417438983917236328125 -0.010324499569833278656005859375 -0.21500800549983978271484375 +0.1271417438983917236328125 0.010324499569833278656005859375 -0.21500800549983978271484375 +0.127191603183746337890625 -0.471535813808441117700454014994 -0.348533999919891368524105246252 +0.127191603183746337890625 0.471535813808441117700454014994 -0.348533999919891368524105246252 +0.127198755741119384765625 -0.20629374682903289794921875 0.0613467507064342498779296875 +0.127198755741119384765625 0.20629374682903289794921875 0.0613467507064342498779296875 +0.127231201529502874203458873126 -0.549025797843933127673210492503 0.205870807170867919921875 +0.127231201529502874203458873126 0.549025797843933127673210492503 0.205870807170867919921875 +0.127243199944496149234041126874 -0.00987254977226257289524280480464 0.0788143515586852971832598768742 +0.127243199944496149234041126874 0.00987254977226257289524280480464 0.0788143515586852971832598768742 +0.127264353632926929815738503748 -0.0774176985025405856033486884371 -0.0176146499812602982948384067186 +0.127264353632926929815738503748 0.0774176985025405856033486884371 -0.0176146499812602982948384067186 +0.127265703678131086862279630623 -0.166009801626205433233707253748 -0.215044802427291875668302623126 +0.127265703678131086862279630623 0.166009801626205433233707253748 -0.215044802427291875668302623126 +0.127291801571845997198551003748 -0.0103710003197193135343612269139 -0.0786717027425765935699786268742 +0.127291801571845997198551003748 0.0103710003197193135343612269139 -0.0786717027425765935699786268742 +0.127340495586395263671875 -0.3919200003147125244140625 0.2831664979457855224609375 +0.127340495586395263671875 0.3919200003147125244140625 0.2831664979457855224609375 +0.1273514926433563232421875 -0.13368849456310272216796875 -0.464659988880157470703125 +0.1273514926433563232421875 0.13368849456310272216796875 -0.464659988880157470703125 +0.127429401874542241879240123126 -0.151586997509002702200220369377 0.0279841989278793341899831403907 +0.127429401874542241879240123126 0.151586997509002702200220369377 0.0279841989278793341899831403907 +0.12743340432643890380859375 -0.23985779285430908203125 -0.535003817081451393811164507497 +0.12743340432643890380859375 0.23985779285430908203125 -0.535003817081451393811164507497 +0.127483499050140364206029630623 -0.249243307113647449835269753748 0.107822397351264948062166126874 +0.127483499050140364206029630623 0.249243307113647449835269753748 0.107822397351264948062166126874 +0.1275122463703155517578125 -0.2043802440166473388671875 -0.066853247582912445068359375 +0.1275122463703155517578125 0.2043802440166473388671875 -0.066853247582912445068359375 +0.127596902847290027960269753748 -0.0927033036947250282944210653113 -0.255196201801300037725894753748 +0.127596902847290027960269753748 0.0927033036947250282944210653113 -0.255196201801300037725894753748 +0.12759719789028167724609375 0 -0.0788603961467742864410723768742 +0.127610397338867198602230246252 0 0.153998601436615006887720369377 +0.127638602256774896792634876874 -0.0519226491451263427734375 0.0592658981680870000641192518742 +0.127638602256774896792634876874 0.0519226491451263427734375 0.0592658981680870000641192518742 +0.127638995647430419921875 -0.0525727987289428752570863423443 0.144721794128417985403345369377 +0.127638995647430419921875 0.0525727987289428752570863423443 0.144721794128417985403345369377 +0.127643403410911543405248380623 -0.2002497017383575439453125 0.183322799205780012643529630623 +0.127643403410911543405248380623 0.2002497017383575439453125 0.183322799205780012643529630623 +0.127682752907276153564453125 -0.306092147529125224725277121252 -0.559021434187889076916633257497 +0.127682752907276153564453125 0.306092147529125224725277121252 -0.559021434187889076916633257497 +0.127713950723409658261076060626 -0.5384872853755950927734375 -0.340911990404129061627003238755 +0.127713950723409658261076060626 0.5384872853755950927734375 -0.340911990404129061627003238755 +0.127837598323822021484375 -0.6063439846038818359375 -0.5059688091278076171875 +0.127837598323822021484375 0.6063439846038818359375 -0.5059688091278076171875 +0.1278838030993938446044921875 -0.320070308446884166375667746252 -0.428603446483612093853565738755 +0.1278838030993938446044921875 0.320070308446884166375667746252 -0.428603446483612093853565738755 +0.127886402606964100225894753748 -0.39360058307647705078125 0.434423410892486538958934261245 +0.127886402606964100225894753748 0.39360058307647705078125 0.434423410892486538958934261245 +0.127896299958229070492521373126 -0.0783743977546691866775674384371 0 +0.127896299958229070492521373126 0.0783743977546691866775674384371 0 +0.127975201606750493832365123126 -0.0527903974056243910362162807814 0.7879312038421630859375 +0.127975201606750493832365123126 0.0527903974056243910362162807814 0.7879312038421630859375 +0.128111900389194482974275501874 -0.67245781421661376953125 -0.146246097981929779052734375 +0.128111900389194482974275501874 0.67245781421661376953125 -0.146246097981929779052734375 +0.128112804889678966180355246252 -0.0602508008480072063117738423443 -0.141269004344940191097990123126 +0.128112804889678966180355246252 0.0602508008480072063117738423443 -0.141269004344940191097990123126 +0.12814350426197052001953125 -0.131026744842529296875 0.1700332462787628173828125 +0.12814350426197052001953125 0.131026744842529296875 0.1700332462787628173828125 +0.128157248347997659854158314374 -0.394433650374412525518863503748 0.500498050451278708727897992503 +0.128157248347997659854158314374 0.394433650374412525518863503748 0.500498050451278708727897992503 +0.128168201446533208676115123126 -0.151730203628540061266960492503 -0.02346999943256378173828125 +0.128168201446533208676115123126 0.151730203628540061266960492503 -0.02346999943256378173828125 +0.12818825244903564453125 -0.17344374954700469970703125 -0.12643174827098846435546875 +0.12818825244903564453125 0.17344374954700469970703125 -0.12643174827098846435546875 +0.128201146423816664254857755623 -0.302725157141685463635383257497 0.120091304183006272743305942186 +0.128201146423816664254857755623 0.302725157141685463635383257497 0.120091304183006272743305942186 +0.128205597400665283203125 -0.289269590377807639391960492503 -0.7347695827484130859375 +0.128205597400665283203125 0.289269590377807639391960492503 -0.7347695827484130859375 +0.12822909653186798095703125 -0.860537561774253778601462272491 -0.381487698853015866351512386245 +0.12822909653186798095703125 0.860537561774253778601462272491 -0.381487698853015866351512386245 +0.128231701254844648873998380623 -0.020012699067592620849609375 0.270473706722259510382144753748 +0.128231701254844648873998380623 0.020012699067592620849609375 0.270473706722259510382144753748 +0.128321403264999384097322376874 -0.0537336006760597215126118442186 -0.0560920491814613300651792826557 +0.128321403264999384097322376874 0.0537336006760597215126118442186 -0.0560920491814613300651792826557 +0.128326201438903803042634876874 -0.130699002742767328433259876874 0.0803129971027374267578125 +0.128326201438903803042634876874 0.130699002742767328433259876874 0.0803129971027374267578125 +0.128327202796936046258480246252 -0.0531163990497589139083700615629 0.375114393234252940789730246252 +0.128327202796936046258480246252 0.0531163990497589139083700615629 0.375114393234252940789730246252 +0.1283579953014850616455078125 -0.692907750606536865234375 -0.25671525299549102783203125 +0.1283579953014850616455078125 0.692907750606536865234375 -0.25671525299549102783203125 +0.1283724009990692138671875 -0.167283904552459727899105246252 -0.39753811061382293701171875 +0.1283724009990692138671875 0.167283904552459727899105246252 -0.39753811061382293701171875 +0.128395301103591930047542746252 -0.534803515672683804638154470013 0 +0.128395301103591930047542746252 0.534803515672683804638154470013 0 +0.12840600311756134033203125 -0.460959494113922119140625 0.14501149952411651611328125 +0.12840600311756134033203125 0.460959494113922119140625 0.14501149952411651611328125 +0.128411105275154119320646373126 -0.298277091979980479852230246252 0.311514759063720725329460492503 +0.128411105275154119320646373126 0.298277091979980479852230246252 0.311514759063720725329460492503 +0.128413754701614368780582253748 -0.834260535240173295434829014994 0.100094298645853993501297907187 +0.128413754701614368780582253748 0.834260535240173295434829014994 0.100094298645853993501297907187 +0.128519596159458182604851117503 -0.468949788808822654040397992503 -0.257038651406765017437550113755 +0.128519596159458182604851117503 0.468949788808822654040397992503 -0.257038651406765017437550113755 +0.128562453389167774542301003748 -0.0706371009349822942535723768742 0.0313384495675563812255859375 +0.128562453389167774542301003748 0.0706371009349822942535723768742 0.0313384495675563812255859375 +0.128590652346611017398103626874 -0.0370982989668846088737730326557 -0.0677360996603965787032919365629 +0.128590652346611017398103626874 0.0370982989668846088737730326557 -0.0677360996603965787032919365629 +0.12867414951324462890625 -0.184077306091785436459318248126 -0.502054300904274053429787727509 +0.12867414951324462890625 0.184077306091785436459318248126 -0.502054300904274053429787727509 +0.1287522017955780029296875 -0.266676002740859952044871761245 0.52183020114898681640625 +0.1287522017955780029296875 0.266676002740859952044871761245 0.52183020114898681640625 +0.128765594959259044305355246252 -0.0266510009765625020816681711722 0.150695395469665538445980246252 +0.128765594959259044305355246252 0.0266510009765625020816681711722 0.150695395469665538445980246252 +0.128766605257987970523103626874 -0.778434294462204023901108485006 0.43296660482883453369140625 +0.128766605257987970523103626874 0.778434294462204023901108485006 0.43296660482883453369140625 +0.128784602880477910824552623126 -0.058009050786495208740234375 0.0504921019077301039268412807814 +0.128784602880477910824552623126 0.058009050786495208740234375 0.0504921019077301039268412807814 +0.128843998908996587582365123126 -0.343938803672790560650440738755 0.158446800708770763055355246252 +0.128843998908996587582365123126 0.343938803672790560650440738755 0.158446800708770763055355246252 +0.128980806469917302914396373126 -0.590953516960144087377670985006 0.666436511278152510229233485006 +0.128980806469917302914396373126 0.590953516960144087377670985006 0.666436511278152510229233485006 +0.129003596305847151315404630623 -0.139263001084327681100560880623 0.232301402091979969366519753748 +0.129003596305847151315404630623 0.139263001084327681100560880623 0.232301402091979969366519753748 +0.1290484964847564697265625 -0.09375800192356109619140625 -0.19249899685382843017578125 +0.1290484964847564697265625 0.09375800192356109619140625 -0.19249899685382843017578125 +0.129089200496673578433259876874 -0.140123796463012706414730246252 -0.0608381986618042047698651231258 +0.129089200496673578433259876874 0.140123796463012706414730246252 -0.0608381986618042047698651231258 +0.129105006158351909295589621252 -0.278655740618705738409488503748 -0.328911298513412497790397992503 +0.129105006158351909295589621252 0.278655740618705738409488503748 -0.328911298513412497790397992503 +0.129157006740570068359375 -0.84390699863433837890625 -0.520711004734039306640625 +0.129157006740570068359375 0.84390699863433837890625 -0.520711004734039306640625 +0.129180395603179926089509876874 -0.110947394371032723170422684689 0.104895603656768809930355246252 +0.129180395603179926089509876874 0.110947394371032723170422684689 0.104895603656768809930355246252 +0.129186403751373302117855246252 -0.121147799491882326994307561563 0.0929198026657104547698651231258 +0.129186403751373302117855246252 0.121147799491882326994307561563 0.0929198026657104547698651231258 +0.1292046010494232177734375 0 0.0761980533599853487869424384371 +0.129248401522636419125333873126 -0.071433149278163909912109375 -0.0263089500367641448974609375 +0.129248401522636419125333873126 0.071433149278163909912109375 -0.0263089500367641448974609375 +0.129270601272582996710269753748 -0.0637982994318008339584835653113 0.0414594009518623324295205634371 +0.129270601272582996710269753748 0.0637982994318008339584835653113 0.0414594009518623324295205634371 +0.129294906556606303826839621252 -0.865744221210479780737045985006 0.209210398793220536672876619377 +0.129294906556606303826839621252 0.865744221210479780737045985006 0.209210398793220536672876619377 +0.129337604343891132696597878748 -0.248947307467460604568643134371 0.20927725732326507568359375 +0.129337604343891132696597878748 0.248947307467460604568643134371 0.20927725732326507568359375 +0.129502804577350610903963001874 -0.398575803637504610943409488755 0.796471184492111183850227007497 +0.129502804577350610903963001874 0.398575803637504610943409488755 0.796471184492111183850227007497 +0.129518795013427751028345369377 -0.110370600223541268092297684689 -0.105086600780487066097990123126 +0.129518795013427751028345369377 0.110370600223541268092297684689 -0.105086600780487066097990123126 +0.129595501720905309506193248126 -0.204416097700595850161775501874 0.379366654157638538702457253748 +0.129595501720905309506193248126 0.204416097700595850161775501874 0.379366654157638538702457253748 +0.12969709932804107666015625 -0.537619557976722783898537727509 0.341531452536582957879573996252 +0.12969709932804107666015625 0.537619557976722783898537727509 0.341531452536582957879573996252 +0.129817503690719593389957253748 -0.0355840489268302931358256557814 0.0661904990673065213302450615629 +0.129817503690719593389957253748 0.0355840489268302931358256557814 0.0661904990673065213302450615629 +0.129867902398109441586271373126 -0.0596017509698867770095986884371 -0.0456286489963531466385049384371 +0.129867902398109441586271373126 0.0596017509698867770095986884371 -0.0456286489963531466385049384371 +0.129868198931217176950170255623 -0.493125480413436845239516514994 -0.479542684555053666528579014994 +0.129868198931217176950170255623 0.493125480413436845239516514994 -0.479542684555053666528579014994 +0.129889798164367686883480246252 -0.152081000804901139700220369377 0 +0.129889798164367686883480246252 0.152081000804901139700220369377 0 +0.12989079952239990234375 -0.314572000503540061266960492503 0.210173201560974132195980246252 +0.12989079952239990234375 0.314572000503540061266960492503 0.210173201560974132195980246252 +0.129950153082609182186857310626 -0.2811605632305145263671875 0.454490846395492587017628238755 +0.129950153082609182186857310626 0.2811605632305145263671875 0.454490846395492587017628238755 +0.129964804649353032894865123126 -0.399995994567871104852230246252 0.680523204803466841283920985006 +0.129964804649353032894865123126 0.399995994567871104852230246252 0.680523204803466841283920985006 +0.130021351575851429327457253748 -0.0196800000965595238422434221093 0.0721605017781257601638955634371 +0.130021351575851429327457253748 0.0196800000965595238422434221093 0.0721605017781257601638955634371 +0.130090503394603734799161998126 -0.829726177453994795385483485006 0.323467192053794871942073996252 +0.130090503394603734799161998126 0.829726177453994795385483485006 0.323467192053794871942073996252 +0.1302552521228790283203125 -0.033380500972270965576171875 0.210758745670318603515625 +0.1302552521228790283203125 0.033380500972270965576171875 0.210758745670318603515625 +0.130273997783660888671875 -0.228454399108886735403345369377 0.301392388343811046258480246252 +0.130273997783660888671875 0.228454399108886735403345369377 0.301392388343811046258480246252 +0.130368594825267802850277121252 -0.722709900140762306897102007497 -0.520283693075180075915397992503 +0.130368594825267802850277121252 0.722709900140762306897102007497 -0.520283693075180075915397992503 +0.130456200242042547055021373126 -0.070032298564910888671875 -0.260915100574493408203125 +0.130456200242042547055021373126 0.070032298564910888671875 -0.260915100574493408203125 +0.13048709928989410400390625 -0.0269389495253562934184987653907 -0.0689015999436378423492755018742 +0.13048709928989410400390625 0.0269389495253562934184987653907 -0.0689015999436378423492755018742 +0.130527603626251237356470369377 -0.0948328018188476645766726846887 -0.366018009185791026727230246252 +0.130527603626251237356470369377 0.0948328018188476645766726846887 -0.366018009185791026727230246252 +0.130556698143482224905298494377 -0.401816689968109153063835492503 0.1549133956432342529296875 +0.130556698143482224905298494377 0.401816689968109153063835492503 0.1549133956432342529296875 +0.130569747090339666195646373126 -0.0650824517011642372787960653113 -0.0348683997988700825065855326557 +0.130569747090339666195646373126 0.0650824517011642372787960653113 -0.0348683997988700825065855326557 +0.130610549449920648745759876874 -0.309665298461914040295539507497 -0.0977151036262512151520098768742 +0.130610549449920648745759876874 0.309665298461914040295539507497 -0.0977151036262512151520098768742 +0.13062475621700286865234375 -0.21315999329090118408203125 0 +0.13062475621700286865234375 0.21315999329090118408203125 0 +0.1306304968893527984619140625 -0.5623357594013214111328125 0.47876326739788055419921875 +0.1306304968893527984619140625 0.5623357594013214111328125 0.47876326739788055419921875 +0.130654296278953557797208873126 -0.676650083065032936779914507497 0.122775100171565995643696567186 +0.130654296278953557797208873126 0.676650083065032936779914507497 0.122775100171565995643696567186 +0.130699793994426743948267244377 -0.34217999875545501708984375 -0.261400499939918540270866742503 +0.130699793994426743948267244377 0.34217999875545501708984375 -0.261400499939918540270866742503 +0.130714201927185053042634876874 -0.0796548038721084511459835653113 0.258009606599807705951121761245 +0.130714201927185053042634876874 0.0796548038721084511459835653113 0.258009606599807705951121761245 +0.13073609769344329833984375 -0.0727807492017745888412960653113 0.01053749956190586090087890625 +0.13073609769344329833984375 0.0727807492017745888412960653113 0.01053749956190586090087890625 +0.130776304006576526983707253748 -0.0729355484247207613845986884371 -0.00882885027676820650921474253892 +0.130776304006576526983707253748 0.0729355484247207613845986884371 -0.00882885027676820650921474253892 +0.130778002738952653372095369377 -0.194080805778503423519865123126 -0.324391198158264171258480246252 +0.130778002738952653372095369377 0.194080805778503423519865123126 -0.324391198158264171258480246252 +0.130862596631050098761051003748 -0.516351202130317710192741742503 -0.662387144565582230981704014994 +0.130862596631050098761051003748 0.516351202130317710192741742503 -0.662387144565582230981704014994 +0.13087250292301177978515625 -0.21097774803638458251953125 0.0293374992907047271728515625 +0.13087250292301177978515625 0.21097774803638458251953125 0.0293374992907047271728515625 +0.130889403820037830694644753748 -0.561077392101287819592414507497 -0.167511606216430658511384876874 +0.130889403820037830694644753748 0.561077392101287819592414507497 -0.167511606216430658511384876874 +0.13098774850368499755859375 -0.21004424989223480224609375 -0.0349802486598491668701171875 +0.13098774850368499755859375 0.21004424989223480224609375 -0.0349802486598491668701171875 +0.131054399907588964291349498126 0 0.940917047858238153601462272491 +0.131057104468345647640958873126 -0.168686096370220195428402121252 -0.874281585216522216796875 +0.131057104468345647640958873126 0.168686096370220195428402121252 -0.874281585216522216796875 +0.131062495708465565069644753748 -0.212689805030822742804019753748 0.166089302301406865902677623126 +0.131062495708465565069644753748 0.212689805030822742804019753748 0.166089302301406865902677623126 +0.1311464011669158935546875 -0.553116214275360063012954014994 0.408488488197326637951789507497 +0.1311464011669158935546875 0.553116214275360063012954014994 0.408488488197326637951789507497 +0.131171300262212769949243806877 -0.148782404512166982479826060626 -0.6189976036548614501953125 +0.131171300262212769949243806877 0.148782404512166982479826060626 -0.6189976036548614501953125 +0.13118399679660797119140625 -0.13627575337886810302734375 -0.163461506366729736328125 +0.13118399679660797119140625 0.13627575337886810302734375 -0.163461506366729736328125 +0.131198799610137945004240123126 -0.314283990859985373766960492503 -0.209791994094848638363615123126 +0.131198799610137945004240123126 0.314283990859985373766960492503 -0.209791994094848638363615123126 +0.131201195716857926809595369377 -0.145059597492218028680355246252 0.04176039993762969970703125 +0.131201195716857926809595369377 0.145059597492218028680355246252 0.04176039993762969970703125 +0.13125850260257720947265625 -0.19752775132656097412109375 0.07908199727535247802734375 +0.13125850260257720947265625 0.19752775132656097412109375 0.07908199727535247802734375 +0.131262004375457763671875 -0.470808506011962890625 -0.105402000248432159423828125 +0.131262004375457763671875 0.470808506011962890625 -0.105402000248432159423828125 +0.131287154555320723092748380623 -0.404053999483585335461555132497 -0.84970848262310028076171875 +0.131287154555320723092748380623 0.404053999483585335461555132497 -0.84970848262310028076171875 +0.131289051473140711001619251874 -0.90350224077701568603515625 -0.262577140331268277240184261245 +0.131289051473140711001619251874 0.90350224077701568603515625 -0.262577140331268277240184261245 +0.131352099031209951229826060626 -0.404252761602401755602897992503 -0.349036055803298994604233485006 +0.131352099031209951229826060626 0.404252761602401755602897992503 -0.349036055803298994604233485006 +0.131370198726654063836605246252 -0.0651055991649627657791299384371 0.136026203632354736328125 +0.131370198726654063836605246252 0.0651055991649627657791299384371 0.136026203632354736328125 +0.131394150853157032354801003748 -0.0434887513518333393425230326557 -0.0578299507498741122146768134371 +0.131394150853157032354801003748 0.0434887513518333393425230326557 -0.0578299507498741122146768134371 +0.1314119994640350341796875 -0.83080899715423583984375 0.540821015834808349609375 +0.1314119994640350341796875 0.83080899715423583984375 0.540821015834808349609375 +0.1314325034618377685546875 0 0.212662994861602783203125 +0.131434500217437744140625 -0.4045059978961944580078125 -0.26286900043487548828125 +0.131434500217437744140625 0.4045059978961944580078125 -0.26286900043487548828125 +0.131444996595382695980802623126 -0.237050396203994734323217130623 0.128566199541091913394197376874 +0.131444996595382695980802623126 0.237050396203994734323217130623 0.128566199541091913394197376874 +0.131475198268890397512720369377 -0.0464902013540267958213725307814 -0.14336299896240234375 +0.131475198268890397512720369377 0.0464902013540267958213725307814 -0.14336299896240234375 +0.131591598689556110723941628748 -0.313740345835685718878238503748 0.0821621514856815254868038778113 +0.131591598689556110723941628748 0.313740345835685718878238503748 0.0821621514856815254868038778113 +0.131637203693389909231470369377 -0.351736807823181174548210492503 -0.137669599056243902035490123126 +0.131637203693389909231470369377 0.351736807823181174548210492503 -0.137669599056243902035490123126 +0.1316872537136077880859375 -0.243645004928112030029296875 0.6969899833202362060546875 +0.1316872537136077880859375 0.243645004928112030029296875 0.6969899833202362060546875 +0.1317517496645450592041015625 -0.40548299252986907958984375 -0.617029488086700439453125 +0.1317517496645450592041015625 0.40548299252986907958984375 -0.617029488086700439453125 +0.131766796112060546875 -0.132176196575164800472990123126 -0.0718815982341766412933026231258 +0.131766796112060546875 0.132176196575164800472990123126 -0.0718815982341766412933026231258 +0.131772197782993316650390625 -0.280524653196334794458266514994 -0.162609998881816847360326505623 +0.131772197782993316650390625 0.280524653196334794458266514994 -0.162609998881816847360326505623 +0.131792253255844121762052623126 -0.01655744947493076324462890625 -0.0696897000074386541168536268742 +0.131792253255844121762052623126 0.01655744947493076324462890625 -0.0696897000074386541168536268742 +0.131852400302886973992855246252 -0.0794687986373901478209802462516 -0.127670001983642589227230246252 +0.131852400302886973992855246252 0.0794687986373901478209802462516 -0.127670001983642589227230246252 +0.131852702796459192446931751874 -0.095795698463916778564453125 -0.309738793969154324603465511245 +0.131852702796459192446931751874 0.095795698463916778564453125 -0.309738793969154324603465511245 +0.13186244666576385498046875 -0.0420475512742996201942524692186 0.0578297987580299321930255018742 +0.13186244666576385498046875 0.0420475512742996201942524692186 0.0578297987580299321930255018742 +0.13187800347805023193359375 -0.6696059703826904296875 -0.73091399669647216796875 +0.13187800347805023193359375 0.6696059703826904296875 -0.73091399669647216796875 +0.131887802481651300601228626874 -0.231550794839858992135717130623 -0.137803503870964044741853626874 +0.131887802481651300601228626874 0.231550794839858992135717130623 -0.137803503870964044741853626874 +0.131971450150012964419588001874 -0.5791519582271575927734375 -0.263943558931350741314503238755 +0.131971450150012964419588001874 0.5791519582271575927734375 -0.263943558931350741314503238755 +0.13199450075626373291015625 -0.3394854962825775146484375 -0.3425304889678955078125 +0.13199450075626373291015625 0.3394854962825775146484375 -0.3425304889678955078125 +0.132033896446228010690404630623 -0.2232592999935150146484375 0.8094584047794342041015625 +0.132033896446228010690404630623 0.2232592999935150146484375 0.8094584047794342041015625 +0.13206849992275238037109375 -0.14278425276279449462890625 0.15706874430179595947265625 +0.13206849992275238037109375 0.14278425276279449462890625 0.15706874430179595947265625 +0.1323384940624237060546875 -0.19569574296474456787109375 -0.081790499389171600341796875 +0.1323384940624237060546875 0.19569574296474456787109375 -0.081790499389171600341796875 +0.132409501075744617804019753748 -0.00986354984343051910400390625 0.0697884008288383456131143134371 +0.132409501075744617804019753748 0.00986354984343051910400390625 0.0697884008288383456131143134371 +0.132466055452823638916015625 -0.11886705458164215087890625 0.41330789029598236083984375 +0.132466055452823638916015625 0.11886705458164215087890625 0.41330789029598236083984375 +0.132467097043991094418302623126 -0.00618720017373561824436389855464 -0.0701011508703231756012286268742 +0.132467097043991094418302623126 0.00618720017373561824436389855464 -0.0701011508703231756012286268742 +0.132502500712871562615902121252 -0.128950250148773204461605246252 0.623149150609970114977897992503 +0.132502500712871562615902121252 0.128950250148773204461605246252 0.623149150609970114977897992503 +0.132511201500892628057926003748 -0.0469296008348464924186949076557 -0.2650254070758819580078125 +0.132511201500892628057926003748 0.0469296008348464924186949076557 -0.2650254070758819580078125 +0.13254059851169586181640625 -0.194221794605255126953125 -0.186308401823043812139957253748 +0.13254059851169586181640625 0.194221794605255126953125 -0.186308401823043812139957253748 +0.13254225254058837890625 -0.083534248173236846923828125 0.19481925666332244873046875 +0.13254225254058837890625 0.083534248173236846923828125 0.19481925666332244873046875 +0.132565402984619135073884876874 -0.145591402053833002261384876874 -0.0350645989179611192176899692186 +0.132565402984619135073884876874 0.145591402053833002261384876874 -0.0350645989179611192176899692186 +0.1325969994068145751953125 -0.473910987377166748046875 0.08846700191497802734375 +0.1325969994068145751953125 0.473910987377166748046875 0.08846700191497802734375 +0.132645598053932195492521373126 -0.0963714033365249550522335653113 -0.577163386344909601355368522491 +0.132645598053932195492521373126 0.0963714033365249550522335653113 -0.577163386344909601355368522491 +0.13268150389194488525390625 -0.1834371089935302734375 0.266920140385627724377570757497 +0.13268150389194488525390625 0.1834371089935302734375 0.266920140385627724377570757497 +0.1326974928379058837890625 -0.19309200346469879150390625 0.4417090117931365966796875 +0.1326974928379058837890625 0.19309200346469879150390625 0.4417090117931365966796875 +0.1327465474605560302734375 -0.0665930986404418973068075615629 0.0210646502673625946044921875 +0.1327465474605560302734375 0.0665930986404418973068075615629 0.0210646502673625946044921875 +0.13276259601116180419921875 -0.145870202779769891909822376874 -0.226044005155563332287727007497 +0.13276259601116180419921875 0.145870202779769891909822376874 -0.226044005155563332287727007497 +0.1329697482287883758544921875 -0.83953480422496795654296875 0 +0.1329697482287883758544921875 0.83953480422496795654296875 0 +0.132979345321655256784154630623 -0.237617442011833185366853626874 -0.219896242022514315506143134371 +0.132979345321655256784154630623 0.237617442011833185366853626874 -0.219896242022514315506143134371 +0.133014446496963506527677623126 -0.067045949399471282958984375 -0.0176636997610330574726145158593 +0.133014446496963506527677623126 0.067045949399471282958984375 -0.0176636997610330574726145158593 +0.133033803105354314633146373126 -0.0258794993162155158306081403907 0.064282648265361785888671875 +0.133033803105354314633146373126 0.0258794993162155158306081403907 0.064282648265361785888671875 +0.133084050565958039724634431877 -0.409597662091255199090511496252 0.342079105973243757787827235006 +0.133084050565958039724634431877 0.409597662091255199090511496252 0.342079105973243757787827235006 +0.13308550417423248291015625 -0.4096024930477142333984375 0.25399601459503173828125 +0.13308550417423248291015625 0.4096024930477142333984375 0.25399601459503173828125 +0.133200001716613780633480246252 -0.0638440012931823785979901231258 -0.371727991104126020971420985006 +0.133200001716613780633480246252 0.0638440012931823785979901231258 -0.371727991104126020971420985006 +0.133223199844360346011384876874 -0.695776796340942471630341970013 -0.371679997444152865337940738755 +0.133223199844360346011384876874 0.695776796340942471630341970013 -0.371679997444152865337940738755 +0.133250598609447462594701505623 -0.2894878089427947998046875 0.144709952175617218017578125 +0.133250598609447462594701505623 0.2894878089427947998046875 0.144709952175617218017578125 +0.133254745602607721499666126874 -0.0483207017183303819130024692186 0.0490741521120071425010600307814 +0.133254745602607721499666126874 0.0483207017183303819130024692186 0.0490741521120071425010600307814 +0.1332570016384124755859375 -0.196410000324249267578125 0.97142398357391357421875 +0.1332570016384124755859375 0.196410000324249267578125 0.97142398357391357421875 +0.133355200290679931640625 -0.0968869984149932916839276231258 -0.113266599178314220086605246252 +0.133355200290679931640625 0.0968869984149932916839276231258 -0.113266599178314220086605246252 +0.133376848697662336862279630623 -0.0495902985334396376182475307814 -0.0474491983652114840408486884371 +0.133376848697662336862279630623 0.0495902985334396376182475307814 -0.0474491983652114840408486884371 +0.133391201496124267578125 -0.0969135999679565512954226846887 -0.782824802398681685033920985006 +0.133391201496124267578125 0.0969135999679565512954226846887 -0.782824802398681685033920985006 +0.133459204435348505191072376874 -0.182872197031974770276008257497 -0.266920140385627724377570757497 +0.133459204435348505191072376874 0.182872197031974770276008257497 -0.266920140385627724377570757497 +0.133491598069667816162109375 -0.410841438174247730596988503748 -0.1260530948638916015625 +0.133491598069667816162109375 0.410841438174247730596988503748 -0.1260530948638916015625 +0.13361249864101409912109375 -0.669693768024444580078125 0.310092754662036895751953125 +0.13361249864101409912109375 0.669693768024444580078125 0.310092754662036895751953125 +0.133629602193832380807592130623 -0.567718791961669855261618522491 0.140849402546882634945646373126 +0.133629602193832380807592130623 0.567718791961669855261618522491 0.140849402546882634945646373126 +0.133647596836090093441740123126 -0.358719992637634321752670985006 0.116009199619293221217297684689 +0.133647596836090093441740123126 0.358719992637634321752670985006 0.116009199619293221217297684689 +0.133651202917099004574552623126 -0.0680980503559112521072549384371 0 +0.133651202917099004574552623126 0.0680980503559112521072549384371 0 +0.133692395687103282586605246252 -0.0396672010421752971320863423443 0.143362605571746820620759876874 +0.133692395687103282586605246252 0.0396672010421752971320863423443 0.143362605571746820620759876874 +0.13370560109615325927734375 -0.262284395098686229363948996252 0.189287355542182900158820757497 +0.13370560109615325927734375 0.262284395098686229363948996252 0.189287355542182900158820757497 +0.133712254464626312255859375 -0.70555651187896728515625 0.216358490288257598876953125 +0.133712254464626312255859375 0.70555651187896728515625 0.216358490288257598876953125 +0.133749300241470331362947376874 -0.0235374011099338531494140625 -0.267501604557037364617855246252 +0.133749300241470331362947376874 0.0235374011099338531494140625 -0.267501604557037364617855246252 +0.133753597736358642578125 -0.0133208006620407111431081403907 0.148096394538879405633480246252 +0.133753597736358642578125 0.0133208006620407111431081403907 0.148096394538879405633480246252 +0.133781254291534423828125 -0.033017098903656005859375 -0.0592660501599311800857705634371 +0.133781254291534423828125 0.033017098903656005859375 -0.0592660501599311800857705634371 +0.133796000480651849917634876874 -0.123534405231475838404797684689 -0.0826914012432098388671875 +0.133796000480651849917634876874 0.123534405231475838404797684689 -0.0826914012432098388671875 +0.133877697587013233526676003748 -0.0599647521972656236122212192186 0.0313202999532222747802734375 +0.133877697587013233526676003748 0.0599647521972656236122212192186 0.0313202999532222747802734375 +0.133881296217441575491235994377 -0.8809659183025360107421875 -0.126388800144195567742855246252 +0.133881296217441575491235994377 0.8809659183025360107421875 -0.126388800144195567742855246252 +0.133939397335052473581029630623 -0.323357659578323353155582253748 0 +0.133939397335052473581029630623 0.323357659578323353155582253748 0 +0.133953604102134693487613503748 -0.0483426019549369825889506557814 -0.58285439014434814453125 +0.133953604102134693487613503748 0.0483426019549369825889506557814 -0.58285439014434814453125 +0.133966299146413808651701060626 0 0.636045151948928855212272992503 +0.133974748849868763311832253748 -0.0542383521795272785515074076557 0.0401118010282516465614399692186 +0.133974748849868763311832253748 0.0542383521795272785515074076557 0.0401118010282516465614399692186 +0.134012255072593705618189119377 -0.0299546990543603890155832658593 0.428536346554756197857471988755 +0.134012255072593705618189119377 0.0299546990543603890155832658593 0.428536346554756197857471988755 +0.134058047831058485543920255623 -0.320685389637947071417301003748 0.0411008499562740270416583143742 +0.134058047831058485543920255623 0.320685389637947071417301003748 0.0411008499562740270416583143742 +0.134122447669506067446931751874 -0.319543695449829079358039507497 -0.04902064800262451171875 +0.134122447669506067446931751874 0.319543695449829079358039507497 -0.04902064800262451171875 +0.134125602245330821649105246252 -0.327681994438171420025440738755 0.186103999614715576171875 +0.134125602245330821649105246252 0.327681994438171420025440738755 0.186103999614715576171875 +0.134163004159927351510717130623 0 -0.268328708410263072625667746252 +0.134163299202919000796541126874 -0.1577180922031402587890625 0.2170836031436920166015625 +0.134163299202919000796541126874 0.1577180922031402587890625 0.2170836031436920166015625 +0.134163403511047357730134876874 -0.03249140083789825439453125 -0.144722199440002446957365123126 +0.134163403511047357730134876874 0.03249140083789825439453125 -0.144722199440002446957365123126 +0.134163746237754816226228626874 0 0.067082248628139495849609375 +0.134163999557495111636384876874 -0.137637996673583978823884876874 0.0552792012691497858245526231258 +0.134163999557495111636384876874 0.137637996673583978823884876874 0.0552792012691497858245526231258 +0.134164801239967351742521373126 -0.2551943957805633544921875 -0.0829190969467163002670773153113 +0.134164801239967351742521373126 0.2551943957805633544921875 -0.0829190969467163002670773153113 +0.134236752986907958984375 -0.076913498342037200927734375 -0.196379244327545166015625 +0.134236752986907958984375 0.076913498342037200927734375 -0.196379244327545166015625 +0.134291803836822515316740123126 -0.0772369980812072781661825615629 0.126491796970367442742855246252 +0.134291803836822515316740123126 0.0772369980812072781661825615629 0.126491796970367442742855246252 +0.13435600697994232177734375 -0.48032701015472412109375 -0.03513149917125701904296875 +0.13435600697994232177734375 0.48032701015472412109375 -0.03513149917125701904296875 +0.134390401840209949835269753748 0 -0.584755790233612016137954014994 +0.134423097968101507015958873126 -0.2234171926975250244140625 0.14837519824504852294921875 +0.134423097968101507015958873126 0.2234171926975250244140625 0.14837519824504852294921875 +0.134491698443889612368806751874 -0.685196381807327226098891514994 -0.0491749979555606842041015625 +0.134491698443889612368806751874 0.685196381807327226098891514994 -0.0491749979555606842041015625 +0.134497654438018782174779630623 -0.0552769482135772663444761576557 -0.0368079006671905503700337192186 +0.134497654438018782174779630623 0.0552769482135772663444761576557 -0.0368079006671905503700337192186 +0.13456250727176666259765625 -0.18735849857330322265625 0.096383251249790191650390625 +0.13456250727176666259765625 0.18735849857330322265625 0.096383251249790191650390625 +0.134563195705413835012720369377 -0.03251279890537261962890625 -0.7879312038421630859375 +0.134563195705413835012720369377 0.03251279890537261962890625 -0.7879312038421630859375 +0.134573400020599365234375 -0.0608143508434295654296875 -0.0262984491884708411479909528907 +0.134573400020599365234375 0.0608143508434295654296875 -0.0262984491884708411479909528907 +0.134643303602933889218107310626 -0.486730194091796908306690738755 0.217864350974559806140007367503 +0.134643303602933889218107310626 0.486730194091796908306690738755 0.217864350974559806140007367503 +0.13475525379180908203125 -0.0690448515117168398758096259371 -0.315553346276283230853465511245 +0.13475525379180908203125 0.0690448515117168398758096259371 -0.315553346276283230853465511245 +0.134755504131317122018529630623 -0.258800393342971779553352007497 0.069737099111080169677734375 +0.134755504131317122018529630623 0.258800393342971779553352007497 0.069737099111080169677734375 +0.1347700059413909912109375 -0.4805940091609954833984375 0.0294330008327960968017578125 +0.1347700059413909912109375 0.4805940091609954833984375 0.0294330008327960968017578125 +0.134789103269577020816072376874 -0.0399210020899772657920756557814 0.265025103092193570208934261245 +0.134789103269577020816072376874 0.0399210020899772657920756557814 0.265025103092193570208934261245 +0.13481675088405609130859375 -0.15864349901676177978515625 -0.13840775191783905029296875 +0.13481675088405609130859375 0.15864349901676177978515625 -0.13840775191783905029296875 +0.134882402420043956414730246252 -0.147002005577087396792634876874 0.0140395998954772963096537807814 +0.134882402420043956414730246252 0.147002005577087396792634876874 0.0140395998954772963096537807814 +0.134907750785350805111661998126 -0.319034251570701588018863503748 0.287257960438728365826221988755 +0.134907750785350805111661998126 0.319034251570701588018863503748 0.287257960438728365826221988755 +0.134928999096155161074861439374 -0.598381301760673500744758257497 0.588416767120361283716079014994 +0.134928999096155161074861439374 0.598381301760673500744758257497 0.588416767120361283716079014994 +0.134977996349334716796875 -0.905829012393951416015625 -0.4015659987926483154296875 +0.134977996349334716796875 0.905829012393951416015625 -0.4015659987926483154296875 +0.1350004971027374267578125 -0.3077259957790374755859375 0.370243012905120849609375 +0.1350004971027374267578125 0.3077259957790374755859375 0.370243012905120849609375 +0.135039603710174566097990123126 -0.0324559986591339139083700615629 -0.375114393234252940789730246252 +0.135039603710174566097990123126 0.0324559986591339139083700615629 -0.375114393234252940789730246252 +0.1350840032100677490234375 -0.221975505352020263671875 -0.4271754920482635498046875 +0.1350840032100677490234375 0.221975505352020263671875 -0.4271754920482635498046875 +0.135098803043365495168970369377 -0.114409995079040538445980246252 -0.0930519998073577880859375 +0.135098803043365495168970369377 0.114409995079040538445980246252 -0.0930519998073577880859375 +0.13509894907474517822265625 -0.0466392517089843708366636576557 0.319488745927810624536391514994 +0.13509894907474517822265625 0.0466392517089843708366636576557 0.319488745927810624536391514994 +0.13511960208415985107421875 -0.685598218441009432666533029987 0.0412013012915849671791157504686 +0.13511960208415985107421875 0.685598218441009432666533029987 0.0412013012915849671791157504686 +0.135145354270935075247095369377 -0.41593725979328155517578125 0.105981749296188351716629938437 +0.135145354270935075247095369377 0.41593725979328155517578125 0.105981749296188351716629938437 +0.135146999359130853823884876874 -0.146958601474761973992855246252 -0.0117655999958515174175222028907 +0.135146999359130853823884876874 0.146958601474761973992855246252 -0.0117655999958515174175222028907 +0.1351807527244091033935546875 -0.41605125367641448974609375 0.609201729297637939453125 +0.1351807527244091033935546875 0.41605125367641448974609375 0.609201729297637939453125 +0.135257399082183843441740123126 -0.158447992801666243112279630623 0.562671589851379327917868522491 +0.135257399082183843441740123126 0.158447992801666243112279630623 0.562671589851379327917868522491 +0.135306601226329814569027121252 -0.179259303212165849172876619377 0.502054300904274053429787727509 +0.135306601226329814569027121252 0.179259303212165849172876619377 0.502054300904274053429787727509 +0.13538825511932373046875 -0.15386299788951873779296875 0.14316475391387939453125 +0.13538825511932373046875 0.15386299788951873779296875 0.14316475391387939453125 +0.135398250818252546823217130623 -0.0319531492888927431961221259371 0.0560917496681213392784037807814 +0.135398250818252546823217130623 0.0319531492888927431961221259371 0.0560917496681213392784037807814 +0.13548074662685394287109375 -0.0227320499718189246440847028907 -0.0602346003055572454254473768742 +0.13548074662685394287109375 0.0227320499718189246440847028907 -0.0602346003055572454254473768742 +0.135486400127410894222990123126 0 -0.376355600357055675164730246252 +0.135495197772979747430355246252 -0.157653200626373307668970369377 0.341740393638610862048210492503 +0.135495197772979747430355246252 0.157653200626373307668970369377 0.341740393638610862048210492503 +0.135507398843765253237947376874 -0.116318646073341358526676003748 0.301011207699775684698551003748 +0.135507398843765253237947376874 0.116318646073341358526676003748 0.301011207699775684698551003748 +0.135517394542694097347990123126 -0.016300000250339508056640625 -0.146182596683502197265625 +0.135517394542694097347990123126 0.016300000250339508056640625 -0.146182596683502197265625 +0.135554254055023193359375 -0.11905474960803985595703125 -0.173063755035400390625 +0.135554254055023193359375 0.11905474960803985595703125 -0.173063755035400390625 +0.135641402006149297543302623126 -0.0159739505499601371074636091407 0.0620180994272232014030699076557 +0.135641402006149297543302623126 0.0159739505499601371074636091407 0.0620180994272232014030699076557 +0.135648798942565929070980246252 0 0.376297211647033724712940738755 +0.1358274482190608978271484375 -0.64424048364162445068359375 -0.53759185969829559326171875 +0.1358274482190608978271484375 0.64424048364162445068359375 -0.53759185969829559326171875 +0.13590525090694427490234375 -0.098740495741367340087890625 0.73094473779201507568359375 +0.13590525090694427490234375 0.098740495741367340087890625 0.73094473779201507568359375 +0.135920305550098402536107755623 -0.821680644154548556201689279987 0.457020305097103118896484375 +0.135920305550098402536107755623 0.821680644154548556201689279987 0.457020305097103118896484375 +0.135967504978179942742855246252 -0.883334684371948286596420985006 0.105982198566198351774580999063 +0.135967504978179942742855246252 0.883334684371948286596420985006 0.105982198566198351774580999063 +0.135969603061676019839509876874 0 -0.146670603752136224917634876874 +0.135971403121948247738615123126 -0.578316593170166037829460492503 -0.084035396575927734375 +0.135971403121948247738615123126 -0.2183859050273895263671875 -0.154335004091262800729467130623 +0.135971403121948247738615123126 0.2183859050273895263671875 -0.154335004091262800729467130623 +0.135971403121948247738615123126 0.578316593170166037829460492503 -0.084035396575927734375 +0.135973651707172377145482755623 -0.0560897972434759098381285014057 0.83717690408229827880859375 +0.135973651707172377145482755623 0.0560897972434759098381285014057 0.83717690408229827880859375 +0.136026000976562505551115123126 -0.259776806831359896587940738755 -0.272053194046020518914730246252 +0.136026000976562505551115123126 0.259776806831359896587940738755 -0.272053194046020518914730246252 +0.136116003990173345394865123126 -0.0661202013492584311782351846887 -0.130769205093383800164730246252 +0.136116003990173345394865123126 0.0661202013492584311782351846887 -0.130769205093383800164730246252 +0.136116448044776905401676003748 -0.0621403500437736483474893134371 0.0105296999216079704975168596093 +0.136116448044776905401676003748 0.0621403500437736483474893134371 0.0105296999216079704975168596093 +0.1361212469637393951416015625 -0.22200000286102294921875 -0.70334024727344512939453125 +0.1361212469637393951416015625 0.22200000286102294921875 -0.70334024727344512939453125 +0.136146406829357136114566628748 -0.623784267902374289782585492503 0.703460761904716513903679242503 +0.136146406829357136114566628748 0.623784267902374289782585492503 0.703460761904716513903679242503 +0.136146900057792646920873380623 -0.0623389497399330083649005018742 -0.00882419999688863719577991417964 +0.136146900057792646920873380623 0.0623389497399330083649005018742 -0.00882419999688863719577991417964 +0.1361972987651824951171875 -0.2673017978668212890625 0 +0.1361972987651824951171875 0.2673017978668212890625 0 +0.13620780408382415771484375 -0.0392320498824119540115518134371 -0.0490741521120071425010600307814 +0.13620780408382415771484375 0.0392320498824119540115518134371 -0.0490741521120071425010600307814 +0.1362184472382068634033203125 -0.307348939776420582159488503748 -0.78069268167018890380859375 +0.1362184472382068634033203125 0.307348939776420582159488503748 -0.78069268167018890380859375 +0.136299800872802745477230246252 -0.129367601871490489617855246252 0.0684571981430053683181924384371 +0.136299800872802745477230246252 0.129367601871490489617855246252 0.0684571981430053683181924384371 +0.136328196525573736019865123126 -0.13875579833984375 -0.04649139940738677978515625 +0.136328196525573736019865123126 0.13875579833984375 -0.04649139940738677978515625 +0.1363852024078369140625 -0.0888921976089477594573651231258 0.116177594661712652035490123126 +0.1363852024078369140625 0.0888921976089477594573651231258 0.116177594661712652035490123126 +0.136403399705886829718082253748 -0.264851099252700783459602007497 0.0353276990354061126708984375 +0.136403399705886829718082253748 0.264851099252700783459602007497 0.0353276990354061126708984375 +0.136434400081634515933259876874 -0.366436409950256392065170985006 -0.0843216001987457386412927462516 +0.136434400081634515933259876874 0.366436409950256392065170985006 -0.0843216001987457386412927462516 +0.136459994316101090872095369377 -0.248094010353088395559595369377 0.282538390159606966900440738755 +0.136459994316101090872095369377 0.248094010353088395559595369377 0.282538390159606966900440738755 +0.136477956920862203427091685626 -0.913841122388839632861845529987 0.220833198726177210025056751874 +0.136477956920862203427091685626 0.913841122388839632861845529987 0.220833198726177210025056751874 +0.136502999067306507452457253748 -0.263802891969680763928352007497 -0.0421296000480651869346537807814 +0.136502999067306507452457253748 0.263802891969680763928352007497 -0.0421296000480651869346537807814 +0.136520397663116438424779630623 -0.01233614981174468994140625 -0.060909748077392578125 +0.136520397663116438424779630623 0.01233614981174468994140625 -0.060909748077392578125 +0.136557199805974971429378683752 -0.420271795988082896844417746252 -0.476680082082748424188167746252 +0.136557199805974971429378683752 0.420271795988082896844417746252 -0.476680082082748424188167746252 +0.13658775389194488525390625 -0.20405800640583038330078125 0.0469477511942386627197265625 +0.13658775389194488525390625 0.20405800640583038330078125 0.0469477511942386627197265625 +0.13660700619220733642578125 -0.1858730018138885498046875 -0.09638349711894989013671875 +0.13660700619220733642578125 0.1858730018138885498046875 -0.09638349711894989013671875 +0.13663299381732940673828125 0 0.480969488620758056640625 +0.1366521008312702178955078125 -0.558899897336959883276108485006 0.302418999373912811279296875 +0.1366521008312702178955078125 0.558899897336959883276108485006 0.302418999373912811279296875 +0.136697404831647856271459318123 -0.420718903839588154180972878748 0.840719583630561761999899772491 +0.136697404831647856271459318123 0.420718903839588154180972878748 0.840719583630561761999899772491 +0.136711052060127236096320757497 -0.0416765995323657989501953125 -0.319488745927810624536391514994 +0.136711052060127236096320757497 0.0416765995323657989501953125 -0.319488745927810624536391514994 +0.136786195635795582159488503748 -0.0396251991391181959678569057814 0.58285439014434814453125 +0.136786195635795582159488503748 0.0396251991391181959678569057814 0.58285439014434814453125 +0.136861798167228682077123380623 -0.42122519016265869140625 0.404769015312194835320980246252 +0.136861798167228682077123380623 0.42122519016265869140625 0.404769015312194835320980246252 +0.136868901550769805908203125 -0.270131391286849931177016514994 0.631106692552566461706931022491 +0.136868901550769805908203125 0.270131391286849931177016514994 0.631106692552566461706931022491 +0.136874401569366449527009876874 -0.0793340027332306019225427462516 0.36738479137420654296875 +0.136874401569366449527009876874 0.0793340027332306019225427462516 0.36738479137420654296875 +0.136915194988250749075220369377 -0.739101600646972722863381477509 -0.273829603195190451891960492503 +0.136915194988250749075220369377 0.739101600646972722863381477509 -0.273829603195190451891960492503 +0.136984500288963306768863503748 0 -0.0611168995499610859245542826557 +0.137013494968414306640625 -0.09954600036144256591796875 0.470444500446319580078125 +0.137013494968414306640625 0.09954600036144256591796875 0.470444500446319580078125 +0.137026798725128184930355246252 -0.36907279491424560546875 0.070773601531982421875 +0.137026798725128184930355246252 0.36907279491424560546875 0.070773601531982421875 +0.137042999267578125 -0.17599500715732574462890625 0.112893752753734588623046875 +0.137042999267578125 0.17599500715732574462890625 0.112893752753734588623046875 +0.137044253945350635870426003748 -0.26552645862102508544921875 -0.182248851656913735119758257497 +0.137044253945350635870426003748 0.26552645862102508544921875 -0.182248851656913735119758257497 +0.137052896618843067511051003748 -0.0382765486836433369011167826557 0.0474490508437156663368305942186 +0.137052896618843067511051003748 0.0382765486836433369011167826557 0.0474490508437156663368305942186 +0.137111246585845947265625 -0.2030420005321502685546875 -0.049743749201297760009765625 +0.137111246585845947265625 0.2030420005321502685546875 -0.049743749201297760009765625 +0.13717700541019439697265625 -0.099663503468036651611328125 -0.4703719913959503173828125 +0.13717700541019439697265625 0.099663503468036651611328125 -0.4703719913959503173828125 +0.137208598852157581671207253748 -0.579835796356201194079460492503 0.0704585999250411931793536268742 +0.137208598852157581671207253748 0.579835796356201194079460492503 0.0704585999250411931793536268742 +0.137213194370269769839509876874 -0.165706801414489762747095369377 -0.337214803695678744244190738755 +0.137213194370269769839509876874 0.165706801414489762747095369377 -0.337214803695678744244190738755 +0.1372627504169940948486328125 -0.720490515232086181640625 -0.1566922478377819061279296875 +0.1372627504169940948486328125 0.720490515232086181640625 -0.1566922478377819061279296875 +0.137317753583192814215152566248 -0.875822076201438814990751779987 0.341437591612338997570930132497 +0.137317753583192814215152566248 0.875822076201438814990751779987 0.341437591612338997570930132497 +0.137422245740890486276342130623 -0.274344000220298755987613503748 0.168375547230243671759097878748 +0.137422245740890486276342130623 0.274344000220298755987613503748 0.168375547230243671759097878748 +0.137425243854522705078125 -0.0500915013253688812255859375 0.202744007110595703125 +0.137425243854522705078125 0.0500915013253688812255859375 0.202744007110595703125 +0.137502253055572509765625 -0.099900998175144195556640625 0.1833382546901702880859375 +0.137502253055572509765625 0.099900998175144195556640625 0.1833382546901702880859375 +0.13750450313091278076171875 -0.329637697339057900158820757497 -0.602023082971572809363181022491 +0.13750450313091278076171875 0.329637697339057900158820757497 -0.602023082971572809363181022491 +0.137538100779056537970035378748 -0.579909384250640869140625 -0.367135989665985096319644753748 +0.137538100779056537970035378748 0.579909384250640869140625 -0.367135989665985096319644753748 +0.137557795643806463070646373126 -0.12467730045318603515625 -0.235655093193054193667634876874 +0.137557795643806463070646373126 0.12467730045318603515625 -0.235655093193054193667634876874 +0.137594997882843017578125 -0.120299804210662844572432561563 0.0812132000923156821547976846887 +0.137594997882843017578125 0.120299804210662844572432561563 0.0812132000923156821547976846887 +0.137595301866531377621427623126 -0.00609600003808736818494695697268 0.0594170987606048583984375 +0.137595301866531377621427623126 0.00609600003808736818494695697268 0.0594170987606048583984375 +0.137611294537782674618497935626 -0.762860450148582391882712272491 -0.549188342690467790063735264994 +0.137611294537782674618497935626 0.762860450148582391882712272491 -0.549188342690467790063735264994 +0.137637805938720714227230246252 -0.0999993979930877685546875 0.105147194862365733758480246252 +0.137637805938720714227230246252 0.0999993979930877685546875 0.105147194862365733758480246252 +0.137659496068954473324552623126 -0.0557616010308265644401792826557 0.0209881491959094980404021413278 +0.137659496068954473324552623126 0.0557616010308265644401792826557 0.0209881491959094980404021413278 +0.137678405642509466000333873126 -0.423727655410766623766960492503 -0.0632411979138851193527059990629 +0.137678405642509466000333873126 0.423727655410766623766960492503 -0.0632411979138851193527059990629 +0.13769455254077911376953125 -0.0142359003424644466745396798046 -0.32146169245243072509765625 +0.13769455254077911376953125 0.0142359003424644466745396798046 -0.32146169245243072509765625 +0.137736153602600081002904630623 -0.045188248157501220703125 -0.038558699190616607666015625 +0.137736153602600081002904630623 0.045188248157501220703125 -0.038558699190616607666015625 +0.13779090344905853271484375 -0.510830464959144636694077235006 -0.377578499913215626104801003748 +0.13779090344905853271484375 0.510830464959144636694077235006 -0.377578499913215626104801003748 +0.137833801656961435488923939374 -0.594777947664260842053352007497 0.22302670776844024658203125 +0.137833801656961435488923939374 0.594777947664260842053352007497 0.22302670776844024658203125 +0.137845954298973089047208873126 -0.497660356760025068822983485006 -0.189296256005764024221704744377 +0.137845954298973089047208873126 0.497660356760025068822983485006 -0.189296256005764024221704744377 +0.137933099269866937808259876874 -0.0562551006674766526649555942186 -0.0176024995744228363037109375 +0.137933099269866937808259876874 0.0562551006674766526649555942186 -0.0176024995744228363037109375 +0.1379519999027252197265625 0 0.990438997745513916015625 +0.1379528045654296875 0 0.144806802272796630859375 +0.137967306375503556692407869377 -0.137343156337738053762720369377 -0.405711445212364185675113503748 +0.137967306375503556692407869377 0.137343156337738053762720369377 -0.405711445212364185675113503748 +0.137969398498535150698884876874 -0.052829802036285400390625 0.134809005260467545950220369377 +0.137969398498535150698884876874 0.052829802036285400390625 0.134809005260467545950220369377 +0.137970301508903492315738503748 -0.100241097807884219084151311563 0.246811491250991804635717130623 +0.137970301508903492315738503748 0.100241097807884219084151311563 0.246811491250991804635717130623 +0.137992197275161737612947376874 -0.0444003000855445820183042826557 0.038558699190616607666015625 +0.137992197275161737612947376874 0.0444003000855445820183042826557 0.038558699190616607666015625 +0.138015498220920546090795255623 -0.424774700403213467669871761245 0.538997900485992387231704014994 +0.138015498220920546090795255623 0.424774700403213467669871761245 0.538997900485992387231704014994 +0.138041996955871576480134876874 -0.11049020290374755859375 0.0934683978557586669921875 +0.138041996955871576480134876874 0.11049020290374755859375 0.0934683978557586669921875 +0.1380528546869754791259765625 -0.2598459422588348388671875 -0.579587468504905722888054242503 +0.1380528546869754791259765625 0.2598459422588348388671875 -0.579587468504905722888054242503 +0.13806749880313873291015625 -0.1640007495880126953125 0.12861250340938568115234375 +0.13806749880313873291015625 0.1640007495880126953125 0.12861250340938568115234375 +0.138087604939937574899389005623 -0.424995744228363003802684261245 0.723055905103683449475227007497 +0.138087604939937574899389005623 0.424995744228363003802684261245 0.723055905103683449475227007497 +0.138088797032833110467464621252 -0.424994838237762462274105246252 0.0530185483396053355842347798443 +0.138088797032833110467464621252 0.424994838237762462274105246252 0.0530185483396053355842347798443 +0.138162446022033674752904630623 -0.0502032011747360201736611884371 0.0298460997641086557552458913278 +0.138162446022033674752904630623 0.0502032011747360201736611884371 0.0298460997641086557552458913278 +0.1381925046443939208984375 -0.4253199994564056396484375 0.22360749542713165283203125 +0.1381925046443939208984375 0.4253199994564056396484375 0.22360749542713165283203125 +0.138197004795074462890625 -0.4253199994564056396484375 -0.894429981708526611328125 +0.138197004795074462890625 0.4253199994564056396484375 -0.894429981708526611328125 +0.1381990015506744384765625 -0.951054990291595458984375 -0.2763969898223876953125 +0.1381990015506744384765625 0.951054990291595458984375 -0.2763969898223876953125 +0.138219746947288502081363503748 -0.0221118003129959113384206403907 0.0539108991622924763054136576557 +0.138219746947288502081363503748 0.0221118003129959113384206403907 0.0539108991622924763054136576557 +0.138266703486442571469083873126 -0.0508806020021438584755024692186 -0.0281686507165431962440571567186 +0.138266703486442571469083873126 0.0508806020021438584755024692186 -0.0281686507165431962440571567186 +0.138286051154136641061498380623 -0.0287665508687496157547158759371 -0.0504921019077301039268412807814 +0.138286051154136641061498380623 0.0287665508687496157547158759371 -0.0504921019077301039268412807814 +0.138317553699016548840461382497 -0.201058903336524957827791126874 0.250885602831840526238948996252 +0.138317553699016548840461382497 0.201058903336524957827791126874 0.250885602831840526238948996252 +0.138338054716587055548160378748 -0.178057546168565755673185435626 -0.9228527843952178955078125 +0.138338054716587055548160378748 0.178057546168565755673185435626 -0.9228527843952178955078125 +0.13841794431209564208984375 -0.0729124009609222467620526231258 0.527280050516128584447983485006 +0.13841794431209564208984375 0.0729124009609222467620526231258 0.527280050516128584447983485006 +0.138543602824211131707698996252 -0.4264006316661834716796875 0.470625361800193819927784488755 +0.138543602824211131707698996252 0.4264006316661834716796875 0.470625361800193819927784488755 +0.138560396432876598016292746252 -0.546724802255630470959602007497 -0.701351094245910688940170985006 +0.138560396432876598016292746252 0.546724802255630470959602007497 -0.701351094245910688940170985006 +0.138582149147987360171541126874 -0.05740199983119964599609375 0 +0.138582149147987360171541126874 0.05740199983119964599609375 0 +0.138719594478607183285490123126 -0.0844716012477874783614950615629 -0.116710805892944344264172684689 +0.138719594478607183285490123126 0.0844716012477874783614950615629 -0.116710805892944344264172684689 +0.13872550427913665771484375 -0.059668250381946563720703125 -0.1992360055446624755859375 +0.13872550427913665771484375 0.059668250381946563720703125 -0.1992360055446624755859375 +0.138763594627380387747095369377 -0.374419999122619640008480246252 0.0235464006662368802169638115629 +0.138763594627380387747095369377 0.374419999122619640008480246252 0.0235464006662368802169638115629 +0.1388753950595855712890625 -0.24858538806438446044921875 -0.348452103137969981805355246252 +0.1388753950595855712890625 0.24858538806438446044921875 -0.348452103137969981805355246252 +0.138884849846363067626953125 -0.233664312958717340640291126874 0.358625239133834872173878238755 +0.138884849846363067626953125 0.233664312958717340640291126874 0.358625239133834872173878238755 +0.1389071941375732421875 -0.374052000045776378289730246252 -0.028105199337005615234375 +0.1389071941375732421875 0.374052000045776378289730246252 -0.028105199337005615234375 +0.13905765116214752197265625 -0.427975201606750510485710492503 0 +0.13905765116214752197265625 0.427975201606750510485710492503 0 +0.139060795307159423828125 -0.026558399200439453125 0.141268396377563471011384876874 +0.139060795307159423828125 0.026558399200439453125 0.141268396377563471011384876874 +0.139140403270721441097990123126 -0.140893995761871337890625 0.02808620035648345947265625 +0.139140403270721441097990123126 0.140893995761871337890625 0.02808620035648345947265625 +0.1391444988548755645751953125 -0.52834872901439666748046875 -0.51379573345184326171875 +0.1391444988548755645751953125 0.52834872901439666748046875 -0.51379573345184326171875 +0.13924275338649749755859375 -0.2071117460727691650390625 0.0147040002048015594482421875 +0.13924275338649749755859375 0.2071117460727691650390625 0.0147040002048015594482421875 +0.1393184959888458251953125 -0.172336202859878523385717130623 0.202214401960372908151342130623 +0.1393184959888458251953125 0.172336202859878523385717130623 0.202214401960372908151342130623 +0.139339196681976335012720369377 -0.599824810028076194079460492503 0.510680818557739280016960492503 +0.139339196681976335012720369377 0.599824810028076194079460492503 0.510680818557739280016960492503 +0.139351296424865739309595369377 -0.282352963089942954333366742503 -0.450952166318893454821647992503 +0.139351296424865739309595369377 0.282352963089942954333366742503 -0.450952166318893454821647992503 +0.139371800422668473684595369377 -0.10125839710235595703125 -0.101598405838012703639172684689 +0.139371800422668473684595369377 0.10125839710235595703125 -0.101598405838012703639172684689 +0.1393967568874359130859375 -0.20678675174713134765625 -0.01754424907267093658447265625 +0.1393967568874359130859375 0.20678675174713134765625 -0.01754424907267093658447265625 +0.139398899674415571725560880623 -0.175105494260787947213842130623 -0.199764901399612421206697376874 +0.139398899674415571725560880623 0.175105494260787947213842130623 -0.199764901399612421206697376874 +0.139438605308532720394865123126 -0.131255996227264415399105246252 -0.0576955974102020263671875 +0.139438605308532720394865123126 0.131255996227264415399105246252 -0.0576955974102020263671875 +0.139457446336746226922542746252 -0.310479411482810996325554242503 0.432034894824028070647869981258 +0.139457446336746226922542746252 0.310479411482810996325554242503 0.432034894824028070647869981258 +0.139464150369167316778629128748 -0.158894751965999586618139005623 -0.278930407762527421411391514994 +0.139464150369167316778629128748 0.158894751965999586618139005623 -0.278930407762527421411391514994 +0.139481551945209503173828125 -0.288899002969265017437550113755 0.5653160512447357177734375 +0.139481551945209503173828125 0.288899002969265017437550113755 0.5653160512447357177734375 +0.1395075023174285888671875 -0.10135699808597564697265625 -0.1810095012187957763671875 +0.1395075023174285888671875 0.10135699808597564697265625 -0.1810095012187957763671875 +0.13950960338115692138671875 -0.349167609214782681537059261245 -0.467567396163940385278579014994 +0.13950960338115692138671875 0.349167609214782681537059261245 -0.467567396163940385278579014994 +0.1396737992763519287109375 -0.578974908590316750256477007497 0.367803102731704689709602007497 +0.1396737992763519287109375 0.578974908590316750256477007497 0.367803102731704689709602007497 +0.139696803689002974069310880623 0 0.265489804744720447882144753748 +0.139731895923614485299779630623 -0.0184091996401548364803435475778 -0.0513428986072540297080912807814 +0.139731895923614485299779630623 0.0184091996401548364803435475778 -0.0513428986072540297080912807814 +0.139742004871368424856470369377 -0.0523091971874237102180238423443 -0.133176398277282725945980246252 +0.139742004871368424856470369377 0.0523091971874237102180238423443 -0.133176398277282725945980246252 +0.13979925215244293212890625 -0.01668524928390979766845703125 0.20658600330352783203125 +0.13979925215244293212890625 0.01668524928390979766845703125 0.20658600330352783203125 +0.139800596237182633840845369377 -0.236392199993133544921875 0.857073605060577392578125 +0.139800596237182633840845369377 0.236392199993133544921875 0.857073605060577392578125 +0.139825201034545903988615123126 -0.141047000885009765625 -0.023551799356937408447265625 +0.139825201034545903988615123126 0.141047000885009765625 -0.023551799356937408447265625 +0.139986746013164520263671875 -0.7249822318553924560546875 0.1315447501838207244873046875 +0.139986746013164520263671875 0.7249822318553924560546875 0.1315447501838207244873046875 +0.1400274932384490966796875 -0.060594998300075531005859375 -0.4761514961719512939453125 +0.1400274932384490966796875 0.060594998300075531005859375 -0.4761514961719512939453125 +0.140062800049781804867521373126 -0.249107408523559559210269753748 0.0912572979927062932770098768742 +0.140062800049781804867521373126 0.249107408523559559210269753748 0.0912572979927062932770098768742 +0.140067601203918451480134876874 -0.583422017097473100122329014994 0 +0.140067601203918451480134876874 0.583422017097473100122329014994 0 +0.140074545145034812243522992503 -0.431112000346183799059929242503 0.311483147740364119115952235006 +0.140074545145034812243522992503 0.431112000346183799059929242503 0.311483147740364119115952235006 +0.140086641907691961117521373126 -0.147057344019413005486995871252 -0.511125987768173306591279470013 +0.140086641907691961117521373126 0.147057344019413005486995871252 -0.511125987768173306591279470013 +0.140098652243614202328458873126 -0.0281144991517066934749724538278 0.0456283494830131489128355326557 +0.140098652243614202328458873126 0.0281144991517066934749724538278 0.0456283494830131489128355326557 +0.14018149673938751220703125 -0.17515425384044647216796875 -0.110317997634410858154296875 +0.14018149673938751220703125 0.17515425384044647216796875 -0.110317997634410858154296875 +0.140184304118156438656583873126 -0.245256006717681884765625 -0.10098449885845184326171875 +0.140184304118156438656583873126 0.245256006717681884765625 -0.10098449885845184326171875 +0.140203195810317982061832253748 -0.511581587791442804480368522491 -0.280405801534652721063167746252 +0.140203195810317982061832253748 0.511581587791442804480368522491 -0.280405801534652721063167746252 +0.140268597006797779425113503748 -0.034867800772190093994140625 -0.0401118010282516465614399692186 +0.140268597006797779425113503748 0.034867800772190093994140625 -0.0401118010282516465614399692186 +0.140368053317070001773103626874 -0.0121627494692802418790877894139 0.0514673978090286268760600307814 +0.140368053317070001773103626874 0.0121627494692802418790877894139 0.0514673978090286268760600307814 +0.140371799468994140625 -0.200811606645584089791967130623 -0.547695600986480735095085492503 +0.140371799468994140625 0.200811606645584089791967130623 -0.547695600986480735095085492503 +0.140458944439888017141626619377 -0.372214356064796469958366742503 -0.210304351150989526919588001874 +0.140458944439888017141626619377 0.372214356064796469958366742503 -0.210304351150989526919588001874 +0.140466403961181651727230246252 -0.259888005256652843133480246252 0.743455982208252041942841970013 +0.140466403961181651727230246252 0.259888005256652843133480246252 0.743455982208252041942841970013 +0.14051400125026702880859375 -0.5926245152950286865234375 0.437666237354278564453125 +0.14051400125026702880859375 0.5926245152950286865234375 0.437666237354278564453125 +0.140535199642181390933259876874 -0.432515192031860395971420985006 -0.658164787292480513158920985006 +0.140535199642181390933259876874 0.432515192031860395971420985006 -0.658164787292480513158920985006 +0.1405684947967529296875 -0.1428115069866180419921875 -0.14948375523090362548828125 +0.1405684947967529296875 0.1428115069866180419921875 -0.14948375523090362548828125 +0.140592446923255925961271373126 -0.0512146487832069383094868442186 0.0105265494436025622976282889454 +0.140592446923255925961271373126 0.0512146487832069383094868442186 0.0105265494436025622976282889454 +0.14062224328517913818359375 -0.0402507483959197998046875 -0.2027442455291748046875 +0.14062224328517913818359375 0.0402507483959197998046875 -0.2027442455291748046875 +0.140632349252700794561832253748 -0.0514266014099121065994424384371 -0.0088224001228809356689453125 +0.140632349252700794561832253748 0.0514266014099121065994424384371 -0.0088224001228809356689453125 +0.140700003504753118344083873126 -0.00618750024586915952501398052732 -0.05162595212459564208984375 +0.140700003504753118344083873126 0.00618750024586915952501398052732 -0.05162595212459564208984375 +0.14076299965381622314453125 -0.02033800072968006134033203125 -0.479345500469207763671875 +0.14076299965381622314453125 0.02033800072968006134033203125 -0.479345500469207763671875 +0.140791498124599456787109375 -0.8889192044734954833984375 0 +0.140791498124599456787109375 -0.337222793698310874255241742503 0.262599742412567171978565738755 +0.140791498124599456787109375 0.337222793698310874255241742503 0.262599742412567171978565738755 +0.140791498124599456787109375 0.8889192044734954833984375 0 +0.140831699967384343930021373126 0 0.051637351512908935546875 +0.1409922540187835693359375 -0.216713008284568769967748380623 -0.235916802287101740054353626874 +0.1409922540187835693359375 0.216713008284568769967748380623 -0.235916802287101740054353626874 +0.14104150235652923583984375 -0.1152195036411285400390625 0.17126500606536865234375 +0.14104150235652923583984375 0.1152195036411285400390625 0.17126500606536865234375 +0.1411035060882568359375 -0.43426549434661865234375 -0.20372350513935089111328125 +0.1411035060882568359375 0.43426549434661865234375 -0.20372350513935089111328125 +0.141173896193504316842748380623 0 0.320265403389930702893195757497 +0.141246603429317496569694867503 -0.507055443525314397668068977509 0.159512649476528184377954744377 +0.141246603429317496569694867503 0.507055443525314397668068977509 0.159512649476528184377954744377 +0.141261400282382959536775501874 -0.160227204859256733282535378748 -0.666612803936004638671875 +0.141261400282382959536775501874 0.160227204859256733282535378748 -0.666612803936004638671875 +0.141284698247909540347322376874 -0.0405934497714042635818643134371 -0.0298460997641086557552458913278 +0.141284698247909540347322376874 0.0405934497714042635818643134371 -0.0298460997641086557552458913278 +0.141286194324493408203125 -0.0651853978633880615234375 0.125654602050781244448884876874 +0.141286194324493408203125 0.0651853978633880615234375 0.125654602050781244448884876874 +0.141302248835563665219083873126 -0.0343345507979392963737730326557 0.0368077509105205549766459682814 +0.141302248835563665219083873126 0.0343345507979392963737730326557 0.0368077509105205549766459682814 +0.141319146007299417666658314374 -0.92990846931934356689453125 -0.133410400152206426449552623126 +0.141319146007299417666658314374 0.92990846931934356689453125 -0.133410400152206426449552623126 +0.141407552361488331182926003748 -0.0461482509970664936393980326557 -0.0193456493318080909038503278907 +0.141407552361488331182926003748 0.0461482509970664936393980326557 -0.0193456493318080909038503278907 +0.141421604156494157278345369377 -0.14142119884490966796875 0 +0.141421604156494157278345369377 0.14142119884490966796875 0 +0.1414490044116973876953125 -0.19586275517940521240234375 0.064264751970767974853515625 +0.1414490044116973876953125 0.19586275517940521240234375 0.064264751970767974853515625 +0.141526651382446272409154630623 -0.045781351625919342041015625 0.0193456493318080909038503278907 +0.141526651382446272409154630623 0.045781351625919342041015625 0.0193456493318080909038503278907 +0.141549649834632862432926003748 -0.739262846112251237329360264994 -0.394909997284412395135433371252 +0.141549649834632862432926003748 0.739262846112251237329360264994 -0.394909997284412395135433371252 +0.141555605828762059994474498126 -0.146487155556678766421541126874 0.401252406835556019171207253748 +0.141555605828762059994474498126 0.146487155556678766421541126874 0.401252406835556019171207253748 +0.141566401720047002621427623126 -0.102852603793144217747546065311 -0.243680691719055153576789507497 +0.141566401720047002621427623126 0.102852603793144217747546065311 -0.243680691719055153576789507497 +0.141606149077415449655248380623 -0.29680909216403961181640625 -0.119800451397895801886051003748 +0.141606149077415449655248380623 0.29680909216403961181640625 -0.119800451397895801886051003748 +0.141635000705718994140625 -0.0205805003643035888671875 -0.20497800409793853759765625 +0.141635000705718994140625 0.0205805003643035888671875 -0.20497800409793853759765625 +0.1417281515896320343017578125 -0.102970699965953829679854436563 -0.831751352548599220959602007497 +0.1417281515896320343017578125 0.102970699965953829679854436563 -0.831751352548599220959602007497 +0.141763803362846357858373380623 -0.30672061443328857421875 0.495808196067810014184829014994 +0.141763803362846357858373380623 0.30672061443328857421875 0.495808196067810014184829014994 +0.14176739752292633056640625 -0.0401067003607749952842631557814 0.0281686507165431962440571567186 +0.14176739752292633056640625 0.0401067003607749952842631557814 0.0281686507165431962440571567186 +0.141796854138374339715511496252 -0.607833841443061850817741742503 -0.181470906734466558285490123126 +0.141796854138374339715511496252 0.607833841443061850817741742503 -0.181470906734466558285490123126 +0.141881394386291520559595369377 -0.123127794265747075863615123126 -0.068623602390289306640625 +0.141881394386291520559595369377 0.123127794265747075863615123126 -0.068623602390289306640625 +0.141926801204681402035490123126 -0.293915605545043978619190738755 -0.231236791610717778988615123126 +0.141926801204681402035490123126 0.293915605545043978619190738755 -0.231236791610717778988615123126 +0.142081949114799488409488503748 -0.0243687003850936896587331403907 -0.0414594009518623324295205634371 +0.142081949114799488409488503748 0.0243687003850936896587331403907 -0.0414594009518623324295205634371 +0.14211724698543548583984375 0 -0.20567600429058074951171875 +0.142123100161552412545873380623 -0.623702108860015869140625 -0.284246909618377674444644753748 +0.142123100161552412545873380623 0.623702108860015869140625 -0.284246909618377674444644753748 +0.142303043603897089175447376874 -0.318195444345474254266292746252 -0.28460745513439178466796875 +0.142303043603897089175447376874 0.318195444345474254266292746252 -0.28460745513439178466796875 +0.14238069951534271240234375 -0.0695026494562625829498614393742 0.312085205316543545794871761245 +0.14238069951534271240234375 0.0695026494562625829498614393742 0.312085205316543545794871761245 +0.14245350658893585205078125 -0.16406925022602081298828125 -0.123645998537540435791015625 +0.14245350658893585205078125 0.16406925022602081298828125 -0.123645998537540435791015625 +0.142468947172164905889957253748 -0.0181712999939918525005300153907 0.0432713985443115220497212192186 +0.142468947172164905889957253748 0.0181712999939918525005300153907 0.0432713985443115220497212192186 +0.142509198188781743832365123126 -0.26699960231781005859375 0.261538791656494129522769753748 +0.142509198188781743832365123126 0.26699960231781005859375 0.261538791656494129522769753748 +0.142519998550415055715845369377 -0.714340019226074263158920985006 0.33076560497283935546875 +0.142519998550415055715845369377 0.714340019226074263158920985006 0.33076560497283935546875 +0.142544400691986095086605246252 -0.133922195434570318051115123126 0.0417843997478485121299662807814 +0.142544400691986095086605246252 0.133922195434570318051115123126 0.0417843997478485121299662807814 +0.142558395862579345703125 -0.136571598052978526727230246252 -0.3478868007659912109375 +0.142558395862579345703125 0.136571598052978526727230246252 -0.3478868007659912109375 +0.14256699383258819580078125 -0.19505049288272857666015625 -0.064264751970767974853515625 +0.14256699383258819580078125 0.19505049288272857666015625 -0.064264751970767974853515625 +0.14262640476226806640625 -0.752593612670898526317841970013 0.23078238964080810546875 +0.14262640476226806640625 0.752593612670898526317841970013 0.23078238964080810546875 +0.142636001110076904296875 -0.18587100505828857421875 -0.4417090117931365966796875 +0.142636001110076904296875 0.18587100505828857421875 -0.4417090117931365966796875 +0.14265869557857513427734375 -0.0463519513607025118728799384371 0 +0.14265869557857513427734375 0.0463519513607025118728799384371 0 +0.142672002315521240234375 -0.0383552014827728271484375 -0.134809398651123041323884876874 +0.142672002315521240234375 0.0383552014827728271484375 -0.134809398651123041323884876874 +0.1426790058612823486328125 -0.3314189910888671875 0.34612751007080078125 +0.1426790058612823486328125 0.3314189910888671875 0.34612751007080078125 +0.142695000767707802502570757497 -0.138869500160217262951789507497 0.671083700656890824731704014994 +0.142695000767707802502570757497 0.138869500160217262951789507497 0.671083700656890824731704014994 +0.142865999042987829037443248126 -0.633580201864242575915397992503 0.623029518127441450658920985006 +0.142865999042987829037443248126 0.633580201864242575915397992503 0.623029518127441450658920985006 +0.142973395437002187557951060626 -0.034544848836958408355712890625 -0.83717690408229827880859375 +0.142973395437002187557951060626 0.034544848836958408355712890625 -0.83717690408229827880859375 +0.143050253391265869140625 -0.30305485427379608154296875 0.100967295467853546142578125 +0.143050253391265869140625 0.30305485427379608154296875 0.100967295467853546142578125 +0.1430740058422088623046875 -0.864926993846893310546875 0.4810740053653717041015625 +0.1430740058422088623046875 0.864926993846893310546875 0.4810740053653717041015625 +0.143293198943138105905248380623 -0.441003012657165516241519753748 -0.380766606330871559826789507497 +0.143293198943138105905248380623 0.441003012657165516241519753748 -0.380766606330871559826789507497 +0.1433120071887969970703125 -0.6566150188446044921875 0.740485012531280517578125 +0.1433120071887969970703125 0.6566150188446044921875 0.740485012531280517578125 +0.143408596515655517578125 -0.0716445982456207358657351846887 -0.119586801528930669613615123126 +0.143408596515655517578125 0.0716445982456207358657351846887 -0.119586801528930669613615123126 +0.143423554301261885202123380623 -0.00609630011022090859823530095696 0.04350315034389495849609375 +0.143423554301261885202123380623 0.00609630011022090859823530095696 0.04350315034389495849609375 +0.14345000684261322021484375 -0.3096174895763397216796875 -0.365456998348236083984375 +0.14345000684261322021484375 0.3096174895763397216796875 -0.365456998348236083984375 +0.143482850492000574282869251874 -0.139861397445201873779296875 0.286969560384750355108707253748 +0.143482850492000574282869251874 0.139861397445201873779296875 0.286969560384750355108707253748 +0.143515804409980768374666126874 -0.01222500018775463104248046875 -0.0418777495622634846061949076557 +0.143515804409980768374666126874 0.01222500018775463104248046875 -0.0418777495622634846061949076557 +0.143521255254745488949552623126 -0.932408833503723055713408029987 0.111870098486542696170076283124 +0.143521255254745488949552623126 0.932408833503723055713408029987 0.111870098486542696170076283124 +0.1435512006282806396484375 -0.201694196462631231137052623126 -0.169447803497314447573884876874 +0.1435512006282806396484375 0.201694196462631231137052623126 -0.169447803497314447573884876874 +0.143556001782417286261051003748 -0.0301779001951217630550505788278 -0.0313202999532222747802734375 +0.143556001782417286261051003748 0.0301779001951217630550505788278 -0.0313202999532222747802734375 +0.143593251705169677734375 -0.066379003226757049560546875 0.19358424842357635498046875 +0.143593251705169677734375 0.066379003226757049560546875 0.19358424842357635498046875 +0.143645203113555913754240123126 -0.114410197734832769222990123126 -0.0792234003543853815276776231258 +0.143645203113555913754240123126 0.114410197734832769222990123126 -0.0792234003543853815276776231258 +0.14366100728511810302734375 -0.96193802356719970703125 0.2324559986591339111328125 +0.14366100728511810302734375 0.96193802356719970703125 0.2324559986591339111328125 +0.14369399845600128173828125 -0.12981374561786651611328125 0.15811525285243988037109375 +0.14369399845600128173828125 0.12981374561786651611328125 0.15811525285243988037109375 +0.143699397891759866885408314374 -0.104402353614568718653821122189 -0.625260335206985540246193977509 +0.143699397891759866885408314374 0.104402353614568718653821122189 -0.625260335206985540246193977509 +0.143716001510620111636384876874 -0.0133131995797157298005997105861 0.138450205326080322265625 +0.143716001510620111636384876874 0.0133131995797157298005997105861 0.138450205326080322265625 +0.143759402632713306768863503748 -0.186070793867111200503572376874 0.186308401823043812139957253748 +0.143759402632713306768863503748 0.186070793867111200503572376874 0.186308401823043812139957253748 +0.143787205219268798828125 -0.336069607734680197985710492503 -0.162426805496215825863615123126 +0.143787205219268798828125 0.336069607734680197985710492503 -0.162426805496215825863615123126 +0.143789994716644303762720369377 -0.077180802822113037109375 0.115618002414703380242855246252 +0.143789994716644303762720369377 0.077180802822113037109375 0.115618002414703380242855246252 +0.143800795078277587890625 -0.03981859982013702392578125 0.133176004886627202816740123126 +0.143800795078277587890625 0.03981859982013702392578125 0.133176004886627202816740123126 +0.143817298114299774169921875 -0.6821369826793670654296875 -0.5692149102687835693359375 +0.143817298114299774169921875 0.6821369826793670654296875 -0.5692149102687835693359375 +0.143836796283721923828125 -0.134463596343994157278345369377 -0.03507860004901885986328125 +0.143836796283721923828125 0.134463596343994157278345369377 -0.03507860004901885986328125 +0.1438453495502471923828125 -0.0412035003304481520225444057814 -0.0105265494436025622976282889454 +0.1438453495502471923828125 0.0412035003304481520225444057814 -0.0105265494436025622976282889454 +0.143855997920036310366853626874 -0.060109801590442657470703125 0.256304991245269786492855246252 +0.143855997920036310366853626874 0.060109801590442657470703125 0.256304991245269786492855246252 +0.14388795197010040283203125 -0.0240930005908012376258930942186 0.0348682500422000871131977817186 +0.14388795197010040283203125 0.0240930005908012376258930942186 0.0348682500422000871131977817186 +0.14389200508594512939453125 -0.4428620040416717529296875 0.884967982769012451171875 +0.14389200508594512939453125 0.4428620040416717529296875 0.884967982769012451171875 +0.143972101807594315969751619377 -0.0593891970813274425178285298443 0.8864226043224334716796875 +0.143972101807594315969751619377 0.0593891970813274425178285298443 0.8864226043224334716796875 +0.143994900584220875128238503748 0 -0.0420175507664680494834819057814 +0.14399500191211700439453125 -0.22712899744510650634765625 0.421518504619598388671875 +0.14399500191211700439453125 0.22712899744510650634765625 0.421518504619598388671875 +0.144002097845077503546207253748 -0.0410554513335227924675230326557 0.0088224001228809356689453125 +0.144002097845077503546207253748 0.0410554513335227924675230326557 0.0088224001228809356689453125 +0.144035850465297682321264005623 -0.217800796031951904296875 0.233059051632881153448551003748 +0.144035850465297682321264005623 0.217800796031951904296875 0.233059051632881153448551003748 +0.1440982483327388763427734375 -0.73413898050785064697265625 -0.05268749780952930450439453125 +0.1440982483327388763427734375 0.73413898050785064697265625 -0.05268749780952930450439453125 +0.144145050644874567202791126874 -0.0358010999858379350135884067186 -0.0209881491959094980404021413278 +0.144145050644874567202791126874 0.0358010999858379350135884067186 -0.0209881491959094980404021413278 +0.144169998168945323602230246252 -0.1843512058258056640625 0.324391198158264171258480246252 +0.144169998168945323602230246252 0.1843512058258056640625 0.324391198158264171258480246252 +0.144192802906036393606470369377 -0.443788003921508800164730246252 0.649815177917480557567841970013 +0.144192802906036393606470369377 0.443788003921508800164730246252 0.649815177917480557567841970013 +0.144231297075748443603515625 -0.325428289175033580438167746252 -0.8266157805919647216796875 +0.144231297075748443603515625 0.325428289175033580438167746252 -0.8266157805919647216796875 +0.144271399080753315313785378748 0 0.684971702098846391137954014994 +0.144368103146553045101896373126 -0.0597559489309787764121928432814 0.422003692388534579205128238755 +0.144368103146553045101896373126 0.0597559489309787764121928432814 0.422003692388534579205128238755 +0.144388204813003545590177623126 -0.517889356613159268505341970013 -0.115942200273275383692883622189 +0.144388204813003545590177623126 0.517889356613159268505341970013 -0.115942200273275383692883622189 +0.144459298253059392758146373126 -0.237794405221939064709602007497 0.112184098362922660130358565311 +0.144459298253059392758146373126 0.237794405221939064709602007497 0.112184098362922660130358565311 +0.144484502077102644479467130623 -0.120289501547813412751786188437 0.2337833940982818603515625 +0.144484502077102644479467130623 0.120289501547813412751786188437 0.2337833940982818603515625 +0.14454500377178192138671875 -0.921917974948883056640625 0.3594079911708831787109375 +0.14454500377178192138671875 0.921917974948883056640625 0.3594079911708831787109375 +0.144548797607421869448884876874 -0.0245453998446464559390900461722 -0.136026394367218028680355246252 +0.144548797607421869448884876874 0.0245453998446464559390900461722 -0.136026394367218028680355246252 +0.1445779502391815185546875 -0.444956597685813914910823996252 -0.289155900478363037109375 +0.1445779502391815185546875 0.444956597685813914910823996252 -0.289155900478363037109375 +0.144609148800373066290347878748 -0.133937300741672510318025501874 -0.289221447706222489770766514994 +0.144609148800373066290347878748 0.133937300741672510318025501874 -0.289221447706222489770766514994 +0.144618299603462202584935880623 -0.0298992007970809922645649692186 0.02629829943180084228515625 +0.144618299603462202584935880623 0.0298992007970809922645649692186 0.02629829943180084228515625 +0.144656395912170415707365123126 -0.0355624504387378678749165317186 0.0176024995744228363037109375 +0.144656395912170415707365123126 0.0355624504387378678749165317186 0.0176024995744228363037109375 +0.144719994068145757504240123126 -0.105145204067230227384932561563 0.357771611213684115337940738755 +0.144719994068145757504240123126 -0.105144000053405767269865123126 -0.0894429981708526611328125 +0.144719994068145757504240123126 0.105144000053405767269865123126 -0.0894429981708526611328125 +0.144719994068145757504240123126 0.105145204067230227384932561563 0.357771611213684115337940738755 +0.144721603393554693051115123126 -0.23511159420013427734375 -0.28944480419158935546875 +0.144721603393554693051115123126 0.23511159420013427734375 -0.28944480419158935546875 +0.144765402376651780569360994377 -0.615028691291809148644631477509 0.152586852759122842959627064374 +0.144765402376651780569360994377 0.615028691291809148644631477509 0.152586852759122842959627064374 +0.144771002233028411865234375 -0.7345695197582244873046875 0.044144251383841037750244140625 +0.144771002233028411865234375 0.7345695197582244873046875 0.044144251383841037750244140625 +0.14485399425029754638671875 -0.803011000156402587890625 -0.578092992305755615234375 +0.14485399425029754638671875 0.803011000156402587890625 -0.578092992305755615234375 +0.144949498772621171438501619377 -0.386931154131889332159488503748 0.178252650797367101498380748126 +0.144949498772621171438501619377 0.386931154131889332159488503748 0.178252650797367101498380748126 +0.144965600967407237664730246252 -0.10532319545745849609375 0.779674386978149502880341970013 +0.144965600967407237664730246252 0.10532319545745849609375 0.779674386978149502880341970013 +0.144993197917938243524105246252 -0.0890717983245849637130575615629 -0.105086600780487066097990123126 +0.144993197917938243524105246252 0.0890717983245849637130575615629 -0.105086600780487066097990123126 +0.14504800736904144287109375 -0.0848007500171661376953125 -0.18512125313282012939453125 +0.14504800736904144287109375 0.0848007500171661376953125 -0.18512125313282012939453125 +0.14506299793720245361328125 -0.44646298885345458984375 0.172125995159149169921875 +0.14506299793720245361328125 0.44646298885345458984375 0.172125995159149169921875 +0.145116404443979274407894308752 -0.0523711521178483949134907504686 -0.6314255893230438232421875 +0.145116404443979274407894308752 0.0523711521178483949134907504686 -0.6314255893230438232421875 +0.145182600617408757992521373126 -0.446833813190460171771434261245 0.373177206516265846936164507497 +0.145182600617408757992521373126 0.446833813190460171771434261245 0.373177206516265846936164507497 +0.145193950831890128405632367503 -0.373434045910835288317741742503 -0.376783537864685103002670985006 +0.145193950831890128405632367503 0.373434045910835288317741742503 -0.376783537864685103002670985006 +0.145195996761322027035490123126 -0.236800003051757829153345369377 -0.7502295970916748046875 +0.145195996761322027035490123126 0.236800003051757829153345369377 -0.7502295970916748046875 +0.14522199332714080810546875 -0.3801999986171722412109375 -0.2904449999332427978515625 +0.14522199332714080810546875 0.3801999986171722412109375 -0.2904449999332427978515625 +0.14522349834442138671875 -0.18633425235748291015625 0.081790499389171600341796875 +0.14522349834442138671875 0.18633425235748291015625 0.081790499389171600341796875 +0.145228195190429704153345369377 -0.125662195682525651418970369377 0.0558372020721435574630575615629 +0.145228195190429704153345369377 0.125662195682525651418970369377 0.0558372020721435574630575615629 +0.145288395881652848684595369377 -0.0266416013240814222862162807814 0.371727609634399436266960492503 +0.145288395881652848684595369377 0.0266416013240814222862162807814 0.371727609634399436266960492503 +0.145306652784347539730802623126 -0.0120858002454042427753488908593 0.0352120488882064833213725307814 +0.145306652784347539730802623126 0.0120858002454042427753488908593 0.0352120488882064833213725307814 +0.145337703824043262823551003748 -0.154834502935409540347322376874 -0.211903792619705183541967130623 +0.145337703824043262823551003748 0.154834502935409540347322376874 -0.211903792619705183541967130623 +0.145406246185302734375 -0.12605075538158416748046875 -0.15958750247955322265625 +0.145406246185302734375 0.12605075538158416748046875 -0.15958750247955322265625 +0.145436596870422374383480246252 -0.088572800159454345703125 0.104895603656768809930355246252 +0.145436596870422374383480246252 0.088572800159454345703125 0.104895603656768809930355246252 +0.14545874297618865966796875 -0.20075400173664093017578125 0.03224299848079681396484375 +0.14545874297618865966796875 0.20075400173664093017578125 0.03224299848079681396484375 +0.145463597774505626336605246252 -0.00825000032782554661159313269536 -0.137012004852294921875 +0.145463597774505626336605246252 0.00825000032782554661159313269536 -0.137012004852294921875 +0.145472394675016408749357310626 -0.785295450687408469470085492503 -0.290943953394889820440738503748 +0.145472394675016408749357310626 0.785295450687408469470085492503 -0.290943953394889820440738503748 +0.145485001802444446905582253748 -0.234060305356979359014957253748 -0.11853240430355072021484375 +0.145485001802444446905582253748 0.234060305356979359014957253748 -0.11853240430355072021484375 +0.145528802275657648257478626874 -0.0184198502451181390926482350778 -0.0313382998108863788933042826557 +0.145528802275657648257478626874 0.0184198502451181390926482350778 -0.0313382998108863788933042826557 +0.145589601993560802117855246252 0 -0.633485439419746443334702235006 +0.1456190049648284912109375 -0.18742899596691131591796875 -0.97142398357391357421875 +0.1456190049648284912109375 0.18742899596691131591796875 -0.97142398357391357421875 +0.1457806527614593505859375 0 0.035326950252056121826171875 +0.145809297263622267282201505623 -0.309665653109550464971988503748 -0.0731230489909648895263671875 +0.145809297263622267282201505623 0.309665653109550464971988503748 -0.0731230489909648895263671875 +0.145821750164031982421875 0 0.2030664980411529541015625 +0.145855647325515730416967130623 -0.0350162990391254397293252509371 0 +0.145855647325515730416967130623 0.0350162990391254397293252509371 0 +0.145856699347496038265958873126 -0.521302086114883489464943977509 0.0973137021064758439559128078145 +0.145856699347496038265958873126 0.521302086114883489464943977509 0.0973137021064758439559128078145 +0.145967242121696483270198996252 -0.212401203811168698409872490629 0.485879912972450311858807481258 +0.145967242121696483270198996252 0.212401203811168698409872490629 0.485879912972450311858807481258 +0.1459794938564300537109375 -0.20037575066089630126953125 -0.03224299848079681396484375 +0.1459794938564300537109375 0.20037575066089630126953125 -0.03224299848079681396484375 +0.146010549366474146060213001874 -0.312109696865081776007144753748 0.0613875500857829978218482835928 +0.146010549366474146060213001874 0.312109696865081776007144753748 0.0613875500857829978218482835928 +0.146125504374504083804353626874 -0.254408097267150856701789507497 -0.0626408994197845403473223768742 +0.146125504374504083804353626874 0.254408097267150856701789507497 -0.0626408994197845403473223768742 +0.14612714946269989013671875 -0.353893500566482555047542746252 0.236444851756095891781583873126 +0.14612714946269989013671875 0.353893500566482555047542746252 0.236444851756095891781583873126 +0.146158397197723388671875 -0.135795199871063226870759876874 0.014049999415874481201171875 +0.146158397197723388671875 0.135795199871063226870759876874 0.014049999415874481201171875 +0.146210405230522172415064119377 -0.449995493888855013775440738755 0.765588605403900168688835492503 +0.146210405230522172415064119377 0.449995493888855013775440738755 0.765588605403900168688835492503 +0.146251201629638671875 -0.256601107120513927117855246252 0.0525968983769416822959819057814 +0.146251201629638671875 0.256601107120513927117855246252 0.0525968983769416822959819057814 +0.146258196234703069515958873126 -0.577098402380943231726462272491 -0.740315043926238924854033029987 +0.146258196234703069515958873126 0.577098402380943231726462272491 -0.740315043926238924854033029987 +0.146294747292995436227514005623 -0.246830853819847095831363503748 -0.200430655479431146792634876874 +0.146294747292995436227514005623 0.246830853819847095831363503748 -0.200430655479431146792634876874 +0.146371400356292730160490123126 -0.135782396793365484066740123126 -0.0117718003690242770803431326954 +0.146371400356292730160490123126 0.135782396793365484066740123126 -0.0117718003690242770803431326954 +0.146394054591655747854517244377 -0.450562742352485667840511496252 0.279395616054534945416065738755 +0.146394054591655747854517244377 0.450562742352485667840511496252 0.279395616054534945416065738755 +0.146413600444793706722990123126 -0.76852321624755859375 -0.167138397693634033203125 +0.146413600444793706722990123126 0.76852321624755859375 -0.167138397693634033203125 +0.146498402953147893734708873126 -0.00619515012949705106554132427732 -0.031620450317859649658203125 +0.146498402953147893734708873126 0.00619515012949705106554132427732 -0.031620450317859649658203125 +0.146515595912933366262720369377 -0.345971608161926291735710492503 0.13724720478057861328125 +0.146515595912933366262720369377 0.345971608161926291735710492503 0.13724720478057861328125 +0.146528849005699152163728626874 -0.171651992201805131399439119377 0.609560889005661077355568977509 +0.146528849005699152163728626874 0.171651992201805131399439119377 0.609560889005661077355568977509 +0.146536803245544439144865123126 -0.0241506010293960557411274692186 -0.0210646502673625946044921875 +0.146536803245544439144865123126 0.0241506010293960557411274692186 -0.0210646502673625946044921875 +0.14655165374279022216796875 -0.0181786503642797463153879533593 0.0263088002800941460346262346093 +0.14655165374279022216796875 0.0181786503642797463153879533593 0.0263088002800941460346262346093 +0.146558247506618499755859375 -0.257011198997497580798210492503 0.339066436886787447857471988755 +0.146558247506618499755859375 0.257011198997497580798210492503 0.339066436886787447857471988755 +0.1466452516615390777587890625 -0.28942649066448211669921875 0.67618574202060699462890625 +0.1466452516615390777587890625 0.28942649066448211669921875 0.67618574202060699462890625 +0.146645995974540699346988503748 -0.0297335989773273440262002509371 -0.0105296999216079704975168596093 +0.146645995974540699346988503748 0.0297335989773273440262002509371 -0.0105296999216079704975168596093 +0.146706300973892200811832253748 -0.0200222991406917572021484375 0.260914492607116688116519753748 +0.146706300973892200811832253748 0.0200222991406917572021484375 0.260914492607116688116519753748 +0.146787303686141956671207253748 -0.02959080040454864501953125 0.00882419999688863719577991417964 +0.146787303686141956671207253748 0.02959080040454864501953125 0.00882419999688863719577991417964 +0.146835146844387032238898882497 -0.317041197419166531634715511245 0.0206006506457924835895578752343 +0.146835146844387032238898882497 0.317041197419166531634715511245 0.0206006506457924835895578752343 +0.146843554079532617739900501874 -0.106686902046203610505692438437 -0.411770260334014925884815738755 +0.146843554079532617739900501874 0.106686902046203610505692438437 -0.411770260334014925884815738755 +0.146883603930473310983373380623 -0.530978393554687455591079014994 0.237670201063156116827457253748 +0.146883603930473310983373380623 0.530978393554687455591079014994 0.237670201063156116827457253748 +0.146922397613525407278345369377 -0.116942799091339116879240123126 0.0688347995281219510177450615629 +0.146922397613525407278345369377 0.116942799091339116879240123126 0.0688347995281219510177450615629 +0.14694650471210479736328125 -0.20225425064563751220703125 0 +0.14694650471210479736328125 0.20225425064563751220703125 0 +0.146971654891967756784154630623 -0.316693642735481228900340511245 -0.02458749897778034210205078125 +0.146971654891967756784154630623 0.316693642735481228900340511245 -0.02458749897778034210205078125 +0.147005403041839594058259876874 -0.260917496681213390008480246252 0.0176483999937772743915598283593 +0.147005403041839594058259876874 0.260917496681213390008480246252 0.0176483999937772743915598283593 +0.147019645571708684750333873126 -0.0239416502416133873676340471093 0.0176636997610330574726145158593 +0.147019645571708684750333873126 0.0239416502416133873676340471093 0.0176636997610330574726145158593 +0.147061599791049935070930132497 -0.452600395679473854748664507497 -0.513347780704498268811164507497 +0.147061599791049935070930132497 0.452600395679473854748664507497 -0.513347780704498268811164507497 +0.147125253081321710757478626874 -0.218340906500816361868189119377 -0.364940097928047213482471988755 +0.147125253081321710757478626874 0.218340906500816361868189119377 -0.364940097928047213482471988755 +0.147163800895214080810546875 -0.601892197132110506885283029987 0.32568199932575225830078125 +0.147163800895214080810546875 0.601892197132110506885283029987 0.32568199932575225830078125 +0.14718450605869293212890625 -0.1320745050907135009765625 0.4592309892177581787109375 +0.14718450605869293212890625 0.1320745050907135009765625 0.4592309892177581787109375 +0.147189903259277332647769753748 -0.260560208559036221576121761245 -0.0210593998432159409950337192186 +0.147189903259277332647769753748 0.260560208559036221576121761245 -0.0210593998432159409950337192186 +0.147269201278686534539730246252 -0.126915395259857177734375 -0.0469498008489608806281800923443 +0.147269201278686534539730246252 0.126915395259857177734375 -0.0469498008489608806281800923443 +0.147296249866485595703125 -0.14112724363803863525390625 0.1445229947566986083984375 +0.147296249866485595703125 0.14112724363803863525390625 0.1445229947566986083984375 +0.1472994983196258544921875 -0.18587325513362884521484375 -0.0790822505950927734375 +0.1472994983196258544921875 0.18587325513362884521484375 -0.0790822505950927734375 +0.147302353382110590152009876874 -0.626509642601013161389289507497 -0.09103834629058837890625 +0.147302353382110590152009876874 0.626509642601013161389289507497 -0.09103834629058837890625 +0.147303998470306396484375 -0.0332675017416477203369140625 0.199235498905181884765625 +0.147303998470306396484375 0.0332675017416477203369140625 0.199235498905181884765625 +0.147313404083251969778345369377 -0.0579850018024444593955912807814 -0.122214996814727791529797684689 +0.147313404083251969778345369377 0.0579850018024444593955912807814 -0.122214996814727791529797684689 +0.147326253354549407958984375 -0.353183247148990631103515625 -0.64502473175525665283203125 +0.147326253354549407958984375 0.353183247148990631103515625 -0.64502473175525665283203125 +0.1473622508347034454345703125 -0.6213314831256866455078125 -0.3933599889278411865234375 +0.1473622508347034454345703125 0.6213314831256866455078125 -0.3933599889278411865234375 +0.147463801503181446417301003748 -0.198851698637008661441072376874 0.169447499513626087530582253748 +0.147463801503181446417301003748 0.198851698637008661441072376874 0.169447499513626087530582253748 +0.147488397359848005807592130623 -0.0824066966772079440017861884371 -0.2479037940502166748046875 +0.147488397359848005807592130623 0.0824066966772079440017861884371 -0.2479037940502166748046875 +0.147507297992706287725894753748 -0.00610154997557401605062787908196 0.0265399508178234093402902971093 +0.147507297992706287725894753748 0.00610154997557401605062787908196 0.0265399508178234093402902971093 +0.147567296028137201480134876874 -0.2495250999927520751953125 0.9046888053417205810546875 +0.147567296028137201480134876874 0.2495250999927520751953125 0.9046888053417205810546875 +0.147592401504516607113615123126 -0.0528162002563476590255575615629 0.124205195903778084498547684689 +0.147592401504516607113615123126 0.0528162002563476590255575615629 0.124205195903778084498547684689 +0.147598649561405198538110994377 -0.353569489717483531610042746252 -0.236015993356704728567407869377 +0.147598649561405198538110994377 0.353569489717483531610042746252 -0.236015993356704728567407869377 +0.147607201337814325503572376874 -0.195555603504180913754240123126 0.547695600986480735095085492503 +0.147607201337814325503572376874 0.195555603504180913754240123126 0.547695600986480735095085492503 +0.147634804248809814453125 0 0.134922003746032720394865123126 +0.147740197181701671258480246252 -0.097141802310943603515625 0.0934683978557586669921875 +0.147740197181701671258480246252 0.097141802310943603515625 0.0934683978557586669921875 +0.147763800621032725945980246252 -0.107356202602386485711605246252 0.0814891993999481284438601846887 +0.147763800621032725945980246252 0.107356202602386485711605246252 0.0814891993999481284438601846887 +0.147791607677936559506193248126 -0.528359711170196533203125 -0.038644649088382720947265625 +0.147791607677936559506193248126 0.528359711170196533203125 -0.038644649088382720947265625 +0.147814404964447032586605246252 -0.28451120853424072265625 0.23917400836944580078125 +0.147814404964447032586605246252 0.28451120853424072265625 0.23917400836944580078125 +0.1478737480938434600830078125 -0.45511575043201446533203125 0.5774977505207061767578125 +0.1478737480938434600830078125 0.45511575043201446533203125 0.5774977505207061767578125 +0.147916495800018310546875 -0.224935197830200189761384876874 0.132381597161293024234041126874 +0.147916495800018310546875 0.224935197830200189761384876874 0.132381597161293024234041126874 +0.148007252812385553530916126874 -0.0123483002185821536672571951954 -0.02100884914398193359375 +0.148007252812385553530916126874 0.0123483002185821536672571951954 -0.02100884914398193359375 +0.148039996623992919921875 -0.17557699978351593017578125 0.098776750266551971435546875 +0.148039996623992919921875 0.17557699978351593017578125 0.098776750266551971435546875 +0.148047896474599843807951060626 -0.637313860654830866003806022491 0.542598369717597894812399772491 +0.148047896474599843807951060626 0.637313860654830866003806022491 0.542598369717597894812399772491 +0.148091854155063623599275501874 -0.395703908801078807488948996252 -0.154878298938274400198267244377 +0.148091854155063623599275501874 0.395703908801078807488948996252 -0.154878298938274400198267244377 +0.148134002089500421694978626874 -0.284258091449737515521434261245 -0.140547744929790496826171875 +0.148134002089500421694978626874 0.284258091449737515521434261245 -0.140547744929790496826171875 +0.148153352737426746710269753748 -0.0234648004174232462093474538278 0 +0.148153352737426746710269753748 0.0234648004174232462093474538278 0 +0.148185045272111903802425558752 -0.0429272990673780427406391879686 0.6314255893230438232421875 +0.148185045272111903802425558752 0.0429272990673780427406391879686 0.6314255893230438232421875 +0.148247006535530106985376619377 -0.528653410077095098351662727509 0.0323763009160757120330487168758 +0.148247006535530106985376619377 0.528653410077095098351662727509 0.0323763009160757120330487168758 +0.148266948014497773611353181877 -0.4563272893428802490234375 0.438499766588211048468082253748 +0.148266948014497773611353181877 0.4563272893428802490234375 0.438499766588211048468082253748 +0.14832399785518646240234375 -0.4564904868602752685546875 -0.140058994293212890625 +0.14832399785518646240234375 0.4564904868602752685546875 -0.140058994293212890625 +0.1483902037143707275390625 -0.550125116109847933643095529987 -0.406622999906539883685496761245 +0.1483902037143707275390625 0.550125116109847933643095529987 -0.406622999906539883685496761245 +0.148420798778533952200220369377 -0.563571977615356489721420985006 -0.548048782348632856908920985006 +0.148420798778533952200220369377 0.563571977615356489721420985006 -0.548048782348632856908920985006 +0.148436401784419996774389005623 -0.640530097484588556433493522491 0.240182608366012545486611884371 +0.148436401784419996774389005623 0.640530097484588556433493522491 0.240182608366012545486611884371 +0.148464149236679082699552623126 -0.0121711503714323036884348283593 0.0176145002245902994320037038278 +0.148464149236679082699552623126 0.0121711503714323036884348283593 0.0176145002245902994320037038278 +0.148476654291152948550447376874 -0.193678101897239662854133257497 -0.250885602831840526238948996252 +0.148476654291152948550447376874 0.193678101897239662854133257497 -0.250885602831840526238948996252 +0.14850054681301116943359375 -0.338498595356941267553452235006 0.407267314195632945672542746252 +0.14850054681301116943359375 0.338498595356941267553452235006 0.407267314195632945672542746252 +0.148511400818824773617521373126 0 -0.0210803993046283708046040317186 +0.148547253012657171078458873126 -0.0179631002247333526611328125 -0.01053749956190586090087890625 +0.148547253012657171078458873126 0.0179631002247333526611328125 -0.01053749956190586090087890625 +0.148592403531074529476896373126 -0.244173055887222323345753238755 -0.469893041253089949194077235006 +0.148592403531074529476896373126 0.244173055887222323345753238755 -0.469893041253089949194077235006 +0.1486132480204105377197265625 -0.93830360472202301025390625 0 +0.1486132480204105377197265625 0.93830360472202301025390625 0 +0.148642648756504069940120871252 -0.628155446052551247326789507497 0.0763301499187946375091229356258 +0.148642648756504069940120871252 0.628155446052551247326789507497 0.0763301499187946375091229356258 +0.1486647427082061767578125 -0.1487224996089935302734375 -0.13520525395870208740234375 +0.1486647427082061767578125 0.1487224996089935302734375 -0.13520525395870208740234375 +0.148670849204063398873998380623 -0.0178615495562553412700612653907 0.00882869996130466495876110144536 +0.148670849204063398873998380623 0.0178615495562553412700612653907 0.00882869996130466495876110144536 +0.148672305047512054443359375 -0.279834091663360595703125 -0.624171119928359940942641514994 +0.148672305047512054443359375 0.279834091663360595703125 -0.624171119928359940942641514994 +0.148730748891830438784822376874 -0.290783858299255348889289507497 0.125792796909809101446597878748 +0.148730748891830438784822376874 0.290783858299255348889289507497 0.125792796909809101446597878748 +0.14875699579715728759765625 -0.978851020336151123046875 -0.14043200016021728515625 +0.14875699579715728759765625 0.978851020336151123046875 -0.14043200016021728515625 +0.148863053321838356701789507497 -0.108153854310512539949051813437 -0.297728902101516701428352007497 +0.148863053321838356701789507497 0.108153854310512539949051813437 -0.297728902101516701428352007497 +0.1489025056362152099609375 -0.0332829989492893218994140625 0.4761514961719512939453125 +0.1489025056362152099609375 0.0332829989492893218994140625 0.4761514961719512939453125 +0.148917303979396814517244251874 -0.233624652028083773513955634371 0.213876599073410028628572376874 +0.148917303979396814517244251874 0.233624652028083773513955634371 0.213876599073410028628572376874 +0.148955252766609175241185880623 0 0.0176728494465351083919646413278 +0.148985195159912126028345369377 -0.02651380002498626708984375 0.130768597126007080078125 +0.148985195159912126028345369377 0.02651380002498626708984375 0.130768597126007080078125 +0.14902125298976898193359375 -0.083085000514984130859375 0.18272824585437774658203125 +0.14902125298976898193359375 0.083085000514984130859375 0.18272824585437774658203125 +0.149200803041458107678352007497 -0.459200680255889837066973768742 0.506827312707900934363181022491 +0.149200803041458107678352007497 0.459200680255889837066973768742 0.506827312707900934363181022491 +0.149245554208755487612947376874 -0.276131005585193600726512386245 0.789921981096267655786391514994 +0.149245554208755487612947376874 0.276131005585193600726512386245 0.789921981096267655786391514994 +0.149269199371337896176115123126 -0.353903198242187522204460492503 -0.111674404144287114926115123126 +0.149269199371337896176115123126 0.353903198242187522204460492503 -0.111674404144287114926115123126 +0.14929850399494171142578125 -0.108470499515533447265625 -0.1686537563800811767578125 +0.14929850399494171142578125 0.108470499515533447265625 -0.1686537563800811767578125 +0.149318649619817722662418191248 -0.459547391533851601330695757497 -0.699300086498260475842414507497 +0.149318649619817722662418191248 0.459547391533851601330695757497 -0.699300086498260475842414507497 +0.149319195747375482730134876874 -0.773314380645751975329460492503 0.140314400196075439453125 +0.149319195747375482730134876874 0.773314380645751975329460492503 0.140314400196075439453125 +0.149500948190689070260717130623 -0.00619485005736350978489124230464 -0.010539449751377105712890625 +0.149500948190689070260717130623 0.00619485005736350978489124230464 -0.010539449751377105712890625 +0.149537551403045643194644753748 -0.01176870055496692657470703125 0 +0.149537551403045643194644753748 0.01176870055496692657470703125 0 +0.14955274760723114013671875 -0.16415424644947052001953125 0.114836253225803375244140625 +0.14955274760723114013671875 0.16415424644947052001953125 0.114836253225803375244140625 +0.149603651463985437564119251874 -0.0233481489121913909912109375 0.315552657842636086193977007497 +0.149603651463985437564119251874 0.0233481489121913909912109375 0.315552657842636086193977007497 +0.149615550041198724917634876874 -0.00610124990344047563733953509768 0.00882990024983882834663795335928 +0.149615550041198724917634876874 0.00610124990344047563733953509768 0.00882990024983882834663795335928 +0.14965049922466278076171875 -0.62033025920391082763671875 0.39407475292682647705078125 +0.14965049922466278076171875 0.62033025920391082763671875 0.39407475292682647705078125 +0.1497982442378997802734375 -0.067655496299266815185546875 -0.18837000429630279541015625 +0.1497982442378997802734375 0.067655496299266815185546875 -0.18837000429630279541015625 +0.149850001931190496273771373126 -0.0718245014548301724532919365629 -0.418193989992141745837272992503 +0.149850001931190496273771373126 0.0718245014548301724532919365629 -0.418193989992141745837272992503 +0.149876099824905406610042746252 -0.782748895883560225072983485006 -0.418139997124671924932926003748 +0.149876099824905406610042746252 0.782748895883560225072983485006 -0.418139997124671924932926003748 +0.1498816013336181640625 -0.632132816314697310033920985006 0.466843986511230490954460492503 +0.1498816013336181640625 0.632132816314697310033920985006 0.466843986511230490954460492503 +0.14989750087261199951171875 -0.3544825017452239990234375 0.3191755115985870361328125 +0.14989750087261199951171875 0.3544825017452239990234375 0.3191755115985870361328125 +0.149907600879669200555355246252 -0.0763432025909423911391726846887 -0.108164000511169436369307561563 +0.149907600879669200555355246252 0.0763432025909423911391726846887 -0.108164000511169436369307561563 +0.149932003021240239926115123126 -0.118978404998779305201672684689 -0.0580045998096466106086488423443 +0.149932003021240239926115123126 0.118978404998779305201672684689 -0.0580045998096466106086488423443 +0.149976396560668939761384876874 -0.129315197467803955078125 0.028011798858642578125 +0.149976396560668939761384876874 0.129315197467803955078125 0.028011798858642578125 +0.14999909698963165283203125 -0.0594671979546546880524005018742 -0.252911102771759044305355246252 +0.14999909698963165283203125 0.0594671979546546880524005018742 -0.252911102771759044305355246252 +0.149999999999999994448884876874 0 0 +0.150039893388748152291967130623 -0.221664601564407343081697376874 -0.135472503304481489694310880623 +0.150039893388748152291967130623 0.221664601564407343081697376874 -0.135472503304481489694310880623 +0.150065101683139801025390625 -0.109027799963951108064286188437 -0.880677902698516867907585492503 +0.150065101683139801025390625 0.109027799963951108064286188437 -0.880677902698516867907585492503 +0.1500822007656097412109375 -0.139263001084327681100560880623 0.219274199008941655941740123126 +0.1500822007656097412109375 0.139263001084327681100560880623 0.219274199008941655941740123126 +0.150130748748779296875 -0.1517055034637451171875 0.13017749786376953125 +0.150130748748779296875 0.1517055034637451171875 0.13017749786376953125 +0.1501615047454833984375 -0.4621525108814239501953125 0.117757499217987060546875 +0.1501615047454833984375 0.4621525108814239501953125 0.117757499217987060546875 +0.15021090209484100341796875 -0.311122003197669971807926003748 0.608801901340484619140625 +0.15021090209484100341796875 0.311122003197669971807926003748 0.608801901340484619140625 +0.150296293199062347412109375 0 0.529066437482833884509147992503 +0.150353546440601365530298494377 -0.403559991717338584216179242503 0.130510349571704875604183371252 +0.150353546440601365530298494377 0.403559991717338584216179242503 0.130510349571704875604183371252 +0.150377404689788801706029630623 -0.542902207374572731701789507497 -0.206505006551742559262052623126 +0.150377404689788801706029630623 0.542902207374572731701789507497 -0.206505006551742559262052623126 +0.150390398502349864617855246252 -0.358560395240783702508480246252 0.0938996016979217612563601846887 +0.150390398502349864617855246252 0.358560395240783702508480246252 0.0938996016979217612563601846887 +0.150411897897720331362947376874 -0.210612899065017705746427623126 0.151718097925186146124332253748 +0.150411897897720331362947376874 0.210612899065017705746427623126 0.151718097925186146124332253748 +0.15044939517974853515625 -0.0440225988626480116416850307814 -0.124205398559570315275557561563 +0.15044939517974853515625 0.0440225988626480116416850307814 -0.124205398559570315275557561563 +0.150504195690155023745759876874 -0.162473501265048975161775501874 0.271018302440643288342414507497 +0.150504195690155023745759876874 0.162473501265048975161775501874 0.271018302440643288342414507497 +0.150536203384399436266960492503 -0.0649721980094909723479901231258 0.11453139781951904296875 +0.150536203384399436266960492503 0.0649721980094909723479901231258 0.11453139781951904296875 +0.150559198856353770867855246252 -0.0931302011013031005859375 -0.0930519998073577880859375 +0.150559198856353770867855246252 0.0931302011013031005859375 -0.0930519998073577880859375 +0.150568503141403187139957253748 -0.134091299772262556588842130623 -0.222145503759384160824552623126 +0.150568503141403187139957253748 0.134091299772262556588842130623 -0.222145503759384160824552623126 +0.150596797466278076171875 -0.320599603652954145971420985006 -0.185839998722076432668970369377 +0.150596797466278076171875 0.320599603652954145971420985006 -0.185839998722076432668970369377 +0.150608205795288108141960492503 -0.129481995105743402652009876874 -0.0234861999750137356857138115629 +0.150608205795288108141960492503 0.129481995105743402652009876874 -0.0234861999750137356857138115629 +0.150688803195953374691740123126 -0.109480798244476318359375 -0.353987193107605013775440738755 +0.150688803195953374691740123126 0.109480798244476318359375 -0.353987193107605013775440738755 +0.1507148444652557373046875 -0.109500600397586828060880748126 0.517488950490951560290397992503 +0.1507148444652557373046875 0.109500600397586828060880748126 0.517488950490951560290397992503 +0.15073500573635101318359375 -0.1931437551975250244140625 0.0497434996068477630615234375 +0.15073500573635101318359375 0.1931437551975250244140625 0.0497434996068477630615234375 +0.150802998989820469244449441248 -0.668779101967811540063735264994 0.657642269134521506579460492503 +0.150802998989820469244449441248 0.668779101967811540063735264994 0.657642269134521506579460492503 +0.150891302525997167416349498126 -0.368642243742942798956363503748 0.209366999566555023193359375 +0.150891302525997167416349498126 0.368642243742942798956363503748 0.209366999566555023193359375 +0.150894705951213847772152121252 -0.109629853814840319548018499063 -0.51740919053554534912109375 +0.150894705951213847772152121252 0.109629853814840319548018499063 -0.51740919053554534912109375 +0.151001393795013427734375 -0.0795408010482788058181924384371 0.575214600563049294201789507497 +0.151001393795013427734375 0.0795408010482788058181924384371 0.575214600563049294201789507497 +0.1510055959224700927734375 -0.183276003599166875668302623126 -0.183322799205780012643529630623 +0.1510055959224700927734375 0.183276003599166875668302623126 -0.183322799205780012643529630623 +0.15107500553131103515625 -0.981482982635498046875 0.117757998406887054443359375 +0.15107500553131103515625 0.981482982635498046875 0.117757998406887054443359375 +0.1511354036629199981689453125 -0.378264909982681307720753238755 -0.506531345844268843237045985006 +0.1511354036629199981689453125 0.378264909982681307720753238755 -0.506531345844268843237045985006 +0.15126325190067291259765625 -0.175725996494293212890625 -0.093486748635768890380859375 +0.15126325190067291259765625 0.175725996494293212890625 -0.093486748635768890380859375 +0.1513515003025531768798828125 -0.1716720052063465118408203125 -0.7142280042171478271484375 +0.1513515003025531768798828125 0.1716720052063465118408203125 -0.7142280042171478271484375 +0.151383595168590540103181751874 -0.03657689876854419708251953125 -0.8864226043224334716796875 +0.151383595168590540103181751874 0.03657689876854419708251953125 -0.8864226043224334716796875 +0.151427498459815984555021373126 -0.758986270427703835217414507497 0.351438455283641815185546875 +0.151427498459815984555021373126 0.758986270427703835217414507497 0.351438455283641815185546875 +0.151540555059909820556640625 -0.799630713462829545434829014994 0.245206288993358612060546875 +0.151540555059909820556640625 0.799630713462829545434829014994 0.245206288993358612060546875 +0.15163600444793701171875 -0.2096424102783203125 0.305051589012146018298210492503 +0.15163600444793701171875 0.2096424102783203125 0.305051589012146018298210492503 +0.151713591814041121041967130623 -0.0359259009361267075965962192186 -0.256304991245269786492855246252 +0.151713591814041121041967130623 0.0359259009361267075965962192186 -0.256304991245269786492855246252 +0.151739901304245000668302623126 -0.632040518522262617651108485006 0 +0.151739901304245000668302623126 0.632040518522262617651108485006 0 +0.1518071480095386505126953125 -0.72003348171710968017578125 -0.60083796083927154541015625 +0.1518071480095386505126953125 0.72003348171710968017578125 -0.60083796083927154541015625 +0.1518632471561431884765625 -0.1929597556591033935546875 -0.0469477511942386627197265625 +0.1518632471561431884765625 0.1929597556591033935546875 -0.0469477511942386627197265625 +0.151886795461177837029964621252 -0.554213386774063176964943977509 -0.303772951662540424688785378748 +0.151886795461177837029964621252 0.554213386774063176964943977509 -0.303772951662540424688785378748 +0.15191400051116943359375 -0.110371005535125743524105246252 -0.06885039806365966796875 +0.15191400051116943359375 0.110371005535125743524105246252 -0.06885039806365966796875 +0.151919554173946397268579744377 -0.0365129984915256514121928432814 -0.422003692388534579205128238755 +0.151919554173946397268579744377 0.0365129984915256514121928432814 -0.422003692388534579205128238755 +0.151970551908016199282869251874 -0.0626885969191789543808468465613 0.93566830456256866455078125 +0.151970551908016199282869251874 0.0626885969191789543808468465613 0.93566830456256866455078125 +0.151976394653320329153345369377 -0.271562790870666537212940738755 -0.25130999088287353515625 +0.151976394653320329153345369377 0.271562790870666537212940738755 -0.25130999088287353515625 +0.152011755108833329641626619377 -0.467851999402046248022202235006 0.245968244969844845870809990629 +0.152011755108833329641626619377 0.467851999402046248022202235006 0.245968244969844845870809990629 +0.152018702030181890316740123126 -0.0799206018447875948806924384371 0.245973604917526234014957253748 +0.152018702030181890316740123126 0.0799206018447875948806924384371 0.245973604917526234014957253748 +0.152019596099853521176115123126 -0.308021414279937733038394753748 -0.491947817802429188116519753748 +0.152019596099853521176115123126 0.308021414279937733038394753748 -0.491947817802429188116519753748 +0.15206944942474365234375 -0.217545907199382798635767244377 -0.593336901068687416760383257497 +0.15206944942474365234375 0.217545907199382798635767244377 -0.593336901068687416760383257497 +0.152081394195556662829460492503 -0.129889404773712163754240123126 0 +0.152081394195556662829460492503 0.129889404773712163754240123126 0 +0.152135396003723138980134876874 -0.338704812526702869757144753748 0.471310794353485107421875 +0.152135396003723138980134876874 0.338704812526702869757144753748 0.471310794353485107421875 +0.152198900282382948434545255623 -0.0817043483257293701171875 -0.3044009506702423095703125 +0.152198900282382948434545255623 0.0817043483257293701171875 -0.3044009506702423095703125 +0.1522441469132900238037109375 -0.343507638573646523205695757497 -0.87253887951374053955078125 +0.1522441469132900238037109375 0.343507638573646523205695757497 -0.87253887951374053955078125 +0.152274750173091888427734375 -0.6682522594928741455078125 -0.3045502603054046630859375 +0.152274750173091888427734375 0.6682522594928741455078125 -0.3045502603054046630859375 +0.152286398410797135793970369377 -0.3308432102203369140625 0.165382802486419677734375 +0.152286398410797135793970369377 0.3308432102203369140625 0.165382802486419677734375 +0.152422200143337266409204744377 0 -0.423400050401687655377003238755 +0.152432097494602208920255748126 -0.177359850704669946841463001874 0.384457942843437205926448996252 +0.152432097494602208920255748126 0.177359850704669946841463001874 0.384457942843437205926448996252 +0.152499902248382557257144753748 -0.0929306045174598666092080634371 0.301011207699775684698551003748 +0.152499902248382557257144753748 0.0929306045174598666092080634371 0.301011207699775684698551003748 +0.152524805068969732113615123126 -0.208996796607971213610710492503 -0.305051589012146018298210492503 +0.152524805068969732113615123126 0.208996796607971213610710492503 -0.305051589012146018298210492503 +0.152539205551147472039730246252 -0.0767221987247467124282351846887 0.104141795635223396998547684689 +0.152539205551147472039730246252 0.0767221987247467124282351846887 0.104141795635223396998547684689 +0.152570092678070062808259876874 -0.0123893994837999347341517264454 -0.258009606599807705951121761245 +0.152570092678070062808259876874 0.0123893994837999347341517264454 -0.258009606599807705951121761245 +0.152604898810386663265958873126 0 0.423334363102912891729801003748 +0.152618002891540538445980246252 -0.030309200286865234375 -0.125654804706573502981470369377 +0.152618002891540538445980246252 0.030309200286865234375 -0.125654804706573502981470369377 +0.152638506889343245065404630623 -0.247552496194839460885717130623 0.0736161008477210915268429403113 +0.152638506889343245065404630623 0.247552496194839460885717130623 0.0736161008477210915268429403113 +0.152704304456710793225227007497 -0.654590290784835771020766514994 -0.195430207252502430304019753748 +0.152704304456710793225227007497 0.654590290784835771020766514994 -0.195430207252502430304019753748 +0.15280640125274658203125 -0.299753594398498524054019753748 0.216328406333923362048210492503 +0.15280640125274658203125 0.299753594398498524054019753748 0.216328406333923362048210492503 +0.152808594703674305304019753748 -0.470304000377655018194644753748 0.339799797534942604748664507497 +0.152808594703674305304019753748 0.470304000377655018194644753748 0.339799797534942604748664507497 +0.152821791172027571237279630623 -0.160426193475723261050447376874 -0.557591986656188920434829014994 +0.152821791172027571237279630623 0.160426193475723261050447376874 -0.557591986656188920434829014994 +0.152887500822544097900390625 -0.148788750171661376953125 0.7190182507038116455078125 +0.152887500822544097900390625 0.148788750171661376953125 0.7190182507038116455078125 +0.152906244993209816662727007497 -0.248138105869293190686164507497 0.193770852684974653756810880623 +0.152906244993209816662727007497 0.248138105869293190686164507497 0.193770852684974653756810880623 +0.1529760062694549560546875 -0.470808506011962890625 -0.070267997682094573974609375 +0.1529760062694549560546875 0.470808506011962890625 -0.070267997682094573974609375 +0.153014695644378667660490123126 -0.245256292819976795538394753748 -0.0802238970994949285309161268742 +0.153014695644378667660490123126 0.245256292819976795538394753748 -0.0802238970994949285309161268742 +0.153029251098632829153345369377 -0.292248907685279835089176003748 -0.306059843301773104595753238755 +0.153029251098632829153345369377 0.292248907685279835089176003748 -0.306059843301773104595753238755 +0.153073596954345719778345369377 -0.369551610946655284539730246252 0 +0.153073596954345719778345369377 0.369551610946655284539730246252 0 +0.15316499769687652587890625 -0.098533250391483306884765625 0.17126500606536865234375 +0.15316499769687652587890625 0.098533250391483306884765625 0.17126500606536865234375 +0.153171002864837646484375 -0.121495199203491222039730246252 0.0421608000993728693206463731258 +0.153171002864837646484375 0.121495199203491222039730246252 0.0421608000993728693206463731258 +0.153200602531433111019865123126 -0.10125839710235595703125 -0.0792234003543853815276776231258 +0.153200602531433111019865123126 0.10125839710235595703125 -0.0792234003543853815276776231258 +0.153204853087663656063810435626 -0.471524754166603055072215511245 0.690428626537322953637954014994 +0.153204853087663656063810435626 0.471524754166603055072215511245 0.690428626537322953637954014994 +0.153209197521209733450220369377 -0.366497588157653819695980246252 0.0469723999500274713714276231258 +0.153209197521209733450220369377 0.366497588157653819695980246252 0.0469723999500274713714276231258 +0.153262197971343994140625 -0.0396770000457763727386151231258 0.122214603424072268400557561563 +0.153262197971343994140625 0.0396770000457763727386151231258 0.122214603424072268400557561563 +0.153282797336578374691740123126 -0.365192794799804709704460492503 -0.05602359771728515625 +0.153282797336578374691740123126 0.365192794799804709704460492503 -0.05602359771728515625 +0.153297007083892822265625 -0.15260350704193115234375 -0.4507904946804046630859375 +0.153297007083892822265625 0.15260350704193115234375 -0.4507904946804046630859375 +0.153352496027946455514623380623 -0.276558795571327176165965511245 0.149993899464607227667301003748 +0.153352496027946455514623380623 0.276558795571327176165965511245 0.149993899464607227667301003748 +0.153382194042205821649105246252 -0.0132083997130393992341934605861 0.127669203281402604543970369377 +0.153382194042205821649105246252 0.0132083997130393992341934605861 0.127669203281402604543970369377 +0.15343199670314788818359375 -0.47221648693084716796875 0.058909498155117034912109375 +0.15343199670314788818359375 0.47221648693084716796875 0.058909498155117034912109375 +0.153488700091838847772152121252 -0.412240961194038413317741742503 -0.0948618002235889490325604356258 +0.153488700091838847772152121252 0.412240961194038413317741742503 -0.0948618002235889490325604356258 +0.153517493605613702944978626874 -0.279105761647224448473991742503 0.317855688929557789190738503748 +0.153517493605613702944978626874 0.279105761647224448473991742503 0.317855688929557789190738503748 +0.153577453643083589041040681877 -0.3322806656360626220703125 0.537125545740127607885483485006 +0.153577453643083589041040681877 0.3322806656360626220703125 0.537125545740127607885483485006 +0.1535899937152862548828125 -0.19647474586963653564453125 0.01754424907267093658447265625 +0.1535899937152862548828125 0.19647474586963653564453125 0.01754424907267093658447265625 +0.15368850529193878173828125 -0.0502962507307529449462890625 -0.19065700471401214599609375 +0.15368850529193878173828125 0.0502962507307529449462890625 -0.19065700471401214599609375 +0.153704798221588140316740123126 -0.783081579208374067846420985006 -0.0561999976634979248046875 +0.153704798221588140316740123126 0.783081579208374067846420985006 -0.0561999976634979248046875 +0.1537722051143646240234375 -0.157232093811035145147769753748 0.204039895534515375308259876874 +0.1537722051143646240234375 0.157232093811035145147769753748 0.204039895534515375308259876874 +0.153809249401092529296875 -0.0166772492229938507080078125 0.1963784992694854736328125 +0.153809249401092529296875 0.0166772492229938507080078125 0.1963784992694854736328125 +0.153825902938842767886384876874 -0.208132499456405634097322376874 -0.151718097925186146124332253748 +0.153825902938842767886384876874 0.208132499456405634097322376874 -0.151718097925186146124332253748 +0.153869102895259846075504128748 -0.270142593979835476947215511245 -0.160770754516124714239566628748 +0.153869102895259846075504128748 0.270142593979835476947215511245 -0.160770754516124714239566628748 +0.15390075743198394775390625 -0.0496447496116161346435546875 0.1906567513942718505859375 +0.15390075743198394775390625 0.0496447496116161346435546875 0.1906567513942718505859375 +0.15394675731658935546875 -0.1964287459850311279296875 -0.0147040002048015594482421875 +0.15394675731658935546875 0.1964287459850311279296875 -0.0147040002048015594482421875 +0.153955996036529541015625 -0.607472002506256103515625 -0.7792789936065673828125 +0.153955996036529541015625 0.607472002506256103515625 -0.7792789936065673828125 +0.153983701765537273065120871252 -0.0892507530748844202239666856258 0.41330789029598236083984375 +0.153983701765537273065120871252 0.0892507530748844202239666856258 0.41330789029598236083984375 +0.15400600433349609375 -0.0789084017276763943771200615629 -0.360632395744323763775440738755 +0.15400600433349609375 0.0789084017276763943771200615629 -0.360632395744323763775440738755 +0.1540062427520751953125 -0.132282257080078125 -0.145888745784759521484375 +0.1540062427520751953125 0.132282257080078125 -0.145888745784759521484375 +0.15402500331401824951171875 -0.16522000730037689208984375 -0.10713849961757659912109375 +0.15402500331401824951171875 0.16522000730037689208984375 -0.10713849961757659912109375 +0.154025951027870172671541126874 -0.111905895173549652099609375 0.828404036164283708032485264994 +0.154025951027870172671541126874 0.111905895173549652099609375 0.828404036164283708032485264994 +0.154029594361782068423494251874 -0.831489300727844216076789507497 -0.308058303594589244500667746252 +0.154029594361782068423494251874 0.831489300727844216076789507497 -0.308058303594589244500667746252 +0.154030242562294028552116742503 -0.0666544981300830896575604356258 -0.523766645789146445544304242503 +0.154030242562294028552116742503 0.0666544981300830896575604356258 -0.523766645789146445544304242503 +0.154032397270202653372095369377 -0.0633544027805328369140625 -0.11072599887847900390625 +0.154032397270202653372095369377 0.0633544027805328369140625 -0.11072599887847900390625 +0.154042994976043706722990123126 -0.016448199748992919921875 -0.126491999626159673519865123126 +0.154042994976043706722990123126 0.016448199748992919921875 -0.126491999626159673519865123126 +0.154087203741073597296207253748 -0.553151392936706565173210492503 0.174013799428939824887052623126 +0.154087203741073597296207253748 0.553151392936706565173210492503 0.174013799428939824887052623126 +0.154155148565769201107755748126 -0.41520689427852630615234375 0.079620301723480224609375 +0.154155148565769201107755748126 0.41520689427852630615234375 0.079620301723480224609375 +0.154270746558904631173803068123 -0.251600003242492653576789507497 -0.79711894690990447998046875 +0.154270746558904631173803068123 0.251600003242492653576789507497 -0.79711894690990447998046875 +0.154305994510650634765625 -0.2762059867382049560546875 -0.38716900348663330078125 +0.154305994510650634765625 0.2762059867382049560546875 -0.38716900348663330078125 +0.15431649982929229736328125 -0.2596270143985748291015625 0.398472487926483154296875 +0.15431649982929229736328125 0.2596270143985748291015625 0.398472487926483154296875 +0.15433299541473388671875 -0.122184598445892342311047684689 -0.0353868007659912109375 +0.15433299541473388671875 0.122184598445892342311047684689 -0.0353868007659912109375 +0.154333205521106714419588001874 -0.474995243549346912725894753748 0.808121305704116776880141514994 +0.154333205521106714419588001874 0.474995243549346912725894753748 0.808121305704116776880141514994 +0.154364843666553508416683371252 -0.186420151591300958804353626874 -0.379366654157638538702457253748 +0.154364843666553508416683371252 0.186420151591300958804353626874 -0.379366654157638538702457253748 +0.15439879894256591796875 -0.0533020019531250041633363423443 0.365129995346069380346420985006 +0.15439879894256591796875 0.0533020019531250041633363423443 0.365129995346069380346420985006 +0.15442240238189697265625 -0.783540821075439541942841970013 0.0470872014760971083213725307814 +0.15442240238189697265625 0.783540821075439541942841970013 0.0470872014760971083213725307814 +0.1545085012912750244140625 -0.4755280017852783203125 0 +0.1545085012912750244140625 0.4755280017852783203125 0 +0.154566597938537608758480246252 0 -0.126921999454498307668970369377 +0.1545764990150928497314453125 0 0.7338982522487640380859375 +0.154596401751041390149055132497 -0.0547512009739875779579243442186 -0.30919630825519561767578125 +0.154596401751041390149055132497 0.0547512009739875779579243442186 -0.30919630825519561767578125 +0.154630698263645172119140625 -0.226592093706130953689736884371 -0.217359802126884438244758257497 +0.154630698263645172119140625 0.226592093706130953689736884371 -0.217359802126884438244758257497 +0.154753197729587538278295255623 -0.112433303892612454499833063437 -0.673357284069061257092414507497 +0.154753197729587538278295255623 0.112433303892612454499833063437 -0.673357284069061257092414507497 +0.154839299619197845458984375 -0.0223718008026480702499227959379 -0.527280050516128584447983485006 +0.154839299619197845458984375 0.0223718008026480702499227959379 -0.527280050516128584447983485006 +0.154858195781707758120759876874 -0.112509602308273309878572376874 -0.230998796224594099557592130623 +0.154858195781707758120759876874 0.112509602308273309878572376874 -0.230998796224594099557592130623 +0.154865598678588872738615123126 -0.132935595512390147820980246252 0.344012808799743663445980246252 +0.154865598678588872738615123126 0.132935595512390147820980246252 0.344012808799743663445980246252 +0.154889695346355438232421875 -0.170181903243064869268863503748 -0.263718006014823869165297764994 +0.154889695346355438232421875 0.170181903243064869268863503748 -0.263718006014823869165297764994 +0.1549742519855499267578125 -0.18442775309085845947265625 0.066853247582912445068359375 +0.1549742519855499267578125 0.18442775309085845947265625 0.066853247582912445068359375 +0.15511749684810638427734375 -0.0921282470226287841796875 -0.17306350171566009521484375 +0.15511749684810638427734375 0.0921282470226287841796875 -0.17306350171566009521484375 +0.155139601230621343441740123126 -0.0854264020919799915709802462516 0.0929196000099182239928552462516 +0.155139601230621343441740123126 0.0854264020919799915709802462516 0.0929196000099182239928552462516 +0.15518574416637420654296875 -0.03069950081408023834228515625 -0.19358424842357635498046875 +0.15518574416637420654296875 0.03069950081408023834228515625 -0.19358424842357635498046875 +0.155213856697082541735710492503 -0.477692043781280550884815738755 -0.224095855653285991326839621252 +0.155213856697082541735710492503 0.477692043781280550884815738755 -0.224095855653285991326839621252 +0.155234298855066316091821931877 -0.477753263711929332391292746252 -0.412497156858444236071647992503 +0.155234298855066316091821931877 0.477753263711929332391292746252 -0.412497156858444236071647992503 +0.155325996875762956106470369377 -0.112850403785705571957365123126 0.05602359771728515625 +0.155325996875762956106470369377 0.112850403785705571957365123126 0.05602359771728515625 +0.155333995819091796875 -0.26265799999237060546875 0.95230400562286376953125 +0.155333995819091796875 0.26265799999237060546875 0.95230400562286376953125 +0.155564450472593290841771818123 -0.816555917263031005859375 -0.1775845475494861602783203125 +0.155564450472593290841771818123 0.816555917263031005859375 -0.1775845475494861602783203125 +0.155676400661468511410490123126 -0.0806698024272918812194177462516 -0.0962145984172821100433026231258 +0.155676400661468511410490123126 0.0806698024272918812194177462516 -0.0962145984172821100433026231258 +0.155901202559471124819978626874 -0.662338590621948219983039507497 0.164324302971363050973607755623 +0.155901202559471124819978626874 0.662338590621948219983039507497 0.164324302971363050973607755623 +0.15603674948215484619140625 -0.15390925109386444091796875 -0.120268248021602630615234375 +0.15603674948215484619140625 0.15390925109386444091796875 -0.120268248021602630615234375 +0.156040850281715381964176003748 -0.0274603012949228252048694542964 -0.312085205316543545794871761245 +0.156040850281715381964176003748 0.0274603012949228252048694542964 -0.312085205316543545794871761245 +0.1560654938220977783203125 -0.4135715067386627197265625 -0.23367150127887725830078125 +0.1560654938220977783203125 0.4135715067386627197265625 -0.23367150127887725830078125 +0.156109043955802911929353626874 -0.421222499012947115826221988755 0.0264897007495164885093608120314 +0.156109043955802911929353626874 0.421222499012947115826221988755 0.0264897007495164885093608120314 +0.156241202354431174548210492503 -0.0476303994655609130859375 -0.365129995346069380346420985006 +0.156241202354431174548210492503 0.0476303994655609130859375 -0.365129995346069380346420985006 +0.1562705934047698974609375 -0.420808500051498446392628238755 -0.031618349254131317138671875 +0.1562705934047698974609375 0.420808500051498446392628238755 -0.031618349254131317138671875 +0.156279204785823799817023882497 -0.0563997022807598072380308451557 -0.679996788501739501953125 +0.156279204785823799817023882497 0.0563997022807598072380308451557 -0.679996788501739501953125 +0.156306302547454839535490123126 -0.04005660116672515869140625 0.25291049480438232421875 +0.156306302547454839535490123126 0.04005660116672515869140625 0.25291049480438232421875 +0.15630899369716644287109375 -0.113564752042293548583984375 0.15865249931812286376953125 +0.15630899369716644287109375 0.113564752042293548583984375 0.15865249931812286376953125 +0.1563292443752288818359375 -0.010325250215828418731689453125 -0.19481949508190155029296875 +0.1563292443752288818359375 0.010325250215828418731689453125 -0.19481949508190155029296875 +0.156410396099090576171875 -0.123847997188568120785490123126 0.0140525996685028076171875 +0.156410396099090576171875 0.123847997188568120785490123126 0.0140525996685028076171875 +0.156421601772308349609375 -0.308721590042114302221420985006 0.721264791488647527550881477509 +0.156421601772308349609375 0.308721590042114302221420985006 0.721264791488647527550881477509 +0.15643499791622161865234375 -0.987688004970550537109375 0 +0.15643499791622161865234375 -0.3746919929981231689453125 0.29177749156951904296875 +0.15643499791622161865234375 0.3746919929981231689453125 0.29177749156951904296875 +0.15643499791622161865234375 0.987688004970550537109375 0 +0.156458997726440451891960492503 -0.0525318026542663588096537807814 0.112964594364166268092297684689 +0.156458997726440451891960492503 0.0525318026542663588096537807814 0.112964594364166268092297684689 +0.156523504853248590640291126874 0 -0.313050159811973538470653011245 +0.156523849070072162970035378748 -0.18400444090366363525390625 0.25326420366764068603515625 +0.156523849070072162970035378748 0.18400444090366363525390625 0.25326420366764068603515625 +0.156525601446628553903295255623 -0.29772679507732391357421875 -0.0967389464378356905838174384371 +0.156525601446628553903295255623 0.29772679507732391357421875 -0.0967389464378356905838174384371 +0.156607401371002208367855246252 -0.123836803436279299650557561563 -0.0117732003331184401084819057814 +0.156607401371002208367855246252 0.123836803436279299650557561563 -0.0117732003331184401084819057814 +0.156610202789306651727230246252 0 0.124391603469848635588057561563 +0.156621003150939963610710492503 -0.103593599796295177117855246252 0.0688347995281219510177450615629 +0.156621003150939963610710492503 0.103593599796295177117855246252 0.0688347995281219510177450615629 +0.156622004508972179070980246252 -0.30345880985260009765625 -0.208284401893615744860710492503 +0.156622004508972179070980246252 0.30345880985260009765625 -0.208284401893615744860710492503 +0.156749707460403425729467130623 -0.2557919919490814208984375 0 +0.156749707460403425729467130623 0.2557919919490814208984375 0 +0.156756596267223352603181751874 -0.674802911281585759972756477509 0.574515920877456731652443977509 +0.156756596267223352603181751874 0.674802911281585759972756477509 0.574515920877456731652443977509 +0.156788802146911598889289507497 0 -0.682215088605880648486845529987 +0.156826947629451735055639005623 -0.26065339148044586181640625 0.173104397952556610107421875 +0.156826947629451735055639005623 0.26065339148044586181640625 0.173104397952556610107421875 +0.15689074993133544921875 -0.1847209930419921875 -0.0613467507064342498779296875 +0.15689074993133544921875 0.1847209930419921875 -0.0613467507064342498779296875 +0.1568996012210845947265625 -0.204458105564117448293970369377 -0.485879912972450311858807481258 +0.1568996012210845947265625 0.204458105564117448293970369377 -0.485879912972450311858807481258 +0.156931400299072265625 -0.0936854004859924427428552462516 0.0812132000923156821547976846887 +0.156931400299072265625 0.0936854004859924427428552462516 0.0812132000923156821547976846887 +0.156946906447410605700554242503 -0.364560890197753950658920985006 0.380740261077880892681690738755 +0.156946906447410605700554242503 0.364560890197753950658920985006 0.380740261077880892681690738755 +0.1570470035076141357421875 -0.253173297643661476818977007497 0.035204999148845672607421875 +0.1570470035076141357421875 0.253173297643661476818977007497 0.035204999148845672607421875 +0.157053995132446305715845369377 -0.313536000251770030633480246252 0.192429196834564220086605246252 +0.157053995132446305715845369377 0.313536000251770030633480246252 0.192429196834564220086605246252 +0.15714800357818603515625 -0.376728796958923362048210492503 -0.688026380538940496300881477509 +0.15714800357818603515625 0.376728796958923362048210492503 -0.688026380538940496300881477509 +0.157185298204421980416967130623 -0.252053099870681751593082253748 -0.0419762983918189960808042826557 +0.157185298204421980416967130623 0.252053099870681751593082253748 -0.0419762983918189960808042826557 +0.157186400890350352899105246252 -0.662753582000732421875 -0.419583988189697276727230246252 +0.157186400890350352899105246252 0.662753582000732421875 -0.419583988189697276727230246252 +0.157214754819869989566072376874 -0.301933792233467057641860264994 0.0813599489629268646240234375 +0.157214754819869989566072376874 0.301933792233467057641860264994 0.0813599489629268646240234375 +0.157252395153045676501335492503 -0.114249598979949962274105246252 -0.0471029996871948283820863423443 +0.157252395153045676501335492503 0.114249598979949962274105246252 -0.0471029996871948283820863423443 +0.157253953814506519659488503748 -0.0465745024383068043083433451557 0.309195953607559192999332253748 +0.157253953814506519659488503748 0.0465745024383068043083433451557 0.309195953607559192999332253748 +0.157281150668859476260408314374 -0.484069964289665255474659488755 0.404275307059288047106804242503 +0.157281150668859476260408314374 0.484069964289665255474659488755 0.404275307059288047106804242503 +0.15728400647640228271484375 -0.1627635061740875244140625 0.445836007595062255859375 +0.15728400647640228271484375 0.1627635061740875244140625 0.445836007595062255859375 +0.15736520290374755859375 -0.0162696003913879415347931711722 -0.36738479137420654296875 +0.15736520290374755859375 0.0162696003913879415347931711722 -0.36738479137420654296875 +0.157420796155929548776342130623 -0.163530904054641712530582253748 -0.196153807640075672491519753748 +0.157420796155929548776342130623 0.163530904054641712530582253748 -0.196153807640075672491519753748 +0.157455396652221690789730246252 -0.0494641989469528225997763115629 -0.112964797019958498869307561563 +0.157455396652221690789730246252 0.0494641989469528225997763115629 -0.112964797019958498869307561563 +0.157510203123092634713842130623 -0.237033301591873163394197376874 0.0948983967304229680816973768742 +0.157510203123092634713842130623 0.237033301591873163394197376874 0.0948983967304229680816973768742 +0.157514405250549299752904630623 -0.564970207214355424341079014994 -0.126482400298118580206363503748 +0.157514405250549299752904630623 0.564970207214355424341079014994 -0.126482400298118580206363503748 +0.1575659997761249542236328125 -0.4849289953708648681640625 -0.5500154793262481689453125 +0.1575659997761249542236328125 0.4849289953708648681640625 -0.5500154793262481689453125 +0.1576755009591579437255859375 -0.6448844969272613525390625 0.348944999277591705322265625 +0.1576755009591579437255859375 0.6448844969272613525390625 0.348944999277591705322265625 +0.157697098702192312069669810626 -0.598795226216316200940070757497 -0.582301831245422341076789507497 +0.157697098702192312069669810626 0.598795226216316200940070757497 -0.582301831245422341076789507497 +0.157719004154205311163394753748 0 0.255195593833923317639289507497 +0.15772140026092529296875 -0.485407197475433316302684261245 -0.3154428005218505859375 +0.15772140026092529296875 0.485407197475433316302684261245 -0.3154428005218505859375 +0.157731997966766374075220369377 -0.485456800460815462994190738755 0.615997600555419966283920985006 +0.157731997966766374075220369377 0.485456800460815462994190738755 0.615997600555419966283920985006 +0.157795007526874558889673494377 -0.340579238533973704949886496252 -0.402002698183059725689503238755 +0.157795007526874558889673494377 0.340579238533973704949886496252 -0.402002698183059725689503238755 +0.157800298929214460885717130623 -0.184855991601943964175447376874 0.656450188159942604748664507497 +0.157800298929214460885717130623 0.184855991601943964175447376874 0.656450188159942604748664507497 +0.158024704456329351254240123126 -0.292374005913734469341846988755 0.836387979984283491674545985006 +0.158024704456329351254240123126 0.292374005913734469341846988755 0.836387979984283491674545985006 +0.158077204227447531970085492503 -0.229781603813171392269865123126 0.286726403236389149054019753748 +0.158077204227447531970085492503 0.229781603813171392269865123126 0.286726403236389149054019753748 +0.158102099597454082147152121252 -0.486579591035842917712272992503 -0.740435385704040549548210492503 +0.158102099597454082147152121252 0.486579591035842917712272992503 -0.740435385704040549548210492503 +0.158114492893218994140625 -0.353550493717193603515625 -0.3162305057048797607421875 +0.158114492893218994140625 0.353550493717193603515625 -0.3162305057048797607421875 +0.158132398128509543688835492503 -0.0263309985399246236636994211722 0.119586205482482915707365123126 +0.158132398128509543688835492503 0.0263309985399246236636994211722 0.119586205482482915707365123126 +0.158202549815177923031583873126 -0.826234945654868990772001779987 -0.441369996964931454730418636245 +0.158202549815177923031583873126 0.826234945654868990772001779987 -0.441369996964931454730418636245 +0.1582782566547393798828125 -0.17425875365734100341796875 0.084153749048709869384765625 +0.1582782566547393798828125 0.17425875365734100341796875 0.084153749048709869384765625 +0.15835900604724884033203125 -0.1278004944324493408203125 0.145222246646881103515625 +0.15835900604724884033203125 0.1278004944324493408203125 0.145222246646881103515625 +0.15837524831295013427734375 -0.115065000951290130615234375 -0.15549050271511077880859375 +0.15837524831295013427734375 0.115065000951290130615234375 -0.15549050271511077880859375 +0.158393400907516468389957253748 -0.407382595539093006475894753748 -0.411036586761474587170539507497 +0.158393400907516468389957253748 0.407382595539093006475894753748 -0.411036586761474587170539507497 +0.158394502103328727038444867503 -0.249841897189617190289112613755 0.463670355081558238641292746252 +0.158394502103328727038444867503 0.249841897189617190289112613755 0.463670355081558238641292746252 +0.1584020517766475677490234375 -0.115084899961948386448717940311 -0.929604452848434403833266514994 +0.1584020517766475677490234375 0.115084899961948386448717940311 -0.929604452848434403833266514994 +0.158482199907302861996427623126 -0.171341103315353376901342130623 0.1884824931621551513671875 +0.158482199907302861996427623126 0.171341103315353376901342130623 0.1884824931621551513671875 +0.158633303642272932565404630623 -0.674702692031860284949118522491 -0.0980412960052490234375 +0.158633303642272932565404630623 -0.25478355586528778076171875 -0.180057504773139948062166126874 +0.158633303642272932565404630623 0.25478355586528778076171875 -0.180057504773139948062166126874 +0.158633303642272932565404630623 0.674702692031860284949118522491 -0.0980412960052490234375 +0.158651645481586445196597878748 -0.821646529436111383581931022491 0.1490840502083301544189453125 +0.158651645481586445196597878748 0.821646529436111383581931022491 0.1490840502083301544189453125 +0.15873999893665313720703125 -0.703978002071380615234375 0.6922550201416015625 +0.15873999893665313720703125 0.703978002071380615234375 0.6922550201416015625 +0.158806192874908436163394753748 -0.234834891557693464791967130623 -0.09814859926700592041015625 +0.158806192874908436163394753748 0.234834891557693464791967130623 -0.09814859926700592041015625 +0.158834397792816162109375 -0.0890717983245849637130575615629 -0.0826914012432098388671875 +0.158834397792816162109375 0.0890717983245849637130575615629 -0.0826914012432098388671875 +0.15889684855937957763671875 -0.31185209751129150390625 0 +0.15889684855937957763671875 0.31185209751129150390625 0 +0.158911597728729259149105246252 -0.0645045995712280328948651231258 0.102889597415924072265625 +0.158911597728729259149105246252 0.0645045995712280328948651231258 0.102889597415924072265625 +0.15898950397968292236328125 -0.58941976726055145263671875 -0.43566749989986419677734375 +0.15898950397968292236328125 0.58941976726055145263671875 -0.43566749989986419677734375 +0.1590390019118785858154296875 -0.6862822473049163818359375 0.25733850896358489990234375 +0.1590390019118785858154296875 0.6862822473049163818359375 0.25733850896358489990234375 +0.1590507030487060546875 -0.100241097807884219084151311563 0.233783107995986921823217130623 +0.1590507030487060546875 0.100241097807884219084151311563 0.233783107995986921823217130623 +0.159116399288177473581029630623 -0.568693184852600119860710492503 0.1061604022979736328125 +0.159116399288177473581029630623 0.568693184852600119860710492503 0.1061604022979736328125 +0.159123904258012788259790681877 -0.575226593017578169408920985006 0.257476051151752483026058371252 +0.159123904258012788259790681877 0.575226593017578169408920985006 0.257476051151752483026058371252 +0.159137299656867958752570757497 -0.308992949128150895532485264994 0.04121564887464046478271484375 +0.159137299656867958752570757497 0.308992949128150895532485264994 0.04121564887464046478271484375 +0.159236991405487054995759876874 -0.2317104041576385498046875 0.530050814151763916015625 +0.159236991405487054995759876874 0.2317104041576385498046875 0.530050814151763916015625 +0.15924920141696929931640625 -0.671641117334365822522102007497 0.496021735668182361944644753748 +0.15924920141696929931640625 0.671641117334365822522102007497 0.496021735668182361944644753748 +0.159253498911857582776008257497 -0.307770040631294206079360264994 -0.0491512000560760456413511576557 +0.159253498911857582776008257497 0.307770040631294206079360264994 -0.0491512000560760456413511576557 +0.15928675234317779541015625 -0.18948374688625335693359375 0.0349802486598491668701171875 +0.15928675234317779541015625 0.18948374688625335693359375 0.0349802486598491668701171875 +0.1592917554080486297607421875 -0.2998222410678863525390625 -0.66875477135181427001953125 +0.1592917554080486297607421875 0.2998222410678863525390625 -0.66875477135181427001953125 +0.159387600421905528680355246252 -0.181594002246856706106470369377 -0.318777608871460005346420985006 +0.159387600421905528680355246252 0.181594002246856706106470369377 -0.318777608871460005346420985006 +0.15948760509490966796875 -0.105825996398925786801115123126 -0.0580045998096466106086488423443 +0.15948760509490966796875 0.105825996398925786801115123126 -0.0580045998096466106086488423443 +0.159512996673583984375 0 0.19249825179576873779296875 +0.15954874455928802490234375 -0.0657159984111785888671875 0.1809022426605224609375 +0.15954874455928802490234375 0.0657159984111785888671875 0.1809022426605224609375 +0.159569297730922710076839621252 -0.491109287738800082134815738755 0.189338594675064114669638115629 +0.159569297730922710076839621252 0.491109287738800082134815738755 0.189338594675064114669638115629 +0.159583894908428169934211382497 -0.0462293989956378895134214701557 0.679996788501739501953125 +0.159583894908428169934211382497 0.0462293989956378895134214701557 0.679996788501739501953125 +0.1596271991729736328125 -0.661685609817504905016960492503 0.420346403121948264391960492503 +0.1596271991729736328125 0.661685609817504905016960492503 0.420346403121948264391960492503 +0.159667651355266587698267244377 -0.330655056238174427374332253748 -0.260141390562057484014957253748 +0.159667651355266587698267244377 0.330655056238174427374332253748 -0.260141390562057484014957253748 +0.159672097861766809634431751874 -0.491429388523101751129473768742 0.472230517864227261615184261245 +0.159672097861766809634431751874 0.491429388523101751129473768742 0.472230517864227261615184261245 +0.159702605009078985043302623126 -0.491522991657257046771434261245 0.304795217514038097039730246252 +0.159702605009078985043302623126 0.491522991657257046771434261245 0.304795217514038097039730246252 +0.159744192659854900018245871252 -0.418219998478889520843182481258 -0.319489499926567110943409488755 +0.159744192659854900018245871252 0.418219998478889520843182481258 -0.319489499926567110943409488755 +0.159793794900178892648412443123 -0.038608948700129985809326171875 -0.93566830456256866455078125 +0.159793794900178892648412443123 0.038608948700129985809326171875 -0.93566830456256866455078125 +0.15979699790477752685546875 -0.757929980754852294921875 -0.632461011409759521484375 +0.15979699790477752685546875 0.757929980754852294921875 -0.632461011409759521484375 +0.15985800325870513916015625 -0.4920007288455963134765625 0.54302926361560821533203125 +0.15985800325870513916015625 0.4920007288455963134765625 0.54302926361560821533203125 +0.159907801449298864193693248126 -0.211851903796195978335603626874 0.593336901068687416760383257497 +0.159907801449298864193693248126 0.211851903796195978335603626874 0.593336901068687416760383257497 +0.1599690020084381103515625 -0.065987996757030487060546875 0.984914004802703857421875 +0.1599690020084381103515625 0.065987996757030487060546875 0.984914004802703857421875 +0.159976196289062511102230246252 -0.0359185993671417222450337192186 -0.114531600475311287623547684689 +0.159976196289062511102230246252 0.0359185993671417222450337192186 -0.114531600475311287623547684689 +0.160048401355743413754240123126 -0.0678233981132507351974325615629 -0.0989166021347046009459802462516 +0.160048401355743413754240123126 0.0678233981132507351974325615629 -0.0989166021347046009459802462516 +0.160076698660850502697883257497 -0.676475095748901300574118522491 0.0822016999125480540833166287484 +0.160076698660850502697883257497 0.676475095748901300574118522491 0.0822016999125480540833166287484 +0.16014100611209869384765625 -0.075313501060009002685546875 -0.17658625543117523193359375 +0.16014100611209869384765625 0.075313501060009002685546875 -0.17658625543117523193359375 +0.160197794437408447265625 -0.116390001773834239617855246252 0.0281071990728378323654013115629 +0.160197794437408447265625 0.116390001773834239617855246252 0.0281071990728378323654013115629 +0.16021025180816650390625 -0.189662754535675048828125 -0.0293374992907047271728515625 +0.16021025180816650390625 0.189662754535675048828125 -0.0293374992907047271728515625 +0.16025699675083160400390625 -0.361586987972259521484375 -0.918461978435516357421875 +0.16025699675083160400390625 0.361586987972259521484375 -0.918461978435516357421875 +0.160322847962379472219751619377 -0.30037455260753631591796875 0.294231140613555930407585492503 +0.160322847962379472219751619377 0.30037455260753631591796875 0.294231140613555930407585492503 +0.160334998369216913394197376874 -0.803632521629333518298210492503 0.37211130559444427490234375 +0.160334998369216913394197376874 0.803632521629333518298210492503 0.37211130559444427490234375 +0.160378195345401763916015625 -0.153643047809600835629240123126 -0.3913726508617401123046875 +0.160378195345401763916015625 0.153643047809600835629240123126 -0.3913726508617401123046875 +0.1604077517986297607421875 -0.16337375342845916748046875 0.100391246378421783447265625 +0.1604077517986297607421875 0.16337375342845916748046875 0.100391246378421783447265625 +0.1604090034961700439453125 -0.066395498812198638916015625 0.468892991542816162109375 +0.1604090034961700439453125 0.066395498812198638916015625 0.468892991542816162109375 +0.16045470535755157470703125 -0.846667814254760786596420985006 0.25963018834590911865234375 +0.16045470535755157470703125 0.846667814254760786596420985006 0.25963018834590911865234375 +0.160484094917774183786107755623 -0.145456850528717041015625 -0.274930942058563221319644753748 +0.160484094917774183786107755623 0.145456850528717041015625 -0.274930942058563221319644753748 +0.160676801204681418688835492503 -0.116737794876098643914730246252 -0.0235637992620468146587331403907 +0.160676801204681418688835492503 0.116737794876098643914730246252 -0.0235637992620468146587331403907 +0.160940252244472503662109375 -0.333345003426074981689453125 0.6522877514362335205078125 +0.160940252244472503662109375 0.333345003426074981689453125 0.6522877514362335205078125 +0.160946202278137218133480246252 -0.0968872010707855224609375 -0.068623602390289306640625 +0.160946202278137218133480246252 0.0968872010707855224609375 -0.068623602390289306640625 +0.16095699369907379150390625 -0.033313751220703125 0.1883692443370819091796875 +0.16095699369907379150390625 0.033313751220703125 0.1883692443370819091796875 +0.160965351760387398449836382497 -0.116947947442531577366686690311 0.287946739792823758197215511245 +0.160965351760387398449836382497 0.116947947442531577366686690311 0.287946739792823758197215511245 +0.1610549986362457275390625 -0.4299235045909881591796875 0.19805850088596343994140625 +0.1610549986362457275390625 0.4299235045909881591796875 0.19805850088596343994140625 +0.161084103584289539679019753748 -0.09229619801044464111328125 -0.235655093193054193667634876874 +0.161084103584289539679019753748 0.09229619801044464111328125 -0.235655093193054193667634876874 +0.1611340045928955078125 -0.247672009468078629934595369377 -0.269619202613830599712940738755 +0.1611340045928955078125 0.247672009468078629934595369377 -0.269619202613830599712940738755 +0.161227208375930769479467130623 -0.5763924121856689453125 -0.0421577990055084228515625 +0.161227208375930769479467130623 0.5763924121856689453125 -0.0421577990055084228515625 +0.161341595649719254934595369377 0 0.366017603874206565173210492503 +0.16136150062084197998046875 -0.175154745578765869140625 -0.0760477483272552490234375 +0.16136150062084197998046875 0.175154745578765869140625 -0.0760477483272552490234375 +0.161441600322723394222990123126 -0.183116805553436290399105246252 -0.761843204498291015625 +0.161441600322723394222990123126 0.183116805553436290399105246252 -0.761843204498291015625 +0.161475008726120000668302623126 -0.224830198287963856085269753748 0.115659901499748224429353626874 +0.161475008726120000668302623126 0.224830198287963856085269753748 0.115659901499748224429353626874 +0.16147549450397491455078125 -0.1386842429637908935546875 0.13111950457096099853515625 +0.16147549450397491455078125 0.1386842429637908935546875 0.13111950457096099853515625 +0.16148300468921661376953125 -0.1514347493648529052734375 0.1161497533321380615234375 +0.16148300468921661376953125 0.1514347493648529052734375 0.1161497533321380615234375 +0.161694395542144792043970369377 -0.022076599299907684326171875 -0.115618205070495611019865123126 +0.161694395542144792043970369377 0.022076599299907684326171875 -0.115618205070495611019865123126 +0.161724007129669195004240123126 -0.576712810993194602282585492503 0.0353196009993553133865518134371 +0.161724007129669195004240123126 0.576712810993194602282585492503 0.0353196009993553133865518134371 +0.161760605871677398681640625 -0.378078308701515208856136496252 -0.182730156183242814504907869377 +0.161760605871677398681640625 0.378078308701515208856136496252 -0.182730156183242814504907869377 +0.161780101060867292916967130623 -0.1903721988201141357421875 -0.166089302301406865902677623126 +0.161780101060867292916967130623 0.1903721988201141357421875 -0.166089302301406865902677623126 +0.16180360317230224609375 -0.117556595802307137232922684689 0 +0.16180360317230224609375 0.117556595802307137232922684689 0 +0.161835598945617692434595369377 -0.33921039104461669921875 -0.136914801597595225945980246252 +0.161835598945617692434595369377 0.33921039104461669921875 -0.136914801597595225945980246252 +0.161854195594787614309595369377 -0.0392821997404098552375550923443 0.110725605487823494654797684689 +0.161854195594787614309595369377 0.0392821997404098552375550923443 0.110725605487823494654797684689 +0.161867797374725341796875 -0.0732050001621246393401776231258 0.0918685972690582303146200615629 +0.161867797374725341796875 0.0732050001621246393401776231258 0.0918685972690582303146200615629 +0.161878395080566422903345369377 -0.0131975993514060977590540701954 0.116709995269775393400557561563 +0.161878395080566422903345369377 0.0131975993514060977590540701954 0.116709995269775393400557561563 +0.16189849376678466796875 -0.13796325027942657470703125 -0.13135825097560882568359375 +0.16189849376678466796875 0.13796325027942657470703125 -0.13135825097560882568359375 +0.161902956664562225341796875 -0.14528195559978485107421875 0.50515408813953399658203125 +0.161902956664562225341796875 0.14528195559978485107421875 0.50515408813953399658203125 +0.162000596523284912109375 -0.369271194934844948498664507497 0.444291615486144986224559261245 +0.162000596523284912109375 0.369271194934844948498664507497 0.444291615486144986224559261245 +0.162100803852081282174779630623 -0.266370606422424327508480246252 -0.512610590457916237561164507497 +0.162100803852081282174779630623 0.266370606422424327508480246252 -0.512610590457916237561164507497 +0.162191247940063482113615123126 -0.2073951065540313720703125 0.364940097928047213482471988755 +0.162191247940063482113615123126 0.2073951065540313720703125 0.364940097928047213482471988755 +0.162216903269290918521150501874 -0.499261504411697421002003238755 0.731042075157165571752670985006 +0.162216903269290918521150501874 0.499261504411697421002003238755 0.731042075157165571752670985006 +0.1623622477054595947265625 -0.19010125100612640380859375 0 +0.1623622477054595947265625 0.19010125100612640380859375 0 +0.1623634994029998779296875 -0.393215000629425048828125 0.2627165019512176513671875 +0.1623634994029998779296875 0.393215000629425048828125 0.2627165019512176513671875 +0.162426400184631364309595369377 -0.712802410125732421875 -0.324853610992431651727230246252 +0.162426400184631364309595369377 0.712802410125732421875 -0.324853610992431651727230246252 +0.1624560058116912841796875 -0.4999949932098388671875 0.85065400600433349609375 +0.1624560058116912841796875 0.4999949932098388671875 0.85065400600433349609375 +0.162465906143188482113615123126 -0.184635597467422474249332253748 0.171797704696655256784154630623 +0.162465906143188482113615123126 0.184635597467422474249332253748 0.171797704696655256784154630623 +0.16253824532032012939453125 -0.201058903336524957827791126874 0.235916802287101740054353626874 +0.16253824532032012939453125 0.201058903336524957827791126874 0.235916802287101740054353626874 +0.162586794048547728097631193123 -0.877683150768279962683493522491 -0.325172653794288613049445757497 +0.162586794048547728097631193123 0.877683150768279962683493522491 -0.325172653794288613049445757497 +0.1625874042510986328125 -0.00824960023164749214896751539072 -0.1161777973175048828125 +0.1625874042510986328125 0.00824960023164749214896751539072 -0.1161777973175048828125 +0.162632049620151514224275501874 -0.204289743304252618960603626874 -0.233059051632881153448551003748 +0.162632049620151514224275501874 0.204289743304252618960603626874 -0.233059051632881153448551003748 +0.162665104866027837582365123126 -0.142865699529647810495092130623 -0.207676506042480474301115123126 +0.162665104866027837582365123126 0.142865699529647810495092130623 -0.207676506042480474301115123126 +0.16272079944610595703125 -0.0794315993785858209808026231258 0.356668806076049837994190738755 +0.16272079944610595703125 0.0794315993785858209808026231258 0.356668806076049837994190738755 +0.162761203944683074951171875 -0.407362210750579822882144753748 -0.545495295524597079150908029987 +0.162761203944683074951171875 0.407362210750579822882144753748 -0.545495295524597079150908029987 +0.162809993326663987600610994377 -0.118288354575634011012219559689 0.402493062615394581182926003748 +0.162809993326663987600610994377 0.118288354575634011012219559689 0.402493062615394581182926003748 +0.162811803817749040090845369377 -0.26450054347515106201171875 -0.32562540471553802490234375 +0.162811803817749040090845369377 0.26450054347515106201171875 -0.32562540471553802490234375 +0.16284249722957611083984375 -0.2855679988861083984375 0.3767404854297637939453125 +0.16284249722957611083984375 0.2855679988861083984375 0.3767404854297637939453125 +0.162881803512573253289730246252 -0.108129596710205083676115123126 0.0421608000993728693206463731258 +0.162881803512573253289730246252 0.108129596710205083676115123126 0.0421608000993728693206463731258 +0.162908855080604569876001619377 -0.588144057989120505602897992503 -0.223713757097721094302400501874 +0.162908855080604569876001619377 0.588144057989120505602897992503 -0.223713757097721094302400501874 +0.162979604303836816958650501874 0 0.309738105535507179943977007497 +0.163080000877380393298210492503 -0.158708000183105490954460492503 0.766952800750732466283920985006 +0.163080000877380393298210492503 0.158708000183105490954460492503 0.766952800750732466283920985006 +0.163086301088333135433927623126 -0.11848859488964080810546875 0.877133685350418135229233485006 +0.163086301088333135433927623126 0.11848859488964080810546875 0.877133685350418135229233485006 +0.163156397640705108642578125 -0.502139535546302862023537727509 -0.1540648937225341796875 +0.163156397640705108642578125 0.502139535546302862023537727509 -0.1540648937225341796875 +0.16315950453281402587890625 -0.1185410022735595703125 -0.45752251148223876953125 +0.16315950453281402587890625 0.1185410022735595703125 -0.45752251148223876953125 +0.163311348110437376535131193123 -0.832024177908897377697883257497 -0.05971249751746654510498046875 +0.163311348110437376535131193123 0.832024177908897377697883257497 -0.05971249751746654510498046875 +0.163345496356487290823267244377 -0.266400003433227561266960492503 -0.8440082967281341552734375 +0.163345496356487290823267244377 0.266400003433227561266960492503 -0.8440082967281341552734375 +0.163406600058078749215795255623 -0.290625309944152809826789507497 0.106466847658157337530582253748 +0.163406600058078749215795255623 0.290625309944152809826789507497 0.106466847658157337530582253748 +0.163412201404571522100894753748 -0.680659019947051913135283029987 0 +0.163412201404571522100894753748 0.680659019947051913135283029987 0 +0.163449445366859430484041126874 -0.0299718014895915992046315778907 0.418193560838699351922542746252 +0.163449445366859430484041126874 0.0299718014895915992046315778907 0.418193560838699351922542746252 +0.1634725034236907958984375 -0.2426010072231292724609375 -0.4054889976978302001953125 +0.1634725034236907958984375 0.2426010072231292724609375 -0.4054889976978302001953125 +0.163486003875732421875 -0.34634840488433837890625 0.115391194820404052734375 +0.163486003875732421875 0.34634840488433837890625 0.115391194820404052734375 +0.163548354804515821969701505623 -0.2861320078372955322265625 -0.117815248668193803260884067186 +0.163548354804515821969701505623 0.2861320078372955322265625 -0.117815248668193803260884067186 +0.163570395112037636486945757497 -0.596845185756683327404914507497 -0.327140101790428128314403011245 +0.163570395112037636486945757497 0.596845185756683327404914507497 -0.327140101790428128314403011245 +0.16358484327793121337890625 -0.0861692011356353787521200615629 0.623149150609970114977897992503 +0.16358484327793121337890625 0.0861692011356353787521200615629 0.623149150609970114977897992503 +0.16361175477504730224609375 -0.70134674012660980224609375 -0.209389507770538330078125 +0.16361175477504730224609375 0.70134674012660980224609375 -0.209389507770538330078125 +0.163654398918151866570980246252 -0.0546523988246917780120526231258 -0.101145195960998537931807561563 +0.163654398918151866570980246252 0.0546523988246917780120526231258 -0.101145195960998537931807561563 +0.1637670993804931640625 -0.234280207753181451968416126874 -0.638978201150894098425681022491 +0.1637670993804931640625 0.234280207753181451968416126874 -0.638978201150894098425681022491 +0.163784599304199224301115123126 -0.0763432025909423911391726846887 -0.0857105970382690540709802462516 +0.163784599304199224301115123126 0.0763432025909423911391726846887 -0.0857105970382690540709802462516 +0.163792756199836742059261496252 -0.0366112988442182582526918110943 0.523766645789146445544304242503 +0.163792756199836742059261496252 0.0366112988442182582526918110943 0.523766645789146445544304242503 +0.1638967990875244140625 -0.109020996093750002775557561563 -0.0353868007659912109375 +0.1638967990875244140625 0.109020996093750002775557561563 -0.0353868007659912109375 +0.163905304670333845651342130623 -0.244869607686996448858707253748 0.0563373014330863924881143134371 +0.163905304670333845651342130623 0.244869607686996448858707253748 0.0563373014330863924881143134371 +0.163928407430648792608707253748 -0.223047602176666248663394753748 -0.115660196542739859837389815311 +0.163928407430648792608707253748 0.223047602176666248663394753748 -0.115660196542739859837389815311 +0.163957405090332047903345369377 -0.0816565990447998130141726846887 0.0803128004074096790709802462516 +0.163957405090332047903345369377 0.0816565990447998130141726846887 0.0803128004074096790709802462516 +0.1639595925807952880859375 0 0.577163386344909601355368522491 +0.163980400562286382504240123126 -0.159841597080230712890625 0.327965211868286143914730246252 +0.163980400562286382504240123126 0.159841597080230712890625 0.327965211868286143914730246252 +0.16399849951267242431640625 -0.392854988574981689453125 -0.262239992618560791015625 +0.16399849951267242431640625 0.392854988574981689453125 -0.262239992618560791015625 +0.1640014946460723876953125 -0.18132449686527252197265625 0.0522004999220371246337890625 +0.1640014946460723876953125 0.18132449686527252197265625 0.0522004999220371246337890625 +0.164073802530765533447265625 -0.832512122392654374536391514994 0.0500301515683531719536070170307 +0.164073802530765533447265625 0.832512122392654374536391514994 0.0500301515683531719536070170307 +0.16421274840831756591796875 -0.081381998956203460693359375 0.17003275454044342041015625 +0.16421274840831756591796875 0.081381998956203460693359375 0.17003275454044342041015625 +0.16434399783611297607421875 -0.0581127516925334930419921875 -0.1792037487030029296875 +0.16434399783611297607421875 0.0581127516925334930419921875 -0.1792037487030029296875 +0.164390194416046159231470369377 -0.0992878019809722983657351846887 0.0558372020721435574630575615629 +0.164390194416046159231470369377 0.0992878019809722983657351846887 0.0558372020721435574630575615629 +0.16441619396209716796875 -0.119455200433731076326004938437 0.564533400535583429480368522491 +0.16441619396209716796875 0.119455200433731076326004938437 0.564533400535583429480368522491 +0.16445159912109375 -0.2111940085887908935546875 0.135472503304481489694310880623 +0.16445159912109375 0.2111940085887908935546875 0.135472503304481489694310880623 +0.164523601531982421875 -0.0519779980182647760589276231258 0.101144802570343028680355246252 +0.164523601531982421875 0.0519779980182647760589276231258 0.101144802570343028680355246252 +0.16453349590301513671875 -0.243650400638580316714509876874 -0.0596924990415573092361611884371 +0.16453349590301513671875 0.243650400638580316714509876874 -0.0596924990415573092361611884371 +0.16454650461673736572265625 -0.4396710097789764404296875 -0.17208699882030487060546875 +0.16454650461673736572265625 0.4396710097789764404296875 -0.17208699882030487060546875 +0.164612400531768815481470369377 -0.248915195465087890625 0.266353201866149913445980246252 +0.164612400531768815481470369377 0.248915195465087890625 0.266353201866149913445980246252 +0.164612406492233270816072376874 -0.119596204161643973606921065311 -0.564446389675140380859375 +0.164612406492233270816072376874 0.119596204161643973606921065311 -0.564446389675140380859375 +0.164687895774841303042634876874 -0.333689865469932567254573996252 -0.532943469285965032433693977509 +0.164687895774841303042634876874 0.333689865469932567254573996252 -0.532943469285965032433693977509 +0.16470849514007568359375 -0.16522024571895599365234375 -0.089851997792720794677734375 +0.16470849514007568359375 0.16522024571895599365234375 -0.089851997792720794677734375 +0.164715300500392930471704744377 -0.86458861827850341796875 -0.188030697405338287353515625 +0.164715300500392930471704744377 0.86458861827850341796875 -0.188030697405338287353515625 +0.164813345670700078793302623126 -0.366930213570594798699886496252 0.51058669388294219970703125 +0.164813345670700078793302623126 0.366930213570594798699886496252 0.51058669388294219970703125 +0.16481550037860870361328125 -0.0993359982967376708984375 -0.15958750247955322265625 +0.16481550037860870361328125 0.0993359982967376708984375 -0.15958750247955322265625 +0.164830045402050012759431751874 -0.389218059182167064324886496252 0.15440310537815093994140625 +0.164830045402050012759431751874 0.389218059182167064324886496252 0.15440310537815093994140625 +0.164836001396179210320980246252 0 0.113265597820281990748547684689 +0.164881598949432384149105246252 0 0.782824802398681685033920985006 +0.164887250959873221667351117503 -0.389930751919746410028011496252 0.351093062758445761950554242503 +0.164887250959873221667351117503 0.389930751919746410028011496252 0.351093062758445761950554242503 +0.164910292625427251644865123126 -0.060109801590442657470703125 0.24329280853271484375 +0.164910292625427251644865123126 0.060109801590442657470703125 0.24329280853271484375 +0.16500270366668701171875 -0.11988119781017303466796875 0.220005905628204351254240123126 +0.16500270366668701171875 0.11988119781017303466796875 0.220005905628204351254240123126 +0.165155196189880393298210492503 -0.0896511971950531005859375 0.0684571981430053683181924384371 +0.165155196189880393298210492503 0.0896511971950531005859375 0.0684571981430053683181924384371 +0.165160802006721479928685880623 -0.119994704425334927644364313437 -0.284294140338897660669204014994 +0.165160802006721479928685880623 0.119994704425334927644364313437 -0.284294140338897660669204014994 +0.165177655220031749383480246252 -0.50836776196956634521484375 0.129533249139785783254907869377 +0.165177655220031749383480246252 0.50836776196956634521484375 0.129533249139785783254907869377 +0.165267598628997813836605246252 -0.153071200847625737972990123126 -0.330538797378540083471420985006 +0.165267598628997813836605246252 0.153071200847625737972990123126 -0.330538797378540083471420985006 +0.165391103923320764712556751874 -0.357840716838836669921875 0.578442895412444979541533029987 +0.165391103923320764712556751874 0.357840716838836669921875 0.578442895412444979541533029987 +0.165465296059846861398412443123 -0.712291961908340431897102007497 0.606433472037315346447883257497 +0.165465296059846861398412443123 0.712291961908340431897102007497 0.606433472037315346447883257497 +0.165542644262313853875667746252 -0.509496000409126348351662727509 0.368116447329521201403679242503 +0.165542644262313853875667746252 0.509496000409126348351662727509 0.368116447329521201403679242503 +0.165556940436363236868189119377 -0.173795042932033544369474498126 -0.604057985544204756322983485006 +0.165556940436363236868189119377 0.173795042932033544369474498126 -0.604057985544204756322983485006 +0.165680998563766473941072376874 -0.196800899505615217721654630623 0.154335004091262800729467130623 +0.165680998563766473941072376874 0.196800899505615217721654630623 0.154335004091262800729467130623 +0.16570675373077392578125 -0.181989252567291259765625 -0.0438307486474514007568359375 +0.16570675373077392578125 0.181989252567291259765625 -0.0438307486474514007568359375 +0.1658069975674152374267578125 -0.1204642541706562042236328125 -0.7214542329311370849609375 +0.1658069975674152374267578125 0.1204642541706562042236328125 -0.7214542329311370849609375 +0.165831005573272710629240123126 -0.510383999347686745373664507497 0.2683289945125579833984375 +0.165831005573272710629240123126 0.510383999347686745373664507497 0.2683289945125579833984375 +0.166120398044586198293970369377 -0.110483205318450933285490123126 0.0140525996685028076171875 +0.166120398044586198293970369377 0.110483205318450933285490123126 0.0140525996685028076171875 +0.166151595115661632195980246252 -0.0263496011495590216899831403907 0.108163404464721682463057561563 +0.166151595115661632195980246252 0.0263496011495590216899831403907 0.108163404464721682463057561563 +0.166170799732208274157585492503 -0.110673797130584727899105246252 -0.0117732003331184401084819057814 +0.166170799732208274157585492503 0.110673797130584727899105246252 -0.0117732003331184401084819057814 +0.1661979518830776214599609375 -0.328016689419746376721320757497 0.766343840956687949450554242503 +0.1661979518830776214599609375 0.328016689419746376721320757497 0.766343840956687949450554242503 +0.166213202476501481497095369377 -0.100840997695922862664730246252 -0.0469498008489608806281800923443 +0.166213202476501481497095369377 0.100840997695922862664730246252 -0.0469498008489608806281800923443 +0.166291205585002904721036998126 -0.32007510960102081298828125 0.26907075941562652587890625 +0.166291205585002904721036998126 0.32007510960102081298828125 0.26907075941562652587890625 +0.166426002979278564453125 -0.0844716012477874783614950615629 -0.0718815982341766412933026231258 +0.166426002979278564453125 0.0844716012477874783614950615629 -0.0718815982341766412933026231258 +0.166470605134963978155582253748 -0.0716019004583358792404013115629 -0.239083206653594948498664507497 +0.166470605134963978155582253748 0.0716019004583358792404013115629 -0.239083206653594948498664507497 +0.166477000713348394222990123126 -0.0412198007106781005859375 -0.102889800071716316920422684689 +0.166477000713348394222990123126 0.0412198007106781005859375 -0.102889800071716316920422684689 +0.1665000021457672119140625 -0.07980500161647796630859375 -0.464659988880157470703125 +0.1665000021457672119140625 0.07980500161647796630859375 -0.464659988880157470703125 +0.166528999805450439453125 -0.869720995426177978515625 -0.4645999968051910400390625 +0.166528999805450439453125 0.869720995426177978515625 -0.4645999968051910400390625 +0.166639196872711198293970369377 -0.353903603553771983758480246252 -0.0835691988468170166015625 +0.166639196872711198293970369377 0.353903603553771983758480246252 -0.0835691988468170166015625 +0.16669400036334991455078125 -0.121108748018741607666015625 -0.14158324897289276123046875 +0.16669400036334991455078125 0.121108748018741607666015625 -0.14158324897289276123046875 +0.16673900187015533447265625 -0.1211419999599456787109375 -0.97853100299835205078125 +0.16673900187015533447265625 0.1211419999599456787109375 -0.97853100299835205078125 +0.166803854703903187139957253748 -0.308617006242275226934879128748 0.882853978872299105518095529987 +0.166803854703903187139957253748 0.308617006242275226934879128748 0.882853978872299105518095529987 +0.166869199275970464535490123126 -0.356696796417236339227230246252 0.0701572000980377197265625 +0.166869199275970464535490123126 0.356696796417236339227230246252 0.0701572000980377197265625 +0.166885549575090413876310435626 -0.513611790537834123071547764994 -0.781570684909820512231704014994 +0.166885549575090413876310435626 0.513611790537834123071547764994 -0.781570684909820512231704014994 +0.166927804052829753533870871252 -0.599247342348098732678352007497 0.188514949381351465396150501874 +0.166927804052829753533870871252 0.599247342348098732678352007497 0.188514949381351465396150501874 +0.166969753801822662353515625 -0.400274346768856037481754128748 -0.731028029322624228747429242503 +0.166969753801822662353515625 0.400274346768856037481754128748 -0.731028029322624228747429242503 +0.166973398625850671939119251874 -0.634018474817276023181022992503 -0.616554880142211936266960492503 +0.166973398625850671939119251874 0.634018474817276023181022992503 -0.616554880142211936266960492503 +0.167010550945997232608064564374 -0.7041756808757781982421875 -0.445807987451553311419871761245 +0.167010550945997232608064564374 0.7041756808757781982421875 -0.445807987451553311419871761245 +0.167037002742290496826171875 -0.70964848995208740234375 0.1760617531836032867431640625 +0.167037002742290496826171875 0.70964848995208740234375 0.1760617531836032867431640625 +0.16705949604511260986328125 -0.4483999907970428466796875 0.14501149952411651611328125 +0.16705949604511260986328125 0.4483999907970428466796875 0.14501149952411651611328125 +0.167091304063796991519197376874 -0.248534095287322981393529630623 0.017644800245761871337890625 +0.167091304063796991519197376874 0.248534095287322981393529630623 0.017644800245761871337890625 +0.16711549460887908935546875 -0.0495840013027191162109375 0.17920325696468353271484375 +0.16711549460887908935546875 0.0495840013027191162109375 0.17920325696468353271484375 +0.167175398766994470767244251874 -0.514503514766693093029914507497 -0.444227707386016801294204014994 +0.167175398766994470767244251874 0.514503514766693093029914507497 -0.444227707386016801294204014994 +0.16719199717044830322265625 -0.0166510008275508880615234375 0.1851204931735992431640625 +0.16719199717044830322265625 0.0166510008275508880615234375 0.1851204931735992431640625 +0.167193996906280534231470369377 -0.282092404365539561883480246252 -0.229063606262207036801115123126 +0.167193996906280534231470369377 0.282092404365539561883480246252 -0.229063606262207036801115123126 +0.1672450006008148193359375 -0.15441800653934478759765625 -0.103364251554012298583984375 +0.1672450006008148193359375 0.15441800653934478759765625 -0.103364251554012298583984375 +0.167276108264923090152009876874 -0.248144102096557600534154630623 -0.0210530988872051245952565778907 +0.167276108264923090152009876874 0.248144102096557600534154630623 -0.0210530988872051245952565778907 +0.167409002780914306640625 -0.121628397703170770816072376874 -0.217211401462554937191740123126 +0.167409002780914306640625 0.121628397703170770816072376874 -0.217211401462554937191740123126 +0.1674420051276683807373046875 -0.06042825244367122650146484375 -0.7285679876804351806640625 +0.1674420051276683807373046875 0.06042825244367122650146484375 -0.7285679876804351806640625 +0.16747640073299407958984375 -0.235309895873069746530248380623 -0.197689104080200184210269753748 +0.16747640073299407958984375 0.235309895873069746530248380623 -0.197689104080200184210269753748 +0.167590247839689260311857310626 -0.515797850489616349634047764994 0.654497450590133644787727007497 +0.167590247839689260311857310626 0.515797850489616349634047764994 0.654497450590133644787727007497 +0.16765700280666351318359375 -0.4096024930477142333984375 0.23262999951839447021484375 +0.16765700280666351318359375 0.4096024930477142333984375 0.23262999951839447021484375 +0.1677042543888092041015625 -0.0406142510473728179931640625 -0.1809027493000030517578125 +0.1677042543888092041015625 0.0406142510473728179931640625 -0.1809027493000030517578125 +0.167704999446868896484375 -0.17204749584197998046875 0.069099001586437225341796875 +0.167704999446868896484375 0.17204749584197998046875 0.069099001586437225341796875 +0.167719303071498848645148882497 -0.217082592844963062628238503748 0.217359802126884438244758257497 +0.167719303071498848645148882497 0.217082592844963062628238503748 0.217359802126884438244758257497 +0.167759102582931501901342130623 -0.0200222991406917572021484375 0.247903203964233376233039507497 +0.167759102582931501901342130623 0.0200222991406917572021484375 0.247903203964233376233039507497 +0.167784202098846452200220369377 -0.0607598006725311307052450615629 0.0903146028518676813323651231258 +0.167784202098846452200220369377 0.0607598006725311307052450615629 0.0903146028518676813323651231258 +0.167811596393585227282585492503 -0.362332797050476107525440738755 0.0235436007380485541606862653907 +0.167811596393585227282585492503 0.362332797050476107525440738755 0.0235436007380485541606862653907 +0.167831997573375690802066628748 -0.0701281018555164337158203125 0.299022489786148037982371761245 +0.167831997573375690802066628748 0.0701281018555164337158203125 0.299022489786148037982371761245 +0.16786475479602813720703125 -0.09654624760150909423828125 0.15811474621295928955078125 +0.16786475479602813720703125 0.09654624760150909423828125 0.15811474621295928955078125 +0.167920804023742681332365123126 -0.0633545994758605984786825615629 -0.0882542014122009305099325615629 +0.167920804023742681332365123126 0.0633545994758605984786825615629 -0.0882542014122009305099325615629 +0.167921400070190435238615123126 -0.0920521974563598688323651231258 -0.0576955974102020263671875 +0.167921400070190435238615123126 0.0920521974563598688323651231258 -0.0576955974102020263671875 +0.167927849292755143606470369377 -0.398141098022460948602230246252 -0.125633704662323014700220369377 +0.167927849292755143606470369377 0.398141098022460948602230246252 -0.125633704662323014700220369377 +0.167967605590820329153345369377 -0.361935591697692904400440738755 -0.02809999883174896240234375 +0.167967605590820329153345369377 0.361935591697692904400440738755 -0.02809999883174896240234375 +0.167984095215797435418636496252 -0.869978678226471013879006477509 0.157853700220584869384765625 +0.167984095215797435418636496252 0.869978678226471013879006477509 0.157853700220584869384765625 +0.167988002300262451171875 0 -0.73094473779201507568359375 +0.168032991886138904913394753748 -0.0727139979600906344314736884371 -0.571381795406341486120993522491 +0.168032991886138904913394753748 0.0727139979600906344314736884371 -0.571381795406341486120993522491 +0.168070399761199973376335492503 -0.517257595062255881579460492503 -0.586683177947998069079460492503 +0.168070399761199973376335492503 0.517257595062255881579460492503 -0.586683177947998069079460492503 +0.168187201023101806640625 -0.687876796722412198192841970013 0.37220799922943115234375 +0.168187201023101806640625 0.687876796722412198192841970013 0.37220799922943115234375 +0.16820399463176727294921875 -0.0406409986317157745361328125 -0.984914004802703857421875 +0.16820399463176727294921875 0.0406409986317157745361328125 -0.984914004802703857421875 +0.168217796087265003546207253748 -0.210185104608535761050447376874 -0.132381597161293024234041126874 +0.168217796087265003546207253748 0.210185104608535761050447376874 -0.132381597161293024234041126874 +0.168273606896400473864616742503 -0.517889356613159268505341970013 -0.0772947974503040424743005587516 +0.168273606896400473864616742503 0.517889356613159268505341970013 -0.0772947974503040424743005587516 +0.168502998352050792352230246252 -0.0275900006294250502159037807814 -0.104141795635223396998547684689 +0.168502998352050792352230246252 0.0275900006294250502159037807814 -0.104141795635223396998547684689 +0.168535847961902601754857755623 -0.277426806092262223657485264994 0.130881448090076429879857755623 +0.168535847961902601754857755623 0.277426806092262223657485264994 0.130881448090076429879857755623 +0.168565252423286432437166126874 -0.140337751805782312564119251874 0.27274729311466217041015625 +0.168565252423286432437166126874 0.140337751805782312564119251874 0.27274729311466217041015625 +0.168603003025054931640625 -0.1837525069713592529296875 0.01754949986934661865234375 +0.168603003025054931640625 0.1837525069713592529296875 0.01754949986934661865234375 +0.1686168015003204345703125 -0.711149418354034446032585492503 0.525199484825134343957131477509 +0.1686168015003204345703125 0.711149418354034446032585492503 0.525199484825134343957131477509 +0.168626707792282115594417746252 -0.167863857746124278680355246252 -0.495869544148445196007912727509 +0.168626707792282115594417746252 0.167863857746124278680355246252 -0.495869544148445196007912727509 +0.168682193756103521176115123126 -0.171373808383941644839509876874 -0.1793805062770843505859375 +0.168682193756103521176115123126 0.171373808383941644839509876874 -0.1793805062770843505859375 +0.168746691942214949166967130623 -0.0483008980751037583778462192186 -0.243293094635009754522769753748 +0.168746691942214949166967130623 0.0483008980751037583778462192186 -0.243293094635009754522769753748 +0.168775196373462693655298494377 -0.519438135623931929174545985006 0.0648004479706287411788778740629 +0.168775196373462693655298494377 0.519438135623931929174545985006 0.0648004479706287411788778740629 +0.16879950463771820068359375 -0.040569998323917388916015625 -0.468892991542816162109375 +0.16879950463771820068359375 0.040569998323917388916015625 -0.468892991542816162109375 +0.16887350380420684814453125 -0.1430124938488006591796875 -0.116314999759197235107421875 +0.16887350380420684814453125 0.1430124938488006591796875 -0.116314999759197235107421875 +0.1689155995845794677734375 -0.0244056008756160722206196567186 -0.575214600563049294201789507497 +0.1689155995845794677734375 0.0244056008756160722206196567186 -0.575214600563049294201789507497 +0.16893374919891357421875 -0.18369825184345245361328125 -0.014706999994814395904541015625 +0.16893374919891357421875 0.18369825184345245361328125 -0.014706999994814395904541015625 +0.16907174885272979736328125 -0.19805999100208282470703125 0.7033394873142242431640625 +0.16907174885272979736328125 0.19805999100208282470703125 0.7033394873142242431640625 +0.169189198315143590756193248126 -0.403380444645881686138721988755 0.105637051910161969270340875937 +0.169189198315143590756193248126 0.403380444645881686138721988755 0.105637051910161969270340875937 +0.169242498278617842233373380623 -0.848278772830963090356704014994 0.392784155905246734619140625 +0.169242498278617842233373380623 0.848278772830963090356704014994 0.392784155905246734619140625 +0.1692498028278350830078125 -0.138263404369354248046875 0.2055180072784423828125 +0.1692498028278350830078125 0.138263404369354248046875 0.2055180072784423828125 +0.169296002388000493832365123126 -0.324866390228271517681690738755 -0.160625994205474853515625 +0.169296002388000493832365123126 0.324866390228271517681690738755 -0.160625994205474853515625 +0.169324207305908192022769753748 -0.521118593215942338403579014994 -0.244468206167221063784822376874 +0.169324207305908192022769753748 0.521118593215942338403579014994 -0.244468206167221063784822376874 +0.169331800937652598992855246252 -0.10267460346221923828125 0.028011798858642578125 +0.169331800937652598992855246252 0.10267460346221923828125 0.028011798858642578125 +0.1693480014801025390625 -0.0392028003931045587737713731258 0.0989162027835845947265625 +0.1693480014801025390625 0.0392028003931045587737713731258 0.0989162027835845947265625 +0.16935800015926361083984375 0 -0.470444500446319580078125 +0.169368855655193328857421875 -0.893704915046691805713408029987 0.274054087698459625244140625 +0.169368855655193328857421875 0.893704915046691805713408029987 0.274054087698459625244140625 +0.16936899721622467041015625 -0.19706650078296661376953125 0.4271754920482635498046875 +0.16936899721622467041015625 0.19706650078296661376953125 0.4271754920482635498046875 +0.169379700720310194528295255623 -0.521306115388870172644431022491 0.435373407602310136255141514994 +0.169379700720310194528295255623 0.521306115388870172644431022491 0.435373407602310136255141514994 +0.16939674317836761474609375 -0.02037500031292438507080078125 -0.18272824585437774658203125 +0.16939674317836761474609375 0.02037500031292438507080078125 -0.18272824585437774658203125 +0.169421397149562835693359375 -0.360674554109573386462272992503 -0.209069998562335962466463001874 +0.169421397149562835693359375 0.360674554109573386462272992503 -0.209069998562335962466463001874 +0.169524903595447556936548494377 -0.123165898025035858154296875 -0.398235592246055591925113503748 +0.169524903595447556936548494377 0.123165898025035858154296875 -0.398235592246055591925113503748 +0.169560654461383797375617632497 -0.180640253424644459112613503748 -0.247221091389656061343416126874 +0.169560654461383797375617632497 0.180640253424644459112613503748 -0.247221091389656061343416126874 +0.1695609986782073974609375 0 0.4703715145587921142578125 +0.1695888042449951171875 -0.628714418411254971630341970013 -0.464711999893188509869190738755 +0.1695888042449951171875 0.628714418411254971630341970013 -0.464711999893188509869190738755 +0.16960389912128448486328125 -0.703040960431098871374899772491 0.446618053317069996221988503748 +0.16960389912128448486328125 0.703040960431098871374899772491 0.446618053317069996221988503748 +0.169641602039337174856470369377 -0.732034397125244207238381477509 0.2744944095611572265625 +0.169641602039337174856470369377 0.732034397125244207238381477509 0.2744944095611572265625 +0.169657599925994884149105246252 -0.0131633996963500983501393903907 0.105085802078247081414730246252 +0.169657599925994884149105246252 0.0131633996963500983501393903907 0.105085802078247081414730246252 +0.169685804843902610095085492503 -0.103223598003387456722990123126 -0.0234861999750137356857138115629 +0.169685804843902610095085492503 0.103223598003387456722990123126 -0.0234861999750137356857138115629 +0.169687604904174810238615123126 -0.221346402168273947985710492503 -0.286726403236389149054019753748 +0.169687604904174810238615123126 0.221346402168273947985710492503 -0.286726403236389149054019753748 +0.169722402095794699938835492503 -0.0138280004262924197805384451954 -0.104895603656768809930355246252 +0.169722402095794699938835492503 0.0138280004262924197805384451954 -0.104895603656768809930355246252 +0.169732502102851845471320757497 -0.273070356249809242932258257497 -0.138287805020809173583984375 +0.169732502102851845471320757497 0.273070356249809242932258257497 -0.138287805020809173583984375 +0.1697365939617156982421875 -0.30382658541202545166015625 -0.425885903835296675268295985006 +0.1697365939617156982421875 0.30382658541202545166015625 -0.425885903835296675268295985006 +0.169738805294036870785490123126 -0.235035306215286232678352007497 0.0771177023649215614975460653113 +0.169738805294036870785490123126 0.235035306215286232678352007497 0.0771177023649215614975460653113 +0.169748149812221527099609375 -0.285589715838432345318409488755 0.438319736719131491931022992503 +0.169748149812221527099609375 0.285589715838432345318409488755 0.438319736719131491931022992503 +0.169911205768585205078125 -0.319810390472412109375 -0.713338422775268599096420985006 +0.169911205768585205078125 0.319810390472412109375 -0.713338422775268599096420985006 +0.16995935142040252685546875 -0.523080801963806241161591970013 0 +0.16995935142040252685546875 0.523080801963806241161591970013 0 +0.169962000846862776315404630623 -0.0246966004371643073345143903907 -0.245973604917526234014957253748 +0.169962000846862776315404630623 0.0246966004371643073345143903907 -0.245973604917526234014957253748 +0.16996200382709503173828125 0 -0.1833382546901702880859375 +0.169964253902435302734375 -0.72289574146270751953125 -0.10504424571990966796875 +0.169964253902435302734375 0.72289574146270751953125 -0.10504424571990966796875 +0.169977998733520513363615123126 -0.332324409484863303454460492503 0.143763196468353282586605246252 +0.169977998733520513363615123126 0.332324409484863303454460492503 0.143763196468353282586605246252 +0.170032501220703125 -0.3247210085391998291015625 -0.340066492557525634765625 +0.170032501220703125 0.3247210085391998291015625 -0.340066492557525634765625 +0.170129203796386740954460492503 -0.123604404926300051603682561563 -0.340261602401733420641960492503 +0.170129203796386740954460492503 0.123604404926300051603682561563 -0.340261602401733420641960492503 +0.170129597187042236328125 0 -0.105147194862365733758480246252 +0.1701450049877166748046875 -0.082650251686573028564453125 -0.163461506366729736328125 +0.1701450049877166748046875 0.082650251686573028564453125 -0.163461506366729736328125 +0.170184803009033214227230246252 -0.06923019886016845703125 0.0790211975574493519225427462516 +0.170184803009033214227230246252 0.06923019886016845703125 0.0790211975574493519225427462516 +0.170191204547882085629240123126 -0.26699960231781005859375 0.244430398941040044613615123126 +0.170191204547882085629240123126 0.26699960231781005859375 0.244430398941040044613615123126 +0.17037475109100341796875 -0.16170950233936309814453125 0.0855714976787567138671875 +0.17037475109100341796875 0.16170950233936309814453125 0.0855714976787567138671875 +0.1704102456569671630859375 -0.1734447479248046875 -0.0581142492592334747314453125 +0.1704102456569671630859375 0.1734447479248046875 -0.0581142492592334747314453125 +0.170479755103588093145816628748 -0.296809446811675980981704014994 -0.0730810493230819591126135037484 +0.170479755103588093145816628748 0.296809446811675980981704014994 -0.0730810493230819591126135037484 +0.170481503009796142578125 -0.1111152470111846923828125 0.14522199332714080810546875 +0.170481503009796142578125 0.1111152470111846923828125 0.14522199332714080810546875 +0.170515203475952170641960492503 -0.524800777435302734375 0.579231214523315496300881477509 +0.170515203475952170641960492503 0.524800777435302734375 0.579231214523315496300881477509 +0.170528399944305436575220369377 -0.104499197006225591488615123126 0 +0.170528399944305436575220369377 0.104499197006225591488615123126 0 +0.170540696382522588558927623126 0 -0.246811205148696893862947376874 +0.17054300010204315185546875 -0.4580455124378204345703125 -0.105402000248432159423828125 +0.17054300010204315185546875 0.4580455124378204345703125 -0.105402000248432159423828125 +0.1705749928951263427734375 -0.3101175129413604736328125 0.3531729876995086669921875 +0.1705749928951263427734375 0.3101175129413604736328125 0.3531729876995086669921875 +0.17059050500392913818359375 -0.2358477115631103515625 0.343183037638664256707698996252 +0.17059050500392913818359375 0.2358477115631103515625 0.343183037638664256707698996252 +0.1706264019012451171875 -0.299367958307266202044871761245 0.0613630481064319568962339701557 +0.1706264019012451171875 0.299367958307266202044871761245 0.0613630481064319568962339701557 +0.170640605688095109426782869377 -0.612051057815551802221420985006 -0.137022600322961818353206808752 +0.170640605688095109426782869377 0.612051057815551802221420985006 -0.137022600322961818353206808752 +0.1708648502826690673828125 -0.525857797265052773205695757497 -0.341729700565338134765625 +0.1708648502826690673828125 0.525857797265052773205695757497 -0.341729700565338134765625 +0.170944207906723016909822376874 -0.196883100271224964483707253748 -0.14837519824504852294921875 +0.170944207906723016909822376874 0.196883100271224964483707253748 -0.14837519824504852294921875 +0.170973443984985346011384876874 -0.305508139729499805792301003748 -0.28272373974323272705078125 +0.170973443984985346011384876874 0.305508139729499805792301003748 -0.28272373974323272705078125 +0.170975601673126226254240123126 -0.0266835987567901611328125 0.360631608963012717516960492503 +0.170975601673126226254240123126 0.0266835987567901611328125 0.360631608963012717516960492503 +0.1709827445447444915771484375 -0.04953149892389774322509765625 0.7285679876804351806640625 +0.1709827445447444915771484375 0.04953149892389774322509765625 0.7285679876804351806640625 +0.1710772477090358734130859375 -0.5265314877033233642578125 0.5059612691402435302734375 +0.1710772477090358734130859375 0.5265314877033233642578125 0.5059612691402435302734375 +0.171080392599105818307592130623 -0.234060591459274269787727007497 -0.0771177023649215614975460653113 +0.171080392599105818307592130623 0.234060591459274269787727007497 -0.0771177023649215614975460653113 +0.17109300196170806884765625 -0.099167503416538238525390625 0.4592309892177581787109375 +0.17109300196170806884765625 0.099167503416538238525390625 0.4592309892177581787109375 +0.171095204353332530633480246252 -0.0716448009014129666427450615629 -0.0747893989086151206313601846887 +0.171095204353332530633480246252 0.0716448009014129666427450615629 -0.0747893989086151206313601846887 +0.17114399373531341552734375 -0.9238770008087158203125 -0.342287003993988037109375 +0.17114399373531341552734375 0.9238770008087158203125 -0.342287003993988037109375 +0.171157351136207558361945757497 -0.02335934899747371673583984375 0.304400241374969460217414507497 +0.171157351136207558361945757497 0.02335934899747371673583984375 0.304400241374969460217414507497 +0.17116320133209228515625 -0.223045206069946294613615123126 -0.530050814151763916015625 +0.17116320133209228515625 0.223045206069946294613615123126 -0.530050814151763916015625 +0.171214807033538807257144753748 -0.397702789306640602795539507497 0.415353012084960948602230246252 +0.171214807033538807257144753748 0.397702789306640602795539507497 0.415353012084960948602230246252 +0.171228953450918180978490568123 -0.526998254656791620398337272491 0.771655523777007967822783029987 +0.171228953450918180978490568123 0.526998254656791620398337272491 0.771655523777007967822783029987 +0.17128349840641021728515625 -0.4613409936428070068359375 0.08846700191497802734375 +0.17128349840641021728515625 0.4613409936428070068359375 0.08846700191497802734375 +0.171322198212146753482088001874 -0.3721986114978790283203125 0.186055652797222137451171875 +0.171322198212146753482088001874 0.3721986114978790283203125 0.186055652797222137451171875 +0.171364204585552210025056751874 -0.619474792480468661182158029987 0.277281901240348793713508257497 +0.171364204585552210025056751874 0.619474792480468661182158029987 0.277281901240348793713508257497 +0.171416604518890403063835492503 -0.0941828012466430775084802462516 0.04178459942340850830078125 +0.171416604518890403063835492503 0.0941828012466430775084802462516 0.04178459942340850830078125 +0.171454203128814708367855246252 -0.0494643986225128187705912807814 -0.0903147995471954428969851846887 +0.171454203128814708367855246252 0.0494643986225128187705912807814 -0.0903147995471954428969851846887 +0.171506303548812855108707253748 -0.304403746128082242083934261245 0.0205897999927401528785786410936 +0.171506303548812855108707253748 0.304403746128082242083934261245 0.0205897999927401528785786410936 +0.171510748565196990966796875 -0.72479474544525146484375 0.0880732499063014984130859375 +0.171510748565196990966796875 0.72479474544525146484375 0.0880732499063014984130859375 +0.17151649296283721923828125 -0.2071335017681121826171875 -0.421518504619598388671875 +0.17151649296283721923828125 0.2071335017681121826171875 -0.421518504619598388671875 +0.171531700342893583810521818123 -0.194561605900526041201814564374 -0.8094584047794342041015625 +0.171531700342893583810521818123 0.194561605900526041201814564374 -0.8094584047794342041015625 +0.171590405702590959036157869377 -0.235121396183967601434261496252 -0.343183037638664256707698996252 +0.171590405702590959036157869377 0.235121396183967601434261496252 -0.343183037638664256707698996252 +0.171592850983142863885433371252 -0.441331145167350780145198996252 -0.445289635658264182360710492503 +0.171592850983142863885433371252 0.441331145167350780145198996252 -0.445289635658264182360710492503 +0.17166960239410400390625 -0.355568003654479991570980246252 0.695773601531982421875 +0.17166960239410400390625 0.355568003654479991570980246252 0.695773601531982421875 +0.171672043204307567254573996252 -0.454928657412529025005909488755 -0.257038651406765017437550113755 +0.171672043204307567254573996252 0.454928657412529025005909488755 -0.257038651406765017437550113755 +0.171712803840637223684595369377 -0.0773454010486602783203125 0.0673228025436401339431924384371 +0.171712803840637223684595369377 0.0773454010486602783203125 0.0673228025436401339431924384371 +0.171721553802490212170539507497 -0.303986909985542286261051003748 -0.0245692998170852633377236884371 +0.171721553802490212170539507497 0.303986909985542286261051003748 -0.0245692998170852633377236884371 +0.17190720140933990478515625 -0.337222793698310874255241742503 0.243369457125663768426448996252 +0.17190720140933990478515625 0.337222793698310874255241742503 0.243369457125663768426448996252 +0.17199374735355377197265625 -0.15037475526332855224609375 0.10151650011539459228515625 +0.17199374735355377197265625 0.15037475526332855224609375 0.10151650011539459228515625 +0.172004795074462896176115123126 -0.185684001445770269222990123126 0.309735202789306662829460492503 +0.172004795074462896176115123126 0.185684001445770269222990123126 0.309735202789306662829460492503 +0.172041101753711678234992632497 -0.231993648409843433721988503748 0.197688749432563759533820757497 +0.172041101753711678234992632497 0.231993648409843433721988503748 0.197688749432563759533820757497 +0.17204725742340087890625 -0.124999247491359710693359375 0.1314339935779571533203125 +0.17204725742340087890625 0.124999247491359710693359375 0.1314339935779571533203125 +0.172069796919822687319978626874 -0.0961411461234092656891192518742 -0.28922109305858612060546875 +0.172069796919822687319978626874 0.0961411461234092656891192518742 -0.28922109305858612060546875 +0.172078497707843808273153740629 -0.412161192297935519146534488755 0.320955240726470969470085492503 +0.172078497707843808273153740629 0.412161192297935519146534488755 0.320955240726470969470085492503 +0.172140008211135869808927623126 -0.371540987491607632708934261245 -0.438548398017883311883480246252 +0.172140008211135869808927623126 0.371540987491607632708934261245 -0.438548398017883311883480246252 +0.172146651148796070440738503748 -0.125071294605731964111328125 0.925863334536552340381376779987 +0.172146651148796070440738503748 0.125071294605731964111328125 0.925863334536552340381376779987 +0.172207796573638910464509876874 -0.415745562314987215923878238755 0 +0.172207796573638910464509876874 0.415745562314987215923878238755 0 +0.172208401560783375128238503748 -0.228148204088211042916967130623 0.638978201150894098425681022491 +0.172208401560783375128238503748 0.228148204088211042916967130623 0.638978201150894098425681022491 +0.17227280139923095703125 0 0.101597404479980474301115123126 +0.17231190204620361328125 -0.0796548038721084511459835653113 0.232301098108291609323217130623 +0.17231190204620361328125 0.0796548038721084511459835653113 0.232301098108291609323217130623 +0.172331202030181901418970369377 -0.0952441990375518798828125 -0.03507860004901885986328125 +0.172331202030181901418970369377 0.0952441990375518798828125 -0.03507860004901885986328125 +0.172360347211360925845369251874 -0.412309786677360567974659488755 0.0528439499437809018234091240629 +0.172360347211360925845369251874 0.412309786677360567974659488755 0.0528439499437809018234091240629 +0.172360801696777365954460492503 -0.0850643992424011258224325615629 0.0552792012691497858245526231258 +0.172360801696777365954460492503 0.0850643992424011258224325615629 0.0552792012691497858245526231258 +0.172376099228858964407251619377 -0.616084283590316750256477007497 0.115007102489471435546875 +0.172376099228858964407251619377 0.616084283590316750256477007497 0.115007102489471435546875 +0.172420246154069894961580189374 -0.281200003623962413445980246252 -0.89089764654636383056640625 +0.172420246154069894961580189374 0.281200003623962413445980246252 -0.89089764654636383056640625 +0.172432798147201526983707253748 -0.155776494741439813784822376874 0.1897383034229278564453125 +0.172432798147201526983707253748 0.155776494741439813784822376874 0.1897383034229278564453125 +0.172441005706787109375 0 0.18100850284099578857421875 +0.172443147003650681936548494377 -0.410841894149780284539730246252 -0.06302654743194580078125 +0.172443147003650681936548494377 0.410841894149780284539730246252 -0.06302654743194580078125 +0.1724617481231689453125 -0.06603725254535675048828125 0.16851125657558441162109375 +0.1724617481231689453125 0.06603725254535675048828125 0.16851125657558441162109375 +0.172506740689277654476896373126 -0.251019604504108428955078125 0.57422171533107757568359375 +0.172506740689277654476896373126 0.251019604504108428955078125 0.57422171533107757568359375 +0.1725524961948394775390625 -0.1381127536296844482421875 0.116835497319698333740234375 +0.1725524961948394775390625 0.1381127536296844482421875 0.116835497319698333740234375 +0.1725692451000213623046875 -0.262424397468566883429019753748 0.154445196688175190313785378748 +0.1725692451000213623046875 0.262424397468566883429019753748 0.154445196688175190313785378748 +0.172578050196170812435880748126 -0.7573525607585906982421875 -0.345156961679458584857371761245 +0.172578050196170812435880748126 0.7573525607585906982421875 -0.345156961679458584857371761245 +0.172794002294540394171207253748 -0.272554796934127818719417746252 0.505822205543518088610710492503 +0.172794002294540394171207253748 0.272554796934127818719417746252 0.505822205543518088610710492503 +0.172917897999286668264673494377 -0.880966776609420798571647992503 -0.0632249973714351654052734375 +0.172917897999286668264673494377 0.880966776609420798571647992503 -0.0632249973714351654052734375 +0.173011155426502222232088001874 -0.532483240962028481213508257497 0.330194818973541248663394753748 +0.173011155426502222232088001874 0.532483240962028481213508257497 0.330194818973541248663394753748 +0.173012407124042533190788617503 -0.179039856791496282406583873126 0.490419608354568548058693977509 +0.173012407124042533190788617503 0.179039856791496282406583873126 0.490419608354568548058693977509 +0.173090004920959494860710492503 -0.0474453985691070598273988423443 0.0882539987564086997329226846887 +0.173090004920959494860710492503 0.0474453985691070598273988423443 0.0882539987564086997329226846887 +0.173157203197479264700220369377 -0.0794690012931823785979901231258 -0.0608381986618042047698651231258 +0.173157203197479264700220369377 0.0794690012931823785979901231258 -0.0608381986618042047698651231258 +0.17325675487518310546875 -0.0887719519436359488784304971887 -0.405711445212364185675113503748 +0.17325675487518310546875 0.0887719519436359488784304971887 -0.405711445212364185675113503748 +0.173272500932216633184879128748 -0.168627250194549549444644753748 0.814887350797653176037727007497 +0.173272500932216633184879128748 0.168627250194549549444644753748 0.814887350797653176037727007497 +0.173361802101135276110710492503 -0.0262400001287460341026225307814 0.0962140023708343561370526231258 +0.173361802101135276110710492503 0.0262400001287460341026225307814 0.0962140023708343561370526231258 +0.17339949309825897216796875 -0.105589501559734344482421875 -0.145888507366180419921875 +0.17339949309825897216796875 0.105589501559734344482421875 -0.145888507366180419921875 +0.1734544932842254638671875 -0.4680249989032745361328125 0.0294330008327960968017578125 +0.1734544932842254638671875 0.4680249989032745361328125 0.0294330008327960968017578125 +0.173633992671966552734375 -0.467565000057220458984375 -0.03513149917125701904296875 +0.173633992671966552734375 0.467565000057220458984375 -0.03513149917125701904296875 +0.17369864881038665771484375 -0.0599647521972656236122212192186 0.410771244764328025134147992503 +0.17369864881038665771484375 0.0599647521972656236122212192186 0.410771244764328025134147992503 +0.17372520267963409423828125 -0.881483423709869429174545985006 0.0529731016606092494636293110943 +0.17372520267963409423828125 0.881483423709869429174545985006 0.0529731016606092494636293110943 +0.17382599413394927978515625 -0.03319799900054931640625 0.176585495471954345703125 +0.17382599413394927978515625 0.03319799900054931640625 0.176585495471954345703125 +0.173866150528192514590486439374 -0.912621319293975830078125 -0.1984768472611904144287109375 +0.173866150528192514590486439374 0.912621319293975830078125 -0.1984768472611904144287109375 +0.17392550408840179443359375 -0.17611749470233917236328125 0.0351077504456043243408203125 +0.17392550408840179443359375 0.17611749470233917236328125 0.0351077504456043243408203125 +0.173925942182540899105802623126 -0.388905543088913008276108485006 -0.347853556275367792327557481258 +0.173925942182540899105802623126 0.388905543088913008276108485006 -0.347853556275367792327557481258 +0.173941600322723405325220369377 -0.0933763980865478515625 -0.3478868007659912109375 +0.173941600322723405325220369377 0.0933763980865478515625 -0.3478868007659912109375 +0.173982799053192138671875 -0.0359185993671417222450337192186 -0.0918687999248504749694177462516 +0.173982799053192138671875 0.0359185993671417222450337192186 -0.0918687999248504749694177462516 +0.174057608842849736996427623126 -0.101760900020599356907702315311 -0.222145503759384160824552623126 +0.174057608842849736996427623126 0.101760900020599356907702315311 -0.222145503759384160824552623126 +0.174075597524642938784822376874 -0.535755586624145463403579014994 0.20655119419097900390625 +0.174075597524642938784822376874 0.535755586624145463403579014994 0.20655119419097900390625 +0.174092996120452897512720369377 -0.0867766022682189969161825615629 -0.0464911997318267836143412807814 +0.174092996120452897512720369377 0.0867766022682189969161825615629 -0.0464911997318267836143412807814 +0.17417399585247039794921875 -0.74978101253509521484375 0.638351023197174072265625 +0.17417399585247039794921875 0.74978101253509521484375 0.638351023197174072265625 +0.1742147505283355712890625 -0.1265729963779449462890625 -0.126998007297515869140625 +0.1742147505283355712890625 0.1265729963779449462890625 -0.126998007297515869140625 +0.174223798513412492239282869377 -0.149552544951438909359708873126 0.387014409899711642193409488755 +0.174223798513412492239282869377 0.149552544951438909359708873126 0.387014409899711642193409488755 +0.174266391992568964175447376874 -0.456239998340606689453125 -0.348533999919891368524105246252 +0.174266391992568964175447376874 0.456239998340606689453125 -0.348533999919891368524105246252 +0.174268198013305647409154630623 -0.2236011028289794921875 0.09814859926700592041015625 +0.174268198013305647409154630623 0.2236011028289794921875 0.09814859926700592041015625 +0.174285602569580089227230246252 -0.106206405162811282072432561563 0.344012808799743663445980246252 +0.174285602569580089227230246252 0.106206405162811282072432561563 0.344012808799743663445980246252 +0.1742982566356658935546875 -0.16406999528408050537109375 -0.072119496762752532958984375 +0.1742982566356658935546875 0.16406999528408050537109375 -0.072119496762752532958984375 +0.174314796924591064453125 -0.0970409989356994656661825615629 0.014049999415874481201171875 +0.174314796924591064453125 0.0970409989356994656661825615629 0.014049999415874481201171875 +0.174368405342102072985710492503 -0.0972473978996276910979901231258 -0.0117718003690242770803431326954 +0.174368405342102072985710492503 0.0972473978996276910979901231258 -0.0117718003690242770803431326954 +0.1743870042264461517333984375 -0.4364595115184783935546875 -0.584459245204925537109375 +0.1743870042264461517333984375 0.4364595115184783935546875 -0.584459245204925537109375 +0.174487495422363275698884876874 -0.151260906457900995425447376874 -0.191505002975463856085269753748 +0.174487495422363275698884876874 0.151260906457900995425447376874 -0.191505002975463856085269753748 +0.174519205093383811266960492503 -0.748103189468383833471420985006 -0.223348808288574229852230246252 +0.174519205093383811266960492503 0.748103189468383833471420985006 -0.223348808288574229852230246252 +0.174550491571426380499332253748 -0.240904802083969110659822376874 0.0386915981769561725944761576557 +0.174550491571426380499332253748 0.240904802083969110659822376874 0.0386915981769561725944761576557 +0.174662809073925034963892244377 -0.624425113201141357421875 -0.045670948922634124755859375 +0.174662809073925034963892244377 0.624425113201141357421875 -0.045670948922634124755859375 +0.17467750608921051025390625 -0.065386496484279632568359375 -0.1664704978466033935546875 +0.17467750608921051025390625 0.065386496484279632568359375 -0.1664704978466033935546875 +0.174749994277954123766960492503 -0.283586406707763694079460492503 0.221452403068542497122095369377 +0.174749994277954123766960492503 0.283586406707763694079460492503 0.221452403068542497122095369377 +0.174781501293182373046875 -0.17630875110626220703125 -0.02943974919617176055908203125 +0.174781501293182373046875 0.17630875110626220703125 -0.02943974919617176055908203125 +0.174986100196838384457365123126 0 0.243679797649383522717414507497 +0.174998946487903594970703125 -0.0693783976137637981018713162484 -0.295062953233718838763621761245 +0.174998946487903594970703125 0.0693783976137637981018713162484 -0.295062953233718838763621761245 +0.175046542286872858218416126874 -0.258608701825141895636051003748 -0.158051253855228418521150501874 +0.175046542286872858218416126874 0.258608701825141895636051003748 -0.158051253855228418521150501874 +0.1750845015048980712890625 -0.7292775213718414306640625 0 +0.1750845015048980712890625 0.7292775213718414306640625 0 +0.17509590089321136474609375 -0.162473501265048975161775501874 0.255819898843765269891292746252 +0.17509590089321136474609375 0.162473501265048975161775501874 0.255819898843765269891292746252 +0.175175392627716058902009876874 -0.240450900793075544870092130623 -0.0386915981769561725944761576557 +0.175175392627716058902009876874 0.240450900793075544870092130623 -0.0386915981769561725944761576557 +0.175186698883771890811189564374 0 0.831751352548599220959602007497 +0.175192201137542746813835492503 -0.0579850018024444593955912807814 -0.0771066009998321588714276231258 +0.175192201137542746813835492503 0.0579850018024444593955912807814 -0.0771066009998321588714276231258 +0.175201007723808283023103626874 -0.624772211909294106213508257497 0.0382629010826349286178427178129 +0.175201007723808283023103626874 0.624772211909294106213508257497 0.0382629010826349286178427178129 +0.175253994762897491455078125 -0.6394769847393035888671875 -0.350507251918315887451171875 +0.175253994762897491455078125 0.6394769847393035888671875 -0.350507251918315887451171875 +0.175259995460510270559595369377 -0.316067194938659701275440738755 0.171421599388122569695980246252 +0.175259995460510270559595369377 0.316067194938659701275440738755 0.171421599388122569695980246252 +0.175440305471420282534822376874 -0.633385908603668168481704014994 -0.240922507643699629342748380623 +0.175440305471420282534822376874 0.633385908603668168481704014994 -0.240922507643699629342748380623 +0.17546474933624267578125 -0.251014508306980133056640625 -0.68461950123310089111328125 +0.17546474933624267578125 0.251014508306980133056640625 -0.68461950123310089111328125 +0.175480547547340381964176003748 -0.245715048909187300241185880623 0.177004447579383827893195757497 +0.175480547547340381964176003748 0.245715048909187300241185880623 0.177004447579383827893195757497 +0.17550064623355865478515625 -0.400043794512748740466179242503 0.481315916776657137798878238755 +0.17550064623355865478515625 0.400043794512748740466179242503 0.481315916776657137798878238755 +0.17558300495147705078125 -0.3248600065708160400390625 0.92931997776031494140625 +0.17558300495147705078125 0.3248600065708160400390625 0.92931997776031494140625 +0.175609204173088090383814119377 -0.288568156957626331671207253748 -0.555328139662742636950554242503 +0.175609204173088090383814119377 0.288568156957626331671207253748 -0.555328139662742636950554242503 +0.175663253664970375744758257497 -0.156439849734306329898103626874 -0.259169754385948192254573996252 +0.175663253664970375744758257497 0.156439849734306329898103626874 -0.259169754385948192254573996252 +0.17566899955272674560546875 -0.540643990039825439453125 -0.8227059841156005859375 +0.17566899955272674560546875 0.540643990039825439453125 -0.8227059841156005859375 +0.175723004341125504934595369377 -0.022076599299907684326171875 -0.0929196000099182239928552462516 +0.175723004341125504934595369377 0.022076599299907684326171875 -0.0929196000099182239928552462516 +0.175771352648735057488948996252 -0.0535841993987560272216796875 -0.410771244764328025134147992503 +0.175771352648735057488948996252 0.0535841993987560272216796875 -0.410771244764328025134147992503 +0.175816595554351806640625 -0.0560634016990661648849325615629 0.0771063983440399280944177462516 +0.175816595554351806640625 0.0560634016990661648849325615629 0.0771063983440399280944177462516 +0.175850403308868419305355246252 -0.308734393119812045025440738755 -0.183738005161285411492855246252 +0.175850403308868419305355246252 0.308734393119812045025440738755 -0.183738005161285411492855246252 +0.175974301993846893310546875 -0.347311788797378562243522992503 0.811422890424728371350227007497 +0.175974301993846893310546875 0.347311788797378562243522992503 0.811422890424728371350227007497 +0.1761682927608489990234375 -0.0927976012229919378082598768742 0.671083700656890824731704014994 +0.1761682927608489990234375 0.0927976012229919378082598768742 0.671083700656890824731704014994 +0.17617319524288177490234375 -0.213822004199027998483373380623 -0.213876599073410028628572376874 +0.17617319524288177490234375 0.213822004199027998483373380623 -0.213876599073410028628572376874 +0.176199755072593694515958873126 -0.34139116108417510986328125 -0.234319952130317699090511496252 +0.176199755072593694515958873126 0.34139116108417510986328125 -0.234319952130317699090511496252 +0.176249698549509031808568693123 -0.669241723418235734399672764994 -0.650807929039001420434829014994 +0.176249698549509031808568693123 0.669241723418235734399672764994 -0.650807929039001420434829014994 +0.176335805654525751284822376874 -0.242705100774765009097322376874 0 +0.176335805654525751284822376874 0.242705100774765009097322376874 0 +0.176449903845787070544304242503 -0.0730350486934185083587323106258 0.515782290697097800524772992503 +0.176449903845787070544304242503 0.0730350486934185083587323106258 0.515782290697097800524772992503 +0.176546001434326194079460492503 -0.013151399791240692138671875 0.0930512011051178034026776231258 +0.176546001434326194079460492503 0.013151399791240692138671875 0.0930512011051178034026776231258 +0.17660774290561676025390625 -0.081481747329235076904296875 0.1570682525634765625 +0.17660774290561676025390625 0.081481747329235076904296875 0.1570682525634765625 +0.1766214072704315185546875 -0.158489406108856201171875 0.551077187061309814453125 +0.1766214072704315185546875 0.158489406108856201171875 0.551077187061309814453125 +0.176622796058654801809595369377 -0.00824960023164749214896751539072 -0.0934682011604309193053552462516 +0.176622796058654801809595369377 0.00824960023164749214896751539072 -0.0934682011604309193053552462516 +0.176681602001190207751335492503 -0.0625728011131286704360476846887 -0.35336720943450927734375 +0.176681602001190207751335492503 0.0625728011131286704360476846887 -0.35336720943450927734375 +0.176685744524002069644197376874 -0.352728000283241305279346988755 0.216482846438884740658536998126 +0.176685744524002069644197376874 0.352728000283241305279346988755 0.216482846438884740658536998126 +0.176720798015594482421875 -0.2589623928070068359375 -0.248411202430725119860710492503 +0.176720798015594482421875 0.2589623928070068359375 -0.248411202430725119860710492503 +0.176755499839782698190404630623 -0.169352692365646345651342130623 0.173427593708038313424779630623 +0.176755499839782698190404630623 0.169352692365646345651342130623 0.173427593708038313424779630623 +0.176759397983551030941740123126 -0.223047906160354608706697376874 -0.094898700714111328125 +0.176759397983551030941740123126 0.223047906160354608706697376874 -0.094898700714111328125 +0.176764798164367659127904630623 -0.0399210020899772657920756557814 0.239082598686218256167634876874 +0.176764798164367659127904630623 0.0399210020899772657920756557814 0.239082598686218256167634876874 +0.17677700519561767578125 -0.1767764985561370849609375 0 +0.17677700519561767578125 0.1767764985561370849609375 0 +0.17679150402545928955078125 -0.423819896578788768426448996252 -0.774029678106307961193977007497 +0.17679150402545928955078125 0.423819896578788768426448996252 -0.774029678106307961193977007497 +0.176834701001644140072599498126 -0.745597779750823974609375 -0.472031986713409457134815738755 +0.176834701001644140072599498126 0.745597779750823974609375 -0.472031986713409457134815738755 +0.176860797405242936575220369377 -0.128495204448699967825220369377 -0.769551181793212912829460492503 +0.176860797405242936575220369377 0.128495204448699967825220369377 -0.769551181793212912829460492503 +0.17699539661407470703125 -0.0887907981872558677016726846887 0.02808620035648345947265625 +0.17699539661407470703125 0.0887907981872558677016726846887 0.02808620035648345947265625 +0.176999190449714655093416126874 -0.0419135510921478243728799384371 -0.299022489786148037982371761245 +0.176999190449714655093416126874 0.0419135510921478243728799384371 -0.299022489786148037982371761245 +0.177016794681549072265625 -0.194493603706359874383480246252 -0.301392006874084517065170985006 +0.177016794681549072265625 0.194493603706359874383480246252 -0.301392006874084517065170985006 +0.17703585326671600341796875 -0.0183033004403114311908762346093 -0.41330789029598236083984375 +0.17703585326671600341796875 0.0183033004403114311908762346093 -0.41330789029598236083984375 +0.177160498499870311395198996252 -0.472915855050086986199886496252 0.217864350974559806140007367503 +0.177160498499870311395198996252 0.472915855050086986199886496252 0.217864350974559806140007367503 +0.1772047542035579681396484375 -0.3834007680416107177734375 0.6197602450847625732421875 +0.1772047542035579681396484375 0.3834007680416107177734375 0.6197602450847625732421875 +0.177316544950008397885099498126 -0.918310827016830422131477007497 0.1666233502328395843505859375 +0.177316544950008397885099498126 0.918310827016830422131477007497 0.1666233502328395843505859375 +0.1773517429828643798828125 -0.153909742832183837890625 -0.08577950298786163330078125 +0.1773517429828643798828125 0.153909742832183837890625 -0.08577950298786163330078125 +0.177352595329284684622095369377 -0.0893945991992950439453125 -0.0235515996813774122764506557814 +0.177352595329284684622095369377 0.0893945991992950439453125 -0.0235515996813774122764506557814 +0.177355152368545515573217130623 -0.0932407021522521917145098768742 0.286969205737113930432258257497 +0.177355152368545515573217130623 0.0932407021522521917145098768742 0.286969205737113930432258257497 +0.177356195449829084909154630623 -0.359358316659927345959602007497 -0.573939120769500710217414507497 +0.177356195449829084909154630623 0.359358316659927345959602007497 -0.573939120769500710217414507497 +0.177378404140472428762720369377 -0.0345059990882873521278462192186 0.0857101976871490478515625 +0.177378404140472428762720369377 0.0345059990882873521278462192186 0.0857101976871490478515625 +0.17740850150585174560546875 -0.367394506931304931640625 -0.289045989513397216796875 +0.17740850150585174560546875 0.367394506931304931640625 -0.289045989513397216796875 +0.177448497712612146548494251874 -0.546138900518417402807358485006 0.692997300624847434313835492503 +0.177448497712612146548494251874 0.546138900518417402807358485006 0.692997300624847434313835492503 +0.177491295337676990850894753748 -0.395155614614486672131477007497 0.5498625934123992919921875 +0.177491295337676990850894753748 0.395155614614486672131477007497 0.5498625934123992919921875 +0.177622891962528228759765625 0 0.625260335206985540246193977509 +0.177647995948791492804019753748 -0.210692399740219110659822376874 0.118532100319862360171541126874 +0.177647995948791492804019753748 0.210692399740219110659822376874 0.118532100319862360171541126874 +0.177672994136810313836605246252 -0.0644276022911071805099325615629 0.0654322028160095187088174384371 +0.177672994136810313836605246252 0.0644276022911071805099325615629 0.0654322028160095187088174384371 +0.177835798263549810238615123126 -0.0661203980445861788650674384371 -0.0632655978202819879729901231258 +0.177835798263549810238615123126 0.0661203980445861788650674384371 -0.0632655978202819879729901231258 +0.177836854755878459588558371252 -0.258504304289817798956363503748 0.322567203640937827380241742503 +0.177836854755878459588558371252 0.258504304289817798956363503748 0.322567203640937827380241742503 +0.17798440158367156982421875 -0.750657719373702958520766514994 0.554377233982086159436164507497 +0.17798440158367156982421875 0.750657719373702958520766514994 0.554377233982086159436164507497 +0.1779887974262237548828125 -0.547788584232330344470085492503 -0.16807079315185546875 +0.1779887974262237548828125 0.547788584232330344470085492503 -0.16807079315185546875 +0.177998441457748401983707253748 -0.0144542993977665890775741175389 -0.301011207699775684698551003748 +0.177998441457748401983707253748 0.0144542993977665890775741175389 -0.301011207699775684698551003748 +0.178078258037567133120759876874 -0.288811245560646023822215511245 0.0858854509890079470535440009371 +0.178078258037567133120759876874 0.288811245560646023822215511245 0.0858854509890079470535440009371 +0.1781175434589385986328125 -0.129409800469875352346704744377 0.611577850580215520714943977509 +0.1781175434589385986328125 0.129409800469875352346704744377 0.611577850580215520714943977509 +0.1781364977359771728515625 -0.3337495028972625732421875 0.32692348957061767578125 +0.1781364977359771728515625 0.3337495028972625732421875 0.32692348957061767578125 +0.178149998188018798828125 -0.8929250240325927734375 0.4134570062160491943359375 +0.178149998188018798828125 0.8929250240325927734375 0.4134570062160491943359375 +0.178172802925109868832365123126 -0.756958389282226584704460492503 0.187799203395843522512720369377 +0.178172802925109868832365123126 0.756958389282226584704460492503 0.187799203395843522512720369377 +0.17818050086498260498046875 -0.167402744293212890625 0.052230499684810638427734375 +0.17818050086498260498046875 0.167402744293212890625 0.052230499684810638427734375 +0.17819799482822418212890625 -0.17071449756622314453125 -0.434858500957489013671875 +0.17819799482822418212890625 0.17071449756622314453125 -0.434858500957489013671875 +0.178201603889465348684595369377 -0.0907974004745483453948651231258 0 +0.178201603889465348684595369377 0.0907974004745483453948651231258 0 +0.178276693820953346936164507497 -0.548688000440597511975227007497 0.396433097124099687036391514994 +0.178276693820953346936164507497 0.548688000440597511975227007497 0.396433097124099687036391514994 +0.1782830059528350830078125 -0.940742015838623046875 0.2884779870510101318359375 +0.1782830059528350830078125 0.940742015838623046875 0.2884779870510101318359375 +0.178292089700698846987947376874 -0.187163892388343799932926003748 -0.650523984432220370166533029987 +0.178292089700698846987947376874 0.187163892388343799932926003748 -0.650523984432220370166533029987 +0.178330107033252721615568248126 -0.129562554508447641543611439374 -0.61148358881473541259765625 +0.178330107033252721615568248126 0.129562554508447641543611439374 -0.61148358881473541259765625 +0.178332400321960460320980246252 -0.03138320147991180419921875 -0.356668806076049837994190738755 +0.178332400321960460320980246252 0.03138320147991180419921875 -0.356668806076049837994190738755 +0.17834000289440155029296875 -0.047944001853466033935546875 -0.16851174831390380859375 +0.17834000289440155029296875 0.047944001853466033935546875 -0.16851174831390380859375 +0.1783750057220458984375 -0.0440227985382080078125 -0.0790214002132415826995526231258 +0.1783750057220458984375 0.0440227985382080078125 -0.0790214002132415826995526231258 +0.178397691249847417660490123126 -0.178466999530792230777009876874 -0.162246304750442493780582253748 +0.178397691249847417660490123126 0.178466999530792230777009876874 -0.162246304750442493780582253748 +0.178503596782684348376335492503 -0.0799530029296875027755575615629 0.04176039993762969970703125 +0.178503596782684348376335492503 0.0799530029296875027755575615629 0.04176039993762969970703125 +0.178517144918441755807592130623 -0.286132341623306252209602007497 -0.0935945466160774119934728787484 +0.178517144918441755807592130623 0.286132341623306252209602007497 -0.0935945466160774119934728787484 +0.178574799746274937017886941248 -0.549586194753646783972556022491 -0.623350876569747858191306022491 +0.178574799746274937017886941248 0.549586194753646783972556022491 -0.623350876569747858191306022491 +0.178599849343299893478231865629 -0.432536500692367598119858485006 0.288988152146339438708366742503 +0.178599849343299893478231865629 0.432536500692367598119858485006 0.288988152146339438708366742503 +0.178604805469512961657585492503 -0.0644568026065826388260049384371 -0.777139186859130859375 +0.178604805469512961657585492503 0.0644568026065826388260049384371 -0.777139186859130859375 +0.178632998466491721423210492503 -0.0723178029060363852797976846887 0.0534824013710022000411825615629 +0.178632998466491721423210492503 0.0723178029060363852797976846887 0.0534824013710022000411825615629 +0.178683006763458246402009876874 -0.0399395987391471876670756557814 0.571381795406341486120993522491 +0.178683006763458246402009876874 0.0399395987391471876670756557814 0.571381795406341486120993522491 +0.1786989010870456695556640625 -0.730869096517562821802016514994 0.395470999181270599365234375 +0.1786989010870456695556640625 0.730869096517562821802016514994 0.395470999181270599365234375 +0.178825503587722783871427623126 -0.09970200061798095703125 0.2192738950252532958984375 +0.178825503587722783871427623126 0.09970200061798095703125 0.2192738950252532958984375 +0.178884005546569829769865123126 0 -0.357771611213684115337940738755 +0.178884398937225352899105246252 -0.21029078960418701171875 0.28944480419158935546875 +0.178884398937225352899105246252 0.21029078960418701171875 0.28944480419158935546875 +0.178884994983673106805355246252 0 0.0894429981708526611328125 +0.178886401653289811575220369377 -0.34025919437408447265625 -0.110558795928955080900557561563 +0.178886401653289811575220369377 0.34025919437408447265625 -0.110558795928955080900557561563 +0.1791164986789226531982421875 -0.5512537658214569091796875 -0.4759582579135894775390625 +0.1791164986789226531982421875 0.5512537658214569091796875 -0.4759582579135894775390625 +0.179126746952533749679403740629 -0.314124798774719271587940738755 0.414414533972740195544304242503 +0.179126746952533749679403740629 0.314124798774719271587940738755 0.414414533972740195544304242503 +0.179158204793930048159822376874 -0.130164599418640142269865123126 -0.202384507656097417660490123126 +0.179158204793930048159822376874 0.130164599418640142269865123126 -0.202384507656097417660490123126 +0.179187202453613303454460492503 0 -0.779674386978149502880341970013 +0.179230797290802018606470369377 -0.29788959026336669921875 0.197833597660064697265625 +0.179230797290802018606470369377 0.29788959026336669921875 0.197833597660064697265625 +0.17926074564456939697265625 -0.089555747807025909423828125 -0.149483501911163330078125 +0.17926074564456939697265625 0.089555747807025909423828125 -0.149483501911163330078125 +0.179311050474643712826505748126 -0.204293252527713770083650501874 -0.358624809980392478259147992503 +0.179311050474643712826505748126 0.204293252527713770083650501874 -0.358624809980392478259147992503 +0.179330205917358403988615123126 -0.0737025976181030356704226846887 -0.0490772008895874051193075615629 +0.179330205917358403988615123126 0.0737025976181030356704226846887 -0.0490772008895874051193075615629 +0.17940090596675872802734375 -0.183437442779540993420539507497 0.238046544790267933233707253748 +0.17940090596675872802734375 0.183437442779540993420539507497 0.238046544790267933233707253748 +0.1794312000274658203125 -0.08108580112457275390625 -0.0350645989179611192176899692186 +0.1794312000274658203125 0.08108580112457275390625 -0.0350645989179611192176899692186 +0.1794632971286773681640625 -0.1969850957393646240234375 0.137803503870964044741853626874 +0.1794632971286773681640625 0.1969850957393646240234375 0.137803503870964044741853626874 +0.179463553428649891241519753748 -0.242821249365806568487613503748 -0.177004447579383827893195757497 +0.179463553428649891241519753748 0.242821249365806568487613503748 -0.177004447579383827893195757497 +0.179475454986095434017911998126 -0.130395102500915543997095369377 -0.503274762630462668688835492503 +0.179475454986095434017911998126 0.130395102500915543997095369377 -0.503274762630462668688835492503 +0.17955650389194488525390625 -0.14301274716854095458984375 -0.099029250442981719970703125 +0.17955650389194488525390625 0.14301274716854095458984375 -0.099029250442981719970703125 +0.1795805990695953369140625 -0.744396311044693059777443977509 0.472889703512191783563167746252 +0.1795805990695953369140625 0.744396311044693059777443977509 0.472889703512191783563167746252 +0.179645001888275146484375 -0.01664149947464466094970703125 0.17306275665760040283203125 +0.179645001888275146484375 0.01664149947464466094970703125 0.17306275665760040283203125 +0.179650256037712091616853626874 -0.552915999293327353747429242503 0.290689744055271148681640625 +0.179650256037712091616853626874 0.552915999293327353747429242503 0.290689744055271148681640625 +0.179674005508422857113615123126 -0.345067191123962446752670985006 0.0929827988147735595703125 +0.179674005508422857113615123126 0.345067191123962446752670985006 0.0929827988147735595703125 +0.179718804359436046258480246252 -0.0532280027866363567023988423443 0.353366804122924815789730246252 +0.179718804359436046258480246252 0.0532280027866363567023988423443 0.353366804122924815789730246252 +0.17973400652408599853515625 -0.4200870096683502197265625 -0.203033506870269775390625 +0.17973400652408599853515625 0.4200870096683502197265625 -0.203033506870269775390625 +0.17973749339580535888671875 -0.09647600352764129638671875 0.14452250301837921142578125 +0.17973749339580535888671875 0.09647600352764129638671875 0.14452250301837921142578125 +0.17975099384784698486328125 -0.0497732497751712799072265625 0.16647000610828399658203125 +0.17975099384784698486328125 0.0497732497751712799072265625 0.16647000610828399658203125 +0.179757893085479736328125 -0.0811865955591201809982138115629 -0.226044005155563332287727007497 +0.179757893085479736328125 0.0811865955591201809982138115629 -0.226044005155563332287727007497 +0.179768404364585854260383257497 -0.645343291759490900183493522491 0.203016099333763105905248380623 +0.179768404364585854260383257497 0.645343291759490900183493522491 0.203016099333763105905248380623 +0.17979599535465240478515625 -0.16807949542999267578125 -0.0438482500612735748291015625 +0.17979599535465240478515625 0.16807949542999267578125 -0.0438482500612735748291015625 +0.179819753766059881039396373126 -0.266861107945442210809261496252 -0.446037897467613242419304242503 +0.179819753766059881039396373126 0.266861107945442210809261496252 -0.446037897467613242419304242503 +0.179877001047134388311832253748 -0.425379002094268765521434261245 0.383010613918304432257144753748 +0.179877001047134388311832253748 0.425379002094268765521434261245 0.383010613918304432257144753748 +0.180156898498535139596654630623 -0.182046604156494123971654630623 0.156212997436523420846654630623 +0.180156898498535139596654630623 0.182046604156494123971654630623 0.156212997436523420846654630623 +0.18018810451030731201171875 -0.668009069561958268579360264994 -0.493756499886512767449886496252 +0.18018810451030731201171875 0.668009069561958268579360264994 -0.493756499886512767449886496252 +0.180193805694580072573884876874 -0.554583013057708740234375 0.141308999061584478207365123126 +0.180193805694580072573884876874 0.554583013057708740234375 0.141308999061584478207365123126 +0.180212497711181640625 -0.230439007282257080078125 0.4054889976978302001953125 +0.180212497711181640625 0.230439007282257080078125 0.4054889976978302001953125 +0.18024100363254547119140625 -0.554735004901885986328125 0.8122689723968505859375 +0.18024100363254547119140625 0.554735004901885986328125 0.8122689723968505859375 +0.180244202166795736141935435626 -0.777786546945571921618522992503 0.29165031015872955322265625 +0.180244202166795736141935435626 0.777786546945571921618522992503 0.29165031015872955322265625 +0.180343198776245133840845369377 -0.211263990402221685238615123126 0.750228786468505881579460492503 +0.180343198776245133840845369377 0.211263990402221685238615123126 0.750228786468505881579460492503 +0.180398349463939677850277121252 -0.432140487432479902807358485006 -0.288463991880416881219417746252 +0.180398349463939677850277121252 0.432140487432479902807358485006 -0.288463991880416881219417746252 +0.1805306561291217803955078125 -0.3397985398769378662109375 -0.757922074198722817151008257497 +0.1805306561291217803955078125 0.3397985398769378662109375 -0.757922074198722817151008257497 +0.180531001091003423519865123126 -0.0426041990518570001800213731258 0.0747889995574951144119424384371 +0.180531001091003423519865123126 0.0426041990518570001800213731258 0.0747889995574951144119424384371 +0.180640995502471923828125 -0.0303093999624252340152619211722 -0.0803128004074096790709802462516 +0.180640995502471923828125 0.0303093999624252340152619211722 -0.0803128004074096790709802462516 +0.180667895078659046514957253748 -0.131261202692985523565738503748 -0.269498595595359768939403011245 +0.180667895078659046514957253748 0.131261202692985523565738503748 -0.269498595595359768939403011245 +0.18068599700927734375 -0.03068174980580806732177734375 -0.17003299295902252197265625 +0.18068599700927734375 0.03068174980580806732177734375 -0.17003299295902252197265625 +0.180855202674865739309595369377 -0.0212986007332801839664337961722 0.0826907992362976157485476846887 +0.180855202674865739309595369377 0.0212986007332801839664337961722 0.0826907992362976157485476846887 +0.1808820068836212158203125 -0.231772506237030023745759876874 0.0596921995282173115104917826557 +0.1808820068836212158203125 0.231772506237030023745759876874 0.0596921995282173115104917826557 +0.18089999258518218994140625 -0.13143150508403778076171875 0.4472145140171051025390625 +0.18089999258518218994140625 -0.1314300000667572021484375 -0.111803747713565826416015625 +0.18089999258518218994140625 0.1314300000667572021484375 -0.111803747713565826416015625 +0.18089999258518218994140625 0.13143150508403778076171875 0.4472145140171051025390625 +0.180902004241943359375 -0.2938894927501678466796875 -0.3618060052394866943359375 +0.180902004241943359375 0.2938894927501678466796875 -0.3618060052394866943359375 +0.181001155078411107846036998126 -0.483638110756874128881577235006 -0.189295698702335368768245871252 +0.181001155078411107846036998126 0.483638110756874128881577235006 -0.189295698702335368768245871252 +0.181172403693199146612613503748 -0.5576008260250091552734375 0.615433165431022666247429242503 +0.181172403693199146612613503748 0.5576008260250091552734375 0.615433165431022666247429242503 +0.181207001209259033203125 -0.1316539943218231201171875 0.974592983722686767578125 +0.181207001209259033203125 0.1316539943218231201171875 0.974592983722686767578125 +0.18124149739742279052734375 -0.111339747905731201171875 -0.13135825097560882568359375 +0.18124149739742279052734375 0.111339747905731201171875 -0.13135825097560882568359375 +0.1812757551670074462890625 -0.278631010651588462145866742503 -0.303321602940559376104801003748 +0.1812757551670074462890625 0.278631010651588462145866742503 -0.303321602940559376104801003748 +0.181295204162597672903345369377 -0.771088790893554754113381477509 -0.1120471954345703125 +0.181295204162597672903345369377 -0.29118120670318603515625 -0.205780005455017095394865123126 +0.181295204162597672903345369377 0.29118120670318603515625 -0.205780005455017095394865123126 +0.181295204162597672903345369377 0.771088790893554754113381477509 -0.1120471954345703125 +0.1814782507717609405517578125 -0.55854226648807525634765625 0.46647150814533233642578125 +0.1814782507717609405517578125 0.55854226648807525634765625 0.46647150814533233642578125 +0.181488597393035910876335492503 -0.0828538000583648737151776231258 0.0140395998954772963096537807814 +0.181488597393035910876335492503 0.0828538000583648737151776231258 0.0140395998954772963096537807814 +0.18149499595165252685546875 -0.296000003814697265625 -0.937786996364593505859375 +0.18149499595165252685546875 0.296000003814697265625 -0.937786996364593505859375 +0.181509295105934137515291126874 0 0.411769804358482371942073996252 +0.1815159022808074951171875 -0.210871195793151861019865123126 -0.112184098362922660130358565311 +0.1815159022808074951171875 0.210871195793151861019865123126 -0.112184098362922660130358565311 +0.181529200077056890316740123126 -0.0831185996532440296569177462516 -0.0117655999958515174175222028907 +0.181529200077056890316740123126 0.0831185996532440296569177462516 -0.0117655999958515174175222028907 +0.181535243988037109375 -0.15707774460315704345703125 0.069796502590179443359375 +0.181535243988037109375 0.15707774460315704345703125 0.069796502590179443359375 +0.18159639835357666015625 -0.35640239715576171875 0 +0.18159639835357666015625 0.35640239715576171875 0 +0.181610405445098876953125 -0.0523093998432159479339276231258 -0.0654322028160095187088174384371 +0.181610405445098876953125 0.0523093998432159479339276231258 -0.0654322028160095187088174384371 +0.1816104948520660400390625 -0.033302001655101776123046875 0.464659512042999267578125 +0.1816104948520660400390625 0.033302001655101776123046875 0.464659512042999267578125 +0.181621800363063828909204744377 -0.206006406247615819760099498126 -0.857073605060577392578125 +0.181621800363063828909204744377 0.206006406247615819760099498126 -0.857073605060577392578125 +0.1817957460880279541015625 -0.11071600019931793212890625 0.13111950457096099853515625 +0.1817957460880279541015625 0.11071600019931793212890625 0.13111950457096099853515625 +0.18182949721813201904296875 -0.010312500409781932830810546875 -0.17126500606536865234375 +0.18182949721813201904296875 0.010312500409781932830810546875 -0.17126500606536865234375 +0.181871199607849143298210492503 -0.353134799003601118627670985006 0.04710359871387481689453125 +0.181871199607849143298210492503 0.353134799003601118627670985006 0.04710359871387481689453125 +0.182003998756408713610710492503 -0.351737189292907759252670985006 -0.0561728000640869182258363423443 +0.182003998756408713610710492503 0.351737189292907759252670985006 -0.0561728000640869182258363423443 +0.182027196884155278988615123126 -0.016448199748992919921875 -0.0812129974365234375 +0.182027196884155278988615123126 0.016448199748992919921875 -0.0812129974365234375 +0.182035741209983836785823996252 -0.0787734977900981930831747490629 -0.618996945023536748742287727509 +0.182035741209983836785823996252 0.0787734977900981930831747490629 -0.618996945023536748742287727509 +0.182065048813819879702791126874 -0.38161168992519378662109375 -0.154029151797294622250333873126 +0.182065048813819879702791126874 0.38161168992519378662109375 -0.154029151797294622250333873126 +0.182235896587371826171875 -0.231551706790924072265625 -0.0563373014330863924881143134371 +0.182235896587371826171875 0.231551706790924072265625 -0.0563373014330863924881143134371 +0.182357352972030622995092130623 -0.046732701361179351806640625 0.295062243938446044921875 +0.182357352972030622995092130623 0.046732701361179351806640625 0.295062243938446044921875 +0.182381594181060813220085492503 -0.0528335988521575969367738423443 0.777139186859130859375 +0.182381594181060813220085492503 0.0528335988521575969367738423443 0.777139186859130859375 +0.182398952543735504150390625 -0.377791003882884945941356136245 0.7392594516277313232421875 +0.182398952543735504150390625 0.377791003882884945941356136245 0.7392594516277313232421875 +0.182482397556304937191740123126 -0.561633586883544921875 0.539692020416259743420539507497 +0.182482397556304937191740123126 0.561633586883544921875 0.539692020416259743420539507497 +0.182524447888135904483064564374 -0.929909375309944108423110264994 -0.06673749722540378570556640625 +0.182524447888135904483064564374 0.929909375309944108423110264994 -0.06673749722540378570556640625 +0.182646000385284446032585492503 0 -0.0814891993999481284438601846887 +0.18269799649715423583984375 -0.16974399983882904052734375 0.01756249926984310150146484375 +0.18269799649715423583984375 0.16974399983882904052734375 0.01756249926984310150146484375 +0.182729700207710260562166126874 -0.801902711391448974609375 -0.365460312366485629009815738755 +0.182729700207710260562166126874 0.801902711391448974609375 -0.365460312366485629009815738755 +0.182737195491790793688835492503 -0.0510353982448577894737162807814 0.0632654011249542264083700615629 +0.182737195491790793688835492503 0.0510353982448577894737162807814 0.0632654011249542264083700615629 +0.182874658703804010562166126874 -0.29842399060726165771484375 0 +0.182874658703804010562166126874 0.29842399060726165771484375 0 +0.182944798469543479235710492503 -0.773114395141601629113381477509 0.0939447999000549427428552462516 +0.182944798469543479235710492503 0.773114395141601629113381477509 0.0939447999000549427428552462516 +0.18296425044536590576171875 -0.16972799599170684814453125 -0.014714750461280345916748046875 +0.18296425044536590576171875 0.16972799599170684814453125 -0.014714750461280345916748046875 +0.182991899549961090087890625 -0.0264394009485840811302104214064 -0.623149150609970114977897992503 +0.182991899549961090087890625 0.0264394009485840811302104214064 -0.623149150609970114977897992503 +0.18301700055599212646484375 -0.9606540203094482421875 -0.20892299711704254150390625 +0.18301700055599212646484375 0.9606540203094482421875 -0.20892299711704254150390625 +0.18306089937686920166015625 -0.0893605493009090451339559990629 0.401252406835556019171207253748 +0.18306089937686920166015625 0.0893605493009090451339559990629 0.401252406835556019171207253748 +0.18314449489116668701171875 -0.4324645102024078369140625 0.1715590059757232666015625 +0.18314449489116668701171875 0.4324645102024078369140625 0.1715590059757232666015625 +0.183150002360343955309929242503 -0.0877855017781257740416833712516 -0.511125987768173306591279470013 +0.183150002360343955309929242503 0.0877855017781257740416833712516 -0.511125987768173306591279470013 +0.18322150409221649169921875 -0.295368847250938371118422764994 0.0410724990069866180419921875 +0.18322150409221649169921875 0.295368847250938371118422764994 0.0410724990069866180419921875 +0.183376602828502655029296875 -0.930454725027084261768095529987 0.0559160517528653130958637973436 +0.183376602828502655029296875 0.930454725027084261768095529987 0.0559160517528653130958637973436 +0.183382847905158991030916126874 -0.294061949849128700940070757497 -0.0489723481237888322303852817186 +0.183382847905158991030916126874 0.294061949849128700940070757497 -0.0489723481237888322303852817186 +0.183410394191741960012720369377 -0.166236400604248046875 -0.314206790924072276727230246252 +0.183410394191741960012720369377 0.166236400604248046875 -0.314206790924072276727230246252 +0.183434557914733897820980246252 -0.564545142650604292455795985006 -0.264840556681156191753956363755 +0.183434557914733897820980246252 0.564545142650604292455795985006 -0.264840556681156191753956363755 +0.183460402488708512747095369377 -0.00812800005078315700168811730464 0.07922279834747314453125 +0.183460402488708512747095369377 0.00812800005078315700168811730464 0.07922279834747314453125 +0.183465000987052928582698996252 -0.178546500205993663445980246252 0.862821900844573996813835492503 +0.183465000987052928582698996252 0.178546500205993663445980246252 0.862821900844573996813835492503 +0.183545994758605973684595369377 -0.0743488013744354331313601846887 0.0279841989278793341899831403907 +0.183545994758605973684595369377 0.0743488013744354331313601846887 0.0279841989278793341899831403907 +0.183571207523345936163394753748 -0.564970207214355424341079014994 -0.0843215972185134832184161268742 +0.183571207523345936163394753748 0.564970207214355424341079014994 -0.0843215972185134832184161268742 +0.1836045049130916595458984375 -0.663722991943359375 0.297087751328945159912109375 +0.1836045049130916595458984375 0.663722991943359375 0.297087751328945159912109375 +0.183648204803466802426115123126 -0.0602509975433349609375 -0.0514115989208221435546875 +0.183648204803466802426115123126 0.0602509975433349609375 -0.0514115989208221435546875 +0.18365299701690673828125 -0.14617849886417388916015625 0.086043499410152435302734375 +0.18365299701690673828125 0.14617849886417388916015625 0.086043499410152435302734375 +0.183657595515251154116853626874 -0.190786054730415322033820757497 -0.228846108913421608654914507497 +0.183657595515251154116853626874 0.190786054730415322033820757497 -0.228846108913421608654914507497 +0.183761903643608087710603626874 -0.276538851857185352667301003748 0.110714796185493458136051003748 +0.183761903643608087710603626874 0.276538851857185352667301003748 0.110714796185493458136051003748 +0.183765445649623881951839621252 -0.493239989876747164654346988755 0.159512649476528184377954744377 +0.183765445649623881951839621252 0.493239989876747164654346988755 0.159512649476528184377954744377 +0.183766806125640863589509876874 -0.659131908416747958057158029987 -0.147562800347805000988898882497 +0.183766806125640863589509876874 0.659131908416747958057158029987 -0.147562800347805000988898882497 +0.183797997236251814401342130623 -0.118239900469779959935046065311 0.2055180072784423828125 +0.183797997236251814401342130623 0.118239900469779959935046065311 0.2055180072784423828125 +0.183910799026489268914730246252 -0.0750068008899688748458700615629 -0.02346999943256378173828125 +0.183910799026489268914730246252 0.0750068008899688748458700615629 -0.02346999943256378173828125 +0.183921754360198974609375 -0.38964195549488067626953125 0.129815094172954559326171875 +0.183921754360198974609375 0.38964195549488067626953125 0.129815094172954559326171875 +0.183956408500671381167634876874 -0.183124208450317377261384876874 -0.540948593616485617907585492503 +0.183956408500671381167634876874 0.183124208450317377261384876874 -0.540948593616485617907585492503 +0.183960402011871360095085492503 -0.133654797077178949527009876874 0.329081988334655795025440738755 +0.183960402011871360095085492503 0.133654797077178949527009876874 0.329081988334655795025440738755 +0.183989596366882335320980246252 -0.0592004001140594496299662807814 0.0514115989208221435546875 +0.183989596366882335320980246252 0.0592004001140594496299662807814 0.0514115989208221435546875 +0.184005504846572853772102007497 0 0.297728192806243852075454014994 +0.184008300304412841796875 -0.566308397054672174597556022491 -0.36801660060882568359375 +0.184008300304412841796875 0.566308397054672174597556022491 -0.36801660060882568359375 +0.184086501598358154296875 -0.15864424407482147216796875 -0.0586872510612010955810546875 +0.184086501598358154296875 0.15864424407482147216796875 -0.0586872510612010955810546875 +0.184118396043777471371427623126 -0.566659784317016579358039507497 0.0706913977861404335678585653113 +0.184118396043777471371427623126 0.566659784317016579358039507497 0.0706913977861404335678585653113 +0.18414175510406494140625 -0.072481252253055572509765625 -0.15276874601840972900390625 +0.18414175510406494140625 0.072481252253055572509765625 -0.15276874601840972900390625 +0.184216594696044927426115123126 -0.0669376015663147028167401231258 0.0397947996854782146125550923443 +0.184216594696044927426115123126 0.0669376015663147028167401231258 0.0397947996854782146125550923443 +0.184292995929718039782585492503 -0.0294824004173278829410431711722 0.0718811988830566489516726846887 +0.184292995929718039782585492503 0.0294824004173278829410431711722 0.0718811988830566489516726846887 +0.184307992458343505859375 -0.235769695043563820568977007497 0.0210530988872051245952565778907 +0.184307992458343505859375 0.235769695043563820568977007497 0.0210530988872051245952565778907 +0.184355604648590104543970369377 -0.0678408026695251492599325615629 -0.0375582009553909329513388115629 +0.184355604648590104543970369377 0.0678408026695251492599325615629 -0.0375582009553909329513388115629 +0.184381401538848882504240123126 -0.0383554011583328302581463731258 -0.0673228025436401339431924384371 +0.184381401538848882504240123126 0.0383554011583328302581463731258 -0.0673228025436401339431924384371 +0.184422703087329886706413617503 -0.450562742352485667840511496252 0.255892999470233917236328125 +0.184422703087329886706413617503 0.450562742352485667840511496252 0.255892999470233917236328125 +0.184426206350326526983707253748 -0.0603555008769035283844317518742 -0.2287884056568145751953125 +0.184426206350326526983707253748 0.0603555008769035283844317518742 -0.2287884056568145751953125 +0.184477950632572190725610994377 -0.179821796715259552001953125 0.368960863351821932720753238755 +0.184477950632572190725610994377 0.179821796715259552001953125 0.368960863351821932720753238755 +0.184490501880645751953125 -0.0660202503204345703125 0.15525649487972259521484375 +0.184490501880645751953125 0.0660202503204345703125 0.15525649487972259521484375 +0.184509001672267913818359375 -0.24444450438022613525390625 0.68461950123310089111328125 +0.184509001672267913818359375 0.24444450438022613525390625 0.68461950123310089111328125 +0.18454350531101226806640625 0 0.1686525046825408935546875 +0.184571099281311018502904630623 -0.020012699067592620849609375 0.235654199123382562808259876874 +0.184571099281311018502904630623 0.020012699067592620849609375 0.235654199123382562808259876874 +0.1846752464771270751953125 -0.12142725288867950439453125 0.116835497319698333740234375 +0.1846752464771270751953125 0.12142725288867950439453125 0.116835497319698333740234375 +0.1846809089183807373046875 -0.0595736995339393587967080634371 0.228788101673126215152009876874 +0.1846809089183807373046875 0.0595736995339393587967080634371 0.228788101673126215152009876874 +0.1847047507762908935546875 -0.13419525325298309326171875 0.101861499249935150146484375 +0.1847047507762908935546875 0.13419525325298309326171875 0.101861499249935150146484375 +0.184736108779907232113615123126 -0.235714495182037353515625 -0.017644800245761871337890625 +0.184736108779907232113615123126 0.235714495182037353515625 -0.017644800245761871337890625 +0.18476800620555877685546875 -0.3556390106678009033203125 0.2989675104618072509765625 +0.18476800620555877685546875 0.3556390106678009033203125 0.2989675104618072509765625 +0.184776198863983165399105246252 -0.076535999774932861328125 0 +0.184776198863983165399105246252 0.076535999774932861328125 0 +0.184792301058769203869758257497 -0.475279694795608498303352007497 -0.479542684555053666528579014994 +0.184792301058769203869758257497 0.475279694795608498303352007497 -0.479542684555053666528579014994 +0.184807491302490217721654630623 -0.158738708496093755551115123126 -0.175066494941711420230134876874 +0.184807491302490217721654630623 0.158738708496093755551115123126 -0.175066494941711420230134876874 +0.184830003976821893862947376874 -0.198264008760452276058927623126 -0.128566199541091913394197376874 +0.184830003976821893862947376874 0.198264008760452276058927623126 -0.128566199541091913394197376874 +0.184895899891853315866185880623 -0.199897953867912286929353626874 0.219896242022514315506143134371 +0.184895899891853315866185880623 0.199897953867912286929353626874 0.219896242022514315506143134371 +0.18516719341278076171875 -0.331447184085845947265625 -0.464602804183959938733039507497 +0.18516719341278076171875 0.331447184085845947265625 -0.464602804183959938733039507497 +0.1851797997951507568359375 -0.311552417278289806024105246252 0.478166985511779774054019753748 +0.1851797997951507568359375 0.311552417278289806024105246252 0.478166985511779774054019753748 +0.185188950598239893130525501874 -0.280029594898223876953125 0.299647352099418673443409488755 +0.185188950598239893130525501874 0.280029594898223876953125 0.299647352099418673443409488755 +0.185273891687393166272102007497 -0.273974040150642361712840511245 -0.114506699144840226600727817186 +0.185273891687393166272102007497 0.273974040150642361712840511245 -0.114506699144840226600727817186 +0.185410201549530029296875 -0.570633602142333939966079014994 0 +0.185410201549530029296875 0.570633602142333939966079014994 0 +0.185426655411720264776676003748 -0.794859638810157753674445757497 -0.237308108806610101870759876874 +0.185426655411720264776676003748 0.794859638810157753674445757497 -0.237308108806610101870759876874 +0.1854268014430999755859375 -0.241632306575775140933259876874 -0.57422171533107757568359375 +0.1854268014430999755859375 0.241632306575775140933259876874 -0.57422171533107757568359375 +0.185482707619667064324886496252 -0.430844688415527365954460492503 0.449965763092041004522769753748 +0.185482707619667064324886496252 0.430844688415527365954460492503 0.449965763092041004522769753748 +0.185491798818111425228849498126 0 0.880677902698516867907585492503 +0.18552599847316741943359375 -0.704464972019195556640625 -0.685060977935791015625 +0.18552599847316741943359375 0.704464972019195556640625 -0.685060977935791015625 +0.18555915355682373046875 -0.116947947442531577366686690311 0.272746959328651394915965511245 +0.18555915355682373046875 0.116947947442531577366686690311 0.272746959328651394915965511245 +0.185635799169540399722322376874 -0.663475382328033380652243522491 0.123853802680969224403462192186 +0.185635799169540399722322376874 0.663475382328033380652243522491 0.123853802680969224403462192186 +0.185679455101490031854183371252 -0.0446269981563091333587323106258 -0.515782290697097800524772992503 +0.185679455101490031854183371252 0.0446269981563091333587323106258 -0.515782290697097800524772992503 +0.1857506521046161651611328125 -0.366606888175010636743422764994 0.856501939892768793249899772491 +0.1857506521046161651611328125 0.366606888175010636743422764994 0.856501939892768793249899772491 +0.18575799465179443359375 -0.229781603813171392269865123126 0.269619202613830599712940738755 +0.18575799465179443359375 0.229781603813171392269865123126 0.269619202613830599712940738755 +0.185776489973068226202457253748 -0.27032880485057830810546875 0.6183926165103912353515625 +0.185776489973068226202457253748 0.27032880485057830810546875 0.6183926165103912353515625 +0.185865199565887456722990123126 -0.233473992347717290707365123126 -0.266353201866149913445980246252 +0.185865199565887456722990123126 0.233473992347717290707365123126 -0.266353201866149913445980246252 +0.185926048457622533627286998126 -0.172205100953578965627954744377 -0.371856147050857566149772992503 +0.185926048457622533627286998126 0.172205100953578965627954744377 -0.371856147050857566149772992503 +0.185969102382659901007144753748 -0.221313303709030156918302623126 0.0802238970994949285309161268742 +0.185969102382659901007144753748 0.221313303709030156918302623126 0.0802238970994949285309161268742 +0.186012804508209228515625 -0.465556812286376964227230246252 -0.623423194885253995067841970013 +0.186012804508209228515625 0.465556812286376964227230246252 -0.623423194885253995067841970013 +0.186140996217727644479467130623 -0.110553896427154532688952315311 -0.2076762020587921142578125 +0.186140996217727644479467130623 0.110553896427154532688952315311 -0.2076762020587921142578125 +0.186222892999649031198217130623 -0.0368394009768962873985209682814 -0.232301098108291609323217130623 +0.186222892999649031198217130623 0.0368394009768962873985209682814 -0.232301098108291609323217130623 +0.18623149394989013671875 -0.0331422500312328338623046875 0.16346074640750885009765625 +0.18623149394989013671875 0.0331422500312328338623046875 0.16346074640750885009765625 +0.186262404918670659847990123126 0 0.353986406326293967516960492503 +0.186293800175189983026058371252 0 -0.517488950490951560290397992503 +0.186305896937847159655632367503 -0.216773150861263280697599498126 0.469893041253089949194077235006 +0.186305896937847159655632367503 0.216773150861263280697599498126 0.469893041253089949194077235006 +0.186309194564819341488615123126 -0.0245455995202064521099050153907 -0.0684571981430053683181924384371 +0.186309194564819341488615123126 0.0245455995202064521099050153907 -0.0684571981430053683181924384371 +0.186319705843925459420873380623 -0.573443490266799860144431022491 0.355594420433044400287059261245 +0.186319705843925459420873380623 0.573443490266799860144431022491 0.355594420433044400287059261245 +0.186485008895397180728181751874 -0.402502736449241671490284488755 -0.475094097852706898077457253748 +0.186485008895397180728181751874 0.402502736449241671490284488755 -0.475094097852706898077457253748 +0.186517098546028159411491742503 0 0.517408666014671392296975227509 +0.18658649921417236328125 -0.442378997802734375 -0.13959300518035888671875 +0.18658649921417236328125 0.442378997802734375 -0.13959300518035888671875 +0.186613254249095916748046875 -0.447365446388721443859992632497 -0.817031326889991693640524772491 +0.186613254249095916748046875 0.447365446388721443859992632497 -0.817031326889991693640524772491 +0.1866489946842193603515625 -0.96664297580718994140625 0.17539300024509429931640625 +0.1866489946842193603515625 0.96664297580718994140625 0.17539300024509429931640625 +0.186658851057291019781558816248 -0.7870198786258697509765625 -0.498255985975265491827457253748 +0.186658851057291019781558816248 0.7870198786258697509765625 -0.498255985975265491827457253748 +0.186750400066375749075220369377 -0.332143211364746115954460492503 0.121676397323608409539730246252 +0.186750400066375749075220369377 0.332143211364746115954460492503 0.121676397323608409539730246252 +0.186756801605224620477230246252 -0.777896022796630948192841970013 0 +0.186756801605224620477230246252 0.777896022796630948192841970013 0 +0.186798202991485612356470369377 -0.0374859988689422649055238423443 0.0608377993106842054893412807814 +0.186798202991485612356470369377 0.0374859988689422649055238423443 0.0608377993106842054893412807814 +0.186912405490875260793970369377 -0.3270080089569091796875 -0.134645998477935791015625 +0.186912405490875260793970369377 0.3270080089569091796875 -0.134645998477935791015625 +0.186937594413757346423210492503 -0.682108783721923850329460492503 -0.373874402046203646587940738755 +0.186937594413757346423210492503 0.682108783721923850329460492503 -0.373874402046203646587940738755 +0.187024796009063742907585492503 -0.0464904010295867919921875 -0.0534824013710022000411825615629 +0.187024796009063742907585492503 0.0464904010295867919921875 -0.0534824013710022000411825615629 +0.187035751342773448602230246252 -0.357193109393119823113948996252 -0.374073141813278220446647992503 +0.187035751342773448602230246252 0.357193109393119823113948996252 -0.374073141813278220446647992503 +0.187157404422760020867855246252 -0.0162169992923736593082306711722 0.0686231970787048312088174384371 +0.187157404422760020867855246252 0.0162169992923736593082306711722 0.0686231970787048312088174384371 +0.1871623992919921875 -0.267748808860778841900440738755 -0.730260801315307683800881477509 +0.1871623992919921875 0.267748808860778841900440738755 -0.730260801315307683800881477509 +0.187193502485752116815120871252 -0.295267696678638447149722878748 0.547974056005477883068977007497 +0.187193502485752116815120871252 0.295267696678638447149722878748 0.547974056005477883068977007497 +0.187244099378585798776342130623 -0.1846911013126373291015625 -0.144321897625923151187166126874 +0.187244099378585798776342130623 0.1846911013126373291015625 -0.144321897625923151187166126874 +0.187278592586517328433259876874 -0.496285808086395219262954014994 -0.280405801534652721063167746252 +0.187278592586517328433259876874 0.496285808086395219262954014994 -0.280405801534652721063167746252 +0.187306747585535032785131193123 -0.576479950547218344958366742503 0.731497150659561112817641514994 +0.187306747585535032785131193123 0.576479950547218344958366742503 0.731497150659561112817641514994 +0.187352001667022705078125 -0.79016602039337158203125 0.5835549831390380859375 +0.187352001667022705078125 0.79016602039337158203125 0.5835549831390380859375 +0.18738450109958648681640625 -0.095429003238677978515625 -0.1352050006389617919921875 +0.18738450109958648681640625 0.095429003238677978515625 -0.1352050006389617919921875 +0.18741500377655029296875 -0.14872300624847412109375 -0.072505749762058258056640625 +0.18741500377655029296875 0.14872300624847412109375 -0.072505749762058258056640625 +0.187456595897674577200220369377 -0.0682861983776092557052450615629 0.0140353992581367503084122105861 +0.187456595897674577200220369377 0.0682861983776092557052450615629 0.0140353992581367503084122105861 +0.187469096481800073794588001874 -0.398141553997993502544971988755 -0.0940153487026691436767578125 +0.187469096481800073794588001874 0.398141553997993502544971988755 -0.0940153487026691436767578125 +0.187470495700836181640625 -0.16164399683475494384765625 0.03501474857330322265625 +0.187470495700836181640625 0.16164399683475494384765625 0.03501474857330322265625 +0.187509799003601096423210492503 -0.0685688018798828180511151231258 -0.01176320016384124755859375 +0.187509799003601096423210492503 0.0685688018798828180511151231258 -0.01176320016384124755859375 +0.187570792436599714791967130623 -0.136277702450752241647435880623 0.190382999181747419870092130623 +0.187570792436599714791967130623 0.136277702450752241647435880623 0.190382999181747419870092130623 +0.187595093250274652652009876874 -0.0123903002589941021310826485546 -0.2337833940982818603515625 +0.187595093250274652652009876874 0.0123903002589941021310826485546 -0.2337833940982818603515625 +0.187597300112247483694360994377 -0.503850063681602566845185720013 -0.115942200273275383692883622189 +0.187597300112247483694360994377 0.503850063681602566845185720013 -0.115942200273275383692883622189 +0.187600004673004167043970369377 -0.00825000032782554661159313269536 -0.068834602832794189453125 +0.187600004673004167043970369377 0.00825000032782554661159313269536 -0.068834602832794189453125 +0.187632492184638982601896373126 -0.341129264235496554302784488755 0.388490286469459544793636496252 +0.187632492184638982601896373126 0.341129264235496554302784488755 0.388490286469459544793636496252 +0.1877219974994659423828125 -0.449630391597747813836605246252 0.350132989883422840460269753748 +0.1877219974994659423828125 0.449630391597747813836605246252 0.350132989883422840460269753748 +0.187727849185466783010767244377 -0.401283895969390902447315738755 0.0789268501102924346923828125 +0.187727849185466783010767244377 0.401283895969390902447315738755 0.0789268501102924346923828125 +0.187775599956512467825220369377 0 0.0688498020172119140625 +0.187914597243070607968107310626 -0.136526154726743703671232310626 -0.817648130655288629675681022491 +0.187914597243070607968107310626 0.136526154726743703671232310626 -0.817648130655288629675681022491 +0.187931454181671120373664507497 -0.107678897678852081298828125 -0.274930942058563221319644753748 +0.187931454181671120373664507497 0.107678897678852081298828125 -0.274930942058563221319644753748 +0.18797175586223602294921875 -0.6786277592182159423828125 -0.258131258189678192138671875 +0.18797175586223602294921875 0.6786277592182159423828125 -0.258131258189678192138671875 +0.18798799812793731689453125 -0.4482004940509796142578125 0.117374502122402191162109375 +0.18798799812793731689453125 0.4482004940509796142578125 0.117374502122402191162109375 +0.1880617439746856689453125 -0.0550282485783100128173828125 -0.155256748199462890625 +0.1880617439746856689453125 0.0550282485783100128173828125 -0.155256748199462890625 +0.188093246519565576724275501874 -0.317353954911232027935596988755 -0.257696557044982899054019753748 +0.188093246519565576724275501874 0.317353954911232027935596988755 -0.257696557044982899054019753748 +0.188098409771919244937166126874 -0.67245781421661376953125 -0.04918409883975982666015625 +0.188098409771919244937166126874 0.67245781421661376953125 -0.04918409883975982666015625 +0.188170254230499267578125 -0.08121524751186370849609375 0.1431642472743988037109375 +0.188170254230499267578125 0.08121524751186370849609375 0.1431642472743988037109375 +0.18819899857044219970703125 -0.116412751376628875732421875 -0.116314999759197235107421875 +0.18819899857044219970703125 0.116412751376628875732421875 -0.116314999759197235107421875 +0.188202302157878892385767244377 -0.109084253758192070704602372189 0.50515408813953399658203125 +0.188202302157878892385767244377 0.109084253758192070704602372189 0.50515408813953399658203125 +0.18824599683284759521484375 -0.400749504566192626953125 -0.23229999840259552001953125 +0.18824599683284759521484375 0.400749504566192626953125 -0.23229999840259552001953125 +0.188260257244110107421875 -0.16185249388217926025390625 -0.0293577499687671661376953125 +0.188260257244110107421875 0.16185249388217926025390625 -0.0293577499687671661376953125 +0.1882688999176025390625 -0.221665191650390613897769753748 -0.0736161008477210915268429403113 +0.1882688999176025390625 0.221665191650390613897769753748 -0.0736161008477210915268429403113 +0.18836100399494171142578125 -0.13685099780559539794921875 -0.4424839913845062255859375 +0.18836100399494171142578125 0.13685099780559539794921875 -0.4424839913845062255859375 +0.188379597663879405633480246252 -0.0541245996952056940276776231258 -0.0397947996854782146125550923443 +0.188379597663879405633480246252 0.0541245996952056940276776231258 -0.0397947996854782146125550923443 +0.188387510180473310983373380623 -0.262301898002624489514289507497 0.134936551749706257208316628748 +0.188387510180473310983373380623 0.262301898002624489514289507497 0.134936551749706257208316628748 +0.188402998447418229543970369377 -0.0457794010639190687705912807814 0.0490770012140274089484925923443 +0.188402998447418229543970369377 0.0457794010639190687705912807814 0.0490770012140274089484925923443 +0.188411848247051261218132367503 -0.50747509300708770751953125 0.0973137021064758439559128078145 +0.188411848247051261218132367503 0.50747509300708770751953125 0.0973137021064758439559128078145 +0.188543403148651145251335492503 -0.0615310013294219984580912807814 -0.0257941991090774556949494211722 +0.188543403148651145251335492503 0.0615310013294219984580912807814 -0.0257941991090774556949494211722 +0.188581897318363195248380748126 -0.580401885509491011205795985006 0.2237637937068939208984375 +0.188581897318363195248380748126 0.580401885509491011205795985006 0.2237637937068939208984375 +0.188668142259120957815454744377 -0.227846851944923406430021373126 -0.463670355081558238641292746252 +0.188668142259120957815454744377 0.227846851944923406430021373126 -0.463670355081558238641292746252 +0.188678008317947371041967130623 -0.672831612825393610144431022491 0.0412062011659145299713458143742 +0.188678008317947371041967130623 0.672831612825393610144431022491 0.0412062011659145299713458143742 +0.188702201843261724301115123126 -0.0610418021678924560546875 0.0257941991090774556949494211722 +0.188702201843261724301115123126 0.0610418021678924560546875 0.0257941991090774556949494211722 +0.188740807771682728155582253748 -0.195316207408905012643529630623 0.535003209114074729235710492503 +0.188740807771682728155582253748 0.195316207408905012643529630623 0.535003209114074729235710492503 +0.188743451237678522280916126874 -0.222100898623466463943643134371 -0.193770852684974653756810880623 +0.188743451237678522280916126874 0.222100898623466463943643134371 -0.193770852684974653756810880623 +0.18875174224376678466796875 -0.0994260013103485107421875 0.7190182507038116455078125 +0.18875174224376678466796875 0.0994260013103485107421875 0.7190182507038116455078125 +0.188755202293396012747095369377 -0.137136805057525651418970369377 -0.324907588958740278783920985006 +0.188755202293396012747095369377 0.137136805057525651418970369377 -0.324907588958740278783920985006 +0.188788045942783366815120871252 -0.407624396681785572393863503748 0.0264865508303046247318146555472 +0.188788045942783366815120871252 0.407624396681785572393863503748 0.0264865508303046247318146555472 +0.188788591325283056088224498126 -0.49425999820232391357421875 -0.377578499913215626104801003748 +0.188788591325283056088224498126 0.49425999820232391357421875 -0.377578499913215626104801003748 +0.188963556289672846011384876874 -0.407177540659904468878238503748 -0.03161249868571758270263671875 +0.188963556289672846011384876874 0.407177540659904468878238503748 -0.03161249868571758270263671875 +0.1890006959438323974609375 -0.430816394090652421411391514994 0.518340218067169122839743522491 +0.1890006959438323974609375 0.430816394090652421411391514994 0.518340218067169122839743522491 +0.189018404483795171566740123126 -0.408960819244384765625 0.661077594757080166942841970013 +0.189018404483795171566740123126 0.408960819244384765625 0.661077594757080166942841970013 +0.189023196697235107421875 -0.0534756004810333293586488423443 0.0375582009553909329513388115629 +0.189023196697235107421875 0.0534756004810333293586488423443 0.0375582009553909329513388115629 +0.189079199731349956170589621252 -0.581914794445037908410256477509 -0.660018575191497869347756477509 +0.189079199731349956170589621252 0.581914794445037908410256477509 -0.660018575191497869347756477509 +0.189117604494094843081697376874 -0.310765707492828335833934261245 -0.598045688867568925317641514994 +0.189117604494094843081697376874 0.310765707492828335833934261245 -0.598045688867568925317641514994 +0.189210601150989532470703125 -0.773861396312713667455795985006 0.41873399913311004638671875 +0.189210601150989532470703125 0.773861396312713667455795985006 0.41873399913311004638671875 +0.189308603107929213082982755623 -0.804268288612365656042868522491 0.199536653608083730526701060626 +0.189308603107929213082982755623 0.804268288612365656042868522491 0.199536653608083730526701060626 +0.189442598819732688220085492503 -0.0324916005134582505653462192186 -0.0552792012691497858245526231258 +0.189442598819732688220085492503 0.0324916005134582505653462192186 -0.0552792012691497858245526231258 +0.189543557167053206002904630623 -0.215408197045326210705695757497 0.200430655479431146792634876874 +0.189543557167053206002904630623 0.215408197045326210705695757497 0.200430655479431146792634876874 +0.1895450055599212646484375 -0.262053012847900390625 0.3813144862651824951171875 +0.1895450055599212646484375 0.262053012847900390625 0.3813144862651824951171875 +0.18955729901790618896484375 -0.785751661658287026135383257497 0.499161353707313515393195757497 +0.18955729901790618896484375 0.785751661658287026135383257497 0.499161353707313515393195757497 +0.189737391471862776315404630623 -0.424260592460632302014289507497 -0.379476606845855712890625 +0.189737391471862776315404630623 0.424260592460632302014289507497 -0.379476606845855712890625 +0.189767605811357487066715066248 -0.0684853527694940511505450331242 -0.8257103860378265380859375 +0.189767605811357487066715066248 0.0684853527694940511505450331242 -0.8257103860378265380859375 +0.189775955677032454049779630623 -0.166676649451255792788728626874 -0.242289257049560530221654630623 +0.189775955677032454049779630623 0.166676649451255792788728626874 -0.242289257049560530221654630623 +0.1898925006389617919921875 -0.13796375691890716552734375 -0.0860629975795745849609375 +0.1898925006389617919921875 0.13796375691890716552734375 -0.0860629975795745849609375 +0.189933907985687239206029630623 -0.209110504388809209652677623126 0.10098449885845184326171875 +0.189933907985687239206029630623 0.209110504388809209652677623126 0.10098449885845184326171875 +0.189958596229553244860710492503 -0.0242283999919891378238556711722 0.0576951980590820340255575615629 +0.189958596229553244860710492503 0.0242283999919891378238556711722 0.0576951980590820340255575615629 +0.189970493316650390625 -0.3394534885883331298828125 -0.3141374886035919189453125 +0.189970493316650390625 0.3394534885883331298828125 -0.3141374886035919189453125 +0.19002449512481689453125 -0.38502676784992218017578125 -0.6149347722530364990234375 +0.19002449512481689453125 0.38502676784992218017578125 -0.6149347722530364990234375 +0.190030807256698602847322376874 -0.153360593318939197882144753748 0.17426669597625732421875 +0.190030807256698602847322376874 0.153360593318939197882144753748 0.17426669597625732421875 +0.190050297975540155581697376874 -0.138078001141548140084935880623 -0.186588603258132923468082253748 +0.190050297975540155581697376874 0.138078001141548140084935880623 -0.186588603258132923468082253748 +0.19010174274444580078125 -0.16236175596714019775390625 0 +0.19010174274444580078125 0.16236175596714019775390625 0 +0.1901692450046539306640625 -0.42338101565837860107421875 0.58913849294185638427734375 +0.1901692450046539306640625 0.42338101565837860107421875 0.58913849294185638427734375 +0.190211594104766845703125 -0.0618026018142700250823651231258 0 +0.190211594104766845703125 0.0618026018142700250823651231258 0 +0.19035799801349639892578125 -0.413554012775421142578125 0.20672850310802459716796875 +0.19035799801349639892578125 0.413554012775421142578125 0.20672850310802459716796875 +0.190386402606964100225894753748 0 -0.828404036164283708032485264994 +0.190458002686500565969751619377 -0.365474689006805408819644753748 -0.180704243481159210205078125 +0.190458002686500565969751619377 0.365474689006805408819644753748 -0.180704243481159210205078125 +0.190656006336212158203125 -0.2612459957599639892578125 -0.3813144862651824951171875 +0.190656006336212158203125 0.2612459957599639892578125 -0.3813144862651824951171875 +0.190674006938934326171875 -0.095902748405933380126953125 0.13017724454402923583984375 +0.190674006938934326171875 0.095902748405933380126953125 0.13017724454402923583984375 +0.1907725036144256591796875 -0.03788650035858154296875 -0.15706850588321685791015625 +0.1907725036144256591796875 0.03788650035858154296875 -0.15706850588321685791015625 +0.1907874047756195068359375 -0.707303720712661787572983485006 -0.522800999879837080541733485006 +0.1907874047756195068359375 0.707303720712661787572983485006 -0.522800999879837080541733485006 +0.190799942612648015805021373126 -0.514827498793602011950554242503 0.0323763009160757120330487168758 +0.190799942612648015805021373126 0.514827498793602011950554242503 0.0323763009160757120330487168758 +0.190846802294254297427400501874 -0.823538696765899635998664507497 0.3088062107563018798828125 +0.190846802294254297427400501874 0.823538696765899635998664507497 0.3088062107563018798828125 +0.190898555517196671926782869377 -0.249014702439308177606136496252 -0.322567203640937827380241742503 +0.190898555517196671926782869377 0.249014702439308177606136496252 -0.322567203640937827380241742503 +0.190997391939163235763388115629 -0.514321500062942527087272992503 -0.038644649088382720947265625 +0.190997391939163235763388115629 0.514321500062942527087272992503 -0.038644649088382720947265625 +0.1910080015659332275390625 -0.3746919929981231689453125 0.2704105079174041748046875 +0.1910080015659332275390625 0.3746919929981231689453125 0.2704105079174041748046875 +0.1910107433795928955078125 -0.58788000047206878662109375 0.42474974691867828369140625 +0.1910107433795928955078125 0.58788000047206878662109375 0.42474974691867828369140625 +0.19102723896503448486328125 -0.200532741844654083251953125 -0.6969899833202362060546875 +0.19102723896503448486328125 0.200532741844654083251953125 -0.6969899833202362060546875 +0.191057598590850835629240123126 -0.588004016876220725329460492503 -0.507688808441162153783920985006 +0.191057598590850835629240123126 0.588004016876220725329460492503 -0.507688808441162153783920985006 +0.191144102811813348941072376874 -0.227380496263504011666967130623 0.0419762983918189960808042826557 +0.191144102811813348941072376874 0.227380496263504011666967130623 0.0419762983918189960808042826557 +0.191150106489658355712890625 -0.359786689281463623046875 -0.802505725622177146227897992503 +0.191150106489658355712890625 0.359786689281463623046875 -0.802505725622177146227897992503 +0.191222855448722833804353626874 -0.285681208968162514416633257497 0.0657268516719341222565020643742 +0.191222855448722833804353626874 0.285681208968162514416633257497 0.0657268516719341222565020643742 +0.191225248575210587942407869377 -0.373864960670471202508480246252 0.161733596026897435971036998126 +0.191225248575210587942407869377 0.373864960670471202508480246252 0.161733596026897435971036998126 +0.191231405735015874691740123126 -0.00812840014696121319903721058608 0.058004200458526611328125 +0.191231405735015874691740123126 0.00812840014696121319903721058608 0.058004200458526611328125 +0.191249808669090248791633257497 -0.260222202539443947522102007497 -0.134936895966529829538060880623 +0.191249808669090248791633257497 0.260222202539443947522102007497 -0.134936895966529829538060880623 +0.19128619134426116943359375 0 0.673357284069061257092414507497 +0.191339857876300811767578125 -0.17169685661792755126953125 0.59700028598308563232421875 +0.191339857876300811767578125 0.17169685661792755126953125 0.59700028598308563232421875 +0.19134199619293212890625 -0.461939513683319091796875 0 +0.19134199619293212890625 0.461939513683319091796875 0 +0.191354405879974376336605246252 -0.016300000250339508056640625 -0.0558369994163513197471537807814 +0.191354405879974376336605246252 0.016300000250339508056640625 -0.0558369994163513197471537807814 +0.191395354270935069695980246252 -0.139054955542087549380525501874 -0.382794302701950084344417746252 +0.191395354270935069695980246252 0.139054955542087549380525501874 -0.382794302701950084344417746252 +0.19140160083770751953125 -0.268925595283508289679019753748 -0.225930404663085948602230246252 +0.19140160083770751953125 0.268925595283508289679019753748 -0.225930404663085948602230246252 +0.191408002376556418688835492503 -0.0402372002601623576789613423443 -0.04176039993762969970703125 +0.191408002376556418688835492503 0.0402372002601623576789613423443 -0.04176039993762969970703125 +0.191415596008300770147769753748 0 0.230997902154922468698217130623 +0.1914584934711456298828125 -0.0788591980934143094161825615629 0.217082691192626936471654630623 +0.1914584934711456298828125 0.0788591980934143094161825615629 0.217082691192626936471654630623 +0.19146375358104705810546875 -0.151868999004364013671875 0.0527010001242160797119140625 +0.19146375358104705810546875 0.151868999004364013671875 0.0527010001242160797119140625 +0.191465105116367356741235994377 -0.30037455260753631591796875 0.274984198808670032843082253748 +0.191465105116367356741235994377 0.30037455260753631591796875 0.274984198808670032843082253748 +0.1915007531642913818359375 -0.1265729963779449462890625 -0.099029250442981719970703125 +0.1915007531642913818359375 0.1265729963779449462890625 -0.099029250442981719970703125 +0.19151149690151214599609375 -0.4581219851970672607421875 0.058715499937534332275390625 +0.19151149690151214599609375 0.4581219851970672607421875 0.058715499937534332275390625 +0.19157774746417999267578125 -0.049596250057220458984375 0.15276825428009033203125 +0.19157774746417999267578125 0.049596250057220458984375 0.15276825428009033203125 +0.19160349667072296142578125 -0.456490993499755859375 -0.0700294971466064453125 +0.19160349667072296142578125 0.456490993499755859375 -0.0700294971466064453125 +0.191614648699760442562833873126 -0.224467989802360518014623380623 0.797118085622787408972556022491 +0.191614648699760442562833873126 0.224467989802360518014623380623 0.797118085622787408972556022491 +0.191679203510284446032585492503 -0.248094391822814952508480246252 0.248411202430725119860710492503 +0.191679203510284446032585492503 0.248094391822814952508480246252 0.248411202430725119860710492503 +0.191711900383234018496736439374 -0.217451206594705570562808816248 -0.9046888053417205810546875 +0.191711900383234018496736439374 0.217451206594705570562808816248 -0.9046888053417205810546875 +0.19172774255275726318359375 -0.01651049964129924774169921875 0.15958650410175323486328125 +0.19172774255275726318359375 0.01651049964129924774169921875 0.15958650410175323486328125 +0.19179379940032958984375 -0.0549380004405975383430238423443 -0.0140353992581367503084122105861 +0.19179379940032958984375 0.0549380004405975383430238423443 -0.0140353992581367503084122105861 +0.191807997226715098992855246252 -0.0801464021205902099609375 0.341739988327026400494190738755 +0.191807997226715098992855246252 0.0801464021205902099609375 0.341739988327026400494190738755 +0.191818892955780029296875 -0.139364400506019586734041126874 0.658622300624847389904914507497 +0.191818892955780029296875 0.139364400506019586734041126874 0.658622300624847389904914507497 +0.191829603910446178094417746252 -0.590400874614715576171875 0.651635116338729836193977007497 +0.191829603910446178094417746252 0.590400874614715576171875 0.651635116338729836193977007497 +0.191850602626800537109375 -0.0321240007877349881271200615629 0.0464910000562667874435263115629 +0.191850602626800537109375 0.0321240007877349881271200615629 0.0464910000562667874435263115629 +0.191860198974609375 -0.246393010020256014724893134371 0.158051253855228418521150501874 +0.191860198974609375 0.246393010020256014724893134371 0.158051253855228418521150501874 +0.191955745220184326171875 -0.284258800745010364874332253748 -0.0696412488818168584625567518742 +0.191955745220184326171875 0.284258800745010364874332253748 -0.0696412488818168584625567518742 +0.191993200778961203845085492503 0 -0.0560234010219574016242738423443 +0.192002797126770041735710492503 -0.0547406017780303968955912807814 0.01176320016384124755859375 +0.192002797126770041735710492503 0.0547406017780303968955912807814 0.01176320016384124755859375 +0.192047807574272144659488503748 -0.139528904855251295602514005623 -0.6585207879543304443359375 +0.192047807574272144659488503748 0.139528904855251295602514005623 -0.6585207879543304443359375 +0.19213099777698516845703125 -0.978851974010467529296875 -0.070249997079372406005859375 +0.19213099777698516845703125 0.978851974010467529296875 -0.070249997079372406005859375 +0.192169207334518421514957253748 -0.0903762012720108059982138115629 -0.211903506517410272769197376874 +0.192169207334518421514957253748 0.0903762012720108059982138115629 -0.211903506517410272769197376874 +0.192193400859832774774105246252 -0.0477347999811172513107138115629 -0.0279841989278793341899831403907 +0.192193400859832774774105246252 0.0477347999811172513107138115629 -0.0279841989278793341899831403907 +0.192252302169799799136384876874 -0.227595305442810036389289507497 -0.035204999148845672607421875 +0.192252302169799799136384876874 0.227595305442810036389289507497 -0.035204999148845672607421875 +0.192347551882267014944360994377 -0.0300190486013889312744140625 0.405710560083389293328792746252 +0.192347551882267014944360994377 0.0300190486013889312744140625 0.405710560083389293328792746252 +0.192395341396331770456029630623 -0.0701281018555164337158203125 0.283841609954833984375 +0.192395341396331770456029630623 0.0701281018555164337158203125 0.283841609954833984375 +0.192489302158355718441740123126 -0.196048504114151006527677623126 0.12046949565410614013671875 +0.192489302158355718441740123126 0.196048504114151006527677623126 0.12046949565410614013671875 +0.192490804195404041632144753748 -0.0796745985746383639236611884371 0.562671589851379327917868522491 +0.192490804195404041632144753748 0.0796745985746383639236611884371 0.562671589851379327917868522491 +0.192503154277801513671875 -0.139861397445201873779296875 0.256673556566238414422542746252 +0.192503154277801513671875 0.139861397445201873779296875 0.256673556566238414422542746252 +0.1925075054168701171875 -0.098635502159595489501953125 -0.4507904946804046630859375 +0.1925075054168701171875 0.098635502159595489501953125 -0.4507904946804046630859375 +0.1925404965877532958984375 -0.079193003475666046142578125 -0.1384074985980987548828125 +0.1925404965877532958984375 0.079193003475666046142578125 -0.1384074985980987548828125 +0.19255374372005462646484375 -0.02056024968624114990234375 -0.1581149995326995849609375 +0.19255374372005462646484375 0.02056024968624114990234375 -0.1581149995326995849609375 +0.192609004676342010498046875 -0.6914392411708831787109375 0.217517249286174774169921875 +0.192609004676342010498046875 0.6914392411708831787109375 0.217517249286174774169921875 +0.192612397670745866262720369377 -0.317059206962585493627670985006 0.149578797817230241262720369377 +0.192612397670745866262720369377 0.317059206962585493627670985006 0.149578797817230241262720369377 +0.192626154422760015316740123126 -0.819281840324401877673210492503 -0.11905014514923095703125 +0.192626154422760015316740123126 0.819281840324401877673210492503 -0.11905014514923095703125 +0.192646002769470220394865123126 -0.160386002063751226254240123126 0.31171119213104248046875 +0.192646002769470220394865123126 0.160386002063751226254240123126 0.31171119213104248046875 +0.192821197211742401123046875 -0.593437632918357826916633257497 -0.1820766925811767578125 +0.192821197211742401123046875 0.593437632918357826916633257497 -0.1820766925811767578125 +0.192824399471282964535490123126 -0.0398656010627746609786825615629 0.035064399242401123046875 +0.192824399471282964535490123126 0.0398656010627746609786825615629 0.035064399242401123046875 +0.192875194549560563528345369377 -0.0474166005849838284591513115629 0.02346999943256378173828125 +0.192875194549560563528345369377 0.0474166005849838284591513115629 0.02346999943256378173828125 +0.192881350219249708688451505623 -0.8464528620243072509765625 -0.385763663053512562139957253748 +0.192881350219249708688451505623 0.8464528620243072509765625 -0.385763663053512562139957253748 +0.1929162442684173583984375 -0.15273074805736541748046875 -0.044233500957489013671875 +0.1929162442684173583984375 0.15273074805736541748046875 -0.044233500957489013671875 +0.1929984986782073974609375 -0.06662750244140625 0.456412494182586669921875 +0.1929984986782073974609375 0.06662750244140625 0.456412494182586669921875 +0.1930280029773712158203125 -0.97942602634429931640625 0.0588590018451213836669921875 +0.1930280029773712158203125 0.97942602634429931640625 0.0588590018451213836669921875 +0.19312830269336700439453125 -0.400014004111290011334034488755 0.782745301723480224609375 +0.19312830269336700439453125 0.400014004111290011334034488755 0.782745301723480224609375 +0.193148392438888538702457253748 -0.0399765014648437513877787807814 0.226043093204498279913394753748 +0.193148392438888538702457253748 0.0399765014648437513877787807814 0.226043093204498279913394753748 +0.1932082474231719970703125 0 -0.15865249931812286376953125 +0.193265998363494867495759876874 -0.515908205509185813220085492503 0.237670201063156116827457253748 +0.193265998363494867495759876874 0.515908205509185813220085492503 0.237670201063156116827457253748 +0.193294498324394214971988503748 -0.229601049423217767886384876874 0.180057504773139948062166126874 +0.193294498324394214971988503748 0.229601049423217767886384876874 0.180057504773139948062166126874 +0.193469506502151472604467130623 -0.595447999238967851098891514994 0.31305049359798431396484375 +0.193469506502151472604467130623 0.595447999238967851098891514994 0.31305049359798431396484375 +0.193505394458770768606470369377 -0.208894501626491563284204744377 0.348452103137969981805355246252 +0.193505394458770768606470369377 0.208894501626491563284204744377 0.348452103137969981805355246252 +0.193573257327079778500333873126 -0.0432678986340761170814595004686 0.618996945023536748742287727509 +0.193573257327079778500333873126 0.0432678986340761170814595004686 0.618996945023536748742287727509 +0.193576800823211686575220369377 -0.595778417587280340050881477509 0.497569608688354536596420985006 +0.193576800823211686575220369377 0.595778417587280340050881477509 0.497569608688354536596420985006 +0.193581998348236083984375 -0.1661694943904876708984375 0.4300160109996795654296875 +0.193581998348236083984375 0.1661694943904876708984375 0.4300160109996795654296875 +0.193633800745010381527677623126 -0.210185694694519031866519753748 -0.0912572979927062932770098768742 +0.193633800745010381527677623126 0.210185694694519031866519753748 -0.0912572979927062932770098768742 +0.193657501041889168469367632497 -0.188465750217437721936164507497 0.910756450891494706567641514994 +0.193657501041889168469367632497 0.188465750217437721936164507497 0.910756450891494706567641514994 +0.193742203712463395559595369377 -0.0161144003272056593467631557814 0.0469493985176086467414613423443 +0.193742203712463395559595369377 0.0161144003272056593467631557814 0.0469493985176086467414613423443 +0.193770593404769903012052623126 -0.166421091556549077816740123126 0.157343405485153187139957253748 +0.193770593404769903012052623126 0.166421091556549077816740123126 0.157343405485153187139957253748 +0.193779605627059925421207253748 -0.181721699237823469674779630623 0.139379703998565668277009876874 +0.193779605627059925421207253748 0.181721699237823469674779630623 0.139379703998565668277009876874 +0.193780443817377079351871316248 -0.0561356987804174437095561245314 0.8257103860378265380859375 +0.193780443817377079351871316248 0.0561356987804174437095561245314 0.8257103860378265380859375 +0.193783605098724387438835492503 -0.206446003913879405633480246252 -0.282538390159606966900440738755 +0.193783605098724387438835492503 0.206446003913879405633480246252 -0.282538390159606966900440738755 +0.193887547403573973214818693123 -0.5967356860637664794921875 0.573422771692275956567641514994 +0.193887547403573973214818693123 0.5967356860637664794921875 0.573422771692275956567641514994 +0.19392450153827667236328125 -0.1067830026149749755859375 0.11614950001239776611328125 +0.19392450153827667236328125 0.1067830026149749755859375 0.11614950001239776611328125 +0.193980002403259299548210492503 -0.312080407142639182360710492503 -0.158043205738067626953125 +0.193980002403259299548210492503 0.312080407142639182360710492503 -0.158043205738067626953125 +0.194038403034210216180355246252 -0.0245598003268241889263112653907 -0.0417843997478485121299662807814 +0.194038403034210216180355246252 0.0245598003268241889263112653907 -0.0417843997478485121299662807814 +0.19415749609470367431640625 -0.1410630047321319580078125 0.0700294971466064453125 +0.19415749609470367431640625 0.1410630047321319580078125 0.0700294971466064453125 +0.194215705990791298596320757497 -0.0835355505347251808823116903113 -0.278930407762527421411391514994 +0.194215705990791298596320757497 0.0835355505347251808823116903113 -0.278930407762527421411391514994 +0.194278192520141584909154630623 -0.165555900335311895199552623126 -0.157629901170730585269197376874 +0.194278192520141584909154630623 0.165555900335311895199552623126 -0.157629901170730585269197376874 +0.19437420368194580078125 0 0.0471026003360748291015625 +0.194378848373889911993472878748 -0.821434044837951682360710492503 0.0998163498938083593170489393742 +0.194378848373889911993472878748 0.821434044837951682360710492503 0.0998163498938083593170489393742 +0.194474196434021001644865123126 -0.0466883987188339288909588731258 0 +0.194474196434021001644865123126 0.0466883987188339288909588731258 0 +0.19459550082683563232421875 -0.100837253034114837646484375 -0.120268248021602630615234375 +0.19459550082683563232421875 0.100837253034114837646484375 -0.120268248021602630615234375 +0.194834005832672130242855246252 -0.339210796356201216283920985006 -0.0835211992263794056334802462516 +0.194834005832672130242855246252 0.339210796356201216283920985006 -0.0835211992263794056334802462516 +0.194834697246551502569644753748 -0.228121501207351667916967130623 0 +0.194834697246551502569644753748 0.228121501207351667916967130623 0 +0.194836199283599853515625 -0.471858000755310036389289507497 0.315259802341461170538394753748 +0.194836199283599853515625 0.471858000755310036389289507497 0.315259802341461170538394753748 +0.194866751134395610467464621252 -0.460827252268791232037159488755 0.414928165078163158074886496252 +0.194866751134395610467464621252 0.460827252268791232037159488755 0.414928165078163158074886496252 +0.194939854741096485479801003748 -0.289956444501876797747996761245 0.0205856002867221832275390625 +0.194939854741096485479801003748 0.289956444501876797747996761245 0.0205856002867221832275390625 +0.1950016021728515625 -0.342134809494018587994190738755 0.0701291978359222384353799384371 +0.1950016021728515625 0.342134809494018587994190738755 0.0701291978359222384353799384371 +0.195149351656436931268245871252 -0.404133957624435435906917746252 -0.317950588464736949578792746252 +0.195149351656436931268245871252 0.404133957624435435906917746252 -0.317950588464736949578792746252 +0.195155459642410267218082253748 -0.289501452445983853412059261245 -0.0245619487017393091365935475778 +0.195155459642410267218082253748 0.289501452445983853412059261245 -0.0245619487017393091365935475778 +0.195209956169128423519865123126 -0.60079826414585113525390625 0.153084748983383173159822376874 +0.195209956169128423519865123126 0.60079826414585113525390625 0.153084748983383173159822376874 +0.1953015029430389404296875 -0.059537999331951141357421875 -0.456412494182586669921875 +0.1953015029430389404296875 0.059537999331951141357421875 -0.456412494182586669921875 +0.1953105032444000244140625 -0.141899797320365894659488503748 -0.253413301706314098016292746252 +0.1953105032444000244140625 0.141899797320365894659488503748 -0.253413301706314098016292746252 +0.195331203937530534231470369377 -0.00826020017266273533229625769536 -0.0421606004238128662109375 +0.195331203937530534231470369377 0.00826020017266273533229625769536 -0.0421606004238128662109375 +0.195382404327392594778345369377 -0.0322008013725280789474325615629 -0.02808620035648345947265625 +0.195382404327392594778345369377 0.0322008013725280789474325615629 -0.02808620035648345947265625 +0.195402204990386962890625 -0.0242382004857063307334819057814 0.0350784003734588636924662807814 +0.195402204990386962890625 0.0242382004857063307334819057814 0.0350784003734588636924662807814 +0.1954109966754913330078125 -0.342681598663330089227230246252 0.452088582515716541632144753748 +0.1954109966754913330078125 0.342681598663330089227230246252 0.452088582515716541632144753748 +0.19551299512386322021484375 -0.15480999648571014404296875 0.017565749585628509521484375 +0.19551299512386322021484375 0.15480999648571014404296875 0.017565749585628509521484375 +0.19552700221538543701171875 -0.385901987552642822265625 0.901580989360809326171875 +0.19552700221538543701171875 0.385901987552642822265625 0.901580989360809326171875 +0.195527994632720969470085492503 -0.0396447986364364679534588731258 -0.0140395998954772963096537807814 +0.195527994632720969470085492503 0.0396447986364364679534588731258 -0.0140395998954772963096537807814 +0.195573747158050537109375 -0.06566475331783294677734375 0.14120574295520782470703125 +0.195573747158050537109375 0.06566475331783294677734375 0.14120574295520782470703125 +0.195608401298522971423210492503 -0.02669639885425567626953125 0.347885990142822287829460492503 +0.195608401298522971423210492503 0.02669639885425567626953125 0.347885990142822287829460492503 +0.195684300363063806704744251874 -0.1050484478473663330078125 -0.3913726508617401123046875 +0.195684300363063806704744251874 0.1050484478473663330078125 -0.3913726508617401123046875 +0.195716404914855979235710492503 -0.039454400539398193359375 0.0117655999958515174175222028907 +0.195716404914855979235710492503 0.039454400539398193359375 0.0117655999958515174175222028907 +0.195718953013420099429353626874 -0.02335934899747371673583984375 0.289220404624938920434829014994 +0.195718953013420099429353626874 0.02335934899747371673583984375 0.289220404624938920434829014994 +0.19575925171375274658203125 -0.15479600429534912109375 -0.01471650041639804840087890625 +0.19575925171375274658203125 0.15479600429534912109375 -0.01471650041639804840087890625 +0.19576275348663330078125 0 0.155489504337310791015625 +0.1957762539386749267578125 -0.12949199974536895751953125 0.086043499410152435302734375 +0.1957762539386749267578125 0.12949199974536895751953125 0.086043499410152435302734375 +0.1957775056362152099609375 -0.3793235123157501220703125 -0.2603555023670196533203125 +0.1957775056362152099609375 0.3793235123157501220703125 -0.2603555023670196533203125 +0.195791405439376814401342130623 -0.142249202728271489926115123126 -0.549027013778686456824118522491 +0.195791405439376814401342130623 0.142249202728271489926115123126 -0.549027013778686456824118522491 +0.195796898752450931890933816248 0 0.929604452848434403833266514994 +0.195844805240631109066740123126 -0.707971191406250088817841970013 0.316893601417541526110710492503 +0.195844805240631109066740123126 0.707971191406250088817841970013 0.316893601417541526110710492503 +0.195950147509574901238948996252 -0.367124453186988886077557481258 0.359615838527679476666065738755 +0.195950147509574901238948996252 0.367124453186988886077557481258 0.359615838527679476666065738755 +0.196007204055786143914730246252 -0.347889995574951205181690738755 0.0235311999917030348350444057814 +0.196007204055786143914730246252 0.347889995574951205181690738755 0.0235311999917030348350444057814 +0.196017794311046628097372490629 -0.187785947322845481188835492503 -0.478344351053237970550213731258 +0.196017794311046628097372490629 0.187785947322845481188835492503 -0.478344351053237970550213731258 +0.196026194095611588918970369377 -0.0319222003221511854698100307814 0.0235515996813774122764506557814 +0.196026194095611588918970369377 0.0319222003221511854698100307814 0.0235515996813774122764506557814 +0.196038490533828713147102007497 -0.0848329976201057378570880018742 -0.666612094640731789318977007497 +0.196038490533828713147102007497 0.0848329976201057378570880018742 -0.666612094640731789318977007497 +0.196071302890777593441740123126 -0.119482205808162697535657059689 0.387014409899711642193409488755 +0.196071302890777593441740123126 0.119482205808162697535657059689 0.387014409899711642193409488755 +0.19616425037384033203125 -0.11710675060749053955078125 0.10151650011539459228515625 +0.19616425037384033203125 0.11710675060749053955078125 0.10151650011539459228515625 +0.196167004108428938424779630623 -0.291121208667755093646434261245 -0.486586797237396229132144753748 +0.196167004108428938424779630623 0.291121208667755093646434261245 -0.486586797237396229132144753748 +0.196253204345703147204460492503 -0.347413611412048350945980246252 -0.0280791997909545926193075615629 +0.196253204345703147204460492503 0.347413611412048350945980246252 -0.0280791997909545926193075615629 +0.196254095435142494885383257497 -0.245215955376625049932926003748 -0.154445196688175190313785378748 +0.196254095435142494885383257497 0.245215955376625049932926003748 -0.154445196688175190313785378748 +0.196317493915557861328125 -0.3919200003147125244140625 0.24053649604320526123046875 +0.196317493915557861328125 0.3919200003147125244140625 0.24053649604320526123046875 +0.196334105730056773797542746252 -0.841616088151931784899772992503 -0.251267409324646029400440738755 +0.196334105730056773797542746252 0.841616088151931784899772992503 -0.251267409324646029400440738755 +0.1964350044727325439453125 -0.4709109961986541748046875 -0.860032975673675537109375 +0.1964350044727325439453125 0.4709109961986541748046875 -0.860032975673675537109375 +0.19648300111293792724609375 -0.82844197750091552734375 -0.52447998523712158203125 +0.19648300111293792724609375 0.82844197750091552734375 -0.52447998523712158203125 +0.19656549394130706787109375 -0.14281199872493743896484375 -0.0588787496089935302734375 +0.19656549394130706787109375 0.14281199872493743896484375 -0.0588787496089935302734375 +0.196593743562698375360042746252 -0.319034707546234141961605246252 0.249133953452110284976228626874 +0.196593743562698375360042746252 0.319034707546234141961605246252 0.249133953452110284976228626874 +0.196618402004241965563835492503 -0.265135598182678233758480246252 0.225929999351501487048210492503 +0.196618402004241965563835492503 0.265135598182678233758480246252 0.225929999351501487048210492503 +0.196651196479797368832365123126 -0.109875595569610601254240123126 -0.33053839206695556640625 +0.196651196479797368832365123126 0.109875595569610601254240123126 -0.33053839206695556640625 +0.196676397323608420641960492503 -0.00813539996743202313556064808608 0.0353866010904312147666850307814 +0.196676397323608420641960492503 0.00813539996743202313556064808608 0.0353866010904312147666850307814 +0.1967065036296844482421875 -0.02033700048923492431640625 -0.4592309892177581787109375 +0.1967065036296844482421875 0.02033700048923492431640625 -0.4592309892177581787109375 +0.196795892715454084909154630623 -0.199936109781265247686832253748 -0.20927725732326507568359375 +0.196795892715454084909154630623 0.199936109781265247686832253748 -0.20927725732326507568359375 +0.196798199415206903628572376874 -0.471425986289978005139289507497 -0.314687991142272915912059261245 +0.196798199415206903628572376874 0.471425986289978005139289507497 -0.314687991142272915912059261245 +0.196801793575286848581029630623 -0.217589396238327015264957253748 0.062640599906444549560546875 +0.196801793575286848581029630623 0.217589396238327015264957253748 0.062640599906444549560546875 +0.196809601783752452508480246252 -0.260740804672241199835269753748 0.730260801315307683800881477509 +0.196809601783752452508480246252 0.260740804672241199835269753748 0.730260801315307683800881477509 +0.196819245815277099609375 -0.0618302486836910247802734375 -0.1412059962749481201171875 +0.196819245815277099609375 0.0618302486836910247802734375 -0.1412059962749481201171875 +0.196871140599250787905916126874 -0.0563510477542877169510049384371 -0.283841943740844704358039507497 +0.196871140599250787905916126874 0.0563510477542877169510049384371 -0.283841943740844704358039507497 +0.1968930065631866455078125 -0.7062127590179443359375 -0.1581030003726482391357421875 +0.1968930065631866455078125 0.7062127590179443359375 -0.1581030003726482391357421875 +0.197055298089981067999332253748 -0.0976583987474441556075888115629 0.2040393054485321044921875 +0.197055298089981067999332253748 0.0976583987474441556075888115629 0.2040393054485321044921875 +0.19706819951534271240234375 -0.0284732010215520831009072821871 -0.671083700656890824731704014994 +0.19706819951534271240234375 0.0284732010215520831009072821871 -0.671083700656890824731704014994 +0.1971517503261566162109375 -0.60675899684429168701171875 -0.394303500652313232421875 +0.1971517503261566162109375 0.60675899684429168701171875 -0.394303500652313232421875 +0.19716499745845794677734375 -0.606821000576019287109375 0.76999700069427490234375 +0.19716499745845794677734375 0.606821000576019287109375 0.76999700069427490234375 +0.197167494893074030093416126874 -0.355575594305992115362613503748 0.192849299311637883969083873126 +0.197167494893074030093416126874 0.355575594305992115362613503748 0.192849299311637883969083873126 +0.197212797403335554635717130623 -0.0697353020310401833237179403113 -0.215044498443603515625 +0.197212797403335554635717130623 0.0697353020310401833237179403113 -0.215044498443603515625 +0.1972219944000244140625 -0.299913597106933604852230246252 0.176508796215057384149105246252 +0.1972219944000244140625 0.299913597106933604852230246252 0.176508796215057384149105246252 +0.197343003749847423211605246252 -0.0164644002914428703998606096093 -0.028011798858642578125 +0.197343003749847423211605246252 0.0164644002914428703998606096093 -0.028011798858642578125 +0.197455805540084822213842130623 -0.527605211734771706311164507497 -0.206504398584365839175447376874 +0.197455805540084822213842130623 0.527605211734771706311164507497 -0.206504398584365839175447376874 +0.19745810329914093017578125 -0.1613073050975799560546875 0.239771008491516085525674384371 +0.19745810329914093017578125 0.1613073050975799560546875 0.239771008491516085525674384371 +0.197537803649902365954460492503 -0.0312864005565643352180238423443 0 +0.197537803649902365954460492503 0.0312864005565643352180238423443 0 +0.197544908523559548108039507497 -0.607971692085266024463408029987 -0.285212907195091236456363503748 +0.197544908523559548108039507497 0.607971692085266024463408029987 -0.285212907195091236456363503748 +0.19759650528430938720703125 -0.2872270047664642333984375 0.3584080040454864501953125 +0.19759650528430938720703125 0.2872270047664642333984375 0.3584080040454864501953125 +0.1976386047899723052978515625 -0.494654113054275479388621761245 -0.662387144565582230981704014994 +0.1976386047899723052978515625 0.494654113054275479388621761245 -0.662387144565582230981704014994 +0.1976501941680908203125 -0.198264294862747186831697376874 -0.107822397351264948062166126874 +0.1976501941680908203125 0.198264294862747186831697376874 -0.107822397351264948062166126874 +0.19766549766063690185546875 -0.0329137481749057769775390625 0.1494827568531036376953125 +0.19766549766063690185546875 0.0329137481749057769775390625 0.1494827568531036376953125 +0.197707407176494626144247490629 -0.462095710635185286108139735006 -0.223336857557296764031917746252 +0.197707407176494626144247490629 0.462095710635185286108139735006 -0.223336857557296764031917746252 +0.197778600454330433233707253748 -0.119203197956085193975894753748 -0.191505002975463856085269753748 +0.197778600454330433233707253748 0.119203197956085193975894753748 -0.191505002975463856085269753748 +0.197831703722476964779630748126 -0.347326192259788502081363503748 -0.206705255806446080990568248126 +0.197831703722476964779630748126 0.347326192259788502081363503748 -0.206705255806446080990568248126 +0.197952198982238786184595369377 -0.0162282004952430738975444057814 0.0234860002994537360454518903907 +0.197952198982238786184595369377 0.0162282004952430738975444057814 0.0234860002994537360454518903907 +0.197991751134395599365234375 -0.50922824442386627197265625 -0.51379573345184326171875 +0.197991751134395599365234375 0.50922824442386627197265625 -0.51379573345184326171875 +0.198015201091766374075220369377 0 -0.0281071990728378323654013115629 +0.198028606176376326120092130623 -0.274207857251167252954360264994 0.0899706527590751620193643134371 +0.198028606176376326120092130623 0.274207857251167252954360264994 0.0899706527590751620193643134371 +0.198063004016876237356470369377 -0.02395080029964447021484375 -0.014049999415874481201171875 +0.198063004016876237356470369377 0.02395080029964447021484375 -0.014049999415874481201171875 +0.198227798938751226254240123126 -0.0238153994083404561832306711722 0.0117715999484062205232559605861 +0.198227798938751226254240123126 0.0238153994083404561832306711722 0.0117715999484062205232559605861 +0.198233747482299826891960492503 -0.2534829080104827880859375 0.446037897467613242419304242503 +0.198233747482299826891960492503 0.2534829080104827880859375 0.446037897467613242419304242503 +0.198289000988006586245759876874 -0.0288127005100250223323943288278 -0.286969205737113930432258257497 +0.198289000988006586245759876874 0.0288127005100250223323943288278 -0.286969205737113930432258257497 +0.198429101705551141909822376874 -0.826514524221420243677016514994 0 +0.198429101705551141909822376874 0.826514524221420243677016514994 0 +0.19854299724102020263671875 -0.111339747905731201171875 -0.103364251554012298583984375 +0.19854299724102020263671875 0.111339747905731201171875 -0.103364251554012298583984375 +0.198607003688812261410490123126 0 0.0235637992620468146587331403907 +0.198621194064617145880191628748 -0.724740582704544000769431022491 -0.397241552174091350213558371252 +0.198621194064617145880191628748 0.724740582704544000769431022491 -0.397241552174091350213558371252 +0.19863949716091156005859375 -0.0806307494640350341796875 0.12861199676990509033203125 +0.19863949716091156005859375 0.0806307494640350341796875 0.12861199676990509033203125 +0.198766802251338969842464621252 -0.0703944012522697420974893134371 -0.39753811061382293701171875 +0.198766802251338969842464621252 0.0703944012522697420974893134371 -0.39753811061382293701171875 +0.198810897767543792724609375 -0.2913326919078826904296875 -0.279462602734565745965511496252 +0.198810897767543792724609375 0.2913326919078826904296875 -0.279462602734565745965511496252 +0.198848104476928716488615123126 -0.218387103080749517269865123126 -0.0525968983769416822959819057814 +0.198848104476928716488615123126 0.218387103080749517269865123126 -0.0525968983769416822959819057814 +0.19886004924774169921875 -0.284483109414577495233089621252 -0.775902101397514365466179242503 +0.19886004924774169921875 0.284483109414577495233089621252 -0.775902101397514365466179242503 +0.198868808150291453973323996252 -0.612051057815551802221420985006 -0.0913483969867229517181073106258 +0.198868808150291453973323996252 0.612051057815551802221420985006 -0.0913483969867229517181073106258 +0.19889549911022186279296875 -0.7108664810657501220703125 0.132700502872467041015625 +0.19889549911022186279296875 0.7108664810657501220703125 0.132700502872467041015625 +0.198964145779609663522435880623 0 -0.287946406006813038214176003748 +0.198968397080898279360994251874 -0.144557105004787439517244251874 -0.865745079517364568566506477509 +0.198968397080898279360994251874 0.144557105004787439517244251874 -0.865745079517364568566506477509 +0.198989991843700420037777121252 -0.144574655592441564389005748126 0.491935965418815679406350227509 +0.198989991843700420037777121252 0.144574655592441564389005748126 0.491935965418815679406350227509 +0.198992204666137706414730246252 -0.32327844202518463134765625 -0.397986605763435419280682481258 +0.198992204666137706414730246252 0.32327844202518463134765625 -0.397986605763435419280682481258 +0.19904623925685882568359375 -0.289638005197048187255859375 0.66256351768970489501953125 +0.19904623925685882568359375 0.289638005197048187255859375 0.66256351768970489501953125 +0.199143894016742706298828125 -0.218805304169654851742521373126 -0.339066007733345053942741742503 +0.199143894016742706298828125 0.218805304169654851742521373126 -0.339066007733345053942741742503 +0.19923450052738189697265625 -0.22699250280857086181640625 -0.398472011089324951171875 +0.19923450052738189697265625 0.22699250280857086181640625 -0.398472011089324951171875 +0.199286109209060674496427623126 -0.198384559154510503597990123126 -0.586027643084526039807258257497 +0.199286109209060674496427623126 0.198384559154510503597990123126 -0.586027643084526039807258257497 +0.199334597587585454769865123126 -0.00825980007648468086967064039072 -0.0140525996685028076171875 +0.199334597587585454769865123126 0.00825980007648468086967064039072 -0.0140525996685028076171875 +0.1993595063686370849609375 -0.1322824954986572265625 -0.072505749762058258056640625 +0.1993595063686370849609375 0.1322824954986572265625 -0.072505749762058258056640625 +0.199383401870727561266960492503 -0.015691600739955902099609375 0 +0.199383401870727561266960492503 0.015691600739955902099609375 0 +0.199434909224510181768863503748 -0.229696950316429115979133257497 -0.173104397952556610107421875 +0.199434909224510181768863503748 0.229696950316429115979133257497 -0.173104397952556610107421875 +0.199461595714092249087556751874 -0.613881433010101340563835492503 0.0765823476016521537124148721887 +0.199461595714092249087556751874 0.613881433010101340563835492503 0.0765823476016521537124148721887 +0.199487400054931651727230246252 -0.00813499987125396693821155480464 0.0117732003331184401084819057814 +0.199487400054931651727230246252 0.00813499987125396693821155480464 0.0117732003331184401084819057814 +0.199533998966217041015625 -0.827107012271881103515625 0.525433003902435302734375 +0.199533998966217041015625 0.827107012271881103515625 0.525433003902435302734375 +0.199583599716424919812141069997 -0.614243394136428810803352007497 -0.696686273813247658459602007497 +0.199583599716424919812141069997 0.614243394136428810803352007497 -0.696686273813247658459602007497 +0.199593791365623468569978626874 -0.273070690035819962915297764994 -0.0899706527590751620193643134371 +0.199593791365623468569978626874 0.273070690035819962915297764994 -0.0899706527590751620193643134371 +0.199628256261348724365234375 -0.61440373957157135009765625 0.380994021892547607421875 +0.199628256261348724365234375 0.61440373957157135009765625 0.380994021892547607421875 +0.199690401554107666015625 -0.260219407081604015008480246252 -0.6183926165103912353515625 +0.199690401554107666015625 0.260219407081604015008480246252 -0.6183926165103912353515625 +0.1997223012149333953857421875 -0.816853696107864291064970529987 0.441996999084949493408203125 +0.1997223012149333953857421875 0.816853696107864291064970529987 0.441996999084949493408203125 +0.199750608205795265881477007497 -0.463986587524414018091079014994 0.484578514099121060443309261245 +0.199750608205795265881477007497 0.463986587524414018091079014994 0.484578514099121060443309261245 +0.199771544337272649594083873126 -0.0366322018206119565109091240629 0.511125463247299238744858485006 +0.199771544337272649594083873126 0.0366322018206119565109091240629 0.511125463247299238744858485006 +0.199800002574920643194644753748 -0.0957660019397735540191973768742 -0.557591986656188920434829014994 +0.199800002574920643194644753748 0.0957660019397735540191973768742 -0.557591986656188920434829014994 +0.199970245361328125 -0.044898249208927154541015625 -0.14316450059413909912109375 +0.199970245361328125 0.044898249208927154541015625 -0.14316450059413909912109375 +0.199998795986175537109375 -0.0792895972728729359069177462516 -0.337214803695678744244190738755 +0.199998795986175537109375 0.0792895972728729359069177462516 -0.337214803695678744244190738755 +0.200000000000000011102230246252 0 0 +0.2000328004360198974609375 -0.145330497622489923648103626874 -0.169899898767471302374332253748 +0.2000328004360198974609375 0.145330497622489923648103626874 -0.169899898767471302374332253748 +0.200053191184997564144865123126 -0.295552802085876475945980246252 -0.180630004405975347347990123126 +0.200053191184997564144865123126 0.295552802085876475945980246252 -0.180630004405975347347990123126 +0.20006050169467926025390625 -0.08477924764156341552734375 -0.1236457526683807373046875 +0.20006050169467926025390625 0.08477924764156341552734375 -0.1236457526683807373046875 +0.20010960102081298828125 -0.185684001445770269222990123126 0.292365598678588856085269753748 +0.20010960102081298828125 0.185684001445770269222990123126 0.292365598678588856085269753748 +0.20024724304676055908203125 -0.14548750221729278564453125 0.0351339988410472869873046875 +0.20024724304676055908203125 0.14548750221729278564453125 0.0351339988410472869873046875 +0.200444403290748612844751619377 -0.851578187942504949425881477509 0.211274103820323938540681751874 +0.200444403290748612844751619377 0.851578187942504949425881477509 0.211274103820323938540681751874 +0.200471395254135126284822376874 -0.538079988956451371606704014994 0.174013799428939824887052623126 +0.200471395254135126284822376874 0.538079988956451371606704014994 0.174013799428939824887052623126 +0.200503206253051763363615123126 -0.723869609832763716283920985006 -0.275340008735656727179019753748 +0.200503206253051763363615123126 0.723869609832763716283920985006 -0.275340008735656727179019753748 +0.200538593530654896124332253748 -0.0595008015632629352897886576557 0.215043908357620244808927623126 +0.200538593530654896124332253748 0.0595008015632629352897886576557 0.215043908357620244808927623126 +0.200549197196960460320980246252 -0.280817198753356922491519753748 0.202290797233581565173210492503 +0.200549197196960460320980246252 0.280817198753356922491519753748 0.202290797233581565173210492503 +0.2005977928638458251953125 -0.35906778275966644287109375 -0.503319704532623313220085492503 +0.2005977928638458251953125 0.35906778275966644287109375 -0.503319704532623313220085492503 +0.200611449778079986572265625 -0.337515118718147266729801003748 0.518014234304428167199318977509 +0.200611449778079986572265625 0.337515118718147266729801003748 0.518014234304428167199318977509 +0.200623950362205510922208873126 -0.03530610166490077972412109375 -0.401252406835556019171207253748 +0.200623950362205510922208873126 0.03530610166490077972412109375 -0.401252406835556019171207253748 +0.2006303966045379638671875 -0.0199812009930610649799387346093 0.222144591808319080694644753748 +0.2006303966045379638671875 0.0199812009930610649799387346093 0.222144591808319080694644753748 +0.200694000720977788754240123126 -0.185301607847213750668302623126 -0.12403710186481475830078125 +0.200694000720977788754240123126 0.185301607847213750668302623126 -0.12403710186481475830078125 +0.200758004188537619860710492503 -0.178788399696350103207365123126 -0.296194005012512195929019753748 +0.200758004188537619860710492503 0.178788399696350103207365123126 -0.296194005012512195929019753748 +0.200830009579658491647435880623 -0.433464485406875599249332253748 -0.511639797687530539782585492503 +0.200830009579658491647435880623 0.433464485406875599249332253748 -0.511639797687530539782585492503 +0.200832054764032347238256193123 -0.4345208704471588134765625 0.702394944429397538598891514994 +0.200832054764032347238256193123 0.4345208704471588134765625 0.702394944429397538598891514994 +0.20084600150585174560546875 -0.145922243595123291015625 -0.0294547490775585174560546875 +0.20084600150585174560546875 0.145922243595123291015625 -0.0294547490775585174560546875 +0.20086105167865753173828125 -0.618186402320861860815170985006 0 +0.20086105167865753173828125 0.618186402320861860815170985006 0 +0.200930406153202067986995871252 -0.0725139029324054773528729356258 -0.874281585216522216796875 +0.200930406153202067986995871252 0.0725139029324054773528729356258 -0.874281585216522216796875 +0.201030552387237548828125 -0.0929306045174598666092080634371 0.271017947793006863665965511245 +0.201030552387237548828125 0.0929306045174598666092080634371 0.271017947793006863665965511245 +0.201171597838401772229133257497 -0.181739243865013111456363503748 0.221361353993415804763955634371 +0.201171597838401772229133257497 0.181739243865013111456363503748 0.221361353993415804763955634371 +0.2011827528476715087890625 -0.121109001338481903076171875 -0.08577950298786163330078125 +0.2011827528476715087890625 0.121109001338481903076171875 -0.08577950298786163330078125 +0.201188403367996204718082253748 -0.491522991657257046771434261245 0.2791559994220733642578125 +0.201188403367996204718082253748 0.491522991657257046771434261245 0.2791559994220733642578125 +0.201244506239891068899439119377 0 -0.402493062615394581182926003748 +0.201244948804378515072599498126 -0.23657713830471038818359375 0.32562540471553802490234375 +0.201244948804378515072599498126 0.23657713830471038818359375 0.32562540471553802490234375 +0.201245105266571050472990123126 -0.048737101256847381591796875 -0.217083299160003656558259876874 +0.201245105266571050472990123126 0.048737101256847381591796875 -0.217083299160003656558259876874 +0.201245999336242681332365123126 -0.206456995010375982113615123126 0.0829188019037246648590411268742 +0.201245999336242681332365123126 0.206456995010375982113615123126 0.0829188019037246648590411268742 +0.201247201859951013735994251874 -0.38279159367084503173828125 -0.124378645420074471217297684689 +0.201247201859951013735994251874 0.38279159367084503173828125 -0.124378645420074471217297684689 +0.2013351917266845703125 -0.106054401397705083676115123126 0.766952800750732466283920985006 +0.2013351917266845703125 0.106054401397705083676115123126 0.766952800750732466283920985006 +0.20134079456329345703125 -0.244368004798889176809595369377 -0.244430398941040044613615123126 +0.20134079456329345703125 0.244368004798889176809595369377 -0.244430398941040044613615123126 +0.20138670504093170166015625 -0.746598371863365084522001779987 -0.551845499873161338122429242503 +0.20138670504093170166015625 0.746598371863365084522001779987 -0.551845499873161338122429242503 +0.201417505741119384765625 -0.3095900118350982666015625 -0.3370240032672882080078125 +0.201417505741119384765625 0.3095900118350982666015625 -0.3370240032672882080078125 +0.201437705755233759097322376874 -0.115855497121810910310379938437 0.189737695455551136358707253748 +0.201437705755233759097322376874 0.115855497121810910310379938437 0.189737695455551136358707253748 +0.201449402421712858712865568123 -0.869290846586227350378806022491 0.32596211135387420654296875 +0.201449402421712858712865568123 0.869290846586227350378806022491 0.32596211135387420654296875 +0.201458944380283361264005748126 -0.475710961222648665014389735006 0.188714906573295621017294365629 +0.201458944380283361264005748126 0.475710961222648665014389735006 0.188714906573295621017294365629 +0.201534010469913482666015625 -0.720490515232086181640625 -0.052697248756885528564453125 +0.201534010469913482666015625 0.720490515232086181640625 -0.052697248756885528564453125 +0.201585602760314952508480246252 0 -0.877133685350418135229233485006 +0.201593002676963783947883257497 -0.317980596423149075580028011245 0.590125906467437677527243522491 +0.201593002676963783947883257497 0.317980596423149075580028011245 0.590125906467437677527243522491 +0.201634646952152246646150501874 -0.33512578904628753662109375 0.222562797367572784423828125 +0.201634646952152246646150501874 0.33512578904628753662109375 0.222562797367572784423828125 +0.2016769945621490478515625 0 0.4575220048427581787109375 +0.2017695568501949310302734375 -0.3797748386859893798828125 -0.847089377045631364282485264994 +0.2017695568501949310302734375 0.3797748386859893798828125 -0.847089377045631364282485264994 +0.20180200040340423583984375 -0.22889600694179534912109375 -0.95230400562286376953125 +0.20180200040340423583984375 0.22889600694179534912109375 -0.95230400562286376953125 +0.20211799442768096923828125 -0.02759574912488460540771484375 -0.1445227563381195068359375 +0.20211799442768096923828125 0.02759574912488460540771484375 -0.1445227563381195068359375 +0.202133256196975724661157869377 -0.388200590014457724841179242503 0.1046056486666202545166015625 +0.202133256196975724661157869377 0.388200590014457724841179242503 0.1046056486666202545166015625 +0.20215500891208648681640625 -0.72089101374149322509765625 0.04414950124919414520263671875 +0.20215500891208648681640625 0.72089101374149322509765625 0.04414950124919414520263671875 +0.202183654904365545101896373126 -0.0598815031349658952186665317186 0.397537654638290438580128238755 +0.202183654904365545101896373126 0.0598815031349658952186665317186 0.397537654638290438580128238755 +0.2022545039653778076171875 -0.1469457447528839111328125 0 +0.2022545039653778076171875 0.1469457447528839111328125 0 +0.202284789085388189144865123126 -0.0479012012481689480880575615629 -0.341739988327026400494190738755 +0.202284789085388189144865123126 0.0479012012481689480880575615629 -0.341739988327026400494190738755 +0.2022944986820220947265625 -0.4240129888057708740234375 -0.1711435019969940185546875 +0.2022944986820220947265625 0.4240129888057708740234375 -0.1711435019969940185546875 +0.2023177444934844970703125 -0.0491027496755123138427734375 0.13840700685977935791015625 +0.2023177444934844970703125 0.0491027496755123138427734375 0.13840700685977935791015625 +0.202323603630065906866519753748 -0.220503008365631109066740123126 0.0210593998432159409950337192186 +0.202323603630065906866519753748 0.220503008365631109066740123126 0.0210593998432159409950337192186 +0.20233474671840667724609375 -0.091506250202655792236328125 0.114835746586322784423828125 +0.20233474671840667724609375 0.091506250202655792236328125 0.114835746586322784423828125 +0.2023479938507080078125 -0.01649699918925762176513671875 0.14588749408721923828125 +0.2023479938507080078125 0.01649699918925762176513671875 0.14588749408721923828125 +0.202486804127693154065070757497 -0.6232009232044219970703125 0.687837067246437006140524772491 +0.202486804127693154065070757497 0.6232009232044219970703125 0.687837067246437006140524772491 +0.20250074565410614013671875 -0.46158899366855621337890625 0.5553645193576812744140625 +0.20250074565410614013671875 0.46158899366855621337890625 0.5553645193576812744140625 +0.202559405565261835269197376874 -0.0486839979887008639236611884371 -0.562671589851379327917868522491 +0.202559405565261835269197376874 0.0486839979887008639236611884371 -0.562671589851379327917868522491 +0.20262600481510162353515625 -0.3329632580280303955078125 -0.64076323807239532470703125 +0.20262600481510162353515625 0.3329632580280303955078125 -0.64076323807239532470703125 +0.202648204565048201120092130623 -0.171614992618560779913394753748 -0.13957799971103668212890625 +0.202648204565048201120092130623 0.171614992618560779913394753748 -0.13957799971103668212890625 +0.202691602706909196340845369377 -0.106560802459716802426115123126 0.327964806556701682360710492503 +0.202691602706909196340845369377 0.106560802459716802426115123126 0.327964806556701682360710492503 +0.202692794799804704153345369377 -0.410695219039917014391960492503 -0.655930423736572287829460492503 +0.202692794799804704153345369377 0.410695219039917014391960492503 -0.655930423736572287829460492503 +0.202720499038696294613615123126 -0.220437902212142933233707253748 -0.0176483999937772743915598283593 +0.202720499038696294613615123126 0.220437902212142933233707253748 -0.0176483999937772743915598283593 +0.202847194671630870477230246252 -0.451606416702270530016960492503 0.6284143924713134765625 +0.202847194671630870477230246252 0.451606416702270530016960492503 0.6284143924713134765625 +0.202885141968727117367521373126 -0.537642958760261580053452235006 -0.303772951662540424688785378748 +0.202885141968727117367521373126 0.537642958760261580053452235006 -0.303772951662540424688785378748 +0.202886098623275751284822376874 -0.237671989202499406301782869377 0.844007384777069158410256477509 +0.202886098623275751284822376874 0.237671989202499406301782869377 0.844007384777069158410256477509 +0.202998698502778990304662443123 -0.624754267930984430456931022491 -0.539419358968734719006477007497 +0.202998698502778990304662443123 0.624754267930984430456931022491 -0.539419358968734719006477007497 +0.2030330002307891845703125 -0.89100301265716552734375 -0.40606701374053955078125 +0.2030330002307891845703125 0.89100301265716552734375 -0.40606701374053955078125 +0.203067210316658003366185880623 -0.118721050024032589997879938437 -0.259169754385948192254573996252 +0.203067210316658003366185880623 0.118721050024032589997879938437 -0.259169754385948192254573996252 +0.203088197112083423956363503748 -0.625048184394836336963408029987 0.240976393222808810135049384371 +0.203088197112083423956363503748 0.625048184394836336963408029987 0.240976393222808810135049384371 +0.203229600191116327456697376874 0 -0.564533400535583429480368522491 +0.203234255313873291015625 -0.01031200028955936431884765625 -0.145222246646881103515625 +0.203234255313873291015625 0.01031200028955936431884765625 -0.145222246646881103515625 +0.203242796659469593389957253748 -0.236479800939559919870092130623 0.512610590457916237561164507497 +0.203242796659469593389957253748 0.236479800939559919870092130623 0.512610590457916237561164507497 +0.203244806826114676745476117503 -0.391202911734581049163494981258 0.32886426150798797607421875 +0.203244806826114676745476117503 0.391202911734581049163494981258 0.32886426150798797607421875 +0.203276091814041132144197376874 -0.0244500003755092620849609375 -0.2192738950252532958984375 +0.203276091814041132144197376874 0.0244500003755092620849609375 -0.2192738950252532958984375 +0.203310790657997120245426003748 -0.5322799980640411376953125 -0.406622999906539883685496761245 +0.203310790657997120245426003748 0.5322799980640411376953125 -0.406622999906539883685496761245 +0.203312897682189935855134876874 -0.26086795330047607421875 0.114506699144840226600727817186 +0.203312897682189935855134876874 0.26086795330047607421875 0.114506699144840226600727817186 +0.203365497291088104248046875 -0.487099590897560108526676003748 0.379310739040374766961605246252 +0.203365497291088104248046875 0.487099590897560108526676003748 0.379310739040374766961605246252 +0.2034009993076324462890625 -0.099289499223232269287109375 0.445836007595062255859375 +0.2034009993076324462890625 0.099289499223232269287109375 0.445836007595062255859375 +0.203426790237426768914730246252 -0.0165191993117332451557199846093 -0.344012808799743663445980246252 +0.203426790237426768914730246252 0.0165191993117332451557199846093 -0.344012808799743663445980246252 +0.203473198413848865850894753748 0 0.564445817470550559313835492503 +0.203518009185791021176115123126 -0.330069994926452670025440738755 0.0981548011302948025802450615629 +0.203518009185791021176115123126 0.330069994926452670025440738755 0.0981548011302948025802450615629 +0.203568744659423817022769753748 -0.176471057534217823370426003748 -0.223422503471374489514289507497 +0.203568744659423817022769753748 0.176471057534217823370426003748 -0.223422503471374489514289507497 +0.203602254390716552734375 -0.13516199588775634765625 0.0527010001242160797119140625 +0.203602254390716552734375 0.13516199588775634765625 0.0527010001242160797119140625 +0.203642240166664101330695757497 -0.281055602431297291143863503748 0.0451401978731155381630024692186 +0.203642240166664101330695757497 0.281055602431297291143863503748 0.0451401978731155381630024692186 +0.203744792938232444079460492503 -0.627072000503540061266960492503 0.453066396713256880346420985006 +0.203744792938232444079460492503 0.627072000503540061266960492503 0.453066396713256880346420985006 +0.203762388229370122738615123126 -0.213901591300964366570980246252 -0.743455982208252041942841970013 +0.203762388229370122738615123126 0.213901591300964366570980246252 -0.743455982208252041942841970013 +0.2038500010967254638671875 -0.1983850002288818359375 0.95869100093841552734375 +0.2038500010967254638671875 0.1983850002288818359375 0.95869100093841552734375 +0.203857652842998504638671875 -0.422237004339694965704410378748 0.8262311518192291259765625 +0.203857652842998504638671875 0.422237004339694965704410378748 0.8262311518192291259765625 +0.203954404592514043637052623126 0 -0.220005905628204351254240123126 +0.203957104682922357730134876874 -0.867474889755249001233039507497 -0.1260530948638916015625 +0.203957104682922357730134876874 -0.32757885754108428955078125 -0.231502506136894242727564119377 +0.203957104682922357730134876874 0.32757885754108428955078125 -0.231502506136894242727564119377 +0.203957104682922357730134876874 0.867474889755249001233039507497 -0.1260530948638916015625 +0.204019594192504899465845369377 -0.327008390426635764391960492503 -0.106965196132659923211605246252 +0.204019594192504899465845369377 0.327008390426635764391960492503 -0.106965196132659923211605246252 +0.204039001464843744448884876874 -0.389665210247039761615184261245 -0.408079791069030750616519753748 +0.204039001464843744448884876874 0.389665210247039761615184261245 -0.408079791069030750616519753748 +0.204150450229644758737279630623 0 0.284293097257614091333266514994 +0.204174005985260004214509876874 -0.0991803020238876259506710653113 -0.196153807640075672491519753748 +0.204174005985260004214509876874 0.0991803020238876259506710653113 -0.196153807640075672491519753748 +0.20429594814777374267578125 -0.40095269680023193359375 0 +0.20429594814777374267578125 0.40095269680023193359375 0 +0.20435750484466552734375 -0.4329355061054229736328125 0.14423899352550506591796875 +0.20435750484466552734375 0.4329355061054229736328125 0.14423899352550506591796875 +0.204371291399002064093082253748 -0.280526050925254788470653011245 -0.0451401978731155381630024692186 +0.204371291399002064093082253748 0.280526050925254788470653011245 -0.0451401978731155381630024692186 +0.204449701309204090460269753748 -0.194051402807235706671207253748 0.102685797214508059416182561563 +0.204449701309204090460269753748 0.194051402807235706671207253748 0.102685797214508059416182561563 +0.204469208419322978631527121252 -0.211592558026313798391626619377 0.579586809873580910412727007497 +0.204469208419322978631527121252 0.211592558026313798391626619377 0.579586809873580910412727007497 +0.204492294788360590152009876874 -0.208133697509765625 -0.069737099111080169677734375 +0.204492294788360590152009876874 0.208133697509765625 -0.069737099111080169677734375 +0.2045679986476898193359375 -0.068315498530864715576171875 -0.1264314949512481689453125 +0.2045679986476898193359375 0.068315498530864715576171875 -0.1264314949512481689453125 +0.20457780361175537109375 -0.133338296413421625308259876874 0.174266391992568964175447376874 +0.20457780361175537109375 0.133338296413421625308259876874 0.174266391992568964175447376874 +0.204605099558830272332698996252 -0.397276648879051230700554242503 0.05299154855310916900634765625 +0.204605099558830272332698996252 0.397276648879051230700554242503 0.05299154855310916900634765625 +0.204651600122451787777677623126 -0.549654614925384477075454014994 -0.126482400298118580206363503748 +0.204651600122451787777677623126 0.549654614925384477075454014994 -0.126482400298118580206363503748 +0.204689991474151594674779630623 -0.372141015529632579461605246252 0.423807585239410367083934261245 +0.204689991474151594674779630623 0.372141015529632579461605246252 0.423807585239410367083934261245 +0.2047307491302490234375 -0.095429003238677978515625 -0.1071382462978363037109375 +0.2047307491302490234375 0.095429003238677978515625 -0.1071382462978363037109375 +0.204754498600959788934261496252 -0.395704337954521201403679242503 -0.0631944000720977838714276231258 +0.204754498600959788934261496252 0.395704337954521201403679242503 -0.0631944000720977838714276231258 +0.204870998859405517578125 -0.1362762451171875 -0.044233500957489013671875 +0.204870998859405517578125 0.1362762451171875 -0.044233500957489013671875 +0.2049467563629150390625 -0.102070748805999755859375 0.1003910005092620849609375 +0.2049467563629150390625 0.102070748805999755859375 0.1003910005092620849609375 +0.204949490725994110107421875 0 0.7214542329311370849609375 +0.20497550070285797119140625 -0.19980199635028839111328125 0.409956514835357666015625 +0.20497550070285797119140625 0.19980199635028839111328125 0.409956514835357666015625 +0.20502960681915283203125 -0.209642791748046897204460492503 0.272053194046020518914730246252 +0.20502960681915283203125 0.209642791748046897204460492503 0.272053194046020518914730246252 +0.205101203918457042352230246252 -0.277509999275207530633480246252 -0.202290797233581565173210492503 +0.205101203918457042352230246252 0.277509999275207530633480246252 -0.202290797233581565173210492503 +0.205179293453693400994808371252 -0.0594377987086772904823384067186 0.874281585216522216796875 +0.205179293453693400994808371252 0.0594377987086772904823384067186 0.874281585216522216796875 +0.205245149135589610711605246252 -0.486616897583007856908920985006 -0.153552305698394786492855246252 +0.205245149135589610711605246252 0.486616897583007856908920985006 -0.153552305698394786492855246252 +0.205292697250843064749048494377 -0.631837785243988037109375 0.607153522968292280737045985006 +0.205292697250843064749048494377 0.631837785243988037109375 0.607153522968292280737045985006 +0.205311602354049688168302623126 -0.119001004099845875128238503748 0.551077187061309814453125 +0.205311602354049688168302623126 0.119001004099845875128238503748 0.551077187061309814453125 +0.205449604988098166735710492503 -0.737535190582275457238381477509 0.232018399238586442434595369377 +0.205449604988098166735710492503 0.737535190582275457238381477509 0.232018399238586442434595369377 +0.20548774302005767822265625 -0.124109752476215362548828125 0.069796502590179443359375 +0.20548774302005767822265625 0.124109752476215362548828125 0.069796502590179443359375 +0.2055202424526214599609375 -0.149319000542163848876953125 0.7056667506694793701171875 +0.2055202424526214599609375 0.149319000542163848876953125 0.7056667506694793701171875 +0.205540198087692249639957253748 -0.553609192371368408203125 0.1061604022979736328125 +0.205540198087692249639957253748 0.553609192371368408203125 0.1061604022979736328125 +0.205548840761184709036157869377 -0.459615641832351706774772992503 -0.41109965741634368896484375 +0.205548840761184709036157869377 0.459615641832351706774772992503 -0.41109965741634368896484375 +0.20565450191497802734375 -0.064972497522830963134765625 0.12643100321292877197265625 +0.20565450191497802734375 0.064972497522830963134765625 0.12643100321292877197265625 +0.205675350874662404843107310626 -0.633014568686485312731804242503 0.528667709231376625744758257497 +0.205675350874662404843107310626 0.633014568686485312731804242503 0.528667709231376625744758257497 +0.205725106596946705206363503748 -0.283155950903892505987613503748 0 +0.205725106596946705206363503748 0.283155950903892505987613503748 0 +0.20576550066471099853515625 -0.31114399433135986328125 0.3329415023326873779296875 +0.20576550066471099853515625 0.31114399433135986328125 0.3329415023326873779296875 +0.205765508115291595458984375 -0.1494952552020549774169921875 -0.70555798709392547607421875 +0.205765508115291595458984375 0.1494952552020549774169921875 -0.70555798709392547607421875 +0.205812898278236400262386496252 -0.869753694534301735608039507497 0.105687899887561803646818248126 +0.205812898278236400262386496252 0.869753694534301735608039507497 0.105687899887561803646818248126 +0.205819791555404668637052623126 -0.248560202121734602487279630623 -0.505822205543518088610710492503 +0.205819791555404668637052623126 0.248560202121734602487279630623 -0.505822205543518088610710492503 +0.2060450017452239990234375 0 0.14158199727535247802734375 +0.20605830848217010498046875 -0.1849043071269989013671875 0.6429233849048614501953125 +0.20605830848217010498046875 0.1849043071269989013671875 0.6429233849048614501953125 +0.20610199868679046630859375 0 0.97853100299835205078125 +0.206214749813079828433259876874 -0.197578141093254083804353626874 0.202332192659378046206697376874 +0.206214749813079828433259876874 0.197578141093254083804353626874 0.202332192659378046206697376874 +0.206219297647476179635717130623 -0.260222557187080372198551003748 -0.110715150833129868934712192186 +0.206219297647476179635717130623 0.260222557187080372198551003748 -0.110715150833129868934712192186 +0.206225597858428949527009876874 -0.0465745024383068043083433451557 0.278929698467254627569644753748 +0.206225597858428949527009876874 0.0465745024383068043083433451557 0.278929698467254627569644753748 +0.206336693465709680728181751874 -0.187015950679779052734375 -0.353482639789581332134815738755 +0.206336693465709680728181751874 0.187015950679779052734375 -0.353482639789581332134815738755 +0.2063924968242645263671875 -0.180449706315994246041967130623 0.121819800138473502415514815311 +0.2063924968242645263671875 0.180449706315994246041967130623 0.121819800138473502415514815311 +0.2064439952373504638671875 -0.112063996493816375732421875 0.0855714976787567138671875 +0.2064439952373504638671875 0.112063996493816375732421875 0.0855714976787567138671875 +0.206456708908081043585269753748 -0.14999909698963165283203125 0.157720792293548572882144753748 +0.206456708908081043585269753748 0.14999909698963165283203125 0.157720792293548572882144753748 +0.206477594375610362664730246252 -0.150012803077697765008480246252 -0.307998394966125521587940738755 +0.206477594375610362664730246252 0.150012803077697765008480246252 -0.307998394966125521587940738755 +0.20658449828624725341796875 -0.19133900105953216552734375 -0.413173496723175048828125 +0.20658449828624725341796875 0.19133900105953216552734375 -0.413173496723175048828125 +0.206786797940731070788444867503 -0.493020543456077597888054242503 0.129111952334642426931665681877 +0.206786797940731070788444867503 0.493020543456077597888054242503 0.129111952334642426931665681877 +0.20692920684814453125 0 0.2172102034091949462890625 +0.206954097747802739926115123126 -0.0792447030544281005859375 0.202213507890701277291967130623 +0.206954097747802739926115123126 0.0792447030544281005859375 0.202213507890701277291967130623 +0.206955452263355266229183371252 -0.150361646711826335565120871252 0.370217236876487720831363503748 +0.206955452263355266229183371252 0.150361646711826335565120871252 0.370217236876487720831363503748 +0.207062995433807378597990123126 -0.165735304355621337890625 0.14020259678363800048828125 +0.207062995433807378597990123126 0.165735304355621337890625 0.14020259678363800048828125 +0.207070596516132382491903740629 -0.440824455022811922955128238755 -0.255529998242855105328175113755 +0.207070596516132382491903740629 0.440824455022811922955128238755 -0.255529998242855105328175113755 +0.207197104394435893670589621252 -0.150536097586154937744140625 -0.486732390522956914757912727509 +0.207197104394435893670589621252 0.150536097586154937744140625 -0.486732390522956914757912727509 +0.207241556048393227307258257497 -0.888372537493705705102797764994 -0.265226709842681873663394753748 +0.207241556048393227307258257497 0.888372537493705705102797764994 -0.265226709842681873663394753748 +0.207255995273590065686164507497 -0.245807799696922291143863503748 0.138287450373172748907535378748 +0.207255995273590065686164507497 0.245807799696922291143863503748 0.138287450373172748907535378748 +0.20728875696659088134765625 -0.63797999918460845947265625 0.335411243140697479248046875 +0.20728875696659088134765625 0.63797999918460845947265625 0.335411243140697479248046875 +0.20765049755573272705078125 -0.13810400664806365966796875 0.017565749585628509521484375 +0.20765049755573272705078125 0.13810400664806365966796875 0.017565749585628509521484375 +0.20765359699726104736328125 -0.639086681604385309363181022491 -0.196082592010498046875 +0.20765359699726104736328125 0.639086681604385309363181022491 -0.196082592010498046875 +0.2076894938945770263671875 -0.0329370014369487762451171875 0.135204255580902099609375 +0.2076894938945770263671875 0.0329370014369487762451171875 0.135204255580902099609375 +0.20771349966526031494140625 -0.13834224641323089599609375 -0.01471650041639804840087890625 +0.20771349966526031494140625 0.13834224641323089599609375 -0.01471650041639804840087890625 +0.2077665030956268310546875 -0.126051247119903564453125 -0.0586872510612010955810546875 +0.2077665030956268310546875 0.126051247119903564453125 -0.0586872510612010955810546875 +0.20803250372409820556640625 -0.105589501559734344482421875 -0.089851997792720794677734375 +0.20803250372409820556640625 0.105589501559734344482421875 -0.089851997792720794677734375 +0.208079391717910761050447376874 -0.126707401871681196725560880623 -0.175066208839416509457365123126 +0.208079391717910761050447376874 0.126707401871681196725560880623 -0.175066208839416509457365123126 +0.208085105568170530832006193123 -0.752219390869140580591079014994 0.336699451506137836798160378748 +0.208085105568170530832006193123 0.752219390869140580591079014994 0.336699451506137836798160378748 +0.20809625089168548583984375 -0.051524750888347625732421875 -0.1286122500896453857421875 +0.20809625089168548583984375 0.051524750888347625732421875 -0.1286122500896453857421875 +0.208130639791488630807592130623 -0.208211499452590931280582253748 -0.189287355542182900158820757497 +0.208130639791488630807592130623 0.208211499452590931280582253748 -0.189287355542182900158820757497 +0.208145391941070539987279630623 -0.561629998683929376745993522491 0.0353196009993553133865518134371 +0.208145391941070539987279630623 0.561629998683929376745993522491 0.0353196009993553133865518134371 +0.20829899609088897705078125 -0.4423795044422149658203125 -0.104461498558521270751953125 +0.20829899609088897705078125 0.4423795044422149658203125 -0.104461498558521270751953125 +0.20836079120635986328125 -0.561078000068664484167868522491 -0.0421577990055084228515625 +0.20836079120635986328125 0.561078000068664484167868522491 -0.0421577990055084228515625 +0.208408403396606461965845369377 -0.053408801555633544921875 0.337213993072509765625 +0.208408403396606461965845369377 0.053408801555633544921875 0.337213993072509765625 +0.208463507890701282843082253748 -0.0465961985290050464958433451557 0.666612094640731789318977007497 +0.208463507890701282843082253748 0.0465961985290050464958433451557 0.666612094640731789318977007497 +0.208499506115913418868856865629 -0.2882583141326904296875 0.419445934891700789037827235006 +0.208499506115913418868856865629 0.2882583141326904296875 0.419445934891700789037827235006 +0.208531704545021068231136496252 -0.0863141484558582333663778740629 0.609560889005661077355568977509 +0.208531704545021068231136496252 0.0863141484558582333663778740629 0.609560889005661077355568977509 +0.20858649909496307373046875 -0.44587099552154541015625 0.087696500122547149658203125 +0.20858649909496307373046875 0.44587099552154541015625 0.087696500122547149658203125 +0.2085911929607391357421875 -0.0398375988006591796875 0.211902594566345220394865123126 +0.2085911929607391357421875 0.0398375988006591796875 0.211902594566345220394865123126 +0.208629754185676558053685880623 -0.116319000720977769325337192186 0.25581954419612884521484375 +0.208629754185676558053685880623 0.116319000720977769325337192186 0.25581954419612884521484375 +0.208710604906082147769197376874 -0.2113409936428070068359375 0.042129300534725189208984375 +0.208710604906082147769197376874 0.2113409936428070068359375 0.042129300534725189208984375 +0.208967542648315435238615123126 -0.373398837447166453973323996252 -0.345551237463951166350994981258 +0.208967542648315435238615123126 0.373398837447166453973323996252 -0.345551237463951166350994981258 +0.20897774398326873779296875 -0.258504304289817798956363503748 0.303321602940559376104801003748 +0.20897774398326873779296875 0.258504304289817798956363503748 0.303321602940559376104801003748 +0.20899249613285064697265625 -0.3526155054569244384765625 -0.2863295078277587890625 +0.20899249613285064697265625 0.3526155054569244384765625 -0.2863295078277587890625 +0.208999609947204595394865123126 -0.34105598926544189453125 0 +0.208999609947204595394865123126 0.34105598926544189453125 0 +0.209017905592918384893863503748 -0.151858699321746809518529630623 -0.236115258932113630807592130623 +0.209017905592918384893863503748 0.151858699321746809518529630623 -0.236115258932113630807592130623 +0.209057700634002668893529630623 -0.151887595653533935546875 -0.152397608757019048519865123126 +0.209057700634002668893529630623 0.151887595653533935546875 -0.152397608757019048519865123126 +0.209098349511623399221704744377 -0.262658241391181934698551003748 -0.299647352099418673443409488755 +0.209098349511623399221704744377 0.262658241391181934698551003748 -0.299647352099418673443409488755 +0.209110201895236963443025501874 -0.277037104964256264416633257497 0.775902101397514365466179242503 +0.209110201895236963443025501874 0.277037104964256264416633257497 0.775902101397514365466179242503 +0.209157907962799066714509876874 -0.196883994340896595343082253748 -0.08654339611530303955078125 +0.209157907962799066714509876874 0.196883994340896595343082253748 -0.08654339611530303955078125 +0.209264405071735382080078125 -0.523751413822174050061164507497 -0.701351094245910688940170985006 +0.209264405071735382080078125 0.523751413822174050061164507497 -0.701351094245910688940170985006 +0.209371498227119451351896373126 -0.558900555968284584729133257497 0.257476051151752483026058371252 +0.209371498227119451351896373126 0.558900555968284584729133257497 0.257476051151752483026058371252 +0.20937384665012359619140625 -0.229815945029258700271768134371 0.160770754516124714239566628748 +0.20937384665012359619140625 0.229815945029258700271768134371 0.160770754516124714239566628748 +0.209393797814846044369474498126 -0.454909414052963312347088731258 0.227401353418827084640341240629 +0.209393797814846044369474498126 0.454909414052963312347088731258 0.227401353418827084640341240629 +0.20939600467681884765625 -0.337564396858215376440170985006 0.0469399988651275634765625 +0.20939600467681884765625 0.337564396858215376440170985006 0.0469399988651275634765625 +0.209545205533504502737329744377 0 0.398234707117080699578792746252 +0.209580397605896001644865123126 -0.336070799827575705798210492503 -0.0559683978557586683799662807814 +0.209580397605896001644865123126 0.336070799827575705798210492503 -0.0559683978557586683799662807814 +0.209613007307052595651342130623 -0.0784637957811355618575888115629 -0.199764597415924061163394753748 +0.209613007307052595651342130623 0.0784637957811355618575888115629 -0.199764597415924061163394753748 +0.2097175419330596923828125 -0.0947176948189735329330929403113 -0.263718006014823869165297764994 +0.2097175419330596923828125 0.0947176948189735329330929403113 -0.263718006014823869165297764994 +0.209721606969833385125667746252 -0.287370595335960432592514735006 -0.419445934891700789037827235006 +0.209721606969833385125667746252 0.287370595335960432592514735006 -0.419445934891700789037827235006 +0.20973025262355804443359375 -0.075949750840663909912109375 0.1128932535648345947265625 +0.20973025262355804443359375 0.075949750840663909912109375 0.1128932535648345947265625 +0.209737801551818842105134876874 -0.2115705013275146484375 -0.0353276990354061126708984375 +0.209737801551818842105134876874 0.2115705013275146484375 -0.0353276990354061126708984375 +0.20976449549198150634765625 -0.4529159963130950927734375 0.02942950092256069183349609375 +0.20976449549198150634765625 0.4529159963130950927734375 0.02942950092256069183349609375 +0.209856501221656777111945757497 -0.496275502443313587530582253748 0.446845716238021828381477007497 +0.209856501221656777111945757497 0.496275502443313587530582253748 0.446845716238021828381477007497 +0.209894394874572759457365123126 -0.218041205406188987048210492503 -0.261538410186767600329460492503 +0.209894394874572759457365123126 0.218041205406188987048210492503 -0.261538410186767600329460492503 +0.2099010050296783447265625 -0.07919324934482574462890625 -0.11031775176525115966796875 +0.2099010050296783447265625 0.07919324934482574462890625 -0.11031775176525115966796875 +0.209901750087738037109375 -0.1150652468204498291015625 -0.072119496762752532958984375 +0.209901750087738037109375 0.1150652468204498291015625 -0.072119496762752532958984375 +0.209959506988525390625 -0.4524194896221160888671875 -0.0351249985396862030029296875 +0.209959506988525390625 0.4524194896221160888671875 -0.0351249985396862030029296875 +0.210013604164123540707365123126 -0.316044402122497569695980246252 0.126531195640563975945980246252 +0.210013604164123540707365123126 0.316044402122497569695980246252 0.126531195640563975945980246252 +0.210019207000732427426115123126 -0.753293609619140713817841970013 -0.168643200397491477282585492503 +0.210019207000732427426115123126 0.753293609619140713817841970013 -0.168643200397491477282585492503 +0.210022196918725950753881193123 -0.152588055282831175363256193123 -0.913842028379440285412727007497 +0.210022196918725950753881193123 0.152588055282831175363256193123 -0.913842028379440285412727007497 +0.21004123985767364501953125 -0.0908924974501132965087890625 -0.71422724425792694091796875 +0.21004123985767364501953125 0.0908924974501132965087890625 -0.71422724425792694091796875 +0.21008799970149993896484375 -0.64657199382781982421875 -0.73335397243499755859375 +0.21008799970149993896484375 0.64657199382781982421875 -0.73335397243499755859375 +0.210094200074672693423494251874 -0.373661112785339366570980246252 0.136885946989059453793302623126 +0.210094200074672693423494251874 0.373661112785339366570980246252 0.136885946989059453793302623126 +0.210101401805877691097990123126 -0.875133025646209761205795985006 0 +0.210101401805877691097990123126 0.875133025646209761205795985006 0 +0.210108801722526578048544365629 -0.412161192297935519146534488755 0.297451558709144636694077235006 +0.210108801722526578048544365629 0.412161192297935519146534488755 0.297451558709144636694077235006 +0.210183048248291010073884876874 -0.212387704849243158511384876874 0.182248497009277338198884876874 +0.210183048248291010073884876874 0.212387704849243158511384876874 0.182248497009277338198884876874 +0.210226106643676746710269753748 -0.6470135152339935302734375 0.164860498905181868112279630623 +0.210226106643676746710269753748 0.6470135152339935302734375 0.164860498905181868112279630623 +0.21023400127887725830078125 -0.85984599590301513671875 0.4652599990367889404296875 +0.21023400127887725830078125 0.85984599590301513671875 0.4652599990367889404296875 +0.210276456177234644107088001874 -0.3678840100765228271484375 -0.151476748287677764892578125 +0.210276456177234644107088001874 0.3678840100765228271484375 -0.151476748287677764892578125 +0.210292005538940451891960492503 0 0.340260791778564497533920985006 +0.210295200347900390625 -0.647209596633911199425881477509 -0.42059040069580078125 +0.210295200347900390625 0.647209596633911199425881477509 -0.42059040069580078125 +0.210304793715477000848323996252 -0.767372381687164373254006477509 -0.420608702301979053839176003748 +0.210304793715477000848323996252 0.767372381687164373254006477509 -0.420608702301979053839176003748 +0.210476195812225347347990123126 -0.508133465051651023181022992503 0 +0.210476195812225347347990123126 0.508133465051651023181022992503 0 +0.2105576992034912109375 -0.301217409968376148565738503748 -0.821543401479721047131477007497 +0.2105576992034912109375 0.301217409968376148565738503748 -0.821543401479721047131477007497 +0.2106287479400634765625 -0.03448750078678131103515625 -0.13017724454402923583984375 +0.2106287479400634765625 0.03448750078678131103515625 -0.13017724454402923583984375 +0.210662646591663366146818248126 -0.503934183716774009020866742503 0.0645870499312877766051599337516 +0.210662646591663366146818248126 0.503934183716774009020866742503 0.0645870499312877766051599337516 +0.210763846337795268670589621252 -0.502140092849731489721420985006 -0.07703244686126708984375 +0.210763846337795268670589621252 0.502140092849731489721420985006 -0.07703244686126708984375 +0.21102900803089141845703125 -0.270401257276535023077457253748 0.0696408994495868599594601278113 +0.21102900803089141845703125 0.270401257276535023077457253748 0.0696408994495868599594601278113 +0.21107254922389984130859375 -0.511179500818252585681022992503 0.341531452536582957879573996252 +0.21107254922389984130859375 0.511179500818252585681022992503 0.341531452536582957879573996252 +0.211144499480724334716796875 -0.030507001094520092010498046875 -0.7190182507038116455078125 +0.211144499480724334716796875 0.030507001094520092010498046875 -0.7190182507038116455078125 +0.211191201210021994860710492503 -0.543176794052124045641960492503 -0.548048782348632856908920985006 +0.211191201210021994860710492503 0.543176794052124045641960492503 -0.548048782348632856908920985006 +0.211309599876403825247095369377 -0.228454804420471196957365123126 0.25130999088287353515625 +0.211309599876403825247095369377 0.228454804420471196957365123126 0.25130999088287353515625 +0.211580203473567957095369251874 -0.898888087272644020764289507497 0.223011554032564146554662443123 +0.211580203473567957095369251874 0.898888087272644020764289507497 0.223011554032564146554662443123 +0.2116200029850006103515625 -0.40608298778533935546875 -0.20078249275684356689453125 +0.2116200029850006103515625 0.40608298778533935546875 -0.20078249275684356689453125 +0.21165525913238525390625 -0.651398241519927978515625 -0.305585257709026336669921875 +0.21165525913238525390625 0.651398241519927978515625 -0.305585257709026336669921875 +0.21166475117206573486328125 -0.1283432543277740478515625 0.03501474857330322265625 +0.21166475117206573486328125 0.1283432543277740478515625 0.03501474857330322265625 +0.211685001850128173828125 -0.0490035004913806915283203125 0.123645253479480743408203125 +0.211685001850128173828125 0.0490035004913806915283203125 0.123645253479480743408203125 +0.211695246398448944091796875 -0.371238398551940906866519753748 0.489762631058692943231136496252 +0.211695246398448944091796875 0.371238398551940906866519753748 0.489762631058692943231136496252 +0.211741590499877951891960492503 -0.313113188743591341900440738755 -0.130864799022674560546875 +0.211741590499877951891960492503 0.313113188743591341900440738755 -0.130864799022674560546875 +0.211758255958557156661825615629 -0.108499052375555044003263560626 -0.495869544148445196007912727509 +0.211758255958557156661825615629 0.108499052375555044003263560626 -0.495869544148445196007912727509 +0.21176855266094207763671875 -0.246016395092010481393529630623 -0.130881448090076429879857755623 +0.21176855266094207763671875 0.246016395092010481393529630623 -0.130881448090076429879857755623 +0.2119292914867401123046875 -0.09777809679508209228515625 0.188481903076171880551115123126 +0.2119292914867401123046875 0.09777809679508209228515625 0.188481903076171880551115123126 +0.211986005306243896484375 -0.785893023014068603515625 -0.580889999866485595703125 +0.211986005306243896484375 0.785893023014068603515625 -0.580889999866485595703125 +0.21205200254917144775390625 -0.91504299640655517578125 0.343118011951446533203125 +0.21205200254917144775390625 0.91504299640655517578125 0.343118011951446533203125 +0.21206760406494140625 -0.133654797077178949527009876874 0.311710810661315951275440738755 +0.21206760406494140625 0.133654797077178949527009876874 0.311710810661315951275440738755 +0.21207199990749359130859375 -0.0164542496204376220703125 0.131357252597808837890625 +0.21207199990749359130859375 0.0164542496204376220703125 0.131357252597808837890625 +0.212093206495046593396125444997 -0.0765424530953168896774130303129 -0.9228527843952178955078125 +0.212093206495046593396125444997 0.0765424530953168896774130303129 -0.9228527843952178955078125 +0.21210725605487823486328125 -0.12902949750423431396484375 -0.0293577499687671661376953125 +0.21210725605487823486328125 0.12902949750423431396484375 -0.0293577499687671661376953125 +0.212107355892658250295923494377 -0.154103302955627435855134876874 -0.594779264926910467004006477509 +0.212107355892658250295923494377 0.154103302955627435855134876874 -0.594779264926910467004006477509 +0.212109506130218505859375 -0.2766830027103424072265625 -0.3584080040454864501953125 +0.212109506130218505859375 0.2766830027103424072265625 -0.3584080040454864501953125 +0.212132406234741194284154630623 -0.212131798267364501953125 0 +0.212132406234741194284154630623 0.212131798267364501953125 0 +0.21215300261974334716796875 -0.0172850005328655242919921875 -0.13111950457096099853515625 +0.21215300261974334716796875 0.0172850005328655242919921875 -0.13111950457096099853515625 +0.212155199050903325863615123126 -0.758257579803466863488381477509 0.14154720306396484375 +0.212155199050903325863615123126 0.758257579803466863488381477509 0.14154720306396484375 +0.212298348546028164962606865629 -0.0732902526855468833266726846887 0.502053743600845425731904470013 +0.212298348546028164962606865629 0.0732902526855468833266726846887 0.502053743600845425731904470013 +0.212315988540649425164730246252 -0.30894720554351806640625 0.7067344188690185546875 +0.212315988540649425164730246252 0.30894720554351806640625 0.7067344188690185546875 +0.212349602580070490054353626874 -0.154278905689716333560213001874 -0.365521037578582785876335492503 +0.212349602580070490054353626874 0.154278905689716333560213001874 -0.365521037578582785876335492503 +0.21238900721073150634765625 -0.39976298809051513671875 -0.891673028469085693359375 +0.21238900721073150634765625 0.39976298809051513671875 -0.891673028469085693359375 +0.212472498416900634765625 -0.4154055118560791015625 0.17970399558544158935546875 +0.212472498416900634765625 0.4154055118560791015625 0.17970399558544158935546875 +0.212514254450798051321314119377 -0.315381309390068087505909488755 -0.527135697007179326867287727509 +0.212514254450798051321314119377 0.315381309390068087505909488755 -0.527135697007179326867287727509 +0.2126085460186004638671875 -0.2701436579227447509765625 -0.0657268516719341222565020643742 +0.2126085460186004638671875 0.2701436579227447509765625 -0.0657268516719341222565020643742 +0.212645705044269578420923494377 -0.460080921649932861328125 0.743712294101715132299545985006 +0.212645705044269578420923494377 0.460080921649932861328125 0.743712294101715132299545985006 +0.2126615047454833984375 -0.15450550615787506103515625 -0.425327003002166748046875 +0.2126615047454833984375 0.15450550615787506103515625 -0.425327003002166748046875 +0.21266199648380279541015625 0 -0.1314339935779571533203125 +0.21273100376129150390625 -0.0865377485752105712890625 0.098776496946811676025390625 +0.21273100376129150390625 0.0865377485752105712890625 0.098776496946811676025390625 +0.21273900568485260009765625 -0.3337495028972625732421875 0.305537998676300048828125 +0.21273900568485260009765625 0.3337495028972625732421875 0.305537998676300048828125 +0.212784802913665749279914507497 0 -0.925863334536552340381376779987 +0.212822091579437239206029630623 -0.184691691398620599917634876874 -0.1029354035854339599609375 +0.212822091579437239206029630623 0.184691691398620599917634876874 -0.1029354035854339599609375 +0.212890201807022089175447376874 -0.440873408317565884662059261245 -0.346855187416076626849559261245 +0.212890201807022089175447376874 0.440873408317565884662059261245 -0.346855187416076626849559261245 +0.212936806678771989309595369377 -0.655363988876342840050881477509 0.406393623352050814556690738755 +0.212936806678771989309595369377 0.655363988876342840050881477509 0.406393623352050814556690738755 +0.212940198183059703485042746252 -0.182786443829536460192741742503 0.473017612099647544177116742503 +0.212940198183059703485042746252 0.182786443829536460192741742503 0.473017612099647544177116742503 +0.213034656643867476022435880623 -0.769111460447311379162727007497 -0.292548759281635262219367632497 +0.213034656643867476022435880623 0.769111460447311379162727007497 -0.292548759281635262219367632497 +0.213144004344940185546875 -0.65600097179412841796875 0.724039018154144287109375 +0.213144004344940185546875 0.65600097179412841796875 0.724039018154144287109375 +0.21316049993038177490234375 -0.130623996257781982421875 0 +0.21316049993038177490234375 0.130623996257781982421875 0 +0.213198049366474157162443248126 -0.510711485147476218493522992503 -0.340911990404129061627003238755 +0.213198049366474157162443248126 0.510711485147476218493522992503 -0.340911990404129061627003238755 +0.21371950209140777587890625 -0.033354498445987701416015625 0.450789511203765869140625 +0.21371950209140777587890625 0.033354498445987701416015625 0.450789511203765869140625 +0.213763797283172601870759876874 -0.400499403476715087890625 0.392308187484741222039730246252 +0.213763797283172601870759876874 0.400499403476715087890625 0.392308187484741222039730246252 +0.213816601037979114874332253748 -0.200883293151855463198884876874 0.0626765996217727577866085653113 +0.213816601037979114874332253748 0.200883293151855463198884876874 0.0626765996217727577866085653113 +0.2138375937938690185546875 -0.204857397079467762335269753748 -0.52183020114898681640625 +0.2138375937938690185546875 0.204857397079467762335269753748 -0.52183020114898681640625 +0.2138690054416656494140625 -0.089556001126766204833984375 -0.093486748635768890380859375 +0.2138690054416656494140625 0.089556001126766204833984375 -0.093486748635768890380859375 +0.213910456001758592092798494377 -0.571572312712669394763054242503 -0.223713098466396337338224498126 +0.213910456001758592092798494377 0.571572312712669394763054242503 -0.223713098466396337338224498126 +0.21391864120960235595703125 -0.112682801485061642732254938437 0.814887350797653176037727007497 +0.21391864120960235595703125 0.112682801485061642732254938437 0.814887350797653176037727007497 +0.2139540016651153564453125 -0.278806507587432861328125 -0.66256351768970489501953125 +0.2139540016651153564453125 0.278806507587432861328125 -0.66256351768970489501953125 +0.2140080034732818603515625 -0.05753280222415924072265625 -0.202214097976684575863615123126 +0.2140080034732818603515625 0.05753280222415924072265625 -0.202214097976684575863615123126 +0.21401850879192352294921875 -0.49712848663330078125 0.519191265106201171875 +0.21401850879192352294921875 0.49712848663330078125 0.519191265106201171875 +0.214157548546791060006810880623 -0.250875988602638211322215511245 0.890896683931350685803352007497 +0.214157548546791060006810880623 0.250875988602638211322215511245 0.890896683931350685803352007497 +0.214166408777236916272102007497 -0.659131908416747958057158029987 -0.0983751967549323924622228787484 +0.214166408777236916272102007497 0.659131908416747958057158029987 -0.0983751967549323924622228787484 +0.21427075564861297607421875 -0.1177285015583038330078125 0.0522307492792606353759765625 +0.21427075564861297607421875 0.1177285015583038330078125 0.0522307492792606353759765625 +0.21431775391101837158203125 -0.061830498278141021728515625 -0.112893499433994293212890625 +0.21431775391101837158203125 0.061830498278141021728515625 -0.112893499433994293212890625 +0.214430996775627130679353626874 -0.137946550548076612985326505623 0.239771008491516085525674384371 +0.214430996775627130679353626874 0.137946550548076612985326505623 0.239771008491516085525674384371 +0.2145870029926300048828125 -0.4444600045680999755859375 0.86971700191497802734375 +0.2145870029926300048828125 0.4444600045680999755859375 0.86971700191497802734375 +0.214615809917449940069644753748 -0.213644909858703602179019753748 -0.631106692552566461706931022491 +0.214615809917449940069644753748 0.213644909858703602179019753748 -0.631106692552566461706931022491 +0.2146410048007965087890625 -0.096681751310825347900390625 0.0841535031795501708984375 +0.2146410048007965087890625 0.096681751310825347900390625 0.0841535031795501708984375 +0.214778804779052756579460492503 -0.123061597347259521484375 -0.314206790924072276727230246252 +0.214778804779052756579460492503 0.123061597347259521484375 -0.314206790924072276727230246252 +0.214804795384407026803685880623 -0.661103081703185990747329014994 0.0824732974171638461013955634371 +0.214804795384407026803685880623 0.661103081703185990747329014994 0.0824732974171638461013955634371 +0.214831653237342851126001619377 -0.0654917992651462554931640625 -0.502053743600845425731904470013 +0.214831653237342851126001619377 0.0654917992651462554931640625 -0.502053743600845425731904470013 +0.214939798414707200491235994377 -0.661504518985748357629006477509 -0.571149909496307395251335492503 +0.214939798414707200491235994377 0.661504518985748357629006477509 -0.571149909496307395251335492503 +0.214969611167907720394865123126 -0.76852321624755859375 -0.05621039867401123046875 +0.214969611167907720394865123126 0.76852321624755859375 -0.05621039867401123046875 +0.21500599384307861328125 -0.23210500180721282958984375 0.38716900348663330078125 +0.21500599384307861328125 0.23210500180721282958984375 0.38716900348663330078125 +0.2150259912014007568359375 -0.275064644217491105493422764994 0.0245619487017393091365935475778 +0.2150259912014007568359375 0.275064644217491105493422764994 0.0245619487017393091365935475778 +0.2151128947734832763671875 -0.107466897368431082981921065311 -0.179380202293395990542634876874 +0.2151128947734832763671875 0.107466897368431082981921065311 -0.179380202293395990542634876874 +0.215163907408714272229133257497 -0.0704147510230541118225744412484 -0.26691980659961700439453125 +0.215163907408714272229133257497 0.0704147510230541118225744412484 -0.26691980659961700439453125 +0.215175010263919830322265625 -0.46442623436450958251953125 -0.5481854975223541259765625 +0.215175010263919830322265625 0.46442623436450958251953125 -0.5481854975223541259765625 +0.215288054943084700143529630623 -0.915667939186096124792868522491 -0.13305604457855224609375 +0.215288054943084700143529630623 0.915667939186096124792868522491 -0.13305604457855224609375 +0.215300011634826676809595369377 -0.299773597717285178454460492503 0.154213201999664317742855246252 +0.215300011634826676809595369377 0.299773597717285178454460492503 0.154213201999664317742855246252 +0.21532680094242095947265625 -0.302541294693946860583366742503 -0.254171705245971712994190738755 +0.21532680094242095947265625 0.302541294693946860583366742503 -0.254171705245971712994190738755 +0.215332949161529535464509876874 -0.0233481489121913909912109375 0.274929898977279651983707253748 +0.215332949161529535464509876874 0.0233481489121913909912109375 0.274929898977279651983707253748 +0.2153410017490386962890625 0 0.1269967555999755859375 +0.215355256199836753161491742503 -0.417255863547325189788494981258 -0.286391052603721663061264735006 +0.215355256199836753161491742503 0.417255863547325189788494981258 -0.286391052603721663061264735006 +0.215361094474792486019865123126 -0.436363670229911793096988503748 -0.696926075220107965613181022491 +0.215361094474792486019865123126 0.436363670229911793096988503748 -0.696926075220107965613181022491 +0.21541400253772735595703125 -0.119055248796939849853515625 -0.0438482500612735748291015625 +0.21541400253772735595703125 0.119055248796939849853515625 -0.0438482500612735748291015625 +0.2154510021209716796875 -0.10633049905300140380859375 0.069099001586437225341796875 +0.2154510021209716796875 0.10633049905300140380859375 0.069099001586437225341796875 +0.21546106040477752685546875 -0.0695026494562625829498614393742 0.266919451951980579718082253748 +0.21546106040477752685546875 0.0695026494562625829498614393742 0.266919451951980579718082253748 +0.215467804670333856753572376874 -0.171615296602249139956697376874 -0.118835100531578058413728626874 +0.215467804670333856753572376874 0.171615296602249139956697376874 -0.118835100531578058413728626874 +0.215525144338607782534822376874 -0.479831817746162403448551003748 0.66769029200077056884765625 +0.215525144338607782534822376874 0.479831817746162403448551003748 0.66769029200077056884765625 +0.215525460243225081002904630623 -0.2750002443790435791015625 -0.0205856002867221832275390625 +0.215525460243225081002904630623 0.2750002443790435791015625 -0.0205856002867221832275390625 +0.215574002265930181332365123126 -0.0199697993695735938335378278907 0.2076753079891204833984375 +0.215574002265930181332365123126 0.0199697993695735938335378278907 0.2076753079891204833984375 +0.215608739852905267886384876874 -0.185195159912109358346654630623 -0.204244244098663318975894753748 +0.215608739852905267886384876874 0.185195159912109358346654630623 -0.204244244098663318975894753748 +0.215632009506225602590845369377 -0.768950414657592840050881477509 0.0470928013324737604339276231258 +0.215632009506225602590845369377 0.768950414657592840050881477509 0.0470928013324737604339276231258 +0.215635004639625538214176003748 -0.231308010220527632272435880623 -0.149993899464607227667301003748 +0.215635004639625538214176003748 0.231308010220527632272435880623 -0.149993899464607227667301003748 +0.215639103949069987908870871252 -0.279106190800666842388721988755 0.279462602734565745965511496252 +0.215639103949069987908870871252 0.279106190800666842388721988755 0.279462602734565745965511496252 +0.2156808078289031982421875 -0.504104411602020241467414507497 -0.243640208244323724917634876874 +0.2156808078289031982421875 0.504104411602020241467414507497 -0.243640208244323724917634876874 +0.215684992074966414010717130623 -0.1157712042331695556640625 0.173427003622055042608707253748 +0.215684992074966414010717130623 0.1157712042331695556640625 0.173427003622055042608707253748 +0.2157011926174163818359375 -0.059727899730205535888671875 0.199764007329940790347322376874 +0.2157011926174163818359375 0.059727899730205535888671875 0.199764007329940790347322376874 +0.215706801414489751644865123126 -0.25382959842681884765625 -0.221452403068542497122095369377 +0.215706801414489751644865123126 0.25382959842681884765625 -0.221452403068542497122095369377 +0.2157551944255828857421875 -0.201695394515991194284154630623 -0.052617900073528289794921875 +0.2157551944255828857421875 0.201695394515991194284154630623 -0.052617900073528289794921875 +0.215783996880054479428068248126 -0.0901647023856639862060546875 0.384457486867904651983707253748 +0.215783996880054479428068248126 0.0901647023856639862060546875 0.384457486867904651983707253748 +0.215949243307113653012052623126 -0.431112000346183799059929242503 0.264590145647525809557976117503 +0.215949243307113653012052623126 0.431112000346183799059929242503 0.264590145647525809557976117503 +0.215992502868175506591796875 -0.340693496167659759521484375 0.6322777569293975830078125 +0.215992502868175506591796875 0.340693496167659759521484375 0.6322777569293975830078125 +0.2160007953643798828125 -0.492361593246460005346420985006 0.592388820648193425988381477509 +0.2160007953643798828125 0.492361593246460005346420985006 0.592388820648193425988381477509 +0.216028392314910888671875 -0.3866883814334869384765625 -0.542036604881286576684829014994 +0.216028392314910888671875 0.3866883814334869384765625 -0.542036604881286576684829014994 +0.21604309976100921630859375 -0.363477820158004727435496761245 0.557861483097076393811164507497 +0.21604309976100921630859375 0.363477820158004727435496761245 0.557861483097076393811164507497 +0.216134405136108403988615123126 -0.355160808563232455181690738755 -0.683480787277221724096420985006 +0.216134405136108403988615123126 0.355160808563232455181690738755 -0.683480787277221724096420985006 +0.216254997253417957647769753748 -0.27652680873870849609375 0.486586797237396229132144753748 +0.216254997253417957647769753748 0.27652680873870849609375 0.486586797237396229132144753748 +0.2163119018077850341796875 -0.665739202499389559619658029987 0 +0.2163119018077850341796875 0.665739202499389559619658029987 0 +0.2163625061511993408203125 -0.059306748211383819580078125 0.1103174984455108642578125 +0.2163625061511993408203125 0.059306748211383819580078125 0.1103174984455108642578125 +0.216377153992652920821981865629 -0.0223707005381584174419362653907 -0.50515408813953399658203125 +0.216377153992652920821981865629 0.0223707005381584174419362653907 -0.50515408813953399658203125 +0.21644650399684906005859375 -0.09933625161647796630859375 -0.0760477483272552490234375 +0.21644650399684906005859375 0.09933625161647796630859375 -0.0760477483272552490234375 +0.216450002789497386590511496252 -0.103746502101421361752286998126 -0.604057985544204756322983485006 +0.216450002789497386590511496252 0.103746502101421361752286998126 -0.604057985544204756322983485006 +0.216478842496871937139957253748 -0.666264000535011224890524772491 0.481383046507835365979133257497 +0.216478842496871937139957253748 0.666264000535011224890524772491 0.481383046507835365979133257497 +0.216497537493705732858373380623 -0.227270440757274622134431751874 -0.789921981096267655786391514994 +0.216497537493705732858373380623 0.227270440757274622134431751874 -0.789921981096267655786391514994 +0.216578143090009667126594194997 -0.0627398986369371441940145928129 0.9228527843952178955078125 +0.216578143090009667126594194997 0.0627398986369371441940145928129 0.9228527843952178955078125 +0.216621208190917985403345369377 -0.246180796623230002673210492503 0.229063606262207036801115123126 +0.216621208190917985403345369377 0.246180796623230002673210492503 0.229063606262207036801115123126 +0.216688947379589075259431751874 -0.356691607832908652575554242503 0.168276147544383997134431751874 +0.216688947379589075259431751874 0.356691607832908652575554242503 0.168276147544383997134431751874 +0.216697847098112100772127064374 -0.6669398844242095947265625 0.640884274244308493884147992503 +0.216697847098112100772127064374 0.6669398844242095947265625 0.640884274244308493884147992503 +0.2167022526264190673828125 -0.0328000001609325408935546875 0.120267502963542938232421875 +0.2167022526264190673828125 0.0328000001609325408935546875 0.120267502963542938232421875 +0.216726753115654008352564119377 -0.180434252321720139944360994377 0.35067509114742279052734375 +0.216726753115654008352564119377 0.180434252321720139944360994377 0.35067509114742279052734375 +0.216823196411132818051115123126 -0.0368180997669696821739115932814 -0.204039591550827015264957253748 +0.216823196411132818051115123126 0.0368180997669696821739115932814 -0.204039591550827015264957253748 +0.216886806488037126028345369377 -0.190487599372863775082365123126 -0.276902008056640613897769753748 +0.216886806488037126028345369377 0.190487599372863775082365123126 -0.276902008056640613897769753748 +0.216963952779769875256477007497 -0.258198854327201854363948996252 0.0935945466160774119934728787484 +0.216963952779769875256477007497 0.258198854327201854363948996252 0.0935945466160774119934728787484 +0.217079991102218622378572376874 -0.157717806100845320260717130623 0.536657416820526145251335492503 +0.217079991102218622378572376874 -0.157716000080108637027009876874 -0.13416449725627899169921875 +0.217079991102218622378572376874 0.157716000080108637027009876874 -0.13416449725627899169921875 +0.217079991102218622378572376874 0.157717806100845320260717130623 0.536657416820526145251335492503 +0.217082405090332025698884876874 -0.352667391300201416015625 -0.434167206287384033203125 +0.217082405090332025698884876874 0.352667391300201416015625 -0.434167206287384033203125 +0.217164495587348932437166126874 -0.128979545831680281198217130623 -0.242288902401924105545205634371 +0.217164495587348932437166126874 0.128979545831680281198217130623 -0.242288902401924105545205634371 +0.217177344858646398373380748126 -0.582919988036155745092514735006 0.188514949381351465396150501874 +0.217177344858646398373380748126 0.582919988036155745092514735006 0.188514949381351465396150501874 +0.217246948182582833020148882497 -0.918073344230651788855368522491 0.111559449881315220221011941248 +0.217246948182582833020148882497 0.918073344230651788855368522491 0.111559449881315220221011941248 +0.217260041832923883609041126874 -0.0429793011397123295158628764057 -0.271017947793006863665965511245 +0.217260041832923883609041126874 0.0429793011397123295158628764057 -0.271017947793006863665965511245 +0.217356155812740342581079744377 -0.315949705243110667840511496252 0.394248804450035128521534488755 +0.217356155812740342581079744377 0.315949705243110667840511496252 0.394248804450035128521534488755 +0.21742700040340423583984375 -0.116720497608184814453125 -0.434858500957489013671875 +0.21742700040340423583984375 0.116720497608184814453125 -0.434858500957489013671875 +0.21747849881649017333984375 -0.044898249208927154541015625 -0.114835999906063079833984375 +0.21747849881649017333984375 0.044898249208927154541015625 -0.114835999906063079833984375 +0.217489796876907337530582253748 -0.133607697486877424752904630623 -0.157629901170730585269197376874 +0.217489796876907337530582253748 0.133607697486877424752904630623 -0.157629901170730585269197376874 +0.217594496905803680419921875 -0.669694483280181884765625 0.2581889927387237548828125 +0.217594496905803680419921875 0.669694483280181884765625 0.2581889927387237548828125 +0.21761624515056610107421875 -0.10847075283527374267578125 -0.058113999664783477783203125 +0.21761624515056610107421875 0.10847075283527374267578125 -0.058113999664783477783203125 +0.217773900926113123110994251874 -0.670250719785690285412727007497 0.559765809774398825915397992503 +0.217773900926113123110994251874 0.670250719785690285412727007497 0.559765809774398825915397992503 +0.217832989990711212158203125 -0.57029999792575836181640625 -0.43566749989986419677734375 +0.217832989990711212158203125 0.57029999792575836181640625 -0.43566749989986419677734375 +0.217842292785644514596654630623 -0.188493293523788435495092130623 0.0837558031082153292556924384371 +0.217842292785644514596654630623 0.188493293523788435495092130623 0.0837558031082153292556924384371 +0.21785700321197509765625 -0.13275800645351409912109375 0.4300160109996795654296875 +0.21785700321197509765625 0.13275800645351409912109375 0.4300160109996795654296875 +0.21789349615573883056640625 -0.12130124866962432861328125 0.01756249926984310150146484375 +0.21789349615573883056640625 0.12130124866962432861328125 0.01756249926984310150146484375 +0.217932593822479231393529630623 -0.0399624019861221299598774692186 0.557591414451599098889289507497 +0.217932593822479231393529630623 0.0399624019861221299598774692186 0.557591414451599098889289507497 +0.217954103648662578240902121252 -0.532483240962028481213508257497 0.302418999373912811279296875 +0.217954103648662578240902121252 0.532483240962028481213508257497 0.302418999373912811279296875 +0.2179605066776275634765625 -0.12155924737453460693359375 -0.014714750461280345916748046875 +0.2179605066776275634765625 0.12155924737453460693359375 -0.014714750461280345916748046875 +0.218006555736064921990902121252 -0.232251754403114324398771373126 -0.317855688929557789190738503748 +0.218006555736064921990902121252 0.232251754403114324398771373126 -0.317855688929557789190738503748 +0.218149006366729736328125 -0.935128986835479736328125 -0.2791860103607177734375 +0.218149006366729736328125 0.935128986835479736328125 -0.2791860103607177734375 +0.218154895305633533819644753748 -0.1328592002391815185546875 0.157343405485153187139957253748 +0.218154895305633533819644753748 0.1328592002391815185546875 0.157343405485153187139957253748 +0.218195396661758411749332253748 -0.0123750004917383190500279610546 -0.2055180072784423828125 +0.218195396661758411749332253748 0.0123750004917383190500279610546 -0.2055180072784423828125 +0.218227502703666698113948996252 -0.351090458035469066278011496252 -0.177798606455326080322265625 +0.218227502703666698113948996252 0.351090458035469066278011496252 -0.177798606455326080322265625 +0.218290205299854267462222878748 -0.783631139993667624743522992503 0.246519549190998082943693248126 +0.218290205299854267462222878748 0.783631139993667624743522992503 0.246519549190998082943693248126 +0.218437492847442626953125 -0.35448300838470458984375 0.2768155038356781005859375 +0.218437492847442626953125 0.35448300838470458984375 0.2768155038356781005859375 +0.218451449275016779116853626874 -0.21547295153141021728515625 -0.168375547230243671759097878748 +0.218451449275016779116853626874 0.21547295153141021728515625 -0.168375547230243671759097878748 +0.218491691350936878546207253748 -0.579000109434127718799345529987 -0.327140101790428128314403011245 +0.218491691350936878546207253748 0.579000109434127718799345529987 -0.327140101790428128314403011245 +0.218540406227111821957365123126 -0.326492810249328635485710492503 0.0751164019107818659026776231258 +0.218540406227111821957365123126 0.326492810249328635485710492503 0.0751164019107818659026776231258 +0.218571209907531760485710492503 -0.297396802902221701891960492503 -0.154213595390319840872095369377 +0.218571209907531760485710492503 0.297396802902221701891960492503 -0.154213595390319840872095369377 +0.21861279010772705078125 0 0.769551181793212912829460492503 +0.218832591176033014468416126874 -0.158990652859210962466463001874 0.222113499045372003726228626874 +0.218832591176033014468416126874 0.158990652859210962466463001874 0.222113499045372003726228626874 +0.218860942125320423468082253748 -0.0144553503021597855304758439843 -0.27274729311466217041015625 +0.218860942125320423468082253748 0.0144553503021597855304758439843 -0.27274729311466217041015625 +0.21899025142192840576171875 -0.072481252253055572509765625 -0.096383251249790191650390625 +0.21899025142192840576171875 0.072481252253055572509765625 -0.096383251249790191650390625 +0.219008997082710238357705634371 -0.524568790197372458727897992503 0.408488488197326637951789507497 +0.219008997082710238357705634371 0.524568790197372458727897992503 0.408488488197326637951789507497 +0.2190749943256378173828125 -0.3950839936733245849609375 0.2142769992351531982421875 +0.2190749943256378173828125 0.3950839936733245849609375 0.2142769992351531982421875 +0.219157950580120108874382367503 -0.249691753089427981304737613755 -0.438319212198257479595753238755 +0.219157950580120108874382367503 0.249691753089427981304737613755 -0.438319212198257479595753238755 +0.219188256561756139584318248126 -0.381612145900726340563835492503 -0.0939613491296768243987713731258 +0.219188256561756139584318248126 0.381612145900726340563835492503 -0.0939613491296768243987713731258 +0.219221591949462890625 -0.159273600578308111019865123126 0.752711200714111350329460492503 +0.219221591949462890625 0.159273600578308111019865123126 0.752711200714111350329460492503 +0.2192375957965850830078125 -0.203692799806594854183927623126 0.0210749991238117218017578125 +0.2192375957965850830078125 0.203692799806594854183927623126 0.0210749991238117218017578125 +0.219268798828125 -0.28159201145172119140625 0.180630004405975347347990123126 +0.219268798828125 0.28159201145172119140625 0.180630004405975347347990123126 +0.2193768024444580078125 -0.384901660680770862921207253748 0.0788953475654125269134198106258 +0.2193768024444580078125 0.384901660680770862921207253748 0.0788953475654125269134198106258 +0.219377994537353515625 -0.324867200851440440789730246252 -0.0795899987220764215667401231258 +0.219377994537353515625 0.324867200851440440789730246252 -0.0795899987220764215667401231258 +0.219439356029033666439786998126 -0.0527409978210926083663778740629 -0.609560889005661077355568977509 +0.219439356029033666439786998126 0.0527409978210926083663778740629 -0.609560889005661077355568977509 +0.219483208656311046258480246252 -0.159461605548858659231470369377 -0.7525951862335205078125 +0.219483208656311046258480246252 0.159461605548858659231470369377 -0.7525951862335205078125 +0.219557100534439081362947376874 -0.203673595190048212222322376874 -0.0176577005535364130184294850778 +0.219557100534439081362947376874 0.203673595190048212222322376874 -0.0176577005535364130184294850778 +0.219647049903869601150674384371 -0.258609390258789040295539507497 -0.0858854509890079470535440009371 +0.219647049903869601150674384371 0.258609390258789040295539507497 -0.0858854509890079470535440009371 +0.2196537554264068603515625 -0.02759574912488460540771484375 -0.11614950001239776611328125 +0.2196537554264068603515625 0.02759574912488460540771484375 -0.11614950001239776611328125 +0.21977074444293975830078125 -0.07007925212383270263671875 0.096382997930049896240234375 +0.21977074444293975830078125 0.07007925212383270263671875 0.096382997930049896240234375 +0.219773393869400007760717130623 -0.518957412242889382092414507497 0.205870807170867919921875 +0.219773393869400007760717130623 0.518957412242889382092414507497 0.205870807170867919921875 +0.21981300413608551025390625 -0.3859179913997650146484375 -0.22967250645160675048828125 +0.21981300413608551025390625 0.3859179913997650146484375 -0.22967250645160675048828125 +0.219880390167236344778345369377 -0.0801464021205902099609375 0.324390411376953125 +0.219880390167236344778345369377 0.0801464021205902099609375 0.324390411376953125 +0.220003604888916015625 -0.159841597080230712890625 0.293341207504272449835269753748 +0.220003604888916015625 0.159841597080230712890625 0.293341207504272449835269753748 +0.220059451460838328973323996252 -0.03003344871103763580322265625 0.391371738910675059930355246252 +0.220059451460838328973323996252 0.03003344871103763580322265625 0.391371738910675059930355246252 +0.220165400207042699642911998126 0 -0.611577850580215520714943977509 +0.220179696381092082635433371252 -0.256186451017856586798160378748 0.555328139662742636950554242503 +0.220179696381092082635433371252 0.256186451017856586798160378748 0.555328139662742636950554242503 +0.220197609066963173596320757497 -0.227868908643722528628572376874 0.624170410633087091589743522491 +0.220197609066963173596320757497 0.227868908643722528628572376874 0.624170410633087091589743522491 +0.220325405895710008108423494377 -0.796467590332031294408920985006 0.356505301594734202996761496252 +0.220325405895710008108423494377 0.796467590332031294408920985006 0.356505301594734202996761496252 +0.220383596420288069284154630623 -0.175414198637008661441072376874 0.103252199292182919587723688437 +0.220383596420288069284154630623 0.175414198637008661441072376874 0.103252199292182919587723688437 +0.220429298281669627801448996252 0 0.611482968926429726330695757497 +0.220508104562759404965177623126 -0.391376245021820057257144753748 0.0264725999906659133220632185157 +0.220508104562759404965177623126 0.391376245021820057257144753748 0.0264725999906659133220632185157 +0.22068250179290771484375 -0.01643924973905086517333984375 0.116314001381397247314453125 +0.22068250179290771484375 0.01643924973905086517333984375 0.116314001381397247314453125 +0.220776759088039398193359375 -0.19811175763607025146484375 0.68884648382663726806640625 +0.220776759088039398193359375 0.19811175763607025146484375 0.68884648382663726806640625 +0.2207784950733184814453125 -0.01031200028955936431884765625 -0.11683525145053863525390625 +0.2207784950733184814453125 0.01031200028955936431884765625 -0.11683525145053863525390625 +0.220784854888916026727230246252 -0.390840312838554415630909488755 -0.0315890997648239149619975307814 +0.220784854888916026727230246252 0.390840312838554415630909488755 -0.0315890997648239149619975307814 +0.22085200250148773193359375 -0.07821600139141082763671875 -0.4417090117931365966796875 +0.22085200250148773193359375 0.07821600139141082763671875 -0.4417090117931365966796875 +0.2208902053534984588623046875 -0.552848714590072565222556022491 -0.740315043926238924854033029987 +0.2208902053534984588623046875 0.552848714590072565222556022491 -0.740315043926238924854033029987 +0.22090099751949310302734375 -0.323702991008758544921875 -0.3105140030384063720703125 +0.22090099751949310302734375 0.323702991008758544921875 -0.3105140030384063720703125 +0.220903801918029774054019753748 -0.1903730928897857666015625 -0.0704247012734413174728231865629 +0.220903801918029774054019753748 0.1903730928897857666015625 -0.0704247012734413174728231865629 +0.220907998085021983758480246252 -0.262401199340820345806690738755 0.205780005455017095394865123126 +0.220907998085021983758480246252 0.262401199340820345806690738755 0.205780005455017095394865123126 +0.220970106124877913034154630623 -0.0869775027036666786850460653113 -0.183322495222091680355802623126 +0.220970106124877913034154630623 0.0869775027036666786850460653113 -0.183322495222091680355802623126 +0.221042251586914068051115123126 -0.422137311100959811138721988755 -0.442086440324783336297542746252 +0.221042251586914068051115123126 0.422137311100959811138721988755 -0.442086440324783336297542746252 +0.22107599675655364990234375 -0.16061900556087493896484375 -0.96193897724151611328125 +0.22107599675655364990234375 0.16061900556087493896484375 -0.96193897724151611328125 +0.221108007431030290090845369377 -0.680511999130249067846420985006 0.35777199268341064453125 +0.221108007431030290090845369377 0.680511999130249067846420985006 0.35777199268341064453125 +0.221195702254772197381527121252 -0.298277547955513033794971988755 0.254171249270439159051448996252 +0.221195702254772197381527121252 0.298277547955513033794971988755 0.254171249270439159051448996252 +0.221232596039772050344751619377 -0.123610045015811922941573186563 -0.37185569107532501220703125 +0.221232596039772050344751619377 0.123610045015811922941573186563 -0.37185569107532501220703125 +0.2212442457675933837890625 -0.11098849773406982421875 0.0351077504456043243408203125 +0.2212442457675933837890625 0.11098849773406982421875 0.0351077504456043243408203125 +0.22127099335193634033203125 -0.2431170046329498291015625 -0.3767400085926055908203125 +0.22127099335193634033203125 0.2431170046329498291015625 -0.3767400085926055908203125 +0.221360290050506586245759876874 -0.494970691204071000512954014994 -0.442722707986831609527911268742 +0.221360290050506586245759876874 0.494970691204071000512954014994 -0.442722707986831609527911268742 +0.221388602256774896792634876874 -0.0792243003845214815994424384371 0.186307793855667119808927623126 +0.221388602256774896792634876874 0.0792243003845214815994424384371 0.186307793855667119808927623126 +0.221410802006721502133146373126 -0.293333405256271384509147992503 0.821543401479721047131477007497 +0.221410802006721502133146373126 0.293333405256271384509147992503 0.821543401479721047131477007497 +0.2214522063732147216796875 0 0.202383005619049066714509876874 +0.221559256315231350997763115629 -0.340549013018608126568409488755 -0.370726403594017039910823996252 +0.221559256315231350997763115629 0.340549013018608126568409488755 -0.370726403594017039910823996252 +0.221589559316635126284822376874 -0.243962255120277388131810880623 0.117815248668193803260884067186 +0.221589559316635126284822376874 0.243962255120277388131810880623 0.117815248668193803260884067186 +0.221610295772552479132144753748 -0.1457127034664154052734375 0.14020259678363800048828125 +0.221610295772552479132144753748 0.1457127034664154052734375 0.14020259678363800048828125 +0.221645700931549061163394753748 -0.161034303903579700811832253748 0.122233799099922171849108565311 +0.221645700931549061163394753748 0.161034303903579700811832253748 0.122233799099922171849108565311 +0.2216907441616058349609375 -0.111743248999118804931640625 -0.02943949960172176361083984375 +0.2216907441616058349609375 0.111743248999118804931640625 -0.02943949960172176361083984375 +0.221702608466148365362613503748 -0.178920692205429054943977007497 0.203311145305633544921875 +0.221702608466148365362613503748 0.178920692205429054943977007497 0.203311145305633544921875 +0.221705900132656091860994251874 -0.595459166169166609350327235006 -0.137022600322961818353206808752 +0.221705900132656091860994251874 0.595459166169166609350327235006 -0.137022600322961818353206808752 +0.221721607446670521124332253748 -0.426766812801361083984375 0.358761012554168701171875 +0.221721607446670521124332253748 0.426766812801361083984375 0.358761012554168701171875 +0.22172300517559051513671875 -0.04313249886035919189453125 0.107137747108936309814453125 +0.22172300517559051513671875 0.04313249886035919189453125 0.107137747108936309814453125 +0.221725347638130176886051003748 -0.161091001331806177310213001874 -0.217686703801155068127570757497 +0.221725347638130176886051003748 0.161091001331806177310213001874 -0.217686703801155068127570757497 +0.221747490763664262258814119377 -0.403152766823768604620426003748 0.459124884009361300396534488755 +0.221747490763664262258814119377 0.403152766823768604620426003748 0.459124884009361300396534488755 +0.221773701906204212530582253748 -0.923751527070999056689970529987 0 +0.221773701906204212530582253748 0.923751527070999056689970529987 0 +0.221844694018363958187833873126 0 0.503274205327034040990952235006 +0.2218747437000274658203125 -0.337402796745300326275440738755 0.198572395741939550228849498126 +0.2218747437000274658203125 0.337402796745300326275440738755 0.198572395741939550228849498126 +0.221960806846618674548210492503 -0.0954692006111145102797976846887 -0.318777608871460005346420985006 +0.221960806846618674548210492503 0.0954692006111145102797976846887 -0.318777608871460005346420985006 +0.221988393366336800305305132497 -0.810004180669784523693977007497 -0.443975852429866757464793636245 +0.221988393366336800305305132497 0.810004180669784523693977007497 -0.443975852429866757464793636245 +0.22209124267101287841796875 -0.08053450286388397216796875 0.08179025352001190185546875 +0.22209124267101287841796875 0.08053450286388397216796875 0.08179025352001190185546875 +0.22225534915924072265625 -0.317951710522174801898387386245 -0.867184701561927728796774772491 +0.22225534915924072265625 0.317951710522174801898387386245 -0.867184701561927728796774772491 +0.222294747829437255859375 -0.08265049755573272705078125 -0.07908199727535247802734375 +0.222294747829437255859375 0.08265049755573272705078125 -0.07908199727535247802734375 +0.222420902550220483950838001874 -0.128917754441499721185238058752 0.59700028598308563232421875 +0.222420902550220483950838001874 0.128917754441499721185238058752 0.59700028598308563232421875 +0.222485996782779693603515625 -0.68473573029041290283203125 -0.2100884914398193359375 +0.222485996782779693603515625 0.68473573029041290283203125 -0.2100884914398193359375 +0.222523948550224309750333873126 -0.466414287686348016936932481258 -0.188257852196693442614616742503 +0.222523948550224309750333873126 0.466414287686348016936932481258 -0.188257852196693442614616742503 +0.222668547928333293572933371252 -0.59974329173564910888671875 0.115007102489471435546875 +0.222668547928333293572933371252 0.59974329173564910888671875 0.115007102489471435546875 +0.2227160036563873291015625 -0.946197986602783203125 0.23474900424480438232421875 +0.2227160036563873291015625 0.946197986602783203125 0.23474900424480438232421875 +0.2227520048618316650390625 -0.1134967505931854248046875 0 +0.2227520048618316650390625 0.1134967505931854248046875 0 +0.222788405418396007195980246252 -0.331378793716430697369190738755 0.0235264003276824951171875 +0.222788405418396007195980246252 0.331378793716430697369190738755 0.0235264003276824951171875 +0.2229155004024505615234375 -0.0392290018498897552490234375 -0.445836007595062255859375 +0.2229155004024505615234375 0.0392290018498897552490234375 -0.445836007595062255859375 +0.222968757152557373046875 -0.055028498172760009765625 -0.098776750266551971435546875 +0.222968757152557373046875 0.055028498172760009765625 -0.098776750266551971435546875 +0.222971440851688379458650501874 -0.269273552298545826300113503748 -0.547974056005477883068977007497 +0.222971440851688379458650501874 0.269273552298545826300113503748 -0.547974056005477883068977007497 +0.223001453280448902471988503748 -0.265277245640754666400340511245 0.0489723481237888322303852817186 +0.223001453280448902471988503748 0.265277245640754666400340511245 0.0489723481237888322303852817186 +0.223034811019897472039730246252 -0.330858802795410189556690738755 -0.0280707985162735006168244211722 +0.223034811019897472039730246252 0.330858802795410189556690738755 -0.0280707985162735006168244211722 +0.22312949597835540771484375 -0.099941253662109375 0.0522004999220371246337890625 +0.22312949597835540771484375 0.099941253662109375 0.0522004999220371246337890625 +0.223145407438278181588842130623 -0.800374460220336869653579014994 -0.179183400422334659918277566248 +0.223145407438278181588842130623 0.800374460220336869653579014994 -0.179183400422334659918277566248 +0.2232120037078857421875 -0.162171196937561046258480246252 -0.289615201950073231085269753748 +0.2232120037078857421875 0.162171196937561046258480246252 -0.289615201950073231085269753748 +0.22325600683689117431640625 -0.080571003258228302001953125 -0.97142398357391357421875 +0.22325600683689117431640625 0.080571003258228302001953125 -0.97142398357391357421875 +0.2232912480831146240234375 -0.09039725363254547119140625 0.06685300171375274658203125 +0.2232912480831146240234375 0.09039725363254547119140625 0.06685300171375274658203125 +0.223318195343017555920539507497 0 0.269497552514076199603465511245 +0.22335375845432281494140625 -0.04992449842393398284912109375 0.71422724425792694091796875 +0.22335375845432281494140625 0.04992449842393398284912109375 0.71422724425792694091796875 +0.223368242383003207107705634371 -0.0920023977756500160873898153113 0.253263139724731412005809261245 +0.223368242383003207107705634371 0.0920023977756500160873898153113 0.253263139724731412005809261245 +0.2234386503696441650390625 -0.687660196423530600817741742503 -0.446877300739288330078125 +0.2234386503696441650390625 0.687660196423530600817741742503 -0.446877300739288330078125 +0.223477792739868147409154630623 -0.039770700037479400634765625 0.1961528956890106201171875 +0.223477792739868147409154630623 0.039770700037479400634765625 0.1961528956890106201171875 +0.2236050069332122802734375 0 -0.4472145140171051025390625 +0.22360549867153167724609375 -0.2628634870052337646484375 0.3618060052394866943359375 +0.22360549867153167724609375 0.2628634870052337646484375 0.3618060052394866943359375 +0.22360624372959136962890625 0 0.111803747713565826416015625 +0.22360800206661224365234375 -0.4253239929676055908203125 -0.13819849491119384765625 +0.22360800206661224365234375 0.4253239929676055908203125 -0.13819849491119384765625 +0.223678803443908696957365123126 -0.02669639885425567626953125 0.330537605285644575658920985006 +0.223678803443908696957365123126 0.02669639885425567626953125 0.330537605285644575658920985006 +0.223741099238395718673544365629 -0.109218449145555507318050558752 0.490419608354568548058693977509 +0.223741099238395718673544365629 0.109218449145555507318050558752 0.490419608354568548058693977509 +0.223903799057006830386384876874 -0.530854797363281227795539507497 -0.167511606216430658511384876874 +0.223903799057006830386384876874 0.530854797363281227795539507497 -0.167511606216430658511384876874 +0.2239840030670166015625 0 -0.974592983722686767578125 +0.22403849661350250244140625 -0.3723619878292083740234375 0.24729199707508087158203125 +0.22403849661350250244140625 0.3723619878292083740234375 0.24729199707508087158203125 +0.224043989181518576891960492503 -0.0969519972801208551604901231258 -0.761842393875122092516960492503 +0.224043989181518576891960492503 0.0969519972801208551604901231258 -0.761842393875122092516960492503 +0.224162757396697998046875 -0.0921282470226287841796875 -0.0613465011119842529296875 +0.224162757396697998046875 0.0921282470226287841796875 -0.0613465011119842529296875 +0.224197408556938149182258257497 -0.105438901484012595433092940311 -0.247220757603645313604801003748 +0.224197408556938149182258257497 0.105438901484012595433092940311 -0.247220757603645313604801003748 +0.224289000034332275390625 -0.1013572514057159423828125 -0.0438307486474514007568359375 +0.224289000034332275390625 0.1013572514057159423828125 -0.0438307486474514007568359375 +0.224290394783020041735710492503 -0.280246806144714366570980246252 -0.176508796215057384149105246252 +0.224290394783020041735710492503 0.280246806144714366570980246252 -0.176508796215057384149105246252 +0.224294352531433094366519753748 -0.265527856349945023950454014994 -0.0410724990069866180419921875 +0.224294352531433094366519753748 0.265527856349945023950454014994 -0.0410724990069866180419921875 +0.224390651285648334845035378748 -0.577125343680381708288962272491 -0.582301831245422341076789507497 +0.224390651285648334845035378748 0.577125343680381708288962272491 -0.582301831245422341076789507497 +0.224459355324506754092439564374 -0.4856409728527069091796875 0.785029643774032503955595529987 +0.224459355324506754092439564374 0.4856409728527069091796875 0.785029643774032503955595529987 +0.224570852518081648385717130623 -0.228723254799842817819310880623 0.140547744929790496826171875 +0.224570852518081648385717130623 0.228723254799842817819310880623 0.140547744929790496826171875 +0.224572604894638039318977007497 -0.0929536983370780889313067518742 0.656450188159942604748664507497 +0.224572604894638039318977007497 0.0929536983370780889313067518742 0.656450188159942604748664507497 +0.224592506885528564453125 -0.4313339889049530029296875 0.116228498518466949462890625 +0.224592506885528564453125 0.4313339889049530029296875 0.116228498518466949462890625 +0.2246485054492950439453125 -0.066535003483295440673828125 0.441708505153656005859375 +0.2246485054492950439453125 0.066535003483295440673828125 0.441708505153656005859375 +0.224793255329132107833700615629 -0.476229056715965326507244981258 0.158662892878055572509765625 +0.224793255329132107833700615629 0.476229056715965326507244981258 0.158662892878055572509765625 +0.224846251308917999267578125 -0.53172375261783599853515625 0.47876326739788055419921875 +0.224846251308917999267578125 0.53172375261783599853515625 0.47876326739788055419921875 +0.224861401319503773077457253748 -0.114514803886413565892077315311 -0.162246000766754133737279630623 +0.224861401319503773077457253748 0.114514803886413565892077315311 -0.162246000766754133737279630623 +0.224898004531860346011384876874 -0.178467607498168950863615123126 -0.0870068997144699124435263115629 +0.224898004531860346011384876874 0.178467607498168950863615123126 -0.0870068997144699124435263115629 +0.224909591674804704153345369377 -0.228498411178588878289730246252 -0.23917400836944580078125 +0.224909591674804704153345369377 0.228498411178588878289730246252 -0.23917400836944580078125 +0.224964594841003423519865123126 -0.1939727962017059326171875 0.0420176982879638671875 +0.224964594841003423519865123126 0.1939727962017059326171875 0.0420176982879638671875 +0.224995589256286626644865123126 -0.0644011974334716824630575615629 -0.324390792846679709704460492503 +0.224995589256286626644865123126 0.0644011974334716824630575615629 -0.324390792846679709704460492503 +0.224998645484447479248046875 -0.0892007969319820459563885606258 -0.379366654157638538702457253748 +0.224998645484447479248046875 0.0892007969319820459563885606258 -0.379366654157638538702457253748 +0.225059840083122270071314119377 -0.332496902346611056255909488755 -0.203208754956722276174829744377 +0.225059840083122270071314119377 0.332496902346611056255909488755 -0.203208754956722276174829744377 +0.22512330114841461181640625 -0.208894501626491563284204744377 0.328911298513412497790397992503 +0.22512330114841461181640625 0.208894501626491563284204744377 0.328911298513412497790397992503 +0.22522079944610595703125 -0.0325408011674881009200888115629 -0.766952800750732466283920985006 +0.22522079944610595703125 0.0325408011674881009200888115629 -0.766952800750732466283920985006 +0.22524225711822509765625 -0.69322876632213592529296875 0.1766362488269805908203125 +0.22524225711822509765625 0.69322876632213592529296875 0.1766362488269805908203125 +0.225339791178703285901008257497 -0.0466392517089843708366636576557 0.263716942071914650647102007497 +0.225339791178703285901008257497 0.0466392517089843708366636576557 0.263716942071914650647102007497 +0.225414898991584761178685880623 -0.805648678541183493884147992503 0.150393903255462646484375 +0.225414898991584761178685880623 0.805648678541183493884147992503 0.150393903255462646484375 +0.225428998470306396484375 -0.264079988002777099609375 0.93778598308563232421875 +0.225428998470306396484375 0.264079988002777099609375 0.93778598308563232421875 +0.225473050773143779412777121252 -0.219782195985317257980184990629 0.450952166318893454821647992503 +0.225473050773143779412777121252 0.219782195985317257980184990629 0.450952166318893454821647992503 +0.225476998090744007452457253748 -0.601892906427383356238181022491 0.277281901240348793713508257497 +0.225476998090744007452457253748 0.601892906427383356238181022491 0.277281901240348793713508257497 +0.225490841269493119680689119377 -0.608432498574256963586037727509 0.0382629010826349286178427178129 +0.225490841269493119680689119377 0.608432498574256963586037727509 0.0382629010826349286178427178129 +0.225566107034683244192407869377 -0.814353311061859153063835492503 -0.309757509827613852770866742503 +0.225566107034683244192407869377 0.814353311061859153063835492503 -0.309757509827613852770866742503 +0.225585597753524769171207253748 -0.537840592861175470495993522491 0.140849402546882634945646373126 +0.225585597753524769171207253748 0.537840592861175470495993522491 0.140849402546882634945646373126 +0.225585737824439996890291126874 -0.328256405889987945556640625 0.75090532004833221435546875 +0.225585737824439996890291126874 0.328256405889987945556640625 0.75090532004833221435546875 +0.225617846846580510922208873126 -0.315919348597526572497429242503 0.227577146887779246942073996252 +0.225617846846580510922208873126 0.315919348597526572497429242503 0.227577146887779246942073996252 +0.2256637513637542724609375 -0.0532552488148212432861328125 0.093486249446868896484375 +0.2256637513637542724609375 0.0532552488148212432861328125 0.093486249446868896484375 +0.22566640377044677734375 -0.1843512058258056640625 0.27402400970458984375 +0.22566640377044677734375 0.1843512058258056640625 0.27402400970458984375 +0.225674092769622802734375 -0.0660338982939720070541866903113 -0.186308097839355452096654630623 +0.225674092769622802734375 0.0660338982939720070541866903113 -0.186308097839355452096654630623 +0.2257241904735565185546875 -0.607834500074386663293068977509 -0.045670948922634124755859375 +0.2257241904735565185546875 0.607834500074386663293068977509 -0.045670948922634124755859375 +0.225765609741210959704460492503 -0.694824790954589932567841970013 -0.325957608222961436883480246252 +0.225765609741210959704460492503 0.694824790954589932567841970013 -0.325957608222961436883480246252 +0.22580124437808990478515625 -0.0378867499530315399169921875 -0.1003910005092620849609375 +0.22580124437808990478515625 0.0378867499530315399169921875 -0.1003910005092620849609375 +0.225804305076599098889289507497 -0.0974582970142364446441973768742 0.171797096729278564453125 +0.225804305076599098889289507497 0.0974582970142364446441973768742 0.171797096729278564453125 +0.225838798284530628546207253748 -0.13969530165195465087890625 -0.13957799971103668212890625 +0.225838798284530628546207253748 0.13969530165195465087890625 -0.13957799971103668212890625 +0.225852754712104808465511496252 -0.201136949658393876516626619377 -0.333218255639076255114616742503 +0.225852754712104808465511496252 0.201136949658393876516626619377 -0.333218255639076255114616742503 +0.2258951961994171142578125 -0.480899405479431107934829014994 -0.278759998083114635125667746252 +0.2258951961994171142578125 0.480899405479431107934829014994 -0.278759998083114635125667746252 +0.225906100869178755319310880623 -0.245216643810272194592414507497 -0.106466847658157337530582253748 +0.225906100869178755319310880623 0.245216643810272194592414507497 -0.106466847658157337530582253748 +0.225912308692932106701789507497 -0.194222992658615117855802623126 -0.0352292999625205965896768134371 +0.225912308692932106701789507497 0.194222992658615117855802623126 -0.0352292999625205965896768134371 +0.226033204793930048159822376874 -0.1642211973667144775390625 -0.530980789661407492907585492503 +0.226033204793930048159822376874 0.1642211973667144775390625 -0.530980789661407492907585492503 +0.226065692305564863717748380623 -0.194157940149307234323217130623 0.183567306399345375744758257497 +0.226065692305564863717748380623 0.194157940149307234323217130623 0.183567306399345375744758257497 +0.2260690033435821533203125 -0.02662325091660022735595703125 0.10336349904537200927734375 +0.2260690033435821533203125 0.02662325091660022735595703125 0.10336349904537200927734375 +0.226076206564903237072883257497 -0.212008649110794061831697376874 0.162609654664993275030582253748 +0.226076206564903237072883257497 0.212008649110794061831697376874 0.162609654664993275030582253748 +0.226245357096195226498380748126 -0.696324238181114218981804242503 0.431793224811553966180355246252 +0.226245357096195226498380748126 0.696324238181114218981804242503 0.431793224811553966180355246252 +0.226318407058715836965845369377 -0.313380408287048384252670985006 0.102823603153228762541182561563 +0.226318407058715836965845369377 0.313380408287048384252670985006 0.102823603153228762541182561563 +0.226342050731182103939786998126 -0.342258393764495849609375 0.366235652565956137927116742503 +0.226342050731182103939786998126 0.342258393764495849609375 0.366235652565956137927116742503 +0.2265020906925201416015625 -0.119311201572418215666182561563 0.862821900844573996813835492503 +0.2265020906925201416015625 0.119311201572418215666182561563 0.862821900844573996813835492503 +0.22650839388370513916015625 -0.274914005398750327380241742503 -0.274984198808670032843082253748 +0.22650839388370513916015625 0.274914005398750327380241742503 -0.274984198808670032843082253748 +0.226616001129150396176115123126 -0.0329288005828857407997212192186 -0.327964806556701682360710492503 +0.226616001129150396176115123126 0.0329288005828857407997212192186 -0.327964806556701682360710492503 +0.2266190052032470703125 -0.963860988616943359375 -0.140058994293212890625 +0.2266190052032470703125 -0.3639765083789825439453125 -0.2572250068187713623046875 +0.2266190052032470703125 0.3639765083789825439453125 -0.2572250068187713623046875 +0.2266190052032470703125 0.963860988616943359375 -0.140058994293212890625 +0.226657891273498529605134876874 -0.193148550391197187936498380623 -0.183901551365852344854801003748 +0.226657891273498529605134876874 0.193148550391197187936498380623 -0.183901551365852344854801003748 +0.22686074674129486083984375 -0.103567250072956085205078125 0.01754949986934661865234375 +0.22686074674129486083984375 0.103567250072956085205078125 0.01754949986934661865234375 +0.226880898326635355166658314374 -0.698254770040512062756477007497 -0.602880460023879960473891514994 +0.226880898326635355166658314374 0.698254770040512062756477007497 -0.602880460023879960473891514994 +0.22691150009632110595703125 -0.103898249566555023193359375 -0.014706999994814395904541015625 +0.22691150009632110595703125 0.103898249566555023193359375 -0.014706999994814395904541015625 +0.2269954979419708251953125 -0.4455029964447021484375 0 +0.2269954979419708251953125 0.4455029964447021484375 0 +0.22701300680637359619140625 -0.065386749804019927978515625 -0.08179025352001190185546875 +0.22701300680637359619140625 0.065386749804019927978515625 -0.08179025352001190185546875 +0.227242948114872000964226117503 -0.210472901165485393182308371252 -0.454490846395492587017628238755 +0.227242948114872000964226117503 0.210472901165485393182308371252 -0.454490846395492587017628238755 +0.227307146787643410412727007497 -0.266141751408576932025340511245 0 +0.227307146787643410412727007497 0.266141751408576932025340511245 0 +0.227308899164199801345986884371 -0.550501000881195023950454014994 0.367803102731704689709602007497 +0.227308899164199801345986884371 0.550501000881195023950454014994 0.367803102731704689709602007497 +0.2273389995098114013671875 -0.4414184987545013427734375 0.0588794983923435211181640625 +0.2273389995098114013671875 0.4414184987545013427734375 0.0588794983923435211181640625 +0.227387595176696793997095369377 0 -0.329081606864929210320980246252 +0.227454006671905517578125 -0.31446361541748046875 0.457577383518218971936164507497 +0.227454006671905517578125 0.31446361541748046875 0.457577383518218971936164507497 +0.2275049984455108642578125 -0.4396714866161346435546875 -0.070216000080108642578125 +0.2275049984455108642578125 0.4396714866161346435546875 -0.070216000080108642578125 +0.227533996105194091796875 -0.02056024968624114990234375 -0.101516246795654296875 +0.227533996105194091796875 0.02056024968624114990234375 -0.101516246795654296875 +0.227570387721061723196314119377 -0.0538888514041900648643412807814 -0.384457486867904651983707253748 +0.227570387721061723196314119377 0.0538888514041900648643412807814 -0.384457486867904651983707253748 +0.227871000766754150390625 -0.165556508302688587530582253748 -0.103275597095489501953125 +0.227871000766754150390625 0.165556508302688587530582253748 -0.103275597095489501953125 +0.227925610542297374383480246252 -0.262510800361633322985710492503 -0.197833597660064697265625 +0.227925610542297374383480246252 0.262510800361633322985710492503 -0.197833597660064697265625 +0.227964591979980452096654630623 -0.407344186305999722552684261245 -0.376964986324310302734375 +0.227964591979980452096654630623 0.407344186305999722552684261245 -0.376964986324310302734375 +0.22797699272632598876953125 -0.066041998565196990966796875 0.97142398357391357421875 +0.22797699272632598876953125 0.066041998565196990966796875 0.97142398357391357421875 +0.227979496121406527420205634371 -0.399795198440551724505809261245 0.527436679601669289318977007497 +0.227979496121406527420205634371 0.399795198440551724505809261245 0.527436679601669289318977007497 +0.228028053045272821597322376874 -0.119880902767181399259932561563 0.368960407376289378778011496252 +0.228028053045272821597322376874 0.119880902767181399259932561563 0.368960407376289378778011496252 +0.228029394149780267886384876874 -0.462032121419906627313167746252 -0.737921726703643865441506477509 +0.228029394149780267886384876874 0.462032121419906627313167746252 -0.737921726703643865441506477509 +0.22810299694538116455078125 -0.70204198360443115234375 0.67461502552032470703125 +0.22810299694538116455078125 0.70204198360443115234375 0.67461502552032470703125 +0.228107190132141118832365123126 -0.312080788612365767065170985006 -0.102823603153228762541182561563 +0.228107190132141118832365123126 0.312080788612365767065170985006 -0.102823603153228762541182561563 +0.228122091293334938733039507497 -0.194834107160568231753572376874 0 +0.228122091293334938733039507497 0.194834107160568231753572376874 0 +0.228203094005584722347990123126 -0.508057218790054387902443977509 0.7069661915302276611328125 +0.228203094005584722347990123126 0.508057218790054387902443977509 0.7069661915302276611328125 +0.228217601776123046875 -0.297393608093261707647769753748 -0.7067344188690185546875 +0.228217601776123046875 0.297393608093261707647769753748 -0.7067344188690185546875 +0.228286409378051780016960492503 -0.530270385742187544408920985006 0.553804016113281227795539507497 +0.228286409378051780016960492503 0.530270385742187544408920985006 0.553804016113281227795539507497 +0.22830750048160552978515625 0 -0.101861499249935150146484375 +0.228405211865901930368139005623 -0.816555917263031005859375 -0.059723548591136932373046875 +0.228405211865901930368139005623 0.816555917263031005859375 -0.059723548591136932373046875 +0.22842149436473846435546875 -0.063794247806072235107421875 0.079081751406192779541015625 +0.22842149436473846435546875 0.063794247806072235107421875 0.079081751406192779541015625 +0.228423306345939630679353626874 -0.165957403182983381784154630623 -0.640531516075134255139289507497 +0.228423306345939630679353626874 0.165957403182983381784154630623 -0.640531516075134255139289507497 +0.228429597616195662057592130623 -0.49626481533050537109375 0.2480742037296295166015625 +0.228429597616195662057592130623 0.49626481533050537109375 0.2480742037296295166015625 +0.2286809980869293212890625 -0.966392993927001953125 0.11743099987506866455078125 +0.2286809980869293212890625 0.966392993927001953125 0.11743099987506866455078125 +0.228787207603454584292634876874 -0.313495194911956764904914507497 -0.457577383518218971936164507497 +0.228787207603454584292634876874 0.313495194911956764904914507497 -0.457577383518218971936164507497 +0.228808808326721180304019753748 -0.115083298087120047825671065311 0.156212693452835088558927623126 +0.228808808326721180304019753748 0.115083298087120047825671065311 0.156212693452835088558927623126 +0.228855139017105108090177623126 -0.0185840992256999029685893276564 -0.387014409899711642193409488755 +0.228855139017105108090177623126 0.0185840992256999029685893276564 -0.387014409899711642193409488755 +0.228861504793167108706697376874 -0.339641410112380970343082253748 -0.567684596776962258068977007497 +0.228861504793167108706697376874 0.339641410112380970343082253748 -0.567684596776962258068977007497 +0.228927004337310779913394753748 -0.0454638004302978515625 -0.188482207059860212838842130623 +0.228927004337310779913394753748 0.0454638004302978515625 -0.188482207059860212838842130623 +0.228957760334014909231470369377 -0.371328744292259205206363503748 0.110424151271581658106946122189 +0.228957760334014909231470369377 0.371328744292259205206363503748 0.110424151271581658106946122189 +0.229109010100364690609708873126 -0.817009815573692343981804242503 0.0500361014157533617874307196871 +0.229109010100364690609708873126 0.817009815573692343981804242503 0.0500361014157533617874307196871 +0.229128895699977880306974498126 -0.486617454886436484606804242503 -0.114907648414373411704936245314 +0.229128895699977880306974498126 0.486617454886436484606804242503 -0.114907648414373411704936245314 +0.229209601879119873046875 -0.449630391597747813836605246252 0.324492609500884987561164507497 +0.229209601879119873046875 0.449630391597747813836605246252 0.324492609500884987561164507497 +0.229212892055511485711605246252 -0.705456000566482610558693977509 0.509699696302413962634147992503 +0.229212892055511485711605246252 0.705456000566482610558693977509 0.509699696302413962634147992503 +0.229232686758041398489282869377 -0.240639290213584905453458873126 -0.836387979984283491674545985006 +0.229232686758041398489282869377 0.240639290213584905453458873126 -0.836387979984283491674545985006 +0.22926299273967742919921875 -0.20779550075531005859375 -0.39275848865509033203125 +0.22926299273967742919921875 0.20779550075531005859375 -0.39275848865509033203125 +0.2293255031108856201171875 -0.010160000063478946685791015625 0.0990284979343414306640625 +0.2293255031108856201171875 0.010160000063478946685791015625 0.0990284979343414306640625 +0.2294324934482574462890625 -0.092936001718044281005859375 0.0349802486598491668701171875 +0.2294324934482574462890625 0.092936001718044281005859375 0.0349802486598491668701171875 +0.229445149004459392205745871252 -0.490458095073699973376335492503 0.0964661501348018785018112453145 +0.229445149004459392205745871252 0.490458095073699973376335492503 0.0964661501348018785018112453145 +0.22946400940418243408203125 -0.7062127590179443359375 -0.1054019965231418609619140625 +0.22946400940418243408203125 0.7062127590179443359375 -0.1054019965231418609619140625 +0.22950084507465362548828125 -0.523134192824363686291633257497 0.629413121938705466540397992503 +0.22950084507465362548828125 0.523134192824363686291633257497 0.629413121938705466540397992503 +0.229520010948181168997095369377 -0.495387983322143565789730246252 -0.584731197357177712170539507497 +0.229520010948181168997095369377 0.495387983322143565789730246252 -0.584731197357177712170539507497 +0.229522043466567987612947376874 -0.367884439229965221063167746252 -0.120335845649242406674161998126 +0.229522043466567987612947376874 0.367884439229965221063167746252 -0.120335845649242406674161998126 +0.22956025600433349609375 -0.075313746929168701171875 -0.064264498651027679443359375 +0.22956025600433349609375 0.075313746929168701171875 -0.064264498651027679443359375 +0.229597899317741382940738503748 -0.549996984004974320825454014994 -0.367135989665985096319644753748 +0.229597899317741382940738503748 0.549996984004974320825454014994 -0.367135989665985096319644753748 +0.229602092504501337222322376874 -0.253854295611381508557258257497 0.0730806998908519744873046875 +0.229602092504501337222322376874 0.253854295611381508557258257497 0.0730806998908519744873046875 +0.229610395431518538034154630623 -0.554327416419982843542868522491 0 +0.229610395431518538034154630623 0.554327416419982843542868522491 0 +0.229642805457115156686498380623 -0.377358359098434459344417746252 -0.726198336482048012463508257497 +0.229642805457115156686498380623 0.377358359098434459344417746252 -0.726198336482048012463508257497 +0.229749202728271484375 -0.106206405162811282072432561563 0.309734797477722201275440738755 +0.229749202728271484375 0.106206405162811282072432561563 0.309734797477722201275440738755 +0.2297565042972564697265625 -0.182242798805236805304019753748 0.0632412001490592901031817518742 +0.2297565042972564697265625 0.182242798805236805304019753748 0.0632412001490592901031817518742 +0.229800903797149652652009876874 -0.151887595653533935546875 -0.118835100531578058413728626874 +0.229800903797149652652009876874 0.151887595653533935546875 -0.118835100531578058413728626874 +0.229813796281814558541967130623 -0.549746382236480646277243522491 0.0704585999250411931793536268742 +0.229813796281814558541967130623 0.549746382236480646277243522491 0.0704585999250411931793536268742 +0.229872450977563841378881193123 -0.707486870884895258093649772491 0.590863910317420915063735264994 +0.229872450977563841378881193123 0.707486870884895258093649772491 0.590863910317420915063735264994 +0.229888498783111572265625 -0.093758501112461090087890625 -0.0293374992907047271728515625 +0.229888498783111572265625 0.093758501112461090087890625 -0.0293374992907047271728515625 +0.229891745746135717221036998126 -0.387877056002616904528679242503 -0.314962458610534679070980246252 +0.229891745746135717221036998126 0.387877056002616904528679242503 -0.314962458610534679070980246252 +0.2298932969570159912109375 -0.0595155000686645452301348768742 0.183321905136108381784154630623 +0.2298932969570159912109375 0.0595155000686645452301348768742 0.183321905136108381784154630623 +0.229897847771644570080695757497 -0.113934798538684836644030440311 0.238045856356620760818643134371 +0.229897847771644570080695757497 0.113934798538684836644030440311 0.238045856356620760818643134371 +0.229910397529602072985710492503 -0.207701992988586436883480246252 0.25298440456390380859375 +0.229910397529602072985710492503 0.207701992988586436883480246252 0.25298440456390380859375 +0.229924196004867548159822376874 -0.547789192199707009045539507497 -0.084035396575927734375 +0.229924196004867548159822376874 0.547789192199707009045539507497 -0.084035396575927734375 +0.2299455106258392333984375 -0.228905260562896728515625 -0.67618574202060699462890625 +0.2299455106258392333984375 0.228905260562896728515625 -0.67618574202060699462890625 +0.22995050251483917236328125 -0.16706849634647369384765625 0.4113524854183197021484375 +0.22995050251483917236328125 0.16706849634647369384765625 0.4113524854183197021484375 +0.2299869954586029052734375 -0.074000500142574310302734375 0.064264498651027679443359375 +0.2299869954586029052734375 0.074000500142574310302734375 0.064264498651027679443359375 +0.230073291063308704718082253748 -0.0198125995695590979839284528907 0.191503804922103865182592130623 +0.230073291063308704718082253748 0.0198125995695590979839284528907 0.191503804922103865182592130623 +0.230081596970558160952791126874 -0.0813578523695468874832315009371 -0.2508852481842041015625 +0.230081596970558160952791126874 0.0813578523695468874832315009371 -0.2508852481842041015625 +0.230147995054721832275390625 -0.708324730396270751953125 0.0883642472326755523681640625 +0.230147995054721832275390625 0.708324730396270751953125 0.0883642472326755523681640625 +0.23027074337005615234375 -0.08367200195789337158203125 0.0497434996068477630615234375 +0.23027074337005615234375 0.08367200195789337158203125 0.0497434996068477630615234375 +0.230365106463432306460603626874 -0.615539413690566972192641514994 -0.240921798348426807745426003748 +0.230365106463432306460603626874 0.615539413690566972192641514994 -0.240921798348426807745426003748 +0.23036624491214752197265625 -0.03685300052165985107421875 0.08985149860382080078125 +0.23036624491214752197265625 0.03685300052165985107421875 0.08985149860382080078125 +0.230392003059387229235710492503 -0.363406395912170443462940738755 0.674429607391357488488381477509 +0.230392003059387229235710492503 0.363406395912170443462940738755 0.674429607391357488488381477509 +0.23044450581073760986328125 -0.08480100333690643310546875 -0.0469477511942386627197265625 +0.23044450581073760986328125 0.08480100333690643310546875 -0.0469477511942386627197265625 +0.23047675192356109619140625 -0.0479442514479160308837890625 -0.0841535031795501708984375 +0.23047675192356109619140625 0.0479442514479160308837890625 -0.0841535031795501708984375 +0.230591893196105929275674384371 -0.231308344006538380011051003748 -0.125792796909809101446597878748 +0.230591893196105929275674384371 0.231308344006538380011051003748 -0.125792796909809101446597878748 +0.230631051957607274838224498126 -0.477612859010696444439503238755 -0.375759786367416415142628238755 +0.230631051957607274838224498126 0.477612859010696444439503238755 -0.375759786367416415142628238755 +0.23065830767154693603515625 -0.235848140716552745477230246252 0.306059843301773104595753238755 +0.23065830767154693603515625 0.235848140716552745477230246252 0.306059843301773104595753238755 +0.230738854408264165707365123126 -0.312198749184608492779346988755 -0.227577146887779246942073996252 +0.230738854408264165707365123126 0.312198749184608492779346988755 -0.227577146887779246942073996252 +0.230740945041179673635767244377 -0.498207595944404668664162727509 0.0323724510148167624046244839064 +0.230740945041179673635767244377 0.498207595944404668664162727509 0.0323724510148167624046244839064 +0.230741700530052162854133257497 -0.139070397615432717053352007497 -0.223422503471374489514289507497 +0.230741700530052162854133257497 0.139070397615432717053352007497 -0.223422503471374489514289507497 +0.230955457687377935238615123126 -0.497661438584327764367287727509 -0.03863749839365482330322265625 +0.230955457687377935238615123126 0.497661438584327764367287727509 -0.03863749839365482330322265625 +0.23097024857997894287109375 -0.09566999971866607666015625 0 +0.23097024857997894287109375 0.09566999971866607666015625 0 +0.231009006500244140625 -0.118362602591514584626786188437 -0.540948593616485617907585492503 +0.231009006500244140625 0.118362602591514584626786188437 -0.540948593616485617907585492503 +0.231048595905303938424779630623 -0.09503160417079925537109375 -0.166088998317718505859375 +0.231048595905303938424779630623 0.09503160417079925537109375 -0.166088998317718505859375 +0.231064492464065546206697376874 -0.0246722996234893798828125 -0.189737999439239496402009876874 +0.231064492464065546206697376874 0.0246722996234893798828125 -0.189737999439239496402009876874 +0.231130805611610423699886496252 -0.829727089405059792248664507497 0.261020699143409751208366742503 +0.231130805611610423699886496252 0.829727089405059792248664507497 0.261020699143409751208366742503 +0.2314589917659759521484375 -0.41430898010730743408203125 -0.580753505229949951171875 +0.2314589917659759521484375 0.41430898010730743408203125 -0.580753505229949951171875 +0.231474749743938446044921875 -0.38944052159786224365234375 0.5977087318897247314453125 +0.231474749743938446044921875 0.38944052159786224365234375 0.5977087318897247314453125 +0.231499493122100830078125 -0.183276897668838506527677623126 -0.05308020114898681640625 +0.231499493122100830078125 0.183276897668838506527677623126 -0.05308020114898681640625 +0.231577447056770330258146373126 -0.43387435376644134521484375 0.425000536441802967413394753748 +0.231577447056770330258146373126 0.43387435376644134521484375 0.425000536441802967413394753748 +0.231598198413848876953125 -0.0799530029296875027755575615629 0.547694993019103959497329014994 +0.231598198413848876953125 0.0799530029296875027755575615629 0.547694993019103959497329014994 +0.231657393276691436767578125 -0.221928846836090098992855246252 -0.5653160512447357177734375 +0.231657393276691436767578125 0.221928846836090098992855246252 -0.5653160512447357177734375 +0.23176275193691253662109375 -0.71329200267791748046875 0 +0.23176275193691253662109375 0.71329200267791748046875 0 +0.231849896907806385382144753748 0 -0.190382999181747419870092130623 +0.231989455223083479440404630623 -0.254784953594207774774105246252 -0.0613630481064319568962339701557 +0.231989455223083479440404630623 0.254784953594207774774105246252 -0.0613630481064319568962339701557 +0.232076811790466325247095369377 -0.135681200027465836965845369377 -0.296194005012512195929019753748 +0.232076811790466325247095369377 0.135681200027465836965845369377 -0.296194005012512195929019753748 +0.232100796699523936883480246252 -0.714340782165527432567841970013 0.275401592254638671875 +0.232100796699523936883480246252 0.714340782165527432567841970013 0.275401592254638671875 +0.2321974933147430419921875 -0.2872270047664642333984375 0.3370240032672882080078125 +0.2321974933147430419921875 0.2872270047664642333984375 0.3370240032672882080078125 +0.232276089489459991455078125 0 0.817648130655288629675681022491 +0.232287293672561651058927623126 -0.168764403462409978695646373126 -0.346498194336891163214176003748 +0.232287293672561651058927623126 0.168764403462409978695646373126 -0.346498194336891163214176003748 +0.232298398017883295230134876874 -0.199403393268585193975894753748 0.516019213199615411902243522491 +0.232298398017883295230134876874 0.199403393268585193975894753748 0.516019213199615411902243522491 +0.23233149945735931396484375 -0.2918424904346466064453125 -0.3329415023326873779296875 +0.23233149945735931396484375 0.2918424904346466064453125 -0.3329415023326873779296875 +0.232355189323425304070980246252 -0.6083199977874755859375 -0.464711999893188509869190738755 +0.232355189323425304070980246252 0.6083199977874755859375 -0.464711999893188509869190738755 +0.232357597351074224301115123126 -0.29813480377197265625 0.130864799022674560546875 +0.232357597351074224301115123126 0.29813480377197265625 0.130864799022674560546875 +0.23251600563526153564453125 -0.58194601535797119140625 -0.7792789936065673828125 +0.23251600563526153564453125 0.58194601535797119140625 -0.7792789936065673828125 +0.232565706223249429873689564374 -0.840715789794921786182158029987 0.376311151683330513684211382497 +0.232565706223249429873689564374 0.840715789794921786182158029987 0.376311151683330513684211382497 +0.232649993896484386102230246252 -0.201681208610534679070980246252 -0.255340003967285178454460492503 +0.232649993896484386102230246252 0.201681208610534679070980246252 -0.255340003967285178454460492503 +0.232709401845932001284822376874 -0.128139603137969959600894753748 0.139379400014877308233707253748 +0.232709401845932001284822376874 0.128139603137969959600894753748 0.139379400014877308233707253748 +0.232733988761901877673210492503 -0.321206402778625499383480246252 0.0515887975692749037315287807814 +0.232733988761901877673210492503 0.321206402778625499383480246252 0.0515887975692749037315287807814 +0.232782003283500682488948996252 -0.446691286563873302117855246252 -0.220860742032527951339559990629 +0.232782003283500682488948996252 0.446691286563873302117855246252 -0.220860742032527951339559990629 +0.23282800614833831787109375 0 0.442483007907867431640625 +0.232886493206024169921875 -0.03068199940025806427001953125 -0.0855714976787567138671875 +0.232886493206024169921875 0.03068199940025806427001953125 -0.0855714976787567138671875 +0.2329229414463043212890625 -0.169228200614452345407201505623 0.799755650758743219519431022491 +0.2329229414463043212890625 0.169228200614452345407201505623 0.799755650758743219519431022491 +0.232988995313644392526342130623 -0.169275605678558344058259876874 0.084035396575927734375 +0.232988995313644392526342130623 0.169275605678558344058259876874 0.084035396575927734375 +0.233100003004074074475227007497 -0.111727002263069141729801003748 -0.650523984432220370166533029987 +0.233100003004074074475227007497 0.111727002263069141729801003748 -0.650523984432220370166533029987 +0.233200909197330469302400501874 -0.169427955895662313290372935626 -0.79963238537311553955078125 +0.233200909197330469302400501874 0.169427955895662313290372935626 -0.79963238537311553955078125 +0.233314800262451188528345369377 0 0.324906396865844770971420985006 +0.233320456743240367547542746252 -0.304351302981376692358139735006 -0.394248804450035128521534488755 +0.233320456743240367547542746252 0.304351302981376692358139735006 -0.394248804450035128521534488755 +0.233371600508689852615518134371 -0.169552247226238239630191628748 -0.198216548562049843518195757497 +0.233371600508689852615518134371 0.169552247226238239630191628748 -0.198216548562049843518195757497 +0.23343800008296966552734375 -0.4151790142059326171875 0.152095496654510498046875 +0.23343800008296966552734375 0.4151790142059326171875 0.152095496654510498046875 +0.23344600200653076171875 -0.97237002849578857421875 0 +0.23344600200653076171875 0.97237002849578857421875 0 +0.23349775373935699462890625 -0.046857498586177825927734375 0.076047249138355255126953125 +0.23349775373935699462890625 0.046857498586177825927734375 0.076047249138355255126953125 +0.233514600992202753237947376874 -0.121004703640937794073551003748 -0.144321897625923151187166126874 +0.233514600992202753237947376874 0.121004703640937794073551003748 -0.144321897625923151187166126874 +0.233567190170288097039730246252 -0.320601201057434115337940738755 -0.0515887975692749037315287807814 +0.233567190170288097039730246252 0.320601201057434115337940738755 -0.0515887975692749037315287807814 +0.23364050686359405517578125 -0.408760011196136474609375 -0.16830749809741973876953125 +0.23364050686359405517578125 0.408760011196136474609375 -0.16830749809741973876953125 +0.233654208481311798095703125 -0.546113112568855307848991742503 -0.263943558931350741314503238755 +0.233654208481311798095703125 0.546113112568855307848991742503 -0.263943558931350741314503238755 +0.2336719930171966552734375 -0.85263597965240478515625 -0.4673430025577545166015625 +0.2336719930171966552734375 0.85263597965240478515625 -0.4673430025577545166015625 +0.233711402118206013067691628748 -0.309629705548286449090511496252 0.867184701561927728796774772491 +0.233711402118206013067691628748 0.309629705548286449090511496252 0.867184701561927728796774772491 +0.233719748258590709344417746252 -0.456946063041687056127670985006 0.197674395143985770495476117503 +0.233719748258590709344417746252 0.456946063041687056127670985006 0.197674395143985770495476117503 +0.23378099501132965087890625 -0.058113001286983489990234375 -0.06685300171375274658203125 +0.23378099501132965087890625 0.058113001286983489990234375 -0.06685300171375274658203125 +0.233883294463157642706363503748 -0.627759987115859896533720529987 0.203016099333763105905248380623 +0.233883294463157642706363503748 0.627759987115859896533720529987 0.203016099333763105905248380623 +0.233927655220031754934595369377 -0.169956056773662572689786998126 -0.467859703302383467260483485006 +0.233927655220031754934595369377 0.169956056773662572689786998126 -0.467859703302383467260483485006 +0.23394675552845001220703125 -0.020271249115467071533203125 0.08577899634838104248046875 +0.23394675552845001220703125 0.020271249115467071533203125 0.08577899634838104248046875 +0.233952999114990234375 -0.3346860110759735107421875 -0.912826001644134521484375 +0.233952999114990234375 0.3346860110759735107421875 -0.912826001644134521484375 +0.233961692452430702893195757497 -0.0694176018238067543686398153113 0.250884559750556956903011496252 +0.233961692452430702893195757497 0.0694176018238067543686398153113 0.250884559750556956903011496252 +0.234012906253337871209652121252 -0.367124453186988886077557481258 0.336091798543930064813167746252 +0.234012906253337871209652121252 0.367124453186988886077557481258 0.336091798543930064813167746252 +0.234068796038627596756143134371 -0.0233114011585712418983540317186 0.259168690443038918225227007497 +0.234068796038627596756143134371 0.0233114011585712418983540317186 0.259168690443038918225227007497 +0.23409824073314666748046875 -0.62035726010799407958984375 -0.350507251918315887451171875 +0.23409824073314666748046875 0.62035726010799407958984375 -0.350507251918315887451171875 +0.234143000841140730416967130623 -0.216185209155082685983373380623 -0.144709952175617218017578125 +0.234143000841140730416967130623 0.216185209155082685983373380623 -0.144709952175617218017578125 +0.234276247024536143914730246252 -0.2995707094669342041015625 0.527135697007179326867287727509 +0.234276247024536143914730246252 0.2995707094669342041015625 0.527135697007179326867287727509 +0.23432074487209320068359375 -0.085357747972011566162109375 0.01754424907267093658447265625 +0.23432074487209320068359375 0.085357747972011566162109375 0.01754424907267093658447265625 +0.234361803531646706311164507497 -0.07144559919834136962890625 -0.547694993019103959497329014994 +0.234361803531646706311164507497 0.07144559919834136962890625 -0.547694993019103959497329014994 +0.2343872487545013427734375 -0.085711002349853515625 -0.0147040002048015594482421875 +0.2343872487545013427734375 0.085711002349853515625 -0.0147040002048015594482421875 +0.234459453821182245425447376874 -0.060084901750087738037109375 0.379365742206573486328125 +0.234459453821182245425447376874 0.060084901750087738037109375 0.379365742206573486328125 +0.23450000584125518798828125 -0.010312500409781932830810546875 -0.08604325354099273681640625 +0.23450000584125518798828125 0.010312500409781932830810546875 -0.08604325354099273681640625 +0.2346155941486358642578125 -0.185771995782852167300447376874 0.02107889950275421142578125 +0.2346155941486358642578125 0.185771995782852167300447376874 0.02107889950275421142578125 +0.234652496874332427978515625 -0.56203798949718475341796875 0.437666237354278564453125 +0.234652496874332427978515625 0.56203798949718475341796875 0.437666237354278564453125 +0.234688496589660622326789507497 -0.0787977039813995278061398153113 0.169446891546249395199552623126 +0.234688496589660622326789507497 0.0787977039813995278061398153113 0.169446891546249395199552623126 +0.23471949994564056396484375 0 0.086062252521514892578125 +0.234719803929328896252570757497 -0.573443490266799860144431022491 0.32568199932575225830078125 +0.234719803929328896252570757497 0.573443490266799860144431022491 0.32568199932575225830078125 +0.234785956144332869088842130623 -0.0568599514663219382515357835928 -0.253263849020004261358707253748 +0.234785956144332869088842130623 0.0568599514663219382515357835928 -0.253263849020004261358707253748 +0.234786999225616438424779630623 -0.240866494178771956002904630623 0.0967386022210121043762853787484 +0.234786999225616438424779630623 0.240866494178771956002904630623 0.0967386022210121043762853787484 +0.234911102056503284796207253748 -0.185755205154418928659154630623 -0.0176598004996776566932759067186 +0.234911102056503284796207253748 0.185755205154418928659154630623 -0.0176598004996776566932759067186 +0.234915304183959949835269753748 0 0.186587405204772932565404630623 +0.234927257895469671078458873126 -0.723043999075889565197883257497 0.380132742226123809814453125 +0.234927257895469671078458873126 0.723043999075889565197883257497 0.380132742226123809814453125 +0.234931504726409889904914507497 -0.155390399694442737921207253748 0.103252199292182919587723688437 +0.234931504726409889904914507497 0.155390399694442737921207253748 0.103252199292182919587723688437 +0.234933006763458240850894753748 -0.455188214778900146484375 -0.312426602840423561779914507497 +0.234933006763458240850894753748 0.455188214778900146484375 -0.312426602840423561779914507497 +0.235010656714439380987613503748 -0.135164746642112726382478626874 0.221360644698142983166633257497 +0.235010656714439380987613503748 0.135164746642112726382478626874 0.221360644698142983166633257497 +0.235091452300548564569027121252 -0.0366899482905864715576171875 0.495868462324142500463608485006 +0.235091452300548564569027121252 0.0366899482905864715576171875 0.495868462324142500463608485006 +0.235114407539367686883480246252 -0.323606801033020030633480246252 0 +0.235114407539367686883480246252 0.323606801033020030633480246252 0 +0.235124561190605180227564119377 -0.38368798792362213134765625 0 +0.235124561190605180227564119377 0.38368798792362213134765625 0 +0.235169990360736852474943248126 -0.170860956609249131643579744377 0.581378868222236611096320757497 +0.235169990360736852474943248126 0.170860956609249131643579744377 0.581378868222236611096320757497 +0.235172605514526372738615123126 -0.38205634057521820068359375 -0.47034780681133270263671875 +0.235172605514526372738615123126 0.38205634057521820068359375 -0.47034780681133270263671875 +0.2353971004486083984375 -0.140528100728988636358707253748 0.121819800138473502415514815311 +0.2353971004486083984375 0.140528100728988636358707253748 0.121819800138473502415514815311 +0.2354744970798492431640625 -0.067655749619007110595703125 -0.0497434996068477630615234375 +0.2354744970798492431640625 0.067655749619007110595703125 -0.0497434996068477630615234375 +0.23549520969390869140625 -0.2113192081451416015625 0.7347695827484130859375 +0.23549520969390869140625 0.2113192081451416015625 0.7347695827484130859375 +0.23550374805927276611328125 -0.057224251329898834228515625 0.0613462515175342559814453125 +0.23550374805927276611328125 0.057224251329898834228515625 0.0613462515175342559814453125 +0.23557050526142120361328125 -0.379759946465492270739616742503 0.0528074987232685089111328125 +0.23557050526142120361328125 0.379759946465492270739616742503 0.0528074987232685089111328125 +0.235580992698669416940404630623 -0.470304000377655018194644753748 0.288643795251846302374332253748 +0.235580992698669416940404630623 0.470304000377655018194644753748 0.288643795251846302374332253748 +0.235673999786376958676115123126 -0.225803589820861821957365123126 0.231236791610717778988615123126 +0.235673999786376958676115123126 0.225803589820861821957365123126 0.231236791610717778988615123126 +0.235679197311401383840845369377 -0.297397208213806163445980246252 -0.1265316009521484375 +0.235679197311401383840845369377 0.297397208213806163445980246252 -0.1265316009521484375 +0.23567925393581390380859375 -0.076913751661777496337890625 -0.0322427488863468170166015625 +0.23567925393581390380859375 0.076913751661777496337890625 -0.0322427488863468170166015625 +0.235686397552490239926115123126 -0.0532280027866363567023988423443 0.318776798248291026727230246252 +0.235686397552490239926115123126 0.0532280027866363567023988423443 0.318776798248291026727230246252 +0.235777947306633012258814119377 -0.378079649806022655145198996252 -0.0629644475877284975906533759371 +0.235777947306633012258814119377 0.378079649806022655145198996252 -0.0629644475877284975906533759371 +0.2358777523040771484375 -0.076302252709865570068359375 0.0322427488863468170166015625 +0.2358777523040771484375 0.076302252709865570068359375 0.0322427488863468170166015625 +0.235878592729568459240852007497 -0.171374398469924915655582253748 -0.0706544995307922391036825615629 +0.235878592729568459240852007497 0.171374398469924915655582253748 -0.0706544995307922391036825615629 +0.235926009714603424072265625 -0.24414525926113128662109375 0.6687540113925933837890625 +0.235926009714603424072265625 0.24414525926113128662109375 0.6687540113925933837890625 +0.2359440028667449951171875 -0.17142100632190704345703125 -0.40613448619842529296875 +0.2359440028667449951171875 0.17142100632190704345703125 -0.40613448619842529296875 +0.236044204235076882092414507497 -0.257253509759902965203792746252 0.0245692998170852633377236884371 +0.236044204235076882092414507497 0.257253509759902965203792746252 0.0245692998170852633377236884371 +0.236047804355621337890625 -0.0244044005870819070980193288278 -0.551077187061309814453125 +0.236047804355621337890625 0.0244044005870819070980193288278 -0.551077187061309814453125 +0.236093643307685868704126619377 -0.0432926021516323103477397182814 0.604057365655899070056022992503 +0.236093643307685868704126619377 0.0432926021516323103477397182814 0.604057365655899070056022992503 +0.236131194233894364797876619377 -0.245296356081962596551448996252 -0.294230711460113536492855246252 +0.236131194233894364797876619377 0.245296356081962596551448996252 -0.294230711460113536492855246252 +0.236183094978332508429019753748 -0.0741962984204292269607705634371 -0.169447195529937727487279630623 +0.236183094978332508429019753748 0.0741962984204292269607705634371 -0.169447195529937727487279630623 +0.236265304684638993704126619377 -0.355549952387809786724659488755 0.142347595095634466000333873126 +0.236265304684638993704126619377 0.355549952387809786724659488755 0.142347595095634466000333873126 +0.236271607875823991262720369377 -0.847455310821533247533920985006 -0.189723600447177898065120871252 +0.236271607875823991262720369377 0.847455310821533247533920985006 -0.189723600447177898065120871252 +0.23627300560474395751953125 -0.51120102405548095703125 0.82634699344635009765625 +0.23627300560474395751953125 0.51120102405548095703125 0.82634699344635009765625 +0.23627899587154388427734375 -0.066844500601291656494140625 0.0469477511942386627197265625 +0.23627899587154388427734375 0.066844500601291656494140625 0.0469477511942386627197265625 +0.236319306492805469854801003748 -0.0567979976534843389313067518742 -0.656450188159942604748664507497 +0.236319306492805469854801003748 0.0567979976534843389313067518742 -0.656450188159942604748664507497 +0.236422905325889581851228626874 -0.200217491388320900647102007497 -0.162840999662876129150390625 +0.236422905325889581851228626874 0.200217491388320900647102007497 -0.162840999662876129150390625 +0.236506593227386485711605246252 -0.255315501987934123651058371252 0.425885903835296675268295985006 +0.236506593227386485711605246252 0.255315501987934123651058371252 0.425885903835296675268295985006 +0.236507248878478987252904630623 -0.257177552580833412854133257497 -0.0205897999927401528785786410936 +0.236507248878478987252904630623 0.257177552580833412854133257497 -0.0205897999927401528785786410936 +0.236578506231307994500667746252 0 0.382793390750885031970085492503 +0.236582100391387939453125 -0.728110796213150002209602007497 -0.47316420078277587890625 +0.236582100391387939453125 0.728110796213150002209602007497 -0.47316420078277587890625 +0.23680324852466583251953125 -0.04061450064182281494140625 -0.069099001586437225341796875 +0.23680324852466583251953125 0.04061450064182281494140625 -0.069099001586437225341796875 +0.236863994598388694079460492503 -0.280923199653625499383480246252 0.158042800426483165399105246252 +0.236863994598388694079460492503 0.280923199653625499383480246252 0.158042800426483165399105246252 +0.237101200222969044073551003748 0 -0.658622300624847389904914507497 +0.237115806341171242443977007497 -0.344672405719757046771434261245 0.430089604854583751336605246252 +0.237115806341171242443977007497 0.344672405719757046771434261245 0.430089604854583751336605246252 +0.237116596102714516369758257497 -0.275893101096153225970653011245 0.598045688867568925317641514994 +0.237116596102714516369758257497 0.275893101096153225970653011245 0.598045688867568925317641514994 +0.237155440449714649542301003748 -0.0285250004380941356296741417964 -0.25581954419612884521484375 +0.237155440449714649542301003748 0.0285250004380941356296741417964 -0.25581954419612884521484375 +0.2371717393398284912109375 -0.5303257405757904052734375 -0.47434575855731964111328125 +0.2371717393398284912109375 0.5303257405757904052734375 -0.47434575855731964111328125 +0.237198597192764260022102007497 -0.0394964978098869337608256557814 0.179379308223724359683259876874 +0.237198597192764260022102007497 0.0394964978098869337608256557814 0.179379308223724359683259876874 +0.23731839656829833984375 -0.730384778976440496300881477509 -0.224094390869140625 +0.23731839656829833984375 0.730384778976440496300881477509 -0.224094390869140625 +0.237385398149490334240852007497 0 0.658520120382308893347556022491 +0.2374482452869415283203125 -0.030285499989986419677734375 0.0721189975738525390625 +0.2374482452869415283203125 0.030285499989986419677734375 0.0721189975738525390625 +0.237590101361274730340511496252 -0.611073893308639592980568977509 -0.616554880142211936266960492503 +0.237590101361274730340511496252 0.611073893308639592980568977509 -0.616554880142211936266960492503 +0.237723299860954279116853626874 -0.257011654973030079229801003748 0.28272373974323272705078125 +0.237723299860954279116853626874 0.257011654973030079229801003748 0.28272373974323272705078125 +0.23776449263095855712890625 -0.0772532522678375244140625 0 +0.23776449263095855712890625 0.0772532522678375244140625 0 +0.237863588333129899465845369377 -0.237955999374389659539730246252 -0.216328406333923362048210492503 +0.237863588333129899465845369377 0.237955999374389659539730246252 -0.216328406333923362048210492503 +0.237946805357933027780248380623 0 -0.256673556566238414422542746252 +0.238045501708984363897769753748 -0.454609411954879749639957253748 -0.476093089580535866467414507497 +0.238045501708984363897769753748 0.454609411954879749639957253748 -0.476093089580535866467414507497 +0.238046738505363453253238503748 -0.103011497110128399934403375937 -0.809457543492317133093649772491 +0.238046738505363453253238503748 0.103011497110128399934403375937 -0.809457543492317133093649772491 +0.238087843358516709768579744377 -0.562203863263130210192741742503 0.22302670776844024658203125 +0.238087843358516709768579744377 0.562203863263130210192741742503 0.22302670776844024658203125 +0.238097557425498956851228626874 -0.859595161676406815942641514994 -0.326966260373592387811214621252 +0.238097557425498956851228626874 0.859595161676406815942641514994 -0.326966260373592387811214621252 +0.238203006982803333624332253748 -0.115710352361202237214676813437 -0.228846108913421608654914507497 +0.238203006982803333624332253748 0.115710352361202237214676813437 -0.228846108913421608654914507497 +0.238209289312362682000667746252 -0.352252337336540211065738503748 -0.147222898900508880615234375 +0.238209289312362682000667746252 0.352252337336540211065738503748 -0.147222898900508880615234375 +0.238244009017944347039730246252 -0.0532527983188629192023988423443 0.761842393875122092516960492503 +0.238244009017944347039730246252 0.0532527983188629192023988423443 0.761842393875122092516960492503 +0.2382515966892242431640625 -0.133607697486877424752904630623 -0.12403710186481475830078125 +0.2382515966892242431640625 0.133607697486877424752904630623 -0.12403710186481475830078125 +0.238367396593093860968082253748 -0.0967568993568420354645098768742 0.1543343961238861083984375 +0.238367396593093860968082253748 0.0967568993568420354645098768742 0.1543343961238861083984375 +0.238434004783630387747095369377 -0.132936000823974609375 0.29236519336700439453125 +0.238434004783630387747095369377 0.132936000823974609375 0.29236519336700439453125 +0.238524651527404762951789507497 -0.226393303275108315197883257497 0.119800096750259391087389815311 +0.238524651527404762951789507497 0.226393303275108315197883257497 0.119800096750259391087389815311 +0.238574343919754017218082253748 -0.242822647094726534744424384371 -0.0813599489629268646240234375 +0.238574343919754017218082253748 0.242822647094726534744424384371 -0.0813599489629268646240234375 +0.23857605457305908203125 -0.150361646711826335565120871252 0.350674661993980396612613503748 +0.23857605457305908203125 0.150361646711826335565120871252 0.350674661993980396612613503748 +0.238674104213714571853799384371 -0.155561345815658558233707253748 0.203310790657997120245426003748 +0.238674104213714571853799384371 0.155561345815658558233707253748 0.203310790657997120245426003748 +0.238674598932266252004907869377 -0.853039777278900124279914507497 0.15924060344696044921875 +0.238674598932266252004907869377 0.853039777278900124279914507497 0.15924060344696044921875 +0.238760200142860395944310880623 -0.641263717412948519580595529987 -0.147562800347805000988898882497 +0.238760200142860395944310880623 0.641263717412948519580595529987 -0.147562800347805000988898882497 +0.238804990053176874331697376874 -0.434164518117904629779246761245 0.494442182779312122686832253748 +0.238804990053176874331697376874 0.434164518117904629779246761245 0.494442182779312122686832253748 +0.23882199823856353759765625 -0.73500502109527587890625 -0.63461101055145263671875 +0.23882199823856353759765625 0.73500502109527587890625 -0.63461101055145263671875 +0.238855487108230596371427623126 -0.34756560623645782470703125 0.7950762212276458740234375 +0.238855487108230596371427623126 0.34756560623645782470703125 0.7950762212276458740234375 +0.238877606391906749383480246252 -0.173552799224853532278345369377 -0.269846010208129871710269753748 +0.238877606391906749383480246252 0.173552799224853532278345369377 -0.269846010208129871710269753748 +0.23903925716876983642578125 -0.01016050018370151519775390625 0.07250525057315826416015625 +0.23903925716876983642578125 0.01016050018370151519775390625 0.07250525057315826416015625 +0.239081400632858265264957253748 -0.272391003370285045281917746252 -0.478166413307189896997329014994 +0.239081400632858265264957253748 0.272391003370285045281917746252 -0.478166413307189896997329014994 +0.23908554017543792724609375 -0.125939601659774774722322376874 0.910756450891494706567641514994 +0.23908554017543792724609375 0.125939601659774774722322376874 0.910756450891494706567641514994 +0.239169700443744664974943248126 -0.1283925473690032958984375 -0.478344351053237970550213731258 +0.239169700443744664974943248126 0.1283925473690032958984375 -0.478344351053237970550213731258 +0.23919300734996795654296875 -0.02037500031292438507080078125 -0.06979624927043914794921875 +0.23919300734996795654296875 0.02037500031292438507080078125 -0.06979624927043914794921875 +0.239231407642364501953125 -0.158738994598388666323884876874 -0.0870068997144699124435263115629 +0.239231407642364501953125 0.158738994598388666323884876874 -0.0870068997144699124435263115629 +0.2392520010471343994140625 -0.3361569941043853759765625 -0.282413005828857421875 +0.2392520010471343994140625 0.3361569941043853759765625 -0.282413005828857421875 +0.23926000297069549560546875 -0.05029650032520294189453125 -0.0522004999220371246337890625 +0.23926000297069549560546875 0.05029650032520294189453125 -0.0522004999220371246337890625 +0.23928439617156982421875 -0.26264679431915283203125 0.183738005161285411492855246252 +0.23928439617156982421875 0.26264679431915283203125 0.183738005161285411492855246252 +0.239297099411487579345703125 -0.0345746012404561028907856723436 -0.814887350797653176037727007497 +0.239297099411487579345703125 0.0345746012404561028907856723436 -0.814887350797653176037727007497 +0.239530202746391279733373380623 -0.138834504783153511731086382497 0.6429233849048614501953125 +0.239530202746391279733373380623 0.138834504783153511731086382497 0.6429233849048614501953125 +0.239553907513618463687166126874 -0.737284487485885597912727007497 0.457192826271057117804019753748 +0.239553907513618463687166126874 0.737284487485885597912727007497 0.457192826271057117804019753748 +0.23959900438785552978515625 -0.3101179897785186767578125 0.3105140030384063720703125 +0.23959900438785552978515625 0.3101179897785186767578125 0.3105140030384063720703125 +0.239642703533172629626335492503 -0.146033807098865514584318248126 0.473017612099647544177116742503 +0.239642703533172629626335492503 0.146033807098865514584318248126 0.473017612099647544177116742503 +0.2396771907806396484375 -0.108248794078826912623547684689 -0.301392006874084517065170985006 +0.2396771907806396484375 0.108248794078826912623547684689 -0.301392006874084517065170985006 +0.2397422492504119873046875 -0.068672500550746917724609375 -0.01754424907267093658447265625 +0.2397422492504119873046875 0.068672500550746917724609375 -0.01754424907267093658447265625 +0.23975999653339385986328125 -0.100183002650737762451171875 0.427174985408782958984375 +0.23975999653339385986328125 0.100183002650737762451171875 0.427174985408782958984375 +0.239796897768974281994758257497 -0.6458773910999298095703125 0.123853802680969224403462192186 +0.239796897768974281994758257497 0.6458773910999298095703125 0.123853802680969224403462192186 +0.23981325328350067138671875 -0.040155000984668731689453125 0.0581137500703334808349609375 +0.23981325328350067138671875 0.040155000984668731689453125 0.0581137500703334808349609375 +0.239836001396179221423210492503 -0.567172002792358465050881477509 0.510680818557739280016960492503 +0.239836001396179221423210492503 0.567172002792358465050881477509 0.510680818557739280016960492503 +0.239875960350036609991519753748 -0.738251340389251664575454014994 -0.346329958736896481585887386245 +0.239875960350036609991519753748 0.738251340389251664575454014994 -0.346329958736896481585887386245 +0.239964294433593738897769753748 -0.0538778990507125868369975307814 -0.171797400712966924496427623126 +0.239964294433593738897769753748 0.0538778990507125868369975307814 -0.171797400712966924496427623126 +0.23999150097370147705078125 0 -0.070029251277446746826171875 +0.2400034964084625244140625 -0.068425752222537994384765625 0.0147040002048015594482421875 +0.2400034964084625244140625 0.068425752222537994384765625 0.0147040002048015594482421875 +0.240072602033615106753572376874 -0.101735097169876095857254938437 -0.148374903202056873663394753748 +0.240072602033615106753572376874 0.101735097169876095857254938437 -0.148374903202056873663394753748 +0.240123090147972090280248380623 -0.289986902475357022357371761245 -0.590125906467437677527243522491 +0.240123090147972090280248380623 0.289986902475357022357371761245 -0.590125906467437677527243522491 +0.240198408067226421014339621252 -0.46233071386814117431640625 0.38865776360034942626953125 +0.240198408067226421014339621252 0.46233071386814117431640625 0.38865776360034942626953125 +0.240209197998046880551115123126 -0.242728805541992193051115123126 0.208283996582031255551115123126 +0.240209197998046880551115123126 0.242728805541992193051115123126 0.208283996582031255551115123126 +0.24024175107479095458984375 -0.0596684999763965606689453125 -0.0349802486598491668701171875 +0.24024175107479095458984375 0.0596684999763965606689453125 -0.0349802486598491668701171875 +0.240258407592773448602230246252 -0.7394440174102783203125 0.188411998748779313528345369377 +0.240258407592773448602230246252 0.7394440174102783203125 0.188411998748779313528345369377 +0.240281242132186906301782869377 -0.389931309223175093237045985006 0.304497054219245943951221988755 +0.240281242132186906301782869377 0.389931309223175093237045985006 0.304497054219245943951221988755 +0.2402966916561126708984375 -0.174585002660751331671207253748 0.0421607986092567416092080634371 +0.2402966916561126708984375 0.174585002660751331671207253748 0.0421607986092567416092080634371 +0.24061350524425506591796875 -0.0995932482182979583740234375 0.7033394873142242431640625 +0.24061350524425506591796875 0.0995932482182979583740234375 0.7033394873142242431640625 +0.240697693824768049752904630623 -0.487700572609901406018195757497 -0.778917378187179543225227007497 +0.240697693824768049752904630623 0.487700572609901406018195757497 -0.778917378187179543225227007497 +0.24076549708843231201171875 -0.3963240087032318115234375 0.18697349727153778076171875 +0.24076549708843231201171875 0.3963240087032318115234375 0.18697349727153778076171875 +0.240791246294975253006143134371 -0.210524657368659967593416126874 0.142123100161552412545873380623 +0.240791246294975253006143134371 0.210524657368659967593416126874 0.142123100161552412545873380623 +0.2408075034618377685546875 -0.20048250257968902587890625 0.3896389901638031005859375 +0.2408075034618377685546875 0.20048250257968902587890625 0.3896389901638031005859375 +0.240866160392761208264289507497 -0.174998946487903594970703125 0.184007591009139992443977007497 +0.240866160392761208264289507497 0.174998946487903594970703125 0.184007591009139992443977007497 +0.240881043672561634405582253748 -0.536282619833946205822883257497 0.74624209105968475341796875 +0.240881043672561634405582253748 0.536282619833946205822883257497 0.74624209105968475341796875 +0.240982493758201632427784488755 -0.434592393040657054559261496252 0.235704699158668540270866742503 +0.240982493758201632427784488755 0.434592393040657054559261496252 0.235704699158668540270866742503 +0.241015201807022072522102007497 -0.175106692314147938116519753748 -0.0353456988930702167839292826557 +0.241015201807022072522102007497 0.175106692314147938116519753748 -0.0353456988930702167839292826557 +0.24103049933910369873046875 -0.04983200132846832275390625 0.04383049905300140380859375 +0.24103049933910369873046875 0.04983200132846832275390625 0.04383049905300140380859375 +0.24109399318695068359375 -0.0592707507312297821044921875 0.0293374992907047271728515625 +0.24109399318695068359375 0.0592707507312297821044921875 0.0293374992907047271728515625 +0.24117600917816162109375 -0.309030008316040050164730246252 0.0795895993709564292251101846887 +0.24117600917816162109375 0.309030008316040050164730246252 0.0795895993709564292251101846887 +0.241417407989501925369424384371 0 0.25341190397739410400390625 +0.241419303417205799444644753748 -0.14533080160617828369140625 -0.1029354035854339599609375 +0.241419303417205799444644753748 0.14533080160617828369140625 -0.1029354035854339599609375 +0.241446447372436506784154630623 -0.09245215356349945068359375 0.235915759205818170718416126874 +0.241446447372436506784154630623 0.09245215356349945068359375 0.235915759205818170718416126874 +0.241573494672775251901342130623 -0.1933578550815582275390625 0.163569696247577667236328125 +0.241573494672775251901342130623 0.1933578550815582275390625 0.163569696247577667236328125 +0.24158249795436859130859375 -0.64488525688648223876953125 0.297087751328945159912109375 +0.24158249795436859130859375 0.64488525688648223876953125 0.297087751328945159912109375 +0.241626155376434337274105246252 -0.138444297015666961669921875 -0.353482639789581332134815738755 +0.241626155376434337274105246252 0.138444297015666961669921875 -0.353482639789581332134815738755 +0.24170100688934326171875 -0.371508014202117931024105246252 -0.404428803920745816302684261245 +0.24170100688934326171875 0.371508014202117931024105246252 -0.404428803920745816302684261245 +0.241794304549694083483757367503 -0.424509790539741527215511496252 -0.252639757096767447741569867503 +0.241794304549694083483757367503 0.424509790539741527215511496252 -0.252639757096767447741569867503 +0.241840812563896195852564119377 -0.86458861827850341796875 -0.06323669850826263427734375 +0.241840812563896195852564119377 0.86458861827850341796875 -0.06323669850826263427734375 +0.241946941614150978772102007497 -0.744648000597953774182258257497 0.538016346096992448266860264994 +0.241946941614150978772102007497 0.744648000597953774182258257497 0.538016346096992448266860264994 +0.241967836022377008609041126874 -0.254008139669895161016910378748 -0.882853978872299105518095529987 +0.241967836022377008609041126874 0.254008139669895161016910378748 -0.882853978872299105518095529987 +0.24197100102901458740234375 -0.744723021984100341796875 0.621962010860443115234375 +0.24197100102901458740234375 0.744723021984100341796875 0.621962010860443115234375 +0.242012393474578840768529630623 0 0.549026405811309792248664507497 +0.24202120304107666015625 -0.281161594390869129522769753748 -0.149578797817230241262720369377 +0.24202120304107666015625 0.281161594390869129522769753748 -0.149578797817230241262720369377 +0.2421777546405792236328125 -0.02014300040900707244873046875 0.05868674814701080322265625 +0.2421777546405792236328125 0.02014300040900707244873046875 0.05868674814701080322265625 +0.242212513089179987124666126874 -0.337245297431945811883480246252 0.173489852249622350521818248126 +0.242212513089179987124666126874 0.337245297431945811883480246252 0.173489852249622350521818248126 +0.24222950637340545654296875 -0.2580575048923492431640625 -0.3531729876995086669921875 +0.24222950637340545654296875 0.2580575048923492431640625 -0.3531729876995086669921875 +0.2424750030040740966796875 -0.3901005089282989501953125 -0.19755400717258453369140625 +0.2424750030040740966796875 0.3901005089282989501953125 -0.19755400717258453369140625 +0.2424812018871307373046875 -0.315980708599090553967414507497 -0.75090532004833221435546875 +0.2424812018871307373046875 0.315980708599090553967414507497 -0.75090532004833221435546875 +0.242541593313217146432592130623 -0.0331148989498615264892578125 -0.173427307605743402652009876874 +0.242541593313217146432592130623 0.0331148989498615264892578125 -0.173427307605743402652009876874 +0.24254800379276275634765625 -0.03069975040853023529052734375 -0.052230499684810638427734375 +0.24254800379276275634765625 0.03069975040853023529052734375 -0.052230499684810638427734375 +0.242554309964179981573551003748 -0.563412284851074196545539507497 0.588416767120361283716079014994 +0.242554309964179981573551003748 0.563412284851074196545539507497 0.588416767120361283716079014994 +0.242562448978424077816740123126 -0.575092697143554709704460492503 -0.181470906734466558285490123126 +0.242562448978424077816740123126 0.575092697143554709704460492503 -0.181470906734466558285490123126 +0.242586010694503778628572376874 -0.865069216489791847912727007497 0.0529794014990329770187216240629 +0.242586010694503778628572376874 0.865069216489791847912727007497 0.0529794014990329770187216240629 +0.242670151591300981008814119377 -0.28555829823017120361328125 -0.249133953452110284976228626874 +0.242670151591300981008814119377 0.28555829823017120361328125 -0.249133953452110284976228626874 +0.242705404758453369140625 -0.176334893703460698910490123126 0 +0.242705404758453369140625 0.176334893703460698910490123126 0 +0.242753398418426497018529630623 -0.508815586566925048828125 -0.205372202396392811163394753748 +0.242753398418426497018529630623 0.508815586566925048828125 -0.205372202396392811163394753748 +0.242759290337562549932926003748 -0.147825302183628076724275501874 -0.204243910312652571237279630623 +0.242759290337562549932926003748 0.147825302183628076724275501874 -0.204243910312652571237279630623 +0.242781293392181379831029630623 -0.0589232996106147724479917826557 0.166088408231735235043302623126 +0.242781293392181379831029630623 0.0589232996106147724479917826557 0.166088408231735235043302623126 +0.2428016960620880126953125 -0.109807500243186945132478626874 0.137802895903587324655248380623 +0.2428016960620880126953125 0.109807500243186945132478626874 0.137802895903587324655248380623 +0.242817592620849592721654630623 -0.0197963990271091440364958913278 0.175064992904663069284154630623 +0.242817592620849592721654630623 0.0197963990271091440364958913278 0.175064992904663069284154630623 +0.242836290597915643862947376874 -0.655234998464584328381477007497 0.0412062011659145299713458143742 +0.242836290597915643862947376874 0.655234998464584328381477007497 0.0412062011659145299713458143742 +0.242937202751636521780298494377 -0.0860376015305519131759481865629 -0.485879912972450311858807481258 +0.242937202751636521780298494377 0.0860376015305519131759481865629 -0.485879912972450311858807481258 +0.2429677546024322509765625 0 0.058878250420093536376953125 +0.2429811954498291015625 -0.3087356090545654296875 -0.0751164019107818659026776231258 +0.2429811954498291015625 0.3087356090545654296875 -0.0751164019107818659026776231258 +0.242991097271442441085653740629 -0.356073290109634454925213731258 -0.341565403342247053686264735006 +0.242991097271442441085653740629 0.356073290109634454925213731258 -0.341565403342247053686264735006 +0.2430008947849273681640625 -0.553906792402267478259147992503 0.666437423229217507092414507497 +0.2430008947849273681640625 0.553906792402267478259147992503 0.666437423229217507092414507497 +0.243087589740753146072549384371 -0.654591000080108620373664507497 -0.04918409883975982666015625 +0.243087589740753146072549384371 0.654591000080108620373664507497 -0.04918409883975982666015625 +0.2430927455425262451171875 -0.0583604983985424041748046875 0 +0.2430927455425262451171875 0.0583604983985424041748046875 0 +0.243151205778121964895532869377 -0.399555909633636463507144753748 -0.768915885686874411852897992503 +0.243151205778121964895532869377 0.399555909633636463507144753748 -0.768915885686874411852897992503 +0.243356391787528963943643134371 -0.04647719860076904296875 0.247219693660736067331029630623 +0.243356391787528963943643134371 0.04647719860076904296875 0.247219693660736067331029630623 +0.243398092687130002120809990629 -0.267428705096244834216179242503 -0.414414009451866183209034488755 +0.243398092687130002120809990629 0.267428705096244834216179242503 -0.414414009451866183209034488755 +0.243495705723762501104801003748 -0.246564492583274813553018134371 0.0491508506238460540771484375 +0.243495705723762501104801003748 0.246564492583274813553018134371 0.0491508506238460540771484375 +0.24354250729084014892578125 -0.42401349544525146484375 -0.1044014990329742431640625 +0.24354250729084014892578125 0.42401349544525146484375 -0.1044014990329742431640625 +0.24354524910449981689453125 -0.5898225009441375732421875 0.39407475292682647705078125 +0.24354524910449981689453125 0.5898225009441375732421875 0.39407475292682647705078125 +0.243698859214782709292634876874 -0.276953396201133739129573996252 0.257696557044982899054019753748 +0.243698859214782709292634876874 0.276953396201133739129573996252 0.257696557044982899054019753748 +0.243752002716064453125 -0.427668511867523193359375 0.087661497294902801513671875 +0.243752002716064453125 0.427668511867523193359375 0.087661497294902801513671875 +0.243865011632442479916349498126 -0.526349732279777549059929242503 -0.621276897192001298364516514994 +0.243865011632442479916349498126 0.526349732279777549059929242503 -0.621276897192001298364516514994 +0.24388110637664794921875 -0.0123744003474712364887277971093 -0.17426669597625732421875 +0.24388110637664794921875 0.0123744003474712364887277971093 -0.17426669597625732421875 +0.243900650739669794253572376874 -0.1772021949291229248046875 -0.177797210216522200143529630623 +0.243900650739669794253572376874 0.1772021949291229248046875 -0.177797210216522200143529630623 +0.243971405923366524426398882497 -0.875823038816451959753806022491 0.275521849095821391717464621252 +0.243971405923366524426398882497 0.875823038816451959753806022491 0.275521849095821391717464621252 +0.243997657299041742495759876874 -0.214298549294471757376001619377 -0.311514759063720725329460492503 +0.243997657299041742495759876874 0.214298549294471757376001619377 -0.311514759063720725329460492503 +0.244017559289932239874332253748 -0.229697993397712685315070757497 -0.100967295467853546142578125 +0.244017559289932239874332253748 0.229697993397712685315070757497 -0.100967295467853546142578125 +0.244081199169158935546875 -0.119147399067878717593416126874 0.535003209114074729235710492503 +0.244081199169158935546875 0.119147399067878717593416126874 0.535003209114074729235710492503 +0.24416400492191314697265625 -0.010325250215828418731689453125 -0.052700750529766082763671875 +0.24416400492191314697265625 0.010325250215828418731689453125 -0.052700750529766082763671875 +0.24422800540924072265625 -0.04025100171566009521484375 -0.0351077504456043243408203125 +0.24422800540924072265625 0.04025100171566009521484375 -0.0351077504456043243408203125 +0.24425275623798370361328125 -0.03029775060713291168212890625 0.043848000466823577880859375 +0.24425275623798370361328125 0.03029775060713291168212890625 0.043848000466823577880859375 +0.244263745844364166259765625 -0.42835199832916259765625 0.56511072814464569091796875 +0.244263745844364166259765625 0.42835199832916259765625 0.56511072814464569091796875 +0.244322705268859852179019753748 -0.162194395065307611636384876874 0.0632412001490592901031817518742 +0.244322705268859852179019753748 0.162194395065307611636384876874 0.0632412001490592901031817518742 +0.244384397566318523065120871252 -0.582660642266273565148537727509 0.152586852759122842959627064374 +0.244384397566318523065120871252 0.582660642266273565148537727509 0.152586852759122842959627064374 +0.24440999329090118408203125 -0.0495559982955455780029296875 -0.01754949986934661865234375 +0.24440999329090118408203125 0.0495559982955455780029296875 -0.01754949986934661865234375 +0.2445105016231536865234375 -0.0333704985678195953369140625 0.43485748767852783203125 +0.2445105016231536865234375 0.0333704985678195953369140625 0.43485748767852783203125 +0.244548508524894708804353626874 -0.0915410950779914772690304403113 -0.233058696985244728772102007497 +0.244548508524894708804353626874 0.0915410950779914772690304403113 -0.233058696985244728772102007497 +0.2446455061435699462890625 -0.04931800067424774169921875 0.014706999994814395904541015625 +0.2446455061435699462890625 0.04931800067424774169921875 0.014706999994814395904541015625 +0.244694101810455311163394753748 -0.246832251548767062088174384371 -0.04121564887464046478271484375 +0.244694101810455311163394753748 0.246832251548767062088174384371 -0.04121564887464046478271484375 +0.244719795882701873779296875 -0.520974355936050459447983485006 -0.301989997923374164923160378748 +0.244719795882701873779296875 0.520974355936050459447983485006 -0.301989997923374164923160378748 +0.244739256799221038818359375 -0.17781150341033935546875 -0.686283767223358154296875 +0.244739256799221038818359375 0.17781150341033935546875 -0.686283767223358154296875 +0.244761610031127951891960492503 -0.753293609619140713817841970013 -0.112428796291351329461605246252 +0.244761610031127951891960492503 0.753293609619140713817841970013 -0.112428796291351329461605246252 +0.244791503250598896368472878748 -0.386119295656681071893245871252 0.716581457853317282946647992503 +0.244791503250598896368472878748 0.386119295656681071893245871252 0.716581457853317282946647992503 +0.24480600655078887939453125 -0.8849639892578125 0.3961170017719268798828125 +0.24480600655078887939453125 0.8849639892578125 0.3961170017719268798828125 +0.244869305193424230404630748126 -0.177906297147274017333984375 -0.575229188799858071057258257497 +0.244869305193424230404630748126 0.177906297147274017333984375 -0.575229188799858071057258257497 +0.245009005069732666015625 -0.43486249446868896484375 0.02941399998962879180908203125 +0.245009005069732666015625 0.43486249446868896484375 0.02941399998962879180908203125 +0.24503274261951446533203125 -0.0399027504026889801025390625 0.02943949960172176361083984375 +0.24503274261951446533203125 0.0399027504026889801025390625 0.02943949960172176361083984375 +0.245063996315002446957365123126 -0.157653200626373307668970369377 0.27402400970458984375 +0.245063996315002446957365123126 0.157653200626373307668970369377 0.27402400970458984375 +0.245207050442695639880241742503 -0.0431519020348787377128196851572 -0.490419608354568548058693977509 +0.245207050442695639880241742503 0.0431519020348787377128196851572 -0.490419608354568548058693977509 +0.24520875513553619384765625 -0.36390151083469390869140625 -0.60823349654674530029296875 +0.24520875513553619384765625 0.36390151083469390869140625 -0.60823349654674530029296875 +0.2452290058135986328125 -0.519522607326507568359375 0.1730867922306060791015625 +0.2452290058135986328125 0.519522607326507568359375 0.1730867922306060791015625 +0.245275211334228526727230246252 -0.244165611267089854852230246252 -0.721264791488647527550881477509 +0.245275211334228526727230246252 0.244165611267089854852230246252 -0.721264791488647527550881477509 +0.24531650543212890625 -0.4342670142650604248046875 -0.0350989997386932373046875 +0.24531650543212890625 0.4342670142650604248046875 -0.0350989997386932373046875 +0.245481598377227772100894753748 -0.0819785982370376531402911268742 -0.151717793941497786081029630623 +0.245481598377227772100894753748 0.0819785982370376531402911268742 -0.151717793941497786081029630623 +0.245491194725036637747095369377 -0.755546379089355513158920985006 0.0942551970481872586349325615629 +0.245491194725036637747095369377 0.755546379089355513158920985006 0.0942551970481872586349325615629 +0.245676898956298822573884876874 -0.114514803886413565892077315311 -0.128565895557403553350894753748 +0.245676898956298822573884876874 0.114514803886413565892077315311 -0.128565895557403553350894753748 +0.2457439899444580078125 -0.314359593391418501440170985006 0.0280707985162735006168244211722 +0.2457439899444580078125 0.314359593391418501440170985006 0.0280707985162735006168244211722 +0.24577300250530242919921875 -0.3314194977283477783203125 0.2824124991893768310546875 +0.24577300250530242919921875 0.3314194977283477783203125 0.2824124991893768310546875 +0.2458139955997467041015625 -0.13734449446201324462890625 -0.4131729900836944580078125 +0.2458139955997467041015625 0.13734449446201324462890625 -0.4131729900836944580078125 +0.24584519863128662109375 -0.163531494140624983346654630623 -0.05308020114898681640625 +0.24584519863128662109375 0.163531494140624983346654630623 -0.05308020114898681640625 +0.245845496654510498046875 -0.010169249959290027618408203125 0.0442332513630390167236328125 +0.245845496654510498046875 0.010169249959290027618408203125 0.0442332513630390167236328125 +0.245857957005500810110376619377 -0.367304411530494701043636496252 0.0845059521496295956710653740629 +0.245857957005500810110376619377 0.367304411530494701043636496252 0.0845059521496295956710653740629 +0.245892611145973216668636496252 -0.334571403264999400750667746252 -0.173490294814109796694978626874 +0.245892611145973216668636496252 0.334571403264999400750667746252 -0.173490294814109796694978626874 +0.245901608467102072985710492503 -0.0804740011692047230162927462516 -0.30505120754241943359375 +0.245901608467102072985710492503 0.0804740011692047230162927462516 -0.30505120754241943359375 +0.245936107635498030221654630623 -0.122484898567199698704577315311 0.120469200611114490850894753748 +0.245936107635498030221654630623 0.122484898567199698704577315311 0.120469200611114490850894753748 +0.24593938887119293212890625 0 0.865745079517364568566506477509 +0.245965507626533519403011496252 0 -0.491935965418815679406350227509 +0.245966048538684867175163617503 -0.28914983570575714111328125 0.397986605763435419280682481258 +0.245966048538684867175163617503 0.28914983570575714111328125 0.397986605763435419280682481258 +0.245968802273273501324268863755 -0.467856392264366205413494981258 -0.152018344402313237972990123126 +0.245968802273273501324268863755 0.467856392264366205413494981258 -0.152018344402313237972990123126 +0.245970600843429559878572376874 -0.2397623956203460693359375 0.491947817802429188116519753748 +0.245970600843429559878572376874 0.2397623956203460693359375 0.491947817802429188116519753748 +0.245997749269008636474609375 -0.5892824828624725341796875 -0.3933599889278411865234375 +0.245997749269008636474609375 0.5892824828624725341796875 -0.3933599889278411865234375 +0.2460120022296905517578125 -0.325926005840301513671875 0.912826001644134521484375 +0.2460120022296905517578125 0.325926005840301513671875 0.912826001644134521484375 +0.246094799041748052426115123126 -0.0266835987567901611328125 0.314205598831176768914730246252 +0.246094799041748052426115123126 0.0266835987567901611328125 0.314205598831176768914730246252 +0.24624121189117431640625 -0.0794315993785858209808026231258 0.305050802230834972039730246252 +0.24624121189117431640625 0.0794315993785858209808026231258 0.305050802230834972039730246252 +0.246314811706542985403345369377 -0.3142859935760498046875 -0.0235264003276824951171875 +0.246314811706542985403345369377 0.3142859935760498046875 -0.0235264003276824951171875 +0.24640850722789764404296875 -0.3406689167022705078125 0.495708832144737265856804242503 +0.24640850722789764404296875 0.3406689167022705078125 0.495708832144737265856804242503 +0.246409988403320318051115123126 -0.211651611328125016653345369377 -0.233421993255615245477230246252 +0.246409988403320318051115123126 0.211651611328125016653345369377 -0.233421993255615245477230246252 +0.246440005302429210320980246252 -0.264352011680603016241519753748 -0.171421599388122569695980246252 +0.246440005302429210320980246252 0.264352011680603016241519753748 -0.171421599388122569695980246252 +0.246442346274852785992237613755 -0.409598186612129266936932481258 0.272021196782588958740234375 +0.246442346274852785992237613755 0.409598186612129266936932481258 0.272021196782588958740234375 +0.246527493000030517578125 -0.3748919963836669921875 0.22063599526882171630859375 +0.246527493000030517578125 0.3748919963836669921875 0.22063599526882171630859375 +0.246585291624069197213842130623 -0.148931702971458440609708873126 0.0837558031082153292556924384371 +0.246585291624069197213842130623 0.148931702971458440609708873126 0.0837558031082153292556924384371 +0.246607096493244165591463001874 -0.758987081050872758325454014994 0.2926141917705535888671875 +0.246607096493244165591463001874 0.758987081050872758325454014994 0.2926141917705535888671875 +0.246624290943145751953125 -0.179182800650596635305689119377 0.846800100803375310754006477509 +0.246624290943145751953125 0.179182800650596635305689119377 0.846800100803375310754006477509 +0.246677398681640625 -0.31679101288318634033203125 0.203208754956722276174829744377 +0.246677398681640625 0.31679101288318634033203125 0.203208754956722276174829744377 +0.24667875468730926513671875 -0.0205805003643035888671875 -0.03501474857330322265625 +0.24667875468730926513671875 0.0205805003643035888671875 -0.03501474857330322265625 +0.2467854022979736328125 -0.0779669970273971502106036268742 0.151717203855514515264957253748 +0.2467854022979736328125 0.0779669970273971502106036268742 0.151717203855514515264957253748 +0.246800243854522705078125 -0.365475600957870516705128238755 -0.0895387485623359707931356865629 +0.246800243854522705078125 0.365475600957870516705128238755 -0.0895387485623359707931356865629 +0.246819756925106048583984375 -0.65950651466846466064453125 -0.258130498230457305908203125 +0.246819756925106048583984375 0.65950651466846466064453125 -0.258130498230457305908203125 +0.246877388656139368228181751874 -0.64633999764919281005859375 -0.493756499886512767449886496252 +0.246877388656139368228181751874 0.64633999764919281005859375 -0.493756499886512767449886496252 +0.246889591217041015625 -0.4419295787811279296875 -0.619470405578613325658920985006 +0.246889591217041015625 0.4419295787811279296875 -0.619470405578613325658920985006 +0.24690639972686767578125 -0.415403223037719759869190738755 0.637555980682373069079460492503 +0.24690639972686767578125 0.415403223037719759869190738755 0.637555980682373069079460492503 +0.246918600797653181588842130623 -0.3733727931976318359375 0.399529802799224842413394753748 +0.246918600797653181588842130623 0.3733727931976318359375 0.399529802799224842413394753748 +0.246918609738349920101896373126 -0.179394306242465967349275501874 -0.8466695845127105712890625 +0.246918609738349920101896373126 0.179394306242465967349275501874 -0.8466695845127105712890625 +0.2469222545623779296875 -0.039108000695705413818359375 0 +0.2469222545623779296875 0.039108000695705413818359375 0 +0.246961641311645524465845369377 -0.441289535164833102154346988755 -0.40837873518466949462890625 +0.246961641311645524465845369377 0.441289535164833102154346988755 -0.40837873518466949462890625 +0.247051757574081432000667746252 -0.474467387795448336529346988755 0.1278513483703136444091796875 +0.247051757574081432000667746252 0.474467387795448336529346988755 0.1278513483703136444091796875 +0.247113355994224570544304242503 -0.0731885038316249930678836221887 0.485879355669021628649772992503 +0.247113355994224570544304242503 0.0731885038316249930678836221887 0.485879355669021628649772992503 +0.2472136020660400390625 -0.760844802856445401317841970013 0 +0.2472136020660400390625 0.760844802856445401317841970013 0 +0.247250840067863436599893134371 -0.114074446260929093788227817186 0.219895553588867170846654630623 +0.247250840067863436599893134371 0.114074446260929093788227817186 0.219895553588867170846654630623 +0.247254002094268787725894753748 0 0.169898396730422979183927623126 +0.247365438938140863589509876874 -0.0901647023856639862060546875 0.364939212799072265625 +0.247365438938140863589509876874 0.0901647023856639862060546875 0.364939212799072265625 +0.2474402487277984619140625 -0.02028525061905384063720703125 0.029357500374317169189453125 +0.2474402487277984619140625 0.02028525061905384063720703125 0.029357500374317169189453125 +0.247465397417545335256860994377 -0.5376202166080474853515625 0.268747054040431976318359375 +0.247465397417545335256860994377 0.5376202166080474853515625 0.268747054040431976318359375 +0.247487807273864740542634876874 -0.247487097978591891189736884371 0 +0.247487807273864740542634876874 0.247487097978591891189736884371 0 +0.247504055500030517578125 -0.179821796715259552001953125 0.330008858442306540759147992503 +0.247504055500030517578125 0.179821796715259552001953125 0.330008858442306540759147992503 +0.24751900136470794677734375 0 -0.0351339988410472869873046875 +0.24757875502109527587890625 -0.0299385003745555877685546875 -0.01756249926984310150146484375 +0.24757875502109527587890625 0.0299385003745555877685546875 -0.01756249926984310150146484375 +0.247732794284820534436164507497 -0.13447679579257965087890625 0.102685797214508059416182561563 +0.247732794284820534436164507497 0.13447679579257965087890625 0.102685797214508059416182561563 +0.24778474867343902587890625 -0.029769249260425567626953125 0.01471449993550777435302734375 +0.24778474867343902587890625 0.029769249260425567626953125 0.01471449993550777435302734375 +0.247852808237075811215177623126 -0.339619794487953208239616742503 -0.495708832144737265856804242503 +0.247852808237075811215177623126 0.339619794487953208239616742503 -0.495708832144737265856804242503 +0.247901397943496692999332253748 -0.229606801271438593081697376874 -0.495808196067810014184829014994 +0.247901397943496692999332253748 0.229606801271438593081697376874 -0.495808196067810014184829014994 +0.247958803176879905016960492503 -0.295084404945373524054019753748 0.106965196132659923211605246252 +0.247958803176879905016960492503 0.295084404945373524054019753748 0.106965196132659923211605246252 +0.248187994956970220394865123126 -0.147405195236206071340845369377 -0.27690160274505615234375 +0.248187994956970220394865123126 0.147405195236206071340845369377 -0.27690160274505615234375 +0.24825875461101531982421875 0 0.0294547490775585174560546875 +0.248292440176010126284822376874 -0.215473639965057361944644753748 -0.120091304183006272743305942186 +0.248292440176010126284822376874 0.215473639965057361944644753748 -0.120091304183006272743305942186 +0.248297190666198736019865123126 -0.0491192013025283855109925923443 -0.309734797477722201275440738755 +0.248297190666198736019865123126 0.0491192013025283855109925923443 -0.309734797477722201275440738755 +0.24831040203571319580078125 -0.487099590897560108526676003748 0.351533660292625449450554242503 +0.24831040203571319580078125 0.487099590897560108526676003748 0.351533660292625449450554242503 +0.248371902108192432745426003748 -0.514352309703826837683493522491 -0.404664385318756092413394753748 +0.248371902108192432745426003748 0.514352309703826837683493522491 -0.404664385318756092413394753748 +0.248521497845649724789396373126 -0.295201349258422840460269753748 0.231502506136894242727564119377 +0.248521497845649724789396373126 0.295201349258422840460269753748 0.231502506136894242727564119377 +0.248744595050811784231470369377 -0.600521367788314885949318977509 0 +0.248744595050811784231470369377 0.600521367788314885949318977509 0 +0.248746508359909052066072376874 -0.765575999021530173571647992503 0.40249349176883697509765625 +0.248746508359909052066072376874 0.765575999021530173571647992503 0.40249349176883697509765625 +0.248964945971965806448267244377 -0.595558580756187505578225227509 0.0763301499187946375091229356258 +0.248964945971965806448267244377 0.595558580756187505578225227509 0.0763301499187946375091229356258 +0.249084545671939855404630748126 -0.593438291549682639391960492503 -0.09103834629058837890625 +0.249084545671939855404630748126 0.593438291549682639391960492503 -0.09103834629058837890625 +0.2491682469844818115234375 -0.0103247500956058502197265625 -0.017565749585628509521484375 +0.2491682469844818115234375 0.0103247500956058502197265625 -0.017565749585628509521484375 +0.249180597066879255807592130623 -0.165724807977676386050447376874 0.02107889950275421142578125 +0.249180597066879255807592130623 0.165724807977676386050447376874 0.02107889950275421142578125 +0.249227392673492420538394753748 -0.0395244017243385273308042826557 0.162245106697082502877904630623 +0.249227392673492420538394753748 0.0395244017243385273308042826557 0.162245106697082502877904630623 +0.249229252338409423828125 -0.01961450092494487762451171875 0 +0.249229252338409423828125 0.01961450092494487762451171875 0 +0.249256199598312355725227007497 -0.166010695695877064093082253748 -0.0176598004996776566932759067186 +0.249256199598312355725227007497 0.166010695695877064093082253748 -0.0176598004996776566932759067186 +0.249280905723571810650440738755 -0.400374159216880853850994981258 -0.282947507500648509637386496252 +0.249280905723571810650440738755 0.400374159216880853850994981258 -0.282947507500648509637386496252 +0.249319803714752180612279630623 -0.151261496543884266241519753748 -0.0704247012734413174728231865629 +0.249319803714752180612279630623 0.151261496543884266241519753748 -0.0704247012734413174728231865629 +0.24935925006866455078125 -0.0101687498390674591064453125 0.01471650041639804840087890625 +0.24935925006866455078125 0.0101687498390674591064453125 0.01471650041639804840087890625 +0.249391096830368030889957253748 -0.467249304056167547027911268742 0.457692885398864712787059261245 +0.249391096830368030889957253748 0.467249304056167547027911268742 0.457692885398864712787059261245 +0.249397808313369745425447376874 -0.894536161422729403369658029987 -0.200263800472021080700812944997 +0.249397808313369745425447376874 0.894536161422729403369658029987 -0.200263800472021080700812944997 +0.249452701210975624768195757497 -0.234363842010498035772769753748 0.0731226995587348910232705634371 +0.249452701210975624768195757497 0.234363842010498035772769753748 0.0731226995587348910232705634371 +0.249477192759513827224893134371 -0.239000296592712380139289507497 -0.608801901340484619140625 +0.249477192759513827224893134371 0.239000296592712380139289507497 -0.608801901340484619140625 +0.2496390044689178466796875 -0.126707401871681196725560880623 -0.107822397351264948062166126874 +0.2496390044689178466796875 0.126707401871681196725560880623 -0.107822397351264948062166126874 +0.249658799171447759457365123126 -0.24625480175018310546875 -0.192429196834564220086605246252 +0.249658799171447759457365123126 0.24625480175018310546875 -0.192429196834564220086605246252 +0.249676004052162142654580634371 -0.067121602594852447509765625 -0.235916447639465315377904630623 +0.249676004052162142654580634371 0.067121602594852447509765625 -0.235916447639465315377904630623 +0.249695047736167935470419365629 -0.490053296089172418792401231258 0 +0.249695047736167935470419365629 0.490053296089172418792401231258 0 +0.249704790115356456414730246252 -0.661714410781860440380341970013 -0.373874402046203646587940738755 +0.249704790115356456414730246252 0.661714410781860440380341970013 -0.373874402046203646587940738755 +0.249705907702445994988948996252 -0.107402850687503811921708063437 -0.358624809980392478259147992503 +0.249705907702445994988948996252 0.107402850687503811921708063437 -0.358624809980392478259147992503 +0.249715501070022577456697376874 -0.06182970106601715087890625 -0.154334700107574468441740123126 +0.249715501070022577456697376874 0.06182970106601715087890625 -0.154334700107574468441740123126 +0.2497255504131317138671875 -0.768561396002769403601462272491 -0.499451100826263427734375 +0.2497255504131317138671875 0.768561396002769403601462272491 -0.499451100826263427734375 +0.24975000321865081787109375 -0.119707502424716949462890625 -0.6969899833202362060546875 +0.24975000321865081787109375 0.119707502424716949462890625 -0.6969899833202362060546875 +0.249958795309066755807592130623 -0.530855405330657892370993522491 -0.12535379827022552490234375 +0.249958795309066755807592130623 0.530855405330657892370993522491 -0.12535379827022552490234375 +0.24999849498271942138671875 -0.099111996591091156005859375 -0.421518504619598388671875 +0.24999849498271942138671875 0.099111996591091156005859375 -0.421518504619598388671875 +0.25 0 0 +0.2500664889812469482421875 -0.3694410026073455810546875 -0.22578750550746917724609375 +0.2500664889812469482421875 0.3694410026073455810546875 -0.22578750550746917724609375 +0.250072899460792585912827235006 -0.485560348629951510357471988755 0.06476744823157787322998046875 +0.250072899460792585912827235006 0.485560348629951510357471988755 0.06476744823157787322998046875 +0.250094389915466341900440738755 -0.181703603267669683285490123126 0.253843998908996615337940738755 +0.250094389915466341900440738755 0.181703603267669683285490123126 0.253843998908996615337940738755 +0.250126791000366222039730246252 -0.0165204003453254706645925153907 -0.31171119213104248046875 +0.250126791000366222039730246252 0.0165204003453254706645925153907 -0.31171119213104248046875 +0.2501370012760162353515625 -0.23210500180721282958984375 0.365456998348236083984375 +0.2501370012760162353515625 0.23210500180721282958984375 0.365456998348236083984375 +0.250213660299777984619140625 -0.22452665865421295166015625 0.78069268167018890380859375 +0.250213660299777984619140625 0.22452665865421295166015625 0.78069268167018890380859375 +0.250255498290061995092514735006 -0.483638635277748141216846988755 -0.0772376000881195151626101846887 +0.250255498290061995092514735006 0.483638635277748141216846988755 -0.0772376000881195151626101846887 +0.25025975704193115234375 -0.128226152807474153005884431877 -0.586027643084526039807258257497 +0.25025975704193115234375 0.128226152807474153005884431877 -0.586027643084526039807258257497 +0.25029599666595458984375 -0.599507188796997048108039507497 0.466843986511230490954460492503 +0.25029599666595458984375 0.599507188796997048108039507497 0.466843986511230490954460492503 +0.250303798913955655169871761245 -0.535045194625854425574118522491 0.10523580014705657958984375 +0.250303798913955655169871761245 0.535045194625854425574118522491 0.10523580014705657958984375 +0.250589244067668914794921875 -0.67259998619556427001953125 0.217517249286174774169921875 +0.250589244067668914794921875 0.67259998619556427001953125 0.217517249286174774169921875 +0.250629007816314697265625 -0.90483701229095458984375 -0.3441750109195709228515625 +0.250629007816314697265625 0.90483701229095458984375 -0.3441750109195709228515625 +0.250636956095695528912159488755 -0.372801142930984485968082253748 0.0264672003686428070068359375 +0.250636956095695528912159488755 0.372801142930984485968082253748 0.0264672003686428070068359375 +0.2506864964962005615234375 -0.3510214984416961669921875 0.2528634965419769287109375 +0.2506864964962005615234375 0.3510214984416961669921875 0.2528634965419769287109375 +0.250789551436901070324836382497 -0.645022442936897255627570757497 -0.650807929039001420434829014994 +0.250789551436901070324836382497 0.645022442936897255627570757497 -0.650807929039001420434829014994 +0.250790995359420787469417746252 -0.423138606548309315069644753748 -0.343595409393310513568309261245 +0.250790995359420787469417746252 0.423138606548309315069644753748 -0.343595409393310513568309261245 +0.25089804828166961669921875 -0.0866157531738281222244424384371 0.593336242437362715307358485006 +0.25089804828166961669921875 0.0866157531738281222244424384371 0.593336242437362715307358485006 +0.250914162397384676861378238755 -0.372216153144836414679019753748 -0.0315796483308076886276083428129 +0.250914162397384676861378238755 0.372216153144836414679019753748 -0.0315796483308076886276083428129 +0.2509475052356719970703125 -0.2234854996204376220703125 -0.3702425062656402587890625 +0.2509475052356719970703125 0.2234854996204376220703125 -0.3702425062656402587890625 +0.25096504390239715576171875 -0.125378046929836256540014005623 -0.209276902675628651007144753748 +0.25096504390239715576171875 0.125378046929836256540014005623 -0.209276902675628651007144753748 +0.25102519989013671875 -0.295553588867187522204460492503 -0.0981548011302948025802450615629 +0.25102519989013671875 0.295553588867187522204460492503 -0.0981548011302948025802450615629 +0.2511135041713714599609375 -0.182442596554756170101896373126 -0.325817102193832419665397992503 +0.2511135041713714599609375 0.182442596554756170101896373126 -0.325817102193832419665397992503 +0.251379105448722828253238503748 -0.200217846035957325323551003748 -0.138640950620174396856754128748 +0.251379105448722828253238503748 0.200217846035957325323551003748 -0.138640950620174396856754128748 +0.251485504209995269775390625 -0.61440373957157135009765625 0.348944999277591705322265625 +0.251485504209995269775390625 0.61440373957157135009765625 0.348944999277591705322265625 +0.251503002643585216180355246252 -0.0232980992645025232479216725778 0.242287859320640536209268134371 +0.251503002643585216180355246252 0.0232980992645025232479216725778 0.242287859320640536209268134371 +0.25162760913372039794921875 -0.588121813535690263208266514994 -0.284246909618377674444644753748 +0.25162760913372039794921875 0.588121813535690263208266514994 -0.284246909618377674444644753748 +0.251632490754127469134715511245 -0.13506640493869781494140625 0.202331504225730873791633257497 +0.251632490754127469134715511245 0.13506640493869781494140625 0.202331504225730873791633257497 +0.251638653874397266729801003748 -0.03003344871103763580322265625 0.371854805946350119860710492503 +0.251638653874397266729801003748 0.03003344871103763580322265625 0.371854805946350119860710492503 +0.25165139138698577880859375 -0.0696825496852397918701171875 0.233058008551597584112613503748 +0.25165139138698577880859375 0.0696825496852397918701171875 0.233058008551597584112613503748 +0.251654410362243674548210492503 -0.260421609878540072369190738755 0.713337612152099675988381477509 +0.251654410362243674548210492503 0.260421609878540072369190738755 0.713337612152099675988381477509 +0.251656597852706942486378238755 -0.216020342707633983270198996252 0.559020814299583501671975227509 +0.251656597852706942486378238755 0.216020342707633983270198996252 0.559020814299583501671975227509 +0.251668989658355712890625 -0.13256800174713134765625 0.95869100093841552734375 +0.251668989658355712890625 0.13256800174713134765625 0.95869100093841552734375 +0.2516759932041168212890625 -0.3054600059986114501953125 -0.305537998676300048828125 +0.2516759932041168212890625 0.3054600059986114501953125 -0.305537998676300048828125 +0.251676303148269664422542746252 -0.0911397010087966891189736884371 0.135471904277801508120759876874 +0.251676303148269664422542746252 0.0911397010087966891189736884371 0.135471904277801508120759876874 +0.25171439349651336669921875 -0.235311293601989740542634876874 -0.0613875500857829978218482835928 +0.25171439349651336669921875 0.235311293601989740542634876874 -0.0613875500857829978218482835928 +0.251717394590377785412727007497 -0.543499195575714133532585492503 0.0353154011070728260368589701557 +0.251717394590377785412727007497 0.543499195575714133532585492503 0.0353154011070728260368589701557 +0.251881206035613980365184261245 -0.0950318992137908907791299384371 -0.132381302118301374948217130623 +0.251881206035613980365184261245 0.0950318992137908907791299384371 -0.132381302118301374948217130623 +0.251882100105285611224559261245 -0.138078296184539789370759876874 -0.08654339611530303955078125 +0.251882100105285611224559261245 0.138078296184539789370759876874 -0.08654339611530303955078125 +0.251934298872947659564403011245 -0.900430876016616754675681022491 0.168087303638458251953125 +0.251934298872947659564403011245 0.900430876016616754675681022491 0.168087303638458251953125 +0.251951408386230479852230246252 -0.542903387546539328845085492503 -0.042149998247623443603515625 +0.251951408386230479852230246252 0.542903387546539328845085492503 -0.042149998247623443603515625 +0.252049487829208385125667746252 -0.109070996940135958586104436563 -0.857072693109512395714943977509 +0.252049487829208385125667746252 0.109070996940135958586104436563 -0.857072693109512395714943977509 +0.252125236392021168096988503748 -0.366874806582927703857421875 0.83924712240695953369140625 +0.252125236392021168096988503748 0.366874806582927703857421875 0.83924712240695953369140625 +0.252150796353816986083984375 -0.776033827662467978747429242503 -0.2381002902984619140625 +0.252150796353816986083984375 0.776033827662467978747429242503 -0.2381002902984619140625 +0.252189292013645205425831363755 -0.228575050830841092208700615629 -0.432034337520599387438835492503 +0.252189292013645205425831363755 0.228575050830841092208700615629 -0.432034337520599387438835492503 +0.252297496795654274670539507497 -0.322614610195159912109375 0.567684596776962258068977007497 +0.252297496795654274670539507497 0.322614610195159912109375 0.567684596776962258068977007497 +0.252326694130897533074886496252 -0.315277656912803683209034488755 -0.198572395741939550228849498126 +0.252326694130897533074886496252 0.315277656912803683209034488755 -0.198572395741939550228849498126 +0.252754497528076160772769753748 -0.0413850009441375718544087192186 -0.156212693452835088558927623126 +0.252754497528076160772769753748 0.0413850009441375718544087192186 -0.156212693452835088558927623126 +0.2528559863567352294921875 -0.059876501560211181640625 -0.427174985408782958984375 +0.2528559863567352294921875 0.059876501560211181640625 -0.427174985408782958984375 +0.252862457931041728631527121252 -0.778244736790656976843649772491 0.482592427730560269427684261245 +0.252862457931041728631527121252 0.778244736790656976843649772491 0.482592427730560269427684261245 +0.252945552766323134008530360006 -0.183775345981121079885767244377 0.452487733960151683465511496252 +0.252945552766323134008530360006 0.183775345981121079885767244377 0.452487733960151683465511496252 +0.252960395812988292352230246252 -0.0429544497281312900871519389057 -0.238046190142631508557258257497 +0.252960395812988292352230246252 0.0429544497281312900871519389057 -0.238046190142631508557258257497 +0.252983188629150423931690738755 -0.565680789947509810033920985006 -0.5059688091278076171875 +0.252983188629150423931690738755 0.565680789947509810033920985006 -0.5059688091278076171875 +0.253023290634155295641960492503 -0.257060712575912508892628238755 -0.26907075941562652587890625 +0.253023290634155295641960492503 0.257060712575912508892628238755 -0.26907075941562652587890625 +0.253120037913322437628238503748 -0.0724513471126556479751101846887 -0.364939641952514659539730246252 +0.253120037913322437628238503748 0.0724513471126556479751101846887 -0.364939641952514659539730246252 +0.253134259581565823626903011245 -0.0565810982137918486167826870314 0.809457543492317133093649772491 +0.253134259581565823626903011245 0.0565810982137918486167826870314 0.809457543492317133093649772491 +0.253199256956577301025390625 -0.0608549974858760833740234375 -0.7033394873142242431640625 +0.253199256956577301025390625 0.0608549974858760833740234375 -0.7033394873142242431640625 +0.253245210647583041119190738755 -0.278814005851745594366519753748 0.134645998477935791015625 +0.253245210647583041119190738755 0.278814005851745594366519753748 0.134645998477935791015625 +0.253259989619255054815738503748 -0.184004107117652887515291126874 0.626100319623947076941306022491 +0.253259989619255054815738503748 -0.184002000093460071905582253748 -0.156525246798992156982421875 +0.253259989619255054815738503748 0.184002000093460071905582253748 -0.156525246798992156982421875 +0.253259989619255054815738503748 0.184004107117652887515291126874 0.626100319623947076941306022491 +0.253262805938720692022769753748 -0.4114452898502349853515625 -0.5065284073352813720703125 +0.253262805938720692022769753748 0.4114452898502349853515625 -0.5065284073352813720703125 +0.253364503383636474609375 -0.13320100307464599609375 0.4099560081958770751953125 +0.253364503383636474609375 0.13320100307464599609375 0.4099560081958770751953125 +0.253365993499755859375 -0.513369023799896240234375 -0.81991302967071533203125 +0.253365993499755859375 0.513369023799896240234375 -0.81991302967071533203125 +0.25337339937686920166015625 -0.0366084013134241118003764370314 -0.862821900844573996813835492503 +0.25337339937686920166015625 0.0366084013134241118003764370314 -0.862821900844573996813835492503 +0.253374409675598155633480246252 -0.204480791091918967516960492503 0.232355594635009765625 +0.253374409675598155633480246252 0.204480791091918967516960492503 0.232355594635009765625 +0.253400397300720225945980246252 -0.184104001522064214535490123126 -0.248784804344177268298210492503 +0.253400397300720225945980246252 0.184104001522064214535490123126 -0.248784804344177268298210492503 +0.25355899333953857421875 -0.564508020877838134765625 0.785517990589141845703125 +0.25355899333953857421875 0.564508020877838134765625 0.785517990589141845703125 +0.253738096356391884533820757497 -0.155875647068023676089509876874 -0.183901551365852344854801003748 +0.253738096356391884533820757497 0.155875647068023676089509876874 -0.183901551365852344854801003748 +0.25387470424175262451171875 -0.2073951065540313720703125 0.30827701091766357421875 +0.25387470424175262451171875 0.2073951065540313720703125 0.30827701091766357421875 +0.253891953825950644763054242503 -0.0773993991315364837646484375 -0.593336242437362715307358485006 +0.253891953825950644763054242503 0.0773993991315364837646484375 -0.593336242437362715307358485006 +0.253944003582000699115184261245 -0.487299585342407193255809261245 -0.2409389913082122802734375 +0.253944003582000699115184261245 0.487299585342407193255809261245 -0.2409389913082122802734375 +0.253986310958862315789730246252 -0.781677889823913618627670985006 -0.366702309250831637310596988755 +0.253986310958862315789730246252 0.781677889823913618627670985006 -0.366702309250831637310596988755 +0.253997701406478870733707253748 -0.154011905193328857421875 0.0420176982879638671875 +0.253997701406478870733707253748 0.154011905193328857421875 0.0420176982879638671875 +0.25402200222015380859375 -0.0588042005896568242828692518742 0.14837430417537689208984375 +0.25402200222015380859375 0.0588042005896568242828692518742 0.14837430417537689208984375 +0.254037000238895416259765625 0 -0.7056667506694793701171875 +0.254053495824337005615234375 -0.295599751174449920654296875 0.64076323807239532470703125 +0.254053495824337005615234375 0.295599751174449920654296875 0.64076323807239532470703125 +0.254149341583251919818309261245 -0.219908842444419855288728626874 0.0977151036262512151520098768742 +0.254149341583251919818309261245 0.219908842444419855288728626874 0.0977151036262512151520098768742 +0.254254692792892422747996761245 -0.0466228023171424837967080634371 0.650523316860198930200454014994 +0.254254692792892422747996761245 0.0466228023171424837967080634371 0.650523316860198930200454014994 +0.254283487796783447265625 -0.02064899913966655731201171875 -0.4300160109996795654296875 +0.254283487796783447265625 0.02064899913966655731201171875 -0.4300160109996795654296875 +0.25434149801731109619140625 0 0.70555727183818817138671875 +0.25439751148223876953125 -0.4125874936580657958984375 0.122693501412868499755859375 +0.25439751148223876953125 0.4125874936580657958984375 0.122693501412868499755859375 +0.254486399888992298468082253748 -0.0197450995445251457904856096093 0.157628703117370594366519753748 +0.254486399888992298468082253748 0.0197450995445251457904856096093 0.157628703117370594366519753748 +0.254510757327079784051448996252 -0.49312056601047515869140625 -0.338462153077125571520866742503 +0.254510757327079784051448996252 0.49312056601047515869140625 -0.338462153077125571520866742503 +0.254514044523239113537727007497 -0.15500240027904510498046875 0.183567306399345375744758257497 +0.254514044523239113537727007497 0.15500240027904510498046875 0.183567306399345375744758257497 +0.254528707265853859631477007497 -0.154835397005081171206697376874 -0.0352292999625205965896768134371 +0.254528707265853859631477007497 0.154835397005081171206697376874 -0.0352292999625205965896768134371 +0.254531407356262173724559261245 -0.332019603252410866467414507497 -0.430089604854583751336605246252 +0.254531407356262173724559261245 0.332019603252410866467414507497 -0.430089604854583751336605246252 +0.254561296105384804455695757497 -0.0144375005736947052692453752343 -0.239771008491516085525674384371 +0.254561296105384804455695757497 0.0144375005736947052692453752343 -0.239771008491516085525674384371 +0.254583603143691994397102007497 -0.0207420006394386270687224538278 -0.157343405485153187139957253748 +0.254583603143691994397102007497 0.0207420006394386270687224538278 -0.157343405485153187139957253748 +0.254608207941055320056022992503 -0.352552959322929404528679242503 0.115676553547382363063000809689 +0.254608207941055320056022992503 0.352552959322929404528679242503 0.115676553547382363063000809689 +0.25468099117279052734375 -0.783840000629425048828125 0.566332995891571044921875 +0.25468099117279052734375 0.783840000629425048828125 0.566332995891571044921875 +0.254702985286712646484375 -0.2673769891262054443359375 -0.92931997776031494140625 +0.254702985286712646484375 0.2673769891262054443359375 -0.92931997776031494140625 +0.254825751483440388067691628748 -0.602620252966880820544304242503 0.542598369717597894812399772491 +0.254825751483440388067691628748 0.602620252966880820544304242503 0.542598369717597894812399772491 +0.254858803749084483758480246252 -0.303173995018005404400440738755 0.0559683978557586683799662807814 +0.254858803749084483758480246252 0.303173995018005404400440738755 0.0559683978557586683799662807814 +0.254943001270294178350894753748 -0.0370449006557464627364950615629 -0.368960407376289378778011496252 +0.254943001270294178350894753748 0.0370449006557464627364950615629 -0.368960407376289378778011496252 +0.254966998100280728412059261245 -0.498486614227294899670539507497 0.215644794702529896124332253748 +0.254966998100280728412059261245 0.498486614227294899670539507497 0.215644794702529896124332253748 +0.255024492740631103515625 -0.408760488033294677734375 -0.13370649516582489013671875 +0.255024492740631103515625 0.408760488033294677734375 -0.13370649516582489013671875 +0.2550487518310546875 -0.48708151280879974365234375 -0.5100997388362884521484375 +0.2550487518310546875 0.48708151280879974365234375 -0.5100997388362884521484375 +0.255193805694580055920539507497 -0.185406607389450056588842130623 -0.510392403602600075451789507497 +0.255193805694580055920539507497 0.185406607389450056588842130623 -0.510392403602600075451789507497 +0.2551943957805633544921875 0 -0.157720792293548572882144753748 +0.255212742090225208624332253748 -0.509496000409126348351662727509 0.312697444856166850701839621252 +0.255212742090225208624332253748 0.509496000409126348351662727509 0.312697444856166850701839621252 +0.255220794677734397204460492503 0 0.307997202873230013775440738755 +0.255274558067321744037059261245 -0.78565926849842071533203125 0.200187748670578008480802623126 +0.255274558067321744037059261245 0.78565926849842071533203125 0.200187748670578008480802623126 +0.255276413261890378070262386245 -0.912621319293975830078125 -0.066749848425388336181640625 +0.255276413261890378070262386245 0.912621319293975830078125 -0.066749848425388336181640625 +0.255277204513549793585269753748 -0.103845298290252685546875 0.118531796336174000128238503748 +0.255277204513549793585269753748 0.103845298290252685546875 0.118531796336174000128238503748 +0.25527799129486083984375 -0.105145597457885750514172684689 0.289443588256835970806690738755 +0.25527799129486083984375 0.105145597457885750514172684689 0.289443588256835970806690738755 +0.255286806821823086810496761245 -0.400499403476715087890625 0.366645598411560025287059261245 +0.255286806821823086810496761245 0.400499403476715087890625 0.366645598411560025287059261245 +0.25541724264621734619140625 -0.315949705243110667840511496252 0.370726403594017039910823996252 +0.25541724264621734619140625 0.315949705243110667840511496252 0.370726403594017039910823996252 +0.255564649403095256463558371252 -0.321026739478111278192073996252 -0.366235652565956137927116742503 +0.255564649403095256463558371252 0.321026739478111278192073996252 -0.366235652565956137927116742503 +0.25571845471858978271484375 -0.0264381006360054036929962961722 -0.59700028598308563232421875 +0.25571845471858978271484375 0.0264381006360054036929962961722 -0.59700028598308563232421875 +0.25577719509601593017578125 -0.237641599774360640084935880623 0.02458749897778034210205078125 +0.25577719509601593017578125 0.237641599774360640084935880623 0.02458749897778034210205078125 +0.255792599916458140985042746252 -0.156748795509338373355134876874 0 +0.255792599916458140985042746252 0.156748795509338373355134876874 0 +0.255811044573783896716179242503 0 -0.370216807723045382427784488755 +0.255814500153064727783203125 -0.68706826865673065185546875 -0.1581030003726482391357421875 +0.255814500153064727783203125 0.68706826865673065185546875 -0.1581030003726482391357421875 +0.25586248934268951416015625 -0.46517626941204071044921875 0.52975948154926300048828125 +0.25586248934268951416015625 0.46517626941204071044921875 0.52975948154926300048828125 +0.256063011288642894403011496252 -0.913128617405891351843649772491 0.0559227015823125783722247206242 +0.256063011288642894403011496252 0.913128617405891351843649772491 0.0559227015823125783722247206242 +0.256110806763172160760433371252 0 0.486731308698654219213608485006 +0.256149950623512256964176003748 -0.237619194388389576300113503748 -0.0206006506457924835895578752343 +0.256149950623512256964176003748 0.237619194388389576300113503748 -0.0206006506457924835895578752343 +0.256225609779357932360710492503 -0.120501601696014412623547684689 -0.282538008689880382195980246252 +0.256225609779357932360710492503 0.120501601696014412623547684689 -0.282538008689880382195980246252 +0.2562870085239410400390625 -0.26205348968505859375 0.340066492557525634765625 +0.2562870085239410400390625 0.26205348968505859375 0.340066492557525634765625 +0.256336402893066417352230246252 -0.303460407257080122533920985006 -0.0469399988651275634765625 +0.256336402893066417352230246252 0.303460407257080122533920985006 -0.0469399988651275634765625 +0.2563765048980712890625 -0.3468874990940093994140625 -0.2528634965419769287109375 +0.2563765048980712890625 0.3468874990940093994140625 -0.2528634965419769287109375 +0.256402292847633328509715511245 -0.605450314283370927270766514994 0.240182608366012545486611884371 +0.256402292847633328509715511245 0.605450314283370927270766514994 0.240182608366012545486611884371 +0.256416311860084566998096988755 -0.295324650406837474481136496252 -0.222562797367572784423828125 +0.256416311860084566998096988755 0.295324650406837474481136496252 -0.222562797367572784423828125 +0.256463402509689297747996761245 -0.04002539813518524169921875 0.540947413444519020764289507497 +0.256463402509689297747996761245 0.04002539813518524169921875 0.540947413444519020764289507497 +0.25650094449520111083984375 -0.584679391980171159204360264994 0.703461724519729547644431022491 +0.25650094449520111083984375 0.584679391980171159204360264994 0.703461724519729547644431022491 +0.256620588898658741339176003748 -0.351090887188911460192741742503 -0.115676553547382363063000809689 +0.256620588898658741339176003748 0.351090887188911460192741742503 -0.115676553547382363063000809689 +0.256639502942562103271484375 -0.1487512551248073577880859375 0.68884648382663726806640625 +0.256639502942562103271484375 0.1487512551248073577880859375 0.68884648382663726806640625 +0.256642806529998768194644753748 -0.107467201352119443025223688437 -0.112184098362922660130358565311 +0.256642806529998768194644753748 0.107467201352119443025223688437 -0.112184098362922660130358565311 +0.256652402877807606085269753748 -0.261398005485534656866519753748 0.160625994205474853515625 +0.256652402877807606085269753748 0.261398005485534656866519753748 0.160625994205474853515625 +0.256654405593872092516960492503 -0.106232798099517827816740123126 0.750228786468505881579460492503 +0.256654405593872092516960492503 0.106232798099517827816740123126 0.750228786468505881579460492503 +0.256659606099128689837840511245 -0.421753460168838467669871761245 -0.811633434891700700219985264994 +0.256659606099128689837840511245 0.421753460168838467669871761245 -0.811633434891700700219985264994 +0.256744801998138427734375 -0.334567809104919455798210492503 -0.7950762212276458740234375 +0.256744801998138427734375 0.334567809104919455798210492503 -0.7950762212276458740234375 +0.256781800091266665386768863755 -0.456696915626525923315170985006 0.167305046319961570056022992503 +0.256781800091266665386768863755 0.456696915626525923315170985006 0.167305046319961570056022992503 +0.2568120062351226806640625 -0.92191898822784423828125 0.2900229990482330322265625 +0.2568120062351226806640625 0.92191898822784423828125 0.2900229990482330322265625 +0.256822210550308238641292746252 -0.596554183959960959704460492503 0.623029518127441450658920985006 +0.256822210550308238641292746252 0.596554183959960959704460492503 0.623029518127441450658920985006 +0.256875456869602225573601117503 -0.373395106196403536724659488755 0.465930405259132374151676003748 +0.256875456869602225573601117503 0.373395106196403536724659488755 0.465930405259132374151676003748 +0.256925247609615325927734375 -0.69201149046421051025390625 0.132700502872467041015625 +0.256925247609615325927734375 0.69201149046421051025390625 0.132700502872467041015625 +0.257004557549953494000050113755 -0.449636012315750177581463731258 -0.185138247907161740402059990629 +0.257004557549953494000050113755 0.449636012315750177581463731258 -0.185138247907161740402059990629 +0.257114195823669400287059261245 -0.204649898409843433721988503748 0.120460899174213403872713001874 +0.257114195823669400287059261245 0.204649898409843433721988503748 0.120460899174213403872713001874 +0.257124906778335549084602007497 -0.141274201869964588507144753748 0.062676899135112762451171875 +0.257124906778335549084602007497 0.141274201869964588507144753748 0.062676899135112762451171875 +0.257181304693222034796207253748 -0.0741965979337692177475460653113 -0.135472199320793157406583873126 +0.257181304693222034796207253748 0.0741965979337692177475460653113 -0.135472199320793157406583873126 +0.257274739444255828857421875 -0.31070025265216827392578125 -0.6322777569293975830078125 +0.257274739444255828857421875 0.31070025265216827392578125 -0.6322777569293975830078125 +0.257531189918518088610710492503 -0.0533020019531250041633363423443 0.301390790939331076891960492503 +0.257531189918518088610710492503 0.0533020019531250041633363423443 0.301390790939331076891960492503 +0.257569205760955821649105246252 -0.11601810157299041748046875 0.100984203815460207853682561563 +0.257569205760955821649105246252 0.11601810157299041748046875 0.100984203815460207853682561563 +0.257687997817993175164730246252 -0.687877607345581121300881477509 0.316893601417541526110710492503 +0.257687997817993175164730246252 0.687877607345581121300881477509 0.316893601417541526110710492503 +0.257721102237701393811164507497 -0.222101941704750033279580634371 -0.0821621514856815254868038778113 +0.257721102237701393811164507497 0.222101941704750033279580634371 -0.0821621514856815254868038778113 +0.257798457145690884662059261245 -0.101473753154277798738114313437 -0.213876244425773603952123380623 +0.257798457145690884662059261245 0.101473753154277798738114313437 -0.213876244425773603952123380623 +0.258007192611694302630809261245 -0.278526002168655362201121761245 0.464602804183959938733039507497 +0.258007192611694302630809261245 0.278526002168655362201121761245 0.464602804183959938733039507497 +0.258096992969512939453125 -0.1875160038471221923828125 -0.3849979937076568603515625 +0.258096992969512939453125 0.1875160038471221923828125 -0.3849979937076568603515625 +0.258178400993347156866519753748 -0.280247592926025412829460492503 -0.121676397323608409539730246252 +0.258178400993347156866519753748 0.280247592926025412829460492503 -0.121676397323608409539730246252 +0.258210012316703818591179242503 -0.557311481237411476818977007497 -0.657822597026824995580795985006 +0.258210012316703818591179242503 0.557311481237411476818977007497 -0.657822597026824995580795985006 +0.258286702632904041632144753748 -0.0924283504486083928863848768742 0.217359092831611616647435880623 +0.258286702632904041632144753748 0.0924283504486083928863848768742 0.217359092831611616647435880623 +0.258360791206359852179019753748 -0.221894788742065446340845369377 0.209791207313537619860710492503 +0.258360791206359852179019753748 0.221894788742065446340845369377 0.209791207313537619860710492503 +0.25836090743541717529296875 0 0.236113506555557239874332253748 +0.258372807502746604235710492503 -0.242295598983764653988615123126 0.185839605331420909539730246252 +0.258372807502746604235710492503 0.242295598983764653988615123126 0.185839605331420909539730246252 +0.258409202098846435546875 0 0.152396106719970697573884876874 +0.258467853069305419921875 -0.119482205808162697535657059689 0.348451647162437427862613503748 +0.258467853069305419921875 0.119482205808162697535657059689 0.348451647162437427862613503748 +0.258496803045272838250667746252 -0.14286629855632781982421875 -0.052617900073528289794921875 +0.258496803045272838250667746252 0.14286629855632781982421875 -0.052617900073528289794921875 +0.258541202545165993420539507497 -0.127596598863601667916967130623 0.0829188019037246648590411268742 +0.258541202545165993420539507497 0.127596598863601667916967130623 0.0829188019037246648590411268742 +0.258545345067977883068977007497 -0.16999815404415130615234375 0.163569696247577667236328125 +0.258545345067977883068977007497 0.16999815404415130615234375 0.163569696247577667236328125 +0.258586651086807228772102007497 -0.187873354554176308361945757497 0.142606098949909193551732755623 +0.258586651086807228772102007497 0.187873354554176308361945757497 0.142606098949909193551732755623 +0.258649197220802318231136496252 -0.233664742112159734555021373126 0.28460745513439178466796875 +0.258649197220802318231136496252 0.233664742112159734555021373126 0.28460745513439178466796875 +0.258675208687782265393195757497 -0.497894614934921209137286268742 0.4185545146465301513671875 +0.258675208687782265393195757497 0.497894614934921209137286268742 0.4185545146465301513671875 +0.259004850685596477166683371252 -0.295090253651142109259097878748 -0.518013614416122480932358485006 +0.259004850685596477166683371252 0.295090253651142109259097878748 -0.518013614416122480932358485006 +0.259037590026855502056690738755 -0.220741200447082536184595369377 -0.210173201560974132195980246252 +0.259037590026855502056690738755 0.220741200447082536184595369377 -0.210173201560974132195980246252 +0.259191003441810619012386496252 -0.408832195401191700323551003748 0.758733308315277077404914507497 +0.259191003441810619012386496252 0.408832195401191700323551003748 0.758733308315277077404914507497 +0.259538403153419527935596988755 -0.188563106954097753353849498126 -0.446747934818267855572315738755 +0.259538403153419527935596988755 0.188563106954097753353849498126 -0.446747934818267855572315738755 +0.259602688252925872802734375 0 0.913842028379440285412727007497 +0.259635007381439186779914507497 -0.0711680978536605862716513115629 0.132380998134613042660490123126 +0.259635007381439186779914507497 0.0711680978536605862716513115629 0.132380998134613042660490123126 +0.259735804796218883172542746252 -0.119203501939773554019197376874 -0.0912572979927062932770098768742 +0.259735804796218883172542746252 0.119203501939773554019197376874 -0.0912572979927062932770098768742 +0.259779596328735373766960492503 -0.304162001609802279400440738755 0 +0.259779596328735373766960492503 0.304162001609802279400440738755 0 +0.2597815990447998046875 -0.629144001007080122533920985006 0.420346403121948264391960492503 +0.2597815990447998046875 0.629144001007080122533920985006 0.420346403121948264391960492503 +0.260042703151702858654914507497 -0.0393600001931190476844868442186 0.144321003556251520327791126874 +0.260042703151702858654914507497 0.0393600001931190476844868442186 0.144321003556251520327791126874 +0.260059210658073414190738503748 -0.800374460220336869653579014994 -0.119455596059560770205720814374 +0.260059210658073414190738503748 0.800374460220336869653579014994 -0.119455596059560770205720814374 +0.26018173992633819580078125 -0.70203749835491180419921875 0.04414950124919414520263671875 +0.26018173992633819580078125 0.70203749835491180419921875 0.04414950124919414520263671875 +0.2603256404399871826171875 -0.189137400686740869693025501874 0.893844550848007179943977007497 +0.2603256404399871826171875 0.189137400686740869693025501874 0.893844550848007179943977007497 +0.2604509890079498291015625 -0.7013475000858306884765625 -0.052697248756885528564453125 +0.2604509890079498291015625 0.7013475000858306884765625 -0.052697248756885528564453125 +0.260510504245758056640625 -0.06676100194454193115234375 0.42151749134063720703125 +0.260510504245758056640625 0.06676100194454193115234375 0.42151749134063720703125 +0.26054799556732177734375 -0.456908798217773470806690738755 0.602784776687622092516960492503 +0.26054799556732177734375 0.456908798217773470806690738755 0.602784776687622092516960492503 +0.260604912042617764544871761245 -0.259425961971282925677684261245 -0.766343840956687949450554242503 +0.260604912042617764544871761245 0.259425961971282925677684261245 -0.766343840956687949450554242503 +0.260636310279369343145816628748 -0.189360656589269621408178068123 -0.89370678365230560302734375 +0.260636310279369343145816628748 0.189360656589269621408178068123 -0.89370678365230560302734375 +0.260724091529846158099559261245 -0.0463991500437259674072265625 0.228845044970512362381143134371 +0.260724091529846158099559261245 0.0463991500437259674072265625 0.228845044970512362381143134371 +0.260834394395351387707648882497 -0.802768027782440163342414507497 0.100146146863698951023913252811 +0.260834394395351387707648882497 0.802768027782440163342414507497 0.100146146863698951023913252811 +0.260912400484085094110042746252 -0.14006459712982177734375 -0.52183020114898681640625 +0.260912400484085094110042746252 0.14006459712982177734375 -0.52183020114898681640625 +0.2609741985797882080078125 -0.0538778990507125868369975307814 -0.137803199887275684698551003748 +0.2609741985797882080078125 0.0538778990507125868369975307814 -0.137803199887275684698551003748 +0.261055207252502474712940738755 -0.189665603637695329153345369377 -0.732036018371582053454460492503 +0.261055207252502474712940738755 0.189665603637695329153345369377 -0.732036018371582053454460492503 +0.261086413264274619372429242503 -0.152641350030899042300447376874 -0.333218255639076255114616742503 +0.261086413264274619372429242503 0.152641350030899042300447376874 -0.333218255639076255114616742503 +0.261113396286964449810596988755 -0.803633379936218306127670985006 0.309826791286468505859375 +0.261113396286964449810596988755 0.803633379936218306127670985006 0.309826791286468505859375 +0.261139494180679332391292746252 -0.130164903402328474557592130623 -0.0697367995977401650131710653113 +0.261139494180679332391292746252 0.130164903402328474557592130623 -0.0697367995977401650131710653113 +0.261221098899841297491519753748 -0.619330596923828080591079014994 -0.195430207252502430304019753748 +0.261221098899841297491519753748 0.619330596923828080591079014994 -0.195430207252502430304019753748 +0.2612495124340057373046875 -0.4263199865818023681640625 0 +0.2612495124340057373046875 0.4263199865818023681640625 0 +0.261399587988853487896534488755 -0.6843599975109100341796875 -0.522800999879837080541733485006 +0.261399587988853487896534488755 0.6843599975109100341796875 -0.522800999879837080541733485006 +0.261402297019958484991519753748 -0.33540165424346923828125 0.147222898900508880615234375 +0.261402297019958484991519753748 0.33540165424346923828125 0.147222898900508880615234375 +0.261428403854370106085269753748 -0.159309607744216902291967130623 0.516019213199615411902243522491 +0.261428403854370106085269753748 0.159309607744216902291967130623 0.516019213199615411902243522491 +0.2614721953868865966796875 -0.145561498403549177682592130623 0.0210749991238117218017578125 +0.2614721953868865966796875 0.145561498403549177682592130623 0.0210749991238117218017578125 +0.261552608013153053967414507497 -0.145871096849441522769197376874 -0.0176577005535364130184294850778 +0.261552608013153053967414507497 0.145871096849441522769197376874 -0.0176577005535364130184294850778 +0.261556005477905306744190738755 -0.388161611557006847039730246252 -0.648782396316528342516960492503 +0.261556005477905306744190738755 0.388161611557006847039730246252 -0.648782396316528342516960492503 +0.261731243133544955181690738755 -0.226891359686851507015958873126 -0.287257504463195811883480246252 +0.261731243133544955181690738755 0.226891359686851507015958873126 -0.287257504463195811883480246252 +0.2617450058460235595703125 -0.4219554960727691650390625 0.058674998581409454345703125 +0.2617450058460235595703125 0.4219554960727691650390625 0.058674998581409454345703125 +0.261825737357139598504573996252 -0.361357203125953707623096988755 0.0580373972654342693000550923443 +0.261825737357139598504573996252 0.361357203125953707623096988755 0.0580373972654342693000550923443 +0.2618427574634552001953125 -0.402467015385627735479801003748 -0.438131204247474703716846988755 +0.2618427574634552001953125 0.402467015385627735479801003748 -0.438131204247474703716846988755 +0.2619754970073699951171875 -0.4200884997844696044921875 -0.069960497319698333740234375 +0.2619754970073699951171875 0.4200884997844696044921875 -0.069960497319698333740234375 +0.262124991416931130139289507497 -0.425379610061645485608039507497 0.332178604602813731805355246252 +0.262124991416931130139289507497 0.425379610061645485608039507497 0.332178604602813731805355246252 +0.262180092930793751104801003748 0 0.594778606295585654528679242503 +0.2623201906681060791015625 -0.46955017745494842529296875 -0.658187305927276589123664507497 +0.2623201906681060791015625 0.46955017745494842529296875 -0.658187305927276589123664507497 +0.262338049709796905517578125 -0.441365924477577220574886496252 0.677403229475021295691306022491 +0.262338049709796905517578125 0.441365924477577220574886496252 0.677403229475021295691306022491 +0.262338301539421059338508257497 -0.133600604534149153268529630623 -0.189287000894546503237947376874 +0.262338301539421059338508257497 0.133600604534149153268529630623 -0.189287000894546503237947376874 +0.2623679935932159423828125 -0.2725515067577362060546875 -0.32692301273345947265625 +0.2623679935932159423828125 0.2725515067577362060546875 -0.32692301273345947265625 +0.262381005287170399054019753748 -0.208212208747863752877904630623 -0.101508049666881552952624190311 +0.262381005287170399054019753748 0.208212208747863752877904630623 -0.101508049666881552952624190311 +0.262397599220275890008480246252 -0.628567981719970747533920985006 -0.419583988189697276727230246252 +0.262397599220275890008480246252 0.628567981719970747533920985006 -0.419583988189697276727230246252 +0.262402391433715853619190738755 -0.290119194984436057360710492503 0.0835207998752593994140625 +0.262402391433715853619190738755 0.290119194984436057360710492503 0.0835207998752593994140625 +0.262458693981170665399105246252 -0.226301595568656893631143134371 0.04902064800262451171875 +0.262458693981170665399105246252 0.226301595568656893631143134371 0.04902064800262451171875 +0.262479150295257590563835492503 0 0.365519696474075339587272992503 +0.2625170052051544189453125 -0.3950555026531219482421875 0.1581639945507049560546875 +0.2625170052051544189453125 0.3950555026531219482421875 0.1581639945507049560546875 +0.26252400875091552734375 -0.94161701202392578125 -0.21080400049686431884765625 +0.26252400875091552734375 0.94161701202392578125 -0.21080400049686431884765625 +0.262565758824348460809261496252 -0.808107998967170670923110264994 0.424854241311550140380859375 +0.262565758824348460809261496252 0.808107998967170670923110264994 0.424854241311550140380859375 +0.26266445219516754150390625 -0.808397603034973100122329014994 0 +0.26266445219516754150390625 0.808397603034973100122329014994 0 +0.262740397453308127673210492503 -0.130211198329925531558259876874 0.27205240726470947265625 +0.262740397453308127673210492503 0.130211198329925531558259876874 0.27205240726470947265625 +0.262763088941574129986378238755 -0.360676351189613331182926003748 -0.0580373972654342693000550923443 +0.262763088941574129986378238755 0.360676351189613331182926003748 -0.0580373972654342693000550923443 +0.262788301706314064709602007497 -0.0869775027036666786850460653113 -0.115659901499748224429353626874 +0.262788301706314064709602007497 0.0869775027036666786850460653113 -0.115659901499748224429353626874 +0.262865006923675537109375 0 0.42532598972320556640625 +0.26286900043487548828125 -0.809011995792388916015625 -0.5257380008697509765625 +0.26286900043487548828125 0.809011995792388916015625 -0.5257380008697509765625 +0.262889993190765391961605246252 -0.474100792407989468646434261245 0.257132399082183826788394753748 +0.262889993190765391961605246252 0.474100792407989468646434261245 0.257132399082183826788394753748 +0.262950396537780795025440738755 -0.0929804027080535916427450615629 -0.2867259979248046875 +0.262950396537780795025440738755 0.0929804027080535916427450615629 -0.2867259979248046875 +0.262982848286628712042301003748 -0.55121688544750213623046875 -0.222486552596092235223323996252 +0.262982848286628712042301003748 0.55121688544750213623046875 -0.222486552596092235223323996252 +0.26317720115184783935546875 -0.369772693514823946880909488755 -0.310654306411743186266960492503 +0.26317720115184783935546875 0.369772693514823946880909488755 -0.310654306411743186266960492503 +0.263183197379112221447883257497 -0.627480691671371437756477007497 0.164324302971363050973607755623 +0.263183197379112221447883257497 0.627480691671371437756477007497 0.164324302971363050973607755623 +0.263274407386779818462940738755 -0.703473615646362349096420985006 -0.275339198112487804070980246252 +0.263274407386779818462940738755 0.703473615646362349096420985006 -0.275339198112487804070980246252 +0.2632864415645599365234375 -0.0770395480096340151687783759371 -0.217359447479248041323884876874 +0.2632864415645599365234375 0.0770395480096340151687783759371 -0.217359447479248041323884876874 +0.263438355922698930200454014994 -0.113701346516609180792301003748 0.2004299461841583251953125 +0.263438355922698930200454014994 0.113701346516609180792301003748 0.2004299461841583251953125 +0.263478597998619057385383257497 -0.162977851927280426025390625 -0.162840999662876129150390625 +0.263478597998619057385383257497 0.162977851927280426025390625 -0.162840999662876129150390625 +0.26353359222412109375 -0.264352393150329600945980246252 -0.143763196468353282586605246252 +0.26353359222412109375 0.264352393150329600945980246252 -0.143763196468353282586605246252 +0.26354439556598663330078125 -0.561049306392669588916533029987 -0.325219997763633694720653011245 +0.26354439556598663330078125 0.561049306392669588916533029987 -0.325219997763633694720653011245 +0.263558904826641127172592860006 -0.341129788756370566638054242503 0.341565403342247053686264735006 +0.263558904826641127172592860006 0.341129788756370566638054242503 0.341565403342247053686264735006 +0.263564360141754105981704014994 -0.226593491435050947702123380623 -0.0411008499562740270416583143742 +0.263564360141754105981704014994 0.226593491435050947702123380623 -0.0411008499562740270416583143742 +0.263584506511688243524105246252 -0.0331148989498615264892578125 -0.139379400014877308233707253748 +0.263584506511688243524105246252 0.0331148989498615264892578125 -0.139379400014877308233707253748 +0.263704800605773947985710492503 -0.158937597274780295641960492503 -0.255340003967285178454460492503 +0.263704800605773947985710492503 0.158937597274780295641960492503 -0.255340003967285178454460492503 +0.263705405592918384893863503748 -0.19159139692783355712890625 -0.619477587938308649206931022491 +0.263705405592918384893863503748 0.19159139692783355712890625 -0.619477587938308649206931022491 +0.2637248933315277099609375 -0.0840951025485992403885049384371 0.115659597516059864386051003748 +0.2637248933315277099609375 0.0840951025485992403885049384371 0.115659597516059864386051003748 +0.263735996186733268054069867503 -0.110201302915811552574076870314 0.469892483949661265985042746252 +0.263735996186733268054069867503 0.110201302915811552574076870314 0.469892483949661265985042746252 +0.263775604963302601202457253748 -0.463101589679717984271434261245 -0.275607007741928089483707253748 +0.263775604963302601202457253748 0.463101589679717984271434261245 -0.275607007741928089483707253748 +0.2639890015125274658203125 -0.678970992565155029296875 -0.685060977935791015625 +0.2639890015125274658203125 0.678970992565155029296875 -0.685060977935791015625 +0.2641369998455047607421875 -0.2855685055255889892578125 0.3141374886035919189453125 +0.2641369998455047607421875 0.2855685055255889892578125 0.3141374886035919189453125 +0.26442129909992218017578125 -0.129076348990201955624357310626 0.579586809873580910412727007497 +0.26442129909992218017578125 0.129076348990201955624357310626 0.579586809873580910412727007497 +0.264503708481788668560596988755 -0.364057651162147555279346988755 0 +0.264503708481788668560596988755 0.364057651162147555279346988755 0 +0.264676988124847412109375 -0.3913914859294891357421875 -0.16358099877834320068359375 +0.264676988124847412109375 0.3913914859294891357421875 -0.16358099877834320068359375 +0.264819002151489235608039507497 -0.0197270996868610382080078125 0.139576801657676691226228626874 +0.264819002151489235608039507497 0.0197270996868610382080078125 0.139576801657676691226228626874 +0.264842046797275576519581363755 -0.435956409573555025982471988755 0.205670846998691564389005748126 +0.264842046797275576519581363755 0.435956409573555025982471988755 0.205670846998691564389005748126 +0.264888253808021556512386496252 -0.220530752837657939569027121252 0.428602889180183466155682481258 +0.264888253808021556512386496252 0.220530752837657939569027121252 0.428602889180183466155682481258 +0.26493211090564727783203125 -0.2377341091632843017578125 0.8266157805919647216796875 +0.26493211090564727783203125 0.2377341091632843017578125 0.8266157805919647216796875 +0.264934194087982188836605246252 -0.0123744003474712364887277971093 -0.140202301740646351202457253748 +0.264934194087982188836605246252 0.0123744003474712364887277971093 -0.140202301740646351202457253748 +0.265022403001785256115852007497 -0.0938592016696929848373898153113 -0.530050814151763916015625 +0.265022403001785256115852007497 0.0938592016696929848373898153113 -0.530050814151763916015625 +0.2650811970233917236328125 -0.38844358921051025390625 -0.372616803646087624279914507497 +0.2650811970233917236328125 0.38844358921051025390625 -0.372616803646087624279914507497 +0.2650845050811767578125 -0.16706849634647369384765625 0.3896385133266448974609375 +0.2650845050811767578125 0.16706849634647369384765625 0.3896385133266448974609375 +0.265130805969238270147769753748 -0.291182804107666004522769753748 -0.0701291978359222384353799384371 +0.265130805969238270147769753748 0.291182804107666004522769753748 -0.0701291978359222384353799384371 +0.265133249759674061163394753748 -0.254029038548469532354801003748 0.260141390562057484014957253748 +0.265133249759674061163394753748 0.254029038548469532354801003748 0.260141390562057484014957253748 +0.265139096975326560290397992503 -0.334571859240531954693409488755 -0.1423480510711669921875 +0.265139096975326560290397992503 0.334571859240531954693409488755 -0.1423480510711669921875 +0.265147197246551502569644753748 -0.0598815031349658952186665317186 0.358623898029327425884815738755 +0.265147197246551502569644753748 0.0598815031349658952186665317186 0.358623898029327425884815738755 +0.265193998813629150390625 -0.94782197475433349609375 0.1769340038299560546875 +0.265193998813629150390625 0.94782197475433349609375 0.1769340038299560546875 +0.265311339497566189837840511245 -0.703071561455726579126235264994 -0.397241552174091350213558371252 +0.265311339497566189837840511245 0.703071561455726579126235264994 -0.397241552174091350213558371252 +0.2653630077838897705078125 -0.366874217987060546875 0.533840280771255448755141514994 +0.2653630077838897705078125 0.366874217987060546875 0.533840280771255448755141514994 +0.265394985675811767578125 -0.3861840069293975830078125 0.883418023586273193359375 +0.265394985675811767578125 0.3861840069293975830078125 0.883418023586273193359375 +0.265493094921112060546875 -0.133186197280883794613615123126 0.042129300534725189208984375 +0.265493094921112060546875 0.133186197280883794613615123126 0.042129300534725189208984375 +0.2655251920223236083984375 -0.291740405559539783819644753748 -0.452088010311126664575454014994 +0.2655251920223236083984375 0.291740405559539783819644753748 -0.452088010311126664575454014994 +0.265664756298065185546875 -0.56281615793704986572265625 0.187510691583156585693359375 +0.265664756298065185546875 0.56281615793704986572265625 0.187510691583156585693359375 +0.2658495008945465087890625 -0.193149259686470009533820757497 -0.120488196611404405067524692186 +0.2658495008945465087890625 0.193149259686470009533820757497 -0.120488196611404405067524692186 +0.265939496457576751708984375 -0.636976388096809342798110264994 0.496021735668182361944644753748 +0.265939496457576751708984375 0.636976388096809342798110264994 0.496021735668182361944644753748 +0.265958690643310513568309261245 -0.475234884023666370733707253748 -0.439792484045028631012286268742 +0.265958690643310513568309261245 0.475234884023666370733707253748 -0.439792484045028631012286268742 +0.266028892993927013055355246252 -0.13409189879894256591796875 -0.0353273995220661149452290317186 +0.266028892993927013055355246252 0.13409189879894256591796875 -0.0353273995220661149452290317186 +0.266052237153053261486945757497 -0.115130496770143503360017689374 -0.904687842726707436291633257497 +0.266052237153053261486945757497 0.115130496770143503360017689374 -0.904687842726707436291633257497 +0.266067606210708629266292746252 -0.0517589986324310316612162807814 0.12856529653072357177734375 +0.266067606210708629266292746252 0.0517589986324310316612162807814 0.12856529653072357177734375 +0.266112752258777618408203125 -0.5510917603969573974609375 -0.4335689842700958251953125 +0.266112752258777618408203125 0.5510917603969573974609375 -0.4335689842700958251953125 +0.266142439842224076684829014994 -0.227306458353996265753238503748 0 +0.266142439842224076684829014994 0.227306458353996265753238503748 0 +0.2661710083484649658203125 -0.819204986095428466796875 0.5079920291900634765625 +0.2661710083484649658203125 0.819204986095428466796875 0.5079920291900634765625 +0.266400003433227561266960492503 -0.127688002586364757195980246252 -0.743455982208252041942841970013 +0.266400003433227561266960492503 0.127688002586364757195980246252 -0.743455982208252041942841970013 +0.266452457010746046606186610006 -0.283863255381584189684929242503 -0.388490286469459544793636496252 +0.266452457010746046606186610006 0.283863255381584189684929242503 -0.388490286469459544793636496252 +0.266468150913715395855518863755 -0.259742595255374908447265625 0.532943469285965032433693977509 +0.266468150913715395855518863755 0.259742595255374908447265625 0.532943469285965032433693977509 +0.266471993923187266961605246252 -0.316038599610328707623096988755 0.177798150479793554135099498126 +0.266471993923187266961605246252 0.316038599610328707623096988755 0.177798150479793554135099498126 +0.266501197218894925189403011245 -0.578975617885589599609375 0.28941990435123443603515625 +0.266501197218894925189403011245 0.578975617885589599609375 0.28941990435123443603515625 +0.266509491205215442999332253748 -0.0966414034366607638260049384371 0.0981483042240142850021200615629 +0.266509491205215442999332253748 0.0966414034366607638260049384371 0.0981483042240142850021200615629 +0.26671040058135986328125 -0.193773996829986583367855246252 -0.226533198356628440173210492503 +0.26671040058135986328125 0.193773996829986583367855246252 -0.226533198356628440173210492503 +0.266722503304481550756577235006 -0.429110559821128889623764735006 -0.217309407889843014816122490629 +0.266722503304481550756577235006 0.429110559821128889623764735006 -0.217309407889843014816122490629 +0.266753697395324673724559261245 -0.0991805970668792752364950615629 -0.0948983967304229680816973768742 +0.266753697395324673724559261245 0.0991805970668792752364950615629 -0.0948983967304229680816973768742 +0.266918408870697010382144753748 -0.365744394063949540552016514994 -0.533840280771255448755141514994 +0.266918408870697010382144753748 0.365744394063949540552016514994 -0.533840280771255448755141514994 +0.266943609714508034436164507497 -0.134263847768306715524389005623 0.182248142361640913522435880623 +0.266943609714508034436164507497 0.134263847768306715524389005623 0.182248142361640913522435880623 +0.26698319613933563232421875 -0.821682876348495461193977007497 -0.252106189727783203125 +0.26698319613933563232421875 0.821682876348495461193977007497 -0.252106189727783203125 +0.267081505060195900647102007497 -0.05304110050201416015625 -0.219895908236503595523103626874 +0.267081505060195900647102007497 0.05304110050201416015625 -0.219895908236503595523103626874 +0.26720474660396575927734375 -0.50062425434589385986328125 0.490385234355926513671875 +0.26720474660396575927734375 0.50062425434589385986328125 0.490385234355926513671875 +0.267295193672180186883480246252 -0.717439985275268643505341970013 0.232018399238586442434595369377 +0.267295193672180186883480246252 0.717439985275268643505341970013 0.232018399238586442434595369377 +0.267296992242336273193359375 -0.256071746349334716796875 -0.6522877514362335205078125 +0.267296992242336273193359375 0.256071746349334716796875 -0.6522877514362335205078125 +0.267302405834198009149105246252 -0.136196100711822504214509876874 0 +0.267302405834198009149105246252 0.136196100711822504214509876874 0 +0.267382811009883869513004128748 -0.276697960495948802606136496252 0.757921212911605857165397992503 +0.267382811009883869513004128748 0.276697960495948802606136496252 0.757921212911605857165397992503 +0.267384791374206565173210492503 -0.0793344020843505942641726846887 0.286725211143493641241519753748 +0.267384791374206565173210492503 0.0793344020843505942641726846887 0.286725211143493641241519753748 +0.2674112021923065185546875 -0.524568790197372458727897992503 0.378574711084365800317641514994 +0.2674112021923065185546875 0.524568790197372458727897992503 0.378574711084365800317641514994 +0.267449699342250823974609375 -0.0386422013863921137710732978121 -0.910756450891494706567641514994 +0.267449699342250823974609375 0.0386422013863921137710732978121 -0.910756450891494706567641514994 +0.267495150864124286993472878748 -0.404487192630767822265625 0.432823953032493602410823996252 +0.267495150864124286993472878748 0.404487192630767822265625 0.432823953032493602410823996252 +0.267498600482940662725894753748 -0.047074802219867706298828125 -0.535003209114074729235710492503 +0.267498600482940662725894753748 0.047074802219867706298828125 -0.535003209114074729235710492503 +0.26750719547271728515625 -0.0266416013240814222862162807814 0.296192789077758811266960492503 +0.26750719547271728515625 0.0266416013240814222862162807814 0.296192789077758811266960492503 +0.26756250858306884765625 -0.06603419780731201171875 -0.118532100319862360171541126874 +0.26756250858306884765625 0.06603419780731201171875 -0.118532100319862360171541126874 +0.267592000961303699835269753748 -0.247068810462951676809595369377 -0.165382802486419677734375 +0.267592000961303699835269753748 0.247068810462951676809595369377 -0.165382802486419677734375 +0.267596536874771140368522992503 -0.267700499296188387798878238755 -0.243369457125663768426448996252 +0.267596536874771140368522992503 0.267700499296188387798878238755 -0.243369457125663768426448996252 +0.267755395174026467053352007497 -0.119929504394531247224442438437 0.062640599906444549560546875 +0.267755395174026467053352007497 0.119929504394531247224442438437 0.062640599906444549560546875 +0.267878794670104947162059261245 -0.646715319156646706311164507497 0 +0.267878794670104947162059261245 0.646715319156646706311164507497 0 +0.267896758019924186022819867503 -0.466414844989776644634815738755 -0.114841648936271675807141434689 +0.267896758019924186022819867503 0.466414844989776644634815738755 -0.114841648936271675807141434689 +0.267949497699737526623664507497 -0.108476704359054557103014815311 0.0802236020565032931228799384371 +0.267949497699737526623664507497 0.108476704359054557103014815311 0.0802236020565032931228799384371 +0.268024510145187411236378238755 -0.0599093981087207780311665317186 0.857072693109512395714943977509 +0.268024510145187411236378238755 0.0599093981087207780311665317186 0.857072693109512395714943977509 +0.26804925501346588134765625 -0.212616598606109596936164507497 0.0737814001739025004944494412484 +0.26804925501346588134765625 0.212616598606109596936164507497 0.0737814001739025004944494412484 +0.268096661567687966076789507497 -0.825104439258575350635283029987 -0.387074659764766682013004128748 +0.268096661567687966076789507497 0.825104439258575350635283029987 -0.387074659764766682013004128748 +0.268101054430007923468082253748 -0.1772021949291229248046875 -0.138640950620174396856754128748 +0.268101054430007923468082253748 0.1772021949291229248046875 -0.138640950620174396856754128748 +0.268116095662116971087840511245 -0.641370779275894142834602007497 0.0822016999125480540833166287484 +0.268116095662116971087840511245 0.641370779275894142834602007497 0.0822016999125480540833166287484 +0.2681272029876708984375 -0.470435363054275523797542746252 0.0964276470243930899917117471887 +0.2681272029876708984375 0.470435363054275523797542746252 0.0964276470243930899917117471887 +0.26820884644985198974609375 -0.0694347500801086314758947537484 0.213875555992126459292634876874 +0.26820884644985198974609375 0.0694347500801086314758947537484 0.213875555992126459292634876874 +0.268238255381584189684929242503 -0.149553000926971435546875 0.32891084253787994384765625 +0.268238255381584189684929242503 0.149553000926971435546875 0.32891084253787994384765625 +0.268244895339012134893863503748 -0.639087390899658158716079014994 -0.0980412960052490234375 +0.268244895339012134893863503748 0.639087390899658158716079014994 -0.0980412960052490234375 +0.268251204490661643298210492503 -0.655363988876342840050881477509 0.37220799922943115234375 +0.268251204490661643298210492503 0.655363988876342840050881477509 0.37220799922943115234375 +0.268326008319854703021434261245 0 -0.536657416820526145251335492503 +0.268326598405838001593082253748 -0.315436184406280517578125 0.434167206287384033203125 +0.268326598405838001593082253748 0.315436184406280517578125 0.434167206287384033203125 +0.268326807022094715460269753748 -0.0649828016757965087890625 -0.289444398880004893914730246252 +0.268326807022094715460269753748 0.0649828016757965087890625 -0.289444398880004893914730246252 +0.268327492475509632452457253748 0 0.13416449725627899169921875 +0.268327999114990223272769753748 -0.275275993347167957647769753748 0.110558402538299571649105246252 +0.268327999114990223272769753748 0.275275993347167957647769753748 0.110558402538299571649105246252 +0.268329602479934703485042746252 -0.510388791561126708984375 -0.165838193893432600534154630623 +0.268329602479934703485042746252 0.510388791561126708984375 -0.165838193893432600534154630623 +0.268418839573860146252570757497 -0.0231146994978189447567107350778 0.223421105742454523257478626874 +0.268418839573860146252570757497 0.0231146994978189447567107350778 0.223421105742454523257478626874 +0.26847350597381591796875 -0.15382699668407440185546875 -0.39275848865509033203125 +0.26847350597381591796875 0.15382699668407440185546875 -0.39275848865509033203125 +0.268559847772121440545589621252 -0.248740701377391820736661998126 -0.537125545740127607885483485006 +0.268559847772121440545589621252 0.248740701377391820736661998126 -0.537125545740127607885483485006 +0.268583607673645030633480246252 -0.154473996162414556332365123126 0.252983593940734885485710492503 +0.268583607673645030633480246252 0.154473996162414556332365123126 0.252983593940734885485710492503 +0.2687120139598846435546875 -0.9606540203094482421875 -0.0702629983425140380859375 +0.2687120139598846435546875 0.9606540203094482421875 -0.0702629983425140380859375 +0.268737307190895113873096988755 -0.195246899127960199527009876874 -0.303576761484146140368522992503 +0.268737307190895113873096988755 0.195246899127960199527009876874 -0.303576761484146140368522992503 +0.268794637918472301141292746252 -0.601035839319229103772102007497 -0.53759185969829559326171875 +0.268794637918472301141292746252 0.601035839319229103772102007497 -0.53759185969829559326171875 +0.268846195936203014031917746252 -0.446834385395050048828125 0.2967503964900970458984375 +0.268846195936203014031917746252 0.446834385395050048828125 0.2967503964900970458984375 +0.268961551785469099584702235006 -0.03670754842460155487060546875 0.478343236446380659643295985006 +0.268961551785469099584702235006 0.03670754842460155487060546875 0.478343236446380659643295985006 +0.268995308876037564349559261245 -0.110553896427154532688952315311 -0.0736158013343811007400674384371 +0.268995308876037564349559261245 0.110553896427154532688952315311 -0.0736158013343811007400674384371 +0.2691250145435333251953125 -0.3747169971466064453125 0.19276650249958038330078125 +0.2691250145435333251953125 0.3747169971466064453125 0.19276650249958038330078125 +0.26914680004119873046875 -0.121628701686859130859375 -0.0525968983769416822959819057814 +0.26914680004119873046875 0.121628701686859130859375 -0.0525968983769416822959819057814 +0.26919494569301605224609375 -0.29547764360904693603515625 0.206705255806446080990568248126 +0.26919494569301605224609375 0.29547764360904693603515625 0.206705255806446080990568248126 +0.269509905576705954821647992503 -0.478348743915557872430355246252 0.0323553999885916737655477959379 +0.269509905576705954821647992503 0.478348743915557872430355246252 0.0323553999885916737655477959379 +0.2695105075836181640625 -0.138089703023433679751619251874 -0.631106692552566461706931022491 +0.2695105075836181640625 0.138089703023433679751619251874 -0.631106692552566461706931022491 +0.269511008262634244037059261245 -0.517600786685943559106704014994 0.13947419822216033935546875 +0.269511008262634244037059261245 0.517600786685943559106704014994 0.13947419822216033935546875 +0.269540011882781982421875 -0.961188018321990966796875 0.058866001665592193603515625 +0.269540011882781982421875 0.961188018321990966796875 0.058866001665592193603515625 +0.269556695222854580951121761245 -0.110870204865932450721821567186 -0.1937704980373382568359375 +0.269556695222854580951121761245 0.110870204865932450721821567186 -0.1937704980373382568359375 +0.269575241208076465948551003748 -0.0287843495607376063938342980464 -0.221360999345779407843082253748 +0.269575241208076465948551003748 0.0287843495607376063938342980464 -0.221360999345779407843082253748 +0.269578206539154041632144753748 -0.0798420041799545315841513115629 0.530050206184387140417868522491 +0.269578206539154041632144753748 0.0798420041799545315841513115629 0.530050206184387140417868522491 +0.269601009786128997802734375 -0.63013051450252532958984375 -0.3045502603054046630859375 +0.269601009786128997802734375 0.63013051450252532958984375 -0.3045502603054046630859375 +0.2696335017681121826171875 -0.3172869980335235595703125 -0.2768155038356781005859375 +0.2696335017681121826171875 0.3172869980335235595703125 -0.2768155038356781005859375 +0.2696368396282196044921875 -0.121779893338680264558426813437 -0.339066007733345053942741742503 +0.2696368396282196044921875 0.121779893338680264558426813437 -0.339066007733345053942741742503 +0.269764804840087912829460492503 -0.294004011154174793585269753748 0.0280791997909545926193075615629 +0.269764804840087912829460492503 0.294004011154174793585269753748 0.0280791997909545926193075615629 +0.269815501570701610223323996252 -0.638068503141403176037727007497 0.574515920877456731652443977509 +0.269815501570701610223323996252 0.638068503141403176037727007497 0.574515920877456731652443977509 +0.269848155975341841283920985006 -0.477693715691566489489616742503 -0.0386088997125625665862713731258 +0.269848155975341841283920985006 0.477693715691566489489616742503 -0.0386088997125625665862713731258 +0.270000994205474853515625 -0.615451991558074951171875 0.74048602581024169921875 +0.270000994205474853515625 0.615451991558074951171875 0.74048602581024169921875 +0.270079207420349132195980246252 -0.0649119973182678278167401231258 -0.750228786468505881579460492503 +0.270079207420349132195980246252 0.0649119973182678278167401231258 -0.750228786468505881579460492503 +0.2700827419757843017578125 -0.213823047280311567819310880623 -0.0619269013404846122017310960928 +0.2700827419757843017578125 0.213823047280311567819310880623 -0.0619269013404846122017310960928 +0.270168006420135498046875 -0.44395101070404052734375 -0.854350984096527099609375 +0.270168006420135498046875 0.44395101070404052734375 -0.854350984096527099609375 +0.270197606086730990337940738755 -0.228819990158081076891960492503 -0.186103999614715576171875 +0.270197606086730990337940738755 0.228819990158081076891960492503 -0.186103999614715576171875 +0.2701978981494903564453125 -0.0932785034179687416733273153113 0.638977491855621249072783029987 +0.2701978981494903564453125 0.0932785034179687416733273153113 0.638977491855621249072783029987 +0.270235347747802723272769753748 -0.273069906234741199835269753748 0.234319496154785172903345369377 +0.270235347747802723272769753748 0.273069906234741199835269753748 0.234319496154785172903345369377 +0.270290708541870150494190738755 -0.8318745195865631103515625 0.211963498592376703433259876874 +0.270290708541870150494190738755 0.8318745195865631103515625 0.211963498592376703433259876874 +0.270293998718261707647769753748 -0.293917202949523947985710492503 -0.0235311999917030348350444057814 +0.270293998718261707647769753748 0.293917202949523947985710492503 -0.0235311999917030348350444057814 +0.2703187465667724609375 -0.3456585109233856201171875 0.60823349654674530029296875 +0.2703187465667724609375 0.3456585109233856201171875 0.60823349654674530029296875 +0.270350302755832716528061610006 -0.364561447501182578356804242503 0.310653749108314558569077235006 +0.270350302755832716528061610006 0.364561447501182578356804242503 0.310653749108314558569077235006 +0.270395395159721385613948996252 -0.151078943908214580194027121252 -0.454490289092063959319744981258 +0.270395395159721385613948996252 0.151078943908214580194027121252 -0.454490289092063959319744981258 +0.270491546392440773693977007497 0 -0.222113499045372003726228626874 +0.2707765102386474609375 -0.3077259957790374755859375 0.2863295078277587890625 +0.2707765102386474609375 0.3077259957790374755859375 0.2863295078277587890625 +0.270788694918155659063785378748 -0.575093355774879522179787727509 -0.1357999481260776519775390625 +0.270788694918155659063785378748 0.575093355774879522179787727509 -0.1357999481260776519775390625 +0.270796501636505093646434261245 -0.0639062985777854863922442518742 0.112183499336242678556807561563 +0.270796501636505093646434261245 0.0639062985777854863922442518742 0.112183499336242678556807561563 +0.2709614932537078857421875 -0.0454640999436378492881694057814 -0.120469200611114490850894753748 +0.2709614932537078857421875 0.0454640999436378492881694057814 -0.120469200611114490850894753748 +0.270972800254821788445980246252 0 -0.752711200714111350329460492503 +0.270990395545959494860710492503 -0.315306401252746615337940738755 0.683480787277221724096420985006 +0.270990395545959494860710492503 0.315306401252746615337940738755 0.683480787277221724096420985006 +0.2710084021091461181640625 -0.353154909610748302117855246252 -0.83924712240695953369140625 +0.2710084021091461181640625 0.353154909610748302117855246252 -0.83924712240695953369140625 +0.271014797687530506475894753748 -0.232637292146682717053352007497 0.602022415399551369397102007497 +0.271014797687530506475894753748 0.232637292146682717053352007497 0.602022415399551369397102007497 +0.271034789085388194695980246252 -0.03260000050067901611328125 -0.29236519336700439453125 +0.271034789085388194695980246252 0.03260000050067901611328125 -0.29236519336700439453125 +0.271090111136436440197883257497 -0.629696083068847611841079014994 0.657642269134521506579460492503 +0.271090111136436440197883257497 0.629696083068847611841079014994 0.657642269134521506579460492503 +0.27110850811004638671875 -0.2381094992160797119140625 -0.34612751007080078125 +0.27110850811004638671875 0.2381094992160797119140625 -0.34612751007080078125 +0.271162448823452029156300113755 -0.579632294178009099816506477509 0.1140054501593112945556640625 +0.271162448823452029156300113755 0.579632294178009099816506477509 0.1140054501593112945556640625 +0.2711802423000335693359375 -0.412381196022033713610710492503 0.242699594795703910143913617503 +0.2711802423000335693359375 0.412381196022033713610710492503 0.242699594795703910143913617503 +0.271282804012298595086605246252 -0.0319479010999202742149272182814 0.124036198854446402806139815311 +0.271282804012298595086605246252 0.0319479010999202742149272182814 0.124036198854446402806139815311 +0.271297597885131858141960492503 0 0.752594423294067449425881477509 +0.27132301032543182373046875 -0.347658759355545077252003238755 0.0895382992923259707351846259371 +0.27132301032543182373046875 0.347658759355545077252003238755 0.0895382992923259707351846259371 +0.271349988877773284912109375 -0.197147257626056671142578125 0.67082177102565765380859375 +0.271349988877773284912109375 0.197147257626056671142578125 0.67082177102565765380859375 +0.2713530063629150390625 -0.44083423912525177001953125 -0.54270900785923004150390625 +0.2713530063629150390625 0.44083423912525177001953125 -0.54270900785923004150390625 +0.271494302153587330206363503748 -0.149496203660964943615852007497 0.162609300017356850354133257497 +0.271494302153587330206363503748 0.149496203660964943615852007497 0.162609300017356850354133257497 +0.271690244972705829962222878748 -0.458400157094001781121761496252 -0.372228360176086459087940738755 +0.271690244972705829962222878748 0.458400157094001781121761496252 -0.372228360176086459087940738755 +0.271820494532585110736278011245 -0.197488206624984730108707253748 0.0980412960052490234375 +0.271820494532585110736278011245 0.197488206624984730108707253748 0.0980412960052490234375 +0.271939206123352039679019753748 0 -0.293341207504272449835269753748 +0.271942806243896495477230246252 -0.436771810054779052734375 -0.308670008182525601458934261245 +0.271942806243896495477230246252 0.436771810054779052734375 -0.308670008182525601458934261245 +0.272052001953125011102230246252 -0.519553613662719793175881477509 -0.544106388092041037829460492503 +0.272052001953125011102230246252 0.519553613662719793175881477509 -0.544106388092041037829460492503 +0.272232007980346690789730246252 -0.132240402698516862356470369377 -0.261538410186767600329460492503 +0.272232007980346690789730246252 0.132240402698516862356470369377 -0.261538410186767600329460492503 +0.272232896089553810803352007497 -0.124280700087547296694978626874 0.0210593998432159409950337192186 +0.272232896089553810803352007497 0.124280700087547296694978626874 0.0210593998432159409950337192186 +0.27227385342121124267578125 -0.316306793689727805407585492503 -0.168276147544383997134431751874 +0.27227385342121124267578125 0.316306793689727805407585492503 -0.168276147544383997134431751874 +0.272293800115585293841746761245 -0.124677899479866016729801003748 -0.0176483999937772743915598283593 +0.272293800115585293841746761245 0.124677899479866016729801003748 -0.0176483999937772743915598283593 +0.272394597530364990234375 -0.534603595733642578125 0 +0.272394597530364990234375 0.534603595733642578125 0 +0.2724156081676483154296875 -0.0784640997648239080231036268742 -0.0981483042240142850021200615629 +0.2724156081676483154296875 0.0784640997648239080231036268742 -0.0981483042240142850021200615629 +0.27241574227809906005859375 -0.0499530024826526641845703125 0.6969892680644989013671875 +0.27241574227809906005859375 0.0499530024826526641845703125 0.6969892680644989013671875 +0.272433701157569874151676003748 -0.141172154247760750500617632497 -0.168375547230243671759097878748 +0.272433701157569874151676003748 0.141172154247760750500617632497 -0.168375547230243671759097878748 +0.272555013000965129510433371252 -0.588273230195045404578024772491 -0.694368296861648581774772992503 +0.272555013000965129510433371252 0.588273230195045404578024772491 -0.694368296861648581774772992503 +0.272599601745605490954460492503 -0.258735203742980979235710492503 0.136914396286010736636384876874 +0.272599601745605490954460492503 0.258735203742980979235710492503 0.136914396286010736636384876874 +0.272656393051147472039730246252 -0.2775115966796875 -0.0929827988147735595703125 +0.272656393051147472039730246252 0.2775115966796875 -0.0929827988147735595703125 +0.272693844139575980456413617503 -0.588790795207023598401008257497 0.0382583511993289035468812642193 +0.272693844139575980456413617503 0.588790795207023598401008257497 0.0382583511993289035468812642193 +0.272695305943489063604801003748 -0.112872347980737683381669000937 0.797118085622787408972556022491 +0.272695305943489063604801003748 0.112872347980737683381669000937 0.797118085622787408972556022491 +0.272770404815673828125 -0.177784395217895518914730246252 0.232355189323425304070980246252 +0.272770404815673828125 0.177784395217895518914730246252 0.232355189323425304070980246252 +0.272806799411773659436164507497 -0.529702198505401566919204014994 0.070655398070812225341796875 +0.272806799411773659436164507497 0.529702198505401566919204014994 0.070655398070812225341796875 +0.272868800163269031866519753748 -0.732872819900512784130341970013 -0.168643200397491477282585492503 +0.272868800163269031866519753748 0.732872819900512784130341970013 -0.168643200397491477282585492503 +0.272919988632202181744190738755 -0.496188020706176791119190738755 0.565076780319213933800881477509 +0.272919988632202181744190738755 0.496188020706176791119190738755 0.565076780319213933800881477509 +0.272947359085082996710269753748 -0.588145336508750893322883257497 -0.04566249810159206390380859375 +0.272947359085082996710269753748 0.588145336508750893322883257497 -0.04566249810159206390380859375 +0.273005998134613014904914507497 -0.527605783939361527856704014994 -0.0842592000961303738693075615629 +0.273005998134613014904914507497 0.527605783939361527856704014994 -0.0842592000961303738693075615629 +0.273040795326232876849559261245 -0.0246722996234893798828125 -0.12181949615478515625 +0.273040795326232876849559261245 0.0246722996234893798828125 -0.12181949615478515625 +0.2731755077838897705078125 -0.4081160128116607666015625 0.093895502388477325439453125 +0.2731755077838897705078125 0.4081160128116607666015625 0.093895502388477325439453125 +0.2732140123844146728515625 -0.371746003627777099609375 -0.1927669942378997802734375 +0.2732140123844146728515625 0.371746003627777099609375 -0.1927669942378997802734375 +0.2732659876346588134765625 0 0.96193897724151611328125 +0.2733538448810577392578125 -0.3473275601863861083984375 -0.0845059521496295956710653740629 +0.2733538448810577392578125 0.3473275601863861083984375 -0.0845059521496295956710653740629 +0.273422104120254472192641514994 -0.083353199064731597900390625 -0.638977491855621249072783029987 +0.273422104120254472192641514994 0.083353199064731597900390625 -0.638977491855621249072783029987 +0.273590503633022286145148882497 -0.431545095145702328753856136245 0.800885158777236871863181022491 +0.273590503633022286145148882497 0.431545095145702328753856136245 0.800885158777236871863181022491 +0.27371819317340850830078125 -0.216733995079994190557926003748 0.024592049419879913330078125 +0.27371819317340850830078125 0.216733995079994190557926003748 0.024592049419879913330078125 +0.273748803138732899054019753748 -0.158668005466461203845085492503 0.7347695827484130859375 +0.273748803138732899054019753748 0.158668005466461203845085492503 0.7347695827484130859375 +0.273793497681617703509715511245 -0.730869957804679892809929242503 0.336699451506137836798160378748 +0.273793497681617703509715511245 0.730869957804679892809929242503 0.336699451506137836798160378748 +0.273803246021270707544204014994 -0.0919306546449661227127236884371 0.197688040137290937936498380623 +0.273803246021270707544204014994 0.0919306546449661227127236884371 0.197688040137290937936498380623 +0.273969000577926613537727007497 0 -0.122233799099922171849108565311 +0.27402698993682861328125 -0.1990920007228851318359375 0.94088900089263916015625 +0.27402698993682861328125 0.1990920007228851318359375 0.94088900089263916015625 +0.274053597450256369860710492503 -0.7381455898284912109375 0.14154720306396484375 +0.274053597450256369860710492503 0.7381455898284912109375 0.14154720306396484375 +0.274062952399253823010383257497 -0.216714406013488763980134876874 -0.0206031005829572649856729071871 +0.274062952399253823010383257497 0.216714406013488763980134876874 -0.0206031005829572649856729071871 +0.274067854881286598889289507497 0 0.217685306072235101870759876874 +0.27408599853515625 -0.3519900143146514892578125 0.22578750550746917724609375 +0.27408599853515625 0.3519900143146514892578125 0.22578750550746917724609375 +0.274086755514144853052016514994 -0.181288799643516518322883257497 0.120460899174213403872713001874 +0.274086755514144853052016514994 0.181288799643516518322883257497 0.120460899174213403872713001874 +0.274088507890701271740852007497 -0.5310529172420501708984375 -0.364497703313827470239516514994 +0.274088507890701271740852007497 0.5310529172420501708984375 -0.364497703313827470239516514994 +0.274105793237686135022102007497 -0.0765530973672866738022335653113 0.0948981016874313326736611884371 +0.274105793237686135022102007497 0.0765530973672866738022335653113 0.0948981016874313326736611884371 +0.27422249317169189453125 -0.406084001064300537109375 -0.09948749840259552001953125 +0.27422249317169189453125 0.406084001064300537109375 -0.09948749840259552001953125 +0.2743540108203887939453125 -0.19932700693607330322265625 -0.940743982791900634765625 +0.2743540108203887939453125 0.19932700693607330322265625 -0.940743982791900634765625 +0.274426388740539539679019753748 -0.331413602828979525494190738755 -0.674429607391357488488381477509 +0.274426388740539539679019753748 0.331413602828979525494190738755 -0.674429607391357488488381477509 +0.27462995052337646484375 -0.163949450850486733166633257497 0.142123100161552412545873380623 +0.27462995052337646484375 0.163949450850486733166633257497 0.142123100161552412545873380623 +0.274716742336750030517578125 -0.64869676530361175537109375 0.25733850896358489990234375 +0.274716742336750030517578125 0.64869676530361175537109375 0.25733850896358489990234375 +0.274844491481780972552684261245 -0.548688000440597511975227007497 0.336751094460487343518195757497 +0.274844491481780972552684261245 0.548688000440597511975227007497 0.336751094460487343518195757497 +0.27485048770904541015625 -0.100183002650737762451171875 0.40548801422119140625 +0.27485048770904541015625 0.100183002650737762451171875 0.40548801422119140625 +0.274998344480991363525390625 -0.109023196250200279933117997189 -0.463670355081558238641292746252 +0.274998344480991363525390625 0.109023196250200279933117997189 -0.463670355081558238641292746252 +0.27500450611114501953125 -0.19980199635028839111328125 0.366676509380340576171875 +0.27500450611114501953125 0.19980199635028839111328125 0.366676509380340576171875 +0.275073137879371654168636496252 -0.406385102868080161364616742503 -0.248366256058216106072933371252 +0.275073137879371654168636496252 0.406385102868080161364616742503 -0.248366256058216106072933371252 +0.275106003880500826763721988755 -0.527907884120941139904914507497 -0.261017240583896636962890625 +0.275106003880500826763721988755 0.527907884120941139904914507497 -0.261017240583896636962890625 +0.275115591287612926141292746252 -0.2493546009063720703125 -0.471310186386108387335269753748 +0.275115591287612926141292746252 0.2493546009063720703125 -0.471310186386108387335269753748 +0.27515070140361785888671875 -0.255315501987934123651058371252 0.402002698183059725689503238755 +0.27515070140361785888671875 0.255315501987934123651058371252 0.402002698183059725689503238755 +0.27518999576568603515625 -0.240599608421325689144865123126 0.162426400184631364309595369377 +0.27518999576568603515625 0.240599608421325689144865123126 0.162426400184631364309595369377 +0.275190603733062755242855246252 -0.0121920000761747363698939139454 0.118834197521209716796875 +0.275190603733062755242855246252 0.0121920000761747363698939139454 0.118834197521209716796875 +0.275191691517829850610610264994 -0.199936798214912392346320757497 -0.0824302494525909340561398153113 +0.275191691517829850610610264994 0.199936798214912392346320757497 -0.0824302494525909340561398153113 +0.275275611877441428454460492503 -0.199998795986175537109375 0.210294389724731467516960492503 +0.275275611877441428454460492503 0.199998795986175537109375 0.210294389724731467516960492503 +0.275318992137908946649105246252 -0.111523202061653128880358565311 0.0419762983918189960808042826557 +0.275318992137908946649105246252 0.111523202061653128880358565311 0.0419762983918189960808042826557 +0.275356811285018932000667746252 -0.847455310821533247533920985006 -0.126482395827770238705411998126 +0.275356811285018932000667746252 0.847455310821533247533920985006 -0.126482395827770238705411998126 +0.2753891050815582275390625 -0.0284718006849288933490793596093 -0.6429233849048614501953125 +0.2753891050815582275390625 0.0284718006849288933490793596093 -0.6429233849048614501953125 +0.275472307205200162005809261245 -0.09037649631500244140625 -0.07711739838123321533203125 +0.275472307205200162005809261245 0.09037649631500244140625 -0.07711739838123321533203125 +0.275546944141387917248664507497 -0.0865623481571674291412676893742 -0.197688394784927362612947376874 +0.275546944141387917248664507497 0.0865623481571674291412676893742 -0.197688394784927362612947376874 +0.275619696080684650763004128748 -0.848279678821563631885283029987 0.3270393908023834228515625 +0.275619696080684650763004128748 0.848279678821563631885283029987 0.3270393908023834228515625 +0.275696995854377735479801003748 -0.177359850704669946841463001874 0.30827701091766357421875 +0.275696995854377735479801003748 0.177359850704669946841463001874 0.30827701091766357421875 +0.275742357969284090923878238755 -0.359687903523445151598991742503 -0.465930405259132374151676003748 +0.275742357969284090923878238755 0.359687903523445151598991742503 -0.465930405259132374151676003748 +0.275755146145820639880241742503 -0.386123648285865816998096988755 0.278149846196174665990952235006 +0.275755146145820639880241742503 0.386123648285865816998096988755 0.278149846196174665990952235006 +0.275866198539733875616519753748 -0.112510201334953305329911188437 -0.035204999148845672607421875 +0.275866198539733875616519753748 0.112510201334953305329911188437 -0.035204999148845672607421875 +0.275905609130859375 0 0.28961360454559326171875 +0.275921787321567524298160378748 -0.72237999737262725830078125 -0.551845499873161338122429242503 +0.275921787321567524298160378748 0.72237999737262725830078125 -0.551845499873161338122429242503 +0.275934612751007113384815738755 -0.274686312675476107525440738755 -0.811422890424728371350227007497 +0.275934612751007113384815738755 0.274686312675476107525440738755 -0.811422890424728371350227007497 +0.275938796997070301397769753748 -0.10565960407257080078125 0.269618010520935091900440738755 +0.275938796997070301397769753748 0.10565960407257080078125 0.269618010520935091900440738755 +0.275940603017806984631477007497 -0.200482195615768438168302623126 0.493622982501983609271434261245 +0.275940603017806984631477007497 0.200482195615768438168302623126 0.493622982501983609271434261245 +0.275984394550323475225894753748 -0.0888006001710891640366085653113 0.07711739838123321533203125 +0.275984394550323475225894753748 0.0888006001710891640366085653113 0.07711739838123321533203125 +0.27601794898509979248046875 -0.668465501070022560803352007497 0.446618053317069996221988503748 +0.27601794898509979248046875 0.668465501070022560803352007497 0.446618053317069996221988503748 +0.276042255759239241186264735006 -0.245834049582481395379573996252 -0.407266756892204317974659488755 +0.276042255759239241186264735006 0.245834049582481395379573996252 -0.407266756892204317974659488755 +0.276083993911743152960269753748 -0.2209804058074951171875 0.186936795711517333984375 +0.276083993911743152960269753748 0.2209804058074951171875 0.186936795711517333984375 +0.2761349976062774658203125 -0.328001499176025390625 0.2572250068187713623046875 +0.2761349976062774658203125 0.328001499176025390625 0.2572250068187713623046875 +0.276177594065666220934929242503 -0.849989676475524924548210492503 0.106037096679210671168469559689 +0.276177594065666220934929242503 0.849989676475524924548210492503 0.106037096679210671168469559689 +0.276214247941970858502003238755 -0.540027165412902854235710492503 0.233615194261074077264339621252 +0.276214247941970858502003238755 0.540027165412902854235710492503 0.233615194261074077264339621252 +0.276324892044067349505809261245 -0.100406402349472040347322376874 0.0596921995282173115104917826557 +0.276324892044067349505809261245 0.100406402349472040347322376874 0.0596921995282173115104917826557 +0.276385009288787841796875 -0.850639998912811279296875 0.4472149908542633056640625 +0.276385009288787841796875 0.850639998912811279296875 0.4472149908542633056640625 +0.276439493894577004162727007497 -0.0442236006259918226768412807814 0.107821798324584952610827315311 +0.276439493894577004162727007497 0.0442236006259918226768412807814 0.107821798324584952610827315311 +0.276459956169128440173210492503 -0.200857158005237595999048494377 -0.552925103902816794665397992503 +0.276459956169128440173210492503 0.200857158005237595999048494377 -0.552925103902816794665397992503 +0.2764619886875152587890625 -0.353654542565345786364616742503 0.0315796483308076886276083428129 +0.2764619886875152587890625 0.353654542565345786364616742503 0.0315796483308076886276083428129 +0.276533406972885142938167746252 -0.101761204004287716951004938437 -0.0563373014330863924881143134371 +0.276533406972885142938167746252 0.101761204004287716951004938437 -0.0563373014330863924881143134371 +0.276560707390308413433643863755 -0.43387435376644134521484375 0.397199398279190096783253238755 +0.276560707390308413433643863755 0.43387435376644134521484375 0.397199398279190096783253238755 +0.276572102308273282122996761245 -0.0575331017374992315094317518742 -0.100984203815460207853682561563 +0.276572102308273282122996761245 0.0575331017374992315094317518742 -0.100984203815460207853682561563 +0.276635107398033097680922764994 -0.402117806673049915655582253748 0.501771205663681052477897992503 +0.276635107398033097680922764994 0.402117806673049915655582253748 0.501771205663681052477897992503 +0.276639309525489818231136496252 -0.0905332513153553064544354356258 -0.34318260848522186279296875 +0.276639309525489818231136496252 0.0905332513153553064544354356258 -0.34318260848522186279296875 +0.276731696724891618188735264994 -0.0460792474448680836052183451557 0.209275859594345081671207253748 +0.276731696724891618188735264994 0.0460792474448680836052183451557 0.209275859594345081671207253748 +0.276832245290279388427734375 -0.485465598106384288445980246252 0.640458825230598383093649772491 +0.276832245290279388427734375 0.485465598106384288445980246252 0.640458825230598383093649772491 +0.27684359252452850341796875 -0.336006006598472628521534488755 -0.336091798543930064813167746252 +0.27684359252452850341796875 0.336006006598472628521534488755 -0.336091798543930064813167746252 +0.276856648921966541632144753748 -0.0300190486013889312744140625 0.353481298685073885845753238755 +0.276856648921966541632144753748 0.0300190486013889312744140625 0.353481298685073885845753238755 +0.27702136337757110595703125 -0.0893605493009090451339559990629 0.343182152509689364361378238755 +0.27702136337757110595703125 0.0893605493009090451339559990629 0.343182152509689364361378238755 +0.277104163169860862048210492503 -0.3535717427730560302734375 -0.0264672003686428070068359375 +0.277104163169860862048210492503 0.3535717427730560302734375 -0.0264672003686428070068359375 +0.277152009308338165283203125 -0.53345851600170135498046875 0.44845126569271087646484375 +0.277152009308338165283203125 0.53345851600170135498046875 0.44845126569271087646484375 +0.277164298295974720343082253748 -0.1148039996623992919921875 0 +0.277164298295974720343082253748 0.1148039996623992919921875 0 +0.277211236953735340460269753748 -0.238108062744140619448884876874 -0.262599742412567171978565738755 +0.277211236953735340460269753748 0.238108062744140619448884876874 -0.262599742412567171978565738755 +0.277245005965232882427784488755 -0.297396013140678427966179242503 -0.192849299311637883969083873126 +0.277245005965232882427784488755 0.297396013140678427966179242503 -0.192849299311637883969083873126 +0.277371157705783855096370871252 -0.201519703865051275082365123126 -0.777788269519805841589743522491 +0.277371157705783855096370871252 0.201519703865051275082365123126 -0.777788269519805841589743522491 +0.277439188957214366570980246252 -0.168943202495574956722990123126 -0.233421611785888688528345369377 +0.277439188957214366570980246252 0.168943202495574956722990123126 -0.233421611785888688528345369377 +0.2774510085582733154296875 -0.11933650076389312744140625 -0.398472011089324951171875 +0.2774510085582733154296875 0.11933650076389312744140625 -0.398472011089324951171875 +0.277527189254760775494190738755 -0.748839998245239280016960492503 0.0470928013324737604339276231258 +0.277527189254760775494190738755 0.748839998245239280016960492503 0.0470928013324737604339276231258 +0.277750790119171142578125 -0.4971707761287689208984375 -0.696904206275939963610710492503 +0.277750790119171142578125 0.4971707761287689208984375 -0.696904206275939963610710492503 +0.27776969969272613525390625 -0.467328625917434681280582253748 0.717250478267669744347756477509 +0.27776969969272613525390625 0.467328625917434681280582253748 0.717250478267669744347756477509 +0.277814388275146484375 -0.748104000091552756579460492503 -0.05621039867401123046875 +0.277814388275146484375 0.748104000091552756579460492503 -0.05621039867401123046875 +0.277835352718830141949268863755 -0.0433608479797840118408203125 0.586026364564895652087272992503 +0.277835352718830141949268863755 0.0433608479797840118408203125 0.586026364564895652087272992503 +0.277903255820274364129573996252 -0.412421712279319729876903011245 -0.689331296086311273718649772491 +0.277903255820274364129573996252 0.412421712279319729876903011245 -0.689331296086311273718649772491 +0.27796019613742828369140625 -0.155875647068023676089509876874 -0.144709952175617218017578125 +0.27796019613742828369140625 0.155875647068023676089509876874 -0.144709952175617218017578125 +0.278095296025276161877570757497 -0.112883049249649036749332253748 0.18005679547786712646484375 +0.278095296025276161877570757497 0.112883049249649036749332253748 0.18005679547786712646484375 +0.2781153023242950439453125 -0.855950403213501020971420985006 0 +0.2781153023242950439453125 0.855950403213501020971420985006 0 +0.27812159061431884765625 -0.05311679840087890625 0.282536792755126942022769753748 +0.27812159061431884765625 0.05311679840087890625 0.282536792755126942022769753748 +0.278141584992408763543636496252 -0.0658641517162323053558026231258 -0.469892483949661265985042746252 +0.278141584992408763543636496252 0.0658641517162323053558026231258 -0.469892483949661265985042746252 +0.278280806541442882195980246252 -0.28178799152374267578125 0.0561724007129669189453125 +0.278280806541442882195980246252 0.28178799152374267578125 0.0561724007129669189453125 +0.2784855067729949951171875 -0.414223492145538330078125 0.029408000409603118896484375 +0.2784855067729949951171875 0.414223492145538330078125 0.029408000409603118896484375 +0.278636991977691650390625 -0.344672405719757046771434261245 0.404428803920745816302684261245 +0.278636991977691650390625 0.344672405719757046771434261245 0.404428803920745816302684261245 +0.278700953722000155377003238755 -0.146521103382110606805355246252 0.450951609015464827123764735006 +0.278700953722000155377003238755 0.146521103382110606805355246252 0.450951609015464827123764735006 +0.278743600845336947369190738755 -0.2025167942047119140625 -0.203196811676025407278345369377 +0.278743600845336947369190738755 0.2025167942047119140625 -0.203196811676025407278345369377 +0.278793513774871826171875 -0.4135735034942626953125 -0.0350884981453418731689453125 +0.278793513774871826171875 0.4135735034942626953125 -0.0350884981453418731689453125 +0.278797449171543088031199886245 -0.667853480577468849865852007497 -0.445807987451553311419871761245 +0.278797449171543088031199886245 0.667853480577468849865852007497 -0.445807987451553311419871761245 +0.278797799348831143451121761245 -0.350210988521575894427684261245 -0.399529802799224842413394753748 +0.278797799348831143451121761245 0.350210988521575894427684261245 -0.399529802799224842413394753748 +0.278877210617065440789730246252 -0.262511992454528830798210492503 -0.115391194820404052734375 +0.278877210617065440789730246252 0.262511992454528830798210492503 -0.115391194820404052734375 +0.278928300738334633557258257497 -0.317789503931999173236278011245 -0.557860815525054842822783029987 +0.278928300738334633557258257497 0.317789503931999173236278011245 -0.557860815525054842822783029987 +0.278953653573989879266292746252 -0.331969955563545249255241742503 0.120335845649242406674161998126 +0.278953653573989879266292746252 0.331969955563545249255241742503 0.120335845649242406674161998126 +0.279015004634857177734375 -0.2027139961719512939453125 -0.362019002437591552734375 +0.279015004634857177734375 0.2027139961719512939453125 -0.362019002437591552734375 +0.2791033089160919189453125 -0.185195493698120106085269753748 -0.101508049666881552952624190311 +0.2791033089160919189453125 0.185195493698120106085269753748 -0.101508049666881552952624190311 +0.279211494326591480596988503748 -0.165830844640731805972322376874 -0.31151430308818817138671875 +0.279211494326591480596988503748 0.165830844640731805972322376874 -0.31151430308818817138671875 +0.279334339499473560675113503748 -0.0552591014653444276283345004686 -0.348451647162437427862613503748 +0.279334339499473560675113503748 0.0552591014653444276283345004686 -0.348451647162437427862613503748 +0.279393607378005948138621761245 0 0.530979609489440895764289507497 +0.279463791847228970599559261245 -0.0368183992803096729606870951557 -0.102685797214508059416182561563 +0.279463791847228970599559261245 0.0368183992803096729606870951557 -0.102685797214508059416182561563 +0.279484009742736849712940738755 -0.104618394374847420436047684689 -0.266352796554565451891960492503 +0.279484009742736849712940738755 0.104618394374847420436047684689 -0.266352796554565451891960492503 +0.279507791996002230572315738755 -0.301736502349376711773487613755 0.503319704532623313220085492503 +0.279507791996002230572315738755 0.301736502349376711773487613755 0.503319704532623313220085492503 +0.2795985043048858642578125 -0.0333704985678195953369140625 0.4131720066070556640625 +0.2795985043048858642578125 0.0333704985678195953369140625 0.4131720066070556640625 +0.279650402069091807977230246252 -0.28209400177001953125 -0.04710359871387481689453125 +0.279650402069091807977230246252 0.28209400177001953125 -0.04710359871387481689453125 +0.279650561511516571044921875 -0.25094155967235565185546875 0.87253887951374053955078125 +0.279650561511516571044921875 0.25094155967235565185546875 0.87253887951374053955078125 +0.279711836576461814196647992503 -0.0227138990536332151248810617972 -0.473017612099647544177116742503 +0.279711836576461814196647992503 0.0227138990536332151248810617972 -0.473017612099647544177116742503 +0.279729057848453532830745871252 -0.747440716624259926526008257497 -0.292547897994518246722606136245 +0.279729057848453532830745871252 0.747440716624259926526008257497 -0.292547897994518246722606136245 +0.279837262630462657586605246252 -0.453846243023872386590511496252 0.134962851554155355282560435626 +0.279837262630462657586605246252 0.453846243023872386590511496252 0.134962851554155355282560435626 +0.279879748821258544921875 -0.6635684967041015625 -0.209389507770538330078125 +0.279879748821258544921875 0.6635684967041015625 -0.209389507770538330078125 +0.279958343505859352795539507497 -0.0628575488924980191329794365629 -0.200430300831794722116185880623 +0.279958343505859352795539507497 0.0628575488924980191329794365629 -0.200430300831794722116185880623 +0.280054986476898193359375 -0.12118999660015106201171875 -0.952302992343902587890625 +0.280054986476898193359375 0.12118999660015106201171875 -0.952302992343902587890625 +0.280084702372550953253238503748 -0.118690946698188776187166126874 -0.173104053735733010022102007497 +0.280084702372550953253238503748 0.118690946698188776187166126874 -0.173104053735733010022102007497 +0.280125600099563609735042746252 -0.498214817047119118420539507497 0.182514595985412586554019753748 +0.280125600099563609735042746252 0.498214817047119118420539507497 0.182514595985412586554019753748 +0.280197304487228404656917746252 -0.0562289983034133869499449076557 0.0912566989660262978256710653113 +0.280197304487228404656917746252 0.0562289983034133869499449076557 0.0912566989660262978256710653113 +0.28034614026546478271484375 -0.203682503104209877697883257497 0.0491875983774661962311114393742 +0.28034614026546478271484375 0.203682503104209877697883257497 0.0491875983774661962311114393742 +0.2803629934787750244140625 -0.3503085076808929443359375 -0.22063599526882171630859375 +0.2803629934787750244140625 0.3503085076808929443359375 -0.22063599526882171630859375 +0.280368608236312877313167746252 -0.49051201343536376953125 -0.2019689977169036865234375 +0.280368608236312877313167746252 0.49051201343536376953125 -0.2019689977169036865234375 +0.280526942014694247173878238755 -0.449636536836624189916733485006 -0.147077144682407401354851117503 +0.280526942014694247173878238755 0.449636536836624189916733485006 -0.147077144682407401354851117503 +0.280537194013595558850227007497 -0.06973560154438018798828125 -0.0802236020565032931228799384371 +0.280537194013595558850227007497 0.06973560154438018798828125 -0.0802236020565032931228799384371 +0.280736106634140003546207253748 -0.0243254989385604837581755788278 0.102934795618057253752120061563 +0.280736106634140003546207253748 0.0243254989385604837581755788278 0.102934795618057253752120061563 +0.280866149067878712042301003748 -0.27703665196895599365234375 -0.216482846438884740658536998126 +0.280866149067878712042301003748 0.27703665196895599365234375 -0.216482846438884740658536998126 +0.280917888879776034283253238755 -0.744428712129592939916733485006 -0.420608702301979053839176003748 +0.280917888879776034283253238755 0.744428712129592939916733485006 -0.420608702301979053839176003748 +0.281136989593505859375 -0.285623013973236083984375 -0.2989675104618072509765625 +0.281136989593505859375 0.285623013973236083984375 -0.2989675104618072509765625 +0.281184402108192399438735264994 -0.204291141033172585217414507497 -0.0412366487085819230506977817186 +0.281184402108192399438735264994 0.204291141033172585217414507497 -0.0412366487085819230506977817186 +0.281184893846511851922542746252 -0.102429297566413876618973688437 0.0210530988872051245952565778907 +0.281184893846511851922542746252 0.102429297566413876618973688437 0.0210530988872051245952565778907 +0.2812444865703582763671875 -0.080501496791839599609375 -0.405488491058349609375 +0.2812444865703582763671875 0.080501496791839599609375 -0.405488491058349609375 +0.281264698505401589123664507497 -0.102853202819824213198884876874 -0.017644800245761871337890625 +0.281264698505401589123664507497 0.102853202819824213198884876874 -0.017644800245761871337890625 +0.281356188654899586065738503748 -0.204416553676128404104517244377 0.285574498772621143682926003748 +0.281356188654899586065738503748 0.204416553676128404104517244377 0.285574498772621143682926003748 +0.281392639875412020611378238755 -0.0185854503884911557987091867972 -0.35067509114742279052734375 +0.281392639875412020611378238755 0.0185854503884911557987091867972 -0.35067509114742279052734375 +0.281400007009506236688167746252 -0.0123750004917383190500279610546 -0.1032519042491912841796875 +0.281400007009506236688167746252 0.0123750004917383190500279610546 -0.1032519042491912841796875 +0.2815259993076324462890625 -0.0406760014593601226806640625 -0.95869100093841552734375 +0.2815259993076324462890625 0.0406760014593601226806640625 -0.95869100093841552734375 +0.28158299624919891357421875 -0.674445587396621748510483485006 0.525199484825134343957131477509 +0.28158299624919891357421875 0.674445587396621748510483485006 0.525199484825134343957131477509 +0.281655853986740090100227007497 -0.169552601873874664306640625 -0.120091304183006272743305942186 +0.281655853986740090100227007497 0.169552601873874664306640625 -0.120091304183006272743305942186 +0.281663399934768687860042746252 0 0.10327470302581787109375 +0.281815595924854278564453125 -0.867331925034522943640524772491 -0.2661120891571044921875 +0.281815595924854278564453125 0.867331925034522943640524772491 -0.2661120891571044921875 +0.28191570937633514404296875 -0.288258838653564497533920985006 0.374073141813278220446647992503 +0.28191570937633514404296875 0.288258838653564497533920985006 0.374073141813278220446647992503 +0.281981997191905975341796875 -0.67230074107646942138671875 0.1760617531836032867431640625 +0.281981997191905975341796875 0.67230074107646942138671875 0.1760617531836032867431640625 +0.281984508037567138671875 -0.433426016569137539935496761245 -0.471833604574203480108707253748 +0.281984508037567138671875 0.433426016569137539935496761245 -0.471833604574203480108707253748 +0.282014155387878440173210492503 -0.381576249003410361559929242503 -0.278149846196174665990952235006 +0.282014155387878440173210492503 0.381576249003410361559929242503 -0.278149846196174665990952235006 +0.2820830047130584716796875 -0.230439007282257080078125 0.3425300121307373046875 +0.2820830047130584716796875 0.230439007282257080078125 0.3425300121307373046875 +0.282207012176513671875 -0.8685309886932373046875 -0.4074470102787017822265625 +0.282207012176513671875 0.8685309886932373046875 -0.4074470102787017822265625 +0.282347792387008633685496761245 0 0.640530806779861405786391514994 +0.282368995249271392822265625 -0.6011242568492889404296875 -0.348449997603893280029296875 +0.282368995249271392822265625 0.6011242568492889404296875 -0.348449997603893280029296875 +0.28240334987640380859375 -0.332497787475585948602230246252 -0.110424151271581658106946122189 +0.28240334987640380859375 0.332497787475585948602230246252 -0.110424151271581658106946122189 +0.282541505992412567138671875 -0.205276496708393096923828125 -0.66372598707675933837890625 +0.282541505992412567138671875 0.205276496708393096923828125 -0.66372598707675933837890625 +0.282569396495819080694644753748 -0.0811868995428085271637286268742 -0.0596921995282173115104917826557 +0.282569396495819080694644753748 0.0811868995428085271637286268742 -0.0596921995282173115104917826557 +0.28257238864898681640625 -0.130370795726776123046875 0.251309204101562488897769753748 +0.28257238864898681640625 0.130370795726776123046875 0.251309204101562488897769753748 +0.282604497671127330438167746252 -0.0686691015958785927475460653113 0.0736155018210411099532919365629 +0.282604497671127330438167746252 0.0686691015958785927475460653113 0.0736155018210411099532919365629 +0.282655100524425495489566628748 -0.1517366468906402587890625 -0.5653160512447357177734375 +0.282655100524425495489566628748 0.1517366468906402587890625 -0.5653160512447357177734375 +0.282815104722976662365852007497 -0.0922965019941329872787960653113 -0.0386912986636161818077006557814 +0.282815104722976662365852007497 0.0922965019941329872787960653113 -0.0386912986636161818077006557814 +0.282843208312988314556690738755 -0.2828423976898193359375 0 +0.282843208312988314556690738755 0.2828423976898193359375 0 +0.282898008823394775390625 -0.3917255103588104248046875 0.12852950394153594970703125 +0.282898008823394775390625 0.3917255103588104248046875 0.12852950394153594970703125 +0.282914760708808887823551003748 -0.0632376980036497143844442803129 0.904687842726707436291633257497 +0.282914760708808887823551003748 0.0632376980036497143844442803129 0.904687842726707436291633257497 +0.282965192198753323626903011245 -0.03863404877483844757080078125 -0.202331858873367298468082253748 +0.282965192198753323626903011245 0.03863404877483844757080078125 -0.202331858873367298468082253748 +0.283050003647804249151676003748 -0.135668502748012537173494251874 -0.789921981096267655786391514994 +0.283050003647804249151676003748 0.135668502748012537173494251874 -0.789921981096267655786391514994 +0.283053302764892544818309261245 -0.09156270325183868408203125 0.0386912986636161818077006557814 +0.283053302764892544818309261245 0.09156270325183868408203125 0.0386912986636161818077006557814 +0.283111211657524119988948996252 -0.292974311113357532843082253748 0.802504813671112038342414507497 +0.283111211657524119988948996252 0.292974311113357532843082253748 0.802504813671112038342414507497 +0.283132803440094005242855246252 -0.205705207586288435495092130623 -0.487361383438110307153579014994 +0.283132803440094005242855246252 0.205705207586288435495092130623 -0.487361383438110307153579014994 +0.2831563055515289306640625 -0.205724042654037458932592130623 0 +0.2831563055515289306640625 0.205724042654037458932592130623 0 +0.283212298154830899310496761245 -0.5936181843280792236328125 -0.239600902795791603772102007497 +0.283212298154830899310496761245 0.5936181843280792236328125 -0.239600902795791603772102007497 +0.283214104175567638055355246252 -0.172585408389568345510767244377 0.559020814299583501671975227509 +0.283214104175567638055355246252 0.172585408389568345510767244377 0.559020814299583501671975227509 +0.283244842290878262591746761245 -0.0687438495457172310532101278113 0.193769809603691084420873380623 +0.283244842290878262591746761245 0.0687438495457172310532101278113 0.193769809603691084420873380623 +0.28326864540576934814453125 -0.128108750283718098028629128748 0.160770045220851892642244251874 +0.28326864540576934814453125 0.128108750283718098028629128748 0.160770045220851892642244251874 +0.28327000141143798828125 -0.041161000728607177734375 -0.4099560081958770751953125 +0.28327000141143798828125 0.041161000728607177734375 -0.4099560081958770751953125 +0.283287191390991177630809261245 -0.0230957988649606697773020158593 0.204242491722106928042634876874 +0.283287191390991177630809261245 0.0230957988649606697773020158593 0.204242491722106928042634876874 +0.2835347950458526611328125 -0.0802134007215499905685263115629 0.0563373014330863924881143134371 +0.2835347950458526611328125 0.0802134007215499905685263115629 0.0563373014330863924881143134371 +0.283762788772583041119190738755 -0.246255588531494151727230246252 -0.13724720478057861328125 +0.283762788772583041119190738755 0.246255588531494151727230246252 -0.13724720478057861328125 +0.283853602409362804070980246252 -0.587831211090087957238381477509 -0.462473583221435557977230246252 +0.283853602409362804070980246252 0.587831211090087957238381477509 -0.462473583221435557977230246252 +0.283906692266464255602897992503 -0.206267604231834433825554242503 -0.423497793078422557488948996252 +0.283906692266464255602897992503 0.206267604231834433825554242503 -0.423497793078422557488948996252 +0.283968740701675437243522992503 -0.460827910900115989001335492503 0.359860154986381519659488503748 +0.283968740701675437243522992503 0.460827910900115989001335492503 0.359860154986381519659488503748 +0.284001143276691403460887386245 -0.762279984354972794946547764994 0.246519549190998082943693248126 +0.284001143276691403460887386245 0.762279984354972794946547764994 0.246519549190998082943693248126 +0.284163898229598976818977007497 -0.0487374007701873793174662807814 -0.0829188019037246648590411268742 +0.284163898229598976818977007497 0.0487374007701873793174662807814 -0.0829188019037246648590411268742 +0.2842344939708709716796875 0 -0.4113520085811614990234375 +0.28431750833988189697265625 -0.3930795192718505859375 0.57197172939777374267578125 +0.28431750833988189697265625 0.3930795192718505859375 0.57197172939777374267578125 +0.284527957439422607421875 -0.0144368004053831086586079379686 -0.203311145305633544921875 +0.284527957439422607421875 0.0144368004053831086586079379686 -0.203311145305633544921875 +0.284606087207794178350894753748 -0.636390888690948508532585492503 -0.5692149102687835693359375 +0.284606087207794178350894753748 0.636390888690948508532585492503 -0.5692149102687835693359375 +0.2847613990306854248046875 -0.139005298912525165899722878748 0.624170410633087091589743522491 +0.2847613990306854248046875 0.139005298912525165899722878748 0.624170410633087091589743522491 +0.284797492623329151495426003748 -0.513609191775321938244758257497 0.278560099005699168817073996252 +0.284797492623329151495426003748 0.513609191775321938244758257497 0.278560099005699168817073996252 +0.284805251657962776867805132497 -0.673516753315925531531149772491 0.606433472037315346447883257497 +0.284805251657962776867805132497 0.673516753315925531531149772491 0.606433472037315346447883257497 +0.284900861978530872686832253748 -0.313665756583213828356804242503 0.151476748287677764892578125 +0.284900861978530872686832253748 0.313665756583213828356804242503 0.151476748287677764892578125 +0.2849070131778717041015625 -0.3281385004520416259765625 -0.24729199707508087158203125 +0.2849070131778717041015625 0.3281385004520416259765625 -0.24729199707508087158203125 +0.284937894344329811779914507497 -0.0363425999879837050010600307814 0.0865427970886230440994424384371 +0.284937894344329811779914507497 0.0363425999879837050010600307814 0.0865427970886230440994424384371 +0.2849557399749755859375 -0.50918023288249969482421875 -0.47120623290538787841796875 +0.2849557399749755859375 0.50918023288249969482421875 -0.47120623290538787841796875 +0.285016904771327961309879128748 -0.696324238181114218981804242503 0.395470999181270599365234375 +0.285016904771327961309879128748 0.696324238181114218981804242503 0.395470999181270599365234375 +0.285018396377563487664730246252 -0.5339992046356201171875 0.523077583312988259045539507497 +0.285018396377563487664730246252 0.5339992046356201171875 0.523077583312988259045539507497 +0.285043156147003151623664507497 -0.189226794242858875616519753748 0.0737814001739025004944494412484 +0.285043156147003151623664507497 0.189226794242858875616519753748 0.0737814001739025004944494412484 +0.285046210885047945904346988755 -0.230040889978408824578792746252 0.261400043964385986328125 +0.285046210885047945904346988755 0.230040889978408824578792746252 0.261400043964385986328125 +0.285075446963310275005909488755 -0.207117001712322251760767244377 -0.279882904887199412957698996252 +0.285075446963310275005909488755 0.207117001712322251760767244377 -0.279882904887199412957698996252 +0.285088801383972190173210492503 -0.267844390869140636102230246252 0.0835687994956970242599325615629 +0.285088801383972190173210492503 0.267844390869140636102230246252 0.0835687994956970242599325615629 +0.28511679172515869140625 -0.273143196105957053454460492503 -0.695773601531982421875 +0.28511679172515869140625 0.273143196105957053454460492503 -0.695773601531982421875 +0.2851339876651763916015625 -0.3901009857654571533203125 -0.12852950394153594970703125 +0.2851339876651763916015625 0.3901009857654571533203125 -0.12852950394153594970703125 +0.28527200222015380859375 -0.3717420101165771484375 -0.883418023586273193359375 +0.28527200222015380859375 0.3717420101165771484375 -0.883418023586273193359375 +0.285306859016418445929019753748 -0.87808977067470550537109375 0.223739248514175398385717130623 +0.285306859016418445929019753748 0.87808977067470550537109375 0.223739248514175398385717130623 +0.2853173911571502685546875 -0.0927039027214050237457598768742 0 +0.2853173911571502685546875 0.0927039027214050237457598768742 0 +0.28534400463104248046875 -0.076710402965545654296875 -0.269618797302246082647769753748 +0.28534400463104248046875 0.076710402965545654296875 -0.269618797302246082647769753748 +0.285358011722564697265625 -0.662837982177734375 0.6922550201416015625 +0.285358011722564697265625 0.662837982177734375 0.6922550201416015625 +0.285536997020244598388671875 -0.6203310191631317138671875 0.310092754662036895751953125 +0.285536997020244598388671875 0.6203310191631317138671875 0.310092754662036895751953125 +0.285756905376911174432308371252 -0.501693388819694496838508257497 -0.298574258387088786736995871252 +0.285756905376911174432308371252 0.501693388819694496838508257497 -0.298574258387088786736995871252 +0.2859840095043182373046875 -0.39186899363994598388671875 -0.57197172939777374267578125 +0.2859840095043182373046875 0.39186899363994598388671875 -0.57197172939777374267578125 +0.28610050678253173828125 -0.6061097085475921630859375 0.20193459093570709228515625 +0.28610050678253173828125 0.6061097085475921630859375 0.20193459093570709228515625 +0.286395198106765724865852007497 -0.0956416979432105907044103787484 -0.177004092931747430972322376874 +0.286395198106765724865852007497 0.0956416979432105907044103787484 -0.177004092931747430972322376874 +0.28651200234889984130859375 -0.56203798949718475341796875 0.40561576187610626220703125 +0.28651200234889984130859375 0.56203798949718475341796875 0.40561576187610626220703125 +0.286561554670333895611378238755 -0.073437102138996124267578125 0.463669240474700983245526231258 +0.286561554670333895611378238755 0.073437102138996124267578125 0.463669240474700983245526231258 +0.286623048782348621710269753748 -0.133600604534149153268529630623 -0.149993544816970802990852007497 +0.286623048782348621710269753748 0.133600604534149153268529630623 -0.149993544816970802990852007497 +0.286716154217720065044971988755 -0.341070744395256031378238503748 0.0629644475877284975906533759371 +0.286716154217720065044971988755 0.341070744395256031378238503748 0.0629644475877284975906533759371 +0.28681719303131103515625 -0.143289196491241471731470369377 -0.239173603057861339227230246252 +0.28681719303131103515625 0.143289196491241471731470369377 -0.239173603057861339227230246252 +0.286819398403167724609375 -0.190786743164062494448884876874 -0.0619269013404846122017310960928 +0.286819398403167724609375 0.190786743164062494448884876874 -0.0619269013404846122017310960928 +0.286847108602523770404246761245 -0.0121926002204418171964706019139 0.0870063006877899169921875 +0.286847108602523770404246761245 0.0121926002204418171964706019139 0.0870063006877899169921875 +0.2869000136852264404296875 -0.619234979152679443359375 -0.73091399669647216796875 +0.2869000136852264404296875 0.619234979152679443359375 -0.73091399669647216796875 +0.286925458908081021380809261245 -0.142899048328399641549779630623 0.140547400712966896740852007497 +0.286925458908081021380809261245 0.142899048328399641549779630623 0.140547400712966896740852007497 +0.286959157884120907855418636245 -0.0689689971506595583816690009371 -0.797118085622787408972556022491 +0.286959157884120907855418636245 0.0689689971506595583816690009371 -0.797118085622787408972556022491 +0.286965700984001148565738503748 -0.27972279489040374755859375 0.573939120769500710217414507497 +0.286965700984001148565738503748 0.27972279489040374755859375 0.573939120769500710217414507497 +0.287012994289398193359375 -0.6929092705249786376953125 0 +0.287012994289398193359375 0.6929092705249786376953125 0 +0.287031608819961536749332253748 -0.0244500003755092620849609375 -0.0837554991245269692123898153113 +0.287031608819961536749332253748 0.0244500003755092620849609375 -0.0837554991245269692123898153113 +0.287102401256561279296875 -0.403388392925262462274105246252 -0.338895606994628895147769753748 +0.287102401256561279296875 0.403388392925262462274105246252 -0.338895606994628895147769753748 +0.287107603251934073718132367503 -0.101680801808834084254407059689 -0.57422171533107757568359375 +0.287107603251934073718132367503 0.101680801808834084254407059689 -0.57422171533107757568359375 +0.287112003564834572522102007497 -0.0603558003902435261101011576557 -0.062640599906444549560546875 +0.287112003564834572522102007497 0.0603558003902435261101011576557 -0.062640599906444549560546875 +0.287123394012451182977230246252 0 0.346496853232383716925113503748 +0.287171296775341033935546875 -0.4208138883113861083984375 -0.403668203949928305895866742503 +0.287171296775341033935546875 0.4208138883113861083984375 -0.403668203949928305895866742503 +0.28718650341033935546875 -0.13275800645351409912109375 0.3871684968471527099609375 +0.28718650341033935546875 0.13275800645351409912109375 0.3871684968471527099609375 +0.28718774020671844482421875 -0.118288797140121457185379938437 0.325624036788940418585269753748 +0.28718774020671844482421875 0.118288797140121457185379938437 0.325624036788940418585269753748 +0.287267245352268218994140625 -0.68718297779560089111328125 0.0880732499063014984130859375 +0.287267245352268218994140625 0.68718297779560089111328125 0.0880732499063014984130859375 +0.287290406227111827508480246252 -0.228820395469665538445980246252 -0.158446800708770763055355246252 +0.287290406227111827508480246252 0.228820395469665538445980246252 -0.158446800708770763055355246252 +0.287374463677406322137386496252 -0.468951985239982660491619981258 0 +0.287374463677406322137386496252 0.468951985239982660491619981258 0 +0.2873879969120025634765625 -0.2596274912357330322265625 0.3162305057048797607421875 +0.2873879969120025634765625 0.2596274912357330322265625 0.3162305057048797607421875 +0.287405245006084442138671875 -0.6847364902496337890625 -0.10504424571990966796875 +0.287405245006084442138671875 0.6847364902496337890625 -0.10504424571990966796875 +0.287432003021240223272769753748 -0.0266263991594314596011994211722 0.27690041065216064453125 +0.287432003021240223272769753748 0.0266263991594314596011994211722 0.27690041065216064453125 +0.287518805265426613537727007497 -0.372141587734222401007144753748 0.372616803646087624279914507497 +0.287518805265426613537727007497 0.372141587734222401007144753748 0.372616803646087624279914507497 +0.28757441043853759765625 -0.672139215469360395971420985006 -0.324853610992431651727230246252 +0.28757441043853759765625 0.672139215469360395971420985006 -0.324853610992431651727230246252 +0.287579989433288607525440738755 -0.15436160564422607421875 0.231236004829406760485710492503 +0.287579989433288607525440738755 0.15436160564422607421875 0.231236004829406760485710492503 +0.28760159015655517578125 -0.0796371996402740478515625 0.266352009773254405633480246252 +0.28760159015655517578125 0.0796371996402740478515625 0.266352009773254405633480246252 +0.287652291357517242431640625 -0.316052106022834788934261496252 -0.489762011170387312475327235006 +0.287652291357517242431640625 0.316052106022834788934261496252 -0.489762011170387312475327235006 +0.28767359256744384765625 -0.268927192687988314556690738755 -0.0701572000980377197265625 +0.28767359256744384765625 0.268927192687988314556690738755 -0.0701572000980377197265625 +0.287682840228080716205028011245 -0.173753653466701490915014005623 0.0977151036262512151520098768742 +0.287682840228080716205028011245 0.173753653466701490915014005623 0.0977151036262512151520098768742 +0.287690699100494384765625 -0.0824070006608963040450888115629 -0.0210530988872051245952565778907 +0.287690699100494384765625 0.0824070006608963040450888115629 -0.0210530988872051245952565778907 +0.287711995840072620733707253748 -0.12021960318088531494140625 0.512609982490539572985710492503 +0.287711995840072620733707253748 0.12021960318088531494140625 0.512609982490539572985710492503 +0.2877759039402008056640625 -0.0481860011816024752517861884371 0.0697365000844001742263955634371 +0.2877759039402008056640625 0.0481860011816024752517861884371 0.0697365000844001742263955634371 +0.287908600270748105121043636245 0 -0.799755650758743219519431022491 +0.28791630268096923828125 -0.0909614965319633372864416287484 0.177003404498100258557258257497 +0.28791630268096923828125 0.0909614965319633372864416287484 0.177003404498100258557258257497 +0.28791950643062591552734375 -0.464151045680046114849659488755 0.0645424984395503997802734375 +0.28791950643062591552734375 0.464151045680046114849659488755 0.0645424984395503997802734375 +0.287927295267581928595035378748 -0.335013051331043254510433371252 0.726198336482048012463508257497 +0.287927295267581928595035378748 0.335013051331043254510433371252 0.726198336482048012463508257497 +0.287989801168441750256477007497 0 -0.0840351015329360989669638115629 +0.2879900038242340087890625 -0.4542579948902130126953125 0.84303700923919677734375 +0.2879900038242340087890625 0.4542579948902130126953125 0.84303700923919677734375 +0.288004195690155007092414507497 -0.0821109026670455849350460653113 0.017644800245761871337890625 +0.288004195690155007092414507497 0.0821109026670455849350460653113 0.017644800245761871337890625 +0.288071700930595364642528011245 -0.43560159206390380859375 0.466118103265762306897102007497 +0.288071700930595364642528011245 0.43560159206390380859375 0.466118103265762306897102007497 +0.288173046708107005731136496252 -0.462097349762916609350327235006 -0.0769565470516681698898153740629 +0.288173046708107005731136496252 0.462097349762916609350327235006 -0.0769565470516681698898153740629 +0.288253697752952564581363503748 0 0.799631574749946616442741742503 +0.288253811001777660028011496252 -0.135564301908016215936214621252 -0.317855259776115450787159488755 +0.288253811001777660028011496252 0.135564301908016215936214621252 -0.317855259776115450787159488755 +0.288290101289749134405582253748 -0.0716021999716758700271768134371 -0.0419762983918189960808042826557 +0.288290101289749134405582253748 0.0716021999716758700271768134371 -0.0419762983918189960808042826557 +0.288339996337890647204460492503 -0.368702411651611328125 0.648782396316528342516960492503 +0.288339996337890647204460492503 0.368702411651611328125 0.648782396316528342516960492503 +0.288378453254699740337940738755 -0.341392958164215110095085492503 -0.0528074987232685089111328125 +0.288378453254699740337940738755 0.341392958164215110095085492503 -0.0528074987232685089111328125 +0.288463002443313576428352007497 0 0.198214796185493452584935880623 +0.288604792952537547723323996252 -0.299806657433509871069077235006 -0.359615314006805464330795985006 +0.288604792952537547723323996252 0.299806657433509871069077235006 -0.359615314006805464330795985006 +0.288733953237533591540397992503 -0.294072756171226523669304242503 0.180704243481159210205078125 +0.288733953237533591540397992503 0.294072756171226523669304242503 0.180704243481159210205078125 +0.288736206293106090203792746252 -0.119511897861957552824385686563 0.844007384777069158410256477509 +0.288736206293106090203792746252 0.119511897861957552824385686563 0.844007384777069158410256477509 +0.28876125812530517578125 -0.1479532532393932342529296875 -0.67618574202060699462890625 +0.28876125812530517578125 0.1479532532393932342529296875 -0.67618574202060699462890625 +0.288768705725669871942073996252 -0.434561052918434165270866742503 0.173980394005775473864616742503 +0.288768705725669871942073996252 0.434561052918434165270866742503 0.173980394005775473864616742503 +0.288918596506118785516292746252 -0.475588810443878129419204014994 0.224368196725845320260717130623 +0.288918596506118785516292746252 0.475588810443878129419204014994 0.224368196725845320260717130623 +0.288969004154205288958934261245 -0.240579003095626825503572376874 0.467566788196563720703125 +0.288969004154205288958934261245 0.240579003095626825503572376874 0.467566788196563720703125 +0.289021593332290605005141514994 -0.156889595091342926025390625 0.119800096750259391087389815311 +0.289021593332290605005141514994 0.156889595091342926025390625 0.119800096750259391087389815311 +0.289055252075195279193309261245 -0.552025714516639731677116742503 -0.578113037347793512488181022491 +0.289055252075195279193309261245 0.552025714516639731677116742503 -0.578113037347793512488181022491 +0.289097595214843738897769753748 -0.0490907996892929118781800923443 -0.272052788734436057360710492503 +0.289097595214843738897769753748 0.0490907996892929118781800923443 -0.272052788734436057360710492503 +0.289151507616043135229233485006 0 0.467858588695526156353565738755 +0.289218297600746132580695757497 -0.267874601483345020636051003748 -0.578442895412444979541533029987 +0.289218297600746132580695757497 0.267874601483345020636051003748 -0.578442895412444979541533029987 +0.289236599206924405169871761245 -0.0597984015941619845291299384371 0.0525965988636016845703125 +0.289236599206924405169871761245 0.0597984015941619845291299384371 0.0525965988636016845703125 +0.289312791824340831414730246252 -0.0711249008774757357498330634371 0.035204999148845672607421875 +0.289312791824340831414730246252 0.0711249008774757357498330634371 0.035204999148845672607421875 +0.289439988136291515008480246252 -0.210290408134460454769865123126 0.715543222427368230675881477509 +0.289439988136291515008480246252 -0.210288000106811534539730246252 -0.178885996341705322265625 +0.289439988136291515008480246252 0.210288000106811534539730246252 -0.178885996341705322265625 +0.289439988136291515008480246252 0.210290408134460454769865123126 0.715543222427368230675881477509 +0.289443206787109386102230246252 -0.4702231884002685546875 -0.5788896083831787109375 +0.289443206787109386102230246252 0.4702231884002685546875 -0.5788896083831787109375 +0.28949774801731109619140625 -0.099941253662109375 0.6846187412738800048828125 +0.28949774801731109619140625 0.099941253662109375 0.6846187412738800048828125 +0.289722588658332835809261496252 -0.0599647521972656236122212192186 0.339064639806747447625667746252 +0.289722588658332835809261496252 0.0599647521972656236122212192186 0.339064639806747447625667746252 +0.289790150523185741082698996252 -0.05099770240485668182373046875 -0.579586809873580910412727007497 +0.289790150523185741082698996252 0.05099770240485668182373046875 -0.579586809873580910412727007497 +0.289898997545242342877003238755 -0.773862308263778664318977007497 0.356505301594734202996761496252 +0.289898997545242342877003238755 0.773862308263778664318977007497 0.356505301594734202996761496252 +0.289923100173473335949836382497 -0.778677371144294694360610264994 -0.179183400422334659918277566248 +0.289923100173473335949836382497 0.778677371144294694360610264994 -0.179183400422334659918277566248 +0.289977487921714793817073996252 -0.527199772000312760766860264994 0.600394079089164756091179242503 +0.289977487921714793817073996252 0.527199772000312760766860264994 0.600394079089164756091179242503 +0.289986395835876487048210492503 -0.178143596649169927426115123126 -0.210173201560974132195980246252 +0.289986395835876487048210492503 0.178143596649169927426115123126 -0.210173201560974132195980246252 +0.2900960147380828857421875 -0.169601500034332275390625 -0.3702425062656402587890625 +0.2900960147380828857421875 0.169601500034332275390625 -0.3702425062656402587890625 +0.2901259958744049072265625 -0.8929259777069091796875 0.34425199031829833984375 +0.2901259958744049072265625 0.8929259777069091796875 0.34425199031829833984375 +0.2903729975223541259765625 -0.24925424158573150634765625 0.64502401649951934814453125 +0.2903729975223541259765625 0.24925424158573150634765625 0.64502401649951934814453125 +0.2904439866542816162109375 -0.760399997234344482421875 -0.580889999866485595703125 +0.2904439866542816162109375 0.760399997234344482421875 -0.580889999866485595703125 +0.2904469966888427734375 -0.3726685047149658203125 0.16358099877834320068359375 +0.2904469966888427734375 0.3726685047149658203125 0.16358099877834320068359375 +0.290450701117515586169304242503 -0.315278542041778575555355246252 -0.136885946989059453793302623126 +0.290450701117515586169304242503 0.315278542041778575555355246252 -0.136885946989059453793302623126 +0.290456390380859408306690738755 -0.251324391365051302837940738755 0.111674404144287114926115123126 +0.290456390380859408306690738755 0.251324391365051302837940738755 0.111674404144287114926115123126 +0.290550699830055270123096988755 -0.314125356078147899285823996252 0.345551237463951166350994981258 +0.290550699830055270123096988755 0.314125356078147899285823996252 0.345551237463951166350994981258 +0.290576791763305697369190738755 -0.0532832026481628445724325615629 0.743455219268798872533920985006 +0.290576791763305697369190738755 0.0532832026481628445724325615629 0.743455219268798872533920985006 +0.290613305568695079461605246252 -0.0241716004908084855506977817186 0.0704240977764129666427450615629 +0.290613305568695079461605246252 0.0241716004908084855506977817186 0.0704240977764129666427450615629 +0.290654411911964394299445757497 -0.894536161422729403369658029987 -0.133509195595979679449527566248 +0.290654411911964394299445757497 0.894536161422729403369658029987 -0.133509195595979679449527566248 +0.290655890107154868395866742503 -0.249631637334823602847322376874 0.236015108227729808465511496252 +0.290655890107154868395866742503 0.249631637334823602847322376874 0.236015108227729808465511496252 +0.290669408440589915887386496252 -0.272582548856735218389957253748 0.209069555997848516293302623126 +0.290669408440589915887386496252 0.272582548856735218389957253748 0.209069555997848516293302623126 +0.290675407648086525647102007497 -0.309669005870819080694644753748 -0.423807585239410367083934261245 +0.290675407648086525647102007497 0.309669005870819080694644753748 -0.423807585239410367083934261245 +0.290686509013175997662159488755 0 -0.581378868222236611096320757497 +0.290687148272991191522152121252 -0.34172253310680389404296875 0.47034780681133270263671875 +0.290687148272991191522152121252 0.34172253310680389404296875 0.47034780681133270263671875 +0.290690402686595905645816628748 -0.55292119085788726806640625 -0.179658043384552018606470369377 +0.290690402686595905645816628748 0.55292119085788726806640625 -0.179658043384552018606470369377 +0.290710696578025784564403011245 -0.193345609307289112432926003748 0.024592049419879913330078125 +0.290710696578025784564403011245 0.193345609307289112432926003748 0.024592049419879913330078125 +0.290765291452407814709602007497 -0.0461118020117282853553852817186 0.189285957813262933902009876874 +0.290765291452407814709602007497 0.0461118020117282853553852817186 0.189285957813262933902009876874 +0.290798899531364396509047764994 -0.193679144978523232190070757497 -0.0206031005829572649856729071871 +0.290798899531364396509047764994 0.193679144978523232190070757497 -0.0206031005829572649856729071871 +0.29081249237060546875 -0.2521015107631683349609375 -0.3191750049591064453125 +0.29081249237060546875 0.2521015107631683349609375 -0.3191750049591064453125 +0.290858103334903694836555132497 -0.168584755808114994390933816248 0.78069268167018890380859375 +0.290858103334903694836555132497 0.168584755808114994390933816248 0.78069268167018890380859375 +0.290873104333877530169871761245 -0.176471745967864968029914507497 -0.0821621514856815254868038778113 +0.290873104333877530169871761245 0.176471745967864968029914507497 -0.0821621514856815254868038778113 +0.290873193740844748766960492503 -0.17714560031890869140625 0.209791207313537619860710492503 +0.290873193740844748766960492503 0.17714560031890869140625 0.209791207313537619860710492503 +0.2909174859523773193359375 -0.4015080034732818603515625 0.0644859969615936279296875 +0.2909174859523773193359375 0.4015080034732818603515625 0.0644859969615936279296875 +0.290927195549011252673210492503 -0.0165000006556510932231862653907 -0.27402400970458984375 +0.290927195549011252673210492503 0.0165000006556510932231862653907 -0.27402400970458984375 +0.290970003604888893811164507497 -0.468120610713958718029914507497 -0.2370648086071014404296875 +0.290970003604888893811164507497 0.468120610713958718029914507497 -0.2370648086071014404296875 +0.291057604551315296514957253748 -0.0368397004902362781852964701557 -0.0626765996217727577866085653113 +0.291057604551315296514957253748 0.0368397004902362781852964701557 -0.0626765996217727577866085653113 +0.291144686937332197729233485006 -0.430530634522438060418636496252 -0.179939098656177548507528740629 +0.291144686937332197729233485006 0.430530634522438060418636496252 -0.179939098656177548507528740629 +0.291181947290897358282535378748 -0.78427968919277191162109375 0.150393903255462646484375 +0.291181947290897358282535378748 0.78427968919277191162109375 0.150393903255462646484375 +0.29124550521373748779296875 -0.147825302183628076724275501874 -0.125792796909809101446597878748 +0.29124550521373748779296875 0.147825302183628076724275501874 -0.125792796909809101446597878748 +0.291250045597553242071597878748 -0.48407058417797088623046875 0.321479596197605133056640625 +0.291250045597553242071597878748 0.48407058417797088623046875 0.321479596197605133056640625 +0.291264313459396351202457253748 -0.289946663379669178350894753748 -0.856501939892768793249899772491 +0.291264313459396351202457253748 0.289946663379669178350894753748 -0.856501939892768793249899772491 +0.291334751248359669073551003748 -0.072134651243686676025390625 -0.180057150125503523385717130623 +0.291334751248359669073551003748 0.072134651243686676025390625 -0.180057150125503523385717130623 +0.291417288780212391241519753748 -0.248333850502967828921541126874 -0.236444851756095891781583873126 +0.291417288780212391241519753748 0.248333850502967828921541126874 -0.236444851756095891781583873126 +0.291520793735980998651058371252 -0.897211325168609574731704014994 0.111928046494722363557450250937 +0.291520793735980998651058371252 0.897211325168609574731704014994 0.111928046494722363557450250937 +0.291561305522918701171875 0 0.07065390050411224365234375 +0.291578038036823250500617632497 -0.352126953005790721551448996252 -0.716581457853317282946647992503 +0.291578038036823250500617632497 0.352126953005790721551448996252 -0.716581457853317282946647992503 +0.29159295558929443359375 -0.183775345981121079885767244377 0.428602364659309398309261496252 +0.29159295558929443359375 0.183775345981121079885767244377 0.428602364659309398309261496252 +0.291618594527244534564403011245 -0.619331306219100929943977007497 -0.146246097981929779052734375 +0.291618594527244534564403011245 0.619331306219100929943977007497 -0.146246097981929779052734375 +0.29164350032806396484375 0 0.406132996082305908203125 +0.291711294651031460833934261245 -0.0700325980782508794586505018742 0 +0.291711294651031460833934261245 0.0700325980782508794586505018742 0 +0.291958987712860107421875 -0.4007515013217926025390625 -0.0644859969615936279296875 +0.291958987712860107421875 0.4007515013217926025390625 -0.0644859969615936279296875 +0.291970258951187167095753238755 -0.560734185576438948217514735006 0.1510970480740070343017578125 +0.291970258951187167095753238755 0.560734185576438948217514735006 0.1510970480740070343017578125 +0.292021098732948292120426003748 -0.624219393730163552014289507497 0.122775100171565995643696567186 +0.292021098732948292120426003748 0.624219393730163552014289507497 0.122775100171565995643696567186 +0.292043057084083568231136496252 -0.0864955045282840701004190009371 0.574221056699752874230568977509 +0.292043057084083568231136496252 0.0864955045282840701004190009371 0.574221056699752874230568977509 +0.292251008749008167608707253748 -0.508816194534301713403579014994 -0.125281798839569080694644753748 +0.292251008749008167608707253748 0.508816194534301713403579014994 -0.125281798839569080694644753748 +0.292252045869827281610042746252 -0.342182251811027515753238503748 0 +0.292252045869827281610042746252 0.342182251811027515753238503748 0 +0.2922542989253997802734375 -0.707787001132965110095085492503 0.472889703512191783563167746252 +0.2922542989253997802734375 0.707787001132965110095085492503 0.472889703512191783563167746252 +0.29231679439544677734375 -0.271590399742126453741519753748 0.02809999883174896240234375 +0.29231679439544677734375 0.271590399742126453741519753748 0.02809999883174896240234375 +0.29250240325927734375 -0.513202214241027854235710492503 0.105193796753883364591963811563 +0.29250240325927734375 0.513202214241027854235710492503 0.105193796753883364591963811563 +0.292589494585990872455028011245 -0.493661707639694191662727007497 -0.400861310958862293585269753748 +0.292589494585990872455028011245 0.493661707639694191662727007497 -0.400861310958862293585269753748 +0.292742800712585460320980246252 -0.271564793586730968133480246252 -0.0235436007380485541606862653907 +0.292742800712585460320980246252 0.271564793586730968133480246252 -0.0235436007380485541606862653907 +0.29295225441455841064453125 -0.0893069989979267120361328125 -0.6846187412738800048828125 +0.29295225441455841064453125 0.0893069989979267120361328125 -0.6846187412738800048828125 +0.292996805906295787469417746252 -0.0123903002589941021310826485546 -0.06324090063571929931640625 +0.292996805906295787469417746252 0.0123903002589941021310826485546 -0.06324090063571929931640625 +0.293031191825866732525440738755 -0.691943216323852583471420985006 0.2744944095611572265625 +0.293031191825866732525440738755 0.691943216323852583471420985006 0.2744944095611572265625 +0.293073606491088878289730246252 -0.0483012020587921114822549384371 -0.042129300534725189208984375 +0.293073606491088878289730246252 0.0483012020587921114822549384371 -0.042129300534725189208984375 +0.2931033074855804443359375 -0.0363573007285594926307759067186 0.0526176005601882920692524692186 +0.2931033074855804443359375 0.0363573007285594926307759067186 0.0526176005601882920692524692186 +0.29311649501323699951171875 -0.514022397994995161596420985006 0.678132873773574895714943977509 +0.29311649501323699951171875 0.514022397994995161596420985006 0.678132873773574895714943977509 +0.2931813895702362060546875 -0.52479137480258941650390625 -0.735621106624603227075454014994 +0.2931813895702362060546875 0.52479137480258941650390625 -0.735621106624603227075454014994 +0.293201349675655364990234375 -0.493291327357292141986278011245 0.757097727060317970959602007497 +0.293201349675655364990234375 0.493291327357292141986278011245 0.757097727060317970959602007497 +0.293291991949081398693977007497 -0.0594671979546546880524005018742 -0.0210593998432159409950337192186 +0.293291991949081398693977007497 0.0594671979546546880524005018742 -0.0210593998432159409950337192186 +0.293412601947784401623664507497 -0.040044598281383514404296875 0.521828985214233376233039507497 +0.293412601947784401623664507497 0.040044598281383514404296875 0.521828985214233376233039507497 +0.29356615245342254638671875 -0.903503203392028719775908029987 0 +0.29356615245342254638671875 0.903503203392028719775908029987 0 +0.293574607372283913342414507497 -0.0591816008090972900390625 0.0176483999937772743915598283593 +0.293574607372283913342414507497 0.0591816008090972900390625 0.0176483999937772743915598283593 +0.293622353672981228900340511245 -0.106329651176929468325838001874 0.158050554990768421514957253748 +0.293622353672981228900340511245 0.106329651176929468325838001874 0.158050554990768421514957253748 +0.29366625845432281494140625 -0.56898526847362518310546875 -0.39053325355052947998046875 +0.29366625845432281494140625 0.56898526847362518310546875 -0.39053325355052947998046875 +0.293670293688774064477797764994 -0.634082394838333063269431022491 0.0412013012915849671791157504686 +0.293670293688774064477797764994 0.634082394838333063269431022491 0.0412013012915849671791157504686 +0.293687108159065235479801003748 -0.213373804092407221011384876874 -0.823540520668029851769631477509 +0.293687108159065235479801003748 0.213373804092407221011384876874 -0.823540520668029851769631477509 +0.293844795227050814556690738755 -0.233885598182678233758480246252 0.137669599056243902035490123126 +0.293844795227050814556690738755 0.233885598182678233758480246252 0.137669599056243902035490123126 +0.293861407041549671514957253748 -0.110870549082756036929353626874 -0.154444852471351617984041126874 +0.293861407041549671514957253748 0.110870549082756036929353626874 -0.154444852471351617984041126874 +0.293862450122833240850894753748 -0.161091345548629749639957253748 -0.100967295467853546142578125 +0.293862450122833240850894753748 0.161091345548629749639957253748 -0.100967295467853546142578125 +0.2938930094242095947265625 -0.4045085012912750244140625 0 +0.2938930094242095947265625 0.4045085012912750244140625 0 +0.293943309783935513568309261245 -0.633387285470962457800681022491 -0.0491749979555606842041015625 +0.293943309783935513568309261245 0.633387285470962457800681022491 -0.0491749979555606842041015625 +0.294010806083679188116519753748 -0.521834993362426780016960492503 0.0352967999875545487831196567186 +0.294010806083679188116519753748 0.521834993362426780016960492503 0.0352967999875545487831196567186 +0.294039291143417369500667746252 -0.0478833004832267747352680942186 0.0353273995220661149452290317186 +0.294039291143417369500667746252 0.0478833004832267747352680942186 0.0353273995220661149452290317186 +0.294250506162643421514957253748 -0.436681813001632723736378238755 -0.729880195856094426964943977509 +0.294250506162643421514957253748 0.436681813001632723736378238755 -0.729880195856094426964943977509 +0.2943690121173858642578125 -0.264149010181427001953125 0.918461978435516357421875 +0.2943690121173858642578125 0.264149010181427001953125 0.918461978435516357421875 +0.294379806518554665295539507497 -0.521120417118072443152243522491 -0.0421187996864318819900674384371 +0.294379806518554665295539507497 0.521120417118072443152243522491 -0.0421187996864318819900674384371 +0.2944762408733367919921875 -0.58788000047206878662109375 0.360804744064807891845703125 +0.2944762408733367919921875 0.58788000047206878662109375 0.360804744064807891845703125 +0.294538402557373069079460492503 -0.25383079051971435546875 -0.0938996016979217612563601846887 +0.294538402557373069079460492503 0.25383079051971435546875 -0.0938996016979217612563601846887 +0.29459249973297119140625 -0.2822544872760772705078125 0.289045989513397216796875 +0.29459249973297119140625 0.2822544872760772705078125 0.289045989513397216796875 +0.294598996639251708984375 -0.3717465102672576904296875 -0.158164501190185546875 +0.294598996639251708984375 0.3717465102672576904296875 -0.158164501190185546875 +0.294604706764221180304019753748 -0.47316946089267730712890625 -0.334392508864402804302784488755 +0.294604706764221180304019753748 0.47316946089267730712890625 -0.334392508864402804302784488755 +0.29460799694061279296875 -0.066535003483295440673828125 0.39847099781036376953125 +0.29460799694061279296875 0.066535003483295440673828125 0.39847099781036376953125 +0.294626808166503939556690738755 -0.115970003604888918791182561563 -0.244429993629455583059595369377 +0.294626808166503939556690738755 0.115970003604888918791182561563 -0.244429993629455583059595369377 +0.294872638583183299676448996252 -0.795642498135566644812399772491 0.0500361014157533617874307196871 +0.294872638583183299676448996252 0.795642498135566644812399772491 0.0500361014157533617874307196871 +0.294880247116088844983039507497 -0.0482825011014938326736611884371 -0.182248142361640913522435880623 +0.294880247116088844983039507497 0.0482825011014938326736611884371 -0.182248142361640913522435880623 +0.294927603006362892834602007497 -0.397703397274017322882144753748 0.338894999027252175061164507497 +0.294927603006362892834602007497 0.397703397274017322882144753748 0.338894999027252175061164507497 +0.294976794719696011615184261245 -0.164813393354415888003572376874 -0.495807588100433349609375 +0.294976794719696011615184261245 0.164813393354415888003572376874 -0.495807588100433349609375 +0.295014595985412575451789507497 -0.0122030999511480321012557581639 0.0530799016356468186805805942186 +0.295014595985412575451789507497 0.0122030999511480321012557581639 0.0530799016356468186805805942186 +0.29505975544452667236328125 -0.030505500733852386474609375 -0.68884648382663726806640625 +0.29505975544452667236328125 0.030505500733852386474609375 -0.68884648382663726806640625 +0.29509414732456207275390625 -0.57915389537811279296875 0 +0.29509414732456207275390625 0.57915389537811279296875 0 +0.2951777875423431396484375 -0.794860500097274713660056022491 -0.059723548591136932373046875 +0.2951777875423431396484375 0.794860500097274713660056022491 -0.059723548591136932373046875 +0.295184803009033214227230246252 -0.105632400512695318051115123126 0.248410391807556168997095369377 +0.295184803009033214227230246252 0.105632400512695318051115123126 0.248410391807556168997095369377 +0.295197299122810397076221988755 -0.707138979434967063220085492503 -0.472031986713409457134815738755 +0.295197299122810397076221988755 0.707138979434967063220085492503 -0.472031986713409457134815738755 +0.295202690362930286749332253748 -0.326384094357490550653011496252 0.0939608998596668243408203125 +0.295202690362930286749332253748 0.326384094357490550653011496252 0.0939608998596668243408203125 +0.29526960849761962890625 0 0.269844007492065440789730246252 +0.295320856571197554174545985006 -0.169209696352481842041015625 -0.432034337520599387438835492503 +0.295320856571197554174545985006 0.169209696352481842041015625 -0.432034337520599387438835492503 +0.295480394363403342516960492503 -0.19428360462188720703125 0.186936795711517333984375 +0.295480394363403342516960492503 0.19428360462188720703125 0.186936795711517333984375 +0.295527601242065451891960492503 -0.214712405204772971423210492503 0.162978398799896256887720369377 +0.295527601242065451891960492503 0.214712405204772971423210492503 0.162978398799896256887720369377 +0.295540699362754843981804242503 -0.573844048380851790014389735006 0.07654334791004657745361328125 +0.295540699362754843981804242503 0.573844048380851790014389735006 0.07654334791004657745361328125 +0.295582947134971629754573996252 -0.146487598121166240350277121252 0.30605895817279815673828125 +0.295582947134971629754573996252 0.146487598121166240350277121252 0.30605895817279815673828125 +0.295628809928894065173210492503 -0.5690224170684814453125 0.4783480167388916015625 +0.295628809928894065173210492503 0.5690224170684814453125 0.4783480167388916015625 +0.295756497979164145739616742503 -0.571572932600975081030014735006 -0.0912808001041412325760049384371 +0.295756497979164145739616742503 0.571572932600975081030014735006 -0.0912808001041412325760049384371 +0.295819196105003345831363503748 -0.104602953046560295802258622189 -0.3225667476654052734375 +0.295819196105003345831363503748 0.104602953046560295802258622189 -0.3225667476654052734375 +0.29583299160003662109375 -0.449870395660400379522769753748 0.264763194322586048468082253748 +0.29583299160003662109375 0.449870395660400379522769753748 0.264763194322586048468082253748 +0.296014505624771107061832253748 -0.0246966004371643073345143903907 -0.0420176982879638671875 +0.296014505624771107061832253748 0.0246966004371643073345143903907 -0.0420176982879638671875 +0.296037515997886691021534488755 -0.412188696861267134252670985006 0.212043152749538443835319867503 +0.296037515997886691021534488755 0.412188696861267134252670985006 0.212043152749538443835319867503 +0.29607999324798583984375 -0.3511539995670318603515625 0.19755350053310394287109375 +0.29607999324798583984375 0.3511539995670318603515625 0.19755350053310394287109375 +0.296183708310127247198551003748 -0.791407817602157614977897992503 -0.309756597876548800396534488755 +0.296183708310127247198551003748 0.791407817602157614977897992503 -0.309756597876548800396534488755 +0.296268004179000843389957253748 -0.568516182899475031042868522491 -0.28109548985958099365234375 +0.296268004179000843389957253748 0.568516182899475031042868522491 -0.28109548985958099365234375 +0.296306705474853493420539507497 -0.0469296008348464924186949076557 0 +0.296306705474853493420539507497 0.0469296008348464924186949076557 0 +0.296330651640892006604133257497 -0.1796805560588836669921875 0.04902064800262451171875 +0.296330651640892006604133257497 0.1796805560588836669921875 0.04902064800262451171875 +0.296359002590179443359375 -0.0686049006879329570374181912484 0.173103354871273040771484375 +0.296359002590179443359375 0.0686049006879329570374181912484 0.173103354871273040771484375 +0.296394757926464080810546875 -0.43084050714969635009765625 0.53761200606822967529296875 +0.296394757926464080810546875 0.43084050714969635009765625 0.53761200606822967529296875 +0.29647529125213623046875 -0.297396442294120821880909488755 -0.161733596026897435971036998126 +0.29647529125213623046875 0.297396442294120821880909488755 -0.161733596026897435971036998126 +0.296524438261985767706363503748 -0.785785862803459078662626779987 -0.443975852429866757464793636245 +0.296524438261985767706363503748 0.785785862803459078662626779987 -0.443975852429866757464793636245 +0.296596851944923411981136496252 -0.349015697836875971038494981258 -0.304497054219245943951221988755 +0.296596851944923411981136496252 0.349015697836875971038494981258 -0.304497054219245943951221988755 +0.2966479957103729248046875 -0.912980973720550537109375 -0.28011798858642578125 +0.2966479957103729248046875 0.912980973720550537109375 -0.28011798858642578125 +0.296667900681495677606136496252 -0.178804796934127818719417746252 -0.287257504463195811883480246252 +0.296667900681495677606136496252 0.178804796934127818719417746252 -0.287257504463195811883480246252 +0.296900799870491005627570757497 -0.0230359494686126695106587192186 0.183900153636932350842414507497 +0.296900799870491005627570757497 0.0230359494686126695106587192186 0.183900153636932350842414507497 +0.296928298473358165399105246252 -0.0243423007428646073768696567186 0.0352290004491805988640074076557 +0.296928298473358165399105246252 0.0243423007428646073768696567186 0.0352290004491805988640074076557 +0.296950158476829484399672764994 -0.180641296505928028448551003748 -0.0411008499562740270416583143742 +0.296950158476829484399672764994 0.180641296505928028448551003748 -0.0411008499562740270416583143742 +0.296953308582305897100894753748 -0.387356203794479325708266514994 -0.501771205663681052477897992503 +0.296953308582305897100894753748 0.387356203794479325708266514994 -0.501771205663681052477897992503 +0.297014203667640641626235264994 -0.0241990007460117333148996721093 -0.183567306399345375744758257497 +0.297014203667640641626235264994 0.0241990007460117333148996721093 -0.183567306399345375744758257497 +0.297022801637649547235042746252 0 -0.0421607986092567416092080634371 +0.297094506025314342156917746252 -0.035926200449466705322265625 -0.0210749991238117218017578125 +0.297094506025314342156917746252 0.035926200449466705322265625 -0.0210749991238117218017578125 +0.297226496040821075439453125 -0.711914786696434043200554242503 0.554377233982086159436164507497 +0.297226496040821075439453125 0.711914786696434043200554242503 0.554377233982086159436164507497 +0.297329485416412353515625 -0.297444999217987060546875 -0.2704105079174041748046875 +0.297329485416412353515625 0.297444999217987060546875 -0.2704105079174041748046875 +0.297341698408126797747996761245 -0.0357230991125106825401225307814 0.0176573999226093299175222028907 +0.297341698408126797747996761245 0.0357230991125106825401225307814 0.0176573999226093299175222028907 +0.297461497783660877569644753748 -0.581567716598510697778579014994 0.251585593819618202893195757497 +0.297461497783660877569644753748 0.581567716598510697778579014994 0.251585593819618202893195757497 +0.297726106643676713403579014994 -0.216307708621025079898103626874 -0.595457804203033402856704014994 +0.297726106643676713403579014994 0.216307708621025079898103626874 -0.595457804203033402856704014994 +0.29772679507732391357421875 0 -0.184007591009139992443977007497 +0.297805011272430419921875 -0.066565997898578643798828125 0.952302992343902587890625 +0.297805011272430419921875 0.066565997898578643798828125 0.952302992343902587890625 +0.297823405265808083264289507497 -0.121152848005294785926899692186 0.138287095725536324231086382497 +0.297823405265808083264289507497 0.121152848005294785926899692186 0.138287095725536324231086382497 +0.297834607958793629034488503748 -0.467249304056167547027911268742 0.427753198146820057257144753748 +0.297834607958793629034488503748 0.467249304056167547027911268742 0.427753198146820057257144753748 +0.297854161262512240337940738755 -0.338498595356941267553452235006 0.314962458610534679070980246252 +0.297854161262512240337940738755 0.338498595356941267553452235006 0.314962458610534679070980246252 +0.297910505533218350482371761245 0 0.0353456988930702167839292826557 +0.297970390319824252056690738755 -0.0530276000499725341796875 0.26153719425201416015625 +0.297970390319824252056690738755 0.0530276000499725341796875 0.26153719425201416015625 +0.298041890561580646856754128748 -0.270134150981903076171875 -0.510586035251617498254006477509 +0.298041890561580646856754128748 0.270134150981903076171875 -0.510586035251617498254006477509 +0.2980425059795379638671875 -0.16617000102996826171875 0.3654564917087554931640625 +0.2980425059795379638671875 0.16617000102996826171875 0.3654564917087554931640625 +0.298219358921051058697315738755 -0.261920449137687694207698996252 -0.380740261077880892681690738755 +0.298219358921051058697315738755 0.261920449137687694207698996252 -0.380740261077880892681690738755 +0.298272156715393088610710492503 -0.327580654621124289782585492503 -0.0788953475654125269134198106258 +0.298272156715393088610710492503 0.327580654621124289782585492503 -0.0788953475654125269134198106258 +0.298424699902534451556590511245 -0.182873594760894764288394753748 0 +0.298424699902534451556590511245 0.182873594760894764288394753748 0 +0.298538398742675792352230246252 -0.707806396484375044408920985006 -0.223348808288574229852230246252 +0.298538398742675792352230246252 0.707806396484375044408920985006 -0.223348808288574229852230246252 +0.2985970079898834228515625 -0.21694099903106689453125 -0.337307512760162353515625 +0.2985970079898834228515625 0.21694099903106689453125 -0.337307512760162353515625 +0.298839612305164314953742632497 -0.309250661730766263080028011245 0.847088414430618219519431022491 +0.298839612305164314953742632497 0.309250661730766263080028011245 0.847088414430618219519431022491 +0.298851750791072845458984375 -0.340488754212856292724609375 -0.5977080166339874267578125 +0.298851750791072845458984375 0.340488754212856292724609375 -0.5977080166339874267578125 +0.298935653269290946276726117503 -0.217189045250415796450838001874 0.534758231043815590588508257497 +0.298935653269290946276726117503 0.217189045250415796450838001874 0.534758231043815590588508257497 +0.299001896381378140521434261245 -0.0123897001147270195697824846093 -0.02107889950275421142578125 +0.299001896381378140521434261245 0.0123897001147270195697824846093 -0.02107889950275421142578125 +0.299075102806091286389289507497 -0.0235374011099338531494140625 0 +0.299075102806091286389289507497 0.0235374011099338531494140625 0 +0.2991054952144622802734375 -0.3283084928989410400390625 0.22967250645160675048828125 +0.2991054952144622802734375 0.3283084928989410400390625 0.22967250645160675048828125 +0.299207302927970875128238503748 -0.046696297824382781982421875 0.631105315685272172387954014994 +0.299207302927970875128238503748 0.046696297824382781982421875 0.631105315685272172387954014994 +0.299231100082397449835269753748 -0.0122024998068809512746790701954 0.0176598004996776566932759067186 +0.299231100082397449835269753748 0.0122024998068809512746790701954 0.0176598004996776566932759067186 +0.299416607618331886975227007497 -0.125378401577472681216463001874 -0.130881448090076429879857755623 +0.299416607618331886975227007497 0.125378401577472681216463001874 -0.130881448090076429879857755623 +0.299596488475799560546875 -0.13531099259853363037109375 -0.3767400085926055908203125 +0.299596488475799560546875 0.13531099259853363037109375 -0.3767400085926055908203125 +0.299700003862380992547542746252 -0.143649002909660344906583873126 -0.836387979984283491674545985006 +0.299700003862380992547542746252 0.143649002909660344906583873126 -0.836387979984283491674545985006 +0.2997950017452239990234375 -0.708965003490447998046875 0.638351023197174072265625 +0.2997950017452239990234375 0.708965003490447998046875 0.638351023197174072265625 +0.299815201759338401110710492503 -0.152686405181884782278345369377 -0.216328001022338872738615123126 +0.299815201759338401110710492503 0.152686405181884782278345369377 -0.216328001022338872738615123126 +0.299864006042480479852230246252 -0.237956809997558610403345369377 -0.116009199619293221217297684689 +0.299864006042480479852230246252 0.237956809997558610403345369377 -0.116009199619293221217297684689 +0.299952793121337879522769753748 -0.25863039493560791015625 0.05602359771728515625 +0.299952793121337879522769753748 0.25863039493560791015625 0.05602359771728515625 +0.299979057908058122094985264994 -0.164819902181625344006477007497 0.0731230489909648895263671875 +0.299979057908058122094985264994 0.164819902181625344006477007497 0.0731230489909648895263671875 +0.2999981939792633056640625 -0.118934395909309376104801003748 -0.505822205543518088610710492503 +0.2999981939792633056640625 0.118934395909309376104801003748 -0.505822205543518088610710492503 +0.299999999999999988897769753748 0 0 +0.300044855475425698010383257497 -0.0865626975893974276443643134371 -0.158050899207591993844701505623 +0.300044855475425698010383257497 0.0865626975893974276443643134371 -0.158050899207591993844701505623 +0.30004920065402984619140625 -0.217995746433734899349943248126 -0.254849848151206981317073996252 +0.30004920065402984619140625 0.217995746433734899349943248126 -0.254849848151206981317073996252 +0.300079786777496304583934261245 -0.443329203128814686163394753748 -0.270945006608962979388621761245 +0.300079786777496304583934261245 0.443329203128814686163394753748 -0.270945006608962979388621761245 +0.300164401531219482421875 -0.278526002168655362201121761245 0.438548398017883311883480246252 +0.300164401531219482421875 0.278526002168655362201121761245 0.438548398017883311883480246252 +0.30026149749755859375 -0.303411006927490234375 0.2603549957275390625 +0.30026149749755859375 0.303411006927490234375 0.2603549957275390625 +0.300323009490966796875 -0.924305021762847900390625 0.23551499843597412109375 +0.300323009490966796875 0.924305021762847900390625 0.23551499843597412109375 +0.300417536497116055560496761245 -0.671745938062667802270766514994 -0.60083796083927154541015625 +0.300417536497116055560496761245 0.671745938062667802270766514994 -0.60083796083927154541015625 +0.300493058562278758660823996252 -0.448927614092826887670639735006 0.103285052627325069085628683752 +0.300493058562278758660823996252 0.448927614092826887670639735006 0.103285052627325069085628683752 +0.300497406721115078997996761245 -0.135354451835155487060546875 0.117814904451370230931139815311 +0.300497406721115078997996761245 0.135354451835155487060546875 0.117814904451370230931139815311 +0.300535413622856184545639735006 -0.408920603990554853979233485006 -0.212043693661689763851896373126 +0.300535413622856184545639735006 0.408920603990554853979233485006 -0.212043693661689763851896373126 +0.300707092881202731060596988755 -0.807119983434677168432358485006 0.261020699143409751208366742503 +0.300707092881202731060596988755 0.807119983434677168432358485006 0.261020699143409751208366742503 +0.300780797004699729235710492503 -0.717120790481567405016960492503 0.187799203395843522512720369377 +0.300780797004699729235710492503 0.717120790481567405016960492503 0.187799203395843522512720369377 +0.300807890295982371942073996252 -0.0892512023448944064041299384371 0.322565862536430381091179242503 +0.300807890295982371942073996252 0.0892512023448944064041299384371 0.322565862536430381091179242503 +0.300823795795440662725894753748 -0.421225798130035411492855246252 0.303436195850372292248664507497 +0.300823795795440662725894753748 0.421225798130035411492855246252 0.303436195850372292248664507497 +0.3008987903594970703125 -0.0880451977252960232833700615629 -0.248410797119140630551115123126 +0.3008987903594970703125 0.0880451977252960232833700615629 -0.248410797119140630551115123126 +0.30094559490680694580078125 -0.0299718014895915992046315778907 0.333216887712478648797542746252 +0.30094559490680694580078125 0.0299718014895915992046315778907 0.333216887712478648797542746252 +0.301008391380310047491519753748 -0.324947002530097950323551003748 0.542036604881286576684829014994 +0.301008391380310047491519753748 0.324947002530097950323551003748 0.542036604881286576684829014994 +0.301041001081466697009147992503 -0.277952411770820639880241742503 -0.186055652797222137451171875 +0.301041001081466697009147992503 0.277952411770820639880241742503 -0.186055652797222137451171875 +0.301072406768798872533920985006 -0.129944396018981944695980246252 0.2290627956390380859375 +0.301072406768798872533920985006 0.129944396018981944695980246252 0.2290627956390380859375 +0.301118397712707541735710492503 -0.186260402202606201171875 -0.186103999614715576171875 +0.301118397712707541735710492503 0.186260402202606201171875 -0.186103999614715576171875 +0.301137006282806374279914507497 -0.268182599544525113177684261245 -0.444291007518768321649105246252 +0.301137006282806374279914507497 0.268182599544525113177684261245 -0.444291007518768321649105246252 +0.30119359493255615234375 -0.641199207305908291942841970013 -0.371679997444152865337940738755 +0.30119359493255615234375 0.641199207305908291942841970013 -0.371679997444152865337940738755 +0.301216411590576216283920985006 -0.258963990211486805304019753748 -0.0469723999500274713714276231258 +0.301216411590576216283920985006 0.258963990211486805304019753748 -0.0469723999500274713714276231258 +0.301377606391906749383480246252 -0.21896159648895263671875 -0.707974386215210027550881477509 +0.301377606391906749383480246252 0.21896159648895263671875 -0.707974386215210027550881477509 +0.3014700114727020263671875 -0.386287510395050048828125 0.099486999213695526123046875 +0.3014700114727020263671875 0.386287510395050048828125 0.099486999213695526123046875 +0.3014774024486541748046875 0 0.177795457839965809210269753748 +0.301494598388671875 -0.387189015746116693694744981258 0.248366256058216106072933371252 +0.301494598388671875 0.387189015746116693694744981258 0.248366256058216106072933371252 +0.301579603552818265033153011245 -0.166677348315715789794921875 -0.0613875500857829978218482835928 +0.301579603552818265033153011245 0.166677348315715789794921875 -0.0613875500857829978218482835928 +0.301594452559947934222606136245 -0.624570661783218405993522992503 -0.491378182172775235247996761245 +0.301594452559947934222606136245 0.624570661783218405993522992503 -0.491378182172775235247996761245 +0.301631402969360307153579014994 -0.148862698674201959780916126874 0.0967386022210121043762853787484 +0.301631402969360307153579014994 0.148862698674201959780916126874 0.0967386022210121043762853787484 +0.301644742488861083984375 -0.446692401170730613024772992503 -0.109436248242855083123714621252 +0.301644742488861083984375 0.446692401170730613024772992503 -0.109436248242855083123714621252 +0.301782605051994334832698996252 -0.737284487485885597912727007497 0.41873399913311004638671875 +0.301782605051994334832698996252 0.737284487485885597912727007497 0.41873399913311004638671875 +0.30185674130916595458984375 -0.373395106196403536724659488755 0.438131204247474703716846988755 +0.30185674130916595458984375 0.373395106196403536724659488755 0.438131204247474703716846988755 +0.301867657899856589587272992503 -0.0731056518852710723876953125 -0.325624948740005526470753238755 +0.301867657899856589587272992503 0.0731056518852710723876953125 -0.325624948740005526470753238755 +0.301868999004364035876335492503 -0.309685492515563987048210492503 0.124378202855587011166349498126 +0.301868999004364035876335492503 0.309685492515563987048210492503 0.124378202855587011166349498126 +0.302011191844940185546875 -0.366552007198333751336605246252 -0.366645598411560025287059261245 +0.302011191844940185546875 0.366552007198333751336605246252 -0.366645598411560025287059261245 +0.302030949294567141460987613755 -0.379395237565040621685596988755 -0.432823953032493602410823996252 +0.302030949294567141460987613755 0.379395237565040621685596988755 -0.432823953032493602410823996252 +0.3021262586116790771484375 -0.46438501775264739990234375 -0.50553600490093231201171875 +0.3021262586116790771484375 0.46438501775264739990234375 -0.50553600490093231201171875 +0.302156558632850680279346988755 -0.173783245682716386282251619377 0.284606543183326732293636496252 +0.302156558632850680279346988755 0.173783245682716386282251619377 0.284606543183326732293636496252 +0.302335536479949984478565738755 -0.110201302915811552574076870314 0.446036815643310602386151231258 +0.302335536479949984478565738755 0.110201302915811552574076870314 0.446036815643310602386151231258 +0.302504956722259521484375 -0.219782195985317257980184990629 0.403344160318374667095753238755 +0.302504956722259521484375 0.219782195985317257980184990629 0.403344160318374667095753238755 +0.30251549184322357177734375 0 0.68628300726413726806640625 +0.3025265038013458251953125 -0.35145199298858642578125 -0.18697349727153778076171875 +0.3025265038013458251953125 0.35145199298858642578125 -0.18697349727153778076171875 +0.302676407992839846539112613755 0 0.575227910280227683337272992503 +0.302832046151161160540965511245 -0.56737415492534637451171875 0.555769932270050004419204014994 +0.302832046151161160540965511245 0.56737415492534637451171875 0.555769932270050004419204014994 +0.302907508611679032739516514994 -0.0830294474959373390854366903113 0.154444497823715193307592130623 +0.302907508611679032739516514994 0.0830294474959373390854366903113 0.154444497823715193307592130623 +0.302936591207981109619140625 -0.290214645862579334600894753748 -0.7392594516277313232421875 +0.302936591207981109619140625 0.290214645862579334600894753748 -0.7392594516277313232421875 +0.303025105595588650775340511245 -0.139070752263069141729801003748 -0.106466847658157337530582253748 +0.303025105595588650775340511245 0.139070752263069141729801003748 -0.106466847658157337530582253748 +0.3032720088958740234375 -0.419284820556640625 0.610103178024292036596420985006 +0.3032720088958740234375 0.419284820556640625 0.610103178024292036596420985006 +0.303383153676986649927016514994 -0.0459200002253055544754190009371 0.168374504148960102423160378748 +0.303383153676986649927016514994 0.0459200002253055544754190009371 0.168374504148960102423160378748 +0.303427183628082242083934261245 -0.0718518018722534151931924384371 -0.512609982490539572985710492503 +0.303427183628082242083934261245 0.0718518018722534151931924384371 -0.512609982490539572985710492503 +0.30344174802303314208984375 -0.63601948320865631103515625 -0.25671525299549102783203125 +0.30344174802303314208984375 0.63601948320865631103515625 -0.25671525299549102783203125 +0.303469400107860554083316628748 -0.539732718467712424548210492503 0.197724145650863658563167746252 +0.303469400107860554083316628748 0.539732718467712424548210492503 0.197724145650863658563167746252 +0.303485405445098888055355246252 -0.330754512548446677477897992503 0.0315890997648239149619975307814 +0.303485405445098888055355246252 0.330754512548446677477897992503 0.0315890997648239149619975307814 +0.303726494312286376953125 -0.385919511318206787109375 -0.093895502388477325439453125 +0.303726494312286376953125 0.385919511318206787109375 -0.093895502388477325439453125 +0.303732658922672260626285378748 -0.5313880145549774169921875 -0.218799747526645660400390625 +0.303732658922672260626285378748 0.5313880145549774169921875 -0.218799747526645660400390625 +0.303748497366905234606804242503 -0.360801649093627940789730246252 0.282947507500648509637386496252 +0.303748497366905234606804242503 0.360801649093627940789730246252 0.282947507500648509637386496252 +0.3038280010223388671875 -0.220742011070251487048210492503 -0.1377007961273193359375 +0.3038280010223388671875 0.220742011070251487048210492503 -0.1377007961273193359375 +0.303839108347892794537159488755 -0.0730259969830513028243856865629 -0.844007384777069158410256477509 +0.303839108347892794537159488755 0.0730259969830513028243856865629 -0.844007384777069158410256477509 +0.303952789306640658306690738755 -0.543125581741333074425881477509 -0.5026199817657470703125 +0.303952789306640658306690738755 0.543125581741333074425881477509 -0.5026199817657470703125 +0.303972306847572315557926003748 -0.257422488927841197625667746252 -0.209366999566555023193359375 +0.303972306847572315557926003748 0.257422488927841197625667746252 -0.209366999566555023193359375 +0.304037404060363780633480246252 -0.159841203689575189761384876874 0.491947209835052468029914507497 +0.304037404060363780633480246252 0.159841203689575189761384876874 0.491947209835052468029914507497 +0.304080748558044455798210492503 -0.330656853318214427606136496252 -0.0264725999906659133220632185157 +0.304080748558044455798210492503 0.330656853318214427606136496252 -0.0264725999906659133220632185157 +0.304162788391113325658920985006 -0.259778809547424327508480246252 0 +0.304162788391113325658920985006 0.259778809547424327508480246252 0 +0.304397800564765896869090511245 -0.163408696651458740234375 -0.608801901340484619140625 +0.304397800564765896869090511245 0.163408696651458740234375 -0.608801901340484619140625 +0.30446989834308624267578125 -0.0628575488924980191329794365629 -0.160770399868488289563117632497 +0.30446989834308624267578125 0.0628575488924980191329794365629 -0.160770399868488289563117632497 +0.304572796821594271587940738755 -0.661686420440673828125 0.33076560497283935546875 +0.304572796821594271587940738755 0.661686420440673828125 0.33076560497283935546875 +0.304662743210792508197215511245 -0.151859053969383234194978626874 -0.0813595995306968661209268134371 +0.304662743210792508197215511245 0.151859053969383234194978626874 -0.0813595995306968661209268134371 +0.304777106642723061291633257497 -0.126151447743177408389314564374 0.890896683931350685803352007497 +0.304777106642723061291633257497 0.126151447743177408389314564374 0.890896683931350685803352007497 +0.304844400286674532818409488755 0 -0.846800100803375310754006477509 +0.304864194989204417840511496252 -0.354719701409339893682926003748 0.768915885686874411852897992503 +0.304864194989204417840511496252 0.354719701409339893682926003748 0.768915885686874411852897992503 +0.304914137721061739849659488755 -0.03667500056326389312744140625 -0.32891084253787994384765625 +0.304914137721061739849659488755 0.03667500056326389312744140625 -0.32891084253787994384765625 +0.304999804496765114514289507497 -0.185861209034919733218416126874 0.602022415399551369397102007497 +0.304999804496765114514289507497 0.185861209034919733218416126874 0.602022415399551369397102007497 +0.305049610137939464227230246252 -0.417993593215942427221420985006 -0.610103178024292036596420985006 +0.305049610137939464227230246252 0.417993593215942427221420985006 -0.610103178024292036596420985006 +0.30505089461803436279296875 -0.169821748137474054507478626874 0.02458749897778034210205078125 +0.30505089461803436279296875 0.169821748137474054507478626874 0.02458749897778034210205078125 +0.305078411102294944079460492503 -0.153444397449493424856470369377 0.208283591270446793997095369377 +0.305078411102294944079460492503 0.153444397449493424856470369377 0.208283591270446793997095369377 +0.30510149896144866943359375 -0.1489342488348484039306640625 0.6687540113925933837890625 +0.30510149896144866943359375 0.1489342488348484039306640625 0.6687540113925933837890625 +0.305140185356140125616519753748 -0.0247787989675998694683034528907 -0.516019213199615411902243522491 +0.305140185356140125616519753748 0.0247787989675998694683034528907 -0.516019213199615411902243522491 +0.305144709348678544458266514994 -0.170182946324348438604801003748 -0.0206006506457924835895578752343 +0.305144709348678544458266514994 0.170182946324348438604801003748 -0.0206006506457924835895578752343 +0.305196109414100691381577235006 -0.131270150840282456838892244377 -0.438319212198257479595753238755 +0.305196109414100691381577235006 0.131270150840282456838892244377 -0.438319212198257479595753238755 +0.305209797620773326531917746252 0 0.846668726205825783459602007497 +0.305236005783081076891960492503 -0.06061840057373046875 -0.251309609413147005962940738755 +0.305236005783081076891960492503 0.06061840057373046875 -0.251309609413147005962940738755 +0.305277013778686490130809261245 -0.495104992389678921771434261245 0.147232201695442183053685880623 +0.305277013778686490130809261245 0.495104992389678921771434261245 0.147232201695442183053685880623 +0.305547811090946197509765625 -0.714147916436195351330695757497 -0.345156961679458584857371761245 +0.305547811090946197509765625 0.714147916436195351330695757497 -0.345156961679458584857371761245 +0.3056128025054931640625 -0.599507188796997048108039507497 0.432656812667846724096420985006 +0.3056128025054931640625 0.599507188796997048108039507497 0.432656812667846724096420985006 +0.305812489986419633325454014994 -0.496276211738586381372329014994 0.387541705369949307513621761245 +0.305812489986419633325454014994 0.496276211738586381372329014994 0.387541705369949307513621761245 +0.305931606888771079333366742503 0 -0.330008858442306540759147992503 +0.305952012538909912109375 -0.94161701202392578125 -0.14053599536418914794921875 +0.305952012538909912109375 0.94161701202392578125 -0.14053599536418914794921875 +0.306004497408866871221988503748 -0.816854658722877435828024772491 0.376311151683330513684211382497 +0.306004497408866871221988503748 0.816854658722877435828024772491 0.376311151683330513684211382497 +0.306029391288757335320980246252 -0.490512585639953591076789507497 -0.160447794198989857061832253748 +0.306029391288757335320980246252 0.490512585639953591076789507497 -0.160447794198989857061832253748 +0.306058502197265658306690738755 -0.584497815370559670178352007497 -0.612119686603546209191506477509 +0.306058502197265658306690738755 0.584497815370559670178352007497 -0.612119686603546209191506477509 +0.306147193908691439556690738755 -0.739103221893310569079460492503 0 +0.306147193908691439556690738755 0.739103221893310569079460492503 0 +0.306261008977890047955128238755 -0.148770453035831445864900501874 -0.294230711460113536492855246252 +0.306261008977890047955128238755 0.148770453035831445864900501874 -0.294230711460113536492855246252 +0.3063299953937530517578125 -0.19706650078296661376953125 0.3425300121307373046875 +0.3063299953937530517578125 0.19706650078296661376953125 0.3425300121307373046875 +0.306334057450294516833366742503 -0.455645841360092174188167746252 0.0323488004505634307861328125 +0.306334057450294516833366742503 0.455645841360092174188167746252 0.0323488004505634307861328125 +0.30634200572967529296875 -0.242990398406982444079460492503 0.0843216001987457386412927462516 +0.30634200572967529296875 0.242990398406982444079460492503 0.0843216001987457386412927462516 +0.306361246109008777960269753748 -0.3917463123798370361328125 0.689331296086311273718649772491 +0.306361246109008777960269753748 0.3917463123798370361328125 0.689331296086311273718649772491 +0.306401205062866222039730246252 -0.2025167942047119140625 -0.158446800708770763055355246252 +0.306401205062866222039730246252 0.2025167942047119140625 -0.158446800708770763055355246252 +0.306418395042419466900440738755 -0.732995176315307639391960492503 0.0939447999000549427428552462516 +0.306418395042419466900440738755 0.732995176315307639391960492503 0.0939447999000549427428552462516 +0.30652439594268798828125 -0.0793540000915527454772302462516 0.244429206848144536801115123126 +0.30652439594268798828125 0.0793540000915527454772302462516 0.244429206848144536801115123126 +0.306536257266998291015625 -0.64940325915813446044921875 0.216358490288257598876953125 +0.306536257266998291015625 0.64940325915813446044921875 0.216358490288257598876953125 +0.306565594673156749383480246252 -0.730385589599609419408920985006 -0.1120471954345703125 +0.306565594673156749383480246252 0.730385589599609419408920985006 -0.1120471954345703125 +0.306586351990699723657485264994 -0.101473753154277798738114313437 -0.134936551749706257208316628748 +0.306586351990699723657485264994 0.101473753154277798738114313437 -0.134936551749706257208316628748 +0.30659401416778564453125 -0.3052070140838623046875 -0.901580989360809326171875 +0.30659401416778564453125 0.3052070140838623046875 -0.901580989360809326171875 +0.306672865152359030993522992503 -0.454930853843688975945980246252 -0.0385973479598760646491761860943 +0.306672865152359030993522992503 0.454930853843688975945980246252 -0.0385973479598760646491761860943 +0.306674551963806163445980246252 -0.291077104210853587762386496252 0.154028695821762096063167746252 +0.306674551963806163445980246252 0.291077104210853587762386496252 0.154028695821762096063167746252 +0.306704992055892911029246761245 -0.553117591142654352331931022491 0.299987798929214455334602007497 +0.306704992055892911029246761245 0.553117591142654352331931022491 0.299987798929214455334602007497 +0.306727203726768482550113503748 -0.222847308218479173147485994377 -0.527974832057952925268295985006 +0.306727203726768482550113503748 0.222847308218479173147485994377 -0.527974832057952925268295985006 +0.306738442182540926861378238755 -0.3122005462646484375 -0.1046056486666202545166015625 +0.306738442182540926861378238755 0.3122005462646484375 -0.1046056486666202545166015625 +0.306764388084411643298210492503 -0.0264167994260787984683869211722 0.255338406562805209087940738755 +0.306764388084411643298210492503 0.0264167994260787984683869211722 0.255338406562805209087940738755 +0.3068639934062957763671875 -0.9444329738616943359375 0.11781899631023406982421875 +0.3068639934062957763671875 0.9444329738616943359375 0.11781899631023406982421875 +0.306866705417633056640625 -0.200007444620132451840177623126 0.261399587988853487896534488755 +0.306866705417633056640625 0.200007444620132451840177623126 0.261399587988853487896534488755 +0.3069165050983428955078125 -0.222985395789146445544304242503 -0.398220902681350741314503238755 +0.3069165050983428955078125 0.222985395789146445544304242503 -0.398220902681350741314503238755 +0.306977400183677695544304242503 -0.824481922388076826635483485006 -0.189723600447177898065120871252 +0.306977400183677695544304242503 0.824481922388076826635483485006 -0.189723600447177898065120871252 +0.307034987211227405889957253748 -0.558211523294448896947983485006 0.635711377859115578381477007497 +0.307034987211227405889957253748 0.558211523294448896947983485006 0.635711377859115578381477007497 +0.307179987430572509765625 -0.3929494917392730712890625 0.0350884981453418731689453125 +0.307179987430572509765625 0.3929494917392730712890625 0.0350884981453418731689453125 +0.3073770105838775634765625 -0.100592501461505889892578125 -0.3813140094280242919921875 +0.3073770105838775634765625 0.100592501461505889892578125 -0.3813140094280242919921875 +0.307463251054286956787109375 -0.299702994525432586669921875 0.6149347722530364990234375 +0.307463251054286956787109375 0.299702994525432586669921875 0.6149347722530364990234375 +0.307515257596969571185496761245 -0.03863404877483844757080078125 -0.162609300017356850354133257497 +0.307515257596969571185496761245 0.03863404877483844757080078125 -0.162609300017356850354133257497 +0.307529987394809689593699886245 -0.223433558642864210641576505623 0.760264673829078696520866742503 +0.307529987394809689593699886245 0.223433558642864210641576505623 0.760264673829078696520866742503 +0.307533407211303677630809261245 -0.49961213767528533935546875 -0.61507020890712738037109375 +0.307533407211303677630809261245 0.49961213767528533935546875 -0.61507020890712738037109375 +0.307544410228729248046875 -0.314464187622070290295539507497 0.408079791069030750616519753748 +0.307544410228729248046875 0.314464187622070290295539507497 0.408079791069030750616519753748 +0.307558354735374461785823996252 -0.03670754842460155487060546875 0.454489207267761263775440738755 +0.307558354735374461785823996252 0.03670754842460155487060546875 0.454489207267761263775440738755 +0.30761849880218505859375 -0.033354498445987701416015625 0.392756998538970947265625 +0.30761849880218505859375 0.033354498445987701416015625 0.392756998538970947265625 +0.307651805877685535772769753748 -0.416264998912811268194644753748 -0.303436195850372292248664507497 +0.307651805877685535772769753748 0.416264998912811268194644753748 -0.303436195850372292248664507497 +0.30767904222011566162109375 -0.0981109529733657781402911268742 0.134936197102069832531867632497 +0.30767904222011566162109375 0.0981109529733657781402911268742 0.134936197102069832531867632497 +0.307738205790519692151008257497 -0.540285187959670953894431022491 -0.321541509032249428479133257497 +0.307738205790519692151008257497 0.540285187959670953894431022491 -0.321541509032249428479133257497 +0.3078015148639678955078125 -0.099289499223232269287109375 0.381313502788543701171875 +0.3078015148639678955078125 0.099289499223232269287109375 0.381313502788543701171875 +0.3078935146331787109375 -0.392857491970062255859375 -0.029408000409603118896484375 +0.3078935146331787109375 0.392857491970062255859375 -0.029408000409603118896484375 +0.307967403531074546130241742503 -0.178501506149768840447933371252 0.8266157805919647216796875 +0.307967403531074546130241742503 0.178501506149768840447933371252 0.8266157805919647216796875 +0.3080120086669921875 -0.157816803455352788754240123126 -0.721264791488647527550881477509 +0.3080120086669921875 0.157816803455352788754240123126 -0.721264791488647527550881477509 +0.308012485504150390625 -0.26456451416015625 -0.29177749156951904296875 +0.308012485504150390625 0.26456451416015625 -0.29177749156951904296875 +0.3080500066280364990234375 -0.3304400146007537841796875 -0.2142769992351531982421875 +0.3080500066280364990234375 0.3304400146007537841796875 -0.2142769992351531982421875 +0.308064794540405306744190738755 -0.126708805561065673828125 -0.2214519977569580078125 +0.308064794540405306744190738755 0.126708805561065673828125 -0.2214519977569580078125 +0.308085989952087413445980246252 -0.03289639949798583984375 -0.252983999252319347039730246252 +0.308085989952087413445980246252 0.03289639949798583984375 -0.252983999252319347039730246252 +0.308310297131538402215511496252 -0.8304137885570526123046875 0.15924060344696044921875 +0.308310297131538402215511496252 0.8304137885570526123046875 0.15924060344696044921875 +0.308399292826652571264389735006 -0.385339358448982260973991742503 -0.242699594795703910143913617503 +0.308399292826652571264389735006 0.385339358448982260973991742503 -0.242699594795703910143913617503 +0.30849064886569976806640625 -0.747108501195907548364516514994 0.499161353707313515393195757497 +0.30849064886569976806640625 0.747108501195907548364516514994 0.499161353707313515393195757497 +0.30861198902130126953125 -0.552411973476409912109375 -0.7743380069732666015625 +0.30861198902130126953125 0.552411973476409912109375 -0.7743380069732666015625 +0.3086329996585845947265625 -0.519254028797149658203125 0.79694497585296630859375 +0.3086329996585845947265625 0.519254028797149658203125 0.79694497585296630859375 +0.308648250997066497802734375 -0.466715991497039794921875 0.49941225349903106689453125 +0.308648250997066497802734375 0.466715991497039794921875 0.49941225349903106689453125 +0.3086659908294677734375 -0.244369196891784684622095369377 -0.070773601531982421875 +0.3086659908294677734375 0.244369196891784684622095369377 -0.070773601531982421875 +0.308729687333107016833366742503 -0.372840303182601917608707253748 -0.758733308315277077404914507497 +0.308729687333107016833366742503 0.372840303182601917608707253748 -0.758733308315277077404914507497 +0.308737841248512279168636496252 -0.0566134028136730180214009067186 0.789921170473098732678352007497 +0.308737841248512279168636496252 0.0566134028136730180214009067186 0.789921170473098732678352007497 +0.3087975978851318359375 -0.106604003906250008326672684689 0.730259990692138760692841970013 +0.3087975978851318359375 0.106604003906250008326672684689 0.730259990692138760692841970013 +0.308955502510070756372329014994 -0.02301494963467121124267578125 0.162839601933956135138004128748 +0.308955502510070756372329014994 0.02301494963467121124267578125 0.162839601933956135138004128748 +0.309017002582550048828125 -0.951056003570556640625 0 +0.309017002582550048828125 0.951056003570556640625 0 +0.309089893102645840716746761245 -0.0144368004053831086586079379686 -0.163569352030754067151008257497 +0.309089893102645840716746761245 0.0144368004053831086586079379686 -0.163569352030754067151008257497 +0.309133195877075217516960492503 0 -0.253843998908996615337940738755 +0.309192803502082780298110264994 -0.109502401947975155915848688437 -0.6183926165103912353515625 +0.309192803502082780298110264994 0.109502401947975155915848688437 -0.6183926165103912353515625 +0.309250688552856478619190738755 -0.314185315370559714587272992503 -0.32886426150798797607421875 +0.309250688552856478619190738755 0.314185315370559714587272992503 -0.32886426150798797607421875 +0.30926139652729034423828125 -0.453184187412261907379473768742 -0.434719604253768876489516514994 +0.30926139652729034423828125 0.453184187412261907379473768742 -0.434719604253768876489516514994 +0.309368935227394115106136496252 -0.0885516464710235651214276231258 -0.446037340164184614721420985006 +0.309368935227394115106136496252 0.0885516464710235651214276231258 -0.446037340164184614721420985006 +0.309400744736194610595703125 -0.542579197883605979235710492503 0.715806922316551186291633257497 +0.309400744736194610595703125 0.542579197883605979235710492503 0.715806922316551186291633257497 +0.30958874523639678955078125 -0.270674559473991382940738503748 0.182729700207710260562166126874 +0.30958874523639678955078125 0.270674559473991382940738503748 0.182729700207710260562166126874 +0.309685063362121593133480246252 -0.224998645484447479248046875 0.236581188440322887078792746252 +0.309685063362121593133480246252 0.224998645484447479248046875 0.236581188440322887078792746252 +0.309716391563415516241519753748 -0.225019204616546619757144753748 -0.461997592449188199115184261245 +0.309716391563415516241519753748 0.225019204616546619757144753748 -0.461997592449188199115184261245 +0.309731197357177745477230246252 -0.265871191024780295641960492503 0.688025617599487326891960492503 +0.309731197357177745477230246252 0.265871191024780295641960492503 0.688025617599487326891960492503 +0.3097419440746307373046875 -0.155383896827697737252904630623 0.0491508506238460540771484375 +0.3097419440746307373046875 0.155383896827697737252904630623 0.0491508506238460540771484375 +0.30977939069271087646484375 -0.340363806486129738537727007497 -0.527436012029647738330595529987 +0.30977939069271087646484375 0.340363806486129738537727007497 -0.527436012029647738330595529987 +0.309876747429370880126953125 -0.287008501589298248291015625 -0.6197602450847625732421875 +0.309876747429370880126953125 0.287008501589298248291015625 -0.6197602450847625732421875 +0.309948503971099853515625 -0.3688555061817169189453125 0.13370649516582489013671875 +0.309948503971099853515625 0.3688555061817169189453125 0.13370649516582489013671875 +0.310003058612346615863231136245 -0.225227904319763166940404630623 -0.869292771816253639904914507497 +0.310003058612346615863231136245 0.225227904319763166940404630623 -0.869292771816253639904914507497 +0.3102349936962127685546875 -0.184256494045257568359375 -0.3461270034313201904296875 +0.3102349936962127685546875 0.184256494045257568359375 -0.3461270034313201904296875 +0.310279202461242686883480246252 -0.170852804183959983141960492503 0.185839200019836447985710492503 +0.310279202461242686883480246252 0.170852804183959983141960492503 0.185839200019836447985710492503 +0.31029130518436431884765625 -0.2534829080104827880859375 0.376783013343811090667401231258 +0.31029130518436431884765625 0.2534829080104827880859375 0.376783013343811090667401231258 +0.310367041826248135638621761245 -0.156440548598766326904296875 -0.0412152994424104662796182196871 +0.310367041826248135638621761245 0.156440548598766326904296875 -0.0412152994424104662796182196871 +0.3103714883327484130859375 -0.0613990016281604766845703125 -0.3871684968471527099609375 +0.3103714883327484130859375 0.0613990016281604766845703125 -0.3871684968471527099609375 +0.310393810272216796875 0 0.32581530511379241943359375 +0.310412207245826687884715511245 -0.0603854984045028644890074076557 0.149992845952510833740234375 +0.310412207245826687884715511245 0.0603854984045028644890074076557 0.149992845952510833740234375 +0.310431146621704123766960492503 -0.11886705458164215087890625 0.303320261836051929815738503748 +0.310431146621704123766960492503 0.11886705458164215087890625 0.303320261836051929815738503748 +0.310594493150711081774772992503 -0.2486029565334320068359375 0.210303895175457000732421875 +0.310594493150711081774772992503 0.2486029565334320068359375 0.210303895175457000732421875 +0.310597756505012478900340511245 -0.460941913723945606573551003748 -0.770429095625877358166633257497 +0.310597756505012478900340511245 0.460941913723945606573551003748 -0.770429095625877358166633257497 +0.310651993751525912212940738755 -0.225700807571411143914730246252 0.1120471954345703125 +0.310651993751525912212940738755 0.225700807571411143914730246252 0.1120471954345703125 +0.310927739739418007580695757497 -0.112748304009437555484041126874 0.114506354928016654270983565311 +0.310927739739418007580695757497 0.112748304009437555484041126874 0.114506354928016654270983565311 +0.31102760136127471923828125 -0.437004092335700977667301003748 -0.367136907577514659539730246252 +0.31102760136127471923828125 0.437004092335700977667301003748 -0.367136907577514659539730246252 +0.311187809705734286236378238755 -0.430898061394691500591846988755 0.141382454335689550228849498126 +0.311187809705734286236378238755 0.430898061394691500591846988755 0.141382454335689550228849498126 +0.311212646961212147100894753748 -0.115710696578025809544421065311 -0.110714796185493458136051003748 +0.311212646961212147100894753748 0.115710696578025809544421065311 -0.110714796185493458136051003748 +0.311345641314983379022152121252 -0.735189667344093300549445757497 0.29165031015872955322265625 +0.311345641314983379022152121252 0.735189667344093300549445757497 0.29165031015872955322265625 +0.311352801322937022820980246252 -0.161339604854583762438835492503 -0.192429196834564220086605246252 +0.311352801322937022820980246252 0.161339604854583762438835492503 -0.192429196834564220086605246252 +0.311478705704212210925163617503 -0.403153386712074290887386496252 0.403668203949928305895866742503 +0.311478705704212210925163617503 0.403153386712074290887386496252 0.403668203949928305895866742503 +0.311597001552581798211605246252 -0.0452771008014678996711488423443 -0.450951609015464827123764735006 +0.311597001552581798211605246252 0.0452771008014678996711488423443 -0.450951609015464827123764735006 +0.311597149074077595098941628748 -0.746424478292465165552016514994 -0.498255985975265491827457253748 +0.311597149074077595098941628748 0.746424478292465165552016514994 -0.498255985975265491827457253748 +0.311687995493412028924495871252 -0.1302379034459590911865234375 0.555327481031417824475227007497 +0.311687995493412028924495871252 0.1302379034459590911865234375 0.555327481031417824475227007497 +0.311852806806564297747996761245 -0.158895450830459583624332253748 0 +0.311852806806564297747996761245 0.158895450830459583624332253748 0 +0.3120734989643096923828125 -0.3078185021877288818359375 -0.24053649604320526123046875 +0.3120734989643096923828125 0.3078185021877288818359375 -0.24053649604320526123046875 +0.312081700563430763928352007497 -0.0549206025898456504097389085928 -0.624170410633087091589743522491 +0.312081700563430763928352007497 0.0549206025898456504097389085928 -0.624170410633087091589743522491 +0.312119087576866183209034488755 -0.190061102807521836721704744377 -0.262599313259124778063835492503 +0.312119087576866183209034488755 0.190061102807521836721704744377 -0.262599313259124778063835492503 +0.312130987644195556640625 -0.827143013477325439453125 -0.4673430025577545166015625 +0.312130987644195556640625 0.827143013477325439453125 -0.4673430025577545166015625 +0.312156260013580322265625 -0.077039897441864013671875 -0.138287450373172748907535378748 +0.312156260013580322265625 0.077039897441864013671875 -0.138287450373172748907535378748 +0.312218087911605823858707253748 -0.842444998025894231652443977509 0.0529794014990329770187216240629 +0.312218087911605823858707253748 0.842444998025894231652443977509 0.0529794014990329770187216240629 +0.312381294369697526391860264994 -0.139917755126953119448884876874 0.0730806998908519744873046875 +0.312381294369697526391860264994 0.139917755126953119448884876874 0.0730806998908519744873046875 +0.312448494136333465576171875 -0.66356925666332244873046875 -0.1566922478377819061279296875 +0.312448494136333465576171875 0.66356925666332244873046875 -0.1566922478377819061279296875 +0.312482404708862349096420985006 -0.095260798931121826171875 -0.730259990692138760692841970013 +0.312482404708862349096420985006 0.095260798931121826171875 -0.730259990692138760692841970013 +0.312541186809539794921875 -0.841617000102996892785256477509 -0.06323669850826263427734375 +0.312541186809539794921875 0.841617000102996892785256477509 -0.06323669850826263427734375 +0.312607747316360429223891514994 -0.126556155085563643014623380623 0.0935942023992538396637286268742 +0.312607747316360429223891514994 0.126556155085563643014623380623 0.0935942023992538396637286268742 +0.312612605094909679070980246252 -0.0801132023334503173828125 0.5058209896087646484375 +0.312612605094909679070980246252 0.0801132023334503173828125 0.5058209896087646484375 +0.3126179873943328857421875 -0.22712950408458709716796875 0.3173049986362457275390625 +0.3126179873943328857421875 0.22712950408458709716796875 0.3173049986362457275390625 +0.312638358771800961566356136245 -0.835374918580055192407485264994 -0.326965297758579243048160378748 +0.312638358771800961566356136245 0.835374918580055192407485264994 -0.326965297758579243048160378748 +0.312657943367958102154346988755 0 -0.452487209439277671130241742503 +0.312658488750457763671875 -0.02065050043165683746337890625 -0.3896389901638031005859375 +0.312658488750457763671875 0.02065050043165683746337890625 -0.3896389901638031005859375 +0.31282079219818115234375 -0.247695994377136241570980246252 0.028105199337005615234375 +0.31282079219818115234375 0.247695994377136241570980246252 0.028105199337005615234375 +0.3128699958324432373046875 -0.749383985996246337890625 0.5835549831390380859375 +0.3128699958324432373046875 0.749383985996246337890625 0.5835549831390380859375 +0.312879748642444610595703125 -0.668806493282318115234375 0.1315447501838207244873046875 +0.312879748642444610595703125 0.668806493282318115234375 0.1315447501838207244873046875 +0.31288678944110870361328125 -0.05975639820098876953125 0.317853891849517844470085492503 +0.31288678944110870361328125 0.05975639820098876953125 0.317853891849517844470085492503 +0.312917995452880903783920985006 -0.105063605308532717619307561563 0.225929188728332536184595369377 +0.312917995452880903783920985006 0.105063605308532717619307561563 0.225929188728332536184595369377 +0.312995146214961994513004128748 -0.515221211314201399389389735006 0.243065546452999131643579744377 +0.312995146214961994513004128748 0.515221211314201399389389735006 0.243065546452999131643579744377 +0.313047009706497181280582253748 0 -0.626100319623947076941306022491 +0.313047698140144325940070757497 -0.3680088818073272705078125 0.5065284073352813720703125 +0.313047698140144325940070757497 0.3680088818073272705078125 0.5065284073352813720703125 +0.313048741221427895276008257497 0 0.156525246798992156982421875 +0.313049754500389132427784488755 -0.260627253353595766949268863755 0.50653068721294403076171875 +0.313049754500389132427784488755 0.260627253353595766949268863755 0.50653068721294403076171875 +0.313051202893257107806590511245 -0.5954535901546478271484375 -0.193477892875671381167634876874 +0.313051202893257107806590511245 0.5954535901546478271484375 -0.193477892875671381167634876874 +0.313065907359123263287159488755 -0.31701149046421051025390625 0.0631939508020877838134765625 +0.313065907359123263287159488755 0.31701149046421051025390625 0.0631939508020877838134765625 +0.313214802742004416735710492503 -0.247673606872558599301115123126 -0.0235464006662368802169638115629 +0.313214802742004416735710492503 0.247673606872558599301115123126 -0.0235464006662368802169638115629 +0.313220405578613303454460492503 0 0.248783206939697271176115123126 +0.313242006301879927221420985006 -0.207187199592590354235710492503 0.137669599056243902035490123126 +0.313242006301879927221420985006 0.207187199592590354235710492503 0.137669599056243902035490123126 +0.313244009017944358141960492503 -0.6069176197052001953125 -0.416568803787231489721420985006 +0.313244009017944358141960492503 0.6069176197052001953125 -0.416568803787231489721420985006 +0.313397714495658896716179242503 -0.360952350497245832983139735006 -0.272021196782588958740234375 +0.313397714495658896716179242503 0.360952350497245832983139735006 -0.272021196782588958740234375 +0.313488744199275970458984375 -0.52892325818538665771484375 -0.42949426174163818359375 +0.313488744199275970458984375 0.52892325818538665771484375 -0.42949426174163818359375 +0.313499414920806851458934261245 -0.511583983898162841796875 0 +0.313499414920806851458934261245 0.511583983898162841796875 0 +0.313586550951004017218082253748 -0.2278313934803009033203125 -0.228596413135528558902009876874 +0.313586550951004017218082253748 0.2278313934803009033203125 -0.228596413135528558902009876874 +0.313647386431694041863948996252 -0.429111084342002901959034488755 -0.141382454335689550228849498126 +0.313647386431694041863948996252 0.429111084342002901959034488755 -0.141382454335689550228849498126 +0.313653895258903470111278011245 -0.5213067829608917236328125 0.34620879590511322021484375 +0.313653895258903470111278011245 0.5213067829608917236328125 0.34620879590511322021484375 +0.313736861944198641705128238755 -0.295325991511344920770198996252 -0.129815094172954559326171875 +0.313736861944198641705128238755 0.295325991511344920770198996252 -0.129815094172954559326171875 +0.3137814998626708984375 -0.369441986083984375 -0.122693501412868499755859375 +0.3137814998626708984375 0.369441986083984375 -0.122693501412868499755859375 +0.313827860355377186163394753748 -0.128979545831680281198217130623 -0.0858851015567779485504473768742 +0.313827860355377186163394753748 0.128979545831680281198217130623 -0.0858851015567779485504473768742 +0.31386280059814453125 -0.187370800971984885485710492503 0.162426400184631364309595369377 +0.31386280059814453125 0.187370800971984885485710492503 0.162426400184631364309595369377 +0.314004600048065185546875 -0.1419001519680023193359375 -0.0613630481064319568962339701557 +0.314004600048065185546875 0.1419001519680023193359375 -0.0613630481064319568962339701557 +0.314094007015228271484375 -0.506346595287322953637954014994 0.07040999829769134521484375 +0.314094007015228271484375 0.506346595287322953637954014994 0.07040999829769134521484375 +0.314105610549449909552066628748 -0.60458631813526153564453125 0.50824476778507232666015625 +0.314105610549449909552066628748 0.60458631813526153564453125 0.50824476778507232666015625 +0.314107990264892611431690738755 -0.627072000503540061266960492503 0.384858393669128440173210492503 +0.314107990264892611431690738755 0.627072000503540061266960492503 0.384858393669128440173210492503 +0.314370596408843960833934261245 -0.504106199741363503186164507497 -0.0839525967836379921616085653113 +0.314370596408843960833934261245 0.504106199741363503186164507497 -0.0839525967836379921616085653113 +0.314419510960578907354801003748 -0.117695693671703335847489313437 -0.299646896123886119500667746252 +0.314419510960578907354801003748 0.117695693671703335847489313437 -0.299646896123886119500667746252 +0.314429509639739979132144753748 -0.603867584466934115283720529987 0.162719897925853729248046875 +0.314429509639739979132144753748 0.603867584466934115283720529987 0.162719897925853729248046875 +0.314504790306091353002670985006 -0.228499197959899924548210492503 -0.0942059993743896567641726846887 +0.314504790306091353002670985006 0.228499197959899924548210492503 -0.0942059993743896567641726846887 +0.314507907629013039318977007497 -0.0931490048766136086166866903113 0.618391907215118385998664507497 +0.314507907629013039318977007497 0.0931490048766136086166866903113 0.618391907215118385998664507497 +0.3145680129528045654296875 -0.325527012348175048828125 0.89167201519012451171875 +0.3145680129528045654296875 0.325527012348175048828125 0.89167201519012451171875 +0.314606702327728304791065738755 -0.31735575199127197265625 -0.05299154855310916900634765625 +0.314606702327728304791065738755 0.31735575199127197265625 -0.05299154855310916900634765625 +0.314646743237972259521484375 -0.67937399446964263916015625 0.044144251383841037750244140625 +0.314646743237972259521484375 0.67937399446964263916015625 0.044144251383841037750244140625 +0.3147304058074951171875 -0.0325392007827758830695863423443 -0.7347695827484130859375 +0.3147304058074951171875 0.0325392007827758830695863423443 -0.7347695827484130859375 +0.314841592311859097552684261245 -0.327061808109283425061164507497 -0.392307615280151344983039507497 +0.314841592311859097552684261245 0.327061808109283425061164507497 -0.392307615280151344983039507497 +0.314898358285427115710319867503 -0.335474756360054027215511496252 -0.459124884009361300396534488755 +0.314898358285427115710319867503 0.335474756360054027215511496252 -0.459124884009361300396534488755 +0.314910793304443381579460492503 -0.0989283978939056451995526231258 -0.225929594039916997738615123126 +0.314910793304443381579460492503 0.0989283978939056451995526231258 -0.225929594039916997738615123126 +0.3149392604827880859375 -0.67862923443317413330078125 -0.05268749780952930450439453125 +0.3149392604827880859375 0.67862923443317413330078125 -0.05268749780952930450439453125 +0.315020406246185269427684261245 -0.474066603183746326788394753748 0.189796793460845936163394753748 +0.315020406246185269427684261245 0.474066603183746326788394753748 0.189796793460845936163394753748 +0.315217503905296347888054242503 -0.507130661606788657458366742503 -0.256820209324359893798828125 +0.315217503905296347888054242503 0.507130661606788657458366742503 -0.256820209324359893798828125 +0.315438008308410622326789507497 0 0.510391187667846635278579014994 +0.315905153751373291015625 -0.146033807098865514584318248126 0.425885346531867992059261496252 +0.315905153751373291015625 0.146033807098865514584318248126 0.425885346531867992059261496252 +0.315929251909255970343082253748 -0.0745573483407497294983556912484 0.130880749225616460629240123126 +0.315929251909255970343082253748 0.0745573483407497294983556912484 0.130880749225616460629240123126 +0.31612174212932586669921875 -0.0530414499342441517204527201557 -0.140547400712966896740852007497 +0.31612174212932586669921875 0.0530414499342441517204527201557 -0.140547400712966896740852007497 +0.316126796603202864233139735006 -0.285590240359306357653679242503 0.347853556275367792327557481258 +0.316126796603202864233139735006 0.285590240359306357653679242503 0.347853556275367792327557481258 +0.316154408454895063940170985006 -0.459563207626342784539730246252 0.573452806472778298108039507497 +0.316154408454895063940170985006 0.459563207626342784539730246252 0.573452806472778298108039507497 +0.31622898578643798828125 -0.70710098743438720703125 -0.632461011409759521484375 +0.31622898578643798828125 0.70710098743438720703125 -0.632461011409759521484375 +0.316264796257019087377670985006 -0.0526619970798492473273988423443 0.239172410964965831414730246252 +0.316264796257019087377670985006 0.0526619970798492473273988423443 0.239172410964965831414730246252 +0.316350004076957680432258257497 -0.151629503071308124884097878748 -0.882853978872299105518095529987 +0.316350004076957680432258257497 0.151629503071308124884097878748 -0.882853978872299105518095529987 +0.316496604681014981341746761245 -0.0372725512832403141350035014057 0.144708898663520796334935880623 +0.316496604681014981341746761245 0.0372725512832403141350035014057 0.144708898663520796334935880623 +0.316556513309478759765625 -0.3485175073146820068359375 0.16830749809741973876953125 +0.316556513309478759765625 0.3485175073146820068359375 0.16830749809741973876953125 +0.316605259478092204705745871252 -0.551217544078826948705795985006 -0.135721948742866527215511496252 +0.316605259478092204705745871252 0.551217544078826948705795985006 -0.135721948742866527215511496252 +0.3167180120944976806640625 -0.255600988864898681640625 0.29044449329376220703125 +0.3167180120944976806640625 0.255600988864898681640625 0.29044449329376220703125 +0.3167504966259002685546875 -0.23013000190258026123046875 -0.3109810054302215576171875 +0.3167504966259002685546875 0.23013000190258026123046875 -0.3109810054302215576171875 +0.3168776035308837890625 -0.555969065427780129162727007497 0.113959946483373639192215875937 +0.3168776035308837890625 0.555969065427780129162727007497 0.113959946483373639192215875937 +0.316964399814605723992855246252 -0.342682206630706753802684261245 0.376964986324310302734375 +0.316964399814605723992855246252 0.342682206630706753802684261245 0.376964986324310302734375 +0.317197048664092984271434261245 -0.752044296264648415295539507497 -0.237308108806610101870759876874 +0.317197048664092984271434261245 0.752044296264648415295539507497 -0.237308108806610101870759876874 +0.317266607284545865130809261245 -0.5095671117305755615234375 -0.360115009546279896124332253748 +0.317266607284545865130809261245 0.5095671117305755615234375 -0.360115009546279896124332253748 +0.317413042485713947638004128748 -0.851959982514381319873564279987 0.275521849095821391717464621252 +0.317413042485713947638004128748 0.851959982514381319873564279987 0.275521849095821391717464621252 +0.31743000447750091552734375 -0.609124481678009033203125 -0.301173739135265350341796875 +0.31743000447750091552734375 0.609124481678009033203125 -0.301173739135265350341796875 +0.317605045437812760766860264994 -0.144994150102138508184879128748 0.0245692998170852633377236884371 +0.317605045437812760766860264994 0.144994150102138508184879128748 0.0245692998170852633377236884371 +0.317612385749816872326789507497 -0.469669783115386929583934261245 -0.1962971985340118408203125 +0.317612385749816872326789507497 0.469669783115386929583934261245 -0.1962971985340118408203125 +0.31766879558563232421875 -0.178143596649169927426115123126 -0.165382802486419677734375 +0.31766879558563232421875 0.178143596649169927426115123126 -0.165382802486419677734375 +0.317676100134849537237613503748 -0.145457549393177010266242632497 -0.0205897999927401528785786410936 +0.317676100134849537237613503748 0.145457549393177010266242632497 -0.0205897999927401528785786410936 +0.3177936971187591552734375 -0.6237041950225830078125 0 +0.3177936971187591552734375 0.6237041950225830078125 0 +0.31781820952892303466796875 -0.0915414497256278880676916287484 -0.114506354928016654270983565311 +0.31781820952892303466796875 0.0915414497256278880676916287484 -0.114506354928016654270983565311 +0.317823195457458518298210492503 -0.129009199142456065789730246252 0.20577919483184814453125 +0.317823195457458518298210492503 0.129009199142456065789730246252 0.20577919483184814453125 +0.317863652110099814684929242503 -0.04338164813816547393798828125 0.565314733982086203845085492503 +0.317863652110099814684929242503 0.04338164813816547393798828125 0.565314733982086203845085492503 +0.31789393723011016845703125 -0.146667145192623138427734375 0.282722854614257834704460492503 +0.31789393723011016845703125 0.146667145192623138427734375 0.282722854614257834704460492503 +0.318101406097412109375 -0.200482195615768438168302623126 0.467566215991973843646434261245 +0.318101406097412109375 0.200482195615768438168302623126 0.467566215991973843646434261245 +0.3181642591953277587890625 -0.41502450406551361083984375 -0.53761200606822967529296875 +0.3181642591953277587890625 0.41502450406551361083984375 -0.53761200606822967529296875 +0.318198609352111805304019753748 -0.3181976974010467529296875 0 +0.318198609352111805304019753748 0.3181976974010467529296875 0 +0.318274599313735917505141514994 -0.617985898256301791064970529987 0.0824312977492809295654296875 +0.318274599313735917505141514994 0.617985898256301791064970529987 0.0824312977492809295654296875 +0.318506997823715165552016514994 -0.615540081262588412158720529987 -0.0983024001121520912827023153113 +0.318506997823715165552016514994 0.615540081262588412158720529987 -0.0983024001121520912827023153113 +0.318511706590652476922542746252 -0.565321242809295632092414507497 0.0382381999865174307395854214064 +0.318511706590652476922542746252 0.565321242809295632092414507497 0.0382381999865174307395854214064 +0.318547594547271717413394753748 -0.0287843495607376063938342980464 -0.142122745513916015625 +0.318547594547271717413394753748 0.0287843495607376063938342980464 -0.142122745513916015625 +0.318548305332660652844367632497 -0.778244736790656976843649772491 0.441996999084949493408203125 +0.318548305332660652844367632497 0.778244736790656976843649772491 0.441996999084949493408203125 +0.3185735046863555908203125 -0.3789674937725067138671875 0.069960497319698333740234375 +0.3185735046863555908203125 0.3789674937725067138671875 0.069960497319698333740234375 +0.3187087476253509521484375 -0.62310826778411865234375 0.269555993378162384033203125 +0.3187087476253509521484375 0.62310826778411865234375 0.269555993378162384033203125 +0.318775200843811057360710492503 -0.363188004493713412212940738755 -0.637555217742920010692841970013 +0.318775200843811057360710492503 0.363188004493713412212940738755 -0.637555217742920010692841970013 +0.318911457061767600329460492503 -0.564547118544578618859475227509 -0.0456286996603012112716513115629 +0.318911457061767600329460492503 0.564547118544578618859475227509 -0.0456286996603012112716513115629 +0.3189752101898193359375 -0.211651992797851573602230246252 -0.116009199619293221217297684689 +0.3189752101898193359375 0.211651992797851573602230246252 -0.116009199619293221217297684689 +0.31899225711822509765625 -0.231758259236812591552734375 -0.6379905045032501220703125 +0.31899225711822509765625 0.231758259236812591552734375 -0.6379905045032501220703125 +0.31902599334716796875 0 0.3849965035915374755859375 +0.3190974891185760498046875 -0.131431996822357177734375 0.361804485321044921875 +0.3190974891185760498046875 0.131431996822357177734375 0.361804485321044921875 +0.319105616211891207623096988755 -0.186561650037765508480802623126 -0.407266756892204317974659488755 +0.319105616211891207623096988755 0.186561650037765508480802623126 -0.407266756892204317974659488755 +0.319108508527278900146484375 -0.50062425434589385986328125 0.4583069980144500732421875 +0.319108508527278900146484375 0.50062425434589385986328125 0.4583069980144500732421875 +0.319233137369155872686832253748 -0.277037537097930941509815738755 -0.15440310537815093994140625 +0.319233137369155872686832253748 0.277037537097930941509815738755 -0.15440310537815093994140625 +0.319335302710533175396534488755 -0.661310112476348854748664507497 -0.520282781124114968029914507497 +0.319335302710533175396534488755 0.661310112476348854748664507497 -0.520282781124114968029914507497 +0.319491696357727061883480246252 -0.409935355186462457854901231258 0.179939098656177548507528740629 +0.319491696357727061883480246252 0.409935355186462457854901231258 0.179939098656177548507528740629 +0.319504903256893180163444867503 -0.430845347046852122918636496252 0.367136248946189902575554242503 +0.319504903256893180163444867503 0.430845347046852122918636496252 0.367136248946189902575554242503 +0.319558194279670748638721988755 -0.178547842800617223568693248126 -0.53712488710880279541015625 +0.319558194279670748638721988755 0.178547842800617223568693248126 -0.53712488710880279541015625 +0.319579596817493427618472878748 -0.761940839886665277624899772491 0.199536653608083730526701060626 +0.319579596817493427618472878748 0.761940839886665277624899772491 0.199536653608083730526701060626 +0.319630500674247697290297764994 0 -0.142606098949909193551732755623 +0.319790092110633805688735264994 -0.0893119469285011263748330634371 0.110714451968669885806306751874 +0.319790092110633805688735264994 0.0893119469285011263748330634371 0.110714451968669885806306751874 +0.319893741607666037829460492503 -0.277311661839485190661491742503 -0.351092505455017134252670985006 +0.319893741607666037829460492503 0.277311661839485190661491742503 -0.351092505455017134252670985006 +0.319952392578125022204460492503 -0.0718371987342834444900674384371 -0.229063200950622575247095369377 +0.319952392578125022204460492503 0.0718371987342834444900674384371 -0.229063200950622575247095369377 +0.320009234547615095678452235006 -0.441658803820610068591179242503 0.0709345966577529934982138115629 +0.320009234547615095678452235006 0.441658803820610068591179242503 0.0709345966577529934982138115629 +0.320018194615840911865234375 -0.681274157762527421411391514994 -0.394909997284412395135433371252 +0.320018194615840911865234375 0.681274157762527421411391514994 -0.394909997284412395135433371252 +0.320096802711486827508480246252 -0.135646796226501470394865123126 -0.197833204269409201891960492503 +0.320096802711486827508480246252 0.135646796226501470394865123126 -0.197833204269409201891960492503 +0.320213706791400876117137386245 -0.232646696269512176513671875 -0.752222785353660605700554242503 +0.320213706791400876117137386245 0.232646696269512176513671875 -0.752222785353660605700554242503 +0.3202820122241973876953125 -0.15062700212001800537109375 -0.3531725108623504638671875 +0.3202820122241973876953125 0.15062700212001800537109375 -0.3531725108623504638671875 +0.32039558887481689453125 -0.232780003547668479235710492503 0.0562143981456756647308026231258 +0.32039558887481689453125 0.232780003547668479235710492503 0.0562143981456756647308026231258 +0.3204205036163330078125 -0.37932550907135009765625 -0.058674998581409454345703125 +0.3204205036163330078125 0.37932550907135009765625 -0.058674998581409454345703125 +0.3204857409000396728515625 -0.487359595298767100945980246252 0.286826793849468242303402121252 +0.3204857409000396728515625 0.487359595298767100945980246252 0.286826793849468242303402121252 +0.320579253137111663818359375 -0.0500317476689815521240234375 0.6761842668056488037109375 +0.320579253137111663818359375 0.0500317476689815521240234375 0.6761842668056488037109375 +0.320645695924758944439503238755 -0.6007491052150726318359375 0.588462281227111860815170985006 +0.320645695924758944439503238755 0.6007491052150726318359375 0.588462281227111860815170985006 +0.320719058811664570196597878748 -0.0770829968154430333893145643742 -0.890896683931350685803352007497 +0.320719058811664570196597878748 0.0770829968154430333893145643742 -0.890896683931350685803352007497 +0.320724901556968700067073996252 -0.301324939727783236431690738755 0.0940148994326591574965945596887 +0.320724901556968700067073996252 0.301324939727783236431690738755 0.0940148994326591574965945596887 +0.32075639069080352783203125 -0.307286095619201671258480246252 -0.782745301723480224609375 +0.32075639069080352783203125 0.307286095619201671258480246252 -0.782745301723480224609375 +0.320807850360870394634815738755 0 0.446746295690536532330128238755 +0.320815503597259521484375 -0.3267475068569183349609375 0.20078249275684356689453125 +0.320815503597259521484375 0.3267475068569183349609375 0.20078249275684356689453125 +0.320818006992340087890625 -0.13279099762439727783203125 0.93778598308563232421875 +0.320818006992340087890625 0.13279099762439727783203125 0.93778598308563232421875 +0.320968189835548367572215511245 -0.29091370105743408203125 -0.549861884117126442639289507497 +0.320968189835548367572215511245 0.29091370105743408203125 -0.549861884117126442639289507497 +0.32101200520992279052734375 -0.086299203336238861083984375 -0.303321146965026877673210492503 +0.32101200520992279052734375 0.086299203336238861083984375 -0.303321146965026877673210492503 +0.321055704355239834857371761245 -0.0142240000888705243192733362889 0.1386398971080780029296875 +0.321055704355239834857371761245 0.0142240000888705243192733362889 0.1386398971080780029296875 +0.321154886484146140368522992503 -0.440826651453971873895198996252 -0.0709345966577529934982138115629 +0.321154886484146140368522992503 0.440826651453971873895198996252 -0.0709345966577529934982138115629 +0.321205490827560391497996761245 -0.130110402405261976754857755623 0.0489723481237888322303852817186 +0.321205490827560391497996761245 0.130110402405261976754857755623 0.0489723481237888322303852817186 +0.321353602409362837377670985006 -0.233475589752197287829460492503 -0.0471275985240936293174662807814 +0.321353602409362837377670985006 0.233475589752197287829460492503 -0.0471275985240936293174662807814 +0.321384358406066883429019753748 -0.105439245700836181640625 -0.089970298111438751220703125 +0.321384358406066883429019753748 0.105439245700836181640625 -0.089970298111438751220703125 +0.321780200302600849493472878748 0 -0.893844550848007179943977007497 +0.321801094710826851574836382497 -0.374426351487636532855418636245 0.811633434891700700219985264994 +0.321801094710826851574836382497 0.374426351487636532855418636245 0.811633434891700700219985264994 +0.321843898296356178967414507497 -0.131261901557445520571931751874 -0.0410724990069866180419921875 +0.321843898296356178967414507497 0.131261901557445520571931751874 -0.0410724990069866180419921875 +0.321892404556274436266960492503 -0.193774402141571044921875 -0.13724720478057861328125 +0.321892404556274436266960492503 0.193774402141571044921875 -0.13724720478057861328125 +0.3219139873981475830078125 -0.06662750244140625 0.376738488674163818359375 +0.3219139873981475830078125 0.06662750244140625 0.376738488674163818359375 +0.321930703520774796899672764994 -0.233895894885063154733373380623 0.575893479585647516394431022491 +0.321930703520774796899672764994 0.233895894885063154733373380623 0.575893479585647516394431022491 +0.321981793642044045178352007497 -0.103600700199604031648270563437 0.089970298111438751220703125 +0.321981793642044045178352007497 0.103600700199604031648270563437 0.089970298111438751220703125 +0.322109997272491455078125 -0.859847009181976318359375 0.3961170017719268798828125 +0.322109997272491455078125 0.859847009181976318359375 0.3961170017719268798828125 +0.322165897488594032971320757497 0 0.893705877661704950476462272491 +0.322168207168579079358039507497 -0.1845923960208892822265625 -0.471310186386108387335269753748 +0.322168207168579079358039507497 0.1845923960208892822265625 -0.471310186386108387335269753748 +0.32222650945186614990234375 -0.4454901218414306640625 0.648234626650810219494758257497 +0.32222650945186614990234375 0.4454901218414306640625 0.648234626650810219494758257497 +0.322268009185791015625 -0.495344018936157259869190738755 -0.539238405227661199425881477509 +0.322268009185791015625 0.495344018936157259869190738755 -0.539238405227661199425881477509 +0.322379040718078602179019753748 -0.117140802741050709112613503748 0.0696408994495868599594601278113 +0.322379040718078602179019753748 0.117140802741050709112613503748 0.0696408994495868599594601278113 +0.322508990764617919921875 -0.348157502710819244384765625 0.580753505229949951171875 +0.322508990764617919921875 0.348157502710819244384765625 0.580753505229949951171875 +0.322512742877006486352797764994 -0.0515942007303237873405699076557 0.125792098045349104440404630623 +0.322512742877006486352797764994 0.0515942007303237873405699076557 0.125792098045349104440404630623 +0.322622308135032620501903011245 -0.118721404671669000796541126874 -0.0657268516719341222565020643742 +0.322622308135032620501903011245 0.118721404671669000796541126874 -0.0657268516719341222565020643742 +0.322667452692985523565738503748 -0.0671219520270824321350744412484 -0.117814904451370230931139815311 +0.322667452692985523565738503748 0.0671219520270824321350744412484 -0.117814904451370230931139815311 +0.32266934216022491455078125 -0.161200346052646631411775501874 -0.269070303440094027447315738755 +0.32266934216022491455078125 0.161200346052646631411775501874 -0.269070303440094027447315738755 +0.322683191299438509869190738755 0 0.732035207748413130346420985006 +0.3227230012416839599609375 -0.35030949115753173828125 -0.152095496654510498046875 +0.3227230012416839599609375 0.35030949115753173828125 -0.152095496654510498046875 +0.322949838638305675164730246252 -0.577070930600166343005241742503 -0.53403373062610626220703125 +0.322949838638305675164730246252 0.577070930600166343005241742503 -0.53403373062610626220703125 +0.322950017452240001336605246252 -0.449660396575927712170539507497 0.231319802999496448858707253748 +0.322950017452240001336605246252 0.449660396575927712170539507497 0.231319802999496448858707253748 +0.3229509890079498291015625 -0.277368485927581787109375 0.2622390091419219970703125 +0.3229509890079498291015625 0.277368485927581787109375 0.2622390091419219970703125 +0.3229660093784332275390625 -0.302869498729705810546875 0.232299506664276123046875 +0.3229660093784332275390625 0.302869498729705810546875 0.232299506664276123046875 +0.323061752319335926397769753748 -0.616969916224479608679587272491 -0.646126335859298683850227007497 +0.323061752319335926397769753748 0.616969916224479608679587272491 -0.646126335859298683850227007497 +0.323201707005500826763721988755 -0.257422944903373751568409488755 -0.178252650797367101498380748126 +0.323201707005500826763721988755 0.257422944903373751568409488755 -0.178252650797367101498380748126 +0.323282310366630576403679242503 -0.444959351420402549059929242503 0 +0.323282310366630576403679242503 0.444959351420402549059929242503 0 +0.323358348011970497815070757497 -0.13393799960613250732421875 0 +0.323358348011970497815070757497 0.13393799960613250732421875 0 +0.323361003398895285876335492503 -0.0299546990543603890155832658593 0.31151296198368072509765625 +0.323361003398895285876335492503 0.0299546990543603890155832658593 0.31151296198368072509765625 +0.323388791084289584087940738755 -0.04415319859981536865234375 -0.231236410140991222039730246252 +0.323388791084289584087940738755 0.04415319859981536865234375 -0.231236410140991222039730246252 +0.32352121174335479736328125 -0.756156617403030417712272992503 -0.365460312366485629009815738755 +0.32352121174335479736328125 0.756156617403030417712272992503 -0.365460312366485629009815738755 +0.323527488112449634893863503748 -0.17365680634975433349609375 0.260140505433082591668636496252 +0.323527488112449634893863503748 0.17365680634975433349609375 0.260140505433082591668636496252 +0.32355178892612457275390625 -0.0895918495953083038330078125 0.299646010994911227154346988755 +0.32355178892612457275390625 0.0895918495953083038330078125 0.299646010994911227154346988755 +0.323560202121734585833934261245 -0.380744397640228271484375 -0.332178604602813731805355246252 +0.323560202121734585833934261245 0.380744397640228271484375 -0.332178604602813731805355246252 +0.3236072063446044921875 -0.235113191604614274465845369377 0 +0.3236072063446044921875 0.235113191604614274465845369377 0 +0.323608596622943889276058371252 -0.7030418217182159423828125 0.351438455283641815185546875 +0.323608596622943889276058371252 0.7030418217182159423828125 0.351438455283641815185546875 +0.32363279163837432861328125 -0.302543091773986805304019753748 -0.0789268501102924346923828125 +0.32363279163837432861328125 0.302543091773986805304019753748 -0.0789268501102924346923828125 +0.323671197891235384869190738755 -0.6784207820892333984375 -0.273829603195190451891960492503 +0.323671197891235384869190738755 0.6784207820892333984375 -0.273829603195190451891960492503 +0.323708391189575228619190738755 -0.0785643994808197104751101846887 0.221451210975646989309595369377 +0.323708391189575228619190738755 0.0785643994808197104751101846887 0.221451210975646989309595369377 +0.32373559474945068359375 -0.146410000324249278680355246252 0.183737194538116460629240123126 +0.32373559474945068359375 0.146410000324249278680355246252 0.183737194538116460629240123126 +0.323756790161132845806690738755 -0.0263951987028121955181081403907 0.233419990539550786801115123126 +0.323756790161132845806690738755 0.0263951987028121955181081403907 0.233419990539550786801115123126 +0.3237969875335693359375 -0.2759265005588531494140625 -0.2627165019512176513671875 +0.3237969875335693359375 0.2759265005588531494140625 -0.2627165019512176513671875 +0.324031700193881999627620871252 -0.870286473631858736865751779987 -0.200263800472021080700812944997 +0.324031700193881999627620871252 0.870286473631858736865751779987 -0.200263800472021080700812944997 +0.324051749706268321649105246252 -0.310479936003685008660823996252 0.317950588464736949578792746252 +0.324051749706268321649105246252 0.310479936003685008660823996252 0.317950588464736949578792746252 +0.324058896303176913189503238755 -0.408921161293983481677116742503 -0.173980951309204129318075615629 +0.324058896303176913189503238755 0.408921161293983481677116742503 -0.173980951309204129318075615629 +0.324068796634674083367855246252 -0.0731885038316249930678836221887 0.438318097591400168688835492503 +0.324068796634674083367855246252 0.0731885038316249930678836221887 0.438318097591400168688835492503 +0.324092486500740017962840511245 -0.589223274588584922106804242503 0.671028676629066400671774772491 +0.324092486500740017962840511245 0.589223274588584922106804242503 0.671028676629066400671774772491 +0.324115210771560635638621761245 -0.444118192791938759533820757497 -0.648234626650810219494758257497 +0.324115210771560635638621761245 0.444118192791938759533820757497 -0.648234626650810219494758257497 +0.324382495880126964227230246252 -0.414790213108062744140625 0.729880195856094426964943977509 +0.324382495880126964227230246252 0.414790213108062744140625 0.729880195856094426964943977509 +0.32471360266208648681640625 -0.636976388096809342798110264994 0.459697863459587074963508257497 +0.32471360266208648681640625 0.636976388096809342798110264994 0.459697863459587074963508257497 +0.324724495410919189453125 -0.3802025020122528076171875 0 +0.324724495410919189453125 0.3802025020122528076171875 0 +0.324726998805999755859375 -0.78643000125885009765625 0.525433003902435302734375 +0.324726998805999755859375 0.78643000125885009765625 0.525433003902435302734375 +0.324931812286376964227230246252 -0.369271194934844948498664507497 0.343595409393310513568309261245 +0.324931812286376964227230246252 0.369271194934844948498664507497 0.343595409393310513568309261245 +0.324998043477535247802734375 -0.128845595568418513909847433752 -0.547974056005477883068977007497 +0.324998043477535247802734375 0.128845595568418513909847433752 -0.547974056005477883068977007497 +0.3250764906406402587890625 -0.402117806673049915655582253748 0.471833604574203480108707253748 +0.3250764906406402587890625 0.402117806673049915655582253748 0.471833604574203480108707253748 +0.325076703727245341912777121252 -0.188418256491422630993781694997 0.87253887951374053955078125 +0.325076703727245341912777121252 0.188418256491422630993781694997 0.87253887951374053955078125 +0.325086435675621066021534488755 -0.480273303389549266473323996252 -0.293523757159709963726612613755 +0.325086435675621066021534488755 0.480273303389549266473323996252 -0.293523757159709963726612613755 +0.325174808502197265625 -0.0164992004632949842979350307814 -0.232355594635009765625 +0.325174808502197265625 0.0164992004632949842979350307814 -0.232355594635009765625 +0.32517810165882110595703125 -0.301736502349376711773487613755 0.475094097852706898077457253748 +0.32517810165882110595703125 0.301736502349376711773487613755 0.475094097852706898077457253748 +0.325234794616699240954460492503 -0.0552271496504545197914204379686 -0.306059387326240550653011496252 +0.325234794616699240954460492503 0.0552271496504545197914204379686 -0.306059387326240550653011496252 +0.325264099240303028448551003748 -0.408579486608505237921207253748 -0.466118103265762306897102007497 +0.325264099240303028448551003748 0.408579486608505237921207253748 -0.466118103265762306897102007497 +0.325281393527984630242855246252 -0.785297173261642389441306022491 0 +0.325281393527984630242855246252 0.785297173261642389441306022491 0 +0.325330209732055675164730246252 -0.285731399059295620990184261245 -0.415353012084960948602230246252 +0.325330209732055675164730246252 0.285731399059295620990184261245 -0.415353012084960948602230246252 +0.325438646972179390637336382497 -0.87654788792133331298828125 0.168087303638458251953125 +0.325438646972179390637336382497 0.87654788792133331298828125 0.168087303638458251953125 +0.3254415988922119140625 -0.158863198757171641961605246252 0.713337612152099675988381477509 +0.3254415988922119140625 0.158863198757171641961605246252 0.713337612152099675988381477509 +0.325569544732570659295589621252 -0.778807374835014276648337272491 0.0998163498938083593170489393742 +0.325569544732570659295589621252 0.778807374835014276648337272491 0.0998163498938083593170489393742 +0.325619986653327975201221988755 -0.236576709151268022024439119377 0.804986125230789162365852007497 +0.325619986653327975201221988755 -0.236574000120162969418302623126 -0.201246745884418487548828125 +0.325619986653327975201221988755 0.236574000120162969418302623126 -0.201246745884418487548828125 +0.325619986653327975201221988755 0.236576709151268022024439119377 0.804986125230789162365852007497 +0.325623607635498080181690738755 -0.5290010869503021240234375 -0.6512508094310760498046875 +0.325623607635498080181690738755 0.5290010869503021240234375 -0.6512508094310760498046875 +0.3256849944591522216796875 -0.571135997772216796875 0.753480970859527587890625 +0.3256849944591522216796875 0.571135997772216796875 0.753480970859527587890625 +0.325687992572784468237045985006 -0.386269399523735068591179242503 0.217308850586414359362663617503 +0.325687992572784468237045985006 0.386269399523735068591179242503 0.217308850586414359362663617503 +0.325725944340229001117137386245 -0.776034688949584938733039507497 -0.11905014514923095703125 +0.325725944340229001117137386245 0.776034688949584938733039507497 -0.11905014514923095703125 +0.325763607025146506579460492503 -0.216259193420410167352230246252 0.0843216001987457386412927462516 +0.325763607025146506579460492503 0.216259193420410167352230246252 0.0843216001987457386412927462516 +0.325881336629390727654964621252 -0.393553653359413113665965511245 -0.800885158777236871863181022491 +0.325881336629390727654964621252 0.393553653359413113665965511245 -0.800885158777236871863181022491 +0.325892445445060741082698996252 -0.456327947974205005987613503748 0.328722545504570029528679242503 +0.325892445445060741082698996252 0.456327947974205005987613503748 0.328722545504570029528679242503 +0.325959208607673633917301003748 0 0.619476211071014359887954014994 +0.326041090488433826788394753748 -0.0429547991603612885902485629686 -0.119800096750259391087389815311 +0.326041090488433826788394753748 0.0429547991603612885902485629686 -0.119800096750259391087389815311 +0.326140500605106353759765625 -0.1750807464122772216796875 -0.6522877514362335205078125 +0.326140500605106353759765625 0.1750807464122772216796875 -0.6522877514362335205078125 +0.326231756806373618395866742503 -0.290531149506568941998096988755 -0.481315258145332325323551003748 +0.326231756806373618395866742503 0.290531149506568941998096988755 -0.481315258145332325323551003748 +0.326234695315361034051448996252 -0.200411546230316178762720369377 -0.236444851756095891781583873126 +0.326234695315361034051448996252 0.200411546230316178762720369377 -0.236444851756095891781583873126 +0.3263190090656280517578125 -0.237082004547119140625 -0.9150450229644775390625 +0.3263190090656280517578125 0.237082004547119140625 -0.9150450229644775390625 +0.326763439178466785772769753748 -0.282739940285682667120426003748 0.125633704662323014700220369377 +0.326763439178466785772769753748 0.282739940285682667120426003748 0.125633704662323014700220369377 +0.326785504817962646484375 -0.199137009680271148681640625 0.64502401649951934814453125 +0.326785504817962646484375 0.199137009680271148681640625 0.64502401649951934814453125 +0.326813200116157498431590511245 -0.581250619888305619653579014994 0.212933695316314675061164507497 +0.326813200116157498431590511245 0.581250619888305619653579014994 0.212933695316314675061164507497 +0.326896855235099759173778011245 -0.0656004980206489479721554403113 0.106466148793697354402176813437 +0.326896855235099759173778011245 0.0656004980206489479721554403113 0.106466148793697354402176813437 +0.326898890733718860968082253748 -0.0599436029791831984092631557814 0.836387121677398703845085492503 +0.326898890733718860968082253748 0.0599436029791831984092631557814 0.836387121677398703845085492503 +0.326945006847381591796875 -0.485202014446258544921875 -0.810977995395660400390625 +0.326945006847381591796875 0.485202014446258544921875 -0.810977995395660400390625 +0.32697200775146484375 -0.6926968097686767578125 0.23078238964080810546875 +0.32697200775146484375 0.6926968097686767578125 0.23078238964080810546875 +0.327062433958053622173878238755 -0.327189499139785788806022992503 -0.297451558709144636694077235006 +0.327062433958053622173878238755 0.327189499139785788806022992503 -0.297451558709144636694077235006 +0.327096709609031643939403011245 -0.572264015674591064453125 -0.235630497336387606521768134371 +0.327096709609031643939403011245 0.572264015674591064453125 -0.235630497336387606521768134371 +0.32717879116535186767578125 -0.397098007798194874151676003748 -0.397199398279190096783253238755 +0.32717879116535186767578125 0.397098007798194874151676003748 -0.397199398279190096783253238755 +0.327232342958450328485042746252 -0.19928880035877227783203125 0.236015108227729808465511496252 +0.327232342958450328485042746252 0.19928880035877227783203125 0.236015108227729808465511496252 +0.32726275920867919921875 -0.167680353671312315499974943123 -0.766343840956687949450554242503 +0.32726275920867919921875 0.167680353671312315499974943123 -0.766343840956687949450554242503 +0.327293094992637645379573996252 -0.0185625007376074811771271555472 -0.30827701091766357421875 +0.327293094992637645379573996252 0.0185625007376074811771271555472 -0.30827701091766357421875 +0.327293393015861466821547764994 -0.081358201801776885986328125 -0.0935942023992538396637286268742 +0.327293393015861466821547764994 0.081358201801776885986328125 -0.0935942023992538396637286268742 +0.327308797836303733141960492503 -0.109304797649383556024105246252 -0.202290391921997075863615123126 +0.327308797836303733141960492503 0.109304797649383556024105246252 -0.202290391921997075863615123126 +0.327525457739829994885383257497 -0.0283797487616538994525949846093 0.120090594887733451145983565311 +0.327525457739829994885383257497 0.0283797487616538994525949846093 0.120090594887733451145983565311 +0.327569198608398448602230246252 -0.152686405181884782278345369377 -0.171421194076538108141960492503 +0.327569198608398448602230246252 0.152686405181884782278345369377 -0.171421194076538108141960492503 +0.3276562392711639404296875 -0.531724512577056884765625 0.41522325575351715087890625 +0.3276562392711639404296875 0.531724512577056884765625 0.41522325575351715087890625 +0.327793598175048828125 -0.218041992187500005551115123126 -0.070773601531982421875 +0.327793598175048828125 0.218041992187500005551115123126 -0.070773601531982421875 +0.327810609340667691302684261245 -0.489739215373992897717414507497 0.112674602866172784976228626874 +0.327810609340667691302684261245 0.489739215373992897717414507497 0.112674602866172784976228626874 +0.327846756577491793560596988755 -0.182787001132965115646200615629 0.402002140879631097991619981258 +0.327846756577491793560596988755 0.182787001132965115646200615629 0.402002140879631097991619981258 +0.327856814861297585217414507497 -0.446095204353332497326789507497 -0.231320393085479719674779630623 +0.327856814861297585217414507497 0.446095204353332497326789507497 -0.231320393085479719674779630623 +0.327914810180664095806690738755 -0.163313198089599626028345369377 0.160625600814819358141960492503 +0.327914810180664095806690738755 0.163313198089599626028345369377 0.160625600814819358141960492503 +0.327960801124572765008480246252 -0.31968319416046142578125 0.655930423736572287829460492503 +0.327960801124572765008480246252 0.31968319416046142578125 0.655930423736572287829460492503 +0.3279969990253448486328125 -0.78570997714996337890625 -0.52447998523712158203125 +0.3279969990253448486328125 0.78570997714996337890625 -0.52447998523712158203125 +0.328002989292144775390625 -0.3626489937305450439453125 0.104400999844074249267578125 +0.328002989292144775390625 0.3626489937305450439453125 0.104400999844074249267578125 +0.328049042820930447650340511245 -0.119500847160816187075838001874 0.0245619487017393091365935475778 +0.328049042820930447650340511245 0.119500847160816187075838001874 0.0245619487017393091365935475778 +0.32809744775295257568359375 -0.113266754150390627775557561563 0.775901240110397294458266514994 +0.32809744775295257568359375 0.113266754150390627775557561563 0.775901240110397294458266514994 +0.328142148256301835473891514994 -0.119995403289794910772769753748 -0.0205856002867221832275390625 +0.328142148256301835473891514994 0.119995403289794910772769753748 -0.0205856002867221832275390625 +0.328300008177757229876903011245 -0.0144375005736947052692453752343 -0.120460554957389817665180942186 +0.328300008177757229876903011245 0.0144375005736947052692453752343 -0.120460554957389817665180942186 +0.3284254968166351318359375 -0.16276399791240692138671875 0.3400655090808868408203125 +0.3284254968166351318359375 0.16276399791240692138671875 0.3400655090808868408203125 +0.328456708788871787341179242503 -0.238635098934173589535490123126 -0.371038264036178622173878238755 +0.328456708788871787341179242503 0.238635098934173589535490123126 -0.371038264036178622173878238755 +0.328607299923896756244090511245 0 0.120487153530120835731587192186 +0.32861249148845672607421875 -0.59262599050998687744140625 0.32141549885272979736328125 +0.32861249148845672607421875 0.59262599050998687744140625 0.32141549885272979736328125 +0.3286879956722259521484375 -0.116225503385066986083984375 -0.358407497406005859375 +0.3286879956722259521484375 0.116225503385066986083984375 -0.358407497406005859375 +0.328712782263755831646534488755 -0.0778394520282745389083700615629 -0.555327481031417824475227007497 +0.328712782263755831646534488755 0.0778394520282745389083700615629 -0.555327481031417824475227007497 +0.328780388832092318462940738755 -0.198575603961944596731470369377 0.111674404144287114926115123126 +0.328780388832092318462940738755 0.198575603961944596731470369377 0.111674404144287114926115123126 +0.32885639369487762451171875 -0.305539199709892295153679242503 0.03161249868571758270263671875 +0.32885639369487762451171875 0.305539199709892295153679242503 0.03161249868571758270263671875 +0.3289031982421875 -0.422388017177581787109375 0.270945006608962979388621761245 +0.3289031982421875 0.422388017177581787109375 0.270945006608962979388621761245 +0.32901604473590850830078125 -0.361139342188835199554119981258 0.252639757096767447741569867503 +0.32901604473590850830078125 0.361139342188835199554119981258 0.252639757096767447741569867503 +0.32904720306396484375 -0.103955996036529552117855246252 0.202289605140686057360710492503 +0.32904720306396484375 0.103955996036529552117855246252 0.202289605140686057360710492503 +0.3290669918060302734375 -0.487300801277160633429019753748 -0.119384998083114618472322376874 +0.3290669918060302734375 0.487300801277160633429019753748 -0.119384998083114618472322376874 +0.329089397192001309466746761245 -0.282488140463829029425113503748 0.731027218699455194617087272491 +0.329089397192001309466746761245 0.282488140463829029425113503748 0.731027218699455194617087272491 +0.3290930092334747314453125 -0.879342019557952880859375 -0.3441739976406097412109375 +0.3290930092334747314453125 0.879342019557952880859375 -0.3441739976406097412109375 +0.329224801063537630962940738755 -0.49783039093017578125 0.532706403732299826891960492503 +0.329224801063537630962940738755 0.49783039093017578125 0.532706403732299826891960492503 +0.329335650801658663677784488755 -0.305510392785072359966846988755 -0.0264865508303046247318146555472 +0.329335650801658663677784488755 0.305510392785072359966846988755 -0.0264865508303046247318146555472 +0.329373854398727405889957253748 -0.173161303997039800472990123126 0.532942810654640219958366742503 +0.329373854398727405889957253748 0.173161303997039800472990123126 0.532942810654640219958366742503 +0.3294169902801513671875 -0.3304404914379119873046875 -0.17970399558544158935546875 +0.3294169902801513671875 0.3304404914379119873046875 -0.17970399558544158935546875 +0.3295561373233795166015625 -0.148842091858387010061548494377 -0.414414009451866183209034488755 +0.3295561373233795166015625 0.148842091858387010061548494377 -0.414414009451866183209034488755 +0.329563537240028348040965511245 -0.889247497916221596447883257497 0.0559227015823125783722247206242 +0.329563537240028348040965511245 0.889247497916221596447883257497 0.0559227015823125783722247206242 +0.3296310007572174072265625 -0.198671996593475341796875 -0.3191750049591064453125 +0.3296310007572174072265625 0.198671996593475341796875 -0.3191750049591064453125 +0.329660090804100025518863503748 -0.778436118364334128649772992503 0.3088062107563018798828125 +0.329660090804100025518863503748 0.778436118364334128649772992503 0.3088062107563018798828125 +0.329664295911788918225227007497 -0.0947180494666099437317541287484 -0.0696408994495868599594601278113 +0.329664295911788918225227007497 0.0947180494666099437317541287484 -0.0696408994495868599594601278113 +0.329672002792358420641960492503 0 0.226531195640563981497095369377 +0.329705247282981839251903011245 -0.0801139518618583651443643134371 0.0858847521245479500473507528113 +0.329705247282981839251903011245 0.0801139518618583651443643134371 0.0858847521245479500473507528113 +0.329719506204128265380859375 -0.57887698709964752197265625 -0.344508759677410125732421875 +0.329719506204128265380859375 0.57887698709964752197265625 -0.344508759677410125732421875 +0.329820585250854503289730246252 -0.12021960318088531494140625 0.4865856170654296875 +0.329820585250854503289730246252 0.12021960318088531494140625 0.4865856170654296875 +0.3299045860767364501953125 -0.888373500108718849865852007497 -0.066749848425388336181640625 +0.3299045860767364501953125 0.888373500108718849865852007497 -0.066749848425388336181640625 +0.329950955510139420923110264994 -0.107679252326488492097489313437 -0.0451398484408855396599058451557 +0.329950955510139420923110264994 0.107679252326488492097489313437 -0.0451398484408855396599058451557 +0.3300054073333740234375 -0.2397623956203460693359375 0.440011811256408702508480246252 +0.3300054073333740234375 0.2397623956203460693359375 0.440011811256408702508480246252 +0.330228853225707996710269753748 -0.106823153793811798095703125 0.0451398484408855396599058451557 +0.330228853225707996710269753748 0.106823153793811798095703125 0.0451398484408855396599058451557 +0.330287647247314464227230246252 -0.333752107620239268914730246252 0.286390495300292979852230246252 +0.330287647247314464227230246252 0.333752107620239268914730246252 0.286390495300292979852230246252 +0.330310392379760786596420985006 -0.179302394390106201171875 0.136914396286010736636384876874 +0.330310392379760786596420985006 0.179302394390106201171875 0.136914396286010736636384876874 +0.330321604013442959857371761245 -0.239989408850669855288728626874 -0.568588280677795321338408029987 +0.330321604013442959857371761245 0.239989408850669855288728626874 -0.568588280677795321338408029987 +0.330535197257995627673210492503 -0.306142401695251475945980246252 -0.661077594757080166942841970013 +0.330535197257995627673210492503 0.306142401695251475945980246252 -0.661077594757080166942841970013 +0.330568534135818492547542746252 -0.0268436988815665238117258439843 -0.559020814299583501671975227509 +0.330568534135818492547542746252 0.0268436988815665238117258439843 -0.559020814299583501671975227509 +0.330575394630432117804019753748 -0.263121297955513033794971988755 0.154878298938274400198267244377 +0.330575394630432117804019753748 0.263121297955513033794971988755 0.154878298938274400198267244377 +0.330716764926910433697315738755 -0.536363741755485512463508257497 0.159501551836729066335962556877 +0.330716764926910433697315738755 0.536363741755485512463508257497 0.159501551836729066335962556877 +0.33079059422016143798828125 -0.0935823008418083107651241903113 0.0657268516719341222565020643742 +0.33079059422016143798828125 0.0935823008418083107651241903113 0.0657268516719341222565020643742 +0.331278003752231597900390625 -0.117324002087116241455078125 -0.66256351768970489501953125 +0.331278003752231597900390625 0.117324002087116241455078125 -0.66256351768970489501953125 +0.331351496279239654541015625 -0.4855544865131378173828125 -0.46577100455760955810546875 +0.331351496279239654541015625 0.4855544865131378173828125 -0.46577100455760955810546875 +0.331355702877044688836605246252 -0.28555963933467864990234375 -0.105637051910161969270340875937 +0.331355702877044688836605246252 0.28555963933467864990234375 -0.105637051910161969270340875937 +0.331361997127532947882144753748 -0.393601799011230435443309261245 0.308670008182525601458934261245 +0.331361997127532947882144753748 0.393601799011230435443309261245 0.308670008182525601458934261245 +0.3314135074615478515625 -0.36397850513458251953125 -0.087661497294902801513671875 +0.3314135074615478515625 0.36397850513458251953125 -0.087661497294902801513671875 +0.331455159187316883429019753748 -0.130466254055500024966463001874 -0.274983742833137534411491742503 +0.331455159187316883429019753748 0.130466254055500024966463001874 -0.274983742833137534411491742503 +0.331524547934532121118422764994 -0.0568603008985519367546324076557 -0.0967386022210121043762853787484 +0.331524547934532121118422764994 0.0568603008985519367546324076557 -0.0967386022210121043762853787484 +0.331531840562820423468082253748 -0.531388634443283103259147992503 -0.173818443715572368279964621252 +0.331531840562820423468082253748 0.531388634443283103259147992503 -0.173818443715572368279964621252 +0.33161701261997222900390625 -0.424916261434555075915397992503 0.109435699135065081510909124063 +0.33161701261997222900390625 0.424916261434555075915397992503 0.109435699135065081510909124063 +0.331906490027904510498046875 -0.36467550694942474365234375 -0.56511001288890838623046875 +0.331906490027904510498046875 0.36467550694942474365234375 -0.56511001288890838623046875 +0.332012555003166176526008257497 -0.1012145988643169403076171875 -0.775901240110397294458266514994 +0.332012555003166176526008257497 0.1012145988643169403076171875 -0.775901240110397294458266514994 +0.332082903385162386822315738755 -0.118836450576782229338057561563 0.279461690783500693591179242503 +0.332082903385162386822315738755 0.118836450576782229338057561563 0.279461690783500693591179242503 +0.33217830955982208251953125 0 0.303574508428573641705128238755 +0.332240796089172396587940738755 -0.220966410636901866570980246252 0.028105199337005615234375 +0.332240796089172396587940738755 0.220966410636901866570980246252 0.028105199337005615234375 +0.332303190231323264391960492503 -0.0526992022991180433799662807814 0.216326808929443364926115123126 +0.332303190231323264391960492503 0.0526992022991180433799662807814 0.216326808929443364926115123126 +0.332341599464416548315170985006 -0.221347594261169455798210492503 -0.0235464006662368802169638115629 +0.332341599464416548315170985006 0.221347594261169455798210492503 -0.0235464006662368802169638115629 +0.332415443658828746453792746252 -0.21856905519962310791015625 0.210303895175457000732421875 +0.332415443658828746453792746252 0.21856905519962310791015625 0.210303895175457000732421875 +0.332426404953002962994190738755 -0.201681995391845725329460492503 -0.0938996016979217612563601846887 +0.332426404953002962994190738755 0.201681995391845725329460492503 -0.0938996016979217612563601846887 +0.332427543401718095239516514994 -0.0423996999859809833854917826557 0.100966596603393549136384876874 +0.332427543401718095239516514994 0.0423996999859809833854917826557 0.100966596603393549136384876874 +0.332468551397323619500667746252 -0.241551455855369578973323996252 0.183350698649883264712556751874 +0.332468551397323619500667746252 0.241551455855369578973323996252 0.183350698649883264712556751874 +0.332582411170005809442073996252 -0.6401502192020416259765625 0.5381415188312530517578125 +0.332582411170005809442073996252 0.6401502192020416259765625 0.5381415188312530517578125 +0.33277915418148040771484375 -0.386597192287445101666065738755 -0.205670846998691564389005748126 +0.33277915418148040771484375 0.386597192287445101666065738755 -0.205670846998691564389005748126 +0.332821759581565845831363503748 -0.64484997093677520751953125 -0.442604354023933388440070757497 +0.332821759581565845831363503748 0.64484997093677520751953125 -0.442604354023933388440070757497 +0.33285200595855712890625 -0.168943202495574956722990123126 -0.143763196468353282586605246252 +0.33285200595855712890625 0.168943202495574956722990123126 -0.143763196468353282586605246252 +0.33287028968334197998046875 -0.108154553174972523077457253748 0 +0.33287028968334197998046875 0.108154553174972523077457253748 0 +0.332941210269927956311164507497 -0.143203800916671758480802623126 -0.478166413307189896997329014994 +0.332941210269927956311164507497 0.143203800916671758480802623126 -0.478166413307189896997329014994 +0.332954001426696788445980246252 -0.082439601421356201171875 -0.205779600143432633840845369377 +0.332954001426696788445980246252 0.082439601421356201171875 -0.205779600143432633840845369377 +0.333000004291534423828125 -0.1596100032329559326171875 -0.92931997776031494140625 +0.333000004291534423828125 0.1596100032329559326171875 -0.92931997776031494140625 +0.33317311108112335205078125 -0.340669536590576194079460492503 0.442086440324783336297542746252 +0.33317311108112335205078125 0.340669536590576194079460492503 0.442086440324783336297542746252 +0.333278393745422396587940738755 -0.707807207107543967516960492503 -0.167138397693634033203125 +0.333278393745422396587940738755 0.707807207107543967516960492503 -0.167138397693634033203125 +0.333289456367492686883480246252 -0.450953748822212230340511496252 -0.328722545504570029528679242503 +0.333289456367492686883480246252 0.450953748822212230340511496252 -0.328722545504570029528679242503 +0.3333880007266998291015625 -0.24221749603748321533203125 -0.2831664979457855224609375 +0.3333880007266998291015625 0.24221749603748321533203125 -0.2831664979457855224609375 +0.333738398551940929070980246252 -0.713393592834472678454460492503 0.140314400196075439453125 +0.333738398551940929070980246252 0.713393592834472678454460492503 0.140314400196075439453125 +0.333739739656448375360042746252 -0.666264000535011224890524772491 0.408912043273448932989566628748 +0.333739739656448375360042746252 0.666264000535011224890524772491 0.408912043273448932989566628748 +0.3340991437435150146484375 -0.424511462450027521331463731258 -0.103285052627325069085628683752 +0.3340991437435150146484375 0.424511462450027521331463731258 -0.103285052627325069085628683752 +0.3341189920902252197265625 -0.896799981594085693359375 0.2900229990482330322265625 +0.3341189920902252197265625 0.896799981594085693359375 0.2900229990482330322265625 +0.334182608127593983038394753748 -0.497068190574645962787059261245 0.03528960049152374267578125 +0.334182608127593983038394753748 0.497068190574645962787059261245 0.03528960049152374267578125 +0.3342309892177581787109375 -0.099168002605438232421875 0.3584065139293670654296875 +0.3342309892177581787109375 0.099168002605438232421875 0.3584065139293670654296875 +0.33437325060367584228515625 -0.05884350277483463287353515625 -0.6687540113925933837890625 +0.33437325060367584228515625 0.05884350277483463287353515625 -0.6687540113925933837890625 +0.3343839943408966064453125 -0.033302001655101776123046875 0.370240986347198486328125 +0.3343839943408966064453125 0.033302001655101776123046875 0.370240986347198486328125 +0.334387993812561068462940738755 -0.564184808731079123766960492503 -0.458127212524414073602230246252 +0.334387993812561068462940738755 0.564184808731079123766960492503 -0.458127212524414073602230246252 +0.33440105617046356201171875 -0.0345729008316993727256694057814 -0.78069268167018890380859375 +0.33440105617046356201171875 0.0345729008316993727256694057814 -0.78069268167018890380859375 +0.334490001201629638671875 -0.3088360130786895751953125 -0.20672850310802459716796875 +0.334490001201629638671875 0.3088360130786895751953125 -0.20672850310802459716796875 +0.334552216529846180304019753748 -0.496288204193115201068309261245 -0.0421061977744102491905131557814 +0.334552216529846180304019753748 0.496288204193115201068309261245 -0.0421061977744102491905131557814 +0.334654960036277759893863503748 -0.0142247002571821209299107735546 0.10150735080242156982421875 +0.334654960036277759893863503748 0.0142247002571821209299107735546 0.10150735080242156982421875 +0.33481800556182861328125 -0.243256795406341541632144753748 -0.434422802925109874383480246252 +0.33481800556182861328125 0.243256795406341541632144753748 -0.434422802925109874383480246252 +0.334870210289955116955695757497 -0.0285250004380941356296741417964 -0.0977147489786148043533486884371 +0.334870210289955116955695757497 0.0285250004380941356296741417964 -0.0977147489786148043533486884371 +0.3349528014659881591796875 -0.470619791746139493060496761245 -0.395378208160400368420539507497 +0.3349528014659881591796875 0.470619791746139493060496761245 -0.395378208160400368420539507497 +0.334964004158973649438735264994 -0.0704151004552841103256710653113 -0.0730806998908519744873046875 +0.334964004158973649438735264994 0.0704151004552841103256710653113 -0.0730806998908519744873046875 +0.335216689109802234991519753748 -0.0596560500562191009521484375 0.29422934353351593017578125 +0.335216689109802234991519753748 0.0596560500562191009521484375 0.29422934353351593017578125 +0.3353140056133270263671875 -0.819204986095428466796875 0.4652599990367889404296875 +0.3353140056133270263671875 0.819204986095428466796875 0.4652599990367889404296875 +0.33540751039981842041015625 0 -0.67082177102565765380859375 +0.335408248007297515869140625 -0.39429523050785064697265625 0.54270900785923004150390625 +0.335408248007297515869140625 0.39429523050785064697265625 0.54270900785923004150390625 +0.335408508777618408203125 -0.081228502094745635986328125 -0.361805498600006103515625 +0.335408508777618408203125 0.081228502094745635986328125 -0.361805498600006103515625 +0.33540999889373779296875 -0.3440949916839599609375 0.13819800317287445068359375 +0.33540999889373779296875 0.3440949916839599609375 0.13819800317287445068359375 +0.335412003099918365478515625 -0.63798598945140838623046875 -0.207297742366790771484375 +0.335412003099918365478515625 0.63798598945140838623046875 -0.207297742366790771484375 +0.335438606142997697290297764994 -0.434165185689926125256477007497 0.434719604253768876489516514994 +0.335438606142997697290297764994 0.434165185689926125256477007497 0.434719604253768876489516514994 +0.335518205165863003802684261245 -0.040044598281383514404296875 0.495806407928466752466079014994 +0.335518205165863003802684261245 0.040044598281383514404296875 0.495806407928466752466079014994 +0.335526090860366832391292746252 -0.243770805001258861199886496252 -0.500497391819953896252570757497 +0.335526090860366832391292746252 0.243770805001258861199886496252 -0.500497391819953896252570757497 +0.335568404197692904400440738755 -0.121519601345062261410490123126 0.180629205703735362664730246252 +0.335568404197692904400440738755 0.121519601345062261410490123126 0.180629205703735362664730246252 +0.335623192787170454565170985006 -0.724665594100952215050881477509 0.0470872014760971083213725307814 +0.335623192787170454565170985006 0.724665594100952215050881477509 0.0470872014760971083213725307814 +0.3356391489505767822265625 -0.0961415007710456764877804403113 -0.0245619487017393091365935475778 +0.3356391489505767822265625 0.0961415007710456764877804403113 -0.0245619487017393091365935475778 +0.335663995146751381604133257497 -0.140256203711032867431640625 0.598044979572296075964743522491 +0.335663995146751381604133257497 0.140256203711032867431640625 0.598044979572296075964743522491 +0.3357295095920562744140625 -0.1930924952030181884765625 0.3162294924259185791015625 +0.3357295095920562744140625 0.1930924952030181884765625 0.3162294924259185791015625 +0.33573855459690093994140625 -0.0562170013785362188141192518742 0.0813592500984668676178301893742 +0.33573855459690093994140625 0.0562170013785362188141192518742 0.0813592500984668676178301893742 +0.335841608047485362664730246252 -0.126709198951721196957365123126 -0.176508402824401861019865123126 +0.335841608047485362664730246252 0.126709198951721196957365123126 -0.176508402824401861019865123126 +0.335842800140380870477230246252 -0.184104394912719737664730246252 -0.115391194820404052734375 +0.335842800140380870477230246252 0.184104394912719737664730246252 -0.115391194820404052734375 +0.335855698585510287212940738755 -0.796282196044921897204460492503 -0.251267409324646029400440738755 +0.335855698585510287212940738755 0.796282196044921897204460492503 -0.251267409324646029400440738755 +0.335914058983325936047492632497 -0.488285908102989163470653011245 0.609293606877326920923110264994 +0.335914058983325936047492632497 0.488285908102989163470653011245 0.609293606877326920923110264994 +0.335935211181640658306690738755 -0.723871183395385808800881477509 -0.0561999976634979248046875 +0.335935211181640658306690738755 0.723871183395385808800881477509 -0.0561999976634979248046875 +0.335988101363182023462172764994 0 -0.0980409517884254372299679403113 +0.336004894971847489770766514994 -0.0957960531115531893631143134371 0.0205856002867221832275390625 +0.336004894971847489770766514994 0.0957960531115531893631143134371 0.0205856002867221832275390625 +0.336057744920253753662109375 -0.55854298174381256103515625 0.370937995612621307373046875 +0.336057744920253753662109375 0.55854298174381256103515625 0.370937995612621307373046875 +0.336338451504707314221320757497 -0.0835358999669551793854083143742 -0.0489723481237888322303852817186 +0.336338451504707314221320757497 0.0835358999669551793854083143742 -0.0489723481237888322303852817186 +0.336435592174530007092414507497 -0.420370209217071522100894753748 -0.264763194322586048468082253748 +0.336435592174530007092414507497 0.420370209217071522100894753748 -0.264763194322586048468082253748 +0.3368887603282928466796875 -0.64700098335742950439453125 0.1743427477777004241943359375 +0.3368887603282928466796875 0.64700098335742950439453125 0.1743427477777004241943359375 +0.336962994933128368035823996252 -0.216773150861263280697599498126 0.376783013343811090667401231258 +0.336962994933128368035823996252 0.216773150861263280697599498126 0.376783013343811090667401231258 +0.33697275817394256591796875 -0.0998025052249431610107421875 0.6625627577304840087890625 +0.33697275817394256591796875 0.0998025052249431610107421875 0.6625627577304840087890625 +0.337005996704101584704460492503 -0.0551800012588501004318075615629 -0.208283591270446793997095369377 +0.337005996704101584704460492503 0.0551800012588501004318075615629 -0.208283591270446793997095369377 +0.337071695923805203509715511245 -0.554853612184524447314970529987 0.261762896180152859759715511245 +0.337071695923805203509715511245 0.554853612184524447314970529987 0.261762896180152859759715511245 +0.337076152861118305548160378748 -0.698049563169479303503806022491 -0.549187380075454645300681022491 +0.337076152861118305548160378748 0.698049563169479303503806022491 -0.549187380075454645300681022491 +0.337130504846572864874332253748 -0.280675503611564625128238503748 0.5454945862293243408203125 +0.337130504846572864874332253748 0.280675503611564625128238503748 0.5454945862293243408203125 +0.33720600605010986328125 -0.367505013942718505859375 0.0350989997386932373046875 +0.33720600605010986328125 0.367505013942718505859375 0.0350989997386932373046875 +0.337292101979255687371761496252 -0.171772205829620355777009876874 -0.243369001150131242239282869377 +0.337292101979255687371761496252 0.171772205829620355777009876874 -0.243369001150131242239282869377 +0.337347006797790560650440738755 -0.267701411247253440173210492503 -0.130510349571704875604183371252 +0.337347006797790560650440738755 0.267701411247253440173210492503 -0.130510349571704875604183371252 +0.337364387512207042352230246252 -0.342747616767883289679019753748 -0.358761012554168701171875 +0.337364387512207042352230246252 0.342747616767883289679019753748 -0.358761012554168701171875 +0.337442699074745167120426003748 -0.0697648018598556463043536268742 0.0613626986742019583931373460928 +0.337442699074745167120426003748 0.0697648018598556463043536268742 0.0613626986742019583931373460928 +0.337446892261505149157585492503 -0.29095919430255889892578125 0.06302654743194580078125 +0.337446892261505149157585492503 0.29095919430255889892578125 0.06302654743194580078125 +0.337493383884429898333934261245 -0.0966017961502075167556924384371 -0.486586189270019509045539507497 +0.337493383884429898333934261245 0.0966017961502075167556924384371 -0.486586189270019509045539507497 +0.337531590461730923724559261245 -0.0829790510237216893951739393742 0.0410724990069866180419921875 +0.337531590461730923724559261245 0.0829790510237216893951739393742 0.0410724990069866180419921875 +0.3375990092754364013671875 -0.08113999664783477783203125 -0.93778598308563232421875 +0.3375990092754364013671875 0.08113999664783477783203125 -0.93778598308563232421875 +0.3377470076084136962890625 -0.286024987697601318359375 -0.23262999951839447021484375 +0.3377470076084136962890625 0.286024987697601318359375 -0.23262999951839447021484375 +0.3378674983978271484375 -0.3673965036869049072265625 -0.02941399998962879180908203125 +0.3378674983978271484375 0.3673965036869049072265625 -0.02941399998962879180908203125 +0.3378979861736297607421875 -0.432244440913200411724659488755 0.0385973479598760646491761860943 +0.3378979861736297607421875 0.432244440913200411724659488755 0.0385973479598760646491761860943 +0.338114711642265364233139735006 -0.110651751607656487208508622189 -0.419445410370826776702557481258 +0.338114711642265364233139735006 0.110651751607656487208508622189 -0.419445410370826776702557481258 +0.338378396630287181512386496252 -0.806760889291763372277443977509 0.211274103820323938540681751874 +0.338378396630287181512386496252 0.806760889291763372277443977509 0.211274103820323938540681751874 +0.338380348682403575555355246252 -0.0366899482905864715576171875 0.432032698392868064196647992503 +0.338380348682403575555355246252 0.0366899482905864715576171875 0.432032698392868064196647992503 +0.338459345698356617315738503748 -0.63412405550479888916015625 0.621154630184173606188835492503 +0.338459345698356617315738503748 0.63412405550479888916015625 0.621154630184173606188835492503 +0.338499605655670166015625 -0.27652680873870849609375 0.411036014556884765625 +0.338499605655670166015625 0.27652680873870849609375 0.411036014556884765625 +0.3385111391544342041015625 -0.0990508474409580313979617471887 -0.279462146759033192022769753748 +0.3385111391544342041015625 0.0990508474409580313979617471887 -0.279462146759033192022769753748 +0.338576190173625946044921875 -0.324357545375823952404914507497 -0.8262311518192291259765625 +0.338576190173625946044921875 0.324357545375823952404914507497 -0.8262311518192291259765625 +0.33858166635036468505859375 -0.109218449145555507318050558752 0.419444853067398093493522992503 +0.33858166635036468505859375 0.109218449145555507318050558752 0.419444853067398093493522992503 +0.338592004776000987664730246252 -0.649732780456543035363381477509 -0.32125198841094970703125 +0.338592004776000987664730246252 0.649732780456543035363381477509 -0.32125198841094970703125 +0.338663601875305197985710492503 -0.2053492069244384765625 0.05602359771728515625 +0.338663601875305197985710492503 0.2053492069244384765625 0.05602359771728515625 +0.338663655519485462530582253748 -0.086789302527904510498046875 0.547972738742828369140625 +0.338663655519485462530582253748 0.086789302527904510498046875 0.547972738742828369140625 +0.338682866096496615337940738755 -0.432143241167068536956463731258 -0.0323488004505634307861328125 +0.338682866096496615337940738755 0.432143241167068536956463731258 -0.0323488004505634307861328125 +0.338696002960205078125 -0.0784056007862091175475427462516 0.197832405567169189453125 +0.338696002960205078125 0.0784056007862091175475427462516 0.197832405567169189453125 +0.338698650896549213751285378748 -0.385887254774570476190120871252 -0.677402418851852372583266514994 +0.338698650896549213751285378748 0.385887254774570476190120871252 -0.677402418851852372583266514994 +0.338706457614898703845085492503 -0.146187445521354680844083873126 0.2576956450939178466796875 +0.338706457614898703845085492503 0.146187445521354680844083873126 0.2576956450939178466796875 +0.3387160003185272216796875 0 -0.94088900089263916015625 +0.3387379944324493408203125 -0.3941330015659332275390625 0.854350984096527099609375 +0.3387379944324493408203125 0.3941330015659332275390625 0.854350984096527099609375 +0.338758197426795970574886496252 -0.209542952477931976318359375 -0.209366999566555023193359375 +0.338758197426795970574886496252 0.209542952477931976318359375 -0.209366999566555023193359375 +0.3387934863567352294921875 -0.0407500006258487701416015625 -0.3654564917087554931640625 +0.3387934863567352294921875 0.0407500006258487701416015625 -0.3654564917087554931640625 +0.338813734054565440789730246252 -0.291020965576171908306690738755 -0.320955240726470969470085492503 +0.338813734054565440789730246252 0.291020965576171908306690738755 -0.320955240726470969470085492503 +0.33884279429912567138671875 -0.721349108219146772924545985006 -0.418139997124671924932926003748 +0.33884279429912567138671875 0.721349108219146772924545985006 -0.418139997124671924932926003748 +0.338855007290840171130241742503 -0.363484016060829195904346988755 -0.235704699158668540270866742503 +0.338855007290840171130241742503 0.363484016060829195904346988755 -0.235704699158668540270866742503 +0.338868463039398215563835492503 -0.291334488987922690661491742503 -0.0528439499437809018234091240629 +0.338868463039398215563835492503 0.291334488987922690661491742503 -0.0528439499437809018234091240629 +0.339048856496810879779246761245 -0.0282002005726098986526650946871 0.0821614474058151161850460653113 +0.339048856496810879779246761245 0.0282002005726098986526650946871 0.0821614474058151161850460653113 +0.339049807190895113873096988755 -0.24633179605007171630859375 -0.796471184492111183850227007497 +0.339049807190895113873096988755 0.24633179605007171630859375 -0.796471184492111183850227007497 +0.339121308922767594751235264994 -0.361280506849288918225227007497 -0.494442182779312122686832253748 +0.339121308922767594751235264994 0.361280506849288918225227007497 -0.494442182779312122686832253748 +0.339121997356414794921875 0 0.940743029117584228515625 +0.339315199851989768298210492503 -0.0263267993927001967002787807814 0.210171604156494162829460492503 +0.339315199851989768298210492503 0.0263267993927001967002787807814 0.210171604156494162829460492503 +0.339371609687805220190170985006 -0.206447196006774913445980246252 -0.0469723999500274713714276231258 +0.339371609687805220190170985006 0.206447196006774913445980246252 -0.0469723999500274713714276231258 +0.339375209808349620477230246252 -0.442692804336547895971420985006 -0.573452806472778298108039507497 +0.339375209808349620477230246252 0.442692804336547895971420985006 -0.573452806472778298108039507497 +0.339444804191589399877670985006 -0.0276560008525848395610768903907 -0.209791207313537619860710492503 +0.339444804191589399877670985006 0.0276560008525848395610768903907 -0.209791207313537619860710492503 +0.339465004205703690942641514994 -0.546140712499618485864516514994 -0.27657561004161834716796875 +0.339465004205703690942641514994 0.546140712499618485864516514994 -0.27657561004161834716796875 +0.339477610588073741570980246252 -0.470070612430572465356704014994 0.154235404729843122995092130623 +0.339477610588073741570980246252 0.470070612430572465356704014994 0.154235404729843122995092130623 +0.339567205309867836682258257497 -0.0429796505719423280189595004686 -0.0731226995587348910232705634371 +0.339567205309867836682258257497 0.0429796505719423280189595004686 -0.0731226995587348910232705634371 +0.339624366164207491802784488755 -0.55421598255634307861328125 0 +0.339624366164207491802784488755 0.55421598255634307861328125 0 +0.339924001693725552630809261245 -0.0493932008743286146690287807814 -0.491947209835052468029914507497 +0.339924001693725552630809261245 0.0493932008743286146690287807814 -0.491947209835052468029914507497 +0.3399240076541900634765625 0 -0.366676509380340576171875 +0.33992850780487060546875 -0.54596476256847381591796875 -0.38583751022815704345703125 +0.33992850780487060546875 0.54596476256847381591796875 -0.38583751022815704345703125 +0.339955997467041026727230246252 -0.664648818969726606908920985006 0.287526392936706565173210492503 +0.339955997467041026727230246252 0.664648818969726606908920985006 0.287526392936706565173210492503 +0.34006500244140625 -0.649442017078399658203125 -0.68013298511505126953125 +0.34006500244140625 0.649442017078399658203125 -0.68013298511505126953125 +0.3401548564434051513671875 0 0.082429550588130950927734375 +0.340258407592773481908920985006 -0.247208809852600103207365123126 -0.680523204803466841283920985006 +0.340258407592773481908920985006 0.247208809852600103207365123126 -0.680523204803466841283920985006 +0.34025919437408447265625 0 -0.210294389724731467516960492503 +0.34026850759983062744140625 -0.548542144894599958959702235006 0.0762774981558322906494140625 +0.34026850759983062744140625 0.548542144894599958959702235006 0.0762774981558322906494140625 +0.340290009975433349609375 -0.16530050337314605712890625 -0.32692301273345947265625 +0.340290009975433349609375 0.16530050337314605712890625 -0.32692301273345947265625 +0.340329843759536732061832253748 -0.0817046977579593547424963162484 0 +0.340329843759536732061832253748 0.0817046977579593547424963162484 0 +0.340369606018066428454460492503 -0.1384603977203369140625 0.158042395114898703845085492503 +0.340369606018066428454460492503 0.1384603977203369140625 0.158042395114898703845085492503 +0.340382409095764171258480246252 -0.5339992046356201171875 0.488860797882080089227230246252 +0.340382409095764171258480246252 0.5339992046356201171875 0.488860797882080089227230246252 +0.34049324691295623779296875 -0.66825449466705322265625 0 +0.34049324691295623779296875 0.66825449466705322265625 0 +0.340568146109581026959034488755 -0.546115049719810508044304242503 -0.0909486465156078421889773721887 +0.340568146109581026959034488755 0.546115049719810508044304242503 -0.0909486465156078421889773721887 +0.3407495021820068359375 -0.3234190046787261962890625 0.171142995357513427734375 +0.3407495021820068359375 0.3234190046787261962890625 0.171142995357513427734375 +0.340820491313934326171875 -0.346889495849609375 -0.116228498518466949462890625 +0.340820491313934326171875 0.346889495849609375 -0.116228498518466949462890625 +0.340943354368209883276108485006 -0.405741056799888644146534488755 0.147077144682407401354851117503 +0.340943354368209883276108485006 0.405741056799888644146534488755 0.147077144682407401354851117503 +0.340959510207176186291633257497 -0.593618893623351961963408029987 -0.146162098646163918225227007497 +0.340959510207176186291633257497 0.593618893623351961963408029987 -0.146162098646163918225227007497 +0.34096300601959228515625 -0.222230494022369384765625 0.2904439866542816162109375 +0.34096300601959228515625 0.222230494022369384765625 0.2904439866542816162109375 +0.34100849926471710205078125 -0.66212774813175201416015625 0.08831924758851528167724609375 +0.34100849926471710205078125 0.66212774813175201416015625 0.08831924758851528167724609375 +0.341056799888610873150440738755 -0.208998394012451182977230246252 0 +0.341056799888610873150440738755 0.208998394012451182977230246252 0 +0.341078391671180758404346988755 -0.354316958785057090075554242503 -0.424999916553497336657585492503 +0.341078391671180758404346988755 0.354316958785057090075554242503 -0.424999916553497336657585492503 +0.341081392765045177117855246252 0 -0.493622410297393787725894753748 +0.3410860002040863037109375 -0.916091024875640869140625 -0.21080400049686431884765625 +0.3410860002040863037109375 0.916091024875640869140625 -0.21080400049686431884765625 +0.341149985790252685546875 -0.620235025882720947265625 0.706345975399017333984375 +0.341149985790252685546875 0.620235025882720947265625 0.706345975399017333984375 +0.3411810100078582763671875 -0.471695423126220703125 0.686366075277328513415397992503 +0.3411810100078582763671875 0.471695423126220703125 0.686366075277328513415397992503 +0.341252803802490234375 -0.598735916614532404089743522491 0.122726096212863913792467940311 +0.341252803802490234375 0.598735916614532404089743522491 0.122726096212863913792467940311 +0.34125749766826629638671875 -0.65950722992420196533203125 -0.1053240001201629638671875 +0.34125749766826629638671875 0.65950722992420196533203125 -0.1053240001201629638671875 +0.341258493065834056512386496252 -0.202682143449783330746427623126 -0.380739703774452264983807481258 +0.341258493065834056512386496252 0.202682143449783330746427623126 -0.380739703774452264983807481258 +0.341272106766700777935596988755 -0.513572153449058599328225227509 0.205613192915916453973323996252 +0.341272106766700777935596988755 0.513572153449058599328225227509 0.205613192915916453973323996252 +0.341408637166023265496761496252 -0.0675389017909765326797000284387 -0.425885346531867992059261496252 +0.341408637166023265496761496252 0.0675389017909765326797000284387 -0.425885346531867992059261496252 +0.341494612395763397216796875 -0.798165318369865373071547764994 -0.385763663053512562139957253748 +0.341494612395763397216796875 0.798165318369865373071547764994 -0.385763663053512562139957253748 +0.341724509000778220446647992503 0 0.552923786640167280737045985006 +0.3418065011501312255859375 -0.248334762454032909051448996252 -0.1549133956432342529296875 +0.3418065011501312255859375 0.248334762454032909051448996252 -0.1549133956432342529296875 +0.341829606890678372455028011245 -0.0144553503021597855304758439843 -0.073781050741672515869140625 +0.341829606890678372455028011245 0.0144553503021597855304758439843 -0.073781050741672515869140625 +0.341888415813446033819644753748 -0.393766200542449928967414507497 -0.2967503964900970458984375 +0.341888415813446033819644753748 0.393766200542449928967414507497 -0.2967503964900970458984375 +0.341919207572936978412059261245 -0.0563514024019241277496661268742 -0.0491508506238460540771484375 +0.341919207572936978412059261245 0.0563514024019241277496661268742 -0.0491508506238460540771484375 +0.341946887969970692022769753748 -0.611016279458999611584602007497 -0.5654474794864654541015625 +0.341946887969970692022769753748 0.611016279458999611584602007497 -0.5654474794864654541015625 +0.341951203346252452508480246252 -0.053367197513580322265625 0.721263217926025435033920985006 +0.341951203346252452508480246252 0.053367197513580322265625 0.721263217926025435033920985006 +0.34195385873317718505859375 -0.0424168508499860735794229071871 0.0613872006535530062576455634371 +0.34195385873317718505859375 0.0424168508499860735794229071871 0.0613872006535530062576455634371 +0.342160785198211636615184261245 -0.468121182918548539575454014994 -0.154235404729843122995092130623 +0.342160785198211636615184261245 0.468121182918548539575454014994 -0.154235404729843122995092130623 +0.342173990607261613305922764994 -0.0693783976137637981018713162484 -0.0245692998170852633377236884371 +0.342173990607261613305922764994 0.0693783976137637981018713162484 -0.0245692998170852633377236884371 +0.342183136940002463610710492503 -0.292251160740852389263721988755 0 +0.342183136940002463610710492503 0.292251160740852389263721988755 0 +0.3421860039234161376953125 -0.19833500683307647705078125 0.918461978435516357421875 +0.3421860039234161376953125 0.19833500683307647705078125 0.918461978435516357421875 +0.342190408706665061266960492503 -0.143289601802825933285490123126 -0.149578797817230241262720369377 +0.342190408706665061266960492503 0.143289601802825933285490123126 -0.149578797817230241262720369377 +0.342314702272415116723891514994 -0.0467186979949474334716796875 0.608800482749938920434829014994 +0.342314702272415116723891514994 0.0467186979949474334716796875 0.608800482749938920434829014994 +0.342403745651245094983039507497 -0.4378341138362884521484375 0.770429095625877358166633257497 +0.342403745651245094983039507497 0.4378341138362884521484375 0.770429095625877358166633257497 +0.3424097597599029541015625 -0.526303020119667008813735264994 -0.572940805554389975817741742503 +0.3424097597599029541015625 0.526303020119667008813735264994 -0.572940805554389975817741742503 +0.342503708600997880395766514994 -0.06904520094394683837890625 0.0205897999927401528785786410936 +0.342503708600997880395766514994 0.06904520094394683837890625 0.0205897999927401528785786410936 +0.3425669968128204345703125 -0.922681987285614013671875 0.1769340038299560546875 +0.3425669968128204345703125 0.922681987285614013671875 0.1769340038299560546875 +0.342644396424293506964176003748 -0.744397222995758056640625 0.37211130559444427490234375 +0.342644396424293506964176003748 0.744397222995758056640625 0.37211130559444427490234375 +0.342833209037780806127670985006 -0.188365602493286155016960492503 0.0835691988468170166015625 +0.342833209037780806127670985006 0.188365602493286155016960492503 0.0835691988468170166015625 +0.342850890755653392449886496252 0 0.777787408232688881604133257497 +0.342908406257629416735710492503 -0.0989287972450256375411825615629 -0.180629599094390885793970369377 +0.342908406257629416735710492503 0.0989287972450256375411825615629 -0.180629599094390885793970369377 +0.343012607097625710217414507497 -0.608807492256164484167868522491 0.0411795999854803057571572821871 +0.343012607097625710217414507497 0.608807492256164484167868522491 0.0411795999854803057571572821871 +0.3430329859256744384765625 -0.414267003536224365234375 -0.84303700923919677734375 +0.3430329859256744384765625 0.414267003536224365234375 -0.84303700923919677734375 +0.343045839667320218158153011245 -0.0558638505637645693679971259371 0.0412152994424104662796182196871 +0.343045839667320218158153011245 0.0558638505637645693679971259371 0.0412152994424104662796182196871 +0.343180811405181918072315738755 -0.470242792367935202868522992503 -0.686366075277328513415397992503 +0.343180811405181918072315738755 0.470242792367935202868522992503 -0.686366075277328513415397992503 +0.343213212490081798211605246252 -0.172624947130680078677400501874 0.234319040179252618960603626874 +0.343213212490081798211605246252 0.172624947130680078677400501874 0.234319040179252618960603626874 +0.343280848860740672723323996252 -0.33860035240650177001953125 -0.264590145647525809557976117503 +0.343280848860740672723323996252 0.33860035240650177001953125 -0.264590145647525809557976117503 +0.343378099799156177862613503748 -0.371239057183265719341846988755 0.40837873518466949462890625 +0.343378099799156177862613503748 0.371239057183265719341846988755 0.40837873518466949462890625 +0.343390506505966197625667746252 -0.06819570064544677734375 -0.282723310589790333136051003748 +0.343390506505966197625667746252 0.06819570064544677734375 -0.282723310589790333136051003748 +0.343425607681274447369190738755 -0.154690802097320556640625 0.134645605087280267886384876874 +0.343425607681274447369190738755 0.154690802097320556640625 0.134645605087280267886384876874 +0.343443107604980424341079014994 -0.607973819971084572522102007497 -0.0491385996341705266754473768742 +0.343443107604980424341079014994 0.607973819971084572522102007497 -0.0491385996341705266754473768742 +0.343709985911846149786441628748 -0.249719859659671777896150501874 0.849707576632499628210837272491 +0.343709985911846149786441628748 0.249719859659671777896150501874 0.849707576632499628210837272491 +0.343713808059692371710269753748 -0.55839003622531890869140625 -0.68743140995502471923828125 +0.343713808059692371710269753748 0.55839003622531890869140625 -0.68743140995502471923828125 +0.3438144028186798095703125 -0.674445587396621748510483485006 0.486738914251327536852897992503 +0.3438144028186798095703125 0.674445587396621748510483485006 0.486738914251327536852897992503 +0.343879786133766185418636496252 -0.249842454493045817986995871252 0.349035498499870311395198996252 +0.343879786133766185418636496252 0.249842454493045817986995871252 0.349035498499870311395198996252 +0.343894489109516143798828125 -0.311693251132965087890625 -0.589137732982635498046875 +0.343894489109516143798828125 0.311693251132965087890625 -0.589137732982635498046875 +0.343900647759437572137386496252 -0.72082208096981048583984375 -0.290943953394889820440738503748 +0.343900647759437572137386496252 0.72082208096981048583984375 -0.290943953394889820440738503748 +0.343924337625503562243522992503 -0.0227155504748225225974955776564 -0.428602889180183466155682481258 +0.343924337625503562243522992503 0.0227155504748225225974955776564 -0.428602889180183466155682481258 +0.3439874947071075439453125 -0.3007495105266571044921875 0.2030330002307891845703125 +0.3439874947071075439453125 0.3007495105266571044921875 0.2030330002307891845703125 +0.344009590148925792352230246252 -0.371368002891540538445980246252 0.619470405578613325658920985006 +0.344009590148925792352230246252 0.371368002891540538445980246252 0.619470405578613325658920985006 +0.344080084562301657946647992503 -0.508808931708335854260383257497 -0.212655298411846160888671875 +0.344080084562301657946647992503 0.508808931708335854260383257497 -0.212655298411846160888671875 +0.344082203507423356469985264994 -0.463987296819686867443977007497 0.395377498865127519067641514994 +0.344082203507423356469985264994 0.463987296819686867443977007497 0.395377498865127519067641514994 +0.3440945148468017578125 -0.24999849498271942138671875 0.262867987155914306640625 +0.3440945148468017578125 0.24999849498271942138671875 0.262867987155914306640625 +0.344139593839645374639957253748 -0.192282292246818531378238503748 -0.5784421861171722412109375 +0.344139593839645374639957253748 0.192282292246818531378238503748 -0.5784421861171722412109375 +0.344183695316314652856704014994 -0.0142369499430060383188267891796 0.0619265519082546206375283759371 +0.344183695316314652856704014994 0.0142369499430060383188267891796 0.0619265519082546206375283759371 +0.344415593147277820929019753748 -0.831491124629974431847756477509 0 +0.344415593147277820929019753748 0.831491124629974431847756477509 0 +0.3445456027984619140625 0 0.203194808959960948602230246252 +0.34460985660552978515625 -0.217189045250415796450838001874 0.506530067324638344494758257497 +0.34460985660552978515625 0.217189045250415796450838001874 0.506530067324638344494758257497 +0.3446238040924072265625 -0.159309607744216902291967130623 0.464602196216583218646434261245 +0.3446238040924072265625 0.159309607744216902291967130623 0.464602196216583218646434261245 +0.34463475644588470458984375 -0.273364198207855235711605246252 0.0948618002235889490325604356258 +0.34463475644588470458984375 0.273364198207855235711605246252 0.0948618002235889490325604356258 +0.344662404060363802837940738755 -0.190488398075103759765625 -0.0701572000980377197265625 +0.344662404060363802837940738755 0.190488398075103759765625 -0.0701572000980377197265625 +0.344701355695724520611378238755 -0.2278313934803009033203125 -0.178252650797367101498380748126 +0.344701355695724520611378238755 0.2278313934803009033203125 -0.178252650797367101498380748126 +0.344720694422721851690738503748 -0.824619573354721135949318977509 0.105687899887561803646818248126 +0.344720694422721851690738503748 0.824619573354721135949318977509 0.105687899887561803646818248126 +0.344721603393554731908920985006 -0.170128798484802251644865123126 0.110558402538299571649105246252 +0.344721603393554731908920985006 0.170128798484802251644865123126 0.110558402538299571649105246252 +0.34483994543552398681640625 -0.0892732501029968317229901231258 0.274982857704162586554019753748 +0.34483994543552398681640625 0.0892732501029968317229901231258 0.274982857704162586554019753748 +0.344865596294403053967414507497 -0.311552989482879627569644753748 0.379476606845855712890625 +0.344865596294403053967414507497 0.311552989482879627569644753748 0.379476606845855712890625 +0.34488201141357421875 0 0.3620170056819915771484375 +0.344886294007301363873096988755 -0.821683788299560569079460492503 -0.1260530948638916015625 +0.344886294007301363873096988755 0.821683788299560569079460492503 -0.1260530948638916015625 +0.344923496246337890625 -0.1320745050907135009765625 0.3370225131511688232421875 +0.344923496246337890625 0.1320745050907135009765625 0.3370225131511688232421875 +0.344925753772258758544921875 -0.250602744519710540771484375 0.61702872812747955322265625 +0.344925753772258758544921875 0.250602744519710540771484375 0.61702872812747955322265625 +0.345059940218925442767528011245 -0.0632738031446933718582315009371 0.882853072881698563989516514994 +0.345059940218925442767528011245 0.0632738031446933718582315009371 0.882853072881698563989516514994 +0.345104992389678955078125 -0.276225507259368896484375 0.23367099463939666748046875 +0.345104992389678955078125 0.276225507259368896484375 0.23367099463939666748046875 +0.345109936594963084832698996252 -0.0297188993543386452411692033593 0.287255707383155811651676003748 +0.345109936594963084832698996252 0.0297188993543386452411692033593 0.287255707383155811651676003748 +0.345138490200042724609375 -0.524848794937133766858039507497 0.308890393376350380627570757497 +0.345138490200042724609375 0.524848794937133766858039507497 0.308890393376350380627570757497 +0.345159649848938043792401231258 -0.406386184692382856908920985006 -0.134962851554155355282560435626 +0.345159649848938043792401231258 0.406386184692382856908920985006 -0.134962851554155355282560435626 +0.345350256562232948986945757497 -0.0288127005100250223323943288278 -0.04902064800262451171875 +0.345350256562232948986945757497 0.0288127005100250223323943288278 -0.04902064800262451171875 +0.345691156387329057153579014994 -0.0547512009739875779579243442186 0 +0.345691156387329057153579014994 0.0547512009739875779579243442186 0 +0.34578169882297515869140625 -0.168792148679494852236970814374 0.757921212911605857165397992503 +0.34578169882297515869140625 0.168792148679494852236970814374 0.757921212911605857165397992503 +0.346180009841918989721420985006 -0.0948907971382141196547976846887 0.176507997512817399465845369377 +0.346180009841918989721420985006 0.0948907971382141196547976846887 0.176507997512817399465845369377 +0.346314406394958529400440738755 -0.158938002586364757195980246252 -0.121676397323608409539730246252 +0.346314406394958529400440738755 0.158938002586364757195980246252 -0.121676397323608409539730246252 +0.346416348218917813372996761245 -0.0283993508666753741165322821871 0.0411005005240440354774555942186 +0.346416348218917813372996761245 0.0283993508666753741165322821871 0.0411005005240440354774555942186 +0.3465135097503662109375 -0.177543903887271897756860994377 -0.811422890424728371350227007497 +0.3465135097503662109375 0.177543903887271897756860994377 -0.811422890424728371350227007497 +0.346526601910591092181590511245 0 -0.0491875983774661962311114393742 +0.346572893857955921514957253748 -0.142547406256198883056640625 -0.2491334974765777587890625 +0.346572893857955921514957253748 0.142547406256198883056640625 -0.2491334974765777587890625 +0.346596738696098360943409488755 -0.03700844943523406982421875 -0.284606999158859286236378238755 +0.346596738696098360943409488755 0.03700844943523406982421875 -0.284606999158859286236378238755 +0.346610257029533352923778011245 -0.0419139005243778228759765625 -0.02458749897778034210205078125 +0.346610257029533352923778011245 0.0419139005243778228759765625 -0.02458749897778034210205078125 +0.346723604202270552221420985006 -0.0524800002574920682052450615629 0.192428004741668712274105246252 +0.346723604202270552221420985006 0.0524800002574920682052450615629 0.192428004741668712274105246252 +0.3467989861965179443359375 -0.21117900311946868896484375 -0.29177701473236083984375 +0.3467989861965179443359375 0.21117900311946868896484375 -0.29177701473236083984375 +0.346898648142814625128238503748 -0.0416769489645957905143980326557 0.0206002999097108820125701100778 +0.346898648142814625128238503748 0.0416769489645957905143980326557 0.0206002999097108820125701100778 +0.346908986568450927734375 -0.936049997806549072265625 0.058866001665592193603515625 +0.346908986568450927734375 0.936049997806549072265625 0.058866001665592193603515625 +0.3472492396831512451171875 -0.274915346503257773669304242503 -0.079620301723480224609375 +0.3472492396831512451171875 0.274915346503257773669304242503 -0.079620301723480224609375 +0.34726798534393310546875 -0.93513000011444091796875 -0.0702629983425140380859375 +0.34726798534393310546875 0.93513000011444091796875 -0.0702629983425140380859375 +0.3473972976207733154296875 -0.119929504394531247224442438437 0.821542489528656050268295985006 +0.3473972976207733154296875 0.119929504394531247224442438437 0.821542489528656050268295985006 +0.347407758235931396484375 -0.73599036037921905517578125 0.245206288993358612060546875 +0.347407758235931396484375 0.73599036037921905517578125 0.245206288993358612060546875 +0.347562256455421436651676003748 0 0.0412366487085819230506977817186 +0.3476519882678985595703125 -0.0663959980010986328125 0.35317099094390869140625 +0.3476519882678985595703125 0.0663959980010986328125 0.35317099094390869140625 +0.347774845361709605828792746252 0 -0.285574498772621143682926003748 +0.3478510081768035888671875 -0.3522349894046783447265625 0.070215500891208648681640625 +0.3478510081768035888671875 0.3522349894046783447265625 0.070215500891208648681640625 +0.347883200645446810650440738755 -0.186752796173095703125 -0.695773601531982421875 +0.347883200645446810650440738755 0.186752796173095703125 -0.695773601531982421875 +0.34796559810638427734375 -0.0718371987342834444900674384371 -0.183737599849700949938835492503 +0.34796559810638427734375 0.0718371987342834444900674384371 -0.183737599849700949938835492503 +0.347974540293216672015574886245 -0.821682569384574845727797764994 0.32596211135387420654296875 +0.347974540293216672015574886245 0.821682569384574845727797764994 0.32596211135387420654296875 +0.348115217685699473992855246252 -0.203521800041198713815404630623 -0.444291007518768321649105246252 +0.348115217685699473992855246252 0.203521800041198713815404630623 -0.444291007518768321649105246252 +0.348185992240905795025440738755 -0.173553204536437993832365123126 -0.0929823994636535672286825615629 +0.348185992240905795025440738755 0.173553204536437993832365123126 -0.0929823994636535672286825615629 +0.348212164640426646844417746252 -0.383369258046150240826221988755 0.185138247907161740402059990629 +0.348212164640426646844417746252 0.383369258046150240826221988755 0.185138247907161740402059990629 +0.34829623997211456298828125 -0.43084050714969635009765625 0.50553600490093231201171875 +0.34829623997211456298828125 0.43084050714969635009765625 0.50553600490093231201171875 +0.348389813303947470934929242503 -0.281161087751388594213608485006 0.319488942623138427734375 +0.348389813303947470934929242503 0.281161087751388594213608485006 0.319488942623138427734375 +0.348425546288490317614616742503 -0.253143002092838298455745871252 -0.342079105973243757787827235006 +0.348425546288490317614616742503 0.253143002092838298455745871252 -0.342079105973243757787827235006 +0.348429501056671142578125 -0.253145992755889892578125 -0.25399601459503173828125 +0.348429501056671142578125 0.253145992755889892578125 -0.25399601459503173828125 +0.348447597026824984478565738755 -0.299105089902877818719417746252 0.774028819799423284386818977509 +0.348447597026824984478565738755 0.299105089902877818719417746252 0.774028819799423284386818977509 +0.348458351194858517718699886245 -0.339663393795490264892578125 0.696926075220107965613181022491 +0.348458351194858517718699886245 0.339663393795490264892578125 0.696926075220107965613181022491 +0.348497249186038970947265625 -0.43776373565196990966796875 -0.49941225349903106689453125 +0.348497249186038970947265625 0.43776373565196990966796875 -0.49941225349903106689453125 +0.348536396026611294818309261245 -0.447202205657958984375 0.1962971985340118408203125 +0.348536396026611294818309261245 0.447202205657958984375 0.1962971985340118408203125 +0.348571205139160178454460492503 -0.212412810325622564144865123126 0.688025617599487326891960492503 +0.348571205139160178454460492503 0.212412810325622564144865123126 0.688025617599487326891960492503 +0.348596513271331787109375 -0.3281399905681610107421875 -0.14423899352550506591796875 +0.348596513271331787109375 0.3281399905681610107421875 -0.14423899352550506591796875 +0.34862959384918212890625 -0.194081997871398931332365123126 0.02809999883174896240234375 +0.34862959384918212890625 0.194081997871398931332365123126 0.02809999883174896240234375 +0.348736810684204145971420985006 -0.194494795799255382195980246252 -0.0235436007380485541606862653907 +0.348736810684204145971420985006 0.194494795799255382195980246252 -0.0235436007380485541606862653907 +0.348835545778274525030582253748 -0.0144546501338481889198384067186 -0.024592049419879913330078125 +0.348835545778274525030582253748 0.0144546501338481889198384067186 -0.024592049419879913330078125 +0.348920953273773148950454014994 -0.0274603012949228252048694542964 0 +0.348920953273773148950454014994 0.0274603012949228252048694542964 0 +0.348974990844726551397769753748 -0.302521812915801990850894753748 -0.383010005950927712170539507497 +0.348974990844726551397769753748 0.302521812915801990850894753748 -0.383010005950927712170539507497 +0.349015557765960715563835492503 -0.199975095689296722412109375 -0.510586035251617498254006477509 +0.349015557765960715563835492503 0.199975095689296722412109375 -0.510586035251617498254006477509 +0.349064102768898043560596988755 -0.192209404706954967156917746252 0.209069100022315990106136496252 +0.349064102768898043560596988755 0.192209404706954967156917746252 0.209069100022315990106136496252 +0.349100983142852760998664507497 -0.481809604167938221319644753748 0.0773831963539123451889523153113 +0.349100983142852760998664507497 0.481809604167938221319644753748 0.0773831963539123451889523153113 +0.349102950096130348889289507497 -0.0142362497746944417081893519139 0.0206031005829572649856729071871 +0.349102950096130348889289507497 0.0142362497746944417081893519139 0.0206031005829572649856729071871 +0.349242009222507476806640625 0 0.6637245118618011474609375 +0.3493550121784210205078125 -0.13077299296855926513671875 -0.332940995693206787109375 +0.3493550121784210205078125 0.13077299296855926513671875 -0.332940995693206787109375 +0.349483492970466602667301003748 -0.253913408517837557720753238755 0.1260530948638916015625 +0.349483492970466602667301003748 0.253913408517837557720753238755 0.1260530948638916015625 +0.349499988555908247533920985006 -0.567172813415527388158920985006 0.442904806137084994244190738755 +0.349499988555908247533920985006 0.567172813415527388158920985006 0.442904806137084994244190738755 +0.34956300258636474609375 -0.3526175022125244140625 -0.0588794983923435211181640625 +0.34956300258636474609375 0.3526175022125244140625 -0.0588794983923435211181640625 +0.349801351130008708611995871252 -0.528944790363311767578125 0.566000553965568475867087272491 +0.349801351130008708611995871252 0.528944790363311767578125 0.566000553965568475867087272491 +0.349862518906593311651676003748 -0.487132096290588401110710492503 0.250596453249454509393245871252 +0.349862518906593311651676003748 0.487132096290588401110710492503 0.250596453249454509393245871252 +0.349972200393676768914730246252 0 0.487359595298767045434829014994 +0.34999789297580718994140625 -0.138756795227527596203742632497 -0.590125906467437677527243522491 +0.34999789297580718994140625 0.138756795227527596203742632497 -0.590125906467437677527243522491 +0.349999999999999977795539507497 0 0 +0.350093084573745716436832253748 -0.517217403650283791272102007497 -0.316102507710456837042301003748 +0.350093084573745716436832253748 0.517217403650283791272102007497 -0.316102507710456837042301003748 +0.350157000124454498291015625 -0.62276852130889892578125 0.2281432449817657470703125 +0.350157000124454498291015625 0.62276852130889892578125 0.2281432449817657470703125 +0.3501918017864227294921875 -0.324947002530097950323551003748 0.511639797687530539782585492503 +0.3501918017864227294921875 0.324947002530097950323551003748 0.511639797687530539782585492503 +0.350271901488304171490284488755 -0.181507055461406718865902121252 -0.216482846438884740658536998126 +0.350271901488304171490284488755 0.181507055461406718865902121252 -0.216482846438884740658536998126 +0.350350785255432117804019753748 -0.480901801586151089740184261245 -0.0773831963539123451889523153113 +0.350350785255432117804019753748 0.480901801586151089740184261245 -0.0773831963539123451889523153113 +0.350384402275085493627670985006 -0.115970003604888918791182561563 -0.154213201999664317742855246252 +0.350384402275085493627670985006 0.115970003604888918791182561563 -0.154213201999664317742855246252 +0.350430855154991172106804242503 -0.416864243149757396356136496252 0.0769565470516681698898153740629 +0.350430855154991172106804242503 0.416864243149757396356136496252 0.0769565470516681698898153740629 +0.350460760295391082763671875 -0.6131400167942047119140625 -0.252461247146129608154296875 +0.350460760295391082763671875 0.6131400167942047119140625 -0.252461247146129608154296875 +0.350519990921020541119190738755 -0.632134389877319402550881477509 0.342843198776245139391960492503 +0.350519990921020541119190738755 0.632134389877319402550881477509 0.342843198776245139391960492503 +0.350523552298545870709034488755 -0.41247309744358062744140625 -0.359860154986381519659488503748 +0.350523552298545870709034488755 0.41247309744358062744140625 -0.359860154986381519659488503748 +0.350928592681884810033920985006 0 0.423496153950691234246761496252 +0.350961095094680763928352007497 -0.491430097818374600482371761245 0.354008895158767655786391514994 +0.350961095094680763928352007497 0.491430097818374600482371761245 0.354008895158767655786391514994 +0.351007238030433710296307481258 -0.144575196504592912161157869377 0.397984933853149425164730246252 +0.351007238030433710296307481258 0.144575196504592912161157869377 0.397984933853149425164730246252 +0.351059211790561653820930132497 -0.67571412026882171630859375 0.56803826987743377685546875 +0.351059211790561653820930132497 0.67571412026882171630859375 0.56803826987743377685546875 +0.351193647086620319708316628748 -0.325276301801204648089793636245 -0.702394944429397538598891514994 +0.351193647086620319708316628748 0.325276301801204648089793636245 -0.702394944429397538598891514994 +0.351326507329940751489516514994 -0.312879699468612659796207253748 -0.518339508771896384509147992503 +0.351326507329940751489516514994 0.312879699468612659796207253748 -0.518339508771896384509147992503 +0.351446008682251009869190738755 -0.04415319859981536865234375 -0.185839200019836447985710492503 +0.351446008682251009869190738755 0.04415319859981536865234375 -0.185839200019836447985710492503 +0.351542705297470114977897992503 -0.107168398797512054443359375 -0.821542489528656050268295985006 +0.351542705297470114977897992503 0.107168398797512054443359375 -0.821542489528656050268295985006 +0.35163319110870361328125 -0.112126803398132329769865123126 0.154212796688079856188835492503 +0.35163319110870361328125 0.112126803398132329769865123126 0.154212796688079856188835492503 +0.351700806617736838610710492503 -0.617468786239624090050881477509 -0.367476010322570822985710492503 +0.351700806617736838610710492503 0.617468786239624090050881477509 -0.367476010322570822985710492503 +0.35192339122295379638671875 -0.278657993674278292584034488755 0.031618349254131317138671875 +0.35192339122295379638671875 0.278657993674278292584034488755 0.031618349254131317138671875 +0.352009463310241688116519753748 -0.400043794512748740466179242503 0.372228360176086459087940738755 +0.352009463310241688116519753748 0.400043794512748740466179242503 0.372228360176086459087940738755 +0.352032744884490989001335492503 -0.118196555972099312525891434689 0.254170337319374106677116742503 +0.352032744884490989001335492503 0.118196555972099312525891434689 0.254170337319374106677116742503 +0.352310213446617170873764735006 -0.165689702332019822561548494377 -0.388489761948585532458366742503 +0.352310213446617170873764735006 0.165689702332019822561548494377 -0.388489761948585532458366742503 +0.3523463904857635498046875 -0.427644008398055996966746761245 -0.427753198146820057257144753748 +0.3523463904857635498046875 0.427644008398055996966746761245 -0.427753198146820057257144753748 +0.352366653084754954949886496252 -0.278632807731628406866519753748 -0.0264897007495164885093608120314 +0.352366653084754954949886496252 0.278632807731628406866519753748 -0.0264897007495164885093608120314 +0.352372956275939952508480246252 0 0.279881107807159412725894753748 +0.352397257089614890368522992503 -0.233085599541664134637386496252 0.154878298938274400198267244377 +0.352397257089614890368522992503 0.233085599541664134637386496252 0.154878298938274400198267244377 +0.352399510145187389031917746252 -0.6827823221683502197265625 -0.468639904260635398181022992503 +0.352399510145187389031917746252 0.6827823221683502197265625 -0.468639904260635398181022992503 +0.352441060543060291632144753748 -0.309542348980903658794971988755 -0.449965763092041004522769753748 +0.352441060543060291632144753748 0.309542348980903658794971988755 -0.449965763092041004522769753748 +0.352462553977966330798210492503 -0.417258059978485140728565738755 -0.0645424984395503997802734375 +0.352462553977966330798210492503 0.417258059978485140728565738755 -0.0645424984395503997802734375 +0.352671611309051502569644753748 -0.485410201549530018194644753748 0 +0.352671611309051502569644753748 0.485410201549530018194644753748 0 +0.352897053956985506939503238755 -0.359422257542610201763721988755 0.220860742032527951339559990629 +0.352897053956985506939503238755 0.359422257542610201763721988755 0.220860742032527951339559990629 +0.353092002868652388158920985006 -0.02630279958248138427734375 0.186102402210235606805355246252 +0.353092002868652388158920985006 0.02630279958248138427734375 0.186102402210235606805355246252 +0.35309565067291259765625 -0.210792151093482982293636496252 0.182729700207710260562166126874 +0.35309565067291259765625 0.210792151093482982293636496252 0.182729700207710260562166126874 +0.3532154858112335205078125 -0.16296349465847015380859375 0.314136505126953125 +0.3532154858112335205078125 0.16296349465847015380859375 0.314136505126953125 +0.353245592117309603619190738755 -0.0164992004632949842979350307814 -0.186936402320861838610710492503 +0.353245592117309603619190738755 0.0164992004632949842979350307814 -0.186936402320861838610710492503 +0.353363204002380415502670985006 -0.125145602226257340872095369377 -0.7067344188690185546875 +0.353363204002380415502670985006 0.125145602226257340872095369377 -0.7067344188690185546875 +0.353371489048004139288394753748 -0.705456000566482610558693977509 0.432965692877769481317073996252 +0.353371489048004139288394753748 0.705456000566482610558693977509 0.432965692877769481317073996252 +0.35344159603118896484375 -0.517924785614013671875 -0.496822404861450239721420985006 +0.35344159603118896484375 0.517924785614013671875 -0.496822404861450239721420985006 +0.353510999679565396380809261245 -0.338705384731292691302684261245 0.346855187416076626849559261245 +0.353510999679565396380809261245 0.338705384731292691302684261245 0.346855187416076626849559261245 +0.353518795967102061883480246252 -0.446095812320709217413394753748 -0.18979740142822265625 +0.353518795967102061883480246252 0.446095812320709217413394753748 -0.18979740142822265625 +0.353529596328735318255809261245 -0.0798420041799545315841513115629 0.478165197372436512335269753748 +0.353529596328735318255809261245 0.0798420041799545315841513115629 0.478165197372436512335269753748 +0.3535540103912353515625 -0.353552997112274169921875 0 +0.3535540103912353515625 0.353552997112274169921875 0 +0.353817889094352744372429242503 -0.257061597704887401238948996252 -0.105981749296188351716629938437 +0.353817889094352744372429242503 0.257061597704887401238948996252 -0.105981749296188351716629938437 +0.35391600430011749267578125 -0.257131509482860565185546875 -0.609201729297637939453125 +0.35391600430011749267578125 0.257131509482860565185546875 -0.609201729297637939453125 +0.3539907932281494140625 -0.177581596374511735403345369377 0.0561724007129669189453125 +0.3539907932281494140625 0.177581596374511735403345369377 0.0561724007129669189453125 +0.353998380899429310186832253748 -0.0838271021842956487457598768742 -0.598044979572296075964743522491 +0.353998380899429310186832253748 0.0838271021842956487457598768742 -0.598044979572296075964743522491 +0.35403358936309814453125 -0.388987207412719748766960492503 -0.602784013748169034130341970013 +0.35403358936309814453125 0.388987207412719748766960492503 -0.602784013748169034130341970013 +0.3540717065334320068359375 -0.0366066008806228623817524692186 -0.8266157805919647216796875 +0.3540717065334320068359375 0.0366066008806228623817524692186 -0.8266157805919647216796875 +0.354105386137962385717514735006 -0.0732902526855468833266726846887 0.414412337541580244604233485006 +0.354105386137962385717514735006 0.0732902526855468833266726846887 0.414412337541580244604233485006 +0.354108293354511272088558371252 -0.752045157551765375281149772491 -0.1775845475494861602783203125 +0.354108293354511272088558371252 0.752045157551765375281149772491 -0.1775845475494861602783203125 +0.354274642467498790399105246252 -0.111294447630643847380049749063 -0.254170793294906605108707253748 +0.354274642467498790399105246252 0.111294447630643847380049749063 -0.254170793294906605108707253748 +0.354514348506927479132144753748 -0.840520095825195268091079014994 -0.265226709842681873663394753748 +0.354514348506927479132144753748 0.840520095825195268091079014994 -0.265226709842681873663394753748 +0.354597048461437192035106136245 -0.757980692386627130652243522491 0.1490840502083301544189453125 +0.354597048461437192035106136245 0.757980692386627130652243522491 0.1490840502083301544189453125 +0.354703485965728759765625 -0.30781948566436767578125 -0.1715590059757232666015625 +0.354703485965728759765625 0.30781948566436767578125 -0.1715590059757232666015625 +0.354705190658569369244190738755 -0.178789198398590087890625 -0.0471031993627548245529013115629 +0.354705190658569369244190738755 0.178789198398590087890625 -0.0471031993627548245529013115629 +0.354710304737091031146434261245 -0.186481404304504383429019753748 0.573938411474227860864516514994 +0.354710304737091031146434261245 0.186481404304504383429019753748 0.573938411474227860864516514994 +0.354756808280944857525440738755 -0.0690119981765747042556924384371 0.171420395374298095703125 +0.354756808280944857525440738755 0.0690119981765747042556924384371 0.171420395374298095703125 +0.3548170030117034912109375 -0.73478901386260986328125 -0.57809197902679443359375 +0.3548170030117034912109375 0.73478901386260986328125 -0.57809197902679443359375 +0.354995301365852389263721988755 -0.385340440273284956518295985006 -0.167305046319961570056022992503 +0.354995301365852389263721988755 0.385340440273284956518295985006 -0.167305046319961570056022992503 +0.355128160119056734966846988755 -0.530550816655159018786491742503 0.122064153105020528622404185626 +0.355128160119056734966846988755 0.530550816655159018786491742503 0.122064153105020528622404185626 +0.355178216099739096911491742503 -0.483269804716110251696647992503 -0.250597092509269703253238503748 +0.355178216099739096911491742503 0.483269804716110251696647992503 -0.250597092509269703253238503748 +0.355246087908744845318409488755 -0.305105334520339999127003238755 0.288462910056114241186264735006 +0.355246087908744845318409488755 0.305105334520339999127003238755 0.288462910056114241186264735006 +0.355262610316276594701889735006 -0.333156448602676402703792746252 0.255529457330703757556022992503 +0.355262610316276594701889735006 0.333156448602676402703792746252 0.255529457330703757556022992503 +0.355287243425846110955745871252 -0.599446359276771478796774772491 -0.486760163307189908099559261245 +0.355287243425846110955745871252 0.599446359276771478796774772491 -0.486760163307189908099559261245 +0.355295991897582985608039507497 -0.421384799480438221319644753748 0.237064200639724720343082253748 +0.355295991897582985608039507497 0.421384799480438221319644753748 0.237064200639724720343082253748 +0.355345988273620627673210492503 -0.128855204582214361019865123126 0.130864405632019037417634876874 +0.355345988273620627673210492503 0.128855204582214361019865123126 0.130864405632019037417634876874 +0.355671596527099620477230246252 -0.132240796089172357730134876874 -0.126531195640563975945980246252 +0.355671596527099620477230246252 0.132240796089172357730134876874 -0.126531195640563975945980246252 +0.355673709511756919177116742503 -0.517008608579635597912727007497 0.645134407281875654760483485006 +0.355673709511756919177116742503 0.517008608579635597912727007497 0.645134407281875654760483485006 +0.355797895789146445544304242503 -0.0592447467148303971717915317186 0.269068962335586581158253238755 +0.355797895789146445544304242503 0.0592447467148303971717915317186 0.269068962335586581158253238755 +0.355996882915496803967414507497 -0.0289085987955331781551482350778 -0.602022415399551369397102007497 +0.355996882915496803967414507497 0.0289085987955331781551482350778 -0.602022415399551369397102007497 +0.356156516075134266241519753748 -0.577622491121292047644431022491 0.171770901978015894107088001874 +0.356156516075134266241519753748 0.577622491121292047644431022491 0.171770901978015894107088001874 +0.356176686286926280633480246252 -0.303519150614738497662159488755 -0.288988152146339438708366742503 +0.356176686286926280633480246252 0.303519150614738497662159488755 -0.288988152146339438708366742503 +0.356272995471954345703125 -0.667499005794525146484375 0.6538469791412353515625 +0.356272995471954345703125 0.667499005794525146484375 0.6538469791412353515625 +0.356311798095703125 -0.45758701860904693603515625 0.293523757159709963726612613755 +0.356311798095703125 0.45758701860904693603515625 0.293523757159709963726612613755 +0.3563610017299652099609375 -0.33480548858642578125 0.10446099936962127685546875 +0.3563610017299652099609375 0.33480548858642578125 0.10446099936962127685546875 +0.3563959896564483642578125 -0.3414289951324462890625 -0.86971700191497802734375 +0.3563959896564483642578125 0.3414289951324462890625 -0.86971700191497802734375 +0.356403207778930697369190738755 -0.181594800949096690789730246252 0 +0.356403207778930697369190738755 0.181594800949096690789730246252 0 +0.356489241123199462890625 -0.527909201383590764855568977509 -0.129333747923374181576505748126 +0.356489241123199462890625 0.527909201383590764855568977509 -0.129333747923374181576505748126 +0.356599642336368538586555132497 -0.769957193732261679919304242503 0.0500301515683531719536070170307 +0.356599642336368538586555132497 0.769957193732261679919304242503 0.0500301515683531719536070170307 +0.356664800643920920641960492503 -0.0627664029598236083984375 -0.713337612152099675988381477509 +0.356664800643920920641960492503 0.0627664029598236083984375 -0.713337612152099675988381477509 +0.3566800057888031005859375 -0.09588800370693206787109375 -0.3370234966278076171875 +0.3566800057888031005859375 0.09588800370693206787109375 -0.3370234966278076171875 +0.356750011444091796875 -0.088045597076416015625 -0.158042800426483165399105246252 +0.356750011444091796875 0.088045597076416015625 -0.158042800426483165399105246252 +0.356795382499694835320980246252 -0.356933999061584461554019753748 -0.324492609500884987561164507497 +0.356795382499694835320980246252 0.356933999061584461554019753748 -0.324492609500884987561164507497 +0.356931161880493175164730246252 -0.769113132357597373278679242503 -0.05971249751746654510498046875 +0.356931161880493175164730246252 0.769113132357597373278679242503 -0.05971249751746654510498046875 +0.357007193565368696752670985006 -0.159906005859375005551115123126 0.0835207998752593994140625 +0.357007193565368696752670985006 0.159906005859375005551115123126 0.0835207998752593994140625 +0.357034289836883511615184261245 -0.572264683246612504419204014994 -0.187189093232154823986945757497 +0.357034289836883511615184261245 0.572264683246612504419204014994 -0.187189093232154823986945757497 +0.357177196443080879895148882497 -0.851580938696861244885383257497 0.223011554032564146554662443123 +0.357177196443080879895148882497 0.851580938696861244885383257497 0.223011554032564146554662443123 +0.357196944952011152807358485006 -0.418222752213478099481136496252 0 +0.357196944952011152807358485006 0.418222752213478099481136496252 0 +0.357265996932983442846420985006 -0.144635605812072770559595369377 0.106964802742004400082365123126 +0.357265996932983442846420985006 0.144635605812072770559595369377 0.106964802742004400082365123126 +0.357305634021759022100894753748 -0.1302379034459590911865234375 0.527134418487548828125 +0.357305634021759022100894753748 0.1302379034459590911865234375 0.527134418487548828125 +0.35737739503383636474609375 -0.200411546230316178762720369377 -0.186055652797222137451171875 +0.35737739503383636474609375 0.200411546230316178762720369377 -0.186055652797222137451171875 +0.357505857944488525390625 -0.259742595255374908447265625 0.476679462194442737921207253748 +0.357505857944488525390625 0.259742595255374908447265625 0.476679462194442737921207253748 +0.357551094889640819207698996252 -0.145135349035263067074552623126 0.23150159418582916259765625 +0.357551094889640819207698996252 0.145135349035263067074552623126 0.23150159418582916259765625 +0.357651007175445567742855246252 -0.1994040012359619140625 0.438547790050506591796875 +0.357651007175445567742855246252 0.1994040012359619140625 0.438547790050506591796875 +0.357667393982410430908203125 -0.761424058675765902393095529987 -0.441369996964931454730418636245 +0.357667393982410430908203125 0.761424058675765902393095529987 -0.441369996964931454730418636245 +0.357768011093139659539730246252 0 -0.715543222427368230675881477509 +0.357768797874450705798210492503 -0.4205815792083740234375 0.5788896083831787109375 +0.357768797874450705798210492503 0.4205815792083740234375 0.5788896083831787109375 +0.357769989967346213610710492503 0 0.178885996341705322265625 +0.357772803306579623150440738755 -0.6805183887481689453125 -0.221117591857910161801115123126 +0.357772803306579623150440738755 0.6805183887481689453125 -0.221117591857910161801115123126 +0.357885907590389240606754128748 -0.260016895830631256103515625 -0.840719583630561761999899772491 +0.357885907590389240606754128748 0.260016895830631256103515625 -0.840719583630561761999899772491 +0.358316409587860096319644753748 -0.260329198837280284539730246252 -0.404769015312194835320980246252 +0.358316409587860096319644753748 0.260329198837280284539730246252 -0.404769015312194835320980246252 +0.358461594581604037212940738755 -0.5957791805267333984375 0.39566719532012939453125 +0.358461594581604037212940738755 0.5957791805267333984375 0.39566719532012939453125 +0.3585214912891387939453125 -0.17911149561405181884765625 -0.29896700382232666015625 +0.3585214912891387939453125 0.17911149561405181884765625 -0.29896700382232666015625 +0.358622100949287425653011496252 -0.408586505055427540167301003748 -0.717249619960784956518295985006 +0.358622100949287425653011496252 0.408586505055427540167301003748 -0.717249619960784956518295985006 +0.358660411834716807977230246252 -0.147405195236206071340845369377 -0.0981544017791748102386151231258 +0.358660411834716807977230246252 0.147405195236206071340845369377 -0.0981544017791748102386151231258 +0.3588018119335174560546875 -0.366874885559081986841079014994 0.476093089580535866467414507497 +0.3588018119335174560546875 0.366874885559081986841079014994 0.476093089580535866467414507497 +0.3588471114635467529296875 -0.238108491897583013363615123126 -0.130510349571704875604183371252 +0.3588471114635467529296875 0.238108491897583013363615123126 -0.130510349571704875604183371252 +0.358862400054931640625 -0.1621716022491455078125 -0.0701291978359222384353799384371 +0.358862400054931640625 0.1621716022491455078125 -0.0701291978359222384353799384371 +0.35887800157070159912109375 -0.50423549115657806396484375 -0.4236195087432861328125 +0.35887800157070159912109375 0.50423549115657806396484375 -0.4236195087432861328125 +0.358926594257354736328125 -0.393970191478729248046875 0.275607007741928089483707253748 +0.358926594257354736328125 0.393970191478729248046875 0.275607007741928089483707253748 +0.358927106857299782483039507497 -0.485642498731613136975227007497 -0.354008895158767655786391514994 +0.358927106857299782483039507497 0.485642498731613136975227007497 -0.354008895158767655786391514994 +0.358975496888160716668636496252 -0.426401948928833041119190738755 0.334392508864402804302784488755 +0.358975496888160716668636496252 0.426401948928833041119190738755 0.334392508864402804302784488755 +0.3591130077838897705078125 -0.2860254943370819091796875 -0.19805850088596343994140625 +0.3591130077838897705078125 0.2860254943370819091796875 -0.19805850088596343994140625 +0.35929000377655029296875 -0.0332829989492893218994140625 0.3461255133152008056640625 +0.35929000377655029296875 0.0332829989492893218994140625 0.3461255133152008056640625 +0.359348011016845714227230246252 -0.690134382247924893505341970013 0.185965597629547119140625 +0.359348011016845714227230246252 0.690134382247924893505341970013 0.185965597629547119140625 +0.359398506581783294677734375 -0.46517698466777801513671875 0.46577100455760955810546875 +0.359398506581783294677734375 0.46517698466777801513671875 0.46577100455760955810546875 +0.359437608718872092516960492503 -0.106456005573272713404797684689 0.706733608245849631579460492503 +0.359437608718872092516960492503 0.106456005573272713404797684689 0.706733608245849631579460492503 +0.3594680130481719970703125 -0.840174019336700439453125 -0.40606701374053955078125 +0.3594680130481719970703125 0.840174019336700439453125 -0.40606701374053955078125 +0.3594749867916107177734375 -0.1929520070552825927734375 0.2890450060367584228515625 +0.3594749867916107177734375 0.1929520070552825927734375 0.2890450060367584228515625 +0.3595019876956939697265625 -0.099546499550342559814453125 0.3329400122165679931640625 +0.3595019876956939697265625 0.099546499550342559814453125 0.3329400122165679931640625 +0.35951578617095947265625 -0.162373191118240361996427623126 -0.452088010311126664575454014994 +0.35951578617095947265625 0.162373191118240361996427623126 -0.452088010311126664575454014994 +0.3595919907093048095703125 -0.3361589908599853515625 -0.087696500122547149658203125 +0.3595919907093048095703125 0.3361589908599853515625 -0.087696500122547149658203125 +0.359639994800090789794921875 -0.1502745039761066436767578125 0.6407624781131744384765625 +0.359639994800090789794921875 0.1502745039761066436767578125 0.6407624781131744384765625 +0.359754005074501004290965511245 -0.690341079235076926501335492503 -0.341330237686634063720703125 +0.359754005074501004290965511245 0.690341079235076926501335492503 -0.341330237686634063720703125 +0.359946441650390636102230246252 -0.0808168485760688837249432481258 -0.257696101069450400622429242503 +0.359946441650390636102230246252 0.0808168485760688837249432481258 -0.257696101069450400622429242503 +0.360108903050422701763721988755 -0.152602645754814164602564119377 -0.222562354803085338250667746252 +0.360108903050422701763721988755 0.152602645754814164602564119377 -0.222562354803085338250667746252 +0.36013551056385040283203125 -0.4979007244110107421875 0.724497523903846696313735264994 +0.36013551056385040283203125 0.4979007244110107421875 0.724497523903846696313735264994 +0.360313796997070279193309261245 -0.364093208312988247943309261245 0.312425994873046841693309261245 +0.360313796997070279193309261245 0.364093208312988247943309261245 0.312425994873046841693309261245 +0.36042499542236328125 -0.46087801456451416015625 0.810977995395660400390625 +0.36042499542236328125 0.46087801456451416015625 0.810977995395660400390625 +0.36044503748416900634765625 -0.261877503991127025262386496252 0.0632411979138851193527059990629 +0.36044503748416900634765625 0.261877503991127025262386496252 0.0632411979138851193527059990629 +0.360586160421371426654246761245 -0.470361104607582070080695757497 -0.609293606877326920923110264994 +0.360586160421371426654246761245 0.470361104607582070080695757497 -0.609293606877326920923110264994 +0.360686311125755332263054242503 -0.155137450993061060122713001874 -0.518013614416122480932358485006 +0.360686311125755332263054242503 0.155137450993061060122713001874 -0.518013614416122480932358485006 +0.360803288221359264031917746252 -0.398913893103599592748764735006 0.114841099828481688072123745314 +0.360803288221359264031917746252 0.398913893103599592748764735006 0.114841099828481688072123745314 +0.360943937301635708880809261245 -0.644961628317832880163962272491 -0.59686122834682464599609375 +0.360943937301635708880809261245 0.644961628317832880163962272491 -0.59686122834682464599609375 +0.361062002182006847039730246252 -0.0852083981037140003600427462516 0.149577999114990228823884876874 +0.361062002182006847039730246252 0.0852083981037140003600427462516 0.149577999114990228823884876874 +0.361148245632648468017578125 -0.59448601305484771728515625 0.280460245907306671142578125 +0.361148245632648468017578125 0.59448601305484771728515625 0.280460245907306671142578125 +0.361203247308731045794871761245 -0.706189370155334450451789507497 0.305496792495250690802066628748 +0.361203247308731045794871761245 0.706189370155334450451789507497 0.305496792495250690802066628748 +0.36121125519275665283203125 -0.300723753869533538818359375 0.58445848524570465087890625 +0.36121125519275665283203125 0.300723753869533538818359375 0.58445848524570465087890625 +0.361268046498298689428452235006 -0.179040397703647630178735994377 0.374072059988975580413494981258 +0.361268046498298689428452235006 0.179040397703647630178735994377 0.374072059988975580413494981258 +0.36128199100494384765625 -0.0606187999248504680305238423443 -0.160625600814819358141960492503 +0.36128199100494384765625 0.0606187999248504680305238423443 -0.160625600814819358141960492503 +0.361335790157318093029914507497 -0.262522405385971047131477007497 -0.538997191190719537878806022491 +0.361335790157318093029914507497 0.262522405385971047131477007497 -0.538997191190719537878806022491 +0.3613719940185546875 -0.0613634996116161346435546875 -0.3400659859180450439453125 +0.3613719940185546875 0.0613634996116161346435546875 -0.3400659859180450439453125 +0.361522802710533164294304242503 -0.262660038471221934930355246252 -0.0530185483396053355842347798443 +0.361522802710533164294304242503 0.262660038471221934930355246252 -0.0530185483396053355842347798443 +0.361524558067321755139289507497 -0.262659360468387614861995871252 -0.723055905103683449475227007497 +0.361524558067321755139289507497 0.262659360468387614861995871252 -0.723055905103683449475227007497 +0.361556795239448558465511496252 -0.127848053723573690243497935626 -0.394248247146606500823651231258 +0.361556795239448558465511496252 0.127848053723573690243497935626 -0.394248247146606500823651231258 +0.361656309664249386859324886245 -0.56737415492534637451171875 0.519414597749710105212272992503 +0.361656309664249386859324886245 0.56737415492534637451171875 0.519414597749710105212272992503 +0.361680196225643124652293636245 -0.7857526242733001708984375 0.392784155905246734619140625 +0.361680196225643124652293636245 0.7857526242733001708984375 0.392784155905246734619140625 +0.361710405349731478619190738755 -0.0425972014665603679328675923443 0.165381598472595231497095369377 +0.361710405349731478619190738755 0.0425972014665603679328675923443 0.165381598472595231497095369377 +0.361764013767242431640625 -0.463545012474060047491519753748 0.119384399056434623020983565311 +0.361764013767242431640625 0.463545012474060047491519753748 0.119384399056434623020983565311 +0.3617999851703643798828125 -0.2628630101680755615234375 0.894429028034210205078125 +0.3617999851703643798828125 -0.262860000133514404296875 -0.22360749542713165283203125 +0.3617999851703643798828125 0.262860000133514404296875 -0.22360749542713165283203125 +0.3617999851703643798828125 0.2628630101680755615234375 0.894429028034210205078125 +0.36180400848388671875 -0.587778985500335693359375 -0.723612010478973388671875 +0.36180400848388671875 0.587778985500335693359375 -0.723612010478973388671875 +0.362031158804893504754573996252 -0.538490539789199806897102007497 0.0382304005324840545654296875 +0.362031158804893504754573996252 0.538490539789199806897102007497 0.0382304005324840545654296875 +0.362128955125808726922542746252 -0.217996202409267425537109375 -0.15440310537815093994140625 +0.362128955125808726922542746252 0.217996202409267425537109375 -0.15440310537815093994140625 +0.362246412038803089483707253748 -0.496367391943931535180922764994 -0.724497523903846696313735264994 +0.362246412038803089483707253748 0.496367391943931535180922764994 -0.724497523903846696313735264994 +0.362358689308166559417401231258 -0.363484540581703208239616742503 -0.197674395143985770495476117503 +0.362358689308166559417401231258 0.363484540581703208239616742503 -0.197674395143985770495476117503 +0.362431567907333385125667746252 -0.537645554542541481701789507497 -0.0456150475889444337318501254686 +0.362431567907333385125667746252 0.537645554542541481701789507497 -0.0456150475889444337318501254686 +0.3624829947948455810546875 -0.22267949581146240234375 -0.2627165019512176513671875 +0.3624829947948455810546875 0.22267949581146240234375 -0.2627165019512176513671875 +0.362551510334014892578125 -0.557262021303176924291733485006 -0.606643205881118752209602007497 +0.362551510334014892578125 0.557262021303176924291733485006 -0.606643205881118752209602007497 +0.362590408325195345806690738755 -0.5823624134063720703125 -0.411560010910034190789730246252 +0.362590408325195345806690738755 0.5823624134063720703125 -0.411560010910034190789730246252 +0.362594100832939192358139735006 -0.218539196252822892629907869377 -0.351092505455017134252670985006 +0.362594100832939192358139735006 0.218539196252822892629907869377 -0.351092505455017134252670985006 +0.3627195060253143310546875 -0.263528195023536693231136496252 -0.470624703168869007452457253748 +0.3627195060253143310546875 0.263528195023536693231136496252 -0.470624703168869007452457253748 +0.36291520297527313232421875 -0.711914786696434043200554242503 0.513779965043067887719985264994 +0.36291520297527313232421875 0.711914786696434043200554242503 0.513779965043067887719985264994 +0.362977194786071821752670985006 -0.165707600116729747430355246252 0.0280791997909545926193075615629 +0.362977194786071821752670985006 0.165707600116729747430355246252 0.0280791997909545926193075615629 +0.363018590211868275030582253748 0 0.823539608716964743884147992503 +0.363031804561614990234375 -0.421742391586303722039730246252 -0.224368196725845320260717130623 +0.363031804561614990234375 0.421742391586303722039730246252 -0.224368196725845320260717130623 +0.363058400154113780633480246252 -0.166237199306488059313835492503 -0.0235311999917030348350444057814 +0.363058400154113780633480246252 0.166237199306488059313835492503 -0.0235311999917030348350444057814 +0.36307048797607421875 -0.3141554892063140869140625 0.13959300518035888671875 +0.36307048797607421875 0.3141554892063140869140625 0.13959300518035888671875 +0.3631927967071533203125 -0.7128047943115234375 0 +0.3631927967071533203125 0.7128047943115234375 0 +0.36322081089019775390625 -0.104618799686431895867855246252 -0.130864405632019037417634876874 +0.36322081089019775390625 0.104618799686431895867855246252 -0.130864405632019037417634876874 +0.363220989704132080078125 -0.06660400331020355224609375 0.92931902408599853515625 +0.363220989704132080078125 0.06660400331020355224609375 0.92931902408599853515625 +0.363323153555393185687449886245 -0.0567026473581790924072265625 0.766342169046401955334602007497 +0.363323153555393185687449886245 0.0567026473581790924072265625 0.766342169046401955334602007497 +0.363344259560108184814453125 -0.38708625733852386474609375 -0.52975948154926300048828125 +0.363344259560108184814453125 0.38708625733852386474609375 -0.52975948154926300048828125 +0.363478055596351656841846988755 -0.04338164813816547393798828125 0.537123608589172407690170985006 +0.363478055596351656841846988755 0.04338164813816547393798828125 0.537123608589172407690170985006 +0.363549792766571011615184261245 -0.877685075998306252209602007497 0 +0.363549792766571011615184261245 0.877685075998306252209602007497 0 +0.363591492176055908203125 -0.2214320003986358642578125 0.2622390091419219970703125 +0.363591492176055908203125 0.2214320003986358642578125 0.2622390091419219970703125 +0.3636589944362640380859375 -0.02062500081956386566162109375 -0.3425300121307373046875 +0.3636589944362640380859375 0.02062500081956386566162109375 -0.3425300121307373046875 +0.36371250450611114501953125 -0.58515076339244842529296875 -0.296331010758876800537109375 +0.36371250450611114501953125 0.58515076339244842529296875 -0.296331010758876800537109375 +0.363742399215698286596420985006 -0.706269598007202237255341970013 0.0942071974277496337890625 +0.363742399215698286596420985006 0.706269598007202237255341970013 0.0942071974277496337890625 +0.363812389969825733526676003748 -0.04967234842479228973388671875 -0.260140961408615145611378238755 +0.363812389969825733526676003748 0.04967234842479228973388671875 -0.260140961408615145611378238755 +0.363871844112873044085887386245 -0.870431771874427773205695757497 0.111559449881315220221011941248 +0.363871844112873044085887386245 0.870431771874427773205695757497 0.111559449881315220221011941248 +0.364007997512817427221420985006 -0.703474378585815518505341970013 -0.112345600128173836451672684689 +0.364007997512817427221420985006 0.703474378585815518505341970013 -0.112345600128173836451672684689 +0.364046643674373615606754128748 -0.867332887649536088403579014994 -0.13305604457855224609375 +0.364046643674373615606754128748 0.867332887649536088403579014994 -0.13305604457855224609375 +0.364054393768310557977230246252 -0.03289639949798583984375 -0.162425994873046875 +0.364054393768310557977230246252 0.03289639949798583984375 -0.162425994873046875 +0.3640581071376800537109375 -0.264502340555191062243522992503 0 +0.3640581071376800537109375 0.264502340555191062243522992503 0 +0.364130097627639759405582253748 -0.7632233798503875732421875 -0.308058303594589244500667746252 +0.364130097627639759405582253748 0.7632233798503875732421875 -0.308058303594589244500667746252 +0.364171940088272083624332253748 -0.0883849494159221621414346259371 0.249132612347602838687166126874 +0.364171940088272083624332253748 0.0883849494159221621414346259371 0.249132612347602838687166126874 +0.36420254409313201904296875 -0.164711250364780431576505748126 0.206704343855381028616235994377 +0.36420254409313201904296875 0.164711250364780431576505748126 0.206704343855381028616235994377 +0.364226388931274402960269753748 -0.0296945985406637212589142649222 0.262597489356994617804019753748 +0.364226388931274402960269753748 0.0296945985406637212589142649222 0.262597489356994617804019753748 +0.36447179317474365234375 -0.46310341358184814453125 -0.112674602866172784976228626874 +0.36447179317474365234375 0.46310341358184814453125 -0.112674602866172784976228626874 +0.364471891522407553942741742503 -0.455401059985160838738948996252 -0.286826793849468242303402121252 +0.364471891522407553942741742503 0.455401059985160838738948996252 -0.286826793849468242303402121252 +0.364554858207702670025440738755 -0.400376355648040804791065738755 -0.0964276470243930899917117471887 +0.364554858207702670025440738755 0.400376355648040804791065738755 -0.0964276470243930899917117471887 +0.364714705944061245990184261245 -0.09346540272235870361328125 0.59012448787689208984375 +0.364714705944061245990184261245 0.09346540272235870361328125 0.59012448787689208984375 +0.365292000770568892065170985006 0 -0.162978398799896256887720369377 +0.365313760936260223388671875 -0.636020243167877197265625 -0.15660224854946136474609375 +0.365313760936260223388671875 0.636020243167877197265625 -0.15660224854946136474609375 +0.3653959929943084716796875 -0.3394879996776580810546875 0.0351249985396862030029296875 +0.3653959929943084716796875 0.3394879996776580810546875 0.0351249985396862030029296875 +0.365474390983581587377670985006 -0.102070796489715578947432561563 0.126530802249908452816740123126 +0.365474390983581587377670985006 0.102070796489715578947432561563 0.126530802249908452816740123126 +0.365478086471557606085269753748 -0.371309918165206920281917746252 -0.38865776360034942626953125 +0.365478086471557606085269753748 0.371309918165206920281917746252 -0.38865776360034942626953125 +0.365510189533233609271434261245 -0.394578503072261776996043636245 0.658187305927276589123664507497 +0.365510189533233609271434261245 0.394578503072261776996043636245 0.658187305927276589123664507497 +0.365617832541465792584034488755 -0.104651945829391482267745061563 -0.527135038375854514391960492503 +0.365617832541465792584034488755 0.104651945829391482267745061563 -0.527135038375854514391960492503 +0.3656280040740966796875 -0.6415027678012847900390625 0.1314922459423542022705078125 +0.3656280040740966796875 0.6415027678012847900390625 0.1314922459423542022705078125 +0.365749317407608021124332253748 -0.5968479812145233154296875 0 +0.365749317407608021124332253748 0.5968479812145233154296875 0 +0.36576426029205322265625 -0.187407454103231424502595814374 -0.856501939892768793249899772491 +0.36576426029205322265625 0.187407454103231424502595814374 -0.856501939892768793249899772491 +0.365821659564971923828125 -0.0185616005212068564678151716407 -0.261400043964385986328125 +0.365821659564971923828125 0.0185616005212068564678151716407 -0.261400043964385986328125 +0.3659285008907318115234375 -0.3394559919834136962890625 -0.02942950092256069183349609375 +0.3659285008907318115234375 0.3394559919834136962890625 -0.02942950092256069183349609375 +0.3661217987537384033203125 -0.178721098601818090267911998126 0.802504813671112038342414507497 +0.3661217987537384033203125 0.178721098601818090267911998126 0.802504813671112038342414507497 +0.3662889897823333740234375 -0.864929020404815673828125 0.343118011951446533203125 +0.3662889897823333740234375 0.864929020404815673828125 0.343118011951446533203125 +0.3664430081844329833984375 -0.590737694501876742236845529987 0.082144998013973236083984375 +0.3664430081844329833984375 0.590737694501876742236845529987 0.082144998013973236083984375 +0.366484057903289806024105246252 -0.243291592597961431332365123126 0.0948618002235889490325604356258 +0.366484057903289806024105246252 0.243291592597961431332365123126 0.0948618002235889490325604356258 +0.36669714748859405517578125 -0.126592254638671880551115123126 0.867183738946914584033720529987 +0.36669714748859405517578125 0.126592254638671880551115123126 0.867183738946914584033720529987 +0.36670790612697601318359375 -0.2995707094669342041015625 0.44528901576995849609375 +0.36670790612697601318359375 0.2995707094669342041015625 0.44528901576995849609375 +0.366726800799369867522869981258 -0.266439245641231559069694867503 -0.311483147740364119115952235006 +0.366726800799369867522869981258 0.266439245641231559069694867503 -0.311483147740364119115952235006 +0.366765695810317982061832253748 -0.588123899698257401880141514994 -0.0979446962475776644607705634371 +0.366765695810317982061832253748 0.588123899698257401880141514994 -0.0979446962475776644607705634371 +0.36676575243473052978515625 -0.05005574785172939300537109375 0.652286231517791748046875 +0.36676575243473052978515625 0.05005574785172939300537109375 0.652286231517791748046875 +0.366820788383483920025440738755 -0.33247280120849609375 -0.628413581848144553454460492503 +0.366820788383483920025440738755 0.33247280120849609375 -0.628413581848144553454460492503 +0.366920804977417025494190738755 -0.0162560001015663140033762346093 0.1584455966949462890625 +0.366920804977417025494190738755 0.0162560001015663140033762346093 0.1584455966949462890625 +0.367091989517211947369190738755 -0.148697602748870866262720369377 0.0559683978557586683799662807814 +0.367091989517211947369190738755 0.148697602748870866262720369377 0.0559683978557586683799662807814 +0.367296409606933604852230246252 -0.120501995086669921875 -0.102823197841644287109375 +0.367296409606933604852230246252 0.120501995086669921875 -0.102823197841644287109375 +0.3673059940338134765625 -0.2923569977283477783203125 0.17208699882030487060546875 +0.3673059940338134765625 0.2923569977283477783203125 0.17208699882030487060546875 +0.367315191030502308233707253748 -0.381572109460830644067641514994 -0.457692217826843217309829014994 +0.367315191030502308233707253748 0.381572109460830644067641514994 -0.457692217826843217309829014994 +0.3675135076045989990234375 -0.652293741703033447265625 0.044120999984443187713623046875 +0.3675135076045989990234375 0.652293741703033447265625 0.044120999984443187713623046875 +0.367523807287216175421207253748 -0.553077703714370705334602007497 0.221429592370986916272102007497 +0.367523807287216175421207253748 0.553077703714370705334602007497 0.221429592370986916272102007497 +0.367595994472503628802684261245 -0.236479800939559919870092130623 0.411036014556884765625 +0.367595994472503628802684261245 0.236479800939559919870092130623 0.411036014556884765625 +0.367654088139534040990952235006 -0.109084802865982058439620061563 0.394247165322303805279346988755 +0.367654088139534040990952235006 0.109084802865982058439620061563 0.394247165322303805279346988755 +0.367767411470413196905582253748 -0.509243163466453596655014735006 0.167088355123996751272485994377 +0.367767411470413196905582253748 0.509243163466453596655014735006 0.167088355123996751272485994377 +0.367805796861648548468082253748 -0.315722039341926552502570757497 0.817030420899391152111945757497 +0.367805796861648548468082253748 0.315722039341926552502570757497 0.817030420899391152111945757497 +0.367821598052978537829460492503 -0.150013601779937749691740123126 -0.0469399988651275634765625 +0.367821598052978537829460492503 0.150013601779937749691740123126 -0.0469399988651275634765625 +0.367822393774986322600994981258 -0.0366322018206119565109091240629 0.407265084981918379369858485006 +0.367822393774986322600994981258 0.0366322018206119565109091240629 0.407265084981918379369858485006 +0.36784350872039794921875 -0.7792839109897613525390625 0.25963018834590911865234375 +0.36784350872039794921875 0.7792839109897613525390625 0.25963018834590911865234375 +0.367920804023742720190170985006 -0.267309594154357899054019753748 0.658163976669311590050881477509 +0.367920804023742720190170985006 0.267309594154357899054019753748 0.658163976669311590050881477509 +0.367939001321792635845753238755 -0.339719614386558566021534488755 -0.227401353418827084640341240629 +0.367939001321792635845753238755 0.339719614386558566021534488755 -0.227401353418827084640341240629 +0.367974758148193359375 -0.65140052139759063720703125 -0.05264849960803985595703125 +0.367974758148193359375 0.65140052139759063720703125 -0.05264849960803985595703125 +0.367979192733764670641960492503 -0.118400800228118899259932561563 0.102823197841644287109375 +0.367979192733764670641960492503 0.118400800228118899259932561563 0.102823197841644287109375 +0.368011009693145707544204014994 0 0.595456385612487704150908029987 +0.36817300319671630859375 -0.3172884881496429443359375 -0.117374502122402191162109375 +0.36817300319671630859375 0.3172884881496429443359375 -0.117374502122402191162109375 +0.368222397565841685906917746252 -0.122967897355556493588224498126 -0.227576690912246720754907869377 +0.368222397565841685906917746252 0.122967897355556493588224498126 -0.227576690912246720754907869377 +0.368251001834869418072315738755 -0.0535093009471893296669087192186 -0.532942810654640219958366742503 +0.368251001834869418072315738755 0.0535093009471893296669087192186 -0.532942810654640219958366742503 +0.3682835102081298828125 -0.14496250450611114501953125 -0.3055374920368194580078125 +0.3682835102081298828125 0.14496250450611114501953125 -0.3055374920368194580078125 +0.368433189392089854852230246252 -0.133875203132629405633480246252 0.0795895993709564292251101846887 +0.368433189392089854852230246252 0.133875203132629405633480246252 0.0795895993709564292251101846887 +0.368515348434448275494190738755 -0.171772205829620355777009876874 -0.192848843336105357781917746252 +0.368515348434448275494190738755 0.171772205829620355777009876874 -0.192848843336105357781917746252 +0.368585991859436079565170985006 -0.0589648008346557658820863423443 0.143762397766113297903345369377 +0.368585991859436079565170985006 0.0589648008346557658820863423443 0.143762397766113297903345369377 +0.36861598491668701171875 -0.471539390087127641137954014994 0.0421061977744102491905131557814 +0.36861598491668701171875 0.471539390087127641137954014994 0.0421061977744102491905131557814 +0.368659503757953643798828125 -0.49712924659252166748046875 0.42361874878406524658203125 +0.368659503757953643798828125 0.49712924659252166748046875 0.42361874878406524658203125 +0.368711209297180209087940738755 -0.135681605339050298519865123126 -0.0751164019107818659026776231258 +0.368711209297180209087940738755 0.135681605339050298519865123126 -0.0751164019107818659026776231258 +0.36872099339962005615234375 -0.206016741693019866943359375 -0.61975948512554168701171875 +0.36872099339962005615234375 0.206016741693019866943359375 -0.61975948512554168701171875 +0.368762803077697765008480246252 -0.0767108023166656605162927462516 -0.134645605087280267886384876874 +0.368762803077697765008480246252 0.0767108023166656605162927462516 -0.134645605087280267886384876874 +0.368767797946929931640625 -0.245297241210937516653345369377 -0.079620301723480224609375 +0.368767797946929931640625 0.245297241210937516653345369377 -0.079620301723480224609375 +0.368852412700653053967414507497 -0.120711001753807056768863503748 -0.457576811313629150390625 +0.368852412700653053967414507497 0.120711001753807056768863503748 -0.457576811313629150390625 +0.368904161453247059210269753748 -0.183727347850799554995759876874 0.180703800916671764031917746252 +0.368904161453247059210269753748 0.183727347850799554995759876874 0.180703800916671764031917746252 +0.368949359655380282330128238755 -0.0893513523042202134627487453145 -0.397986048460006736071647992503 +0.368949359655380282330128238755 0.0893513523042202134627487453145 -0.397986048460006736071647992503 +0.368950998783111605572315738755 -0.378504490852355990337940738755 0.152017803490161917956413617503 +0.368950998783111605572315738755 0.378504490852355990337940738755 0.152017803490161917956413617503 +0.368955901265144381451221988755 -0.35964359343051910400390625 0.737921726703643865441506477509 +0.368955901265144381451221988755 0.35964359343051910400390625 0.737921726703643865441506477509 +0.36898100376129150390625 -0.132040500640869140625 0.3105129897594451904296875 +0.36898100376129150390625 0.132040500640869140625 0.3105129897594451904296875 +0.3690870106220245361328125 0 0.337305009365081787109375 +0.369142198562622037005809261245 -0.04002539813518524169921875 0.471308398246765125616519753748 +0.369142198562622037005809261245 0.04002539813518524169921875 0.471308398246765125616519753748 +0.369302460551261924059929242503 -0.212401744723320018426448996252 0.347852441668510481420639735006 +0.369302460551261924059929242503 0.212401744723320018426448996252 0.347852441668510481420639735006 +0.369350492954254150390625 -0.2428545057773590087890625 0.23367099463939666748046875 +0.369350492954254150390625 0.2428545057773590087890625 0.23367099463939666748046875 +0.369361817836761474609375 -0.119147399067878717593416126874 0.457576203346252430304019753748 +0.369361817836761474609375 0.119147399067878717593416126874 0.457576203346252430304019753748 +0.369409501552581787109375 -0.2683905065059661865234375 0.20372299849987030029296875 +0.369409501552581787109375 0.2683905065059661865234375 0.20372299849987030029296875 +0.369472217559814464227230246252 -0.47142899036407470703125 -0.03528960049152374267578125 +0.369472217559814464227230246252 0.47142899036407470703125 -0.03528960049152374267578125 +0.369504842162132252081363503748 0 -0.534757611155510015343850227509 +0.3695360124111175537109375 -0.711278021335601806640625 0.597935020923614501953125 +0.3695360124111175537109375 0.711278021335601806640625 0.597935020923614501953125 +0.369552397727966330798210492503 -0.15307199954986572265625 0 +0.369552397727966330798210492503 0.15307199954986572265625 0 +0.369614982604980435443309261245 -0.317477416992187511102230246252 -0.350132989883422840460269753748 +0.369614982604980435443309261245 0.317477416992187511102230246252 -0.350132989883422840460269753748 +0.369625900685787212029964621252 -0.1984248459339141845703125 -0.7392594516277313232421875 +0.369625900685787212029964621252 0.1984248459339141845703125 -0.7392594516277313232421875 +0.369660007953643787725894753748 -0.396528017520904552117855246252 -0.257132399082183826788394753748 +0.369660007953643787725894753748 0.396528017520904552117855246252 -0.257132399082183826788394753748 +0.3697912395000457763671875 -0.56233799457550048828125 0.330953992903232574462890625 +0.3697912395000457763671875 0.56233799457550048828125 0.330953992903232574462890625 +0.369791799783706631732371761245 -0.399795907735824573858707253748 0.439792484045028631012286268742 +0.369791799783706631732371761245 0.399795907735824573858707253748 0.439792484045028631012286268742 +0.369877937436103809698551003748 -0.223397554457187647036775501874 0.125633704662323014700220369377 +0.369877937436103809698551003748 0.223397554457187647036775501874 0.125633704662323014700220369377 +0.37017810344696044921875 -0.116950495541095739193693248126 0.227575805783271800653011496252 +0.37017810344696044921875 0.116950495541095739193693248126 0.227575805783271800653011496252 +0.370356905460357654913394753748 -0.225688610970973951852514005623 0.731027218699455194617087272491 +0.370356905460357654913394753748 0.225688610970973951852514005623 0.731027218699455194617087272491 +0.370377901196479786261051003748 -0.56005918979644775390625 0.599294704198837346886818977509 +0.370377901196479786261051003748 0.56005918979644775390625 0.599294704198837346886818977509 +0.370379117131233226434261496252 -0.426580050587654135973991742503 -0.321479596197605133056640625 +0.370379117131233226434261496252 0.426580050587654135973991742503 -0.321479596197605133056640625 +0.370547783374786332544204014994 -0.547948080301284723425681022491 -0.229013398289680453201455634371 +0.370547783374786332544204014994 0.547948080301284723425681022491 -0.229013398289680453201455634371 +0.370674183964729342388721988755 -0.507131281495094343725327235006 -0.167088355123996751272485994377 +0.370674183964729342388721988755 0.507131281495094343725327235006 -0.167088355123996751272485994377 +0.370881003141403209344417746252 0 0.254847595095634482653679242503 +0.370926606655120894018295985006 -0.404255515336990389752003238755 0.0386088997125625665862713731258 +0.370926606655120894018295985006 0.404255515336990389752003238755 0.0386088997125625665862713731258 +0.371072855591773942407485264994 -0.1131221987307071685791015625 -0.867183738946914584033720529987 +0.371072855591773942407485264994 0.1131221987307071685791015625 -0.867183738946914584033720529987 +0.3711183071136474609375 -0.233895894885063154733373380623 0.545493918657302789831931022491 +0.3711183071136474609375 0.233895894885063154733373380623 0.545493918657302789831931022491 +0.371343737840652443615852007497 -0.602621114253997780529914507497 0.470586356520652782098323996252 +0.371343737840652443615852007497 0.602621114253997780529914507497 0.470586356520652782098323996252 +0.3715159893035888671875 -0.459563207626342784539730246252 0.539238405227661199425881477509 +0.3715159893035888671875 0.459563207626342784539730246252 0.539238405227661199425881477509 +0.371521708369255077020198996252 -0.314627486467361494604233485006 -0.255892999470233917236328125 +0.371521708369255077020198996252 0.314627486467361494604233485006 -0.255892999470233917236328125 +0.371599191427230857165397992503 -0.201715193688869476318359375 0.154028695821762096063167746252 +0.371599191427230857165397992503 0.201715193688869476318359375 0.154028695821762096063167746252 +0.371654248237609896587940738755 -0.404136154055595442358139735006 -0.0323553999885916737655477959379 +0.371654248237609896587940738755 0.404136154055595442358139735006 -0.0323553999885916737655477959379 +0.371730399131774913445980246252 -0.466947984695434581414730246252 -0.532706403732299826891960492503 +0.371730399131774913445980246252 0.466947984695434581414730246252 -0.532706403732299826891960492503 +0.371852096915245067254573996252 -0.344410201907157931255909488755 -0.743712294101715132299545985006 +0.371852096915245067254573996252 0.344410201907157931255909488755 -0.743712294101715132299545985006 +0.371938204765319802014289507497 -0.442626607418060313836605246252 0.160447794198989857061832253748 +0.371938204765319802014289507497 0.442626607418060313836605246252 0.160447794198989857061832253748 +0.371977260708808876721320757497 -0.72071467339992523193359375 -0.494675454497337296899672764994 +0.371977260708808876721320757497 0.72071467339992523193359375 -0.494675454497337296899672764994 +0.372281992435455288958934261245 -0.221107792854309065377904630623 -0.415352404117584228515625 +0.372281992435455288958934261245 0.221107792854309065377904630623 -0.415352404117584228515625 +0.372427490353584300653011496252 -0.671642789244651816638054242503 0.364270898699760425909488503748 +0.372427490353584300653011496252 0.671642789244651816638054242503 0.364270898699760425909488503748 +0.372445785999298062396434261245 -0.0736788019537925747970419365629 -0.464602196216583218646434261245 +0.372445785999298062396434261245 0.0736788019537925747970419365629 -0.464602196216583218646434261245 +0.3724629878997802734375 -0.066284500062465667724609375 0.3269214928150177001953125 +0.3724629878997802734375 0.066284500062465667724609375 0.3269214928150177001953125 +0.372524809837341319695980246252 0 0.707972812652587935033920985006 +0.372618389129638682977230246252 -0.0490911990404129042198100307814 -0.136914396286010736636384876874 +0.372618389129638682977230246252 0.0490911990404129042198100307814 -0.136914396286010736636384876874 +0.372672834992408774645866742503 -0.0448250006884336540946556226572 -0.402002140879631097991619981258 +0.372672834992408774645866742503 0.0448250006884336540946556226572 -0.402002140879631097991619981258 +0.373003238439559903216746761245 -0.744648000597953774182258257497 0.457019342482089974133430132497 +0.373003238439559903216746761245 0.744648000597953774182258257497 0.457019342482089974133430132497 +0.3731729984283447265625 -0.88475799560546875 -0.2791860103607177734375 +0.3731729984283447265625 0.88475799560546875 -0.2791860103607177734375 +0.373342454433441162109375 -0.172585408389568345510767244377 0.503319045901298500744758257497 +0.373342454433441162109375 0.172585408389568345510767244377 0.503319045901298500744758257497 +0.373500800132751498150440738755 -0.664286422729492231908920985006 0.243352794647216819079460492503 +0.373500800132751498150440738755 0.664286422729492231908920985006 0.243352794647216819079460492503 +0.373596405982971224712940738755 -0.0749719977378845298110476846887 0.121675598621368410978682561563 +0.373596405982971224712940738755 0.0749719977378845298110476846887 0.121675598621368410978682561563 +0.373604395985603354723991742503 -0.337515738606452952996761496252 0.41109965741634368896484375 +0.373604395985603354723991742503 0.337515738606452952996761496252 0.41109965741634368896484375 +0.373682107031345356329410378748 -0.656060585379600547106804242503 -0.390443260967731464727847878748 +0.373682107031345356329410378748 0.656060585379600547106804242503 -0.390443260967731464727847878748 +0.37374235689640045166015625 -0.0386403009295463520378355326557 -0.87253887951374053955078125 +0.37374235689640045166015625 0.0386403009295463520378355326557 -0.87253887951374053955078125 +0.373770895600318897589176003748 -0.248587211966514592953458873126 0.031618349254131317138671875 +0.373770895600318897589176003748 0.248587211966514592953458873126 0.031618349254131317138671875 +0.373824810981750521587940738755 -0.654016017913818359375 -0.26929199695587158203125 +0.373824810981750521587940738755 0.654016017913818359375 -0.26929199695587158203125 +0.373841089010238658563167746252 -0.0592866025865078014045472798443 0.243367660045623795950220369377 +0.373841089010238658563167746252 0.0592866025865078014045472798443 0.243367660045623795950220369377 +0.373884299397468589098991742503 -0.249016043543815623895198996252 -0.0264897007495164885093608120314 +0.373884299397468589098991742503 0.249016043543815623895198996252 -0.0264897007495164885093608120314 +0.373916408419609103130909488755 0 -0.403344160318374667095753238755 +0.373979705572128284796207253748 -0.226892244815826427117855246252 -0.105637051910161969270340875937 +0.373979705572128284796207253748 0.226892244815826427117855246252 -0.105637051910161969270340875937 +0.374049592018127485815170985006 -0.092980802059173583984375 -0.106964802742004400082365123126 +0.374049592018127485815170985006 0.092980802059173583984375 -0.106964802742004400082365123126 +0.374314808845520041735710492503 -0.0324339985847473186164613423443 0.137246394157409662417634876874 +0.374314808845520041735710492503 0.0324339985847473186164613423443 0.137246394157409662417634876874 +0.374319010972976706774772992503 -0.181830553710460668392911998126 -0.359615314006805464330795985006 +0.374319010972976706774772992503 0.181830553710460668392911998126 -0.359615314006805464330795985006 +0.37445850670337677001953125 -0.190061102807521836721704744377 -0.161733596026897435971036998126 +0.37445850670337677001953125 0.190061102807521836721704744377 -0.161733596026897435971036998126 +0.374488198757171597552684261245 -0.369382202625274658203125 -0.288643795251846302374332253748 +0.374488198757171597552684261245 0.369382202625274658203125 -0.288643795251846302374332253748 +0.374573251605033907818409488755 -0.092744551599025726318359375 -0.231502050161361688784822376874 +0.374573251605033907818409488755 0.092744551599025726318359375 -0.231502050161361688784822376874 +0.3747690021991729736328125 -0.19085800647735595703125 -0.270410001277923583984375 +0.3747690021991729736328125 0.19085800647735595703125 -0.270410001277923583984375 +0.374824452400207563940170985006 -0.355760905146598860326889735006 0.188257294893264787161157869377 +0.374824452400207563940170985006 0.355760905146598860326889735006 0.188257294893264787161157869377 +0.3748300075531005859375 -0.2974460124969482421875 -0.14501149952411651611328125 +0.3748300075531005859375 0.2974460124969482421875 -0.14501149952411651611328125 +0.374902540445327780993522992503 -0.381578445434570368011151231258 -0.1278513483703136444091796875 +0.374902540445327780993522992503 0.381578445434570368011151231258 -0.1278513483703136444091796875 +0.374913191795349154400440738755 -0.136572396755218511410490123126 0.0280707985162735006168244211722 +0.374913191795349154400440738755 0.136572396755218511410490123126 0.0280707985162735006168244211722 +0.374938192963600147589176003748 -0.796283107995987005089943977509 -0.188030697405338287353515625 +0.374938192963600147589176003748 0.796283107995987005089943977509 -0.188030697405338287353515625 +0.37494099140167236328125 -0.3232879936695098876953125 0.0700294971466064453125 +0.37494099140167236328125 0.3232879936695098876953125 0.0700294971466064453125 +0.374997742474079132080078125 -0.1486679948866367340087890625 -0.6322777569293975830078125 +0.374997742474079132080078125 0.1486679948866367340087890625 -0.6322777569293975830078125 +0.375019598007202192846420985006 -0.137137603759765636102230246252 -0.0235264003276824951171875 +0.375019598007202192846420985006 0.137137603759765636102230246252 -0.0235264003276824951171875 +0.375059306621551569183026231258 -0.244453543424606345446647992503 0.319488385319709800036491742503 +0.375059306621551569183026231258 0.244453543424606345446647992503 0.319488385319709800036491742503 +0.37509973347187042236328125 -0.55416150391101837158203125 -0.338681258261203765869140625 +0.37509973347187042236328125 0.55416150391101837158203125 -0.338681258261203765869140625 +0.375141584873199429583934261245 -0.272555404901504483294871761245 0.380765998363494839740184261245 +0.375141584873199429583934261245 0.272555404901504483294871761245 0.380765998363494839740184261245 +0.375190186500549305304019753748 -0.0247806005179882042621652971093 -0.467566788196563720703125 +0.375190186500549305304019753748 0.0247806005179882042621652971093 -0.467566788196563720703125 +0.375200009346008334087940738755 -0.0165000006556510932231862653907 -0.13766920566558837890625 +0.375200009346008334087940738755 0.0165000006556510932231862653907 -0.13766920566558837890625 +0.37520550191402435302734375 -0.348157502710819244384765625 0.5481854975223541259765625 +0.37520550191402435302734375 0.348157502710819244384765625 0.5481854975223541259765625 +0.375433360040187791284438389994 -0.545731309056281976843649772491 0.680975207686424277575554242503 +0.375433360040187791284438389994 0.545731309056281976843649772491 0.680975207686424277575554242503 +0.375448404252529122082648882497 -0.132967202365398412533536998126 -0.75090532004833221435546875 +0.375448404252529122082648882497 0.132967202365398412533536998126 -0.75090532004833221435546875 +0.375455698370933566021534488755 -0.802567791938781804894631477509 0.157853700220584869384765625 +0.375455698370933566021534488755 0.802567791938781804894631477509 0.157853700220584869384765625 +0.375531695783138275146484375 -0.5502950847148895263671875 -0.527873805165290810315070757497 +0.375531695783138275146484375 0.5502950847148895263671875 -0.527873805165290810315070757497 +0.375551199913024935650440738755 0 0.137699604034423828125 +0.375862908363342240747329014994 -0.21535779535770416259765625 -0.549861884117126442639289507497 +0.375862908363342240747329014994 0.21535779535770416259765625 -0.549861884117126442639289507497 +0.3759759962558746337890625 -0.896400988101959228515625 0.23474900424480438232421875 +0.3759759962558746337890625 0.896400988101959228515625 0.23474900424480438232421875 +0.37602974474430084228515625 -0.52653224766254425048828125 0.37929524481296539306640625 +0.37602974474430084228515625 0.52653224766254425048828125 0.37929524481296539306640625 +0.376123487949371337890625 -0.110056497156620025634765625 -0.31051349639892578125 +0.376123487949371337890625 0.110056497156620025634765625 -0.31051349639892578125 +0.376160688698291778564453125 -0.413298907876014698370426003748 -0.640458014607429459985610264994 +0.376160688698291778564453125 0.413298907876014698370426003748 -0.640458014607429459985610264994 +0.376186493039131153448551003748 -0.634707909822464055871193977509 -0.515393114089965798108039507497 +0.376186493039131153448551003748 0.634707909822464055871193977509 -0.515393114089965798108039507497 +0.37634050846099853515625 -0.1624304950237274169921875 0.286328494548797607421875 +0.37634050846099853515625 0.1624304950237274169921875 0.286328494548797607421875 +0.3763979971408843994140625 -0.23282550275325775146484375 -0.23262999951839447021484375 +0.3763979971408843994140625 0.23282550275325775146484375 -0.23262999951839447021484375 +0.37642125785350799560546875 -0.33522824943065643310546875 -0.55536375939846038818359375 +0.37642125785350799560546875 0.33522824943065643310546875 -0.55536375939846038818359375 +0.3764919936656951904296875 -0.80149900913238525390625 -0.4645999968051910400390625 +0.3764919936656951904296875 0.80149900913238525390625 -0.4645999968051910400390625 +0.37652051448822021484375 -0.3237049877643585205078125 -0.058715499937534332275390625 +0.37652051448822021484375 0.3237049877643585205078125 -0.058715499937534332275390625 +0.376537799835205078125 -0.443330383300781227795539507497 -0.147232201695442183053685880623 +0.376537799835205078125 0.443330383300781227795539507497 -0.147232201695442183053685880623 +0.3767220079898834228515625 -0.2737019956111907958984375 -0.884967982769012451171875 +0.3767220079898834228515625 0.2737019956111907958984375 -0.884967982769012451171875 +0.376759195327758811266960492503 -0.108249199390411388055355246252 -0.0795895993709564292251101846887 +0.376759195327758811266960492503 0.108249199390411388055355246252 -0.0795895993709564292251101846887 +0.376775020360946621966746761245 -0.524603796005248979028579014994 0.269873103499412514416633257497 +0.376775020360946621966746761245 0.524603796005248979028579014994 0.269873103499412514416633257497 +0.376805996894836459087940738755 -0.0915588021278381375411825615629 0.0981540024280548178969851846887 +0.376805996894836459087940738755 0.0915588021278381375411825615629 0.0981540024280548178969851846887 +0.377086806297302290502670985006 -0.123062002658843996916182561563 -0.0515883982181549113898988423443 +0.377086806297302290502670985006 0.123062002658843996916182561563 -0.0515883982181549113898988423443 +0.377124819159507740362613503748 -0.220481950044631974661157869377 -0.481315258145332325323551003748 +0.377124819159507740362613503748 0.220481950044631974661157869377 -0.481315258145332325323551003748 +0.377404403686523448602230246252 -0.122083604335784912109375 0.0515883982181549113898988423443 +0.377404403686523448602230246252 0.122083604335784912109375 0.0515883982181549113898988423443 +0.377486902475357044561832253748 -0.444201797246932927887286268742 -0.387541705369949307513621761245 +0.377486902475357044561832253748 0.444201797246932927887286268742 -0.387541705369949307513621761245 +0.377510404586792025494190738755 -0.274273610115051302837940738755 -0.649815177917480557567841970013 +0.377510404586792025494190738755 0.274273610115051302837940738755 -0.649815177917480557567841970013 +0.37751398980617523193359375 -0.45819000899791717529296875 -0.4583069980144500732421875 +0.37751398980617523193359375 0.45819000899791717529296875 -0.4583069980144500732421875 +0.377514454722404468878238503748 -0.136709551513195054495142244377 0.203207856416702276058927623126 +0.377514454722404468878238503748 0.136709551513195054495142244377 0.203207856416702276058927623126 +0.377576091885566733630241742503 -0.815248793363571144787727007497 0.0529731016606092494636293110943 +0.377576091885566733630241742503 0.815248793363571144787727007497 0.0529731016606092494636293110943 +0.377581095695495638775440738755 -0.48446905612945556640625 0.212655298411846160888671875 +0.377581095695495638775440738755 0.48446905612945556640625 0.212655298411846160888671875 +0.377821809053421053814503238755 -0.142547848820686356985376619377 -0.198571953177452104055689119377 +0.377821809053421053814503238755 0.142547848820686356985376619377 -0.198571953177452104055689119377 +0.377823150157928500103565738755 -0.207117444276809697933927623126 -0.129815094172954559326171875 +0.377823150157928500103565738755 0.207117444276809697933927623126 -0.129815094172954559326171875 +0.377927112579345692022769753748 -0.814355081319808937756477007497 -0.0632249973714351654052734375 +0.377927112579345692022769753748 0.814355081319808937756477007497 -0.0632249973714351654052734375 +0.37804639339447021484375 -0.106951200962066658717297684689 0.0751164019107818659026776231258 +0.37804639339447021484375 0.106951200962066658717297684689 0.0751164019107818659026776231258 +0.378056240081787120477230246252 -0.327731963992118846551448996252 -0.414927506446838401110710492503 +0.378056240081787120477230246252 0.327731963992118846551448996252 -0.414927506446838401110710492503 +0.378192731738090537341179242503 -0.521960404515266485070412727509 0.0838317960500717246352664346887 +0.378192731738090537341179242503 0.521960404515266485070412727509 0.0838317960500717246352664346887 +0.378386244177818353850994981258 -0.330824461579322826043636496252 0.223336300253868108578458873126 +0.378386244177818353850994981258 0.330824461579322826043636496252 0.223336300253868108578458873126 +0.378503966331481978002670985006 -0.274998344480991363525390625 0.289154785871505781713608485006 +0.378503966331481978002670985006 0.274998344480991363525390625 0.289154785871505781713608485006 +0.378545551002025582043586382497 -0.431285755336284604144481136245 -0.757096821069717318408720529987 +0.378545551002025582043586382497 0.431285755336284604144481136245 -0.757096821069717318408720529987 +0.378885197639465376440170985006 -0.0649832010269165011306924384371 -0.110558402538299571649105246252 +0.378885197639465376440170985006 0.0649832010269165011306924384371 -0.110558402538299571649105246252 +0.378956350684165943487613503748 -0.06668930314481258392333984375 -0.757921212911605857165397992503 +0.378956350684165943487613503748 0.06668930314481258392333984375 -0.757921212911605857165397992503 +0.379087114334106412005809261245 -0.430816394090652421411391514994 0.400861310958862293585269753748 +0.379087114334106412005809261245 0.430816394090652421411391514994 0.400861310958862293585269753748 +0.379090011119842529296875 -0.52410602569580078125 0.762628972530364990234375 +0.379090011119842529296875 0.52410602569580078125 0.762628972530364990234375 +0.379131746292114268914730246252 -0.0620775014162063612510600307814 -0.234319040179252618960603626874 +0.379131746292114268914730246252 0.0620775014162063612510600307814 -0.234319040179252618960603626874 +0.379136550426483143194644753748 0 0.527972894906997725072983485006 +0.37928397953510284423828125 -0.0898147523403167724609375 -0.6407624781131744384765625 +0.37928397953510284423828125 0.0898147523403167724609375 -0.6407624781131744384765625 +0.379370212554931696136151231258 0 0.398218706250190790374432481258 +0.379415845870971712994190738755 -0.14528195559978485107421875 0.370724764466285716668636496252 +0.379415845870971712994190738755 0.14528195559978485107421875 0.370724764466285716668636496252 +0.379546684026718150750667746252 -0.520976951718330361096320757497 -0.0838317960500717246352664346887 +0.379546684026718150750667746252 0.520976951718330361096320757497 -0.0838317960500717246352664346887 +0.379551911354064908099559261245 -0.333353298902511585577457253748 -0.484578514099121060443309261245 +0.379551911354064908099559261245 0.333353298902511585577457253748 -0.484578514099121060443309261245 +0.379615491628646883892628238755 -0.3038480579853057861328125 0.257038094103336334228515625 +0.379615491628646883892628238755 0.3038480579853057861328125 0.257038094103336334228515625 +0.379785001277923583984375 -0.2759275138378143310546875 -0.172125995159149169921875 +0.379785001277923583984375 0.2759275138378143310546875 -0.172125995159149169921875 +0.379867815971374478412059261245 -0.418221008777618419305355246252 0.2019689977169036865234375 +0.379867815971374478412059261245 0.418221008777618419305355246252 0.2019689977169036865234375 +0.379917192459106489721420985006 -0.0484567999839782756477113423443 0.115390396118164068051115123126 +0.379917192459106489721420985006 0.0484567999839782756477113423443 0.115390396118164068051115123126 +0.37994098663330078125 -0.678906977176666259765625 -0.628274977207183837890625 +0.37994098663330078125 0.678906977176666259765625 -0.628274977207183837890625 +0.3800467550754547119140625 -0.199801504611968994140625 0.61493401229381561279296875 +0.3800467550754547119140625 0.199801504611968994140625 0.61493401229381561279296875 +0.380061614513397205694644753748 -0.306721186637878395764289507497 0.3485333919525146484375 +0.380061614513397205694644753748 0.306721186637878395764289507497 0.3485333919525146484375 +0.380100595951080311163394753748 -0.276156002283096280169871761245 -0.373177206516265846936164507497 +0.380100595951080311163394753748 0.276156002283096280169871761245 -0.373177206516265846936164507497 +0.380128511786460843158153011245 0 -0.760264673829078696520866742503 +0.380129347741603840216129128748 -0.44686792790889739990234375 0.61507020890712738037109375 +0.380129347741603840216129128748 0.44686792790889739990234375 0.61507020890712738037109375 +0.380133603513240825311214621252 -0.72305078804492950439453125 -0.234937441349029524362279630623 +0.380133603513240825311214621252 0.72305078804492950439453125 -0.234937441349029524362279630623 +0.3802034854888916015625 -0.3247235119342803955078125 0 +0.3802034854888916015625 0.3247235119342803955078125 0 +0.38042318820953369140625 -0.123605203628540050164730246252 0 +0.38042318820953369140625 0.123605203628540050164730246252 0 +0.3807159960269927978515625 -0.82710802555084228515625 0.4134570062160491943359375 +0.3807159960269927978515625 0.82710802555084228515625 0.4134570062160491943359375 +0.380865444242954265252620871252 -0.63301537930965423583984375 0.420396395027637481689453125 +0.380865444242954265252620871252 0.63301537930965423583984375 0.420396395027637481689453125 +0.380916005373001131939503238755 -0.730949378013610817639289507497 -0.36140848696231842041015625 +0.380916005373001131939503238755 0.730949378013610817639289507497 -0.36140848696231842041015625 +0.380996552109718333856136496252 -0.2310178577899932861328125 0.06302654743194580078125 +0.380996552109718333856136496252 0.2310178577899932861328125 0.06302654743194580078125 +0.381033003330230712890625 -0.0882063008844852503020916856258 0.222561456263065338134765625 +0.381033003330230712890625 0.0882063008844852503020916856258 0.222561456263065338134765625 +0.38131201267242431640625 -0.522491991519927978515625 -0.762628972530364990234375 +0.38131201267242431640625 0.522491991519927978515625 -0.762628972530364990234375 +0.38134801387786865234375 -0.19180549681186676025390625 0.2603544890880584716796875 +0.38134801387786865234375 0.19180549681186676025390625 0.2603544890880584716796875 +0.3814252316951751708984375 -0.030973498709499835968017578125 -0.64502401649951934814453125 +0.3814252316951751708984375 0.030973498709499835968017578125 -0.64502401649951934814453125 +0.381478884816169760973991742503 -0.232296903431415568963558371252 -0.320954716205596957134815738755 +0.381478884816169760973991742503 0.232296903431415568963558371252 -0.320954716205596957134815738755 +0.381545007228851318359375 -0.0757730007171630859375 -0.3141370117664337158203125 +0.381545007228851318359375 0.0757730007171630859375 -0.3141370117664337158203125 +0.381596267223358154296875 -0.61888124048709869384765625 0.1840402521193027496337890625 +0.381596267223358154296875 0.61888124048709869384765625 0.1840402521193027496337890625 +0.381729599833488475457698996252 -0.0296176493167877204204518903907 0.236443054676055919305355246252 +0.381729599833488475457698996252 0.0296176493167877204204518903907 0.236443054676055919305355246252 +0.381793060898780844958366742503 -0.232253095507621770687833873126 -0.0528439499437809018234091240629 +0.381793060898780844958366742503 0.232253095507621770687833873126 -0.0528439499437809018234091240629 +0.381797111034393343853565738755 -0.498029404878616355212272992503 -0.645134407281875654760483485006 +0.381797111034393343853565738755 0.498029404878616355212272992503 -0.645134407281875654760483485006 +0.381807261705398526263621761245 -0.733267781138420060571547764994 0.1975884474813938140869140625 +0.381807261705398526263621761245 0.733267781138420060571547764994 0.1975884474813938140869140625 +0.381875404715538047106804242503 -0.0311130009591579458072541086722 -0.236015108227729808465511496252 +0.381875404715538047106804242503 0.0311130009591579458072541086722 -0.236015108227729808465511496252 +0.381902459263801563604801003748 -0.113109505921602251921065374063 0.750904458761215143347556022491 +0.381902459263801563604801003748 0.113109505921602251921065374063 0.750904458761215143347556022491 +0.382016003131866455078125 -0.749383985996246337890625 0.540821015834808349609375 +0.382016003131866455078125 0.749383985996246337890625 0.540821015834808349609375 +0.382060912251472484246761496252 -0.525861051678657598351662727509 0 +0.382060912251472484246761496252 0.525861051678657598351662727509 0 +0.382288205623626697882144753748 -0.454760992527008023333934261245 0.0839525967836379921616085653113 +0.382288205623626697882144753748 0.454760992527008023333934261245 0.0839525967836379921616085653113 +0.382417187094688471038494981258 -0.07303559780120849609375 0.388488090038299593853565738755 +0.382417187094688471038494981258 0.07303559780120849609375 0.388488090038299593853565738755 +0.382445710897445667608707253748 -0.571362417936325028833266514994 0.131453703343868244513004128748 +0.382445710897445667608707253748 0.571362417936325028833266514994 0.131453703343868244513004128748 +0.382450497150421175884815738755 -0.747729921340942405016960492503 0.323467192053794871942073996252 +0.382450497150421175884815738755 0.747729921340942405016960492503 0.323467192053794871942073996252 +0.382462811470031749383480246252 -0.0162568002939224263980744211722 0.11600840091705322265625 +0.382462811470031749383480246252 0.0162568002939224263980744211722 0.11600840091705322265625 +0.382499617338180497583266514994 -0.520444405078887895044204014994 -0.269873791933059659076121761245 +0.382499617338180497583266514994 0.520444405078887895044204014994 -0.269873791933059659076121761245 +0.3825367391109466552734375 -0.6131407320499420166015625 -0.200559742748737335205078125 +0.3825367391109466552734375 0.6131407320499420166015625 -0.200559742748737335205078125 +0.382636108994483969958366742503 -0.387458488345146234710369981258 0.0772370509803295135498046875 +0.382636108994483969958366742503 0.387458488345146234710369981258 0.0772370509803295135498046875 +0.3826839923858642578125 -0.92387902736663818359375 0 +0.3826839923858642578125 0.92387902736663818359375 0 +0.3826932609081268310546875 -0.588221022486686728747429242503 -0.640345606207847528601462272491 +0.3826932609081268310546875 0.588221022486686728747429242503 -0.640345606207847528601462272491 +0.382708811759948752673210492503 -0.03260000050067901611328125 -0.111673998832702639494307561563 +0.382708811759948752673210492503 0.03260000050067901611328125 -0.111673998832702639494307561563 +0.382790708541870139391960492503 -0.278109911084175098761051003748 -0.765588605403900168688835492503 +0.382790708541870139391960492503 0.278109911084175098761051003748 -0.765588605403900168688835492503 +0.38279159367084503173828125 0 -0.236581188440322887078792746252 +0.3828032016754150390625 -0.537851190567016579358039507497 -0.451860809326171897204460492503 +0.3828032016754150390625 0.537851190567016579358039507497 -0.451860809326171897204460492503 +0.382816004753112837377670985006 -0.0804744005203247153579226846887 -0.0835207998752593994140625 +0.382816004753112837377670985006 0.0804744005203247153579226846887 -0.0835207998752593994140625 +0.382831192016601540295539507497 0 0.461995804309844937396434261245 +0.382915806770324718133480246252 -0.1557679474353790283203125 0.177797694504261027947933371252 +0.382915806770324718133480246252 0.1557679474353790283203125 0.177797694504261027947933371252 +0.382916986942291259765625 -0.157718396186828618832365123126 0.434165382385253872943309261245 +0.382916986942291259765625 0.157718396186828618832365123126 0.434165382385253872943309261245 +0.3829275071620941162109375 -0.30373799800872802734375 0.105402000248432159423828125 +0.3829275071620941162109375 0.30373799800872802734375 0.105402000248432159423828125 +0.382930210232734713482471988755 -0.6007491052150726318359375 0.549968397617340065686164507497 +0.382930210232734713482471988755 0.6007491052150726318359375 0.549968397617340065686164507497 +0.382970249652862582134815738755 -0.366930833458900484966846988755 0.375759786367416415142628238755 +0.382970249652862582134815738755 0.366930833458900484966846988755 0.375759786367416415142628238755 +0.382978695631027210577457253748 -0.483270463347435008660823996252 -0.2056138515472412109375 +0.382978695631027210577457253748 0.483270463347435008660823996252 -0.2056138515472412109375 +0.382990396022796664166065738755 -0.0864955045282840701004190009371 0.518012297153472967004006477509 +0.382990396022796664166065738755 0.0864955045282840701004190009371 0.518012297153472967004006477509 +0.383001506328582763671875 -0.253145992755889892578125 -0.19805850088596343994140625 +0.383001506328582763671875 0.253145992755889892578125 -0.19805850088596343994140625 +0.3830229938030242919921875 -0.916243970394134521484375 0.11743099987506866455078125 +0.3830229938030242919921875 0.916243970394134521484375 0.11743099987506866455078125 +0.3831554949283599853515625 -0.09919250011444091796875 0.3055365085601806640625 +0.3831554949283599853515625 0.09919250011444091796875 0.3055365085601806640625 +0.383186289668083157611278011245 0 0.869291809201240495141860264994 +0.3832069933414459228515625 -0.91298198699951171875 -0.140058994293212890625 +0.3832069933414459228515625 0.91298198699951171875 -0.140058994293212890625 +0.383272451162338267938167746252 -0.2784605920314788818359375 -0.279395616054534945416065738755 +0.383272451162338267938167746252 0.2784605920314788818359375 -0.279395616054534945416065738755 +0.383358407020568892065170985006 -0.496188783645629905016960492503 0.496822404861450239721420985006 +0.383358407020568892065170985006 0.496188783645629905016960492503 0.496822404861450239721420985006 +0.3834554851055145263671875 -0.0330209992825984954833984375 0.3191730082035064697265625 +0.3834554851055145263671875 0.0330209992825984954833984375 0.3191730082035064697265625 +0.383456164598464988024772992503 -0.360953989624977156225327235006 -0.158662892878055572509765625 +0.383456164598464988024772992503 0.360953989624977156225327235006 -0.158662892878055572509765625 +0.3835875988006591796875 -0.109876000881195076686047684689 -0.0280707985162735006168244211722 +0.3835875988006591796875 0.109876000881195076686047684689 -0.0280707985162735006168244211722 +0.383615994453430197985710492503 -0.160292804241180419921875 0.683479976654052800988381477509 +0.383615994453430197985710492503 0.160292804241180419921875 0.683479976654052800988381477509 +0.383688899874687183721988503748 -0.235123193264007573910490123126 0 +0.383688899874687183721988503748 0.235123193264007573910490123126 0 +0.38370120525360107421875 -0.0642480015754699762542401231258 0.0929820001125335748870526231258 +0.38370120525360107421875 0.0642480015754699762542401231258 0.0929820001125335748870526231258 +0.38372039794921875 -0.492786020040512029449786268742 0.316102507710456837042301003748 +0.38372039794921875 0.492786020040512029449786268742 0.316102507710456837042301003748 +0.38391149044036865234375 -0.568517601490020729748664507497 -0.139282497763633716925113503748 +0.38391149044036865234375 0.568517601490020729748664507497 -0.139282497763633716925113503748 +0.383986401557922407690170985006 0 -0.112046802043914803248547684689 +0.384005594253540083471420985006 -0.109481203556060793791182561563 0.0235264003276824951171875 +0.384005594253540083471420985006 0.109481203556060793791182561563 0.0235264003276824951171875 +0.384290513396263133660823996252 -0.143850292265415208303735994377 -0.366235095262527510229233485006 +0.384290513396263133660823996252 0.143850292265415208303735994377 -0.366235095262527510229233485006 +0.384338414669036843029914507497 -0.180752402544021611996427623126 -0.423807013034820545538394753748 +0.384338414669036843029914507497 0.180752402544021611996427623126 -0.423807013034820545538394753748 +0.384359547495841946673778011245 -0.80562467873096466064453125 -0.325172653794288613049445757497 +0.384359547495841946673778011245 0.80562467873096466064453125 -0.325172653794288613049445757497 +0.384386801719665549548210492503 -0.0954695999622345026214276231258 -0.0559683978557586683799662807814 +0.384386801719665549548210492503 0.0954695999622345026214276231258 -0.0559683978557586683799662807814 +0.38443051278591156005859375 -0.393080234527587890625 0.5100997388362884521484375 +0.38443051278591156005859375 0.393080234527587890625 0.5100997388362884521484375 +0.384504604339599598272769753748 -0.455190610885620072778579014994 -0.07040999829769134521484375 +0.384504604339599598272769753748 0.455190610885620072778579014994 -0.07040999829769134521484375 +0.384519302845001242907585492503 -0.387879252433776910979901231258 -0.06476744823157787322998046875 +0.384519302845001242907585492503 0.387879252433776910979901231258 -0.06476744823157787322998046875 +0.38456475734710693359375 -0.52033124864101409912109375 -0.37929524481296539306640625 +0.38456475734710693359375 0.52033124864101409912109375 -0.37929524481296539306640625 +0.384695103764534029888721988755 -0.060038097202777862548828125 0.811421120166778586657585492503 +0.384695103764534029888721988755 0.060038097202777862548828125 0.811421120166778586657585492503 +0.384790682792663540912059261245 -0.140256203711032867431640625 0.56768321990966796875 +0.384790682792663540912059261245 0.140256203711032867431640625 0.56768321990966796875 +0.384903991222381614001335492503 -0.456500199437141429559261496252 0.256819550693035136834652121252 +0.384903991222381614001335492503 0.456500199437141429559261496252 0.256819550693035136834652121252 +0.384964209794998180047542746252 -0.161200802028179185354517244377 -0.168276147544383997134431751874 +0.384964209794998180047542746252 0.161200802028179185354517244377 -0.168276147544383997134431751874 +0.384978604316711436883480246252 -0.392097008228302013055355246252 0.2409389913082122802734375 +0.384978604316711436883480246252 0.392097008228302013055355246252 0.2409389913082122802734375 +0.38500630855560302734375 -0.27972279489040374755859375 0.513347113132476828845085492503 +0.38500630855560302734375 0.27972279489040374755859375 0.513347113132476828845085492503 +0.385015010833740234375 -0.19727100431919097900390625 -0.901580989360809326171875 +0.385015010833740234375 0.19727100431919097900390625 -0.901580989360809326171875 +0.385080993175506591796875 -0.15838600695133209228515625 -0.276814997196197509765625 +0.385080993175506591796875 0.15838600695133209228515625 -0.276814997196197509765625 +0.3851074874401092529296875 -0.0411204993724822998046875 -0.316229999065399169921875 +0.3851074874401092529296875 0.0411204993724822998046875 -0.316229999065399169921875 +0.385224795341491732525440738755 -0.634118413925170987255341970013 0.299157595634460482525440738755 +0.385224795341491732525440738755 0.634118413925170987255341970013 0.299157595634460482525440738755 +0.385252308845520030633480246252 -0.61876006424427032470703125 -0.437282511591911282611278011245 +0.385252308845520030633480246252 0.61876006424427032470703125 -0.437282511591911282611278011245 +0.385292005538940440789730246252 -0.320772004127502452508480246252 0.6234223842620849609375 +0.385292005538940440789730246252 0.320772004127502452508480246252 0.6234223842620849609375 +0.385648798942565929070980246252 -0.0797312021255493219573651231258 0.07012879848480224609375 +0.385648798942565929070980246252 0.0797312021255493219573651231258 0.07012879848480224609375 +0.385687360167503379138054242503 -0.211911302804946910516292746252 0.0940153487026691436767578125 +0.385687360167503379138054242503 0.211911302804946910516292746252 0.0940153487026691436767578125 +0.385750389099121127056690738755 -0.0948332011699676569183026231258 0.0469399988651275634765625 +0.385750389099121127056690738755 0.0948332011699676569183026231258 0.0469399988651275634765625 +0.385771957039833079949886496252 -0.111294896900653847438000809689 -0.203208298981189722232088001874 +0.385771957039833079949886496252 0.111294896900653847438000809689 -0.203208298981189722232088001874 +0.385832488536834716796875 -0.3054614961147308349609375 -0.08846700191497802734375 +0.385832488536834716796875 0.3054614961147308349609375 -0.08846700191497802734375 +0.38589234650135040283203125 -0.75735509395599365234375 0 +0.38589234650135040283203125 0.75735509395599365234375 0 +0.385996997356414794921875 -0.1332550048828125 0.91282498836517333984375 +0.385996997356414794921875 0.1332550048828125 0.91282498836517333984375 +0.386296784877777077404914507497 -0.0799530029296875027755575615629 0.452086186408996559826789507497 +0.386296784877777077404914507497 0.0799530029296875027755575615629 0.452086186408996559826789507497 +0.386353808641433704718082253748 -0.174027152359485626220703125 0.151476305723190318719417746252 +0.386353808641433704718082253748 0.174027152359485626220703125 0.151476305723190318719417746252 +0.386416494846343994140625 0 -0.3173049986362457275390625 +0.38646189868450164794921875 -0.188650048524141300543277566248 0.847088414430618219519431022491 +0.38646189868450164794921875 0.188650048524141300543277566248 0.847088414430618219519431022491 +0.386476299166679360119758257497 -0.750411447882652238305922764994 0.10009514726698398590087890625 +0.386476299166679360119758257497 0.750411447882652238305922764994 0.10009514726698398590087890625 +0.386528331041336048468082253748 -0.386678498983383189813167746252 -0.351533660292625449450554242503 +0.386528331041336048468082253748 0.386678498983383189813167746252 -0.351533660292625449450554242503 +0.386588996648788429943977007497 -0.459202098846435535772769753748 0.360115009546279896124332253748 +0.386588996648788429943977007497 0.459202098846435535772769753748 0.360115009546279896124332253748 +0.386758497357368447033820757497 -0.747441527247428849634047764994 -0.119367200136184695158370061563 +0.386758497357368447033820757497 0.747441527247428849634047764994 -0.119367200136184695158370061563 +0.387010788917541537212940738755 -0.417789003252983126568409488755 0.696904206275939963610710492503 +0.387010788917541537212940738755 0.417789003252983126568409488755 0.696904206275939963610710492503 +0.3871454894542694091796875 -0.28127400577068328857421875 -0.57749699056148529052734375 +0.3871454894542694091796875 0.28127400577068328857421875 -0.57749699056148529052734375 +0.38716399669647216796875 -0.332338988780975341796875 0.860032021999359130859375 +0.38716399669647216796875 0.332338988780975341796875 0.860032021999359130859375 +0.387267601490020763055355246252 -0.420371389389038063733039507497 -0.182514595985412586554019753748 +0.387267601490020763055355246252 0.420371389389038063733039507497 -0.182514595985412586554019753748 +0.387455257773399341925113503748 -0.216021001338958740234375 0.47509343922138214111328125 +0.387455257773399341925113503748 0.216021001338958740234375 0.47509343922138214111328125 +0.387484407424926791119190738755 -0.0322288006544113186935263115629 0.0938987970352172934829226846887 +0.387484407424926791119190738755 0.0322288006544113186935263115629 0.0938987970352172934829226846887 +0.387541186809539806024105246252 -0.332842183113098155633480246252 0.314686810970306374279914507497 +0.387541186809539806024105246252 0.332842183113098155633480246252 0.314686810970306374279914507497 +0.387559211254119850842414507497 -0.363443398475646939349559261245 0.278759407997131336554019753748 +0.387559211254119850842414507497 0.363443398475646939349559261245 0.278759407997131336554019753748 +0.387567210197448774877670985006 -0.412892007827758811266960492503 -0.565076780319213933800881477509 +0.387567210197448774877670985006 0.412892007827758811266960492503 -0.565076780319213933800881477509 +0.3876138031482696533203125 0 0.228594160079956060238615123126 +0.387745204567909229620426003748 -0.214299447834491729736328125 -0.0789268501102924346923828125 +0.387745204567909229620426003748 0.214299447834491729736328125 -0.0789268501102924346923828125 +0.387811803817749045641960492503 -0.191394898295402543508814119377 0.124378202855587011166349498126 +0.387811803817749045641960492503 0.191394898295402543508814119377 0.124378202855587011166349498126 +0.3878490030765533447265625 -0.213566005229949951171875 0.2322990000247955322265625 +0.3878490030765533447265625 0.213566005229949951171875 0.2322990000247955322265625 +0.387960004806518599096420985006 -0.624160814285278364721420985006 -0.31608641147613525390625 +0.387960004806518599096420985006 0.624160814285278364721420985006 -0.31608641147613525390625 +0.388076806068420432360710492503 -0.0491196006536483778526225307814 -0.0835687994956970242599325615629 +0.388076806068420432360710492503 0.0491196006536483778526225307814 -0.0835687994956970242599325615629 +0.388176110386848460809261496252 -0.282023298740386951788394753748 -0.438499766588211048468082253748 +0.388176110386848460809261496252 0.282023298740386951788394753748 -0.438499766588211048468082253748 +0.388279259204864501953125 -0.82257746160030364990234375 0.274054087698459625244140625 +0.388279259204864501953125 0.82257746160030364990234375 0.274054087698459625244140625 +0.3883149921894073486328125 -0.282126009464263916015625 0.140058994293212890625 +0.3883149921894073486328125 0.282126009464263916015625 0.140058994293212890625 +0.388431411981582597192641514994 -0.167071101069450361764623380623 -0.557860815525054842822783029987 +0.388431411981582597192641514994 0.167071101069450361764623380623 -0.557860815525054842822783029987 +0.388537034392356928069744981258 -0.179259844124317196945028740629 0.345550155639648470806690738755 +0.388537034392356928069744981258 0.179259844124317196945028740629 0.345550155639648470806690738755 +0.388556385040283169818309261245 -0.331111800670623790399105246252 -0.315259802341461170538394753748 +0.388556385040283169818309261245 0.331111800670623790399105246252 -0.315259802341461170538394753748 +0.3887484073638916015625 0 0.094205200672149658203125 +0.38883714377880096435546875 -0.42680104076862335205078125 0.298574258387088786736995871252 +0.38883714377880096435546875 0.42680104076862335205078125 0.298574258387088786736995871252 +0.388909411430358897820980246252 -0.388908296823501642425213731258 0 +0.388909411430358897820980246252 0.388908296823501642425213731258 0 +0.388948392868042003289730246252 -0.0933767974376678577819177462516 0 +0.388948392868042003289730246252 0.0933767974376678577819177462516 0 +0.3891910016536712646484375 -0.20167450606822967529296875 -0.24053649604320526123046875 +0.3891910016536712646484375 0.20167450606822967529296875 -0.24053649604320526123046875 +0.389452511072158835681022992503 -0.106752146780490872468583063437 0.198571497201919550112947376874 +0.389452511072158835681022992503 0.106752146780490872468583063437 0.198571497201919550112947376874 +0.389453451335430134161441628748 -0.379623793065547943115234375 0.778917378187179543225227007497 +0.389453451335430134161441628748 0.379623793065547943115234375 0.778917378187179543225227007497 +0.3894754350185394287109375 -0.175904290378093713931306751874 -0.489762011170387312475327235006 +0.3894754350185394287109375 0.175904290378093713931306751874 -0.489762011170387312475327235006 +0.389603707194328297003238503748 -0.178805252909660344906583873126 -0.136885946989059453793302623126 +0.389603707194328297003238503748 0.178805252909660344906583873126 -0.136885946989059453793302623126 +0.389668011665344260485710492503 -0.678421592712402432567841970013 -0.167042398452758811266960492503 +0.389668011665344260485710492503 0.678421592712402432567841970013 -0.167042398452758811266960492503 +0.389669394493103005139289507497 -0.456243002414703335833934261245 0 +0.389669394493103005139289507497 0.456243002414703335833934261245 0 +0.389747087657451640740902121252 -0.353252351284027099609375 -0.667689430713653497839743522491 +0.389747087657451640740902121252 0.353252351284027099609375 -0.667689430713653497839743522491 +0.389879709482192970959602007497 -0.579912889003753595495993522491 0.041171200573444366455078125 +0.389879709482192970959602007497 0.579912889003753595495993522491 0.041171200573444366455078125 +0.390003204345703125 -0.684269618988037175988381477509 0.140258395671844476870759876874 +0.390003204345703125 0.684269618988037175988381477509 0.140258395671844476870759876874 +0.390064054727554343493522992503 -0.0590400002896785749961772182814 0.216481505334377294369474498126 +0.390064054727554343493522992503 0.0590400002896785749961772182814 0.216481505334377294369474498126 +0.390173834562301646844417746252 -0.338601434230804465563835492503 -0.188714906573295621017294365629 +0.390173834562301646844417746252 0.338601434230804465563835492503 -0.188714906573295621017294365629 +0.390310919284820534436164507497 -0.579002904891967706824118522491 -0.0491238974034786182731870951557 +0.390310919284820534436164507497 0.579002904891967706824118522491 -0.0491238974034786182731870951557 +0.390339946746826205181690738755 -0.394434309005737337994190738755 0.338461494445800814556690738755 +0.390339946746826205181690738755 0.394434309005737337994190738755 0.338461494445800814556690738755 +0.390603005886077880859375 -0.11907599866390228271484375 -0.91282498836517333984375 +0.390603005886077880859375 0.11907599866390228271484375 -0.91282498836517333984375 +0.390621006488800048828125 -0.283799594640731789318977007497 -0.506826603412628196032585492503 +0.390621006488800048828125 0.283799594640731789318977007497 -0.506826603412628196032585492503 +0.390662407875061068462940738755 -0.0165204003453254706645925153907 -0.084321200847625732421875 +0.390662407875061068462940738755 0.0165204003453254706645925153907 -0.084321200847625732421875 +0.390764808654785189556690738755 -0.0644016027450561578948651231258 -0.0561724007129669189453125 +0.390764808654785189556690738755 0.0644016027450561578948651231258 -0.0561724007129669189453125 +0.3907657563686370849609375 -0.100141502916812896728515625 0.632276237010955810546875 +0.3907657563686370849609375 0.100141502916812896728515625 0.632276237010955810546875 +0.39080440998077392578125 -0.0484764009714126614669638115629 0.0701568007469177273849325615629 +0.39080440998077392578125 0.0484764009714126614669638115629 0.0701568007469177273849325615629 +0.390915854275226570813117632497 -0.284016443789005257336555132497 0.699299225211143515856804242503 +0.390915854275226570813117632497 0.284016443789005257336555132497 0.699299225211143515856804242503 +0.390954451262950863910106136245 -0.591173589229583740234375 0.632588854432105995861945757497 +0.390954451262950863910106136245 0.591173589229583740234375 0.632588854432105995861945757497 +0.3910259902477264404296875 -0.3096199929714202880859375 0.03513149917125701904296875 +0.3910259902477264404296875 0.3096199929714202880859375 0.03513149917125701904296875 +0.391055989265441938940170985006 -0.0792895972728729359069177462516 -0.0280791997909545926193075615629 +0.391055989265441938940170985006 0.0792895972728729359069177462516 -0.0280791997909545926193075615629 +0.39114749431610107421875 -0.1313295066356658935546875 0.2824114859104156494140625 +0.39114749431610107421875 0.1313295066356658935546875 0.2824114859104156494140625 +0.391216802597045942846420985006 -0.0533927977085113525390625 0.695771980285644575658920985006 +0.391216802597045942846420985006 0.0533927977085113525390625 0.695771980285644575658920985006 +0.391368600726127613409488503748 -0.210096895694732666015625 -0.782745301723480224609375 +0.391368600726127613409488503748 0.210096895694732666015625 -0.782745301723480224609375 +0.391432809829711958471420985006 -0.07890880107879638671875 0.0235311999917030348350444057814 +0.391432809829711958471420985006 0.07890880107879638671875 0.0235311999917030348350444057814 +0.391437906026840198858707253748 -0.0467186979949474334716796875 0.578440809249877840869658029987 +0.391437906026840198858707253748 0.0467186979949474334716796875 0.578440809249877840869658029987 +0.39146129786968231201171875 -0.0808168485760688837249432481258 -0.206704799830913554803402121252 +0.39146129786968231201171875 0.0808168485760688837249432481258 -0.206704799830913554803402121252 +0.3915185034275054931640625 -0.3095920085906982421875 -0.0294330008327960968017578125 +0.3915185034275054931640625 0.3095920085906982421875 -0.0294330008327960968017578125 +0.3915255069732666015625 0 0.31097900867462158203125 +0.391552507877349853515625 -0.2589839994907379150390625 0.17208699882030487060546875 +0.391552507877349853515625 0.2589839994907379150390625 0.17208699882030487060546875 +0.391555011272430419921875 -0.758647024631500244140625 -0.520711004734039306640625 +0.391555011272430419921875 0.758647024631500244140625 -0.520711004734039306640625 +0.391709241271018970831363503748 -0.195247355103492753469751619377 -0.104605199396610268336438309689 +0.391709241271018970831363503748 0.195247355103492753469751619377 -0.104605199396610268336438309689 +0.39187426865100860595703125 -0.63947997987270355224609375 0 +0.39187426865100860595703125 0.63947997987270355224609375 0 +0.39191101491451263427734375 -0.502173763513565130089943977509 0.129333098977804178408845814374 +0.39191101491451263427734375 0.502173763513565130089943977509 0.129333098977804178408845814374 +0.391997101902961775365952235006 -0.368286037445068381579460492503 0.114907099306583410092130748126 +0.391997101902961775365952235006 0.368286037445068381579460492503 0.114907099306583410092130748126 +0.392014408111572287829460492503 -0.695779991149902410363381477509 0.0470623999834060696700888115629 +0.392014408111572287829460492503 0.695779991149902410363381477509 0.0470623999834060696700888115629 +0.392052388191223177837940738755 -0.0638444006443023709396200615629 0.0471031993627548245529013115629 +0.392052388191223177837940738755 0.0638444006443023709396200615629 0.0471031993627548245529013115629 +0.392142605781555186883480246252 -0.238964411616325395071314119377 0.774028819799423284386818977509 +0.392142605781555186883480246252 0.238964411616325395071314119377 0.774028819799423284386818977509 +0.39220829308032989501953125 -0.218342247605323808157251619377 0.03161249868571758270263671875 +0.39220829308032989501953125 0.218342247605323808157251619377 0.03161249868571758270263671875 +0.3923285007476806640625 -0.2342135012149810791015625 0.2030330002307891845703125 +0.3923285007476806640625 0.2342135012149810791015625 0.2030330002307891845703125 +0.392328912019729636462272992503 -0.218806645274162298031583873126 -0.0264865508303046247318146555472 +0.392328912019729636462272992503 0.218806645274162298031583873126 -0.0264865508303046247318146555472 +0.392348006367683466155682481258 -0.105476804077625288535990932814 -0.370725846290588412212940738755 +0.392348006367683466155682481258 0.105476804077625288535990932814 -0.370725846290588412212940738755 +0.392506408691406294408920985006 -0.694827222824096701891960492503 -0.0561583995819091852386151231258 +0.392506408691406294408920985006 0.694827222824096701891960492503 -0.0561583995819091852386151231258 +0.392508190870284989770766514994 -0.490431910753250099865852007497 -0.308890393376350380627570757497 +0.392508190870284989770766514994 0.490431910753250099865852007497 -0.308890393376350380627570757497 +0.392510546743869759289680132497 -0.363544102013111103399722878748 -0.785029643774032503955595529987 +0.392510546743869759289680132497 0.363544102013111103399722878748 -0.785029643774032503955595529987 +0.39261750876903533935546875 -0.63293324410915374755859375 0.0880124978721141815185546875 +0.39261750876903533935546875 0.63293324410915374755859375 0.0880124978721141815185546875 +0.39263498783111572265625 -0.783840000629425048828125 0.4810729920864105224609375 +0.39263498783111572265625 0.783840000629425048828125 0.4810729920864105224609375 +0.39296324551105499267578125 -0.63013274967670440673828125 -0.1049407459795475006103515625 +0.39296324551105499267578125 0.63013274967670440673828125 -0.1049407459795475006103515625 +0.3931309878826141357421875 -0.2856239974498748779296875 -0.117757499217987060546875 +0.3931309878826141357421875 0.2856239974498748779296875 -0.117757499217987060546875 +0.393187487125396750720085492503 -0.638069415092468283923210492503 0.498267906904220569952457253748 +0.393187487125396750720085492503 0.638069415092468283923210492503 0.498267906904220569952457253748 +0.393236804008483931127670985006 -0.530271196365356467516960492503 0.451859998703002974096420985006 +0.393236804008483931127670985006 0.530271196365356467516960492503 0.451859998703002974096420985006 +0.39328445494174957275390625 -0.456887590885162342413394753748 -0.243065546452999131643579744377 +0.39328445494174957275390625 0.456887590885162342413394753748 -0.243065546452999131643579744377 +0.393302392959594737664730246252 -0.219751191139221202508480246252 -0.6610767841339111328125 +0.393302392959594737664730246252 0.219751191139221202508480246252 -0.6610767841339111328125 +0.393352794647216841283920985006 -0.0162707999348640462711212961722 0.0707732021808624295333700615629 +0.393352794647216841283920985006 0.0162707999348640462711212961722 0.0707732021808624295333700615629 +0.393413007259368896484375 -0.0406740009784698486328125 -0.918461978435516357421875 +0.393413007259368896484375 0.0406740009784698486328125 -0.918461978435516357421875 +0.39355199038982391357421875 -0.40882726013660430908203125 -0.490384519100189208984375 +0.39355199038982391357421875 0.40882726013660430908203125 -0.490384519100189208984375 +0.393591785430908169818309261245 -0.399872219562530495373664507497 -0.4185545146465301513671875 +0.393591785430908169818309261245 0.399872219562530495373664507497 -0.4185545146465301513671875 +0.393603587150573697162059261245 -0.435178792476654030529914507497 0.12528119981288909912109375 +0.393603587150573697162059261245 0.435178792476654030529914507497 0.12528119981288909912109375 +0.39363849163055419921875 -0.123660497367382049560546875 -0.282411992549896240234375 +0.39363849163055419921875 0.123660497367382049560546875 -0.282411992549896240234375 +0.393742281198501575811832253748 -0.112702095508575433902009876874 -0.567683887481689408716079014994 +0.393742281198501575811832253748 0.112702095508575433902009876874 -0.567683887481689408716079014994 +0.39377550780773162841796875 -0.59258325397968292236328125 0.23724599182605743408203125 +0.39377550780773162841796875 0.59258325397968292236328125 0.23724599182605743408203125 +0.394110596179962135998664507497 -0.195316797494888311215177623126 0.408078610897064208984375 +0.394110596179962135998664507497 0.195316797494888311215177623126 0.408078610897064208984375 +0.394182452559471152575554242503 -0.130466254055500024966463001874 -0.173489852249622350521818248126 +0.394182452559471152575554242503 0.130466254055500024966463001874 -0.173489852249622350521818248126 +0.3942975103855133056640625 0 0.637988984584808349609375 +0.394334989786148060186832253748 -0.711151188611984230725227007497 0.385698598623275767938167746252 +0.394334989786148060186832253748 0.711151188611984230725227007497 0.385698598623275767938167746252 +0.394373640418052728850994981258 -0.197022645175457006283536998126 -0.328863704204559348376335492503 +0.394373640418052728850994981258 0.197022645175457006283536998126 -0.328863704204559348376335492503 +0.394425594806671109271434261245 -0.139470604062080366647435880623 -0.43008899688720703125 +0.394425594806671109271434261245 0.139470604062080366647435880623 -0.43008899688720703125 +0.394443988800048828125 -0.599827194213867209704460492503 0.353017592430114768298210492503 +0.394443988800048828125 0.599827194213867209704460492503 0.353017592430114768298210492503 +0.394686007499694846423210492503 -0.0329288005828857407997212192186 -0.05602359771728515625 +0.394686007499694846423210492503 0.0329288005828857407997212192186 -0.05602359771728515625 +0.39473573863506317138671875 -0.488285908102989163470653011245 0.572940805554389975817741742503 +0.39473573863506317138671875 0.488285908102989163470653011245 0.572940805554389975817741742503 +0.3948444426059722900390625 -0.5016953647136688232421875 -0.122064153105020528622404185626 +0.3948444426059722900390625 0.5016953647136688232421875 -0.122064153105020528622404185626 +0.3949162065982818603515625 -0.322614610195159912109375 0.479542016983032171051348768742 +0.3949162065982818603515625 0.322614610195159912109375 0.479542016983032171051348768742 +0.394963549077510800433543636245 -0.496132233738899197650340511245 -0.566000553965568475867087272491 +0.394963549077510800433543636245 0.496132233738899197650340511245 -0.566000553965568475867087272491 +0.395024308562278769763054242503 -0.314628043770790122302116742503 -0.217864350974559806140007367503 +0.395024308562278769763054242503 0.314628043770790122302116742503 -0.217864350974559806140007367503 +0.395075607299804731908920985006 -0.0625728011131286704360476846887 0 +0.395075607299804731908920985006 0.0625728011131286704360476846887 0 +0.3951930105686187744140625 -0.574454009532928466796875 0.716816008090972900390625 +0.3951930105686187744140625 0.574454009532928466796875 0.716816008090972900390625 +0.395219004154205355572315738755 -0.0366112988442182582526918110943 0.380738064646720941741619981258 +0.395219004154205355572315738755 0.0366112988442182582526918110943 0.380738064646720941741619981258 +0.395300388336181640625 -0.396528589725494373663394753748 -0.215644794702529896124332253748 +0.395300388336181640625 0.396528589725494373663394753748 -0.215644794702529896124332253748 +0.3953309953212738037109375 -0.065827496349811553955078125 0.298965513706207275390625 +0.3953309953212738037109375 0.065827496349811553955078125 0.298965513706207275390625 +0.395376759767532337530582253748 -0.04967234842479228973388671875 -0.209069100022315990106136496252 +0.395376759767532337530582253748 0.04967234842479228973388671875 -0.209069100022315990106136496252 +0.395422485470771800653011496252 -0.212247207760810879806356865629 0.317949506640434309545639735006 +0.395422485470771800653011496252 0.212247207760810879806356865629 0.317949506640434309545639735006 +0.395452186465263422210369981258 -0.109501149505376829673686245314 0.366234013438224814684929242503 +0.395452186465263422210369981258 0.109501149505376829673686245314 0.366234013438224814684929242503 +0.395551189780235346038494981258 -0.369774889945983897820980246252 -0.0964661501348018785018112453145 +0.395551189780235346038494981258 0.369774889945983897820980246252 -0.0964661501348018785018112453145 +0.395557200908660866467414507497 -0.238406395912170387951789507497 -0.383010005950927712170539507497 +0.395557200908660866467414507497 0.238406395912170387951789507497 -0.383010005950927712170539507497 +0.39558733999729156494140625 -0.126142653822898881399439119377 0.173489396274089824334652121252 +0.39558733999729156494140625 0.126142653822898881399439119377 0.173489396274089824334652121252 +0.395663407444953929559261496252 -0.694652384519577004162727007497 -0.413410511612892161981136496252 +0.395663407444953929559261496252 0.694652384519577004162727007497 -0.413410511612892161981136496252 +0.395768092572689023089793636245 -0.840521058440208412854133257497 -0.1984768472611904144287109375 +0.395768092572689023089793636245 0.840521058440208412854133257497 -0.1984768472611904144287109375 +0.395807610452175107074168636245 0 0.752221113443374611584602007497 +0.395904397964477572369190738755 -0.0324564009904861477950888115629 0.0469720005989074720909037807814 +0.395904397964477572369190738755 0.0324564009904861477950888115629 0.0469720005989074720909037807814 +0.396030402183532748150440738755 0 -0.0562143981456756647308026231258 +0.396057212352752652240184261245 -0.548415714502334505908720529987 0.179941305518150324038728626874 +0.396057212352752652240184261245 0.548415714502334505908720529987 0.179941305518150324038728626874 +0.396126008033752474712940738755 -0.0479016005992889404296875 -0.02809999883174896240234375 +0.396126008033752474712940738755 0.0479016005992889404296875 -0.02809999883174896240234375 +0.39620549976825714111328125 -0.42835275828838348388671875 0.47120623290538787841796875 +0.39620549976825714111328125 0.42835275828838348388671875 0.47120623290538787841796875 +0.396314348280429828985660378748 -0.847154891490936257092414507497 0.1666233502328395843505859375 +0.396314348280429828985660378748 0.847154891490936257092414507497 0.1666233502328395843505859375 +0.396455597877502452508480246252 -0.0476307988166809123664613423443 0.0235431998968124410465119211722 +0.396455597877502452508480246252 0.0476307988166809123664613423443 0.0235431998968124410465119211722 +0.396578001976013172491519753748 -0.0576254010200500446647886576557 -0.573938411474227860864516514994 +0.396578001976013172491519753748 0.0576254010200500446647886576557 -0.573938411474227860864516514994 +0.396844600141048442498714621252 -0.705804324150085427014289507497 0.258562344312667835577457253748 +0.396844600141048442498714621252 0.705804324150085427014289507497 0.258562344312667835577457253748 +0.3970154821872711181640625 -0.58708722889423370361328125 -0.245371498167514801025390625 +0.3970154821872711181640625 0.58708722889423370361328125 -0.245371498167514801025390625 +0.397085742652416195941356136245 -0.669969460368156410901008257497 -0.544026064872741632605368522491 +0.397085742652416195941356136245 0.669969460368156410901008257497 -0.544026064872741632605368522491 +0.3970859944820404052734375 -0.22267949581146240234375 -0.20672850310802459716796875 +0.3970859944820404052734375 0.22267949581146240234375 -0.20672850310802459716796875 +0.397188861668109904901058371252 -0.6948920190334320068359375 -0.286122746765613555908203125 +0.397188861668109904901058371252 0.6948920190334320068359375 -0.286122746765613555908203125 +0.397214007377624522820980246252 0 0.0471275985240936293174662807814 +0.397228503227233908923210492503 -0.02959064953029155731201171875 0.209365202486515050717130748126 +0.397228503227233908923210492503 0.02959064953029155731201171875 0.209365202486515050717130748126 +0.3972789943218231201171875 -0.161261498928070068359375 0.2572239935398101806640625 +0.3972789943218231201171875 0.161261498928070068359375 0.2572239935398101806640625 +0.397401291131973255499332253748 -0.0185616005212068564678151716407 -0.210303452610969554559261496252 +0.397401291131973255499332253748 0.0185616005212068564678151716407 -0.210303452610969554559261496252 +0.397509193420410189556690738755 -0.0674998495727777564345828409387 -0.374072584509849592748764735006 +0.397509193420410189556690738755 0.0674998495727777564345828409387 -0.374072584509849592748764735006 +0.397533604502677939684929242503 -0.140788802504539484194978626874 -0.7950762212276458740234375 +0.397533604502677939684929242503 0.140788802504539484194978626874 -0.7950762212276458740234375 +0.39762179553508758544921875 -0.582665383815765380859375 -0.558925205469131491931022992503 +0.39762179553508758544921875 0.582665383815765380859375 -0.558925205469131491931022992503 +0.39762675762176513671875 -0.250602744519710540771484375 0.58445776998996734619140625 +0.39762675762176513671875 0.250602744519710540771484375 0.58445776998996734619140625 +0.397696208953857432977230246252 -0.436774206161499034539730246252 -0.105193796753883364591963811563 +0.397696208953857432977230246252 0.436774206161499034539730246252 -0.105193796753883364591963811563 +0.397928291559219327044871761245 0 -0.575892812013626076428352007497 +0.397979983687400840075554242503 -0.289146000146865866931022992503 -0.245968244969844845870809990629 +0.397979983687400840075554242503 0.289146000146865866931022992503 -0.245968244969844845870809990629 +0.398228994011879000591846988755 -0.256186451017856586798160378748 0.44528901576995849609375 +0.398228994011879000591846988755 0.256186451017856586798160378748 0.44528901576995849609375 +0.3982396423816680908203125 -0.199779295921325678042634876874 0.0631939508020877838134765625 +0.3982396423816680908203125 0.199779295921325678042634876874 0.0631939508020877838134765625 +0.39828778803348541259765625 -0.437610608339309703485042746252 -0.678132015466690107885483485006 +0.39828778803348541259765625 0.437610608339309703485042746252 -0.678132015466690107885483485006 +0.3984690010547637939453125 -0.4539850056171417236328125 -0.79694402217864990234375 +0.3984690010547637939453125 0.4539850056171417236328125 -0.79694402217864990234375 +0.398552541434764817651625889994 -0.860540392994880609656149772491 0.0559160517528653130958637973436 +0.398552541434764817651625889994 0.860540392994880609656149772491 0.0559160517528653130958637973436 +0.398669195175170909539730246252 -0.0165196001529693617393412807814 -0.028105199337005615234375 +0.398669195175170909539730246252 0.0165196001529693617393412807814 -0.028105199337005615234375 +0.398719012737274169921875 -0.264564990997314453125 -0.14501149952411651611328125 +0.398719012737274169921875 0.264564990997314453125 -0.14501149952411651611328125 +0.398731294274330183569077235006 -0.244947445392608653680355246252 -0.288988152146339438708366742503 +0.398731294274330183569077235006 0.244947445392608653680355246252 -0.288988152146339438708366742503 +0.398766803741455122533920985006 -0.03138320147991180419921875 0 +0.398766803741455122533920985006 0.03138320147991180419921875 0 +0.398869818449020363537727007497 -0.459393900632858231958266514994 -0.34620879590511322021484375 +0.398869818449020363537727007497 0.459393900632858231958266514994 -0.34620879590511322021484375 +0.398923063278198208880809261245 -0.859597030282020502234274772491 -0.06673749722540378570556640625 +0.398923063278198208880809261245 0.859597030282020502234274772491 -0.06673749722540378570556640625 +0.398974800109863303454460492503 -0.0162699997425079338764231096093 0.0235464006662368802169638115629 +0.398974800109863303454460492503 0.0162699997425079338764231096093 0.0235464006662368802169638115629 +0.399043339490890491827457253748 -0.201137848198413848876953125 -0.0529910992830991758872904995314 +0.399043339490890491827457253748 0.201137848198413848876953125 -0.0529910992830991758872904995314 +0.399101409316062916143863503748 -0.0776384979486465509612713731258 0.192847944796085357666015625 +0.399101409316062916143863503748 0.0776384979486465509612713731258 0.192847944796085357666015625 +0.399187582731246937139957253748 -0.546141380071639925830595529987 -0.179941305518150324038728626874 +0.399187582731246937139957253748 0.546141380071639925830595529987 -0.179941305518150324038728626874 +0.3993339836597442626953125 -0.510834339261055037084702235006 0.0456150475889444337318501254686 +0.3993339836597442626953125 0.510834339261055037084702235006 0.0456150475889444337318501254686 +0.399377536773681651727230246252 -0.345571038126945506707698996252 0.153552305698394786492855246252 +0.399377536773681651727230246252 0.345571038126945506707698996252 0.153552305698394786492855246252 +0.399590113759040854723991742503 -0.130770251899957667962581808752 -0.49570821225643157958984375 +0.399590113759040854723991742503 0.130770251899957667962581808752 -0.49570821225643157958984375 +0.399764236807823192254573996252 -0.144962105154991166555689119377 0.147222456336021434442073996252 +0.399764236807823192254573996252 0.144962105154991166555689119377 0.147222456336021434442073996252 +0.399904048442840609478565738755 -0.0433608479797840118408203125 0.510584098100662298058693977509 +0.399904048442840609478565738755 0.0433608479797840118408203125 0.510584098100662298058693977509 +0.39994049072265625 -0.08979649841785430908203125 -0.2863290011882781982421875 +0.39994049072265625 0.08979649841785430908203125 -0.2863290011882781982421875 +0.399950641393661543432358485006 -0.243575200438499478439169365629 0.288462910056114241186264735006 +0.399950641393661543432358485006 0.243575200438499478439169365629 0.288462910056114241186264735006 +0.39999759197235107421875 -0.158579194545745871813835492503 -0.674429607391357488488381477509 +0.39999759197235107421875 0.158579194545745871813835492503 -0.674429607391357488488381477509 +0.400000000000000022204460492503 0 0 +0.400024893879890486303452235006 -0.0226875009015202536155619839064 -0.376783013343811090667401231258 +0.400024893879890486303452235006 0.0226875009015202536155619839064 -0.376783013343811090667401231258 +0.400065600872039794921875 -0.290660995244979847296207253748 -0.339799797534942604748664507497 +0.400065600872039794921875 0.290660995244979847296207253748 -0.339799797534942604748664507497 +0.400106382369995128289730246252 -0.591105604171752951891960492503 -0.361260008811950694695980246252 +0.400106382369995128289730246252 0.591105604171752951891960492503 -0.361260008811950694695980246252 +0.4001210033893585205078125 -0.1695584952831268310546875 -0.247291505336761474609375 +0.4001210033893585205078125 0.1695584952831268310546875 -0.247291505336761474609375 +0.400130546092987093853565738755 -0.148770895600318919793636496252 -0.142347595095634466000333873126 +0.400130546092987093853565738755 0.148770895600318919793636496252 -0.142347595095634466000333873126 +0.40014196932315826416015625 -0.129076348990201955624357310626 0.495707553625106822625667746252 +0.40014196932315826416015625 0.129076348990201955624357310626 0.495707553625106822625667746252 +0.4002192020416259765625 -0.371368002891540538445980246252 0.584731197357177712170539507497 +0.4002192020416259765625 0.371368002891540538445980246252 0.584731197357177712170539507497 +0.400261569023132313116519753748 -0.5107147395610809326171875 -0.0382304005324840545654296875 +0.400261569023132313116519753748 0.5107147395610809326171875 -0.0382304005324840545654296875 +0.400416231155395541119190738755 -0.343933868408203113897769753748 -0.379310739040374766961605246252 +0.400416231155395541119190738755 0.343933868408203113897769753748 -0.379310739040374766961605246252 +0.400465008616447459832698996252 -0.429572018980979908331363503748 -0.278560099005699168817073996252 +0.400465008616447459832698996252 0.429572018980979908331363503748 -0.278560099005699168817073996252 +0.4004944860935211181640625 -0.2909750044345855712890625 0.070267997682094573974609375 +0.4004944860935211181640625 0.2909750044345855712890625 0.070267997682094573974609375 +0.400953608751296985968082253748 -0.204294151067733770199552623126 0 +0.400953608751296985968082253748 0.204294151067733770199552623126 0 +0.401077187061309792248664507497 -0.119001603126525870579577315311 0.430087816715240489617855246252 +0.401077187061309792248664507497 0.119001603126525870579577315311 0.430087816715240489617855246252 +0.401098394393920920641960492503 -0.561634397506713844983039507497 0.404581594467163130346420985006 +0.401098394393920920641960492503 0.561634397506713844983039507497 0.404581594467163130346420985006 +0.401104804873466502801448996252 -0.291415710747241984979183371252 -0.690428626537322953637954014994 +0.401104804873466502801448996252 0.291415710747241984979183371252 -0.690428626537322953637954014994 +0.401247900724411021844417746252 -0.0706122033298015594482421875 -0.802504813671112038342414507497 +0.401247900724411021844417746252 0.0706122033298015594482421875 -0.802504813671112038342414507497 +0.401260793209075927734375 -0.0399624019861221299598774692186 0.444289183616638161389289507497 +0.401260793209075927734375 0.0399624019861221299598774692186 0.444289183616638161389289507497 +0.401343762874603271484375 -0.099051296710968017578125 -0.177798150479793554135099498126 +0.401343762874603271484375 0.099051296710968017578125 -0.177798150479793554135099498126 +0.401388001441955577508480246252 -0.370603215694427501336605246252 -0.2480742037296295166015625 +0.401388001441955577508480246252 0.370603215694427501336605246252 -0.2480742037296295166015625 +0.401516008377075239721420985006 -0.357576799392700206414730246252 -0.592388010025024391858039507497 +0.401516008377075239721420985006 0.357576799392700206414730246252 -0.592388010025024391858039507497 +0.401633092761039756091179242503 -0.179894256591796891653345369377 0.0939608998596668243408203125 +0.401633092761039756091179242503 0.179894256591796891653345369377 0.0939608998596668243408203125 +0.4016920030117034912109375 -0.29184448719024658203125 -0.058909498155117034912109375 +0.4016920030117034912109375 0.29184448719024658203125 -0.058909498155117034912109375 +0.401924246549606345446647992503 -0.162715056538581842593416126874 0.120335403084754946623213811563 +0.401924246549606345446647992503 0.162715056538581842593416126874 0.120335403084754946623213811563 +0.401935592293739374358807481258 -0.373436799645423922466846988755 0.03863749839365482330322265625 +0.401935592293739374358807481258 0.373436799645423922466846988755 0.03863749839365482330322265625 +0.40206110477447509765625 -0.185861209034919733218416126874 0.542035895586013727331931022491 +0.40206110477447509765625 0.185861209034919733218416126874 0.542035895586013727331931022491 +0.402078005671501148565738503748 -0.771557676792144708777243522491 -0.381486736238002777099609375 +0.402078005671501148565738503748 0.771557676792144708777243522491 -0.381486736238002777099609375 +0.402343195676803544458266514994 -0.363478487730026222912727007497 0.442722707986831609527911268742 +0.402343195676803544458266514994 0.363478487730026222912727007497 0.442722707986831609527911268742 +0.402365505695343017578125 -0.24221800267696380615234375 -0.1715590059757232666015625 +0.402365505695343017578125 0.24221800267696380615234375 -0.1715590059757232666015625 +0.402489012479782137798878238755 0 -0.804986125230789162365852007497 +0.402489897608757030145198996252 -0.4731542766094207763671875 0.6512508094310760498046875 +0.402489897608757030145198996252 0.4731542766094207763671875 0.6512508094310760498046875 +0.402490210533142100945980246252 -0.09747420251369476318359375 -0.434166598320007313116519753748 +0.402490210533142100945980246252 0.09747420251369476318359375 -0.434166598320007313116519753748 +0.402491238713264476434261496252 0 0.201246745884418487548828125 +0.402491998672485362664730246252 -0.412913990020751964227230246252 0.165837603807449329718082253748 +0.402491998672485362664730246252 0.412913990020751964227230246252 0.165837603807449329718082253748 +0.402494403719902027471988503748 -0.7655831873416900634765625 -0.248757290840148942434595369377 +0.402494403719902027471988503748 0.7655831873416900634765625 -0.248757290840148942434595369377 +0.402521350979805014880241742503 -0.373401591181755088122429242503 -0.0323724510148167624046244839064 +0.402521350979805014880241742503 0.373401591181755088122429242503 -0.0323724510148167624046244839064 +0.4026815891265869140625 -0.488736009597778353619190738755 -0.488860797882080089227230246252 +0.4026815891265869140625 0.488736009597778353619190738755 -0.488860797882080089227230246252 +0.402710258960723876953125 -0.230740495026111602783203125 -0.589137732982635498046875 +0.402710258960723876953125 0.230740495026111602783203125 -0.589137732982635498046875 +0.40283501148223876953125 -0.619180023670196533203125 -0.674048006534576416015625 +0.40283501148223876953125 0.619180023670196533203125 -0.674048006534576416015625 +0.402875411510467518194644753748 -0.231710994243621820620759876874 0.379475390911102272717414507497 +0.402875411510467518194644753748 0.231710994243621820620759876874 0.379475390911102272717414507497 +0.402933055162429831774772992503 -0.479512158036231983526676003748 0.173818443715572368279964621252 +0.402933055162429831774772992503 0.479512158036231983526676003748 0.173818443715572368279964621252 +0.403008061647415150030582253748 -0.525697705149650529321547764994 -0.680975207686424277575554242503 +0.403008061647415150030582253748 0.525697705149650529321547764994 -0.680975207686424277575554242503 +0.403269293904304493292301003748 -0.6702515780925750732421875 0.44512559473514556884765625 +0.403269293904304493292301003748 0.6702515780925750732421875 0.44512559473514556884765625 +0.403305491805076632427784488755 -0.239533442258834855520532869377 -0.44996510446071624755859375 +0.403305491805076632427784488755 0.239533442258834855520532869377 -0.44996510446071624755859375 +0.403353989124298095703125 0 0.915044009685516357421875 +0.403482934832572970318409488755 -0.0798187021166086169143838446871 -0.503319045901298500744758257497 +0.403482934832572970318409488755 0.0798187021166086169143838446871 -0.503319045901298500744758257497 +0.403492963314056429791065738755 -0.165830844640731805972322376874 -0.110423702001571658048995061563 +0.403492963314056429791065738755 0.165830844640731805972322376874 -0.110423702001571658048995061563 +0.40368752181529998779296875 -0.56207549571990966796875 0.289149753749370574951171875 +0.40368752181529998779296875 0.56207549571990966796875 0.289149753749370574951171875 +0.403697746992111194952457253748 -0.789270472526550248559829014994 0.341437591612338997570930132497 +0.403697746992111194952457253748 0.789270472526550248559829014994 0.341437591612338997570930132497 +0.403720200061798095703125 -0.1824430525302886962890625 -0.0788953475654125269134198106258 +0.403720200061798095703125 0.1824430525302886962890625 -0.0788953475654125269134198106258 +0.404036593437194835320980246252 -0.321592697501182578356804242503 0.189295698702335368768245871252 +0.404036593437194835320980246252 0.321592697501182578356804242503 0.189295698702335368768245871252 +0.404056859016418412622329014994 -0.293560461699962582660106136245 -0.808121305704116776880141514994 +0.404056859016418412622329014994 0.293560461699962582660106136245 -0.808121305704116776880141514994 +0.404204110801219929083316628748 -0.63412405550479888916015625 0.580522197484970026160056022491 +0.404204110801219929083316628748 0.63412405550479888916015625 0.580522197484970026160056022491 +0.4042359888553619384765625 -0.0551914982497692108154296875 -0.289045512676239013671875 +0.4042359888553619384765625 0.0551914982497692108154296875 -0.289045512676239013671875 +0.404266512393951449322315738755 -0.776401180028915449682358485006 0.209211297333240509033203125 +0.404266512393951449322315738755 0.776401180028915449682358485006 0.209211297333240509033203125 +0.404367309808731090203792746252 -0.119763006269931790437333063437 0.795075309276580877160256477509 +0.404367309808731090203792746252 0.119763006269931790437333063437 0.795075309276580877160256477509 +0.40445025265216827392578125 -0.47593049705028533935546875 -0.41522325575351715087890625 +0.40445025265216827392578125 0.47593049705028533935546875 -0.41522325575351715087890625 +0.404509007930755615234375 -0.293891489505767822265625 0 +0.404509007930755615234375 0.293891489505767822265625 0 +0.404569578170776378289730246252 -0.0958024024963378961761151231258 -0.683479976654052800988381477509 +0.404569578170776378289730246252 0.0958024024963378961761151231258 -0.683479976654052800988381477509 +0.404588997364044189453125 -0.848025977611541748046875 -0.342287003993988037109375 +0.404588997364044189453125 0.848025977611541748046875 -0.342287003993988037109375 +0.404635488986968994140625 -0.098205499351024627685546875 0.2768140137195587158203125 +0.404635488986968994140625 0.098205499351024627685546875 0.2768140137195587158203125 +0.404647207260131813733039507497 -0.441006016731262218133480246252 0.0421187996864318819900674384371 +0.404647207260131813733039507497 0.441006016731262218133480246252 0.0421187996864318819900674384371 +0.4046694934368133544921875 -0.18301250040531158447265625 0.22967149317264556884765625 +0.4046694934368133544921875 0.18301250040531158447265625 0.22967149317264556884765625 +0.404695987701416015625 -0.0329939983785152435302734375 0.2917749881744384765625 +0.404695987701416015625 0.0329939983785152435302734375 0.2917749881744384765625 +0.404990303516387983862045985006 -0.349017336964607294280682481258 -0.129111952334642426931665681877 +0.404990303516387983862045985006 0.349017336964607294280682481258 -0.129111952334642426931665681877 +0.405111861228942882195980246252 -0.159458754956722265072599498126 -0.336091241240501437115284488755 +0.405111861228942882195980246252 0.159458754956722265072599498126 -0.336091241240501437115284488755 +0.405296409130096402240184261245 -0.343229985237121559826789507497 -0.2791559994220733642578125 +0.405296409130096402240184261245 0.343229985237121559826789507497 -0.2791559994220733642578125 +0.405383205413818392681690738755 -0.213121604919433604852230246252 0.655929613113403364721420985006 +0.405383205413818392681690738755 0.213121604919433604852230246252 0.655929613113403364721420985006 +0.405440998077392589227230246252 -0.440875804424285866467414507497 -0.0352967999875545487831196567186 +0.405440998077392589227230246252 0.440875804424285866467414507497 -0.0352967999875545487831196567186 +0.405695548653602633404346988755 -0.40016405284404754638671875 -0.312697444856166850701839621252 +0.405695548653602633404346988755 0.40016405284404754638671875 -0.312697444856166850701839621252 +0.405879104137420676501335492503 -0.145244550704956065789730246252 0.341564288735389742779346988755 +0.405879104137420676501335492503 0.145244550704956065789730246252 0.341564288735389742779346988755 +0.405995711684227045257244981258 0 0.371035510301589988024772992503 +0.406067053973674763067691628748 -0.0633735470473766326904296875 0.856500071287155106958266514994 +0.406067053973674763067691628748 0.0633735470473766326904296875 0.856500071287155106958266514994 +0.406134420633316006732371761245 -0.237442100048065179995759876874 -0.518339508771896384509147992503 +0.406134420633316006732371761245 0.237442100048065179995759876874 -0.518339508771896384509147992503 +0.40616476535797119140625 -0.46158899366855621337890625 0.42949426174163818359375 +0.40616476535797119140625 0.46158899366855621337890625 0.42949426174163818359375 +0.406194752454757723736378238755 -0.0958594478666782434661541856258 0.168275249004364024774105246252 +0.406194752454757723736378238755 0.0958594478666782434661541856258 0.168275249004364024774105246252 +0.406285542249679609838608485006 -0.26713995635509490966796875 0.257038094103336334228515625 +0.406285542249679609838608485006 0.26713995635509490966796875 0.257038094103336334228515625 +0.406350451707840010229233485006 -0.295229557156562849584702235006 0.224095298349857335873380748126 +0.406350451707840010229233485006 0.295229557156562849584702235006 0.224095298349857335873380748126 +0.406403383612632784771534488755 -0.295268355309963259625050113755 0.412496498227119479107471988755 +0.406403383612632784771534488755 0.295268355309963259625050113755 0.412496498227119479107471988755 +0.40644223988056182861328125 -0.0681961499154567774017010606258 -0.180703800916671764031917746252 +0.40644223988056182861328125 0.0681961499154567774017010606258 -0.180703800916671764031917746252 +0.406456035375595103875667746252 -0.0268456505611538893962819685157 -0.50653068721294403076171875 +0.406456035375595103875667746252 0.0268456505611538893962819685157 -0.50653068721294403076171875 +0.40646851062774658203125 -0.0206240005791187286376953125 -0.29044449329376220703125 +0.40646851062774658203125 0.0206240005791187286376953125 -0.29044449329376220703125 +0.406552183628082264288394753748 -0.048900000751018524169921875 -0.438547790050506591796875 +0.406552183628082264288394753748 0.048900000751018524169921875 -0.438547790050506591796875 +0.406625795364379871710269753748 -0.5217359066009521484375 0.229013398289680453201455634371 +0.406625795364379871710269753748 0.5217359066009521484375 0.229013398289680453201455634371 +0.406662762165069580078125 -0.35716424882411956787109375 -0.519191265106201171875 +0.406662762165069580078125 0.35716424882411956787109375 -0.519191265106201171875 +0.40672840178012847900390625 -0.571466889977455094751235264994 -0.480102109909057606085269753748 +0.40672840178012847900390625 0.571466889977455094751235264994 -0.480102109909057606085269753748 +0.406801998615264892578125 -0.19857899844646453857421875 0.89167201519012451171875 +0.406801998615264892578125 0.19857899844646453857421875 0.89167201519012451171875 +0.406853580474853537829460492503 -0.0330383986234664903114399692186 -0.688025617599487326891960492503 +0.406853580474853537829460492503 0.0330383986234664903114399692186 -0.688025617599487326891960492503 +0.406924206018447864874332253748 -0.0479218516498804078529438754686 0.186054298281669611148103626874 +0.406924206018447864874332253748 0.0479218516498804078529438754686 0.186054298281669611148103626874 +0.407036018371582042352230246252 -0.660139989852905340050881477509 0.196309602260589605160490123126 +0.407036018371582042352230246252 0.660139989852905340050881477509 0.196309602260589605160490123126 +0.407137489318847634045539507497 -0.352942115068435646740852007497 -0.446845006942748979028579014994 +0.407137489318847634045539507497 0.352942115068435646740852007497 -0.446845006942748979028579014994 +0.40720450878143310546875 -0.2703239917755126953125 0.105402000248432159423828125 +0.40720450878143310546875 0.2703239917755126953125 0.105402000248432159423828125 +0.407284480333328202661391514994 -0.562111204862594582287727007497 0.0902803957462310763260049384371 +0.407284480333328202661391514994 0.562111204862594582287727007497 0.0902803957462310763260049384371 +0.407318307459354378430305132497 -0.527200582623481683874899772491 0.527873805165290810315070757497 +0.407318307459354378430305132497 0.527200582623481683874899772491 0.527873805165290810315070757497 +0.407591994106769550665347878748 -0.1703111045062541961669921875 0.726197475194931052477897992503 +0.407591994106769550665347878748 0.1703111045062541961669921875 0.726197475194931052477897992503 +0.407908809185028087274105246252 0 -0.440011811256408702508480246252 +0.407914209365844715460269753748 -0.6551577150821685791015625 -0.463005012273788485455128238755 +0.407914209365844715460269753748 0.6551577150821685791015625 -0.463005012273788485455128238755 +0.40791594982147216796875 -0.480274581909179709704460492503 -0.159501551836729066335962556877 +0.40791594982147216796875 0.480274581909179709704460492503 -0.159501551836729066335962556877 +0.408039188385009798931690738755 -0.654016780853271528783920985006 -0.213930392265319846423210492503 +0.408039188385009798931690738755 0.654016780853271528783920985006 -0.213930392265319846423210492503 +0.408300900459289517474559261245 0 0.568586194515228182666533029987 +0.408348011970520008429019753748 -0.198360604047775251901342130623 -0.392307615280151344983039507497 +0.408348011970520008429019753748 0.198360604047775251901342130623 -0.392307615280151344983039507497 +0.408349344134330771716179242503 -0.186421050131320958920255748126 0.0315890997648239149619975307814 +0.408349344134330771716179242503 0.186421050131320958920255748126 0.0315890997648239149619975307814 +0.408440700173378024029346988755 -0.187016849219799052850277121252 -0.0264725999906659133220632185157 +0.408440700173378024029346988755 0.187016849219799052850277121252 -0.0264725999906659133220632185157 +0.408511388301849354132144753748 -0.440999503433704365118472878748 0.735621106624603227075454014994 +0.408511388301849354132144753748 0.440999503433704365118472878748 0.735621106624603227075454014994 +0.4085918962955474853515625 -0.8019053936004638671875 0 +0.4085918962955474853515625 0.8019053936004638671875 0 +0.40862341225147247314453125 -0.117696149647235875912443248126 -0.147222456336021434442073996252 +0.40862341225147247314453125 0.117696149647235875912443248126 -0.147222456336021434442073996252 +0.4087150096893310546875 -0.865871012210845947265625 0.2884779870510101318359375 +0.4087150096893310546875 0.865871012210845947265625 0.2884779870510101318359375 +0.408742582798004128186164507497 -0.561052101850509576941306022491 -0.0902803957462310763260049384371 +0.408742582798004128186164507497 0.561052101850509576941306022491 -0.0902803957462310763260049384371 +0.408899402618408180920539507497 -0.388102805614471413342414507497 0.205371594429016118832365123126 +0.408899402618408180920539507497 0.388102805614471413342414507497 0.205371594429016118832365123126 +0.408984589576721180304019753748 -0.41626739501953125 -0.13947419822216033935546875 +0.408984589576721180304019753748 0.41626739501953125 -0.13947419822216033935546875 +0.409135997295379638671875 -0.13663099706172943115234375 -0.252862989902496337890625 +0.409135997295379638671875 0.13663099706172943115234375 -0.252862989902496337890625 +0.4091556072235107421875 -0.266676592826843250616519753748 0.348532783985137928350894753748 +0.4091556072235107421875 0.266676592826843250616519753748 0.348532783985137928350894753748 +0.409210199117660544665397992503 -0.794553297758102461401108485006 0.1059830971062183380126953125 +0.409210199117660544665397992503 0.794553297758102461401108485006 0.1059830971062183380126953125 +0.409301345050334941522152121252 -0.673750814795494035180922764994 0.317854945361614238397152121252 +0.409301345050334941522152121252 0.673750814795494035180922764994 0.317854945361614238397152121252 +0.409372755885124173236278011245 -0.340820254385471310687449886245 0.66238628327846527099609375 +0.409372755885124173236278011245 0.340820254385471310687449886245 0.66238628327846527099609375 +0.409461498260498046875 -0.19085800647735595703125 -0.214276492595672607421875 +0.409461498260498046875 0.19085800647735595703125 -0.214276492595672607421875 +0.409508997201919577868522992503 -0.791408675909042402807358485006 -0.126388800144195567742855246252 +0.409508997201919577868522992503 0.791408675909042402807358485006 -0.126388800144195567742855246252 +0.409561192989349398541065738755 -0.03700844943523406982421875 -0.182729244232177734375 +0.409561192989349398541065738755 0.03700844943523406982421875 -0.182729244232177734375 +0.409709286689758311883480246252 -0.0729129500687122344970703125 0.359613642096519525725994981258 +0.409709286689758311883480246252 0.0729129500687122344970703125 0.359613642096519525725994981258 +0.40974199771881103515625 -0.272552490234375 -0.08846700191497802734375 +0.40974199771881103515625 0.272552490234375 -0.08846700191497802734375 +0.40976326167583465576171875 -0.61217401921749114990234375 0.1408432535827159881591796875 +0.40976326167583465576171875 0.61217401921749114990234375 0.1408432535827159881591796875 +0.40982101857662200927734375 -0.5576190054416656494140625 -0.28915049135684967041015625 +0.40982101857662200927734375 0.5576190054416656494140625 -0.28915049135684967041015625 +0.409893512725830078125 -0.20414149761199951171875 0.200782001018524169921875 +0.409893512725830078125 0.20414149761199951171875 0.200782001018524169921875 +0.4099510014057159423828125 -0.3996039927005767822265625 0.81991302967071533203125 +0.4099510014057159423828125 0.3996039927005767822265625 0.81991302967071533203125 +0.4100592136383056640625 -0.419285583496093794408920985006 0.544106388092041037829460492503 +0.4100592136383056640625 0.419285583496093794408920985006 0.544106388092041037829460492503 +0.410202407836914084704460492503 -0.555019998550415061266960492503 -0.404581594467163130346420985006 +0.410202407836914084704460492503 0.555019998550415061266960492503 -0.404581594467163130346420985006 +0.410953500866889975817741742503 0 -0.183350698649883264712556751874 +0.4109754860401153564453125 -0.24821950495243072509765625 0.13959300518035888671875 +0.4109754860401153564453125 0.24821950495243072509765625 0.13959300518035888671875 +0.411128997802734375 -0.52798502147197723388671875 0.338681258261203765869140625 +0.411128997802734375 0.52798502147197723388671875 0.338681258261203765869140625 +0.411158689856529258044304242503 -0.114829646050930031520032059689 0.142347152531147019827173494377 +0.411158689856529258044304242503 0.114829646050930031520032059689 0.142347152531147019827173494377 +0.4113090038299560546875 -0.12994499504566192626953125 0.2528620064258575439453125 +0.4113090038299560546875 0.12994499504566192626953125 0.2528620064258575439453125 +0.411333739757537841796875 -0.6091260015964508056640625 -0.149231247603893280029296875 +0.411333739757537841796875 0.6091260015964508056640625 -0.149231247603893280029296875 +0.411450213193893410412727007497 -0.566311901807785011975227007497 0 +0.411450213193893410412727007497 0.566311901807785011975227007497 0 +0.411523467302322421002003238755 -0.453072759509086597784488503748 0.218799747526645660400390625 +0.411523467302322421002003238755 0.453072759509086597784488503748 0.218799747526645660400390625 +0.4115310013294219970703125 -0.6222879886627197265625 0.665883004665374755859375 +0.4115310013294219970703125 0.6222879886627197265625 0.665883004665374755859375 +0.411733415722846995965511496252 -0.332281285524368308337272992503 0.377577841281890869140625 +0.411733415722846995965511496252 0.332281285524368308337272992503 0.377577841281890869140625 +0.411775645613670360223323996252 -0.299169002473354372906300113755 -0.404275307059288047106804242503 +0.411775645613670360223323996252 0.299169002473354372906300113755 -0.404275307059288047106804242503 +0.411790160834789253918586382497 -0.438697758316993702276676003748 -0.600394079089164756091179242503 +0.411790160834789253918586382497 0.438697758316993702276676003748 -0.600394079089164756091179242503 +0.412090003490447998046875 0 0.2831639945507049560546875 +0.412207505106925942151008257497 -0.663170865178108193127570757497 -0.335841812193393707275390625 +0.412207505106925942151008257497 0.663170865178108193127570757497 -0.335841812193393707275390625 +0.412245902419090315405014735006 -0.209943807125091558285490123126 -0.297451001405715953485042746252 +0.412245902419090315405014735006 0.209943807125091558285490123126 -0.297451001405715953485042746252 +0.412275731563568115234375 -0.1502745039761066436767578125 0.608232021331787109375 +0.412275731563568115234375 0.1502745039761066436767578125 0.608232021331787109375 +0.412313008308410666735710492503 -0.327190613746643099712940738755 -0.159512649476528184377954744377 +0.412313008308410666735710492503 0.327190613746643099712940738755 -0.159512649476528184377954744377 +0.412429499626159656866519753748 -0.395156282186508167608707253748 0.404664385318756092413394753748 +0.412429499626159656866519753748 0.395156282186508167608707253748 0.404664385318756092413394753748 +0.412435090541839632916065738755 -0.355616793036460931975994981258 0.07703244686126708984375 +0.412435090541839632916065738755 0.355616793036460931975994981258 0.07703244686126708984375 +0.412438595294952359271434261245 -0.520445114374160744397102007497 -0.221430301666259737869424384371 +0.412438595294952359271434261245 0.520445114374160744397102007497 -0.221430301666259737869424384371 +0.412451195716857899054019753748 -0.0931490048766136086166866903113 0.557859396934509255139289507497 +0.412451195716857899054019753748 0.0931490048766136086166866903113 0.557859396934509255139289507497 +0.412506759166717529296875 -0.299702994525432586669921875 0.5500147640705108642578125 +0.412506759166717529296875 0.299702994525432586669921875 0.5500147640705108642578125 +0.412673386931419361456363503748 -0.37403190135955810546875 -0.706965279579162664269631477509 +0.412673386931419361456363503748 0.37403190135955810546875 -0.706965279579162664269631477509 +0.412784993648529052734375 -0.360899412631988492083934261245 0.243639600276947004831029630623 +0.412784993648529052734375 0.360899412631988492083934261245 0.243639600276947004831029630623 +0.412785905599594105108707253748 -0.0182880001142621054222026089064 0.1782512962818145751953125 +0.412785905599594105108707253748 0.0182880001142621054222026089064 0.1782512962818145751953125 +0.412887990474700927734375 -0.22412799298763275146484375 0.171142995357513427734375 +0.412887990474700927734375 0.22412799298763275146484375 0.171142995357513427734375 +0.412913417816162087170539507497 -0.2999981939792633056640625 0.315441584587097145764289507497 +0.412913417816162087170539507497 0.2999981939792633056640625 0.315441584587097145764289507497 +0.412955188751220725329460492503 -0.300025606155395530016960492503 -0.615996789932251043175881477509 +0.412955188751220725329460492503 0.300025606155395530016960492503 -0.615996789932251043175881477509 +0.412978488206863392218082253748 -0.167284803092479700259431751874 0.0629644475877284975906533759371 +0.412978488206863392218082253748 0.167284803092479700259431751874 0.0629644475877284975906533759371 +0.413111300766468014789012386245 -0.2217689454555511474609375 -0.8262311518192291259765625 +0.413111300766468014789012386245 0.2217689454555511474609375 -0.8262311518192291259765625 +0.4131689965724945068359375 -0.3826780021190643310546875 -0.82634699344635009765625 +0.4131689965724945068359375 0.3826780021190643310546875 -0.82634699344635009765625 +0.413208460807800326275440738755 -0.135564744472503662109375 -0.115676097571849822998046875 +0.413208460807800326275440738755 0.135564744472503662109375 -0.115676097571849822998046875 +0.413735836744308527190838731258 -0.121062146872282033749357310626 -0.341564846038818370477230246252 +0.413735836744308527190838731258 0.121062146872282033749357310626 -0.341564846038818370477230246252 +0.413799297809600841180355246252 -0.168765302002429978811548494377 -0.0528074987232685089111328125 +0.413799297809600841180355246252 0.168765302002429978811548494377 -0.0528074987232685089111328125 +0.4138584136962890625 0 0.434420406818389892578125 +0.413908195495605479852230246252 -0.158489406108856201171875 0.404427015781402554583934261245 +0.413908195495605479852230246252 0.158489406108856201171875 0.404427015781402554583934261245 +0.413910904526710532458366742503 -0.300723293423652671130241742503 0.740434473752975441662727007497 +0.413910904526710532458366742503 0.300723293423652671130241742503 0.740434473752975441662727007497 +0.413928306102752663342414507497 -0.252240212261676755023387386245 0.817030420899391152111945757497 +0.413928306102752663342414507497 0.252240212261676755023387386245 0.817030420899391152111945757497 +0.413974559307098421978565738755 -0.178673544526100180895866742503 0.3149613440036773681640625 +0.413974559307098421978565738755 0.178673544526100180895866742503 0.3149613440036773681640625 +0.413976591825485240594417746252 -0.133200900256633752993806751874 0.115676097571849822998046875 +0.413976591825485240594417746252 0.133200900256633752993806751874 0.115676097571849822998046875 +0.414022262394428242071597878748 -0.720822942256927445825454014994 -0.177482548356056202276676003748 +0.414022262394428242071597878748 0.720822942256927445825454014994 -0.177482548356056202276676003748 +0.414037796854972883764389735006 -0.256108053028583526611328125 -0.255892999470233917236328125 +0.414037796854972883764389735006 0.256108053028583526611328125 -0.255892999470233917236328125 +0.414125990867614757195980246252 -0.33147060871124267578125 0.2804051935672760009765625 +0.414125990867614757195980246252 0.33147060871124267578125 0.2804051935672760009765625 +0.414145556092262279168636496252 -0.492657741904258761334034488755 0.0909486465156078421889773721887 +0.414145556092262279168636496252 0.492657741904258761334034488755 0.0909486465156078421889773721887 +0.414172565937042269634815738755 -0.356075486540794405865284488755 -0.0645870499312877766051599337516 +0.414172565937042269634815738755 0.356075486540794405865284488755 -0.0645870499312877766051599337516 +0.41420249640941619873046875 -0.4920022487640380859375 0.38583751022815704345703125 +0.41420249640941619873046875 0.4920022487640380859375 0.38583751022815704345703125 +0.4143784046173095703125 -0.727036470174789450915397992503 0.149024545401334751471011941248 +0.4143784046173095703125 0.727036470174789450915397992503 0.149024545401334751471011941248 +0.414487338066101107525440738755 -0.150609603524208074398771373126 0.0895382992923259707351846259371 +0.414487338066101107525440738755 0.150609603524208074398771373126 0.0895382992923259707351846259371 +0.414511990547180131372329014994 -0.491615599393844582287727007497 0.276574900746345497815070757497 +0.414511990547180131372329014994 0.491615599393844582287727007497 0.276574900746345497815070757497 +0.414659240841865561755241742503 -0.0663354009389877374847088731258 0.161732697486877435855134876874 +0.414659240841865561755241742503 0.0663354009389877374847088731258 0.161732697486877435855134876874 +0.414733791351318381579460492503 0 0.500495454668998696057258257497 +0.414800110459327686651676003748 -0.152641806006431596243189119377 -0.0845059521496295956710653740629 +0.414800110459327686651676003748 0.152641806006431596243189119377 -0.0845059521496295956710653740629 +0.41482673585414886474609375 -0.170861595869064325503572376874 0.470345830917358431744190738755 +0.41482673585414886474609375 0.170861595869064325503572376874 0.470345830917358431744190738755 +0.414858153462410006451221988755 -0.0862996526062488611419354356258 -0.151476305723190318719417746252 +0.414858153462410006451221988755 0.0862996526062488611419354356258 -0.151476305723190318719417746252 +0.415031236410140946802016514994 -0.673517715930938676294204014994 0.525949457287788413317741742503 +0.415031236410140946802016514994 0.673517715930938676294204014994 0.525949457287788413317741742503 +0.4153009951114654541015625 -0.2762080132961273193359375 0.03513149917125701904296875 +0.4153009951114654541015625 0.2762080132961273193359375 0.03513149917125701904296875 +0.415378987789154052734375 -0.065874002873897552490234375 0.27040851116180419921875 +0.415378987789154052734375 0.065874002873897552490234375 0.27040851116180419921875 +0.4154269993305206298828125 -0.2766844928264617919921875 -0.0294330008327960968017578125 +0.4154269993305206298828125 0.2766844928264617919921875 -0.0294330008327960968017578125 +0.415533006191253662109375 -0.25210249423980712890625 -0.117374502122402191162109375 +0.415533006191253662109375 0.25210249423980712890625 -0.117374502122402191162109375 +0.415667852759361244885383257497 -0.05672984756529331207275390625 0.739257729053497292248664507497 +0.415667852759361244885383257497 0.05672984756529331207275390625 0.739257729053497292248664507497 +0.415746447443962108270198996252 -0.17220599949359893798828125 0 +0.415746447443962108270198996252 0.17220599949359893798828125 0 +0.4160650074481964111328125 -0.21117900311946868896484375 -0.17970399558544158935546875 +0.4160650074481964111328125 0.21117900311946868896484375 -0.17970399558544158935546875 +0.416158783435821522100894753748 -0.253414803743362393451121761245 -0.350132417678833018914730246252 +0.416158783435821522100894753748 0.253414803743362393451121761245 -0.350132417678833018914730246252 +0.41617651283740997314453125 -0.179004751145839691162109375 -0.5977080166339874267578125 +0.41617651283740997314453125 0.179004751145839691162109375 -0.5977080166339874267578125 +0.4161925017833709716796875 -0.10304950177669525146484375 -0.257224500179290771484375 +0.4161925017833709716796875 0.10304950177669525146484375 -0.257224500179290771484375 +0.416242489218711819720653011245 -0.750659587979316644812399772491 0.407126298546791054455695757497 +0.416242489218711819720653011245 0.750659587979316644812399772491 0.407126298546791054455695757497 +0.416261279582977261615184261245 -0.416422998905181862561164507497 -0.378574711084365800317641514994 +0.416261279582977261615184261245 0.416422998905181862561164507497 -0.378574711084365800317641514994 +0.416366615891456626208366742503 -0.195815102756023401431306751874 -0.459124264121055614129573996252 +0.416366615891456626208366742503 0.195815102756023401431306751874 -0.459124264121055614129573996252 +0.416515308618545521124332253748 -0.739266240596771262438835492503 0.0500037999823689446876606723436 +0.416515308618545521124332253748 0.739266240596771262438835492503 0.0500037999823689446876606723436 +0.416546654701232921258480246252 -0.493123161792755171362045985006 -0.0762774981558322906494140625 +0.416546654701232921258480246252 0.493123161792755171362045985006 -0.0762774981558322906494140625 +0.4165979921817779541015625 -0.884759008884429931640625 -0.20892299711704254150390625 +0.4165979921817779541015625 0.884759008884429931640625 -0.20892299711704254150390625 +0.416816806793212923931690738755 -0.10681760311126708984375 0.67442798614501953125 +0.416816806793212923931690738755 0.10681760311126708984375 0.67442798614501953125 +0.417038059234619118420539507497 -0.738253924250602655554587272491 -0.0596682995557785006424111884371 +0.417038059234619118420539507497 0.738253924250602655554587272491 -0.0596682995557785006424111884371 +0.417060154676437366827457253748 -0.424771758913993824346988503748 0.261017240583896636962890625 +0.417060154676437366827457253748 0.424771758913993824346988503748 0.261017240583896636962890625 +0.4171729981899261474609375 -0.8917419910430908203125 0.17539300024509429931640625 +0.4171729981899261474609375 0.8917419910430908203125 0.17539300024509429931640625 +0.417182385921478271484375 -0.079675197601318359375 0.423805189132690440789730246252 +0.417182385921478271484375 0.079675197601318359375 0.423805189132690440789730246252 +0.417259508371353116107371761245 -0.232638001441955538650674384371 0.5116390883922576904296875 +0.417259508371353116107371761245 0.232638001441955538650674384371 0.5116390883922576904296875 +0.417421209812164295538394753748 -0.422681987285614013671875 0.08425860106945037841796875 +0.417421209812164295538394753748 0.422681987285614013671875 0.08425860106945037841796875 +0.417644707858562447277961382497 -0.733244183659553461218649772491 -0.436377762258052803723273882497 +0.417644707858562447277961382497 0.733244183659553461218649772491 -0.436377762258052803723273882497 +0.41772826015949249267578125 -0.6213352382183074951171875 0.0441120006144046783447265625 +0.41772826015949249267578125 0.6213352382183074951171875 0.0441120006144046783447265625 +0.417763501405715997893963731258 -0.303520265221595808569077235006 -0.189338594675064114669638115629 +0.417763501405715997893963731258 0.303520265221595808569077235006 -0.189338594675064114669638115629 +0.417814104259014107434211382497 -0.563413146138191156531149772491 0.480101248621940590588508257497 +0.417814104259014107434211382497 0.563413146138191156531149772491 0.480101248621940590588508257497 +0.417883792519569363665965511245 -0.233485640585422510318025501874 -0.70239408314228057861328125 +0.417883792519569363665965511245 0.233485640585422510318025501874 -0.70239408314228057861328125 +0.4179554879665374755859375 -0.517008608579635597912727007497 0.606643205881118752209602007497 +0.4179554879665374755859375 0.517008608579635597912727007497 0.606643205881118752209602007497 +0.4179849922657012939453125 -0.705231010913848876953125 -0.572659015655517578125 +0.4179849922657012939453125 0.705231010913848876953125 -0.572659015655517578125 +0.417999219894409190789730246252 -0.6821119785308837890625 0 +0.417999219894409190789730246252 0.6821119785308837890625 0 +0.418035811185836769787727007497 -0.303717398643493619037059261245 -0.472230517864227261615184261245 +0.418035811185836769787727007497 0.303717398643493619037059261245 -0.472230517864227261615184261245 +0.418115401268005337787059261245 -0.30377519130706787109375 -0.304795217514038097039730246252 +0.418115401268005337787059261245 0.30377519130706787109375 -0.304795217514038097039730246252 +0.4181902706623077392578125 -0.62036025524139404296875 -0.05263274721801280975341796875 +0.4181902706623077392578125 0.62036025524139404296875 -0.05263274721801280975341796875 +0.418196699023246798443409488755 -0.525316482782363869397102007497 -0.599294704198837346886818977509 +0.418196699023246798443409488755 0.525316482782363869397102007497 -0.599294704198837346886818977509 +0.418223834037780795025440738755 -0.357195863127708457263054242503 0 +0.418223834037780795025440738755 0.357195863127708457263054242503 0 +0.418315815925598133429019753748 -0.393767988681793190686164507497 -0.1730867922306060791015625 +0.418315815925598133429019753748 0.393767988681793190686164507497 -0.1730867922306060791015625 +0.418488183617591880114616742503 -0.0866157531738281222244424384371 0.489760035276412986071647992503 +0.418488183617591880114616742503 0.0866157531738281222244424384371 0.489760035276412986071647992503 +0.4185225069522857666015625 -0.30407099425792694091796875 -0.5430285036563873291015625 +0.4185225069522857666015625 0.30407099425792694091796875 -0.5430285036563873291015625 +0.4187476933002471923828125 -0.459631890058517400543536268742 0.321541509032249428479133257497 +0.4187476933002471923828125 0.459631890058517400543536268742 0.321541509032249428479133257497 +0.4187920093536376953125 -0.675128793716430752880341970013 0.093879997730255126953125 +0.4187920093536376953125 0.675128793716430752880341970013 0.093879997730255126953125 +0.419090411067009005474659488755 0 0.796469414234161399157585492503 +0.4190967381000518798828125 -0.637316393852233820105368522491 0.375081191956996906622379128748 +0.4190967381000518798828125 0.637316393852233820105368522491 0.375081191956996906622379128748 +0.419160795211792003289730246252 -0.672141599655151411596420985006 -0.111936795711517336759932561563 +0.419160795211792003289730246252 0.672141599655151411596420985006 -0.111936795711517336759932561563 +0.419195687770843539166065738755 -0.0552275989204645198493714985943 -0.154028695821762096063167746252 +0.419195687770843539166065738755 0.0552275989204645198493714985943 -0.154028695821762096063167746252 +0.419226014614105191302684261245 -0.156927591562271123715177623126 -0.399529194831848122326789507497 +0.419226014614105191302684261245 0.156927591562271123715177623126 -0.399529194831848122326789507497 +0.41939775645732879638671875 -0.05005574785172939300537109375 0.61975800991058349609375 +0.41939775645732879638671875 0.05005574785172939300537109375 0.61975800991058349609375 +0.419435083866119384765625 -0.189435389637947065866185880623 -0.527436012029647738330595529987 +0.419435083866119384765625 0.189435389637947065866185880623 -0.527436012029647738330595529987 +0.4194605052471160888671875 -0.15189950168132781982421875 0.225786507129669189453125 +0.4194605052471160888671875 0.15189950168132781982421875 0.225786507129669189453125 +0.419475603103637684210269753748 -0.423141002655029296875 -0.070655398070812225341796875 +0.419475603103637684210269753748 0.423141002655029296875 -0.070655398070812225341796875 +0.419482815265655561987045985006 -0.210986046493053441830411998126 0.286389937996864352154346988755 +0.419482815265655561987045985006 0.210986046493053441830411998126 0.286389937996864352154346988755 +0.4195289909839630126953125 -0.905831992626190185546875 0.0588590018451213836669921875 +0.4195289909839630126953125 0.905831992626190185546875 0.0588590018451213836669921875 +0.419539901614189136846988503748 -0.455402338504791281970085492503 -0.197724145650863658563167746252 +0.419539901614189136846988503748 0.455402338504791281970085492503 -0.197724145650863658563167746252 +0.419618804752826646264907139994 -0.148610402643680555856420255623 -0.83924712240695953369140625 +0.419618804752826646264907139994 0.148610402643680555856420255623 -0.83924712240695953369140625 +0.419699507951736494604233485006 -0.08335030078887939453125 -0.345550712943077098504573996252 +0.419699507951736494604233485006 0.08335030078887939453125 -0.345550712943077098504573996252 +0.419711895287036895751953125 -0.6150356829166412353515625 -0.589976605772972062524672764994 +0.419711895287036895751953125 0.6150356829166412353515625 -0.589976605772972062524672764994 +0.419788789749145518914730246252 -0.436082410812377974096420985006 -0.523076820373535200658920985006 +0.419788789749145518914730246252 0.436082410812377974096420985006 -0.523076820373535200658920985006 +0.419802010059356689453125 -0.1583864986896514892578125 -0.2206355035305023193359375 +0.419802010059356689453125 0.1583864986896514892578125 -0.2206355035305023193359375 +0.41980350017547607421875 -0.230130493640899658203125 -0.14423899352550506591796875 +0.41980350017547607421875 0.230130493640899658203125 -0.14423899352550506591796875 +0.419836285710334766729801003748 -0.360579031705856312139957253748 0.340910711884498618395866742503 +0.419836285710334766729801003748 0.360579031705856312139957253748 0.340910711884498618395866742503 +0.419855812191963218005241742503 -0.393730348348617587017628238755 0.301989358663558971063167746252 +0.419855812191963218005241742503 0.393730348348617587017628238755 0.301989358663558971063167746252 +0.41991901397705078125 -0.904838979244232177734375 -0.070249997079372406005859375 +0.41991901397705078125 0.904838979244232177734375 -0.070249997079372406005859375 +0.420027208328247081414730246252 -0.632088804244995139391960492503 0.253062391281127951891960492503 +0.420027208328247081414730246252 0.632088804244995139391960492503 0.253062391281127951891960492503 +0.420188400149345386846988503748 -0.747322225570678733141960492503 0.273771893978118907586605246252 +0.420188400149345386846988503748 0.747322225570678733141960492503 0.273771893978118907586605246252 +0.420295956730842579229801003748 -0.0843434974551200838943643134371 0.136885048449039453677400501874 +0.420295956730842579229801003748 0.0843434974551200838943643134371 0.136885048449039453677400501874 +0.420366096496582020147769753748 -0.424775409698486317022769753748 0.364496994018554676397769753748 +0.420366096496582020147769753748 0.424775409698486317022769753748 0.364496994018554676397769753748 +0.420414887368679046630859375 -0.461922308802604653088508257497 -0.715806016325950533740751779987 +0.420414887368679046630859375 0.461922308802604653088508257497 -0.715806016325950533740751779987 +0.42054449021816253662109375 -0.52546276152133941650390625 -0.330953992903232574462890625 +0.42054449021816253662109375 0.52546276152133941650390625 -0.330953992903232574462890625 +0.420552912354469288214176003748 -0.735768020153045654296875 -0.30295349657535552978515625 +0.420552912354469288214176003748 0.735768020153045654296875 -0.30295349657535552978515625 +0.420584011077880903783920985006 0 0.680521583557128995067841970013 +0.420805791020393393786491742503 -0.104603402316570281982421875 -0.120335403084754946623213811563 +0.420805791020393393786491742503 0.104603402316570281982421875 -0.120335403084754946623213811563 +0.420936083793640170025440738755 -0.358704450726509083136051003748 -0.341531452536582957879573996252 +0.420936083793640170025440738755 0.358704450726509083136051003748 -0.341531452536582957879573996252 +0.421104159951210033074886496252 -0.0364882484078407273719868442186 0.154402193427085887567073996252 +0.421104159951210033074886496252 0.0364882484078407273719868442186 0.154402193427085887567073996252 +0.421220257878303583343182481258 -0.334111797809600874487045985006 0.115942200273275383692883622189 +0.421220257878303583343182481258 0.334111797809600874487045985006 0.115942200273275383692883622189 +0.421257495880126953125 -0.0689750015735626220703125 -0.2603544890880584716796875 +0.421257495880126953125 0.0689750015735626220703125 -0.2603544890880584716796875 +0.421301656961441062243522992503 -0.2784605920314788818359375 -0.217864350974559806140007367503 +0.421301656961441062243522992503 0.2784605920314788818359375 -0.217864350974559806140007367503 +0.421471044421196039397869981258 -0.109111750125885018092297684689 0.336090159416198741570980246252 +0.421471044421196039397869981258 0.109111750125885018092297684689 0.336090159416198741570980246252 +0.4217054843902587890625 -0.4284345209598541259765625 -0.44845126569271087646484375 +0.4217054843902587890625 0.4284345209598541259765625 -0.44845126569271087646484375 +0.421777340769767750128238503748 -0.153643946349620835745142244377 0.0315796483308076886276083428129 +0.421777340769767750128238503748 0.153643946349620835745142244377 0.0315796483308076886276083428129 +0.421801033616066023412827235006 -0.0363230992108583491950746235943 0.351090309023857127801448996252 +0.421801033616066023412827235006 0.0363230992108583491950746235943 0.351090309023857127801448996252 +0.42186672985553741455078125 -0.1207522451877593994140625 -0.6082327365875244140625 +0.42186672985553741455078125 0.1207522451877593994140625 -0.6082327365875244140625 +0.421897047758102439196647992503 -0.154279804229736333676115123126 -0.0264672003686428070068359375 +0.421897047758102439196647992503 0.154279804229736333676115123126 -0.0264672003686428070068359375 +0.4220580160617828369140625 -0.540802514553070046154914507497 0.139281798899173719918920255623 +0.4220580160617828369140625 0.540802514553070046154914507497 0.139281798899173719918920255623 +0.422100010514259327276676003748 -0.0185625007376074811771271555472 -0.15487785637378692626953125 +0.422100010514259327276676003748 0.0185625007376074811771271555472 -0.15487785637378692626953125 +0.422141844034194968493522992503 -0.494263252615928683209034488755 0 +0.422141844034194968493522992503 0.494263252615928683209034488755 0 +0.422495099902153004034488503748 0 0.154912054538726806640625 +0.422619199752807650494190738755 -0.456909608840942393914730246252 0.5026199817657470703125 +0.422619199752807650494190738755 0.456909608840942393914730246252 0.5026199817657470703125 +0.42312450706958770751953125 -0.3456585109233856201171875 0.51379501819610595703125 +0.42312450706958770751953125 0.3456585109233856201171875 0.51379501819610595703125 +0.423240005970001220703125 -0.8121659755706787109375 -0.4015649855136871337890625 +0.423240005970001220703125 0.8121659755706787109375 -0.4015649855136871337890625 +0.4233295023441314697265625 -0.256686508655548095703125 0.0700294971466064453125 +0.4233295023441314697265625 0.256686508655548095703125 0.0700294971466064453125 +0.42337000370025634765625 -0.098007000982761383056640625 0.24729050695896148681640625 +0.42337000370025634765625 0.098007000982761383056640625 0.24729050695896148681640625 +0.423483180999755903783920985006 -0.626226377487182683800881477509 -0.26172959804534912109375 +0.423483180999755903783920985006 0.626226377487182683800881477509 -0.26172959804534912109375 +0.4235371053218841552734375 -0.492032790184020962787059261245 -0.261762896180152859759715511245 +0.4235371053218841552734375 0.492032790184020962787059261245 -0.261762896180152859759715511245 +0.423539450764656044690070757497 -0.07453510351479053497314453125 -0.847088414430618219519431022491 +0.423539450764656044690070757497 0.07453510351479053497314453125 -0.847088414430618219519431022491 +0.423589092493057262078792746252 -0.174224607646465329269247490629 -0.3044964969158172607421875 +0.423589092493057262078792746252 0.174224607646465329269247490629 -0.3044964969158172607421875 +0.423618236184120200427116742503 -0.0452325493097305367240501539072 -0.347852998971939109118522992503 +0.423618236184120200427116742503 0.0452325493097305367240501539072 -0.347852998971939109118522992503 +0.423854094743728648797542746252 -0.121780349314212804623380748126 -0.0895382992923259707351846259371 +0.423854094743728648797542746252 0.121780349314212804623380748126 -0.0895382992923259707351846259371 +0.423858582973480224609375 -0.1955561935901641845703125 0.376963806152343761102230246252 +0.423858582973480224609375 0.1955561935901641845703125 0.376963806152343761102230246252 +0.423906746506690967901676003748 -0.103003652393817909938000809689 0.110423252731561657991044000937 +0.423906746506690967901676003748 0.103003652393817909938000809689 0.110423252731561657991044000937 +0.4241352081298828125 -0.267309594154357899054019753748 0.623421621322631902550881477509 +0.4241352081298828125 0.267309594154357899054019753748 0.623421621322631902550881477509 +0.4241439998149871826171875 -0.032908499240875244140625 0.26271450519561767578125 +0.4241439998149871826171875 0.032908499240875244140625 0.26271450519561767578125 +0.4242145121097564697265625 -0.2580589950084686279296875 -0.058715499937534332275390625 +0.4242145121097564697265625 0.2580589950084686279296875 -0.058715499937534332275390625 +0.42421901226043701171875 -0.553366005420684814453125 -0.716816008090972900390625 +0.42421901226043701171875 0.553366005420684814453125 -0.716816008090972900390625 +0.424222657084465049059929242503 -0.138444752991199487857088001874 -0.0580369479954242692421040317186 +0.424222657084465049059929242503 0.138444752991199487857088001874 -0.0580369479954242692421040317186 +0.424264812469482388568309261245 -0.42426359653472900390625 0 +0.424264812469482388568309261245 0.42426359653472900390625 0 +0.4243060052394866943359375 -0.034570001065731048583984375 -0.2622390091419219970703125 +0.4243060052394866943359375 0.034570001065731048583984375 -0.2622390091419219970703125 +0.4243470132350921630859375 -0.58758826553821563720703125 0.192794255912303924560546875 +0.4243470132350921630859375 0.58758826553821563720703125 0.192794255912303924560546875 +0.424415737390518243987713731258 -0.336007645726203951763721988755 -0.0973137021064758439559128078145 +0.424415737390518243987713731258 0.336007645726203951763721988755 -0.0973137021064758439559128078145 +0.424579954147338900494190738755 -0.137344054877758026123046875 0.0580369479954242692421040317186 +0.424579954147338900494190738755 0.137344054877758026123046875 0.0580369479954242692421040317186 +0.424699205160140980108707253748 -0.308557811379432667120426003748 -0.731042075157165571752670985006 +0.424699205160140980108707253748 0.308557811379432667120426003748 -0.731042075157165571752670985006 +0.424849513173103321417301003748 0 -0.849707576632499628210837272491 +0.424850447475910164563117632497 -0.49944062530994415283203125 0.68743140995502471923828125 +0.424850447475910164563117632497 0.49944062530994415283203125 0.68743140995502471923828125 +0.424855203926563229632762386245 -0.80811558663845062255859375 -0.262577140331268277240184261245 +0.424855203926563229632762386245 0.80811558663845062255859375 -0.262577140331268277240184261245 +0.424905002117156982421875 -0.0617415010929107666015625 -0.61493401229381561279296875 +0.424905002117156982421875 0.0617415010929107666015625 -0.61493401229381561279296875 +0.42494499683380126953125 -0.830811023712158203125 0.3594079911708831787109375 +0.42494499683380126953125 0.830811023712158203125 0.3594079911708831787109375 +0.424997441470623016357421875 -0.168490394204854954107730691248 -0.716581457853317282946647992503 +0.424997441470623016357421875 0.168490394204854954107730691248 -0.716581457853317282946647992503 +0.425058144330978437963608485006 0 -0.349035498499870311395198996252 +0.425113031268119778705028011245 -0.628049704432487421179587272491 -0.383838759362697568011668636245 +0.425113031268119778705028011245 0.628049704432487421179587272491 -0.383838759362697568011668636245 +0.425217092037200927734375 -0.540287315845489501953125 -0.131453703343868244513004128748 +0.425217092037200927734375 0.540287315845489501953125 -0.131453703343868244513004128748 +0.42523290216922760009765625 -0.394578503072261776996043636245 0.621276897192001298364516514994 +0.42523290216922760009765625 0.394578503072261776996043636245 0.621276897192001298364516514994 +0.42530219256877899169921875 -0.120320101082324978913895563437 0.0845059521496295956710653740629 +0.42530219256877899169921875 0.120320101082324978913895563437 0.0845059521496295956710653740629 +0.425323009490966796875 -0.3090110123157501220703125 -0.85065400600433349609375 +0.425323009490966796875 0.3090110123157501220703125 -0.85065400600433349609375 +0.4253239929676055908203125 0 -0.262867987155914306640625 +0.4254620075225830078125 -0.173075497150421142578125 0.19755299389362335205078125 +0.4254620075225830078125 0.173075497150421142578125 0.19755299389362335205078125 +0.4254780113697052001953125 -0.667499005794525146484375 0.61107599735260009765625 +0.4254780113697052001953125 0.667499005794525146484375 0.61107599735260009765625 +0.425644183158874478412059261245 -0.369383382797241199835269753748 -0.205870807170867919921875 +0.425644183158874478412059261245 0.369383382797241199835269753748 -0.205870807170867919921875 +0.425673143565654721331981136245 -0.70748777687549591064453125 0.469854794442653656005859375 +0.425673143565654721331981136245 0.70748777687549591064453125 0.469854794442653656005859375 +0.426167044043540943487613503748 -0.596736547350883439477797764994 0.429867944121360756604133257497 +0.426167044043540943487613503748 0.596736547350883439477797764994 0.429867944121360756604133257497 +0.426245847344398520739616742503 -0.0731061011552810724456463731258 -0.124378202855587011166349498126 +0.426245847344398520739616742503 0.0731061011552810724456463731258 -0.124378202855587011166349498126 +0.4263209998607635498046875 -0.26124799251556396484375 0 +0.4263209998607635498046875 0.26124799251556396484375 0 +0.42635174095630645751953125 0 -0.61702801287174224853515625 +0.426403886079788241314503238755 -0.471443691849708579333366742503 0.1357212997972965240478515625 +0.426403886079788241314503238755 0.471443691849708579333366742503 0.1357212997972965240478515625 +0.426610758900642372815070757497 -0.379925349354743924212840511245 -0.629412260651588395532485264994 +0.426610758900642372815070757497 0.379925349354743924212840511245 -0.629412260651588395532485264994 +0.426633903384208701403679242503 -0.234922605752944962942407869377 0.255528900027275129858139735006 +0.426633903384208701403679242503 0.234922605752944962942407869377 0.255528900027275129858139735006 +0.426725763082504261358707253748 -0.819534578919410616748564279987 0.2208341471850872039794921875 +0.426725763082504261358707253748 0.819534578919410616748564279987 0.2208341471850872039794921875 +0.426832160353660561291633257497 -0.126416506618261342831388560626 0.839246159791946388928352007497 +0.426832160353660561291633257497 0.126416506618261342831388560626 0.839246159791946388928352007497 +0.426953145861625693591179242503 -0.211593197286128992251619251874 0.44208516180515289306640625 +0.426953145861625693591179242503 0.211593197286128992251619251874 0.44208516180515289306640625 +0.427146491408348094598323996252 -0.310338610410690329821647992503 0.1540648937225341796875 +0.427146491408348094598323996252 0.310338610410690329821647992503 0.1540648937225341796875 +0.427294394373893771099659488755 -0.151093154400587098562525056877 -0.4659297466278076171875 +0.427294394373893771099659488755 0.151093154400587098562525056877 -0.4659297466278076171875 +0.42736051976680755615234375 -0.49220775067806243896484375 -0.370937995612621307373046875 +0.42736051976680755615234375 0.49220775067806243896484375 -0.370937995612621307373046875 +0.427406841516494773181022992503 -0.0545138999819755540321430942186 0.129814195632934586965845369377 +0.427406841516494773181022992503 0.0545138999819755540321430942186 0.129814195632934586965845369377 +0.4274390041828155517578125 -0.06670899689197540283203125 0.90157902240753173828125 +0.4274390041828155517578125 0.06670899689197540283203125 0.90157902240753173828125 +0.427633202075958229748664507497 -0.401766586303710926397769753748 0.125353199243545515573217130623 +0.427633202075958229748664507497 0.401766586303710926397769753748 0.125353199243545515573217130623 +0.42770098149776458740234375 -0.58515147864818572998046875 -0.192794255912303924560546875 +0.42770098149776458740234375 0.58515147864818572998046875 -0.192794255912303924560546875 +0.427738010883331298828125 -0.17911200225353240966796875 -0.18697349727153778076171875 +0.427738010883331298828125 0.17911200225353240966796875 -0.18697349727153778076171875 +0.42784918844699859619140625 -0.519282010197639420923110264994 -0.519414597749710105212272992503 +0.42784918844699859619140625 0.519282010197639420923110264994 -0.519414597749710105212272992503 +0.42797608673572540283203125 -0.139055854082107549496427623126 0 +0.42797608673572540283203125 0.139055854082107549496427623126 0 +0.428016006946563720703125 -0.1150656044483184814453125 -0.404428195953369151727230246252 +0.428016006946563720703125 0.1150656044483184814453125 -0.404428195953369151727230246252 +0.428110101819038413317741742503 -0.221841956675052659475610994377 -0.264590145647525809557976117503 +0.428110101819038413317741742503 0.221841956675052659475610994377 -0.264590145647525809557976117503 +0.42824208736419677734375 -0.429572638869285594598323996252 -0.233615194261074077264339621252 +0.42824208736419677734375 0.429572638869285594598323996252 -0.233615194261074077264339621252 +0.428520300984382651598991742503 -0.258273595571517966540397992503 -0.414927506446838401110710492503 +0.428520300984382651598991742503 0.258273595571517966540397992503 -0.414927506446838401110710492503 +0.4285415112972259521484375 -0.235457003116607666015625 0.104461498558521270751953125 +0.4285415112972259521484375 0.235457003116607666015625 0.104461498558521270751953125 +0.4286355078220367431640625 -0.12366099655628204345703125 -0.22578699886798858642578125 +0.4286355078220367431640625 0.12366099655628204345703125 -0.22578699886798858642578125 +0.428861993551254261358707253748 -0.275893101096153225970653011245 0.479542016983032171051348768742 +0.428861993551254261358707253748 0.275893101096153225970653011245 0.479542016983032171051348768742 +0.429282009601593017578125 -0.19336350262165069580078125 0.168307006359100341796875 +0.429282009601593017578125 0.19336350262165069580078125 0.168307006359100341796875 +0.429557609558105513158920985006 -0.24612319469451904296875 -0.628413581848144553454460492503 +0.429557609558105513158920985006 0.24612319469451904296875 -0.628413581848144553454460492503 +0.429855176806449856830028011245 -0.101790052652359006013504938437 -0.726197475194931052477897992503 +0.429855176806449856830028011245 0.101790052652359006013504938437 -0.726197475194931052477897992503 +0.4300119876861572265625 -0.4642100036144256591796875 0.7743380069732666015625 +0.4300119876861572265625 0.4642100036144256591796875 0.7743380069732666015625 +0.430051982402801513671875 -0.550129288434982210986845529987 0.0491238974034786182731870951557 +0.430051982402801513671875 0.550129288434982210986845529987 0.0491238974034786182731870951557 +0.430128589272499139983807481258 -0.340581992268562339098991742503 0.038644649088382720947265625 +0.430128589272499139983807481258 0.340581992268562339098991742503 0.038644649088382720947265625 +0.430225789546966552734375 -0.214933794736862165963842130623 -0.358760404586791981085269753748 +0.430225789546966552734375 0.214933794736862165963842130623 -0.358760404586791981085269753748 +0.430262243747711214947315738755 -0.144462457299232488461271373126 0.310652634501457247662159488755 +0.430262243747711214947315738755 0.144462457299232488461271373126 0.310652634501457247662159488755 +0.430270662903785738873096988755 -0.0182889003306627266620676408593 0.13050945103168487548828125 +0.430270662903785738873096988755 0.0182889003306627266620676408593 0.13050945103168487548828125 +0.430327814817428544458266514994 -0.140829502046108223645148882497 -0.5338396131992340087890625 +0.430327814817428544458266514994 0.140829502046108223645148882497 -0.5338396131992340087890625 +0.430547413229942332879573996252 -0.03667500056326389312744140625 -0.125633248686790460757478626874 +0.430547413229942332879573996252 0.03667500056326389312744140625 -0.125633248686790460757478626874 +0.430576109886169400287059261245 -0.69155536592006683349609375 -0.488727512955665577276676003748 +0.430576109886169400287059261245 0.69155536592006683349609375 -0.488727512955665577276676003748 +0.430600023269653353619190738755 -0.599547195434570356908920985006 0.308426403999328635485710492503 +0.430600023269653353619190738755 0.599547195434570356908920985006 0.308426403999328635485710492503 +0.4306536018848419189453125 -0.605082589387893721166733485006 -0.508343410491943425988381477509 +0.4306536018848419189453125 0.605082589387893721166733485006 -0.508343410491943425988381477509 +0.430665898323059070929019753748 -0.046696297824382781982421875 0.549859797954559303967414507497 +0.430665898323059070929019753748 0.046696297824382781982421875 0.549859797954559303967414507497 +0.430668005347251914294304242503 -0.0905337005853652926345986884371 -0.0939608998596668243408203125 +0.430668005347251914294304242503 0.0905337005853652926345986884371 -0.0939608998596668243408203125 +0.430670353770256086889389735006 -0.340551209449768077508480246252 -0.0323763009160757120330487168758 +0.430670353770256086889389735006 0.340551209449768077508480246252 -0.0323763009160757120330487168758 +0.430678057670593306127670985006 0 0.342076909542083751336605246252 +0.430682003498077392578125 0 0.253993511199951171875 +0.430707758665084872173878238755 -0.284882399439811750951889735006 0.189295698702335368768245871252 +0.430707758665084872173878238755 0.284882399439811750951889735006 0.189295698702335368768245871252 +0.430719655752182017938167746252 -0.226441705226898187808259876874 0.696925213932991005627570757497 +0.430719655752182017938167746252 0.226441705226898187808259876874 0.696925213932991005627570757497 +0.430779755115509033203125 -0.199137009680271148681640625 0.58075274527072906494140625 +0.430779755115509033203125 0.199137009680271148681640625 0.58075274527072906494140625 +0.4308280050754547119140625 -0.23811049759387969970703125 -0.087696500122547149658203125 +0.4308280050754547119140625 0.23811049759387969970703125 -0.087696500122547149658203125 +0.430837559700012195929019753748 -0.473172056674957264288394753748 -0.113959946483373639192215875937 +0.430837559700012195929019753748 0.473172056674957264288394753748 -0.113959946483373639192215875937 +0.430902004241943359375 -0.2126609981060028076171875 0.13819800317287445068359375 +0.430902004241943359375 0.2126609981060028076171875 0.13819800317287445068359375 +0.4309221208095550537109375 -0.139005298912525165899722878748 0.533838903903961159436164507497 +0.4309221208095550537109375 0.139005298912525165899722878748 0.533838903903961159436164507497 +0.430935609340667713507144753748 -0.343230593204498279913394753748 -0.237670201063156116827457253748 +0.430935609340667713507144753748 0.343230593204498279913394753748 -0.237670201063156116827457253748 +0.431050920486450162005809261245 -0.550000488758087158203125 -0.041171200573444366455078125 +0.431050920486450162005809261245 0.550000488758087158203125 -0.041171200573444366455078125 +0.43108199536800384521484375 -0.38944123685359954833984375 0.47434575855731964111328125 +0.43108199536800384521484375 0.38944123685359954833984375 0.47434575855731964111328125 +0.431148004531860362664730246252 -0.0399395987391471876670756557814 0.415350615978240966796875 +0.431148004531860362664730246252 0.0399395987391471876670756557814 0.415350615978240966796875 +0.431217479705810535772769753748 -0.370390319824218716693309261245 -0.408488488197326637951789507497 +0.431217479705810535772769753748 0.370390319824218716693309261245 -0.408488488197326637951789507497 +0.431270009279251076428352007497 -0.462616020441055264544871761245 -0.299987798929214455334602007497 +0.431270009279251076428352007497 0.462616020441055264544871761245 -0.299987798929214455334602007497 +0.431278207898139975817741742503 -0.558212381601333684777443977509 0.558925205469131491931022992503 +0.431278207898139975817741742503 0.558212381601333684777443977509 0.558925205469131491931022992503 +0.43129144608974456787109375 -0.84645569324493408203125 0 +0.43129144608974456787109375 0.84645569324493408203125 0 +0.431369984149932828021434261245 -0.231542408466339111328125 0.346854007244110085217414507497 +0.431369984149932828021434261245 0.231542408466339111328125 0.346854007244110085217414507497 +0.431402385234832763671875 -0.11945579946041107177734375 0.399528014659881580694644753748 +0.431402385234832763671875 0.11945579946041107177734375 0.399528014659881580694644753748 +0.431413602828979503289730246252 -0.5076591968536376953125 -0.442904806137084994244190738755 +0.431413602828979503289730246252 0.5076591968536376953125 -0.442904806137084994244190738755 +0.431510388851165771484375 -0.403390789031982388568309261245 -0.10523580014705657958984375 +0.431510388851165771484375 0.403390789031982388568309261245 -0.10523580014705657958984375 +0.4315360486507415771484375 -0.123610500991344449128739313437 -0.0315796483308076886276083428129 +0.4315360486507415771484375 0.123610500991344449128739313437 -0.0315796483308076886276083428129 +0.431561350822448785979901231258 -0.257634851336479231420639735006 0.223336300253868108578458873126 +0.431561350822448785979901231258 0.257634851336479231420639735006 0.223336300253868108578458873126 +0.431567993760108958856136496252 -0.180329404771327972412109375 0.768914973735809303967414507497 +0.431567993760108958856136496252 0.180329404771327972412109375 0.768914973735809303967414507497 +0.43166385591030120849609375 -0.0722790017724037198165731865629 0.104604750126600268278487249063 +0.43166385591030120849609375 0.0722790017724037198165731865629 0.104604750126600268278487249063 +0.431944099068641618188735264994 -0.838695147633552462451689279987 0.11187104694545269012451171875 +0.431944099068641618188735264994 0.838695147633552462451689279987 0.11187104694545269012451171875 +0.431984701752662680895866742503 0 -0.126052652299404155389339621252 +0.432006293535232566149772992503 -0.123166354000568398219250809689 0.0264672003686428070068359375 +0.432006293535232566149772992503 0.123166354000568398219250809689 0.0264672003686428070068359375 +0.432259497046470597680922764994 -0.835375824570655733936064279987 -0.133410400152206426449552623126 +0.432259497046470597680922764994 0.835375824570655733936064279987 -0.133410400152206426449552623126 +0.432281929254531849249332253748 -0.0351032985374331446548623603121 -0.731027218699455194617087272491 +0.432281929254531849249332253748 0.0351032985374331446548623603121 -0.731027218699455194617087272491 +0.432435151934623729363948996252 -0.107403299957513811979659124063 -0.0629644475877284975906533759371 +0.432435151934623729363948996252 0.107403299957513811979659124063 -0.0629644475877284975906533759371 +0.432444086670875582623096988755 -0.314186397194862410131577235006 -0.129533249139785783254907869377 +0.432444086670875582623096988755 0.314186397194862410131577235006 -0.129533249139785783254907869377 +0.432475769519805874896434261245 -0.701398739218711875231804242503 0.208578952401876432931615568123 +0.432475769519805874896434261245 0.701398739218711875231804242503 0.208578952401876432931615568123 +0.432725012302398681640625 -0.11861349642276763916015625 0.220634996891021728515625 +0.432725012302398681640625 0.11861349642276763916015625 0.220634996891021728515625 +0.4328930079936981201171875 -0.1986725032329559326171875 -0.152095496654510498046875 +0.4328930079936981201171875 0.1986725032329559326171875 -0.152095496654510498046875 +0.433002340793609663549545985006 -0.136026547104120265618831808752 -0.310653191804885875360042746252 +0.433002340793609663549545985006 0.136026547104120265618831808752 -0.310653191804885875360042746252 +0.433242416381835970806690738755 -0.492361593246460005346420985006 0.458127212524414073602230246252 +0.433242416381835970806690738755 0.492361593246460005346420985006 0.458127212524414073602230246252 +0.433377894759178150518863503748 -0.713383215665817305151108485006 0.336552295088767994268863503748 +0.433377894759178150518863503748 0.713383215665817305151108485006 0.336552295088767994268863503748 +0.43340440094470977783203125 -0.314882744848728191033870871252 -0.368116447329521201403679242503 +0.43340440094470977783203125 0.314882744848728191033870871252 -0.368116447329521201403679242503 +0.433404505252838134765625 -0.065600000321865081787109375 0.24053500592708587646484375 +0.433404505252838134765625 0.065600000321865081787109375 0.24053500592708587646484375 +0.433453506231308016705128238755 -0.360868504643440279888721988755 0.7013501822948455810546875 +0.433453506231308016705128238755 0.360868504643440279888721988755 0.7013501822948455810546875 +0.433541637659072887078792746252 -0.694892829656600929943977007497 -0.227301041781902302130191628748 +0.433541637659072887078792746252 0.694892829656600929943977007497 -0.227301041781902302130191628748 +0.433646392822265636102230246252 -0.0736361995339393643478231865629 -0.408079183101654030529914507497 +0.433646392822265636102230246252 0.0736361995339393643478231865629 -0.408079183101654030529914507497 +0.433773612976074252056690738755 -0.380975198745727550164730246252 -0.553804016113281227795539507497 +0.433773612976074252056690738755 0.380975198745727550164730246252 -0.553804016113281227795539507497 +0.433854898810386691021534488755 -0.0896976023912429837325888115629 0.07889489829540252685546875 +0.433854898810386691021534488755 0.0896976023912429837325888115629 0.07889489829540252685546875 +0.433927905559539750512954014994 -0.516397708654403708727897992503 0.187189093232154823986945757497 +0.433927905559539750512954014994 0.516397708654403708727897992503 0.187189093232154823986945757497 +0.433969187736511219366519753748 -0.106687351316213610563643499063 0.0528074987232685089111328125 +0.433969187736511219366519753748 0.106687351316213610563643499063 0.0528074987232685089111328125 +0.434159982204437244757144753748 -0.315432000160217274054019753748 -0.2683289945125579833984375 +0.434159982204437244757144753748 0.315432000160217274054019753748 -0.2683289945125579833984375 +0.434328991174697864874332253748 -0.257959091663360562396434261245 -0.484577804803848211090411268742 +0.434328991174697864874332253748 0.257959091663360562396434261245 -0.484577804803848211090411268742 +0.434500285983085654528679242503 -0.128918403387069696597322376874 0.465928468108177173956363503748 +0.434500285983085654528679242503 0.128918403387069696597322376874 0.465928468108177173956363503748 +0.434520083665847767218082253748 -0.0859586022794246590317257528113 -0.542035895586013727331931022491 +0.434520083665847767218082253748 0.0859586022794246590317257528113 -0.542035895586013727331931022491 +0.43469919264316558837890625 -0.0432926021516323103477397182814 0.481313282251358054431022992503 +0.43469919264316558837890625 0.0432926021516323103477397182814 0.481313282251358054431022992503 +0.434837001562118519171207253748 -0.401486817002296436651676003748 -0.268747054040431976318359375 +0.434837001562118519171207253748 0.401486817002296436651676003748 -0.268747054040431976318359375 +0.4348540008068084716796875 -0.23344099521636962890625 -0.86971700191497802734375 +0.4348540008068084716796875 0.23344099521636962890625 -0.86971700191497802734375 +0.434864094853401217388721988755 -0.0724102459847927176772586221887 0.328862065076828025134147992503 +0.434864094853401217388721988755 0.0724102459847927176772586221887 0.328862065076828025134147992503 +0.4349569976329803466796875 -0.08979649841785430908203125 -0.22967199981212615966796875 +0.4349569976329803466796875 0.08979649841785430908203125 -0.22967199981212615966796875 +0.434979593753814675061164507497 -0.267215394973754849505809261245 -0.315259802341461170538394753748 +0.434979593753814675061164507497 0.267215394973754849505809261245 -0.315259802341461170538394753748 +0.43514402210712432861328125 -0.2544022500514984130859375 -0.55536375939846038818359375 +0.43514402210712432861328125 0.2544022500514984130859375 -0.55536375939846038818359375 +0.4352324903011322021484375 -0.2169415056705474853515625 -0.11622799932956695556640625 +0.4352324903011322021484375 0.2169415056705474853515625 -0.11622799932956695556640625 +0.435599686205387082171824886245 -0.394811451435089111328125 -0.746241128444671608654914507497 +0.435599686205387082171824886245 0.394811451435089111328125 -0.746241128444671608654914507497 +0.43567049503326416015625 -0.55900275707244873046875 0.245371498167514801025390625 +0.43567049503326416015625 0.55900275707244873046875 0.245371498167514801025390625 +0.435684585571289029193309261245 -0.376986587047576870990184261245 0.167511606216430658511384876874 +0.435684585571289029193309261245 0.376986587047576870990184261245 0.167511606216430658511384876874 +0.43568791449069976806640625 -0.445490932464599587170539507497 0.578113037347793512488181022491 +0.43568791449069976806640625 0.445490932464599587170539507497 0.578113037347793512488181022491 +0.4357140064239501953125 -0.2655160129070281982421875 0.860032021999359130859375 +0.4357140064239501953125 0.2655160129070281982421875 0.860032021999359130859375 +0.4357869923114776611328125 -0.2426024973392486572265625 0.0351249985396862030029296875 +0.4357869923114776611328125 0.2426024973392486572265625 0.0351249985396862030029296875 +0.435840058326721180304019753748 -0.589708748459815912390524772491 -0.429867944121360756604133257497 +0.435840058326721180304019753748 0.589708748459815912390524772491 -0.429867944121360756604133257497 +0.435919958353042591436832253748 -0.0362574007362127317954936245314 0.105636146664619443025223688437 +0.435919958353042591436832253748 0.0362574007362127317954936245314 0.105636146664619443025223688437 +0.435921013355255126953125 -0.2431184947490692138671875 -0.02942950092256069183349609375 +0.435921013355255126953125 0.2431184947490692138671875 -0.02942950092256069183349609375 +0.436013111472129843981804242503 -0.464503508806228648797542746252 -0.635711377859115578381477007497 +0.436013111472129843981804242503 0.464503508806228648797542746252 -0.635711377859115578381477007497 +0.436031061410903919561832253748 -0.1055970527231693267822265625 -0.470347148180007945672542746252 +0.436031061410903919561832253748 0.1055970527231693267822265625 -0.470347148180007945672542746252 +0.436032998561859119757144753748 -0.447323489189147938116519753748 0.179657404124736796990902121252 +0.436032998561859119757144753748 0.447323489189147938116519753748 0.179657404124736796990902121252 +0.436218738555908203125 -0.37815226614475250244140625 -0.47876250743865966796875 +0.436218738555908203125 0.37815226614475250244140625 -0.47876250743865966796875 +0.436309790611267067639289507497 -0.265718400478363037109375 0.314686810970306374279914507497 +0.436309790611267067639289507497 0.265718400478363037109375 0.314686810970306374279914507497 +0.43637622892856597900390625 -0.60226200520992279052734375 0.09672899544239044189453125 +0.43637622892856597900390625 0.60226200520992279052734375 0.09672899544239044189453125 +0.436390793323516823498664507497 -0.0247500009834766381000559221093 -0.411036014556884765625 +0.436390793323516823498664507497 0.0247500009834766381000559221093 -0.411036014556884765625 +0.436448362469673167840511496252 -0.251020243763923678326221988755 0.411098340153694175036491742503 +0.436448362469673167840511496252 0.251020243763923678326221988755 0.411098340153694175036491742503 +0.436455005407333396227897992503 -0.702180916070938132556022992503 -0.35559721291065216064453125 +0.436455005407333396227897992503 0.702180916070938132556022992503 -0.35559721291065216064453125 +0.436586406826972972528011496252 -0.0552595507353544276862855610943 -0.0940148994326591574965945596887 +0.436586406826972972528011496252 0.0552595507353544276862855610943 -0.0940148994326591574965945596887 +0.436794593930244501311932481258 -0.244947445392608653680355246252 -0.227401353418827084640341240629 +0.436794593930244501311932481258 0.244947445392608653680355246252 -0.227401353418827084640341240629 +0.43687498569488525390625 -0.7089660167694091796875 0.553631007671356201171875 +0.43687498569488525390625 0.7089660167694091796875 0.553631007671356201171875 +0.436902898550033558233707253748 -0.4309459030628204345703125 -0.336751094460487343518195757497 +0.436902898550033558233707253748 0.4309459030628204345703125 -0.336751094460487343518195757497 +0.436905954778194383081313389994 -0.317430143058300029412777121252 0.781569722294807367468649772491 +0.436905954778194383081313389994 0.317430143058300029412777121252 0.781569722294807367468649772491 +0.437006893754005476537827235006 -0.177387648820877097399772992503 0.28294639289379119873046875 +0.437006893754005476537827235006 0.177387648820877097399772992503 0.28294639289379119873046875 +0.437080812454223643914730246252 -0.652985620498657270971420985006 0.150232803821563731805355246252 +0.437080812454223643914730246252 0.652985620498657270971420985006 0.150232803821563731805355246252 +0.437142419815063520971420985006 -0.594793605804443403783920985006 -0.308427190780639681744190738755 +0.437142419815063520971420985006 0.594793605804443403783920985006 -0.308427190780639681744190738755 +0.4373419582843780517578125 0 0.105980850756168365478515625 +0.437465250492095947265625 0 0.6091994941234588623046875 +0.437566941976547274517628238755 -0.105048897117376333065763560626 0 +0.437566941976547274517628238755 0.105048897117376333065763560626 0 +0.437665182352066028936832253748 -0.317981305718421924932926003748 0.444226998090744007452457253748 +0.437665182352066028936832253748 0.317981305718421924932926003748 0.444226998090744007452457253748 +0.437721884250640846936164507497 -0.0289107006043195710609516879686 -0.5454945862293243408203125 +0.437721884250640846936164507497 0.0289107006043195710609516879686 -0.5454945862293243408203125 +0.4379384815692901611328125 -0.60112725198268890380859375 -0.09672899544239044189453125 +0.4379384815692901611328125 0.60112725198268890380859375 -0.09672899544239044189453125 +0.4379805028438568115234375 -0.14496250450611114501953125 -0.19276650249958038330078125 +0.4379805028438568115234375 0.14496250450611114501953125 -0.19276650249958038330078125 +0.438149988651275634765625 -0.790167987346649169921875 0.428553998470306396484375 +0.438149988651275634765625 0.790167987346649169921875 0.428553998470306396484375 +0.438367807865142844470085492503 -0.477756518125534046514957253748 0.0456286996603012112716513115629 +0.438367807865142844470085492503 0.477756518125534046514957253748 0.0456286996603012112716513115629 +0.438376513123512279168636496252 -0.763224291801452681127670985006 -0.187922698259353648797542746252 +0.438376513123512279168636496252 0.763224291801452681127670985006 -0.187922698259353648797542746252 +0.438475191593170166015625 -0.407385599613189708367855246252 0.042149998247623443603515625 +0.438475191593170166015625 0.407385599613189708367855246252 0.042149998247623443603515625 +0.43853759765625 -0.5631840229034423828125 0.361260008811950694695980246252 +0.43853759765625 0.5631840229034423828125 0.361260008811950694695980246252 +0.438590914011001642425213731258 -0.291021490097045920641960492503 -0.159512649476528184377954744377 +0.438590914011001642425213731258 0.291021490097045920641960492503 -0.159512649476528184377954744377 +0.438753604888916015625 -0.769803321361541725842414507497 0.157790695130825053826839621252 +0.438753604888916015625 0.769803321361541725842414507497 0.157790695130825053826839621252 +0.43875598907470703125 -0.649734401702880881579460492503 -0.159179997444152843133480246252 +0.43875598907470703125 0.649734401702880881579460492503 -0.159179997444152843133480246252 +0.438764888048171985968082253748 -0.318777206540107715948551003748 -0.654496589303016684802116742503 +0.438764888048171985968082253748 0.318777206540107715948551003748 -0.654496589303016684802116742503 +0.439071109890937838482471988755 -0.371832484006881736071647992503 -0.302418999373912811279296875 +0.439071109890937838482471988755 0.371832484006881736071647992503 -0.302418999373912811279296875 +0.439114201068878162725894753748 -0.407347190380096424444644753748 -0.0353154011070728260368589701557 +0.439114201068878162725894753748 0.407347190380096424444644753748 -0.0353154011070728260368589701557 +0.439227747917175281866519753748 -0.477615454792976401598991742503 -0.0382381999865174307395854214064 +0.439227747917175281866519753748 0.477615454792976401598991742503 -0.0382381999865174307395854214064 +0.439294099807739202301348768742 -0.517218780517578080591079014994 -0.171770901978015894107088001874 +0.439294099807739202301348768742 0.517218780517578080591079014994 -0.171770901978015894107088001874 +0.439307510852813720703125 -0.0551914982497692108154296875 -0.2322990000247955322265625 +0.439307510852813720703125 0.0551914982497692108154296875 -0.2322990000247955322265625 +0.439495208859443653448551003748 -0.0185854503884911557987091867972 -0.094861350953578948974609375 +0.439495208859443653448551003748 0.0185854503884911557987091867972 -0.094861350953578948974609375 +0.4395414888858795166015625 -0.1401585042476654052734375 0.19276599586009979248046875 +0.4395414888858795166015625 0.1401585042476654052734375 0.19276599586009979248046875 +0.439610409736633289679019753748 -0.0724518030881881741622763115629 -0.0631939508020877838134765625 +0.439610409736633289679019753748 0.0724518030881881741622763115629 -0.0631939508020877838134765625 +0.4396260082721710205078125 -0.771835982799530029296875 -0.4593450129032135009765625 +0.4396260082721710205078125 0.771835982799530029296875 -0.4593450129032135009765625 +0.43965496122837066650390625 -0.0545359510928392424156108120314 0.0789264008402824485122195596887 +0.43965496122837066650390625 0.0545359510928392424156108120314 0.0789264008402824485122195596887 +0.439760780334472689556690738755 -0.160292804241180419921875 0.64878082275390625 +0.439760780334472689556690738755 0.160292804241180419921875 0.64878082275390625 +0.439934539794921919408920985006 -0.0987761482596397483169070596887 -0.314961901307106051373096988755 +0.439934539794921919408920985006 0.0987761482596397483169070596887 -0.314961901307106051373096988755 +0.439937987923622153552116742503 -0.0892007969319820459563885606258 -0.0315890997648239149619975307814 +0.439937987923622153552116742503 0.0892007969319820459563885606258 -0.0315890997648239149619975307814 +0.44000720977783203125 -0.31968319416046142578125 0.586682415008544899670539507497 +0.44000720977783203125 0.31968319416046142578125 0.586682415008544899670539507497 +0.440118902921676657946647992503 -0.0600668974220752716064453125 0.782743477821350119860710492503 +0.440118902921676657946647992503 0.0600668974220752716064453125 0.782743477821350119860710492503 +0.440133103728294394763054242503 -0.186514344811439525262386496252 -0.272020655870437666479233485006 +0.440133103728294394763054242503 0.186514344811439525262386496252 -0.272020655870437666479233485006 +0.440361911058425925524772992503 -0.08877240121364593505859375 0.0264725999906659133220632185157 +0.440361911058425925524772992503 0.08877240121364593505859375 0.0264725999906659133220632185157 +0.440431532263755809442073996252 -0.05297500081360340118408203125 -0.47509343922138214111328125 +0.440431532263755809442073996252 0.05297500081360340118408203125 -0.47509343922138214111328125 +0.440543934702873285491619981258 -0.320072504878044172826889735006 0.0772947974503040424743005587516 +0.440543934702873285491619981258 0.320072504878044172826889735006 0.0772947974503040424743005587516 +0.440767192840576138568309261245 -0.350828397274017322882144753748 0.206504398584365839175447376874 +0.440767192840576138568309261245 0.350828397274017322882144753748 0.206504398584365839175447376874 +0.44083951413631439208984375 -0.60676275193691253662109375 0 +0.44083951413631439208984375 0.60676275193691253662109375 0 +0.441016209125518809930355246252 -0.782752490043640114514289507497 0.0529451999813318266441264370314 +0.441016209125518809930355246252 0.782752490043640114514289507497 0.0529451999813318266441264370314 +0.441058936715126026495426003748 -0.0718249507248401725112429971887 0.0529910992830991758872904995314 +0.441058936715126026495426003748 0.0718249507248401725112429971887 0.0529910992830991758872904995314 +0.44117523729801177978515625 -0.545731309056281976843649772491 0.640345606207847528601462272491 +0.44117523729801177978515625 0.545731309056281976843649772491 0.640345606207847528601462272491 +0.4413650035858154296875 -0.0328784994781017303466796875 0.23262800276279449462890625 +0.4413650035858154296875 0.0328784994781017303466796875 0.23262800276279449462890625 +0.441429848968982685430972878748 -0.554500731825828485632712272491 -0.632588854432105995861945757497 +0.441429848968982685430972878748 0.554500731825828485632712272491 -0.632588854432105995861945757497 +0.441556990146636962890625 -0.0206240005791187286376953125 -0.2336705029010772705078125 +0.441556990146636962890625 0.0206240005791187286376953125 -0.2336705029010772705078125 +0.441569709777832053454460492503 -0.781680625677108831261818977509 -0.0631781995296478299239950615629 +0.441569709777832053454460492503 0.781680625677108831261818977509 -0.0631781995296478299239950615629 +0.4417040050029754638671875 -0.1564320027828216552734375 -0.883418023586273193359375 +0.4417040050029754638671875 0.1564320027828216552734375 -0.883418023586273193359375 +0.4418019950389862060546875 -0.64740598201751708984375 -0.621028006076812744140625 +0.4418019950389862060546875 0.64740598201751708984375 -0.621028006076812744140625 +0.441807603836059548108039507497 -0.380746185779571533203125 -0.140849402546882634945646373126 +0.441807603836059548108039507497 0.380746185779571533203125 -0.140849402546882634945646373126 +0.441815996170043967516960492503 -0.524802398681640691613381477509 0.411560010910034190789730246252 +0.441815996170043967516960492503 0.524802398681640691613381477509 0.411560010910034190789730246252 +0.441861203312873873638721988755 -0.321028935909271284643295985006 -0.0648004479706287411788778740629 +0.441861203312873873638721988755 0.321028935909271284643295985006 -0.0648004479706287411788778740629 +0.441888749599456787109375 -0.42338173091411590576171875 0.4335689842700958251953125 +0.441888749599456787109375 0.42338173091411590576171875 0.4335689842700958251953125 +0.4418984949588775634765625 -0.55761976540088653564453125 -0.2372467517852783203125 +0.4418984949588775634765625 0.55761976540088653564453125 -0.2372467517852783203125 +0.441901209950447071417301003748 0 -0.476679462194442737921207253748 +0.441911995410919189453125 -0.0998025052249431610107421875 0.597706496715545654296875 +0.441911995410919189453125 0.0998025052249431610107421875 0.597706496715545654296875 +0.441940212249755826068309261245 -0.173955005407333357370092130623 -0.366644990444183360711605246252 +0.441940212249755826068309261245 0.173955005407333357370092130623 -0.366644990444183360711605246252 +0.442373211681842792852847878748 0 0.840717715024948075708266514994 +0.442377012968063365594417746252 -0.214890654385089890920923494377 -0.424999916553497336657585492503 +0.442377012968063365594417746252 0.214890654385089890920923494377 -0.424999916553497336657585492503 +0.442391404509544394763054242503 -0.596555095911026067589943977509 0.508342498540878318102897992503 +0.442391404509544394763054242503 0.596555095911026067589943977509 0.508342498540878318102897992503 +0.442465192079544100689503238755 -0.247220090031623845883146373126 -0.7437113821506500244140625 +0.442465192079544100689503238755 0.247220090031623845883146373126 -0.7437113821506500244140625 +0.442488491535186767578125 -0.2219769954681396484375 0.070215500891208648681640625 +0.442488491535186767578125 0.2219769954681396484375 0.070215500891208648681640625 +0.442521893978118918688835492503 -0.0183046499267220490192453752343 0.0796198524534702384292117471887 +0.442521893978118918688835492503 0.0183046499267220490192453752343 0.0796198524534702384292117471887 +0.4425419867038726806640625 -0.486234009265899658203125 -0.753480017185211181640625 +0.4425419867038726806640625 0.486234009265899658203125 -0.753480017185211181640625 +0.442602056264877363744858485006 -0.266439802944660186767578125 -0.188714906573295621017294365629 +0.442602056264877363744858485006 0.266439802944660186767578125 -0.188714906573295621017294365629 +0.442777204513549793585269753748 -0.158448600769042963198884876874 0.372615587711334239617855246252 +0.442777204513549793585269753748 0.158448600769042963198884876874 0.372615587711334239617855246252 +0.442867857217788707391292746252 -0.113493703305721282958984375 0.716579735279083251953125 +0.442867857217788707391292746252 0.113493703305721282958984375 0.716579735279083251953125 +0.442904412746429443359375 0 0.404766011238098133429019753748 +0.442974352836608908923210492503 -0.420444706082344077380241742503 0.222485893964767450503572376874 +0.442974352836608908923210492503 0.420444706082344077380241742503 0.222485893964767450503572376874 +0.443066638708114635125667746252 -0.4509563446044921875 -0.1510970480740070343017578125 +0.443066638708114635125667746252 0.4509563446044921875 -0.1510970480740070343017578125 +0.443179118633270252569644753748 -0.487924510240554776263621761245 0.235630497336387606521768134371 +0.443179118633270252569644753748 0.487924510240554776263621761245 0.235630497336387606521768134371 +0.443220591545104958264289507497 -0.291425406932830810546875 0.2804051935672760009765625 +0.443220591545104958264289507497 0.291425406932830810546875 0.2804051935672760009765625 +0.443251907825469970703125 -0.288899642229080211297542746252 0.377577182650566112176448996252 +0.443251907825469970703125 0.288899642229080211297542746252 0.377577182650566112176448996252 +0.443291401863098122326789507497 -0.322068607807159401623664507497 0.244467598199844343698217130623 +0.443291401863098122326789507497 0.322068607807159401623664507497 0.244467598199844343698217130623 +0.443381488323211669921875 -0.22348649799823760986328125 -0.0588789992034435272216796875 +0.443381488323211669921875 0.22348649799823760986328125 -0.0588789992034435272216796875 +0.443405216932296730725227007497 -0.357841384410858109887954014994 0.40662229061126708984375 +0.443405216932296730725227007497 0.357841384410858109887954014994 0.40662229061126708984375 +0.4434460103511810302734375 -0.0862649977207183837890625 0.21427549421787261962890625 +0.4434460103511810302734375 0.0862649977207183837890625 0.21427549421787261962890625 +0.443450695276260353772102007497 -0.322182002663612354620426003748 -0.435373407602310136255141514994 +0.443450695276260353772102007497 0.322182002663612354620426003748 -0.435373407602310136255141514994 +0.443532200157642331195262386245 -0.788840126991271928247329014994 0.288981443643569924084602007497 +0.443532200157642331195262386245 0.788840126991271928247329014994 0.288981443643569924084602007497 +0.443749487400054931640625 -0.674805593490600652550881477509 0.397144791483879100457698996252 +0.443749487400054931640625 0.674805593490600652550881477509 0.397144791483879100457698996252 +0.443916963040828671527293636245 -0.7766440212726593017578125 -0.319784246385097503662109375 +0.443916963040828671527293636245 0.7766440212726593017578125 -0.319784246385097503662109375 +0.443921613693237349096420985006 -0.190938401222229020559595369377 -0.637555217742920010692841970013 +0.443921613693237349096420985006 0.190938401222229020559595369377 -0.637555217742920010692841970013 +0.444021758437156688348323996252 -0.0370449006557464627364950615629 -0.06302654743194580078125 +0.444021758437156688348323996252 0.0370449006557464627364950615629 -0.06302654743194580078125 +0.444119989871978759765625 -0.52673099935054779052734375 0.296330250799655914306640625 +0.444119989871978759765625 0.52673099935054779052734375 0.296330250799655914306640625 +0.444124171137809720111278011245 -0.72474397718906402587890625 0 +0.444124171137809720111278011245 0.72474397718906402587890625 0 +0.4441824853420257568359375 -0.1610690057277679443359375 0.1635805070400238037109375 +0.4441824853420257568359375 0.1610690057277679443359375 0.1635805070400238037109375 +0.444460058212280295641960492503 -0.0703944012522697420974893134371 0 +0.444460058212280295641960492503 0.0703944012522697420974893134371 0 +0.44458949565887451171875 -0.1653009951114654541015625 -0.1581639945507049560546875 +0.44458949565887451171875 0.1653009951114654541015625 -0.1581639945507049560546875 +0.444659587740898143426448996252 -0.0607106480747461388358665601572 -0.317950063943862937243522992503 +0.444659587740898143426448996252 0.0607106480747461388358665601572 -0.317950063943862937243522992503 +0.444959908723831232268963731258 -0.323280638456344637798878238755 0 +0.444959908723831232268963731258 0.323280638456344637798878238755 0 +0.44496650993824005126953125 -0.717324343323707536157485264994 0.0997474975883960723876953125 +0.44496650993824005126953125 0.717324343323707536157485264994 0.0997474975883960723876953125 +0.445099037885665904656917746252 -0.108026049286127093229659124063 0.304495415091514620709034488755 +0.445099037885665904656917746252 0.108026049286127093229659124063 0.304495415091514620709034488755 +0.445136442780494745452557481258 -0.201313750445842765124382367503 0.252638642489910136834652121252 +0.445136442780494745452557481258 0.201313750445842765124382367503 0.252638642489910136834652121252 +0.445165586471557628289730246252 -0.0362933982163667692710795620314 0.320952486991882335320980246252 +0.445165586471557628289730246252 0.0362933982163667692710795620314 0.320952486991882335320980246252 +0.445358344912528958392528011245 -0.714150449633598305432258257497 -0.118932845443487159031725752811 +0.445358344912528958392528011245 0.714150449633598305432258257497 -0.118932845443487159031725752811 +0.445392447710037220343082253748 -0.0365134511142969145347514370314 0.0528435006737709087043519673443 +0.445392447710037220343082253748 0.0365134511142969145347514370314 0.0528435006737709087043519673443 +0.445504009723663330078125 -0.226993501186370849609375 0 +0.445504009723663330078125 0.226993501186370849609375 0 +0.445534202456474293096988503748 0 -0.0632411979138851193527059990629 +0.445576810836792014391960492503 -0.662757587432861394738381477509 0.047052800655364990234375 +0.445576810836792014391960492503 0.662757587432861394738381477509 0.047052800655364990234375 +0.445641759037971485479801003748 -0.0538893006742000579833984375 -0.03161249868571758270263671875 +0.445641759037971485479801003748 0.0538893006742000579833984375 -0.03161249868571758270263671875 +0.445831000804901123046875 -0.078458003699779510498046875 -0.89167201519012451171875 +0.445831000804901123046875 0.078458003699779510498046875 -0.89167201519012451171875 +0.44593751430511474609375 -0.11005699634552001953125 -0.19755350053310394287109375 +0.44593751430511474609375 0.11005699634552001953125 -0.19755350053310394287109375 +0.4459942281246185302734375 -0.4461674988269805908203125 -0.40561576187610626220703125 +0.4459942281246185302734375 0.4461674988269805908203125 -0.40561576187610626220703125 +0.446002906560897804943977007497 -0.530554491281509332800681022491 0.0979446962475776644607705634371 +0.446002906560897804943977007497 0.530554491281509332800681022491 0.0979446962475776644607705634371 +0.446012547612190279888721988755 -0.0535846486687660203407368442186 0.0264860998839139931415598283593 +0.446012547612190279888721988755 0.0535846486687660203407368442186 0.0264860998839139931415598283593 +0.446025589108467068744090511245 -0.463337561488151528088508257497 -0.555769121646881081311164507497 +0.446025589108467068744090511245 0.463337561488151528088508257497 -0.555769121646881081311164507497 +0.446069622039794944079460492503 -0.661717605590820379113381477509 -0.0561415970325470012336488423443 +0.446069622039794944079460492503 0.661717605590820379113381477509 -0.0561415970325470012336488423443 +0.4462589919567108154296875 -0.19988250732421875 0.104400999844074249267578125 +0.4462589919567108154296875 0.19988250732421875 0.104400999844074249267578125 +0.446278908848762478900340511245 -0.671594354510307245398337272491 0.268878790736198414190738503748 +0.446278908848762478900340511245 0.671594354510307245398337272491 0.268878790736198414190738503748 +0.446424007415771484375 -0.324342393875122092516960492503 -0.579230403900146462170539507497 +0.446424007415771484375 0.324342393875122092516960492503 -0.579230403900146462170539507497 +0.446582496166229248046875 -0.1807945072650909423828125 0.1337060034275054931640625 +0.446582496166229248046875 0.1807945072650909423828125 0.1337060034275054931640625 +0.446636390686035111841079014994 0 0.538995105028152399206931022491 +0.446736484766006414215411268742 -0.184004795551300032174779630623 0.506526279449462824011618522491 +0.446736484766006414215411268742 0.184004795551300032174779630623 0.506526279449462824011618522491 +0.446865758299827608990284488755 0 0.0530185483396053355842347798443 +0.446870511770248390881477007497 0 0.723054182529449418481704014994 +0.446955585479736294818309261245 -0.07954140007495880126953125 0.392305791378021240234375 +0.446955585479736294818309261245 0.07954140007495880126953125 0.392305791378021240234375 +0.44706375896930694580078125 -0.249255001544952392578125 0.54818473756313323974609375 +0.44706375896930694580078125 0.249255001544952392578125 0.54818473756313323974609375 +0.447115361690521295745526231258 -0.0226864006370306042770224053129 -0.319488942623138427734375 +0.447115361690521295745526231258 0.0226864006370306042770224053129 -0.319488942623138427734375 +0.44718374311923980712890625 -0.390974363684654269146534488755 0.263942900300025928839176003748 +0.44718374311923980712890625 0.390974363684654269146534488755 0.263942900300025928839176003748 +0.447210013866424560546875 0 -0.894429028034210205078125 +0.4472109973430633544921875 -0.525726974010467529296875 0.723612010478973388671875 +0.4472109973430633544921875 0.525726974010467529296875 0.723612010478973388671875 +0.4472124874591827392578125 0 0.22360749542713165283203125 +0.4472160041332244873046875 -0.850647985935211181640625 -0.2763969898223876953125 +0.4472160041332244873046875 0.850647985935211181640625 -0.2763969898223876953125 +0.447322869300842307360710492503 -0.324998043477535247802734375 0.341728383302688620837272992503 +0.447322869300842307360710492503 0.324998043477535247802734375 0.341728383302688620837272992503 +0.447357606887817393914730246252 -0.0533927977085113525390625 0.661075210571289151317841970013 +0.447357606887817393914730246252 0.0533927977085113525390625 0.661075210571289151317841970013 +0.44789551198482513427734375 -0.325411498546600341796875 -0.5059612691402435302734375 +0.44789551198482513427734375 0.325411498546600341796875 -0.5059612691402435302734375 +0.447924959659576460424545985006 -0.297356390953063987048210492503 0.115942200273275383692883622189 +0.447924959659576460424545985006 0.297356390953063987048210492503 0.115942200273275383692883622189 +0.4480769932270050048828125 -0.744723975658416748046875 0.4945839941501617431640625 +0.4480769932270050048828125 0.744723975658416748046875 0.4945839941501617431640625 +0.448293605446815457415965511245 -0.325699912011623349261668636245 -0.771655523777007967822783029987 +0.448293605446815457415965511245 0.325699912011623349261668636245 -0.771655523777007967822783029987 +0.44832551479339599609375 -0.184256494045257568359375 -0.122693002223968505859375 +0.44832551479339599609375 0.184256494045257568359375 -0.122693002223968505859375 +0.448346614837646484375 0 0.47062210738658905029296875 +0.448394817113876298364516514994 -0.210877802968025190866185880623 -0.494441515207290627209602007497 +0.448394817113876298364516514994 0.210877802968025190866185880623 -0.494441515207290627209602007497 +0.448400545120239246710269753748 -0.17169685661792755126953125 0.438129267096519503521534488755 +0.448400545120239246710269753748 0.17169685661792755126953125 0.438129267096519503521534488755 +0.448502844572067294048878238755 -0.0185845501720905310893972028907 -0.031618349254131317138671875 +0.448502844572067294048878238755 0.0185845501720905310893972028907 -0.031618349254131317138671875 +0.44857800006866455078125 -0.202714502811431884765625 -0.087661497294902801513671875 +0.44857800006866455078125 0.202714502811431884765625 -0.087661497294902801513671875 +0.448580789566040083471420985006 -0.560493612289428733141960492503 -0.353017592430114768298210492503 +0.448580789566040083471420985006 0.560493612289428733141960492503 -0.353017592430114768298210492503 +0.448588705062866188733039507497 -0.531055712699890047900908029987 -0.082144998013973236083984375 +0.448588705062866188733039507497 0.531055712699890047900908029987 -0.082144998013973236083984375 +0.448612654209136985095085492503 -0.03530610166490077972412109375 0 +0.448612654209136985095085492503 0.03530610166490077972412109375 0 +0.448636490106582630499332253748 -0.3590931594371795654296875 0.303772293031215667724609375 +0.448636490106582630499332253748 0.3590931594371795654296875 0.303772293031215667724609375 +0.44865824282169342041015625 -0.49246273934841156005859375 0.344508759677410125732421875 +0.44865824282169342041015625 0.49246273934841156005859375 0.344508759677410125732421875 +0.448846650123596202508480246252 -0.0183037497103214277793803432814 0.0264897007495164885093608120314 +0.448846650123596202508480246252 0.0183037497103214277793803432814 0.0264897007495164885093608120314 +0.449032899737358104363948996252 -0.485466459393501248431590511245 0.53403373062610626220703125 +0.449032899737358104363948996252 0.485466459393501248431590511245 0.53403373062610626220703125 +0.449141705036163296771434261245 -0.457446509599685635638621761245 0.28109548985958099365234375 +0.449141705036163296771434261245 0.457446509599685635638621761245 0.28109548985958099365234375 +0.44918501377105712890625 -0.862667977809906005859375 0.23245699703693389892578125 +0.44918501377105712890625 0.862667977809906005859375 0.23245699703693389892578125 +0.449297010898590087890625 -0.13307000696659088134765625 0.88341701030731201171875 +0.449297010898590087890625 0.13307000696659088134765625 0.88341701030731201171875 +0.4493947327136993408203125 -0.202966488897800445556640625 -0.56511001288890838623046875 +0.4493947327136993408203125 0.202966488897800445556640625 -0.56511001288890838623046875 +0.449722802639007546154914507497 -0.229029607772827131784154630623 -0.324492001533508267474559261245 +0.449722802639007546154914507497 0.229029607772827131784154630623 -0.324492001533508267474559261245 +0.449796009063720692022769753748 -0.356935214996337901727230246252 -0.174013799428939824887052623126 +0.449796009063720692022769753748 0.356935214996337901727230246252 -0.174013799428939824887052623126 +0.449819183349609408306690738755 -0.456996822357177756579460492503 -0.4783480167388916015625 +0.449819183349609408306690738755 0.456996822357177756579460492503 -0.4783480167388916015625 +0.449929189682006847039730246252 -0.387945592403411865234375 0.084035396575927734375 +0.449929189682006847039730246252 0.387945592403411865234375 0.084035396575927734375 +0.449950879812240578381477007497 -0.665365526080131552966179242503 -0.278087697923183441162109375 +0.449950879812240578381477007497 0.665365526080131552966179242503 -0.278087697923183441162109375 +0.449991178512573253289730246252 -0.128802394866943364926115123126 -0.648781585693359419408920985006 +0.449991178512573253289730246252 0.128802394866943364926115123126 -0.648781585693359419408920985006 +0.44999729096889495849609375 -0.178401593863964091912777121252 -0.758733308315277077404914507497 +0.44999729096889495849609375 0.178401593863964091912777121252 -0.758733308315277077404914507497 +0.450000000000000011102230246252 0 0 +0.450049597024917646947983485006 -0.150294096767902396472038617503 -0.278149288892745982781917746252 +0.450049597024917646947983485006 0.150294096767902396472038617503 -0.278149288892745982781917746252 +0.450119680166244540142628238755 -0.664993804693222112511818977509 -0.406417509913444552349659488755 +0.450119680166244540142628238755 0.664993804693222112511818977509 -0.406417509913444552349659488755 +0.4502466022968292236328125 -0.417789003252983126568409488755 0.657822597026824995580795985006 +0.4502466022968292236328125 0.417789003252983126568409488755 0.657822597026824995580795985006 +0.450392246246337890625 -0.4551165103912353515625 0.39053249359130859375 +0.450392246246337890625 0.4551165103912353515625 0.39053249359130859375 +0.450407648086547873766960492503 -0.209943807125091558285490123126 -0.235704141855239884817407869377 +0.450407648086547873766960492503 0.209943807125091558285490123126 -0.235704141855239884817407869377 +0.45064365863800048828125 -0.284016443789005257336555132497 0.662385472655296347888054242503 +0.45064365863800048828125 0.284016443789005257336555132497 0.662385472655296347888054242503 +0.450679582357406571802016514994 -0.0932785034179687416733273153113 0.527433884143829301294204014994 +0.450679582357406571802016514994 0.0932785034179687416733273153113 0.527433884143829301294204014994 +0.450716197490692194183026231258 -0.299807739257812511102230246252 -0.0973137021064758439559128078145 +0.450716197490692194183026231258 0.299807739257812511102230246252 -0.0973137021064758439559128078145 +0.450838682055473338738948996252 -0.274532704055309328960987613755 -0.379310119152069080694644753748 +0.450838682055473338738948996252 0.274532704055309328960987613755 -0.379310119152069080694644753748 +0.450882863998413097039730246252 -0.224555647373199468441740123126 0.220860201120376603567407869377 +0.450882863998413097039730246252 0.224555647373199468441740123126 0.220860201120376603567407869377 +0.451235693693161021844417746252 -0.631838697195053144994858485006 0.455154293775558493884147992503 +0.451235693693161021844417746252 0.631838697195053144994858485006 0.455154293775558493884147992503 +0.451327502727508544921875 -0.106510497629642486572265625 0.18697249889373779296875 +0.451327502727508544921875 0.106510497629642486572265625 0.18697249889373779296875 +0.4513328075408935546875 -0.368702411651611328125 0.5480480194091796875 +0.4513328075408935546875 0.368702411651611328125 0.5480480194091796875 +0.45134818553924560546875 -0.132067796587944014108373380623 -0.372616195678710904193309261245 +0.45134818553924560546875 0.132067796587944014108373380623 -0.372616195678710904193309261245 +0.4516024887561798095703125 -0.075773499906063079833984375 -0.200782001018524169921875 +0.4516024887561798095703125 0.075773499906063079833984375 -0.200782001018524169921875 +0.451608610153198197778579014994 -0.194916594028472889288394753748 0.34359419345855712890625 +0.451608610153198197778579014994 0.194916594028472889288394753748 0.34359419345855712890625 +0.451677596569061257092414507497 -0.2793906033039093017578125 -0.2791559994220733642578125 +0.451677596569061257092414507497 0.2793906033039093017578125 -0.2791559994220733642578125 +0.451705509424209616931022992503 -0.402273899316787753033253238755 -0.666436511278152510229233485006 +0.451705509424209616931022992503 0.402273899316787753033253238755 -0.666436511278152510229233485006 +0.451812201738357510638621761245 -0.490433287620544389184829014994 -0.212933695316314675061164507497 +0.451812201738357510638621761245 0.490433287620544389184829014994 -0.212933695316314675061164507497 +0.451824617385864213403579014994 -0.388445985317230235711605246252 -0.0704585999250411931793536268742 +0.451824617385864213403579014994 0.388445985317230235711605246252 -0.0704585999250411931793536268742 +0.45194758474826812744140625 -0.08631479740142822265625 0.459122288227081287725894753748 +0.45194758474826812744140625 0.08631479740142822265625 0.459122288227081287725894753748 +0.452073034644126903192073996252 -0.273041455447673830914112613755 0.153552305698394786492855246252 +0.452073034644126903192073996252 0.273041455447673830914112613755 0.153552305698394786492855246252 +0.452131384611129727435496761245 -0.388315880298614468646434261245 0.367134612798690751489516514994 +0.452131384611129727435496761245 0.388315880298614468646434261245 0.367134612798690751489516514994 +0.452138006687164306640625 -0.0532465018332004547119140625 0.2067269980907440185546875 +0.452138006687164306640625 0.0532465018332004547119140625 0.2067269980907440185546875 +0.452152413129806474145766514994 -0.424017298221588123663394753748 0.325219309329986550061164507497 +0.452152413129806474145766514994 0.424017298221588123663394753748 0.325219309329986550061164507497 +0.45220501720905303955078125 -0.5794312655925750732421875 0.1492304988205432891845703125 +0.45220501720905303955078125 0.5794312655925750732421875 0.1492304988205432891845703125 +0.452206310629844676629573996252 -0.45790548622608184814453125 0.0912801511585712432861328125 +0.452206310629844676629573996252 0.45790548622608184814453125 0.0912801511585712432861328125 +0.452439904212951715667401231258 -0.142939494550228141100944867503 0.278148207068443342748764735006 +0.452439904212951715667401231258 0.142939494550228141100944867503 0.278148207068443342748764735006 +0.452636814117431673931690738755 -0.626760816574096768505341970013 0.205647206306457525082365123126 +0.452636814117431673931690738755 0.626760816574096768505341970013 0.205647206306457525082365123126 +0.452958351373672518658253238755 -0.3290897905826568603515625 -0.330194818973541248663394753748 +0.452958351373672518658253238755 0.3290897905826568603515625 -0.330194818973541248663394753748 +0.4530167877674102783203125 -0.549828010797500654760483485006 -0.549968397617340065686164507497 +0.4530167877674102783203125 0.549828010797500654760483485006 -0.549968397617340065686164507497 +0.453175467252731334344417746252 -0.426581987738609336169304242503 -0.187510691583156585693359375 +0.453175467252731334344417746252 0.426581987738609336169304242503 -0.187510691583156585693359375 +0.453232002258300792352230246252 -0.0658576011657714815994424384371 -0.655929613113403364721420985006 +0.453232002258300792352230246252 0.0658576011657714815994424384371 -0.655929613113403364721420985006 +0.453238010406494140625 -0.727953016757965087890625 -0.514450013637542724609375 +0.453238010406494140625 0.727953016757965087890625 -0.514450013637542724609375 +0.453299003839492842260483485006 0 0.311480394005775484966846988755 +0.453315782546997059210269753748 -0.386297100782394375872996761245 -0.367803102731704689709602007497 +0.453315782546997059210269753748 0.386297100782394375872996761245 -0.367803102731704689709602007497 +0.4537214934825897216796875 -0.20713450014591217041015625 0.0350989997386932373046875 +0.4537214934825897216796875 0.20713450014591217041015625 0.0350989997386932373046875 +0.45378975570201873779296875 -0.527177989482879638671875 -0.280460245907306671142578125 +0.45378975570201873779296875 0.527177989482879638671875 -0.280460245907306671142578125 +0.4538230001926422119140625 -0.20779649913311004638671875 -0.02941399998962879180908203125 +0.4538230001926422119140625 0.20779649913311004638671875 -0.02941399998962879180908203125 +0.453990995883941650390625 -0.891005992889404296875 0 +0.453990995883941650390625 0.891005992889404296875 0 +0.4540260136127471923828125 -0.13077349960803985595703125 -0.1635805070400238037109375 +0.4540260136127471923828125 0.13077349960803985595703125 -0.1635805070400238037109375 +0.454161515831947359966846988755 -0.170004890859127039126619251874 -0.432823294401168845446647992503 +0.454161515831947359966846988755 0.170004890859127039126619251874 -0.432823294401168845446647992503 +0.454176789522171053814503238755 -0.246540792286396054366903740629 0.188257294893264787161157869377 +0.454176789522171053814503238755 0.246540792286396054366903740629 0.188257294893264787161157869377 +0.454431903362274181024105246252 -0.45840275287628173828125 -0.07654334791004657745361328125 +0.454431903362274181024105246252 0.45840275287628173828125 -0.07654334791004657745361328125 +0.45457880198955535888671875 -0.638698288798332236559929242503 -0.536584711074829079358039507497 +0.45457880198955535888671875 0.638698288798332236559929242503 -0.536584711074829079358039507497 +0.454614293575286820825454014994 -0.532283502817153864050681022491 0 +0.454614293575286820825454014994 0.532283502817153864050681022491 0 +0.454677999019622802734375 -0.882836997509002685546875 0.117758996784687042236328125 +0.454677999019622802734375 0.882836997509002685546875 0.117758996784687042236328125 +0.454775190353393587994190738755 0 -0.658163213729858420641960492503 +0.455009996891021728515625 -0.879342973232269287109375 -0.14043200016021728515625 +0.455009996891021728515625 0.879342973232269287109375 -0.14043200016021728515625 +0.45506799221038818359375 -0.0411204993724822998046875 -0.20303249359130859375 +0.45506799221038818359375 0.0411204993724822998046875 -0.20303249359130859375 +0.455140775442123446392628238755 -0.107777702808380129728682561563 -0.768914973735809303967414507497 +0.455140775442123446392628238755 0.107777702808380129728682561563 -0.768914973735809303967414507497 +0.455238108336925462182875889994 -0.589224180579185463635383257497 0.589976605772972062524672764994 +0.455238108336925462182875889994 0.589224180579185463635383257497 0.589976605772972062524672764994 +0.455543993413448311535773882497 -0.1903477050364017486572265625 0.811632472276687555456931022491 +0.455543993413448311535773882497 0.1903477050364017486572265625 0.811632472276687555456931022491 +0.4555897414684295654296875 -0.5788792669773101806640625 -0.1408432535827159881591796875 +0.4555897414684295654296875 0.5788792669773101806640625 -0.1408432535827159881591796875 +0.45574200153350830078125 -0.331113016605377175061164507497 -0.20655119419097900390625 +0.45574200153350830078125 0.331113016605377175061164507497 -0.20655119419097900390625 +0.455851221084594748766960492503 -0.525021600723266645971420985006 -0.39566719532012939453125 +0.455851221084594748766960492503 0.525021600723266645971420985006 -0.39566719532012939453125 +0.456056106090545643194644753748 -0.239761805534362798519865123126 0.737920814752578757556022992503 +0.456056106090545643194644753748 0.239761805534362798519865123126 0.737920814752578757556022992503 +0.456214380264282237664730246252 -0.624161577224731534130341970013 -0.205647206306457525082365123126 +0.456214380264282237664730246252 0.624161577224731534130341970013 -0.205647206306457525082365123126 +0.456244182586669877466079014994 -0.389668214321136463507144753748 0 +0.456244182586669877466079014994 0.389668214321136463507144753748 0 +0.456404960155487038342414507497 -0.261505894362926483154296875 -0.667689430713653497839743522491 +0.456404960155487038342414507497 0.261505894362926483154296875 -0.667689430713653497839743522491 +0.4566150009632110595703125 0 -0.20372299849987030029296875 +0.456831094622612010613948996252 -0.303828814625740073473991742503 0.038644649088382720947265625 +0.456831094622612010613948996252 0.303828814625740073473991742503 0.038644649088382720947265625 +0.4568429887294769287109375 -0.12758849561214447021484375 0.15816350281238555908203125 +0.4568429887294769287109375 0.12758849561214447021484375 0.15816350281238555908203125 +0.456916886568069502416733485006 -0.0724614031612873105148153740629 0.297449362277984630242855246252 +0.456916886568069502416733485006 0.0724614031612873105148153740629 0.297449362277984630242855246252 +0.456969699263572726177784488755 -0.304352942109108015600327235006 -0.0323763009160757120330487168758 +0.456969699263572726177784488755 0.304352942109108015600327235006 -0.0323763009160757120330487168758 +0.457086306810379039422542746252 -0.277312743663787886205795985006 -0.129111952334642426931665681877 +0.457086306810379039422542746252 0.277312743663787886205795985006 -0.129111952334642426931665681877 +0.457454444468021359515574886245 -0.753015616536140353076689279987 0.355249644815921750140574886245 +0.457454444468021359515574886245 0.753015616536140353076689279987 0.355249644815921750140574886245 +0.457512524724006663934261496252 -0.637018895149230934826789507497 0.327703054249286640509097878748 +0.457512524724006663934261496252 0.637018895149230934826789507497 0.327703054249286640509097878748 +0.457534256577491749151676003748 -0.380916754901409138067691628748 0.74031408131122589111328125 +0.457534256577491749151676003748 0.380916754901409138067691628748 0.74031408131122589111328125 +0.457617616653442360608039507497 -0.230166596174240095651342130623 0.312425386905670177117855246252 +0.457617616653442360608039507497 0.230166596174240095651342130623 0.312425386905670177117855246252 +0.457671508193016107757244981258 -0.232296903431415568963558371252 -0.197674395143985770495476117503 +0.457671508193016107757244981258 0.232296903431415568963558371252 -0.197674395143985770495476117503 +0.457710278034210216180355246252 -0.0371681984513998059371786553129 -0.774028819799423284386818977509 +0.457710278034210216180355246252 0.0371681984513998059371786553129 -0.774028819799423284386818977509 +0.457811751961708091052116742503 -0.113354451954364790489115932814 -0.282946950197219881939503238755 +0.457811751961708091052116742503 0.113354451954364790489115932814 -0.282946950197219881939503238755 +0.457854008674621559826789507497 -0.090927600860595703125 -0.376964414119720425677684261245 +0.457854008674621559826789507497 0.090927600860595703125 -0.376964414119720425677684261245 +0.457915520668029818462940738755 -0.742657488584518410412727007497 0.220848302543163316213892244377 +0.457915520668029818462940738755 0.742657488584518410412727007497 0.220848302543163316213892244377 +0.458376953005790677142528011245 -0.53938789665699005126953125 -0.470586356520652782098323996252 +0.458376953005790677142528011245 0.53938789665699005126953125 -0.470586356520652782098323996252 +0.4585259854793548583984375 -0.4155910015106201171875 -0.7855169773101806640625 +0.4585259854793548583984375 0.4155910015106201171875 -0.7855169773101806640625 +0.458651006221771240234375 -0.02032000012695789337158203125 0.198056995868682861328125 +0.458651006221771240234375 0.02032000012695789337158203125 0.198056995868682861328125 +0.458864986896514892578125 -0.18587200343608856201171875 0.069960497319698333740234375 +0.458864986896514892578125 0.18587200343608856201171875 0.069960497319698333740234375 +0.459044086933135975225894753748 -0.735768878459930442126335492503 -0.240671691298484813348323996252 +0.459044086933135975225894753748 0.735768878459930442126335492503 -0.240671691298484813348323996252 +0.4591205120086669921875 -0.15062749385833740234375 -0.12852899730205535888671875 +0.4591205120086669921875 0.15062749385833740234375 -0.12852899730205535888671875 +0.45918013155460357666015625 -0.211852543056011199951171875 0.408377456665039051397769753748 +0.45918013155460357666015625 0.211852543056011199951171875 0.408377456665039051397769753748 +0.459204185009002674444644753748 -0.507708591222763017114516514994 0.146161399781703948974609375 +0.459204185009002674444644753748 0.507708591222763017114516514994 0.146161399781703948974609375 +0.45949499309062957763671875 -0.295599751174449920654296875 0.51379501819610595703125 +0.45949499309062957763671875 0.295599751174449920654296875 0.51379501819610595703125 +0.45949840545654296875 -0.212412810325622564144865123126 0.619469594955444402550881477509 +0.45949840545654296875 0.212412810325622564144865123126 0.619469594955444402550881477509 +0.459513008594512939453125 -0.364485597610473610608039507497 0.126482400298118580206363503748 +0.459513008594512939453125 0.364485597610473610608039507497 0.126482400298118580206363503748 +0.459601807594299305304019753748 -0.30377519130706787109375 -0.237670201063156116827457253748 +0.459601807594299305304019753748 0.30377519130706787109375 -0.237670201063156116827457253748 +0.459620213508605990337940738755 -0.4596188962459564208984375 0 +0.459620213508605990337940738755 0.4596188962459564208984375 0 +0.45977699756622314453125 -0.18751700222492218017578125 -0.058674998581409454345703125 +0.45977699756622314453125 0.18751700222492218017578125 -0.058674998581409454345703125 +0.459786593914031982421875 -0.119031000137329090460269753748 0.366643810272216763568309261245 +0.459786593914031982421875 0.119031000137329090460269753748 0.366643810272216763568309261245 +0.459795695543289140161391514994 -0.227869597077369673288060880623 0.476091712713241521637286268742 +0.459795695543289140161391514994 0.227869597077369673288060880623 0.476091712713241521637286268742 +0.459820795059204145971420985006 -0.415403985977172873766960492503 0.5059688091278076171875 +0.459820795059204145971420985006 0.415403985977172873766960492503 0.5059688091278076171875 +0.4599010050296783447265625 -0.3341369926929473876953125 0.822704970836639404296875 +0.4599010050296783447265625 0.3341369926929473876953125 0.822704970836639404296875 +0.459973990917205810546875 -0.14800100028514862060546875 0.12852899730205535888671875 +0.459973990917205810546875 0.14800100028514862060546875 0.12852899730205535888671875 +0.460146582126617409436164507497 -0.0396251991391181959678569057814 0.383007609844207730365184261245 +0.460146582126617409436164507497 0.0396251991391181959678569057814 0.383007609844207730365184261245 +0.460163193941116321905582253748 -0.162715704739093774966463001874 -0.501770496368408203125 +0.460163193941116321905582253748 0.162715704739093774966463001874 -0.501770496368408203125 +0.460236062109470323022719639994 -0.490309259295463539807258257497 -0.671028676629066400671774772491 +0.460236062109470323022719639994 0.490309259295463539807258257497 -0.671028676629066400671774772491 +0.460320067405700694695980246252 -0.523134192824363686291633257497 0.486760163307189908099559261245 +0.460320067405700694695980246252 0.523134192824363686291633257497 0.486760163307189908099559261245 +0.4605414867401123046875 -0.1673440039157867431640625 0.099486999213695526123046875 +0.4605414867401123046875 0.1673440039157867431640625 0.099486999213695526123046875 +0.460702505707740739282485264994 -0.741190966963767960962172764994 -0.375352613627910614013671875 +0.460702505707740739282485264994 0.741190966963767960962172764994 -0.375352613627910614013671875 +0.4607324898242950439453125 -0.0737060010433197021484375 0.1797029972076416015625 +0.4607324898242950439453125 0.0737060010433197021484375 0.1797029972076416015625 +0.4607699811458587646484375 -0.58942423760890960693359375 0.05263274721801280975341796875 +0.4607699811458587646484375 0.58942423760890960693359375 0.05263274721801280975341796875 +0.460884463787078868524105246252 -0.404786148667335476947215511245 -0.588416767120361283716079014994 +0.460884463787078868524105246252 0.404786148667335476947215511245 -0.588416767120361283716079014994 +0.4608890116214752197265625 -0.1696020066738128662109375 -0.093895502388477325439453125 +0.4608890116214752197265625 0.1696020066738128662109375 -0.093895502388477325439453125 +0.4609535038471221923828125 -0.095888502895832061767578125 -0.168307006359100341796875 +0.4609535038471221923828125 0.095888502895832061767578125 -0.168307006359100341796875 +0.46106551587581634521484375 -0.1508887521922588348388671875 -0.57197101414203643798828125 +0.46106551587581634521484375 0.1508887521922588348388671875 -0.57197101414203643798828125 +0.461114531755447421002003238755 -0.400165331363677989617855246252 -0.22302670776844024658203125 +0.461114531755447421002003238755 0.400165331363677989617855246252 -0.22302670776844024658203125 +0.461183786392211858551348768742 -0.462616688013076760022102007497 -0.251585593819618202893195757497 +0.461183786392211858551348768742 0.462616688013076760022102007497 -0.251585593819618202893195757497 +0.4613166153430938720703125 -0.471696281433105490954460492503 0.612119686603546209191506477509 +0.4613166153430938720703125 0.471696281433105490954460492503 0.612119686603546209191506477509 +0.461406555771827708856136496252 -0.167089451849460612908870871252 0.248365157842636130602897992503 +0.461406555771827708856136496252 0.167089451849460612908870871252 0.248365157842636130602897992503 +0.461427748203277587890625 -0.0500317476689815521240234375 0.5891354978084564208984375 +0.461427748203277587890625 0.0500317476689815521240234375 0.5891354978084564208984375 +0.461477708816528331414730246252 -0.624397498369216985558693977509 -0.455154293775558493884147992503 +0.461477708816528331414730246252 0.624397498369216985558693977509 -0.455154293775558493884147992503 +0.461483401060104325708266514994 -0.278140795230865434106704014994 -0.446845006942748979028579014994 +0.461483401060104325708266514994 0.278140795230865434106704014994 -0.446845006942748979028579014994 +0.46170227229595184326171875 -0.1489342488348484039306640625 0.5719702541828155517578125 +0.46170227229595184326171875 0.1489342488348484039306640625 0.5719702541828155517578125 +0.461782211065292380602897992503 -0.174225148558616649285823996252 -0.242699053883552562371761496252 +0.461782211065292380602897992503 0.174225148558616649285823996252 -0.242699053883552562371761496252 +0.461783850193023703845085492503 -0.253143543004989646227897992503 -0.158662892878055572509765625 +0.461783850193023703845085492503 0.253143543004989646227897992503 -0.158662892878055572509765625 +0.46184027194976806640625 -0.5892862379550933837890625 -0.0441120006144046783447265625 +0.46184027194976806640625 0.5892862379550933837890625 -0.0441120006144046783447265625 +0.4619404971599578857421875 -0.1913399994373321533203125 0 +0.4619404971599578857421875 0.1913399994373321533203125 0 +0.4620187282562255859375 -0.396846771240234375 -0.437666237354278564453125 +0.4620187282562255859375 0.396846771240234375 -0.437666237354278564453125 +0.46207500994205474853515625 -0.49566002190113067626953125 -0.32141549885272979736328125 +0.46207500994205474853515625 0.49566002190113067626953125 -0.32141549885272979736328125 +0.462097191810607876849559261245 -0.1900632083415985107421875 -0.33217799663543701171875 +0.462097191810607876849559261245 0.1900632083415985107421875 -0.33217799663543701171875 +0.462128984928131092413394753748 -0.049344599246978759765625 -0.379475998878478992804019753748 +0.462128984928131092413394753748 0.049344599246978759765625 -0.379475998878478992804019753748 +0.462730763852596260754523882497 -0.805625641345977694385283029987 -0.198362848162651039807258257497 +0.462730763852596260754523882497 0.805625641345977694385283029987 -0.198362848162651039807258257497 +0.46299898624420166015625 -0.366553795337677013055355246252 -0.1061604022979736328125 +0.46299898624420166015625 0.366553795337677013055355246252 -0.1061604022979736328125 +0.4631288051605224609375 -0.812570172548294000769431022491 0.166556844860315328427091685626 +0.4631288051605224609375 0.812570172548294000769431022491 0.166556844860315328427091685626 +0.463269302248954795153679242503 -0.435247135162353526727230246252 0.135799299180507676565454744377 +0.463269302248954795153679242503 0.435247135162353526727230246252 0.135799299180507676565454744377 +0.463383245468139692846420985006 -0.0758725017309188898284588731258 -0.286389937996864352154346988755 +0.463383245468139692846420985006 0.0758725017309188898284588731258 -0.286389937996864352154346988755 +0.46368400752544403076171875 -0.124654404819011688232421875 -0.438130545616149891241519753748 +0.46368400752544403076171875 0.124654404819011688232421875 -0.438130545616149891241519753748 +0.463699793815612770764289507497 0 -0.380765998363494839740184261245 +0.463978910446166958880809261245 -0.509569907188415549548210492503 -0.122726096212863913792467940311 +0.463978910446166958880809261245 0.509569907188415549548210492503 -0.122726096212863913792467940311 +0.464153623580932650494190738755 -0.271362400054931673931690738755 -0.592388010025024391858039507497 +0.464153623580932650494190738755 0.271362400054931673931690738755 -0.592388010025024391858039507497 +0.464394986629486083984375 -0.574454009532928466796875 0.674048006534576416015625 +0.464394986629486083984375 0.574454009532928466796875 0.674048006534576416015625 +0.464398363232612576556590511245 -0.693797221779823281018195757497 0.159622354060411447695955189374 +0.464398363232612576556590511245 0.693797221779823281018195757497 0.159622354060411447695955189374 +0.464463821053504921643195757497 -0.631968206167221047131477007497 -0.327703890204429637567073996252 +0.464463821053504921643195757497 0.631968206167221047131477007497 -0.327703890204429637567073996252 +0.464569953083991959985610264994 -0.06340394727885723114013671875 0.826229226589202836450454014994 +0.464569953083991959985610264994 0.06340394727885723114013671875 0.826229226589202836450454014994 +0.464574587345123302117855246252 -0.337528806924819957391292746252 -0.692996388673782326428352007497 +0.464574587345123302117855246252 0.337528806924819957391292746252 -0.692996388673782326428352007497 +0.4646629989147186279296875 -0.583684980869293212890625 -0.665883004665374755859375 +0.4646629989147186279296875 0.583684980869293212890625 -0.665883004665374755859375 +0.464715194702148448602230246252 -0.5962696075439453125 0.26172959804534912109375 +0.464715194702148448602230246252 0.5962696075439453125 0.26172959804534912109375 +0.4649227559566497802734375 -0.55328325927257537841796875 0.200559742748737335205078125 +0.4649227559566497802734375 0.55328325927257537841796875 0.200559742748737335205078125 +0.465299987792968772204460492503 -0.403362417221069358141960492503 -0.510680007934570356908920985006 +0.465299987792968772204460492503 0.403362417221069358141960492503 -0.510680007934570356908920985006 +0.46535249054431915283203125 -0.2763847410678863525390625 -0.51919050514698028564453125 +0.46535249054431915283203125 0.2763847410678863525390625 -0.51919050514698028564453125 +0.465418803691864002569644753748 -0.256279206275939919201789507497 0.278758800029754616467414507497 +0.465418803691864002569644753748 0.256279206275939919201789507497 0.278758800029754616467414507497 +0.465467977523803755346420985006 -0.642412805557250998766960492503 0.103177595138549807463057561563 +0.465467977523803755346420985006 0.642412805557250998766960492503 0.103177595138549807463057561563 +0.465517109632492043225227007497 -0.826238739490508966589743522491 0.0558865999802947016616982978121 +0.465517109632492043225227007497 0.826238739490508966589743522491 0.0558865999802947016616982978121 +0.46555723249912261962890625 -0.09209850244224071502685546875 -0.58075274527072906494140625 +0.46555723249912261962890625 0.09209850244224071502685546875 -0.58075274527072906494140625 +0.4656560122966766357421875 0 0.88496601581573486328125 +0.465662452578544661108139735006 -0.2823551595211029052734375 0.07703244686126708984375 +0.465662452578544661108139735006 0.2823551595211029052734375 0.07703244686126708984375 +0.465707004070282037933026231258 -0.107807701081037529688977372189 0.272019557654857635498046875 +0.465707004070282037933026231258 0.107807701081037529688977372189 0.272019557654857635498046875 +0.46577298641204833984375 -0.0613639988005161285400390625 -0.171142995357513427734375 +0.46577298641204833984375 0.0613639988005161285400390625 -0.171142995357513427734375 +0.465946197509765625 -0.59838302433490753173828125 0.383838759362697568011668636245 +0.465946197509765625 0.59838302433490753173828125 0.383838759362697568011668636245 +0.465977990627288785052684261245 -0.338551211357116688116519753748 0.16807079315185546875 +0.465977990627288785052684261245 0.338551211357116688116519753748 0.16807079315185546875 +0.46607793867588043212890625 -0.232844944298267381155298494377 -0.388657104969024669305355246252 +0.46607793867588043212890625 0.232844944298267381155298494377 -0.388657104969024669305355246252 +0.466101360321044877466079014994 -0.825107327103614784924445757497 -0.0666880995035171453277911268742 +0.466101360321044877466079014994 0.825107327103614784924445757497 -0.0666880995035171453277911268742 +0.466178238391876220703125 -0.690342801809310846472556022491 -0.169128747284412378482088001874 +0.466178238391876220703125 0.690342801809310846472556022491 -0.169128747284412378482088001874 +0.466558399796485945287827235006 -0.0361993491649627713302450615629 0.288985955715179487768295985006 +0.466558399796485945287827235006 0.0361993491649627713302450615629 0.288985955715179487768295985006 +0.466629600524902377056690738755 0 0.649812793731689541942841970013 +0.466635963320732150005909488755 -0.283864894509315512927116742503 -0.0645870499312877766051599337516 +0.466635963320732150005909488755 0.283864894509315512927116742503 -0.0645870499312877766051599337516 +0.466736605763435397076221988755 -0.0380270011723041548301615932814 -0.288462910056114241186264735006 +0.466736605763435397076221988755 0.0380270011723041548301615932814 -0.288462910056114241186264735006 +0.466743201017379705231036268742 -0.339104494452476479260383257497 -0.396433097124099687036391514994 +0.466743201017379705231036268742 0.339104494452476479260383257497 -0.396433097124099687036391514994 +0.466846910119056712762386496252 -0.371833142638206493035823996252 -0.257476051151752483026058371252 +0.466846910119056712762386496252 0.371833142638206493035823996252 -0.257476051151752483026058371252 +0.4668760001659393310546875 -0.830358028411865234375 0.30419099330902099609375 +0.4668760001659393310546875 0.830358028411865234375 0.30419099330902099609375 +0.466968704760074571069594639994 -0.629697045683860756604133257497 0.536583748459815934594985264994 +0.466968704760074571069594639994 0.629697045683860756604133257497 0.536583748459815934594985264994 +0.4669955074787139892578125 -0.09371499717235565185546875 0.15209449827671051025390625 +0.4669955074787139892578125 0.09371499717235565185546875 0.15209449827671051025390625 +0.467029201984405506475894753748 -0.242009407281875588147102007497 -0.288643795251846302374332253748 +0.467029201984405506475894753748 0.242009407281875588147102007497 -0.288643795251846302374332253748 +0.467046591639518726690738503748 -0.260954539477825153692691628748 -0.78502868115901947021484375 +0.467046591639518726690738503748 0.260954539477825153692691628748 -0.78502868115901947021484375 +0.467077004909515369757144753748 -0.0432678986340761170814595004686 0.44996316730976104736328125 +0.467077004909515369757144753748 0.0432678986340761170814595004686 0.44996316730976104736328125 +0.467134380340576194079460492503 -0.641202402114868230675881477509 -0.103177595138549807463057561563 +0.467134380340576194079460492503 0.641202402114868230675881477509 -0.103177595138549807463057561563 +0.467245829105377208367855246252 -0.1703111045062541961669921875 0.689329624176025390625 +0.467245829105377208367855246252 0.1703111045062541961669921875 0.689329624176025390625 +0.4672810137271881103515625 -0.81752002239227294921875 -0.3366149961948394775390625 +0.4672810137271881103515625 0.81752002239227294921875 -0.3366149961948394775390625 +0.467317482829093966412159488755 -0.25083760917186737060546875 0.375758507847785971911491742503 +0.467317482829093966412159488755 0.25083760917186737060546875 0.375758507847785971911491742503 +0.46735258400440216064453125 -0.1294104494154453277587890625 0.432822015881538402215511496252 +0.46735258400440216064453125 0.1294104494154453277587890625 0.432822015881538402215511496252 +0.46746958792209625244140625 -0.437006688117980990337940738755 -0.1140054501593112945556640625 +0.46746958792209625244140625 0.437006688117980990337940738755 -0.1140054501593112945556640625 +0.467507660388946533203125 -0.339663393795490264892578125 0.623350065946578935083266514994 +0.467507660388946533203125 0.339663393795490264892578125 0.623350065946578935083266514994 +0.4675619900226593017578125 -0.11622600257396697998046875 -0.1337060034275054931640625 +0.4675619900226593017578125 0.11622600257396697998046875 -0.1337060034275054931640625 +0.467856392264366205413494981258 0 -0.289154785871505781713608485006 +0.4678935110569000244140625 -0.04054249823093414306640625 0.1715579926967620849609375 +0.4678935110569000244140625 0.04054249823093414306640625 0.1715579926967620849609375 +0.467923384904861405786391514994 -0.138835203647613508737279630623 0.501769119501113913806022992503 +0.467923384904861405786391514994 0.138835203647613508737279630623 0.501769119501113913806022992503 +0.468008208274841353002670985006 -0.190383046865463284591513115629 0.217308293282985703909204744377 +0.468008208274841353002670985006 0.190383046865463284591513115629 0.217308293282985703909204744377 +0.46811024844646453857421875 -0.46172775328159332275390625 -0.360804744064807891845703125 +0.46811024844646453857421875 0.46172775328159332275390625 -0.360804744064807891845703125 +0.468137592077255193512286268742 -0.0466228023171424837967080634371 0.518337380886077836450454014994 +0.468137592077255193512286268742 0.0466228023171424837967080634371 0.518337380886077836450454014994 +0.468286001682281460833934261245 -0.432370418310165371966746761245 -0.28941990435123443603515625 +0.468286001682281460833934261245 0.432370418310165371966746761245 -0.28941990435123443603515625 +0.4684022367000579833984375 -0.712294793128967262951789507497 0.419208391010761238781867632497 +0.4684022367000579833984375 0.712294793128967262951789507497 0.419208391010761238781867632497 +0.4686414897441864013671875 -0.17071549594402313232421875 0.0350884981453418731689453125 +0.4686414897441864013671875 0.17071549594402313232421875 0.0350884981453418731689453125 +0.468774497509002685546875 -0.17142200469970703125 -0.029408000409603118896484375 +0.468774497509002685546875 0.17142200469970703125 -0.029408000409603118896484375 +0.468918907642364490850894753748 -0.12016980350017547607421875 0.75873148441314697265625 +0.468918907642364490850894753748 0.12016980350017547607421875 0.75873148441314697265625 +0.46892698109149932861328125 -0.340694256126880645751953125 0.47595749795436859130859375 +0.46892698109149932861328125 0.340694256126880645751953125 0.47595749795436859130859375 +0.468953099846839915887386496252 -0.287372791767120383532585492503 0 +0.468953099846839915887386496252 0.287372791767120383532585492503 0 +0.4689877331256866455078125 -0.030975750647485256195068359375 -0.58445848524570465087890625 +0.4689877331256866455078125 0.030975750647485256195068359375 -0.58445848524570465087890625 +0.4690000116825103759765625 -0.02062500081956386566162109375 -0.1720865070819854736328125 +0.4690000116825103759765625 0.02062500081956386566162109375 -0.1720865070819854736328125 +0.469231188297271728515625 -0.371543991565704334600894753748 0.0421577990055084228515625 +0.469231188297271728515625 0.371543991565704334600894753748 0.0421577990055084228515625 +0.469376993179321244653579014994 -0.157595407962799055612279630623 0.338893783092498790399105246252 +0.469376993179321244653579014994 0.157595407962799055612279630623 0.338893783092498790399105246252 +0.469429495930671680792301003748 -0.557602548599243186266960492503 0.437282511591911282611278011245 +0.469429495930671680792301003748 0.557602548599243186266960492503 0.437282511591911282611278011245 +0.4694389998912811279296875 0 0.17212450504302978515625 +0.469571912288665738177684261245 -0.113719902932643876503071567186 -0.506527698040008522717414507497 +0.469571912288665738177684261245 0.113719902932643876503071567186 -0.506527698040008522717414507497 +0.469573998451232876849559261245 -0.481732988357543912005809261245 0.193477204442024208752570757497 +0.469573998451232876849559261245 0.481732988357543912005809261245 0.193477204442024208752570757497 +0.469783592224121082647769753748 -0.0797725494951009722610635321871 -0.442085781693458579333366742503 +0.469783592224121082647769753748 0.0797725494951009722610635321871 -0.442085781693458579333366742503 +0.469822204113006569592414507497 -0.371510410308837857318309261245 -0.0353196009993553133865518134371 +0.469822204113006569592414507497 0.371510410308837857318309261245 -0.0353196009993553133865518134371 +0.469830608367919899670539507497 0 0.373174810409545865130809261245 +0.469863009452819779809829014994 -0.310780799388885475842414507497 0.206504398584365839175447376874 +0.469863009452819779809829014994 0.310780799388885475842414507497 0.206504398584365839175447376874 +0.470021313428878761975227007497 -0.270329493284225452764957253748 0.442721289396285966333266514994 +0.470021313428878761975227007497 0.270329493284225452764957253748 0.442721289396285966333266514994 +0.470228815078735373766960492503 -0.647213602066040061266960492503 0 +0.470228815078735373766960492503 0.647213602066040061266960492503 0 +0.470249122381210360455128238755 -0.7673759758472442626953125 0 +0.470249122381210360455128238755 0.7673759758472442626953125 0 +0.470339980721473704949886496252 -0.341718000173568736688167746252 -0.290689744055271148681640625 +0.470339980721473704949886496252 0.341718000173568736688167746252 -0.290689744055271148681640625 +0.470511811971664473119858485006 -0.197023202478885661736995871252 -0.205670846998691564389005748126 +0.470511811971664473119858485006 0.197023202478885661736995871252 -0.205670846998691564389005748126 +0.47067224979400634765625 -0.5541629791259765625 -0.1840402521193027496337890625 +0.47067224979400634765625 0.5541629791259765625 -0.1840402521193027496337890625 +0.470794200897216796875 -0.281056201457977272717414507497 0.243639600276947004831029630623 +0.470794200897216796875 0.281056201457977272717414507497 0.243639600276947004831029630623 +0.470948994159698486328125 -0.13531149923801422119140625 -0.099486999213695526123046875 +0.470948994159698486328125 0.13531149923801422119140625 -0.099486999213695526123046875 +0.4710074961185455322265625 -0.11444850265979766845703125 0.122692503035068511962890625 +0.4710074961185455322265625 0.11444850265979766845703125 0.122692503035068511962890625 +0.4711410105228424072265625 -0.759519892930984541479233485006 0.105614997446537017822265625 +0.4711410105228424072265625 0.759519892930984541479233485006 0.105614997446537017822265625 +0.471227893233299277575554242503 -0.289483344554901156353565738755 -0.341531452536582957879573996252 +0.471227893233299277575554242503 0.289483344554901156353565738755 -0.341531452536582957879573996252 +0.471347999572753917352230246252 -0.451607179641723643914730246252 0.462473583221435557977230246252 +0.471347999572753917352230246252 0.451607179641723643914730246252 0.462473583221435557977230246252 +0.471358394622802767681690738755 -0.594794416427612326891960492503 -0.253063201904296875 +0.471358394622802767681690738755 0.594794416427612326891960492503 -0.253063201904296875 +0.4713585078716278076171875 -0.15382750332355499267578125 -0.064485497772693634033203125 +0.4713585078716278076171875 0.15382750332355499267578125 -0.064485497772693634033203125 +0.471372795104980479852230246252 -0.106456005573272713404797684689 0.637553596496582053454460492503 +0.471372795104980479852230246252 0.106456005573272713404797684689 0.637553596496582053454460492503 +0.471395662426948580669971988755 -0.259002703428268477026108485006 0.114907648414373411704936245314 +0.471395662426948580669971988755 0.259002703428268477026108485006 0.114907648414373411704936245314 +0.471499058604240461889389735006 -0.136027096211910253353849498126 -0.248365698754787478375050113755 +0.471499058604240461889389735006 0.136027096211910253353849498126 -0.248365698754787478375050113755 +0.471555894613266024517628238755 -0.756159299612045310290397992503 -0.125928895175456995181306751874 +0.471555894613266024517628238755 0.756159299612045310290397992503 -0.125928895175456995181306751874 +0.471666714549064614026008257497 -0.202872051298618322201505748126 -0.677402418851852372583266514994 +0.471666714549064614026008257497 0.202872051298618322201505748126 -0.677402418851852372583266514994 +0.471755504608154296875 -0.15260450541973114013671875 0.064485497772693634033203125 +0.471755504608154296875 0.15260450541973114013671875 0.064485497772693634033203125 +0.471757185459136918481704014994 -0.342748796939849831311164507497 -0.141308999061584478207365123126 +0.471757185459136918481704014994 0.342748796939849831311164507497 -0.141308999061584478207365123126 +0.471888005733489990234375 -0.3428420126438140869140625 -0.8122689723968505859375 +0.471888005733489990234375 0.3428420126438140869140625 -0.8122689723968505859375 +0.471991634368896517681690738755 -0.408402135968208346294971988755 0.181470906734466558285490123126 +0.471991634368896517681690738755 0.408402135968208346294971988755 0.181470906734466558285490123126 +0.472088408470153764184829014994 -0.514507019519805930407585492503 0.0491385996341705266754473768742 +0.472088408470153764184829014994 0.514507019519805930407585492503 0.0491385996341705266754473768742 +0.472210210561752330438167746252 -0.212699852883815793136434990629 0.185137706995010392629907869377 +0.472210210561752330438167746252 0.212699852883815793136434990629 0.185137706995010392629907869377 +0.472262388467788729595753238755 -0.490592712163925193102897992503 -0.588461422920227072985710492503 +0.472262388467788729595753238755 0.490592712163925193102897992503 -0.588461422920227072985710492503 +0.472366189956665016858039507497 -0.148392596840858453921541126874 -0.338894391059875454974559261245 +0.472366189956665016858039507497 0.148392596840858453921541126874 -0.338894391059875454974559261245 +0.472530609369277987408253238755 -0.711099904775619573449318977509 0.284695190191268932000667746252 +0.472530609369277987408253238755 0.711099904775619573449318977509 0.284695190191268932000667746252 +0.4725579917430877685546875 -0.13368900120258331298828125 0.093895502388477325439453125 +0.4725579917430877685546875 0.13368900120258331298828125 0.093895502388477325439453125 +0.472668939828872702868522992503 -0.28786160051822662353515625 0.340910711884498618395866742503 +0.472668939828872702868522992503 0.28786160051822662353515625 0.340910711884498618395866742503 +0.472756692767143271716179242503 -0.0268125010654330260539968122657 -0.44528901576995849609375 +0.472756692767143271716179242503 0.0268125010654330260539968122657 -0.44528901576995849609375 +0.472845810651779163702457253748 -0.400434982776641801294204014994 -0.32568199932575225830078125 +0.472845810651779163702457253748 0.400434982776641801294204014994 -0.32568199932575225830078125 +0.473014497756957974505809261245 -0.514355105161666825708266514994 -0.0411795999854803057571572821871 +0.473014497756957974505809261245 0.514355105161666825708266514994 -0.0411795999854803057571572821871 +0.473157012462615989001335492503 0 0.765586781501770063940170985006 +0.473425361514091480596988503748 -0.704179936647415183337272992503 0.0499936006963253021240234375 +0.473425361514091480596988503748 0.704179936647415183337272992503 0.0499936006963253021240234375 +0.4736064970493316650390625 -0.0812290012836456298828125 -0.13819800317287445068359375 +0.4736064970493316650390625 0.0812290012836456298828125 -0.13819800317287445068359375 +0.473727989196777388158920985006 -0.561846399307250998766960492503 0.316085600852966330798210492503 +0.473727989196777388158920985006 0.561846399307250998766960492503 0.316085600852966330798210492503 +0.473750203847885187347088731258 0 0.279392862319946311266960492503 +0.473910805583000194207698996252 -0.261921547353267669677734375 -0.0964661501348018785018112453145 +0.473910805583000194207698996252 0.261921547353267669677734375 -0.0964661501348018785018112453145 +0.473948973417282093389957253748 -0.703074955940246604235710492503 -0.0596504468470811857749858120314 +0.473948973417282093389957253748 0.703074955940246604235710492503 -0.0596504468470811857749858120314 +0.473992204666137728619190738755 -0.233927097916603099481136496252 0.152017803490161917956413617503 +0.473992204666137728619190738755 0.233927097916603099481136496252 0.152017803490161917956413617503 +0.474310880899429299084602007497 -0.0570500008761882712593482835928 -0.5116390883922576904296875 +0.474310880899429299084602007497 0.0570500008761882712593482835928 -0.5116390883922576904296875 +0.4743255078792572021484375 -0.344613793492317188604801003748 -0.615432304143905595239516514994 +0.4743255078792572021484375 0.344613793492317188604801003748 -0.615432304143905595239516514994 +0.474397194385528520044204014994 -0.0789929956197738675216513115629 0.358758616447448719366519753748 +0.474397194385528520044204014994 0.0789929956197738675216513115629 0.358758616447448719366519753748 +0.4748347699642181396484375 -0.52277626097202301025390625 0.252461247146129608154296875 +0.4748347699642181396484375 0.52277626097202301025390625 0.252461247146129608154296875 +0.474896490573883056640625 -0.06057099997997283935546875 0.144237995147705078125 +0.474896490573883056640625 0.06057099997997283935546875 0.144237995147705078125 +0.474997140467166900634765625 -0.188312793523073174206672319997 -0.800885158777236871863181022491 +0.474997140467166900634765625 0.188312793523073174206672319997 -0.800885158777236871863181022491 +0.47501479089260101318359375 -0.441334399580955494268863503748 0.04566249810159206390380859375 +0.47501479089260101318359375 0.441334399580955494268863503748 0.04566249810159206390380859375 +0.47507701814174652099609375 -0.3834014832973480224609375 0.435666739940643310546875 +0.47507701814174652099609375 0.3834014832973480224609375 0.435666739940643310546875 +0.47512574493885040283203125 -0.345195002853870391845703125 -0.46647150814533233642578125 +0.47512574493885040283203125 0.345195002853870391845703125 -0.46647150814533233642578125 +0.475126329064369190557926003748 -0.701937904953956581799445757497 -0.428996260464191425665347878748 +0.475126329064369190557926003748 0.701937904953956581799445757497 -0.428996260464191425665347878748 +0.47526030242443084716796875 -0.440999503433704365118472878748 0.694368296861648581774772992503 +0.47526030242443084716796875 0.440999503433704365118472878748 0.694368296861648581774772992503 +0.475317457318305935931590511245 -0.05672984756529331207275390625 0.702392411231994584497329014994 +0.475317457318305935931590511245 0.05672984756529331207275390625 0.702392411231994584497329014994 +0.475446599721908558233707253748 -0.514023309946060158459602007497 0.5654474794864654541015625 +0.475446599721908558233707253748 0.514023309946060158459602007497 0.5654474794864654541015625 +0.4755289852619171142578125 -0.154506504535675048828125 0 +0.4755289852619171142578125 0.154506504535675048828125 0 +0.475707051157951366082698996252 -0.441292789578437816278011496252 -0.0382583511993289035468812642193 +0.475707051157951366082698996252 0.441292789578437816278011496252 -0.0382583511993289035468812642193 +0.475727176666259798931690738755 -0.475911998748779319079460492503 -0.432656812667846724096420985006 +0.475727176666259798931690738755 0.475911998748779319079460492503 -0.432656812667846724096420985006 +0.475893610715866055560496761245 0 -0.513347113132476828845085492503 +0.475997513532638583111378238755 -0.130474846065044419729517244377 0.242698496580123934673878238755 +0.475997513532638583111378238755 0.130474846065044419729517244377 0.242698496580123934673878238755 +0.476182308793067943231136496252 -0.218539753556251548083366742503 -0.167305046319961570056022992503 +0.476182308793067943231136496252 0.218539753556251548083366742503 -0.167305046319961570056022992503 +0.476304343342781044690070757497 -0.666940847039222739489616742503 0.480440643429756120141860264994 +0.476304343342781044690070757497 0.666940847039222739489616742503 0.480440643429756120141860264994 +0.476406013965606667248664507497 -0.231420704722404474429353626874 -0.457692217826843217309829014994 +0.476406013965606667248664507497 0.231420704722404474429353626874 -0.457692217826843217309829014994 +0.476418578624725364001335492503 -0.704504674673080422131477007497 -0.29444579780101776123046875 +0.476418578624725364001335492503 0.704504674673080422131477007497 -0.29444579780101776123046875 +0.476503193378448486328125 -0.267215394973754849505809261245 -0.2480742037296295166015625 +0.476503193378448486328125 0.267215394973754849505809261245 -0.2480742037296295166015625 +0.476617088913917519299445757497 -0.595524463057517938757712272491 -0.375081191956996906622379128748 +0.476617088913917519299445757497 0.595524463057517938757712272491 -0.375081191956996906622379128748 +0.476734793186187721936164507497 -0.193513798713684070929019753748 0.308668792247772216796875 +0.476734793186187721936164507497 0.193513798713684070929019753748 0.308668792247772216796875 +0.476744955778121981548878238755 -0.0721600003540515955169354356258 0.264588506519794486315788617503 +0.476744955778121981548878238755 0.0721600003540515955169354356258 0.264588506519794486315788617503 +0.476800259947776750024672764994 -0.424622449278831470831363503748 -0.703460761904716513903679242503 +0.476800259947776750024672764994 0.424622449278831470831363503748 -0.703460761904716513903679242503 +0.476868009567260775494190738755 -0.26587200164794921875 0.5847303867340087890625 +0.476868009567260775494190738755 0.26587200164794921875 0.5847303867340087890625 +0.477049303054809525903579014994 -0.452786606550216630395766514994 0.239600193500518782174779630623 +0.477049303054809525903579014994 0.452786606550216630395766514994 0.239600193500518782174779630623 +0.477148687839508034436164507497 -0.485645294189453069488848768742 -0.162719897925853729248046875 +0.477148687839508034436164507497 0.485645294189453069488848768742 -0.162719897925853729248046875 +0.4771521091461181640625 -0.300723293423652671130241742503 0.701349323987960793225227007497 +0.4771521091461181640625 0.300723293423652671130241742503 0.701349323987960793225227007497 +0.477348208427429143707598768742 -0.311122691631317116467414507497 0.406621581315994240490852007497 +0.477348208427429143707598768742 0.311122691631317116467414507497 0.406621581315994240490852007497 +0.477497792243957552837940738755 -0.380064097046852122918636496252 0.223713098466396337338224498126 +0.477497792243957552837940738755 0.380064097046852122918636496252 0.223713098466396337338224498126 +0.477755212783813498766960492503 -0.347105598449707064556690738755 -0.539692020416259743420539507497 +0.477755212783813498766960492503 0.347105598449707064556690738755 -0.539692020416259743420539507497 +0.47786025702953338623046875 -0.56845124065876007080078125 0.1049407459795475006103515625 +0.47786025702953338623046875 0.56845124065876007080078125 0.1049407459795475006103515625 +0.477932882308959972039730246252 -0.485559123754501331671207253748 -0.50824476778507232666015625 +0.477932882308959972039730246252 0.485559123754501331671207253748 -0.50824476778507232666015625 +0.4780785143375396728515625 -0.0203210003674030303955078125 0.1450105011463165283203125 +0.4780785143375396728515625 0.0203210003674030303955078125 0.1450105011463165283203125 +0.478115627169609036517528011245 -0.136852544546127302682592130623 -0.689330434799194313733039507497 +0.478115627169609036517528011245 0.136852544546127302682592130623 -0.689330434799194313733039507497 +0.47818438708782196044921875 -0.580374011397361777575554242503 -0.580522197484970026160056022491 +0.47818438708782196044921875 0.580374011397361777575554242503 -0.580522197484970026160056022491 +0.4783860146999359130859375 -0.0407500006258487701416015625 -0.1395924985408782958984375 +0.4783860146999359130859375 0.0407500006258487701416015625 -0.1395924985408782958984375 +0.478452697396278436858807481258 -0.0987761482596397483169070596887 -0.252639199793338820043686610006 +0.478452697396278436858807481258 0.0987761482596397483169070596887 -0.252639199793338820043686610006 +0.47846281528472900390625 -0.317477989196777332647769753748 -0.174013799428939824887052623126 +0.47846281528472900390625 0.317477989196777332647769753748 -0.174013799428939824887052623126 +0.478504002094268798828125 -0.672313988208770751953125 -0.56482601165771484375 +0.478504002094268798828125 0.672313988208770751953125 -0.56482601165771484375 +0.4785200059413909912109375 -0.1005930006504058837890625 -0.104400999844074249267578125 +0.4785200059413909912109375 0.1005930006504058837890625 -0.104400999844074249267578125 +0.478538990020751953125 0 0.57749475538730621337890625 +0.4785687923431396484375 -0.5252935886383056640625 0.367476010322570822985710492503 +0.4785687923431396484375 0.5252935886383056640625 0.367476010322570822985710492503 +0.478624904155731223376335492503 -0.41247503459453582763671875 -0.152586852759122842959627064374 +0.478624904155731223376335492503 0.41247503459453582763671875 -0.152586852759122842959627064374 +0.47864623367786407470703125 -0.1971479952335357666015625 0.5427067279815673828125 +0.47864623367786407470703125 0.1971479952335357666015625 0.5427067279815673828125 +0.478755739331245433465511496252 -0.238635656237602244988948996252 -0.127850799262523656674161998126 +0.478755739331245433465511496252 0.238635656237602244988948996252 -0.127850799262523656674161998126 +0.478768563270568880962940738755 -0.188451255857944505178735994377 -0.397198739647865284307926003748 +0.478768563270568880962940738755 0.188451255857944505178735994377 -0.397198739647865284307926003748 +0.4791980087757110595703125 -0.620235979557037353515625 0.621028006076812744140625 +0.4791980087757110595703125 0.620235979557037353515625 0.621028006076812744140625 +0.479354381561279296875 -0.216497588157653825247095369377 -0.602784013748169034130341970013 +0.479354381561279296875 0.216497588157653825247095369377 -0.602784013748169034130341970013 +0.479365691542625482757244981258 -0.266862747073173534051448996252 0.03863749839365482330322265625 +0.479365691542625482757244981258 0.266862747073173534051448996252 0.03863749839365482330322265625 +0.479484498500823974609375 -0.13734500110149383544921875 -0.0350884981453418731689453125 +0.479484498500823974609375 0.13734500110149383544921875 -0.0350884981453418731689453125 +0.479513114690780672955128238755 -0.267430344223976157458366742503 -0.0323724510148167624046244839064 +0.479513114690780672955128238755 0.267430344223976157458366742503 -0.0323724510148167624046244839064 +0.4795199930667877197265625 -0.20036600530147552490234375 0.85434997081756591796875 +0.4795199930667877197265625 0.20036600530147552490234375 0.85434997081756591796875 +0.47954110801219940185546875 -0.3917463123798370361328125 0.58230102062225341796875 +0.47954110801219940185546875 0.3917463123798370361328125 0.58230102062225341796875 +0.4796265065670013427734375 -0.08031000196933746337890625 0.116227500140666961669921875 +0.4796265065670013427734375 0.08031000196933746337890625 0.116227500140666961669921875 +0.479675304889678966180355246252 -0.171652650833129888363615123126 0.403666886687278736456363503748 +0.479675304889678966180355246252 0.171652650833129888363615123126 0.403666886687278736456363503748 +0.47981311380863189697265625 0 0.438496512174606334344417746252 +0.479928588867187477795539507497 -0.107755798101425173673995061563 -0.343594801425933848992855246252 +0.479928588867187477795539507497 0.107755798101425173673995061563 -0.343594801425933848992855246252 +0.4799830019474029541015625 0 -0.14005850255489349365234375 +0.480006992816925048828125 -0.13685150444507598876953125 0.029408000409603118896484375 +0.480006992816925048828125 0.13685150444507598876953125 0.029408000409603118896484375 +0.480145204067230213507144753748 -0.203470194339752191714509876874 -0.296749806404113747326789507497 +0.480145204067230213507144753748 0.203470194339752191714509876874 -0.296749806404113747326789507497 +0.480155640840530417712272992503 -0.31571085751056671142578125 0.303772293031215667724609375 +0.480155640840530417712272992503 0.31571085751056671142578125 0.303772293031215667724609375 +0.480232352018356345446647992503 -0.348907658457756064684929242503 0.264839898049831379278629128748 +0.480232352018356345446647992503 0.348907658457756064684929242503 0.264839898049831379278629128748 +0.480418395996093761102230246252 -0.485457611083984386102230246252 0.416567993164062511102230246252 +0.480418395996093761102230246252 0.485457611083984386102230246252 0.416567993164062511102230246252 +0.48042301833629608154296875 -0.225940503180027008056640625 -0.52975876629352569580078125 +0.48042301833629608154296875 0.225940503180027008056640625 -0.52975876629352569580078125 +0.480426374077796924932926003748 -0.113765352964401239566072376874 -0.811632472276687555456931022491 +0.480426374077796924932926003748 0.113765352964401239566072376874 -0.811632472276687555456931022491 +0.4804835021495819091796875 -0.119336999952793121337890625 -0.069960497319698333740234375 +0.4804835021495819091796875 0.119336999952793121337890625 -0.069960497319698333740234375 +0.480593383312225341796875 -0.349170005321502663342414507497 0.0843215972185134832184161268742 +0.480593383312225341796875 0.349170005321502663342414507497 0.0843215972185134832184161268742 +0.48063075542449951171875 -0.568988263607025146484375 -0.0880124978721141815185546875 +0.48063075542449951171875 0.568988263607025146484375 -0.0880124978721141815185546875 +0.480926614999771129266292746252 -0.665933367609977677759047764994 0.218500156700611097848607755623 +0.480926614999771129266292746252 0.665933367609977677759047764994 0.218500156700611097848607755623 +0.4812232553958892822265625 -0.49012126028537750244140625 0.301173739135265350341796875 +0.4812232553958892822265625 0.49012126028537750244140625 0.301173739135265350341796875 +0.481392556428909268451121761245 -0.253081905841827381475894753748 0.778916415572166398462172764994 +0.481392556428909268451121761245 0.253081905841827381475894753748 0.778916415572166398462172764994 +0.4815309941768646240234375 -0.792648017406463623046875 0.3739469945430755615234375 +0.4815309941768646240234375 0.792648017406463623046875 0.3739469945430755615234375 +0.481559002399444546771434261245 -0.0699737012386321965973223768742 -0.696925213932991005627570757497 +0.481559002399444546771434261245 0.0699737012386321965973223768742 -0.696925213932991005627570757497 +0.481582492589950506012286268742 -0.421049314737319935186832253748 0.284246200323104825091746761245 +0.481582492589950506012286268742 0.421049314737319935186832253748 0.284246200323104825091746761245 +0.481615006923675537109375 -0.4009650051593780517578125 0.779277980327606201171875 +0.481615006923675537109375 0.4009650051593780517578125 0.779277980327606201171875 +0.481732320785522416528579014994 -0.34999789297580718994140625 0.368015182018279984887954014994 +0.481732320785522416528579014994 0.34999789297580718994140625 0.368015182018279984887954014994 +0.481778553128242525982471988755 -0.159458754956722265072599498126 -0.212043152749538443835319867503 +0.481778553128242525982471988755 0.159458754956722265072599498126 -0.212043152749538443835319867503 +0.482030403614044145044204014994 -0.350213384628295876233039507497 -0.0706913977861404335678585653113 +0.482030403614044145044204014994 0.350213384628295876233039507497 -0.0706913977861404335678585653113 +0.4820609986782073974609375 -0.0996640026569366455078125 0.0876609981060028076171875 +0.4820609986782073974609375 0.0996640026569366455078125 0.0876609981060028076171875 +0.4821879863739013671875 -0.118541501462459564208984375 0.058674998581409454345703125 +0.4821879863739013671875 0.118541501462459564208984375 0.058674998581409454345703125 +0.4823520183563232421875 -0.618060016632080100329460492503 0.159179198741912858450220369377 +0.4823520183563232421875 0.618060016632080100329460492503 0.159179198741912858450220369377 +0.482834815979003850738848768742 0 0.5068238079547882080078125 +0.482838606834411598889289507497 -0.2906616032123565673828125 -0.205870807170867919921875 +0.482838606834411598889289507497 0.2906616032123565673828125 -0.205870807170867919921875 +0.48287098109722137451171875 -0.099941253662109375 0.5651077330112457275390625 +0.48287098109722137451171875 0.099941253662109375 0.5651077330112457275390625 +0.482892894744873013568309261245 -0.1849043071269989013671875 0.471831518411636341436832253748 +0.482892894744873013568309261245 0.1849043071269989013671875 0.471831518411636341436832253748 +0.483138626813888527600227007497 -0.0392330983653664602806010464064 -0.817030420899391152111945757497 +0.483138626813888527600227007497 0.0392330983653664602806010464064 -0.817030420899391152111945757497 +0.483146989345550503802684261245 -0.386715710163116455078125 0.32713939249515533447265625 +0.483146989345550503802684261245 0.386715710163116455078125 0.32713939249515533447265625 +0.483198639750480662957698996252 0 -0.699298414587974481726462272491 +0.483238261938095159386818977509 -0.0607106480747461388358665601572 -0.255528900027275129858139735006 +0.483238261938095159386818977509 0.0607106480747461388358665601572 -0.255528900027275129858139735006 +0.483252310752868674548210492503 -0.27688859403133392333984375 -0.706965279579162664269631477509 +0.483252310752868674548210492503 0.27688859403133392333984375 -0.706965279579162664269631477509 +0.483355271816253651007144753748 -0.783916237950324945593649772491 0.233117652684450143985017689374 +0.483355271816253651007144753748 0.783916237950324945593649772491 0.233117652684450143985017689374 +0.483495637774467523772869981258 -0.154174354672431956903011496252 0.212042595446109788381860994377 +0.483495637774467523772869981258 0.154174354672431956903011496252 0.212042595446109788381860994377 +0.4840424060821533203125 -0.562323188781738259045539507497 -0.299157595634460482525440738755 +0.4840424060821533203125 0.562323188781738259045539507497 -0.299157595634460482525440738755 +0.48408450186252593994140625 -0.525464236736297607421875 -0.2281432449817657470703125 +0.48408450186252593994140625 0.525464236736297607421875 -0.2281432449817657470703125 +0.484201884269714388775440738755 -0.0861698500812053680419921875 0.42499794065952301025390625 +0.484201884269714388775440738755 0.0861698500812053680419921875 0.42499794065952301025390625 +0.484341922402381885870426003748 -0.557835450768470741955695757497 -0.420396395027637481689453125 +0.484341922402381885870426003748 0.557835450768470741955695757497 -0.420396395027637481689453125 +0.484355509281158447265625 -0.0402860008180141448974609375 0.1173734962940216064453125 +0.484355509281158447265625 0.0402860008180141448974609375 0.1173734962940216064453125 +0.484425026178359974249332253748 -0.674490594863891623766960492503 0.346979704499244701043636496252 +0.484425026178359974249332253748 0.674490594863891623766960492503 0.346979704499244701043636496252 +0.48442648351192474365234375 -0.4160527288913726806640625 0.39335851371288299560546875 +0.48442648351192474365234375 0.4160527288913726806640625 0.39335851371288299560546875 +0.48444901406764984130859375 -0.4543042480945587158203125 0.3484492599964141845703125 +0.48444901406764984130859375 0.4543042480945587158203125 0.3484492599964141845703125 +0.4844590127468109130859375 -0.516115009784698486328125 -0.706345975399017333984375 +0.4844590127468109130859375 0.516115009784698486328125 -0.706345975399017333984375 +0.484546536207199063372996761245 -0.776644927263259843286391514994 -0.254042340815067269055305132497 +0.484546536207199063372996761245 0.776644927263259843286391514994 -0.254042340815067269055305132497 +0.484727779030799832415965511245 -0.663171675801277116235610264994 -0.218500156700611097848607755623 +0.484727779030799832415965511245 0.663171675801277116235610264994 -0.218500156700611097848607755623 +0.484950006008148193359375 -0.780201017856597900390625 -0.3951080143451690673828125 +0.484950006008148193359375 0.780201017856597900390625 -0.3951080143451690673828125 +0.485083186626434292865184261245 -0.066229797899723052978515625 -0.346854615211486805304019753748 +0.485083186626434292865184261245 0.066229797899723052978515625 -0.346854615211486805304019753748 +0.4850960075855255126953125 -0.0613995008170604705810546875 -0.10446099936962127685546875 +0.4850960075855255126953125 0.0613995008170604705810546875 -0.10446099936962127685546875 +0.485340303182601962017628238755 -0.5711165964603424072265625 -0.498267906904220569952457253748 +0.485340303182601962017628238755 0.5711165964603424072265625 -0.498267906904220569952457253748 +0.48541080951690673828125 -0.352669787406921397820980246252 0 +0.48541080951690673828125 0.352669787406921397820980246252 0 +0.485501503944397005962940738755 -0.03616634942591190338134765625 0.255890803039073966296257367503 +0.485501503944397005962940738755 0.03616634942591190338134765625 0.255890803039073966296257367503 +0.485518580675125099865852007497 -0.295650604367256153448551003748 -0.408487820625305142474559261245 +0.485518580675125099865852007497 0.295650604367256153448551003748 -0.408487820625305142474559261245 +0.485562586784362759662059261245 -0.117846599221229544895983565311 0.332176816463470470086605246252 +0.485562586784362759662059261245 0.117846599221229544895983565311 0.332176816463470470086605246252 +0.485603392124176025390625 -0.219615000486373890264957253748 0.275605791807174649310496761245 +0.485603392124176025390625 0.219615000486373890264957253748 0.275605791807174649310496761245 +0.485635185241699185443309261245 -0.0395927980542182880729917826557 0.350129985809326138568309261245 +0.485635185241699185443309261245 0.0395927980542182880729917826557 0.350129985809326138568309261245 +0.48569548130035400390625 -0.41388975083827972412109375 -0.39407475292682647705078125 +0.48569548130035400390625 0.41388975083827972412109375 -0.39407475292682647705078125 +0.485712689161300725793068977509 -0.0226864006370306042770224053129 -0.257037553191185041967514735006 +0.485712689161300725793068977509 0.0226864006370306042770224053129 -0.257037553191185041967514735006 +0.485935509204864501953125 0 0.11775650084018707275390625 +0.485962390899658203125 -0.617471218109130859375 -0.150232803821563731805355246252 +0.485962390899658203125 0.617471218109130859375 -0.150232803821563731805355246252 +0.486185491085052490234375 -0.116720996797084808349609375 0 +0.486185491085052490234375 0.116720996797084808349609375 0 +0.486712783575057927887286268742 -0.0929543972015380859375 0.494439387321472134662059261245 +0.486712783575057927887286268742 0.0929543972015380859375 0.494439387321472134662059261245 +0.486737340688705499847088731258 -0.244174695014953646587940738755 0.0772370509803295135498046875 +0.486737340688705499847088731258 0.244174695014953646587940738755 0.0772370509803295135498046875 +0.48694531619548797607421875 -0.497901630401611283716079014994 0.646126335859298683850227007497 +0.48694531619548797607421875 0.497901630401611283716079014994 0.646126335859298683850227007497 +0.486991411447525002209602007497 -0.493128985166549627106036268742 0.098301701247692108154296875 +0.486991411447525002209602007497 0.493128985166549627106036268742 0.098301701247692108154296875 +0.4870850145816802978515625 -0.8480269908905029296875 -0.208802998065948486328125 +0.4870850145816802978515625 0.8480269908905029296875 -0.208802998065948486328125 +0.4870867431163787841796875 -0.57030375301837921142578125 0 +0.4870867431163787841796875 0.57030375301837921142578125 0 +0.487115359306335427014289507497 -0.659086248278617836682258257497 -0.480440643429756120141860264994 +0.487115359306335427014289507497 0.659086248278617836682258257497 -0.480440643429756120141860264994 +0.487199702858924887927116742503 -0.248115408420562760793970369377 -0.351533001661300692486378238755 +0.487199702858924887927116742503 0.248115408420562760793970369377 -0.351533001661300692486378238755 +0.487279009819030772820980246252 -0.386679816246032703741519753748 -0.188514949381351465396150501874 +0.487279009819030772820980246252 0.386679816246032703741519753748 -0.188514949381351465396150501874 +0.487397718429565418585269753748 -0.553906792402267478259147992503 0.515393114089965798108039507497 +0.487397718429565418585269753748 0.553906792402267478259147992503 0.515393114089965798108039507497 +0.487423288822174061163394753748 -0.42027439177036285400390625 0.09103834629058837890625 +0.487423288822174061163394753748 0.42027439177036285400390625 0.09103834629058837890625 +0.48750400543212890625 -0.85533702373504638671875 0.17532299458980560302734375 +0.48750400543212890625 0.85533702373504638671875 0.17532299458980560302734375 +0.487719637155532903527443977509 -0.245835147798061398605184990629 -0.0647668991237878854949627793758 +0.487719637155532903527443977509 0.245835147798061398605184990629 -0.0647668991237878854949627793758 +0.4877622127532958984375 -0.0247488006949424729774555942186 -0.3485333919525146484375 +0.4877622127532958984375 0.0247488006949424729774555942186 -0.3485333919525146484375 +0.487790611386299199914162727509 -0.0948914974927902304946414346887 0.235703043639659909347372490629 +0.487790611386299199914162727509 0.0948914974927902304946414346887 0.235703043639659909347372490629 +0.487801301479339588507144753748 -0.354404389858245849609375 -0.355594420433044400287059261245 +0.487801301479339588507144753748 0.354404389858245849609375 -0.355594420433044400287059261245 +0.487995314598083484991519753748 -0.428597098588943514752003238755 -0.623029518127441450658920985006 +0.487995314598083484991519753748 0.428597098588943514752003238755 -0.623029518127441450658920985006 +0.488035118579864479748664507497 -0.459395986795425370630141514994 -0.20193459093570709228515625 +0.488035118579864479748664507497 0.459395986795425370630141514994 -0.20193459093570709228515625 +0.488217055797576904296875 -0.225688610970973951852514005623 0.658186444640159629138054242503 +0.488217055797576904296875 0.225688610970973951852514005623 0.658186444640159629138054242503 +0.4883280098438262939453125 -0.02065050043165683746337890625 -0.10540150105953216552734375 +0.4883280098438262939453125 0.02065050043165683746337890625 -0.10540150105953216552734375 +0.4884560108184814453125 -0.0805020034313201904296875 -0.070215500891208648681640625 +0.4884560108184814453125 0.0805020034313201904296875 -0.070215500891208648681640625 +0.4885055124759674072265625 -0.0605955012142658233642578125 0.08769600093364715576171875 +0.4885055124759674072265625 0.0605955012142658233642578125 0.08769600093364715576171875 +0.488559594750404335705695757497 -0.441366735100746143682926003748 0.53759185969829559326171875 +0.488559594750404335705695757497 0.441366735100746143682926003748 0.53759185969829559326171875 +0.488600733876228376928452235006 -0.177175906300544749871761496252 0.179938557744026200735376619377 +0.488600733876228376928452235006 0.177175906300544749871761496252 0.179938557744026200735376619377 +0.488645410537719704358039507497 -0.324388790130615223272769753748 0.126482400298118580206363503748 +0.488645410537719704358039507497 0.324388790130615223272769753748 0.126482400298118580206363503748 +0.4888199865818023681640625 -0.099111996591091156005859375 -0.0350989997386932373046875 +0.4888199865818023681640625 0.099111996591091156005859375 -0.0350989997386932373046875 +0.4889605343341827392578125 -0.143073446303606049978540681877 -0.403667545318603548931690738755 +0.4889605343341827392578125 0.143073446303606049978540681877 -0.403667545318603548931690738755 +0.489021003246307373046875 -0.066740997135639190673828125 0.8697149753570556640625 +0.489021003246307373046875 0.066740997135639190673828125 0.8697149753570556640625 +0.489048445224761985095085492503 -0.181831094622612016165064119377 -0.173980394005775473864616742503 +0.489048445224761985095085492503 0.181831094622612016165064119377 -0.173980394005775473864616742503 +0.489097017049789417608707253748 -0.183082190155982954538060880623 -0.466117393970489457544204014994 +0.489097017049789417608707253748 0.183082190155982954538060880623 -0.466117393970489457544204014994 +0.489242660999298140112045985006 -0.211159643530845653192073996252 0.3722270429134368896484375 +0.489242660999298140112045985006 0.211159643530845653192073996252 0.3722270429134368896484375 +0.489291012287139892578125 -0.0986360013484954833984375 0.02941399998962879180908203125 +0.489291012287139892578125 0.0986360013484954833984375 0.02941399998962879180908203125 +0.489317396283149741442741742503 -0.302673153579235076904296875 -0.302418999373912811279296875 +0.489317396283149741442741742503 0.302673153579235076904296875 -0.302418999373912811279296875 +0.489388203620910622326789507497 -0.493664503097534124176348768742 -0.0824312977492809295654296875 +0.489388203620910622326789507497 0.493664503097534124176348768742 -0.0824312977492809295654296875 +0.489476668834686323705795985006 -0.420816484093666065557926003748 -0.0763301499187946375091229356258 +0.489476668834686323705795985006 0.420816484093666065557926003748 -0.0763301499187946375091229356258 +0.49001801013946533203125 -0.8697249889373779296875 0.0588279999792575836181640625 +0.49001801013946533203125 0.8697249889373779296875 0.0588279999792575836181640625 +0.490054410696029729699318977509 -0.249692851305007956774772992503 0 +0.490054410696029729699318977509 0.249692851305007956774772992503 0 +0.4900654852390289306640625 -0.079805500805377960205078125 0.0588789992034435272216796875 +0.4900654852390289306640625 0.079805500805377960205078125 0.0588789992034435272216796875 +0.490127992630004893914730246252 -0.315306401252746615337940738755 0.5480480194091796875 +0.490127992630004893914730246252 0.315306401252746615337940738755 0.5480480194091796875 +0.490384286642074562756477007497 -0.356280407309532143322883257497 -0.731496188044547968054587272491 +0.490384286642074562756477007497 0.356280407309532143322883257497 -0.731496188044547968054587272491 +0.490531265735626276214276231258 -0.121062695980072035362162807814 -0.217308850586414359362663617503 +0.490531265735626276214276231258 0.121062695980072035362162807814 -0.217308850586414359362663617503 +0.4906330108642578125 -0.868534028530120849609375 -0.070197999477386474609375 +0.4906330108642578125 0.868534028530120849609375 -0.070197999477386474609375 +0.490884891152381930279346988755 -0.219870758056640636102230246252 0.114841099828481688072123745314 +0.490884891152381930279346988755 0.219870758056640636102230246252 0.114841099828481688072123745314 +0.490963196754455544201789507497 -0.163957196474075306280582253748 -0.303435587882995572162059261245 +0.490963196754455544201789507497 0.163957196474075306280582253748 -0.303435587882995572162059261245 +0.491240745782852206158253238755 -0.198873957991600042172208873126 0.147076603770256053582698996252 +0.491240745782852206158253238755 0.198873957991600042172208873126 0.147076603770256053582698996252 +0.491353797912597645147769753748 -0.229029607772827131784154630623 -0.257131791114807106701789507497 +0.491353797912597645147769753748 0.229029607772827131784154630623 -0.257131791114807106701789507497 +0.491487979888916015625 -0.628719186782837002880341970013 0.0561415970325470012336488423443 +0.491487979888916015625 0.628719186782837002880341970013 0.0561415970325470012336488423443 +0.4915460050106048583984375 -0.662838995456695556640625 0.564824998378753662109375 +0.4915460050106048583984375 0.662838995456695556640625 0.564824998378753662109375 +0.491627991199493408203125 -0.2746889889240264892578125 -0.826345980167388916015625 +0.491627991199493408203125 0.2746889889240264892578125 -0.826345980167388916015625 +0.4916903972625732421875 -0.327062988281249966693309261245 -0.1061604022979736328125 +0.4916903972625732421875 0.327062988281249966693309261245 -0.1061604022979736328125 +0.49169099330902099609375 -0.02033849991858005523681640625 0.088466502726078033447265625 +0.49169099330902099609375 0.02033849991858005523681640625 0.088466502726078033447265625 +0.491715914011001620220753238755 -0.734608823060989402087272992503 0.169011904299259191342130748126 +0.491715914011001620220753238755 0.734608823060989402087272992503 0.169011904299259191342130748126 +0.491785222291946433337272992503 -0.669142806529998801501335492503 -0.346980589628219593389957253748 +0.491785222291946433337272992503 0.669142806529998801501335492503 -0.346980589628219593389957253748 +0.491803216934204145971420985006 -0.160948002338409446032585492503 -0.6101024150848388671875 +0.491803216934204145971420985006 0.160948002338409446032585492503 -0.6101024150848388671875 +0.491872215270996060443309261245 -0.244969797134399397409154630623 0.240938401222228981701789507497 +0.491872215270996060443309261245 0.244969797134399397409154630623 0.240938401222228981701789507497 +0.491933736205101057592514735006 0 0.245968244969844845870809990629 +0.4920044839382171630859375 -0.54397349059581756591796875 0.1566014997661113739013671875 +0.4920044839382171630859375 0.54397349059581756591796875 0.1566014997661113739013671875 +0.492189598083496104852230246252 -0.053367197513580322265625 0.628411197662353537829460492503 +0.492189598083496104852230246252 0.053367197513580322265625 0.628411197662353537829460492503 +0.4924824237823486328125 -0.158863198757171641961605246252 0.610101604461669944079460492503 +0.4924824237823486328125 0.158863198757171641961605246252 0.610101604461669944079460492503 +0.492629623413085970806690738755 -0.628571987152099609375 -0.047052800655364990234375 +0.492629623413085970806690738755 0.628571987152099609375 -0.047052800655364990234375 +0.49263824522495269775390625 -0.244145996868610382080078125 0.51009826362133026123046875 +0.49263824522495269775390625 0.244145996868610382080078125 0.51009826362133026123046875 +0.492819976806640636102230246252 -0.423303222656250033306690738755 -0.466843986511230490954460492503 +0.492819976806640636102230246252 0.423303222656250033306690738755 -0.466843986511230490954460492503 +0.492880010604858420641960492503 -0.528704023361206032483039507497 -0.342843198776245139391960492503 +0.492880010604858420641960492503 0.528704023361206032483039507497 -0.342843198776245139391960492503 +0.49303199350833892822265625 -0.1743382550776004791259765625 -0.5376112461090087890625 +0.49303199350833892822265625 0.1743382550776004791259765625 -0.5376112461090087890625 +0.49305498600006103515625 -0.749783992767333984375 0.4412719905376434326171875 +0.49305498600006103515625 0.749783992767333984375 0.4412719905376434326171875 +0.493158066272735617907585492503 -0.202682143449783330746427623126 -0.134962302446365367547542746252 +0.493158066272735617907585492503 0.202682143449783330746427623126 -0.134962302446365367547542746252 +0.493163225054740916863948996252 -0.288322550058364879266292746252 -0.629412260651588395532485264994 +0.493163225054740916863948996252 0.288322550058364879266292746252 -0.629412260651588395532485264994 +0.493170583248138394427684261245 -0.297863405942916881219417746252 0.167511606216430658511384876874 +0.493170583248138394427684261245 0.297863405942916881219417746252 0.167511606216430658511384876874 +0.49335479736328125 -0.6335820257663726806640625 0.406417509913444552349659488755 +0.49335479736328125 0.6335820257663726806640625 0.406417509913444552349659488755 +0.4933575093746185302734375 -0.041161000728607177734375 -0.0700294971466064453125 +0.4933575093746185302734375 0.041161000728607177734375 -0.0700294971466064453125 +0.493435800075531061370526231258 -0.222985953092575100997763115629 -0.0964276470243930899917117471887 +0.493435800075531061370526231258 0.222985953092575100997763115629 -0.0964276470243930899917117471887 +0.493570804595947265625 -0.155933994054794300421207253748 0.303434407711029030529914507497 +0.493570804595947265625 0.155933994054794300421207253748 0.303434407711029030529914507497 +0.49360048770904541015625 -0.730951201915741033410256477509 -0.179077497124671941586271373126 +0.49360048770904541015625 0.730951201915741033410256477509 -0.179077497124671941586271373126 +0.4937205016613006591796875 -0.358705767989158652575554242503 -0.2237637937068939208984375 +0.4937205016613006591796875 0.358705767989158652575554242503 -0.2237637937068939208984375 +0.493759894371032681537059261245 -0.63353645801544189453125 0.278087697923183441162109375 +0.493759894371032681537059261245 0.63353645801544189453125 0.278087697923183441162109375 +0.493844509124755859375 -0.07821600139141082763671875 0 +0.493844509124755859375 0.07821600139141082763671875 0 +0.49412548542022705078125 -0.49566073715686798095703125 -0.269555993378162384033203125 +0.49412548542022705078125 0.49566073715686798095703125 -0.269555993378162384033203125 +0.494264531135559126440170985006 -0.422140565514564525262386496252 0 +0.494264531135559126440170985006 0.422140565514564525262386496252 0 +0.494381237030029285772769753748 -0.428572568297386158331363503748 -0.542597508430480934826789507497 +0.494381237030029285772769753748 0.428572568297386158331363503748 -0.542597508430480934826789507497 +0.49444650113582611083984375 -0.2980079948902130126953125 -0.47876250743865966796875 +0.49444650113582611083984375 0.2980079948902130126953125 -0.47876250743865966796875 +0.494501680135726873199786268742 -0.228148892521858187576455634371 0.439791107177734341693309261245 +0.494501680135726873199786268742 0.228148892521858187576455634371 0.439791107177734341693309261245 +0.494508004188537575451789507497 0 0.339796793460845958367855246252 +0.494559726119041420666633257497 -0.682563605904579095984274772491 0.109626194834709159153796065311 +0.494559726119041420666633257497 0.682563605904579095984274772491 0.109626194834709159153796065311 +0.494730877876281727179019753748 -0.180329404771327972412109375 0.72987842559814453125 +0.494730877876281727179019753748 0.180329404771327972412109375 0.72987842559814453125 +0.494880497455596923828125 -0.0405705012381076812744140625 0.05871500074863433837890625 +0.494880497455596923828125 0.0405705012381076812744140625 0.05871500074863433837890625 +0.494969958066940274310496761245 -0.126845903694629669189453125 0.800883233547210693359375 +0.494969958066940274310496761245 0.126845903694629669189453125 0.800883233547210693359375 +0.494975614547729481085269753748 -0.494974195957183782379473768742 0 +0.494975614547729481085269753748 0.494974195957183782379473768742 0 +0.49500811100006103515625 -0.35964359343051910400390625 0.660017716884613081518295985006 +0.49500811100006103515625 0.35964359343051910400390625 0.660017716884613081518295985006 +0.4950380027294158935546875 0 -0.070267997682094573974609375 +0.4951575100421905517578125 -0.059877000749111175537109375 -0.0351249985396862030029296875 +0.4951575100421905517578125 0.059877000749111175537109375 -0.0351249985396862030029296875 +0.495465588569641068872329014994 -0.2689535915851593017578125 0.205371594429016118832365123126 +0.495465588569641068872329014994 0.2689535915851593017578125 0.205371594429016118832365123126 +0.4955694973468780517578125 -0.05953849852085113525390625 0.0294289998710155487060546875 +0.4955694973468780517578125 0.05953849852085113525390625 0.0294289998710155487060546875 +0.495752418041229270251335492503 -0.249347145855426804983423494377 0.338460835814476002081363503748 +0.495752418041229270251335492503 0.249347145855426804983423494377 0.338460835814476002081363503748 +0.495793950557708751336605246252 0 0.690426093339919999536391514994 +0.495917606353759810033920985006 -0.590168809890747048108039507497 0.213930392265319846423210492503 +0.495917606353759810033920985006 0.590168809890747048108039507497 0.213930392265319846423210492503 +0.496008509397506736071647992503 -0.09850490093231201171875 -0.408378115296363863873096988755 +0.496008509397506736071647992503 0.09850490093231201171875 -0.408378115296363863873096988755 +0.496330279111862171514957253748 -0.681277552247047446520866742503 -0.109626194834709159153796065311 +0.496330279111862171514957253748 0.681277552247047446520866742503 -0.109626194834709159153796065311 +0.496374073624610889776676003748 -0.81000797450542449951171875 0 +0.496374073624610889776676003748 0.81000797450542449951171875 0 +0.496375989913940440789730246252 -0.294810390472412142681690738755 -0.5538032054901123046875 +0.496375989913940440789730246252 0.294810390472412142681690738755 -0.5538032054901123046875 +0.496460253000259421618522992503 -0.117161547392606743556164872189 0.205669748783111588918970369377 +0.496460253000259421618522992503 0.117161547392606743556164872189 0.205669748783111588918970369377 +0.4965175092220306396484375 0 0.058909498155117034912109375 +0.496584880352020252569644753748 -0.430947279930114723889289507497 -0.240182608366012545486611884371 +0.496584880352020252569644753748 0.430947279930114723889289507497 -0.240182608366012545486611884371 +0.496594381332397472039730246252 -0.0982384026050567710219851846887 -0.619469594955444402550881477509 +0.496594381332397472039730246252 0.0982384026050567710219851846887 -0.619469594955444402550881477509 +0.496762737631797846038494981258 -0.0833508498966693961440554971887 -0.220860201120376603567407869377 +0.496762737631797846038494981258 0.0833508498966693961440554971887 -0.220860201120376603567407869377 +0.497042995691299449578792746252 -0.590402698516845680920539507497 0.463005012273788485455128238755 +0.497042995691299449578792746252 0.590402698516845680920539507497 0.463005012273788485455128238755 +0.49712026119232177734375 -0.545967757701873779296875 -0.1314922459423542022705078125 +0.49712026119232177734375 0.545967757701873779296875 -0.1314922459423542022705078125 +0.49731551110744476318359375 -0.801715442538261324756376779987 0.1114824973046779632568359375 +0.49731551110744476318359375 0.801715442538261324756376779987 0.1114824973046779632568359375 +0.497351807355880803918068977509 -0.0585711520165205015708842495314 0.227399697899818425961271373126 +0.497351807355880803918068977509 0.0585711520165205015708842495314 0.227399697899818425961271373126 +0.497753444314002979620426003748 -0.798168149590492204126235264994 -0.132924944907426817453099943123 +0.497753444314002979620426003748 0.798168149590492204126235264994 -0.132924944907426817453099943123 +0.49780575931072235107421875 -0.394859397411346457751335492503 0.137022600322961818353206808752 +0.49780575931072235107421875 0.394859397411346457751335492503 0.137022600322961818353206808752 +0.497901958227157603875667746252 -0.3290897905826568603515625 -0.257476051151752483026058371252 +0.497901958227157603875667746252 0.3290897905826568603515625 -0.257476051151752483026058371252 +0.49810214340686798095703125 -0.128950250148773204461605246252 0.397197461128234896587940738755 +0.49810214340686798095703125 0.128950250148773204461605246252 0.397197461128234896587940738755 +0.498336493968963623046875 -0.020649500191211700439453125 -0.03513149917125701904296875 +0.498336493968963623046875 0.020649500191211700439453125 -0.03513149917125701904296875 +0.498361194133758511615184261245 -0.331449615955352772100894753748 0.0421577990055084228515625 +0.498361194133758511615184261245 0.331449615955352772100894753748 0.0421577990055084228515625 +0.498454785346984841076789507497 -0.0790488034486770546616085653113 0.324490213394165005755809261245 +0.498454785346984841076789507497 0.0790488034486770546616085653113 0.324490213394165005755809261245 +0.49845850467681884765625 -0.0392290018498897552490234375 0 +0.49845850467681884765625 0.0392290018498897552490234375 0 +0.498492130637168906481804242503 -0.0429272990673780427406391879686 0.414924910664558443951221988755 +0.498492130637168906481804242503 0.0429272990673780427406391879686 0.414924910664558443951221988755 +0.498499187827110279425113503748 -0.517847862839698747094985264994 -0.621153724193572953637954014994 +0.498499187827110279425113503748 0.517847862839698747094985264994 -0.621153724193572953637954014994 +0.498512399196624711450454014994 -0.332021391391754128186164507497 -0.0353196009993553133865518134371 +0.498512399196624711450454014994 0.332021391391754128186164507497 -0.0353196009993553133865518134371 +0.498639607429504361224559261245 -0.302522993087768532483039507497 -0.140849402546882634945646373126 +0.498639607429504361224559261245 0.302522993087768532483039507497 -0.140849402546882634945646373126 +0.4987185001373291015625 -0.020337499678134918212890625 0.0294330008327960968017578125 +0.4987185001373291015625 0.020337499678134918212890625 0.0294330008327960968017578125 +0.498782309889793384893863503748 -0.750605455040931679455695757497 0.300511589646339394299445757497 +0.498782309889793384893863503748 0.750605455040931679455695757497 0.300511589646339394299445757497 +0.498905402421951249536391514994 -0.468727684020996071545539507497 0.146245399117469782046541126874 +0.498905402421951249536391514994 0.468727684020996071545539507497 0.146245399117469782046541126874 +0.499093642830848727154346988755 -0.227847950160503409655632367503 0.0386088997125625665862713731258 +0.499093642830848727154346988755 0.227847950160503409655632367503 0.0386088997125625665862713731258 +0.499205300211906455309929242503 -0.228576149046421067678735994377 -0.0323553999885916737655477959379 +0.499205300211906455309929242503 0.228576149046421067678735994377 -0.0323553999885916737655477959379 +0.499278008937835693359375 -0.253414803743362393451121761245 -0.215644794702529896124332253748 +0.499278008937835693359375 0.253414803743362393451121761245 -0.215644794702529896124332253748 +0.499317598342895518914730246252 -0.4925096035003662109375 -0.384858393669128440173210492503 +0.499317598342895518914730246252 0.4925096035003662109375 -0.384858393669128440173210492503 +0.499352008104324285309161268742 -0.13424320518970489501953125 -0.471832895278930630755809261245 +0.499352008104324285309161268742 0.13424320518970489501953125 -0.471832895278930630755809261245 +0.499411815404891989977897992503 -0.214805701375007623843416126874 -0.717249619960784956518295985006 +0.499411815404891989977897992503 0.214805701375007623843416126874 -0.717249619960784956518295985006 +0.499428614974021967132244981258 -0.143850849568843863757194867503 -0.179938557744026200735376619377 +0.499428614974021967132244981258 0.143850849568843863757194867503 -0.179938557744026200735376619377 +0.499431002140045154913394753748 -0.1236594021320343017578125 -0.308669400215148936883480246252 +0.499431002140045154913394753748 0.1236594021320343017578125 -0.308669400215148936883480246252 +0.499443513154983476098891514994 0 0.808119380474090487354033029987 +0.499618116021156299932926003748 -0.687664452195167474890524772491 0 +0.499618116021156299932926003748 0.687664452195167474890524772491 0 +0.4999969899654388427734375 -0.19822399318218231201171875 -0.84303700923919677734375 +0.4999969899654388427734375 0.19822399318218231201171875 -0.84303700923919677734375 +0.5 0 0 +0.50008200109004974365234375 -0.363326244056224822998046875 -0.42474974691867828369140625 +0.50008200109004974365234375 0.363326244056224822998046875 -0.42474974691867828369140625 +0.500132977962493896484375 -0.738882005214691162109375 -0.4515750110149383544921875 +0.500132977962493896484375 0.738882005214691162109375 -0.4515750110149383544921875 +0.500188779830932683800881477509 -0.363407206535339366570980246252 0.507687997817993230675881477509 +0.500188779830932683800881477509 0.363407206535339366570980246252 0.507687997817993230675881477509 +0.500253582000732444079460492503 -0.0330408006906509413291850307814 -0.6234223842620849609375 +0.500253582000732444079460492503 0.0330408006906509413291850307814 -0.6234223842620849609375 +0.500274002552032470703125 -0.4642100036144256591796875 0.73091399669647216796875 +0.500274002552032470703125 0.4642100036144256591796875 0.73091399669647216796875 +0.500574791431427024157585492503 -0.0452325493097305367240501539072 -0.223335742950439480880575615629 +0.500574791431427024157585492503 0.0452325493097305367240501539072 -0.223335742950439480880575615629 +0.500605291128158547131477007497 -0.205901809036731719970703125 -0.3598594963550567626953125 +0.500605291128158547131477007497 0.205901809036731719970703125 -0.3598594963550567626953125 +0.500639733672142095421975227509 -0.05345664918422698974609375 -0.411098998785018932000667746252 +0.500639733672142095421975227509 0.05345664918422698974609375 -0.411098998785018932000667746252 +0.500807249546051047595085492503 -0.479832628369331326556590511245 0.491378182172775235247996761245 +0.500807249546051047595085492503 0.479832628369331326556590511245 0.491378182172775235247996761245 +0.500818294286727860864516514994 -0.631969067454338007117087272491 -0.2688796520233154296875 +0.500818294286727860864516514994 0.631969067454338007117087272491 -0.2688796520233154296875 +0.500833594799041770251335492503 -0.113109505921602251921065374063 0.677400696277618341589743522491 +0.500833594799041770251335492503 0.113109505921602251921065374063 0.677400696277618341589743522491 +0.501273912191391057824318977509 -0.745602285861968971936164507497 0.052934400737285614013671875 +0.501273912191391057824318977509 0.745602285861968971936164507497 0.052934400737285614013671875 +0.50134648382663726806640625 -0.1487520039081573486328125 0.53760977089405059814453125 +0.50134648382663726806640625 0.1487520039081573486328125 0.53760977089405059814453125 +0.501372992992401123046875 -0.702042996883392333984375 0.505726993083953857421875 +0.501372992992401123046875 0.702042996883392333984375 0.505726993083953857421875 +0.50157599151134490966796875 -0.0499530024826526641845703125 0.5553614795207977294921875 +0.50157599151134490966796875 0.0499530024826526641845703125 0.5553614795207977294921875 +0.5015822350978851318359375 -0.397099944949150074346988503748 -0.115007102489471435546875 +0.5015822350978851318359375 0.397099944949150074346988503748 -0.115007102489471435546875 +0.5017350018024444580078125 -0.46325401961803436279296875 -0.310092754662036895751953125 +0.5017350018024444580078125 0.46325401961803436279296875 -0.310092754662036895751953125 +0.501828324794769353722756477509 -0.744432306289672829358039507497 -0.0631592966616153772552166856258 +0.501828324794769353722756477509 0.744432306289672829358039507497 -0.0631592966616153772552166856258 +0.501860299706459067614616742503 -0.542580160498619012976462272491 0.59686122834682464599609375 +0.501860299706459067614616742503 0.542580160498619012976462272491 0.59686122834682464599609375 +0.501895010471343994140625 -0.446970999240875244140625 -0.740485012531280517578125 +0.501895010471343994140625 0.446970999240875244140625 -0.740485012531280517578125 +0.5019300878047943115234375 -0.250756093859672513080028011245 -0.418553805351257302014289507497 +0.5019300878047943115234375 0.250756093859672513080028011245 -0.418553805351257302014289507497 +0.5020503997802734375 -0.591107177734375044408920985006 -0.196309602260589605160490123126 +0.5020503997802734375 0.591107177734375044408920985006 -0.196309602260589605160490123126 +0.502227008342742919921875 -0.364885193109512340203792746252 -0.651634204387664839330795985006 +0.502227008342742919921875 0.364885193109512340203792746252 -0.651634204387664839330795985006 +0.502276501059532254345185720013 0 -0.224095298349857335873380748126 +0.502341443300247214587272992503 0 -0.412496498227119479107471988755 +0.502527287602424710399873220013 -0.140347345173358922787443248126 0.173979853093624126092464621252 +0.502527287602424710399873220013 0.140347345173358922787443248126 0.173979853093624126092464621252 +0.502758210897445656506477007497 -0.400435692071914650647102007497 -0.277281901240348793713508257497 +0.502758210897445656506477007497 0.400435692071914650647102007497 -0.277281901240348793713508257497 +0.502886277437210038598891514994 -0.743643823266029291296774772491 -0.310803897678852081298828125 +0.502886277437210038598891514994 0.743643823266029291296774772491 -0.310803897678852081298828125 +0.503006005287170432360710492503 -0.0465961985290050464958433451557 0.484575718641281072418536268742 +0.503006005287170432360710492503 0.0465961985290050464958433451557 0.484575718641281072418536268742 +0.5031127631664276123046875 -0.1218427531421184539794921875 -0.5427082479000091552734375 +0.5031127631664276123046875 0.1218427531421184539794921875 -0.5427082479000091552734375 +0.503114998340606689453125 -0.51614248752593994140625 0.207297004759311676025390625 +0.503114998340606689453125 0.51614248752593994140625 0.207297004759311676025390625 +0.503264981508254938269431022491 -0.2701328098773956298828125 0.404663008451461747583266514994 +0.503264981508254938269431022491 0.2701328098773956298828125 0.404663008451461747583266514994 +0.503277307748794533459602007497 -0.0600668974220752716064453125 0.743709611892700239721420985006 +0.503277307748794533459602007497 0.0600668974220752716064453125 0.743709611892700239721420985006 +0.5033027827739715576171875 -0.139365099370479583740234375 0.466116017103195168225227007497 +0.5033027827739715576171875 0.139365099370479583740234375 0.466116017103195168225227007497 +0.503335988521575905529914507497 -0.596961799263954095984274772491 0.335840950906276691778629128748 +0.503335988521575905529914507497 0.596961799263954095984274772491 0.335840950906276691778629128748 +0.503351986408233642578125 -0.610920011997222900390625 -0.61107599735260009765625 +0.503351986408233642578125 0.610920011997222900390625 -0.61107599735260009765625 +0.503352606296539328845085492503 -0.182279402017593378237947376874 0.270943808555603016241519753748 +0.503352606296539328845085492503 0.182279402017593378237947376874 0.270943808555603016241519753748 +0.5034287869930267333984375 -0.470622587203979481085269753748 -0.122775100171565995643696567186 +0.5034287869930267333984375 0.470622587203979481085269753748 -0.122775100171565995643696567186 +0.50359426438808441162109375 -0.28963874280452728271484375 0.47434423863887786865234375 +0.50359426438808441162109375 0.28963874280452728271484375 0.47434423863887786865234375 +0.50366055965423583984375 -0.317430143058300029412777121252 0.740313175320625238562399772491 +0.50366055965423583984375 0.317430143058300029412777121252 0.740313175320625238562399772491 +0.503762412071227960730368522491 -0.190063798427581781558259876874 -0.264762604236602749896434261245 +0.503762412071227960730368522491 0.190063798427581781558259876874 -0.264762604236602749896434261245 +0.503764200210571222449118522491 -0.276156592369079578741519753748 -0.1730867922306060791015625 +0.503764200210571222449118522491 0.276156592369079578741519753748 -0.1730867922306060791015625 +0.504203703999519414757912727509 -0.277635806798934958727897992503 0.301988700032234214098991742503 +0.504203703999519414757912727509 0.277635806798934958727897992503 0.301988700032234214098991742503 +0.504516106843948430871193977509 -0.0223520001396536847904084055472 0.217862695455551175216513115629 +0.504516106843948430871193977509 0.0223520001396536847904084055472 0.217862695455551175216513115629 +0.504653388261795066149772992503 -0.630555313825607366418068977509 -0.397144791483879100457698996252 +0.504653388261795066149772992503 0.630555313825607366418068977509 -0.397144791483879100457698996252 +0.504751485586166448449318977509 -0.204459203779697423764005748126 0.0769565470516681698898153740629 +0.504751485586166448449318977509 0.204459203779697423764005748126 0.0769565470516681698898153740629 +0.504809489846229531018195757497 -0.366763812303543101922542746252 0.1820766925811767578125 +0.504809489846229531018195757497 0.366763812303543101922542746252 0.1820766925811767578125 +0.505032563209533713610710492503 -0.165690243244171142578125 -0.141381897032260894775390625 +0.505032563209533713610710492503 0.165690243244171142578125 -0.141381897032260894775390625 +0.505460125207900956567641514994 -0.505656498670577936316306022491 -0.459697863459587074963508257497 +0.505460125207900956567641514994 0.505656498670577936316306022491 -0.459697863459587074963508257497 +0.505508995056152321545539507497 -0.0827700018882751437088174384371 -0.312425386905670177117855246252 +0.505508995056152321545539507497 0.0827700018882751437088174384371 -0.312425386905670177117855246252 +0.505711972713470458984375 -0.11975300312042236328125 -0.85434997081756591796875 +0.505711972713470458984375 0.11975300312042236328125 -0.85434997081756591796875 +0.505754697322845503393295985006 -0.206268702447414409295589621252 -0.0645424984395503997802734375 +0.505754697322845503393295985006 0.206268702447414409295589621252 -0.0645424984395503997802734375 +0.505809009075164794921875 -0.5512575209140777587890625 0.05264849960803985595703125 +0.505809009075164794921875 0.5512575209140777587890625 0.05264849960803985595703125 +0.505920791625976584704460492503 -0.0859088994562625801743038778113 -0.476092380285263017114516514994 +0.505920791625976584704460492503 0.0859088994562625801743038778113 -0.476092380285263017114516514994 +0.505948302149772710656350227509 -0.262176857888698600085319867503 -0.312697444856166850701839621252 +0.505948302149772710656350227509 0.262176857888698600085319867503 -0.312697444856166850701839621252 +0.505971390008926436010483485006 -0.162801100313663488217130748126 0.141381897032260894775390625 +0.505971390008926436010483485006 0.162801100313663488217130748126 0.141381897032260894775390625 +0.506046581268310591283920985006 -0.514121425151825017785256477509 -0.5381415188312530517578125 +0.506046581268310591283920985006 0.514121425151825017785256477509 -0.5381415188312530517578125 +0.506240075826644875256477007497 -0.144902694225311295950220369377 -0.729879283905029319079460492503 +0.506240075826644875256477007497 0.144902694225311295950220369377 -0.729879283905029319079460492503 +0.506490421295166082238381477509 -0.557628011703491188733039507497 0.26929199695587158203125 +0.506490421295166082238381477509 0.557628011703491188733039507497 0.26929199695587158203125 +0.506519979238510109631477007497 -0.368004000186920143811164507497 -0.31305049359798431396484375 +0.506519979238510109631477007497 0.368004000186920143811164507497 -0.31305049359798431396484375 +0.506595635414123557360710492503 -0.184078404307365439684929242503 0.109435699135065081510909124063 +0.506595635414123557360710492503 0.184078404307365439684929242503 0.109435699135065081510909124063 +0.50662051141262054443359375 -0.4290374815464019775390625 -0.348944999277591705322265625 +0.50662051141262054443359375 0.4290374815464019775390625 -0.348944999277591705322265625 +0.506672260165214494165297764994 -0.282489001750946044921875 0.62127603590488433837890625 +0.506672260165214494165297764994 0.282489001750946044921875 0.62127603590488433837890625 +0.50672900676727294921875 -0.2664020061492919921875 0.819912016391754150390625 +0.50672900676727294921875 0.2664020061492919921875 0.819912016391754150390625 +0.506748819351196311266960492503 -0.408961582183837935033920985006 0.46471118927001953125 +0.506748819351196311266960492503 0.408961582183837935033920985006 0.46471118927001953125 +0.506800794601440451891960492503 -0.368208003044128429070980246252 -0.497569608688354536596420985006 +0.506800794601440451891960492503 0.368208003044128429070980246252 -0.497569608688354536596420985006 +0.50680124759674072265625 -0.55109475553035736083984375 -0.044120999984443187713623046875 +0.50680124759674072265625 0.55109475553035736083984375 -0.044120999984443187713623046875 +0.506805738806724637157685720013 -0.0810766011476516806899539346887 0.197673296928405767269865123126 +0.506805738806724637157685720013 0.0810766011476516806899539346887 0.197673296928405767269865123126 +0.506977912783622808312600227509 -0.186562207341194163934261496252 -0.103285052627325069085628683752 +0.506977912783622808312600227509 0.186562207341194163934261496252 -0.103285052627325069085628683752 +0.507048854231834433825554242503 -0.105477353185415276271008622189 -0.185137706995010392629907869377 +0.507048854231834433825554242503 0.105477353185415276271008622189 -0.185137706995010392629907869377 +0.507476192712783769067641514994 -0.311751294136047352179019753748 -0.367803102731704689709602007497 +0.507476192712783769067641514994 0.311751294136047352179019753748 -0.367803102731704689709602007497 +0.507614913582801752234274772491 -0.368799698352813731805355246252 -0.573422771692275956567641514994 +0.507614913582801752234274772491 0.368799698352813731805355246252 -0.573422771692275956567641514994 +0.5077494084835052490234375 -0.414790213108062744140625 0.6165540218353271484375 +0.5077494084835052490234375 0.414790213108062744140625 0.6165540218353271484375 +0.507995402812957741467414507497 -0.30802381038665771484375 0.084035396575927734375 +0.507995402812957741467414507497 0.30802381038665771484375 0.084035396575927734375 +0.5080440044403076171875 -0.117608401179313648565738503748 0.2967486083507537841796875 +0.5080440044403076171875 0.117608401179313648565738503748 0.2967486083507537841796875 +0.508134546875953718725327235006 -0.210473999381065396407919365629 0 +0.508134546875953718725327235006 0.210473999381065396407919365629 0 +0.50819022953510284423828125 -0.06112500093877315521240234375 -0.54818473756313323974609375 +0.50819022953510284423828125 0.06112500093877315521240234375 -0.54818473756313323974609375 +0.508298683166503839636618522491 -0.439817684888839710577457253748 0.195430207252502430304019753748 +0.508298683166503839636618522491 0.439817684888839710577457253748 0.195430207252502430304019753748 +0.50833378732204437255859375 -0.402505990862846385613948996252 0.045670948922634124755859375 +0.50833378732204437255859375 0.402505990862846385613948996252 0.045670948922634124755859375 +0.50847934186458587646484375 -0.55812443792819976806640625 0.390443260967731464727847878748 +0.50847934186458587646484375 0.55812443792819976806640625 0.390443260967731464727847878748 +0.508491742610931440893295985006 -0.170728358626365678274439119377 0.367134931683540333136051003748 +0.508491742610931440893295985006 0.170728358626365678274439119377 0.367134931683540333136051003748 +0.50856697559356689453125 -0.0412979982793331146240234375 -0.860032021999359130859375 +0.50856697559356689453125 0.0412979982793331146240234375 -0.860032021999359130859375 +0.5087950229644775390625 -0.825174987316131591796875 0.24538700282573699951171875 +0.5087950229644775390625 0.825174987316131591796875 0.24538700282573699951171875 +0.508972799777984596936164507497 -0.0394901990890502915809712192186 0.315257406234741188733039507497 +0.508972799777984596936164507497 0.0394901990890502915809712192186 0.315257406234741188733039507497 +0.508974054455757163317741742503 -0.402469611167907748150440738755 -0.0382629010826349286178427178129 +0.508974054455757163317741742503 0.402469611167907748150440738755 -0.0382629010826349286178427178129 +0.508983159065246604235710492503 0 0.404272711277008089947315738755 +0.509018260240554853979233485006 -0.336679199337959311755241742503 0.223713098466396337338224498126 +0.509018260240554853979233485006 0.336679199337959311755241742503 0.223713098466396337338224498126 +0.509028089046478227075454014994 -0.3100048005580902099609375 0.367134612798690751489516514994 +0.509028089046478227075454014994 0.3100048005580902099609375 0.367134612798690751489516514994 +0.509057414531707719262954014994 -0.309670794010162342413394753748 -0.0704585999250411931793536268742 +0.509057414531707719262954014994 0.309670794010162342413394753748 -0.0704585999250411931793536268742 +0.509122592210769608911391514994 -0.0288750011473894105384907504686 -0.479542016983032171051348768742 +0.509122592210769608911391514994 0.0288750011473894105384907504686 -0.479542016983032171051348768742 +0.509167206287383988794204014994 -0.0414840012788772541374449076557 -0.314686810970306374279914507497 +0.509167206287383988794204014994 0.0414840012788772541374449076557 -0.314686810970306374279914507497 +0.509216415882110640112045985006 -0.705105918645858809057358485006 0.231353107094764726126001619377 +0.509216415882110640112045985006 0.705105918645858809057358485006 0.231353107094764726126001619377 +0.5093140304088592529296875 -0.230028687417507177181974498126 -0.640458014607429459985610264994 +0.5093140304088592529296875 0.230028687417507177181974498126 -0.640458014607429459985610264994 +0.509717607498168967516960492503 -0.606347990036010808800881477509 0.111936795711517336759932561563 +0.509717607498168967516960492503 0.606347990036010808800881477509 0.111936795711517336759932561563 +0.509886002540588356701789507497 -0.0740898013114929254729901231258 -0.737920814752578757556022992503 +0.509886002540588356701789507497 0.0740898013114929254729901231258 -0.737920814752578757556022992503 +0.50988601148128509521484375 0 -0.5500147640705108642578125 +0.51002705097198486328125 -0.304477551579475425036491742503 0.263942900300025928839176003748 +0.51002705097198486328125 0.304477551579475425036491742503 0.263942900300025928839176003748 +0.51004898548126220703125 -0.81752097606658935546875 -0.2674129903316497802734375 +0.51004898548126220703125 0.81752097606658935546875 -0.2674129903316497802734375 +0.510099661350250199731704014994 -0.292271293699741363525390625 -0.746241128444671608654914507497 +0.510099661350250199731704014994 0.292271293699741363525390625 -0.746241128444671608654914507497 +0.510388791561126708984375 0 -0.315441584587097145764289507497 +0.5104350149631500244140625 -0.247950755059719085693359375 -0.490384519100189208984375 +0.5104350149631500244140625 0.247950755059719085693359375 -0.490384519100189208984375 +0.510441589355468794408920985006 0 0.615994405746460027550881477509 +0.510444545745849631579460492503 -0.515798711776733420641960492503 0.442603492736816372943309261245 +0.510444545745849631579460492503 0.515798711776733420641960492503 0.442603492736816372943309261245 +0.510554409027099587170539507497 -0.20769059658050537109375 0.237063592672348000256477007497 +0.510554409027099587170539507497 0.20769059658050537109375 0.237063592672348000256477007497 +0.5105559825897216796875 -0.210291194915771501028345369377 0.578887176513671941613381477509 +0.5105559825897216796875 0.210291194915771501028345369377 0.578887176513671941613381477509 +0.511070284247398420873764735006 -0.371311196684837363513054242503 -0.153084748983383173159822376874 +0.511070284247398420873764735006 0.371311196684837363513054242503 -0.153084748983383173159822376874 +0.51112425327301025390625 -0.48512850701808929443359375 0.2567144930362701416015625 +0.51112425327301025390625 0.48512850701808929443359375 0.2567144930362701416015625 +0.5112307369709014892578125 -0.5203342437744140625 -0.1743427477777004241943359375 +0.5112307369709014892578125 0.5203342437744140625 -0.1743427477777004241943359375 +0.511337527632713340075554242503 -0.711962294578552201684829014994 0.366256354749202706067023882497 +0.511337527632713340075554242503 0.711962294578552201684829014994 0.366256354749202706067023882497 +0.511444509029388427734375 -0.3333457410335540771484375 0.43566597998142242431640625 +0.511444509029388427734375 0.3333457410335540771484375 0.43566597998142242431640625 +0.5115543901920318603515625 -0.475283199548721280169871761245 0.0491749979555606842041015625 +0.5115543901920318603515625 0.475283199548721280169871761245 0.0491749979555606842041015625 +0.511585199832916281970085492503 -0.313497591018676746710269753748 0 +0.511585199832916281970085492503 0.313497591018676746710269753748 0 +0.511622089147567793432358485006 0 -0.740433615446090764855568977509 +0.511730039119720481188835492503 -0.160758646577596669979826060626 -0.367135590314865145611378238755 +0.511730039119720481188835492503 0.160758646577596669979826060626 -0.367135590314865145611378238755 +0.512299901247024513928352007497 -0.475238388776779152600227007497 -0.0412013012915849671791157504686 +0.512299901247024513928352007497 0.475238388776779152600227007497 -0.0412013012915849671791157504686 +0.512303653359413080359274772491 -0.60284529626369476318359375 -0.525949457287788413317741742503 +0.512303653359413080359274772491 0.60284529626369476318359375 -0.525949457287788413317741742503 +0.512350285053253196032585492503 -0.0675003986805677441696005303129 -0.188257294893264787161157869377 +0.512350285053253196032585492503 0.0675003986805677441696005303129 -0.188257294893264787161157869377 +0.512451219558715864721420985006 -0.241003203392028825247095369377 -0.565076017379760764391960492503 +0.512451219558715864721420985006 0.241003203392028825247095369377 -0.565076017379760764391960492503 +0.51249901950359344482421875 -0.656688767671585016394431022491 0.169127898663282399960294810626 +0.51249901950359344482421875 0.656688767671585016394431022491 0.169127898663282399960294810626 +0.512574017047882080078125 -0.5241069793701171875 0.68013298511505126953125 +0.512574017047882080078125 0.5241069793701171875 0.68013298511505126953125 +0.512672805786132834704460492503 -0.606920814514160245067841970013 -0.093879997730255126953125 +0.512672805786132834704460492503 0.606920814514160245067841970013 -0.093879997730255126953125 +0.512753009796142578125 -0.693774998188018798828125 -0.505726993083953857421875 +0.512753009796142578125 0.693774998188018798828125 -0.505726993083953857421875 +0.512832623720169133996193977509 -0.590649300813674948962272992503 -0.44512559473514556884765625 +0.512832623720169133996193977509 0.590649300813674948962272992503 -0.44512559473514556884765625 +0.513241177797317482678352007497 -0.702181774377822920385483485006 -0.231353107094764726126001619377 +0.513241177797317482678352007497 0.702181774377822920385483485006 -0.231353107094764726126001619377 +0.513285613059997536389289507497 -0.214934402704238886050447376874 -0.224368196725845320260717130623 +0.513285613059997536389289507497 0.214934402704238886050447376874 -0.224368196725845320260717130623 +0.513304805755615212170539507497 -0.522796010971069313733039507497 0.32125198841094970703125 +0.513304805755615212170539507497 0.522796010971069313733039507497 0.32125198841094970703125 +0.513695058226585454796975227509 -0.103086496889591219816573186563 0.167303948104381566830411998126 +0.513695058226585454796975227509 0.103086496889591219816573186563 0.167303948104381566830411998126 +0.513930293917655989233139735006 -0.0855757452547550173660440009371 0.388655167818069469110042746252 +0.513930293917655989233139735006 0.0855757452547550173660440009371 0.388655167818069469110042746252 +0.514228391647338800574118522491 -0.409299796819686867443977007497 0.240921798348426807745426003748 +0.514228391647338800574118522491 0.409299796819686867443977007497 0.240921798348426807745426003748 +0.514249813556671098169204014994 -0.282548403739929177014289507497 0.12535379827022552490234375 +0.514249813556671098169204014994 0.282548403739929177014289507497 0.12535379827022552490234375 +0.51429505646228790283203125 -0.597468388080596879419204014994 -0.317854945361614238397152121252 +0.51429505646228790283203125 0.597468388080596879419204014994 -0.317854945361614238397152121252 +0.514318189024925320751435720013 -0.127848602831363677978515625 -0.147076603770256053582698996252 +0.514318189024925320751435720013 0.127848602831363677978515625 -0.147076603770256053582698996252 +0.514362609386444069592414507497 -0.148393195867538435495092130623 -0.270944398641586314813167746252 +0.514362609386444069592414507497 0.148393195867538435495092130623 -0.270944398641586314813167746252 +0.514475369453430197985710492503 -0.584679391980171159204360264994 0.544026064872741632605368522491 +0.514475369453430197985710492503 0.584679391980171159204360264994 0.544026064872741632605368522491 +0.514682862162590071264389735006 -0.0445967480540275587608256557814 0.188713791966438310110376619377 +0.514682862162590071264389735006 0.0445967480540275587608256557814 0.188713791966438310110376619377 +0.515062379837036177221420985006 -0.106604003906250008326672684689 0.602781581878662153783920985006 +0.515062379837036177221420985006 0.106604003906250008326672684689 0.602781581878662153783920985006 +0.515106165409088156970085492503 -0.452408048510551441534488503748 -0.657642269134521506579460492503 +0.515106165409088156970085492503 0.452408048510551441534488503748 -0.657642269134521506579460492503 +0.515138411521911643298210492503 -0.2320362031459808349609375 0.201968407630920415707365123126 +0.515138411521911643298210492503 0.2320362031459808349609375 0.201968407630920415707365123126 +0.515442204475402787622329014994 -0.444203883409500066559161268742 -0.164324302971363050973607755623 +0.515442204475402787622329014994 0.444203883409500066559161268742 -0.164324302971363050973607755623 +0.515505638718605108117287727509 -0.187787045538425456658870871252 0.0385973479598760646491761860943 +0.515505638718605108117287727509 0.187787045538425456658870871252 0.0385973479598760646491761860943 +0.515596914291381769324118522491 -0.202947506308555597476228626874 -0.427752488851547207904246761245 +0.515596914291381769324118522491 0.202947506308555597476228626874 -0.427752488851547207904246761245 +0.515651947259903042919404470013 -0.188564205169677756579460492503 -0.0323488004505634307861328125 +0.515651947259903042919404470013 0.188564205169677756579460492503 -0.0323488004505634307861328125 +0.515900012850761480187600227509 -0.0226875009015202536155619839064 -0.189295157790184048751669365629 +0.515900012850761480187600227509 0.0226875009015202536155619839064 -0.189295157790184048751669365629 +0.51598124206066131591796875 -0.45112426578998565673828125 0.30454950034618377685546875 +0.51598124206066131591796875 0.45112426578998565673828125 0.30454950034618377685546875 +0.51614177227020263671875 -0.374997742474079132080078125 0.3943019807338714599609375 +0.51614177227020263671875 0.374997742474079132080078125 0.3943019807338714599609375 +0.51619398593902587890625 -0.375032007694244384765625 -0.769995987415313720703125 +0.51619398593902587890625 0.375032007694244384765625 -0.769995987415313720703125 +0.51621179282665252685546875 -0.289483344554901156353565738755 -0.268747054040431976318359375 +0.51621179282665252685546875 0.289483344554901156353565738755 -0.268747054040431976318359375 +0.5163350403308868408203125 -0.6560631692409515380859375 -0.159622354060411447695955189374 +0.5163350403308868408203125 0.6560631692409515380859375 -0.159622354060411447695955189374 +0.516356801986694313733039507497 -0.560495185852050825658920985006 -0.243352794647216819079460492503 +0.516356801986694313733039507497 0.560495185852050825658920985006 -0.243352794647216819079460492503 +0.516382899880409307336037727509 0 0.189336955547332791427450615629 +0.516462692618370078356804242503 -0.209639948606491099969417746252 0.33439119160175323486328125 +0.516462692618370078356804242503 0.209639948606491099969417746252 0.33439119160175323486328125 +0.516573405265808083264289507497 -0.184856700897216785772769753748 0.434718185663223233294871761245 +0.516573405265808083264289507497 0.184856700897216785772769753748 0.434718185663223233294871761245 +0.516721582412719704358039507497 -0.443789577484130892681690738755 0.419582414627075239721420985006 +0.516721582412719704358039507497 0.443789577484130892681690738755 0.419582414627075239721420985006 +0.5167218148708343505859375 0 0.472227013111114479748664507497 +0.516745615005493208471420985006 -0.484591197967529307977230246252 0.371679210662841819079460492503 +0.516745615005493208471420985006 0.484591197967529307977230246252 0.371679210662841819079460492503 +0.51681840419769287109375 0 0.304792213439941395147769753748 +0.51693570613861083984375 -0.238964411616325395071314119377 0.696903294324874855725227007497 +0.51693570613861083984375 0.238964411616325395071314119377 0.696903294324874855725227007497 +0.516993606090545676501335492503 -0.2857325971126556396484375 -0.10523580014705657958984375 +0.516993606090545676501335492503 0.2857325971126556396484375 -0.10523580014705657958984375 +0.517082405090331986841079014994 -0.255193197727203335833934261245 0.165837603807449329718082253748 +0.517082405090331986841079014994 0.255193197727203335833934261245 0.165837603807449329718082253748 +0.517090690135955766137954014994 -0.3399963080883026123046875 0.32713939249515533447265625 +0.517090690135955766137954014994 0.3399963080883026123046875 0.32713939249515533447265625 +0.517173302173614457544204014994 -0.375746709108352616723891514994 0.285212197899818387103465511245 +0.517173302173614457544204014994 0.375746709108352616723891514994 0.285212197899818387103465511245 +0.517298394441604636462272992503 -0.467329484224319469110042746252 0.5692149102687835693359375 +0.517298394441604636462272992503 0.467329484224319469110042746252 0.5692149102687835693359375 +0.517323017120361328125 0 0.54302550852298736572265625 +0.5173852443695068359375 -0.19811175763607025146484375 0.50553376972675323486328125 +0.5173852443695068359375 0.19811175763607025146484375 0.50553376972675323486328125 +0.5176574885845184326171875 -0.4143382608890533447265625 0.350506491959095001220703125 +0.5176574885845184326171875 0.4143382608890533447265625 0.350506491959095001220703125 +0.518043893575668379369858485006 -0.148842649161815665515007367503 -0.109435699135065081510909124063 +0.518043893575668379369858485006 0.148842649161815665515007367503 -0.109435699135065081510909124063 +0.518075180053711004113381477509 -0.441482400894165072369190738755 -0.420346403121948264391960492503 +0.518075180053711004113381477509 0.441482400894165072369190738755 -0.420346403121948264391960492503 +0.518108245730400152062600227509 -0.125893352925777440853849498126 0.134961753338575379812525056877 +0.518108245730400152062600227509 0.125893352925777440853849498126 0.134961753338575379812525056877 +0.5183347165584564208984375 -0.343934488296508800164730246252 -0.188514949381351465396150501874 +0.5183347165584564208984375 0.343934488296508800164730246252 -0.188514949381351465396150501874 +0.518494358658790677196748220013 -0.169210253655910497494474498126 -0.0709340475499630057631961221887 +0.518494358658790677196748220013 0.169210253655910497494474498126 -0.0709340475499630057631961221887 +0.518931055068969748766960492503 -0.167864955961704254150390625 0.0709340475499630057631961221887 +0.518931055068969748766960492503 0.167864955961704254150390625 0.0709340475499630057631961221887 +0.519033464789390497351462272491 -0.775420424342155412134047764994 0.178401454538106907232730691248 +0.519033464789390497351462272491 0.775420424342155412134047764994 0.178401454538106907232730691248 +0.519106623530387834009047764994 -0.706317406892776444848891514994 -0.366257289052009549212840511245 +0.519106623530387834009047764994 0.706317406892776444848891514994 -0.366257289052009549212840511245 +0.519270014762878373559829014994 -0.142336195707321172543302623126 0.264761996269226085320980246252 +0.519270014762878373559829014994 0.142336195707321172543302623126 0.264761996269226085320980246252 +0.519471609592437766345085492503 -0.238407003879547108038394753748 -0.182514595985412586554019753748 +0.519471609592437766345085492503 0.238407003879547108038394753748 -0.182514595985412586554019753748 +0.519559192657470747533920985006 -0.608324003219604558800881477509 0 +0.519559192657470747533920985006 0.608324003219604558800881477509 0 +0.51981379091739654541015625 -0.147057901322841660940454744377 0.103285052627325069085628683752 +0.51981379091739654541015625 0.147057901322841660940454744377 0.103285052627325069085628683752 +0.519922637939453147204460492503 -0.116735447943210599031083063437 -0.372227701544761646612613503748 +0.519922637939453147204460492503 0.116735447943210599031083063437 -0.372227701544761646612613503748 +0.520085406303405717309829014994 -0.0787200003862380953689736884371 0.288642007112503040655582253748 +0.520085406303405717309829014994 0.0787200003862380953689736884371 0.288642007112503040655582253748 +0.520157304406166143273537727509 -0.220426043868064885922208873126 -0.321478956937789939196647992503 +0.520157304406166143273537727509 0.220426043868064885922208873126 -0.321478956937789939196647992503 +0.52019847929477691650390625 -0.316768504679203033447265625 -0.437665522098541259765625 +0.52019847929477691650390625 0.316768504679203033447265625 -0.437665522098541259765625 +0.52064283192157745361328125 -0.378267505764961264880241742503 0.0913483969867229517181073106258 +0.52064283192157745361328125 0.378267505764961264880241742503 0.0913483969867229517181073106258 +0.520760992169380210192741742503 -0.335013051331043254510433371252 0.58230102062225341796875 +0.520760992169380210192741742503 0.335013051331043254510433371252 0.58230102062225341796875 +0.520763397216796875 -0.66878102719783782958984375 0.428996260464191425665347878748 +0.520763397216796875 0.66878102719783782958984375 0.428996260464191425665347878748 +0.520967146754264920360810720013 -0.0893519014120102011977664346887 -0.152017803490161917956413617503 +0.520967146754264920360810720013 0.0893519014120102011977664346887 -0.152017803490161917956413617503 +0.52102100849151611328125 -0.1335220038890838623046875 0.8430349826812744140625 +0.52102100849151611328125 0.1335220038890838623046875 0.8430349826812744140625 +0.521022737026214599609375 -0.771559602022170998303352007497 -0.189026246964931476934879128748 +0.521022737026214599609375 0.771559602022170998303352007497 -0.189026246964931476934879128748 +0.521448183059692316199118522491 -0.092798300087451934814453125 0.457690089941024724762286268742 +0.521448183059692316199118522491 0.092798300087451934814453125 0.457690089941024724762286268742 +0.52147798240184783935546875 -0.09959399700164794921875 0.529756486415863037109375 +0.52147798240184783935546875 0.09959399700164794921875 0.529756486415863037109375 +0.52177651226520538330078125 -0.52835248410701751708984375 0.1053232513368129730224609375 +0.52177651226520538330078125 0.52835248410701751708984375 0.1053232513368129730224609375 +0.521948397159576416015625 -0.107755798101425173673995061563 -0.275606399774551369397102007497 +0.521948397159576416015625 0.107755798101425173673995061563 -0.275606399774551369397102007497 +0.522172826528549238744858485006 -0.305282700061798084600894753748 -0.666436511278152510229233485006 +0.522172826528549238744858485006 0.305282700061798084600894753748 -0.666436511278152510229233485006 +0.522199603915214582983139735006 -0.379397833347320578845085492503 -0.0765823476016521537124148721887 +0.522199603915214582983139735006 0.379397833347320578845085492503 -0.0765823476016521537124148721887 +0.5222059786319732666015625 -0.668014135956764176782485264994 0.0596504468470811857749858120314 +0.5222059786319732666015625 0.668014135956764176782485264994 0.0596504468470811857749858120314 +0.522215926647186301501335492503 -0.1903477050364017486572265625 0.770427227020263671875 +0.522215926647186301501335492503 0.1903477050364017486572265625 0.770427227020263671875 +0.522278988361358664782585492503 -0.260329806804656949115184261245 -0.139473599195480330026342130623 +0.522278988361358664782585492503 0.260329806804656949115184261245 -0.139473599195480330026342130623 +0.522386139631271451122529470013 -0.0666280999779701316176883096887 0.158661794662475597039730246252 +0.522386139631271451122529470013 0.0666280999779701316176883096887 0.158661794662475597039730246252 +0.522499024868011474609375 -0.852639973163604736328125 0 +0.522499024868011474609375 0.852639973163604736328125 0 +0.522508561611175537109375 -0.379623793065547943115234375 0.696685367822647116931022992503 +0.522508561611175537109375 0.379623793065547943115234375 0.696685367822647116931022992503 +0.522540917992591835705695757497 -0.171007252484560001715152566248 -0.64823381602764129638671875 +0.522540917992591835705695757497 0.171007252484560001715152566248 -0.64823381602764129638671875 +0.5226442515850067138671875 -0.3797189891338348388671875 -0.380994021892547607421875 +0.5226442515850067138671875 0.3797189891338348388671875 -0.380994021892547607421875 +0.522804594039916969983039507497 -0.6708033084869384765625 0.29444579780101776123046875 +0.522804594039916969983039507497 0.6708033084869384765625 0.29444579780101776123046875 +0.5228947699069976806640625 -0.49220998585224151611328125 -0.216358490288257598876953125 +0.5228947699069976806640625 0.49220998585224151611328125 -0.216358490288257598876953125 +0.522944390773773193359375 -0.291122996807098355365184261245 0.042149998247623443603515625 +0.522944390773773193359375 0.291122996807098355365184261245 0.042149998247623443603515625 +0.522951447963714621813835492503 -0.0567026473581790924072265625 0.667686897516250543738181022491 +0.522951447963714621813835492503 0.0567026473581790924072265625 0.667686897516250543738181022491 +0.523075157403945945056022992503 -0.314883403480052947998046875 -0.22302670776844024658203125 +0.523075157403945945056022992503 0.314883403480052947998046875 -0.22302670776844024658203125 +0.52308188378810882568359375 -0.169957154989242575915397992503 0 +0.52308188378810882568359375 0.169957154989242575915397992503 0 +0.523105216026306107934829014994 -0.291742193698883045538394753748 -0.0353154011070728260368589701557 +0.523105216026306107934829014994 0.291742193698883045538394753748 -0.0353154011070728260368589701557 +0.52326257526874542236328125 -0.168792148679494852236970814374 0.648232954740524225378806022491 +0.52326257526874542236328125 0.168792148679494852236970814374 0.648232954740524225378806022491 +0.523418974876403764184829014994 -0.6678577363491058349609375 -0.0499936006963253021240234375 +0.523418974876403764184829014994 0.6678577363491058349609375 -0.0499936006963253021240234375 +0.523462486267089910363381477509 -0.453782719373703014031917746252 -0.574515008926391623766960492503 +0.523462486267089910363381477509 0.453782719373703014031917746252 -0.574515008926391623766960492503 +0.523490011692047119140625 -0.843910992145538330078125 0.11734999716281890869140625 +0.523490011692047119140625 0.843910992145538330078125 0.11734999716281890869140625 +0.523621225357055686266960492503 -0.449759674072265636102230246252 -0.496021735668182361944644753748 +0.523621225357055686266960492503 0.449759674072265636102230246252 -0.496021735668182361944644753748 +0.523651474714279197009147992503 -0.722714406251907415246193977509 0.116074794530868538600110184689 +0.523651474714279197009147992503 0.722714406251907415246193977509 0.116074794530868538600110184689 +0.523685011267661981726462272491 -0.561748024821281388696547764994 -0.364270898699760425909488503748 +0.523685011267661981726462272491 0.561748024821281388696547764994 -0.364270898699760425909488503748 +0.523950994014739990234375 -0.840176999568939208984375 -0.13992099463939666748046875 +0.523950994014739990234375 0.840176999568939208984375 -0.13992099463939666748046875 +0.52403251826763153076171875 -0.196159489452838897705078125 -0.4994114935398101806640625 +0.52403251826763153076171875 0.196159489452838897705078125 -0.4994114935398101806640625 +0.524344503879547119140625 -0.52892625331878662109375 -0.08831924758851528167724609375 +0.524344503879547119140625 0.52892625331878662109375 -0.08831924758851528167724609375 +0.524656495451927162854133257497 -0.623202848434448175574118522491 0.488727512955665577276676003748 +0.524656495451927162854133257497 0.623202848434448175574118522491 0.488727512955665577276676003748 +0.524676603078842118677016514994 -0.267201209068298306537059261245 -0.378574001789093006475894753748 +0.524676603078842118677016514994 0.267201209068298306537059261245 -0.378574001789093006475894753748 +0.524735987186431884765625 -0.545103013515472412109375 -0.6538460254669189453125 +0.524735987186431884765625 0.545103013515472412109375 -0.6538460254669189453125 +0.524762010574340798108039507497 -0.416424417495727505755809261245 -0.203016099333763105905248380623 +0.524762010574340798108039507497 0.416424417495727505755809261245 -0.203016099333763105905248380623 +0.524804782867431707238381477509 -0.580238389968872114721420985006 0.167041599750518798828125 +0.524804782867431707238381477509 0.580238389968872114721420985006 0.167041599750518798828125 +0.524917387962341330798210492503 -0.452603191137313787262286268742 0.0980412960052490234375 +0.524917387962341330798210492503 0.452603191137313787262286268742 0.0980412960052490234375 +0.524958300590515181127670985006 0 0.731039392948150679174545985006 +0.525034010410308837890625 -0.790111005306243896484375 0.316327989101409912109375 +0.525034010410308837890625 0.790111005306243896484375 0.316327989101409912109375 +0.525480794906616255346420985006 -0.260422396659851063116519753748 0.5441048145294189453125 +0.525480794906616255346420985006 0.260422396659851063116519753748 0.5441048145294189453125 +0.525506785511970497815070757497 -0.07174894772469997406005859375 -0.375759166479110728875667746252 +0.525506785511970497815070757497 0.07174894772469997406005859375 -0.375759166479110728875667746252 +0.525526177883148259972756477509 -0.721352702379226662365852007497 -0.116074794530868538600110184689 +0.525526177883148259972756477509 0.721352702379226662365852007497 -0.116074794530868538600110184689 +0.525576603412628129419204014994 -0.173955005407333357370092130623 -0.231319802999496448858707253748 +0.525576603412628129419204014994 0.173955005407333357370092130623 -0.231319802999496448858707253748 +0.52573001384735107421875 0 0.8506519794464111328125 +0.5258617103099822998046875 -0.382058936357498157843082253748 0 +0.5258617103099822998046875 0.382058936357498157843082253748 0 +0.525886365771293662341179242503 -0.0223531004041433341289479841407 0.15951155126094818115234375 +0.525886365771293662341179242503 0.0223531004041433341289479841407 0.15951155126094818115234375 +0.525900793075561590050881477509 -0.185960805416107183285490123126 -0.573451995849609375 +0.525900793075561590050881477509 0.185960805416107183285490123126 -0.573451995849609375 +0.526026135683059670178352007497 -0.127667149156332010440095814374 0.359858217835426319464176003748 +0.526026135683059670178352007497 0.127667149156332010440095814374 0.359858217835426319464176003748 +0.52607034146785736083984375 -0.237916250526905070916683371252 0.298572941124439272808643863755 +0.52607034146785736083984375 0.237916250526905070916683371252 0.298572941124439272808643863755 +0.526104784011840798108039507497 -0.0428921978920698207526918110943 0.379307484626770052837940738755 +0.526104784011840798108039507497 0.0428921978920698207526918110943 0.379307484626770052837940738755 +0.526224616169929548803452235006 -0.0448250006884336540946556226572 -0.153551748394966131039396373126 +0.526224616169929548803452235006 0.0448250006884336540946556226572 -0.153551748394966131039396373126 +0.526372006535530179149873220013 -0.110652300715446474943526311563 -0.114841099828481688072123745314 +0.526372006535530179149873220013 0.110652300715446474943526311563 -0.114841099828481688072123745314 +0.526572883129119873046875 -0.154079096019268030337556751874 -0.434718894958496082647769753748 +0.526572883129119873046875 0.154079096019268030337556751874 -0.434718894958496082647769753748 +0.526876711845397860400908029987 -0.227402693033218361584602007497 0.400859892368316650390625 +0.526876711845397860400908029987 0.227402693033218361584602007497 0.400859892368316650390625 +0.526912456750869728772102007497 -0.627054360508918717798110264994 0.227301041781902302130191628748 +0.526912456750869728772102007497 0.627054360508918717798110264994 0.227301041781902302130191628748 +0.526957195997238114770766514994 -0.32595570385456085205078125 -0.32568199932575225830078125 +0.526957195997238114770766514994 0.32595570385456085205078125 -0.32568199932575225830078125 +0.5270671844482421875 -0.528704786300659201891960492503 -0.287526392936706565173210492503 +0.5270671844482421875 0.528704786300659201891960492503 -0.287526392936706565173210492503 +0.527128720283508211963408029987 -0.453186982870101895404246761245 -0.0822016999125480540833166287484 +0.527128720283508211963408029987 0.453186982870101895404246761245 -0.0822016999125480540833166287484 +0.527156916260719254907485264994 -0.226739351451396925485326505623 -0.757096821069717318408720529987 +0.527156916260719254907485264994 0.226739351451396925485326505623 -0.757096821069717318408720529987 +0.527169013023376487048210492503 -0.066229797899723052978515625 -0.278758800029754616467414507497 +0.527169013023376487048210492503 0.066229797899723052978515625 -0.278758800029754616467414507497 +0.527399489283561728747429242503 -0.313236039876937877313167746252 -0.58841590583324432373046875 +0.527399489283561728747429242503 0.313236039876937877313167746252 -0.58841590583324432373046875 +0.527409601211547895971420985006 -0.317875194549560591283920985006 -0.510680007934570356908920985006 +0.527409601211547895971420985006 0.317875194549560591283920985006 -0.510680007934570356908920985006 +0.5274329483509063720703125 -0.151079501211643235647485994377 -0.0385973479598760646491761860943 +0.5274329483509063720703125 0.151079501211643235647485994377 -0.0385973479598760646491761860943 +0.527449786663055419921875 -0.168190205097198480777009876874 0.231319195032119728772102007497 +0.527449786663055419921875 0.168190205097198480777009876874 0.231319195032119728772102007497 +0.52758915722370147705078125 -0.0883410021662712208190271212516 0.127850250154733668939144308752 +0.52758915722370147705078125 0.0883410021662712208190271212516 0.127850250154733668939144308752 +0.527631530165672324450554242503 -0.104378302767872813139327092813 -0.658186444640159629138054242503 +0.527631530165672324450554242503 0.104378302767872813139327092813 -0.658186444640159629138054242503 +0.527981302142143338329560720013 0 -0.154064352810382859670923494377 +0.528007692098617642528779470013 -0.150536654889583593197599498126 0.0323488004505634307861328125 +0.528007692098617642528779470013 0.150536654889583593197599498126 0.0323488004505634307861328125 +0.528273999691009521484375 -0.571137011051177978515625 0.628274977207183837890625 +0.528273999691009521484375 0.571137011051177978515625 0.628274977207183837890625 +0.528409063816070556640625 -0.0268112007528543486167826870314 -0.377577841281890869140625 +0.528409063816070556640625 0.0268112007528543486167826870314 -0.377577841281890869140625 +0.528531852364540144506577235006 -0.131270699948072444573909933752 -0.0769565470516681698898153740629 +0.528531852364540144506577235006 0.131270699948072444573909933752 -0.0769565470516681698898153740629 +0.529007416963577337121193977509 -0.728115302324295110558693977509 0 +0.529007416963577337121193977509 0.728115302324295110558693977509 0 +0.529122462868690468518195757497 -0.787024635076522760535056022491 0.0558752007782459259033203125 +0.529122462868690468518195757497 0.787024635076522760535056022491 0.0558752007782459259033203125 +0.52935397624969482421875 -0.782782971858978271484375 -0.3271619975566864013671875 +0.52935397624969482421875 0.782782971858978271484375 -0.3271619975566864013671875 +0.529365861415863059313835492503 -0.351421189308166515008480246252 0.137022600322961818353206808752 +0.529365861415863059313835492503 0.351421189308166515008480246252 0.137022600322961818353206808752 +0.529638004302978471216079014994 -0.039454199373722076416015625 0.279153603315353382452457253748 +0.529638004302978471216079014994 0.039454199373722076416015625 0.279153603315353382452457253748 +0.529707676172256447522102007497 -0.785789656639099054480368522491 -0.0666681464761495617965536553129 +0.529707676172256447522102007497 0.785789656639099054480368522491 -0.0666681464761495617965536553129 +0.52982322871685028076171875 -0.244445241987705230712890625 0.4712047576904296875 +0.52982322871685028076171875 0.244445241987705230712890625 0.4712047576904296875 +0.529868388175964377673210492503 -0.0247488006949424729774555942186 -0.280404603481292702404914507497 +0.529868388175964377673210492503 0.0247488006949424729774555942186 -0.280404603481292702404914507497 +0.5301285088062286376953125 -0.385156592726707436291633257497 -0.687836104631423972399772992503 +0.5301285088062286376953125 0.385156592726707436291633257497 -0.687836104631423972399772992503 +0.530169010162353515625 -0.3341369926929473876953125 0.779277026653289794921875 +0.530169010162353515625 0.3341369926929473876953125 0.779277026653289794921875 +0.530261611938476540295539507497 -0.582365608215332009045539507497 -0.140258395671844476870759876874 +0.530261611938476540295539507497 0.582365608215332009045539507497 -0.140258395671844476870759876874 +0.530266499519348122326789507497 -0.508058077096939064709602007497 0.520282781124114968029914507497 +0.530266499519348122326789507497 0.508058077096939064709602007497 0.520282781124114968029914507497 +0.530267098546028159411491742503 -0.109630402922630321160823996252 0.0964270979166031022566940578145 +0.530267098546028159411491742503 0.109630402922630321160823996252 0.0964270979166031022566940578145 +0.530278193950653120580795985006 -0.669143718481063909386818977509 -0.284696102142333984375 +0.530278193950653120580795985006 0.669143718481063909386818977509 -0.284696102142333984375 +0.530294394493103005139289507497 -0.119763006269931790437333063437 0.717247796058654851769631477509 +0.530294394493103005139289507497 0.119763006269931790437333063437 0.717247796058654851769631477509 +0.53033101558685302734375 -0.5303294956684112548828125 0 +0.53033101558685302734375 0.5303294956684112548828125 0 +0.530406785011291570519631477509 -0.130395651608705531732113058752 0.0645424984395503997802734375 +0.530406785011291570519631477509 0.130395651608705531732113058752 0.0645424984395503997802734375 +0.530524948239326499255241742503 -0.52329145371913909912109375 -0.408912043273448932989566628748 +0.530524948239326499255241742503 0.52329145371913909912109375 -0.408912043273448932989566628748 +0.53098618984222412109375 -0.266372394561767589227230246252 0.08425860106945037841796875 +0.53098618984222412109375 0.266372394561767589227230246252 0.08425860106945037841796875 +0.531237158179283075476462272491 -0.06340394727885723114013671875 0.785026812553405672900908029987 +0.531237158179283075476462272491 0.06340394727885723114013671875 0.785026812553405672900908029987 +0.531450578570365927966179242503 -0.386120156943798031878856136245 0.539418497681617759020866742503 +0.531450578570365927966179242503 0.386120156943798031878856136245 0.539418497681617759020866742503 +0.531519430875778131628806022491 -0.0351058507338166195244077982807 -0.66238628327846527099609375 +0.531519430875778131628806022491 0.0351058507338166195244077982807 -0.66238628327846527099609375 +0.531699001789093017578125 -0.386298519372940019067641514994 -0.240976393222808810135049384371 +0.531699001789093017578125 0.386298519372940019067641514994 -0.240976393222808810135049384371 +0.531876796483993552477897992503 -0.177620296180248271600277121252 -0.328721886873245272564503238755 +0.531876796483993552477897992503 0.177620296180248271600277121252 -0.328721886873245272564503238755 +0.5320552289485931396484375 -0.461729228496551513671875 -0.25733850896358489990234375 +0.5320552289485931396484375 0.461729228496551513671875 -0.25733850896358489990234375 +0.532057785987854026110710492503 -0.2681837975978851318359375 -0.0706547990441322298904580634371 +0.532057785987854026110710492503 0.2681837975978851318359375 -0.0706547990441322298904580634371 +0.532135212421417258532585492503 -0.103517997264862063322432561563 0.2571305930614471435546875 +0.532135212421417258532585492503 0.103517997264862063322432561563 0.2571305930614471435546875 +0.532284879684448153369658029987 -0.454612916707992531506477007497 0 +0.532284879684448153369658029987 0.454612916707992531506477007497 0 +0.532299947738647527550881477509 -0.248115408420562760793970369377 -0.278559440374374411852897992503 +0.532299947738647527550881477509 0.248115408420562760793970369377 -0.278559440374374411852897992503 +0.532664597034454345703125 -0.354318237304687533306690738755 -0.115007102489471435546875 +0.532664597034454345703125 0.354318237304687533306690738755 -0.115007102489471435546875 +0.532689687609672501977797764994 -0.665586164593696572033820757497 -0.419208391010761238781867632497 +0.532689687609672501977797764994 0.665586164593696572033820757497 -0.419208391010761238781867632497 +0.532791060209274358605568977509 -0.0443146008998155649383221543758 0.129110845923423783743189119377 +0.532791060209274358605568977509 0.0443146008998155649383221543758 0.129110845923423783743189119377 +0.532861566543579079358039507497 -0.265383946895599354132144753748 0.261016601324081443102897992503 +0.532861566543579079358039507497 0.265383946895599354132144753748 0.261016601324081443102897992503 +0.532943987846374533923210492503 -0.632077199220657415246193977509 0.355596300959587108270198996252 +0.532943987846374533923210492503 0.632077199220657415246193977509 0.355596300959587108270198996252 +0.533018982410430885998664507497 -0.193282806873321527652009876874 0.196296608448028570004240123126 +0.533018982410430885998664507497 0.193282806873321527652009876874 0.196296608448028570004240123126 +0.5334208011627197265625 -0.387547993659973166735710492503 -0.453066396713256880346420985006 +0.5334208011627197265625 0.387547993659973166735710492503 -0.453066396713256880346420985006 +0.53342854976654052734375 -0.628051376342773415295539507497 -0.208578952401876432931615568123 +0.53342854976654052734375 0.628051376342773415295539507497 -0.208578952401876432931615568123 +0.533507394790649347449118522491 -0.198361194133758550472990123126 -0.189796793460845936163394753748 +0.533507394790649347449118522491 0.198361194133758550472990123126 -0.189796793460845936163394753748 +0.533605608344078108373764735006 -0.0675394508987665204147177178129 -0.114907099306583410092130748126 +0.533605608344078108373764735006 0.0675394508987665204147177178129 -0.114907099306583410092130748126 +0.533887219429016068872329014994 -0.268527695536613431048778011245 0.364496284723281827044871761245 +0.533887219429016068872329014994 0.268527695536613431048778011245 0.364496284723281827044871761245 +0.534160280227661155016960492503 -0.542683726549148537365852007497 -0.56803826987743377685546875 +0.534160280227661155016960492503 0.542683726549148537365852007497 -0.56803826987743377685546875 +0.534163010120391801294204014994 -0.1060822010040283203125 -0.439791816473007191046207253748 +0.534163010120391801294204014994 0.1060822010040283203125 -0.439791816473007191046207253748 +0.534268131852149941174445757497 -0.322685356438159931524722878748 0.181470906734466558285490123126 +0.534268131852149941174445757497 0.322685356438159931524722878748 0.181470906734466558285490123126 +0.534364524483680658484274772491 -0.152952843904495233706697376874 -0.770428133010864213403579014994 +0.534364524483680658484274772491 0.152952843904495233706697376874 -0.770428133010864213403579014994 +0.5345290601253509521484375 0 0.129532150924205780029296875 +0.53454150259494781494140625 -0.502208232879638671875 0.156691499054431915283203125 +0.53454150259494781494140625 0.502208232879638671875 0.156691499054431915283203125 +0.534604811668396018298210492503 -0.272392201423645008429019753748 0 +0.534604811668396018298210492503 0.272392201423645008429019753748 0 +0.53470170497894287109375 -0.168928493559360515252620871252 0.328720608353614829333366742503 +0.53470170497894287109375 0.168928493559360515252620871252 0.328720608353614829333366742503 +0.534769582748413130346420985006 -0.158668804168701188528345369377 0.573450422286987282483039507497 +0.534769582748413130346420985006 0.158668804168701188528345369377 0.573450422286987282483039507497 +0.534804040193557761462272992503 -0.128393096476793311389030805003 0 +0.534804040193557761462272992503 0.128393096476793311389030805003 0 +0.5350143909454345703125 -0.0532832026481628445724325615629 0.592385578155517622533920985006 +0.5350143909454345703125 0.0532832026481628445724325615629 0.592385578155517622533920985006 +0.53502000868320465087890625 -0.143832005560398101806640625 -0.50553524494171142578125 +0.53502000868320465087890625 0.143832005560398101806640625 -0.50553524494171142578125 +0.5351250171661376953125 -0.1320683956146240234375 -0.237064200639724720343082253748 +0.5351250171661376953125 0.1320683956146240234375 -0.237064200639724720343082253748 +0.535184001922607399670539507497 -0.494137620925903353619190738755 -0.33076560497283935546875 +0.535184001922607399670539507497 0.494137620925903353619190738755 -0.33076560497283935546875 +0.535193073749542280737045985006 -0.535400998592376775597756477509 -0.486738914251327536852897992503 +0.535193073749542280737045985006 0.535400998592376775597756477509 -0.486738914251327536852897992503 +0.535510790348052934106704014994 -0.239859008789062494448884876874 0.12528119981288909912109375 +0.535510790348052934106704014994 0.239859008789062494448884876874 0.12528119981288909912109375 +0.535717004537582419665397992503 0 0.368113192915916431768863503748 +0.535898995399475053247329014994 -0.216953408718109114206029630623 0.160447204113006586245759876874 +0.535898995399475053247329014994 0.216953408718109114206029630623 0.160447204113006586245759876874 +0.53595770895481109619140625 -0.4378341138362884521484375 0.65080702304840087890625 +0.53595770895481109619140625 0.4378341138362884521484375 0.65080702304840087890625 +0.5360985100269317626953125 -0.425233197212219193872329014994 0.147562800347805000988898882497 +0.5360985100269317626953125 0.425233197212219193872329014994 0.147562800347805000988898882497 +0.536202108860015846936164507497 -0.354404389858245849609375 -0.277281901240348793713508257497 +0.536202108860015846936164507497 0.354404389858245849609375 -0.277281901240348793713508257497 +0.5364176928997039794921875 -0.138869500160217262951789507497 0.427751111984252918585269753748 +0.5364176928997039794921875 0.138869500160217262951789507497 0.427751111984252918585269753748 +0.536476510763168379369858485006 -0.29910600185394287109375 0.6578216850757598876953125 +0.536476510763168379369858485006 0.29910600185394287109375 0.6578216850757598876953125 +0.536653614044189430920539507497 -0.129965603351593017578125 -0.578888797760009787829460492503 +0.536653614044189430920539507497 0.129965603351593017578125 -0.578888797760009787829460492503 +0.536654984951019264904914507497 0 0.2683289945125579833984375 +0.536655998229980446545539507497 -0.550551986694335915295539507497 0.221116805076599143298210492503 +0.536655998229980446545539507497 0.550551986694335915295539507497 0.221116805076599143298210492503 +0.536754387617111250463608485006 -0.291366390883922576904296875 0.222485893964767450503572376874 +0.536754387617111250463608485006 0.291366390883922576904296875 0.222485893964767450503572376874 +0.536837679147720292505141514994 -0.0462293989956378895134214701557 0.446842211484909046514957253748 +0.536837679147720292505141514994 0.0462293989956378895134214701557 0.446842211484909046514957253748 +0.5369470119476318359375 -0.3076539933681488037109375 -0.7855169773101806640625 +0.5369470119476318359375 0.3076539933681488037109375 -0.7855169773101806640625 +0.537160810828208989953225227509 -0.0227155504748225225974955776564 -0.115941651165485395957865932814 +0.537160810828208989953225227509 0.0227155504748225225974955776564 -0.115941651165485395957865932814 +0.537167215347290061266960492503 -0.308947992324829112664730246252 0.505967187881469770971420985006 +0.537167215347290061266960492503 0.308947992324829112664730246252 0.505967187881469770971420985006 +0.537301611900329656457131477509 -0.0885522037744522205748864962516 -0.0772370509803295135498046875 +0.537301611900329656457131477509 0.0885522037744522205748864962516 -0.0772370509803295135498046875 +0.53735606372356414794921875 -0.0666550513356924112517987168758 0.0964656010270118768890057481258 +0.53735606372356414794921875 0.0666550513356924112517987168758 0.0964656010270118768890057481258 +0.537474614381790227746193977509 -0.390493798255920399054019753748 -0.607153522968292280737045985006 +0.537474614381790227746193977509 0.390493798255920399054019753748 -0.607153522968292280737045985006 +0.537506216764450095446647992503 -0.744278469681739718311064279987 0.244206057488918298892244251874 +0.537506216764450095446647992503 0.744278469681739718311064279987 0.244206057488918298892244251874 +0.537701985239982693798310720013 -0.109023196250200279933117997189 -0.0386088997125625665862713731258 +0.537701985239982693798310720013 0.109023196250200279933117997189 -0.0386088997125625665862713731258 +0.53778223693370819091796875 -0.268667243421077728271484375 -0.448450505733489990234375 +0.53778223693370819091796875 0.268667243421077728271484375 -0.448450505733489990234375 +0.537990617752075128699118522491 -0.221107792854309065377904630623 -0.147231602668762201480134876874 +0.537990617752075128699118522491 0.221107792854309065377904630623 -0.147231602668762201480134876874 +0.538146072626113913806022992503 -0.592479762434959367212172764994 0.286122746765613555908203125 +0.538146072626113913806022992503 0.592479762434959367212172764994 0.286122746765613555908203125 +0.538213002681732111120993522491 -0.0782059013843536404708700615629 -0.778916415572166398462172764994 +0.538213002681732111120993522491 0.0782059013843536404708700615629 -0.778916415572166398462172764994 +0.538220113515853970653779470013 -0.108499601483345045616069057814 0.0323553999885916737655477959379 +0.538220113515853970653779470013 0.108499601483345045616069057814 0.0323553999885916737655477959379 +0.538250029087066650390625 -0.749433994293212890625 0.3855330049991607666015625 +0.538250029087066650390625 0.749433994293212890625 0.3855330049991607666015625 +0.5382936000823974609375 -0.24325740337371826171875 -0.105193796753883364591963811563 +0.5382936000823974609375 0.24325740337371826171875 -0.105193796753883364591963811563 +0.5383898913860321044921875 -0.5909552872180938720703125 0.413410511612892161981136496252 +0.5383898913860321044921875 0.5909552872180938720703125 0.413410511612892161981136496252 +0.538420620560645990515524772491 -0.434521681070327736584602007497 0.493755638599395751953125 +0.538420620560645990515524772491 0.434521681070327736584602007497 0.493755638599395751953125 +0.538475844264030389929587272491 -0.391221003234386410785106136245 -0.528667709231376625744758257497 +0.538475844264030389929587272491 0.391221003234386410785106136245 -0.528667709231376625744758257497 +0.53866951167583465576171875 -0.42903824150562286376953125 -0.297087751328945159912109375 +0.53866951167583465576171875 0.42903824150562286376953125 -0.297087751328945159912109375 +0.538935005664825439453125 -0.04992449842393398284912109375 0.51918826997280120849609375 +0.538935005664825439453125 0.04992449842393398284912109375 0.51918826997280120849609375 +0.539072033762931890343850227509 -0.0877860508859157617767010606258 0.0647668991237878854949627793758 +0.539072033762931890343850227509 0.0877860508859157617767010606258 0.0647668991237878854949627793758 +0.539113390445709161902243522491 -0.221740409731864901443643134371 -0.387540996074676513671875 +0.539113390445709161902243522491 0.221740409731864901443643134371 -0.387540996074676513671875 +0.539150482416152931897102007497 -0.0575686991214752127876685960928 -0.442721998691558815686164507497 +0.539150482416152931897102007497 0.0575686991214752127876685960928 -0.442721998691558815686164507497 +0.53921248018741607666015625 -0.28942801058292388916015625 0.43356750905513763427734375 +0.53921248018741607666015625 0.28942801058292388916015625 0.43356750905513763427734375 +0.53925298154354095458984375 -0.1493197493255138397216796875 0.49941001832485198974609375 +0.53925298154354095458984375 0.1493197493255138397216796875 0.49941001832485198974609375 +0.539267003536224365234375 -0.634573996067047119140625 -0.553631007671356201171875 +0.539267003536224365234375 0.634573996067047119140625 -0.553631007671356201171875 +0.539273679256439208984375 -0.243559786677360529116853626874 -0.678132015466690107885483485006 +0.539273679256439208984375 0.243559786677360529116853626874 -0.678132015466690107885483485006 +0.53938798606395721435546875 -0.50423848628997802734375 -0.1315447501838207244873046875 +0.53938798606395721435546875 0.50423848628997802734375 -0.1315447501838207244873046875 +0.539529609680175825658920985006 -0.588008022308349587170539507497 0.0561583995819091852386151231258 +0.539529609680175825658920985006 0.588008022308349587170539507497 0.0561583995819091852386151231258 +0.539891293644905068127570757497 -0.359070417284965526238948996252 0.045670948922634124755859375 +0.539891293644905068127570757497 0.359070417284965526238948996252 0.045670948922634124755859375 +0.539992684125900290759147992503 -0.0856362037360668265639773721887 0.351531064510345492291065738755 +0.539992684125900290759147992503 0.0856362037360668265639773721887 0.351531064510345492291065738755 +0.540045538544654868395866742503 0 -0.781568816304206825940070757497 +0.540055099129676863256577235006 -0.359689840674400351794304242503 -0.0382629010826349286178427178129 +0.540055099129676863256577235006 0.359689840674400351794304242503 -0.0382629010826349286178427178129 +0.540165483951568603515625 -0.427646094560623135638621761245 -0.123853802680969224403462192186 +0.540165483951568603515625 0.427646094560623135638621761245 -0.123853802680969224403462192186 +0.540192908048629738537727007497 -0.327733242511749289782585492503 -0.152586852759122842959627064374 +0.540192908048629738537727007497 0.327733242511749289782585492503 -0.152586852759122842959627064374 +0.540395212173461980675881477509 -0.457639980316162153783920985006 -0.37220799922943115234375 +0.540395212173461980675881477509 0.457639980316162153783920985006 -0.37220799922943115234375 +0.540470695495605446545539507497 -0.546139812469482399670539507497 0.468638992309570345806690738755 +0.540470695495605446545539507497 0.546139812469482399670539507497 0.468638992309570345806690738755 +0.540587997436523415295539507497 -0.587834405899047895971420985006 -0.0470623999834060696700888115629 +0.540587997436523415295539507497 0.587834405899047895971420985006 -0.0470623999834060696700888115629 +0.540860092639923184520966970013 -0.0223723499104380614543874372657 0.0973131529986858423431073106258 +0.540860092639923184520966970013 0.0223723499104380614543874372657 0.0973131529986858423431073106258 +0.54088450968265533447265625 -0.274532704055309328960987613755 -0.233615194261074077264339621252 +0.54088450968265533447265625 0.274532704055309328960987613755 -0.233615194261074077264339621252 +0.540983092784881547387954014994 0 -0.444226998090744007452457253748 +0.541050252318382329796975227509 -0.133964352309703826904296875 -0.334391850233077991827457253748 +0.541050252318382329796975227509 0.133964352309703826904296875 -0.334391850233077991827457253748 +0.541323325037956215588508257497 -0.623463150858879044946547764994 -0.469854794442653656005859375 +0.541323325037956215588508257497 0.623463150858879044946547764994 -0.469854794442653656005859375 +0.541553020477294921875 -0.615451991558074951171875 0.572659015655517578125 +0.541553020477294921875 0.615451991558074951171875 0.572659015655517578125 +0.541574957966804437781149772491 -0.644244739413261435778679242503 0.118932845443487159031725752811 +0.541574957966804437781149772491 0.644244739413261435778679242503 0.118932845443487159031725752811 +0.541593003273010187292868522491 -0.127812597155570972784488503748 0.224366998672485357113615123126 +0.541593003273010187292868522491 0.127812597155570972784488503748 0.224366998672485357113615123126 +0.541754576563835077429587272491 -0.741191872954368502490751779987 -0.244206057488918298892244251874 +0.541754576563835077429587272491 0.741191872954368502490751779987 -0.244206057488918298892244251874 +0.541922986507415771484375 -0.0909281998872756985763388115629 -0.240938401222228981701789507497 +0.541922986507415771484375 0.0909281998872756985763388115629 -0.240938401222228981701789507497 +0.54205799102783203125 -0.09204524941742420196533203125 -0.51009897887706756591796875 +0.54205799102783203125 0.09204524941742420196533203125 -0.51009897887706756591796875 +0.542069578170776389391960492503 -0.0652000010013580322265625 -0.5847303867340087890625 +0.542069578170776389391960492503 0.0652000010013580322265625 -0.5847303867340087890625 +0.5422170162200927734375 -0.476218998432159423828125 -0.6922550201416015625 +0.5422170162200927734375 0.476218998432159423828125 -0.6922550201416015625 +0.542344188690185524670539507497 0 0.654494056105613730700554242503 +0.54246573150157928466796875 -0.223434394598007207699552623126 0.615067625045776389391960492503 +0.54246573150157928466796875 0.223434394598007207699552623126 0.615067625045776389391960492503 +0.542565608024597190173210492503 -0.0638958021998405484298544365629 0.248072397708892805612279630623 +0.542565608024597190173210492503 0.0638958021998405484298544365629 0.248072397708892805612279630623 +0.5426460206508636474609375 -0.695317518711090154504006477509 0.179076598584651941470369251874 +0.5426460206508636474609375 0.695317518711090154504006477509 0.179076598584651941470369251874 +0.542693260312080427709702235006 -0.0452771008014678996711488423443 -0.07703244686126708984375 +0.542693260312080427709702235006 0.0452771008014678996711488423443 -0.07703244686126708984375 +0.54269997775554656982421875 -0.3942900002002716064453125 -0.335411243140697479248046875 +0.54269997775554656982421875 0.3942900002002716064453125 -0.335411243140697479248046875 +0.542988604307174660412727007497 -0.298992407321929887231704014994 0.325218600034713700708266514994 +0.542988604307174660412727007497 0.298992407321929887231704014994 0.325218600034713700708266514994 +0.543228960037231534130341970013 -0.0860376015305519131759481865629 0 +0.543228960037231534130341970013 0.0860376015305519131759481865629 0 +0.543640989065170221472556022491 -0.394976413249969460217414507497 0.196082592010498046875 +0.543640989065170221472556022491 0.394976413249969460217414507497 0.196082592010498046875 +0.54372449219226837158203125 -0.334019243717193603515625 -0.39407475292682647705078125 +0.54372449219226837158203125 0.334019243717193603515625 -0.39407475292682647705078125 +0.543878412246704079358039507497 0 -0.586682415008544899670539507497 +0.544368547201156682824318977509 -0.0446275513619184549529705918758 0.0645865008234977749923544365629 +0.544368547201156682824318977509 0.0446275513619184549529705918758 0.0645865008234977749923544365629 +0.544464015960693381579460492503 -0.264480805397033724712940738755 -0.523076820373535200658920985006 +0.544464015960693381579460492503 0.264480805397033724712940738755 -0.523076820373535200658920985006 +0.544465792179107621606704014994 -0.248561400175094593389957253748 0.0421187996864318819900674384371 +0.544465792179107621606704014994 0.248561400175094593389957253748 0.0421187996864318819900674384371 +0.544479420781135536877570757497 -0.256065903604030586926398882497 -0.600393268465995721960837272491 +0.544479420781135536877570757497 0.256065903604030586926398882497 -0.600393268465995721960837272491 +0.544541803002357549523537727509 0 -0.0772947974503040424743005587516 +0.5445477068424224853515625 -0.632613587379455610815170985006 -0.336552295088767994268863503748 +0.5445477068424224853515625 0.632613587379455610815170985006 -0.336552295088767994268863503748 +0.544587600231170587683493522491 -0.249355798959732033459602007497 -0.0352967999875545487831196567186 +0.544587600231170587683493522491 0.249355798959732033459602007497 -0.0352967999875545487831196567186 +0.544605731964111328125 -0.47123323380947113037109375 0.209389507770538330078125 +0.544605731964111328125 0.47123323380947113037109375 0.209389507770538330078125 +0.544673261046409673546975227509 -0.0658647008240222930908203125 -0.03863749839365482330322265625 +0.544673261046409673546975227509 0.0658647008240222930908203125 -0.03863749839365482330322265625 +0.544714856147766046667868522491 -0.644853365421295121606704014994 -0.0997474975883960723876953125 +0.544714856147766046667868522491 0.644853365421295121606704014994 -0.0997474975883960723876953125 +0.544831216335296630859375 -0.156928199529647816046207253748 -0.196296608448028570004240123126 +0.544831216335296630859375 0.156928199529647816046207253748 -0.196296608448028570004240123126 +0.544867402315139748303352007497 -0.282344308495521501001235264994 -0.336751094460487343518195757497 +0.544867402315139748303352007497 0.282344308495521501001235264994 -0.336751094460487343518195757497 +0.545126447081565879138054242503 -0.0654923483729362571059695596887 0.0323718998581171077399964985943 +0.545126447081565879138054242503 0.0654923483729362571059695596887 0.0323718998581171077399964985943 +0.545199203491210981908920985006 -0.517470407485961958471420985006 0.273828792572021473272769753748 +0.545199203491210981908920985006 0.517470407485961958471420985006 0.273828792572021473272769753748 +0.545298656821250893322883257497 -0.197469352185726171322599498126 0.293522459268569957391292746252 +0.545298656821250893322883257497 0.197469352185726171322599498126 0.293522459268569957391292746252 +0.545312786102294944079460492503 -0.555023193359375 -0.185965597629547119140625 +0.545312786102294944079460492503 0.555023193359375 -0.185965597629547119140625 +0.545386356115341142114516514994 -0.555470761656761125024672764994 0.341330237686634063720703125 +0.545386356115341142114516514994 0.555470761656761125024672764994 0.341330237686634063720703125 +0.5453872382640838623046875 -0.33214800059795379638671875 0.39335851371288299560546875 +0.5453872382640838623046875 0.33214800059795379638671875 0.39335851371288299560546875 +0.54548849165439605712890625 -0.030937501229345798492431640625 -0.51379501819610595703125 +0.54548849165439605712890625 0.030937501229345798492431640625 -0.51379501819610595703125 +0.54554080963134765625 -0.355568790435791037829460492503 0.464710378646850608141960492503 +0.54554080963134765625 0.355568790435791037829460492503 0.464710378646850608141960492503 +0.545654356479644775390625 -0.252240212261676755023387386245 0.735620144009590082312399772491 +0.545654356479644775390625 0.252240212261676755023387386245 0.735620144009590082312399772491 +0.545742613077163762902443977509 -0.205902448296546941586271373126 -0.286826154589653048443409488755 +0.545742613077163762902443977509 0.205902448296546941586271373126 -0.286826154589653048443409488755 +0.545744550228118963097756477509 -0.299169641733169566766292746252 -0.187510691583156585693359375 +0.545744550228118963097756477509 0.299169641733169566766292746252 -0.187510691583156585693359375 +0.546037194132804826196547764994 -0.493292233347892739026008257497 0.60083796083927154541015625 +0.546037194132804826196547764994 0.493292233347892739026008257497 0.60083796083927154541015625 +0.546081590652465753699118522491 -0.049344599246978759765625 -0.2436389923095703125 +0.546081590652465753699118522491 0.049344599246978759765625 -0.2436389923095703125 +0.546169260144233725817741742503 0 0.0648004479706287411788778740629 +0.546351015567779541015625 -0.816232025623321533203125 0.18779100477695465087890625 +0.546351015567779541015625 0.816232025623321533203125 0.18779100477695465087890625 +0.546428024768829345703125 -0.74349200725555419921875 -0.385533988475799560546875 +0.546428024768829345703125 0.74349200725555419921875 -0.385533988475799560546875 +0.546707689762115478515625 -0.694655120372772216796875 -0.169011904299259191342130748126 +0.546707689762115478515625 0.694655120372772216796875 -0.169011904299259191342130748126 +0.547253778576850868908820757497 -0.113266754150390627775557561563 0.640455430746078469006477007497 +0.547253778576850868908820757497 0.113266754150390627775557561563 0.640455430746078469006477007497 +0.5474363863468170166015625 -0.433467990159988381115852007497 0.04918409883975982666015625 +0.5474363863468170166015625 0.433467990159988381115852007497 0.04918409883975982666015625 +0.547606492042541415088408029987 -0.183861309289932245425447376874 0.395376080274581875872996761245 +0.547606492042541415088408029987 0.183861309289932245425447376874 0.395376080274581875872996761245 +0.547634744644165061266960492503 -0.0896675020456314114669638115629 -0.338460835814476002081363503748 +0.547634744644165061266960492503 0.0896675020456314114669638115629 -0.338460835814476002081363503748 +0.547938001155853227075454014994 0 -0.244467598199844343698217130623 +0.54809398949146270751953125 -0.50923199951648712158203125 0.05268749780952930450439453125 +0.54809398949146270751953125 0.50923199951648712158203125 0.05268749780952930450439453125 +0.548125904798507646020766514994 -0.433428812026977527960269753748 -0.0412062011659145299713458143742 +0.548125904798507646020766514994 0.433428812026977527960269753748 -0.0412062011659145299713458143742 +0.548135709762573197778579014994 0 0.435370612144470203741519753748 +0.548170143365860007556022992503 -0.0227144502103328732589559990629 -0.038644649088382720947265625 +0.548170143365860007556022992503 0.0227144502103328732589559990629 -0.038644649088382720947265625 +0.5481719970703125 -0.703980028629302978515625 0.4515750110149383544921875 +0.5481719970703125 0.703980028629302978515625 0.4515750110149383544921875 +0.548173511028289706104033029987 -0.362577599287033036645766514994 0.240921798348426807745426003748 +0.548173511028289706104033029987 0.362577599287033036645766514994 0.240921798348426807745426003748 +0.548211586475372270044204014994 -0.153106194734573347604467130623 0.189796203374862665347322376874 +0.548211586475372270044204014994 0.153106194734573347604467130623 0.189796203374862665347322376874 +0.548304355144500821239716970013 -0.0431519020348787377128196851572 0 +0.548304355144500821239716970013 0.0431519020348787377128196851572 0 +0.5484449863433837890625 -0.81216800212860107421875 -0.1989749968051910400390625 +0.5484449863433837890625 0.81216800212860107421875 -0.1989749968051910400390625 +0.548590350151062056127670985006 -0.0223712496459484121158478586722 0.0323763009160757120330487168758 +0.548590350151062056127670985006 0.0223712496459484121158478586722 0.0323763009160757120330487168758 +0.548629102110862687524672764994 -0.595526134967803932873664507497 -0.258562344312667835577457253748 +0.548629102110862687524672764994 0.595526134967803932873664507497 -0.258562344312667835577457253748 +0.54889275133609771728515625 -0.50918398797512054443359375 -0.044144251383841037750244140625 +0.54889275133609771728515625 0.50918398797512054443359375 -0.044144251383841037750244140625 +0.549016681313514665063735264994 -0.471526426076889049188167746252 0.445806315541267372815070757497 +0.549016681313514665063735264994 0.471526426076889049188167746252 0.445806315541267372815070757497 +0.549042215943336464611945757497 -0.514878147840499900134147992503 0.394909161329269398077457253748 +0.549042215943336464611945757497 0.514878147840499900134147992503 0.394909161329269398077457253748 +0.5492599010467529296875 -0.327898901700973466333266514994 0.284246200323104825091746761245 +0.5492599010467529296875 0.327898901700973466333266514994 0.284246200323104825091746761245 +0.5497009754180908203125 -0.20036600530147552490234375 0.8109760284423828125 +0.5497009754180908203125 0.20036600530147552490234375 0.8109760284423828125 +0.550000000000000044408920985006 0 0 +0.5500090122222900390625 -0.3996039927005767822265625 0.73335301876068115234375 +0.5500090122222900390625 0.3996039927005767822265625 0.73335301876068115234375 +0.550328353047370932848991742503 -0.3336924612522125244140625 0.09103834629058837890625 +0.550328353047370932848991742503 0.3336924612522125244140625 0.09103834629058837890625 +0.5503799915313720703125 -0.481199216842651378289730246252 0.324852800369262728619190738755 +0.5503799915313720703125 0.481199216842651378289730246252 0.324852800369262728619190738755 +0.550381004810333251953125 -0.127409101277589809075863058752 0.321477659046649932861328125 +0.550381004810333251953125 0.127409101277589809075863058752 0.321477659046649932861328125 +0.550381207466125510485710492503 -0.0243840001523494727397878278907 0.23766839504241943359375 +0.550381207466125510485710492503 0.0243840001523494727397878278907 0.23766839504241943359375 +0.550383383035659701221220529987 -0.399873596429824784692641514994 -0.164860498905181868112279630623 +0.550383383035659701221220529987 0.399873596429824784692641514994 -0.164860498905181868112279630623 +0.550454878807067893298210492503 -0.469075050950050365106136496252 -0.446618053317069996221988503748 +0.550454878807067893298210492503 0.469075050950050365106136496252 -0.446618053317069996221988503748 +0.550551223754882856908920985006 -0.39999759197235107421875 0.420588779449462935033920985006 +0.550551223754882856908920985006 0.39999759197235107421875 0.420588779449462935033920985006 +0.550637984275817893298210492503 -0.223046404123306257760717130623 0.0839525967836379921616085653113 +0.550637984275817893298210492503 0.223046404123306257760717130623 0.0839525967836379921616085653113 +0.550944614410400324011618522491 -0.1807529926300048828125 -0.1542347967624664306640625 +0.550944614410400324011618522491 0.1807529926300048828125 -0.1542347967624664306640625 +0.55095899105072021484375 -0.43853549659252166748046875 0.258130498230457305908203125 +0.55095899105072021484375 0.43853549659252166748046875 0.258130498230457305908203125 +0.551093888282775834497329014994 -0.173124696314334858282535378748 -0.395376789569854725225894753748 +0.551093888282775834497329014994 0.173124696314334858282535378748 -0.395376789569854725225894753748 +0.551182428002357505114616742503 -0.322242850065231289935496761245 -0.703460761904716513903679242503 +0.551182428002357505114616742503 0.322242850065231289935496761245 -0.703460761904716513903679242503 +0.551387199759483359606804242503 -0.0427810490131378187705912807814 0.341528856754303000720085492503 +0.551387199759483359606804242503 0.0427810490131378187705912807814 0.341528856754303000720085492503 +0.551393991708755470959602007497 -0.354719701409339893682926003748 0.6165540218353271484375 +0.551393991708755470959602007497 0.354719701409339893682926003748 0.6165540218353271484375 +0.551478865742683455053452235006 -0.335476693511009227410823996252 -0.0763301499187946375091229356258 +0.551478865742683455053452235006 0.335476693511009227410823996252 -0.0763301499187946375091229356258 +0.551597806811332747045639735006 -0.0449410013854503673225160298443 -0.340910711884498618395866742503 +0.551597806811332747045639735006 0.0449410013854503673225160298443 -0.340910711884498618395866742503 +0.551732397079467751233039507497 -0.225020402669906610659822376874 -0.07040999829769134521484375 +0.551732397079467751233039507497 0.225020402669906610659822376874 -0.07040999829769134521484375 +0.55181121826171875 0 0.5792272090911865234375 +0.551849293708801202917868522491 -0.70807015895843505859375 0.310803897678852081298828125 +0.551849293708801202917868522491 0.70807015895843505859375 0.310803897678852081298828125 +0.551877593994140602795539507497 -0.2113192081451416015625 0.539236021041870183800881477509 +0.551877593994140602795539507497 0.2113192081451416015625 0.539236021041870183800881477509 +0.551968789100646950451789507497 -0.177601200342178328073217130623 0.1542347967624664306640625 +0.551968789100646950451789507497 0.177601200342178328073217130623 0.1542347967624664306640625 +0.552031642198562599865852007497 -0.646344253420829795153679242503 0 +0.552031642198562599865852007497 0.646344253420829795153679242503 0 +0.552167987823486305920539507497 -0.441960811614990234375 0.37387359142303466796875 +0.552167987823486305920539507497 0.441960811614990234375 0.37387359142303466796875 +0.552259504795074462890625 -0.47593273222446441650390625 -0.1760617531836032867431640625 +0.552259504795074462890625 0.47593273222446441650390625 -0.1760617531836032867431640625 +0.552269995212554931640625 -0.65600299835205078125 0.514450013637542724609375 +0.552269995212554931640625 0.65600299835205078125 0.514450013637542724609375 +0.55242526531219482421875 -0.217443756759166717529296875 -0.45830623805522918701171875 +0.55242526531219482421875 0.217443756759166717529296875 -0.45830623805522918701171875 +0.552543735504150368420539507497 -0.478992870450019814221320757497 -0.606432509422302201684829014994 +0.552543735504150368420539507497 0.478992870450019814221320757497 -0.606432509422302201684829014994 +0.552649784088134699011618522491 -0.200812804698944080694644753748 0.119384399056434623020983565311 +0.552649784088134699011618522491 0.200812804698944080694644753748 0.119384399056434623020983565311 +0.552743223309516862329360264994 -0.762865206599235512463508257497 0.122523394227027890290848688437 +0.552743223309516862329360264994 0.762865206599235512463508257497 0.122523394227027890290848688437 +0.552878987789154008325454014994 -0.0884472012519836453536825615629 0.215643596649169905221654630623 +0.552878987789154008325454014994 0.0884472012519836453536825615629 0.215643596649169905221654630623 +0.55292119085788726806640625 0 -0.341728383302688620837272992503 +0.552923977375030517578125 -0.707309085130691572729233485006 0.0631592966616153772552166856258 +0.552923977375030517578125 0.707309085130691572729233485006 0.0631592966616153772552166856258 +0.553066813945770285876335492503 -0.203522408008575433902009876874 -0.112674602866172784976228626874 +0.553066813945770285876335492503 0.203522408008575433902009876874 -0.112674602866172784976228626874 +0.553100609779357932360710492503 -0.2249981462955474853515625 0.256818892061710379870476117503 +0.553100609779357932360710492503 0.2249981462955474853515625 0.256818892061710379870476117503 +0.553144204616546564245993522491 -0.115066203474998463018863503748 -0.201968407630920415707365123126 +0.553144204616546564245993522491 0.115066203474998463018863503748 -0.201968407630920415707365123126 +0.553278619050979636462272992503 -0.181066502630710612908870871252 -0.6863652169704437255859375 +0.553278619050979636462272992503 0.181066502630710612908870871252 -0.6863652169704437255859375 +0.553463393449783236377470529987 -0.0921584948897361672104366903113 0.418551719188690163342414507497 +0.553463393449783236377470529987 0.0921584948897361672104366903113 0.418551719188690163342414507497 +0.553471505641937255859375 -0.1980607509613037109375 0.46576948463916778564453125 +0.553471505641937255859375 0.1980607509613037109375 0.46576948463916778564453125 +0.55363051593303680419921875 0 0.5059575140476226806640625 +0.553713297843933083264289507497 -0.060038097202777862548828125 0.706962597370147771691506477509 +0.553713297843933083264289507497 0.060038097202777862548828125 0.706962597370147771691506477509 +0.5540257394313812255859375 -0.36428175866603851318359375 0.350506491959095001220703125 +0.5540257394313812255859375 0.36428175866603851318359375 0.350506491959095001220703125 +0.5540427267551422119140625 -0.178721098601818090267911998126 0.686364305019378728722756477509 +0.5540427267551422119140625 0.178721098601818090267911998126 0.686364305019378728722756477509 +0.5541142523288726806640625 -0.40258575975894927978515625 0.305584497749805450439453125 +0.5541142523288726806640625 0.40258575975894927978515625 0.305584497749805450439453125 +0.554122650623321555407585492503 0 0.771652692556381136768095529987 +0.554208326339721724096420985006 -0.707143485546112060546875 -0.052934400737285614013671875 +0.554208326339721724096420985006 0.707143485546112060546875 -0.052934400737285614013671875 +0.554217299818992592541633257497 -0.339622390270233165399105246252 0 +0.554217299818992592541633257497 0.339622390270233165399105246252 0 +0.554328596591949440686164507497 -0.229607999324798583984375 0 +0.554328596591949440686164507497 0.229607999324798583984375 0 +0.554422473907470680920539507497 -0.476216125488281238897769753748 -0.525199484825134343957131477509 +0.554422473907470680920539507497 0.476216125488281238897769753748 -0.525199484825134343957131477509 +0.554490011930465764855568977509 -0.594792026281356855932358485006 -0.385698598623275767938167746252 +0.554490011930465764855568977509 0.594792026281356855932358485006 -0.385698598623275767938167746252 +0.554722076654434181897102007497 -0.761427852511405878210837272491 -0.122523394227027890290848688437 +0.554722076654434181897102007497 0.761427852511405878210837272491 -0.122523394227027890290848688437 +0.554878377914428733141960492503 -0.337886404991149913445980246252 -0.466843223571777377056690738755 +0.554878377914428733141960492503 0.337886404991149913445980246252 -0.466843223571777377056690738755 +0.554902017116546630859375 -0.2386730015277862548828125 -0.79694402217864990234375 +0.554902017116546630859375 0.2386730015277862548828125 -0.79694402217864990234375 +0.5559203922748565673828125 -0.311751294136047352179019753748 -0.28941990435123443603515625 +0.5559203922748565673828125 0.311751294136047352179019753748 -0.28941990435123443603515625 +0.556059414148330710681022992503 -0.232845602929592138119474498126 -0.243065546452999131643579744377 +0.556059414148330710681022992503 0.232845602929592138119474498126 -0.243065546452999131643579744377 +0.556190592050552323755141514994 -0.225766098499298073498664507497 0.3601135909557342529296875 +0.556190592050552323755141514994 0.225766098499298073498664507497 0.3601135909557342529296875 +0.5562431812286376953125 -0.1062335968017578125 0.565073585510253884045539507497 +0.5562431812286376953125 0.1062335968017578125 0.565073585510253884045539507497 +0.556561613082885764391960492503 -0.5635759830474853515625 0.112344801425933837890625 +0.556561613082885764391960492503 0.5635759830474853515625 0.112344801425933837890625 +0.556971013545989990234375 -0.82844698429107666015625 0.05881600081920623779296875 +0.556971013545989990234375 0.82844698429107666015625 0.05881600081920623779296875 +0.557103964686393782201889735006 -0.306094104051589988024772992503 0.1357999481260776519775390625 +0.557103964686393782201889735006 0.306094104051589988024772992503 0.1357999481260776519775390625 +0.557226160168647788317741742503 -0.160759295523166673147485994377 -0.293523098528385151251285378748 +0.557226160168647788317741742503 0.160759295523166673147485994377 -0.293523098528385151251285378748 +0.557487201690673894738381477509 -0.405033588409423828125 -0.406393623352050814556690738755 +0.557487201690673894738381477509 0.405033588409423828125 -0.406393623352050814556690738755 +0.55758702754974365234375 -0.827147006988525390625 -0.070176996290683746337890625 +0.55758702754974365234375 0.827147006988525390625 -0.070176996290683746337890625 +0.557605081796646140368522992503 -0.616503289341926552502570757497 0.1774816997349262237548828125 +0.557605081796646140368522992503 0.616503289341926552502570757497 0.1774816997349262237548828125 +0.557754421234130881579460492503 -0.525023984909057661596420985006 -0.23078238964080810546875 +0.557754421234130881579460492503 0.525023984909057661596420985006 -0.23078238964080810546875 +0.557907307147979758532585492503 -0.663939911127090498510483485006 0.240671691298484813348323996252 +0.557907307147979758532585492503 0.663939911127090498510483485006 0.240671691298484813348323996252 +0.55803000926971435546875 -0.405427992343902587890625 -0.72403800487518310546875 +0.55803000926971435546875 0.405427992343902587890625 -0.72403800487518310546875 +0.558066612482070900647102007497 -0.251372553408145904541015625 0.218799108266830438784822376874 +0.558066612482070900647102007497 0.251372553408145904541015625 0.218799108266830438784822376874 +0.558206617832183837890625 -0.370390987396240212170539507497 -0.203016099333763105905248380623 +0.558206617832183837890625 0.370390987396240212170539507497 -0.203016099333763105905248380623 +0.558323344588279701916633257497 -0.276698796451091744152961382497 0.57811136543750762939453125 +0.558323344588279701916633257497 0.276698796451091744152961382497 0.57811136543750762939453125 +0.558396717905998207776008257497 -0.768566152453422524182258257497 0 +0.558396717905998207776008257497 0.768566152453422524182258257497 0 +0.558422988653182961193977007497 -0.331661689281463611944644753748 -0.6230286061763763427734375 +0.558422988653182961193977007497 0.331661689281463611944644753748 -0.6230286061763763427734375 +0.558668678998947121350227007497 -0.110518202930688855256669000937 -0.696903294324874855725227007497 +0.558668678998947121350227007497 0.110518202930688855256669000937 -0.696903294324874855725227007497 +0.55869448184967041015625 -0.0994267500936985015869140625 0.49038223922252655029296875 +0.55869448184967041015625 0.0994267500936985015869140625 0.49038223922252655029296875 +0.558769592642784140856804242503 -0.197583355754613859689428068123 -0.6092927455902099609375 +0.558769592642784140856804242503 0.197583355754613859689428068123 -0.6092927455902099609375 +0.558927583694457941199118522491 -0.0736367985606193459213741903113 -0.205371594429016118832365123126 +0.558927583694457941199118522491 0.0736367985606193459213741903113 -0.205371594429016118832365123126 +0.558968019485473699425881477509 -0.209236788749694840872095369377 -0.532705593109130903783920985006 +0.558968019485473699425881477509 0.209236788749694840872095369377 -0.532705593109130903783920985006 +0.559197008609771728515625 -0.066740997135639190673828125 0.826344013214111328125 +0.559197008609771728515625 0.066740997135639190673828125 0.826344013214111328125 +0.559300804138183615954460492503 -0.5641880035400390625 -0.0942071974277496337890625 +0.559300804138183615954460492503 0.5641880035400390625 -0.0942071974277496337890625 +0.559725749492645197058493522491 -0.536283525824546747351462272491 0.549187380075454645300681022491 +0.559725749492645197058493522491 0.536283525824546747351462272491 0.549187380075454645300681022491 +0.559738093614578269274772992503 -0.706318369507789589611945757497 -0.3005125522613525390625 +0.559738093614578269274772992503 0.706318369507789589611945757497 -0.3005125522613525390625 +0.559755194187164240027243522491 -0.126416506618261342831388560626 0.757094895839691139904914507497 +0.559755194187164240027243522491 0.126416506618261342831388560626 0.757094895839691139904914507497 +0.5598866045475006103515625 0 0.330191564559936534539730246252 +0.559916687011718705591079014994 -0.125715097784996038265958873126 -0.400860601663589444232371761245 +0.559916687011718705591079014994 0.125715097784996038265958873126 -0.400860601663589444232371761245 +0.56000888347625732421875 -0.561748835444450311804587272491 -0.305496792495250690802066628748 +0.56000888347625732421875 0.561748835444450311804587272491 -0.305496792495250690802066628748 +0.560076406598091103283820757497 -0.309543646872043609619140625 -0.1140054501593112945556640625 +0.560076406598091103283820757497 0.309543646872043609619140625 -0.1140054501593112945556640625 +0.560169404745101906506477007497 -0.237381893396377552374332253748 -0.346208107471466020044204014994 +0.560169404745101906506477007497 0.237381893396377552374332253748 -0.346208107471466020044204014994 +0.560172605514526411596420985006 -0.276459297537803683209034488755 0.179657404124736796990902121252 +0.560172605514526411596420985006 0.276459297537803683209034488755 0.179657404124736796990902121252 +0.560372701287269570080695757497 -0.337742394208908058850227007497 -0.542597508430480934826789507497 +0.560372701287269570080695757497 0.337742394208908058850227007497 -0.542597508430480934826789507497 +0.560394608974456809313835492503 -0.112457996606826773899889815311 0.182513397932052595651342130623 +0.560394608974456809313835492503 0.112457996606826773899889815311 0.182513397932052595651342130623 +0.5606922805309295654296875 -0.407365006208419755395766514994 0.0983751967549323924622228787484 +0.5606922805309295654296875 0.407365006208419755395766514994 0.0983751967549323924622228787484 +0.560725986957550048828125 -0.700617015361785888671875 -0.4412719905376434326171875 +0.560725986957550048828125 0.700617015361785888671875 -0.4412719905376434326171875 +0.561074388027191117700454014994 -0.1394712030887603759765625 -0.160447204113006586245759876874 +0.561074388027191117700454014994 0.1394712030887603759765625 -0.160447204113006586245759876874 +0.561472213268280007092414507497 -0.0486509978771209675163511576557 0.205869591236114507504240123126 +0.561472213268280007092414507497 0.0486509978771209675163511576557 0.205869591236114507504240123126 +0.561732298135757424084602007497 -0.5540733039379119873046875 -0.432965692877769481317073996252 +0.561732298135757424084602007497 0.5540733039379119873046875 -0.432965692877769481317073996252 +0.56215350329875946044921875 -0.286287009716033935546875 -0.4056150019168853759765625 +0.56215350329875946044921875 0.286287009716033935546875 -0.4056150019168853759765625 +0.56224501132965087890625 -0.44616901874542236328125 -0.217517249286174774169921875 +0.56224501132965087890625 0.44616901874542236328125 -0.217517249286174774169921875 +0.56227397918701171875 -0.57124602794647216796875 -0.597935020923614501953125 +0.56227397918701171875 0.57124602794647216796875 -0.597935020923614501953125 +0.562368804216384798877470529987 -0.408582282066345170434829014994 -0.0824732974171638461013955634371 +0.562368804216384798877470529987 0.408582282066345170434829014994 -0.0824732974171638461013955634371 +0.562369787693023703845085492503 -0.204858595132827753237947376874 0.0421061977744102491905131557814 +0.562369787693023703845085492503 0.204858595132827753237947376874 0.0421061977744102491905131557814 +0.562411487102508544921875 -0.48493199050426483154296875 0.10504424571990966796875 +0.562411487102508544921875 0.48493199050426483154296875 0.10504424571990966796875 +0.562488973140716552734375 -0.16100299358367919921875 -0.81097698211669921875 +0.562488973140716552734375 0.16100299358367919921875 -0.81097698211669921875 +0.562529397010803178247329014994 -0.205706405639648426397769753748 -0.03528960049152374267578125 +0.562529397010803178247329014994 0.205706405639648426397769753748 -0.03528960049152374267578125 +0.562542515993118330541733485006 -0.154197545349597925357088001874 0.286825495958328235968082253748 +0.562542515993118330541733485006 0.154197545349597925357088001874 0.286825495958328235968082253748 +0.562551987171173051294204014994 -0.667192599177360512463508257497 0.375351651012897469250617632497 +0.562551987171173051294204014994 0.667192599177360512463508257497 0.375351651012897469250617632497 +0.562712377309799172131477007497 -0.408833107352256808209034488755 0.571148997545242287365852007497 +0.562712377309799172131477007497 0.408833107352256808209034488755 0.571148997545242287365852007497 +0.562760910391807533947883257497 -0.258274254202842723504573996252 -0.197724145650863658563167746252 +0.562760910391807533947883257497 0.258274254202842723504573996252 -0.197724145650863658563167746252 +0.562785279750824041222756477509 -0.0371709007769823115974183735943 -0.7013501822948455810546875 +0.562785279750824041222756477509 0.0371709007769823115974183735943 -0.7013501822948455810546875 +0.562800014019012473376335492503 -0.0247500009834766381000559221093 -0.206503808498382568359375 +0.562800014019012473376335492503 0.0247500009834766381000559221093 -0.206503808498382568359375 +0.563311707973480180200454014994 -0.33910520374774932861328125 -0.240182608366012545486611884371 +0.563311707973480180200454014994 0.33910520374774932861328125 -0.240182608366012545486611884371 +0.563326799869537375720085492503 0 0.2065494060516357421875 +0.563402962684631303247329014994 -0.618763458728790238794204014994 -0.149024545401334751471011941248 +0.563402962684631303247329014994 0.618763458728790238794204014994 -0.149024545401334751471011941248 +0.563425856828689619604233485006 -0.0852800004184246090987997490629 0.312695507705211650506527121252 +0.563425856828689619604233485006 0.0852800004184246090987997490629 0.312695507705211650506527121252 +0.564166009426116943359375 -0.46087801456451416015625 0.685060024261474609375 +0.564166009426116943359375 0.46087801456451416015625 0.685060024261474609375 +0.5641852319240570068359375 -0.1650847457349300384521484375 -0.465770244598388671875 +0.5641852319240570068359375 0.1650847457349300384521484375 -0.465770244598388671875 +0.564510762691497802734375 -0.24364574253559112548828125 0.4294927418231964111328125 +0.564510762691497802734375 0.24364574253559112548828125 0.4294927418231964111328125 +0.56459699571132659912109375 -0.349238254129886627197265625 -0.348944999277591705322265625 +0.56459699571132659912109375 0.349238254129886627197265625 -0.348944999277591705322265625 +0.564780771732330322265625 -0.48555748164653778076171875 -0.0880732499063014984130859375 +0.564780771732330322265625 0.48555748164653778076171875 -0.0880732499063014984130859375 +0.5648066997528076171875 -0.664995574951171897204460492503 -0.220848302543163316213892244377 +0.5648066997528076171875 0.664995574951171897204460492503 -0.220848302543163316213892244377 +0.564926022291183493884147992503 -0.565145498514175392834602007497 -0.513779965043067887719985264994 +0.564926022291183493884147992503 0.565145498514175392834602007497 -0.513779965043067887719985264994 +0.565138792991638161389289507497 -0.162373799085617054327457253748 -0.119384399056434623020983565311 +0.565138792991638161389289507497 0.162373799085617054327457253748 -0.119384399056434623020983565311 +0.5651447772979736328125 -0.26074159145355224609375 0.502618408203124977795539507497 +0.5651447772979736328125 0.26074159145355224609375 0.502618408203124977795539507497 +0.565208995342254660876335492503 -0.137338203191757185495092130623 0.147231003642082219906583873126 +0.565208995342254660876335492503 0.137338203191757185495092130623 0.147231003642082219906583873126 +0.56544409692287445068359375 -0.116735447943210599031083063437 -0.298573599755764029772819867503 +0.56544409692287445068359375 0.116735447943210599031083063437 -0.298573599755764029772819867503 +0.565630209445953324731704014994 -0.184593003988265974557592130623 -0.0773825973272323636154013115629 +0.565630209445953324731704014994 0.184593003988265974557592130623 -0.0773825973272323636154013115629 +0.565686416625976629113381477509 -0.565684795379638671875 0 +0.565686416625976629113381477509 0.565684795379638671875 0 +0.56579601764678955078125 -0.783451020717620849609375 0.2570590078830718994140625 +0.56579601764678955078125 0.783451020717620849609375 0.2570590078830718994140625 +0.565802237391471840588508257497 -0.282023957371711764263721988755 -0.151096399128437058889673494377 +0.565802237391471840588508257497 0.282023957371711764263721988755 -0.151096399128437058889673494377 +0.565930384397506647253806022491 -0.0772680975496768951416015625 -0.404663717746734596936164507497 +0.565930384397506647253806022491 0.0772680975496768951416015625 -0.404663717746734596936164507497 +0.566106605529785089636618522491 -0.1831254065036773681640625 0.0773825973272323636154013115629 +0.566106605529785089636618522491 0.1831254065036773681640625 0.0773825973272323636154013115629 +0.566280761361122153552116742503 -0.315723001956939697265625 0.69436733424663543701171875 +0.566280761361122153552116742503 0.315723001956939697265625 0.69436733424663543701171875 +0.566312611103057861328125 -0.411448085308074917865184261245 0 +0.566312611103057861328125 0.411448085308074917865184261245 0 +0.566489684581756525183493522491 -0.137487699091434462106420255623 0.387539619207382168841746761245 +0.566489684581756525183493522491 0.137487699091434462106420255623 0.387539619207382168841746761245 +0.56652309000492095947265625 -0.315383246541023287701221988755 0.04566249810159206390380859375 +0.56652309000492095947265625 0.315383246541023287701221988755 0.04566249810159206390380859375 +0.5665372908115386962890625 -0.256217500567436196057258257497 0.321540090441703785284488503748 +0.5665372908115386962890625 0.256217500567436196057258257497 0.321540090441703785284488503748 +0.5665400028228759765625 -0.08232200145721435546875 -0.819912016391754150390625 +0.5665400028228759765625 0.08232200145721435546875 -0.819912016391754150390625 +0.566574382781982355261618522491 -0.0461915977299213395546040317186 0.408484983444213856085269753748 +0.566574382781982355261618522491 0.0461915977299213395546040317186 0.408484983444213856085269753748 +0.566697317361831709447983485006 -0.316054043173789989129573996252 -0.0382583511993289035468812642193 +0.566697317361831709447983485006 0.316054043173789989129573996252 -0.0382583511993289035468812642193 +0.56675960123538970947265625 -0.411769743263721454962222878748 -0.481383046507835365979133257497 +0.56675960123538970947265625 0.411769743263721454962222878748 -0.481383046507835365979133257497 +0.567069590091705322265625 -0.160426801443099981137052623126 0.112674602866172784976228626874 +0.567069590091705322265625 0.160426801443099981137052623126 0.112674602866172784976228626874 +0.567334315180778481213508257497 -0.412187898159027066302684261245 -0.640884274244308493884147992503 +0.567334315180778481213508257497 0.412187898159027066302684261245 -0.640884274244308493884147992503 +0.567525577545166082238381477509 -0.492511177062988303454460492503 -0.2744944095611572265625 +0.567525577545166082238381477509 0.492511177062988303454460492503 -0.2744944095611572265625 +0.568192681670188881604133257497 -0.168585604429245000668302623126 0.609291073679923966821547764994 +0.568192681670188881604133257497 0.168585604429245000668302623126 0.609291073679923966821547764994 +0.56830044090747833251953125 -0.62378613650798797607421875 0.436377762258052803723273882497 +0.56830044090747833251953125 0.62378613650798797607421875 0.436377762258052803723273882497 +0.568327796459197953637954014994 -0.0974748015403747586349325615629 -0.165837603807449329718082253748 +0.568327796459197953637954014994 0.0974748015403747586349325615629 -0.165837603807449329718082253748 +0.56845279037952423095703125 -0.0566134028136730180214009067186 0.629409676790237404553352007497 +0.56845279037952423095703125 0.0566134028136730180214009067186 0.629409676790237404553352007497 +0.568468987941741943359375 0 -0.822704017162322998046875 +0.568633002042770341333266514994 -0.525021222233772233423110264994 -0.351438455283641815185546875 +0.568633002042770341333266514994 0.525021222233772233423110264994 -0.351438455283641815185546875 +0.56905591487884521484375 -0.0288736008107662173172158759371 -0.40662229061126708984375 +0.56905591487884521484375 0.0288736008107662173172158759371 -0.40662229061126708984375 +0.5692333281040191650390625 -0.257090885937213908807308371252 -0.715806016325950533740751779987 +0.5692333281040191650390625 0.257090885937213908807308371252 -0.715806016325950533740751779987 +0.569374653697013899389389735006 -0.188451255857944505178735994377 -0.250596453249454509393245871252 +0.569374653697013899389389735006 0.188451255857944505178735994377 -0.250596453249454509393245871252 +0.5696775019168853759765625 -0.41389127075672149658203125 -0.2581889927387237548828125 +0.5696775019168853759765625 0.41389127075672149658203125 -0.2581889927387237548828125 +0.569801723957061745373664507497 -0.627331513166427656713608485006 0.30295349657535552978515625 +0.569801723957061745373664507497 0.627331513166427656713608485006 0.30295349657535552978515625 +0.569814026355743408203125 -0.656277000904083251953125 -0.4945839941501617431640625 +0.569814026355743408203125 0.656277000904083251953125 -0.4945839941501617431640625 +0.569875788688659623559829014994 -0.0726851999759674100021200615629 0.173085594177246088198884876874 +0.569875788688659623559829014994 0.0726851999759674100021200615629 0.173085594177246088198884876874 +0.570086312294006303247329014994 -0.378453588485717751233039507497 0.147562800347805000988898882497 +0.570086312294006303247329014994 0.378453588485717751233039507497 0.147562800347805000988898882497 +0.570092421770095891808693977509 -0.460081779956817649157585492503 0.52280008792877197265625 +0.570092421770095891808693977509 0.460081779956817649157585492503 0.52280008792877197265625 +0.570150893926620550011818977509 -0.414234003424644503521534488755 -0.559765809774398825915397992503 +0.570150893926620550011818977509 0.414234003424644503521534488755 -0.559765809774398825915397992503 +0.570177602767944380346420985006 -0.535688781738281272204460492503 0.167137598991394048519865123126 +0.570177602767944380346420985006 0.535688781738281272204460492503 0.167137598991394048519865123126 +0.570194464921951249536391514994 -0.1380884535610675811767578125 -0.615069347620010309363181022491 +0.570194464921951249536391514994 0.1380884535610675811767578125 -0.615069347620010309363181022491 +0.570196998119354203637954014994 -0.584961485862731889184829014994 0.234936605393886555059879128748 +0.570196998119354203637954014994 0.584961485862731889184829014994 0.234936605393886555059879128748 +0.570267975330352783203125 -0.780201971530914306640625 -0.2570590078830718994140625 +0.570267975330352783203125 0.780201971530914306640625 -0.2570590078830718994140625 +0.57030522823333740234375 -0.48708526790142059326171875 0 +0.57030522823333740234375 0.48708526790142059326171875 0 +0.570496845245361261511618522491 -0.576480913162231378699118522491 0.494674491882324207647769753748 +0.570496845245361261511618522491 0.576480913162231378699118522491 0.494674491882324207647769753748 +0.570634782314300537109375 -0.185407805442810047491519753748 0 +0.570634782314300537109375 0.185407805442810047491519753748 0 +0.5706880092620849609375 -0.15342080593109130859375 -0.539237594604492165295539507497 +0.5706880092620849609375 0.15342080593109130859375 -0.539237594604492165295539507497 +0.570740166306495599890524772491 -0.328257241845130887103465511245 0.537590137124061562268195757497 +0.570740166306495599890524772491 0.328257241845130887103465511245 0.537590137124061562268195757497 +0.571099764108657814709602007497 -0.07174894772469997406005859375 -0.301988700032234214098991742503 +0.571099764108657814709602007497 0.07174894772469997406005859375 -0.301988700032234214098991742503 +0.57140393555164337158203125 -0.182206055521965032406583873126 0.250595794618129752429069867503 +0.57140393555164337158203125 0.182206055521965032406583873126 0.250595794618129752429069867503 +0.572022020816802978515625 -0.287708245217800140380859375 0.39053173363208770751953125 +0.572022020816802978515625 0.287708245217800140380859375 0.39053173363208770751953125 +0.5723175108432769775390625 -0.11365950107574462890625 -0.47120551764965057373046875 +0.5723175108432769775390625 0.11365950107574462890625 -0.47120551764965057373046875 +0.572790396213531449731704014994 -0.191283395886421181408820757497 -0.354008185863494861944644753748 +0.572790396213531449731704014994 0.191283395886421181408820757497 -0.354008185863494861944644753748 +0.57279302179813385009765625 -0.733946269750595070568977007497 0.189025298506021482980443693123 +0.57279302179813385009765625 0.733946269750595070568977007497 0.189025298506021482980443693123 +0.573246097564697243420539507497 -0.267201209068298306537059261245 -0.299987089633941605981704014994 +0.573246097564697243420539507497 0.267201209068298306537059261245 -0.299987089633941605981704014994 +0.573250210285186745373664507497 -0.624758523702621415552016514994 0.0596682995557785006424111884371 +0.573250210285186745373664507497 0.624758523702621415552016514994 0.0596682995557785006424111884371 +0.573432308435440130089943977509 -0.682141488790512062756477007497 0.125928895175456995181306751874 +0.573432308435440130089943977509 0.682141488790512062756477007497 0.125928895175456995181306751874 +0.5736343860626220703125 -0.286578392982482943462940738755 -0.478347206115722678454460492503 +0.5736343860626220703125 0.286578392982482943462940738755 -0.478347206115722678454460492503 +0.57363879680633544921875 -0.381573486328124988897769753748 -0.123853802680969224403462192186 +0.57363879680633544921875 0.381573486328124988897769753748 -0.123853802680969224403462192186 +0.573694217205047540808493522491 -0.0243852004408836343929412038278 0.174012601375579833984375 +0.573694217205047540808493522491 0.0243852004408836343929412038278 0.174012601375579833984375 +0.573774504661560103002670985006 -0.04274204932153224945068359375 0.302416403591632854119808371252 +0.573774504661560103002670985006 0.04274204932153224945068359375 0.302416403591632854119808371252 +0.573850917816162042761618522491 -0.285798096656799283099559261245 0.281094801425933793481704014994 +0.573850917816162042761618522491 0.285798096656799283099559261245 0.281094801425933793481704014994 +0.574024087190628029553352007497 -0.0268112007528543486167826870314 -0.303771653771400473864616742503 +0.574024087190628029553352007497 0.0268112007528543486167826870314 -0.303771653771400473864616742503 +0.574063217639923073498664507497 -0.048900000751018524169921875 -0.167510998249053938424779630623 +0.574063217639923073498664507497 0.048900000751018524169921875 -0.167510998249053938424779630623 +0.574169912934303305895866742503 -0.486242479085922219006477007497 -0.395470999181270599365234375 +0.574169912934303305895866742503 0.486242479085922219006477007497 -0.395470999181270599365234375 +0.574224007129669145044204014994 -0.120711600780487052220202315311 -0.12528119981288909912109375 +0.574224007129669145044204014994 0.120711600780487052220202315311 -0.12528119981288909912109375 +0.574246788024902365954460492503 0 0.692993706464767433850227007497 +0.5743730068206787109375 -0.2655160129070281982421875 0.774336993694305419921875 +0.5743730068206787109375 0.2655160129070281982421875 0.774336993694305419921875 +0.574374747276306107934829014994 -0.624574056267738320080695757497 -0.0500037999823689446876606723436 +0.574374747276306107934829014994 0.624574056267738320080695757497 -0.0500037999823689446876606723436 +0.5743754804134368896484375 -0.236577594280242914370759876874 0.651248073577880837170539507497 +0.5743754804134368896484375 0.236577594280242914370759876874 0.651248073577880837170539507497 +0.57439126074314117431640625 -0.455606997013092041015625 0.1581030003726482391357421875 +0.57439126074314117431640625 0.455606997013092041015625 0.1581030003726482391357421875 +0.5745022594928741455078125 -0.3797189891338348388671875 -0.297087751328945159912109375 +0.5745022594928741455078125 0.3797189891338348388671875 -0.297087751328945159912109375 +0.574580812454223655016960492503 -0.457640790939331076891960492503 -0.316893601417541526110710492503 +0.574580812454223655016960492503 0.457640790939331076891960492503 -0.316893601417541526110710492503 +0.57473324239253997802734375 -0.148788750171661376953125 0.45830476284027099609375 +0.57473324239253997802734375 0.148788750171661376953125 0.45830476284027099609375 +0.574775993824005126953125 -0.519254982471466064453125 0.632461011409759521484375 +0.574775993824005126953125 0.519254982471466064453125 0.632461011409759521484375 +0.57480035722255706787109375 -0.667758786678314231188835492503 -0.355249644815921750140574886245 +0.57480035722255706787109375 0.667758786678314231188835492503 -0.355249644815921750140574886245 +0.574864006042480446545539507497 -0.0532527983188629192023988423443 0.5538008213043212890625 +0.574864006042480446545539507497 0.0532527983188629192023988423443 0.5538008213043212890625 +0.575159978866577215050881477509 -0.3087232112884521484375 0.462472009658813520971420985006 +0.575159978866577215050881477509 0.3087232112884521484375 0.462472009658813520971420985006 +0.57518322765827178955078125 -0.04953149892389774322509765625 0.47875951230525970458984375 +0.57518322765827178955078125 0.04953149892389774322509765625 0.47875951230525970458984375 +0.5752031803131103515625 -0.159274399280548095703125 0.532704019546508811266960492503 +0.5752031803131103515625 0.159274399280548095703125 0.532704019546508811266960492503 +0.5752350389957427978515625 -0.288570094108581531866519753748 0.0912801511585712432861328125 +0.5752350389957427978515625 0.288570094108581531866519753748 0.0912801511585712432861328125 +0.5753471851348876953125 -0.537854385375976629113381477509 -0.140314400196075439453125 +0.5753471851348876953125 0.537854385375976629113381477509 -0.140314400196075439453125 +0.575365680456161432410056022491 -0.347507306933402981830028011245 0.195430207252502430304019753748 +0.575365680456161432410056022491 0.347507306933402981830028011245 0.195430207252502430304019753748 +0.57538139820098876953125 -0.164814001321792608090177623126 -0.0421061977744102491905131557814 +0.57538139820098876953125 0.164814001321792608090177623126 -0.0421061977744102491905131557814 +0.575551807880401611328125 -0.0963720023632049505035723768742 0.139473000168800348452791126874 +0.575551807880401611328125 0.0963720023632049505035723768742 0.139473000168800348452791126874 +0.5758326053619384765625 -0.181922993063926674572883257497 0.354006808996200517114516514994 +0.5758326053619384765625 0.181922993063926674572883257497 0.354006808996200517114516514994 +0.575948926806449823523337272491 -0.06927500106394290924072265625 -0.62127603590488433837890625 +0.575948926806449823523337272491 0.06927500106394290924072265625 -0.62127603590488433837890625 +0.575979602336883500512954014994 0 -0.168070203065872197933927623126 +0.576008391380310014184829014994 -0.164221805334091169870092130623 0.03528960049152374267578125 +0.576008391380310014184829014994 0.164221805334091169870092130623 0.03528960049152374267578125 +0.576395934820175148693977007497 -0.290532447397708892822265625 -0.0765426989644765881637411553129 +0.576395934820175148693977007497 0.290532447397708892822265625 -0.0765426989644765881637411553129 +0.576479813456535317151008257497 -0.112144497036933896150223688437 0.278558142483234405517578125 +0.576479813456535317151008257497 0.112144497036933896150223688437 0.278558142483234405517578125 +0.576507622003555320056022992503 -0.271128603816032431872429242503 -0.635710519552230901574318977509 +0.576507622003555320056022992503 0.271128603816032431872429242503 -0.635710519552230901574318977509 +0.576580202579498268811164507497 -0.143204399943351740054353626874 -0.0839525967836379921616085653113 +0.576580202579498268811164507497 0.143204399943351740054353626874 -0.0839525967836379921616085653113 +0.576756906509399480675881477509 -0.682785916328430220190170985006 -0.105614997446537017822265625 +0.576756906509399480675881477509 0.682785916328430220190170985006 -0.105614997446537017822265625 +0.576926004886627152856704014994 0 0.396429592370986905169871761245 +0.5770803391933441162109375 -0.7332470715045928955078125 -0.178401454538106907232730691248 +0.5770803391933441162109375 0.7332470715045928955078125 -0.178401454538106907232730691248 +0.577437230944633506091179242503 -0.209389707446098333187833873126 0.212654659152030939273103626874 +0.577437230944633506091179242503 0.209389707446098333187833873126 0.212654659152030939273103626874 +0.577467906475067183080795985006 -0.588145512342453047338608485006 0.36140848696231842041015625 +0.577467906475067183080795985006 0.588145512342453047338608485006 0.36140848696231842041015625 +0.5776214897632598876953125 -0.237579010426998138427734375 -0.4152224957942962646484375 +0.5776214897632598876953125 0.237579010426998138427734375 -0.4152224957942962646484375 +0.57766123116016387939453125 -0.06168074905872344970703125 -0.4743449985980987548828125 +0.57766123116016387939453125 0.06168074905872344970703125 -0.4743449985980987548828125 +0.577870813012123063501235264994 0 -0.623350065946578935083266514994 +0.577966344356536931847756477509 -0.214891293644905084780916126874 -0.205613192915916453973323996252 +0.577966344356536931847756477509 0.214891293644905084780916126874 -0.205613192915916453973323996252 +0.578043186664581210010283029987 -0.31377919018268585205078125 0.239600193500518782174779630623 +0.578043186664581210010283029987 0.31377919018268585205078125 0.239600193500518782174779630623 +0.578195190429687477795539507497 -0.0981815993785858237563601846887 -0.544105577468872114721420985006 +0.578195190429687477795539507497 0.0981815993785858237563601846887 -0.544105577468872114721420985006 +0.578473198413848810339743522491 -0.119596803188323969058259876874 0.105193197727203369140625 +0.578473198413848810339743522491 0.119596803188323969058259876874 0.105193197727203369140625 +0.578493016958236627722556022491 -0.281010855734348308221370871252 -0.555769121646881081311164507497 +0.578493016958236627722556022491 0.281010855734348308221370871252 -0.555769121646881081311164507497 +0.578625583648681662829460492503 -0.142249801754951471499666126874 0.07040999829769134521484375 +0.578625583648681662829460492503 0.142249801754951471499666126874 0.07040999829769134521484375 +0.5787487328052520751953125 -0.45819224417209625244140625 -0.132700502872467041015625 +0.5787487328052520751953125 0.45819224417209625244140625 -0.132700502872467041015625 +0.578879976272583030016960492503 -0.420576000213623069079460492503 -0.35777199268341064453125 +0.578879976272583030016960492503 0.420576000213623069079460492503 -0.35777199268341064453125 +0.579155212640762306897102007497 -0.295091551542282115594417746252 0 +0.579155212640762306897102007497 0.295091551542282115594417746252 0 +0.579274153709411598889289507497 -0.549812307953834511486945757497 0.290943092107772804943977007497 +0.579274153709411598889289507497 0.549812307953834511486945757497 0.290943092107772804943977007497 +0.579394835233688287878806022491 -0.5897121429443359375 -0.1975884474813938140869140625 +0.579394835233688287878806022491 0.5897121429443359375 -0.1975884474813938140869140625 +0.579445177316665671618522992503 -0.119929504394531247224442438437 0.678129279613494895251335492503 +0.579445177316665671618522992503 0.119929504394531247224442438437 0.678129279613494895251335492503 +0.5796247422695159912109375 0 -0.47595749795436859130859375 +0.579637110233306884765625 -0.377791839838027942999332253748 0.493754777312278736456363503748 +0.579637110233306884765625 0.377791839838027942999332253748 0.493754777312278736456363503748 +0.579718768596649169921875 -0.143074095249176025390625 -0.256819550693035136834652121252 +0.579718768596649169921875 0.143074095249176025390625 -0.256819550693035136834652121252 +0.579972791671752974096420985006 -0.356287193298339854852230246252 -0.420346403121948264391960492503 +0.579972791671752974096420985006 0.356287193298339854852230246252 -0.420346403121948264391960492503 +0.580136689543724104467514735006 -0.259847259521484408306690738755 0.1357212997972965240478515625 +0.580136689543724104467514735006 0.259847259521484408306690738755 0.1357212997972965240478515625 +0.580192029476165771484375 -0.33920300006866455078125 -0.740485012531280517578125 +0.580192029476165771484375 0.33920300006866455078125 -0.740485012531280517578125 +0.580557245016098066869858485006 -0.235032859444618241751001619377 0.173817804455757146664396373126 +0.580557245016098066869858485006 0.235032859444618241751001619377 0.173817804455757146664396373126 +0.580893993377685546875 -0.745337009429931640625 0.3271619975566864013671875 +0.580893993377685546875 0.745337009429931640625 0.3271619975566864013671875 +0.580901402235031172338608485006 -0.630557084083557151110710492503 -0.273771893978118907586605246252 +0.580901402235031172338608485006 0.630557084083557151110710492503 -0.273771893978118907586605246252 +0.580912780761718816613381477509 -0.502648782730102605675881477509 0.223348808288574229852230246252 +0.580912780761718816613381477509 0.502648782730102605675881477509 0.223348808288574229852230246252 +0.581226611137390158923210492503 -0.0483432009816169711013955634371 0.140848195552825933285490123126 +0.581226611137390158923210492503 0.0483432009816169711013955634371 0.140848195552825933285490123126 +0.581311780214309736791733485006 -0.499263274669647205694644753748 0.472030216455459616931022992503 +0.581311780214309736791733485006 0.499263274669647205694644753748 0.472030216455459616931022992503 +0.581338816881179831774772992503 -0.545165097713470436779914507497 0.418139111995697032586605246252 +0.581338816881179831774772992503 0.545165097713470436779914507497 0.418139111995697032586605246252 +0.581376233696937583239616742503 0 0.290689744055271148681640625 +0.581421393156051569128806022491 -0.386691218614578224865852007497 0.04918409883975982666015625 +0.581421393156051569128806022491 0.386691218614578224865852007497 0.04918409883975982666015625 +0.581530582904815629419204014994 -0.0922236040234565707107705634371 0.378571915626525867804019753748 +0.581530582904815629419204014994 0.0922236040234565707107705634371 0.378571915626525867804019753748 +0.581597799062728793018095529987 -0.387358289957046464380141514994 -0.0412062011659145299713458143742 +0.581597799062728793018095529987 0.387358289957046464380141514994 -0.0412062011659145299713458143742 +0.5816249847412109375 -0.504203021526336669921875 -0.638350009918212890625 +0.5816249847412109375 0.504203021526336669921875 -0.638350009918212890625 +0.581746208667755060339743522491 -0.352943491935729936059829014994 -0.164324302971363050973607755623 +0.581746208667755060339743522491 0.352943491935729936059829014994 -0.164324302971363050973607755623 +0.581746387481689497533920985006 -0.3542912006378173828125 0.419582414627075239721420985006 +0.581746387481689497533920985006 0.3542912006378173828125 0.419582414627075239721420985006 +0.58177350461483001708984375 -0.3203490078449249267578125 0.34844850003719329833984375 +0.58177350461483001708984375 0.3203490078449249267578125 0.34844850003719329833984375 +0.581834971904754638671875 -0.803016006946563720703125 0.128971993923187255859375 +0.581834971904754638671875 0.803016006946563720703125 0.128971993923187255859375 +0.581854391098022505346420985006 -0.0330000013113021864463725307814 -0.5480480194091796875 +0.581854391098022505346420985006 0.0330000013113021864463725307814 -0.5480480194091796875 +0.582026991248130731726462272491 -0.374426351487636532855418636245 0.65080702304840087890625 +0.582026991248130731726462272491 0.374426351487636532855418636245 0.65080702304840087890625 +0.582115209102630593029914507497 -0.0736794009804725563705929403113 -0.125353199243545515573217130623 +0.582115209102630593029914507497 0.0736794009804725563705929403113 -0.125353199243545515573217130623 +0.58247248828411102294921875 -0.4231890141963958740234375 0.2100884914398193359375 +0.58247248828411102294921875 0.4231890141963958740234375 0.2100884914398193359375 +0.5824910104274749755859375 -0.295650604367256153448551003748 -0.251585593819618202893195757497 +0.5824910104274749755859375 0.295650604367256153448551003748 -0.251585593819618202893195757497 +0.582669502496719338147102007497 -0.14426930248737335205078125 -0.360114300251007046771434261245 +0.582669502496719338147102007497 0.14426930248737335205078125 -0.360114300251007046771434261245 +0.582823169231414861535256477509 -0.239533442258834855520532869377 -0.159500902891159063168302623126 +0.582823169231414861535256477509 0.239533442258834855520532869377 -0.159500902891159063168302623126 +0.582834577560424782483039507497 -0.496667701005935657843082253748 -0.472889703512191783563167746252 +0.582834577560424782483039507497 0.496667701005935657843082253748 -0.472889703512191783563167746252 +0.58312261104583740234375 0 0.1413078010082244873046875 +0.583151400089263916015625 -0.2635288536548614501953125 -0.113959946483373639192215875937 +0.583151400089263916015625 0.2635288536548614501953125 -0.113959946483373639192215875937 +0.5832870006561279296875 0 0.81226599216461181640625 +0.583422589302062921667868522491 -0.140065196156501758917301003748 0 +0.583422589302062921667868522491 0.140065196156501758917301003748 0 +0.5836419761180877685546875 -0.746604034304618746631376779987 0.0666681464761495617965536553129 +0.5836419761180877685546875 0.746604034304618746631376779987 0.0666681464761495617965536553129 +0.58378650248050689697265625 -0.302511759102344512939453125 -0.360804744064807891845703125 +0.58378650248050689697265625 0.302511759102344512939453125 -0.360804744064807891845703125 +0.58391797542572021484375 -0.801503002643585205078125 -0.128971993923187255859375 +0.58391797542572021484375 0.801503002643585205078125 -0.128971993923187255859375 +0.584016320109367326196547764994 -0.191125752776861168591437944997 -0.72449661791324615478515625 +0.584016320109367326196547764994 0.191125752776861168591437944997 -0.72449661791324615478515625 +0.584475147724151544714743522491 -0.0633735470473766326904296875 0.746238297224044777600227007497 +0.584475147724151544714743522491 0.0633735470473766326904296875 0.746238297224044777600227007497 +0.584504091739654563220085492503 -0.684364503622055031506477007497 0 +0.584504091739654563220085492503 0.684364503622055031506477007497 0 +0.5846335887908935546875 -0.543180799484252907483039507497 0.0561999976634979248046875 +0.5846335887908935546875 0.543180799484252907483039507497 0.0561999976634979248046875 +0.58477874100208282470703125 -0.511274167895317099841179242503 0.345156100392341624871761496252 +0.58477874100208282470703125 0.511274167895317099841179242503 0.345156100392341624871761496252 +0.58482287824153900146484375 -0.188650048524141300543277566248 0.724495655298233010022102007497 +0.58482287824153900146484375 0.188650048524141300543277566248 0.724495655298233010022102007497 +0.584960675239562966076789507497 -0.424997441470623016357421875 0.446875578165054299084602007497 +0.584960675239562966076789507497 0.424997441470623016357421875 0.446875578165054299084602007497 +0.584997677803039572985710492503 -0.7464292347431182861328125 -0.0558752007782459259033203125 +0.584997677803039572985710492503 0.7464292347431182861328125 -0.0558752007782459259033203125 +0.585223722457885675574118522491 -0.502672576904296897204460492503 -0.554377233982086159436164507497 +0.585223722457885675574118522491 0.502672576904296897204460492503 -0.554377233982086159436164507497 +0.585295012593269325940070757497 -0.627836027741432212145866742503 -0.407126298546791054455695757497 +0.585295012593269325940070757497 0.627836027741432212145866742503 -0.407126298546791054455695757497 +0.585485601425170920641960492503 -0.543129587173461936266960492503 -0.0470872014760971083213725307814 +0.585485601425170920641960492503 0.543129587173461936266960492503 -0.0470872014760971083213725307814 +0.585993611812591574938835492503 -0.0247806005179882042621652971093 -0.1264818012714385986328125 +0.585993611812591574938835492503 0.0247806005179882042621652971093 -0.1264818012714385986328125 +0.586147212982177756579460492503 -0.0966024041175842229645098768742 -0.08425860106945037841796875 +0.586147212982177756579460492503 0.0966024041175842229645098768742 -0.08425860106945037841796875 +0.586206614971160888671875 -0.0727146014571189852615518134371 0.105235201120376584138504938437 +0.586206614971160888671875 0.0727146014571189852615518134371 0.105235201120376584138504938437 +0.586299419403076171875 0 0.61542890965938568115234375 +0.586369943618774369653579014994 -0.22452665865421295166015625 0.572938272356987021716179242503 +0.586369943618774369653579014994 0.22452665865421295166015625 0.572938272356987021716179242503 +0.58653898537158966064453125 -0.46442998945713043212890625 0.052697248756885528564453125 +0.58653898537158966064453125 0.46442998945713043212890625 0.052697248756885528564453125 +0.586583983898162797387954014994 -0.118934395909309376104801003748 -0.0421187996864318819900674384371 +0.586583983898162797387954014994 0.118934395909309376104801003748 -0.0421187996864318819900674384371 +0.586678487062454179223891514994 -0.4695833623409271240234375 0.397240690886974334716796875 +0.586678487062454179223891514994 0.4695833623409271240234375 0.397240690886974334716796875 +0.586721241474151611328125 -0.19699425995349884033203125 0.42361722886562347412109375 +0.586721241474151611328125 0.19699425995349884033203125 0.42361722886562347412109375 +0.586725753545761175011818977509 -0.138463646918535243646175558752 0.243064248561859125308259876874 +0.586725753545761175011818977509 0.138463646918535243646175558752 0.243064248561859125308259876874 +0.58708323538303375244140625 -0.0985055498778820010086221259371 -0.261016601324081443102897992503 +0.58708323538303375244140625 0.0985055498778820010086221259371 -0.261016601324081443102897992503 +0.587149214744567826684829014994 -0.118363201618194580078125 0.0352967999875545487831196567186 +0.587149214744567826684829014994 0.118363201618194580078125 0.0352967999875545487831196567186 +0.587244707345962457800681022491 -0.212659302353858936651676003748 0.316101109981536843029914507497 +0.587244707345962457800681022491 0.212659302353858936651676003748 0.316101109981536843029914507497 +0.58727775514125823974609375 -0.46438801288604736328125 -0.04414950124919414520263671875 +0.58727775514125823974609375 0.46438801288604736328125 -0.04414950124919414520263671875 +0.58728826045989990234375 0 0.466468513011932373046875 +0.5873287618160247802734375 -0.38847599923610687255859375 0.258130498230457305908203125 +0.5873287618160247802734375 0.38847599923610687255859375 0.258130498230457305908203125 +0.587689590454101629113381477509 -0.467771196365356467516960492503 0.275339198112487804070980246252 +0.587689590454101629113381477509 0.467771196365356467516960492503 0.275339198112487804070980246252 +0.587722814083099343029914507497 -0.221741098165512073858707253748 -0.308889704942703235968082253748 +0.587722814083099343029914507497 0.221741098165512073858707253748 -0.308889704942703235968082253748 +0.587724900245666481701789507497 -0.322182691097259499279914507497 -0.20193459093570709228515625 +0.587724900245666481701789507497 0.322182691097259499279914507497 -0.20193459093570709228515625 +0.587779408693313576428352007497 -0.0692204523831605883499307196871 0.268745097517967213018863503748 +0.587779408693313576428352007497 0.0692204523831605883499307196871 0.268745097517967213018863503748 +0.587786018848419189453125 -0.809017002582550048828125 0 +0.587786018848419189453125 0.809017002582550048828125 0 +0.588078582286834739001335492503 -0.0957666009664535494705361884371 0.0706547990441322298904580634371 +0.588078582286834739001335492503 0.0957666009664535494705361884371 0.0706547990441322298904580634371 +0.58849275112152099609375 -0.35132025182247161865234375 0.30454950034618377685546875 +0.58849275112152099609375 0.35132025182247161865234375 0.30454950034618377685546875 +0.588902157545089677270766514994 -0.700825461745262168200554242503 0.254042340815067269055305132497 +0.588902157545089677270766514994 0.700825461745262168200554242503 0.254042340815067269055305132497 +0.589076805114746138158920985006 -0.5076615810394287109375 -0.187799203395843522512720369377 +0.589076805114746138158920985006 0.5076615810394287109375 -0.187799203395843522512720369377 +0.5891849994659423828125 -0.564508974552154541015625 0.57809197902679443359375 +0.5891849994659423828125 0.564508974552154541015625 0.57809197902679443359375 +0.58919799327850341796875 -0.743493020534515380859375 -0.31632900238037109375 +0.58919799327850341796875 0.743493020534515380859375 -0.31632900238037109375 +0.5892159938812255859375 -0.13307000696659088134765625 0.7969419956207275390625 +0.5892159938812255859375 0.13307000696659088134765625 0.7969419956207275390625 +0.589253616333007879113381477509 -0.231940007209777837582365123126 -0.488859987258911166119190738755 +0.589253616333007879113381477509 0.231940007209777837582365123126 -0.488859987258911166119190738755 +0.589446488022804193640524772491 -0.350087338685989346576121761245 -0.65764130651950836181640625 +0.589446488022804193640524772491 0.350087338685989346576121761245 -0.65764130651950836181640625 +0.589558276534080438757712272491 -0.359004305303096737933543636245 -0.496020925045013438836605246252 +0.589558276534080438757712272491 0.359004305303096737933543636245 -0.496020925045013438836605246252 +0.58969648182392120361328125 -0.42843599617481231689453125 -0.1766362488269805908203125 +0.58969648182392120361328125 0.42843599617481231689453125 -0.1766362488269805908203125 +0.589705827832221918249899772491 -0.116658103093504897374010909061 -0.735620144009590082312399772491 +0.589705827832221918249899772491 0.116658103093504897374010909061 -0.735620144009590082312399772491 +0.589760494232177689966079014994 -0.0965650022029876653473223768742 -0.364496284723281827044871761245 +0.589760494232177689966079014994 0.0965650022029876653473223768742 -0.364496284723281827044871761245 +0.589837941527366682592514735006 -0.269274850189685832635433371252 0.0456286996603012112716513115629 +0.589837941527366682592514735006 0.269274850189685832635433371252 0.0456286996603012112716513115629 +0.589969900250434942101662727509 -0.270135448873043082507194867503 -0.0382381999865174307395854214064 +0.589969900250434942101662727509 0.270135448873043082507194867503 -0.0382381999865174307395854214064 +0.590029191970825150903579014994 -0.0244061999022960642025115163278 0.106159803271293637361161188437 +0.590029191970825150903579014994 0.0244061999022960642025115163278 0.106159803271293637361161188437 +0.59023381769657135009765625 -0.170005549490451823846370871252 -0.212654659152030939273103626874 +0.59023381769657135009765625 0.170005549490451823846370871252 -0.212654659152030939273103626874 +0.590369606018066428454460492503 -0.211264801025390636102230246252 0.496820783615112337994190738755 +0.590369606018066428454460492503 0.211264801025390636102230246252 0.496820783615112337994190738755 +0.590405380725860573498664507497 -0.652768188714981101306022992503 0.187921799719333648681640625 +0.590405380725860573498664507497 0.652768188714981101306022992503 0.187921799719333648681640625 +0.590457737445831298828125 -0.1854907460510730743408203125 -0.4236179888248443603515625 +0.590457737445831298828125 0.1854907460510730743408203125 -0.4236179888248443603515625 +0.5905392169952392578125 0 0.539688014984130881579460492503 +0.590960788726806685033920985006 -0.3885672092437744140625 0.37387359142303466796875 +0.590960788726806685033920985006 0.3885672092437744140625 0.37387359142303466796875 +0.59100838005542755126953125 -0.11287319660186767578125 0.600390684604644730981704014994 +0.59100838005542755126953125 0.11287319660186767578125 0.600390684604644730981704014994 +0.591055202484130903783920985006 -0.429424810409545942846420985006 0.325956797599792513775440738755 +0.591055202484130903783920985006 0.429424810409545942846420985006 0.325956797599792513775440738755 +0.591165894269943259509147992503 -0.292975196242332480700554242503 0.6121179163455963134765625 +0.591165894269943259509147992503 0.292975196242332480700554242503 0.6121179163455963134765625 +0.591346713900566034460837272491 -0.59879948198795318603515625 0.1193663515150547027587890625 +0.591346713900566034460837272491 0.59879948198795318603515625 0.1193663515150547027587890625 +0.591588389873504705285256477509 -0.05345664918422698974609375 -0.263942241668701171875 +0.591588389873504705285256477509 0.05345664918422698974609375 -0.263942241668701171875 +0.591638392210006691662727007497 -0.209205906093120591604517244377 -0.645133495330810546875 +0.591638392210006691662727007497 0.209205906093120591604517244377 -0.645133495330810546875 +0.592029011249542214123664507497 -0.0493932008743286146690287807814 -0.084035396575927734375 +0.592029011249542214123664507497 0.0493932008743286146690287807814 -0.084035396575927734375 +0.5921599864959716796875 -0.702307999134063720703125 0.3951070010662078857421875 +0.5921599864959716796875 0.702307999134063720703125 0.3951070010662078857421875 +0.592330151796340964587272992503 -0.4303481876850128173828125 -0.431793224811553966180355246252 +0.592330151796340964587272992503 0.4303481876850128173828125 -0.431793224811553966180355246252 +0.592613410949706986841079014994 -0.0938592016696929848373898153113 0 +0.592613410949706986841079014994 0.0938592016696929848373898153113 0 +0.592614072561263971472556022491 -0.557837983965873696057258257497 -0.245206288993358612060546875 +0.592614072561263971472556022491 0.557837983965873696057258257497 -0.245206288993358612060546875 +0.592661303281784013208266514994 -0.359361112117767333984375 0.0980412960052490234375 +0.592661303281784013208266514994 0.359361112117767333984375 0.0980412960052490234375 +0.59271800518035888671875 -0.137209801375865914074836382497 0.34620670974254608154296875 +0.59271800518035888671875 0.137209801375865914074836382497 0.34620670974254608154296875 +0.592939648032188348913962272491 -0.58485515415668487548828125 -0.457019342482089974133430132497 +0.592939648032188348913962272491 0.58485515415668487548828125 -0.457019342482089974133430132497 +0.5929505825042724609375 -0.594792884588241643761818977509 -0.323467192053794871942073996252 +0.5929505825042724609375 0.594792884588241643761818977509 -0.323467192053794871942073996252 +0.59299649298191070556640625 -0.0987412445247173309326171875 0.4484482705593109130859375 +0.59299649298191070556640625 0.0987412445247173309326171875 0.4484482705593109130859375 +0.593335801362991355212272992503 -0.357609593868255637438835492503 -0.574515008926391623766960492503 +0.593335801362991355212272992503 0.357609593868255637438835492503 -0.574515008926391623766960492503 +0.593599501252174421850327235006 0 -0.264839898049831379278629128748 +0.593801599740982011255141514994 -0.0460718989372253390213174384371 0.367800307273864701684829014994 +0.593801599740982011255141514994 0.0460718989372253390213174384371 0.367800307273864701684829014994 +0.593856596946716330798210492503 -0.0486846014857292147537393134371 0.0704580008983611977280148153113 +0.593856596946716330798210492503 0.0486846014857292147537393134371 0.0704580008983611977280148153113 +0.593895885348320051733139735006 -0.165865044295787827932642244377 0.205612553656101232357755748126 +0.593895885348320051733139735006 0.165865044295787827932642244377 0.205612553656101232357755748126 +0.593900316953658968799345529987 -0.361282593011856056897102007497 -0.0822016999125480540833166287484 +0.593900316953658968799345529987 0.361282593011856056897102007497 -0.0822016999125480540833166287484 +0.593903520703315757067741742503 -0.222314088046550756283536998126 -0.565999692678451515881477007497 +0.593903520703315757067741742503 0.222314088046550756283536998126 -0.565999692678451515881477007497 +0.593974176049232416296774772491 -0.431546057760715473516910378748 0.602879497408866815710837272491 +0.593974176049232416296774772491 0.431546057760715473516910378748 0.602879497408866815710837272491 +0.594028407335281283252470529987 -0.0483980014920234666297993442186 -0.367134612798690751489516514994 +0.594028407335281283252470529987 0.0483980014920234666297993442186 -0.367134612798690751489516514994 +0.594045603275299094470085492503 0 -0.0843215972185134832184161268742 +0.594051128625869728772102007497 -0.0392359508201479897926411410936 -0.74031408131122589111328125 +0.594051128625869728772102007497 0.0392359508201479897926411410936 -0.74031408131122589111328125 +0.594189012050628684313835492503 -0.07185240089893341064453125 -0.042149998247623443603515625 +0.594189012050628684313835492503 0.07185240089893341064453125 -0.042149998247623443603515625 +0.594257104396820001745993522491 -0.59944975376129150390625 -0.10009514726698398590087890625 +0.594257104396820001745993522491 0.59944975376129150390625 -0.10009514726698398590087890625 +0.59465897083282470703125 -0.59488999843597412109375 -0.540821015834808349609375 +0.59465897083282470703125 0.59488999843597412109375 -0.540821015834808349609375 +0.594683396816253595495993522491 -0.0714461982250213650802450615629 0.0353147998452186598350444057814 +0.594683396816253595495993522491 0.0714461982250213650802450615629 0.0353147998452186598350444057814 +0.5954535901546478271484375 0 -0.368015182018279984887954014994 +0.59562899172306060791015625 -0.334019243717193603515625 -0.310092754662036895751953125 +0.59562899172306060791015625 0.334019243717193603515625 -0.310092754662036895751953125 +0.595646810531616166528579014994 -0.242305696010589571853799384371 0.276574191451072648462172764994 +0.595646810531616166528579014994 0.242305696010589571853799384371 0.276574191451072648462172764994 +0.595821011066436700964743522491 0 0.0706913977861404335678585653113 +0.59591849148273468017578125 -0.2418922483921051025390625 0.38583599030971527099609375 +0.59591849148273468017578125 0.2418922483921051025390625 0.38583599030971527099609375 +0.595940780639648504113381477509 -0.106055200099945068359375 0.5230743885040283203125 +0.595940780639648504113381477509 0.106055200099945068359375 0.5230743885040283203125 +0.596085011959075927734375 -0.3323400020599365234375 0.730912983417510986328125 +0.596085011959075927734375 0.3323400020599365234375 0.730912983417510986328125 +0.59618484973907470703125 -0.701939773559570268091079014994 -0.233117652684450143985017689374 +0.59618484973907470703125 0.701939773559570268091079014994 -0.233117652684450143985017689374 +0.596246308088302590100227007497 -0.0264160001650452606891672502343 0.2574740946292877197265625 +0.596246308088302590100227007497 0.0264160001650452606891672502343 0.2574740946292877197265625 +0.596524482965469338147102007497 -0.241633604466915147268579744377 0.0909486465156078421889773721887 +0.596524482965469338147102007497 0.241633604466915147268579744377 0.0909486465156078421889773721887 +0.596544313430786177221420985006 -0.655161309242248579565170985006 -0.157790695130825053826839621252 +0.596544313430786177221420985006 0.655161309242248579565170985006 -0.157790695130825053826839621252 +0.596849399805068903113181022491 -0.365747189521789528576789507497 0 +0.596849399805068903113181022491 0.365747189521789528576789507497 0 +0.596856665611267156457131477509 -0.195815742015838623046875 -0.167087696492671966552734375 +0.596856665611267156457131477509 0.195815742015838623046875 -0.167087696492671966552734375 +0.597194015979766845703125 -0.4338819980621337890625 -0.67461502552032470703125 +0.597194015979766845703125 0.4338819980621337890625 -0.67461502552032470703125 +0.597710096836090110095085492503 -0.243772102892398839779630748126 -0.0762774981558322906494140625 +0.597710096836090110095085492503 0.243772102892398839779630748126 -0.0762774981558322906494140625 +0.597966188192367575915397992503 -0.192401300370693223440454744377 0.167087696492671966552734375 +0.597966188192367575915397992503 0.192401300370693223440454744377 0.167087696492671966552734375 +0.598003792762756281042868522491 -0.0247794002294540391395649692186 -0.0421577990055084228515625 +0.598003792762756281042868522491 0.0247794002294540391395649692186 -0.0421577990055084228515625 +0.5980785191059112548828125 -0.3968474864959716796875 -0.217517249286174774169921875 +0.5980785191059112548828125 0.3968474864959716796875 -0.217517249286174774169921875 +0.598150205612182572778579014994 -0.047074802219867706298828125 0 +0.598150205612182572778579014994 0.047074802219867706298828125 0 +0.598210990428924560546875 -0.656616985797882080078125 0.4593450129032135009765625 +0.598210990428924560546875 0.656616985797882080078125 0.4593450129032135009765625 +0.598462200164794899670539507497 -0.0244049996137619025493581403907 0.0353196009993553133865518134371 +0.598462200164794899670539507497 0.0244049996137619025493581403907 0.0353196009993553133865518134371 +0.598703932762146062707131477509 -0.217547205090522777215511496252 0.129333098977804178408845814374 +0.598703932762146062707131477509 0.217547205090522777215511496252 0.129333098977804178408845814374 +0.598833215236663773950454014994 -0.250756803154945362432926003748 -0.261762896180152859759715511245 +0.598833215236663773950454014994 0.250756803154945362432926003748 -0.261762896180152859759715511245 +0.598952236771583601537827235006 -0.0958178013563156100174111884371 0.233613896369934098684595369377 +0.598952236771583601537827235006 0.0958178013563156100174111884371 0.233613896369934098684595369377 +0.599155715107917763440070757497 -0.220482608675956731625333873126 -0.122064153105020528622404185626 +0.599155715107917763440070757497 0.220482608675956731625333873126 -0.122064153105020528622404185626 +0.59919297695159912109375 -0.2706219851970672607421875 -0.753480017185211181640625 +0.59919297695159912109375 0.2706219851970672607421875 -0.753480017185211181640625 +0.599239555001258916711037727509 -0.124655053764581691400081808752 -0.218799108266830438784822376874 +0.599239555001258916711037727509 0.124655053764581691400081808752 -0.218799108266830438784822376874 +0.599630403518676802221420985006 -0.305372810363769564556690738755 -0.432656002044677745477230246252 +0.599630403518676802221420985006 0.305372810363769564556690738755 -0.432656002044677745477230246252 +0.599728012084960959704460492503 -0.475913619995117220806690738755 -0.232018399238586442434595369377 +0.599728012084960959704460492503 0.475913619995117220806690738755 -0.232018399238586442434595369377 +0.599905586242675759045539507497 -0.5172607898712158203125 0.1120471954345703125 +0.599905586242675759045539507497 0.5172607898712158203125 0.1120471954345703125 +0.599910736083984375 -0.134694747626781463623046875 -0.42949350178241729736328125 +0.599910736083984375 0.134694747626781463623046875 -0.42949350178241729736328125 +0.599958115816116244189970529987 -0.329639804363250688012954014994 0.146246097981929779052734375 +0.599958115816116244189970529987 0.329639804363250688012954014994 0.146246097981929779052734375 +0.599999999999999977795539507497 0 0 +0.600089710950851396020766514994 -0.173125395178794855288728626874 -0.316101798415183987689403011245 +0.600089710950851396020766514994 0.173125395178794855288728626874 -0.316101798415183987689403011245 +0.6000984013080596923828125 -0.435991492867469798699886496252 -0.509699696302413962634147992503 +0.6000984013080596923828125 0.435991492867469798699886496252 -0.509699696302413962634147992503 +0.60018150508403778076171875 -0.25433774292469024658203125 -0.3709372580051422119140625 +0.60018150508403778076171875 0.25433774292469024658203125 -0.3709372580051422119140625 +0.60046632587909698486328125 -0.277037940919399261474609375 0.534032058715820268091079014994 +0.60046632587909698486328125 0.277037940919399261474609375 0.534032058715820268091079014994 +0.600522646307945273669304242503 -0.24874199926853179931640625 0 +0.600522646307945273669304242503 0.24874199926853179931640625 0 +0.6005229949951171875 -0.60682201385498046875 0.520709991455078125 +0.6005229949951171875 0.60682201385498046875 0.520709991455078125 +0.60074172914028167724609375 -0.43646250665187835693359375 0.1054019965231418609619140625 +0.60074172914028167724609375 0.43646250665187835693359375 0.1054019965231418609619140625 +0.600994813442230157995993522491 -0.27070890367031097412109375 0.235629808902740461862279630623 +0.600994813442230157995993522491 0.27070890367031097412109375 0.235629808902740461862279630623 +0.601041817665100119860710492503 -0.6010400950908660888671875 0 +0.601041817665100119860710492503 0.6010400950908660888671875 0 +0.601457375288009576941306022491 -0.662183263897895835192741742503 0.319784246385097503662109375 +0.601457375288009576941306022491 0.662183263897895835192741742503 0.319784246385097503662109375 +0.601615780591964743884147992503 -0.178502404689788812808259876874 0.645131725072860762182358485006 +0.601615780591964743884147992503 0.178502404689788812808259876874 0.645131725072860762182358485006 +0.601764222979545571057258257497 -0.485641878843307450708266514994 0.551844537258148193359375 +0.601764222979545571057258257497 0.485641878843307450708266514994 0.551844537258148193359375 +0.601797580718994140625 -0.176090395450592046566740123126 -0.496821594238281261102230246252 +0.601797580718994140625 0.176090395450592046566740123126 -0.496821594238281261102230246252 +0.601825943589210488049445757497 -0.437247003614902485235660378748 -0.590863910317420915063735264994 +0.601825943589210488049445757497 0.437247003614902485235660378748 -0.590863910317420915063735264994 +0.6018911898136138916015625 -0.0599436029791831984092631557814 0.666433775424957297595085492503 +0.6018911898136138916015625 0.0599436029791831984092631557814 0.666433775424957297595085492503 +0.602082002162933394018295985006 -0.555904823541641279760483485006 -0.37211130559444427490234375 +0.602082002162933394018295985006 0.555904823541641279760483485006 -0.37211130559444427490234375 +0.602144813537597745067841970013 -0.259888792037963889391960492503 0.458125591278076171875 +0.602144813537597745067841970013 0.259888792037963889391960492503 0.458125591278076171875 +0.602236795425415083471420985006 -0.37252080440521240234375 -0.37220799922943115234375 +0.602236795425415083471420985006 0.37252080440521240234375 -0.37220799922943115234375 +0.602432823181152432567841970013 -0.517927980422973610608039507497 -0.0939447999000549427428552462516 +0.602432823181152432567841970013 0.517927980422973610608039507497 -0.0939447999000549427428552462516 +0.60253800451755523681640625 -0.437766730785369873046875 -0.0883642472326755523681640625 +0.60253800451755523681640625 0.437766730785369873046875 -0.0883642472326755523681640625 +0.602940022945404052734375 -0.77257502079010009765625 0.19897399842739105224609375 +0.602940022945404052734375 0.77257502079010009765625 0.19897399842739105224609375 +0.602954804897308349609375 0 0.355590915679931618420539507497 +0.602995926141738913806022992503 -0.523293125629424982214743522491 -0.29165031015872955322265625 +0.602995926141738913806022992503 0.523293125629424982214743522491 -0.29165031015872955322265625 +0.603159207105636530066306022491 -0.33335469663143157958984375 -0.122775100171565995643696567186 +0.603159207105636530066306022491 0.33335469663143157958984375 -0.122775100171565995643696567186 +0.603262805938720614307158029987 -0.297725397348403919561832253748 0.193477204442024208752570757497 +0.603262805938720614307158029987 0.297725397348403919561832253748 0.193477204442024208752570757497 +0.6035482585430145263671875 -0.363327004015445709228515625 -0.25733850896358489990234375 +0.6035482585430145263671875 0.363327004015445709228515625 -0.25733850896358489990234375 +0.603735315799713179174545985006 -0.146211303770542144775390625 -0.651249897480011052941506477509 +0.603735315799713179174545985006 0.146211303770542144775390625 -0.651249897480011052941506477509 +0.603737998008728071752670985006 -0.619370985031127974096420985006 0.248756405711174022332698996252 +0.603737998008728071752670985006 0.619370985031127974096420985006 0.248756405711174022332698996252 +0.604313117265701360558693977509 -0.347566491365432772564503238755 0.569213086366653464587272992503 +0.604313117265701360558693977509 0.347566491365432772564503238755 0.569213086366653464587272992503 +0.605053007602691650390625 -0.7029039859771728515625 -0.3739469945430755615234375 +0.605053007602691650390625 0.7029039859771728515625 -0.3739469945430755615234375 +0.605289658904075600354133257497 -0.720038238167762689734274772491 0.132924944907426817453099943123 +0.605289658904075600354133257497 0.720038238167762689734274772491 0.132924944907426817453099943123 +0.605504882335662908410256477509 -0.0797731984406709754287234659387 -0.222485893964767450503572376874 +0.605504882335662908410256477509 0.0797731984406709754287234659387 -0.222485893964767450503572376874 +0.605813702940940834729133257497 -0.569169330596923761511618522491 0.177583698928356154000951505623 +0.605813702940940834729133257497 0.569169330596923761511618522491 0.177583698928356154000951505623 +0.605815017223358065479033029987 -0.166058894991874678170873380623 0.308888995647430386615184261245 +0.605815017223358065479033029987 0.166058894991874678170873380623 0.308888995647430386615184261245 +0.606050211191177301550681022491 -0.278141504526138283459602007497 -0.212933695316314675061164507497 +0.606050211191177301550681022491 0.278141504526138283459602007497 -0.212933695316314675061164507497 +0.606149387359619096216079014994 0 0.731493356823921136999899772491 +0.60628522932529449462890625 -0.249720793962478621041967130623 0.687428522109985284949118522491 +0.60628522932529449462890625 0.249720793962478621041967130623 0.687428522109985284949118522491 +0.60635398328304290771484375 -0.08278724737465381622314453125 -0.4335682690143585205078125 +0.60635398328304290771484375 0.08278724737465381622314453125 -0.4335682690143585205078125 +0.60635600984096527099609375 -0.163009606301784515380859375 -0.572939944267272904809829014994 +0.60635600984096527099609375 0.163009606301784515380859375 -0.572939944267272904809829014994 +0.6067635118961334228515625 -0.4408372342586517333984375 0 +0.6067635118961334228515625 0.4408372342586517333984375 0 +0.606766307353973299854033029987 -0.0918400004506111089508380018742 0.336749008297920204846320757497 +0.606766307353973299854033029987 0.0918400004506111089508380018742 0.336749008297920204846320757497 +0.6069532334804534912109375 -0.1473082490265369415283203125 0.41522102057933807373046875 +0.6069532334804534912109375 0.1473082490265369415283203125 0.41522102057933807373046875 +0.606970810890197776110710492503 -0.661509025096893354955795985006 0.0631781995296478299239950615629 +0.606970810890197776110710492503 0.661509025096893354955795985006 0.0631781995296478299239950615629 +0.60700424015522003173828125 -0.274518750607967376708984375 0.344507239758968353271484375 +0.60700424015522003173828125 0.274518750607967376708984375 0.344507239758968353271484375 +0.6070439815521240234375 -0.04949099756777286529541015625 0.43766248226165771484375 +0.6070439815521240234375 0.04949099756777286529541015625 0.43766248226165771484375 +0.607094159722328163830695757497 -0.121829496324062355738782059689 0.197722847759723679983423494377 +0.607094159722328163830695757497 0.121829496324062355738782059689 0.197722847759723679983423494377 +0.60745298862457275390625 -0.77183902263641357421875 -0.18779100477695465087890625 +0.60745298862457275390625 0.77183902263641357421875 -0.18779100477695465087890625 +0.607656002044677734375 -0.441484022140502974096420985006 -0.275401592254638671875 +0.607656002044677734375 0.441484022140502974096420985006 -0.275401592254638671875 +0.607830587029457136694077235006 -0.151093803346157073974609375 -0.173817804455757146664396373126 +0.607830587029457136694077235006 0.151093803346157073974609375 -0.173817804455757146664396373126 +0.607944613695144631115852007497 -0.514844977855682395251335492503 -0.41873399913311004638671875 +0.607944613695144631115852007497 0.514844977855682395251335492503 -0.41873399913311004638671875 +0.608161497116088911596420985006 -0.661313706636428855212272992503 -0.0529451999813318266441264370314 +0.608161497116088911596420985006 0.661313706636428855212272992503 -0.0529451999813318266441264370314 +0.608261564373970053942741742503 -0.0527052477002143901496644673443 0.223025390505790704898103626874 +0.608261564373970053942741742503 0.0527052477002143901496644673443 0.223025390505790704898103626874 +0.608325576782226651317841970013 -0.519557619094848655016960492503 0 +0.608325576782226651317841970013 0.519557619094848655016960492503 0 +0.608535823225974992212172764994 -0.286191304028034221307308371252 -0.671027770638465859143195757497 +0.608535823225974992212172764994 0.286191304028034221307308371252 -0.671027770638465859143195757497 +0.608798956871032692639289507497 -0.720718467235565096729033029987 -0.1114824973046779632568359375 +0.608798956871032692639289507497 0.720718467235565096729033029987 -0.1114824973046779632568359375 +0.6089397966861724853515625 -0.125715097784996038265958873126 -0.321540799736976579126235264994 +0.6089397966861724853515625 0.125715097784996038265958873126 -0.321540799736976579126235264994 +0.609233936667442299572883257497 -0.221930144727230077572599498126 0.0456150475889444337318501254686 +0.609233936667442299572883257497 0.221930144727230077572599498126 0.0456150475889444337318501254686 +0.609325486421585016394431022491 -0.303718107938766468389957253748 -0.162719199061393732241853626874 +0.609325486421585016394431022491 0.303718107938766468389957253748 -0.162719199061393732241853626874 +0.609406846761703535619858485006 -0.222848606109619151727230246252 -0.0382304005324840545654296875 +0.609406846761703535619858485006 0.222848606109619151727230246252 -0.0382304005324840545654296875 +0.60948653519153594970703125 -0.304489542543888103143245871252 -0.508243906497955255652243522491 +0.60948653519153594970703125 0.304489542543888103143245871252 -0.508243906497955255652243522491 +0.609549456834793113024772992503 -0.620820263028144858630241742503 0.381486736238002777099609375 +0.609549456834793113024772992503 0.620820263028144858630241742503 0.381486736238002777099609375 +0.609700015187263466565070757497 -0.0268125010654330260539968122657 -0.22371245920658111572265625 +0.609700015187263466565070757497 0.0268125010654330260539968122657 -0.22371245920658111572265625 +0.609702765941619873046875 -0.03093600086867809295654296875 -0.435666739940643310546875 +0.609702765941619873046875 0.03093600086867809295654296875 -0.435666739940643310546875 +0.609828275442123479699318977509 -0.0733500011265277862548828125 -0.6578216850757598876953125 +0.609828275442123479699318977509 0.0733500011265277862548828125 -0.6578216850757598876953125 +0.6101017892360687255859375 -0.339643496274948109014957253748 0.0491749979555606842041015625 +0.6101017892360687255859375 0.339643496274948109014957253748 0.0491749979555606842041015625 +0.610156822204589888158920985006 -0.306888794898986849712940738755 0.416567182540893587994190738755 +0.610156822204589888158920985006 0.306888794898986849712940738755 0.416567182540893587994190738755 +0.610270699858665444104133257497 0 0.223761856555938720703125 +0.610289418697357088916533029987 -0.340365892648696877209602007497 -0.0412013012915849671791157504686 +0.610289418697357088916533029987 0.340365892648696877209602007497 -0.0412013012915849671791157504686 +0.610472011566162153783920985006 -0.1212368011474609375 -0.502619218826294011925881477509 +0.610472011566162153783920985006 0.1212368011474609375 -0.502619218826294011925881477509 +0.610492113232612543249899772491 -0.486243340373039234503238503748 -0.336699451506137836798160378748 +0.610492113232612543249899772491 0.486243340373039234503238503748 -0.336699451506137836798160378748 +0.610793006420135453637954014994 -0.0565810982137918486167826870314 0.58841337263584136962890625 +0.610793006420135453637954014994 0.0565810982137918486167826870314 0.58841337263584136962890625 +0.610806763172149658203125 -0.40548598766326904296875 0.1581030003726482391357421875 +0.610806763172149658203125 0.40548598766326904296875 0.1581030003726482391357421875 +0.611107477545738242419304242503 -0.32801841199398040771484375 0.491376510262489296643195757497 +0.611107477545738242419304242503 0.32801841199398040771484375 0.491376510262489296643195757497 +0.61115337908267974853515625 -0.1692290492355823516845703125 0.565998020768165521765524772491 +0.61115337908267974853515625 0.1692290492355823516845703125 0.565998020768165521765524772491 +0.61130638420581817626953125 -0.571470284461975119860710492503 -0.1490840502083301544189453125 +0.61130638420581817626953125 0.571470284461975119860710492503 -0.1490840502083301544189453125 +0.611636576056480363305922764994 -0.126592254638671880551115123126 0.715803128480911210473891514994 +0.611636576056480363305922764994 0.126592254638671880551115123126 0.715803128480911210473891514994 +0.611863213777542158666733485006 0 -0.660017716884613081518295985006 +0.612233692407608054431022992503 -0.175904949009418498651058371252 -0.129333098977804178408845814374 +0.612233692407608054431022992503 0.175904949009418498651058371252 -0.129333098977804178408845814374 +0.612309744954109169690070757497 -0.148783053457736985647485994377 0.159500253945589060000642689374 +0.612309744954109169690070757497 0.148783053457736985647485994377 0.159500253945589060000642689374 +0.612522017955780095910256477509 -0.297540906071662891729801003748 -0.588461422920227072985710492503 +0.612522017955780095910256477509 0.297540906071662891729801003748 -0.588461422920227072985710492503 +0.612659990787506103515625 -0.3941330015659332275390625 0.685060024261474609375 +0.612659990787506103515625 0.3941330015659332275390625 0.685060024261474609375 +0.6126840114593505859375 -0.485980796813964888158920985006 0.168643200397491477282585492503 +0.6126840114593505859375 0.485980796813964888158920985006 0.168643200397491477282585492503 +0.612766060233116194311264735006 -0.199975754320621507131860994377 -0.0838311471045017214676065009371 +0.612766060233116194311264735006 0.199975754320621507131860994377 -0.0838311471045017214676065009371 +0.612802410125732444079460492503 -0.405033588409423828125 -0.316893601417541526110710492503 +0.612802410125732444079460492503 0.405033588409423828125 -0.316893601417541526110710492503 +0.6130487918853759765625 -0.158708000183105490954460492503 0.488858413696289073602230246252 +0.6130487918853759765625 0.158708000183105490954460492503 0.488858413696289073602230246252 +0.613172703981399447314970529987 -0.202947506308555597476228626874 -0.269873103499412514416633257497 +0.613172703981399447314970529987 0.202947506308555597476228626874 -0.269873103499412514416633257497 +0.613173702359199546130241742503 -0.665588033199310258325454014994 -0.288981443643569924084602007497 +0.613173702359199546130241742503 0.665588033199310258325454014994 -0.288981443643569924084602007497 +0.613282155990600652550881477509 -0.198385857045650482177734375 0.0838311471045017214676065009371 +0.613282155990600652550881477509 0.198385857045650482177734375 0.0838311471045017214676065009371 +0.613349103927612326891960492503 -0.582154208421707175524772992503 0.308057391643524192126335492503 +0.613349103927612326891960492503 0.582154208421707175524772992503 0.308057391643524192126335492503 +0.613476884365081853722756477509 -0.624401092529296875 -0.209211297333240509033203125 +0.613476884365081853722756477509 0.624401092529296875 -0.209211297333240509033203125 +0.613528776168823286596420985006 -0.0528335988521575969367738423443 0.510676813125610418175881477509 +0.613528776168823286596420985006 0.0528335988521575969367738423443 0.510676813125610418175881477509 +0.613606879115104697497429242503 -0.527000123262405417712272992503 0.498254117369651750024672764994 +0.613606879115104697497429242503 0.527000123262405417712272992503 0.498254117369651750024672764994 +0.613635417819023087915297764994 -0.575452047586440973425681022491 0.441369062662124611584602007497 +0.613635417819023087915297764994 0.575452047586440973425681022491 0.441369062662124611584602007497 +0.6137039959430694580078125 -0.204946495592594146728515625 -0.3792944848537445068359375 +0.6137039959430694580078125 0.204946495592594146728515625 -0.3792944848537445068359375 +0.61373341083526611328125 -0.400014889240264903680355246252 0.522799175977706975793068977509 +0.61373341083526611328125 0.400014889240264903680355246252 0.522799175977706975793068977509 +0.6141922473907470703125 -0.286287009716033935546875 -0.3214147388935089111328125 +0.6141922473907470703125 0.286287009716033935546875 -0.3214147388935089111328125 +0.61432538926601409912109375 -0.173795701563358301333650501874 0.122064153105020528622404185626 +0.61432538926601409912109375 0.173795701563358301333650501874 0.122064153105020528622404185626 +0.614332389831542924341079014994 -0.104317949339747431669600530313 -0.578112176060676552502570757497 +0.614332389831542924341079014994 0.104317949339747431669600530313 -0.578112176060676552502570757497 +0.61435997486114501953125 -0.785898983478546142578125 0.070176996290683746337890625 +0.61435997486114501953125 0.785898983478546142578125 0.070176996290683746337890625 +0.614612996578216552734375 -0.4088287353515625 -0.132700502872467041015625 +0.614612996578216552734375 0.4088287353515625 -0.132700502872467041015625 +0.614754021167755126953125 -0.20118500292301177978515625 -0.762628018856048583984375 +0.614754021167755126953125 0.20118500292301177978515625 -0.762628018856048583984375 +0.6148402690887451171875 -0.306212246417999267578125 0.3011730015277862548828125 +0.6148402690887451171875 0.306212246417999267578125 0.3011730015277862548828125 +0.615030515193939142370993522491 -0.0772680975496768951416015625 -0.325218600034713700708266514994 +0.615030515193939142370993522491 0.0772680975496768951416015625 -0.325218600034713700708266514994 +0.615059974789619379187399772491 -0.446862000226974476202457253748 -0.380132742226123809814453125 +0.615059974789619379187399772491 0.446862000226974476202457253748 -0.380132742226123809814453125 +0.615214276313781671667868522491 -0.524260351061821006091179242503 -0.499161353707313515393195757497 +0.615214276313781671667868522491 0.524260351061821006091179242503 -0.499161353707313515393195757497 +0.6152369976043701171875 -0.06670899689197540283203125 0.78551399707794189453125 +0.6152369976043701171875 0.06670899689197540283203125 0.78551399707794189453125 +0.6153580844402313232421875 -0.196221905946731556280582253748 0.269872394204139665063735264994 +0.6153580844402313232421875 0.196221905946731556280582253748 0.269872394204139665063735264994 +0.615603029727935791015625 -0.19857899844646453857421875 0.76262700557708740234375 +0.615603029727935791015625 0.19857899844646453857421875 0.76262700557708740234375 +0.615688446164131208959702235006 -0.105597701668739316072098688437 -0.179657404124736796990902121252 +0.615688446164131208959702235006 0.105597701668739316072098688437 -0.179657404124736796990902121252 +0.615787029266357421875 -0.78571498394012451171875 -0.05881600081920623779296875 +0.615787029266357421875 0.78571498394012451171875 -0.05881600081920623779296875 +0.61602497100830078125 -0.5291290283203125 -0.5835549831390380859375 +0.61602497100830078125 0.5291290283203125 -0.5835549831390380859375 +0.616100013256072998046875 -0.660880029201507568359375 -0.428553998470306396484375 +0.616100013256072998046875 0.660880029201507568359375 -0.428553998470306396484375 +0.616129589080810613488381477509 -0.25341761112213134765625 -0.442903995513916015625 +0.616129589080810613488381477509 0.25341761112213134765625 -0.442903995513916015625 +0.616171979904174826891960492503 -0.0657927989959716796875 -0.505967998504638694079460492503 +0.616171979904174826891960492503 0.0657927989959716796875 -0.505967998504638694079460492503 +0.616221091151237465588508257497 -0.378555142879486050677684261245 -0.446618053317069996221988503748 +0.616221091151237465588508257497 0.378555142879486050677684261245 -0.446618053317069996221988503748 +0.61646322906017303466796875 -0.372329257428646087646484375 0.209389507770538330078125 +0.61646322906017303466796875 0.372329257428646087646484375 0.209389507770538330078125 +0.61696350574493408203125 -0.194917492568492889404296875 0.37929300963878631591796875 +0.61696350574493408203125 0.194917492568492889404296875 0.37929300963878631591796875 +0.616976541280746415552016514994 -0.722384753823280267859274772491 0 +0.616976541280746415552016514994 0.722384753823280267859274772491 0 +0.617219829559326194079460492503 -0.534064331650733969958366742503 0.237308108806610101870759876874 +0.617219829559326194079460492503 0.534064331650733969958366742503 0.237308108806610101870759876874 +0.617331981658935546875 -0.488738393783569369244190738755 -0.14154720306396484375 +0.617331981658935546875 0.488738393783569369244190738755 -0.14154720306396484375 +0.617365437746048018041733485006 -0.0787422999739646883865518134371 0.187509393692016607113615123126 +0.617365437746048018041733485006 0.0787422999739646883865518134371 0.187509393692016607113615123126 +0.617911005020141512744658029987 -0.0460298992693424224853515625 0.325679203867912270276008257497 +0.617911005020141512744658029987 0.0460298992693424224853515625 0.325679203867912270276008257497 +0.618105536699295021740852007497 -0.37643440067768096923828125 0.445806315541267372815070757497 +0.618105536699295021740852007497 0.37643440067768096923828125 0.445806315541267372815070757497 +0.6181350052356719970703125 0 0.42474599182605743408203125 +0.618179786205291681433493522491 -0.0288736008107662173172158759371 -0.327138704061508134302016514994 +0.618179786205291681433493522491 0.0288736008107662173172158759371 -0.327138704061508134302016514994 +0.61818768084049224853515625 -0.200858455896377574578792746252 0 +0.61818768084049224853515625 0.200858455896377574578792746252 0 +0.618220290541648842541633257497 -0.0350625013932585674614195170307 -0.58230102062225341796875 +0.618220290541648842541633257497 0.0350625013932585674614195170307 -0.58230102062225341796875 +0.618266391754150435033920985006 0 -0.507687997817993230675881477509 +0.6191774904727935791015625 -0.541349118947982765881477007497 0.365459400415420521124332253748 +0.6191774904727935791015625 0.541349118947982765881477007497 0.365459400415420521124332253748 +0.6193319857120513916015625 -0.336191989481449127197265625 0.2567144930362701416015625 +0.6193319857120513916015625 0.336191989481449127197265625 0.2567144930362701416015625 +0.619370126724243186266960492503 -0.44999729096889495849609375 0.473162376880645774157585492503 +0.619370126724243186266960492503 0.44999729096889495849609375 0.473162376880645774157585492503 +0.619483888149261474609375 -0.310767793655395474505809261245 0.098301701247692108154296875 +0.619483888149261474609375 0.310767793655395474505809261245 0.098301701247692108154296875 +0.61989700794219970703125 -0.737711012363433837890625 0.2674129903316497802734375 +0.61989700794219970703125 0.737711012363433837890625 0.2674129903316497802734375 +0.620469987392425537109375 -0.36851298809051513671875 -0.692254006862640380859375 +0.620469987392425537109375 0.36851298809051513671875 -0.692254006862640380859375 +0.620558404922485373766960492503 -0.341705608367919966283920985006 0.371678400039672895971420985006 +0.620558404922485373766960492503 0.341705608367919966283920985006 0.371678400039672895971420985006 +0.620734083652496271277243522491 -0.31288109719753265380859375 -0.0824305988848209325592364393742 +0.620734083652496271277243522491 0.31288109719753265380859375 -0.0824305988848209325592364393742 +0.620742976665496826171875 -0.122798003256320953369140625 -0.774336993694305419921875 +0.620742976665496826171875 0.122798003256320953369140625 -0.774336993694305419921875 +0.62078762054443359375 0 0.6516306102275848388671875 +0.620824414491653375769431022491 -0.120770996809005728978014815311 0.29998569190502166748046875 +0.620824414491653375769431022491 0.120770996809005728978014815311 0.29998569190502166748046875 +0.620862293243408247533920985006 -0.2377341091632843017578125 0.606640523672103859631477007497 +0.620862293243408247533920985006 0.2377341091632843017578125 0.606640523672103859631477007497 +0.62117318809032440185546875 -0.577129599452018693384047764994 0.05971249751746654510498046875 +0.62117318809032440185546875 0.577129599452018693384047764994 0.05971249751746654510498046875 +0.621188986301422163549545985006 -0.497205913066864013671875 0.42060779035091400146484375 +0.621188986301422163549545985006 0.497205913066864013671875 0.42060779035091400146484375 +0.621303987503051824425881477509 -0.451401615142822287829460492503 0.224094390869140625 +0.621303987503051824425881477509 0.451401615142822287829460492503 0.224094390869140625 +0.621502068638801641320412727509 -0.0264173004776239415958283274222 0.18851365149021148681640625 +0.621502068638801641320412727509 0.0264173004776239415958283274222 0.18851365149021148681640625 +0.621855479478836015161391514994 -0.225496608018875110968082253748 0.229012709856033308541967130623 +0.621855479478836015161391514994 0.225496608018875110968082253748 0.229012709856033308541967130623 +0.621901819109916709216179242503 -0.05297500081360340118408203125 -0.181470248103141801321314119377 +0.621901819109916709216179242503 0.05297500081360340118408203125 -0.181470248103141801321314119377 +0.622076007723808332983139735006 -0.130770900845527643374666126874 -0.1357212997972965240478515625 +0.622076007723808332983139735006 0.130770900845527643374666126874 -0.1357212997972965240478515625 +0.622078451514244012976462272491 -0.577075186371803217078024772491 -0.0500301515683531719536070170307 +0.622078451514244012976462272491 0.577075186371803217078024772491 -0.0500301515683531719536070170307 +0.622425293922424294201789507497 -0.231421393156051619088842130623 -0.221429592370986916272102007497 +0.622425293922424294201789507497 0.231421393156051619088842130623 -0.221429592370986916272102007497 +0.622705602645874045641960492503 -0.322679209709167524877670985006 -0.384858393669128440173210492503 +0.622705602645874045641960492503 0.322679209709167524877670985006 -0.384858393669128440173210492503 +0.62295149266719818115234375 -0.41431201994419097900390625 0.052697248756885528564453125 +0.62295149266719818115234375 0.41431201994419097900390625 0.052697248756885528564453125 +0.6230684816837310791015625 -0.0988110043108463287353515625 0.405612766742706298828125 +0.6230684816837310791015625 0.0988110043108463287353515625 0.405612766742706298828125 +0.62314049899578094482421875 -0.41502673923969268798828125 -0.04414950124919414520263671875 +0.62314049899578094482421875 0.41502673923969268798828125 -0.04414950124919414520263671875 +0.623205679655075006628806022491 -0.689033088088035539087172764994 0.1983618997037410736083984375 +0.623205679655075006628806022491 0.689033088088035539087172764994 0.1983618997037410736083984375 +0.6232995092868804931640625 -0.378153741359710693359375 -0.1760617531836032867431640625 +0.6232995092868804931640625 0.378153741359710693359375 -0.1760617531836032867431640625 +0.6233298480510711669921875 -0.178548501431941980532869251874 -0.0456150475889444337318501254686 +0.6233298480510711669921875 0.178548501431941980532869251874 -0.0456150475889444337318501254686 +0.62351445853710174560546875 -0.104403002560138707943693248126 0.151095750182867055722013560626 +0.62351445853710174560546875 0.104403002560138707943693248126 0.151095750182867055722013560626 +0.623705613613128595495993522491 -0.317790901660919167248664507497 0 +0.623705613613128595495993522491 0.317790901660919167248664507497 0 +0.623977902531623884740952235006 0 -0.182076053321361536196931751874 +0.624008443951606706079360264994 -0.309251596033573161736995871252 0.64612446725368499755859375 +0.624008443951606706079360264994 0.309251596033573161736995871252 0.64612446725368499755859375 +0.624009090662002607885483485006 -0.177906955778598802053735994377 0.0382304005324840545654296875 +0.624009090662002607885483485006 0.177906955778598802053735994377 0.0382304005324840545654296875 +0.62409751117229461669921875 -0.316768504679203033447265625 -0.269555993378162384033203125 +0.62409751117229461669921875 0.316768504679203033447265625 -0.269555993378162384033203125 +0.624146997928619384765625 -0.615637004375457763671875 -0.4810729920864105224609375 +0.624146997928619384765625 0.615637004375457763671875 -0.4810729920864105224609375 +0.624238175153732366418068977509 -0.380122205615043673443409488755 -0.525198626518249556127670985006 +0.624238175153732366418068977509 0.380122205615043673443409488755 -0.525198626518249556127670985006 +0.62428875267505645751953125 -0.154574252665042877197265625 -0.3858367502689361572265625 +0.62428875267505645751953125 0.154574252665042877197265625 -0.3858367502689361572265625 +0.62431252002716064453125 -0.15407979488372802734375 -0.276574900746345497815070757497 +0.62431252002716064453125 0.15407979488372802734375 -0.276574900746345497815070757497 +0.624420189857482932360710492503 -0.497006896138191212042301003748 0.292547897994518246722606136245 +0.624420189857482932360710492503 0.497006896138191212042301003748 0.292547897994518246722606136245 +0.624507191777229242468649772491 -0.220828456431627268008455189374 -0.6809742450714111328125 +0.624507191777229242468649772491 0.220828456431627268008455189374 -0.6809742450714111328125 +0.624628552794456504138054242503 -0.155138099938631063290372935626 -0.0909486465156078421889773721887 +0.624628552794456504138054242503 0.155138099938631063290372935626 -0.0909486465156078421889773721887 +0.624762588739395052783720529987 -0.279835510253906238897769753748 0.146161399781703948974609375 +0.624762588739395052783720529987 0.279835510253906238897769753748 0.146161399781703948974609375 +0.625215494632720858447783029987 -0.253112310171127286029246761245 0.187188404798507679327457253748 +0.625215494632720858447783029987 0.253112310171127286029246761245 0.187188404798507679327457253748 +0.625235974788665771484375 -0.4542590081691741943359375 0.634609997272491455078125 +0.625235974788665771484375 0.4542590081691741943359375 0.634609997272491455078125 +0.62531697750091552734375 -0.0413010008633136749267578125 -0.779277980327606201171875 +0.62531697750091552734375 0.0413010008633136749267578125 -0.779277980327606201171875 +0.6256415843963623046875 -0.495391988754272483141960492503 0.05621039867401123046875 +0.6256415843963623046875 0.495391988754272483141960492503 0.05621039867401123046875 +0.6257735788822174072265625 -0.1195127964019775390625 0.635707783699035688940170985006 +0.6257735788822174072265625 0.1195127964019775390625 0.635707783699035688940170985006 +0.625835990905761807567841970013 -0.210127210617065435238615123126 0.451858377456665072369190738755 +0.625835990905761807567841970013 0.210127210617065435238615123126 0.451858377456665072369190738755 +0.62589228153228759765625 -0.627836933732032753674445757497 -0.341437591612338997570930132497 +0.62589228153228759765625 0.627836933732032753674445757497 -0.341437591612338997570930132497 +0.625894105434417702404914507497 -0.53939042985439300537109375 -0.199536653608083730526701060626 +0.625894105434417702404914507497 0.53939042985439300537109375 -0.199536653608083730526701060626 +0.626081967353820822985710492503 -0.246436257660388929879857755623 -0.519413736462593034204360264994 +0.626081967353820822985710492503 0.246436257660388929879857755623 -0.519413736462593034204360264994 +0.626097482442855790552016514994 0 0.31305049359798431396484375 +0.626131814718246526574318977509 -0.6340229809284210205078125 0.126387901604175567626953125 +0.626131814718246526574318977509 0.6340229809284210205078125 0.126387901604175567626953125 +0.626298901438713029321547764994 -0.377476793527603105005141514994 -0.606432509422302201684829014994 +0.626298901438713029321547764994 0.377476793527603105005141514994 -0.606432509422302201684829014994 +0.626429605484008833471420985006 -0.495347213745117198602230246252 -0.0470928013324737604339276231258 +0.626429605484008833471420985006 0.495347213745117198602230246252 -0.0470928013324737604339276231258 +0.626440811157226606908920985006 0 0.497566413879394542352230246252 +0.626484012603759854442841970013 -0.414374399185180708471420985006 0.275339198112487804070980246252 +0.626484012603759854442841970013 0.414374399185180708471420985006 0.275339198112487804070980246252 +0.626679298281669683312600227509 -0.129563203454017644711271373126 0.11395929753780364990234375 +0.626679298281669683312600227509 0.129563203454017644711271373126 0.11395929753780364990234375 +0.626844382286071755139289507497 -0.154103951901197439022794810626 0.0762774981558322906494140625 +0.626844382286071755139289507497 0.154103951901197439022794810626 0.0762774981558322906494140625 +0.627173101902008034436164507497 -0.455662786960601806640625 -0.457192826271057117804019753748 +0.627173101902008034436164507497 0.455662786960601806640625 -0.457192826271057117804019753748 +0.627267706394195490027243522491 -0.224468851089477533511384876874 0.527872082591056779321547764994 +0.627267706394195490027243522491 0.224468851089477533511384876874 0.527872082591056779321547764994 +0.62744791805744171142578125 0 0.573418515920638971472556022491 +0.627473723888397283410256477509 -0.590651983022689841540397992503 -0.25963018834590911865234375 +0.627473723888397283410256477509 0.590651983022689841540397992503 -0.25963018834590911865234375 +0.627562999725341796875 -0.73888397216796875 -0.24538700282573699951171875 +0.627562999725341796875 0.73888397216796875 -0.24538700282573699951171875 +0.627655720710754372326789507497 -0.257959091663360562396434261245 -0.171770203113555897100894753748 +0.627655720710754372326789507497 0.257959091663360562396434261245 -0.171770203113555897100894753748 +0.6277256011962890625 -0.374741601943969770971420985006 0.324852800369262728619190738755 +0.6277256011962890625 0.374741601943969770971420985006 0.324852800369262728619190738755 +0.627895838022232033459602007497 -0.41285265982151031494140625 0.397240690886974334716796875 +0.627895838022232033459602007497 0.41285265982151031494140625 0.397240690886974334716796875 +0.627996152639389015881477007497 -0.456263861060142494885383257497 0.346329097449779521600277121252 +0.627996152639389015881477007497 0.456263861060142494885383257497 0.346329097449779521600277121252 +0.62800920009613037109375 -0.283800303936004638671875 -0.122726096212863913792467940311 +0.62800920009613037109375 0.283800303936004638671875 -0.122726096212863913792467940311 +0.628839021921157814709602007497 -0.235391387343406671694978626874 -0.599293792247772239001335492503 +0.628839021921157814709602007497 0.235391387343406671694978626874 -0.599293792247772239001335492503 +0.629009580612182706005341970013 -0.456998395919799849096420985006 -0.188411998748779313528345369377 +0.629009580612182706005341970013 0.456998395919799849096420985006 -0.188411998748779313528345369377 +0.62919075787067413330078125 -0.227849252521991729736328125 0.3386797606945037841796875 +0.62919075787067413330078125 0.227849252521991729736328125 0.3386797606945037841796875 +0.629213404655456609582131477509 -0.6347115039825439453125 -0.1059830971062183380126953125 +0.629213404655456609582131477509 0.6347115039825439453125 -0.1059830971062183380126953125 +0.629662162065505959240852007497 -0.0523718010634183911422567803129 0.152585545182228082827791126874 +0.629662162065505959240852007497 0.0523718010634183911422567803129 0.152585545182228082827791126874 +0.629685664176940940173210492503 -0.691559159755706809313835492503 -0.166556844860315328427091685626 +0.629685664176940940173210492503 0.691559159755706809313835492503 -0.166556844860315328427091685626 +0.6297030150890350341796875 -0.23757974803447723388671875 -0.33095325529575347900390625 +0.6297030150890350341796875 0.23757974803447723388671875 -0.33095325529575347900390625 +0.629705250263214111328125 -0.3451957404613494873046875 -0.216358490288257598876953125 +0.629705250263214111328125 0.3451957404613494873046875 -0.216358490288257598876953125 +0.629821586608886763158920985006 -0.197856795787811290399105246252 -0.451859188079833995477230246252 +0.629821586608886763158920985006 0.197856795787811290399105246252 -0.451859188079833995477230246252 +0.630624809861183188708366742503 -0.0798193510621786200820437784387 -0.135799299180507676565454744377 +0.630624809861183188708366742503 0.0798193510621786200820437784387 -0.135799299180507676565454744377 +0.6317161619663238525390625 0 0.153083451092243194580078125 +0.631858503818511940686164507497 -0.149114696681499458996711382497 0.261761498451232921258480246252 +0.631858503818511940686164507497 0.149114696681499458996711382497 0.261761498451232921258480246252 +0.6318862438201904296875 -0.10346250236034393310546875 -0.39053173363208770751953125 +0.6318862438201904296875 0.10346250236034393310546875 -0.39053173363208770751953125 +0.632041138410568303918068977509 -0.151737295836210261956722433752 0 +0.632041138410568303918068977509 0.151737295836210261956722433752 0 +0.6322434842586517333984375 -0.106082899868488303440905440311 -0.281094801425933793481704014994 +0.6322434842586517333984375 0.106082899868488303440905440311 -0.281094801425933793481704014994 +0.632529592514038174755341970013 -0.105323994159698494654797684689 0.478344821929931662829460492503 +0.632529592514038174755341970013 0.105323994159698494654797684689 0.478344821929931662829460492503 +0.632993209362029962683493522491 -0.0745451025664806282700070028113 0.289417797327041592669871761245 +0.632993209362029962683493522491 0.0745451025664806282700070028113 0.289417797327041592669871761245 +0.63311302661895751953125 -0.697035014629364013671875 0.3366149961948394775390625 +0.63311302661895751953125 0.697035014629364013671875 0.3366149961948394775390625 +0.633187079429626487048210492503 -0.1126836501061916351318359375 0.55576653778553009033203125 +0.633187079429626487048210492503 0.1126836501061916351318359375 0.55576653778553009033203125 +0.633436024188995361328125 -0.51120197772979736328125 0.5808889865875244140625 +0.633436024188995361328125 0.51120197772979736328125 0.5808889865875244140625 +0.63343720138072967529296875 -0.460213242471218086926398882497 -0.538016346096992448266860264994 +0.63343720138072967529296875 0.460213242471218086926398882497 -0.538016346096992448266860264994 +0.633500993251800537109375 -0.4602600038051605224609375 -0.621962010860443115234375 +0.633500993251800537109375 0.4602600038051605224609375 -0.621962010860443115234375 +0.634826412796974159924445757497 -0.0268456505611538893962819685157 -0.137021951377391815185546875 +0.634826412796974159924445757497 0.0268456505611538893962819685157 -0.137021951377391815185546875 +0.634992814064025856701789507497 -0.104652604460716253109708873126 -0.0912801511585712432861328125 +0.634992814064025856701789507497 0.104652604460716253109708873126 -0.0912801511585712432861328125 +0.63499425351619720458984375 -0.3850297629833221435546875 0.10504424571990966796875 +0.63499425351619720458984375 0.3850297629833221435546875 0.10504424571990966796875 +0.635038879513740495141860264994 -0.188419204950332624948217130623 0.680972376465797446520866742503 +0.635038879513740495141860264994 0.188419204950332624948217130623 0.680972376465797446520866742503 +0.635055005550384521484375 -0.1470105014741420745849609375 0.370935760438442230224609375 +0.635055005550384521484375 0.1470105014741420745849609375 0.370935760438442230224609375 +0.63505716621875762939453125 -0.0787741515785455731490927178129 0.114004801213741305265791936563 +0.63505716621875762939453125 0.0787741515785455731490927178129 0.114004801213741305265791936563 +0.635210090875625521533720529987 -0.289988300204277016369758257497 0.0491385996341705266754473768742 +0.635210090875625521533720529987 0.289988300204277016369758257497 0.0491385996341705266754473768742 +0.63532958924770355224609375 -0.0632738031446933718582315009371 0.703457874059677079614516514994 +0.63532958924770355224609375 0.0632738031446933718582315009371 0.703457874059677079614516514994 +0.6353375911712646484375 -0.356287193298339854852230246252 -0.33076560497283935546875 +0.6353375911712646484375 0.356287193298339854852230246252 -0.33076560497283935546875 +0.635352200269699074475227007497 -0.290915098786354020532485264994 -0.0411795999854803057571572821871 +0.635352200269699074475227007497 0.290915098786354020532485264994 -0.0411795999854803057571572821871 +0.635465982556343123022202235006 -0.128845595568418513909847433752 -0.0456286996603012112716513115629 +0.635465982556343123022202235006 0.128845595568418513909847433752 -0.0456286996603012112716513115629 +0.635531002283096335681022992503 -0.586788424849510215075554242503 -0.392784155905246734619140625 +0.635531002283096335681022992503 0.586788424849510215075554242503 -0.392784155905246734619140625 +0.6356364190578460693359375 -0.183082899451255776135383257497 -0.229012709856033308541967130623 +0.6356364190578460693359375 0.183082899451255776135383257497 -0.229012709856033308541967130623 +0.635646390914917036596420985006 -0.258018398284912131579460492503 0.4115583896636962890625 +0.635646390914917036596420985006 0.258018398284912131579460492503 0.4115583896636962890625 +0.6357878744602203369140625 -0.29333429038524627685546875 0.565445709228515669408920985006 +0.6357878744602203369140625 0.29333429038524627685546875 0.565445709228515669408920985006 +0.636078315973281904760483485006 -0.12822680175304412841796875 0.0382381999865174307395854214064 +0.636078315973281904760483485006 0.12822680175304412841796875 0.0382381999865174307395854214064 +0.63621599972248077392578125 -0.0493627488613128662109375 0.394071757793426513671875 +0.63621599972248077392578125 0.0493627488613128662109375 0.394071757793426513671875 +0.63632176816463470458984375 -0.38708849251270294189453125 -0.0880732499063014984130859375 +0.63632176816463470458984375 0.38708849251270294189453125 -0.0880732499063014984130859375 +0.636397218704223610608039507497 -0.636395394802093505859375 0 +0.636397218704223610608039507497 0.636395394802093505859375 0 +0.63645900785923004150390625 -0.0518550015985965728759765625 -0.39335851371288299560546875 +0.63645900785923004150390625 0.0518550015985965728759765625 -0.39335851371288299560546875 +0.637085130810737587658820757497 -0.103747151046991351042159124063 0.0765426989644765881637411553129 +0.637085130810737587658820757497 0.103747151046991351042159124063 0.0765426989644765881637411553129 +0.637095189094543434826789507497 -0.0575686991214752127876685960928 -0.28424549102783203125 +0.637095189094543434826789507497 0.0575686991214752127876685960928 -0.28424549102783203125 +0.637107303738594032971320757497 -0.324458611011505138055355246252 -0.459697002172470059466746761245 +0.637107303738594032971320757497 0.324458611011505138055355246252 -0.459697002172470059466746761245 +0.637147009372711181640625 -0.757934987545013427734375 0.13992099463939666748046875 +0.637147009372711181640625 0.757934987545013427734375 0.13992099463939666748046875 +0.637211012840270929480368522491 -0.505658221244811967309829014994 -0.246519549190998082943693248126 +0.637211012840270929480368522491 0.505658221244811967309829014994 -0.246519549190998082943693248126 +0.637276166677474997790397992503 -0.1543341539800167083740234375 -0.687430447340011574475227007497 +0.637276166677474997790397992503 0.1543341539800167083740234375 -0.687430447340011574475227007497 +0.637278997898101828845085492503 -0.653780484199523947985710492503 0.262576206028461434094367632497 +0.637278997898101828845085492503 0.653780484199523947985710492503 0.262576206028461434094367632497 +0.637399685382842973169204014994 -0.54958958923816680908203125 0.11905014514923095703125 +0.637399685382842973169204014994 0.54958958923816680908203125 0.11905014514923095703125 +0.637886068224906899182258257497 -0.366875740885734547003238503748 0.600836035609245255884047764994 +0.637886068224906899182258257497 0.366875740885734547003238503748 0.600836035609245255884047764994 +0.637950420379638671875 -0.423303985595703147204460492503 -0.232018399238586442434595369377 +0.637950420379638671875 0.423303985595703147204460492503 -0.232018399238586442434595369377 +0.63798598945140838623046875 0 -0.3943019807338714599609375 +0.6380519866943359375 0 0.769993007183074951171875 +0.63819301128387451171875 -0.2596132457256317138671875 0.296329490840435028076171875 +0.63819301128387451171875 0.2596132457256317138671875 0.296329490840435028076171875 +0.638194978237152099609375 -0.26286399364471435546875 0.72360897064208984375 +0.638194978237152099609375 0.26286399364471435546875 0.72360897064208984375 +0.638466274738311745373664507497 -0.554075074195861883019631477509 -0.3088062107563018798828125 +0.638466274738311745373664507497 0.554075074195861883019631477509 -0.3088062107563018798828125 +0.639198291301727339330795985006 -0.0264400498941540738895294992972 0.115006453543901446257002874063 +0.639198291301727339330795985006 0.0264400498941540738895294992972 0.115006453543901446257002874063 +0.639261001348495394580595529987 0 -0.285212197899818387103465511245 +0.6394099295139312744140625 -0.187096045166254026925756193123 -0.527872943878173850329460492503 +0.6394099295139312744140625 0.187096045166254026925756193123 -0.527872943878173850329460492503 +0.63948149979114532470703125 -0.391871988773345947265625 0 +0.63948149979114532470703125 0.391871988773345947265625 0 +0.639580184221267611377470529987 -0.178623893857002252749666126874 0.221428903937339771612613503748 +0.639580184221267611377470529987 0.178623893857002252749666126874 0.221428903937339771612613503748 +0.639778864383697465356704014994 -0.276131841540336597784488503748 0.4867584407329559326171875 +0.639778864383697465356704014994 0.276131841540336597784488503748 0.4867584407329559326171875 +0.639876595139503456799445757497 -0.395803354680538177490234375 -0.395470999181270599365234375 +0.639876595139503456799445757497 0.395803354680538177490234375 -0.395470999181270599365234375 +0.639904785156250044408920985006 -0.143674397468566888980134876874 -0.458126401901245150494190738755 +0.639904785156250044408920985006 0.143674397468566888980134876874 -0.458126401901245150494190738755 +0.640084874629974320825454014994 -0.550298479199409440454360264994 -0.0998163498938083593170489393742 +0.640084874629974320825454014994 0.550298479199409440454360264994 -0.0998163498938083593170489393742 +0.640193605422973655016960492503 -0.271293592453002940789730246252 -0.395666408538818403783920985006 +0.640193605422973655016960492503 0.271293592453002940789730246252 -0.395666408538818403783920985006 +0.640564024448394775390625 -0.3012540042400360107421875 -0.706345021724700927734375 +0.640564024448394775390625 0.3012540042400360107421875 -0.706345021724700927734375 +0.640691411495208695825454014994 -0.698259526491165183337272992503 0.0666880995035171453277911268742 +0.640691411495208695825454014994 0.698259526491165183337272992503 0.0666880995035171453277911268742 +0.6407911777496337890625 -0.465560007095336958471420985006 0.112428796291351329461605246252 +0.6407911777496337890625 0.465560007095336958471420985006 0.112428796291351329461605246252 +0.640841007232666015625 -0.7586510181427001953125 -0.11734999716281890869140625 +0.640841007232666015625 0.7586510181427001953125 -0.11734999716281890869140625 +0.641364762187004111559929242503 -0.0535093009471893296669087192186 -0.09103834629058837890625 +0.641364762187004111559929242503 0.0535093009471893296669087192186 -0.09103834629058837890625 +0.641449803113937400134147992503 -0.602649879455566472863381477509 0.188029798865318314993189119377 +0.641449803113937400134147992503 0.602649879455566472863381477509 0.188029798865318314993189119377 +0.6416070163249969482421875 -0.268668003380298614501953125 -0.280460245907306671142578125 +0.6416070163249969482421875 0.268668003380298614501953125 -0.280460245907306671142578125 +0.64163100719451904296875 -0.653495013713836669921875 0.4015649855136871337890625 +0.64163100719451904296875 0.653495013713836669921875 0.4015649855136871337890625 +0.641719314455985956335837272491 -0.543447476625442460473891514994 -0.441996999084949493408203125 +0.641719314455985956335837272491 0.543447476625442460473891514994 -0.441996999084949493408203125 +0.641948246955871604235710492503 -0.698053357005119279321547764994 -0.0558865999802947016616982978121 +0.641948246955871604235710492503 0.698053357005119279321547764994 -0.0558865999802947016616982978121 +0.641997861862182661596420985006 -0.101680801808834084254407059689 0 +0.641997861862182661596420985006 0.101680801808834084254407059689 0 +0.6420240104198455810546875 -0.17259840667247772216796875 -0.606642293930053755346420985006 +0.6420240104198455810546875 0.17259840667247772216796875 -0.606642293930053755346420985006 +0.642111408710479669714743522491 -0.0284480001777410486385466725778 0.277279794216156005859375 +0.642111408710479669714743522491 0.0284480001777410486385466725778 0.277279794216156005859375 +0.642410981655120782995993522491 -0.260220804810523953509715511245 0.0979446962475776644607705634371 +0.642410981655120782995993522491 0.260220804810523953509715511245 0.0979446962475776644607705634371 +0.642707204818725674755341970013 -0.466951179504394575658920985006 -0.0942551970481872586349325615629 +0.642707204818725674755341970013 0.466951179504394575658920985006 -0.0942551970481872586349325615629 +0.642768716812133766858039507497 -0.21087849140167236328125 -0.17994059622287750244140625 +0.642768716812133766858039507497 0.21087849140167236328125 -0.17994059622287750244140625 +0.64281226694583892822265625 -0.3531855046749114990234375 0.1566922478377819061279296875 +0.64281226694583892822265625 0.3531855046749114990234375 0.1566922478377819061279296875 +0.64295326173305511474609375 -0.185491494834423065185546875 -0.338680498301982879638671875 +0.64295326173305511474609375 0.185491494834423065185546875 -0.338680498301982879638671875 +0.643344646692275978772102007497 -0.0527416516095399884322958428129 0.0763295009732246482192508096887 +0.643344646692275978772102007497 0.0527416516095399884322958428129 0.0763295009732246482192508096887 +0.643549403548240639416633257497 0 -0.0913483969867229517181073106258 +0.643687796592712357934829014994 -0.262523803114891041143863503748 -0.082144998013973236083984375 +0.643687796592712357934829014994 0.262523803114891041143863503748 -0.082144998013973236083984375 +0.643704763054847695080695757497 -0.0778401009738445281982421875 -0.04566249810159206390380859375 +0.643704763054847695080695757497 0.0778401009738445281982421875 -0.04566249810159206390380859375 +0.643707624077796913830695757497 -0.07742500118911266326904296875 -0.69436733424663543701171875 +0.643707624077796913830695757497 0.07742500118911266326904296875 -0.69436733424663543701171875 +0.643784809112548872533920985006 -0.38754880428314208984375 -0.2744944095611572265625 +0.643784809112548872533920985006 0.38754880428314208984375 -0.2744944095611572265625 +0.643827974796295166015625 -0.1332550048828125 0.75347697734832763671875 +0.643827974796295166015625 0.1332550048828125 0.75347697734832763671875 +0.6439230144023895263671875 -0.290045253932476043701171875 0.2524605095386505126953125 +0.6439230144023895263671875 0.290045253932476043701171875 0.2524605095386505126953125 +0.643963587284088090356704014994 -0.207201400399208063296541126874 0.17994059622287750244140625 +0.643963587284088090356704014994 0.207201400399208063296541126874 0.17994059622287750244140625 +0.644240346550941533898537727509 -0.0774000480771064730545205634371 0.0382576998323202119300923129686 +0.644240346550941533898537727509 0.0774000480771064730545205634371 0.0382576998323202119300923129686 +0.644758081436157204358039507497 -0.234281605482101418225227007497 0.139281798899173719918920255623 +0.644758081436157204358039507497 0.234281605482101418225227007497 0.139281798899173719918920255623 +0.645025485754012972705595529987 -0.103188401460647574681139815311 0.251584196090698208880809261245 +0.645025485754012972705595529987 0.103188401460647574681139815311 0.251584196090698208880809261245 +0.645244616270065241003806022491 -0.237442809343338001593082253748 -0.131453703343868244513004128748 +0.645244616270065241003806022491 0.237442809343338001593082253748 -0.131453703343868244513004128748 +0.645334905385971047131477007497 -0.134243904054164864270148882497 -0.235629808902740461862279630623 +0.645334905385971047131477007497 0.134243904054164864270148882497 -0.235629808902740461862279630623 +0.6453386843204498291015625 -0.322400692105293262823551003748 -0.538140606880188054894631477509 +0.6453386843204498291015625 0.322400692105293262823551003748 -0.538140606880188054894631477509 +0.645446002483367919921875 -0.7006189823150634765625 -0.30419099330902099609375 +0.645446002483367919921875 0.7006189823150634765625 -0.30419099330902099609375 +0.645472761988639898156350227509 0 0.0765823476016521537124148721887 +0.6456345021724700927734375 -0.469076773524284340588508257497 -0.2926141917705535888671875 +0.6456345021724700927734375 0.469076773524284340588508257497 -0.2926141917705535888671875 +0.645855614542961142809929242503 0 -0.696685367822647116931022992503 +0.645901978015899658203125 -0.55473697185516357421875 0.524478018283843994140625 +0.645901978015899658203125 0.55473697185516357421875 0.524478018283843994140625 +0.645932018756866455078125 -0.60573899745941162109375 0.46459901332855224609375 +0.645932018756866455078125 0.60573899745941162109375 0.46459901332855224609375 +0.6460230052471160888671875 0 0.3809902667999267578125 +0.64624200761318206787109375 -0.357165746390819549560546875 -0.1315447501838207244873046875 +0.64624200761318206787109375 0.357165746390819549560546875 -0.1315447501838207244873046875 +0.646345925331115678247329014994 -0.552029970288276605749899772491 0 +0.646345925331115678247329014994 0.552029970288276605749899772491 0 +0.6463530063629150390625 -0.31899149715900421142578125 0.207297004759311676025390625 +0.6463530063629150390625 0.31899149715900421142578125 0.207297004759311676025390625 +0.646403414011001653527443977509 -0.514845889806747503136818977509 -0.356505301594734202996761496252 +0.646403414011001653527443977509 0.514845889806747503136818977509 -0.356505301594734202996761496252 +0.646551018953323342053352007497 -0.314070956408977475238231136245 -0.621153724193572953637954014994 +0.646551018953323342053352007497 0.314070956408977475238231136245 -0.621153724193572953637954014994 +0.646716696023940995630141514994 -0.2678759992122650146484375 0 +0.646716696023940995630141514994 0.2678759992122650146484375 0 +0.646722006797790571752670985006 -0.0599093981087207780311665317186 0.6230259239673614501953125 +0.646722006797790571752670985006 0.0599093981087207780311665317186 0.6230259239673614501953125 +0.646777582168579168175881477509 -0.0883063971996307373046875 -0.462472820281982444079460492503 +0.646777582168579168175881477509 0.0883063971996307373046875 -0.462472820281982444079460492503 +0.647054976224899269787727007497 -0.3473136126995086669921875 0.520281010866165183337272992503 +0.647054976224899269787727007497 0.3473136126995086669921875 0.520281010866165183337272992503 +0.6471035778522491455078125 -0.179183699190616607666015625 0.599292021989822454308693977509 +0.6471035778522491455078125 0.179183699190616607666015625 0.599292021989822454308693977509 +0.647214412689208984375 -0.470226383209228548931690738755 0 +0.647214412689208984375 0.470226383209228548931690738755 0 +0.6472655832767486572265625 -0.605086183547973610608039507497 -0.157853700220584869384765625 +0.6472655832767486572265625 0.605086183547973610608039507497 -0.157853700220584869384765625 +0.647416782379150457238381477509 -0.157128798961639420950220369377 0.442902421951293978619190738755 +0.647416782379150457238381477509 0.157128798961639420950220369377 0.442902421951293978619190738755 +0.647424054145812943872329014994 -0.614496108889579728540297764994 0.325171691179275523797542746252 +0.647424054145812943872329014994 0.614496108889579728540297764994 0.325171691179275523797542746252 +0.6474711894989013671875 -0.292820000648498557360710492503 0.367474389076232921258480246252 +0.6474711894989013671875 0.292820000648498557360710492503 0.367474389076232921258480246252 +0.647513580322265691613381477509 -0.0527903974056243910362162807814 0.466839981079101573602230246252 +0.647513580322265691613381477509 0.0527903974056243910362162807814 0.466839981079101573602230246252 +0.647558933496475197522102007497 -0.6590900421142578125 -0.2208341471850872039794921875 +0.647558933496475197522102007497 0.6590900421142578125 -0.2208341471850872039794921875 +0.647593975067138671875 -0.551853001117706298828125 -0.525433003902435302734375 +0.647593975067138671875 0.551853001117706298828125 -0.525433003902435302734375 +0.647829711437225341796875 -0.422237938642501808850227007497 0.551843574643135048596320757497 +0.647829711437225341796875 0.422237938642501808850227007497 0.551843574643135048596320757497 +0.647837442159652776574318977509 -0.0268443502485752119590678432814 -0.045670948922634124755859375 +0.647837442159652776574318977509 0.0268443502485752119590678432814 -0.045670948922634124755859375 +0.647996056079864546362045985006 -0.05099770240485668182373046875 0 +0.647996056079864546362045985006 0.05099770240485668182373046875 0 +0.648291623592376686779914507497 -0.326069344580173503533870871252 0.442602631449699412957698996252 +0.648291623592376686779914507497 0.326069344580173503533870871252 0.442602631449699412957698996252 +0.648334050178527854235710492503 -0.0264387495815753929828684221093 0.0382629010826349286178427178129 +0.648334050178527854235710492503 0.0264387495815753929828684221093 0.0382629010826349286178427178129 +0.648626512289047219006477007497 -0.12881410121917724609375 -0.534032920002937339098991742503 +0.648626512289047219006477007497 0.12881410121917724609375 -0.534032920002937339098991742503 +0.6490875184535980224609375 -0.177920244634151458740234375 0.3309524953365325927734375 +0.6490875184535980224609375 0.177920244634151458740234375 0.3309524953365325927734375 +0.64933951199054718017578125 -0.29800875484943389892578125 -0.2281432449817657470703125 +0.64933951199054718017578125 0.29800875484943389892578125 -0.2281432449817657470703125 +0.64944899082183837890625 -0.760405004024505615234375 0 +0.64944899082183837890625 0.760405004024505615234375 0 +0.650000000000000022204460492503 0 0 +0.6501067578792572021484375 -0.0984000004827976226806640625 0.360802508890628814697265625 +0.6501067578792572021484375 0.0984000004827976226806640625 0.360802508890628814697265625 +0.65034961700439453125 -0.0329984009265899685958700615629 -0.46471118927001953125 +0.65034961700439453125 0.0329984009265899685958700615629 -0.46471118927001953125 +0.650469589233398481908920985006 -0.110454299300909039582840875937 -0.612118774652481101306022992503 +0.650469589233398481908920985006 0.110454299300909039582840875937 -0.612118774652481101306022992503 +0.65097676217555999755859375 -0.516354596614837624279914507497 0.179183400422334659918277566248 +0.65097676217555999755859375 0.516354596614837624279914507497 0.179183400422334659918277566248 +0.651102560758590631628806022491 -0.4303481876850128173828125 -0.336699451506137836798160378748 +0.651102560758590631628806022491 0.4303481876850128173828125 -0.336699451506137836798160378748 +0.651239973306655950402443977509 -0.473148000240325938836605246252 -0.40249349176883697509765625 +0.651239973306655950402443977509 0.473148000240325938836605246252 -0.40249349176883697509765625 +0.65136434137821197509765625 -0.168627250194549549444644753748 0.519412064552307151110710492503 +0.65136434137821197509765625 0.168627250194549549444644753748 0.519412064552307151110710492503 +0.651527214050293013158920985006 -0.432518386840820334704460492503 0.168643200397491477282585492503 +0.651527214050293013158920985006 0.432518386840820334704460492503 0.168643200397491477282585492503 +0.651874324679374672619758257497 -0.0561356987804174437095561245314 0.542594113945961020739616742503 +0.651874324679374672619758257497 0.0561356987804174437095561245314 0.542594113945961020739616742503 +0.652082180976867653576789507497 -0.0859095983207225771804971259371 -0.239600193500518782174779630623 +0.652082180976867653576789507497 0.0859095983207225771804971259371 -0.239600193500518782174779630623 +0.65243549644947052001953125 -0.134694747626781463623046875 -0.344507999718189239501953125 +0.65243549644947052001953125 0.134694747626781463623046875 -0.344507999718189239501953125 +0.652469390630722068102897992503 -0.400823092460632357525440738755 -0.472889703512191783563167746252 +0.652469390630722068102897992503 0.400823092460632357525440738755 -0.472889703512191783563167746252 +0.65284873545169830322265625 -0.32541225850582122802734375 -0.174341998994350433349609375 +0.65284873545169830322265625 0.32541225850582122802734375 -0.174341998994350433349609375 +0.653526878356933571545539507497 -0.565479880571365334240852007497 0.251267409324646029400440738755 +0.653526878356933571545539507497 0.565479880571365334240852007497 0.251267409324646029400440738755 +0.65357623994350433349609375 -0.571424070000648431921774772491 0.385762700438499417376903011245 +0.65357623994350433349609375 0.571424070000648431921774772491 0.385762700438499417376903011245 +0.65368048846721649169921875 -0.36390374600887298583984375 0.05268749780952930450439453125 +0.65368048846721649169921875 0.36390374600887298583984375 0.05268749780952930450439453125 +0.653779578208923295434829014994 -0.474997140467166900634765625 0.499449175596237138208266514994 +0.653779578208923295434829014994 0.474997140467166900634765625 0.499449175596237138208266514994 +0.653793710470199518347556022491 -0.131200996041297895944310880623 0.212932297587394708804353626874 +0.653793710470199518347556022491 0.131200996041297895944310880623 0.212932297587394708804353626874 +0.6538815200328826904296875 -0.36467774212360382080078125 -0.044144251383841037750244140625 +0.6538815200328826904296875 0.36467774212360382080078125 -0.044144251383841037750244140625 +0.654464685916900656970085492503 -0.3985776007175445556640625 0.472030216455459616931022992503 +0.654464685916900656970085492503 0.3985776007175445556640625 0.472030216455459616931022992503 +0.654586189985275290759147992503 -0.0371250014752149623542543110943 -0.6165540218353271484375 +0.654586189985275290759147992503 0.0371250014752149623542543110943 -0.6165540218353271484375 +0.654586786031722933643095529987 -0.16271640360355377197265625 -0.187188404798507679327457253748 +0.654586786031722933643095529987 0.16271640360355377197265625 -0.187188404798507679327457253748 +0.654617595672607466283920985006 -0.218609595298767112048210492503 -0.404580783843994151727230246252 +0.654617595672607466283920985006 0.218609595298767112048210492503 -0.404580783843994151727230246252 +0.654637688398361228259147992503 -0.269256211817264556884765625 -0.4705854952335357666015625 +0.654637688398361228259147992503 0.269256211817264556884765625 -0.4705854952335357666015625 +0.654682728648185663367087272491 -0.06990484893321990966796875 -0.537590998411178522253806022491 +0.654682728648185663367087272491 0.06990484893321990966796875 -0.537590998411178522253806022491 +0.655050915479659989770766514994 -0.0567594975233077989051899692186 0.240181189775466902291967130623 +0.655050915479659989770766514994 0.0567594975233077989051899692186 0.240181189775466902291967130623 +0.655138397216796897204460492503 -0.305372810363769564556690738755 -0.342842388153076216283920985006 +0.655138397216796897204460492503 0.305372810363769564556690738755 -0.342842388153076216283920985006 +0.655275821685791015625 0 0.68783231079578399658203125 +0.655354642868042014391960492503 -0.25094155967235565185546875 0.640342774987220697546774772491 +0.655354642868042014391960492503 0.25094155967235565185546875 0.640342774987220697546774772491 +0.65558719635009765625 -0.436083984375000011102230246252 -0.14154720306396484375 +0.65558719635009765625 0.436083984375000011102230246252 -0.14154720306396484375 +0.655699485540390036852897992503 -0.5248284637928009033203125 0.443974889814853668212890625 +0.655699485540390036852897992503 0.5248284637928009033203125 0.443974889814853668212890625 +0.655829620361328191613381477509 -0.326626396179199252056690738755 0.321251201629638716283920985006 +0.655829620361328191613381477509 0.326626396179199252056690738755 0.321251201629638716283920985006 +0.6559152305126190185546875 -0.519284543395042375024672764994 -0.150393903255462646484375 +0.6559152305126190185546875 0.519284543395042375024672764994 -0.150393903255462646484375 +0.65600597858428955078125 -0.725297987461090087890625 0.20880199968814849853515625 +0.65600597858428955078125 0.725297987461090087890625 0.20880199968814849853515625 +0.656098085641860895300681022491 -0.239001694321632374151676003748 0.0491238974034786182731870951557 +0.656098085641860895300681022491 0.239001694321632374151676003748 0.0491238974034786182731870951557 +0.656284296512603670947783029987 -0.239990806579589821545539507497 -0.041171200573444366455078125 +0.656284296512603670947783029987 0.239990806579589821545539507497 -0.041171200573444366455078125 +0.656600016355514459753806022491 -0.0288750011473894105384907504686 -0.240921109914779635330361884371 +0.656600016355514459753806022491 0.0288750011473894105384907504686 -0.240921109914779635330361884371 +0.656850993633270263671875 -0.3255279958248138427734375 0.680131018161773681640625 +0.656850993633270263671875 0.3255279958248138427734375 0.680131018161773681640625 +0.656908041238784767834602007497 0 -0.539418497681617759020866742503 +0.65697075426578521728515625 -0.217443756759166717529296875 -0.289149753749370574951171875 +0.65697075426578521728515625 0.217443756759166717529296875 -0.289149753749370574951171875 +0.657214599847793512488181022491 0 0.240974307060241671463174384371 +0.657375991344451904296875 -0.23245100677013397216796875 -0.71681499481201171875 +0.657375991344451904296875 0.23245100677013397216796875 -0.71681499481201171875 +0.657560777664184636925881477509 -0.397151207923889193462940738755 0.223348808288574229852230246252 +0.657560777664184636925881477509 0.397151207923889193462940738755 0.223348808288574229852230246252 +0.6577127873897552490234375 -0.611078399419784590307358485006 0.0632249973714351654052734375 +0.6577127873897552490234375 0.611078399419784590307358485006 0.0632249973714351654052734375 +0.6580944061279296875 -0.207911992073059104235710492503 0.404579210281372114721420985006 +0.6580944061279296875 0.207911992073059104235710492503 0.404579210281372114721420985006 +0.658671301603317327355568977509 -0.611020785570144719933693977509 -0.0529731016606092494636293110943 +0.658671301603317327355568977509 0.611020785570144719933693977509 -0.0529731016606092494636293110943 +0.658833980560302734375 -0.660880982875823974609375 -0.3594079911708831787109375 +0.658833980560302734375 0.660880982875823974609375 -0.3594079911708831787109375 +0.658918073773384072033820757497 -0.401240105926990497930972878748 -0.554376327991485617907585492503 +0.658918073773384072033820757497 0.401240105926990497930972878748 -0.554376327991485617907585492503 +0.6589612662792205810546875 -0.08278724737465381622314453125 -0.34844850003719329833984375 +0.6589612662792205810546875 0.08278724737465381622314453125 -0.34844850003719329833984375 +0.659262001514434814453125 -0.39734399318695068359375 -0.638350009918212890625 +0.659262001514434814453125 0.39734399318695068359375 -0.638350009918212890625 +0.65931223332881927490234375 -0.21023775637149810791015625 0.289148993790149688720703125 +0.65931223332881927490234375 0.21023775637149810791015625 0.289148993790149688720703125 +0.659328591823577836450454014994 -0.189436098933219887463508257497 -0.139281798899173719918920255623 +0.659328591823577836450454014994 0.189436098933219887463508257497 -0.139281798899173719918920255623 +0.659343305230140619421774772491 -0.363062208890914894787727007497 0.394908300042152382580695757497 +0.659343305230140619421774772491 0.363062208890914894787727007497 0.394908300042152382580695757497 +0.659344005584716841283920985006 0 0.453062391281127962994190738755 +0.659410494565963678503806022491 -0.160227903723716730288728626874 0.171769504249095900094701505623 +0.659410494565963678503806022491 0.160227903723716730288728626874 0.171769504249095900094701505623 +0.659901911020278841846220529987 -0.215358504652976984194978626874 -0.0902796968817710793198116903113 +0.659901911020278841846220529987 0.215358504652976984194978626874 -0.0902796968817710793198116903113 +0.660135486721992514880241742503 -0.479614216089248646124332253748 0.2381002902984619140625 +0.660135486721992514880241742503 0.479614216089248646124332253748 0.2381002902984619140625 +0.660457706451415993420539507497 -0.21364630758762359619140625 0.0902796968817710793198116903113 +0.660457706451415993420539507497 0.21364630758762359619140625 0.0902796968817710793198116903113 +0.66053877770900726318359375 -0.12615239620208740234375 0.671024882793426535876335492503 +0.66053877770900726318359375 0.12615239620208740234375 0.671024882793426535876335492503 +0.660620784759521573192841970013 -0.35860478878021240234375 0.273828792572021473272769753748 +0.660620784759521573192841970013 0.35860478878021240234375 0.273828792572021473272769753748 +0.660916915535926796643195757497 -0.66924647986888885498046875 0.1334094516932964324951171875 +0.660916915535926796643195757497 0.66924647986888885498046875 0.1334094516932964324951171875 +0.661150789260864235608039507497 -0.526242595911026067589943977509 0.309756597876548800396534488755 +0.661150789260864235608039507497 0.526242595911026067589943977509 0.309756597876548800396534488755 +0.6615811884403228759765625 -0.187164601683616621530248380623 0.131453703343868244513004128748 +0.6615811884403228759765625 0.187164601683616621530248380623 0.131453703343868244513004128748 +0.661624702811241083288962272491 -0.342846660315990425793586382497 -0.408912043273448932989566628748 +0.661624702811241083288962272491 0.342846660315990425793586382497 -0.408912043273448932989566628748 +0.662016052007675104285056022491 -0.4809773862361907958984375 -0.482592427730560269427684261245 +0.662016052007675104285056022491 0.4809773862361907958984375 -0.482592427730560269427684261245 +0.66204750537872314453125 -0.04931774921715259552001953125 0.348942004144191741943359375 +0.66204750537872314453125 0.04931774921715259552001953125 0.348942004144191741943359375 +0.662333375215530373303352007497 -0.623465982079505876001235264994 -0.274054087698459625244140625 +0.662333375215530373303352007497 0.623465982079505876001235264994 -0.274054087698459625244140625 +0.6623354852199554443359375 -0.03093600086867809295654296875 -0.35050575435161590576171875 +0.6623354852199554443359375 0.03093600086867809295654296875 -0.35050575435161590576171875 +0.662711405754089377673210492503 -0.5711192786693572998046875 -0.211274103820323938540681751874 +0.662711405754089377673210492503 0.5711192786693572998046875 -0.211274103820323938540681751874 +0.662827014923095703125 -0.7279570102691650390625 -0.17532299458980560302734375 +0.662827014923095703125 0.7279570102691650390625 -0.17532299458980560302734375 +0.662910318374633766858039507497 -0.260932508111000049932926003748 -0.549967485666275068822983485006 +0.662910318374633766858039507497 0.260932508111000049932926003748 -0.549967485666275068822983485006 +0.663049095869064242236845529987 -0.113720601797103873509264815311 -0.193477204442024208752570757497 +0.663049095869064242236845529987 0.113720601797103873509264815311 -0.193477204442024208752570757497 +0.6637327373027801513671875 -0.33296549320220947265625 0.1053232513368129730224609375 +0.6637327373027801513671875 0.33296549320220947265625 0.1053232513368129730224609375 +0.663774523138999872351462272491 -0.248468686640262587106420255623 -0.632587891817092851098891514994 +0.663774523138999872351462272491 0.248468686640262587106420255623 -0.632587891817092851098891514994 +0.664165806770324773644631477509 -0.237672901153564458676115123126 0.558923381567001387182358485006 +0.664165806770324773644631477509 0.237672901153564458676115123126 0.558923381567001387182358485006 +0.664169704914092995373664507497 -0.66997325420379638671875 -0.11187104694545269012451171875 +0.664169704914092995373664507497 0.66997325420379638671875 -0.11187104694545269012451171875 +0.6643566191196441650390625 0 0.607149016857147283410256477509 +0.664481592178344793175881477509 -0.441932821273803733141960492503 0.05621039867401123046875 +0.664481592178344793175881477509 0.441932821273803733141960492503 0.05621039867401123046875 +0.664606380462646528783920985006 -0.105398404598236086759932561563 0.432653617858886729852230246252 +0.664606380462646528783920985006 0.105398404598236086759932561563 0.432653617858886729852230246252 +0.664683198928833096630341970013 -0.442695188522338911596420985006 -0.0470928013324737604339276231258 +0.664683198928833096630341970013 0.442695188522338911596420985006 -0.0470928013324737604339276231258 +0.66474418342113494873046875 -0.526353988051414423132712272491 0.059723548591136932373046875 +0.66474418342113494873046875 0.526353988051414423132712272491 0.059723548591136932373046875 +0.664830887317657492907585492503 -0.4371381103992462158203125 0.42060779035091400146484375 +0.664830887317657492907585492503 0.4371381103992462158203125 0.42060779035091400146484375 +0.664852809906005925988381477509 -0.403363990783691450658920985006 -0.187799203395843522512720369377 +0.664852809906005925988381477509 0.403363990783691450658920985006 -0.187799203395843522512720369377 +0.664855086803436190479033029987 -0.0847993999719619667709835653113 0.201933193206787098272769753748 +0.664855086803436190479033029987 0.0847993999719619667709835653113 0.201933193206787098272769753748 +0.664937102794647239001335492503 -0.483102911710739157946647992503 0.366701397299766529425113503748 +0.664937102794647239001335492503 0.483102911710739157946647992503 0.366701397299766529425113503748 +0.664950740337371781762954014994 -0.223260161280632002389623380623 0.480099526047706615106136496252 +0.664950740337371781762954014994 0.223260161280632002389623380623 0.480099526047706615106136496252 +0.6650722324848175048828125 -0.335229746997356414794921875 -0.08831849880516529083251953125 +0.6650722324848175048828125 0.335229746997356414794921875 -0.08831849880516529083251953125 +0.66516901552677154541015625 -0.12939749658107757568359375 0.321413241326808929443359375 +0.66516901552677154541015625 0.12939749658107757568359375 0.321413241326808929443359375 +0.665581455826759316174445757497 -0.526306414604187033923210492503 -0.0500361014157533617874307196871 +0.665581455826759316174445757497 0.526306414604187033923210492503 -0.0500361014157533617874307196871 +0.665593361854553200451789507497 0 0.528664314746856711657585492503 +0.665639263391494706567641514994 -0.440272799134254433361945757497 0.292547897994518246722606136245 +0.665639263391494706567641514994 0.440272799134254433361945757497 0.292547897994518246722606136245 +0.6657040119171142578125 -0.337886404991149913445980246252 -0.287526392936706565173210492503 +0.6657040119171142578125 0.337886404991149913445980246252 -0.287526392936706565173210492503 +0.6657405793666839599609375 -0.216309106349945046154914507497 0 +0.6657405793666839599609375 0.216309106349945046154914507497 0 +0.665908002853393576891960492503 -0.16487920284271240234375 -0.411559200286865267681690738755 +0.665908002853393576891960492503 0.16487920284271240234375 -0.411559200286865267681690738755 +0.66627372801303863525390625 -0.24160350859165191650390625 0.24537076056003570556640625 +0.66627372801303863525390625 0.24160350859165191650390625 0.24537076056003570556640625 +0.666776001453399658203125 -0.4844349920749664306640625 -0.566332995891571044921875 +0.666776001453399658203125 0.4844349920749664306640625 -0.566332995891571044921875 +0.666884243488311767578125 -0.24795149266719818115234375 -0.23724599182605743408203125 +0.666884243488311767578125 0.24795149266719818115234375 -0.23724599182605743408203125 +0.66695845127105712890625 -0.398162952065467812268195757497 0.345156100392341624871761496252 +0.66695845127105712890625 0.398162952065467812268195757497 0.345156100392341624871761496252 +0.6682560145854949951171875 -0.3404902517795562744140625 0 +0.6682560145854949951171875 0.3404902517795562744140625 0 +0.668322679400443986352797764994 -0.485560795664787270276008257497 -0.200187748670578008480802623126 +0.668322679400443986352797764994 0.485560795664787270276008257497 -0.200187748670578008480802623126 +0.668461978435516357421875 -0.19833600521087646484375 0.716813027858734130859375 +0.668461978435516357421875 0.19833600521087646484375 0.716813027858734130859375 +0.668767988681793212890625 -0.06660400331020355224609375 0.74048197269439697265625 +0.668767988681793212890625 0.06660400331020355224609375 0.74048197269439697265625 +0.668906271457672119140625 -0.165085494518280029296875 -0.296330250799655914306640625 +0.668906271457672119140625 0.165085494518280029296875 -0.296330250799655914306640625 +0.66898000240325927734375 -0.617672026157379150390625 -0.4134570062160491943359375 +0.66898000240325927734375 0.617672026157379150390625 -0.4134570062160491943359375 +0.669185435771942116467414507497 -0.210222845524549478701814564374 -0.480100387334823575091746761245 +0.669185435771942116467414507497 0.210222845524549478701814564374 -0.480100387334823575091746761245 +0.669309920072555519787727007497 -0.0284494005143642418598215471093 0.2030147016048431396484375 +0.669309920072555519787727007497 0.0284494005143642418598215471093 0.2030147016048431396484375 +0.66938848793506622314453125 -0.299823760986328125 0.1566014997661113739013671875 +0.66938848793506622314453125 0.299823760986328125 0.1566014997661113739013671875 +0.669740420579910233911391514994 -0.0570500008761882712593482835928 -0.195429497957229608706697376874 +0.669740420579910233911391514994 0.0570500008761882712593482835928 -0.195429497957229608706697376874 +0.6698737442493438720703125 -0.27119176089763641357421875 0.20055900514125823974609375 +0.6698737442493438720703125 0.27119176089763641357421875 0.20055900514125823974609375 +0.669928008317947298877470529987 -0.140830200910568220651342130623 -0.146161399781703948974609375 +0.669928008317947298877470529987 0.140830200910568220651342130623 -0.146161399781703948974609375 +0.670433378219604469983039507497 -0.119312100112438201904296875 0.5884586870670318603515625 +0.670433378219604469983039507497 0.119312100112438201904296875 0.5884586870670318603515625 +0.67081701755523681640625 -0.16245700418949127197265625 -0.72361099720001220703125 +0.67081701755523681640625 0.16245700418949127197265625 -0.72361099720001220703125 +0.67081873118877410888671875 0 0.335411243140697479248046875 +0.6708199977874755859375 -0.688189983367919921875 0.2763960063457489013671875 +0.6708199977874755859375 0.688189983367919921875 0.2763960063457489013671875 +0.67110942304134368896484375 -0.309630639851093292236328125 0.596859359741210959704460492503 +0.67110942304134368896484375 0.309630639851093292236328125 0.596859359741210959704460492503 +0.671136808395385808800881477509 -0.243039202690124522820980246252 0.361258411407470725329460492503 +0.671136808395385808800881477509 0.243039202690124522820980246252 0.361258411407470725329460492503 +0.671278297901153564453125 -0.192283001542091352975560880623 -0.0491238974034786182731870951557 +0.671278297901153564453125 0.192283001542091352975560880623 -0.0491238974034786182731870951557 +0.671459019184112548828125 -0.386184990406036376953125 0.632458984851837158203125 +0.671459019184112548828125 0.386184990406036376953125 0.632458984851837158203125 +0.6714771091938018798828125 -0.112434002757072437628238503748 0.162718500196933735235660378748 +0.6714771091938018798828125 0.112434002757072437628238503748 0.162718500196933735235660378748 +0.671683216094970725329460492503 -0.253418397903442393914730246252 -0.353016805648803722039730246252 +0.671683216094970725329460492503 0.253418397903442393914730246252 -0.353016805648803722039730246252 +0.671685600280761740954460492503 -0.368208789825439475329460492503 -0.23078238964080810546875 +0.671685600280761740954460492503 0.368208789825439475329460492503 -0.23078238964080810546875 +0.671752619743347101355368522491 -0.6717506945133209228515625 0 +0.671752619743347101355368522491 0.6717506945133209228515625 0 +0.671976202726364046924345529987 0 -0.196081903576850874459935880623 +0.672009789943694979541533029987 -0.191592106223106378726228626874 0.041171200573444366455078125 +0.672009789943694979541533029987 0.191592106223106378726228626874 0.041171200573444366455078125 +0.672062692046165421899672764994 -0.111906743794679644499190374063 0.508241373300552301550681022491 +0.672062692046165421899672764994 0.111906743794679644499190374063 0.508241373300552301550681022491 +0.672488272190093994140625 -0.2763847410678863525390625 -0.1840395033359527587890625 +0.672488272190093994140625 0.2763847410678863525390625 -0.1840395033359527587890625 +0.672676903009414628442641514994 -0.167071799933910358770816628748 -0.0979446962475776644607705634371 +0.672676903009414628442641514994 0.167071799933910358770816628748 -0.0979446962475776644607705634371 +0.672867000102996826171875 -0.3040717542171478271484375 -0.1314922459423542022705078125 +0.672867000102996826171875 0.3040717542171478271484375 -0.1314922459423542022705078125 +0.673936623334884576941306022491 -0.584857022762298561779914507497 -0.32596211135387420654296875 +0.673936623334884576941306022491 0.584857022762298561779914507497 -0.32596211135387420654296875 +0.674011993408203169408920985006 -0.110360002517700200863615123126 -0.416567182540893587994190738755 +0.674011993408203169408920985006 0.110360002517700200863615123126 -0.416567182540893587994190738755 +0.6744120121002197265625 -0.73501002788543701171875 0.070197999477386474609375 +0.6744120121002197265625 0.73501002788543701171875 0.070197999477386474609375 +0.674584203958511374743522992503 -0.343544411659240711554019753748 -0.486738002300262484478565738755 +0.674584203958511374743522992503 0.343544411659240711554019753748 -0.486738002300262484478565738755 +0.674694013595581121300881477509 -0.535402822494506880346420985006 -0.261020699143409751208366742503 +0.674694013595581121300881477509 0.535402822494506880346420985006 -0.261020699143409751208366742503 +0.674885398149490334240852007497 -0.139529603719711292608707253748 0.122725397348403916786274692186 +0.674885398149490334240852007497 0.139529603719711292608707253748 0.122725397348403916786274692186 +0.674893784523010298315170985006 -0.5819183886051177978515625 0.1260530948638916015625 +0.674893784523010298315170985006 0.5819183886051177978515625 0.1260530948638916015625 +0.67504619061946868896484375 -0.378555142879486050677684261245 -0.351438455283641815185546875 +0.67504619061946868896484375 0.378555142879486050677684261245 -0.351438455283641815185546875 +0.675063180923461847449118522491 -0.165958102047443378790347878748 0.082144998013973236083984375 +0.675063180923461847449118522491 0.165958102047443378790347878748 0.082144998013973236083984375 +0.675374290347099281994758257497 -0.274144548177719105108707253748 0.43728078901767730712890625 +0.675374290347099281994758257497 0.274144548177719105108707253748 0.43728078901767730712890625 +0.675494015216827392578125 -0.57204997539520263671875 -0.4652599990367889404296875 +0.675494015216827392578125 0.57204997539520263671875 -0.4652599990367889404296875 +0.675734996795654296875 -0.734793007373809814453125 -0.0588279999792575836181640625 +0.675734996795654296875 0.734793007373809814453125 -0.0588279999792575836181640625 +0.6769912540912628173828125 -0.1597657464444637298583984375 0.280458748340606689453125 +0.6769912540912628173828125 0.1597657464444637298583984375 0.280458748340606689453125 +0.677022278308868408203125 -0.198101694881916062795923494377 -0.558924293518066384045539507497 +0.677022278308868408203125 0.198101694881916062795923494377 -0.558924293518066384045539507497 +0.677085903286933854516860264994 -0.636130428314208962170539507497 0.198475898802280420474275501874 +0.677085903286933854516860264994 0.636130428314208962170539507497 0.198475898802280420474275501874 +0.677327203750610395971420985006 -0.410698413848876953125 0.1120471954345703125 +0.677327203750610395971420985006 0.410698413848876953125 0.1120471954345703125 +0.67739200592041015625 -0.156811201572418235095085492503 0.39566481113433837890625 +0.67739200592041015625 0.156811201572418235095085492503 0.39566481113433837890625 +0.67740373313426971435546875 -0.1136602498590946197509765625 -0.3011730015277862548828125 +0.67740373313426971435546875 0.1136602498590946197509765625 -0.3011730015277862548828125 +0.677412915229797407690170985006 -0.292374891042709361688167746252 0.515391290187835693359375 +0.677412915229797407690170985006 0.292374891042709361688167746252 0.515391290187835693359375 +0.677516394853591941149772992503 -0.41908590495586395263671875 -0.41873399913311004638671875 +0.677516394853591941149772992503 0.41908590495586395263671875 -0.41873399913311004638671875 +0.677586972713470458984375 -0.081500001251697540283203125 -0.730912983417510986328125 +0.677586972713470458984375 0.081500001251697540283203125 -0.730912983417510986328125 +0.67769201099872589111328125 -0.182187207043170928955078125 -0.640344643592834494860710492503 +0.67769201099872589111328125 0.182187207043170928955078125 -0.640344643592834494860710492503 +0.677736926078796431127670985006 -0.582668977975845381322983485006 -0.105687899887561803646818248126 +0.677736926078796431127670985006 0.582668977975845381322983485006 -0.105687899887561803646818248126 +0.6778223216533660888671875 -0.449760484695434559210269753748 -0.246519549190998082943693248126 +0.6778223216533660888671875 0.449760484695434559210269753748 -0.246519549190998082943693248126 +0.678097712993621759558493522491 -0.0564004011452197973053301893742 0.164322894811630232370092130623 +0.678097712993621759558493522491 0.0564004011452197973053301893742 0.164322894811630232370092130623 +0.6782070100307464599609375 -0.07986975274980068206787109375 0.31009049713611602783203125 +0.6782070100307464599609375 0.07986975274980068206787109375 0.31009049713611602783203125 +0.678630399703979536596420985006 -0.0526535987854003934005575615629 0.420343208312988325658920985006 +0.678630399703979536596420985006 0.0526535987854003934005575615629 0.420343208312988325658920985006 +0.678743219375610440380341970013 -0.412894392013549826891960492503 -0.0939447999000549427428552462516 +0.678743219375610440380341970013 0.412894392013549826891960492503 -0.0939447999000549427428552462516 +0.678889608383178799755341970013 -0.0553120017051696791221537807814 -0.419582414627075239721420985006 +0.678889608383178799755341970013 0.0553120017051696791221537807814 -0.419582414627075239721420985006 +0.679134410619735673364516514994 -0.0859593011438846560379190009371 -0.146245399117469782046541126874 +0.679134410619735673364516514994 0.0859593011438846560379190009371 -0.146245399117469782046541126874 +0.679848015308380126953125 0 -0.73335301876068115234375 +0.679898834228515602795539507497 -0.152654047310352314337222878748 -0.486759302020072948113948996252 +0.679898834228515602795539507497 0.152654047310352314337222878748 -0.486759302020072948113948996252 +0.680205705761909418249899772491 -0.288249441981315579486278011245 -0.420395559072494484631477007497 +0.680205705761909418249899772491 0.288249441981315579486278011245 -0.420395559072494484631477007497 +0.680309712886810302734375 0 0.16485910117626190185546875 +0.6805183887481689453125 0 -0.420588779449462935033920985006 +0.68058001995086669921875 -0.3306010067462921142578125 -0.6538460254669189453125 +0.68058001995086669921875 0.3306010067462921142578125 -0.6538460254669189453125 +0.68058224022388458251953125 -0.310701750218868255615234375 0.05264849960803985595703125 +0.68058224022388458251953125 0.310701750218868255615234375 0.05264849960803985595703125 +0.680659687519073464123664507497 -0.163409395515918709484992632497 0 +0.680659687519073464123664507497 0.163409395515918709484992632497 0 +0.68073450028896331787109375 -0.311694748699665069580078125 -0.044120999984443187713623046875 +0.68073450028896331787109375 0.311694748699665069580078125 -0.044120999984443187713623046875 +0.680739212036132856908920985006 -0.276920795440673828125 0.316084790229797407690170985006 +0.680739212036132856908920985006 0.276920795440673828125 0.316084790229797407690170985006 +0.68084062635898590087890625 -0.494657507538795448986945757497 0.119455596059560770205720814374 +0.68084062635898590087890625 0.494657507538795448986945757497 0.119455596059560770205720814374 +0.68103902041912078857421875 -0.196160249412059783935546875 -0.24537076056003570556640625 +0.68103902041912078857421875 0.196160249412059783935546875 -0.24537076056003570556640625 +0.68119083344936370849609375 -0.340311841666698422503856136245 -0.568037307262420632092414507497 +0.68119083344936370849609375 0.340311841666698422503856136245 -0.568037307262420632092414507497 +0.681499004364013671875 -0.646838009357452392578125 0.34228599071502685546875 +0.681499004364013671875 0.646838009357452392578125 0.34228599071502685546875 +0.68164098262786865234375 -0.69377899169921875 -0.23245699703693389892578125 +0.68164098262786865234375 0.69377899169921875 -0.23245699703693389892578125 +0.6819260120391845703125 -0.44446098804473876953125 0.580887973308563232421875 +0.6819260120391845703125 0.44446098804473876953125 0.580887973308563232421875 +0.682113599777221746300881477509 -0.417996788024902365954460492503 0 +0.682113599777221746300881477509 0.417996788024902365954460492503 0 +0.682314714789390541760383257497 -0.543448439240455605236945757497 -0.376311151683330513684211382497 +0.682314714789390541760383257497 0.543448439240455605236945757497 -0.376311151683330513684211382497 +0.682601988315582275390625 -0.06168074905872344970703125 -0.304548740386962890625 +0.682601988315582275390625 0.06168074905872344970703125 -0.304548740386962890625 +0.682651007175445578845085492503 -0.0632376980036497143844442803129 0.65763847529888153076171875 +0.682651007175445578845085492503 0.0632376980036497143844442803129 0.65763847529888153076171875 +0.682876405119895890649672764994 -0.496135628223419167248664507497 -0.100146146863698951023913252811 +0.682876405119895890649672764994 0.496135628223419167248664507497 -0.100146146863698951023913252811 +0.683002474904060297156149772491 -0.36660881340503692626953125 0.549185511469840959009047764994 +0.683002474904060297156149772491 0.36660881340503692626953125 0.549185511469840959009047764994 +0.68305377662181854248046875 -0.1891383491456508636474609375 0.632586023211479164807258257497 +0.68305377662181854248046875 0.1891383491456508636474609375 0.632586023211479164807258257497 +0.68322478234767913818359375 -0.638702082633972101355368522491 -0.1666233502328395843505859375 +0.68322478234767913818359375 0.638702082633972101355368522491 -0.1666233502328395843505859375 +0.683613002300262451171875 -0.496669524908065818102897992503 -0.309826791286468505859375 +0.683613002300262451171875 0.496669524908065818102897992503 -0.309826791286468505859375 +0.683659213781356744910056022491 -0.0289107006043195710609516879686 -0.14756210148334503173828125 +0.683659213781356744910056022491 0.0289107006043195710609516879686 -0.14756210148334503173828125 +0.683838415145873956824118522491 -0.112702804803848255499332253748 -0.098301701247692108154296875 +0.683838415145873956824118522491 0.112702804803848255499332253748 -0.098301701247692108154296875 +0.6839077174663543701171875 -0.0848337016999721471588458143742 0.122774401307106012515291126874 +0.6839077174663543701171875 0.0848337016999721471588458143742 0.122774401307106012515291126874 +0.684021359682083107678352007497 -0.411770604550838470458984375 -0.29165031015872955322265625 +0.684021359682083107678352007497 0.411770604550838470458984375 -0.29165031015872955322265625 +0.684347981214523226611845529987 -0.138756795227527596203742632497 -0.0491385996341705266754473768742 +0.684347981214523226611845529987 0.138756795227527596203742632497 -0.0491385996341705266754473768742 +0.684366273880004927221420985006 -0.584502321481704778527443977509 0 +0.684366273880004927221420985006 0.584502321481704778527443977509 0 +0.684380817413330122533920985006 -0.286579203605651866570980246252 -0.299157595634460482525440738755 +0.684380817413330122533920985006 0.286579203605651866570980246252 -0.299157595634460482525440738755 +0.68492250144481658935546875 0 -0.305584497749805450439453125 +0.685007417201995760791533029987 -0.1380904018878936767578125 0.0411795999854803057571572821871 +0.685007417201995760791533029987 0.1380904018878936767578125 0.0411795999854803057571572821871 +0.68526448309421539306640625 -0.191382743418216705322265625 0.237245254218578338623046875 +0.68526448309421539306640625 0.191382743418216705322265625 0.237245254218578338623046875 +0.685666418075561612255341970013 -0.376731204986572310033920985006 0.167138397693634033203125 +0.685666418075561612255341970013 0.376731204986572310033920985006 0.167138397693634033203125 +0.685816812515258833471420985006 -0.197857594490051275082365123126 -0.361259198188781771587940738755 +0.685816812515258833471420985006 0.197857594490051275082365123126 -0.361259198188781771587940738755 +0.686091679334640436316306022491 -0.111727701127529138735994251874 0.0824305988848209325592364393742 +0.686091679334640436316306022491 0.111727701127529138735994251874 0.0824305988848209325592364393742 +0.686426424980163596423210492503 -0.345249894261360157354801003748 0.468638080358505237921207253748 +0.686426424980163596423210492503 0.345249894261360157354801003748 0.468638080358505237921207253748 +0.686606788635253928454460492503 -0.116590649262070647496081221561 -0.646125373244285539087172764994 +0.686606788635253928454460492503 0.116590649262070647496081221561 -0.646125373244285539087172764994 +0.686781013011932395251335492503 -0.1363914012908935546875 -0.565446621179580666272102007497 +0.686781013011932395251335492503 0.1363914012908935546875 -0.565446621179580666272102007497 +0.686851215362548894738381477509 -0.30938160419464111328125 0.269291210174560535772769753748 +0.686851215362548894738381477509 0.30938160419464111328125 0.269291210174560535772769753748 +0.687201181054115317614616742503 -0.09382554702460765838623046875 -0.491377371549606312139957253748 +0.687201181054115317614616742503 0.09382554702460765838623046875 -0.491377371549606312139957253748 +0.687419971823692299572883257497 -0.499434000253677345959602007497 -0.424854241311550140380859375 +0.687419971823692299572883257497 0.499434000253677345959602007497 -0.424854241311550140380859375 +0.6876653134822845458984375 -0.499615532159805308953792746252 0 +0.6876653134822845458984375 0.499615532159805308953792746252 0 +0.687880331277847312243522992503 -0.166949348896741872616544810626 0.470583823323249827996761496252 +0.687880331277847312243522992503 0.166949348896741872616544810626 0.470583823323249827996761496252 +0.68793813884258270263671875 -0.311121250689029682501285378748 0.390441538393497433734324886245 +0.68793813884258270263671875 0.311121250689029682501285378748 0.390441538393497433734324886245 +0.687974989414215087890625 -0.601499021053314208984375 0.406066000461578369140625 +0.687974989414215087890625 0.601499021053314208984375 0.406066000461578369140625 +0.6879765093326568603515625 -0.030480000190436840057373046875 0.2970854938030242919921875 +0.6879765093326568603515625 0.030480000190436840057373046875 0.2970854938030242919921875 +0.687983179092407248766960492503 -0.0560897972434759098381285014057 0.496017479896545376849559261245 +0.687983179092407248766960492503 0.0560897972434759098381285014057 0.496017479896545376849559261245 +0.688189029693603515625 -0.4999969899654388427734375 0.52573597431182861328125 +0.688189029693603515625 0.4999969899654388427734375 0.52573597431182861328125 +0.6882974803447723388671875 -0.278808005154132843017578125 0.1049407459795475006103515625 +0.6882974803447723388671875 0.278808005154132843017578125 0.1049407459795475006103515625 +0.688367390632629305713408029987 -0.0284738998860120766376535783593 0.123853103816509241275056751874 +0.688367390632629305713408029987 0.0284738998860120766376535783593 0.123853103816509241275056751874 +0.68868076801300048828125 -0.225941240787506103515625 -0.192793495953083038330078125 +0.68868076801300048828125 0.225941240787506103515625 -0.192793495953083038330078125 +0.688717690110206559594985264994 -0.423091042041778553350894753748 -0.499161353707313515393195757497 +0.688717690110206559594985264994 0.423091042041778553350894753748 -0.499161353707313515393195757497 +0.689091205596923828125 0 0.406389617919921897204460492503 +0.6892695128917694091796875 -0.546728396415710471423210492503 0.189723600447177898065120871252 +0.6892695128917694091796875 0.546728396415710471423210492503 0.189723600447177898065120871252 +0.689324808120727605675881477509 -0.38097679615020751953125 -0.140314400196075439453125 +0.689324808120727605675881477509 0.38097679615020751953125 -0.140314400196075439453125 +0.689402711391449041222756477509 -0.455662786960601806640625 -0.356505301594734202996761496252 +0.689402711391449041222756477509 0.455662786960601806640625 -0.356505301594734202996761496252 +0.689443206787109463817841970013 -0.340257596969604503289730246252 0.221116805076599143298210492503 +0.689443206787109463817841970013 0.340257596969604503289730246252 0.221116805076599143298210492503 +0.689665496349334716796875 -0.281275503337383270263671875 -0.0880124978721141815185546875 +0.689665496349334716796875 0.281275503337383270263671875 -0.0880124978721141815185546875 +0.6896798908710479736328125 -0.178546500205993663445980246252 0.549965715408325173108039507497 +0.6896798908710479736328125 0.178546500205993663445980246252 0.549965715408325173108039507497 +0.6897640228271484375 0 0.724034011363983154296875 +0.689833927154540949011618522491 -0.596895429491996698523337272491 0.265226709842681873663394753748 +0.689833927154540949011618522491 0.596895429491996698523337272491 0.265226709842681873663394753748 +0.68984699249267578125 -0.264149010181427001953125 0.674045026302337646484375 +0.68984699249267578125 0.264149010181427001953125 0.674045026302337646484375 +0.6899609863758087158203125 -0.222001500427722930908203125 0.192793495953083038330078125 +0.6899609863758087158203125 0.222001500427722930908203125 0.192793495953083038330078125 +0.69020998477935791015625 -0.55245101451873779296875 0.4673419892787933349609375 +0.69020998477935791015625 0.55245101451873779296875 0.4673419892787933349609375 +0.690219873189926169665397992503 -0.0594377987086772904823384067186 0.574511414766311623303352007497 +0.690219873189926169665397992503 0.0594377987086772904823384067186 0.574511414766311623303352007497 +0.690700513124465897973891514994 -0.0576254010200500446647886576557 -0.0980412960052490234375 +0.690700513124465897973891514994 0.0576254010200500446647886576557 -0.0980412960052490234375 +0.69081223011016845703125 -0.25101600587368011474609375 0.1492304988205432891845703125 +0.69081223011016845703125 0.25101600587368011474609375 0.1492304988205432891845703125 +0.690823835134506181177016514994 -0.42072080075740814208984375 0.498254117369651750024672764994 +0.690823835134506181177016514994 0.42072080075740814208984375 0.498254117369651750024672764994 +0.690952089428901627954360264994 -0.0391875015571713433693012973436 -0.65080702304840087890625 +0.690952089428901627954360264994 0.0391875015571713433693012973436 -0.65080702304840087890625 +0.690996468067169189453125 -0.0350608009845018372963032504686 -0.493755638599395751953125 +0.690996468067169189453125 0.0350608009845018372963032504686 -0.493755638599395751953125 +0.69109873473644256591796875 -0.11055900156497955322265625 0.26955449581146240234375 +0.69109873473644256591796875 0.11055900156497955322265625 0.26955449581146240234375 +0.69133351743221282958984375 -0.25440301001071929931640625 -0.1408432535827159881591796875 +0.69133351743221282958984375 0.25440301001071929931640625 -0.1408432535827159881591796875 +0.691382312774658114307158029987 -0.109502401947975155915848688437 0 +0.691382312774658114307158029987 0.109502401947975155915848688437 0 +0.69143025577068328857421875 -0.1438327543437480926513671875 -0.2524605095386505126953125 +0.69143025577068328857421875 0.1438327543437480926513671875 -0.2524605095386505126953125 +0.692247664928436257092414507497 -0.459550786018371570929019753748 0.179183400422334659918277566248 +0.692247664928436257092414507497 0.459550786018371570929019753748 0.179183400422334659918277566248 +0.692360019683837979442841970013 -0.189781594276428239309595369377 0.353015995025634798931690738755 +0.692360019683837979442841970013 0.189781594276428239309595369377 0.353015995025634798931690738755 +0.692628812789917058800881477509 -0.317876005172729514391960492503 -0.243352794647216819079460492503 +0.692628812789917058800881477509 0.317876005172729514391960492503 -0.243352794647216819079460492503 +0.692832696437835626745993522491 -0.0567987017333507482330645643742 0.0822010010480880709549111884371 +0.692832696437835626745993522491 0.0567987017333507482330645643742 0.0822010010480880709549111884371 +0.69291074573993682861328125 -0.28700999915599822998046875 0 +0.69291074573993682861328125 0.28700999915599822998046875 0 +0.693053203821182184363181022491 0 -0.0983751967549323924622228787484 +0.693145787715911843029914507497 -0.28509481251239776611328125 -0.498266994953155517578125 +0.693145787715911843029914507497 0.28509481251239776611328125 -0.498266994953155517578125 +0.693193477392196721886818977509 -0.0740168988704681396484375 -0.569213998317718572472756477509 +0.693193477392196721886818977509 0.0740168988704681396484375 -0.569213998317718572472756477509 +0.693220514059066705847556022491 -0.083827801048755645751953125 -0.0491749979555606842041015625 +0.693220514059066705847556022491 0.083827801048755645751953125 -0.0491749979555606842041015625 +0.693447208404541104442841970013 -0.104960000514984136410490123126 0.384856009483337424548210492503 +0.693447208404541104442841970013 0.104960000514984136410490123126 0.384856009483337424548210492503 +0.693597972393035888671875 -0.4223580062389373779296875 -0.5835540294647216796875 +0.693597972393035888671875 0.4223580062389373779296875 -0.5835540294647216796875 +0.693797296285629250256477007497 -0.0833538979291915810287960653113 0.0412005998194217640251402201557 +0.693797296285629250256477007497 0.0833538979291915810287960653113 0.0412005998194217640251402201557 +0.69425238668918609619140625 -0.645027199387550376208366742503 0.06673749722540378570556640625 +0.69425238668918609619140625 0.645027199387550376208366742503 0.06673749722540378570556640625 +0.694498479366302490234375 -0.549830693006515547338608485006 -0.15924060344696044921875 +0.694498479366302490234375 0.549830693006515547338608485006 -0.15924060344696044921875 +0.695124512910842873303352007497 0 0.0824732974171638461013955634371 +0.695264151692390419690070757497 -0.644966384768486000744758257497 -0.0559160517528653130958637973436 +0.695264151692390419690070757497 0.644966384768486000744758257497 -0.0559160517528653130958637973436 +0.695303976535797119140625 -0.132791996002197265625 0.7063419818878173828125 +0.695303976535797119140625 0.132791996002197265625 0.7063419818878173828125 +0.695531195402145363537727007497 -0.232272695004940021856754128748 -0.429867082834243741107371761245 +0.695531195402145363537727007497 0.232272695004940021856754128748 -0.429867082834243741107371761245 +0.695549690723419211657585492503 0 -0.571148997545242287365852007497 +0.695702016353607177734375 -0.704469978809356689453125 0.14043100178241729736328125 +0.695702016353607177734375 0.704469978809356689453125 0.14043100178241729736328125 +0.6959311962127685546875 -0.143674397468566888980134876874 -0.367475199699401899877670985006 +0.6959311962127685546875 0.143674397468566888980134876874 -0.367475199699401899877670985006 +0.696084547042846613074118522491 -0.324458611011505138055355246252 -0.364270037412643410412727007497 +0.696084547042846613074118522491 0.324458611011505138055355246252 -0.364270037412643410412727007497 +0.696371984481811590050881477509 -0.347106409072875987664730246252 -0.185964798927307134457365123126 +0.696371984481811590050881477509 0.347106409072875987664730246252 -0.185964798927307134457365123126 +0.696561396121978759765625 -0.463339233398437466693309261245 -0.150393903255462646484375 +0.696561396121978759765625 0.463339233398437466693309261245 -0.150393903255462646484375 +0.696818971633911155016960492503 -0.347040545940399181024105246252 0.341329401731491066662727007497 +0.696818971633911155016960492503 0.347040545940399181024105246252 0.341329401731491066662727007497 +0.69685900211334228515625 -0.50629198551177978515625 -0.5079920291900634765625 +0.69685900211334228515625 0.50629198551177978515625 -0.5079920291900634765625 +0.69719302654266357421875 -0.656279981136322021484375 -0.2884779870510101318359375 +0.69719302654266357421875 0.656279981136322021484375 -0.2884779870510101318359375 +0.6972591876983642578125 -0.388163995742797862664730246252 0.0561999976634979248046875 +0.6972591876983642578125 0.388163995742797862664730246252 0.0561999976634979248046875 +0.697473621368408291942841970013 -0.388989591598510764391960492503 -0.0470872014760971083213725307814 +0.697473621368408291942841970013 0.388989591598510764391960492503 -0.0470872014760971083213725307814 +0.697671091556549050061164507497 -0.0289093002676963778396768134371 -0.04918409883975982666015625 +0.697671091556549050061164507497 0.0289093002676963778396768134371 -0.04918409883975982666015625 +0.697841906547546297900908029987 -0.0549206025898456504097389085928 0 +0.697841906547546297900908029987 0.0549206025898456504097389085928 0 +0.697881388664245538855368522491 -0.555478295683860756604133257497 0.326965297758579243048160378748 +0.697881388664245538855368522491 0.555478295683860756604133257497 0.326965297758579243048160378748 +0.698128205537796087121193977509 -0.384418809413909934313835492503 0.418138200044631980212272992503 +0.698128205537796087121193977509 0.384418809413909934313835492503 0.418138200044631980212272992503 +0.698205900192260697778579014994 -0.0284724995493888834163787038278 0.0412062011659145299713458143742 +0.698205900192260697778579014994 0.0284724995493888834163787038278 0.0412062011659145299713458143742 +0.698658326268196128161491742503 -0.421973158419132243768245871252 0.237308108806610101870759876874 +0.698658326268196128161491742503 0.421973158419132243768245871252 0.237308108806610101870759876874 +0.698659479618072509765625 -0.09204599820077419281005859375 -0.2567144930362701416015625 +0.698659479618072509765625 0.09204599820077419281005859375 -0.2567144930362701416015625 +0.698710024356842041015625 -0.2615459859371185302734375 -0.66588199138641357421875 +0.698710024356842041015625 0.2615459859371185302734375 -0.66588199138641357421875 +0.698966985940933205334602007497 -0.507826817035675115441506477509 0.252106189727783203125 +0.698966985940933205334602007497 0.507826817035675115441506477509 0.252106189727783203125 +0.6991260051727294921875 -0.705235004425048828125 -0.117758996784687042236328125 +0.6991260051727294921875 0.705235004425048828125 -0.117758996784687042236328125 +0.69922530651092529296875 -0.220906491577625263555972878748 0.429865410923957802502570757497 +0.69922530651092529296875 0.220906491577625263555972878748 0.429865410923957802502570757497 +0.699528706073760941919204014994 -0.60284812748432159423828125 -0.223011554032564146554662443123 +0.699528706073760941919204014994 0.60284812748432159423828125 -0.223011554032564146554662443123 +0.699738669395446710730368522491 -0.275428758561611142230418636245 -0.580521234869956992419304242503 +0.699738669395446710730368522491 0.275428758561611142230418636245 -0.580521234869956992419304242503 +0.699999999999999955591079014994 0 0 +0.70049326121807098388671875 -0.140572495758533477783203125 0.228141747415065765380859375 +0.70049326121807098388671875 0.140572495758533477783203125 0.228141747415065765380859375 +0.700543802976608342980568977509 -0.363014110922813437731804242503 -0.432965692877769481317073996252 +0.700543802976608342980568977509 0.363014110922813437731804242503 -0.432965692877769481317073996252 +0.700553005933761574475227007497 0 0.481378790736198436395198996252 +0.700768804550170987255341970013 -0.231940007209777837582365123126 -0.308426403999328635485710492503 +0.700768804550170987255341970013 0.231940007209777837582365123126 -0.308426403999328635485710492503 +0.701063907146453835217414507497 -0.250876951217651356085269753748 0.589974680542945884020866742503 +0.701063907146453835217414507497 0.250876951217651356085269753748 0.589974680542945884020866742503 +0.70126532018184661865234375 0 0.640879517793655373303352007497 +0.70134298503398895263671875 -0.174339003860950469970703125 -0.20055900514125823974609375 +0.70134298503398895263671875 0.174339003860950469970703125 -0.20055900514125823974609375 +0.701765936613082841333266514994 -0.46142356097698211669921875 0.443974889814853668212890625 +0.701765936613082841333266514994 0.46142356097698211669921875 0.443974889814853668212890625 +0.70184026658535003662109375 -0.060813747346401214599609375 0.25733698904514312744140625 +0.70184026658535003662109375 0.060813747346401214599609375 0.25733698904514312744140625 +0.701878052949905351098891514994 -0.509941962361335709985610264994 0.387073697149753537249949886245 +0.701878052949905351098891514994 0.509941962361335709985610264994 0.387073697149753537249949886245 +0.701909583806991532739516514994 -0.381017588078975677490234375 0.290943092107772804943977007497 +0.701909583806991532739516514994 0.381017588078975677490234375 0.290943092107772804943977007497 +0.702892017364502019738381477509 -0.0883063971996307373046875 -0.371678400039672895971420985006 +0.702892017364502019738381477509 0.0883063971996307373046875 -0.371678400039672895971420985006 +0.70296223461627960205078125 -0.256073243916034698486328125 0.05263274721801280975341796875 +0.70296223461627960205078125 0.256073243916034698486328125 0.05263274721801280975341796875 +0.7031617462635040283203125 -0.257133007049560546875 -0.0441120006144046783447265625 +0.7031617462635040283203125 0.257133007049560546875 -0.0441120006144046783447265625 +0.7032663822174072265625 -0.224253606796264659539730246252 0.308425593376159712377670985006 +0.7032663822174072265625 0.224253606796264659539730246252 0.308425593376159712377670985006 +0.70350001752376556396484375 -0.030937501229345798492431640625 -0.25812976062297821044921875 +0.70350001752376556396484375 0.030937501229345798492431640625 -0.25812976062297821044921875 +0.7038467824459075927734375 -0.557315987348556585168068977509 0.06323669850826263427734375 +0.7038467824459075927734375 0.557315987348556585168068977509 0.06323669850826263427734375 +0.704065489768981978002670985006 -0.236393111944198625051782869377 0.508340674638748213354233485006 +0.704065489768981978002670985006 0.236393111944198625051782869377 0.508340674638748213354233485006 +0.70415849983692169189453125 0 0.258186757564544677734375 +0.704733306169509909899772992503 -0.557265615463256813733039507497 -0.0529794014990329770187216240629 +0.704733306169509909899772992503 0.557265615463256813733039507497 -0.0529794014990329770187216240629 +0.704745912551879905016960492503 0 0.559762215614318825451789507497 +0.704794514179229780737045985006 -0.466171199083328269274772992503 0.309756597876548800396534488755 +0.704794514179229780737045985006 0.466171199083328269274772992503 0.309756597876548800396534488755 +0.706011691689491294177116742503 -0.469553622603416431768863503748 0.059723548591136932373046875 +0.706011691689491294177116742503 0.469553622603416431768863503748 0.059723548591136932373046875 +0.706144279241561867443977007497 -0.111985804885625830906725752811 0.459694468975067105365184261245 +0.706144279241561867443977007497 0.111985804885625830906725752811 0.459694468975067105365184261245 +0.706184005737304776317841970013 -0.0526055991649627685546875 0.372204804420471213610710492503 +0.706184005737304776317841970013 0.0526055991649627685546875 0.372204804420471213610710492503 +0.7061913013458251953125 -0.421584302186965964587272992503 0.365459400415420521124332253748 +0.7061913013458251953125 0.421584302186965964587272992503 0.365459400415420521124332253748 +0.706225898861885026391860264994 -0.470363637804985024182258257497 -0.0500361014157533617874307196871 +0.706225898861885026391860264994 0.470363637804985024182258257497 -0.0500361014157533617874307196871 +0.706406110525131247790397992503 -0.428574240207672096936164507497 -0.199536653608083730526701060626 +0.706406110525131247790397992503 0.428574240207672096936164507497 -0.199536653608083730526701060626 +0.7064234912395477294921875 -0.202967248857021331787109375 -0.1492304988205432891845703125 +0.7064234912395477294921875 0.202967248857021331787109375 -0.1492304988205432891845703125 +0.706430971622467041015625 -0.3259269893169403076171875 0.62827301025390625 +0.706430971622467041015625 0.3259269893169403076171875 0.62827301025390625 +0.706491184234619207238381477509 -0.0329984009265899685958700615629 -0.373872804641723677221420985006 +0.706491184234619207238381477509 0.0329984009265899685958700615629 -0.373872804641723677221420985006 +0.70651124417781829833984375 -0.171672753989696502685546875 0.1840387545526027679443359375 +0.70651124417781829833984375 0.171672753989696502685546875 0.1840387545526027679443359375 +0.70703776180744171142578125 -0.230741254985332489013671875 -0.0967282466590404510498046875 +0.70703776180744171142578125 0.230741254985332489013671875 -0.0967282466590404510498046875 +0.707108020782470703125 -0.70710599422454833984375 0 +0.707108020782470703125 0.70710599422454833984375 0 +0.70731051266193389892578125 -0.359004305303096737933543636245 -0.305496792495250690802066628748 +0.70731051266193389892578125 0.359004305303096737933543636245 -0.305496792495250690802066628748 +0.707527253031730585242087272491 -0.175184153020381927490234375 -0.437281650304794322625667746252 +0.707527253031730585242087272491 0.175184153020381927490234375 -0.437281650304794322625667746252 +0.7076332569122314453125 -0.228906758129596710205078125 0.0967282466590404510498046875 +0.7076332569122314453125 0.228906758129596710205078125 0.0967282466590404510498046875 +0.707635778188705488744858485006 -0.514123195409774802477897992503 -0.211963498592376703433259876874 +0.707635778188705488744858485006 0.514123195409774802477897992503 -0.211963498592376703433259876874 +0.707679677009582452917868522491 -0.1259405501186847686767578125 0.62115083634853363037109375 +0.707679677009582452917868522491 0.1259405501186847686767578125 0.62115083634853363037109375 +0.707981586456298828125 -0.355163192749023470806690738755 0.112344801425933837890625 +0.707981586456298828125 0.355163192749023470806690738755 0.112344801425933837890625 +0.708549284934997580798210492503 -0.222588895261287694760099498126 -0.508341586589813210217414507497 +0.708549284934997580798210492503 0.222588895261287694760099498126 -0.508341586589813210217414507497 +0.70883698761463165283203125 -0.200533501803874969482421875 0.1408432535827159881591796875 +0.70883698761463165283203125 0.200533501803874969482421875 0.1408432535827159881591796875 +0.70940697193145751953125 -0.6156389713287353515625 -0.343118011951446533203125 +0.70940697193145751953125 0.6156389713287353515625 -0.343118011951446533203125 +0.709410381317138738488381477509 -0.35757839679718017578125 -0.0942063987255096491058026231258 +0.709410381317138738488381477509 0.35757839679718017578125 -0.0942063987255096491058026231258 +0.709513616561889715050881477509 -0.138023996353149408511384876874 0.34284079074859619140625 +0.709513616561889715050881477509 0.138023996353149408511384876874 0.34284079074859619140625 +0.71040974557399749755859375 -0.12184350192546844482421875 -0.207297004759311676025390625 +0.71040974557399749755859375 0.12184350192546844482421875 -0.207297004759311676025390625 +0.710691976547241255346420985006 -0.257710409164428722039730246252 0.261728811264038074835269753748 +0.710691976547241255346420985006 0.257710409164428722039730246252 0.261728811264038074835269753748 +0.711343193054199240954460492503 -0.264481592178344715460269753748 -0.253062391281127951891960492503 +0.711343193054199240954460492503 0.264481592178344715460269753748 -0.253062391281127951891960492503 +0.711595791578292891088608485006 -0.118489493429660794343583063437 0.538137924671173162316506477509 +0.711595791578292891088608485006 0.118489493429660794343583063437 0.538137924671173162316506477509 +0.712061104178428605493422764994 -0.362630212306976285052684261245 -0.513779002428054742956931022491 +0.712061104178428605493422764994 0.362630212306976285052684261245 -0.513779002428054742956931022491 +0.712177014350891091076789507497 -0.565147423744201682360710492503 -0.275521849095821391717464621252 +0.712177014350891091076789507497 0.565147423744201682360710492503 -0.275521849095821391717464621252 +0.7123447358608245849609375 -0.090856499969959259033203125 0.2163569927215576171875 +0.7123447358608245849609375 0.090856499969959259033203125 0.2163569927215576171875 +0.712387883663177512438835492503 -0.61424718797206878662109375 0.13305604457855224609375 +0.712387883663177512438835492503 0.61424718797206878662109375 0.13305604457855224609375 +0.712722003459930419921875 -0.6696109771728515625 0.2089219987392425537109375 +0.712722003459930419921875 0.6696109771728515625 0.2089219987392425537109375 +0.712806415557861394738381477509 -0.363189601898193381579460492503 0 +0.712806415557861394738381477509 0.363189601898193381579460492503 0 +0.713082858920097373278679242503 -0.258229152858257260394481136245 0.383837062120437610968082253748 +0.713082858920097373278679242503 0.258229152858257260394481136245 0.383837062120437610968082253748 +0.71329347789287567138671875 -0.2317597568035125732421875 0 +0.71329347789287567138671875 0.2317597568035125732421875 0 +0.713360011577606201171875 -0.1917760074138641357421875 -0.674046993255615234375 +0.713360011577606201171875 0.1917760074138641357421875 -0.674046993255615234375 +0.71350002288818359375 -0.17609119415283203125 -0.316085600852966330798210492503 +0.71350002288818359375 0.17609119415283203125 -0.316085600852966330798210492503 +0.713663417100906305456931022491 -0.269257047772407498431590511245 -0.375080356001853909564403011245 +0.713663417100906305456931022491 0.269257047772407498431590511245 -0.375080356001853909564403011245 +0.713665950298309259558493522491 -0.391221839189529407843082253748 -0.245206288993358612060546875 +0.713665950298309259558493522491 0.391221839189529407843082253748 -0.245206288993358612060546875 +0.714014387130737393505341970013 -0.319812011718750011102230246252 0.167041599750518798828125 +0.714014387130737393505341970013 0.319812011718750011102230246252 0.167041599750518798828125 +0.714531993865966885692841970013 -0.289271211624145541119190738755 0.213929605484008800164730246252 +0.714531993865966885692841970013 0.289271211624145541119190738755 0.213929605484008800164730246252 +0.7146346271038055419921875 -0.209107344597578043154939564374 -0.589975643157958917761618522491 +0.7146346271038055419921875 0.209107344597578043154939564374 -0.589975643157958917761618522491 +0.7147547900676727294921875 -0.400823092460632357525440738755 -0.37211130559444427490234375 +0.7147547900676727294921875 0.400823092460632357525440738755 -0.37211130559444427490234375 +0.715046966075897127979033029987 -0.308617940545082070080695757497 0.5440241396427154541015625 +0.715046966075897127979033029987 0.308617940545082070080695757497 0.5440241396427154541015625 +0.715102189779281638415397992503 -0.290270698070526134149105246252 0.4630031883716583251953125 +0.715102189779281638415397992503 0.290270698070526134149105246252 0.4630031883716583251953125 +0.715156194567680314477797764994 -0.442368455231189727783203125 -0.441996999084949493408203125 +0.715156194567680314477797764994 0.442368455231189727783203125 -0.441996999084949493408203125 +0.715388977527618319385283029987 -0.615039476752281211169304242503 -0.111559449881315220221011941248 +0.715388977527618319385283029987 0.615039476752281211169304242503 -0.111559449881315220221011941248 +0.715539979934692427221420985006 0 0.35777199268341064453125 +0.716137742996215798108039507497 -0.117257502675056454743973688437 -0.442602631449699412957698996252 +0.716137742996215798108039507497 0.117257502675056454743973688437 -0.442602631449699412957698996252 +0.717042982578277587890625 -0.3582229912281036376953125 -0.5979340076446533203125 +0.717042982578277587890625 0.3582229912281036376953125 -0.5979340076446533203125 +0.71711777150630950927734375 -0.03048150055110454559326171875 0.21751575171947479248046875 +0.71711777150630950927734375 0.03048150055110454559326171875 0.21751575171947479248046875 +0.717320823669433615954460492503 -0.294810390472412142681690738755 -0.196308803558349620477230246252 +0.717320823669433615954460492503 0.294810390472412142681690738755 -0.196308803558349620477230246252 +0.71757902204990386962890625 -0.06112500093877315521240234375 -0.20938874781131744384765625 +0.71757902204990386962890625 0.06112500093877315521240234375 -0.20938874781131744384765625 +0.717694222927093505859375 -0.476216983795166026727230246252 -0.261020699143409751208366742503 +0.717694222927093505859375 0.476216983795166026727230246252 -0.261020699143409751208366742503 +0.71772480010986328125 -0.324343204498291015625 -0.140258395671844476870759876874 +0.71772480010986328125 0.324343204498291015625 -0.140258395671844476870759876874 +0.71778000891208648681640625 -0.15088950097560882568359375 -0.1566014997661113739013671875 +0.71778000891208648681640625 0.15088950097560882568359375 -0.1566014997661113739013671875 +0.718226015567779541015625 -0.572050988674163818359375 -0.3961170017719268798828125 +0.718226015567779541015625 0.572050988674163818359375 -0.3961170017719268798828125 +0.7185800075531005859375 -0.066565997898578643798828125 0.692251026630401611328125 +0.7185800075531005859375 0.066565997898578643798828125 0.692251026630401611328125 +0.718949973583221435546875 -0.385904014110565185546875 0.578090012073516845703125 +0.718949973583221435546875 0.385904014110565185546875 0.578090012073516845703125 +0.719003975391387939453125 -0.19909299910068511962890625 0.665880024433135986328125 +0.719003975391387939453125 0.19909299910068511962890625 0.665880024433135986328125 +0.719183981418609619140625 -0.672317981719970703125 -0.17539300024509429931640625 +0.719183981418609619140625 0.672317981719970703125 -0.17539300024509429931640625 +0.7192267477512359619140625 -0.206017501652240753173828125 -0.05263274721801280975341796875 +0.7192267477512359619140625 0.206017501652240753173828125 -0.05263274721801280975341796875 +0.71943975985050201416015625 -0.120465002954006195068359375 0.1743412502110004425048828125 +0.71943975985050201416015625 0.120465002954006195068359375 0.1743412502110004425048828125 +0.719660153985023476330695757497 -0.4363670647144317626953125 0.11905014514923095703125 +0.719660153985023476330695757497 0.4363670647144317626953125 0.11905014514923095703125 +0.719729006290435791015625 -0.166611901670694340094058816248 0.420393861830234527587890625 +0.719729006290435791015625 0.166611901670694340094058816248 0.420393861830234527587890625 +0.719892883300781272204460492503 -0.161633697152137767449886496252 -0.515392202138900801244858485006 +0.719892883300781272204460492503 0.161633697152137767449886496252 -0.515392202138900801244858485006 +0.71997450292110443115234375 0 -0.210087753832340240478515625 +0.7200104892253875732421875 -0.205277256667613983154296875 0.0441120006144046783447265625 +0.7200104892253875732421875 0.205277256667613983154296875 0.0441120006144046783447265625 +0.720217806100845403527443977509 -0.305205291509628329205128238755 -0.445124709606170676501335492503 +0.720217806100845403527443977509 0.305205291509628329205128238755 -0.445124709606170676501335492503 +0.72072525322437286376953125 -0.1790054999291896820068359375 -0.1049407459795475006103515625 +0.72072525322437286376953125 0.1790054999291896820068359375 -0.1049407459795475006103515625 +0.7208900749683380126953125 -0.523755007982254050524772992503 0.126482395827770238705411998126 +0.7208900749683380126953125 0.523755007982254050524772992503 0.126482395827770238705411998126 +0.721044799685478188244758257497 -0.0559444487094879136512837192186 0.446614658832550026623664507497 +0.721044799685478188244758257497 0.0559444487094879136512837192186 0.446614658832550026623664507497 +0.721164670586585954126235264994 -0.438700291514396656378238503748 -0.0998163498938083593170489393742 +0.721164670586585954126235264994 0.438700291514396656378238503748 -0.0998163498938083593170489393742 +0.721320208907127335962172764994 -0.0587690018117427784294370951557 -0.445806315541267372815070757497 +0.721320208907127335962172764994 0.0587690018117427784294370951557 -0.445806315541267372815070757497 +0.7215915024280548095703125 -0.524262276291847184594985264994 -0.3270393908023834228515625 +0.7215915024280548095703125 0.524262276291847184594985264994 -0.3270393908023834228515625 +0.722124004364013694079460492503 -0.170416796207428000720085492503 0.299155998229980457647769753748 +0.722124004364013694079460492503 0.170416796207428000720085492503 0.299155998229980457647769753748 +0.722386622428893954150908029987 -0.616974672675132729260383257497 0 +0.722386622428893954150908029987 0.616974672675132729260383257497 0 +0.7225639820098876953125 -0.121237599849700936061047684689 -0.321251201629638716283920985006 +0.7225639820098876953125 0.121237599849700936061047684689 -0.321251201629638716283920985006 +0.722743988037109375 -0.122726999223232269287109375 -0.680131971836090087890625 +0.722743988037109375 0.122726999223232269287109375 -0.680131971836090087890625 +0.723045605421066328588608485006 -0.525320076942443869860710492503 -0.106037096679210671168469559689 +0.723045605421066328588608485006 0.525320076942443869860710492503 -0.106037096679210671168469559689 +0.72305078804492950439453125 0 -0.446875578165054299084602007497 +0.72309149801731109619140625 -0.14949600398540496826171875 0.13149149715900421142578125 +0.72309149801731109619140625 0.14949600398540496826171875 0.13149149715900421142578125 +0.72328197956085205078125 -0.1778122521936893463134765625 0.0880124978721141815185546875 +0.72328197956085205078125 0.1778122521936893463134765625 0.0880124978721141815185546875 +0.723285412788391091076789507497 -0.2942283451557159423828125 0.335840089619159676281867632497 +0.723285412788391091076789507497 0.2942283451557159423828125 0.335840089619159676281867632497 +0.723420810699462957238381477509 -0.0851944029331207358657351846887 0.330763196945190462994190738755 +0.723420810699462957238381477509 0.0851944029331207358657351846887 0.330763196945190462994190738755 +0.723599970340728759765625 -0.52572000026702880859375 -0.4472149908542633056640625 +0.723599970340728759765625 0.52572000026702880859375 -0.4472149908542633056640625 +0.724257910251617453845085492503 -0.43599240481853485107421875 -0.3088062107563018798828125 +0.724257910251617453845085492503 0.43599240481853485107421875 -0.3088062107563018798828125 +0.724561226367950395044204014994 -0.364430443942546811175731136245 0.494673529267311062884715511245 +0.724561226367950395044204014994 0.364430443942546811175731136245 0.494673529267311062884715511245 +0.724745699763298056872429242503 -0.444121587276458729132144753748 0 +0.724745699763298056872429242503 0.444121587276458729132144753748 0 +0.724935513734817460473891514994 -0.14396870136260986328125 -0.596860322356223993445212272491 +0.724935513734817460473891514994 0.14396870136260986328125 -0.596860322356223993445212272491 +0.724965989589691162109375 -0.4453589916229248046875 -0.525433003902435302734375 +0.724965989589691162109375 0.4453589916229248046875 -0.525433003902435302734375 +0.725954389572143643505341970013 -0.331415200233459494860710492503 0.0561583995819091852386151231258 +0.725954389572143643505341970013 0.331415200233459494860710492503 0.0561583995819091852386151231258 +0.726116800308227561266960492503 -0.332474398612976118627670985006 -0.0470623999834060696700888115629 +0.726116800308227561266960492503 0.332474398612976118627670985006 -0.0470623999834060696700888115629 +0.7261409759521484375 -0.628310978412628173828125 0.2791860103607177734375 +0.7261409759521484375 0.628310978412628173828125 0.2791860103607177734375 +0.7264416217803955078125 -0.209237599372863791735710492503 -0.261728811264038074835269753748 +0.7264416217803955078125 0.209237599372863791735710492503 -0.261728811264038074835269753748 +0.7265332639217376708984375 -0.06042900122702121734619140625 0.17606024444103240966796875 +0.7265332639217376708984375 0.06042900122702121734619140625 0.17606024444103240966796875 +0.727154618501663185803352007497 -0.304490403831005063128856136245 -0.317854945361614238397152121252 +0.727154618501663185803352007497 0.304490403831005063128856136245 -0.317854945361614238397152121252 +0.72718298435211181640625 -0.442864000797271728515625 0.524478018283843994140625 +0.72718298435211181640625 0.442864000797271728515625 0.524478018283843994140625 +0.727317988872528076171875 -0.0412500016391277313232421875 -0.685060024261474609375 +0.727317988872528076171875 0.0412500016391277313232421875 -0.685060024261474609375 +0.72756226360797882080078125 -0.577102196216583207544204014994 0.200263800472021080700812944997 +0.72756226360797882080078125 0.577102196216583207544204014994 0.200263800472021080700812944997 +0.727624779939651467053352007497 -0.0993446968495845794677734375 -0.520281922817230291222756477509 +0.727624779939651467053352007497 0.0993446968495845794677734375 -0.520281922817230291222756477509 +0.72764401137828826904296875 -0.09209925122559070587158203125 -0.156691499054431915283203125 +0.72764401137828826904296875 0.09209925122559070587158203125 -0.156691499054431915283203125 +0.727702862024307228772102007497 -0.4809773862361907958984375 -0.376311151683330513684211382497 +0.727702862024307228772102007497 0.4809773862361907958984375 -0.376311151683330513684211382497 +0.72799544036388397216796875 -0.188465750217437721936164507497 0.580519366264343195105368522491 +0.72799544036388397216796875 0.188465750217437721936164507497 0.580519366264343195105368522491 +0.728108787536621115954460492503 -0.0657927989959716796875 -0.32485198974609375 +0.728108787536621115954460492503 0.0657927989959716796875 -0.32485198974609375 +0.728116214275360107421875 -0.529004681110382124487045985006 0 +0.728116214275360107421875 0.529004681110382124487045985006 0 +0.728343880176544167248664507497 -0.176769898831844324282869251874 0.498265224695205677374332253748 +0.728343880176544167248664507497 0.176769898831844324282869251874 0.498265224695205677374332253748 +0.7284050881862640380859375 -0.329422500729560863153011496252 0.413408687710762057232471988755 +0.7284050881862640380859375 0.329422500729560863153011496252 0.413408687710762057232471988755 +0.728452777862548805920539507497 -0.0593891970813274425178285298443 0.525194978713989235608039507497 +0.728452777862548805920539507497 0.0593891970813274425178285298443 0.525194978713989235608039507497 +0.728520569205284074243422764994 -0.400276905298233010022102007497 0.1775845475494861602783203125 +0.728520569205284074243422764994 0.400276905298233010022102007497 0.1775845475494861602783203125 +0.728565421700477555688735264994 -0.0627398986369371441940145928129 0.606428715586662225867087272491 +0.728565421700477555688735264994 0.0627398986369371441940145928129 0.606428715586662225867087272491 +0.728680363297462441174445757497 -0.210223694145679457223607755623 -0.383837898075580608026058371252 +0.728680363297462441174445757497 0.210223694145679457223607755623 -0.383837898075580608026058371252 +0.7289032638072967529296875 0 0.176634751260280609130859375 +0.7292782366275787353515625 -0.1750814951956272125244140625 0 +0.7292782366275787353515625 0.1750814951956272125244140625 0 +0.729779416322708152087272992503 -0.328717954456806182861328125 0.286121910810470558850227007497 +0.729779416322708152087272992503 0.328717954456806182861328125 0.286121910810470558850227007497 +0.730584001541137784130341970013 0 -0.325956797599792513775440738755 +0.730791985988616943359375 -0.678975999355316162109375 0.070249997079372406005859375 +0.730791985988616943359375 0.678975999355316162109375 0.070249997079372406005859375 +0.730948781967163174755341970013 -0.204141592979431157894865123126 0.253061604499816905633480246252 +0.730948781967163174755341970013 0.204141592979431157894865123126 0.253061604499816905633480246252 +0.73164331912994384765625 -0.0371232010424137129356303432814 -0.52280008792877197265625 +0.73164331912994384765625 0.0371232010424137129356303432814 -0.52280008792877197265625 +0.731653887033462457800681022491 -0.300933413207530975341796875 -0.5259484946727752685546875 +0.731653887033462457800681022491 0.300933413207530975341796875 -0.5259484946727752685546875 +0.731704226136207558361945757497 -0.07812894880771636962890625 -0.600836998224258400647102007497 +0.731704226136207558361945757497 0.07812894880771636962890625 -0.600836998224258400647102007497 +0.731857001781463623046875 -0.678911983966827392578125 -0.0588590018451213836669921875 +0.731857001781463623046875 0.678911983966827392578125 -0.0588590018451213836669921875 +0.7321594059467315673828125 0 0.431788969039916981085269753748 +0.732407608628273032458366742503 -0.404787845909595489501953125 -0.1490840502083301544189453125 +0.732407608628273032458366742503 0.404787845909595489501953125 -0.1490840502083301544189453125 +0.73249201476573944091796875 -0.030975750647485256195068359375 -0.158102251589298248291015625 +0.73249201476573944091796875 0.030975750647485256195068359375 -0.158102251589298248291015625 +0.732533407211303666528579014994 -0.361523696780204739642528011245 0.234936605393886555059879128748 +0.732533407211303666528579014994 0.361523696780204739642528011245 0.234936605393886555059879128748 +0.73268401622772216796875 -0.12075300514698028564453125 -0.1053232513368129730224609375 +0.73268401622772216796875 0.12075300514698028564453125 -0.1053232513368129730224609375 +0.73275826871395111083984375 -0.09089325182139873504638671875 0.131544001400470733642578125 +0.73275826871395111083984375 0.09089325182139873504638671875 0.131544001400470733642578125 +0.732968115806579612048210492503 -0.486583185195922862664730246252 0.189723600447177898065120871252 +0.732968115806579612048210492503 0.486583185195922862664730246252 0.189723600447177898065120871252 +0.7330817282199859619140625 -0.580376842617988608630241742503 -0.168087303638458251953125 +0.7330817282199859619140625 0.580376842617988608630241742503 -0.168087303638458251953125 +0.73322997987270355224609375 -0.1486679948866367340087890625 -0.05264849960803985595703125 +0.73322997987270355224609375 0.1486679948866367340087890625 -0.05264849960803985595703125 +0.733841609954834050988381477509 -0.0325120002031326280067524692186 0.316891193389892578125 +0.733841609954834050988381477509 0.0325120002031326280067524692186 0.316891193389892578125 +0.7339365184307098388671875 -0.14795400202274322509765625 0.044120999984443187713623046875 +0.7339365184307098388671875 0.14795400202274322509765625 0.044120999984443187713623046875 +0.734183979034423894738381477509 -0.297395205497741732525440738755 0.111936795711517336759932561563 +0.734183979034423894738381477509 0.297395205497741732525440738755 0.111936795711517336759932561563 +0.734191340208053544458266514994 0 -0.602879497408866815710837272491 +0.734592819213867209704460492503 -0.24100399017333984375 -0.20564639568328857421875 +0.734592819213867209704460492503 0.24100399017333984375 -0.20564639568328857421875 +0.734611988067626953125 -0.584713995456695556640625 0.3441739976406097412109375 +0.734611988067626953125 0.584713995456695556640625 0.3441739976406097412109375 +0.73509822785854339599609375 -0.1197082512080669403076171875 0.08831849880516529083251953125 +0.73509822785854339599609375 0.1197082512080669403076171875 0.08831849880516529083251953125 +0.735632520914077714380141514994 -0.201642943918704992123380748126 0.375079494714736949578792746252 +0.735632520914077714380141514994 0.201642943918704992123380748126 0.375079494714736949578792746252 +0.735643196105957075658920985006 -0.300027203559875499383480246252 -0.093879997730255126953125 +0.735643196105957075658920985006 0.300027203559875499383480246252 -0.093879997730255126953125 +0.735918113589286826403679242503 -0.337743255496025074346988503748 -0.258562344312667835577457253748 +0.735918113589286826403679242503 0.337743255496025074346988503748 -0.258562344312667835577457253748 +0.735958385467529341283920985006 -0.236801600456237798519865123126 0.20564639568328857421875 +0.735958385467529341283920985006 0.236801600456237798519865123126 0.20564639568328857421875 +0.7363460063934326171875 -0.634576976299285888671875 -0.23474900424480438232421875 +0.7363460063934326171875 0.634576976299285888671875 -0.23474900424480438232421875 +0.736444795131683371813835492503 -0.245935794711112987176448996252 -0.455153381824493441509815738755 +0.736444795131683371813835492503 0.245935794711112987176448996252 -0.455153381824493441509815738755 +0.736567020416259765625 -0.2899250090122222900390625 -0.611074984073638916015625 +0.736567020416259765625 0.2899250090122222900390625 -0.611074984073638916015625 +0.736787658929824784692641514994 -0.111520000547170636262528375937 0.408909510076045978888004128748 +0.736787658929824784692641514994 0.111520000547170636262528375937 0.408909510076045978888004128748 +0.736866378784179709704460492503 -0.267750406265258811266960492503 0.159179198741912858450220369377 +0.736866378784179709704460492503 0.267750406265258811266960492503 0.159179198741912858450220369377 +0.736913105845451332776008257497 -0.405775409936904862817641514994 0.441368100047111466821547764994 +0.736913105845451332776008257497 0.405775409936904862817641514994 0.441368100047111466821547764994 +0.737030696868896550988381477509 -0.343544411659240711554019753748 -0.385697686672210715563835492503 +0.737030696868896550988381477509 0.343544411659240711554019753748 -0.385697686672210715563835492503 +0.737171983718872159130341970013 -0.117929601669311531764172684689 0.287524795532226595806690738755 +0.737171983718872159130341970013 0.117929601669311531764172684689 0.287524795532226595806690738755 +0.737422418594360418175881477509 -0.271363210678100597039730246252 -0.150232803821563731805355246252 +0.737422418594360418175881477509 0.271363210678100597039730246252 -0.150232803821563731805355246252 +0.737525606155395530016960492503 -0.153421604633331321032585492503 -0.269291210174560535772769753748 +0.737525606155395530016960492503 0.153421604633331321032585492503 -0.269291210174560535772769753748 +0.73753559589385986328125 -0.490594482421875033306690738755 -0.15924060344696044921875 +0.73753559589385986328125 0.490594482421875033306690738755 -0.15924060344696044921875 +0.737536489963531494140625 -0.030507749877870082855224609375 0.1326997540891170501708984375 +0.737536489963531494140625 0.030507749877870082855224609375 0.1326997540891170501708984375 +0.737798485159873895788962272491 -0.536039417982101418225227007497 0.2661120891571044921875 +0.737798485159873895788962272491 0.536039417982101418225227007497 0.2661120891571044921875 +0.737808322906494118420539507497 -0.367454695701599109991519753748 0.361407601833343528063835492503 +0.737808322906494118420539507497 0.367454695701599109991519753748 0.361407601833343528063835492503 +0.7379620075225830078125 -0.26408100128173828125 0.621025979518890380859375 +0.7379620075225830078125 0.26408100128173828125 0.621025979518890380859375 +0.738174021244049072265625 0 0.67461001873016357421875 +0.73870098590850830078125 -0.485709011554718017578125 0.4673419892787933349609375 +0.73870098590850830078125 0.485709011554718017578125 0.4673419892787933349609375 +0.73881900310516357421875 -0.536781013011932373046875 0.4074459969997406005859375 +0.73881900310516357421875 0.536781013011932373046875 0.4074459969997406005859375 +0.739104795455932661596420985006 -0.3061439990997314453125 0 +0.739104795455932661596420985006 0.3061439990997314453125 0 +0.73942689597606658935546875 -0.152654047310352314337222878748 -0.390442399680614449231086382497 +0.73942689597606658935546875 0.152654047310352314337222878748 -0.390442399680614449231086382497 +0.739462903141975380627570757497 -0.383181561529636338647719639994 -0.457019342482089974133430132497 +0.739462903141975380627570757497 0.383181561529636338647719639994 -0.457019342482089974133430132497 +0.739755874872207619397102007497 -0.446795108914375294073551003748 0.251267409324646029400440738755 +0.739755874872207619397102007497 0.446795108914375294073551003748 0.251267409324646029400440738755 +0.739895233511924765856804242503 -0.368800559639930691790965511245 -0.197587598860263807809545255623 +0.739895233511924765856804242503 0.368800559639930691790965511245 -0.197587598860263807809545255623 +0.74003626406192779541015625 -0.0617415010929107666015625 -0.10504424571990966796875 +0.74003626406192779541015625 0.0617415010929107666015625 -0.10504424571990966796875 +0.7403562068939208984375 -0.233900991082191478387386496252 0.455151611566543601306022992503 +0.7403562068939208984375 0.233900991082191478387386496252 0.455151611566543601306022992503 +0.7407667636871337890625 -0.117324002087116241455078125 0 +0.7407667636871337890625 0.117324002087116241455078125 0 +0.74083788692951202392578125 -0.412424245476722683978465511245 0.05971249751746654510498046875 +0.74083788692951202392578125 0.412424245476722683978465511245 0.05971249751746654510498046875 +0.741065722703933671411391514994 -0.413301441073417652471988503748 -0.0500301515683531719536070170307 +0.741065722703933671411391514994 0.413301441073417652471988503748 -0.0500301515683531719536070170307 +0.741762006282806418688835492503 0 0.509695190191268965307358485006 +0.7423207461833953857421875 -0.06085575185716152191162109375 0.088072501122951507568359375 +0.7423207461833953857421875 0.06085575185716152191162109375 0.088072501122951507568359375 +0.74255700409412384033203125 0 -0.1054019965231418609619140625 +0.74273626506328582763671875 -0.0898155011236667633056640625 -0.05268749780952930450439453125 +0.74273626506328582763671875 0.0898155011236667633056640625 -0.05268749780952930450439453125 +0.74294938147068023681640625 -0.588277986645698525158820757497 0.066749848425388336181640625 +0.74294938147068023681640625 0.588277986645698525158820757497 0.066749848425388336181640625 +0.743180239200591952197783029987 -0.249526062607765192202791126874 0.536581823229789756091179242503 +0.743180239200591952197783029987 0.249526062607765192202791126874 0.536581823229789756091179242503 +0.743198382854461714330795985006 -0.40343038737773895263671875 0.308057391643524192126335492503 +0.743198382854461714330795985006 0.40343038737773895263671875 0.308057391643524192126335492503 +0.74335424602031707763671875 -0.089307747781276702880859375 0.04414349980652332305908203125 +0.74335424602031707763671875 0.089307747781276702880859375 0.04414349980652332305908203125 +0.743885156512260392602797764994 -0.588224816322326593542868522491 -0.0559227015823125783722247206242 +0.743885156512260392602797764994 0.588224816322326593542868522491 -0.0559227015823125783722247206242 +0.743898463249206498559829014994 0 0.590860116481780939245993522491 +0.743949764966964632861845529987 -0.492069599032401994165297764994 0.326965297758579243048160378748 +0.743949764966964632861845529987 0.492069599032401994165297764994 0.326965297758579243048160378748 +0.744566854834556535180922764994 -0.246436257660388929879857755623 -0.327703054249286640509097878748 +0.744566854834556535180922764994 0.246436257660388929879857755623 -0.327703054249286640509097878748 +0.74477626383304595947265625 0 0.0883642472326755523681640625 +0.744925975799560546875 -0.13256900012493133544921875 0.653842985630035400390625 +0.744925975799560546875 0.13256900012493133544921875 0.653842985630035400390625 +0.745236778259277365954460492503 -0.0981823980808258084396200615629 -0.273828792572021473272769753748 +0.745236778259277365954460492503 0.0981823980808258084396200615629 -0.273828792572021473272769753748 +0.74542415142059326171875 -0.445005652308464005884047764994 0.385762700438499417376903011245 +0.74542415142059326171875 0.445005652308464005884047764994 0.385762700438499417376903011245 +0.746822768449783347399772992503 -0.09382554702460765838623046875 -0.394908300042152382580695757497 +0.746822768449783347399772992503 0.09382554702460765838623046875 -0.394908300042152382580695757497 +0.746948876976966769092314279987 -0.542685595154762223657485264994 -0.223739248514175398385717130623 +0.746948876976966769092314279987 0.542685595154762223657485264994 -0.223739248514175398385717130623 +0.747192811965942449425881477509 -0.149943995475769059622095369377 0.243351197242736821957365123126 +0.747192811965942449425881477509 0.149943995475769059622095369377 0.243351197242736821957365123126 +0.74722053110599517822265625 -0.238269457221031183413728626874 0.327702192962169625012336382497 +0.74722053110599517822265625 0.238269457221031183413728626874 0.327702192962169625012336382497 +0.7475047409534454345703125 -0.0309742502868175506591796875 -0.052697248756885528564453125 +0.7475047409534454345703125 0.0309742502868175506591796875 -0.052697248756885528564453125 +0.747541791200637795178352007497 -0.497174423933029185906917746252 0.06323669850826263427734375 +0.747541791200637795178352007497 0.497174423933029185906917746252 0.06323669850826263427734375 +0.747682178020477317126335492503 -0.118573205173015602809094559689 0.486735320091247591900440738755 +0.747682178020477317126335492503 0.118573205173015602809094559689 0.486735320091247591900440738755 +0.747687757015228271484375 -0.05884350277483463287353515625 0 +0.747687757015228271484375 0.05884350277483463287353515625 0 +0.747768598794937178197983485006 -0.498032087087631247790397992503 -0.0529794014990329770187216240629 +0.747768598794937178197983485006 0.498032087087631247790397992503 -0.0529794014990329770187216240629 +0.747913134098052934106704014994 -0.234954944998025883062808816248 -0.536582785844802789831931022491 +0.747913134098052934106704014994 0.234954944998025883062808816248 -0.536582785844802789831931022491 +0.747959411144256569592414507497 -0.453784489631652854235710492503 -0.211274103820323938540681751874 +0.747959411144256569592414507497 0.453784489631652854235710492503 -0.211274103820323938540681751874 +0.74807775020599365234375 -0.0305062495172023773193359375 0.04414950124919414520263671875 +0.74807775020599365234375 0.0305062495172023773193359375 0.04414950124919414520263671875 +0.748099184036254971630341970013 -0.18596160411834716796875 -0.213929605484008800164730246252 +0.748099184036254971630341970013 0.18596160411834716796875 -0.213929605484008800164730246252 +0.748629617691040083471420985006 -0.0648679971694946372329226846887 0.274492788314819324835269753748 +0.748629617691040083471420985006 0.0648679971694946372329226846887 0.274492788314819324835269753748 +0.7489170134067535400390625 -0.380122205615043673443409488755 -0.323467192053794871942073996252 +0.7489170134067535400390625 0.380122205615043673443409488755 -0.323467192053794871942073996252 +0.749146503210067815636818977509 -0.18548910319805145263671875 -0.463004100322723377569644753748 +0.749146503210067815636818977509 0.18548910319805145263671875 -0.463004100322723377569644753748 +0.749538004398345947265625 -0.3817160129547119140625 -0.54082000255584716796875 +0.749538004398345947265625 0.3817160129547119140625 -0.54082000255584716796875 +0.749660015106201171875 -0.594892024993896484375 -0.2900229990482330322265625 +0.749660015106201171875 0.594892024993896484375 -0.2900229990482330322265625 +0.749826383590698308800881477509 -0.273144793510437022820980246252 0.0561415970325470012336488423443 +0.749826383590698308800881477509 0.273144793510437022820980246252 0.0561415970325470012336488423443 +0.7498819828033447265625 -0.646575987339019775390625 0.140058994293212890625 +0.7498819828033447265625 0.646575987339019775390625 0.140058994293212890625 +0.75 0 0 +0.750039196014404385692841970013 -0.274275207519531272204460492503 -0.047052800655364990234375 +0.750039196014404385692841970013 0.274275207519531272204460492503 -0.047052800655364990234375 +0.750320506095886186059829014994 -0.05589344911277294158935546875 0.395467604696750629766910378748 +0.750320506095886186059829014994 0.05589344911277294158935546875 0.395467604696750629766910378748 +0.750400018692016668175881477509 -0.0330000013113021864463725307814 -0.2753384113311767578125 +0.750400018692016668175881477509 0.0330000013113021864463725307814 -0.2753384113311767578125 +0.750646883249282859118522992503 -0.0350608009845018372963032504686 -0.397239854931831337658820757497 +0.750646883249282859118522992503 0.0350608009845018372963032504686 -0.397239854931831337658820757497 +0.751102399826049871300881477509 0 0.27539920806884765625 +0.751128891110420138232939279987 -0.125072243064641958065763560626 0.568034476041793801037727007497 +0.751128891110420138232939279987 0.125072243064641958065763560626 0.568034476041793801037727007497 +0.7522304356098175048828125 -0.377360892295837413445980246252 0.1193663515150547027587890625 +0.7522304356098175048828125 0.377360892295837413445980246252 0.1193663515150547027587890625 +0.75224697589874267578125 -0.22011299431324005126953125 -0.6210269927978515625 +0.75224697589874267578125 0.22011299431324005126953125 -0.6210269927978515625 +0.7526810169219970703125 -0.324860990047454833984375 0.57265698909759521484375 +0.7526810169219970703125 0.324860990047454833984375 0.57265698909759521484375 +0.752795994281768798828125 -0.4656510055065155029296875 -0.4652599990367889404296875 +0.752795994281768798828125 0.4656510055065155029296875 -0.4652599990367889404296875 +0.7530410289764404296875 -0.647409975528717041015625 -0.11743099987506866455078125 +0.7530410289764404296875 0.647409975528717041015625 -0.11743099987506866455078125 +0.753518390655517622533920985006 -0.216498398780822776110710492503 -0.159179198741912858450220369377 +0.753518390655517622533920985006 0.216498398780822776110710492503 -0.159179198741912858450220369377 +0.753611993789672918175881477509 -0.183117604255676275082365123126 0.196308004856109635793970369377 +0.753611993789672918175881477509 0.183117604255676275082365123126 0.196308004856109635793970369377 +0.753748530149459861071647992503 -0.379927046597003936767578125 -0.100094298645853993501297907187 +0.753748530149459861071647992503 0.379927046597003936767578125 -0.100094298645853993501297907187 +0.753858217597007773669304242503 -0.146650496125221241339176003748 0.364268340170383453369140625 +0.753858217597007773669304242503 0.146650496125221241339176003748 0.364268340170383453369140625 +0.754173612594604581005341970013 -0.246124005317687993832365123126 -0.103176796436309822779797684689 +0.754173612594604581005341970013 0.246124005317687993832365123126 -0.103176796436309822779797684689 +0.75446338951587677001953125 -0.423091042041778553350894753748 -0.392784155905246734619140625 +0.75446338951587677001953125 0.423091042041778553350894753748 -0.392784155905246734619140625 +0.754808807373046897204460492503 -0.24416720867156982421875 0.103176796436309822779797684689 +0.754808807373046897204460492503 0.24416720867156982421875 0.103176796436309822779797684689 +0.754830089211463883813735264994 -0.306396847963333107678352007497 0.48872558772563934326171875 +0.754830089211463883813735264994 0.306396847963333107678352007497 0.48872558772563934326171875 +0.755028909444808937756477007497 -0.273419103026390108990284488755 0.406415712833404552117855246252 +0.755028909444808937756477007497 0.273419103026390108990284488755 0.406415712833404552117855246252 +0.755110225081443764416633257497 -0.273817309737205472064403011245 0.278086861968040444104133257497 +0.755110225081443764416633257497 0.273817309737205472064403011245 0.278086861968040444104133257497 +0.755643618106842107629006477509 -0.285095697641372713970753238755 -0.397143906354904208111378238755 +0.755643618106842107629006477509 0.285095697641372713970753238755 -0.397143906354904208111378238755 +0.755646300315857000207131477509 -0.414234888553619395867855246252 -0.25963018834590911865234375 +0.755646300315857000207131477509 0.414234888553619395867855246252 -0.25963018834590911865234375 +0.755802142620086603308493522491 -0.281011691689491249768195757497 -0.268878790736198414190738503748 +0.755802142620086603308493522491 0.281011691689491249768195757497 -0.268878790736198414190738503748 +0.7560927867889404296875 -0.213902401924133317434595369377 0.150232803821563731805355246252 +0.7560927867889404296875 0.213902401924133317434595369377 0.150232803821563731805355246252 +0.757356816530227683337272992503 -0.385888952016830433233707253748 0 +0.757356816530227683337272992503 0.385888952016830433233707253748 0 +0.7575661242008209228515625 -0.502673482894897438733039507497 -0.275521849095821391717464621252 +0.7575661242008209228515625 0.502673482894897438733039507497 -0.275521849095821391717464621252 +0.757770395278930752880341970013 -0.129966402053833002261384876874 -0.221116805076599143298210492503 +0.757770395278930752880341970013 0.129966402053833002261384876874 -0.221116805076599143298210492503 +0.758093774318695068359375 -0.187096893787384033203125 -0.335840950906276691778629128748 +0.758093774318695068359375 0.187096893787384033203125 -0.335840950906276691778629128748 +0.758263492584228537829460492503 -0.124155002832412722502120061563 -0.468638080358505237921207253748 +0.758263492584228537829460492503 0.124155002832412722502120061563 -0.468638080358505237921207253748 +0.758640286326408341821547764994 -0.339800262451171841693309261245 0.1774816997349262237548828125 +0.758640286326408341821547764994 0.339800262451171841693309261245 0.1774816997349262237548828125 +0.759190243482589677270766514994 -0.307350662350654613153011496252 0.227300205826759332827791126874 +0.759190243482589677270766514994 0.307350662350654613153011496252 0.227300205826759332827791126874 +0.75957000255584716796875 -0.551855027675628662109375 -0.34425199031829833984375 +0.75957000255584716796875 0.551855027675628662109375 -0.34425199031829833984375 +0.759834384918212979442841970013 -0.0969135999679565512954226846887 0.230780792236328136102230246252 +0.759834384918212979442841970013 0.0969135999679565512954226846887 0.230780792236328136102230246252 +0.759886932373046830591079014994 -0.170613346993923192806974498126 -0.544025102257728598864616742503 +0.759886932373046830591079014994 0.170613346993923192806974498126 -0.544025102257728598864616742503 +0.760229906439781166760383257497 -0.322161141037940967901676003748 -0.469853860139846757348891514994 +0.760229906439781166760383257497 0.322161141037940967901676003748 -0.469853860139846757348891514994 +0.760261228680610634533820757497 0 0.380132742226123809814453125 +0.760406970977783203125 -0.649447023868560791015625 0 +0.760406970977783203125 0.649447023868560791015625 0 +0.7608463764190673828125 -0.247210407257080100329460492503 0 +0.7608463764190673828125 0.247210407257080100329460492503 0 +0.76093952357769012451171875 -0.552852508425712541040297764994 0.133509195595979679449527566248 +0.76093952357769012451171875 0.552852508425712541040297764994 0.133509195595979679449527566248 +0.761993104219436667712272992503 -0.462035715579986572265625 0.1260530948638916015625 +0.761993104219436667712272992503 0.462035715579986572265625 0.1260530948638916015625 +0.76206600666046142578125 -0.176412601768970500604183371252 0.44512291252613067626953125 +0.76206600666046142578125 0.176412601768970500604183371252 0.44512291252613067626953125 +0.762153375148773126745993522491 -0.313236039876937877313167746252 -0.208578103780746454409822376874 +0.762153375148773126745993522491 0.313236039876937877313167746252 -0.208578103780746454409822376874 +0.762582600116729736328125 -0.3446146547794342041015625 -0.149024545401334751471011941248 +0.762582600116729736328125 0.3446146547794342041015625 -0.149024545401334751471011941248 +0.7626960277557373046875 -0.3836109936237335205078125 0.520708978176116943359375 +0.7626960277557373046875 0.3836109936237335205078125 0.520708978176116943359375 +0.76309001445770263671875 -0.151546001434326171875 -0.628274023532867431640625 +0.76309001445770263671875 0.151546001434326171875 -0.628274023532867431640625 +0.763214805722236544482939279987 -0.554504525661468461450454014994 -0.111928046494722363557450250937 +0.763214805722236544482939279987 0.554504525661468461450454014994 -0.111928046494722363557450250937 +0.763459199666976950915397992503 -0.0592352986335754408409037807814 0.472886109352111838610710492503 +0.763459199666976950915397992503 0.0592352986335754408409037807814 0.472886109352111838610710492503 +0.763586121797561689916733485006 -0.464506191015243541375667746252 -0.105687899887561803646818248126 +0.763586121797561689916733485006 0.464506191015243541375667746252 -0.105687899887561803646818248126 +0.763750809431076094213608485006 -0.0622260019183158916145082173443 -0.472030216455459616931022992503 +0.763750809431076094213608485006 0.0622260019183158916145082173443 -0.472030216455459616931022992503 +0.764494460821151688989516514994 -0.460214205086231231689453125 -0.32596211135387420654296875 +0.764494460821151688989516514994 0.460214205086231231689453125 -0.32596211135387420654296875 +0.764925622940063498766960492503 -0.0325136005878448527961488423443 0.2320168018341064453125 +0.764925622940063498766960492503 0.0325136005878448527961488423443 0.2320168018341064453125 +0.765417623519897505346420985006 -0.0652000010013580322265625 -0.223347997665405278988615123126 +0.765417623519897505346420985006 0.0652000010013580322265625 -0.223347997665405278988615123126 +0.7655831873416900634765625 0 -0.473162376880645774157585492503 +0.765632009506225674755341970013 -0.160948801040649430715845369377 -0.167041599750518798828125 +0.765632009506225674755341970013 0.160948801040649430715845369377 -0.167041599750518798828125 +0.765831613540649436266960492503 -0.311535894870758056640625 0.355595389008522055895866742503 +0.765831613540649436266960492503 0.311535894870758056640625 0.355595389008522055895866742503 +0.765855014324188232421875 -0.6074759960174560546875 0.21080400049686431884765625 +0.765855014324188232421875 0.6074759960174560546875 0.21080400049686431884765625 +0.76600301265716552734375 -0.50629198551177978515625 -0.3961170017719268798828125 +0.76600301265716552734375 0.50629198551177978515625 -0.3961170017719268798828125 +0.766310989856719970703125 -0.1983850002288818359375 0.611073017120361328125 +0.766310989856719970703125 0.1983850002288818359375 0.611073017120361328125 +0.766910970211029052734375 -0.066041998565196990966796875 0.638346016407012939453125 +0.766910970211029052734375 0.066041998565196990966796875 0.638346016407012939453125 +0.767175197601318359375 -0.219752001762390153372095369377 -0.0561415970325470012336488423443 +0.767175197601318359375 0.219752001762390153372095369377 -0.0561415970325470012336488423443 +0.767256754636764459753806022491 -0.181067845970392216070621316248 0.317853248119354225842414507497 +0.767256754636764459753806022491 0.181067845970392216070621316248 0.317853248119354225842414507497 +0.767377799749374367443977007497 -0.470246386528015147820980246252 0 +0.767377799749374367443977007497 0.470246386528015147820980246252 0 +0.7674024105072021484375 -0.128496003150939952508480246252 0.185964000225067149774105246252 +0.7674024105072021484375 0.128496003150939952508480246252 0.185964000225067149774105246252 +0.76772423088550567626953125 -0.128814949840307224615543191248 -0.341329401731491066662727007497 +0.76772423088550567626953125 0.128814949840307224615543191248 -0.341329401731491066662727007497 +0.767972803115844815380341970013 0 -0.224093604087829606497095369377 +0.768011188507080166942841970013 -0.218962407112121587582365123126 0.047052800655364990234375 +0.768011188507080166942841970013 0.218962407112121587582365123126 0.047052800655364990234375 +0.768048378825187616492087272491 -0.10486384667456150054931640625 -0.549186474084854103772102007497 +0.768048378825187616492087272491 0.10486384667456150054931640625 -0.549186474084854103772102007497 +0.7685671150684356689453125 -0.558393830060958884509147992503 0 +0.7685671150684356689453125 0.558393830060958884509147992503 0 +0.768634611368179343493522992503 -0.0905190531164407757858114678129 0.351435896754264842645198996252 +0.768634611368179343493522992503 0.0905190531164407757858114678129 0.351435896754264842645198996252 +0.768773603439331099096420985006 -0.190939199924469005242855246252 -0.111936795711517336759932561563 +0.768773603439331099096420985006 0.190939199924469005242855246252 -0.111936795711517336759932561563 +0.768807429075241022253806022491 -0.186590448766946775949193693123 0.525946626067161582263054242503 +0.768807429075241022253806022491 0.186590448766946775949193693123 0.525946626067161582263054242503 +0.76887203752994537353515625 -0.347723750770091988293586382497 0.436375837028026569708316628748 +0.76887203752994537353515625 0.347723750770091988293586382497 0.436375837028026569708316628748 +0.768922376632690363074118522491 -0.0626885969191789543808468465613 0.554372477531433038855368522491 +0.768922376632690363074118522491 0.0626885969191789543808468465613 0.554372477531433038855368522491 +0.769928419589996360095085492503 -0.322401604056358370709034488755 -0.336552295088767994268863503748 +0.769928419589996360095085492503 0.322401604056358370709034488755 -0.336552295088767994268863503748 +0.77016198635101318359375 -0.3167720139026641845703125 -0.55362999439239501953125 +0.77016198635101318359375 0.3167720139026641845703125 -0.55362999439239501953125 +0.770214974880218505859375 -0.082240998744964599609375 -0.63245999813079833984375 +0.770214974880218505859375 0.082240998744964599609375 -0.63245999813079833984375 +0.771297597885131858141960492503 -0.159462404251098643914730246252 0.1402575969696044921875 +0.771297597885131858141960492503 0.159462404251098643914730246252 0.1402575969696044921875 +0.771326538920402482446547764994 -0.352128650248050678595035378748 0.0596682995557785006424111884371 +0.771326538920402482446547764994 0.352128650248050678595035378748 0.0596682995557785006424111884371 +0.771374720335006758276108485006 -0.423822605609893821032585492503 0.188030697405338287353515625 +0.771374720335006758276108485006 0.423822605609893821032585492503 0.188030697405338287353515625 +0.771499100327491693640524772491 -0.353254048526287056652961382497 -0.0500037999823689446876606723436 +0.771499100327491693640524772491 0.353254048526287056652961382497 -0.0500037999823689446876606723436 +0.771500778198242254113381477509 -0.189666402339935313836605246252 0.093879997730255126953125 +0.771500778198242254113381477509 0.189666402339935313836605246252 0.093879997730255126953125 +0.771543914079666159899772992503 -0.222589793801307694876001619377 -0.406416597962379444464176003748 +0.771543914079666159899772992503 0.222589793801307694876001619377 -0.406416597962379444464176003748 +0.77166497707366943359375 -0.610922992229461669921875 -0.1769340038299560546875 +0.77166497707366943359375 0.610922992229461669921875 -0.1769340038299560546875 +0.77184422314167022705078125 -0.222314949333667744024722878748 -0.278086861968040444104133257497 +0.77184422314167022705078125 0.222314949333667744024722878748 -0.278086861968040444104133257497 +0.772290170192718505859375 -0.0391856011003255816360635321871 -0.551844537258148193359375 +0.772290170192718505859375 0.0391856011003255816360635321871 -0.551844537258148193359375 +0.772707617282867409436164507497 -0.34805430471897125244140625 0.302952611446380637438835492503 +0.772707617282867409436164507497 0.34805430471897125244140625 0.302952611446380637438835492503 +0.77283298969268798828125 0 -0.634609997272491455078125 +0.773615586757659845495993522491 -0.06990484893321990966796875 -0.345155239105224609375 +0.773615586757659845495993522491 0.06990484893321990966796875 -0.345155239105224609375 +0.773688566684722855981704014994 -0.513615584373474098889289507497 0.200263800472021080700812944997 +0.773688566684722855981704014994 0.513615584373474098889289507497 0.200263800472021080700812944997 +0.774968814849853582238381477509 -0.0644576013088226373870526231258 0.187797594070434586965845369377 +0.774968814849853582238381477509 0.0644576013088226373870526231258 0.187797594070434586965845369377 +0.775227606296539306640625 0 0.457188320159912120477230246252 +0.775490409135818459240852007497 -0.42859889566898345947265625 -0.157853700220584869384765625 +0.775490409135818459240852007497 0.42859889566898345947265625 -0.157853700220584869384765625 +0.775623607635498091283920985006 -0.382789796590805087017628238755 0.248756405711174022332698996252 +0.775623607635498091283920985006 0.382789796590805087017628238755 0.248756405711174022332698996252 +0.775698006153106689453125 -0.42713201045989990234375 0.464598000049591064453125 +0.775698006153106689453125 0.42713201045989990234375 0.464598000049591064453125 +0.776153612136840864721420985006 -0.0982392013072967557052450615629 -0.167137598991394048519865123126 +0.776153612136840864721420985006 0.0982392013072967557052450615629 -0.167137598991394048519865123126 +0.776245501637458756860610264994 0 -0.346329097449779521600277121252 +0.776629984378814697265625 -0.56425201892852783203125 0.28011798858642578125 +0.776629984378814697265625 0.56425201892852783203125 0.28011798858642578125 +0.776633080840110734399672764994 -0.216900442540645582711889005623 0.268877954781055417132762386245 +0.776633080840110734399672764994 0.216900442540645582711889005623 0.268877954781055417132762386245 +0.777358394861221269067641514994 -0.259598894417285896984992632497 -0.480439680814743030889957253748 +0.777358394861221269067641514994 0.259598894417285896984992632497 -0.480439680814743030889957253748 +0.777496814727783203125 0 0.18841040134429931640625 +0.777896785736084006579460492503 -0.186753594875335715563835492503 0 +0.777896785736084006579460492503 0.186753594875335715563835492503 0 +0.777976846694946266858039507497 -0.362630212306976285052684261245 -0.407125335931777909692641514994 +0.777976846694946266858039507497 0.362630212306976285052684261245 -0.407125335931777909692641514994 +0.778382003307342529296875 -0.4033490121364593505859375 -0.4810729920864105224609375 +0.778382003307342529296875 0.4033490121364593505859375 -0.4810729920864105224609375 +0.778509795665740966796875 -0.517849731445312433386618522491 -0.168087303638458251953125 +0.778509795665740966796875 0.517849731445312433386618522491 -0.168087303638458251953125 +0.778797674179077081824118522491 -0.387868845462799038958934261245 0.381485801935195878442641514994 +0.778797674179077081824118522491 0.387868845462799038958934261245 0.381485801935195878442641514994 +0.778905022144317671362045985006 -0.213504293560981744937166126874 0.397142994403839100225894753748 +0.778905022144317671362045985006 0.213504293560981744937166126874 0.397142994403839100225894753748 +0.779207414388656594006477007497 -0.357610505819320689813167746252 -0.273771893978118907586605246252 +0.779207414388656594006477007497 0.357610505819320689813167746252 -0.273771893978118907586605246252 +0.779706710577011130602897992503 -0.0345440002158284159561318915621 0.3366968929767608642578125 +0.779706710577011130602897992503 0.0345440002158284159561318915621 0.3366968929767608642578125 +0.780070477724075339587272992503 -0.315982405841350566522152121252 0.118932845443487159031725752811 +0.780070477724075339587272992503 0.315982405841350566522152121252 0.118932845443487159031725752811 +0.780128109455108686987045985006 -0.118080000579357149992354436563 0.432963010668754588738948996252 +0.780128109455108686987045985006 0.118080000579357149992354436563 0.432963010668754588738948996252 +0.780504870414733820105368522491 -0.256066739559173583984375 -0.218499295413494110107421875 +0.780504870414733820105368522491 0.256066739559173583984375 -0.218499295413494110107421875 +0.780853423476219110632712272491 -0.471617059409618344378856136245 0.265226709842681873663394753748 +0.780853423476219110632712272491 0.471617059409618344378856136245 0.265226709842681873663394753748 +0.781324815750122136925881477509 -0.0330408006906509413291850307814 -0.16864240169525146484375 +0.781324815750122136925881477509 0.0330408006906509413291850307814 -0.16864240169525146484375 +0.78148710727691650390625 -0.246895490586757637707648882497 0.480437812209129289087172764994 +0.78148710727691650390625 0.246895490586757637707648882497 0.480437812209129289087172764994 +0.781529617309570379113381477509 -0.128803205490112315789730246252 -0.112344801425933837890625 +0.781529617309570379113381477509 0.128803205490112315789730246252 -0.112344801425933837890625 +0.7816088199615478515625 -0.0969528019428253229339276231258 0.140313601493835454769865123126 +0.7816088199615478515625 0.0969528019428253229339276231258 0.140313601493835454769865123126 +0.781620895862579323498664507497 -0.318778903782367672992137386245 -0.0997474975883960723876953125 +0.781620895862579323498664507497 0.318778903782367672992137386245 -0.0997474975883960723876953125 +0.781955784559249855725227007497 -0.251601700484752666131527121252 0.218499295413494110107421875 +0.781955784559249855725227007497 0.251601700484752666131527121252 0.218499295413494110107421875 +0.782051980495452880859375 -0.619239985942840576171875 0.0702629983425140380859375 +0.782051980495452880859375 0.619239985942840576171875 0.0702629983425140380859375 +0.782111978530883877880341970013 -0.158579194545745871813835492503 -0.0561583995819091852386151231258 +0.782111978530883877880341970013 0.158579194545745871813835492503 -0.0561583995819091852386151231258 +0.7822949886322021484375 -0.262659013271331787109375 0.564822971820831298828125 +0.7822949886322021484375 0.262659013271331787109375 0.564822971820831298828125 +0.782865619659423916942841970013 -0.1578176021575927734375 0.0470623999834060696700888115629 +0.782865619659423916942841970013 0.1578176021575927734375 0.0470623999834060696700888115629 +0.782920527458190851355368522491 -0.284484806656837452276676003748 0.169127898663282399960294810626 +0.782920527458190851355368522491 0.284484806656837452276676003748 0.169127898663282399960294810626 +0.7829225957393646240234375 -0.161633697152137767449886496252 -0.413409599661827109606804242503 +0.7829225957393646240234375 0.161633697152137767449886496252 -0.413409599661827109606804242503 +0.782971006631851151880141514994 0 0.538011589646339438708366742503 +0.783037006855010986328125 -0.619184017181396484375 -0.058866001665592193603515625 +0.783037006855010986328125 0.619184017181396484375 -0.058866001665592193603515625 +0.783051013946533203125 0 0.6219580173492431640625 +0.78310501575469970703125 -0.517967998981475830078125 0.3441739976406097412109375 +0.78310501575469970703125 0.517967998981475830078125 0.3441739976406097412109375 +0.783245232701301530298110264994 -0.125300201773643482550113503748 0.305495095252990733758480246252 +0.783245232701301530298110264994 0.125300201773643482550113503748 0.305495095252990733758480246252 +0.783418482542037941662727007497 -0.390494710206985506939503238755 -0.209210398793220536672876619377 +0.783418482542037941662727007497 0.390494710206985506939503238755 -0.209210398793220536672876619377 +0.783511319756507895739616742503 -0.288323411345481839251903011245 -0.159622354060411447695955189374 +0.783511319756507895739616742503 0.288323411345481839251903011245 -0.159622354060411447695955189374 +0.783620956540107660437399772491 -0.163010454922914493902652566248 -0.286121910810470558850227007497 +0.783620956540107660437399772491 0.163010454922914493902652566248 -0.286121910810470558850227007497 +0.784104776382446355675881477509 -0.127688801288604741879240123126 0.0942063987255096491058026231258 +0.784104776382446355675881477509 0.127688801288604741879240123126 0.0942063987255096491058026231258 +0.7844165861606597900390625 -0.436684495210647616314503238755 0.0632249973714351654052734375 +0.7844165861606597900390625 0.436684495210647616314503238755 0.0632249973714351654052734375 +0.784487181901931673877470529987 -0.425843186676502227783203125 0.325171691179275523797542746252 +0.784487181901931673877470529987 0.425843186676502227783203125 0.325171691179275523797542746252 +0.784657001495361328125 -0.468427002429962158203125 0.406066000461578369140625 +0.784657001495361328125 0.468427002429962158203125 0.406066000461578369140625 +0.784657824039459272924545985006 -0.437613290548324596063167746252 -0.0529731016606092494636293110943 +0.784657824039459272924545985006 0.437613290548324596063167746252 -0.0529731016606092494636293110943 +0.785298845171928383557258257497 -0.32527799904346466064453125 0 +0.785298845171928383557258257497 0.32527799904346466064453125 0 +0.786261975765228271484375 -0.571247994899749755859375 -0.23551499843597412109375 +0.786261975765228271484375 0.571247994899749755859375 -0.23551499843597412109375 +0.786705589294433682567841970013 -0.0325415998697280925422425923443 0.141546404361724859066740123126 +0.786705589294433682567841970013 0.0325415998697280925422425923443 0.141546404361724859066740123126 +0.7872769832611083984375 -0.24732099473476409912109375 -0.56482398509979248046875 +0.7872769832611083984375 0.24732099473476409912109375 -0.56482398509979248046875 +0.788364905118942305151108485006 -0.260932508111000049932926003748 -0.346979704499244701043636496252 +0.788364905118942305151108485006 0.260932508111000049932926003748 -0.346979704499244701043636496252 +0.789071890711784296179587272491 -0.524795225262641884533820757497 0.066749848425388336181640625 +0.789071890711784296179587272491 0.524795225262641884533820757497 0.066749848425388336181640625 +0.789220076799392655786391514994 -0.125160605460405333078099943123 0.513776171207427911902243522491 +0.789220076799392655786391514994 0.125160605460405333078099943123 0.513776171207427911902243522491 +0.789311298727989107959501779987 -0.525700536370277360376235264994 -0.0559227015823125783722247206242 +0.789311298727989107959501779987 0.525700536370277360376235264994 -0.0559227015823125783722247206242 +0.789372014999389692846420985006 -0.0658576011657714815994424384371 -0.1120471954345703125 +0.789372014999389692846420985006 0.0658576011657714815994424384371 -0.1120471954345703125 +0.789512711763381891394431022491 -0.478994739055633500512954014994 -0.223011554032564146554662443123 +0.789512711763381891394431022491 0.478994739055633500512954014994 -0.223011554032564146554662443123 +0.790151214599609463817841970013 -0.125145602226257340872095369377 0 +0.790151214599609463817841970013 0.125145602226257340872095369377 0 +0.79052351415157318115234375 -0.401240105926990497930972878748 -0.341437591612338997570930132497 +0.79052351415157318115234375 0.401240105926990497930972878748 -0.341437591612338997570930132497 +0.790661990642547607421875 -0.13165499269962310791015625 0.59793102741241455078125 +0.790661990642547607421875 0.13165499269962310791015625 0.59793102741241455078125 +0.790753519535064675061164507497 -0.0993446968495845794677734375 -0.418138200044631980212272992503 +0.790753519535064675061164507497 0.0993446968495845794677734375 -0.418138200044631980212272992503 +0.790765753388404823986945757497 -0.195794053375720977783203125 -0.488726550340652432513621761245 +0.790765753388404823986945757497 0.195794053375720977783203125 -0.488726550340652432513621761245 +0.7911746799945831298828125 -0.252285307645797762798878238755 0.346978792548179648669304242503 +0.7911746799945831298828125 0.252285307645797762798878238755 0.346978792548179648669304242503 +0.791808795928955144738381477509 -0.0649128019809722955901776231258 0.0939440011978149441818075615629 +0.791808795928955144738381477509 0.0649128019809722955901776231258 0.0939440011978149441818075615629 +0.791814076900482111120993522491 -0.104318797960877410191393721561 -0.290943092107772804943977007497 +0.791814076900482111120993522491 0.104318797960877410191393721561 -0.290943092107772804943977007497 +0.792060804367065496300881477509 0 -0.112428796291351329461605246252 +0.792252016067504949425881477509 -0.095803201198577880859375 -0.0561999976634979248046875 +0.792252016067504949425881477509 0.095803201198577880859375 -0.0561999976634979248046875 +0.792911195755004905016960492503 -0.0952615976333618247329226846887 0.0470863997936248820930238423443 +0.792911195755004905016960492503 0.0952615976333618247329226846887 0.0470863997936248820930238423443 +0.793892362713813803942741742503 -0.159315495193004613705411998126 0.258560647070407878533870871252 +0.793892362713813803942741742503 0.159315495193004613705411998126 0.258560647070407878533870871252 +0.794171988964080810546875 -0.4453589916229248046875 -0.4134570062160491943359375 +0.794171988964080810546875 0.4453589916229248046875 -0.4134570062160491943359375 +0.794428014755249045641960492503 0 0.0942551970481872586349325615629 +0.794457006454467817846420985006 -0.0591812990605831146240234375 0.418730404973030101434261496252 +0.794457006454467817846420985006 0.0591812990605831146240234375 0.418730404973030101434261496252 +0.794557988643646240234375 -0.32252299785614013671875 0.514447987079620361328125 +0.794557988643646240234375 0.32252299785614013671875 0.514447987079620361328125 +0.794802582263946510998664507497 -0.0371232010424137129356303432814 -0.420606905221939109118522992503 +0.794802582263946510998664507497 0.0371232010424137129356303432814 -0.420606905221939109118522992503 +0.794855383038520768579360264994 -0.197584204375743865966796875 -0.227300205826759332827791126874 +0.794855383038520768579360264994 0.197584204375743865966796875 -0.227300205826759332827791126874 +0.795418968796730019299445757497 -0.0689222469925880459884481865629 0.291648587584495522229133257497 +0.795418968796730019299445757497 0.0689222469925880459884481865629 0.291648587584495522229133257497 +0.796479284763336181640625 -0.399558591842651356085269753748 0.126387901604175567626953125 +0.796479284763336181640625 0.399558591842651356085269753748 0.126387901604175567626953125 +0.796690532565116904528679242503 -0.290216343104839291644481136245 0.0596504468470811857749858120314 +0.796690532565116904528679242503 0.290216343104839291644481136245 0.0596504468470811857749858120314 +0.796916645765304521020766514994 -0.291417407989501942022769753748 -0.0499936006963253021240234375 +0.796916645765304521020766514994 0.291417407989501942022769753748 -0.0499936006963253021240234375 +0.796974959969520502234274772491 -0.288609053194522846563785378748 0.428994363546371437756477007497 +0.796974959969520502234274772491 0.288609053194522846563785378748 0.428994363546371437756477007497 +0.797300019860267661364616742503 -0.0350625013932585674614195170307 -0.29254706203937530517578125 +0.797300019860267661364616742503 0.0350625013932585674614195170307 -0.29254706203937530517578125 +0.797338390350341819079460492503 -0.0330392003059387234786825615629 -0.05621039867401123046875 +0.797338390350341819079460492503 0.0330392003059387234786825615629 -0.05621039867401123046875 +0.79743802547454833984375 -0.52912998199462890625 -0.2900229990482330322265625 +0.79743802547454833984375 0.52912998199462890625 -0.2900229990482330322265625 +0.797533607482910245067841970013 -0.0627664029598236083984375 0 +0.797533607482910245067841970013 0.0627664029598236083984375 0 +0.797623819112777687756477007497 -0.300934347510337818487613503748 -0.419207456707954395636051003748 +0.797623819112777687756477007497 0.300934347510337818487613503748 -0.419207456707954395636051003748 +0.797626650333404518811164507497 -0.437247937917709328381477007497 -0.274054087698459625244140625 +0.797626650333404518811164507497 0.437247937917709328381477007497 -0.274054087698459625244140625 +0.797949600219726606908920985006 -0.0325399994850158677528462192186 0.0470928013324737604339276231258 +0.797949600219726606908920985006 0.0325399994850158677528462192186 0.0470928013324737604339276231258 +0.798046299815177939684929242503 0 0.292611658573150634765625 +0.798086678981780983654914507497 -0.40227569639682769775390625 -0.105982198566198351774580999063 +0.798086678981780983654914507497 0.40227569639682769775390625 -0.105982198566198351774580999063 +0.798202818632125832287727007497 -0.155276995897293101922542746252 0.38569588959217071533203125 +0.798202818632125832287727007497 0.155276995897293101922542746252 0.38569588959217071533203125 +0.799528473615646384509147992503 -0.289924210309982333111378238755 0.294444912672042868884147992503 +0.799528473615646384509147992503 0.289924210309982333111378238755 0.294444912672042868884147992503 +0.7998809814453125 -0.1795929968357086181640625 -0.572658002376556396484375 +0.7998809814453125 0.1795929968357086181640625 -0.572658002376556396484375 +0.800000000000000044408920985006 0 0 +0.800242006778717041015625 -0.339116990566253662109375 -0.49458301067352294921875 +0.800242006778717041015625 0.339116990566253662109375 -0.49458301067352294921875 +0.800261092185974187707131477509 -0.297541791200637839587272992503 -0.284695190191268932000667746252 +0.800261092185974187707131477509 0.297541791200637839587272992503 -0.284695190191268932000667746252 +0.800389242172241166528579014994 -0.131052502989768976382478626874 -0.494673529267311062884715511245 +0.800389242172241166528579014994 0.131052502989768976382478626874 -0.494673529267311062884715511245 +0.800613290071487404553352007497 -0.230029548704624164923160378748 -0.169127898663282399960294810626 +0.800613290071487404553352007497 0.230029548704624164923160378748 -0.169127898663282399960294810626 +0.800712743401527426989616742503 -0.194562454521656019723607755623 0.208577255159616475888029185626 +0.800712743401527426989616742503 0.194562454521656019723607755623 0.208577255159616475888029185626 +0.800988972187042236328125 -0.581950008869171142578125 0.14053599536418914794921875 +0.800988972187042236328125 0.581950008869171142578125 0.14053599536418914794921875 +0.801309463381767228540297764994 -0.261506755650043498651058371252 -0.109625346213579180632002874063 +0.801309463381767228540297764994 0.261506755650043498651058371252 -0.109625346213579180632002874063 +0.801907217502593971936164507497 -0.408588302135467540399105246252 0 +0.801907217502593971936164507497 0.408588302135467540399105246252 0 +0.801984357833862238074118522491 -0.259427659213542938232421875 0.109625346213579180632002874063 +0.801984357833862238074118522491 0.259427659213542938232421875 0.109625346213579180632002874063 +0.80268752574920654296875 -0.19810259342193603515625 -0.355596300959587108270198996252 +0.80268752574920654296875 0.19810259342193603515625 -0.355596300959587108270198996252 +0.803266185522079512182358485006 -0.359788513183593783306690738755 0.187921799719333648681640625 +0.803266185522079512182358485006 0.359788513183593783306690738755 0.187921799719333648681640625 +0.80334858596324920654296875 -0.227271302044391637631193248126 0.159622354060411447695955189374 +0.80334858596324920654296875 0.227271302044391637631193248126 0.159622354060411447695955189374 +0.803384006023406982421875 -0.5836889743804931640625 -0.11781899631023406982421875 +0.803384006023406982421875 0.5836889743804931640625 -0.11781899631023406982421875 +0.803848493099212690893295985006 -0.325430113077163685186832253748 0.240670806169509893246427623126 +0.803848493099212690893295985006 0.325430113077163685186832253748 0.240670806169509893246427623126 +0.804326054453849748071547764994 -0.4877043664455413818359375 0.13305604457855224609375 +0.804326054453849748071547764994 0.4877043664455413818359375 0.13305604457855224609375 +0.804403007030487060546875 -0.186213301867246605603156694997 0.469851963222026824951171875 +0.804403007030487060546875 0.186213301867246605603156694997 0.469851963222026824951171875 +0.80473101139068603515625 -0.4844360053539276123046875 -0.343118011951446533203125 +0.80473101139068603515625 0.4844360053539276123046875 -0.343118011951446533203125 +0.804982477426528952868522992503 0 0.40249349176883697509765625 +0.805131044983863786157485264994 -0.138089302182197559698551003748 -0.234936605393886555059879128748 +0.805131044983863786157485264994 0.138089302182197559698551003748 -0.234936605393886555059879128748 +0.805873599648475602563735264994 -0.0625261485576629610916299384371 0.499157559871673539575454014994 +0.805873599648475602563735264994 0.0625261485576629610916299384371 0.499157559871673539575454014994 +0.806007573008537203662626779987 -0.490312090516090370861945757497 -0.111559449881315220221011941248 +0.806007573008537203662626779987 0.490312090516090370861945757497 -0.111559449881315220221011941248 +0.806181409955024630420439279987 -0.0656830020248889839828976278113 -0.498254117369651750024672764994 +0.806181409955024630420439279987 0.0656830020248889839828976278113 -0.498254117369651750024672764994 +0.806985926628112859582131477509 -0.331661689281463611944644753748 -0.220847404003143316097990123126 +0.806985926628112859582131477509 0.331661689281463611944644753748 -0.220847404003143316097990123126 +0.807324033975601151880141514994 -0.102970699965953829679854436563 0.245204591751098627261384876874 +0.807324033975601151880141514994 0.102970699965953829679854436563 0.245204591751098627261384876874 +0.80744040012359619140625 -0.364886105060577392578125 -0.157790695130825053826839621252 +0.80744040012359619140625 0.364886105060577392578125 -0.157790695130825053826839621252 +0.80811558663845062255859375 0 -0.499449175596237138208266514994 +0.808377814292907670434829014994 -0.3288434445858001708984375 0.375350688397884324487563389994 +0.808377814292907670434829014994 0.3288434445858001708984375 0.375350688397884324487563389994 +0.80839927494525909423828125 -0.262661057710647571905582253748 0 +0.80839927494525909423828125 0.262661057710647571905582253748 0 +0.808471977710723876953125 -0.110382996499538421630859375 -0.57809102535247802734375 +0.808471977710723876953125 0.110382996499538421630859375 -0.57809102535247802734375 +0.80901801586151123046875 -0.58778297901153564453125 0 +0.80901801586151123046875 0.58778297901153564453125 0 +0.80927097797393798828125 -0.19641099870204925537109375 0.553628027439117431640625 +0.80927097797393798828125 0.19641099870204925537109375 0.553628027439117431640625 +0.809338986873626708984375 -0.3660250008106231689453125 0.4593429863452911376953125 +0.809338986873626708984375 0.3660250008106231689453125 0.4593429863452911376953125 +0.80939197540283203125 -0.065987996757030487060546875 0.583549976348876953125 +0.80939197540283203125 0.065987996757030487060546875 0.583549976348876953125 +0.810009899735450678015524772491 -0.496371185779571510998664507497 0 +0.810009899735450678015524772491 0.496371185779571510998664507497 0 +0.812389504909515447472756477509 -0.191718895733356486932308371252 0.336550498008728049548210492503 +0.812389504909515447472756477509 0.191718895733356486932308371252 0.336550498008728049548210492503 +0.812702220678329423364516514994 -0.340312804281711567266910378748 -0.355249644815921750140574886245 +0.812702220678329423364516514994 0.340312804281711567266910378748 -0.355249644815921750140574886245 +0.812733474373817377234274772491 -0.0345457006245851530601420620314 0.24651785194873809814453125 +0.812733474373817377234274772491 0.0345457006245851530601420620314 0.24651785194873809814453125 +0.8128844797611236572265625 -0.136392299830913554803402121252 -0.361407601833343528063835492503 +0.8128844797611236572265625 0.136392299830913554803402121252 -0.361407601833343528063835492503 +0.8129370212554931640625 -0.041248001158237457275390625 -0.5808889865875244140625 +0.8129370212554931640625 0.041248001158237457275390625 -0.5808889865875244140625 +0.813256224989891030041633257497 -0.06927500106394290924072265625 -0.237307247519493086373998380623 +0.813256224989891030041633257497 0.06927500106394290924072265625 -0.237307247519493086373998380623 +0.813484010100364640649672764994 -0.171008101105690007992521373126 -0.1774816997349262237548828125 +0.813484010100364640649672764994 0.171008101105690007992521373126 -0.1774816997349262237548828125 +0.813848412036895729748664507497 -0.0958437032997608157058877509371 0.372108596563339222296207253748 +0.813848412036895729748664507497 0.0958437032997608157058877509371 0.372108596563339222296207253748 +0.814228871464729220264189279987 -0.447368305921554521020766514994 0.1984768472611904144287109375 +0.814228871464729220264189279987 0.447368305921554521020766514994 0.1984768472611904144287109375 +0.814407464861869767602797764994 -0.234955893456935877017244251874 -0.428995297849178280902293636245 +0.814407464861869767602797764994 0.234955893456935877017244251874 -0.428995297849178280902293636245 +0.8144090175628662109375 -0.540647983551025390625 0.21080400049686431884765625 +0.8144090175628662109375 0.540647983551025390625 0.21080400049686431884765625 +0.8151236474514007568359375 -0.233486501872539525814786998126 -0.0596504468470811857749858120314 +0.8151236474514007568359375 0.233486501872539525814786998126 -0.0596504468470811857749858120314 +0.81536506116390228271484375 -0.136527003347873682193025501874 0.197586750239133829287752064374 +0.81536506116390228271484375 0.136527003347873682193025501874 0.197586750239133829287752064374 +0.815635818243026666785056022491 -0.367390654981136322021484375 0.319783312082290660516292746252 +0.815635818243026666785056022491 0.367390654981136322021484375 0.319783312082290660516292746252 +0.815971103310584977563735264994 0 -0.238099454343318944760099498126 +0.816011887788772538598891514994 -0.232647557556629164254857755623 0.0499936006963253021240234375 +0.816011887788772538598891514994 0.232647557556629164254857755623 0.0499936006963253021240234375 +0.816698688268661543432358485006 -0.372842100262641917840511496252 0.0631781995296478299239950615629 +0.816698688268661543432358485006 0.372842100262641917840511496252 0.0631781995296478299239950615629 +0.816821953654289223401008257497 -0.202872899919748300723298939374 -0.118932845443487159031725752811 +0.816821953654289223401008257497 0.202872899919748300723298939374 -0.118932845443487159031725752811 +0.816881400346756048058693977509 -0.374033698439598105700554242503 -0.0529451999813318266441264370314 +0.816881400346756048058693977509 0.374033698439598105700554242503 -0.0529451999813318266441264370314 +0.8172468245029449462890625 -0.235392299294471751824886496252 -0.294444912672042868884147992503 +0.8172468245029449462890625 0.235392299294471751824886496252 -0.294444912672042868884147992503 +0.81827199459075927734375 -0.2732619941234588623046875 -0.50572597980499267578125 +0.81827199459075927734375 0.2732619941234588623046875 -0.50572597980499267578125 +0.8182958066463470458984375 0 0.482587671279907204358039507497 +0.818573209643363886023337272491 -0.452409945428371429443359375 -0.1666233502328395843505859375 +0.818573209643363886023337272491 0.452409945428371429443359375 -0.1666233502328395843505859375 +0.818713808059692293994658029987 -0.404055896401405323370426003748 0.262576206028461434094367632497 +0.818713808059692293994658029987 0.404055896401405323370426003748 0.262576206028461434094367632497 +0.81892299652099609375 -0.3817160129547119140625 -0.42855298519134521484375 +0.81892299652099609375 0.3817160129547119140625 -0.42855298519134521484375 +0.819122385978698797082131477509 -0.0740168988704681396484375 -0.36545848846435546875 +0.819122385978698797082131477509 0.0740168988704681396484375 -0.36545848846435546875 +0.8194839954376220703125 -0.54510498046875 -0.1769340038299560546875 +0.8194839954376220703125 0.54510498046875 -0.1769340038299560546875 +0.819503697752952509070212272491 -0.169428804516792291812166126874 0.14902369678020477294921875 +0.819503697752952509070212272491 0.169428804516792291812166126874 0.14902369678020477294921875 +0.819719576835632346423210492503 -0.201520552486181253604158314374 0.0997474975883960723876953125 +0.819719576835632346423210492503 0.201520552486181253604158314374 0.0997474975883960723876953125 +0.81978702545166015625 -0.4082829952239990234375 0.40156400203704833984375 +0.81978702545166015625 0.4082829952239990234375 0.40156400203704833984375 +0.821907001733779951635483485006 0 -0.366701397299766529425113503748 +0.821950972080230712890625 -0.4964390099048614501953125 0.2791860103607177734375 +0.821950972080230712890625 0.4964390099048614501953125 0.2791860103607177734375 +0.822177523374557406299345529987 -0.225365643203258497750951505623 0.419206494092941250872996761245 +0.822177523374557406299345529987 0.225365643203258497750951505623 0.419206494092941250872996761245 +0.822317379713058516088608485006 -0.229659292101860063040064119377 0.284694305062294039654346988755 +0.822317379713058516088608485006 0.229659292101860063040064119377 0.284694305062294039654346988755 +0.822496715188026361609274772491 -0.377477756142616249768195757497 -0.288981443643569924084602007497 +0.822496715188026361609274772491 0.377477756142616249768195757497 -0.288981443643569924084602007497 +0.822618007659912109375 -0.2598899900913238525390625 0.505724012851715087890625 +0.822618007659912109375 0.2598899900913238525390625 0.505724012851715087890625 +0.823404365777969382556022992503 -0.0684862013906240435501260321871 0.199534943699836736508146373126 +0.823404365777969382556022992503 0.0684862013906240435501260321871 0.199534943699836736508146373126 +0.823468559980392367236845529987 -0.124640000611543649844392689374 0.457016511261463143078742632497 +0.823468559980392367236845529987 0.124640000611543649844392689374 0.457016511261463143078742632497 +0.82418000698089599609375 0 0.566327989101409912109375 +0.824663212895393349377570757497 -0.104379151389002791661120284061 -0.177583698928356154000951505623 +0.824663212895393349377570757497 0.104379151389002791661120284061 -0.177583698928356154000951505623 +0.825571811199188210217414507497 -0.0365760002285242108444052178129 0.356502592563629150390625 +0.825571811199188210217414507497 0.0365760002285242108444052178129 0.356502592563629150390625 +0.82577598094940185546875 -0.4482559859752655029296875 0.34228599071502685546875 +0.82577598094940185546875 0.4482559859752655029296875 0.34228599071502685546875 +0.825956976413726784436164507497 -0.334569606184959400518863503748 0.125928895175456995181306751874 +0.825956976413726784436164507497 0.334569606184959400518863503748 0.125928895175456995181306751874 +0.8260903656482696533203125 0 0.200186051428318023681640625 +0.826416921615600652550881477509 -0.27112948894500732421875 -0.23135219514369964599609375 +0.826416921615600652550881477509 0.27112948894500732421875 -0.23135219514369964599609375 +0.82641829550266265869140625 -0.170613346993923192806974498126 -0.436376799643039658960219639994 +0.82641829550266265869140625 0.170613346993923192806974498126 -0.436376799643039658960219639994 +0.826515334844589166785056022491 -0.198425694555044163092105691248 0 +0.826515334844589166785056022491 0.198425694555044163092105691248 0 +0.826941731572151117468649772491 -0.412188860774040211065738503748 -0.220833198726177210025056751874 +0.826941731572151117468649772491 0.412188860774040211065738503748 -0.220833198726177210025056751874 +0.827598595619201682360710492503 -0.337530604004859957623096988755 -0.105614997446537017822265625 +0.827598595619201682360710492503 0.337530604004859957623096988755 -0.105614997446537017822265625 +0.827953183650970481188835492503 -0.266401800513267505987613503748 0.23135219514369964599609375 +0.827953183650970481188835492503 0.266401800513267505987613503748 0.23135219514369964599609375 +0.82799528539180755615234375 -0.460944744944572437628238503748 0.06673749722540378570556640625 +0.82799528539180755615234375 0.460944744944572437628238503748 0.06673749722540378570556640625 +0.828249925374984652393095529987 -0.461925140023231484143195757497 -0.0559160517528653130958637973436 +0.828249925374984652393095529987 0.461925140023231484143195757497 -0.0559160517528653130958637973436 +0.828974676132202215050881477509 -0.301219207048416148797542746252 0.179076598584651941470369251874 +0.828974676132202215050881477509 0.301219207048416148797542746252 0.179076598584651941470369251874 +0.829318481683731123510483485006 -0.132670801877975474969417746252 0.323465394973754871710269753748 +0.829318481683731123510483485006 0.132670801877975474969417746252 0.323465394973754871710269753748 +0.829600220918655373303352007497 -0.305283612012863192486378238755 -0.169011904299259191342130748126 +0.829600220918655373303352007497 0.305283612012863192486378238755 -0.169011904299259191342130748126 +0.829716306924820012902443977509 -0.172599305212497722283870871252 -0.302952611446380637438835492503 +0.829716306924820012902443977509 0.172599305212497722283870871252 -0.302952611446380637438835492503 +0.830157616734504721911491742503 -0.0351058507338166195244077982807 -0.179182551801204681396484375 +0.830157616734504721911491742503 0.0351058507338166195244077982807 -0.179182551801204681396484375 +0.830375218391418479235710492503 -0.136853405833244318179353626874 -0.1193663515150547027587890625 +0.830375218391418479235710492503 0.136853405833244318179353626874 -0.1193663515150547027587890625 +0.83045937120914459228515625 -0.103012352064251896943680719687 0.149083201587200148141576505623 +0.83045937120914459228515625 0.103012352064251896943680719687 0.149083201587200148141576505623 +0.830601990222930908203125 -0.552416026592254638671875 0.0702629983425140380859375 +0.830601990222930908203125 0.552416026592254638671875 0.0702629983425140380859375 +0.83075797557830810546875 -0.13174800574779510498046875 0.5408170223236083984375 +0.83075797557830810546875 0.13174800574779510498046875 0.5408170223236083984375 +0.830853998661041259765625 -0.553368985652923583984375 -0.058866001665592193603515625 +0.830853998661041259765625 0.553368985652923583984375 -0.058866001665592193603515625 +0.830993977189063981469985264994 -0.168490394204854954107730691248 -0.0596682995557785006424111884371 +0.830993977189063981469985264994 0.168490394204854954107730691248 -0.0596682995557785006424111884371 +0.83106601238250732421875 -0.5042049884796142578125 -0.23474900424480438232421875 +0.83106601238250732421875 0.5042049884796142578125 -0.23474900424480438232421875 +0.831492894887924216540397992503 -0.3444119989871978759765625 0 +0.831492894887924216540397992503 0.3444119989871978759765625 0 +0.831794720888137772973891514994 -0.16768120229244232177734375 0.0500037999823689446876606723436 +0.831794720888137772973891514994 0.16768120229244232177734375 0.0500037999823689446876606723436 +0.832130014896392822265625 -0.4223580062389373779296875 -0.3594079911708831787109375 +0.832130014896392822265625 0.4223580062389373779296875 -0.3594079911708831787109375 +0.832162955403327853076689279987 -0.275428758561611142230418636245 -0.366256354749202706067023882497 +0.832162955403327853076689279987 0.275428758561611142230418636245 -0.366256354749202706067023882497 +0.832385003566741943359375 -0.2060990035533905029296875 -0.51444900035858154296875 +0.832385003566741943359375 0.2060990035533905029296875 -0.51444900035858154296875 +0.833111324906349204333366742503 -0.135669351369142515695287443123 0.100094298645853993501297907187 +0.833111324906349204333366742503 0.135669351369142515695287443123 0.100094298645853993501297907187 +0.834684270620346002722556022491 -0.10486384667456150054931640625 -0.441368100047111466821547764994 +0.834684270620346002722556022491 0.10486384667456150054931640625 -0.441368100047111466821547764994 +0.83512882888317108154296875 -0.266301158070564258917301003748 0.366255392134189561303969639994 +0.83512882888317108154296875 0.266301158070564258917301003748 0.366255392134189561303969639994 +0.835874688625335648950454014994 -0.0345754498615860952903666714064 0.150393054634332640207006193123 +0.835874688625335648950454014994 0.0345754498615860952903666714064 0.150393054634332640207006193123 +0.838391375541687078332131477509 -0.110455197840929039698742997189 -0.308057391643524192126335492503 +0.838391375541687078332131477509 0.110455197840929039698742997189 -0.308057391643524192126335492503 +0.838593506813049227588408029987 -0.06246914900839328765869140625 0.441993205249309517590461382497 +0.838593506813049227588408029987 0.06246914900839328765869140625 0.441993205249309517590461382497 +0.838707765936851479260383257497 -0.0699737012386321965973223768742 -0.11905014514923095703125 +0.838707765936851479260383257497 0.0699737012386321965973223768742 -0.11905014514923095703125 +0.838921010494232177734375 -0.3037990033626556396484375 0.45157301425933837890625 +0.838921010494232177734375 0.3037990033626556396484375 0.45157301425933837890625 +0.838958281278610162878806022491 -0.0391856011003255816360635321871 -0.443973955512046769555922764994 +0.838958281278610162878806022491 0.0391856011003255816360635321871 -0.443973955512046769555922764994 +0.839535665512084916528579014994 -0.132967202365398412533536998126 0 +0.839535665512084916528579014994 0.132967202365398412533536998126 0 +0.83960402011871337890625 -0.316772997379302978515625 -0.441271007061004638671875 +0.83960402011871337890625 0.316772997379302978515625 -0.441271007061004638671875 +0.8396070003509521484375 -0.46026098728179931640625 -0.2884779870510101318359375 +0.8396070003509521484375 0.46026098728179931640625 -0.2884779870510101318359375 +0.840591913461685158459602007497 -0.168686994910240167788728626874 0.273770096898078907354801003748 +0.840591913461685158459602007497 0.168686994910240167788728626874 0.273770096898078907354801003748 +0.8407281339168548583984375 -0.421756291389465298724559261245 0.1334094516932964324951171875 +0.8407281339168548583984375 0.421756291389465298724559261245 0.1334094516932964324951171875 +0.841296845674514792712272992503 -0.0689698521047830553909463446871 0.0998155012726783669174679403113 +0.841296845674514792712272992503 0.0689698521047830553909463446871 0.0998155012726783669174679403113 +0.841564604640007041247429242503 0 -0.119455596059560770205720814374 +0.841611582040786787572983485006 -0.20920680463314056396484375 -0.240670806169509893246427623126 +0.841611582040786787572983485006 0.20920680463314056396484375 -0.240670806169509893246427623126 +0.841767767071723960192741742503 -0.1017909012734889984130859375 -0.05971249751746654510498046875 +0.841767767071723960192741742503 0.1017909012734889984130859375 -0.05971249751746654510498046875 +0.842208319902420066149772992503 -0.0729764968156814547439736884371 0.308804386854171775134147992503 +0.842208319902420066149772992503 0.0729764968156814547439736884371 0.308804386854171775134147992503 +0.842424827814102106238181022491 -0.424624346196651458740234375 -0.111870098486542696170076283124 +0.842424827814102106238181022491 0.424624346196651458740234375 -0.111870098486542696170076283124 +0.842468145489692621374899772491 -0.101215447485446932707198186563 0.0500292997807264341880717495314 +0.842468145489692621374899772491 0.101215447485446932707198186563 0.0500292997807264341880717495314 +0.84251499176025390625 -0.137950003147125244140625 -0.520708978176116943359375 +0.84251499176025390625 0.137950003147125244140625 -0.520708978176116943359375 +0.842547419667243890906149772491 -0.163903495669364934750333873126 0.407123439013957977294921875 +0.842547419667243890906149772491 0.163903495669364934750333873126 0.407123439013957977294921875 +0.843554681539535500256477007497 -0.307287892699241671490284488755 0.0631592966616153772552166856258 +0.843554681539535500256477007497 0.307287892699241671490284488755 0.0631592966616153772552166856258 +0.843794095516204878393295985006 -0.308559608459472667352230246252 -0.052934400737285614013671875 +0.843794095516204878393295985006 0.308559608459472667352230246252 -0.052934400737285614013671875 +0.843946722149848893579360264994 -0.306031110882759083136051003748 0.310802963376045238153011496252 +0.843946722149848893579360264994 0.306031110882759083136051003748 0.310802963376045238153011496252 +0.844079765677452020788962272491 0 0.100146146863698951023913252811 +0.844200021028518654553352007497 -0.0371250014752149623542543110943 -0.3097557127475738525390625 +0.844200021028518654553352007497 0.0371250014752149623542543110943 -0.3097557127475738525390625 +0.844720041751861550061164507497 -0.314071890711784373895198996252 -0.300511589646339394299445757497 +0.844720041751861550061164507497 0.314071890711784373895198996252 -0.300511589646339394299445757497 +0.844990199804306008068977007497 0 0.30982410907745361328125 +0.846457618474960260535056022491 -0.431287652254104592053352007497 0 +0.846457618474960260535056022491 0.431287652254104592053352007497 0 +0.846659004688262939453125 -0.51337301731109619140625 0.140058994293212890625 +0.846659004688262939453125 0.51337301731109619140625 0.140058994293212890625 +0.8467400074005126953125 -0.19601400196552276611328125 0.4945810139179229736328125 +0.8467400074005126953125 0.19601400196552276611328125 0.4945810139179229736328125 +0.847172039747238092566306022491 -0.0351041503250598893592915317186 -0.059723548591136932373046875 +0.847172039747238092566306022491 0.0351041503250598893592915317186 -0.059723548591136932373046875 +0.847281277179718017578125 -0.209108293056488037109375 -0.375351651012897469250617632497 +0.847281277179718017578125 0.209108293056488037109375 -0.375351651012897469250617632497 +0.847379457950591996606704014994 -0.06668930314481258392333984375 0 +0.847379457950591996606704014994 0.06668930314481258392333984375 0 +0.847708189487457297595085492503 -0.243560698628425609246761496252 -0.179076598584651941470369251874 +0.847708189487457297595085492503 0.243560698628425609246761496252 -0.179076598584651941470369251874 +0.847813493013381935803352007497 -0.206007304787635819876001619377 0.220846505463123315982088001874 +0.847813493013381935803352007497 0.206007304787635819876001619377 0.220846505463123315982088001874 +0.847821450233459450451789507497 -0.0345737494528293581863565009371 0.0500361014157533617874307196871 +0.847821450233459450451789507497 0.0345737494528293581863565009371 0.0500361014157533617874307196871 +0.847892084717750460498564279987 -0.379776763916015613897769753748 0.1983618997037410736083984375 +0.847892084717750460498564279987 0.379776763916015613897769753748 0.1983618997037410736083984375 +0.848287999629974365234375 -0.06581699848175048828125 0.5254290103912353515625 +0.848287999629974365234375 0.06581699848175048828125 0.5254290103912353515625 +0.848429024219512939453125 -0.516117990016937255859375 -0.11743099987506866455078125 +0.848429024219512939453125 0.516117990016937255859375 -0.11743099987506866455078125 +0.848445314168930098119858485006 -0.276889505982398975714176003748 -0.116073895990848538484208063437 +0.848445314168930098119858485006 0.276889505982398975714176003748 -0.116073895990848538484208063437 +0.848506742715835482471220529987 -0.343509563803672757220653011245 0.254041406512260425909488503748 +0.848506742715835482471220529987 0.343509563803672757220653011245 0.254041406512260425909488503748 +0.848612010478973388671875 -0.06914000213146209716796875 -0.524478018283843994140625 +0.848612010478973388671875 0.06914000213146209716796875 -0.524478018283843994140625 +0.849159908294677800988381477509 -0.27468810975551605224609375 0.116073895990848538484208063437 +0.849159908294677800988381477509 0.27468810975551605224609375 0.116073895990848538484208063437 +0.849703726172447160180922764994 0 0.424854241311550140380859375 +0.849999999999999977795539507497 0 0 +0.8506043851375579833984375 -0.240640202164649957827791126874 0.169011904299259191342130748126 +0.8506043851375579833984375 0.240640202164649957827791126874 0.169011904299259191342130748126 +0.850647985935211181640625 0 -0.52573597431182861328125 +0.850924015045166015625 -0.34615099430084228515625 0.3951059877872467041015625 +0.850924015045166015625 0.34615099430084228515625 0.3951059877872467041015625 +0.851818478107452370373664507497 -0.350087338685989346576121761245 -0.233116704225540150030582253748 +0.851818478107452370373664507497 0.350087338685989346576121761245 -0.233116704225540150030582253748 +0.852298200130462646484375 -0.3851575553417205810546875 -0.166556844860315328427091685626 +0.852298200130462646484375 0.3851575553417205810546875 -0.166556844860315328427091685626 +0.852491694688797041479233485006 -0.146212202310562144891292746252 -0.248756405711174022332698996252 +0.852491694688797041479233485006 0.146212202310562144891292746252 -0.248756405711174022332698996252 +0.852641999721527099609375 -0.5224959850311279296875 0 +0.852641999721527099609375 0.5224959850311279296875 0 +0.854813683032989546362045985006 -0.109027799963951108064286188437 0.259628391265869173931690738755 +0.854813683032989546362045985006 0.109027799963951108064286188437 0.259628391265869173931690738755 +0.85547602176666259765625 -0.3582240045070648193359375 -0.3739469945430755615234375 +0.85547602176666259765625 0.3582240045070648193359375 -0.3739469945430755615234375 +0.8559521734714508056640625 -0.278111708164215098992855246252 0 +0.8559521734714508056640625 0.278111708164215098992855246252 0 +0.857083022594451904296875 -0.47091400623321533203125 0.20892299711704254150390625 +0.857083022594451904296875 0.47091400623321533203125 0.20892299711704254150390625 +0.857271015644073486328125 -0.2473219931125640869140625 -0.4515739977359771728515625 +0.857271015644073486328125 0.2473219931125640869140625 -0.4515739977359771728515625 +0.857522255182266213147102007497 -0.202369945496320702282844194997 0.355247747898101817742855246252 +0.857522255182266213147102007497 0.202369945496320702282844194997 0.355247747898101817742855246252 +0.85804472863674163818359375 -0.143969649821519857235685435626 -0.381485801935195878442641514994 +0.85804472863674163818359375 0.143969649821519857235685435626 -0.381485801935195878442641514994 +0.85856401920318603515625 -0.3867270052433013916015625 0.33661401271820068359375 +0.85856401920318603515625 0.3867270052433013916015625 0.33661401271820068359375 +0.859062212705612116003806022491 -0.101168353483080855625964034061 0.392781296372413601947215511245 +0.859062212705612116003806022491 0.101168353483080855625964034061 0.392781296372413601947215511245 +0.860541325807571477746193977509 -0.0365778006613254533241352817186 0.2610189020633697509765625 +0.860541325807571477746193977509 0.0365778006613254533241352817186 0.2610189020633697509765625 +0.861094826459884665759147992503 -0.0733500011265277862548828125 -0.251266497373580921514957253748 +0.861094826459884665759147992503 0.0733500011265277862548828125 -0.251266497373580921514957253748 +0.861336010694503828588608485006 -0.181067401170730585269197376874 -0.187921799719333648681640625 +0.861336010694503828588608485006 0.181067401170730585269197376874 -0.187921799719333648681640625 +0.86136400699615478515625 0 0.50798702239990234375 +0.861656010150909423828125 -0.4762209951877593994140625 -0.17539300024509429931640625 +0.861656010150909423828125 0.4762209951877593994140625 -0.17539300024509429931640625 +0.86180400848388671875 -0.425321996212005615234375 0.2763960063457489013671875 +0.86180400848388671875 0.425321996212005615234375 0.2763960063457489013671875 +0.862070837616920382373564279987 -0.393555550277233101574836382497 0.0666880995035171453277911268742 +0.862070837616920382373564279987 0.393555550277233101574836382497 0.0666880995035171453277911268742 +0.862263700366020180432258257497 -0.394813348352909043725844639994 -0.0558865999802947016616982978121 +0.862263700366020180432258257497 0.394813348352909043725844639994 -0.0558865999802947016616982978121 +0.86264942586421966552734375 -0.248469649255275704113898882497 -0.310802963376045238153011496252 +0.86264942586421966552734375 0.248469649255275704113898882497 -0.310802963376045238153011496252 +0.863072097301483154296875 -0.247221001982688898257478626874 -0.0631592966616153772552166856258 +0.863072097301483154296875 0.247221001982688898257478626874 -0.0631592966616153772552166856258 +0.8633277118206024169921875 -0.144558003544807439633146373126 0.209209500253200536556974498126 +0.8633277118206024169921875 0.144558003544807439633146373126 0.209209500253200536556974498126 +0.863969403505325361791733485006 0 -0.252105304598808310778679242503 +0.864012587070465132299545985006 -0.246332708001136796438501619377 0.052934400737285614013671875 +0.864012587070465132299545985006 0.246332708001136796438501619377 0.052934400737285614013671875 +0.864629185199737526623664507497 -0.07812894880771636962890625 -0.385761737823486328125 +0.864629185199737526623664507497 0.07812894880771636962890625 -0.385761737823486328125 +0.864870303869247458727897992503 -0.214806599915027623959318248126 -0.125928895175456995181306751874 +0.864870303869247458727897992503 0.214806599915027623959318248126 -0.125928895175456995181306751874 +0.86545002460479736328125 -0.2372269928455352783203125 0.44126999378204345703125 +0.86545002460479736328125 0.2372269928455352783203125 0.44126999378204345703125 +0.865786015987396240234375 -0.397345006465911865234375 -0.30419099330902099609375 +0.865786015987396240234375 0.397345006465911865234375 -0.30419099330902099609375 +0.86680901050567626953125 -0.13120000064373016357421875 0.4810700118541717529296875 +0.86680901050567626953125 0.13120000064373016357421875 0.4810700118541717529296875 +0.867568501830100924365751779987 0 -0.387073697149753537249949886245 +0.867709797620773382043068977509 -0.179395204782485967465177623126 0.1577897965908050537109375 +0.867709797620773382043068977509 0.179395204782485967465177623126 0.1577897965908050537109375 +0.867938375473022438733039507497 -0.213374702632427221127286998126 0.105614997446537017822265625 +0.867938375473022438733039507497 0.213374702632427221127286998126 0.105614997446537017822265625 +0.868001678586006075732939279987 -0.242418141663074487857088001874 0.300510655343532551153629128748 +0.868001678586006075732939279987 0.242418141663074487857088001874 0.300510655343532551153629128748 +0.869913995265960693359375 -0.1795929968357086181640625 -0.4593439996242523193359375 +0.869913995265960693359375 0.1795929968357086181640625 -0.4593439996242523193359375 +0.870464980602264404296875 -0.433883011341094970703125 -0.2324559986591339111328125 +0.870464980602264404296875 0.433883011341094970703125 -0.2324559986591339111328125 +0.871436911821365289831931022491 -0.0386080002412199987937846401564 0.3763082921504974365234375 +0.871436911821365289831931022491 0.0386080002412199987937846401564 0.3763082921504974365234375 +0.871573984622955322265625 -0.485204994678497314453125 0.070249997079372406005859375 +0.871573984622955322265625 0.485204994678497314453125 0.070249997079372406005859375 +0.871839916706085182873664507497 -0.0725148014724254635909872490629 0.211272293329238886050447376874 +0.871839916706085182873664507497 0.0725148014724254635909872490629 0.211272293329238886050447376874 +0.87184202671051025390625 -0.486236989498138427734375 -0.0588590018451213836669921875 +0.87184202671051025390625 0.486236989498138427734375 -0.0588590018451213836669921875 +0.871843475103378229285056022491 -0.353156806528568234515574886245 0.132924944907426817453099943123 +0.871843475103378229285056022491 0.353156806528568234515574886245 0.132924944907426817453099943123 +0.872328972816467262951789507497 -0.286192238330841064453125 -0.244205094873905181884765625 +0.872328972816467262951789507497 0.286192238330841064453125 -0.244205094873905181884765625 +0.873172813653945945056022992503 -0.110519101470708855372571122189 -0.188029798865318314993189119377 +0.873172813653945945056022992503 0.110519101470708855372571122189 -0.188029798865318314993189119377 +0.873576295375823930200454014994 -0.356282304227352131231754128748 -0.1114824973046779632568359375 +0.873576295375823930200454014994 0.356282304227352131231754128748 -0.1114824973046779632568359375 +0.873950582742690995630141514994 -0.281201900541782345843699886245 0.244205094873905181884765625 +0.873950582742690995630141514994 0.281201900541782345843699886245 0.244205094873905181884765625 +0.874683916568756103515625 0 0.21196170151233673095703125 +0.875028824806213356701789507497 -0.317953607439994789807258257497 0.189025298506021482980443693123 +0.875028824806213356701789507497 0.317953607439994789807258257497 0.189025298506021482980443693123 +0.875133883953094549035256477509 -0.210097794234752666131527121252 0 +0.875133883953094549035256477509 0.210097794234752666131527121252 0 +0.875391730666160494678251779987 -0.140041401982307439633146373126 0.341435694694519009662059261245 +0.875391730666160494678251779987 0.140041401982307439633146373126 0.341435694694519009662059261245 +0.875689122080802850867087272491 -0.322243812680244434698551003748 -0.178401454538106907232730691248 +0.875689122080802850867087272491 0.322243812680244434698551003748 -0.178401454538106907232730691248 +0.875811657309532143322883257497 -0.182188155502080895153937944997 -0.319783312082290660516292746252 +0.875811657309532143322883257497 0.182188155502080895153937944997 -0.319783312082290660516292746252 +0.875961005687713623046875 -0.2899250090122222900390625 -0.3855330049991607666015625 +0.875961005687713623046875 0.2899250090122222900390625 -0.3855330049991607666015625 +0.877686944603919938501235264994 -0.36354599893093109130859375 0 +0.877686944603919938501235264994 0.36354599893093109130859375 0 +0.87861502170562744140625 -0.110382996499538421630859375 -0.464598000049591064453125 +0.87861502170562744140625 0.110382996499538421630859375 -0.464598000049591064453125 +0.878990417718887306897102007497 -0.0371709007769823115974183735943 -0.18972270190715789794921875 +0.878990417718887306897102007497 0.0371709007769823115974183735943 -0.18972270190715789794921875 +0.879082977771759033203125 -0.280317008495330810546875 0.3855319917201995849609375 +0.879082977771759033203125 0.280317008495330810546875 0.3855319917201995849609375 +0.879220819473266579358039507497 -0.144903606176376348324552623126 -0.126387901604175567626953125 +0.879220819473266579358039507497 0.144903606176376348324552623126 -0.126387901604175567626953125 +0.8793099224567413330078125 -0.109071902185678484831221624063 0.157852801680564897024439119377 +0.8793099224567413330078125 0.109071902185678484831221624063 0.157852801680564897024439119377 +0.879875975847244307104233485006 -0.178401593863964091912777121252 -0.0631781995296478299239950615629 +0.879875975847244307104233485006 0.178401593863964091912777121252 -0.0631781995296478299239950615629 +0.880723822116851851049545985006 -0.1775448024272918701171875 0.0529451999813318266441264370314 +0.880723822116851851049545985006 0.1775448024272918701171875 0.0529451999813318266441264370314 +0.882117873430252052990852007497 -0.143649901449680345022485994377 0.105982198566198351774580999063 +0.882117873430252052990852007497 0.143649901449680345022485994377 0.105982198566198351774580999063 +0.882730007171630859375 -0.065756998956203460693359375 0.4652560055255889892578125 +0.882730007171630859375 0.065756998956203460693359375 0.4652560055255889892578125 +0.88311398029327392578125 -0.041248001158237457275390625 -0.467341005802154541015625 +0.88311398029327392578125 0.041248001158237457275390625 -0.467341005802154541015625 +0.884968674182891823498664507497 -0.116591597720980641450516657187 -0.325171691179275523797542746252 +0.884968674182891823498664507497 0.116591597720980641450516657187 -0.325171691179275523797542746252 +0.88497698307037353515625 -0.443953990936279296875 0.14043100178241729736328125 +0.88497698307037353515625 0.443953990936279296875 0.14043100178241729736328125 +0.885043787956237837377670985006 -0.0366092998534440980384907504686 0.159239704906940476858423494377 +0.885043787956237837377670985006 0.0366092998534440980384907504686 0.159239704906940476858423494377 +0.88676297664642333984375 -0.4469729959964752197265625 -0.117757998406887054443359375 +0.88676297664642333984375 0.4469729959964752197265625 -0.117757998406887054443359375 +0.886892020702362060546875 -0.172529995441436767578125 0.4285509884357452392578125 +0.886892020702362060546875 0.172529995441436767578125 0.4285509884357452392578125 +0.887291464209556512976462272491 -0.178058494627475721872045255623 0.288979546725749936175731136245 +0.887291464209556512976462272491 0.178058494627475721872045255623 0.288979546725749936175731136245 +0.888043516874313376696647992503 -0.0740898013114929254729901231258 -0.1260530948638916015625 +0.888043516874313376696647992503 0.0740898013114929254729901231258 -0.1260530948638916015625 +0.888364970684051513671875 -0.322138011455535888671875 0.327161014080047607421875 +0.888364970684051513671875 0.322138011455535888671875 0.327161014080047607421875 +0.888367781043052584522001779987 -0.220829404890537261962890625 -0.254041406512260425909488503748 +0.888367781043052584522001779987 0.220829404890537261962890625 -0.254041406512260425909488503748 +0.888920116424560591283920985006 -0.140788802504539484194978626874 0 +0.888920116424560591283920985006 0.140788802504539484194978626874 0 +0.888997671008110001977797764994 -0.0770307466387748634994991903113 0.325960186123847972528011496252 +0.888997671008110001977797764994 0.0770307466387748634994991903113 0.325960186123847972528011496252 +0.8891789913177490234375 -0.330601990222930908203125 -0.316327989101409912109375 +0.8891789913177490234375 0.330601990222930908203125 -0.316327989101409912109375 +0.890418830513954095984274772491 -0.324359442293643940313785378748 0.0666681464761495617965536553129 +0.890418830513954095984274772491 0.324359442293643940313785378748 0.0666681464761495617965536553129 +0.890671545267105013721220529987 -0.325701808929443337170539507497 -0.0558752007782459259033203125 +0.890671545267105013721220529987 0.325701808929443337170539507497 -0.0558752007782459259033203125 +0.890784895420074440686164507497 -0.0730269022285938290695028740629 0.105687001347541817408703934689 +0.890784895420074440686164507497 0.0730269022285938290695028740629 0.105687001347541817408703934689 +0.89100801944732666015625 -0.45398700237274169921875 0 +0.89100801944732666015625 0.45398700237274169921875 0 +0.891068404912948586193977007497 0 -0.126482395827770238705411998126 +0.891100022196769647742087272491 -0.0391875015571713433693012973436 -0.32696436345577239990234375 +0.891100022196769647742087272491 0.0391875015571713433693012973436 -0.32696436345577239990234375 +0.891283518075942970959602007497 -0.107778601348400115966796875 -0.0632249973714351654052734375 +0.891283518075942970959602007497 0.107778601348400115966796875 -0.0632249973714351654052734375 +0.8918750286102294921875 -0.2201139926910400390625 -0.3951070010662078857421875 +0.8918750286102294921875 0.2201139926910400390625 -0.3951070010662078857421875 +0.891934099793434076453024772491 0 0.327036559581756591796875 +0.892025095224380559777443977509 -0.107169297337532040681473688437 0.0529721997678279862831196567186 +0.892025095224380559777443977509 0.107169297337532040681473688437 0.0529721997678279862831196567186 +0.892517983913421630859375 -0.3997650146484375 0.20880199968814849853515625 +0.892517983913421630859375 0.3997650146484375 0.20880199968814849853515625 +0.89316499233245849609375 -0.361589014530181884765625 0.267412006855010986328125 +0.89316499233245849609375 0.361589014530181884765625 0.267412006855010986328125 +0.893731516599655217980568977509 0 0.106037096679210671168469559689 +0.894424974918365478515625 0 0.4472149908542633056640625 +0.894803088903427079614516514994 -0.257091848552226998059211382497 -0.189025298506021482980443693123 +0.894803088903427079614516514994 0.257091848552226998059211382497 -0.189025298506021482980443693123 +0.894914242625236444617087272491 -0.217452155053615564517244251874 0.233115755766630156076146818123 +0.894914242625236444617087272491 0.217452155053615564517244251874 0.233115755766630156076146818123 +0.895581164956092745654814279987 -0.292272256314754452777293636245 -0.122522445768117896336413252811 +0.895581164956092745654814279987 0.292272256314754452777293636245 -0.122522445768117896336413252811 +0.896335458755493141858039507497 -0.289948560297489166259765625 0.122522445768117896336413252811 +0.896335458755493141858039507497 0.289948560297489166259765625 0.122522445768117896336413252811 +0.8966510295867919921875 -0.36851298809051513671875 -0.24538600444793701171875 +0.8966510295867919921875 0.36851298809051513671875 -0.24538600444793701171875 +0.897005689144134588097756477509 -0.0371691003441810621787944057814 -0.06323669850826263427734375 +0.897005689144134588097756477509 0.0371691003441810621787944057814 -0.06323669850826263427734375 +0.8971560001373291015625 -0.40542900562286376953125 -0.17532299458980560302734375 +0.8971560001373291015625 0.40542900562286376953125 -0.17532299458980560302734375 +0.897225308418273970190170985006 -0.0706122033298015594482421875 0 +0.897225308418273970190170985006 0.0706122033298015594482421875 0 +0.897693300247192405016960492503 -0.0366074994206428555587606865629 0.0529794014990329770187216240629 +0.897693300247192405016960492503 0.0366074994206428555587606865629 0.0529794014990329770187216240629 +0.89786018431186676025390625 -0.254009102284908305779964621252 0.178401454538106907232730691248 +0.89786018431186676025390625 0.254009102284908305779964621252 0.178401454538106907232730691248 +0.899852344393730074756376779987 -0.154335102438926702328458873126 -0.262576206028461434094367632497 +0.899852344393730074756376779987 0.154335102438926702328458873126 -0.262576206028461434094367632497 +0.900000000000000022204460492503 0 0 +0.902303332090377718799345529987 -0.115084899961948386448717940311 0.274052190780639637335269753748 +0.902303332090377718799345529987 0.115084899961948386448717940311 0.274052190780639637335269753748 +0.90265500545501708984375 -0.21302099525928497314453125 0.3739449977874755859375 +0.90265500545501708984375 0.21302099525928497314453125 0.3739449977874755859375 +0.903204977512359619140625 -0.15154699981212615966796875 -0.40156400203704833984375 +0.903204977512359619140625 0.15154699981212615966796875 -0.40156400203704833984375 +0.90350507199764251708984375 -0.293562358617782570568977007497 0 +0.90350507199764251708984375 0.293562358617782570568977007497 0 +0.90427601337432861328125 -0.106493003666400909423828125 0.413453996181488037109375 +0.90427601337432861328125 0.106493003666400909423828125 0.413453996181488037109375 +0.907442986965179443359375 -0.4142690002918243408203125 0.070197999477386474609375 +0.907442986965179443359375 0.4142690002918243408203125 0.070197999477386474609375 +0.907646000385284423828125 -0.4155929982662200927734375 -0.0588279999792575836181640625 +0.907646000385284423828125 0.4155929982662200927734375 -0.0588279999792575836181640625 +0.908052027225494384765625 -0.2615469992160797119140625 -0.327161014080047607421875 +0.908052027225494384765625 0.2615469992160797119140625 -0.327161014080047607421875 +0.908349177241325356213508257497 -0.0386099006980657535881285014057 0.27551995217800140380859375 +0.908349177241325356213508257497 0.0386099006980657535881285014057 0.27551995217800140380859375 +0.908933427929878190454360264994 -0.07742500118911266326904296875 -0.265225747227668728900340511245 +0.908933427929878190454360264994 0.07742500118911266326904296875 -0.265225747227668728900340511245 +0.909188011288642794482939279987 -0.191126701235771162545873380623 -0.1983618997037410736083984375 +0.909188011288642794482939279987 0.191126701235771162545873380623 -0.1983618997037410736083984375 +0.9101359844207763671875 -0.082240998744964599609375 -0.4060649871826171875 +0.9101359844207763671875 0.082240998744964599609375 -0.4060649871826171875 +0.9110205471515655517578125 -0.260955502092838298455745871252 -0.0666681464761495617965536553129 +0.9110205471515655517578125 0.260955502092838298455745871252 -0.0666681464761495617965536553129 +0.91129036247730255126953125 -0.152589003741741169317691628748 0.220832250267267216070621316248 +0.91129036247730255126953125 0.152589003741741169317691628748 0.220832250267267216070621316248 +0.911967703700065523975126779987 0 -0.266111154854297649041683371252 +0.912013286352157503955595529987 -0.260017858445644345355418636245 0.0558752007782459259033203125 +0.912013286352157503955595529987 0.260017858445644345355418636245 0.0558752007782459259033203125 +0.912918654084205583032485264994 -0.226740299910306919439761941248 -0.132924944907426817453099943123 +0.912918654084205583032485264994 0.226740299910306919439761941248 -0.132924944907426817453099943123 +0.913230001926422119140625 0 -0.4074459969997406005859375 +0.913685977458953857421875 -0.2551769912242889404296875 0.3163270056247711181640625 +0.913685977458953857421875 0.2551769912242889404296875 0.3163270056247711181640625 +0.915915897488594032971320757497 -0.189361605048179615362613503748 0.16655589640140533447265625 +0.915915897488594032971320757497 0.189361605048179615362613503748 0.16655589640140533447265625 +0.916157174110412531042868522491 -0.225228852778673160894840066248 0.1114824973046779632568359375 +0.916157174110412531042868522491 0.225228852778673160894840066248 0.1114824973046779632568359375 +0.91730201244354248046875 -0.0406400002539157867431640625 0.39611399173736572265625 +0.91730201244354248046875 0.0406400002539157867431640625 0.39611399173736572265625 +0.91772997379302978515625 -0.3717440068721771240234375 0.13992099463939666748046875 +0.91772997379302978515625 0.3717440068721771240234375 0.13992099463939666748046875 +0.918241024017333984375 -0.3012549877166748046875 -0.2570579946041107177734375 +0.918241024017333984375 0.3012549877166748046875 -0.2570579946041107177734375 +0.9195539951324462890625 -0.3750340044498443603515625 -0.11734999716281890869140625 +0.9195539951324462890625 0.3750340044498443603515625 -0.11734999716281890869140625 +0.91994798183441162109375 -0.2960020005702972412109375 0.2570579946041107177734375 +0.91994798183441162109375 0.2960020005702972412109375 0.2570579946041107177734375 +0.920275467634200983191306022491 -0.0765434015542268697540606581242 0.223009642958641035592748380623 +0.920275467634200983191306022491 0.0765434015542268697540606581242 0.223009642958641035592748380623 +0.921082973480224609375 -0.334688007831573486328125 0.19897399842739105224609375 +0.921082973480224609375 0.334688007831573486328125 0.19897399842739105224609375 +0.921464979648590087890625 -0.147412002086639404296875 0.359405994415283203125 +0.921464979648590087890625 0.147412002086639404296875 0.359405994415283203125 +0.921682414412498429712172764994 -0.116659051552414891328446344687 -0.198475898802280420474275501874 +0.921682414412498429712172764994 0.116659051552414891328446344687 -0.198475898802280420474275501874 +0.921778023242950439453125 -0.339204013347625732421875 -0.18779100477695465087890625 +0.921778023242950439453125 0.339204013347625732421875 -0.18779100477695465087890625 +0.921907007694244384765625 -0.19177700579166412353515625 -0.33661401271820068359375 +0.921907007694244384765625 0.19177700579166412353515625 -0.33661401271820068359375 +0.9232774674892425537109375 0 0.223737351596355438232421875 +0.923752433061599709240852007497 -0.221769893914461113659797319997 0 +0.923752433061599709240852007497 0.221769893914461113659797319997 0 +0.923880994319915771484375 -0.382679998874664306640625 0 +0.923880994319915771484375 0.382679998874664306640625 0 +0.927823218703269891882712272491 -0.0392359508201479897926411410936 -0.200262852013111114501953125 +0.927823218703269891882712272491 0.0392359508201479897926411410936 -0.200262852013111114501953125 +0.928066420555114679480368522491 -0.152953806519508350714176003748 -0.1334094516932964324951171875 +0.928066420555114679480368522491 0.152953806519508350714176003748 -0.1334094516932964324951171875 +0.92816047370433807373046875 -0.115131452307105058840974720624 0.166622401773929590396150501874 +0.92816047370433807373046875 0.115131452307105058840974720624 0.166622401773929590396150501874 +0.928757974505424410693876779987 -0.188312793523073174206672319997 -0.0666880995035171453277911268742 +0.928757974505424410693876779987 0.188312793523073174206672319997 -0.0666880995035171453277911268742 +0.929652923345565707080595529987 -0.18740840256214141845703125 0.0558865999802947016616982978121 +0.929652923345565707080595529987 0.18740840256214141845703125 0.0558865999802947016616982978121 +0.931124421954154901648337272491 -0.151630451530218118838533314374 0.111870098486542696170076283124 +0.931124421954154901648337272491 0.151630451530218118838533314374 0.111870098486542696170076283124 +0.9315459728240966796875 -0.122727997601032257080078125 -0.34228599071502685546875 +0.9315459728240966796875 0.122727997601032257080078125 -0.34228599071502685546875 +0.933991014957427978515625 -0.1874299943447113037109375 0.3041889965534210205078125 +0.933991014957427978515625 0.1874299943447113037109375 0.3041889965534210205078125 +0.934212887287139803760283029987 -0.0386431498453021007866148295307 0.168086355179548257998689564374 +0.934212887287139803760283029987 0.0386431498453021007866148295307 0.168086355179548257998689564374 +0.935123980045318603515625 -0.2324520051479339599609375 -0.267412006855010986328125 +0.935123980045318603515625 0.2324520051479339599609375 -0.267412006855010986328125 +0.935787022113800048828125 -0.0810849964618682861328125 0.343115985393524169921875 +0.935787022113800048828125 0.0810849964618682861328125 0.343115985393524169921875 +0.937282979488372802734375 -0.3414309918880462646484375 0.070176996290683746337890625 +0.937282979488372802734375 0.3414309918880462646484375 0.070176996290683746337890625 +0.937379267811775163110610264994 -0.0782059013843536404708700615629 -0.13305604457855224609375 +0.937379267811775163110610264994 0.0782059013843536404708700615629 -0.13305604457855224609375 +0.93754899501800537109375 -0.3428440093994140625 -0.05881600081920623779296875 +0.93754899501800537109375 0.3428440093994140625 -0.05881600081920623779296875 +0.938000023365020751953125 -0.0412500016391277313232421875 -0.344173014163970947265625 +0.938000023365020751953125 0.0412500016391277313232421875 -0.344173014163970947265625 +0.938304567337036043994658029987 -0.148610402643680555856420255623 0 +0.938304567337036043994658029987 0.148610402643680555856420255623 0 +0.938877999782562255859375 0 0.3442490100860595703125 +0.940272945165634088660056022491 -0.0770839523524045888702715956242 0.111558501422405240144364313437 +0.940272945165634088660056022491 0.0770839523524045888702715956242 0.111558501422405240144364313437 +0.940572205185890131140524772491 0 -0.133509195595979679449527566248 +0.940799269080161981726462272491 -0.1137663014233112335205078125 -0.06673749722540378570556640625 +0.940799269080161981726462272491 0.1137663014233112335205078125 -0.06673749722540378570556640625 +0.941582044959068276135383257497 -0.113123147189617148655749190311 0.0559150997549295383781675639057 +0.941582044959068276135383257497 0.113123147189617148655749190311 0.0559150997549295383781675639057 +0.94189798831939697265625 -0.2706229984760284423828125 -0.19897399842739105224609375 +0.94189798831939697265625 0.2706229984760284423828125 -0.19897399842739105224609375 +0.942014992237091064453125 -0.2288970053195953369140625 0.24538500607013702392578125 +0.942014992237091064453125 0.2288970053195953369140625 0.24538500607013702392578125 +0.942717015743255615234375 -0.3076550066471099853515625 -0.12897099554538726806640625 +0.942717015743255615234375 0.3076550066471099853515625 -0.12897099554538726806640625 +0.943383267521858193127570757497 0 0.111928046494722363557450250937 +0.94351100921630859375 -0.3052090108394622802734375 0.12897099554538726806640625 +0.94351100921630859375 0.3052090108394622802734375 0.12897099554538726806640625 +0.945115983486175537109375 -0.2673780024051666259765625 0.18779100477695465087890625 +0.945115983486175537109375 0.2673780024051666259765625 0.18779100477695465087890625 +0.946839338541030861584602007497 -0.0392340503633022280594033759371 -0.066749848425388336181640625 +0.946839338541030861584602007497 0.0392340503633022280594033759371 -0.066749848425388336181640625 +0.947071158885955721729033029987 -0.07453510351479053497314453125 0 +0.947071158885955721729033029987 0.07453510351479053497314453125 0 +0.947212994098663330078125 -0.162458002567291259765625 -0.2763960063457489013671875 +0.947212994098663330078125 0.162458002567291259765625 -0.2763960063457489013671875 +0.947565150260925248559829014994 -0.0386412493884563459922709682814 0.0559227015823125783722247206242 +0.947565150260925248559829014994 0.0386412493884563459922709682814 0.0559227015823125783722247206242 +0.94979298114776611328125 -0.1211419999599456787109375 0.28847599029541015625 +0.94979298114776611328125 0.1211419999599456787109375 0.28847599029541015625 +0.949999999999999955591079014994 0 0 +0.951057970523834228515625 -0.30901300907135009765625 0 +0.951057970523834228515625 0.30901300907135009765625 0 +0.956157028675079345703125 -0.040642000734806060791015625 0.290021002292633056640625 +0.956157028675079345703125 0.040642000734806060791015625 0.290021002292633056640625 +0.956772029399871826171875 -0.081500001251697540283203125 -0.279184997081756591796875 +0.956772029399871826171875 0.081500001251697540283203125 -0.279184997081756591796875 +0.957040011882781982421875 -0.201186001300811767578125 -0.20880199968814849853515625 +0.957040011882781982421875 0.201186001300811767578125 -0.20880199968814849853515625 +0.95896899700164794921875 -0.2746900022029876708984375 -0.070176996290683746337890625 +0.95896899700164794921875 0.2746900022029876708984375 -0.070176996290683746337890625 +0.959253013134002685546875 -0.1606200039386749267578125 0.23245500028133392333984375 +0.959253013134002685546875 0.1606200039386749267578125 0.23245500028133392333984375 +0.959966003894805908203125 0 -0.2801170051097869873046875 +0.96001398563385009765625 -0.2737030088901519775390625 0.05881600081920623779296875 +0.96001398563385009765625 0.2737030088901519775390625 0.05881600081920623779296875 +0.960967004299163818359375 -0.23867399990558624267578125 -0.13992099463939666748046875 +0.960967004299163818359375 0.23867399990558624267578125 -0.13992099463939666748046875 +0.964121997356414794921875 -0.199328005313873291015625 0.175321996212005615234375 +0.964121997356414794921875 0.199328005313873291015625 0.175321996212005615234375 +0.964375972747802734375 -0.23708300292491912841796875 0.11734999716281890869140625 +0.964375972747802734375 0.23708300292491912841796875 0.11734999716281890869140625 +0.96871101856231689453125 -0.080572001636028289794921875 0.234746992588043212890625 +0.96871101856231689453125 0.080572001636028289794921875 0.234746992588043212890625 +0.970192015171051025390625 -0.122799001634120941162109375 -0.2089219987392425537109375 +0.970192015171051025390625 0.122799001634120941162109375 -0.2089219987392425537109375 +0.97187101840972900390625 0 0.2355130016803741455078125 +0.97237098217010498046875 -0.23344199359416961669921875 0 +0.97237098217010498046875 0.23344199359416961669921875 0 +0.976656019687652587890625 -0.0413010008633136749267578125 -0.2108030021190643310546875 +0.976656019687652587890625 0.0413010008633136749267578125 -0.2108030021190643310546875 +0.976912021636962890625 -0.161004006862640380859375 -0.14043100178241729736328125 +0.976912021636962890625 0.161004006862640380859375 -0.14043100178241729736328125 +0.977011024951934814453125 -0.121191002428531646728515625 0.1753920018672943115234375 +0.977011024951934814453125 0.121191002428531646728515625 0.1753920018672943115234375 +0.977639973163604736328125 -0.19822399318218231201171875 -0.070197999477386474609375 +0.977639973163604736328125 0.19822399318218231201171875 -0.070197999477386474609375 +0.97858202457427978515625 -0.197272002696990966796875 0.0588279999792575836181640625 +0.97858202457427978515625 0.197272002696990966796875 0.0588279999792575836181640625 +0.980130970478057861328125 -0.15961100161075592041015625 0.117757998406887054443359375 +0.980130970478057861328125 0.15961100161075592041015625 0.117757998406887054443359375 +0.9833819866180419921875 -0.0406769998371601104736328125 0.17693300545215606689453125 +0.9833819866180419921875 0.0406769998371601104736328125 0.17693300545215606689453125 +0.986715018749237060546875 -0.08232200145721435546875 -0.140058994293212890625 +0.986715018749237060546875 0.08232200145721435546875 -0.140058994293212890625 +0.98768901824951171875 -0.1564320027828216552734375 0 +0.98768901824951171875 0.1564320027828216552734375 0 +0.98976099491119384765625 -0.081141002476215362548828125 0.1174300014972686767578125 +0.98976099491119384765625 0.081141002476215362548828125 0.1174300014972686767578125 +0.990076005458831787109375 0 -0.14053599536418914794921875 +0.990315020084381103515625 -0.11975400149822235107421875 -0.070249997079372406005859375 +0.990315020084381103515625 0.11975400149822235107421875 -0.070249997079372406005859375 +0.991138994693756103515625 -0.1190769970417022705078125 0.058857999742031097412109375 +0.991138994693756103515625 0.1190769970417022705078125 0.058857999742031097412109375 +0.993035018444061279296875 0 0.11781899631023406982421875 +0.99667298793792724609375 -0.04129900038242340087890625 -0.0702629983425140380859375 +0.99667298793792724609375 0.04129900038242340087890625 -0.0702629983425140380859375 +0.9969170093536376953125 -0.078458003699779510498046875 0 +0.9969170093536376953125 0.078458003699779510498046875 0 +0.997437000274658203125 -0.04067499935626983642578125 0.058866001665592193603515625 +0.997437000274658203125 0.04067499935626983642578125 0.058866001665592193603515625 +1 0 0 +3 0 1 3 +3 0 2 1 +3 0 3 5 +3 0 4 2 +3 0 5 6 +3 0 6 4 +3 1 2 7 +3 1 7 13 +3 1 8 3 +3 1 13 8 +3 2 4 9 +3 2 9 14 +3 2 14 7 +3 3 8 15 +3 3 10 5 +3 3 15 10 +3 4 6 11 +3 4 11 16 +3 4 16 9 +3 5 10 17 +3 5 12 6 +3 5 17 12 +3 6 12 18 +3 6 18 11 +3 7 14 20 +3 7 19 13 +3 7 20 19 +3 8 13 21 +3 8 21 23 +3 8 23 15 +3 9 16 24 +3 9 22 14 +3 9 24 22 +3 10 15 25 +3 10 25 29 +3 10 29 17 +3 11 18 30 +3 11 26 16 +3 11 30 26 +3 12 17 31 +3 12 31 32 +3 12 32 18 +3 13 19 27 +3 13 27 21 +3 14 22 28 +3 14 28 20 +3 15 23 33 +3 15 33 25 +3 16 26 34 +3 16 34 24 +3 17 29 36 +3 17 36 31 +3 18 32 37 +3 18 37 30 +3 19 20 35 +3 19 35 38 +3 19 38 27 +3 20 28 39 +3 20 39 35 +3 21 27 42 +3 21 40 23 +3 21 42 40 +3 22 24 41 +3 22 41 43 +3 22 43 28 +3 23 40 46 +3 23 46 33 +3 24 34 47 +3 24 47 41 +3 25 33 51 +3 25 44 29 +3 25 51 44 +3 26 30 45 +3 26 45 52 +3 26 52 34 +3 27 38 49 +3 27 49 42 +3 28 43 50 +3 28 50 39 +3 29 44 53 +3 29 53 36 +3 30 37 54 +3 30 54 45 +3 31 36 55 +3 31 48 32 +3 31 55 48 +3 32 48 56 +3 32 56 37 +3 33 46 59 +3 33 59 51 +3 34 52 60 +3 34 60 47 +3 35 39 58 +3 35 57 38 +3 35 58 57 +3 36 53 66 +3 36 66 55 +3 37 56 67 +3 37 67 54 +3 38 57 62 +3 38 62 49 +3 39 50 63 +3 39 63 58 +3 40 42 72 +3 40 72 74 +3 40 74 46 +3 41 47 75 +3 41 73 43 +3 41 75 73 +3 42 49 79 +3 42 79 72 +3 43 73 80 +3 43 80 50 +3 44 51 77 +3 44 77 81 +3 44 81 53 +3 45 54 82 +3 45 78 52 +3 45 82 78 +3 46 74 99 +3 46 99 59 +3 47 60 100 +3 47 100 75 +3 48 55 93 +3 48 93 94 +3 48 94 56 +3 49 62 107 +3 49 107 79 +3 50 80 108 +3 50 108 63 +3 51 59 95 +3 51 95 77 +3 52 78 96 +3 52 96 60 +3 53 81 103 +3 53 103 66 +3 54 67 104 +3 54 104 82 +3 55 66 109 +3 55 109 93 +3 56 94 110 +3 56 110 67 +3 57 58 90 +3 57 90 101 +3 57 101 62 +3 58 63 102 +3 58 102 90 +3 59 99 123 +3 59 123 95 +3 60 96 124 +3 60 124 100 +3 61 64 65 +3 61 65 69 +3 61 68 64 +3 61 69 71 +3 61 70 68 +3 61 71 70 +3 62 101 134 +3 62 134 107 +3 63 108 135 +3 63 135 102 +3 64 68 83 +3 64 76 65 +3 64 83 88 +3 64 88 76 +3 65 76 89 +3 65 84 69 +3 65 89 84 +3 66 103 128 +3 66 128 109 +3 67 110 129 +3 67 129 104 +3 68 70 85 +3 68 85 91 +3 68 91 83 +3 69 84 92 +3 69 86 71 +3 69 92 86 +3 70 71 87 +3 70 87 97 +3 70 97 85 +3 71 86 98 +3 71 98 87 +3 72 79 140 +3 72 136 74 +3 72 140 136 +3 73 75 137 +3 73 137 141 +3 73 141 80 +3 74 136 146 +3 74 146 99 +3 75 100 147 +3 75 147 137 +3 76 88 105 +3 76 105 106 +3 76 106 89 +3 77 95 142 +3 77 130 81 +3 77 142 130 +3 78 82 131 +3 78 131 143 +3 78 143 96 +3 79 107 154 +3 79 154 140 +3 80 141 155 +3 80 155 108 +3 81 130 144 +3 81 144 103 +3 82 104 145 +3 82 145 131 +3 83 91 113 +3 83 111 88 +3 83 113 111 +3 84 89 112 +3 84 112 114 +3 84 114 92 +3 85 97 119 +3 85 115 91 +3 85 119 115 +3 86 92 116 +3 86 116 120 +3 86 120 98 +3 87 98 122 +3 87 121 97 +3 87 122 121 +3 88 111 117 +3 88 117 105 +3 89 106 118 +3 89 118 112 +3 90 102 149 +3 90 148 101 +3 90 149 148 +3 91 115 125 +3 91 125 113 +3 92 114 126 +3 92 126 116 +3 93 109 166 +3 93 156 94 +3 93 166 156 +3 94 156 167 +3 94 167 110 +3 95 123 176 +3 95 176 142 +3 96 143 177 +3 96 177 124 +3 97 121 132 +3 97 132 119 +3 98 120 133 +3 98 133 122 +3 99 146 178 +3 99 178 123 +3 100 124 179 +3 100 179 147 +3 101 148 180 +3 101 180 134 +3 102 135 181 +3 102 181 149 +3 103 144 174 +3 103 174 128 +3 104 129 175 +3 104 175 145 +3 105 117 138 +3 105 127 106 +3 105 138 127 +3 106 127 139 +3 106 139 118 +3 107 134 186 +3 107 186 154 +3 108 155 187 +3 108 187 135 +3 109 128 184 +3 109 184 166 +3 110 167 185 +3 110 185 129 +3 111 113 150 +3 111 150 152 +3 111 152 117 +3 112 118 153 +3 112 151 114 +3 112 153 151 +3 113 125 159 +3 113 159 150 +3 114 151 160 +3 114 160 126 +3 115 119 157 +3 115 157 164 +3 115 164 125 +3 116 126 165 +3 116 158 120 +3 116 165 158 +3 117 152 162 +3 117 162 138 +3 118 139 163 +3 118 163 153 +3 119 132 168 +3 119 168 157 +3 120 158 169 +3 120 169 133 +3 121 122 161 +3 121 161 170 +3 121 170 132 +3 122 133 171 +3 122 171 161 +3 123 178 229 +3 123 229 176 +3 124 177 230 +3 124 230 179 +3 125 164 182 +3 125 182 159 +3 126 160 183 +3 126 183 165 +3 127 138 172 +3 127 172 173 +3 127 173 139 +3 128 174 222 +3 128 222 184 +3 129 185 223 +3 129 223 175 +3 130 142 199 +3 130 199 203 +3 130 203 144 +3 131 145 204 +3 131 200 143 +3 131 204 200 +3 132 170 191 +3 132 191 168 +3 133 169 192 +3 133 192 171 +3 134 180 251 +3 134 251 186 +3 135 187 252 +3 135 252 181 +3 136 140 215 +3 136 215 217 +3 136 217 146 +3 137 147 218 +3 137 216 141 +3 137 218 216 +3 138 162 188 +3 138 188 172 +3 139 173 189 +3 139 189 163 +3 140 154 245 +3 140 245 215 +3 141 216 246 +3 141 246 155 +3 142 176 253 +3 142 253 199 +3 143 200 254 +3 143 254 177 +3 144 203 237 +3 144 237 174 +3 145 175 238 +3 145 238 204 +3 146 217 257 +3 146 257 178 +3 147 179 258 +3 147 258 218 +3 148 149 213 +3 148 213 263 +3 148 263 180 +3 149 181 264 +3 149 264 213 +3 150 159 205 +3 150 193 152 +3 150 205 193 +3 151 153 194 +3 151 194 206 +3 151 206 160 +3 152 193 209 +3 152 209 162 +3 153 163 210 +3 153 210 194 +3 154 186 275 +3 154 275 245 +3 155 246 276 +3 155 276 187 +3 156 166 261 +3 156 261 262 +3 156 262 167 +3 157 168 211 +3 157 207 164 +3 157 211 207 +3 158 165 208 +3 158 208 212 +3 158 212 169 +3 159 182 235 +3 159 235 205 +3 160 206 236 +3 160 236 183 +3 161 171 227 +3 161 226 170 +3 161 227 226 +3 162 209 249 +3 162 249 188 +3 163 189 250 +3 163 250 210 +3 164 207 233 +3 164 233 182 +3 165 183 234 +3 165 234 208 +3 166 184 279 +3 166 279 261 +3 167 262 280 +3 167 280 185 +3 168 191 243 +3 168 243 211 +3 169 212 244 +3 169 244 192 +3 170 226 259 +3 170 259 191 +3 171 192 260 +3 171 260 227 +3 172 188 239 +3 172 221 173 +3 172 239 221 +3 173 221 240 +3 173 240 189 +3 174 237 283 +3 174 283 222 +3 175 223 284 +3 175 284 238 +3 176 229 306 +3 176 306 253 +3 177 254 307 +3 177 307 230 +3 178 257 310 +3 178 310 229 +3 179 230 311 +3 179 311 258 +3 180 263 325 +3 180 325 251 +3 181 252 326 +3 181 326 264 +3 182 233 281 +3 182 281 235 +3 183 236 282 +3 183 282 234 +3 184 222 316 +3 184 316 279 +3 185 280 317 +3 185 317 223 +3 186 251 329 +3 186 329 275 +3 187 276 330 +3 187 330 252 +3 188 249 289 +3 188 289 239 +3 189 240 290 +3 189 290 250 +3 190 195 197 +3 190 196 195 +3 190 197 201 +3 190 198 196 +3 190 201 202 +3 190 202 198 +3 191 259 285 +3 191 285 243 +3 192 244 286 +3 192 286 260 +3 193 205 293 +3 193 293 296 +3 193 296 209 +3 194 210 297 +3 194 294 206 +3 194 297 294 +3 195 196 214 +3 195 214 231 +3 195 219 197 +3 195 231 219 +3 196 198 220 +3 196 220 232 +3 196 232 214 +3 197 219 241 +3 197 224 201 +3 197 241 224 +3 198 202 225 +3 198 225 242 +3 198 242 220 +3 199 253 350 +3 199 314 203 +3 199 350 314 +3 200 204 315 +3 200 315 351 +3 200 351 254 +3 201 224 247 +3 201 228 202 +3 201 247 228 +3 202 228 248 +3 202 248 225 +3 203 314 327 +3 203 327 237 +3 204 238 328 +3 204 328 315 +3 205 235 304 +3 205 304 293 +3 206 294 305 +3 206 305 236 +3 207 211 287 +3 207 287 298 +3 207 298 233 +3 208 234 299 +3 208 288 212 +3 208 299 288 +3 209 296 318 +3 209 318 249 +3 210 250 319 +3 210 319 297 +3 211 243 302 +3 211 302 287 +3 212 288 303 +3 212 303 244 +3 213 264 352 +3 213 352 263 +3 214 232 256 +3 214 255 231 +3 214 256 255 +3 215 245 361 +3 215 348 217 +3 215 361 348 +3 216 218 349 +3 216 349 362 +3 216 362 246 +3 217 348 369 +3 217 369 257 +3 218 258 370 +3 218 370 349 +3 219 231 265 +3 219 265 267 +3 219 267 241 +3 220 242 268 +3 220 266 232 +3 220 268 266 +3 221 239 312 +3 221 312 313 +3 221 313 240 +3 222 283 367 +3 222 367 316 +3 223 317 368 +3 223 368 284 +3 224 241 269 +3 224 269 273 +3 224 273 247 +3 225 248 274 +3 225 270 242 +3 225 274 270 +3 226 227 324 +3 226 324 333 +3 226 333 259 +3 227 260 334 +3 227 334 324 +3 228 247 277 +3 228 277 278 +3 228 278 248 +3 229 310 377 +3 229 377 306 +3 230 307 378 +3 230 378 311 +3 231 255 271 +3 231 271 265 +3 232 266 272 +3 232 272 256 +3 233 298 344 +3 233 344 281 +3 234 282 345 +3 234 345 299 +3 235 281 346 +3 235 346 304 +3 236 305 347 +3 236 347 282 +3 237 327 373 +3 237 373 283 +3 238 284 374 +3 238 374 328 +3 239 289 359 +3 239 359 312 +3 240 313 360 +3 240 360 290 +3 241 267 291 +3 241 291 269 +3 242 270 292 +3 242 292 268 +3 243 285 342 +3 243 342 302 +3 244 303 343 +3 244 343 286 +3 245 275 385 +3 245 385 361 +3 246 362 386 +3 246 386 276 +3 247 273 300 +3 247 300 277 +3 248 278 301 +3 248 301 274 +3 249 318 365 +3 249 365 289 +3 250 290 366 +3 250 366 319 +3 251 325 418 +3 251 418 329 +3 252 330 419 +3 252 419 326 +3 253 306 400 +3 253 400 350 +3 254 351 401 +3 254 401 307 +3 255 256 295 +3 255 295 308 +3 255 308 271 +3 256 272 309 +3 256 309 295 +3 257 369 420 +3 257 420 310 +3 258 311 421 +3 258 421 370 +3 259 333 363 +3 259 363 285 +3 260 286 364 +3 260 364 334 +3 261 279 394 +3 261 387 262 +3 261 394 387 +3 262 387 395 +3 262 395 280 +3 263 352 402 +3 263 402 325 +3 264 326 403 +3 264 403 352 +3 265 271 322 +3 265 320 267 +3 265 322 320 +3 266 268 321 +3 266 321 323 +3 266 323 272 +3 267 320 335 +3 267 335 291 +3 268 292 336 +3 268 336 321 +3 269 291 340 +3 269 331 273 +3 269 340 331 +3 270 274 332 +3 270 332 341 +3 270 341 292 +3 271 308 338 +3 271 338 322 +3 272 323 339 +3 272 339 309 +3 273 331 353 +3 273 353 300 +3 274 301 354 +3 274 354 332 +3 275 329 465 +3 275 465 385 +3 276 386 466 +3 276 466 330 +3 277 300 355 +3 277 337 278 +3 277 355 337 +3 278 337 356 +3 278 356 301 +3 279 316 438 +3 279 438 394 +3 280 395 439 +3 280 439 317 +3 281 344 422 +3 281 422 346 +3 282 347 423 +3 282 423 345 +3 283 373 459 +3 283 459 367 +3 284 368 460 +3 284 460 374 +3 285 363 414 +3 285 414 342 +3 286 343 415 +3 286 415 364 +3 287 302 383 +3 287 381 298 +3 287 383 381 +3 288 299 382 +3 288 382 384 +3 288 384 303 +3 289 365 436 +3 289 436 359 +3 290 360 437 +3 290 437 366 +3 291 335 371 +3 291 371 340 +3 292 341 372 +3 292 372 336 +3 293 304 404 +3 293 396 296 +3 293 404 396 +3 294 297 397 +3 294 397 405 +3 294 405 305 +3 295 309 358 +3 295 357 308 +3 295 358 357 +3 296 396 430 +3 296 430 318 +3 297 319 431 +3 297 431 397 +3 298 381 442 +3 298 442 344 +3 299 345 443 +3 299 443 382 +3 300 353 379 +3 300 379 355 +3 301 356 380 +3 301 380 354 +3 302 342 425 +3 302 425 383 +3 303 384 426 +3 303 426 343 +3 304 346 453 +3 304 453 404 +3 305 405 454 +3 305 454 347 +3 306 377 495 +3 306 495 400 +3 307 401 496 +3 307 496 378 +3 308 357 375 +3 308 375 338 +3 309 339 376 +3 309 376 358 +3 310 420 499 +3 310 499 377 +3 311 378 500 +3 311 500 421 +3 312 359 469 +3 312 391 313 +3 312 469 391 +3 313 391 470 +3 313 470 360 +3 314 350 491 +3 314 457 327 +3 314 491 457 +3 315 328 458 +3 315 458 492 +3 315 492 351 +3 316 367 481 +3 316 481 438 +3 317 439 482 +3 317 482 368 +3 318 430 475 +3 318 475 365 +3 319 366 476 +3 319 476 431 +3 320 322 388 +3 320 388 392 +3 320 392 335 +3 321 336 393 +3 321 389 323 +3 321 393 389 +3 322 338 408 +3 322 408 388 +3 323 389 409 +3 323 409 339 +3 324 334 464 +3 324 463 333 +3 324 464 463 +3 325 402 497 +3 325 497 418 +3 326 419 498 +3 326 498 403 +3 327 457 485 +3 327 485 373 +3 328 374 486 +3 328 486 458 +3 329 418 545 +3 329 545 465 +3 330 466 546 +3 330 546 419 +3 331 340 398 +3 331 398 410 +3 331 410 353 +3 332 354 411 +3 332 399 341 +3 332 411 399 +3 333 463 477 +3 333 477 363 +3 334 364 478 +3 334 478 464 +3 335 392 434 +3 335 434 371 +3 336 372 435 +3 336 435 393 +3 337 355 427 +3 337 427 428 +3 337 428 356 +3 338 375 455 +3 338 455 408 +3 339 409 456 +3 339 456 376 +3 340 371 432 +3 340 432 398 +3 341 399 433 +3 341 433 372 +3 342 414 483 +3 342 483 425 +3 343 426 484 +3 343 484 415 +3 344 442 515 +3 344 515 422 +3 345 423 516 +3 345 516 443 +3 346 422 517 +3 346 517 453 +3 347 454 518 +3 347 518 423 +3 348 361 534 +3 348 534 553 +3 348 553 369 +3 349 370 554 +3 349 535 362 +3 349 554 535 +3 350 400 562 +3 350 562 491 +3 351 492 563 +3 351 563 401 +3 352 403 540 +3 352 540 402 +3 353 410 448 +3 353 448 379 +3 354 380 449 +3 354 449 411 +3 355 379 471 +3 355 471 427 +3 356 428 472 +3 356 472 380 +3 357 358 424 +3 357 424 444 +3 357 444 375 +3 358 376 445 +3 358 445 424 +3 359 436 541 +3 359 541 469 +3 360 470 542 +3 360 542 437 +3 361 385 556 +3 361 556 534 +3 362 535 557 +3 362 557 386 +3 363 477 527 +3 363 527 414 +3 364 415 528 +3 364 528 478 +3 365 475 551 +3 365 551 436 +3 366 437 552 +3 366 552 476 +3 367 459 573 +3 367 573 481 +3 368 482 574 +3 368 574 460 +3 369 553 592 +3 369 592 420 +3 370 421 593 +3 370 593 554 +3 371 434 489 +3 371 489 432 +3 372 433 490 +3 372 490 435 +3 373 485 566 +3 373 566 459 +3 374 460 567 +3 374 567 486 +3 375 444 511 +3 375 511 455 +3 376 456 512 +3 376 512 445 +3 377 499 622 +3 377 622 495 +3 378 496 623 +3 378 623 500 +3 379 448 507 +3 379 507 471 +3 380 472 508 +3 380 508 449 +3 381 383 523 +3 381 523 570 +3 381 570 442 +3 382 443 571 +3 382 524 384 +3 382 571 524 +3 383 425 547 +3 383 547 523 +3 384 524 548 +3 384 548 426 +3 385 465 618 +3 385 618 556 +3 386 557 619 +3 386 619 466 +3 387 394 604 +3 387 604 605 +3 387 605 395 +3 388 408 519 +3 388 513 392 +3 388 519 513 +3 389 393 514 +3 389 514 520 +3 389 520 409 +3 390 406 407 +3 390 407 413 +3 390 412 406 +3 390 413 417 +3 390 416 412 +3 390 417 416 +3 391 469 572 +3 391 572 470 +3 392 513 532 +3 392 532 434 +3 393 435 533 +3 393 533 514 +3 394 438 624 +3 394 624 604 +3 395 605 625 +3 395 625 439 +3 396 404 568 +3 396 568 586 +3 396 586 430 +3 397 431 587 +3 397 569 405 +3 397 587 569 +3 398 432 521 +3 398 509 410 +3 398 521 509 +3 399 411 510 +3 399 510 522 +3 399 522 433 +3 400 495 654 +3 400 654 562 +3 401 563 655 +3 401 655 496 +3 402 540 616 +3 402 616 497 +3 403 498 617 +3 403 617 540 +3 404 453 596 +3 404 596 568 +3 405 569 597 +3 405 597 454 +3 406 412 440 +3 406 429 407 +3 406 440 451 +3 406 451 429 +3 407 429 452 +3 407 441 413 +3 407 452 441 +3 408 455 549 +3 408 549 519 +3 409 520 550 +3 409 550 456 +3 410 509 529 +3 410 529 448 +3 411 449 530 +3 411 530 510 +3 412 416 446 +3 412 446 461 +3 412 461 440 +3 413 441 462 +3 413 447 417 +3 413 462 447 +3 414 527 594 +3 414 594 483 +3 415 484 595 +3 415 595 528 +3 416 417 450 +3 416 450 467 +3 416 467 446 +3 417 447 468 +3 417 468 450 +3 418 497 620 +3 418 620 545 +3 419 546 621 +3 419 621 498 +3 420 592 668 +3 420 668 499 +3 421 500 669 +3 421 669 593 +3 422 515 614 +3 422 614 517 +3 423 518 615 +3 423 615 516 +3 424 445 537 +3 424 536 444 +3 424 537 536 +3 425 483 610 +3 425 610 547 +3 426 548 611 +3 426 611 484 +3 427 471 564 +3 427 555 428 +3 427 564 555 +3 428 555 565 +3 428 565 472 +3 429 451 473 +3 429 473 474 +3 429 474 452 +3 430 586 628 +3 430 628 475 +3 431 476 629 +3 431 629 587 +3 432 489 577 +3 432 577 521 +3 433 522 578 +3 433 578 490 +3 434 532 581 +3 434 581 489 +3 435 490 582 +3 435 582 533 +3 436 551 648 +3 436 648 541 +3 437 542 649 +3 437 649 552 +3 438 481 681 +3 438 681 624 +3 439 625 682 +3 439 682 482 +3 440 461 487 +3 440 479 451 +3 440 487 479 +3 441 452 480 +3 441 480 488 +3 441 488 462 +3 442 570 639 +3 442 639 515 +3 443 516 640 +3 443 640 571 +3 444 536 598 +3 444 598 511 +3 445 512 599 +3 445 599 537 +3 446 467 503 +3 446 493 461 +3 446 503 493 +3 447 462 494 +3 447 494 504 +3 447 504 468 +3 448 529 575 +3 448 575 507 +3 449 508 576 +3 449 576 530 +3 450 468 506 +3 450 505 467 +3 450 506 505 +3 451 479 501 +3 451 501 473 +3 452 474 502 +3 452 502 480 +3 453 517 650 +3 453 650 596 +3 454 597 651 +3 454 651 518 +3 455 511 612 +3 455 612 549 +3 456 550 613 +3 456 613 512 +3 457 491 698 +3 457 646 485 +3 457 698 646 +3 458 486 647 +3 458 647 699 +3 458 699 492 +3 459 566 678 +3 459 678 573 +3 460 574 679 +3 460 679 567 +3 461 493 525 +3 461 525 487 +3 462 488 526 +3 462 526 494 +3 463 464 630 +3 463 630 637 +3 463 637 477 +3 464 478 638 +3 464 638 630 +3 465 545 718 +3 465 718 618 +3 466 619 719 +3 466 719 546 +3 467 505 538 +3 467 538 503 +3 468 504 539 +3 468 539 506 +3 469 541 641 +3 469 641 572 +3 470 572 642 +3 470 642 542 +3 471 507 606 +3 471 606 564 +3 472 565 607 +3 472 607 508 +3 473 501 543 +3 473 531 474 +3 473 543 531 +3 474 531 544 +3 474 544 502 +3 475 628 704 +3 475 704 551 +3 476 552 705 +3 476 705 629 +3 477 637 674 +3 477 674 527 +3 478 528 675 +3 478 675 638 +3 479 487 558 +3 479 558 560 +3 479 560 501 +3 480 502 561 +3 480 559 488 +3 480 561 559 +3 481 573 760 +3 481 760 681 +3 482 682 761 +3 482 761 574 +3 483 594 694 +3 483 694 610 +3 484 611 695 +3 484 695 595 +3 485 646 723 +3 485 723 566 +3 486 567 724 +3 486 724 647 +3 487 525 583 +3 487 583 558 +3 488 559 584 +3 488 584 526 +3 489 581 664 +3 489 664 577 +3 490 578 665 +3 490 665 582 +3 491 562 764 +3 491 764 698 +3 492 699 765 +3 492 765 563 +3 493 503 579 +3 493 579 590 +3 493 590 525 +3 494 526 591 +3 494 580 504 +3 494 591 580 +3 495 622 789 +3 495 789 654 +3 496 655 790 +3 496 790 623 +3 497 616 742 +3 497 742 620 +3 498 621 743 +3 498 743 617 +3 499 668 802 +3 499 802 622 +3 500 623 803 +3 500 803 669 +3 501 560 588 +3 501 588 543 +3 502 544 589 +3 502 589 561 +3 503 538 600 +3 503 600 579 +3 504 580 601 +3 504 601 539 +3 505 506 585 +3 505 585 602 +3 505 602 538 +3 506 539 603 +3 506 603 585 +3 507 575 660 +3 507 660 606 +3 508 607 661 +3 508 661 576 +3 509 521 631 +3 509 631 635 +3 509 635 529 +3 510 530 636 +3 510 632 522 +3 510 636 632 +3 511 598 685 +3 511 685 612 +3 512 613 686 +3 512 686 599 +3 513 519 652 +3 513 652 658 +3 513 658 532 +3 514 533 659 +3 514 653 520 +3 514 659 653 +3 515 639 752 +3 515 752 614 +3 516 615 753 +3 516 753 640 +3 517 614 756 +3 517 756 650 +3 518 651 757 +3 518 757 615 +3 519 549 683 +3 519 683 652 +3 520 653 684 +3 520 684 550 +3 521 577 687 +3 521 687 631 +3 522 632 688 +3 522 688 578 +3 523 547 692 +3 523 692 748 +3 523 748 570 +3 524 571 749 +3 524 693 548 +3 524 749 693 +3 525 590 626 +3 525 626 583 +3 526 584 627 +3 526 627 591 +3 527 674 738 +3 527 738 594 +3 528 595 739 +3 528 739 675 +3 529 635 676 +3 529 676 575 +3 530 576 677 +3 530 677 636 +3 531 543 608 +3 531 608 609 +3 531 609 544 +3 532 658 710 +3 532 710 581 +3 533 582 711 +3 533 711 659 +3 534 556 770 +3 534 770 786 +3 534 786 553 +3 535 554 787 +3 535 771 557 +3 535 787 771 +3 536 537 645 +3 536 645 720 +3 536 720 598 +3 537 599 721 +3 537 721 645 +3 538 602 643 +3 538 643 600 +3 539 601 644 +3 539 644 603 +3 540 617 788 +3 540 788 616 +3 541 648 754 +3 541 754 641 +3 542 642 755 +3 542 755 649 +3 543 588 633 +3 543 633 608 +3 544 609 634 +3 544 634 589 +3 545 620 798 +3 545 798 718 +3 546 719 799 +3 546 799 621 +3 547 610 744 +3 547 744 692 +3 548 693 745 +3 548 745 611 +3 549 612 736 +3 549 736 683 +3 550 684 737 +3 550 737 613 +3 551 704 812 +3 551 812 648 +3 552 649 813 +3 552 813 705 +3 553 786 845 +3 553 845 592 +3 554 593 846 +3 554 846 787 +3 555 564 716 +3 555 716 717 +3 555 717 565 +3 556 618 850 +3 556 850 770 +3 557 771 851 +3 557 851 619 +3 558 583 662 +3 558 656 560 +3 558 662 656 +3 559 561 657 +3 559 657 663 +3 559 663 584 +3 560 656 670 +3 560 670 588 +3 561 589 671 +3 561 671 657 +3 562 654 870 +3 562 870 764 +3 563 765 871 +3 563 871 655 +3 564 606 740 +3 564 740 716 +3 565 717 741 +3 565 741 607 +3 566 723 834 +3 566 834 678 +3 567 679 835 +3 567 835 724 +3 568 596 816 +3 568 772 586 +3 568 816 772 +3 569 587 773 +3 569 773 817 +3 569 817 597 +3 570 748 832 +3 570 832 639 +3 571 640 833 +3 571 833 749 +3 572 641 791 +3 572 791 642 +3 573 678 886 +3 573 886 760 +3 574 761 887 +3 574 887 679 +3 575 676 758 +3 575 758 660 +3 576 661 759 +3 576 759 677 +3 577 664 768 +3 577 768 687 +3 578 688 769 +3 578 769 665 +3 579 600 672 +3 579 666 590 +3 579 672 666 +3 580 591 667 +3 580 667 673 +3 580 673 601 +3 581 710 774 +3 581 774 664 +3 582 665 775 +3 582 775 711 +3 583 626 708 +3 583 708 662 +3 584 663 709 +3 584 709 627 +3 585 603 703 +3 585 702 602 +3 585 703 702 +3 586 772 830 +3 586 830 628 +3 587 629 831 +3 587 831 773 +3 588 670 725 +3 588 725 633 +3 589 634 726 +3 589 726 671 +3 590 666 706 +3 590 706 626 +3 591 627 707 +3 591 707 667 +3 592 845 923 +3 592 923 668 +3 593 669 924 +3 593 924 846 +3 594 738 841 +3 594 841 694 +3 595 695 842 +3 595 842 739 +3 596 650 859 +3 596 859 816 +3 597 817 860 +3 597 860 651 +3 598 720 820 +3 598 820 685 +3 599 686 821 +3 599 821 721 +3 600 643 714 +3 600 714 672 +3 601 673 715 +3 601 715 644 +3 602 702 732 +3 602 732 643 +3 603 644 733 +3 603 733 703 +3 604 624 884 +3 604 863 605 +3 604 884 863 +3 605 863 885 +3 605 885 625 +3 606 660 792 +3 606 792 740 +3 607 741 793 +3 607 793 661 +3 608 633 712 +3 608 689 609 +3 608 712 689 +3 609 689 713 +3 609 713 634 +3 610 694 836 +3 610 836 744 +3 611 745 837 +3 611 837 695 +3 612 685 828 +3 612 828 736 +3 613 737 829 +3 613 829 686 +3 614 752 900 +3 614 900 756 +3 615 757 901 +3 615 901 753 +3 616 788 917 +3 616 917 742 +3 617 743 918 +3 617 918 788 +3 618 718 946 +3 618 946 850 +3 619 851 947 +3 619 947 719 +3 620 742 919 +3 620 919 798 +3 621 799 920 +3 621 920 743 +3 622 802 960 +3 622 960 789 +3 623 790 961 +3 623 961 803 +3 624 681 944 +3 624 944 884 +3 625 885 945 +3 625 945 682 +3 626 706 766 +3 626 766 708 +3 627 709 767 +3 627 767 707 +3 628 830 892 +3 628 892 704 +3 629 705 893 +3 629 893 831 +3 630 638 867 +3 630 866 637 +3 630 867 866 +3 631 687 854 +3 631 782 635 +3 631 854 782 +3 632 636 783 +3 632 783 855 +3 632 855 688 +3 633 725 784 +3 633 784 712 +3 634 713 785 +3 634 785 726 +3 635 782 826 +3 635 826 676 +3 636 677 827 +3 636 827 783 +3 637 866 902 +3 637 902 674 +3 638 675 903 +3 638 903 867 +3 639 832 942 +3 639 942 752 +3 640 753 943 +3 640 943 833 +3 641 754 890 +3 641 890 791 +3 642 791 891 +3 642 891 755 +3 643 732 778 +3 643 778 714 +3 644 715 779 +3 644 779 733 +3 645 721 856 +3 645 856 720 +3 646 698 969 +3 646 921 723 +3 646 969 921 +3 647 724 922 +3 647 922 970 +3 647 970 699 +3 648 812 894 +3 648 894 754 +3 649 755 895 +3 649 895 813 +3 650 756 956 +3 650 956 859 +3 651 860 957 +3 651 957 757 +3 652 683 864 +3 652 852 658 +3 652 864 852 +3 653 659 853 +3 653 853 865 +3 653 865 684 +3 654 789 1013 +3 654 1013 870 +3 655 871 1014 +3 655 1014 790 +3 656 662 794 +3 656 794 804 +3 656 804 670 +3 657 671 805 +3 657 795 663 +3 657 805 795 +3 658 852 878 +3 658 878 710 +3 659 711 879 +3 659 879 853 +3 660 758 872 +3 660 872 792 +3 661 793 873 +3 661 873 759 +3 662 708 822 +3 662 822 794 +3 663 795 823 +3 663 823 709 +3 664 774 911 +3 664 911 768 +3 665 769 912 +3 665 912 775 +3 666 672 780 +3 666 780 806 +3 666 806 706 +3 667 707 807 +3 667 781 673 +3 667 807 781 +3 668 923 1035 +3 668 1035 802 +3 669 803 1036 +3 669 1036 924 +3 670 804 843 +3 670 843 725 +3 671 726 844 +3 671 844 805 +3 672 714 818 +3 672 818 780 +3 673 781 819 +3 673 819 715 +3 674 902 965 +3 674 965 738 +3 675 739 966 +3 675 966 903 +3 676 826 888 +3 676 888 758 +3 677 759 889 +3 677 889 827 +3 678 834 1041 +3 678 1041 886 +3 679 887 1042 +3 679 1042 835 +3 680 690 696 +3 680 691 690 +3 680 696 700 +3 680 697 691 +3 680 700 701 +3 680 701 697 +3 681 760 1019 +3 681 1019 944 +3 682 945 1020 +3 682 1020 761 +3 683 736 925 +3 683 925 864 +3 684 865 926 +3 684 926 737 +3 685 820 952 +3 685 952 828 +3 686 829 953 +3 686 953 821 +3 687 768 938 +3 687 938 854 +3 688 855 939 +3 688 939 769 +3 689 712 824 +3 689 824 825 +3 689 825 713 +3 690 691 722 +3 690 722 734 +3 690 727 696 +3 690 734 727 +3 691 697 728 +3 691 728 735 +3 691 735 722 +3 692 744 934 +3 692 934 981 +3 692 981 748 +3 693 749 982 +3 693 935 745 +3 693 982 935 +3 694 841 963 +3 694 963 836 +3 695 837 964 +3 695 964 842 +3 696 727 746 +3 696 729 700 +3 696 746 729 +3 697 701 730 +3 697 730 747 +3 697 747 728 +3 698 764 1039 +3 698 1039 969 +3 699 970 1040 +3 699 1040 765 +3 700 729 750 +3 700 731 701 +3 700 750 731 +3 701 731 751 +3 701 751 730 +3 702 703 847 +3 702 847 861 +3 702 861 732 +3 703 733 862 +3 703 862 847 +3 704 892 997 +3 704 997 812 +3 705 813 998 +3 705 998 893 +3 706 806 876 +3 706 876 766 +3 707 767 877 +3 707 877 807 +3 708 766 880 +3 708 880 822 +3 709 823 881 +3 709 881 767 +3 710 878 954 +3 710 954 774 +3 711 775 955 +3 711 955 879 +3 712 784 898 +3 712 898 824 +3 713 825 899 +3 713 899 785 +3 714 778 868 +3 714 868 818 +3 715 819 869 +3 715 869 779 +3 716 740 936 +3 716 929 717 +3 716 936 929 +3 717 929 937 +3 717 937 741 +3 718 798 1017 +3 718 1017 946 +3 719 947 1018 +3 719 1018 799 +3 720 856 940 +3 720 940 820 +3 721 821 941 +3 721 941 856 +3 722 735 763 +3 722 762 734 +3 722 763 762 +3 723 921 1015 +3 723 1015 834 +3 724 835 1016 +3 724 1016 922 +3 725 843 913 +3 725 913 784 +3 726 785 914 +3 726 914 844 +3 727 734 776 +3 727 776 796 +3 727 796 746 +3 728 747 797 +3 728 777 735 +3 728 797 777 +3 729 746 800 +3 729 800 810 +3 729 810 750 +3 730 751 811 +3 730 801 747 +3 730 811 801 +3 731 750 814 +3 731 814 815 +3 731 815 751 +3 732 861 907 +3 732 907 778 +3 733 779 908 +3 733 908 862 +3 734 762 808 +3 734 808 776 +3 735 777 809 +3 735 809 763 +3 736 828 995 +3 736 995 925 +3 737 926 996 +3 737 996 829 +3 738 965 1055 +3 738 1055 841 +3 739 842 1056 +3 739 1056 966 +3 740 792 975 +3 740 975 936 +3 741 937 976 +3 741 976 793 +3 742 917 1079 +3 742 1079 919 +3 743 920 1080 +3 743 1080 918 +3 744 836 1001 +3 744 1001 934 +3 745 935 1002 +3 745 1002 837 +3 746 796 838 +3 746 838 800 +3 747 801 839 +3 747 839 797 +3 748 981 1071 +3 748 1071 832 +3 749 833 1072 +3 749 1072 982 +3 750 810 848 +3 750 848 814 +3 751 815 849 +3 751 849 811 +3 752 942 1087 +3 752 1087 900 +3 753 901 1088 +3 753 1088 943 +3 754 894 1023 +3 754 1023 890 +3 755 891 1024 +3 755 1024 895 +3 756 900 1095 +3 756 1095 956 +3 757 957 1096 +3 757 1096 901 +3 758 888 991 +3 758 991 872 +3 759 873 992 +3 759 992 889 +3 760 886 1152 +3 760 1152 1019 +3 761 1020 1153 +3 761 1153 887 +3 762 763 840 +3 762 840 857 +3 762 857 808 +3 763 809 858 +3 763 858 840 +3 764 870 1156 +3 764 1156 1039 +3 765 1040 1157 +3 765 1157 871 +3 766 876 983 +3 766 983 880 +3 767 881 984 +3 767 984 877 +3 768 911 1057 +3 768 1057 938 +3 769 939 1058 +3 769 1058 912 +3 770 850 1125 +3 770 1123 786 +3 770 1125 1123 +3 771 787 1124 +3 771 1124 1126 +3 771 1126 851 +3 772 816 1084 +3 772 1075 830 +3 772 1084 1075 +3 773 831 1076 +3 773 1076 1085 +3 773 1085 817 +3 774 954 1063 +3 774 1063 911 +3 775 912 1064 +3 775 1064 955 +3 776 808 882 +3 776 874 796 +3 776 882 874 +3 777 797 875 +3 777 875 883 +3 777 883 809 +3 778 907 977 +3 778 977 868 +3 779 869 978 +3 779 978 908 +3 780 818 950 +3 780 948 806 +3 780 950 948 +3 781 807 949 +3 781 949 951 +3 781 951 819 +3 782 854 1053 +3 782 989 826 +3 782 1053 989 +3 783 827 990 +3 783 990 1054 +3 783 1054 855 +3 784 913 1005 +3 784 1005 898 +3 785 899 1006 +3 785 1006 914 +3 786 1123 1168 +3 786 1168 845 +3 787 846 1169 +3 787 1169 1124 +3 788 918 1127 +3 788 1127 917 +3 789 960 1196 +3 789 1196 1013 +3 790 1014 1197 +3 790 1197 961 +3 791 890 1086 +3 791 1086 891 +3 792 872 1043 +3 792 1043 975 +3 793 976 1044 +3 793 1044 873 +3 794 822 973 +3 794 971 804 +3 794 973 971 +3 795 805 972 +3 795 972 974 +3 795 974 823 +3 796 874 904 +3 796 904 838 +3 797 839 905 +3 797 905 875 +3 798 919 1128 +3 798 1128 1017 +3 799 1018 1129 +3 799 1129 920 +3 800 838 915 +3 800 896 810 +3 800 915 896 +3 801 811 897 +3 801 897 916 +3 801 916 839 +3 802 1035 1206 +3 802 1206 960 +3 803 961 1207 +3 803 1207 1036 +3 804 971 993 +3 804 993 843 +3 805 844 994 +3 805 994 972 +3 806 948 1007 +3 806 1007 876 +3 807 877 1008 +3 807 1008 949 +3 808 857 909 +3 808 909 882 +3 809 883 910 +3 809 910 858 +3 810 896 927 +3 810 927 848 +3 811 849 928 +3 811 928 897 +3 812 997 1093 +3 812 1093 894 +3 813 895 1094 +3 813 1094 998 +3 814 848 930 +3 814 906 815 +3 814 930 906 +3 815 906 931 +3 815 931 849 +3 816 859 1132 +3 816 1132 1084 +3 817 1085 1133 +3 817 1133 860 +3 818 868 987 +3 818 987 950 +3 819 951 988 +3 819 988 869 +3 820 940 1061 +3 820 1061 952 +3 821 953 1062 +3 821 1062 941 +3 822 880 1021 +3 822 1021 973 +3 823 974 1022 +3 823 1022 881 +3 824 898 1030 +3 824 962 825 +3 824 1030 962 +3 825 962 1031 +3 825 1031 899 +3 826 989 1045 +3 826 1045 888 +3 827 889 1046 +3 827 1046 990 +3 828 952 1109 +3 828 1109 995 +3 829 996 1110 +3 829 1110 953 +3 830 1075 1146 +3 830 1146 892 +3 831 893 1147 +3 831 1147 1076 +3 832 1071 1181 +3 832 1181 942 +3 833 943 1182 +3 833 1182 1072 +3 834 1015 1256 +3 834 1256 1041 +3 835 1042 1257 +3 835 1257 1016 +3 836 963 1117 +3 836 1117 1001 +3 837 1002 1118 +3 837 1118 964 +3 838 904 958 +3 838 958 915 +3 839 916 959 +3 839 959 905 +3 840 858 933 +3 840 932 857 +3 840 933 932 +3 841 1055 1200 +3 841 1200 963 +3 842 964 1201 +3 842 1201 1056 +3 843 993 1067 +3 843 1067 913 +3 844 914 1068 +3 844 1068 994 +3 845 1168 1250 +3 845 1250 923 +3 846 924 1251 +3 846 1251 1169 +3 847 862 1027 +3 847 1026 861 +3 847 1027 1026 +3 848 927 979 +3 848 979 930 +3 849 931 980 +3 849 980 928 +3 850 946 1242 +3 850 1242 1125 +3 851 1126 1243 +3 851 1243 947 +3 852 864 1091 +3 852 1091 1115 +3 852 1115 878 +3 853 879 1116 +3 853 1092 865 +3 853 1116 1092 +3 854 938 1136 +3 854 1136 1053 +3 855 1054 1137 +3 855 1137 939 +3 856 941 1102 +3 856 1102 940 +3 857 932 967 +3 857 967 909 +3 858 910 968 +3 858 968 933 +3 859 956 1238 +3 859 1238 1132 +3 860 1133 1239 +3 860 1239 957 +3 861 1026 1073 +3 861 1073 907 +3 862 908 1074 +3 862 1074 1027 +3 863 884 1240 +3 863 1240 1241 +3 863 1241 885 +3 864 925 1130 +3 864 1130 1091 +3 865 1092 1131 +3 865 1131 926 +3 866 867 1172 +3 866 1172 1198 +3 866 1198 902 +3 867 903 1199 +3 867 1199 1172 +3 868 977 1082 +3 868 1082 987 +3 869 988 1083 +3 869 1083 978 +3 870 1013 1314 +3 870 1314 1156 +3 871 1157 1315 +3 871 1315 1014 +3 872 991 1154 +3 872 1154 1043 +3 873 1044 1155 +3 873 1155 992 +3 874 882 985 +3 874 985 999 +3 874 999 904 +3 875 905 1000 +3 875 986 883 +3 875 1000 986 +3 876 1007 1103 +3 876 1103 983 +3 877 984 1104 +3 877 1104 1008 +3 878 1115 1183 +3 878 1183 954 +3 879 955 1184 +3 879 1184 1116 +3 880 983 1105 +3 880 1105 1021 +3 881 1022 1106 +3 881 1106 984 +3 882 909 1009 +3 882 1009 985 +3 883 986 1010 +3 883 1010 910 +3 884 944 1279 +3 884 1279 1240 +3 885 1241 1280 +3 885 1280 945 +3 886 1041 1336 +3 886 1336 1152 +3 887 1153 1337 +3 887 1337 1042 +3 888 1045 1144 +3 888 1144 991 +3 889 992 1145 +3 889 1145 1046 +3 890 1023 1216 +3 890 1216 1086 +3 891 1086 1217 +3 891 1217 1024 +3 892 1146 1262 +3 892 1262 997 +3 893 998 1263 +3 893 1263 1147 +3 894 1093 1230 +3 894 1230 1023 +3 895 1024 1231 +3 895 1231 1094 +3 896 915 1003 +3 896 1003 1011 +3 896 1011 927 +3 897 928 1012 +3 897 1004 916 +3 897 1012 1004 +3 898 1005 1150 +3 898 1150 1030 +3 899 1031 1151 +3 899 1151 1006 +3 900 1087 1283 +3 900 1283 1095 +3 901 1096 1284 +3 901 1284 1088 +3 902 1198 1258 +3 902 1258 965 +3 903 966 1259 +3 903 1259 1199 +3 904 999 1037 +3 904 1037 958 +3 905 959 1038 +3 905 1038 1000 +3 906 930 1028 +3 906 1028 1029 +3 906 1029 931 +3 907 1073 1119 +3 907 1119 977 +3 908 978 1120 +3 908 1120 1074 +3 909 967 1069 +3 909 1069 1009 +3 910 1010 1070 +3 910 1070 968 +3 911 1063 1226 +3 911 1226 1057 +3 912 1058 1227 +3 912 1227 1064 +3 913 1067 1164 +3 913 1164 1005 +3 914 1006 1165 +3 914 1165 1068 +3 915 958 1032 +3 915 1032 1003 +3 916 1004 1033 +3 916 1033 959 +3 917 1127 1320 +3 917 1320 1079 +3 918 1080 1321 +3 918 1321 1127 +3 919 1079 1316 +3 919 1316 1128 +3 920 1129 1317 +3 920 1317 1080 +3 921 969 1322 +3 921 1266 1015 +3 921 1322 1266 +3 922 1016 1267 +3 922 1267 1323 +3 922 1323 970 +3 923 1250 1371 +3 923 1371 1035 +3 924 1036 1372 +3 924 1372 1251 +3 925 995 1222 +3 925 1222 1130 +3 926 1131 1223 +3 926 1223 996 +3 927 1011 1049 +3 927 1049 979 +3 928 980 1050 +3 928 1050 1012 +3 929 936 1202 +3 929 1202 1203 +3 929 1203 937 +3 930 979 1077 +3 930 1077 1028 +3 931 1029 1078 +3 931 1078 980 +3 932 933 1025 +3 932 1025 1047 +3 932 1047 967 +3 933 968 1048 +3 933 1048 1025 +3 934 1001 1232 +3 934 1232 1287 +3 934 1287 981 +3 935 982 1288 +3 935 1233 1002 +3 935 1288 1233 +3 936 975 1236 +3 936 1236 1202 +3 937 1203 1237 +3 937 1237 976 +3 938 1057 1277 +3 938 1277 1136 +3 939 1137 1278 +3 939 1278 1058 +3 940 1102 1220 +3 940 1220 1061 +3 941 1062 1221 +3 941 1221 1102 +3 942 1181 1341 +3 942 1341 1087 +3 943 1088 1342 +3 943 1342 1182 +3 944 1019 1363 +3 944 1363 1279 +3 945 1280 1364 +3 945 1364 1020 +3 946 1017 1318 +3 946 1318 1242 +3 947 1243 1319 +3 947 1319 1018 +3 948 950 1113 +3 948 1113 1193 +3 948 1193 1007 +3 949 1008 1194 +3 949 1114 951 +3 949 1194 1114 +3 950 987 1160 +3 950 1160 1113 +3 951 1114 1161 +3 951 1161 988 +3 952 1061 1224 +3 952 1224 1109 +3 953 1110 1225 +3 953 1225 1062 +3 954 1183 1295 +3 954 1295 1063 +3 955 1064 1296 +3 955 1296 1184 +3 956 1095 1373 +3 956 1373 1238 +3 957 1239 1374 +3 957 1374 1096 +3 958 1037 1121 +3 958 1121 1032 +3 959 1033 1122 +3 959 1122 1038 +3 960 1206 1411 +3 960 1411 1196 +3 961 1197 1412 +3 961 1412 1207 +3 962 1030 1195 +3 962 1195 1031 +3 963 1200 1379 +3 963 1379 1117 +3 964 1118 1380 +3 964 1380 1201 +3 965 1258 1351 +3 965 1351 1055 +3 966 1056 1352 +3 966 1352 1259 +3 967 1047 1142 +3 967 1142 1069 +3 968 1070 1143 +3 968 1143 1048 +3 969 1039 1393 +3 969 1393 1322 +3 970 1323 1394 +3 970 1394 1040 +3 971 973 1189 +3 971 1189 1209 +3 971 1209 993 +3 972 994 1210 +3 972 1190 974 +3 972 1210 1190 +3 973 1021 1218 +3 973 1218 1189 +3 974 1190 1219 +3 974 1219 1022 +3 975 1043 1304 +3 975 1304 1236 +3 976 1237 1305 +3 976 1305 1044 +3 977 1119 1214 +3 977 1214 1082 +3 978 1083 1215 +3 978 1215 1120 +3 979 1049 1138 +3 979 1138 1077 +3 980 1078 1139 +3 980 1139 1050 +3 981 1287 1377 +3 981 1377 1071 +3 982 1072 1378 +3 982 1378 1288 +3 983 1103 1260 +3 983 1260 1105 +3 984 1106 1261 +3 984 1261 1104 +3 985 1009 1158 +3 985 1148 999 +3 985 1158 1148 +3 986 1000 1149 +3 986 1149 1159 +3 986 1159 1010 +3 987 1082 1244 +3 987 1244 1160 +3 988 1161 1245 +3 988 1245 1083 +3 989 1053 1328 +3 989 1264 1045 +3 989 1328 1264 +3 990 1046 1265 +3 990 1265 1329 +3 990 1329 1054 +3 991 1144 1299 +3 991 1299 1154 +3 992 1155 1300 +3 992 1300 1145 +3 993 1209 1270 +3 993 1270 1067 +3 994 1068 1271 +3 994 1271 1210 +3 995 1109 1345 +3 995 1345 1222 +3 996 1223 1346 +3 996 1346 1110 +3 997 1262 1347 +3 997 1347 1093 +3 998 1094 1348 +3 998 1348 1263 +3 999 1148 1173 +3 999 1173 1037 +3 1000 1038 1174 +3 1000 1174 1149 +3 1001 1117 1343 +3 1001 1343 1232 +3 1002 1233 1344 +3 1002 1344 1118 +3 1003 1032 1162 +3 1003 1140 1011 +3 1003 1162 1140 +3 1004 1012 1141 +3 1004 1141 1163 +3 1004 1163 1033 +3 1005 1164 1306 +3 1005 1306 1150 +3 1006 1151 1307 +3 1006 1307 1165 +3 1007 1193 1291 +3 1007 1291 1103 +3 1008 1104 1292 +3 1008 1292 1194 +3 1009 1069 1204 +3 1009 1204 1158 +3 1010 1159 1205 +3 1010 1205 1070 +3 1011 1140 1170 +3 1011 1170 1049 +3 1012 1050 1171 +3 1012 1171 1141 +3 1013 1196 1482 +3 1013 1482 1314 +3 1014 1315 1483 +3 1014 1483 1197 +3 1015 1266 1508 +3 1015 1508 1256 +3 1016 1257 1509 +3 1016 1509 1267 +3 1017 1128 1419 +3 1017 1419 1318 +3 1018 1319 1420 +3 1018 1420 1129 +3 1019 1152 1486 +3 1019 1486 1363 +3 1020 1364 1487 +3 1020 1487 1153 +3 1021 1105 1308 +3 1021 1308 1218 +3 1022 1219 1309 +3 1022 1309 1106 +3 1023 1230 1401 +3 1023 1401 1216 +3 1024 1217 1402 +3 1024 1402 1231 +3 1025 1048 1178 +3 1025 1177 1047 +3 1025 1178 1177 +3 1026 1027 1276 +3 1026 1276 1289 +3 1026 1289 1073 +3 1027 1074 1290 +3 1027 1290 1276 +3 1028 1077 1228 +3 1028 1208 1029 +3 1028 1228 1208 +3 1029 1208 1229 +3 1029 1229 1078 +3 1030 1150 1293 +3 1030 1293 1195 +3 1031 1195 1294 +3 1031 1294 1151 +3 1032 1121 1252 +3 1032 1252 1162 +3 1033 1163 1253 +3 1033 1253 1122 +3 1034 1051 1052 +3 1034 1052 1060 +3 1034 1059 1051 +3 1034 1060 1066 +3 1034 1065 1059 +3 1034 1066 1065 +3 1035 1371 1520 +3 1035 1520 1206 +3 1036 1207 1521 +3 1036 1521 1372 +3 1037 1173 1254 +3 1037 1254 1121 +3 1038 1122 1255 +3 1038 1255 1174 +3 1039 1156 1506 +3 1039 1506 1393 +3 1040 1394 1507 +3 1040 1507 1157 +3 1041 1256 1536 +3 1041 1536 1336 +3 1042 1337 1537 +3 1042 1537 1257 +3 1043 1154 1397 +3 1043 1397 1304 +3 1044 1305 1398 +3 1044 1398 1155 +3 1045 1264 1349 +3 1045 1349 1144 +3 1046 1145 1350 +3 1046 1350 1265 +3 1047 1177 1268 +3 1047 1268 1142 +3 1048 1143 1269 +3 1048 1269 1178 +3 1049 1170 1248 +3 1049 1248 1138 +3 1050 1139 1249 +3 1050 1249 1171 +3 1051 1059 1089 +3 1051 1081 1052 +3 1051 1089 1100 +3 1051 1100 1081 +3 1052 1081 1101 +3 1052 1090 1060 +3 1052 1101 1090 +3 1053 1136 1403 +3 1053 1403 1328 +3 1054 1329 1404 +3 1054 1404 1137 +3 1055 1351 1476 +3 1055 1476 1200 +3 1056 1201 1477 +3 1056 1477 1352 +3 1057 1226 1438 +3 1057 1438 1277 +3 1058 1278 1439 +3 1058 1439 1227 +3 1059 1065 1097 +3 1059 1097 1107 +3 1059 1107 1089 +3 1060 1090 1108 +3 1060 1098 1066 +3 1060 1108 1098 +3 1061 1220 1381 +3 1061 1381 1224 +3 1062 1225 1382 +3 1062 1382 1221 +3 1063 1295 1443 +3 1063 1443 1226 +3 1064 1227 1444 +3 1064 1444 1296 +3 1065 1066 1099 +3 1065 1099 1111 +3 1065 1111 1097 +3 1066 1098 1112 +3 1066 1112 1099 +3 1067 1270 1367 +3 1067 1367 1164 +3 1068 1165 1368 +3 1068 1368 1271 +3 1069 1142 1285 +3 1069 1285 1204 +3 1070 1205 1286 +3 1070 1286 1143 +3 1071 1377 1478 +3 1071 1478 1181 +3 1072 1182 1479 +3 1072 1479 1378 +3 1073 1289 1338 +3 1073 1338 1119 +3 1074 1120 1339 +3 1074 1339 1290 +3 1075 1084 1457 +3 1075 1457 1461 +3 1075 1461 1146 +3 1076 1147 1462 +3 1076 1458 1085 +3 1076 1462 1458 +3 1077 1138 1281 +3 1077 1281 1228 +3 1078 1229 1282 +3 1078 1282 1139 +3 1079 1320 1525 +3 1079 1525 1316 +3 1080 1317 1526 +3 1080 1526 1321 +3 1081 1100 1134 +3 1081 1134 1135 +3 1081 1135 1101 +3 1082 1214 1359 +3 1082 1359 1244 +3 1083 1245 1360 +3 1083 1360 1215 +3 1084 1132 1496 +3 1084 1496 1457 +3 1085 1458 1497 +3 1085 1497 1133 +3 1086 1216 1465 +3 1086 1465 1217 +3 1087 1341 1527 +3 1087 1527 1283 +3 1088 1284 1528 +3 1088 1528 1342 +3 1089 1107 1175 +3 1089 1166 1100 +3 1089 1175 1166 +3 1090 1101 1167 +3 1090 1167 1176 +3 1090 1176 1108 +3 1091 1130 1427 +3 1091 1427 1435 +3 1091 1435 1115 +3 1092 1116 1436 +3 1092 1428 1131 +3 1092 1436 1428 +3 1093 1347 1466 +3 1093 1466 1230 +3 1094 1231 1467 +3 1094 1467 1348 +3 1095 1283 1532 +3 1095 1532 1373 +3 1096 1374 1533 +3 1096 1533 1284 +3 1097 1111 1187 +3 1097 1179 1107 +3 1097 1187 1179 +3 1098 1108 1180 +3 1098 1180 1188 +3 1098 1188 1112 +3 1099 1112 1192 +3 1099 1191 1111 +3 1099 1192 1191 +3 1100 1166 1185 +3 1100 1185 1134 +3 1101 1135 1186 +3 1101 1186 1167 +3 1102 1221 1437 +3 1102 1437 1220 +3 1103 1291 1425 +3 1103 1425 1260 +3 1104 1261 1426 +3 1104 1426 1292 +3 1105 1260 1433 +3 1105 1433 1308 +3 1106 1309 1434 +3 1106 1434 1261 +3 1107 1179 1211 +3 1107 1211 1175 +3 1108 1176 1212 +3 1108 1212 1180 +3 1109 1224 1441 +3 1109 1441 1345 +3 1110 1346 1442 +3 1110 1442 1225 +3 1111 1191 1234 +3 1111 1234 1187 +3 1112 1188 1235 +3 1112 1235 1192 +3 1113 1160 1357 +3 1113 1357 1423 +3 1113 1423 1193 +3 1114 1194 1424 +3 1114 1358 1161 +3 1114 1424 1358 +3 1115 1435 1484 +3 1115 1484 1183 +3 1116 1184 1485 +3 1116 1485 1436 +3 1117 1379 1599 +3 1117 1599 1343 +3 1118 1344 1600 +3 1118 1600 1380 +3 1119 1338 1407 +3 1119 1407 1214 +3 1120 1215 1408 +3 1120 1408 1339 +3 1121 1254 1369 +3 1121 1369 1252 +3 1122 1253 1370 +3 1122 1370 1255 +3 1123 1125 1577 +3 1123 1577 1613 +3 1123 1613 1168 +3 1124 1169 1614 +3 1124 1578 1126 +3 1124 1614 1578 +3 1125 1242 1607 +3 1125 1607 1577 +3 1126 1578 1608 +3 1126 1608 1243 +3 1127 1321 1585 +3 1127 1585 1320 +3 1128 1316 1581 +3 1128 1581 1419 +3 1129 1420 1582 +3 1129 1582 1317 +3 1130 1222 1494 +3 1130 1494 1427 +3 1131 1428 1495 +3 1131 1495 1223 +3 1132 1238 1583 +3 1132 1583 1496 +3 1133 1497 1584 +3 1133 1584 1239 +3 1134 1185 1246 +3 1134 1213 1135 +3 1134 1246 1213 +3 1135 1213 1247 +3 1135 1247 1186 +3 1136 1277 1530 +3 1136 1530 1403 +3 1137 1404 1531 +3 1137 1531 1278 +3 1138 1248 1361 +3 1138 1361 1281 +3 1139 1282 1362 +3 1139 1362 1249 +3 1140 1162 1326 +3 1140 1326 1332 +3 1140 1332 1170 +3 1141 1171 1333 +3 1141 1327 1163 +3 1141 1333 1327 +3 1142 1268 1389 +3 1142 1389 1285 +3 1143 1286 1390 +3 1143 1390 1269 +3 1144 1349 1471 +3 1144 1471 1299 +3 1145 1300 1472 +3 1145 1472 1350 +3 1146 1461 1569 +3 1146 1569 1262 +3 1147 1263 1570 +3 1147 1570 1462 +3 1148 1158 1353 +3 1148 1353 1355 +3 1148 1355 1173 +3 1149 1174 1356 +3 1149 1354 1159 +3 1149 1356 1354 +3 1150 1306 1431 +3 1150 1431 1293 +3 1151 1294 1432 +3 1151 1432 1307 +3 1152 1336 1696 +3 1152 1696 1486 +3 1153 1487 1697 +3 1153 1697 1337 +3 1154 1299 1544 +3 1154 1544 1397 +3 1155 1398 1545 +3 1155 1545 1300 +3 1156 1314 1678 +3 1156 1678 1506 +3 1157 1507 1679 +3 1157 1679 1315 +3 1158 1204 1385 +3 1158 1385 1353 +3 1159 1354 1386 +3 1159 1386 1205 +3 1160 1244 1409 +3 1160 1409 1357 +3 1161 1358 1410 +3 1161 1410 1245 +3 1162 1252 1391 +3 1162 1391 1326 +3 1163 1327 1392 +3 1163 1392 1253 +3 1164 1367 1480 +3 1164 1480 1306 +3 1165 1307 1481 +3 1165 1481 1368 +3 1166 1175 1272 +3 1166 1272 1274 +3 1166 1274 1185 +3 1167 1186 1275 +3 1167 1273 1176 +3 1167 1275 1273 +3 1168 1613 1680 +3 1168 1680 1250 +3 1169 1251 1681 +3 1169 1681 1614 +3 1170 1332 1383 +3 1170 1383 1248 +3 1171 1249 1384 +3 1171 1384 1333 +3 1172 1199 1568 +3 1172 1567 1198 +3 1172 1568 1567 +3 1173 1355 1399 +3 1173 1399 1254 +3 1174 1255 1400 +3 1174 1400 1356 +3 1175 1211 1301 +3 1175 1301 1272 +3 1176 1273 1302 +3 1176 1302 1212 +3 1177 1178 1340 +3 1177 1340 1429 +3 1177 1429 1268 +3 1178 1269 1430 +3 1178 1430 1340 +3 1179 1187 1297 +3 1179 1297 1312 +3 1179 1312 1211 +3 1180 1212 1313 +3 1180 1298 1188 +3 1180 1313 1298 +3 1181 1478 1660 +3 1181 1660 1341 +3 1182 1342 1661 +3 1182 1661 1479 +3 1183 1484 1596 +3 1183 1596 1295 +3 1184 1296 1597 +3 1184 1597 1485 +3 1185 1274 1310 +3 1185 1310 1246 +3 1186 1247 1311 +3 1186 1311 1275 +3 1187 1234 1324 +3 1187 1324 1297 +3 1188 1298 1325 +3 1188 1325 1235 +3 1189 1218 1490 +3 1189 1455 1209 +3 1189 1490 1455 +3 1190 1210 1456 +3 1190 1456 1491 +3 1190 1491 1219 +3 1191 1192 1303 +3 1191 1303 1330 +3 1191 1330 1234 +3 1192 1235 1331 +3 1192 1331 1303 +3 1193 1423 1512 +3 1193 1512 1291 +3 1194 1292 1513 +3 1194 1513 1424 +3 1195 1293 1470 +3 1195 1470 1294 +3 1196 1411 1741 +3 1196 1741 1482 +3 1197 1483 1742 +3 1197 1742 1412 +3 1198 1567 1629 +3 1198 1629 1258 +3 1199 1259 1630 +3 1199 1630 1568 +3 1200 1476 1682 +3 1200 1682 1379 +3 1201 1380 1683 +3 1201 1683 1477 +3 1202 1236 1542 +3 1202 1522 1203 +3 1202 1542 1522 +3 1203 1522 1543 +3 1203 1543 1237 +3 1204 1285 1447 +3 1204 1447 1385 +3 1205 1386 1448 +3 1205 1448 1286 +3 1206 1520 1759 +3 1206 1759 1411 +3 1207 1412 1760 +3 1207 1760 1521 +3 1208 1228 1417 +3 1208 1417 1418 +3 1208 1418 1229 +3 1209 1455 1510 +3 1209 1510 1270 +3 1210 1271 1511 +3 1210 1511 1456 +3 1211 1312 1365 +3 1211 1365 1301 +3 1212 1302 1366 +3 1212 1366 1313 +3 1213 1246 1334 +3 1213 1334 1335 +3 1213 1335 1247 +3 1214 1407 1523 +3 1214 1523 1359 +3 1215 1360 1524 +3 1215 1524 1408 +3 1216 1401 1668 +3 1216 1668 1465 +3 1217 1465 1669 +3 1217 1669 1402 +3 1218 1308 1555 +3 1218 1555 1490 +3 1219 1491 1556 +3 1219 1556 1309 +3 1220 1437 1575 +3 1220 1575 1381 +3 1221 1382 1576 +3 1221 1576 1437 +3 1222 1345 1631 +3 1222 1631 1494 +3 1223 1495 1632 +3 1223 1632 1346 +3 1224 1381 1586 +3 1224 1586 1441 +3 1225 1442 1587 +3 1225 1587 1382 +3 1226 1443 1646 +3 1226 1646 1438 +3 1227 1439 1647 +3 1227 1647 1444 +3 1228 1281 1453 +3 1228 1453 1417 +3 1229 1418 1454 +3 1229 1454 1282 +3 1230 1466 1662 +3 1230 1662 1401 +3 1231 1402 1663 +3 1231 1663 1467 +3 1232 1343 1621 +3 1232 1621 1672 +3 1232 1672 1287 +3 1233 1288 1673 +3 1233 1622 1344 +3 1233 1673 1622 +3 1234 1330 1387 +3 1234 1387 1324 +3 1235 1325 1388 +3 1235 1388 1331 +3 1236 1304 1627 +3 1236 1627 1542 +3 1237 1543 1628 +3 1237 1628 1305 +3 1238 1373 1735 +3 1238 1735 1583 +3 1239 1584 1736 +3 1239 1736 1374 +3 1240 1279 1723 +3 1240 1704 1241 +3 1240 1723 1704 +3 1241 1704 1724 +3 1241 1724 1280 +3 1242 1318 1676 +3 1242 1676 1607 +3 1243 1608 1677 +3 1243 1677 1319 +3 1244 1359 1516 +3 1244 1516 1409 +3 1245 1410 1517 +3 1245 1517 1360 +3 1246 1310 1375 +3 1246 1375 1334 +3 1247 1335 1376 +3 1247 1376 1311 +3 1248 1383 1468 +3 1248 1468 1361 +3 1249 1362 1469 +3 1249 1469 1384 +3 1250 1680 1792 +3 1250 1792 1371 +3 1251 1372 1793 +3 1251 1793 1681 +3 1252 1369 1502 +3 1252 1502 1391 +3 1253 1392 1503 +3 1253 1503 1370 +3 1254 1399 1504 +3 1254 1504 1369 +3 1255 1370 1505 +3 1255 1505 1400 +3 1256 1508 1827 +3 1256 1827 1536 +3 1257 1537 1828 +3 1257 1828 1509 +3 1258 1629 1721 +3 1258 1721 1351 +3 1259 1352 1722 +3 1259 1722 1630 +3 1260 1425 1619 +3 1260 1619 1433 +3 1261 1434 1620 +3 1261 1620 1426 +3 1262 1569 1664 +3 1262 1664 1347 +3 1263 1348 1665 +3 1263 1665 1570 +3 1264 1328 1658 +3 1264 1592 1349 +3 1264 1658 1592 +3 1265 1350 1593 +3 1265 1593 1659 +3 1265 1659 1329 +3 1266 1322 1743 +3 1266 1743 1508 +3 1267 1509 1744 +3 1267 1744 1323 +3 1268 1429 1538 +3 1268 1538 1389 +3 1269 1390 1539 +3 1269 1539 1430 +3 1270 1510 1615 +3 1270 1615 1367 +3 1271 1368 1616 +3 1271 1616 1511 +3 1272 1301 1405 +3 1272 1395 1274 +3 1272 1405 1395 +3 1273 1275 1396 +3 1273 1396 1406 +3 1273 1406 1302 +3 1274 1395 1415 +3 1274 1415 1310 +3 1275 1311 1416 +3 1275 1416 1396 +3 1276 1290 1566 +3 1276 1565 1289 +3 1276 1566 1565 +3 1277 1438 1719 +3 1277 1719 1530 +3 1278 1531 1720 +3 1278 1720 1439 +3 1279 1363 1795 +3 1279 1795 1723 +3 1280 1724 1796 +3 1280 1796 1364 +3 1281 1361 1518 +3 1281 1518 1453 +3 1282 1454 1519 +3 1282 1519 1362 +3 1283 1527 1776 +3 1283 1776 1532 +3 1284 1533 1777 +3 1284 1777 1528 +3 1285 1389 1553 +3 1285 1553 1447 +3 1286 1448 1554 +3 1286 1554 1390 +3 1287 1672 1763 +3 1287 1763 1377 +3 1288 1378 1764 +3 1288 1764 1673 +3 1289 1565 1623 +3 1289 1623 1338 +3 1290 1339 1624 +3 1290 1624 1566 +3 1291 1512 1666 +3 1291 1666 1425 +3 1292 1426 1667 +3 1292 1667 1513 +3 1293 1431 1609 +3 1293 1609 1470 +3 1294 1470 1610 +3 1294 1610 1432 +3 1295 1596 1751 +3 1295 1751 1443 +3 1296 1444 1752 +3 1296 1752 1597 +3 1297 1324 1421 +3 1297 1413 1312 +3 1297 1421 1413 +3 1298 1313 1414 +3 1298 1414 1422 +3 1298 1422 1325 +3 1299 1471 1757 +3 1299 1757 1544 +3 1300 1545 1758 +3 1300 1758 1472 +3 1301 1365 1451 +3 1301 1451 1405 +3 1302 1406 1452 +3 1302 1452 1366 +3 1303 1331 1446 +3 1303 1445 1330 +3 1303 1446 1445 +3 1304 1397 1737 +3 1304 1737 1627 +3 1305 1628 1738 +3 1305 1738 1398 +3 1306 1480 1617 +3 1306 1617 1431 +3 1307 1432 1618 +3 1307 1618 1481 +3 1308 1433 1686 +3 1308 1686 1555 +3 1309 1556 1687 +3 1309 1687 1434 +3 1310 1415 1473 +3 1310 1473 1375 +3 1311 1376 1474 +3 1311 1474 1416 +3 1312 1413 1449 +3 1312 1449 1365 +3 1313 1366 1450 +3 1313 1450 1414 +3 1314 1482 1877 +3 1314 1877 1678 +3 1315 1679 1878 +3 1315 1878 1483 +3 1316 1525 1817 +3 1316 1817 1581 +3 1317 1582 1818 +3 1317 1818 1526 +3 1318 1419 1784 +3 1318 1784 1676 +3 1319 1677 1785 +3 1319 1785 1420 +3 1320 1585 1815 +3 1320 1815 1525 +3 1321 1526 1816 +3 1321 1816 1585 +3 1322 1393 1811 +3 1322 1811 1743 +3 1323 1744 1812 +3 1323 1812 1394 +3 1324 1387 1463 +3 1324 1463 1421 +3 1325 1422 1464 +3 1325 1464 1388 +3 1326 1391 1594 +3 1326 1514 1332 +3 1326 1594 1514 +3 1327 1333 1515 +3 1327 1515 1595 +3 1327 1595 1392 +3 1328 1403 1755 +3 1328 1755 1658 +3 1329 1659 1756 +3 1329 1756 1404 +3 1330 1445 1488 +3 1330 1488 1387 +3 1331 1388 1489 +3 1331 1489 1446 +3 1332 1514 1551 +3 1332 1551 1383 +3 1333 1384 1552 +3 1333 1552 1515 +3 1334 1375 1459 +3 1334 1440 1335 +3 1334 1459 1440 +3 1335 1440 1460 +3 1335 1460 1376 +3 1336 1536 1916 +3 1336 1916 1696 +3 1337 1697 1917 +3 1337 1917 1537 +3 1338 1623 1702 +3 1338 1702 1407 +3 1339 1408 1703 +3 1339 1703 1624 +3 1340 1430 1598 +3 1340 1598 1429 +3 1341 1660 1865 +3 1341 1865 1527 +3 1342 1528 1866 +3 1342 1866 1661 +3 1343 1599 1887 +3 1343 1887 1621 +3 1344 1622 1888 +3 1344 1888 1600 +3 1345 1441 1727 +3 1345 1727 1631 +3 1346 1632 1728 +3 1346 1728 1442 +3 1347 1664 1790 +3 1347 1790 1466 +3 1348 1467 1791 +3 1348 1791 1665 +3 1349 1592 1725 +3 1349 1725 1471 +3 1350 1472 1726 +3 1350 1726 1593 +3 1351 1721 1869 +3 1351 1869 1476 +3 1352 1477 1870 +3 1352 1870 1722 +3 1353 1385 1625 +3 1353 1590 1355 +3 1353 1625 1590 +3 1354 1356 1591 +3 1354 1591 1626 +3 1354 1626 1386 +3 1355 1590 1637 +3 1355 1637 1399 +3 1356 1400 1638 +3 1356 1638 1591 +3 1357 1409 1650 +3 1357 1650 1717 +3 1357 1717 1423 +3 1358 1424 1718 +3 1358 1651 1410 +3 1358 1718 1651 +3 1359 1523 1700 +3 1359 1700 1516 +3 1360 1517 1701 +3 1360 1701 1524 +3 1361 1468 1635 +3 1361 1635 1518 +3 1362 1519 1636 +3 1362 1636 1469 +3 1363 1486 1932 +3 1363 1932 1795 +3 1364 1796 1933 +3 1364 1933 1487 +3 1365 1449 1547 +3 1365 1547 1451 +3 1366 1452 1548 +3 1366 1548 1450 +3 1367 1615 1745 +3 1367 1745 1480 +3 1368 1481 1746 +3 1368 1746 1616 +3 1369 1504 1674 +3 1369 1674 1502 +3 1370 1503 1675 +3 1370 1675 1505 +3 1371 1792 1946 +3 1371 1946 1520 +3 1372 1521 1947 +3 1372 1947 1793 +3 1373 1532 1895 +3 1373 1895 1735 +3 1374 1736 1896 +3 1374 1896 1533 +3 1375 1473 1563 +3 1375 1563 1459 +3 1376 1460 1564 +3 1376 1564 1474 +3 1377 1763 1883 +3 1377 1883 1478 +3 1378 1479 1884 +3 1378 1884 1764 +3 1379 1682 1920 +3 1379 1920 1599 +3 1380 1600 1921 +3 1380 1921 1683 +3 1381 1575 1797 +3 1381 1797 1586 +3 1382 1587 1798 +3 1382 1798 1576 +3 1383 1551 1644 +3 1383 1644 1468 +3 1384 1469 1645 +3 1384 1645 1552 +3 1385 1447 1688 +3 1385 1688 1625 +3 1386 1626 1689 +3 1386 1689 1448 +3 1387 1488 1557 +3 1387 1557 1463 +3 1388 1464 1558 +3 1388 1558 1489 +3 1389 1538 1731 +3 1389 1731 1553 +3 1390 1554 1732 +3 1390 1732 1539 +3 1391 1502 1709 +3 1391 1709 1594 +3 1392 1595 1710 +3 1392 1710 1503 +3 1393 1506 1922 +3 1393 1922 1811 +3 1394 1812 1923 +3 1394 1923 1507 +3 1395 1405 1571 +3 1395 1571 1579 +3 1395 1579 1415 +3 1396 1416 1580 +3 1396 1572 1406 +3 1396 1580 1572 +3 1397 1544 1875 +3 1397 1875 1737 +3 1398 1738 1876 +3 1398 1876 1545 +3 1399 1637 1733 +3 1399 1733 1504 +3 1400 1505 1734 +3 1400 1734 1638 +3 1401 1662 1899 +3 1401 1899 1668 +3 1402 1669 1900 +3 1402 1900 1663 +3 1403 1530 1879 +3 1403 1879 1755 +3 1404 1756 1880 +3 1404 1880 1531 +3 1405 1451 1605 +3 1405 1605 1571 +3 1406 1572 1606 +3 1406 1606 1452 +3 1407 1702 1809 +3 1407 1809 1523 +3 1408 1524 1810 +3 1408 1810 1703 +3 1409 1516 1749 +3 1409 1749 1650 +3 1410 1651 1750 +3 1410 1750 1517 +3 1411 1759 2014 +3 1411 2014 1741 +3 1412 1742 2015 +3 1412 2015 1760 +3 1413 1421 1561 +3 1413 1561 1588 +3 1413 1588 1449 +3 1414 1450 1589 +3 1414 1562 1422 +3 1414 1589 1562 +3 1415 1579 1639 +3 1415 1639 1473 +3 1416 1474 1640 +3 1416 1640 1580 +3 1417 1453 1707 +3 1417 1698 1418 +3 1417 1707 1698 +3 1418 1698 1708 +3 1418 1708 1454 +3 1419 1581 1938 +3 1419 1938 1784 +3 1420 1785 1939 +3 1420 1939 1582 +3 1421 1463 1601 +3 1421 1601 1561 +3 1422 1562 1602 +3 1422 1602 1464 +3 1423 1717 1819 +3 1423 1819 1512 +3 1424 1513 1820 +3 1424 1820 1718 +3 1425 1666 1840 +3 1425 1840 1619 +3 1426 1620 1841 +3 1426 1841 1667 +3 1427 1494 1854 +3 1427 1848 1435 +3 1427 1854 1848 +3 1428 1436 1849 +3 1428 1849 1855 +3 1428 1855 1495 +3 1429 1598 1711 +3 1429 1711 1538 +3 1430 1539 1712 +3 1430 1712 1598 +3 1431 1617 1771 +3 1431 1771 1609 +3 1432 1610 1772 +3 1432 1772 1618 +3 1433 1619 1856 +3 1433 1856 1686 +3 1434 1687 1857 +3 1434 1857 1620 +3 1435 1848 1893 +3 1435 1893 1484 +3 1436 1485 1894 +3 1436 1894 1849 +3 1437 1576 1864 +3 1437 1864 1575 +3 1438 1646 1924 +3 1438 1924 1719 +3 1439 1720 1925 +3 1439 1925 1647 +3 1440 1459 1611 +3 1440 1611 1612 +3 1440 1612 1460 +3 1441 1586 1867 +3 1441 1867 1727 +3 1442 1728 1868 +3 1442 1868 1587 +3 1443 1751 1928 +3 1443 1928 1646 +3 1444 1647 1929 +3 1444 1929 1752 +3 1445 1446 1643 +3 1445 1643 1670 +3 1445 1670 1488 +3 1446 1489 1671 +3 1446 1671 1643 +3 1447 1553 1788 +3 1447 1788 1688 +3 1448 1689 1789 +3 1448 1789 1554 +3 1449 1588 1690 +3 1449 1690 1547 +3 1450 1548 1691 +3 1450 1691 1589 +3 1451 1547 1694 +3 1451 1694 1605 +3 1452 1606 1695 +3 1452 1695 1548 +3 1453 1518 1761 +3 1453 1761 1707 +3 1454 1708 1762 +3 1454 1762 1519 +3 1455 1490 1837 +3 1455 1823 1510 +3 1455 1837 1823 +3 1456 1511 1824 +3 1456 1824 1838 +3 1456 1838 1491 +3 1457 1496 1983 +3 1457 1952 1461 +3 1457 1983 1952 +3 1458 1462 1953 +3 1458 1953 1984 +3 1458 1984 1497 +3 1459 1563 1713 +3 1459 1713 1611 +3 1460 1612 1714 +3 1460 1714 1564 +3 1461 1952 1979 +3 1461 1979 1569 +3 1462 1570 1980 +3 1462 1980 1953 +3 1463 1557 1684 +3 1463 1684 1601 +3 1464 1602 1685 +3 1464 1685 1558 +3 1465 1668 1958 +3 1465 1958 1669 +3 1466 1790 1956 +3 1466 1956 1662 +3 1467 1663 1957 +3 1467 1957 1791 +3 1468 1644 1780 +3 1468 1780 1635 +3 1469 1636 1781 +3 1469 1781 1645 +3 1470 1609 1839 +3 1470 1839 1610 +3 1471 1725 1989 +3 1471 1989 1757 +3 1472 1758 1990 +3 1472 1990 1726 +3 1473 1639 1739 +3 1473 1739 1563 +3 1474 1564 1740 +3 1474 1740 1640 +3 1475 1492 1498 +3 1475 1493 1492 +3 1475 1498 1500 +3 1475 1499 1493 +3 1475 1500 1501 +3 1475 1501 1499 +3 1476 1869 2058 +3 1476 2058 1682 +3 1477 1683 2059 +3 1477 2059 1870 +3 1478 1883 2034 +3 1478 2034 1660 +3 1479 1661 2035 +3 1479 2035 1884 +3 1480 1745 1846 +3 1480 1846 1617 +3 1481 1618 1847 +3 1481 1847 1746 +3 1482 1741 2136 +3 1482 2136 1877 +3 1483 1878 2137 +3 1483 2137 1742 +3 1484 1893 1985 +3 1484 1985 1596 +3 1485 1597 1986 +3 1485 1986 1894 +3 1486 1696 2142 +3 1486 2142 1932 +3 1487 1933 2143 +3 1487 2143 1697 +3 1488 1670 1729 +3 1488 1729 1557 +3 1489 1558 1730 +3 1489 1730 1671 +3 1490 1555 1903 +3 1490 1903 1837 +3 1491 1838 1904 +3 1491 1904 1556 +3 1492 1493 1529 +3 1492 1529 1549 +3 1492 1534 1498 +3 1492 1549 1534 +3 1493 1499 1535 +3 1493 1535 1550 +3 1493 1550 1529 +3 1494 1631 1973 +3 1494 1973 1854 +3 1495 1855 1974 +3 1495 1974 1632 +3 1496 1583 2040 +3 1496 2040 1983 +3 1497 1984 2041 +3 1497 2041 1584 +3 1498 1534 1559 +3 1498 1540 1500 +3 1498 1559 1540 +3 1499 1501 1541 +3 1499 1541 1560 +3 1499 1560 1535 +3 1500 1540 1573 +3 1500 1546 1501 +3 1500 1573 1546 +3 1501 1546 1574 +3 1501 1574 1541 +3 1502 1674 1858 +3 1502 1858 1709 +3 1503 1710 1859 +3 1503 1859 1675 +3 1504 1733 1862 +3 1504 1862 1674 +3 1505 1675 1863 +3 1505 1863 1734 +3 1506 1678 2077 +3 1506 2077 1922 +3 1507 1923 2078 +3 1507 2078 1679 +3 1508 1743 2032 +3 1508 2032 1827 +3 1509 1828 2033 +3 1509 2033 1744 +3 1510 1823 1910 +3 1510 1910 1615 +3 1511 1616 1911 +3 1511 1911 1824 +3 1512 1819 1948 +3 1512 1948 1666 +3 1513 1667 1949 +3 1513 1949 1820 +3 1514 1594 1852 +3 1514 1778 1551 +3 1514 1852 1778 +3 1515 1552 1779 +3 1515 1779 1853 +3 1515 1853 1595 +3 1516 1700 1889 +3 1516 1889 1749 +3 1517 1750 1890 +3 1517 1890 1701 +3 1518 1635 1831 +3 1518 1831 1761 +3 1519 1762 1832 +3 1519 1832 1636 +3 1520 1946 2183 +3 1520 2183 1759 +3 1521 1760 2184 +3 1521 2184 1947 +3 1522 1542 1971 +3 1522 1971 1972 +3 1522 1972 1543 +3 1523 1809 1965 +3 1523 1965 1700 +3 1524 1701 1966 +3 1524 1966 1810 +3 1525 1815 2095 +3 1525 2095 1817 +3 1526 1818 2096 +3 1526 2096 1816 +3 1527 1865 2124 +3 1527 2124 1776 +3 1528 1777 2125 +3 1528 2125 1866 +3 1529 1550 1604 +3 1529 1603 1549 +3 1529 1604 1603 +3 1530 1719 2044 +3 1530 2044 1879 +3 1531 1880 2045 +3 1531 2045 1720 +3 1532 1776 2140 +3 1532 2140 1895 +3 1533 1896 2141 +3 1533 2141 1777 +3 1534 1549 1633 +3 1534 1633 1641 +3 1534 1641 1559 +3 1535 1560 1642 +3 1535 1634 1550 +3 1535 1642 1634 +3 1536 1827 2231 +3 1536 2231 1916 +3 1537 1917 2232 +3 1537 2232 1828 +3 1538 1711 1860 +3 1538 1860 1731 +3 1539 1732 1861 +3 1539 1861 1712 +3 1540 1559 1648 +3 1540 1648 1654 +3 1540 1654 1573 +3 1541 1574 1655 +3 1541 1649 1560 +3 1541 1655 1649 +3 1542 1627 2007 +3 1542 2007 1971 +3 1543 1972 2008 +3 1543 2008 1628 +3 1544 1757 2079 +3 1544 2079 1875 +3 1545 1876 2080 +3 1545 2080 1758 +3 1546 1573 1656 +3 1546 1656 1657 +3 1546 1657 1574 +3 1547 1690 1821 +3 1547 1821 1694 +3 1548 1695 1822 +3 1548 1822 1691 +3 1549 1603 1652 +3 1549 1652 1633 +3 1550 1634 1653 +3 1550 1653 1604 +3 1551 1778 1835 +3 1551 1835 1644 +3 1552 1645 1836 +3 1552 1836 1779 +3 1553 1731 1926 +3 1553 1926 1788 +3 1554 1789 1927 +3 1554 1927 1732 +3 1555 1686 2005 +3 1555 2005 1903 +3 1556 1904 2006 +3 1556 2006 1687 +3 1557 1729 1813 +3 1557 1813 1684 +3 1558 1685 1814 +3 1558 1814 1730 +3 1559 1641 1692 +3 1559 1692 1648 +3 1560 1649 1693 +3 1560 1693 1642 +3 1561 1601 1769 +3 1561 1765 1588 +3 1561 1769 1765 +3 1562 1589 1766 +3 1562 1766 1770 +3 1562 1770 1602 +3 1563 1739 1842 +3 1563 1842 1713 +3 1564 1714 1843 +3 1564 1843 1740 +3 1565 1566 1937 +3 1565 1937 1963 +3 1565 1963 1623 +3 1566 1624 1964 +3 1566 1964 1937 +3 1567 1568 2073 +3 1567 2073 2099 +3 1567 2099 1629 +3 1568 1630 2100 +3 1568 2100 2073 +3 1569 1979 2030 +3 1569 2030 1664 +3 1570 1665 2031 +3 1570 2031 1980 +3 1571 1605 1805 +3 1571 1801 1579 +3 1571 1805 1801 +3 1572 1580 1802 +3 1572 1802 1806 +3 1572 1806 1606 +3 1573 1654 1705 +3 1573 1705 1656 +3 1574 1657 1706 +3 1574 1706 1655 +3 1575 1864 2054 +3 1575 2054 1797 +3 1576 1798 2055 +3 1576 2055 1864 +3 1577 1607 2071 +3 1577 2069 1613 +3 1577 2071 2069 +3 1578 1614 2070 +3 1578 2070 2072 +3 1578 2072 1608 +3 1579 1801 1829 +3 1579 1829 1639 +3 1580 1640 1830 +3 1580 1830 1802 +3 1581 1817 2165 +3 1581 2165 1938 +3 1582 1939 2166 +3 1582 2166 1818 +3 1583 1735 2177 +3 1583 2177 2040 +3 1584 2041 2178 +3 1584 2178 1736 +3 1585 1816 2169 +3 1585 2169 1815 +3 1586 1797 2048 +3 1586 2048 1867 +3 1587 1868 2049 +3 1587 2049 1798 +3 1588 1765 1844 +3 1588 1844 1690 +3 1589 1691 1845 +3 1589 1845 1766 +3 1590 1625 1897 +3 1590 1897 1930 +3 1590 1930 1637 +3 1591 1638 1931 +3 1591 1898 1626 +3 1591 1931 1898 +3 1592 1658 2060 +3 1592 2001 1725 +3 1592 2060 2001 +3 1593 1726 2002 +3 1593 2002 2061 +3 1593 2061 1659 +3 1594 1709 1954 +3 1594 1954 1852 +3 1595 1853 1955 +3 1595 1955 1710 +3 1596 1985 2132 +3 1596 2132 1751 +3 1597 1752 2133 +3 1597 2133 1986 +3 1598 1712 1909 +3 1598 1909 1711 +3 1599 1920 2233 +3 1599 2233 1887 +3 1600 1888 2234 +3 1600 2234 1921 +3 1601 1684 1825 +3 1601 1825 1769 +3 1602 1770 1826 +3 1602 1826 1685 +3 1603 1604 1699 +3 1603 1699 1715 +3 1603 1715 1652 +3 1604 1653 1716 +3 1604 1716 1699 +3 1605 1694 1871 +3 1605 1871 1805 +3 1606 1806 1872 +3 1606 1872 1695 +3 1607 1676 2235 +3 1607 2235 2071 +3 1608 2072 2236 +3 1608 2236 1677 +3 1609 1771 1995 +3 1609 1995 1839 +3 1610 1839 1996 +3 1610 1996 1772 +3 1611 1713 1885 +3 1611 1794 1612 +3 1611 1885 1794 +3 1612 1794 1886 +3 1612 1886 1714 +3 1613 2069 2128 +3 1613 2128 1680 +3 1614 1681 2129 +3 1614 2129 2070 +3 1615 1910 2024 +3 1615 2024 1745 +3 1616 1746 2025 +3 1616 2025 1911 +3 1617 1846 1999 +3 1617 1999 1771 +3 1618 1772 2000 +3 1618 2000 1847 +3 1619 1840 2064 +3 1619 2064 1856 +3 1620 1857 2065 +3 1620 2065 1841 +3 1621 1887 2126 +3 1621 2126 1672 +3 1622 1673 2127 +3 1622 2127 1888 +3 1623 1963 2020 +3 1623 2020 1702 +3 1624 1703 2021 +3 1624 2021 1964 +3 1625 1688 1950 +3 1625 1950 1897 +3 1626 1898 1951 +3 1626 1951 1689 +3 1627 1737 2120 +3 1627 2120 2007 +3 1628 2008 2121 +3 1628 2121 1738 +3 1629 2099 2179 +3 1629 2179 1721 +3 1630 1722 2180 +3 1630 2180 2100 +3 1631 1727 2050 +3 1631 2050 1973 +3 1632 1974 2051 +3 1632 2051 1728 +3 1633 1652 1753 +3 1633 1747 1641 +3 1633 1753 1747 +3 1634 1642 1748 +3 1634 1748 1754 +3 1634 1754 1653 +3 1635 1780 1967 +3 1635 1967 1831 +3 1636 1832 1968 +3 1636 1968 1781 +3 1637 1930 1997 +3 1637 1997 1733 +3 1638 1734 1998 +3 1638 1998 1931 +3 1639 1829 1914 +3 1639 1914 1739 +3 1640 1740 1915 +3 1640 1915 1830 +3 1641 1747 1773 +3 1641 1773 1692 +3 1642 1693 1774 +3 1642 1774 1748 +3 1643 1671 1882 +3 1643 1881 1670 +3 1643 1882 1881 +3 1644 1835 1959 +3 1644 1959 1780 +3 1645 1781 1960 +3 1645 1960 1836 +3 1646 1928 2193 +3 1646 2193 1924 +3 1647 1925 2194 +3 1647 2194 1929 +3 1648 1692 1786 +3 1648 1767 1654 +3 1648 1786 1767 +3 1649 1655 1768 +3 1649 1768 1787 +3 1649 1787 1693 +3 1650 1749 2003 +3 1650 2003 2074 +3 1650 2074 1717 +3 1651 1718 2075 +3 1651 2004 1750 +3 1651 2075 2004 +3 1652 1715 1782 +3 1652 1782 1753 +3 1653 1754 1783 +3 1653 1783 1716 +3 1654 1767 1799 +3 1654 1799 1705 +3 1655 1706 1800 +3 1655 1800 1768 +3 1656 1705 1803 +3 1656 1775 1657 +3 1656 1803 1775 +3 1657 1775 1804 +3 1657 1804 1706 +3 1658 1755 2163 +3 1658 2163 2060 +3 1659 2061 2164 +3 1659 2164 1756 +3 1660 2034 2262 +3 1660 2262 1865 +3 1661 1866 2263 +3 1661 2263 2035 +3 1662 1956 2223 +3 1662 2223 1899 +3 1663 1900 2224 +3 1663 2224 1957 +3 1664 2030 2173 +3 1664 2173 1790 +3 1665 1791 2174 +3 1665 2174 2031 +3 1666 1948 2146 +3 1666 2146 1840 +3 1667 1841 2147 +3 1667 2147 1949 +3 1668 1899 2215 +3 1668 2215 1958 +3 1669 1958 2216 +3 1669 2216 1900 +3 1670 1881 1918 +3 1670 1918 1729 +3 1671 1730 1919 +3 1671 1919 1882 +3 1672 2126 2207 +3 1672 2207 1763 +3 1673 1764 2208 +3 1673 2208 2127 +3 1674 1862 2046 +3 1674 2046 1858 +3 1675 1859 2047 +3 1675 2047 1863 +3 1676 1784 2321 +3 1676 2321 2235 +3 1677 2236 2322 +3 1677 2322 1785 +3 1678 1877 2284 +3 1678 2284 2077 +3 1679 2078 2285 +3 1679 2285 1878 +3 1680 2128 2239 +3 1680 2239 1792 +3 1681 1793 2240 +3 1681 2240 2129 +3 1682 2058 2302 +3 1682 2302 1920 +3 1683 1921 2303 +3 1683 2303 2059 +3 1684 1813 1935 +3 1684 1935 1825 +3 1685 1826 1936 +3 1685 1936 1814 +3 1686 1856 2175 +3 1686 2175 2005 +3 1687 2006 2176 +3 1687 2176 1857 +3 1688 1788 2038 +3 1688 2038 1950 +3 1689 1951 2039 +3 1689 2039 1789 +3 1690 1844 1975 +3 1690 1975 1821 +3 1691 1822 1976 +3 1691 1976 1845 +3 1692 1773 1833 +3 1692 1833 1786 +3 1693 1787 1834 +3 1693 1834 1774 +3 1694 1821 1981 +3 1694 1981 1871 +3 1695 1872 1982 +3 1695 1982 1822 +3 1696 1916 2395 +3 1696 2395 2142 +3 1697 2143 2396 +3 1697 2396 1917 +3 1698 1707 2009 +3 1698 2009 2010 +3 1698 2010 1708 +3 1699 1716 1808 +3 1699 1807 1715 +3 1699 1808 1807 +3 1700 1965 2185 +3 1700 2185 1889 +3 1701 1890 2186 +3 1701 2186 1966 +3 1702 2020 2158 +3 1702 2158 1809 +3 1703 1810 2159 +3 1703 2159 2021 +3 1704 1723 2319 +3 1704 2319 2320 +3 1704 2320 1724 +3 1705 1799 1873 +3 1705 1873 1803 +3 1706 1804 1874 +3 1706 1874 1800 +3 1707 1761 2052 +3 1707 2052 2009 +3 1708 2010 2053 +3 1708 2053 1762 +3 1709 1858 2114 +3 1709 2114 1954 +3 1710 1955 2115 +3 1710 2115 1859 +3 1711 1909 2036 +3 1711 2036 1860 +3 1712 1861 2037 +3 1712 2037 1909 +3 1713 1842 2011 +3 1713 2011 1885 +3 1714 1886 2012 +3 1714 2012 1843 +3 1715 1807 1850 +3 1715 1850 1782 +3 1716 1783 1851 +3 1716 1851 1808 +3 1717 2074 2181 +3 1717 2181 1819 +3 1718 1820 2182 +3 1718 2182 2075 +3 1719 1924 2266 +3 1719 2266 2044 +3 1720 2045 2267 +3 1720 2267 1925 +3 1721 2179 2329 +3 1721 2329 1869 +3 1722 1870 2330 +3 1722 2330 2180 +3 1723 1795 2389 +3 1723 2389 2319 +3 1724 2320 2390 +3 1724 2390 1796 +3 1725 2001 2291 +3 1725 2291 1989 +3 1726 1990 2292 +3 1726 2292 2002 +3 1727 1867 2201 +3 1727 2201 2050 +3 1728 2051 2202 +3 1728 2202 1868 +3 1729 1918 1991 +3 1729 1991 1813 +3 1730 1814 1992 +3 1730 1992 1919 +3 1731 1860 2042 +3 1731 2042 1926 +3 1732 1927 2043 +3 1732 2043 1861 +3 1733 1997 2138 +3 1733 2138 1862 +3 1734 1863 2139 +3 1734 2139 1998 +3 1735 1895 2356 +3 1735 2356 2177 +3 1736 2178 2357 +3 1736 2357 1896 +3 1737 1875 2272 +3 1737 2272 2120 +3 1738 2121 2273 +3 1738 2273 1876 +3 1739 1914 2018 +3 1739 2018 1842 +3 1740 1843 2019 +3 1740 2019 1915 +3 1741 2014 2441 +3 1741 2441 2136 +3 1742 2137 2442 +3 1742 2442 2015 +3 1743 1811 2339 +3 1743 2339 2032 +3 1744 2033 2340 +3 1744 2340 1812 +3 1745 2024 2152 +3 1745 2152 1846 +3 1746 1847 2153 +3 1746 2153 2025 +3 1747 1753 1891 +3 1747 1891 1901 +3 1747 1901 1773 +3 1748 1774 1902 +3 1748 1892 1754 +3 1748 1902 1892 +3 1749 1889 2150 +3 1749 2150 2003 +3 1750 2004 2151 +3 1750 2151 1890 +3 1751 2132 2304 +3 1751 2304 1928 +3 1752 1929 2305 +3 1752 2305 2133 +3 1753 1782 1907 +3 1753 1907 1891 +3 1754 1892 1908 +3 1754 1908 1783 +3 1755 1879 2286 +3 1755 2286 2163 +3 1756 2164 2287 +3 1756 2287 1880 +3 1757 1989 2337 +3 1757 2337 2079 +3 1758 2080 2338 +3 1758 2338 1990 +3 1759 2183 2463 +3 1759 2463 2014 +3 1760 2015 2464 +3 1760 2464 2184 +3 1761 1831 2148 +3 1761 2148 2052 +3 1762 2053 2149 +3 1762 2149 1832 +3 1763 2207 2311 +3 1763 2311 1883 +3 1764 1884 2312 +3 1764 2312 2208 +3 1765 1769 1987 +3 1765 1987 2066 +3 1765 2066 1844 +3 1766 1845 2067 +3 1766 1988 1770 +3 1766 2067 1988 +3 1767 1786 1905 +3 1767 1905 1912 +3 1767 1912 1799 +3 1768 1800 1913 +3 1768 1906 1787 +3 1768 1913 1906 +3 1769 1825 2016 +3 1769 2016 1987 +3 1770 1988 2017 +3 1770 2017 1826 +3 1771 1999 2237 +3 1771 2237 1995 +3 1772 1996 2238 +3 1772 2238 2000 +3 1773 1901 1944 +3 1773 1944 1833 +3 1774 1834 1945 +3 1774 1945 1902 +3 1775 1803 1940 +3 1775 1940 1941 +3 1775 1941 1804 +3 1776 2124 2425 +3 1776 2425 2140 +3 1777 2141 2426 +3 1777 2426 2125 +3 1778 1852 2171 +3 1778 2097 1835 +3 1778 2171 2097 +3 1779 1836 2098 +3 1779 2098 2172 +3 1779 2172 1853 +3 1780 1959 2144 +3 1780 2144 1967 +3 1781 1968 2145 +3 1781 2145 1960 +3 1782 1850 1977 +3 1782 1977 1907 +3 1783 1908 1978 +3 1783 1978 1851 +3 1784 1938 2499 +3 1784 2499 2321 +3 1785 2322 2500 +3 1785 2500 1939 +3 1786 1833 1942 +3 1786 1942 1905 +3 1787 1906 1943 +3 1787 1943 1834 +3 1788 1926 2203 +3 1788 2203 2038 +3 1789 2039 2204 +3 1789 2204 1927 +3 1790 2173 2345 +3 1790 2345 1956 +3 1791 1957 2346 +3 1791 2346 2174 +3 1792 2239 2397 +3 1792 2397 1946 +3 1793 1947 2398 +3 1793 2398 2240 +3 1794 1885 2068 +3 1794 2068 1886 +3 1795 1932 2459 +3 1795 2459 2389 +3 1796 2390 2460 +3 1796 2460 1933 +3 1797 2054 2315 +3 1797 2315 2048 +3 1798 2049 2316 +3 1798 2316 2055 +3 1799 1912 1969 +3 1799 1969 1873 +3 1800 1874 1970 +3 1800 1970 1913 +3 1801 1805 2062 +3 1801 2062 2093 +3 1801 2093 1829 +3 1802 1830 2094 +3 1802 2063 1806 +3 1802 2094 2063 +3 1803 1873 1993 +3 1803 1993 1940 +3 1804 1941 1994 +3 1804 1994 1874 +3 1805 1871 2110 +3 1805 2110 2062 +3 1806 2063 2111 +3 1806 2111 1872 +3 1807 1808 1934 +3 1807 1934 1961 +3 1807 1961 1850 +3 1808 1851 1962 +3 1808 1962 1934 +3 1809 2158 2307 +3 1809 2307 1965 +3 1810 1966 2308 +3 1810 2308 2159 +3 1811 1922 2437 +3 1811 2437 2339 +3 1812 2340 2438 +3 1812 2438 1923 +3 1813 1991 2108 +3 1813 2108 1935 +3 1814 1936 2109 +3 1814 2109 1992 +3 1815 2169 2449 +3 1815 2449 2095 +3 1816 2096 2450 +3 1816 2450 2169 +3 1817 2095 2445 +3 1817 2445 2165 +3 1818 2166 2446 +3 1818 2446 2096 +3 1819 2181 2309 +3 1819 2309 1948 +3 1820 1949 2310 +3 1820 2310 2182 +3 1821 1975 2156 +3 1821 2156 1981 +3 1822 1982 2157 +3 1822 2157 1976 +3 1823 1837 2276 +3 1823 2276 2278 +3 1823 2278 1910 +3 1824 1911 2279 +3 1824 2277 1838 +3 1824 2279 2277 +3 1825 1935 2130 +3 1825 2130 2016 +3 1826 2017 2131 +3 1826 2131 1936 +3 1827 2032 2439 +3 1827 2439 2231 +3 1828 2232 2440 +3 1828 2440 2033 +3 1829 2093 2167 +3 1829 2167 1914 +3 1830 1915 2168 +3 1830 2168 2094 +3 1831 1967 2256 +3 1831 2256 2148 +3 1832 2149 2257 +3 1832 2257 1968 +3 1833 1944 2056 +3 1833 2056 1942 +3 1834 1943 2057 +3 1834 2057 1945 +3 1835 2097 2213 +3 1835 2213 1959 +3 1836 1960 2214 +3 1836 2214 2098 +3 1837 1903 2331 +3 1837 2331 2276 +3 1838 2277 2332 +3 1838 2332 1904 +3 1839 1995 2288 +3 1839 2288 1996 +3 1840 2146 2368 +3 1840 2368 2064 +3 1841 2065 2369 +3 1841 2369 2147 +3 1842 2018 2221 +3 1842 2221 2011 +3 1843 2012 2222 +3 1843 2222 2019 +3 1844 2066 2195 +3 1844 2195 1975 +3 1845 1976 2196 +3 1845 2196 2067 +3 1846 2152 2289 +3 1846 2289 1999 +3 1847 2000 2290 +3 1847 2290 2153 +3 1848 1854 2380 +3 1848 2380 2405 +3 1848 2405 1893 +3 1849 1894 2406 +3 1849 2381 1855 +3 1849 2406 2381 +3 1850 1961 2085 +3 1850 2085 1977 +3 1851 1978 2086 +3 1851 2086 1962 +3 1852 1954 2270 +3 1852 2270 2171 +3 1853 2172 2271 +3 1853 2271 1955 +3 1854 1973 2401 +3 1854 2401 2380 +3 1855 2381 2402 +3 1855 2402 1974 +3 1856 2064 2382 +3 1856 2382 2175 +3 1857 2176 2383 +3 1857 2383 2065 +3 1858 2046 2300 +3 1858 2300 2114 +3 1859 2115 2301 +3 1859 2301 2047 +3 1860 2036 2243 +3 1860 2243 2042 +3 1861 2043 2244 +3 1861 2244 2037 +3 1862 2138 2317 +3 1862 2317 2046 +3 1863 2047 2318 +3 1863 2318 2139 +3 1864 2055 2388 +3 1864 2388 2054 +3 1865 2262 2549 +3 1865 2549 2124 +3 1866 2125 2550 +3 1866 2550 2263 +3 1867 2048 2384 +3 1867 2384 2201 +3 1868 2202 2385 +3 1868 2385 2049 +3 1869 2329 2551 +3 1869 2551 2058 +3 1870 2059 2552 +3 1870 2552 2330 +3 1871 1981 2225 +3 1871 2225 2110 +3 1872 2111 2226 +3 1872 2226 1982 +3 1873 1969 2081 +3 1873 2081 1993 +3 1874 1994 2082 +3 1874 2082 1970 +3 1875 2079 2501 +3 1875 2501 2272 +3 1876 2273 2502 +3 1876 2502 2080 +3 1877 2136 2565 +3 1877 2565 2284 +3 1878 2285 2566 +3 1878 2566 2137 +3 1879 2044 2481 +3 1879 2481 2286 +3 1880 2287 2482 +3 1880 2482 2045 +3 1881 1882 2170 +3 1881 2170 2191 +3 1881 2191 1918 +3 1882 1919 2192 +3 1882 2192 2170 +3 1883 2311 2487 +3 1883 2487 2034 +3 1884 2035 2488 +3 1884 2488 2312 +3 1885 2011 2197 +3 1885 2197 2068 +3 1886 2068 2198 +3 1886 2198 2012 +3 1887 2233 2451 +3 1887 2451 2126 +3 1888 2127 2452 +3 1888 2452 2234 +3 1889 2185 2431 +3 1889 2431 2150 +3 1890 2151 2432 +3 1890 2432 2186 +3 1891 1907 2091 +3 1891 2087 1901 +3 1891 2091 2087 +3 1892 1902 2088 +3 1892 2088 2092 +3 1892 2092 1908 +3 1893 2405 2483 +3 1893 2483 1985 +3 1894 1986 2484 +3 1894 2484 2406 +3 1895 2140 2596 +3 1895 2596 2356 +3 1896 2357 2597 +3 1896 2597 2141 +3 1897 1950 2280 +3 1897 2280 2297 +3 1897 2297 1930 +3 1898 1931 2298 +3 1898 2281 1951 +3 1898 2298 2281 +3 1899 2223 2508 +3 1899 2508 2215 +3 1900 2216 2509 +3 1900 2509 2224 +3 1901 2087 2116 +3 1901 2116 1944 +3 1902 1945 2117 +3 1902 2117 2088 +3 1903 2005 2423 +3 1903 2423 2331 +3 1904 2332 2424 +3 1904 2424 2006 +3 1905 1942 2103 +3 1905 2083 1912 +3 1905 2103 2083 +3 1906 1913 2084 +3 1906 2084 2104 +3 1906 2104 1943 +3 1907 1977 2154 +3 1907 2154 2091 +3 1908 2092 2155 +3 1908 2155 1978 +3 1909 2037 2299 +3 1909 2299 2036 +3 1910 2278 2415 +3 1910 2415 2024 +3 1911 2025 2416 +3 1911 2416 2279 +3 1912 2083 2112 +3 1912 2112 1969 +3 1913 1970 2113 +3 1913 2113 2084 +3 1914 2167 2268 +3 1914 2268 2018 +3 1915 2019 2269 +3 1915 2269 2168 +3 1916 2231 2694 +3 1916 2694 2395 +3 1917 2396 2695 +3 1917 2695 2232 +3 1918 2191 2249 +3 1918 2249 1991 +3 1919 1992 2250 +3 1919 2250 2192 +3 1920 2302 2629 +3 1920 2629 2233 +3 1921 2234 2630 +3 1921 2630 2303 +3 1922 2077 2598 +3 1922 2598 2437 +3 1923 2438 2599 +3 1923 2599 2078 +3 1924 2193 2557 +3 1924 2557 2266 +3 1925 2267 2558 +3 1925 2558 2194 +3 1926 2042 2313 +3 1926 2313 2203 +3 1927 2204 2314 +3 1927 2314 2043 +3 1928 2304 2573 +3 1928 2573 2193 +3 1929 2194 2574 +3 1929 2574 2305 +3 1930 2297 2378 +3 1930 2378 1997 +3 1931 1998 2379 +3 1931 2379 2298 +3 1932 2142 2670 +3 1932 2670 2459 +3 1933 2460 2671 +3 1933 2671 2143 +3 1934 1962 2119 +3 1934 2118 1961 +3 1934 2119 2118 +3 1935 2108 2260 +3 1935 2260 2130 +3 1936 2131 2261 +3 1936 2261 2109 +3 1937 1964 2409 +3 1937 2408 1963 +3 1937 2409 2408 +3 1938 2165 2708 +3 1938 2708 2499 +3 1939 2500 2709 +3 1939 2709 2166 +3 1940 1993 2187 +3 1940 2160 1941 +3 1940 2187 2160 +3 1941 2160 2188 +3 1941 2188 1994 +3 1942 2056 2211 +3 1942 2211 2103 +3 1943 2104 2212 +3 1943 2212 2057 +3 1944 2116 2217 +3 1944 2217 2056 +3 1945 2057 2218 +3 1945 2218 2117 +3 1946 2397 2615 +3 1946 2615 2183 +3 1947 2184 2616 +3 1947 2616 2398 +3 1948 2309 2510 +3 1948 2510 2146 +3 1949 2147 2511 +3 1949 2511 2310 +3 1950 2038 2393 +3 1950 2393 2280 +3 1951 2281 2394 +3 1951 2394 2039 +3 1952 1983 2475 +3 1952 2475 2477 +3 1952 2477 1979 +3 1953 1980 2478 +3 1953 2476 1984 +3 1953 2478 2476 +3 1954 2114 2421 +3 1954 2421 2270 +3 1955 2271 2422 +3 1955 2422 2115 +3 1956 2345 2585 +3 1956 2585 2223 +3 1957 2224 2586 +3 1957 2586 2346 +3 1958 2215 2587 +3 1958 2587 2216 +3 1959 2213 2364 +3 1959 2364 2144 +3 1960 2145 2365 +3 1960 2365 2214 +3 1961 2118 2241 +3 1961 2241 2085 +3 1962 2086 2242 +3 1962 2242 2119 +3 1963 2408 2465 +3 1963 2465 2020 +3 1964 2021 2466 +3 1964 2466 2409 +3 1965 2307 2539 +3 1965 2539 2185 +3 1966 2186 2540 +3 1966 2540 2308 +3 1967 2144 2435 +3 1967 2435 2256 +3 1968 2257 2436 +3 1968 2436 2145 +3 1969 2112 2205 +3 1969 2205 2081 +3 1970 2082 2206 +3 1970 2206 2113 +3 1971 2007 2531 +3 1971 2507 1972 +3 1971 2531 2507 +3 1972 2507 2532 +3 1972 2532 2008 +3 1973 2050 2471 +3 1973 2471 2401 +3 1974 2402 2472 +3 1974 2472 2051 +3 1975 2195 2358 +3 1975 2358 2156 +3 1976 2157 2359 +3 1976 2359 2196 +3 1977 2085 2251 +3 1977 2251 2154 +3 1978 2155 2252 +3 1978 2252 2086 +3 1979 2477 2633 +3 1979 2633 2030 +3 1980 2031 2634 +3 1980 2634 2478 +3 1981 2156 2362 +3 1981 2362 2225 +3 1982 2226 2363 +3 1982 2363 2157 +3 1983 2040 2537 +3 1983 2537 2475 +3 1984 2476 2538 +3 1984 2538 2041 +3 1985 2483 2602 +3 1985 2602 2132 +3 1986 2133 2603 +3 1986 2603 2484 +3 1987 2016 2258 +3 1987 2258 2354 +3 1987 2354 2066 +3 1988 2067 2355 +3 1988 2259 2017 +3 1988 2355 2259 +3 1989 2291 2653 +3 1989 2653 2337 +3 1990 2338 2654 +3 1990 2654 2292 +3 1991 2249 2335 +3 1991 2335 2108 +3 1992 2109 2336 +3 1992 2336 2250 +3 1993 2081 2245 +3 1993 2245 2187 +3 1994 2188 2246 +3 1994 2246 2082 +3 1995 2237 2518 +3 1995 2518 2288 +3 1996 2288 2519 +3 1996 2519 2238 +3 1997 2378 2497 +3 1997 2497 2138 +3 1998 2139 2498 +3 1998 2498 2379 +3 1999 2289 2512 +3 1999 2512 2237 +3 2000 2238 2513 +3 2000 2513 2290 +3 2001 2060 2559 +3 2001 2559 2291 +3 2002 2292 2560 +3 2002 2560 2061 +3 2003 2150 2453 +3 2003 2453 2520 +3 2003 2520 2074 +3 2004 2075 2521 +3 2004 2454 2151 +3 2004 2521 2454 +3 2005 2175 2592 +3 2005 2592 2423 +3 2006 2424 2593 +3 2006 2593 2176 +3 2007 2120 2604 +3 2007 2604 2531 +3 2008 2532 2605 +3 2008 2605 2121 +3 2009 2052 2433 +3 2009 2407 2010 +3 2009 2433 2407 +3 2010 2407 2434 +3 2010 2434 2053 +3 2011 2221 2360 +3 2011 2360 2197 +3 2012 2198 2361 +3 2012 2361 2222 +3 2013 2022 2023 +3 2013 2023 2027 +3 2013 2026 2022 +3 2013 2027 2029 +3 2013 2028 2026 +3 2013 2029 2028 +3 2014 2463 2823 +3 2014 2823 2441 +3 2015 2442 2824 +3 2015 2824 2464 +3 2016 2130 2341 +3 2016 2341 2258 +3 2017 2259 2342 +3 2017 2342 2131 +3 2018 2268 2427 +3 2018 2427 2221 +3 2019 2222 2428 +3 2019 2428 2269 +3 2020 2465 2581 +3 2020 2581 2158 +3 2021 2159 2582 +3 2021 2582 2466 +3 2022 2026 2089 +3 2022 2076 2023 +3 2022 2089 2106 +3 2022 2106 2076 +3 2023 2076 2107 +3 2023 2090 2027 +3 2023 2107 2090 +3 2024 2415 2514 +3 2024 2514 2152 +3 2025 2153 2515 +3 2025 2515 2416 +3 2026 2028 2101 +3 2026 2101 2122 +3 2026 2122 2089 +3 2027 2090 2123 +3 2027 2102 2029 +3 2027 2123 2102 +3 2028 2029 2105 +3 2028 2105 2134 +3 2028 2134 2101 +3 2029 2102 2135 +3 2029 2135 2105 +3 2030 2633 2733 +3 2030 2733 2173 +3 2031 2174 2734 +3 2031 2734 2634 +3 2032 2339 2722 +3 2032 2722 2439 +3 2033 2440 2723 +3 2033 2723 2340 +3 2034 2487 2706 +3 2034 2706 2262 +3 2035 2263 2707 +3 2035 2707 2488 +3 2036 2299 2479 +3 2036 2479 2243 +3 2037 2244 2480 +3 2037 2480 2299 +3 2038 2203 2527 +3 2038 2527 2393 +3 2039 2394 2528 +3 2039 2528 2204 +3 2040 2177 2637 +3 2040 2637 2537 +3 2041 2538 2638 +3 2041 2638 2178 +3 2042 2243 2491 +3 2042 2491 2313 +3 2043 2314 2492 +3 2043 2492 2244 +3 2044 2266 2700 +3 2044 2700 2481 +3 2045 2482 2701 +3 2045 2701 2267 +3 2046 2317 2553 +3 2046 2553 2300 +3 2047 2301 2554 +3 2047 2554 2318 +3 2048 2315 2635 +3 2048 2635 2384 +3 2049 2385 2636 +3 2049 2636 2316 +3 2050 2201 2600 +3 2050 2600 2471 +3 2051 2472 2601 +3 2051 2601 2202 +3 2052 2148 2522 +3 2052 2522 2433 +3 2053 2434 2523 +3 2053 2523 2149 +3 2054 2388 2627 +3 2054 2627 2315 +3 2055 2316 2628 +3 2055 2628 2388 +3 2056 2217 2348 +3 2056 2348 2211 +3 2057 2212 2349 +3 2057 2349 2218 +3 2058 2551 2805 +3 2058 2805 2302 +3 2059 2303 2806 +3 2059 2806 2552 +3 2060 2163 2625 +3 2060 2625 2559 +3 2061 2560 2626 +3 2061 2626 2164 +3 2062 2110 2429 +3 2062 2403 2093 +3 2062 2429 2403 +3 2063 2094 2404 +3 2063 2404 2430 +3 2063 2430 2111 +3 2064 2368 2639 +3 2064 2639 2382 +3 2065 2383 2640 +3 2065 2640 2369 +3 2066 2354 2461 +3 2066 2461 2195 +3 2067 2196 2462 +3 2067 2462 2355 +3 2068 2197 2414 +3 2068 2414 2198 +3 2069 2071 2645 +3 2069 2645 2682 +3 2069 2682 2128 +3 2070 2129 2683 +3 2070 2646 2072 +3 2070 2683 2646 +3 2071 2235 2813 +3 2071 2813 2645 +3 2072 2646 2814 +3 2072 2814 2236 +3 2073 2100 2729 +3 2073 2728 2099 +3 2073 2729 2728 +3 2074 2520 2612 +3 2074 2612 2181 +3 2075 2182 2613 +3 2075 2613 2521 +3 2076 2106 2161 +3 2076 2161 2162 +3 2076 2162 2107 +3 2077 2284 2811 +3 2077 2811 2598 +3 2078 2599 2812 +3 2078 2812 2285 +3 2079 2337 2746 +3 2079 2746 2501 +3 2080 2502 2747 +3 2080 2747 2338 +3 2081 2205 2333 +3 2081 2333 2245 +3 2082 2246 2334 +3 2082 2334 2206 +3 2083 2103 2274 +3 2083 2274 2282 +3 2083 2282 2112 +3 2084 2113 2283 +3 2084 2275 2104 +3 2084 2283 2275 +3 2085 2241 2386 +3 2085 2386 2251 +3 2086 2252 2387 +3 2086 2387 2242 +3 2087 2091 2323 +3 2087 2323 2325 +3 2087 2325 2116 +3 2088 2117 2326 +3 2088 2324 2092 +3 2088 2326 2324 +3 2089 2122 2199 +3 2089 2189 2106 +3 2089 2199 2189 +3 2090 2107 2190 +3 2090 2190 2200 +3 2090 2200 2123 +3 2091 2154 2374 +3 2091 2374 2323 +3 2092 2324 2375 +3 2092 2375 2155 +3 2093 2403 2457 +3 2093 2457 2167 +3 2094 2168 2458 +3 2094 2458 2404 +3 2095 2449 2809 +3 2095 2809 2445 +3 2096 2446 2810 +3 2096 2810 2450 +3 2097 2171 2563 +3 2097 2493 2213 +3 2097 2563 2493 +3 2098 2214 2494 +3 2098 2494 2564 +3 2098 2564 2172 +3 2099 2728 2799 +3 2099 2799 2179 +3 2100 2180 2800 +3 2100 2800 2729 +3 2101 2134 2227 +3 2101 2209 2122 +3 2101 2227 2209 +3 2102 2123 2210 +3 2102 2210 2228 +3 2102 2228 2135 +3 2103 2211 2391 +3 2103 2391 2274 +3 2104 2275 2392 +3 2104 2392 2212 +3 2105 2135 2230 +3 2105 2229 2134 +3 2105 2230 2229 +3 2106 2189 2219 +3 2106 2219 2161 +3 2107 2162 2220 +3 2107 2220 2190 +3 2108 2335 2473 +3 2108 2473 2260 +3 2109 2261 2474 +3 2109 2474 2336 +3 2110 2225 2516 +3 2110 2516 2429 +3 2111 2430 2517 +3 2111 2517 2226 +3 2112 2282 2366 +3 2112 2366 2205 +3 2113 2206 2367 +3 2113 2367 2283 +3 2114 2300 2619 +3 2114 2619 2421 +3 2115 2422 2620 +3 2115 2620 2301 +3 2116 2325 2399 +3 2116 2399 2217 +3 2117 2218 2400 +3 2117 2400 2326 +3 2118 2119 2306 +3 2118 2306 2417 +3 2118 2417 2241 +3 2119 2242 2418 +3 2119 2418 2306 +3 2120 2272 2768 +3 2120 2768 2604 +3 2121 2605 2769 +3 2121 2769 2273 +3 2122 2209 2247 +3 2122 2247 2199 +3 2123 2200 2248 +3 2123 2248 2210 +3 2124 2549 2869 +3 2124 2869 2425 +3 2125 2426 2870 +3 2125 2870 2550 +3 2126 2451 2752 +3 2126 2752 2207 +3 2127 2208 2753 +3 2127 2753 2452 +3 2128 2682 2764 +3 2128 2764 2239 +3 2129 2240 2765 +3 2129 2765 2683 +3 2130 2260 2469 +3 2130 2469 2341 +3 2131 2342 2470 +3 2131 2470 2261 +3 2132 2602 2785 +3 2132 2785 2304 +3 2133 2305 2786 +3 2133 2786 2603 +3 2134 2229 2254 +3 2134 2254 2227 +3 2135 2228 2255 +3 2135 2255 2230 +3 2136 2441 2885 +3 2136 2885 2565 +3 2137 2566 2886 +3 2137 2886 2442 +3 2138 2497 2662 +3 2138 2662 2317 +3 2139 2318 2663 +3 2139 2663 2498 +3 2140 2425 2889 +3 2140 2889 2596 +3 2141 2597 2890 +3 2141 2890 2426 +3 2142 2395 2944 +3 2142 2944 2670 +3 2143 2671 2945 +3 2143 2945 2396 +3 2144 2364 2666 +3 2144 2666 2435 +3 2145 2436 2667 +3 2145 2667 2365 +3 2146 2510 2724 +3 2146 2724 2368 +3 2147 2369 2725 +3 2147 2725 2511 +3 2148 2256 2631 +3 2148 2631 2522 +3 2149 2523 2632 +3 2149 2632 2257 +3 2150 2431 2762 +3 2150 2762 2453 +3 2151 2454 2763 +3 2151 2763 2432 +3 2152 2514 2649 +3 2152 2649 2289 +3 2153 2290 2650 +3 2153 2650 2515 +3 2154 2251 2447 +3 2154 2447 2374 +3 2155 2375 2448 +3 2155 2448 2252 +3 2156 2358 2579 +3 2156 2579 2362 +3 2157 2363 2580 +3 2157 2580 2359 +3 2158 2581 2735 +3 2158 2735 2307 +3 2159 2308 2736 +3 2159 2736 2582 +3 2160 2187 2412 +3 2160 2412 2413 +3 2160 2413 2188 +3 2161 2219 2264 +3 2161 2253 2162 +3 2161 2264 2253 +3 2162 2253 2265 +3 2162 2265 2220 +3 2163 2286 2750 +3 2163 2750 2625 +3 2164 2626 2751 +3 2164 2751 2287 +3 2165 2445 3042 +3 2165 3042 2708 +3 2166 2709 3043 +3 2166 3043 2446 +3 2167 2457 2571 +3 2167 2571 2268 +3 2168 2269 2572 +3 2168 2572 2458 +3 2169 2450 2893 +3 2169 2893 2449 +3 2170 2192 2534 +3 2170 2533 2191 +3 2170 2534 2533 +3 2171 2270 2664 +3 2171 2664 2563 +3 2172 2564 2665 +3 2172 2665 2271 +3 2173 2733 2909 +3 2173 2909 2345 +3 2174 2346 2910 +3 2174 2910 2734 +3 2175 2382 2772 +3 2175 2772 2592 +3 2176 2593 2773 +3 2176 2773 2383 +3 2177 2356 2817 +3 2177 2817 2637 +3 2178 2638 2818 +3 2178 2818 2357 +3 2179 2799 2883 +3 2179 2883 2329 +3 2180 2330 2884 +3 2180 2884 2800 +3 2181 2612 2758 +3 2181 2758 2309 +3 2182 2310 2759 +3 2182 2759 2613 +3 2183 2615 2913 +3 2183 2913 2463 +3 2184 2464 2914 +3 2184 2914 2616 +3 2185 2539 2803 +3 2185 2803 2431 +3 2186 2432 2804 +3 2186 2804 2540 +3 2187 2245 2455 +3 2187 2455 2412 +3 2188 2413 2456 +3 2188 2456 2246 +3 2189 2199 2293 +3 2189 2293 2295 +3 2189 2295 2219 +3 2190 2220 2296 +3 2190 2294 2200 +3 2190 2296 2294 +3 2191 2533 2583 +3 2191 2583 2249 +3 2192 2250 2584 +3 2192 2584 2534 +3 2193 2573 2879 +3 2193 2879 2557 +3 2194 2558 2880 +3 2194 2880 2574 +3 2195 2461 2617 +3 2195 2617 2358 +3 2196 2359 2618 +3 2196 2618 2462 +3 2197 2360 2569 +3 2197 2569 2414 +3 2198 2414 2570 +3 2198 2570 2361 +3 2199 2247 2343 +3 2199 2343 2293 +3 2200 2294 2344 +3 2200 2344 2248 +3 2201 2384 2774 +3 2201 2774 2600 +3 2202 2601 2775 +3 2202 2775 2385 +3 2203 2313 2623 +3 2203 2623 2527 +3 2204 2528 2624 +3 2204 2624 2314 +3 2205 2366 2489 +3 2205 2489 2333 +3 2206 2334 2490 +3 2206 2490 2367 +3 2207 2752 2865 +3 2207 2865 2311 +3 2208 2312 2866 +3 2208 2866 2753 +3 2209 2227 2327 +3 2209 2327 2352 +3 2209 2352 2247 +3 2210 2248 2353 +3 2210 2328 2228 +3 2210 2353 2328 +3 2211 2348 2524 +3 2211 2524 2391 +3 2212 2392 2525 +3 2212 2525 2349 +3 2213 2493 2621 +3 2213 2621 2364 +3 2214 2365 2622 +3 2214 2622 2494 +3 2215 2508 2881 +3 2215 2881 2587 +3 2216 2587 2882 +3 2216 2882 2509 +3 2217 2399 2529 +3 2217 2529 2348 +3 2218 2349 2530 +3 2218 2530 2400 +3 2219 2295 2350 +3 2219 2350 2264 +3 2220 2265 2351 +3 2220 2351 2296 +3 2221 2427 2575 +3 2221 2575 2360 +3 2222 2361 2576 +3 2222 2576 2428 +3 2223 2585 2873 +3 2223 2873 2508 +3 2224 2509 2874 +3 2224 2874 2586 +3 2225 2362 2643 +3 2225 2643 2516 +3 2226 2517 2644 +3 2226 2644 2363 +3 2227 2254 2370 +3 2227 2370 2327 +3 2228 2328 2371 +3 2228 2371 2255 +3 2229 2230 2347 +3 2229 2347 2372 +3 2229 2372 2254 +3 2230 2255 2373 +3 2230 2373 2347 +3 2231 2439 2921 +3 2231 2921 2694 +3 2232 2695 2922 +3 2232 2922 2440 +3 2233 2629 2867 +3 2233 2867 2451 +3 2234 2452 2868 +3 2234 2868 2630 +3 2235 2321 3028 +3 2235 3028 2813 +3 2236 2814 3029 +3 2236 3029 2322 +3 2237 2512 2778 +3 2237 2778 2518 +3 2238 2519 2779 +3 2238 2779 2513 +3 2239 2764 2940 +3 2239 2940 2397 +3 2240 2398 2941 +3 2240 2941 2765 +3 2241 2417 2577 +3 2241 2577 2386 +3 2242 2387 2578 +3 2242 2578 2418 +3 2243 2479 2710 +3 2243 2710 2491 +3 2244 2492 2711 +3 2244 2711 2480 +3 2245 2333 2547 +3 2245 2547 2455 +3 2246 2456 2548 +3 2246 2548 2334 +3 2247 2352 2410 +3 2247 2410 2343 +3 2248 2344 2411 +3 2248 2411 2353 +3 2249 2583 2660 +3 2249 2660 2335 +3 2250 2336 2661 +3 2250 2661 2584 +3 2251 2386 2590 +3 2251 2590 2447 +3 2252 2448 2591 +3 2252 2591 2387 +3 2253 2264 2376 +3 2253 2376 2377 +3 2253 2377 2265 +3 2254 2372 2443 +3 2254 2443 2370 +3 2255 2371 2444 +3 2255 2444 2373 +3 2256 2435 2807 +3 2256 2807 2631 +3 2257 2632 2808 +3 2257 2808 2436 +3 2258 2341 2606 +3 2258 2606 2686 +3 2258 2686 2354 +3 2259 2355 2687 +3 2259 2607 2342 +3 2259 2687 2607 +3 2260 2473 2651 +3 2260 2651 2469 +3 2261 2470 2652 +3 2261 2652 2474 +3 2262 2706 2988 +3 2262 2988 2549 +3 2263 2550 2989 +3 2263 2989 2707 +3 2264 2350 2419 +3 2264 2419 2376 +3 2265 2377 2420 +3 2265 2420 2351 +3 2266 2557 2991 +3 2266 2991 2700 +3 2267 2701 2992 +3 2267 2992 2558 +3 2268 2571 2712 +3 2268 2712 2427 +3 2269 2428 2713 +3 2269 2713 2572 +3 2270 2421 2815 +3 2270 2815 2664 +3 2271 2665 2816 +3 2271 2816 2422 +3 2272 2501 2995 +3 2272 2995 2768 +3 2273 2769 2996 +3 2273 2996 2502 +3 2274 2391 2610 +3 2274 2543 2282 +3 2274 2610 2543 +3 2275 2283 2544 +3 2275 2544 2611 +3 2275 2611 2392 +3 2276 2331 2875 +3 2276 2848 2278 +3 2276 2875 2848 +3 2277 2279 2849 +3 2277 2849 2876 +3 2277 2876 2332 +3 2278 2848 2871 +3 2278 2871 2415 +3 2279 2416 2872 +3 2279 2872 2849 +3 2280 2393 2780 +3 2280 2776 2297 +3 2280 2780 2776 +3 2281 2298 2777 +3 2281 2777 2781 +3 2281 2781 2394 +3 2282 2543 2588 +3 2282 2588 2366 +3 2283 2367 2589 +3 2283 2589 2544 +3 2284 2565 3091 +3 2284 3091 2811 +3 2285 2812 3092 +3 2285 3092 2566 +3 2286 2481 2938 +3 2286 2938 2750 +3 2287 2751 2939 +3 2287 2939 2482 +3 2288 2518 2856 +3 2288 2856 2519 +3 2289 2649 2854 +3 2289 2854 2512 +3 2290 2513 2855 +3 2290 2855 2650 +3 2291 2559 2897 +3 2291 2897 2653 +3 2292 2654 2898 +3 2292 2898 2560 +3 2293 2343 2485 +3 2293 2467 2295 +3 2293 2485 2467 +3 2294 2296 2468 +3 2294 2468 2486 +3 2294 2486 2344 +3 2295 2467 2503 +3 2295 2503 2350 +3 2296 2351 2504 +3 2296 2504 2468 +3 2297 2776 2831 +3 2297 2831 2378 +3 2298 2379 2832 +3 2298 2832 2777 +3 2299 2480 2782 +3 2299 2782 2479 +3 2300 2553 2863 +3 2300 2863 2619 +3 2301 2620 2864 +3 2301 2864 2554 +3 2302 2805 3132 +3 2302 3132 2629 +3 2303 2630 3133 +3 2303 3133 2806 +3 2304 2785 3063 +3 2304 3063 2573 +3 2305 2574 3064 +3 2305 3064 2786 +3 2306 2418 2614 +3 2306 2614 2417 +3 2307 2735 2969 +3 2307 2969 2539 +3 2308 2540 2970 +3 2308 2970 2736 +3 2309 2758 2957 +3 2309 2957 2510 +3 2310 2511 2958 +3 2310 2958 2759 +3 2311 2865 3026 +3 2311 3026 2487 +3 2312 2488 3027 +3 2312 3027 2866 +3 2313 2491 2787 +3 2313 2787 2623 +3 2314 2624 2788 +3 2314 2788 2492 +3 2315 2627 2955 +3 2315 2955 2635 +3 2316 2636 2956 +3 2316 2956 2628 +3 2317 2662 2877 +3 2317 2877 2553 +3 2318 2554 2878 +3 2318 2878 2663 +3 2319 2389 3142 +3 2319 3121 2320 +3 2319 3142 3121 +3 2320 3121 3143 +3 2320 3143 2390 +3 2321 2499 3186 +3 2321 3186 3028 +3 2322 3029 3187 +3 2322 3187 2500 +3 2323 2374 2641 +3 2323 2608 2325 +3 2323 2641 2608 +3 2324 2326 2609 +3 2324 2609 2642 +3 2324 2642 2375 +3 2325 2608 2658 +3 2325 2658 2399 +3 2326 2400 2659 +3 2326 2659 2609 +3 2327 2370 2505 +3 2327 2495 2352 +3 2327 2505 2495 +3 2328 2353 2496 +3 2328 2496 2506 +3 2328 2506 2371 +3 2329 2883 3115 +3 2329 3115 2551 +3 2330 2552 3116 +3 2330 3116 2884 +3 2331 2423 2959 +3 2331 2959 2875 +3 2332 2876 2960 +3 2332 2960 2424 +3 2333 2489 2655 +3 2333 2655 2547 +3 2334 2548 2656 +3 2334 2656 2490 +3 2335 2660 2783 +3 2335 2783 2473 +3 2336 2474 2784 +3 2336 2784 2661 +3 2337 2653 3099 +3 2337 3099 2746 +3 2338 2747 3100 +3 2338 3100 2654 +3 2339 2437 3107 +3 2339 3107 2722 +3 2340 2723 3108 +3 2340 3108 2438 +3 2341 2469 2717 +3 2341 2717 2606 +3 2342 2607 2718 +3 2342 2718 2470 +3 2343 2410 2545 +3 2343 2545 2485 +3 2344 2486 2546 +3 2344 2546 2411 +3 2345 2909 3152 +3 2345 3152 2585 +3 2346 2586 3153 +3 2346 3153 2910 +3 2347 2373 2536 +3 2347 2535 2372 +3 2347 2536 2535 +3 2348 2529 2698 +3 2348 2698 2524 +3 2349 2525 2699 +3 2349 2699 2530 +3 2350 2503 2567 +3 2350 2567 2419 +3 2351 2420 2568 +3 2351 2568 2504 +3 2352 2495 2541 +3 2352 2541 2410 +3 2353 2411 2542 +3 2353 2542 2496 +3 2354 2686 2801 +3 2354 2801 2461 +3 2355 2462 2802 +3 2355 2802 2687 +3 2356 2596 3069 +3 2356 3069 2817 +3 2357 2818 3070 +3 2357 3070 2597 +3 2358 2617 2836 +3 2358 2836 2579 +3 2359 2580 2837 +3 2359 2837 2618 +3 2360 2575 2748 +3 2360 2748 2569 +3 2361 2570 2749 +3 2361 2749 2576 +3 2362 2579 2852 +3 2362 2852 2643 +3 2363 2644 2853 +3 2363 2853 2580 +3 2364 2621 2948 +3 2364 2948 2666 +3 2365 2667 2949 +3 2365 2949 2622 +3 2366 2588 2676 +3 2366 2676 2489 +3 2367 2490 2677 +3 2367 2677 2589 +3 2368 2724 3040 +3 2368 3040 2639 +3 2369 2640 3041 +3 2369 3041 2725 +3 2370 2443 2561 +3 2370 2561 2505 +3 2371 2506 2562 +3 2371 2562 2444 +3 2372 2535 2594 +3 2372 2594 2443 +3 2373 2444 2595 +3 2373 2595 2536 +3 2374 2447 2715 +3 2374 2715 2641 +3 2375 2642 2716 +3 2375 2716 2448 +3 2376 2419 2555 +3 2376 2526 2377 +3 2376 2555 2526 +3 2377 2526 2556 +3 2377 2556 2420 +3 2378 2831 2936 +3 2378 2936 2497 +3 2379 2498 2937 +3 2379 2937 2832 +3 2380 2401 2932 +3 2380 2930 2405 +3 2380 2932 2930 +3 2381 2406 2931 +3 2381 2931 2933 +3 2381 2933 2402 +3 2382 2639 3065 +3 2382 3065 2772 +3 2383 2773 3066 +3 2383 3066 2640 +3 2384 2635 3038 +3 2384 3038 2774 +3 2385 2775 3039 +3 2385 3039 2636 +3 2386 2577 2754 +3 2386 2754 2590 +3 2387 2591 2755 +3 2387 2755 2578 +3 2388 2628 3044 +3 2388 3044 2627 +3 2389 2459 3209 +3 2389 3209 3142 +3 2390 3143 3210 +3 2390 3210 2460 +3 2391 2524 2737 +3 2391 2737 2610 +3 2392 2611 2738 +3 2392 2738 2525 +3 2393 2527 2917 +3 2393 2917 2780 +3 2394 2781 2918 +3 2394 2918 2528 +3 2395 2694 3278 +3 2395 3278 2944 +3 2396 2945 3279 +3 2396 3279 2695 +3 2397 2940 3160 +3 2397 3160 2615 +3 2398 2616 3161 +3 2398 3161 2941 +3 2399 2658 2756 +3 2399 2756 2529 +3 2400 2530 2757 +3 2400 2757 2659 +3 2401 2471 3101 +3 2401 3101 2932 +3 2402 2933 3102 +3 2402 3102 2472 +3 2403 2429 2833 +3 2403 2819 2457 +3 2403 2833 2819 +3 2404 2458 2820 +3 2404 2820 2834 +3 2404 2834 2430 +3 2405 2930 2984 +3 2405 2984 2483 +3 2406 2484 2985 +3 2406 2985 2931 +3 2407 2433 2911 +3 2407 2911 2912 +3 2407 2912 2434 +3 2408 2409 2979 +3 2408 2979 3004 +3 2408 3004 2465 +3 2409 2466 3005 +3 2409 3005 2979 +3 2410 2541 2647 +3 2410 2647 2545 +3 2411 2546 2648 +3 2411 2648 2542 +3 2412 2455 2731 +3 2412 2719 2413 +3 2412 2731 2719 +3 2413 2719 2732 +3 2413 2732 2456 +3 2414 2569 2835 +3 2414 2835 2570 +3 2415 2871 2952 +3 2415 2952 2514 +3 2416 2515 2953 +3 2416 2953 2872 +3 2417 2614 2743 +3 2417 2743 2577 +3 2418 2578 2744 +3 2418 2744 2614 +3 2419 2567 2674 +3 2419 2674 2555 +3 2420 2556 2675 +3 2420 2675 2568 +3 2421 2619 3014 +3 2421 3014 2815 +3 2422 2816 3015 +3 2422 3015 2620 +3 2423 2592 3093 +3 2423 3093 2959 +3 2424 2960 3094 +3 2424 3094 2593 +3 2425 2869 3270 +3 2425 3270 2889 +3 2426 2890 3271 +3 2426 3271 2870 +3 2427 2712 2846 +3 2427 2846 2575 +3 2428 2576 2847 +3 2428 2847 2713 +3 2429 2516 2905 +3 2429 2905 2833 +3 2430 2834 2906 +3 2430 2906 2517 +3 2431 2803 3136 +3 2431 3136 2762 +3 2432 2763 3137 +3 2432 3137 2804 +3 2433 2522 2973 +3 2433 2973 2911 +3 2434 2912 2974 +3 2434 2974 2523 +3 2435 2666 3061 +3 2435 3061 2807 +3 2436 2808 3062 +3 2436 3062 2667 +3 2437 2598 3229 +3 2437 3229 3107 +3 2438 3108 3230 +3 2438 3230 2599 +3 2439 2722 3217 +3 2439 3217 2921 +3 2440 2922 3218 +3 2440 3218 2723 +3 2441 2823 3286 +3 2441 3286 2885 +3 2442 2886 3287 +3 2442 3287 2824 +3 2443 2594 2668 +3 2443 2668 2561 +3 2444 2562 2669 +3 2444 2669 2595 +3 2445 2809 3409 +3 2445 3409 3042 +3 2446 3043 3410 +3 2446 3410 2810 +3 2447 2590 2838 +3 2447 2838 2715 +3 2448 2716 2839 +3 2448 2839 2591 +3 2449 2893 3256 +3 2449 3256 2809 +3 2450 2810 3257 +3 2450 3257 2893 +3 2451 2867 3174 +3 2451 3174 2752 +3 2452 2753 3175 +3 2452 3175 2868 +3 2453 2762 3047 +3 2453 3047 2520 +3 2454 2521 3048 +3 2454 3048 2763 +3 2455 2547 2797 +3 2455 2797 2731 +3 2456 2732 2798 +3 2456 2798 2548 +3 2457 2819 2915 +3 2457 2915 2571 +3 2458 2572 2916 +3 2458 2916 2820 +3 2459 2670 3306 +3 2459 3306 3209 +3 2460 3210 3307 +3 2460 3307 2671 +3 2461 2801 2965 +3 2461 2965 2617 +3 2462 2618 2966 +3 2462 2966 2802 +3 2463 2913 3294 +3 2463 3294 2823 +3 2464 2824 3295 +3 2464 3295 2914 +3 2465 3004 3095 +3 2465 3095 2581 +3 2466 2582 3096 +3 2466 3096 3005 +3 2467 2485 2678 +3 2467 2678 2690 +3 2467 2690 2503 +3 2468 2504 2691 +3 2468 2679 2486 +3 2468 2691 2679 +3 2469 2651 2887 +3 2469 2887 2717 +3 2470 2718 2888 +3 2470 2888 2652 +3 2471 2600 3201 +3 2471 3201 3101 +3 2472 3102 3202 +3 2472 3202 2601 +3 2473 2783 2982 +3 2473 2982 2651 +3 2474 2652 2983 +3 2474 2983 2784 +3 2475 2537 3126 +3 2475 3087 2477 +3 2475 3126 3087 +3 2476 2478 3088 +3 2476 3088 3127 +3 2476 3127 2538 +3 2477 3087 3252 +3 2477 3252 2633 +3 2478 2634 3253 +3 2478 3253 3088 +3 2479 2782 3024 +3 2479 3024 2710 +3 2480 2711 3025 +3 2480 3025 2782 +3 2481 2700 3176 +3 2481 3176 2938 +3 2482 2939 3177 +3 2482 3177 2701 +3 2483 2984 3109 +3 2483 3109 2602 +3 2484 2603 3110 +3 2484 3110 2985 +3 2485 2545 2702 +3 2485 2702 2678 +3 2486 2679 2703 +3 2486 2703 2546 +3 2487 3026 3250 +3 2487 3250 2706 +3 2488 2707 3251 +3 2488 3251 3027 +3 2489 2676 2829 +3 2489 2829 2655 +3 2490 2656 2830 +3 2490 2830 2677 +3 2491 2710 3018 +3 2491 3018 2787 +3 2492 2788 3019 +3 2492 3019 2711 +3 2493 2563 3032 +3 2493 2963 2621 +3 2493 3032 2963 +3 2494 2622 2964 +3 2494 2964 3033 +3 2494 3033 2564 +3 2495 2505 2672 +3 2495 2672 2692 +3 2495 2692 2541 +3 2496 2542 2693 +3 2496 2673 2506 +3 2496 2693 2673 +3 2497 2936 3097 +3 2497 3097 2662 +3 2498 2663 3098 +3 2498 3098 2937 +3 2499 2708 3406 +3 2499 3406 3186 +3 2500 3187 3407 +3 2500 3407 2709 +3 2501 2746 3268 +3 2501 3268 2995 +3 2502 2996 3269 +3 2502 3269 2747 +3 2503 2690 2739 +3 2503 2739 2567 +3 2504 2568 2740 +3 2504 2740 2691 +3 2505 2561 2696 +3 2505 2696 2672 +3 2506 2673 2697 +3 2506 2697 2562 +3 2507 2531 3197 +3 2507 3197 3198 +3 2507 3198 2532 +3 2508 2873 3248 +3 2508 3248 2881 +3 2509 2882 3249 +3 2509 3249 2874 +3 2510 2957 3190 +3 2510 3190 2724 +3 2511 2725 3191 +3 2511 3191 2958 +3 2512 2854 3128 +3 2512 3128 2778 +3 2513 2779 3129 +3 2513 3129 2855 +3 2514 2952 3081 +3 2514 3081 2649 +3 2515 2650 3082 +3 2515 3082 2953 +3 2516 2643 3036 +3 2516 3036 2905 +3 2517 2906 3037 +3 2517 3037 2644 +3 2518 2778 3122 +3 2518 3122 2856 +3 2519 2856 3123 +3 2519 3123 2779 +3 2520 3047 3119 +3 2520 3119 2612 +3 2521 2613 3120 +3 2521 3120 3048 +3 2522 2631 3083 +3 2522 3083 2973 +3 2523 2974 3084 +3 2523 3084 2632 +3 2524 2698 2923 +3 2524 2923 2737 +3 2525 2738 2924 +3 2525 2924 2699 +3 2526 2555 2704 +3 2526 2704 2705 +3 2526 2705 2556 +3 2527 2623 3022 +3 2527 3022 2917 +3 2528 2918 3023 +3 2528 3023 2624 +3 2529 2756 2927 +3 2529 2927 2698 +3 2530 2699 2928 +3 2530 2928 2757 +3 2531 2604 3266 +3 2531 3266 3197 +3 2532 3198 3267 +3 2532 3267 2605 +3 2533 2534 2954 +3 2533 2954 2980 +3 2533 2980 2583 +3 2534 2584 2981 +3 2534 2981 2954 +3 2535 2536 2745 +3 2535 2745 2770 +3 2535 2770 2594 +3 2536 2595 2771 +3 2536 2771 2745 +3 2537 2637 3203 +3 2537 3203 3126 +3 2538 3127 3204 +3 2538 3204 2638 +3 2539 2969 3235 +3 2539 3235 2803 +3 2540 2804 3236 +3 2540 3236 2970 +3 2541 2692 2793 +3 2541 2793 2647 +3 2542 2648 2794 +3 2542 2794 2693 +3 2543 2610 2919 +3 2543 2827 2588 +3 2543 2919 2827 +3 2544 2589 2828 +3 2544 2828 2920 +3 2544 2920 2611 +3 2545 2647 2795 +3 2545 2795 2702 +3 2546 2703 2796 +3 2546 2796 2648 +3 2547 2655 2901 +3 2547 2901 2797 +3 2548 2798 2902 +3 2548 2902 2656 +3 2549 2988 3310 +3 2549 3310 2869 +3 2550 2870 3311 +3 2550 3311 2989 +3 2551 3115 3382 +3 2551 3382 2805 +3 2552 2806 3383 +3 2552 3383 3116 +3 2553 2877 3162 +3 2553 3162 2863 +3 2554 2864 3163 +3 2554 3163 2878 +3 2555 2674 2825 +3 2555 2825 2704 +3 2556 2705 2826 +3 2556 2826 2675 +3 2557 2879 3320 +3 2557 3320 2991 +3 2558 2992 3321 +3 2558 3321 2880 +3 2559 2625 3223 +3 2559 3223 2897 +3 2560 2898 3224 +3 2560 3224 2626 +3 2561 2668 2789 +3 2561 2789 2696 +3 2562 2697 2790 +3 2562 2790 2669 +3 2563 2664 3130 +3 2563 3130 3032 +3 2564 3033 3131 +3 2564 3131 2665 +3 2565 2885 3423 +3 2565 3423 3091 +3 2566 3092 3424 +3 2566 3424 2886 +3 2567 2739 2844 +3 2567 2844 2674 +3 2568 2675 2845 +3 2568 2845 2740 +3 2569 2748 3020 +3 2569 3020 2835 +3 2570 2835 3021 +3 2570 3021 2749 +3 2571 2915 3075 +3 2571 3075 2712 +3 2572 2713 3076 +3 2572 3076 2916 +3 2573 3063 3344 +3 2573 3344 2879 +3 2574 2880 3345 +3 2574 3345 3064 +3 2575 2846 3030 +3 2575 3030 2748 +3 2576 2749 3031 +3 2576 3031 2847 +3 2577 2743 2925 +3 2577 2925 2754 +3 2578 2755 2926 +3 2578 2926 2744 +3 2579 2836 3089 +3 2579 3089 2852 +3 2580 2853 3090 +3 2580 3090 2837 +3 2581 3095 3262 +3 2581 3262 2735 +3 2582 2736 3263 +3 2582 3263 3096 +3 2583 2980 3073 +3 2583 3073 2660 +3 2584 2661 3074 +3 2584 3074 2981 +3 2585 3152 3464 +3 2585 3464 2873 +3 2586 2874 3465 +3 2586 3465 3153 +3 2587 2881 3322 +3 2587 3322 2882 +3 2588 2827 2903 +3 2588 2903 2676 +3 2589 2677 2904 +3 2589 2904 2828 +3 2590 2754 3006 +3 2590 3006 2838 +3 2591 2839 3007 +3 2591 3007 2755 +3 2592 2772 3284 +3 2592 3284 3093 +3 2593 3094 3285 +3 2593 3285 2773 +3 2594 2770 2842 +3 2594 2842 2668 +3 2595 2669 2843 +3 2595 2843 2771 +3 2596 2889 3349 +3 2596 3349 3069 +3 2597 3070 3350 +3 2597 3350 2890 +3 2598 2811 3451 +3 2598 3451 3229 +3 2599 3230 3452 +3 2599 3452 2812 +3 2600 2774 3378 +3 2600 3378 3201 +3 2601 3202 3379 +3 2601 3379 2775 +3 2602 3109 3280 +3 2602 3280 2785 +3 2603 2786 3281 +3 2603 3281 3110 +3 2604 2768 3336 +3 2604 3336 3266 +3 2605 3267 3337 +3 2605 3337 2769 +3 2606 2717 3034 +3 2606 3034 3111 +3 2606 3111 2686 +3 2607 2687 3112 +3 2607 3035 2718 +3 2607 3112 3035 +3 2608 2641 2975 +3 2608 2975 3012 +3 2608 3012 2658 +3 2609 2659 3013 +3 2609 2976 2642 +3 2609 3013 2976 +3 2610 2737 3059 +3 2610 3059 2919 +3 2611 2920 3060 +3 2611 3060 2738 +3 2612 3119 3243 +3 2612 3243 2758 +3 2613 2759 3244 +3 2613 3244 3120 +3 2614 2744 2990 +3 2614 2990 2743 +3 2615 3160 3453 +3 2615 3453 2913 +3 2616 2914 3454 +3 2616 3454 3161 +3 2617 2965 3178 +3 2617 3178 2836 +3 2618 2837 3179 +3 2618 3179 2966 +3 2619 2863 3254 +3 2619 3254 3014 +3 2620 3015 3255 +3 2620 3255 2864 +3 2621 2963 3288 +3 2621 3288 2948 +3 2622 2949 3289 +3 2622 3289 2964 +3 2623 2787 3170 +3 2623 3170 3022 +3 2624 3023 3171 +3 2624 3171 2788 +3 2625 2750 3312 +3 2625 3312 3223 +3 2626 3224 3313 +3 2626 3313 2751 +3 2627 3044 3329 +3 2627 3329 2955 +3 2628 2956 3330 +3 2628 3330 3044 +3 2629 3132 3353 +3 2629 3353 2867 +3 2630 2868 3354 +3 2630 3354 3133 +3 2631 2807 3258 +3 2631 3258 3083 +3 2632 3084 3259 +3 2632 3259 2808 +3 2633 3252 3458 +3 2633 3458 2733 +3 2634 2734 3459 +3 2634 3459 3253 +3 2635 2955 3325 +3 2635 3325 3038 +3 2636 3039 3326 +3 2636 3326 2956 +3 2637 2817 3369 +3 2637 3369 3203 +3 2638 3204 3370 +3 2638 3370 2818 +3 2639 3040 3363 +3 2639 3363 3065 +3 2640 3066 3364 +3 2640 3364 3041 +3 2641 2715 3053 +3 2641 3053 2975 +3 2642 2976 3054 +3 2642 3054 2716 +3 2643 2852 3211 +3 2643 3211 3036 +3 2644 3037 3212 +3 2644 3212 2853 +3 2645 2813 3539 +3 2645 3357 2682 +3 2645 3539 3357 +3 2646 2683 3358 +3 2646 3358 3540 +3 2646 3540 2814 +3 2647 2793 2961 +3 2647 2961 2795 +3 2648 2796 2962 +3 2648 2962 2794 +3 2649 3081 3272 +3 2649 3272 2854 +3 2650 2855 3273 +3 2650 3273 3082 +3 2651 2982 3221 +3 2651 3221 2887 +3 2652 2888 3222 +3 2652 3222 2983 +3 2653 2897 3314 +3 2653 3314 3099 +3 2654 3100 3315 +3 2654 3315 2898 +3 2655 2829 3071 +3 2655 3071 2901 +3 2656 2902 3072 +3 2656 3072 2830 +3 2657 2680 2684 +3 2657 2681 2680 +3 2657 2684 2688 +3 2657 2685 2681 +3 2657 2688 2689 +3 2657 2689 2685 +3 2658 3012 3103 +3 2658 3103 2756 +3 2659 2757 3104 +3 2659 3104 3013 +3 2660 3073 3184 +3 2660 3184 2783 +3 2661 2784 3185 +3 2661 3185 3074 +3 2662 3097 3296 +3 2662 3296 2877 +3 2663 2878 3297 +3 2663 3297 3098 +3 2664 2815 3282 +3 2664 3282 3130 +3 2665 3131 3283 +3 2665 3283 2816 +3 2666 2948 3308 +3 2666 3308 3061 +3 2667 3062 3309 +3 2667 3309 2949 +3 2668 2842 2950 +3 2668 2950 2789 +3 2669 2790 2951 +3 2669 2951 2843 +3 2670 2944 3623 +3 2670 3623 3306 +3 2671 3307 3624 +3 2671 3624 2945 +3 2672 2696 2899 +3 2672 2894 2692 +3 2672 2899 2894 +3 2673 2693 2895 +3 2673 2895 2900 +3 2673 2900 2697 +3 2674 2844 2997 +3 2674 2997 2825 +3 2675 2826 2998 +3 2675 2998 2845 +3 2676 2903 3067 +3 2676 3067 2829 +3 2677 2830 3068 +3 2677 3068 2904 +3 2678 2702 2946 +3 2678 2942 2690 +3 2678 2946 2942 +3 2679 2691 2943 +3 2679 2943 2947 +3 2679 2947 2703 +3 2680 2681 2714 +3 2680 2714 2741 +3 2680 2720 2684 +3 2680 2741 2720 +3 2681 2685 2721 +3 2681 2721 2742 +3 2681 2742 2714 +3 2682 3357 3431 +3 2682 3431 2764 +3 2683 2765 3432 +3 2683 3432 3358 +3 2684 2720 2760 +3 2684 2726 2688 +3 2684 2760 2726 +3 2685 2689 2727 +3 2685 2727 2761 +3 2685 2761 2721 +3 2686 3111 3219 +3 2686 3219 2801 +3 2687 2802 3220 +3 2687 3220 3112 +3 2688 2726 2766 +3 2688 2730 2689 +3 2688 2766 2730 +3 2689 2730 2767 +3 2689 2767 2727 +3 2690 2942 2986 +3 2690 2986 2739 +3 2691 2740 2987 +3 2691 2987 2943 +3 2692 2894 2999 +3 2692 2999 2793 +3 2693 2794 3000 +3 2693 3000 2895 +3 2694 2921 3525 +3 2694 3525 3278 +3 2695 3279 3526 +3 2695 3526 2922 +3 2696 2789 2977 +3 2696 2977 2899 +3 2697 2900 2978 +3 2697 2978 2790 +3 2698 2927 3150 +3 2698 3150 2923 +3 2699 2924 3151 +3 2699 3151 2928 +3 2700 2991 3449 +3 2700 3449 3176 +3 2701 3177 3450 +3 2701 3450 2992 +3 2702 2795 3016 +3 2702 3016 2946 +3 2703 2947 3017 +3 2703 3017 2796 +3 2704 2825 3055 +3 2704 2929 2705 +3 2704 3055 2929 +3 2705 2929 3056 +3 2705 3056 2826 +3 2706 3250 3533 +3 2706 3533 2988 +3 2707 2989 3534 +3 2707 3534 3251 +3 2708 3042 3738 +3 2708 3738 3406 +3 2709 3407 3739 +3 2709 3739 3043 +3 2710 3024 3298 +3 2710 3298 3018 +3 2711 3019 3299 +3 2711 3299 3025 +3 2712 3075 3182 +3 2712 3182 2846 +3 2713 2847 3183 +3 2713 3183 3076 +3 2714 2742 2792 +3 2714 2791 2741 +3 2714 2792 2791 +3 2715 2838 3144 +3 2715 3144 3053 +3 2716 3054 3145 +3 2716 3145 2839 +3 2717 2887 3180 +3 2717 3180 3034 +3 2718 3035 3181 +3 2718 3181 2888 +3 2719 2731 3117 +3 2719 3117 3118 +3 2719 3118 2732 +3 2720 2741 2821 +3 2720 2821 2840 +3 2720 2840 2760 +3 2721 2761 2841 +3 2721 2822 2742 +3 2721 2841 2822 +3 2722 3107 3573 +3 2722 3573 3217 +3 2723 3218 3574 +3 2723 3574 3108 +3 2724 3190 3486 +3 2724 3486 3040 +3 2725 3041 3487 +3 2725 3487 3191 +3 2726 2760 2850 +3 2726 2850 2859 +3 2726 2859 2766 +3 2727 2767 2860 +3 2727 2851 2761 +3 2727 2860 2851 +3 2728 2729 3562 +3 2728 3562 3601 +3 2728 3601 2799 +3 2729 2800 3602 +3 2729 3602 3562 +3 2730 2766 2861 +3 2730 2861 2862 +3 2730 2862 2767 +3 2731 2797 3156 +3 2731 3156 3117 +3 2732 3118 3157 +3 2732 3157 2798 +3 2733 3458 3642 +3 2733 3642 2909 +3 2734 2910 3643 +3 2734 3643 3459 +3 2735 3262 3497 +3 2735 3497 2969 +3 2736 2970 3498 +3 2736 3498 3263 +3 2737 2923 3215 +3 2737 3215 3059 +3 2738 3060 3216 +3 2738 3216 2924 +3 2739 2986 3077 +3 2739 3077 2844 +3 2740 2845 3078 +3 2740 3078 2987 +3 2741 2791 2857 +3 2741 2857 2821 +3 2742 2822 2858 +3 2742 2858 2792 +3 2743 2990 3140 +3 2743 3140 2925 +3 2744 2926 3141 +3 2744 3141 2990 +3 2745 2771 3052 +3 2745 3051 2770 +3 2745 3052 3051 +3 2746 3099 3613 +3 2746 3613 3268 +3 2747 3269 3614 +3 2747 3614 3100 +3 2748 3030 3264 +3 2748 3264 3020 +3 2749 3021 3265 +3 2749 3265 3031 +3 2750 2938 3494 +3 2750 3494 3312 +3 2751 3313 3495 +3 2751 3495 2939 +3 2752 3174 3541 +3 2752 3541 2865 +3 2753 2866 3542 +3 2753 3542 3175 +3 2754 2925 3148 +3 2754 3148 3006 +3 2755 3007 3149 +3 2755 3149 2926 +3 2756 3103 3231 +3 2756 3231 2927 +3 2757 2928 3232 +3 2757 3232 3104 +3 2758 3243 3419 +3 2758 3419 2957 +3 2759 2958 3420 +3 2759 3420 3244 +3 2760 2840 2891 +3 2760 2891 2850 +3 2761 2851 2892 +3 2761 2892 2841 +3 2762 3136 3394 +3 2762 3394 3047 +3 2763 3048 3395 +3 2763 3395 3137 +3 2764 3431 3597 +3 2764 3597 2940 +3 2765 2941 3598 +3 2765 3598 3432 +3 2766 2859 2907 +3 2766 2907 2861 +3 2767 2862 2908 +3 2767 2908 2860 +3 2768 2995 3571 +3 2768 3571 3336 +3 2769 3337 3572 +3 2769 3572 2996 +3 2770 3051 3079 +3 2770 3079 2842 +3 2771 2843 3080 +3 2771 3080 3052 +3 2772 3065 3537 +3 2772 3537 3284 +3 2773 3285 3538 +3 2773 3538 3066 +3 2774 3038 3634 +3 2774 3634 3378 +3 2775 3379 3635 +3 2775 3635 3039 +3 2776 2780 3361 +3 2776 3361 3402 +3 2776 3402 2831 +3 2777 2832 3403 +3 2777 3362 2781 +3 2777 3403 3362 +3 2778 3128 3447 +3 2778 3447 3122 +3 2779 3123 3448 +3 2779 3448 3129 +3 2780 2917 3392 +3 2780 3392 3361 +3 2781 3362 3393 +3 2781 3393 2918 +3 2782 3025 3371 +3 2782 3371 3024 +3 2783 3184 3355 +3 2783 3355 2982 +3 2784 2983 3356 +3 2784 3356 3185 +3 2785 3280 3518 +3 2785 3518 3063 +3 2786 3064 3519 +3 2786 3519 3281 +3 2787 3018 3367 +3 2787 3367 3170 +3 2788 3171 3368 +3 2788 3368 3019 +3 2789 2950 3113 +3 2789 3113 2977 +3 2790 2978 3114 +3 2790 3114 2951 +3 2791 2792 2896 +3 2791 2896 2934 +3 2791 2934 2857 +3 2792 2858 2935 +3 2792 2935 2896 +3 2793 2999 3138 +3 2793 3138 2961 +3 2794 2962 3139 +3 2794 3139 3000 +3 2795 2961 3146 +3 2795 3146 3016 +3 2796 3017 3147 +3 2796 3147 2962 +3 2797 2901 3245 +3 2797 3245 3156 +3 2798 3157 3246 +3 2798 3246 2902 +3 2799 3601 3670 +3 2799 3670 2883 +3 2800 2884 3671 +3 2800 3671 3602 +3 2801 3219 3359 +3 2801 3359 2965 +3 2802 2966 3360 +3 2802 3360 3220 +3 2803 3235 3589 +3 2803 3589 3136 +3 2804 3137 3590 +3 2804 3590 3236 +3 2805 3382 3740 +3 2805 3740 3132 +3 2806 3133 3741 +3 2806 3741 3383 +3 2807 3061 3501 +3 2807 3501 3258 +3 2808 3259 3502 +3 2808 3502 3062 +3 2809 3256 3899 +3 2809 3899 3409 +3 2810 3410 3900 +3 2810 3900 3257 +3 2811 3091 3752 +3 2811 3752 3451 +3 2812 3452 3753 +3 2812 3753 3092 +3 2813 3028 3762 +3 2813 3762 3539 +3 2814 3540 3763 +3 2814 3763 3029 +3 2815 3014 3474 +3 2815 3474 3282 +3 2816 3283 3475 +3 2816 3475 3015 +3 2817 3069 3611 +3 2817 3611 3369 +3 2818 3370 3612 +3 2818 3612 3070 +3 2819 2833 3323 +3 2819 3323 3327 +3 2819 3327 2915 +3 2820 2916 3328 +3 2820 3324 2834 +3 2820 3328 3324 +3 2821 2857 2971 +3 2821 2967 2840 +3 2821 2971 2967 +3 2822 2841 2968 +3 2822 2968 2972 +3 2822 2972 2858 +3 2823 3294 3875 +3 2823 3875 3286 +3 2824 3287 3876 +3 2824 3876 3295 +3 2825 2997 3188 +3 2825 3188 3055 +3 2826 3056 3189 +3 2826 3189 2998 +3 2827 2919 3274 +3 2827 3193 2903 +3 2827 3274 3193 +3 2828 2904 3194 +3 2828 3194 3275 +3 2828 3275 2920 +3 2829 3067 3239 +3 2829 3239 3071 +3 2830 3072 3240 +3 2830 3240 3068 +3 2831 3402 3478 +3 2831 3478 2936 +3 2832 2937 3479 +3 2832 3479 3403 +3 2833 2905 3386 +3 2833 3386 3323 +3 2834 3324 3387 +3 2834 3387 2906 +3 2835 3020 3331 +3 2835 3331 3021 +3 2836 3178 3417 +3 2836 3417 3089 +3 2837 3090 3418 +3 2837 3418 3179 +3 2838 3006 3300 +3 2838 3300 3144 +3 2839 3145 3301 +3 2839 3301 3007 +3 2840 2967 3001 +3 2840 3001 2891 +3 2841 2892 3002 +3 2841 3002 2968 +3 2842 3079 3166 +3 2842 3166 2950 +3 2843 2951 3167 +3 2843 3167 3080 +3 2844 3077 3205 +3 2844 3205 2997 +3 2845 2998 3206 +3 2845 3206 3078 +3 2846 3182 3332 +3 2846 3332 3030 +3 2847 3031 3333 +3 2847 3333 3183 +3 2848 2875 3413 +3 2848 3413 3415 +3 2848 3415 2871 +3 2849 2872 3416 +3 2849 3414 2876 +3 2849 3416 3414 +3 2850 2891 3010 +3 2850 2993 2859 +3 2850 3010 2993 +3 2851 2860 2994 +3 2851 2994 3011 +3 2851 3011 2892 +3 2852 3089 3438 +3 2852 3438 3211 +3 2853 3212 3439 +3 2853 3439 3090 +3 2854 3272 3522 +3 2854 3522 3128 +3 2855 3129 3523 +3 2855 3523 3273 +3 2856 3122 3524 +3 2856 3524 3123 +3 2857 2934 3008 +3 2857 3008 2971 +3 2858 2972 3009 +3 2858 3009 2935 +3 2859 2993 3045 +3 2859 3045 2907 +3 2860 2908 3046 +3 2860 3046 2994 +3 2861 2907 3049 +3 2861 3003 2862 +3 2861 3049 3003 +3 2862 3003 3050 +3 2862 3050 2908 +3 2863 3162 3550 +3 2863 3550 3254 +3 2864 3255 3551 +3 2864 3551 3163 +3 2865 3541 3696 +3 2865 3696 3026 +3 2866 3027 3697 +3 2866 3697 3542 +3 2867 3353 3676 +3 2867 3676 3174 +3 2868 3175 3677 +3 2868 3677 3354 +3 2869 3310 3746 +3 2869 3746 3270 +3 2870 3271 3747 +3 2870 3747 3311 +3 2871 3415 3591 +3 2871 3591 2952 +3 2872 2953 3592 +3 2872 3592 3416 +3 2873 3464 3881 +3 2873 3881 3248 +3 2874 3249 3882 +3 2874 3882 3465 +3 2875 2959 3472 +3 2875 3472 3413 +3 2876 3414 3473 +3 2876 3473 2960 +3 2877 3296 3567 +3 2877 3567 3162 +3 2878 3163 3568 +3 2878 3568 3297 +3 2879 3344 3756 +3 2879 3756 3320 +3 2880 3321 3757 +3 2880 3757 3345 +3 2881 3248 3718 +3 2881 3718 3322 +3 2882 3322 3719 +3 2882 3719 3249 +3 2883 3670 3781 +3 2883 3781 3115 +3 2884 3116 3782 +3 2884 3782 3671 +3 2885 3286 3839 +3 2885 3839 3423 +3 2886 3424 3840 +3 2886 3840 3287 +3 2887 3221 3506 +3 2887 3506 3180 +3 2888 3181 3507 +3 2888 3507 3222 +3 2889 3270 3754 +3 2889 3754 3349 +3 2890 3350 3755 +3 2890 3755 3271 +3 2891 3001 3085 +3 2891 3085 3010 +3 2892 3011 3086 +3 2892 3086 3002 +3 2893 3257 3811 +3 2893 3811 3256 +3 2894 2899 3158 +3 2894 3158 3241 +3 2894 3241 2999 +3 2895 3000 3242 +3 2895 3159 2900 +3 2895 3242 3159 +3 2896 2935 3058 +3 2896 3057 2934 +3 2896 3058 3057 +3 2897 3223 3649 +3 2897 3649 3314 +3 2898 3315 3650 +3 2898 3650 3224 +3 2899 2977 3199 +3 2899 3199 3158 +3 2900 3159 3200 +3 2900 3200 2978 +3 2901 3071 3384 +3 2901 3384 3245 +3 2902 3246 3385 +3 2902 3385 3072 +3 2903 3193 3304 +3 2903 3304 3067 +3 2904 3068 3305 +3 2904 3305 3194 +3 2905 3036 3490 +3 2905 3490 3386 +3 2906 3387 3491 +3 2906 3491 3037 +3 2907 3045 3124 +3 2907 3124 3049 +3 2908 3050 3125 +3 2908 3125 3046 +3 2909 3642 3873 +3 2909 3873 3152 +3 2910 3153 3874 +3 2910 3874 3643 +3 2911 2973 3527 +3 2911 3505 2912 +3 2911 3527 3505 +3 2912 3505 3528 +3 2912 3528 2974 +3 2913 3453 3847 +3 2913 3847 3294 +3 2914 3295 3848 +3 2914 3848 3454 +3 2915 3327 3470 +3 2915 3470 3075 +3 2916 3076 3471 +3 2916 3471 3328 +3 2917 3022 3466 +3 2917 3466 3392 +3 2918 3393 3467 +3 2918 3467 3023 +3 2919 3059 3396 +3 2919 3396 3274 +3 2920 3275 3397 +3 2920 3397 3060 +3 2921 3217 3829 +3 2921 3829 3525 +3 2922 3526 3830 +3 2922 3830 3218 +3 2923 3150 3436 +3 2923 3436 3215 +3 2924 3216 3437 +3 2924 3437 3151 +3 2925 3140 3334 +3 2925 3334 3148 +3 2926 3149 3335 +3 2926 3335 3141 +3 2927 3231 3445 +3 2927 3445 3150 +3 2928 3151 3446 +3 2928 3446 3232 +3 2929 3055 3247 +3 2929 3247 3056 +3 2930 2932 3552 +3 2930 3552 3593 +3 2930 3593 2984 +3 2931 2985 3594 +3 2931 3553 2933 +3 2931 3594 3553 +3 2932 3101 3734 +3 2932 3734 3552 +3 2933 3553 3735 +3 2933 3735 3102 +3 2934 3057 3105 +3 2934 3105 3008 +3 2935 3009 3106 +3 2935 3106 3058 +3 2936 3478 3629 +3 2936 3629 3097 +3 2937 3098 3630 +3 2937 3630 3479 +3 2938 3176 3730 +3 2938 3730 3494 +3 2939 3495 3731 +3 2939 3731 3177 +3 2940 3597 3820 +3 2940 3820 3160 +3 2941 3161 3821 +3 2941 3821 3598 +3 2942 2946 3237 +3 2942 3237 3276 +3 2942 3276 2986 +3 2943 2987 3277 +3 2943 3238 2947 +3 2943 3277 3238 +3 2944 3278 3975 +3 2944 3975 3623 +3 2945 3624 3976 +3 2945 3976 3279 +3 2946 3016 3292 +3 2946 3292 3237 +3 2947 3238 3293 +3 2947 3293 3017 +3 2948 3288 3686 +3 2948 3686 3308 +3 2949 3309 3687 +3 2949 3687 3289 +3 2950 3166 3290 +3 2950 3290 3113 +3 2951 3114 3291 +3 2951 3291 3167 +3 2952 3591 3716 +3 2952 3716 3081 +3 2953 3082 3717 +3 2953 3717 3592 +3 2954 2981 3469 +3 2954 3468 2980 +3 2954 3469 3468 +3 2955 3329 3728 +3 2955 3728 3325 +3 2956 3326 3729 +3 2956 3729 3330 +3 2957 3419 3684 +3 2957 3684 3190 +3 2958 3191 3685 +3 2958 3685 3420 +3 2959 3093 3603 +3 2959 3603 3472 +3 2960 3473 3604 +3 2960 3604 3094 +3 2961 3138 3318 +3 2961 3318 3146 +3 2962 3147 3319 +3 2962 3319 3139 +3 2963 3032 3554 +3 2963 3554 3288 +3 2964 3289 3555 +3 2964 3555 3033 +3 2965 3359 3569 +3 2965 3569 3178 +3 2966 3179 3570 +3 2966 3570 3360 +3 2967 2971 3134 +3 2967 3134 3154 +3 2967 3154 3001 +3 2968 3002 3155 +3 2968 3135 2972 +3 2968 3155 3135 +3 2969 3497 3777 +3 2969 3777 3235 +3 2970 3236 3778 +3 2970 3778 3498 +3 2971 3008 3168 +3 2971 3168 3134 +3 2972 3135 3169 +3 2972 3169 3009 +3 2973 3083 3632 +3 2973 3632 3527 +3 2974 3528 3633 +3 2974 3633 3084 +3 2975 3053 3411 +3 2975 3411 3429 +3 2975 3429 3012 +3 2976 3013 3430 +3 2976 3412 3054 +3 2976 3430 3412 +3 2977 3113 3302 +3 2977 3302 3199 +3 2978 3200 3303 +3 2978 3303 3114 +3 2979 3005 3715 +3 2979 3714 3004 +3 2979 3715 3714 +3 2980 3468 3529 +3 2980 3529 3073 +3 2981 3074 3530 +3 2981 3530 3469 +3 2982 3355 3607 +3 2982 3607 3221 +3 2983 3222 3608 +3 2983 3608 3356 +3 2984 3593 3690 +3 2984 3690 3109 +3 2985 3110 3691 +3 2985 3691 3594 +3 2986 3276 3340 +3 2986 3340 3077 +3 2987 3078 3341 +3 2987 3341 3277 +3 2988 3533 3897 +3 2988 3897 3310 +3 2989 3311 3898 +3 2989 3898 3534 +3 2990 3141 3435 +3 2990 3435 3140 +3 2991 3320 3814 +3 2991 3814 3449 +3 2992 3450 3815 +3 2992 3815 3321 +3 2993 3010 3164 +3 2993 3164 3172 +3 2993 3172 3045 +3 2994 3046 3173 +3 2994 3165 3011 +3 2994 3173 3165 +3 2995 3268 3887 +3 2995 3887 3571 +3 2996 3572 3888 +3 2996 3888 3269 +3 2997 3205 3400 +3 2997 3400 3188 +3 2998 3189 3401 +3 2998 3401 3206 +3 2999 3241 3376 +3 2999 3376 3138 +3 3000 3139 3377 +3 3000 3377 3242 +3 3001 3154 3213 +3 3001 3213 3085 +3 3002 3086 3214 +3 3002 3214 3155 +3 3003 3049 3195 +3 3003 3195 3196 +3 3003 3196 3050 +3 3004 3714 3767 +3 3004 3767 3095 +3 3005 3096 3768 +3 3005 3768 3715 +3 3006 3148 3443 +3 3006 3443 3300 +3 3007 3301 3444 +3 3007 3444 3149 +3 3008 3105 3233 +3 3008 3233 3168 +3 3009 3169 3234 +3 3009 3234 3106 +3 3010 3085 3207 +3 3010 3207 3164 +3 3011 3165 3208 +3 3011 3208 3086 +3 3012 3429 3508 +3 3012 3508 3103 +3 3013 3104 3509 +3 3013 3509 3430 +3 3014 3254 3736 +3 3014 3736 3474 +3 3015 3475 3737 +3 3015 3737 3255 +3 3016 3146 3404 +3 3016 3404 3292 +3 3017 3293 3405 +3 3017 3405 3147 +3 3018 3298 3661 +3 3018 3661 3367 +3 3019 3368 3662 +3 3019 3662 3299 +3 3020 3264 3585 +3 3020 3585 3331 +3 3021 3331 3586 +3 3021 3586 3265 +3 3022 3170 3619 +3 3022 3619 3466 +3 3023 3467 3620 +3 3023 3620 3171 +3 3024 3371 3657 +3 3024 3657 3298 +3 3025 3299 3658 +3 3025 3658 3371 +3 3026 3696 3925 +3 3026 3925 3250 +3 3027 3251 3926 +3 3027 3926 3697 +3 3028 3186 4027 +3 3028 4027 3762 +3 3029 3763 4028 +3 3029 4028 3187 +3 3030 3332 3575 +3 3030 3575 3264 +3 3031 3265 3576 +3 3031 3576 3333 +3 3032 3130 3651 +3 3032 3651 3554 +3 3033 3555 3652 +3 3033 3652 3131 +3 3034 3180 3514 +3 3034 3514 3587 +3 3034 3587 3111 +3 3035 3112 3588 +3 3035 3515 3181 +3 3035 3588 3515 +3 3036 3211 3667 +3 3036 3667 3490 +3 3037 3491 3668 +3 3037 3668 3212 +3 3038 3325 3956 +3 3038 3956 3634 +3 3039 3635 3957 +3 3039 3957 3326 +3 3040 3486 3851 +3 3040 3851 3363 +3 3041 3364 3852 +3 3041 3852 3487 +3 3042 3409 4134 +3 3042 4134 3738 +3 3043 3739 4135 +3 3043 4135 3410 +3 3044 3330 3822 +3 3044 3822 3329 +3 3045 3172 3227 +3 3045 3227 3124 +3 3046 3125 3228 +3 3046 3228 3173 +3 3047 3394 3722 +3 3047 3722 3119 +3 3048 3120 3723 +3 3048 3723 3395 +3 3049 3124 3260 +3 3049 3260 3195 +3 3050 3196 3261 +3 3050 3261 3125 +3 3051 3052 3346 +3 3051 3346 3374 +3 3051 3374 3079 +3 3052 3080 3375 +3 3052 3375 3346 +3 3053 3144 3512 +3 3053 3512 3411 +3 3054 3412 3513 +3 3054 3513 3145 +3 3055 3188 3380 +3 3055 3380 3247 +3 3056 3247 3381 +3 3056 3381 3189 +3 3057 3058 3192 +3 3057 3192 3225 +3 3057 3225 3105 +3 3058 3106 3226 +3 3058 3226 3192 +3 3059 3215 3558 +3 3059 3558 3396 +3 3060 3397 3559 +3 3060 3559 3216 +3 3061 3308 3775 +3 3061 3775 3501 +3 3062 3502 3776 +3 3062 3776 3309 +3 3063 3518 3843 +3 3063 3843 3344 +3 3064 3345 3844 +3 3064 3844 3519 +3 3065 3363 3883 +3 3065 3883 3537 +3 3066 3538 3884 +3 3066 3884 3364 +3 3067 3304 3482 +3 3067 3482 3239 +3 3068 3240 3483 +3 3068 3483 3305 +3 3069 3349 3927 +3 3069 3927 3611 +3 3070 3612 3928 +3 3070 3928 3350 +3 3071 3239 3581 +3 3071 3581 3384 +3 3072 3385 3582 +3 3072 3582 3240 +3 3073 3529 3655 +3 3073 3655 3184 +3 3074 3185 3656 +3 3074 3656 3530 +3 3075 3470 3577 +3 3075 3577 3182 +3 3076 3183 3578 +3 3076 3578 3471 +3 3077 3340 3476 +3 3077 3476 3205 +3 3078 3206 3477 +3 3078 3477 3341 +3 3079 3374 3441 +3 3079 3441 3166 +3 3080 3167 3442 +3 3080 3442 3375 +3 3081 3716 3905 +3 3081 3905 3272 +3 3082 3273 3906 +3 3082 3906 3717 +3 3083 3258 3805 +3 3083 3805 3632 +3 3084 3633 3806 +3 3084 3806 3259 +3 3085 3213 3316 +3 3085 3316 3207 +3 3086 3208 3317 +3 3086 3317 3214 +3 3087 3126 3833 +3 3087 3833 3999 +3 3087 3999 3252 +3 3088 3253 4000 +3 3088 3834 3127 +3 3088 4000 3834 +3 3089 3417 3726 +3 3089 3726 3438 +3 3090 3439 3727 +3 3090 3727 3418 +3 3091 3423 4068 +3 3091 4068 3752 +3 3092 3753 4069 +3 3092 4069 3424 +3 3093 3284 3789 +3 3093 3789 3603 +3 3094 3604 3790 +3 3094 3790 3285 +3 3095 3767 3871 +3 3095 3871 3262 +3 3096 3263 3872 +3 3096 3872 3768 +3 3097 3629 3825 +3 3097 3825 3296 +3 3098 3297 3826 +3 3098 3826 3630 +3 3099 3314 3849 +3 3099 3849 3613 +3 3100 3614 3850 +3 3100 3850 3315 +3 3101 3201 3946 +3 3101 3946 3734 +3 3102 3735 3947 +3 3102 3947 3202 +3 3103 3508 3640 +3 3103 3640 3231 +3 3104 3232 3641 +3 3104 3641 3509 +3 3105 3225 3347 +3 3105 3347 3233 +3 3106 3234 3348 +3 3106 3348 3226 +3 3107 3229 4023 +3 3107 4023 3573 +3 3108 3574 4024 +3 3108 4024 3230 +3 3109 3690 3867 +3 3109 3867 3280 +3 3110 3281 3868 +3 3110 3868 3691 +3 3111 3587 3708 +3 3111 3708 3219 +3 3112 3220 3709 +3 3112 3709 3588 +3 3113 3290 3462 +3 3113 3462 3302 +3 3114 3303 3463 +3 3114 3463 3291 +3 3115 3781 4066 +3 3115 4066 3382 +3 3116 3383 4067 +3 3116 4067 3782 +3 3117 3156 3579 +3 3117 3545 3118 +3 3117 3579 3545 +3 3118 3545 3580 +3 3118 3580 3157 +3 3119 3722 3841 +3 3119 3841 3243 +3 3120 3244 3842 +3 3120 3842 3723 +3 3121 3142 4098 +3 3121 4098 4099 +3 3121 4099 3143 +3 3122 3447 3861 +3 3122 3861 3524 +3 3123 3524 3862 +3 3123 3862 3448 +3 3124 3227 3338 +3 3124 3338 3260 +3 3125 3261 3339 +3 3125 3339 3228 +3 3126 3203 3903 +3 3126 3903 3833 +3 3127 3834 3904 +3 3127 3904 3204 +3 3128 3522 3853 +3 3128 3853 3447 +3 3129 3448 3854 +3 3129 3854 3523 +3 3130 3282 3785 +3 3130 3785 3651 +3 3131 3652 3786 +3 3131 3786 3283 +3 3132 3740 3993 +3 3132 3993 3353 +3 3133 3354 3994 +3 3133 3994 3741 +3 3134 3168 3365 +3 3134 3351 3154 +3 3134 3365 3351 +3 3135 3155 3352 +3 3135 3352 3366 +3 3135 3366 3169 +3 3136 3589 3845 +3 3136 3845 3394 +3 3137 3395 3846 +3 3137 3846 3590 +3 3138 3376 3560 +3 3138 3560 3318 +3 3139 3319 3561 +3 3139 3561 3377 +3 3140 3435 3625 +3 3140 3625 3334 +3 3141 3335 3626 +3 3141 3626 3435 +3 3142 3209 4160 +3 3142 4160 4098 +3 3143 4099 4161 +3 3143 4161 3210 +3 3144 3300 3678 +3 3144 3678 3512 +3 3145 3513 3679 +3 3145 3679 3301 +3 3146 3318 3565 +3 3146 3565 3404 +3 3147 3405 3566 +3 3147 3566 3319 +3 3148 3334 3636 +3 3148 3636 3443 +3 3149 3444 3637 +3 3149 3637 3335 +3 3150 3445 3702 +3 3150 3702 3436 +3 3151 3437 3703 +3 3151 3703 3446 +3 3152 3873 4182 +3 3152 4182 3464 +3 3153 3465 4183 +3 3153 4183 3874 +3 3154 3351 3390 +3 3154 3390 3213 +3 3155 3214 3391 +3 3155 3391 3352 +3 3156 3245 3674 +3 3156 3674 3579 +3 3157 3580 3675 +3 3157 3675 3246 +3 3158 3199 3460 +3 3158 3460 3556 +3 3158 3556 3241 +3 3159 3242 3557 +3 3159 3461 3200 +3 3159 3557 3461 +3 3160 3820 4096 +3 3160 4096 3453 +3 3161 3454 4097 +3 3161 4097 3821 +3 3162 3567 3919 +3 3162 3919 3550 +3 3163 3551 3920 +3 3163 3920 3568 +3 3164 3207 3372 +3 3164 3342 3172 +3 3164 3372 3342 +3 3165 3173 3343 +3 3165 3343 3373 +3 3165 3373 3208 +3 3166 3441 3543 +3 3166 3543 3290 +3 3167 3291 3544 +3 3167 3544 3442 +3 3168 3233 3427 +3 3168 3427 3365 +3 3169 3366 3428 +3 3169 3428 3234 +3 3170 3367 3818 +3 3170 3818 3619 +3 3171 3620 3819 +3 3171 3819 3368 +3 3172 3342 3388 +3 3172 3388 3227 +3 3173 3228 3389 +3 3173 3389 3343 +3 3174 3676 4035 +3 3174 4035 3541 +3 3175 3542 4036 +3 3175 4036 3677 +3 3176 3449 4019 +3 3176 4019 3730 +3 3177 3731 4020 +3 3177 4020 3450 +3 3178 3569 3835 +3 3178 3835 3417 +3 3179 3418 3836 +3 3179 3836 3570 +3 3180 3506 3869 +3 3180 3869 3514 +3 3181 3515 3870 +3 3181 3870 3507 +3 3182 3577 3744 +3 3182 3744 3332 +3 3183 3333 3745 +3 3183 3745 3578 +3 3184 3655 3837 +3 3184 3837 3355 +3 3185 3356 3838 +3 3185 3838 3656 +3 3186 3406 4250 +3 3186 4250 4027 +3 3187 4028 4251 +3 3187 4251 3407 +3 3188 3400 3563 +3 3188 3563 3380 +3 3189 3381 3564 +3 3189 3564 3401 +3 3190 3684 3971 +3 3190 3971 3486 +3 3191 3487 3972 +3 3191 3972 3685 +3 3192 3226 3399 +3 3192 3398 3225 +3 3192 3399 3398 +3 3193 3274 3712 +3 3193 3638 3304 +3 3193 3712 3638 +3 3194 3305 3639 +3 3194 3639 3713 +3 3194 3713 3275 +3 3195 3260 3456 +3 3195 3440 3196 +3 3195 3456 3440 +3 3196 3440 3457 +3 3196 3457 3261 +3 3197 3266 4073 +3 3197 4041 3198 +3 3197 4073 4041 +3 3198 4041 4074 +3 3198 4074 3267 +3 3199 3302 3546 +3 3199 3546 3460 +3 3200 3461 3547 +3 3200 3547 3303 +3 3201 3378 4116 +3 3201 4116 3946 +3 3202 3947 4117 +3 3202 4117 3379 +3 3203 3369 4048 +3 3203 4048 3903 +3 3204 3904 4049 +3 3204 4049 3370 +3 3205 3476 3663 +3 3205 3663 3400 +3 3206 3401 3664 +3 3206 3664 3477 +3 3207 3316 3492 +3 3207 3492 3372 +3 3208 3373 3493 +3 3208 3493 3317 +3 3209 3306 4261 +3 3209 4261 4160 +3 3210 4161 4262 +3 3210 4262 3307 +3 3211 3438 3891 +3 3211 3891 3667 +3 3212 3668 3892 +3 3212 3892 3439 +3 3213 3390 3499 +3 3213 3499 3316 +3 3214 3317 3500 +3 3214 3500 3391 +3 3215 3436 3783 +3 3215 3783 3558 +3 3216 3559 3784 +3 3216 3784 3437 +3 3217 3573 4190 +3 3217 4190 3829 +3 3218 3830 4191 +3 3218 4191 3574 +3 3219 3708 3865 +3 3219 3865 3359 +3 3220 3360 3866 +3 3220 3866 3709 +3 3221 3607 3909 +3 3221 3909 3506 +3 3222 3507 3910 +3 3222 3910 3608 +3 3223 3312 4021 +3 3223 4021 3649 +3 3224 3650 4022 +3 3224 4022 3313 +3 3225 3398 3520 +3 3225 3520 3347 +3 3226 3348 3521 +3 3226 3521 3399 +3 3227 3388 3484 +3 3227 3484 3338 +3 3228 3339 3485 +3 3228 3485 3389 +3 3229 3451 4256 +3 3229 4256 4023 +3 3230 4024 4257 +3 3230 4257 3452 +3 3231 3640 3823 +3 3231 3823 3445 +3 3232 3446 3824 +3 3232 3824 3641 +3 3233 3347 3535 +3 3233 3535 3427 +3 3234 3428 3536 +3 3234 3536 3348 +3 3235 3777 4118 +3 3235 4118 3589 +3 3236 3590 4119 +3 3236 4119 3778 +3 3237 3292 3672 +3 3237 3627 3276 +3 3237 3672 3627 +3 3238 3277 3628 +3 3238 3628 3673 +3 3238 3673 3293 +3 3239 3482 3831 +3 3239 3831 3581 +3 3240 3582 3832 +3 3240 3832 3483 +3 3241 3556 3698 +3 3241 3698 3376 +3 3242 3377 3699 +3 3242 3699 3557 +3 3243 3841 4005 +3 3243 4005 3419 +3 3244 3420 4006 +3 3244 4006 3842 +3 3245 3384 3793 +3 3245 3793 3674 +3 3246 3675 3794 +3 3246 3794 3385 +3 3247 3380 3646 +3 3247 3646 3381 +3 3248 3881 4353 +3 3248 4353 3718 +3 3249 3719 4354 +3 3249 4354 3882 +3 3250 3925 4206 +3 3250 4206 3533 +3 3251 3534 4207 +3 3251 4207 3926 +3 3252 3999 4222 +3 3252 4222 3458 +3 3253 3459 4223 +3 3253 4223 4000 +3 3254 3550 4025 +3 3254 4025 3736 +3 3255 3737 4026 +3 3255 4026 3551 +3 3256 3811 4467 +3 3256 4467 3899 +3 3257 3900 4468 +3 3257 4468 3811 +3 3258 3501 4031 +3 3258 4031 3805 +3 3259 3806 4032 +3 3259 4032 3502 +3 3260 3338 3531 +3 3260 3531 3456 +3 3261 3457 3532 +3 3261 3532 3339 +3 3262 3871 4077 +3 3262 4077 3497 +3 3263 3498 4078 +3 3263 4078 3872 +3 3264 3575 3893 +3 3264 3893 3585 +3 3265 3586 3894 +3 3265 3894 3576 +3 3266 3336 4146 +3 3266 4146 4073 +3 3267 4074 4147 +3 3267 4147 3337 +3 3268 3613 4214 +3 3268 4214 3887 +3 3269 3888 4215 +3 3269 4215 3614 +3 3270 3746 4331 +3 3270 4331 3754 +3 3271 3755 4332 +3 3271 4332 3747 +3 3272 3905 4136 +3 3272 4136 3522 +3 3273 3523 4137 +3 3273 4137 3906 +3 3274 3396 3827 +3 3274 3827 3712 +3 3275 3713 3828 +3 3275 3828 3397 +3 3276 3627 3692 +3 3276 3692 3340 +3 3277 3341 3693 +3 3277 3693 3628 +3 3278 3525 4220 +3 3278 4220 3975 +3 3279 3976 4221 +3 3279 4221 3526 +3 3280 3867 4079 +3 3280 4079 3518 +3 3281 3519 4080 +3 3281 4080 3868 +3 3282 3474 3969 +3 3282 3969 3785 +3 3283 3786 3970 +3 3283 3970 3475 +3 3284 3537 4029 +3 3284 4029 3789 +3 3285 3790 4030 +3 3285 4030 3538 +3 3286 3875 4439 +3 3286 4439 3839 +3 3287 3840 4440 +3 3287 4440 3876 +3 3288 3554 3937 +3 3288 3937 3686 +3 3289 3687 3938 +3 3289 3938 3555 +3 3290 3543 3710 +3 3290 3710 3462 +3 3291 3463 3711 +3 3291 3711 3544 +3 3292 3404 3750 +3 3292 3750 3672 +3 3293 3673 3751 +3 3293 3751 3405 +3 3294 3847 4451 +3 3294 4451 3875 +3 3295 3876 4452 +3 3295 4452 3848 +3 3296 3825 4075 +3 3296 4075 3567 +3 3297 3568 4076 +3 3297 4076 3826 +3 3298 3657 3995 +3 3298 3995 3661 +3 3299 3662 3996 +3 3299 3996 3658 +3 3300 3443 3791 +3 3300 3791 3678 +3 3301 3679 3792 +3 3301 3792 3444 +3 3302 3462 3700 +3 3302 3700 3546 +3 3303 3547 3701 +3 3303 3701 3463 +3 3304 3638 3787 +3 3304 3787 3482 +3 3305 3483 3788 +3 3305 3788 3639 +3 3306 3623 4425 +3 3306 4425 4261 +3 3307 4262 4426 +3 3307 4426 3624 +3 3308 3686 4130 +3 3308 4130 3775 +3 3309 3776 4131 +3 3309 4131 3687 +3 3310 3897 4310 +3 3310 4310 3746 +3 3311 3747 4311 +3 3311 4311 3898 +3 3312 3494 4172 +3 3312 4172 4021 +3 3313 4022 4173 +3 3313 4173 3495 +3 3314 3649 4148 +3 3314 4148 3849 +3 3315 3850 4149 +3 3315 4149 3650 +3 3316 3499 3665 +3 3316 3665 3492 +3 3317 3493 3666 +3 3317 3666 3500 +3 3318 3560 3809 +3 3318 3809 3565 +3 3319 3566 3810 +3 3319 3810 3561 +3 3320 3756 4224 +3 3320 4224 3814 +3 3321 3815 4225 +3 3321 4225 3757 +3 3322 3718 4265 +3 3322 4265 3719 +3 3323 3386 3979 +3 3323 3941 3327 +3 3323 3979 3941 +3 3324 3328 3942 +3 3324 3942 3980 +3 3324 3980 3387 +3 3325 3728 4357 +3 3325 4357 3956 +3 3326 3957 4358 +3 3326 4358 3729 +3 3327 3941 3977 +3 3327 3977 3470 +3 3328 3471 3978 +3 3328 3978 3942 +3 3329 3822 4196 +3 3329 4196 3728 +3 3330 3729 4197 +3 3330 4197 3822 +3 3331 3585 3945 +3 3331 3945 3586 +3 3332 3744 3943 +3 3332 3943 3575 +3 3333 3576 3944 +3 3333 3944 3745 +3 3334 3625 3895 +3 3334 3895 3636 +3 3335 3637 3896 +3 3335 3896 3626 +3 3336 3571 4270 +3 3336 4270 4146 +3 3337 4147 4271 +3 3337 4271 3572 +3 3338 3484 3653 +3 3338 3653 3531 +3 3339 3532 3654 +3 3339 3654 3485 +3 3340 3692 3801 +3 3340 3801 3476 +3 3341 3477 3802 +3 3341 3802 3693 +3 3342 3372 3595 +3 3342 3595 3605 +3 3342 3605 3388 +3 3343 3389 3606 +3 3343 3596 3373 +3 3343 3606 3596 +3 3344 3843 4236 +3 3344 4236 3756 +3 3345 3757 4237 +3 3345 4237 3844 +3 3346 3375 3761 +3 3346 3760 3374 +3 3346 3761 3760 +3 3347 3520 3704 +3 3347 3704 3535 +3 3348 3536 3705 +3 3348 3705 3521 +3 3349 3754 4314 +3 3349 4314 3927 +3 3350 3928 4315 +3 3350 4315 3755 +3 3351 3365 3644 +3 3351 3644 3647 +3 3351 3647 3390 +3 3352 3391 3648 +3 3352 3645 3366 +3 3352 3648 3645 +3 3353 3993 4292 +3 3353 4292 3676 +3 3354 3677 4293 +3 3354 4293 3994 +3 3355 3837 4063 +3 3355 4063 3607 +3 3356 3608 4064 +3 3356 4064 3838 +3 3357 3539 4427 +3 3357 4232 3431 +3 3357 4427 4232 +3 3358 3432 4233 +3 3358 4233 4428 +3 3358 4428 3540 +3 3359 3865 4050 +3 3359 4050 3569 +3 3360 3570 4051 +3 3360 4051 3866 +3 3361 3392 3962 +3 3361 3959 3402 +3 3361 3962 3959 +3 3362 3403 3960 +3 3362 3960 3963 +3 3362 3963 3393 +3 3363 3851 4263 +3 3363 4263 3883 +3 3364 3884 4264 +3 3364 4264 3852 +3 3365 3427 3688 +3 3365 3688 3644 +3 3366 3645 3689 +3 3366 3689 3428 +3 3367 3661 4056 +3 3367 4056 3818 +3 3368 3819 4057 +3 3368 4057 3662 +3 3369 3611 4284 +3 3369 4284 4048 +3 3370 4049 4285 +3 3370 4285 3612 +3 3371 3658 4062 +3 3371 4062 3657 +3 3372 3492 3706 +3 3372 3706 3595 +3 3373 3596 3707 +3 3373 3707 3493 +3 3374 3760 3816 +3 3374 3816 3441 +3 3375 3442 3817 +3 3375 3817 3761 +3 3376 3698 3885 +3 3376 3885 3560 +3 3377 3561 3886 +3 3377 3886 3699 +3 3378 3634 4349 +3 3378 4349 4116 +3 3379 4117 4350 +3 3379 4350 3635 +3 3380 3563 3799 +3 3380 3799 3646 +3 3381 3646 3800 +3 3381 3800 3564 +3 3382 4066 4443 +3 3382 4443 3740 +3 3383 3741 4444 +3 3383 4444 4067 +3 3384 3581 3985 +3 3384 3985 3793 +3 3385 3794 3986 +3 3385 3986 3582 +3 3386 3490 4052 +3 3386 4052 3979 +3 3387 3980 4053 +3 3387 4053 3491 +3 3388 3605 3682 +3 3388 3682 3484 +3 3389 3485 3683 +3 3389 3683 3606 +3 3390 3647 3720 +3 3390 3720 3499 +3 3391 3500 3721 +3 3391 3721 3648 +3 3392 3466 4132 +3 3392 4132 3962 +3 3393 3963 4133 +3 3393 4133 3467 +3 3394 3845 4164 +3 3394 4164 3722 +3 3395 3723 4165 +3 3395 4165 3846 +3 3396 3558 3989 +3 3396 3989 3827 +3 3397 3828 3990 +3 3397 3990 3559 +3 3398 3399 3631 +3 3398 3631 3748 +3 3398 3748 3520 +3 3399 3521 3749 +3 3399 3749 3631 +3 3400 3663 3803 +3 3400 3803 3563 +3 3401 3564 3804 +3 3401 3804 3664 +3 3402 3959 4015 +3 3402 4015 3478 +3 3403 3479 4016 +3 3403 4016 3960 +3 3404 3565 3907 +3 3404 3907 3750 +3 3405 3751 3908 +3 3405 3908 3566 +3 3406 3738 4606 +3 3406 4606 4250 +3 3407 4251 4607 +3 3407 4607 3739 +3 3408 3421 3422 +3 3408 3422 3426 +3 3408 3425 3421 +3 3408 3426 3434 +3 3408 3433 3425 +3 3408 3434 3433 +3 3409 3899 4650 +3 3409 4650 4134 +3 3410 4135 4651 +3 3410 4651 3900 +3 3411 3512 3950 +3 3411 3948 3429 +3 3411 3950 3948 +3 3412 3430 3949 +3 3412 3949 3951 +3 3412 3951 3513 +3 3413 3472 4102 +3 3413 4060 3415 +3 3413 4102 4060 +3 3414 3416 4061 +3 3414 4061 4103 +3 3414 4103 3473 +3 3415 4060 4242 +3 3415 4242 3591 +3 3416 3592 4243 +3 3416 4243 4061 +3 3417 3835 4128 +3 3417 4128 3726 +3 3418 3727 4129 +3 3418 4129 3836 +3 3419 4005 4240 +3 3419 4240 3684 +3 3420 3685 4241 +3 3420 4241 4006 +3 3421 3425 3480 +3 3421 3455 3422 +3 3421 3480 3503 +3 3421 3503 3455 +3 3422 3455 3504 +3 3422 3481 3426 +3 3422 3504 3481 +3 3423 3839 4513 +3 3423 4513 4068 +3 3424 4069 4514 +3 3424 4514 3840 +3 3425 3433 3488 +3 3425 3488 3510 +3 3425 3510 3480 +3 3426 3481 3511 +3 3426 3489 3434 +3 3426 3511 3489 +3 3427 3535 3771 +3 3427 3771 3688 +3 3428 3689 3772 +3 3428 3772 3536 +3 3429 3948 4009 +3 3429 4009 3508 +3 3430 3509 4010 +3 3430 4010 3949 +3 3431 4232 4394 +3 3431 4394 3597 +3 3432 3598 4395 +3 3432 4395 4233 +3 3433 3434 3496 +3 3433 3496 3516 +3 3433 3516 3488 +3 3434 3489 3517 +3 3434 3517 3496 +3 3435 3626 3961 +3 3435 3961 3625 +3 3436 3702 4037 +3 3436 4037 3783 +3 3437 3784 4038 +3 3437 4038 3703 +3 3438 3726 4156 +3 3438 4156 3891 +3 3439 3892 4157 +3 3439 4157 3727 +3 3440 3456 3742 +3 3440 3742 3743 +3 3440 3743 3457 +3 3441 3816 3915 +3 3441 3915 3543 +3 3442 3544 3916 +3 3442 3916 3817 +3 3443 3636 3964 +3 3443 3964 3791 +3 3444 3792 3965 +3 3444 3965 3637 +3 3445 3823 4044 +3 3445 4044 3702 +3 3446 3703 4045 +3 3446 4045 3824 +3 3447 3853 4238 +3 3447 4238 3861 +3 3448 3862 4239 +3 3448 4239 3854 +3 3449 3814 4378 +3 3449 4378 4019 +3 3450 4020 4379 +3 3450 4379 3815 +3 3451 3752 4550 +3 3451 4550 4256 +3 3452 4257 4551 +3 3452 4551 3753 +3 3453 4096 4499 +3 3453 4499 3847 +3 3454 3848 4500 +3 3454 4500 4097 +3 3455 3503 3548 +3 3455 3548 3549 +3 3455 3549 3504 +3 3456 3531 3779 +3 3456 3779 3742 +3 3457 3743 3780 +3 3457 3780 3532 +3 3458 4222 4517 +3 3458 4517 3642 +3 3459 3643 4518 +3 3459 4518 4223 +3 3460 3546 3859 +3 3460 3859 3933 +3 3460 3933 3556 +3 3461 3557 3934 +3 3461 3860 3547 +3 3461 3934 3860 +3 3462 3710 3911 +3 3462 3911 3700 +3 3463 3701 3912 +3 3463 3912 3711 +3 3464 4182 4614 +3 3464 4614 3881 +3 3465 3882 4615 +3 3465 4615 4183 +3 3466 3619 4254 +3 3466 4254 4132 +3 3467 4133 4255 +3 3467 4255 3620 +3 3468 3469 4072 +3 3468 4072 4108 +3 3468 4108 3529 +3 3469 3530 4109 +3 3469 4109 4072 +3 3470 3977 4046 +3 3470 4046 3577 +3 3471 3578 4047 +3 3471 4047 3978 +3 3472 3603 4192 +3 3472 4192 4102 +3 3473 4103 4193 +3 3473 4193 3604 +3 3474 3736 4216 +3 3474 4216 3969 +3 3475 3970 4217 +3 3475 4217 3737 +3 3476 3801 3966 +3 3476 3966 3663 +3 3477 3664 3967 +3 3477 3967 3802 +3 3478 4015 4144 +3 3478 4144 3629 +3 3479 3630 4145 +3 3479 4145 4016 +3 3480 3510 3599 +3 3480 3583 3503 +3 3480 3599 3583 +3 3481 3504 3584 +3 3481 3584 3600 +3 3481 3600 3511 +3 3482 3787 4120 +3 3482 4120 3831 +3 3483 3832 4121 +3 3483 4121 3788 +3 3484 3682 3812 +3 3484 3812 3653 +3 3485 3654 3813 +3 3485 3813 3683 +3 3486 3971 4333 +3 3486 4333 3851 +3 3487 3852 4334 +3 3487 4334 3972 +3 3488 3516 3617 +3 3488 3609 3510 +3 3488 3617 3609 +3 3489 3511 3610 +3 3489 3610 3618 +3 3489 3618 3517 +3 3490 3667 4200 +3 3490 4200 4052 +3 3491 4053 4201 +3 3491 4201 3668 +3 3492 3665 3855 +3 3492 3855 3706 +3 3493 3707 3856 +3 3493 3856 3666 +3 3494 3730 4417 +3 3494 4417 4172 +3 3495 4173 4418 +3 3495 4418 3731 +3 3496 3517 3622 +3 3496 3621 3516 +3 3496 3622 3621 +3 3497 4077 4390 +3 3497 4390 3777 +3 3498 3778 4391 +3 3498 4391 4078 +3 3499 3720 3863 +3 3499 3863 3665 +3 3500 3666 3864 +3 3500 3864 3721 +3 3501 3775 4329 +3 3501 4329 4031 +3 3502 4032 4330 +3 3502 4330 3776 +3 3503 3583 3615 +3 3503 3615 3548 +3 3504 3549 3616 +3 3504 3616 3584 +3 3505 3527 4252 +3 3505 4252 4253 +3 3505 4253 3528 +3 3506 3909 4258 +3 3506 4258 3869 +3 3507 3870 4259 +3 3507 4259 3910 +3 3508 4009 4106 +3 3508 4106 3640 +3 3509 3641 4107 +3 3509 4107 4010 +3 3510 3609 3659 +3 3510 3659 3599 +3 3511 3600 3660 +3 3511 3660 3610 +3 3512 3678 4087 +3 3512 4087 3950 +3 3513 3951 4088 +3 3513 4088 3679 +3 3514 3869 4138 +3 3514 4138 3587 +3 3515 3588 4139 +3 3515 4139 3870 +3 3516 3621 3680 +3 3516 3680 3617 +3 3517 3618 3681 +3 3517 3681 3622 +3 3518 4079 4419 +3 3518 4419 3843 +3 3519 3844 4420 +3 3519 4420 4080 +3 3520 3748 3913 +3 3520 3913 3704 +3 3521 3705 3914 +3 3521 3914 3749 +3 3522 4136 4485 +3 3522 4485 3853 +3 3523 3854 4486 +3 3523 4486 4137 +3 3524 3861 4339 +3 3524 4339 3862 +3 3525 3829 4556 +3 3525 4556 4220 +3 3526 4221 4557 +3 3526 4557 3830 +3 3527 3632 4322 +3 3527 4322 4252 +3 3528 4253 4323 +3 3528 4323 3633 +3 3529 4108 4202 +3 3529 4202 3655 +3 3530 3656 4203 +3 3530 4203 4109 +3 3531 3653 3889 +3 3531 3889 3779 +3 3532 3780 3890 +3 3532 3890 3654 +3 3533 4206 4554 +3 3533 4554 3897 +3 3534 3898 4555 +3 3534 4555 4207 +3 3535 3704 3923 +3 3535 3923 3771 +3 3536 3772 3924 +3 3536 3924 3705 +3 3537 3883 4359 +3 3537 4359 4029 +3 3538 4030 4360 +3 3538 4360 3884 +3 3539 3762 4660 +3 3539 4660 4427 +3 3540 4428 4661 +3 3540 4661 3763 +3 3541 4035 4509 +3 3541 4509 3696 +3 3542 3697 4510 +3 3542 4510 4036 +3 3543 3915 4039 +3 3543 4039 3710 +3 3544 3711 4040 +3 3544 4040 3916 +3 3545 3579 4083 +3 3545 4083 4084 +3 3545 4084 3580 +3 3546 3700 3973 +3 3546 3973 3859 +3 3547 3860 3974 +3 3547 3974 3701 +3 3548 3615 3694 +3 3548 3669 3549 +3 3548 3694 3669 +3 3549 3669 3695 +3 3549 3695 3616 +3 3550 3919 4404 +3 3550 4404 4025 +3 3551 4026 4405 +3 3551 4405 3920 +3 3552 3734 4503 +3 3552 4318 3593 +3 3552 4503 4318 +3 3553 3594 4319 +3 3553 4319 4504 +3 3553 4504 3735 +3 3554 3651 4274 +3 3554 4274 3937 +3 3555 3938 4275 +3 3555 4275 3652 +3 3556 3933 4054 +3 3556 4054 3698 +3 3557 3699 4055 +3 3557 4055 3934 +3 3558 3783 4186 +3 3558 4186 3989 +3 3559 3990 4187 +3 3559 4187 3784 +3 3560 3885 4092 +3 3560 4092 3809 +3 3561 3810 4093 +3 3561 4093 3886 +3 3562 3602 4586 +3 3562 4585 3601 +3 3562 4586 4585 +3 3563 3803 4011 +3 3563 4011 3799 +3 3564 3800 4012 +3 3564 4012 3804 +3 3565 3809 4104 +3 3565 4104 3907 +3 3566 3908 4105 +3 3566 4105 3810 +3 3567 4075 4429 +3 3567 4429 3919 +3 3568 3920 4430 +3 3568 4430 4076 +3 3569 4050 4316 +3 3569 4316 3835 +3 3570 3836 4317 +3 3570 4317 4051 +3 3571 3887 4578 +3 3571 4578 4270 +3 3572 4271 4579 +3 3572 4579 3888 +3 3573 4023 4675 +3 3573 4675 4190 +3 3574 4191 4676 +3 3574 4676 4024 +3 3575 3943 4234 +3 3575 4234 3893 +3 3576 3894 4235 +3 3576 4235 3944 +3 3577 4046 4184 +3 3577 4184 3744 +3 3578 3745 4185 +3 3578 4185 4047 +3 3579 3674 4154 +3 3579 4154 4083 +3 3580 4084 4155 +3 3580 4155 3675 +3 3581 3831 4218 +3 3581 4218 3985 +3 3582 3986 4219 +3 3582 4219 3832 +3 3583 3599 3724 +3 3583 3724 3732 +3 3583 3732 3615 +3 3584 3616 3733 +3 3584 3725 3600 +3 3584 3733 3725 +3 3585 3893 4230 +3 3585 4230 3945 +3 3586 3945 4231 +3 3586 4231 3894 +3 3587 4138 4226 +3 3587 4226 3708 +3 3588 3709 4227 +3 3588 4227 4139 +3 3589 4118 4366 +3 3589 4366 3845 +3 3590 3846 4367 +3 3590 4367 4119 +3 3591 4242 4477 +3 3591 4477 3716 +3 3592 3717 4478 +3 3592 4478 4243 +3 3593 4318 4386 +3 3593 4386 3690 +3 3594 3691 4387 +3 3594 4387 4319 +3 3595 3706 3954 +3 3595 3879 3605 +3 3595 3954 3879 +3 3596 3606 3880 +3 3596 3880 3955 +3 3596 3955 3707 +3 3597 4394 4612 +3 3597 4612 3820 +3 3598 3821 4613 +3 3598 4613 4395 +3 3599 3659 3764 +3 3599 3764 3724 +3 3600 3725 3765 +3 3600 3765 3660 +3 3601 4585 4626 +3 3601 4626 3670 +3 3602 3671 4627 +3 3602 4627 4586 +3 3603 3789 4374 +3 3603 4374 4192 +3 3604 4193 4375 +3 3604 4375 3790 +3 3605 3879 3921 +3 3605 3921 3682 +3 3606 3683 3922 +3 3606 3922 3880 +3 3607 4063 4364 +3 3607 4364 3909 +3 3608 3910 4365 +3 3608 4365 4064 +3 3609 3617 3758 +3 3609 3758 3773 +3 3609 3773 3659 +3 3610 3660 3774 +3 3610 3759 3618 +3 3610 3774 3759 +3 3611 3927 4576 +3 3611 4576 4284 +3 3612 4285 4577 +3 3612 4577 3928 +3 3613 3849 4489 +3 3613 4489 4214 +3 3614 4215 4490 +3 3614 4490 3850 +3 3615 3732 3769 +3 3615 3769 3694 +3 3616 3695 3770 +3 3616 3770 3733 +3 3617 3680 3795 +3 3617 3795 3758 +3 3618 3759 3796 +3 3618 3796 3681 +3 3619 3818 4445 +3 3619 4445 4254 +3 3620 4255 4446 +3 3620 4446 3819 +3 3621 3622 3766 +3 3621 3766 3797 +3 3621 3797 3680 +3 3622 3681 3798 +3 3622 3798 3766 +3 3623 3975 4796 +3 3623 4796 4425 +3 3624 4426 4797 +3 3624 4797 3976 +3 3625 3961 4204 +3 3625 4204 3895 +3 3626 3896 4205 +3 3626 4205 3961 +3 3627 3672 4089 +3 3627 4070 3692 +3 3627 4089 4070 +3 3628 3693 4071 +3 3628 4071 4090 +3 3628 4090 3673 +3 3629 4144 4337 +3 3629 4337 3825 +3 3630 3826 4338 +3 3630 4338 4145 +3 3631 3749 3958 +3 3631 3958 3748 +3 3632 3805 4415 +3 3632 4415 4322 +3 3633 4323 4416 +3 3633 4416 3806 +3 3634 3956 4699 +3 3634 4699 4349 +3 3635 4350 4700 +3 3635 4700 3957 +3 3636 3895 4194 +3 3636 4194 3964 +3 3637 3965 4195 +3 3637 4195 3896 +3 3638 3712 4208 +3 3638 4142 3787 +3 3638 4208 4142 +3 3639 3788 4143 +3 3639 4143 4209 +3 3639 4209 3713 +3 3640 4106 4282 +3 3640 4282 3823 +3 3641 3824 4283 +3 3641 4283 4107 +3 3642 4517 4738 +3 3642 4738 3873 +3 3643 3874 4739 +3 3643 4739 4518 +3 3644 3688 3991 +3 3644 3952 3647 +3 3644 3991 3952 +3 3645 3648 3953 +3 3645 3953 3992 +3 3645 3992 3689 +3 3646 3799 4091 +3 3646 4091 3800 +3 3647 3952 4007 +3 3647 4007 3720 +3 3648 3721 4008 +3 3648 4008 3953 +3 3649 4021 4544 +3 3649 4544 4148 +3 3650 4149 4545 +3 3650 4545 4022 +3 3651 3785 4398 +3 3651 4398 4274 +3 3652 4275 4399 +3 3652 4399 3786 +3 3653 3812 4001 +3 3653 4001 3889 +3 3654 3890 4002 +3 3654 4002 3813 +3 3655 4202 4396 +3 3655 4396 3837 +3 3656 3838 4397 +3 3656 4397 4203 +3 3657 4062 4408 +3 3657 4408 3995 +3 3658 3996 4409 +3 3658 4409 4062 +3 3659 3773 3857 +3 3659 3857 3764 +3 3660 3765 3858 +3 3660 3858 3774 +3 3661 3995 4406 +3 3661 4406 4056 +3 3662 4057 4407 +3 3662 4407 3996 +3 3663 3966 4100 +3 3663 4100 3803 +3 3664 3804 4101 +3 3664 4101 3967 +3 3665 3863 4042 +3 3665 4042 3855 +3 3666 3856 4043 +3 3666 4043 3864 +3 3667 3891 4410 +3 3667 4410 4200 +3 3668 4201 4411 +3 3668 4411 3892 +3 3669 3694 3807 +3 3669 3807 3808 +3 3669 3808 3695 +3 3670 4626 4748 +3 3670 4748 3781 +3 3671 3782 4749 +3 3671 4749 4627 +3 3672 3750 4168 +3 3672 4168 4089 +3 3673 4090 4169 +3 3673 4169 3751 +3 3674 3793 4272 +3 3674 4272 4154 +3 3675 4155 4273 +3 3675 4273 3794 +3 3676 4292 4683 +3 3676 4683 4035 +3 3677 4036 4684 +3 3677 4684 4293 +3 3678 3791 4198 +3 3678 4198 4087 +3 3679 4088 4199 +3 3679 4199 3792 +3 3680 3797 3901 +3 3680 3901 3795 +3 3681 3796 3902 +3 3681 3902 3798 +3 3682 3921 4017 +3 3682 4017 3812 +3 3683 3813 4018 +3 3683 4018 3922 +3 3684 4240 4552 +3 3684 4552 3971 +3 3685 3972 4553 +3 3685 4553 4241 +3 3686 3937 4400 +3 3686 4400 4130 +3 3687 4131 4401 +3 3687 4401 3938 +3 3688 3771 4058 +3 3688 4058 3991 +3 3689 3992 4059 +3 3689 4059 3772 +3 3690 4386 4562 +3 3690 4562 3867 +3 3691 3868 4563 +3 3691 4563 4387 +3 3692 4070 4176 +3 3692 4176 3801 +3 3693 3802 4177 +3 3693 4177 4071 +3 3694 3769 3877 +3 3694 3877 3807 +3 3695 3808 3878 +3 3695 3878 3770 +3 3696 4509 4740 +3 3696 4740 3925 +3 3697 3926 4741 +3 3697 4741 4510 +3 3698 4054 4228 +3 3698 4228 3885 +3 3699 3886 4229 +3 3699 4229 4055 +3 3700 3911 4152 +3 3700 4152 3973 +3 3701 3974 4153 +3 3701 4153 3912 +3 3702 4044 4351 +3 3702 4351 4037 +3 3703 4038 4352 +3 3703 4352 4045 +3 3704 3913 4112 +3 3704 4112 3923 +3 3705 3924 4113 +3 3705 4113 3914 +3 3706 3855 4085 +3 3706 4085 3954 +3 3707 3955 4086 +3 3707 4086 3856 +3 3708 4226 4370 +3 3708 4370 3865 +3 3709 3866 4371 +3 3709 4371 4227 +3 3710 4039 4246 +3 3710 4246 3911 +3 3711 3912 4247 +3 3711 4247 4040 +3 3712 3827 4324 +3 3712 4324 4208 +3 3713 4209 4325 +3 3713 4325 3828 +3 3714 3715 4582 +3 3714 4582 4610 +3 3714 4610 3767 +3 3715 3768 4611 +3 3715 4611 4582 +3 3716 4477 4648 +3 3716 4648 3905 +3 3717 3906 4649 +3 3717 4649 4478 +3 3718 4353 4963 +3 3718 4963 4265 +3 3719 4265 4964 +3 3719 4964 4354 +3 3720 4007 4114 +3 3720 4114 3863 +3 3721 3864 4115 +3 3721 4115 4008 +3 3722 4164 4566 +3 3722 4566 3841 +3 3723 3842 4567 +3 3723 4567 4165 +3 3724 3764 3929 +3 3724 3917 3732 +3 3724 3929 3917 +3 3725 3733 3918 +3 3725 3918 3930 +3 3725 3930 3765 +3 3726 4128 4511 +3 3726 4511 4156 +3 3727 4157 4512 +3 3727 4512 4129 +3 3728 4196 4866 +3 3728 4866 4357 +3 3729 4358 4867 +3 3729 4867 4197 +3 3730 4019 4717 +3 3730 4717 4417 +3 3731 4418 4718 +3 3731 4718 4020 +3 3732 3917 3935 +3 3732 3935 3769 +3 3733 3770 3936 +3 3733 3936 3918 +3 3734 3946 4734 +3 3734 4734 4503 +3 3735 4504 4735 +3 3735 4735 3947 +3 3736 4025 4525 +3 3736 4525 4216 +3 3737 4217 4526 +3 3737 4526 4026 +3 3738 4134 5046 +3 3738 5046 4606 +3 3739 4607 5047 +3 3739 5047 4135 +3 3740 4443 4707 +3 3740 4707 3993 +3 3741 3994 4708 +3 3741 4708 4444 +3 3742 3779 4081 +3 3742 4065 3743 +3 3742 4081 4065 +3 3743 4065 4082 +3 3743 4082 3780 +3 3744 4184 4402 +3 3744 4402 3943 +3 3745 3944 4403 +3 3745 4403 4185 +3 3746 4310 4928 +3 3746 4928 4331 +3 3747 4332 4929 +3 3747 4929 4311 +3 3748 3958 4094 +3 3748 4094 3913 +3 3749 3914 4095 +3 3749 4095 3958 +3 3750 3907 4308 +3 3750 4308 4168 +3 3751 4169 4309 +3 3751 4309 3908 +3 3752 4068 4897 +3 3752 4897 4550 +3 3753 4551 4898 +3 3753 4898 4069 +3 3754 4331 4945 +3 3754 4945 4314 +3 3755 4315 4946 +3 3755 4946 4332 +3 3756 4236 4834 +3 3756 4834 4224 +3 3757 4225 4835 +3 3757 4835 4237 +3 3758 3795 3939 +3 3758 3931 3773 +3 3758 3939 3931 +3 3759 3774 3932 +3 3759 3932 3940 +3 3759 3940 3796 +3 3760 3761 4212 +3 3760 4212 4244 +3 3760 4244 3816 +3 3761 3817 4245 +3 3761 4245 4212 +3 3762 4027 4969 +3 3762 4969 4660 +3 3763 4661 4970 +3 3763 4970 4028 +3 3764 3857 3987 +3 3764 3987 3929 +3 3765 3930 3988 +3 3765 3988 3858 +3 3766 3798 3982 +3 3766 3981 3797 +3 3766 3982 3981 +3 3767 4610 4685 +3 3767 4685 3871 +3 3768 3872 4686 +3 3768 4686 4611 +3 3769 3935 4013 +3 3769 4013 3877 +3 3770 3878 4014 +3 3770 4014 3936 +3 3771 3923 4188 +3 3771 4188 4058 +3 3772 4059 4189 +3 3772 4189 3924 +3 3773 3931 3983 +3 3773 3983 3857 +3 3774 3858 3984 +3 3774 3984 3932 +3 3775 4130 4693 +3 3775 4693 4329 +3 3776 4330 4694 +3 3776 4694 4131 +3 3777 4390 4756 +3 3777 4756 4118 +3 3778 4119 4757 +3 3778 4757 4391 +3 3779 3889 4162 +3 3779 4162 4081 +3 3780 4082 4163 +3 3780 4163 3890 +3 3781 4748 4905 +3 3781 4905 4066 +3 3782 4067 4906 +3 3782 4906 4749 +3 3783 4037 4455 +3 3783 4455 4186 +3 3784 4187 4456 +3 3784 4456 4038 +3 3785 3969 4572 +3 3785 4572 4398 +3 3786 4399 4573 +3 3786 4573 3970 +3 3787 4142 4491 +3 3787 4491 4120 +3 3788 4121 4492 +3 3788 4492 4143 +3 3789 4029 4618 +3 3789 4618 4374 +3 3790 4375 4619 +3 3790 4619 4030 +3 3791 3964 4362 +3 3791 4362 4198 +3 3792 4199 4363 +3 3792 4363 3965 +3 3793 3985 4463 +3 3793 4463 4272 +3 3794 4273 4464 +3 3794 4464 3986 +3 3795 3901 4003 +3 3795 4003 3939 +3 3796 3940 4004 +3 3796 4004 3902 +3 3797 3981 4033 +3 3797 4033 3901 +3 3798 3902 4034 +3 3798 4034 3982 +3 3799 4011 4294 +3 3799 4294 4091 +3 3800 4091 4295 +3 3800 4295 4012 +3 3801 4176 4340 +3 3801 4340 3966 +3 3802 3967 4341 +3 3802 4341 4177 +3 3803 4100 4304 +3 3803 4304 4011 +3 3804 4012 4305 +3 3804 4305 4101 +3 3805 4031 4658 +3 3805 4658 4415 +3 3806 4416 4659 +3 3806 4659 4032 +3 3807 3877 3997 +3 3807 3968 3808 +3 3807 3997 3968 +3 3808 3968 3998 +3 3808 3998 3878 +3 3809 4092 4368 +3 3809 4368 4104 +3 3810 4105 4369 +3 3810 4369 4093 +3 3811 4468 4942 +3 3811 4942 4467 +3 3812 4017 4180 +3 3812 4180 4001 +3 3813 4002 4181 +3 3813 4181 4018 +3 3814 4224 4804 +3 3814 4804 4378 +3 3815 4379 4805 +3 3815 4805 4225 +3 3816 4244 4335 +3 3816 4335 3915 +3 3817 3916 4336 +3 3817 4336 4245 +3 3818 4056 4705 +3 3818 4705 4445 +3 3819 4446 4706 +3 3819 4706 4057 +3 3820 4612 4913 +3 3820 4913 4096 +3 3821 4097 4914 +3 3821 4914 4613 +3 3822 4197 4773 +3 3822 4773 4196 +3 3823 4282 4515 +3 3823 4515 4044 +3 3824 4045 4516 +3 3824 4516 4283 +3 3825 4337 4594 +3 3825 4594 4075 +3 3826 4076 4595 +3 3826 4595 4338 +3 3827 3989 4487 +3 3827 4487 4324 +3 3828 4325 4488 +3 3828 4488 3990 +3 3829 4190 4959 +3 3829 4959 4556 +3 3830 4557 4960 +3 3830 4960 4191 +3 3831 4120 4538 +3 3831 4538 4218 +3 3832 4219 4539 +3 3832 4539 4121 +3 3833 3903 4721 +3 3833 4721 4911 +3 3833 4911 3999 +3 3834 4000 4912 +3 3834 4722 3904 +3 3834 4912 4722 +3 3835 4316 4620 +3 3835 4620 4128 +3 3836 4129 4621 +3 3836 4621 4317 +3 3837 4396 4628 +3 3837 4628 4063 +3 3838 4064 4629 +3 3838 4629 4397 +3 3839 4439 5133 +3 3839 5133 4513 +3 3840 4514 5134 +3 3840 5134 4440 +3 3841 4566 4713 +3 3841 4713 4005 +3 3842 4006 4714 +3 3842 4714 4567 +3 3843 4419 4820 +3 3843 4820 4236 +3 3844 4237 4821 +3 3844 4821 4420 +3 3845 4366 4689 +3 3845 4689 4164 +3 3846 4165 4690 +3 3846 4690 4367 +3 3847 4499 5136 +3 3847 5136 4451 +3 3848 4452 5137 +3 3848 5137 4500 +3 3849 4148 4788 +3 3849 4788 4489 +3 3850 4490 4789 +3 3850 4789 4149 +3 3851 4333 4762 +3 3851 4762 4263 +3 3852 4264 4763 +3 3852 4763 4334 +3 3853 4485 4899 +3 3853 4899 4238 +3 3854 4239 4900 +3 3854 4900 4486 +3 3855 4042 4290 +3 3855 4290 4085 +3 3856 4086 4291 +3 3856 4291 4043 +3 3857 3983 4110 +3 3857 4110 3987 +3 3858 3988 4111 +3 3858 4111 3984 +3 3859 3973 4306 +3 3859 4306 4376 +3 3859 4376 3933 +3 3860 3934 4377 +3 3860 4307 3974 +3 3860 4377 4307 +3 3861 4238 4736 +3 3861 4736 4339 +3 3862 4339 4737 +3 3862 4737 4239 +3 3863 4114 4300 +3 3863 4300 4042 +3 3864 4043 4301 +3 3864 4301 4115 +3 3865 4370 4570 +3 3865 4570 4050 +3 3866 4051 4571 +3 3866 4571 4371 +3 3867 4562 4784 +3 3867 4784 4079 +3 3868 4080 4785 +3 3868 4785 4563 +3 3869 4258 4530 +3 3869 4530 4138 +3 3870 4139 4531 +3 3870 4531 4259 +3 3871 4685 4802 +3 3871 4802 4077 +3 3872 4078 4803 +3 3872 4803 4686 +3 3873 4738 5094 +3 3873 5094 4182 +3 3874 4183 5095 +3 3874 5095 4739 +3 3875 4451 5150 +3 3875 5150 4439 +3 3876 4440 5151 +3 3876 5151 4452 +3 3877 4013 4126 +3 3877 4126 3997 +3 3878 3998 4127 +3 3878 4127 4014 +3 3879 3954 4288 +3 3879 4178 3921 +3 3879 4288 4178 +3 3880 3922 4179 +3 3880 4179 4289 +3 3880 4289 3955 +3 3881 4614 5125 +3 3881 5125 4353 +3 3882 4354 5126 +3 3882 5126 4615 +3 3883 4263 4771 +3 3883 4771 4359 +3 3884 4360 4772 +3 3884 4772 4264 +3 3885 4228 4453 +3 3885 4453 4092 +3 3886 4093 4454 +3 3886 4454 4229 +3 3887 4214 4961 +3 3887 4961 4578 +3 3888 4579 4962 +3 3888 4962 4215 +3 3889 4001 4266 +3 3889 4266 4162 +3 3890 4163 4267 +3 3890 4267 4002 +3 3891 4156 4691 +3 3891 4691 4410 +3 3892 4411 4692 +3 3892 4692 4157 +3 3893 4234 4589 +3 3893 4589 4230 +3 3894 4231 4590 +3 3894 4590 4235 +3 3895 4204 4521 +3 3895 4521 4194 +3 3896 4195 4522 +3 3896 4522 4205 +3 3897 4554 4986 +3 3897 4986 4310 +3 3898 4311 4987 +3 3898 4987 4555 +3 3899 4467 5246 +3 3899 5246 4650 +3 3900 4651 5247 +3 3900 5247 4468 +3 3901 4033 4122 +3 3901 4122 4003 +3 3902 4004 4123 +3 3902 4123 4034 +3 3903 4048 4872 +3 3903 4872 4721 +3 3904 4722 4873 +3 3904 4873 4049 +3 3905 4648 4889 +3 3905 4889 4136 +3 3906 4137 4890 +3 3906 4890 4649 +3 3907 4104 4501 +3 3907 4501 4308 +3 3908 4309 4502 +3 3908 4502 4105 +3 3909 4364 4742 +3 3909 4742 4258 +3 3910 4259 4743 +3 3910 4743 4365 +3 3911 4246 4507 +3 3911 4507 4152 +3 3912 4153 4508 +3 3912 4508 4247 +3 3913 4094 4298 +3 3913 4298 4112 +3 3914 4113 4299 +3 3914 4299 4095 +3 3915 4335 4469 +3 3915 4469 4039 +3 3916 4040 4470 +3 3916 4470 4336 +3 3917 3929 4140 +3 3917 4140 4150 +3 3917 4150 3935 +3 3918 3936 4151 +3 3918 4141 3930 +3 3918 4151 4141 +3 3919 4429 4836 +3 3919 4836 4404 +3 3920 4405 4837 +3 3920 4837 4430 +3 3921 4178 4276 +3 3921 4276 4017 +3 3922 4018 4277 +3 3922 4277 4179 +3 3923 4112 4380 +3 3923 4380 4188 +3 3924 4189 4381 +3 3924 4381 4113 +3 3925 4740 5032 +3 3925 5032 4206 +3 3926 4207 5033 +3 3926 5033 4741 +3 3927 4314 4982 +3 3927 4982 4576 +3 3928 4577 4983 +3 3928 4983 4315 +3 3929 3987 4170 +3 3929 4170 4140 +3 3930 4141 4171 +3 3930 4171 3988 +3 3931 3939 4124 +3 3931 4124 4158 +3 3931 4158 3983 +3 3932 3984 4159 +3 3932 4125 3940 +3 3932 4159 4125 +3 3933 4376 4505 +3 3933 4505 4054 +3 3934 4055 4506 +3 3934 4506 4377 +3 3935 4150 4210 +3 3935 4210 4013 +3 3936 4014 4211 +3 3936 4211 4151 +3 3937 4274 4728 +3 3937 4728 4400 +3 3938 4401 4729 +3 3938 4729 4275 +3 3939 4003 4166 +3 3939 4166 4124 +3 3940 4125 4167 +3 3940 4167 4004 +3 3941 3979 4558 +3 3941 4558 4560 +3 3941 4560 3977 +3 3942 3978 4561 +3 3942 4559 3980 +3 3942 4561 4559 +3 3943 4402 4666 +3 3943 4666 4234 +3 3944 4235 4667 +3 3944 4667 4403 +3 3945 4230 4672 +3 3945 4672 4231 +3 3946 4116 5014 +3 3946 5014 4734 +3 3947 4735 5015 +3 3947 5015 4117 +3 3948 3950 4583 +3 3948 4583 4608 +3 3948 4608 4009 +3 3949 4010 4609 +3 3949 4584 3951 +3 3949 4609 4584 +3 3950 4087 4604 +3 3950 4604 4583 +3 3951 4584 4605 +3 3951 4605 4088 +3 3952 3991 4344 +3 3952 4344 4388 +3 3952 4388 4007 +3 3953 4008 4389 +3 3953 4345 3992 +3 3953 4389 4345 +3 3954 4085 4423 +3 3954 4423 4288 +3 3955 4289 4424 +3 3955 4424 4086 +3 3956 4357 5117 +3 3956 5117 4699 +3 3957 4700 5118 +3 3957 5118 4358 +3 3958 4095 4361 +3 3958 4361 4094 +3 3959 3962 4630 +3 3959 4630 4670 +3 3959 4670 4015 +3 3960 4016 4671 +3 3960 4631 3963 +3 3960 4671 4631 +3 3961 4205 4593 +3 3961 4593 4204 +3 3962 4132 4816 +3 3962 4816 4630 +3 3963 4631 4817 +3 3963 4817 4133 +3 3964 4194 4587 +3 3964 4587 4362 +3 3965 4363 4588 +3 3965 4588 4195 +3 3966 4340 4461 +3 3966 4461 4100 +3 3967 4101 4462 +3 3967 4462 4341 +3 3968 3997 4174 +3 3968 4174 4175 +3 3968 4175 3998 +3 3969 4216 4814 +3 3969 4814 4572 +3 3970 4573 4815 +3 3970 4815 4217 +3 3971 4552 4926 +3 3971 4926 4333 +3 3972 4334 4927 +3 3972 4927 4553 +3 3973 4152 4457 +3 3973 4457 4306 +3 3974 4307 4458 +3 3974 4458 4153 +3 3975 4220 5078 +3 3975 5078 4796 +3 3976 4797 5079 +3 3976 5079 4221 +3 3977 4560 4744 +3 3977 4744 4046 +3 3978 4047 4745 +3 3978 4745 4561 +3 3979 4052 4616 +3 3979 4616 4558 +3 3980 4559 4617 +3 3980 4617 4053 +3 3981 3982 4213 +3 3981 4213 4248 +3 3981 4248 4033 +3 3982 4034 4249 +3 3982 4249 4213 +3 3983 4158 4278 +3 3983 4278 4110 +3 3984 4111 4279 +3 3984 4279 4159 +3 3985 4218 4719 +3 3985 4719 4463 +3 3986 4464 4720 +3 3986 4720 4219 +3 3987 4110 4280 +3 3987 4280 4170 +3 3988 4171 4281 +3 3988 4281 4111 +3 3989 4186 4701 +3 3989 4701 4487 +3 3990 4488 4702 +3 3990 4702 4187 +3 3991 4058 4413 +3 3991 4413 4344 +3 3992 4345 4414 +3 3992 4414 4059 +3 3993 4707 5038 +3 3993 5038 4292 +3 3994 4293 5039 +3 3994 5039 4708 +3 3995 4408 4810 +3 3995 4810 4406 +3 3996 4407 4811 +3 3996 4811 4409 +3 3997 4126 4312 +3 3997 4312 4174 +3 3998 4175 4313 +3 3998 4313 4127 +3 3999 4911 5127 +3 3999 5127 4222 +3 4000 4223 5128 +3 4000 5128 4912 +3 4001 4180 4435 +3 4001 4435 4266 +3 4002 4267 4436 +3 4002 4436 4181 +3 4003 4122 4268 +3 4003 4268 4166 +3 4004 4167 4269 +3 4004 4269 4123 +3 4005 4713 4965 +3 4005 4965 4240 +3 4006 4241 4966 +3 4006 4966 4714 +3 4007 4388 4473 +3 4007 4473 4114 +3 4008 4115 4474 +3 4008 4474 4389 +3 4009 4608 4703 +3 4009 4703 4106 +3 4010 4107 4704 +3 4010 4704 4609 +3 4011 4304 4568 +3 4011 4568 4294 +3 4012 4295 4569 +3 4012 4569 4305 +3 4013 4210 4327 +3 4013 4327 4126 +3 4014 4127 4328 +3 4014 4328 4211 +3 4015 4670 4767 +3 4015 4767 4144 +3 4016 4145 4768 +3 4016 4768 4671 +3 4017 4276 4431 +3 4017 4431 4180 +3 4018 4181 4432 +3 4018 4432 4277 +3 4019 4378 5072 +3 4019 5072 4717 +3 4020 4718 5073 +3 4020 5073 4379 +3 4021 4172 5008 +3 4021 5008 4544 +3 4022 4545 5009 +3 4022 5009 4173 +3 4023 4256 5161 +3 4023 5161 4675 +3 4024 4676 5162 +3 4024 5162 4257 +3 4025 4404 4901 +3 4025 4901 4525 +3 4026 4526 4902 +3 4026 4902 4405 +3 4027 4250 5292 +3 4027 5292 4969 +3 4028 4970 5293 +3 4028 5293 4251 +3 4029 4359 4967 +3 4029 4967 4618 +3 4030 4619 4968 +3 4030 4968 4360 +3 4031 4329 4971 +3 4031 4971 4658 +3 4032 4659 4972 +3 4032 4972 4330 +3 4033 4248 4320 +3 4033 4320 4122 +3 4034 4123 4321 +3 4034 4321 4249 +3 4035 4683 5140 +3 4035 5140 4509 +3 4036 4510 5141 +3 4036 5141 4684 +3 4037 4351 4774 +3 4037 4774 4455 +3 4038 4456 4775 +3 4038 4775 4352 +3 4039 4469 4662 +3 4039 4662 4246 +3 4040 4247 4663 +3 4040 4663 4470 +3 4041 4073 5088 +3 4041 5088 5089 +3 4041 5089 4074 +3 4042 4300 4542 +3 4042 4542 4290 +3 4043 4291 4543 +3 4043 4543 4301 +3 4044 4515 4792 +3 4044 4792 4351 +3 4045 4352 4793 +3 4045 4793 4516 +3 4046 4744 4864 +3 4046 4864 4184 +3 4047 4185 4865 +3 4047 4865 4745 +3 4048 4284 5098 +3 4048 5098 4872 +3 4049 4873 5099 +3 4049 5099 4285 +3 4050 4570 4828 +3 4050 4828 4316 +3 4051 4317 4829 +3 4051 4829 4571 +3 4052 4200 4752 +3 4052 4752 4616 +3 4053 4617 4753 +3 4053 4753 4201 +3 4054 4505 4668 +3 4054 4668 4228 +3 4055 4229 4669 +3 4055 4669 4506 +3 4056 4406 5062 +3 4056 5062 4705 +3 4057 4706 5063 +3 4057 5063 4407 +3 4058 4188 4534 +3 4058 4534 4413 +3 4059 4414 4535 +3 4059 4535 4189 +3 4060 4102 4852 +3 4060 4852 5036 +3 4060 5036 4242 +3 4061 4243 5037 +3 4061 4853 4103 +3 4061 5037 4853 +3 4062 4409 4923 +3 4062 4923 4408 +3 4063 4628 4951 +3 4063 4951 4364 +3 4064 4365 4952 +3 4064 4952 4629 +3 4065 4081 4495 +3 4065 4495 4496 +3 4065 4496 4082 +3 4066 4905 5277 +3 4066 5277 4443 +3 4067 4444 5278 +3 4067 5278 4906 +3 4068 4513 5289 +3 4068 5289 4897 +3 4069 4898 5290 +3 4069 5290 4514 +3 4070 4089 4632 +3 4070 4632 4634 +3 4070 4634 4176 +3 4071 4177 4635 +3 4071 4633 4090 +3 4071 4635 4633 +3 4072 4109 4861 +3 4072 4860 4108 +3 4072 4861 4860 +3 4073 4146 5129 +3 4073 5129 5088 +3 4074 5089 5130 +3 4074 5130 4147 +3 4075 4594 4947 +3 4075 4947 4429 +3 4076 4430 4948 +3 4076 4948 4595 +3 4077 4802 5111 +3 4077 5111 4390 +3 4078 4391 5112 +3 4078 5112 4803 +3 4079 4784 5082 +3 4079 5082 4419 +3 4080 4420 5083 +3 4080 5083 4785 +3 4081 4162 4548 +3 4081 4548 4495 +3 4082 4496 4549 +3 4082 4549 4163 +3 4083 4154 4758 +3 4083 4727 4084 +3 4083 4758 4727 +3 4084 4727 4759 +3 4084 4759 4155 +3 4085 4290 4600 +3 4085 4600 4423 +3 4086 4424 4601 +3 4086 4601 4291 +3 4087 4198 4697 +3 4087 4697 4604 +3 4088 4605 4698 +3 4088 4698 4199 +3 4089 4168 4695 +3 4089 4695 4632 +3 4090 4633 4696 +3 4090 4696 4169 +3 4091 4294 4643 +3 4091 4643 4295 +3 4092 4453 4730 +3 4092 4730 4368 +3 4093 4369 4731 +3 4093 4731 4454 +3 4094 4361 4532 +3 4094 4532 4298 +3 4095 4299 4533 +3 4095 4533 4361 +3 4096 4913 5248 +3 4096 5248 4499 +3 4097 4500 5249 +3 4097 5249 4914 +3 4098 4160 5328 +3 4098 5294 4099 +3 4098 5328 5294 +3 4099 5294 5329 +3 4099 5329 4161 +3 4100 4461 4644 +3 4100 4644 4304 +3 4101 4305 4645 +3 4101 4645 4462 +3 4102 4192 4934 +3 4102 4934 4852 +3 4103 4853 4935 +3 4103 4935 4193 +3 4104 4368 4746 +3 4104 4746 4501 +3 4105 4502 4747 +3 4105 4747 4369 +3 4106 4703 4847 +3 4106 4847 4282 +3 4107 4283 4848 +3 4107 4848 4704 +3 4108 4860 4943 +3 4108 4943 4202 +3 4109 4203 4944 +3 4109 4944 4861 +3 4110 4278 4449 +3 4110 4449 4280 +3 4111 4281 4450 +3 4111 4450 4279 +3 4112 4298 4536 +3 4112 4536 4380 +3 4113 4381 4537 +3 4113 4537 4299 +3 4114 4473 4622 +3 4114 4622 4300 +3 4115 4301 4623 +3 4115 4623 4474 +3 4116 4349 5223 +3 4116 5223 5014 +3 4117 5015 5224 +3 4117 5224 4350 +3 4118 4756 5026 +3 4118 5026 4366 +3 4119 4367 5027 +3 4119 5027 4757 +3 4120 4491 4917 +3 4120 4917 4538 +3 4121 4539 4918 +3 4121 4918 4492 +3 4122 4320 4441 +3 4122 4441 4268 +3 4123 4269 4442 +3 4123 4442 4321 +3 4124 4166 4392 +3 4124 4382 4158 +3 4124 4392 4382 +3 4125 4159 4383 +3 4125 4383 4393 +3 4125 4393 4167 +3 4126 4327 4493 +3 4126 4493 4312 +3 4127 4313 4494 +3 4127 4494 4328 +3 4128 4620 4998 +3 4128 4998 4511 +3 4129 4512 4999 +3 4129 4999 4621 +3 4130 4400 4953 +3 4130 4953 4693 +3 4131 4694 4954 +3 4131 4954 4401 +3 4132 4254 5048 +3 4132 5048 4816 +3 4133 4817 5049 +3 4133 5049 4255 +3 4134 4650 5560 +3 4134 5560 5046 +3 4135 5047 5561 +3 4135 5561 4651 +3 4136 4889 5217 +3 4136 5217 4485 +3 4137 4486 5218 +3 4137 5218 4890 +3 4138 4530 4878 +3 4138 4878 4226 +3 4139 4227 4879 +3 4139 4879 4531 +3 4140 4170 4437 +3 4140 4433 4150 +3 4140 4437 4433 +3 4141 4151 4434 +3 4141 4434 4438 +3 4141 4438 4171 +3 4142 4208 4776 +3 4142 4776 4491 +3 4143 4492 4777 +3 4143 4777 4209 +3 4144 4767 4957 +3 4144 4957 4337 +3 4145 4338 4958 +3 4145 4958 4768 +3 4146 4270 5230 +3 4146 5230 5129 +3 4147 5130 5231 +3 4147 5231 4271 +3 4148 4544 5167 +3 4148 5167 4788 +3 4149 4789 5168 +3 4149 5168 4545 +3 4150 4433 4475 +3 4150 4475 4210 +3 4151 4211 4476 +3 4151 4476 4434 +3 4152 4507 4818 +3 4152 4818 4457 +3 4153 4458 4819 +3 4153 4819 4508 +3 4154 4272 4849 +3 4154 4849 4758 +3 4155 4759 4850 +3 4155 4850 4273 +3 4156 4511 5028 +3 4156 5028 4691 +3 4157 4692 5029 +3 4157 5029 4512 +3 4158 4382 4497 +3 4158 4497 4278 +3 4159 4279 4498 +3 4159 4498 4383 +3 4160 4261 5430 +3 4160 5430 5328 +3 4161 5329 5431 +3 4161 5431 4262 +3 4162 4266 4641 +3 4162 4641 4548 +3 4163 4549 4642 +3 4163 4642 4267 +3 4164 4689 5080 +3 4164 5080 4566 +3 4165 4567 5081 +3 4165 5081 4690 +3 4166 4268 4465 +3 4166 4465 4392 +3 4167 4393 4466 +3 4167 4466 4269 +3 4168 4308 4794 +3 4168 4794 4695 +3 4169 4696 4795 +3 4169 4795 4309 +3 4170 4280 4519 +3 4170 4519 4437 +3 4171 4438 4520 +3 4171 4520 4281 +3 4172 4417 5225 +3 4172 5225 5008 +3 4173 5009 5226 +3 4173 5226 4418 +3 4174 4312 4540 +3 4174 4412 4175 +3 4174 4540 4412 +3 4175 4412 4541 +3 4175 4541 4313 +3 4176 4634 4780 +3 4176 4780 4340 +3 4177 4341 4781 +3 4177 4781 4635 +3 4178 4288 4677 +3 4178 4591 4276 +3 4178 4677 4591 +3 4179 4277 4592 +3 4179 4592 4678 +3 4179 4678 4289 +3 4180 4431 4636 +3 4180 4636 4435 +3 4181 4436 4637 +3 4181 4637 4432 +3 4182 5094 5524 +3 4182 5524 4614 +3 4183 4615 5525 +3 4183 5525 5095 +3 4184 4864 5064 +3 4184 5064 4402 +3 4185 4403 5065 +3 4185 5065 4865 +3 4186 4455 4973 +3 4186 4973 4701 +3 4187 4702 4974 +3 4187 4974 4456 +3 4188 4380 4711 +3 4188 4711 4534 +3 4189 4535 4712 +3 4189 4712 4381 +3 4190 4675 5428 +3 4190 5428 4959 +3 4191 4960 5429 +3 4191 5429 4676 +3 4192 4374 5096 +3 4192 5096 4934 +3 4193 4935 5097 +3 4193 5097 4375 +3 4194 4521 4882 +3 4194 4882 4587 +3 4195 4588 4883 +3 4195 4883 4522 +3 4196 4773 5458 +3 4196 5458 4866 +3 4197 4867 5459 +3 4197 5459 4773 +3 4198 4362 4838 +3 4198 4838 4697 +3 4199 4698 4839 +3 4199 4839 4363 +3 4200 4410 4955 +3 4200 4955 4752 +3 4201 4753 4956 +3 4201 4956 4411 +3 4202 4943 5020 +3 4202 5020 4396 +3 4203 4397 5021 +3 4203 5021 4944 +3 4204 4593 4876 +3 4204 4876 4521 +3 4205 4522 4877 +3 4205 4877 4593 +3 4206 5032 5367 +3 4206 5367 4554 +3 4207 4555 5368 +3 4207 5368 5033 +3 4208 4324 4874 +3 4208 4874 4776 +3 4209 4777 4875 +3 4209 4875 4325 +3 4210 4475 4574 +3 4210 4574 4327 +3 4211 4328 4575 +3 4211 4575 4476 +3 4212 4245 4779 +3 4212 4778 4244 +3 4212 4779 4778 +3 4213 4249 4529 +3 4213 4528 4248 +3 4213 4529 4528 +3 4214 4489 5193 +3 4214 5193 4961 +3 4215 4962 5194 +3 4215 5194 4490 +3 4216 4525 5115 +3 4216 5115 4814 +3 4217 4815 5116 +3 4217 5116 4526 +3 4218 4538 5006 +3 4218 5006 4719 +3 4219 4720 5007 +3 4219 5007 4539 +3 4220 4556 5400 +3 4220 5400 5078 +3 4221 5079 5401 +3 4221 5401 4557 +3 4222 5127 5440 +3 4222 5440 4517 +3 4223 4518 5441 +3 4223 5441 5128 +3 4224 4834 5432 +3 4224 5432 4804 +3 4225 4805 5433 +3 4225 5433 4835 +3 4226 4878 4992 +3 4226 4992 4370 +3 4227 4371 4993 +3 4227 4993 4879 +3 4228 4668 4891 +3 4228 4891 4453 +3 4229 4454 4892 +3 4229 4892 4669 +3 4230 4589 5010 +3 4230 5010 4672 +3 4231 4672 5011 +3 4231 5011 4590 +3 4232 4427 5528 +3 4232 5279 4394 +3 4232 5528 5279 +3 4233 4395 5280 +3 4233 5280 5529 +3 4233 5529 4428 +3 4234 4666 5004 +3 4234 5004 4589 +3 4235 4590 5005 +3 4235 5005 4667 +3 4236 4820 5444 +3 4236 5444 4834 +3 4237 4835 5445 +3 4237 5445 4821 +3 4238 4899 5394 +3 4238 5394 4736 +3 4239 4737 5395 +3 4239 5395 4900 +3 4240 4965 5234 +3 4240 5234 4552 +3 4241 4553 5235 +3 4241 5235 4966 +3 4242 5036 5252 +3 4242 5252 4477 +3 4243 4478 5253 +3 4243 5253 5037 +3 4244 4778 4845 +3 4244 4845 4335 +3 4245 4336 4846 +3 4245 4846 4779 +3 4246 4662 4930 +3 4246 4930 4507 +3 4247 4508 4931 +3 4247 4931 4663 +3 4248 4528 4580 +3 4248 4580 4320 +3 4249 4321 4581 +3 4249 4581 4529 +3 4250 4606 5711 +3 4250 5711 5292 +3 4251 5293 5712 +3 4251 5712 4607 +3 4252 4322 5163 +3 4252 5135 4253 +3 4252 5163 5135 +3 4253 5135 5164 +3 4253 5164 4323 +3 4254 4445 5203 +3 4254 5203 5048 +3 4255 5049 5204 +3 4255 5204 4446 +3 4256 4550 5470 +3 4256 5470 5161 +3 4257 5162 5471 +3 4257 5471 4551 +3 4258 4742 4994 +3 4258 4994 4530 +3 4259 4531 4995 +3 4259 4995 4743 +3 4260 4286 4296 +3 4260 4287 4286 +3 4260 4296 4302 +3 4260 4297 4287 +3 4260 4302 4303 +3 4260 4303 4297 +3 4261 4425 5580 +3 4261 5580 5430 +3 4262 5431 5581 +3 4262 5581 4426 +3 4263 4762 5359 +3 4263 5359 4771 +3 4264 4772 5360 +3 4264 5360 4763 +3 4265 4963 5412 +3 4265 5412 4964 +3 4266 4435 4786 +3 4266 4786 4641 +3 4267 4642 4787 +3 4267 4787 4436 +3 4268 4441 4602 +3 4268 4602 4465 +3 4269 4466 4603 +3 4269 4603 4442 +3 4270 4578 5406 +3 4270 5406 5230 +3 4271 5231 5407 +3 4271 5407 4579 +3 4272 4463 5040 +3 4272 5040 4849 +3 4273 4850 5041 +3 4273 5041 4464 +3 4274 4398 5119 +3 4274 5119 4728 +3 4275 4729 5120 +3 4275 5120 4399 +3 4276 4591 4715 +3 4276 4715 4431 +3 4277 4432 4716 +3 4277 4716 4592 +3 4278 4497 4652 +3 4278 4652 4449 +3 4279 4450 4653 +3 4279 4653 4498 +3 4280 4449 4656 +3 4280 4656 4519 +3 4281 4520 4657 +3 4281 4657 4450 +3 4282 4847 5066 +3 4282 5066 4515 +3 4283 4516 5067 +3 4283 5067 4848 +3 4284 4576 5371 +3 4284 5371 5098 +3 4285 5099 5372 +3 4285 5372 4577 +3 4286 4287 4326 +3 4286 4326 4355 +3 4286 4342 4296 +3 4286 4355 4342 +3 4287 4297 4343 +3 4287 4343 4356 +3 4287 4356 4326 +3 4288 4423 4798 +3 4288 4798 4677 +3 4289 4678 4799 +3 4289 4799 4424 +3 4290 4542 4843 +3 4290 4843 4600 +3 4291 4601 4844 +3 4291 4844 4543 +3 4292 5038 5436 +3 4292 5436 4683 +3 4293 4684 5437 +3 4293 5437 5039 +3 4294 4568 4903 +3 4294 4903 4643 +3 4295 4643 4904 +3 4295 4904 4569 +3 4296 4342 4372 +3 4296 4346 4302 +3 4296 4372 4346 +3 4297 4303 4347 +3 4297 4347 4373 +3 4297 4373 4343 +3 4298 4532 4754 +3 4298 4754 4536 +3 4299 4537 4755 +3 4299 4755 4533 +3 4300 4622 4856 +3 4300 4856 4542 +3 4301 4543 4857 +3 4301 4857 4623 +3 4302 4346 4384 +3 4302 4348 4303 +3 4302 4384 4348 +3 4303 4348 4385 +3 4303 4385 4347 +3 4304 4644 4893 +3 4304 4893 4568 +3 4305 4569 4894 +3 4305 4894 4645 +3 4306 4457 4832 +3 4306 4832 4915 +3 4306 4915 4376 +3 4307 4377 4916 +3 4307 4833 4458 +3 4307 4916 4833 +3 4308 4501 4980 +3 4308 4980 4794 +3 4309 4795 4981 +3 4309 4981 4502 +3 4310 4986 5630 +3 4310 5630 4928 +3 4311 4929 5631 +3 4311 5631 4987 +3 4312 4493 4709 +3 4312 4709 4540 +3 4313 4541 4710 +3 4313 4710 4494 +3 4314 4945 5635 +3 4314 5635 4982 +3 4315 4983 5636 +3 4315 5636 4946 +3 4316 4828 5123 +3 4316 5123 4620 +3 4317 4621 5124 +3 4317 5124 4829 +3 4318 4503 5408 +3 4318 5207 4386 +3 4318 5408 5207 +3 4319 4387 5208 +3 4319 5208 5409 +3 4319 5409 4504 +3 4320 4580 4679 +3 4320 4679 4441 +3 4321 4442 4680 +3 4321 4680 4581 +3 4322 4415 5232 +3 4322 5232 5163 +3 4323 5164 5233 +3 4323 5233 4416 +3 4324 4487 5016 +3 4324 5016 4874 +3 4325 4875 5017 +3 4325 5017 4488 +3 4326 4356 4422 +3 4326 4421 4355 +3 4326 4422 4421 +3 4327 4574 4725 +3 4327 4725 4493 +3 4328 4494 4726 +3 4328 4726 4575 +3 4329 4693 5310 +3 4329 5310 4971 +3 4330 4972 5311 +3 4330 5311 4694 +3 4331 4928 5653 +3 4331 5653 4945 +3 4332 4946 5654 +3 4332 5654 4929 +3 4333 4926 5339 +3 4333 5339 4762 +3 4334 4763 5340 +3 4334 5340 4927 +3 4335 4845 4976 +3 4335 4976 4469 +3 4336 4470 4977 +3 4336 4977 4846 +3 4337 4957 5171 +3 4337 5171 4594 +3 4338 4595 5172 +3 4338 5172 4958 +3 4339 4736 5303 +3 4339 5303 4737 +3 4340 4780 4895 +3 4340 4895 4461 +3 4341 4462 4896 +3 4341 4896 4781 +3 4342 4355 4447 +3 4342 4447 4459 +3 4342 4459 4372 +3 4343 4373 4460 +3 4343 4448 4356 +3 4343 4460 4448 +3 4344 4413 4826 +3 4344 4826 4840 +3 4344 4840 4388 +3 4345 4389 4841 +3 4345 4827 4414 +3 4345 4841 4827 +3 4346 4372 4471 +3 4346 4471 4481 +3 4346 4481 4384 +3 4347 4385 4482 +3 4347 4472 4373 +3 4347 4482 4472 +3 4348 4384 4483 +3 4348 4483 4484 +3 4348 4484 4385 +3 4349 4699 5606 +3 4349 5606 5223 +3 4350 5224 5607 +3 4350 5607 4700 +3 4351 4792 5138 +3 4351 5138 4774 +3 4352 4775 5139 +3 4352 5139 4793 +3 4353 5125 5755 +3 4353 5755 4963 +3 4354 4964 5756 +3 4354 5756 5126 +3 4355 4421 4479 +3 4355 4479 4447 +3 4356 4448 4480 +3 4356 4480 4422 +3 4357 4866 5639 +3 4357 5639 5117 +3 4358 5118 5640 +3 4358 5640 4867 +3 4359 4771 5347 +3 4359 5347 4967 +3 4360 4968 5348 +3 4360 5348 4772 +3 4361 4533 4842 +3 4361 4842 4532 +3 4362 4587 5050 +3 4362 5050 4838 +3 4363 4839 5051 +3 4363 5051 4588 +3 4364 4951 5283 +3 4364 5283 4742 +3 4365 4743 5284 +3 4365 5284 4952 +3 4366 5026 5318 +3 4366 5318 4689 +3 4367 4690 5319 +3 4367 5319 5027 +3 4368 4730 5056 +3 4368 5056 4746 +3 4369 4747 5057 +3 4369 5057 4731 +3 4370 4992 5154 +3 4370 5154 4570 +3 4371 4571 5155 +3 4371 5155 4993 +3 4372 4459 4523 +3 4372 4523 4471 +3 4373 4472 4524 +3 4373 4524 4460 +3 4374 4618 5312 +3 4374 5312 5096 +3 4375 5097 5313 +3 4375 5313 4619 +3 4376 4915 5018 +3 4376 5018 4505 +3 4377 4506 5019 +3 4377 5019 4916 +3 4378 4804 5500 +3 4378 5500 5072 +3 4379 5073 5501 +3 4379 5501 4805 +3 4380 4536 4854 +3 4380 4854 4711 +3 4381 4712 4855 +3 4381 4855 4537 +3 4382 4392 4664 +3 4382 4664 4764 +3 4382 4764 4497 +3 4383 4498 4765 +3 4383 4665 4393 +3 4383 4765 4665 +3 4384 4481 4546 +3 4384 4546 4483 +3 4385 4484 4547 +3 4385 4547 4482 +3 4386 5207 5369 +3 4386 5369 4562 +3 4387 4563 5370 +3 4387 5370 5208 +3 4388 4840 4932 +3 4388 4932 4473 +3 4389 4474 4933 +3 4389 4933 4841 +3 4390 5111 5488 +3 4390 5488 4756 +3 4391 4757 5489 +3 4391 5489 5112 +3 4392 4465 4723 +3 4392 4723 4664 +3 4393 4665 4724 +3 4393 4724 4466 +3 4394 5279 5504 +3 4394 5504 4612 +3 4395 4613 5505 +3 4395 5505 5280 +3 4396 5020 5244 +3 4396 5244 4628 +3 4397 4629 5245 +3 4397 5245 5021 +3 4398 4572 5264 +3 4398 5264 5119 +3 4399 5120 5265 +3 4399 5265 4573 +3 4400 4728 5238 +3 4400 5238 4953 +3 4401 4954 5239 +3 4401 5239 4729 +3 4402 5064 5299 +3 4402 5299 4666 +3 4403 4667 5300 +3 4403 5300 5065 +3 4404 4836 5316 +3 4404 5316 4901 +3 4405 4902 5317 +3 4405 5317 4837 +3 4406 4810 5466 +3 4406 5466 5062 +3 4407 5063 5467 +3 4407 5467 4811 +3 4408 4923 5285 +3 4408 5285 4810 +3 4409 4811 5286 +3 4409 5286 4923 +3 4410 4691 5177 +3 4410 5177 4955 +3 4411 4956 5178 +3 4411 5178 4692 +3 4412 4540 4766 +3 4412 4766 4541 +3 4413 4534 4949 +3 4413 4949 4826 +3 4414 4827 4950 +3 4414 4950 4535 +3 4415 4658 5365 +3 4415 5365 5232 +3 4416 5233 5366 +3 4416 5366 4659 +3 4417 4717 5534 +3 4417 5534 5225 +3 4418 5226 5535 +3 4418 5535 4718 +3 4419 5082 5492 +3 4419 5492 4820 +3 4420 4821 5493 +3 4420 5493 5083 +3 4421 4422 4527 +3 4421 4527 4564 +3 4421 4564 4479 +3 4422 4480 4565 +3 4422 4565 4527 +3 4423 4600 4984 +3 4423 4984 4798 +3 4424 4799 4985 +3 4424 4985 4601 +3 4425 4796 5781 +3 4425 5781 5580 +3 4426 5581 5782 +3 4426 5782 4797 +3 4427 4660 5776 +3 4427 5776 5528 +3 4428 5529 5777 +3 4428 5777 4661 +3 4429 4947 5332 +3 4429 5332 4836 +3 4430 4837 5333 +3 4430 5333 4948 +3 4431 4715 4907 +3 4431 4907 4636 +3 4432 4637 4908 +3 4432 4908 4716 +3 4433 4437 4760 +3 4433 4760 4790 +3 4433 4790 4475 +3 4434 4476 4791 +3 4434 4761 4438 +3 4434 4791 4761 +3 4435 4636 4990 +3 4435 4990 4786 +3 4436 4787 4991 +3 4436 4991 4637 +3 4437 4519 4808 +3 4437 4808 4760 +3 4438 4761 4809 +3 4438 4809 4520 +3 4439 5150 5897 +3 4439 5897 5133 +3 4440 5134 5898 +3 4440 5898 5151 +3 4441 4679 4806 +3 4441 4806 4602 +3 4442 4603 4807 +3 4442 4807 4680 +3 4443 5277 5568 +3 4443 5568 4707 +3 4444 4708 5569 +3 4444 5569 5278 +3 4445 4705 5460 +3 4445 5460 5203 +3 4446 5204 5461 +3 4446 5461 4706 +3 4447 4479 4598 +3 4447 4596 4459 +3 4447 4598 4596 +3 4448 4460 4597 +3 4448 4597 4599 +3 4448 4599 4480 +3 4449 4652 4862 +3 4449 4862 4656 +3 4450 4657 4863 +3 4450 4863 4653 +3 4451 5136 5917 +3 4451 5917 5150 +3 4452 5151 5918 +3 4452 5918 5137 +3 4453 4891 5142 +3 4453 5142 4730 +3 4454 4731 5143 +3 4454 5143 4892 +3 4455 4774 5262 +3 4455 5262 4973 +3 4456 4974 5263 +3 4456 5263 4775 +3 4457 4818 5169 +3 4457 5169 4832 +3 4458 4833 5170 +3 4458 5170 4819 +3 4459 4596 4638 +3 4459 4638 4523 +3 4460 4524 4639 +3 4460 4639 4597 +3 4461 4895 5068 +3 4461 5068 4644 +3 4462 4645 5069 +3 4462 5069 4896 +3 4463 4719 5272 +3 4463 5272 5040 +3 4464 5041 5273 +3 4464 5273 4720 +3 4465 4602 4830 +3 4465 4830 4723 +3 4466 4724 4831 +3 4466 4831 4603 +3 4467 4942 5743 +3 4467 5743 5246 +3 4468 5247 5744 +3 4468 5744 4942 +3 4469 4976 5146 +3 4469 5146 4662 +3 4470 4663 5147 +3 4470 5147 4977 +3 4471 4523 4654 +3 4471 4624 4481 +3 4471 4654 4624 +3 4472 4482 4625 +3 4472 4625 4655 +3 4472 4655 4524 +3 4473 4932 5060 +3 4473 5060 4622 +3 4474 4623 5061 +3 4474 5061 4933 +3 4475 4790 4880 +3 4475 4880 4574 +3 4476 4575 4881 +3 4476 4881 4791 +3 4477 5252 5562 +3 4477 5562 4648 +3 4478 4649 5563 +3 4478 5563 5253 +3 4479 4564 4646 +3 4479 4646 4598 +3 4480 4599 4647 +3 4480 4647 4565 +3 4481 4624 4673 +3 4481 4673 4546 +3 4482 4547 4674 +3 4482 4674 4625 +3 4483 4546 4681 +3 4483 4640 4484 +3 4483 4681 4640 +3 4484 4640 4682 +3 4484 4682 4547 +3 4485 5217 5679 +3 4485 5679 4899 +3 4486 4900 5680 +3 4486 5680 5218 +3 4487 4701 5191 +3 4487 5191 5016 +3 4488 5017 5192 +3 4488 5192 4702 +3 4489 4788 5550 +3 4489 5550 5193 +3 4490 5194 5551 +3 4490 5551 4789 +3 4491 4776 5158 +3 4491 5158 4917 +3 4492 4918 5159 +3 4492 5159 4777 +3 4493 4725 4938 +3 4493 4938 4709 +3 4494 4710 4939 +3 4494 4939 4726 +3 4495 4548 4988 +3 4495 4975 4496 +3 4495 4988 4975 +3 4496 4975 4989 +3 4496 4989 4549 +3 4497 4764 4921 +3 4497 4921 4652 +3 4498 4653 4922 +3 4498 4922 4765 +3 4499 5248 5980 +3 4499 5980 5136 +3 4500 5137 5981 +3 4500 5981 5249 +3 4501 4746 5175 +3 4501 5175 4980 +3 4502 4981 5176 +3 4502 5176 4747 +3 4503 4734 5655 +3 4503 5655 5408 +3 4504 5409 5656 +3 4504 5656 4735 +3 4505 5018 5165 +3 4505 5165 4668 +3 4506 4669 5166 +3 4506 5166 5019 +3 4507 4930 5211 +3 4507 5211 4818 +3 4508 4819 5212 +3 4508 5212 4931 +3 4509 5140 5695 +3 4509 5695 4740 +3 4510 4741 5696 +3 4510 5696 5141 +3 4511 4998 5446 +3 4511 5446 5028 +3 4512 5029 5447 +3 4512 5447 4999 +3 4513 5133 5988 +3 4513 5988 5289 +3 4514 5290 5989 +3 4514 5989 5134 +3 4515 5066 5322 +3 4515 5322 4792 +3 4516 4793 5323 +3 4516 5323 5067 +3 4517 5440 5800 +3 4517 5800 4738 +3 4518 4739 5801 +3 4518 5801 5441 +3 4519 4656 4940 +3 4519 4940 4808 +3 4520 4809 4941 +3 4520 4941 4657 +3 4521 4876 5215 +3 4521 5215 4882 +3 4522 4883 5216 +3 4522 5216 4877 +3 4523 4638 4732 +3 4523 4732 4654 +3 4524 4655 4733 +3 4524 4733 4639 +3 4525 4901 5490 +3 4525 5490 5115 +3 4526 5116 5491 +3 4526 5491 4902 +3 4527 4565 4688 +3 4527 4687 4564 +3 4527 4688 4687 +3 4528 4529 4886 +3 4528 4886 4919 +3 4528 4919 4580 +3 4529 4581 4920 +3 4529 4920 4886 +3 4530 4994 5324 +3 4530 5324 4878 +3 4531 4879 5325 +3 4531 5325 4995 +3 4532 4842 5042 +3 4532 5042 4754 +3 4533 4755 5043 +3 4533 5043 4842 +3 4534 4711 5092 +3 4534 5092 4949 +3 4535 4950 5093 +3 4535 5093 4712 +3 4536 4754 5052 +3 4536 5052 4854 +3 4537 4855 5053 +3 4537 5053 4755 +3 4538 4917 5373 +3 4538 5373 5006 +3 4539 5007 5374 +3 4539 5374 4918 +3 4540 4709 4924 +3 4540 4924 4766 +3 4541 4766 4925 +3 4541 4925 4710 +3 4542 4856 5113 +3 4542 5113 4843 +3 4543 4844 5114 +3 4543 5114 4857 +3 4544 5008 5691 +3 4544 5691 5167 +3 4545 5168 5692 +3 4545 5692 5009 +3 4546 4673 4769 +3 4546 4769 4681 +3 4547 4682 4770 +3 4547 4770 4674 +3 4548 4641 5084 +3 4548 5084 4988 +3 4549 4989 5085 +3 4549 5085 4642 +3 4550 4897 5845 +3 4550 5845 5470 +3 4551 5471 5846 +3 4551 5846 4898 +3 4552 5234 5604 +3 4552 5604 4926 +3 4553 4927 5605 +3 4553 5605 5235 +3 4554 5367 5798 +3 4554 5798 4986 +3 4555 4987 5799 +3 4555 5799 5368 +3 4556 4959 5817 +3 4556 5817 5400 +3 4557 5401 5818 +3 4557 5818 4960 +3 4558 4616 5256 +3 4558 5221 4560 +3 4558 5256 5221 +3 4559 4561 5222 +3 4559 5222 5257 +3 4559 5257 4617 +3 4560 5221 5420 +3 4560 5420 4744 +3 4561 4745 5421 +3 4561 5421 5222 +3 4562 5369 5612 +3 4562 5612 4784 +3 4563 4785 5613 +3 4563 5613 5370 +3 4564 4687 4750 +3 4564 4750 4646 +3 4565 4647 4751 +3 4565 4751 4688 +3 4566 5080 5556 +3 4566 5556 4713 +3 4567 4714 5557 +3 4567 5557 5081 +3 4568 4893 5187 +3 4568 5187 4903 +3 4569 4904 5188 +3 4569 5188 4894 +3 4570 5154 5418 +3 4570 5418 4828 +3 4571 4829 5419 +3 4571 5419 5155 +3 4572 4814 5518 +3 4572 5518 5264 +3 4573 5265 5519 +3 4573 5519 4815 +3 4574 4880 5012 +3 4574 5012 4725 +3 4575 4726 5013 +3 4575 5013 4881 +3 4576 4982 5757 +3 4576 5757 5371 +3 4577 5372 5758 +3 4577 5758 4983 +3 4578 4961 5803 +3 4578 5803 5406 +3 4579 5407 5804 +3 4579 5804 4962 +3 4580 4919 4978 +3 4580 4978 4679 +3 4581 4680 4979 +3 4581 4979 4920 +3 4582 4611 5629 +3 4582 5628 4610 +3 4582 5629 5628 +3 4583 4604 5183 +3 4583 5179 4608 +3 4583 5183 5179 +3 4584 4609 5180 +3 4584 5180 5184 +3 4584 5184 4605 +3 4585 4586 5802 +3 4585 5802 5835 +3 4585 5835 4626 +3 4586 4627 5836 +3 4586 5836 5802 +3 4587 4882 5305 +3 4587 5305 5050 +3 4588 5051 5306 +3 4588 5306 4883 +3 4589 5004 5415 +3 4589 5415 5010 +3 4590 5011 5416 +3 4590 5416 5005 +3 4591 4677 5121 +3 4591 5058 4715 +3 4591 5121 5058 +3 4592 4716 5059 +3 4592 5059 5122 +3 4592 5122 4678 +3 4593 4877 5307 +3 4593 5307 4876 +3 4594 5171 5520 +3 4594 5520 4947 +3 4595 4948 5521 +3 4595 5521 5172 +3 4596 4598 4782 +3 4596 4782 4800 +3 4596 4800 4638 +3 4597 4639 4801 +3 4597 4783 4599 +3 4597 4801 4783 +3 4598 4646 4822 +3 4598 4822 4782 +3 4599 4783 4823 +3 4599 4823 4647 +3 4600 4843 5189 +3 4600 5189 4984 +3 4601 4985 5190 +3 4601 5190 4844 +3 4602 4806 5002 +3 4602 5002 4830 +3 4603 4831 5003 +3 4603 5003 4807 +3 4604 4697 5377 +3 4604 5377 5183 +3 4605 5184 5378 +3 4605 5378 4698 +3 4606 5046 6130 +3 4606 6130 5711 +3 4607 5712 6131 +3 4607 6131 5047 +3 4608 5179 5250 +3 4608 5250 4703 +3 4609 4704 5251 +3 4609 5251 5180 +3 4610 5628 5713 +3 4610 5713 4685 +3 4611 4686 5714 +3 4611 5714 5629 +3 4612 5504 5794 +3 4612 5794 4913 +3 4613 4914 5795 +3 4613 5795 5505 +3 4614 5524 6053 +3 4614 6053 5125 +3 4615 5126 6054 +3 4615 6054 5525 +3 4616 4752 5361 +3 4616 5361 5256 +3 4617 5257 5362 +3 4617 5362 4753 +3 4618 4967 5622 +3 4618 5622 5312 +3 4619 5313 5623 +3 4619 5623 4968 +3 4620 5123 5508 +3 4620 5508 4998 +3 4621 4999 5509 +3 4621 5509 5124 +3 4622 5060 5236 +3 4622 5236 4856 +3 4623 4857 5237 +3 4623 5237 5061 +3 4624 4654 4812 +3 4624 4812 4824 +3 4624 4824 4673 +3 4625 4674 4825 +3 4625 4813 4655 +3 4625 4825 4813 +3 4626 5835 5913 +3 4626 5913 4748 +3 4627 4749 5914 +3 4627 5914 5836 +3 4628 5244 5572 +3 4628 5572 4951 +3 4629 4952 5573 +3 4629 5573 5245 +3 4630 4816 5614 +3 4630 5424 4670 +3 4630 5614 5424 +3 4631 4671 5425 +3 4631 5425 5615 +3 4631 5615 4817 +3 4632 4695 5295 +3 4632 5258 4634 +3 4632 5295 5258 +3 4633 4635 5259 +3 4633 5259 5296 +3 4633 5296 4696 +3 4634 5258 5287 +3 4634 5287 4780 +3 4635 4781 5288 +3 4635 5288 5259 +3 4636 4907 5242 +3 4636 5242 4990 +3 4637 4991 5243 +3 4637 5243 4908 +3 4638 4800 4870 +3 4638 4870 4732 +3 4639 4733 4871 +3 4639 4871 4801 +3 4640 4681 4858 +3 4640 4858 4859 +3 4640 4859 4682 +3 4641 4786 5201 +3 4641 5201 5084 +3 4642 5085 5202 +3 4642 5202 4787 +3 4643 4903 5274 +3 4643 5274 4904 +3 4644 5068 5270 +3 4644 5270 4893 +3 4645 4894 5271 +3 4645 5271 5069 +3 4646 4750 4909 +3 4646 4909 4822 +3 4647 4823 4910 +3 4647 4910 4751 +3 4648 5562 5785 +3 4648 5785 4889 +3 4649 4890 5786 +3 4649 5786 5563 +3 4650 5246 6202 +3 4650 6202 5560 +3 4651 5561 6203 +3 4651 6203 5247 +3 4652 4921 5102 +3 4652 5102 4862 +3 4653 4863 5103 +3 4653 5103 4922 +3 4654 4732 4868 +3 4654 4868 4812 +3 4655 4813 4869 +3 4655 4869 4733 +3 4656 4862 5108 +3 4656 5108 4940 +3 4657 4941 5109 +3 4657 5109 4863 +3 4658 4971 5715 +3 4658 5715 5365 +3 4659 5366 5716 +3 4659 5716 4972 +3 4660 4969 6109 +3 4660 6109 5776 +3 4661 5777 6110 +3 4661 6110 4970 +3 4662 5146 5410 +3 4662 5410 4930 +3 4663 4931 5411 +3 4663 5411 5147 +3 4664 4723 5000 +3 4664 5000 5100 +3 4664 5100 4764 +3 4665 4765 5101 +3 4665 5001 4724 +3 4665 5101 5001 +3 4666 5299 5677 +3 4666 5677 5004 +3 4667 5005 5678 +3 4667 5678 5300 +3 4668 5165 5389 +3 4668 5389 4891 +3 4669 4892 5390 +3 4669 5390 5166 +3 4670 5424 5496 +3 4670 5496 4767 +3 4671 4768 5497 +3 4671 5497 5425 +3 4672 5010 5516 +3 4672 5516 5011 +3 4673 4824 4887 +3 4673 4887 4769 +3 4674 4770 4888 +3 4674 4888 4825 +3 4675 5161 5960 +3 4675 5960 5428 +3 4676 5429 5961 +3 4676 5961 5162 +3 4677 4798 5240 +3 4677 5240 5121 +3 4678 5122 5241 +3 4678 5241 4799 +3 4679 4978 5086 +3 4679 5086 4806 +3 4680 4807 5087 +3 4680 5087 4979 +3 4681 4769 4936 +3 4681 4936 4858 +3 4682 4859 4937 +3 4682 4937 4770 +3 4683 5436 5909 +3 4683 5909 5140 +3 4684 5141 5910 +3 4684 5910 5437 +3 4685 5713 5792 +3 4685 5792 4802 +3 4686 4803 5793 +3 4686 5793 5714 +3 4687 4688 4851 +3 4687 4851 4884 +3 4687 4884 4750 +3 4688 4751 4885 +3 4688 4885 4851 +3 4689 5318 5735 +3 4689 5735 5080 +3 4690 5081 5736 +3 4690 5736 5319 +3 4691 5028 5540 +3 4691 5540 5177 +3 4692 5178 5541 +3 4692 5541 5029 +3 4693 4953 5600 +3 4693 5600 5310 +3 4694 5311 5601 +3 4694 5601 4954 +3 4695 4794 5391 +3 4695 5391 5295 +3 4696 5296 5392 +3 4696 5392 4795 +3 4697 4838 5512 +3 4697 5512 5377 +3 4698 5378 5513 +3 4698 5513 4839 +3 4699 5117 6055 +3 4699 6055 5606 +3 4700 5607 6056 +3 4700 6056 5118 +3 4701 4973 5480 +3 4701 5480 5191 +3 4702 5192 5481 +3 4702 5481 4974 +3 4703 5250 5387 +3 4703 5387 4847 +3 4704 4848 5388 +3 4704 5388 5251 +3 4705 5062 5823 +3 4705 5823 5460 +3 4706 5461 5824 +3 4706 5824 5063 +3 4707 5568 5887 +3 4707 5887 5038 +3 4708 5039 5888 +3 4708 5888 5569 +3 4709 4938 5104 +3 4709 5104 4924 +3 4710 4925 5105 +3 4710 5105 4939 +3 4711 4854 5197 +3 4711 5197 5092 +3 4712 5093 5198 +3 4712 5198 4855 +3 4713 5556 5789 +3 4713 5789 4965 +3 4714 4966 5790 +3 4714 5790 5557 +3 4715 5058 5195 +3 4715 5195 4907 +3 4716 4908 5196 +3 4716 5196 5059 +3 4717 5072 5883 +3 4717 5883 5534 +3 4718 5535 5884 +3 4718 5884 5073 +3 4719 5006 5590 +3 4719 5590 5272 +3 4720 5273 5591 +3 4720 5591 5007 +3 4721 4872 5772 +3 4721 5772 6020 +3 4721 6020 4911 +3 4722 4912 6021 +3 4722 5773 4873 +3 4722 6021 5773 +3 4723 4830 5090 +3 4723 5090 5000 +3 4724 5001 5091 +3 4724 5091 4831 +3 4725 5012 5173 +3 4725 5173 4938 +3 4726 4939 5174 +3 4726 5174 5013 +3 4727 4758 5510 +3 4727 5510 5511 +3 4727 5511 4759 +3 4728 5119 5647 +3 4728 5647 5238 +3 4729 5239 5648 +3 4729 5648 5120 +3 4730 5142 5482 +3 4730 5482 5056 +3 4731 5057 5483 +3 4731 5483 5143 +3 4732 4870 4996 +3 4732 4996 4868 +3 4733 4869 4997 +3 4733 4997 4871 +3 4734 5014 5962 +3 4734 5962 5655 +3 4735 5656 5963 +3 4735 5963 5015 +3 4736 5394 6010 +3 4736 6010 5303 +3 4737 5303 6011 +3 4737 6011 5395 +3 4738 5800 6170 +3 4738 6170 5094 +3 4739 5095 6171 +3 4739 6171 5801 +3 4740 5695 5972 +3 4740 5972 5032 +3 4741 5033 5973 +3 4741 5973 5696 +3 4742 5283 5544 +3 4742 5544 4994 +3 4743 4995 5545 +3 4743 5545 5284 +3 4744 5420 5663 +3 4744 5663 4864 +3 4745 4865 5664 +3 4745 5664 5421 +3 4746 5056 5502 +3 4746 5502 5175 +3 4747 5176 5503 +3 4747 5503 5057 +3 4748 5913 6068 +3 4748 6068 4905 +3 4749 4906 6069 +3 4749 6069 5914 +3 4750 4884 5030 +3 4750 5030 4909 +3 4751 4910 5031 +3 4751 5031 4885 +3 4752 4955 5566 +3 4752 5566 5361 +3 4753 5362 5567 +3 4753 5567 4956 +3 4754 5042 5301 +3 4754 5301 5052 +3 4755 5053 5302 +3 4755 5302 5043 +3 4756 5488 5761 +3 4756 5761 5026 +3 4757 5027 5762 +3 4757 5762 5489 +3 4758 4849 5586 +3 4758 5586 5510 +3 4759 5511 5587 +3 4759 5587 4850 +3 4760 4808 5185 +3 4760 5144 4790 +3 4760 5185 5144 +3 4761 4791 5145 +3 4761 5145 5186 +3 4761 5186 4809 +3 4762 5339 5984 +3 4762 5984 5359 +3 4763 5360 5985 +3 4763 5985 5340 +3 4764 5100 5213 +3 4764 5213 4921 +3 4765 4922 5214 +3 4765 5214 5101 +3 4766 4924 5160 +3 4766 5160 4925 +3 4767 5496 5693 +3 4767 5693 4957 +3 4768 4958 5694 +3 4768 5694 5497 +3 4769 4887 5022 +3 4769 5022 4936 +3 4770 4937 5023 +3 4770 5023 4888 +3 4771 5359 5992 +3 4771 5992 5347 +3 4772 5348 5993 +3 4772 5993 5360 +3 4773 5459 5937 +3 4773 5937 5458 +3 4774 5138 5665 +3 4774 5665 5262 +3 4775 5263 5666 +3 4775 5666 5139 +3 4776 4874 5526 +3 4776 5526 5158 +3 4777 5159 5527 +3 4777 5527 4875 +3 4778 4779 5417 +3 4778 5417 5452 +3 4778 5452 4845 +3 4779 4846 5453 +3 4779 5453 5417 +3 4780 5287 5383 +3 4780 5383 4895 +3 4781 4896 5384 +3 4781 5384 5288 +3 4782 4822 5044 +3 4782 5034 4800 +3 4782 5044 5034 +3 4783 4801 5035 +3 4783 5035 5045 +3 4783 5045 4823 +3 4784 5612 5893 +3 4784 5893 5082 +3 4785 5083 5894 +3 4785 5894 5613 +3 4786 4990 5413 +3 4786 5413 5201 +3 4787 5202 5414 +3 4787 5414 4991 +3 4788 5167 5950 +3 4788 5950 5550 +3 4789 5551 5951 +3 4789 5951 5168 +3 4790 5144 5209 +3 4790 5209 4880 +3 4791 4881 5210 +3 4791 5210 5145 +3 4792 5322 5709 +3 4792 5709 5138 +3 4793 5139 5710 +3 4793 5710 5323 +3 4794 4980 5546 +3 4794 5546 5391 +3 4795 5392 5547 +3 4795 5547 4981 +3 4796 5078 6066 +3 4796 6066 5781 +3 4797 5782 6067 +3 4797 6067 5079 +3 4798 4984 5426 +3 4798 5426 5240 +3 4799 5241 5427 +3 4799 5427 4985 +3 4800 5034 5074 +3 4800 5074 4870 +3 4801 4871 5075 +3 4801 5075 5035 +3 4802 5792 5964 +3 4802 5964 5111 +3 4803 5112 5965 +3 4803 5965 5793 +3 4804 5432 6144 +3 4804 6144 5500 +3 4805 5501 6145 +3 4805 6145 5433 +3 4806 5086 5227 +3 4806 5227 5002 +3 4807 5003 5228 +3 4807 5228 5087 +3 4808 4940 5281 +3 4808 5281 5185 +3 4809 5186 5282 +3 4809 5282 4941 +3 4810 5285 5986 +3 4810 5986 5466 +3 4811 5467 5987 +3 4811 5987 5286 +3 4812 4868 5054 +3 4812 5024 4824 +3 4812 5054 5024 +3 4813 4825 5025 +3 4813 5025 5055 +3 4813 5055 4869 +3 4814 5115 5839 +3 4814 5839 5518 +3 4815 5519 5840 +3 4815 5840 5116 +3 4816 5048 5849 +3 4816 5849 5614 +3 4817 5615 5850 +3 4817 5850 5049 +3 4818 5211 5610 +3 4818 5610 5169 +3 4819 5170 5611 +3 4819 5611 5212 +3 4820 5492 6152 +3 4820 6152 5444 +3 4821 5445 6153 +3 4821 6153 5493 +3 4822 4909 5106 +3 4822 5106 5044 +3 4823 5045 5107 +3 4823 5107 4910 +3 4824 5024 5070 +3 4824 5070 4887 +3 4825 4888 5071 +3 4825 5071 5025 +3 4826 4949 5385 +3 4826 5381 4840 +3 4826 5385 5381 +3 4827 4841 5382 +3 4827 5382 5386 +3 4827 5386 4950 +3 4828 5418 5739 +3 4828 5739 5123 +3 4829 5124 5740 +3 4829 5740 5419 +3 4830 5002 5219 +3 4830 5219 5090 +3 4831 5091 5220 +3 4831 5220 5003 +3 4832 5169 5486 +3 4832 5486 4915 +3 4833 4916 5487 +3 4833 5487 5170 +3 4834 5444 6168 +3 4834 6168 5432 +3 4835 5433 6169 +3 4835 6169 5445 +3 4836 5332 5958 +3 4836 5958 5316 +3 4837 5317 5959 +3 4837 5959 5333 +3 4838 5050 5719 +3 4838 5719 5512 +3 4839 5513 5720 +3 4839 5720 5051 +3 4840 5381 5448 +3 4840 5448 4932 +3 4841 4933 5449 +3 4841 5449 5382 +3 4842 5043 5393 +3 4842 5393 5042 +3 4843 5113 5484 +3 4843 5484 5189 +3 4844 5190 5485 +3 4844 5485 5114 +3 4845 5452 5548 +3 4845 5548 4976 +3 4846 4977 5549 +3 4846 5549 5453 +3 4847 5387 5596 +3 4847 5596 5066 +3 4848 5067 5597 +3 4848 5597 5388 +3 4849 5040 5699 +3 4849 5699 5586 +3 4850 5587 5700 +3 4850 5700 5041 +3 4851 4885 5077 +3 4851 5076 4884 +3 4851 5077 5076 +3 4852 4934 5770 +3 4852 5770 5966 +3 4852 5966 5036 +3 4853 5037 5967 +3 4853 5771 4935 +3 4853 5967 5771 +3 4854 5052 5396 +3 4854 5396 5197 +3 4855 5198 5397 +3 4855 5397 5053 +3 4856 5236 5498 +3 4856 5498 5113 +3 4857 5114 5499 +3 4857 5499 5237 +3 4858 4936 5131 +3 4858 5110 4859 +3 4858 5131 5110 +3 4859 5110 5132 +3 4859 5132 4937 +3 4860 4861 5765 +3 4860 5765 5796 +3 4860 5796 4943 +3 4861 4944 5797 +3 4861 5797 5765 +3 4862 5102 5349 +3 4862 5349 5108 +3 4863 5109 5350 +3 4863 5350 5103 +3 4864 5663 5847 +3 4864 5847 5064 +3 4865 5065 5848 +3 4865 5848 5664 +3 4866 5458 6263 +3 4866 6263 5639 +3 4867 5640 6264 +3 4867 6264 5459 +3 4868 4996 5152 +3 4868 5152 5054 +3 4869 5055 5153 +3 4869 5153 4997 +3 4870 5074 5156 +3 4870 5156 4996 +3 4871 4997 5157 +3 4871 5157 5075 +3 4872 5098 5998 +3 4872 5998 5772 +3 4873 5773 5999 +3 4873 5999 5099 +3 4874 5016 5657 +3 4874 5657 5526 +3 4875 5527 5658 +3 4875 5658 5017 +3 4876 5307 5689 +3 4876 5689 5215 +3 4877 5216 5690 +3 4877 5690 5307 +3 4878 5324 5747 +3 4878 5747 4992 +3 4879 4993 5748 +3 4879 5748 5325 +3 4880 5209 5343 +3 4880 5343 5012 +3 4881 5013 5344 +3 4881 5344 5210 +3 4882 5215 5669 +3 4882 5669 5305 +3 4883 5306 5670 +3 4883 5670 5216 +3 4884 5076 5181 +3 4884 5181 5030 +3 4885 5031 5182 +3 4885 5182 5077 +3 4886 4920 5298 +3 4886 5297 4919 +3 4886 5298 5297 +3 4887 5070 5148 +3 4887 5148 5022 +3 4888 5023 5149 +3 4888 5149 5071 +3 4889 5785 6148 +3 4889 6148 5217 +3 4890 5218 6149 +3 4890 6149 5786 +3 4891 5389 5673 +3 4891 5673 5142 +3 4892 5143 5674 +3 4892 5674 5390 +3 4893 5270 5588 +3 4893 5588 5187 +3 4894 5188 5589 +3 4894 5589 5271 +3 4895 5383 5536 +3 4895 5536 5068 +3 4896 5069 5537 +3 4896 5537 5384 +3 4897 5289 6255 +3 4897 6255 5845 +3 4898 5846 6256 +3 4898 6256 5290 +3 4899 5679 6186 +3 4899 6186 5394 +3 4900 5395 6187 +3 4900 6187 5680 +3 4901 5316 5933 +3 4901 5933 5490 +3 4902 5491 5934 +3 4902 5934 5317 +3 4903 5187 5584 +3 4903 5584 5274 +3 4904 5274 5585 +3 4904 5585 5188 +3 4905 6068 6271 +3 4905 6271 5277 +3 4906 5278 6272 +3 4906 6272 6069 +3 4907 5195 5574 +3 4907 5574 5242 +3 4908 5243 5575 +3 4908 5575 5196 +3 4909 5030 5205 +3 4909 5205 5106 +3 4910 5107 5206 +3 4910 5206 5031 +3 4911 6020 6269 +3 4911 6269 5127 +3 4912 5128 6270 +3 4912 6270 6021 +3 4913 5794 6164 +3 4913 6164 5248 +3 4914 5249 6165 +3 4914 6165 5795 +3 4915 5486 5582 +3 4915 5582 5018 +3 4916 5019 5583 +3 4916 5583 5487 +3 4917 5158 5659 +3 4917 5659 5373 +3 4918 5374 5660 +3 4918 5660 5159 +3 4919 5297 5351 +3 4919 5351 4978 +3 4920 4979 5352 +3 4920 5352 5298 +3 4921 5213 5422 +3 4921 5422 5102 +3 4922 5103 5423 +3 4922 5423 5214 +3 4923 5286 5882 +3 4923 5882 5285 +3 4924 5104 5341 +3 4924 5341 5160 +3 4925 5160 5342 +3 4925 5342 5105 +3 4926 5604 6047 +3 4926 6047 5339 +3 4927 5340 6048 +3 4927 6048 5605 +3 4928 5630 6395 +3 4928 6395 5653 +3 4929 5654 6396 +3 4929 6396 5631 +3 4930 5410 5725 +3 4930 5725 5211 +3 4931 5212 5726 +3 4931 5726 5411 +3 4932 5448 5564 +3 4932 5564 5060 +3 4933 5061 5565 +3 4933 5565 5449 +3 4934 5096 5935 +3 4934 5935 5770 +3 4935 5771 5936 +3 4935 5936 5097 +3 4936 5022 5199 +3 4936 5199 5131 +3 4937 5132 5200 +3 4937 5200 5023 +3 4938 5173 5345 +3 4938 5345 5104 +3 4939 5105 5346 +3 4939 5346 5174 +3 4940 5108 5450 +3 4940 5450 5281 +3 4941 5282 5451 +3 4941 5451 5109 +3 4942 5744 6285 +3 4942 6285 5743 +3 4943 5796 5860 +3 4943 5860 5020 +3 4944 5021 5861 +3 4944 5861 5797 +3 4945 5653 6407 +3 4945 6407 5635 +3 4946 5636 6408 +3 4946 6408 5654 +3 4947 5520 5938 +3 4947 5938 5332 +3 4948 5333 5939 +3 4948 5939 5521 +3 4949 5092 5542 +3 4949 5542 5385 +3 4950 5386 5543 +3 4950 5543 5093 +3 4951 5572 5942 +3 4951 5942 5283 +3 4952 5284 5943 +3 4952 5943 5573 +3 4953 5238 5907 +3 4953 5907 5600 +3 4954 5601 5908 +3 4954 5908 5239 +3 4955 5177 5809 +3 4955 5809 5566 +3 4956 5567 5810 +3 4956 5810 5178 +3 4957 5693 5895 +3 4957 5895 5171 +3 4958 5172 5896 +3 4958 5896 5694 +3 4959 5428 6296 +3 4959 6296 5817 +3 4960 5818 6297 +3 4960 6297 5429 +3 4961 5193 6082 +3 4961 6082 5803 +3 4962 5804 6083 +3 4962 6083 5194 +3 4963 5755 6230 +3 4963 6230 5412 +3 4964 5412 6231 +3 4964 6231 5756 +3 4965 5789 6100 +3 4965 6100 5234 +3 4966 5235 6101 +3 4966 6101 5790 +3 4967 5347 6035 +3 4967 6035 5622 +3 4968 5623 6036 +3 4968 6036 5348 +3 4969 5292 6485 +3 4969 6485 6109 +3 4970 6110 6486 +3 4970 6486 5293 +3 4971 5310 6072 +3 4971 6072 5715 +3 4972 5716 6073 +3 4972 6073 5311 +3 4973 5262 5787 +3 4973 5787 5480 +3 4974 5481 5788 +3 4974 5788 5263 +3 4975 4988 5538 +3 4975 5538 5539 +3 4975 5539 4989 +3 4976 5548 5749 +3 4976 5749 5146 +3 4977 5147 5750 +3 4977 5750 5549 +3 4978 5351 5464 +3 4978 5464 5086 +3 4979 5087 5465 +3 4979 5465 5352 +3 4980 5175 5763 +3 4980 5763 5546 +3 4981 5547 5764 +3 4981 5764 5176 +3 4982 5635 6451 +3 4982 6451 5757 +3 4983 5758 6452 +3 4983 6452 5636 +3 4984 5189 5645 +3 4984 5645 5426 +3 4985 5427 5646 +3 4985 5646 5190 +3 4986 5798 6463 +3 4986 6463 5630 +3 4987 5631 6464 +3 4987 6464 5799 +3 4988 5084 5602 +3 4988 5602 5538 +3 4989 5539 5603 +3 4989 5603 5085 +3 4990 5242 5705 +3 4990 5705 5413 +3 4991 5414 5706 +3 4991 5706 5243 +3 4992 5747 5885 +3 4992 5885 5154 +3 4993 5155 5886 +3 4993 5886 5748 +3 4994 5544 5866 +3 4994 5866 5324 +3 4995 5325 5867 +3 4995 5867 5545 +3 4996 5156 5335 +3 4996 5335 5152 +3 4997 5153 5336 +3 4997 5336 5157 +3 4998 5508 5952 +3 4998 5952 5446 +3 4999 5447 5953 +3 4999 5953 5509 +3 5000 5090 5398 +3 5000 5398 5494 +3 5000 5494 5100 +3 5001 5101 5495 +3 5001 5399 5091 +3 5001 5495 5399 +3 5002 5227 5456 +3 5002 5456 5219 +3 5003 5220 5457 +3 5003 5457 5228 +3 5004 5677 6096 +3 5004 6096 5415 +3 5005 5416 6097 +3 5005 6097 5678 +3 5006 5373 5956 +3 5006 5956 5590 +3 5007 5591 5957 +3 5007 5957 5374 +3 5008 5225 6183 +3 5008 6183 5691 +3 5009 5692 6184 +3 5009 6184 5226 +3 5010 5415 5927 +3 5010 5927 5516 +3 5011 5516 5928 +3 5011 5928 5416 +3 5012 5343 5522 +3 5012 5522 5173 +3 5013 5174 5523 +3 5013 5523 5344 +3 5014 5223 6311 +3 5014 6311 5962 +3 5015 5963 6312 +3 5015 6312 5224 +3 5016 5191 5837 +3 5016 5837 5657 +3 5017 5658 5838 +3 5017 5838 5192 +3 5018 5582 5727 +3 5018 5727 5165 +3 5019 5166 5728 +3 5019 5728 5583 +3 5020 5860 6002 +3 5020 6002 5244 +3 5021 5245 6003 +3 5021 6003 5861 +3 5022 5148 5326 +3 5022 5326 5199 +3 5023 5200 5327 +3 5023 5327 5149 +3 5024 5054 5266 +3 5024 5266 5275 +3 5024 5275 5070 +3 5025 5071 5276 +3 5025 5267 5055 +3 5025 5276 5267 +3 5026 5761 6103 +3 5026 6103 5318 +3 5027 5319 6104 +3 5027 6104 5762 +3 5028 5446 5970 +3 5028 5970 5540 +3 5029 5541 5971 +3 5029 5971 5447 +3 5030 5181 5375 +3 5030 5375 5205 +3 5031 5206 5376 +3 5031 5376 5182 +3 5032 5972 6318 +3 5032 6318 5367 +3 5033 5368 6319 +3 5033 6319 5973 +3 5034 5044 5308 +3 5034 5308 5314 +3 5034 5314 5074 +3 5035 5075 5315 +3 5035 5309 5045 +3 5035 5315 5309 +3 5036 5966 6188 +3 5036 6188 5252 +3 5037 5253 6189 +3 5037 6189 5967 +3 5038 5887 6290 +3 5038 6290 5436 +3 5039 5437 6291 +3 5039 6291 5888 +3 5040 5272 5925 +3 5040 5925 5699 +3 5041 5700 5926 +3 5041 5926 5273 +3 5042 5393 5661 +3 5042 5661 5301 +3 5043 5302 5662 +3 5043 5662 5393 +3 5044 5106 5357 +3 5044 5357 5308 +3 5045 5309 5358 +3 5045 5358 5107 +3 5046 5560 6683 +3 5046 6683 6130 +3 5047 6131 6684 +3 5047 6684 5561 +3 5048 5203 6128 +3 5048 6128 5849 +3 5049 5850 6129 +3 5049 6129 5204 +3 5050 5305 5976 +3 5050 5976 5719 +3 5051 5720 5977 +3 5051 5977 5306 +3 5052 5301 5649 +3 5052 5649 5396 +3 5053 5397 5650 +3 5053 5650 5302 +3 5054 5152 5379 +3 5054 5379 5266 +3 5055 5267 5380 +3 5055 5380 5153 +3 5056 5482 5852 +3 5056 5852 5502 +3 5057 5503 5853 +3 5057 5853 5483 +3 5058 5121 5667 +3 5058 5592 5195 +3 5058 5667 5592 +3 5059 5196 5593 +3 5059 5593 5668 +3 5059 5668 5122 +3 5060 5564 5741 +3 5060 5741 5236 +3 5061 5237 5742 +3 5061 5742 5565 +3 5062 5466 6239 +3 5062 6239 5823 +3 5063 5824 6240 +3 5063 6240 5467 +3 5064 5847 6084 +3 5064 6084 5299 +3 5065 5300 6085 +3 5065 6085 5848 +3 5066 5596 5856 +3 5066 5856 5322 +3 5067 5323 5857 +3 5067 5857 5597 +3 5068 5536 5753 +3 5068 5753 5270 +3 5069 5271 5754 +3 5069 5754 5537 +3 5070 5275 5353 +3 5070 5353 5148 +3 5071 5149 5354 +3 5071 5354 5276 +3 5072 5500 6304 +3 5072 6304 5883 +3 5073 5884 6305 +3 5073 6305 5501 +3 5074 5314 5404 +3 5074 5404 5156 +3 5075 5157 5405 +3 5075 5405 5315 +3 5076 5077 5291 +3 5076 5291 5438 +3 5076 5438 5181 +3 5077 5182 5439 +3 5077 5439 5291 +3 5078 5400 6409 +3 5078 6409 6066 +3 5079 6067 6410 +3 5079 6410 5401 +3 5080 5735 6204 +3 5080 6204 5556 +3 5081 5557 6205 +3 5081 6205 5736 +3 5082 5893 6265 +3 5082 6265 5492 +3 5083 5493 6266 +3 5083 6266 5894 +3 5084 5201 5731 +3 5084 5731 5602 +3 5085 5603 5732 +3 5085 5732 5202 +3 5086 5464 5616 +3 5086 5616 5227 +3 5087 5228 5617 +3 5087 5617 5465 +3 5088 5129 6338 +3 5088 6313 5089 +3 5088 6338 6313 +3 5089 6313 6339 +3 5089 6339 5130 +3 5090 5219 5530 +3 5090 5530 5398 +3 5091 5399 5531 +3 5091 5531 5220 +3 5092 5197 5651 +3 5092 5651 5542 +3 5093 5543 5652 +3 5093 5652 5198 +3 5094 6170 6635 +3 5094 6635 5524 +3 5095 5525 6636 +3 5095 6636 6171 +3 5096 5312 6150 +3 5096 6150 5935 +3 5097 5936 6151 +3 5097 6151 5313 +3 5098 5371 6277 +3 5098 6277 5998 +3 5099 5999 6278 +3 5099 6278 5372 +3 5100 5494 5624 +3 5100 5624 5213 +3 5101 5214 5625 +3 5101 5625 5495 +3 5102 5422 5685 +3 5102 5685 5349 +3 5103 5350 5686 +3 5103 5686 5423 +3 5104 5345 5578 +3 5104 5578 5341 +3 5105 5342 5579 +3 5105 5579 5346 +3 5106 5205 5474 +3 5106 5474 5357 +3 5107 5358 5475 +3 5107 5475 5206 +3 5108 5349 5707 +3 5108 5707 5450 +3 5109 5451 5708 +3 5109 5708 5350 +3 5110 5131 5434 +3 5110 5434 5435 +3 5110 5435 5132 +3 5111 5964 6340 +3 5111 6340 5488 +3 5112 5489 6341 +3 5112 6341 5965 +3 5113 5498 5813 +3 5113 5813 5484 +3 5114 5485 5814 +3 5114 5814 5499 +3 5115 5490 6179 +3 5115 6179 5839 +3 5116 5840 6180 +3 5116 6180 5491 +3 5117 5639 6560 +3 5117 6560 6055 +3 5118 6056 6561 +3 5118 6561 5640 +3 5119 5264 6126 +3 5119 6126 5647 +3 5120 5648 6127 +3 5120 6127 5265 +3 5121 5240 5774 +3 5121 5774 5667 +3 5122 5668 5775 +3 5122 5775 5241 +3 5123 5739 6115 +3 5123 6115 5508 +3 5124 5509 6116 +3 5124 6116 5740 +3 5125 6053 6697 +3 5125 6697 5755 +3 5126 5756 6698 +3 5126 6698 6054 +3 5127 6269 6597 +3 5127 6597 5440 +3 5128 5441 6598 +3 5128 6598 6270 +3 5129 5230 6426 +3 5129 6426 6338 +3 5130 6339 6427 +3 5130 6427 5231 +3 5131 5199 5478 +3 5131 5478 5434 +3 5132 5435 5479 +3 5132 5479 5200 +3 5133 5897 6781 +3 5133 6781 5988 +3 5134 5989 6782 +3 5134 6782 5898 +3 5135 5163 6200 +3 5135 6200 6201 +3 5135 6201 5164 +3 5136 5980 6786 +3 5136 6786 5917 +3 5137 5918 6787 +3 5137 6787 5981 +3 5138 5709 6113 +3 5138 6113 5665 +3 5139 5666 6114 +3 5139 6114 5710 +3 5140 5909 6441 +3 5140 6441 5695 +3 5141 5696 6442 +3 5141 6442 5910 +3 5142 5673 5990 +3 5142 5990 5482 +3 5143 5483 5991 +3 5143 5991 5674 +3 5144 5185 5681 +3 5144 5641 5209 +3 5144 5681 5641 +3 5145 5210 5642 +3 5145 5642 5682 +3 5145 5682 5186 +3 5146 5749 5994 +3 5146 5994 5410 +3 5147 5411 5995 +3 5147 5995 5750 +3 5148 5353 5506 +3 5148 5506 5326 +3 5149 5327 5507 +3 5149 5507 5354 +3 5150 5917 6816 +3 5150 6816 5897 +3 5151 5898 6817 +3 5151 6817 5918 +3 5152 5335 5552 +3 5152 5552 5379 +3 5153 5380 5553 +3 5153 5553 5336 +3 5154 5885 6134 +3 5154 6134 5418 +3 5155 5419 6135 +3 5155 6135 5886 +3 5156 5404 5558 +3 5156 5558 5335 +3 5157 5336 5559 +3 5157 5559 5405 +3 5158 5526 5996 +3 5158 5996 5659 +3 5159 5660 5997 +3 5159 5997 5527 +3 5160 5341 5684 +3 5160 5684 5342 +3 5161 5470 6574 +3 5161 6574 5960 +3 5162 5961 6575 +3 5162 6575 5471 +3 5163 5232 6257 +3 5163 6257 6200 +3 5164 6201 6258 +3 5164 6258 5233 +3 5165 5727 5915 +3 5165 5915 5389 +3 5166 5390 5916 +3 5166 5916 5728 +3 5167 5691 6424 +3 5167 6424 5950 +3 5168 5951 6425 +3 5168 6425 5692 +3 5169 5610 5878 +3 5169 5878 5486 +3 5170 5487 5879 +3 5170 5879 5611 +3 5171 5895 6196 +3 5171 6196 5520 +3 5172 5521 6197 +3 5172 6197 5896 +3 5173 5522 5703 +3 5173 5703 5345 +3 5174 5346 5704 +3 5174 5704 5523 +3 5175 5502 6041 +3 5175 6041 5763 +3 5176 5764 6042 +3 5176 6042 5503 +3 5177 5540 6136 +3 5177 6136 5809 +3 5178 5810 6137 +3 5178 6137 5541 +3 5179 5183 5889 +3 5179 5889 5940 +3 5179 5940 5250 +3 5180 5251 5941 +3 5180 5890 5184 +3 5180 5941 5890 +3 5181 5438 5608 +3 5181 5608 5375 +3 5182 5376 5609 +3 5182 5609 5439 +3 5183 5377 6092 +3 5183 6092 5889 +3 5184 5890 6093 +3 5184 6093 5378 +3 5185 5281 5751 +3 5185 5751 5681 +3 5186 5682 5752 +3 5186 5752 5282 +3 5187 5588 5944 +3 5187 5944 5584 +3 5188 5585 5945 +3 5188 5945 5589 +3 5189 5484 5921 +3 5189 5921 5645 +3 5190 5646 5922 +3 5190 5922 5485 +3 5191 5480 6088 +3 5191 6088 5837 +3 5192 5838 6089 +3 5192 6089 5481 +3 5193 5550 6411 +3 5193 6411 6082 +3 5194 6083 6412 +3 5194 6412 5551 +3 5195 5592 5954 +3 5195 5954 5574 +3 5196 5575 5955 +3 5196 5955 5593 +3 5197 5396 5827 +3 5197 5827 5651 +3 5198 5652 5828 +3 5198 5828 5397 +3 5199 5326 5576 +3 5199 5576 5478 +3 5200 5479 5577 +3 5200 5577 5327 +3 5201 5413 5929 +3 5201 5929 5731 +3 5202 5732 5930 +3 5202 5930 5414 +3 5203 5460 6356 +3 5203 6356 6128 +3 5204 6129 6357 +3 5204 6357 5461 +3 5205 5375 5620 +3 5205 5620 5474 +3 5206 5475 5621 +3 5206 5621 5376 +3 5207 5408 6536 +3 5207 6288 5369 +3 5207 6536 6288 +3 5208 5370 6289 +3 5208 6289 6537 +3 5208 6537 5409 +3 5209 5641 5759 +3 5209 5759 5343 +3 5210 5344 5760 +3 5210 5760 5642 +3 5211 5725 6105 +3 5211 6105 5610 +3 5212 5611 6106 +3 5212 6106 5726 +3 5213 5624 5807 +3 5213 5807 5422 +3 5214 5423 5808 +3 5214 5808 5625 +3 5215 5689 6086 +3 5215 6086 5669 +3 5216 5670 6087 +3 5216 6087 5690 +3 5217 6148 6599 +3 5217 6599 5679 +3 5218 5680 6600 +3 5218 6600 6149 +3 5219 5456 5729 +3 5219 5729 5530 +3 5220 5531 5730 +3 5220 5730 5457 +3 5221 5256 6037 +3 5221 6037 6226 +3 5221 6226 5420 +3 5222 5421 6227 +3 5222 6038 5257 +3 5222 6227 6038 +3 5223 5606 6687 +3 5223 6687 6311 +3 5224 6312 6688 +3 5224 6688 5607 +3 5225 5534 6465 +3 5225 6465 6183 +3 5226 6184 6466 +3 5226 6466 5535 +3 5227 5616 5833 +3 5227 5833 5456 +3 5228 5457 5834 +3 5228 5834 5617 +3 5229 5254 5255 +3 5229 5255 5261 +3 5229 5260 5254 +3 5229 5261 5269 +3 5229 5268 5260 +3 5229 5269 5268 +3 5230 5406 6587 +3 5230 6587 6426 +3 5231 6427 6588 +3 5231 6588 5407 +3 5232 5365 6371 +3 5232 6371 6257 +3 5233 6258 6372 +3 5233 6372 5366 +3 5234 6100 6437 +3 5234 6437 5604 +3 5235 5605 6438 +3 5235 6438 6101 +3 5236 5741 5974 +3 5236 5974 5498 +3 5237 5499 5975 +3 5237 5975 5742 +3 5238 5647 6300 +3 5238 6300 5907 +3 5239 5908 6301 +3 5239 6301 5648 +3 5240 5426 5946 +3 5240 5946 5774 +3 5241 5775 5947 +3 5241 5947 5427 +3 5242 5574 6004 +3 5242 6004 5705 +3 5243 5706 6005 +3 5243 6005 5575 +3 5244 6002 6298 +3 5244 6298 5572 +3 5245 5573 6299 +3 5245 6299 6003 +3 5246 5743 6704 +3 5246 6704 6202 +3 5247 6203 6705 +3 5247 6705 5744 +3 5248 6164 6981 +3 5248 6981 5980 +3 5249 5981 6982 +3 5249 6982 6165 +3 5250 5940 6031 +3 5250 6031 5387 +3 5251 5388 6032 +3 5251 6032 5941 +3 5252 6188 6497 +3 5252 6497 5562 +3 5253 5563 6498 +3 5253 6498 6189 +3 5254 5260 5320 +3 5254 5304 5255 +3 5254 5320 5337 +3 5254 5337 5304 +3 5255 5304 5338 +3 5255 5321 5261 +3 5255 5338 5321 +3 5256 5361 6121 +3 5256 6121 6037 +3 5257 6038 6122 +3 5257 6122 5362 +3 5258 5295 5899 +3 5258 5899 5901 +3 5258 5901 5287 +3 5259 5288 5902 +3 5259 5900 5296 +3 5259 5902 5900 +3 5260 5268 5330 +3 5260 5330 5355 +3 5260 5355 5320 +3 5261 5321 5356 +3 5261 5331 5269 +3 5261 5356 5331 +3 5262 5665 6162 +3 5262 6162 5787 +3 5263 5788 6163 +3 5263 6163 5666 +3 5264 5518 6364 +3 5264 6364 6126 +3 5265 6127 6365 +3 5265 6365 5519 +3 5266 5379 5675 +3 5266 5570 5275 +3 5266 5675 5570 +3 5267 5276 5571 +3 5267 5571 5676 +3 5267 5676 5380 +3 5268 5269 5334 +3 5268 5334 5363 +3 5268 5363 5330 +3 5269 5331 5364 +3 5269 5364 5334 +3 5270 5753 6024 +3 5270 6024 5588 +3 5271 5589 6025 +3 5271 6025 5754 +3 5272 5590 6228 +3 5272 6228 5925 +3 5273 5926 6229 +3 5273 6229 5591 +3 5274 5584 6028 +3 5274 6028 5585 +3 5275 5570 5618 +3 5275 5618 5353 +3 5276 5354 5619 +3 5276 5619 5571 +3 5277 6271 6546 +3 5277 6546 5568 +3 5278 5569 6547 +3 5278 6547 6272 +3 5279 5528 6836 +3 5279 6542 5504 +3 5279 6836 6542 +3 5280 5505 6543 +3 5280 6543 6837 +3 5280 6837 5529 +3 5281 5450 5874 +3 5281 5874 5751 +3 5282 5752 5875 +3 5282 5875 5451 +3 5283 5942 6206 +3 5283 6206 5544 +3 5284 5545 6207 +3 5284 6207 5943 +3 5285 5882 6589 +3 5285 6589 5986 +3 5286 5987 6590 +3 5286 6590 5882 +3 5287 5901 6107 +3 5287 6107 5383 +3 5288 5384 6108 +3 5288 6108 5902 +3 5289 5988 7059 +3 5289 7059 6255 +3 5290 6256 7060 +3 5290 7060 5989 +3 5291 5439 5683 +3 5291 5683 5438 +3 5292 5711 6909 +3 5292 6909 6485 +3 5293 6486 6910 +3 5293 6910 5712 +3 5294 5328 6526 +3 5294 6526 6527 +3 5294 6527 5329 +3 5295 5391 5982 +3 5295 5982 5899 +3 5296 5900 5983 +3 5296 5983 5392 +3 5297 5298 5791 +3 5297 5791 5831 +3 5297 5831 5351 +3 5298 5352 5832 +3 5298 5832 5791 +3 5299 6084 6422 +3 5299 6422 5677 +3 5300 5678 6423 +3 5300 6423 6085 +3 5301 5661 5978 +3 5301 5978 5649 +3 5302 5650 5979 +3 5302 5979 5662 +3 5303 6010 6462 +3 5303 6462 6011 +3 5304 5337 5402 +3 5304 5402 5403 +3 5304 5403 5338 +3 5305 5669 6320 +3 5305 6320 5976 +3 5306 5977 6321 +3 5306 6321 5670 +3 5307 5690 6178 +3 5307 6178 5689 +3 5308 5357 5717 +3 5308 5671 5314 +3 5308 5717 5671 +3 5309 5315 5672 +3 5309 5672 5718 +3 5309 5718 5358 +3 5310 5600 6330 +3 5310 6330 6072 +3 5311 6073 6331 +3 5311 6331 5601 +3 5312 5622 6445 +3 5312 6445 6150 +3 5313 6151 6446 +3 5313 6446 5623 +3 5314 5671 5723 +3 5314 5723 5404 +3 5315 5405 5724 +3 5315 5724 5672 +3 5316 5958 6550 +3 5316 6550 5933 +3 5317 5934 6551 +3 5317 6551 5959 +3 5318 6103 6491 +3 5318 6491 5735 +3 5319 5736 6492 +3 5319 6492 6104 +3 5320 5355 5454 +3 5320 5442 5337 +3 5320 5454 5442 +3 5321 5338 5443 +3 5321 5443 5455 +3 5321 5455 5356 +3 5322 5856 6190 +3 5322 6190 5709 +3 5323 5710 6191 +3 5323 6191 5857 +3 5324 5866 6261 +3 5324 6261 5747 +3 5325 5748 6262 +3 5325 6262 5867 +3 5326 5506 5721 +3 5326 5721 5576 +3 5327 5577 5722 +3 5327 5722 5507 +3 5328 5430 6611 +3 5328 6611 6526 +3 5329 6527 6612 +3 5329 6612 5431 +3 5330 5363 5472 +3 5330 5462 5355 +3 5330 5472 5462 +3 5331 5356 5463 +3 5331 5463 5473 +3 5331 5473 5364 +3 5332 5938 6564 +3 5332 6564 5958 +3 5333 5959 6565 +3 5333 6565 5939 +3 5334 5364 5477 +3 5334 5476 5363 +3 5334 5477 5476 +3 5335 5558 5766 +3 5335 5766 5552 +3 5336 5553 5767 +3 5336 5767 5559 +3 5337 5442 5468 +3 5337 5468 5402 +3 5338 5403 5469 +3 5338 5469 5443 +3 5339 6047 6689 +3 5339 6689 5984 +3 5340 5985 6690 +3 5340 6690 6048 +3 5341 5578 5862 +3 5341 5862 5684 +3 5342 5684 5863 +3 5342 5863 5579 +3 5343 5759 5919 +3 5343 5919 5522 +3 5344 5523 5920 +3 5344 5920 5760 +3 5345 5703 5868 +3 5345 5868 5578 +3 5346 5579 5869 +3 5346 5869 5704 +3 5347 5992 6695 +3 5347 6695 6035 +3 5348 6036 6696 +3 5348 6696 5993 +3 5349 5685 5948 +3 5349 5948 5707 +3 5350 5708 5949 +3 5350 5949 5686 +3 5351 5831 5911 +3 5351 5911 5464 +3 5352 5465 5912 +3 5352 5912 5832 +3 5353 5618 5737 +3 5353 5737 5506 +3 5354 5507 5738 +3 5354 5738 5619 +3 5355 5462 5514 +3 5355 5514 5454 +3 5356 5455 5515 +3 5356 5515 5463 +3 5357 5474 5778 +3 5357 5778 5717 +3 5358 5718 5779 +3 5358 5779 5475 +3 5359 5984 6706 +3 5359 6706 5992 +3 5360 5993 6707 +3 5360 6707 5985 +3 5361 5566 6279 +3 5361 6279 6121 +3 5362 6122 6280 +3 5362 6280 5567 +3 5363 5476 5532 +3 5363 5532 5472 +3 5364 5473 5533 +3 5364 5533 5477 +3 5365 5715 6530 +3 5365 6530 6371 +3 5366 6372 6531 +3 5366 6531 5716 +3 5367 6318 6752 +3 5367 6752 5798 +3 5368 5799 6753 +3 5368 6753 6319 +3 5369 6288 6507 +3 5369 6507 5612 +3 5370 5613 6508 +3 5370 6508 6289 +3 5371 5757 6656 +3 5371 6656 6277 +3 5372 6278 6657 +3 5372 6657 5758 +3 5373 5659 6194 +3 5373 6194 5956 +3 5374 5957 6195 +3 5374 6195 5660 +3 5375 5608 5841 +3 5375 5841 5620 +3 5376 5621 5842 +3 5376 5842 5609 +3 5377 5512 6316 +3 5377 6316 6092 +3 5378 6093 6317 +3 5378 6317 5513 +3 5379 5552 5819 +3 5379 5819 5675 +3 5380 5676 5820 +3 5380 5820 5553 +3 5381 5385 6043 +3 5381 6043 6080 +3 5381 6080 5448 +3 5382 5449 6081 +3 5382 6044 5386 +3 5382 6081 6044 +3 5383 6107 6218 +3 5383 6218 5536 +3 5384 5537 6219 +3 5384 6219 6108 +3 5385 5542 6074 +3 5385 6074 6043 +3 5386 6044 6075 +3 5386 6075 5543 +3 5387 6031 6208 +3 5387 6208 5596 +3 5388 5597 6209 +3 5388 6209 6032 +3 5389 5915 6181 +3 5389 6181 5673 +3 5390 5674 6182 +3 5390 6182 5916 +3 5391 5546 6111 +3 5391 6111 5982 +3 5392 5983 6112 +3 5392 6112 5547 +3 5393 5662 6059 +3 5393 6059 5661 +3 5394 6186 6838 +3 5394 6838 6010 +3 5395 6011 6839 +3 5395 6839 6187 +3 5396 5649 6057 +3 5396 6057 5827 +3 5397 5828 6058 +3 5397 6058 5650 +3 5398 5530 5870 +3 5398 5870 5968 +3 5398 5968 5494 +3 5399 5495 5969 +3 5399 5871 5531 +3 5399 5969 5871 +3 5400 5817 6860 +3 5400 6860 6409 +3 5401 6410 6861 +3 5401 6861 5818 +3 5402 5468 5554 +3 5402 5517 5403 +3 5402 5554 5517 +3 5403 5517 5555 +3 5403 5555 5469 +3 5404 5723 5843 +3 5404 5843 5558 +3 5405 5559 5844 +3 5405 5844 5724 +3 5406 5803 6810 +3 5406 6810 6587 +3 5407 6588 6811 +3 5407 6811 5804 +3 5408 5655 6796 +3 5408 6796 6536 +3 5409 6537 6797 +3 5409 6797 5656 +3 5410 5994 6286 +3 5410 6286 5725 +3 5411 5726 6287 +3 5411 6287 5995 +3 5412 6230 6783 +3 5412 6783 6231 +3 5413 5705 6176 +3 5413 6176 5929 +3 5414 5930 6177 +3 5414 6177 5706 +3 5415 6096 6603 +3 5415 6603 5927 +3 5416 5928 6604 +3 5416 6604 6097 +3 5417 5453 6215 +3 5417 6214 5452 +3 5417 6215 6214 +3 5418 6134 6443 +3 5418 6443 5739 +3 5419 5740 6444 +3 5419 6444 6135 +3 5420 6226 6453 +3 5420 6453 5663 +3 5421 5664 6454 +3 5421 6454 6227 +3 5422 5807 6039 +3 5422 6039 5685 +3 5423 5686 6040 +3 5423 6040 5808 +3 5424 5614 6534 +3 5424 6342 5496 +3 5424 6534 6342 +3 5425 5497 6343 +3 5425 6343 6535 +3 5425 6535 5615 +3 5426 5645 6158 +3 5426 6158 5946 +3 5427 5947 6159 +3 5427 6159 5646 +3 5428 5960 6887 +3 5428 6887 6296 +3 5429 6297 6888 +3 5429 6888 5961 +3 5430 5580 6728 +3 5430 6728 6611 +3 5431 6612 6729 +3 5431 6729 5581 +3 5432 6168 6929 +3 5432 6929 6144 +3 5433 6145 6930 +3 5433 6930 6169 +3 5434 5478 5811 +3 5434 5780 5435 +3 5434 5811 5780 +3 5435 5780 5812 +3 5435 5812 5479 +3 5436 6290 6814 +3 5436 6814 5909 +3 5437 5910 6815 +3 5437 6815 6291 +3 5438 5683 5821 +3 5438 5821 5608 +3 5439 5609 5822 +3 5439 5822 5683 +3 5440 6597 6992 +3 5440 6992 5800 +3 5441 5801 6993 +3 5441 6993 6598 +3 5442 5454 5594 +3 5442 5594 5598 +3 5442 5598 5468 +3 5443 5469 5599 +3 5443 5595 5455 +3 5443 5599 5595 +3 5444 6152 6937 +3 5444 6937 6168 +3 5445 6169 6938 +3 5445 6938 6153 +3 5446 5952 6570 +3 5446 6570 5970 +3 5447 5971 6571 +3 5447 6571 5953 +3 5448 6080 6160 +3 5448 6160 5564 +3 5449 5565 6161 +3 5449 6161 6081 +3 5450 5707 6090 +3 5450 6090 5874 +3 5451 5875 6091 +3 5451 6091 5708 +3 5452 6214 6283 +3 5452 6283 5548 +3 5453 5549 6284 +3 5453 6284 6215 +3 5454 5514 5632 +3 5454 5632 5594 +3 5455 5595 5633 +3 5455 5633 5515 +3 5456 5833 6098 +3 5456 6098 5729 +3 5457 5730 6099 +3 5457 6099 5834 +3 5458 5937 6740 +3 5458 6740 6263 +3 5459 6264 6741 +3 5459 6741 5937 +3 5460 5823 6718 +3 5460 6718 6356 +3 5461 6357 6719 +3 5461 6719 5824 +3 5462 5472 5626 +3 5462 5626 5643 +3 5462 5643 5514 +3 5463 5515 5644 +3 5463 5627 5473 +3 5463 5644 5627 +3 5464 5911 6062 +3 5464 6062 5616 +3 5465 5617 6063 +3 5465 6063 5912 +3 5466 5986 6769 +3 5466 6769 6239 +3 5467 6240 6770 +3 5467 6770 5987 +3 5468 5598 5637 +3 5468 5637 5554 +3 5469 5555 5638 +3 5469 5638 5599 +3 5470 5845 6965 +3 5470 6965 6574 +3 5471 6575 6966 +3 5471 6966 5846 +3 5472 5532 5687 +3 5472 5687 5626 +3 5473 5627 5688 +3 5473 5688 5533 +3 5474 5620 5923 +3 5474 5923 5778 +3 5475 5779 5924 +3 5475 5924 5621 +3 5476 5477 5634 +3 5476 5634 5697 +3 5476 5697 5532 +3 5477 5533 5698 +3 5477 5698 5634 +3 5478 5576 5872 +3 5478 5872 5811 +3 5479 5812 5873 +3 5479 5873 5577 +3 5480 5787 6387 +3 5480 6387 6088 +3 5481 6089 6388 +3 5481 6388 5788 +3 5482 5990 6354 +3 5482 6354 5852 +3 5483 5853 6355 +3 5483 6355 5991 +3 5484 5813 6237 +3 5484 6237 5921 +3 5485 5922 6238 +3 5485 6238 5814 +3 5486 5878 6235 +3 5486 6235 5582 +3 5487 5583 6236 +3 5487 6236 5879 +3 5488 6340 6625 +3 5488 6625 5761 +3 5489 5762 6626 +3 5489 6626 6341 +3 5490 5933 6629 +3 5490 6629 6179 +3 5491 6180 6630 +3 5491 6630 5934 +3 5492 6265 6988 +3 5492 6988 6152 +3 5493 6153 6989 +3 5493 6989 6266 +3 5494 5968 6094 +3 5494 6094 5624 +3 5495 5625 6095 +3 5495 6095 5969 +3 5496 6342 6501 +3 5496 6501 5693 +3 5497 5694 6502 +3 5497 6502 6343 +3 5498 5974 6251 +3 5498 6251 5813 +3 5499 5814 6252 +3 5499 6252 5975 +3 5500 6144 7012 +3 5500 7012 6304 +3 5501 6305 7013 +3 5501 7013 6145 +3 5502 5852 6385 +3 5502 6385 6041 +3 5503 6042 6386 +3 5503 6386 5853 +3 5504 6542 6870 +3 5504 6870 5794 +3 5505 5795 6871 +3 5505 6871 6543 +3 5506 5737 5905 +3 5506 5905 5721 +3 5507 5722 5906 +3 5507 5906 5738 +3 5508 6115 6540 +3 5508 6540 5952 +3 5509 5953 6541 +3 5509 6541 6116 +3 5510 5586 6447 +3 5510 6419 5511 +3 5510 6447 6419 +3 5511 6419 6448 +3 5511 6448 5587 +3 5512 5719 6493 +3 5512 6493 6316 +3 5513 6317 6494 +3 5513 6494 5720 +3 5514 5643 5733 +3 5514 5733 5632 +3 5515 5633 5734 +3 5515 5734 5644 +3 5516 5927 6509 +3 5516 6509 5928 +3 5517 5554 5701 +3 5517 5701 5702 +3 5517 5702 5555 +3 5518 5839 6662 +3 5518 6662 6364 +3 5519 6365 6663 +3 5519 6663 5840 +3 5520 6196 6621 +3 5520 6621 5938 +3 5521 5939 6622 +3 5521 6622 6197 +3 5522 5919 6051 +3 5522 6051 5703 +3 5523 5704 6052 +3 5523 6052 5920 +3 5524 6635 7196 +3 5524 7196 6053 +3 5525 6054 7197 +3 5525 7197 6636 +3 5526 5657 6397 +3 5526 6397 5996 +3 5527 5997 6398 +3 5527 6398 5658 +3 5528 5776 7127 +3 5528 7127 6836 +3 5529 6837 7128 +3 5529 7128 5777 +3 5530 5729 6045 +3 5530 6045 5870 +3 5531 5871 6046 +3 5531 6046 5730 +3 5532 5697 5768 +3 5532 5768 5687 +3 5533 5688 5769 +3 5533 5769 5698 +3 5534 5883 6866 +3 5534 6866 6465 +3 5535 6466 6867 +3 5535 6867 5884 +3 5536 6218 6415 +3 5536 6415 5753 +3 5537 5754 6416 +3 5537 6416 6219 +3 5538 5602 6210 +3 5538 6185 5539 +3 5538 6210 6185 +3 5539 6185 6211 +3 5539 6211 5603 +3 5540 5970 6544 +3 5540 6544 6136 +3 5541 6137 6545 +3 5541 6545 5971 +3 5542 5651 6154 +3 5542 6154 6074 +3 5543 6075 6155 +3 5543 6155 5652 +3 5544 6206 6524 +3 5544 6524 5866 +3 5545 5867 6525 +3 5545 6525 6207 +3 5546 5763 6292 +3 5546 6292 6111 +3 5547 6112 6293 +3 5547 6293 5764 +3 5548 6283 6381 +3 5548 6381 5749 +3 5549 5750 6382 +3 5549 6382 6284 +3 5550 5950 6844 +3 5550 6844 6411 +3 5551 6412 6845 +3 5551 6845 5951 +3 5552 5766 6014 +3 5552 6014 5819 +3 5553 5820 6015 +3 5553 6015 5767 +3 5554 5637 5745 +3 5554 5745 5701 +3 5555 5702 5746 +3 5555 5746 5638 +3 5556 6204 6720 +3 5556 6720 5789 +3 5557 5790 6721 +3 5557 6721 6205 +3 5558 5843 6018 +3 5558 6018 5766 +3 5559 5767 6019 +3 5559 6019 5844 +3 5560 6202 7344 +3 5560 7344 6683 +3 5561 6684 7347 +3 5561 7347 6203 +3 5562 6497 6878 +3 5562 6878 5785 +3 5563 5786 6879 +3 5563 6879 6498 +3 5564 6160 6306 +3 5564 6306 5741 +3 5565 5742 6307 +3 5565 6307 6161 +3 5566 5809 6514 +3 5566 6514 6279 +3 5567 6280 6515 +3 5567 6515 5810 +3 5568 6546 6917 +3 5568 6917 5887 +3 5569 5888 6918 +3 5569 6918 6547 +3 5570 5675 6012 +3 5570 5903 5618 +3 5570 6012 5903 +3 5571 5619 5904 +3 5571 5904 6013 +3 5571 6013 5676 +3 5572 6298 6685 +3 5572 6685 5942 +3 5573 5943 6686 +3 5573 6686 6299 +3 5574 5954 6366 +3 5574 6366 6004 +3 5575 6005 6367 +3 5575 6367 5955 +3 5576 5721 6000 +3 5576 6000 5872 +3 5577 5873 6001 +3 5577 6001 5722 +3 5578 5868 6140 +3 5578 6140 5862 +3 5579 5863 6141 +3 5579 6141 5869 +3 5580 5781 6959 +3 5580 6959 6728 +3 5581 6729 6960 +3 5581 6960 5782 +3 5582 6235 6350 +3 5582 6350 5727 +3 5583 5728 6351 +3 5583 6351 6236 +3 5584 5944 6377 +3 5584 6377 6028 +3 5585 6028 6378 +3 5585 6378 5945 +3 5586 5699 6516 +3 5586 6516 6447 +3 5587 6448 6517 +3 5587 6517 5700 +3 5588 6024 6358 +3 5588 6358 5944 +3 5589 5945 6359 +3 5589 6359 6025 +3 5590 5956 6609 +3 5590 6609 6228 +3 5591 6229 6610 +3 5591 6610 5957 +3 5592 5667 6241 +3 5592 6241 5954 +3 5593 5955 6242 +3 5593 6242 5668 +3 5594 5632 5805 +3 5594 5783 5598 +3 5594 5805 5783 +3 5595 5599 5784 +3 5595 5784 5806 +3 5595 5806 5633 +3 5596 6208 6457 +3 5596 6457 5856 +3 5597 5857 6458 +3 5597 6458 6209 +3 5598 5783 5825 +3 5598 5825 5637 +3 5599 5638 5826 +3 5599 5826 5784 +3 5600 5907 6671 +3 5600 6671 6330 +3 5601 6331 6672 +3 5601 6672 5908 +3 5602 5731 6309 +3 5602 6309 6210 +3 5603 6211 6310 +3 5603 6310 5732 +3 5604 6437 6876 +3 5604 6876 6047 +3 5605 6048 6877 +3 5605 6877 6438 +3 5606 6055 7145 +3 5606 7145 6687 +3 5607 6688 7146 +3 5607 7146 6056 +3 5608 5821 6016 +3 5608 6016 5841 +3 5609 5842 6017 +3 5609 6017 5822 +3 5610 6105 6352 +3 5610 6352 5878 +3 5611 5879 6353 +3 5611 6353 6106 +3 5612 6507 6826 +3 5612 6826 5893 +3 5613 5894 6827 +3 5613 6827 6508 +3 5614 5849 6777 +3 5614 6777 6534 +3 5615 6535 6778 +3 5615 6778 5850 +3 5616 6062 6243 +3 5616 6243 5833 +3 5617 5834 6244 +3 5617 6244 6063 +3 5618 5903 6006 +3 5618 6006 5737 +3 5619 5738 6007 +3 5619 6007 5904 +3 5620 5841 6117 +3 5620 6117 5923 +3 5621 5924 6118 +3 5621 6118 5842 +3 5622 6035 6842 +3 5622 6842 6445 +3 5623 6446 6843 +3 5623 6843 6036 +3 5624 6094 6245 +3 5624 6245 5807 +3 5625 5808 6246 +3 5625 6246 6095 +3 5626 5687 5829 +3 5626 5815 5643 +3 5626 5829 5815 +3 5627 5644 5816 +3 5627 5816 5830 +3 5627 5830 5688 +3 5628 5629 6880 +3 5628 6880 6913 +3 5628 6913 5713 +3 5629 5714 6914 +3 5629 6914 6880 +3 5630 6463 7281 +3 5630 7281 6395 +3 5631 6396 7282 +3 5631 7282 6464 +3 5632 5733 5864 +3 5632 5864 5805 +3 5633 5806 5865 +3 5633 5865 5734 +3 5634 5698 5855 +3 5634 5854 5697 +3 5634 5855 5854 +3 5635 6407 7285 +3 5635 7285 6451 +3 5636 6452 7286 +3 5636 7286 6408 +3 5637 5825 5891 +3 5637 5891 5745 +3 5638 5746 5892 +3 5638 5892 5826 +3 5639 6263 7236 +3 5639 7236 6560 +3 5640 6561 7237 +3 5640 7237 6264 +3 5641 5681 6220 +3 5641 6220 6222 +3 5641 6222 5759 +3 5642 5760 6223 +3 5642 6221 5682 +3 5642 6223 6221 +3 5643 5815 5858 +3 5643 5858 5733 +3 5644 5734 5859 +3 5644 5859 5816 +3 5645 5921 6420 +3 5645 6420 6158 +3 5646 6159 6421 +3 5646 6421 5922 +3 5647 6126 6807 +3 5647 6807 6300 +3 5648 6301 6808 +3 5648 6808 6127 +3 5649 5978 6344 +3 5649 6344 6057 +3 5650 6058 6345 +3 5650 6345 5979 +3 5651 5827 6294 +3 5651 6294 6154 +3 5652 6155 6295 +3 5652 6295 5828 +3 5653 6395 7297 +3 5653 7297 6407 +3 5654 6408 7298 +3 5654 7298 6396 +3 5655 5962 7107 +3 5655 7107 6796 +3 5656 6797 7108 +3 5656 7108 5963 +3 5657 5837 6548 +3 5657 6548 6397 +3 5658 6398 6549 +3 5658 6549 5838 +3 5659 5996 6522 +3 5659 6522 6194 +3 5660 6195 6523 +3 5660 6523 5997 +3 5661 6059 6336 +3 5661 6336 5978 +3 5662 5979 6337 +3 5662 6337 6059 +3 5663 6453 6748 +3 5663 6748 5847 +3 5664 5848 6749 +3 5664 6749 6454 +3 5665 6113 6615 +3 5665 6615 6162 +3 5666 6163 6616 +3 5666 6616 6114 +3 5667 5774 6332 +3 5667 6332 6241 +3 5668 6242 6333 +3 5668 6333 5775 +3 5669 6086 6738 +3 5669 6738 6320 +3 5670 6321 6739 +3 5670 6739 6087 +3 5671 5717 6076 +3 5671 6076 6123 +3 5671 6123 5723 +3 5672 5724 6124 +3 5672 6077 5718 +3 5672 6124 6077 +3 5673 6181 6495 +3 5673 6495 5990 +3 5674 5991 6496 +3 5674 6496 6182 +3 5675 5819 6138 +3 5675 6138 6012 +3 5676 6013 6139 +3 5676 6139 5820 +3 5677 6422 6885 +3 5677 6885 6096 +3 5678 6097 6886 +3 5678 6886 6423 +3 5679 6599 7109 +3 5679 7109 6186 +3 5680 6187 7110 +3 5680 7110 6600 +3 5681 5751 6273 +3 5681 6273 6220 +3 5682 6221 6274 +3 5682 6274 5752 +3 5683 5822 6102 +3 5683 6102 5821 +3 5684 5862 6232 +3 5684 6232 5863 +3 5685 6039 6302 +3 5685 6302 5948 +3 5686 5949 6303 +3 5686 6303 6040 +3 5687 5768 5880 +3 5687 5880 5829 +3 5688 5830 5881 +3 5688 5881 5769 +3 5689 6178 6583 +3 5689 6583 6086 +3 5690 6087 6584 +3 5690 6584 6178 +3 5691 6183 6973 +3 5691 6973 6424 +3 5692 6425 6974 +3 5692 6974 6184 +3 5693 6501 6722 +3 5693 6722 5895 +3 5694 5896 6723 +3 5694 6723 6502 +3 5695 6441 7076 +3 5695 7076 5972 +3 5696 5973 7077 +3 5696 7077 6442 +3 5697 5854 5931 +3 5697 5931 5768 +3 5698 5769 5932 +3 5698 5932 5855 +3 5699 5925 6652 +3 5699 6652 6516 +3 5700 6517 6653 +3 5700 6653 5926 +3 5701 5745 5876 +3 5701 5851 5702 +3 5701 5876 5851 +3 5702 5851 5877 +3 5702 5877 5746 +3 5703 6051 6233 +3 5703 6233 5868 +3 5704 5869 6234 +3 5704 6234 6052 +3 5705 6004 6469 +3 5705 6469 6176 +3 5706 6177 6470 +3 5706 6470 6005 +3 5707 5948 6322 +3 5707 6322 6090 +3 5708 6091 6323 +3 5708 6323 5949 +3 5709 6190 6623 +3 5709 6623 6113 +3 5710 6114 6624 +3 5710 6624 6191 +3 5711 6130 7388 +3 5711 7388 6909 +3 5712 6910 7389 +3 5712 7389 6131 +3 5713 6913 6990 +3 5713 6990 5792 +3 5714 5793 6991 +3 5714 6991 6914 +3 5715 6072 6943 +3 5715 6943 6530 +3 5716 6531 6944 +3 5716 6944 6073 +3 5717 5778 6132 +3 5717 6132 6076 +3 5718 6077 6133 +3 5718 6133 5779 +3 5719 5976 6730 +3 5719 6730 6493 +3 5720 6494 6731 +3 5720 6731 5977 +3 5721 5905 6156 +3 5721 6156 6000 +3 5722 6001 6157 +3 5722 6157 5906 +3 5723 6123 6192 +3 5723 6192 5843 +3 5724 5844 6193 +3 5724 6193 6124 +3 5725 6286 6658 +3 5725 6658 6105 +3 5726 6106 6659 +3 5726 6659 6287 +3 5727 6350 6532 +3 5727 6532 5915 +3 5728 5916 6533 +3 5728 6533 6351 +3 5729 6098 6401 +3 5729 6401 6045 +3 5730 6046 6402 +3 5730 6402 6099 +3 5731 5929 6503 +3 5731 6503 6309 +3 5732 6310 6504 +3 5732 6504 5930 +3 5733 5858 6008 +3 5733 6008 5864 +3 5734 5865 6009 +3 5734 6009 5859 +3 5735 6491 6986 +3 5735 6986 6204 +3 5736 6205 6987 +3 5736 6987 6492 +3 5737 6006 6146 +3 5737 6146 5905 +3 5738 5906 6147 +3 5738 6147 6007 +3 5739 6443 6820 +3 5739 6820 6115 +3 5740 6116 6821 +3 5740 6821 6444 +3 5741 6306 6520 +3 5741 6520 5974 +3 5742 5975 6521 +3 5742 6521 6307 +3 5743 6285 7305 +3 5743 7305 6704 +3 5744 6705 7306 +3 5744 7306 6285 +3 5745 5891 6029 +3 5745 6029 5876 +3 5746 5877 6030 +3 5746 6030 5892 +3 5747 6261 6742 +3 5747 6742 5885 +3 5748 5886 6743 +3 5748 6743 6262 +3 5749 6381 6633 +3 5749 6633 5994 +3 5750 5995 6634 +3 5750 6634 6382 +3 5751 5874 6383 +3 5751 6383 6273 +3 5752 6274 6384 +3 5752 6384 5875 +3 5753 6415 6679 +3 5753 6679 6024 +3 5754 6025 6680 +3 5754 6680 6416 +3 5755 6697 7228 +3 5755 7228 6230 +3 5756 6231 7229 +3 5756 7229 6698 +3 5757 6451 7470 +3 5757 7470 6656 +3 5758 6657 7471 +3 5758 7471 6452 +3 5759 6222 6373 +3 5759 6373 5919 +3 5760 5920 6374 +3 5760 6374 6223 +3 5761 6625 6975 +3 5761 6975 6103 +3 5762 6104 6976 +3 5762 6976 6626 +3 5763 6041 6568 +3 5763 6568 6292 +3 5764 6293 6569 +3 5764 6569 6042 +3 5765 5797 6857 +3 5765 6856 5796 +3 5765 6857 6856 +3 5766 6018 6259 +3 5766 6259 6014 +3 5767 6015 6260 +3 5767 6260 6019 +3 5768 5931 6022 +3 5768 6022 5880 +3 5769 5881 6023 +3 5769 6023 5932 +3 5770 5935 6868 +3 5770 6868 7092 +3 5770 7092 5966 +3 5771 5967 7093 +3 5771 6869 5936 +3 5771 7093 6869 +3 5772 5998 7061 +3 5772 7061 7320 +3 5772 7320 6020 +3 5773 6021 7321 +3 5773 7062 5999 +3 5773 7321 7062 +3 5774 5946 6481 +3 5774 6481 6332 +3 5775 6333 6482 +3 5775 6482 5947 +3 5776 6109 7498 +3 5776 7498 7127 +3 5777 7128 7499 +3 5777 7499 6110 +3 5778 5923 6249 +3 5778 6249 6132 +3 5779 6133 6250 +3 5779 6250 5924 +3 5780 5811 6212 +3 5780 6212 6213 +3 5780 6213 5812 +3 5781 6066 7492 +3 5781 7492 6959 +3 5782 6960 7493 +3 5782 7493 6067 +3 5783 5805 6033 +3 5783 6033 6049 +3 5783 6049 5825 +3 5784 5826 6050 +3 5784 6034 5806 +3 5784 6050 6034 +3 5785 6878 7250 +3 5785 7250 6148 +3 5786 6149 7251 +3 5786 7251 6879 +3 5787 6162 6761 +3 5787 6761 6387 +3 5788 6388 6762 +3 5788 6762 6163 +3 5789 6720 7049 +3 5789 7049 6100 +3 5790 6101 7050 +3 5790 7050 6721 +3 5791 5832 6369 +3 5791 6368 5831 +3 5791 6369 6368 +3 5792 6990 7121 +3 5792 7121 5964 +3 5793 5965 7122 +3 5793 7122 6991 +3 5794 6870 7234 +3 5794 7234 6164 +3 5795 6165 7235 +3 5795 7235 6871 +3 5796 6856 6904 +3 5796 6904 5860 +3 5797 5861 6905 +3 5797 6905 6857 +3 5798 6752 7540 +3 5798 7540 6463 +3 5799 6464 7541 +3 5799 7541 6753 +3 5800 6992 7392 +3 5800 7392 6170 +3 5801 6171 7393 +3 5801 7393 6993 +3 5802 5836 7048 +3 5802 7047 5835 +3 5802 7048 7047 +3 5803 6082 7080 +3 5803 7080 6810 +3 5804 6811 7081 +3 5804 7081 6083 +3 5805 5864 6070 +3 5805 6070 6033 +3 5806 6034 6071 +3 5806 6071 5865 +3 5807 6245 6471 +3 5807 6471 6039 +3 5808 6040 6472 +3 5808 6472 6246 +3 5809 6136 6850 +3 5809 6850 6514 +3 5810 6515 6851 +3 5810 6851 6137 +3 5811 5872 6267 +3 5811 6267 6212 +3 5812 6213 6268 +3 5812 6268 5873 +3 5813 6251 6627 +3 5813 6627 6237 +3 5814 6238 6628 +3 5814 6628 6252 +3 5815 5829 6026 +3 5815 6026 6060 +3 5815 6060 5858 +3 5816 5859 6061 +3 5816 6027 5830 +3 5816 6061 6027 +3 5817 6296 7342 +3 5817 7342 6860 +3 5818 6861 7343 +3 5818 7343 6297 +3 5819 6014 6326 +3 5819 6326 6138 +3 5820 6139 6327 +3 5820 6327 6015 +3 5821 6102 6247 +3 5821 6247 6016 +3 5822 6017 6248 +3 5822 6248 6102 +3 5823 6239 7188 +3 5823 7188 6718 +3 5824 6719 7189 +3 5824 7189 6240 +3 5825 6049 6119 +3 5825 6119 5891 +3 5826 5892 6120 +3 5826 6120 6050 +3 5827 6057 6512 +3 5827 6512 6294 +3 5828 6295 6513 +3 5828 6513 6058 +3 5829 5880 6064 +3 5829 6064 6026 +3 5830 6027 6065 +3 5830 6065 5881 +3 5831 6368 6428 +3 5831 6428 5911 +3 5832 5912 6429 +3 5832 6429 6369 +3 5833 6243 6505 +3 5833 6505 6098 +3 5834 6099 6506 +3 5834 6506 6244 +3 5835 7047 7096 +3 5835 7096 5913 +3 5836 5914 7097 +3 5836 7097 7048 +3 5837 6088 6822 +3 5837 6822 6548 +3 5838 6549 6823 +3 5838 6823 6089 +3 5839 6179 7043 +3 5839 7043 6662 +3 5840 6663 7044 +3 5840 7044 6180 +3 5841 6016 6253 +3 5841 6253 6117 +3 5842 6118 6254 +3 5842 6254 6017 +3 5843 6192 6348 +3 5843 6348 6018 +3 5844 6019 6349 +3 5844 6349 6193 +3 5845 6255 7410 +3 5845 7410 6965 +3 5846 6966 7411 +3 5846 7411 6256 +3 5847 6748 6994 +3 5847 6994 6084 +3 5848 6085 6995 +3 5848 6995 6749 +3 5849 6128 7090 +3 5849 7090 6777 +3 5850 6778 7091 +3 5850 7091 6129 +3 5851 5876 6078 +3 5851 6078 6079 +3 5851 6079 5877 +3 5852 6354 6834 +3 5852 6834 6385 +3 5853 6386 6835 +3 5853 6835 6355 +3 5854 5855 6125 +3 5854 6125 6142 +3 5854 6142 5931 +3 5855 5932 6143 +3 5855 6143 6125 +3 5856 6457 6828 +3 5856 6828 6190 +3 5857 6191 6829 +3 5857 6829 6458 +3 5858 6060 6172 +3 5858 6172 6008 +3 5859 6009 6173 +3 5859 6173 6061 +3 5860 6904 7008 +3 5860 7008 6002 +3 5861 6003 7009 +3 5861 7009 6905 +3 5862 6140 6483 +3 5862 6483 6232 +3 5863 6232 6484 +3 5863 6484 6141 +3 5864 6008 6174 +3 5864 6174 6070 +3 5865 6071 6175 +3 5865 6175 6009 +3 5866 6524 6941 +3 5866 6941 6261 +3 5867 6262 6942 +3 5867 6942 6525 +3 5868 6233 6473 +3 5868 6473 6140 +3 5869 6141 6474 +3 5869 6474 6234 +3 5870 6045 6417 +3 5870 6417 6489 +3 5870 6489 5968 +3 5871 5969 6490 +3 5871 6418 6046 +3 5871 6490 6418 +3 5872 6000 6375 +3 5872 6375 6267 +3 5873 6268 6376 +3 5873 6376 6001 +3 5874 6090 6566 +3 5874 6566 6383 +3 5875 6384 6567 +3 5875 6567 6091 +3 5876 6029 6198 +3 5876 6198 6078 +3 5877 6079 6199 +3 5877 6199 6030 +3 5878 6352 6693 +3 5878 6693 6235 +3 5879 6236 6694 +3 5879 6694 6353 +3 5880 6022 6166 +3 5880 6166 6064 +3 5881 6065 6167 +3 5881 6167 6023 +3 5882 6590 7067 +3 5882 7067 6589 +3 5883 6304 7275 +3 5883 7275 6866 +3 5884 6867 7276 +3 5884 7276 6305 +3 5885 6742 7002 +3 5885 7002 6134 +3 5886 6135 7003 +3 5886 7003 6743 +3 5887 6917 7336 +3 5887 7336 6290 +3 5888 6291 7337 +3 5888 7337 6918 +3 5889 6092 6911 +3 5889 6691 5940 +3 5889 6911 6691 +3 5890 5941 6692 +3 5890 6692 6912 +3 5890 6912 6093 +3 5891 6119 6224 +3 5891 6224 6029 +3 5892 6030 6225 +3 5892 6225 6120 +3 5893 6826 7190 +3 5893 7190 6265 +3 5894 6266 7191 +3 5894 7191 6827 +3 5895 6722 7055 +3 5895 7055 6196 +3 5896 6197 7056 +3 5896 7056 6723 +3 5897 6816 7723 +3 5897 7723 6781 +3 5898 6782 7724 +3 5898 7724 6817 +3 5899 5982 6645 +3 5899 6613 5901 +3 5899 6645 6613 +3 5900 5902 6614 +3 5900 6614 6646 +3 5900 6646 5983 +3 5901 6613 6794 +3 5901 6794 6107 +3 5902 6108 6795 +3 5902 6795 6614 +3 5903 6012 6403 +3 5903 6314 6006 +3 5903 6403 6314 +3 5904 6007 6315 +3 5904 6315 6404 +3 5904 6404 6013 +3 5905 6146 6362 +3 5905 6362 6156 +3 5906 6157 6363 +3 5906 6363 6147 +3 5907 6300 7082 +3 5907 7082 6671 +3 5908 6672 7083 +3 5908 7083 6301 +3 5909 6814 7378 +3 5909 7378 6441 +3 5910 6442 7379 +3 5910 7379 6815 +3 5911 6428 6552 +3 5911 6552 6062 +3 5912 6063 6553 +3 5912 6553 6429 +3 5913 7096 7242 +3 5913 7242 6068 +3 5914 6069 7243 +3 5914 7243 7097 +3 5915 6532 6792 +3 5915 6792 6181 +3 5916 6182 6793 +3 5916 6793 6533 +3 5917 6786 7727 +3 5917 7727 6816 +3 5918 6817 7728 +3 5918 7728 6787 +3 5919 6373 6475 +3 5919 6475 6051 +3 5920 6052 6476 +3 5920 6476 6374 +3 5921 6237 6746 +3 5921 6746 6420 +3 5922 6421 6747 +3 5922 6747 6238 +3 5923 6117 6432 +3 5923 6432 6249 +3 5924 6250 6433 +3 5924 6433 6118 +3 5925 6228 6983 +3 5925 6983 6652 +3 5926 6653 6984 +3 5926 6984 6229 +3 5927 6603 7220 +3 5927 7220 6509 +3 5928 6509 7221 +3 5928 7221 6604 +3 5929 6176 6754 +3 5929 6754 6503 +3 5930 6504 6755 +3 5930 6755 6177 +3 5931 6142 6216 +3 5931 6216 6022 +3 5932 6023 6217 +3 5932 6217 6143 +3 5933 6550 7283 +3 5933 7283 6629 +3 5934 6630 7284 +3 5934 7284 6551 +3 5935 6150 7072 +3 5935 7072 6868 +3 5936 6869 7073 +3 5936 7073 6151 +3 5937 6741 7317 +3 5937 7317 6740 +3 5938 6621 7289 +3 5938 7289 6564 +3 5939 6565 7290 +3 5939 7290 6622 +3 5940 6691 6763 +3 5940 6763 6031 +3 5941 6032 6764 +3 5941 6764 6692 +3 5942 6685 6967 +3 5942 6967 6206 +3 5943 6207 6968 +3 5943 6968 6686 +3 5944 6358 6790 +3 5944 6790 6377 +3 5945 6378 6791 +3 5945 6791 6359 +3 5946 6158 6681 +3 5946 6681 6481 +3 5947 6482 6682 +3 5947 6682 6159 +3 5948 6302 6643 +3 5948 6643 6322 +3 5949 6323 6644 +3 5949 6644 6303 +3 5950 6424 7328 +3 5950 7328 6844 +3 5951 6845 7329 +3 5951 7329 6425 +3 5952 6540 7184 +3 5952 7184 6570 +3 5953 6571 7185 +3 5953 7185 6541 +3 5954 6241 6648 +3 5954 6648 6366 +3 5955 6367 6649 +3 5955 6649 6242 +3 5956 6194 6897 +3 5956 6897 6609 +3 5957 6610 6898 +3 5957 6898 6195 +3 5958 6564 7309 +3 5958 7309 6550 +3 5959 6551 7310 +3 5959 7310 6565 +3 5960 6574 7528 +3 5960 7528 6887 +3 5961 6888 7529 +3 5961 7529 6575 +3 5962 6311 7508 +3 5962 7508 7107 +3 5963 7108 7509 +3 5963 7509 6312 +3 5964 7121 7358 +3 5964 7358 6340 +3 5965 6341 7359 +3 5965 7359 7122 +3 5966 7092 7354 +3 5966 7354 6188 +3 5967 6189 7355 +3 5967 7355 7093 +3 5968 6489 6617 +3 5968 6617 6094 +3 5969 6095 6618 +3 5969 6618 6490 +3 5970 6570 7206 +3 5970 7206 6544 +3 5971 6545 7207 +3 5971 7207 6571 +3 5972 7076 7454 +3 5972 7454 6318 +3 5973 6319 7455 +3 5973 7455 7077 +3 5974 6520 6832 +3 5974 6832 6251 +3 5975 6252 6833 +3 5975 6833 6521 +3 5976 6320 7094 +3 5976 7094 6730 +3 5977 6731 7095 +3 5977 7095 6321 +3 5978 6336 6702 +3 5978 6702 6344 +3 5979 6345 6703 +3 5979 6703 6337 +3 5980 6981 7849 +3 5980 7849 6786 +3 5981 6787 7850 +3 5981 7850 6982 +3 5982 6111 6736 +3 5982 6736 6645 +3 5983 6646 6737 +3 5983 6737 6112 +3 5984 6689 7476 +3 5984 7476 6706 +3 5985 6707 7477 +3 5985 7477 6690 +3 5986 6589 7412 +3 5986 7412 6769 +3 5987 6770 7413 +3 5987 7413 6590 +3 5988 6781 7900 +3 5988 7900 7059 +3 5989 7060 7901 +3 5989 7901 6782 +3 5990 6495 6899 +3 5990 6899 6354 +3 5991 6355 6900 +3 5991 6900 6496 +3 5992 6706 7486 +3 5992 7486 6695 +3 5993 6696 7487 +3 5993 7487 6707 +3 5994 6633 6949 +3 5994 6949 6286 +3 5995 6287 6950 +3 5995 6950 6634 +3 5996 6397 6945 +3 5996 6945 6522 +3 5997 6523 6946 +3 5997 6946 6398 +3 5998 6277 7352 +3 5998 7352 7061 +3 5999 7062 7353 +3 5999 7353 6278 +3 6000 6156 6518 +3 6000 6518 6375 +3 6001 6376 6519 +3 6001 6519 6157 +3 6002 7008 7159 +3 6002 7159 6298 +3 6003 6299 7160 +3 6003 7160 7009 +3 6004 6366 6881 +3 6004 6881 6469 +3 6005 6470 6882 +3 6005 6882 6367 +3 6006 6314 6439 +3 6006 6439 6146 +3 6007 6147 6440 +3 6007 6440 6315 +3 6008 6172 6346 +3 6008 6346 6174 +3 6009 6175 6347 +3 6009 6347 6173 +3 6010 6838 7303 +3 6010 7303 6462 +3 6011 6462 7304 +3 6011 7304 6839 +3 6012 6138 6538 +3 6012 6538 6403 +3 6013 6404 6539 +3 6013 6539 6139 +3 6014 6259 6579 +3 6014 6579 6326 +3 6015 6327 6580 +3 6015 6580 6260 +3 6016 6247 6479 +3 6016 6479 6253 +3 6017 6254 6480 +3 6017 6480 6248 +3 6018 6348 6595 +3 6018 6595 6259 +3 6019 6260 6596 +3 6019 6596 6349 +3 6020 7320 7619 +3 6020 7619 6269 +3 6021 6270 7620 +3 6021 7620 7321 +3 6022 6216 6334 +3 6022 6334 6166 +3 6023 6167 6335 +3 6023 6335 6217 +3 6024 6679 7057 +3 6024 7057 6358 +3 6025 6359 7058 +3 6025 7058 6680 +3 6026 6064 6281 +3 6026 6275 6060 +3 6026 6281 6275 +3 6027 6061 6276 +3 6027 6276 6282 +3 6027 6282 6065 +3 6028 6377 6906 +3 6028 6906 6378 +3 6029 6224 6389 +3 6029 6389 6198 +3 6030 6199 6390 +3 6030 6390 6225 +3 6031 6763 6955 +3 6031 6955 6208 +3 6032 6209 6956 +3 6032 6956 6764 +3 6033 6070 6328 +3 6033 6324 6049 +3 6033 6328 6324 +3 6034 6050 6325 +3 6034 6325 6329 +3 6034 6329 6071 +3 6035 6695 7538 +3 6035 7538 6842 +3 6036 6843 7539 +3 6036 7539 6696 +3 6037 6121 6979 +3 6037 6979 7163 +3 6037 7163 6226 +3 6038 6227 7164 +3 6038 6980 6122 +3 6038 7164 6980 +3 6039 6471 6744 +3 6039 6744 6302 +3 6040 6303 6745 +3 6040 6745 6472 +3 6041 6385 6923 +3 6041 6923 6568 +3 6042 6569 6924 +3 6042 6924 6386 +3 6043 6074 6675 +3 6043 6673 6080 +3 6043 6675 6673 +3 6044 6081 6674 +3 6044 6674 6676 +3 6044 6676 6075 +3 6045 6401 6779 +3 6045 6779 6417 +3 6046 6418 6780 +3 6046 6780 6402 +3 6047 6876 7544 +3 6047 7544 6689 +3 6048 6690 7545 +3 6048 7545 6877 +3 6049 6324 6379 +3 6049 6379 6119 +3 6050 6120 6380 +3 6050 6380 6325 +3 6051 6475 6650 +3 6051 6650 6233 +3 6052 6234 6651 +3 6052 6651 6476 +3 6053 7196 7820 +3 6053 7820 6697 +3 6054 6698 7821 +3 6054 7821 7197 +3 6055 6560 7691 +3 6055 7691 7145 +3 6056 7146 7692 +3 6056 7692 6561 +3 6057 6344 6800 +3 6057 6800 6512 +3 6058 6513 6801 +3 6058 6801 6345 +3 6059 6337 6804 +3 6059 6804 6336 +3 6060 6275 6391 +3 6060 6391 6172 +3 6061 6173 6392 +3 6061 6392 6276 +3 6062 6552 6756 +3 6062 6756 6243 +3 6063 6244 6757 +3 6063 6757 6553 +3 6064 6166 6360 +3 6064 6360 6281 +3 6065 6282 6361 +3 6065 6361 6167 +3 6066 6409 7838 +3 6066 7838 7492 +3 6067 7493 7839 +3 6067 7839 6410 +3 6068 7242 7446 +3 6068 7446 6271 +3 6069 6272 7447 +3 6069 7447 7243 +3 6070 6174 6413 +3 6070 6413 6328 +3 6071 6329 6414 +3 6071 6414 6175 +3 6072 6330 7218 +3 6072 7218 6943 +3 6073 6944 7219 +3 6073 7219 6331 +3 6074 6154 6883 +3 6074 6883 6675 +3 6075 6676 6884 +3 6075 6884 6155 +3 6076 6132 6556 +3 6076 6556 6576 +3 6076 6576 6123 +3 6077 6124 6577 +3 6077 6557 6133 +3 6077 6577 6557 +3 6078 6198 6434 +3 6078 6308 6079 +3 6078 6434 6308 +3 6079 6308 6435 +3 6079 6435 6199 +3 6080 6673 6732 +3 6080 6732 6160 +3 6081 6161 6733 +3 6081 6733 6674 +3 6082 6411 7438 +3 6082 7438 7080 +3 6083 7081 7439 +3 6083 7439 6412 +3 6084 6994 7370 +3 6084 7370 6422 +3 6085 6423 7371 +3 6085 7371 6995 +3 6086 6583 7261 +3 6086 7261 6738 +3 6087 6739 7262 +3 6087 7262 6584 +3 6088 6387 7103 +3 6088 7103 6822 +3 6089 6823 7104 +3 6089 7104 6388 +3 6090 6322 6818 +3 6090 6818 6566 +3 6091 6567 6819 +3 6091 6819 6323 +3 6092 6316 7115 +3 6092 7115 6911 +3 6093 6912 7116 +3 6093 7116 6317 +3 6094 6617 6773 +3 6094 6773 6245 +3 6095 6246 6774 +3 6095 6774 6618 +3 6096 6885 7400 +3 6096 7400 6603 +3 6097 6604 7401 +3 6097 7401 6886 +3 6098 6505 6854 +3 6098 6854 6401 +3 6099 6402 6855 +3 6099 6855 6506 +3 6100 7049 7398 +3 6100 7398 6437 +3 6101 6438 7399 +3 6101 7399 7050 +3 6102 6248 6578 +3 6102 6578 6247 +3 6103 6975 7384 +3 6103 7384 6491 +3 6104 6492 7385 +3 6104 7385 6976 +3 6105 6658 6925 +3 6105 6925 6352 +3 6106 6353 6926 +3 6106 6926 6659 +3 6107 6794 7051 +3 6107 7051 6218 +3 6108 6219 7052 +3 6108 7052 6795 +3 6109 6485 7898 +3 6109 7898 7498 +3 6110 7499 7899 +3 6110 7899 6486 +3 6111 6292 6935 +3 6111 6935 6736 +3 6112 6737 6936 +3 6112 6936 6293 +3 6113 6623 7244 +3 6113 7244 6615 +3 6114 6616 7245 +3 6114 7245 6624 +3 6115 6820 7258 +3 6115 7258 6540 +3 6116 6541 7259 +3 6116 7259 6821 +3 6117 6253 6591 +3 6117 6591 6432 +3 6118 6433 6592 +3 6118 6592 6254 +3 6119 6379 6467 +3 6119 6467 6224 +3 6120 6225 6468 +3 6120 6468 6380 +3 6121 6279 7117 +3 6121 7117 6979 +3 6122 6980 7118 +3 6122 7118 6280 +3 6123 6576 6654 +3 6123 6654 6192 +3 6124 6193 6655 +3 6124 6655 6577 +3 6125 6143 6431 +3 6125 6430 6142 +3 6125 6431 6430 +3 6126 6364 7326 +3 6126 7326 6807 +3 6127 6808 7327 +3 6127 7327 6365 +3 6128 6356 7451 +3 6128 7451 7090 +3 6129 7091 7452 +3 6129 7452 6357 +3 6130 6683 7981 +3 6130 7981 7388 +3 6131 7389 7982 +3 6131 7982 6684 +3 6132 6249 6664 +3 6132 6664 6556 +3 6133 6557 6665 +3 6133 6665 6250 +3 6134 7002 7291 +3 6134 7291 6443 +3 6135 6444 7292 +3 6135 7292 7003 +3 6136 6544 7246 +3 6136 7246 6850 +3 6137 6851 7247 +3 6137 7247 6545 +3 6138 6326 6708 +3 6138 6708 6538 +3 6139 6539 6709 +3 6139 6709 6327 +3 6140 6473 6830 +3 6140 6830 6483 +3 6141 6484 6831 +3 6141 6831 6474 +3 6142 6430 6477 +3 6142 6477 6216 +3 6143 6217 6478 +3 6143 6478 6431 +3 6144 6929 7770 +3 6144 7770 7012 +3 6145 7013 7771 +3 6145 7771 6930 +3 6146 6439 6639 +3 6146 6639 6362 +3 6147 6363 6640 +3 6147 6640 6440 +3 6148 7250 7689 +3 6148 7689 6599 +3 6149 6600 7690 +3 6149 7690 7251 +3 6150 6445 7372 +3 6150 7372 7072 +3 6151 7073 7373 +3 6151 7373 6446 +3 6152 6988 7779 +3 6152 7779 6937 +3 6153 6938 7780 +3 6153 7780 6989 +3 6154 6294 7000 +3 6154 7000 6883 +3 6155 6884 7001 +3 6155 7001 6295 +3 6156 6362 6726 +3 6156 6726 6518 +3 6157 6519 6727 +3 6157 6727 6363 +3 6158 6420 6961 +3 6158 6961 6681 +3 6159 6682 6962 +3 6159 6962 6421 +3 6160 6732 6891 +3 6160 6891 6306 +3 6161 6307 6892 +3 6161 6892 6733 +3 6162 6615 7222 +3 6162 7222 6761 +3 6163 6762 7223 +3 6163 7223 6616 +3 6164 7234 8128 +3 6164 8128 6981 +3 6165 6982 8129 +3 6165 8129 7235 +3 6166 6334 6510 +3 6166 6510 6360 +3 6167 6361 6511 +3 6167 6511 6335 +3 6168 6937 7792 +3 6168 7792 6929 +3 6169 6930 7793 +3 6169 7793 6938 +3 6170 7392 7855 +3 6170 7855 6635 +3 6171 6636 7856 +3 6171 7856 7393 +3 6172 6391 6554 +3 6172 6554 6346 +3 6173 6347 6555 +3 6173 6555 6392 +3 6174 6346 6558 +3 6174 6558 6413 +3 6175 6414 6559 +3 6175 6559 6347 +3 6176 6469 7074 +3 6176 7074 6754 +3 6177 6755 7075 +3 6177 7075 6470 +3 6178 6584 7181 +3 6178 7181 6583 +3 6179 6629 7448 +3 6179 7448 7043 +3 6180 7044 7449 +3 6180 7449 6630 +3 6181 6792 7101 +3 6181 7101 6495 +3 6182 6496 7102 +3 6182 7102 6793 +3 6183 6465 7590 +3 6183 7590 6973 +3 6184 6974 7591 +3 6184 7591 6466 +3 6185 6210 6998 +3 6185 6998 6999 +3 6185 6999 6211 +3 6186 7109 7750 +3 6186 7750 6838 +3 6187 6839 7751 +3 6187 7751 7110 +3 6188 7354 7652 +3 6188 7652 6497 +3 6189 6498 7653 +3 6189 7653 7355 +3 6190 6828 7232 +3 6190 7232 6623 +3 6191 6624 7233 +3 6191 7233 6829 +3 6192 6654 6798 +3 6192 6798 6348 +3 6193 6349 6799 +3 6193 6799 6655 +3 6194 6522 7208 +3 6194 7208 6897 +3 6195 6898 7209 +3 6195 7209 6523 +3 6196 7055 7416 +3 6196 7416 6621 +3 6197 6622 7417 +3 6197 7417 7056 +3 6198 6389 6619 +3 6198 6619 6434 +3 6199 6435 6620 +3 6199 6620 6390 +3 6200 6257 7484 +3 6200 7453 6201 +3 6200 7484 7453 +3 6201 7453 7485 +3 6201 7485 6258 +3 6202 6704 7861 +3 6202 7861 7344 +3 6203 7347 7862 +3 6203 7862 6705 +3 6204 6986 7516 +3 6204 7516 6720 +3 6205 6721 7517 +3 6205 7517 6987 +3 6206 6967 7301 +3 6206 7301 6524 +3 6207 6525 7302 +3 6207 7302 6968 +3 6208 6955 7204 +3 6208 7204 6457 +3 6209 6458 7205 +3 6209 7205 6956 +3 6210 6309 7070 +3 6210 7070 6998 +3 6211 6999 7071 +3 6211 7071 6310 +3 6212 6267 6724 +3 6212 6699 6213 +3 6212 6724 6699 +3 6213 6699 6725 +3 6213 6725 6268 +3 6214 6215 7129 +3 6214 7129 7175 +3 6214 7175 6283 +3 6215 6284 7176 +3 6215 7176 7129 +3 6216 6477 6581 +3 6216 6581 6334 +3 6217 6335 6582 +3 6217 6582 6478 +3 6218 7051 7226 +3 6218 7226 6415 +3 6219 6416 7227 +3 6219 7227 7052 +3 6220 6273 6921 +3 6220 6895 6222 +3 6220 6921 6895 +3 6221 6223 6896 +3 6221 6896 6922 +3 6221 6922 6274 +3 6222 6895 6919 +3 6222 6919 6373 +3 6223 6374 6920 +3 6223 6920 6896 +3 6224 6467 6637 +3 6224 6637 6389 +3 6225 6390 6638 +3 6225 6638 6468 +3 6226 7163 7414 +3 6226 7414 6453 +3 6227 6454 7415 +3 6227 7415 7164 +3 6228 6609 7364 +3 6228 7364 6983 +3 6229 6984 7365 +3 6229 7365 6610 +3 6230 7228 7764 +3 6230 7764 6783 +3 6231 6783 7765 +3 6231 7765 7229 +3 6232 6483 6903 +3 6232 6903 6484 +3 6233 6650 6901 +3 6233 6901 6473 +3 6234 6474 6902 +3 6234 6902 6651 +3 6235 6693 7105 +3 6235 7105 6350 +3 6236 6351 7106 +3 6236 7106 6694 +3 6237 6627 7130 +3 6237 7130 6746 +3 6238 6747 7131 +3 6238 7131 6628 +3 6239 6769 7683 +3 6239 7683 7188 +3 6240 7189 7684 +3 6240 7684 6770 +3 6241 6332 7026 +3 6241 7026 6648 +3 6242 6649 7027 +3 6242 7027 6333 +3 6243 6756 7030 +3 6243 7030 6505 +3 6244 6506 7031 +3 6244 7031 6757 +3 6245 6773 7016 +3 6245 7016 6471 +3 6246 6472 7017 +3 6246 7017 6774 +3 6247 6578 6775 +3 6247 6775 6479 +3 6248 6480 6776 +3 6248 6776 6578 +3 6249 6432 6858 +3 6249 6858 6664 +3 6250 6665 6859 +3 6250 6859 6433 +3 6251 6832 7165 +3 6251 7165 6627 +3 6252 6628 7166 +3 6252 7166 6833 +3 6253 6479 6784 +3 6253 6784 6591 +3 6254 6592 6785 +3 6254 6785 6480 +3 6255 7059 8248 +3 6255 8248 7410 +3 6256 7411 8249 +3 6256 8249 7060 +3 6257 6371 7572 +3 6257 7572 7484 +3 6258 7485 7573 +3 6258 7573 6372 +3 6259 6595 6874 +3 6259 6874 6579 +3 6260 6580 6875 +3 6260 6875 6596 +3 6261 6941 7428 +3 6261 7428 6742 +3 6262 6743 7429 +3 6262 7429 6942 +3 6263 6740 7721 +3 6263 7721 7236 +3 6264 7237 7722 +3 6264 7722 6741 +3 6265 7190 8010 +3 6265 8010 6988 +3 6266 6989 8011 +3 6266 8011 7191 +3 6267 6375 6852 +3 6267 6852 6724 +3 6268 6725 6853 +3 6268 6853 6376 +3 6269 7619 8006 +3 6269 8006 6597 +3 6270 6598 8007 +3 6270 8007 7620 +3 6271 7446 8000 +3 6271 8000 6546 +3 6272 6547 8001 +3 6272 8001 7447 +3 6273 6383 7020 +3 6273 7020 6921 +3 6274 6922 7021 +3 6274 7021 6384 +3 6275 6281 6572 +3 6275 6572 6668 +3 6275 6668 6391 +3 6276 6392 6669 +3 6276 6573 6282 +3 6276 6669 6573 +3 6277 6656 7707 +3 6277 7707 7352 +3 6278 7353 7708 +3 6278 7708 6657 +3 6279 6514 7374 +3 6279 7374 7117 +3 6280 7118 7375 +3 6280 7375 6515 +3 6281 6360 6631 +3 6281 6631 6572 +3 6282 6573 6632 +3 6282 6632 6361 +3 6283 7175 7248 +3 6283 7248 6381 +3 6284 6382 7249 +3 6284 7249 7176 +3 6285 7306 7962 +3 6285 7962 7305 +3 6286 6949 7322 +3 6286 7322 6658 +3 6287 6659 7323 +3 6287 7323 6950 +3 6288 6536 7816 +3 6288 7570 6507 +3 6288 7816 7570 +3 6289 6508 7571 +3 6289 7571 7817 +3 6289 7817 6537 +3 6290 7336 7818 +3 6290 7818 6814 +3 6291 6815 7819 +3 6291 7819 7337 +3 6292 6568 7198 +3 6292 7198 6935 +3 6293 6936 7199 +3 6293 7199 6569 +3 6294 6512 7202 +3 6294 7202 7000 +3 6295 7001 7203 +3 6295 7203 6513 +3 6296 6887 7937 +3 6296 7937 7342 +3 6297 7343 7938 +3 6297 7938 6888 +3 6298 7159 7556 +3 6298 7556 6685 +3 6299 6686 7557 +3 6299 7557 7160 +3 6300 6807 7568 +3 6300 7568 7082 +3 6301 7083 7569 +3 6301 7569 6808 +3 6302 6744 7084 +3 6302 7084 6643 +3 6303 6644 7085 +3 6303 7085 6745 +3 6304 7012 8065 +3 6304 8065 7275 +3 6305 7276 8066 +3 6305 8066 7013 +3 6306 6891 7078 +3 6306 7078 6520 +3 6307 6521 7079 +3 6307 7079 6892 +3 6308 6434 6670 +3 6308 6670 6435 +3 6309 6503 7153 +3 6309 7153 7070 +3 6310 7071 7154 +3 6310 7154 6504 +3 6311 6687 7896 +3 6311 7896 7508 +3 6312 7509 7897 +3 6312 7897 6688 +3 6313 6338 7548 +3 6313 7548 7549 +3 6313 7549 6339 +3 6314 6403 6893 +3 6314 6788 6439 +3 6314 6893 6788 +3 6315 6440 6789 +3 6315 6789 6894 +3 6315 6894 6404 +3 6316 6493 7434 +3 6316 7434 7115 +3 6317 7116 7435 +3 6317 7435 6494 +3 6318 7454 7884 +3 6318 7884 6752 +3 6319 6753 7885 +3 6319 7885 7455 +3 6320 6738 7532 +3 6320 7532 7094 +3 6321 7095 7533 +3 6321 7533 6739 +3 6322 6643 7098 +3 6322 7098 6818 +3 6323 6819 7099 +3 6323 7099 6644 +3 6324 6328 6666 +3 6324 6666 6700 +3 6324 6700 6379 +3 6325 6380 6701 +3 6325 6667 6329 +3 6325 6701 6667 +3 6326 6579 6963 +3 6326 6963 6708 +3 6327 6709 6964 +3 6327 6964 6580 +3 6328 6413 6714 +3 6328 6714 6666 +3 6329 6667 6715 +3 6329 6715 6414 +3 6330 6671 7550 +3 6330 7550 7218 +3 6331 7219 7551 +3 6331 7551 6672 +3 6332 6481 7119 +3 6332 7119 7026 +3 6333 7027 7120 +3 6333 7120 6482 +3 6334 6581 6710 +3 6334 6710 6510 +3 6335 6511 6711 +3 6335 6711 6582 +3 6336 6804 7140 +3 6336 7140 6702 +3 6337 6703 7141 +3 6337 7141 6804 +3 6338 6426 7611 +3 6338 7611 7548 +3 6339 7549 7612 +3 6339 7612 6427 +3 6340 7358 7617 +3 6340 7617 6625 +3 6341 6626 7618 +3 6341 7618 7359 +3 6342 6534 7656 +3 6342 7442 6501 +3 6342 7656 7442 +3 6343 6502 7443 +3 6343 7443 7657 +3 6343 7657 6535 +3 6344 6702 7134 +3 6344 7134 6800 +3 6345 6801 7135 +3 6345 7135 6703 +3 6346 6554 6767 +3 6346 6767 6558 +3 6347 6559 6768 +3 6347 6768 6555 +3 6348 6798 7010 +3 6348 7010 6595 +3 6349 6596 7011 +3 6349 7011 6799 +3 6350 7105 7265 +3 6350 7265 6532 +3 6351 6533 7266 +3 6351 7266 7106 +3 6352 6925 7252 +3 6352 7252 6693 +3 6353 6694 7253 +3 6353 7253 6926 +3 6354 6899 7332 +3 6354 7332 6834 +3 6355 6835 7333 +3 6355 7333 6900 +3 6356 6718 7804 +3 6356 7804 7451 +3 6357 7452 7805 +3 6357 7805 6719 +3 6358 7057 7464 +3 6358 7464 6790 +3 6359 6791 7465 +3 6359 7465 7058 +3 6360 6510 6734 +3 6360 6734 6631 +3 6361 6632 6735 +3 6361 6735 6511 +3 6362 6639 7022 +3 6362 7022 6726 +3 6363 6727 7023 +3 6363 7023 6640 +3 6364 6662 7607 +3 6364 7607 7326 +3 6365 7327 7608 +3 6365 7608 6663 +3 6366 6648 7123 +3 6366 7123 6881 +3 6367 6882 7124 +3 6367 7124 6649 +3 6368 6369 7038 +3 6368 7038 7063 +3 6368 7063 6428 +3 6369 6429 7064 +3 6369 7064 7038 +3 6370 6393 6399 +3 6370 6394 6393 +3 6370 6399 6405 +3 6370 6400 6394 +3 6370 6405 6406 +3 6370 6406 6400 +3 6371 6530 7711 +3 6371 7711 7572 +3 6372 7573 7712 +3 6372 7712 6531 +3 6373 6919 7004 +3 6373 7004 6475 +3 6374 6476 7005 +3 6374 7005 6920 +3 6375 6518 6977 +3 6375 6977 6852 +3 6376 6853 6978 +3 6376 6978 6519 +3 6377 6790 7299 +3 6377 7299 6906 +3 6378 6906 7300 +3 6378 7300 6791 +3 6379 6700 6802 +3 6379 6802 6467 +3 6380 6468 6803 +3 6380 6803 6701 +3 6381 7248 7382 +3 6381 7382 6633 +3 6382 6634 7383 +3 6382 7383 7249 +3 6383 6566 7147 +3 6383 7147 7020 +3 6384 7021 7148 +3 6384 7148 6567 +3 6385 6834 7340 +3 6385 7340 6923 +3 6386 6924 7341 +3 6386 7341 6835 +3 6387 6761 7472 +3 6387 7472 7103 +3 6388 7104 7473 +3 6388 7473 6762 +3 6389 6637 6862 +3 6389 6862 6619 +3 6390 6620 6863 +3 6390 6863 6638 +3 6391 6668 6846 +3 6391 6846 6554 +3 6392 6555 6847 +3 6392 6847 6669 +3 6393 6394 6436 +3 6393 6436 6460 +3 6393 6449 6399 +3 6393 6460 6449 +3 6394 6400 6450 +3 6394 6450 6461 +3 6394 6461 6436 +3 6395 7281 8221 +3 6395 8221 7297 +3 6396 7298 8222 +3 6396 8222 7282 +3 6397 6548 7424 +3 6397 7424 6945 +3 6398 6946 7425 +3 6398 7425 6549 +3 6399 6449 6487 +3 6399 6455 6405 +3 6399 6487 6455 +3 6400 6406 6456 +3 6400 6456 6488 +3 6400 6488 6450 +3 6401 6854 7224 +3 6401 7224 6779 +3 6402 6780 7225 +3 6402 7225 6855 +3 6403 6538 7018 +3 6403 7018 6893 +3 6404 6894 7019 +3 6404 7019 6539 +3 6405 6455 6499 +3 6405 6459 6406 +3 6405 6499 6459 +3 6406 6459 6500 +3 6406 6500 6456 +3 6407 7297 8236 +3 6407 8236 7285 +3 6408 7286 8237 +3 6408 8237 7298 +3 6409 6860 8323 +3 6409 8323 7838 +3 6410 7839 8324 +3 6410 8324 6861 +3 6411 6844 7834 +3 6411 7834 7438 +3 6412 7439 7835 +3 6412 7835 6845 +3 6413 6558 6864 +3 6413 6864 6714 +3 6414 6715 6865 +3 6414 6865 6559 +3 6415 7226 7460 +3 6415 7460 6679 +3 6416 6680 7461 +3 6416 7461 7227 +3 6417 6779 7088 +3 6417 7088 6489 +3 6418 6490 7089 +3 6418 7089 6780 +3 6419 6447 7504 +3 6419 7504 7505 +3 6419 7505 6448 +3 6420 6746 7267 +3 6420 7267 6961 +3 6421 6962 7268 +3 6421 7268 6747 +3 6422 7370 7766 +3 6422 7766 6885 +3 6423 6886 7767 +3 6423 7767 7371 +3 6424 6973 7873 +3 6424 7873 7328 +3 6425 7329 7874 +3 6425 7874 6974 +3 6426 6587 7742 +3 6426 7742 7611 +3 6427 7612 7743 +3 6427 7743 6588 +3 6428 7063 7149 +3 6428 7149 6552 +3 6429 6553 7150 +3 6429 7150 7064 +3 6430 6431 6809 +3 6430 6809 6840 +3 6430 6840 6477 +3 6431 6478 6841 +3 6431 6841 6809 +3 6432 6591 6971 +3 6432 6971 6858 +3 6433 6859 6972 +3 6433 6972 6592 +3 6434 6619 6848 +3 6434 6848 6670 +3 6435 6670 6849 +3 6435 6849 6620 +3 6436 6461 6529 +3 6436 6528 6460 +3 6436 6529 6528 +3 6437 7398 7810 +3 6437 7810 6876 +3 6438 6877 7811 +3 6438 7811 7399 +3 6439 6788 6969 +3 6439 6969 6639 +3 6440 6640 6970 +3 6440 6970 6789 +3 6441 7378 8040 +3 6441 8040 7076 +3 6442 7077 8041 +3 6442 8041 7379 +3 6443 7291 7630 +3 6443 7630 6820 +3 6444 6821 7631 +3 6444 7631 7292 +3 6445 6842 7719 +3 6445 7719 7372 +3 6446 7373 7720 +3 6446 7720 6843 +3 6447 6516 7552 +3 6447 7552 7504 +3 6448 7505 7553 +3 6448 7553 6517 +3 6449 6460 6562 +3 6449 6562 6585 +3 6449 6585 6487 +3 6450 6488 6586 +3 6450 6563 6461 +3 6450 6586 6563 +3 6451 7285 8368 +3 6451 8368 7470 +3 6452 7471 8369 +3 6452 8369 7286 +3 6453 7414 7699 +3 6453 7699 6748 +3 6454 6749 7700 +3 6454 7700 7415 +3 6455 6487 6593 +3 6455 6593 6605 +3 6455 6605 6499 +3 6456 6500 6606 +3 6456 6594 6488 +3 6456 6606 6594 +3 6457 7204 7502 +3 6457 7502 6828 +3 6458 6829 7503 +3 6458 7503 7205 +3 6459 6499 6607 +3 6459 6607 6608 +3 6459 6608 6500 +3 6460 6528 6601 +3 6460 6601 6562 +3 6461 6563 6602 +3 6461 6602 6529 +3 6462 7303 7844 +3 6462 7844 7304 +3 6463 7540 8410 +3 6463 8410 7281 +3 6464 7282 8411 +3 6464 8411 7541 +3 6465 6866 7973 +3 6465 7973 7590 +3 6466 7591 7974 +3 6466 7974 6867 +3 6467 6802 6939 +3 6467 6939 6637 +3 6468 6638 6940 +3 6468 6940 6803 +3 6469 6881 7444 +3 6469 7444 7074 +3 6470 7075 7445 +3 6470 7445 6882 +3 6471 7016 7263 +3 6471 7263 6744 +3 6472 6745 7264 +3 6472 7264 7017 +3 6473 6901 7200 +3 6473 7200 6830 +3 6474 6831 7201 +3 6474 7201 6902 +3 6475 7004 7138 +3 6475 7138 6650 +3 6476 6651 7139 +3 6476 7139 7005 +3 6477 6840 6907 +3 6477 6907 6581 +3 6478 6582 6908 +3 6478 6908 6841 +3 6479 6775 7068 +3 6479 7068 6784 +3 6480 6785 7069 +3 6480 7069 6776 +3 6481 6681 7315 +3 6481 7315 7119 +3 6482 7120 7316 +3 6482 7316 6682 +3 6483 6830 7192 +3 6483 7192 6903 +3 6484 6903 7193 +3 6484 7193 6831 +3 6485 6909 8356 +3 6485 8356 7898 +3 6486 7899 8357 +3 6486 8357 6910 +3 6487 6585 6641 +3 6487 6641 6593 +3 6488 6594 6642 +3 6488 6642 6586 +3 6489 7088 7186 +3 6489 7186 6617 +3 6490 6618 7187 +3 6490 7187 7089 +3 6491 7384 7853 +3 6491 7853 6986 +3 6492 6987 7854 +3 6492 7854 7385 +3 6493 6730 7640 +3 6493 7640 7434 +3 6494 7435 7641 +3 6494 7641 6731 +3 6495 7101 7488 +3 6495 7488 6899 +3 6496 6900 7489 +3 6496 7489 7102 +3 6497 7652 8063 +3 6497 8063 6878 +3 6498 6879 8064 +3 6498 8064 7653 +3 6499 6605 6660 +3 6499 6660 6607 +3 6500 6608 6661 +3 6500 6661 6606 +3 6501 7442 7628 +3 6501 7628 6722 +3 6502 6723 7629 +3 6502 7629 7443 +3 6503 6754 7404 +3 6503 7404 7153 +3 6504 7154 7405 +3 6504 7405 6755 +3 6505 7030 7324 +3 6505 7324 6854 +3 6506 6855 7325 +3 6506 7325 7031 +3 6507 7570 7847 +3 6507 7847 6826 +3 6508 6827 7848 +3 6508 7848 7571 +3 6509 7220 7662 +3 6509 7662 7221 +3 6510 6710 6933 +3 6510 6933 6734 +3 6511 6735 6934 +3 6511 6934 6711 +3 6512 6800 7456 +3 6512 7456 7202 +3 6513 7203 7457 +3 6513 7457 6801 +3 6514 6850 7642 +3 6514 7642 7374 +3 6515 7375 7643 +3 6515 7643 6851 +3 6516 6652 7647 +3 6516 7647 7552 +3 6517 7553 7648 +3 6517 7648 6653 +3 6518 6726 7173 +3 6518 7173 6977 +3 6519 6978 7174 +3 6519 7174 6727 +3 6520 7078 7348 +3 6520 7348 6832 +3 6521 6833 7349 +3 6521 7349 7079 +3 6522 6945 7597 +3 6522 7597 7208 +3 6523 7209 7598 +3 6523 7598 6946 +3 6524 7301 7687 +3 6524 7687 6941 +3 6525 6942 7688 +3 6525 7688 7302 +3 6526 6611 8020 +3 6526 7983 6527 +3 6526 8020 7983 +3 6527 7983 8021 +3 6527 8021 6612 +3 6528 6529 6647 +3 6528 6647 6677 +3 6528 6677 6601 +3 6529 6602 6678 +3 6529 6678 6647 +3 6530 6943 7934 +3 6530 7934 7711 +3 6531 7712 7935 +3 6531 7935 6944 +3 6532 7265 7522 +3 6532 7522 6792 +3 6533 6793 7523 +3 6533 7523 7266 +3 6534 6777 7923 +3 6534 7923 7656 +3 6535 7657 7924 +3 6535 7924 6778 +3 6536 6796 8158 +3 6536 8158 7816 +3 6537 7817 8159 +3 6537 8159 6797 +3 6538 6708 7179 +3 6538 7179 7018 +3 6539 7019 7180 +3 6539 7180 6709 +3 6540 7258 7892 +3 6540 7892 7184 +3 6541 7185 7893 +3 6541 7893 7259 +3 6542 6836 8392 +3 6542 8098 6870 +3 6542 8392 8098 +3 6543 6871 8099 +3 6543 8099 8393 +3 6543 8393 6837 +3 6544 7206 7907 +3 6544 7907 7246 +3 6545 7247 7908 +3 6545 7908 7207 +3 6546 8000 8348 +3 6546 8348 6917 +3 6547 6918 8349 +3 6547 8349 8001 +3 6548 6822 7644 +3 6548 7644 7424 +3 6549 7425 7645 +3 6549 7645 6823 +3 6550 7309 8061 +3 6550 8061 7283 +3 6551 7284 8062 +3 6551 8062 7310 +3 6552 7149 7356 +3 6552 7356 6756 +3 6553 6757 7357 +3 6553 7357 7150 +3 6554 6846 7039 +3 6554 7039 6767 +3 6555 6768 7040 +3 6555 7040 6847 +3 6556 6664 7136 +3 6556 7132 6576 +3 6556 7136 7132 +3 6557 6577 7133 +3 6557 7133 7137 +3 6557 7137 6665 +3 6558 6767 7045 +3 6558 7045 6864 +3 6559 6865 7046 +3 6559 7046 6768 +3 6560 7236 8360 +3 6560 8360 7691 +3 6561 7692 8363 +3 6561 8363 7237 +3 6562 6601 6716 +3 6562 6712 6585 +3 6562 6716 6712 +3 6563 6586 6713 +3 6563 6713 6717 +3 6563 6717 6602 +3 6564 7289 8079 +3 6564 8079 7309 +3 6565 7310 8080 +3 6565 8080 7290 +3 6566 6818 7380 +3 6566 7380 7147 +3 6567 7148 7381 +3 6567 7381 6819 +3 6568 6923 7524 +3 6568 7524 7198 +3 6569 7199 7525 +3 6569 7525 6924 +3 6570 7184 7921 +3 6570 7921 7206 +3 6571 7207 7922 +3 6571 7922 7185 +3 6572 6631 6931 +3 6572 6931 7036 +3 6572 7036 6668 +3 6573 6669 7037 +3 6573 6932 6632 +3 6573 7037 6932 +3 6574 6965 8285 +3 6574 8285 7528 +3 6575 7529 8286 +3 6575 8286 6966 +3 6576 7132 7210 +3 6576 7210 6654 +3 6577 6655 7211 +3 6577 7211 7133 +3 6578 6776 7142 +3 6578 7142 6775 +3 6579 6874 7238 +3 6579 7238 6963 +3 6580 6964 7239 +3 6580 7239 6875 +3 6581 6907 7024 +3 6581 7024 6710 +3 6582 6711 7025 +3 6582 7025 6908 +3 6583 7181 7857 +3 6583 7857 7261 +3 6584 7262 7858 +3 6584 7858 7181 +3 6585 6712 6758 +3 6585 6758 6641 +3 6586 6642 6759 +3 6586 6759 6713 +3 6587 6810 7965 +3 6587 7965 7742 +3 6588 7743 7966 +3 6588 7966 6811 +3 6589 7067 7871 +3 6589 7871 7412 +3 6590 7413 7872 +3 6590 7872 7067 +3 6591 6784 7143 +3 6591 7143 6971 +3 6592 6972 7144 +3 6592 7144 6785 +3 6593 6641 6771 +3 6593 6750 6605 +3 6593 6771 6750 +3 6594 6606 6751 +3 6594 6751 6772 +3 6594 6772 6642 +3 6595 7010 7256 +3 6595 7256 6874 +3 6596 6875 7257 +3 6596 7257 7011 +3 6597 8006 8402 +3 6597 8402 6992 +3 6598 6993 8403 +3 6598 8403 8007 +3 6599 7689 8250 +3 6599 8250 7109 +3 6600 7110 8251 +3 6600 8251 7690 +3 6601 6677 6765 +3 6601 6765 6716 +3 6602 6717 6766 +3 6602 6766 6678 +3 6603 7400 8046 +3 6603 8046 7220 +3 6604 7221 8047 +3 6604 8047 7401 +3 6605 6750 6805 +3 6605 6805 6660 +3 6606 6661 6806 +3 6606 6806 6751 +3 6607 6660 6812 +3 6607 6760 6608 +3 6607 6812 6760 +3 6608 6760 6813 +3 6608 6813 6661 +3 6609 6897 7615 +3 6609 7615 7364 +3 6610 7365 7616 +3 6610 7616 6898 +3 6611 6728 8144 +3 6611 8144 8020 +3 6612 8021 8145 +3 6612 8145 6729 +3 6613 6645 7422 +3 6613 7422 7603 +3 6613 7603 6794 +3 6614 6795 7604 +3 6614 7423 6646 +3 6614 7604 7423 +3 6615 7244 7822 +3 6615 7822 7222 +3 6616 7223 7823 +3 6616 7823 7245 +3 6617 7186 7334 +3 6617 7334 6773 +3 6618 6774 7335 +3 6618 7335 7187 +3 6619 6862 7041 +3 6619 7041 6848 +3 6620 6849 7042 +3 6620 7042 6863 +3 6621 7416 8134 +3 6621 8134 7289 +3 6622 7290 8135 +3 6622 8135 7417 +3 6623 7232 7840 +3 6623 7840 7244 +3 6624 7245 7841 +3 6624 7841 7233 +3 6625 7617 7986 +3 6625 7986 6975 +3 6626 6976 7987 +3 6626 7987 7618 +3 6627 7165 7584 +3 6627 7584 7130 +3 6628 7131 7585 +3 6628 7585 7166 +3 6629 7283 8140 +3 6629 8140 7448 +3 6630 7449 8141 +3 6630 8141 7284 +3 6631 6734 7028 +3 6631 7028 6931 +3 6632 6932 7029 +3 6632 7029 6735 +3 6633 7382 7669 +3 6633 7669 6949 +3 6634 6950 7670 +3 6634 7670 7383 +3 6635 7855 8490 +3 6635 8490 7196 +3 6636 7197 8491 +3 6636 8491 7856 +3 6637 6939 7111 +3 6637 7111 6862 +3 6638 6863 7112 +3 6638 7112 6940 +3 6639 6969 7330 +3 6639 7330 7022 +3 6640 7023 7331 +3 6640 7331 6970 +3 6641 6758 6872 +3 6641 6872 6771 +3 6642 6772 6873 +3 6642 6873 6759 +3 6643 7084 7468 +3 6643 7468 7098 +3 6644 7099 7469 +3 6644 7469 7085 +3 6645 6736 7496 +3 6645 7496 7422 +3 6646 7423 7497 +3 6646 7497 6737 +3 6647 6678 6825 +3 6647 6824 6677 +3 6647 6825 6824 +3 6648 7026 7478 +3 6648 7478 7123 +3 6649 7124 7479 +3 6649 7479 7027 +3 6650 7138 7368 +3 6650 7368 6901 +3 6651 6902 7369 +3 6651 7369 7139 +3 6652 6983 7796 +3 6652 7796 7647 +3 6653 7648 7797 +3 6653 7797 6984 +3 6654 7210 7311 +3 6654 7311 6798 +3 6655 6799 7312 +3 6655 7312 7211 +3 6656 7470 8612 +3 6656 8612 7707 +3 6657 7708 8613 +3 6657 8613 7471 +3 6658 7322 7588 +3 6658 7588 6925 +3 6659 6926 7589 +3 6659 7589 7323 +3 6660 6805 6915 +3 6660 6915 6812 +3 6661 6813 6916 +3 6661 6916 6806 +3 6662 7043 7996 +3 6662 7996 7607 +3 6663 7608 7997 +3 6663 7997 7044 +3 6664 6858 7295 +3 6664 7295 7136 +3 6665 7137 7296 +3 6665 7296 6859 +3 6666 6714 7113 +3 6666 7086 6700 +3 6666 7113 7086 +3 6667 6701 7087 +3 6667 7087 7114 +3 6667 7114 6715 +3 6668 7036 7155 +3 6668 7155 6846 +3 6669 6847 7156 +3 6669 7156 7037 +3 6670 6848 7100 +3 6670 7100 6849 +3 6671 7082 7956 +3 6671 7956 7550 +3 6672 7551 7957 +3 6672 7957 7083 +3 6673 6675 7390 +3 6673 7390 7426 +3 6673 7426 6732 +3 6674 6733 7427 +3 6674 7391 6676 +3 6674 7427 7391 +3 6675 6883 7566 +3 6675 7566 7390 +3 6676 7391 7567 +3 6676 7567 6884 +3 6677 6824 6889 +3 6677 6889 6765 +3 6678 6766 6890 +3 6678 6890 6825 +3 6679 7460 7789 +3 6679 7789 7057 +3 6680 7058 7790 +3 6680 7790 7461 +3 6681 6961 7564 +3 6681 7564 7315 +3 6682 7316 7565 +3 6682 7565 6962 +3 6683 7344 8667 +3 6683 8667 7981 +3 6684 7982 8668 +3 6684 8668 7347 +3 6685 7556 7812 +3 6685 7812 6967 +3 6686 6968 7813 +3 6686 7813 7557 +3 6687 7145 8398 +3 6687 8398 7896 +3 6688 7897 8399 +3 6688 8399 7146 +3 6689 7544 8352 +3 6689 8352 7476 +3 6690 7477 8353 +3 6690 8353 7545 +3 6691 6911 7800 +3 6691 7623 6763 +3 6691 7800 7623 +3 6692 6764 7624 +3 6692 7624 7801 +3 6692 7801 6912 +3 6693 7252 7626 +3 6693 7626 7105 +3 6694 7106 7627 +3 6694 7627 7253 +3 6695 7486 8364 +3 6695 8364 7538 +3 6696 7539 8365 +3 6696 8365 7487 +3 6697 7820 8384 +3 6697 8384 7228 +3 6698 7229 8385 +3 6698 8385 7821 +3 6699 6724 7293 +3 6699 7293 7294 +3 6699 7294 6725 +3 6700 7086 7151 +3 6700 7151 6802 +3 6701 6803 7152 +3 6701 7152 7087 +3 6702 7140 7562 +3 6702 7562 7134 +3 6703 7135 7563 +3 6703 7563 7141 +3 6704 7305 8507 +3 6704 8507 7861 +3 6705 7862 8508 +3 6705 8508 7306 +3 6706 7476 8372 +3 6706 8372 7486 +3 6707 7487 8373 +3 6707 8373 7477 +3 6708 6963 7402 +3 6708 7402 7179 +3 6709 7180 7403 +3 6709 7403 6964 +3 6710 7024 7177 +3 6710 7177 6933 +3 6711 6934 7178 +3 6711 7178 7025 +3 6712 6716 6927 +3 6712 6927 6947 +3 6712 6947 6758 +3 6713 6759 6948 +3 6713 6928 6717 +3 6713 6948 6928 +3 6714 6864 7230 +3 6714 7230 7113 +3 6715 7114 7231 +3 6715 7231 6865 +3 6716 6765 6953 +3 6716 6953 6927 +3 6717 6928 6954 +3 6717 6954 6766 +3 6718 7188 8287 +3 6718 8287 7804 +3 6719 7805 8288 +3 6719 8288 7189 +3 6720 7516 8154 +3 6720 8154 7049 +3 6721 7050 8155 +3 6721 8155 7517 +3 6722 7628 7939 +3 6722 7939 7055 +3 6723 7056 7940 +3 6723 7940 7629 +3 6724 6852 7362 +3 6724 7362 7293 +3 6725 7294 7363 +3 6725 7363 6853 +3 6726 7022 7440 +3 6726 7440 7173 +3 6727 7174 7441 +3 6727 7441 7023 +3 6728 6959 8335 +3 6728 8335 8144 +3 6729 8145 8336 +3 6729 8336 6960 +3 6730 7094 8038 +3 6730 8038 7640 +3 6731 7641 8039 +3 6731 8039 7095 +3 6732 7426 7514 +3 6732 7514 6891 +3 6733 6892 7515 +3 6733 7515 7427 +3 6734 6933 7169 +3 6734 7169 7028 +3 6735 7029 7170 +3 6735 7170 6934 +3 6736 6935 7650 +3 6736 7650 7496 +3 6737 7497 7651 +3 6737 7651 6936 +3 6738 7261 8075 +3 6738 8075 7532 +3 6739 7533 8076 +3 6739 8076 7262 +3 6740 7317 8325 +3 6740 8325 7721 +3 6741 7722 8326 +3 6741 8326 7317 +3 6742 7428 7941 +3 6742 7941 7002 +3 6743 7003 7942 +3 6743 7942 7429 +3 6744 7263 7586 +3 6744 7586 7084 +3 6745 7085 7587 +3 6745 7587 7264 +3 6746 7130 7636 +3 6746 7636 7267 +3 6747 7268 7637 +3 6747 7637 7131 +3 6748 7699 8095 +3 6748 8095 6994 +3 6749 6995 8096 +3 6749 8096 7700 +3 6750 6771 6951 +3 6750 6951 6957 +3 6750 6957 6805 +3 6751 6806 6958 +3 6751 6952 6772 +3 6751 6958 6952 +3 6752 7884 8739 +3 6752 8739 7540 +3 6753 7541 8740 +3 6753 8740 7885 +3 6754 7074 7705 +3 6754 7705 7404 +3 6755 7405 7706 +3 6755 7706 7075 +3 6756 7356 7599 +3 6756 7599 7030 +3 6757 7031 7600 +3 6757 7600 7357 +3 6758 6947 7014 +3 6758 7014 6872 +3 6759 6873 7015 +3 6759 7015 6948 +3 6760 6812 6996 +3 6760 6996 6997 +3 6760 6997 6813 +3 6761 7222 7911 +3 6761 7911 7472 +3 6762 7473 7912 +3 6762 7912 7223 +3 6763 7623 7758 +3 6763 7758 6955 +3 6764 6956 7759 +3 6764 7759 7624 +3 6765 6889 7053 +3 6765 7053 6953 +3 6766 6954 7054 +3 6766 7054 6890 +3 6767 7039 7277 +3 6767 7277 7045 +3 6768 7046 7278 +3 6768 7278 7040 +3 6769 7412 8366 +3 6769 8366 7683 +3 6770 7684 8367 +3 6770 8367 7413 +3 6771 6872 7006 +3 6771 7006 6951 +3 6772 6952 7007 +3 6772 7007 6873 +3 6773 7334 7526 +3 6773 7526 7016 +3 6774 7017 7527 +3 6774 7527 7335 +3 6775 7142 7418 +3 6775 7418 7068 +3 6776 7069 7419 +3 6776 7419 7142 +3 6777 7090 8246 +3 6777 8246 7923 +3 6778 7924 8247 +3 6778 8247 7091 +3 6779 7224 7500 +3 6779 7500 7088 +3 6780 7089 7501 +3 6780 7501 7225 +3 6781 7723 8959 +3 6781 8959 7900 +3 6782 7901 8960 +3 6782 8960 7724 +3 6783 7764 8477 +3 6783 8477 7765 +3 6784 7068 7406 +3 6784 7406 7143 +3 6785 7144 7407 +3 6785 7407 7069 +3 6786 7849 8913 +3 6786 8913 7727 +3 6787 7728 8914 +3 6787 8914 7850 +3 6788 6893 7420 +3 6788 7345 6969 +3 6788 7420 7345 +3 6789 6970 7346 +3 6789 7346 7421 +3 6789 7421 6894 +3 6790 7464 7992 +3 6790 7992 7299 +3 6791 7300 7993 +3 6791 7993 7465 +3 6792 7522 7802 +3 6792 7802 7101 +3 6793 7102 7803 +3 6793 7803 7523 +3 6794 7603 7828 +3 6794 7828 7051 +3 6795 7052 7829 +3 6795 7829 7604 +3 6796 7107 8518 +3 6796 8518 8158 +3 6797 8159 8519 +3 6797 8519 7108 +3 6798 7311 7494 +3 6798 7494 7010 +3 6799 7011 7495 +3 6799 7495 7312 +3 6800 7134 7787 +3 6800 7787 7456 +3 6801 7457 7788 +3 6801 7788 7135 +3 6802 7151 7271 +3 6802 7271 6939 +3 6803 6940 7272 +3 6803 7272 7152 +3 6804 7141 7649 +3 6804 7649 7140 +3 6805 6957 7034 +3 6805 7034 6915 +3 6806 6916 7035 +3 6806 7035 6958 +3 6807 7326 8118 +3 6807 8118 7568 +3 6808 7569 8119 +3 6808 8119 7327 +3 6809 6841 7241 +3 6809 7240 6840 +3 6809 7241 7240 +3 6810 7080 8512 +3 6810 8512 7965 +3 6811 7966 8513 +3 6811 8513 7081 +3 6812 6915 7065 +3 6812 7065 6996 +3 6813 6997 7066 +3 6813 7066 6916 +3 6814 7818 8446 +3 6814 8446 7378 +3 6815 7379 8447 +3 6815 8447 7819 +3 6816 7727 8841 +3 6816 8841 7723 +3 6817 7724 8842 +3 6817 8842 7728 +3 6818 7098 7632 +3 6818 7632 7380 +3 6819 7381 7633 +3 6819 7633 7099 +3 6820 7630 8089 +3 6820 8089 7258 +3 6821 7259 8090 +3 6821 8090 7631 +3 6822 7103 7952 +3 6822 7952 7644 +3 6823 7645 7953 +3 6823 7953 7104 +3 6824 6825 6985 +3 6824 6985 7032 +3 6824 7032 6889 +3 6825 6890 7033 +3 6825 7033 6985 +3 6826 7847 8232 +3 6826 8232 7190 +3 6827 7191 8233 +3 6827 8233 7848 +3 6828 7502 7894 +3 6828 7894 7232 +3 6829 7233 7895 +3 6829 7895 7503 +3 6830 7200 7546 +3 6830 7546 7192 +3 6831 7193 7547 +3 6831 7547 7201 +3 6832 7348 7665 +3 6832 7665 7165 +3 6833 7166 7666 +3 6833 7666 7349 +3 6834 7332 7946 +3 6834 7946 7340 +3 6835 7341 7947 +3 6835 7947 7333 +3 6836 7127 8732 +3 6836 8732 8392 +3 6837 8393 8733 +3 6837 8733 7128 +3 6838 7750 8279 +3 6838 8279 7303 +3 6839 7304 8280 +3 6839 8280 7751 +3 6840 7240 7287 +3 6840 7287 6907 +3 6841 6908 7288 +3 6841 7288 7241 +3 6842 7538 8545 +3 6842 8545 7719 +3 6843 7720 8546 +3 6843 8546 7539 +3 6844 7328 8358 +3 6844 8358 7834 +3 6845 7835 8359 +3 6845 8359 7329 +3 6846 7155 7360 +3 6846 7360 7039 +3 6847 7040 7361 +3 6847 7361 7156 +3 6848 7041 7269 +3 6848 7269 7100 +3 6849 7100 7270 +3 6849 7270 7042 +3 6850 7246 8050 +3 6850 8050 7642 +3 6851 7643 8051 +3 6851 8051 7247 +3 6852 6977 7482 +3 6852 7482 7362 +3 6853 7363 7483 +3 6853 7483 6978 +3 6854 7324 7695 +3 6854 7695 7224 +3 6855 7225 7696 +3 6855 7696 7325 +3 6856 6857 8097 +3 6856 8097 8122 +3 6856 8122 6904 +3 6857 6905 8123 +3 6857 8123 8097 +3 6858 6971 7408 +3 6858 7408 7295 +3 6859 7296 7409 +3 6859 7409 6972 +3 6860 7342 8857 +3 6860 8857 8323 +3 6861 8324 8858 +3 6861 8858 7343 +3 6862 7111 7273 +3 6862 7273 7041 +3 6863 7042 7274 +3 6863 7274 7112 +3 6864 7045 7386 +3 6864 7386 7230 +3 6865 7231 7387 +3 6865 7387 7046 +3 6866 7275 8434 +3 6866 8434 7973 +3 6867 7974 8435 +3 6867 8435 7276 +3 6868 7072 8132 +3 6868 8132 8396 +3 6868 8396 7092 +3 6869 7093 8397 +3 6869 8133 7073 +3 6869 8397 8133 +3 6870 8098 8478 +3 6870 8478 7234 +3 6871 7235 8479 +3 6871 8479 8099 +3 6872 7014 7125 +3 6872 7125 7006 +3 6873 7007 7126 +3 6873 7126 7015 +3 6874 7256 7560 +3 6874 7560 7238 +3 6875 7239 7561 +3 6875 7561 7257 +3 6876 7810 8616 +3 6876 8616 7544 +3 6877 7545 8617 +3 6877 8617 7811 +3 6878 8063 8473 +3 6878 8473 7250 +3 6879 7251 8474 +3 6879 8474 8064 +3 6880 6914 8117 +3 6880 8116 6913 +3 6880 8117 8116 +3 6881 7123 7671 +3 6881 7671 7444 +3 6882 7445 7672 +3 6882 7672 7124 +3 6883 7000 7773 +3 6883 7773 7566 +3 6884 7567 7774 +3 6884 7774 7001 +3 6885 7766 8331 +3 6885 8331 7400 +3 6886 7401 8332 +3 6886 8332 7767 +3 6887 7528 8636 +3 6887 8636 7937 +3 6888 7938 8637 +3 6888 8637 7529 +3 6889 7032 7167 +3 6889 7167 7053 +3 6890 7054 7168 +3 6890 7168 7033 +3 6891 7514 7685 +3 6891 7685 7078 +3 6892 7079 7686 +3 6892 7686 7515 +3 6893 7018 7536 +3 6893 7536 7420 +3 6894 7421 7537 +3 6894 7537 7019 +3 6895 6921 7518 +3 6895 7518 7520 +3 6895 7520 6919 +3 6896 6920 7521 +3 6896 7519 6922 +3 6896 7521 7519 +3 6897 7208 7963 +3 6897 7963 7615 +3 6898 7616 7964 +3 6898 7964 7209 +3 6899 7488 7919 +3 6899 7919 7332 +3 6900 7333 7920 +3 6900 7920 7489 +3 6901 7368 7621 +3 6901 7621 7200 +3 6902 7201 7622 +3 6902 7622 7369 +3 6903 7192 7625 +3 6903 7625 7193 +3 6904 8122 8197 +3 6904 8197 7008 +3 6905 7009 8198 +3 6905 8198 8123 +3 6906 7299 7883 +3 6906 7883 7300 +3 6907 7287 7396 +3 6907 7396 7024 +3 6908 7025 7397 +3 6908 7397 7288 +3 6909 7388 8855 +3 6909 8855 8356 +3 6910 8357 8856 +3 6910 8856 7389 +3 6911 7115 8087 +3 6911 8087 7800 +3 6912 7801 8088 +3 6912 8088 7116 +3 6913 8116 8177 +3 6913 8177 6990 +3 6914 6991 8178 +3 6914 8178 8117 +3 6915 7034 7157 +3 6915 7157 7065 +3 6916 7066 7158 +3 6916 7158 7035 +3 6917 8348 8791 +3 6917 8791 7336 +3 6918 7337 8792 +3 6918 8792 8349 +3 6919 7520 7697 +3 6919 7697 7004 +3 6920 7005 7698 +3 6920 7698 7521 +3 6921 7020 7582 +3 6921 7582 7518 +3 6922 7519 7583 +3 6922 7583 7021 +3 6923 7340 7931 +3 6923 7931 7524 +3 6924 7525 7932 +3 6924 7932 7341 +3 6925 7588 7903 +3 6925 7903 7252 +3 6926 7253 7904 +3 6926 7904 7589 +3 6927 6953 7182 +3 6927 7171 6947 +3 6927 7182 7171 +3 6928 6948 7172 +3 6928 7172 7183 +3 6928 7183 6954 +3 6929 7792 8747 +3 6929 8747 7770 +3 6930 7771 8748 +3 6930 8748 7793 +3 6931 7028 7338 +3 6931 7338 7432 +3 6931 7432 7036 +3 6932 7037 7433 +3 6932 7339 7029 +3 6932 7433 7339 +3 6933 7177 7394 +3 6933 7394 7169 +3 6934 7170 7395 +3 6934 7395 7178 +3 6935 7198 7888 +3 6935 7888 7650 +3 6936 7651 7889 +3 6936 7889 7199 +3 6937 7779 8755 +3 6937 8755 7792 +3 6938 7793 8756 +3 6938 8756 7780 +3 6939 7271 7458 +3 6939 7458 7111 +3 6940 7112 7459 +3 6940 7459 7272 +3 6941 7687 8195 +3 6941 8195 7428 +3 6942 7429 8196 +3 6942 8196 7688 +3 6943 7218 8207 +3 6943 8207 7934 +3 6944 7935 8208 +3 6944 8208 7219 +3 6945 7424 8104 +3 6945 8104 7597 +3 6946 7598 8105 +3 6946 8105 7425 +3 6947 7171 7214 +3 6947 7214 7014 +3 6948 7015 7215 +3 6948 7215 7172 +3 6949 7669 8083 +3 6949 8083 7322 +3 6950 7323 8084 +3 6950 8084 7670 +3 6951 7006 7194 +3 6951 7161 6957 +3 6951 7194 7161 +3 6952 6958 7162 +3 6952 7162 7195 +3 6952 7195 7007 +3 6953 7053 7254 +3 6953 7254 7182 +3 6954 7183 7255 +3 6954 7255 7054 +3 6955 7758 8042 +3 6955 8042 7204 +3 6956 7205 8043 +3 6956 8043 7759 +3 6957 7161 7212 +3 6957 7212 7034 +3 6958 7035 7213 +3 6958 7213 7162 +3 6959 7492 8927 +3 6959 8927 8335 +3 6960 8336 8928 +3 6960 8928 7493 +3 6961 7267 7867 +3 6961 7867 7564 +3 6962 7565 7868 +3 6962 7868 7268 +3 6963 7238 7654 +3 6963 7654 7402 +3 6964 7403 7655 +3 6964 7655 7239 +3 6965 7410 8759 +3 6965 8759 8285 +3 6966 8286 8760 +3 6966 8760 7411 +3 6967 7812 8179 +3 6967 8179 7301 +3 6968 7302 8180 +3 6968 8180 7813 +3 6969 7345 7693 +3 6969 7693 7330 +3 6970 7331 7694 +3 6970 7694 7346 +3 6971 7143 7576 +3 6971 7576 7408 +3 6972 7409 7577 +3 6972 7577 7144 +3 6973 7590 8553 +3 6973 8553 7873 +3 6974 7874 8554 +3 6974 8554 7591 +3 6975 7986 8400 +3 6975 8400 7384 +3 6976 7385 8401 +3 6976 8401 7987 +3 6977 7173 7660 +3 6977 7660 7482 +3 6978 7483 7661 +3 6978 7661 7174 +3 6979 7117 8056 +3 6979 8056 8299 +3 6979 8299 7163 +3 6980 7164 8300 +3 6980 8057 7118 +3 6980 8300 8057 +3 6981 8128 9117 +3 6981 9117 7849 +3 6982 7850 9118 +3 6982 9118 8129 +3 6983 7364 8209 +3 6983 8209 7796 +3 6984 7797 8210 +3 6984 8210 7365 +3 6985 7033 7217 +3 6985 7216 7032 +3 6985 7217 7216 +3 6986 7853 8454 +3 6986 8454 7516 +3 6987 7517 8455 +3 6987 8455 7854 +3 6988 8010 8863 +3 6988 8863 7779 +3 6989 7780 8864 +3 6989 8864 8011 +3 6990 8177 8311 +3 6990 8311 7121 +3 6991 7122 8312 +3 6991 8312 8178 +3 6992 8402 8828 +3 6992 8828 7392 +3 6993 7393 8829 +3 6993 8829 8403 +3 6994 8095 8467 +3 6994 8467 7370 +3 6995 7371 8468 +3 6995 8468 8096 +3 6996 7065 7279 +3 6996 7260 6997 +3 6996 7279 7260 +3 6997 7260 7280 +3 6997 7280 7066 +3 6998 7070 7944 +3 6998 7902 6999 +3 6998 7944 7902 +3 6999 7902 7945 +3 6999 7945 7071 +3 7000 7202 8004 +3 7000 8004 7773 +3 7001 7774 8005 +3 7001 8005 7203 +3 7002 7941 8225 +3 7002 8225 7291 +3 7003 7292 8226 +3 7003 8226 7942 +3 7004 7697 7814 +3 7004 7814 7138 +3 7005 7139 7815 +3 7005 7815 7698 +3 7006 7125 7313 +3 7006 7313 7194 +3 7007 7195 7314 +3 7007 7314 7126 +3 7008 8197 8341 +3 7008 8341 7159 +3 7009 7160 8342 +3 7009 8342 8198 +3 7010 7494 7713 +3 7010 7713 7256 +3 7011 7257 7714 +3 7011 7714 7495 +3 7012 7770 8907 +3 7012 8907 8065 +3 7013 8066 8908 +3 7013 8908 7771 +3 7014 7214 7318 +3 7014 7318 7125 +3 7015 7126 7319 +3 7015 7319 7215 +3 7016 7526 7756 +3 7016 7756 7263 +3 7017 7264 7757 +3 7017 7757 7527 +3 7018 7179 7681 +3 7018 7681 7536 +3 7019 7537 7682 +3 7019 7682 7180 +3 7020 7147 7701 +3 7020 7701 7582 +3 7021 7583 7702 +3 7021 7702 7148 +3 7022 7330 7731 +3 7022 7731 7440 +3 7023 7441 7732 +3 7023 7732 7331 +3 7024 7396 7542 +3 7024 7542 7177 +3 7025 7178 7543 +3 7025 7543 7397 +3 7026 7119 7877 +3 7026 7877 7478 +3 7027 7479 7878 +3 7027 7878 7120 +3 7028 7169 7462 +3 7028 7462 7338 +3 7029 7339 7463 +3 7029 7463 7170 +3 7030 7599 7890 +3 7030 7890 7324 +3 7031 7325 7891 +3 7031 7891 7600 +3 7032 7216 7350 +3 7032 7350 7167 +3 7033 7168 7351 +3 7033 7351 7217 +3 7034 7212 7307 +3 7034 7307 7157 +3 7035 7158 7308 +3 7035 7308 7213 +3 7036 7432 7558 +3 7036 7558 7155 +3 7037 7156 7559 +3 7037 7559 7433 +3 7038 7064 7809 +3 7038 7808 7063 +3 7038 7809 7808 +3 7039 7360 7595 +3 7039 7595 7277 +3 7040 7278 7596 +3 7040 7596 7361 +3 7041 7273 7506 +3 7041 7506 7269 +3 7042 7270 7507 +3 7042 7507 7274 +3 7043 7448 8420 +3 7043 8420 7996 +3 7044 7997 8421 +3 7044 8421 7449 +3 7045 7277 7605 +3 7045 7605 7386 +3 7046 7387 7606 +3 7046 7606 7278 +3 7047 7048 8492 +3 7047 8492 8516 +3 7047 8516 7096 +3 7048 7097 8517 +3 7048 8517 8492 +3 7049 8154 8534 +3 7049 8534 7398 +3 7050 7399 8535 +3 7050 8535 8155 +3 7051 7828 8142 +3 7051 8142 7226 +3 7052 7227 8143 +3 7052 8143 7829 +3 7053 7167 7376 +3 7053 7376 7254 +3 7054 7255 7377 +3 7054 7377 7168 +3 7055 7939 8321 +3 7055 8321 7416 +3 7056 7417 8322 +3 7056 8322 7940 +3 7057 7789 8242 +3 7057 8242 7464 +3 7058 7465 8243 +3 7058 8243 7790 +3 7059 7900 9215 +3 7059 9215 8248 +3 7060 8249 9216 +3 7060 9216 7901 +3 7061 7352 8576 +3 7061 8576 8859 +3 7061 8859 7320 +3 7062 7321 8860 +3 7062 8577 7353 +3 7062 8860 8577 +3 7063 7808 7886 +3 7063 7886 7149 +3 7064 7150 7887 +3 7064 7887 7809 +3 7065 7157 7366 +3 7065 7366 7279 +3 7066 7280 7367 +3 7066 7367 7158 +3 7067 7872 8458 +3 7067 8458 7871 +3 7068 7418 7716 +3 7068 7716 7406 +3 7069 7407 7717 +3 7069 7717 7419 +3 7070 7153 8024 +3 7070 8024 7944 +3 7071 7945 8025 +3 7071 8025 7154 +3 7072 7372 8424 +3 7072 8424 8132 +3 7073 8133 8425 +3 7073 8425 7373 +3 7074 7444 8108 +3 7074 8108 7705 +3 7075 7706 8109 +3 7075 8109 7445 +3 7076 8040 8771 +3 7076 8771 7454 +3 7077 7455 8772 +3 7077 8772 8041 +3 7078 7685 7950 +3 7078 7950 7348 +3 7079 7349 7951 +3 7079 7951 7686 +3 7080 7438 8849 +3 7080 8849 8512 +3 7081 8513 8850 +3 7081 8850 7439 +3 7082 7568 8471 +3 7082 8471 7956 +3 7083 7957 8472 +3 7083 8472 7569 +3 7084 7586 7990 +3 7084 7990 7468 +3 7085 7469 7991 +3 7085 7991 7587 +3 7086 7113 7592 +3 7086 7578 7151 +3 7086 7592 7578 +3 7087 7152 7579 +3 7087 7579 7593 +3 7087 7593 7114 +3 7088 7500 7830 +3 7088 7830 7186 +3 7089 7187 7831 +3 7089 7831 7501 +3 7090 7451 8638 +3 7090 8638 8246 +3 7091 8247 8639 +3 7091 8639 7452 +3 7092 8396 8681 +3 7092 8681 7354 +3 7093 7355 8682 +3 7093 8682 8397 +3 7094 7532 8482 +3 7094 8482 8038 +3 7095 8039 8483 +3 7095 8483 7533 +3 7096 8516 8632 +3 7096 8632 7242 +3 7097 7243 8633 +3 7097 8633 8517 +3 7098 7468 8014 +3 7098 8014 7632 +3 7099 7633 8015 +3 7099 8015 7469 +3 7100 7269 7594 +3 7100 7594 7270 +3 7101 7802 8183 +3 7101 8183 7488 +3 7102 7489 8184 +3 7102 8184 7803 +3 7103 7472 8317 +3 7103 8317 7952 +3 7104 7953 8318 +3 7104 8318 7473 +3 7105 7626 8138 +3 7105 8138 7265 +3 7106 7266 8139 +3 7106 8139 7627 +3 7107 7508 8905 +3 7107 8905 8518 +3 7108 8519 8906 +3 7108 8906 7509 +3 7109 8250 8895 +3 7109 8895 7750 +3 7110 7751 8896 +3 7110 8896 8251 +3 7111 7458 7601 +3 7111 7601 7273 +3 7112 7274 7602 +3 7112 7602 7459 +3 7113 7230 7658 +3 7113 7658 7592 +3 7114 7593 7659 +3 7114 7659 7231 +3 7115 7434 8386 +3 7115 8386 8087 +3 7116 8088 8387 +3 7116 8387 7435 +3 7117 7374 8268 +3 7117 8268 8056 +3 7118 8057 8269 +3 7118 8269 7375 +3 7119 7315 8052 +3 7119 8052 7877 +3 7120 7878 8053 +3 7120 8053 7316 +3 7121 8311 8530 +3 7121 8530 7358 +3 7122 7359 8531 +3 7122 8531 8312 +3 7123 7478 8030 +3 7123 8030 7671 +3 7124 7672 8031 +3 7124 8031 7479 +3 7125 7318 7490 +3 7125 7490 7313 +3 7126 7314 7491 +3 7126 7491 7319 +3 7127 7498 9140 +3 7127 9140 8732 +3 7128 8733 9141 +3 7128 9141 7499 +3 7129 7176 8206 +3 7129 8205 7175 +3 7129 8206 8205 +3 7130 7584 8112 +3 7130 8112 7636 +3 7131 7637 8113 +3 7131 8113 7585 +3 7132 7136 7762 +3 7132 7762 7806 +3 7132 7806 7210 +3 7133 7211 7807 +3 7133 7763 7137 +3 7133 7807 7763 +3 7134 7562 8223 +3 7134 8223 7787 +3 7135 7788 8224 +3 7135 8224 7563 +3 7136 7295 7798 +3 7136 7798 7762 +3 7137 7763 7799 +3 7137 7799 7296 +3 7138 7814 8048 +3 7138 8048 7368 +3 7139 7369 8049 +3 7139 8049 7815 +3 7140 7649 8085 +3 7140 8085 7562 +3 7141 7563 8086 +3 7141 8086 7649 +3 7142 7419 7772 +3 7142 7772 7418 +3 7143 7406 7768 +3 7143 7768 7576 +3 7144 7577 7769 +3 7144 7769 7407 +3 7145 7691 8991 +3 7145 8991 8398 +3 7146 8399 8992 +3 7146 8992 7692 +3 7147 7380 7913 +3 7147 7913 7701 +3 7148 7702 7914 +3 7148 7914 7381 +3 7149 7886 8012 +3 7149 8012 7356 +3 7150 7357 8013 +3 7150 8013 7887 +3 7151 7578 7667 +3 7151 7667 7271 +3 7152 7272 7668 +3 7152 7668 7579 +3 7153 7404 8148 +3 7153 8148 8024 +3 7154 8025 8149 +3 7154 8149 7405 +3 7155 7558 7725 +3 7155 7725 7360 +3 7156 7361 7726 +3 7156 7726 7559 +3 7157 7307 7480 +3 7157 7480 7366 +3 7158 7367 7481 +3 7158 7481 7308 +3 7159 8341 8564 +3 7159 8564 7556 +3 7160 7557 8565 +3 7160 8565 8342 +3 7161 7194 7430 +3 7161 7430 7436 +3 7161 7436 7212 +3 7162 7213 7437 +3 7162 7431 7195 +3 7162 7437 7431 +3 7163 8299 8557 +3 7163 8557 7414 +3 7164 7415 8558 +3 7164 8558 8300 +3 7165 7665 8126 +3 7165 8126 7584 +3 7166 7585 8127 +3 7166 8127 7666 +3 7167 7350 7530 +3 7167 7530 7376 +3 7168 7377 7531 +3 7168 7531 7351 +3 7169 7394 7638 +3 7169 7638 7462 +3 7170 7463 7639 +3 7170 7639 7395 +3 7171 7182 7466 +3 7171 7466 7474 +3 7171 7474 7214 +3 7172 7215 7475 +3 7172 7467 7183 +3 7172 7475 7467 +3 7173 7440 7929 +3 7173 7929 7660 +3 7174 7661 7930 +3 7174 7930 7441 +3 7175 8205 8264 +3 7175 8264 7248 +3 7176 7249 8265 +3 7176 8265 8206 +3 7177 7542 7739 +3 7177 7739 7394 +3 7178 7395 7740 +3 7178 7740 7543 +3 7179 7402 7915 +3 7179 7915 7681 +3 7180 7682 7916 +3 7180 7916 7403 +3 7181 7858 8345 +3 7181 8345 7857 +3 7182 7254 7512 +3 7182 7512 7466 +3 7183 7467 7513 +3 7183 7513 7255 +3 7184 7892 8653 +3 7184 8653 7921 +3 7185 7922 8654 +3 7185 8654 7893 +3 7186 7830 7971 +3 7186 7971 7334 +3 7187 7335 7972 +3 7187 7972 7831 +3 7188 7683 8820 +3 7188 8820 8287 +3 7189 8288 8821 +3 7189 8821 7684 +3 7190 8232 9107 +3 7190 9107 8010 +3 7191 8011 9108 +3 7191 9108 8233 +3 7192 7546 8008 +3 7192 8008 7625 +3 7193 7625 8009 +3 7193 8009 7547 +3 7194 7313 7534 +3 7194 7534 7430 +3 7195 7431 7535 +3 7195 7535 7314 +3 7196 8490 9162 +3 7196 9162 7820 +3 7197 7821 9163 +3 7197 9163 8491 +3 7198 7524 8201 +3 7198 8201 7888 +3 7199 7889 8202 +3 7199 8202 7525 +3 7200 7621 7998 +3 7200 7998 7546 +3 7201 7547 7999 +3 7201 7999 7622 +3 7202 7456 8217 +3 7202 8217 8004 +3 7203 8005 8218 +3 7203 8218 7457 +3 7204 8042 8329 +3 7204 8329 7502 +3 7205 7503 8330 +3 7205 8330 8043 +3 7206 7921 8663 +3 7206 8663 7907 +3 7207 7908 8664 +3 7207 8664 7922 +3 7208 7597 8374 +3 7208 8374 7963 +3 7209 7964 8375 +3 7209 8375 7598 +3 7210 7806 7917 +3 7210 7917 7311 +3 7211 7312 7918 +3 7211 7918 7807 +3 7212 7436 7510 +3 7212 7510 7307 +3 7213 7308 7511 +3 7213 7511 7437 +3 7214 7474 7554 +3 7214 7554 7318 +3 7215 7319 7555 +3 7215 7555 7475 +3 7216 7217 7450 +3 7216 7450 7580 +3 7216 7580 7350 +3 7217 7351 7581 +3 7217 7581 7450 +3 7218 7550 8570 +3 7218 8570 8207 +3 7219 8208 8571 +3 7219 8571 7551 +3 7220 8046 8520 +3 7220 8520 7662 +3 7221 7662 8521 +3 7221 8521 8047 +3 7222 7822 8582 +3 7222 8582 7911 +3 7223 7912 8583 +3 7223 8583 7823 +3 7224 7695 7975 +3 7224 7975 7500 +3 7225 7501 7976 +3 7225 7976 7696 +3 7226 8142 8378 +3 7226 8378 7460 +3 7227 7461 8379 +3 7227 8379 8143 +3 7228 8384 8994 +3 7228 8994 7764 +3 7229 7765 8995 +3 7229 8995 8385 +3 7230 7386 7785 +3 7230 7785 7658 +3 7231 7659 7786 +3 7231 7786 7387 +3 7232 7894 8584 +3 7232 8584 7840 +3 7233 7841 8585 +3 7233 8585 7895 +3 7234 8478 9447 +3 7234 9447 8128 +3 7235 8129 9448 +3 7235 9448 8479 +3 7236 7721 8875 +3 7236 8875 8360 +3 7237 8363 8876 +3 7237 8876 7722 +3 7238 7560 8016 +3 7238 8016 7654 +3 7239 7655 8017 +3 7239 8017 7561 +3 7240 7241 7715 +3 7240 7715 7737 +3 7240 7737 7287 +3 7241 7288 7738 +3 7241 7738 7715 +3 7242 8632 8810 +3 7242 8810 7446 +3 7243 7447 8811 +3 7243 8811 8633 +3 7244 7840 8600 +3 7244 8600 7822 +3 7245 7823 8601 +3 7245 8601 7841 +3 7246 7907 8730 +3 7246 8730 8050 +3 7247 8051 8731 +3 7247 8731 7908 +3 7248 8264 8388 +3 7248 8388 7382 +3 7249 7383 8389 +3 7249 8389 8265 +3 7250 8473 8941 +3 7250 8941 7689 +3 7251 7690 8942 +3 7251 8942 8474 +3 7252 7903 8315 +3 7252 8315 7626 +3 7253 7627 8316 +3 7253 8316 7904 +3 7254 7376 7609 +3 7254 7609 7512 +3 7255 7513 7610 +3 7255 7610 7377 +3 7256 7713 8036 +3 7256 8036 7560 +3 7257 7561 8037 +3 7257 8037 7714 +3 7258 8089 8751 +3 7258 8751 7892 +3 7259 7893 8752 +3 7259 8752 8090 +3 7260 7279 7574 +3 7260 7574 7575 +3 7260 7575 7280 +3 7261 7857 8669 +3 7261 8669 8075 +3 7262 8076 8670 +3 7262 8670 7858 +3 7263 7756 8130 +3 7263 8130 7586 +3 7264 7587 8131 +3 7264 8131 7757 +3 7265 8138 8382 +3 7265 8382 7522 +3 7266 7523 8383 +3 7266 8383 8139 +3 7267 7636 8252 +3 7267 8252 7867 +3 7268 7868 8253 +3 7268 8253 7637 +3 7269 7506 7760 +3 7269 7760 7594 +3 7270 7594 7761 +3 7270 7761 7507 +3 7271 7667 7832 +3 7271 7832 7458 +3 7272 7459 7833 +3 7272 7833 7668 +3 7273 7601 7775 +3 7273 7775 7506 +3 7274 7507 7776 +3 7274 7776 7602 +3 7275 8065 9233 +3 7275 9233 8434 +3 7276 8435 9234 +3 7276 9234 8066 +3 7277 7595 7863 +3 7277 7863 7605 +3 7278 7606 7864 +3 7278 7864 7596 +3 7279 7366 7613 +3 7279 7613 7574 +3 7280 7575 7614 +3 7280 7614 7367 +3 7281 8410 9429 +3 7281 9429 8221 +3 7282 8222 9430 +3 7282 9430 8411 +3 7283 8061 8931 +3 7283 8931 8140 +3 7284 8141 8932 +3 7284 8932 8062 +3 7285 8236 9380 +3 7285 9380 8368 +3 7286 8369 9381 +3 7286 9381 8237 +3 7287 7737 7826 +3 7287 7826 7396 +3 7288 7397 7827 +3 7288 7827 7738 +3 7289 8134 8937 +3 7289 8937 8079 +3 7290 8080 8938 +3 7290 8938 8135 +3 7291 8225 8610 +3 7291 8610 7630 +3 7292 7631 8611 +3 7292 8611 8226 +3 7293 7362 7977 +3 7293 7943 7294 +3 7293 7977 7943 +3 7294 7943 7978 +3 7294 7978 7363 +3 7295 7408 7909 +3 7295 7909 7798 +3 7296 7799 7910 +3 7296 7910 7409 +3 7297 8221 9326 +3 7297 9326 8236 +3 7298 8237 9327 +3 7298 9327 8222 +3 7299 7992 8594 +3 7299 8594 7883 +3 7300 7883 8595 +3 7300 8595 7993 +3 7301 8179 8588 +3 7301 8588 7687 +3 7302 7688 8589 +3 7302 8589 8180 +3 7303 8279 8847 +3 7303 8847 7844 +3 7304 7844 8848 +3 7304 8848 8280 +3 7305 7962 9187 +3 7305 9187 8507 +3 7306 8508 9188 +3 7306 9188 7962 +3 7307 7510 7634 +3 7307 7634 7480 +3 7308 7481 7635 +3 7308 7635 7511 +3 7309 8079 8951 +3 7309 8951 8061 +3 7310 8062 8952 +3 7310 8952 8080 +3 7311 7917 8091 +3 7311 8091 7494 +3 7312 7495 8092 +3 7312 8092 7918 +3 7313 7490 7677 +3 7313 7677 7534 +3 7314 7535 7678 +3 7314 7678 7491 +3 7315 7564 8291 +3 7315 8291 8052 +3 7316 8053 8292 +3 7316 8292 7565 +3 7317 8326 8972 +3 7317 8972 8325 +3 7318 7554 7679 +3 7318 7679 7490 +3 7319 7491 7680 +3 7319 7680 7555 +3 7320 8859 9198 +3 7320 9198 7619 +3 7321 7620 9199 +3 7321 9199 8860 +3 7322 8083 8339 +3 7322 8339 7588 +3 7323 7589 8340 +3 7323 8340 8084 +3 7324 7890 8271 +3 7324 8271 7695 +3 7325 7696 8272 +3 7325 8272 7891 +3 7326 7607 8707 +3 7326 8707 8118 +3 7327 8119 8708 +3 7327 8708 7608 +3 7328 7873 8953 +3 7328 8953 8358 +3 7329 8359 8954 +3 7329 8954 7874 +3 7330 7693 8136 +3 7330 8136 7731 +3 7331 7732 8137 +3 7331 8137 7694 +3 7332 7919 8568 +3 7332 8568 7946 +3 7333 7947 8569 +3 7333 8569 7920 +3 7334 7971 8156 +3 7334 8156 7526 +3 7335 7527 8157 +3 7335 8157 7972 +3 7336 8791 9334 +3 7336 9334 7818 +3 7337 7819 9335 +3 7337 9335 8792 +3 7338 7462 7781 +3 7338 7781 7881 +3 7338 7881 7432 +3 7339 7433 7882 +3 7339 7782 7463 +3 7339 7882 7782 +3 7340 7946 8580 +3 7340 8580 7931 +3 7341 7932 8581 +3 7341 8581 7947 +3 7342 7937 9579 +3 7342 9579 8857 +3 7343 8858 9580 +3 7343 9580 7938 +3 7344 7861 9298 +3 7344 9298 8667 +3 7345 7420 8018 +3 7345 8018 7693 +3 7346 7694 8019 +3 7346 8019 7421 +3 7347 8668 9299 +3 7347 9299 7862 +3 7348 7950 8295 +3 7348 8295 7665 +3 7349 7666 8296 +3 7349 8296 7951 +3 7350 7580 7733 +3 7350 7733 7530 +3 7351 7531 7734 +3 7351 7734 7581 +3 7352 7707 8957 +3 7352 8957 8576 +3 7353 8577 8958 +3 7353 8958 7708 +3 7354 8681 9042 +3 7354 9042 7652 +3 7355 7653 9043 +3 7355 9043 8682 +3 7356 8012 8238 +3 7356 8238 7599 +3 7357 7600 8239 +3 7357 8239 8013 +3 7358 8530 9038 +3 7358 9038 7617 +3 7359 7618 9039 +3 7359 9039 8531 +3 7360 7725 7969 +3 7360 7969 7595 +3 7361 7596 7970 +3 7361 7970 7726 +3 7362 7482 8093 +3 7362 8093 7977 +3 7363 7978 8094 +3 7363 8094 7483 +3 7364 7615 8505 +3 7364 8505 8209 +3 7365 8210 8506 +3 7365 8506 7616 +3 7366 7480 7709 +3 7366 7709 7613 +3 7367 7614 7710 +3 7367 7710 7481 +3 7368 8048 8293 +3 7368 8293 7621 +3 7369 7622 8294 +3 7369 8294 8049 +3 7370 8467 8899 +3 7370 8899 7766 +3 7371 7767 8900 +3 7371 8900 8468 +3 7372 7719 8779 +3 7372 8779 8424 +3 7373 8425 8780 +3 7373 8780 7720 +3 7374 7642 8572 +3 7374 8572 8268 +3 7375 8269 8573 +3 7375 8573 7643 +3 7376 7530 7748 +3 7376 7748 7609 +3 7377 7610 7749 +3 7377 7749 7531 +3 7378 8446 9115 +3 7378 9115 8040 +3 7379 8041 9116 +3 7379 9116 8447 +3 7380 7632 8181 +3 7380 8181 7913 +3 7381 7914 8182 +3 7381 8182 7633 +3 7382 8388 8547 +3 7382 8547 7669 +3 7383 7670 8548 +3 7383 8548 8389 +3 7384 8400 8893 +3 7384 8893 7853 +3 7385 7854 8894 +3 7385 8894 8401 +3 7386 7605 8026 +3 7386 8026 7785 +3 7387 7786 8027 +3 7387 8027 7606 +3 7388 7981 9514 +3 7388 9514 8855 +3 7389 8856 9515 +3 7389 9515 7982 +3 7390 7566 8390 +3 7390 8191 7426 +3 7390 8390 8191 +3 7391 7427 8192 +3 7391 8192 8391 +3 7391 8391 7567 +3 7392 8828 9332 +3 7392 9332 7855 +3 7393 7856 9333 +3 7393 9333 8829 +3 7394 7739 8034 +3 7394 8034 7638 +3 7395 7639 8035 +3 7395 8035 7740 +3 7396 7826 8002 +3 7396 8002 7542 +3 7397 7543 8003 +3 7397 8003 7827 +3 7398 8534 8966 +3 7398 8966 7810 +3 7399 7811 8967 +3 7399 8967 8535 +3 7400 8331 8979 +3 7400 8979 8046 +3 7401 8047 8980 +3 7401 8980 8332 +3 7402 7654 8189 +3 7402 8189 7915 +3 7403 7916 8190 +3 7403 8190 7655 +3 7404 7705 8475 +3 7404 8475 8148 +3 7405 8149 8476 +3 7405 8476 7706 +3 7406 7716 8124 +3 7406 8124 7768 +3 7407 7769 8125 +3 7407 8125 7717 +3 7408 7576 8073 +3 7408 8073 7909 +3 7409 7910 8074 +3 7409 8074 7577 +3 7410 8248 9713 +3 7410 9713 8759 +3 7411 8760 9714 +3 7411 9714 8249 +3 7412 7871 8845 +3 7412 8845 8366 +3 7413 8367 8846 +3 7413 8846 7872 +3 7414 8557 8853 +3 7414 8853 7699 +3 7415 7700 8854 +3 7415 8854 8558 +3 7416 8321 9105 +3 7416 9105 8134 +3 7417 8135 9106 +3 7417 9106 8322 +3 7418 7772 8120 +3 7418 8120 7716 +3 7419 7717 8121 +3 7419 8121 7772 +3 7420 7536 8114 +3 7420 8114 8018 +3 7421 8019 8115 +3 7421 8115 7537 +3 7422 7496 8346 +3 7422 8346 8549 +3 7422 8549 7603 +3 7423 7604 8550 +3 7423 8347 7497 +3 7423 8550 8347 +3 7424 7644 8614 +3 7424 8614 8104 +3 7425 8105 8615 +3 7425 8615 7645 +3 7426 8191 8258 +3 7426 8258 7514 +3 7427 7515 8259 +3 7427 8259 8192 +3 7428 8195 8703 +3 7428 8703 7941 +3 7429 7942 8704 +3 7429 8704 8196 +3 7430 7534 7783 +3 7430 7703 7436 +3 7430 7783 7703 +3 7431 7437 7704 +3 7431 7704 7784 +3 7431 7784 7535 +3 7432 7881 8032 +3 7432 8032 7558 +3 7433 7559 8033 +3 7433 8033 7882 +3 7434 7640 8721 +3 7434 8721 8386 +3 7435 8387 8722 +3 7435 8722 7641 +3 7436 7703 7746 +3 7436 7746 7510 +3 7437 7511 7747 +3 7437 7747 7704 +3 7438 7834 9300 +3 7438 9300 8849 +3 7439 8850 9301 +3 7439 9301 7835 +3 7440 7731 8234 +3 7440 8234 7929 +3 7441 7930 8235 +3 7441 8235 7732 +3 7442 7656 8964 +3 7442 8679 7628 +3 7442 8964 8679 +3 7443 7629 8680 +3 7443 8680 8965 +3 7443 8965 7657 +3 7444 7671 8370 +3 7444 8370 8108 +3 7445 8109 8371 +3 7445 8371 7672 +3 7446 8810 9386 +3 7446 9386 8000 +3 7447 8001 9387 +3 7447 9387 8811 +3 7448 8140 9166 +3 7448 9166 8420 +3 7449 8421 9167 +3 7449 9167 8141 +3 7450 7581 7791 +3 7450 7791 7580 +3 7451 7804 9034 +3 7451 9034 8638 +3 7452 8639 9035 +3 7452 9035 7805 +3 7453 7484 8661 +3 7453 8661 8662 +3 7453 8662 7485 +3 7454 8771 9219 +3 7454 9219 7884 +3 7455 7885 9220 +3 7455 9220 8772 +3 7456 7787 8590 +3 7456 8590 8217 +3 7457 8218 8591 +3 7457 8591 7788 +3 7458 7832 7984 +3 7458 7984 7601 +3 7459 7602 7985 +3 7459 7985 7833 +3 7460 8378 8718 +3 7460 8718 7789 +3 7461 7790 8719 +3 7461 8719 8379 +3 7462 7638 7979 +3 7462 7979 7781 +3 7463 7782 7980 +3 7463 7980 7639 +3 7464 8242 8769 +3 7464 8769 7992 +3 7465 7993 8770 +3 7465 8770 8243 +3 7466 7512 7824 +3 7466 7777 7474 +3 7466 7824 7777 +3 7467 7475 7778 +3 7467 7778 7825 +3 7467 7825 7513 +3 7468 7990 8442 +3 7468 8442 8014 +3 7469 8015 8443 +3 7469 8443 7991 +3 7470 8368 9611 +3 7470 9611 8612 +3 7471 8613 9612 +3 7471 9612 8369 +3 7472 7911 8716 +3 7472 8716 8317 +3 7473 8318 8717 +3 7473 8717 7912 +3 7474 7777 7845 +3 7474 7845 7554 +3 7475 7555 7846 +3 7475 7846 7778 +3 7476 8352 9266 +3 7476 9266 8372 +3 7477 8373 9267 +3 7477 9267 8353 +3 7478 7877 8428 +3 7478 8428 8030 +3 7479 8031 8429 +3 7479 8429 7878 +3 7480 7634 7842 +3 7480 7842 7709 +3 7481 7710 7843 +3 7481 7843 7635 +3 7482 7660 8266 +3 7482 8266 8093 +3 7483 8094 8267 +3 7483 8267 7661 +3 7484 7572 8749 +3 7484 8749 8661 +3 7485 8662 8750 +3 7485 8750 7573 +3 7486 8372 9280 +3 7486 9280 8364 +3 7487 8365 9281 +3 7487 9281 8373 +3 7488 8183 8626 +3 7488 8626 7919 +3 7489 7920 8627 +3 7489 8627 8184 +3 7490 7679 7905 +3 7490 7905 7677 +3 7491 7678 7906 +3 7491 7906 7680 +3 7492 7838 9613 +3 7492 9613 8927 +3 7493 8928 9614 +3 7493 9614 7839 +3 7494 8091 8283 +3 7494 8283 7713 +3 7495 7714 8284 +3 7495 8284 8092 +3 7496 7650 8522 +3 7496 8522 8346 +3 7497 8347 8523 +3 7497 8523 7651 +3 7498 7898 9605 +3 7498 9605 9140 +3 7499 9141 9606 +3 7499 9606 7899 +3 7500 7975 8319 +3 7500 8319 7830 +3 7501 7831 8320 +3 7501 8320 7976 +3 7502 8329 8673 +3 7502 8673 7894 +3 7503 7895 8674 +3 7503 8674 8330 +3 7504 7552 8763 +3 7504 8723 7505 +3 7504 8763 8723 +3 7505 8723 8764 +3 7505 8764 7553 +3 7506 7775 8100 +3 7506 8100 7760 +3 7507 7761 8101 +3 7507 8101 7776 +3 7508 7896 9336 +3 7508 9336 8905 +3 7509 8906 9337 +3 7509 9337 7897 +3 7510 7746 7859 +3 7510 7859 7634 +3 7511 7635 7860 +3 7511 7860 7747 +3 7512 7609 7925 +3 7512 7925 7824 +3 7513 7825 7926 +3 7513 7926 7610 +3 7514 8258 8452 +3 7514 8452 7685 +3 7515 7686 8453 +3 7515 8453 8259 +3 7516 8454 9072 +3 7516 9072 8154 +3 7517 8155 9073 +3 7517 9073 8455 +3 7518 7582 8256 +3 7518 8213 7520 +3 7518 8256 8213 +3 7519 7521 8214 +3 7519 8214 8257 +3 7519 8257 7583 +3 7520 8213 8408 +3 7520 8408 7697 +3 7521 7698 8409 +3 7521 8409 8214 +3 7522 8382 8649 +3 7522 8649 7802 +3 7523 7803 8650 +3 7523 8650 8383 +3 7524 7931 8620 +3 7524 8620 8201 +3 7525 8202 8621 +3 7525 8621 7932 +3 7526 8156 8406 +3 7526 8406 7756 +3 7527 7757 8407 +3 7527 8407 8157 +3 7528 8285 9443 +3 7528 9443 8636 +3 7529 8637 9444 +3 7529 9444 8286 +3 7530 7733 7988 +3 7530 7988 7748 +3 7531 7749 7989 +3 7531 7989 7734 +3 7532 8075 8987 +3 7532 8987 8482 +3 7533 8483 8988 +3 7533 8988 8076 +3 7534 7677 7958 +3 7534 7958 7783 +3 7535 7784 7959 +3 7535 7959 7678 +3 7536 7681 8240 +3 7536 8240 8114 +3 7537 8115 8241 +3 7537 8241 7682 +3 7538 8364 9392 +3 7538 9392 8545 +3 7539 8546 9393 +3 7539 9393 8365 +3 7540 8739 9725 +3 7540 9725 8410 +3 7541 8411 9726 +3 7541 9726 8740 +3 7542 8002 8187 +3 7542 8187 7739 +3 7543 7740 8188 +3 7543 8188 8003 +3 7544 8616 9455 +3 7544 9455 8352 +3 7545 8353 9456 +3 7545 9456 8617 +3 7546 7998 8404 +3 7546 8404 8008 +3 7547 8009 8405 +3 7547 8405 7999 +3 7548 7611 9014 +3 7548 8993 7549 +3 7548 9014 8993 +3 7549 8993 9015 +3 7549 9015 7612 +3 7550 7956 8985 +3 7550 8985 8570 +3 7551 8571 8986 +3 7551 8986 7957 +3 7552 7647 8836 +3 7552 8836 8763 +3 7553 8764 8837 +3 7553 8837 7648 +3 7554 7845 7994 +3 7554 7994 7679 +3 7555 7680 7995 +3 7555 7995 7846 +3 7556 8564 8814 +3 7556 8814 7812 +3 7557 7813 8815 +3 7557 8815 8565 +3 7558 8032 8193 +3 7558 8193 7725 +3 7559 7726 8194 +3 7559 8194 8033 +3 7560 8036 8394 +3 7560 8394 8016 +3 7561 8017 8395 +3 7561 8395 8037 +3 7562 8085 8743 +3 7562 8743 8223 +3 7563 8224 8744 +3 7563 8744 8086 +3 7564 7867 8606 +3 7564 8606 8291 +3 7565 8292 8607 +3 7565 8607 7868 +3 7566 7773 8618 +3 7566 8618 8390 +3 7567 8391 8619 +3 7567 8619 7774 +3 7568 8118 9012 +3 7568 9012 8471 +3 7569 8472 9013 +3 7569 9013 8119 +3 7570 7816 9356 +3 7570 9066 7847 +3 7570 9356 9066 +3 7571 7848 9067 +3 7571 9067 9357 +3 7571 9357 7817 +3 7572 7711 8873 +3 7572 8873 8749 +3 7573 8750 8874 +3 7573 8874 7712 +3 7574 7613 7954 +3 7574 7933 7575 +3 7574 7954 7933 +3 7575 7933 7955 +3 7575 7955 7614 +3 7576 7768 8273 +3 7576 8273 8073 +3 7577 8074 8274 +3 7577 8274 7769 +3 7578 7592 8160 +3 7578 8160 8166 +3 7578 8166 7667 +3 7579 7668 8167 +3 7579 8161 7593 +3 7579 8167 8161 +3 7580 7791 7960 +3 7580 7960 7733 +3 7581 7734 7961 +3 7581 7961 7791 +3 7582 7701 8354 +3 7582 8354 8256 +3 7583 8257 8355 +3 7583 8355 7702 +3 7584 8126 8701 +3 7584 8701 8112 +3 7585 8113 8702 +3 7585 8702 8127 +3 7586 8130 8499 +3 7586 8499 7990 +3 7587 7991 8500 +3 7587 8500 8131 +3 7588 8339 8657 +3 7588 8657 7903 +3 7589 7904 8658 +3 7589 8658 8340 +3 7590 7973 9262 +3 7590 9262 8553 +3 7591 8554 9263 +3 7591 9263 7974 +3 7592 7658 8203 +3 7592 8203 8160 +3 7593 8161 8204 +3 7593 8204 7659 +3 7594 7760 8174 +3 7594 8174 7761 +3 7595 7969 8244 +3 7595 8244 7863 +3 7596 7864 8245 +3 7596 8245 7970 +3 7597 8104 8832 +3 7597 8832 8374 +3 7598 8375 8833 +3 7598 8833 8105 +3 7599 8238 8559 +3 7599 8559 7890 +3 7600 7891 8560 +3 7600 8560 8239 +3 7601 7984 8175 +3 7601 8175 7775 +3 7602 7776 8176 +3 7602 8176 7985 +3 7603 8549 8775 +3 7603 8775 7828 +3 7604 7829 8776 +3 7604 8776 8550 +3 7605 7863 8260 +3 7605 8260 8026 +3 7606 8027 8261 +3 7606 8261 7864 +3 7607 7996 9085 +3 7607 9085 8707 +3 7608 8708 9086 +3 7608 9086 7997 +3 7609 7748 8081 +3 7609 8081 7925 +3 7610 7926 8082 +3 7610 8082 7749 +3 7611 7742 9142 +3 7611 9142 9014 +3 7612 9015 9143 +3 7612 9143 7743 +3 7613 7709 8044 +3 7613 8044 7954 +3 7614 7955 8045 +3 7614 8045 7710 +3 7615 7963 8816 +3 7615 8816 8505 +3 7616 8506 8817 +3 7616 8817 7964 +3 7617 9038 9377 +3 7617 9377 7986 +3 7618 7987 9378 +3 7618 9378 9039 +3 7619 9198 9639 +3 7619 9639 8006 +3 7620 8007 9640 +3 7620 9640 9199 +3 7621 8293 8646 +3 7621 8646 7998 +3 7622 7999 8647 +3 7622 8647 8294 +3 7623 7800 8962 +3 7623 8695 7758 +3 7623 8962 8695 +3 7624 7759 8696 +3 7624 8696 8963 +3 7624 8963 7801 +3 7625 8008 8511 +3 7625 8511 8009 +3 7626 8315 8785 +3 7626 8785 8138 +3 7627 8139 8786 +3 7627 8786 8316 +3 7628 8679 8998 +3 7628 8998 7939 +3 7629 7940 8999 +3 7629 8999 8680 +3 7630 8610 9028 +3 7630 9028 8089 +3 7631 8090 9029 +3 7631 9029 8611 +3 7632 8014 8536 +3 7632 8536 8181 +3 7633 8182 8537 +3 7633 8537 8015 +3 7634 7859 8069 +3 7634 8069 7842 +3 7635 7843 8070 +3 7635 8070 7860 +3 7636 8112 8677 +3 7636 8677 8252 +3 7637 8253 8678 +3 7637 8678 8113 +3 7638 8034 8337 +3 7638 8337 7979 +3 7639 7980 8338 +3 7639 8338 8035 +3 7640 8038 9095 +3 7640 9095 8721 +3 7641 8722 9096 +3 7641 9096 8039 +3 7642 8050 8933 +3 7642 8933 8572 +3 7643 8573 8934 +3 7643 8934 8051 +3 7644 7952 8881 +3 7644 8881 8614 +3 7645 8615 8882 +3 7645 8882 7953 +3 7646 7663 7664 +3 7646 7664 7674 +3 7646 7673 7663 +3 7646 7674 7676 +3 7646 7675 7673 +3 7646 7676 7675 +3 7647 7796 9002 +3 7647 9002 8836 +3 7648 8837 9003 +3 7648 9003 7797 +3 7649 8086 8648 +3 7649 8648 8085 +3 7650 7888 8724 +3 7650 8724 8522 +3 7651 8523 8725 +3 7651 8725 7889 +3 7652 9042 9453 +3 7652 9453 8063 +3 7653 8064 9454 +3 7653 9454 9043 +3 7654 8016 8524 +3 7654 8524 8189 +3 7655 8190 8525 +3 7655 8525 8017 +3 7656 7923 9247 +3 7656 9247 8964 +3 7657 8965 9248 +3 7657 9248 7924 +3 7658 7785 8333 +3 7658 8333 8203 +3 7659 8204 8334 +3 7659 8334 7786 +3 7660 7929 8528 +3 7660 8528 8266 +3 7661 8267 8529 +3 7661 8529 7930 +3 7662 8520 9047 +3 7662 9047 8521 +3 7663 7673 7729 +3 7663 7718 7664 +3 7663 7729 7744 +3 7663 7744 7718 +3 7664 7718 7745 +3 7664 7730 7674 +3 7664 7745 7730 +3 7665 8295 8683 +3 7665 8683 8126 +3 7666 8127 8684 +3 7666 8684 8296 +3 7667 8166 8313 +3 7667 8313 7832 +3 7668 7833 8314 +3 7668 8314 8167 +3 7669 8547 8919 +3 7669 8919 8083 +3 7670 8084 8920 +3 7670 8920 8548 +3 7671 8030 8659 +3 7671 8659 8370 +3 7672 8371 8660 +3 7672 8660 8031 +3 7673 7675 7735 +3 7673 7735 7752 +3 7673 7752 7729 +3 7674 7730 7753 +3 7674 7736 7676 +3 7674 7753 7736 +3 7675 7676 7741 +3 7675 7741 7754 +3 7675 7754 7735 +3 7676 7736 7755 +3 7676 7755 7741 +3 7677 7905 8168 +3 7677 8168 7958 +3 7678 7959 8169 +3 7678 8169 7906 +3 7679 7994 8172 +3 7679 8172 7905 +3 7680 7906 8173 +3 7680 8173 7995 +3 7681 7915 8456 +3 7681 8456 8240 +3 7682 8241 8457 +3 7682 8457 7916 +3 7683 8366 9467 +3 7683 9467 8820 +3 7684 8821 9470 +3 7684 9470 8367 +3 7685 8452 8651 +3 7685 8651 7950 +3 7686 7951 8652 +3 7686 8652 8453 +3 7687 8588 9054 +3 7687 9054 8195 +3 7688 8196 9055 +3 7688 9055 8589 +3 7689 8941 9517 +3 7689 9517 8250 +3 7690 8251 9518 +3 7690 9518 8942 +3 7691 8360 9682 +3 7691 9682 8991 +3 7692 8992 9683 +3 7692 9683 8363 +3 7693 8018 8412 +3 7693 8412 8136 +3 7694 8137 8413 +3 7694 8413 8019 +3 7695 8271 8540 +3 7695 8540 7975 +3 7696 7976 8541 +3 7696 8541 8272 +3 7697 8408 8640 +3 7697 8640 7814 +3 7698 7815 8641 +3 7698 8641 8409 +3 7699 8853 9223 +3 7699 9223 8095 +3 7700 8096 9224 +3 7700 9224 8854 +3 7701 7913 8551 +3 7701 8551 8354 +3 7702 8355 8552 +3 7702 8552 7914 +3 7703 7783 8164 +3 7703 8067 7746 +3 7703 8164 8067 +3 7704 7747 8068 +3 7704 8068 8165 +3 7704 8165 7784 +3 7705 8108 8822 +3 7705 8822 8475 +3 7706 8476 8823 +3 7706 8823 8109 +3 7707 8612 9926 +3 7707 9926 8957 +3 7708 8958 9927 +3 7708 9927 8613 +3 7709 7842 8146 +3 7709 8146 8044 +3 7710 8045 8147 +3 7710 8147 7843 +3 7711 7934 9081 +3 7711 9081 8873 +3 7712 8874 9082 +3 7712 9082 7935 +3 7713 8283 8574 +3 7713 8574 8036 +3 7714 8037 8575 +3 7714 8575 8284 +3 7715 7738 8310 +3 7715 8309 7737 +3 7715 8310 8309 +3 7716 8120 8484 +3 7716 8484 8124 +3 7717 8125 8485 +3 7717 8485 8121 +3 7718 7744 7794 +3 7718 7794 7795 +3 7718 7795 7745 +3 7719 8545 9654 +3 7719 9654 8779 +3 7720 8780 9655 +3 7720 9655 8546 +3 7721 8325 9492 +3 7721 9492 8875 +3 7722 8876 9493 +3 7722 9493 8326 +3 7723 8841 10159 +3 7723 10159 8959 +3 7724 8960 10160 +3 7724 10160 8842 +3 7725 8193 8422 +3 7725 8422 7969 +3 7726 7970 8423 +3 7726 8423 8194 +3 7727 8913 10135 +3 7727 10135 8841 +3 7728 8842 10136 +3 7728 10136 8914 +3 7729 7752 7851 +3 7729 7836 7744 +3 7729 7851 7836 +3 7730 7745 7837 +3 7730 7837 7852 +3 7730 7852 7753 +3 7731 8136 8622 +3 7731 8622 8234 +3 7732 8235 8623 +3 7732 8623 8137 +3 7733 7960 8170 +3 7733 8170 7988 +3 7734 7989 8171 +3 7734 8171 7961 +3 7735 7754 7875 +3 7735 7865 7752 +3 7735 7875 7865 +3 7736 7753 7866 +3 7736 7866 7876 +3 7736 7876 7755 +3 7737 8309 8376 +3 7737 8376 7826 +3 7738 7827 8377 +3 7738 8377 8310 +3 7739 8187 8459 +3 7739 8459 8034 +3 7740 8035 8460 +3 7740 8460 8188 +3 7741 7755 7880 +3 7741 7879 7754 +3 7741 7880 7879 +3 7742 7965 9316 +3 7742 9316 9142 +3 7743 9143 9317 +3 7743 9317 7966 +3 7744 7836 7869 +3 7744 7869 7794 +3 7745 7795 7870 +3 7745 7870 7837 +3 7746 8067 8152 +3 7746 8152 7859 +3 7747 7860 8153 +3 7747 8153 8068 +3 7748 7988 8254 +3 7748 8254 8081 +3 7749 8082 8255 +3 7749 8255 7989 +3 7750 8895 9408 +3 7750 9408 8279 +3 7751 8280 9409 +3 7751 9409 8896 +3 7752 7865 7927 +3 7752 7927 7851 +3 7753 7852 7928 +3 7753 7928 7866 +3 7754 7879 7948 +3 7754 7948 7875 +3 7755 7876 7949 +3 7755 7949 7880 +3 7756 8406 8697 +3 7756 8697 8130 +3 7757 8131 8698 +3 7757 8698 8407 +3 7758 8695 8921 +3 7758 8921 8042 +3 7759 8043 8922 +3 7759 8922 8696 +3 7760 8100 8438 +3 7760 8438 8174 +3 7761 8174 8439 +3 7761 8439 8101 +3 7762 7798 8450 +3 7762 8448 7806 +3 7762 8450 8448 +3 7763 7807 8449 +3 7763 8449 8451 +3 7763 8451 7799 +3 7764 8994 9690 +3 7764 9690 8477 +3 7765 8477 9691 +3 7765 9691 8995 +3 7766 8899 9445 +3 7766 9445 8331 +3 7767 8332 9446 +3 7767 9446 8900 +3 7768 8124 8561 +3 7768 8561 8273 +3 7769 8274 8562 +3 7769 8562 8125 +3 7770 8747 9934 +3 7770 9934 8907 +3 7771 8908 9935 +3 7771 9935 8748 +3 7772 8121 8563 +3 7772 8563 8120 +3 7773 8004 8891 +3 7773 8891 8618 +3 7774 8619 8892 +3 7774 8892 8005 +3 7775 8175 8430 +3 7775 8430 8100 +3 7776 8101 8431 +3 7776 8431 8176 +3 7777 7824 8211 +3 7777 8211 8262 +3 7777 8262 7845 +3 7778 7846 8263 +3 7778 8212 7825 +3 7778 8263 8212 +3 7779 8863 9897 +3 7779 9897 8755 +3 7780 8756 9898 +3 7780 9898 8864 +3 7781 7979 8361 +3 7781 8361 8444 +3 7781 8444 7881 +3 7782 7882 8445 +3 7782 8362 7980 +3 7782 8445 8362 +3 7783 7958 8297 +3 7783 8297 8164 +3 7784 8165 8298 +3 7784 8298 7959 +3 7785 8026 8514 +3 7785 8514 8333 +3 7786 8334 8515 +3 7786 8515 8027 +3 7787 8223 9008 +3 7787 9008 8590 +3 7788 8591 9009 +3 7788 9009 8224 +3 7789 8718 9158 +3 7789 9158 8242 +3 7790 8243 9159 +3 7790 9159 8719 +3 7791 7961 8229 +3 7791 8229 7960 +3 7792 8755 9831 +3 7792 9831 8747 +3 7793 8748 9832 +3 7793 9832 8756 +3 7794 7869 7967 +3 7794 7936 7795 +3 7794 7967 7936 +3 7795 7936 7968 +3 7795 7968 7870 +3 7796 8209 9190 +3 7796 9190 9002 +3 7797 9003 9191 +3 7797 9191 8210 +3 7798 7909 8624 +3 7798 8624 8450 +3 7799 8451 8625 +3 7799 8625 7910 +3 7800 8087 9183 +3 7800 9183 8962 +3 7801 8963 9184 +3 7801 9184 8088 +3 7802 8649 9020 +3 7802 9020 8183 +3 7803 8184 9021 +3 7803 9021 8650 +3 7804 8287 9501 +3 7804 9501 9034 +3 7805 9035 9502 +3 7805 9502 8288 +3 7806 8448 8509 +3 7806 8509 7917 +3 7807 7918 8510 +3 7807 8510 8449 +3 7808 7809 8738 +3 7808 8738 8773 +3 7808 8773 7886 +3 7809 7887 8774 +3 7809 8774 8738 +3 7810 8966 9780 +3 7810 9780 8616 +3 7811 8617 9781 +3 7811 9781 8967 +3 7812 8814 9160 +3 7812 9160 8179 +3 7813 8180 9161 +3 7813 9161 8815 +3 7814 8640 8804 +3 7814 8804 8048 +3 7815 8049 8805 +3 7815 8805 8641 +3 7816 8158 9730 +3 7816 9730 9356 +3 7817 9357 9731 +3 7817 9731 8159 +3 7818 9334 10029 +3 7818 10029 8446 +3 7819 8447 10030 +3 7819 10030 9335 +3 7820 9162 9784 +3 7820 9784 8384 +3 7821 8385 9785 +3 7821 9785 9163 +3 7822 8600 9306 +3 7822 9306 8582 +3 7823 8583 9307 +3 7823 9307 8601 +3 7824 7925 8289 +3 7824 8289 8211 +3 7825 8212 8290 +3 7825 8290 7926 +3 7826 8376 8503 +3 7826 8503 8002 +3 7827 8003 8504 +3 7827 8504 8377 +3 7828 8775 9064 +3 7828 9064 8142 +3 7829 8143 9065 +3 7829 9065 8776 +3 7830 8319 8705 +3 7830 8705 7971 +3 7831 7972 8706 +3 7831 8706 8320 +3 7832 8313 8432 +3 7832 8432 7984 +3 7833 7985 8433 +3 7833 8433 8314 +3 7834 8358 9845 +3 7834 9845 9300 +3 7835 9301 9846 +3 7835 9846 8359 +3 7836 7851 8022 +3 7836 8022 8028 +3 7836 8028 7869 +3 7837 7870 8029 +3 7837 8023 7852 +3 7837 8029 8023 +3 7838 8323 10109 +3 7838 10109 9613 +3 7839 9614 10110 +3 7839 10110 8324 +3 7840 8584 9318 +3 7840 9318 8600 +3 7841 8601 9319 +3 7841 9319 8585 +3 7842 8069 8305 +3 7842 8305 8146 +3 7843 8147 8306 +3 7843 8306 8070 +3 7844 8847 9507 +3 7844 9507 8848 +3 7845 8262 8350 +3 7845 8350 7994 +3 7846 7995 8351 +3 7846 8351 8263 +3 7847 9066 9457 +3 7847 9457 8232 +3 7848 8233 9458 +3 7848 9458 9067 +3 7849 9117 10291 +3 7849 10291 8913 +3 7850 8914 10292 +3 7850 10292 9118 +3 7851 7927 8058 +3 7851 8058 8022 +3 7852 8023 8059 +3 7852 8059 7928 +3 7853 8893 9480 +3 7853 9480 8454 +3 7854 8455 9481 +3 7854 9481 8894 +3 7855 9332 9996 +3 7855 9996 8490 +3 7856 8491 9997 +3 7856 9997 9333 +3 7857 8345 9150 +3 7857 9150 8669 +3 7858 8670 9151 +3 7858 9151 8345 +3 7859 8152 8301 +3 7859 8301 8069 +3 7860 8070 8302 +3 7860 8302 8153 +3 7861 8507 9985 +3 7861 9985 9298 +3 7862 9299 9986 +3 7862 9986 8508 +3 7863 8244 8586 +3 7863 8586 8260 +3 7864 8261 8587 +3 7864 8587 8245 +3 7865 7875 8054 +3 7865 8054 8077 +3 7865 8077 7927 +3 7866 7928 8078 +3 7866 8055 7876 +3 7866 8078 8055 +3 7867 8252 8955 +3 7867 8955 8606 +3 7868 8607 8956 +3 7868 8956 8253 +3 7869 8028 8071 +3 7869 8071 7967 +3 7870 7968 8072 +3 7870 8072 8029 +3 7871 8458 9433 +3 7871 9433 8845 +3 7872 8846 9434 +3 7872 9434 8458 +3 7873 8553 9645 +3 7873 9645 8953 +3 7874 8954 9646 +3 7874 9646 8554 +3 7875 7948 8102 +3 7875 8102 8054 +3 7876 8055 8103 +3 7876 8103 7949 +3 7877 8052 8885 +3 7877 8885 8428 +3 7878 8429 8886 +3 7878 8886 8053 +3 7879 7880 8060 +3 7879 8060 8106 +3 7879 8106 7948 +3 7880 7949 8107 +3 7880 8107 8060 +3 7881 8444 8555 +3 7881 8555 8032 +3 7882 8033 8556 +3 7882 8556 8445 +3 7883 8594 9044 +3 7883 9044 8595 +3 7884 9219 10193 +3 7884 10193 8739 +3 7885 8740 10194 +3 7885 10194 9220 +3 7886 8773 8830 +3 7886 8830 8012 +3 7887 8013 8831 +3 7887 8831 8774 +3 7888 8201 9026 +3 7888 9026 8724 +3 7889 8725 9027 +3 7889 9027 8202 +3 7890 8559 8909 +3 7890 8909 8271 +3 7891 8272 8910 +3 7891 8910 8560 +3 7892 8751 9546 +3 7892 9546 8653 +3 7893 8654 9547 +3 7893 9547 8752 +3 7894 8673 9364 +3 7894 9364 8584 +3 7895 8585 9365 +3 7895 9365 8674 +3 7896 8398 9843 +3 7896 9843 9336 +3 7897 9337 9844 +3 7897 9844 8399 +3 7898 8356 10115 +3 7898 10115 9605 +3 7899 9606 10116 +3 7899 10116 8357 +3 7900 8959 10378 +3 7900 10378 9215 +3 7901 9216 10379 +3 7901 10379 8960 +3 7902 7944 8977 +3 7902 8977 8978 +3 7902 8978 7945 +3 7903 8657 9056 +3 7903 9056 8315 +3 7904 8316 9057 +3 7904 9057 8658 +3 7905 8172 8426 +3 7905 8426 8168 +3 7906 8169 8427 +3 7906 8427 8173 +3 7907 8663 9554 +3 7907 9554 8730 +3 7908 8731 9555 +3 7908 9555 8664 +3 7909 8073 8741 +3 7909 8741 8624 +3 7910 8625 8742 +3 7910 8742 8074 +3 7911 8582 9373 +3 7911 9373 8716 +3 7912 8717 9374 +3 7912 9374 8583 +3 7913 8181 8783 +3 7913 8783 8551 +3 7914 8552 8784 +3 7914 8784 8182 +3 7915 8189 8691 +3 7915 8691 8456 +3 7916 8457 8692 +3 7916 8692 8190 +3 7917 8509 8628 +3 7917 8628 8091 +3 7918 8092 8629 +3 7918 8629 8510 +3 7919 8626 9245 +3 7919 9245 8568 +3 7920 8569 9246 +3 7920 9246 8627 +3 7921 8653 9571 +3 7921 9571 8663 +3 7922 8664 9572 +3 7922 9572 8654 +3 7923 8246 9627 +3 7923 9627 9247 +3 7924 9248 9628 +3 7924 9628 8247 +3 7925 8081 8416 +3 7925 8416 8289 +3 7926 8290 8417 +3 7926 8417 8082 +3 7927 8077 8150 +3 7927 8150 8058 +3 7928 8059 8151 +3 7928 8151 8078 +3 7929 8234 8808 +3 7929 8808 8528 +3 7930 8529 8809 +3 7930 8809 8235 +3 7931 8580 9251 +3 7931 9251 8620 +3 7932 8621 9252 +3 7932 9252 8581 +3 7933 7954 8380 +3 7933 8380 8381 +3 7933 8381 7955 +3 7934 8207 9617 +3 7934 9617 9081 +3 7935 9082 9618 +3 7935 9618 8208 +3 7936 7967 8110 +3 7936 8110 8111 +3 7936 8111 7968 +3 7937 8636 10325 +3 7937 10325 9579 +3 7938 9580 10326 +3 7938 10326 8637 +3 7939 8998 9342 +3 7939 9342 8321 +3 7940 8322 9343 +3 7940 9343 8999 +3 7941 8703 9320 +3 7941 9320 8225 +3 7942 8226 9321 +3 7942 9321 8704 +3 7943 7977 8736 +3 7943 8736 8737 +3 7943 8737 7978 +3 7944 8024 9030 +3 7944 9030 8977 +3 7945 8978 9031 +3 7945 9031 8025 +3 7946 8568 9268 +3 7946 9268 8580 +3 7947 8581 9269 +3 7947 9269 8569 +3 7948 8106 8185 +3 7948 8185 8102 +3 7949 8103 8186 +3 7949 8186 8107 +3 7950 8651 8968 +3 7950 8968 8295 +3 7951 8296 8969 +3 7951 8969 8652 +3 7952 8317 9231 +3 7952 9231 8881 +3 7953 8882 9232 +3 7953 9232 8318 +3 7954 8044 8436 +3 7954 8436 8380 +3 7955 8381 8437 +3 7955 8437 8045 +3 7956 8471 9465 +3 7956 9465 8985 +3 7957 8986 9466 +3 7957 9466 8472 +3 7958 8168 8495 +3 7958 8495 8297 +3 7959 8298 8496 +3 7959 8496 8169 +3 7960 8229 8414 +3 7960 8414 8170 +3 7961 8171 8415 +3 7961 8415 8229 +3 7962 9188 10002 +3 7962 10002 9187 +3 7963 8374 9205 +3 7963 9205 8816 +3 7964 8817 9206 +3 7964 9206 8375 +3 7965 8512 9913 +3 7965 9913 9316 +3 7966 9317 9914 +3 7966 9914 8513 +3 7967 8071 8162 +3 7967 8162 8110 +3 7968 8111 8163 +3 7968 8163 8072 +3 7969 8422 8665 +3 7969 8665 8244 +3 7970 8245 8666 +3 7970 8666 8423 +3 7971 8705 8861 +3 7971 8861 8156 +3 7972 8157 8862 +3 7972 8862 8706 +3 7973 8434 9750 +3 7973 9750 9262 +3 7974 9263 9751 +3 7974 9751 8435 +3 7975 8540 8834 +3 7975 8834 8319 +3 7976 8320 8835 +3 7976 8835 8541 +3 7977 8093 8800 +3 7977 8800 8736 +3 7978 8737 8801 +3 7978 8801 8094 +3 7979 8337 8699 +3 7979 8699 8361 +3 7980 8362 8700 +3 7980 8700 8338 +3 7981 8667 10285 +3 7981 10285 9514 +3 7982 9515 10286 +3 7982 10286 8668 +3 7983 8020 9732 +3 7983 9732 9733 +3 7983 9733 8021 +3 7984 8432 8592 +3 7984 8592 8175 +3 7985 8176 8593 +3 7985 8593 8433 +3 7986 9377 9837 +3 7986 9837 8400 +3 7987 8401 9838 +3 7987 9838 9378 +3 7988 8170 8418 +3 7988 8418 8254 +3 7989 8255 8419 +3 7989 8419 8171 +3 7990 8499 8925 +3 7990 8925 8442 +3 7991 8443 8926 +3 7991 8926 8500 +3 7992 8769 9362 +3 7992 9362 8594 +3 7993 8595 9363 +3 7993 9363 8770 +3 7994 8350 8526 +3 7994 8526 8172 +3 7995 8173 8527 +3 7995 8527 8351 +3 7996 8420 9540 +3 7996 9540 9085 +3 7997 9086 9541 +3 7997 9541 8421 +3 7998 8646 9050 +3 7998 9050 8404 +3 7999 8405 9051 +3 7999 9051 8647 +3 8000 9386 10079 +3 8000 10079 8348 +3 8001 8349 10080 +3 8001 10080 9387 +3 8002 8503 8675 +3 8002 8675 8187 +3 8003 8188 8676 +3 8003 8676 8504 +3 8004 8217 9121 +3 8004 9121 8891 +3 8005 8892 9122 +3 8005 9122 8218 +3 8006 9639 10073 +3 8006 10073 8402 +3 8007 8403 10074 +3 8007 10074 9640 +3 8008 8404 8889 +3 8008 8889 8511 +3 8009 8511 8890 +3 8009 8890 8405 +3 8010 9107 10101 +3 8010 10101 8863 +3 8011 8864 10102 +3 8011 10102 9108 +3 8012 8830 8973 +3 8012 8973 8238 +3 8013 8239 8974 +3 8013 8974 8831 +3 8014 8442 8945 +3 8014 8945 8536 +3 8015 8537 8946 +3 8015 8946 8443 +3 8016 8394 8877 +3 8016 8877 8524 +3 8017 8525 8878 +3 8017 8878 8395 +3 8018 8114 8765 +3 8018 8765 8412 +3 8019 8413 8766 +3 8019 8766 8115 +3 8020 8144 9772 +3 8020 9772 9732 +3 8021 9733 9773 +3 8021 9773 8145 +3 8022 8058 8215 +3 8022 8199 8028 +3 8022 8215 8199 +3 8023 8029 8200 +3 8023 8200 8216 +3 8023 8216 8059 +3 8024 8148 9130 +3 8024 9130 9030 +3 8025 9031 9131 +3 8025 9131 8149 +3 8026 8260 8714 +3 8026 8714 8514 +3 8027 8515 8715 +3 8027 8715 8261 +3 8028 8199 8227 +3 8028 8227 8071 +3 8029 8072 8228 +3 8029 8228 8200 +3 8030 8428 9058 +3 8030 9058 8659 +3 8031 8660 9059 +3 8031 9059 8429 +3 8032 8555 8693 +3 8032 8693 8193 +3 8033 8194 8694 +3 8033 8694 8556 +3 8034 8459 8761 +3 8034 8761 8337 +3 8035 8338 8762 +3 8035 8762 8460 +3 8036 8574 8903 +3 8036 8903 8394 +3 8037 8395 8904 +3 8037 8904 8575 +3 8038 8482 9573 +3 8038 9573 9095 +3 8039 9096 9574 +3 8039 9574 8483 +3 8040 9115 9915 +3 8040 9915 8771 +3 8041 8772 9916 +3 8041 9916 9116 +3 8042 8921 9192 +3 8042 9192 8329 +3 8043 8330 9193 +3 8043 9193 8922 +3 8044 8146 8538 +3 8044 8538 8436 +3 8045 8437 8539 +3 8045 8539 8147 +3 8046 8979 9463 +3 8046 9463 8520 +3 8047 8521 9464 +3 8047 9464 8980 +3 8048 8804 9048 +3 8048 9048 8293 +3 8049 8294 9049 +3 8049 9049 8805 +3 8050 8730 9721 +3 8050 9721 8933 +3 8051 8934 9722 +3 8051 9722 8731 +3 8052 8291 9123 +3 8052 9123 8885 +3 8053 8886 9124 +3 8053 9124 8292 +3 8054 8102 8230 +3 8054 8219 8077 +3 8054 8230 8219 +3 8055 8078 8220 +3 8055 8220 8231 +3 8055 8231 8103 +3 8056 8268 9294 +3 8056 9294 9593 +3 8056 9593 8299 +3 8057 8300 9594 +3 8057 9295 8269 +3 8057 9594 9295 +3 8058 8150 8281 +3 8058 8281 8215 +3 8059 8216 8282 +3 8059 8282 8151 +3 8060 8107 8276 +3 8060 8275 8106 +3 8060 8276 8275 +3 8061 8951 9841 +3 8061 9841 8931 +3 8062 8932 9842 +3 8062 9842 8952 +3 8063 9453 9871 +3 8063 9871 8473 +3 8064 8474 9872 +3 8064 9872 9454 +3 8065 8907 10237 +3 8065 10237 9233 +3 8066 9234 10238 +3 8066 10238 8908 +3 8067 8164 8566 +3 8067 8486 8152 +3 8067 8566 8486 +3 8068 8153 8487 +3 8068 8487 8567 +3 8068 8567 8165 +3 8069 8301 8532 +3 8069 8532 8305 +3 8070 8306 8533 +3 8070 8533 8302 +3 8071 8227 8327 +3 8071 8327 8162 +3 8072 8163 8328 +3 8072 8328 8228 +3 8073 8273 8947 +3 8073 8947 8741 +3 8074 8742 8948 +3 8074 8948 8274 +3 8075 8669 9643 +3 8075 9643 8987 +3 8076 8988 9644 +3 8076 9644 8670 +3 8077 8219 8277 +3 8077 8277 8150 +3 8078 8151 8278 +3 8078 8278 8220 +3 8079 8937 9847 +3 8079 9847 8951 +3 8080 8952 9848 +3 8080 9848 8938 +3 8081 8254 8596 +3 8081 8596 8416 +3 8082 8417 8597 +3 8082 8597 8255 +3 8083 8919 9176 +3 8083 9176 8339 +3 8084 8340 9177 +3 8084 9177 8920 +3 8085 8648 9328 +3 8085 9328 8743 +3 8086 8744 9329 +3 8086 9329 8648 +3 8087 8386 9510 +3 8087 9510 9183 +3 8088 9184 9511 +3 8088 9511 8387 +3 8089 9028 9776 +3 8089 9776 8751 +3 8090 8752 9777 +3 8090 9777 9029 +3 8091 8628 8812 +3 8091 8812 8283 +3 8092 8284 8813 +3 8092 8813 8629 +3 8093 8266 8901 +3 8093 8901 8800 +3 8094 8801 8902 +3 8094 8902 8267 +3 8095 9223 9649 +3 8095 9649 8467 +3 8096 8468 9650 +3 8096 9650 9224 +3 8097 8123 9271 +3 8097 9270 8122 +3 8097 9271 9270 +3 8098 8392 10261 +3 8098 9891 8478 +3 8098 10261 9891 +3 8099 8479 9892 +3 8099 9892 10262 +3 8099 10262 8393 +3 8100 8430 8728 +3 8100 8728 8438 +3 8101 8439 8729 +3 8101 8729 8431 +3 8102 8185 8307 +3 8102 8307 8230 +3 8103 8231 8308 +3 8103 8308 8186 +3 8104 8614 9350 +3 8104 9350 8832 +3 8105 8833 9351 +3 8105 9351 8615 +3 8106 8275 8343 +3 8106 8343 8185 +3 8107 8186 8344 +3 8107 8344 8276 +3 8108 8370 9087 +3 8108 9087 8822 +3 8109 8823 9088 +3 8109 9088 8371 +3 8110 8162 8303 +3 8110 8270 8111 +3 8110 8303 8270 +3 8111 8270 8304 +3 8111 8304 8163 +3 8112 8701 9296 +3 8112 9296 8677 +3 8113 8678 9297 +3 8113 9297 8702 +3 8114 8240 8869 +3 8114 8869 8765 +3 8115 8766 8870 +3 8115 8870 8241 +3 8116 8117 9523 +3 8116 9523 9575 +3 8116 9575 8177 +3 8117 8178 9576 +3 8117 9576 9523 +3 8118 8707 9660 +3 8118 9660 9012 +3 8119 9013 9661 +3 8119 9661 8708 +3 8120 8563 8887 +3 8120 8887 8484 +3 8121 8485 8888 +3 8121 8888 8563 +3 8122 9270 9346 +3 8122 9346 8197 +3 8123 8198 9347 +3 8123 9347 9271 +3 8124 8484 8879 +3 8124 8879 8561 +3 8125 8562 8880 +3 8125 8880 8485 +3 8126 8683 9304 +3 8126 9304 8701 +3 8127 8702 9305 +3 8127 9305 8684 +3 8128 9447 10535 +3 8128 10535 9117 +3 8129 9118 10536 +3 8129 10536 9448 +3 8130 8697 9068 +3 8130 9068 8499 +3 8131 8500 9069 +3 8131 9069 8698 +3 8132 8424 9629 +3 8132 9629 9905 +3 8132 9905 8396 +3 8133 8397 9906 +3 8133 9630 8425 +3 8133 9906 9630 +3 8134 9105 9983 +3 8134 9983 8937 +3 8135 8938 9984 +3 8135 9984 9106 +3 8136 8412 8871 +3 8136 8871 8622 +3 8137 8623 8872 +3 8137 8872 8413 +3 8138 8785 9286 +3 8138 9286 8382 +3 8139 8383 9287 +3 8139 9287 8786 +3 8140 8931 10015 +3 8140 10015 9166 +3 8141 9167 10016 +3 8141 10016 8932 +3 8142 9064 9420 +3 8142 9420 8378 +3 8143 8379 9421 +3 8143 9421 9065 +3 8144 8335 9968 +3 8144 9968 9772 +3 8145 9773 9969 +3 8145 9969 8336 +3 8146 8305 8655 +3 8146 8655 8538 +3 8147 8539 8656 +3 8147 8656 8306 +3 8148 8475 9274 +3 8148 9274 9130 +3 8149 9131 9275 +3 8149 9275 8476 +3 8150 8277 8440 +3 8150 8440 8281 +3 8151 8282 8441 +3 8151 8441 8278 +3 8152 8486 8604 +3 8152 8604 8301 +3 8153 8302 8605 +3 8153 8605 8487 +3 8154 9072 9813 +3 8154 9813 8534 +3 8155 8535 9814 +3 8155 9814 9073 +3 8156 8861 9109 +3 8156 9109 8406 +3 8157 8407 9110 +3 8157 9110 8862 +3 8158 8518 10119 +3 8158 10119 9730 +3 8159 9731 10120 +3 8159 10120 8519 +3 8160 8203 8826 +3 8160 8793 8166 +3 8160 8826 8793 +3 8161 8167 8794 +3 8161 8794 8827 +3 8161 8827 8204 +3 8162 8327 8465 +3 8162 8465 8303 +3 8163 8304 8466 +3 8163 8466 8328 +3 8164 8297 8671 +3 8164 8671 8566 +3 8165 8567 8672 +3 8165 8672 8298 +3 8166 8793 8824 +3 8166 8824 8313 +3 8167 8314 8825 +3 8167 8825 8794 +3 8168 8426 8712 +3 8168 8712 8495 +3 8169 8496 8713 +3 8169 8713 8427 +3 8170 8414 8634 +3 8170 8634 8418 +3 8171 8419 8635 +3 8171 8635 8415 +3 8172 8526 8734 +3 8172 8734 8426 +3 8173 8427 8735 +3 8173 8735 8527 +3 8174 8438 8799 +3 8174 8799 8439 +3 8175 8592 8795 +3 8175 8795 8430 +3 8176 8431 8796 +3 8176 8796 8593 +3 8177 9575 9686 +3 8177 9686 8311 +3 8178 8312 9687 +3 8178 9687 9576 +3 8179 9160 9599 +3 8179 9599 8588 +3 8180 8589 9600 +3 8180 9600 9161 +3 8181 8536 9113 +3 8181 9113 8783 +3 8182 8784 9114 +3 8182 9114 8537 +3 8183 9020 9418 +3 8183 9418 8626 +3 8184 8627 9419 +3 8184 9419 9021 +3 8185 8343 8461 +3 8185 8461 8307 +3 8186 8308 8462 +3 8186 8462 8344 +3 8187 8675 8949 +3 8187 8949 8459 +3 8188 8460 8950 +3 8188 8950 8676 +3 8189 8524 9022 +3 8189 9022 8691 +3 8190 8692 9023 +3 8190 9023 8525 +3 8191 8390 9276 +3 8191 9101 8258 +3 8191 9276 9101 +3 8192 8259 9102 +3 8192 9102 9277 +3 8192 9277 8391 +3 8193 8693 8917 +3 8193 8917 8422 +3 8194 8423 8918 +3 8194 8918 8694 +3 8195 9054 9631 +3 8195 9631 8703 +3 8196 8704 9632 +3 8196 9632 9055 +3 8197 9346 9490 +3 8197 9490 8341 +3 8198 8342 9491 +3 8198 9491 9347 +3 8199 8215 8469 +3 8199 8469 8480 +3 8199 8480 8227 +3 8200 8228 8481 +3 8200 8470 8216 +3 8200 8481 8470 +3 8201 8620 9366 +3 8201 9366 9026 +3 8202 9027 9367 +3 8202 9367 8621 +3 8203 8333 8923 +3 8203 8923 8826 +3 8204 8827 8924 +3 8204 8924 8334 +3 8205 8206 9422 +3 8205 9422 9459 +3 8205 9459 8264 +3 8206 8265 9460 +3 8206 9460 9422 +3 8207 8570 9966 +3 8207 9966 9617 +3 8208 9618 9967 +3 8208 9967 8571 +3 8209 8505 9475 +3 8209 9475 9190 +3 8210 9191 9476 +3 8210 9476 8506 +3 8211 8289 8687 +3 8211 8687 8709 +3 8211 8709 8262 +3 8212 8263 8710 +3 8212 8688 8290 +3 8212 8710 8688 +3 8213 8256 9018 +3 8213 9018 9181 +3 8213 9181 8408 +3 8214 8409 9182 +3 8214 9019 8257 +3 8214 9182 9019 +3 8215 8281 8497 +3 8215 8497 8469 +3 8216 8470 8498 +3 8216 8498 8282 +3 8217 8590 9484 +3 8217 9484 9121 +3 8218 9122 9485 +3 8218 9485 8591 +3 8219 8230 8463 +3 8219 8463 8488 +3 8219 8488 8277 +3 8220 8278 8489 +3 8220 8464 8231 +3 8220 8489 8464 +3 8221 9429 10595 +3 8221 10595 9326 +3 8222 9327 10596 +3 8222 10596 9430 +3 8223 8743 9526 +3 8223 9526 9008 +3 8224 9009 9527 +3 8224 9527 8744 +3 8225 9320 9710 +3 8225 9710 8610 +3 8226 8611 9711 +3 8226 9711 9321 +3 8227 8480 8542 +3 8227 8542 8327 +3 8228 8328 8543 +3 8228 8543 8481 +3 8229 8415 8711 +3 8229 8711 8414 +3 8230 8307 8493 +3 8230 8493 8463 +3 8231 8464 8494 +3 8231 8494 8308 +3 8232 9457 10430 +3 8232 10430 9107 +3 8233 9108 10431 +3 8233 10431 9458 +3 8234 8622 9164 +3 8234 9164 8808 +3 8235 8809 9165 +3 8235 9165 8623 +3 8236 9326 10572 +3 8236 10572 9380 +3 8237 9381 10573 +3 8237 10573 9327 +3 8238 8973 9257 +3 8238 9257 8559 +3 8239 8560 9258 +3 8239 9258 8974 +3 8240 8456 9045 +3 8240 9045 8869 +3 8241 8870 9046 +3 8241 9046 8457 +3 8242 9158 9674 +3 8242 9674 8769 +3 8243 8770 9675 +3 8243 9675 9159 +3 8244 8665 9006 +3 8244 9006 8586 +3 8245 8587 9007 +3 8245 9007 8666 +3 8246 8638 10013 +3 8246 10013 9627 +3 8247 9628 10014 +3 8247 10014 8639 +3 8248 9215 10771 +3 8248 10771 9713 +3 8249 9714 10772 +3 8249 10772 9216 +3 8250 9517 10225 +3 8250 10225 8895 +3 8251 8896 10226 +3 8251 10226 9518 +3 8252 8677 9360 +3 8252 9360 8955 +3 8253 8956 9361 +3 8253 9361 8678 +3 8254 8418 8726 +3 8254 8726 8596 +3 8255 8597 8727 +3 8255 8727 8419 +3 8256 8354 9076 +3 8256 9076 9018 +3 8257 9019 9077 +3 8257 9077 8355 +3 8258 9101 9241 +3 8258 9241 8452 +3 8259 8453 9242 +3 8259 9242 9102 +3 8260 8586 9024 +3 8260 9024 8714 +3 8261 8715 9025 +3 8261 9025 8587 +3 8262 8709 8789 +3 8262 8789 8350 +3 8263 8351 8790 +3 8263 8790 8710 +3 8264 9459 9565 +3 8264 9565 8388 +3 8265 8389 9566 +3 8265 9566 9460 +3 8266 8528 9144 +3 8266 9144 8901 +3 8267 8902 9145 +3 8267 9145 8529 +3 8268 8572 9603 +3 8268 9603 9294 +3 8269 9295 9604 +3 8269 9604 8573 +3 8270 8303 8501 +3 8270 8501 8502 +3 8270 8502 8304 +3 8271 8909 9172 +3 8271 9172 8540 +3 8272 8541 9173 +3 8272 9173 8910 +3 8273 8561 9174 +3 8273 9174 8947 +3 8274 8948 9175 +3 8274 9175 8562 +3 8275 8276 8544 +3 8275 8544 8578 +3 8275 8578 8343 +3 8276 8344 8579 +3 8276 8579 8544 +3 8277 8488 8602 +3 8277 8602 8440 +3 8278 8441 8603 +3 8278 8603 8489 +3 8279 9408 10021 +3 8279 10021 8847 +3 8280 8848 10022 +3 8280 10022 9409 +3 8281 8440 8608 +3 8281 8608 8497 +3 8282 8498 8609 +3 8282 8609 8441 +3 8283 8812 9079 +3 8283 9079 8574 +3 8284 8575 9080 +3 8284 9080 8813 +3 8285 8759 10365 +3 8285 10365 9443 +3 8286 9444 10366 +3 8286 10366 8760 +3 8287 8820 10081 +3 8287 10081 9501 +3 8288 9502 10082 +3 8288 10082 8821 +3 8289 8416 8806 +3 8289 8806 8687 +3 8290 8688 8807 +3 8290 8807 8417 +3 8291 8606 9398 +3 8291 9398 9123 +3 8292 9124 9399 +3 8292 9399 8607 +3 8293 9048 9375 +3 8293 9375 8646 +3 8294 8647 9376 +3 8294 9376 9049 +3 8295 8968 9352 +3 8295 9352 8683 +3 8296 8684 9353 +3 8296 9353 8969 +3 8297 8495 8851 +3 8297 8851 8671 +3 8298 8672 8852 +3 8298 8852 8496 +3 8299 9593 9861 +3 8299 9861 8557 +3 8300 8558 9862 +3 8300 9862 9594 +3 8301 8604 8777 +3 8301 8777 8532 +3 8302 8533 8778 +3 8302 8778 8605 +3 8303 8465 8630 +3 8303 8630 8501 +3 8304 8502 8631 +3 8304 8631 8466 +3 8305 8532 8867 +3 8305 8867 8655 +3 8306 8656 8868 +3 8306 8868 8533 +3 8307 8461 8598 +3 8307 8598 8493 +3 8308 8494 8599 +3 8308 8599 8462 +3 8309 8310 8961 +3 8309 8961 8989 +3 8309 8989 8376 +3 8310 8377 8990 +3 8310 8990 8961 +3 8311 9686 9853 +3 8311 9853 8530 +3 8312 8531 9854 +3 8312 9854 9687 +3 8313 8824 8911 +3 8313 8911 8432 +3 8314 8433 8912 +3 8314 8912 8825 +3 8315 9056 9560 +3 8315 9560 8785 +3 8316 8786 9561 +3 8316 9561 9057 +3 8317 8716 9676 +3 8317 9676 9231 +3 8318 9232 9677 +3 8318 9677 8717 +3 8319 8834 9217 +3 8319 9217 8705 +3 8320 8706 9218 +3 8320 9218 8835 +3 8321 9342 10231 +3 8321 10231 9105 +3 8322 9106 10232 +3 8322 10232 9343 +3 8323 8857 10671 +3 8323 10671 10109 +3 8324 10110 10672 +3 8324 10672 8858 +3 8325 8972 10197 +3 8325 10197 9492 +3 8326 9493 10198 +3 8326 10198 8972 +3 8327 8542 8644 +3 8327 8644 8465 +3 8328 8466 8645 +3 8328 8645 8543 +3 8329 9192 9597 +3 8329 9597 8673 +3 8330 8674 9598 +3 8330 9598 9193 +3 8331 9445 10060 +3 8331 10060 8979 +3 8332 8980 10061 +3 8332 10061 9446 +3 8333 8514 9060 +3 8333 9060 8923 +3 8334 8924 9061 +3 8334 9061 8515 +3 8335 8927 10617 +3 8335 10617 9968 +3 8336 9969 10618 +3 8336 10618 8928 +3 8337 8761 9125 +3 8337 9125 8699 +3 8338 8700 9126 +3 8338 9126 8762 +3 8339 9176 9534 +3 8339 9534 8657 +3 8340 8658 9535 +3 8340 9535 9177 +3 8341 9490 9706 +3 8341 9706 8564 +3 8342 8565 9707 +3 8342 9707 9491 +3 8343 8578 8642 +3 8343 8642 8461 +3 8344 8462 8643 +3 8344 8643 8579 +3 8345 9151 9712 +3 8345 9712 9150 +3 8346 8522 9388 +3 8346 9388 9656 +3 8346 9656 8549 +3 8347 8550 9657 +3 8347 9389 8523 +3 8347 9657 9389 +3 8348 10079 10541 +3 8348 10541 8791 +3 8349 8792 10542 +3 8349 10542 10080 +3 8350 8789 8943 +3 8350 8943 8526 +3 8351 8527 8944 +3 8351 8944 8790 +3 8352 9455 10458 +3 8352 10458 9266 +3 8353 9267 10459 +3 8353 10459 9456 +3 8354 8551 9237 +3 8354 9237 9076 +3 8355 9077 9238 +3 8355 9238 8552 +3 8356 8855 10663 +3 8356 10663 10115 +3 8357 10116 10664 +3 8357 10664 8856 +3 8358 8953 10501 +3 8358 10501 9845 +3 8359 9846 10502 +3 8359 10502 8954 +3 8360 8875 10309 +3 8360 10309 9682 +3 8361 8699 9010 +3 8361 9010 8444 +3 8362 8445 9011 +3 8362 9011 8700 +3 8363 9683 10310 +3 8363 10310 8876 +3 8364 9280 10440 +3 8364 10440 9392 +3 8365 9393 10441 +3 8365 10441 9281 +3 8366 8845 9992 +3 8366 9992 9467 +3 8367 9470 9993 +3 8367 9993 8846 +3 8368 9380 10717 +3 8368 10717 9611 +3 8369 9612 10718 +3 8369 10718 9381 +3 8370 8659 9423 +3 8370 9423 9087 +3 8371 9088 9424 +3 8371 9424 8660 +3 8372 9266 10374 +3 8372 10374 9280 +3 8373 9281 10375 +3 8373 10375 9267 +3 8374 8832 9719 +3 8374 9719 9205 +3 8375 9206 9720 +3 8375 9720 8833 +3 8376 8989 9062 +3 8376 9062 8503 +3 8377 8504 9063 +3 8377 9063 8990 +3 8378 9420 9790 +3 8378 9790 8718 +3 8379 8719 9791 +3 8379 9791 9421 +3 8380 8436 8865 +3 8380 8838 8381 +3 8380 8865 8838 +3 8381 8838 8866 +3 8381 8866 8437 +3 8382 9286 9601 +3 8382 9601 8649 +3 8383 8650 9602 +3 8383 9602 9287 +3 8384 9784 10454 +3 8384 10454 8994 +3 8385 8995 10455 +3 8385 10455 9785 +3 8386 8721 9877 +3 8386 9877 9510 +3 8387 9511 9878 +3 8387 9878 8722 +3 8388 9565 9698 +3 8388 9698 8547 +3 8389 8548 9699 +3 8389 9699 9566 +3 8390 8618 9542 +3 8390 9542 9276 +3 8391 9277 9543 +3 8391 9543 8619 +3 8392 8732 10619 +3 8392 10619 10261 +3 8393 10262 10620 +3 8393 10620 8733 +3 8394 8903 9308 +3 8394 9308 8877 +3 8395 8878 9309 +3 8395 9309 8904 +3 8396 9905 10275 +3 8396 10275 8681 +3 8397 8682 10276 +3 8397 10276 9906 +3 8398 8991 10473 +3 8398 10473 9843 +3 8399 9844 10474 +3 8399 10474 8992 +3 8400 9837 10397 +3 8400 10397 8893 +3 8401 8894 10398 +3 8401 10398 9838 +3 8402 10073 10553 +3 8402 10553 8828 +3 8403 8829 10554 +3 8403 10554 10074 +3 8404 9050 9591 +3 8404 9591 8889 +3 8405 8890 9592 +3 8405 9592 9051 +3 8406 9109 9394 +3 8406 9394 8697 +3 8407 8698 9395 +3 8407 9395 9110 +3 8408 9181 9435 +3 8408 9435 8640 +3 8409 8641 9436 +3 8409 9436 9182 +3 8410 9725 10822 +3 8410 10822 9429 +3 8411 9430 10823 +3 8411 10823 9726 +3 8412 8765 9196 +3 8412 9196 8871 +3 8413 8872 9197 +3 8413 9197 8766 +3 8414 8711 8915 +3 8414 8915 8634 +3 8415 8635 8916 +3 8415 8916 8711 +3 8416 8596 8981 +3 8416 8981 8806 +3 8417 8807 8982 +3 8417 8982 8597 +3 8418 8634 8935 +3 8418 8935 8726 +3 8419 8727 8936 +3 8419 8936 8635 +3 8420 9166 10353 +3 8420 10353 9540 +3 8421 9541 10354 +3 8421 10354 9167 +3 8422 8917 9170 +3 8422 9170 8665 +3 8423 8666 9171 +3 8423 9171 8918 +3 8424 8779 9990 +3 8424 9990 9629 +3 8425 9630 9991 +3 8425 9991 8780 +3 8426 8734 9004 +3 8426 9004 8712 +3 8427 8713 9005 +3 8427 9005 8735 +3 8428 8885 9567 +3 8428 9567 9058 +3 8429 9059 9568 +3 8429 9568 8886 +3 8430 8795 9103 +3 8430 9103 8728 +3 8431 8729 9104 +3 8431 9104 8796 +3 8432 8911 9052 +3 8432 9052 8592 +3 8433 8593 9053 +3 8433 9053 8912 +3 8434 9233 10653 +3 8434 10653 9750 +3 8435 9751 10654 +3 8435 10654 9234 +3 8436 8538 8970 +3 8436 8970 8865 +3 8437 8866 8971 +3 8437 8971 8539 +3 8438 8728 9097 +3 8438 9097 8799 +3 8439 8799 9098 +3 8439 9098 8729 +3 8440 8602 8767 +3 8440 8767 8608 +3 8441 8609 8768 +3 8441 8768 8603 +3 8442 8925 9550 +3 8442 9550 8945 +3 8443 8946 9551 +3 8443 9551 8926 +3 8444 9010 9093 +3 8444 9093 8555 +3 8445 8556 9094 +3 8445 9094 9011 +3 8446 10029 10765 +3 8446 10765 9115 +3 8447 9116 10766 +3 8447 10766 10030 +3 8448 8450 9119 +3 8448 9119 9152 +3 8448 9152 8509 +3 8449 8510 9153 +3 8449 9120 8451 +3 8449 9153 9120 +3 8450 8624 9290 +3 8450 9290 9119 +3 8451 9120 9291 +3 8451 9291 8625 +3 8452 9241 9486 +3 8452 9486 8651 +3 8453 8652 9487 +3 8453 9487 9242 +3 8454 9480 10155 +3 8454 10155 9072 +3 8455 9073 10156 +3 8455 10156 9481 +3 8456 8691 9288 +3 8456 9288 9045 +3 8457 9046 9289 +3 8457 9289 8692 +3 8458 9434 10064 +3 8458 10064 9433 +3 8459 8949 9213 +3 8459 9213 8761 +3 8460 8762 9214 +3 8460 9214 8950 +3 8461 8642 8757 +3 8461 8757 8598 +3 8462 8599 8758 +3 8462 8758 8643 +3 8463 8493 8689 +3 8463 8685 8488 +3 8463 8689 8685 +3 8464 8489 8686 +3 8464 8686 8690 +3 8464 8690 8494 +3 8465 8644 8797 +3 8465 8797 8630 +3 8466 8631 8798 +3 8466 8798 8645 +3 8467 9649 10097 +3 8467 10097 8899 +3 8468 8900 10098 +3 8468 10098 9650 +3 8469 8497 8753 +3 8469 8745 8480 +3 8469 8753 8745 +3 8470 8481 8746 +3 8470 8746 8754 +3 8470 8754 8498 +3 8471 9012 10047 +3 8471 10047 9465 +3 8472 9466 10048 +3 8472 10048 9013 +3 8473 9871 10395 +3 8473 10395 8941 +3 8474 8942 10396 +3 8474 10396 9872 +3 8475 8822 9680 +3 8475 9680 9274 +3 8476 9275 9681 +3 8476 9681 8823 +3 8477 9690 10470 +3 8477 10470 9691 +3 8478 9891 10995 +3 8478 10995 9447 +3 8479 9448 10996 +3 8479 10996 9892 +3 8480 8745 8787 +3 8480 8787 8542 +3 8481 8543 8788 +3 8481 8788 8746 +3 8482 8987 10077 +3 8482 10077 9573 +3 8483 9574 10078 +3 8483 10078 8988 +3 8484 8887 9284 +3 8484 9284 8879 +3 8485 8880 9285 +3 8485 9285 8888 +3 8486 8566 9016 +3 8486 8939 8604 +3 8486 9016 8939 +3 8487 8605 8940 +3 8487 8940 9017 +3 8487 9017 8567 +3 8488 8685 8802 +3 8488 8802 8602 +3 8489 8603 8803 +3 8489 8803 8686 +3 8490 9996 10711 +3 8490 10711 9162 +3 8491 9163 10712 +3 8491 10712 9997 +3 8492 8517 10220 +3 8492 10219 8516 +3 8492 10220 10219 +3 8493 8598 8781 +3 8493 8781 8689 +3 8494 8690 8782 +3 8494 8782 8599 +3 8495 8712 9083 +3 8495 9083 8851 +3 8496 8852 9084 +3 8496 9084 8713 +3 8497 8608 8818 +3 8497 8818 8753 +3 8498 8754 8819 +3 8498 8819 8609 +3 8499 9068 9508 +3 8499 9508 8925 +3 8500 8926 9509 +3 8500 9509 9069 +3 8501 8630 8843 +3 8501 8720 8502 +3 8501 8843 8720 +3 8502 8720 8844 +3 8502 8844 8631 +3 8503 9062 9243 +3 8503 9243 8675 +3 8504 8676 9244 +3 8504 9244 9063 +3 8505 8816 9807 +3 8505 9807 9475 +3 8506 9476 9808 +3 8506 9808 8817 +3 8507 9187 10731 +3 8507 10731 9985 +3 8508 9986 10732 +3 8508 10732 9188 +3 8509 9152 9235 +3 8509 9235 8628 +3 8510 8629 9236 +3 8510 9236 9153 +3 8511 8889 9477 +3 8511 9477 8890 +3 8512 8849 10539 +3 8512 10539 9913 +3 8513 9914 10540 +3 8513 10540 8850 +3 8514 8714 9260 +3 8514 9260 9060 +3 8515 9061 9261 +3 8515 9261 8715 +3 8516 10219 10269 +3 8516 10269 8632 +3 8517 8633 10270 +3 8517 10270 10220 +3 8518 8905 10533 +3 8518 10533 10119 +3 8519 10120 10534 +3 8519 10534 8906 +3 8520 9463 10033 +3 8520 10033 9047 +3 8521 9047 10034 +3 8521 10034 9464 +3 8522 8724 9641 +3 8522 9641 9388 +3 8523 9389 9642 +3 8523 9642 8725 +3 8524 8877 9368 +3 8524 9368 9022 +3 8525 9023 9369 +3 8525 9369 8878 +3 8526 8943 9134 +3 8526 9134 8734 +3 8527 8735 9135 +3 8527 9135 8944 +3 8528 8808 9449 +3 8528 9449 9144 +3 8529 9145 9450 +3 8529 9450 8809 +3 8530 9853 10446 +3 8530 10446 9038 +3 8531 9039 10447 +3 8531 10447 9854 +3 8532 8777 9138 +3 8532 9138 8867 +3 8533 8868 9139 +3 8533 9139 8778 +3 8534 9813 10289 +3 8534 10289 8966 +3 8535 8967 10290 +3 8535 10290 9814 +3 8536 8945 9519 +3 8536 9519 9113 +3 8537 9114 9520 +3 8537 9520 8946 +3 8538 8655 9099 +3 8538 9099 8970 +3 8539 8971 9100 +3 8539 9100 8656 +3 8540 9172 9496 +3 8540 9496 8834 +3 8541 8835 9497 +3 8541 9497 9173 +3 8542 8787 8883 +3 8542 8883 8644 +3 8543 8645 8884 +3 8543 8884 8788 +3 8544 8579 8840 +3 8544 8839 8578 +3 8544 8840 8839 +3 8545 9392 10597 +3 8545 10597 9654 +3 8546 9655 10598 +3 8546 10598 9393 +3 8547 9698 9887 +3 8547 9887 8919 +3 8548 8920 9888 +3 8548 9888 9699 +3 8549 9656 9881 +3 8549 9881 8775 +3 8550 8776 9882 +3 8550 9882 9657 +3 8551 8783 9488 +3 8551 9488 9237 +3 8552 9238 9489 +3 8552 9489 8784 +3 8553 9262 10422 +3 8553 10422 9645 +3 8554 9646 10423 +3 8554 10423 9263 +3 8555 9093 9221 +3 8555 9221 8693 +3 8556 8694 9222 +3 8556 9222 9094 +3 8557 9861 10233 +3 8557 10233 8853 +3 8558 8854 10234 +3 8558 10234 9862 +3 8559 9257 9658 +3 8559 9658 8909 +3 8560 8910 9659 +3 8560 9659 9258 +3 8561 8879 9558 +3 8561 9558 9174 +3 8562 9175 9559 +3 8562 9559 8880 +3 8563 8888 9372 +3 8563 9372 8887 +3 8564 9706 10229 +3 8564 10229 8814 +3 8565 8815 10230 +3 8565 10230 9707 +3 8566 8671 9136 +3 8566 9136 9016 +3 8567 9017 9137 +3 8567 9137 8672 +3 8568 9245 10011 +3 8568 10011 9268 +3 8569 9269 10012 +3 8569 10012 9246 +3 8570 8985 10412 +3 8570 10412 9966 +3 8571 9967 10413 +3 8571 10413 8986 +3 8572 8933 9962 +3 8572 9962 9603 +3 8573 9604 9963 +3 8573 9963 8934 +3 8574 9079 9402 +3 8574 9402 8903 +3 8575 8904 9403 +3 8575 9403 9080 +3 8576 8957 10376 +3 8576 10376 10697 +3 8576 10697 8859 +3 8577 8860 10698 +3 8577 10377 8958 +3 8577 10698 10377 +3 8578 8839 8897 +3 8578 8897 8642 +3 8579 8643 8898 +3 8579 8898 8840 +3 8580 9268 10023 +3 8580 10023 9251 +3 8581 9252 10024 +3 8581 10024 9269 +3 8582 9306 10181 +3 8582 10181 9373 +3 8583 9374 10182 +3 8583 10182 9307 +3 8584 9364 10189 +3 8584 10189 9318 +3 8585 9319 10190 +3 8585 10190 9365 +3 8586 9006 9358 +3 8586 9358 9024 +3 8587 9025 9359 +3 8587 9359 9007 +3 8588 9599 10058 +3 8588 10058 9054 +3 8589 9055 10059 +3 8589 10059 9600 +3 8590 9008 9909 +3 8590 9909 9484 +3 8591 9485 9910 +3 8591 9910 9009 +3 8592 9052 9249 +3 8592 9249 8795 +3 8593 8796 9250 +3 8593 9250 9053 +3 8594 9362 9839 +3 8594 9839 9044 +3 8595 9044 9840 +3 8595 9840 9363 +3 8596 8726 9091 +3 8596 9091 8981 +3 8597 8982 9092 +3 8597 9092 8727 +3 8598 8757 8929 +3 8598 8929 8781 +3 8599 8782 8930 +3 8599 8930 8758 +3 8600 9318 10203 +3 8600 10203 9306 +3 8601 9307 10204 +3 8601 10204 9319 +3 8602 8802 8975 +3 8602 8975 8767 +3 8603 8768 8976 +3 8603 8976 8803 +3 8604 8939 9089 +3 8604 9089 8777 +3 8605 8778 9090 +3 8605 9090 8940 +3 8606 8955 9760 +3 8606 9760 9398 +3 8607 9399 9761 +3 8607 9761 8956 +3 8608 8767 8983 +3 8608 8983 8818 +3 8609 8819 8984 +3 8609 8984 8768 +3 8610 9710 10127 +3 8610 10127 9028 +3 8611 9029 10128 +3 8611 10128 9711 +3 8612 9611 11033 +3 8612 11033 9926 +3 8613 9927 11034 +3 8613 11034 9612 +3 8614 8881 9974 +3 8614 9974 9350 +3 8615 9351 9975 +3 8615 9975 8882 +3 8616 9780 10709 +3 8616 10709 9455 +3 8617 9456 10710 +3 8617 10710 9781 +3 8618 8891 9821 +3 8618 9821 9542 +3 8619 9543 9822 +3 8619 9822 8892 +3 8620 9251 10069 +3 8620 10069 9366 +3 8621 9367 10070 +3 8621 10070 9252 +3 8622 8871 9410 +3 8622 9410 9164 +3 8623 9165 9411 +3 8623 9411 8872 +3 8624 8741 9548 +3 8624 9548 9290 +3 8625 9291 9549 +3 8625 9549 8742 +3 8626 9418 10088 +3 8626 10088 9245 +3 8627 9246 10089 +3 8627 10089 9419 +3 8628 9235 9441 +3 8628 9441 8812 +3 8629 8813 9442 +3 8629 9442 9236 +3 8630 8797 9032 +3 8630 9032 8843 +3 8631 8844 9033 +3 8631 9033 8798 +3 8632 10269 10444 +3 8632 10444 8810 +3 8633 8811 10445 +3 8633 10445 10270 +3 8634 8915 9178 +3 8634 9178 8935 +3 8635 8936 9179 +3 8635 9179 8916 +3 8636 9443 11223 +3 8636 11223 10325 +3 8637 10326 11224 +3 8637 11224 9444 +3 8638 9034 10448 +3 8638 10448 10013 +3 8639 10014 10449 +3 8639 10449 9035 +3 8640 9435 9723 +3 8640 9723 8804 +3 8641 8805 9724 +3 8641 9724 9436 +3 8642 8897 9000 +3 8642 9000 8757 +3 8643 8758 9001 +3 8643 9001 8898 +3 8644 8883 9040 +3 8644 9040 8797 +3 8645 8798 9041 +3 8645 9041 8884 +3 8646 9375 9819 +3 8646 9819 9050 +3 8647 9051 9820 +3 8647 9820 9376 +3 8648 9329 9796 +3 8648 9796 9328 +3 8649 9601 9950 +3 8649 9950 9020 +3 8650 9021 9951 +3 8650 9951 9602 +3 8651 9486 9768 +3 8651 9768 8968 +3 8652 8969 9769 +3 8652 9769 9487 +3 8653 9546 10452 +3 8653 10452 9571 +3 8654 9572 10453 +3 8654 10453 9547 +3 8655 8867 9282 +3 8655 9282 9099 +3 8656 9100 9283 +3 8656 9283 8868 +3 8657 9534 9922 +3 8657 9922 9056 +3 8658 9057 9923 +3 8658 9923 9535 +3 8659 9058 9811 +3 8659 9811 9423 +3 8660 9424 9812 +3 8660 9812 9059 +3 8661 8749 10113 +3 8661 10083 8662 +3 8661 10113 10083 +3 8662 10083 10114 +3 8662 10114 8750 +3 8663 9571 10456 +3 8663 10456 9554 +3 8664 9555 10457 +3 8664 10457 9572 +3 8665 9170 9499 +3 8665 9499 9006 +3 8666 9007 9500 +3 8666 9500 9171 +3 8667 9298 10941 +3 8667 10941 10285 +3 8668 10286 10942 +3 8668 10942 9299 +3 8669 9150 10105 +3 8669 10105 9643 +3 8670 9644 10106 +3 8670 10106 9151 +3 8671 8851 9292 +3 8671 9292 9136 +3 8672 9137 9293 +3 8672 9293 8852 +3 8673 9597 10355 +3 8673 10355 9364 +3 8674 9365 10356 +3 8674 10356 9598 +3 8675 9243 9505 +3 8675 9505 8949 +3 8676 8950 9506 +3 8676 9506 9244 +3 8677 9296 10009 +3 8677 10009 9360 +3 8678 9361 10010 +3 8678 10010 9297 +3 8679 8964 10462 +3 8679 10179 8998 +3 8679 10462 10179 +3 8680 8999 10180 +3 8680 10180 10463 +3 8680 10463 8965 +3 8681 10275 10615 +3 8681 10615 9042 +3 8682 9043 10616 +3 8682 10616 10276 +3 8683 9352 10017 +3 8683 10017 9304 +3 8684 9305 10018 +3 8684 10018 9353 +3 8685 8689 8996 +3 8685 8996 9074 +3 8685 9074 8802 +3 8686 8803 9075 +3 8686 8997 8690 +3 8686 9075 8997 +3 8687 8806 9255 +3 8687 9253 8709 +3 8687 9255 9253 +3 8688 8710 9254 +3 8688 9254 9256 +3 8688 9256 8807 +3 8689 8781 9036 +3 8689 9036 8996 +3 8690 8997 9037 +3 8690 9037 8782 +3 8691 9022 9615 +3 8691 9615 9288 +3 8692 9289 9616 +3 8692 9616 9023 +3 8693 9221 9439 +3 8693 9439 8917 +3 8694 8918 9440 +3 8694 9440 9222 +3 8695 8962 10221 +3 8695 9960 8921 +3 8695 10221 9960 +3 8696 8922 9961 +3 8696 9961 10222 +3 8696 10222 8963 +3 8697 9394 9758 +3 8697 9758 9068 +3 8698 9069 9759 +3 8698 9759 9395 +3 8699 9125 9382 +3 8699 9382 9010 +3 8700 9011 9383 +3 8700 9383 9126 +3 8701 9304 10037 +3 8701 10037 9296 +3 8702 9297 10038 +3 8702 10038 9305 +3 8703 9631 10265 +3 8703 10265 9320 +3 8704 9321 10266 +3 8704 10266 9632 +3 8705 9217 9717 +3 8705 9717 8861 +3 8706 8862 9718 +3 8706 9718 9218 +3 8707 9085 10387 +3 8707 10387 9660 +3 8708 9661 10388 +3 8708 10388 9086 +3 8709 9253 9314 +3 8709 9314 8789 +3 8710 8790 9315 +3 8710 9315 9254 +3 8711 8916 9259 +3 8711 9259 8915 +3 8712 9004 9348 +3 8712 9348 9083 +3 8713 9084 9349 +3 8713 9349 9005 +3 8714 9024 9587 +3 8714 9587 9260 +3 8715 9261 9588 +3 8715 9588 9025 +3 8716 9373 10426 +3 8716 10426 9676 +3 8717 9677 10427 +3 8717 10427 9374 +3 8718 9790 10255 +3 8718 10255 9158 +3 8719 9159 10256 +3 8719 10256 9791 +3 8720 8843 9078 +3 8720 9078 8844 +3 8721 9095 10287 +3 8721 10287 9877 +3 8722 9878 10288 +3 8722 10288 9096 +3 8723 8763 9932 +3 8723 9932 9933 +3 8723 9933 8764 +3 8724 9026 9895 +3 8724 9895 9641 +3 8725 9642 9896 +3 8725 9896 9027 +3 8726 8935 9264 +3 8726 9264 9091 +3 8727 9092 9265 +3 8727 9265 8936 +3 8728 9103 9461 +3 8728 9461 9097 +3 8729 9098 9462 +3 8729 9462 9104 +3 8730 9554 10529 +3 8730 10529 9721 +3 8731 9722 10530 +3 8731 10530 9555 +3 8732 9140 11109 +3 8732 11109 10619 +3 8733 10620 11110 +3 8733 11110 9141 +3 8734 9134 9354 +3 8734 9354 9004 +3 8735 9005 9355 +3 8735 9355 9135 +3 8736 8800 9668 +3 8736 9651 8737 +3 8736 9668 9651 +3 8737 9651 9669 +3 8737 9669 8801 +3 8738 8774 9783 +3 8738 9782 8773 +3 8738 9783 9782 +3 8739 10193 11251 +3 8739 11251 9725 +3 8740 9726 11252 +3 8740 11252 10194 +3 8741 8947 9715 +3 8741 9715 9548 +3 8742 9549 9716 +3 8742 9716 8948 +3 8743 9328 10129 +3 8743 10129 9526 +3 8744 9527 10130 +3 8744 10130 9329 +3 8745 8753 9070 +3 8745 9070 9111 +3 8745 9111 8787 +3 8746 8788 9112 +3 8746 9071 8754 +3 8746 9112 9071 +3 8747 9831 11115 +3 8747 11115 9934 +3 8748 9935 11116 +3 8748 11116 9832 +3 8749 8873 10259 +3 8749 10259 10113 +3 8750 10114 10260 +3 8750 10260 8874 +3 8751 9776 10576 +3 8751 10576 9546 +3 8752 9547 10577 +3 8752 10577 9777 +3 8753 8818 9132 +3 8753 9132 9070 +3 8754 9071 9133 +3 8754 9133 8819 +3 8755 9897 11086 +3 8755 11086 9831 +3 8756 9832 11087 +3 8756 11087 9898 +3 8757 9000 9127 +3 8757 9127 8929 +3 8758 8930 9128 +3 8758 9128 9001 +3 8759 9713 11417 +3 8759 11417 10365 +3 8760 10366 11418 +3 8760 11418 9714 +3 8761 9213 9621 +3 8761 9621 9125 +3 8762 9126 9622 +3 8762 9622 9214 +3 8763 8836 9998 +3 8763 9998 9932 +3 8764 9933 9999 +3 8764 9999 8837 +3 8765 8869 9635 +3 8765 9635 9196 +3 8766 9197 9636 +3 8766 9636 8870 +3 8767 8975 9168 +3 8767 9168 8983 +3 8768 8984 9169 +3 8768 9169 8976 +3 8769 9674 10321 +3 8769 10321 9362 +3 8770 9363 10322 +3 8770 10322 9675 +3 8771 9915 10802 +3 8771 10802 9219 +3 8772 9220 10803 +3 8772 10803 9916 +3 8773 9782 9827 +3 8773 9827 8830 +3 8774 8831 9828 +3 8774 9828 9783 +3 8775 9881 10217 +3 8775 10217 9064 +3 8776 9065 10218 +3 8776 10218 9882 +3 8777 9089 9451 +3 8777 9451 9138 +3 8778 9139 9452 +3 8778 9452 9090 +3 8779 9654 10921 +3 8779 10921 9990 +3 8780 9991 10922 +3 8780 10922 9655 +3 8781 8929 9146 +3 8781 9146 9036 +3 8782 9037 9147 +3 8782 9147 8930 +3 8783 9113 9778 +3 8783 9778 9488 +3 8784 9489 9779 +3 8784 9779 9114 +3 8785 9560 10054 +3 8785 10054 9286 +3 8786 9287 10055 +3 8786 10055 9561 +3 8787 9111 9185 +3 8787 9185 8883 +3 8788 8884 9186 +3 8788 9186 9112 +3 8789 9314 9437 +3 8789 9437 8943 +3 8790 8944 9438 +3 8790 9438 9315 +3 8791 10541 11152 +3 8791 11152 9334 +3 8792 9335 11153 +3 8792 11153 10542 +3 8793 8826 9425 +3 8793 9425 9427 +3 8793 9427 8824 +3 8794 8825 9428 +3 8794 9426 8827 +3 8794 9428 9426 +3 8795 9249 9556 +3 8795 9556 9103 +3 8796 9104 9557 +3 8796 9557 9250 +3 8797 9040 9225 +3 8797 9225 9032 +3 8798 9033 9226 +3 8798 9226 9041 +3 8799 9097 9562 +3 8799 9562 9098 +3 8800 8901 9742 +3 8800 9742 9668 +3 8801 9669 9743 +3 8801 9743 8902 +3 8802 9074 9207 +3 8802 9207 8975 +3 8803 8976 9208 +3 8803 9208 9075 +3 8804 9723 9946 +3 8804 9946 9048 +3 8805 9049 9947 +3 8805 9947 9724 +3 8806 8981 9404 +3 8806 9404 9255 +3 8807 9256 9405 +3 8807 9405 8982 +3 8808 9164 9803 +3 8808 9803 9449 +3 8809 9450 9804 +3 8809 9804 9165 +3 8810 10444 11111 +3 8810 11111 9386 +3 8811 9387 11112 +3 8811 11112 10445 +3 8812 9441 9692 +3 8812 9692 9079 +3 8813 9080 9693 +3 8813 9693 9442 +3 8814 10229 10519 +3 8814 10519 9160 +3 8815 9161 10520 +3 8815 10520 10230 +3 8816 9205 10241 +3 8816 10241 9807 +3 8817 9808 10242 +3 8817 10242 9206 +3 8818 8983 9227 +3 8818 9227 9132 +3 8819 9133 9228 +3 8819 9228 8984 +3 8820 9467 10735 +3 8820 10735 10081 +3 8821 10082 10736 +3 8821 10736 9470 +3 8822 9087 9948 +3 8822 9948 9680 +3 8823 9681 9949 +3 8823 9949 9088 +3 8824 9427 9623 +3 8824 9623 8911 +3 8825 8912 9624 +3 8825 9624 9428 +3 8826 8923 9494 +3 8826 9494 9425 +3 8827 9426 9495 +3 8827 9495 8924 +3 8828 10553 11142 +3 8828 11142 9332 +3 8829 9333 11143 +3 8829 11143 10554 +3 8830 9827 9956 +3 8830 9956 8973 +3 8831 8974 9957 +3 8831 9957 9828 +3 8832 9350 10273 +3 8832 10273 9719 +3 8833 9720 10274 +3 8833 10274 9351 +3 8834 9496 9869 +3 8834 9869 9217 +3 8835 9218 9870 +3 8835 9870 9497 +3 8836 9002 10139 +3 8836 10139 9998 +3 8837 9999 10140 +3 8837 10140 9003 +3 8838 8865 9400 +3 8838 9400 9401 +3 8838 9401 8866 +3 8839 8840 9189 +3 8839 9189 9203 +3 8839 9203 8897 +3 8840 8898 9204 +3 8840 9204 9189 +3 8841 10135 11429 +3 8841 11429 10159 +3 8842 10160 11430 +3 8842 11430 10136 +3 8843 9032 9211 +3 8843 9211 9078 +3 8844 9078 9212 +3 8844 9212 9033 +3 8845 9433 10543 +3 8845 10543 9992 +3 8846 9993 10544 +3 8846 10544 9434 +3 8847 10021 10685 +3 8847 10685 9507 +3 8848 9507 10686 +3 8848 10686 10022 +3 8849 9300 11055 +3 8849 11055 10539 +3 8850 10540 11056 +3 8850 11056 9301 +3 8851 9083 9532 +3 8851 9532 9292 +3 8852 9293 9533 +3 8852 9533 9084 +3 8853 10233 10574 +3 8853 10574 9223 +3 8854 9224 10575 +3 8854 10575 10234 +3 8855 9514 11301 +3 8855 11301 10663 +3 8856 10664 11302 +3 8856 11302 9515 +3 8857 9579 11459 +3 8857 11459 10671 +3 8858 10672 11460 +3 8858 11460 9580 +3 8859 10697 11113 +3 8859 11113 9198 +3 8860 9199 11114 +3 8860 11114 10698 +3 8861 9717 9952 +3 8861 9952 9109 +3 8862 9110 9953 +3 8862 9953 9718 +3 8863 10101 11229 +3 8863 11229 9897 +3 8864 9898 11230 +3 8864 11230 10102 +3 8865 8970 9478 +3 8865 9478 9400 +3 8866 9401 9479 +3 8866 9479 8971 +3 8867 9138 9585 +3 8867 9585 9282 +3 8868 9283 9586 +3 8868 9586 9139 +3 8869 9045 9762 +3 8869 9762 9635 +3 8870 9636 9763 +3 8870 9763 9046 +3 8871 9196 9748 +3 8871 9748 9410 +3 8872 9411 9749 +3 8872 9749 9197 +3 8873 9081 10434 +3 8873 10434 10259 +3 8874 10260 10435 +3 8874 10435 9082 +3 8875 9492 10919 +3 8875 10919 10309 +3 8876 10310 10920 +3 8876 10920 9493 +3 8877 9308 9815 +3 8877 9815 9368 +3 8878 9369 9816 +3 8878 9816 9309 +3 8879 9284 9958 +3 8879 9958 9558 +3 8880 9559 9959 +3 8880 9959 9285 +3 8881 9231 10343 +3 8881 10343 9974 +3 8882 9975 10344 +3 8882 10344 9232 +3 8883 9185 9322 +3 8883 9322 9040 +3 8884 9041 9323 +3 8884 9323 9186 +3 8885 9123 10049 +3 8885 10049 9567 +3 8886 9568 10050 +3 8886 10050 9124 +3 8887 9372 9788 +3 8887 9788 9284 +3 8888 9285 9789 +3 8888 9789 9372 +3 8889 9591 10151 +3 8889 10151 9477 +3 8890 9477 10152 +3 8890 10152 9592 +3 8891 9121 10176 +3 8891 10176 9821 +3 8892 9822 10177 +3 8892 10177 9122 +3 8893 10397 11039 +3 8893 11039 9480 +3 8894 9481 11040 +3 8894 11040 10398 +3 8895 10225 10783 +3 8895 10783 9408 +3 8896 9409 10784 +3 8896 10784 10226 +3 8897 9203 9278 +3 8897 9278 9000 +3 8898 9001 9279 +3 8898 9279 9204 +3 8899 10097 10646 +3 8899 10646 9445 +3 8900 9446 10647 +3 8900 10647 10098 +3 8901 9144 9849 +3 8901 9849 9742 +3 8902 9743 9850 +3 8902 9850 9145 +3 8903 9402 9823 +3 8903 9823 9308 +3 8904 9309 9824 +3 8904 9824 9403 +3 8905 9336 11061 +3 8905 11061 10533 +3 8906 10534 11062 +3 8906 11062 9337 +3 8907 9934 11303 +3 8907 11303 10237 +3 8908 10238 11304 +3 8908 11304 9935 +3 8909 9658 9903 +3 8909 9903 9172 +3 8910 9173 9904 +3 8910 9904 9659 +3 8911 9623 9738 +3 8911 9738 9052 +3 8912 9053 9739 +3 8912 9739 9624 +3 8913 10291 11613 +3 8913 11613 10135 +3 8914 10136 11614 +3 8914 11614 10292 +3 8915 9259 9544 +3 8915 9544 9178 +3 8916 9179 9545 +3 8916 9545 9259 +3 8917 9439 9708 +3 8917 9708 9170 +3 8918 9171 9709 +3 8918 9709 9440 +3 8919 9887 10163 +3 8919 10163 9176 +3 8920 9177 10164 +3 8920 10164 9888 +3 8921 9960 10251 +3 8921 10251 9192 +3 8922 9193 10252 +3 8922 10252 9961 +3 8923 9060 9637 +3 8923 9637 9494 +3 8924 9495 9638 +3 8924 9638 9061 +3 8925 9508 10117 +3 8925 10117 9550 +3 8926 9551 10118 +3 8926 10118 9509 +3 8927 9613 11403 +3 8927 11403 10617 +3 8928 10618 11404 +3 8928 11404 9614 +3 8929 9127 9312 +3 8929 9312 9146 +3 8930 9147 9313 +3 8930 9313 9128 +3 8931 9841 10999 +3 8931 10999 10015 +3 8932 10016 11000 +3 8932 11000 9842 +3 8933 9721 10773 +3 8933 10773 9962 +3 8934 9963 10774 +3 8934 10774 9722 +3 8935 9178 9536 +3 8935 9536 9264 +3 8936 9265 9537 +3 8936 9537 9179 +3 8937 9983 10973 +3 8937 10973 9847 +3 8938 9848 10974 +3 8938 10974 9984 +3 8939 9016 9552 +3 8939 9468 9089 +3 8939 9552 9468 +3 8940 9090 9469 +3 8940 9469 9553 +3 8940 9553 9017 +3 8941 10395 10997 +3 8941 10997 9517 +3 8942 9518 10998 +3 8942 10998 10396 +3 8943 9437 9619 +3 8943 9619 9134 +3 8944 9135 9620 +3 8944 9620 9438 +3 8945 9550 10141 +3 8945 10141 9519 +3 8946 9520 10142 +3 8946 10142 9551 +3 8947 9174 9954 +3 8947 9954 9715 +3 8948 9716 9955 +3 8948 9955 9175 +3 8949 9505 9799 +3 8949 9799 9213 +3 8950 9214 9800 +3 8950 9800 9506 +3 8951 9847 10889 +3 8951 10889 9841 +3 8952 9842 10890 +3 8952 10890 9848 +3 8953 9645 11266 +3 8953 11266 10501 +3 8954 10502 11267 +3 8954 11267 9646 +3 8955 9360 10169 +3 8955 10169 9760 +3 8956 9761 10170 +3 8956 10170 9361 +3 8957 9926 11457 +3 8957 11457 10376 +3 8958 10377 11458 +3 8958 11458 9927 +3 8959 10159 11679 +3 8959 11679 10378 +3 8960 10379 11682 +3 8960 11682 10160 +3 8961 8990 9737 +3 8961 9736 8989 +3 8961 9737 9736 +3 8962 9183 10479 +3 8962 10479 10221 +3 8963 10222 10480 +3 8963 10480 9184 +3 8964 9247 10777 +3 8964 10777 10462 +3 8965 10463 10778 +3 8965 10778 9248 +3 8966 10289 11177 +3 8966 11177 9780 +3 8967 9781 11178 +3 8967 11178 10290 +3 8968 9768 10137 +3 8968 10137 9352 +3 8969 9353 10138 +3 8969 10138 9769 +3 8970 9099 9607 +3 8970 9607 9478 +3 8971 9479 9608 +3 8971 9608 9100 +3 8972 10198 10952 +3 8972 10952 10197 +3 8973 9956 10093 +3 8973 10093 9257 +3 8974 9258 10094 +3 8974 10094 9957 +3 8975 9207 9412 +3 8975 9412 9168 +3 8976 9169 9413 +3 8976 9413 9208 +3 8977 9030 10215 +3 8977 10178 8978 +3 8977 10215 10178 +3 8978 10178 10216 +3 8978 10216 9031 +3 8979 10060 10549 +3 8979 10549 9463 +3 8980 9464 10550 +3 8980 10550 10061 +3 8981 9091 9538 +3 8981 9538 9404 +3 8982 9405 9539 +3 8982 9539 9092 +3 8983 9168 9416 +3 8983 9416 9227 +3 8984 9228 9417 +3 8984 9417 9169 +3 8985 9465 10905 +3 8985 10905 10412 +3 8986 10413 10906 +3 8986 10906 9466 +3 8987 9643 10677 +3 8987 10677 10077 +3 8988 10078 10680 +3 8988 10680 9644 +3 8989 9736 9797 +3 8989 9797 9062 +3 8990 9063 9798 +3 8990 9798 9737 +3 8991 9682 11221 +3 8991 11221 10473 +3 8992 10474 11222 +3 8992 11222 9683 +3 8993 9014 10669 +3 8993 10669 10670 +3 8993 10670 9015 +3 8994 10454 11213 +3 8994 11213 9690 +3 8995 9691 11214 +3 8995 11214 10455 +3 8996 9036 9310 +3 8996 9310 9406 +3 8996 9406 9074 +3 8997 9075 9407 +3 8997 9311 9037 +3 8997 9407 9311 +3 8998 10179 10513 +3 8998 10513 9342 +3 8999 9343 10514 +3 8999 10514 10180 +3 9000 9278 9384 +3 9000 9384 9127 +3 9001 9128 9385 +3 9001 9385 9279 +3 9002 9190 10333 +3 9002 10333 10139 +3 9003 10140 10334 +3 9003 10334 9191 +3 9004 9354 9694 +3 9004 9694 9348 +3 9005 9349 9695 +3 9005 9695 9355 +3 9006 9499 9863 +3 9006 9863 9358 +3 9007 9359 9864 +3 9007 9864 9500 +3 9008 9526 10418 +3 9008 10418 9909 +3 9009 9910 10419 +3 9009 10419 9527 +3 9010 9382 9752 +3 9010 9752 9093 +3 9011 9094 9753 +3 9011 9753 9383 +3 9012 9660 10691 +3 9012 10691 10047 +3 9013 10048 10692 +3 9013 10692 9661 +3 9014 9142 10713 +3 9014 10713 10669 +3 9015 10670 10714 +3 9015 10714 9143 +3 9016 9136 9662 +3 9016 9662 9552 +3 9017 9553 9663 +3 9017 9663 9137 +3 9018 9076 9920 +3 9018 9920 10095 +3 9018 10095 9181 +3 9019 9182 10096 +3 9019 9921 9077 +3 9019 10096 9921 +3 9020 9950 10359 +3 9020 10359 9418 +3 9021 9419 10360 +3 9021 10360 9951 +3 9022 9368 9970 +3 9022 9970 9615 +3 9023 9616 9971 +3 9023 9971 9369 +3 9024 9358 9885 +3 9024 9885 9587 +3 9025 9588 9886 +3 9025 9886 9359 +3 9026 9366 10279 +3 9026 10279 9895 +3 9027 9896 10280 +3 9027 10280 9367 +3 9028 10127 10909 +3 9028 10909 9776 +3 9029 9777 10910 +3 9029 10910 10128 +3 9030 9130 10305 +3 9030 10305 10215 +3 9031 10216 10306 +3 9031 10306 9131 +3 9032 9225 9414 +3 9032 9414 9211 +3 9033 9212 9415 +3 9033 9415 9226 +3 9034 9501 10903 +3 9034 10903 10448 +3 9035 10449 10904 +3 9035 10904 9502 +3 9036 9146 9390 +3 9036 9390 9310 +3 9037 9311 9391 +3 9037 9391 9147 +3 9038 10446 11096 +3 9038 11096 9377 +3 9039 9378 11097 +3 9039 11097 10447 +3 9040 9322 9521 +3 9040 9521 9225 +3 9041 9226 9522 +3 9041 9522 9323 +3 9042 10615 11090 +3 9042 11090 9453 +3 9043 9454 11091 +3 9043 11091 10616 +3 9044 9839 10399 +3 9044 10399 9840 +3 9045 9288 10003 +3 9045 10003 9762 +3 9046 9763 10004 +3 9046 10004 9289 +3 9047 10033 10639 +3 9047 10639 10034 +3 9048 9946 10311 +3 9048 10311 9375 +3 9049 9376 10312 +3 9049 10312 9947 +3 9050 9819 10329 +3 9050 10329 9591 +3 9051 9592 10330 +3 9051 10330 9820 +3 9052 9738 9924 +3 9052 9924 9249 +3 9053 9250 9925 +3 9053 9925 9739 +3 9054 10058 10605 +3 9054 10605 9631 +3 9055 9632 10606 +3 9055 10606 10059 +3 9056 9922 10404 +3 9056 10404 9560 +3 9057 9561 10405 +3 9057 10405 9923 +3 9058 9567 10303 +3 9058 10303 9811 +3 9059 9812 10304 +3 9059 10304 9568 +3 9060 9260 9805 +3 9060 9805 9637 +3 9061 9638 9806 +3 9061 9806 9261 +3 9062 9797 9875 +3 9062 9875 9243 +3 9063 9244 9876 +3 9063 9876 9798 +3 9064 10217 10531 +3 9064 10531 9420 +3 9065 9421 10532 +3 9065 10532 10218 +3 9066 9356 11195 +3 9066 10846 9457 +3 9066 11195 10846 +3 9067 9458 10847 +3 9067 10847 11196 +3 9067 11196 9357 +3 9068 9758 10201 +3 9068 10201 9508 +3 9069 9509 10202 +3 9069 10202 9759 +3 9070 9132 9530 +3 9070 9482 9111 +3 9070 9530 9482 +3 9071 9112 9483 +3 9071 9483 9531 +3 9071 9531 9133 +3 9072 10155 10907 +3 9072 10907 9813 +3 9073 9814 10908 +3 9073 10908 10156 +3 9074 9406 9583 +3 9074 9583 9207 +3 9075 9208 9584 +3 9075 9584 9407 +3 9076 9237 10067 +3 9076 10067 9920 +3 9077 9921 10068 +3 9077 10068 9238 +3 9078 9211 9498 +3 9078 9498 9212 +3 9079 9692 10005 +3 9079 10005 9402 +3 9080 9403 10006 +3 9080 10006 9693 +3 9081 9617 10979 +3 9081 10979 10434 +3 9082 10435 10980 +3 9082 10980 9618 +3 9083 9348 9786 +3 9083 9786 9532 +3 9084 9533 9787 +3 9084 9787 9349 +3 9085 9540 10808 +3 9085 10808 10387 +3 9086 10388 10809 +3 9086 10809 9541 +3 9087 9423 10281 +3 9087 10281 9948 +3 9088 9949 10282 +3 9088 10282 9424 +3 9089 9468 9817 +3 9089 9817 9451 +3 9090 9452 9818 +3 9090 9818 9469 +3 9091 9264 9702 +3 9091 9702 9538 +3 9092 9539 9703 +3 9092 9703 9265 +3 9093 9752 9855 +3 9093 9855 9221 +3 9094 9222 9856 +3 9094 9856 9753 +3 9095 9573 10705 +3 9095 10705 10287 +3 9096 10288 10706 +3 9096 10706 9574 +3 9097 9461 9867 +3 9097 9867 9562 +3 9098 9562 9868 +3 9098 9868 9462 +3 9099 9282 9792 +3 9099 9792 9607 +3 9100 9608 9793 +3 9100 9793 9283 +3 9101 9276 10400 +3 9101 10153 9241 +3 9101 10400 10153 +3 9102 9242 10154 +3 9102 10154 10401 +3 9102 10401 9277 +3 9103 9556 9865 +3 9103 9865 9461 +3 9104 9462 9866 +3 9104 9866 9557 +3 9105 10231 11160 +3 9105 11160 9983 +3 9106 9984 11161 +3 9106 11161 10232 +3 9107 10430 11495 +3 9107 11495 10101 +3 9108 10102 11496 +3 9108 11496 10431 +3 9109 9952 10245 +3 9109 10245 9394 +3 9110 9395 10246 +3 9110 10246 9953 +3 9111 9482 9577 +3 9111 9577 9185 +3 9112 9186 9578 +3 9112 9578 9483 +3 9113 9519 10187 +3 9113 10187 9778 +3 9114 9779 10188 +3 9114 10188 9520 +3 9115 10765 11673 +3 9115 11673 9915 +3 9116 9916 11674 +3 9116 11674 10766 +3 9117 10535 11843 +3 9117 11843 10291 +3 9118 10292 11844 +3 9118 11844 10536 +3 9119 9290 10090 +3 9119 9899 9152 +3 9119 10090 9899 +3 9120 9153 9900 +3 9120 9900 10091 +3 9120 10091 9291 +3 9121 9484 10507 +3 9121 10507 10176 +3 9122 10177 10508 +3 9122 10508 9485 +3 9123 9398 10327 +3 9123 10327 10049 +3 9124 10050 10328 +3 9124 10328 9399 +3 9125 9621 9857 +3 9125 9857 9382 +3 9126 9383 9858 +3 9126 9858 9622 +3 9127 9384 9595 +3 9127 9595 9312 +3 9128 9313 9596 +3 9128 9596 9385 +3 9129 9148 9154 +3 9129 9149 9148 +3 9129 9154 9156 +3 9129 9155 9149 +3 9129 9156 9157 +3 9129 9157 9155 +3 9130 9274 10438 +3 9130 10438 10305 +3 9131 10306 10439 +3 9131 10439 9275 +3 9132 9227 9625 +3 9132 9625 9530 +3 9133 9531 9626 +3 9133 9626 9228 +3 9134 9619 9825 +3 9134 9825 9354 +3 9135 9355 9826 +3 9135 9826 9620 +3 9136 9292 9809 +3 9136 9809 9662 +3 9137 9663 9810 +3 9137 9810 9293 +3 9138 9451 9851 +3 9138 9851 9585 +3 9139 9586 9852 +3 9139 9852 9452 +3 9140 9605 11634 +3 9140 11634 11109 +3 9141 11110 11635 +3 9141 11635 9606 +3 9142 9316 10899 +3 9142 10899 10713 +3 9143 10714 10900 +3 9143 10900 9317 +3 9144 9449 10165 +3 9144 10165 9849 +3 9145 9850 10166 +3 9145 10166 9450 +3 9146 9312 9589 +3 9146 9589 9390 +3 9147 9391 9590 +3 9147 9590 9313 +3 9148 9149 9180 +3 9148 9180 9209 +3 9148 9194 9154 +3 9148 9209 9194 +3 9149 9155 9195 +3 9149 9195 9210 +3 9149 9210 9180 +3 9150 9712 10642 +3 9150 10642 10105 +3 9151 10106 10643 +3 9151 10643 9712 +3 9152 9899 9978 +3 9152 9978 9235 +3 9153 9236 9979 +3 9153 9979 9900 +3 9154 9194 9229 +3 9154 9200 9156 +3 9154 9229 9200 +3 9155 9157 9201 +3 9155 9201 9230 +3 9155 9230 9195 +3 9156 9200 9239 +3 9156 9202 9157 +3 9156 9239 9202 +3 9157 9202 9240 +3 9157 9240 9201 +3 9158 10255 10733 +3 9158 10733 9674 +3 9159 9675 10734 +3 9159 10734 10256 +3 9160 10519 10983 +3 9160 10983 9599 +3 9161 9600 10984 +3 9161 10984 10520 +3 9162 10711 11415 +3 9162 11415 9784 +3 9163 9785 11416 +3 9163 11416 10712 +3 9164 9410 10071 +3 9164 10071 9803 +3 9165 9804 10072 +3 9165 10072 9411 +3 9166 10015 11271 +3 9166 11271 10353 +3 9167 10354 11272 +3 9167 11272 10016 +3 9168 9412 9678 +3 9168 9678 9416 +3 9169 9417 9679 +3 9169 9679 9413 +3 9170 9708 10000 +3 9170 10000 9499 +3 9171 9500 10001 +3 9171 10001 9709 +3 9172 9903 10257 +3 9172 10257 9496 +3 9173 9497 10258 +3 9173 10258 9904 +3 9174 9558 10301 +3 9174 10301 9954 +3 9175 9955 10302 +3 9175 10302 9559 +3 9176 10163 10477 +3 9176 10477 9534 +3 9177 9535 10478 +3 9177 10478 10164 +3 9178 9544 9829 +3 9178 9829 9536 +3 9179 9537 9830 +3 9179 9830 9545 +3 9180 9210 9273 +3 9180 9272 9209 +3 9180 9273 9272 +3 9181 10095 10341 +3 9181 10341 9435 +3 9182 9436 10342 +3 9182 10342 10096 +3 9183 9510 10824 +3 9183 10824 10479 +3 9184 10480 10825 +3 9184 10825 9511 +3 9185 9577 9670 +3 9185 9670 9322 +3 9186 9323 9671 +3 9186 9671 9578 +3 9187 10002 11642 +3 9187 11642 10731 +3 9188 10732 11643 +3 9188 11643 10002 +3 9189 9204 9648 +3 9189 9647 9203 +3 9189 9648 9647 +3 9190 9475 10818 +3 9190 10818 10333 +3 9191 10334 10819 +3 9191 10819 9476 +3 9192 10251 10559 +3 9192 10559 9597 +3 9193 9598 10560 +3 9193 10560 10252 +3 9194 9209 9302 +3 9194 9302 9324 +3 9194 9324 9229 +3 9195 9230 9325 +3 9195 9303 9210 +3 9195 9325 9303 +3 9196 9635 10125 +3 9196 10125 9748 +3 9197 9749 10126 +3 9197 10126 9636 +3 9198 11113 11555 +3 9198 11555 9639 +3 9199 9640 11556 +3 9199 11556 11114 +3 9200 9229 9330 +3 9200 9330 9340 +3 9200 9340 9239 +3 9201 9240 9341 +3 9201 9331 9230 +3 9201 9341 9331 +3 9202 9239 9344 +3 9202 9344 9345 +3 9202 9345 9240 +3 9203 9647 9688 +3 9203 9688 9278 +3 9204 9279 9689 +3 9204 9689 9648 +3 9205 9719 10675 +3 9205 10675 10241 +3 9206 10242 10676 +3 9206 10676 9720 +3 9207 9583 9746 +3 9207 9746 9412 +3 9208 9413 9747 +3 9208 9747 9584 +3 9209 9272 9338 +3 9209 9338 9302 +3 9210 9303 9339 +3 9210 9339 9273 +3 9211 9414 9666 +3 9211 9666 9498 +3 9212 9498 9667 +3 9212 9667 9415 +3 9213 9799 10157 +3 9213 10157 9621 +3 9214 9622 10158 +3 9214 10158 9800 +3 9215 10378 12008 +3 9215 12008 10771 +3 9216 10772 12009 +3 9216 12009 10379 +3 9217 9869 10357 +3 9217 10357 9717 +3 9218 9718 10358 +3 9218 10358 9870 +3 9219 10802 11859 +3 9219 11859 10193 +3 9220 10194 11860 +3 9220 11860 10803 +3 9221 9855 10041 +3 9221 10041 9439 +3 9222 9440 10042 +3 9222 10042 9856 +3 9223 10574 11019 +3 9223 11019 9649 +3 9224 9650 11020 +3 9224 11020 10575 +3 9225 9521 9672 +3 9225 9672 9414 +3 9226 9415 9673 +3 9226 9673 9522 +3 9227 9416 9764 +3 9227 9764 9625 +3 9228 9626 9765 +3 9228 9765 9417 +3 9229 9324 9370 +3 9229 9370 9330 +3 9230 9331 9371 +3 9230 9371 9325 +3 9231 9676 10743 +3 9231 10743 10343 +3 9232 10344 10744 +3 9232 10744 9677 +3 9233 10237 11733 +3 9233 11733 10653 +3 9234 10654 11734 +3 9234 11734 10238 +3 9235 9978 10147 +3 9235 10147 9441 +3 9236 9442 10148 +3 9236 10148 9979 +3 9237 9488 10313 +3 9237 10313 10067 +3 9238 10068 10314 +3 9238 10314 9489 +3 9239 9340 9396 +3 9239 9396 9344 +3 9240 9345 9397 +3 9240 9397 9341 +3 9241 10153 10363 +3 9241 10363 9486 +3 9242 9487 10364 +3 9242 10364 10154 +3 9243 9875 10123 +3 9243 10123 9505 +3 9244 9506 10124 +3 9244 10124 9876 +3 9245 10088 10842 +3 9245 10842 10011 +3 9246 10012 10843 +3 9246 10843 10089 +3 9247 9627 11179 +3 9247 11179 10777 +3 9248 10778 11180 +3 9248 11180 9628 +3 9249 9924 10183 +3 9249 10183 9556 +3 9250 9557 10184 +3 9250 10184 9925 +3 9251 10023 10844 +3 9251 10844 10069 +3 9252 10070 10845 +3 9252 10845 10024 +3 9253 9255 9901 +3 9253 9901 9944 +3 9253 9944 9314 +3 9254 9315 9945 +3 9254 9902 9256 +3 9254 9945 9902 +3 9255 9404 9938 +3 9255 9938 9901 +3 9256 9902 9939 +3 9256 9939 9405 +3 9257 10093 10471 +3 9257 10471 9658 +3 9258 9659 10472 +3 9258 10472 10094 +3 9259 9545 9917 +3 9259 9917 9544 +3 9260 9587 10062 +3 9260 10062 9805 +3 9261 9806 10063 +3 9261 10063 9588 +3 9262 9750 11288 +3 9262 11288 10422 +3 9263 10423 11289 +3 9263 11289 9751 +3 9264 9536 9911 +3 9264 9911 9702 +3 9265 9703 9912 +3 9265 9912 9537 +3 9266 10458 11621 +3 9266 11621 10374 +3 9267 10375 11622 +3 9267 11622 10459 +3 9268 10011 10848 +3 9268 10848 10023 +3 9269 10024 10849 +3 9269 10849 10012 +3 9270 9271 10648 +3 9270 10648 10683 +3 9270 10683 9346 +3 9271 9347 10684 +3 9271 10684 10648 +3 9272 9273 9379 +3 9272 9379 9431 +3 9272 9431 9338 +3 9273 9339 9432 +3 9273 9432 9379 +3 9274 9680 10603 +3 9274 10603 10438 +3 9275 10439 10604 +3 9275 10604 9681 +3 9276 9542 10589 +3 9276 10589 10400 +3 9277 10401 10590 +3 9277 10590 9543 +3 9278 9688 9774 +3 9278 9774 9384 +3 9279 9385 9775 +3 9279 9775 9689 +3 9280 10374 11599 +3 9280 11599 10440 +3 9281 10441 11600 +3 9281 11600 10375 +3 9282 9585 10045 +3 9282 10045 9792 +3 9283 9793 10046 +3 9283 10046 9586 +3 9284 9788 10450 +3 9284 10450 9958 +3 9285 9959 10451 +3 9285 10451 9789 +3 9286 10054 10633 +3 9286 10633 9601 +3 9287 9602 10634 +3 9287 10634 10055 +3 9288 9615 10317 +3 9288 10317 10003 +3 9289 10004 10318 +3 9289 10318 9616 +3 9290 9548 10323 +3 9290 10323 10090 +3 9291 10091 10324 +3 9291 10324 9549 +3 9292 9532 10025 +3 9292 10025 9809 +3 9293 9810 10026 +3 9293 10026 9533 +3 9294 9603 10747 +3 9294 10747 11045 +3 9294 11045 9593 +3 9295 9594 11046 +3 9295 10748 9604 +3 9295 11046 10748 +3 9296 10037 10715 +3 9296 10715 10009 +3 9297 10010 10716 +3 9297 10716 10038 +3 9298 9985 11741 +3 9298 11741 10941 +3 9299 10942 11742 +3 9299 11742 9986 +3 9300 9845 11636 +3 9300 11636 11055 +3 9301 11056 11637 +3 9301 11637 9846 +3 9302 9338 9473 +3 9302 9471 9324 +3 9302 9473 9471 +3 9303 9325 9472 +3 9303 9472 9474 +3 9303 9474 9339 +3 9304 10017 10723 +3 9304 10723 10037 +3 9305 10038 10724 +3 9305 10724 10018 +3 9306 10203 11059 +3 9306 11059 10181 +3 9307 10182 11060 +3 9307 11060 10204 +3 9308 9823 10424 +3 9308 10424 9815 +3 9309 9816 10425 +3 9309 10425 9824 +3 9310 9390 9728 +3 9310 9728 9801 +3 9310 9801 9406 +3 9311 9407 9802 +3 9311 9729 9391 +3 9311 9802 9729 +3 9312 9595 9770 +3 9312 9770 9589 +3 9313 9590 9771 +3 9313 9771 9596 +3 9314 9944 10027 +3 9314 10027 9437 +3 9315 9438 10028 +3 9315 10028 9945 +3 9316 9913 11591 +3 9316 11591 10899 +3 9317 10900 11592 +3 9317 11592 9914 +3 9318 10189 11070 +3 9318 11070 10203 +3 9319 10204 11071 +3 9319 11071 10190 +3 9320 10265 10943 +3 9320 10943 9710 +3 9321 9711 10944 +3 9321 10944 10266 +3 9322 9670 9833 +3 9322 9833 9521 +3 9323 9522 9834 +3 9323 9834 9671 +3 9324 9471 9512 +3 9324 9512 9370 +3 9325 9371 9513 +3 9325 9513 9472 +3 9326 10595 11866 +3 9326 11866 10572 +3 9327 10573 11867 +3 9327 11867 10596 +3 9328 9796 10555 +3 9328 10555 10129 +3 9329 10130 10556 +3 9329 10556 9796 +3 9330 9370 9528 +3 9330 9503 9340 +3 9330 9528 9503 +3 9331 9341 9504 +3 9331 9504 9529 +3 9331 9529 9371 +3 9332 11142 11779 +3 9332 11779 9996 +3 9333 9997 11780 +3 9333 11780 11143 +3 9334 11152 11919 +3 9334 11919 10029 +3 9335 10030 11920 +3 9335 11920 11153 +3 9336 9843 11628 +3 9336 11628 11061 +3 9337 11062 11629 +3 9337 11629 9844 +3 9338 9431 9524 +3 9338 9524 9473 +3 9339 9474 9525 +3 9339 9525 9432 +3 9340 9503 9563 +3 9340 9563 9396 +3 9341 9397 9564 +3 9341 9564 9504 +3 9342 10513 11474 +3 9342 11474 10231 +3 9343 10232 11475 +3 9343 11475 10514 +3 9344 9396 9569 +3 9344 9516 9345 +3 9344 9569 9516 +3 9345 9516 9570 +3 9345 9570 9397 +3 9346 10683 10800 +3 9346 10800 9490 +3 9347 9491 10801 +3 9347 10801 10684 +3 9348 9694 10099 +3 9348 10099 9786 +3 9349 9787 10100 +3 9349 10100 9695 +3 9350 9974 10852 +3 9350 10852 10273 +3 9351 10274 10853 +3 9351 10853 9975 +3 9352 10137 10775 +3 9352 10775 10017 +3 9353 10018 10776 +3 9353 10776 10138 +3 9354 9825 10121 +3 9354 10121 9694 +3 9355 9695 10122 +3 9355 10122 9826 +3 9356 9730 11593 +3 9356 11593 11195 +3 9357 11196 11594 +3 9357 11594 9731 +3 9358 9863 10319 +3 9358 10319 9885 +3 9359 9886 10320 +3 9359 10320 9864 +3 9360 10009 10798 +3 9360 10798 10169 +3 9361 10170 10799 +3 9361 10799 10010 +3 9362 10321 10761 +3 9362 10761 9839 +3 9363 9840 10762 +3 9363 10762 10322 +3 9364 10355 11183 +3 9364 11183 10189 +3 9365 10190 11184 +3 9365 11184 10356 +3 9366 10069 11015 +3 9366 11015 10279 +3 9367 10280 11016 +3 9367 11016 10070 +3 9368 9815 10402 +3 9368 10402 9970 +3 9369 9971 10403 +3 9369 10403 9816 +3 9370 9512 9609 +3 9370 9609 9528 +3 9371 9529 9610 +3 9371 9610 9513 +3 9372 9789 10367 +3 9372 10367 9788 +3 9373 10181 11227 +3 9373 11227 10426 +3 9374 10427 11228 +3 9374 11228 10182 +3 9375 10311 10695 +3 9375 10695 9819 +3 9376 9820 10696 +3 9376 10696 10312 +3 9377 11096 11565 +3 9377 11565 9837 +3 9378 9838 11566 +3 9378 11566 11097 +3 9379 9432 9582 +3 9379 9581 9431 +3 9379 9582 9581 +3 9380 10572 12042 +3 9380 12042 10717 +3 9381 10718 12043 +3 9381 12043 10573 +3 9382 9857 10207 +3 9382 10207 9752 +3 9383 9753 10208 +3 9383 10208 9858 +3 9384 9774 9928 +3 9384 9928 9595 +3 9385 9596 9929 +3 9385 9929 9775 +3 9386 11111 11855 +3 9386 11855 10079 +3 9387 10080 11856 +3 9387 11856 11112 +3 9388 9641 10600 +3 9388 10600 10854 +3 9388 10854 9656 +3 9389 9657 10855 +3 9389 10601 9642 +3 9389 10855 10601 +3 9390 9589 9835 +3 9390 9835 9728 +3 9391 9729 9836 +3 9391 9836 9590 +3 9392 10440 11743 +3 9392 11743 10597 +3 9393 10598 11744 +3 9393 11744 10441 +3 9394 10245 10527 +3 9394 10527 9758 +3 9395 9759 10528 +3 9395 10528 10246 +3 9396 9563 9652 +3 9396 9652 9569 +3 9397 9570 9653 +3 9397 9653 9564 +3 9398 9760 10655 +3 9398 10655 10327 +3 9399 10328 10656 +3 9399 10656 9761 +3 9400 9478 10075 +3 9400 10051 9401 +3 9400 10075 10051 +3 9401 10051 10076 +3 9401 10076 9479 +3 9402 10005 10408 +3 9402 10408 9823 +3 9403 9824 10409 +3 9403 10409 10006 +3 9404 9538 10019 +3 9404 10019 9938 +3 9405 9939 10020 +3 9405 10020 9539 +3 9406 9801 9940 +3 9406 9940 9583 +3 9407 9584 9941 +3 9407 9941 9802 +3 9408 10783 11444 +3 9408 11444 10021 +3 9409 10022 11445 +3 9409 11445 10784 +3 9410 9748 10391 +3 9410 10391 10071 +3 9411 10072 10392 +3 9411 10392 9749 +3 9412 9746 9981 +3 9412 9981 9678 +3 9413 9679 9982 +3 9413 9982 9747 +3 9414 9672 9873 +3 9414 9873 9666 +3 9415 9667 9874 +3 9415 9874 9673 +3 9416 9678 9994 +3 9416 9994 9764 +3 9417 9765 9995 +3 9417 9995 9679 +3 9418 10359 11088 +3 9418 11088 10088 +3 9419 10089 11089 +3 9419 11089 10360 +3 9420 10531 10933 +3 9420 10933 9790 +3 9421 9791 10934 +3 9421 10934 10532 +3 9422 9460 10584 +3 9422 10583 9459 +3 9422 10584 10583 +3 9423 9811 10627 +3 9423 10627 10281 +3 9424 10282 10628 +3 9424 10628 9812 +3 9425 9494 10143 +3 9425 10103 9427 +3 9425 10143 10103 +3 9426 9428 10104 +3 9426 10104 10144 +3 9426 10144 9495 +3 9427 10103 10297 +3 9427 10297 9623 +3 9428 9624 10298 +3 9428 10298 10104 +3 9429 10822 12145 +3 9429 12145 10595 +3 9430 10596 12146 +3 9430 12146 10823 +3 9431 9581 9633 +3 9431 9633 9524 +3 9432 9525 9634 +3 9432 9634 9582 +3 9433 10064 11245 +3 9433 11245 10543 +3 9434 10544 11246 +3 9434 11246 10064 +3 9435 10341 10587 +3 9435 10587 9723 +3 9436 9724 10588 +3 9436 10588 10342 +3 9437 10027 10171 +3 9437 10171 9619 +3 9438 9620 10172 +3 9438 10172 10028 +3 9439 10041 10295 +3 9439 10295 9708 +3 9440 9709 10296 +3 9440 10296 10042 +3 9441 10147 10380 +3 9441 10380 9692 +3 9442 9693 10381 +3 9442 10381 10148 +3 9443 10365 12263 +3 9443 12263 11223 +3 9444 11224 12264 +3 9444 12264 10366 +3 9445 10646 11319 +3 9445 11319 10060 +3 9446 10061 11320 +3 9446 11320 10647 +3 9447 10995 12261 +3 9447 12261 10535 +3 9448 10536 12262 +3 9448 12262 10996 +3 9449 9803 10505 +3 9449 10505 10165 +3 9450 10166 10506 +3 9450 10506 9804 +3 9451 9817 10247 +3 9451 10247 9851 +3 9452 9852 10248 +3 9452 10248 9818 +3 9453 11090 11579 +3 9453 11579 9871 +3 9454 9872 11580 +3 9454 11580 11091 +3 9455 10709 11825 +3 9455 11825 10458 +3 9456 10459 11826 +3 9456 11826 10710 +3 9457 10846 11936 +3 9457 11936 10430 +3 9458 10431 11937 +3 9458 11937 10847 +3 9459 10583 10657 +3 9459 10657 9565 +3 9460 9566 10658 +3 9460 10658 10584 +3 9461 9865 10293 +3 9461 10293 9867 +3 9462 9868 10294 +3 9462 10294 9866 +3 9463 10549 11154 +3 9463 11154 10033 +3 9464 10034 11155 +3 9464 11155 10550 +3 9465 10047 11577 +3 9465 11577 10905 +3 9466 10906 11578 +3 9466 11578 10048 +3 9467 9992 11341 +3 9467 11341 10735 +3 9468 9552 10107 +3 9468 10107 9817 +3 9469 9818 10108 +3 9469 10108 9553 +3 9470 10736 11342 +3 9470 11342 9993 +3 9471 9473 9664 +3 9471 9664 9684 +3 9471 9684 9512 +3 9472 9513 9685 +3 9472 9665 9474 +3 9472 9685 9665 +3 9473 9524 9700 +3 9473 9700 9664 +3 9474 9665 9701 +3 9474 9701 9525 +3 9475 9807 11168 +3 9475 11168 10818 +3 9476 10819 11169 +3 9476 11169 9808 +3 9477 10151 10571 +3 9477 10571 10152 +3 9478 9607 10174 +3 9478 10174 10075 +3 9479 10076 10175 +3 9479 10175 9608 +3 9480 11039 11781 +3 9480 11781 10155 +3 9481 10156 11782 +3 9481 11782 11040 +3 9482 9530 9976 +3 9482 9964 9577 +3 9482 9976 9964 +3 9483 9578 9965 +3 9483 9965 9977 +3 9483 9977 9531 +3 9484 9909 10945 +3 9484 10945 10507 +3 9485 10508 10946 +3 9485 10946 9910 +3 9486 10363 10609 +3 9486 10609 9768 +3 9487 9769 10610 +3 9487 10610 10364 +3 9488 9778 10537 +3 9488 10537 10313 +3 9489 10314 10538 +3 9489 10538 9779 +3 9490 10800 11001 +3 9490 11001 9706 +3 9491 9707 11002 +3 9491 11002 10801 +3 9492 10197 11687 +3 9492 11687 10919 +3 9493 10920 11688 +3 9493 11688 10198 +3 9494 9637 10253 +3 9494 10253 10143 +3 9495 10144 10254 +3 9495 10254 9638 +3 9496 10257 10585 +3 9496 10585 9869 +3 9497 9870 10586 +3 9497 10586 10258 +3 9498 9666 9980 +3 9498 9980 9667 +3 9499 10000 10370 +3 9499 10370 9863 +3 9500 9864 10371 +3 9500 10371 10001 +3 9501 10081 11523 +3 9501 11523 10903 +3 9502 10904 11524 +3 9502 11524 10082 +3 9503 9528 9696 +3 9503 9696 9704 +3 9503 9704 9563 +3 9504 9564 9705 +3 9504 9697 9529 +3 9504 9705 9697 +3 9505 10123 10432 +3 9505 10432 9799 +3 9506 9800 10433 +3 9506 10433 10124 +3 9507 10685 11471 +3 9507 11471 10686 +3 9508 10201 10781 +3 9508 10781 10117 +3 9509 10118 10782 +3 9509 10782 10202 +3 9510 9877 11225 +3 9510 11225 10824 +3 9511 10825 11226 +3 9511 11226 9878 +3 9512 9684 9744 +3 9512 9744 9609 +3 9513 9610 9745 +3 9513 9745 9685 +3 9514 10285 12171 +3 9514 12171 11301 +3 9515 11302 12172 +3 9515 12172 10286 +3 9516 9569 9734 +3 9516 9734 9735 +3 9516 9735 9570 +3 9517 10997 11729 +3 9517 11729 10225 +3 9518 10226 11730 +3 9518 11730 10998 +3 9519 10141 10791 +3 9519 10791 10187 +3 9520 10188 10792 +3 9520 10792 10142 +3 9521 9833 9988 +3 9521 9988 9672 +3 9522 9673 9989 +3 9522 9989 9834 +3 9523 9576 11200 +3 9523 11199 9575 +3 9523 11200 11199 +3 9524 9633 9766 +3 9524 9766 9700 +3 9525 9701 9767 +3 9525 9767 9634 +3 9526 10129 11027 +3 9526 11027 10418 +3 9527 10419 11028 +3 9527 11028 10130 +3 9528 9609 9740 +3 9528 9740 9696 +3 9529 9697 9741 +3 9529 9741 9610 +3 9530 9625 10052 +3 9530 10052 9976 +3 9531 9977 10053 +3 9531 10053 9626 +3 9532 9786 10299 +3 9532 10299 10025 +3 9533 10026 10300 +3 9533 10300 9787 +3 9534 10477 10867 +3 9534 10867 9922 +3 9535 9923 10868 +3 9535 10868 10478 +3 9536 9829 10223 +3 9536 10223 9911 +3 9537 9912 10224 +3 9537 10224 9830 +3 9538 9702 10161 +3 9538 10161 10019 +3 9539 10020 10162 +3 9539 10162 9703 +3 9540 10353 11717 +3 9540 11717 10808 +3 9541 10809 11718 +3 9541 11718 10354 +3 9542 9821 10901 +3 9542 10901 10589 +3 9543 10590 10902 +3 9543 10902 9822 +3 9544 9917 10213 +3 9544 10213 9829 +3 9545 9830 10214 +3 9545 10214 9917 +3 9546 10576 11581 +3 9546 11581 10452 +3 9547 10453 11582 +3 9547 11582 10577 +3 9548 9715 10565 +3 9548 10565 10323 +3 9549 10324 10566 +3 9549 10566 9716 +3 9550 10117 10810 +3 9550 10810 10141 +3 9551 10142 10811 +3 9551 10811 10118 +3 9552 9662 10209 +3 9552 10209 10107 +3 9553 10108 10210 +3 9553 10210 9663 +3 9554 10456 11531 +3 9554 11531 10529 +3 9555 10530 11532 +3 9555 11532 10457 +3 9556 10183 10491 +3 9556 10491 9865 +3 9557 9866 10492 +3 9557 10492 10184 +3 9558 9958 10673 +3 9558 10673 10301 +3 9559 10302 10674 +3 9559 10674 9959 +3 9560 10404 10895 +3 9560 10895 10054 +3 9561 10055 10896 +3 9561 10896 10405 +3 9562 9867 10382 +3 9562 10382 9868 +3 9563 9704 9756 +3 9563 9756 9652 +3 9564 9653 9757 +3 9564 9757 9705 +3 9565 10657 10779 +3 9565 10779 9698 +3 9566 9699 10780 +3 9566 10780 10658 +3 9567 10049 10763 +3 9567 10763 10303 +3 9568 10304 10764 +3 9568 10764 10050 +3 9569 9652 9794 +3 9569 9794 9734 +3 9570 9735 9795 +3 9570 9795 9653 +3 9571 10452 11481 +3 9571 11481 10456 +3 9572 10457 11482 +3 9572 11482 10453 +3 9573 10077 11279 +3 9573 11279 10705 +3 9574 10706 11280 +3 9574 11280 10078 +3 9575 11199 11255 +3 9575 11255 9686 +3 9576 9687 11256 +3 9576 11256 11200 +3 9577 9964 10056 +3 9577 10056 9670 +3 9578 9671 10057 +3 9578 10057 9965 +3 9579 10325 12324 +3 9579 12324 11459 +3 9580 11460 12325 +3 9580 12325 10326 +3 9581 9582 9727 +3 9581 9727 9754 +3 9581 9754 9633 +3 9582 9634 9755 +3 9582 9755 9727 +3 9583 9940 10111 +3 9583 10111 9746 +3 9584 9747 10112 +3 9584 10112 9941 +3 9585 9851 10335 +3 9585 10335 10045 +3 9586 10046 10336 +3 9586 10336 9852 +3 9587 9885 10406 +3 9587 10406 10062 +3 9588 10063 10407 +3 9588 10407 9886 +3 9589 9770 10031 +3 9589 10031 9835 +3 9590 9836 10032 +3 9590 10032 9771 +3 9591 10329 10891 +3 9591 10891 10151 +3 9592 10152 10892 +3 9592 10892 10330 +3 9593 11045 11377 +3 9593 11377 9861 +3 9594 9862 11378 +3 9594 11378 11046 +3 9595 9928 10133 +3 9595 10133 9770 +3 9596 9771 10134 +3 9596 10134 9929 +3 9597 10559 11409 +3 9597 11409 10355 +3 9598 10356 11410 +3 9598 11410 10560 +3 9599 10983 11493 +3 9599 11493 10058 +3 9600 10059 11494 +3 9600 11494 10984 +3 9601 10633 11003 +3 9601 11003 9950 +3 9602 9951 11004 +3 9602 11004 10634 +3 9603 9962 11123 +3 9603 11123 10747 +3 9604 10748 11124 +3 9604 11124 9963 +3 9605 10115 12207 +3 9605 12207 11634 +3 9606 11635 12208 +3 9606 12208 10116 +3 9607 9792 10361 +3 9607 10361 10174 +3 9608 10175 10362 +3 9608 10362 9793 +3 9609 9744 9859 +3 9609 9859 9740 +3 9610 9741 9860 +3 9610 9860 9745 +3 9611 10717 12283 +3 9611 12283 11033 +3 9612 11034 12284 +3 9612 12284 10718 +3 9613 10109 12235 +3 9613 12235 11403 +3 9614 11404 12236 +3 9614 12236 10110 +3 9615 9970 10607 +3 9615 10607 10317 +3 9616 10318 10608 +3 9616 10608 9971 +3 9617 9966 11626 +3 9617 11626 10979 +3 9618 10980 11627 +3 9618 11627 9967 +3 9619 10171 10385 +3 9619 10385 9825 +3 9620 9826 10386 +3 9620 10386 10172 +3 9621 10157 10410 +3 9621 10410 9857 +3 9622 9858 10411 +3 9622 10411 10158 +3 9623 10297 10481 +3 9623 10481 9738 +3 9624 9739 10482 +3 9624 10482 10298 +3 9625 9764 10195 +3 9625 10195 10052 +3 9626 10053 10196 +3 9626 10196 9765 +3 9627 10013 11624 +3 9627 11624 11179 +3 9628 11180 11625 +3 9628 11625 10014 +3 9629 9990 11363 +3 9629 11363 11693 +3 9629 11693 9905 +3 9630 9906 11694 +3 9630 11364 9991 +3 9630 11694 11364 +3 9631 10605 11275 +3 9631 11275 10265 +3 9632 10266 11276 +3 9632 11276 10606 +3 9633 9754 9889 +3 9633 9889 9766 +3 9634 9767 9890 +3 9634 9890 9755 +3 9635 9762 10561 +3 9635 10561 10125 +3 9636 10126 10562 +3 9636 10562 9763 +3 9637 9805 10420 +3 9637 10420 10253 +3 9638 10254 10421 +3 9638 10421 9806 +3 9639 11555 12064 +3 9639 12064 10073 +3 9640 10074 12065 +3 9640 12065 11556 +3 9641 9895 10880 +3 9641 10880 10600 +3 9642 10601 10881 +3 9642 10881 9896 +3 9643 10105 11197 +3 9643 11197 10677 +3 9644 10680 11198 +3 9644 11198 10106 +3 9645 10422 12159 +3 9645 12159 11266 +3 9646 11267 12160 +3 9646 12160 10423 +3 9647 9648 10092 +3 9647 10092 10131 +3 9647 10131 9688 +3 9648 9689 10132 +3 9648 10132 10092 +3 9649 11019 11491 +3 9649 11491 10097 +3 9650 10098 11492 +3 9650 11492 11020 +3 9651 9668 10640 +3 9651 10640 10641 +3 9651 10641 9669 +3 9652 9756 9879 +3 9652 9879 9794 +3 9653 9795 9880 +3 9653 9880 9757 +3 9654 10597 12000 +3 9654 12000 10921 +3 9655 10922 12001 +3 9655 12001 10598 +3 9656 10854 11166 +3 9656 11166 9881 +3 9657 9882 11167 +3 9657 11167 10855 +3 9658 10471 10707 +3 9658 10707 9903 +3 9659 9904 10708 +3 9659 10708 10472 +3 9660 10387 11463 +3 9660 11463 10691 +3 9661 10692 11464 +3 9661 11464 10388 +3 9662 9809 10345 +3 9662 10345 10209 +3 9663 10210 10346 +3 9663 10346 9810 +3 9664 9700 9907 +3 9664 9893 9684 +3 9664 9907 9893 +3 9665 9685 9894 +3 9665 9894 9908 +3 9665 9908 9701 +3 9666 9873 10167 +3 9666 10167 9980 +3 9667 9980 10168 +3 9667 10168 9874 +3 9668 9742 10699 +3 9668 10699 10640 +3 9669 10641 10700 +3 9669 10700 9743 +3 9670 10056 10239 +3 9670 10239 9833 +3 9671 9834 10240 +3 9671 10240 10057 +3 9672 9988 10185 +3 9672 10185 9873 +3 9673 9874 10186 +3 9673 10186 9989 +3 9674 10733 11349 +3 9674 11349 10321 +3 9675 10322 11350 +3 9675 11350 10734 +3 9676 10426 11527 +3 9676 11527 10743 +3 9677 10744 11528 +3 9677 11528 10427 +3 9678 9981 10263 +3 9678 10263 9994 +3 9679 9995 10264 +3 9679 10264 9982 +3 9680 9948 10865 +3 9680 10865 10603 +3 9681 10604 10866 +3 9681 10866 9949 +3 9682 10309 11891 +3 9682 11891 11221 +3 9683 11222 11892 +3 9683 11892 10310 +3 9684 9893 9936 +3 9684 9936 9744 +3 9685 9745 9937 +3 9685 9937 9894 +3 9686 11255 11438 +3 9686 11438 9853 +3 9687 9854 11439 +3 9687 11439 11256 +3 9688 10131 10235 +3 9688 10235 9774 +3 9689 9775 10236 +3 9689 10236 10132 +3 9690 11213 12070 +3 9690 12070 10470 +3 9691 10470 12071 +3 9691 12071 11214 +3 9692 10380 10637 +3 9692 10637 10005 +3 9693 10006 10638 +3 9693 10638 10381 +3 9694 10121 10464 +3 9694 10464 10099 +3 9695 10100 10465 +3 9695 10465 10122 +3 9696 9740 9918 +3 9696 9883 9704 +3 9696 9918 9883 +3 9697 9705 9884 +3 9697 9884 9919 +3 9697 9919 9741 +3 9698 10779 10993 +3 9698 10993 9887 +3 9699 9888 10994 +3 9699 10994 10780 +3 9700 9766 9972 +3 9700 9972 9907 +3 9701 9908 9973 +3 9701 9973 9767 +3 9702 9911 10372 +3 9702 10372 10161 +3 9703 10162 10373 +3 9703 10373 9912 +3 9704 9883 9930 +3 9704 9930 9756 +3 9705 9757 9931 +3 9705 9931 9884 +3 9706 11001 11541 +3 9706 11541 10229 +3 9707 10230 11542 +3 9707 11542 11002 +3 9708 10295 10551 +3 9708 10551 10000 +3 9709 10001 10552 +3 9709 10552 10296 +3 9710 10943 11395 +3 9710 11395 10127 +3 9711 10128 11396 +3 9711 11396 10944 +3 9712 10643 11270 +3 9712 11270 10642 +3 9713 10771 12591 +3 9713 12591 11417 +3 9714 11418 12592 +3 9714 12592 10772 +3 9715 9954 10785 +3 9715 10785 10565 +3 9716 10566 10786 +3 9716 10786 9955 +3 9717 10357 10830 +3 9717 10830 9952 +3 9718 9953 10831 +3 9718 10831 10358 +3 9719 10273 11257 +3 9719 11257 10675 +3 9720 10676 11258 +3 9720 11258 10274 +3 9721 10529 11747 +3 9721 11747 10773 +3 9722 10774 11748 +3 9722 11748 10530 +3 9723 10587 10949 +3 9723 10949 9946 +3 9724 9947 10950 +3 9724 10950 10588 +3 9725 11251 12433 +3 9725 12433 10822 +3 9726 10823 12434 +3 9726 12434 11252 +3 9727 9755 9943 +3 9727 9942 9754 +3 9727 9943 9942 +3 9728 9835 10191 +3 9728 10191 10277 +3 9728 10277 9801 +3 9729 9802 10278 +3 9729 10192 9836 +3 9729 10278 10192 +3 9730 10119 12026 +3 9730 12026 11593 +3 9731 11594 12027 +3 9731 12027 10120 +3 9732 9772 11821 +3 9732 11797 9733 +3 9732 11821 11797 +3 9733 11797 11822 +3 9733 11822 9773 +3 9734 9794 10007 +3 9734 9987 9735 +3 9734 10007 9987 +3 9735 9987 10008 +3 9735 10008 9795 +3 9736 9737 10578 +3 9736 10578 10611 +3 9736 10611 9797 +3 9737 9798 10612 +3 9737 10612 10578 +3 9738 10481 10659 +3 9738 10659 9924 +3 9739 9925 10660 +3 9739 10660 10482 +3 9740 9859 10039 +3 9740 10039 9918 +3 9741 9919 10040 +3 9741 10040 9860 +3 9742 9849 10796 +3 9742 10796 10699 +3 9743 10700 10797 +3 9743 10797 9850 +3 9744 9936 10043 +3 9744 10043 9859 +3 9745 9860 10044 +3 9745 10044 9937 +3 9746 10111 10339 +3 9746 10339 9981 +3 9747 9982 10340 +3 9747 10340 10112 +3 9748 10125 10729 +3 9748 10729 10391 +3 9749 10392 10730 +3 9749 10730 10126 +3 9750 10653 12305 +3 9750 12305 11288 +3 9751 11289 12306 +3 9751 12306 10654 +3 9752 10207 10557 +3 9752 10557 9855 +3 9753 9856 10558 +3 9753 10558 10208 +3 9754 9942 10065 +3 9754 10065 9889 +3 9755 9890 10066 +3 9755 10066 9943 +3 9756 9930 10035 +3 9756 10035 9879 +3 9757 9880 10036 +3 9757 10036 9931 +3 9758 10527 10947 +3 9758 10947 10201 +3 9759 10202 10948 +3 9759 10948 10528 +3 9760 10169 11080 +3 9760 11080 10655 +3 9761 10656 11081 +3 9761 11081 10170 +3 9762 10003 10793 +3 9762 10793 10561 +3 9763 10562 10794 +3 9763 10794 10004 +3 9764 9994 10383 +3 9764 10383 10195 +3 9765 10196 10384 +3 9765 10384 9995 +3 9766 9889 10086 +3 9766 10086 9972 +3 9767 9973 10087 +3 9767 10087 9890 +3 9768 10609 10981 +3 9768 10981 10137 +3 9769 10138 10982 +3 9769 10982 10610 +3 9770 10133 10393 +3 9770 10393 10031 +3 9771 10032 10394 +3 9771 10394 10134 +3 9772 9968 11907 +3 9772 11907 11821 +3 9773 11822 11908 +3 9773 11908 9969 +3 9774 10235 10351 +3 9774 10351 9928 +3 9775 9929 10352 +3 9775 10352 10236 +3 9776 10909 11849 +3 9776 11849 10576 +3 9777 10577 11850 +3 9777 11850 10910 +3 9778 10187 10893 +3 9778 10893 10537 +3 9779 10538 10894 +3 9779 10894 10188 +3 9780 11177 12209 +3 9780 12209 10709 +3 9781 10710 12210 +3 9781 12210 11178 +3 9782 9783 10951 +3 9782 10951 10985 +3 9782 10985 9827 +3 9783 9828 10986 +3 9783 10986 10951 +3 9784 11415 12181 +3 9784 12181 10454 +3 9785 10455 12182 +3 9785 12182 11416 +3 9786 10099 10563 +3 9786 10563 10299 +3 9787 10300 10564 +3 9787 10564 10100 +3 9788 10367 11011 +3 9788 11011 10450 +3 9789 10451 11012 +3 9789 11012 10367 +3 9790 10933 11391 +3 9790 11391 10255 +3 9791 10256 11392 +3 9791 11392 10934 +3 9792 10045 10567 +3 9792 10567 10361 +3 9793 10362 10568 +3 9793 10568 10046 +3 9794 9879 10084 +3 9794 10084 10007 +3 9795 10008 10085 +3 9795 10085 9880 +3 9796 10556 11108 +3 9796 11108 10555 +3 9797 10611 10687 +3 9797 10687 9875 +3 9798 9876 10688 +3 9798 10688 10612 +3 9799 10432 10751 +3 9799 10751 10157 +3 9800 10158 10752 +3 9800 10752 10433 +3 9801 10277 10389 +3 9801 10389 9940 +3 9802 9941 10390 +3 9802 10390 10278 +3 9803 10071 10757 +3 9803 10757 10505 +3 9804 10506 10758 +3 9804 10758 10072 +3 9805 10062 10621 +3 9805 10621 10420 +3 9806 10421 10622 +3 9806 10622 10063 +3 9807 10241 11605 +3 9807 11605 11168 +3 9808 11169 11606 +3 9808 11606 10242 +3 9809 10025 10503 +3 9809 10503 10345 +3 9810 10346 10504 +3 9810 10504 10026 +3 9811 10303 11119 +3 9811 11119 10627 +3 9812 10628 11120 +3 9812 11120 10304 +3 9813 10907 11812 +3 9813 11812 10289 +3 9814 10290 11813 +3 9814 11813 10908 +3 9815 10424 10977 +3 9815 10977 10402 +3 9816 10403 10978 +3 9816 10978 10425 +3 9817 10107 10475 +3 9817 10475 10247 +3 9818 10248 10476 +3 9818 10476 10108 +3 9819 10695 11191 +3 9819 11191 10329 +3 9820 10330 11192 +3 9820 11192 10696 +3 9821 10176 11281 +3 9821 11281 10901 +3 9822 10902 11282 +3 9822 11282 10177 +3 9823 10408 10991 +3 9823 10991 10424 +3 9824 10425 10992 +3 9824 10992 10409 +3 9825 10385 10613 +3 9825 10613 10121 +3 9826 10122 10614 +3 9826 10614 10386 +3 9827 10985 11068 +3 9827 11068 9956 +3 9828 9957 11069 +3 9828 11069 10986 +3 9829 10213 10517 +3 9829 10517 10223 +3 9830 10224 10518 +3 9830 10518 10214 +3 9831 11086 12320 +3 9831 12320 11115 +3 9832 11116 12321 +3 9832 12321 11087 +3 9833 10239 10349 +3 9833 10349 9988 +3 9834 9989 10350 +3 9834 10350 10240 +3 9835 10031 10347 +3 9835 10347 10191 +3 9836 10192 10348 +3 9836 10348 10032 +3 9837 11565 12134 +3 9837 12134 10397 +3 9838 10398 12135 +3 9838 12135 11566 +3 9839 10761 11311 +3 9839 11311 10399 +3 9840 10399 11312 +3 9840 11312 10762 +3 9841 10889 12157 +3 9841 12157 10999 +3 9842 11000 12158 +3 9842 12158 10890 +3 9843 10473 12227 +3 9843 12227 11628 +3 9844 11629 12228 +3 9844 12228 10474 +3 9845 10501 12367 +3 9845 12367 11636 +3 9846 11637 12368 +3 9846 12368 10502 +3 9847 10973 12116 +3 9847 12116 10889 +3 9848 10890 12117 +3 9848 12117 10974 +3 9849 10165 10965 +3 9849 10965 10796 +3 9850 10797 10966 +3 9850 10966 10166 +3 9851 10247 10665 +3 9851 10665 10335 +3 9852 10336 10666 +3 9852 10666 10248 +3 9853 11438 12072 +3 9853 12072 10446 +3 9854 10447 12073 +3 9854 12073 11439 +3 9855 10557 10703 +3 9855 10703 10041 +3 9856 10042 10704 +3 9856 10704 10558 +3 9857 10410 10689 +3 9857 10689 10207 +3 9858 10208 10690 +3 9858 10690 10411 +3 9859 10043 10227 +3 9859 10227 10039 +3 9860 10040 10228 +3 9860 10228 10044 +3 9861 11377 11767 +3 9861 11767 10233 +3 9862 10234 11768 +3 9862 11768 11378 +3 9863 10370 10759 +3 9863 10759 10319 +3 9864 10320 10760 +3 9864 10760 10371 +3 9865 10491 10884 +3 9865 10884 10293 +3 9866 10294 10885 +3 9866 10885 10492 +3 9867 10293 10739 +3 9867 10739 10382 +3 9868 10382 10740 +3 9868 10740 10294 +3 9869 10585 11063 +3 9869 11063 10357 +3 9870 10358 11064 +3 9870 11064 10586 +3 9871 11579 12124 +3 9871 12124 10395 +3 9872 10396 12125 +3 9872 12125 11580 +3 9873 10185 10442 +3 9873 10442 10167 +3 9874 10168 10443 +3 9874 10443 10186 +3 9875 10687 10806 +3 9875 10806 10123 +3 9876 10124 10807 +3 9876 10807 10688 +3 9877 10287 11640 +3 9877 11640 11225 +3 9878 11226 11641 +3 9878 11641 10288 +3 9879 10035 10211 +3 9879 10211 10084 +3 9880 10085 10212 +3 9880 10212 10036 +3 9881 11166 11487 +3 9881 11487 10217 +3 9882 10218 11488 +3 9882 11488 11167 +3 9883 9918 10145 +3 9883 10145 10149 +3 9883 10149 9930 +3 9884 9931 10150 +3 9884 10146 9919 +3 9884 10150 10146 +3 9885 10319 10769 +3 9885 10769 10406 +3 9886 10407 10770 +3 9886 10770 10320 +3 9887 10993 11483 +3 9887 11483 10163 +3 9888 10164 11484 +3 9888 11484 10994 +3 9889 10065 10267 +3 9889 10267 10086 +3 9890 10087 10268 +3 9890 10268 10066 +3 9891 10261 12312 +3 9891 12312 10995 +3 9892 10996 12313 +3 9892 12313 10262 +3 9893 9907 10199 +3 9893 10199 10205 +3 9893 10205 9936 +3 9894 9937 10206 +3 9894 10200 9908 +3 9894 10206 10200 +3 9895 10279 11253 +3 9895 11253 10880 +3 9896 10881 11254 +3 9896 11254 10280 +3 9897 11229 12472 +3 9897 12472 11086 +3 9898 11087 12473 +3 9898 12473 11230 +3 9899 10090 10967 +3 9899 10767 9978 +3 9899 10967 10767 +3 9900 9979 10768 +3 9900 10768 10968 +3 9900 10968 10091 +3 9901 9938 10497 +3 9901 10494 9944 +3 9901 10497 10494 +3 9902 9945 10495 +3 9902 10495 10498 +3 9902 10498 9939 +3 9903 10707 11051 +3 9903 11051 10257 +3 9904 10258 11052 +3 9904 11052 10708 +3 9905 11693 12074 +3 9905 12074 10275 +3 9906 10276 12075 +3 9906 12075 11694 +3 9907 9972 10249 +3 9907 10249 10199 +3 9908 10200 10250 +3 9908 10250 9973 +3 9909 10418 11467 +3 9909 11467 10945 +3 9910 10946 11468 +3 9910 11468 10419 +3 9911 10223 10591 +3 9911 10591 10372 +3 9912 10373 10592 +3 9912 10592 10224 +3 9913 10539 12301 +3 9913 12301 11591 +3 9914 11592 12302 +3 9914 12302 10540 +3 9915 11673 12659 +3 9915 12659 10802 +3 9916 10803 12660 +3 9916 12660 11674 +3 9917 10214 10599 +3 9917 10599 10213 +3 9918 10039 10271 +3 9918 10271 10145 +3 9919 10146 10272 +3 9919 10272 10040 +3 9920 10067 10927 +3 9920 10927 11158 +3 9920 11158 10095 +3 9921 10096 11159 +3 9921 10928 10068 +3 9921 11159 10928 +3 9922 10867 11347 +3 9922 11347 10404 +3 9923 10405 11348 +3 9923 11348 10868 +3 9924 10659 10876 +3 9924 10876 10183 +3 9925 10184 10877 +3 9925 10877 10660 +3 9926 11033 12653 +3 9926 12653 11457 +3 9927 11458 12654 +3 9927 12654 11034 +3 9928 10351 10509 +3 9928 10509 10133 +3 9929 10134 10510 +3 9929 10510 10352 +3 9930 10149 10243 +3 9930 10243 10035 +3 9931 10036 10244 +3 9931 10244 10150 +3 9932 9998 11297 +3 9932 11283 9933 +3 9932 11297 11283 +3 9933 11283 11298 +3 9933 11298 9999 +3 9934 11115 12546 +3 9934 12546 11303 +3 9935 11304 12549 +3 9935 12549 11116 +3 9936 10205 10283 +3 9936 10283 10043 +3 9937 10044 10284 +3 9937 10284 10206 +3 9938 10019 10667 +3 9938 10667 10497 +3 9939 10498 10668 +3 9939 10668 10020 +3 9940 10389 10511 +3 9940 10511 10111 +3 9941 10112 10512 +3 9941 10512 10390 +3 9942 9943 10173 +3 9942 10173 10315 +3 9942 10315 10065 +3 9943 10066 10316 +3 9943 10316 10173 +3 9944 10494 10545 +3 9944 10545 10027 +3 9945 10028 10546 +3 9945 10546 10495 +3 9946 10949 11293 +3 9946 11293 10311 +3 9947 10312 11294 +3 9947 11294 10950 +3 9948 10281 11215 +3 9948 11215 10865 +3 9949 10866 11216 +3 9949 11216 10282 +3 9950 11003 11419 +3 9950 11419 10359 +3 9951 10360 11420 +3 9951 11420 11004 +3 9952 10830 11117 +3 9952 11117 10245 +3 9953 10246 11118 +3 9953 11118 10831 +3 9954 10301 11146 +3 9954 11146 10785 +3 9955 10786 11147 +3 9955 11147 10302 +3 9956 11068 11211 +3 9956 11211 10093 +3 9957 10094 11212 +3 9957 11212 11069 +3 9958 10450 11185 +3 9958 11185 10673 +3 9959 10674 11186 +3 9959 11186 10451 +3 9960 10221 11661 +3 9960 11372 10251 +3 9960 11661 11372 +3 9961 10252 11373 +3 9961 11373 11662 +3 9961 11662 10222 +3 9962 10773 12030 +3 9962 12030 11123 +3 9963 11124 12031 +3 9963 12031 10774 +3 9964 9976 10483 +3 9964 10483 10485 +3 9964 10485 10056 +3 9965 10057 10486 +3 9965 10484 9977 +3 9965 10486 10484 +3 9966 10412 12088 +3 9966 12088 11626 +3 9967 11627 12089 +3 9967 12089 10413 +3 9968 10617 12639 +3 9968 12639 11907 +3 9969 11908 12640 +3 9969 12640 10618 +3 9970 10402 11047 +3 9970 11047 10607 +3 9971 10608 11048 +3 9971 11048 10403 +3 9972 10086 10331 +3 9972 10331 10249 +3 9973 10250 10332 +3 9973 10332 10087 +3 9974 10343 11571 +3 9974 11571 10852 +3 9975 10853 11572 +3 9975 11572 10344 +3 9976 10052 10525 +3 9976 10525 10483 +3 9977 10484 10526 +3 9977 10526 10053 +3 9978 10767 10925 +3 9978 10925 10147 +3 9979 10148 10926 +3 9979 10926 10768 +3 9980 10167 10496 +3 9980 10496 10168 +3 9981 10339 10569 +3 9981 10569 10263 +3 9982 10264 10570 +3 9982 10570 10340 +3 9983 11160 12243 +3 9983 12243 10973 +3 9984 10974 12244 +3 9984 12244 11161 +3 9985 10731 12553 +3 9985 12553 11741 +3 9986 11742 12554 +3 9986 12554 10732 +3 9987 10007 10307 +3 9987 10307 10308 +3 9987 10308 10008 +3 9988 10349 10499 +3 9988 10499 10185 +3 9989 10186 10500 +3 9989 10500 10350 +3 9990 10921 12413 +3 9990 12413 11363 +3 9991 11364 12414 +3 9991 12414 10922 +3 9992 10543 11973 +3 9992 11973 11341 +3 9993 11342 11974 +3 9993 11974 10544 +3 9994 10263 10581 +3 9994 10581 10383 +3 9995 10384 10582 +3 9995 10582 10264 +3 9996 11779 12551 +3 9996 12551 10711 +3 9997 10712 12552 +3 9997 12552 11780 +3 9998 10139 11440 +3 9998 11440 11297 +3 9999 11298 11441 +3 9999 11441 10140 +3 10000 10551 10911 +3 10000 10911 10370 +3 10001 10371 10912 +3 10001 10912 10552 +3 10002 11643 12466 +3 10002 12466 11642 +3 10003 10317 11098 +3 10003 11098 10793 +3 10004 10794 11099 +3 10004 11099 10318 +3 10005 10637 11041 +3 10005 11041 10408 +3 10006 10409 11042 +3 10006 11042 10638 +3 10007 10084 10337 +3 10007 10337 10307 +3 10008 10308 10338 +3 10008 10338 10085 +3 10009 10715 11543 +3 10009 11543 10798 +3 10010 10799 11544 +3 10010 11544 10716 +3 10011 10842 11719 +3 10011 11719 10848 +3 10012 10849 11720 +3 10012 11720 10843 +3 10013 10448 12094 +3 10013 12094 11624 +3 10014 11625 12095 +3 10014 12095 10449 +3 10015 10999 12330 +3 10015 12330 11271 +3 10016 11272 12331 +3 10016 12331 11000 +3 10017 10775 11557 +3 10017 11557 10723 +3 10018 10724 11558 +3 10018 11558 10776 +3 10019 10161 10789 +3 10019 10789 10667 +3 10020 10668 10790 +3 10020 10790 10162 +3 10021 11444 12189 +3 10021 12189 10685 +3 10022 10686 12190 +3 10022 12190 11445 +3 10023 10848 11735 +3 10023 11735 10844 +3 10024 10845 11736 +3 10024 11736 10849 +3 10025 10299 10753 +3 10025 10753 10503 +3 10026 10504 10754 +3 10026 10754 10300 +3 10027 10545 10681 +3 10027 10681 10171 +3 10028 10172 10682 +3 10028 10682 10546 +3 10029 11919 12743 +3 10029 12743 10765 +3 10030 10766 12744 +3 10030 12744 11920 +3 10031 10393 10661 +3 10031 10661 10347 +3 10032 10348 10662 +3 10032 10662 10394 +3 10033 11154 11816 +3 10033 11816 10639 +3 10034 10639 11817 +3 10034 11817 11155 +3 10035 10243 10368 +3 10035 10368 10211 +3 10036 10212 10369 +3 10036 10369 10244 +3 10037 10723 11567 +3 10037 11567 10715 +3 10038 10716 11568 +3 10038 11568 10724 +3 10039 10227 10414 +3 10039 10414 10271 +3 10040 10272 10415 +3 10040 10415 10228 +3 10041 10703 10957 +3 10041 10957 10295 +3 10042 10296 10958 +3 10042 10958 10704 +3 10043 10283 10416 +3 10043 10416 10227 +3 10044 10228 10417 +3 10044 10417 10284 +3 10045 10335 10861 +3 10045 10861 10567 +3 10046 10568 10862 +3 10046 10862 10336 +3 10047 10691 12287 +3 10047 12287 11577 +3 10048 11578 12288 +3 10048 12288 10692 +3 10049 10327 11359 +3 10049 11359 10763 +3 10050 10764 11360 +3 10050 11360 10328 +3 10051 10075 10787 +3 10051 10787 10788 +3 10051 10788 10076 +3 10052 10195 10644 +3 10052 10644 10525 +3 10053 10526 10645 +3 10053 10645 10196 +3 10054 10895 11515 +3 10054 11515 10633 +3 10055 10634 11516 +3 10055 11516 10896 +3 10056 10485 10631 +3 10056 10631 10239 +3 10057 10240 10632 +3 10057 10632 10486 +3 10058 11493 12147 +3 10058 12147 10605 +3 10059 10606 12148 +3 10059 12148 11494 +3 10060 11319 11927 +3 10060 11927 10549 +3 10061 10550 11928 +3 10061 11928 11320 +3 10062 10406 10959 +3 10062 10959 10621 +3 10063 10622 10960 +3 10063 10960 10407 +3 10064 11246 11989 +3 10064 11989 11245 +3 10065 10315 10460 +3 10065 10460 10267 +3 10066 10268 10461 +3 10066 10461 10316 +3 10067 10313 11140 +3 10067 11140 10927 +3 10068 10928 11141 +3 10068 11141 10314 +3 10069 10844 11845 +3 10069 11845 11015 +3 10070 11016 11846 +3 10070 11846 10845 +3 10071 10391 11100 +3 10071 11100 10757 +3 10072 10758 11101 +3 10072 11101 10392 +3 10073 12064 12615 +3 10073 12615 10553 +3 10074 10554 12616 +3 10074 12616 12065 +3 10075 10174 10856 +3 10075 10856 10787 +3 10076 10788 10857 +3 10076 10857 10175 +3 10077 10677 11938 +3 10077 11938 11279 +3 10078 11280 11939 +3 10078 11939 10680 +3 10079 11855 12641 +3 10079 12641 10541 +3 10080 10542 12642 +3 10080 12642 11856 +3 10081 10735 12239 +3 10081 12239 11523 +3 10082 11524 12240 +3 10082 12240 10736 +3 10083 10113 11749 +3 10083 11749 11750 +3 10083 11750 10114 +3 10084 10211 10436 +3 10084 10436 10337 +3 10085 10338 10437 +3 10085 10437 10212 +3 10086 10267 10468 +3 10086 10468 10331 +3 10087 10332 10469 +3 10087 10469 10268 +3 10088 11088 11876 +3 10088 11876 10842 +3 10089 10843 11877 +3 10089 11877 11089 +3 10090 10323 11193 +3 10090 11193 10967 +3 10091 10968 11194 +3 10091 11194 10324 +3 10092 10132 10626 +3 10092 10625 10131 +3 10092 10626 10625 +3 10093 11211 11407 +3 10093 11407 10471 +3 10094 10472 11408 +3 10094 11408 11212 +3 10095 11158 11399 +3 10095 11399 10341 +3 10096 10342 11400 +3 10096 11400 11159 +3 10097 11491 12096 +3 10097 12096 10646 +3 10098 10647 12097 +3 10098 12097 11492 +3 10099 10464 10935 +3 10099 10935 10563 +3 10100 10564 10936 +3 10100 10936 10465 +3 10101 11495 12712 +3 10101 12712 11229 +3 10102 11230 12713 +3 10102 12713 11496 +3 10103 10143 10850 +3 10103 10850 11043 +3 10103 11043 10297 +3 10104 10298 11044 +3 10104 10851 10144 +3 10104 11044 10851 +3 10105 10642 11775 +3 10105 11775 11197 +3 10106 11198 11776 +3 10106 11776 10643 +3 10107 10209 10814 +3 10107 10814 10475 +3 10108 10476 10815 +3 10108 10815 10210 +3 10109 10671 12876 +3 10109 12876 12235 +3 10110 12236 12877 +3 10110 12877 10672 +3 10111 10511 10725 +3 10111 10725 10339 +3 10112 10340 10726 +3 10112 10726 10512 +3 10113 10259 11793 +3 10113 11793 11749 +3 10114 11750 11794 +3 10114 11794 10260 +3 10115 10663 12840 +3 10115 12840 12207 +3 10116 12208 12841 +3 10116 12841 10664 +3 10117 10781 11505 +3 10117 11505 10810 +3 10118 10811 11506 +3 10118 11506 10782 +3 10119 10533 12496 +3 10119 12496 12026 +3 10120 12027 12497 +3 10120 12497 10534 +3 10121 10613 10969 +3 10121 10969 10464 +3 10122 10465 10970 +3 10122 10970 10614 +3 10123 10806 11121 +3 10123 11121 10432 +3 10124 10433 11122 +3 10124 11122 10807 +3 10125 10561 11205 +3 10125 11205 10729 +3 10126 10730 11206 +3 10126 11206 10562 +3 10127 11395 12279 +3 10127 12279 10909 +3 10128 10910 12280 +3 10128 12280 11396 +3 10129 10555 11485 +3 10129 11485 11027 +3 10130 11028 11486 +3 10130 11486 10556 +3 10131 10625 10693 +3 10131 10693 10235 +3 10132 10236 10694 +3 10132 10694 10626 +3 10133 10509 10755 +3 10133 10755 10393 +3 10134 10394 10756 +3 10134 10756 10510 +3 10135 11613 13014 +3 10135 13014 11429 +3 10136 11430 13015 +3 10136 13015 11614 +3 10137 10981 11731 +3 10137 11731 10775 +3 10138 10776 11732 +3 10138 11732 10982 +3 10139 10333 11617 +3 10139 11617 11440 +3 10140 11441 11618 +3 10140 11618 10334 +3 10141 10810 11509 +3 10141 11509 10791 +3 10142 10792 11510 +3 10142 11510 10811 +3 10143 10253 10917 +3 10143 10917 10850 +3 10144 10851 10918 +3 10144 10918 10254 +3 10145 10271 10489 +3 10145 10428 10149 +3 10145 10489 10428 +3 10146 10150 10429 +3 10146 10429 10490 +3 10146 10490 10272 +3 10147 10925 11150 +3 10147 11150 10380 +3 10148 10381 11151 +3 10148 11151 10926 +3 10149 10428 10466 +3 10149 10466 10243 +3 10150 10244 10467 +3 10150 10467 10429 +3 10151 10891 11355 +3 10151 11355 10571 +3 10152 10571 11356 +3 10152 11356 10892 +3 10153 10400 11595 +3 10153 11335 10363 +3 10153 11595 11335 +3 10154 10364 11336 +3 10154 11336 11596 +3 10154 11596 10401 +3 10155 11781 12593 +3 10155 12593 10907 +3 10156 10908 12594 +3 10156 12594 11782 +3 10157 10751 11031 +3 10157 11031 10410 +3 10158 10411 11032 +3 10158 11032 10752 +3 10159 11429 13058 +3 10159 13058 11679 +3 10160 11682 13059 +3 10160 13059 11430 +3 10161 10372 10987 +3 10161 10987 10789 +3 10162 10790 10988 +3 10162 10988 10373 +3 10163 11483 11833 +3 10163 11833 10477 +3 10164 10478 11834 +3 10164 11834 11484 +3 10165 10505 11317 +3 10165 11317 10965 +3 10166 10966 11318 +3 10166 11318 10506 +3 10167 10442 10745 +3 10167 10745 10496 +3 10168 10496 10746 +3 10168 10746 10443 +3 10169 10798 11798 +3 10169 11798 11080 +3 10170 11081 11799 +3 10170 11799 10799 +3 10171 10681 10863 +3 10171 10863 10385 +3 10172 10386 10864 +3 10172 10864 10682 +3 10173 10316 10493 +3 10173 10493 10315 +3 10174 10361 10955 +3 10174 10955 10856 +3 10175 10857 10956 +3 10175 10956 10362 +3 10176 10507 11656 +3 10176 11656 11281 +3 10177 11282 11657 +3 10177 11657 10508 +3 10178 10215 11313 +3 10178 11313 11314 +3 10178 11314 10216 +3 10179 10462 12213 +3 10179 11905 10513 +3 10179 12213 11905 +3 10180 10514 11906 +3 10180 11906 12214 +3 10180 12214 10463 +3 10181 11059 12179 +3 10181 12179 11227 +3 10182 11228 12180 +3 10182 12180 11060 +3 10183 10876 11233 +3 10183 11233 10491 +3 10184 10492 11234 +3 10184 11234 10877 +3 10185 10499 10737 +3 10185 10737 10442 +3 10186 10443 10738 +3 10186 10738 10500 +3 10187 10791 11583 +3 10187 11583 10893 +3 10188 10894 11584 +3 10188 11584 10792 +3 10189 11183 12163 +3 10189 12163 11070 +3 10190 11071 12164 +3 10190 12164 11184 +3 10191 10347 10678 +3 10191 10678 10749 +3 10191 10749 10277 +3 10192 10278 10750 +3 10192 10679 10348 +3 10192 10750 10679 +3 10193 11859 13020 +3 10193 13020 11251 +3 10194 11252 13021 +3 10194 13021 11860 +3 10195 10383 10820 +3 10195 10820 10644 +3 10196 10645 10821 +3 10196 10821 10384 +3 10197 10952 12500 +3 10197 12500 11687 +3 10198 11688 12501 +3 10198 12501 10952 +3 10199 10249 10515 +3 10199 10487 10205 +3 10199 10515 10487 +3 10200 10206 10488 +3 10200 10488 10516 +3 10200 10516 10250 +3 10201 10947 11597 +3 10201 11597 10781 +3 10202 10782 11598 +3 10202 11598 10948 +3 10203 11070 12084 +3 10203 12084 11059 +3 10204 11060 12085 +3 10204 12085 11071 +3 10205 10487 10523 +3 10205 10523 10283 +3 10206 10284 10524 +3 10206 10524 10488 +3 10207 10689 11084 +3 10207 11084 10557 +3 10208 10558 11085 +3 10208 11085 10690 +3 10209 10345 10929 +3 10209 10929 10814 +3 10210 10815 10930 +3 10210 10930 10346 +3 10211 10368 10521 +3 10211 10521 10436 +3 10212 10437 10522 +3 10212 10522 10369 +3 10213 10599 10939 +3 10213 10939 10517 +3 10214 10518 10940 +3 10214 10940 10599 +3 10215 10305 11387 +3 10215 11387 11313 +3 10216 11314 11388 +3 10216 11388 10306 +3 10217 11487 11868 +3 10217 11868 10531 +3 10218 10532 11869 +3 10218 11869 11488 +3 10219 10220 12219 +3 10219 12219 12255 +3 10219 12255 10269 +3 10220 10270 12256 +3 10220 12256 12219 +3 10221 10479 11981 +3 10221 11981 11661 +3 10222 11662 11982 +3 10222 11982 10480 +3 10223 10517 10937 +3 10223 10937 10591 +3 10224 10592 10938 +3 10224 10938 10518 +3 10225 11729 12371 +3 10225 12371 10783 +3 10226 10784 12372 +3 10226 12372 11730 +3 10227 10416 10579 +3 10227 10579 10414 +3 10228 10415 10580 +3 10228 10580 10417 +3 10229 11541 12187 +3 10229 12187 10519 +3 10230 10520 12188 +3 10230 12188 11542 +3 10231 11474 12492 +3 10231 12492 11160 +3 10232 11161 12493 +3 10232 12493 11475 +3 10233 11767 12183 +3 10233 12183 10574 +3 10234 10575 12184 +3 10234 12184 11768 +3 10235 10693 10812 +3 10235 10812 10351 +3 10236 10352 10813 +3 10236 10813 10694 +3 10237 11303 12878 +3 10237 12878 11733 +3 10238 11734 12879 +3 10238 12879 11304 +3 10239 10631 10741 +3 10239 10741 10349 +3 10240 10350 10742 +3 10240 10742 10632 +3 10241 10675 12092 +3 10241 12092 11605 +3 10242 11606 12093 +3 10242 12093 10676 +3 10243 10466 10547 +3 10243 10547 10368 +3 10244 10369 10548 +3 10244 10548 10467 +3 10245 11117 11449 +3 10245 11449 10527 +3 10246 10528 11450 +3 10246 11450 11118 +3 10247 10475 10931 +3 10247 10931 10665 +3 10248 10666 10932 +3 10248 10932 10476 +3 10249 10331 10593 +3 10249 10593 10515 +3 10250 10516 10594 +3 10250 10594 10332 +3 10251 11372 11737 +3 10251 11737 10559 +3 10252 10560 11738 +3 10252 11738 11373 +3 10253 10420 11102 +3 10253 11102 10917 +3 10254 10918 11103 +3 10254 11103 10421 +3 10255 11391 11940 +3 10255 11940 10733 +3 10256 10734 11941 +3 10256 11941 11392 +3 10257 11051 11435 +3 10257 11435 10585 +3 10258 10586 11436 +3 10258 11436 11052 +3 10259 10434 11961 +3 10259 11961 11793 +3 10260 11794 11962 +3 10260 11962 10435 +3 10261 10619 12745 +3 10261 12745 12312 +3 10262 12313 12746 +3 10262 12746 10620 +3 10263 10569 10878 +3 10263 10878 10581 +3 10264 10582 10879 +3 10264 10879 10570 +3 10265 11275 12024 +3 10265 12024 10943 +3 10266 10944 12025 +3 10266 12025 11276 +3 10267 10460 10649 +3 10267 10649 10468 +3 10268 10469 10650 +3 10268 10650 10461 +3 10269 12255 12328 +3 10269 12328 10444 +3 10270 10445 12329 +3 10270 12329 12256 +3 10271 10414 10629 +3 10271 10629 10489 +3 10272 10490 10630 +3 10272 10630 10415 +3 10273 10852 11895 +3 10273 11895 11257 +3 10274 11258 11896 +3 10274 11896 10853 +3 10275 12074 12480 +3 10275 12480 10615 +3 10276 10616 12481 +3 10276 12481 12075 +3 10277 10749 10858 +3 10277 10858 10389 +3 10278 10390 10859 +3 10278 10859 10750 +3 10279 11015 12044 +3 10279 12044 11253 +3 10280 11254 12045 +3 10280 12045 11016 +3 10281 10627 11611 +3 10281 11611 11215 +3 10282 11216 11612 +3 10282 11612 10628 +3 10283 10523 10651 +3 10283 10651 10416 +3 10284 10417 10652 +3 10284 10652 10524 +3 10285 10941 12926 +3 10285 12926 12171 +3 10286 12172 12927 +3 10286 12927 10942 +3 10287 10705 12090 +3 10287 12090 11640 +3 10288 11641 12091 +3 10288 12091 10706 +3 10289 11812 12788 +3 10289 12788 11177 +3 10290 11178 12789 +3 10290 12789 11813 +3 10291 11843 13321 +3 10291 13321 11613 +3 10292 11614 13322 +3 10292 13322 11844 +3 10293 10884 11383 +3 10293 11383 10739 +3 10294 10740 11384 +3 10294 11384 10885 +3 10295 10957 11247 +3 10295 11247 10551 +3 10296 10552 11248 +3 10296 11248 10958 +3 10297 11043 11264 +3 10297 11264 10481 +3 10298 10482 11265 +3 10298 11265 11044 +3 10299 10563 11065 +3 10299 11065 10753 +3 10300 10754 11066 +3 10300 11066 10564 +3 10301 10673 11539 +3 10301 11539 11146 +3 10302 11147 11540 +3 10302 11540 10674 +3 10303 10763 11644 +3 10303 11644 11119 +3 10304 11120 11645 +3 10304 11645 10764 +3 10305 10438 11501 +3 10305 11501 11387 +3 10306 11388 11502 +3 10306 11502 10439 +3 10307 10337 10623 +3 10307 10602 10308 +3 10307 10623 10602 +3 10308 10602 10624 +3 10308 10624 10338 +3 10309 10919 12595 +3 10309 12595 11891 +3 10310 11892 12596 +3 10310 12596 10920 +3 10311 11293 11739 +3 10311 11739 10695 +3 10312 10696 11740 +3 10312 11740 11294 +3 10313 10537 11413 +3 10313 11413 11140 +3 10314 11141 11414 +3 10314 11414 10538 +3 10315 10493 10635 +3 10315 10635 10460 +3 10316 10461 10636 +3 10316 10636 10493 +3 10317 10607 11421 +3 10317 11421 11098 +3 10318 11099 11422 +3 10318 11422 10608 +3 10319 10759 11351 +3 10319 11351 10769 +3 10320 10770 11352 +3 10320 11352 10760 +3 10321 11349 11851 +3 10321 11851 10761 +3 10322 10762 11852 +3 10322 11852 11350 +3 10323 10565 11472 +3 10323 11472 11193 +3 10324 11194 11473 +3 10324 11473 10566 +3 10325 11223 13364 +3 10325 13364 12324 +3 10326 12325 13365 +3 10326 13365 11224 +3 10327 10655 11707 +3 10327 11707 11359 +3 10328 11360 11708 +3 10328 11708 10656 +3 10329 11191 11800 +3 10329 11800 10891 +3 10330 10892 11801 +3 10330 11801 11192 +3 10331 10468 10727 +3 10331 10727 10593 +3 10332 10594 10728 +3 10332 10728 10469 +3 10333 10818 12169 +3 10333 12169 11617 +3 10334 11618 12170 +3 10334 12170 10819 +3 10335 10665 11219 +3 10335 11219 10861 +3 10336 10862 11220 +3 10336 11220 10666 +3 10337 10436 10701 +3 10337 10701 10623 +3 10338 10624 10702 +3 10338 10702 10437 +3 10339 10725 11005 +3 10339 11005 10569 +3 10340 10570 11006 +3 10340 11006 10726 +3 10341 11399 11689 +3 10341 11689 10587 +3 10342 10588 11690 +3 10342 11690 11400 +3 10343 10743 11994 +3 10343 11994 11571 +3 10344 11572 11995 +3 10344 11995 10744 +3 10345 10503 11106 +3 10345 11106 10929 +3 10346 10930 11107 +3 10346 11107 10504 +3 10347 10661 11035 +3 10347 11035 10678 +3 10348 10679 11036 +3 10348 11036 10662 +3 10349 10741 10887 +3 10349 10887 10499 +3 10350 10500 10888 +3 10350 10888 10742 +3 10351 10812 11009 +3 10351 11009 10509 +3 10352 10510 11010 +3 10352 11010 10813 +3 10353 11271 12708 +3 10353 12708 11717 +3 10354 11718 12709 +3 10354 12709 11272 +3 10355 11409 12314 +3 10355 12314 11183 +3 10356 11184 12315 +3 10356 12315 11410 +3 10357 11063 11551 +3 10357 11551 10830 +3 10358 10831 11552 +3 10358 11552 11064 +3 10359 11419 12191 +3 10359 12191 11088 +3 10360 11089 12192 +3 10360 12192 11420 +3 10361 10567 11189 +3 10361 11189 10955 +3 10362 10956 11190 +3 10362 11190 10568 +3 10363 11335 11615 +3 10363 11615 10609 +3 10364 10610 11616 +3 10364 11616 11336 +3 10365 11417 12874 +3 10365 12874 12263 +3 10366 12264 12875 +3 10366 12875 11418 +3 10367 11012 11448 +3 10367 11448 11011 +3 10368 10547 10721 +3 10368 10721 10521 +3 10369 10522 10722 +3 10369 10722 10548 +3 10370 10911 11325 +3 10370 11325 10759 +3 10371 10760 11326 +3 10371 11326 10912 +3 10372 10591 11239 +3 10372 11239 10987 +3 10373 10988 11240 +3 10373 11240 10592 +3 10374 11621 12793 +3 10374 12793 11599 +3 10375 11600 12794 +3 10375 12794 11622 +3 10376 11457 12735 +3 10376 12735 10697 +3 10377 10698 12736 +3 10377 12736 11458 +3 10378 11679 13485 +3 10378 13485 12008 +3 10379 12009 13486 +3 10379 13486 11682 +3 10380 11150 11431 +3 10380 11431 10637 +3 10381 10638 11432 +3 10381 11432 11151 +3 10382 10739 11290 +3 10382 11290 10740 +3 10383 10581 11049 +3 10383 11049 10820 +3 10384 10821 11050 +3 10384 11050 10582 +3 10385 10863 11132 +3 10385 11132 10613 +3 10386 10614 11133 +3 10386 11133 10864 +3 10387 10808 12307 +3 10387 12307 11463 +3 10388 11464 12308 +3 10388 12308 10809 +3 10389 10858 11029 +3 10389 11029 10511 +3 10390 10512 11030 +3 10390 11030 10859 +3 10391 10729 11465 +3 10391 11465 11100 +3 10392 11101 11466 +3 10392 11466 10730 +3 10393 10755 11078 +3 10393 11078 10661 +3 10394 10662 11079 +3 10394 11079 10756 +3 10395 12124 12688 +3 10395 12688 10997 +3 10396 10998 12689 +3 10396 12689 12125 +3 10397 12134 12820 +3 10397 12820 11039 +3 10398 11040 12821 +3 10398 12821 12135 +3 10399 11311 11933 +3 10399 11933 11312 +3 10400 10589 11874 +3 10400 11874 11595 +3 10401 11596 11875 +3 10401 11875 10590 +3 10402 10977 11654 +3 10402 11654 11047 +3 10403 11048 11655 +3 10403 11655 10978 +3 10404 11347 11909 +3 10404 11909 10895 +3 10405 10896 11910 +3 10405 11910 11348 +3 10406 10769 11337 +3 10406 11337 10959 +3 10407 10960 11338 +3 10407 11338 10770 +3 10408 11041 11659 +3 10408 11659 10991 +3 10409 10992 11660 +3 10409 11660 11042 +3 10410 11031 11309 +3 10410 11309 10689 +3 10411 10690 11310 +3 10411 11310 11032 +3 10412 10905 12603 +3 10412 12603 12088 +3 10413 12089 12604 +3 10413 12604 10906 +3 10414 10579 10832 +3 10414 10832 10629 +3 10415 10630 10833 +3 10415 10833 10580 +3 10416 10651 10838 +3 10416 10838 10579 +3 10417 10580 10839 +3 10417 10839 10652 +3 10418 11027 12050 +3 10418 12050 11467 +3 10419 11468 12053 +3 10419 12053 11028 +3 10420 10621 11305 +3 10420 11305 11102 +3 10421 11103 11306 +3 10421 11306 10622 +3 10422 11288 13143 +3 10422 13143 12159 +3 10423 12160 13144 +3 10423 13144 11289 +3 10424 10991 11669 +3 10424 11669 10977 +3 10425 10978 11670 +3 10425 11670 10992 +3 10426 11227 12425 +3 10426 12425 11527 +3 10427 11528 12426 +3 10427 12426 11228 +3 10428 10489 10828 +3 10428 10719 10466 +3 10428 10828 10719 +3 10429 10467 10720 +3 10429 10720 10829 +3 10429 10829 10490 +3 10430 11936 13139 +3 10430 13139 11495 +3 10431 11496 13140 +3 10431 13140 11937 +3 10432 11121 11469 +3 10432 11469 10751 +3 10433 10752 11470 +3 10433 11470 11122 +3 10434 10979 12555 +3 10434 12555 11961 +3 10435 11962 12556 +3 10435 12556 10980 +3 10436 10521 10804 +3 10436 10804 10701 +3 10437 10702 10805 +3 10437 10805 10522 +3 10438 10603 11701 +3 10438 11701 11501 +3 10439 11502 11702 +3 10439 11702 10604 +3 10440 11599 12964 +3 10440 12964 11743 +3 10441 11744 12965 +3 10441 12965 11600 +3 10442 10737 11053 +3 10442 11053 10745 +3 10443 10746 11054 +3 10443 11054 10738 +3 10444 12328 13081 +3 10444 13081 11111 +3 10445 11112 13082 +3 10445 13082 12329 +3 10446 12072 12778 +3 10446 12778 11096 +3 10447 11097 12779 +3 10447 12779 12073 +3 10448 10903 12599 +3 10448 12599 12094 +3 10449 12095 12600 +3 10449 12600 10904 +3 10450 11011 11771 +3 10450 11771 11185 +3 10451 11186 11772 +3 10451 11772 11012 +3 10452 11581 12649 +3 10452 12649 11481 +3 10453 11482 12650 +3 10453 12650 11582 +3 10454 12181 12991 +3 10454 12991 11213 +3 10455 11214 12992 +3 10455 12992 12182 +3 10456 11481 12633 +3 10456 12633 11531 +3 10457 11532 12634 +3 10457 12634 11482 +3 10458 11825 13030 +3 10458 13030 11621 +3 10459 11622 13031 +3 10459 13031 11826 +3 10460 10635 10836 +3 10460 10836 10649 +3 10461 10650 10837 +3 10461 10837 10636 +3 10462 10777 12557 +3 10462 12557 12213 +3 10463 12214 12558 +3 10463 12558 10778 +3 10464 10969 11353 +3 10464 11353 10935 +3 10465 10936 11354 +3 10465 11354 10970 +3 10466 10719 10816 +3 10466 10816 10547 +3 10467 10548 10817 +3 10467 10817 10720 +3 10468 10649 10913 +3 10468 10913 10727 +3 10469 10728 10914 +3 10469 10914 10650 +3 10470 12070 12904 +3 10470 12904 12071 +3 10471 11407 11665 +3 10471 11665 10707 +3 10472 10708 11666 +3 10472 11666 11408 +3 10473 11221 13012 +3 10473 13012 12227 +3 10474 12228 13013 +3 10474 13013 11222 +3 10475 10814 11260 +3 10475 11260 10931 +3 10476 10932 11261 +3 10476 11261 10815 +3 10477 11833 12231 +3 10477 12231 10867 +3 10478 10868 12232 +3 10478 12232 11834 +3 10479 10824 12342 +3 10479 12342 11981 +3 10480 11982 12343 +3 10480 12343 10825 +3 10481 11264 11513 +3 10481 11513 10659 +3 10482 10660 11514 +3 10482 11514 11265 +3 10483 10525 11148 +3 10483 11125 10485 +3 10483 11148 11125 +3 10484 10486 11126 +3 10484 11126 11149 +3 10484 11149 10526 +3 10485 11125 11144 +3 10485 11144 10631 +3 10486 10632 11145 +3 10486 11145 11126 +3 10487 10515 10871 +3 10487 10871 10923 +3 10487 10923 10523 +3 10488 10524 10924 +3 10488 10872 10516 +3 10488 10924 10872 +3 10489 10629 10963 +3 10489 10963 10828 +3 10490 10829 10964 +3 10490 10964 10630 +3 10491 11233 11638 +3 10491 11638 10884 +3 10492 10885 11639 +3 10492 11639 11234 +3 10493 10636 10886 +3 10493 10886 10635 +3 10494 10497 11164 +3 10494 11164 11201 +3 10494 11201 10545 +3 10495 10546 11202 +3 10495 11165 10498 +3 10495 11202 11165 +3 10496 10745 11131 +3 10496 11131 10746 +3 10497 10667 11333 +3 10497 11333 11164 +3 10498 11165 11334 +3 10498 11334 10668 +3 10499 10887 11127 +3 10499 11127 10737 +3 10500 10738 11128 +3 10500 11128 10888 +3 10501 11266 13196 +3 10501 13196 12367 +3 10502 12368 13197 +3 10502 13197 11267 +3 10503 10753 11331 +3 10503 11331 11106 +3 10504 11107 11332 +3 10504 11332 10754 +3 10505 10757 11589 +3 10505 11589 11317 +3 10506 11318 11590 +3 10506 11590 10758 +3 10507 10945 12086 +3 10507 12086 11656 +3 10508 11657 12087 +3 10508 12087 10946 +3 10509 11009 11249 +3 10509 11249 10755 +3 10510 10756 11250 +3 10510 11250 11010 +3 10511 11029 11235 +3 10511 11235 10725 +3 10512 10726 11236 +3 10512 11236 11030 +3 10513 11905 12902 +3 10513 12902 11474 +3 10514 11475 12903 +3 10514 12903 11906 +3 10515 10593 10953 +3 10515 10953 10871 +3 10516 10872 10954 +3 10516 10954 10594 +3 10517 10939 11327 +3 10517 11327 10937 +3 10518 10938 11328 +3 10518 11328 10940 +3 10519 12187 12609 +3 10519 12609 10983 +3 10520 10984 12610 +3 10520 12610 12188 +3 10521 10721 10975 +3 10521 10975 10804 +3 10522 10805 10976 +3 10522 10976 10722 +3 10523 10923 11017 +3 10523 11017 10651 +3 10524 10652 11018 +3 10524 11018 10924 +3 10525 10644 11237 +3 10525 11237 11148 +3 10526 11149 11238 +3 10526 11238 10645 +3 10527 11449 11847 +3 10527 11847 10947 +3 10528 10948 11848 +3 10528 11848 11450 +3 10529 11531 12774 +3 10529 12774 11747 +3 10530 11748 12775 +3 10530 12775 11532 +3 10531 11868 12273 +3 10531 12273 10933 +3 10532 10934 12274 +3 10532 12274 11869 +3 10533 11061 13071 +3 10533 13071 12496 +3 10534 12497 13072 +3 10534 13072 11062 +3 10535 12261 13688 +3 10535 13688 11843 +3 10536 11844 13689 +3 10536 13689 12262 +3 10537 10893 11769 +3 10537 11769 11413 +3 10538 11414 11770 +3 10538 11770 10894 +3 10539 11055 13123 +3 10539 13123 12301 +3 10540 12302 13124 +3 10540 13124 11056 +3 10541 12641 13323 +3 10541 13323 11152 +3 10542 11153 13324 +3 10542 13324 12642 +3 10543 11245 12663 +3 10543 12663 11973 +3 10544 11974 12664 +3 10544 12664 11246 +3 10545 11201 11284 +3 10545 11284 10681 +3 10546 10682 11285 +3 10546 11285 11202 +3 10547 10816 10971 +3 10547 10971 10721 +3 10548 10722 10972 +3 10548 10972 10817 +3 10549 11927 12488 +3 10549 12488 11154 +3 10550 11155 12489 +3 10550 12489 11928 +3 10551 11247 11575 +3 10551 11575 10911 +3 10552 10912 11576 +3 10552 11576 11248 +3 10553 12615 13293 +3 10553 13293 11142 +3 10554 11143 13294 +3 10554 13294 12616 +3 10555 11108 12016 +3 10555 12016 11485 +3 10556 11486 12017 +3 10556 12017 11108 +3 10557 11084 11511 +3 10557 11511 10703 +3 10558 10704 11512 +3 10558 11512 11085 +3 10559 11737 12587 +3 10559 12587 11409 +3 10560 11410 12588 +3 10560 12588 11738 +3 10561 10793 11680 +3 10561 11680 11205 +3 10562 11206 11681 +3 10562 11681 10794 +3 10563 10935 11423 +3 10563 11423 11065 +3 10564 11066 11424 +3 10564 11424 10936 +3 10565 10785 11807 +3 10565 11807 11472 +3 10566 11473 11808 +3 10566 11808 10786 +3 10567 10861 11476 +3 10567 11476 11189 +3 10568 11190 11477 +3 10568 11477 10862 +3 10569 11005 11291 +3 10569 11291 10878 +3 10570 10879 11292 +3 10570 11292 11006 +3 10571 11355 11865 +3 10571 11865 11356 +3 10572 11866 13475 +3 10572 13475 12042 +3 10573 12043 13476 +3 10573 13476 11867 +3 10574 12183 12613 +3 10574 12613 11019 +3 10575 11020 12614 +3 10575 12614 12184 +3 10576 11849 12848 +3 10576 12848 11581 +3 10577 11582 12849 +3 10577 12849 11850 +3 10578 10612 11608 +3 10578 11607 10611 +3 10578 11608 11607 +3 10579 10838 11082 +3 10579 11082 10832 +3 10580 10833 11083 +3 10580 11083 10839 +3 10581 10878 11315 +3 10581 11315 11049 +3 10582 11050 11316 +3 10582 11316 10879 +3 10583 10584 11942 +3 10583 11942 11963 +3 10583 11963 10657 +3 10584 10658 11964 +3 10584 11964 11942 +3 10585 11435 11888 +3 10585 11888 11063 +3 10586 11064 11889 +3 10586 11889 11436 +3 10587 11689 12038 +3 10587 12038 10949 +3 10588 10950 12039 +3 10588 12039 11690 +3 10589 10901 12199 +3 10589 12199 11874 +3 10590 11875 12200 +3 10590 12200 10902 +3 10591 10937 11563 +3 10591 11563 11239 +3 10592 11240 11564 +3 10592 11564 10938 +3 10593 10727 11074 +3 10593 11074 10953 +3 10594 10954 11075 +3 10594 11075 10728 +3 10595 12145 13502 +3 10595 13502 11866 +3 10596 11867 13503 +3 10596 13503 12146 +3 10597 11743 13190 +3 10597 13190 12000 +3 10598 12001 13191 +3 10598 13191 11744 +3 10599 10940 11437 +3 10599 11437 10939 +3 10600 10880 12014 +3 10600 12014 12291 +3 10600 12291 10854 +3 10601 10855 12292 +3 10601 12015 10881 +3 10601 12292 12015 +3 10602 10623 11037 +3 10602 11037 11038 +3 10602 11038 10624 +3 10603 10865 12195 +3 10603 12195 11701 +3 10604 11702 12196 +3 10604 12196 10866 +3 10605 12147 12806 +3 10605 12806 11275 +3 10606 11276 12807 +3 10606 12807 12148 +3 10607 11047 11804 +3 10607 11804 11421 +3 10608 11422 11805 +3 10608 11805 11048 +3 10609 11615 11951 +3 10609 11951 10981 +3 10610 10982 11952 +3 10610 11952 11616 +3 10611 11607 11650 +3 10611 11650 10687 +3 10612 10688 11651 +3 10612 11651 11608 +3 10613 11132 11451 +3 10613 11451 10969 +3 10614 10970 11452 +3 10614 11452 11133 +3 10615 12480 12979 +3 10615 12979 11090 +3 10616 11091 12980 +3 10616 12980 12481 +3 10617 11403 13543 +3 10617 13543 12639 +3 10618 12640 13544 +3 10618 13544 11404 +3 10619 11109 13291 +3 10619 13291 12745 +3 10620 12746 13292 +3 10620 13292 11110 +3 10621 10959 11601 +3 10621 11601 11305 +3 10622 11306 11602 +3 10622 11602 10960 +3 10623 10701 11094 +3 10623 11094 11037 +3 10624 11038 11095 +3 10624 11095 10702 +3 10625 10626 11259 +3 10625 11259 11277 +3 10625 11277 10693 +3 10626 10694 11278 +3 10626 11278 11259 +3 10627 11119 12048 +3 10627 12048 11611 +3 10628 11612 12049 +3 10628 12049 11120 +3 10629 10832 11138 +3 10629 11138 10963 +3 10630 10964 11139 +3 10630 11139 10833 +3 10631 11144 11231 +3 10631 11231 10741 +3 10632 10742 11232 +3 10632 11232 11145 +3 10633 11515 12203 +3 10633 12203 11003 +3 10634 11004 12204 +3 10634 12204 11516 +3 10635 10886 11072 +3 10635 11072 10836 +3 10636 10837 11073 +3 10636 11073 10886 +3 10637 11431 11773 +3 10637 11773 11041 +3 10638 11042 11774 +3 10638 11774 11432 +3 10639 11816 12508 +3 10639 12508 11817 +3 10640 10699 11837 +3 10640 11809 10641 +3 10640 11837 11809 +3 10641 11809 11838 +3 10641 11838 10700 +3 10642 11270 12399 +3 10642 12399 11775 +3 10643 11776 12400 +3 10643 12400 11270 +3 10644 10820 11368 +3 10644 11368 11237 +3 10645 11238 11369 +3 10645 11369 10821 +3 10646 12096 12765 +3 10646 12765 11319 +3 10647 11320 12766 +3 10647 12766 12097 +3 10648 10684 12290 +3 10648 12289 10683 +3 10648 12290 12289 +3 10649 10836 11076 +3 10649 11076 10913 +3 10650 10914 11077 +3 10650 11077 10837 +3 10651 11017 11156 +3 10651 11156 10838 +3 10652 10839 11157 +3 10652 11157 11018 +3 10653 11733 13497 +3 10653 13497 12305 +3 10654 12306 13498 +3 10654 13498 11734 +3 10655 11080 12110 +3 10655 12110 11707 +3 10656 11708 12111 +3 10656 12111 11081 +3 10657 11963 12076 +3 10657 12076 10779 +3 10658 10780 12077 +3 10658 12077 11964 +3 10659 11513 11751 +3 10659 11751 10876 +3 10660 10877 11752 +3 10660 11752 11514 +3 10661 11078 11433 +3 10661 11433 11035 +3 10662 11036 11434 +3 10662 11434 11079 +3 10663 11301 13589 +3 10663 13589 12840 +3 10664 12841 13590 +3 10664 13590 11302 +3 10665 10931 11455 +3 10665 11455 11219 +3 10666 11220 11456 +3 10666 11456 10932 +3 10667 10789 11545 +3 10667 11545 11333 +3 10668 11334 11546 +3 10668 11546 10790 +3 10669 10713 12682 +3 10669 12648 10670 +3 10669 12682 12648 +3 10670 12648 12683 +3 10670 12683 10714 +3 10671 11459 13803 +3 10671 13803 12876 +3 10672 12877 13804 +3 10672 13804 11460 +3 10673 11185 12020 +3 10673 12020 11539 +3 10674 11540 12021 +3 10674 12021 11186 +3 10675 11257 12690 +3 10675 12690 12092 +3 10676 12093 12691 +3 10676 12691 11258 +3 10677 11197 12467 +3 10677 12467 11938 +3 10678 11035 11295 +3 10678 11295 10749 +3 10679 10750 11296 +3 10679 11296 11036 +3 10680 11939 12468 +3 10680 12468 11198 +3 10681 11284 11461 +3 10681 11461 10863 +3 10682 10864 11462 +3 10682 11462 11285 +3 10683 12289 12326 +3 10683 12326 10800 +3 10684 10801 12327 +3 10684 12327 12290 +3 10685 12189 12983 +3 10685 12983 11471 +3 10686 11471 12984 +3 10686 12984 12190 +3 10687 11650 11755 +3 10687 11755 10806 +3 10688 10807 11756 +3 10688 11756 11651 +3 10689 11309 11685 +3 10689 11685 11084 +3 10690 11085 11686 +3 10690 11686 11310 +3 10691 11463 13127 +3 10691 13127 12287 +3 10692 12288 13128 +3 10692 13128 11464 +3 10693 11277 11370 +3 10693 11370 10812 +3 10694 10813 11371 +3 10694 11371 11278 +3 10695 11739 12211 +3 10695 12211 11191 +3 10696 11192 12212 +3 10696 12212 11740 +3 10697 12735 13182 +3 10697 13182 11113 +3 10698 11114 13183 +3 10698 13183 12736 +3 10699 10796 11921 +3 10699 11921 11837 +3 10700 11838 11922 +3 10700 11922 10797 +3 10701 10804 11175 +3 10701 11175 11094 +3 10702 11095 11176 +3 10702 11176 10805 +3 10703 11511 11753 +3 10703 11753 10957 +3 10704 10958 11754 +3 10704 11754 11512 +3 10705 11279 12646 +3 10705 12646 12090 +3 10706 12091 12647 +3 10706 12647 11280 +3 10707 11665 11977 +3 10707 11977 11051 +3 10708 11052 11978 +3 10708 11978 11666 +3 10709 12209 13371 +3 10709 13371 11825 +3 10710 11826 13372 +3 10710 13372 12210 +3 10711 12551 13356 +3 10711 13356 11415 +3 10712 11416 13357 +3 10712 13357 12552 +3 10713 10899 12771 +3 10713 12771 12682 +3 10714 12683 12772 +3 10714 12772 10900 +3 10715 11567 12403 +3 10715 12403 11543 +3 10716 11544 12404 +3 10716 12404 11568 +3 10717 12042 13739 +3 10717 13739 12283 +3 10718 12284 13740 +3 10718 13740 12043 +3 10719 10828 11207 +3 10719 11129 10816 +3 10719 11207 11129 +3 10720 10817 11130 +3 10720 11130 11208 +3 10720 11208 10829 +3 10721 10971 11170 +3 10721 11170 10975 +3 10722 10976 11171 +3 10722 11171 10972 +3 10723 11557 12407 +3 10723 12407 11567 +3 10724 11568 12408 +3 10724 12408 11558 +3 10725 11235 11478 +3 10725 11478 11005 +3 10726 11006 11479 +3 10726 11479 11236 +3 10727 10913 11241 +3 10727 11241 11074 +3 10728 11075 11242 +3 10728 11242 10914 +3 10729 11205 11917 +3 10729 11917 11465 +3 10730 11466 11918 +3 10730 11918 11206 +3 10731 11642 13557 +3 10731 13557 12553 +3 10732 12554 13558 +3 10732 13558 11643 +3 10733 11940 12529 +3 10733 12529 11349 +3 10734 11350 12530 +3 10734 12530 11941 +3 10735 11341 12854 +3 10735 12854 12239 +3 10736 12240 12855 +3 10736 12855 11342 +3 10737 11127 11401 +3 10737 11401 11053 +3 10738 11054 11402 +3 10738 11402 11128 +3 10739 11383 11943 +3 10739 11943 11290 +3 10740 11290 11944 +3 10740 11944 11384 +3 10741 11231 11357 +3 10741 11357 10887 +3 10742 10888 11358 +3 10742 11358 11232 +3 10743 11527 12824 +3 10743 12824 11994 +3 10744 11995 12825 +3 10744 12825 11528 +3 10745 11053 11397 +3 10745 11397 11131 +3 10746 11131 11398 +3 10746 11398 11054 +3 10747 11123 12429 +3 10747 12429 12739 +3 10747 12739 11045 +3 10748 11046 12740 +3 10748 12430 11124 +3 10748 12740 12430 +3 10749 11295 11393 +3 10749 11393 10858 +3 10750 10859 11394 +3 10750 11394 11296 +3 10751 11469 11709 +3 10751 11709 11031 +3 10752 11032 11710 +3 10752 11710 11470 +3 10753 11065 11632 +3 10753 11632 11331 +3 10754 11332 11633 +3 10754 11633 11066 +3 10755 11249 11507 +3 10755 11507 11078 +3 10756 11079 11508 +3 10756 11508 11250 +3 10757 11100 11897 +3 10757 11897 11589 +3 10758 11590 11898 +3 10758 11898 11101 +3 10759 11325 11923 +3 10759 11923 11351 +3 10760 11352 11924 +3 10760 11924 11326 +3 10761 11851 12395 +3 10761 12395 11311 +3 10762 11312 12396 +3 10762 12396 11852 +3 10763 11359 12215 +3 10763 12215 11644 +3 10764 11645 12216 +3 10764 12216 11360 +3 10765 12743 13785 +3 10765 13785 11673 +3 10766 11674 13786 +3 10766 13786 12744 +3 10767 10967 11998 +3 10767 11795 10925 +3 10767 11998 11795 +3 10768 10926 11796 +3 10768 11796 11999 +3 10768 11999 10968 +3 10769 11351 11931 +3 10769 11931 11337 +3 10770 11338 11932 +3 10770 11932 11352 +3 10771 12008 14007 +3 10771 14007 12591 +3 10772 12592 14008 +3 10772 14008 12009 +3 10773 11747 13034 +3 10773 13034 12030 +3 10774 12031 13035 +3 10774 13035 11748 +3 10775 11731 12486 +3 10775 12486 11557 +3 10776 11558 12487 +3 10776 12487 11732 +3 10777 11179 12997 +3 10777 12997 12557 +3 10778 12558 12998 +3 10778 12998 11180 +3 10779 12076 12251 +3 10779 12251 10993 +3 10780 10994 12252 +3 10780 12252 12077 +3 10781 11597 12295 +3 10781 12295 11505 +3 10782 11506 12296 +3 10782 12296 11598 +3 10783 12371 13085 +3 10783 13085 11444 +3 10784 11445 13086 +3 10784 13086 12372 +3 10785 11146 12155 +3 10785 12155 11807 +3 10786 11808 12156 +3 10786 12156 11147 +3 10787 10856 11683 +3 10787 11658 10788 +3 10787 11683 11658 +3 10788 11658 11684 +3 10788 11684 10857 +3 10789 10987 11723 +3 10789 11723 11545 +3 10790 11546 11724 +3 10790 11724 10988 +3 10791 11509 12297 +3 10791 12297 11583 +3 10792 11584 12298 +3 10792 12298 11510 +3 10793 11098 11949 +3 10793 11949 11680 +3 10794 11681 11950 +3 10794 11950 11099 +3 10795 10826 10827 +3 10795 10827 10835 +3 10795 10834 10826 +3 10795 10835 10841 +3 10795 10840 10834 +3 10795 10841 10840 +3 10796 10965 12036 +3 10796 12036 11921 +3 10797 11922 12037 +3 10797 12037 10966 +3 10798 11543 12519 +3 10798 12519 11798 +3 10799 11799 12520 +3 10799 12520 11544 +3 10800 12326 12474 +3 10800 12474 11001 +3 10801 11002 12475 +3 10801 12475 12327 +3 10802 12659 13319 +3 10802 13319 11859 +3 10803 11860 13320 +3 10803 13320 12660 +3 10804 10975 11307 +3 10804 11307 11175 +3 10805 11176 11308 +3 10805 11308 10976 +3 10806 11755 11901 +3 10806 11901 11121 +3 10807 11122 11902 +3 10807 11902 11756 +3 10808 11717 13309 +3 10808 13309 12307 +3 10809 12308 13310 +3 10809 13310 11718 +3 10810 11505 12303 +3 10810 12303 11509 +3 10811 11510 12304 +3 10811 12304 11506 +3 10812 11370 11533 +3 10812 11533 11009 +3 10813 11010 11534 +3 10813 11534 11371 +3 10814 10929 11646 +3 10814 11646 11260 +3 10815 11261 11647 +3 10815 11647 10930 +3 10816 11129 11243 +3 10816 11243 10971 +3 10817 10972 11244 +3 10817 11244 11130 +3 10818 11168 12737 +3 10818 12737 12169 +3 10819 12170 12738 +3 10819 12738 11169 +3 10820 11049 11569 +3 10820 11569 11368 +3 10821 11369 11570 +3 10821 11570 11050 +3 10822 12433 13887 +3 10822 13887 12145 +3 10823 12146 13888 +3 10823 13888 12434 +3 10824 11225 12733 +3 10824 12733 12342 +3 10825 12343 12734 +3 10825 12734 11226 +3 10826 10834 10869 +3 10826 10860 10827 +3 10826 10869 10882 +3 10826 10882 10860 +3 10827 10860 10883 +3 10827 10870 10835 +3 10827 10883 10870 +3 10828 10963 11321 +3 10828 11321 11207 +3 10829 11208 11322 +3 10829 11322 10964 +3 10830 11551 12136 +3 10830 12136 11117 +3 10831 11118 12137 +3 10831 12137 11552 +3 10832 11082 11366 +3 10832 11366 11138 +3 10833 11139 11367 +3 10833 11367 11083 +3 10834 10840 10873 +3 10834 10873 10897 +3 10834 10897 10869 +3 10835 10870 10898 +3 10835 10874 10841 +3 10835 10898 10874 +3 10836 11072 11273 +3 10836 11273 11076 +3 10837 11077 11274 +3 10837 11274 11073 +3 10838 11156 11379 +3 10838 11379 11082 +3 10839 11083 11380 +3 10839 11380 11157 +3 10840 10841 10875 +3 10840 10875 10915 +3 10840 10915 10873 +3 10841 10874 10916 +3 10841 10916 10875 +3 10842 11876 12776 +3 10842 12776 11719 +3 10843 11720 12777 +3 10843 12777 11877 +3 10844 11735 12749 +3 10844 12749 11845 +3 10845 11846 12750 +3 10845 12750 11736 +3 10846 11195 13192 +3 10846 13192 11936 +3 10847 11937 13193 +3 10847 13193 11196 +3 10848 11719 12684 +3 10848 12684 11735 +3 10849 11736 12685 +3 10849 12685 11720 +3 10850 10917 11727 +3 10850 11727 11903 +3 10850 11903 11043 +3 10851 11044 11904 +3 10851 11728 10918 +3 10851 11904 11728 +3 10852 11571 12576 +3 10852 12576 11895 +3 10853 11896 12577 +3 10853 12577 11572 +3 10854 12291 12572 +3 10854 12572 11166 +3 10855 11167 12573 +3 10855 12573 12292 +3 10856 10955 11757 +3 10856 11757 11683 +3 10857 11684 11758 +3 10857 11758 10956 +3 10858 11393 11517 +3 10858 11517 11029 +3 10859 11030 11518 +3 10859 11518 11394 +3 10860 10882 10961 +3 10860 10961 10962 +3 10860 10962 10883 +3 10861 11219 11823 +3 10861 11823 11476 +3 10862 11477 11824 +3 10862 11824 11220 +3 10863 11461 11691 +3 10863 11691 11132 +3 10864 11133 11692 +3 10864 11692 11462 +3 10865 11215 12470 +3 10865 12470 12195 +3 10866 12196 12471 +3 10866 12471 11216 +3 10867 12231 12702 +3 10867 12702 11347 +3 10868 11348 12703 +3 10868 12703 12232 +3 10869 10897 11007 +3 10869 10989 10882 +3 10869 11007 10989 +3 10870 10883 10990 +3 10870 10990 11008 +3 10870 11008 10898 +3 10871 10953 11345 +3 10871 11345 11361 +3 10871 11361 10923 +3 10872 10924 11362 +3 10872 11346 10954 +3 10872 11362 11346 +3 10873 10915 11023 +3 10873 11013 10897 +3 10873 11023 11013 +3 10874 10898 11014 +3 10874 11014 11024 +3 10874 11024 10916 +3 10875 10916 11026 +3 10875 11025 10915 +3 10875 11026 11025 +3 10876 11751 12060 +3 10876 12060 11233 +3 10877 11234 12061 +3 10877 12061 11752 +3 10878 11291 11663 +3 10878 11663 11315 +3 10879 11316 11664 +3 10879 11664 11292 +3 10880 11253 12365 +3 10880 12365 12014 +3 10881 12015 12366 +3 10881 12366 11254 +3 10882 10989 11021 +3 10882 11021 10961 +3 10883 10962 11022 +3 10883 11022 10990 +3 10884 11638 12100 +3 10884 12100 11383 +3 10885 11384 12101 +3 10885 12101 11639 +3 10886 11073 11365 +3 10886 11365 11072 +3 10887 11357 11547 +3 10887 11547 11127 +3 10888 11128 11548 +3 10888 11548 11358 +3 10889 12116 13315 +3 10889 13315 12157 +3 10890 12158 13316 +3 10890 13316 12117 +3 10891 11800 12241 +3 10891 12241 11355 +3 10892 11356 12242 +3 10892 12242 11801 +3 10893 11583 12446 +3 10893 12446 11769 +3 10894 11770 12447 +3 10894 12447 11584 +3 10895 11909 12484 +3 10895 12484 11515 +3 10896 11516 12485 +3 10896 12485 11910 +3 10897 11013 11057 +3 10897 11057 11007 +3 10898 11008 11058 +3 10898 11058 11014 +3 10899 11591 13528 +3 10899 13528 12771 +3 10900 12772 13529 +3 10900 13529 11592 +3 10901 11281 12517 +3 10901 12517 12199 +3 10902 12200 12518 +3 10902 12518 11282 +3 10903 11523 13200 +3 10903 13200 12599 +3 10904 12600 13201 +3 10904 13201 11524 +3 10905 11577 13344 +3 10905 13344 12603 +3 10906 12604 13345 +3 10906 13345 11578 +3 10907 12593 13595 +3 10907 13595 11812 +3 10908 11813 13596 +3 10908 13596 12594 +3 10909 12279 13258 +3 10909 13258 11849 +3 10910 11850 13259 +3 10910 13259 12280 +3 10911 11575 11975 +3 10911 11975 11325 +3 10912 11326 11976 +3 10912 11976 11576 +3 10913 11076 11375 +3 10913 11375 11241 +3 10914 11242 11376 +3 10914 11376 11077 +3 10915 11025 11092 +3 10915 11092 11023 +3 10916 11024 11093 +3 10916 11093 11026 +3 10917 11102 11863 +3 10917 11863 11727 +3 10918 11728 11864 +3 10918 11864 11103 +3 10919 11687 13465 +3 10919 13465 12595 +3 10920 12596 13466 +3 10920 13466 11688 +3 10921 12000 13587 +3 10921 13587 12413 +3 10922 12414 13588 +3 10922 13588 12001 +3 10923 11361 11442 +3 10923 11442 11017 +3 10924 11018 11443 +3 10924 11443 11362 +3 10925 11795 11979 +3 10925 11979 11150 +3 10926 11151 11980 +3 10926 11980 11796 +3 10927 11140 12098 +3 10927 12098 12318 +3 10927 12318 11158 +3 10928 11159 12319 +3 10928 12099 11141 +3 10928 12319 12099 +3 10929 11106 11785 +3 10929 11785 11646 +3 10930 11647 11786 +3 10930 11786 11107 +3 10931 11260 11761 +3 10931 11761 11455 +3 10932 11456 11762 +3 10932 11762 11261 +3 10933 12273 12700 +3 10933 12700 11391 +3 10934 11392 12701 +3 10934 12701 12274 +3 10935 11353 11829 +3 10935 11829 11423 +3 10936 11424 11830 +3 10936 11830 11354 +3 10937 11327 11947 +3 10937 11947 11563 +3 10938 11564 11948 +3 10938 11948 11328 +3 10939 11437 11802 +3 10939 11802 11327 +3 10940 11328 11803 +3 10940 11803 11437 +3 10941 11741 13809 +3 10941 13809 12926 +3 10942 12927 13810 +3 10942 13810 11742 +3 10943 12024 12842 +3 10943 12842 11395 +3 10944 11396 12843 +3 10944 12843 12025 +3 10945 11467 12582 +3 10945 12582 12086 +3 10946 12087 12583 +3 10946 12583 11468 +3 10947 11847 12498 +3 10947 12498 11597 +3 10948 11598 12499 +3 10948 12499 11848 +3 10949 12038 12397 +3 10949 12397 11293 +3 10950 11294 12398 +3 10950 12398 12039 +3 10951 10986 12081 +3 10951 12080 10985 +3 10951 12081 12080 +3 10952 12501 13366 +3 10952 13366 12500 +3 10953 11074 11453 +3 10953 11453 11345 +3 10954 11346 11454 +3 10954 11454 11075 +3 10955 11189 11861 +3 10955 11861 11757 +3 10956 11758 11862 +3 10956 11862 11190 +3 10957 11753 12002 +3 10957 12002 11247 +3 10958 11248 12003 +3 10958 12003 11754 +3 10959 11337 11967 +3 10959 11967 11601 +3 10960 11602 11968 +3 10960 11968 11338 +3 10961 11021 11104 +3 10961 11067 10962 +3 10961 11104 11067 +3 10962 11067 11105 +3 10962 11105 11022 +3 10963 11138 11489 +3 10963 11489 11321 +3 10964 11322 11490 +3 10964 11490 11139 +3 10965 11317 12225 +3 10965 12225 12036 +3 10966 12037 12226 +3 10966 12226 11318 +3 10967 11193 12220 +3 10967 12220 11998 +3 10968 11999 12221 +3 10968 12221 11194 +3 10969 11451 11839 +3 10969 11839 11353 +3 10970 11354 11840 +3 10970 11840 11452 +3 10971 11243 11425 +3 10971 11425 11170 +3 10972 11171 11426 +3 10972 11426 11244 +3 10973 12243 13491 +3 10973 13491 12116 +3 10974 12117 13492 +3 10974 13492 12244 +3 10975 11170 11499 +3 10975 11499 11307 +3 10976 11308 11500 +3 10976 11500 11171 +3 10977 11669 12334 +3 10977 12334 11654 +3 10978 11655 12335 +3 10978 12335 11670 +3 10979 11626 13301 +3 10979 13301 12555 +3 10980 12556 13302 +3 10980 13302 11627 +3 10981 11951 12710 +3 10981 12710 11731 +3 10982 11732 12711 +3 10982 12711 11952 +3 10983 12609 13166 +3 10983 13166 11493 +3 10984 11494 13167 +3 10984 13167 12610 +3 10985 12080 12161 +3 10985 12161 11068 +3 10986 11069 12162 +3 10986 12162 12081 +3 10987 11239 11945 +3 10987 11945 11723 +3 10988 11724 11946 +3 10988 11946 11240 +3 10989 11007 11134 +3 10989 11134 11136 +3 10989 11136 11021 +3 10990 11022 11137 +3 10990 11135 11008 +3 10990 11137 11135 +3 10991 11659 12344 +3 10991 12344 11669 +3 10992 11670 12345 +3 10992 12345 11660 +3 10993 12251 12759 +3 10993 12759 11483 +3 10994 11484 12760 +3 10994 12760 12252 +3 10995 12312 13700 +3 10995 13700 12261 +3 10996 12262 13701 +3 10996 13701 12313 +3 10997 12688 13506 +3 10997 13506 11729 +3 10998 11730 13507 +3 10998 13507 12689 +3 10999 12157 13549 +3 10999 13549 12330 +3 11000 12331 13552 +3 11000 13552 12158 +3 11001 12474 13129 +3 11001 13129 11541 +3 11002 11542 13130 +3 11002 13130 12475 +3 11003 12203 12597 +3 11003 12597 11419 +3 11004 11420 12598 +3 11004 12598 12204 +3 11005 11478 11783 +3 11005 11783 11291 +3 11006 11292 11784 +3 11006 11784 11479 +3 11007 11057 11172 +3 11007 11172 11134 +3 11008 11135 11173 +3 11008 11173 11058 +3 11009 11533 11789 +3 11009 11789 11249 +3 11010 11250 11790 +3 11010 11790 11534 +3 11011 11448 12201 +3 11011 12201 11771 +3 11012 11772 12202 +3 11012 12202 11448 +3 11013 11023 11162 +3 11013 11162 11187 +3 11013 11187 11057 +3 11014 11058 11188 +3 11014 11163 11024 +3 11014 11188 11163 +3 11015 11845 12942 +3 11015 12942 12044 +3 11016 12045 12943 +3 11016 12943 11846 +3 11017 11442 11561 +3 11017 11561 11156 +3 11018 11157 11562 +3 11018 11562 11443 +3 11019 12613 13158 +3 11019 13158 11491 +3 11020 11492 13159 +3 11020 13159 12614 +3 11021 11136 11181 +3 11021 11181 11104 +3 11022 11105 11182 +3 11022 11182 11137 +3 11023 11092 11203 +3 11023 11203 11162 +3 11024 11163 11204 +3 11024 11204 11093 +3 11025 11026 11174 +3 11025 11174 11209 +3 11025 11209 11092 +3 11026 11093 11210 +3 11026 11210 11174 +3 11027 11485 12494 +3 11027 12494 12050 +3 11028 12053 12495 +3 11028 12495 11486 +3 11029 11517 11705 +3 11029 11705 11235 +3 11030 11236 11706 +3 11030 11706 11518 +3 11031 11709 12010 +3 11031 12010 11309 +3 11032 11310 12011 +3 11032 12011 11710 +3 11033 12283 14107 +3 11033 14107 12653 +3 11034 12654 14108 +3 11034 14108 12284 +3 11035 11433 11677 +3 11035 11677 11295 +3 11036 11296 11678 +3 11036 11678 11434 +3 11037 11094 11497 +3 11037 11480 11038 +3 11037 11497 11480 +3 11038 11480 11498 +3 11038 11498 11095 +3 11039 12820 13670 +3 11039 13670 11781 +3 11040 11782 13671 +3 11040 13671 12821 +3 11041 11773 12393 +3 11041 12393 11659 +3 11042 11660 12394 +3 11042 12394 11774 +3 11043 11903 12112 +3 11043 12112 11264 +3 11044 11265 12113 +3 11044 12113 11904 +3 11045 12739 13131 +3 11045 13131 11377 +3 11046 11378 13132 +3 11046 13132 12740 +3 11047 11654 12405 +3 11047 12405 11804 +3 11048 11805 12406 +3 11048 12406 11655 +3 11049 11315 11831 +3 11049 11831 11569 +3 11050 11570 11832 +3 11050 11832 11316 +3 11051 11977 12350 +3 11051 12350 11435 +3 11052 11436 12351 +3 11052 12351 11978 +3 11053 11401 11745 +3 11053 11745 11397 +3 11054 11398 11746 +3 11054 11746 11402 +3 11055 11636 13757 +3 11055 13757 13123 +3 11056 13124 13758 +3 11056 13758 11637 +3 11057 11187 11262 +3 11057 11262 11172 +3 11058 11173 11263 +3 11058 11263 11188 +3 11059 12084 13250 +3 11059 13250 12179 +3 11060 12180 13251 +3 11060 13251 12085 +3 11061 11628 13725 +3 11061 13725 13071 +3 11062 13072 13726 +3 11062 13726 11629 +3 11063 11888 12385 +3 11063 12385 11551 +3 11064 11552 12386 +3 11064 12386 11889 +3 11065 11423 11965 +3 11065 11965 11632 +3 11066 11633 11966 +3 11066 11966 11424 +3 11067 11104 11217 +3 11067 11217 11218 +3 11067 11218 11105 +3 11068 12161 12269 +3 11068 12269 11211 +3 11069 11212 12270 +3 11069 12270 12162 +3 11070 12163 13220 +3 11070 13220 12084 +3 11071 12085 13221 +3 11071 13221 12164 +3 11072 11365 11535 +3 11072 11535 11273 +3 11073 11274 11536 +3 11073 11536 11365 +3 11074 11241 11609 +3 11074 11609 11453 +3 11075 11454 11610 +3 11075 11610 11242 +3 11076 11273 11549 +3 11076 11549 11375 +3 11077 11376 11550 +3 11077 11550 11274 +3 11078 11507 11870 +3 11078 11870 11433 +3 11079 11434 11871 +3 11079 11871 11508 +3 11080 11798 12830 +3 11080 12830 12110 +3 11081 12111 12831 +3 11081 12831 11799 +3 11082 11379 11630 +3 11082 11630 11366 +3 11083 11367 11631 +3 11083 11631 11380 +3 11084 11685 12141 +3 11084 12141 11511 +3 11085 11512 12142 +3 11085 12142 11686 +3 11086 12472 13891 +3 11086 13891 12320 +3 11087 12321 13892 +3 11087 13892 12473 +3 11088 12191 13026 +3 11088 13026 11876 +3 11089 11877 13027 +3 11089 13027 12192 +3 11090 12979 13559 +3 11090 13559 11579 +3 11091 11580 13560 +3 11091 13560 12980 +3 11092 11209 11286 +3 11092 11286 11203 +3 11093 11204 11287 +3 11093 11287 11210 +3 11094 11175 11603 +3 11094 11603 11497 +3 11095 11498 11604 +3 11095 11604 11176 +3 11096 12778 13581 +3 11096 13581 11565 +3 11097 11566 13582 +3 11097 13582 12779 +3 11098 11421 12281 +3 11098 12281 11949 +3 11099 11950 12282 +3 11099 12282 11422 +3 11100 11465 12249 +3 11100 12249 11897 +3 11101 11898 12250 +3 11101 12250 11466 +3 11102 11305 12066 +3 11102 12066 11863 +3 11103 11864 12067 +3 11103 12067 11306 +3 11104 11181 11268 +3 11104 11268 11217 +3 11105 11218 11269 +3 11105 11269 11182 +3 11106 11331 11990 +3 11106 11990 11785 +3 11107 11786 11991 +3 11107 11991 11332 +3 11108 12017 12567 +3 11108 12567 12016 +3 11109 11634 13871 +3 11109 13871 13291 +3 11110 13292 13872 +3 11110 13872 11635 +3 11111 13081 13934 +3 11111 13934 11855 +3 11112 11856 13935 +3 11112 13935 13082 +3 11113 13182 13712 +3 11113 13712 11555 +3 11114 11556 13713 +3 11114 13713 13183 +3 11115 12320 13915 +3 11115 13915 12546 +3 11116 12549 13916 +3 11116 13916 12321 +3 11117 12136 12437 +3 11117 12437 11449 +3 11118 11450 12438 +3 11118 12438 12137 +3 11119 11644 12542 +3 11119 12542 12048 +3 11120 12049 12543 +3 11120 12543 11645 +3 11121 11901 12237 +3 11121 12237 11469 +3 11122 11470 12238 +3 11122 12238 11902 +3 11123 12030 13459 +3 11123 13459 12429 +3 11124 12430 13460 +3 11124 13460 12031 +3 11125 11148 11695 +3 11125 11695 11699 +3 11125 11699 11144 +3 11126 11145 11700 +3 11126 11696 11149 +3 11126 11700 11696 +3 11127 11547 11814 +3 11127 11814 11401 +3 11128 11402 11815 +3 11128 11815 11548 +3 11129 11207 11648 +3 11129 11559 11243 +3 11129 11648 11559 +3 11130 11244 11560 +3 11130 11560 11649 +3 11130 11649 11208 +3 11131 11397 11818 +3 11131 11818 11398 +3 11132 11691 11992 +3 11132 11992 11451 +3 11133 11452 11993 +3 11133 11993 11692 +3 11134 11172 11323 +3 11134 11299 11136 +3 11134 11323 11299 +3 11135 11137 11300 +3 11135 11300 11324 +3 11135 11324 11173 +3 11136 11299 11339 +3 11136 11339 11181 +3 11137 11182 11340 +3 11137 11340 11300 +3 11138 11366 11703 +3 11138 11703 11489 +3 11139 11490 11704 +3 11139 11704 11367 +3 11140 11413 12361 +3 11140 12361 12098 +3 11141 12099 12362 +3 11141 12362 11414 +3 11142 13293 13999 +3 11142 13999 11779 +3 11143 11780 14000 +3 11143 14000 13294 +3 11144 11699 11878 +3 11144 11878 11231 +3 11145 11232 11879 +3 11145 11879 11700 +3 11146 11539 12506 +3 11146 12506 12155 +3 11147 12156 12507 +3 11147 12507 11540 +3 11148 11237 11777 +3 11148 11777 11695 +3 11149 11696 11778 +3 11149 11778 11238 +3 11150 11979 12233 +3 11150 12233 11431 +3 11151 11432 12234 +3 11151 12234 11980 +3 11152 13323 14227 +3 11152 14227 11919 +3 11153 11920 14228 +3 11153 14228 13324 +3 11154 12488 13212 +3 11154 13212 11816 +3 11155 11817 13213 +3 11155 13213 12489 +3 11156 11561 11759 +3 11156 11759 11379 +3 11157 11380 11760 +3 11157 11760 11562 +3 11158 12318 12580 +3 11158 12580 11399 +3 11159 11400 12581 +3 11159 12581 12319 +3 11160 12492 13698 +3 11160 13698 12243 +3 11161 12244 13699 +3 11161 13699 12493 +3 11162 11203 11343 +3 11162 11329 11187 +3 11162 11343 11329 +3 11163 11188 11330 +3 11163 11330 11344 +3 11163 11344 11204 +3 11164 11333 12068 +3 11164 11913 11201 +3 11164 12068 11913 +3 11165 11202 11914 +3 11165 11914 12069 +3 11165 12069 11334 +3 11166 12572 12952 +3 11166 12952 11487 +3 11167 11488 12953 +3 11167 12953 12573 +3 11168 11605 13194 +3 11168 13194 12737 +3 11169 12738 13195 +3 11169 13195 11606 +3 11170 11425 11765 +3 11170 11765 11499 +3 11171 11500 11766 +3 11171 11766 11426 +3 11172 11262 11389 +3 11172 11389 11323 +3 11173 11324 11390 +3 11173 11390 11263 +3 11174 11210 11382 +3 11174 11381 11209 +3 11174 11382 11381 +3 11175 11307 11721 +3 11175 11721 11603 +3 11176 11604 11722 +3 11176 11722 11308 +3 11177 12788 13919 +3 11177 13919 12209 +3 11178 12210 13920 +3 11178 13920 12789 +3 11179 11624 13504 +3 11179 13504 12997 +3 11180 12998 13505 +3 11180 13505 11625 +3 11181 11339 11427 +3 11181 11427 11268 +3 11182 11269 11428 +3 11182 11428 11340 +3 11183 12314 13360 +3 11183 13360 12163 +3 11184 12164 13361 +3 11184 13361 12315 +3 11185 11771 12570 +3 11185 12570 12020 +3 11186 12021 12571 +3 11186 12571 11772 +3 11187 11329 11385 +3 11187 11385 11262 +3 11188 11263 11386 +3 11188 11386 11330 +3 11189 11476 12165 +3 11189 12165 11861 +3 11190 11862 12166 +3 11190 12166 11477 +3 11191 12211 12769 +3 11191 12769 11800 +3 11192 11801 12770 +3 11192 12770 12212 +3 11193 11472 12476 +3 11193 12476 12220 +3 11194 12221 12477 +3 11194 12477 11473 +3 11195 11593 13623 +3 11195 13623 13192 +3 11196 13193 13624 +3 11196 13624 11594 +3 11197 11775 13073 +3 11197 13073 12467 +3 11198 12468 13074 +3 11198 13074 11776 +3 11199 11200 13153 +3 11199 13153 13178 +3 11199 13178 11255 +3 11200 11256 13179 +3 11200 13179 13153 +3 11201 11913 11969 +3 11201 11969 11284 +3 11202 11285 11970 +3 11202 11970 11914 +3 11203 11286 11411 +3 11203 11411 11343 +3 11204 11344 11412 +3 11204 11412 11287 +3 11205 11680 12381 +3 11205 12381 11917 +3 11206 11918 12382 +3 11206 12382 11681 +3 11207 11321 11763 +3 11207 11763 11648 +3 11208 11649 11764 +3 11208 11764 11322 +3 11209 11381 11446 +3 11209 11446 11286 +3 11210 11287 11447 +3 11210 11447 11382 +3 11211 12269 12435 +3 11211 12435 11407 +3 11212 11408 12436 +3 11212 12436 12270 +3 11213 12991 13951 +3 11213 13951 12070 +3 11214 12071 13952 +3 11214 13952 12992 +3 11215 11611 12886 +3 11215 12886 12470 +3 11216 12471 12887 +3 11216 12887 11612 +3 11217 11268 11405 +3 11217 11374 11218 +3 11217 11405 11374 +3 11218 11374 11406 +3 11218 11406 11269 +3 11219 11455 12056 +3 11219 12056 11823 +3 11220 11824 12057 +3 11220 12057 11456 +3 11221 11891 13793 +3 11221 13793 13012 +3 11222 13013 13794 +3 11222 13794 11892 +3 11223 12263 14508 +3 11223 14508 13364 +3 11224 13365 14509 +3 11224 14509 12264 +3 11225 11640 13202 +3 11225 13202 12733 +3 11226 12734 13203 +3 11226 13203 11641 +3 11227 12179 13447 +3 11227 13447 12425 +3 11228 12426 13448 +3 11228 13448 12180 +3 11229 12712 14165 +3 11229 14165 12472 +3 11230 12473 14166 +3 11230 14166 12713 +3 11231 11878 11987 +3 11231 11987 11357 +3 11232 11358 11988 +3 11232 11988 11879 +3 11233 12060 12441 +3 11233 12441 11638 +3 11234 11639 12442 +3 11234 12442 12061 +3 11235 11705 11957 +3 11235 11957 11478 +3 11236 11479 11958 +3 11236 11958 11706 +3 11237 11368 11886 +3 11237 11886 11777 +3 11238 11778 11887 +3 11238 11887 11369 +3 11239 11563 12259 +3 11239 12259 11945 +3 11240 11946 12260 +3 11240 12260 11564 +3 11241 11375 11713 +3 11241 11713 11609 +3 11242 11610 11714 +3 11242 11714 11376 +3 11243 11559 11711 +3 11243 11711 11425 +3 11244 11426 11712 +3 11244 11712 11560 +3 11245 11989 13508 +3 11245 13508 12663 +3 11246 12664 13509 +3 11246 13509 11989 +3 11247 12002 12310 +3 11247 12310 11575 +3 11248 11576 12311 +3 11248 12311 12003 +3 11249 11789 12046 +3 11249 12046 11507 +3 11250 11508 12047 +3 11250 12047 11790 +3 11251 13020 14401 +3 11251 14401 12433 +3 11252 12434 14402 +3 11252 14402 13021 +3 11253 12044 13224 +3 11253 13224 12365 +3 11254 12366 13225 +3 11254 13225 12045 +3 11255 13178 13262 +3 11255 13262 11438 +3 11256 11439 13263 +3 11256 13263 13179 +3 11257 11895 13389 +3 11257 13389 12690 +3 11258 12691 13390 +3 11258 13390 11896 +3 11259 11278 11986 +3 11259 11985 11277 +3 11259 11986 11985 +3 11260 11646 12104 +3 11260 12104 11761 +3 11261 11762 12105 +3 11261 12105 11647 +3 11262 11385 11503 +3 11262 11503 11389 +3 11263 11390 11504 +3 11263 11504 11386 +3 11264 12112 12383 +3 11264 12383 11513 +3 11265 11514 12384 +3 11265 12384 12113 +3 11266 12159 14221 +3 11266 14221 13196 +3 11267 13197 14222 +3 11267 14222 12160 +3 11268 11427 11525 +3 11268 11525 11405 +3 11269 11406 11526 +3 11269 11526 11428 +3 11270 12400 13114 +3 11270 13114 12399 +3 11271 12330 13849 +3 11271 13849 12708 +3 11272 12709 13850 +3 11272 13850 12331 +3 11273 11535 11810 +3 11273 11810 11549 +3 11274 11550 11811 +3 11274 11811 11536 +3 11275 12806 13650 +3 11275 13650 12024 +3 11276 12025 13651 +3 11276 13651 12807 +3 11277 11985 12040 +3 11277 12040 11370 +3 11278 11371 12041 +3 11278 12041 11986 +3 11279 11938 13352 +3 11279 13352 12646 +3 11280 12647 13353 +3 11280 13353 11939 +3 11281 11656 12930 +3 11281 12930 12517 +3 11282 12518 12931 +3 11282 12931 11657 +3 11283 11297 12844 +3 11283 12844 12845 +3 11283 12845 11298 +3 11284 11969 12143 +3 11284 12143 11461 +3 11285 11462 12144 +3 11285 12144 11970 +3 11286 11446 11519 +3 11286 11519 11411 +3 11287 11412 11520 +3 11287 11520 11447 +3 11288 12305 13755 +3 11288 13755 13143 +3 11289 13144 13756 +3 11289 13756 12306 +3 11290 11943 12358 +3 11290 12358 11944 +3 11291 11783 12122 +3 11291 12122 11663 +3 11292 11664 12123 +3 11292 12123 11784 +3 11293 12397 12797 +3 11293 12797 11739 +3 11294 11740 12798 +3 11294 12798 12398 +3 11295 11677 11996 +3 11295 11996 11393 +3 11296 11394 11997 +3 11296 11997 11678 +3 11297 11440 12892 +3 11297 12892 12844 +3 11298 12845 12893 +3 11298 12893 11441 +3 11299 11323 11529 +3 11299 11529 11537 +3 11299 11537 11339 +3 11300 11340 11538 +3 11300 11530 11324 +3 11300 11538 11530 +3 11301 12171 14407 +3 11301 14407 13589 +3 11302 13590 14408 +3 11302 14408 12172 +3 11303 12546 14299 +3 11303 14299 12878 +3 11304 12879 14300 +3 11304 14300 12549 +3 11305 11601 12322 +3 11305 12322 12066 +3 11306 12067 12323 +3 11306 12323 11602 +3 11307 11499 11911 +3 11307 11911 11721 +3 11308 11722 11912 +3 11308 11912 11500 +3 11309 12010 12373 +3 11309 12373 11685 +3 11310 11686 12374 +3 11310 12374 12011 +3 11311 12395 12999 +3 11311 12999 11933 +3 11312 11933 13000 +3 11312 13000 12396 +3 11313 11387 12611 +3 11313 12586 11314 +3 11313 12611 12586 +3 11314 12586 12612 +3 11314 12612 11388 +3 11315 11663 12153 +3 11315 12153 11831 +3 11316 11832 12154 +3 11316 12154 11664 +3 11317 11589 12448 +3 11317 12448 12225 +3 11318 12226 12449 +3 11318 12449 11590 +3 11319 12765 13406 +3 11319 13406 11927 +3 11320 11928 13407 +3 11320 13407 12766 +3 11321 11489 11915 +3 11321 11915 11763 +3 11322 11764 11916 +3 11322 11916 11490 +3 11323 11389 11585 +3 11323 11585 11529 +3 11324 11530 11586 +3 11324 11586 11390 +3 11325 11975 12513 +3 11325 12513 11923 +3 11326 11924 12514 +3 11326 12514 11976 +3 11327 11802 12401 +3 11327 12401 11947 +3 11328 11948 12402 +3 11328 12402 11803 +3 11329 11343 11521 +3 11329 11521 11553 +3 11329 11553 11385 +3 11330 11386 11554 +3 11330 11522 11344 +3 11330 11554 11522 +3 11331 11632 12271 +3 11331 12271 11990 +3 11332 11991 12272 +3 11332 12272 11633 +3 11333 11545 12285 +3 11333 12285 12068 +3 11334 12069 12286 +3 11334 12286 11546 +3 11335 11595 12954 +3 11335 12674 11615 +3 11335 12954 12674 +3 11336 11616 12675 +3 11336 12675 12955 +3 11336 12955 11596 +3 11337 11931 12521 +3 11337 12521 11967 +3 11338 11968 12522 +3 11338 12522 11932 +3 11339 11537 11619 +3 11339 11619 11427 +3 11340 11428 11620 +3 11340 11620 11538 +3 11341 11973 13585 +3 11341 13585 12854 +3 11342 12855 13586 +3 11342 13586 11974 +3 11343 11411 11573 +3 11343 11573 11521 +3 11344 11522 11574 +3 11344 11574 11412 +3 11345 11453 11884 +3 11345 11882 11361 +3 11345 11884 11882 +3 11346 11362 11883 +3 11346 11883 11885 +3 11346 11885 11454 +3 11347 12702 13328 +3 11347 13328 11909 +3 11348 11910 13329 +3 11348 13329 12703 +3 11349 12529 13112 +3 11349 13112 11851 +3 11350 11852 13113 +3 11350 13113 12530 +3 11351 11923 12537 +3 11351 12537 11931 +3 11352 11932 12538 +3 11352 12538 11924 +3 11353 11839 12379 +3 11353 12379 11829 +3 11354 11830 12380 +3 11354 12380 11840 +3 11355 12241 12731 +3 11355 12731 11865 +3 11356 11865 12732 +3 11356 12732 12242 +3 11357 11987 12173 +3 11357 12173 11547 +3 11358 11548 12174 +3 11358 12174 11988 +3 11359 11707 12858 +3 11359 12858 12215 +3 11360 12216 12859 +3 11360 12859 11708 +3 11361 11882 11934 +3 11361 11934 11442 +3 11362 11443 11935 +3 11362 11935 11883 +3 11363 12413 13660 +3 11363 13660 11693 +3 11364 11694 13661 +3 11364 13661 12414 +3 11365 11536 11890 +3 11365 11890 11535 +3 11366 11630 11959 +3 11366 11959 11703 +3 11367 11704 11960 +3 11367 11960 11631 +3 11368 11569 12054 +3 11368 12054 11886 +3 11369 11887 12055 +3 11369 12055 11570 +3 11370 12040 12149 +3 11370 12149 11533 +3 11371 11534 12150 +3 11371 12150 12041 +3 11372 11661 13330 +3 11372 13003 11737 +3 11372 13330 13003 +3 11373 11738 13004 +3 11373 13004 13331 +3 11373 13331 11662 +3 11374 11405 11587 +3 11374 11587 11588 +3 11374 11588 11406 +3 11375 11549 11893 +3 11375 11893 11713 +3 11376 11714 11894 +3 11376 11894 11550 +3 11377 13131 13547 +3 11377 13547 11767 +3 11378 11768 13548 +3 11378 13548 13132 +3 11379 11759 11971 +3 11379 11971 11630 +3 11380 11631 11972 +3 11380 11972 11760 +3 11381 11382 11623 +3 11381 11623 11652 +3 11381 11652 11446 +3 11382 11447 11653 +3 11382 11653 11623 +3 11383 12100 12631 +3 11383 12631 11943 +3 11384 11944 12632 +3 11384 12632 12101 +3 11385 11553 11671 +3 11385 11671 11503 +3 11386 11504 11672 +3 11386 11672 11554 +3 11387 11501 12729 +3 11387 12729 12611 +3 11388 12612 12730 +3 11388 12730 11502 +3 11389 11503 11675 +3 11389 11675 11585 +3 11390 11586 11676 +3 11390 11676 11504 +3 11391 12700 13299 +3 11391 13299 11940 +3 11392 11941 13300 +3 11392 13300 12701 +3 11393 11996 12114 +3 11393 12114 11517 +3 11394 11518 12115 +3 11394 12115 11997 +3 11395 12842 13821 +3 11395 13821 12279 +3 11396 12280 13822 +3 11396 13822 12843 +3 11397 11745 12139 +3 11397 12139 11818 +3 11398 11818 12140 +3 11398 12140 11746 +3 11399 12580 12900 +3 11399 12900 11689 +3 11400 11690 12901 +3 11400 12901 12581 +3 11401 11814 12128 +3 11401 12128 11745 +3 11402 11746 12129 +3 11402 12129 11815 +3 11403 12235 14488 +3 11403 14488 13543 +3 11404 13544 14489 +3 11404 14489 12236 +3 11405 11525 11697 +3 11405 11697 11587 +3 11406 11588 11698 +3 11406 11698 11526 +3 11407 12435 12896 +3 11407 12896 11665 +3 11408 11666 12897 +3 11408 12897 12436 +3 11409 12587 13605 +3 11409 13605 12314 +3 11410 12315 13606 +3 11410 13606 12588 +3 11411 11519 11667 +3 11411 11667 11573 +3 11412 11574 11668 +3 11412 11668 11520 +3 11413 11769 12651 +3 11413 12651 12361 +3 11414 12362 12652 +3 11414 12652 11770 +3 11415 13356 14231 +3 11415 14231 12181 +3 11416 12182 14232 +3 11416 14232 13357 +3 11417 12591 14239 +3 11417 14239 12874 +3 11418 12875 14240 +3 11418 14240 12592 +3 11419 12597 13469 +3 11419 13469 12191 +3 11420 12192 13470 +3 11420 13470 12598 +3 11421 11804 12625 +3 11421 12625 12281 +3 11422 12282 12626 +3 11422 12626 11805 +3 11423 11829 12356 +3 11423 12356 11965 +3 11424 11966 12357 +3 11424 12357 11830 +3 11425 11711 12032 +3 11425 12032 11765 +3 11426 11766 12033 +3 11426 12033 11712 +3 11427 11619 11725 +3 11427 11725 11525 +3 11428 11526 11726 +3 11428 11726 11620 +3 11429 13014 14671 +3 11429 14671 13058 +3 11430 13059 14674 +3 11430 14674 13015 +3 11431 12233 12535 +3 11431 12535 11773 +3 11432 11774 12536 +3 11432 12536 12234 +3 11433 11870 12118 +3 11433 12118 11677 +3 11434 11678 12119 +3 11434 12119 11871 +3 11435 12350 12767 +3 11435 12767 11888 +3 11436 11889 12768 +3 11436 12768 12351 +3 11437 11803 12309 +3 11437 12309 11802 +3 11438 13262 13981 +3 11438 13981 12072 +3 11439 12073 13982 +3 11439 13982 13263 +3 11440 11617 13060 +3 11440 13060 12892 +3 11441 12893 13061 +3 11441 13061 11618 +3 11442 11934 12022 +3 11442 12022 11561 +3 11443 11562 12023 +3 11443 12023 11935 +3 11444 13085 13903 +3 11444 13903 12189 +3 11445 12190 13904 +3 11445 13904 13086 +3 11446 11652 11715 +3 11446 11715 11519 +3 11447 11520 11716 +3 11447 11716 11653 +3 11448 12202 12643 +3 11448 12643 12201 +3 11449 12437 12814 +3 11449 12814 11847 +3 11450 11848 12815 +3 11450 12815 12438 +3 11451 11992 12359 +3 11451 12359 11839 +3 11452 11840 12360 +3 11452 12360 11993 +3 11453 11609 12006 +3 11453 12006 11884 +3 11454 11885 12007 +3 11454 12007 11610 +3 11455 11761 12340 +3 11455 12340 12056 +3 11456 12057 12341 +3 11456 12341 11762 +3 11457 12653 14120 +3 11457 14120 12735 +3 11458 12736 14121 +3 11458 14121 12654 +3 11459 12324 14777 +3 11459 14777 13803 +3 11460 13804 14778 +3 11460 14778 12325 +3 11461 12143 12332 +3 11461 12332 11691 +3 11462 11692 12333 +3 11462 12333 12144 +3 11463 12307 14092 +3 11463 14092 13127 +3 11464 13128 14093 +3 11464 14093 12308 +3 11465 11917 12657 +3 11465 12657 12249 +3 11466 12250 12658 +3 11466 12658 11918 +3 11467 12050 13216 +3 11467 13216 12582 +3 11468 12583 13217 +3 11468 13217 12053 +3 11469 12237 12458 +3 11469 12458 11709 +3 11470 11710 12459 +3 11470 12459 12238 +3 11471 12983 13827 +3 11471 13827 12984 +3 11472 11807 12822 +3 11472 12822 12476 +3 11473 12477 12823 +3 11473 12823 11808 +3 11474 12902 14088 +3 11474 14088 12492 +3 11475 12493 14089 +3 11475 14089 12903 +3 11476 11823 12450 +3 11476 12450 12165 +3 11477 12166 12451 +3 11477 12451 11824 +3 11478 11957 12229 +3 11478 12229 11783 +3 11479 11784 12230 +3 11479 12230 11958 +3 11480 11497 12004 +3 11480 12004 12005 +3 11480 12005 11498 +3 11481 12649 13832 +3 11481 13832 12633 +3 11482 12634 13833 +3 11482 13833 12650 +3 11483 12759 13369 +3 11483 13369 11833 +3 11484 11834 13370 +3 11484 13370 12760 +3 11485 12016 13044 +3 11485 13044 12494 +3 11486 12495 13045 +3 11486 13045 12017 +3 11487 12952 13367 +3 11487 13367 11868 +3 11488 11869 13368 +3 11488 13368 12953 +3 11489 11703 12102 +3 11489 12102 11915 +3 11490 11916 12103 +3 11490 12103 11704 +3 11491 13158 13741 +3 11491 13741 12096 +3 11492 12097 13742 +3 11492 13742 13159 +3 11493 13166 13853 +3 11493 13853 12147 +3 11494 12148 13854 +3 11494 13854 13167 +3 11495 13139 14476 +3 11495 14476 12712 +3 11496 12713 14477 +3 11496 14477 13140 +3 11497 11603 12058 +3 11497 12058 12004 +3 11498 12005 12059 +3 11498 12059 11604 +3 11499 11765 12151 +3 11499 12151 11911 +3 11500 11912 12152 +3 11500 12152 11766 +3 11501 11701 12905 +3 11501 12905 12729 +3 11502 12730 12906 +3 11502 12906 11702 +3 11503 11671 11841 +3 11503 11841 11675 +3 11504 11676 11842 +3 11504 11842 11672 +3 11505 12295 13135 +3 11505 13135 12303 +3 11506 12304 13136 +3 11506 13136 12296 +3 11507 12046 12377 +3 11507 12377 11870 +3 11508 11871 12378 +3 11508 12378 12047 +3 11509 12303 13141 +3 11509 13141 12297 +3 11510 12298 13142 +3 11510 13142 12304 +3 11511 12141 12547 +3 11511 12547 11753 +3 11512 11754 12548 +3 11512 12548 12142 +3 11513 12383 12671 +3 11513 12671 11751 +3 11514 11752 12672 +3 11514 12672 12384 +3 11515 12484 13206 +3 11515 13206 12203 +3 11516 12204 13207 +3 11516 13207 12485 +3 11517 12114 12267 +3 11517 12267 11705 +3 11518 11706 12268 +3 11518 12268 12115 +3 11519 11715 11835 +3 11519 11835 11667 +3 11520 11668 11836 +3 11520 11836 11716 +3 11521 11573 11791 +3 11521 11787 11553 +3 11521 11791 11787 +3 11522 11554 11788 +3 11522 11788 11792 +3 11522 11792 11574 +3 11523 12239 13975 +3 11523 13975 13200 +3 11524 13201 13976 +3 11524 13976 12240 +3 11525 11725 11872 +3 11525 11872 11697 +3 11526 11698 11873 +3 11526 11873 11726 +3 11527 12425 13817 +3 11527 13817 12824 +3 11528 12825 13818 +3 11528 13818 12426 +3 11529 11585 11827 +3 11529 11819 11537 +3 11529 11827 11819 +3 11530 11538 11820 +3 11530 11820 11828 +3 11530 11828 11586 +3 11531 12633 13985 +3 11531 13985 12774 +3 11532 12775 13986 +3 11532 13986 12634 +3 11533 12149 12352 +3 11533 12352 11789 +3 11534 11790 12353 +3 11534 12353 12150 +3 11535 11890 12120 +3 11535 12120 11810 +3 11536 11811 12121 +3 11536 12121 11890 +3 11537 11819 11857 +3 11537 11857 11619 +3 11538 11620 11858 +3 11538 11858 11820 +3 11539 12020 12995 +3 11539 12995 12506 +3 11540 12507 12996 +3 11540 12996 12021 +3 11541 13129 13815 +3 11541 13815 12187 +3 11542 12188 13816 +3 11542 13816 13130 +3 11543 12403 13461 +3 11543 13461 12519 +3 11544 12520 13462 +3 11544 13462 12404 +3 11545 11723 12504 +3 11545 12504 12285 +3 11546 12286 12505 +3 11546 12505 11724 +3 11547 12173 12389 +3 11547 12389 11814 +3 11548 11815 12390 +3 11548 12390 12174 +3 11549 11810 12106 +3 11549 12106 11893 +3 11550 11894 12107 +3 11550 12107 11811 +3 11551 12385 12946 +3 11551 12946 12136 +3 11552 12137 12947 +3 11552 12947 12386 +3 11553 11787 11880 +3 11553 11880 11671 +3 11554 11672 11881 +3 11554 11881 11788 +3 11555 13712 14273 +3 11555 14273 12064 +3 11556 12065 14274 +3 11556 14274 13713 +3 11557 12486 13428 +3 11557 13428 12407 +3 11558 12408 13429 +3 11558 13429 12487 +3 11559 11648 12126 +3 11559 12051 11711 +3 11559 12126 12051 +3 11560 11712 12052 +3 11560 12052 12127 +3 11560 12127 11649 +3 11561 12022 12197 +3 11561 12197 11759 +3 11562 11760 12198 +3 11562 12198 12023 +3 11563 11947 12605 +3 11563 12605 12259 +3 11564 12260 12606 +3 11564 12606 11948 +3 11565 13581 14223 +3 11565 14223 12134 +3 11566 12135 14224 +3 11566 14224 13582 +3 11567 12407 13373 +3 11567 13373 12403 +3 11568 12404 13374 +3 11568 13374 12408 +3 11569 11831 12293 +3 11569 12293 12054 +3 11570 12055 12294 +3 11570 12294 11832 +3 11571 11994 13432 +3 11571 13432 12576 +3 11572 12577 13433 +3 11572 13433 11995 +3 11573 11667 11853 +3 11573 11853 11791 +3 11574 11792 11854 +3 11574 11854 11668 +3 11575 12310 12665 +3 11575 12665 11975 +3 11576 11976 12666 +3 11576 12666 12311 +3 11577 12287 14160 +3 11577 14160 13344 +3 11578 13345 14161 +3 11578 14161 12288 +3 11579 13559 14193 +3 11579 14193 12124 +3 11580 12125 14194 +3 11580 14194 13560 +3 11581 12848 14063 +3 11581 14063 12649 +3 11582 12650 14064 +3 11582 14064 12849 +3 11583 12297 13228 +3 11583 13228 12446 +3 11584 12447 13229 +3 11584 13229 12298 +3 11585 11675 11899 +3 11585 11899 11827 +3 11586 11828 11900 +3 11586 11900 11676 +3 11587 11697 11929 +3 11587 11806 11588 +3 11587 11929 11806 +3 11588 11806 11930 +3 11588 11930 11698 +3 11589 11897 12761 +3 11589 12761 12448 +3 11590 12449 12762 +3 11590 12762 11898 +3 11591 12301 14368 +3 11591 14368 13528 +3 11592 13529 14369 +3 11592 14369 12302 +3 11593 12026 14142 +3 11593 14142 13623 +3 11594 13624 14143 +3 11594 14143 12027 +3 11595 11874 13267 +3 11595 13267 12954 +3 11596 12955 13268 +3 11596 13268 11875 +3 11597 12498 13273 +3 11597 13273 12295 +3 11598 12296 13274 +3 11598 13274 12499 +3 11599 12793 14325 +3 11599 14325 12964 +3 11600 12965 14326 +3 11600 14326 12794 +3 11601 11967 12635 +3 11601 12635 12322 +3 11602 12323 12636 +3 11602 12636 11968 +3 11603 11721 12185 +3 11603 12185 12058 +3 11604 12059 12186 +3 11604 12186 11722 +3 11605 12092 13731 +3 11605 13731 13194 +3 11606 13195 13732 +3 11606 13732 12093 +3 11607 11608 12673 +3 11607 12673 12698 +3 11607 12698 11650 +3 11608 11651 12699 +3 11608 12699 12673 +3 11609 11713 12108 +3 11609 12108 12006 +3 11610 12007 12109 +3 11610 12109 11714 +3 11611 12048 13381 +3 11611 13381 12886 +3 11612 12887 13382 +3 11612 13382 12049 +3 11613 13321 14913 +3 11613 14913 13014 +3 11614 13015 14914 +3 11614 14914 13322 +3 11615 12674 13007 +3 11615 13007 11951 +3 11616 11952 13008 +3 11616 13008 12675 +3 11617 12169 13686 +3 11617 13686 13060 +3 11618 13061 13687 +3 11618 13687 12170 +3 11619 11857 11953 +3 11619 11953 11725 +3 11620 11726 11954 +3 11620 11954 11858 +3 11621 13030 14370 +3 11621 14370 12793 +3 11622 12794 14371 +3 11622 14371 13031 +3 11623 11653 11926 +3 11623 11925 11652 +3 11623 11926 11925 +3 11624 12094 14040 +3 11624 14040 13504 +3 11625 13505 14041 +3 11625 14041 12095 +3 11626 12088 14070 +3 11626 14070 13301 +3 11627 13302 14071 +3 11627 14071 12089 +3 11628 12227 14415 +3 11628 14415 13725 +3 11629 13726 14416 +3 11629 14416 12228 +3 11630 11971 12247 +3 11630 12247 11959 +3 11631 11960 12248 +3 11631 12248 11972 +3 11632 11965 12544 +3 11632 12544 12271 +3 11633 12272 12545 +3 11633 12545 11966 +3 11634 12207 14563 +3 11634 14563 13871 +3 11635 13872 14564 +3 11635 14564 12208 +3 11636 12367 14591 +3 11636 14591 13757 +3 11637 13758 14592 +3 11637 14592 12368 +3 11638 12441 12890 +3 11638 12890 12100 +3 11639 12101 12891 +3 11639 12891 12442 +3 11640 12090 13723 +3 11640 13723 13202 +3 11641 13203 13724 +3 11641 13724 12091 +3 11642 12466 14502 +3 11642 14502 13557 +3 11643 13558 14503 +3 11643 14503 12466 +3 11644 12215 13180 +3 11644 13180 12542 +3 11645 12543 13181 +3 11645 13181 12216 +3 11646 11785 12502 +3 11646 12502 12104 +3 11647 12105 12503 +3 11647 12503 11786 +3 11648 11763 12217 +3 11648 12217 12126 +3 11649 12127 12218 +3 11649 12218 11764 +3 11650 12698 12784 +3 11650 12784 11755 +3 11651 11756 12785 +3 11651 12785 12699 +3 11652 11925 11955 +3 11652 11955 11715 +3 11653 11716 11956 +3 11653 11956 11926 +3 11654 12334 13087 +3 11654 13087 12405 +3 11655 12406 13088 +3 11655 13088 12335 +3 11656 12086 13379 +3 11656 13379 12930 +3 11657 12931 13380 +3 11657 13380 12087 +3 11658 11683 12568 +3 11658 12568 12569 +3 11658 12569 11684 +3 11659 12393 13091 +3 11659 13091 12344 +3 11660 12345 13092 +3 11660 13092 12394 +3 11661 11981 13690 +3 11661 13690 13330 +3 11662 13331 13691 +3 11662 13691 11982 +3 11663 12122 12478 +3 11663 12478 12153 +3 11664 12154 12479 +3 11664 12479 12123 +3 11665 12896 13222 +3 11665 13222 11977 +3 11666 11978 13223 +3 11666 13223 12897 +3 11667 11835 11983 +3 11667 11983 11853 +3 11668 11854 11984 +3 11668 11984 11836 +3 11669 12344 13110 +3 11669 13110 12334 +3 11670 12335 13111 +3 11670 13111 12345 +3 11671 11880 12012 +3 11671 12012 11841 +3 11672 11842 12013 +3 11672 12013 11881 +3 11673 13785 14893 +3 11673 14893 12659 +3 11674 12660 14894 +3 11674 14894 13786 +3 11675 11841 12018 +3 11675 12018 11899 +3 11676 11900 12019 +3 11676 12019 11842 +3 11677 12118 12409 +3 11677 12409 11996 +3 11678 11997 12410 +3 11678 12410 12119 +3 11679 13058 15020 +3 11679 15020 13485 +3 11680 11949 12907 +3 11680 12907 12381 +3 11681 12382 12908 +3 11681 12908 11950 +3 11682 13486 15021 +3 11682 15021 13059 +3 11683 11757 12627 +3 11683 12627 12568 +3 11684 12569 12628 +3 11684 12628 11758 +3 11685 12373 12782 +3 11685 12782 12141 +3 11686 12142 12783 +3 11686 12783 12374 +3 11687 12500 14376 +3 11687 14376 13465 +3 11688 13466 14377 +3 11688 14377 12501 +3 11689 12900 13269 +3 11689 13269 12038 +3 11690 12039 13270 +3 11690 13270 12901 +3 11691 12332 12565 +3 11691 12565 11992 +3 11692 11993 12566 +3 11692 12566 12333 +3 11693 13660 14090 +3 11693 14090 12074 +3 11694 12075 14091 +3 11694 14091 13661 +3 11695 11777 12363 +3 11695 12316 11699 +3 11695 12363 12316 +3 11696 11700 12317 +3 11696 12317 12364 +3 11696 12364 11778 +3 11697 11872 12062 +3 11697 12062 11929 +3 11698 11930 12063 +3 11698 12063 11873 +3 11699 12316 12464 +3 11699 12464 11878 +3 11700 11879 12465 +3 11700 12465 12317 +3 11701 12195 13439 +3 11701 13439 12905 +3 11702 12906 13440 +3 11702 13440 12196 +3 11703 11959 12346 +3 11703 12346 12102 +3 11704 12103 12347 +3 11704 12347 11960 +3 11705 12267 12462 +3 11705 12462 11957 +3 11706 11958 12463 +3 11706 12463 12268 +3 11707 12110 13295 +3 11707 13295 12858 +3 11708 12859 13296 +3 11708 13296 12111 +3 11709 12458 12763 +3 11709 12763 12010 +3 11710 12011 12764 +3 11710 12764 12459 +3 11711 12051 12375 +3 11711 12375 12032 +3 11712 12033 12376 +3 11712 12376 12052 +3 11713 11893 12265 +3 11713 12265 12108 +3 11714 12109 12266 +3 11714 12266 11894 +3 11715 11955 12034 +3 11715 12034 11835 +3 11716 11836 12035 +3 11716 12035 11956 +3 11717 12708 14409 +3 11717 14409 13309 +3 11718 13310 14410 +3 11718 14410 12709 +3 11719 12776 13845 +3 11719 13845 12684 +3 11720 12685 13846 +3 11720 13846 12777 +3 11721 11911 12354 +3 11721 12354 12185 +3 11722 12186 12355 +3 11722 12355 11912 +3 11723 11945 12716 +3 11723 12716 12504 +3 11724 12505 12717 +3 11724 12717 11946 +3 11725 11953 12082 +3 11725 12082 11872 +3 11726 11873 12083 +3 11726 12083 11954 +3 11727 11863 12644 +3 11727 12644 12870 +3 11727 12870 11903 +3 11728 11904 12871 +3 11728 12645 11864 +3 11728 12871 12645 +3 11729 13506 14253 +3 11729 14253 12371 +3 11730 12372 14254 +3 11730 14254 13507 +3 11731 12710 13593 +3 11731 13593 12486 +3 11732 12487 13594 +3 11732 13594 12711 +3 11733 12878 14765 +3 11733 14765 13497 +3 11734 13498 14766 +3 11734 14766 12879 +3 11735 12684 13823 +3 11735 13823 12749 +3 11736 12750 13824 +3 11736 13824 12685 +3 11737 13003 13993 +3 11737 13993 12587 +3 11738 12588 13994 +3 11738 13994 13004 +3 11739 12797 13334 +3 11739 13334 12211 +3 11740 12212 13335 +3 11740 13335 12798 +3 11741 12553 14705 +3 11741 14705 13809 +3 11742 13810 14706 +3 11742 14706 12554 +3 11743 12964 14565 +3 11743 14565 13190 +3 11744 13191 14566 +3 11744 14566 12965 +3 11745 12128 12460 +3 11745 12460 12139 +3 11746 12140 12461 +3 11746 12461 12129 +3 11747 12774 14217 +3 11747 14217 13034 +3 11748 13035 14218 +3 11748 14218 12775 +3 11749 11793 13666 +3 11749 13645 11750 +3 11749 13666 13645 +3 11750 13645 13667 +3 11750 13667 11794 +3 11751 12671 13001 +3 11751 13001 12060 +3 11752 12061 13002 +3 11752 13002 12672 +3 11753 12547 12810 +3 11753 12810 12002 +3 11754 12003 12811 +3 11754 12811 12548 +3 11755 12784 12918 +3 11755 12918 11901 +3 11756 11902 12919 +3 11756 12919 12785 +3 11757 11861 12725 +3 11757 12725 12627 +3 11758 12628 12726 +3 11758 12726 11862 +3 11759 12197 12387 +3 11759 12387 11971 +3 11760 11972 12388 +3 11760 12388 12198 +3 11761 12104 12661 +3 11761 12661 12340 +3 11762 12341 12662 +3 11762 12662 12105 +3 11763 11915 12369 +3 11763 12369 12217 +3 11764 12218 12370 +3 11764 12370 11916 +3 11765 12032 12415 +3 11765 12415 12151 +3 11766 12152 12416 +3 11766 12416 12033 +3 11767 13547 14015 +3 11767 14015 12183 +3 11768 12184 14016 +3 11768 14016 13548 +3 11769 12446 13449 +3 11769 13449 12651 +3 11770 12652 13450 +3 11770 13450 12447 +3 11771 12201 13016 +3 11771 13016 12570 +3 11772 12571 13017 +3 11772 13017 12202 +3 11773 12535 13256 +3 11773 13256 12393 +3 11774 12394 13257 +3 11774 13257 12536 +3 11775 12399 13791 +3 11775 13791 13073 +3 11776 13074 13792 +3 11776 13792 12400 +3 11777 11886 12431 +3 11777 12431 12363 +3 11778 12364 12432 +3 11778 12432 11887 +3 11779 13999 14745 +3 11779 14745 12551 +3 11780 12552 14746 +3 11780 14746 14000 +3 11781 13670 14606 +3 11781 14606 12593 +3 11782 12594 14607 +3 11782 14607 13671 +3 11783 12229 12533 +3 11783 12533 12122 +3 11784 12123 12534 +3 11784 12534 12230 +3 11785 11990 12720 +3 11785 12720 12502 +3 11786 12503 12721 +3 11786 12721 11991 +3 11787 11791 12028 +3 11787 12028 12132 +3 11787 12132 11880 +3 11788 11881 12133 +3 11788 12029 11792 +3 11788 12133 12029 +3 11789 12352 12589 +3 11789 12589 12046 +3 11790 12047 12590 +3 11790 12590 12353 +3 11791 11853 12078 +3 11791 12078 12028 +3 11792 12029 12079 +3 11792 12079 11854 +3 11793 11961 13753 +3 11793 13753 13666 +3 11794 13667 13754 +3 11794 13754 11962 +3 11795 11998 13133 +3 11795 12880 11979 +3 11795 13133 12880 +3 11796 11980 12881 +3 11796 12881 13134 +3 11796 13134 11999 +3 11797 11821 14156 +3 11797 14156 14157 +3 11797 14157 11822 +3 11798 12519 13710 +3 11798 13710 12830 +3 11799 12831 13711 +3 11799 13711 12520 +3 11800 12769 13244 +3 11800 13244 12241 +3 11801 12242 13245 +3 11801 13245 12770 +3 11802 12309 12920 +3 11802 12920 12401 +3 11803 12402 12921 +3 11803 12921 12309 +3 11804 12405 13325 +3 11804 13325 12625 +3 11805 12626 13326 +3 11805 13326 12406 +3 11806 11929 12138 +3 11806 12138 11930 +3 11807 12155 13184 +3 11807 13184 12822 +3 11808 12823 13185 +3 11808 13185 12156 +3 11809 11837 12862 +3 11809 12862 12863 +3 11809 12863 11838 +3 11810 12120 12391 +3 11810 12391 12106 +3 11811 12107 12392 +3 11811 12392 12121 +3 11812 13595 14219 +3 11812 14219 12788 +3 11813 12789 14220 +3 11813 14220 13596 +3 11814 12389 12680 +3 11814 12680 12128 +3 11815 12129 12681 +3 11815 12681 12390 +3 11816 13212 14017 +3 11816 14017 12508 +3 11817 12508 14018 +3 11817 14018 13213 +3 11818 12139 12541 +3 11818 12541 12140 +3 11819 11827 12130 +3 11819 12130 12167 +3 11819 12167 11857 +3 11820 11858 12168 +3 11820 12131 11828 +3 11820 12168 12131 +3 11821 11907 14233 +3 11821 14233 14156 +3 11822 14157 14234 +3 11822 14234 11908 +3 11823 12056 12692 +3 11823 12692 12450 +3 11824 12451 12693 +3 11824 12693 12057 +3 11825 13371 14703 +3 11825 14703 13030 +3 11826 13031 14704 +3 11826 14704 13372 +3 11827 11899 12177 +3 11827 12177 12130 +3 11828 12131 12178 +3 11828 12178 11900 +3 11829 12379 12884 +3 11829 12884 12356 +3 11830 12357 12885 +3 11830 12885 12380 +3 11831 12153 12559 +3 11831 12559 12293 +3 11832 12294 12560 +3 11832 12560 12154 +3 11833 13369 13807 +3 11833 13807 12231 +3 11834 12232 13808 +3 11834 13808 13370 +3 11835 12034 12175 +3 11835 12175 11983 +3 11836 11984 12176 +3 11836 12176 12035 +3 11837 11921 12940 +3 11837 12940 12862 +3 11838 12863 12941 +3 11838 12941 11922 +3 11839 12359 12898 +3 11839 12898 12379 +3 11840 12380 12899 +3 11840 12899 12360 +3 11841 12012 12205 +3 11841 12205 12018 +3 11842 12019 12206 +3 11842 12206 12013 +3 11843 13688 15319 +3 11843 15319 13321 +3 11844 13322 15320 +3 11844 15320 13689 +3 11845 12749 13936 +3 11845 13936 12942 +3 11846 12943 13937 +3 11846 13937 12750 +3 11847 12814 13561 +3 11847 13561 12498 +3 11848 12499 13562 +3 11848 13562 12815 +3 11849 13258 14350 +3 11849 14350 12848 +3 11850 12849 14351 +3 11850 14351 13259 +3 11851 13112 13704 +3 11851 13704 12395 +3 11852 12396 13705 +3 11852 13705 13113 +3 11853 11983 12193 +3 11853 12193 12078 +3 11854 12079 12194 +3 11854 12194 11984 +3 11855 13934 14865 +3 11855 14865 12641 +3 11856 12642 14866 +3 11856 14866 13935 +3 11857 12167 12222 +3 11857 12222 11953 +3 11858 11954 12223 +3 11858 12223 12168 +3 11859 13319 14585 +3 11859 14585 13020 +3 11860 13021 14586 +3 11860 14586 13320 +3 11861 12165 12866 +3 11861 12866 12725 +3 11862 12726 12867 +3 11862 12867 12166 +3 11863 12066 12838 +3 11863 12838 12644 +3 11864 12645 12839 +3 11864 12839 12067 +3 11865 12731 13327 +3 11865 13327 12732 +3 11866 13502 15032 +3 11866 15032 13475 +3 11867 13476 15033 +3 11867 15033 13503 +3 11868 13367 13811 +3 11868 13811 12273 +3 11869 12274 13812 +3 11869 13812 13368 +3 11870 12377 12563 +3 11870 12563 12118 +3 11871 12119 12564 +3 11871 12564 12378 +3 11872 12082 12275 +3 11872 12275 12062 +3 11873 12063 12276 +3 11873 12276 12083 +3 11874 12199 13599 +3 11874 13599 13267 +3 11875 13268 13600 +3 11875 13600 12200 +3 11876 13026 14027 +3 11876 14027 12776 +3 11877 12777 14028 +3 11877 14028 13027 +3 11878 12464 12678 +3 11878 12678 11987 +3 11879 11988 12679 +3 11879 12679 12465 +3 11880 12132 12253 +3 11880 12253 12012 +3 11881 12013 12254 +3 11881 12254 12133 +3 11882 11884 12439 +3 11882 12439 12456 +3 11882 12456 11934 +3 11883 11935 12457 +3 11883 12440 11885 +3 11883 12457 12440 +3 11884 12006 12452 +3 11884 12452 12439 +3 11885 12440 12453 +3 11885 12453 12007 +3 11886 12054 12574 +3 11886 12574 12431 +3 11887 12432 12575 +3 11887 12575 12055 +3 11888 12767 13305 +3 11888 13305 12385 +3 11889 12386 13306 +3 11889 13306 12768 +3 11890 12121 12445 +3 11890 12445 12120 +3 11891 12595 14595 +3 11891 14595 13793 +3 11892 13794 14596 +3 11892 14596 12596 +3 11893 12106 12443 +3 11893 12443 12265 +3 11894 12266 12444 +3 11894 12444 12107 +3 11895 12576 14209 +3 11895 14209 13389 +3 11896 13390 14210 +3 11896 14210 12577 +3 11897 12249 13149 +3 11897 13149 12761 +3 11898 12762 13150 +3 11898 13150 12250 +3 11899 12018 12277 +3 11899 12277 12177 +3 11900 12178 12278 +3 11900 12278 12019 +3 11901 12918 13106 +3 11901 13106 12237 +3 11902 12238 13107 +3 11902 13107 12919 +3 11903 12870 13095 +3 11903 13095 12112 +3 11904 12113 13096 +3 11904 13096 12871 +3 11905 12213 14158 +3 11905 14158 12902 +3 11906 12903 14159 +3 11906 14159 12214 +3 11907 12639 15194 +3 11907 15194 14233 +3 11908 14234 15195 +3 11908 15195 12640 +3 11909 13328 13977 +3 11909 13977 12484 +3 11910 12485 13978 +3 11910 13978 13329 +3 11911 12151 12539 +3 11911 12539 12354 +3 11912 12355 12540 +3 11912 12540 12152 +3 11913 12068 12868 +3 11913 12704 11969 +3 11913 12868 12704 +3 11914 11970 12705 +3 11914 12705 12869 +3 11914 12869 12069 +3 11915 12102 12527 +3 11915 12527 12369 +3 11916 12370 12528 +3 11916 12528 12103 +3 11917 12381 13168 +3 11917 13168 12657 +3 11918 12658 13169 +3 11918 13169 12382 +3 11919 14227 15168 +3 11919 15168 12743 +3 11920 12744 15169 +3 11920 15169 14228 +3 11921 12036 13040 +3 11921 13040 12940 +3 11922 12941 13041 +3 11922 13041 12037 +3 11923 12513 13204 +3 11923 13204 12537 +3 11924 12538 13205 +3 11924 13205 12514 +3 11925 11926 12224 +3 11925 12224 12245 +3 11925 12245 11955 +3 11926 11956 12246 +3 11926 12246 12224 +3 11927 13406 14124 +3 11927 14124 12488 +3 11928 12489 14125 +3 11928 14125 13407 +3 11929 12062 12257 +3 11929 12257 12138 +3 11930 12138 12258 +3 11930 12258 12063 +3 11931 12537 13208 +3 11931 13208 12521 +3 11932 12522 13209 +3 11932 13209 12538 +3 11933 12999 13722 +3 11933 13722 13000 +3 11934 12456 12531 +3 11934 12531 12022 +3 11935 12023 12532 +3 11935 12532 12457 +3 11936 13192 14484 +3 11936 14484 13139 +3 11937 13140 14485 +3 11937 14485 13193 +3 11938 12467 13947 +3 11938 13947 13352 +3 11939 13353 13948 +3 11939 13948 12468 +3 11940 13299 13925 +3 11940 13925 12529 +3 11941 12530 13926 +3 11941 13926 13300 +3 11942 11964 13488 +3 11942 13487 11963 +3 11942 13488 13487 +3 11943 12631 13050 +3 11943 13050 12358 +3 11944 12358 13051 +3 11944 13051 12632 +3 11945 12259 13028 +3 11945 13028 12716 +3 11946 12717 13029 +3 11946 13029 12260 +3 11947 12401 13075 +3 11947 13075 12605 +3 11948 12606 13076 +3 11948 13076 12402 +3 11949 12281 13242 +3 11949 13242 12907 +3 11950 12908 13243 +3 11950 13243 12282 +3 11951 13007 13875 +3 11951 13875 12710 +3 11952 12711 13876 +3 11952 13876 13008 +3 11953 12222 12348 +3 11953 12348 12082 +3 11954 12083 12349 +3 11954 12349 12223 +3 11955 12245 12299 +3 11955 12299 12034 +3 11956 12035 12300 +3 11956 12300 12246 +3 11957 12462 12741 +3 11957 12741 12229 +3 11958 12230 12742 +3 11958 12742 12463 +3 11959 12247 12601 +3 11959 12601 12346 +3 11960 12347 12602 +3 11960 12602 12248 +3 11961 12555 14451 +3 11961 14451 13753 +3 11962 13754 14452 +3 11962 14452 12556 +3 11963 13487 13516 +3 11963 13516 12076 +3 11964 12077 13517 +3 11964 13517 13488 +3 11965 12356 12958 +3 11965 12958 12544 +3 11966 12545 12959 +3 11966 12959 12357 +3 11967 12521 13265 +3 11967 13265 12635 +3 11968 12636 13266 +3 11968 13266 12522 +3 11969 12704 12834 +3 11969 12834 12143 +3 11970 12144 12835 +3 11970 12835 12705 +3 11971 12387 12621 +3 11971 12621 12247 +3 11972 12248 12622 +3 11972 12622 12388 +3 11973 12663 14378 +3 11973 14378 13585 +3 11974 13586 14379 +3 11974 14379 12664 +3 11975 12665 13283 +3 11975 13283 12513 +3 11976 12514 13284 +3 11976 13284 12666 +3 11977 13222 13601 +3 11977 13601 12350 +3 11978 12351 13602 +3 11978 13602 13223 +3 11979 12880 13154 +3 11979 13154 12233 +3 11980 12234 13155 +3 11980 13155 12881 +3 11981 12342 14103 +3 11981 14103 13690 +3 11982 13691 14104 +3 11982 14104 12343 +3 11983 12175 12338 +3 11983 12338 12193 +3 11984 12194 12339 +3 11984 12339 12176 +3 11985 11986 12773 +3 11985 12773 12795 +3 11985 12795 12040 +3 11986 12041 12796 +3 11986 12796 12773 +3 11987 12678 12828 +3 11987 12828 12173 +3 11988 12174 12829 +3 11988 12829 12679 +3 11989 13509 14291 +3 11989 14291 13508 +3 11990 12271 12975 +3 11990 12975 12720 +3 11991 12721 12976 +3 11991 12976 12272 +3 11992 12565 12948 +3 11992 12948 12359 +3 11993 12360 12949 +3 11993 12949 12566 +3 11994 12824 14354 +3 11994 14354 13432 +3 11995 13433 14355 +3 11995 14355 12825 +3 11996 12409 12751 +3 11996 12751 12114 +3 11997 12115 12752 +3 11997 12752 12410 +3 11998 12220 13393 +3 11998 13393 13133 +3 11999 13134 13394 +3 11999 13394 12221 +3 12000 13190 14901 +3 12000 14901 13587 +3 12001 13588 14902 +3 12001 14902 13191 +3 12002 12810 13151 +3 12002 13151 12310 +3 12003 12311 13152 +3 12003 13152 12811 +3 12004 12058 12578 +3 12004 12550 12005 +3 12004 12578 12550 +3 12005 12550 12579 +3 12005 12579 12059 +3 12006 12108 12523 +3 12006 12523 12452 +3 12007 12453 12524 +3 12007 12524 12109 +3 12008 13485 15565 +3 12008 15565 14007 +3 12009 14008 15566 +3 12009 15566 13486 +3 12010 12763 13137 +3 12010 13137 12373 +3 12011 12374 13138 +3 12011 13138 12764 +3 12012 12253 12421 +3 12012 12421 12205 +3 12013 12206 12422 +3 12013 12422 12254 +3 12014 12365 13619 +3 12014 13619 13913 +3 12014 13913 12291 +3 12015 12292 13914 +3 12015 13620 12366 +3 12015 13914 13620 +3 12016 12567 13662 +3 12016 13662 13044 +3 12017 13045 13663 +3 12017 13663 12567 +3 12018 12205 12427 +3 12018 12427 12277 +3 12019 12278 12428 +3 12019 12428 12206 +3 12020 12570 13565 +3 12020 13565 12995 +3 12021 12996 13568 +3 12021 13568 12571 +3 12022 12531 12667 +3 12022 12667 12197 +3 12023 12198 12668 +3 12023 12668 12532 +3 12024 13650 14553 +3 12024 14553 12842 +3 12025 12843 14554 +3 12025 14554 13651 +3 12026 12496 14653 +3 12026 14653 14142 +3 12027 14143 14654 +3 12027 14654 12497 +3 12028 12078 12336 +3 12028 12336 12419 +3 12028 12419 12132 +3 12029 12133 12420 +3 12029 12337 12079 +3 12029 12420 12337 +3 12030 13034 14551 +3 12030 14551 13459 +3 12031 13460 14552 +3 12031 14552 13035 +3 12032 12375 12722 +3 12032 12722 12415 +3 12033 12416 12723 +3 12033 12723 12376 +3 12034 12299 12411 +3 12034 12411 12175 +3 12035 12176 12412 +3 12035 12412 12300 +3 12036 12225 13236 +3 12036 13236 13040 +3 12037 13041 13237 +3 12037 13237 12226 +3 12038 13269 13648 +3 12038 13648 12397 +3 12039 12398 13649 +3 12039 13649 13270 +3 12040 12795 12850 +3 12040 12850 12149 +3 12041 12150 12851 +3 12041 12851 12796 +3 12042 13475 15329 +3 12042 15329 13739 +3 12043 13740 15330 +3 12043 15330 13476 +3 12044 12942 14225 +3 12044 14225 13224 +3 12045 13225 14226 +3 12045 14226 12943 +3 12046 12589 12938 +3 12046 12938 12377 +3 12047 12378 12939 +3 12047 12939 12590 +3 12048 12542 13953 +3 12048 13953 13381 +3 12049 13382 13954 +3 12049 13954 12543 +3 12050 12494 13775 +3 12050 13775 13216 +3 12051 12126 12607 +3 12051 12607 12375 +3 12052 12376 12608 +3 12052 12608 12127 +3 12053 13217 13776 +3 12053 13776 12495 +3 12054 12293 12803 +3 12054 12803 12574 +3 12055 12575 12804 +3 12055 12804 12294 +3 12056 12340 12981 +3 12056 12981 12692 +3 12057 12693 12982 +3 12057 12982 12341 +3 12058 12185 12669 +3 12058 12669 12578 +3 12059 12579 12670 +3 12059 12670 12186 +3 12060 13001 13410 +3 12060 13410 12441 +3 12061 12442 13411 +3 12061 13411 13002 +3 12062 12275 12423 +3 12062 12423 12257 +3 12063 12258 12424 +3 12063 12424 12276 +3 12064 14273 14923 +3 12064 14923 12615 +3 12065 12616 14924 +3 12065 14924 14274 +3 12066 12322 13119 +3 12066 13119 12838 +3 12067 12839 13120 +3 12067 13120 12323 +3 12068 12285 13083 +3 12068 13083 12868 +3 12069 12869 13084 +3 12069 13084 12286 +3 12070 13951 14883 +3 12070 14883 12904 +3 12071 12904 14884 +3 12071 14884 13952 +3 12072 13981 14753 +3 12072 14753 12778 +3 12073 12779 14754 +3 12073 14754 13982 +3 12074 14090 14539 +3 12074 14539 12480 +3 12075 12481 14540 +3 12075 14540 14091 +3 12076 13516 13684 +3 12076 13684 12251 +3 12077 12252 13685 +3 12077 13685 13517 +3 12078 12193 12417 +3 12078 12417 12336 +3 12079 12337 12418 +3 12079 12418 12194 +3 12080 12081 13336 +3 12080 13336 13358 +3 12080 13358 12161 +3 12081 12162 13359 +3 12081 13359 13336 +3 12082 12348 12482 +3 12082 12482 12275 +3 12083 12276 12483 +3 12083 12483 12349 +3 12084 13220 14364 +3 12084 14364 13250 +3 12085 13251 14365 +3 12085 14365 13221 +3 12086 12582 13917 +3 12086 13917 13379 +3 12087 13380 13918 +3 12087 13918 12583 +3 12088 12603 14636 +3 12088 14636 14070 +3 12089 14071 14637 +3 12089 14637 12604 +3 12090 12646 14275 +3 12090 14275 13723 +3 12091 13724 14276 +3 12091 14276 12647 +3 12092 12690 14391 +3 12092 14391 13731 +3 12093 13732 14392 +3 12093 14392 12691 +3 12094 12599 14601 +3 12094 14601 14040 +3 12095 14041 14602 +3 12095 14602 12600 +3 12096 13741 14470 +3 12096 14470 12765 +3 12097 12766 14471 +3 12097 14471 13742 +3 12098 12361 13414 +3 12098 13414 13668 +3 12098 13668 12318 +3 12099 12319 13669 +3 12099 13415 12362 +3 12099 13669 13415 +3 12100 12890 13483 +3 12100 13483 12631 +3 12101 12632 13484 +3 12101 13484 12891 +3 12102 12346 12780 +3 12102 12780 12527 +3 12103 12528 12781 +3 12103 12781 12347 +3 12104 12502 13104 +3 12104 13104 12661 +3 12105 12662 13105 +3 12105 13105 12503 +3 12106 12391 12706 +3 12106 12706 12443 +3 12107 12444 12707 +3 12107 12707 12392 +3 12108 12265 12655 +3 12108 12655 12523 +3 12109 12524 12656 +3 12109 12656 12266 +3 12110 12830 14114 +3 12110 14114 13295 +3 12111 13296 14115 +3 12111 14115 12831 +3 12112 13095 13377 +3 12112 13377 12383 +3 12113 12384 13378 +3 12113 13378 13096 +3 12114 12751 12882 +3 12114 12882 12267 +3 12115 12268 12883 +3 12115 12883 12752 +3 12116 13491 14739 +3 12116 14739 13315 +3 12117 13316 14740 +3 12117 14740 13492 +3 12118 12563 12860 +3 12118 12860 12409 +3 12119 12410 12861 +3 12119 12861 12564 +3 12120 12445 12696 +3 12120 12696 12391 +3 12121 12392 12697 +3 12121 12697 12445 +3 12122 12533 12944 +3 12122 12944 12478 +3 12123 12479 12945 +3 12123 12945 12534 +3 12124 14193 14817 +3 12124 14817 12688 +3 12125 12689 14818 +3 12125 14818 14194 +3 12126 12217 12694 +3 12126 12694 12607 +3 12127 12608 12695 +3 12127 12695 12218 +3 12128 12680 13048 +3 12128 13048 12460 +3 12129 12461 13049 +3 12129 13049 12681 +3 12130 12177 12490 +3 12130 12454 12167 +3 12130 12490 12454 +3 12131 12168 12455 +3 12131 12455 12491 +3 12131 12491 12178 +3 12132 12419 12511 +3 12132 12511 12253 +3 12133 12254 12512 +3 12133 12512 12420 +3 12134 14223 14999 +3 12134 14999 12820 +3 12135 12821 15000 +3 12135 15000 14224 +3 12136 12946 13583 +3 12136 13583 12437 +3 12137 12438 13584 +3 12137 13584 12947 +3 12138 12257 12469 +3 12138 12469 12258 +3 12139 12460 12914 +3 12139 12914 12541 +3 12140 12541 12915 +3 12140 12915 12461 +3 12141 12782 13252 +3 12141 13252 12547 +3 12142 12548 13253 +3 12142 13253 12783 +3 12143 12834 13032 +3 12143 13032 12332 +3 12144 12333 13033 +3 12144 13033 12835 +3 12145 13887 15418 +3 12145 15418 13502 +3 12146 13503 15419 +3 12146 15419 13888 +3 12147 13853 14610 +3 12147 14610 12806 +3 12148 12807 14611 +3 12148 14611 13854 +3 12149 12850 12969 +3 12149 12969 12352 +3 12150 12353 12970 +3 12150 12970 12851 +3 12151 12415 12812 +3 12151 12812 12539 +3 12152 12540 12813 +3 12152 12813 12416 +3 12153 12478 12950 +3 12153 12950 12559 +3 12154 12560 12951 +3 12154 12951 12479 +3 12155 12506 13591 +3 12155 13591 13184 +3 12156 13185 13592 +3 12156 13592 12507 +3 12157 13315 14791 +3 12157 14791 13549 +3 12158 13552 14792 +3 12158 14792 13316 +3 12159 13143 15303 +3 12159 15303 14221 +3 12160 14222 15304 +3 12160 15304 13144 +3 12161 13358 13479 +3 12161 13479 12269 +3 12162 12270 13480 +3 12162 13480 13359 +3 12163 13360 14496 +3 12163 14496 13220 +3 12164 13221 14497 +3 12164 14497 13361 +3 12165 12450 13210 +3 12165 13210 12866 +3 12166 12867 13211 +3 12166 13211 12451 +3 12167 12454 12509 +3 12167 12509 12222 +3 12168 12223 12510 +3 12168 12510 12455 +3 12169 12737 14346 +3 12169 14346 13686 +3 12170 13687 14347 +3 12170 14347 12738 +3 12171 12926 15293 +3 12171 15293 14407 +3 12172 14408 15294 +3 12172 15294 12927 +3 12173 12828 13042 +3 12173 13042 12389 +3 12174 12390 13043 +3 12174 13043 12829 +3 12175 12411 12525 +3 12175 12525 12338 +3 12176 12339 12526 +3 12176 12526 12412 +3 12177 12277 12561 +3 12177 12561 12490 +3 12178 12491 12562 +3 12178 12562 12278 +3 12179 13250 14567 +3 12179 14567 13447 +3 12180 13448 14570 +3 12180 14570 13251 +3 12181 14231 15090 +3 12181 15090 12991 +3 12182 12992 15091 +3 12182 15091 14232 +3 12183 14015 14506 +3 12183 14506 12613 +3 12184 12614 14507 +3 12184 14507 14016 +3 12185 12354 12836 +3 12185 12836 12669 +3 12186 12670 12837 +3 12186 12837 12355 +3 12187 13815 14533 +3 12187 14533 12609 +3 12188 12610 14534 +3 12188 14534 13816 +3 12189 13903 14767 +3 12189 14767 12983 +3 12190 12984 14768 +3 12190 14768 13904 +3 12191 13469 14381 +3 12191 14381 13026 +3 12192 13027 14382 +3 12192 14382 13470 +3 12193 12338 12515 +3 12193 12515 12417 +3 12194 12418 12516 +3 12194 12516 12339 +3 12195 12470 14003 +3 12195 14003 13439 +3 12196 13440 14004 +3 12196 14004 12471 +3 12197 12667 12856 +3 12197 12856 12387 +3 12198 12388 12857 +3 12198 12857 12668 +3 12199 12517 14001 +3 12199 14001 13599 +3 12200 13600 14002 +3 12200 14002 12518 +3 12201 12643 13530 +3 12201 13530 13016 +3 12202 13017 13531 +3 12202 13531 12643 +3 12203 13206 14025 +3 12203 14025 12597 +3 12204 12598 14026 +3 12204 14026 13207 +3 12205 12421 12629 +3 12205 12629 12427 +3 12206 12428 12630 +3 12206 12630 12422 +3 12207 12840 15341 +3 12207 15341 14563 +3 12208 14564 15342 +3 12208 15342 12841 +3 12209 13919 15201 +3 12209 15201 13371 +3 12210 13372 15202 +3 12210 15202 13920 +3 12211 13334 13911 +3 12211 13911 12769 +3 12212 12770 13912 +3 12212 13912 13335 +3 12213 12557 14520 +3 12213 14520 14158 +3 12214 14159 14521 +3 12214 14521 12558 +3 12215 12858 13865 +3 12215 13865 13180 +3 12216 13181 13866 +3 12216 13866 12859 +3 12217 12369 12818 +3 12217 12818 12694 +3 12218 12695 12819 +3 12218 12819 12370 +3 12219 12256 14511 +3 12219 14510 12255 +3 12219 14511 14510 +3 12220 12476 13702 +3 12220 13702 13393 +3 12221 13394 13703 +3 12221 13703 12477 +3 12222 12509 12619 +3 12222 12619 12348 +3 12223 12349 12620 +3 12223 12620 12510 +3 12224 12246 12585 +3 12224 12584 12245 +3 12224 12585 12584 +3 12225 12448 13694 +3 12225 13694 13236 +3 12226 13237 13695 +3 12226 13695 12449 +3 12227 13012 15172 +3 12227 15172 14415 +3 12228 14416 15173 +3 12228 15173 13013 +3 12229 12741 13065 +3 12229 13065 12533 +3 12230 12534 13066 +3 12230 13066 12742 +3 12231 13807 14303 +3 12231 14303 12702 +3 12232 12703 14304 +3 12232 14304 13808 +3 12233 13154 13481 +3 12233 13481 12535 +3 12234 12536 13482 +3 12234 13482 13155 +3 12235 12876 15567 +3 12235 15567 14488 +3 12236 14489 15568 +3 12236 15568 12877 +3 12237 13106 13348 +3 12237 13348 12458 +3 12238 12459 13349 +3 12238 13349 13107 +3 12239 12854 14675 +3 12239 14675 13975 +3 12240 13976 14676 +3 12240 14676 12855 +3 12241 13244 13781 +3 12241 13781 12731 +3 12242 12732 13782 +3 12242 13782 13245 +3 12243 13698 14997 +3 12243 14997 13491 +3 12244 13492 14998 +3 12244 14998 13699 +3 12245 12584 12637 +3 12245 12637 12299 +3 12246 12300 12638 +3 12246 12638 12585 +3 12247 12621 12956 +3 12247 12956 12601 +3 12248 12602 12957 +3 12248 12957 12622 +3 12249 12657 13563 +3 12249 13563 13149 +3 12250 13150 13564 +3 12250 13564 12658 +3 12251 13684 14269 +3 12251 14269 12759 +3 12252 12760 14270 +3 12252 14270 13685 +3 12253 12511 12686 +3 12253 12686 12421 +3 12254 12422 12687 +3 12254 12687 12512 +3 12255 14510 14573 +3 12255 14573 12328 +3 12256 12329 14574 +3 12256 14574 14511 +3 12257 12423 12617 +3 12257 12617 12469 +3 12258 12469 12618 +3 12258 12618 12424 +3 12259 12605 13437 +3 12259 13437 13028 +3 12260 13029 13438 +3 12260 13438 12606 +3 12261 13700 15263 +3 12261 15263 13688 +3 12262 13689 15264 +3 12262 15264 13701 +3 12263 12874 15241 +3 12263 15241 14508 +3 12264 14509 15242 +3 12264 15242 12875 +3 12265 12443 12846 +3 12265 12846 12655 +3 12266 12656 12847 +3 12266 12847 12444 +3 12267 12882 13115 +3 12267 13115 12462 +3 12268 12463 13116 +3 12268 13116 12883 +3 12269 13479 13627 +3 12269 13627 12435 +3 12270 12436 13628 +3 12270 13628 13480 +3 12271 12544 13311 +3 12271 13311 12975 +3 12272 12976 13312 +3 12272 13312 12545 +3 12273 13811 14297 +3 12273 14297 12700 +3 12274 12701 14298 +3 12274 14298 13812 +3 12275 12482 12623 +3 12275 12623 12423 +3 12276 12424 12624 +3 12276 12624 12483 +3 12277 12427 12714 +3 12277 12714 12561 +3 12278 12562 12715 +3 12278 12715 12428 +3 12279 13821 14863 +3 12279 14863 13258 +3 12280 13259 14864 +3 12280 14864 13822 +3 12281 12625 13613 +3 12281 13613 13242 +3 12282 13243 13614 +3 12282 13614 12626 +3 12283 13739 15681 +3 12283 15681 14107 +3 12284 14108 15682 +3 12284 15682 13740 +3 12285 12504 13354 +3 12285 13354 13083 +3 12286 13084 13355 +3 12286 13355 12505 +3 12287 13127 15047 +3 12287 15047 14160 +3 12288 14161 15048 +3 12288 15048 13128 +3 12289 12290 14164 +3 12289 14164 14197 +3 12289 14197 12326 +3 12290 12327 14198 +3 12290 14198 14164 +3 12291 13913 14271 +3 12291 14271 12572 +3 12292 12573 14272 +3 12292 14272 13914 +3 12293 12559 13121 +3 12293 13121 12803 +3 12294 12804 13122 +3 12294 13122 12560 +3 12295 13273 14152 +3 12295 14152 13135 +3 12296 13136 14153 +3 12296 14153 13274 +3 12297 13141 14134 +3 12297 14134 13228 +3 12298 13229 14135 +3 12298 14135 13142 +3 12299 12637 12727 +3 12299 12727 12411 +3 12300 12412 12728 +3 12300 12728 12638 +3 12301 13123 15274 +3 12301 15274 14368 +3 12302 14369 15275 +3 12302 15275 13124 +3 12303 13135 14068 +3 12303 14068 13141 +3 12304 13142 14069 +3 12304 14069 13136 +3 12305 13497 14979 +3 12305 14979 13755 +3 12306 13756 14980 +3 12306 14980 13498 +3 12307 13309 14632 +3 12307 14632 14092 +3 12308 14093 14633 +3 12308 14633 13310 +3 12309 12921 13337 +3 12309 13337 12920 +3 12310 13151 13514 +3 12310 13514 12665 +3 12311 12666 13515 +3 12311 13515 13152 +3 12312 12745 15345 +3 12312 15345 13700 +3 12313 13701 15346 +3 12313 15346 12746 +3 12314 13605 14699 +3 12314 14699 13360 +3 12315 13361 14700 +3 12315 14700 13606 +3 12316 12363 13005 +3 12316 13005 13186 +3 12316 13186 12464 +3 12317 12465 13187 +3 12317 13006 12364 +3 12317 13187 13006 +3 12318 13668 13955 +3 12318 13955 12580 +3 12319 12581 13956 +3 12319 13956 13669 +3 12320 13891 15438 +3 12320 15438 13915 +3 12321 13916 15441 +3 12321 15441 13892 +3 12322 12635 13441 +3 12322 13441 13119 +3 12323 13120 13442 +3 12323 13442 12636 +3 12324 13364 15930 +3 12324 15930 14777 +3 12325 14778 15931 +3 12325 15931 13365 +3 12326 14197 14263 +3 12326 14263 12474 +3 12327 12475 14264 +3 12327 14264 14198 +3 12328 14573 15555 +3 12328 15555 13081 +3 12329 13082 15556 +3 12329 15556 14574 +3 12330 13549 15160 +3 12330 15160 13849 +3 12331 13850 15161 +3 12331 15161 13552 +3 12332 13032 13317 +3 12332 13317 12565 +3 12333 12566 13318 +3 12333 13318 13033 +3 12334 13110 13895 +3 12334 13895 13087 +3 12335 13088 13896 +3 12335 13896 13111 +3 12336 12417 12676 +3 12336 12676 12755 +3 12336 12755 12419 +3 12337 12420 12756 +3 12337 12677 12418 +3 12337 12756 12677 +3 12338 12525 12718 +3 12338 12718 12515 +3 12339 12516 12719 +3 12339 12719 12526 +3 12340 12661 13350 +3 12340 13350 12981 +3 12341 12982 13351 +3 12341 13351 12662 +3 12342 12733 14516 +3 12342 14516 14103 +3 12343 14104 14517 +3 12343 14517 12734 +3 12344 13091 13897 +3 12344 13897 13110 +3 12345 13111 13898 +3 12345 13898 13092 +3 12346 12601 13052 +3 12346 13052 12780 +3 12347 12781 13053 +3 12347 13053 12602 +3 12348 12619 12786 +3 12348 12786 12482 +3 12349 12483 12787 +3 12349 12787 12620 +3 12350 13601 14076 +3 12350 14076 12767 +3 12351 12768 14077 +3 12351 14077 13602 +3 12352 12969 13260 +3 12352 13260 12589 +3 12353 12590 13261 +3 12353 13261 12970 +3 12354 12539 13056 +3 12354 13056 12836 +3 12355 12837 13057 +3 12355 13057 12540 +3 12356 12884 13520 +3 12356 13520 12958 +3 12357 12959 13521 +3 12357 13521 12885 +3 12358 13050 13542 +3 12358 13542 13051 +3 12359 12948 13522 +3 12359 13522 12898 +3 12360 12899 13523 +3 12360 13523 12949 +3 12361 12651 13743 +3 12361 13743 13414 +3 12362 13415 13744 +3 12362 13744 12652 +3 12363 12431 13067 +3 12363 13067 13005 +3 12364 13006 13068 +3 12364 13068 12432 +3 12365 13224 14545 +3 12365 14545 13619 +3 12366 13620 14546 +3 12366 14546 13225 +3 12367 13196 15549 +3 12367 15549 14591 +3 12368 14592 15550 +3 12368 15550 13197 +3 12369 12527 12993 +3 12369 12993 12818 +3 12370 12819 12994 +3 12370 12994 12528 +3 12371 14253 15005 +3 12371 15005 13085 +3 12372 13086 15006 +3 12372 15006 14254 +3 12373 13137 13553 +3 12373 13553 12782 +3 12374 12783 13554 +3 12374 13554 13138 +3 12375 12607 12967 +3 12375 12967 12722 +3 12376 12723 12968 +3 12376 12968 12608 +3 12377 12938 13176 +3 12377 13176 12563 +3 12378 12564 13177 +3 12378 13177 12939 +3 12379 12898 13534 +3 12379 13534 12884 +3 12380 12885 13535 +3 12380 13535 12899 +3 12381 12907 13727 +3 12381 13727 13168 +3 12382 13169 13728 +3 12382 13728 12908 +3 12383 13377 13714 +3 12383 13714 12671 +3 12384 12672 13715 +3 12384 13715 13378 +3 12385 13305 13883 +3 12385 13883 12946 +3 12386 12947 13884 +3 12386 13884 13306 +3 12387 12856 13125 +3 12387 13125 12621 +3 12388 12622 13126 +3 12388 13126 12857 +3 12389 13042 13362 +3 12389 13362 12680 +3 12390 12681 13363 +3 12390 13363 13043 +3 12391 12696 13010 +3 12391 13010 12706 +3 12392 12707 13011 +3 12392 13011 12697 +3 12393 13256 13997 +3 12393 13997 13091 +3 12394 13092 13998 +3 12394 13998 13257 +3 12395 13704 14352 +3 12395 14352 12999 +3 12396 13000 14353 +3 12396 14353 13705 +3 12397 13648 14072 +3 12397 14072 12797 +3 12398 12798 14073 +3 12398 14073 13649 +3 12399 13114 14522 +3 12399 14522 13791 +3 12400 13792 14523 +3 12400 14523 13114 +3 12401 12920 13615 +3 12401 13615 13075 +3 12402 13076 13616 +3 12402 13616 12921 +3 12403 13373 14456 +3 12403 14456 13461 +3 12404 13462 14457 +3 12404 14457 13374 +3 12405 13087 14035 +3 12405 14035 13325 +3 12406 13326 14036 +3 12406 14036 13088 +3 12407 13428 14441 +3 12407 14441 13373 +3 12408 13374 14442 +3 12408 14442 13429 +3 12409 12860 13214 +3 12409 13214 12751 +3 12410 12752 13215 +3 12410 13215 12861 +3 12411 12727 12852 +3 12411 12852 12525 +3 12412 12526 12853 +3 12412 12853 12728 +3 12413 13587 14903 +3 12413 14903 13660 +3 12414 13661 14904 +3 12414 14904 13588 +3 12415 12722 13162 +3 12415 13162 12812 +3 12416 12813 13163 +3 12416 13163 12723 +3 12417 12515 12791 +3 12417 12791 12676 +3 12418 12677 12792 +3 12418 12792 12516 +3 12419 12755 12872 +3 12419 12872 12511 +3 12420 12512 12873 +3 12420 12873 12756 +3 12421 12686 12912 +3 12421 12912 12629 +3 12422 12630 12913 +3 12422 12913 12687 +3 12423 12623 12816 +3 12423 12816 12617 +3 12424 12618 12817 +3 12424 12817 12624 +3 12425 13447 14843 +3 12425 14843 13817 +3 12426 13818 14844 +3 12426 14844 13448 +3 12427 12629 12928 +3 12427 12928 12714 +3 12428 12715 12929 +3 12428 12929 12630 +3 12429 13459 14608 +3 12429 14608 12739 +3 12430 12740 14609 +3 12430 14609 13460 +3 12431 12574 13232 +3 12431 13232 13067 +3 12432 13068 13233 +3 12432 13233 12575 +3 12433 14401 15967 +3 12433 15967 13887 +3 12434 13888 15968 +3 12434 15968 14402 +3 12435 13627 14140 +3 12435 14140 12896 +3 12436 12897 14141 +3 12436 14141 13628 +3 12437 13583 13973 +3 12437 13973 12814 +3 12438 12815 13974 +3 12438 13974 13584 +3 12439 12452 12987 +3 12439 12985 12456 +3 12439 12987 12985 +3 12440 12457 12986 +3 12440 12986 12988 +3 12440 12988 12453 +3 12441 13410 13867 +3 12441 13867 12890 +3 12442 12891 13868 +3 12442 13868 13411 +3 12443 12706 13099 +3 12443 13099 12846 +3 12444 12847 13100 +3 12444 13100 12707 +3 12445 12697 13101 +3 12445 13101 12696 +3 12446 13228 14279 +3 12446 14279 13449 +3 12447 13450 14280 +3 12447 14280 13229 +3 12448 12761 13983 +3 12448 13983 13694 +3 12449 13695 13984 +3 12449 13984 12762 +3 12450 12692 13471 +3 12450 13471 13210 +3 12451 13211 13472 +3 12451 13472 12693 +3 12452 12523 13164 +3 12452 13164 12987 +3 12453 12988 13165 +3 12453 13165 12524 +3 12454 12490 12909 +3 12454 12888 12509 +3 12454 12909 12888 +3 12455 12510 12889 +3 12455 12889 12910 +3 12455 12910 12491 +3 12456 12985 13046 +3 12456 13046 12531 +3 12457 12532 13047 +3 12457 13047 12986 +3 12458 13348 13639 +3 12458 13639 12763 +3 12459 12764 13640 +3 12459 13640 13349 +3 12460 13048 13510 +3 12460 13510 12914 +3 12461 12915 13511 +3 12461 13511 13049 +3 12462 13115 13375 +3 12462 13375 12741 +3 12463 12742 13376 +3 12463 13376 13116 +3 12464 13186 13383 +3 12464 13383 12678 +3 12465 12679 13384 +3 12465 13384 13187 +3 12466 14503 15594 +3 12466 15594 14502 +3 12467 13073 14597 +3 12467 14597 13947 +3 12468 13948 14598 +3 12468 14598 13074 +3 12469 12617 12911 +3 12469 12911 12618 +3 12470 12886 14419 +3 12470 14419 14003 +3 12471 14004 14420 +3 12471 14420 12887 +3 12472 14165 15720 +3 12472 15720 13891 +3 12473 13892 15721 +3 12473 15721 14166 +3 12474 14263 14907 +3 12474 14907 13129 +3 12475 13130 14908 +3 12475 14908 14264 +3 12476 12822 14033 +3 12476 14033 13702 +3 12477 13703 14034 +3 12477 14034 12823 +3 12478 12944 13493 +3 12478 13493 12950 +3 12479 12951 13494 +3 12479 13494 12945 +3 12480 14539 15065 +3 12480 15065 12979 +3 12481 12980 15066 +3 12481 15066 14540 +3 12482 12786 12922 +3 12482 12922 12623 +3 12483 12624 12923 +3 12483 12923 12787 +3 12484 13977 14709 +3 12484 14709 13206 +3 12485 13207 14710 +3 12485 14710 13978 +3 12486 13593 14547 +3 12486 14547 13428 +3 12487 13429 14548 +3 12487 14548 13594 +3 12488 14124 14835 +3 12488 14835 13212 +3 12489 13213 14836 +3 12489 14836 14125 +3 12490 12561 12971 +3 12490 12971 12909 +3 12491 12910 12972 +3 12491 12972 12562 +3 12492 14088 15363 +3 12492 15363 13698 +3 12493 13699 15364 +3 12493 15364 14089 +3 12494 13044 14317 +3 12494 14317 13775 +3 12495 13776 14318 +3 12495 14318 13045 +3 12496 13071 15351 +3 12496 15351 14653 +3 12497 14654 15352 +3 12497 15352 13072 +3 12498 13561 14374 +3 12498 14374 13273 +3 12499 13274 14375 +3 12499 14375 13562 +3 12500 13366 15291 +3 12500 15291 14376 +3 12501 14377 15292 +3 12501 15292 13366 +3 12502 12720 13550 +3 12502 13550 13104 +3 12503 13105 13551 +3 12503 13551 12721 +3 12504 12716 13655 +3 12504 13655 13354 +3 12505 13355 13656 +3 12505 13656 12717 +3 12506 12995 14105 +3 12506 14105 13591 +3 12507 13592 14106 +3 12507 14106 12996 +3 12508 14017 14735 +3 12508 14735 14018 +3 12509 12888 12977 +3 12509 12977 12619 +3 12510 12620 12978 +3 12510 12978 12889 +3 12511 12872 13018 +3 12511 13018 12686 +3 12512 12687 13019 +3 12512 13019 12873 +3 12513 13283 13929 +3 12513 13929 13204 +3 12514 13205 13930 +3 12514 13930 13284 +3 12515 12718 12960 +3 12515 12960 12791 +3 12516 12792 12961 +3 12516 12961 12719 +3 12517 12930 14421 +3 12517 14421 14001 +3 12518 14002 14422 +3 12518 14422 12931 +3 12519 13461 14612 +3 12519 14612 13710 +3 12520 13711 14613 +3 12520 14613 13462 +3 12521 13208 13940 +3 12521 13940 13265 +3 12522 13266 13941 +3 12522 13941 13209 +3 12523 12655 13277 +3 12523 13277 13164 +3 12524 13165 13278 +3 12524 13278 12656 +3 12525 12852 13038 +3 12525 13038 12718 +3 12526 12719 13039 +3 12526 13039 12853 +3 12527 12780 13238 +3 12527 13238 12993 +3 12528 12994 13239 +3 12528 13239 12781 +3 12529 13925 14504 +3 12529 14504 13112 +3 12530 13113 14505 +3 12530 14505 13926 +3 12531 13046 13172 +3 12531 13172 12667 +3 12532 12668 13173 +3 12532 13173 13047 +3 12533 13065 13473 +3 12533 13473 12944 +3 12534 12945 13474 +3 12534 13474 13066 +3 12535 13481 14215 +3 12535 14215 13256 +3 12536 13257 14216 +3 12536 14216 13482 +3 12537 13204 13949 +3 12537 13949 13208 +3 12538 13209 13950 +3 12538 13950 13205 +3 12539 12812 13342 +3 12539 13342 13056 +3 12540 13057 13343 +3 12540 13343 12813 +3 12541 12914 13434 +3 12541 13434 12915 +3 12542 13180 14577 +3 12542 14577 13953 +3 12543 13954 14578 +3 12543 14578 13181 +3 12544 12958 13652 +3 12544 13652 13311 +3 12545 13312 13653 +3 12545 13653 12959 +3 12546 13915 15832 +3 12546 15832 14299 +3 12547 13252 13787 +3 12547 13787 12810 +3 12548 12811 13788 +3 12548 13788 13253 +3 12549 14300 15833 +3 12549 15833 13916 +3 12550 12578 13275 +3 12550 13275 13276 +3 12550 13276 12579 +3 12551 14745 15666 +3 12551 15666 13356 +3 12552 13357 15667 +3 12552 15667 14746 +3 12553 13557 15868 +3 12553 15868 14705 +3 12554 14706 15869 +3 12554 15869 13558 +3 12555 13301 15223 +3 12555 15223 14451 +3 12556 14452 15224 +3 12556 15224 13302 +3 12557 12997 14977 +3 12557 14977 14520 +3 12558 14521 14978 +3 12558 14978 12998 +3 12559 12950 13477 +3 12559 13477 13121 +3 12560 13122 13478 +3 12560 13478 12951 +3 12561 12714 13097 +3 12561 13097 12971 +3 12562 12972 13098 +3 12562 13098 12715 +3 12563 13176 13453 +3 12563 13453 12860 +3 12564 12861 13454 +3 12564 13454 13177 +3 12565 13317 13617 +3 12565 13617 12948 +3 12566 12949 13618 +3 12566 13618 13318 +3 12567 13663 14333 +3 12567 14333 13662 +3 12568 12627 13682 +3 12568 13657 12569 +3 12568 13682 13657 +3 12569 13657 13683 +3 12569 13683 12628 +3 12570 13016 14011 +3 12570 14011 13565 +3 12571 13568 14012 +3 12571 14012 13017 +3 12572 14271 14624 +3 12572 14624 12952 +3 12573 12953 14625 +3 12573 14625 14272 +3 12574 12803 13451 +3 12574 13451 13232 +3 12575 13233 13452 +3 12575 13452 12804 +3 12576 13432 15049 +3 12576 15049 14209 +3 12577 14210 15050 +3 12577 15050 13433 +3 12578 12669 13340 +3 12578 13340 13275 +3 12579 13276 13341 +3 12579 13341 12670 +3 12580 13955 14289 +3 12580 14289 12900 +3 12581 12901 14290 +3 12581 14290 13956 +3 12582 13216 14541 +3 12582 14541 13917 +3 12583 13918 14542 +3 12583 14542 13217 +3 12584 12585 13009 +3 12584 13009 13036 +3 12584 13036 12637 +3 12585 12638 13037 +3 12585 13037 13009 +3 12586 12611 14128 +3 12586 14128 14129 +3 12586 14129 12612 +3 12587 13993 15045 +3 12587 15045 13605 +3 12588 13606 15046 +3 12588 15046 13994 +3 12589 13260 13575 +3 12589 13575 12938 +3 12590 12939 13576 +3 12590 13576 13261 +3 12591 14007 15768 +3 12591 15768 14239 +3 12592 14240 15769 +3 12592 15769 14008 +3 12593 14606 15726 +3 12593 15726 13595 +3 12594 13596 15727 +3 12594 15727 14607 +3 12595 13465 15490 +3 12595 15490 14595 +3 12596 14596 15491 +3 12596 15491 13466 +3 12597 14025 14889 +3 12597 14889 13469 +3 12598 13470 14890 +3 12598 14890 14026 +3 12599 13200 15276 +3 12599 15276 14601 +3 12600 14602 15277 +3 12600 15277 13201 +3 12601 12956 13395 +3 12601 13395 13052 +3 12602 13053 13396 +3 12602 13396 12957 +3 12603 13344 15454 +3 12603 15454 14636 +3 12604 14637 15455 +3 12604 15455 13345 +3 12605 13075 13861 +3 12605 13861 13437 +3 12606 13438 13862 +3 12606 13862 13076 +3 12607 12694 13297 +3 12607 13297 12967 +3 12608 12968 13298 +3 12608 13298 12695 +3 12609 14533 15100 +3 12609 15100 13166 +3 12610 13167 15101 +3 12610 15101 14534 +3 12611 12729 14162 +3 12611 14162 14128 +3 12612 14129 14163 +3 12612 14163 12730 +3 12613 14506 15073 +3 12613 15073 13158 +3 12614 13159 15074 +3 12614 15074 14507 +3 12615 14923 15703 +3 12615 15703 13293 +3 12616 13294 15704 +3 12616 15704 14924 +3 12617 12816 13079 +3 12617 13079 12911 +3 12618 12911 13080 +3 12618 13080 12817 +3 12619 12977 13147 +3 12619 13147 12786 +3 12620 12787 13148 +3 12620 13148 12978 +3 12621 13125 13420 +3 12621 13420 12956 +3 12622 12957 13421 +3 12622 13421 13126 +3 12623 12922 13089 +3 12623 13089 12816 +3 12624 12817 13090 +3 12624 13090 12923 +3 12625 13325 14309 +3 12625 14309 13613 +3 12626 13614 14310 +3 12626 14310 13326 +3 12627 12725 13771 +3 12627 13771 13682 +3 12628 13683 13772 +3 12628 13772 12726 +3 12629 12912 13160 +3 12629 13160 12928 +3 12630 12929 13161 +3 12630 13161 12913 +3 12631 13483 13893 +3 12631 13893 13050 +3 12632 13051 13894 +3 12632 13894 13484 +3 12633 13832 15243 +3 12633 15243 13985 +3 12634 13986 15244 +3 12634 15244 13833 +3 12635 13265 14122 +3 12635 14122 13441 +3 12636 13442 14123 +3 12636 14123 13266 +3 12637 13036 13145 +3 12637 13145 12727 +3 12638 12728 13146 +3 12638 13146 13037 +3 12639 13543 16271 +3 12639 16271 15194 +3 12640 15195 16272 +3 12640 16272 13544 +3 12641 14865 15969 +3 12641 15969 13323 +3 12642 13324 15970 +3 12642 15970 14866 +3 12643 13531 14094 +3 12643 14094 13530 +3 12644 12838 13769 +3 12644 13769 13967 +3 12644 13967 12870 +3 12645 12871 13968 +3 12645 13770 12839 +3 12645 13968 13770 +3 12646 13352 14954 +3 12646 14954 14275 +3 12647 14276 14955 +3 12647 14955 13353 +3 12648 12682 14905 +3 12648 14905 14906 +3 12648 14906 12683 +3 12649 14063 15282 +3 12649 15282 13832 +3 12650 13833 15283 +3 12650 15283 14064 +3 12651 13449 14524 +3 12651 14524 13743 +3 12652 13744 14525 +3 12652 14525 13450 +3 12653 14107 15631 +3 12653 15631 14120 +3 12654 14121 15632 +3 12654 15632 14108 +3 12655 12846 13445 +3 12655 13445 13277 +3 12656 13278 13446 +3 12656 13446 12847 +3 12657 13168 14059 +3 12657 14059 13563 +3 12658 13564 14060 +3 12658 14060 13169 +3 12659 14893 15613 +3 12659 15613 13319 +3 12660 13320 15614 +3 12660 15614 14894 +3 12661 13104 13767 +3 12661 13767 13350 +3 12662 13351 13768 +3 12662 13768 13105 +3 12663 13508 15237 +3 12663 15237 14378 +3 12664 14379 15238 +3 12664 15238 13509 +3 12665 13514 14169 +3 12665 14169 13283 +3 12666 13284 14170 +3 12666 14170 13515 +3 12667 13172 13346 +3 12667 13346 12856 +3 12668 12857 13347 +3 12668 13347 13173 +3 12669 12836 13412 +3 12669 13412 13340 +3 12670 13341 13413 +3 12670 13413 12837 +3 12671 13714 14031 +3 12671 14031 13001 +3 12672 13002 14032 +3 12672 14032 13715 +3 12673 12699 13746 +3 12673 13745 12698 +3 12673 13746 13745 +3 12674 12954 14514 +3 12674 14261 13007 +3 12674 14514 14261 +3 12675 13008 14262 +3 12675 14262 14515 +3 12675 14515 12955 +3 12676 12791 13093 +3 12676 13093 13174 +3 12676 13174 12755 +3 12677 12756 13175 +3 12677 13094 12792 +3 12677 13175 13094 +3 12678 13383 13635 +3 12678 13635 12828 +3 12679 12829 13636 +3 12679 13636 13384 +3 12680 13362 13733 +3 12680 13733 13048 +3 12681 13049 13734 +3 12681 13734 13363 +3 12682 12771 14962 +3 12682 14962 14905 +3 12683 14906 14963 +3 12683 14963 12772 +3 12684 13845 14895 +3 12684 14895 13823 +3 12685 13824 14896 +3 12685 14896 13846 +3 12686 13018 13240 +3 12686 13240 12912 +3 12687 12913 13241 +3 12687 13241 13019 +3 12688 14817 15575 +3 12688 15575 13506 +3 12689 13507 15576 +3 12689 15576 14818 +3 12690 13389 15122 +3 12690 15122 14391 +3 12691 14392 15123 +3 12691 15123 13390 +3 12692 12981 13747 +3 12692 13747 13471 +3 12693 13472 13748 +3 12693 13748 12982 +3 12694 12818 13385 +3 12694 13385 13297 +3 12695 13298 13386 +3 12695 13386 12819 +3 12696 13101 13403 +3 12696 13403 13010 +3 12697 13011 13404 +3 12697 13404 13101 +3 12698 13745 13799 +3 12698 13799 12784 +3 12699 12785 13800 +3 12699 13800 13746 +3 12700 14297 14797 +3 12700 14797 13299 +3 12701 13300 14798 +3 12701 14798 14298 +3 12702 14303 14911 +3 12702 14911 13328 +3 12703 13329 14912 +3 12703 14912 14304 +3 12704 12868 13841 +3 12704 13643 12834 +3 12704 13841 13643 +3 12705 12835 13644 +3 12705 13644 13842 +3 12705 13842 12869 +3 12706 13010 13399 +3 12706 13399 13099 +3 12707 13100 13400 +3 12707 13400 13011 +3 12708 13849 15654 +3 12708 15654 14409 +3 12709 14410 15655 +3 12709 15655 13850 +3 12710 13875 14757 +3 12710 14757 13593 +3 12711 13594 14758 +3 12711 14758 13876 +3 12712 14476 16060 +3 12712 16060 14165 +3 12713 14166 16061 +3 12713 16061 14477 +3 12714 12928 13281 +3 12714 13281 13097 +3 12715 13098 13282 +3 12715 13282 12929 +3 12716 13028 13963 +3 12716 13963 13655 +3 12717 13656 13964 +3 12717 13964 13029 +3 12718 13038 13289 +3 12718 13289 12960 +3 12719 12961 13290 +3 12719 13290 13039 +3 12720 12975 13795 +3 12720 13795 13550 +3 12721 13551 13796 +3 12721 13796 12976 +3 12722 12967 13387 +3 12722 13387 13162 +3 12723 13163 13388 +3 12723 13388 12968 +3 12724 12747 12753 +3 12724 12748 12747 +3 12724 12753 12757 +3 12724 12754 12748 +3 12724 12757 12758 +3 12724 12758 12754 +3 12725 12866 13881 +3 12725 13881 13771 +3 12726 13772 13882 +3 12726 13882 12867 +3 12727 13145 13254 +3 12727 13254 12852 +3 12728 12853 13255 +3 12728 13255 13146 +3 12729 12905 14305 +3 12729 14305 14162 +3 12730 14163 14306 +3 12730 14306 12906 +3 12731 13781 14342 +3 12731 14342 13327 +3 12732 13327 14343 +3 12732 14343 13782 +3 12733 13202 15007 +3 12733 15007 14516 +3 12734 14517 15008 +3 12734 15008 13203 +3 12735 14120 15722 +3 12735 15722 13182 +3 12736 13183 15723 +3 12736 15723 14121 +3 12737 13194 15024 +3 12737 15024 14346 +3 12738 14347 15025 +3 12738 15025 13195 +3 12739 14608 14985 +3 12739 14985 13131 +3 12740 13132 14986 +3 12740 14986 14609 +3 12741 13375 13672 +3 12741 13672 13065 +3 12742 13066 13673 +3 12742 13673 13376 +3 12743 15168 16289 +3 12743 16289 13785 +3 12744 13786 16290 +3 12744 16290 15169 +3 12745 13291 15959 +3 12745 15959 15345 +3 12746 15346 15960 +3 12746 15960 13292 +3 12747 12748 12790 +3 12747 12790 12808 +3 12747 12799 12753 +3 12747 12808 12799 +3 12748 12754 12800 +3 12748 12800 12809 +3 12748 12809 12790 +3 12749 13823 15030 +3 12749 15030 13936 +3 12750 13937 15031 +3 12750 15031 13824 +3 12751 13214 13629 +3 12751 13629 12882 +3 12752 12883 13630 +3 12752 13630 13215 +3 12753 12799 12826 +3 12753 12801 12757 +3 12753 12826 12801 +3 12754 12758 12802 +3 12754 12802 12827 +3 12754 12827 12800 +3 12755 13174 13287 +3 12755 13287 12872 +3 12756 12873 13288 +3 12756 13288 13175 +3 12757 12801 12832 +3 12757 12805 12758 +3 12757 12832 12805 +3 12758 12805 12833 +3 12758 12833 12802 +3 12759 14269 14873 +3 12759 14873 13369 +3 12760 13370 14874 +3 12760 14874 14270 +3 12761 13149 14360 +3 12761 14360 13983 +3 12762 13984 14361 +3 12762 14361 13150 +3 12763 13639 13979 +3 12763 13979 13137 +3 12764 13138 13980 +3 12764 13980 13640 +3 12765 14470 15146 +3 12765 15146 13406 +3 12766 13407 15147 +3 12766 15147 14471 +3 12767 14076 14599 +3 12767 14599 13305 +3 12768 13306 14600 +3 12768 14600 14077 +3 12769 13911 14423 +3 12769 14423 13244 +3 12770 13245 14424 +3 12770 14424 13912 +3 12771 13528 15987 +3 12771 15987 14962 +3 12772 14963 15988 +3 12772 15988 13529 +3 12773 12796 13709 +3 12773 13708 12795 +3 12773 13709 13708 +3 12774 13985 15486 +3 12774 15486 14217 +3 12775 14218 15487 +3 12775 15487 13986 +3 12776 14027 15106 +3 12776 15106 13845 +3 12777 13846 15107 +3 12777 15107 14028 +3 12778 14753 15695 +3 12778 15695 13581 +3 12779 13582 15696 +3 12779 15696 14754 +3 12780 13052 13512 +3 12780 13512 13238 +3 12781 13239 13513 +3 12781 13513 13053 +3 12782 13553 14021 +3 12782 14021 13252 +3 12783 13253 14022 +3 12783 14022 13554 +3 12784 13799 13905 +3 12784 13905 12918 +3 12785 12919 13906 +3 12785 13906 13800 +3 12786 13147 13248 +3 12786 13248 12922 +3 12787 12923 13249 +3 12787 13249 13148 +3 12788 14219 15408 +3 12788 15408 13919 +3 12789 13920 15409 +3 12789 15409 14220 +3 12790 12809 12865 +3 12790 12864 12808 +3 12790 12865 12864 +3 12791 12960 13246 +3 12791 13246 13093 +3 12792 13094 13247 +3 12792 13247 12961 +3 12793 14370 15888 +3 12793 15888 14325 +3 12794 14326 15889 +3 12794 15889 14371 +3 12795 13708 13749 +3 12795 13749 12850 +3 12796 12851 13750 +3 12796 13750 13709 +3 12797 14072 14575 +3 12797 14575 13334 +3 12798 13335 14576 +3 12798 14576 14073 +3 12799 12808 12894 +3 12799 12894 12916 +3 12799 12916 12826 +3 12800 12827 12917 +3 12800 12895 12809 +3 12800 12917 12895 +3 12801 12826 12924 +3 12801 12924 12934 +3 12801 12934 12832 +3 12802 12833 12935 +3 12802 12925 12827 +3 12802 12935 12925 +3 12803 13121 13706 +3 12803 13706 13451 +3 12804 13452 13707 +3 12804 13707 13122 +3 12805 12832 12936 +3 12805 12936 12937 +3 12805 12937 12833 +3 12806 14610 15527 +3 12806 15527 13650 +3 12807 13651 15528 +3 12807 15528 14611 +3 12808 12864 12932 +3 12808 12932 12894 +3 12809 12895 12933 +3 12809 12933 12865 +3 12810 13787 14099 +3 12810 14099 13151 +3 12811 13152 14100 +3 12811 14100 13788 +3 12812 13162 13646 +3 12812 13646 13342 +3 12813 13343 13647 +3 12813 13647 13163 +3 12814 13973 14711 +3 12814 14711 13561 +3 12815 13562 14712 +3 12815 14712 13974 +3 12816 13089 13338 +3 12816 13338 13079 +3 12817 13080 13339 +3 12817 13339 13090 +3 12818 12993 13540 +3 12818 13540 13385 +3 12819 13386 13541 +3 12819 13541 12994 +3 12820 14999 15996 +3 12820 15996 13670 +3 12821 13671 15997 +3 12821 15997 15000 +3 12822 13184 14385 +3 12822 14385 14033 +3 12823 14034 14386 +3 12823 14386 13185 +3 12824 13817 15383 +3 12824 15383 14354 +3 12825 14355 15384 +3 12825 15384 13818 +3 12826 12916 12962 +3 12826 12962 12924 +3 12827 12925 12963 +3 12827 12963 12917 +3 12828 13635 13830 +3 12828 13830 13042 +3 12829 13043 13831 +3 12829 13831 13636 +3 12830 13710 14949 +3 12830 14949 14114 +3 12831 14115 14950 +3 12831 14950 13711 +3 12832 12934 12973 +3 12832 12973 12936 +3 12833 12937 12974 +3 12833 12974 12935 +3 12834 13643 13819 +3 12834 13819 13032 +3 12835 13033 13820 +3 12835 13820 13644 +3 12836 13056 13607 +3 12836 13607 13412 +3 12837 13413 13608 +3 12837 13608 13057 +3 12838 13119 13995 +3 12838 13995 13769 +3 12839 13770 13996 +3 12839 13996 13120 +3 12840 13589 16221 +3 12840 16221 15341 +3 12841 15342 16222 +3 12841 16222 13590 +3 12842 14553 15098 +3 12842 15098 13821 +3 12843 13822 15099 +3 12843 15099 14554 +3 12844 12892 14685 +3 12844 14652 12845 +3 12844 14685 14652 +3 12845 14652 14686 +3 12845 14686 12893 +3 12846 13099 13658 +3 12846 13658 13445 +3 12847 13446 13659 +3 12847 13659 13100 +3 12848 14350 15633 +3 12848 15633 14063 +3 12849 14064 15634 +3 12849 15634 14351 +3 12850 13749 13836 +3 12850 13836 12969 +3 12851 12970 13837 +3 12851 13837 13750 +3 12852 13254 13426 +3 12852 13426 13038 +3 12853 13039 13427 +3 12853 13427 13255 +3 12854 13585 15458 +3 12854 15458 14675 +3 12855 14676 15459 +3 12855 15459 13586 +3 12856 13346 13569 +3 12856 13569 13125 +3 12857 13126 13570 +3 12857 13570 13347 +3 12858 13295 14603 +3 12858 14603 13865 +3 12859 13866 14604 +3 12859 14604 13296 +3 12860 13453 13789 +3 12860 13789 13214 +3 12861 13215 13790 +3 12861 13790 13454 +3 12862 12940 14132 +3 12862 14109 12863 +3 12862 14132 14109 +3 12863 14109 14133 +3 12863 14133 12941 +3 12864 12865 12966 +3 12864 12966 12989 +3 12864 12989 12932 +3 12865 12933 12990 +3 12865 12990 12966 +3 12866 13210 14057 +3 12866 14057 13881 +3 12867 13882 14058 +3 12867 14058 13211 +3 12868 13083 14050 +3 12868 14050 13841 +3 12869 13842 14051 +3 12869 14051 13084 +3 12870 13967 14249 +3 12870 14249 13095 +3 12871 13096 14250 +3 12871 14250 13968 +3 12872 13287 13430 +3 12872 13430 13018 +3 12873 13019 13431 +3 12873 13431 13288 +3 12874 14239 16071 +3 12874 16071 15241 +3 12875 15242 16072 +3 12875 16072 14240 +3 12876 13803 16671 +3 12876 16671 15567 +3 12877 15568 16672 +3 12877 16672 13804 +3 12878 14299 16345 +3 12878 16345 14765 +3 12879 14766 16346 +3 12879 16346 14300 +3 12880 13133 14411 +3 12880 14191 13154 +3 12880 14411 14191 +3 12881 13155 14192 +3 12881 14192 14412 +3 12881 14412 13134 +3 12882 13629 13834 +3 12882 13834 13115 +3 12883 13116 13835 +3 12883 13835 13630 +3 12884 13534 14167 +3 12884 14167 13520 +3 12885 13521 14168 +3 12885 14168 13535 +3 12886 13381 14875 +3 12886 14875 14419 +3 12887 14420 14876 +3 12887 14876 13382 +3 12888 12909 13397 +3 12888 13397 13401 +3 12888 13401 12977 +3 12889 12978 13402 +3 12889 13398 12910 +3 12889 13402 13398 +3 12890 13867 14389 +3 12890 14389 13483 +3 12891 13484 14390 +3 12891 14390 13868 +3 12892 13060 14729 +3 12892 14729 14685 +3 12893 14686 14730 +3 12893 14730 13061 +3 12894 12932 13024 +3 12894 13022 12916 +3 12894 13024 13022 +3 12895 12917 13023 +3 12895 13023 13025 +3 12895 13025 12933 +3 12896 14140 14646 +3 12896 14646 13222 +3 12897 13223 14647 +3 12897 14647 14141 +3 12898 13522 14179 +3 12898 14179 13534 +3 12899 13535 14180 +3 12899 14180 13523 +3 12900 14289 14642 +3 12900 14642 13269 +3 12901 13270 14643 +3 12901 14643 14290 +3 12902 14158 15371 +3 12902 15371 14088 +3 12903 14089 15372 +3 12903 15372 14159 +3 12904 14883 15989 +3 12904 15989 14884 +3 12905 13439 14837 +3 12905 14837 14305 +3 12906 14306 14838 +3 12906 14838 13440 +3 12907 13242 14329 +3 12907 14329 13727 +3 12908 13728 14330 +3 12908 14330 13243 +3 12909 12971 13455 +3 12909 13455 13397 +3 12910 13398 13456 +3 12910 13456 12972 +3 12911 13079 13405 +3 12911 13405 13080 +3 12912 13240 13489 +3 12912 13489 13160 +3 12913 13161 13490 +3 12913 13490 13241 +3 12914 13510 14005 +3 12914 14005 13434 +3 12915 13434 14006 +3 12915 14006 13511 +3 12916 13022 13062 +3 12916 13062 12962 +3 12917 12963 13063 +3 12917 13063 13023 +3 12918 13905 14097 +3 12918 14097 13106 +3 12919 13107 14098 +3 12919 14098 13906 +3 12920 13337 14019 +3 12920 14019 13615 +3 12921 13616 14020 +3 12921 14020 13337 +3 12922 13248 13408 +3 12922 13408 13089 +3 12923 13090 13409 +3 12923 13409 13249 +3 12924 12962 13077 +3 12924 13054 12934 +3 12924 13077 13054 +3 12925 12935 13055 +3 12925 13055 13078 +3 12925 13078 12963 +3 12926 13809 16337 +3 12926 16337 15293 +3 12927 15294 16338 +3 12927 16338 13810 +3 12928 13160 13499 +3 12928 13499 13281 +3 12929 13282 13500 +3 12929 13500 13161 +3 12930 13379 14869 +3 12930 14869 14421 +3 12931 14422 14870 +3 12931 14870 13380 +3 12932 12989 13069 +3 12932 13069 13024 +3 12933 13025 13070 +3 12933 13070 12990 +3 12934 13054 13102 +3 12934 13102 12973 +3 12935 12974 13103 +3 12935 13103 13055 +3 12936 12973 13108 +3 12936 13064 12937 +3 12936 13108 13064 +3 12937 13064 13109 +3 12937 13109 12974 +3 12938 13575 13805 +3 12938 13805 13176 +3 12939 13177 13806 +3 12939 13806 13576 +3 12940 13040 14241 +3 12940 14241 14132 +3 12941 14133 14242 +3 12941 14242 13041 +3 12942 13936 15245 +3 12942 15245 14225 +3 12943 14226 15246 +3 12943 15246 13937 +3 12944 13473 13969 +3 12944 13969 13493 +3 12945 13494 13970 +3 12945 13970 13474 +3 12946 13883 14512 +3 12946 14512 13583 +3 12947 13584 14513 +3 12947 14513 13884 +3 12948 13617 14229 +3 12948 14229 13522 +3 12949 13523 14230 +3 12949 14230 13618 +3 12950 13493 13987 +3 12950 13987 13477 +3 12951 13478 13988 +3 12951 13988 13494 +3 12952 14624 15053 +3 12952 15053 13367 +3 12953 13368 15054 +3 12953 15054 14625 +3 12954 13267 14839 +3 12954 14839 14514 +3 12955 14515 14840 +3 12955 14840 13268 +3 12956 13420 13783 +3 12956 13783 13395 +3 12957 13396 13784 +3 12957 13784 13421 +3 12958 13520 14237 +3 12958 14237 13652 +3 12959 13653 14238 +3 12959 14238 13521 +3 12960 13289 13555 +3 12960 13555 13246 +3 12961 13247 13556 +3 12961 13556 13290 +3 12962 13062 13156 +3 12962 13156 13077 +3 12963 13078 13157 +3 12963 13157 13063 +3 12964 14325 16101 +3 12964 16101 14565 +3 12965 14566 16102 +3 12965 16102 14326 +3 12966 12990 13118 +3 12966 13117 12989 +3 12966 13118 13117 +3 12967 13297 13676 +3 12967 13676 13387 +3 12968 13388 13677 +3 12968 13677 13298 +3 12969 13836 13957 +3 12969 13957 13260 +3 12970 13261 13958 +3 12970 13958 13837 +3 12971 13097 13536 +3 12971 13536 13455 +3 12972 13456 13537 +3 12972 13537 13098 +3 12973 13102 13188 +3 12973 13188 13108 +3 12974 13109 13189 +3 12974 13189 13103 +3 12975 13311 14116 +3 12975 14116 13795 +3 12976 13796 14117 +3 12976 14117 13312 +3 12977 13401 13526 +3 12977 13526 13147 +3 12978 13148 13527 +3 12978 13527 13402 +3 12979 15065 15770 +3 12979 15770 13559 +3 12980 13560 15771 +3 12980 15771 15066 +3 12981 13350 14082 +3 12981 14082 13747 +3 12982 13748 14083 +3 12982 14083 13351 +3 12983 14767 15713 +3 12983 15713 13827 +3 12984 13827 15714 +3 12984 15714 14768 +3 12985 12987 13597 +3 12985 13597 13631 +3 12985 13631 13046 +3 12986 13047 13632 +3 12986 13598 12988 +3 12986 13632 13598 +3 12987 13164 13765 +3 12987 13765 13597 +3 12988 13598 13766 +3 12988 13766 13165 +3 12989 13117 13170 +3 12989 13170 13069 +3 12990 13070 13171 +3 12990 13171 13118 +3 12991 15090 16229 +3 12991 16229 13951 +3 12992 13952 16230 +3 12992 16230 15091 +3 12993 13238 13763 +3 12993 13763 13540 +3 12994 13541 13764 +3 12994 13764 13239 +3 12995 13565 14622 +3 12995 14622 14105 +3 12996 14106 14623 +3 12996 14623 13568 +3 12997 13504 15521 +3 12997 15521 14977 +3 12998 14978 15522 +3 12998 15522 13505 +3 12999 14352 15057 +3 12999 15057 13722 +3 13000 13722 15058 +3 13000 15058 14353 +3 13001 14031 14417 +3 13001 14417 13410 +3 13002 13411 14418 +3 13002 14418 14032 +3 13003 13330 15118 +3 13003 15118 13993 +3 13004 13994 15119 +3 13004 15119 13331 +3 13005 13067 13813 +3 13005 13813 13961 +3 13005 13961 13186 +3 13006 13187 13962 +3 13006 13814 13068 +3 13006 13962 13814 +3 13007 14261 15134 +3 13007 15134 13875 +3 13008 13876 15135 +3 13008 15135 14262 +3 13009 13037 13525 +3 13009 13524 13036 +3 13009 13525 13524 +3 13010 13403 13761 +3 13010 13761 13399 +3 13011 13400 13762 +3 13011 13762 13404 +3 13012 13793 16056 +3 13012 16056 15172 +3 13013 15173 16057 +3 13013 16057 13794 +3 13014 14913 16842 +3 13014 16842 14671 +3 13015 14674 16843 +3 13015 16843 14914 +3 13016 13530 14478 +3 13016 14478 14011 +3 13017 14012 14479 +3 13017 14479 13531 +3 13018 13430 13603 +3 13018 13603 13240 +3 13019 13241 13604 +3 13019 13604 13431 +3 13020 14585 16121 +3 13020 16121 14401 +3 13021 14402 16122 +3 13021 16122 14586 +3 13022 13024 13198 +3 13022 13198 13218 +3 13022 13218 13062 +3 13023 13063 13219 +3 13023 13199 13025 +3 13023 13219 13199 +3 13024 13069 13230 +3 13024 13230 13198 +3 13025 13199 13231 +3 13025 13231 13070 +3 13026 14381 15392 +3 13026 15392 14027 +3 13027 14028 15393 +3 13027 15393 14382 +3 13028 13437 14331 +3 13028 14331 13963 +3 13029 13964 14332 +3 13029 14332 13438 +3 13030 14703 16233 +3 13030 16233 14370 +3 13031 14371 16234 +3 13031 16234 14704 +3 13032 13819 14061 +3 13032 14061 13317 +3 13033 13318 14062 +3 13033 14062 13820 +3 13034 14217 15844 +3 13034 15844 14551 +3 13035 14552 15845 +3 13035 15845 14218 +3 13036 13524 13573 +3 13036 13573 13145 +3 13037 13146 13574 +3 13037 13574 13525 +3 13038 13426 13641 +3 13038 13641 13289 +3 13039 13290 13642 +3 13039 13642 13427 +3 13040 13236 14372 +3 13040 14372 14241 +3 13041 14242 14373 +3 13041 14373 13237 +3 13042 13830 14146 +3 13042 14146 13362 +3 13043 13363 14147 +3 13043 14147 13831 +3 13044 13662 14917 +3 13044 14917 14317 +3 13045 14318 14918 +3 13045 14918 13663 +3 13046 13631 13720 +3 13046 13720 13172 +3 13047 13173 13721 +3 13047 13721 13632 +3 13048 13733 14177 +3 13048 14177 13510 +3 13049 13511 14178 +3 13049 14178 13734 +3 13050 13893 14362 +3 13050 14362 13542 +3 13051 13542 14363 +3 13051 14363 13894 +3 13052 13395 13828 +3 13052 13828 13512 +3 13053 13513 13829 +3 13053 13829 13396 +3 13054 13077 13226 +3 13054 13226 13234 +3 13054 13234 13102 +3 13055 13103 13235 +3 13055 13227 13078 +3 13055 13235 13227 +3 13056 13342 13877 +3 13056 13877 13607 +3 13057 13608 13878 +3 13057 13878 13343 +3 13058 14671 16915 +3 13058 16915 15020 +3 13059 15021 16916 +3 13059 16916 14674 +3 13060 13686 15426 +3 13060 15426 14729 +3 13061 14730 15427 +3 13061 15427 13687 +3 13062 13218 13285 +3 13062 13285 13156 +3 13063 13157 13286 +3 13063 13286 13219 +3 13064 13108 13271 +3 13064 13271 13272 +3 13064 13272 13109 +3 13065 13672 14044 +3 13065 14044 13473 +3 13066 13474 14045 +3 13066 14045 13673 +3 13067 13232 13921 +3 13067 13921 13813 +3 13068 13814 13922 +3 13068 13922 13233 +3 13069 13170 13313 +3 13069 13313 13230 +3 13070 13231 13314 +3 13070 13314 13171 +3 13071 13725 16081 +3 13071 16081 15351 +3 13072 15352 16082 +3 13072 16082 13726 +3 13073 13791 15353 +3 13073 15353 14597 +3 13074 14598 15354 +3 13074 15354 13792 +3 13075 13615 14393 +3 13075 14393 13861 +3 13076 13862 14394 +3 13076 14394 13616 +3 13077 13156 13279 +3 13077 13279 13226 +3 13078 13227 13280 +3 13078 13280 13157 +3 13079 13338 13621 +3 13079 13621 13405 +3 13080 13405 13622 +3 13080 13622 13339 +3 13081 15555 16601 +3 13081 16601 13934 +3 13082 13935 16602 +3 13082 16602 15556 +3 13083 13354 14307 +3 13083 14307 14050 +3 13084 14051 14308 +3 13084 14308 13355 +3 13085 15005 15922 +3 13085 15922 13903 +3 13086 13904 15923 +3 13086 15923 15006 +3 13087 13895 14831 +3 13087 14831 14035 +3 13088 14036 14832 +3 13088 14832 13896 +3 13089 13408 13609 +3 13089 13609 13338 +3 13090 13339 13610 +3 13090 13610 13409 +3 13091 13997 14803 +3 13091 14803 13897 +3 13092 13898 14804 +3 13092 14804 13998 +3 13093 13246 13566 +3 13093 13566 13625 +3 13093 13625 13174 +3 13094 13175 13626 +3 13094 13567 13247 +3 13094 13626 13567 +3 13095 14249 14486 +3 13095 14486 13377 +3 13096 13378 14487 +3 13096 14487 14250 +3 13097 13281 13696 +3 13097 13696 13536 +3 13098 13537 13697 +3 13098 13697 13282 +3 13099 13399 13944 +3 13099 13944 13658 +3 13100 13659 13945 +3 13100 13945 13400 +3 13101 13404 13838 +3 13101 13838 13403 +3 13102 13234 13307 +3 13102 13307 13188 +3 13103 13189 13308 +3 13103 13308 13235 +3 13104 13550 14205 +3 13104 14205 13767 +3 13105 13768 14206 +3 13105 14206 13551 +3 13106 14097 14482 +3 13106 14482 13348 +3 13107 13349 14483 +3 13107 14483 14098 +3 13108 13188 13332 +3 13108 13332 13271 +3 13109 13272 13333 +3 13109 13333 13189 +3 13110 13897 14737 +3 13110 14737 13895 +3 13111 13896 14738 +3 13111 14738 13898 +3 13112 14504 15154 +3 13112 15154 13704 +3 13113 13705 15155 +3 13113 15155 14505 +3 13114 14523 15273 +3 13114 15273 14522 +3 13115 13834 14078 +3 13115 14078 13375 +3 13116 13376 14079 +3 13116 14079 13835 +3 13117 13118 13264 +3 13117 13264 13303 +3 13117 13303 13170 +3 13118 13171 13304 +3 13118 13304 13264 +3 13119 13441 14293 +3 13119 14293 13995 +3 13120 13996 14294 +3 13120 14294 13442 +3 13121 13477 14029 +3 13121 14029 13706 +3 13122 13707 14030 +3 13122 14030 13478 +3 13123 13757 16347 +3 13123 16347 15274 +3 13124 15275 16348 +3 13124 16348 13758 +3 13125 13569 13847 +3 13125 13847 13420 +3 13126 13421 13848 +3 13126 13848 13570 +3 13127 14092 16147 +3 13127 16147 15047 +3 13128 15048 16148 +3 13128 16148 14093 +3 13129 14907 15705 +3 13129 15705 13815 +3 13130 13816 15706 +3 13130 15706 14908 +3 13131 14985 15456 +3 13131 15456 13547 +3 13132 13548 15457 +3 13132 15457 14986 +3 13133 13393 14672 +3 13133 14672 14411 +3 13134 14412 14673 +3 13134 14673 13394 +3 13135 14152 15077 +3 13135 15077 14068 +3 13136 14069 15078 +3 13136 15078 14153 +3 13137 13979 14387 +3 13137 14387 13553 +3 13138 13554 14388 +3 13138 14388 13980 +3 13139 14484 16032 +3 13139 16032 14476 +3 13140 14477 16033 +3 13140 16033 14485 +3 13141 14068 15055 +3 13141 15055 14134 +3 13142 14135 15056 +3 13142 15056 14069 +3 13143 13755 16026 +3 13143 16026 15303 +3 13144 15304 16027 +3 13144 16027 13756 +3 13145 13573 13680 +3 13145 13680 13254 +3 13146 13255 13681 +3 13146 13681 13574 +3 13147 13526 13611 +3 13147 13611 13248 +3 13148 13249 13612 +3 13148 13612 13527 +3 13149 13563 14751 +3 13149 14751 14360 +3 13150 14361 14752 +3 13150 14752 13564 +3 13151 14099 14439 +3 13151 14439 13514 +3 13152 13515 14440 +3 13152 14440 14100 +3 13153 13179 15350 +3 13153 15349 13178 +3 13153 15350 15349 +3 13154 14191 14462 +3 13154 14462 13481 +3 13155 13482 14463 +3 13155 14463 14192 +3 13156 13285 13391 +3 13156 13391 13279 +3 13157 13280 13392 +3 13157 13392 13286 +3 13158 15073 15750 +3 13158 15750 13741 +3 13159 13742 15751 +3 13159 15751 15074 +3 13160 13489 13759 +3 13160 13759 13499 +3 13161 13500 13760 +3 13161 13760 13490 +3 13162 13387 13851 +3 13162 13851 13646 +3 13163 13647 13852 +3 13163 13852 13388 +3 13164 13277 13932 +3 13164 13932 13765 +3 13165 13766 13933 +3 13165 13933 13278 +3 13166 15100 15944 +3 13166 15944 13853 +3 13167 13854 15945 +3 13167 15945 15101 +3 13168 13727 14589 +3 13168 14589 14059 +3 13169 14060 14590 +3 13169 14590 13728 +3 13170 13303 13422 +3 13170 13422 13313 +3 13171 13314 13423 +3 13171 13423 13304 +3 13172 13720 13863 +3 13172 13863 13346 +3 13173 13347 13864 +3 13173 13864 13721 +3 13174 13625 13737 +3 13174 13737 13287 +3 13175 13288 13738 +3 13175 13738 13626 +3 13176 13805 14095 +3 13176 14095 13453 +3 13177 13454 14096 +3 13177 14096 13806 +3 13178 15349 15398 +3 13178 15398 13262 +3 13179 13263 15399 +3 13179 15399 15350 +3 13180 13865 15343 +3 13180 15343 14577 +3 13181 14578 15344 +3 13181 15344 13866 +3 13182 15722 16319 +3 13182 16319 13712 +3 13183 13713 16320 +3 13183 16320 15723 +3 13184 13591 14749 +3 13184 14749 14385 +3 13185 14386 14750 +3 13185 14750 13592 +3 13186 13961 14185 +3 13186 14185 13383 +3 13187 13384 14186 +3 13187 14186 13962 +3 13188 13307 13416 +3 13188 13416 13332 +3 13189 13333 13417 +3 13189 13417 13308 +3 13190 14565 16462 +3 13190 16462 14901 +3 13191 14902 16463 +3 13191 16463 14566 +3 13192 13623 16087 +3 13192 16087 14484 +3 13193 14485 16088 +3 13193 16088 13624 +3 13194 13731 15623 +3 13194 15623 15024 +3 13195 15025 15624 +3 13195 15624 13732 +3 13196 14221 16630 +3 13196 16630 15549 +3 13197 15550 16631 +3 13197 16631 14222 +3 13198 13230 13435 +3 13198 13424 13218 +3 13198 13435 13424 +3 13199 13219 13425 +3 13199 13425 13436 +3 13199 13436 13231 +3 13200 13975 16036 +3 13200 16036 15276 +3 13201 15277 16037 +3 13201 16037 13976 +3 13202 13723 15583 +3 13202 15583 15007 +3 13203 15008 15584 +3 13203 15584 13724 +3 13204 13929 14687 +3 13204 14687 13949 +3 13205 13950 14688 +3 13205 14688 13930 +3 13206 14709 15601 +3 13206 15601 14025 +3 13207 14026 15602 +3 13207 15602 14710 +3 13208 13949 14691 +3 13208 14691 13940 +3 13209 13941 14692 +3 13209 14692 13950 +3 13210 13471 14277 +3 13210 14277 14057 +3 13211 14058 14278 +3 13211 14278 13472 +3 13212 14835 15724 +3 13212 15724 14017 +3 13213 14018 15725 +3 13213 15725 14836 +3 13214 13789 14195 +3 13214 14195 13629 +3 13215 13630 14196 +3 13215 14196 13790 +3 13216 13775 15084 +3 13216 15084 14541 +3 13217 14542 15085 +3 13217 15085 13776 +3 13218 13424 13463 +3 13218 13463 13285 +3 13219 13286 13464 +3 13219 13464 13425 +3 13220 14496 15756 +3 13220 15756 14364 +3 13221 14365 15757 +3 13221 15757 14497 +3 13222 14646 15034 +3 13222 15034 13601 +3 13223 13602 15035 +3 13223 15035 14647 +3 13224 14225 15599 +3 13224 15599 14545 +3 13225 14546 15600 +3 13225 15600 14226 +3 13226 13279 13443 +3 13226 13418 13234 +3 13226 13443 13418 +3 13227 13235 13419 +3 13227 13419 13444 +3 13227 13444 13280 +3 13228 14134 15186 +3 13228 15186 14279 +3 13229 14280 15187 +3 13229 15187 14135 +3 13230 13313 13495 +3 13230 13495 13435 +3 13231 13436 13496 +3 13231 13496 13314 +3 13232 13451 14148 +3 13232 14148 13921 +3 13233 13922 14149 +3 13233 14149 13452 +3 13234 13418 13457 +3 13234 13457 13307 +3 13235 13308 13458 +3 13235 13458 13419 +3 13236 13694 14809 +3 13236 14809 14372 +3 13237 14373 14810 +3 13237 14810 13695 +3 13238 13512 14013 +3 13238 14013 13763 +3 13239 13764 14014 +3 13239 14014 13513 +3 13240 13603 13839 +3 13240 13839 13489 +3 13241 13490 13840 +3 13241 13840 13604 +3 13242 13613 14693 +3 13242 14693 14329 +3 13243 14330 14694 +3 13243 14694 13614 +3 13244 14423 14927 +3 13244 14927 13781 +3 13245 13782 14928 +3 13245 14928 14424 +3 13246 13555 13869 +3 13246 13869 13566 +3 13247 13567 13870 +3 13247 13870 13556 +3 13248 13611 13777 +3 13248 13777 13408 +3 13249 13409 13778 +3 13249 13778 13612 +3 13250 14364 15796 +3 13250 15796 14567 +3 13251 14570 15797 +3 13251 15797 14365 +3 13252 14021 14518 +3 13252 14518 13787 +3 13253 13788 14519 +3 13253 14519 14022 +3 13254 13680 13843 +3 13254 13843 13426 +3 13255 13427 13844 +3 13255 13844 13681 +3 13256 14215 14956 +3 13256 14956 13997 +3 13257 13998 14957 +3 13257 14957 14216 +3 13258 14863 16111 +3 13258 16111 14350 +3 13259 14351 16112 +3 13259 16112 14864 +3 13260 13957 14281 +3 13260 14281 13575 +3 13261 13576 14282 +3 13261 14282 13958 +3 13262 15398 16368 +3 13262 16368 13981 +3 13263 13982 16369 +3 13263 16369 15399 +3 13264 13304 13468 +3 13264 13467 13303 +3 13264 13468 13467 +3 13265 13940 14755 +3 13265 14755 14122 +3 13266 14123 14756 +3 13266 14756 13941 +3 13267 13599 15227 +3 13267 15227 14839 +3 13268 14840 15228 +3 13268 15228 13600 +3 13269 14642 15039 +3 13269 15039 13648 +3 13270 13649 15040 +3 13270 15040 14643 +3 13271 13332 13518 +3 13271 13501 13272 +3 13271 13518 13501 +3 13272 13501 13519 +3 13272 13519 13333 +3 13273 14374 15269 +3 13273 15269 14152 +3 13274 14153 15270 +3 13274 15270 14375 +3 13275 13340 14066 +3 13275 14037 13276 +3 13275 14066 14037 +3 13276 14037 14067 +3 13276 14067 13341 +3 13277 13445 14118 +3 13277 14118 13932 +3 13278 13933 14119 +3 13278 14119 13446 +3 13279 13391 13538 +3 13279 13538 13443 +3 13280 13444 13539 +3 13280 13539 13392 +3 13281 13499 13885 +3 13281 13885 13696 +3 13282 13697 13886 +3 13282 13886 13500 +3 13283 14169 14801 +3 13283 14801 13929 +3 13284 13930 14802 +3 13284 14802 14170 +3 13285 13463 13545 +3 13285 13545 13391 +3 13286 13392 13546 +3 13286 13546 13464 +3 13287 13737 13859 +3 13287 13859 13430 +3 13288 13431 13860 +3 13288 13860 13738 +3 13289 13641 13899 +3 13289 13899 13555 +3 13290 13556 13900 +3 13290 13900 13642 +3 13291 13871 16615 +3 13291 16615 15959 +3 13292 15960 16616 +3 13292 16616 13872 +3 13293 15703 16543 +3 13293 16543 13999 +3 13294 14000 16544 +3 13294 16544 15704 +3 13295 14114 15468 +3 13295 15468 14603 +3 13296 14604 15469 +3 13296 15469 14115 +3 13297 13385 14023 +3 13297 14023 13676 +3 13298 13677 14024 +3 13298 14024 13386 +3 13299 14797 15505 +3 13299 15505 13925 +3 13300 13926 15506 +3 13300 15506 14798 +3 13301 14070 16123 +3 13301 16123 15223 +3 13302 15224 16124 +3 13302 16124 14071 +3 13303 13467 13571 +3 13303 13571 13422 +3 13304 13423 13572 +3 13304 13572 13468 +3 13305 14599 15225 +3 13305 15225 13883 +3 13306 13884 15226 +3 13306 15226 14600 +3 13307 13457 13532 +3 13307 13532 13416 +3 13308 13417 13533 +3 13308 13533 13458 +3 13309 14409 15874 +3 13309 15874 14632 +3 13310 14633 15875 +3 13310 15875 14410 +3 13311 13652 14433 +3 13311 14433 14116 +3 13312 14117 14434 +3 13312 14434 13653 +3 13313 13422 13579 +3 13313 13579 13495 +3 13314 13496 13580 +3 13314 13580 13423 +3 13315 14739 16293 +3 13315 16293 14791 +3 13316 14792 16296 +3 13316 16296 14740 +3 13317 14061 14358 +3 13317 14358 13617 +3 13318 13618 14359 +3 13318 14359 14062 +3 13319 15613 16436 +3 13319 16436 14585 +3 13320 14586 16437 +3 13320 16437 15614 +3 13321 15319 17186 +3 13321 17186 14913 +3 13322 14914 17187 +3 13322 17187 15320 +3 13323 15969 17003 +3 13323 17003 14227 +3 13324 14228 17004 +3 13324 17004 15970 +3 13325 14035 15051 +3 13325 15051 14309 +3 13326 14310 15052 +3 13326 15052 14036 +3 13327 14342 14953 +3 13327 14953 14343 +3 13328 14911 15675 +3 13328 15675 13977 +3 13329 13978 15676 +3 13329 15676 14912 +3 13330 13690 15499 +3 13330 15499 15118 +3 13331 15119 15500 +3 13331 15500 13691 +3 13332 13416 13577 +3 13332 13577 13518 +3 13333 13519 13578 +3 13333 13578 13417 +3 13334 14575 15184 +3 13334 15184 13911 +3 13335 13912 15185 +3 13335 15185 14576 +3 13336 13359 14728 +3 13336 14727 13358 +3 13336 14728 14727 +3 13337 14020 14455 +3 13337 14455 14019 +3 13338 13609 13889 +3 13338 13889 13621 +3 13339 13622 13890 +3 13339 13890 13610 +3 13340 13412 14136 +3 13340 14136 14066 +3 13341 14067 14137 +3 13341 14137 13413 +3 13342 13646 14199 +3 13342 14199 13877 +3 13343 13878 14200 +3 13343 14200 13647 +3 13344 14160 16395 +3 13344 16395 15454 +3 13345 15455 16396 +3 13345 16396 14161 +3 13346 13863 14074 +3 13346 14074 13569 +3 13347 13570 14075 +3 13347 14075 13864 +3 13348 14482 14743 +3 13348 14743 13639 +3 13349 13640 14744 +3 13349 14744 14483 +3 13350 13767 14458 +3 13350 14458 14082 +3 13351 14083 14459 +3 13351 14459 13768 +3 13352 13947 15658 +3 13352 15658 14954 +3 13353 14955 15659 +3 13353 15659 13948 +3 13354 13655 14593 +3 13354 14593 14307 +3 13355 14308 14594 +3 13355 14594 13656 +3 13356 15666 16643 +3 13356 16643 14231 +3 13357 14232 16644 +3 13357 16644 15667 +3 13358 14727 14763 +3 13358 14763 13479 +3 13359 13480 14764 +3 13359 14764 14728 +3 13360 14699 16008 +3 13360 16008 14496 +3 13361 14497 16009 +3 13361 16009 14700 +3 13362 14146 14464 +3 13362 14464 13733 +3 13363 13734 14465 +3 13363 14465 14147 +3 13364 14508 17282 +3 13364 17282 15930 +3 13365 15931 17283 +3 13365 17283 14509 +3 13366 15292 16355 +3 13366 16355 15291 +3 13367 15053 15551 +3 13367 15551 13811 +3 13368 13812 15552 +3 13368 15552 15054 +3 13369 14873 15579 +3 13369 15579 13807 +3 13370 13808 15580 +3 13370 15580 14874 +3 13371 15201 16693 +3 13371 16693 14703 +3 13372 14704 16694 +3 13372 16694 15202 +3 13373 14441 15480 +3 13373 15480 14456 +3 13374 14457 15481 +3 13374 15481 14442 +3 13375 14078 14356 +3 13375 14356 13672 +3 13376 13673 14357 +3 13376 14357 14079 +3 13377 14486 14799 +3 13377 14799 13714 +3 13378 13715 14800 +3 13378 14800 14487 +3 13379 13917 15396 +3 13379 15396 14869 +3 13380 14870 15397 +3 13380 15397 13918 +3 13381 13953 15501 +3 13381 15501 14875 +3 13382 14876 15502 +3 13382 15502 13954 +3 13383 14185 14403 +3 13383 14403 13635 +3 13384 13636 14404 +3 13384 14404 14186 +3 13385 13540 14154 +3 13385 14154 14023 +3 13386 14024 14155 +3 13386 14155 13541 +3 13387 13676 14138 +3 13387 14138 13851 +3 13388 13852 14139 +3 13388 14139 13677 +3 13389 14209 16044 +3 13389 16044 15122 +3 13390 15123 16045 +3 13390 16045 14210 +3 13391 13545 13692 +3 13391 13692 13538 +3 13392 13539 13693 +3 13392 13693 13546 +3 13393 13702 14975 +3 13393 14975 14672 +3 13394 14673 14976 +3 13394 14976 13703 +3 13395 13783 14201 +3 13395 14201 13828 +3 13396 13829 14202 +3 13396 14202 13784 +3 13397 13455 13965 +3 13397 13923 13401 +3 13397 13965 13923 +3 13398 13402 13924 +3 13398 13924 13966 +3 13398 13966 13456 +3 13399 13761 14287 +3 13399 14287 13944 +3 13400 13945 14288 +3 13400 14288 13762 +3 13401 13923 13959 +3 13401 13959 13526 +3 13402 13527 13960 +3 13402 13960 13924 +3 13403 13838 14183 +3 13403 14183 13761 +3 13404 13762 14184 +3 13404 14184 13838 +3 13405 13621 13931 +3 13405 13931 13622 +3 13406 15146 15946 +3 13406 15946 14124 +3 13407 14125 15947 +3 13407 15947 15147 +3 13408 13777 13927 +3 13408 13927 13609 +3 13409 13610 13928 +3 13409 13928 13778 +3 13410 14417 14858 +3 13410 14858 13867 +3 13411 13868 14859 +3 13411 14859 14418 +3 13412 13607 14245 +3 13412 14245 14136 +3 13413 14137 14246 +3 13413 14246 13608 +3 13414 13743 14879 +3 13414 14879 15162 +3 13414 15162 13668 +3 13415 13669 15163 +3 13415 14880 13744 +3 13415 15163 14880 +3 13416 13532 13678 +3 13416 13678 13577 +3 13417 13578 13679 +3 13417 13679 13533 +3 13418 13443 13633 +3 13418 13633 13637 +3 13418 13637 13457 +3 13419 13458 13638 +3 13419 13634 13444 +3 13419 13638 13634 +3 13420 13847 14213 +3 13420 14213 13783 +3 13421 13784 14214 +3 13421 14214 13848 +3 13422 13571 13729 +3 13422 13729 13579 +3 13423 13580 13730 +3 13423 13730 13572 +3 13424 13435 13664 +3 13424 13664 13674 +3 13424 13674 13463 +3 13425 13464 13675 +3 13425 13665 13436 +3 13425 13675 13665 +3 13426 13843 14054 +3 13426 14054 13641 +3 13427 13642 14055 +3 13427 14055 13844 +3 13428 14547 15637 +3 13428 15637 14441 +3 13429 14442 15638 +3 13429 15638 14548 +3 13430 13859 14046 +3 13430 14046 13603 +3 13431 13604 14047 +3 13431 14047 13860 +3 13432 14354 15621 +3 13432 15621 15049 +3 13433 15050 15622 +3 13433 15622 14355 +3 13434 14005 14380 +3 13434 14380 14006 +3 13435 13495 13718 +3 13435 13718 13664 +3 13436 13665 13719 +3 13436 13719 13496 +3 13437 13861 14723 +3 13437 14723 14331 +3 13438 14332 14724 +3 13438 14724 13862 +3 13439 14003 15462 +3 13439 15462 14837 +3 13440 14838 15463 +3 13440 15463 14004 +3 13441 14122 14951 +3 13441 14951 14293 +3 13442 14294 14952 +3 13442 14952 14123 +3 13443 13538 13735 +3 13443 13735 13633 +3 13444 13634 13736 +3 13444 13736 13539 +3 13445 13658 14285 +3 13445 14285 14118 +3 13446 14119 14286 +3 13446 14286 13659 +3 13447 14567 16137 +3 13447 16137 14843 +3 13448 14844 16138 +3 13448 16138 14570 +3 13449 14279 15428 +3 13449 15428 14524 +3 13450 14525 15429 +3 13450 15429 14280 +3 13451 13706 14366 +3 13451 14366 14148 +3 13452 14149 14367 +3 13452 14367 13707 +3 13453 14095 14397 +3 13453 14397 13789 +3 13454 13790 14398 +3 13454 14398 14096 +3 13455 13536 14048 +3 13455 14048 13965 +3 13456 13966 14049 +3 13456 14049 13537 +3 13457 13637 13716 +3 13457 13716 13532 +3 13458 13533 13717 +3 13458 13717 13638 +3 13459 14551 15856 +3 13459 15856 14608 +3 13460 14609 15857 +3 13460 15857 14552 +3 13461 14456 15715 +3 13461 15715 14612 +3 13462 14613 15718 +3 13462 15718 14457 +3 13463 13674 13751 +3 13463 13751 13545 +3 13464 13546 13752 +3 13464 13752 13675 +3 13465 14376 16563 +3 13465 16563 15490 +3 13466 15491 16564 +3 13466 16564 14377 +3 13467 13468 13654 +3 13467 13654 13779 +3 13467 13779 13571 +3 13468 13572 13780 +3 13468 13780 13654 +3 13469 14889 15926 +3 13469 15926 14381 +3 13470 14382 15927 +3 13470 15927 14890 +3 13471 13747 14531 +3 13471 14531 14277 +3 13472 14278 14532 +3 13472 14532 13748 +3 13473 14044 14537 +3 13473 14537 13969 +3 13474 13970 14538 +3 13474 14538 14045 +3 13475 15032 17148 +3 13475 17148 15329 +3 13476 15330 17149 +3 13476 17149 15033 +3 13477 13987 14543 +3 13477 14543 14029 +3 13478 14030 14544 +3 13478 14544 13988 +3 13479 14763 14919 +3 13479 14919 13627 +3 13480 13628 14920 +3 13480 14920 14764 +3 13481 14462 15231 +3 13481 15231 14215 +3 13482 14216 15232 +3 13482 15232 14463 +3 13483 14389 14775 +3 13483 14775 13893 +3 13484 13894 14776 +3 13484 14776 14390 +3 13485 15020 17408 +3 13485 17408 15565 +3 13486 15566 17409 +3 13486 17409 15021 +3 13487 13488 15196 +3 13487 15196 15229 +3 13487 15229 13516 +3 13488 13517 15230 +3 13488 15230 15196 +3 13489 13839 14126 +3 13489 14126 13759 +3 13490 13760 14127 +3 13490 14127 13840 +3 13491 14997 16527 +3 13491 16527 14739 +3 13492 14740 16528 +3 13492 16528 14998 +3 13493 13969 14557 +3 13493 14557 13987 +3 13494 13988 14558 +3 13494 14558 13970 +3 13495 13579 13797 +3 13495 13797 13718 +3 13496 13719 13798 +3 13496 13798 13580 +3 13497 14765 16494 +3 13497 16494 14979 +3 13498 14980 16495 +3 13498 16495 14766 +3 13499 13759 14144 +3 13499 14144 13885 +3 13500 13886 14145 +3 13500 14145 13760 +3 13501 13518 13773 +3 13501 13773 13774 +3 13501 13774 13519 +3 13502 15418 17214 +3 13502 17214 15032 +3 13503 15033 17215 +3 13503 17215 15419 +3 13504 14040 16203 +3 13504 16203 15521 +3 13505 15522 16204 +3 13505 16204 14041 +3 13506 15575 16456 +3 13506 16456 14253 +3 13507 14254 16457 +3 13507 16457 15576 +3 13508 14291 16139 +3 13508 16139 15237 +3 13509 15238 16140 +3 13509 16140 14291 +3 13510 14177 14626 +3 13510 14626 14005 +3 13511 14006 14627 +3 13511 14627 14178 +3 13512 13828 14311 +3 13512 14311 14013 +3 13513 14014 14312 +3 13513 14312 13829 +3 13514 14439 15063 +3 13514 15063 14169 +3 13515 14170 15064 +3 13515 15064 14440 +3 13516 15229 15315 +3 13516 15315 13684 +3 13517 13685 15316 +3 13517 15316 15230 +3 13518 13577 13801 +3 13518 13801 13773 +3 13519 13774 13802 +3 13519 13802 13578 +3 13520 14167 14811 +3 13520 14811 14237 +3 13521 14238 14812 +3 13521 14812 14168 +3 13522 14229 14815 +3 13522 14815 14179 +3 13523 14180 14816 +3 13523 14816 14230 +3 13524 13525 14065 +3 13524 14065 14101 +3 13524 14101 13573 +3 13525 13574 14102 +3 13525 14102 14065 +3 13526 13959 14042 +3 13526 14042 13611 +3 13527 13612 14043 +3 13527 14043 13960 +3 13528 14368 16938 +3 13528 16938 15987 +3 13529 15988 16939 +3 13529 16939 14369 +3 13530 14094 15016 +3 13530 15016 14478 +3 13531 14479 15017 +3 13531 15017 14094 +3 13532 13716 13825 +3 13532 13825 13678 +3 13533 13679 13826 +3 13533 13826 13717 +3 13534 14179 14825 +3 13534 14825 14167 +3 13535 14168 14826 +3 13535 14826 14180 +3 13536 13696 14187 +3 13536 14187 14048 +3 13537 14049 14188 +3 13537 14188 13697 +3 13538 13692 13855 +3 13538 13855 13735 +3 13539 13736 13856 +3 13539 13856 13693 +3 13540 13763 14336 +3 13540 14336 14154 +3 13541 14155 14337 +3 13541 14337 13764 +3 13542 14362 14849 +3 13542 14849 14363 +3 13543 14488 17392 +3 13543 17392 16271 +3 13544 16272 17393 +3 13544 17393 14489 +3 13545 13751 13857 +3 13545 13857 13692 +3 13546 13693 13858 +3 13546 13858 13752 +3 13547 15456 16010 +3 13547 16010 14015 +3 13548 14016 16011 +3 13548 16011 15457 +3 13549 14791 16621 +3 13549 16621 15160 +3 13550 13795 14657 +3 13550 14657 14205 +3 13551 14206 14658 +3 13551 14658 13796 +3 13552 15161 16622 +3 13552 16622 14792 +3 13553 14387 14827 +3 13553 14827 14021 +3 13554 14022 14828 +3 13554 14828 14388 +3 13555 13899 14235 +3 13555 14235 13869 +3 13556 13870 14236 +3 13556 14236 13900 +3 13557 14502 16984 +3 13557 16984 15868 +3 13558 15869 16985 +3 13558 16985 14503 +3 13559 15770 16476 +3 13559 16476 14193 +3 13560 14194 16477 +3 13560 16477 15771 +3 13561 14711 15597 +3 13561 15597 14374 +3 13562 14375 15598 +3 13562 15598 14712 +3 13563 14059 15335 +3 13563 15335 14751 +3 13564 14752 15336 +3 13564 15336 14060 +3 13565 14011 15116 +3 13565 15116 14622 +3 13566 13869 14130 +3 13566 14130 13625 +3 13567 13626 14131 +3 13567 14131 13870 +3 13568 14623 15117 +3 13568 15117 14012 +3 13569 14074 14338 +3 13569 14338 13847 +3 13570 13848 14339 +3 13570 14339 14075 +3 13571 13779 13901 +3 13571 13901 13729 +3 13572 13730 13902 +3 13572 13902 13780 +3 13573 14101 14189 +3 13573 14189 13680 +3 13574 13681 14190 +3 13574 14190 14102 +3 13575 14281 14474 +3 13575 14474 13805 +3 13576 13806 14475 +3 13576 14475 14282 +3 13577 13678 13879 +3 13577 13879 13801 +3 13578 13802 13880 +3 13578 13880 13679 +3 13579 13729 13909 +3 13579 13909 13797 +3 13580 13798 13910 +3 13580 13910 13730 +3 13581 15695 16695 +3 13581 16695 14223 +3 13582 14224 16696 +3 13582 16696 15696 +3 13583 14512 15259 +3 13583 15259 13973 +3 13584 13974 15260 +3 13584 15260 14513 +3 13585 14378 16351 +3 13585 16351 15458 +3 13586 15459 16352 +3 13586 16352 14379 +3 13587 14901 16426 +3 13587 16426 14903 +3 13588 14904 16427 +3 13588 16427 14902 +3 13589 14407 17129 +3 13589 17129 16221 +3 13590 16222 17130 +3 13590 17130 14408 +3 13591 14105 15288 +3 13591 15288 14749 +3 13592 14750 15289 +3 13592 15289 14106 +3 13593 14757 15854 +3 13593 15854 14547 +3 13594 14548 15855 +3 13594 15855 14758 +3 13595 15726 16399 +3 13595 16399 14219 +3 13596 14220 16400 +3 13596 16400 15727 +3 13597 13765 14405 +3 13597 14267 13631 +3 13597 14405 14267 +3 13598 13632 14268 +3 13598 14268 14406 +3 13598 14406 13766 +3 13599 14001 15660 +3 13599 15660 15227 +3 13600 15228 15661 +3 13600 15661 14002 +3 13601 15034 15519 +3 13601 15519 14076 +3 13602 14077 15520 +3 13602 15520 15035 +3 13603 14046 14265 +3 13603 14265 13839 +3 13604 13840 14266 +3 13604 14266 14047 +3 13605 15045 16325 +3 13605 16325 14699 +3 13606 14700 16326 +3 13606 16326 15046 +3 13607 13877 14460 +3 13607 14460 14245 +3 13608 14246 14461 +3 13608 14461 13878 +3 13609 13927 14211 +3 13609 14211 13889 +3 13610 13890 14212 +3 13610 14212 13928 +3 13611 14042 14175 +3 13611 14175 13777 +3 13612 13778 14176 +3 13612 14176 14043 +3 13613 14309 15431 +3 13613 15431 14693 +3 13614 14694 15432 +3 13614 15432 14310 +3 13615 14019 14741 +3 13615 14741 14393 +3 13616 14394 14742 +3 13616 14742 14020 +3 13617 14358 14947 +3 13617 14947 14229 +3 13618 14230 14948 +3 13618 14948 14359 +3 13619 14545 15668 +3 13619 15668 13913 +3 13620 13914 15669 +3 13620 15669 14546 +3 13621 13889 14207 +3 13621 14207 13931 +3 13622 13931 14208 +3 13622 14208 13890 +3 13623 14142 16649 +3 13623 16649 16087 +3 13624 16088 16650 +3 13624 16650 14143 +3 13625 14130 14203 +3 13625 14203 13737 +3 13626 13738 14204 +3 13626 14204 14131 +3 13627 14919 15476 +3 13627 15476 14140 +3 13628 14141 15477 +3 13628 15477 14920 +3 13629 14195 14568 +3 13629 14568 13834 +3 13630 13835 14569 +3 13630 14569 14196 +3 13631 14267 14315 +3 13631 14315 13720 +3 13632 13721 14316 +3 13632 14316 14268 +3 13633 13735 13942 +3 13633 13873 13637 +3 13633 13942 13873 +3 13634 13638 13874 +3 13634 13874 13943 +3 13634 13943 13736 +3 13635 14403 14666 +3 13635 14666 13830 +3 13636 13831 14667 +3 13636 14667 14404 +3 13637 13873 13907 +3 13637 13907 13716 +3 13638 13717 13908 +3 13638 13908 13874 +3 13639 14743 15120 +3 13639 15120 13979 +3 13640 13980 15121 +3 13640 15121 14744 +3 13641 14054 14295 +3 13641 14295 13899 +3 13642 13900 14296 +3 13642 14296 14055 +3 13643 13841 14841 +3 13643 14638 13819 +3 13643 14841 14638 +3 13644 13820 14639 +3 13644 14639 14842 +3 13644 14842 13842 +3 13645 13666 15790 +3 13645 15790 15791 +3 13645 15791 13667 +3 13646 13851 14395 +3 13646 14395 14199 +3 13647 14200 14396 +3 13647 14396 13852 +3 13648 15039 15509 +3 13648 15509 14072 +3 13649 14073 15510 +3 13649 15510 15040 +3 13650 15527 16571 +3 13650 16571 14553 +3 13651 14554 16572 +3 13651 16572 15528 +3 13652 14237 15003 +3 13652 15003 14433 +3 13653 14434 15004 +3 13653 15004 14238 +3 13654 13780 13946 +3 13654 13946 13779 +3 13655 13963 14899 +3 13655 14899 14593 +3 13656 14594 14900 +3 13656 14900 13964 +3 13657 13682 14620 +3 13657 14620 14621 +3 13657 14621 13683 +3 13658 13944 14549 +3 13658 14549 14285 +3 13659 14286 14550 +3 13659 14550 13945 +3 13660 14903 16482 +3 13660 16482 14090 +3 13661 14091 16483 +3 13661 16483 14904 +3 13662 14333 15662 +3 13662 15662 14917 +3 13663 14918 15663 +3 13663 15663 14333 +3 13664 13718 13971 +3 13664 13938 13674 +3 13664 13971 13938 +3 13665 13675 13939 +3 13665 13939 13972 +3 13665 13972 13719 +3 13666 13753 15862 +3 13666 15862 15790 +3 13667 15791 15863 +3 13667 15863 13754 +3 13668 15162 15478 +3 13668 15478 13955 +3 13669 13956 15479 +3 13669 15479 15163 +3 13670 15996 16994 +3 13670 16994 14606 +3 13671 14607 16995 +3 13671 16995 15997 +3 13672 14356 14664 +3 13672 14664 14044 +3 13673 14045 14665 +3 13673 14665 14357 +3 13674 13938 13991 +3 13674 13991 13751 +3 13675 13752 13992 +3 13675 13992 13939 +3 13676 14023 14437 +3 13676 14437 14138 +3 13677 14139 14438 +3 13677 14438 14024 +3 13678 13825 13989 +3 13678 13989 13879 +3 13679 13880 13990 +3 13679 13990 13826 +3 13680 14189 14321 +3 13680 14321 13843 +3 13681 13844 14322 +3 13681 14322 14190 +3 13682 13771 14689 +3 13682 14689 14620 +3 13683 14621 14690 +3 13683 14690 13772 +3 13684 15315 15981 +3 13684 15981 14269 +3 13685 14270 15982 +3 13685 15982 15316 +3 13686 14346 16195 +3 13686 16195 15426 +3 13687 15427 16196 +3 13687 16196 14347 +3 13688 15263 17085 +3 13688 17085 15319 +3 13689 15320 17086 +3 13689 17086 15264 +3 13690 14103 15983 +3 13690 15983 15499 +3 13691 15500 15984 +3 13691 15984 14104 +3 13692 13857 14038 +3 13692 14038 13855 +3 13693 13856 14039 +3 13693 14039 13858 +3 13694 13983 15361 +3 13694 15361 14809 +3 13695 14810 15362 +3 13695 15362 13984 +3 13696 13885 14327 +3 13696 14327 14187 +3 13697 14188 14328 +3 13697 14328 13886 +3 13698 15363 16828 +3 13698 16828 14997 +3 13699 14998 16829 +3 13699 16829 15364 +3 13700 15345 17095 +3 13700 17095 15263 +3 13701 15264 17096 +3 13701 17096 15346 +3 13702 14033 15355 +3 13702 15355 14975 +3 13703 14976 15356 +3 13703 15356 14034 +3 13704 15154 15910 +3 13704 15910 14352 +3 13705 14353 15911 +3 13705 15911 15155 +3 13706 14029 14630 +3 13706 14630 14366 +3 13707 14367 14631 +3 13707 14631 14030 +3 13708 13709 14668 +3 13708 14668 14695 +3 13708 14695 13749 +3 13709 13750 14696 +3 13709 14696 14668 +3 13710 14612 15992 +3 13710 15992 14949 +3 13711 14950 15993 +3 13711 15993 14613 +3 13712 16319 16936 +3 13712 16936 14273 +3 13713 14274 16937 +3 13713 16937 16320 +3 13714 14799 15148 +3 13714 15148 14031 +3 13715 14032 15149 +3 13715 15149 14800 +3 13716 13907 14009 +3 13716 14009 13825 +3 13717 13826 14010 +3 13717 14010 13908 +3 13718 13797 14052 +3 13718 14052 13971 +3 13719 13972 14053 +3 13719 14053 13798 +3 13720 14315 14449 +3 13720 14449 13863 +3 13721 13864 14450 +3 13721 14450 14316 +3 13722 15057 15827 +3 13722 15827 15058 +3 13723 14275 16239 +3 13723 16239 15583 +3 13724 15584 16240 +3 13724 16240 14276 +3 13725 14415 16892 +3 13725 16892 16081 +3 13726 16082 16893 +3 13726 16893 14416 +3 13727 14329 15221 +3 13727 15221 14589 +3 13728 14590 15222 +3 13728 15222 14330 +3 13729 13901 14110 +3 13729 14110 13909 +3 13730 13910 14111 +3 13730 14111 13902 +3 13731 14391 16410 +3 13731 16410 15623 +3 13732 15624 16411 +3 13732 16411 14392 +3 13733 14464 14856 +3 13733 14856 14177 +3 13734 14178 14857 +3 13734 14857 14465 +3 13735 13855 14084 +3 13735 14084 13942 +3 13736 13943 14085 +3 13736 14085 13856 +3 13737 14203 14301 +3 13737 14301 13859 +3 13738 13860 14302 +3 13738 14302 14204 +3 13739 15329 17471 +3 13739 17471 15681 +3 13740 15682 17472 +3 13740 17472 15330 +3 13741 15750 16472 +3 13741 16472 14470 +3 13742 14471 16473 +3 13742 16473 15751 +3 13743 14524 15786 +3 13743 15786 14879 +3 13744 14880 15787 +3 13744 15787 14525 +3 13745 13746 14860 +3 13745 14860 14885 +3 13745 14885 13799 +3 13746 13800 14886 +3 13746 14886 14860 +3 13747 14082 14854 +3 13747 14854 14531 +3 13748 14532 14855 +3 13748 14855 14083 +3 13749 14695 14733 +3 13749 14733 13836 +3 13750 13837 14734 +3 13750 14734 14696 +3 13751 13991 14112 +3 13751 14112 13857 +3 13752 13858 14113 +3 13752 14113 13992 +3 13753 14451 16752 +3 13753 16752 15862 +3 13754 15863 16753 +3 13754 16753 14452 +3 13755 14979 16765 +3 13755 16765 16026 +3 13756 16027 16766 +3 13756 16766 14980 +3 13757 14591 17311 +3 13757 17311 16347 +3 13758 16348 17312 +3 13758 17312 14592 +3 13759 14126 14413 +3 13759 14413 14144 +3 13760 14145 14414 +3 13760 14414 14127 +3 13761 14183 14683 +3 13761 14683 14287 +3 13762 14288 14684 +3 13762 14684 14184 +3 13763 14013 14561 +3 13763 14561 14336 +3 13764 14337 14562 +3 13764 14562 14014 +3 13765 13932 14571 +3 13765 14571 14405 +3 13766 14406 14572 +3 13766 14572 13933 +3 13767 14205 14881 +3 13767 14881 14458 +3 13768 14459 14882 +3 13768 14882 14206 +3 13769 13995 14921 +3 13769 14921 15176 +3 13769 15176 13967 +3 13770 13968 15177 +3 13770 14922 13996 +3 13770 15177 14922 +3 13771 13881 14773 +3 13771 14773 14689 +3 13772 14690 14774 +3 13772 14774 13882 +3 13773 13801 14080 +3 13773 14056 13774 +3 13773 14080 14056 +3 13774 14056 14081 +3 13774 14081 13802 +3 13775 14317 15748 +3 13775 15748 15084 +3 13776 15085 15749 +3 13776 15749 14318 +3 13777 14175 14323 +3 13777 14323 13927 +3 13778 13928 14324 +3 13778 14324 14176 +3 13779 13946 14086 +3 13779 14086 13901 +3 13780 13902 14087 +3 13780 14087 13946 +3 13781 14927 15553 +3 13781 15553 14342 +3 13782 14343 15554 +3 13782 15554 14928 +3 13783 14213 14655 +3 13783 14655 14201 +3 13784 14202 14656 +3 13784 14656 14214 +3 13785 16289 17570 +3 13785 17570 14893 +3 13786 14894 17571 +3 13786 17571 16290 +3 13787 14518 15086 +3 13787 15086 14099 +3 13788 14100 15087 +3 13788 15087 14519 +3 13789 14397 14731 +3 13789 14731 14195 +3 13790 14196 14732 +3 13790 14732 14398 +3 13791 14522 16207 +3 13791 16207 15353 +3 13792 15354 16208 +3 13792 16208 14523 +3 13793 14595 16988 +3 13793 16988 16056 +3 13794 16057 16989 +3 13794 16989 14596 +3 13795 14116 14933 +3 13795 14933 14657 +3 13796 14658 14934 +3 13796 14934 14117 +3 13797 13909 14181 +3 13797 14181 14052 +3 13798 14053 14182 +3 13798 14182 13910 +3 13799 14885 14981 +3 13799 14981 13905 +3 13800 13906 14982 +3 13800 14982 14886 +3 13801 13879 14150 +3 13801 14150 14080 +3 13802 14081 14151 +3 13802 14151 13880 +3 13803 14777 17849 +3 13803 17849 16671 +3 13804 16672 17850 +3 13804 17850 14778 +3 13805 14474 14721 +3 13805 14721 14095 +3 13806 14096 14722 +3 13806 14722 14475 +3 13807 15579 16151 +3 13807 16151 14303 +3 13808 14304 16152 +3 13808 16152 15580 +3 13809 14705 17386 +3 13809 17386 16337 +3 13810 16338 17387 +3 13810 17387 14706 +3 13811 15551 16131 +3 13811 16131 14297 +3 13812 14298 16132 +3 13812 16132 15552 +3 13813 13921 14650 +3 13813 14650 14833 +3 13813 14833 13961 +3 13814 13962 14834 +3 13814 14651 13922 +3 13814 14834 14651 +3 13815 15705 16545 +3 13815 16545 14533 +3 13816 14534 16546 +3 13816 16546 15706 +3 13817 14843 16575 +3 13817 16575 15383 +3 13818 15384 16576 +3 13818 16576 14844 +3 13819 14638 14861 +3 13819 14861 14061 +3 13820 14062 14862 +3 13820 14862 14639 +3 13821 15098 16311 +3 13821 16311 14863 +3 13822 14864 16312 +3 13822 16312 15099 +3 13823 14895 16277 +3 13823 16277 15030 +3 13824 15031 16278 +3 13824 16278 14896 +3 13825 14009 14173 +3 13825 14173 13989 +3 13826 13990 14174 +3 13826 14174 14010 +3 13827 15713 16714 +3 13827 16714 15714 +3 13828 14201 14634 +3 13828 14634 14311 +3 13829 14312 14635 +3 13829 14635 14202 +3 13830 14666 14941 +3 13830 14941 14146 +3 13831 14147 14942 +3 13831 14942 14667 +3 13832 15282 16708 +3 13832 16708 15243 +3 13833 15244 16709 +3 13833 16709 15283 +3 13834 14568 14783 +3 13834 14783 14078 +3 13835 14079 14784 +3 13835 14784 14569 +3 13836 14733 14867 +3 13836 14867 13957 +3 13837 13958 14868 +3 13837 14868 14734 +3 13838 14184 14605 +3 13838 14605 14183 +3 13839 14265 14490 +3 13839 14490 14126 +3 13840 14127 14491 +3 13840 14491 14266 +3 13841 14050 15075 +3 13841 15075 14841 +3 13842 14842 15076 +3 13842 15076 14051 +3 13843 14321 14494 +3 13843 14494 14054 +3 13844 14055 14495 +3 13844 14495 14322 +3 13845 15106 16313 +3 13845 16313 14895 +3 13846 14896 16314 +3 13846 16314 15107 +3 13847 14338 14640 +3 13847 14640 14213 +3 13848 14214 14641 +3 13848 14641 14339 +3 13849 15160 17066 +3 13849 17066 15654 +3 13850 15655 17067 +3 13850 17067 15161 +3 13851 14138 14618 +3 13851 14618 14395 +3 13852 14396 14619 +3 13852 14619 14139 +3 13853 15944 16808 +3 13853 16808 14610 +3 13854 14611 16809 +3 13854 16809 15945 +3 13855 14038 14255 +3 13855 14255 14084 +3 13856 14085 14256 +3 13856 14256 14039 +3 13857 14112 14259 +3 13857 14259 14038 +3 13858 14039 14260 +3 13858 14260 14113 +3 13859 14301 14453 +3 13859 14453 14046 +3 13860 14047 14454 +3 13860 14454 14302 +3 13861 14393 15249 +3 13861 15249 14723 +3 13862 14724 15252 +3 13862 15252 14394 +3 13863 14449 14614 +3 13863 14614 14074 +3 13864 14075 14615 +3 13864 14615 14450 +3 13865 14603 16187 +3 13865 16187 15343 +3 13866 15344 16188 +3 13866 16188 14604 +3 13867 14858 15406 +3 13867 15406 14389 +3 13868 14390 15407 +3 13868 15407 14859 +3 13869 14235 14425 +3 13869 14425 14130 +3 13870 14131 14426 +3 13870 14426 14236 +3 13871 14563 17428 +3 13871 17428 16615 +3 13872 16616 17429 +3 13872 17429 14564 +3 13873 13942 14251 +3 13873 14171 13907 +3 13873 14251 14171 +3 13874 13908 14172 +3 13874 14172 14252 +3 13874 14252 13943 +3 13875 15134 16183 +3 13875 16183 14757 +3 13876 14758 16184 +3 13876 16184 15135 +3 13877 14199 14725 +3 13877 14725 14460 +3 13878 14461 14726 +3 13878 14726 14200 +3 13879 13989 14243 +3 13879 14243 14150 +3 13880 14151 14244 +3 13880 14244 13990 +3 13881 14057 14929 +3 13881 14929 14773 +3 13882 14774 14930 +3 13882 14930 14058 +3 13883 15225 15965 +3 13883 15965 14512 +3 13884 14513 15966 +3 13884 15966 15226 +3 13885 14144 14535 +3 13885 14535 14327 +3 13886 14328 14536 +3 13886 14536 14145 +3 13887 15967 17699 +3 13887 17699 15418 +3 13888 15419 17700 +3 13888 17700 15968 +3 13889 14211 14466 +3 13889 14466 14207 +3 13890 14208 14467 +3 13890 14467 14212 +3 13891 15720 17454 +3 13891 17454 15438 +3 13892 15441 17455 +3 13892 17455 15721 +3 13893 14775 15271 +3 13893 15271 14362 +3 13894 14363 15272 +3 13894 15272 14776 +3 13895 14737 15801 +3 13895 15801 14831 +3 13896 14832 15802 +3 13896 15802 14738 +3 13897 14803 15780 +3 13897 15780 14737 +3 13898 14738 15781 +3 13898 15781 14804 +3 13899 14295 14579 +3 13899 14579 14235 +3 13900 14236 14580 +3 13900 14580 14296 +3 13901 14086 14257 +3 13901 14257 14110 +3 13902 14111 14258 +3 13902 14258 14087 +3 13903 15922 16928 +3 13903 16928 14767 +3 13904 14768 16929 +3 13904 16929 15923 +3 13905 14981 15136 +3 13905 15136 14097 +3 13906 14098 15137 +3 13906 15137 14982 +3 13907 14171 14247 +3 13907 14247 14009 +3 13908 14010 14248 +3 13908 14248 14172 +3 13909 14110 14313 +3 13909 14313 14181 +3 13910 14182 14314 +3 13910 14314 14111 +3 13911 15184 15746 +3 13911 15746 14423 +3 13912 14424 15747 +3 13912 15747 15185 +3 13913 15668 16050 +3 13913 16050 14271 +3 13914 14272 16051 +3 13914 16051 15669 +3 13915 15438 17511 +3 13915 17511 15832 +3 13916 15833 17512 +3 13916 17512 15441 +3 13917 14541 16091 +3 13917 16091 15396 +3 13918 15397 16092 +3 13918 16092 14542 +3 13919 15408 16846 +3 13919 16846 15201 +3 13920 15202 16847 +3 13920 16847 15409 +3 13921 14148 14807 +3 13921 14807 14650 +3 13922 14651 14808 +3 13922 14808 14149 +3 13923 13965 14445 +3 13923 14445 14447 +3 13923 14447 13959 +3 13924 13960 14448 +3 13924 14446 13966 +3 13924 14448 14446 +3 13925 15505 16193 +3 13925 16193 14504 +3 13926 14505 16194 +3 13926 16194 15506 +3 13927 14323 14526 +3 13927 14526 14211 +3 13928 14212 14527 +3 13928 14527 14324 +3 13929 14801 15607 +3 13929 15607 14687 +3 13930 14688 15608 +3 13930 15608 14802 +3 13931 14207 14528 +3 13931 14528 14208 +3 13932 14118 14789 +3 13932 14789 14571 +3 13933 14572 14790 +3 13933 14790 14119 +3 13934 16601 17692 +3 13934 17692 14865 +3 13935 14866 17693 +3 13935 17693 16602 +3 13936 15030 16508 +3 13936 16508 15245 +3 13937 15246 16509 +3 13937 16509 15031 +3 13938 13971 14283 +3 13938 14283 14319 +3 13938 14319 13991 +3 13939 13992 14320 +3 13939 14284 13972 +3 13939 14320 14284 +3 13940 14691 15573 +3 13940 15573 14755 +3 13941 14756 15574 +3 13941 15574 14692 +3 13942 14084 14340 +3 13942 14340 14251 +3 13943 14252 14341 +3 13943 14341 14085 +3 13944 14287 14877 +3 13944 14877 14549 +3 13945 14550 14878 +3 13945 14878 14288 +3 13946 14087 14292 +3 13946 14292 14086 +3 13947 14597 16418 +3 13947 16418 15658 +3 13948 15659 16419 +3 13948 16419 14598 +3 13949 14687 15533 +3 13949 15533 14691 +3 13950 14692 15534 +3 13950 15534 14688 +3 13951 16229 17286 +3 13951 17286 14883 +3 13952 14884 17287 +3 13952 17287 16230 +3 13953 14577 16247 +3 13953 16247 15501 +3 13954 15502 16248 +3 13954 16248 14578 +3 13955 15478 15880 +3 13955 15880 14289 +3 13956 14290 15881 +3 13956 15881 15479 +3 13957 14867 15018 +3 13957 15018 14281 +3 13958 14282 15019 +3 13958 15019 14868 +3 13959 14447 14581 +3 13959 14581 14042 +3 13960 14043 14582 +3 13960 14582 14448 +3 13961 14833 15014 +3 13961 15014 14185 +3 13962 14186 15015 +3 13962 15015 14834 +3 13963 14331 15278 +3 13963 15278 14899 +3 13964 14900 15279 +3 13964 15279 14332 +3 13965 14048 14480 +3 13965 14480 14445 +3 13966 14446 14481 +3 13966 14481 14049 +3 13967 15176 15439 +3 13967 15439 14249 +3 13968 14250 15440 +3 13968 15440 15177 +3 13969 14537 15128 +3 13969 15128 14557 +3 13970 14558 15129 +3 13970 15129 14538 +3 13971 14052 14334 +3 13971 14334 14283 +3 13972 14284 14335 +3 13972 14335 14053 +3 13973 15259 16099 +3 13973 16099 14711 +3 13974 14712 16100 +3 13974 16100 15260 +3 13975 14675 16816 +3 13975 16816 16036 +3 13976 16037 16817 +3 13976 16817 14676 +3 13977 15675 16533 +3 13977 16533 14709 +3 13978 14710 16534 +3 13978 16534 15676 +3 13979 15120 15539 +3 13979 15539 14387 +3 13980 14388 15540 +3 13980 15540 15121 +3 13981 16368 17280 +3 13981 17280 14753 +3 13982 14754 17281 +3 13982 17281 16369 +3 13983 14360 15762 +3 13983 15762 15361 +3 13984 15362 15763 +3 13984 15763 14361 +3 13985 15243 16926 +3 13985 16926 15486 +3 13986 15487 16927 +3 13986 16927 15244 +3 13987 14557 15138 +3 13987 15138 14543 +3 13988 14544 15139 +3 13988 15139 14558 +3 13989 14173 14348 +3 13989 14348 14243 +3 13990 14244 14349 +3 13990 14349 14174 +3 13991 14319 14383 +3 13991 14383 14112 +3 13992 14113 14384 +3 13992 14384 14320 +3 13993 15118 16329 +3 13993 16329 15045 +3 13994 15046 16330 +3 13994 16330 15119 +3 13995 14293 15239 +3 13995 15239 14921 +3 13996 14922 15240 +3 13996 15240 14294 +3 13997 14956 15900 +3 13997 15900 14803 +3 13998 14804 15901 +3 13998 15901 14957 +3 13999 16543 17438 +3 13999 17438 14745 +3 14000 14746 17439 +3 14000 17439 16544 +3 14001 14421 16143 +3 14001 16143 15660 +3 14002 15661 16144 +3 14002 16144 14422 +3 14003 14419 16167 +3 14003 16167 15462 +3 14004 15463 16168 +3 14004 16168 14420 +3 14005 14626 14989 +3 14005 14989 14380 +3 14006 14380 14990 +3 14006 14990 14627 +3 14007 15565 17497 +3 14007 17497 15768 +3 14008 15769 17498 +3 14008 17498 15566 +3 14009 14247 14344 +3 14009 14344 14173 +3 14010 14174 14345 +3 14010 14345 14248 +3 14011 14478 15651 +3 14011 15651 15116 +3 14012 15117 15652 +3 14012 15652 14479 +3 14013 14311 14829 +3 14013 14829 14561 +3 14014 14562 14830 +3 14014 14830 14312 +3 14015 16010 16617 +3 14015 16617 14506 +3 14016 14507 16618 +3 14016 16618 16011 +3 14017 15724 16561 +3 14017 16561 14735 +3 14018 14735 16562 +3 14018 16562 15725 +3 14019 14455 15215 +3 14019 15215 14741 +3 14020 14742 15216 +3 14020 15216 14455 +3 14021 14827 15381 +3 14021 15381 14518 +3 14022 14519 15382 +3 14022 15382 14828 +3 14023 14154 14785 +3 14023 14785 14437 +3 14024 14438 14786 +3 14024 14786 14155 +3 14025 15601 16149 +3 14025 16149 14889 +3 14026 14890 16150 +3 14026 16150 15602 +3 14027 15392 16623 +3 14027 16623 15106 +3 14028 15107 16624 +3 14028 16624 15393 +3 14029 14543 15180 +3 14029 15180 14630 +3 14030 14631 15181 +3 14030 15181 14544 +3 14031 15148 15537 +3 14031 15537 14417 +3 14032 14418 15538 +3 14032 15538 15149 +3 14033 14385 15766 +3 14033 15766 15355 +3 14034 15356 15767 +3 14034 15767 14386 +3 14035 14831 15971 +3 14035 15971 15051 +3 14036 15052 15972 +3 14036 15972 14832 +3 14037 14066 14850 +3 14037 14850 14851 +3 14037 14851 14067 +3 14038 14259 14435 +3 14038 14435 14255 +3 14039 14256 14436 +3 14039 14436 14260 +3 14040 14601 16848 +3 14040 16848 16203 +3 14041 16204 16849 +3 14041 16849 14602 +3 14042 14581 14681 +3 14042 14681 14175 +3 14043 14176 14682 +3 14043 14682 14582 +3 14044 14664 15191 +3 14044 15191 14537 +3 14045 14538 15192 +3 14045 15192 14665 +3 14046 14453 14648 +3 14046 14648 14265 +3 14047 14266 14649 +3 14047 14649 14454 +3 14048 14187 14583 +3 14048 14583 14480 +3 14049 14481 14584 +3 14049 14584 14188 +3 14050 14307 15373 +3 14050 15373 15075 +3 14051 15076 15374 +3 14051 15374 14308 +3 14052 14181 14429 +3 14052 14429 14334 +3 14053 14335 14430 +3 14053 14430 14182 +3 14054 14494 14717 +3 14054 14717 14295 +3 14055 14296 14718 +3 14055 14718 14495 +3 14056 14080 14399 +3 14056 14399 14400 +3 14056 14400 14081 +3 14057 14277 15367 +3 14057 15367 14929 +3 14058 14930 15368 +3 14058 15368 14278 +3 14059 14589 15924 +3 14059 15924 15335 +3 14060 15336 15925 +3 14060 15925 14590 +3 14061 14861 15156 +3 14061 15156 14358 +3 14062 14359 15157 +3 14062 15157 14862 +3 14063 15633 17031 +3 14063 17031 15282 +3 14064 15283 17032 +3 14064 17032 15634 +3 14065 14102 14680 +3 14065 14679 14101 +3 14065 14680 14679 +3 14066 14136 14897 +3 14066 14897 14850 +3 14067 14851 14898 +3 14067 14898 14137 +3 14068 15077 16107 +3 14068 16107 15055 +3 14069 15056 16108 +3 14069 16108 15078 +3 14070 14636 17068 +3 14070 17068 16123 +3 14071 16124 17069 +3 14071 17069 14637 +3 14072 15509 16038 +3 14072 16038 14575 +3 14073 14576 16039 +3 14073 16039 15510 +3 14074 14614 14845 +3 14074 14845 14338 +3 14075 14339 14846 +3 14075 14846 14615 +3 14076 15519 16145 +3 14076 16145 14599 +3 14077 14600 16146 +3 14077 16146 15520 +3 14078 14783 15061 +3 14078 15061 14356 +3 14079 14357 15062 +3 14079 15062 14784 +3 14080 14150 14443 +3 14080 14443 14399 +3 14081 14400 14444 +3 14081 14444 14151 +3 14082 14458 15247 +3 14082 15247 14854 +3 14083 14855 15248 +3 14083 15248 14459 +3 14084 14255 14472 +3 14084 14472 14340 +3 14085 14341 14473 +3 14085 14473 14256 +3 14086 14292 14427 +3 14086 14427 14257 +3 14087 14258 14428 +3 14087 14428 14292 +3 14088 15371 16794 +3 14088 16794 15363 +3 14089 15364 16795 +3 14089 16795 15372 +3 14090 16482 17021 +3 14090 17021 14539 +3 14091 14540 17022 +3 14091 17022 16483 +3 14092 14632 16784 +3 14092 16784 16147 +3 14093 16148 16785 +3 14093 16785 14633 +3 14094 15017 15670 +3 14094 15670 15016 +3 14095 14721 15041 +3 14095 15041 14397 +3 14096 14398 15042 +3 14096 15042 14722 +3 14097 15136 15591 +3 14097 15591 14482 +3 14098 14483 15592 +3 14098 15592 15137 +3 14099 15086 15460 +3 14099 15460 14439 +3 14100 14440 15461 +3 14100 15461 15087 +3 14101 14679 14713 +3 14101 14713 14189 +3 14102 14190 14714 +3 14102 14714 14680 +3 14103 14516 16468 +3 14103 16468 15983 +3 14104 15984 16469 +3 14104 16469 14517 +3 14105 14622 15894 +3 14105 15894 15288 +3 14106 15289 15895 +3 14106 15895 14623 +3 14107 15681 17382 +3 14107 17382 15631 +3 14108 15632 17383 +3 14108 17383 15682 +3 14109 14132 15442 +3 14109 15442 15443 +3 14109 15443 14133 +3 14110 14257 14431 +3 14110 14431 14313 +3 14111 14314 14432 +3 14111 14432 14258 +3 14112 14383 14492 +3 14112 14492 14259 +3 14113 14260 14493 +3 14113 14493 14384 +3 14114 14949 16474 +3 14114 16474 15468 +3 14115 15469 16475 +3 14115 16475 14950 +3 14116 14433 15309 +3 14116 15309 14933 +3 14117 14934 15310 +3 14117 15310 14434 +3 14118 14285 14960 +3 14118 14960 14789 +3 14119 14790 14961 +3 14119 14961 14286 +3 14120 15631 17406 +3 14120 17406 15722 +3 14121 15723 17407 +3 14121 17407 15632 +3 14122 14755 15754 +3 14122 15754 14951 +3 14123 14952 15755 +3 14123 15755 14756 +3 14124 15946 16750 +3 14124 16750 14835 +3 14125 14836 16751 +3 14125 16751 15947 +3 14126 14490 14779 +3 14126 14779 14413 +3 14127 14414 14780 +3 14127 14780 14491 +3 14128 14162 15828 +3 14128 15800 14129 +3 14128 15828 15800 +3 14129 15800 15829 +3 14129 15829 14163 +3 14130 14425 14697 +3 14130 14697 14203 +3 14131 14204 14698 +3 14131 14698 14426 +3 14132 14241 15484 +3 14132 15484 15442 +3 14133 15443 15485 +3 14133 15485 14242 +3 14134 15055 16269 +3 14134 16269 15186 +3 14135 15187 16270 +3 14135 16270 15056 +3 14136 14245 14967 +3 14136 14967 14897 +3 14137 14898 14968 +3 14137 14968 14246 +3 14138 14437 14915 +3 14138 14915 14618 +3 14139 14619 14916 +3 14139 14916 14438 +3 14140 15476 16093 +3 14140 16093 14646 +3 14141 14647 16094 +3 14141 16094 15477 +3 14142 14653 17262 +3 14142 17262 16649 +3 14143 16650 17263 +3 14143 17263 14654 +3 14144 14413 14795 +3 14144 14795 14535 +3 14145 14536 14796 +3 14145 14796 14414 +3 14146 14941 15333 +3 14146 15333 14464 +3 14147 14465 15334 +3 14147 15334 14942 +3 14148 14366 15022 +3 14148 15022 14807 +3 14149 14808 15023 +3 14149 15023 14367 +3 14150 14243 14500 +3 14150 14500 14443 +3 14151 14444 14501 +3 14151 14501 14244 +3 14152 15269 16335 +3 14152 16335 15077 +3 14153 15078 16336 +3 14153 16336 15270 +3 14154 14336 14964 +3 14154 14964 14785 +3 14155 14786 14965 +3 14155 14965 14337 +3 14156 14233 17029 +3 14156 17007 14157 +3 14156 17029 17007 +3 14157 17007 17030 +3 14157 17030 14234 +3 14158 14520 16860 +3 14158 16860 15371 +3 14159 15372 16861 +3 14159 16861 14521 +3 14160 15047 17345 +3 14160 17345 16395 +3 14161 16396 17346 +3 14161 17346 15048 +3 14162 14305 15898 +3 14162 15898 15828 +3 14163 15829 15899 +3 14163 15899 14306 +3 14164 14198 16242 +3 14164 16241 14197 +3 14164 16242 16241 +3 14165 16060 17810 +3 14165 17810 15720 +3 14166 15721 17811 +3 14166 17811 16061 +3 14167 14825 15535 +3 14167 15535 14811 +3 14168 14812 15536 +3 14168 15536 14826 +3 14169 15063 15858 +3 14169 15858 14801 +3 14170 14802 15859 +3 14170 15859 15064 +3 14171 14251 14529 +3 14171 14468 14247 +3 14171 14529 14468 +3 14172 14248 14469 +3 14172 14469 14530 +3 14172 14530 14252 +3 14173 14344 14498 +3 14173 14498 14348 +3 14174 14349 14499 +3 14174 14499 14345 +3 14175 14681 14823 +3 14175 14823 14323 +3 14176 14324 14824 +3 14176 14824 14682 +3 14177 14856 15379 +3 14177 15379 14626 +3 14178 14627 15380 +3 14178 15380 14857 +3 14179 14815 15541 +3 14179 15541 14825 +3 14180 14826 15542 +3 14180 15542 14816 +3 14181 14313 14555 +3 14181 14555 14429 +3 14182 14430 14556 +3 14182 14556 14314 +3 14183 14605 15142 +3 14183 15142 14683 +3 14184 14684 15143 +3 14184 15143 14605 +3 14185 15014 15284 +3 14185 15284 14403 +3 14186 14404 15285 +3 14186 15285 15015 +3 14187 14327 14719 +3 14187 14719 14583 +3 14188 14584 14720 +3 14188 14720 14328 +3 14189 14713 14793 +3 14189 14793 14321 +3 14190 14322 14794 +3 14190 14794 14714 +3 14191 14411 15878 +3 14191 15569 14462 +3 14191 15878 15569 +3 14192 14463 15570 +3 14192 15570 15879 +3 14192 15879 14412 +3 14193 16476 17236 +3 14193 17236 14817 +3 14194 14818 17237 +3 14194 17237 16477 +3 14195 14731 15166 +3 14195 15166 14568 +3 14196 14569 15167 +3 14196 15167 14732 +3 14197 16241 16301 +3 14197 16301 14263 +3 14198 14264 16302 +3 14198 16302 16242 +3 14199 14395 14935 +3 14199 14935 14725 +3 14200 14726 14936 +3 14200 14936 14396 +3 14201 14655 15114 +3 14201 15114 14634 +3 14202 14635 15115 +3 14202 15115 14656 +3 14203 14697 14769 +3 14203 14769 14301 +3 14204 14302 14770 +3 14204 14770 14698 +3 14205 14657 15388 +3 14205 15388 14881 +3 14206 14882 15389 +3 14206 15389 14658 +3 14207 14466 14787 +3 14207 14787 14528 +3 14208 14528 14788 +3 14208 14788 14467 +3 14209 15049 17010 +3 14209 17010 16044 +3 14210 16045 17011 +3 14210 17011 15050 +3 14211 14526 14781 +3 14211 14781 14466 +3 14212 14467 14782 +3 14212 14782 14527 +3 14213 14640 15126 +3 14213 15126 14655 +3 14214 14656 15127 +3 14214 15127 14641 +3 14215 15231 16105 +3 14215 16105 14956 +3 14216 14957 16106 +3 14216 16106 15232 +3 14217 15486 17232 +3 14217 17232 15844 +3 14218 15845 17233 +3 14218 17233 15487 +3 14219 16399 17105 +3 14219 17105 15408 +3 14220 15409 17106 +3 14220 17106 16400 +3 14221 15303 17907 +3 14221 17907 16630 +3 14222 16631 17908 +3 14222 17908 15304 +3 14223 16695 17645 +3 14223 17645 14999 +3 14224 15000 17646 +3 14224 17646 16696 +3 14225 15245 16782 +3 14225 16782 15599 +3 14226 15600 16783 +3 14226 16783 15246 +3 14227 17003 18191 +3 14227 18191 15168 +3 14228 15169 18192 +3 14228 18192 17004 +3 14229 14947 15649 +3 14229 15649 14815 +3 14230 14816 15650 +3 14230 15650 14948 +3 14231 16643 17688 +3 14231 17688 15090 +3 14232 15091 17689 +3 14232 17689 16644 +3 14233 15194 18264 +3 14233 18264 17029 +3 14234 17030 18265 +3 14234 18265 15195 +3 14235 14579 14771 +3 14235 14771 14425 +3 14236 14426 14772 +3 14236 14772 14580 +3 14237 14811 15685 +3 14237 15685 15003 +3 14238 15004 15686 +3 14238 15686 14812 +3 14239 15768 17776 +3 14239 17776 16071 +3 14240 16072 17777 +3 14240 17777 15769 +3 14241 14372 15639 +3 14241 15639 15484 +3 14242 15485 15640 +3 14242 15640 14373 +3 14243 14348 14616 +3 14243 14616 14500 +3 14244 14501 14617 +3 14244 14617 14349 +3 14245 14460 15094 +3 14245 15094 14967 +3 14246 14968 15095 +3 14246 15095 14461 +3 14247 14468 14559 +3 14247 14559 14344 +3 14248 14345 14560 +3 14248 14560 14469 +3 14249 15439 15772 +3 14249 15772 14486 +3 14250 14487 15773 +3 14250 15773 15440 +3 14251 14340 14628 +3 14251 14628 14529 +3 14252 14530 14629 +3 14252 14629 14341 +3 14253 16456 17329 +3 14253 17329 15005 +3 14254 15006 17330 +3 14254 17330 16457 +3 14255 14435 14662 +3 14255 14662 14472 +3 14256 14473 14663 +3 14256 14663 14436 +3 14257 14427 14587 +3 14257 14587 14431 +3 14258 14432 14588 +3 14258 14588 14428 +3 14259 14492 14677 +3 14259 14677 14435 +3 14260 14436 14678 +3 14260 14678 14493 +3 14261 14514 16245 +3 14261 16245 15134 +3 14262 15135 16246 +3 14262 16246 14515 +3 14263 16301 17140 +3 14263 17140 14907 +3 14264 14908 17141 +3 14264 17141 16302 +3 14265 14648 14891 +3 14265 14891 14490 +3 14266 14491 14892 +3 14266 14892 14649 +3 14267 14405 15096 +3 14267 14945 14315 +3 14267 15096 14945 +3 14268 14316 14946 +3 14268 14946 15097 +3 14268 15097 14406 +3 14269 15981 16665 +3 14269 16665 14873 +3 14270 14874 16666 +3 14270 16666 15982 +3 14271 16050 16478 +3 14271 16478 14624 +3 14272 14625 16479 +3 14272 16479 16051 +3 14273 16936 17714 +3 14273 17714 14923 +3 14274 14924 17715 +3 14274 17715 16937 +3 14275 14954 16908 +3 14275 16908 16239 +3 14276 16240 16909 +3 14276 16909 14955 +3 14277 14531 15635 +3 14277 15635 15367 +3 14278 15368 15636 +3 14278 15636 14532 +3 14279 15186 16448 +3 14279 16448 15428 +3 14280 15429 16449 +3 14280 16449 15187 +3 14281 15018 15257 +3 14281 15257 14474 +3 14282 14475 15258 +3 14282 15258 15019 +3 14283 14334 14644 +3 14283 14644 14659 +3 14283 14659 14319 +3 14284 14320 14660 +3 14284 14645 14335 +3 14284 14660 14645 +3 14285 14549 15265 +3 14285 15265 14960 +3 14286 14961 15266 +3 14286 15266 14550 +3 14287 14683 15297 +3 14287 15297 14877 +3 14288 14878 15298 +3 14288 15298 14684 +3 14289 15880 16279 +3 14289 16279 14642 +3 14290 14643 16280 +3 14290 16280 15881 +3 14291 16140 17084 +3 14291 17084 16139 +3 14292 14428 14661 +3 14292 14661 14427 +3 14293 14951 16018 +3 14293 16018 15239 +3 14294 15240 16019 +3 14294 16019 14952 +3 14295 14717 15001 +3 14295 15001 14579 +3 14296 14580 15002 +3 14296 15002 14718 +3 14297 16131 16719 +3 14297 16719 14797 +3 14298 14798 16720 +3 14298 16720 16132 +3 14299 15832 18040 +3 14299 18040 16345 +3 14300 16346 18041 +3 14300 18041 15833 +3 14301 14769 14909 +3 14301 14909 14453 +3 14302 14454 14910 +3 14302 14910 14770 +3 14303 16151 16874 +3 14303 16874 14911 +3 14304 14912 16875 +3 14304 16875 16152 +3 14305 14837 16518 +3 14305 16518 15898 +3 14306 15899 16519 +3 14306 16519 14838 +3 14307 14593 15683 +3 14307 15683 15373 +3 14308 15374 15684 +3 14308 15684 14594 +3 14309 15051 16287 +3 14309 16287 15431 +3 14310 15432 16288 +3 14310 16288 15052 +3 14311 14634 15178 +3 14311 15178 14829 +3 14312 14830 15179 +3 14312 15179 14635 +3 14313 14431 14669 +3 14313 14669 14555 +3 14314 14556 14670 +3 14314 14670 14432 +3 14315 14945 15071 +3 14315 15071 14449 +3 14316 14450 15072 +3 14316 15072 14946 +3 14317 14917 16454 +3 14317 16454 15748 +3 14318 15749 16455 +3 14318 16455 14918 +3 14319 14659 14707 +3 14319 14707 14383 +3 14320 14384 14708 +3 14320 14708 14660 +3 14321 14793 14983 +3 14321 14983 14494 +3 14322 14495 14984 +3 14322 14984 14794 +3 14323 14823 15009 +3 14323 15009 14526 +3 14324 14527 15010 +3 14324 15010 14824 +3 14325 15888 17808 +3 14325 17808 16101 +3 14326 16102 17809 +3 14326 17809 15889 +3 14327 14535 14925 +3 14327 14925 14719 +3 14328 14720 14926 +3 14328 14926 14536 +3 14329 14693 15956 +3 14329 15956 15221 +3 14330 15222 15957 +3 14330 15957 14694 +3 14331 14723 15737 +3 14331 15737 15278 +3 14332 15279 15738 +3 14332 15738 14724 +3 14333 15663 16370 +3 14333 16370 15662 +3 14334 14429 14715 +3 14334 14715 14644 +3 14335 14645 14716 +3 14335 14716 14430 +3 14336 14561 15199 +3 14336 15199 14964 +3 14337 14965 15200 +3 14337 15200 14562 +3 14338 14845 15170 +3 14338 15170 14640 +3 14339 14641 15171 +3 14339 15171 14846 +3 14340 14472 14747 +3 14340 14747 14628 +3 14341 14629 14748 +3 14341 14748 14473 +3 14342 15553 16283 +3 14342 16283 14953 +3 14343 14953 16284 +3 14343 16284 15554 +3 14344 14559 14701 +3 14344 14701 14498 +3 14345 14499 14702 +3 14345 14702 14560 +3 14346 15024 16986 +3 14346 16986 16195 +3 14347 16196 16987 +3 14347 16987 15025 +3 14348 14498 14761 +3 14348 14761 14616 +3 14349 14617 14762 +3 14349 14762 14499 +3 14350 16111 17442 +3 14350 17442 15633 +3 14351 15634 17443 +3 14351 17443 16112 +3 14352 15910 16683 +3 14352 16683 15057 +3 14353 15058 16684 +3 14353 16684 15911 +3 14354 15383 16746 +3 14354 16746 15621 +3 14355 15622 16747 +3 14355 16747 15384 +3 14356 15061 15402 +3 14356 15402 14664 +3 14357 14665 15403 +3 14357 15403 15062 +3 14358 15156 15852 +3 14358 15852 14947 +3 14359 14948 15853 +3 14359 15853 15157 +3 14360 14751 16217 +3 14360 16217 15762 +3 14361 15763 16218 +3 14361 16218 14752 +3 14362 15271 15823 +3 14362 15823 14849 +3 14363 14849 15824 +3 14363 15824 15272 +3 14364 15756 17123 +3 14364 17123 15796 +3 14365 15797 17126 +3 14365 17126 15757 +3 14366 14630 15347 +3 14366 15347 15022 +3 14367 15023 15348 +3 14367 15348 14631 +3 14368 15274 18020 +3 14368 18020 16938 +3 14369 16939 18021 +3 14369 18021 15275 +3 14370 16233 17870 +3 14370 17870 15888 +3 14371 15889 17871 +3 14371 17871 16234 +3 14372 14809 16171 +3 14372 16171 15639 +3 14373 15640 16172 +3 14373 16172 14810 +3 14374 15597 16559 +3 14374 16559 15269 +3 14375 15270 16560 +3 14375 16560 15598 +3 14376 15291 17586 +3 14376 17586 16563 +3 14377 16564 17587 +3 14377 17587 15292 +3 14378 15237 17284 +3 14378 17284 16351 +3 14379 16352 17285 +3 14379 17285 15238 +3 14380 14989 15430 +3 14380 15430 14990 +3 14381 15926 17043 +3 14381 17043 15392 +3 14382 15393 17044 +3 14382 17044 15927 +3 14383 14707 14821 +3 14383 14821 14492 +3 14384 14493 14822 +3 14384 14822 14708 +3 14385 14749 16209 +3 14385 16209 15766 +3 14386 15767 16210 +3 14386 16210 14750 +3 14387 15539 16073 +3 14387 16073 14827 +3 14388 14828 16074 +3 14388 16074 15540 +3 14389 15406 15914 +3 14389 15914 14775 +3 14390 14776 15915 +3 14390 15915 15407 +3 14391 15122 17230 +3 14391 17230 16410 +3 14392 16411 17231 +3 14392 17231 15123 +3 14393 14741 15656 +3 14393 15656 15249 +3 14394 15252 15657 +3 14394 15657 14742 +3 14395 14618 15211 +3 14395 15211 14935 +3 14396 14936 15212 +3 14396 15212 14619 +3 14397 15041 15435 +3 14397 15435 14731 +3 14398 14732 15436 +3 14398 15436 15042 +3 14399 14443 14759 +3 14399 14736 14400 +3 14399 14759 14736 +3 14400 14736 14760 +3 14400 14760 14444 +3 14401 16121 17822 +3 14401 17822 15967 +3 14402 15968 17823 +3 14402 17823 16122 +3 14403 15284 15557 +3 14403 15557 14666 +3 14404 14667 15558 +3 14404 15558 15285 +3 14405 14571 15311 +3 14405 15311 15096 +3 14406 15097 15312 +3 14406 15312 14572 +3 14407 15293 18469 +3 14407 18469 17129 +3 14408 17130 18470 +3 14408 18470 15294 +3 14409 15654 17210 +3 14409 17210 15874 +3 14410 15875 17211 +3 14410 17211 15655 +3 14411 14672 16173 +3 14411 16173 15878 +3 14412 15879 16174 +3 14412 16174 14673 +3 14413 14779 15130 +3 14413 15130 14795 +3 14414 14796 15131 +3 14414 15131 14780 +3 14415 15172 17748 +3 14415 17748 16892 +3 14416 16893 17749 +3 14416 17749 15173 +3 14417 15537 16052 +3 14417 16052 14858 +3 14418 14859 16053 +3 14418 16053 15538 +3 14419 14875 16673 +3 14419 16673 16167 +3 14420 16168 16674 +3 14420 16674 14876 +3 14421 14869 16645 +3 14421 16645 16143 +3 14422 16144 16646 +3 14422 16646 14870 +3 14423 15746 16360 +3 14423 16360 14927 +3 14424 14928 16361 +3 14424 16361 15747 +3 14425 14771 15028 +3 14425 15028 14697 +3 14426 14698 15029 +3 14426 15029 14772 +3 14427 14661 14805 +3 14427 14805 14587 +3 14428 14588 14806 +3 14428 14806 14661 +3 14429 14555 14852 +3 14429 14852 14715 +3 14430 14716 14853 +3 14430 14853 14556 +3 14431 14587 14813 +3 14431 14813 14669 +3 14432 14670 14814 +3 14432 14814 14588 +3 14433 15003 15948 +3 14433 15948 15309 +3 14434 15310 15949 +3 14434 15949 15004 +3 14435 14677 14871 +3 14435 14871 14662 +3 14436 14663 14872 +3 14436 14872 14678 +3 14437 14785 15327 +3 14437 15327 14915 +3 14438 14916 15328 +3 14438 15328 14786 +3 14439 15460 16201 +3 14439 16201 15063 +3 14440 15064 16202 +3 14440 16202 15461 +3 14441 15637 16786 +3 14441 16786 15480 +3 14442 15481 16787 +3 14442 16787 15638 +3 14443 14500 14847 +3 14443 14847 14759 +3 14444 14760 14848 +3 14444 14848 14501 +3 14445 14480 14991 +3 14445 14958 14447 +3 14445 14991 14958 +3 14446 14448 14959 +3 14446 14959 14992 +3 14446 14992 14481 +3 14447 14958 15110 +3 14447 15110 14581 +3 14448 14582 15111 +3 14448 15111 14959 +3 14449 15071 15267 +3 14449 15267 14614 +3 14450 14615 15268 +3 14450 15268 15072 +3 14451 15223 17619 +3 14451 17619 16752 +3 14452 16753 17620 +3 14452 17620 15224 +3 14453 14909 15108 +3 14453 15108 14648 +3 14454 14649 15109 +3 14454 15109 14910 +3 14455 15216 15728 +3 14455 15728 15215 +3 14456 15480 16810 +3 14456 16810 15715 +3 14457 15718 16811 +3 14457 16811 15481 +3 14458 14881 15711 +3 14458 15711 15247 +3 14459 15248 15712 +3 14459 15712 14882 +3 14460 14725 15404 +3 14460 15404 15094 +3 14461 15095 15405 +3 14461 15405 14726 +3 14462 15569 16450 +3 14462 16450 15231 +3 14463 15232 16451 +3 14463 16451 15570 +3 14464 15333 15735 +3 14464 15735 14856 +3 14465 14857 15736 +3 14465 15736 15334 +3 14466 14781 15104 +3 14466 15104 14787 +3 14467 14788 15105 +3 14467 15105 14782 +3 14468 14529 14887 +3 14468 14819 14559 +3 14468 14887 14819 +3 14469 14560 14820 +3 14469 14820 14888 +3 14469 14888 14530 +3 14470 16472 17212 +3 14470 17212 15146 +3 14471 15147 17213 +3 14471 17213 16473 +3 14472 14662 14931 +3 14472 14931 14747 +3 14473 14748 14932 +3 14473 14932 14663 +3 14474 15257 15507 +3 14474 15507 14721 +3 14475 14722 15508 +3 14475 15508 15258 +3 14476 16032 17696 +3 14476 17696 16060 +3 14477 16061 17697 +3 14477 17697 16033 +3 14478 15016 16263 +3 14478 16263 15651 +3 14479 15652 16264 +3 14479 16264 15017 +3 14480 14583 15067 +3 14480 15067 14991 +3 14481 14992 15068 +3 14481 15068 14584 +3 14482 15591 16109 +3 14482 16109 14743 +3 14483 14744 16110 +3 14483 16110 15592 +3 14484 16087 17710 +3 14484 17710 16032 +3 14485 16033 17711 +3 14485 17711 16088 +3 14486 15772 16103 +3 14486 16103 14799 +3 14487 14800 16104 +3 14487 16104 15773 +3 14488 15567 18782 +3 14488 18782 17392 +3 14489 17393 18783 +3 14489 18783 15568 +3 14490 14891 15182 +3 14490 15182 14779 +3 14491 14780 15183 +3 14491 15183 14892 +3 14492 14821 14969 +3 14492 14969 14677 +3 14493 14678 14970 +3 14493 14970 14822 +3 14494 14983 15233 +3 14494 15233 14717 +3 14495 14718 15234 +3 14495 15234 14984 +3 14496 16008 17335 +3 14496 17335 15756 +3 14497 15757 17336 +3 14497 17336 16009 +3 14498 14701 14973 +3 14498 14973 14761 +3 14499 14762 14974 +3 14499 14974 14702 +3 14500 14616 14943 +3 14500 14943 14847 +3 14501 14848 14944 +3 14501 14944 14617 +3 14502 15594 18270 +3 14502 18270 16984 +3 14503 16985 18271 +3 14503 18271 15594 +3 14504 16193 16878 +3 14504 16878 15154 +3 14505 15155 16879 +3 14505 16879 16194 +3 14506 16617 17248 +3 14506 17248 15073 +3 14507 15074 17249 +3 14507 17249 16618 +3 14508 15241 18213 +3 14508 18213 17282 +3 14509 17283 18214 +3 14509 18214 15242 +3 14510 14511 17296 +3 14510 17296 17323 +3 14510 17323 14573 +3 14511 14574 17324 +3 14511 17324 17296 +3 14512 15965 16744 +3 14512 16744 15259 +3 14513 15260 16745 +3 14513 16745 15966 +3 14514 14839 16583 +3 14514 16583 16245 +3 14515 16246 16584 +3 14515 16584 14840 +3 14516 15007 17045 +3 14516 17045 16468 +3 14517 16469 17046 +3 14517 17046 15008 +3 14518 15381 16006 +3 14518 16006 15086 +3 14519 15087 16007 +3 14519 16007 15382 +3 14520 14977 17358 +3 14520 17358 16860 +3 14521 16861 17359 +3 14521 17359 14978 +3 14522 15273 17005 +3 14522 17005 16207 +3 14523 16208 17006 +3 14523 17006 15273 +3 14524 15428 16742 +3 14524 16742 15786 +3 14525 15787 16743 +3 14525 16743 15429 +3 14526 15009 15323 +3 14526 15323 14781 +3 14527 14782 15324 +3 14527 15324 15010 +3 14528 14787 15190 +3 14528 15190 14788 +3 14529 14628 14971 +3 14529 14971 14887 +3 14530 14888 14972 +3 14530 14972 14629 +3 14531 14854 15998 +3 14531 15998 15635 +3 14532 15636 15999 +3 14532 15999 14855 +3 14533 16545 17444 +3 14533 17444 15100 +3 14534 15101 17445 +3 14534 17445 16546 +3 14535 14795 15205 +3 14535 15205 14925 +3 14536 14926 15206 +3 14536 15206 14796 +3 14537 15191 15819 +3 14537 15819 15128 +3 14538 15129 15820 +3 14538 15820 15192 +3 14539 17021 17574 +3 14539 17574 15065 +3 14540 15066 17575 +3 14540 17575 17022 +3 14541 15084 16710 +3 14541 16710 16091 +3 14542 16092 16711 +3 14542 16711 15085 +3 14543 15138 15821 +3 14543 15821 15180 +3 14544 15181 15822 +3 14544 15822 15139 +3 14545 15599 16790 +3 14545 16790 15668 +3 14546 15669 16791 +3 14546 16791 15600 +3 14547 15854 17001 +3 14547 17001 15637 +3 14548 15638 17002 +3 14548 17002 15855 +3 14549 14877 15587 +3 14549 15587 15265 +3 14550 15266 15588 +3 14550 15588 14878 +3 14551 15844 17182 +3 14551 17182 15856 +3 14552 15857 17183 +3 14552 17183 15845 +3 14553 16571 17168 +3 14553 17168 15098 +3 14554 15099 17169 +3 14554 17169 16572 +3 14555 14669 14939 +3 14555 14939 14852 +3 14556 14853 14940 +3 14556 14940 14670 +3 14557 15128 15830 +3 14557 15830 15138 +3 14558 15139 15831 +3 14558 15831 15129 +3 14559 14819 14937 +3 14559 14937 14701 +3 14560 14702 14938 +3 14560 14938 14820 +3 14561 14829 15470 +3 14561 15470 15199 +3 14562 15200 15471 +3 14562 15471 14830 +3 14563 15341 18403 +3 14563 18403 17428 +3 14564 17429 18404 +3 14564 18404 15342 +3 14565 16101 18175 +3 14565 18175 16462 +3 14566 16463 18176 +3 14566 18176 16102 +3 14567 15796 17426 +3 14567 17426 16137 +3 14568 15166 15645 +3 14568 15645 14783 +3 14569 14784 15646 +3 14569 15646 15167 +3 14570 16138 17427 +3 14570 17427 15797 +3 14571 14789 15523 +3 14571 15523 15311 +3 14572 15312 15524 +3 14572 15524 14790 +3 14573 17323 18561 +3 14573 18561 15555 +3 14574 15556 18562 +3 14574 18562 17324 +3 14575 16038 16661 +3 14575 16661 15184 +3 14576 15185 16662 +3 14576 16662 16039 +3 14577 15343 17041 +3 14577 17041 16247 +3 14578 16248 17042 +3 14578 17042 15344 +3 14579 15001 15209 +3 14579 15209 14771 +3 14580 14772 15210 +3 14580 15210 15002 +3 14581 15110 15317 +3 14581 15317 14681 +3 14582 14682 15318 +3 14582 15318 15111 +3 14583 14719 15219 +3 14583 15219 15067 +3 14584 15068 15220 +3 14584 15220 14720 +3 14585 16436 18108 +3 14585 18108 16121 +3 14586 16122 18109 +3 14586 18109 16437 +3 14587 14805 15011 +3 14587 15011 14813 +3 14588 14814 15012 +3 14588 15012 14806 +3 14589 15221 16597 +3 14589 16597 15924 +3 14590 15925 16598 +3 14590 16598 15222 +3 14591 15549 18506 +3 14591 18506 17311 +3 14592 17312 18507 +3 14592 18507 15550 +3 14593 14899 16028 +3 14593 16028 15683 +3 14594 15684 16029 +3 14594 16029 14900 +3 14595 15490 18012 +3 14595 18012 16988 +3 14596 16989 18013 +3 14596 18013 15491 +3 14597 15353 17162 +3 14597 17162 16418 +3 14598 16419 17163 +3 14598 17163 15354 +3 14599 16145 16800 +3 14599 16800 15225 +3 14600 15226 16801 +3 14600 16801 16146 +3 14601 15276 17566 +3 14601 17566 16848 +3 14602 16849 17567 +3 14602 17567 15277 +3 14603 15468 16669 +3 14603 16669 16187 +3 14604 16188 16670 +3 14604 16670 15469 +3 14605 15143 15498 +3 14605 15498 15142 +3 14606 16994 18266 +3 14606 18266 15726 +3 14607 15727 18267 +3 14607 18267 16995 +3 14608 15856 17258 +3 14608 17258 14985 +3 14609 14986 17259 +3 14609 17259 15857 +3 14610 16808 17712 +3 14610 17712 15527 +3 14611 15528 17713 +3 14611 17713 16809 +3 14612 15715 17103 +3 14612 17103 15992 +3 14613 15993 17104 +3 14613 17104 15718 +3 14614 15267 15482 +3 14614 15482 14845 +3 14615 14846 15483 +3 14615 15483 15268 +3 14616 14761 15102 +3 14616 15102 14943 +3 14617 14944 15103 +3 14617 15103 14762 +3 14618 14915 15513 +3 14618 15513 15211 +3 14619 15212 15514 +3 14619 15514 14916 +3 14620 14689 15764 +3 14620 15739 14621 +3 14620 15764 15739 +3 14621 15739 15765 +3 14621 15765 14690 +3 14622 15116 16405 +3 14622 16405 15894 +3 14623 15895 16406 +3 14623 16406 15117 +3 14624 16478 16932 +3 14624 16932 15053 +3 14625 15054 16933 +3 14625 16933 16479 +3 14626 15379 15758 +3 14626 15758 14989 +3 14627 14990 15759 +3 14627 15759 15380 +3 14628 14747 15112 +3 14628 15112 14971 +3 14629 14972 15113 +3 14629 15113 14748 +3 14630 15180 15950 +3 14630 15950 15347 +3 14631 15348 15951 +3 14631 15951 15181 +3 14632 15874 17452 +3 14632 17452 16784 +3 14633 16785 17453 +3 14633 17453 15875 +3 14634 15114 15679 +3 14634 15679 15178 +3 14635 15179 15680 +3 14635 15680 15115 +3 14636 15454 18014 +3 14636 18014 17068 +3 14637 17069 18015 +3 14637 18015 15455 +3 14638 14841 16040 +3 14638 15817 14861 +3 14638 16040 15817 +3 14639 14862 15818 +3 14639 15818 16041 +3 14639 16041 14842 +3 14640 15170 15687 +3 14640 15687 15126 +3 14641 15127 15688 +3 14641 15688 15171 +3 14642 16279 16715 +3 14642 16715 15039 +3 14643 15040 16716 +3 14643 16716 16280 +3 14644 14715 15081 +3 14644 15079 14659 +3 14644 15081 15079 +3 14645 14660 15080 +3 14645 15080 15082 +3 14645 15082 14716 +3 14646 16093 16729 +3 14646 16729 15034 +3 14647 15035 16730 +3 14647 16730 16094 +3 14648 15108 15365 +3 14648 15365 14891 +3 14649 14892 15366 +3 14649 15366 15109 +3 14650 14807 15629 +3 14650 15629 15846 +3 14650 15846 14833 +3 14651 14834 15847 +3 14651 15630 14808 +3 14651 15847 15630 +3 14652 14685 16687 +3 14652 16687 16688 +3 14652 16688 14686 +3 14653 15351 18061 +3 14653 18061 17262 +3 14654 17263 18062 +3 14654 18062 15352 +3 14655 15126 15699 +3 14655 15699 15114 +3 14656 15115 15700 +3 14656 15700 15127 +3 14657 14933 15977 +3 14657 15977 15388 +3 14658 15389 15978 +3 14658 15978 14934 +3 14659 15079 15132 +3 14659 15132 14707 +3 14660 14708 15133 +3 14660 15133 15080 +3 14661 14806 15083 +3 14661 15083 14805 +3 14662 14871 15164 +3 14662 15164 14931 +3 14663 14932 15165 +3 14663 15165 14872 +3 14664 15402 16014 +3 14664 16014 15191 +3 14665 15192 16015 +3 14665 16015 15403 +3 14666 15557 15896 +3 14666 15896 14941 +3 14667 14942 15897 +3 14667 15897 15558 +3 14668 14696 15606 +3 14668 15605 14695 +3 14668 15606 15605 +3 14669 14813 15088 +3 14669 15088 14939 +3 14670 14940 15089 +3 14670 15089 14814 +3 14671 16842 19076 +3 14671 19076 16915 +3 14672 14975 16523 +3 14672 16523 16173 +3 14673 16174 16524 +3 14673 16524 14976 +3 14674 16916 19077 +3 14674 19077 16843 +3 14675 15458 17678 +3 14675 17678 16816 +3 14676 16817 17679 +3 14676 17679 15459 +3 14677 14969 15174 +3 14677 15174 14871 +3 14678 14872 15175 +3 14678 15175 14970 +3 14679 14680 15385 +3 14679 15385 15400 +3 14679 15400 14713 +3 14680 14714 15401 +3 14680 15401 15385 +3 14681 15317 15433 +3 14681 15433 14823 +3 14682 14824 15434 +3 14682 15434 15318 +3 14683 15142 15778 +3 14683 15778 15297 +3 14684 15298 15779 +3 14684 15779 15143 +3 14685 14729 16739 +3 14685 16739 16687 +3 14686 16688 16740 +3 14686 16740 14730 +3 14687 15607 16525 +3 14687 16525 15533 +3 14688 15534 16526 +3 14688 16526 15608 +3 14689 14773 15876 +3 14689 15876 15764 +3 14690 15765 15877 +3 14690 15877 14774 +3 14691 15533 16510 +3 14691 16510 15573 +3 14692 15574 16511 +3 14692 16511 15534 +3 14693 15431 16725 +3 14693 16725 15956 +3 14694 15957 16726 +3 14694 16726 15432 +3 14695 15605 15664 +3 14695 15664 14733 +3 14696 14734 15665 +3 14696 15665 15606 +3 14697 15028 15377 +3 14697 15377 14769 +3 14698 14770 15378 +3 14698 15378 15029 +3 14699 16325 17617 +3 14699 17617 16008 +3 14700 16009 17618 +3 14700 17618 16326 +3 14701 14937 15235 +3 14701 15235 14973 +3 14702 14974 15236 +3 14702 15236 14938 +3 14703 16693 18389 +3 14703 18389 16233 +3 14704 16234 18390 +3 14704 18390 16694 +3 14705 15868 18675 +3 14705 18675 17386 +3 14706 17387 18676 +3 14706 18676 15869 +3 14707 15132 15217 +3 14707 15217 14821 +3 14708 14822 15218 +3 14708 15218 15133 +3 14709 16533 17436 +3 14709 17436 15601 +3 14710 15602 17437 +3 14710 17437 16534 +3 14711 16099 17023 +3 14711 17023 15597 +3 14712 15598 17024 +3 14712 17024 16100 +3 14713 15400 15448 +3 14713 15448 14793 +3 14714 14794 15449 +3 14714 15449 15401 +3 14715 14852 15207 +3 14715 15207 15081 +3 14716 15082 15208 +3 14716 15208 14853 +3 14717 15233 15503 +3 14717 15503 15001 +3 14718 15002 15504 +3 14718 15504 15234 +3 14719 14925 15412 +3 14719 15412 15219 +3 14720 15220 15413 +3 14720 15413 14926 +3 14721 15507 15860 +3 14721 15860 15041 +3 14722 15042 15861 +3 14722 15861 15508 +3 14723 15249 16265 +3 14723 16265 15737 +3 14724 15738 16266 +3 14724 16266 15252 +3 14725 14935 15619 +3 14725 15619 15404 +3 14726 15405 15620 +3 14726 15620 14936 +3 14727 14728 16394 +3 14727 16394 16430 +3 14727 16430 14763 +3 14728 14764 16431 +3 14728 16431 16394 +3 14729 15426 17526 +3 14729 17526 16739 +3 14730 16740 17527 +3 14730 17527 15427 +3 14731 15435 15886 +3 14731 15886 15166 +3 14732 15167 15887 +3 14732 15887 15436 +3 14733 15664 15784 +3 14733 15784 14867 +3 14734 14868 15785 +3 14734 15785 15665 +3 14735 16561 17451 +3 14735 17451 16562 +3 14736 14759 15203 +3 14736 15203 15204 +3 14736 15204 14760 +3 14737 15780 16735 +3 14737 16735 15801 +3 14738 15802 16736 +3 14738 16736 15781 +3 14739 16527 18199 +3 14739 18199 16293 +3 14740 16296 18200 +3 14740 18200 16528 +3 14741 15215 16113 +3 14741 16113 15656 +3 14742 15657 16114 +3 14742 16114 15216 +3 14743 16109 16486 +3 14743 16486 15120 +3 14744 15121 16487 +3 14744 16487 16110 +3 14745 17438 18756 +3 14745 18756 15666 +3 14746 15667 18757 +3 14746 18757 17439 +3 14747 14931 15301 +3 14747 15301 15112 +3 14748 15113 15302 +3 14748 15302 14932 +3 14749 15288 16653 +3 14749 16653 16209 +3 14750 16210 16654 +3 14750 16654 15289 +3 14751 15335 16763 +3 14751 16763 16217 +3 14752 16218 16764 +3 14752 16764 15336 +3 14753 17280 18379 +3 14753 18379 15695 +3 14754 15696 18380 +3 14754 18380 17281 +3 14755 15573 16605 +3 14755 16605 15754 +3 14756 15755 16606 +3 14756 16606 15574 +3 14757 16183 17268 +3 14757 17268 15854 +3 14758 15855 17269 +3 14758 17269 16184 +3 14759 14847 15261 +3 14759 15261 15203 +3 14760 15204 15262 +3 14760 15262 14848 +3 14761 14973 15339 +3 14761 15339 15102 +3 14762 15103 15340 +3 14762 15340 14974 +3 14763 16430 16484 +3 14763 16484 14919 +3 14764 14920 16485 +3 14764 16485 16431 +3 14765 16345 18161 +3 14765 18161 16494 +3 14766 16495 18162 +3 14766 18162 16346 +3 14767 16928 17955 +3 14767 17955 15713 +3 14768 15714 17956 +3 14768 17956 16929 +3 14769 15377 15472 +3 14769 15472 14909 +3 14770 14910 15473 +3 14770 15473 15378 +3 14771 15209 15452 +3 14771 15452 15028 +3 14772 15029 15453 +3 14772 15453 15210 +3 14773 14929 16020 +3 14773 16020 15876 +3 14774 15877 16021 +3 14774 16021 14930 +3 14775 15914 16384 +3 14775 16384 15271 +3 14776 15272 16385 +3 14776 16385 15915 +3 14777 15930 19299 +3 14777 19299 17849 +3 14778 17850 19300 +3 14778 19300 15931 +3 14779 15182 15515 +3 14779 15515 15130 +3 14780 15131 15516 +3 14780 15516 15183 +3 14781 15323 15627 +3 14781 15627 15104 +3 14782 15105 15628 +3 14782 15628 15324 +3 14783 15645 15940 +3 14783 15940 15061 +3 14784 15062 15941 +3 14784 15941 15646 +3 14785 14964 15716 +3 14785 15716 15327 +3 14786 15328 15717 +3 14786 15717 14965 +3 14787 15104 15492 +3 14787 15492 15190 +3 14788 15190 15493 +3 14788 15493 15105 +3 14789 14960 15814 +3 14789 15814 15523 +3 14790 15524 15815 +3 14790 15815 14961 +3 14791 16293 18240 +3 14791 18240 16621 +3 14792 16622 18241 +3 14792 18241 16296 +3 14793 15448 15543 +3 14793 15543 14983 +3 14794 14984 15544 +3 14794 15544 15449 +3 14795 15130 15525 +3 14795 15525 15205 +3 14796 15206 15526 +3 14796 15526 15131 +3 14797 16719 17341 +3 14797 17341 15505 +3 14798 15506 17342 +3 14798 17342 16720 +3 14799 16103 16490 +3 14799 16490 15148 +3 14800 15149 16491 +3 14800 16491 16104 +3 14801 15858 16655 +3 14801 16655 15607 +3 14802 15608 16656 +3 14802 16656 15859 +3 14803 15900 16868 +3 14803 16868 15780 +3 14804 15781 16869 +3 14804 16869 15901 +3 14805 15083 15313 +3 14805 15313 15011 +3 14806 15012 15314 +3 14806 15314 15083 +3 14807 15022 15872 +3 14807 15872 15629 +3 14808 15630 15873 +3 14808 15873 15023 +3 14809 15361 16721 +3 14809 16721 16171 +3 14810 16172 16722 +3 14810 16722 15362 +3 14811 15535 16452 +3 14811 16452 15685 +3 14812 15686 16453 +3 14812 16453 15536 +3 14813 15011 15305 +3 14813 15305 15088 +3 14814 15089 15306 +3 14814 15306 15012 +3 14815 15649 16432 +3 14815 16432 15541 +3 14816 15542 16433 +3 14816 16433 15650 +3 14817 17236 18122 +3 14817 18122 15575 +3 14818 15576 18123 +3 14818 18123 17237 +3 14819 14887 15321 +3 14819 15250 14937 +3 14819 15321 15250 +3 14820 14938 15251 +3 14820 15251 15322 +3 14820 15322 14888 +3 14821 15217 15369 +3 14821 15369 14969 +3 14822 14970 15370 +3 14822 15370 15218 +3 14823 15433 15625 +3 14823 15625 15009 +3 14824 15010 15626 +3 14824 15626 15434 +3 14825 15541 16372 +3 14825 16372 15535 +3 14826 15536 16373 +3 14826 16373 15542 +3 14827 16073 16627 +3 14827 16627 15381 +3 14828 15382 16628 +3 14828 16628 16074 +3 14829 15178 15807 +3 14829 15807 15470 +3 14830 15471 15808 +3 14830 15808 15179 +3 14831 15801 16920 +3 14831 16920 15971 +3 14832 15972 16923 +3 14832 16923 15802 +3 14833 15846 16058 +3 14833 16058 15014 +3 14834 15015 16059 +3 14834 16059 15847 +3 14835 16750 17662 +3 14835 17662 15724 +3 14836 15725 17663 +3 14836 17663 16751 +3 14837 15462 17156 +3 14837 17156 16518 +3 14838 16519 17157 +3 14838 17157 15463 +3 14839 15227 16976 +3 14839 16976 16583 +3 14840 16584 16977 +3 14840 16977 15228 +3 14841 15075 16294 +3 14841 16294 16040 +3 14842 16041 16295 +3 14842 16295 15076 +3 14843 16137 17851 +3 14843 17851 16575 +3 14844 16576 17852 +3 14844 17852 16138 +3 14845 15482 15782 +3 14845 15782 15170 +3 14846 15171 15783 +3 14846 15783 15483 +3 14847 14943 15357 +3 14847 15357 15261 +3 14848 15262 15358 +3 14848 15358 14944 +3 14849 15823 16409 +3 14849 16409 15824 +3 14850 14897 15842 +3 14850 15816 14851 +3 14850 15842 15816 +3 14851 15816 15843 +3 14851 15843 14898 +3 14852 14939 15307 +3 14852 15307 15207 +3 14853 15208 15308 +3 14853 15308 14940 +3 14854 15247 16380 +3 14854 16380 15998 +3 14855 15999 16381 +3 14855 16381 15248 +3 14856 15735 16225 +3 14856 16225 15379 +3 14857 15380 16226 +3 14857 16226 15736 +3 14858 16052 16595 +3 14858 16595 15406 +3 14859 15407 16596 +3 14859 16596 16053 +3 14860 14886 16216 +3 14860 16215 14885 +3 14860 16216 16215 +3 14861 15817 16083 +3 14861 16083 15156 +3 14862 15157 16084 +3 14862 16084 15818 +3 14863 16311 17576 +3 14863 17576 16111 +3 14864 16112 17577 +3 14864 17577 16312 +3 14865 17692 19044 +3 14865 19044 15969 +3 14866 15970 19045 +3 14866 19045 17693 +3 14867 15784 15934 +3 14867 15934 15018 +3 14868 15019 15935 +3 14868 15935 15785 +3 14869 15396 17194 +3 14869 17194 16645 +3 14870 16646 17195 +3 14870 17195 15397 +3 14871 15174 15414 +3 14871 15414 15164 +3 14872 15165 15415 +3 14872 15415 15175 +3 14873 16665 17422 +3 14873 17422 15579 +3 14874 15580 17423 +3 14874 17423 16666 +3 14875 15501 17347 +3 14875 17347 16673 +3 14876 16674 17348 +3 14876 17348 15502 +3 14877 15297 16004 +3 14877 16004 15587 +3 14878 15588 16005 +3 14878 16005 15298 +3 14879 15786 16796 +3 14879 16796 15162 +3 14880 15163 16797 +3 14880 16797 15787 +3 14881 15388 16231 +3 14881 16231 15711 +3 14882 15712 16232 +3 14882 16232 15389 +3 14883 17286 18567 +3 14883 18567 15989 +3 14884 15989 18568 +3 14884 18568 17287 +3 14885 16215 16249 +3 14885 16249 14981 +3 14886 14982 16250 +3 14886 16250 16216 +3 14887 14971 15390 +3 14887 15390 15321 +3 14888 15322 15391 +3 14888 15391 14972 +3 14889 16149 17190 +3 14889 17190 15926 +3 14890 15927 17191 +3 14890 17191 16150 +3 14891 15365 15641 +3 14891 15641 15182 +3 14892 15183 15642 +3 14892 15642 15366 +3 14893 17570 18508 +3 14893 18508 15613 +3 14894 15614 18509 +3 14894 18509 17571 +3 14895 16313 17541 +3 14895 17541 16277 +3 14896 16278 17542 +3 14896 17542 16314 +3 14897 14967 15908 +3 14897 15908 15842 +3 14898 15843 15909 +3 14898 15909 14968 +3 14899 15278 16378 +3 14899 16378 16028 +3 14900 16029 16379 +3 14900 16379 15279 +3 14901 16462 18049 +3 14901 18049 16426 +3 14902 16427 18050 +3 14902 18050 16463 +3 14903 16426 18079 +3 14903 18079 16482 +3 14904 16483 18080 +3 14904 18080 16427 +3 14905 14962 17623 +3 14905 17598 14906 +3 14905 17623 17598 +3 14906 17598 17624 +3 14906 17624 14963 +3 14907 17140 18018 +3 14907 18018 15705 +3 14908 15706 18019 +3 14908 18019 17141 +3 14909 15472 15671 +3 14909 15671 15108 +3 14910 15109 15672 +3 14910 15672 15473 +3 14911 16874 17649 +3 14911 17649 15675 +3 14912 15676 17650 +3 14912 17650 16875 +3 14913 17186 19457 +3 14913 19457 16842 +3 14914 16843 19458 +3 14914 19458 17187 +3 14915 15327 15906 +3 14915 15906 15513 +3 14916 15514 15907 +3 14916 15907 15328 +3 14917 15662 17164 +3 14917 17164 16454 +3 14918 16455 17165 +3 14918 17165 15663 +3 14919 16484 17047 +3 14919 17047 15476 +3 14920 15477 17048 +3 14920 17048 16485 +3 14921 15239 16349 +3 14921 16349 16579 +3 14921 16579 15176 +3 14922 15177 16580 +3 14922 16350 15240 +3 14922 16580 16350 +3 14923 17714 18689 +3 14923 18689 15703 +3 14924 15704 18690 +3 14924 18690 17715 +3 14925 15205 15673 +3 14925 15673 15412 +3 14926 15413 15674 +3 14926 15674 15206 +3 14927 16360 16992 +3 14927 16992 15553 +3 14928 15554 16993 +3 14928 16993 16361 +3 14929 15367 16440 +3 14929 16440 16020 +3 14930 16021 16441 +3 14930 16441 15368 +3 14931 15164 15488 +3 14931 15488 15301 +3 14932 15302 15489 +3 14932 15489 15165 +3 14933 15309 16317 +3 14933 16317 15977 +3 14934 15978 16318 +3 14934 16318 15310 +3 14935 15211 15890 +3 14935 15890 15619 +3 14936 15620 15891 +3 14936 15891 15212 +3 14937 15250 15517 +3 14937 15517 15235 +3 14938 15236 15518 +3 14938 15518 15251 +3 14939 15088 15422 +3 14939 15422 15307 +3 14940 15308 15423 +3 14940 15423 15089 +3 14941 15896 16243 +3 14941 16243 15333 +3 14942 15334 16244 +3 14942 16244 15897 +3 14943 15102 15494 +3 14943 15494 15357 +3 14944 15358 15495 +3 14944 15495 15103 +3 14945 15096 15985 +3 14945 15798 15071 +3 14945 15985 15798 +3 14946 15072 15799 +3 14946 15799 15986 +3 14946 15986 15097 +3 14947 15852 16549 +3 14947 16549 15649 +3 14948 15650 16550 +3 14948 16550 15853 +3 14949 15992 17483 +3 14949 17483 16474 +3 14950 16475 17484 +3 14950 17484 15993 +3 14951 15754 16798 +3 14951 16798 16018 +3 14952 16019 16799 +3 14952 16799 15755 +3 14953 16283 16919 +3 14953 16919 16284 +3 14954 15658 17599 +3 14954 17599 16908 +3 14955 16909 17600 +3 14955 17600 15659 +3 14956 16105 17039 +3 14956 17039 15900 +3 14957 15901 17040 +3 14957 17040 16106 +3 14958 14991 15577 +3 14958 15577 15744 +3 14958 15744 15110 +3 14959 15111 15745 +3 14959 15578 14992 +3 14959 15745 15578 +3 14960 15265 16079 +3 14960 16079 15814 +3 14961 15815 16080 +3 14961 16080 15266 +3 14962 15987 18868 +3 14962 18868 17623 +3 14963 17624 18869 +3 14963 18869 15988 +3 14964 15199 15928 +3 14964 15928 15716 +3 14965 15717 15929 +3 14965 15929 15200 +3 14966 14987 14988 +3 14966 14988 14994 +3 14966 14993 14987 +3 14966 14994 14996 +3 14966 14995 14993 +3 14966 14996 14995 +3 14967 15094 16024 +3 14967 16024 15908 +3 14968 15909 16025 +3 14968 16025 15095 +3 14969 15369 15529 +3 14969 15529 15174 +3 14970 15175 15530 +3 14970 15530 15370 +3 14971 15112 15511 +3 14971 15511 15390 +3 14972 15391 15512 +3 14972 15512 15113 +3 14973 15235 15545 +3 14973 15545 15339 +3 14974 15340 15546 +3 14974 15546 15236 +3 14975 15355 16888 +3 14975 16888 16523 +3 14976 16524 16889 +3 14976 16889 15356 +3 14977 15521 17959 +3 14977 17959 17358 +3 14978 17359 17960 +3 14978 17960 15522 +3 14979 16494 18437 +3 14979 18437 16765 +3 14980 16766 18438 +3 14980 18438 16495 +3 14981 16249 16374 +3 14981 16374 15136 +3 14982 15137 16375 +3 14982 16375 16250 +3 14983 15543 15805 +3 14983 15805 15233 +3 14984 15234 15806 +3 14984 15806 15544 +3 14985 17258 17736 +3 14985 17736 15456 +3 14986 15457 17737 +3 14986 17737 17259 +3 14987 14993 15026 +3 14987 15013 14988 +3 14987 15026 15043 +3 14987 15043 15013 +3 14988 15013 15044 +3 14988 15027 14994 +3 14988 15044 15027 +3 14989 15758 16191 +3 14989 16191 15430 +3 14990 15430 16192 +3 14990 16192 15759 +3 14991 15067 15647 +3 14991 15647 15577 +3 14992 15578 15648 +3 14992 15648 15068 +3 14993 14995 15036 +3 14993 15036 15059 +3 14993 15059 15026 +3 14994 15027 15060 +3 14994 15037 14996 +3 14994 15060 15037 +3 14995 14996 15038 +3 14995 15038 15069 +3 14995 15069 15036 +3 14996 15037 15070 +3 14996 15070 15038 +3 14997 16828 18532 +3 14997 18532 16527 +3 14998 16528 18533 +3 14998 18533 16829 +3 14999 17645 18819 +3 14999 18819 15996 +3 15000 15997 18820 +3 15000 18820 17646 +3 15001 15503 15731 +3 15001 15731 15209 +3 15002 15210 15732 +3 15002 15732 15504 +3 15003 15685 16632 +3 15003 16632 15948 +3 15004 15949 16633 +3 15004 16633 15686 +3 15005 17329 18373 +3 15005 18373 15922 +3 15006 15923 18374 +3 15006 18374 17330 +3 15007 15583 17631 +3 15007 17631 17045 +3 15008 17046 17632 +3 15008 17632 15584 +3 15009 15625 15904 +3 15009 15904 15323 +3 15010 15324 15905 +3 15010 15905 15626 +3 15011 15313 15531 +3 15011 15531 15305 +3 15012 15306 15532 +3 15012 15532 15314 +3 15013 15043 15092 +3 15013 15092 15093 +3 15013 15093 15044 +3 15014 16058 16331 +3 15014 16331 15284 +3 15015 15285 16332 +3 15015 16332 16059 +3 15016 15670 16896 +3 15016 16896 16263 +3 15017 16264 16897 +3 15017 16897 15670 +3 15018 15934 16327 +3 15018 16327 15257 +3 15019 15258 16328 +3 15019 16328 15935 +3 15020 16915 19622 +3 15020 19622 17408 +3 15021 17409 19623 +3 15021 19623 16916 +3 15022 15347 16125 +3 15022 16125 15872 +3 15023 15873 16126 +3 15023 16126 15348 +3 15024 15623 17853 +3 15024 17853 16986 +3 15025 16987 17854 +3 15025 17854 15624 +3 15026 15059 15140 +3 15026 15124 15043 +3 15026 15140 15124 +3 15027 15044 15125 +3 15027 15125 15141 +3 15027 15141 15060 +3 15028 15452 15776 +3 15028 15776 15377 +3 15029 15378 15777 +3 15029 15777 15453 +3 15030 16277 17762 +3 15030 17762 16508 +3 15031 16509 17763 +3 15031 17763 16278 +3 15032 17214 19333 +3 15032 19333 17148 +3 15033 17149 19334 +3 15033 19334 17215 +3 15034 16729 17202 +3 15034 17202 15519 +3 15035 15520 17203 +3 15035 17203 16730 +3 15036 15069 15152 +3 15036 15144 15059 +3 15036 15152 15144 +3 15037 15060 15145 +3 15037 15145 15153 +3 15037 15153 15070 +3 15038 15070 15159 +3 15038 15158 15069 +3 15038 15159 15158 +3 15039 16715 17178 +3 15039 17178 15509 +3 15040 15510 17179 +3 15040 17179 16716 +3 15041 15860 16223 +3 15041 16223 15435 +3 15042 15436 16224 +3 15042 16224 15861 +3 15043 15124 15150 +3 15043 15150 15092 +3 15044 15093 15151 +3 15044 15151 15125 +3 15045 16329 17578 +3 15045 17578 16325 +3 15046 16326 17579 +3 15046 17579 16330 +3 15047 16147 18613 +3 15047 18613 17345 +3 15048 17346 18614 +3 15048 18614 16148 +3 15049 15621 17558 +3 15049 17558 17010 +3 15050 17011 17559 +3 15050 17559 15622 +3 15051 15971 17146 +3 15051 17146 16287 +3 15052 16288 17147 +3 15052 17147 15972 +3 15053 16932 17464 +3 15053 17464 15551 +3 15054 15552 17465 +3 15054 17465 16933 +3 15055 16107 17307 +3 15055 17307 16269 +3 15056 16270 17308 +3 15056 17308 16108 +3 15057 16683 17434 +3 15057 17434 15827 +3 15058 15827 17435 +3 15058 17435 16684 +3 15059 15144 15188 +3 15059 15188 15140 +3 15060 15141 15189 +3 15060 15189 15145 +3 15061 15940 16267 +3 15061 16267 15402 +3 15062 15403 16268 +3 15062 16268 15941 +3 15063 16201 16958 +3 15063 16958 15858 +3 15064 15859 16959 +3 15064 16959 16202 +3 15065 17574 18409 +3 15065 18409 15770 +3 15066 15771 18410 +3 15066 18410 17575 +3 15067 15219 15792 +3 15067 15792 15647 +3 15068 15648 15793 +3 15068 15793 15220 +3 15069 15158 15197 +3 15069 15197 15152 +3 15070 15153 15198 +3 15070 15198 15159 +3 15071 15798 15954 +3 15071 15954 15267 +3 15072 15268 15955 +3 15072 15955 15799 +3 15073 17248 17972 +3 15073 17972 15750 +3 15074 15751 17973 +3 15074 17973 17249 +3 15075 15373 16565 +3 15075 16565 16294 +3 15076 16295 16566 +3 15076 16566 15374 +3 15077 16335 17337 +3 15077 17337 16107 +3 15078 16108 17338 +3 15078 17338 16336 +3 15079 15081 15581 +3 15079 15581 15617 +3 15079 15617 15132 +3 15080 15133 15618 +3 15080 15582 15082 +3 15080 15618 15582 +3 15081 15207 15611 +3 15081 15611 15581 +3 15082 15582 15612 +3 15082 15612 15208 +3 15083 15314 15593 +3 15083 15593 15313 +3 15084 15748 17349 +3 15084 17349 16710 +3 15085 16711 17350 +3 15085 17350 15749 +3 15086 16006 16647 +3 15086 16647 15460 +3 15087 15461 16648 +3 15087 16648 16007 +3 15088 15305 15589 +3 15088 15589 15422 +3 15089 15423 15590 +3 15089 15590 15306 +3 15090 17688 18945 +3 15090 18945 16229 +3 15091 16230 18946 +3 15091 18946 17689 +3 15092 15150 15213 +3 15092 15193 15093 +3 15092 15213 15193 +3 15093 15193 15214 +3 15093 15214 15151 +3 15094 15404 16161 +3 15094 16161 16024 +3 15095 16025 16162 +3 15095 16162 15405 +3 15096 15311 16153 +3 15096 16153 15985 +3 15097 15986 16154 +3 15097 16154 15312 +3 15098 17168 17841 +3 15098 17841 16311 +3 15099 16312 17842 +3 15099 17842 17169 +3 15100 17444 18415 +3 15100 18415 15944 +3 15101 15945 18416 +3 15101 18416 17445 +3 15102 15339 15709 +3 15102 15709 15494 +3 15103 15495 15710 +3 15103 15710 15340 +3 15104 15627 16030 +3 15104 16030 15492 +3 15105 15493 16031 +3 15105 16031 15628 +3 15106 16623 17857 +3 15106 17857 16313 +3 15107 16314 17858 +3 15107 17858 16624 +3 15108 15671 15918 +3 15108 15918 15365 +3 15109 15366 15919 +3 15109 15919 15672 +3 15110 15744 15920 +3 15110 15920 15317 +3 15111 15318 15921 +3 15111 15921 15745 +3 15112 15301 15691 +3 15112 15691 15511 +3 15113 15512 15692 +3 15113 15692 15302 +3 15114 15699 16251 +3 15114 16251 15679 +3 15115 15680 16252 +3 15115 16252 15700 +3 15116 15651 16962 +3 15116 16962 16405 +3 15117 16406 16963 +3 15117 16963 15652 +3 15118 15499 17647 +3 15118 17647 16329 +3 15119 16330 17648 +3 15119 17648 15500 +3 15120 16486 16890 +3 15120 16890 15539 +3 15121 15540 16891 +3 15121 16891 16487 +3 15122 16044 18157 +3 15122 18157 17230 +3 15123 17231 18158 +3 15123 18158 16045 +3 15124 15140 15253 +3 15124 15253 15255 +3 15124 15255 15150 +3 15125 15151 15256 +3 15125 15254 15141 +3 15125 15256 15254 +3 15126 15687 16257 +3 15126 16257 15699 +3 15127 15700 16258 +3 15127 16258 15688 +3 15128 15819 16488 +3 15128 16488 15830 +3 15129 15831 16489 +3 15129 16489 15820 +3 15130 15515 16012 +3 15130 16012 15525 +3 15131 15526 16013 +3 15131 16013 15516 +3 15132 15617 15693 +3 15132 15693 15217 +3 15133 15218 15694 +3 15133 15694 15618 +3 15134 16245 17274 +3 15134 17274 16183 +3 15135 16184 17275 +3 15135 17275 16246 +3 15136 16374 16852 +3 15136 16852 15591 +3 15137 15592 16853 +3 15137 16853 16375 +3 15138 15830 16496 +3 15138 16496 15821 +3 15139 15822 16497 +3 15139 16497 15831 +3 15140 15188 15286 +3 15140 15286 15253 +3 15141 15254 15287 +3 15141 15287 15189 +3 15142 15498 16119 +3 15142 16119 15778 +3 15143 15779 16120 +3 15143 16120 15498 +3 15144 15152 15280 +3 15144 15280 15299 +3 15144 15299 15188 +3 15145 15189 15300 +3 15145 15281 15153 +3 15145 15300 15281 +3 15146 17212 18077 +3 15146 18077 15946 +3 15147 15947 18078 +3 15147 18078 17213 +3 15148 16490 16882 +3 15148 16882 15537 +3 15149 15538 16883 +3 15149 16883 16491 +3 15150 15255 15295 +3 15150 15295 15213 +3 15151 15214 15296 +3 15151 15296 15256 +3 15152 15197 15325 +3 15152 15325 15280 +3 15153 15281 15326 +3 15153 15326 15198 +3 15154 16878 17588 +3 15154 17588 15910 +3 15155 15911 17589 +3 15155 17589 16879 +3 15156 16083 16777 +3 15156 16777 15852 +3 15157 15853 16778 +3 15157 16778 16084 +3 15158 15159 15290 +3 15158 15290 15331 +3 15158 15331 15197 +3 15159 15198 15332 +3 15159 15332 15290 +3 15160 16621 18738 +3 15160 18738 17066 +3 15161 17067 18739 +3 15161 18739 16622 +3 15162 16796 17109 +3 15162 17109 15478 +3 15163 15479 17110 +3 15163 17110 16797 +3 15164 15414 15752 +3 15164 15752 15488 +3 15165 15489 15753 +3 15165 15753 15415 +3 15166 15886 16353 +3 15166 16353 15645 +3 15167 15646 16354 +3 15167 16354 15887 +3 15168 18191 19558 +3 15168 19558 16289 +3 15169 16290 19559 +3 15169 19559 18192 +3 15170 15782 16291 +3 15170 16291 15687 +3 15171 15688 16292 +3 15171 16292 15783 +3 15172 16056 19029 +3 15172 19029 17748 +3 15173 17749 19030 +3 15173 19030 16057 +3 15174 15529 15774 +3 15174 15774 15414 +3 15175 15415 15775 +3 15175 15775 15530 +3 15176 16579 16854 +3 15176 16854 15439 +3 15177 15440 16855 +3 15177 16855 16580 +3 15178 15679 16309 +3 15178 16309 15807 +3 15179 15808 16310 +3 15179 16310 15680 +3 15180 15821 16567 +3 15180 16567 15950 +3 15181 15951 16568 +3 15181 16568 15822 +3 15182 15641 15990 +3 15182 15990 15515 +3 15183 15516 15991 +3 15183 15991 15642 +3 15184 16661 17242 +3 15184 17242 15746 +3 15185 15747 17243 +3 15185 17243 16662 +3 15186 16269 17485 +3 15186 17485 16448 +3 15187 16449 17486 +3 15187 17486 16270 +3 15188 15299 15359 +3 15188 15359 15286 +3 15189 15287 15360 +3 15189 15360 15300 +3 15190 15492 15958 +3 15190 15958 15493 +3 15191 16014 16603 +3 15191 16603 15819 +3 15192 15820 16604 +3 15192 16604 16015 +3 15193 15213 15337 +3 15193 15337 15338 +3 15193 15338 15214 +3 15194 16271 19663 +3 15194 19663 18264 +3 15195 18265 19664 +3 15195 19664 16272 +3 15196 15230 17128 +3 15196 17127 15229 +3 15196 17128 17127 +3 15197 15331 15386 +3 15197 15386 15325 +3 15198 15326 15387 +3 15198 15387 15332 +3 15199 15470 16205 +3 15199 16205 15928 +3 15200 15929 16206 +3 15200 16206 15471 +3 15201 16846 18504 +3 15201 18504 16693 +3 15202 16694 18505 +3 15202 18505 16847 +3 15203 15261 15733 +3 15203 15719 15204 +3 15203 15733 15719 +3 15204 15719 15734 +3 15204 15734 15262 +3 15205 15525 15994 +3 15205 15994 15673 +3 15206 15674 15995 +3 15206 15995 15526 +3 15207 15307 15689 +3 15207 15689 15611 +3 15208 15612 15690 +3 15208 15690 15308 +3 15209 15731 15979 +3 15209 15979 15452 +3 15210 15453 15980 +3 15210 15980 15732 +3 15211 15513 16177 +3 15211 16177 15890 +3 15212 15891 16178 +3 15212 16178 15514 +3 15213 15295 15375 +3 15213 15375 15337 +3 15214 15338 15376 +3 15214 15376 15296 +3 15215 15728 16613 +3 15215 16613 16113 +3 15216 16114 16614 +3 15216 16614 15728 +3 15217 15693 15809 +3 15217 15809 15369 +3 15218 15370 15810 +3 15218 15810 15694 +3 15219 15412 15973 +3 15219 15973 15792 +3 15220 15793 15974 +3 15220 15974 15413 +3 15221 15956 17325 +3 15221 17325 16597 +3 15222 16598 17326 +3 15222 17326 15957 +3 15223 16123 18722 +3 15223 18722 17619 +3 15224 17620 18723 +3 15224 18723 16124 +3 15225 16800 17517 +3 15225 17517 15965 +3 15226 15966 17518 +3 15226 17518 16801 +3 15227 15660 17400 +3 15227 17400 16976 +3 15228 16977 17401 +3 15228 17401 15661 +3 15229 17127 17184 +3 15229 17184 15315 +3 15230 15316 17185 +3 15230 17185 17128 +3 15231 16450 17321 +3 15231 17321 16105 +3 15232 16106 17322 +3 15232 17322 16451 +3 15233 15805 16077 +3 15233 16077 15503 +3 15234 15504 16078 +3 15234 16078 15806 +3 15235 15517 15866 +3 15235 15866 15545 +3 15236 15546 15867 +3 15236 15867 15518 +3 15237 16139 18314 +3 15237 18314 17284 +3 15238 17285 18315 +3 15238 18315 16140 +3 15239 16018 17089 +3 15239 17089 16349 +3 15240 16350 17090 +3 15240 17090 16019 +3 15241 16071 19214 +3 15241 19214 18213 +3 15242 18214 19215 +3 15242 19215 16072 +3 15243 16708 18563 +3 15243 18563 16926 +3 15244 16927 18564 +3 15244 18564 16709 +3 15245 16508 18087 +3 15245 18087 16782 +3 15246 16783 18088 +3 15246 18088 16509 +3 15247 15711 16844 +3 15247 16844 16380 +3 15248 16381 16845 +3 15248 16845 15712 +3 15249 15656 16685 +3 15249 16685 16265 +3 15250 15321 15760 +3 15250 15760 15517 +3 15251 15518 15761 +3 15251 15761 15322 +3 15252 16266 16686 +3 15252 16686 15657 +3 15253 15286 15410 +3 15253 15394 15255 +3 15253 15410 15394 +3 15254 15256 15395 +3 15254 15395 15411 +3 15254 15411 15287 +3 15255 15394 15420 +3 15255 15420 15295 +3 15256 15296 15421 +3 15256 15421 15395 +3 15257 16327 16553 +3 15257 16553 15507 +3 15258 15508 16554 +3 15258 16554 16328 +3 15259 16744 17200 +3 15259 17200 16099 +3 15260 16100 17201 +3 15260 17201 16745 +3 15261 15357 15812 +3 15261 15812 15733 +3 15262 15734 15813 +3 15262 15813 15358 +3 15263 17095 19218 +3 15263 19218 17085 +3 15264 17086 19219 +3 15264 19219 17096 +3 15265 15587 16407 +3 15265 16407 16079 +3 15266 16080 16408 +3 15266 16408 15588 +3 15267 15954 16165 +3 15267 16165 15482 +3 15268 15483 16166 +3 15268 16166 15955 +3 15269 16559 17609 +3 15269 17609 16335 +3 15270 16336 17610 +3 15270 17610 16560 +3 15271 16384 16930 +3 15271 16930 15823 +3 15272 15824 16931 +3 15272 16931 16385 +3 15273 17006 17867 +3 15273 17867 17005 +3 15274 16347 19331 +3 15274 19331 18020 +3 15275 18021 19332 +3 15275 19332 16348 +3 15276 16036 18478 +3 15276 18478 17566 +3 15277 17567 18479 +3 15277 18479 16037 +3 15278 15737 16812 +3 15278 16812 16378 +3 15279 16379 16813 +3 15279 16813 15738 +3 15280 15325 15424 +3 15280 15416 15299 +3 15280 15424 15416 +3 15281 15300 15417 +3 15281 15417 15425 +3 15281 15425 15326 +3 15282 17031 18624 +3 15282 18624 16708 +3 15283 16709 18625 +3 15283 18625 17032 +3 15284 16331 16599 +3 15284 16599 15557 +3 15285 15558 16600 +3 15285 16600 16332 +3 15286 15359 15450 +3 15286 15450 15410 +3 15287 15411 15451 +3 15287 15451 15360 +3 15288 15894 17260 +3 15288 17260 16653 +3 15289 16654 17261 +3 15289 17261 15895 +3 15290 15332 15445 +3 15290 15444 15331 +3 15290 15445 15444 +3 15291 16355 18874 +3 15291 18874 17586 +3 15292 17587 18875 +3 15292 18875 16355 +3 15293 16337 19704 +3 15293 19704 18469 +3 15294 18470 19705 +3 15294 19705 16338 +3 15295 15420 15474 +3 15295 15474 15375 +3 15296 15376 15475 +3 15296 15475 15421 +3 15297 15778 16464 +3 15297 16464 16004 +3 15298 16005 16465 +3 15298 16465 15779 +3 15299 15416 15446 +3 15299 15446 15359 +3 15300 15360 15447 +3 15300 15447 15417 +3 15301 15488 15902 +3 15301 15902 15691 +3 15302 15692 15903 +3 15302 15903 15489 +3 15303 16026 18797 +3 15303 18797 17907 +3 15304 17908 18798 +3 15304 18798 16027 +3 15305 15531 15848 +3 15305 15848 15589 +3 15306 15590 15849 +3 15306 15849 15532 +3 15307 15422 15803 +3 15307 15803 15689 +3 15308 15690 15804 +3 15308 15804 15423 +3 15309 15948 16950 +3 15309 16950 16317 +3 15310 16318 16951 +3 15310 16951 15949 +3 15311 15523 16376 +3 15311 16376 16153 +3 15312 16154 16377 +3 15312 16377 15524 +3 15313 15593 15840 +3 15313 15840 15531 +3 15314 15532 15841 +3 15314 15841 15593 +3 15315 17184 17988 +3 15315 17988 15981 +3 15316 15982 17989 +3 15316 17989 17185 +3 15317 15920 16133 +3 15317 16133 15433 +3 15318 15434 16134 +3 15318 16134 15921 +3 15319 17085 19394 +3 15319 19394 17186 +3 15320 17187 19395 +3 15320 19395 17086 +3 15321 15390 15836 +3 15321 15836 15760 +3 15322 15761 15837 +3 15322 15837 15391 +3 15323 15904 16219 +3 15323 16219 15627 +3 15324 15628 16220 +3 15324 16220 15905 +3 15325 15386 15466 +3 15325 15466 15424 +3 15326 15425 15467 +3 15326 15467 15387 +3 15327 15716 16281 +3 15327 16281 15906 +3 15328 15907 16282 +3 15328 16282 15717 +3 15329 17148 19684 +3 15329 19684 17471 +3 15330 17472 19685 +3 15330 19685 17149 +3 15331 15444 15496 +3 15331 15496 15386 +3 15332 15387 15497 +3 15332 15497 15445 +3 15333 16243 16636 +3 15333 16636 15735 +3 15334 15736 16637 +3 15334 16637 16244 +3 15335 15924 17366 +3 15335 17366 16763 +3 15336 16764 17367 +3 15336 17367 15925 +3 15337 15375 15464 +3 15337 15437 15338 +3 15337 15464 15437 +3 15338 15437 15465 +3 15338 15465 15376 +3 15339 15545 15936 +3 15339 15936 15709 +3 15340 15710 15937 +3 15340 15937 15546 +3 15341 16221 19487 +3 15341 19487 18403 +3 15342 18404 19488 +3 15342 19488 16222 +3 15343 16187 17919 +3 15343 17919 17041 +3 15344 17042 17920 +3 15344 17920 16188 +3 15345 15959 19283 +3 15345 19283 17095 +3 15346 17096 19284 +3 15346 19284 15960 +3 15347 15950 16723 +3 15347 16723 16125 +3 15348 16126 16724 +3 15348 16724 15951 +3 15349 15350 17965 +3 15349 17965 17982 +3 15349 17982 15398 +3 15350 15399 17983 +3 15350 17983 17965 +3 15351 16081 18981 +3 15351 18981 18061 +3 15352 18062 18982 +3 15352 18982 16082 +3 15353 16207 18097 +3 15353 18097 17162 +3 15354 17163 18098 +3 15354 18098 16208 +3 15355 15766 17288 +3 15355 17288 16888 +3 15356 16889 17289 +3 15356 17289 15767 +3 15357 15494 15952 +3 15357 15952 15812 +3 15358 15813 15953 +3 15358 15953 15495 +3 15359 15446 15547 +3 15359 15547 15450 +3 15360 15451 15548 +3 15360 15548 15447 +3 15361 15762 17305 +3 15361 17305 16721 +3 15362 16722 17306 +3 15362 17306 15763 +3 15363 16794 18433 +3 15363 18433 16828 +3 15364 16829 18434 +3 15364 18434 16795 +3 15365 15918 16163 +3 15365 16163 15641 +3 15366 15642 16164 +3 15366 16164 15919 +3 15367 15635 16880 +3 15367 16880 16440 +3 15368 16441 16881 +3 15368 16881 15636 +3 15369 15809 15975 +3 15369 15975 15529 +3 15370 15530 15976 +3 15370 15976 15810 +3 15371 16860 18451 +3 15371 18451 16794 +3 15372 16795 18452 +3 15372 18452 16861 +3 15373 15683 16876 +3 15373 16876 16565 +3 15374 16566 16877 +3 15374 16877 15684 +3 15375 15474 15563 +3 15375 15563 15464 +3 15376 15465 15564 +3 15376 15564 15475 +3 15377 15776 16127 +3 15377 16127 15472 +3 15378 15473 16128 +3 15378 16128 15777 +3 15379 16225 16581 +3 15379 16581 15758 +3 15380 15759 16582 +3 15380 16582 16226 +3 15381 16627 17250 +3 15381 17250 16006 +3 15382 16007 17251 +3 15382 17251 16628 +3 15383 16575 18002 +3 15383 18002 16746 +3 15384 16747 18003 +3 15384 18003 16576 +3 15385 15401 16190 +3 15385 16189 15400 +3 15385 16190 16189 +3 15386 15496 15559 +3 15386 15559 15466 +3 15387 15467 15560 +3 15387 15560 15497 +3 15388 15977 16769 +3 15388 16769 16231 +3 15389 16232 16770 +3 15389 16770 15978 +3 15390 15511 15942 +3 15390 15942 15836 +3 15391 15837 15943 +3 15391 15943 15512 +3 15392 17043 18308 +3 15392 18308 16623 +3 15393 16624 18309 +3 15393 18309 17044 +3 15394 15410 15571 +3 15394 15571 15585 +3 15394 15585 15420 +3 15395 15421 15586 +3 15395 15572 15411 +3 15395 15586 15572 +3 15396 16091 17814 +3 15396 17814 17194 +3 15397 17195 17815 +3 15397 17815 16092 +3 15398 17982 19158 +3 15398 19158 16368 +3 15399 16369 19159 +3 15399 19159 17983 +3 15400 16189 16235 +3 15400 16235 15448 +3 15401 15449 16236 +3 15401 16236 16190 +3 15402 16267 16814 +3 15402 16814 16014 +3 15403 16015 16815 +3 15403 16815 16268 +3 15404 15619 16364 +3 15404 16364 16161 +3 15405 16162 16365 +3 15405 16365 15620 +3 15406 16595 17058 +3 15406 17058 15914 +3 15407 15915 17059 +3 15407 17059 16596 +3 15408 17105 18750 +3 15408 18750 16846 +3 15409 16847 18751 +3 15409 18751 17106 +3 15410 15450 15609 +3 15410 15609 15571 +3 15411 15572 15610 +3 15411 15610 15451 +3 15412 15673 16185 +3 15412 16185 15973 +3 15413 15974 16186 +3 15413 16186 15674 +3 15414 15774 16042 +3 15414 16042 15752 +3 15415 15753 16043 +3 15415 16043 15775 +3 15416 15424 15561 +3 15416 15561 15595 +3 15416 15595 15446 +3 15417 15447 15596 +3 15417 15562 15425 +3 15417 15596 15562 +3 15418 17699 19873 +3 15418 19873 17214 +3 15419 17215 19874 +3 15419 19874 17700 +3 15420 15585 15643 +3 15420 15643 15474 +3 15421 15475 15644 +3 15421 15644 15586 +3 15422 15589 15963 +3 15422 15963 15803 +3 15423 15804 15964 +3 15423 15964 15590 +3 15424 15466 15603 +3 15424 15603 15561 +3 15425 15562 15604 +3 15425 15604 15467 +3 15426 16195 18449 +3 15426 18449 17526 +3 15427 17527 18450 +3 15427 18450 16196 +3 15428 16448 17772 +3 15428 17772 16742 +3 15429 16743 17773 +3 15429 17773 16449 +3 15430 16191 16629 +3 15430 16629 16192 +3 15431 16287 17552 +3 15431 17552 16725 +3 15432 16726 17553 +3 15432 17553 16288 +3 15433 16133 16297 +3 15433 16297 15625 +3 15434 15626 16298 +3 15434 16298 16134 +3 15435 16223 16619 +3 15435 16619 15886 +3 15436 15887 16620 +3 15436 16620 16224 +3 15437 15464 15615 +3 15437 15615 15616 +3 15437 15616 15465 +3 15438 17454 19592 +3 15438 19592 17511 +3 15439 16854 17158 +3 15439 17158 15772 +3 15440 15773 17159 +3 15440 17159 16855 +3 15441 17512 19593 +3 15441 19593 17455 +3 15442 15484 17025 +3 15442 17000 15443 +3 15442 17025 17000 +3 15443 17000 17026 +3 15443 17026 15485 +3 15444 15445 15653 +3 15444 15653 15677 +3 15444 15677 15496 +3 15445 15497 15678 +3 15445 15678 15653 +3 15446 15595 15701 +3 15446 15701 15547 +3 15447 15548 15702 +3 15447 15702 15596 +3 15448 16235 16307 +3 15448 16307 15543 +3 15449 15544 16308 +3 15449 16308 16236 +3 15450 15547 15707 +3 15450 15707 15609 +3 15451 15610 15708 +3 15451 15708 15548 +3 15452 15979 16261 +3 15452 16261 15776 +3 15453 15777 16262 +3 15453 16262 15980 +3 15454 16395 19135 +3 15454 19135 18014 +3 15455 18015 19136 +3 15455 19136 16396 +3 15456 17736 18341 +3 15456 18341 16010 +3 15457 16011 18342 +3 15457 18342 17737 +3 15458 16351 18718 +3 15458 18718 17678 +3 15459 17679 18719 +3 15459 18719 16352 +3 15460 16647 17353 +3 15460 17353 16201 +3 15461 16202 17354 +3 15461 17354 16648 +3 15462 16167 17890 +3 15462 17890 17156 +3 15463 17157 17891 +3 15463 17891 16168 +3 15464 15563 15729 +3 15464 15729 15615 +3 15465 15616 15730 +3 15465 15730 15564 +3 15466 15559 15697 +3 15466 15697 15603 +3 15467 15604 15698 +3 15467 15698 15560 +3 15468 16474 17664 +3 15468 17664 16669 +3 15469 16670 17665 +3 15469 17665 16475 +3 15470 15807 16504 +3 15470 16504 16205 +3 15471 16206 16505 +3 15471 16505 15808 +3 15472 16127 16305 +3 15472 16305 15671 +3 15473 15672 16306 +3 15473 16306 16128 +3 15474 15643 15742 +3 15474 15742 15563 +3 15475 15564 15743 +3 15475 15743 15644 +3 15476 17047 17672 +3 15476 17672 16093 +3 15477 16094 17673 +3 15477 17673 17048 +3 15478 17109 17467 +3 15478 17467 15880 +3 15479 15881 17468 +3 15479 17468 17110 +3 15480 16786 18045 +3 15480 18045 16810 +3 15481 16811 18048 +3 15481 18048 16787 +3 15482 16165 16442 +3 15482 16442 15782 +3 15483 15783 16443 +3 15483 16443 16166 +3 15484 15639 17072 +3 15484 17072 17025 +3 15485 17026 17073 +3 15485 17073 15640 +3 15486 16926 18888 +3 15486 18888 17232 +3 15487 17233 18889 +3 15487 18889 16927 +3 15488 15752 16129 +3 15488 16129 15902 +3 15489 15903 16130 +3 15489 16130 15753 +3 15490 16563 19246 +3 15490 19246 18012 +3 15491 18013 19247 +3 15491 19247 16564 +3 15492 16030 16458 +3 15492 16458 15958 +3 15493 15958 16459 +3 15493 16459 16031 +3 15494 15709 16135 +3 15494 16135 15952 +3 15495 15953 16136 +3 15495 16136 15710 +3 15496 15677 15740 +3 15496 15740 15559 +3 15497 15560 15741 +3 15497 15741 15678 +3 15498 16120 16522 +3 15498 16522 16119 +3 15499 15983 18183 +3 15499 18183 17647 +3 15500 17648 18184 +3 15500 18184 15984 +3 15501 16247 18151 +3 15501 18151 17347 +3 15502 17348 18152 +3 15502 18152 16248 +3 15503 16077 16275 +3 15503 16275 15731 +3 15504 15732 16276 +3 15504 16276 16078 +3 15505 17341 18073 +3 15505 18073 16193 +3 15506 16194 18074 +3 15506 18074 17342 +3 15507 16553 16862 +3 15507 16862 15860 +3 15508 15861 16863 +3 15508 16863 16554 +3 15509 17178 17701 +3 15509 17701 16038 +3 15510 16039 17702 +3 15510 17702 17179 +3 15511 15691 16075 +3 15511 16075 15942 +3 15512 15943 16076 +3 15512 16076 15692 +3 15513 15906 16529 +3 15513 16529 16177 +3 15514 16178 16530 +3 15514 16530 15907 +3 15515 15990 16438 +3 15515 16438 16012 +3 15516 16013 16439 +3 15516 16439 15991 +3 15517 15760 16054 +3 15517 16054 15866 +3 15518 15867 16055 +3 15518 16055 15761 +3 15519 17202 17861 +3 15519 17861 16145 +3 15520 16146 17862 +3 15520 17862 17203 +3 15521 16203 18752 +3 15521 18752 17959 +3 15522 17960 18753 +3 15522 18753 16204 +3 15523 15814 16638 +3 15523 16638 16376 +3 15524 16377 16639 +3 15524 16639 15815 +3 15525 16012 16446 +3 15525 16446 15994 +3 15526 15995 16447 +3 15526 16447 16013 +3 15527 17712 18965 +3 15527 18965 16571 +3 15528 16572 18966 +3 15528 18966 17713 +3 15529 15975 16169 +3 15529 16169 15774 +3 15530 15775 16170 +3 15530 16170 15976 +3 15531 15840 16089 +3 15531 16089 15848 +3 15532 15849 16090 +3 15532 16090 15841 +3 15533 16525 17364 +3 15533 17364 16510 +3 15534 16511 17365 +3 15534 17365 16526 +3 15535 16372 17246 +3 15535 17246 16452 +3 15536 16453 17247 +3 15536 17247 16373 +3 15537 16882 17301 +3 15537 17301 16052 +3 15538 16053 17302 +3 15538 17302 16883 +3 15539 16890 17394 +3 15539 17394 16073 +3 15540 16074 17395 +3 15540 17395 16891 +3 15541 16432 17226 +3 15541 17226 16372 +3 15542 16373 17227 +3 15542 17227 16433 +3 15543 16307 16420 +3 15543 16420 15805 +3 15544 15806 16421 +3 15544 16421 16308 +3 15545 15866 16211 +3 15545 16211 15936 +3 15546 15937 16212 +3 15546 16212 15867 +3 15547 15701 15850 +3 15547 15850 15707 +3 15548 15708 15851 +3 15548 15851 15702 +3 15549 16630 19798 +3 15549 19798 18506 +3 15550 18507 19799 +3 15550 19799 16631 +3 15551 17464 18105 +3 15551 18105 16131 +3 15552 16132 18106 +3 15552 18106 17465 +3 15553 16992 17684 +3 15553 17684 16283 +3 15554 16284 17685 +3 15554 17685 16993 +3 15555 18561 19913 +3 15555 19913 16601 +3 15556 16602 19914 +3 15556 19914 18562 +3 15557 16599 16894 +3 15557 16894 15896 +3 15558 15897 16895 +3 15558 16895 16600 +3 15559 15740 15838 +3 15559 15838 15697 +3 15560 15698 15839 +3 15560 15839 15741 +3 15561 15603 15794 +3 15561 15788 15595 +3 15561 15794 15788 +3 15562 15596 15789 +3 15562 15789 15795 +3 15562 15795 15604 +3 15563 15742 15882 +3 15563 15882 15729 +3 15564 15730 15883 +3 15564 15883 15743 +3 15565 17408 19770 +3 15565 19770 17497 +3 15566 17498 19771 +3 15566 19771 17409 +3 15567 16671 20099 +3 15567 20099 18782 +3 15568 18783 20100 +3 15568 20100 16672 +3 15569 15878 17360 +3 15569 17360 16450 +3 15570 16451 17361 +3 15570 17361 15879 +3 15571 15609 15834 +3 15571 15825 15585 +3 15571 15834 15825 +3 15572 15586 15826 +3 15572 15826 15835 +3 15572 15835 15610 +3 15573 16510 17475 +3 15573 17475 16605 +3 15574 16606 17476 +3 15574 17476 16511 +3 15575 18122 19337 +3 15575 19337 16456 +3 15576 16457 19338 +3 15576 19338 18123 +3 15577 15647 16285 +3 15577 16285 16422 +3 15577 16422 15744 +3 15578 15745 16423 +3 15578 16286 15648 +3 15578 16423 16286 +3 15579 17422 18310 +3 15579 18310 16151 +3 15580 16152 18311 +3 15580 18311 17423 +3 15581 15611 16069 +3 15581 16067 15617 +3 15581 16069 16067 +3 15582 15618 16068 +3 15582 16068 16070 +3 15582 16070 15612 +3 15583 16239 18401 +3 15583 18401 17631 +3 15584 17632 18402 +3 15584 18402 16240 +3 15585 15825 15870 +3 15585 15870 15643 +3 15586 15644 15871 +3 15586 15871 15826 +3 15587 16004 16773 +3 15587 16773 16407 +3 15588 16408 16774 +3 15588 16774 16005 +3 15589 15848 16155 +3 15589 16155 15963 +3 15590 15964 16156 +3 15590 16156 15849 +3 15591 16852 17351 +3 15591 17351 16109 +3 15592 16110 17352 +3 15592 17352 16853 +3 15593 15841 16159 +3 15593 16159 15840 +3 15594 18271 19665 +3 15594 19665 18270 +3 15595 15788 15884 +3 15595 15884 15701 +3 15596 15702 15885 +3 15596 15885 15789 +3 15597 17023 18032 +3 15597 18032 16559 +3 15598 16560 18033 +3 15598 18033 17024 +3 15599 16782 18042 +3 15599 18042 16790 +3 15600 16791 18043 +3 15600 18043 16783 +3 15601 17436 18028 +3 15601 18028 16149 +3 15602 16150 18029 +3 15602 18029 17437 +3 15603 15697 15864 +3 15603 15864 15794 +3 15604 15795 15865 +3 15604 15865 15698 +3 15605 15606 16640 +3 15605 16640 16651 +3 15605 16651 15664 +3 15606 15665 16652 +3 15606 16652 16640 +3 15607 16655 17523 +3 15607 17523 16525 +3 15608 16526 17524 +3 15608 17524 16656 +3 15609 15707 15892 +3 15609 15892 15834 +3 15610 15835 15893 +3 15610 15893 15708 +3 15611 15689 16213 +3 15611 16213 16069 +3 15612 16070 16214 +3 15612 16214 15690 +3 15613 18508 19449 +3 15613 19449 16436 +3 15614 16437 19450 +3 15614 19450 18509 +3 15615 15729 15916 +3 15615 15811 15616 +3 15615 15916 15811 +3 15616 15811 15917 +3 15616 15917 15730 +3 15617 16067 16115 +3 15617 16115 15693 +3 15618 15694 16116 +3 15618 16116 16068 +3 15619 15890 16591 +3 15619 16591 16364 +3 15620 16365 16592 +3 15620 16592 15891 +3 15621 16746 18280 +3 15621 18280 17558 +3 15622 17559 18281 +3 15622 18281 16747 +3 15623 16410 18795 +3 15623 18795 17853 +3 15624 17854 18796 +3 15624 18796 16411 +3 15625 16297 16539 +3 15625 16539 15904 +3 15626 15905 16540 +3 15626 16540 16298 +3 15627 16219 16569 +3 15627 16569 16030 +3 15628 16031 16570 +3 15628 16570 16220 +3 15629 15872 16704 +3 15629 16704 16913 +3 15629 16913 15846 +3 15630 15847 16914 +3 15630 16705 15873 +3 15630 16914 16705 +3 15631 17382 19459 +3 15631 19459 17406 +3 15632 17407 19460 +3 15632 19460 17383 +3 15633 17442 19093 +3 15633 19093 17031 +3 15634 17032 19094 +3 15634 19094 17443 +3 15635 15998 17198 +3 15635 17198 16880 +3 15636 16881 17199 +3 15636 17199 15999 +3 15637 17001 18262 +3 15637 18262 16786 +3 15638 16787 18263 +3 15638 18263 17002 +3 15639 16171 17592 +3 15639 17592 17072 +3 15640 17073 17593 +3 15640 17593 16172 +3 15641 16163 16480 +3 15641 16480 15990 +3 15642 15991 16481 +3 15642 16481 16164 +3 15643 15870 15932 +3 15643 15932 15742 +3 15644 15743 15933 +3 15644 15933 15871 +3 15645 16353 16840 +3 15645 16840 15940 +3 15646 15941 16841 +3 15646 16841 16354 +3 15647 15792 16388 +3 15647 16388 16285 +3 15648 16286 16389 +3 15648 16389 15793 +3 15649 16549 17313 +3 15649 17313 16432 +3 15650 16433 17314 +3 15650 17314 16550 +3 15651 16263 17528 +3 15651 17528 16962 +3 15652 16963 17529 +3 15652 17529 16264 +3 15653 15678 15913 +3 15653 15912 15677 +3 15653 15913 15912 +3 15654 17066 18831 +3 15654 18831 17210 +3 15655 17211 18832 +3 15655 18832 17067 +3 15656 16113 17119 +3 15656 17119 16685 +3 15657 16686 17120 +3 15657 17120 16114 +3 15658 16418 18490 +3 15658 18490 17599 +3 15659 17600 18491 +3 15659 18491 16419 +3 15660 16143 17961 +3 15660 17961 17400 +3 15661 17401 17962 +3 15661 17962 16144 +3 15662 16370 17905 +3 15662 17905 17164 +3 15663 17165 17906 +3 15663 17906 16370 +3 15664 16651 16748 +3 15664 16748 15784 +3 15665 15785 16749 +3 15665 16749 16652 +3 15666 18756 19958 +3 15666 19958 16643 +3 15667 16644 19959 +3 15667 19959 18757 +3 15668 16790 18116 +3 15668 18116 16050 +3 15669 16051 18117 +3 15669 18117 16791 +3 15670 16897 17466 +3 15670 17466 16896 +3 15671 16305 16514 +3 15671 16514 15918 +3 15672 15919 16515 +3 15672 16515 16306 +3 15673 15994 16470 +3 15673 16470 16185 +3 15674 16186 16471 +3 15674 16471 15995 +3 15675 17649 18585 +3 15675 18585 16533 +3 15676 16534 18586 +3 15676 18586 17650 +3 15677 15912 15938 +3 15677 15938 15740 +3 15678 15741 15939 +3 15678 15939 15913 +3 15679 16251 16822 +3 15679 16822 16309 +3 15680 16310 16823 +3 15680 16823 16252 +3 15681 17471 19635 +3 15681 19635 17382 +3 15682 17383 19636 +3 15682 19636 17472 +3 15683 16028 17208 +3 15683 17208 16876 +3 15684 16877 17209 +3 15684 17209 16029 +3 15685 16452 17368 +3 15685 17368 16632 +3 15686 16633 17369 +3 15686 17369 16453 +3 15687 16291 16830 +3 15687 16830 16257 +3 15688 16258 16831 +3 15688 16831 16292 +3 15689 15803 16303 +3 15689 16303 16213 +3 15690 16214 16304 +3 15690 16304 15804 +3 15691 15902 16273 +3 15691 16273 16075 +3 15692 16076 16274 +3 15692 16274 15903 +3 15693 16115 16227 +3 15693 16227 15809 +3 15694 15810 16228 +3 15694 16228 16116 +3 15695 18379 19596 +3 15695 19596 16695 +3 15696 16696 19597 +3 15696 19597 18380 +3 15697 15838 15961 +3 15697 15961 15864 +3 15698 15865 15962 +3 15698 15962 15839 +3 15699 16257 16838 +3 15699 16838 16251 +3 15700 16252 16839 +3 15700 16839 16258 +3 15701 15884 16000 +3 15701 16000 15850 +3 15702 15851 16001 +3 15702 16001 15885 +3 15703 18689 19710 +3 15703 19710 16543 +3 15704 16544 19711 +3 15704 19711 18690 +3 15705 18018 19072 +3 15705 19072 16545 +3 15706 16546 19073 +3 15706 19073 18019 +3 15707 15850 16002 +3 15707 16002 15892 +3 15708 15893 16003 +3 15708 16003 15851 +3 15709 15936 16358 +3 15709 16358 16135 +3 15710 16136 16359 +3 15710 16359 15937 +3 15711 16231 17343 +3 15711 17343 16844 +3 15712 16845 17344 +3 15712 17344 16232 +3 15713 17955 19168 +3 15713 19168 16714 +3 15714 16714 19169 +3 15714 19169 17956 +3 15715 16810 18349 +3 15715 18349 17103 +3 15716 15928 16697 +3 15716 16697 16281 +3 15717 16282 16698 +3 15717 16698 15929 +3 15718 17104 18350 +3 15718 18350 16811 +3 15719 15733 16299 +3 15719 16299 16300 +3 15719 16300 15734 +3 15720 17810 19952 +3 15720 19952 17454 +3 15721 17455 19953 +3 15721 19953 17811 +3 15722 17406 19542 +3 15722 19542 16319 +3 15723 16320 19543 +3 15723 19543 17407 +3 15724 17662 18687 +3 15724 18687 16561 +3 15725 16562 18688 +3 15725 18688 17663 +3 15726 18266 19119 +3 15726 19119 16399 +3 15727 16400 19120 +3 15727 19120 18267 +3 15728 16614 17131 +3 15728 17131 16613 +3 15729 15882 16034 +3 15729 16034 15916 +3 15730 15917 16035 +3 15730 16035 15883 +3 15731 16275 16516 +3 15731 16516 15979 +3 15732 15980 16517 +3 15732 16517 16276 +3 15733 15812 16356 +3 15733 16356 16299 +3 15734 16300 16357 +3 15734 16357 15813 +3 15735 16636 17091 +3 15735 17091 16225 +3 15736 16226 17092 +3 15736 17092 16637 +3 15737 16265 17309 +3 15737 17309 16812 +3 15738 16813 17310 +3 15738 17310 16266 +3 15739 15764 16964 +3 15739 16964 16965 +3 15739 16965 15765 +3 15740 15938 16022 +3 15740 16022 15838 +3 15741 15839 16023 +3 15741 16023 15939 +3 15742 15932 16048 +3 15742 16048 15882 +3 15743 15883 16049 +3 15743 16049 15933 +3 15744 16422 16577 +3 15744 16577 15920 +3 15745 15921 16578 +3 15745 16578 16423 +3 15746 17242 17865 +3 15746 17865 16360 +3 15747 16361 17866 +3 15747 17866 17243 +3 15748 16454 18099 +3 15748 18099 17349 +3 15749 17350 18100 +3 15749 18100 16455 +3 15750 17972 18833 +3 15750 18833 16472 +3 15751 16473 18834 +3 15751 18834 17973 +3 15752 16042 16397 +3 15752 16397 16129 +3 15753 16130 16398 +3 15753 16398 16043 +3 15754 16605 17643 +3 15754 17643 16798 +3 15755 16799 17644 +3 15755 17644 16606 +3 15756 17335 18939 +3 15756 18939 17123 +3 15757 17126 18940 +3 15757 18940 17336 +3 15758 16581 16982 +3 15758 16982 16191 +3 15759 16192 16983 +3 15759 16983 16582 +3 15760 15836 16321 +3 15760 16321 16054 +3 15761 16055 16322 +3 15761 16322 15837 +3 15762 16217 17760 +3 15762 17760 17305 +3 15763 17306 17761 +3 15763 17761 16218 +3 15764 15876 16996 +3 15764 16996 16964 +3 15765 16965 16997 +3 15765 16997 15877 +3 15766 16209 17734 +3 15766 17734 17288 +3 15767 17289 17735 +3 15767 17735 16210 +3 15768 17497 19891 +3 15768 19891 17776 +3 15769 17777 19892 +3 15769 19892 17498 +3 15770 18409 19279 +3 15770 19279 16476 +3 15771 16477 19280 +3 15771 19280 18410 +3 15772 17158 17489 +3 15772 17489 16103 +3 15773 16104 17490 +3 15773 17490 17159 +3 15774 16169 16424 +3 15774 16424 16042 +3 15775 16043 16425 +3 15775 16425 16170 +3 15776 16261 16587 +3 15776 16587 16127 +3 15777 16128 16588 +3 15777 16588 16262 +3 15778 16119 16788 +3 15778 16788 16464 +3 15779 16465 16789 +3 15779 16789 16120 +3 15780 16868 17872 +3 15780 17872 16735 +3 15781 16736 17873 +3 15781 17873 16869 +3 15782 16442 16956 +3 15782 16956 16291 +3 15783 16292 16957 +3 15783 16957 16443 +3 15784 16748 16872 +3 15784 16872 15934 +3 15785 15935 16873 +3 15785 16873 16749 +3 15786 16742 17782 +3 15786 17782 16796 +3 15787 16797 17783 +3 15787 17783 16743 +3 15788 15794 16016 +3 15788 16016 16064 +3 15788 16064 15884 +3 15789 15885 16065 +3 15789 16017 15795 +3 15789 16065 16017 +3 15790 15862 18347 +3 15790 18326 15791 +3 15790 18347 18326 +3 15791 18326 18348 +3 15791 18348 15863 +3 15792 15973 16541 +3 15792 16541 16388 +3 15793 16389 16542 +3 15793 16542 15974 +3 15794 15864 16046 +3 15794 16046 16016 +3 15795 16017 16047 +3 15795 16047 15865 +3 15796 17123 18993 +3 15796 18993 17426 +3 15797 17427 18994 +3 15797 18994 17126 +3 15798 15985 16856 +3 15798 16681 15954 +3 15798 16856 16681 +3 15799 15955 16682 +3 15799 16682 16857 +3 15799 16857 15986 +3 15800 15828 17590 +3 15800 17590 17591 +3 15800 17591 15829 +3 15801 16735 17898 +3 15801 17898 16920 +3 15802 16923 17899 +3 15802 17899 16736 +3 15803 15963 16444 +3 15803 16444 16303 +3 15804 16304 16445 +3 15804 16445 15964 +3 15805 16420 16663 +3 15805 16663 16077 +3 15806 16078 16664 +3 15806 16664 16421 +3 15807 16309 17008 +3 15807 17008 16504 +3 15808 16505 17009 +3 15808 17009 16310 +3 15809 16227 16362 +3 15809 16362 15975 +3 15810 15976 16363 +3 15810 16363 16228 +3 15811 15916 16066 +3 15811 16066 15917 +3 15812 15952 16414 +3 15812 16414 16356 +3 15813 16357 16415 +3 15813 16415 15953 +3 15814 16079 16906 +3 15814 16906 16638 +3 15815 16639 16907 +3 15815 16907 16080 +3 15816 15842 16659 +3 15816 16659 16660 +3 15816 16660 15843 +3 15817 16040 17290 +3 15817 17070 16083 +3 15817 17290 17070 +3 15818 16084 17071 +3 15818 17071 17291 +3 15818 17291 16041 +3 15819 16603 17264 +3 15819 17264 16488 +3 15820 16489 17265 +3 15820 17265 16604 +3 15821 16496 17252 +3 15821 17252 16567 +3 15822 16568 17253 +3 15822 17253 16497 +3 15823 16930 17491 +3 15823 17491 16409 +3 15824 16409 17492 +3 15824 17492 16931 +3 15825 15834 16062 +3 15825 16062 16085 +3 15825 16085 15870 +3 15826 15871 16086 +3 15826 16063 15835 +3 15826 16086 16063 +3 15827 17434 18320 +3 15827 18320 17435 +3 15828 15898 17653 +3 15828 17653 17590 +3 15829 17591 17654 +3 15829 17654 15899 +3 15830 16488 17192 +3 15830 17192 16496 +3 15831 16497 17193 +3 15831 17193 16489 +3 15832 17511 20111 +3 15832 20111 18040 +3 15833 18041 20112 +3 15833 20112 17512 +3 15834 15892 16097 +3 15834 16097 16062 +3 15835 16063 16098 +3 15835 16098 15893 +3 15836 15942 16390 +3 15836 16390 16321 +3 15837 16322 16391 +3 15837 16391 15943 +3 15838 16022 16095 +3 15838 16095 15961 +3 15839 15962 16096 +3 15839 16096 16023 +3 15840 16159 16403 +3 15840 16403 16089 +3 15841 16090 16404 +3 15841 16404 16159 +3 15842 15908 16717 +3 15842 16717 16659 +3 15843 16660 16718 +3 15843 16718 15909 +3 15844 17232 18787 +3 15844 18787 17182 +3 15845 17183 18788 +3 15845 18788 17233 +3 15846 16913 17124 +3 15846 17124 16058 +3 15847 16059 17125 +3 15847 17125 16914 +3 15848 16089 16401 +3 15848 16401 16155 +3 15849 16156 16402 +3 15849 16402 16090 +3 15850 16000 16141 +3 15850 16141 16002 +3 15851 16003 16142 +3 15851 16142 16001 +3 15852 16777 17481 +3 15852 17481 16549 +3 15853 16550 17482 +3 15853 17482 16778 +3 15854 17268 18550 +3 15854 18550 17001 +3 15855 17002 18551 +3 15855 18551 17269 +3 15856 17182 18801 +3 15856 18801 17258 +3 15857 17259 18802 +3 15857 18802 17183 +3 15858 16958 17764 +3 15858 17764 16655 +3 15859 16656 17765 +3 15859 17765 16959 +3 15860 16862 17206 +3 15860 17206 16223 +3 15861 16224 17207 +3 15861 17207 16863 +3 15862 16752 19461 +3 15862 19461 18347 +3 15863 18348 19462 +3 15863 19462 16753 +3 15864 15961 16117 +3 15864 16117 16046 +3 15865 16047 16118 +3 15865 16118 15962 +3 15866 16054 16392 +3 15866 16392 16211 +3 15867 16212 16393 +3 15867 16393 16055 +3 15868 16984 20057 +3 15868 20057 18675 +3 15869 18676 20058 +3 15869 20058 16985 +3 15870 16085 16157 +3 15870 16157 15932 +3 15871 15933 16158 +3 15871 16158 16086 +3 15872 16125 16960 +3 15872 16960 16704 +3 15873 16705 16961 +3 15873 16961 16126 +3 15874 17210 19078 +3 15874 19078 17452 +3 15875 17453 19079 +3 15875 19079 17211 +3 15876 16020 17111 +3 15876 17111 16996 +3 15877 16997 17112 +3 15877 17112 16021 +3 15878 16173 17674 +3 15878 17674 17360 +3 15879 17361 17675 +3 15879 17675 16174 +3 15880 17467 17925 +3 15880 17925 16279 +3 15881 16280 17926 +3 15881 17926 17468 +3 15882 16048 16197 +3 15882 16197 16034 +3 15883 16035 16198 +3 15883 16198 16049 +3 15884 16064 16179 +3 15884 16179 16000 +3 15885 16001 16180 +3 15885 16180 16065 +3 15886 16619 17062 +3 15886 17062 16353 +3 15887 16354 17063 +3 15887 17063 16620 +3 15888 17870 19859 +3 15888 19859 17808 +3 15889 17809 19860 +3 15889 19860 17871 +3 15890 16177 16866 +3 15890 16866 16591 +3 15891 16592 16867 +3 15891 16867 16178 +3 15892 16002 16199 +3 15892 16199 16097 +3 15893 16098 16200 +3 15893 16200 16003 +3 15894 16405 17796 +3 15894 17796 17260 +3 15895 17261 17797 +3 15895 17797 16406 +3 15896 16894 17204 +3 15896 17204 16243 +3 15897 16244 17205 +3 15897 17205 16895 +3 15898 16518 18482 +3 15898 18482 17653 +3 15899 17654 18483 +3 15899 18483 16519 +3 15900 17039 18093 +3 15900 18093 16868 +3 15901 16869 18094 +3 15901 18094 17040 +3 15902 16129 16492 +3 15902 16492 16273 +3 15903 16274 16493 +3 15903 16493 16130 +3 15904 16539 16820 +3 15904 16820 16219 +3 15905 16220 16821 +3 15905 16821 16540 +3 15906 16281 16898 +3 15906 16898 16529 +3 15907 16530 16899 +3 15907 16899 16282 +3 15908 16024 16806 +3 15908 16806 16717 +3 15909 16718 16807 +3 15909 16807 16025 +3 15910 17588 18536 +3 15910 18536 16683 +3 15911 16684 18537 +3 15911 18537 17589 +3 15912 15913 16160 +3 15912 16160 16175 +3 15912 16175 15938 +3 15913 15939 16176 +3 15913 16176 16160 +3 15914 17058 17554 +3 15914 17554 16384 +3 15915 16385 17555 +3 15915 17555 17059 +3 15916 16034 16181 +3 15916 16181 16066 +3 15917 16066 16182 +3 15917 16182 16035 +3 15918 16514 16727 +3 15918 16727 16163 +3 15919 16164 16728 +3 15919 16728 16515 +3 15920 16577 16775 +3 15920 16775 16133 +3 15921 16134 16776 +3 15921 16776 16578 +3 15922 18373 19522 +3 15922 19522 16928 +3 15923 16929 19523 +3 15923 19523 18374 +3 15924 16597 18130 +3 15924 18130 17366 +3 15925 17367 18131 +3 15925 18131 16598 +3 15926 17190 18465 +3 15926 18465 17043 +3 15927 17044 18466 +3 15927 18466 17191 +3 15928 16205 16944 +3 15928 16944 16697 +3 15929 16698 16945 +3 15929 16945 16206 +3 15930 17282 20794 +3 15930 20794 19299 +3 15931 19300 20795 +3 15931 20795 17283 +3 15932 16157 16259 +3 15932 16259 16048 +3 15933 16049 16260 +3 15933 16260 16158 +3 15934 16872 17256 +3 15934 17256 16327 +3 15935 16328 17257 +3 15935 17257 16873 +3 15936 16211 16593 +3 15936 16593 16358 +3 15937 16359 16594 +3 15937 16594 16212 +3 15938 16175 16237 +3 15938 16237 16022 +3 15939 16023 16238 +3 15939 16238 16176 +3 15940 16840 17136 +3 15940 17136 16267 +3 15941 16268 17137 +3 15941 17137 16841 +3 15942 16075 16520 +3 15942 16520 16390 +3 15943 16391 16521 +3 15943 16521 16076 +3 15944 18415 19447 +3 15944 19447 16808 +3 15945 16809 19448 +3 15945 19448 18416 +3 15946 18077 19058 +3 15946 19058 16750 +3 15947 16751 19059 +3 15947 19059 18078 +3 15948 16632 17639 +3 15948 17639 16950 +3 15949 16951 17640 +3 15949 17640 16633 +3 15950 16567 17362 +3 15950 17362 16723 +3 15951 16724 17363 +3 15951 17363 16568 +3 15952 16135 16573 +3 15952 16573 16414 +3 15953 16415 16574 +3 15953 16574 16136 +3 15954 16681 16870 +3 15954 16870 16165 +3 15955 16166 16871 +3 15955 16871 16682 +3 15956 16725 17758 +3 15956 17758 17325 +3 15957 17326 17759 +3 15957 17759 16726 +3 15958 16458 16756 +3 15958 16756 16459 +3 15959 16615 20095 +3 15959 20095 19283 +3 15960 19284 20096 +3 15960 20096 16616 +3 15961 16095 16255 +3 15961 16255 16117 +3 15962 16118 16256 +3 15962 16256 16096 +3 15963 16155 16607 +3 15963 16607 16444 +3 15964 16445 16608 +3 15964 16608 16156 +3 15965 17517 18457 +3 15965 18457 16744 +3 15966 16745 18458 +3 15966 18458 17518 +3 15967 17822 20000 +3 15967 20000 17699 +3 15968 17700 20001 +3 15968 20001 17823 +3 15969 19044 20302 +3 15969 20302 17003 +3 15970 17004 20303 +3 15970 20303 19045 +3 15971 16920 18219 +3 15971 18219 17146 +3 15972 17147 18220 +3 15972 18220 16923 +3 15973 16185 16737 +3 15973 16737 16541 +3 15974 16542 16738 +3 15974 16738 16186 +3 15975 16362 16535 +3 15975 16535 16169 +3 15976 16170 16536 +3 15976 16536 16363 +3 15977 16317 17355 +3 15977 17355 16769 +3 15978 16770 17356 +3 15978 17356 16318 +3 15979 16516 16771 +3 15979 16771 16261 +3 15980 16262 16772 +3 15980 16772 16517 +3 15981 17988 18862 +3 15981 18862 16665 +3 15982 16666 18863 +3 15982 18863 17989 +3 15983 16468 18744 +3 15983 18744 18183 +3 15984 18184 18745 +3 15984 18745 16469 +3 15985 16153 17051 +3 15985 17051 16856 +3 15986 16857 17052 +3 15986 17052 16154 +3 15987 16938 20167 +3 15987 20167 18868 +3 15988 18869 20168 +3 15988 20168 16939 +3 15989 18567 19927 +3 15989 19927 18568 +3 15990 16480 16904 +3 15990 16904 16438 +3 15991 16439 16905 +3 15991 16905 16481 +3 15992 17103 18776 +3 15992 18776 17483 +3 15993 17484 18777 +3 15993 18777 17104 +3 15994 16446 16911 +3 15994 16911 16470 +3 15995 16471 16912 +3 15995 16912 16447 +3 15996 18819 20047 +3 15996 20047 16994 +3 15997 16995 20048 +3 15997 20048 18820 +3 15998 16380 17562 +3 15998 17562 17198 +3 15999 17199 17563 +3 15999 17563 16381 +3 16000 16179 16339 +3 16000 16339 16141 +3 16001 16142 16340 +3 16001 16340 16180 +3 16002 16141 16343 +3 16002 16343 16199 +3 16003 16200 16344 +3 16003 16344 16142 +3 16004 16464 17172 +3 16004 17172 16773 +3 16005 16774 17175 +3 16005 17175 16465 +3 16006 17250 17953 +3 16006 17953 16647 +3 16007 16648 17954 +3 16007 17954 17251 +3 16008 17617 19255 +3 16008 19255 17335 +3 16009 17336 19256 +3 16009 19256 17618 +3 16010 18341 19113 +3 16010 19113 16617 +3 16011 16618 19114 +3 16011 19114 18342 +3 16012 16438 16917 +3 16012 16917 16446 +3 16013 16447 16918 +3 16013 16918 16439 +3 16014 16814 17440 +3 16014 17440 16603 +3 16015 16604 17441 +3 16015 17441 16815 +3 16016 16046 16253 +3 16016 16253 16333 +3 16016 16333 16064 +3 16017 16065 16334 +3 16017 16254 16047 +3 16017 16334 16254 +3 16018 16798 17951 +3 16018 17951 17089 +3 16019 17090 17952 +3 16019 17952 16799 +3 16020 16440 17530 +3 16020 17530 17111 +3 16021 17112 17531 +3 16021 17531 16441 +3 16022 16237 16315 +3 16022 16315 16095 +3 16023 16096 16316 +3 16023 16316 16238 +3 16024 16161 16940 +3 16024 16940 16806 +3 16025 16807 16941 +3 16025 16941 16162 +3 16026 16765 19700 +3 16026 19700 18797 +3 16027 18798 19701 +3 16027 19701 16766 +3 16028 16378 17556 +3 16028 17556 17208 +3 16029 17209 17557 +3 16029 17557 16379 +3 16030 16569 16978 +3 16030 16978 16458 +3 16031 16459 16979 +3 16031 16979 16570 +3 16032 17710 19702 +3 16032 19702 17696 +3 16033 17697 19703 +3 16033 19703 17711 +3 16034 16197 16341 +3 16034 16341 16181 +3 16035 16182 16342 +3 16035 16342 16198 +3 16036 16816 19610 +3 16036 19610 18478 +3 16037 18479 19611 +3 16037 19611 16817 +3 16038 17701 18337 +3 16038 18337 16661 +3 16039 16662 18338 +3 16039 18338 17702 +3 16040 16294 17532 +3 16040 17532 17290 +3 16041 17291 17533 +3 16041 17533 16295 +3 16042 16424 16691 +3 16042 16691 16397 +3 16043 16398 16692 +3 16043 16692 16425 +3 16044 17010 19323 +3 16044 19323 18157 +3 16045 18158 19324 +3 16045 19324 17011 +3 16046 16117 16323 +3 16046 16323 16253 +3 16047 16254 16324 +3 16047 16324 16118 +3 16048 16259 16382 +3 16048 16382 16197 +3 16049 16198 16383 +3 16049 16383 16260 +3 16050 18116 18611 +3 16050 18611 16478 +3 16051 16479 18612 +3 16051 18612 18117 +3 16052 17301 17868 +3 16052 17868 16595 +3 16053 16596 17869 +3 16053 17869 17302 +3 16054 16321 16625 +3 16054 16625 16392 +3 16055 16393 16626 +3 16055 16626 16322 +3 16056 16988 20192 +3 16056 20192 19029 +3 16057 19030 20193 +3 16057 20193 16989 +3 16058 17124 17376 +3 16058 17376 16331 +3 16059 16332 17377 +3 16059 17377 17125 +3 16060 17696 19897 +3 16060 19897 17810 +3 16061 17811 19898 +3 16061 19898 17697 +3 16062 16097 16386 +3 16062 16366 16085 +3 16062 16386 16366 +3 16063 16086 16367 +3 16063 16367 16387 +3 16063 16387 16098 +3 16064 16333 16416 +3 16064 16416 16179 +3 16065 16180 16417 +3 16065 16417 16334 +3 16066 16181 16371 +3 16066 16371 16182 +3 16067 16069 16551 +3 16067 16551 16585 +3 16067 16585 16115 +3 16068 16116 16586 +3 16068 16552 16070 +3 16068 16586 16552 +3 16069 16213 16679 +3 16069 16679 16551 +3 16070 16552 16680 +3 16070 16680 16214 +3 16071 17776 20245 +3 16071 20245 19214 +3 16072 19215 20246 +3 16072 20246 17777 +3 16073 17394 17994 +3 16073 17994 16627 +3 16074 16628 17995 +3 16074 17995 17395 +3 16075 16273 16677 +3 16075 16677 16520 +3 16076 16521 16678 +3 16076 16678 16274 +3 16077 16663 16850 +3 16077 16850 16275 +3 16078 16276 16851 +3 16078 16851 16664 +3 16079 16407 17196 +3 16079 17196 16906 +3 16080 16907 17197 +3 16080 17197 16408 +3 16081 16892 19968 +3 16081 19968 18981 +3 16082 18982 19969 +3 16082 19969 16893 +3 16083 17070 17784 +3 16083 17784 16777 +3 16084 16778 17785 +3 16084 17785 17071 +3 16085 16366 16412 +3 16085 16412 16157 +3 16086 16158 16413 +3 16086 16413 16367 +3 16087 16649 19782 +3 16087 19782 17710 +3 16088 17711 19783 +3 16088 19783 16650 +3 16089 16403 16675 +3 16089 16675 16401 +3 16090 16402 16676 +3 16090 16676 16404 +3 16091 16710 18546 +3 16091 18546 17814 +3 16092 17815 18547 +3 16092 18547 16711 +3 16093 17672 18441 +3 16093 18441 16729 +3 16094 16730 18442 +3 16094 18442 17673 +3 16095 16315 16434 +3 16095 16434 16255 +3 16096 16256 16435 +3 16096 16435 16316 +3 16097 16199 16460 +3 16097 16460 16386 +3 16098 16387 16461 +3 16098 16461 16200 +3 16099 17200 18215 +3 16099 18215 17023 +3 16100 17024 18216 +3 16100 18216 17201 +3 16101 17808 20202 +3 16101 20202 18175 +3 16102 18176 20203 +3 16102 20203 17809 +3 16103 17489 17911 +3 16103 17911 16490 +3 16104 16491 17912 +3 16104 17912 17490 +3 16105 17321 18361 +3 16105 18361 17039 +3 16106 17040 18362 +3 16106 18362 17322 +3 16107 17337 18569 +3 16107 18569 17307 +3 16108 17308 18570 +3 16108 18570 17338 +3 16109 17351 17943 +3 16109 17943 16486 +3 16110 16487 17944 +3 16110 17944 17352 +3 16111 17576 19178 +3 16111 19178 17442 +3 16112 17443 19179 +3 16112 19179 17577 +3 16113 16613 17607 +3 16113 17607 17119 +3 16114 17120 17608 +3 16114 17608 16614 +3 16115 16585 16641 +3 16115 16641 16227 +3 16116 16228 16642 +3 16116 16642 16586 +3 16117 16255 16428 +3 16117 16428 16323 +3 16118 16324 16429 +3 16118 16429 16256 +3 16119 16522 17150 +3 16119 17150 16788 +3 16120 16789 17151 +3 16120 17151 16522 +3 16121 18108 20113 +3 16121 20113 17822 +3 16122 17823 20114 +3 16122 20114 18109 +3 16123 17068 19883 +3 16123 19883 18722 +3 16124 18723 19884 +3 16124 19884 17069 +3 16125 16723 17550 +3 16125 17550 16960 +3 16126 16961 17551 +3 16126 17551 16724 +3 16127 16587 16921 +3 16127 16921 16305 +3 16128 16306 16922 +3 16128 16922 16588 +3 16129 16397 16731 +3 16129 16731 16492 +3 16130 16493 16732 +3 16130 16732 16398 +3 16131 18105 18809 +3 16131 18809 16719 +3 16132 16720 18810 +3 16132 18810 18106 +3 16133 16775 17016 +3 16133 17016 16297 +3 16134 16298 17017 +3 16134 17017 16776 +3 16135 16358 16779 +3 16135 16779 16573 +3 16136 16574 16780 +3 16136 16780 16359 +3 16137 17426 19416 +3 16137 19416 17851 +3 16138 17852 19417 +3 16138 19417 17427 +3 16139 17084 19467 +3 16139 19467 18314 +3 16140 18315 19468 +3 16140 19468 17084 +3 16141 16339 16506 +3 16141 16506 16343 +3 16142 16344 16507 +3 16142 16507 16340 +3 16143 16645 18573 +3 16143 18573 17961 +3 16144 17962 18574 +3 16144 18574 16646 +3 16145 17861 18661 +3 16145 18661 16800 +3 16146 16801 18662 +3 16146 18662 17862 +3 16147 16784 19400 +3 16147 19400 18613 +3 16148 18614 19401 +3 16148 19401 16785 +3 16149 18028 18710 +3 16149 18710 17190 +3 16150 17191 18711 +3 16150 18711 18029 +3 16151 18310 19192 +3 16151 19192 16874 +3 16152 16875 19193 +3 16152 19193 18311 +3 16153 16376 17276 +3 16153 17276 17051 +3 16154 17052 17277 +3 16154 17277 16377 +3 16155 16401 16836 +3 16155 16836 16607 +3 16156 16608 16837 +3 16156 16837 16402 +3 16157 16412 16500 +3 16157 16500 16259 +3 16158 16260 16501 +3 16158 16501 16413 +3 16159 16404 16741 +3 16159 16741 16403 +3 16160 16176 16467 +3 16160 16466 16175 +3 16160 16467 16466 +3 16161 16364 17270 +3 16161 17270 16940 +3 16162 16941 17271 +3 16162 17271 16365 +3 16163 16727 17014 +3 16163 17014 16480 +3 16164 16481 17015 +3 16164 17015 16728 +3 16165 16870 17101 +3 16165 17101 16442 +3 16166 16443 17102 +3 16166 17102 16871 +3 16167 16673 18778 +3 16167 18778 17890 +3 16168 17891 18779 +3 16168 18779 16674 +3 16169 16535 16757 +3 16169 16757 16424 +3 16170 16425 16758 +3 16170 16758 16536 +3 16171 16721 18254 +3 16171 18254 17592 +3 16172 17593 18255 +3 16172 18255 16722 +3 16173 16523 18063 +3 16173 18063 17674 +3 16174 17675 18064 +3 16174 18064 16524 +3 16175 16466 16512 +3 16175 16512 16237 +3 16176 16238 16513 +3 16176 16513 16467 +3 16177 16529 17170 +3 16177 17170 16866 +3 16178 16867 17171 +3 16178 17171 16530 +3 16179 16416 16537 +3 16179 16537 16339 +3 16180 16340 16538 +3 16180 16538 16417 +3 16181 16341 16498 +3 16181 16498 16371 +3 16182 16371 16499 +3 16182 16499 16342 +3 16183 17274 18530 +3 16183 18530 17268 +3 16184 17269 18531 +3 16184 18531 17275 +3 16185 16470 16980 +3 16185 16980 16737 +3 16186 16738 16981 +3 16186 16981 16471 +3 16187 16669 18522 +3 16187 18522 17919 +3 16188 17920 18523 +3 16188 18523 16670 +3 16189 16190 17018 +3 16189 17018 17035 +3 16189 17035 16235 +3 16190 16236 17036 +3 16190 17036 17018 +3 16191 16982 17416 +3 16191 17416 16629 +3 16192 16629 17417 +3 16192 17417 16983 +3 16193 18073 18902 +3 16193 18902 16878 +3 16194 16879 18903 +3 16194 18903 18074 +3 16195 16986 19404 +3 16195 19404 18449 +3 16196 18450 19405 +3 16196 19405 16987 +3 16197 16382 16502 +3 16197 16502 16341 +3 16198 16342 16503 +3 16198 16503 16383 +3 16199 16343 16547 +3 16199 16547 16460 +3 16200 16461 16548 +3 16200 16548 16344 +3 16201 17353 18225 +3 16201 18225 16958 +3 16202 16959 18226 +3 16202 18226 17354 +3 16203 16848 19580 +3 16203 19580 18752 +3 16204 18753 19581 +3 16204 19581 16849 +3 16205 16504 17224 +3 16205 17224 16944 +3 16206 16945 17225 +3 16206 17225 16505 +3 16207 17005 19066 +3 16207 19066 18097 +3 16208 18098 19067 +3 16208 19067 17006 +3 16209 16653 18288 +3 16209 18288 17734 +3 16210 17735 18289 +3 16210 18289 16654 +3 16211 16392 16761 +3 16211 16761 16593 +3 16212 16594 16762 +3 16212 16762 16393 +3 16213 16303 16824 +3 16213 16824 16679 +3 16214 16680 16825 +3 16214 16825 16304 +3 16215 16216 17597 +3 16215 17597 17621 +3 16215 17621 16249 +3 16216 16250 17622 +3 16216 17622 17597 +3 16217 16763 18461 +3 16217 18461 17760 +3 16218 17761 18462 +3 16218 18462 16764 +3 16219 16820 17152 +3 16219 17152 16569 +3 16220 16570 17153 +3 16220 17153 16821 +3 16221 17129 20613 +3 16221 20613 19487 +3 16222 19488 20614 +3 16222 20614 17130 +3 16223 17206 17625 +3 16223 17625 16619 +3 16224 16620 17626 +3 16224 17626 17207 +3 16225 17091 17469 +3 16225 17469 16581 +3 16226 16582 17470 +3 16226 17470 17092 +3 16227 16641 16767 +3 16227 16767 16362 +3 16228 16363 16768 +3 16228 16768 16642 +3 16229 18945 20278 +3 16229 20278 17286 +3 16230 17287 20279 +3 16230 20279 18946 +3 16231 16769 17947 +3 16231 17947 17343 +3 16232 17344 17948 +3 16232 17948 16770 +3 16233 18389 20336 +3 16233 20336 17870 +3 16234 17871 20337 +3 16234 20337 18390 +3 16235 17035 17082 +3 16235 17082 16307 +3 16236 16308 17083 +3 16236 17083 17036 +3 16237 16512 16557 +3 16237 16557 16315 +3 16238 16316 16558 +3 16238 16558 16513 +3 16239 16908 19202 +3 16239 19202 18401 +3 16240 18402 19203 +3 16240 19203 16909 +3 16241 16242 18705 +3 16241 18705 18726 +3 16241 18726 16301 +3 16242 16302 18727 +3 16242 18727 18705 +3 16243 17204 17595 +3 16243 17595 16636 +3 16244 16637 17596 +3 16244 17596 17205 +3 16245 16583 18577 +3 16245 18577 17274 +3 16246 17275 18578 +3 16246 18578 16584 +3 16247 17041 19013 +3 16247 19013 18151 +3 16248 18152 19014 +3 16248 19014 17042 +3 16249 17621 17690 +3 16249 17690 16374 +3 16250 16375 17691 +3 16250 17691 17622 +3 16251 16838 17420 +3 16251 17420 16822 +3 16252 16823 17421 +3 16252 17421 16839 +3 16253 16323 16531 +3 16253 16531 16589 +3 16253 16589 16333 +3 16254 16334 16590 +3 16254 16532 16324 +3 16254 16590 16532 +3 16255 16434 16555 +3 16255 16555 16428 +3 16256 16429 16556 +3 16256 16556 16435 +3 16257 16830 17430 +3 16257 17430 16838 +3 16258 16839 17431 +3 16258 17431 16831 +3 16259 16500 16609 +3 16259 16609 16382 +3 16260 16383 16610 +3 16260 16610 16501 +3 16261 16771 17080 +3 16261 17080 16587 +3 16262 16588 17081 +3 16262 17081 16772 +3 16263 16896 18268 +3 16263 18268 17528 +3 16264 17529 18269 +3 16264 18269 16897 +3 16265 16685 17742 +3 16265 17742 17309 +3 16266 17310 17743 +3 16266 17743 16686 +3 16267 17136 17722 +3 16267 17722 16814 +3 16268 16815 17723 +3 16268 17723 17137 +3 16269 17307 18768 +3 16269 18768 17485 +3 16270 17486 18769 +3 16270 18769 17308 +3 16271 17392 21133 +3 16271 21133 19663 +3 16272 19664 21134 +3 16272 21134 17393 +3 16273 16492 16886 +3 16273 16886 16677 +3 16274 16678 16887 +3 16274 16887 16493 +3 16275 16850 17064 +3 16275 17064 16516 +3 16276 16517 17065 +3 16276 17065 16851 +3 16277 17541 19327 +3 16277 19327 17762 +3 16278 17763 19328 +3 16278 19328 17542 +3 16279 17925 18484 +3 16279 18484 16715 +3 16280 16716 18485 +3 16280 18485 17926 +3 16281 16697 17292 +3 16281 17292 16898 +3 16282 16899 17293 +3 16282 17293 16698 +3 16283 17684 18447 +3 16283 18447 16919 +3 16284 16919 18448 +3 16284 18448 17685 +3 16285 16388 16998 +3 16285 16998 17138 +3 16285 17138 16422 +3 16286 16423 17139 +3 16286 16999 16389 +3 16286 17139 16999 +3 16287 17146 18597 +3 16287 18597 17552 +3 16288 17553 18598 +3 16288 18598 17147 +3 16289 19558 20972 +3 16289 20972 17570 +3 16290 17571 20973 +3 16290 20973 19559 +3 16291 16956 17479 +3 16291 17479 16830 +3 16292 16831 17480 +3 16292 17480 16957 +3 16293 18199 20129 +3 16293 20129 18240 +3 16294 16565 17847 +3 16294 17847 17532 +3 16295 17533 17848 +3 16295 17848 16566 +3 16296 18241 20130 +3 16296 20130 18200 +3 16297 17016 17244 +3 16297 17244 16539 +3 16298 16540 17245 +3 16298 17245 17017 +3 16299 16356 16924 +3 16299 16910 16300 +3 16299 16924 16910 +3 16300 16910 16925 +3 16300 16925 16357 +3 16301 18726 19766 +3 16301 19766 17140 +3 16302 17141 19767 +3 16302 19767 18727 +3 16303 16444 16954 +3 16303 16954 16824 +3 16304 16825 16955 +3 16304 16955 16445 +3 16305 16921 17099 +3 16305 17099 16514 +3 16306 16515 17100 +3 16306 17100 16922 +3 16307 17082 17166 +3 16307 17166 16420 +3 16308 16421 17167 +3 16308 17167 17083 +3 16309 16822 17503 +3 16309 17503 17008 +3 16310 17009 17504 +3 16310 17504 16823 +3 16311 17841 19386 +3 16311 19386 17576 +3 16312 17577 19387 +3 16312 19387 17842 +3 16313 17857 19363 +3 16313 19363 17541 +3 16314 17542 19364 +3 16314 19364 17858 +3 16315 16557 16657 +3 16315 16657 16434 +3 16316 16435 16658 +3 16316 16658 16558 +3 16317 16950 18081 +3 16317 18081 17355 +3 16318 17356 18082 +3 16318 18082 16951 +3 16319 19542 20294 +3 16319 20294 16936 +3 16320 16937 20295 +3 16320 20295 19543 +3 16321 16390 16900 +3 16321 16900 16625 +3 16322 16626 16901 +3 16322 16901 16391 +3 16323 16428 16611 +3 16323 16611 16531 +3 16324 16532 16612 +3 16324 16612 16429 +3 16325 17578 19144 +3 16325 19144 17617 +3 16326 17618 19145 +3 16326 19145 17579 +3 16327 17256 17670 +3 16327 17670 16553 +3 16328 16554 17671 +3 16328 17671 17257 +3 16329 17647 19170 +3 16329 19170 17578 +3 16330 17579 19171 +3 16330 19171 17648 +3 16331 17376 17668 +3 16331 17668 16599 +3 16332 16600 17669 +3 16332 17669 17377 +3 16333 16589 16667 +3 16333 16667 16416 +3 16334 16417 16668 +3 16334 16668 16590 +3 16335 17609 18852 +3 16335 18852 17337 +3 16336 17338 18853 +3 16336 18853 17610 +3 16337 17386 21081 +3 16337 21081 19704 +3 16338 19705 21082 +3 16338 21082 17387 +3 16339 16537 16702 +3 16339 16702 16506 +3 16340 16507 16703 +3 16340 16703 16538 +3 16341 16502 16634 +3 16341 16634 16498 +3 16342 16499 16635 +3 16342 16635 16503 +3 16343 16506 16712 +3 16343 16712 16547 +3 16344 16548 16713 +3 16344 16713 16507 +3 16345 18040 20253 +3 16345 20253 18161 +3 16346 18162 20254 +3 16346 20254 18041 +3 16347 17311 20531 +3 16347 20531 19331 +3 16348 19332 20532 +3 16348 20532 17312 +3 16349 17089 17990 +3 16349 17990 16579 +3 16350 16580 17991 +3 16350 17991 17090 +3 16351 17284 19792 +3 16351 19792 18718 +3 16352 18719 19793 +3 16352 19793 17285 +3 16353 17062 17543 +3 16353 17543 16840 +3 16354 16841 17544 +3 16354 17544 17063 +3 16355 18875 20169 +3 16355 20169 18874 +3 16356 16414 16966 +3 16356 16966 16924 +3 16357 16925 16967 +3 16357 16967 16415 +3 16358 16593 17027 +3 16358 17027 16779 +3 16359 16780 17028 +3 16359 17028 16594 +3 16360 17865 18609 +3 16360 18609 16992 +3 16361 16993 18610 +3 16361 18610 17866 +3 16362 16767 16934 +3 16362 16934 16535 +3 16363 16536 16935 +3 16363 16935 16768 +3 16364 16591 17473 +3 16364 17473 17270 +3 16365 17271 17474 +3 16365 17474 16592 +3 16366 16386 16699 +3 16366 16689 16412 +3 16366 16699 16689 +3 16367 16413 16690 +3 16367 16690 16700 +3 16367 16700 16387 +3 16368 19158 20382 +3 16368 20382 17280 +3 16369 17281 20383 +3 16369 20383 19159 +3 16370 17906 18786 +3 16370 18786 17905 +3 16371 16498 16701 +3 16371 16701 16499 +3 16372 17226 18089 +3 16372 18089 17246 +3 16373 17247 18090 +3 16373 18090 17227 +3 16374 17690 18242 +3 16374 18242 16852 +3 16375 16853 18243 +3 16375 18243 17691 +3 16376 16638 17501 +3 16376 17501 17276 +3 16377 17277 17502 +3 16377 17502 16639 +3 16378 16812 17998 +3 16378 17998 17556 +3 16379 17557 17999 +3 16379 17999 16813 +3 16380 16844 18114 +3 16380 18114 17562 +3 16381 17563 18115 +3 16381 18115 16845 +3 16382 16609 16706 +3 16382 16706 16502 +3 16383 16503 16707 +3 16383 16707 16610 +3 16384 17554 18205 +3 16384 18205 16930 +3 16385 16931 18206 +3 16385 18206 17555 +3 16386 16460 16754 +3 16386 16754 16699 +3 16387 16700 16755 +3 16387 16755 16461 +3 16388 16541 17121 +3 16388 17121 16998 +3 16389 16999 17122 +3 16389 17122 16542 +3 16390 16520 16990 +3 16390 16990 16900 +3 16391 16901 16991 +3 16391 16991 16521 +3 16392 16625 16970 +3 16392 16970 16761 +3 16393 16762 16971 +3 16393 16971 16626 +3 16394 16431 18140 +3 16394 18139 16430 +3 16394 18140 18139 +3 16395 17345 20300 +3 16395 20300 19135 +3 16396 19136 20301 +3 16396 20301 17346 +3 16397 16691 17033 +3 16397 17033 16731 +3 16398 16732 17034 +3 16398 17034 16692 +3 16399 19119 19978 +3 16399 19978 17105 +3 16400 17106 19979 +3 16400 19979 19120 +3 16401 16675 17097 +3 16401 17097 16836 +3 16402 16837 17098 +3 16402 17098 16676 +3 16403 16741 17012 +3 16403 17012 16675 +3 16404 16676 17013 +3 16404 17013 16741 +3 16405 16962 18463 +3 16405 18463 17796 +3 16406 17797 18464 +3 16406 18464 16963 +3 16407 16773 17547 +3 16407 17547 17196 +3 16408 17197 17548 +3 16408 17548 16774 +3 16409 17491 18132 +3 16409 18132 17492 +3 16410 17230 19779 +3 16410 19779 18795 +3 16411 18796 19780 +3 16411 19780 17231 +3 16412 16689 16759 +3 16412 16759 16500 +3 16413 16501 16760 +3 16413 16760 16690 +3 16414 16573 17049 +3 16414 17049 16966 +3 16415 16967 17050 +3 16415 17050 16574 +3 16416 16667 16792 +3 16416 16792 16537 +3 16417 16538 16793 +3 16417 16793 16668 +3 16418 17162 19396 +3 16418 19396 18490 +3 16419 18491 19397 +3 16419 19397 17163 +3 16420 17166 17299 +3 16420 17299 16663 +3 16421 16664 17300 +3 16421 17300 17167 +3 16422 17138 17297 +3 16422 17297 16577 +3 16423 16578 17298 +3 16423 17298 17139 +3 16424 16757 17037 +3 16424 17037 16691 +3 16425 16692 17038 +3 16425 17038 16758 +3 16426 18049 19980 +3 16426 19980 18079 +3 16427 18080 19981 +3 16427 19981 18050 +3 16428 16555 16733 +3 16428 16733 16611 +3 16429 16612 16734 +3 16429 16734 16556 +3 16430 18139 18209 +3 16430 18209 16484 +3 16431 16485 18210 +3 16431 18210 18140 +3 16432 17313 18221 +3 16432 18221 17226 +3 16433 17227 18222 +3 16433 18222 17314 +3 16434 16657 16804 +3 16434 16804 16555 +3 16435 16556 16805 +3 16435 16805 16658 +3 16436 19449 20420 +3 16436 20420 18108 +3 16437 18109 20421 +3 16437 20421 19450 +3 16438 16904 17372 +3 16438 17372 16917 +3 16439 16918 17373 +3 16439 17373 16905 +3 16440 16880 18069 +3 16440 18069 17530 +3 16441 17531 18070 +3 16441 18070 16881 +3 16442 17101 17641 +3 16442 17641 16956 +3 16443 16957 17642 +3 16443 17642 17102 +3 16444 16607 17093 +3 16444 17093 16954 +3 16445 16955 17094 +3 16445 17094 16608 +3 16446 16917 17378 +3 16446 17378 16911 +3 16447 16912 17379 +3 16447 17379 16918 +3 16448 17485 19023 +3 16448 19023 17772 +3 16449 17773 19024 +3 16449 19024 17486 +3 16450 17360 18371 +3 16450 18371 17321 +3 16451 17322 18372 +3 16451 18372 17361 +3 16452 17246 18258 +3 16452 18258 17368 +3 16453 17369 18261 +3 16453 18261 17247 +3 16454 17164 18967 +3 16454 18967 18099 +3 16455 18100 18968 +3 16455 18968 17165 +3 16456 19337 20409 +3 16456 20409 17329 +3 16457 17330 20410 +3 16457 20410 19338 +3 16458 16978 17278 +3 16458 17278 16756 +3 16459 16756 17279 +3 16459 17279 16979 +3 16460 16547 16834 +3 16460 16834 16754 +3 16461 16755 16835 +3 16461 16835 16548 +3 16462 18175 20161 +3 16462 20161 18049 +3 16463 18050 20162 +3 16463 20162 18176 +3 16464 16788 17487 +3 16464 17487 17172 +3 16465 17175 17488 +3 16465 17488 16789 +3 16466 16467 16781 +3 16466 16781 16802 +3 16466 16802 16512 +3 16467 16513 16803 +3 16467 16803 16781 +3 16468 17045 19424 +3 16468 19424 18744 +3 16469 18745 19425 +3 16469 19425 17046 +3 16470 16911 17414 +3 16470 17414 16980 +3 16471 16981 17415 +3 16471 17415 16912 +3 16472 18833 19917 +3 16472 19917 17212 +3 16473 17213 19918 +3 16473 19918 18834 +3 16474 17483 18906 +3 16474 18906 17664 +3 16475 17665 18907 +3 16475 18907 17484 +3 16476 19279 20231 +3 16476 20231 17236 +3 16477 17237 20232 +3 16477 20232 19280 +3 16478 18611 19137 +3 16478 19137 16932 +3 16479 16933 19138 +3 16479 19138 18612 +3 16480 17014 17424 +3 16480 17424 16904 +3 16481 16905 17425 +3 16481 17425 17015 +3 16482 18079 20034 +3 16482 20034 17021 +3 16483 17022 20035 +3 16483 20035 18080 +3 16484 18209 18955 +3 16484 18955 17047 +3 16485 17048 18956 +3 16485 18956 18210 +3 16486 17943 18417 +3 16486 18417 16890 +3 16487 16891 18418 +3 16487 18418 17944 +3 16488 17264 18036 +3 16488 18036 17192 +3 16489 17193 18037 +3 16489 18037 17265 +3 16490 17911 18391 +3 16490 18391 16882 +3 16491 16883 18392 +3 16491 18392 17912 +3 16492 16731 17113 +3 16492 17113 16886 +3 16493 16887 17114 +3 16493 17114 16732 +3 16494 18161 20322 +3 16494 20322 18437 +3 16495 18438 20323 +3 16495 20323 18162 +3 16496 17192 18010 +3 16496 18010 17252 +3 16497 17253 18011 +3 16497 18011 17193 +3 16498 16634 16818 +3 16498 16818 16701 +3 16499 16701 16819 +3 16499 16819 16635 +3 16500 16759 16864 +3 16500 16864 16609 +3 16501 16610 16865 +3 16501 16865 16760 +3 16502 16706 16826 +3 16502 16826 16634 +3 16503 16635 16827 +3 16503 16827 16707 +3 16504 17008 17726 +3 16504 17726 17224 +3 16505 17225 17727 +3 16505 17727 17009 +3 16506 16702 16884 +3 16506 16884 16712 +3 16507 16713 16885 +3 16507 16885 16703 +3 16508 17762 19598 +3 16508 19598 18087 +3 16509 18088 19599 +3 16509 19599 17763 +3 16510 17364 18524 +3 16510 18524 17475 +3 16511 17476 18525 +3 16511 18525 17365 +3 16512 16802 16858 +3 16512 16858 16557 +3 16513 16558 16859 +3 16513 16859 16803 +3 16514 17099 17333 +3 16514 17333 16727 +3 16515 16728 17334 +3 16515 17334 17100 +3 16516 17064 17317 +3 16516 17317 16771 +3 16517 16772 17318 +3 16517 17318 17065 +3 16518 17156 19267 +3 16518 19267 18482 +3 16519 18483 19268 +3 16519 19268 17157 +3 16520 16677 17132 +3 16520 17132 16990 +3 16521 16991 17133 +3 16521 17133 16678 +3 16522 17151 17536 +3 16522 17536 17150 +3 16523 16888 18510 +3 16523 18510 18063 +3 16524 18064 18511 +3 16524 18511 16889 +3 16525 17523 18542 +3 16525 18542 17364 +3 16526 17365 18543 +3 16526 18543 17524 +3 16527 18532 20438 +3 16527 20438 18199 +3 16528 18200 20441 +3 16528 20441 18533 +3 16529 16898 17519 +3 16529 17519 17170 +3 16530 17171 17520 +3 16530 17520 16899 +3 16531 16611 16832 +3 16531 16832 16902 +3 16531 16902 16589 +3 16532 16590 16903 +3 16532 16833 16612 +3 16532 16903 16833 +3 16533 18585 19659 +3 16533 19659 17436 +3 16534 17437 19660 +3 16534 19660 18586 +3 16535 16934 17134 +3 16535 17134 16757 +3 16536 16758 17135 +3 16536 17135 16935 +3 16537 16792 16942 +3 16537 16942 16702 +3 16538 16703 16943 +3 16538 16943 16793 +3 16539 17244 17499 +3 16539 17499 16820 +3 16540 16821 17500 +3 16540 17500 17245 +3 16541 16737 17303 +3 16541 17303 17121 +3 16542 17122 17304 +3 16542 17304 16738 +3 16543 19710 20798 +3 16543 20798 17438 +3 16544 17439 20799 +3 16544 20799 19711 +3 16545 19072 20174 +3 16545 20174 17444 +3 16546 17445 20175 +3 16546 20175 19073 +3 16547 16712 16968 +3 16547 16968 16834 +3 16548 16835 16969 +3 16548 16969 16713 +3 16549 17481 18369 +3 16549 18369 17313 +3 16550 17314 18370 +3 16550 18370 17482 +3 16551 16679 17188 +3 16551 17076 16585 +3 16551 17188 17076 +3 16552 16586 17077 +3 16552 17077 17189 +3 16552 17189 16680 +3 16553 17670 17992 +3 16553 17992 16862 +3 16554 16863 17993 +3 16554 17993 17671 +3 16555 16804 16974 +3 16555 16974 16733 +3 16556 16734 16975 +3 16556 16975 16805 +3 16557 16858 16952 +3 16557 16952 16657 +3 16558 16658 16953 +3 16558 16953 16859 +3 16559 18032 19238 +3 16559 19238 17609 +3 16560 17610 19239 +3 16560 19239 18033 +3 16561 18687 19768 +3 16561 19768 17451 +3 16562 17451 19769 +3 16562 19769 18688 +3 16563 17586 20488 +3 16563 20488 19246 +3 16564 19247 20489 +3 16564 20489 17587 +3 16565 16876 18228 +3 16565 18228 17847 +3 16566 17848 18229 +3 16566 18229 16877 +3 16567 17252 18128 +3 16567 18128 17362 +3 16568 17363 18129 +3 16568 18129 17253 +3 16569 17152 17539 +3 16569 17539 16978 +3 16570 16979 17540 +3 16570 17540 17153 +3 16571 18965 19696 +3 16571 19696 17168 +3 16572 17169 19697 +3 16572 19697 18966 +3 16573 16779 17254 +3 16573 17254 17049 +3 16574 17050 17255 +3 16574 17255 16780 +3 16575 17851 19526 +3 16575 19526 18002 +3 16576 18003 19527 +3 16576 19527 17852 +3 16577 17297 17477 +3 16577 17477 16775 +3 16578 16776 17478 +3 16578 17478 17298 +3 16579 17990 18312 +3 16579 18312 16854 +3 16580 16855 18313 +3 16580 18313 17991 +3 16581 17469 17913 +3 16581 17913 16982 +3 16582 16983 17914 +3 16582 17914 17470 +3 16583 16976 19036 +3 16583 19036 18577 +3 16584 18578 19037 +3 16584 19037 16977 +3 16585 17076 17115 +3 16585 17115 16641 +3 16586 16642 17116 +3 16586 17116 17077 +3 16587 17080 17404 +3 16587 17404 16921 +3 16588 16922 17405 +3 16588 17405 17081 +3 16589 16902 16972 +3 16589 16972 16667 +3 16590 16668 16973 +3 16590 16973 16903 +3 16591 16866 17770 +3 16591 17770 17473 +3 16592 17474 17771 +3 16592 17771 16867 +3 16593 16761 17176 +3 16593 17176 17027 +3 16594 17028 17177 +3 16594 17177 16762 +3 16595 17868 18445 +3 16595 18445 17058 +3 16596 17059 18446 +3 16596 18446 17869 +3 16597 17325 18969 +3 16597 18969 18130 +3 16598 18131 18970 +3 16598 18970 17326 +3 16599 17668 18000 +3 16599 18000 16894 +3 16600 16895 18001 +3 16600 18001 17669 +3 16601 19913 21343 +3 16601 21343 17692 +3 16602 17693 21344 +3 16602 21344 19914 +3 16603 17440 18195 +3 16603 18195 17264 +3 16604 17265 18196 +3 16604 18196 17441 +3 16605 17475 18701 +3 16605 18701 17643 +3 16606 17644 18702 +3 16606 18702 17476 +3 16607 16836 17319 +3 16607 17319 17093 +3 16608 17094 17320 +3 16608 17320 16837 +3 16609 16864 16948 +3 16609 16948 16706 +3 16610 16707 16949 +3 16610 16949 16865 +3 16611 16733 16946 +3 16611 16946 16832 +3 16612 16833 16947 +3 16612 16947 16734 +3 16613 17131 18230 +3 16613 18230 17607 +3 16614 17608 18231 +3 16614 18231 17131 +3 16615 17428 21150 +3 16615 21150 20095 +3 16616 20096 21151 +3 16616 21151 17429 +3 16617 19113 19875 +3 16617 19875 17248 +3 16618 17249 19876 +3 16618 19876 19114 +3 16619 17625 18145 +3 16619 18145 17062 +3 16620 17063 18146 +3 16620 18146 17626 +3 16621 18240 20589 +3 16621 20589 18738 +3 16622 18739 20590 +3 16622 20590 18241 +3 16623 18308 19772 +3 16623 19772 17857 +3 16624 17858 19773 +3 16624 19773 18309 +3 16625 16900 17218 +3 16625 17218 16970 +3 16626 16971 17219 +3 16626 17219 16901 +3 16627 17994 18740 +3 16627 18740 17250 +3 16628 17251 18741 +3 16628 18741 17995 +3 16629 17416 17940 +3 16629 17940 17417 +3 16630 17907 21201 +3 16630 21201 19798 +3 16631 19799 21202 +3 16631 21202 17908 +3 16632 17368 18488 +3 16632 18488 17639 +3 16633 17640 18489 +3 16633 18489 17369 +3 16634 16826 17019 +3 16634 17019 16818 +3 16635 16819 17020 +3 16635 17020 16827 +3 16636 17595 18124 +3 16636 18124 17091 +3 16637 17092 18125 +3 16637 18125 17596 +3 16638 16906 17798 +3 16638 17798 17501 +3 16639 17502 17799 +3 16639 17799 16907 +3 16640 16652 17739 +3 16640 17738 16651 +3 16640 17739 17738 +3 16641 17115 17238 +3 16641 17238 16767 +3 16642 16768 17239 +3 16642 17239 17116 +3 16643 19958 21293 +3 16643 21293 17688 +3 16644 17689 21294 +3 16644 21294 19959 +3 16645 17194 19244 +3 16645 19244 18573 +3 16646 18574 19245 +3 16646 19245 17195 +3 16647 17953 18413 +3 16647 18413 17353 +3 16648 17354 18414 +3 16648 18414 17954 +3 16649 17262 20524 +3 16649 20524 19782 +3 16650 19783 20525 +3 16650 20525 17263 +3 16651 17738 17774 +3 16651 17774 16748 +3 16652 16749 17775 +3 16652 17775 17739 +3 16653 17260 18892 +3 16653 18892 18288 +3 16654 18289 18893 +3 16654 18893 17261 +3 16655 17764 18807 +3 16655 18807 17523 +3 16656 17524 18808 +3 16656 18808 17765 +3 16657 16952 17074 +3 16657 17074 16804 +3 16658 16805 17075 +3 16658 17075 16953 +3 16659 16717 17572 +3 16659 17549 16660 +3 16659 17572 17549 +3 16660 17549 17573 +3 16660 17573 16718 +3 16661 18337 19011 +3 16661 19011 17242 +3 16662 17243 19012 +3 16662 19012 18338 +3 16663 17299 17456 +3 16663 17456 16850 +3 16664 16851 17457 +3 16664 17457 17300 +3 16665 18862 19755 +3 16665 19755 17422 +3 16666 17423 19756 +3 16666 19756 18863 +3 16667 16972 17078 +3 16667 17078 16792 +3 16668 16793 17079 +3 16668 17079 16973 +3 16669 17664 19129 +3 16669 19129 18522 +3 16670 18523 19130 +3 16670 19130 17665 +3 16671 17849 21671 +3 16671 21671 20099 +3 16672 20100 21672 +3 16672 21672 17850 +3 16673 17347 19584 +3 16673 19584 18778 +3 16674 18779 19585 +3 16674 19585 17348 +3 16675 17012 17418 +3 16675 17418 17097 +3 16676 17098 17419 +3 16676 17419 17013 +3 16677 16886 17331 +3 16677 17331 17132 +3 16678 17133 17332 +3 16678 17332 16887 +3 16679 16824 17339 +3 16679 17339 17188 +3 16680 17189 17340 +3 16680 17340 16825 +3 16681 16856 17816 +3 16681 17615 16870 +3 16681 17816 17615 +3 16682 16871 17616 +3 16682 17616 17817 +3 16682 17817 16857 +3 16683 18536 19422 +3 16683 19422 17434 +3 16684 17435 19423 +3 16684 19423 18537 +3 16685 17119 18286 +3 16685 18286 17742 +3 16686 17743 18287 +3 16686 18287 17120 +3 16687 16739 19109 +3 16687 19081 16688 +3 16687 19109 19081 +3 16688 19081 19110 +3 16688 19110 16740 +3 16689 16699 17053 +3 16689 17053 17055 +3 16689 17055 16759 +3 16690 16760 17056 +3 16690 17054 16700 +3 16690 17056 17054 +3 16691 17037 17402 +3 16691 17402 17033 +3 16692 17034 17403 +3 16692 17403 17038 +3 16693 18504 20454 +3 16693 20454 18389 +3 16694 18390 20455 +3 16694 20455 18505 +3 16695 19596 20736 +3 16695 20736 17645 +3 16696 17646 20737 +3 16696 20737 19597 +3 16697 16944 17746 +3 16697 17746 17292 +3 16698 17293 17747 +3 16698 17747 16945 +3 16699 16754 17087 +3 16699 17087 17053 +3 16700 17054 17088 +3 16700 17088 16755 +3 16701 16818 17057 +3 16701 17057 16819 +3 16702 16942 17107 +3 16702 17107 16884 +3 16703 16885 17108 +3 16703 17108 16943 +3 16704 16960 17855 +3 16704 17855 18101 +3 16704 18101 16913 +3 16705 16914 18102 +3 16705 17856 16961 +3 16705 18102 17856 +3 16706 16948 17060 +3 16706 17060 16826 +3 16707 16827 17061 +3 16707 17061 16949 +3 16708 18624 20380 +3 16708 20380 18563 +3 16709 18564 20381 +3 16709 20381 18625 +3 16710 17349 19319 +3 16710 19319 18546 +3 16711 18547 19320 +3 16711 19320 17350 +3 16712 16884 17117 +3 16712 17117 16968 +3 16713 16969 17118 +3 16713 17118 16885 +3 16714 19168 20388 +3 16714 20388 19169 +3 16715 18484 19038 +3 16715 19038 17178 +3 16716 17179 19039 +3 16716 19039 18485 +3 16717 16806 17666 +3 16717 17666 17572 +3 16718 17573 17667 +3 16718 17667 16807 +3 16719 18809 19570 +3 16719 19570 17341 +3 16720 17342 19571 +3 16720 19571 18810 +3 16721 17305 18951 +3 16721 18951 18254 +3 16722 18255 18952 +3 16722 18952 17306 +3 16723 17362 18298 +3 16723 18298 17550 +3 16724 17551 18299 +3 16724 18299 17363 +3 16725 17552 18754 +3 16725 18754 17758 +3 16726 17759 18755 +3 16726 18755 17553 +3 16727 17333 17582 +3 16727 17582 17014 +3 16728 17015 17583 +3 16728 17583 17334 +3 16729 18441 19242 +3 16729 19242 17202 +3 16730 17203 19243 +3 16730 19243 18442 +3 16731 17033 17388 +3 16731 17388 17113 +3 16732 17114 17389 +3 16732 17389 17034 +3 16733 16974 17160 +3 16733 17160 16946 +3 16734 16947 17161 +3 16734 17161 16975 +3 16735 17872 19097 +3 16735 19097 17898 +3 16736 17899 19100 +3 16736 19100 17873 +3 16737 16980 17513 +3 16737 17513 17303 +3 16738 17304 17514 +3 16738 17514 16981 +3 16739 17526 20075 +3 16739 20075 19109 +3 16740 19110 20076 +3 16740 20076 17527 +3 16741 17013 17357 +3 16741 17357 17012 +3 16742 17772 18995 +3 16742 18995 17782 +3 16743 17783 18996 +3 16743 18996 17773 +3 16744 18457 18985 +3 16744 18985 17200 +3 16745 17201 18986 +3 16745 18986 18458 +3 16746 18002 19706 +3 16746 19706 18280 +3 16747 18281 19707 +3 16747 19707 18003 +3 16748 17774 17900 +3 16748 17900 16872 +3 16749 16873 17901 +3 16749 17901 17775 +3 16750 19058 20091 +3 16750 20091 17662 +3 16751 17663 20092 +3 16751 20092 19059 +3 16752 17619 20619 +3 16752 20619 19461 +3 16753 19462 20620 +3 16753 20620 17620 +3 16754 16834 17154 +3 16754 17154 17087 +3 16755 17088 17155 +3 16755 17155 16835 +3 16756 17278 17594 +3 16756 17594 17279 +3 16757 17134 17390 +3 16757 17390 17037 +3 16758 17038 17391 +3 16758 17391 17135 +3 16759 17055 17144 +3 16759 17144 16864 +3 16760 16865 17145 +3 16760 17145 17056 +3 16761 16970 17374 +3 16761 17374 17176 +3 16762 17177 17375 +3 16762 17375 16971 +3 16763 17366 19172 +3 16763 19172 18461 +3 16764 18462 19173 +3 16764 19173 17367 +3 16765 18437 20635 +3 16765 20635 19700 +3 16766 19701 20636 +3 16766 20636 18438 +3 16767 17238 17370 +3 16767 17370 16934 +3 16768 16935 17371 +3 16768 17371 17239 +3 16769 17355 18653 +3 16769 18653 17947 +3 16770 17948 18654 +3 16770 18654 17356 +3 16771 17317 17603 +3 16771 17603 17080 +3 16772 17081 17604 +3 16772 17604 17318 +3 16773 17172 18006 +3 16773 18006 17547 +3 16774 17548 18007 +3 16774 18007 17175 +3 16775 17477 17720 +3 16775 17720 17016 +3 16776 17017 17721 +3 16776 17721 17478 +3 16777 17784 18651 +3 16777 18651 17481 +3 16778 17482 18652 +3 16778 18652 17785 +3 16779 17027 17458 +3 16779 17458 17254 +3 16780 17255 17459 +3 16780 17459 17028 +3 16781 16803 17143 +3 16781 17142 16802 +3 16781 17143 17142 +3 16782 18087 19528 +3 16782 19528 18042 +3 16783 18043 19529 +3 16783 19529 18088 +3 16784 17452 20255 +3 16784 20255 19400 +3 16785 19401 20256 +3 16785 20256 17453 +3 16786 18262 19686 +3 16786 19686 18045 +3 16787 18048 19687 +3 16787 19687 18263 +3 16788 17150 17886 +3 16788 17886 17487 +3 16789 17488 17887 +3 16789 17887 17151 +3 16790 18042 19540 +3 16790 19540 18116 +3 16791 18117 19541 +3 16791 19541 18043 +3 16792 17078 17216 +3 16792 17216 16942 +3 16793 16943 17217 +3 16793 17217 17079 +3 16794 18451 20257 +3 16794 20257 18433 +3 16795 18434 20258 +3 16795 20258 18452 +3 16796 17782 19050 +3 16796 19050 17109 +3 16797 17110 19051 +3 16797 19051 17783 +3 16798 17643 18943 +3 16798 18943 17951 +3 16799 17952 18944 +3 16799 18944 17644 +3 16800 18661 19453 +3 16800 19453 17517 +3 16801 17518 19454 +3 16801 19454 18662 +3 16802 17142 17180 +3 16802 17180 16858 +3 16803 16859 17181 +3 16803 17181 17143 +3 16804 17074 17240 +3 16804 17240 16974 +3 16805 16975 17241 +3 16805 17241 17075 +3 16806 16940 17786 +3 16806 17786 17666 +3 16807 17667 17787 +3 16807 17787 16941 +3 16808 19447 20563 +3 16808 20563 17712 +3 16809 17713 20564 +3 16809 20564 19448 +3 16810 18045 19747 +3 16810 19747 18349 +3 16811 18350 19748 +3 16811 19748 18048 +3 16812 17309 18579 +3 16812 18579 17998 +3 16813 17999 18580 +3 16813 18580 17310 +3 16814 17722 18467 +3 16814 18467 17440 +3 16815 17441 18468 +3 16815 18468 17723 +3 16816 17678 20651 +3 16816 20651 19610 +3 16817 19611 20652 +3 16817 20652 17679 +3 16818 17019 17228 +3 16818 17228 17057 +3 16819 17057 17229 +3 16819 17229 17020 +3 16820 17499 17845 +3 16820 17845 17152 +3 16821 17153 17846 +3 16821 17846 17500 +3 16822 17420 18201 +3 16822 18201 17503 +3 16823 17504 18202 +3 16823 18202 17421 +3 16824 16954 17495 +3 16824 17495 17339 +3 16825 17340 17496 +3 16825 17496 16955 +3 16826 17060 17220 +3 16826 17220 17019 +3 16827 17020 17221 +3 16827 17221 17061 +3 16828 18433 20391 +3 16828 20391 18532 +3 16829 18533 20392 +3 16829 20392 18434 +3 16830 17479 18177 +3 16830 18177 17430 +3 16831 17431 18178 +3 16831 18178 17480 +3 16832 16946 17173 +3 16832 17173 17234 +3 16832 17234 16902 +3 16833 16903 17235 +3 16833 17174 16947 +3 16833 17235 17174 +3 16834 16968 17272 +3 16834 17272 17154 +3 16835 17155 17273 +3 16835 17273 16969 +3 16836 17097 17564 +3 16836 17564 17319 +3 16837 17320 17565 +3 16837 17565 17098 +3 16838 17430 18133 +3 16838 18133 17420 +3 16839 17421 18134 +3 16839 18134 17431 +3 16840 17543 18179 +3 16840 18179 17136 +3 16841 17137 18180 +3 16841 18180 17544 +3 16842 19457 22212 +3 16842 22212 19076 +3 16843 19077 22213 +3 16843 22213 19458 +3 16844 17343 18697 +3 16844 18697 18114 +3 16845 18115 18698 +3 16845 18698 17344 +3 16846 18750 20559 +3 16846 20559 18504 +3 16847 18505 20560 +3 16847 20560 18751 +3 16848 17566 20450 +3 16848 20450 19580 +3 16849 19581 20451 +3 16849 20451 17567 +3 16850 17456 17686 +3 16850 17686 17064 +3 16851 17065 17687 +3 16851 17687 17457 +3 16852 18242 18864 +3 16852 18864 17351 +3 16853 17352 18865 +3 16853 18865 18243 +3 16854 18312 18683 +3 16854 18683 17158 +3 16855 17159 18684 +3 16855 18684 18313 +3 16856 17051 18046 +3 16856 18046 17816 +3 16857 17817 18047 +3 16857 18047 17052 +3 16858 17180 17266 +3 16858 17266 16952 +3 16859 16953 17267 +3 16859 17267 17181 +3 16860 17358 20290 +3 16860 20290 18451 +3 16861 18452 20291 +3 16861 20291 17359 +3 16862 17992 18397 +3 16862 18397 17206 +3 16863 17207 18398 +3 16863 18398 17993 +3 16864 17144 17222 +3 16864 17222 16948 +3 16865 16949 17223 +3 16865 17223 17145 +3 16866 17170 18137 +3 16866 18137 17770 +3 16867 17771 18138 +3 16867 18138 17171 +3 16868 18093 19261 +3 16868 19261 17872 +3 16869 17873 19262 +3 16869 19262 18094 +3 16870 17615 17859 +3 16870 17859 17101 +3 16871 17102 17860 +3 16871 17860 17616 +3 16872 17900 18359 +3 16872 18359 17256 +3 16873 17257 18360 +3 16873 18360 17901 +3 16874 19192 20121 +3 16874 20121 17649 +3 16875 17650 20122 +3 16875 20122 19193 +3 16876 17208 18622 +3 16876 18622 18228 +3 16877 18229 18623 +3 16877 18623 17209 +3 16878 18902 19749 +3 16878 19749 17588 +3 16879 17589 19750 +3 16879 19750 18903 +3 16880 17198 18639 +3 16880 18639 18069 +3 16881 18070 18640 +3 16881 18640 17199 +3 16882 18391 18898 +3 16882 18898 17301 +3 16883 17302 18899 +3 16883 18899 18392 +3 16884 17107 17315 +3 16884 17315 17117 +3 16885 17118 17316 +3 16885 17316 17108 +3 16886 17113 17521 +3 16886 17521 17331 +3 16887 17332 17522 +3 16887 17522 17114 +3 16888 17288 19003 +3 16888 19003 18510 +3 16889 18511 19004 +3 16889 19004 17289 +3 16890 18417 19019 +3 16890 19019 17394 +3 16891 17395 19020 +3 16891 19020 18418 +3 16892 17748 20991 +3 16892 20991 19968 +3 16893 19969 20992 +3 16893 20992 17749 +3 16894 18000 18387 +3 16894 18387 17204 +3 16895 17205 18388 +3 16895 18388 18001 +3 16896 17466 18963 +3 16896 18963 18268 +3 16897 18269 18964 +3 16897 18964 17466 +3 16898 17292 17980 +3 16898 17980 17519 +3 16899 17520 17981 +3 16899 17981 17293 +3 16900 16990 17493 +3 16900 17493 17218 +3 16901 17219 17494 +3 16901 17494 16991 +3 16902 17234 17294 +3 16902 17294 16972 +3 16903 16973 17295 +3 16903 17295 17235 +3 16904 17424 17923 +3 16904 17923 17372 +3 16905 17373 17924 +3 16905 17924 17425 +3 16906 17196 18135 +3 16906 18135 17798 +3 16907 17799 18136 +3 16907 18136 17197 +3 16908 17599 20237 +3 16908 20237 19202 +3 16909 19203 20238 +3 16909 20238 17600 +3 16910 16924 17537 +3 16910 17537 17538 +3 16910 17538 16925 +3 16911 17378 17927 +3 16911 17927 17414 +3 16912 17415 17928 +3 16912 17928 17379 +3 16913 18101 18363 +3 16913 18363 17124 +3 16914 17125 18364 +3 16914 18364 18102 +3 16915 19076 22330 +3 16915 22330 19622 +3 16916 19623 22331 +3 16916 22331 19077 +3 16917 17372 17938 +3 16917 17938 17378 +3 16918 17379 17939 +3 16918 17939 17373 +3 16919 18447 19252 +3 16919 19252 18448 +3 16920 17898 19341 +3 16920 19341 18219 +3 16921 17404 17788 +3 16921 17788 17099 +3 16922 17100 17789 +3 16922 17789 17405 +3 16923 18220 19342 +3 16923 19342 17899 +3 16924 16966 17584 +3 16924 17584 17537 +3 16925 17538 17585 +3 16925 17585 16967 +3 16926 18563 20680 +3 16926 20680 18888 +3 16927 18889 20681 +3 16927 20681 18564 +3 16928 19522 20704 +3 16928 20704 17955 +3 16929 17956 20705 +3 16929 20705 19523 +3 16930 18205 18870 +3 16930 18870 17491 +3 16931 17492 18871 +3 16931 18871 18206 +3 16932 19137 19784 +3 16932 19784 17464 +3 16933 17465 19785 +3 16933 19785 19138 +3 16934 17370 17534 +3 16934 17534 17134 +3 16935 17135 17535 +3 16935 17535 17371 +3 16936 20294 21363 +3 16936 21363 17714 +3 16937 17715 21364 +3 16937 21364 20295 +3 16938 18020 21579 +3 16938 21579 20167 +3 16939 20168 21580 +3 16939 21580 18021 +3 16940 17270 18187 +3 16940 18187 17786 +3 16941 17787 18188 +3 16941 18188 17271 +3 16942 17216 17380 +3 16942 17380 17107 +3 16943 17108 17381 +3 16943 17381 17217 +3 16944 17224 18065 +3 16944 18065 17746 +3 16945 17747 18066 +3 16945 18066 17225 +3 16946 17160 17398 +3 16946 17398 17173 +3 16947 17174 17399 +3 16947 17399 17161 +3 16948 17222 17327 +3 16948 17327 17060 +3 16949 17061 17328 +3 16949 17328 17223 +3 16950 17639 18894 +3 16950 18894 18081 +3 16951 18082 18895 +3 16951 18895 17640 +3 16952 17266 17384 +3 16952 17384 17074 +3 16953 17075 17385 +3 16953 17385 17267 +3 16954 17093 17651 +3 16954 17651 17495 +3 16955 17496 17652 +3 16955 17652 17094 +3 16956 17641 18292 +3 16956 18292 17479 +3 16957 17480 18293 +3 16957 18293 17642 +3 16958 18225 19164 +3 16958 19164 17764 +3 16959 17765 19165 +3 16959 19165 18226 +3 16960 17550 18589 +3 16960 18589 17855 +3 16961 17856 18590 +3 16961 18590 17551 +3 16962 17528 19123 +3 16962 19123 18463 +3 16963 18464 19124 +3 16963 19124 17529 +3 16964 16996 18345 +3 16964 18325 16965 +3 16964 18345 18325 +3 16965 18325 18346 +3 16965 18346 16997 +3 16966 17049 17660 +3 16966 17660 17584 +3 16967 17585 17661 +3 16967 17661 17050 +3 16968 17117 17410 +3 16968 17410 17272 +3 16969 17273 17411 +3 16969 17411 17118 +3 16970 17218 17605 +3 16970 17605 17374 +3 16971 17375 17606 +3 16971 17606 17219 +3 16972 17294 17396 +3 16972 17396 17078 +3 16973 17079 17397 +3 16973 17397 17295 +3 16974 17240 17432 +3 16974 17432 17160 +3 16975 17161 17433 +3 16975 17433 17241 +3 16976 17400 19544 +3 16976 19544 19036 +3 16977 19037 19545 +3 16977 19545 17401 +3 16978 17539 17874 +3 16978 17874 17278 +3 16979 17279 17875 +3 16979 17875 17540 +3 16980 17414 18038 +3 16980 18038 17513 +3 16981 17514 18039 +3 16981 18039 17415 +3 16982 17913 18443 +3 16982 18443 17416 +3 16983 17417 18444 +3 16983 18444 17914 +3 16984 18270 21646 +3 16984 21646 20057 +3 16985 20058 21647 +3 16985 21647 18271 +3 16986 17853 20436 +3 16986 20436 19404 +3 16987 19405 20437 +3 16987 20437 17854 +3 16988 18012 21525 +3 16988 21525 20192 +3 16989 20193 21526 +3 16989 21526 18013 +3 16990 17132 17655 +3 16990 17655 17493 +3 16991 17494 17656 +3 16991 17656 17133 +3 16992 18609 19402 +3 16992 19402 17684 +3 16993 17685 19403 +3 16993 19403 18610 +3 16994 20047 21435 +3 16994 21435 18266 +3 16995 18267 21436 +3 16995 21436 20048 +3 16996 17111 18411 +3 16996 18411 18345 +3 16997 18346 18412 +3 16997 18412 17112 +3 16998 17121 17766 +3 16998 17766 17949 +3 16998 17949 17138 +3 16999 17139 17950 +3 16999 17767 17122 +3 16999 17950 17767 +3 17000 17025 18693 +3 17000 18693 18694 +3 17000 18694 17026 +3 17001 18550 19966 +3 17001 19966 18262 +3 17002 18263 19967 +3 17002 19967 18551 +3 17003 20302 21865 +3 17003 21865 18191 +3 17004 18192 21866 +3 17004 21866 20303 +3 17005 17867 20079 +3 17005 20079 19066 +3 17006 19067 20080 +3 17006 20080 17867 +3 17007 17029 20591 +3 17007 20591 20592 +3 17007 20592 17030 +3 17008 17503 18377 +3 17008 18377 17726 +3 17009 17727 18378 +3 17009 18378 17504 +3 17010 17558 20014 +3 17010 20014 19323 +3 17011 19324 20015 +3 17011 20015 17559 +3 17012 17357 17792 +3 17012 17792 17418 +3 17013 17419 17793 +3 17013 17793 17357 +3 17014 17582 18095 +3 17014 18095 17424 +3 17015 17425 18096 +3 17015 18096 17583 +3 17016 17720 17984 +3 17016 17984 17244 +3 17017 17245 17985 +3 17017 17985 17721 +3 17018 17036 17751 +3 17018 17750 17035 +3 17018 17751 17750 +3 17019 17220 17412 +3 17019 17412 17228 +3 17020 17229 17413 +3 17020 17413 17221 +3 17021 20034 20730 +3 17021 20730 17574 +3 17022 17575 20731 +3 17022 20731 20035 +3 17023 18215 19345 +3 17023 19345 18032 +3 17024 18033 19346 +3 17024 19346 18216 +3 17025 17072 18746 +3 17025 18746 18693 +3 17026 18694 18747 +3 17026 18747 17073 +3 17027 17176 17627 +3 17027 17627 17458 +3 17028 17459 17628 +3 17028 17628 17177 +3 17029 18264 22370 +3 17029 22370 20591 +3 17030 20592 22371 +3 17030 22371 18265 +3 17031 19093 20825 +3 17031 20825 18624 +3 17032 18625 20826 +3 17032 20826 19094 +3 17033 17402 17768 +3 17033 17768 17388 +3 17034 17389 17769 +3 17034 17769 17403 +3 17035 17750 17806 +3 17035 17806 17082 +3 17036 17083 17807 +3 17036 17807 17751 +3 17037 17390 17780 +3 17037 17780 17402 +3 17038 17403 17781 +3 17038 17781 17391 +3 17039 18361 19518 +3 17039 19518 18093 +3 17040 18094 19519 +3 17040 19519 18362 +3 17041 17919 20032 +3 17041 20032 19013 +3 17042 19014 20033 +3 17042 20033 17920 +3 17043 18465 19865 +3 17043 19865 18308 +3 17044 18309 19866 +3 17044 19866 18466 +3 17045 17631 20183 +3 17045 20183 19424 +3 17046 19425 20184 +3 17046 20184 17632 +3 17047 18955 19666 +3 17047 19666 17672 +3 17048 17673 19667 +3 17048 19667 18956 +3 17049 17254 17754 +3 17049 17754 17660 +3 17050 17661 17755 +3 17050 17755 17255 +3 17051 17276 18296 +3 17051 18296 18046 +3 17052 18047 18297 +3 17052 18297 17277 +3 17053 17087 17462 +3 17053 17446 17055 +3 17053 17462 17446 +3 17054 17056 17447 +3 17054 17447 17463 +3 17054 17463 17088 +3 17055 17446 17460 +3 17055 17460 17144 +3 17056 17145 17461 +3 17056 17461 17447 +3 17057 17228 17450 +3 17057 17450 17229 +3 17058 18445 19025 +3 17058 19025 17554 +3 17059 17555 19026 +3 17059 19026 18446 +3 17060 17327 17448 +3 17060 17448 17220 +3 17061 17221 17449 +3 17061 17449 17328 +3 17062 18145 18732 +3 17062 18732 17543 +3 17063 17544 18733 +3 17063 18733 18146 +3 17064 17686 17957 +3 17064 17957 17317 +3 17065 17318 17958 +3 17065 17958 17687 +3 17066 18738 20690 +3 17066 20690 18831 +3 17067 18832 20691 +3 17067 20691 18739 +3 17068 18014 20941 +3 17068 20941 19883 +3 17069 19884 20942 +3 17069 20942 18015 +3 17070 17290 18695 +3 17070 18695 17784 +3 17071 17785 18696 +3 17071 18696 17291 +3 17072 17592 19426 +3 17072 19426 18746 +3 17073 18747 19427 +3 17073 19427 17593 +3 17074 17384 17515 +3 17074 17515 17240 +3 17075 17241 17516 +3 17075 17516 17385 +3 17076 17188 17756 +3 17076 17635 17115 +3 17076 17756 17635 +3 17077 17116 17636 +3 17077 17636 17757 +3 17077 17757 17189 +3 17078 17396 17507 +3 17078 17507 17216 +3 17079 17217 17508 +3 17079 17508 17397 +3 17080 17603 17974 +3 17080 17974 17404 +3 17081 17405 17975 +3 17081 17975 17604 +3 17082 17806 17884 +3 17082 17884 17166 +3 17083 17167 17885 +3 17083 17885 17807 +3 17084 19468 20621 +3 17084 20621 19467 +3 17085 19218 21919 +3 17085 21919 19394 +3 17086 19395 21920 +3 17086 21920 19219 +3 17087 17154 17509 +3 17087 17509 17462 +3 17088 17463 17510 +3 17088 17510 17155 +3 17089 17951 18949 +3 17089 18949 17990 +3 17090 17991 18950 +3 17090 18950 17952 +3 17091 18124 18559 +3 17091 18559 17469 +3 17092 17470 18560 +3 17092 18560 18125 +3 17093 17319 17880 +3 17093 17880 17651 +3 17094 17652 17881 +3 17094 17881 17320 +3 17095 19283 21719 +3 17095 21719 19218 +3 17096 19219 21720 +3 17096 21720 19284 +3 17097 17418 17915 +3 17097 17915 17564 +3 17098 17565 17916 +3 17098 17916 17419 +3 17099 17788 18034 +3 17099 18034 17333 +3 17100 17334 18035 +3 17100 18035 17789 +3 17101 17859 18514 +3 17101 18514 17641 +3 17102 17642 18515 +3 17102 18515 17860 +3 17103 18349 20137 +3 17103 20137 18776 +3 17104 18777 20138 +3 17104 20138 18350 +3 17105 19978 20851 +3 17105 20851 18750 +3 17106 18751 20852 +3 17106 20852 19979 +3 17107 17380 17560 +3 17107 17560 17315 +3 17108 17316 17561 +3 17108 17561 17381 +3 17109 19050 19477 +3 17109 19477 17467 +3 17110 17468 19478 +3 17110 19478 19051 +3 17111 17530 18926 +3 17111 18926 18411 +3 17112 18412 18927 +3 17112 18927 17531 +3 17113 17388 17820 +3 17113 17820 17521 +3 17114 17522 17821 +3 17114 17821 17389 +3 17115 17635 17730 +3 17115 17730 17238 +3 17116 17239 17731 +3 17116 17731 17636 +3 17117 17315 17580 +3 17117 17580 17410 +3 17118 17411 17581 +3 17118 17581 17316 +3 17119 17607 18872 +3 17119 18872 18286 +3 17120 18287 18873 +3 17120 18873 17608 +3 17121 17303 17963 +3 17121 17963 17766 +3 17122 17767 17964 +3 17122 17964 17304 +3 17123 18939 20649 +3 17123 20649 18993 +3 17124 18363 18656 +3 17124 18656 17376 +3 17125 17377 18657 +3 17125 18657 18364 +3 17126 18994 20650 +3 17126 20650 18940 +3 17127 17128 19428 +3 17127 19428 19451 +3 17127 19451 17184 +3 17128 17185 19452 +3 17128 19452 19428 +3 17129 18469 22435 +3 17129 22435 20613 +3 17130 20614 22436 +3 17130 22436 18470 +3 17131 18231 18805 +3 17131 18805 18230 +3 17132 17331 17831 +3 17132 17831 17655 +3 17133 17656 17832 +3 17133 17832 17332 +3 17134 17534 17812 +3 17134 17812 17390 +3 17135 17391 17813 +3 17135 17813 17535 +3 17136 18179 18854 +3 17136 18854 17722 +3 17137 17723 18855 +3 17137 18855 18180 +3 17138 17949 18149 +3 17138 18149 17297 +3 17139 17298 18150 +3 17139 18150 17950 +3 17140 19766 20853 +3 17140 20853 18018 +3 17141 18019 20854 +3 17141 20854 19767 +3 17142 17143 17525 +3 17142 17525 17545 +3 17142 17545 17180 +3 17143 17181 17546 +3 17143 17546 17525 +3 17144 17460 17505 +3 17144 17505 17222 +3 17145 17223 17506 +3 17145 17506 17461 +3 17146 18219 19668 +3 17146 19668 18597 +3 17147 18598 19669 +3 17147 19669 18220 +3 17148 19333 22377 +3 17148 22377 19684 +3 17149 19685 22378 +3 17149 22378 19334 +3 17150 17536 18339 +3 17150 18339 17886 +3 17151 17887 18340 +3 17151 18340 17536 +3 17152 17845 18274 +3 17152 18274 17539 +3 17153 17540 18275 +3 17153 18275 17846 +3 17154 17272 17611 +3 17154 17611 17509 +3 17155 17510 17612 +3 17155 17612 17273 +3 17156 17890 20127 +3 17156 20127 19267 +3 17157 19268 20128 +3 17157 20128 17891 +3 17158 18683 19082 +3 17158 19082 17489 +3 17159 17490 19083 +3 17159 19083 18684 +3 17160 17432 17657 +3 17160 17657 17398 +3 17161 17399 17658 +3 17161 17658 17433 +3 17162 18097 20352 +3 17162 20352 19396 +3 17163 19397 20353 +3 17163 20353 18098 +3 17164 17905 19814 +3 17164 19814 18967 +3 17165 18968 19815 +3 17165 19815 17906 +3 17166 17884 18026 +3 17166 18026 17299 +3 17167 17300 18027 +3 17167 18027 17885 +3 17168 19696 20492 +3 17168 20492 17841 +3 17169 17842 20493 +3 17169 20493 19697 +3 17170 17519 18565 +3 17170 18565 18137 +3 17171 18138 18566 +3 17171 18566 17520 +3 17172 17487 18431 +3 17172 18431 18006 +3 17173 17398 17568 +3 17173 17568 17234 +3 17174 17235 17569 +3 17174 17569 17399 +3 17175 18007 18432 +3 17175 18432 17488 +3 17176 17374 17833 +3 17176 17833 17627 +3 17177 17628 17834 +3 17177 17834 17375 +3 17178 19038 19645 +3 17178 19645 17701 +3 17179 17702 19646 +3 17179 19646 19039 +3 17180 17545 17613 +3 17180 17613 17266 +3 17181 17267 17614 +3 17181 17614 17546 +3 17182 18787 20496 +3 17182 20496 18801 +3 17183 18802 20497 +3 17183 20497 18788 +3 17184 19451 20370 +3 17184 20370 17988 +3 17185 17989 20371 +3 17185 20371 19452 +3 17186 19394 22099 +3 17186 22099 19457 +3 17187 19458 22100 +3 17187 22100 19395 +3 17188 17339 17921 +3 17188 17921 17756 +3 17189 17757 17922 +3 17189 17922 17340 +3 17190 18710 20055 +3 17190 20055 18465 +3 17191 18466 20056 +3 17191 20056 18711 +3 17192 18036 18860 +3 17192 18860 18010 +3 17193 18011 18861 +3 17193 18861 18037 +3 17194 17814 19934 +3 17194 19934 19244 +3 17195 19245 19935 +3 17195 19935 17815 +3 17196 17547 18544 +3 17196 18544 18135 +3 17197 18136 18545 +3 17197 18545 17548 +3 17198 17562 19064 +3 17198 19064 18639 +3 17199 18640 19065 +3 17199 19065 17563 +3 17200 18985 19572 +3 17200 19572 18215 +3 17201 18216 19573 +3 17201 19573 18986 +3 17202 19242 19982 +3 17202 19982 17861 +3 17203 17862 19983 +3 17203 19983 19243 +3 17204 18387 18789 +3 17204 18789 17595 +3 17205 17596 18790 +3 17205 18790 18388 +3 17206 18397 18880 +3 17206 18880 17625 +3 17207 17626 18881 +3 17207 18881 18398 +3 17208 17556 19031 +3 17208 19031 18622 +3 17209 18623 19032 +3 17209 19032 17557 +3 17210 18831 20782 +3 17210 20782 19078 +3 17211 19079 20783 +3 17211 20783 18832 +3 17212 19917 20863 +3 17212 20863 18077 +3 17213 18078 20864 +3 17213 20864 19918 +3 17214 19873 22520 +3 17214 22520 19333 +3 17215 19334 22521 +3 17215 22521 19874 +3 17216 17507 17694 +3 17216 17694 17380 +3 17217 17381 17695 +3 17217 17695 17508 +3 17218 17493 17934 +3 17218 17934 17605 +3 17219 17606 17935 +3 17219 17935 17494 +3 17220 17448 17637 +3 17220 17637 17412 +3 17221 17413 17638 +3 17221 17638 17449 +3 17222 17505 17601 +3 17222 17601 17327 +3 17223 17328 17602 +3 17223 17602 17506 +3 17224 17726 18667 +3 17224 18667 18065 +3 17225 18066 18668 +3 17225 18668 17727 +3 17226 18221 19146 +3 17226 19146 18089 +3 17227 18090 19147 +3 17227 19147 18222 +3 17228 17412 17633 +3 17228 17633 17450 +3 17229 17450 17634 +3 17229 17634 17413 +3 17230 18157 20815 +3 17230 20815 19779 +3 17231 19780 20816 +3 17231 20816 18158 +3 17232 18888 20637 +3 17232 20637 18787 +3 17233 18788 20638 +3 17233 20638 18889 +3 17234 17568 17629 +3 17234 17629 17294 +3 17235 17295 17630 +3 17235 17630 17569 +3 17236 20231 21221 +3 17236 21221 18122 +3 17237 18123 21222 +3 17237 21222 20232 +3 17238 17730 17882 +3 17238 17882 17370 +3 17239 17371 17883 +3 17239 17883 17731 +3 17240 17515 17716 +3 17240 17716 17432 +3 17241 17433 17717 +3 17241 17717 17516 +3 17242 19011 19716 +3 17242 19716 17865 +3 17243 17866 19717 +3 17243 19717 19012 +3 17244 17984 18290 +3 17244 18290 17499 +3 17245 17500 18291 +3 17245 18291 17985 +3 17246 18089 19180 +3 17246 19180 18258 +3 17247 18261 19181 +3 17247 19181 18090 +3 17248 19875 20700 +3 17248 20700 17972 +3 17249 17973 20701 +3 17249 20701 19876 +3 17250 18740 19506 +3 17250 19506 17953 +3 17251 17954 19507 +3 17251 19507 18741 +3 17252 18010 18957 +3 17252 18957 18128 +3 17253 18129 18958 +3 17253 18958 18011 +3 17254 17458 18004 +3 17254 18004 17754 +3 17255 17755 18005 +3 17255 18005 17459 +3 17256 18359 18848 +3 17256 18848 17670 +3 17257 17671 18849 +3 17257 18849 18360 +3 17258 18801 20549 +3 17258 20549 17736 +3 17259 17737 20550 +3 17259 20550 18802 +3 17260 17796 19500 +3 17260 19500 18892 +3 17261 18893 19501 +3 17261 19501 17797 +3 17262 18061 21591 +3 17262 21591 20524 +3 17263 20525 21592 +3 17263 21592 18062 +3 17264 18195 19005 +3 17264 19005 18036 +3 17265 18037 19006 +3 17265 19006 18196 +3 17266 17613 17732 +3 17266 17732 17384 +3 17267 17385 17733 +3 17267 17733 17614 +3 17268 18530 19895 +3 17268 19895 18550 +3 17269 18551 19896 +3 17269 19896 18531 +3 17270 17473 18595 +3 17270 18595 18187 +3 17271 18188 18596 +3 17271 18596 17474 +3 17272 17410 17744 +3 17272 17744 17611 +3 17273 17612 17745 +3 17273 17745 17411 +3 17274 18577 19901 +3 17274 19901 18530 +3 17275 18531 19902 +3 17275 19902 18578 +3 17276 17501 18593 +3 17276 18593 18296 +3 17277 18297 18594 +3 17277 18594 17502 +3 17278 17874 18244 +3 17278 18244 17594 +3 17279 17594 18245 +3 17279 18245 17875 +3 17280 20382 21795 +3 17280 21795 18379 +3 17281 18380 21796 +3 17281 21796 20383 +3 17282 18213 22072 +3 17282 22072 20794 +3 17283 20795 22073 +3 17283 22073 18214 +3 17284 18314 20899 +3 17284 20899 19792 +3 17285 19793 20900 +3 17285 20900 18315 +3 17286 20278 21838 +3 17286 21838 18567 +3 17287 18568 21839 +3 17287 21839 20279 +3 17288 17734 19534 +3 17288 19534 19003 +3 17289 19004 19535 +3 17289 19535 17735 +3 17290 17532 18975 +3 17290 18975 18695 +3 17291 18696 18976 +3 17291 18976 17533 +3 17292 17746 18502 +3 17292 18502 17980 +3 17293 17981 18503 +3 17293 18503 17747 +3 17294 17629 17718 +3 17294 17718 17396 +3 17295 17397 17719 +3 17295 17719 17630 +3 17296 17324 20767 +3 17296 20766 17323 +3 17296 20767 20766 +3 17297 18149 18375 +3 17297 18375 17477 +3 17298 17478 18376 +3 17298 18376 18150 +3 17299 18026 18367 +3 17299 18367 17456 +3 17300 17457 18368 +3 17300 18368 18027 +3 17301 18898 19414 +3 17301 19414 17868 +3 17302 17869 19415 +3 17302 19415 18899 +3 17303 17513 18217 +3 17303 18217 17963 +3 17304 17964 18218 +3 17304 18218 17514 +3 17305 17760 19670 +3 17305 19670 18951 +3 17306 18952 19671 +3 17306 19671 17761 +3 17307 18569 20101 +3 17307 20101 18768 +3 17308 18769 20102 +3 17308 20102 18570 +3 17309 17742 19101 +3 17309 19101 18579 +3 17310 18580 19102 +3 17310 19102 17743 +3 17311 18506 22062 +3 17311 22062 20531 +3 17312 20532 22063 +3 17312 22063 18507 +3 17313 18369 19321 +3 17313 19321 18221 +3 17314 18222 19322 +3 17314 19322 18370 +3 17315 17560 17818 +3 17315 17818 17580 +3 17316 17581 17819 +3 17316 17819 17561 +3 17317 17957 18272 +3 17317 18272 17603 +3 17318 17604 18273 +3 17318 18273 17958 +3 17319 17564 18185 +3 17319 18185 17880 +3 17320 17881 18186 +3 17320 18186 17565 +3 17321 18371 19481 +3 17321 19481 18361 +3 17322 18362 19482 +3 17322 19482 18372 +3 17323 20766 22552 +3 17323 22552 18561 +3 17324 18562 22553 +3 17324 22553 20767 +3 17325 17758 19469 +3 17325 19469 18969 +3 17326 18970 19470 +3 17326 19470 17759 +3 17327 17601 17740 +3 17327 17740 17448 +3 17328 17449 17741 +3 17328 17741 17602 +3 17329 20409 21743 +3 17329 21743 18373 +3 17330 18374 21744 +3 17330 21744 20410 +3 17331 17521 18083 +3 17331 18083 17831 +3 17332 17832 18084 +3 17332 18084 17522 +3 17333 18034 18302 +3 17333 18302 17582 +3 17334 17583 18303 +3 17334 18303 18035 +3 17335 19255 20915 +3 17335 20915 18939 +3 17336 18940 20916 +3 17336 20916 19256 +3 17337 18852 20151 +3 17337 20151 18569 +3 17338 18570 20152 +3 17338 20152 18853 +3 17339 17495 18126 +3 17339 18126 17921 +3 17340 17922 18127 +3 17340 18127 17496 +3 17341 19570 20522 +3 17341 20522 18073 +3 17342 18074 20523 +3 17342 20523 19571 +3 17343 17947 19349 +3 17343 19349 18697 +3 17344 18698 19350 +3 17344 19350 17948 +3 17345 18613 21681 +3 17345 21681 20300 +3 17346 20301 21682 +3 17346 21682 18614 +3 17347 18151 20432 +3 17347 20432 19584 +3 17348 19585 20433 +3 17348 20433 18152 +3 17349 18099 20123 +3 17349 20123 19319 +3 17350 19320 20124 +3 17350 20124 18100 +3 17351 18864 19490 +3 17351 19490 17943 +3 17352 17944 19491 +3 17352 19491 18865 +3 17353 18413 19317 +3 17353 19317 18225 +3 17354 18226 19318 +3 17354 19318 18414 +3 17355 18081 19060 +3 17355 19060 18653 +3 17356 18654 19061 +3 17356 19061 18082 +3 17357 17793 18107 +3 17357 18107 17792 +3 17358 17959 20933 +3 17358 20933 20290 +3 17359 20291 20934 +3 17359 20934 17960 +3 17360 17674 19538 +3 17360 19538 18371 +3 17361 18372 19539 +3 17361 19539 17675 +3 17362 18128 19117 +3 17362 19117 18298 +3 17363 18299 19118 +3 17363 19118 18129 +3 17364 18542 19600 +3 17364 19600 18524 +3 17365 18525 19601 +3 17365 19601 18543 +3 17366 18130 19905 +3 17366 19905 19172 +3 17367 19173 19906 +3 17367 19906 18131 +3 17368 18258 19408 +3 17368 19408 18488 +3 17369 18489 19409 +3 17369 19409 18261 +3 17370 17882 18091 +3 17370 18091 17534 +3 17371 17535 18092 +3 17371 18092 17883 +3 17372 17923 18526 +3 17372 18526 17938 +3 17373 17939 18527 +3 17373 18527 17924 +3 17374 17605 18120 +3 17374 18120 17833 +3 17375 17834 18121 +3 17375 18121 17606 +3 17376 18656 18973 +3 17376 18973 17668 +3 17377 17669 18974 +3 17377 18974 18657 +3 17378 17938 18528 +3 17378 18528 17927 +3 17379 17928 18529 +3 17379 18529 17939 +3 17380 17694 17892 +3 17380 17892 17560 +3 17381 17561 17893 +3 17381 17893 17695 +3 17382 19635 22109 +3 17382 22109 19459 +3 17383 19460 22110 +3 17383 22110 19636 +3 17384 17732 17896 +3 17384 17896 17515 +3 17385 17516 17897 +3 17385 17897 17733 +3 17386 18675 22946 +3 17386 22946 21081 +3 17387 21082 22947 +3 17387 22947 18676 +3 17388 17768 18236 +3 17388 18236 17820 +3 17389 17821 18237 +3 17389 18237 17769 +3 17390 17812 18238 +3 17390 18238 17780 +3 17391 17781 18239 +3 17391 18239 17813 +3 17392 18782 23103 +3 17392 23103 21133 +3 17393 21134 23104 +3 17393 23104 18783 +3 17394 19019 19661 +3 17394 19661 17994 +3 17395 17995 19662 +3 17395 19662 19020 +3 17396 17718 17843 +3 17396 17843 17507 +3 17397 17508 17844 +3 17397 17844 17719 +3 17398 17657 17827 +3 17398 17827 17568 +3 17399 17569 17828 +3 17399 17828 17658 +3 17400 17961 20153 +3 17400 20153 19544 +3 17401 19545 20154 +3 17401 20154 17962 +3 17402 17780 18248 +3 17402 18248 17768 +3 17403 17769 18249 +3 17403 18249 17781 +3 17404 17974 18393 +3 17404 18393 17788 +3 17405 17789 18394 +3 17405 18394 17975 +3 17406 19459 21911 +3 17406 21911 19542 +3 17407 19543 21912 +3 17407 21912 19460 +3 17408 19622 22480 +3 17408 22480 19770 +3 17409 19771 22481 +3 17409 22481 19623 +3 17410 17580 17945 +3 17410 17945 17744 +3 17411 17745 17946 +3 17411 17946 17581 +3 17412 17637 17863 +3 17412 17863 17633 +3 17413 17634 17864 +3 17413 17864 17638 +3 17414 17927 18591 +3 17414 18591 18038 +3 17415 18039 18592 +3 17415 18592 17928 +3 17416 18443 18977 +3 17416 18977 17940 +3 17417 17940 18978 +3 17417 18978 18444 +3 17418 17792 18304 +3 17418 18304 17915 +3 17419 17916 18305 +3 17419 18305 17793 +3 17420 18133 18929 +3 17420 18929 18201 +3 17421 18202 18930 +3 17421 18930 18134 +3 17422 19755 20726 +3 17422 20726 18310 +3 17423 18311 20727 +3 17423 20727 19756 +3 17424 18095 18617 +3 17424 18617 17923 +3 17425 17924 18618 +3 17425 18618 18096 +3 17426 18993 21067 +3 17426 21067 19416 +3 17427 19417 21068 +3 17427 21068 18994 +3 17428 18403 22560 +3 17428 22560 21150 +3 17429 21151 22561 +3 17429 22561 18404 +3 17430 18177 18920 +3 17430 18920 18133 +3 17431 18134 18921 +3 17431 18921 18178 +3 17432 17716 17968 +3 17432 17968 17657 +3 17433 17658 17969 +3 17433 17969 17717 +3 17434 19422 20374 +3 17434 20374 18320 +3 17435 18320 20375 +3 17435 20375 19423 +3 17436 19659 20328 +3 17436 20328 18028 +3 17437 18029 20329 +3 17437 20329 19660 +3 17438 20798 22594 +3 17438 22594 18756 +3 17439 18757 22595 +3 17439 22595 20799 +3 17440 18467 19216 +3 17440 19216 18195 +3 17441 18196 19217 +3 17441 19217 18468 +3 17442 19178 20905 +3 17442 20905 19093 +3 17443 19094 20906 +3 17443 20906 19179 +3 17444 20174 21209 +3 17444 21209 18415 +3 17445 18416 21210 +3 17445 21210 20175 +3 17446 17462 17835 +3 17446 17835 17837 +3 17446 17837 17460 +3 17447 17461 17838 +3 17447 17836 17463 +3 17447 17838 17836 +3 17448 17740 17929 +3 17448 17929 17637 +3 17449 17638 17930 +3 17449 17930 17741 +3 17450 17633 17931 +3 17450 17931 17634 +3 17451 19768 20855 +3 17451 20855 19769 +3 17452 19078 21069 +3 17452 21069 20255 +3 17453 20256 21070 +3 17453 21070 19079 +3 17454 19952 22570 +3 17454 22570 19592 +3 17455 19593 22571 +3 17455 22571 19953 +3 17456 18367 18581 +3 17456 18581 17686 +3 17457 17687 18582 +3 17457 18582 18368 +3 17458 17627 18211 +3 17458 18211 18004 +3 17459 18005 18212 +3 17459 18212 17628 +3 17460 17837 17970 +3 17460 17970 17505 +3 17461 17506 17971 +3 17461 17971 17838 +3 17462 17509 17888 +3 17462 17888 17835 +3 17463 17836 17889 +3 17463 17889 17510 +3 17464 19784 20464 +3 17464 20464 18105 +3 17465 18106 20465 +3 17465 20465 19785 +3 17466 18964 19683 +3 17466 19683 18963 +3 17467 19477 19942 +3 17467 19942 17925 +3 17468 17926 19943 +3 17468 19943 19478 +3 17469 18559 19027 +3 17469 19027 17913 +3 17470 17914 19028 +3 17470 19028 18560 +3 17471 19684 22280 +3 17471 22280 19635 +3 17472 19636 22281 +3 17472 22281 19685 +3 17473 17770 18900 +3 17473 18900 18595 +3 17474 18596 18901 +3 17474 18901 17771 +3 17475 18524 19764 +3 17475 19764 18701 +3 17476 18702 19765 +3 17476 19765 18525 +3 17477 18375 18615 +3 17477 18615 17720 +3 17478 17721 18616 +3 17478 18616 18376 +3 17479 18292 18989 +3 17479 18989 18177 +3 17480 18178 18990 +3 17480 18990 18293 +3 17481 18651 19556 +3 17481 19556 18369 +3 17482 18370 19557 +3 17482 19557 18652 +3 17483 18776 20219 +3 17483 20219 18906 +3 17484 18907 20220 +3 17484 20220 18777 +3 17485 18768 20326 +3 17485 20326 19023 +3 17486 19024 20327 +3 17486 20327 18769 +3 17487 17886 18825 +3 17487 18825 18431 +3 17488 18432 18826 +3 17488 18826 17887 +3 17489 19082 19546 +3 17489 19546 17911 +3 17490 17912 19547 +3 17490 19547 19083 +3 17491 18870 19498 +3 17491 19498 18132 +3 17492 18132 19499 +3 17492 19499 18871 +3 17493 17655 18259 +3 17493 18259 17934 +3 17494 17935 18260 +3 17494 18260 17656 +3 17495 17651 18332 +3 17495 18332 18126 +3 17496 18127 18333 +3 17496 18333 17652 +3 17497 19770 22641 +3 17497 22641 19891 +3 17498 19892 22642 +3 17498 22642 19771 +3 17499 18290 18658 +3 17499 18658 17845 +3 17500 17846 18659 +3 17500 18659 18291 +3 17501 17798 18904 +3 17501 18904 18593 +3 17502 18594 18905 +3 17502 18905 17799 +3 17503 18201 19040 +3 17503 19040 18377 +3 17504 18378 19041 +3 17504 19041 18202 +3 17505 17970 18055 +3 17505 18055 17601 +3 17506 17602 18056 +3 17506 18056 17971 +3 17507 17843 18030 +3 17507 18030 17694 +3 17508 17695 18031 +3 17508 18031 17844 +3 17509 17611 17978 +3 17509 17978 17888 +3 17510 17889 17979 +3 17510 17979 17612 +3 17511 19592 22677 +3 17511 22677 20111 +3 17512 20112 22678 +3 17512 22678 19593 +3 17513 18038 18736 +3 17513 18736 18217 +3 17514 18218 18737 +3 17514 18737 18039 +3 17515 17896 18112 +3 17515 18112 17716 +3 17516 17717 18113 +3 17516 18113 17897 +3 17517 19453 20395 +3 17517 20395 18457 +3 17518 18458 20396 +3 17518 20396 19454 +3 17519 17980 19009 +3 17519 19009 18565 +3 17520 18566 19010 +3 17520 19010 17981 +3 17521 17820 18329 +3 17521 18329 18083 +3 17522 18084 18330 +3 17522 18330 17821 +3 17523 18807 19843 +3 17523 19843 18542 +3 17524 18543 19844 +3 17524 19844 18808 +3 17525 17546 18054 +3 17525 18053 17545 +3 17525 18054 18053 +3 17526 18449 21116 +3 17526 21116 20075 +3 17527 20076 21117 +3 17527 21117 18450 +3 17528 18268 19863 +3 17528 19863 19123 +3 17529 19124 19864 +3 17529 19864 18269 +3 17530 18069 19443 +3 17530 19443 18926 +3 17531 18927 19444 +3 17531 19444 18070 +3 17532 17847 19315 +3 17532 19315 18975 +3 17533 18976 19316 +3 17533 19316 17848 +3 17534 18091 18306 +3 17534 18306 17812 +3 17535 17813 18307 +3 17535 18307 18092 +3 17536 18340 18837 +3 17536 18837 18339 +3 17537 17584 18357 +3 17537 18334 17538 +3 17537 18357 18334 +3 17538 18334 18358 +3 17538 18358 17585 +3 17539 18274 18601 +3 17539 18601 17874 +3 17540 17875 18602 +3 17540 18602 18275 +3 17541 19363 20893 +3 17541 20893 19327 +3 17542 19328 20894 +3 17542 20894 19364 +3 17543 18732 19351 +3 17543 19351 18179 +3 17544 18180 19352 +3 17544 19352 18733 +3 17545 18053 18110 +3 17545 18110 17613 +3 17546 17614 18111 +3 17546 18111 18054 +3 17547 18006 18987 +3 17547 18987 18544 +3 17548 18545 18988 +3 17548 18988 18007 +3 17549 17572 18673 +3 17549 18673 18674 +3 17549 18674 17573 +3 17550 18298 19347 +3 17550 19347 18589 +3 17551 18590 19348 +3 17551 19348 18299 +3 17552 18597 19804 +3 17552 19804 18754 +3 17553 18755 19805 +3 17553 19805 18598 +3 17554 19025 19626 +3 17554 19626 18205 +3 17555 18206 19627 +3 17555 19627 19026 +3 17556 17998 19492 +3 17556 19492 19031 +3 17557 19032 19493 +3 17557 19493 17999 +3 17558 18280 20744 +3 17558 20744 20014 +3 17559 20015 20745 +3 17559 20745 18281 +3 17560 17892 18153 +3 17560 18153 17818 +3 17561 17819 18154 +3 17561 18154 17893 +3 17562 18114 19604 +3 17562 19604 19064 +3 17563 19065 19605 +3 17563 19605 18115 +3 17564 17915 18498 +3 17564 18498 18185 +3 17565 18186 18499 +3 17565 18499 17916 +3 17566 18478 21487 +3 17566 21487 20450 +3 17567 20451 21488 +3 17567 21488 18479 +3 17568 17827 18067 +3 17568 18067 17629 +3 17569 17630 18068 +3 17569 18068 17828 +3 17570 20972 22244 +3 17570 22244 18508 +3 17571 18509 22245 +3 17571 22245 20973 +3 17572 17666 18699 +3 17572 18699 18673 +3 17573 18674 18700 +3 17573 18700 17667 +3 17574 20730 21812 +3 17574 21812 18409 +3 17575 18410 21813 +3 17575 21813 20731 +3 17576 19386 21013 +3 17576 21013 19178 +3 17577 19179 21014 +3 17577 21014 19387 +3 17578 19170 20752 +3 17578 20752 19144 +3 17579 19145 20753 +3 17579 20753 19171 +3 17580 17818 18169 +3 17580 18169 17945 +3 17581 17946 18170 +3 17581 18170 17819 +3 17582 18302 18815 +3 17582 18815 18095 +3 17583 18096 18816 +3 17583 18816 18303 +3 17584 17660 18427 +3 17584 18427 18357 +3 17585 18358 18428 +3 17585 18428 17661 +3 17586 18874 22030 +3 17586 22030 20488 +3 17587 20489 22031 +3 17587 22031 18875 +3 17588 19749 20655 +3 17588 20655 18536 +3 17589 18537 20656 +3 17589 20656 19750 +3 17590 17653 19841 +3 17590 19823 17591 +3 17590 19841 19823 +3 17591 19823 19842 +3 17591 19842 17654 +3 17592 18254 20125 +3 17592 20125 19426 +3 17593 19427 20126 +3 17593 20126 18255 +3 17594 18244 18655 +3 17594 18655 18245 +3 17595 18789 19293 +3 17595 19293 18124 +3 17596 18125 19294 +3 17596 19294 18790 +3 17597 17622 19260 +3 17597 19259 17621 +3 17597 19260 19259 +3 17598 17623 20954 +3 17598 20954 20955 +3 17598 20955 17624 +3 17599 18490 21156 +3 17599 21156 20237 +3 17600 20238 21157 +3 17600 21157 18491 +3 17601 18055 18193 +3 17601 18193 17740 +3 17602 17741 18194 +3 17602 18194 18056 +3 17603 18272 18633 +3 17603 18633 17974 +3 17604 17975 18634 +3 17604 18634 18273 +3 17605 17934 18425 +3 17605 18425 18120 +3 17606 18121 18426 +3 17606 18426 17935 +3 17607 18230 19465 +3 17607 19465 18872 +3 17608 18873 19466 +3 17608 19466 18231 +3 17609 19238 20478 +3 17609 20478 18852 +3 17610 18853 20479 +3 17610 20479 19239 +3 17611 17744 18118 +3 17611 18118 17978 +3 17612 17979 18119 +3 17612 18119 17745 +3 17613 18110 18163 +3 17613 18163 17732 +3 17614 17733 18164 +3 17614 18164 18111 +3 17615 17816 18971 +3 17615 18780 17859 +3 17615 18971 18780 +3 17616 17860 18781 +3 17616 18781 18972 +3 17616 18972 17817 +3 17617 19144 20869 +3 17617 20869 19255 +3 17618 19256 20870 +3 17618 20870 19145 +3 17619 18722 22001 +3 17619 22001 20619 +3 17620 20620 22002 +3 17620 22002 18723 +3 17621 19259 19301 +3 17621 19301 17690 +3 17622 17691 19302 +3 17622 19302 19260 +3 17623 18868 22727 +3 17623 22727 20954 +3 17624 20955 22728 +3 17624 22728 18869 +3 17625 18880 19384 +3 17625 19384 18145 +3 17626 18146 19385 +3 17626 19385 18881 +3 17627 17833 18405 +3 17627 18405 18211 +3 17628 18212 18406 +3 17628 18406 17834 +3 17629 18067 18141 +3 17629 18141 17718 +3 17630 17719 18142 +3 17630 18142 18068 +3 17631 18401 20939 +3 17631 20939 20183 +3 17632 20184 20940 +3 17632 20940 18402 +3 17633 17863 18159 +3 17633 18159 17931 +3 17634 17931 18160 +3 17634 18160 17864 +3 17635 17756 18480 +3 17635 18323 17730 +3 17635 18480 18323 +3 17636 17731 18324 +3 17636 18324 18481 +3 17636 18481 17757 +3 17637 17929 18155 +3 17637 18155 17863 +3 17638 17864 18156 +3 17638 18156 17930 +3 17639 18488 19722 +3 17639 19722 18894 +3 17640 18895 19723 +3 17640 19723 18489 +3 17641 18514 19156 +3 17641 19156 18292 +3 17642 18293 19157 +3 17642 19157 18515 +3 17643 18701 19988 +3 17643 19988 18943 +3 17644 18944 19989 +3 17644 19989 18702 +3 17645 20736 22260 +3 17645 22260 18819 +3 17646 18820 22261 +3 17646 22261 20737 +3 17647 18183 20804 +3 17647 20804 19170 +3 17648 19171 20805 +3 17648 20805 18184 +3 17649 20121 21095 +3 17649 21095 18585 +3 17650 18586 21096 +3 17650 21096 20122 +3 17651 17880 18571 +3 17651 18571 18332 +3 17652 18333 18572 +3 17652 18572 17881 +3 17653 18482 20682 +3 17653 20682 19841 +3 17654 19842 20683 +3 17654 20683 18483 +3 17655 17831 18453 +3 17655 18453 18259 +3 17656 18260 18454 +3 17656 18454 17832 +3 17657 17968 18143 +3 17657 18143 17827 +3 17658 17828 18144 +3 17658 18144 17969 +3 17659 17676 17680 +3 17659 17677 17676 +3 17659 17680 17682 +3 17659 17681 17677 +3 17659 17682 17683 +3 17659 17683 17681 +3 17660 17754 18520 +3 17660 18520 18427 +3 17661 18428 18521 +3 17661 18521 17755 +3 17662 20091 21185 +3 17662 21185 18687 +3 17663 18688 21186 +3 17663 21186 20092 +3 17664 18906 20384 +3 17664 20384 19129 +3 17665 19130 20385 +3 17665 20385 18907 +3 17666 17786 18811 +3 17666 18811 18699 +3 17667 18700 18812 +3 17667 18812 17787 +3 17668 18973 19329 +3 17668 19329 18000 +3 17669 18001 19330 +3 17669 19330 18974 +3 17670 18848 19343 +3 17670 19343 17992 +3 17671 17993 19344 +3 17671 19344 18849 +3 17672 19666 20462 +3 17672 20462 18441 +3 17673 18442 20463 +3 17673 20463 19667 +3 17674 18063 19923 +3 17674 19923 19538 +3 17675 19539 19924 +3 17675 19924 18064 +3 17676 17677 17698 +3 17676 17698 17708 +3 17676 17703 17680 +3 17676 17708 17703 +3 17677 17681 17704 +3 17677 17704 17709 +3 17677 17709 17698 +3 17678 18718 21971 +3 17678 21971 20651 +3 17679 20652 21972 +3 17679 21972 18719 +3 17680 17703 17724 +3 17680 17705 17682 +3 17680 17724 17705 +3 17681 17683 17706 +3 17681 17706 17725 +3 17681 17725 17704 +3 17682 17705 17728 +3 17682 17707 17683 +3 17682 17728 17707 +3 17683 17707 17729 +3 17683 17729 17706 +3 17684 19402 20200 +3 17684 20200 18447 +3 17685 18448 20201 +3 17685 20201 19403 +3 17686 18581 18858 +3 17686 18858 17957 +3 17687 17958 18859 +3 17687 18859 18582 +3 17688 21293 23085 +3 17688 23085 18945 +3 17689 18946 23086 +3 17689 23086 21294 +3 17690 19301 19940 +3 17690 19940 18242 +3 17691 18243 19941 +3 17691 19941 19302 +3 17692 21343 23230 +3 17692 23230 19044 +3 17693 19045 23231 +3 17693 23231 21344 +3 17694 18030 18232 +3 17694 18232 17892 +3 17695 17893 18233 +3 17695 18233 18031 +3 17696 19702 22292 +3 17696 22292 19897 +3 17697 19898 22293 +3 17697 22293 19703 +3 17698 17709 17753 +3 17698 17752 17708 +3 17698 17753 17752 +3 17699 20000 22624 +3 17699 22624 19873 +3 17700 19874 22625 +3 17700 22625 20001 +3 17701 19645 20292 +3 17701 20292 18337 +3 17702 18338 20293 +3 17702 20293 19646 +3 17703 17708 17778 +3 17703 17778 17790 +3 17703 17790 17724 +3 17704 17725 17791 +3 17704 17779 17709 +3 17704 17791 17779 +3 17705 17724 17794 +3 17705 17794 17802 +3 17705 17802 17728 +3 17706 17729 17803 +3 17706 17795 17725 +3 17706 17803 17795 +3 17707 17728 17804 +3 17707 17804 17805 +3 17707 17805 17729 +3 17708 17752 17800 +3 17708 17800 17778 +3 17709 17779 17801 +3 17709 17801 17753 +3 17710 19782 22117 +3 17710 22117 19702 +3 17711 19703 22118 +3 17711 22118 19783 +3 17712 20563 21923 +3 17712 21923 18965 +3 17713 18966 21924 +3 17713 21924 20564 +3 17714 21363 22721 +3 17714 22721 18689 +3 17715 18690 22722 +3 17715 22722 21364 +3 17716 18112 18327 +3 17716 18327 17968 +3 17717 17969 18328 +3 17717 18328 18113 +3 17718 18141 18252 +3 17718 18252 17843 +3 17719 17844 18253 +3 17719 18253 18142 +3 17720 18615 18878 +3 17720 18878 17984 +3 17721 17985 18879 +3 17721 18879 18616 +3 17722 18854 19568 +3 17722 19568 18467 +3 17723 18468 19569 +3 17723 19569 18855 +3 17724 17790 17824 +3 17724 17824 17794 +3 17725 17795 17825 +3 17725 17825 17791 +3 17726 18377 19291 +3 17726 19291 18667 +3 17727 18668 19292 +3 17727 19292 18378 +3 17728 17802 17829 +3 17728 17829 17804 +3 17729 17805 17830 +3 17729 17830 17803 +3 17730 18323 18471 +3 17730 18471 17882 +3 17731 17883 18472 +3 17731 18472 18324 +3 17732 18163 18300 +3 17732 18300 17896 +3 17733 17897 18301 +3 17733 18301 18164 +3 17734 18288 20089 +3 17734 20089 19534 +3 17735 19535 20090 +3 17735 20090 18289 +3 17736 20549 21205 +3 17736 21205 18341 +3 17737 18342 21206 +3 17737 21206 20550 +3 17738 17739 19080 +3 17738 19080 19107 +3 17738 19107 17774 +3 17739 17775 19108 +3 17739 19108 19080 +3 17740 18193 18335 +3 17740 18335 17929 +3 17741 17930 18336 +3 17741 18336 18194 +3 17742 18286 19606 +3 17742 19606 19101 +3 17743 19102 19607 +3 17743 19607 18287 +3 17744 17945 18276 +3 17744 18276 18118 +3 17745 18119 18277 +3 17745 18277 17946 +3 17746 18065 19033 +3 17746 19033 18502 +3 17747 18503 19034 +3 17747 19034 18066 +3 17748 19029 22779 +3 17748 22779 20991 +3 17749 20992 22780 +3 17749 22780 19030 +3 17750 17751 18660 +3 17750 18660 18677 +3 17750 18677 17806 +3 17751 17807 18678 +3 17751 18678 18660 +3 17752 17753 17826 +3 17752 17826 17839 +3 17752 17839 17800 +3 17753 17801 17840 +3 17753 17840 17826 +3 17754 18004 18631 +3 17754 18631 18520 +3 17755 18521 18632 +3 17755 18632 18005 +3 17756 17921 18626 +3 17756 18626 18480 +3 17757 18481 18627 +3 17757 18627 17922 +3 17758 18754 19994 +3 17758 19994 19469 +3 17759 19470 19995 +3 17759 19995 18755 +3 17760 18461 20360 +3 17760 20360 19670 +3 17761 19671 20361 +3 17761 20361 18462 +3 17762 19327 21231 +3 17762 21231 19598 +3 17763 19599 21232 +3 17763 21232 19328 +3 17764 19164 20170 +3 17764 20170 18807 +3 17765 18808 20171 +3 17765 20171 19165 +3 17766 17963 18720 +3 17766 18720 18896 +3 17766 18896 17949 +3 17767 17950 18897 +3 17767 18721 17964 +3 17767 18897 18721 +3 17768 18248 18703 +3 17768 18703 18236 +3 17769 18237 18704 +3 17769 18704 18249 +3 17770 18137 19236 +3 17770 19236 18900 +3 17771 18901 19237 +3 17771 19237 18138 +3 17772 19023 20269 +3 17772 20269 18995 +3 17773 18996 20270 +3 17773 20270 19024 +3 17774 19107 19139 +3 17774 19139 17900 +3 17775 17901 19140 +3 17775 19140 19108 +3 17776 19891 22851 +3 17776 22851 20245 +3 17777 20246 22852 +3 17777 22852 19892 +3 17778 17800 17878 +3 17778 17876 17790 +3 17778 17878 17876 +3 17779 17791 17877 +3 17779 17877 17879 +3 17779 17879 17801 +3 17780 18238 18712 +3 17780 18712 18248 +3 17781 18249 18713 +3 17781 18713 18239 +3 17782 18995 20282 +3 17782 20282 19050 +3 17783 19051 20283 +3 17783 20283 18996 +3 17784 18695 19564 +3 17784 19564 18651 +3 17785 18652 19565 +3 17785 19565 18696 +3 17786 18187 19208 +3 17786 19208 18811 +3 17787 18812 19209 +3 17787 19209 18188 +3 17788 18393 18829 +3 17788 18829 18034 +3 17789 18035 18830 +3 17789 18830 18394 +3 17790 17876 17902 +3 17790 17902 17824 +3 17791 17825 17903 +3 17791 17903 17877 +3 17792 18107 18605 +3 17792 18605 18304 +3 17793 18305 18606 +3 17793 18606 18107 +3 17794 17824 17917 +3 17794 17894 17802 +3 17794 17917 17894 +3 17795 17803 17895 +3 17795 17895 17918 +3 17795 17918 17825 +3 17796 18463 20165 +3 17796 20165 19500 +3 17797 19501 20166 +3 17797 20166 18464 +3 17798 18135 19232 +3 17798 19232 18904 +3 17799 18905 19233 +3 17799 19233 18136 +3 17800 17839 17909 +3 17800 17909 17878 +3 17801 17879 17910 +3 17801 17910 17840 +3 17802 17894 17932 +3 17802 17932 17829 +3 17803 17830 17933 +3 17803 17933 17895 +3 17804 17829 17936 +3 17804 17904 17805 +3 17804 17936 17904 +3 17805 17904 17937 +3 17805 17937 17830 +3 17806 18677 18758 +3 17806 18758 17884 +3 17807 17885 18759 +3 17807 18759 18678 +3 17808 19859 22743 +3 17808 22743 20202 +3 17809 20203 22744 +3 17809 22744 19860 +3 17810 19897 22442 +3 17810 22442 19952 +3 17811 19953 22443 +3 17811 22443 19898 +3 17812 18306 18742 +3 17812 18742 18238 +3 17813 18239 18743 +3 17813 18743 18307 +3 17814 18546 20806 +3 17814 20806 19934 +3 17815 19935 20807 +3 17815 20807 18547 +3 17816 18046 19210 +3 17816 19210 18971 +3 17817 18972 19211 +3 17817 19211 18047 +3 17818 18153 18439 +3 17818 18439 18169 +3 17819 18170 18440 +3 17819 18440 18154 +3 17820 18236 18748 +3 17820 18748 18329 +3 17821 18330 18749 +3 17821 18749 18237 +3 17822 20113 22805 +3 17822 22805 20000 +3 17823 20001 22806 +3 17823 22806 20114 +3 17824 17902 17966 +3 17824 17966 17917 +3 17825 17918 17967 +3 17825 17967 17903 +3 17826 17840 17942 +3 17826 17941 17839 +3 17826 17942 17941 +3 17827 18143 18353 +3 17827 18353 18067 +3 17828 18068 18354 +3 17828 18354 18144 +3 17829 17932 17986 +3 17829 17986 17936 +3 17830 17937 17987 +3 17830 17987 17933 +3 17831 18083 18669 +3 17831 18669 18453 +3 17832 18454 18670 +3 17832 18670 18084 +3 17833 18120 18645 +3 17833 18645 18405 +3 17834 18406 18646 +3 17834 18646 18121 +3 17835 17888 18316 +3 17835 18294 17837 +3 17835 18316 18294 +3 17836 17838 18295 +3 17836 18295 18317 +3 17836 18317 17889 +3 17837 18294 18423 +3 17837 18423 17970 +3 17838 17971 18424 +3 17838 18424 18295 +3 17839 17941 17976 +3 17839 17976 17909 +3 17840 17910 17977 +3 17840 17977 17942 +3 17841 20492 21341 +3 17841 21341 19386 +3 17842 19387 21342 +3 17842 21342 20493 +3 17843 18252 18421 +3 17843 18421 18030 +3 17844 18031 18422 +3 17844 18422 18253 +3 17845 18658 19054 +3 17845 19054 18274 +3 17846 18275 19055 +3 17846 19055 18659 +3 17847 18228 19643 +3 17847 19643 19315 +3 17848 19316 19644 +3 17848 19644 18229 +3 17849 19299 23722 +3 17849 23722 21671 +3 17850 21672 23723 +3 17850 23723 19300 +3 17851 19416 21199 +3 17851 21199 19526 +3 17852 19527 21200 +3 17852 21200 19417 +3 17853 18795 21505 +3 17853 21505 20436 +3 17854 20437 21506 +3 17854 21506 18796 +3 17855 18589 19382 +3 17855 19382 18101 +3 17856 18102 19383 +3 17856 19383 18590 +3 17857 19772 21378 +3 17857 21378 19363 +3 17858 19364 21379 +3 17858 21379 19773 +3 17859 18780 19392 +3 17859 19392 18514 +3 17860 18515 19393 +3 17860 19393 18781 +3 17861 19982 20762 +3 17861 20762 18661 +3 17862 18662 20763 +3 17862 20763 19983 +3 17863 18155 18419 +3 17863 18419 18159 +3 17864 18160 18420 +3 17864 18420 18156 +3 17865 19716 20458 +3 17865 20458 18609 +3 17866 18610 20459 +3 17866 20459 19717 +3 17867 20080 21122 +3 17867 21122 20079 +3 17868 19414 19986 +3 17868 19986 18445 +3 17869 18446 19987 +3 17869 19987 19415 +3 17870 20336 22835 +3 17870 22835 19859 +3 17871 19860 22836 +3 17871 22836 20337 +3 17872 19261 20482 +3 17872 20482 19097 +3 17873 19100 20483 +3 17873 20483 19262 +3 17874 18601 18947 +3 17874 18947 18244 +3 17875 18245 18948 +3 17875 18948 18602 +3 17876 17878 17996 +3 17876 17996 18008 +3 17876 18008 17902 +3 17877 17903 18009 +3 17877 17997 17879 +3 17877 18009 17997 +3 17878 17909 18022 +3 17878 18022 17996 +3 17879 17997 18023 +3 17879 18023 17910 +3 17880 18185 18835 +3 17880 18835 18571 +3 17881 18572 18836 +3 17881 18836 18186 +3 17882 18471 18635 +3 17882 18635 18091 +3 17883 18092 18636 +3 17883 18636 18472 +3 17884 18758 18866 +3 17884 18866 18026 +3 17885 18027 18867 +3 17885 18867 18759 +3 17886 18339 19265 +3 17886 19265 18825 +3 17887 18826 19266 +3 17887 19266 18340 +3 17888 17978 18385 +3 17888 18385 18316 +3 17889 18317 18386 +3 17889 18386 17979 +3 17890 18778 21011 +3 17890 21011 20127 +3 17891 20128 21012 +3 17891 21012 18779 +3 17892 18232 18475 +3 17892 18475 18153 +3 17893 18154 18476 +3 17893 18476 18233 +3 17894 17917 18016 +3 17894 18016 18024 +3 17894 18024 17932 +3 17895 17933 18025 +3 17895 18017 17918 +3 17895 18025 18017 +3 17896 18300 18516 +3 17896 18516 18112 +3 17897 18113 18517 +3 17897 18517 18301 +3 17898 19097 20533 +3 17898 20533 19341 +3 17899 19342 20534 +3 17899 20534 19100 +3 17900 19139 19590 +3 17900 19590 18359 +3 17901 18360 19591 +3 17901 19591 19140 +3 17902 18008 18059 +3 17902 18059 17966 +3 17903 17967 18060 +3 17903 18060 18009 +3 17904 17936 18051 +3 17904 18051 18052 +3 17904 18052 17937 +3 17905 18786 20688 +3 17905 20688 19814 +3 17906 19815 20689 +3 17906 20689 18786 +3 17907 18797 22407 +3 17907 22407 21201 +3 17908 21202 22408 +3 17908 22408 18798 +3 17909 17976 18085 +3 17909 18085 18022 +3 17910 18023 18086 +3 17910 18086 17977 +3 17911 19546 20002 +3 17911 20002 18391 +3 17912 18392 20003 +3 17912 20003 19547 +3 17913 19027 19548 +3 17913 19548 18443 +3 17914 18444 19549 +3 17914 19549 19028 +3 17915 18304 18882 +3 17915 18882 18498 +3 17916 18499 18883 +3 17916 18883 18305 +3 17917 17966 18057 +3 17917 18057 18016 +3 17918 18017 18058 +3 17918 18058 17967 +3 17919 18522 20639 +3 17919 20639 20032 +3 17920 20033 20640 +3 17920 20640 18523 +3 17921 18126 18813 +3 17921 18813 18626 +3 17922 18627 18814 +3 17922 18814 18127 +3 17923 18617 19206 +3 17923 19206 18526 +3 17924 18527 19207 +3 17924 19207 18618 +3 17925 19942 20494 +3 17925 20494 18484 +3 17926 18485 20495 +3 17926 20495 19943 +3 17927 18528 19182 +3 17927 19182 18591 +3 17928 18592 19183 +3 17928 19183 18529 +3 17929 18335 18556 +3 17929 18556 18155 +3 17930 18156 18557 +3 17930 18557 18336 +3 17931 18159 18477 +3 17931 18477 18160 +3 17932 18024 18075 +3 17932 18075 17986 +3 17933 17987 18076 +3 17933 18076 18025 +3 17934 18259 18730 +3 17934 18730 18425 +3 17935 18426 18731 +3 17935 18731 18260 +3 17936 17986 18103 +3 17936 18103 18051 +3 17937 18052 18104 +3 17937 18104 17987 +3 17938 18526 19142 +3 17938 19142 18528 +3 17939 18529 19143 +3 17939 19143 18527 +3 17940 18977 19489 +3 17940 19489 18978 +3 17941 17942 18044 +3 17941 18044 18071 +3 17941 18071 17976 +3 17942 17977 18072 +3 17942 18072 18044 +3 17943 19490 20172 +3 17943 20172 18417 +3 17944 18418 20173 +3 17944 20173 19491 +3 17945 18169 18486 +3 17945 18486 18276 +3 17946 18277 18487 +3 17946 18487 18170 +3 17947 18653 20038 +3 17947 20038 19349 +3 17948 19350 20039 +3 17948 20039 18654 +3 17949 18896 19098 +3 17949 19098 18149 +3 17950 18150 19099 +3 17950 19099 18897 +3 17951 18943 19964 +3 17951 19964 18949 +3 17952 18950 19965 +3 17952 19965 18944 +3 17953 19506 19960 +3 17953 19960 18413 +3 17954 18414 19961 +3 17954 19961 19507 +3 17955 20704 22234 +3 17955 22234 19168 +3 17956 19169 22235 +3 17956 22235 20705 +3 17957 18858 19154 +3 17957 19154 18272 +3 17958 18273 19155 +3 17958 19155 18859 +3 17959 18752 22020 +3 17959 22020 20933 +3 17960 20934 22021 +3 17960 22021 18753 +3 17961 18573 20768 +3 17961 20768 20153 +3 17962 20154 20769 +3 17962 20769 18574 +3 17963 18217 18935 +3 17963 18935 18720 +3 17964 18721 18936 +3 17964 18936 18218 +3 17965 17983 21198 +3 17965 21197 17982 +3 17965 21198 21197 +3 17966 18059 18147 +3 17966 18147 18057 +3 17967 18058 18148 +3 17967 18148 18060 +3 17968 18327 18492 +3 17968 18492 18143 +3 17969 18144 18493 +3 17969 18493 18328 +3 17970 18423 18548 +3 17970 18548 18055 +3 17971 18056 18549 +3 17971 18549 18424 +3 17972 20700 21735 +3 17972 21735 18833 +3 17973 18834 21736 +3 17973 21736 20701 +3 17974 18633 19017 +3 17974 19017 18393 +3 17975 18394 19018 +3 17975 19018 18634 +3 17976 18071 18171 +3 17976 18171 18085 +3 17977 18086 18172 +3 17977 18172 18072 +3 17978 18118 18500 +3 17978 18500 18385 +3 17979 18386 18501 +3 17979 18501 18119 +3 17980 18502 19536 +3 17980 19536 19009 +3 17981 19010 19537 +3 17981 19537 18503 +3 17982 21197 22879 +3 17982 22879 19158 +3 17983 19159 22880 +3 17983 22880 21198 +3 17984 18878 19152 +3 17984 19152 18290 +3 17985 18291 19153 +3 17985 19153 18879 +3 17986 18075 18165 +3 17986 18165 18103 +3 17987 18104 18166 +3 17987 18166 18076 +3 17988 20370 21424 +3 17988 21424 18862 +3 17989 18863 21425 +3 17989 21425 20371 +3 17990 18949 20006 +3 17990 20006 18312 +3 17991 18313 20007 +3 17991 20007 18950 +3 17992 19343 19698 +3 17992 19698 18397 +3 17993 18398 19699 +3 17993 19699 19344 +3 17994 19661 20340 +3 17994 20340 18740 +3 17995 18741 20341 +3 17995 20341 19662 +3 17996 18022 18181 +3 17996 18173 18008 +3 17996 18181 18173 +3 17997 18009 18174 +3 17997 18174 18182 +3 17997 18182 18023 +3 17998 18579 19970 +3 17998 19970 19492 +3 17999 19493 19971 +3 17999 19971 18580 +3 18000 19329 19676 +3 18000 19676 18387 +3 18001 18388 19677 +3 18001 19677 19330 +3 18002 19526 21299 +3 18002 21299 19706 +3 18003 19707 21300 +3 18003 21300 19527 +3 18004 18211 18791 +3 18004 18791 18631 +3 18005 18632 18792 +3 18005 18792 18212 +3 18006 18431 19366 +3 18006 19366 18987 +3 18007 18988 19367 +3 18007 19367 18432 +3 18008 18173 18203 +3 18008 18203 18059 +3 18009 18060 18204 +3 18009 18204 18174 +3 18010 18860 19790 +3 18010 19790 18957 +3 18011 18958 19791 +3 18011 19791 18861 +3 18012 19246 23224 +3 18012 23224 21525 +3 18013 21526 23225 +3 18013 23225 19247 +3 18014 19135 22447 +3 18014 22447 20941 +3 18015 20942 22448 +3 18015 22448 19136 +3 18016 18057 18189 +3 18016 18167 18024 +3 18016 18189 18167 +3 18017 18025 18168 +3 18017 18168 18190 +3 18017 18190 18058 +3 18018 20853 22232 +3 18018 22232 19072 +3 18019 19073 22233 +3 18019 22233 20854 +3 18020 19331 23358 +3 18020 23358 21579 +3 18021 21580 23359 +3 18021 23359 19332 +3 18022 18085 18223 +3 18022 18223 18181 +3 18023 18182 18224 +3 18023 18224 18086 +3 18024 18167 18197 +3 18024 18197 18075 +3 18025 18076 18198 +3 18025 18198 18168 +3 18026 18866 19186 +3 18026 19186 18367 +3 18027 18368 19187 +3 18027 19187 18867 +3 18028 20328 21018 +3 18028 21018 18710 +3 18029 18711 21019 +3 18029 21019 20329 +3 18030 18421 18603 +3 18030 18603 18232 +3 18031 18233 18604 +3 18031 18604 18422 +3 18032 19345 20555 +3 18032 20555 19238 +3 18033 19239 20556 +3 18033 20556 19346 +3 18034 18829 19115 +3 18034 19115 18302 +3 18035 18303 19116 +3 18035 19116 18830 +3 18036 19005 19818 +3 18036 19818 18860 +3 18037 18861 19819 +3 18037 19819 19006 +3 18038 18591 19295 +3 18038 19295 18736 +3 18039 18737 19296 +3 18039 19296 18592 +3 18040 20111 22801 +3 18040 22801 20253 +3 18041 20254 22802 +3 18041 22802 20112 +3 18042 19528 21020 +3 18042 21020 19540 +3 18043 19541 21021 +3 18043 21021 19529 +3 18044 18072 18208 +3 18044 18207 18071 +3 18044 18208 18207 +3 18045 19686 21241 +3 18045 21241 19747 +3 18046 18296 19445 +3 18046 19445 19210 +3 18047 19211 19446 +3 18047 19446 18297 +3 18048 19748 21242 +3 18048 21242 19687 +3 18049 20161 22476 +3 18049 22476 19980 +3 18050 19981 22477 +3 18050 22477 20162 +3 18051 18103 18234 +3 18051 18227 18052 +3 18051 18234 18227 +3 18052 18227 18235 +3 18052 18235 18104 +3 18053 18054 18619 +3 18053 18619 18637 +3 18053 18637 18110 +3 18054 18111 18638 +3 18054 18638 18619 +3 18055 18548 18671 +3 18055 18671 18193 +3 18056 18194 18672 +3 18056 18672 18549 +3 18057 18147 18250 +3 18057 18250 18189 +3 18058 18190 18251 +3 18058 18251 18148 +3 18059 18203 18256 +3 18059 18256 18147 +3 18060 18148 18257 +3 18060 18257 18204 +3 18061 18981 22863 +3 18061 22863 21591 +3 18062 21592 22864 +3 18062 22864 18982 +3 18063 18510 20332 +3 18063 20332 19923 +3 18064 19924 20333 +3 18064 20333 18511 +3 18065 18667 19612 +3 18065 19612 19033 +3 18066 19034 19613 +3 18066 19613 18668 +3 18067 18353 18607 +3 18067 18607 18141 +3 18068 18142 18608 +3 18068 18608 18354 +3 18069 18639 20022 +3 18069 20022 19443 +3 18070 19444 20023 +3 18070 20023 18640 +3 18071 18207 18278 +3 18071 18278 18171 +3 18072 18172 18279 +3 18072 18279 18208 +3 18073 20522 21465 +3 18073 21465 18902 +3 18074 18903 21466 +3 18074 21466 20523 +3 18075 18197 18246 +3 18075 18246 18165 +3 18076 18166 18247 +3 18076 18247 18198 +3 18077 20863 22186 +3 18077 22186 19058 +3 18078 19059 22187 +3 18078 22187 20864 +3 18079 19980 22306 +3 18079 22306 20034 +3 18080 20035 22307 +3 18080 22307 19981 +3 18081 18894 19867 +3 18081 19867 19060 +3 18082 19061 19868 +3 18082 19868 18895 +3 18083 18329 18914 +3 18083 18914 18669 +3 18084 18670 18915 +3 18084 18915 18330 +3 18085 18171 18284 +3 18085 18284 18223 +3 18086 18224 18285 +3 18086 18285 18172 +3 18087 19598 21189 +3 18087 21189 19528 +3 18088 19529 21190 +3 18088 21190 19599 +3 18089 19146 20141 +3 18089 20141 19180 +3 18090 19181 20144 +3 18090 20144 19147 +3 18091 18635 18856 +3 18091 18856 18306 +3 18092 18307 18857 +3 18092 18857 18636 +3 18093 19518 20698 +3 18093 20698 19261 +3 18094 19262 20699 +3 18094 20699 19519 +3 18095 18815 19353 +3 18095 19353 18617 +3 18096 18618 19354 +3 18096 19354 18816 +3 18097 19066 21471 +3 18097 21471 20352 +3 18098 20353 21472 +3 18098 21472 19067 +3 18099 18967 20929 +3 18099 20929 20123 +3 18100 20124 20930 +3 18100 20930 18968 +3 18101 19382 19631 +3 18101 19631 18363 +3 18102 18364 19632 +3 18102 19632 19383 +3 18103 18165 18282 +3 18103 18282 18234 +3 18104 18235 18283 +3 18104 18283 18166 +3 18105 20464 21246 +3 18105 21246 18809 +3 18106 18810 21247 +3 18106 21247 20465 +3 18107 18606 18928 +3 18107 18928 18605 +3 18108 20420 22987 +3 18108 22987 20113 +3 18109 20114 22988 +3 18109 22988 20421 +3 18110 18637 18679 +3 18110 18679 18163 +3 18111 18164 18680 +3 18111 18680 18638 +3 18112 18516 18724 +3 18112 18724 18327 +3 18113 18328 18725 +3 18113 18725 18517 +3 18114 18697 20209 +3 18114 20209 19604 +3 18115 19605 20210 +3 18115 20210 18698 +3 18116 19540 21079 +3 18116 21079 18611 +3 18117 18612 21080 +3 18117 21080 19541 +3 18118 18276 18641 +3 18118 18641 18500 +3 18119 18501 18642 +3 18119 18642 18277 +3 18120 18425 18931 +3 18120 18931 18645 +3 18121 18646 18932 +3 18121 18932 18426 +3 18122 21221 22926 +3 18122 22926 19337 +3 18123 19338 22927 +3 18123 22927 21222 +3 18124 19293 19726 +3 18124 19726 18559 +3 18125 18560 19727 +3 18125 19727 19294 +3 18126 18332 19021 +3 18126 19021 18813 +3 18127 18814 19022 +3 18127 19022 18333 +3 18128 18957 19950 +3 18128 19950 19117 +3 18129 19118 19951 +3 18129 19951 18958 +3 18130 18969 20754 +3 18130 20754 19905 +3 18131 19906 20755 +3 18131 20755 18970 +3 18132 19498 20178 +3 18132 20178 19499 +3 18133 18920 19616 +3 18133 19616 18929 +3 18134 18930 19617 +3 18134 19617 18921 +3 18135 18544 19578 +3 18135 19578 19232 +3 18136 19233 19579 +3 18136 19579 18545 +3 18137 18565 19633 +3 18137 19633 19236 +3 18138 19237 19634 +3 18138 19634 18566 +3 18139 18140 20208 +3 18139 20208 20233 +3 18139 20233 18209 +3 18140 18210 20234 +3 18140 20234 20208 +3 18141 18607 18691 +3 18141 18691 18252 +3 18142 18253 18692 +3 18142 18692 18608 +3 18143 18492 18681 +3 18143 18681 18353 +3 18144 18354 18682 +3 18144 18682 18493 +3 18145 19384 19976 +3 18145 19976 18732 +3 18146 18733 19977 +3 18146 19977 19385 +3 18147 18256 18365 +3 18147 18365 18250 +3 18148 18251 18366 +3 18148 18366 18257 +3 18149 19098 19313 +3 18149 19313 18375 +3 18150 18376 19314 +3 18150 19314 19099 +3 18151 19013 21422 +3 18151 21422 20432 +3 18152 20433 21423 +3 18152 21423 19014 +3 18153 18475 18728 +3 18153 18728 18439 +3 18154 18440 18729 +3 18154 18729 18476 +3 18155 18556 18803 +3 18155 18803 18419 +3 18156 18420 18804 +3 18156 18804 18557 +3 18157 19323 22159 +3 18157 22159 20815 +3 18158 20816 22160 +3 18158 22160 19324 +3 18159 18419 18716 +3 18159 18716 18477 +3 18160 18477 18717 +3 18160 18717 18420 +3 18161 20253 22952 +3 18161 22952 20322 +3 18162 20323 22953 +3 18162 22953 20254 +3 18163 18679 18762 +3 18163 18762 18300 +3 18164 18301 18763 +3 18164 18763 18680 +3 18165 18246 18355 +3 18165 18355 18282 +3 18166 18283 18356 +3 18166 18356 18247 +3 18167 18189 18318 +3 18167 18318 18321 +3 18167 18321 18197 +3 18168 18198 18322 +3 18168 18319 18190 +3 18168 18322 18319 +3 18169 18439 18734 +3 18169 18734 18486 +3 18170 18487 18735 +3 18170 18735 18440 +3 18171 18278 18395 +3 18171 18395 18284 +3 18172 18285 18396 +3 18172 18396 18279 +3 18173 18181 18343 +3 18173 18343 18351 +3 18173 18351 18203 +3 18174 18204 18352 +3 18174 18344 18182 +3 18174 18352 18344 +3 18175 20202 22610 +3 18175 22610 20161 +3 18176 20162 22611 +3 18176 22611 20203 +3 18177 18989 19712 +3 18177 19712 18920 +3 18178 18921 19713 +3 18178 19713 18990 +3 18179 19351 19694 +3 18179 19694 18854 +3 18180 18855 19695 +3 18180 19695 19352 +3 18181 18223 18383 +3 18181 18383 18343 +3 18182 18344 18384 +3 18182 18384 18224 +3 18183 18744 21495 +3 18183 21495 20804 +3 18184 20805 21496 +3 18184 21496 18745 +3 18185 18498 19131 +3 18185 19131 18835 +3 18186 18836 19132 +3 18186 19132 18499 +3 18187 18595 19608 +3 18187 19608 19208 +3 18188 19209 19609 +3 18188 19609 18596 +3 18189 18250 18399 +3 18189 18399 18318 +3 18190 18319 18400 +3 18190 18400 18251 +3 18191 21865 23789 +3 18191 23789 19558 +3 18192 19559 23790 +3 18192 23790 21866 +3 18193 18671 18799 +3 18193 18799 18335 +3 18194 18336 18800 +3 18194 18800 18672 +3 18195 19216 20028 +3 18195 20028 19005 +3 18196 19006 20029 +3 18196 20029 19217 +3 18197 18321 18381 +3 18197 18381 18246 +3 18198 18247 18382 +3 18198 18382 18322 +3 18199 20438 22902 +3 18199 22902 20129 +3 18200 20130 22903 +3 18200 22903 20441 +3 18201 18929 19759 +3 18201 19759 19040 +3 18202 19041 19762 +3 18202 19762 18930 +3 18203 18351 18407 +3 18203 18407 18256 +3 18204 18257 18408 +3 18204 18408 18352 +3 18205 19626 20304 +3 18205 20304 18870 +3 18206 18871 20305 +3 18206 20305 19627 +3 18207 18208 18331 +3 18207 18331 18435 +3 18207 18435 18278 +3 18208 18279 18436 +3 18208 18436 18331 +3 18209 20233 21003 +3 18209 21003 18955 +3 18210 18956 21004 +3 18210 21004 20234 +3 18211 18405 18983 +3 18211 18983 18791 +3 18212 18792 18984 +3 18212 18984 18406 +3 18213 19214 23460 +3 18213 23460 22072 +3 18214 22073 23461 +3 18214 23461 19215 +3 18215 19572 20720 +3 18215 20720 19345 +3 18216 19346 20721 +3 18216 20721 19573 +3 18217 18736 19455 +3 18217 19455 18935 +3 18218 18936 19456 +3 18218 19456 18737 +3 18219 19341 20839 +3 18219 20839 19668 +3 18220 19669 20840 +3 18220 20840 19342 +3 18221 19321 20284 +3 18221 20284 19146 +3 18222 19147 20285 +3 18222 20285 19322 +3 18223 18284 18455 +3 18223 18455 18383 +3 18224 18384 18456 +3 18224 18456 18285 +3 18225 19317 20267 +3 18225 20267 19164 +3 18226 19165 20268 +3 18226 20268 19318 +3 18227 18234 18429 +3 18227 18429 18430 +3 18227 18430 18235 +3 18228 18622 20071 +3 18228 20071 19643 +3 18229 19644 20072 +3 18229 20072 18623 +3 18230 18805 20030 +3 18230 20030 19465 +3 18231 19466 20031 +3 18231 20031 18805 +3 18232 18603 18817 +3 18232 18817 18475 +3 18233 18476 18818 +3 18233 18818 18604 +3 18234 18282 18459 +3 18234 18459 18429 +3 18235 18430 18460 +3 18235 18460 18283 +3 18236 18703 19188 +3 18236 19188 18748 +3 18237 18749 19189 +3 18237 19189 18704 +3 18238 18742 19194 +3 18238 19194 18712 +3 18239 18713 19195 +3 18239 19195 18743 +3 18240 20129 22999 +3 18240 22999 20589 +3 18241 20590 23000 +3 18241 23000 20130 +3 18242 19940 20541 +3 18242 20541 18864 +3 18243 18865 20542 +3 18243 20542 19941 +3 18244 18947 19339 +3 18244 19339 18655 +3 18245 18655 19340 +3 18245 19340 18948 +3 18246 18381 18473 +3 18246 18473 18355 +3 18247 18356 18474 +3 18247 18474 18382 +3 18248 18712 19200 +3 18248 19200 18703 +3 18249 18704 19201 +3 18249 19201 18713 +3 18250 18365 18494 +3 18250 18494 18399 +3 18251 18400 18495 +3 18251 18495 18366 +3 18252 18691 18840 +3 18252 18840 18421 +3 18253 18422 18841 +3 18253 18841 18692 +3 18254 18951 20833 +3 18254 20833 20125 +3 18255 20126 20834 +3 18255 20834 18952 +3 18256 18407 18496 +3 18256 18496 18365 +3 18257 18366 18497 +3 18257 18497 18408 +3 18258 19180 20334 +3 18258 20334 19408 +3 18259 18453 19086 +3 18259 19086 18730 +3 18260 18731 19087 +3 18260 19087 18454 +3 18261 19409 20335 +3 18261 20335 19181 +3 18262 19966 21573 +3 18262 21573 19686 +3 18263 19687 21574 +3 18263 21574 19967 +3 18264 19663 24372 +3 18264 24372 22370 +3 18265 22371 24373 +3 18265 24373 19664 +3 18266 21435 22592 +3 18266 22592 19119 +3 18267 19120 22593 +3 18267 22593 21436 +3 18268 18963 20571 +3 18268 20571 19863 +3 18269 19864 20572 +3 18269 20572 18964 +3 18270 19665 23641 +3 18270 23641 21646 +3 18271 21647 23642 +3 18271 23642 19665 +3 18272 19154 19530 +3 18272 19530 18633 +3 18273 18634 19531 +3 18273 19531 19155 +3 18274 19054 19380 +3 18274 19380 18601 +3 18275 18602 19381 +3 18275 19381 19055 +3 18276 18486 18842 +3 18276 18842 18641 +3 18277 18642 18843 +3 18277 18843 18487 +3 18278 18435 18534 +3 18278 18534 18395 +3 18279 18396 18535 +3 18279 18535 18436 +3 18280 19706 21628 +3 18280 21628 20744 +3 18281 20745 21629 +3 18281 21629 19707 +3 18282 18355 18518 +3 18282 18518 18459 +3 18283 18460 18519 +3 18283 18519 18356 +3 18284 18395 18540 +3 18284 18540 18455 +3 18285 18456 18541 +3 18285 18541 18396 +3 18286 18872 20176 +3 18286 20176 19606 +3 18287 19607 20177 +3 18287 20177 18873 +3 18288 18892 20667 +3 18288 20667 20089 +3 18289 20090 20668 +3 18289 20668 18893 +3 18290 19152 19496 +3 18290 19496 18658 +3 18291 18659 19497 +3 18291 19497 19153 +3 18292 19156 19855 +3 18292 19855 18989 +3 18293 18990 19856 +3 18293 19856 19157 +3 18294 18316 18784 +3 18294 18784 18890 +3 18294 18890 18423 +3 18295 18424 18891 +3 18295 18785 18317 +3 18295 18891 18785 +3 18296 18593 19728 +3 18296 19728 19445 +3 18297 19446 19729 +3 18297 19729 18594 +3 18298 19117 20159 +3 18298 20159 19347 +3 18299 19348 20160 +3 18299 20160 19118 +3 18300 18762 18933 +3 18300 18933 18516 +3 18301 18517 18934 +3 18301 18934 18763 +3 18302 19115 19594 +3 18302 19594 18815 +3 18303 18816 19595 +3 18303 19595 19116 +3 18304 18605 19148 +3 18304 19148 18882 +3 18305 18883 19149 +3 18305 19149 18606 +3 18306 18856 19289 +3 18306 19289 18742 +3 18307 18743 19290 +3 18307 19290 18857 +3 18308 19865 21519 +3 18308 21519 19772 +3 18309 19773 21520 +3 18309 21520 19866 +3 18310 20726 21797 +3 18310 21797 19192 +3 18311 19193 21798 +3 18311 21798 20727 +3 18312 20006 20350 +3 18312 20350 18683 +3 18313 18684 20351 +3 18313 20351 20007 +3 18314 19467 22423 +3 18314 22423 20899 +3 18315 20900 22424 +3 18315 22424 19468 +3 18316 18385 18823 +3 18316 18823 18784 +3 18317 18785 18824 +3 18317 18824 18386 +3 18318 18399 18554 +3 18318 18512 18321 +3 18318 18554 18512 +3 18319 18322 18513 +3 18319 18513 18555 +3 18319 18555 18400 +3 18320 20374 21428 +3 18320 21428 20375 +3 18321 18512 18538 +3 18321 18538 18381 +3 18322 18382 18539 +3 18322 18539 18513 +3 18323 18480 19212 +3 18323 19068 18471 +3 18323 19212 19068 +3 18324 18472 19069 +3 18324 19069 19213 +3 18324 19213 18481 +3 18325 18345 19816 +3 18325 19816 19817 +3 18325 19817 18346 +3 18326 18347 21445 +3 18326 21445 21446 +3 18326 21446 18348 +3 18327 18724 18884 +3 18327 18884 18492 +3 18328 18493 18885 +3 18328 18885 18725 +3 18329 18748 19325 +3 18329 19325 18914 +3 18330 18915 19326 +3 18330 19326 18749 +3 18331 18436 18558 +3 18331 18558 18435 +3 18332 18571 19257 +3 18332 19257 19021 +3 18333 19022 19258 +3 18333 19258 18572 +3 18334 18357 19052 +3 18334 19052 19053 +3 18334 19053 18358 +3 18335 18799 18991 +3 18335 18991 18556 +3 18336 18557 18992 +3 18336 18992 18800 +3 18337 20292 21142 +3 18337 21142 19011 +3 18338 19012 21143 +3 18338 21143 20293 +3 18339 18837 19730 +3 18339 19730 19265 +3 18340 19266 19731 +3 18340 19731 18837 +3 18341 21205 22252 +3 18341 22252 19113 +3 18342 19114 22253 +3 18342 22253 21206 +3 18343 18383 18575 +3 18343 18552 18351 +3 18343 18575 18552 +3 18344 18352 18553 +3 18344 18553 18576 +3 18344 18576 18384 +3 18345 18411 19857 +3 18345 19857 19816 +3 18346 19817 19858 +3 18346 19858 18412 +3 18347 19461 23038 +3 18347 23038 21445 +3 18348 21446 23039 +3 18348 23039 19462 +3 18349 19747 21707 +3 18349 21707 20137 +3 18350 20138 21708 +3 18350 21708 19748 +3 18351 18552 18587 +3 18351 18587 18407 +3 18352 18408 18588 +3 18352 18588 18553 +3 18353 18681 18918 +3 18353 18918 18607 +3 18354 18608 18919 +3 18354 18919 18682 +3 18355 18473 18583 +3 18355 18583 18518 +3 18356 18519 18584 +3 18356 18584 18474 +3 18357 18427 19111 +3 18357 19111 19052 +3 18358 19053 19112 +3 18358 19112 18428 +3 18359 19590 20069 +3 18359 20069 18848 +3 18360 18849 20070 +3 18360 20070 19591 +3 18361 19481 20633 +3 18361 20633 19518 +3 18362 19519 20634 +3 18362 20634 19482 +3 18363 19631 19936 +3 18363 19936 18656 +3 18364 18657 19937 +3 18364 19937 19632 +3 18365 18496 18620 +3 18365 18620 18494 +3 18366 18495 18621 +3 18366 18621 18497 +3 18367 19186 19554 +3 18367 19554 18581 +3 18368 18582 19555 +3 18368 19555 19187 +3 18369 19556 20472 +3 18369 20472 19321 +3 18370 19322 20473 +3 18370 20473 19557 +3 18371 19538 20643 +3 18371 20643 19481 +3 18372 19482 20644 +3 18372 20644 19539 +3 18373 21743 23360 +3 18373 23360 19522 +3 18374 19523 23361 +3 18374 23361 21744 +3 18375 19313 19550 +3 18375 19550 18615 +3 18376 18616 19551 +3 18376 19551 19314 +3 18377 19040 19944 +3 18377 19944 19291 +3 18378 19292 19945 +3 18378 19945 19041 +3 18379 21795 23464 +3 18379 23464 19596 +3 18380 19597 23465 +3 18380 23465 21796 +3 18381 18538 18599 +3 18381 18599 18473 +3 18382 18474 18600 +3 18382 18600 18539 +3 18383 18455 18628 +3 18383 18628 18575 +3 18384 18576 18629 +3 18384 18629 18456 +3 18385 18500 18924 +3 18385 18924 18823 +3 18386 18824 18925 +3 18386 18925 18501 +3 18387 19676 20103 +3 18387 20103 18789 +3 18388 18790 20104 +3 18388 20104 19677 +3 18389 20454 22958 +3 18389 22958 20336 +3 18390 20337 22959 +3 18390 22959 20455 +3 18391 20002 20514 +3 18391 20514 18898 +3 18392 18899 20515 +3 18392 20515 20003 +3 18393 19017 19441 +3 18393 19441 18829 +3 18394 18830 19442 +3 18394 19442 19018 +3 18395 18534 18663 +3 18395 18663 18540 +3 18396 18541 18664 +3 18396 18664 18535 +3 18397 19698 20223 +3 18397 20223 18880 +3 18398 18881 20224 +3 18398 20224 19699 +3 18399 18494 18647 +3 18399 18647 18554 +3 18400 18555 18648 +3 18400 18648 18495 +3 18401 19202 21987 +3 18401 21987 20939 +3 18402 20940 21988 +3 18402 21988 19203 +3 18403 19487 23959 +3 18403 23959 22560 +3 18404 22561 23960 +3 18404 23960 19488 +3 18405 18645 19228 +3 18405 19228 18983 +3 18406 18984 19229 +3 18406 19229 18646 +3 18407 18587 18665 +3 18407 18665 18496 +3 18408 18497 18666 +3 18408 18666 18588 +3 18409 21812 23016 +3 18409 23016 19279 +3 18410 19280 23017 +3 18410 23017 21813 +3 18411 18926 20414 +3 18411 20414 19857 +3 18412 19858 20415 +3 18412 20415 18927 +3 18413 19960 20424 +3 18413 20424 19317 +3 18414 19318 20425 +3 18414 20425 19961 +3 18415 21209 22651 +3 18415 22651 19447 +3 18416 19448 22652 +3 18416 22652 21210 +3 18417 20172 20774 +3 18417 20774 19019 +3 18418 19020 20775 +3 18418 20775 20173 +3 18419 18803 19105 +3 18419 19105 18716 +3 18420 18717 19106 +3 18420 19106 18804 +3 18421 18840 19001 +3 18421 19001 18603 +3 18422 18604 19002 +3 18422 19002 18841 +3 18423 18890 19007 +3 18423 19007 18548 +3 18424 18549 19008 +3 18424 19008 18891 +3 18425 18730 19248 +3 18425 19248 18931 +3 18426 18932 19249 +3 18426 19249 18731 +3 18427 18520 19166 +3 18427 19166 19111 +3 18428 19112 19167 +3 18428 19167 18521 +3 18429 18459 18643 +3 18429 18630 18430 +3 18429 18643 18630 +3 18430 18630 18644 +3 18430 18644 18460 +3 18431 18825 19786 +3 18431 19786 19366 +3 18432 19367 19787 +3 18432 19787 18826 +3 18433 20257 22659 +3 18433 22659 20391 +3 18434 20392 22660 +3 18434 22660 20258 +3 18435 18558 18649 +3 18435 18649 18534 +3 18436 18535 18650 +3 18436 18650 18558 +3 18437 20322 23139 +3 18437 23139 20635 +3 18438 20636 23140 +3 18438 23140 20323 +3 18439 18728 19084 +3 18439 19084 18734 +3 18440 18735 19085 +3 18440 19085 18729 +3 18441 20462 21372 +3 18441 21372 19242 +3 18442 19243 21373 +3 18442 21373 20463 +3 18443 19548 20077 +3 18443 20077 18977 +3 18444 18978 20078 +3 18444 20078 19549 +3 18445 19986 20575 +3 18445 20575 19025 +3 18446 19026 20576 +3 18446 20576 19987 +3 18447 20200 21009 +3 18447 21009 19252 +3 18448 19252 21010 +3 18448 21010 20201 +3 18449 19404 22458 +3 18449 22458 21116 +3 18450 21117 22459 +3 18450 22459 19405 +3 18451 20290 22504 +3 18451 22504 20257 +3 18452 20258 22505 +3 18452 22505 20291 +3 18453 18669 19273 +3 18453 19273 19086 +3 18454 19087 19274 +3 18454 19274 18670 +3 18455 18540 18714 +3 18455 18714 18628 +3 18456 18629 18715 +3 18456 18715 18541 +3 18457 20395 20949 +3 18457 20949 18985 +3 18458 18986 20950 +3 18458 20950 20396 +3 18459 18518 18685 +3 18459 18685 18643 +3 18460 18644 18686 +3 18460 18686 18519 +3 18461 19172 21125 +3 18461 21125 20360 +3 18462 20361 21126 +3 18462 21126 19173 +3 18463 19123 20827 +3 18463 20827 20165 +3 18464 20166 20828 +3 18464 20828 19124 +3 18465 20055 21609 +3 18465 21609 19865 +3 18466 19866 21610 +3 18466 21610 20056 +3 18467 19568 20310 +3 18467 20310 19216 +3 18468 19217 20311 +3 18468 20311 19569 +3 18469 19704 24464 +3 18469 24464 22435 +3 18470 22436 24465 +3 18470 24465 19705 +3 18471 19068 19230 +3 18471 19230 18635 +3 18472 18636 19231 +3 18472 19231 19069 +3 18473 18599 18708 +3 18473 18708 18583 +3 18474 18584 18709 +3 18474 18709 18600 +3 18475 18817 19062 +3 18475 19062 18728 +3 18476 18729 19063 +3 18476 19063 18818 +3 18477 18716 19035 +3 18477 19035 18717 +3 18478 19610 23091 +3 18478 23091 21487 +3 18479 21488 23092 +3 18479 23092 19611 +3 18480 18626 19357 +3 18480 19357 19212 +3 18481 19213 19358 +3 18481 19358 18627 +3 18482 19267 21753 +3 18482 21753 20682 +3 18483 20683 21754 +3 18483 21754 19268 +3 18484 20494 21103 +3 18484 21103 19038 +3 18485 19039 21104 +3 18485 21104 20495 +3 18486 18734 19070 +3 18486 19070 18842 +3 18487 18843 19071 +3 18487 19071 18735 +3 18488 19408 20622 +3 18488 20622 19722 +3 18489 19723 20623 +3 18489 20623 19409 +3 18490 19396 22411 +3 18490 22411 21156 +3 18491 21157 22412 +3 18491 22412 19397 +3 18492 18884 19048 +3 18492 19048 18681 +3 18493 18682 19049 +3 18493 19049 18885 +3 18494 18620 18770 +3 18494 18770 18647 +3 18495 18648 18771 +3 18495 18771 18621 +3 18496 18665 18774 +3 18496 18774 18620 +3 18497 18621 18775 +3 18497 18775 18666 +3 18498 18882 19473 +3 18498 19473 19131 +3 18499 19132 19476 +3 18499 19476 18883 +3 18500 18641 19042 +3 18500 19042 18924 +3 18501 18925 19043 +3 18501 19043 18642 +3 18502 19033 20067 +3 18502 20067 19536 +3 18503 19537 20068 +3 18503 20068 19034 +3 18504 20559 23109 +3 18504 23109 20454 +3 18505 20455 23110 +3 18505 23110 20560 +3 18506 19798 23907 +3 18506 23907 22062 +3 18507 22063 23908 +3 18507 23908 19799 +3 18508 22244 23583 +3 18508 23583 19449 +3 18509 19450 23584 +3 18509 23584 22245 +3 18510 19003 20847 +3 18510 20847 20332 +3 18511 20333 20848 +3 18511 20848 19004 +3 18512 18554 18766 +3 18512 18706 18538 +3 18512 18766 18706 +3 18513 18539 18707 +3 18513 18707 18767 +3 18513 18767 18555 +3 18514 19392 20065 +3 18514 20065 19156 +3 18515 19157 20066 +3 18515 20066 19393 +3 18516 18933 19133 +3 18516 19133 18724 +3 18517 18725 19134 +3 18517 19134 18934 +3 18518 18583 18760 +3 18518 18760 18685 +3 18519 18686 18761 +3 18519 18761 18584 +3 18520 18631 19269 +3 18520 19269 19166 +3 18521 19167 19270 +3 18521 19270 18632 +3 18522 19129 21355 +3 18522 21355 20639 +3 18523 20640 21356 +3 18523 21356 19130 +3 18524 19600 20858 +3 18524 20858 19764 +3 18525 19765 20859 +3 18525 20859 19601 +3 18526 19206 19824 +3 18526 19824 19142 +3 18527 19143 19825 +3 18527 19825 19207 +3 18528 19142 19810 +3 18528 19810 19182 +3 18529 19183 19811 +3 18529 19811 19143 +3 18530 19901 21357 +3 18530 21357 19895 +3 18531 19896 21358 +3 18531 21358 19902 +3 18532 20391 22811 +3 18532 22811 20438 +3 18533 20441 22812 +3 18533 22812 20392 +3 18534 18649 18772 +3 18534 18772 18663 +3 18535 18664 18773 +3 18535 18773 18650 +3 18536 20655 21764 +3 18536 21764 19422 +3 18537 19423 21765 +3 18537 21765 20656 +3 18538 18706 18764 +3 18538 18764 18599 +3 18539 18600 18765 +3 18539 18765 18707 +3 18540 18663 18821 +3 18540 18821 18714 +3 18541 18715 18822 +3 18541 18822 18664 +3 18542 19843 20887 +3 18542 20887 19600 +3 18543 19601 20888 +3 18543 20888 19844 +3 18544 18987 20010 +3 18544 20010 19578 +3 18545 19579 20011 +3 18545 20011 18988 +3 18546 19319 21781 +3 18546 21781 20806 +3 18547 20807 21782 +3 18547 21782 19320 +3 18548 19007 19176 +3 18548 19176 18671 +3 18549 18672 19177 +3 18549 19177 19008 +3 18550 19895 21523 +3 18550 21523 19966 +3 18551 19967 21524 +3 18551 21524 19896 +3 18552 18575 18793 +3 18552 18793 18827 +3 18552 18827 18587 +3 18553 18588 18828 +3 18553 18794 18576 +3 18553 18828 18794 +3 18554 18647 18844 +3 18554 18844 18766 +3 18555 18767 18845 +3 18555 18845 18648 +3 18556 18991 19240 +3 18556 19240 18803 +3 18557 18804 19241 +3 18557 19241 18992 +3 18558 18650 18806 +3 18558 18806 18649 +3 18559 19726 20227 +3 18559 20227 19027 +3 18560 19028 20228 +3 18560 20228 19727 +3 18561 22552 24438 +3 18561 24438 19913 +3 18562 19914 24439 +3 18562 24439 22553 +3 18563 20380 23087 +3 18563 23087 20680 +3 18564 20681 23088 +3 18564 23088 20381 +3 18565 19009 20107 +3 18565 20107 19633 +3 18566 19634 20108 +3 18566 20108 19010 +3 18567 21838 23750 +3 18567 23750 19927 +3 18568 19927 23751 +3 18568 23751 21839 +3 18569 20151 21601 +3 18569 21601 20101 +3 18570 20102 21602 +3 18570 21602 20152 +3 18571 18835 19494 +3 18571 19494 19257 +3 18572 19258 19495 +3 18572 19495 18836 +3 18573 19244 21589 +3 18573 21589 20768 +3 18574 20769 21590 +3 18574 21590 19245 +3 18575 18628 18838 +3 18575 18838 18793 +3 18576 18794 18839 +3 18576 18839 18629 +3 18577 19036 21412 +3 18577 21412 19901 +3 18578 19902 21413 +3 18578 21413 19037 +3 18579 19101 20466 +3 18579 20466 19970 +3 18580 19971 20467 +3 18580 20467 19102 +3 18581 19554 19796 +3 18581 19796 18858 +3 18582 18859 19797 +3 18582 19797 19555 +3 18583 18708 18850 +3 18583 18850 18760 +3 18584 18761 18851 +3 18584 18851 18709 +3 18585 21095 22397 +3 18585 22397 19659 +3 18586 19660 22398 +3 18586 22398 21096 +3 18587 18827 18876 +3 18587 18876 18665 +3 18588 18666 18877 +3 18588 18877 18828 +3 18589 19347 20163 +3 18589 20163 19382 +3 18590 19383 20164 +3 18590 20164 19348 +3 18591 19182 19885 +3 18591 19885 19295 +3 18592 19296 19886 +3 18592 19886 19183 +3 18593 18904 20036 +3 18593 20036 19728 +3 18594 19729 20037 +3 18594 20037 18905 +3 18595 18900 20051 +3 18595 20051 19608 +3 18596 19609 20052 +3 18596 20052 18901 +3 18597 19668 20881 +3 18597 20881 19804 +3 18598 19805 20882 +3 18598 20882 19669 +3 18599 18764 18846 +3 18599 18846 18708 +3 18600 18709 18847 +3 18600 18847 18765 +3 18601 19380 19720 +3 18601 19720 18947 +3 18602 18948 19721 +3 18602 19721 19381 +3 18603 19001 19204 +3 18603 19204 18817 +3 18604 18818 19205 +3 18604 19205 19002 +3 18605 18928 19437 +3 18605 19437 19148 +3 18606 19149 19438 +3 18606 19438 18928 +3 18607 18918 19174 +3 18607 19174 18691 +3 18608 18692 19175 +3 18608 19175 18919 +3 18609 20458 21295 +3 18609 21295 19402 +3 18610 19403 21296 +3 18610 21296 20459 +3 18611 21079 21789 +3 18611 21789 19137 +3 18612 19138 21790 +3 18612 21790 21080 +3 18613 19400 22797 +3 18613 22797 21681 +3 18614 21682 22798 +3 18614 22798 19401 +3 18615 19550 19802 +3 18615 19802 18878 +3 18616 18879 19803 +3 18616 19803 19551 +3 18617 19353 19928 +3 18617 19928 19206 +3 18618 19207 19929 +3 18618 19929 19354 +3 18619 18638 19225 +3 18619 19224 18637 +3 18619 19225 19224 +3 18620 18774 18916 +3 18620 18916 18770 +3 18621 18771 18917 +3 18621 18917 18775 +3 18622 19031 20486 +3 18622 20486 20071 +3 18623 20072 20487 +3 18623 20487 19032 +3 18624 20825 23185 +3 18624 23185 20380 +3 18625 20381 23186 +3 18625 23186 20826 +3 18626 18813 19566 +3 18626 19566 19357 +3 18627 19358 19567 +3 18627 19567 18814 +3 18628 18714 18910 +3 18628 18910 18838 +3 18629 18839 18911 +3 18629 18911 18715 +3 18630 18643 18886 +3 18630 18886 18887 +3 18630 18887 18644 +3 18631 18791 19560 +3 18631 19560 19269 +3 18632 19270 19561 +3 18632 19561 18792 +3 18633 19530 19899 +3 18633 19899 19017 +3 18634 19018 19900 +3 18634 19900 19531 +3 18635 19230 19406 +3 18635 19406 18856 +3 18636 18857 19407 +3 18636 19407 19231 +3 18637 19224 19253 +3 18637 19253 18679 +3 18638 18680 19254 +3 18638 19254 19225 +3 18639 19064 20624 +3 18639 20624 20022 +3 18640 20023 20625 +3 18640 20625 19065 +3 18641 18842 19220 +3 18641 19220 19042 +3 18642 19043 19221 +3 18642 19221 18843 +3 18643 18685 18922 +3 18643 18922 18886 +3 18644 18887 18923 +3 18644 18923 18686 +3 18645 18931 19471 +3 18645 19471 19228 +3 18646 19229 19472 +3 18646 19472 18932 +3 18647 18770 18941 +3 18647 18941 18844 +3 18648 18845 18942 +3 18648 18942 18771 +3 18649 18806 18908 +3 18649 18908 18772 +3 18650 18773 18909 +3 18650 18909 18806 +3 18651 19564 20448 +3 18651 20448 19556 +3 18652 19557 20449 +3 18652 20449 19565 +3 18653 19060 20442 +3 18653 20442 20038 +3 18654 20039 20443 +3 18654 20443 19061 +3 18655 19339 19732 +3 18655 19732 19340 +3 18656 19936 20261 +3 18656 20261 18973 +3 18657 18974 20262 +3 18657 20262 19937 +3 18658 19496 19879 +3 18658 19879 19054 +3 18659 19055 19880 +3 18659 19880 19497 +3 18660 18678 19603 +3 18660 19602 18677 +3 18660 19603 19602 +3 18661 20762 21773 +3 18661 21773 19453 +3 18662 19454 21774 +3 18662 21774 20763 +3 18663 18772 18912 +3 18663 18912 18821 +3 18664 18822 18913 +3 18664 18913 18773 +3 18665 18876 18953 +3 18665 18953 18774 +3 18666 18775 18954 +3 18666 18954 18877 +3 18667 19291 20263 +3 18667 20263 19612 +3 18668 19613 20264 +3 18668 20264 19292 +3 18669 18914 19512 +3 18669 19512 19273 +3 18670 19274 19513 +3 18670 19513 18915 +3 18671 19176 19297 +3 18671 19297 18799 +3 18672 18800 19298 +3 18672 19298 19177 +3 18673 18699 19839 +3 18673 19822 18674 +3 18673 19839 19822 +3 18674 19822 19840 +3 18674 19840 18700 +3 18675 20057 24848 +3 18675 24848 22946 +3 18676 22947 24849 +3 18676 24849 20058 +3 18677 19602 19620 +3 18677 19620 18758 +3 18678 18759 19621 +3 18678 19621 19603 +3 18679 19253 19305 +3 18679 19305 18762 +3 18680 18763 19306 +3 18680 19306 19254 +3 18681 19048 19263 +3 18681 19263 18918 +3 18682 18919 19264 +3 18682 19264 19049 +3 18683 20350 20740 +3 18683 20740 19082 +3 18684 19083 20741 +3 18684 20741 20351 +3 18685 18760 18961 +3 18685 18961 18922 +3 18686 18923 18962 +3 18686 18962 18761 +3 18687 21185 22632 +3 18687 22632 19768 +3 18688 19769 22633 +3 18688 22633 21186 +3 18689 22721 24038 +3 18689 24038 19710 +3 18690 19711 24039 +3 18690 24039 22722 +3 18691 19174 19303 +3 18691 19303 18840 +3 18692 18841 19304 +3 18692 19304 19175 +3 18693 18746 20601 +3 18693 20586 18694 +3 18693 20601 20586 +3 18694 20586 20602 +3 18694 20602 18747 +3 18695 18975 20498 +3 18695 20498 19564 +3 18696 19565 20499 +3 18696 20499 18976 +3 18697 19349 20796 +3 18697 20796 20209 +3 18698 20210 20797 +3 18698 20797 19350 +3 18699 18811 19881 +3 18699 19881 19839 +3 18700 19840 19882 +3 18700 19882 18812 +3 18701 19764 21097 +3 18701 21097 19988 +3 18702 19989 21098 +3 18702 21098 19765 +3 18703 19200 19653 +3 18703 19653 19188 +3 18704 19189 19654 +3 18704 19654 19201 +3 18705 18727 21712 +3 18705 21711 18726 +3 18705 21712 21711 +3 18706 18766 18979 +3 18706 18937 18764 +3 18706 18979 18937 +3 18707 18765 18938 +3 18707 18938 18980 +3 18707 18980 18767 +3 18708 18846 18959 +3 18708 18959 18850 +3 18709 18851 18960 +3 18709 18960 18847 +3 18710 21018 21901 +3 18710 21901 20055 +3 18711 20056 21902 +3 18711 21902 21019 +3 18712 19194 19655 +3 18712 19655 19200 +3 18713 19201 19656 +3 18713 19656 19195 +3 18714 18821 18997 +3 18714 18997 18910 +3 18715 18911 18998 +3 18715 18998 18822 +3 18716 19105 19398 +3 18716 19398 19035 +3 18717 19035 19399 +3 18717 19399 19106 +3 18718 19792 23472 +3 18718 23472 21971 +3 18719 21972 23473 +3 18719 23473 19793 +3 18720 18935 19672 +3 18720 19672 19871 +3 18720 19871 18896 +3 18721 18897 19872 +3 18721 19673 18936 +3 18721 19872 19673 +3 18722 19883 23613 +3 18722 23613 22001 +3 18723 22002 23614 +3 18723 23614 19884 +3 18724 19133 19275 +3 18724 19275 18884 +3 18725 18885 19276 +3 18725 19276 19134 +3 18726 21711 23222 +3 18726 23222 19766 +3 18727 19767 23223 +3 18727 23223 21712 +3 18728 19062 19378 +3 18728 19378 19084 +3 18729 19085 19379 +3 18729 19379 19063 +3 18730 19086 19574 +3 18730 19574 19248 +3 18731 19249 19575 +3 18731 19575 19087 +3 18732 19976 20593 +3 18732 20593 19351 +3 18733 19352 20594 +3 18733 20594 19977 +3 18734 19084 19388 +3 18734 19388 19070 +3 18735 19071 19389 +3 18735 19389 19085 +3 18736 19295 20012 +3 18736 20012 19455 +3 18737 19456 20013 +3 18737 20013 19296 +3 18738 20589 23125 +3 18738 23125 20690 +3 18739 20691 23126 +3 18739 23126 20590 +3 18740 20340 21165 +3 18740 21165 19506 +3 18741 19507 21166 +3 18741 21166 20341 +3 18742 19289 19718 +3 18742 19718 19194 +3 18743 19195 19719 +3 18743 19719 19290 +3 18744 19424 22478 +3 18744 22478 21495 +3 18745 21496 22479 +3 18745 22479 19425 +3 18746 19426 21400 +3 18746 21400 20601 +3 18747 20602 21401 +3 18747 21401 19427 +3 18748 19188 19737 +3 18748 19737 19325 +3 18749 19326 19738 +3 18749 19738 19189 +3 18750 20851 23290 +3 18750 23290 20559 +3 18751 20560 23291 +3 18751 23291 20852 +3 18752 19580 23194 +3 18752 23194 22020 +3 18753 22021 23195 +3 18753 23195 19581 +3 18754 19804 21061 +3 18754 21061 19994 +3 18755 19995 21062 +3 18755 21062 19805 +3 18756 22594 24510 +3 18756 24510 19958 +3 18757 19959 24511 +3 18757 24511 22595 +3 18758 19620 19714 +3 18758 19714 18866 +3 18759 18867 19715 +3 18759 19715 19621 +3 18760 18850 19046 +3 18760 19046 18961 +3 18761 18962 19047 +3 18761 19047 18851 +3 18762 19305 19370 +3 18762 19370 18933 +3 18763 18934 19371 +3 18763 19371 19306 +3 18764 18937 18999 +3 18764 18999 18846 +3 18765 18847 19000 +3 18765 19000 18938 +3 18766 18844 19056 +3 18766 19056 18979 +3 18767 18980 19057 +3 18767 19057 18845 +3 18768 20101 21891 +3 18768 21891 20326 +3 18769 20327 21892 +3 18769 21892 20102 +3 18770 18916 19091 +3 18770 19091 18941 +3 18771 18942 19092 +3 18771 19092 18917 +3 18772 18908 19015 +3 18772 19015 18912 +3 18773 18913 19016 +3 18773 19016 18909 +3 18774 18953 19103 +3 18774 19103 18916 +3 18775 18917 19104 +3 18775 19104 18954 +3 18776 20137 21822 +3 18776 21822 20219 +3 18777 20220 21823 +3 18777 21823 20138 +3 18778 19584 22095 +3 18778 22095 21011 +3 18779 21012 22096 +3 18779 22096 19585 +3 18780 18971 20105 +3 18780 20105 19392 +3 18781 19393 20106 +3 18781 20106 18972 +3 18782 20099 24866 +3 18782 24866 23103 +3 18783 23104 24867 +3 18783 24867 20100 +3 18784 18823 19287 +3 18784 19287 19372 +3 18784 19372 18890 +3 18785 18891 19373 +3 18785 19288 18824 +3 18785 19373 19288 +3 18786 20689 21755 +3 18786 21755 20688 +3 18787 20637 22847 +3 18787 22847 20496 +3 18788 20497 22848 +3 18788 22848 20638 +3 18789 20103 20528 +3 18789 20528 19293 +3 18790 19294 20529 +3 18790 20529 20104 +3 18791 18983 19708 +3 18791 19708 19560 +3 18792 19561 19709 +3 18792 19709 18984 +3 18793 18838 19074 +3 18793 19074 19088 +3 18793 19088 18827 +3 18794 18828 19089 +3 18794 19075 18839 +3 18794 19089 19075 +3 18795 19779 22853 +3 18795 22853 21505 +3 18796 21506 22854 +3 18796 22854 19780 +3 18797 19700 23703 +3 18797 23703 22407 +3 18798 22408 23704 +3 18798 23704 19701 +3 18799 19297 19483 +3 18799 19483 18991 +3 18800 18992 19484 +3 18800 19484 19298 +3 18801 20496 22701 +3 18801 22701 20549 +3 18802 20550 22702 +3 18802 22702 20497 +3 18803 19240 19502 +3 18803 19502 19105 +3 18804 19106 19503 +3 18804 19503 19241 +3 18805 20031 20632 +3 18805 20632 20030 +3 18806 18909 19090 +3 18806 19090 18908 +3 18807 20170 21243 +3 18807 21243 19843 +3 18808 19844 21244 +3 18808 21244 20171 +3 18809 21246 22254 +3 18809 22254 19570 +3 18810 19571 22255 +3 18810 22255 21247 +3 18811 19208 20273 +3 18811 20273 19881 +3 18812 19882 20274 +3 18812 20274 19209 +3 18813 19021 19735 +3 18813 19735 19566 +3 18814 19567 19736 +3 18814 19736 19022 +3 18815 19594 20135 +3 18815 20135 19353 +3 18816 19354 20136 +3 18816 20136 19595 +3 18817 19204 19420 +3 18817 19420 19062 +3 18818 19063 19421 +3 18818 19421 19205 +3 18819 22260 23983 +3 18819 23983 20047 +3 18820 20048 23984 +3 18820 23984 22261 +3 18821 18912 19095 +3 18821 19095 18997 +3 18822 18998 19096 +3 18822 19096 18913 +3 18823 18924 19355 +3 18823 19355 19287 +3 18824 19288 19356 +3 18824 19356 18925 +3 18825 19265 20251 +3 18825 20251 19786 +3 18826 19787 20252 +3 18826 20252 19266 +3 18827 19088 19125 +3 18827 19125 18876 +3 18828 18877 19126 +3 18828 19126 19089 +3 18829 19441 19921 +3 18829 19921 19115 +3 18830 19116 19922 +3 18830 19922 19442 +3 18831 20690 23252 +3 18831 23252 20782 +3 18832 20783 23253 +3 18832 23253 20691 +3 18833 21735 23248 +3 18833 23248 19917 +3 18834 19918 23249 +3 18834 23249 21736 +3 18835 19131 19777 +3 18835 19777 19494 +3 18836 19495 19778 +3 18836 19778 19132 +3 18837 19731 20189 +3 18837 20189 19730 +3 18838 18910 19127 +3 18838 19127 19074 +3 18839 19075 19128 +3 18839 19128 18911 +3 18840 19303 19429 +3 18840 19429 19001 +3 18841 19002 19430 +3 18841 19430 19304 +3 18842 19070 19412 +3 18842 19412 19220 +3 18843 19221 19413 +3 18843 19413 19071 +3 18844 18941 19150 +3 18844 19150 19056 +3 18845 19057 19151 +3 18845 19151 18942 +3 18846 18999 19121 +3 18846 19121 18959 +3 18847 18960 19122 +3 18847 19122 19000 +3 18848 20069 20573 +3 18848 20573 19343 +3 18849 19344 20574 +3 18849 20574 20070 +3 18850 18959 19162 +3 18850 19162 19046 +3 18851 19047 19163 +3 18851 19163 18960 +3 18852 20478 22026 +3 18852 22026 20151 +3 18853 20152 22027 +3 18853 22027 20479 +3 18854 19694 20412 +3 18854 20412 19568 +3 18855 19569 20413 +3 18855 20413 19695 +3 18856 19406 19853 +3 18856 19853 19289 +3 18857 19290 19854 +3 18857 19854 19407 +3 18858 19796 20087 +3 18858 20087 19154 +3 18859 19155 20088 +3 18859 20088 19797 +3 18860 19818 20665 +3 18860 20665 19790 +3 18861 19791 20666 +3 18861 20666 19819 +3 18862 21424 22693 +3 18862 22693 19755 +3 18863 19756 22694 +3 18863 22694 21425 +3 18864 20541 21235 +3 18864 21235 19490 +3 18865 19491 21236 +3 18865 21236 20542 +3 18866 19714 20059 +3 18866 20059 19186 +3 18867 19187 20060 +3 18867 20060 19715 +3 18868 20167 24482 +3 18868 24482 22727 +3 18869 22728 24483 +3 18869 24483 20168 +3 18870 20304 20943 +3 18870 20943 19498 +3 18871 19499 20944 +3 18871 20944 20305 +3 18872 19465 20756 +3 18872 20756 20176 +3 18873 20177 20757 +3 18873 20757 19466 +3 18874 20169 23835 +3 18874 23835 22030 +3 18875 22031 23836 +3 18875 23836 20169 +3 18876 19125 19198 +3 18876 19198 18953 +3 18877 18954 19199 +3 18877 19199 19126 +3 18878 19802 20081 +3 18878 20081 19152 +3 18879 19153 20082 +3 18879 20082 19803 +3 18880 20223 20724 +3 18880 20724 19384 +3 18881 19385 20725 +3 18881 20725 20224 +3 18882 19148 19724 +3 18882 19724 19473 +3 18883 19476 19725 +3 18883 19725 19149 +3 18884 19275 19435 +3 18884 19435 19048 +3 18885 19049 19436 +3 18885 19436 19276 +3 18886 18922 19160 +3 18886 19141 18887 +3 18886 19160 19141 +3 18887 19141 19161 +3 18887 19161 18923 +3 18888 20680 22981 +3 18888 22981 20637 +3 18889 20638 22982 +3 18889 22982 20681 +3 18890 19372 19514 +3 18890 19514 19007 +3 18891 19008 19515 +3 18891 19515 19373 +3 18892 19500 21541 +3 18892 21541 20667 +3 18893 20668 21542 +3 18893 21542 19501 +3 18894 19722 20714 +3 18894 20714 19867 +3 18895 19868 20715 +3 18895 20715 19723 +3 18896 19871 20061 +3 18896 20061 19098 +3 18897 19099 20062 +3 18897 20062 19872 +3 18898 20514 21045 +3 18898 21045 19414 +3 18899 19415 21046 +3 18899 21046 20515 +3 18900 19236 20362 +3 18900 20362 20051 +3 18901 20052 20363 +3 18901 20363 19237 +3 18902 21465 22653 +3 18902 22653 19749 +3 18903 19750 22654 +3 18903 22654 21466 +3 18904 19232 20348 +3 18904 20348 20036 +3 18905 20037 20349 +3 18905 20349 19233 +3 18906 20219 21905 +3 18906 21905 20384 +3 18907 20385 21906 +3 18907 21906 20220 +3 18908 19090 19184 +3 18908 19184 19015 +3 18909 19016 19185 +3 18909 19185 19090 +3 18910 18997 19226 +3 18910 19226 19127 +3 18911 19128 19227 +3 18911 19227 18998 +3 18912 19015 19190 +3 18912 19190 19095 +3 18913 19096 19191 +3 18913 19191 19016 +3 18914 19325 19911 +3 18914 19911 19512 +3 18915 19513 19912 +3 18915 19912 19326 +3 18916 19103 19234 +3 18916 19234 19091 +3 18917 19092 19235 +3 18917 19235 19104 +3 18918 19263 19524 +3 18918 19524 19174 +3 18919 19175 19525 +3 18919 19525 19264 +3 18920 19712 20444 +3 18920 20444 19616 +3 18921 19617 20445 +3 18921 20445 19713 +3 18922 18961 19222 +3 18922 19222 19160 +3 18923 19161 19223 +3 18923 19223 18962 +3 18924 19042 19485 +3 18924 19485 19355 +3 18925 19356 19486 +3 18925 19486 19043 +3 18926 19443 20964 +3 18926 20964 20414 +3 18927 20415 20965 +3 18927 20965 19444 +3 18928 19438 19774 +3 18928 19774 19437 +3 18929 19616 20456 +3 18929 20456 19759 +3 18930 19762 20457 +3 18930 20457 19617 +3 18931 19248 19757 +3 18931 19757 19471 +3 18932 19472 19758 +3 18932 19758 19249 +3 18933 19370 19582 +3 18933 19582 19133 +3 18934 19134 19583 +3 18934 19583 19371 +3 18935 19455 20247 +3 18935 20247 19672 +3 18936 19673 20248 +3 18936 20248 19456 +3 18937 18979 19250 +3 18937 19196 18999 +3 18937 19250 19196 +3 18938 19000 19197 +3 18938 19197 19251 +3 18938 19251 18980 +3 18939 20915 23260 +3 18939 23260 20649 +3 18940 20650 23261 +3 18940 23261 20916 +3 18941 19091 19271 +3 18941 19271 19150 +3 18942 19151 19272 +3 18942 19272 19092 +3 18943 19988 21015 +3 18943 21015 19964 +3 18944 19965 21016 +3 18944 21016 19989 +3 18945 23085 24886 +3 18945 24886 20278 +3 18946 20279 24887 +3 18946 24887 23086 +3 18947 19720 20117 +3 18947 20117 19339 +3 18948 19340 20118 +3 18948 20118 19721 +3 18949 19964 21029 +3 18949 21029 20006 +3 18950 20007 21030 +3 18950 21030 19965 +3 18951 19670 21762 +3 18951 21762 20833 +3 18952 20834 21763 +3 18952 21763 19671 +3 18953 19198 19307 +3 18953 19307 19103 +3 18954 19104 19308 +3 18954 19308 19199 +3 18955 21003 22070 +3 18955 22070 19666 +3 18956 19667 22071 +3 18956 22071 21004 +3 18957 19790 20788 +3 18957 20788 19950 +3 18958 19951 20789 +3 18958 20789 19791 +3 18959 19121 19311 +3 18959 19311 19162 +3 18960 19163 19312 +3 18960 19312 19122 +3 18961 19046 19285 +3 18961 19285 19222 +3 18962 19223 19286 +3 18962 19286 19047 +3 18963 19683 21404 +3 18963 21404 20571 +3 18964 20572 21405 +3 18964 21405 19683 +3 18965 21923 22962 +3 18965 22962 19696 +3 18966 19697 22963 +3 18966 22963 21924 +3 18967 19814 22048 +3 18967 22048 20929 +3 18968 20930 22049 +3 18968 22049 19815 +3 18969 19469 21353 +3 18969 21353 20754 +3 18970 20755 21354 +3 18970 21354 19470 +3 18971 19210 20312 +3 18971 20312 20105 +3 18972 20106 20313 +3 18972 20313 19211 +3 18973 20261 20611 +3 18973 20611 19329 +3 18974 19330 20612 +3 18974 20612 20262 +3 18975 19315 20811 +3 18975 20811 20498 +3 18976 20499 20812 +3 18976 20812 19316 +3 18977 20077 20584 +3 18977 20584 19489 +3 18978 19489 20585 +3 18978 20585 20078 +3 18979 19056 19309 +3 18979 19309 19250 +3 18980 19251 19310 +3 18980 19310 19057 +3 18981 19968 24125 +3 18981 24125 22863 +3 18982 22864 24126 +3 18982 24126 19969 +3 18983 19228 19946 +3 18983 19946 19708 +3 18984 19709 19947 +3 18984 19947 19229 +3 18985 20949 21697 +3 18985 21697 19572 +3 18986 19573 21698 +3 18986 21698 20950 +3 18987 19366 20393 +3 18987 20393 20010 +3 18988 20011 20394 +3 18988 20394 19367 +3 18989 19855 20582 +3 18989 20582 19712 +3 18990 19713 20583 +3 18990 20583 19856 +3 18991 19483 19678 +3 18991 19678 19240 +3 18992 19241 19679 +3 18992 19679 19484 +3 18993 20649 23338 +3 18993 23338 21067 +3 18994 21068 23339 +3 18994 23339 20650 +3 18995 20269 21701 +3 18995 21701 20282 +3 18996 20283 21702 +3 18996 21702 20270 +3 18997 19095 19281 +3 18997 19281 19226 +3 18998 19227 19282 +3 18998 19282 19096 +3 18999 19196 19277 +3 18999 19277 19121 +3 19000 19122 19278 +3 19000 19278 19197 +3 19001 19429 19614 +3 19001 19614 19204 +3 19002 19205 19615 +3 19002 19615 19430 +3 19003 19534 21497 +3 19003 21497 20847 +3 19004 20848 21498 +3 19004 21498 19535 +3 19005 20028 20845 +3 19005 20845 19818 +3 19006 19819 20846 +3 19006 20846 20029 +3 19007 19514 19647 +3 19007 19647 19176 +3 19008 19177 19648 +3 19008 19648 19515 +3 19009 19536 20609 +3 19009 20609 20107 +3 19010 20108 20610 +3 19010 20610 19537 +3 19011 21142 22101 +3 19011 22101 19716 +3 19012 19717 22102 +3 19012 22102 21143 +3 19013 20032 22665 +3 19013 22665 21422 +3 19014 21423 22666 +3 19014 22666 20033 +3 19015 19184 19335 +3 19015 19335 19190 +3 19016 19191 19336 +3 19016 19336 19185 +3 19017 19899 20320 +3 19017 20320 19441 +3 19018 19442 20321 +3 19018 20321 19900 +3 19019 20774 21565 +3 19019 21565 19661 +3 19020 19662 21566 +3 19020 21566 20775 +3 19021 19257 19962 +3 19021 19962 19735 +3 19022 19736 19963 +3 19022 19963 19258 +3 19023 20326 21856 +3 19023 21856 20269 +3 19024 20270 21857 +3 19024 21857 20327 +3 19025 20575 21227 +3 19025 21227 19626 +3 19026 19627 21228 +3 19026 21228 20576 +3 19027 20227 20684 +3 19027 20684 19548 +3 19028 19549 20685 +3 19028 20685 20228 +3 19029 20192 24570 +3 19029 24570 22779 +3 19030 22780 24571 +3 19030 24571 20193 +3 19031 19492 20927 +3 19031 20927 20486 +3 19032 20487 20928 +3 19032 20928 19493 +3 19033 19612 20358 +3 19033 20358 20067 +3 19034 20068 20359 +3 19034 20359 19613 +3 19035 19398 19630 +3 19035 19630 19399 +3 19036 19544 22089 +3 19036 22089 21412 +3 19037 21413 22090 +3 19037 22090 19545 +3 19038 21103 21913 +3 19038 21913 19645 +3 19039 19646 21914 +3 19039 21914 21104 +3 19040 19759 20653 +3 19040 20653 19944 +3 19041 19945 20654 +3 19041 20654 19762 +3 19042 19220 19618 +3 19042 19618 19485 +3 19043 19486 19619 +3 19043 19619 19221 +3 19044 23230 24914 +3 19044 24914 20302 +3 19045 20303 24915 +3 19045 24915 23231 +3 19046 19162 19374 +3 19046 19374 19285 +3 19047 19286 19375 +3 19047 19375 19163 +3 19048 19435 19639 +3 19048 19639 19263 +3 19049 19264 19640 +3 19049 19640 19436 +3 19050 20282 21767 +3 19050 21767 19477 +3 19051 19478 21768 +3 19051 21768 20283 +3 19052 19111 19800 +3 19052 19781 19053 +3 19052 19800 19781 +3 19053 19781 19801 +3 19053 19801 19112 +3 19054 19879 20217 +3 19054 20217 19380 +3 19055 19381 20218 +3 19055 20218 19880 +3 19056 19150 19376 +3 19056 19376 19309 +3 19057 19310 19377 +3 19057 19377 19151 +3 19058 22186 23627 +3 19058 23627 20091 +3 19059 20092 23628 +3 19059 23628 22187 +3 19060 19867 20856 +3 19060 20856 20442 +3 19061 20443 20857 +3 19061 20857 19868 +3 19062 19420 19733 +3 19062 19733 19378 +3 19063 19379 19734 +3 19063 19734 19421 +3 19064 19604 21229 +3 19064 21229 20624 +3 19065 20625 21230 +3 19065 21230 19605 +3 19066 20079 22833 +3 19066 22833 21471 +3 19067 21472 22834 +3 19067 22834 20080 +3 19068 19212 19972 +3 19068 19837 19230 +3 19068 19972 19837 +3 19069 19231 19838 +3 19069 19838 19973 +3 19069 19973 19213 +3 19070 19388 19739 +3 19070 19739 19412 +3 19071 19413 19740 +3 19071 19740 19389 +3 19072 22232 23744 +3 19072 23744 20174 +3 19073 20175 23745 +3 19073 23745 22233 +3 19074 19127 19361 +3 19074 19359 19088 +3 19074 19361 19359 +3 19075 19089 19360 +3 19075 19360 19362 +3 19075 19362 19128 +3 19076 22212 25580 +3 19076 25580 22330 +3 19077 22331 25659 +3 19077 25659 22213 +3 19078 20782 23417 +3 19078 23417 21069 +3 19079 21070 23418 +3 19079 23418 20783 +3 19080 19108 20379 +3 19080 20378 19107 +3 19080 20379 20378 +3 19081 19109 21966 +3 19081 21966 21967 +3 19081 21967 19110 +3 19082 20740 21258 +3 19082 21258 19546 +3 19083 19547 21259 +3 19083 21259 20741 +3 19084 19378 19751 +3 19084 19751 19388 +3 19085 19389 19752 +3 19085 19752 19379 +3 19086 19273 19932 +3 19086 19932 19574 +3 19087 19575 19933 +3 19087 19933 19274 +3 19088 19359 19390 +3 19088 19390 19125 +3 19089 19126 19391 +3 19089 19391 19360 +3 19090 19185 19365 +3 19090 19365 19184 +3 19091 19234 19410 +3 19091 19410 19271 +3 19092 19272 19411 +3 19092 19411 19235 +3 19093 20905 23286 +3 19093 23286 20825 +3 19094 20826 23287 +3 19094 23287 20906 +3 19095 19190 19368 +3 19095 19368 19281 +3 19096 19282 19369 +3 19096 19369 19191 +3 19097 20482 21957 +3 19097 21957 20533 +3 19098 20061 20280 +3 19098 20280 19313 +3 19099 19314 20281 +3 19099 20281 20062 +3 19100 20534 21958 +3 19100 21958 20483 +3 19101 19606 21001 +3 19101 21001 20466 +3 19102 20467 21002 +3 19102 21002 19607 +3 19103 19307 19418 +3 19103 19418 19234 +3 19104 19235 19419 +3 19104 19419 19308 +3 19105 19502 19808 +3 19105 19808 19398 +3 19106 19399 19809 +3 19106 19809 19503 +3 19107 20378 20407 +3 19107 20407 19139 +3 19108 19140 20408 +3 19108 20408 20379 +3 19109 20075 23374 +3 19109 23374 21966 +3 19110 21967 23375 +3 19110 23375 20076 +3 19111 19166 19869 +3 19111 19869 19800 +3 19112 19801 19870 +3 19112 19870 19167 +3 19113 22252 23330 +3 19113 23330 19875 +3 19114 19876 23331 +3 19114 23331 22253 +3 19115 19921 20401 +3 19115 20401 19594 +3 19116 19595 20402 +3 19116 20402 19922 +3 19117 19950 20962 +3 19117 20962 20159 +3 19118 20160 20963 +3 19118 20963 19951 +3 19119 22592 23791 +3 19119 23791 19978 +3 19120 19979 23792 +3 19120 23792 22593 +3 19121 19277 19463 +3 19121 19463 19311 +3 19122 19312 19464 +3 19122 19464 19278 +3 19123 19863 21685 +3 19123 21685 20827 +3 19124 20828 21686 +3 19124 21686 19864 +3 19125 19390 19439 +3 19125 19439 19198 +3 19126 19199 19440 +3 19126 19440 19391 +3 19127 19226 19433 +3 19127 19433 19361 +3 19128 19362 19434 +3 19128 19434 19227 +3 19129 20384 22176 +3 19129 22176 21355 +3 19130 21356 22177 +3 19130 22177 20385 +3 19131 19473 20119 +3 19131 20119 19777 +3 19132 19778 20120 +3 19132 20120 19476 +3 19133 19582 19692 +3 19133 19692 19275 +3 19134 19276 19693 +3 19134 19693 19583 +3 19135 20300 24091 +3 19135 24091 22447 +3 19136 22448 24092 +3 19136 24092 20301 +3 19137 21789 22709 +3 19137 22709 19784 +3 19138 19785 22710 +3 19138 22710 21790 +3 19139 20407 20895 +3 19139 20895 19590 +3 19140 19591 20896 +3 19140 20896 20408 +3 19141 19160 19431 +3 19141 19431 19432 +3 19141 19432 19161 +3 19142 19824 20405 +3 19142 20405 19810 +3 19143 19811 20406 +3 19143 20406 19825 +3 19144 20752 23030 +3 19144 23030 20869 +3 19145 20870 23031 +3 19145 23031 20753 +3 19146 20284 21339 +3 19146 21339 20141 +3 19147 20144 21340 +3 19147 21340 20285 +3 19148 19437 20016 +3 19148 20016 19724 +3 19149 19725 20017 +3 19149 20017 19438 +3 19150 19271 19504 +3 19150 19504 19376 +3 19151 19377 19505 +3 19151 19505 19272 +3 19152 20081 20354 +3 19152 20354 19496 +3 19153 19497 20355 +3 19153 20355 20082 +3 19154 20087 20422 +3 19154 20422 19530 +3 19155 19531 20423 +3 19155 20423 20088 +3 19156 20065 20742 +3 19156 20742 19855 +3 19157 19856 20743 +3 19157 20743 20066 +3 19158 22879 24544 +3 19158 24544 20382 +3 19159 20383 24545 +3 19159 24545 22880 +3 19160 19222 19479 +3 19160 19479 19431 +3 19161 19432 19480 +3 19161 19480 19223 +3 19162 19311 19532 +3 19162 19532 19374 +3 19163 19375 19533 +3 19163 19533 19312 +3 19164 20267 21315 +3 19164 21315 20170 +3 19165 20171 21316 +3 19165 21316 20268 +3 19166 19269 19954 +3 19166 19954 19869 +3 19167 19870 19955 +3 19167 19955 19270 +3 19168 22234 23933 +3 19168 23933 20388 +3 19169 20388 23934 +3 19169 23934 22235 +3 19170 20804 22891 +3 19170 22891 20752 +3 19171 20753 22892 +3 19171 22892 20805 +3 19172 19905 22129 +3 19172 22129 21125 +3 19173 21126 22130 +3 19173 22130 19906 +3 19174 19524 19760 +3 19174 19760 19303 +3 19175 19304 19761 +3 19175 19761 19525 +3 19176 19647 19834 +3 19176 19834 19297 +3 19177 19298 19835 +3 19177 19835 19648 +3 19178 21013 23403 +3 19178 23403 20905 +3 19179 20906 23404 +3 19179 23404 21014 +3 19180 20141 21382 +3 19180 21382 20334 +3 19181 20335 21383 +3 19181 21383 20144 +3 19182 19810 20502 +3 19182 20502 19885 +3 19183 19886 20503 +3 19183 20503 19811 +3 19184 19365 19516 +3 19184 19516 19335 +3 19185 19336 19517 +3 19185 19517 19365 +3 19186 20059 20399 +3 19186 20399 19554 +3 19187 19555 20400 +3 19187 20400 20060 +3 19188 19653 20249 +3 19188 20249 19737 +3 19189 19738 20250 +3 19189 20250 19654 +3 19190 19335 19508 +3 19190 19508 19368 +3 19191 19369 19509 +3 19191 19509 19336 +3 19192 21797 23052 +3 19192 23052 20121 +3 19193 20122 23053 +3 19193 23053 21798 +3 19194 19718 20235 +3 19194 20235 19655 +3 19195 19656 20236 +3 19195 20236 19719 +3 19196 19250 19520 +3 19196 19474 19277 +3 19196 19520 19474 +3 19197 19278 19475 +3 19197 19475 19521 +3 19197 19521 19251 +3 19198 19439 19562 +3 19198 19562 19307 +3 19199 19308 19563 +3 19199 19563 19440 +3 19200 19655 20190 +3 19200 20190 19653 +3 19201 19654 20191 +3 19201 20191 19656 +3 19202 20237 23411 +3 19202 23411 21987 +3 19203 21988 23412 +3 19203 23412 20238 +3 19204 19614 19828 +3 19204 19828 19420 +3 19205 19421 19829 +3 19205 19829 19615 +3 19206 19928 20535 +3 19206 20535 19824 +3 19207 19825 20536 +3 19207 20536 19929 +3 19208 19608 20678 +3 19208 20678 20273 +3 19209 20274 20679 +3 19209 20679 19609 +3 19210 19445 20569 +3 19210 20569 20312 +3 19211 20313 20570 +3 19211 20570 19446 +3 19212 19357 20142 +3 19212 20142 19972 +3 19213 19973 20143 +3 19213 20143 19358 +3 19214 20245 24818 +3 19214 24818 23460 +3 19215 23461 24819 +3 19215 24819 20246 +3 19216 20310 21127 +3 19216 21127 20028 +3 19217 20029 21128 +3 19217 21128 20311 +3 19218 21719 25107 +3 19218 25107 21919 +3 19219 21920 25108 +3 19219 25108 21720 +3 19220 19412 19812 +3 19220 19812 19618 +3 19221 19619 19813 +3 19221 19813 19413 +3 19222 19285 19552 +3 19222 19552 19479 +3 19223 19480 19553 +3 19223 19553 19286 +3 19224 19225 19836 +3 19224 19836 19849 +3 19224 19849 19253 +3 19225 19254 19850 +3 19225 19850 19836 +3 19226 19281 19510 +3 19226 19510 19433 +3 19227 19434 19511 +3 19227 19511 19282 +3 19228 19471 20198 +3 19228 20198 19946 +3 19229 19947 20199 +3 19229 20199 19472 +3 19230 19837 20004 +3 19230 20004 19406 +3 19231 19407 20005 +3 19231 20005 19838 +3 19232 19578 20706 +3 19232 20706 20348 +3 19233 20349 20707 +3 19233 20707 19579 +3 19234 19418 19586 +3 19234 19586 19410 +3 19235 19411 19587 +3 19235 19587 19419 +3 19236 19633 20800 +3 19236 20800 20362 +3 19237 20363 20801 +3 19237 20801 19634 +3 19238 20555 22141 +3 19238 22141 20478 +3 19239 20479 22142 +3 19239 22142 20556 +3 19240 19678 19948 +3 19240 19948 19502 +3 19241 19503 19949 +3 19241 19949 19679 +3 19242 21372 22360 +3 19242 22360 19982 +3 19243 19983 22361 +3 19243 22361 21373 +3 19244 19934 22524 +3 19244 22524 21589 +3 19245 21590 22525 +3 19245 22525 19935 +3 19246 20488 24934 +3 19246 24934 23224 +3 19247 23225 24935 +3 19247 24935 20489 +3 19248 19574 20097 +3 19248 20097 19757 +3 19249 19758 20098 +3 19249 20098 19575 +3 19250 19309 19576 +3 19250 19576 19520 +3 19251 19521 19577 +3 19251 19577 19310 +3 19252 21009 22076 +3 19252 22076 21010 +3 19253 19849 19893 +3 19253 19893 19305 +3 19254 19306 19894 +3 19254 19894 19850 +3 19255 20869 23169 +3 19255 23169 20915 +3 19256 20916 23170 +3 19256 23170 20870 +3 19257 19494 20196 +3 19257 20196 19962 +3 19258 19963 20197 +3 19258 20197 19495 +3 19259 19260 20951 +3 19259 20951 20966 +3 19259 20966 19301 +3 19260 19302 20967 +3 19260 20967 20951 +3 19261 20698 22222 +3 19261 22222 20482 +3 19262 20483 22223 +3 19262 22223 20699 +3 19263 19639 19889 +3 19263 19889 19524 +3 19264 19525 19890 +3 19264 19890 19640 +3 19265 19730 20686 +3 19265 20686 20251 +3 19266 20252 20687 +3 19266 20687 19731 +3 19267 20127 22920 +3 19267 22920 21753 +3 19268 21754 22921 +3 19268 22921 20128 +3 19269 19560 20239 +3 19269 20239 19954 +3 19270 19955 20240 +3 19270 20240 19561 +3 19271 19410 19624 +3 19271 19624 19504 +3 19272 19505 19625 +3 19272 19625 19411 +3 19273 19512 20155 +3 19273 20155 19932 +3 19274 19933 20156 +3 19274 20156 19513 +3 19275 19692 19877 +3 19275 19877 19435 +3 19276 19436 19878 +3 19276 19878 19693 +3 19277 19474 19641 +3 19277 19641 19463 +3 19278 19464 19642 +3 19278 19642 19475 +3 19279 23016 24209 +3 19279 24209 20231 +3 19280 20232 24210 +3 19280 24210 23017 +3 19281 19368 19588 +3 19281 19588 19510 +3 19282 19511 19589 +3 19282 19589 19369 +3 19283 20095 24916 +3 19283 24916 21719 +3 19284 21720 24917 +3 19284 24917 20096 +3 19285 19374 19628 +3 19285 19628 19552 +3 19286 19553 19629 +3 19286 19629 19375 +3 19287 19355 19820 +3 19287 19820 19938 +3 19287 19938 19372 +3 19288 19373 19939 +3 19288 19821 19356 +3 19288 19939 19821 +3 19289 19853 20296 +3 19289 20296 19718 +3 19290 19719 20297 +3 19290 20297 19854 +3 19291 19944 20873 +3 19291 20873 20263 +3 19292 20264 20874 +3 19292 20874 19945 +3 19293 20528 20952 +3 19293 20952 19726 +3 19294 19727 20953 +3 19294 20953 20529 +3 19295 19885 20607 +3 19295 20607 20012 +3 19296 20013 20608 +3 19296 20608 19886 +3 19297 19834 19998 +3 19297 19998 19483 +3 19298 19484 19999 +3 19298 19999 19835 +3 19299 20794 25808 +3 19299 25808 23722 +3 19300 23723 25809 +3 19300 25809 20795 +3 19301 20966 21816 +3 19301 21816 19940 +3 19302 19941 21817 +3 19302 21817 20967 +3 19303 19760 19903 +3 19303 19903 19429 +3 19304 19430 19904 +3 19304 19904 19761 +3 19305 19893 19956 +3 19305 19956 19370 +3 19306 19371 19957 +3 19306 19957 19894 +3 19307 19562 19649 +3 19307 19649 19418 +3 19308 19419 19650 +3 19308 19650 19563 +3 19309 19376 19637 +3 19309 19637 19576 +3 19310 19577 19638 +3 19310 19638 19377 +3 19311 19463 19657 +3 19311 19657 19532 +3 19312 19533 19658 +3 19312 19658 19464 +3 19313 20280 20512 +3 19313 20512 19550 +3 19314 19551 20513 +3 19314 20513 20281 +3 19315 19643 21191 +3 19315 21191 20811 +3 19316 20812 21192 +3 19316 21192 19644 +3 19317 20424 21521 +3 19317 21521 20267 +3 19318 20268 21522 +3 19318 21522 20425 +3 19319 20123 22887 +3 19319 22887 21781 +3 19320 21782 22888 +3 19320 22888 20124 +3 19321 20472 21585 +3 19321 21585 20284 +3 19322 20285 21586 +3 19322 21586 20473 +3 19323 20014 23149 +3 19323 23149 22159 +3 19324 22160 23150 +3 19324 23150 20015 +3 19325 19737 20342 +3 19325 20342 19911 +3 19326 19912 20343 +3 19326 20343 19738 +3 19327 20893 23423 +3 19327 23423 21231 +3 19328 21232 23424 +3 19328 23424 20894 +3 19329 20611 20970 +3 19329 20970 19676 +3 19330 19677 20971 +3 19330 20971 20612 +3 19331 20531 24952 +3 19331 24952 23358 +3 19332 23359 24953 +3 19332 24953 20532 +3 19333 22520 25581 +3 19333 25581 22377 +3 19334 22378 25658 +3 19334 25658 22521 +3 19335 19516 19651 +3 19335 19651 19508 +3 19336 19509 19652 +3 19336 19652 19517 +3 19337 22926 24632 +3 19337 24632 20409 +3 19338 20410 24633 +3 19338 24633 22927 +3 19339 20117 20516 +3 19339 20516 19732 +3 19340 19732 20517 +3 19340 20517 20118 +3 19341 20533 22340 +3 19341 22340 20839 +3 19342 20840 22341 +3 19342 22341 20534 +3 19343 20573 21129 +3 19343 21129 19698 +3 19344 19699 21130 +3 19344 21130 20574 +3 19345 20720 22200 +3 19345 22200 20555 +3 19346 20556 22201 +3 19346 22201 20721 +3 19347 20159 20935 +3 19347 20935 20163 +3 19348 20164 20936 +3 19348 20936 20160 +3 19349 20038 21640 +3 19349 21640 20796 +3 19350 20797 21641 +3 19350 21641 20039 +3 19351 20593 20921 +3 19351 20921 19694 +3 19352 19695 20922 +3 19352 20922 20594 +3 19353 20135 20674 +3 19353 20674 19928 +3 19354 19929 20675 +3 19354 20675 20136 +3 19355 19485 19919 +3 19355 19919 19820 +3 19356 19821 19920 +3 19356 19920 19486 +3 19357 19566 20306 +3 19357 20306 20142 +3 19358 20143 20307 +3 19358 20307 19567 +3 19359 19361 19674 +3 19359 19674 19690 +3 19359 19690 19390 +3 19360 19391 19691 +3 19360 19675 19362 +3 19360 19691 19675 +3 19361 19433 19688 +3 19361 19688 19674 +3 19362 19675 19689 +3 19362 19689 19434 +3 19363 21378 23490 +3 19363 23490 20893 +3 19364 20894 23491 +3 19364 23491 21379 +3 19365 19517 19682 +3 19365 19682 19516 +3 19366 19786 20802 +3 19366 20802 20393 +3 19367 20394 20803 +3 19367 20803 19787 +3 19368 19508 19680 +3 19368 19680 19588 +3 19369 19589 19681 +3 19369 19681 19509 +3 19370 19956 20045 +3 19370 20045 19582 +3 19371 19583 20046 +3 19371 20046 19957 +3 19372 19938 20040 +3 19372 20040 19514 +3 19373 19515 20041 +3 19373 20041 19939 +3 19374 19532 19753 +3 19374 19753 19628 +3 19375 19629 19754 +3 19375 19754 19533 +3 19376 19504 19743 +3 19376 19743 19637 +3 19377 19638 19744 +3 19377 19744 19505 +3 19378 19733 20109 +3 19378 20109 19751 +3 19379 19752 20110 +3 19379 20110 19734 +3 19380 20217 20557 +3 19380 20557 19720 +3 19381 19721 20558 +3 19381 20558 20218 +3 19382 20163 20980 +3 19382 20980 19631 +3 19383 19632 20981 +3 19383 20981 20164 +3 19384 20724 21313 +3 19384 21313 19976 +3 19385 19977 21314 +3 19385 21314 20725 +3 19386 21341 23551 +3 19386 23551 21013 +3 19387 21014 23552 +3 19387 23552 21342 +3 19388 19751 20115 +3 19388 20115 19739 +3 19389 19740 20116 +3 19389 20116 19752 +3 19390 19690 19745 +3 19390 19745 19439 +3 19391 19440 19746 +3 19391 19746 19691 +3 19392 20105 20748 +3 19392 20748 20065 +3 19393 20066 20749 +3 19393 20749 20106 +3 19394 21919 25310 +3 19394 25310 22099 +3 19395 22100 25311 +3 19395 25311 21920 +3 19396 20352 23763 +3 19396 23763 22411 +3 19397 22412 23764 +3 19397 23764 20353 +3 19398 19808 20020 +3 19398 20020 19630 +3 19399 19630 20021 +3 19399 20021 19809 +3 19400 20255 23913 +3 19400 23913 22797 +3 19401 22798 23914 +3 19401 23914 20256 +3 19402 21295 22336 +3 19402 22336 20200 +3 19403 20201 22337 +3 19403 22337 21296 +3 19404 20436 23867 +3 19404 23867 22458 +3 19405 22459 23868 +3 19405 23868 20437 +3 19406 20004 20434 +3 19406 20434 19853 +3 19407 19854 20435 +3 19407 20435 20005 +3 19408 20334 21723 +3 19408 21723 20622 +3 19409 20623 21724 +3 19409 21724 20335 +3 19410 19586 19788 +3 19410 19788 19624 +3 19411 19625 19789 +3 19411 19789 19587 +3 19412 19739 20139 +3 19412 20139 19812 +3 19413 19813 20140 +3 19413 20140 19740 +3 19414 21045 21931 +3 19414 21931 19986 +3 19415 19987 21932 +3 19415 21932 21046 +3 19416 21067 23427 +3 19416 23427 21199 +3 19417 21200 23428 +3 19417 23428 21068 +3 19418 19649 19806 +3 19418 19806 19586 +3 19419 19587 19807 +3 19419 19807 19650 +3 19420 19828 20149 +3 19420 20149 19733 +3 19421 19734 20150 +3 19421 20150 19829 +3 19422 21764 23034 +3 19422 23034 20374 +3 19423 20375 23035 +3 19423 23035 21765 +3 19424 20183 23470 +3 19424 23470 22478 +3 19425 22479 23471 +3 19425 23471 20184 +3 19426 20125 22368 +3 19426 22368 21400 +3 19427 21401 22369 +3 19427 22369 20126 +3 19428 19452 22211 +3 19428 22210 19451 +3 19428 22211 22210 +3 19429 19903 20073 +3 19429 20073 19614 +3 19430 19615 20074 +3 19430 20074 19904 +3 19431 19479 19775 +3 19431 19763 19432 +3 19431 19775 19763 +3 19432 19763 19776 +3 19432 19776 19480 +3 19433 19510 19741 +3 19433 19741 19688 +3 19434 19689 19742 +3 19434 19742 19511 +3 19435 19877 20063 +3 19435 20063 19639 +3 19436 19640 20064 +3 19436 20064 19878 +3 19437 19774 20330 +3 19437 20330 20016 +3 19438 20017 20331 +3 19438 20331 19774 +3 19439 19745 19830 +3 19439 19830 19562 +3 19440 19563 19831 +3 19440 19831 19746 +3 19441 20320 20784 +3 19441 20784 19921 +3 19442 19922 20785 +3 19442 20785 20321 +3 19443 20022 21717 +3 19443 21717 20964 +3 19444 20965 21718 +3 19444 21718 20023 +3 19445 19728 20835 +3 19445 20835 20569 +3 19446 20570 20836 +3 19446 20836 19729 +3 19447 22651 24183 +3 19447 24183 20563 +3 19448 20564 24184 +3 19448 24184 22652 +3 19449 23583 24846 +3 19449 24846 20420 +3 19450 20421 24847 +3 19450 24847 23584 +3 19451 22210 23520 +3 19451 23520 20370 +3 19452 20371 23521 +3 19452 23521 22211 +3 19453 21773 22908 +3 19453 22908 20395 +3 19454 20396 22909 +3 19454 22909 21774 +3 19455 20012 20780 +3 19455 20780 20247 +3 19456 20248 20781 +3 19456 20781 20013 +3 19457 22099 25438 +3 19457 25438 22212 +3 19458 22213 25439 +3 19458 25439 22100 +3 19459 22109 25131 +3 19459 25131 21911 +3 19460 21912 25132 +3 19460 25132 22110 +3 19461 20619 24600 +3 19461 24600 23038 +3 19462 23039 24601 +3 19462 24601 20620 +3 19463 19641 19861 +3 19463 19861 19657 +3 19464 19658 19862 +3 19464 19862 19642 +3 19465 20030 21433 +3 19465 21433 20756 +3 19466 20757 21434 +3 19466 21434 20031 +3 19467 20621 24028 +3 19467 24028 22423 +3 19468 22424 24029 +3 19468 24029 20621 +3 19469 19994 22056 +3 19469 22056 21353 +3 19470 21354 22057 +3 19470 22057 19995 +3 19471 19757 20484 +3 19471 20484 20198 +3 19472 20199 20485 +3 19472 20485 19758 +3 19473 19724 20376 +3 19473 20376 20119 +3 19474 19520 19794 +3 19474 19794 19641 +3 19475 19642 19795 +3 19475 19795 19521 +3 19476 20120 20377 +3 19476 20377 19725 +3 19477 21767 22354 +3 19477 22354 19942 +3 19478 19943 22355 +3 19478 22355 21768 +3 19479 19552 19832 +3 19479 19832 19775 +3 19480 19776 19833 +3 19480 19833 19553 +3 19481 20643 22058 +3 19481 22058 20633 +3 19482 20634 22059 +3 19482 22059 20644 +3 19483 19998 20221 +3 19483 20221 19678 +3 19484 19679 20222 +3 19484 20222 19999 +3 19485 19618 20049 +3 19485 20049 19919 +3 19486 19920 20050 +3 19486 20050 19619 +3 19487 20613 25430 +3 19487 25430 23959 +3 19488 23960 25431 +3 19488 25431 20614 +3 19489 20584 21135 +3 19489 21135 20585 +3 19490 21235 22149 +3 19490 22149 20172 +3 19491 20173 22150 +3 19491 22150 21236 +3 19492 19970 21547 +3 19492 21547 20927 +3 19493 20928 21548 +3 19493 21548 19971 +3 19494 19777 20460 +3 19494 20460 20196 +3 19495 20197 20461 +3 19495 20461 19778 +3 19496 20354 20738 +3 19496 20738 19879 +3 19497 19880 20739 +3 19497 20739 20355 +3 19498 20943 21820 +3 19498 21820 20178 +3 19499 20178 21821 +3 19499 21821 20944 +3 19500 20165 22395 +3 19500 22395 21541 +3 19501 21542 22396 +3 19501 22396 20166 +3 19502 19948 20259 +3 19502 20259 19808 +3 19503 19809 20260 +3 19503 20260 19949 +3 19504 19624 19887 +3 19504 19887 19743 +3 19505 19744 19888 +3 19505 19888 19625 +3 19506 21165 21777 +3 19506 21777 19960 +3 19507 19961 21778 +3 19507 21778 21166 +3 19508 19651 19851 +3 19508 19851 19680 +3 19509 19681 19852 +3 19509 19852 19652 +3 19510 19588 19826 +3 19510 19826 19741 +3 19511 19742 19827 +3 19511 19827 19589 +3 19512 19911 20547 +3 19512 20547 20155 +3 19513 20156 20548 +3 19513 20548 19912 +3 19514 20040 20194 +3 19514 20194 19647 +3 19515 19648 20195 +3 19515 20195 20041 +3 19516 19682 19847 +3 19516 19847 19651 +3 19517 19652 19848 +3 19517 19848 19682 +3 19518 20633 22180 +3 19518 22180 20698 +3 19519 20699 22181 +3 19519 22181 20634 +3 19520 19576 19845 +3 19520 19845 19794 +3 19521 19795 19846 +3 19521 19846 19577 +3 19522 23360 24968 +3 19522 24968 20704 +3 19523 20705 24969 +3 19523 24969 23361 +3 19524 19889 20133 +3 19524 20133 19760 +3 19525 19761 20134 +3 19525 20134 19890 +3 19526 21199 23545 +3 19526 23545 21299 +3 19527 21300 23546 +3 19527 23546 21200 +3 19528 21189 23232 +3 19528 23232 21020 +3 19529 21021 23233 +3 19529 23233 21190 +3 19530 20422 20817 +3 19530 20817 19899 +3 19531 19900 20818 +3 19531 20818 20423 +3 19532 19657 19907 +3 19532 19907 19753 +3 19533 19754 19908 +3 19533 19908 19658 +3 19534 20089 22250 +3 19534 22250 21497 +3 19535 21498 22251 +3 19535 22251 20090 +3 19536 20067 21173 +3 19536 21173 20609 +3 19537 20610 21174 +3 19537 21174 20068 +3 19538 19923 22121 +3 19538 22121 20643 +3 19539 20644 22122 +3 19539 22122 19924 +3 19540 21020 23097 +3 19540 23097 21079 +3 19541 21080 23098 +3 19541 23098 21021 +3 19542 21911 24954 +3 19542 24954 20294 +3 19543 20295 24955 +3 19543 24955 21912 +3 19544 20153 22932 +3 19544 22932 22089 +3 19545 22090 22933 +3 19545 22933 20154 +3 19546 21258 21895 +3 19546 21895 20002 +3 19547 20003 21896 +3 19547 21896 21259 +3 19548 20684 21282 +3 19548 21282 20077 +3 19549 20078 21283 +3 19549 21283 20685 +3 19550 20512 20758 +3 19550 20758 19802 +3 19551 19803 20759 +3 19551 20759 20513 +3 19552 19628 19915 +3 19552 19915 19832 +3 19553 19833 19916 +3 19553 19916 19629 +3 19554 20399 20770 +3 19554 20770 19796 +3 19555 19797 20771 +3 19555 20771 20400 +3 19556 20448 21515 +3 19556 21515 20472 +3 19557 20473 21516 +3 19557 21516 20449 +3 19558 23789 25802 +3 19558 25802 20972 +3 19559 20973 25803 +3 19559 25803 23790 +3 19560 19708 20508 +3 19560 20508 20239 +3 19561 20240 20509 +3 19561 20509 19709 +3 19562 19830 19930 +3 19562 19930 19649 +3 19563 19650 19931 +3 19563 19931 19831 +3 19564 20498 21529 +3 19564 21529 20448 +3 19565 20449 21530 +3 19565 21530 20499 +3 19566 19735 20506 +3 19566 20506 20306 +3 19567 20307 20507 +3 19567 20507 19736 +3 19568 20412 21217 +3 19568 21217 20310 +3 19569 20311 21218 +3 19569 21218 20413 +3 19570 22254 23563 +3 19570 23563 20522 +3 19571 20523 23564 +3 19571 23564 22255 +3 19572 21697 22482 +3 19572 22482 20720 +3 19573 20721 22483 +3 19573 22483 21698 +3 19574 19932 20428 +3 19574 20428 20097 +3 19575 20098 20429 +3 19575 20429 19933 +3 19576 19637 19909 +3 19576 19909 19845 +3 19577 19846 19910 +3 19577 19910 19638 +3 19578 20010 21101 +3 19578 21101 20706 +3 19579 20707 21102 +3 19579 21102 20011 +3 19580 20450 24289 +3 19580 24289 23194 +3 19581 23195 24290 +3 19581 24290 20451 +3 19582 20045 20187 +3 19582 20187 19692 +3 19583 19693 20188 +3 19583 20188 20046 +3 19584 20432 23264 +3 19584 23264 22095 +3 19585 22096 23265 +3 19585 23265 20433 +3 19586 19806 19974 +3 19586 19974 19788 +3 19587 19789 19975 +3 19587 19975 19807 +3 19588 19680 19925 +3 19588 19925 19826 +3 19589 19827 19926 +3 19589 19926 19681 +3 19590 20895 21527 +3 19590 21527 20069 +3 19591 20070 21528 +3 19591 21528 20896 +3 19592 22570 25582 +3 19592 25582 22677 +3 19593 22678 25657 +3 19593 25657 22571 +3 19594 20401 20917 +3 19594 20917 20135 +3 19595 20136 20918 +3 19595 20918 20402 +3 19596 23464 24984 +3 19596 24984 20736 +3 19597 20737 24985 +3 19597 24985 23465 +3 19598 21231 23340 +3 19598 23340 21189 +3 19599 21190 23341 +3 19599 23341 21232 +3 19600 20887 22322 +3 19600 22322 20858 +3 19601 20859 22323 +3 19601 22323 20888 +3 19602 19603 20581 +3 19602 20581 20597 +3 19602 20597 19620 +3 19603 19621 20598 +3 19603 20598 20581 +3 19604 20209 21999 +3 19604 21999 21229 +3 19605 21230 22000 +3 19605 22000 20210 +3 19606 20176 21715 +3 19606 21715 21001 +3 19607 21002 21716 +3 19607 21716 20177 +3 19608 20051 21152 +3 19608 21152 20678 +3 19609 20679 21153 +3 19609 21153 20052 +3 19610 20651 24682 +3 19610 24682 23091 +3 19611 23092 24683 +3 19611 24683 20652 +3 19612 20263 20993 +3 19612 20993 20358 +3 19613 20359 20994 +3 19613 20994 20264 +3 19614 20073 20271 +3 19614 20271 19828 +3 19615 19829 20272 +3 19615 20272 20074 +3 19616 20444 21248 +3 19616 21248 20456 +3 19617 20457 21251 +3 19617 21251 20445 +3 19618 19812 20241 +3 19618 20241 20049 +3 19619 20050 20242 +3 19619 20242 19813 +3 19620 20597 20628 +3 19620 20628 19714 +3 19621 19715 20629 +3 19621 20629 20598 +3 19622 22330 25800 +3 19622 25800 22480 +3 19623 22481 25801 +3 19623 25801 22331 +3 19624 19788 20024 +3 19624 20024 19887 +3 19625 19888 20025 +3 19625 20025 19789 +3 19626 21227 22083 +3 19626 22083 20304 +3 19627 20305 22084 +3 19627 22084 21228 +3 19628 19753 20026 +3 19628 20026 19915 +3 19629 19916 20027 +3 19629 20027 19754 +3 19630 20020 20277 +3 19630 20277 20021 +3 19631 20980 21329 +3 19631 21329 19936 +3 19632 19937 21330 +3 19632 21330 20981 +3 19633 20107 21311 +3 19633 21311 20800 +3 19634 20801 21312 +3 19634 21312 20108 +3 19635 22280 25322 +3 19635 25322 22109 +3 19636 22110 25323 +3 19636 25323 22281 +3 19637 19743 19996 +3 19637 19996 19909 +3 19638 19910 19997 +3 19638 19997 19744 +3 19639 20063 20286 +3 19639 20286 19889 +3 19640 19890 20287 +3 19640 20287 20064 +3 19641 19794 19984 +3 19641 19984 19861 +3 19642 19862 19985 +3 19642 19985 19795 +3 19643 20071 21733 +3 19643 21733 21191 +3 19644 21192 21734 +3 19644 21734 20072 +3 19645 21913 22793 +3 19645 22793 20292 +3 19646 20293 22794 +3 19646 22794 21914 +3 19647 20194 20344 +3 19647 20344 19834 +3 19648 19835 20345 +3 19648 20345 20195 +3 19649 19930 20053 +3 19649 20053 19806 +3 19650 19807 20054 +3 19650 20054 19931 +3 19651 19847 20008 +3 19651 20008 19851 +3 19652 19852 20009 +3 19652 20009 19848 +3 19653 20190 20732 +3 19653 20732 20249 +3 19654 20250 20733 +3 19654 20733 20191 +3 19655 20235 20722 +3 19655 20722 20190 +3 19656 20191 20723 +3 19656 20723 20236 +3 19657 19861 20083 +3 19657 20083 19907 +3 19658 19908 20084 +3 19658 20084 19862 +3 19659 22397 23326 +3 19659 23326 20328 +3 19660 20329 23327 +3 19660 23327 22398 +3 19661 21565 22468 +3 19661 22468 20340 +3 19662 20341 22469 +3 19662 22469 21566 +3 19663 21133 26390 +3 19663 26390 24372 +3 19664 24373 26391 +3 19664 26391 21134 +3 19665 23642 25600 +3 19665 25600 23641 +3 19666 22070 23153 +3 19666 23153 20462 +3 19667 20463 23154 +3 19667 23154 22071 +3 19668 20839 22444 +3 19668 22444 20881 +3 19669 20882 22445 +3 19669 22445 20840 +3 19670 20360 22679 +3 19670 22679 21762 +3 19671 21763 22680 +3 19671 22680 20361 +3 19672 20247 20813 +3 19672 20813 19871 +3 19673 19872 20814 +3 19673 20814 20248 +3 19674 19688 19992 +3 19674 19990 19690 +3 19674 19992 19990 +3 19675 19691 19991 +3 19675 19991 19993 +3 19675 19993 19689 +3 19676 20970 21493 +3 19676 21493 20103 +3 19677 20104 21494 +3 19677 21494 20971 +3 19678 20221 20430 +3 19678 20430 19948 +3 19679 19949 20431 +3 19679 20431 20222 +3 19680 19851 20042 +3 19680 20042 19925 +3 19681 19926 20043 +3 19681 20043 19852 +3 19682 19848 20044 +3 19682 20044 19847 +3 19683 21405 22372 +3 19683 22372 21404 +3 19684 22377 25448 +3 19684 25448 22280 +3 19685 22281 25449 +3 19685 25449 22378 +3 19686 21573 23599 +3 19686 23599 21241 +3 19687 21242 23600 +3 19687 23600 21574 +3 19688 19741 20085 +3 19688 20085 19992 +3 19689 19993 20086 +3 19689 20086 19742 +3 19690 19990 20018 +3 19690 20018 19745 +3 19691 19746 20019 +3 19691 20019 19991 +3 19692 20187 20316 +3 19692 20316 19877 +3 19693 19878 20317 +3 19693 20317 20188 +3 19694 20921 21408 +3 19694 21408 20412 +3 19695 20413 21409 +3 19695 21409 20922 +3 19696 22962 24003 +3 19696 24003 20492 +3 19697 20493 24004 +3 19697 24004 22963 +3 19698 21129 21775 +3 19698 21775 20223 +3 19699 20224 21776 +3 19699 21776 21130 +3 19700 20635 24884 +3 19700 24884 23703 +3 19701 23704 24885 +3 19701 24885 20636 +3 19702 22117 25145 +3 19702 25145 22292 +3 19703 22293 25146 +3 19703 25146 22118 +3 19704 21081 26372 +3 19704 26372 24464 +3 19705 24465 26373 +3 19705 26373 21082 +3 19706 21299 23705 +3 19706 23705 21628 +3 19707 21629 23706 +3 19707 23706 21300 +3 19708 19946 20710 +3 19708 20710 20508 +3 19709 20509 20711 +3 19709 20711 19947 +3 19710 24038 25436 +3 19710 25436 20798 +3 19711 20799 25437 +3 19711 25437 24039 +3 19712 20582 21398 +3 19712 21398 20444 +3 19713 20445 21399 +3 19713 21399 20583 +3 19714 20628 20947 +3 19714 20947 20059 +3 19715 20060 20948 +3 19715 20948 20629 +3 19716 22101 23129 +3 19716 23129 20458 +3 19717 20459 23130 +3 19717 23130 22102 +3 19718 20296 20776 +3 19718 20776 20235 +3 19719 20236 20777 +3 19719 20777 20297 +3 19720 20557 20897 +3 19720 20897 20117 +3 19721 20118 20898 +3 19721 20898 20558 +3 19722 20622 21799 +3 19722 21799 20714 +3 19723 20715 21800 +3 19723 21800 20623 +3 19724 20016 20663 +3 19724 20663 20376 +3 19725 20377 20664 +3 19725 20664 20017 +3 19726 20952 21555 +3 19726 21555 20227 +3 19727 20228 21556 +3 19727 21556 20953 +3 19728 20036 21193 +3 19728 21193 20835 +3 19729 20836 21194 +3 19729 21194 20037 +3 19730 20189 21163 +3 19730 21163 20686 +3 19731 20687 21164 +3 19731 21164 20189 +3 19732 20516 20862 +3 19732 20862 20517 +3 19733 20149 20468 +3 19733 20468 20109 +3 19734 20110 20469 +3 19734 20469 20150 +3 19735 19962 20712 +3 19735 20712 20506 +3 19736 20507 20713 +3 19736 20713 19963 +3 19737 20249 20819 +3 19737 20819 20342 +3 19738 20343 20820 +3 19738 20820 20250 +3 19739 20115 20474 +3 19739 20474 20139 +3 19740 20140 20475 +3 19740 20475 20116 +3 19741 19826 20147 +3 19741 20147 20085 +3 19742 20086 20148 +3 19742 20148 19827 +3 19743 19887 20131 +3 19743 20131 19996 +3 19744 19997 20132 +3 19744 20132 19888 +3 19745 20018 20093 +3 19745 20093 19830 +3 19746 19831 20094 +3 19746 20094 20019 +3 19747 21241 23673 +3 19747 23673 21707 +3 19748 21708 23674 +3 19748 23674 21242 +3 19749 22653 23901 +3 19749 23901 20655 +3 19750 20656 23902 +3 19750 23902 22654 +3 19751 20109 20480 +3 19751 20480 20115 +3 19752 20116 20481 +3 19752 20481 20110 +3 19753 19907 20181 +3 19753 20181 20026 +3 19754 20027 20182 +3 19754 20182 19908 +3 19755 22693 23981 +3 19755 23981 20726 +3 19756 20727 23982 +3 19756 23982 22694 +3 19757 20097 20792 +3 19757 20792 20484 +3 19758 20485 20793 +3 19758 20793 20098 +3 19759 20456 21461 +3 19759 21461 20653 +3 19760 20133 20389 +3 19760 20389 19903 +3 19761 19904 20390 +3 19761 20390 20134 +3 19762 20654 21462 +3 19762 21462 20457 +3 19763 19775 20145 +3 19763 20145 20146 +3 19763 20146 19776 +3 19764 20858 22574 +3 19764 22574 21097 +3 19765 21098 22575 +3 19765 22575 20859 +3 19766 23222 24666 +3 19766 24666 20853 +3 19767 20854 24667 +3 19767 24667 23223 +3 19768 22632 24133 +3 19768 24133 20855 +3 19769 20855 24134 +3 19769 24134 22633 +3 19770 22480 25928 +3 19770 25928 22641 +3 19771 22642 25929 +3 19771 25929 22481 +3 19772 21519 23589 +3 19772 23589 21378 +3 19773 21379 23590 +3 19773 23590 21520 +3 19774 20331 20669 +3 19774 20669 20330 +3 19775 19832 20179 +3 19775 20179 20145 +3 19776 20146 20180 +3 19776 20180 19833 +3 19777 20119 20772 +3 19777 20772 20460 +3 19778 20461 20773 +3 19778 20773 20120 +3 19779 20815 24271 +3 19779 24271 22853 +3 19780 22854 24272 +3 19780 24272 20816 +3 19781 19800 20561 +3 19781 20561 20562 +3 19781 20562 19801 +3 19782 20524 24990 +3 19782 24990 22117 +3 19783 22118 24991 +3 19783 24991 20525 +3 19784 22709 23643 +3 19784 23643 20464 +3 19785 20465 23644 +3 19785 23644 22710 +3 19786 20251 21284 +3 19786 21284 20802 +3 19787 20803 21285 +3 19787 21285 20252 +3 19788 19974 20211 +3 19788 20211 20024 +3 19789 20025 20212 +3 19789 20212 19975 +3 19790 20665 21869 +3 19790 21869 20788 +3 19791 20789 21870 +3 19791 21870 20666 +3 19792 20899 25008 +3 19792 25008 23472 +3 19793 23473 25009 +3 19793 25009 20900 +3 19794 19845 20157 +3 19794 20157 19984 +3 19795 19985 20158 +3 19795 20158 19846 +3 19796 20770 21055 +3 19796 21055 20087 +3 19797 20088 21056 +3 19797 21056 20771 +3 19798 21201 25794 +3 19798 25794 23907 +3 19799 23908 25795 +3 19799 25795 21202 +3 19800 19869 20579 +3 19800 20579 20561 +3 19801 20562 20580 +3 19801 20580 19870 +3 19802 20758 21039 +3 19802 21039 20081 +3 19803 20082 21040 +3 19803 21040 20759 +3 19804 20881 22536 +3 19804 22536 21061 +3 19805 21062 22537 +3 19805 22537 20882 +3 19806 20053 20229 +3 19806 20229 19974 +3 19807 19975 20230 +3 19807 20230 20054 +3 19808 20259 20446 +3 19808 20446 20020 +3 19809 20021 20447 +3 19809 20447 20260 +3 19810 20405 21136 +3 19810 21136 20502 +3 19811 20503 21137 +3 19811 21137 20406 +3 19812 20139 20553 +3 19812 20553 20241 +3 19813 20242 20554 +3 19813 20554 20140 +3 19814 20688 23246 +3 19814 23246 22048 +3 19815 22049 23247 +3 19815 23247 20689 +3 19816 19857 21459 +3 19816 21444 19817 +3 19816 21459 21444 +3 19817 21444 21460 +3 19817 21460 19858 +3 19818 20845 21907 +3 19818 21907 20665 +3 19819 20666 21908 +3 19819 21908 20846 +3 19820 19919 20372 +3 19820 20372 20490 +3 19820 20490 19938 +3 19821 19939 20491 +3 19821 20373 19920 +3 19821 20491 20373 +3 19822 19839 20945 +3 19822 20945 20946 +3 19822 20946 19840 +3 19823 19841 22492 +3 19823 22492 22493 +3 19823 22493 19842 +3 19824 20535 21158 +3 19824 21158 20405 +3 19825 20406 21159 +3 19825 21159 20536 +3 19826 19925 20243 +3 19826 20243 20147 +3 19827 20148 20244 +3 19827 20244 19926 +3 19828 20271 20587 +3 19828 20587 20149 +3 19829 20150 20588 +3 19829 20588 20272 +3 19830 20093 20185 +3 19830 20185 19930 +3 19831 19931 20186 +3 19831 20186 20094 +3 19832 19915 20225 +3 19832 20225 20179 +3 19833 20180 20226 +3 19833 20226 19916 +3 19834 20344 20526 +3 19834 20526 19998 +3 19835 19999 20527 +3 19835 20527 20345 +3 19836 19850 20357 +3 19836 20356 19849 +3 19836 20357 20356 +3 19837 19972 20760 +3 19837 20626 20004 +3 19837 20760 20626 +3 19838 20005 20627 +3 19838 20627 20761 +3 19838 20761 19973 +3 19839 19881 20984 +3 19839 20984 20945 +3 19840 20946 20985 +3 19840 20985 19882 +3 19841 20682 23711 +3 19841 23711 22492 +3 19842 22493 23712 +3 19842 23712 20683 +3 19843 21243 22685 +3 19843 22685 20887 +3 19844 20888 22686 +3 19844 22686 21244 +3 19845 19909 20204 +3 19845 20204 20157 +3 19846 20158 20205 +3 19846 20205 19910 +3 19847 20044 20215 +3 19847 20215 20008 +3 19848 20009 20216 +3 19848 20216 20044 +3 19849 20356 20397 +3 19849 20397 19893 +3 19850 19894 20398 +3 19850 20398 20357 +3 19851 20008 20213 +3 19851 20213 20042 +3 19852 20043 20214 +3 19852 20214 20009 +3 19853 20434 20871 +3 19853 20871 20296 +3 19854 20297 20872 +3 19854 20872 20435 +3 19855 20742 21603 +3 19855 21603 20582 +3 19856 20583 21604 +3 19856 21604 20743 +3 19857 20414 22224 +3 19857 22224 21459 +3 19858 21460 22225 +3 19858 22225 20415 +3 19859 22835 25583 +3 19859 25583 22743 +3 19860 22744 25656 +3 19860 25656 22836 +3 19861 19984 20206 +3 19861 20206 20083 +3 19862 20084 20207 +3 19862 20207 19985 +3 19863 20571 22645 +3 19863 22645 21685 +3 19864 21686 22646 +3 19864 22646 20572 +3 19865 21609 23720 +3 19865 23720 21519 +3 19866 21520 23721 +3 19866 23721 21610 +3 19867 20714 21959 +3 19867 21959 20856 +3 19868 20857 21960 +3 19868 21960 20715 +3 19869 19954 20657 +3 19869 20657 20579 +3 19870 20580 20658 +3 19870 20658 19955 +3 19871 20813 20997 +3 19871 20997 20061 +3 19872 20062 20998 +3 19872 20998 20814 +3 19873 22624 25790 +3 19873 25790 22520 +3 19874 22521 25791 +3 19874 25791 22625 +3 19875 23330 24366 +3 19875 24366 20700 +3 19876 20701 24367 +3 19876 24367 23331 +3 19877 20316 20500 +3 19877 20500 20063 +3 19878 20064 20501 +3 19878 20501 20317 +3 19879 20738 21085 +3 19879 21085 20217 +3 19880 20218 21086 +3 19880 21086 20739 +3 19881 20273 21551 +3 19881 21551 20984 +3 19882 20985 21552 +3 19882 21552 20274 +3 19883 20941 25016 +3 19883 25016 23613 +3 19884 23614 25017 +3 19884 25017 20942 +3 19885 20502 21280 +3 19885 21280 20607 +3 19886 20608 21281 +3 19886 21281 20503 +3 19887 20024 20265 +3 19887 20265 20131 +3 19888 20132 20266 +3 19888 20266 20025 +3 19889 20286 20518 +3 19889 20518 20133 +3 19890 20134 20519 +3 19890 20519 20287 +3 19891 22641 26131 +3 19891 26131 22851 +3 19892 22852 26132 +3 19892 26132 22642 +3 19893 20397 20452 +3 19893 20452 19956 +3 19894 19957 20453 +3 19894 20453 20398 +3 19895 21357 23413 +3 19895 23413 21523 +3 19896 21524 23414 +3 19896 23414 21358 +3 19897 22292 25328 +3 19897 25328 22442 +3 19898 22443 25329 +3 19898 25329 22293 +3 19899 20817 21301 +3 19899 21301 20320 +3 19900 20321 21302 +3 19900 21302 20818 +3 19901 21412 23304 +3 19901 23304 21357 +3 19902 21358 23305 +3 19902 23305 21413 +3 19903 20389 20545 +3 19903 20545 20073 +3 19904 20074 20546 +3 19904 20546 20390 +3 19905 20754 23175 +3 19905 23175 22129 +3 19906 22130 23176 +3 19906 23176 20755 +3 19907 20083 20318 +3 19907 20318 20181 +3 19908 20182 20319 +3 19908 20319 20084 +3 19909 19996 20275 +3 19909 20275 20204 +3 19910 20205 20276 +3 19910 20276 19997 +3 19911 20342 20976 +3 19911 20976 20547 +3 19912 20548 20977 +3 19912 20977 20343 +3 19913 24438 26352 +3 19913 26352 21343 +3 19914 21344 26353 +3 19914 26353 24439 +3 19915 20026 20308 +3 19915 20308 20225 +3 19916 20226 20309 +3 19916 20309 20027 +3 19917 23248 24730 +3 19917 24730 20863 +3 19918 20864 24731 +3 19918 24731 23249 +3 19919 20049 20504 +3 19919 20504 20372 +3 19920 20373 20505 +3 19920 20505 20050 +3 19921 20784 21053 +3 19921 21053 20401 +3 19922 20402 21054 +3 19922 21054 20785 +3 19923 20332 22673 +3 19923 22673 22121 +3 19924 22122 22674 +3 19924 22674 20333 +3 19925 20042 20324 +3 19925 20324 20243 +3 19926 20244 20325 +3 19926 20325 20043 +3 19927 23750 25601 +3 19927 25601 23751 +3 19928 20674 21359 +3 19928 21359 20535 +3 19929 20536 21360 +3 19929 21360 20675 +3 19930 20185 20288 +3 19930 20288 20053 +3 19931 20054 20289 +3 19931 20289 20186 +3 19932 20155 20808 +3 19932 20808 20428 +3 19933 20429 20809 +3 19933 20809 20156 +3 19934 20806 23738 +3 19934 23738 22524 +3 19935 22525 23739 +3 19935 23739 20807 +3 19936 21329 21727 +3 19936 21727 20261 +3 19937 20262 21728 +3 19937 21728 21330 +3 19938 20490 20617 +3 19938 20617 20040 +3 19939 20041 20618 +3 19939 20618 20491 +3 19940 21816 22725 +3 19940 22725 20541 +3 19941 20542 22726 +3 19941 22726 21817 +3 19942 22354 23167 +3 19942 23167 20494 +3 19943 20495 23168 +3 19943 23168 22355 +3 19944 20653 21756 +3 19944 21756 20873 +3 19945 20874 21757 +3 19945 21757 20654 +3 19946 20198 20923 +3 19946 20923 20710 +3 19947 20711 20924 +3 19947 20924 20199 +3 19948 20430 20694 +3 19948 20694 20259 +3 19949 20260 20695 +3 19949 20695 20431 +3 19950 20788 22091 +3 19950 22091 20962 +3 19951 20963 22092 +3 19951 22092 20789 +3 19952 22442 25454 +3 19952 25454 22570 +3 19953 22571 25455 +3 19953 25455 22443 +3 19954 20239 20901 +3 19954 20901 20657 +3 19955 20658 20902 +3 19955 20902 20240 +3 19956 20452 20543 +3 19956 20543 20045 +3 19957 20046 20544 +3 19957 20544 20453 +3 19958 24510 26324 +3 19958 26324 21293 +3 19959 21294 26325 +3 19959 26325 24511 +3 19960 21777 22391 +3 19960 22391 20424 +3 19961 20425 22392 +3 19961 22392 21778 +3 19962 20196 20919 +3 19962 20919 20712 +3 19963 20713 20920 +3 19963 20920 20197 +3 19964 21015 22393 +3 19964 22393 21029 +3 19965 21030 22394 +3 19965 22394 21016 +3 19966 21523 23510 +3 19966 23510 21573 +3 19967 21574 23511 +3 19967 23511 21524 +3 19968 20991 25444 +3 19968 25444 24125 +3 19969 24126 25445 +3 19969 25445 20992 +3 19970 20466 22332 +3 19970 22332 21547 +3 19971 21548 22333 +3 19971 22333 20467 +3 19972 20142 20903 +3 19972 20903 20760 +3 19973 20761 20904 +3 19973 20904 20143 +3 19974 20229 20386 +3 19974 20386 20211 +3 19975 20212 20387 +3 19975 20387 20230 +3 19976 21313 22145 +3 19976 22145 20593 +3 19977 20594 22146 +3 19977 22146 21314 +3 19978 23791 24938 +3 19978 24938 20851 +3 19979 20852 24939 +3 19979 24939 23792 +3 19980 22476 25167 +3 19980 25167 22306 +3 19981 22307 25168 +3 19981 25168 22477 +3 19982 22360 23447 +3 19982 23447 20762 +3 19983 20763 23448 +3 19983 23448 22361 +3 19984 20157 20338 +3 19984 20338 20206 +3 19985 20207 20339 +3 19985 20339 20158 +3 19986 21931 22745 +3 19986 22745 20575 +3 19987 20576 22746 +3 19987 22746 21932 +3 19988 21097 22540 +3 19988 22540 21015 +3 19989 21016 22541 +3 19989 22541 21098 +3 19990 19992 20298 +3 19990 20298 20314 +3 19990 20314 20018 +3 19991 20019 20315 +3 19991 20299 19993 +3 19991 20315 20299 +3 19992 20085 20368 +3 19992 20368 20298 +3 19993 20299 20369 +3 19993 20369 20086 +3 19994 21061 22781 +3 19994 22781 22056 +3 19995 22057 22782 +3 19995 22782 21062 +3 19996 20131 20366 +3 19996 20366 20275 +3 19997 20276 20367 +3 19997 20367 20132 +3 19998 20526 20708 +3 19998 20708 20221 +3 19999 20222 20709 +3 19999 20709 20527 +3 20000 22805 25916 +3 20000 25916 22624 +3 20001 22625 25917 +3 20001 25917 22806 +3 20002 21895 22582 +3 20002 22582 20514 +3 20003 20515 22583 +3 20003 22583 21896 +3 20004 20626 21071 +3 20004 21071 20434 +3 20005 20435 21072 +3 20005 21072 20627 +3 20006 21029 22456 +3 20006 22456 20350 +3 20007 20351 22457 +3 20007 22457 21030 +3 20008 20215 20364 +3 20008 20364 20213 +3 20009 20214 20365 +3 20009 20365 20216 +3 20010 20393 21599 +3 20010 21599 21101 +3 20011 21102 21600 +3 20011 21600 20394 +3 20012 20607 21473 +3 20012 21473 20780 +3 20013 20781 21474 +3 20013 21474 20608 +3 20014 20744 24123 +3 20014 24123 23149 +3 20015 23150 24124 +3 20015 24124 20745 +3 20016 20330 20958 +3 20016 20958 20663 +3 20017 20664 20959 +3 20017 20959 20331 +3 20018 20314 20346 +3 20018 20346 20093 +3 20019 20094 20347 +3 20019 20347 20315 +3 20020 20446 20676 +3 20020 20676 20277 +3 20021 20277 20677 +3 20021 20677 20447 +3 20022 20624 22532 +3 20022 22532 21717 +3 20023 21718 22533 +3 20023 22533 20625 +3 20024 20211 20403 +3 20024 20403 20265 +3 20025 20266 20404 +3 20025 20404 20212 +3 20026 20181 20439 +3 20026 20439 20308 +3 20027 20309 20440 +3 20027 20440 20182 +3 20028 21127 22196 +3 20028 22196 20845 +3 20029 20846 22197 +3 20029 22197 21128 +3 20030 20632 22230 +3 20030 22230 21433 +3 20031 21434 22231 +3 20031 22231 20632 +3 20032 20639 23486 +3 20032 23486 22665 +3 20033 22666 23487 +3 20033 23487 20640 +3 20034 22306 25014 +3 20034 25014 20730 +3 20035 20731 25015 +3 20035 25015 22307 +3 20036 20348 21616 +3 20036 21616 21193 +3 20037 21194 21617 +3 20037 21617 20349 +3 20038 20442 22184 +3 20038 22184 21640 +3 20039 21641 22185 +3 20039 22185 20443 +3 20040 20617 20750 +3 20040 20750 20194 +3 20041 20195 20751 +3 20041 20751 20618 +3 20042 20213 20476 +3 20042 20476 20324 +3 20043 20325 20477 +3 20043 20477 20214 +3 20044 20216 20411 +3 20044 20411 20215 +3 20045 20543 20746 +3 20045 20746 20187 +3 20046 20188 20747 +3 20046 20747 20544 +3 20047 23983 25786 +3 20047 25786 21435 +3 20048 21436 25787 +3 20048 25787 23984 +3 20049 20241 20647 +3 20049 20647 20504 +3 20050 20505 20648 +3 20050 20648 20242 +3 20051 20362 21758 +3 20051 21758 21152 +3 20052 21153 21759 +3 20052 21759 20363 +3 20053 20288 20416 +3 20053 20416 20229 +3 20054 20230 20417 +3 20054 20417 20289 +3 20055 21901 23825 +3 20055 23825 21609 +3 20056 21610 23826 +3 20056 23826 21902 +3 20057 21646 26866 +3 20057 26866 24848 +3 20058 24849 26867 +3 20058 26867 21647 +3 20059 20947 21390 +3 20059 21390 20399 +3 20060 20400 21391 +3 20060 21391 20948 +3 20061 20997 21260 +3 20061 21260 20280 +3 20062 20281 21261 +3 20062 21261 20998 +3 20063 20500 20692 +3 20063 20692 20286 +3 20064 20287 20693 +3 20064 20693 20501 +3 20065 20748 21583 +3 20065 21583 20742 +3 20066 20743 21584 +3 20066 21584 20749 +3 20067 20358 21581 +3 20067 21581 21173 +3 20068 21174 21582 +3 20068 21582 20359 +3 20069 21527 22188 +3 20069 22188 20573 +3 20070 20574 22189 +3 20070 22189 21528 +3 20071 20486 22314 +3 20071 22314 21733 +3 20072 21734 22315 +3 20072 22315 20487 +3 20073 20545 20718 +3 20073 20718 20271 +3 20074 20272 20719 +3 20074 20719 20546 +3 20075 21116 24722 +3 20075 24722 23374 +3 20076 23375 24723 +3 20076 24723 21117 +3 20077 21282 21951 +3 20077 21951 20584 +3 20078 20585 21952 +3 20078 21952 21283 +3 20079 21122 24229 +3 20079 24229 22833 +3 20080 22834 24230 +3 20080 24230 21122 +3 20081 21039 21418 +3 20081 21418 20354 +3 20082 20355 21419 +3 20082 21419 21040 +3 20083 20206 20418 +3 20083 20418 20318 +3 20084 20319 20419 +3 20084 20419 20207 +3 20085 20147 20470 +3 20085 20470 20368 +3 20086 20369 20471 +3 20086 20471 20148 +3 20087 21055 21537 +3 20087 21537 20422 +3 20088 20423 21538 +3 20088 21538 21056 +3 20089 20667 23028 +3 20089 23028 22250 +3 20090 22251 23029 +3 20090 23029 20668 +3 20091 23627 25032 +3 20091 25032 21185 +3 20092 21186 25033 +3 20092 25033 23628 +3 20093 20346 20426 +3 20093 20426 20185 +3 20094 20186 20427 +3 20094 20427 20347 +3 20095 21150 26420 +3 20095 26420 24916 +3 20096 24917 26421 +3 20096 26421 21151 +3 20097 20428 21187 +3 20097 21187 20792 +3 20098 20793 21188 +3 20098 21188 20429 +3 20099 21671 26774 +3 20099 26774 24866 +3 20100 24867 26775 +3 20100 26775 21672 +3 20101 21601 23765 +3 20101 23765 21891 +3 20102 21892 23766 +3 20102 23766 21602 +3 20103 21493 22046 +3 20103 22046 20528 +3 20104 20529 22047 +3 20104 22047 21494 +3 20105 20312 21620 +3 20105 21620 20748 +3 20106 20749 21621 +3 20106 21621 20313 +3 20107 20609 21925 +3 20107 21925 21311 +3 20108 21312 21926 +3 20108 21926 20610 +3 20109 20468 20843 +3 20109 20843 20480 +3 20110 20481 20844 +3 20110 20844 20469 +3 20111 22677 25784 +3 20111 25784 22801 +3 20112 22802 25785 +3 20112 25785 22678 +3 20113 22987 26107 +3 20113 26107 22805 +3 20114 22806 26108 +3 20114 26108 22988 +3 20115 20480 20849 +3 20115 20849 20474 +3 20116 20475 20850 +3 20116 20850 20481 +3 20117 20897 21402 +3 20117 21402 20516 +3 20118 20517 21403 +3 20118 21403 20898 +3 20119 20376 21041 +3 20119 21041 20772 +3 20120 20773 21042 +3 20120 21042 20377 +3 20121 23052 24364 +3 20121 24364 21095 +3 20122 21096 24365 +3 20122 24365 23053 +3 20123 20929 24010 +3 20123 24010 22887 +3 20124 22888 24011 +3 20124 24011 20930 +3 20125 20833 23381 +3 20125 23381 22368 +3 20126 22369 23382 +3 20126 23382 20834 +3 20127 21011 24113 +3 20127 24113 22920 +3 20128 22921 24114 +3 20128 24114 21012 +3 20129 22902 25584 +3 20129 25584 22999 +3 20130 23000 25655 +3 20130 25655 22903 +3 20131 20265 20510 +3 20131 20510 20366 +3 20132 20367 20511 +3 20132 20511 20266 +3 20133 20518 20764 +3 20133 20764 20389 +3 20134 20390 20765 +3 20134 20765 20519 +3 20135 20917 21634 +3 20135 21634 20674 +3 20136 20675 21635 +3 20136 21635 20918 +3 20137 21707 23756 +3 20137 23756 21822 +3 20138 21823 23757 +3 20138 23757 21708 +3 20139 20474 20867 +3 20139 20867 20553 +3 20140 20554 20868 +3 20140 20868 20475 +3 20141 21339 22697 +3 20141 22697 21382 +3 20142 20306 21123 +3 20142 21123 20903 +3 20143 20904 21124 +3 20143 21124 20307 +3 20144 21383 22698 +3 20144 22698 21340 +3 20145 20179 20537 +3 20145 20530 20146 +3 20145 20537 20530 +3 20146 20530 20538 +3 20146 20538 20180 +3 20147 20243 20551 +3 20147 20551 20470 +3 20148 20471 20552 +3 20148 20552 20244 +3 20149 20587 20885 +3 20149 20885 20468 +3 20150 20469 20886 +3 20150 20886 20588 +3 20151 22026 23829 +3 20151 23829 21601 +3 20152 21602 23830 +3 20152 23830 22027 +3 20153 20768 23785 +3 20153 23785 22932 +3 20154 22933 23786 +3 20154 23786 20769 +3 20155 20547 21270 +3 20155 21270 20808 +3 20156 20809 21271 +3 20156 21271 20548 +3 20157 20204 20520 +3 20157 20520 20338 +3 20158 20339 20521 +3 20158 20521 20205 +3 20159 20962 22004 +3 20159 22004 20935 +3 20160 20936 22005 +3 20160 22005 20963 +3 20161 22610 25342 +3 20161 25342 22476 +3 20162 22477 25343 +3 20162 25343 22611 +3 20163 20935 22022 +3 20163 22022 20980 +3 20164 20981 22023 +3 20164 22023 20936 +3 20165 20827 23356 +3 20165 23356 22395 +3 20166 22396 23357 +3 20166 23357 20828 +3 20167 21579 26304 +3 20167 26304 24482 +3 20168 24483 26305 +3 20168 26305 21580 +3 20169 23836 25602 +3 20169 25602 23835 +3 20170 21315 22787 +3 20170 22787 21243 +3 20171 21244 22788 +3 20171 22788 21316 +3 20172 22149 22975 +3 20172 22975 20774 +3 20173 20775 22976 +3 20173 22976 22150 +3 20174 23744 25049 +3 20174 25049 21209 +3 20175 21210 25050 +3 20175 25050 23745 +3 20176 20756 22464 +3 20176 22464 21715 +3 20177 21716 22465 +3 20177 22465 20757 +3 20178 21820 22729 +3 20178 22729 21821 +3 20179 20225 20565 +3 20179 20565 20537 +3 20180 20538 20566 +3 20180 20566 20226 +3 20181 20318 20599 +3 20181 20599 20439 +3 20182 20440 20600 +3 20182 20600 20319 +3 20183 20939 24448 +3 20183 24448 23470 +3 20184 23471 24449 +3 20184 24449 20940 +3 20185 20426 20539 +3 20185 20539 20288 +3 20186 20289 20540 +3 20186 20540 20427 +3 20187 20746 20865 +3 20187 20865 20316 +3 20188 20317 20866 +3 20188 20866 20747 +3 20189 21164 21766 +3 20189 21766 21163 +3 20190 20722 21276 +3 20190 21276 20732 +3 20191 20733 21277 +3 20191 21277 20723 +3 20192 21525 26286 +3 20192 26286 24570 +3 20193 24571 26287 +3 20193 26287 21526 +3 20194 20750 20883 +3 20194 20883 20344 +3 20195 20345 20884 +3 20195 20884 20751 +3 20196 20460 21215 +3 20196 21215 20919 +3 20197 20920 21216 +3 20197 21216 20461 +3 20198 20484 21289 +3 20198 21289 20923 +3 20199 20924 21290 +3 20199 21290 20485 +3 20200 22336 23435 +3 20200 23435 21009 +3 20201 21010 23436 +3 20201 23436 22337 +3 20202 22743 25466 +3 20202 25466 22610 +3 20203 22611 25467 +3 20203 25467 22744 +3 20204 20275 20577 +3 20204 20577 20520 +3 20205 20521 20578 +3 20205 20578 20276 +3 20206 20338 20567 +3 20206 20567 20418 +3 20207 20419 20568 +3 20207 20568 20339 +3 20208 20234 22762 +3 20208 22761 20233 +3 20208 22762 22761 +3 20209 20796 22821 +3 20209 22821 21999 +3 20210 22000 22822 +3 20210 22822 20797 +3 20211 20386 20603 +3 20211 20603 20403 +3 20212 20404 20604 +3 20212 20604 20387 +3 20213 20364 20645 +3 20213 20645 20476 +3 20214 20477 20646 +3 20214 20646 20365 +3 20215 20411 20595 +3 20215 20595 20364 +3 20216 20365 20596 +3 20216 20596 20411 +3 20217 21085 21539 +3 20217 21539 20557 +3 20218 20558 21540 +3 20218 21540 21086 +3 20219 21822 23847 +3 20219 23847 21905 +3 20220 21906 23848 +3 20220 23848 21823 +3 20221 20708 20912 +3 20221 20912 20430 +3 20222 20431 20913 +3 20222 20913 20709 +3 20223 21775 22453 +3 20223 22453 20724 +3 20224 20725 22454 +3 20224 22454 21776 +3 20225 20308 20615 +3 20225 20615 20565 +3 20226 20566 20616 +3 20226 20616 20309 +3 20227 21555 22182 +3 20227 22182 20684 +3 20228 20685 22183 +3 20228 22183 21556 +3 20229 20416 20605 +3 20229 20605 20386 +3 20230 20387 20606 +3 20230 20606 20417 +3 20231 24209 25452 +3 20231 25452 21221 +3 20232 21222 25453 +3 20232 25453 24210 +3 20233 22761 23863 +3 20233 23863 21003 +3 20234 21004 23864 +3 20234 23864 22762 +3 20235 20776 21361 +3 20235 21361 20722 +3 20236 20723 21362 +3 20236 21362 20777 +3 20237 21156 24776 +3 20237 24776 23411 +3 20238 23412 24777 +3 20238 24777 21157 +3 20239 20508 21264 +3 20239 21264 20901 +3 20240 20902 21265 +3 20240 21265 20509 +3 20241 20553 20978 +3 20241 20978 20647 +3 20242 20648 20979 +3 20242 20979 20554 +3 20243 20324 20641 +3 20243 20641 20551 +3 20244 20552 20642 +3 20244 20642 20325 +3 20245 22851 26322 +3 20245 26322 24818 +3 20246 24819 26323 +3 20246 26323 22852 +3 20247 20780 21479 +3 20247 21479 20813 +3 20248 20814 21480 +3 20248 21480 20781 +3 20249 20732 21394 +3 20249 21394 20819 +3 20250 20820 21397 +3 20250 21397 20733 +3 20251 20686 21883 +3 20251 21883 21284 +3 20252 21285 21884 +3 20252 21884 20687 +3 20253 22801 25910 +3 20253 25910 22952 +3 20254 22953 25911 +3 20254 25911 22802 +3 20255 21069 24972 +3 20255 24972 23913 +3 20256 23914 24973 +3 20256 24973 21070 +3 20257 22504 25191 +3 20257 25191 22659 +3 20258 22660 25192 +3 20258 25192 22505 +3 20259 20694 20875 +3 20259 20875 20446 +3 20260 20447 20876 +3 20260 20876 20695 +3 20261 21727 22202 +3 20261 22202 20611 +3 20262 20612 22203 +3 20262 22203 21728 +3 20263 20873 21840 +3 20263 21840 20993 +3 20264 20994 21841 +3 20264 21841 20874 +3 20265 20403 20659 +3 20265 20659 20510 +3 20266 20511 20660 +3 20266 20660 20404 +3 20267 21521 22837 +3 20267 22837 21315 +3 20268 21316 22838 +3 20268 22838 21522 +3 20269 21856 23601 +3 20269 23601 21701 +3 20270 21702 23602 +3 20270 23602 21857 +3 20271 20718 21033 +3 20271 21033 20587 +3 20272 20588 21034 +3 20272 21034 20719 +3 20273 20678 22105 +3 20273 22105 21551 +3 20274 21552 22106 +3 20274 22106 20679 +3 20275 20366 20670 +3 20275 20670 20577 +3 20276 20578 20671 +3 20276 20671 20367 +3 20277 20676 20909 +3 20277 20909 20677 +3 20278 24886 26800 +3 20278 26800 21838 +3 20279 21839 26801 +3 20279 26801 24887 +3 20280 21260 21567 +3 20280 21567 20512 +3 20281 20513 21568 +3 20281 21568 21261 +3 20282 21701 23466 +3 20282 23466 21767 +3 20283 21768 23467 +3 20283 23467 21702 +3 20284 21585 22916 +3 20284 22916 21339 +3 20285 21340 22919 +3 20285 22919 21586 +3 20286 20692 20889 +3 20286 20889 20518 +3 20287 20519 20890 +3 20287 20890 20693 +3 20288 20539 20672 +3 20288 20672 20416 +3 20289 20417 20673 +3 20289 20673 20540 +3 20290 20933 25042 +3 20290 25042 22504 +3 20291 22505 25043 +3 20291 25043 20934 +3 20292 22793 23897 +3 20292 23897 21142 +3 20293 21143 23898 +3 20293 23898 22794 +3 20294 24954 26392 +3 20294 26392 21363 +3 20295 21364 26393 +3 20295 26393 24955 +3 20296 20871 21477 +3 20296 21477 20776 +3 20297 20777 21478 +3 20297 21478 20872 +3 20298 20368 20702 +3 20298 20630 20314 +3 20298 20702 20630 +3 20299 20315 20631 +3 20299 20631 20703 +3 20299 20703 20369 +3 20300 21681 25774 +3 20300 25774 24091 +3 20301 24092 25775 +3 20301 25775 21682 +3 20302 24914 26728 +3 20302 26728 21865 +3 20303 21866 26729 +3 20303 26729 24915 +3 20304 22083 22956 +3 20304 22956 20943 +3 20305 20944 22957 +3 20305 22957 22084 +3 20306 20506 21368 +3 20306 21368 21123 +3 20307 21124 21369 +3 20307 21369 20507 +3 20308 20439 20734 +3 20308 20734 20615 +3 20309 20616 20735 +3 20309 20735 20440 +3 20310 21217 22278 +3 20310 22278 21127 +3 20311 21128 22279 +3 20311 22279 21218 +3 20312 20569 21937 +3 20312 21937 21620 +3 20313 21621 21938 +3 20313 21938 20570 +3 20314 20630 20661 +3 20314 20661 20346 +3 20315 20347 20662 +3 20315 20662 20631 +3 20316 20865 21059 +3 20316 21059 20500 +3 20317 20501 21060 +3 20317 21060 20866 +3 20318 20418 20696 +3 20318 20696 20599 +3 20319 20600 20697 +3 20319 20697 20419 +3 20320 21301 21885 +3 20320 21885 20784 +3 20321 20785 21886 +3 20321 21886 21302 +3 20322 22952 26093 +3 20322 26093 23139 +3 20323 23140 26094 +3 20323 26094 22953 +3 20324 20476 20778 +3 20324 20778 20641 +3 20325 20642 20779 +3 20325 20779 20477 +3 20326 21891 23707 +3 20326 23707 21856 +3 20327 21857 23708 +3 20327 23708 21892 +3 20328 23326 24221 +3 20328 24221 21018 +3 20329 21019 24222 +3 20329 24222 23327 +3 20330 20669 21370 +3 20330 21370 20958 +3 20331 20959 21371 +3 20331 21371 20669 +3 20332 20847 23387 +3 20332 23387 22673 +3 20333 22674 23388 +3 20333 23388 20848 +3 20334 21382 23010 +3 20334 23010 21723 +3 20335 21724 23011 +3 20335 23011 21383 +3 20336 22958 25772 +3 20336 25772 22835 +3 20337 22836 25773 +3 20337 25773 22959 +3 20338 20520 20716 +3 20338 20716 20567 +3 20339 20568 20717 +3 20339 20717 20521 +3 20340 22468 23419 +3 20340 23419 21165 +3 20341 21166 23420 +3 20341 23420 22469 +3 20342 20819 21553 +3 20342 21553 20976 +3 20343 20977 21554 +3 20343 21554 20820 +3 20344 20883 21087 +3 20344 21087 20526 +3 20345 20527 21088 +3 20345 21088 20884 +3 20346 20661 20728 +3 20346 20728 20426 +3 20347 20427 20729 +3 20347 20729 20662 +3 20348 20706 22081 +3 20348 22081 21616 +3 20349 21617 22082 +3 20349 22082 20707 +3 20350 22456 22972 +3 20350 22972 20740 +3 20351 20741 22973 +3 20351 22973 22457 +3 20352 21471 25071 +3 20352 25071 23763 +3 20353 23764 25072 +3 20353 25072 21472 +3 20354 21418 21830 +3 20354 21830 20738 +3 20355 20739 21831 +3 20355 21831 21419 +3 20356 20357 20914 +3 20356 20914 20931 +3 20356 20931 20397 +3 20357 20398 20932 +3 20357 20932 20914 +3 20358 20993 21995 +3 20358 21995 21581 +3 20359 21582 21996 +3 20359 21996 20994 +3 20360 21125 23665 +3 20360 23665 22679 +3 20361 22680 23666 +3 20361 23666 21126 +3 20362 20800 22316 +3 20362 22316 21758 +3 20363 21759 22317 +3 20363 22317 20801 +3 20364 20595 20841 +3 20364 20841 20645 +3 20365 20646 20842 +3 20365 20842 20596 +3 20366 20510 20786 +3 20366 20786 20670 +3 20367 20671 20787 +3 20367 20787 20511 +3 20368 20470 20790 +3 20368 20790 20702 +3 20369 20703 20791 +3 20369 20791 20471 +3 20370 23520 24770 +3 20370 24770 21424 +3 20371 21425 24771 +3 20371 24771 23521 +3 20372 20504 20960 +3 20372 20960 21105 +3 20372 21105 20490 +3 20373 20491 21106 +3 20373 20961 20505 +3 20373 21106 20961 +3 20374 23034 24315 +3 20374 24315 21428 +3 20375 21428 24316 +3 20375 24316 23035 +3 20376 20663 21416 +3 20376 21416 21041 +3 20377 21042 21417 +3 20377 21417 20664 +3 20378 20379 21961 +3 20378 21961 21981 +3 20378 21981 20407 +3 20379 20408 21982 +3 20379 21982 21961 +3 20380 23185 25585 +3 20380 25585 23087 +3 20381 23088 25654 +3 20381 25654 23186 +3 20382 24544 26270 +3 20382 26270 21795 +3 20383 21796 26271 +3 20383 26271 24545 +3 20384 21905 23969 +3 20384 23969 22176 +3 20385 22177 23970 +3 20385 23970 21906 +3 20386 20605 20837 +3 20386 20837 20603 +3 20387 20604 20838 +3 20387 20838 20606 +3 20388 23933 25603 +3 20388 25603 23934 +3 20389 20764 21043 +3 20389 21043 20545 +3 20390 20546 21044 +3 20390 21044 20765 +3 20391 22659 25352 +3 20391 25352 22811 +3 20392 22812 25353 +3 20392 25353 22660 +3 20393 20802 22139 +3 20393 22139 21599 +3 20394 21600 22140 +3 20394 22140 20803 +3 20395 22908 23689 +3 20395 23689 20949 +3 20396 20950 23690 +3 20396 23690 22909 +3 20397 20931 20995 +3 20397 20995 20452 +3 20398 20453 20996 +3 20398 20996 20932 +3 20399 21390 21873 +3 20399 21873 20770 +3 20400 20771 21874 +3 20400 21874 21391 +3 20401 21053 21737 +3 20401 21737 20917 +3 20402 20918 21738 +3 20402 21738 21054 +3 20403 20603 20829 +3 20403 20829 20659 +3 20404 20660 20830 +3 20404 20830 20604 +3 20405 21158 21975 +3 20405 21975 21136 +3 20406 21137 21976 +3 20406 21976 21159 +3 20407 21981 22657 +3 20407 22657 20895 +3 20408 20896 22658 +3 20408 22658 21982 +3 20409 24632 26254 +3 20409 26254 21743 +3 20410 21744 26255 +3 20410 26255 24633 +3 20411 20596 20810 +3 20411 20810 20595 +3 20412 21408 22399 +3 20412 22399 21217 +3 20413 21218 22400 +3 20413 22400 21409 +3 20414 20964 23036 +3 20414 23036 22224 +3 20415 22225 23037 +3 20415 23037 20965 +3 20416 20672 20831 +3 20416 20831 20605 +3 20417 20606 20832 +3 20417 20832 20673 +3 20418 20567 20823 +3 20418 20823 20696 +3 20419 20697 20824 +3 20419 20824 20568 +3 20420 24846 26284 +3 20420 26284 22987 +3 20421 22988 26285 +3 20421 26285 24847 +3 20422 21537 22024 +3 20422 22024 20817 +3 20423 20818 22025 +3 20423 22025 21538 +3 20424 22391 23054 +3 20424 23054 21521 +3 20425 21522 23055 +3 20425 23055 22392 +3 20426 20728 20821 +3 20426 20821 20539 +3 20427 20540 20822 +3 20427 20822 20729 +3 20428 20808 21669 +3 20428 21669 21187 +3 20429 21188 21670 +3 20429 21670 20809 +3 20430 20912 21223 +3 20430 21223 20694 +3 20431 20695 21224 +3 20431 21224 20913 +3 20432 21422 24458 +3 20432 24458 23264 +3 20433 23265 24459 +3 20433 24459 21423 +3 20434 21071 21667 +3 20434 21667 20871 +3 20435 20872 21668 +3 20435 21668 21072 +3 20436 21505 25093 +3 20436 25093 23867 +3 20437 23868 25094 +3 20437 25094 21506 +3 20438 22811 25474 +3 20438 25474 22902 +3 20439 20599 20860 +3 20439 20860 20734 +3 20440 20735 20861 +3 20440 20861 20600 +3 20441 22903 25475 +3 20441 25475 22812 +3 20442 20856 22789 +3 20442 22789 22184 +3 20443 22185 22790 +3 20443 22790 20857 +3 20444 21398 22385 +3 20444 22385 21248 +3 20445 21251 22386 +3 20445 22386 21399 +3 20446 20875 21148 +3 20446 21148 20676 +3 20447 20677 21149 +3 20447 21149 20876 +3 20448 21529 22791 +3 20448 22791 21515 +3 20449 21516 22792 +3 20449 22792 21530 +3 20450 21487 25464 +3 20450 25464 24289 +3 20451 24290 25465 +3 20451 25465 21488 +3 20452 20995 21073 +3 20452 21073 20543 +3 20453 20544 21074 +3 20453 21074 20996 +3 20454 23109 25896 +3 20454 25896 22958 +3 20455 22959 25897 +3 20455 25897 23110 +3 20456 21248 22431 +3 20456 22431 21461 +3 20457 21462 22432 +3 20457 22432 21251 +3 20458 23129 24155 +3 20458 24155 21295 +3 20459 21296 24156 +3 20459 24156 23130 +3 20460 20772 21622 +3 20460 21622 21215 +3 20461 21216 21623 +3 20461 21623 20773 +3 20462 23153 24231 +3 20462 24231 21372 +3 20463 21373 24232 +3 20463 24232 23154 +3 20464 23643 24512 +3 20464 24512 21246 +3 20465 21247 24513 +3 20465 24513 23644 +3 20466 21001 23066 +3 20466 23066 22332 +3 20467 22333 23067 +3 20467 23067 21002 +3 20468 20885 21345 +3 20468 21345 20843 +3 20469 20844 21346 +3 20469 21346 20886 +3 20470 20551 20879 +3 20470 20879 20790 +3 20471 20791 20880 +3 20471 20880 20552 +3 20472 21515 22885 +3 20472 22885 21585 +3 20473 21586 22886 +3 20473 22886 21516 +3 20474 20849 21325 +3 20474 21325 20867 +3 20475 20868 21326 +3 20475 21326 20850 +3 20476 20645 20925 +3 20476 20925 20778 +3 20477 20779 20926 +3 20477 20926 20646 +3 20478 22141 23911 +3 20478 23911 22026 +3 20479 22027 23912 +3 20479 23912 22142 +3 20480 20843 21303 +3 20480 21303 20849 +3 20481 20850 21304 +3 20481 21304 20844 +3 20482 22222 23929 +3 20482 23929 21957 +3 20483 21958 23930 +3 20483 23930 22223 +3 20484 20792 21693 +3 20484 21693 21289 +3 20485 21290 21694 +3 20485 21694 20793 +3 20486 20927 22930 +3 20486 22930 22314 +3 20487 22315 22931 +3 20487 22931 20928 +3 20488 22030 26756 +3 20488 26756 24934 +3 20489 24935 26757 +3 20489 26757 22031 +3 20490 21105 21249 +3 20490 21249 20617 +3 20491 20618 21250 +3 20491 21250 21106 +3 20492 24003 25010 +3 20492 25010 21341 +3 20493 21342 25011 +3 20493 25011 24004 +3 20494 23167 23949 +3 20494 23949 21103 +3 20495 21104 23950 +3 20495 23950 23168 +3 20496 22847 25211 +3 20496 25211 22701 +3 20497 22702 25212 +3 20497 25212 22848 +3 20498 20811 22815 +3 20498 22815 21529 +3 20499 21530 22816 +3 20499 22816 20812 +3 20500 21059 21307 +3 20500 21307 20692 +3 20501 20693 21308 +3 20501 21308 21060 +3 20502 21136 22097 +3 20502 22097 21280 +3 20503 21281 22098 +3 20503 22098 21137 +3 20504 20647 21131 +3 20504 21131 20960 +3 20505 20961 21132 +3 20505 21132 20648 +3 20506 20712 21644 +3 20506 21644 21368 +3 20507 21369 21645 +3 20507 21645 20713 +3 20508 20710 21657 +3 20508 21657 21264 +3 20509 21265 21658 +3 20509 21658 20711 +3 20510 20659 20891 +3 20510 20891 20786 +3 20511 20787 20892 +3 20511 20892 20660 +3 20512 21567 21917 +3 20512 21917 20758 +3 20513 20759 21918 +3 20513 21918 21568 +3 20514 22582 23318 +3 20514 23318 21045 +3 20515 21046 23319 +3 20515 23319 22583 +3 20516 21402 21881 +3 20516 21881 20862 +3 20517 20862 21882 +3 20517 21882 21403 +3 20518 20889 21207 +3 20518 21207 20764 +3 20519 20765 21208 +3 20519 21208 20890 +3 20520 20577 20877 +3 20520 20877 20716 +3 20521 20717 20878 +3 20521 20878 20578 +3 20522 23563 24828 +3 20522 24828 21465 +3 20523 21466 24829 +3 20523 24829 23564 +3 20524 21591 26354 +3 20524 26354 24990 +3 20525 24991 26355 +3 20525 26355 21592 +3 20526 21087 21305 +3 20526 21305 20708 +3 20527 20709 21306 +3 20527 21306 21088 +3 20528 22046 22773 +3 20528 22773 20952 +3 20529 20953 22774 +3 20529 22774 22047 +3 20530 20537 20910 +3 20530 20910 20911 +3 20530 20911 20538 +3 20531 22062 26668 +3 20531 26668 24952 +3 20532 24953 26669 +3 20532 26669 22063 +3 20533 21957 23989 +3 20533 23989 22340 +3 20534 22341 23990 +3 20534 23990 21958 +3 20535 21359 22153 +3 20535 22153 21158 +3 20536 21159 22154 +3 20536 22154 21360 +3 20537 20565 20937 +3 20537 20937 20910 +3 20538 20911 20938 +3 20538 20938 20566 +3 20539 20821 20907 +3 20539 20907 20672 +3 20540 20673 20908 +3 20540 20908 20822 +3 20541 22725 23609 +3 20541 23609 21235 +3 20542 21236 23610 +3 20542 23610 22726 +3 20543 21073 21333 +3 20543 21333 20746 +3 20544 20747 21334 +3 20544 21334 21074 +3 20545 21043 21262 +3 20545 21262 20718 +3 20546 20719 21263 +3 20546 21263 21044 +3 20547 20976 21832 +3 20547 21832 21270 +3 20548 21271 21833 +3 20548 21833 20977 +3 20549 22701 25081 +3 20549 25081 21205 +3 20550 21206 25082 +3 20550 25082 22702 +3 20551 20641 20982 +3 20551 20982 20879 +3 20552 20880 20983 +3 20552 20983 20642 +3 20553 20867 21420 +3 20553 21420 20978 +3 20554 20979 21421 +3 20554 21421 20868 +3 20555 22200 23993 +3 20555 23993 22141 +3 20556 22142 23994 +3 20556 23994 22201 +3 20557 21539 21989 +3 20557 21989 20897 +3 20558 20898 21990 +3 20558 21990 21540 +3 20559 23290 26071 +3 20559 26071 23109 +3 20560 23110 26072 +3 20560 26072 23291 +3 20561 20579 21457 +3 20561 21443 20562 +3 20561 21457 21443 +3 20562 21443 21458 +3 20562 21458 20580 +3 20563 24183 25762 +3 20563 25762 21923 +3 20564 21924 25763 +3 20564 25763 24184 +3 20565 20615 20989 +3 20565 20989 20937 +3 20566 20938 20990 +3 20566 20990 20616 +3 20567 20716 20956 +3 20567 20956 20823 +3 20568 20824 20957 +3 20568 20957 20717 +3 20569 20835 22290 +3 20569 22290 21937 +3 20570 21938 22291 +3 20570 22291 20836 +3 20571 21404 23649 +3 20571 23649 22645 +3 20572 22646 23650 +3 20572 23650 21405 +3 20573 22188 22914 +3 20573 22914 21129 +3 20574 21130 22915 +3 20574 22915 22189 +3 20575 22745 23577 +3 20575 23577 21227 +3 20576 21228 23578 +3 20576 23578 22746 +3 20577 20670 20986 +3 20577 20986 20877 +3 20578 20878 20987 +3 20578 20987 20671 +3 20579 20657 21503 +3 20579 21503 21457 +3 20580 21458 21504 +3 20580 21504 20658 +3 20581 20598 21690 +3 20581 21689 20597 +3 20581 21690 21689 +3 20582 21603 22580 +3 20582 22580 21398 +3 20583 21399 22581 +3 20583 22581 21604 +3 20584 21951 22661 +3 20584 22661 21135 +3 20585 21135 22662 +3 20585 22662 21952 +3 20586 20601 23012 +3 20586 23012 23013 +3 20586 23013 20602 +3 20587 21033 21481 +3 20587 21481 20885 +3 20588 20886 21482 +3 20588 21482 21034 +3 20589 22999 25764 +3 20589 25764 23125 +3 20590 23126 25765 +3 20590 25765 23000 +3 20591 22370 27597 +3 20591 25639 20592 +3 20591 27597 25639 +3 20592 25639 27598 +3 20592 27598 22371 +3 20593 22145 22612 +3 20593 22612 20921 +3 20594 20922 22613 +3 20594 22613 22146 +3 20595 20810 21077 +3 20595 21077 20841 +3 20596 20842 21078 +3 20596 21078 20810 +3 20597 21689 21729 +3 20597 21729 20628 +3 20598 20629 21730 +3 20598 21730 21690 +3 20599 20696 20968 +3 20599 20968 20860 +3 20600 20861 20969 +3 20600 20969 20697 +3 20601 21400 24007 +3 20601 24007 23012 +3 20602 23013 24008 +3 20602 24008 21401 +3 20603 20837 21057 +3 20603 21057 20829 +3 20604 20830 21058 +3 20604 21058 20838 +3 20605 20831 21065 +3 20605 21065 20837 +3 20606 20838 21066 +3 20606 21066 20832 +3 20607 21280 22274 +3 20607 22274 21473 +3 20608 21474 22275 +3 20608 22275 21281 +3 20609 21173 22628 +3 20609 22628 21925 +3 20610 21926 22629 +3 20610 22629 21174 +3 20611 22202 22736 +3 20611 22736 20970 +3 20612 20971 22737 +3 20612 22737 22203 +3 20613 22435 27516 +3 20613 27516 25430 +3 20614 25431 27517 +3 20614 27517 22436 +3 20615 20734 21049 +3 20615 21049 20989 +3 20616 20990 21050 +3 20616 21050 20735 +3 20617 21249 21426 +3 20617 21426 20750 +3 20618 20751 21427 +3 20618 21427 21250 +3 20619 22001 26230 +3 20619 26230 24600 +3 20620 24601 26231 +3 20620 26231 22002 +3 20621 24029 25604 +3 20621 25604 24028 +3 20622 21723 23101 +3 20622 23101 21799 +3 20623 21800 23102 +3 20623 23102 21724 +3 20624 21229 23288 +3 20624 23288 22532 +3 20625 22533 23289 +3 20625 23289 21230 +3 20626 20760 21691 +3 20626 21691 21071 +3 20627 21072 21692 +3 20627 21692 20761 +3 20628 21729 22204 +3 20628 22204 20947 +3 20629 20948 22205 +3 20629 22205 21730 +3 20630 20702 21051 +3 20630 20974 20661 +3 20630 21051 20974 +3 20631 20662 20975 +3 20631 20975 21052 +3 20631 21052 20703 +3 20632 22231 23040 +3 20632 23040 22230 +3 20633 22058 23775 +3 20633 23775 22180 +3 20634 22181 23776 +3 20634 23776 22059 +3 20635 23139 26248 +3 20635 26248 24884 +3 20636 24885 26249 +3 20636 26249 23140 +3 20637 22981 25364 +3 20637 25364 22847 +3 20638 22848 25365 +3 20638 25365 22982 +3 20639 21355 24321 +3 20639 24321 23486 +3 20640 23487 24322 +3 20640 24322 21356 +3 20641 20778 21144 +3 20641 21144 20982 +3 20642 20983 21145 +3 20642 21145 20779 +3 20643 22121 23691 +3 20643 23691 22058 +3 20644 22059 23692 +3 20644 23692 22122 +3 20645 20841 21169 +3 20645 21169 20925 +3 20646 20926 21170 +3 20646 21170 20842 +3 20647 20978 21571 +3 20647 21571 21131 +3 20648 21132 21572 +3 20648 21572 20979 +3 20649 23260 25586 +3 20649 25586 23338 +3 20650 23339 25653 +3 20650 25653 23261 +3 20651 21971 26222 +3 20651 26222 24682 +3 20652 24683 26223 +3 20652 26223 21972 +3 20653 21461 22703 +3 20653 22703 21756 +3 20654 21757 22704 +3 20654 22704 21462 +3 20655 23901 25109 +3 20655 25109 21764 +3 20656 21765 25110 +3 20656 25110 23902 +3 20657 20901 21858 +3 20657 21858 21503 +3 20658 21504 21859 +3 20658 21859 20902 +3 20659 20829 21107 +3 20659 21107 20891 +3 20660 20892 21108 +3 20660 21108 20830 +3 20661 20974 21037 +3 20661 21037 20728 +3 20662 20729 21038 +3 20662 21038 20975 +3 20663 20958 21818 +3 20663 21818 21416 +3 20664 21417 21819 +3 20664 21819 20959 +3 20665 21907 23064 +3 20665 23064 21869 +3 20666 21870 23065 +3 20666 23065 21908 +3 20667 21541 24040 +3 20667 24040 23028 +3 20668 23029 24041 +3 20668 24041 21542 +3 20669 21371 21779 +3 20669 21779 21370 +3 20670 20786 21114 +3 20670 21114 20986 +3 20671 20987 21115 +3 20671 21115 20787 +3 20672 20907 21099 +3 20672 21099 20831 +3 20673 20832 21100 +3 20673 21100 20908 +3 20674 21634 22373 +3 20674 22373 21359 +3 20675 21360 22374 +3 20675 22374 21635 +3 20676 21148 21453 +3 20676 21453 20909 +3 20677 20909 21454 +3 20677 21454 21149 +3 20678 21152 22695 +3 20678 22695 22105 +3 20679 22106 22696 +3 20679 22696 21153 +3 20680 23087 25482 +3 20680 25482 22981 +3 20681 22982 25483 +3 20681 25483 23088 +3 20682 21753 24824 +3 20682 24824 23711 +3 20683 23712 24825 +3 20683 24825 21754 +3 20684 22182 22861 +3 20684 22861 21282 +3 20685 21283 22862 +3 20685 22862 22183 +3 20686 21163 22484 +3 20686 22484 21883 +3 20687 21884 22485 +3 20687 22485 21164 +3 20688 21755 24412 +3 20688 24412 23246 +3 20689 23247 24413 +3 20689 24413 21755 +3 20690 23125 25886 +3 20690 25886 23252 +3 20691 23253 25887 +3 20691 25887 23126 +3 20692 21307 21612 +3 20692 21612 20889 +3 20693 20890 21613 +3 20693 21613 21308 +3 20694 21223 21513 +3 20694 21513 20875 +3 20695 20876 21514 +3 20695 21514 21224 +3 20696 20823 21118 +3 20696 21118 20968 +3 20697 20969 21119 +3 20697 21119 20824 +3 20698 22180 23879 +3 20698 23879 22222 +3 20699 22223 23880 +3 20699 23880 22181 +3 20700 24366 25476 +3 20700 25476 21735 +3 20701 21736 25477 +3 20701 25477 24367 +3 20702 20790 21175 +3 20702 21175 21051 +3 20703 21052 21176 +3 20703 21176 20791 +3 20704 24968 26694 +3 20704 26694 22234 +3 20705 22235 26695 +3 20705 26695 24969 +3 20706 21101 22566 +3 20706 22566 22081 +3 20707 22082 22567 +3 20707 22567 21102 +3 20708 21305 21597 +3 20708 21597 20912 +3 20709 20913 21598 +3 20709 21598 21306 +3 20710 20923 21949 +3 20710 21949 21657 +3 20711 21658 21950 +3 20711 21950 20924 +3 20712 20919 21933 +3 20712 21933 21644 +3 20713 21645 21934 +3 20713 21934 20920 +3 20714 21799 23163 +3 20714 23163 21959 +3 20715 21960 23164 +3 20715 23164 21800 +3 20716 20877 21179 +3 20716 21179 20956 +3 20717 20957 21180 +3 20717 21180 20878 +3 20718 21262 21677 +3 20718 21677 21033 +3 20719 21034 21678 +3 20719 21678 21263 +3 20720 22482 24109 +3 20720 24109 22200 +3 20721 22201 24110 +3 20721 24110 22483 +3 20722 21361 22006 +3 20722 22006 21276 +3 20723 21277 22007 +3 20723 22007 21362 +3 20724 22453 23196 +3 20724 23196 21313 +3 20725 21314 23197 +3 20725 23197 22454 +3 20726 23981 25121 +3 20726 25121 21797 +3 20727 21798 25122 +3 20727 25122 23982 +3 20728 21037 21146 +3 20728 21146 20821 +3 20729 20822 21147 +3 20729 21147 21038 +3 20730 25014 26300 +3 20730 26300 21812 +3 20731 21813 26301 +3 20731 26301 25015 +3 20732 21276 22028 +3 20732 22028 21394 +3 20733 21397 22029 +3 20733 22029 21277 +3 20734 20860 21219 +3 20734 21219 21049 +3 20735 21050 21220 +3 20735 21220 20861 +3 20736 24984 26606 +3 20736 26606 22260 +3 20737 22261 26607 +3 20737 26607 24985 +3 20738 21830 22262 +3 20738 22262 21085 +3 20739 21086 22263 +3 20739 22263 21831 +3 20740 22972 23621 +3 20740 23621 21258 +3 20741 21259 23622 +3 20741 23622 22973 +3 20742 21583 22538 +3 20742 22538 21603 +3 20743 21604 22539 +3 20743 22539 21584 +3 20744 21628 25040 +3 20744 25040 24123 +3 20745 24124 25041 +3 20745 25041 21629 +3 20746 21333 21632 +3 20746 21632 20865 +3 20747 20866 21633 +3 20747 21633 21334 +3 20748 21620 22542 +3 20748 22542 21583 +3 20749 21584 22543 +3 20749 22543 21621 +3 20750 21426 21630 +3 20750 21630 20883 +3 20751 20884 21631 +3 20751 21631 21427 +3 20752 22891 25235 +3 20752 25235 23030 +3 20753 23031 25236 +3 20753 25236 22892 +3 20754 21353 23865 +3 20754 23865 23175 +3 20755 23176 23866 +3 20755 23866 21354 +3 20756 21433 23254 +3 20756 23254 22464 +3 20757 22465 23255 +3 20757 23255 21434 +3 20758 21917 22284 +3 20758 22284 21039 +3 20759 21040 22285 +3 20759 22285 21918 +3 20760 20903 21889 +3 20760 21889 21691 +3 20761 21692 21890 +3 20761 21890 20904 +3 20762 23447 24536 +3 20762 24536 21773 +3 20763 21774 24537 +3 20763 24537 23448 +3 20764 21207 21563 +3 20764 21563 21043 +3 20765 21044 21564 +3 20765 21564 21208 +3 20766 20767 25638 +3 20766 25638 27488 +3 20766 27488 22552 +3 20767 22553 27489 +3 20767 27489 25638 +3 20768 21589 24592 +3 20768 24592 23785 +3 20769 23786 24593 +3 20769 24593 21590 +3 20770 21873 22375 +3 20770 22375 21055 +3 20771 21056 22376 +3 20771 22376 21874 +3 20772 21041 21977 +3 20772 21977 21622 +3 20773 21623 21978 +3 20773 21978 21042 +3 20774 22975 23857 +3 20774 23857 21565 +3 20775 21566 23858 +3 20775 23858 22976 +3 20776 21477 22143 +3 20776 22143 21361 +3 20777 21362 22144 +3 20777 22144 21478 +3 20778 20925 21331 +3 20778 21331 21144 +3 20779 21145 21332 +3 20779 21332 20926 +3 20780 21473 22248 +3 20780 22248 21479 +3 20781 21480 22249 +3 20781 22249 21474 +3 20782 23252 26047 +3 20782 26047 23417 +3 20783 23418 26048 +3 20783 26048 23253 +3 20784 21885 22236 +3 20784 22236 21053 +3 20785 21054 22237 +3 20785 22237 21886 +3 20786 20891 21272 +3 20786 21272 21114 +3 20787 21115 21273 +3 20787 21273 20892 +3 20788 21869 23268 +3 20788 23268 22091 +3 20789 22092 23269 +3 20789 23269 21870 +3 20790 20879 21297 +3 20790 21297 21175 +3 20791 21176 21298 +3 20791 21298 20880 +3 20792 21187 22155 +3 20792 22155 21693 +3 20793 21694 22156 +3 20793 22156 21188 +3 20794 22072 27279 +3 20794 27279 25808 +3 20795 25809 27280 +3 20795 27280 22073 +3 20796 21640 23669 +3 20796 23669 22821 +3 20797 22822 23670 +3 20797 23670 21641 +3 20798 25436 27449 +3 20798 27449 22594 +3 20799 22595 27450 +3 20799 27450 25437 +3 20800 21311 22910 +3 20800 22910 22316 +3 20801 22317 22911 +3 20801 22911 21312 +3 20802 21284 22689 +3 20802 22689 22139 +3 20803 22140 22690 +3 20803 22690 21285 +3 20804 21495 25113 +3 20804 25113 22891 +3 20805 22892 25114 +3 20805 25114 21496 +3 20806 21781 24872 +3 20806 24872 23738 +3 20807 23739 24873 +3 20807 24873 21782 +3 20808 21270 21947 +3 20808 21947 21669 +3 20809 21670 21948 +3 20809 21948 21271 +3 20810 21078 21288 +3 20810 21288 21077 +3 20811 21191 23280 +3 20811 23280 22815 +3 20812 22816 23281 +3 20812 23281 21192 +3 20813 21479 22288 +3 20813 22288 20997 +3 20814 20998 22289 +3 20814 22289 21480 +3 20815 22159 25754 +3 20815 25754 24271 +3 20816 24272 25755 +3 20816 25755 22160 +3 20817 22024 22544 +3 20817 22544 21301 +3 20818 21302 22545 +3 20818 22545 22025 +3 20819 21394 22192 +3 20819 22192 21553 +3 20820 21554 22193 +3 20820 22193 21397 +3 20821 21146 21278 +3 20821 21278 20907 +3 20822 20908 21279 +3 20822 21279 21147 +3 20823 20956 21291 +3 20823 21291 21118 +3 20824 21119 21292 +3 20824 21292 20957 +3 20825 23286 25756 +3 20825 25756 23185 +3 20826 23186 25757 +3 20826 25757 23287 +3 20827 21685 24287 +3 20827 24287 23356 +3 20828 23357 24288 +3 20828 24288 21686 +3 20829 21057 21376 +3 20829 21376 21107 +3 20830 21108 21377 +3 20830 21377 21058 +3 20831 21099 21380 +3 20831 21380 21065 +3 20832 21066 21381 +3 20832 21381 21100 +3 20833 21762 24352 +3 20833 24352 23381 +3 20834 23382 24353 +3 20834 24353 21763 +3 20835 21193 22715 +3 20835 22715 22290 +3 20836 22291 22716 +3 20836 22716 21194 +3 20837 21065 21386 +3 20837 21386 21057 +3 20838 21058 21387 +3 20838 21387 21066 +3 20839 22340 24062 +3 20839 24062 22444 +3 20840 22445 24063 +3 20840 24063 22341 +3 20841 21077 21429 +3 20841 21429 21169 +3 20842 21170 21430 +3 20842 21430 21078 +3 20843 21345 21861 +3 20843 21861 21303 +3 20844 21304 21862 +3 20844 21862 21346 +3 20845 22196 23348 +3 20845 23348 21907 +3 20846 21908 23349 +3 20846 23349 22197 +3 20847 21497 24099 +3 20847 24099 23387 +3 20848 23388 24100 +3 20848 24100 21498 +3 20849 21303 21852 +3 20849 21852 21325 +3 20850 21326 21853 +3 20850 21853 21304 +3 20851 24938 26224 +3 20851 26224 23290 +3 20852 23291 26225 +3 20852 26225 24939 +3 20853 24666 26206 +3 20853 26206 22232 +3 20854 22233 26207 +3 20854 26207 24667 +3 20855 24133 25605 +3 20855 25605 24134 +3 20856 21959 23350 +3 20856 23350 22789 +3 20857 22790 23351 +3 20857 23351 21960 +3 20858 22322 24105 +3 20858 24105 22574 +3 20859 22575 24106 +3 20859 24106 22323 +3 20860 20968 21351 +3 20860 21351 21219 +3 20861 21220 21352 +3 20861 21352 20969 +3 20862 21881 22384 +3 20862 22384 21882 +3 20863 24730 26189 +3 20863 26189 22186 +3 20864 22187 26190 +3 20864 26190 24731 +3 20865 21632 21834 +3 20865 21834 21059 +3 20866 21060 21835 +3 20866 21835 21633 +3 20867 21325 21903 +3 20867 21903 21420 +3 20868 21421 21904 +3 20868 21904 21326 +3 20869 23030 25376 +3 20869 25376 23169 +3 20870 23170 25377 +3 20870 25377 23031 +3 20871 21667 22296 +3 20871 22296 21477 +3 20872 21478 22297 +3 20872 22297 21668 +3 20873 21756 22765 +3 20873 22765 21840 +3 20874 21841 22766 +3 20874 22766 21757 +3 20875 21513 21791 +3 20875 21791 21148 +3 20876 21149 21792 +3 20876 21792 21514 +3 20877 20986 21395 +3 20877 21395 21179 +3 20878 21180 21396 +3 20878 21396 20987 +3 20879 20982 21450 +3 20879 21450 21297 +3 20880 21298 21451 +3 20880 21451 20983 +3 20881 22444 24141 +3 20881 24141 22536 +3 20882 22537 24142 +3 20882 24142 22445 +3 20883 21630 21836 +3 20883 21836 21087 +3 20884 21088 21837 +3 20884 21837 21631 +3 20885 21481 21939 +3 20885 21939 21345 +3 20886 21346 21940 +3 20886 21940 21482 +3 20887 22685 24157 +3 20887 24157 22322 +3 20888 22323 24158 +3 20888 24158 22686 +3 20889 21612 21921 +3 20889 21921 21207 +3 20890 21208 21922 +3 20890 21922 21613 +3 20891 21107 21447 +3 20891 21447 21272 +3 20892 21273 21448 +3 20892 21448 21108 +3 20893 23490 25587 +3 20893 25587 23423 +3 20894 23424 25652 +3 20894 25652 23491 +3 20895 22657 23370 +3 20895 23370 21527 +3 20896 21528 23371 +3 20896 23371 22658 +3 20897 21989 22522 +3 20897 22522 21402 +3 20898 21403 22523 +3 20898 22523 21990 +3 20899 22423 26638 +3 20899 26638 25008 +3 20900 25009 26639 +3 20900 26639 22424 +3 20901 21264 22218 +3 20901 22218 21858 +3 20902 21859 22219 +3 20902 22219 21265 +3 20903 21123 22137 +3 20903 22137 21889 +3 20904 21890 22138 +3 20904 22138 21124 +3 20905 23403 25874 +3 20905 25874 23286 +3 20906 23287 25875 +3 20906 25875 23404 +3 20907 21278 21431 +3 20907 21431 21099 +3 20908 21100 21432 +3 20908 21432 21279 +3 20909 21453 21803 +3 20909 21803 21454 +3 20910 20937 21469 +3 20910 21452 20911 +3 20910 21469 21452 +3 20911 21452 21470 +3 20911 21470 20938 +3 20912 21597 21899 +3 20912 21899 21223 +3 20913 21224 21900 +3 20913 21900 21598 +3 20914 20932 21684 +3 20914 21683 20931 +3 20914 21684 21683 +3 20915 23169 25486 +3 20915 25486 23260 +3 20916 23261 25487 +3 20916 25487 23170 +3 20917 21737 22472 +3 20917 22472 21634 +3 20918 21635 22473 +3 20918 22473 21738 +3 20919 21215 22256 +3 20919 22256 21933 +3 20920 21934 22257 +3 20920 22257 21216 +3 20921 22612 23137 +3 20921 23137 21408 +3 20922 21409 23138 +3 20922 23138 22613 +3 20923 21289 22324 +3 20923 22324 21949 +3 20924 21950 22325 +3 20924 22325 21290 +3 20925 21169 21561 +3 20925 21561 21331 +3 20926 21332 21562 +3 20926 21562 21170 +3 20927 21547 23555 +3 20927 23555 22930 +3 20928 22931 23556 +3 20928 23556 21548 +3 20929 22048 25141 +3 20929 25141 24010 +3 20930 24011 25142 +3 20930 25142 22049 +3 20931 21683 21695 +3 20931 21695 20995 +3 20932 20996 21696 +3 20932 21696 21684 +3 20933 22020 26266 +3 20933 26266 25042 +3 20934 25043 26267 +3 20934 26267 22021 +3 20935 22004 23143 +3 20935 23143 22022 +3 20936 22023 23144 +3 20936 23144 22005 +3 20937 20989 21509 +3 20937 21509 21469 +3 20938 21470 21510 +3 20938 21510 20990 +3 20939 21987 25484 +3 20939 25484 24448 +3 20940 24449 25485 +3 20940 25485 21988 +3 20941 22447 26556 +3 20941 26556 25016 +3 20942 25017 26557 +3 20942 26557 22448 +3 20943 22956 23839 +3 20943 23839 21820 +3 20944 21821 23840 +3 20944 23840 22957 +3 20945 20984 22502 +3 20945 22489 20946 +3 20945 22502 22489 +3 20946 22489 22503 +3 20946 22503 20985 +3 20947 22204 22691 +3 20947 22691 21390 +3 20948 21391 22692 +3 20948 22692 22205 +3 20949 23689 24426 +3 20949 24426 21697 +3 20950 21698 24427 +3 20950 24427 23690 +3 20951 20967 23295 +3 20951 23294 20966 +3 20951 23295 23294 +3 20952 22773 23391 +3 20952 23391 21555 +3 20953 21556 23392 +3 20953 23392 22774 +3 20954 22727 27403 +3 20954 25637 20955 +3 20954 27403 25637 +3 20955 25637 27404 +3 20955 27404 22728 +3 20956 21179 21507 +3 20956 21507 21291 +3 20957 21292 21508 +3 20957 21508 21180 +3 20958 21370 22228 +3 20958 22228 21818 +3 20959 21819 22229 +3 20959 22229 21371 +3 20960 21131 21760 +3 20960 21760 21887 +3 20960 21887 21105 +3 20961 21106 21888 +3 20961 21761 21132 +3 20961 21888 21761 +3 20962 22091 23234 +3 20962 23234 22004 +3 20963 22005 23235 +3 20963 23235 22092 +3 20964 21717 23821 +3 20964 23821 23036 +3 20965 23037 23822 +3 20965 23822 21718 +3 20966 23294 24179 +3 20966 24179 21816 +3 20967 21817 24180 +3 20967 24180 23295 +3 20968 21118 21499 +3 20968 21499 21351 +3 20969 21352 21500 +3 20969 21500 21119 +3 20970 22736 23284 +3 20970 23284 21493 +3 20971 21494 23285 +3 20971 23285 22737 +3 20972 25802 27200 +3 20972 27200 22244 +3 20973 22245 27201 +3 20973 27201 25803 +3 20974 21051 21549 +3 20974 21441 21037 +3 20974 21549 21441 +3 20975 21038 21442 +3 20975 21442 21550 +3 20975 21550 21052 +3 20976 21553 22409 +3 20976 22409 21832 +3 20977 21833 22410 +3 20977 22410 21554 +3 20978 21420 22012 +3 20978 22012 21571 +3 20979 21572 22013 +3 20979 22013 21421 +3 20980 22022 23183 +3 20980 23183 21329 +3 20981 21330 23184 +3 20981 23184 22023 +3 20982 21144 21614 +3 20982 21614 21450 +3 20983 21451 21615 +3 20983 21615 21145 +3 20984 21551 23093 +3 20984 23093 22502 +3 20985 22503 23094 +3 20985 23094 21552 +3 20986 21114 21531 +3 20986 21531 21395 +3 20987 21396 21532 +3 20987 21532 21115 +3 20988 20999 21000 +3 20988 21000 21006 +3 20988 21005 20999 +3 20988 21006 21008 +3 20988 21007 21005 +3 20988 21008 21007 +3 20989 21049 21577 +3 20989 21577 21509 +3 20990 21510 21578 +3 20990 21578 21050 +3 20991 22779 27331 +3 20991 27331 25444 +3 20992 25445 27332 +3 20992 27332 22780 +3 20993 21840 22881 +3 20993 22881 21995 +3 20994 21996 22882 +3 20994 22882 21841 +3 20995 21695 21783 +3 20995 21783 21073 +3 20996 21074 21784 +3 20996 21784 21696 +3 20997 22288 22556 +3 20997 22556 21260 +3 20998 21261 22557 +3 20998 22557 22289 +3 20999 21005 21022 +3 20999 21017 21000 +3 20999 21022 21027 +3 20999 21027 21017 +3 21000 21017 21028 +3 21000 21023 21006 +3 21000 21028 21023 +3 21001 21715 23807 +3 21001 23807 23066 +3 21002 23067 23808 +3 21002 23808 21716 +3 21003 23863 24878 +3 21003 24878 22070 +3 21004 22071 24879 +3 21004 24879 23864 +3 21005 21007 21024 +3 21005 21024 21031 +3 21005 21031 21022 +3 21006 21023 21032 +3 21006 21025 21008 +3 21006 21032 21025 +3 21007 21008 21026 +3 21007 21026 21035 +3 21007 21035 21024 +3 21008 21025 21036 +3 21008 21036 21026 +3 21009 23435 24502 +3 21009 24502 22076 +3 21010 22076 24503 +3 21010 24503 23436 +3 21011 22095 25153 +3 21011 25153 24113 +3 21012 24114 25154 +3 21012 25154 22096 +3 21013 23551 26027 +3 21013 26027 23403 +3 21014 23404 26028 +3 21014 26028 23552 +3 21015 22540 23963 +3 21015 23963 22393 +3 21016 22394 23964 +3 21016 23964 22541 +3 21017 21027 21047 +3 21017 21047 21048 +3 21017 21048 21028 +3 21018 24221 25085 +3 21018 25085 21901 +3 21019 21902 25086 +3 21019 25086 24222 +3 21020 23232 25268 +3 21020 25268 23097 +3 21021 23098 25269 +3 21021 25269 23233 +3 21022 21031 21075 +3 21022 21063 21027 +3 21022 21075 21063 +3 21023 21028 21064 +3 21023 21064 21076 +3 21023 21076 21032 +3 21024 21035 21091 +3 21024 21083 21031 +3 21024 21091 21083 +3 21025 21032 21084 +3 21025 21084 21092 +3 21025 21092 21036 +3 21026 21036 21094 +3 21026 21093 21035 +3 21026 21094 21093 +3 21027 21063 21089 +3 21027 21089 21047 +3 21028 21048 21090 +3 21028 21090 21064 +3 21029 22393 23887 +3 21029 23887 22456 +3 21030 22457 23888 +3 21030 23888 22394 +3 21031 21083 21109 +3 21031 21109 21075 +3 21032 21076 21110 +3 21032 21110 21084 +3 21033 21677 22127 +3 21033 22127 21481 +3 21034 21482 22128 +3 21034 22128 21678 +3 21035 21093 21112 +3 21035 21112 21091 +3 21036 21092 21113 +3 21036 21113 21094 +3 21037 21441 21543 +3 21037 21543 21146 +3 21038 21147 21544 +3 21038 21544 21442 +3 21039 22284 22669 +3 21039 22669 21418 +3 21040 21419 22670 +3 21040 22670 22285 +3 21041 21416 22326 +3 21041 22326 21977 +3 21042 21978 22327 +3 21042 22327 21417 +3 21043 21563 21935 +3 21043 21935 21262 +3 21044 21263 21936 +3 21044 21936 21564 +3 21045 23318 24199 +3 21045 24199 21931 +3 21046 21932 24200 +3 21046 24200 23319 +3 21047 21089 21120 +3 21047 21111 21048 +3 21047 21120 21111 +3 21048 21111 21121 +3 21048 21121 21090 +3 21049 21219 21653 +3 21049 21653 21577 +3 21050 21578 21654 +3 21050 21654 21220 +3 21051 21175 21648 +3 21051 21648 21549 +3 21052 21550 21649 +3 21052 21649 21176 +3 21053 22236 22600 +3 21053 22600 21737 +3 21054 21738 22601 +3 21054 22601 22237 +3 21055 22375 22867 +3 21055 22867 21537 +3 21056 21538 22868 +3 21056 22868 22376 +3 21057 21386 21699 +3 21057 21699 21376 +3 21058 21377 21700 +3 21058 21700 21387 +3 21059 21834 22079 +3 21059 22079 21307 +3 21060 21308 22080 +3 21060 22080 21835 +3 21061 22536 24239 +3 21061 24239 22781 +3 21062 22782 24240 +3 21062 24240 22537 +3 21063 21075 21138 +3 21063 21138 21140 +3 21063 21140 21089 +3 21064 21090 21141 +3 21064 21139 21076 +3 21064 21141 21139 +3 21065 21380 21709 +3 21065 21709 21386 +3 21066 21387 21710 +3 21066 21710 21381 +3 21067 23338 25752 +3 21067 25752 23427 +3 21068 23428 25753 +3 21068 25753 23339 +3 21069 23417 26196 +3 21069 26196 24972 +3 21070 24973 26197 +3 21070 26197 23418 +3 21071 21691 22302 +3 21071 22302 21667 +3 21072 21668 22303 +3 21072 22303 21692 +3 21073 21783 22050 +3 21073 22050 21333 +3 21074 21334 22051 +3 21074 22051 21784 +3 21075 21109 21160 +3 21075 21160 21138 +3 21076 21139 21161 +3 21076 21161 21110 +3 21077 21288 21638 +3 21077 21638 21429 +3 21078 21430 21639 +3 21078 21639 21288 +3 21079 23097 25143 +3 21079 25143 21789 +3 21080 21790 25144 +3 21080 25144 23098 +3 21081 22946 28135 +3 21081 28135 26372 +3 21082 26373 28136 +3 21082 28136 22947 +3 21083 21091 21154 +3 21083 21154 21171 +3 21083 21171 21109 +3 21084 21110 21172 +3 21084 21155 21092 +3 21084 21172 21155 +3 21085 22262 22723 +3 21085 22723 21539 +3 21086 21540 22724 +3 21086 22724 22263 +3 21087 21836 22074 +3 21087 22074 21305 +3 21088 21306 22075 +3 21088 22075 21837 +3 21089 21140 21167 +3 21089 21167 21120 +3 21090 21121 21168 +3 21090 21168 21141 +3 21091 21112 21177 +3 21091 21177 21154 +3 21092 21155 21178 +3 21092 21178 21113 +3 21093 21094 21162 +3 21093 21162 21181 +3 21093 21181 21112 +3 21094 21113 21182 +3 21094 21182 21162 +3 21095 24364 25748 +3 21095 25748 22397 +3 21096 22398 25749 +3 21096 25749 24365 +3 21097 22574 24044 +3 21097 24044 22540 +3 21098 22541 24045 +3 21098 24045 22575 +3 21099 21431 21725 +3 21099 21725 21380 +3 21100 21381 21726 +3 21100 21726 21432 +3 21101 21599 23187 +3 21101 23187 22566 +3 21102 22567 23188 +3 21102 23188 21600 +3 21103 23949 24674 +3 21103 24674 21913 +3 21104 21914 24675 +3 21104 24675 23950 +3 21105 21887 22052 +3 21105 22052 21249 +3 21106 21250 22053 +3 21106 22053 21888 +3 21107 21376 21731 +3 21107 21731 21447 +3 21108 21448 21732 +3 21108 21732 21377 +3 21109 21171 21195 +3 21109 21195 21160 +3 21110 21161 21196 +3 21110 21196 21172 +3 21111 21120 21183 +3 21111 21183 21184 +3 21111 21184 21121 +3 21112 21181 21211 +3 21112 21211 21177 +3 21113 21178 21212 +3 21113 21212 21182 +3 21114 21272 21679 +3 21114 21679 21531 +3 21115 21532 21680 +3 21115 21680 21273 +3 21116 22458 26167 +3 21116 26167 24722 +3 21117 24723 26168 +3 21117 26168 22459 +3 21118 21291 21661 +3 21118 21661 21499 +3 21119 21500 21662 +3 21119 21662 21292 +3 21120 21167 21203 +3 21120 21203 21183 +3 21121 21184 21204 +3 21121 21204 21168 +3 21122 24230 25606 +3 21122 25606 24229 +3 21123 21368 22352 +3 21123 22352 22137 +3 21124 22138 22353 +3 21124 22353 21369 +3 21125 22129 24645 +3 21125 24645 23665 +3 21126 23666 24646 +3 21126 24646 22130 +3 21127 22278 23415 +3 21127 23415 22196 +3 21128 22197 23416 +3 21128 23416 22279 +3 21129 22914 23567 +3 21129 23567 21775 +3 21130 21776 23568 +3 21130 23568 22915 +3 21131 21571 22178 +3 21131 22178 21760 +3 21132 21761 22179 +3 21132 22179 21572 +3 21133 23103 28292 +3 21133 28292 26390 +3 21134 26391 28293 +3 21134 28293 23104 +3 21135 22661 23376 +3 21135 23376 22662 +3 21136 21975 22948 +3 21136 22948 22097 +3 21137 22098 22949 +3 21137 22949 21976 +3 21138 21160 21225 +3 21138 21213 21140 +3 21138 21225 21213 +3 21139 21141 21214 +3 21139 21214 21226 +3 21139 21226 21161 +3 21140 21213 21237 +3 21140 21237 21167 +3 21141 21168 21238 +3 21141 21238 21214 +3 21142 23897 24946 +3 21142 24946 22101 +3 21143 22102 24947 +3 21143 24947 23898 +3 21144 21331 21801 +3 21144 21801 21614 +3 21145 21615 21802 +3 21145 21802 21332 +3 21146 21543 21655 +3 21146 21655 21278 +3 21147 21279 21656 +3 21147 21656 21544 +3 21148 21791 22103 +3 21148 22103 21453 +3 21149 21454 22104 +3 21149 22104 21792 +3 21150 22560 27778 +3 21150 27778 26420 +3 21151 26421 27779 +3 21151 27779 22561 +3 21152 21758 23324 +3 21152 23324 22695 +3 21153 22696 23325 +3 21153 23325 21759 +3 21154 21177 21239 +3 21154 21233 21171 +3 21154 21239 21233 +3 21155 21172 21234 +3 21155 21234 21240 +3 21155 21240 21178 +3 21156 22411 26145 +3 21156 26145 24776 +3 21157 24777 26146 +3 21157 26146 22412 +3 21158 22153 22977 +3 21158 22977 21975 +3 21159 21976 22978 +3 21159 22978 22154 +3 21160 21195 21256 +3 21160 21256 21225 +3 21161 21226 21257 +3 21161 21257 21196 +3 21162 21182 21253 +3 21162 21252 21181 +3 21162 21253 21252 +3 21163 21766 23099 +3 21163 23099 22484 +3 21164 22485 23100 +3 21164 23100 21766 +3 21165 23419 24020 +3 21165 24020 21777 +3 21166 21778 24021 +3 21166 24021 23420 +3 21167 21237 21274 +3 21167 21274 21203 +3 21168 21204 21275 +3 21168 21275 21238 +3 21169 21429 21826 +3 21169 21826 21561 +3 21170 21562 21827 +3 21170 21827 21430 +3 21171 21233 21254 +3 21171 21254 21195 +3 21172 21196 21255 +3 21172 21255 21234 +3 21173 21581 23056 +3 21173 23056 22628 +3 21174 22629 23057 +3 21174 23057 21582 +3 21175 21297 21785 +3 21175 21785 21648 +3 21176 21649 21786 +3 21176 21786 21298 +3 21177 21211 21268 +3 21177 21268 21239 +3 21178 21240 21269 +3 21178 21269 21212 +3 21179 21395 21721 +3 21179 21721 21507 +3 21180 21508 21722 +3 21180 21722 21396 +3 21181 21252 21286 +3 21181 21286 21211 +3 21182 21212 21287 +3 21182 21287 21253 +3 21183 21203 21266 +3 21183 21245 21184 +3 21183 21266 21245 +3 21184 21245 21267 +3 21184 21267 21204 +3 21185 25032 26572 +3 21185 26572 22632 +3 21186 22633 26573 +3 21186 26573 25033 +3 21187 21669 22634 +3 21187 22634 22155 +3 21188 22156 22635 +3 21188 22635 21670 +3 21189 23340 25390 +3 21189 25390 23232 +3 21190 23233 25391 +3 21190 25391 23341 +3 21191 21733 23833 +3 21191 23833 23280 +3 21192 23281 23834 +3 21192 23834 21734 +3 21193 21616 23155 +3 21193 23155 22715 +3 21194 22716 23156 +3 21194 23156 21617 +3 21195 21254 21309 +3 21195 21309 21256 +3 21196 21257 21310 +3 21196 21310 21255 +3 21197 21198 25636 +3 21197 25636 27305 +3 21197 27305 22879 +3 21198 22880 27306 +3 21198 27306 25636 +3 21199 23427 25862 +3 21199 25862 23545 +3 21200 23546 25863 +3 21200 25863 23428 +3 21201 22407 27113 +3 21201 27113 25794 +3 21202 25795 27114 +3 21202 27114 22408 +3 21203 21274 21321 +3 21203 21321 21266 +3 21204 21267 21322 +3 21204 21322 21275 +3 21205 25081 26228 +3 21205 26228 22252 +3 21206 22253 26229 +3 21206 26229 25082 +3 21207 21921 22286 +3 21207 22286 21563 +3 21208 21564 22287 +3 21208 22287 21922 +3 21209 25049 26508 +3 21209 26508 22651 +3 21210 22652 26509 +3 21210 26509 25050 +3 21211 21286 21317 +3 21211 21317 21268 +3 21212 21269 21318 +3 21212 21318 21287 +3 21213 21225 21323 +3 21213 21323 21327 +3 21213 21327 21237 +3 21214 21238 21328 +3 21214 21324 21226 +3 21214 21328 21324 +3 21215 21622 22584 +3 21215 22584 22256 +3 21216 22257 22585 +3 21216 22585 21623 +3 21217 22399 23458 +3 21217 23458 22278 +3 21218 22279 23459 +3 21218 23459 22400 +3 21219 21351 21769 +3 21219 21769 21653 +3 21220 21654 21770 +3 21220 21770 21352 +3 21221 25452 27255 +3 21221 27255 22926 +3 21222 22927 27256 +3 21222 27256 25453 +3 21223 21899 22166 +3 21223 22166 21513 +3 21224 21514 22167 +3 21224 22167 21900 +3 21225 21256 21347 +3 21225 21347 21323 +3 21226 21324 21348 +3 21226 21348 21257 +3 21227 23577 24406 +3 21227 24406 22083 +3 21228 22084 24407 +3 21228 24407 23578 +3 21229 21999 24049 +3 21229 24049 23288 +3 21230 23289 24050 +3 21230 24050 22000 +3 21231 23423 25492 +3 21231 25492 23340 +3 21232 23341 25493 +3 21232 25493 23424 +3 21233 21239 21319 +3 21233 21319 21335 +3 21233 21335 21254 +3 21234 21255 21336 +3 21234 21320 21240 +3 21234 21336 21320 +3 21235 23609 24472 +3 21235 24472 22149 +3 21236 22150 24473 +3 21236 24473 23610 +3 21237 21327 21365 +3 21237 21365 21274 +3 21238 21275 21366 +3 21238 21366 21328 +3 21239 21268 21337 +3 21239 21337 21319 +3 21240 21320 21338 +3 21240 21338 21269 +3 21241 23599 25588 +3 21241 25588 23673 +3 21242 23674 25651 +3 21242 25651 23600 +3 21243 22787 24213 +3 21243 24213 22685 +3 21244 22686 24214 +3 21244 24214 22788 +3 21245 21266 21349 +3 21245 21349 21350 +3 21245 21350 21267 +3 21246 24512 25490 +3 21246 25490 22254 +3 21247 22255 25491 +3 21247 25491 24513 +3 21248 22385 23431 +3 21248 23431 22431 +3 21249 22052 22220 +3 21249 22220 21426 +3 21250 21427 22221 +3 21250 22221 22053 +3 21251 22432 23432 +3 21251 23432 22386 +3 21252 21253 21367 +3 21252 21367 21374 +3 21252 21374 21286 +3 21253 21287 21375 +3 21253 21375 21367 +3 21254 21335 21388 +3 21254 21388 21309 +3 21255 21310 21389 +3 21255 21389 21336 +3 21256 21309 21392 +3 21256 21392 21347 +3 21257 21348 21393 +3 21257 21393 21310 +3 21258 23621 24245 +3 21258 24245 21895 +3 21259 21896 24246 +3 21259 24246 23622 +3 21260 22556 22843 +3 21260 22843 21567 +3 21261 21568 22844 +3 21261 22844 22557 +3 21262 21935 22334 +3 21262 22334 21677 +3 21263 21678 22335 +3 21263 22335 21936 +3 21264 21657 22618 +3 21264 22618 22218 +3 21265 22219 22619 +3 21265 22619 21658 +3 21266 21321 21406 +3 21266 21406 21349 +3 21267 21350 21407 +3 21267 21407 21322 +3 21268 21317 21384 +3 21268 21384 21337 +3 21269 21338 21385 +3 21269 21385 21318 +3 21270 21832 22526 +3 21270 22526 21947 +3 21271 21948 22527 +3 21271 22527 21833 +3 21272 21447 21848 +3 21272 21848 21679 +3 21273 21680 21849 +3 21273 21849 21448 +3 21274 21365 21414 +3 21274 21414 21321 +3 21275 21322 21415 +3 21275 21415 21366 +3 21276 22006 22705 +3 21276 22705 22028 +3 21277 22029 22708 +3 21277 22708 22007 +3 21278 21655 21814 +3 21278 21814 21431 +3 21279 21432 21815 +3 21279 21815 21656 +3 21280 22097 23107 +3 21280 23107 22274 +3 21281 22275 23108 +3 21281 23108 22098 +3 21282 22861 23549 +3 21282 23549 21951 +3 21283 21952 23550 +3 21283 23550 22862 +3 21284 21883 23278 +3 21284 23278 22689 +3 21285 22690 23279 +3 21285 23279 21884 +3 21286 21374 21410 +3 21286 21410 21317 +3 21287 21318 21411 +3 21287 21411 21375 +3 21288 21639 21860 +3 21288 21860 21638 +3 21289 21693 22755 +3 21289 22755 22324 +3 21290 22325 22756 +3 21290 22756 21694 +3 21291 21507 21863 +3 21291 21863 21661 +3 21292 21662 21864 +3 21292 21864 21508 +3 21293 26324 28008 +3 21293 28008 23085 +3 21294 23086 28009 +3 21294 28009 26325 +3 21295 24155 25179 +3 21295 25179 22336 +3 21296 22337 25180 +3 21296 25180 24156 +3 21297 21450 21929 +3 21297 21929 21785 +3 21298 21786 21930 +3 21298 21930 21451 +3 21299 23545 26003 +3 21299 26003 23705 +3 21300 23706 26004 +3 21300 26004 23546 +3 21301 22544 23145 +3 21301 23145 21885 +3 21302 21886 23146 +3 21302 23146 22545 +3 21303 21861 22338 +3 21303 22338 21852 +3 21304 21853 22339 +3 21304 22339 21862 +3 21305 22074 22312 +3 21305 22312 21597 +3 21306 21598 22313 +3 21306 22313 22075 +3 21307 22079 22346 +3 21307 22346 21612 +3 21308 21613 22347 +3 21308 22347 22080 +3 21309 21388 21475 +3 21309 21475 21392 +3 21310 21393 21476 +3 21310 21476 21389 +3 21311 21925 23518 +3 21311 23518 22910 +3 21312 22911 23519 +3 21312 23519 21926 +3 21313 23196 23917 +3 21313 23917 22145 +3 21314 22146 23918 +3 21314 23918 23197 +3 21315 22837 24293 +3 21315 24293 22787 +3 21316 22788 24294 +3 21316 24294 22838 +3 21317 21410 21467 +3 21317 21467 21384 +3 21318 21385 21468 +3 21318 21468 21411 +3 21319 21337 21439 +3 21319 21437 21335 +3 21319 21439 21437 +3 21320 21336 21438 +3 21320 21438 21440 +3 21320 21440 21338 +3 21321 21414 21489 +3 21321 21489 21406 +3 21322 21407 21490 +3 21322 21490 21415 +3 21323 21347 21463 +3 21323 21455 21327 +3 21323 21463 21455 +3 21324 21328 21456 +3 21324 21456 21464 +3 21324 21464 21348 +3 21325 21852 22403 +3 21325 22403 21903 +3 21326 21904 22404 +3 21326 22404 21853 +3 21327 21455 21485 +3 21327 21485 21365 +3 21328 21366 21486 +3 21328 21486 21456 +3 21329 23183 23557 +3 21329 23557 21727 +3 21330 21728 23558 +3 21330 23558 23184 +3 21331 21561 21997 +3 21331 21997 21801 +3 21332 21802 21998 +3 21332 21998 21562 +3 21333 22050 22328 +3 21333 22328 21632 +3 21334 21633 22329 +3 21334 22329 22051 +3 21335 21437 21491 +3 21335 21491 21388 +3 21336 21389 21492 +3 21336 21492 21438 +3 21337 21384 21483 +3 21337 21483 21439 +3 21338 21440 21484 +3 21338 21484 21385 +3 21339 22916 24259 +3 21339 24259 22697 +3 21340 22698 24260 +3 21340 24260 22919 +3 21341 25010 26157 +3 21341 26157 23551 +3 21342 23552 26158 +3 21342 26158 25011 +3 21343 26352 28153 +3 21343 28153 23230 +3 21344 23231 28154 +3 21344 28154 26353 +3 21345 21939 22439 +3 21345 22439 21861 +3 21346 21862 22440 +3 21346 22440 21940 +3 21347 21392 21501 +3 21347 21501 21463 +3 21348 21464 21502 +3 21348 21502 21393 +3 21349 21406 21517 +3 21349 21449 21350 +3 21349 21517 21449 +3 21350 21449 21518 +3 21350 21518 21407 +3 21351 21499 21897 +3 21351 21897 21769 +3 21352 21770 21898 +3 21352 21898 21500 +3 21353 22056 24516 +3 21353 24516 23865 +3 21354 23866 24517 +3 21354 24517 22057 +3 21355 22176 25123 +3 21355 25123 24321 +3 21356 24322 25124 +3 21356 25124 22177 +3 21357 23304 25292 +3 21357 25292 23413 +3 21358 23414 25293 +3 21358 25293 23305 +3 21359 22373 23216 +3 21359 23216 22153 +3 21360 22154 23217 +3 21360 23217 22374 +3 21361 22143 22809 +3 21361 22809 22006 +3 21362 22007 22810 +3 21362 22810 22144 +3 21363 26392 27655 +3 21363 27655 22721 +3 21364 22722 27656 +3 21364 27656 26393 +3 21365 21485 21533 +3 21365 21533 21414 +3 21366 21415 21534 +3 21366 21534 21486 +3 21367 21375 21512 +3 21367 21511 21374 +3 21367 21512 21511 +3 21368 21644 22655 +3 21368 22655 22352 +3 21369 22353 22656 +3 21369 22656 21645 +3 21370 21779 22626 +3 21370 22626 22228 +3 21371 22229 22627 +3 21371 22627 21779 +3 21372 24231 25187 +3 21372 25187 22360 +3 21373 22361 25188 +3 21373 25188 24232 +3 21374 21511 21535 +3 21374 21535 21410 +3 21375 21411 21536 +3 21375 21536 21512 +3 21376 21699 22034 +3 21376 22034 21731 +3 21377 21732 22035 +3 21377 22035 21700 +3 21378 23589 25746 +3 21378 25746 23490 +3 21379 23491 25747 +3 21379 25747 23590 +3 21380 21725 22038 +3 21380 22038 21709 +3 21381 21710 22039 +3 21381 22039 21726 +3 21382 22697 24307 +3 21382 24307 23010 +3 21383 23011 24308 +3 21383 24308 22698 +3 21384 21467 21545 +3 21384 21545 21483 +3 21385 21484 21546 +3 21385 21546 21468 +3 21386 21709 22044 +3 21386 22044 21699 +3 21387 21700 22045 +3 21387 22045 21710 +3 21388 21491 21557 +3 21388 21557 21475 +3 21389 21476 21558 +3 21389 21558 21492 +3 21390 22691 23210 +3 21390 23210 21873 +3 21391 21874 23211 +3 21391 23211 22692 +3 21392 21475 21559 +3 21392 21559 21501 +3 21393 21502 21560 +3 21393 21560 21476 +3 21394 22028 22845 +3 21394 22845 22192 +3 21395 21531 21962 +3 21395 21962 21721 +3 21396 21722 21963 +3 21396 21963 21532 +3 21397 22193 22846 +3 21397 22846 22029 +3 21398 22580 23605 +3 21398 23605 22385 +3 21399 22386 23606 +3 21399 23606 22581 +3 21400 22368 24956 +3 21400 24956 24007 +3 21401 24008 24957 +3 21401 24957 22369 +3 21402 22522 23001 +3 21402 23001 21881 +3 21403 21882 23002 +3 21403 23002 22523 +3 21404 22372 24596 +3 21404 24596 23649 +3 21405 23650 24597 +3 21405 24597 22372 +3 21406 21489 21587 +3 21406 21587 21517 +3 21407 21518 21588 +3 21407 21588 21490 +3 21408 23137 23637 +3 21408 23637 22399 +3 21409 22400 23638 +3 21409 23638 23138 +3 21410 21535 21575 +3 21410 21575 21467 +3 21411 21468 21576 +3 21411 21576 21536 +3 21412 22089 25177 +3 21412 25177 23304 +3 21413 23305 25178 +3 21413 25178 22090 +3 21414 21533 21595 +3 21414 21595 21489 +3 21415 21490 21596 +3 21415 21596 21534 +3 21416 21818 22730 +3 21416 22730 22326 +3 21417 22327 22731 +3 21417 22731 21819 +3 21418 22669 23078 +3 21418 23078 21830 +3 21419 21831 23079 +3 21419 23079 22670 +3 21420 21903 22514 +3 21420 22514 22012 +3 21421 22013 22515 +3 21421 22515 21904 +3 21422 22665 25742 +3 21422 25742 24458 +3 21423 24459 25743 +3 21423 25743 22666 +3 21424 24770 26129 +3 21424 26129 22693 +3 21425 22694 26130 +3 21425 26130 24771 +3 21426 22220 22415 +3 21426 22415 21630 +3 21427 21631 22416 +3 21427 22416 22221 +3 21428 24315 25607 +3 21428 25607 24316 +3 21429 21638 22008 +3 21429 22008 21826 +3 21430 21827 22009 +3 21430 22009 21639 +3 21431 21814 22125 +3 21431 22125 21725 +3 21432 21726 22126 +3 21432 22126 21815 +3 21433 22230 24034 +3 21433 24034 23254 +3 21434 23255 24035 +3 21434 24035 22231 +3 21435 25786 27029 +3 21435 27029 22592 +3 21436 22593 27030 +3 21436 27030 25787 +3 21437 21439 21569 +3 21437 21569 21607 +3 21437 21607 21491 +3 21438 21492 21608 +3 21438 21570 21440 +3 21438 21608 21570 +3 21439 21483 21593 +3 21439 21593 21569 +3 21440 21570 21594 +3 21440 21594 21484 +3 21441 21549 22054 +3 21441 21953 21543 +3 21441 22054 21953 +3 21442 21544 21954 +3 21442 21954 22055 +3 21442 22055 21550 +3 21443 21457 22486 +3 21443 22486 22487 +3 21443 22487 21458 +3 21444 21459 23532 +3 21444 23532 23533 +3 21444 23533 21460 +3 21445 23038 27210 +3 21445 25635 21446 +3 21445 27210 25635 +3 21446 25635 27211 +3 21446 27211 23039 +3 21447 21731 22147 +3 21447 22147 21848 +3 21448 21849 22148 +3 21448 22148 21732 +3 21449 21517 21611 +3 21449 21611 21518 +3 21450 21614 22093 +3 21450 22093 21929 +3 21451 21930 22094 +3 21451 22094 21615 +3 21452 21469 21943 +3 21452 21943 21944 +3 21452 21944 21470 +3 21453 22103 22417 +3 21453 22417 21803 +3 21454 21803 22418 +3 21454 22418 22104 +3 21455 21463 21605 +3 21455 21605 21618 +3 21455 21618 21485 +3 21456 21486 21619 +3 21456 21606 21464 +3 21456 21619 21606 +3 21457 21503 22516 +3 21457 22516 22486 +3 21458 22487 22517 +3 21458 22517 21504 +3 21459 22224 24325 +3 21459 24325 23532 +3 21460 23533 24326 +3 21460 24326 22225 +3 21461 22431 23681 +3 21461 23681 22703 +3 21462 22704 23682 +3 21462 23682 22432 +3 21463 21501 21626 +3 21463 21626 21605 +3 21464 21606 21627 +3 21464 21627 21502 +3 21465 24828 26117 +3 21465 26117 22653 +3 21466 22654 26118 +3 21466 26118 24829 +3 21467 21575 21624 +3 21467 21624 21545 +3 21468 21546 21625 +3 21468 21625 21576 +3 21469 21509 21983 +3 21469 21983 21943 +3 21470 21944 21984 +3 21470 21984 21510 +3 21471 22833 26516 +3 21471 26516 25071 +3 21472 25072 26517 +3 21472 26517 22834 +3 21473 22274 23050 +3 21473 23050 22248 +3 21474 22249 23051 +3 21474 23051 22275 +3 21475 21557 21642 +3 21475 21642 21559 +3 21476 21560 21643 +3 21476 21643 21558 +3 21477 22296 22942 +3 21477 22942 22143 +3 21478 22144 22943 +3 21478 22943 22297 +3 21479 22248 23060 +3 21479 23060 22288 +3 21480 22289 23061 +3 21480 23061 22249 +3 21481 22127 22568 +3 21481 22568 21939 +3 21482 21940 22569 +3 21482 22569 22128 +3 21483 21545 21636 +3 21483 21636 21593 +3 21484 21594 21637 +3 21484 21637 21546 +3 21485 21618 21650 +3 21485 21650 21533 +3 21486 21534 21651 +3 21486 21651 21619 +3 21487 23091 27147 +3 21487 27147 25464 +3 21488 25465 27148 +3 21488 27148 23092 +3 21489 21595 21673 +3 21489 21673 21587 +3 21490 21588 21674 +3 21490 21674 21596 +3 21491 21607 21663 +3 21491 21663 21557 +3 21492 21558 21664 +3 21492 21664 21608 +3 21493 23284 23813 +3 21493 23813 22046 +3 21494 22047 23814 +3 21494 23814 23285 +3 21495 22478 26198 +3 21495 26198 25113 +3 21496 25114 26199 +3 21496 26199 22479 +3 21497 22250 24750 +3 21497 24750 24099 +3 21498 24100 24751 +3 21498 24751 22251 +3 21499 21661 22066 +3 21499 22066 21897 +3 21500 21898 22067 +3 21500 22067 21662 +3 21501 21559 21675 +3 21501 21675 21626 +3 21502 21627 21676 +3 21502 21676 21560 +3 21503 21858 22896 +3 21503 22896 22516 +3 21504 22517 22897 +3 21504 22897 21859 +3 21505 22853 26462 +3 21505 26462 25093 +3 21506 25094 26463 +3 21506 26463 22854 +3 21507 21721 22085 +3 21507 22085 21863 +3 21508 21864 22086 +3 21508 22086 21722 +3 21509 21577 22018 +3 21509 22018 21983 +3 21510 21984 22019 +3 21510 22019 21578 +3 21511 21512 21652 +3 21511 21652 21659 +3 21511 21659 21535 +3 21512 21536 21660 +3 21512 21660 21652 +3 21513 22166 22460 +3 21513 22460 21791 +3 21514 21792 22461 +3 21514 22461 22167 +3 21515 22791 24147 +3 21515 24147 22885 +3 21516 22886 24148 +3 21516 24148 22792 +3 21517 21587 21665 +3 21517 21665 21611 +3 21518 21611 21666 +3 21518 21666 21588 +3 21519 23720 25848 +3 21519 25848 23589 +3 21520 23590 25849 +3 21520 25849 23721 +3 21521 23054 24370 +3 21521 24370 22837 +3 21522 22838 24371 +3 21522 24371 23055 +3 21523 23413 25406 +3 21523 25406 23510 +3 21524 23511 25407 +3 21524 25407 23414 +3 21525 23224 27880 +3 21525 27880 26286 +3 21526 26287 27881 +3 21526 27881 23225 +3 21527 23370 24054 +3 21527 24054 22188 +3 21528 22189 24055 +3 21528 24055 23371 +3 21529 22815 24075 +3 21529 24075 22791 +3 21530 22792 24076 +3 21530 24076 22816 +3 21531 21679 22113 +3 21531 22113 21962 +3 21532 21963 22114 +3 21532 22114 21680 +3 21533 21650 21713 +3 21533 21713 21595 +3 21534 21596 21714 +3 21534 21714 21651 +3 21535 21659 21687 +3 21535 21687 21575 +3 21536 21576 21688 +3 21536 21688 21660 +3 21537 22867 23379 +3 21537 23379 22024 +3 21538 22025 23380 +3 21538 23380 22868 +3 21539 22723 23204 +3 21539 23204 21989 +3 21540 21990 23205 +3 21540 23205 22724 +3 21541 22395 25004 +3 21541 25004 24040 +3 21542 24041 25005 +3 21542 25005 22396 +3 21543 21953 22068 +3 21543 22068 21655 +3 21544 21656 22069 +3 21544 22069 21954 +3 21545 21624 21705 +3 21545 21705 21636 +3 21546 21637 21706 +3 21546 21706 21625 +3 21547 22332 24344 +3 21547 24344 23555 +3 21548 23556 24345 +3 21548 24345 22333 +3 21549 21648 22157 +3 21549 22157 22054 +3 21550 22055 22158 +3 21550 22158 21649 +3 21551 22105 23709 +3 21551 23709 23093 +3 21552 23094 23710 +3 21552 23710 22106 +3 21553 22192 23041 +3 21553 23041 22409 +3 21554 22410 23042 +3 21554 23042 22193 +3 21555 23391 24024 +3 21555 24024 22182 +3 21556 22183 24025 +3 21556 24025 23392 +3 21557 21663 21747 +3 21557 21747 21642 +3 21558 21643 21748 +3 21558 21748 21664 +3 21559 21642 21751 +3 21559 21751 21675 +3 21560 21676 21752 +3 21560 21752 21643 +3 21561 21826 22240 +3 21561 22240 21997 +3 21562 21998 22243 +3 21562 22243 21827 +3 21563 22286 22649 +3 21563 22649 21935 +3 21564 21936 22650 +3 21564 22650 22287 +3 21565 23857 24724 +3 21565 24724 22468 +3 21566 22469 24725 +3 21566 24725 23858 +3 21567 22843 23220 +3 21567 23220 21917 +3 21568 21918 23221 +3 21568 23221 22844 +3 21569 21593 21703 +3 21569 21703 21745 +3 21569 21745 21607 +3 21570 21608 21746 +3 21570 21704 21594 +3 21570 21746 21704 +3 21571 22012 22647 +3 21571 22647 22178 +3 21572 22179 22648 +3 21572 22648 22013 +3 21573 23510 25500 +3 21573 25500 23599 +3 21574 23600 25501 +3 21574 25501 23511 +3 21575 21687 21739 +3 21575 21739 21624 +3 21576 21625 21740 +3 21576 21740 21688 +3 21577 21653 22107 +3 21577 22107 22018 +3 21578 22019 22108 +3 21578 22108 21654 +3 21579 23358 28014 +3 21579 28014 26304 +3 21580 26305 28015 +3 21580 28015 23359 +3 21581 21995 23480 +3 21581 23480 23056 +3 21582 23057 23481 +3 21582 23481 21996 +3 21583 22542 23482 +3 21583 23482 22538 +3 21584 22539 23483 +3 21584 23483 22543 +3 21585 22885 24217 +3 21585 24217 22916 +3 21586 22919 24218 +3 21586 24218 22886 +3 21587 21673 21749 +3 21587 21749 21665 +3 21588 21666 21750 +3 21588 21750 21674 +3 21589 22524 25496 +3 21589 25496 24592 +3 21590 24593 25497 +3 21590 25497 22525 +3 21591 22863 27535 +3 21591 27535 26354 +3 21592 26355 27536 +3 21592 27536 22864 +3 21593 21636 21741 +3 21593 21741 21703 +3 21594 21704 21742 +3 21594 21742 21637 +3 21595 21713 21787 +3 21595 21787 21673 +3 21596 21674 21788 +3 21596 21788 21714 +3 21597 22312 22608 +3 21597 22608 21899 +3 21598 21900 22609 +3 21598 22609 22313 +3 21599 22139 23728 +3 21599 23728 23187 +3 21600 23188 23729 +3 21600 23729 22140 +3 21601 23829 25589 +3 21601 25589 23765 +3 21602 23766 25650 +3 21602 25650 23830 +3 21603 22538 23575 +3 21603 23575 22580 +3 21604 22581 23576 +3 21604 23576 22539 +3 21605 21626 21793 +3 21605 21771 21618 +3 21605 21793 21771 +3 21606 21619 21772 +3 21606 21772 21794 +3 21606 21794 21627 +3 21607 21745 21806 +3 21607 21806 21663 +3 21608 21664 21807 +3 21608 21807 21746 +3 21609 23825 25970 +3 21609 25970 23720 +3 21610 23721 25971 +3 21610 25971 23826 +3 21611 21665 21780 +3 21611 21780 21666 +3 21612 22346 22683 +3 21612 22683 21921 +3 21613 21922 22684 +3 21613 22684 22347 +3 21614 21801 22258 +3 21614 22258 22093 +3 21615 22094 22259 +3 21615 22259 21802 +3 21616 22081 23619 +3 21616 23619 23155 +3 21617 23156 23620 +3 21617 23620 22082 +3 21618 21771 21804 +3 21618 21804 21650 +3 21619 21651 21805 +3 21619 21805 21772 +3 21620 21937 23514 +3 21620 23514 22542 +3 21621 22543 23515 +3 21621 23515 21938 +3 21622 21977 22938 +3 21622 22938 22584 +3 21623 22585 22939 +3 21623 22939 21978 +3 21624 21739 21810 +3 21624 21810 21705 +3 21625 21706 21811 +3 21625 21811 21740 +3 21626 21675 21824 +3 21626 21824 21793 +3 21627 21794 21825 +3 21627 21825 21676 +3 21628 23705 26125 +3 21628 26125 25040 +3 21629 25041 26126 +3 21629 26126 23706 +3 21630 22415 22630 +3 21630 22630 21836 +3 21631 21837 22631 +3 21631 22631 22416 +3 21632 22328 22639 +3 21632 22639 21834 +3 21633 21835 22640 +3 21633 22640 22329 +3 21634 22472 23244 +3 21634 23244 22373 +3 21635 22374 23245 +3 21635 23245 22473 +3 21636 21705 21808 +3 21636 21808 21741 +3 21637 21742 21809 +3 21637 21809 21706 +3 21638 21860 22214 +3 21638 22214 22008 +3 21639 22009 22215 +3 21639 22215 21860 +3 21640 22184 24211 +3 21640 24211 23669 +3 21641 23670 24212 +3 21641 24212 22185 +3 21642 21747 21850 +3 21642 21850 21751 +3 21643 21752 21851 +3 21643 21851 21748 +3 21644 21933 22954 +3 21644 22954 22655 +3 21645 22656 22955 +3 21645 22955 21934 +3 21646 23641 28868 +3 21646 28868 26866 +3 21647 26867 28869 +3 21647 28869 23642 +3 21648 21785 22304 +3 21648 22304 22157 +3 21649 22158 22305 +3 21649 22305 21786 +3 21650 21804 21844 +3 21650 21844 21713 +3 21651 21714 21845 +3 21651 21845 21805 +3 21652 21660 21829 +3 21652 21828 21659 +3 21652 21829 21828 +3 21653 21769 22298 +3 21653 22298 22107 +3 21654 22108 22299 +3 21654 22299 21770 +3 21655 22068 22190 +3 21655 22190 21814 +3 21656 21815 22191 +3 21656 22191 22069 +3 21657 21949 23043 +3 21657 23043 22618 +3 21658 22619 23044 +3 21658 23044 21950 +3 21659 21828 21854 +3 21659 21854 21687 +3 21660 21688 21855 +3 21660 21855 21829 +3 21661 21863 22238 +3 21661 22238 22066 +3 21662 22067 22239 +3 21662 22239 21864 +3 21663 21806 21871 +3 21663 21871 21747 +3 21664 21748 21872 +3 21664 21872 21807 +3 21665 21749 21842 +3 21665 21842 21780 +3 21666 21780 21843 +3 21666 21843 21750 +3 21667 22302 22928 +3 21667 22928 22296 +3 21668 22297 22929 +3 21668 22929 22303 +3 21669 21947 22922 +3 21669 22922 22634 +3 21670 22635 22923 +3 21670 22923 21948 +3 21671 23722 28803 +3 21671 28803 26774 +3 21672 26775 28804 +3 21672 28804 23723 +3 21673 21787 21846 +3 21673 21846 21749 +3 21674 21750 21847 +3 21674 21847 21788 +3 21675 21751 21875 +3 21675 21875 21824 +3 21676 21825 21876 +3 21676 21876 21752 +3 21677 22334 22795 +3 21677 22795 22127 +3 21678 22128 22796 +3 21678 22796 22335 +3 21679 21848 22270 +3 21679 22270 22113 +3 21680 22114 22271 +3 21680 22271 21849 +3 21681 22797 26949 +3 21681 26949 25774 +3 21682 25775 26950 +3 21682 26950 22798 +3 21683 21684 22488 +3 21683 22488 22500 +3 21683 22500 21695 +3 21684 21696 22501 +3 21684 22501 22488 +3 21685 22645 25203 +3 21685 25203 24287 +3 21686 24288 25204 +3 21686 25204 22646 +3 21687 21854 21879 +3 21687 21879 21739 +3 21688 21740 21880 +3 21688 21880 21855 +3 21689 21690 23009 +3 21689 23009 23020 +3 21689 23020 21729 +3 21690 21730 23021 +3 21690 23021 23009 +3 21691 21889 22960 +3 21691 22960 22302 +3 21692 22303 22961 +3 21692 22961 21890 +3 21693 22155 23177 +3 21693 23177 22755 +3 21694 22756 23178 +3 21694 23178 22156 +3 21695 22500 22530 +3 21695 22530 21783 +3 21696 21784 22531 +3 21696 22531 22501 +3 21697 24426 25157 +3 21697 25157 22482 +3 21698 22483 25158 +3 21698 25158 24427 +3 21699 22044 22362 +3 21699 22362 22034 +3 21700 22035 22363 +3 21700 22363 22045 +3 21701 23601 25306 +3 21701 25306 23466 +3 21702 23467 25307 +3 21702 25307 23602 +3 21703 21741 21867 +3 21703 21867 21893 +3 21703 21893 21745 +3 21704 21746 21894 +3 21704 21868 21742 +3 21704 21894 21868 +3 21705 21810 21877 +3 21705 21877 21808 +3 21706 21809 21878 +3 21706 21878 21811 +3 21707 23673 25738 +3 21707 25738 23756 +3 21708 23757 25739 +3 21708 25739 23674 +3 21709 22038 22364 +3 21709 22364 22044 +3 21710 22045 22365 +3 21710 22365 22039 +3 21711 21712 25634 +3 21711 25634 27105 +3 21711 27105 23222 +3 21712 23223 27106 +3 21712 27106 25634 +3 21713 21844 21909 +3 21713 21909 21787 +3 21714 21788 21910 +3 21714 21910 21845 +3 21715 22464 24520 +3 21715 24520 23807 +3 21716 23808 24521 +3 21716 24521 22465 +3 21717 22532 24586 +3 21717 24586 23821 +3 21718 23822 24587 +3 21718 24587 22533 +3 21719 24916 28387 +3 21719 28387 25107 +3 21720 25108 28388 +3 21720 28388 24917 +3 21721 21962 22308 +3 21721 22308 22085 +3 21722 22086 22309 +3 21722 22309 21963 +3 21723 23010 24362 +3 21723 24362 23101 +3 21724 23102 24363 +3 21724 24363 23011 +3 21725 22125 22405 +3 21725 22405 22038 +3 21726 22039 22406 +3 21726 22406 22126 +3 21727 23557 24060 +3 21727 24060 22202 +3 21728 22203 24061 +3 21728 24061 23558 +3 21729 23020 23508 +3 21729 23508 22204 +3 21730 22205 23509 +3 21730 23509 23021 +3 21731 22034 22421 +3 21731 22421 22147 +3 21732 22148 22422 +3 21732 22422 22035 +3 21733 22314 24402 +3 21733 24402 23833 +3 21734 23834 24403 +3 21734 24403 22315 +3 21735 25476 27055 +3 21735 27055 23248 +3 21736 23249 27056 +3 21736 27056 25477 +3 21737 22600 23344 +3 21737 23344 22472 +3 21738 22473 23345 +3 21738 23345 22601 +3 21739 21879 21941 +3 21739 21941 21810 +3 21740 21811 21942 +3 21740 21942 21880 +3 21741 21808 21915 +3 21741 21915 21867 +3 21742 21868 21916 +3 21742 21916 21809 +3 21743 26254 27774 +3 21743 27774 23360 +3 21744 23361 27775 +3 21744 27775 26255 +3 21745 21893 21945 +3 21745 21945 21806 +3 21746 21807 21946 +3 21746 21946 21894 +3 21747 21871 21969 +3 21747 21969 21850 +3 21748 21851 21970 +3 21748 21970 21872 +3 21749 21846 21927 +3 21749 21927 21842 +3 21750 21843 21928 +3 21750 21928 21847 +3 21751 21850 21979 +3 21751 21979 21875 +3 21752 21876 21980 +3 21752 21980 21851 +3 21753 22920 26097 +3 21753 26097 24824 +3 21754 24825 26098 +3 21754 26098 22921 +3 21755 24413 25608 +3 21755 25608 24412 +3 21756 22703 23742 +3 21756 23742 22765 +3 21757 22766 23743 +3 21757 23743 22704 +3 21758 22316 23877 +3 21758 23877 23324 +3 21759 23325 23878 +3 21759 23878 22317 +3 21760 22178 22681 +3 21760 22681 21887 +3 21761 21888 22682 +3 21761 22682 22179 +3 21762 22679 25219 +3 21762 25219 24352 +3 21763 24353 25220 +3 21763 25220 22680 +3 21764 25109 26468 +3 21764 26468 23034 +3 21765 23035 26469 +3 21765 26469 25110 +3 21766 23100 23713 +3 21766 23713 23099 +3 21767 23466 25201 +3 21767 25201 22354 +3 21768 22355 25202 +3 21768 25202 23467 +3 21769 21897 22401 +3 21769 22401 22298 +3 21770 22299 22402 +3 21770 22402 21898 +3 21771 21793 21964 +3 21771 21955 21804 +3 21771 21964 21955 +3 21772 21805 21956 +3 21772 21956 21965 +3 21772 21965 21794 +3 21773 24536 25732 +3 21773 25732 22908 +3 21774 22909 25733 +3 21774 25733 24537 +3 21775 23567 24241 +3 21775 24241 22453 +3 21776 22454 24242 +3 21776 24242 23568 +3 21777 24020 24636 +3 21777 24636 22391 +3 21778 22392 24637 +3 21778 24637 24021 +3 21779 22627 23049 +3 21779 23049 22626 +3 21780 21842 21968 +3 21780 21968 21843 +3 21781 22887 26085 +3 21781 26085 24872 +3 21782 24873 26086 +3 21782 26086 22888 +3 21783 22530 22803 +3 21783 22803 22050 +3 21784 22051 22804 +3 21784 22804 22531 +3 21785 21929 22419 +3 21785 22419 22304 +3 21786 22305 22420 +3 21786 22420 21930 +3 21787 21909 21973 +3 21787 21973 21846 +3 21788 21847 21974 +3 21788 21974 21910 +3 21789 25143 26153 +3 21789 26153 22709 +3 21790 22710 26154 +3 21790 26154 25144 +3 21791 22460 22785 +3 21791 22785 22103 +3 21792 22104 22786 +3 21792 22786 22461 +3 21793 21824 21991 +3 21793 21991 21964 +3 21794 21965 21992 +3 21794 21992 21825 +3 21795 26270 27878 +3 21795 27878 23464 +3 21796 23465 27879 +3 21796 27879 26271 +3 21797 25121 26410 +3 21797 26410 23052 +3 21798 23053 26411 +3 21798 26411 25122 +3 21799 23101 24416 +3 21799 24416 23163 +3 21800 23164 24417 +3 21800 24417 23102 +3 21801 21997 22451 +3 21801 22451 22258 +3 21802 22259 22452 +3 21802 22452 21998 +3 21803 22417 22740 +3 21803 22740 22418 +3 21804 21955 21993 +3 21804 21993 21844 +3 21805 21845 21994 +3 21805 21994 21956 +3 21806 21945 22010 +3 21806 22010 21871 +3 21807 21872 22011 +3 21807 22011 21946 +3 21808 21877 21985 +3 21808 21985 21915 +3 21809 21916 21986 +3 21809 21986 21878 +3 21810 21941 22016 +3 21810 22016 21877 +3 21811 21878 22017 +3 21811 22017 21942 +3 21812 26300 27447 +3 21812 27447 23016 +3 21813 23017 27448 +3 21813 27448 26301 +3 21814 22190 22512 +3 21814 22512 22125 +3 21815 22126 22513 +3 21815 22513 22191 +3 21816 24179 25012 +3 21816 25012 22725 +3 21817 22726 25013 +3 21817 25013 24180 +3 21818 22228 23147 +3 21818 23147 22730 +3 21819 22731 23148 +3 21819 23148 22229 +3 21820 23839 24700 +3 21820 24700 22729 +3 21821 22729 24701 +3 21821 24701 23840 +3 21822 23756 25832 +3 21822 25832 23847 +3 21823 23848 25833 +3 21823 25833 23757 +3 21824 21875 22042 +3 21824 22042 21991 +3 21825 21992 22043 +3 21825 22043 21876 +3 21826 22008 22413 +3 21826 22413 22240 +3 21827 22243 22414 +3 21827 22414 22009 +3 21828 21829 22003 +3 21828 22003 22014 +3 21828 22014 21854 +3 21829 21855 22015 +3 21829 22015 22003 +3 21830 23078 23585 +3 21830 23585 22262 +3 21831 22263 23586 +3 21831 23586 23079 +3 21832 22409 23119 +3 21832 23119 22526 +3 21833 22527 23120 +3 21833 23120 22410 +3 21834 22639 22869 +3 21834 22869 22079 +3 21835 22080 22870 +3 21835 22870 22640 +3 21836 22630 22859 +3 21836 22859 22074 +3 21837 22075 22860 +3 21837 22860 22631 +3 21838 26800 28686 +3 21838 28686 23750 +3 21839 23751 28687 +3 21839 28687 26801 +3 21840 22765 23773 +3 21840 23773 22881 +3 21841 22882 23774 +3 21841 23774 22766 +3 21842 21927 22032 +3 21842 22032 21968 +3 21843 21968 22033 +3 21843 22033 21928 +3 21844 21993 22064 +3 21844 22064 21909 +3 21845 21910 22065 +3 21845 22065 21994 +3 21846 21973 22036 +3 21846 22036 21927 +3 21847 21928 22037 +3 21847 22037 21974 +3 21848 22147 22550 +3 21848 22550 22270 +3 21849 22271 22551 +3 21849 22551 22148 +3 21850 21969 22077 +3 21850 22077 21979 +3 21851 21980 22078 +3 21851 22078 21970 +3 21852 22338 22924 +3 21852 22924 22403 +3 21853 22404 22925 +3 21853 22925 22339 +3 21854 22014 22060 +3 21854 22060 21879 +3 21855 21880 22061 +3 21855 22061 22015 +3 21856 23707 25416 +3 21856 25416 23601 +3 21857 23602 25417 +3 21857 25417 23708 +3 21858 22218 23300 +3 21858 23300 22896 +3 21859 22897 23301 +3 21859 23301 22219 +3 21860 22215 22446 +3 21860 22446 22214 +3 21861 22439 22934 +3 21861 22934 22338 +3 21862 22339 22935 +3 21862 22935 22440 +3 21863 22085 22437 +3 21863 22437 22238 +3 21864 22239 22438 +3 21864 22438 22086 +3 21865 26728 28644 +3 21865 28644 23789 +3 21866 23790 28645 +3 21866 28645 26729 +3 21867 21915 22040 +3 21867 22040 22087 +3 21867 22087 21893 +3 21868 21894 22088 +3 21868 22041 21916 +3 21868 22088 22041 +3 21869 23064 24424 +3 21869 24424 23268 +3 21870 23269 24425 +3 21870 24425 23065 +3 21871 22010 22111 +3 21871 22111 21969 +3 21872 21970 22112 +3 21872 22112 22011 +3 21873 23210 23718 +3 21873 23718 22375 +3 21874 22376 23719 +3 21874 23719 23211 +3 21875 21979 22131 +3 21875 22131 22042 +3 21876 22043 22132 +3 21876 22132 21980 +3 21877 22016 22135 +3 21877 22135 21985 +3 21878 21986 22136 +3 21878 22136 22017 +3 21879 22060 22123 +3 21879 22123 21941 +3 21880 21942 22124 +3 21880 22124 22061 +3 21881 23001 23512 +3 21881 23512 22384 +3 21882 22384 23513 +3 21882 23513 23002 +3 21883 22484 23849 +3 21883 23849 23278 +3 21884 23279 23850 +3 21884 23850 22485 +3 21885 23145 23478 +3 21885 23478 22236 +3 21886 22237 23479 +3 21886 23479 23146 +3 21887 22681 22827 +3 21887 22827 22052 +3 21888 22053 22828 +3 21888 22828 22682 +3 21889 22137 23192 +3 21889 23192 22960 +3 21890 22961 23193 +3 21890 23193 22138 +3 21891 23765 25510 +3 21891 25510 23707 +3 21892 23708 25511 +3 21892 25511 23766 +3 21893 22087 22133 +3 21893 22133 21945 +3 21894 21946 22134 +3 21894 22134 22088 +3 21895 24245 24816 +3 21895 24816 22582 +3 21896 22583 24817 +3 21896 24817 24246 +3 21897 22066 22572 +3 21897 22572 22401 +3 21898 22402 22573 +3 21898 22573 22067 +3 21899 22608 22889 +3 21899 22889 22166 +3 21900 22167 22890 +3 21900 22890 22609 +3 21901 25085 26095 +3 21901 26095 23825 +3 21902 23826 26096 +3 21902 26096 25086 +3 21903 22403 23007 +3 21903 23007 22514 +3 21904 22515 23008 +3 21904 23008 22404 +3 21905 23847 25946 +3 21905 25946 23969 +3 21906 23970 25947 +3 21906 25947 23848 +3 21907 23348 24462 +3 21907 24462 23064 +3 21908 23065 24463 +3 21908 24463 23349 +3 21909 22064 22119 +3 21909 22119 21973 +3 21910 21974 22120 +3 21910 22120 22065 +3 21911 25131 28251 +3 21911 28251 24954 +3 21912 24955 28252 +3 21912 28252 25132 +3 21913 24674 25506 +3 21913 25506 22793 +3 21914 22794 25507 +3 21914 25507 24675 +3 21915 21985 22115 +3 21915 22115 22040 +3 21916 22041 22116 +3 21916 22116 21986 +3 21917 23220 23559 +3 21917 23559 22284 +3 21918 22285 23560 +3 21918 23560 23221 +3 21919 25107 28597 +3 21919 28597 25310 +3 21920 25311 28598 +3 21920 28598 25108 +3 21921 22683 23026 +3 21921 23026 22286 +3 21922 22287 23027 +3 21922 23027 22684 +3 21923 25762 26872 +3 21923 26872 22962 +3 21924 22963 26873 +3 21924 26873 25763 +3 21925 22628 24149 +3 21925 24149 23518 +3 21926 23519 24150 +3 21926 24150 22629 +3 21927 22036 22151 +3 21927 22151 22032 +3 21928 22033 22152 +3 21928 22152 22037 +3 21929 22093 22578 +3 21929 22578 22419 +3 21930 22420 22579 +3 21930 22579 22094 +3 21931 24199 25055 +3 21931 25055 22745 +3 21932 22746 25056 +3 21932 25056 24200 +3 21933 22256 23276 +3 21933 23276 22954 +3 21934 22955 23277 +3 21934 23277 22257 +3 21935 22649 22865 +3 21935 22865 22334 +3 21936 22335 22866 +3 21936 22866 22650 +3 21937 22290 23873 +3 21937 23873 23514 +3 21938 23515 23874 +3 21938 23874 22291 +3 21939 22568 23068 +3 21939 23068 22439 +3 21940 22440 23069 +3 21940 23069 22569 +3 21941 22123 22170 +3 21941 22170 22016 +3 21942 22017 22171 +3 21942 22171 22124 +3 21943 21983 22470 +3 21943 22455 21944 +3 21943 22470 22455 +3 21944 22455 22471 +3 21944 22471 21984 +3 21945 22133 22172 +3 21945 22172 22010 +3 21946 22011 22173 +3 21946 22173 22134 +3 21947 22526 23226 +3 21947 23226 22922 +3 21948 22923 23227 +3 21948 23227 22527 +3 21949 22324 23429 +3 21949 23429 23043 +3 21950 23044 23430 +3 21950 23430 22325 +3 21951 23549 24233 +3 21951 24233 22661 +3 21952 22662 24234 +3 21952 24234 23550 +3 21953 22054 22586 +3 21953 22498 22068 +3 21953 22586 22498 +3 21954 22069 22499 +3 21954 22499 22587 +3 21954 22587 22055 +3 21955 21964 22161 +3 21955 22161 22163 +3 21955 22163 21993 +3 21956 21994 22164 +3 21956 22162 21965 +3 21956 22164 22162 +3 21957 23929 25590 +3 21957 25590 23989 +3 21958 23990 25649 +3 21958 25649 23930 +3 21959 23163 24492 +3 21959 24492 23350 +3 21960 23351 24493 +3 21960 24493 23164 +3 21961 21982 23806 +3 21961 23805 21981 +3 21961 23806 23805 +3 21962 22113 22564 +3 21962 22564 22308 +3 21963 22309 22565 +3 21963 22565 22114 +3 21964 21991 22174 +3 21964 22174 22161 +3 21965 22162 22175 +3 21965 22175 21992 +3 21966 23374 27009 +3 21966 25633 21967 +3 21966 27009 25633 +3 21967 25633 27010 +3 21967 27010 23375 +3 21968 22032 22165 +3 21968 22165 22033 +3 21969 22111 22194 +3 21969 22194 22077 +3 21970 22078 22195 +3 21970 22195 22112 +3 21971 23472 27625 +3 21971 27625 26222 +3 21972 26223 27626 +3 21972 27626 23473 +3 21973 22119 22168 +3 21973 22168 22036 +3 21974 22037 22169 +3 21974 22169 22120 +3 21975 22977 23799 +3 21975 23799 22948 +3 21976 22949 23800 +3 21976 23800 22978 +3 21977 22326 23322 +3 21977 23322 22938 +3 21978 22939 23323 +3 21978 23323 22327 +3 21979 22077 22198 +3 21979 22198 22131 +3 21980 22132 22199 +3 21980 22199 22078 +3 21981 23805 24474 +3 21981 24474 22657 +3 21982 22658 24475 +3 21982 24475 23806 +3 21983 22018 22528 +3 21983 22528 22470 +3 21984 22471 22529 +3 21984 22529 22019 +3 21985 22135 22226 +3 21985 22226 22115 +3 21986 22116 22227 +3 21986 22227 22136 +3 21987 23411 26967 +3 21987 26967 25484 +3 21988 25485 26968 +3 21988 26968 23412 +3 21989 23204 23671 +3 21989 23671 22522 +3 21990 22523 23672 +3 21990 23672 23205 +3 21991 22042 22216 +3 21991 22216 22174 +3 21992 22175 22217 +3 21992 22217 22043 +3 21993 22163 22208 +3 21993 22208 22064 +3 21994 22065 22209 +3 21994 22209 22164 +3 21995 22881 23919 +3 21995 23919 23480 +3 21996 23481 23920 +3 21996 23920 22882 +3 21997 22240 22687 +3 21997 22687 22451 +3 21998 22452 22688 +3 21998 22688 22243 +3 21999 22821 24806 +3 21999 24806 24049 +3 22000 24050 24807 +3 22000 24807 22822 +3 22001 23613 27766 +3 22001 27766 26230 +3 22002 26231 27767 +3 22002 27767 23614 +3 22003 22015 22207 +3 22003 22206 22014 +3 22003 22207 22206 +3 22004 23234 24319 +3 22004 24319 23143 +3 22005 23144 24320 +3 22005 24320 23235 +3 22006 22809 23474 +3 22006 23474 22705 +3 22007 22708 23475 +3 22007 23475 22810 +3 22008 22214 22614 +3 22008 22614 22413 +3 22009 22414 22615 +3 22009 22615 22215 +3 22010 22172 22264 +3 22010 22264 22111 +3 22011 22112 22265 +3 22011 22265 22173 +3 22012 22514 23135 +3 22012 23135 22647 +3 22013 22648 23136 +3 22013 23136 22515 +3 22014 22206 22246 +3 22014 22246 22060 +3 22015 22061 22247 +3 22015 22247 22207 +3 22016 22170 22282 +3 22016 22282 22135 +3 22017 22136 22283 +3 22017 22283 22171 +3 22018 22107 22576 +3 22018 22576 22528 +3 22019 22529 22577 +3 22019 22577 22108 +3 22020 23194 27325 +3 22020 27325 26266 +3 22021 26267 27326 +3 22021 27326 23195 +3 22022 23143 24255 +3 22022 24255 23183 +3 22023 23184 24256 +3 22023 24256 23144 +3 22024 23379 23893 +3 22024 23893 22544 +3 22025 22545 23894 +3 22025 23894 23380 +3 22026 23911 25728 +3 22026 25728 23829 +3 22027 23830 25729 +3 22027 25729 23912 +3 22028 22705 23498 +3 22028 23498 22845 +3 22029 22846 23499 +3 22029 23499 22708 +3 22030 23835 28511 +3 22030 28511 26756 +3 22031 26757 28512 +3 22031 28512 23836 +3 22032 22151 22272 +3 22032 22272 22165 +3 22033 22165 22273 +3 22033 22273 22152 +3 22034 22362 22783 +3 22034 22783 22421 +3 22035 22422 22784 +3 22035 22784 22363 +3 22036 22168 22266 +3 22036 22266 22151 +3 22037 22152 22267 +3 22037 22267 22169 +3 22038 22405 22771 +3 22038 22771 22364 +3 22039 22365 22772 +3 22039 22772 22406 +3 22040 22115 22241 +3 22040 22241 22276 +3 22040 22276 22087 +3 22041 22088 22277 +3 22041 22242 22116 +3 22041 22277 22242 +3 22042 22131 22300 +3 22042 22300 22216 +3 22043 22217 22301 +3 22043 22301 22132 +3 22044 22364 22741 +3 22044 22741 22362 +3 22045 22363 22742 +3 22045 22742 22365 +3 22046 23813 24488 +3 22046 24488 22773 +3 22047 22774 24489 +3 22047 24489 23814 +3 22048 23246 26414 +3 22048 26414 25141 +3 22049 25142 26415 +3 22049 26415 23247 +3 22050 22803 23089 +3 22050 23089 22328 +3 22051 22329 23090 +3 22051 23090 22804 +3 22052 22827 22997 +3 22052 22997 22220 +3 22053 22221 22998 +3 22053 22998 22828 +3 22054 22157 22706 +3 22054 22706 22586 +3 22055 22587 22707 +3 22055 22707 22158 +3 22056 22781 25193 +3 22056 25193 24516 +3 22057 24517 25194 +3 22057 25194 22782 +3 22058 23691 25326 +3 22058 25326 23775 +3 22059 23776 25327 +3 22059 25327 23692 +3 22060 22246 22294 +3 22060 22294 22123 +3 22061 22124 22295 +3 22061 22295 22247 +3 22062 23907 28459 +3 22062 28459 26668 +3 22063 26669 28460 +3 22063 28460 23908 +3 22064 22208 22268 +3 22064 22268 22119 +3 22065 22120 22269 +3 22065 22269 22209 +3 22066 22238 22749 +3 22066 22749 22572 +3 22067 22573 22750 +3 22067 22750 22239 +3 22068 22498 22604 +3 22068 22604 22190 +3 22069 22191 22605 +3 22069 22605 22499 +3 22070 24878 26059 +3 22070 26059 23153 +3 22071 23154 26060 +3 22071 26060 24879 +3 22072 23460 28678 +3 22072 28678 27279 +3 22073 27280 28679 +3 22073 28679 23461 +3 22074 22859 23113 +3 22074 23113 22312 +3 22075 22313 23114 +3 22075 23114 22860 +3 22076 24502 25609 +3 22076 25609 24503 +3 22077 22194 22318 +3 22077 22318 22198 +3 22078 22199 22319 +3 22078 22319 22195 +3 22079 22869 23179 +3 22079 23179 22346 +3 22080 22347 23180 +3 22080 23180 22870 +3 22081 22566 24081 +3 22081 24081 23619 +3 22082 23620 24082 +3 22082 24082 22567 +3 22083 24406 25250 +3 22083 25250 22956 +3 22084 22957 25251 +3 22084 25251 24407 +3 22085 22308 22675 +3 22085 22675 22437 +3 22086 22438 22676 +3 22086 22676 22309 +3 22087 22276 22310 +3 22087 22310 22133 +3 22088 22134 22311 +3 22088 22311 22277 +3 22089 22932 26115 +3 22089 26115 25177 +3 22090 25178 26116 +3 22090 26116 22933 +3 22091 23268 24388 +3 22091 24388 23234 +3 22092 23235 24389 +3 22092 24389 23269 +3 22093 22258 22747 +3 22093 22747 22578 +3 22094 22579 22748 +3 22094 22748 22259 +3 22095 23264 26366 +3 22095 26366 25153 +3 22096 25154 26367 +3 22096 26367 23265 +3 22097 22948 23937 +3 22097 23937 23107 +3 22098 23108 23938 +3 22098 23938 22949 +3 22099 25310 28758 +3 22099 28758 25438 +3 22100 25439 28759 +3 22100 28759 25311 +3 22101 24946 26051 +3 22101 26051 23129 +3 22102 23130 26052 +3 22102 26052 24947 +3 22103 22785 23095 +3 22103 23095 22417 +3 22104 22418 23096 +3 22104 23096 22786 +3 22105 22695 24269 +3 22105 24269 23709 +3 22106 23710 24270 +3 22106 24270 22696 +3 22107 22298 22775 +3 22107 22775 22576 +3 22108 22577 22776 +3 22108 22776 22299 +3 22109 25322 28433 +3 22109 28433 25131 +3 22110 25132 28434 +3 22110 28434 25323 +3 22111 22264 22342 +3 22111 22342 22194 +3 22112 22195 22343 +3 22112 22343 22265 +3 22113 22270 22717 +3 22113 22717 22564 +3 22114 22565 22718 +3 22114 22718 22271 +3 22115 22226 22350 +3 22115 22350 22241 +3 22116 22242 22351 +3 22116 22351 22227 +3 22117 24990 28099 +3 22117 28099 25145 +3 22118 25146 28100 +3 22118 28100 24991 +3 22119 22268 22320 +3 22119 22320 22168 +3 22120 22169 22321 +3 22120 22321 22269 +3 22121 22673 25237 +3 22121 25237 23691 +3 22122 23692 25238 +3 22122 25238 22674 +3 22123 22294 22344 +3 22123 22344 22170 +3 22124 22171 22345 +3 22124 22345 22295 +3 22125 22512 22817 +3 22125 22817 22405 +3 22126 22406 22818 +3 22126 22818 22513 +3 22127 22795 23238 +3 22127 23238 22568 +3 22128 22569 23239 +3 22128 23239 22796 +3 22129 23175 25722 +3 22129 25722 24645 +3 22130 24646 25723 +3 22130 25723 23176 +3 22131 22198 22356 +3 22131 22356 22300 +3 22132 22301 22357 +3 22132 22357 22199 +3 22133 22310 22348 +3 22133 22348 22172 +3 22134 22173 22349 +3 22134 22349 22311 +3 22135 22282 22366 +3 22135 22366 22226 +3 22136 22227 22367 +3 22136 22367 22283 +3 22137 22352 23407 +3 22137 23407 23192 +3 22138 23193 23408 +3 22138 23408 22353 +3 22139 22689 24253 +3 22139 24253 23728 +3 22140 23729 24254 +3 22140 24254 22690 +3 22141 23993 25822 +3 22141 25822 23911 +3 22142 23912 25823 +3 22142 25823 23994 +3 22143 22942 23617 +3 22143 23617 22809 +3 22144 22810 23618 +3 22144 23618 22943 +3 22145 23917 24376 +3 22145 24376 22612 +3 22146 22613 24377 +3 22146 24377 23918 +3 22147 22421 22855 +3 22147 22855 22550 +3 22148 22551 22856 +3 22148 22856 22422 +3 22149 24472 25260 +3 22149 25260 22975 +3 22150 22976 25261 +3 22150 25261 24473 +3 22151 22266 22358 +3 22151 22358 22272 +3 22152 22273 22359 +3 22152 22359 22267 +3 22153 23216 23995 +3 22153 23995 22977 +3 22154 22978 23996 +3 22154 23996 23217 +3 22155 22634 23645 +3 22155 23645 23177 +3 22156 23178 23646 +3 22156 23646 22635 +3 22157 22304 22823 +3 22157 22823 22706 +3 22158 22707 22824 +3 22158 22824 22305 +3 22159 23149 26790 +3 22159 26790 25754 +3 22160 25755 26791 +3 22160 26791 23150 +3 22161 22174 22389 +3 22161 22379 22163 +3 22161 22389 22379 +3 22162 22164 22380 +3 22162 22380 22390 +3 22162 22390 22175 +3 22163 22379 22387 +3 22163 22387 22208 +3 22164 22209 22388 +3 22164 22388 22380 +3 22165 22272 22383 +3 22165 22383 22273 +3 22166 22889 23181 +3 22166 23181 22460 +3 22167 22461 23182 +3 22167 23182 22890 +3 22168 22320 22381 +3 22168 22381 22266 +3 22169 22267 22382 +3 22169 22382 22321 +3 22170 22344 22433 +3 22170 22433 22282 +3 22171 22283 22434 +3 22171 22434 22345 +3 22172 22348 22427 +3 22172 22427 22264 +3 22173 22265 22428 +3 22173 22428 22349 +3 22174 22216 22429 +3 22174 22429 22389 +3 22175 22390 22430 +3 22175 22430 22217 +3 22176 23969 26061 +3 22176 26061 25123 +3 22177 25124 26062 +3 22177 26062 23970 +3 22178 22647 23141 +3 22178 23141 22681 +3 22179 22682 23142 +3 22179 23142 22648 +3 22180 23775 25428 +3 22180 25428 23879 +3 22181 23880 25429 +3 22181 25429 23776 +3 22182 24024 24664 +3 22182 24664 22861 +3 22183 22862 24665 +3 22183 24665 24025 +3 22184 22789 24728 +3 22184 24728 24211 +3 22185 24212 24729 +3 22185 24729 22790 +3 22186 26189 27494 +3 22186 27494 23627 +3 22187 23628 27495 +3 22187 27495 26190 +3 22188 24054 24710 +3 22188 24710 22914 +3 22189 22915 24711 +3 22189 24711 24055 +3 22190 22604 22912 +3 22190 22912 22512 +3 22191 22513 22913 +3 22191 22913 22605 +3 22192 22845 23695 +3 22192 23695 23041 +3 22193 23042 23696 +3 22193 23696 22846 +3 22194 22342 22462 +3 22194 22462 22318 +3 22195 22319 22463 +3 22195 22463 22343 +3 22196 23415 24496 +3 22196 24496 23348 +3 22197 23349 24497 +3 22197 24497 23416 +3 22198 22318 22474 +3 22198 22474 22356 +3 22199 22357 22475 +3 22199 22475 22319 +3 22200 24109 25932 +3 22200 25932 23993 +3 22201 23994 25933 +3 22201 25933 24110 +3 22202 24060 24518 +3 22202 24518 22736 +3 22203 22737 24519 +3 22203 24519 24061 +3 22204 23508 24005 +3 22204 24005 22691 +3 22205 22692 24006 +3 22205 24006 23509 +3 22206 22207 22441 +3 22206 22441 22449 +3 22206 22449 22246 +3 22207 22247 22450 +3 22207 22450 22441 +3 22208 22387 22425 +3 22208 22425 22268 +3 22209 22269 22426 +3 22209 22426 22388 +3 22210 22211 25632 +3 22210 25632 26923 +3 22210 26923 23520 +3 22211 23521 26924 +3 22211 26924 25632 +3 22212 25438 28908 +3 22212 28908 25580 +3 22213 25659 28909 +3 22213 28909 25439 +3 22214 22446 22841 +3 22214 22841 22614 +3 22215 22615 22842 +3 22215 22842 22446 +3 22216 22300 22494 +3 22216 22494 22429 +3 22217 22430 22495 +3 22217 22495 22301 +3 22218 22618 23687 +3 22218 23687 23300 +3 22219 23301 23688 +3 22219 23688 22619 +3 22220 22997 23212 +3 22220 23212 22415 +3 22221 22416 23213 +3 22221 23213 22998 +3 22222 23879 25520 +3 22222 25520 23929 +3 22223 23930 25521 +3 22223 25521 23880 +3 22224 23036 25077 +3 22224 25077 24325 +3 22225 24326 25078 +3 22225 25078 23037 +3 22226 22366 22518 +3 22226 22518 22350 +3 22227 22351 22519 +3 22227 22519 22367 +3 22228 22626 23526 +3 22228 23526 23147 +3 22229 23148 23527 +3 22229 23527 22627 +3 22230 23040 24780 +3 22230 24780 24034 +3 22231 24035 24781 +3 22231 24781 23040 +3 22232 26206 27611 +3 22232 27611 23744 +3 22233 23745 27612 +3 22233 27612 26207 +3 22234 26694 28359 +3 22234 28359 23933 +3 22235 23934 28360 +3 22235 28360 26695 +3 22236 23478 23853 +3 22236 23853 22600 +3 22237 22601 23854 +3 22237 23854 23479 +3 22238 22437 22950 +3 22238 22950 22749 +3 22239 22750 22951 +3 22239 22951 22438 +3 22240 22413 22877 +3 22240 22877 22687 +3 22241 22350 22466 +3 22241 22466 22276 +3 22242 22277 22467 +3 22242 22467 22351 +3 22243 22688 22878 +3 22243 22878 22414 +3 22244 27200 28517 +3 22244 28517 23583 +3 22245 23584 28518 +3 22245 28518 27201 +3 22246 22449 22496 +3 22246 22496 22294 +3 22247 22295 22497 +3 22247 22497 22450 +3 22248 23050 23855 +3 22248 23855 23060 +3 22249 23061 23856 +3 22249 23856 23051 +3 22250 23028 25516 +3 22250 25516 24750 +3 22251 24751 25517 +3 22251 25517 23029 +3 22252 26228 27235 +3 22252 27235 23330 +3 22253 23331 27236 +3 22253 27236 26229 +3 22254 25490 26874 +3 22254 26874 23563 +3 22255 23564 26875 +3 22255 26875 25491 +3 22256 22584 23591 +3 22256 23591 23276 +3 22257 23277 23592 +3 22257 23592 22585 +3 22258 22451 22936 +3 22258 22936 22747 +3 22259 22748 22937 +3 22259 22937 22452 +3 22260 26606 28312 +3 22260 28312 23983 +3 22261 23984 28313 +3 22261 28313 26607 +3 22262 23585 24014 +3 22262 24014 22723 +3 22263 22724 24015 +3 22263 24015 23586 +3 22264 22427 22534 +3 22264 22534 22342 +3 22265 22343 22535 +3 22265 22535 22428 +3 22266 22381 22510 +3 22266 22510 22358 +3 22267 22359 22511 +3 22267 22511 22382 +3 22268 22425 22490 +3 22268 22490 22320 +3 22269 22321 22491 +3 22269 22491 22426 +3 22270 22550 22985 +3 22270 22985 22717 +3 22271 22718 22986 +3 22271 22986 22551 +3 22272 22358 22508 +3 22272 22508 22383 +3 22273 22383 22509 +3 22273 22509 22359 +3 22274 23107 23921 +3 22274 23921 23050 +3 22275 23051 23922 +3 22275 23922 23108 +3 22276 22466 22506 +3 22276 22506 22310 +3 22277 22311 22507 +3 22277 22507 22467 +3 22278 23458 24562 +3 22278 24562 23415 +3 22279 23416 24563 +3 22279 24563 23459 +3 22280 25448 28614 +3 22280 28614 25322 +3 22281 25323 28615 +3 22281 28615 25449 +3 22282 22433 22546 +3 22282 22546 22366 +3 22283 22367 22547 +3 22283 22547 22434 +3 22284 23559 23951 +3 22284 23951 22669 +3 22285 22670 23952 +3 22285 23952 23560 +3 22286 23026 23397 +3 22286 23397 22649 +3 22287 22650 23398 +3 22287 23398 23027 +3 22288 23060 23889 +3 22288 23889 22556 +3 22289 22557 23890 +3 22289 23890 23061 +3 22290 22715 24279 +3 22290 24279 23873 +3 22291 23874 24280 +3 22291 24280 22716 +3 22292 25145 28286 +3 22292 28286 25328 +3 22293 25329 28287 +3 22293 28287 25146 +3 22294 22496 22554 +3 22294 22554 22344 +3 22295 22345 22555 +3 22295 22555 22497 +3 22296 22928 23573 +3 22296 23573 22942 +3 22297 22943 23574 +3 22297 23574 22929 +3 22298 22401 22966 +3 22298 22966 22775 +3 22299 22776 22967 +3 22299 22967 22402 +3 22300 22356 22562 +3 22300 22562 22494 +3 22301 22495 22563 +3 22301 22563 22357 +3 22302 22960 23579 +3 22302 23579 22928 +3 22303 22929 23580 +3 22303 23580 22961 +3 22304 22419 22964 +3 22304 22964 22823 +3 22305 22824 22965 +3 22305 22965 22420 +3 22306 25167 27948 +3 22306 27948 25014 +3 22307 25015 27949 +3 22307 27949 25168 +3 22308 22564 22906 +3 22308 22906 22675 +3 22309 22676 22907 +3 22309 22907 22565 +3 22310 22506 22548 +3 22310 22548 22348 +3 22311 22349 22549 +3 22311 22549 22507 +3 22312 23113 23364 +3 22312 23364 22608 +3 22313 22609 23365 +3 22313 23365 23114 +3 22314 22930 24908 +3 22314 24908 24402 +3 22315 24403 24909 +3 22315 24909 22931 +3 22316 22910 24428 +3 22316 24428 23877 +3 22317 23878 24429 +3 22317 24429 22911 +3 22318 22462 22588 +3 22318 22588 22474 +3 22319 22475 22589 +3 22319 22589 22463 +3 22320 22490 22558 +3 22320 22558 22381 +3 22321 22382 22559 +3 22321 22559 22491 +3 22322 24157 25591 +3 22322 25591 24105 +3 22323 24106 25648 +3 22323 25648 24158 +3 22324 22755 23819 +3 22324 23819 23429 +3 22325 23430 23820 +3 22325 23820 22756 +3 22326 22730 23685 +3 22326 23685 23322 +3 22327 23323 23686 +3 22327 23686 22731 +3 22328 23089 23389 +3 22328 23389 22639 +3 22329 22640 23390 +3 22329 23390 23090 +3 22330 25580 29026 +3 22330 29026 25800 +3 22331 25801 29027 +3 22331 29027 25659 +3 22332 23066 25115 +3 22332 25115 24344 +3 22333 24345 25116 +3 22333 25116 23067 +3 22334 22865 23320 +3 22334 23320 22795 +3 22335 22796 23321 +3 22335 23321 22866 +3 22336 25179 26360 +3 22336 26360 23435 +3 22337 23436 26361 +3 22337 26361 25180 +3 22338 22934 23433 +3 22338 23433 22924 +3 22339 22925 23434 +3 22339 23434 22935 +3 22340 23989 25718 +3 22340 25718 24062 +3 22341 24063 25719 +3 22341 25719 23990 +3 22342 22534 22620 +3 22342 22620 22462 +3 22343 22463 22621 +3 22343 22621 22535 +3 22344 22554 22622 +3 22344 22622 22433 +3 22345 22434 22623 +3 22345 22623 22555 +3 22346 23179 23462 +3 22346 23462 22683 +3 22347 22684 23463 +3 22347 23463 23180 +3 22348 22548 22602 +3 22348 22602 22427 +3 22349 22428 22603 +3 22349 22603 22549 +3 22350 22518 22590 +3 22350 22590 22466 +3 22351 22467 22591 +3 22351 22591 22519 +3 22352 22655 23701 +3 22352 23701 23407 +3 22353 23408 23702 +3 22353 23702 22656 +3 22354 25201 26081 +3 22354 26081 23167 +3 22355 23168 26082 +3 22355 26082 25202 +3 22356 22474 22643 +3 22356 22643 22562 +3 22357 22563 22644 +3 22357 22644 22475 +3 22358 22510 22606 +3 22358 22606 22508 +3 22359 22509 22607 +3 22359 22607 22511 +3 22360 25187 26292 +3 22360 26292 23447 +3 22361 23448 26293 +3 22361 26293 25188 +3 22362 22741 23131 +3 22362 23131 22783 +3 22363 22784 23132 +3 22363 23132 22742 +3 22364 22771 23123 +3 22364 23123 22741 +3 22365 22742 23124 +3 22365 23124 22772 +3 22366 22546 22663 +3 22366 22663 22518 +3 22367 22519 22664 +3 22367 22664 22547 +3 22368 23381 26035 +3 22368 26035 24956 +3 22369 24957 26036 +3 22369 26036 23382 +3 22370 24372 29592 +3 22370 29592 27597 +3 22371 27598 29593 +3 22371 29593 24373 +3 22372 24597 25610 +3 22372 25610 24596 +3 22373 23244 24046 +3 22373 24046 23216 +3 22374 23217 24047 +3 22374 24047 23245 +3 22375 23718 24159 +3 22375 24159 22867 +3 22376 22868 24160 +3 22376 24160 23719 +3 22377 25581 28718 +3 22377 28718 25448 +3 22378 25449 28719 +3 22378 28719 25658 +3 22379 22389 22596 +3 22379 22596 22598 +3 22379 22598 22387 +3 22380 22388 22599 +3 22380 22597 22390 +3 22380 22599 22597 +3 22381 22558 22636 +3 22381 22636 22510 +3 22382 22511 22637 +3 22382 22637 22559 +3 22383 22508 22638 +3 22383 22638 22509 +3 22384 23512 24009 +3 22384 24009 23513 +3 22385 23605 24582 +3 22385 24582 23431 +3 22386 23432 24583 +3 22386 24583 23606 +3 22387 22598 22667 +3 22387 22667 22425 +3 22388 22426 22668 +3 22388 22668 22599 +3 22389 22429 22616 +3 22389 22616 22596 +3 22390 22597 22617 +3 22390 22617 22430 +3 22391 24636 25227 +3 22391 25227 23054 +3 22392 23055 25228 +3 22392 25228 24637 +3 22393 23963 25348 +3 22393 25348 23887 +3 22394 23888 25349 +3 22394 25349 23964 +3 22395 23356 26019 +3 22395 26019 25004 +3 22396 25005 26020 +3 22396 26020 23357 +3 22397 25748 26726 +3 22397 26726 23326 +3 22398 23327 26727 +3 22398 26727 25749 +3 22399 23637 24638 +3 22399 24638 23458 +3 22400 23459 24639 +3 22400 24639 23638 +3 22401 22572 23115 +3 22401 23115 22966 +3 22402 22967 23116 +3 22402 23116 22573 +3 22403 22924 23506 +3 22403 23506 23007 +3 22404 23008 23507 +3 22404 23507 22925 +3 22405 22817 23159 +3 22405 23159 22771 +3 22406 22772 23160 +3 22406 23160 22818 +3 22407 23703 28375 +3 22407 28375 27113 +3 22408 27114 28376 +3 22408 28376 23704 +3 22409 23041 23732 +3 22409 23732 23119 +3 22410 23120 23733 +3 22410 23733 23042 +3 22411 23763 27371 +3 22411 27371 26145 +3 22412 26146 27372 +3 22412 27372 23764 +3 22413 22614 23076 +3 22413 23076 22877 +3 22414 22878 23077 +3 22414 23077 22615 +3 22415 23212 23409 +3 22415 23409 22630 +3 22416 22631 23410 +3 22416 23410 23213 +3 22417 23095 23393 +3 22417 23393 22740 +3 22418 22740 23394 +3 22418 23394 23096 +3 22419 22578 23117 +3 22419 23117 22964 +3 22420 22965 23118 +3 22420 23118 22579 +3 22421 22783 23198 +3 22421 23198 22855 +3 22422 22856 23199 +3 22422 23199 22784 +3 22423 24028 28200 +3 22423 28200 26638 +3 22424 26639 28201 +3 22424 28201 24029 +3 22425 22667 22713 +3 22425 22713 22490 +3 22426 22491 22714 +3 22426 22714 22668 +3 22427 22602 22699 +3 22427 22699 22534 +3 22428 22535 22700 +3 22428 22700 22603 +3 22429 22494 22671 +3 22429 22671 22616 +3 22430 22617 22672 +3 22430 22672 22495 +3 22431 23431 24616 +3 22431 24616 23681 +3 22432 23682 24617 +3 22432 24617 23432 +3 22433 22622 22734 +3 22433 22734 22546 +3 22434 22547 22735 +3 22434 22735 22623 +3 22435 24464 29567 +3 22435 29567 27516 +3 22436 27517 29568 +3 22436 29568 24465 +3 22437 22675 23173 +3 22437 23173 22950 +3 22438 22951 23174 +3 22438 23174 22676 +3 22439 23068 23543 +3 22439 23543 22934 +3 22440 22935 23544 +3 22440 23544 23069 +3 22441 22450 22712 +3 22441 22711 22449 +3 22441 22712 22711 +3 22442 25328 28437 +3 22442 28437 25454 +3 22443 25455 28438 +3 22443 28438 25329 +3 22444 24062 25810 +3 22444 25810 24141 +3 22445 24142 25811 +3 22445 25811 24063 +3 22446 22842 23080 +3 22446 23080 22841 +3 22447 24091 28147 +3 22447 28147 26556 +3 22448 26557 28148 +3 22448 28148 24092 +3 22449 22711 22732 +3 22449 22732 22496 +3 22450 22497 22733 +3 22450 22733 22712 +3 22451 22687 23157 +3 22451 23157 22936 +3 22452 22937 23158 +3 22452 23158 22688 +3 22453 24241 24892 +3 22453 24892 23196 +3 22454 23197 24893 +3 22454 24893 24242 +3 22455 22470 22991 +3 22455 22991 22992 +3 22455 22992 22471 +3 22456 23887 25280 +3 22456 25280 22972 +3 22457 22973 25281 +3 22457 25281 23888 +3 22458 23867 27475 +3 22458 27475 26167 +3 22459 26168 27476 +3 22459 27476 23868 +3 22460 23181 23449 +3 22460 23449 22785 +3 22461 22786 23450 +3 22461 23450 23182 +3 22462 22620 22757 +3 22462 22757 22588 +3 22463 22589 22758 +3 22463 22758 22621 +3 22464 23254 25290 +3 22464 25290 24520 +3 22465 24521 25291 +3 22465 25291 23255 +3 22466 22590 22719 +3 22466 22719 22506 +3 22467 22507 22720 +3 22467 22720 22591 +3 22468 24724 25716 +3 22468 25716 23419 +3 22469 23420 25717 +3 22469 25717 24725 +3 22470 22528 23005 +3 22470 23005 22991 +3 22471 22992 23006 +3 22471 23006 22529 +3 22472 23344 24089 +3 22472 24089 23244 +3 22473 23245 24090 +3 22473 24090 23345 +3 22474 22588 22769 +3 22474 22769 22643 +3 22475 22644 22770 +3 22475 22770 22589 +3 22476 25342 28129 +3 22476 28129 25167 +3 22477 25168 28130 +3 22477 28130 25343 +3 22478 23470 27115 +3 22478 27115 26198 +3 22479 26199 27116 +3 22479 27116 23471 +3 22480 25800 29139 +3 22480 29139 25928 +3 22481 25929 29140 +3 22481 29140 25801 +3 22482 25157 26037 +3 22482 26037 24109 +3 22483 24110 26038 +3 22483 26038 25158 +3 22484 23099 24414 +3 22484 24414 23849 +3 22485 23850 24415 +3 22485 24415 23100 +3 22486 22516 23541 +3 22486 23531 22487 +3 22486 23541 23531 +3 22487 23531 23542 +3 22487 23542 22517 +3 22488 22501 23293 +3 22488 23292 22500 +3 22488 23293 23292 +3 22489 22502 24069 +3 22489 24069 24070 +3 22489 24070 22503 +3 22490 22713 22777 +3 22490 22777 22558 +3 22491 22559 22778 +3 22491 22778 22714 +3 22492 23711 26826 +3 22492 25631 22493 +3 22492 26826 25631 +3 22493 25631 26827 +3 22493 26827 23712 +3 22494 22562 22738 +3 22494 22738 22671 +3 22495 22672 22739 +3 22495 22739 22563 +3 22496 22732 22767 +3 22496 22767 22554 +3 22497 22555 22768 +3 22497 22768 22733 +3 22498 22586 23151 +3 22498 23045 22604 +3 22498 23151 23045 +3 22499 22605 23046 +3 22499 23046 23152 +3 22499 23152 22587 +3 22500 23292 23312 +3 22500 23312 22530 +3 22501 22531 23313 +3 22501 23313 23293 +3 22502 23093 24642 +3 22502 24642 24069 +3 22503 24070 24643 +3 22503 24643 23094 +3 22504 25042 27821 +3 22504 27821 25191 +3 22505 25192 27822 +3 22505 27822 25043 +3 22506 22719 22751 +3 22506 22751 22548 +3 22507 22549 22752 +3 22507 22752 22720 +3 22508 22606 22763 +3 22508 22763 22638 +3 22509 22638 22764 +3 22509 22764 22607 +3 22510 22636 22759 +3 22510 22759 22606 +3 22511 22607 22760 +3 22511 22760 22637 +3 22512 22912 23236 +3 22512 23236 22817 +3 22513 22818 23237 +3 22513 23237 22913 +3 22514 23007 23625 +3 22514 23625 23135 +3 22515 23136 23626 +3 22515 23626 23008 +3 22516 22896 23939 +3 22516 23939 23541 +3 22517 23542 23940 +3 22517 23940 22897 +3 22518 22663 22753 +3 22518 22753 22590 +3 22519 22591 22754 +3 22519 22754 22664 +3 22520 25790 28861 +3 22520 28861 25581 +3 22521 25658 28862 +3 22521 28862 25791 +3 22522 23671 24143 +3 22522 24143 23001 +3 22523 23002 24144 +3 22523 24144 23672 +3 22524 23738 26780 +3 22524 26780 25496 +3 22525 25497 26781 +3 22525 26781 23739 +3 22526 23119 23801 +3 22526 23801 23226 +3 22527 23227 23802 +3 22527 23802 23120 +3 22528 22576 23070 +3 22528 23070 23005 +3 22529 23006 23071 +3 22529 23071 22577 +3 22530 23312 23595 +3 22530 23595 22803 +3 22531 22804 23596 +3 22531 23596 23313 +3 22532 23288 25294 +3 22532 25294 24586 +3 22533 24587 25295 +3 22533 25295 23289 +3 22534 22699 22799 +3 22534 22799 22620 +3 22535 22621 22800 +3 22535 22800 22700 +3 22536 24141 25912 +3 22536 25912 24239 +3 22537 24240 25913 +3 22537 25913 24142 +3 22538 23482 24490 +3 22538 24490 23575 +3 22539 23576 24491 +3 22539 24491 23483 +3 22540 24044 25442 +3 22540 25442 23963 +3 22541 23964 25443 +3 22541 25443 24045 +3 22542 23514 24450 +3 22542 24450 23482 +3 22543 23483 24451 +3 22543 24451 23515 +3 22544 23893 24392 +3 22544 24392 23145 +3 22545 23146 24393 +3 22545 24393 23894 +3 22546 22734 22831 +3 22546 22831 22663 +3 22547 22664 22832 +3 22547 22832 22735 +3 22548 22751 22807 +3 22548 22807 22602 +3 22549 22603 22808 +3 22549 22808 22752 +3 22550 22855 23308 +3 22550 23308 22985 +3 22551 22986 23309 +3 22551 23309 22856 +3 22552 27488 29400 +3 22552 29400 24438 +3 22553 24439 29401 +3 22553 29401 27489 +3 22554 22767 22825 +3 22554 22825 22622 +3 22555 22623 22826 +3 22555 22826 22768 +3 22556 23889 24151 +3 22556 24151 22843 +3 22557 22844 24152 +3 22557 24152 23890 +3 22558 22777 22839 +3 22558 22839 22636 +3 22559 22637 22840 +3 22559 22840 22778 +3 22560 23959 29166 +3 22560 29166 27778 +3 22561 27779 29167 +3 22561 29167 23960 +3 22562 22643 22813 +3 22562 22813 22738 +3 22563 22739 22814 +3 22563 22814 22644 +3 22564 22717 23189 +3 22564 23189 22906 +3 22565 22907 23190 +3 22565 23190 22718 +3 22566 23187 24652 +3 22566 24652 24081 +3 22567 24082 24653 +3 22567 24653 23188 +3 22568 23238 23714 +3 22568 23714 23068 +3 22569 23069 23715 +3 22569 23715 23239 +3 22570 25454 28561 +3 22570 28561 25582 +3 22571 25657 28562 +3 22571 28562 25455 +3 22572 22749 23272 +3 22572 23272 23115 +3 22573 23116 23273 +3 22573 23273 22750 +3 22574 24105 25526 +3 22574 25526 24044 +3 22575 24045 25527 +3 22575 25527 24106 +3 22576 22775 23256 +3 22576 23256 23070 +3 22577 23071 23257 +3 22577 23257 22776 +3 22578 22747 23270 +3 22578 23270 23117 +3 22579 23118 23271 +3 22579 23271 22748 +3 22580 23575 24542 +3 22580 24542 23605 +3 22581 23606 24543 +3 22581 24543 23576 +3 22582 24816 25522 +3 22582 25522 23318 +3 22583 23319 25523 +3 22583 25523 24817 +3 22584 22938 23991 +3 22584 23991 23591 +3 22585 23592 23992 +3 22585 23992 22939 +3 22586 22706 23258 +3 22586 23258 23151 +3 22587 23152 23259 +3 22587 23259 22707 +3 22588 22757 22883 +3 22588 22883 22769 +3 22589 22770 22884 +3 22589 22884 22758 +3 22590 22753 22849 +3 22590 22849 22719 +3 22591 22720 22850 +3 22591 22850 22754 +3 22592 27029 28222 +3 22592 28222 23791 +3 22593 23792 28223 +3 22593 28223 27030 +3 22594 27449 29373 +3 22594 29373 24510 +3 22595 24511 29374 +3 22595 29374 27450 +3 22596 22616 22829 +3 22596 22819 22598 +3 22596 22829 22819 +3 22597 22599 22820 +3 22597 22820 22830 +3 22597 22830 22617 +3 22598 22819 22875 +3 22598 22875 22667 +3 22599 22668 22876 +3 22599 22876 22820 +3 22600 23853 24201 +3 22600 24201 23344 +3 22601 23345 24202 +3 22601 24202 23854 +3 22602 22807 22873 +3 22602 22873 22699 +3 22603 22700 22874 +3 22603 22874 22808 +3 22604 23045 23352 +3 22604 23352 22912 +3 22605 22913 23353 +3 22605 23353 23046 +3 22606 22759 22871 +3 22606 22871 22763 +3 22607 22764 22872 +3 22607 22872 22760 +3 22608 23364 23623 +3 22608 23623 22889 +3 22609 22890 23624 +3 22609 23624 23365 +3 22610 25466 28280 +3 22610 28280 25342 +3 22611 25343 28281 +3 22611 28281 25467 +3 22612 24376 24814 +3 22612 24814 23137 +3 22613 23138 24815 +3 22613 24815 24377 +3 22614 22841 23298 +3 22614 23298 23076 +3 22615 23077 23299 +3 22615 23299 22842 +3 22616 22671 22857 +3 22616 22857 22829 +3 22617 22830 22858 +3 22617 22858 22672 +3 22618 23043 24087 +3 22618 24087 23687 +3 22619 23688 24088 +3 22619 24088 23044 +3 22620 22799 22893 +3 22620 22893 22757 +3 22621 22758 22894 +3 22621 22894 22800 +3 22622 22825 22917 +3 22622 22917 22734 +3 22623 22735 22918 +3 22623 22918 22826 +3 22624 25916 28958 +3 22624 28958 25790 +3 22625 25791 28959 +3 22625 28959 25917 +3 22626 23049 23943 +3 22626 23943 23526 +3 22627 23527 23944 +3 22627 23944 23049 +3 22628 23056 24530 +3 22628 24530 24149 +3 22629 24150 24531 +3 22629 24531 23057 +3 22630 23409 23631 +3 22630 23631 22859 +3 22631 22860 23632 +3 22631 23632 23410 +3 22632 26572 28016 +3 22632 28016 24133 +3 22633 24134 28017 +3 22633 28017 26573 +3 22634 22922 23923 +3 22634 23923 23645 +3 22635 23646 23924 +3 22635 23924 22923 +3 22636 22839 22944 +3 22636 22944 22759 +3 22637 22760 22945 +3 22637 22945 22840 +3 22638 22763 22895 +3 22638 22895 22764 +3 22639 23389 23716 +3 22639 23716 22869 +3 22640 22870 23717 +3 22640 23717 23390 +3 22641 25928 29319 +3 22641 29319 26131 +3 22642 26132 29320 +3 22642 29320 25929 +3 22643 22769 22898 +3 22643 22898 22813 +3 22644 22814 22899 +3 22644 22899 22770 +3 22645 23649 26282 +3 22645 26282 25203 +3 22646 25204 26283 +3 22646 26283 23650 +3 22647 23135 23615 +3 22647 23615 23141 +3 22648 23142 23616 +3 22648 23616 23136 +3 22649 23397 23611 +3 22649 23611 22865 +3 22650 22866 23612 +3 22650 23612 23398 +3 22651 26508 27990 +3 22651 27990 24183 +3 22652 24184 27991 +3 22652 27991 26509 +3 22653 26117 27257 +3 22653 27257 23901 +3 22654 23902 27258 +3 22654 27258 26118 +3 22655 22954 23977 +3 22655 23977 23701 +3 22656 23702 23978 +3 22656 23978 22955 +3 22657 24474 25135 +3 22657 25135 23370 +3 22658 23371 25136 +3 22658 25136 24475 +3 22659 25191 27986 +3 22659 27986 25352 +3 22660 25353 27987 +3 22660 27987 25192 +3 22661 24233 24864 +3 22661 24864 23376 +3 22662 23376 24865 +3 22662 24865 24234 +3 22663 22831 22900 +3 22663 22900 22753 +3 22664 22754 22901 +3 22664 22901 22832 +3 22665 23486 26646 +3 22665 26646 25742 +3 22666 25743 26647 +3 22666 26647 23487 +3 22667 22875 22940 +3 22667 22940 22713 +3 22668 22714 22941 +3 22668 22941 22876 +3 22669 23951 24317 +3 22669 24317 23078 +3 22670 23079 24318 +3 22670 24318 23952 +3 22671 22738 22904 +3 22671 22904 22857 +3 22672 22858 22905 +3 22672 22905 22739 +3 22673 23387 26045 +3 22673 26045 25237 +3 22674 25238 26046 +3 22674 26046 23388 +3 22675 22906 23405 +3 22675 23405 23173 +3 22676 23174 23406 +3 22676 23406 22907 +3 22677 25582 28668 +3 22677 28668 25784 +3 22678 25785 28669 +3 22678 28669 25657 +3 22679 23665 26234 +3 22679 26234 25219 +3 22680 25220 26235 +3 22680 26235 23666 +3 22681 23141 23633 +3 22681 23633 22827 +3 22682 22828 23634 +3 22682 23634 23142 +3 22683 23462 23777 +3 22683 23777 23026 +3 22684 23027 23778 +3 22684 23778 23463 +3 22685 24213 25712 +3 22685 25712 24157 +3 22686 24158 25713 +3 22686 25713 24214 +3 22687 22877 23332 +3 22687 23332 23157 +3 22688 23158 23333 +3 22688 23333 22878 +3 22689 23278 24774 +3 22689 24774 24253 +3 22690 24254 24775 +3 22690 24775 23279 +3 22691 24005 24478 +3 22691 24478 23210 +3 22692 23211 24479 +3 22692 24479 24006 +3 22693 26129 27337 +3 22693 27337 23981 +3 22694 23982 27338 +3 22694 27338 26130 +3 22695 23324 24810 +3 22695 24810 24269 +3 22696 24270 24811 +3 22696 24811 23325 +3 22697 24259 25592 +3 22697 25592 24307 +3 22698 24308 25647 +3 22698 25647 24260 +3 22699 22873 22968 +3 22699 22968 22799 +3 22700 22800 22969 +3 22700 22969 22874 +3 22701 25211 27687 +3 22701 27687 25081 +3 22702 25082 27688 +3 22702 27688 25212 +3 22703 23681 24660 +3 22703 24660 23742 +3 22704 23743 24661 +3 22704 24661 23682 +3 22705 23474 24167 +3 22705 24167 23498 +3 22706 22823 23377 +3 22706 23377 23258 +3 22707 23259 23378 +3 22707 23378 22824 +3 22708 23499 24168 +3 22708 24168 23475 +3 22709 26153 27017 +3 22709 27017 23643 +3 22710 23644 27018 +3 22710 27018 26154 +3 22711 22712 22974 +3 22711 22974 22979 +3 22711 22979 22732 +3 22712 22733 22980 +3 22712 22980 22974 +3 22713 22940 22989 +3 22713 22989 22777 +3 22714 22778 22990 +3 22714 22990 22941 +3 22715 23155 24678 +3 22715 24678 24279 +3 22716 24280 24679 +3 22716 24679 23156 +3 22717 22985 23439 +3 22717 23439 23189 +3 22718 23190 23440 +3 22718 23440 22986 +3 22719 22849 22970 +3 22719 22970 22751 +3 22720 22752 22971 +3 22720 22971 22850 +3 22721 27655 28994 +3 22721 28994 24038 +3 22722 24039 28995 +3 22722 28995 27656 +3 22723 24014 24470 +3 22723 24470 23204 +3 22724 23205 24471 +3 22724 24471 24015 +3 22725 25012 25988 +3 22725 25988 23609 +3 22726 23610 25989 +3 22726 25989 25013 +3 22727 24482 29208 +3 22727 29208 27403 +3 22728 27404 29209 +3 22728 29209 24483 +3 22729 24700 25611 +3 22729 25611 24701 +3 22730 23147 24056 +3 22730 24056 23685 +3 22731 23686 24057 +3 22731 24057 23148 +3 22732 22979 22993 +3 22732 22993 22767 +3 22733 22768 22994 +3 22733 22994 22980 +3 22734 22917 23018 +3 22734 23018 22831 +3 22735 22832 23019 +3 22735 23019 22918 +3 22736 24518 24996 +3 22736 24996 23284 +3 22737 23285 24997 +3 22737 24997 24519 +3 22738 22813 22983 +3 22738 22983 22904 +3 22739 22905 22984 +3 22739 22984 22814 +3 22740 23393 23724 +3 22740 23724 23394 +3 22741 23123 23443 +3 22741 23443 23131 +3 22742 23132 23444 +3 22742 23444 23124 +3 22743 25583 28403 +3 22743 28403 25466 +3 22744 25467 28404 +3 22744 28404 25656 +3 22745 25055 25978 +3 22745 25978 23577 +3 22746 23578 25979 +3 22746 25979 25056 +3 22747 22936 23421 +3 22747 23421 23270 +3 22748 23271 23422 +3 22748 23422 22937 +3 22749 22950 23452 +3 22749 23452 23272 +3 22750 23273 23453 +3 22750 23453 22951 +3 22751 22970 23003 +3 22751 23003 22807 +3 22752 22808 23004 +3 22752 23004 22971 +3 22753 22900 22995 +3 22753 22995 22849 +3 22754 22850 22996 +3 22754 22996 22901 +3 22755 23177 24225 +3 22755 24225 23819 +3 22756 23820 24226 +3 22756 24226 23178 +3 22757 22893 23022 +3 22757 23022 22883 +3 22758 22884 23023 +3 22758 23023 22894 +3 22759 22944 23062 +3 22759 23062 22871 +3 22760 22872 23063 +3 22760 23063 22945 +3 22761 22762 25630 +3 22761 25630 26736 +3 22761 26736 23863 +3 22762 23864 26737 +3 22762 26737 25630 +3 22763 22871 23014 +3 22763 23014 22895 +3 22764 22895 23015 +3 22764 23015 22872 +3 22765 23742 24704 +3 22765 24704 23773 +3 22766 23774 24705 +3 22766 24705 23743 +3 22767 22993 23032 +3 22767 23032 22825 +3 22768 22826 23033 +3 22768 23033 22994 +3 22769 22883 23024 +3 22769 23024 22898 +3 22770 22899 23025 +3 22770 23025 22884 +3 22771 23159 23484 +3 22771 23484 23123 +3 22772 23124 23485 +3 22772 23485 23160 +3 22773 24488 25165 +3 22773 25165 23391 +3 22774 23392 25166 +3 22774 25166 24489 +3 22775 22966 23437 +3 22775 23437 23256 +3 22776 23257 23438 +3 22776 23438 22967 +3 22777 22989 23058 +3 22777 23058 22839 +3 22778 22840 23059 +3 22778 23059 22990 +3 22779 24570 29176 +3 22779 29176 27331 +3 22780 27332 29177 +3 22780 29177 24571 +3 22781 24239 26001 +3 22781 26001 25193 +3 22782 25194 26002 +3 22782 26002 24240 +3 22783 23131 23502 +3 22783 23502 23198 +3 22784 23199 23505 +3 22784 23505 23132 +3 22785 23449 23767 +3 22785 23767 23095 +3 22786 23096 23768 +3 22786 23768 23450 +3 22787 24293 25796 +3 22787 25796 24213 +3 22788 24214 25797 +3 22788 25797 24294 +3 22789 23350 25270 +3 22789 25270 24728 +3 22790 24729 25271 +3 22790 25271 23351 +3 22791 24075 25368 +3 22791 25368 24147 +3 22792 24148 25369 +3 22792 25369 24076 +3 22793 25506 26702 +3 22793 26702 23897 +3 22794 23898 26703 +3 22794 26703 25507 +3 22795 23320 23752 +3 22795 23752 23238 +3 22796 23239 23753 +3 22796 23753 23321 +3 22797 23913 28044 +3 22797 28044 26949 +3 22798 26950 28045 +3 22798 28045 23914 +3 22799 22968 23072 +3 22799 23072 22893 +3 22800 22894 23073 +3 22800 23073 22969 +3 22801 25784 28796 +3 22801 28796 25910 +3 22802 25911 28797 +3 22802 28797 25785 +3 22803 23595 23881 +3 22803 23881 23089 +3 22804 23090 23882 +3 22804 23882 23596 +3 22805 26107 29129 +3 22805 29129 25916 +3 22806 25917 29130 +3 22806 29130 26108 +3 22807 23003 23081 +3 22807 23081 22873 +3 22808 22874 23082 +3 22808 23082 23004 +3 22809 23617 24267 +3 22809 24267 23474 +3 22810 23475 24268 +3 22810 24268 23618 +3 22811 25352 28113 +3 22811 28113 25474 +3 22812 25475 28114 +3 22812 28114 25353 +3 22813 22898 23083 +3 22813 23083 22983 +3 22814 22984 23084 +3 22814 23084 22899 +3 22815 23280 25302 +3 22815 25302 24075 +3 22816 24076 25303 +3 22816 25303 23281 +3 22817 23236 23553 +3 22817 23553 23159 +3 22818 23160 23554 +3 22818 23554 23237 +3 22819 22829 23047 +3 22819 23047 23111 +3 22819 23111 22875 +3 22820 22876 23112 +3 22820 23048 22830 +3 22820 23112 23048 +3 22821 23669 25708 +3 22821 25708 24806 +3 22822 24807 25709 +3 22822 25709 23670 +3 22823 22964 23488 +3 22823 23488 23377 +3 22824 23378 23489 +3 22824 23489 22965 +3 22825 23032 23133 +3 22825 23133 22917 +3 22826 22918 23134 +3 22826 23134 23033 +3 22827 23633 23783 +3 22827 23783 22997 +3 22828 22998 23784 +3 22828 23784 23634 +3 22829 22857 23074 +3 22829 23074 23047 +3 22830 23048 23075 +3 22830 23075 22858 +3 22831 23018 23105 +3 22831 23105 22900 +3 22832 22901 23106 +3 22832 23106 23019 +3 22833 24229 27864 +3 22833 27864 26516 +3 22834 26517 27865 +3 22834 27865 24230 +3 22835 25772 28495 +3 22835 28495 25583 +3 22836 25656 28496 +3 22836 28496 25773 +3 22837 24370 25890 +3 22837 25890 24293 +3 22838 24294 25891 +3 22838 25891 24371 +3 22839 23058 23161 +3 22839 23161 22944 +3 22840 22945 23162 +3 22840 23162 23059 +3 22841 23080 23492 +3 22841 23492 23298 +3 22842 23299 23493 +3 22842 23493 23080 +3 22843 24151 24480 +3 22843 24480 23220 +3 22844 23221 24481 +3 22844 24481 24152 +3 22845 23498 24311 +3 22845 24311 23695 +3 22846 23696 24312 +3 22846 24312 23499 +3 22847 25364 27835 +3 22847 27835 25211 +3 22848 25212 27836 +3 22848 27836 25365 +3 22849 22995 23121 +3 22849 23121 22970 +3 22850 22971 23122 +3 22850 23122 22996 +3 22851 26131 29519 +3 22851 29519 26322 +3 22852 26323 29520 +3 22852 29520 26132 +3 22853 24271 27827 +3 22853 27827 26462 +3 22854 26463 27828 +3 22854 27828 24272 +3 22855 23198 23597 +3 22855 23597 23308 +3 22856 23309 23598 +3 22856 23598 23199 +3 22857 22904 23127 +3 22857 23127 23074 +3 22858 23075 23128 +3 22858 23128 22905 +3 22859 23631 23869 +3 22859 23869 23113 +3 22860 23114 23870 +3 22860 23870 23632 +3 22861 24664 25316 +3 22861 25316 23549 +3 22862 23550 25317 +3 22862 25317 24665 +3 22863 24125 28831 +3 22863 28831 27535 +3 22864 27536 28832 +3 22864 28832 24126 +3 22865 23611 23815 +3 22865 23815 23320 +3 22866 23321 23816 +3 22866 23816 23612 +3 22867 24159 24612 +3 22867 24612 23379 +3 22868 23380 24613 +3 22868 24613 24160 +3 22869 23716 23979 +3 22869 23979 23179 +3 22870 23180 23980 +3 22870 23980 23717 +3 22871 23062 23218 +3 22871 23218 23014 +3 22872 23015 23219 +3 22872 23219 23063 +3 22873 23081 23165 +3 22873 23165 22968 +3 22874 22969 23166 +3 22874 23166 23082 +3 22875 23111 23171 +3 22875 23171 22940 +3 22876 22941 23172 +3 22876 23172 23112 +3 22877 23076 23516 +3 22877 23516 23332 +3 22878 23333 23517 +3 22878 23517 23077 +3 22879 27305 29004 +3 22879 29004 24544 +3 22880 24545 29005 +3 22880 29005 27306 +3 22881 23773 24754 +3 22881 24754 23919 +3 22882 23920 24755 +3 22882 24755 23774 +3 22883 23022 23214 +3 22883 23214 23024 +3 22884 23025 23215 +3 22884 23215 23023 +3 22885 24147 25462 +3 22885 25462 24217 +3 22886 24218 25463 +3 22886 25463 24148 +3 22887 24010 27125 +3 22887 27125 26085 +3 22888 26086 27126 +3 22888 27126 24011 +3 22889 23623 23899 +3 22889 23899 23181 +3 22890 23182 23900 +3 22890 23900 23624 +3 22891 25113 27533 +3 22891 27533 25235 +3 22892 25236 27534 +3 22892 27534 25114 +3 22893 23072 23206 +3 22893 23206 23022 +3 22894 23023 23207 +3 22894 23207 23073 +3 22895 23014 23191 +3 22895 23191 23015 +3 22896 23300 24323 +3 22896 24323 23939 +3 22897 23940 24324 +3 22897 24324 23301 +3 22898 23024 23208 +3 22898 23208 23083 +3 22899 23084 23209 +3 22899 23209 23025 +3 22900 23105 23202 +3 22900 23202 22995 +3 22901 22996 23203 +3 22901 23203 23106 +3 22902 25474 28239 +3 22902 28239 25584 +3 22903 25655 28240 +3 22903 28240 25475 +3 22904 22983 23200 +3 22904 23200 23127 +3 22905 23128 23201 +3 22905 23201 22984 +3 22906 23189 23663 +3 22906 23663 23405 +3 22907 23406 23664 +3 22907 23664 23190 +3 22908 25732 26564 +3 22908 26564 23689 +3 22909 23690 26565 +3 22909 26565 25733 +3 22910 23518 25002 +3 22910 25002 24428 +3 22911 24429 25003 +3 22911 25003 23519 +3 22912 23352 23661 +3 22912 23661 23236 +3 22913 23237 23662 +3 22913 23662 23353 +3 22914 24710 25324 +3 22914 25324 23567 +3 22915 23568 25325 +3 22915 25325 24711 +3 22916 24217 25532 +3 22916 25532 24259 +3 22917 23133 23228 +3 22917 23228 23018 +3 22918 23019 23229 +3 22918 23229 23134 +3 22919 24260 25533 +3 22919 25533 24218 +3 22920 24113 27228 +3 22920 27228 26097 +3 22921 26098 27229 +3 22921 27229 24114 +3 22922 23226 24205 +3 22922 24205 23923 +3 22923 23924 24206 +3 22923 24206 23227 +3 22924 23433 24012 +3 22924 24012 23506 +3 22925 23507 24013 +3 22925 24013 23434 +3 22926 27255 28978 +3 22926 28978 24632 +3 22927 24633 28979 +3 22927 28979 27256 +3 22928 23579 24207 +3 22928 24207 23573 +3 22929 23574 24208 +3 22929 24208 23580 +3 22930 23555 25530 +3 22930 25530 24908 +3 22931 24909 25531 +3 22931 25531 23556 +3 22932 23785 26917 +3 22932 26917 26115 +3 22933 26116 26918 +3 22933 26918 23786 +3 22934 23543 24036 +3 22934 24036 23433 +3 22935 23434 24037 +3 22935 24037 23544 +3 22936 23157 23635 +3 22936 23635 23421 +3 22937 23422 23636 +3 22937 23636 23158 +3 22938 23322 24337 +3 22938 24337 23991 +3 22939 23992 24338 +3 22939 24338 23323 +3 22940 23171 23242 +3 22940 23242 22989 +3 22941 22990 23243 +3 22941 23243 23172 +3 22942 23573 24251 +3 22942 24251 23617 +3 22943 23618 24252 +3 22943 24252 23574 +3 22944 23161 23274 +3 22944 23274 23062 +3 22945 23063 23275 +3 22945 23275 23162 +3 22946 24848 30105 +3 22946 30105 28135 +3 22947 28136 30106 +3 22947 30106 24849 +3 22948 23799 24738 +3 22948 24738 23937 +3 22949 23938 24739 +3 22949 24739 23800 +3 22950 23173 23677 +3 22950 23677 23452 +3 22951 23453 23678 +3 22951 23678 23174 +3 22952 25910 28946 +3 22952 28946 26093 +3 22953 26094 28947 +3 22953 28947 25911 +3 22954 23276 24277 +3 22954 24277 23977 +3 22955 23978 24278 +3 22955 24278 23277 +3 22956 25250 26226 +3 22956 26226 23839 +3 22957 23840 26227 +3 22957 26227 25251 +3 22958 25896 28628 +3 22958 28628 25772 +3 22959 25773 28629 +3 22959 28629 25897 +3 22960 23192 24219 +3 22960 24219 23579 +3 22961 23580 24220 +3 22961 24220 23193 +3 22962 26872 27908 +3 22962 27908 24003 +3 22963 24004 27909 +3 22963 27909 26873 +3 22964 23117 23647 +3 22964 23647 23488 +3 22965 23489 23648 +3 22965 23648 23118 +3 22966 23115 23657 +3 22966 23657 23437 +3 22967 23438 23658 +3 22967 23658 23116 +3 22968 23165 23250 +3 22968 23250 23072 +3 22969 23073 23251 +3 22969 23251 23166 +3 22970 23121 23240 +3 22970 23240 23003 +3 22971 23004 23241 +3 22971 23241 23122 +3 22972 25280 26011 +3 22972 26011 23621 +3 22973 23622 26012 +3 22973 26012 25281 +3 22974 22980 23267 +3 22974 23266 22979 +3 22974 23267 23266 +3 22975 25260 26183 +3 22975 26183 23857 +3 22976 23858 26184 +3 22976 26184 25261 +3 22977 23995 24764 +3 22977 24764 23799 +3 22978 23800 24765 +3 22978 24765 23996 +3 22979 23266 23282 +3 22979 23282 22993 +3 22980 22994 23283 +3 22980 23283 23267 +3 22981 25482 27952 +3 22981 27952 25364 +3 22982 25365 27953 +3 22982 27953 25483 +3 22983 23083 23262 +3 22983 23262 23200 +3 22984 23201 23263 +3 22984 23263 23084 +3 22985 23308 23748 +3 22985 23748 23439 +3 22986 23440 23749 +3 22986 23749 23309 +3 22987 26284 29327 +3 22987 29327 26107 +3 22988 26108 29328 +3 22988 29328 26285 +3 22989 23242 23310 +3 22989 23310 23058 +3 22990 23059 23311 +3 22990 23311 23243 +3 22991 23005 23539 +3 22991 23530 22992 +3 22991 23539 23530 +3 22992 23530 23540 +3 22992 23540 23006 +3 22993 23282 23316 +3 22993 23316 23032 +3 22994 23033 23317 +3 22994 23317 23283 +3 22995 23202 23296 +3 22995 23296 23121 +3 22996 23122 23297 +3 22996 23297 23203 +3 22997 23783 23961 +3 22997 23961 23212 +3 22998 23213 23962 +3 22998 23962 23784 +3 22999 25584 28336 +3 22999 28336 25764 +3 23000 25765 28337 +3 23000 28337 25655 +3 23001 24143 24604 +3 23001 24604 23512 +3 23002 23513 24605 +3 23002 24605 24144 +3 23003 23240 23314 +3 23003 23314 23081 +3 23004 23082 23315 +3 23004 23315 23241 +3 23005 23070 23565 +3 23005 23565 23539 +3 23006 23540 23566 +3 23006 23566 23071 +3 23007 23506 24117 +3 23007 24117 23625 +3 23008 23626 24118 +3 23008 24118 23507 +3 23009 23021 24314 +3 23009 24313 23020 +3 23009 24314 24313 +3 23010 24307 25706 +3 23010 25706 24362 +3 23011 24363 25707 +3 23011 25707 24308 +3 23012 24007 26642 +3 23012 25629 23013 +3 23012 26642 25629 +3 23013 25629 26643 +3 23013 26643 24008 +3 23014 23218 23354 +3 23014 23354 23191 +3 23015 23191 23355 +3 23015 23355 23219 +3 23016 27447 28646 +3 23016 28646 24209 +3 23017 24210 28647 +3 23017 28647 27448 +3 23018 23228 23302 +3 23018 23302 23105 +3 23019 23106 23303 +3 23019 23303 23229 +3 23020 24313 24772 +3 23020 24772 23508 +3 23021 23509 24773 +3 23021 24773 24314 +3 23022 23206 23342 +3 23022 23342 23214 +3 23023 23215 23343 +3 23023 23343 23207 +3 23024 23214 23346 +3 23024 23346 23208 +3 23025 23209 23347 +3 23025 23347 23215 +3 23026 23777 24137 +3 23026 24137 23397 +3 23027 23398 24138 +3 23027 24138 23778 +3 23028 24040 26593 +3 23028 26593 25516 +3 23029 25517 26594 +3 23029 26594 24041 +3 23030 25235 27693 +3 23030 27693 25376 +3 23031 25377 27694 +3 23031 27694 25236 +3 23032 23316 23334 +3 23032 23334 23133 +3 23033 23134 23335 +3 23033 23335 23317 +3 23034 26468 27718 +3 23034 27718 24315 +3 23035 24316 27719 +3 23035 27719 26469 +3 23036 23821 25948 +3 23036 25948 25077 +3 23037 25078 25949 +3 23037 25949 23822 +3 23038 24600 28815 +3 23038 28815 27210 +3 23039 27211 28816 +3 23039 28816 24601 +3 23040 24781 25612 +3 23040 25612 24780 +3 23041 23695 24350 +3 23041 24350 23732 +3 23042 23733 24351 +3 23042 24351 23696 +3 23043 23429 24442 +3 23043 24442 24087 +3 23044 24088 24443 +3 23044 24443 23430 +3 23045 23151 23675 +3 23045 23675 23352 +3 23046 23353 23676 +3 23046 23676 23152 +3 23047 23074 23306 +3 23047 23306 23336 +3 23047 23336 23111 +3 23048 23112 23337 +3 23048 23307 23075 +3 23048 23337 23307 +3 23049 23944 24327 +3 23049 24327 23943 +3 23050 23921 24672 +3 23050 24672 23855 +3 23051 23856 24673 +3 23051 24673 23922 +3 23052 26410 27675 +3 23052 27675 24364 +3 23053 24365 27676 +3 23053 27676 26411 +3 23054 25227 25958 +3 23054 25958 24370 +3 23055 24371 25959 +3 23055 25959 25228 +3 23056 23480 24922 +3 23056 24922 24530 +3 23057 24531 24923 +3 23057 24923 23481 +3 23058 23310 23383 +3 23058 23383 23161 +3 23059 23162 23384 +3 23059 23384 23311 +3 23060 23855 24628 +3 23060 24628 23889 +3 23061 23890 24629 +3 23061 24629 23856 +3 23062 23274 23395 +3 23062 23395 23218 +3 23063 23219 23396 +3 23063 23396 23275 +3 23064 24462 25593 +3 23064 25593 24424 +3 23065 24425 25646 +3 23065 25646 24463 +3 23066 23807 25944 +3 23066 25944 25115 +3 23067 25116 25945 +3 23067 25945 23808 +3 23068 23714 24169 +3 23068 24169 23543 +3 23069 23544 24170 +3 23069 24170 23715 +3 23070 23256 23758 +3 23070 23758 23565 +3 23071 23566 23759 +3 23071 23759 23257 +3 23072 23250 23366 +3 23072 23366 23206 +3 23073 23207 23367 +3 23073 23367 23251 +3 23074 23127 23328 +3 23074 23328 23306 +3 23075 23307 23329 +3 23075 23329 23128 +3 23076 23298 23740 +3 23076 23740 23516 +3 23077 23517 23741 +3 23077 23741 23299 +3 23078 24317 24784 +3 23078 24784 23585 +3 23079 23586 24785 +3 23079 24785 24318 +3 23080 23493 23727 +3 23080 23727 23492 +3 23081 23314 23368 +3 23081 23368 23165 +3 23082 23166 23369 +3 23082 23369 23315 +3 23083 23208 23362 +3 23083 23362 23262 +3 23084 23263 23363 +3 23084 23363 23209 +3 23085 28008 29895 +3 23085 29895 24886 +3 23086 24887 29896 +3 23086 29896 28009 +3 23087 25585 28053 +3 23087 28053 25482 +3 23088 25483 28054 +3 23088 28054 25654 +3 23089 23881 24165 +3 23089 24165 23389 +3 23090 23390 24166 +3 23090 24166 23882 +3 23091 24682 28791 +3 23091 28791 27147 +3 23092 27148 28792 +3 23092 28792 24683 +3 23093 23709 25195 +3 23093 25195 24642 +3 23094 24643 25196 +3 23094 25196 23710 +3 23095 23767 24064 +3 23095 24064 23393 +3 23096 23394 24065 +3 23096 24065 23768 +3 23097 25268 27413 +3 23097 27413 25143 +3 23098 25144 27414 +3 23098 27414 25269 +3 23099 23713 24974 +3 23099 24974 24414 +3 23100 24415 24975 +3 23100 24975 23713 +3 23101 24362 25776 +3 23101 25776 24416 +3 23102 24417 25777 +3 23102 25777 24363 +3 23103 24866 30157 +3 23103 30157 28292 +3 23104 28293 30158 +3 23104 30158 24867 +3 23105 23302 23372 +3 23105 23372 23202 +3 23106 23203 23373 +3 23106 23373 23303 +3 23107 23937 24716 +3 23107 24716 23921 +3 23108 23922 24717 +3 23108 24717 23938 +3 23109 26071 28762 +3 23109 28762 25896 +3 23110 25897 28763 +3 23110 28763 26072 +3 23111 23336 23399 +3 23111 23399 23171 +3 23112 23172 23400 +3 23112 23400 23337 +3 23113 23869 24103 +3 23113 24103 23364 +3 23114 23365 24104 +3 23114 24104 23870 +3 23115 23272 23795 +3 23115 23795 23657 +3 23116 23658 23796 +3 23116 23796 23273 +3 23117 23270 23781 +3 23117 23781 23647 +3 23118 23648 23782 +3 23118 23782 23271 +3 23119 23732 24386 +3 23119 24386 23801 +3 23120 23802 24387 +3 23120 24387 23733 +3 23121 23296 23401 +3 23121 23401 23240 +3 23122 23241 23402 +3 23122 23402 23297 +3 23123 23484 23823 +3 23123 23823 23443 +3 23124 23444 23824 +3 23124 23824 23485 +3 23125 25764 28427 +3 23125 28427 25886 +3 23126 25887 28428 +3 23126 28428 25765 +3 23127 23200 23385 +3 23127 23385 23328 +3 23128 23329 23386 +3 23128 23386 23201 +3 23129 26051 27007 +3 23129 27007 24155 +3 23130 24156 27008 +3 23130 27008 26052 +3 23131 23443 23837 +3 23131 23837 23502 +3 23132 23505 23838 +3 23132 23838 23444 +3 23133 23334 23425 +3 23133 23425 23228 +3 23134 23229 23426 +3 23134 23426 23335 +3 23135 23625 24093 +3 23135 24093 23615 +3 23136 23616 24094 +3 23136 24094 23626 +3 23137 24814 25300 +3 23137 25300 23637 +3 23138 23638 25301 +3 23138 25301 24815 +3 23139 26093 29121 +3 23139 29121 26248 +3 23140 26249 29122 +3 23140 29122 26094 +3 23141 23615 24095 +3 23141 24095 23633 +3 23142 23634 24096 +3 23142 24096 23616 +3 23143 24319 25394 +3 23143 25394 24255 +3 23144 24256 25395 +3 23144 25395 24320 +3 23145 24392 24708 +3 23145 24708 23478 +3 23146 23479 24709 +3 23146 24709 24393 +3 23147 23526 24418 +3 23147 24418 24056 +3 23148 24057 24419 +3 23148 24419 23527 +3 23149 24123 27768 +3 23149 27768 26790 +3 23150 26791 27769 +3 23150 27769 24124 +3 23151 23258 23769 +3 23151 23769 23675 +3 23152 23676 23770 +3 23152 23770 23259 +3 23153 26059 27083 +3 23153 27083 24231 +3 23154 24232 27084 +3 23154 27084 26060 +3 23155 23619 25069 +3 23155 25069 24678 +3 23156 24679 25070 +3 23156 25070 23620 +3 23157 23332 23809 +3 23157 23809 23635 +3 23158 23636 23810 +3 23158 23810 23333 +3 23159 23553 23903 +3 23159 23903 23484 +3 23160 23485 23904 +3 23160 23904 23554 +3 23161 23383 23468 +3 23161 23468 23274 +3 23162 23275 23469 +3 23162 23469 23384 +3 23163 24416 25870 +3 23163 25870 24492 +3 23164 24493 25871 +3 23164 25871 24417 +3 23165 23368 23441 +3 23165 23441 23250 +3 23166 23251 23442 +3 23166 23442 23369 +3 23167 26081 26812 +3 23167 26812 23949 +3 23168 23950 26813 +3 23168 26813 26082 +3 23169 25376 27811 +3 23169 27811 25486 +3 23170 25487 27812 +3 23170 27812 25377 +3 23171 23399 23456 +3 23171 23456 23242 +3 23172 23243 23457 +3 23172 23457 23400 +3 23173 23405 23909 +3 23173 23909 23677 +3 23174 23678 23910 +3 23174 23910 23406 +3 23175 23865 26488 +3 23175 26488 25722 +3 23176 25723 26489 +3 23176 26489 23866 +3 23177 23645 24614 +3 23177 24614 24225 +3 23178 24226 24615 +3 23178 24615 23646 +3 23179 23979 24263 +3 23179 24263 23462 +3 23180 23463 24264 +3 23180 24264 23980 +3 23181 23899 24163 +3 23181 24163 23449 +3 23182 23450 24164 +3 23182 24164 23900 +3 23183 24255 25330 +3 23183 25330 23557 +3 23184 23558 25331 +3 23184 25331 24256 +3 23185 25756 28151 +3 23185 28151 25585 +3 23186 25654 28152 +3 23186 28152 25757 +3 23187 23728 25221 +3 23187 25221 24652 +3 23188 24653 25222 +3 23188 25222 23729 +3 23189 23439 23793 +3 23189 23793 23663 +3 23190 23664 23794 +3 23190 23794 23440 +3 23191 23354 23451 +3 23191 23451 23355 +3 23192 23407 24440 +3 23192 24440 24219 +3 23193 24220 24441 +3 23193 24441 23408 +3 23194 24289 28441 +3 23194 28441 27325 +3 23195 27326 28442 +3 23195 28442 24290 +3 23196 24892 25702 +3 23196 25702 23917 +3 23197 23918 25703 +3 23197 25703 24893 +3 23198 23502 23927 +3 23198 23927 23597 +3 23199 23598 23928 +3 23199 23928 23505 +3 23200 23262 23445 +3 23200 23445 23385 +3 23201 23386 23446 +3 23201 23446 23263 +3 23202 23372 23454 +3 23202 23454 23296 +3 23203 23297 23455 +3 23203 23455 23373 +3 23204 24470 24906 +3 23204 24906 23671 +3 23205 23672 24907 +3 23205 24907 24471 +3 23206 23366 23494 +3 23206 23494 23342 +3 23207 23343 23495 +3 23207 23495 23367 +3 23208 23346 23496 +3 23208 23496 23362 +3 23209 23363 23497 +3 23209 23497 23347 +3 23210 24478 24944 +3 23210 24944 23718 +3 23211 23719 24945 +3 23211 24945 24479 +3 23212 23961 24175 +3 23212 24175 23409 +3 23213 23410 24176 +3 23213 24176 23962 +3 23214 23342 23500 +3 23214 23500 23346 +3 23215 23347 23501 +3 23215 23501 23343 +3 23216 24046 24790 +3 23216 24790 23995 +3 23217 23996 24791 +3 23217 24791 24047 +3 23218 23395 23522 +3 23218 23522 23354 +3 23219 23355 23523 +3 23219 23523 23396 +3 23220 24480 24808 +3 23220 24808 23559 +3 23221 23560 24809 +3 23221 24809 24481 +3 23222 27105 28606 +3 23222 28606 24666 +3 23223 24667 28607 +3 23223 28607 27106 +3 23224 24934 29659 +3 23224 29659 27880 +3 23225 27881 29660 +3 23225 29660 24935 +3 23226 23801 24466 +3 23226 24466 24205 +3 23227 24206 24467 +3 23227 24467 23802 +3 23228 23425 23476 +3 23228 23476 23302 +3 23229 23303 23477 +3 23229 23477 23426 +3 23230 28153 29945 +3 23230 29945 24914 +3 23231 24915 29946 +3 23231 29946 28154 +3 23232 25390 27518 +3 23232 27518 25268 +3 23233 25269 27519 +3 23233 27519 25391 +3 23234 24388 25480 +3 23234 25480 24319 +3 23235 24320 25481 +3 23235 25481 24389 +3 23236 23661 23965 +3 23236 23965 23553 +3 23237 23554 23966 +3 23237 23966 23662 +3 23238 23752 24193 +3 23238 24193 23714 +3 23239 23715 24194 +3 23239 24194 23753 +3 23240 23401 23503 +3 23240 23503 23314 +3 23241 23315 23504 +3 23241 23504 23402 +3 23242 23456 23536 +3 23242 23536 23310 +3 23243 23311 23537 +3 23243 23537 23457 +3 23244 24089 24830 +3 23244 24830 24046 +3 23245 24047 24831 +3 23245 24831 24090 +3 23246 24412 27527 +3 23246 27527 26414 +3 23247 26415 27528 +3 23247 27528 24413 +3 23248 27055 28587 +3 23248 28587 24730 +3 23249 24731 28588 +3 23249 28588 27056 +3 23250 23441 23534 +3 23250 23534 23366 +3 23251 23367 23535 +3 23251 23535 23442 +3 23252 25886 28579 +3 23252 28579 26047 +3 23253 26048 28580 +3 23253 28580 25887 +3 23254 24034 26161 +3 23254 26161 25290 +3 23255 25291 26162 +3 23255 26162 24035 +3 23256 23437 23935 +3 23256 23935 23758 +3 23257 23759 23936 +3 23257 23936 23438 +3 23258 23377 23895 +3 23258 23895 23769 +3 23259 23770 23896 +3 23259 23896 23378 +3 23260 25486 27900 +3 23260 27900 25586 +3 23261 25653 27901 +3 23261 27901 25487 +3 23262 23362 23524 +3 23262 23524 23445 +3 23263 23446 23525 +3 23263 23525 23363 +3 23264 24458 27500 +3 23264 27500 26366 +3 23265 26367 27501 +3 23265 27501 24459 +3 23266 23267 23538 +3 23266 23538 23547 +3 23266 23547 23282 +3 23267 23283 23548 +3 23267 23548 23538 +3 23268 24424 25538 +3 23268 25538 24388 +3 23269 24389 25539 +3 23269 25539 24425 +3 23270 23421 23953 +3 23270 23953 23781 +3 23271 23782 23954 +3 23271 23954 23422 +3 23272 23452 23985 +3 23272 23985 23795 +3 23273 23796 23986 +3 23273 23986 23453 +3 23274 23468 23603 +3 23274 23603 23395 +3 23275 23396 23604 +3 23275 23604 23469 +3 23276 23591 24566 +3 23276 24566 24277 +3 23277 24278 24567 +3 23277 24567 23592 +3 23278 23849 25346 +3 23278 25346 24774 +3 23279 24775 25347 +3 23279 25347 23850 +3 23280 23833 25968 +3 23280 25968 25302 +3 23281 25303 25969 +3 23281 25969 23834 +3 23282 23547 23571 +3 23282 23571 23316 +3 23283 23317 23572 +3 23283 23572 23548 +3 23284 24996 25536 +3 23284 25536 23813 +3 23285 23814 25537 +3 23285 25537 24997 +3 23286 25874 28257 +3 23286 28257 25756 +3 23287 25757 28258 +3 23287 28258 25875 +3 23288 24049 26123 +3 23288 26123 25294 +3 23289 25295 26124 +3 23289 26124 24050 +3 23290 26224 28932 +3 23290 28932 26071 +3 23291 26072 28933 +3 23291 28933 26225 +3 23292 23293 24068 +3 23292 24068 24073 +3 23292 24073 23312 +3 23293 23313 24074 +3 23293 24074 24068 +3 23294 23295 25628 +3 23294 25628 26538 +3 23294 26538 24179 +3 23295 24180 26539 +3 23295 26539 25628 +3 23296 23454 23569 +3 23296 23569 23401 +3 23297 23402 23570 +3 23297 23570 23455 +3 23298 23492 23941 +3 23298 23941 23740 +3 23299 23741 23942 +3 23299 23942 23493 +3 23300 23687 24694 +3 23300 24694 24323 +3 23301 24324 24695 +3 23301 24695 23688 +3 23302 23476 23561 +3 23302 23561 23372 +3 23303 23373 23562 +3 23303 23562 23477 +3 23304 25177 27269 +3 23304 27269 25292 +3 23305 25293 27270 +3 23305 27270 25178 +3 23306 23328 23528 +3 23306 23528 23593 +3 23306 23593 23336 +3 23307 23337 23594 +3 23307 23529 23329 +3 23307 23594 23529 +3 23308 23597 24022 +3 23308 24022 23748 +3 23309 23749 24023 +3 23309 24023 23598 +3 23310 23536 23629 +3 23310 23629 23383 +3 23311 23384 23630 +3 23311 23630 23537 +3 23312 24073 24346 +3 23312 24346 23595 +3 23313 23596 24347 +3 23313 24347 24074 +3 23314 23503 23581 +3 23314 23581 23368 +3 23315 23369 23582 +3 23315 23582 23504 +3 23316 23571 23607 +3 23316 23607 23334 +3 23317 23335 23608 +3 23317 23608 23572 +3 23318 25522 26514 +3 23318 26514 24199 +3 23319 24200 26515 +3 23319 26515 25523 +3 23320 23815 24249 +3 23320 24249 23752 +3 23321 23753 24250 +3 23321 24250 23816 +3 23322 23685 24688 +3 23322 24688 24337 +3 23323 24338 24689 +3 23323 24689 23686 +3 23324 23877 25350 +3 23324 25350 24810 +3 23325 24811 25351 +3 23325 25351 23878 +3 23326 26726 27595 +3 23326 27595 24221 +3 23327 24222 27596 +3 23327 27596 26727 +3 23328 23385 23587 +3 23328 23587 23528 +3 23329 23529 23588 +3 23329 23588 23386 +3 23330 27235 28276 +3 23330 28276 24366 +3 23331 24367 28277 +3 23331 28277 27236 +3 23332 23516 23987 +3 23332 23987 23809 +3 23333 23810 23988 +3 23333 23988 23517 +3 23334 23607 23653 +3 23334 23653 23425 +3 23335 23426 23654 +3 23335 23654 23608 +3 23336 23593 23651 +3 23336 23651 23399 +3 23337 23400 23652 +3 23337 23652 23594 +3 23338 25586 27978 +3 23338 27978 25752 +3 23339 25753 27979 +3 23339 27979 25653 +3 23340 25492 27649 +3 23340 27649 25390 +3 23341 25391 27650 +3 23341 27650 25493 +3 23342 23494 23679 +3 23342 23679 23500 +3 23343 23501 23680 +3 23343 23680 23495 +3 23344 24201 24870 +3 23344 24870 24089 +3 23345 24090 24871 +3 23345 24871 24202 +3 23346 23500 23683 +3 23346 23683 23496 +3 23347 23497 23684 +3 23347 23684 23501 +3 23348 24496 25700 +3 23348 25700 24462 +3 23349 24463 25701 +3 23349 25701 24497 +3 23350 24492 25936 +3 23350 25936 25270 +3 23351 25271 25937 +3 23351 25937 24493 +3 23352 23675 23971 +3 23352 23971 23661 +3 23353 23662 23972 +3 23353 23972 23676 +3 23354 23522 23639 +3 23354 23639 23451 +3 23355 23451 23640 +3 23355 23640 23523 +3 23356 24287 26886 +3 23356 26886 26019 +3 23357 26020 26887 +3 23357 26887 24288 +3 23358 24952 29713 +3 23358 29713 28014 +3 23359 28015 29714 +3 23359 29714 24953 +3 23360 27774 29443 +3 23360 29443 24968 +3 23361 24969 29444 +3 23361 29444 27775 +3 23362 23496 23697 +3 23362 23697 23524 +3 23363 23525 23698 +3 23363 23698 23497 +3 23364 24103 24396 +3 23364 24396 23623 +3 23365 23624 24397 +3 23365 24397 24104 +3 23366 23534 23699 +3 23366 23699 23494 +3 23367 23495 23700 +3 23367 23700 23535 +3 23368 23581 23667 +3 23368 23667 23441 +3 23369 23442 23668 +3 23369 23668 23582 +3 23370 25135 25922 +3 23370 25922 24054 +3 23371 24055 25923 +3 23371 25923 25136 +3 23372 23561 23659 +3 23372 23659 23454 +3 23373 23455 23660 +3 23373 23660 23562 +3 23374 24722 28405 +3 23374 28405 27009 +3 23375 27010 28406 +3 23375 28406 24723 +3 23376 24864 25613 +3 23376 25613 24865 +3 23377 23488 23997 +3 23377 23997 23895 +3 23378 23896 23998 +3 23378 23998 23489 +3 23379 24612 25099 +3 23379 25099 23893 +3 23380 23894 25100 +3 23380 25100 24613 +3 23381 24352 26951 +3 23381 26951 26035 +3 23382 26036 26952 +3 23382 26952 24353 +3 23383 23629 23734 +3 23383 23734 23468 +3 23384 23469 23735 +3 23384 23735 23630 +3 23385 23445 23655 +3 23385 23655 23587 +3 23386 23588 23656 +3 23386 23656 23446 +3 23387 24099 26722 +3 23387 26722 26045 +3 23388 26046 26723 +3 23388 26723 24100 +3 23389 24165 24456 +3 23389 24456 23716 +3 23390 23717 24457 +3 23390 24457 24166 +3 23391 25165 25914 +3 23391 25914 24024 +3 23392 24025 25915 +3 23392 25915 25166 +3 23393 24064 24348 +3 23393 24348 23724 +3 23394 23724 24349 +3 23394 24349 24065 +3 23395 23603 23746 +3 23395 23746 23522 +3 23396 23523 23747 +3 23396 23747 23604 +3 23397 24137 24335 +3 23397 24335 23611 +3 23398 23612 24336 +3 23398 24336 24138 +3 23399 23651 23730 +3 23399 23730 23456 +3 23400 23457 23731 +3 23400 23731 23652 +3 23401 23569 23693 +3 23401 23693 23503 +3 23402 23504 23694 +3 23402 23694 23570 +3 23403 26027 28391 +3 23403 28391 25874 +3 23404 25875 28392 +3 23404 28392 26028 +3 23405 23663 24139 +3 23405 24139 23909 +3 23406 23910 24140 +3 23406 24140 23664 +3 23407 23701 24698 +3 23407 24698 24440 +3 23408 24441 24699 +3 23408 24699 23702 +3 23409 24175 24380 +3 23409 24380 23631 +3 23410 23632 24381 +3 23410 24381 24176 +3 23411 24776 28385 +3 23411 28385 26967 +3 23412 26968 28386 +3 23412 28386 24777 +3 23413 25292 27391 +3 23413 27391 25406 +3 23414 25407 27392 +3 23414 27392 25293 +3 23415 24562 25758 +3 23415 25758 24496 +3 23416 24497 25759 +3 23416 25759 24563 +3 23417 26047 28734 +3 23417 28734 26196 +3 23418 26197 28735 +3 23418 28735 26048 +3 23419 25716 26422 +3 23419 26422 24020 +3 23420 24021 26423 +3 23420 26423 25717 +3 23421 23635 24119 +3 23421 24119 23953 +3 23422 23954 24120 +3 23422 24120 23636 +3 23423 25587 27748 +3 23423 27748 25492 +3 23424 25493 27749 +3 23424 27749 25652 +3 23425 23653 23725 +3 23425 23725 23476 +3 23426 23477 23726 +3 23426 23726 23654 +3 23427 25752 28069 +3 23427 28069 25862 +3 23428 25863 28070 +3 23428 28070 25753 +3 23429 23819 24786 +3 23429 24786 24442 +3 23430 24443 24787 +3 23430 24787 23820 +3 23431 24582 25594 +3 23431 25594 24616 +3 23432 24617 25645 +3 23432 25645 24583 +3 23433 24036 24500 +3 23433 24500 24012 +3 23434 24013 24501 +3 23434 24501 24037 +3 23435 26360 27375 +3 23435 27375 24502 +3 23436 24503 27376 +3 23436 27376 26361 +3 23437 23657 24131 +3 23437 24131 23935 +3 23438 23936 24132 +3 23438 24132 23658 +3 23439 23748 24083 +3 23439 24083 23793 +3 23440 23794 24084 +3 23440 24084 23749 +3 23441 23667 23754 +3 23441 23754 23534 +3 23442 23535 23755 +3 23442 23755 23668 +3 23443 23823 24171 +3 23443 24171 23837 +3 23444 23838 24174 +3 23444 24174 23824 +3 23445 23524 23736 +3 23445 23736 23655 +3 23446 23656 23737 +3 23446 23737 23525 +3 23447 26292 27341 +3 23447 27341 24536 +3 23448 24537 27342 +3 23448 27342 26293 +3 23449 24163 24436 +3 23449 24436 23767 +3 23450 23768 24437 +3 23450 24437 24164 +3 23451 23639 23760 +3 23451 23760 23640 +3 23452 23677 24191 +3 23452 24191 23985 +3 23453 23986 24192 +3 23453 24192 23678 +3 23454 23659 23761 +3 23454 23761 23569 +3 23455 23570 23762 +3 23455 23762 23660 +3 23456 23730 23779 +3 23456 23779 23536 +3 23457 23537 23780 +3 23457 23780 23731 +3 23458 24638 25844 +3 23458 25844 24562 +3 23459 24563 25845 +3 23459 25845 24639 +3 23460 24818 30088 +3 23460 30088 28678 +3 23461 28679 30089 +3 23461 30089 24819 +3 23462 24263 24550 +3 23462 24550 23777 +3 23463 23778 24551 +3 23463 24551 24264 +3 23464 27878 29495 +3 23464 29495 24984 +3 23465 24985 29496 +3 23465 29496 27879 +3 23466 25306 27129 +3 23466 27129 25201 +3 23467 25202 27130 +3 23467 27130 25307 +3 23468 23734 23817 +3 23468 23817 23603 +3 23469 23604 23818 +3 23469 23818 23735 +3 23470 24448 28089 +3 23470 28089 27115 +3 23471 27116 28090 +3 23471 28090 24449 +3 23472 25008 29237 +3 23472 29237 27625 +3 23473 27626 29238 +3 23473 29238 25009 +3 23474 24267 24882 +3 23474 24882 24167 +3 23475 24168 24883 +3 23475 24883 24268 +3 23476 23725 23771 +3 23476 23771 23561 +3 23477 23562 23772 +3 23477 23772 23726 +3 23478 24708 25026 +3 23478 25026 23853 +3 23479 23854 25027 +3 23479 25027 24709 +3 23480 23919 25336 +3 23480 25336 24922 +3 23481 24923 25337 +3 23481 25337 23920 +3 23482 24450 25418 +3 23482 25418 24490 +3 23483 24491 25419 +3 23483 25419 24451 +3 23484 23903 24215 +3 23484 24215 23823 +3 23485 23824 24216 +3 23485 24216 23904 +3 23486 24321 27453 +3 23486 27453 26646 +3 23487 26647 27454 +3 23487 27454 24322 +3 23488 23647 24145 +3 23488 24145 23997 +3 23489 23998 24146 +3 23489 24146 23648 +3 23490 25746 27815 +3 23490 27815 25587 +3 23491 25652 27816 +3 23491 27816 25747 +3 23492 23727 24135 +3 23492 24135 23941 +3 23493 23942 24136 +3 23493 24136 23727 +3 23494 23699 23841 +3 23494 23841 23679 +3 23495 23680 23842 +3 23495 23842 23700 +3 23496 23683 23843 +3 23496 23843 23697 +3 23497 23698 23844 +3 23497 23844 23684 +3 23498 24167 24918 +3 23498 24918 24311 +3 23499 24312 24919 +3 23499 24919 24168 +3 23500 23679 23845 +3 23500 23845 23683 +3 23501 23684 23846 +3 23501 23846 23680 +3 23502 23837 24237 +3 23502 24237 23927 +3 23503 23693 23803 +3 23503 23803 23581 +3 23504 23582 23804 +3 23504 23804 23694 +3 23505 23928 24238 +3 23505 24238 23838 +3 23506 24012 24584 +3 23506 24584 24117 +3 23507 24118 24585 +3 23507 24585 24013 +3 23508 24772 25262 +3 23508 25262 24005 +3 23509 24006 25263 +3 23509 25263 24773 +3 23510 25406 27482 +3 23510 27482 25500 +3 23511 25501 27483 +3 23511 27483 25407 +3 23512 24604 25073 +3 23512 25073 24009 +3 23513 24009 25074 +3 23513 25074 24605 +3 23514 23873 25360 +3 23514 25360 24450 +3 23515 24451 25361 +3 23515 25361 23874 +3 23516 23740 24181 +3 23516 24181 23987 +3 23517 23988 24182 +3 23517 24182 23741 +3 23518 24149 25696 +3 23518 25696 25002 +3 23519 25003 25697 +3 23519 25697 24150 +3 23520 26923 28204 +3 23520 28204 24770 +3 23521 24771 28205 +3 23521 28205 26924 +3 23522 23746 23827 +3 23522 23827 23639 +3 23523 23640 23828 +3 23523 23828 23747 +3 23524 23697 23891 +3 23524 23891 23736 +3 23525 23737 23892 +3 23525 23892 23698 +3 23526 23943 24782 +3 23526 24782 24418 +3 23527 24419 24783 +3 23527 24783 23944 +3 23528 23587 23797 +3 23528 23797 23851 +3 23528 23851 23593 +3 23529 23594 23852 +3 23529 23798 23588 +3 23529 23852 23798 +3 23530 23539 24066 +3 23530 24066 24067 +3 23530 24067 23540 +3 23531 23541 24556 +3 23531 24556 24557 +3 23531 24557 23542 +3 23532 24325 26458 +3 23532 25627 23533 +3 23532 26458 25627 +3 23533 25627 26459 +3 23533 26459 24326 +3 23534 23754 23905 +3 23534 23905 23699 +3 23535 23700 23906 +3 23535 23906 23755 +3 23536 23779 23875 +3 23536 23875 23629 +3 23537 23630 23876 +3 23537 23876 23780 +3 23538 23548 23788 +3 23538 23787 23547 +3 23538 23788 23787 +3 23539 23565 24079 +3 23539 24079 24066 +3 23540 24067 24080 +3 23540 24080 23566 +3 23541 23939 24926 +3 23541 24926 24556 +3 23542 24557 24927 +3 23542 24927 23940 +3 23543 24169 24622 +3 23543 24622 24036 +3 23544 24037 24623 +3 23544 24623 24170 +3 23545 25862 28208 +3 23545 28208 26003 +3 23546 26004 28209 +3 23546 28209 25863 +3 23547 23787 23811 +3 23547 23811 23571 +3 23548 23572 23812 +3 23548 23812 23788 +3 23549 25316 26103 +3 23549 26103 24233 +3 23550 24234 26104 +3 23550 26104 25317 +3 23551 26157 28537 +3 23551 28537 26027 +3 23552 26028 28538 +3 23552 28538 26158 +3 23553 23965 24285 +3 23553 24285 23903 +3 23554 23904 24286 +3 23554 24286 23966 +3 23555 24344 26432 +3 23555 26432 25530 +3 23556 25531 26433 +3 23556 26433 24345 +3 23557 25330 25938 +3 23557 25938 24060 +3 23558 24061 25939 +3 23558 25939 25331 +3 23559 24808 25151 +3 23559 25151 23951 +3 23560 23952 25152 +3 23560 25152 24809 +3 23561 23771 23859 +3 23561 23859 23659 +3 23562 23660 23860 +3 23562 23860 23772 +3 23563 26874 28186 +3 23563 28186 24828 +3 23564 24829 28187 +3 23564 28187 26875 +3 23565 23758 24257 +3 23565 24257 24079 +3 23566 24080 24258 +3 23566 24258 23759 +3 23567 25324 26073 +3 23567 26073 24241 +3 23568 24242 26074 +3 23568 26074 25325 +3 23569 23761 23871 +3 23569 23871 23693 +3 23570 23694 23872 +3 23570 23872 23762 +3 23571 23811 23831 +3 23571 23831 23607 +3 23572 23608 23832 +3 23572 23832 23812 +3 23573 24207 24834 +3 23573 24834 24251 +3 23574 24252 24835 +3 23574 24835 24208 +3 23575 24490 25494 +3 23575 25494 24542 +3 23576 24543 25495 +3 23576 25495 24491 +3 23577 25978 26766 +3 23577 26766 24406 +3 23578 24407 26767 +3 23578 26767 25979 +3 23579 24219 24796 +3 23579 24796 24207 +3 23580 24208 24797 +3 23580 24797 24220 +3 23581 23803 23885 +3 23581 23885 23667 +3 23582 23668 23886 +3 23582 23886 23804 +3 23583 28517 29875 +3 23583 29875 24846 +3 23584 24847 29876 +3 23584 29876 28518 +3 23585 24784 25286 +3 23585 25286 24014 +3 23586 24015 25287 +3 23586 25287 24785 +3 23587 23655 23861 +3 23587 23861 23797 +3 23588 23798 23862 +3 23588 23862 23656 +3 23589 25848 27898 +3 23589 27898 25746 +3 23590 25747 27899 +3 23590 27899 25849 +3 23591 23991 24940 +3 23591 24940 24566 +3 23592 24567 24941 +3 23592 24941 23992 +3 23593 23851 23915 +3 23593 23915 23651 +3 23594 23652 23916 +3 23594 23916 23852 +3 23595 24346 24640 +3 23595 24640 23881 +3 23596 23882 24641 +3 23596 24641 24347 +3 23597 23927 24328 +3 23597 24328 24022 +3 23598 24023 24329 +3 23598 24329 23928 +3 23599 25500 27565 +3 23599 27565 25588 +3 23600 25651 27566 +3 23600 27566 25501 +3 23601 25416 27245 +3 23601 27245 25306 +3 23602 25307 27246 +3 23602 27246 25417 +3 23603 23817 23947 +3 23603 23947 23746 +3 23604 23747 23948 +3 23604 23948 23818 +3 23605 24542 25546 +3 23605 25546 24582 +3 23606 24583 25547 +3 23606 25547 24543 +3 23607 23831 23883 +3 23607 23883 23653 +3 23608 23654 23884 +3 23608 23884 23832 +3 23609 25988 26832 +3 23609 26832 24472 +3 23610 24473 26833 +3 23610 26833 25989 +3 23611 24335 24524 +3 23611 24524 23815 +3 23612 23816 24525 +3 23612 24525 24336 +3 23613 25016 29267 +3 23613 29267 27766 +3 23614 27767 29268 +3 23614 29268 25017 +3 23615 24093 24526 +3 23615 24526 24095 +3 23616 24096 24527 +3 23616 24527 24094 +3 23617 24251 24858 +3 23617 24858 24267 +3 23618 24268 24859 +3 23618 24859 24252 +3 23619 24081 25542 +3 23619 25542 25069 +3 23620 25070 25543 +3 23620 25543 24082 +3 23621 26011 26602 +3 23621 26602 24245 +3 23622 24246 26603 +3 23622 26603 26012 +3 23623 24396 24648 +3 23623 24648 23899 +3 23624 23900 24649 +3 23624 24649 24397 +3 23625 24117 24574 +3 23625 24574 24093 +3 23626 24094 24575 +3 23626 24575 24118 +3 23627 27494 29006 +3 23627 29006 25032 +3 23628 25033 29007 +3 23628 29007 27495 +3 23629 23875 23955 +3 23629 23955 23734 +3 23630 23735 23956 +3 23630 23956 23876 +3 23631 24380 24590 +3 23631 24590 23869 +3 23632 23870 24591 +3 23632 24591 24381 +3 23633 24095 24546 +3 23633 24546 23783 +3 23634 23784 24547 +3 23634 24547 24096 +3 23635 23809 24283 +3 23635 24283 24119 +3 23636 24120 24284 +3 23636 24284 23810 +3 23637 25300 25908 +3 23637 25908 24638 +3 23638 24639 25909 +3 23638 25909 25301 +3 23639 23827 23931 +3 23639 23931 23760 +3 23640 23760 23932 +3 23640 23932 23828 +3 23641 25600 30647 +3 23641 30647 28868 +3 23642 28869 30648 +3 23642 30648 25600 +3 23643 27017 27912 +3 23643 27912 24512 +3 23644 24513 27913 +3 23644 27913 27018 +3 23645 23923 24854 +3 23645 24854 24614 +3 23646 24615 24855 +3 23646 24855 23924 +3 23647 23781 24295 +3 23647 24295 24145 +3 23648 24146 24296 +3 23648 24296 23782 +3 23649 24596 27231 +3 23649 27231 26282 +3 23650 26283 27232 +3 23650 27232 24597 +3 23651 23915 23973 +3 23651 23973 23730 +3 23652 23731 23974 +3 23652 23974 23916 +3 23653 23883 23967 +3 23653 23967 23725 +3 23654 23726 23968 +3 23654 23968 23884 +3 23655 23736 23925 +3 23655 23925 23861 +3 23656 23862 23926 +3 23656 23926 23737 +3 23657 23795 24330 +3 23657 24330 24131 +3 23658 24132 24331 +3 23658 24331 23796 +3 23659 23859 23945 +3 23659 23945 23761 +3 23660 23762 23946 +3 23660 23946 23860 +3 23661 23971 24275 +3 23661 24275 23965 +3 23662 23966 24276 +3 23662 24276 23972 +3 23663 23793 24273 +3 23663 24273 24139 +3 23664 24140 24274 +3 23664 24274 23794 +3 23665 24645 27198 +3 23665 27198 26234 +3 23666 26235 27199 +3 23666 27199 24646 +3 23667 23885 23957 +3 23667 23957 23754 +3 23668 23755 23958 +3 23668 23958 23886 +3 23669 24211 26330 +3 23669 26330 25708 +3 23670 25709 26331 +3 23670 26331 24212 +3 23671 24906 25378 +3 23671 25378 24143 +3 23672 24144 25379 +3 23672 25379 24907 +3 23673 25588 27639 +3 23673 27639 25738 +3 23674 25739 27640 +3 23674 27640 25651 +3 23675 23769 24297 +3 23675 24297 23971 +3 23676 23972 24298 +3 23676 24298 23770 +3 23677 23909 24394 +3 23677 24394 24191 +3 23678 24192 24395 +3 23678 24395 23910 +3 23679 23841 23999 +3 23679 23999 23845 +3 23680 23846 24000 +3 23680 24000 23842 +3 23681 24616 25692 +3 23681 25692 24660 +3 23682 24661 25693 +3 23682 25693 24617 +3 23683 23845 24001 +3 23683 24001 23843 +3 23684 23844 24002 +3 23684 24002 23846 +3 23685 24056 25028 +3 23685 25028 24688 +3 23686 24689 25029 +3 23686 25029 24057 +3 23687 24087 25065 +3 23687 25065 24694 +3 23688 24695 25066 +3 23688 25066 24088 +3 23689 26564 27289 +3 23689 27289 24426 +3 23690 24427 27290 +3 23690 27290 26565 +3 23691 25237 26999 +3 23691 26999 25326 +3 23692 25327 27000 +3 23692 27000 25238 +3 23693 23871 23975 +3 23693 23975 23803 +3 23694 23804 23976 +3 23694 23976 23872 +3 23695 24311 24950 +3 23695 24950 24350 +3 23696 24351 24951 +3 23696 24951 24312 +3 23697 23843 24018 +3 23697 24018 23891 +3 23698 23892 24019 +3 23698 24019 23844 +3 23699 23905 24032 +3 23699 24032 23841 +3 23700 23842 24033 +3 23700 24033 23906 +3 23701 23977 24966 +3 23701 24966 24698 +3 23702 24699 24967 +3 23702 24967 23978 +3 23703 24884 29647 +3 23703 29647 28375 +3 23704 28376 29648 +3 23704 29648 24885 +3 23705 26003 28347 +3 23705 28347 26125 +3 23706 26126 28348 +3 23706 28348 26004 +3 23707 25510 27327 +3 23707 27327 25416 +3 23708 25417 27328 +3 23708 27328 25511 +3 23709 24269 25892 +3 23709 25892 25195 +3 23710 25196 25893 +3 23710 25893 24270 +3 23711 24824 27992 +3 23711 27992 26826 +3 23712 26827 27993 +3 23712 27993 24825 +3 23713 24975 25614 +3 23713 25614 24974 +3 23714 24193 24656 +3 23714 24656 24169 +3 23715 24170 24657 +3 23715 24657 24194 +3 23716 24456 24714 +3 23716 24714 23979 +3 23717 23980 24715 +3 23717 24715 24457 +3 23718 24944 25384 +3 23718 25384 24159 +3 23719 24160 25385 +3 23719 25385 24945 +3 23720 25970 28006 +3 23720 28006 25848 +3 23721 25849 28007 +3 23721 28007 25971 +3 23722 25808 30625 +3 23722 30625 28803 +3 23723 28804 30626 +3 23723 30626 25809 +3 23724 24348 24644 +3 23724 24644 24349 +3 23725 23967 24016 +3 23725 24016 23771 +3 23726 23772 24017 +3 23726 24017 23968 +3 23727 24136 24334 +3 23727 24334 24135 +3 23728 24253 25888 +3 23728 25888 25221 +3 23729 25222 25889 +3 23729 25889 24254 +3 23730 23973 24030 +3 23730 24030 23779 +3 23731 23780 24031 +3 23731 24031 23974 +3 23732 24350 24978 +3 23732 24978 24386 +3 23733 24387 24979 +3 23733 24979 24351 +3 23734 23955 24051 +3 23734 24051 23817 +3 23735 23818 24052 +3 23735 24052 23956 +3 23736 23891 24077 +3 23736 24077 23925 +3 23737 23926 24078 +3 23737 24078 23892 +3 23738 24872 27974 +3 23738 27974 26780 +3 23739 26781 27975 +3 23739 27975 24873 +3 23740 23941 24374 +3 23740 24374 24181 +3 23741 24182 24375 +3 23741 24375 23942 +3 23742 24660 25744 +3 23742 25744 24704 +3 23743 24705 25745 +3 23743 25745 24661 +3 23744 27611 29052 +3 23744 29052 25049 +3 23745 25050 29053 +3 23745 29053 27612 +3 23746 23947 24026 +3 23746 24026 23827 +3 23747 23828 24027 +3 23747 24027 23948 +3 23748 24022 24358 +3 23748 24358 24083 +3 23749 24084 24359 +3 23749 24359 24023 +3 23750 28686 30472 +3 23750 30472 25601 +3 23751 25601 30473 +3 23751 30473 28687 +3 23752 24249 24670 +3 23752 24670 24193 +3 23753 24194 24671 +3 23753 24671 24250 +3 23754 23957 24097 +3 23754 24097 23905 +3 23755 23906 24098 +3 23755 24098 23958 +3 23756 25738 27728 +3 23756 27728 25832 +3 23757 25833 27729 +3 23757 27729 25739 +3 23758 23935 24446 +3 23758 24446 24257 +3 23759 24258 24447 +3 23759 24447 23936 +3 23760 23931 24048 +3 23760 24048 23932 +3 23761 23945 24042 +3 23761 24042 23871 +3 23762 23872 24043 +3 23762 24043 23946 +3 23763 25071 28780 +3 23763 28780 27371 +3 23764 27372 28781 +3 23764 28781 25072 +3 23765 25589 27409 +3 23765 27409 25510 +3 23766 25511 27410 +3 23766 27410 25650 +3 23767 24436 24706 +3 23767 24706 24064 +3 23768 24065 24707 +3 23768 24707 24437 +3 23769 23895 24400 +3 23769 24400 24297 +3 23770 24298 24401 +3 23770 24401 23896 +3 23771 24016 24107 +3 23771 24107 23859 +3 23772 23860 24108 +3 23772 24108 24017 +3 23773 24704 25820 +3 23773 25820 24754 +3 23774 24755 25821 +3 23774 25821 24705 +3 23775 25326 27097 +3 23775 27097 25428 +3 23776 25429 27098 +3 23776 27098 25327 +3 23777 24550 24836 +3 23777 24836 24137 +3 23778 24138 24837 +3 23778 24837 24551 +3 23779 24030 24115 +3 23779 24115 23875 +3 23780 23876 24116 +3 23780 24116 24031 +3 23781 23953 24434 +3 23781 24434 24295 +3 23782 24296 24435 +3 23782 24435 23954 +3 23783 24546 24712 +3 23783 24712 23961 +3 23784 23962 24713 +3 23784 24713 24547 +3 23785 24592 27752 +3 23785 27752 26917 +3 23786 26918 27753 +3 23786 27753 24593 +3 23787 23788 24053 +3 23787 24053 24058 +3 23787 24058 23811 +3 23788 23812 24059 +3 23788 24059 24053 +3 23789 28644 30440 +3 23789 30440 25802 +3 23790 25803 30441 +3 23790 30441 28645 +3 23791 28222 29426 +3 23791 29426 24938 +3 23792 24939 29427 +3 23792 29427 28223 +3 23793 24083 24408 +3 23793 24408 24273 +3 23794 24274 24409 +3 23794 24409 24084 +3 23795 23985 24498 +3 23795 24498 24330 +3 23796 24331 24499 +3 23796 24499 23986 +3 23797 23861 24071 +3 23797 24071 24121 +3 23797 24121 23851 +3 23798 23852 24122 +3 23798 24072 23862 +3 23798 24122 24072 +3 23799 24764 25595 +3 23799 25595 24738 +3 23800 24739 25644 +3 23800 25644 24765 +3 23801 24386 25022 +3 23801 25022 24466 +3 23802 24467 25023 +3 23802 25023 24387 +3 23803 23975 24101 +3 23803 24101 23885 +3 23804 23886 24102 +3 23804 24102 23976 +3 23805 23806 25626 +3 23805 25626 26374 +3 23805 26374 24474 +3 23806 24475 26375 +3 23806 26375 25626 +3 23807 24520 26652 +3 23807 26652 25944 +3 23808 25945 26653 +3 23808 26653 24521 +3 23809 23987 24454 +3 23809 24454 24283 +3 23810 24284 24455 +3 23810 24455 23988 +3 23811 24058 24085 +3 23811 24085 23831 +3 23812 23832 24086 +3 23812 24086 24059 +3 23813 25536 26346 +3 23813 26346 24488 +3 23814 24489 26347 +3 23814 26347 25537 +3 23815 24524 24732 +3 23815 24732 24249 +3 23816 24250 24733 +3 23816 24733 24525 +3 23817 24051 24161 +3 23817 24161 23947 +3 23818 23948 24162 +3 23818 24162 24052 +3 23819 24225 25185 +3 23819 25185 24786 +3 23820 24787 25186 +3 23820 25186 24226 +3 23821 24586 26718 +3 23821 26718 25948 +3 23822 25949 26719 +3 23822 26719 24587 +3 23823 24215 24522 +3 23823 24522 24171 +3 23824 24174 24523 +3 23824 24523 24216 +3 23825 26095 28141 +3 23825 28141 25970 +3 23826 25971 28142 +3 23826 28142 26096 +3 23827 24026 24129 +3 23827 24129 23931 +3 23828 23932 24130 +3 23828 24130 24027 +3 23829 25728 27473 +3 23829 27473 25589 +3 23830 25650 27474 +3 23830 27474 25729 +3 23831 24085 24111 +3 23831 24111 23883 +3 23832 23884 24112 +3 23832 24112 24086 +3 23833 24402 26510 +3 23833 26510 25968 +3 23834 25969 26511 +3 23834 26511 24403 +3 23835 25602 30284 +3 23835 30284 28511 +3 23836 28512 30285 +3 23836 30285 25602 +3 23837 24171 24538 +3 23837 24538 24237 +3 23838 24238 24539 +3 23838 24539 24174 +3 23839 26226 27059 +3 23839 27059 24700 +3 23840 24701 27060 +3 23840 27060 26227 +3 23841 24032 24203 +3 23841 24203 23999 +3 23842 24000 24204 +3 23842 24204 24033 +3 23843 24001 24195 +3 23843 24195 24018 +3 23844 24019 24196 +3 23844 24196 24002 +3 23845 23999 24185 +3 23845 24185 24001 +3 23846 24002 24186 +3 23846 24186 24000 +3 23847 25832 27825 +3 23847 27825 25946 +3 23848 25947 27826 +3 23848 27826 25833 +3 23849 24414 26043 +3 23849 26043 25346 +3 23850 25347 26044 +3 23850 26044 24415 +3 23851 24121 24172 +3 23851 24172 23915 +3 23852 23916 24173 +3 23852 24173 24122 +3 23853 25026 25370 +3 23853 25370 24201 +3 23854 24202 25371 +3 23854 25371 25027 +3 23855 24672 25440 +3 23855 25440 24628 +3 23856 24629 25441 +3 23856 25441 24673 +3 23857 26183 27039 +3 23857 27039 24724 +3 23858 24725 27040 +3 23858 27040 26184 +3 23859 24107 24189 +3 23859 24189 23945 +3 23860 23946 24190 +3 23860 24190 24108 +3 23861 23925 24127 +3 23861 24127 24071 +3 23862 24072 24128 +3 23862 24128 23926 +3 23863 26736 27803 +3 23863 27803 24878 +3 23864 24879 27804 +3 23864 27804 26737 +3 23865 24516 27139 +3 23865 27139 26488 +3 23866 26489 27140 +3 23866 27140 24517 +3 23867 25093 28827 +3 23867 28827 27475 +3 23868 27476 28828 +3 23868 28828 25094 +3 23869 24590 24800 +3 23869 24800 24103 +3 23870 24104 24801 +3 23870 24801 24591 +3 23871 24042 24153 +3 23871 24153 23975 +3 23872 23976 24154 +3 23872 24154 24043 +3 23873 24279 25902 +3 23873 25902 25360 +3 23874 25361 25903 +3 23874 25903 24280 +3 23875 24115 24187 +3 23875 24187 23955 +3 23876 23956 24188 +3 23876 24188 24116 +3 23877 24428 26017 +3 23877 26017 25350 +3 23878 25351 26018 +3 23878 26018 24429 +3 23879 25428 27176 +3 23879 27176 25520 +3 23880 25521 27177 +3 23880 27177 25429 +3 23881 24640 24890 +3 23881 24890 24165 +3 23882 24166 24891 +3 23882 24891 24641 +3 23883 24111 24197 +3 23883 24197 23967 +3 23884 23968 24198 +3 23884 24198 24112 +3 23885 24101 24177 +3 23885 24177 23957 +3 23886 23958 24178 +3 23886 24178 24102 +3 23887 25348 26868 +3 23887 26868 25280 +3 23888 25281 26869 +3 23888 26869 25349 +3 23889 24628 25396 +3 23889 25396 24151 +3 23890 24152 25397 +3 23890 25397 24629 +3 23891 24018 24223 +3 23891 24223 24077 +3 23892 24078 24224 +3 23892 24224 24019 +3 23893 25099 25684 +3 23893 25684 24392 +3 23894 24393 25685 +3 23894 25685 25100 +3 23895 23997 24486 +3 23895 24486 24400 +3 23896 24401 24487 +3 23896 24487 23998 +3 23897 26702 27791 +3 23897 27791 24946 +3 23898 24947 27792 +3 23898 27792 26703 +3 23899 24648 24876 +3 23899 24876 24163 +3 23900 24164 24877 +3 23900 24877 24649 +3 23901 27257 28545 +3 23901 28545 25109 +3 23902 25110 28546 +3 23902 28546 27258 +3 23903 24285 24588 +3 23903 24588 24215 +3 23904 24216 24589 +3 23904 24589 24286 +3 23905 24097 24243 +3 23905 24243 24032 +3 23906 24033 24244 +3 23906 24244 24098 +3 23907 25794 30247 +3 23907 30247 28459 +3 23908 28460 30248 +3 23908 30248 25795 +3 23909 24139 24598 +3 23909 24598 24394 +3 23910 24395 24599 +3 23910 24599 24140 +3 23911 25822 27531 +3 23911 27531 25728 +3 23912 25729 27532 +3 23912 27532 25823 +3 23913 24972 29218 +3 23913 29218 28044 +3 23914 28045 29219 +3 23914 29219 24973 +3 23915 24172 24227 +3 23915 24227 23973 +3 23916 23974 24228 +3 23916 24228 24173 +3 23917 25702 26242 +3 23917 26242 24376 +3 23918 24377 26243 +3 23918 26243 25703 +3 23919 24754 25878 +3 23919 25878 25336 +3 23920 25337 25879 +3 23920 25879 24755 +3 23921 24716 25514 +3 23921 25514 24672 +3 23922 24673 25515 +3 23922 25515 24717 +3 23923 24205 25137 +3 23923 25137 24854 +3 23924 24855 25138 +3 23924 25138 24206 +3 23925 24077 24265 +3 23925 24265 24127 +3 23926 24128 24266 +3 23926 24266 24078 +3 23927 24237 24630 +3 23927 24630 24328 +3 23928 24329 24631 +3 23928 24631 24238 +3 23929 25520 27249 +3 23929 27249 25590 +3 23930 25649 27250 +3 23930 27250 25521 +3 23931 24129 24235 +3 23931 24235 24048 +3 23932 24048 24236 +3 23932 24236 24130 +3 23933 28359 30041 +3 23933 30041 25603 +3 23934 25603 30042 +3 23934 30042 28360 +3 23935 24131 24626 +3 23935 24626 24446 +3 23936 24447 24627 +3 23936 24627 24132 +3 23937 24738 25556 +3 23937 25556 24716 +3 23938 24717 25557 +3 23938 25557 24739 +3 23939 24323 25318 +3 23939 25318 24926 +3 23940 24927 25319 +3 23940 25319 24324 +3 23941 24135 24552 +3 23941 24552 24374 +3 23942 24375 24553 +3 23942 24553 24136 +3 23943 24327 25169 +3 23943 25169 24782 +3 23944 24783 25170 +3 23944 25170 24327 +3 23945 24189 24291 +3 23945 24291 24042 +3 23946 24043 24292 +3 23946 24292 24190 +3 23947 24161 24247 +3 23947 24247 24026 +3 23948 24027 24248 +3 23948 24248 24162 +3 23949 26812 27549 +3 23949 27549 24674 +3 23950 24675 27550 +3 23950 27550 26813 +3 23951 25151 25554 +3 23951 25554 24317 +3 23952 24318 25555 +3 23952 25555 25152 +3 23953 24119 24578 +3 23953 24578 24434 +3 23954 24435 24579 +3 23954 24579 24120 +3 23955 24187 24281 +3 23955 24281 24051 +3 23956 24052 24282 +3 23956 24282 24188 +3 23957 24177 24303 +3 23957 24303 24097 +3 23958 24098 24304 +3 23958 24304 24178 +3 23959 25430 30444 +3 23959 30444 29166 +3 23960 29167 30445 +3 23960 30445 25431 +3 23961 24712 24900 +3 23961 24900 24175 +3 23962 24176 24901 +3 23962 24901 24713 +3 23963 25442 26945 +3 23963 26945 25348 +3 23964 25349 26946 +3 23964 26946 25443 +3 23965 24275 24572 +3 23965 24572 24285 +3 23966 24286 24573 +3 23966 24573 24276 +3 23967 24197 24301 +3 23967 24301 24016 +3 23968 24017 24302 +3 23968 24302 24198 +3 23969 25946 27934 +3 23969 27934 26061 +3 23970 26062 27935 +3 23970 27935 25947 +3 23971 24297 24576 +3 23971 24576 24275 +3 23972 24276 24577 +3 23972 24577 24298 +3 23973 24227 24299 +3 23973 24299 24030 +3 23974 24031 24300 +3 23974 24300 24228 +3 23975 24153 24261 +3 23975 24261 24101 +3 23976 24102 24262 +3 23976 24262 24154 +3 23977 24277 25233 +3 23977 25233 24966 +3 23978 24967 25234 +3 23978 25234 24278 +3 23979 24714 24982 +3 23979 24982 24263 +3 23980 24264 24983 +3 23980 24983 24715 +3 23981 27337 28585 +3 23981 28585 25121 +3 23982 25122 28586 +3 23982 28586 27338 +3 23983 28312 30017 +3 23983 30017 25786 +3 23984 25787 30018 +3 23984 30018 28313 +3 23985 24191 24692 +3 23985 24692 24498 +3 23986 24499 24693 +3 23986 24693 24192 +3 23987 24181 24624 +3 23987 24624 24454 +3 23988 24455 24625 +3 23988 24625 24182 +3 23989 25590 27309 +3 23989 27309 25718 +3 23990 25719 27310 +3 23990 27310 25649 +3 23991 24337 25332 +3 23991 25332 24940 +3 23992 24941 25333 +3 23992 25333 24338 +3 23993 25932 27637 +3 23993 27637 25822 +3 23994 25823 27638 +3 23994 27638 25933 +3 23995 24790 25682 +3 23995 25682 24764 +3 23996 24765 25683 +3 23996 25683 24791 +3 23997 24145 24634 +3 23997 24634 24486 +3 23998 24487 24635 +3 23998 24635 24146 +3 23999 24203 24368 +3 23999 24368 24185 +3 24000 24186 24369 +3 24000 24369 24204 +3 24001 24185 24360 +3 24001 24360 24195 +3 24002 24196 24361 +3 24002 24361 24186 +3 24003 27908 28986 +3 24003 28986 25010 +3 24004 25011 28987 +3 24004 28987 27909 +3 24005 25262 25860 +3 24005 25860 24478 +3 24006 24479 25861 +3 24006 25861 25263 +3 24007 24956 27589 +3 24007 27589 26642 +3 24008 26643 27590 +3 24008 27590 24957 +3 24009 25073 25615 +3 24009 25615 25074 +3 24010 25141 28318 +3 24010 28318 27125 +3 24011 27126 28319 +3 24011 28319 25142 +3 24012 24500 25063 +3 24012 25063 24584 +3 24013 24585 25064 +3 24013 25064 24501 +3 24014 25286 25854 +3 24014 25854 24470 +3 24015 24471 25855 +3 24015 25855 25287 +3 24016 24301 24354 +3 24016 24354 24107 +3 24017 24108 24355 +3 24017 24355 24302 +3 24018 24195 24384 +3 24018 24384 24223 +3 24019 24224 24385 +3 24019 24385 24196 +3 24020 26422 26993 +3 24020 26993 24636 +3 24021 24637 26994 +3 24021 26994 26423 +3 24022 24328 24650 +3 24022 24650 24358 +3 24023 24359 24651 +3 24023 24651 24329 +3 24024 25914 26528 +3 24024 26528 24664 +3 24025 24665 26529 +3 24025 26529 25915 +3 24026 24247 24341 +3 24026 24341 24129 +3 24027 24130 24342 +3 24027 24342 24248 +3 24028 25604 29793 +3 24028 29793 28200 +3 24029 28201 29794 +3 24029 29794 25604 +3 24030 24299 24356 +3 24030 24356 24115 +3 24031 24116 24357 +3 24031 24357 24300 +3 24032 24243 24404 +3 24032 24404 24203 +3 24033 24204 24405 +3 24033 24405 24244 +3 24034 24780 26913 +3 24034 26913 26161 +3 24035 26162 26914 +3 24035 26914 24781 +3 24036 24622 25083 +3 24036 25083 24500 +3 24037 24501 25084 +3 24037 25084 24623 +3 24038 28994 30266 +3 24038 30266 25436 +3 24039 25437 30267 +3 24039 30267 28995 +3 24040 25004 27573 +3 24040 27573 26593 +3 24041 26594 27574 +3 24041 27574 25005 +3 24042 24291 24390 +3 24042 24390 24153 +3 24043 24154 24391 +3 24043 24391 24292 +3 24044 25526 27025 +3 24044 27025 25442 +3 24045 25443 27026 +3 24045 27026 25527 +3 24046 24830 25724 +3 24046 25724 24790 +3 24047 24791 25725 +3 24047 25725 24831 +3 24048 24235 24343 +3 24048 24343 24236 +3 24049 24806 26894 +3 24049 26894 26123 +3 24050 26124 26895 +3 24050 26895 24807 +3 24051 24281 24382 +3 24051 24382 24161 +3 24052 24162 24383 +3 24052 24383 24282 +3 24053 24059 24306 +3 24053 24305 24058 +3 24053 24306 24305 +3 24054 25922 26574 +3 24054 26574 24710 +3 24055 24711 26575 +3 24055 26575 25923 +3 24056 24418 25414 +3 24056 25414 25028 +3 24057 25029 25415 +3 24057 25415 24419 +3 24058 24305 24309 +3 24058 24309 24085 +3 24059 24086 24310 +3 24059 24310 24306 +3 24060 25938 26424 +3 24060 26424 24518 +3 24061 24519 26425 +3 24061 26425 25939 +3 24062 25718 27359 +3 24062 27359 25810 +3 24063 25811 27360 +3 24063 27360 25719 +3 24064 24706 24976 +3 24064 24976 24348 +3 24065 24349 24977 +3 24065 24977 24707 +3 24066 24079 24560 +3 24066 24555 24067 +3 24066 24560 24555 +3 24067 24555 24561 +3 24067 24561 24080 +3 24068 24074 24795 +3 24068 24794 24073 +3 24068 24795 24794 +3 24069 24642 26264 +3 24069 25625 24070 +3 24069 26264 25625 +3 24070 25625 26265 +3 24070 26265 24643 +3 24071 24127 24332 +3 24071 24332 24378 +3 24071 24378 24121 +3 24072 24122 24379 +3 24072 24333 24128 +3 24072 24379 24333 +3 24073 24794 25097 +3 24073 25097 24346 +3 24074 24347 25098 +3 24074 25098 24795 +3 24075 25302 26746 +3 24075 26746 25368 +3 24076 25369 26747 +3 24076 26747 25303 +3 24077 24223 24410 +3 24077 24410 24265 +3 24078 24266 24411 +3 24078 24411 24224 +3 24079 24257 24742 +3 24079 24742 24560 +3 24080 24561 24743 +3 24080 24743 24258 +3 24081 24652 26236 +3 24081 26236 25542 +3 24082 25543 26237 +3 24082 26237 24653 +3 24083 24358 24686 +3 24083 24686 24408 +3 24084 24409 24687 +3 24084 24687 24359 +3 24085 24309 24339 +3 24085 24339 24111 +3 24086 24112 24340 +3 24086 24340 24310 +3 24087 24442 25420 +3 24087 25420 25065 +3 24088 25066 25421 +3 24088 25421 24443 +3 24089 24870 25798 +3 24089 25798 24830 +3 24090 24831 25799 +3 24090 25799 24871 +3 24091 25774 29751 +3 24091 29751 28147 +3 24092 28148 29752 +3 24092 29752 25775 +3 24093 24574 25020 +3 24093 25020 24526 +3 24094 24527 25021 +3 24094 25021 24575 +3 24095 24526 24998 +3 24095 24998 24546 +3 24096 24547 24999 +3 24096 24999 24527 +3 24097 24303 24452 +3 24097 24452 24243 +3 24098 24244 24453 +3 24098 24453 24304 +3 24099 24750 27373 +3 24099 27373 26722 +3 24100 26723 27374 +3 24100 27374 24751 +3 24101 24261 24398 +3 24101 24398 24177 +3 24102 24178 24399 +3 24102 24399 24262 +3 24103 24800 25103 +3 24103 25103 24396 +3 24104 24397 25104 +3 24104 25104 24801 +3 24105 25591 27081 +3 24105 27081 25526 +3 24106 25527 27082 +3 24106 27082 25648 +3 24107 24354 24432 +3 24107 24432 24189 +3 24108 24190 24433 +3 24108 24433 24355 +3 24109 26037 27772 +3 24109 27772 25932 +3 24110 25933 27773 +3 24110 27773 26038 +3 24111 24339 24420 +3 24111 24420 24197 +3 24112 24198 24421 +3 24112 24421 24340 +3 24113 25153 28351 +3 24113 28351 27228 +3 24114 27229 28352 +3 24114 28352 25154 +3 24115 24356 24430 +3 24115 24430 24187 +3 24116 24188 24431 +3 24116 24431 24357 +3 24117 24584 25038 +3 24117 25038 24574 +3 24118 24575 25039 +3 24118 25039 24585 +3 24119 24283 24766 +3 24119 24766 24578 +3 24120 24579 24767 +3 24120 24767 24284 +3 24121 24378 24422 +3 24121 24422 24172 +3 24122 24173 24423 +3 24122 24423 24379 +3 24123 25040 28760 +3 24123 28760 27768 +3 24124 27769 28761 +3 24124 28761 25041 +3 24125 25444 30037 +3 24125 30037 28831 +3 24126 28832 30038 +3 24126 30038 25445 +3 24127 24265 24468 +3 24127 24468 24332 +3 24128 24333 24469 +3 24128 24469 24266 +3 24129 24341 24444 +3 24129 24444 24235 +3 24130 24236 24445 +3 24130 24445 24342 +3 24131 24330 24804 +3 24131 24804 24626 +3 24132 24627 24805 +3 24132 24805 24331 +3 24133 28016 29527 +3 24133 29527 25605 +3 24134 25605 29528 +3 24134 29528 28017 +3 24135 24334 24746 +3 24135 24746 24552 +3 24136 24553 24747 +3 24136 24747 24334 +3 24137 24836 25034 +3 24137 25034 24335 +3 24138 24336 25035 +3 24138 25035 24837 +3 24139 24273 24734 +3 24139 24734 24598 +3 24140 24599 24735 +3 24140 24735 24274 +3 24141 25810 27463 +3 24141 27463 25912 +3 24142 25913 27464 +3 24142 27464 25811 +3 24143 25378 25976 +3 24143 25976 24604 +3 24144 24605 25977 +3 24144 25977 25379 +3 24145 24295 24758 +3 24145 24758 24634 +3 24146 24635 24759 +3 24146 24759 24296 +3 24147 25368 26822 +3 24147 26822 25462 +3 24148 25463 26823 +3 24148 26823 25369 +3 24149 24530 26169 +3 24149 26169 25696 +3 24150 25697 26170 +3 24150 26170 24531 +3 24151 25396 25868 +3 24151 25868 24480 +3 24152 24481 25869 +3 24152 25869 25397 +3 24153 24390 24484 +3 24153 24484 24261 +3 24154 24262 24485 +3 24154 24485 24391 +3 24155 27007 28085 +3 24155 28085 25179 +3 24156 25180 28086 +3 24156 28086 27008 +3 24157 25712 27133 +3 24157 27133 25591 +3 24158 25648 27134 +3 24158 27134 25713 +3 24159 25384 25952 +3 24159 25952 24612 +3 24160 24613 25953 +3 24160 25953 25385 +3 24161 24382 24460 +3 24161 24460 24247 +3 24162 24248 24461 +3 24162 24461 24383 +3 24163 24876 25163 +3 24163 25163 24436 +3 24164 24437 25164 +3 24164 25164 24877 +3 24165 24890 25189 +3 24165 25189 24456 +3 24166 24457 25190 +3 24166 25190 24891 +3 24167 24882 25596 +3 24167 25596 24918 +3 24168 24919 25643 +3 24168 25643 24883 +3 24169 24656 25105 +3 24169 25105 24622 +3 24170 24623 25106 +3 24170 25106 24657 +3 24171 24522 24838 +3 24171 24838 24538 +3 24172 24422 24476 +3 24172 24476 24227 +3 24173 24228 24477 +3 24173 24477 24423 +3 24174 24539 24839 +3 24174 24839 24523 +3 24175 24900 25111 +3 24175 25111 24380 +3 24176 24381 25112 +3 24176 25112 24901 +3 24177 24398 24506 +3 24177 24506 24303 +3 24178 24304 24507 +3 24178 24507 24399 +3 24179 26538 27399 +3 24179 27399 25012 +3 24180 25013 27400 +3 24180 27400 26539 +3 24181 24374 24788 +3 24181 24788 24624 +3 24182 24625 24789 +3 24182 24789 24375 +3 24183 27990 29503 +3 24183 29503 25762 +3 24184 25763 29504 +3 24184 29504 27991 +3 24185 24368 24508 +3 24185 24508 24360 +3 24186 24361 24509 +3 24186 24509 24369 +3 24187 24430 24494 +3 24187 24494 24281 +3 24188 24282 24495 +3 24188 24495 24431 +3 24189 24432 24514 +3 24189 24514 24291 +3 24190 24292 24515 +3 24190 24515 24433 +3 24191 24394 24862 +3 24191 24862 24692 +3 24192 24693 24863 +3 24192 24863 24395 +3 24193 24670 25133 +3 24193 25133 24656 +3 24194 24657 25134 +3 24194 25134 24671 +3 24195 24360 24528 +3 24195 24528 24384 +3 24196 24385 24529 +3 24196 24529 24361 +3 24197 24420 24504 +3 24197 24504 24301 +3 24198 24302 24505 +3 24198 24505 24421 +3 24199 26514 27381 +3 24199 27381 25055 +3 24200 25056 27382 +3 24200 27382 26515 +3 24201 25370 25842 +3 24201 25842 24870 +3 24202 24871 25843 +3 24202 25843 25371 +3 24203 24404 24540 +3 24203 24540 24368 +3 24204 24369 24541 +3 24204 24541 24405 +3 24205 24466 25410 +3 24205 25410 25137 +3 24206 25138 25411 +3 24206 25411 24467 +3 24207 24796 25478 +3 24207 25478 24834 +3 24208 24835 25479 +3 24208 25479 24797 +3 24209 28646 29803 +3 24209 29803 25452 +3 24210 25453 29804 +3 24210 29804 28647 +3 24211 24728 26836 +3 24211 26836 26330 +3 24212 26331 26837 +3 24212 26837 24729 +3 24213 25796 27194 +3 24213 27194 25712 +3 24214 25713 27195 +3 24214 27195 25797 +3 24215 24588 24888 +3 24215 24888 24522 +3 24216 24523 24889 +3 24216 24889 24589 +3 24217 25462 26876 +3 24217 26876 25532 +3 24218 25533 26877 +3 24218 26877 25463 +3 24219 24440 25426 +3 24219 25426 24796 +3 24220 24797 25427 +3 24220 25427 24441 +3 24221 27595 28529 +3 24221 28529 25085 +3 24222 25086 28530 +3 24222 28530 27596 +3 24223 24384 24564 +3 24223 24564 24410 +3 24224 24411 24565 +3 24224 24565 24385 +3 24225 24614 25678 +3 24225 25678 25185 +3 24226 25186 25679 +3 24226 25679 24615 +3 24227 24476 24532 +3 24227 24532 24299 +3 24228 24300 24533 +3 24228 24533 24477 +3 24229 25606 29272 +3 24229 29272 27864 +3 24230 27865 29273 +3 24230 29273 25606 +3 24231 27083 28109 +3 24231 28109 25187 +3 24232 25188 28110 +3 24232 28110 27084 +3 24233 26103 26764 +3 24233 26764 24864 +3 24234 24865 26765 +3 24234 26765 26104 +3 24235 24444 24534 +3 24235 24534 24343 +3 24236 24343 24535 +3 24236 24535 24445 +3 24237 24538 24920 +3 24237 24920 24630 +3 24238 24631 24921 +3 24238 24921 24539 +3 24239 25912 27547 +3 24239 27547 26001 +3 24240 26002 27548 +3 24240 27548 25913 +3 24241 26073 26750 +3 24241 26750 24892 +3 24242 24893 26751 +3 24242 26751 26074 +3 24243 24452 24580 +3 24243 24580 24404 +3 24244 24405 24581 +3 24244 24581 24453 +3 24245 26602 27218 +3 24245 27218 24816 +3 24246 24817 27219 +3 24246 27219 26603 +3 24247 24460 24548 +3 24247 24548 24341 +3 24248 24342 24549 +3 24248 24549 24461 +3 24249 24732 25155 +3 24249 25155 24670 +3 24250 24671 25156 +3 24250 25156 24733 +3 24251 24834 25528 +3 24251 25528 24858 +3 24252 24859 25529 +3 24252 25529 24835 +3 24253 24774 26428 +3 24253 26428 25888 +3 24254 25889 26429 +3 24254 26429 24775 +3 24255 25394 26600 +3 24255 26600 25330 +3 24256 25331 26601 +3 24256 26601 25395 +3 24257 24446 24924 +3 24257 24924 24742 +3 24258 24743 24925 +3 24258 24925 24447 +3 24259 25532 26931 +3 24259 26931 25592 +3 24260 25647 26932 +3 24260 26932 25533 +3 24261 24484 24610 +3 24261 24610 24398 +3 24262 24399 24611 +3 24262 24611 24485 +3 24263 24982 25284 +3 24263 25284 24550 +3 24264 24551 25285 +3 24264 25285 24983 +3 24265 24410 24608 +3 24265 24608 24468 +3 24266 24469 24609 +3 24266 24609 24411 +3 24267 24858 25562 +3 24267 25562 24882 +3 24268 24883 25563 +3 24268 25563 24859 +3 24269 24810 26464 +3 24269 26464 25892 +3 24270 25893 26465 +3 24270 26465 24811 +3 24271 25754 29251 +3 24271 29251 27827 +3 24272 27828 29252 +3 24272 29252 25755 +3 24273 24408 24850 +3 24273 24850 24734 +3 24274 24735 24851 +3 24274 24851 24409 +3 24275 24576 24852 +3 24275 24852 24572 +3 24276 24573 24853 +3 24276 24853 24577 +3 24277 24566 25560 +3 24277 25560 25233 +3 24278 25234 25561 +3 24278 25561 24567 +3 24279 24678 26316 +3 24279 26316 25902 +3 24280 25903 26317 +3 24280 26317 24679 +3 24281 24494 24594 +3 24281 24594 24382 +3 24282 24383 24595 +3 24282 24595 24495 +3 24283 24454 24936 +3 24283 24936 24766 +3 24284 24767 24937 +3 24284 24937 24455 +3 24285 24572 24874 +3 24285 24874 24588 +3 24286 24589 24875 +3 24286 24875 24573 +3 24287 25203 27857 +3 24287 27857 26886 +3 24288 26887 27858 +3 24288 27858 25204 +3 24289 25464 29557 +3 24289 29557 28441 +3 24290 28442 29558 +3 24290 29558 25465 +3 24291 24514 24620 +3 24291 24620 24390 +3 24292 24391 24621 +3 24292 24621 24515 +3 24293 25890 27275 +3 24293 27275 25796 +3 24294 25797 27276 +3 24294 27276 25891 +3 24295 24434 24898 +3 24295 24898 24758 +3 24296 24759 24899 +3 24296 24899 24435 +3 24297 24400 24860 +3 24297 24860 24576 +3 24298 24577 24861 +3 24298 24861 24401 +3 24299 24532 24602 +3 24299 24602 24356 +3 24300 24357 24603 +3 24300 24603 24533 +3 24301 24504 24606 +3 24301 24606 24354 +3 24302 24355 24607 +3 24302 24607 24505 +3 24303 24506 24658 +3 24303 24658 24452 +3 24304 24453 24659 +3 24304 24659 24507 +3 24305 24306 24554 +3 24305 24554 24558 +3 24305 24558 24309 +3 24306 24310 24559 +3 24306 24559 24554 +3 24307 25592 26979 +3 24307 26979 25706 +3 24308 25707 26980 +3 24308 26980 25647 +3 24309 24558 24568 +3 24309 24568 24339 +3 24310 24340 24569 +3 24310 24569 24559 +3 24311 24918 25676 +3 24311 25676 24950 +3 24312 24951 25677 +3 24312 25677 24919 +3 24313 24314 25624 +3 24313 25624 26165 +3 24313 26165 24772 +3 24314 24773 26166 +3 24314 26166 25624 +3 24315 27718 29028 +3 24315 29028 25607 +3 24316 25607 29029 +3 24316 29029 27719 +3 24317 25554 26139 +3 24317 26139 24784 +3 24318 24785 26140 +3 24318 26140 25555 +3 24319 25480 26676 +3 24319 26676 25394 +3 24320 25395 26677 +3 24320 26677 25481 +3 24321 25123 28306 +3 24321 28306 27453 +3 24322 27454 28307 +3 24322 28307 25124 +3 24323 24694 25824 +3 24323 25824 25318 +3 24324 25319 25825 +3 24324 25825 24695 +3 24325 25077 27204 +3 24325 27204 26458 +3 24326 26459 27205 +3 24326 27205 25078 +3 24327 25170 25616 +3 24327 25616 25169 +3 24328 24630 24942 +3 24328 24942 24650 +3 24329 24651 24943 +3 24329 24943 24631 +3 24330 24498 24992 +3 24330 24992 24804 +3 24331 24805 24993 +3 24331 24993 24499 +3 24332 24468 24618 +3 24332 24618 24378 +3 24333 24379 24619 +3 24333 24619 24469 +3 24334 24747 24928 +3 24334 24928 24746 +3 24335 25034 25243 +3 24335 25243 24524 +3 24336 24525 25244 +3 24336 25244 25035 +3 24337 24688 25818 +3 24337 25818 25332 +3 24338 25333 25819 +3 24338 25819 24689 +3 24339 24568 24662 +3 24339 24662 24420 +3 24340 24421 24663 +3 24340 24663 24569 +3 24341 24548 24654 +3 24341 24654 24444 +3 24342 24445 24655 +3 24342 24655 24549 +3 24343 24534 24647 +3 24343 24647 24535 +3 24344 25115 27189 +3 24344 27189 26432 +3 24345 26433 27190 +3 24345 27190 25116 +3 24346 25097 25372 +3 24346 25372 24640 +3 24347 24641 25373 +3 24347 25373 25098 +3 24348 24976 25272 +3 24348 25272 24644 +3 24349 24644 25273 +3 24349 25273 24977 +3 24350 24950 25710 +3 24350 25710 24978 +3 24351 24979 25711 +3 24351 25711 24951 +3 24352 25219 27882 +3 24352 27882 26951 +3 24353 26952 27883 +3 24353 27883 25220 +3 24354 24606 24684 +3 24354 24684 24432 +3 24355 24433 24685 +3 24355 24685 24607 +3 24356 24602 24676 +3 24356 24676 24430 +3 24357 24431 24677 +3 24357 24677 24603 +3 24358 24650 24960 +3 24358 24960 24686 +3 24359 24687 24961 +3 24359 24961 24651 +3 24360 24508 24696 +3 24360 24696 24528 +3 24361 24529 24697 +3 24361 24697 24509 +3 24362 25706 27021 +3 24362 27021 25776 +3 24363 25777 27022 +3 24363 27022 25707 +3 24364 27675 28984 +3 24364 28984 25748 +3 24365 25749 28985 +3 24365 28985 27676 +3 24366 28276 29315 +3 24366 29315 25476 +3 24367 25477 29316 +3 24367 29316 28277 +3 24368 24540 24702 +3 24368 24702 24508 +3 24369 24509 24703 +3 24369 24703 24541 +3 24370 25958 27351 +3 24370 27351 25890 +3 24371 25891 27352 +3 24371 27352 25959 +3 24372 26390 31181 +3 24372 31181 29592 +3 24373 29593 31182 +3 24373 31182 26391 +3 24374 24552 24980 +3 24374 24980 24788 +3 24375 24789 24981 +3 24375 24981 24553 +3 24376 26242 26720 +3 24376 26720 24814 +3 24377 24815 26721 +3 24377 26721 26243 +3 24378 24618 24668 +3 24378 24668 24422 +3 24379 24423 24669 +3 24379 24669 24619 +3 24380 25111 25314 +3 24380 25314 24590 +3 24381 24591 25315 +3 24381 25315 25112 +3 24382 24594 24690 +3 24382 24690 24460 +3 24383 24461 24691 +3 24383 24691 24595 +3 24384 24528 24720 +3 24384 24720 24564 +3 24385 24565 24721 +3 24385 24721 24529 +3 24386 24978 25760 +3 24386 25760 25022 +3 24387 25023 25761 +3 24387 25761 24979 +3 24388 25538 26742 +3 24388 26742 25480 +3 24389 25481 26743 +3 24389 26743 25539 +3 24390 24620 24726 +3 24390 24726 24484 +3 24391 24485 24727 +3 24391 24727 24621 +3 24392 25684 26087 +3 24392 26087 24708 +3 24393 24709 26088 +3 24393 26088 25685 +3 24394 24598 25079 +3 24394 25079 24862 +3 24395 24863 25080 +3 24395 25080 24599 +3 24396 25103 25386 +3 24396 25386 24648 +3 24397 24649 25387 +3 24397 25387 25104 +3 24398 24610 24680 +3 24398 24680 24506 +3 24399 24507 24681 +3 24399 24681 24611 +3 24400 24486 24988 +3 24400 24988 24860 +3 24401 24861 24989 +3 24401 24989 24487 +3 24402 24908 27027 +3 24402 27027 26510 +3 24403 26511 27028 +3 24403 27028 24909 +3 24404 24580 24736 +3 24404 24736 24540 +3 24405 24541 24737 +3 24405 24737 24581 +3 24406 26766 27629 +3 24406 27629 25250 +3 24407 25251 27630 +3 24407 27630 26767 +3 24408 24686 25006 +3 24408 25006 24850 +3 24409 24851 25007 +3 24409 25007 24687 +3 24410 24564 24752 +3 24410 24752 24608 +3 24411 24609 24753 +3 24411 24753 24565 +3 24412 25608 28746 +3 24412 28746 27527 +3 24413 27528 28747 +3 24413 28747 25608 +3 24414 24974 26596 +3 24414 26596 26043 +3 24415 26044 26597 +3 24415 26597 24975 +3 24416 25776 27091 +3 24416 27091 25870 +3 24417 25871 27092 +3 24417 27092 25777 +3 24418 24782 25920 +3 24418 25920 25414 +3 24419 25415 25921 +3 24419 25921 24783 +3 24420 24662 24740 +3 24420 24740 24504 +3 24421 24505 24741 +3 24421 24741 24663 +3 24422 24668 24718 +3 24422 24718 24476 +3 24423 24477 24719 +3 24423 24719 24669 +3 24424 25593 26776 +3 24424 26776 25538 +3 24425 25539 26777 +3 24425 26777 25646 +3 24426 27289 28071 +3 24426 28071 25157 +3 24427 25158 28072 +3 24427 28072 27290 +3 24428 25002 26586 +3 24428 26586 26017 +3 24429 26018 26587 +3 24429 26587 25003 +3 24430 24676 24748 +3 24430 24748 24494 +3 24431 24495 24749 +3 24431 24749 24677 +3 24432 24684 24760 +3 24432 24760 24514 +3 24433 24515 24761 +3 24433 24761 24685 +3 24434 24578 25053 +3 24434 25053 24898 +3 24435 24899 25054 +3 24435 25054 24579 +3 24436 25163 25458 +3 24436 25458 24706 +3 24437 24707 25459 +3 24437 25459 25164 +3 24438 29400 30960 +3 24438 30960 26352 +3 24439 26353 30961 +3 24439 30961 29401 +3 24440 24698 25828 +3 24440 25828 25426 +3 24441 25427 25829 +3 24441 25829 24699 +3 24442 24786 25906 +3 24442 25906 25420 +3 24443 25421 25907 +3 24443 25907 24787 +3 24444 24654 24744 +3 24444 24744 24534 +3 24445 24535 24745 +3 24445 24745 24655 +3 24446 24626 25127 +3 24446 25127 24924 +3 24447 24925 25128 +3 24447 25128 24627 +3 24448 25484 29079 +3 24448 29079 28089 +3 24449 28090 29080 +3 24449 29080 25485 +3 24450 25360 26484 +3 24450 26484 25418 +3 24451 25419 26485 +3 24451 26485 25361 +3 24452 24658 24778 +3 24452 24778 24580 +3 24453 24581 24779 +3 24453 24779 24659 +3 24454 24624 25119 +3 24454 25119 24936 +3 24455 24937 25120 +3 24455 25120 24625 +3 24456 25189 25460 +3 24456 25460 24714 +3 24457 24715 25461 +3 24457 25461 25190 +3 24458 25742 28714 +3 24458 28714 27500 +3 24459 27501 28715 +3 24459 28715 25743 +3 24460 24690 24762 +3 24460 24762 24548 +3 24461 24549 24763 +3 24461 24763 24691 +3 24462 25700 26814 +3 24462 26814 25593 +3 24463 25646 26815 +3 24463 26815 25701 +3 24464 26372 31139 +3 24464 31139 29567 +3 24465 29568 31140 +3 24465 31140 26373 +3 24466 25022 25812 +3 24466 25812 25410 +3 24467 25411 25813 +3 24467 25813 25023 +3 24468 24608 24756 +3 24468 24756 24618 +3 24469 24619 24757 +3 24469 24757 24609 +3 24470 25854 26294 +3 24470 26294 24906 +3 24471 24907 26295 +3 24471 26295 25855 +3 24472 26832 27661 +3 24472 27661 25260 +3 24473 25261 27662 +3 24473 27662 26833 +3 24474 26374 27005 +3 24474 27005 25135 +3 24475 25136 27006 +3 24475 27006 26375 +3 24476 24718 24768 +3 24476 24768 24532 +3 24477 24533 24769 +3 24477 24769 24719 +3 24478 25860 26332 +3 24478 26332 24944 +3 24479 24945 26333 +3 24479 26333 25861 +3 24480 25868 26212 +3 24480 26212 24808 +3 24481 24809 26213 +3 24481 26213 25869 +3 24482 26304 30750 +3 24482 30750 29208 +3 24483 29209 30751 +3 24483 30751 26305 +3 24484 24726 24826 +3 24484 24826 24610 +3 24485 24611 24827 +3 24485 24827 24727 +3 24486 24634 25129 +3 24486 25129 24988 +3 24487 24989 25130 +3 24487 25130 24635 +3 24488 26346 26997 +3 24488 26997 25165 +3 24489 25166 26998 +3 24489 26998 26347 +3 24490 25418 26534 +3 24490 26534 25494 +3 24491 25495 26535 +3 24491 26535 25419 +3 24492 25870 27163 +3 24492 27163 25936 +3 24493 25937 27164 +3 24493 27164 25871 +3 24494 24748 24812 +3 24494 24812 24594 +3 24495 24595 24813 +3 24495 24813 24749 +3 24496 25758 26850 +3 24496 26850 25700 +3 24497 25701 26851 +3 24497 26851 25759 +3 24498 24692 25173 +3 24498 25173 24992 +3 24499 24993 25174 +3 24499 25174 24693 +3 24500 25083 25597 +3 24500 25597 25063 +3 24501 25064 25642 +3 24501 25642 25084 +3 24502 27375 28477 +3 24502 28477 25609 +3 24503 25609 28478 +3 24503 28478 27376 +3 24504 24740 24820 +3 24504 24820 24606 +3 24505 24607 24821 +3 24505 24821 24741 +3 24506 24680 24802 +3 24506 24802 24658 +3 24507 24659 24803 +3 24507 24803 24681 +3 24508 24702 24840 +3 24508 24840 24696 +3 24509 24697 24841 +3 24509 24841 24703 +3 24510 29373 30936 +3 24510 30936 26324 +3 24511 26325 30937 +3 24511 30937 29374 +3 24512 27912 28841 +3 24512 28841 25490 +3 24513 25491 28842 +3 24513 28842 27913 +3 24514 24760 24844 +3 24514 24844 24620 +3 24515 24621 24845 +3 24515 24845 24761 +3 24516 25193 27851 +3 24516 27851 27139 +3 24517 27140 27852 +3 24517 27852 25194 +3 24518 26424 26862 +3 24518 26862 24996 +3 24519 24997 26863 +3 24519 26863 26425 +3 24520 25290 27417 +3 24520 27417 26652 +3 24521 26653 27418 +3 24521 27418 25291 +3 24522 24888 25225 +3 24522 25225 24838 +3 24523 24839 25226 +3 24523 25226 24889 +3 24524 25243 25450 +3 24524 25450 24732 +3 24525 24733 25451 +3 24525 25451 25244 +3 24526 25020 25504 +3 24526 25504 24998 +3 24527 24999 25505 +3 24527 25505 25021 +3 24528 24696 24856 +3 24528 24856 24720 +3 24529 24721 24857 +3 24529 24857 24697 +3 24530 24922 26560 +3 24530 26560 26169 +3 24531 26170 26561 +3 24531 26561 24923 +3 24532 24768 24832 +3 24532 24832 24602 +3 24533 24603 24833 +3 24533 24833 24769 +3 24534 24744 24822 +3 24534 24822 24647 +3 24535 24647 24823 +3 24535 24823 24745 +3 24536 27341 28445 +3 24536 28445 25732 +3 24537 25733 28446 +3 24537 28446 27342 +3 24538 24838 25239 +3 24538 25239 24920 +3 24539 24921 25240 +3 24539 25240 24839 +3 24540 24736 24868 +3 24540 24868 24702 +3 24541 24703 24869 +3 24541 24869 24737 +3 24542 25494 26578 +3 24542 26578 25546 +3 24543 25547 26579 +3 24543 26579 25495 +3 24544 29004 30534 +3 24544 30534 26270 +3 24545 26271 30535 +3 24545 30535 29005 +3 24546 24998 25470 +3 24546 25470 24712 +3 24547 24713 25471 +3 24547 25471 24999 +3 24548 24762 24842 +3 24548 24842 24654 +3 24549 24655 24843 +3 24549 24843 24763 +3 24550 25284 25672 +3 24550 25672 24836 +3 24551 24837 25673 +3 24551 25673 25285 +3 24552 24746 25171 +3 24552 25171 24980 +3 24553 24981 25172 +3 24553 25172 24747 +3 24554 24559 24793 +3 24554 24792 24558 +3 24554 24793 24792 +3 24555 24560 25047 +3 24555 25047 25048 +3 24555 25048 24561 +3 24556 24926 26069 +3 24556 25623 24557 +3 24556 26069 25623 +3 24557 25623 26070 +3 24557 26070 24927 +3 24558 24792 24798 +3 24558 24798 24568 +3 24559 24569 24799 +3 24559 24799 24793 +3 24560 24742 25247 +3 24560 25247 25047 +3 24561 25048 25248 +3 24561 25248 24743 +3 24562 25844 26919 +3 24562 26919 25758 +3 24563 25759 26920 +3 24563 26920 25845 +3 24564 24720 24904 +3 24564 24904 24752 +3 24565 24753 24905 +3 24565 24905 24721 +3 24566 24940 26053 +3 24566 26053 25560 +3 24567 25561 26054 +3 24567 26054 24941 +3 24568 24798 24880 +3 24568 24880 24662 +3 24569 24663 24881 +3 24569 24881 24799 +3 24570 26286 30707 +3 24570 30707 29176 +3 24571 29177 30708 +3 24571 30708 26287 +3 24572 24852 25197 +3 24572 25197 24874 +3 24573 24875 25198 +3 24573 25198 24853 +3 24574 25038 25540 +3 24574 25540 25020 +3 24575 25021 25541 +3 24575 25541 25039 +3 24576 24860 25181 +3 24576 25181 24852 +3 24577 24853 25182 +3 24577 25182 24861 +3 24578 24766 25254 +3 24578 25254 25053 +3 24579 25054 25255 +3 24579 25255 24767 +3 24580 24778 24929 +3 24580 24929 24736 +3 24581 24737 24930 +3 24581 24930 24779 +3 24582 25546 26622 +3 24582 26622 25594 +3 24583 25645 26623 +3 24583 26623 25547 +3 24584 25063 25568 +3 24584 25568 25038 +3 24585 25039 25569 +3 24585 25569 25064 +3 24586 25294 27431 +3 24586 27431 26718 +3 24587 26719 27432 +3 24587 27432 25295 +3 24588 24874 25213 +3 24588 25213 24888 +3 24589 24889 25214 +3 24589 25214 24875 +3 24590 25314 25566 +3 24590 25566 24800 +3 24591 24801 25567 +3 24591 25567 25315 +3 24592 25496 28573 +3 24592 28573 27752 +3 24593 27753 28574 +3 24593 28574 25497 +3 24594 24812 24902 +3 24594 24902 24690 +3 24595 24691 24903 +3 24595 24903 24813 +3 24596 25610 28226 +3 24596 28226 27231 +3 24597 27232 28227 +3 24597 28227 25610 +3 24598 24734 25209 +3 24598 25209 25079 +3 24599 25080 25210 +3 24599 25210 24735 +3 24600 26230 30339 +3 24600 30339 28815 +3 24601 28816 30340 +3 24601 30340 26231 +3 24602 24832 24910 +3 24602 24910 24676 +3 24603 24677 24911 +3 24603 24911 24833 +3 24604 25976 26466 +3 24604 26466 25073 +3 24605 25074 26467 +3 24605 26467 25977 +3 24606 24820 24931 +3 24606 24931 24684 +3 24607 24685 24932 +3 24607 24932 24821 +3 24608 24752 24896 +3 24608 24896 24756 +3 24609 24757 24897 +3 24609 24897 24753 +3 24610 24826 24894 +3 24610 24894 24680 +3 24611 24681 24895 +3 24611 24895 24827 +3 24612 25952 26454 +3 24612 26454 25099 +3 24613 25100 26455 +3 24613 26455 25953 +3 24614 24854 26005 +3 24614 26005 25678 +3 24615 25679 26006 +3 24615 26006 24855 +3 24616 25594 26656 +3 24616 26656 25692 +3 24617 25693 26657 +3 24617 26657 25645 +3 24618 24756 24912 +3 24618 24912 24668 +3 24619 24669 24913 +3 24619 24913 24757 +3 24620 24844 24962 +3 24620 24962 24726 +3 24621 24727 24963 +3 24621 24963 24845 +3 24622 25105 25670 +3 24622 25670 25083 +3 24623 25084 25671 +3 24623 25671 25106 +3 24624 24788 25298 +3 24624 25298 25119 +3 24625 25120 25299 +3 24625 25299 24789 +3 24626 24804 25312 +3 24626 25312 25127 +3 24627 25128 25313 +3 24627 25313 24805 +3 24628 25440 26368 +3 24628 26368 25396 +3 24629 25397 26369 +3 24629 26369 25441 +3 24630 24920 25258 +3 24630 25258 24942 +3 24631 24943 25259 +3 24631 25259 24921 +3 24632 28978 30502 +3 24632 30502 26254 +3 24633 26255 30503 +3 24633 30503 28979 +3 24634 24758 25266 +3 24634 25266 25129 +3 24635 25130 25267 +3 24635 25267 24759 +3 24636 26993 27617 +3 24636 27617 25227 +3 24637 25228 27618 +3 24637 27618 26994 +3 24638 25908 26983 +3 24638 26983 25844 +3 24639 25845 26984 +3 24639 26984 25909 +3 24640 25372 25780 +3 24640 25780 24890 +3 24641 24891 25781 +3 24641 25781 25373 +3 24642 25195 26824 +3 24642 26824 26264 +3 24643 26265 26825 +3 24643 26825 25196 +3 24644 25272 25617 +3 24644 25617 25273 +3 24645 25722 28210 +3 24645 28210 27198 +3 24646 27199 28211 +3 24646 28211 25723 +3 24647 24822 24933 +3 24647 24933 24823 +3 24648 25386 25778 +3 24648 25778 24876 +3 24649 24877 25779 +3 24649 25779 25387 +3 24650 24942 25274 +3 24650 25274 24960 +3 24651 24961 25275 +3 24651 25275 24943 +3 24652 25221 26810 +3 24652 26810 26236 +3 24653 26237 26811 +3 24653 26811 25222 +3 24654 24842 24958 +3 24654 24958 24744 +3 24655 24745 24959 +3 24655 24959 24843 +3 24656 25133 25698 +3 24656 25698 25105 +3 24657 25106 25699 +3 24657 25699 25134 +3 24658 24802 24948 +3 24658 24948 24778 +3 24659 24779 24949 +3 24659 24949 24803 +3 24660 25692 26696 +3 24660 26696 25744 +3 24661 25745 26697 +3 24661 26697 25693 +3 24662 24880 24994 +3 24662 24994 24740 +3 24663 24741 24995 +3 24663 24995 24881 +3 24664 26528 27184 +3 24664 27184 25316 +3 24665 25317 27185 +3 24665 27185 26529 +3 24666 28606 30053 +3 24666 30053 26206 +3 24667 26207 30054 +3 24667 30054 28607 +3 24668 24912 24964 +3 24668 24964 24718 +3 24669 24719 24965 +3 24669 24965 24913 +3 24670 25155 25734 +3 24670 25734 25133 +3 24671 25134 25735 +3 24671 25735 25156 +3 24672 25514 26408 +3 24672 26408 25440 +3 24673 25441 26409 +3 24673 26409 25515 +3 24674 27549 28330 +3 24674 28330 25506 +3 24675 25507 28331 +3 24675 28331 27550 +3 24676 24910 24986 +3 24676 24986 24748 +3 24677 24749 24987 +3 24677 24987 24911 +3 24678 25069 26708 +3 24678 26708 26316 +3 24679 26317 26709 +3 24679 26709 25070 +3 24680 24894 24970 +3 24680 24970 24802 +3 24681 24803 24971 +3 24681 24971 24895 +3 24682 26222 30297 +3 24682 30297 28791 +3 24683 28792 30298 +3 24683 30298 26223 +3 24684 24931 25024 +3 24684 25024 24760 +3 24685 24761 25025 +3 24685 25025 24932 +3 24686 24960 25296 +3 24686 25296 25006 +3 24687 25007 25297 +3 24687 25297 24961 +3 24688 25028 26173 +3 24688 26173 25818 +3 24689 25819 26174 +3 24689 26174 25029 +3 24690 24902 25000 +3 24690 25000 24762 +3 24691 24763 25001 +3 24691 25001 24903 +3 24692 24862 25366 +3 24692 25366 25173 +3 24693 25174 25367 +3 24693 25367 24863 +3 24694 25065 26210 +3 24694 26210 25824 +3 24695 25825 26211 +3 24695 26211 25066 +3 24696 24840 25030 +3 24696 25030 24856 +3 24697 24857 25031 +3 24697 25031 24841 +3 24698 24966 26101 +3 24698 26101 25828 +3 24699 25829 26102 +3 24699 26102 24967 +3 24700 27059 27944 +3 24700 27944 25611 +3 24701 25611 27945 +3 24701 27945 27060 +3 24702 24868 25036 +3 24702 25036 24840 +3 24703 24841 25037 +3 24703 25037 24869 +3 24704 25744 26748 +3 24704 26748 25820 +3 24705 25821 26749 +3 24705 26749 25745 +3 24706 25458 25866 +3 24706 25866 24976 +3 24707 24977 25867 +3 24707 25867 25459 +3 24708 26087 26430 +3 24708 26430 25026 +3 24709 25027 26431 +3 24709 26431 26088 +3 24710 26574 27214 +3 24710 27214 25324 +3 24711 25325 27215 +3 24711 27215 26575 +3 24712 25470 25788 +3 24712 25788 24900 +3 24713 24901 25789 +3 24713 25789 25471 +3 24714 25460 25852 +3 24714 25852 24982 +3 24715 24983 25853 +3 24715 25853 25461 +3 24716 25556 26448 +3 24716 26448 25514 +3 24717 25515 26449 +3 24717 26449 25557 +3 24718 24964 25018 +3 24718 25018 24768 +3 24719 24769 25019 +3 24719 25019 24965 +3 24720 24856 25067 +3 24720 25067 24904 +3 24721 24905 25068 +3 24721 25068 24857 +3 24722 26167 29767 +3 24722 29767 28405 +3 24723 28406 29768 +3 24723 29768 26168 +3 24724 27039 27920 +3 24724 27920 25716 +3 24725 25717 27921 +3 24725 27921 27040 +3 24726 24962 25075 +3 24726 25075 24826 +3 24727 24827 25076 +3 24727 25076 24963 +3 24728 25270 27405 +3 24728 27405 26836 +3 24729 26837 27406 +3 24729 27406 25271 +3 24730 28587 30029 +3 24730 30029 26189 +3 24731 26190 30030 +3 24731 30030 28588 +3 24732 25450 25768 +3 24732 25768 25155 +3 24733 25156 25769 +3 24733 25769 25451 +3 24734 24850 25344 +3 24734 25344 25209 +3 24735 25210 25345 +3 24735 25345 24851 +3 24736 24929 25091 +3 24736 25091 24868 +3 24737 24869 25092 +3 24737 25092 24930 +3 24738 25595 26474 +3 24738 26474 25556 +3 24739 25557 26475 +3 24739 26475 25644 +3 24740 24994 25089 +3 24740 25089 24820 +3 24741 24821 25090 +3 24741 25090 24995 +3 24742 24924 25434 +3 24742 25434 25247 +3 24743 25248 25435 +3 24743 25435 24925 +3 24744 24958 25044 +3 24744 25044 24822 +3 24745 24823 25045 +3 24745 25045 24959 +3 24746 24928 25354 +3 24746 25354 25171 +3 24747 25172 25355 +3 24747 25355 24928 +3 24748 24986 25061 +3 24748 25061 24812 +3 24749 24813 25062 +3 24749 25062 24987 +3 24750 25516 28063 +3 24750 28063 27373 +3 24751 27374 28064 +3 24751 28064 25517 +3 24752 24904 25057 +3 24752 25057 24896 +3 24753 24897 25058 +3 24753 25058 24905 +3 24754 25820 26788 +3 24754 26788 25878 +3 24755 25879 26789 +3 24755 26789 25821 +3 24756 24896 25059 +3 24756 25059 24912 +3 24757 24913 25060 +3 24757 25060 24897 +3 24758 24898 25392 +3 24758 25392 25266 +3 24759 25267 25393 +3 24759 25393 24899 +3 24760 25024 25125 +3 24760 25125 24844 +3 24761 24845 25126 +3 24761 25126 25025 +3 24762 25000 25087 +3 24762 25087 24842 +3 24763 24843 25088 +3 24763 25088 25001 +3 24764 25682 26500 +3 24764 26500 25595 +3 24765 25644 26501 +3 24765 26501 25683 +3 24766 24936 25446 +3 24766 25446 25254 +3 24767 25255 25447 +3 24767 25447 24937 +3 24768 25018 25095 +3 24768 25095 24832 +3 24769 24833 25096 +3 24769 25096 25019 +3 24770 28204 29474 +3 24770 29474 26129 +3 24771 26130 29475 +3 24771 29475 28205 +3 24772 26165 26634 +3 24772 26634 25262 +3 24773 25263 26635 +3 24773 26635 26166 +3 24774 25346 26969 +3 24774 26969 26428 +3 24775 26429 26970 +3 24775 26970 25347 +3 24776 26145 29733 +3 24776 29733 28385 +3 24777 28386 29734 +3 24777 29734 26146 +3 24778 24948 25101 +3 24778 25101 24929 +3 24779 24930 25102 +3 24779 25102 24949 +3 24780 25612 27706 +3 24780 27706 26913 +3 24781 26914 27707 +3 24781 27707 25612 +3 24782 25169 26312 +3 24782 26312 25920 +3 24783 25921 26313 +3 24783 26313 25170 +3 24784 26139 26626 +3 24784 26626 25286 +3 24785 25287 26627 +3 24785 26627 26140 +3 24786 25185 26298 +3 24786 26298 25906 +3 24787 25907 26299 +3 24787 26299 25186 +3 24788 24980 25502 +3 24788 25502 25298 +3 24789 25299 25503 +3 24789 25503 24981 +3 24790 25724 26522 +3 24790 26522 25682 +3 24791 25683 26523 +3 24791 26523 25725 +3 24792 24793 25046 +3 24792 25046 25051 +3 24792 25051 24798 +3 24793 24799 25052 +3 24793 25052 25046 +3 24794 24795 25622 +3 24794 25622 25966 +3 24794 25966 25097 +3 24795 25098 25967 +3 24795 25967 25622 +3 24796 25426 26216 +3 24796 26216 25478 +3 24797 25479 26217 +3 24797 26217 25427 +3 24798 25051 25147 +3 24798 25147 24880 +3 24799 24881 25148 +3 24799 25148 25052 +3 24800 25566 25954 +3 24800 25954 25103 +3 24801 25104 25955 +3 24801 25955 25567 +3 24802 24970 25117 +3 24802 25117 24948 +3 24803 24949 25118 +3 24803 25118 24971 +3 24804 24992 25508 +3 24804 25508 25312 +3 24805 25313 25509 +3 24805 25509 24993 +3 24806 25708 27683 +3 24806 27683 26894 +3 24807 26895 27684 +3 24807 27684 25709 +3 24808 26212 26530 +3 24808 26530 25151 +3 24809 25152 26531 +3 24809 26531 26213 +3 24810 25350 26985 +3 24810 26985 26464 +3 24811 26465 26986 +3 24811 26986 25351 +3 24812 25061 25161 +3 24812 25161 24902 +3 24813 24903 25162 +3 24813 25162 25062 +3 24814 26720 27178 +3 24814 27178 25300 +3 24815 25301 27179 +3 24815 27179 26721 +3 24816 27218 27819 +3 24816 27819 25522 +3 24817 25523 27820 +3 24817 27820 27219 +3 24818 26322 31143 +3 24818 31143 30088 +3 24819 30089 31144 +3 24819 31144 26323 +3 24820 25089 25183 +3 24820 25183 24931 +3 24821 24932 25184 +3 24821 25184 25090 +3 24822 25044 25149 +3 24822 25149 24933 +3 24823 24933 25150 +3 24823 25150 25045 +3 24824 26097 29190 +3 24824 29190 27992 +3 24825 27993 29191 +3 24825 29191 26098 +3 24826 25075 25139 +3 24826 25139 24894 +3 24827 24895 25140 +3 24827 25140 25076 +3 24828 28186 29441 +3 24828 29441 26117 +3 24829 26118 29442 +3 24829 29442 28187 +3 24830 25798 26566 +3 24830 26566 25724 +3 24831 25725 26567 +3 24831 26567 25799 +3 24832 25095 25159 +3 24832 25159 24910 +3 24833 24911 25160 +3 24833 25160 25096 +3 24834 25478 26260 +3 24834 26260 25528 +3 24835 25529 26261 +3 24835 26261 25479 +3 24836 25672 25924 +3 24836 25924 25034 +3 24837 25035 25925 +3 24837 25925 25673 +3 24838 25225 25598 +3 24838 25598 25239 +3 24839 25240 25641 +3 24839 25641 25226 +3 24840 25036 25199 +3 24840 25199 25030 +3 24841 25031 25200 +3 24841 25200 25037 +3 24842 25087 25175 +3 24842 25175 24958 +3 24843 24959 25176 +3 24843 25176 25088 +3 24844 25125 25217 +3 24844 25217 24962 +3 24845 24963 25218 +3 24845 25218 25126 +3 24846 29875 30944 +3 24846 30944 26284 +3 24847 26285 30945 +3 24847 30945 29876 +3 24848 26866 31575 +3 24848 31575 30105 +3 24849 30106 31576 +3 24849 31576 26867 +3 24850 25006 25498 +3 24850 25498 25344 +3 24851 25345 25499 +3 24851 25499 25007 +3 24852 25181 25534 +3 24852 25534 25197 +3 24853 25198 25535 +3 24853 25535 25182 +3 24854 25137 26272 +3 24854 26272 26005 +3 24855 26006 26273 +3 24855 26273 25138 +3 24856 25030 25229 +3 24856 25229 25067 +3 24857 25068 25230 +3 24857 25230 25031 +3 24858 25528 26288 +3 24858 26288 25562 +3 24859 25563 26289 +3 24859 26289 25529 +3 24860 24988 25512 +3 24860 25512 25181 +3 24861 25182 25513 +3 24861 25513 24989 +3 24862 25079 25666 +3 24862 25666 25366 +3 24863 25367 25667 +3 24863 25667 25080 +3 24864 26764 27433 +3 24864 27433 25613 +3 24865 25613 27434 +3 24865 27434 26765 +3 24866 26774 31534 +3 24866 31534 30157 +3 24867 30158 31535 +3 24867 31535 26775 +3 24868 25091 25241 +3 24868 25241 25036 +3 24869 25037 25242 +3 24869 25242 25092 +3 24870 25842 26610 +3 24870 26610 25798 +3 24871 25799 26611 +3 24871 26611 25843 +3 24872 26085 29143 +3 24872 29143 27974 +3 24873 27975 29144 +3 24873 29144 26086 +3 24874 25197 25558 +3 24874 25558 25213 +3 24875 25214 25559 +3 24875 25559 25198 +3 24876 25778 26049 +3 24876 26049 25163 +3 24877 25164 26050 +3 24877 26050 25779 +3 24878 27803 28902 +3 24878 28902 26059 +3 24879 26060 28903 +3 24879 28903 27804 +3 24880 25147 25245 +3 24880 25245 24994 +3 24881 24995 25246 +3 24881 25246 25148 +3 24882 25562 26320 +3 24882 26320 25596 +3 24883 25643 26321 +3 24883 26321 25563 +3 24884 26248 30714 +3 24884 30714 29647 +3 24885 29648 30715 +3 24885 30715 26249 +3 24886 29895 31325 +3 24886 31325 26800 +3 24887 26801 31326 +3 24887 31326 29896 +3 24888 25213 25574 +3 24888 25574 25225 +3 24889 25226 25575 +3 24889 25575 25214 +3 24890 25780 26075 +3 24890 26075 25189 +3 24891 25190 26076 +3 24891 26076 25781 +3 24892 26750 27425 +3 24892 27425 25702 +3 24893 25703 27426 +3 24893 27426 26751 +3 24894 25139 25205 +3 24894 25205 24970 +3 24895 24971 25206 +3 24895 25206 25140 +3 24896 25057 25207 +3 24896 25207 25059 +3 24897 25060 25208 +3 24897 25208 25058 +3 24898 25053 25572 +3 24898 25572 25392 +3 24899 25393 25573 +3 24899 25573 25054 +3 24900 25788 25995 +3 24900 25995 25111 +3 24901 25112 25996 +3 24901 25996 25789 +3 24902 25161 25252 +3 24902 25252 25000 +3 24903 25001 25253 +3 24903 25253 25162 +3 24904 25067 25223 +3 24904 25223 25057 +3 24905 25058 25224 +3 24905 25224 25068 +3 24906 26294 26760 +3 24906 26760 25378 +3 24907 25379 26761 +3 24907 26761 26295 +3 24908 25530 27569 +3 24908 27569 27027 +3 24909 27028 27570 +3 24909 27570 25531 +3 24910 25159 25231 +3 24910 25231 24986 +3 24911 24987 25232 +3 24911 25232 25160 +3 24912 25059 25215 +3 24912 25215 24964 +3 24913 24965 25216 +3 24913 25216 25060 +3 24914 29945 31280 +3 24914 31280 26728 +3 24915 26729 31281 +3 24915 31281 29946 +3 24916 26420 30993 +3 24916 30993 28387 +3 24917 28388 30994 +3 24917 30994 26421 +3 24918 25596 26356 +3 24918 26356 25676 +3 24919 25677 26357 +3 24919 26357 25643 +3 24920 25239 25664 +3 24920 25664 25258 +3 24921 25259 25665 +3 24921 25665 25240 +3 24922 25336 26959 +3 24922 26959 26560 +3 24923 26561 26960 +3 24923 26960 25337 +3 24924 25127 25736 +3 24924 25736 25434 +3 24925 25435 25737 +3 24925 25737 25128 +3 24926 25318 26456 +3 24926 26456 26069 +3 24927 26070 26457 +3 24927 26457 25319 +3 24928 25355 25618 +3 24928 25618 25354 +3 24929 25101 25256 +3 24929 25256 25091 +3 24930 25092 25257 +3 24930 25257 25102 +3 24931 25183 25282 +3 24931 25282 25024 +3 24932 25025 25283 +3 24932 25283 25184 +3 24933 25149 25249 +3 24933 25249 25150 +3 24934 26756 31071 +3 24934 31071 29659 +3 24935 29660 31072 +3 24935 31072 26757 +3 24936 25119 25730 +3 24936 25730 25446 +3 24937 25447 25731 +3 24937 25731 25120 +3 24938 29426 30508 +3 24938 30508 26224 +3 24939 26225 30509 +3 24939 30509 29427 +3 24940 25332 26452 +3 24940 26452 26053 +3 24941 26054 26453 +3 24941 26453 25333 +3 24942 25258 25680 +3 24942 25680 25274 +3 24943 25275 25681 +3 24943 25681 25259 +3 24944 26332 26768 +3 24944 26768 25384 +3 24945 25385 26769 +3 24945 26769 26333 +3 24946 27791 28878 +3 24946 28878 26051 +3 24947 26052 28879 +3 24947 28879 27792 +3 24948 25117 25264 +3 24948 25264 25101 +3 24949 25102 25265 +3 24949 25265 25118 +3 24950 25676 26380 +3 24950 26380 25710 +3 24951 25711 26381 +3 24951 26381 25677 +3 24952 26668 31046 +3 24952 31046 29713 +3 24953 29714 31047 +3 24953 31047 26669 +3 24954 28251 30818 +3 24954 30818 26392 +3 24955 26393 30819 +3 24955 30819 28252 +3 24956 26035 28593 +3 24956 28593 27589 +3 24957 27590 28594 +3 24957 28594 26036 +3 24958 25175 25276 +3 24958 25276 25044 +3 24959 25045 25277 +3 24959 25277 25176 +3 24960 25274 25704 +3 24960 25704 25296 +3 24961 25297 25705 +3 24961 25705 25275 +3 24962 25217 25320 +3 24962 25320 25075 +3 24963 25076 25321 +3 24963 25321 25218 +3 24964 25215 25278 +3 24964 25278 25018 +3 24965 25019 25279 +3 24965 25279 25216 +3 24966 25233 26384 +3 24966 26384 26101 +3 24967 26102 26385 +3 24967 26385 25234 +3 24968 29443 30856 +3 24968 30856 26694 +3 24969 26695 30857 +3 24969 30857 29444 +3 24970 25205 25288 +3 24970 25288 25117 +3 24971 25118 25289 +3 24971 25289 25206 +3 24972 26196 30305 +3 24972 30305 29218 +3 24973 29219 30306 +3 24973 30306 26197 +3 24974 25614 27169 +3 24974 27169 26596 +3 24975 26597 27170 +3 24975 27170 25614 +3 24976 25866 26141 +3 24976 26141 25272 +3 24977 25273 26142 +3 24977 26142 25867 +3 24978 25710 26404 +3 24978 26404 25760 +3 24979 25761 26405 +3 24979 26405 25711 +3 24980 25171 25804 +3 24980 25804 25502 +3 24981 25503 25805 +3 24981 25805 25172 +3 24982 25852 26135 +3 24982 26135 25284 +3 24983 25285 26136 +3 24983 26136 25853 +3 24984 29495 30829 +3 24984 30829 26606 +3 24985 26607 30830 +3 24985 30830 29496 +3 24986 25231 25308 +3 24986 25308 25061 +3 24987 25062 25309 +3 24987 25309 25232 +3 24988 25129 25740 +3 24988 25740 25512 +3 24989 25513 25741 +3 24989 25741 25130 +3 24990 26354 30603 +3 24990 30603 28099 +3 24991 28100 30604 +3 24991 30604 26355 +3 24992 25173 25792 +3 24992 25792 25508 +3 24993 25509 25793 +3 24993 25793 25174 +3 24994 25245 25338 +3 24994 25338 25089 +3 24995 25090 25339 +3 24995 25339 25246 +3 24996 26862 27321 +3 24996 27321 25536 +3 24997 25537 27322 +3 24997 27322 26863 +3 24998 25504 26083 +3 24998 26083 25470 +3 24999 25471 26084 +3 24999 26084 25505 +3 25000 25252 25334 +3 25000 25334 25087 +3 25001 25088 25335 +3 25001 25335 25253 +3 25002 25696 27157 +3 25002 27157 26586 +3 25003 26587 27158 +3 25003 27158 25697 +3 25004 26019 28559 +3 25004 28559 27573 +3 25005 27574 28560 +3 25005 28560 26020 +3 25006 25296 25726 +3 25006 25726 25498 +3 25007 25499 25727 +3 25007 25727 25297 +3 25008 26638 30619 +3 25008 30619 29237 +3 25009 29238 30620 +3 25009 30620 26639 +3 25010 28986 30033 +3 25010 30033 26157 +3 25011 26158 30034 +3 25011 30034 28987 +3 25012 27399 28282 +3 25012 28282 25988 +3 25013 25989 28283 +3 25013 28283 27400 +3 25014 27948 30387 +3 25014 30387 26300 +3 25015 26301 30388 +3 25015 30388 27949 +3 25016 26556 30587 +3 25016 30587 29267 +3 25017 29268 30588 +3 25017 30588 26557 +3 25018 25278 25340 +3 25018 25340 25095 +3 25019 25096 25341 +3 25019 25341 25279 +3 25020 25540 26105 +3 25020 26105 25504 +3 25021 25505 26106 +3 25021 26106 25541 +3 25022 25760 26442 +3 25022 26442 25812 +3 25023 25813 26443 +3 25023 26443 25761 +3 25024 25282 25358 +3 25024 25358 25125 +3 25025 25126 25359 +3 25025 25359 25283 +3 25026 26430 26758 +3 25026 26758 25370 +3 25027 25371 26759 +3 25027 26759 26431 +3 25028 25414 26544 +3 25028 26544 26173 +3 25029 26174 26545 +3 25029 26545 25415 +3 25030 25199 25388 +3 25030 25388 25229 +3 25031 25230 25389 +3 25031 25389 25200 +3 25032 29006 30385 +3 25032 30385 26572 +3 25033 26573 30386 +3 25033 30386 29007 +3 25034 25924 26127 +3 25034 26127 25243 +3 25035 25244 26128 +3 25035 26128 25925 +3 25036 25241 25398 +3 25036 25398 25199 +3 25037 25200 25399 +3 25037 25399 25242 +3 25038 25568 26133 +3 25038 26133 25540 +3 25039 25541 26134 +3 25039 26134 25569 +3 25040 26125 29743 +3 25040 29743 28760 +3 25041 28761 29744 +3 25041 29744 26126 +3 25042 26266 30169 +3 25042 30169 27821 +3 25043 27822 30170 +3 25043 30170 26267 +3 25044 25276 25356 +3 25044 25356 25149 +3 25045 25150 25357 +3 25045 25357 25277 +3 25046 25052 25305 +3 25046 25304 25051 +3 25046 25305 25304 +3 25047 25247 25884 +3 25047 25621 25048 +3 25047 25884 25621 +3 25048 25621 25885 +3 25048 25885 25248 +3 25049 29052 30375 +3 25049 30375 26508 +3 25050 26509 30376 +3 25050 30376 29053 +3 25051 25304 25400 +3 25051 25400 25147 +3 25052 25148 25401 +3 25052 25401 25305 +3 25053 25254 25872 +3 25053 25872 25572 +3 25054 25573 25873 +3 25054 25873 25255 +3 25055 27381 28263 +3 25055 28263 25978 +3 25056 25979 28264 +3 25056 28264 27382 +3 25057 25223 25374 +3 25057 25374 25207 +3 25058 25208 25375 +3 25058 25375 25224 +3 25059 25207 25362 +3 25059 25362 25215 +3 25060 25216 25363 +3 25060 25363 25208 +3 25061 25308 25402 +3 25061 25402 25161 +3 25062 25162 25403 +3 25062 25403 25309 +3 25063 25597 26155 +3 25063 26155 25568 +3 25064 25569 26156 +3 25064 26156 25642 +3 25065 25420 26550 +3 25065 26550 26210 +3 25066 26211 26551 +3 25066 26551 25421 +3 25067 25229 25382 +3 25067 25382 25223 +3 25068 25224 25383 +3 25068 25383 25230 +3 25069 25542 27089 +3 25069 27089 26708 +3 25070 26709 27090 +3 25070 27090 25543 +3 25071 26516 30122 +3 25071 30122 28780 +3 25072 28781 30123 +3 25072 30123 26517 +3 25073 26466 26925 +3 25073 26925 25615 +3 25074 25615 26926 +3 25074 26926 26467 +3 25075 25320 25380 +3 25075 25380 25139 +3 25076 25140 25381 +3 25076 25381 25321 +3 25077 25948 27984 +3 25077 27984 27204 +3 25078 27205 27985 +3 25078 27985 25949 +3 25079 25209 25846 +3 25079 25846 25666 +3 25080 25667 25847 +3 25080 25847 25210 +3 25081 27687 29897 +3 25081 29897 26228 +3 25082 26229 29898 +3 25082 29898 27688 +3 25083 25670 26175 +3 25083 26175 25597 +3 25084 25642 26176 +3 25084 26176 25671 +3 25085 28529 29449 +3 25085 29449 26095 +3 25086 26096 29450 +3 25086 29450 28530 +3 25087 25334 25424 +3 25087 25424 25175 +3 25088 25176 25425 +3 25088 25425 25335 +3 25089 25338 25432 +3 25089 25432 25183 +3 25090 25184 25433 +3 25090 25433 25339 +3 25091 25256 25404 +3 25091 25404 25241 +3 25092 25242 25405 +3 25092 25405 25257 +3 25093 26462 30082 +3 25093 30082 28827 +3 25094 28828 30083 +3 25094 30083 26463 +3 25095 25340 25408 +3 25095 25408 25159 +3 25096 25160 25409 +3 25096 25409 25341 +3 25097 25966 26262 +3 25097 26262 25372 +3 25098 25373 26263 +3 25098 26263 25967 +3 25099 26454 26921 +3 25099 26921 25684 +3 25100 25685 26922 +3 25100 26922 26455 +3 25101 25264 25412 +3 25101 25412 25256 +3 25102 25257 25413 +3 25102 25413 25265 +3 25103 25954 26256 +3 25103 26256 25386 +3 25104 25387 26257 +3 25104 26257 25955 +3 25105 25698 26200 +3 25105 26200 25670 +3 25106 25671 26201 +3 25106 26201 25699 +3 25107 28387 31347 +3 25107 31347 28597 +3 25108 28598 31348 +3 25108 31348 28388 +3 25109 28545 29814 +3 25109 29814 26468 +3 25110 26469 29815 +3 25110 29815 28546 +3 25111 25995 26204 +3 25111 26204 25314 +3 25112 25315 26205 +3 25112 26205 25996 +3 25113 26198 29610 +3 25113 29610 27533 +3 25114 27534 29611 +3 25114 29611 26199 +3 25115 25944 27950 +3 25115 27950 27189 +3 25116 27190 27951 +3 25116 27951 25945 +3 25117 25288 25422 +3 25117 25422 25264 +3 25118 25265 25423 +3 25118 25423 25289 +3 25119 25298 25926 +3 25119 25926 25730 +3 25120 25731 25927 +3 25120 25927 25299 +3 25121 28585 29773 +3 25121 29773 26410 +3 25122 26411 29774 +3 25122 29774 28586 +3 25123 26061 29149 +3 25123 29149 28306 +3 25124 28307 29150 +3 25124 29150 26062 +3 25125 25358 25472 +3 25125 25472 25217 +3 25126 25218 25473 +3 25126 25473 25359 +3 25127 25312 25940 +3 25127 25940 25736 +3 25128 25737 25941 +3 25128 25941 25313 +3 25129 25266 25894 +3 25129 25894 25740 +3 25130 25741 25895 +3 25130 25895 25267 +3 25131 28433 31125 +3 25131 31125 28251 +3 25132 28252 31126 +3 25132 31126 28434 +3 25133 25734 26218 +3 25133 26218 25698 +3 25134 25699 26219 +3 25134 26219 25735 +3 25135 27005 27689 +3 25135 27689 25922 +3 25136 25923 27690 +3 25136 27690 27006 +3 25137 25410 26540 +3 25137 26540 26272 +3 25138 26273 26541 +3 25138 26541 25411 +3 25139 25380 25456 +3 25139 25456 25205 +3 25140 25206 25457 +3 25140 25457 25381 +3 25141 26414 29485 +3 25141 29485 28318 +3 25142 28319 29486 +3 25142 29486 26415 +3 25143 27413 29337 +3 25143 29337 26153 +3 25144 26154 29338 +3 25144 29338 27414 +3 25145 28099 30916 +3 25145 30916 28286 +3 25146 28287 30917 +3 25146 30917 28100 +3 25147 25400 25518 +3 25147 25518 25245 +3 25148 25246 25519 +3 25148 25519 25401 +3 25149 25356 25468 +3 25149 25468 25249 +3 25150 25249 25469 +3 25150 25469 25357 +3 25151 26530 26846 +3 25151 26846 25554 +3 25152 25555 26847 +3 25152 26847 26531 +3 25153 26366 29457 +3 25153 29457 28351 +3 25154 28352 29458 +3 25154 29458 26367 +3 25155 25768 26240 +3 25155 26240 25734 +3 25156 25735 26241 +3 25156 26241 25769 +3 25157 28071 28884 +3 25157 28884 26037 +3 25158 26038 28885 +3 25158 28885 28072 +3 25159 25408 25488 +3 25159 25488 25231 +3 25160 25232 25489 +3 25160 25489 25409 +3 25161 25402 25524 +3 25161 25524 25252 +3 25162 25253 25525 +3 25162 25525 25403 +3 25163 26049 26348 +3 25163 26348 25458 +3 25164 25459 26349 +3 25164 26349 26050 +3 25165 26997 27671 +3 25165 27671 25914 +3 25166 25915 27672 +3 25166 27672 26998 +3 25167 28129 30679 +3 25167 30679 27948 +3 25168 27949 30680 +3 25168 30680 28130 +3 25169 25616 26682 +3 25169 26682 26312 +3 25170 26313 26683 +3 25170 26683 25616 +3 25171 25354 25991 +3 25171 25991 25804 +3 25172 25805 25992 +3 25172 25992 25355 +3 25173 25366 25984 +3 25173 25984 25792 +3 25174 25793 25985 +3 25174 25985 25367 +3 25175 25424 25548 +3 25175 25548 25276 +3 25176 25277 25549 +3 25176 25549 25425 +3 25177 26115 29062 +3 25177 29062 27269 +3 25178 27270 29063 +3 25178 29063 26116 +3 25179 28085 29168 +3 25179 29168 26360 +3 25180 26361 29169 +3 25180 29169 28086 +3 25181 25512 25942 +3 25181 25942 25534 +3 25182 25535 25943 +3 25182 25943 25513 +3 25183 25432 25550 +3 25183 25550 25282 +3 25184 25283 25551 +3 25184 25551 25433 +3 25185 25678 26672 +3 25185 26672 26298 +3 25186 26299 26673 +3 25186 26673 25679 +3 25187 28109 29137 +3 25187 29137 26292 +3 25188 26293 29138 +3 25188 29138 28110 +3 25189 26075 26362 +3 25189 26362 25460 +3 25190 25461 26363 +3 25190 26363 26076 +3 25191 27821 30456 +3 25191 30456 27986 +3 25192 27987 30457 +3 25192 30457 27822 +3 25193 26001 28565 +3 25193 28565 27851 +3 25194 27852 28566 +3 25194 28566 26002 +3 25195 25892 27389 +3 25195 27389 26824 +3 25196 26825 27390 +3 25196 27390 25893 +3 25197 25534 25964 +3 25197 25964 25558 +3 25198 25559 25965 +3 25198 25965 25535 +3 25199 25398 25599 +3 25199 25599 25388 +3 25200 25389 25640 +3 25200 25640 25399 +3 25201 27129 28756 +3 25201 28756 26081 +3 25202 26082 28757 +3 25202 28757 27130 +3 25203 26282 28870 +3 25203 28870 27857 +3 25204 27858 28871 +3 25204 28871 26283 +3 25205 25456 25544 +3 25205 25544 25288 +3 25206 25289 25545 +3 25206 25545 25457 +3 25207 25374 25564 +3 25207 25564 25362 +3 25208 25363 25565 +3 25208 25565 25375 +3 25209 25344 25972 +3 25209 25972 25846 +3 25210 25847 25973 +3 25210 25973 25345 +3 25211 27835 30225 +3 25211 30225 27687 +3 25212 27688 30226 +3 25212 30226 27836 +3 25213 25558 25980 +3 25213 25980 25574 +3 25214 25575 25981 +3 25214 25981 25559 +3 25215 25362 25552 +3 25215 25552 25278 +3 25216 25279 25553 +3 25216 25553 25363 +3 25217 25472 25662 +3 25217 25662 25320 +3 25218 25321 25663 +3 25218 25663 25473 +3 25219 26234 28843 +3 25219 28843 27882 +3 25220 27883 28844 +3 25220 28844 26235 +3 25221 25888 27361 +3 25221 27361 26810 +3 25222 26811 27362 +3 25222 27362 25889 +3 25223 25382 25570 +3 25223 25570 25374 +3 25224 25375 25571 +3 25224 25571 25383 +3 25225 25574 25999 +3 25225 25999 25598 +3 25226 25641 26000 +3 25226 26000 25575 +3 25227 27617 28266 +3 25227 28266 25958 +3 25228 25959 28267 +3 25228 28267 27618 +3 25229 25388 25578 +3 25229 25578 25382 +3 25230 25383 25579 +3 25230 25579 25389 +3 25231 25488 25576 +3 25231 25576 25308 +3 25232 25309 25577 +3 25232 25577 25489 +3 25233 25560 26624 +3 25233 26624 26384 +3 25234 26385 26625 +3 25234 26625 25561 +3 25235 27533 29939 +3 25235 29939 27693 +3 25236 27694 29940 +3 25236 29940 27534 +3 25237 26045 28457 +3 25237 28457 26999 +3 25238 27000 28458 +3 25238 28458 26046 +3 25239 25598 26013 +3 25239 26013 25664 +3 25240 25665 26014 +3 25240 26014 25641 +3 25241 25404 25660 +3 25241 25660 25398 +3 25242 25399 25661 +3 25242 25661 25405 +3 25243 26127 26338 +3 25243 26338 25450 +3 25244 25451 26339 +3 25244 26339 26128 +3 25245 25518 25690 +3 25245 25690 25338 +3 25246 25339 25691 +3 25246 25691 25519 +3 25247 25434 26067 +3 25247 26067 25884 +3 25248 25885 26068 +3 25248 26068 25435 +3 25249 25468 25619 +3 25249 25619 25469 +3 25250 27629 28513 +3 25250 28513 26226 +3 25251 26227 28514 +3 25251 28514 27630 +3 25252 25524 25688 +3 25252 25688 25334 +3 25253 25335 25689 +3 25253 25689 25525 +3 25254 25446 26065 +3 25254 26065 25872 +3 25255 25873 26066 +3 25255 26066 25447 +3 25256 25412 25668 +3 25256 25668 25404 +3 25257 25405 25669 +3 25257 25669 25413 +3 25258 25664 26025 +3 25258 26025 25680 +3 25259 25681 26026 +3 25259 26026 25665 +3 25260 27661 28493 +3 25260 28493 26183 +3 25261 26184 28494 +3 25261 28494 27662 +3 25262 26634 27095 +3 25262 27095 25860 +3 25263 25861 27096 +3 25263 27096 26635 +3 25264 25422 25674 +3 25264 25674 25412 +3 25265 25413 25675 +3 25265 25675 25423 +3 25266 25392 26029 +3 25266 26029 25894 +3 25267 25895 26030 +3 25267 26030 25393 +3 25268 27518 29629 +3 25268 29629 27413 +3 25269 27414 29630 +3 25269 29630 27519 +3 25270 25936 27958 +3 25270 27958 27405 +3 25271 27406 27959 +3 25271 27959 25937 +3 25272 26141 26444 +3 25272 26444 25617 +3 25273 25617 26445 +3 25273 26445 26142 +3 25274 25680 26041 +3 25274 26041 25704 +3 25275 25705 26042 +3 25275 26042 25681 +3 25276 25548 25720 +3 25276 25720 25356 +3 25277 25357 25721 +3 25277 25721 25549 +3 25278 25552 25694 +3 25278 25694 25340 +3 25279 25341 25695 +3 25279 25695 25553 +3 25280 26868 28184 +3 25280 28184 26011 +3 25281 26012 28185 +3 25281 28185 26869 +3 25282 25550 25714 +3 25282 25714 25358 +3 25283 25359 25715 +3 25283 25715 25551 +3 25284 26135 26438 +3 25284 26438 25672 +3 25285 25673 26439 +3 25285 26439 26136 +3 25286 26626 27079 +3 25286 27079 25854 +3 25287 25855 27080 +3 25287 27080 26627 +3 25288 25544 25686 +3 25288 25686 25422 +3 25289 25423 25687 +3 25289 25687 25545 +3 25290 26161 28202 +3 25290 28202 27417 +3 25291 27418 28203 +3 25291 28203 26162 +3 25292 27269 29333 +3 25292 29333 27391 +3 25293 27392 29334 +3 25293 29334 27270 +3 25294 26123 28172 +3 25294 28172 27431 +3 25295 27432 28173 +3 25295 28173 26124 +3 25296 25704 26057 +3 25296 26057 25726 +3 25297 25727 26058 +3 25297 26058 25705 +3 25298 25502 26111 +3 25298 26111 25926 +3 25299 25927 26112 +3 25299 26112 25503 +3 25300 27178 27681 +3 25300 27681 25908 +3 25301 25909 27682 +3 25301 27682 27179 +3 25302 25968 27888 +3 25302 27888 26746 +3 25303 26747 27889 +3 25303 27889 25969 +3 25304 25305 25620 +3 25304 25620 25770 +3 25304 25770 25400 +3 25305 25401 25771 +3 25305 25771 25620 +3 25306 27245 29038 +3 25306 29038 27129 +3 25307 27130 29039 +3 25307 29039 27246 +3 25308 25576 25766 +3 25308 25766 25402 +3 25309 25403 25767 +3 25309 25767 25577 +3 25310 28597 31468 +3 25310 31468 28758 +3 25311 28759 31469 +3 25311 31469 28598 +3 25312 25508 26119 +3 25312 26119 25940 +3 25313 25941 26120 +3 25313 26120 25509 +3 25314 26204 26402 +3 25314 26402 25566 +3 25315 25567 26403 +3 25315 26403 26205 +3 25316 27184 27868 +3 25316 27868 26103 +3 25317 26104 27869 +3 25317 27869 27185 +3 25318 25824 26820 +3 25318 26820 26456 +3 25319 26457 26821 +3 25319 26821 25825 +3 25320 25662 25750 +3 25320 25750 25380 +3 25321 25381 25751 +3 25321 25751 25663 +3 25322 28614 31238 +3 25322 31238 28433 +3 25323 28434 31239 +3 25323 31239 28615 +3 25324 27214 27847 +3 25324 27847 26073 +3 25325 26074 27848 +3 25325 27848 27215 +3 25326 26999 28702 +3 25326 28702 27097 +3 25327 27098 28703 +3 25327 28703 27000 +3 25328 28286 30985 +3 25328 30985 28437 +3 25329 28438 30986 +3 25329 30986 28287 +3 25330 26600 27601 +3 25330 27601 25938 +3 25331 25939 27602 +3 25331 27602 26601 +3 25332 25818 26796 +3 25332 26796 26452 +3 25333 26453 26797 +3 25333 26797 25819 +3 25334 25688 25806 +3 25334 25806 25424 +3 25335 25425 25807 +3 25335 25807 25689 +3 25336 25878 27365 +3 25336 27365 26959 +3 25337 26960 27366 +3 25337 27366 25879 +3 25338 25690 25814 +3 25338 25814 25432 +3 25339 25433 25815 +3 25339 25815 25691 +3 25340 25694 25782 +3 25340 25782 25408 +3 25341 25409 25783 +3 25341 25783 25695 +3 25342 28280 30784 +3 25342 30784 28129 +3 25343 28130 30785 +3 25343 30785 28281 +3 25344 25498 26109 +3 25344 26109 25972 +3 25345 25973 26110 +3 25345 26110 25499 +3 25346 26043 27529 +3 25346 27529 26969 +3 25347 26970 27530 +3 25347 27530 26044 +3 25348 26945 28401 +3 25348 28401 26868 +3 25349 26869 28402 +3 25349 28402 26946 +3 25350 26017 27510 +3 25350 27510 26985 +3 25351 26986 27511 +3 25351 27511 26018 +3 25352 27986 30548 +3 25352 30548 28113 +3 25353 28114 30549 +3 25353 30549 27987 +3 25354 25618 26191 +3 25354 26191 25991 +3 25355 25992 26192 +3 25355 26192 25618 +3 25356 25720 25838 +3 25356 25838 25468 +3 25357 25469 25839 +3 25357 25839 25721 +3 25358 25714 25836 +3 25358 25836 25472 +3 25359 25473 25837 +3 25359 25837 25715 +3 25360 25902 27319 +3 25360 27319 26484 +3 25361 26485 27320 +3 25361 27320 25903 +3 25362 25564 25816 +3 25362 25816 25552 +3 25363 25553 25817 +3 25363 25817 25565 +3 25364 27952 30333 +3 25364 30333 27835 +3 25365 27836 30334 +3 25365 30334 27953 +3 25366 25666 26185 +3 25366 26185 25984 +3 25367 25985 26186 +3 25367 26186 25667 +3 25368 26746 28075 +3 25368 28075 26822 +3 25369 26823 28076 +3 25369 28076 26747 +3 25370 26758 27087 +3 25370 27087 25842 +3 25371 25843 27088 +3 25371 27088 26759 +3 25372 26262 26532 +3 25372 26532 25780 +3 25373 25781 26533 +3 25373 26533 26263 +3 25374 25570 25826 +3 25374 25826 25564 +3 25375 25565 25827 +3 25375 25827 25571 +3 25376 27693 30039 +3 25376 30039 27811 +3 25377 27812 30040 +3 25377 30040 27694 +3 25378 26760 27233 +3 25378 27233 25976 +3 25379 25977 27234 +3 25379 27234 26761 +3 25380 25750 25830 +3 25380 25830 25456 +3 25381 25457 25831 +3 25381 25831 25751 +3 25382 25578 25834 +3 25382 25834 25570 +3 25383 25571 25835 +3 25383 25835 25579 +3 25384 26768 27224 +3 25384 27224 25952 +3 25385 25953 27225 +3 25385 27225 26769 +3 25386 26256 26524 +3 25386 26524 25778 +3 25387 25779 26525 +3 25387 26525 26257 +3 25388 25599 25840 +3 25388 25840 25578 +3 25389 25579 25841 +3 25389 25841 25640 +3 25390 27649 29719 +3 25390 29719 27518 +3 25391 27519 29720 +3 25391 29720 27650 +3 25392 25572 26159 +3 25392 26159 26029 +3 25393 26030 26160 +3 25393 26160 25573 +3 25394 26676 27780 +3 25394 27780 26600 +3 25395 26601 27781 +3 25395 27781 26677 +3 25396 26368 27037 +3 25396 27037 25868 +3 25397 25869 27038 +3 25397 27038 26369 +3 25398 25660 25850 +3 25398 25850 25599 +3 25399 25640 25851 +3 25399 25851 25661 +3 25400 25770 25882 +3 25400 25882 25518 +3 25401 25519 25883 +3 25401 25883 25771 +3 25402 25766 25880 +3 25402 25880 25524 +3 25403 25525 25881 +3 25403 25881 25767 +3 25404 25668 25856 +3 25404 25856 25660 +3 25405 25661 25857 +3 25405 25857 25669 +3 25406 27391 29416 +3 25406 29416 27482 +3 25407 27483 29417 +3 25407 29417 27392 +3 25408 25782 25858 +3 25408 25858 25488 +3 25409 25489 25859 +3 25409 25859 25783 +3 25410 25812 26798 +3 25410 26798 26540 +3 25411 26541 26799 +3 25411 26799 25813 +3 25412 25674 25864 +3 25412 25864 25668 +3 25413 25669 25865 +3 25413 25865 25675 +3 25414 25920 26915 +3 25414 26915 26544 +3 25415 26545 26916 +3 25415 26916 25921 +3 25416 27327 29097 +3 25416 29097 27245 +3 25417 27246 29098 +3 25417 29098 27328 +3 25418 26484 27465 +3 25418 27465 26534 +3 25419 26535 27466 +3 25419 27466 26485 +3 25420 25906 26901 +3 25420 26901 26550 +3 25421 26551 26902 +3 25421 26902 25907 +3 25422 25686 25876 +3 25422 25876 25674 +3 25423 25675 25877 +3 25423 25877 25687 +3 25424 25806 25900 +3 25424 25900 25548 +3 25425 25549 25901 +3 25425 25901 25807 +3 25426 25828 26772 +3 25426 26772 26216 +3 25427 26217 26773 +3 25427 26773 25829 +3 25428 27097 28794 +3 25428 28794 27176 +3 25429 27177 28795 +3 25429 28795 27098 +3 25430 27516 31939 +3 25430 31939 30444 +3 25431 30445 31940 +3 25431 31940 27517 +3 25432 25814 25904 +3 25432 25904 25550 +3 25433 25551 25905 +3 25433 25905 25815 +3 25434 25736 26258 +3 25434 26258 26067 +3 25435 26068 26259 +3 25435 26259 25737 +3 25436 30266 31680 +3 25436 31680 27449 +3 25437 27450 31681 +3 25437 31681 30267 +3 25438 28758 31616 +3 25438 31616 28908 +3 25439 28909 31617 +3 25439 31617 28759 +3 25440 26408 27149 +3 25440 27149 26368 +3 25441 26369 27150 +3 25441 27150 26409 +3 25442 27025 28451 +3 25442 28451 26945 +3 25443 26946 28452 +3 25443 28452 27026 +3 25444 27331 31440 +3 25444 31440 30037 +3 25445 30038 31441 +3 25445 31441 27332 +3 25446 25730 26246 +3 25446 26246 26065 +3 25447 26066 26247 +3 25447 26247 25731 +3 25448 28718 31365 +3 25448 31365 28614 +3 25449 28615 31366 +3 25449 31366 28719 +3 25450 26338 26526 +3 25450 26526 25768 +3 25451 25769 26527 +3 25451 26527 26339 +3 25452 29803 31191 +3 25452 31191 27255 +3 25453 27256 31192 +3 25453 31192 29804 +3 25454 28437 31127 +3 25454 31127 28561 +3 25455 28562 31128 +3 25455 31128 28438 +3 25456 25830 25898 +3 25456 25898 25544 +3 25457 25545 25899 +3 25457 25899 25831 +3 25458 26348 26598 +3 25458 26598 25866 +3 25459 25867 26599 +3 25459 26599 26349 +3 25460 26362 26590 +3 25460 26590 25852 +3 25461 25853 26591 +3 25461 26591 26363 +3 25462 26822 28137 +3 25462 28137 26876 +3 25463 26877 28138 +3 25463 28138 26823 +3 25464 27147 30938 +3 25464 30938 29557 +3 25465 29558 30939 +3 25465 30939 27148 +3 25466 28403 30902 +3 25466 30902 28280 +3 25467 28281 30903 +3 25467 30903 28404 +3 25468 25838 25934 +3 25468 25934 25619 +3 25469 25619 25935 +3 25469 25935 25839 +3 25470 26083 26506 +3 25470 26506 25788 +3 25471 25789 26507 +3 25471 26507 26084 +3 25472 25836 25930 +3 25472 25930 25662 +3 25473 25663 25931 +3 25473 25931 25837 +3 25474 28113 30649 +3 25474 30649 28239 +3 25475 28240 30650 +3 25475 30650 28114 +3 25476 29315 30675 +3 25476 30675 27055 +3 25477 27056 30676 +3 25477 30676 29316 +3 25478 26216 26852 +3 25478 26852 26260 +3 25479 26261 26853 +3 25479 26853 26217 +3 25480 26742 27823 +3 25480 27823 26676 +3 25481 26677 27824 +3 25481 27824 26743 +3 25482 28053 30413 +3 25482 30413 27952 +3 25483 27953 30414 +3 25483 30414 28054 +3 25484 26967 30423 +3 25484 30423 29079 +3 25485 29080 30424 +3 25485 30424 26968 +3 25486 27811 30171 +3 25486 30171 27900 +3 25487 27901 30172 +3 25487 30172 27812 +3 25488 25858 25918 +3 25488 25918 25576 +3 25489 25577 25919 +3 25489 25919 25859 +3 25490 28841 30143 +3 25490 30143 26874 +3 25491 26875 30144 +3 25491 30144 28842 +3 25492 27748 29860 +3 25492 29860 27649 +3 25493 27650 29861 +3 25493 29861 27749 +3 25494 26534 27496 +3 25494 27496 26578 +3 25495 26579 27497 +3 25495 27497 26535 +3 25496 26780 29816 +3 25496 29816 28573 +3 25497 28574 29817 +3 25497 29817 26781 +3 25498 25726 26250 +3 25498 26250 26109 +3 25499 26110 26251 +3 25499 26251 25727 +3 25500 27482 29531 +3 25500 29531 27565 +3 25501 27566 29532 +3 25501 29532 27483 +3 25502 25804 26314 +3 25502 26314 26111 +3 25503 26112 26315 +3 25503 26315 25805 +3 25504 26105 26568 +3 25504 26568 26083 +3 25505 26084 26569 +3 25505 26569 26106 +3 25506 28330 29465 +3 25506 29465 26702 +3 25507 26703 29466 +3 25507 29466 28331 +3 25508 25792 26302 +3 25508 26302 26119 +3 25509 26120 26303 +3 25509 26303 25793 +3 25510 27409 29212 +3 25510 29212 27327 +3 25511 27328 29213 +3 25511 29213 27410 +3 25512 25740 26232 +3 25512 26232 25942 +3 25513 25943 26233 +3 25513 26233 25741 +3 25514 26448 27192 +3 25514 27192 26408 +3 25515 26409 27193 +3 25515 27193 26449 +3 25516 26593 29109 +3 25516 29109 28063 +3 25517 28064 29110 +3 25517 29110 26594 +3 25518 25882 25962 +3 25518 25962 25690 +3 25519 25691 25963 +3 25519 25963 25883 +3 25520 27176 28898 +3 25520 28898 27249 +3 25521 27250 28899 +3 25521 28899 27177 +3 25522 27819 28770 +3 25522 28770 26514 +3 25523 26515 28771 +3 25523 28771 27820 +3 25524 25880 25956 +3 25524 25956 25688 +3 25525 25689 25957 +3 25525 25957 25881 +3 25526 27081 28553 +3 25526 28553 27025 +3 25527 27026 28554 +3 25527 28554 27082 +3 25528 26260 26888 +3 25528 26888 26288 +3 25529 26289 26889 +3 25529 26889 26261 +3 25530 26432 28417 +3 25530 28417 27569 +3 25531 27570 28418 +3 25531 28418 26433 +3 25532 26876 28228 +3 25532 28228 26931 +3 25533 26932 28229 +3 25533 28229 26877 +3 25534 25942 26278 +3 25534 26278 25964 +3 25535 25965 26279 +3 25535 26279 25943 +3 25536 27321 28042 +3 25536 28042 26346 +3 25537 26347 28043 +3 25537 28043 27322 +3 25538 26776 27890 +3 25538 27890 26742 +3 25539 26743 27891 +3 25539 27891 26777 +3 25540 26133 26582 +3 25540 26582 26105 +3 25541 26106 26583 +3 25541 26583 26134 +3 25542 26236 27720 +3 25542 27720 27089 +3 25543 27090 27721 +3 25543 27721 26237 +3 25544 25898 25960 +3 25544 25960 25686 +3 25545 25687 25961 +3 25545 25961 25899 +3 25546 26578 27557 +3 25546 27557 26622 +3 25547 26623 27558 +3 25547 27558 26579 +3 25548 25900 25993 +3 25548 25993 25720 +3 25549 25721 25994 +3 25549 25994 25901 +3 25550 25904 25986 +3 25550 25986 25714 +3 25551 25715 25987 +3 25551 25987 25905 +3 25552 25816 25950 +3 25552 25950 25694 +3 25553 25695 25951 +3 25553 25951 25817 +3 25554 26846 27345 +3 25554 27345 26139 +3 25555 26140 27346 +3 25555 27346 26847 +3 25556 26474 27243 +3 25556 27243 26448 +3 25557 26449 27244 +3 25557 27244 26475 +3 25558 25964 26296 +3 25558 26296 25980 +3 25559 25981 26297 +3 25559 26297 25965 +3 25560 26053 27013 +3 25560 27013 26624 +3 25561 26625 27014 +3 25561 27014 26054 +3 25562 26288 26927 +3 25562 26927 26320 +3 25563 26321 26928 +3 25563 26928 26289 +3 25564 25826 25974 +3 25564 25974 25816 +3 25565 25817 25975 +3 25565 25975 25827 +3 25566 26402 26688 +3 25566 26688 25954 +3 25567 25955 26689 +3 25567 26689 26403 +3 25568 26155 26616 +3 25568 26616 26133 +3 25569 26134 26617 +3 25569 26617 26156 +3 25570 25834 25982 +3 25570 25982 25826 +3 25571 25827 25983 +3 25571 25983 25835 +3 25572 25872 26376 +3 25572 26376 26159 +3 25573 26160 26377 +3 25573 26377 25873 +3 25574 25980 26318 +3 25574 26318 25999 +3 25575 26000 26319 +3 25575 26319 25981 +3 25576 25918 26021 +3 25576 26021 25766 +3 25577 25767 26022 +3 25577 26022 25919 +3 25578 25840 25997 +3 25578 25997 25834 +3 25579 25835 25998 +3 25579 25998 25841 +3 25580 28908 32162 +3 25580 32162 29026 +3 25581 28861 31905 +3 25581 31905 28718 +3 25582 28561 31646 +3 25582 31646 28668 +3 25583 28495 31379 +3 25583 31379 28403 +3 25584 28239 31109 +3 25584 31109 28336 +3 25585 28151 30858 +3 25585 30858 28053 +3 25586 27900 30589 +3 25586 30589 27978 +3 25587 27815 30345 +3 25587 30345 27748 +3 25588 27565 29997 +3 25588 29997 27639 +3 25589 27473 29637 +3 25589 29637 27409 +3 25590 27249 29281 +3 25590 29281 27309 +3 25591 27133 28916 +3 25591 28916 27081 +3 25592 26931 28541 +3 25592 28541 26979 +3 25593 26814 28174 +3 25593 28174 26776 +3 25594 26622 27807 +3 25594 27807 26656 +3 25595 26500 27439 +3 25595 27439 26474 +3 25596 26320 27071 +3 25596 27071 26356 +3 25597 26175 26738 +3 25597 26738 26155 +3 25598 25999 26400 +3 25598 26400 26013 +3 25599 25850 26039 +3 25599 26039 25840 +3 25600 30648 30647 +3 25601 30472 30473 +3 25602 30285 30284 +3 25603 30041 30042 +3 25604 29794 29793 +3 25605 29527 29528 +3 25606 29273 29272 +3 25607 29028 29029 +3 25608 28747 28746 +3 25609 28477 28478 +3 25610 28227 28226 +3 25611 27944 27945 +3 25612 27707 27706 +3 25613 27433 27434 +3 25614 27170 27169 +3 25615 26925 26926 +3 25616 26683 26682 +3 25617 26444 26445 +3 25618 26192 26191 +3 25619 25934 25935 +3 25620 25771 25990 +3 25620 25990 25770 +3 25621 25884 26311 +3 25621 26311 25885 +3 25622 25967 26595 +3 25622 26595 25966 +3 25623 26069 26912 +3 25623 26912 26070 +3 25624 26166 27230 +3 25624 27230 26165 +3 25625 26264 27526 +3 25625 27526 26265 +3 25626 26375 27863 +3 25626 27863 26374 +3 25627 26458 28199 +3 25627 28199 26459 +3 25628 26539 28510 +3 25628 28510 26538 +3 25629 26642 28867 +3 25629 28867 26643 +3 25630 26737 29163 +3 25630 29163 26736 +3 25631 26826 29484 +3 25631 29484 26827 +3 25632 26924 29811 +3 25632 29811 26923 +3 25633 27009 30117 +3 25633 30117 27010 +3 25634 27106 30384 +3 25634 30384 27105 +3 25635 27210 30618 +3 25635 30618 27211 +3 25636 27306 30851 +3 25636 30851 27305 +3 25637 27403 31070 +3 25637 31070 27404 +3 25638 27489 31312 +3 25638 31312 27488 +3 25639 27597 31574 +3 25639 31574 27598 +3 25640 25841 26040 +3 25640 26040 25851 +3 25641 26014 26401 +3 25641 26401 26000 +3 25642 26156 26739 +3 25642 26739 26176 +3 25643 26357 27072 +3 25643 27072 26321 +3 25644 26475 27440 +3 25644 27440 26501 +3 25645 26657 27808 +3 25645 27808 26623 +3 25646 26777 28175 +3 25646 28175 26815 +3 25647 26980 28542 +3 25647 28542 26932 +3 25648 27082 28917 +3 25648 28917 27134 +3 25649 27310 29282 +3 25649 29282 27250 +3 25650 27410 29638 +3 25650 29638 27474 +3 25651 27640 29998 +3 25651 29998 27566 +3 25652 27749 30346 +3 25652 30346 27816 +3 25653 27979 30590 +3 25653 30590 27901 +3 25654 28054 30859 +3 25654 30859 28152 +3 25655 28337 31110 +3 25655 31110 28240 +3 25656 28404 31380 +3 25656 31380 28496 +3 25657 28669 31647 +3 25657 31647 28562 +3 25658 28719 31906 +3 25658 31906 28862 +3 25659 29027 32163 +3 25659 32163 28909 +3 25660 25856 26009 +3 25660 26009 25850 +3 25661 25851 26010 +3 25661 26010 25857 +3 25662 25930 26007 +3 25662 26007 25750 +3 25663 25751 26008 +3 25663 26008 25931 +3 25664 26013 26350 +3 25664 26350 26025 +3 25665 26026 26351 +3 25665 26351 26014 +3 25666 25846 26340 +3 25666 26340 26185 +3 25667 26186 26341 +3 25667 26341 25847 +3 25668 25864 26015 +3 25668 26015 25856 +3 25669 25857 26016 +3 25669 26016 25865 +3 25670 26200 26654 +3 25670 26654 26175 +3 25671 26176 26655 +3 25671 26655 26201 +3 25672 26438 26648 +3 25672 26648 25924 +3 25673 25925 26649 +3 25673 26649 26439 +3 25674 25876 26031 +3 25674 26031 25864 +3 25675 25865 26032 +3 25675 26032 25877 +3 25676 26356 26971 +3 25676 26971 26380 +3 25677 26381 26972 +3 25677 26972 26357 +3 25678 26005 26961 +3 25678 26961 26672 +3 25679 26673 26962 +3 25679 26962 26006 +3 25680 26025 26364 +3 25680 26364 26041 +3 25681 26042 26365 +3 25681 26365 26026 +3 25682 26522 27301 +3 25682 27301 26500 +3 25683 26501 27302 +3 25683 27302 26523 +3 25684 26921 27287 +3 25684 27287 26087 +3 25685 26088 27288 +3 25685 27288 26922 +3 25686 25960 26023 +3 25686 26023 25876 +3 25687 25877 26024 +3 25687 26024 25961 +3 25688 25956 26055 +3 25688 26055 25806 +3 25689 25807 26056 +3 25689 26056 25957 +3 25690 25962 26063 +3 25690 26063 25814 +3 25691 25815 26064 +3 25691 26064 25963 +3 25692 26656 27633 +3 25692 27633 26696 +3 25693 26697 27634 +3 25693 27634 26657 +3 25694 25950 26033 +3 25694 26033 25782 +3 25695 25783 26034 +3 25695 26034 25951 +3 25696 26169 27619 +3 25696 27619 27157 +3 25697 27158 27620 +3 25697 27620 26170 +3 25698 26218 26664 +3 25698 26664 26200 +3 25699 26201 26665 +3 25699 26665 26219 +3 25700 26850 27970 +3 25700 27970 26814 +3 25701 26815 27971 +3 25701 27971 26851 +3 25702 27425 27954 +3 25702 27954 26242 +3 25703 26243 27955 +3 25703 27955 27426 +3 25704 26041 26386 +3 25704 26386 26057 +3 25705 26058 26387 +3 25705 26387 26042 +3 25706 26979 28320 +3 25706 28320 27021 +3 25707 27022 28323 +3 25707 28323 26980 +3 25708 26330 28308 +3 25708 28308 27683 +3 25709 27684 28309 +3 25709 28309 26331 +3 25710 26380 26987 +3 25710 26987 26404 +3 25711 26405 26988 +3 25711 26988 26381 +3 25712 27194 28664 +3 25712 28664 27133 +3 25713 27134 28665 +3 25713 28665 27195 +3 25714 25986 26077 +3 25714 26077 25836 +3 25715 25837 26078 +3 25715 26078 25987 +3 25716 27920 28656 +3 25716 28656 26422 +3 25717 26423 28657 +3 25717 28657 27921 +3 25718 27309 29016 +3 25718 29016 27359 +3 25719 27360 29017 +3 25719 29017 27310 +3 25720 25993 26091 +3 25720 26091 25838 +3 25721 25839 26092 +3 25721 26092 25994 +3 25722 26488 28988 +3 25722 28988 28210 +3 25723 28211 28989 +3 25723 28989 26489 +3 25724 26566 27317 +3 25724 27317 26522 +3 25725 26523 27318 +3 25725 27318 26567 +3 25726 26057 26378 +3 25726 26378 26250 +3 25727 26251 26379 +3 25727 26379 26058 +3 25728 27531 29347 +3 25728 29347 27473 +3 25729 27474 29348 +3 25729 29348 27532 +3 25730 25926 26434 +3 25730 26434 26246 +3 25731 26247 26435 +3 25731 26435 25927 +3 25732 28445 29325 +3 25732 29325 26564 +3 25733 26565 29326 +3 25733 29326 28446 +3 25734 26240 26712 +3 25734 26712 26218 +3 25735 26219 26713 +3 25735 26713 26241 +3 25736 25940 26450 +3 25736 26450 26258 +3 25737 26259 26451 +3 25737 26451 25941 +3 25738 27639 29665 +3 25738 29665 27728 +3 25739 27729 29666 +3 25739 29666 27640 +3 25740 25894 26388 +3 25740 26388 26232 +3 25741 26233 26389 +3 25741 26389 25895 +3 25742 26646 29649 +3 25742 29649 28714 +3 25743 28715 29650 +3 25743 29650 26647 +3 25744 26696 27663 +3 25744 27663 26748 +3 25745 26749 27664 +3 25745 27664 26697 +3 25746 27898 30007 +3 25746 30007 27815 +3 25747 27816 30008 +3 25747 30008 27899 +3 25748 28984 29992 +3 25748 29992 26726 +3 25749 26727 29993 +3 25749 29993 28985 +3 25750 26007 26079 +3 25750 26079 25830 +3 25751 25831 26080 +3 25751 26080 26008 +3 25752 27978 30323 +3 25752 30323 28069 +3 25753 28070 30324 +3 25753 30324 27979 +3 25754 26790 30299 +3 25754 30299 29251 +3 25755 29252 30300 +3 25755 30300 26791 +3 25756 28257 30558 +3 25756 30558 28151 +3 25757 28152 30559 +3 25757 30559 28258 +3 25758 26919 28004 +3 25758 28004 26850 +3 25759 26851 28005 +3 25759 28005 26920 +3 25760 26404 27031 +3 25760 27031 26442 +3 25761 26443 27032 +3 25761 27032 26405 +3 25762 29503 30538 +3 25762 30538 26872 +3 25763 26873 30539 +3 25763 30539 29504 +3 25764 28336 30798 +3 25764 30798 28427 +3 25765 28428 30801 +3 25765 30801 28337 +3 25766 26021 26113 +3 25766 26113 25880 +3 25767 25881 26114 +3 25767 26114 26022 +3 25768 26526 26692 +3 25768 26692 26240 +3 25769 26241 26693 +3 25769 26693 26527 +3 25770 25990 26089 +3 25770 26089 25882 +3 25771 25883 26090 +3 25771 26090 25990 +3 25772 28628 31036 +3 25772 31036 28495 +3 25773 28496 31037 +3 25773 31037 28629 +3 25774 26949 30788 +3 25774 30788 29751 +3 25775 29752 30789 +3 25775 30789 26950 +3 25776 27021 28353 +3 25776 28353 27091 +3 25777 27092 28354 +3 25777 28354 27022 +3 25778 26524 26782 +3 25778 26782 26049 +3 25779 26050 26783 +3 25779 26783 26525 +3 25780 26532 26802 +3 25780 26802 26075 +3 25781 26076 26803 +3 25781 26803 26533 +3 25782 26033 26099 +3 25782 26099 25858 +3 25783 25859 26100 +3 25783 26100 26034 +3 25784 28668 31286 +3 25784 31286 28796 +3 25785 28797 31287 +3 25785 31287 28669 +3 25786 30017 31007 +3 25786 31007 27029 +3 25787 27030 31008 +3 25787 31008 30018 +3 25788 26506 26714 +3 25788 26714 25995 +3 25789 25996 26715 +3 25789 26715 26507 +3 25790 28958 31554 +3 25790 31554 28861 +3 25791 28862 31555 +3 25791 31555 28959 +3 25792 25984 26472 +3 25792 26472 26302 +3 25793 26303 26473 +3 25793 26473 25985 +3 25794 27113 31270 +3 25794 31270 30247 +3 25795 30248 31271 +3 25795 31271 27114 +3 25796 27275 28698 +3 25796 28698 27194 +3 25797 27195 28699 +3 25797 28699 27276 +3 25798 26610 27383 +3 25798 27383 26566 +3 25799 26567 27384 +3 25799 27384 26611 +3 25800 29026 31781 +3 25800 31781 29139 +3 25801 29140 31782 +3 25801 31782 29027 +3 25802 30440 31528 +3 25802 31528 27200 +3 25803 27201 31529 +3 25803 31529 30441 +3 25804 25991 26496 +3 25804 26496 26314 +3 25805 26315 26497 +3 25805 26497 25992 +3 25806 26055 26149 +3 25806 26149 25900 +3 25807 25901 26150 +3 25807 26150 26056 +3 25808 27279 31751 +3 25808 31751 30625 +3 25809 30626 31752 +3 25809 31752 27280 +3 25810 27359 29058 +3 25810 29058 27463 +3 25811 27464 29059 +3 25811 29059 27360 +3 25812 26442 27019 +3 25812 27019 26798 +3 25813 26799 27020 +3 25813 27020 26443 +3 25814 26063 26151 +3 25814 26151 25904 +3 25815 25905 26152 +3 25815 26152 26064 +3 25816 25974 26121 +3 25816 26121 25950 +3 25817 25951 26122 +3 25817 26122 25975 +3 25818 26173 27151 +3 25818 27151 26796 +3 25819 26797 27152 +3 25819 27152 26174 +3 25820 26748 27756 +3 25820 27756 26788 +3 25821 26789 27757 +3 25821 27757 26749 +3 25822 27637 29382 +3 25822 29382 27531 +3 25823 27532 29383 +3 25823 29383 27638 +3 25824 26210 27182 +3 25824 27182 26820 +3 25825 26821 27183 +3 25825 27183 26211 +3 25826 25982 26137 +3 25826 26137 25974 +3 25827 25975 26138 +3 25827 26138 25983 +3 25828 26101 27033 +3 25828 27033 26772 +3 25829 26773 27034 +3 25829 27034 26102 +3 25830 26079 26143 +3 25830 26143 25898 +3 25831 25899 26144 +3 25831 26144 26080 +3 25832 27728 29715 +3 25832 29715 27825 +3 25833 27826 29716 +3 25833 29716 27729 +3 25834 25997 26147 +3 25834 26147 25982 +3 25835 25983 26148 +3 25835 26148 25998 +3 25836 26077 26177 +3 25836 26177 25930 +3 25837 25931 26178 +3 25837 26178 26078 +3 25838 26091 26187 +3 25838 26187 25934 +3 25839 25935 26188 +3 25839 26188 26092 +3 25840 26039 26202 +3 25840 26202 25997 +3 25841 25998 26203 +3 25841 26203 26040 +3 25842 27087 27349 +3 25842 27349 26610 +3 25843 26611 27350 +3 25843 27350 27088 +3 25844 26983 28095 +3 25844 28095 26919 +3 25845 26920 28096 +3 25845 28096 26984 +3 25846 25972 26480 +3 25846 26480 26340 +3 25847 26341 26481 +3 25847 26481 25973 +3 25848 28006 30049 +3 25848 30049 27898 +3 25849 27899 30050 +3 25849 30050 28007 +3 25850 26009 26208 +3 25850 26208 26039 +3 25851 26040 26209 +3 25851 26209 26010 +3 25852 26590 26842 +3 25852 26842 26135 +3 25853 26136 26843 +3 25853 26843 26591 +3 25854 27079 27520 +3 25854 27520 26294 +3 25855 26295 27521 +3 25855 27521 27080 +3 25856 26015 26171 +3 25856 26171 26009 +3 25857 26010 26172 +3 25857 26172 26016 +3 25858 26099 26163 +3 25858 26163 25918 +3 25859 25919 26164 +3 25859 26164 26100 +3 25860 27095 27567 +3 25860 27567 26332 +3 25861 26333 27568 +3 25861 27568 27096 +3 25862 28069 30369 +3 25862 30369 28208 +3 25863 28209 30370 +3 25863 30370 28070 +3 25864 26031 26181 +3 25864 26181 26015 +3 25865 26016 26182 +3 25865 26182 26032 +3 25866 26598 26892 +3 25866 26892 26141 +3 25867 26142 26893 +3 25867 26893 26599 +3 25868 27037 27385 +3 25868 27385 26212 +3 25869 26213 27386 +3 25869 27386 27038 +3 25870 27091 28447 +3 25870 28447 27163 +3 25871 27164 28448 +3 25871 28448 27092 +3 25872 26065 26546 +3 25872 26546 26376 +3 25873 26377 26547 +3 25873 26547 26066 +3 25874 28391 30601 +3 25874 30601 28257 +3 25875 28258 30602 +3 25875 30602 28392 +3 25876 26023 26179 +3 25876 26179 26031 +3 25877 26032 26180 +3 25877 26180 26024 +3 25878 26788 27724 +3 25878 27724 27365 +3 25879 27366 27725 +3 25879 27725 26789 +3 25880 26113 26214 +3 25880 26214 25956 +3 25881 25957 26215 +3 25881 26215 26114 +3 25882 26089 26194 +3 25882 26194 25962 +3 25883 25963 26195 +3 25883 26195 26090 +3 25884 26067 26492 +3 25884 26492 26311 +3 25885 26311 26493 +3 25885 26493 26068 +3 25886 28427 30847 +3 25886 30847 28579 +3 25887 28580 30848 +3 25887 30848 28428 +3 25888 26428 27914 +3 25888 27914 27361 +3 25889 27362 27915 +3 25889 27915 26429 +3 25890 27351 28845 +3 25890 28845 27275 +3 25891 27276 28846 +3 25891 28846 27352 +3 25892 26464 27960 +3 25892 27960 27389 +3 25893 27390 27961 +3 25893 27961 26465 +3 25894 26029 26504 +3 25894 26504 26388 +3 25895 26389 26505 +3 25895 26505 26030 +3 25896 28762 31077 +3 25896 31077 28628 +3 25897 28629 31078 +3 25897 31078 28763 +3 25898 26143 26220 +3 25898 26220 25960 +3 25899 25961 26221 +3 25899 26221 26144 +3 25900 26149 26244 +3 25900 26244 25993 +3 25901 25994 26245 +3 25901 26245 26150 +3 25902 26316 27758 +3 25902 27758 27319 +3 25903 27320 27759 +3 25903 27759 26317 +3 25904 26151 26238 +3 25904 26238 25986 +3 25905 25987 26239 +3 25905 26239 26152 +3 25906 26298 27247 +3 25906 27247 26901 +3 25907 26902 27248 +3 25907 27248 26299 +3 25908 27681 28055 +3 25908 28055 26983 +3 25909 26984 28056 +3 25909 28056 27682 +3 25910 28796 31341 +3 25910 31341 28946 +3 25911 28947 31342 +3 25911 31342 28797 +3 25912 27463 29180 +3 25912 29180 27547 +3 25913 27548 29181 +3 25913 29181 27464 +3 25914 27671 28324 +3 25914 28324 26528 +3 25915 26529 28325 +3 25915 28325 27672 +3 25916 29129 31603 +3 25916 31603 28958 +3 25917 28959 31604 +3 25917 31604 29130 +3 25918 26163 26276 +3 25918 26276 26021 +3 25919 26022 26277 +3 25919 26277 26164 +3 25920 26312 27299 +3 25920 27299 26915 +3 25921 26916 27300 +3 25921 27300 26313 +3 25922 27689 28377 +3 25922 28377 26574 +3 25923 26575 28378 +3 25923 28378 27690 +3 25924 26648 26858 +3 25924 26858 26127 +3 25925 26128 26859 +3 25925 26859 26649 +3 25926 26111 26612 +3 25926 26612 26434 +3 25927 26435 26613 +3 25927 26613 26112 +3 25928 29139 31844 +3 25928 31844 29319 +3 25929 29320 31845 +3 25929 31845 29140 +3 25930 26177 26252 +3 25930 26252 26007 +3 25931 26008 26253 +3 25931 26253 26178 +3 25932 27772 29537 +3 25932 29537 27637 +3 25933 27638 29538 +3 25933 29538 27773 +3 25934 26187 26193 +3 25934 26193 25935 +3 25935 26193 26188 +3 25936 27163 28423 +3 25936 28423 27958 +3 25937 27959 28424 +3 25937 28424 27164 +3 25938 27601 28101 +3 25938 28101 26424 +3 25939 26425 28102 +3 25939 28102 27602 +3 25940 26119 26614 +3 25940 26614 26450 +3 25941 26451 26615 +3 25941 26615 26120 +3 25942 26232 26552 +3 25942 26552 26278 +3 25943 26279 26553 +3 25943 26553 26233 +3 25944 26652 28706 +3 25944 28706 27950 +3 25945 27951 28707 +3 25945 28707 26653 +3 25946 27825 29881 +3 25946 29881 27934 +3 25947 27935 29882 +3 25947 29882 27826 +3 25948 26718 28774 +3 25948 28774 27984 +3 25949 27985 28775 +3 25949 28775 26719 +3 25950 26121 26268 +3 25950 26268 26033 +3 25951 26034 26269 +3 25951 26269 26122 +3 25952 27224 27653 +3 25952 27653 26454 +3 25953 26455 27654 +3 25953 27654 27225 +3 25954 26688 26975 +3 25954 26975 26256 +3 25955 26257 26976 +3 25955 26976 26689 +3 25956 26214 26307 +3 25956 26307 26055 +3 25957 26056 26308 +3 25957 26308 26215 +3 25958 28266 28782 +3 25958 28782 27351 +3 25959 27352 28783 +3 25959 28783 28267 +3 25960 26220 26274 +3 25960 26274 26023 +3 25961 26024 26275 +3 25961 26275 26221 +3 25962 26194 26280 +3 25962 26280 26063 +3 25963 26064 26281 +3 25963 26281 26195 +3 25964 26278 26588 +3 25964 26588 26296 +3 25965 26297 26589 +3 25965 26589 26279 +3 25966 26595 26890 +3 25966 26890 26262 +3 25967 26263 26891 +3 25967 26891 26595 +3 25968 26510 28449 +3 25968 28449 27888 +3 25969 27889 28450 +3 25969 28450 26511 +3 25970 28141 30218 +3 25970 30218 28006 +3 25971 28007 30219 +3 25971 30219 28142 +3 25972 26109 26604 +3 25972 26604 26480 +3 25973 26481 26605 +3 25973 26605 26110 +3 25974 26137 26290 +3 25974 26290 26121 +3 25975 26122 26291 +3 25975 26291 26138 +3 25976 27233 27730 +3 25976 27730 26466 +3 25977 26467 27731 +3 25977 27731 27234 +3 25978 28263 29089 +3 25978 29089 26766 +3 25979 26767 29090 +3 25979 29090 28264 +3 25980 26296 26608 +3 25980 26608 26318 +3 25981 26319 26609 +3 25981 26609 26297 +3 25982 26147 26309 +3 25982 26309 26137 +3 25983 26138 26310 +3 25983 26310 26148 +3 25984 26185 26660 +3 25984 26660 26472 +3 25985 26473 26661 +3 25985 26661 26186 +3 25986 26238 26336 +3 25986 26336 26077 +3 25987 26078 26337 +3 25987 26337 26239 +3 25988 28282 29155 +3 25988 29155 26832 +3 25989 26833 29156 +3 25989 29156 28283 +3 25990 26090 26306 +3 25990 26306 26089 +3 25991 26191 26678 +3 25991 26678 26496 +3 25992 26497 26679 +3 25992 26679 26192 +3 25993 26244 26358 +3 25993 26358 26091 +3 25994 26092 26359 +3 25994 26359 26245 +3 25995 26714 26903 +3 25995 26903 26204 +3 25996 26205 26904 +3 25996 26904 26715 +3 25997 26202 26370 +3 25997 26370 26147 +3 25998 26148 26371 +3 25998 26371 26203 +3 25999 26318 26700 +3 25999 26700 26400 +3 26000 26401 26701 +3 26000 26701 26319 +3 26001 27547 29117 +3 26001 29117 28565 +3 26002 28566 29118 +3 26002 29118 27548 +3 26003 28208 30486 +3 26003 30486 28347 +3 26004 28348 30487 +3 26004 30487 28209 +3 26005 26272 27261 +3 26005 27261 26961 +3 26006 26962 27262 +3 26006 27262 26273 +3 26007 26252 26328 +3 26007 26328 26079 +3 26008 26080 26329 +3 26008 26329 26253 +3 26009 26171 26382 +3 26009 26382 26208 +3 26010 26209 26383 +3 26010 26383 26172 +3 26011 28184 28847 +3 26011 28847 26602 +3 26012 26603 28848 +3 26012 28848 28185 +3 26013 26400 26716 +3 26013 26716 26350 +3 26014 26351 26717 +3 26014 26717 26401 +3 26015 26181 26334 +3 26015 26334 26171 +3 26016 26172 26335 +3 26016 26335 26182 +3 26017 26586 28051 +3 26017 28051 27510 +3 26018 27511 28052 +3 26018 28052 26587 +3 26019 26886 29476 +3 26019 29476 28559 +3 26020 28560 29477 +3 26020 29477 26887 +3 26021 26276 26394 +3 26021 26394 26113 +3 26022 26114 26395 +3 26022 26395 26277 +3 26023 26274 26326 +3 26023 26326 26179 +3 26024 26180 26327 +3 26024 26327 26275 +3 26025 26350 26650 +3 26025 26650 26364 +3 26026 26365 26651 +3 26026 26651 26351 +3 26027 28537 30742 +3 26027 30742 28391 +3 26028 28392 30743 +3 26028 30743 28538 +3 26029 26159 26640 +3 26029 26640 26504 +3 26030 26505 26641 +3 26030 26641 26160 +3 26031 26179 26342 +3 26031 26342 26181 +3 26032 26182 26343 +3 26032 26343 26180 +3 26033 26268 26344 +3 26033 26344 26099 +3 26034 26100 26345 +3 26034 26345 26269 +3 26035 26951 29553 +3 26035 29553 28593 +3 26036 28594 29554 +3 26036 29554 26952 +3 26037 28884 29471 +3 26037 29471 27772 +3 26038 27773 29472 +3 26038 29472 28885 +3 26039 26208 26398 +3 26039 26398 26202 +3 26040 26203 26399 +3 26040 26399 26209 +3 26041 26364 26666 +3 26041 26666 26386 +3 26042 26387 26667 +3 26042 26667 26365 +3 26043 26596 28145 +3 26043 28145 27529 +3 26044 27530 28146 +3 26044 28146 26597 +3 26045 26722 29182 +3 26045 29182 28457 +3 26046 28458 29183 +3 26046 29183 26723 +3 26047 28579 30981 +3 26047 30981 28734 +3 26048 28735 30982 +3 26048 30982 28580 +3 26049 26782 27073 +3 26049 27073 26348 +3 26050 26349 27074 +3 26050 27074 26783 +3 26051 28878 29866 +3 26051 29866 27007 +3 26052 27008 29867 +3 26052 29867 28879 +3 26053 26452 27419 +3 26053 27419 27013 +3 26054 27014 27420 +3 26054 27420 26453 +3 26055 26307 26418 +3 26055 26418 26149 +3 26056 26150 26419 +3 26056 26419 26308 +3 26057 26386 26662 +3 26057 26662 26378 +3 26058 26379 26663 +3 26058 26663 26387 +3 26059 28902 29943 +3 26059 29943 27083 +3 26060 27084 29944 +3 26060 29944 28903 +3 26061 27934 29826 +3 26061 29826 29149 +3 26062 29150 29827 +3 26062 29827 27935 +3 26063 26280 26396 +3 26063 26396 26151 +3 26064 26152 26397 +3 26064 26397 26281 +3 26065 26246 26740 +3 26065 26740 26546 +3 26066 26547 26741 +3 26066 26741 26247 +3 26067 26258 26686 +3 26067 26686 26492 +3 26068 26493 26687 +3 26068 26687 26259 +3 26069 26456 27295 +3 26069 27295 26912 +3 26070 26912 27296 +3 26070 27296 26457 +3 26071 28932 31258 +3 26071 31258 28762 +3 26072 28763 31259 +3 26072 31259 28933 +3 26073 27847 28465 +3 26073 28465 26750 +3 26074 26751 28466 +3 26074 28466 27848 +3 26075 26802 27075 +3 26075 27075 26362 +3 26076 26363 27076 +3 26076 27076 26803 +3 26077 26336 26426 +3 26077 26426 26177 +3 26078 26178 26427 +3 26078 26427 26337 +3 26079 26328 26406 +3 26079 26406 26143 +3 26080 26144 26407 +3 26080 26407 26329 +3 26081 28756 29541 +3 26081 29541 26812 +3 26082 26813 29542 +3 26082 29542 28757 +3 26083 26568 26989 +3 26083 26989 26506 +3 26084 26507 26990 +3 26084 26990 26569 +3 26085 27125 30227 +3 26085 30227 29143 +3 26086 29144 30228 +3 26086 30228 27126 +3 26087 27287 27679 +3 26087 27679 26430 +3 26088 26431 27680 +3 26088 27680 27288 +3 26089 26306 26416 +3 26089 26416 26194 +3 26090 26195 26417 +3 26090 26417 26306 +3 26091 26358 26440 +3 26091 26440 26187 +3 26092 26188 26441 +3 26092 26441 26359 +3 26093 28946 31536 +3 26093 31536 29121 +3 26094 29122 31537 +3 26094 31537 28947 +3 26095 29449 30159 +3 26095 30159 28141 +3 26096 28142 30160 +3 26096 30160 29450 +3 26097 27228 30309 +3 26097 30309 29190 +3 26098 29191 30310 +3 26098 30310 27229 +3 26099 26344 26412 +3 26099 26412 26163 +3 26100 26164 26413 +3 26100 26413 26345 +3 26101 26384 27315 +3 26101 27315 27033 +3 26102 27034 27316 +3 26102 27316 26385 +3 26103 27868 28581 +3 26103 28581 26764 +3 26104 26765 28582 +3 26104 28582 27869 +3 26105 26582 27045 +3 26105 27045 26568 +3 26106 26569 27046 +3 26106 27046 26583 +3 26107 29327 31779 +3 26107 31779 29129 +3 26108 29130 31780 +3 26108 31780 29328 +3 26109 26250 26752 +3 26109 26752 26604 +3 26110 26605 26753 +3 26110 26753 26251 +3 26111 26314 26792 +3 26111 26792 26612 +3 26112 26613 26793 +3 26112 26793 26315 +3 26113 26394 26478 +3 26113 26478 26214 +3 26114 26215 26479 +3 26114 26479 26395 +3 26115 26917 29883 +3 26115 29883 29062 +3 26116 29063 29884 +3 26116 29884 26918 +3 26117 29441 30512 +3 26117 30512 27257 +3 26118 27258 30513 +3 26118 30513 29442 +3 26119 26302 26784 +3 26119 26784 26614 +3 26120 26615 26785 +3 26120 26785 26303 +3 26121 26290 26436 +3 26121 26436 26268 +3 26122 26269 26437 +3 26122 26437 26291 +3 26123 26894 28906 +3 26123 28906 28172 +3 26124 28173 28907 +3 26124 28907 26895 +3 26125 28347 30434 +3 26125 30434 29743 +3 26126 29744 30435 +3 26126 30435 28348 +3 26127 26858 27063 +3 26127 27063 26338 +3 26128 26339 27064 +3 26128 27064 26859 +3 26129 29474 30583 +3 26129 30583 27337 +3 26130 27338 30584 +3 26130 30584 29475 +3 26131 29319 32020 +3 26131 32020 29519 +3 26132 29520 32021 +3 26132 32021 29320 +3 26133 26616 27069 +3 26133 27069 26582 +3 26134 26583 27070 +3 26134 27070 26617 +3 26135 26842 27135 +3 26135 27135 26438 +3 26136 26439 27136 +3 26136 27136 26843 +3 26137 26309 26460 +3 26137 26460 26290 +3 26138 26291 26461 +3 26138 26461 26310 +3 26139 27345 27859 +3 26139 27859 26626 +3 26140 26627 27860 +3 26140 27860 27346 +3 26141 26892 27165 +3 26141 27165 26444 +3 26142 26445 27166 +3 26142 27166 26893 +3 26143 26406 26470 +3 26143 26470 26220 +3 26144 26221 26471 +3 26144 26471 26407 +3 26145 27371 30802 +3 26145 30802 29733 +3 26146 29734 30803 +3 26146 30803 27372 +3 26147 26370 26502 +3 26147 26502 26309 +3 26148 26310 26503 +3 26148 26503 26371 +3 26149 26418 26498 +3 26149 26498 26244 +3 26150 26245 26499 +3 26150 26499 26419 +3 26151 26396 26476 +3 26151 26476 26238 +3 26152 26239 26477 +3 26152 26477 26397 +3 26153 29337 30220 +3 26153 30220 27017 +3 26154 27018 30221 +3 26154 30221 29338 +3 26155 26738 27202 +3 26155 27202 26616 +3 26156 26617 27203 +3 26156 27203 26739 +3 26157 30033 30689 +3 26157 30689 28537 +3 26158 28538 30690 +3 26158 30690 30034 +3 26159 26376 26844 +3 26159 26844 26640 +3 26160 26641 26845 +3 26160 26845 26377 +3 26161 26913 29014 +3 26161 29014 28202 +3 26162 28203 29015 +3 26162 29015 26914 +3 26163 26412 26512 +3 26163 26512 26276 +3 26164 26277 26513 +3 26164 26513 26413 +3 26165 27230 27726 +3 26165 27726 26634 +3 26166 26635 27727 +3 26166 27727 27230 +3 26167 27475 30886 +3 26167 30886 29767 +3 26168 29768 30887 +3 26168 30887 27476 +3 26169 26560 28083 +3 26169 28083 27619 +3 26170 27620 28084 +3 26170 28084 26561 +3 26171 26334 26518 +3 26171 26518 26382 +3 26172 26383 26519 +3 26172 26519 26335 +3 26173 26544 27551 +3 26173 27551 27151 +3 26174 27152 27552 +3 26174 27552 26545 +3 26175 26654 27226 +3 26175 27226 26738 +3 26176 26739 27227 +3 26176 27227 26655 +3 26177 26426 26490 +3 26177 26490 26252 +3 26178 26253 26491 +3 26178 26491 26427 +3 26179 26326 26482 +3 26179 26482 26342 +3 26180 26343 26483 +3 26180 26483 26327 +3 26181 26342 26486 +3 26181 26486 26334 +3 26182 26335 26487 +3 26182 26487 26343 +3 26183 28493 29307 +3 26183 29307 27039 +3 26184 27040 29308 +3 26184 29308 28494 +3 26185 26340 26804 +3 26185 26804 26660 +3 26186 26661 26805 +3 26186 26805 26341 +3 26187 26440 26446 +3 26187 26446 26193 +3 26188 26193 26447 +3 26188 26447 26441 +3 26189 30029 31064 +3 26189 31064 27494 +3 26190 27495 31065 +3 26190 31065 30030 +3 26191 26192 26684 +3 26191 26684 26678 +3 26192 26679 26684 +3 26193 26446 26447 +3 26194 26416 26494 +3 26194 26494 26280 +3 26195 26281 26495 +3 26195 26495 26417 +3 26196 28734 30948 +3 26196 30948 30305 +3 26197 30306 30949 +3 26197 30949 28735 +3 26198 27115 30494 +3 26198 30494 29610 +3 26199 29611 30495 +3 26199 30495 27116 +3 26200 26664 27121 +3 26200 27121 26654 +3 26201 26655 27122 +3 26201 27122 26665 +3 26202 26398 26536 +3 26202 26536 26370 +3 26203 26371 26537 +3 26203 26537 26399 +3 26204 26903 27101 +3 26204 27101 26402 +3 26205 26403 27102 +3 26205 27102 26904 +3 26206 30053 31147 +3 26206 31147 27611 +3 26207 27612 31148 +3 26207 31148 30054 +3 26208 26382 26542 +3 26208 26542 26398 +3 26209 26399 26543 +3 26209 26543 26383 +3 26210 26550 27553 +3 26210 27553 27182 +3 26211 27183 27554 +3 26211 27554 26551 +3 26212 27385 27760 +3 26212 27760 26530 +3 26213 26531 27761 +3 26213 27761 27386 +3 26214 26478 26554 +3 26214 26554 26307 +3 26215 26308 26555 +3 26215 26555 26479 +3 26216 26772 27437 +3 26216 27437 26852 +3 26217 26853 27438 +3 26217 27438 26773 +3 26218 26712 27145 +3 26218 27145 26664 +3 26219 26665 27146 +3 26219 27146 26713 +3 26220 26470 26520 +3 26220 26520 26274 +3 26221 26275 26521 +3 26221 26521 26471 +3 26222 27625 31355 +3 26222 31355 30297 +3 26223 30298 31356 +3 26223 31356 27626 +3 26224 30508 31204 +3 26224 31204 28932 +3 26225 28933 31205 +3 26225 31205 30509 +3 26226 28513 29422 +3 26226 29422 27059 +3 26227 27060 29423 +3 26227 29423 28514 +3 26228 29897 30746 +3 26228 30746 27235 +3 26229 27236 30747 +3 26229 30747 29898 +3 26230 27766 31446 +3 26230 31446 30339 +3 26231 30340 31447 +3 26231 31447 27767 +3 26232 26388 26830 +3 26232 26830 26552 +3 26233 26553 26831 +3 26233 26831 26389 +3 26234 27198 29697 +3 26234 29697 28843 +3 26235 28844 29698 +3 26235 29698 27199 +3 26236 26810 28328 +3 26236 28328 27720 +3 26237 27721 28329 +3 26237 28329 26811 +3 26238 26476 26548 +3 26238 26548 26336 +3 26239 26337 26549 +3 26239 26549 26477 +3 26240 26692 27143 +3 26240 27143 26712 +3 26241 26713 27144 +3 26241 27144 26693 +3 26242 27954 28502 +3 26242 28502 26720 +3 26243 26721 28503 +3 26243 28503 27955 +3 26244 26498 26576 +3 26244 26576 26358 +3 26245 26359 26577 +3 26245 26577 26499 +3 26246 26434 26908 +3 26246 26908 26740 +3 26247 26741 26909 +3 26247 26909 26435 +3 26248 29121 31456 +3 26248 31456 30714 +3 26249 30715 31457 +3 26249 31457 29122 +3 26250 26378 26838 +3 26250 26838 26752 +3 26251 26753 26839 +3 26251 26839 26379 +3 26252 26490 26562 +3 26252 26562 26328 +3 26253 26329 26563 +3 26253 26563 26491 +3 26254 30502 31642 +3 26254 31642 27774 +3 26255 27775 31643 +3 26255 31643 30503 +3 26256 26975 27259 +3 26256 27259 26524 +3 26257 26525 27260 +3 26257 27260 26976 +3 26258 26450 26864 +3 26258 26864 26686 +3 26259 26687 26865 +3 26259 26865 26451 +3 26260 26852 27506 +3 26260 27506 26888 +3 26261 26889 27507 +3 26261 27507 26853 +3 26262 26890 27174 +3 26262 27174 26532 +3 26263 26533 27175 +3 26263 27175 26891 +3 26264 26824 28139 +3 26264 28139 27526 +3 26265 27526 28140 +3 26265 28140 26825 +3 26266 27325 30983 +3 26266 30983 30169 +3 26267 30170 30984 +3 26267 30984 27326 +3 26268 26436 26558 +3 26268 26558 26344 +3 26269 26345 26559 +3 26269 26559 26437 +3 26270 30534 31716 +3 26270 31716 27878 +3 26271 27879 31717 +3 26271 31717 30535 +3 26272 26540 27537 +3 26272 27537 27261 +3 26273 27262 27538 +3 26273 27538 26541 +3 26274 26520 26570 +3 26274 26570 26326 +3 26275 26327 26571 +3 26275 26571 26521 +3 26276 26512 26618 +3 26276 26618 26394 +3 26277 26395 26619 +3 26277 26619 26513 +3 26278 26552 26880 +3 26278 26880 26588 +3 26279 26589 26881 +3 26279 26881 26553 +3 26280 26494 26584 +3 26280 26584 26396 +3 26281 26397 26585 +3 26281 26585 26495 +3 26282 27231 29838 +3 26282 29838 28870 +3 26283 28871 29839 +3 26283 29839 27232 +3 26284 30944 31696 +3 26284 31696 29327 +3 26285 29328 31697 +3 26285 31697 30945 +3 26286 27880 31907 +3 26286 31907 30707 +3 26287 30708 31908 +3 26287 31908 27881 +3 26288 26888 27543 +3 26288 27543 26927 +3 26289 26928 27544 +3 26289 27544 26889 +3 26290 26460 26580 +3 26290 26580 26436 +3 26291 26437 26581 +3 26291 26581 26461 +3 26292 29137 30096 +3 26292 30096 27341 +3 26293 27342 30097 +3 26293 30097 29138 +3 26294 27520 28028 +3 26294 28028 26760 +3 26295 26761 28029 +3 26295 28029 27521 +3 26296 26588 26910 +3 26296 26910 26608 +3 26297 26609 26911 +3 26297 26911 26589 +3 26298 26672 27647 +3 26298 27647 27247 +3 26299 27248 27648 +3 26299 27648 26673 +3 26300 30387 31260 +3 26300 31260 27447 +3 26301 27448 31261 +3 26301 31261 30388 +3 26302 26472 26955 +3 26302 26955 26784 +3 26303 26785 26956 +3 26303 26956 26473 +3 26304 28014 31992 +3 26304 31992 30750 +3 26305 30751 31993 +3 26305 31993 28015 +3 26306 26417 26592 +3 26306 26592 26416 +3 26307 26554 26632 +3 26307 26632 26418 +3 26308 26419 26633 +3 26308 26633 26555 +3 26309 26502 26658 +3 26309 26658 26460 +3 26310 26461 26659 +3 26310 26659 26503 +3 26311 26492 26905 +3 26311 26905 26493 +3 26312 26682 27697 +3 26312 27697 27299 +3 26313 27300 27698 +3 26313 27698 26683 +3 26314 26496 26981 +3 26314 26981 26792 +3 26315 26793 26982 +3 26315 26982 26497 +3 26316 26708 28182 +3 26316 28182 27758 +3 26317 27759 28183 +3 26317 28183 26709 +3 26318 26608 27001 +3 26318 27001 26700 +3 26319 26701 27002 +3 26319 27002 26609 +3 26320 26927 27740 +3 26320 27740 27071 +3 26321 27072 27741 +3 26321 27741 26928 +3 26322 29519 31955 +3 26322 31955 31143 +3 26323 31144 31956 +3 26323 31956 29520 +3 26324 30936 32194 +3 26324 32194 28008 +3 26325 28009 32195 +3 26325 32195 30937 +3 26326 26570 26620 +3 26326 26620 26482 +3 26327 26483 26621 +3 26327 26621 26571 +3 26328 26562 26636 +3 26328 26636 26406 +3 26329 26407 26637 +3 26329 26637 26563 +3 26330 26836 28924 +3 26330 28924 28308 +3 26331 28309 28925 +3 26331 28925 26837 +3 26332 27567 28034 +3 26332 28034 26768 +3 26333 26769 28035 +3 26333 28035 27568 +3 26334 26486 26674 +3 26334 26674 26518 +3 26335 26519 26675 +3 26335 26675 26487 +3 26336 26548 26644 +3 26336 26644 26426 +3 26337 26427 26645 +3 26337 26645 26549 +3 26338 27063 27277 +3 26338 27277 26526 +3 26339 26527 27278 +3 26339 27278 27064 +3 26340 26480 26943 +3 26340 26943 26804 +3 26341 26805 26944 +3 26341 26944 26481 +3 26342 26482 26630 +3 26342 26630 26486 +3 26343 26487 26631 +3 26343 26631 26483 +3 26344 26558 26628 +3 26344 26628 26412 +3 26345 26413 26629 +3 26345 26629 26559 +3 26346 28042 28785 +3 26346 28785 26997 +3 26347 26998 28786 +3 26347 28786 28043 +3 26348 27073 27357 +3 26348 27357 26598 +3 26349 26599 27358 +3 26349 27358 27074 +3 26350 26716 27023 +3 26350 27023 26650 +3 26351 26651 27024 +3 26351 27024 26717 +3 26352 30960 32293 +3 26352 32293 28153 +3 26353 28154 32294 +3 26353 32294 30961 +3 26354 27535 31538 +3 26354 31538 30603 +3 26355 30604 31539 +3 26355 31539 27536 +3 26356 27071 27764 +3 26356 27764 26971 +3 26357 26972 27765 +3 26357 27765 27072 +3 26358 26576 26670 +3 26358 26670 26440 +3 26359 26441 26671 +3 26359 26671 26577 +3 26360 29168 30235 +3 26360 30235 27375 +3 26361 27376 30236 +3 26361 30236 29169 +3 26362 27075 27339 +3 26362 27339 26590 +3 26363 26591 27340 +3 26363 27340 27076 +3 26364 26650 26953 +3 26364 26953 26666 +3 26365 26667 26954 +3 26365 26954 26651 +3 26366 27500 30432 +3 26366 30432 29457 +3 26367 29458 30433 +3 26367 30433 27501 +3 26368 27149 27894 +3 26368 27894 27037 +3 26369 27038 27895 +3 26369 27895 27150 +3 26370 26536 26698 +3 26370 26698 26502 +3 26371 26503 26699 +3 26371 26699 26537 +3 26372 28135 32456 +3 26372 32456 31139 +3 26373 31140 32457 +3 26373 32457 28136 +3 26374 27863 28577 +3 26374 28577 27005 +3 26375 27006 28578 +3 26375 28578 27863 +3 26376 26546 27047 +3 26376 27047 26844 +3 26377 26845 27048 +3 26377 27048 26547 +3 26378 26662 26941 +3 26378 26941 26838 +3 26379 26839 26942 +3 26379 26942 26663 +3 26380 26971 27621 +3 26380 27621 26987 +3 26381 26988 27622 +3 26381 27622 26972 +3 26382 26518 26710 +3 26382 26710 26542 +3 26383 26543 26711 +3 26383 26711 26519 +3 26384 26624 27593 +3 26384 27593 27315 +3 26385 27316 27594 +3 26385 27594 26625 +3 26386 26666 26963 +3 26386 26963 26662 +3 26387 26663 26964 +3 26387 26964 26667 +3 26388 26504 26965 +3 26388 26965 26830 +3 26389 26831 26966 +3 26389 26966 26505 +3 26390 28292 32563 +3 26390 32563 31181 +3 26391 31182 32564 +3 26391 32564 28293 +3 26392 30818 31789 +3 26392 31789 27655 +3 26393 27656 31790 +3 26393 31790 30819 +3 26394 26618 26724 +3 26394 26724 26478 +3 26395 26479 26725 +3 26395 26725 26619 +3 26396 26584 26690 +3 26396 26690 26476 +3 26397 26477 26691 +3 26397 26691 26585 +3 26398 26542 26730 +3 26398 26730 26536 +3 26399 26537 26731 +3 26399 26731 26543 +3 26400 26700 27065 +3 26400 27065 26716 +3 26401 26717 27068 +3 26401 27068 26701 +3 26402 27101 27461 +3 26402 27461 26688 +3 26403 26689 27462 +3 26403 27462 27102 +3 26404 26987 27665 +3 26404 27665 27031 +3 26405 27032 27666 +3 26405 27666 26988 +3 26406 26636 26706 +3 26406 26706 26470 +3 26407 26471 26707 +3 26407 26707 26637 +3 26408 27192 27994 +3 26408 27994 27149 +3 26409 27150 27995 +3 26409 27995 27193 +3 26410 29773 30716 +3 26410 30716 27675 +3 26411 27676 30717 +3 26411 30717 29774 +3 26412 26628 26754 +3 26412 26754 26512 +3 26413 26513 26755 +3 26413 26755 26629 +3 26414 27527 30556 +3 26414 30556 29485 +3 26415 29486 30557 +3 26415 30557 27528 +3 26416 26592 26704 +3 26416 26704 26494 +3 26417 26495 26705 +3 26417 26705 26592 +3 26418 26632 26734 +3 26418 26734 26498 +3 26419 26499 26735 +3 26419 26735 26633 +3 26420 27778 32024 +3 26420 32024 30993 +3 26421 30994 32025 +3 26421 32025 27779 +3 26422 28656 29343 +3 26422 29343 26993 +3 26423 26994 29344 +3 26423 29344 28657 +3 26424 28101 28626 +3 26424 28626 26862 +3 26425 26863 28627 +3 26425 28627 28102 +3 26426 26644 26744 +3 26426 26744 26490 +3 26427 26491 26745 +3 26427 26745 26645 +3 26428 26969 28543 +3 26428 28543 27914 +3 26429 27915 28544 +3 26429 28544 26970 +3 26430 27679 28018 +3 26430 28018 26758 +3 26431 26759 28019 +3 26431 28019 27680 +3 26432 27189 29239 +3 26432 29239 28417 +3 26433 28418 29240 +3 26433 29240 27190 +3 26434 26612 27107 +3 26434 27107 26908 +3 26435 26909 27108 +3 26435 27108 26613 +3 26436 26580 26732 +3 26436 26732 26558 +3 26437 26559 26733 +3 26437 26733 26581 +3 26438 27135 27369 +3 26438 27369 26648 +3 26439 26649 27370 +3 26439 27370 27136 +3 26440 26670 26680 +3 26440 26680 26446 +3 26441 26447 26681 +3 26441 26681 26671 +3 26442 27031 27659 +3 26442 27659 27019 +3 26443 27020 27660 +3 26443 27660 27032 +3 26444 27165 27171 +3 26444 27171 26445 +3 26445 27171 27166 +3 26446 26680 26685 +3 26446 26685 26447 +3 26447 26685 26681 +3 26448 27243 28022 +3 26448 28022 27192 +3 26449 27193 28023 +3 26449 28023 27244 +3 26450 26614 27057 +3 26450 27057 26864 +3 26451 26865 27058 +3 26451 27058 26615 +3 26452 26796 27809 +3 26452 27809 27419 +3 26453 27420 27810 +3 26453 27810 26797 +3 26454 27653 28160 +3 26454 28160 26921 +3 26455 26922 28161 +3 26455 28161 27654 +3 26456 26820 27712 +3 26456 27712 27295 +3 26457 27296 27713 +3 26457 27713 26821 +3 26458 27204 29008 +3 26458 29008 28199 +3 26459 28199 29009 +3 26459 29009 27205 +3 26460 26658 26786 +3 26460 26786 26580 +3 26461 26581 26787 +3 26461 26787 26659 +3 26462 27827 31001 +3 26462 31001 30082 +3 26463 30083 31002 +3 26463 31002 27828 +3 26464 26985 28549 +3 26464 28549 27960 +3 26465 27961 28550 +3 26465 28550 26986 +3 26466 27730 28218 +3 26466 28218 26925 +3 26467 26926 28219 +3 26467 28219 27731 +3 26468 29814 30868 +3 26468 30868 27718 +3 26469 27719 30869 +3 26469 30869 29815 +3 26470 26706 26762 +3 26470 26762 26520 +3 26471 26521 26763 +3 26471 26763 26707 +3 26472 26660 27119 +3 26472 27119 26955 +3 26473 26956 27120 +3 26473 27120 26661 +3 26474 27439 28261 +3 26474 28261 27243 +3 26475 27244 28262 +3 26475 28262 27440 +3 26476 26690 26778 +3 26476 26778 26548 +3 26477 26549 26779 +3 26477 26779 26691 +3 26478 26724 26806 +3 26478 26806 26554 +3 26479 26555 26807 +3 26479 26807 26725 +3 26480 26604 27093 +3 26480 27093 26943 +3 26481 26944 27094 +3 26481 27094 26605 +3 26482 26620 26770 +3 26482 26770 26630 +3 26483 26631 26771 +3 26483 26771 26621 +3 26484 27319 28357 +3 26484 28357 27465 +3 26485 27466 28358 +3 26485 28358 27320 +3 26486 26630 26828 +3 26486 26828 26674 +3 26487 26675 26829 +3 26487 26829 26631 +3 26488 27139 29741 +3 26488 29741 28988 +3 26489 28989 29742 +3 26489 29742 27140 +3 26490 26744 26808 +3 26490 26808 26562 +3 26491 26563 26809 +3 26491 26809 26745 +3 26492 26686 27103 +3 26492 27103 26905 +3 26493 26905 27104 +3 26493 27104 26687 +3 26494 26704 26794 +3 26494 26794 26584 +3 26495 26585 26795 +3 26495 26795 26705 +3 26496 26678 27159 +3 26496 27159 26981 +3 26497 26982 27160 +3 26497 27160 26679 +3 26498 26734 26818 +3 26498 26818 26576 +3 26499 26577 26819 +3 26499 26819 26735 +3 26500 27301 28290 +3 26500 28290 27439 +3 26501 27440 28291 +3 26501 28291 27302 +3 26502 26698 26834 +3 26502 26834 26658 +3 26503 26659 26835 +3 26503 26835 26699 +3 26504 26640 27099 +3 26504 27099 26965 +3 26505 26966 27100 +3 26505 27100 26641 +3 26506 26989 27423 +3 26506 27423 26714 +3 26507 26715 27424 +3 26507 27424 26990 +3 26508 30375 31321 +3 26508 31321 27990 +3 26509 27991 31322 +3 26509 31322 30376 +3 26510 27027 29054 +3 26510 29054 28449 +3 26511 28450 29055 +3 26511 29055 27028 +3 26512 26754 26848 +3 26512 26848 26618 +3 26513 26619 26849 +3 26513 26849 26755 +3 26514 28770 29673 +3 26514 29673 27381 +3 26515 27382 29674 +3 26515 29674 28771 +3 26516 27864 31163 +3 26516 31163 30122 +3 26517 30123 31164 +3 26517 31164 27865 +3 26518 26674 26854 +3 26518 26854 26710 +3 26519 26711 26855 +3 26519 26855 26675 +3 26520 26762 26816 +3 26520 26816 26570 +3 26521 26571 26817 +3 26521 26817 26763 +3 26522 27317 28131 +3 26522 28131 27301 +3 26523 27302 28132 +3 26523 28132 27318 +3 26524 27259 27522 +3 26524 27522 26782 +3 26525 26783 27523 +3 26525 27523 27260 +3 26526 27277 27455 +3 26526 27455 26692 +3 26527 26693 27456 +3 26527 27456 27278 +3 26528 28324 29050 +3 26528 29050 27184 +3 26529 27185 29051 +3 26529 29051 28325 +3 26530 27760 28093 +3 26530 28093 26846 +3 26531 26847 28094 +3 26531 28094 27761 +3 26532 27174 27471 +3 26532 27471 26802 +3 26533 26803 27472 +3 26533 27472 27175 +3 26534 27465 28473 +3 26534 28473 27496 +3 26535 27497 28474 +3 26535 28474 27466 +3 26536 26730 26870 +3 26536 26870 26698 +3 26537 26699 26871 +3 26537 26871 26731 +3 26538 28510 29418 +3 26538 29418 27399 +3 26539 27400 29419 +3 26539 29419 28510 +3 26540 26798 27831 +3 26540 27831 27537 +3 26541 27538 27832 +3 26541 27832 26799 +3 26542 26710 26878 +3 26542 26878 26730 +3 26543 26731 26879 +3 26543 26879 26711 +3 26544 26915 27938 +3 26544 27938 27551 +3 26545 27552 27939 +3 26545 27939 26916 +3 26546 26740 27253 +3 26546 27253 27047 +3 26547 27048 27254 +3 26547 27254 26741 +3 26548 26778 26856 +3 26548 26856 26644 +3 26549 26645 26857 +3 26549 26857 26779 +3 26550 26901 27916 +3 26550 27916 27553 +3 26551 27554 27917 +3 26551 27917 26902 +3 26552 26830 27155 +3 26552 27155 26880 +3 26553 26881 27156 +3 26553 27156 26831 +3 26554 26806 26884 +3 26554 26884 26632 +3 26555 26633 26885 +3 26555 26885 26807 +3 26556 28147 31628 +3 26556 31628 30587 +3 26557 30588 31629 +3 26557 31629 28148 +3 26558 26732 26840 +3 26558 26840 26628 +3 26559 26629 26841 +3 26559 26841 26733 +3 26560 26959 28523 +3 26560 28523 28083 +3 26561 28084 28524 +3 26561 28524 26960 +3 26562 26808 26882 +3 26562 26882 26636 +3 26563 26637 26883 +3 26563 26883 26809 +3 26564 29325 30135 +3 26564 30135 27289 +3 26565 27290 30136 +3 26565 30136 29326 +3 26566 27383 28188 +3 26566 28188 27317 +3 26567 27318 28189 +3 26567 28189 27384 +3 26568 27045 27486 +3 26568 27486 26989 +3 26569 26990 27487 +3 26569 27487 27046 +3 26570 26816 26860 +3 26570 26860 26620 +3 26571 26621 26861 +3 26571 26861 26817 +3 26572 30385 31472 +3 26572 31472 28016 +3 26573 28017 31473 +3 26573 31473 30386 +3 26574 28377 29056 +3 26574 29056 27214 +3 26575 27215 29057 +3 26575 29057 28378 +3 26576 26818 26899 +3 26576 26899 26670 +3 26577 26671 26900 +3 26577 26900 26819 +3 26578 27496 28535 +3 26578 28535 27557 +3 26579 27558 28536 +3 26579 28536 27497 +3 26580 26786 26935 +3 26580 26935 26732 +3 26581 26733 26936 +3 26581 26936 26787 +3 26582 27069 27524 +3 26582 27524 27045 +3 26583 27046 27525 +3 26583 27525 27070 +3 26584 26794 26897 +3 26584 26897 26690 +3 26585 26691 26898 +3 26585 26898 26795 +3 26586 27157 28672 +3 26586 28672 28051 +3 26587 28052 28673 +3 26587 28673 27158 +3 26588 26880 27216 +3 26588 27216 26910 +3 26589 26911 27217 +3 26589 27217 26881 +3 26590 27339 27615 +3 26590 27615 26842 +3 26591 26843 27616 +3 26591 27616 27340 +3 26592 26705 26896 +3 26592 26896 26704 +3 26593 27573 30113 +3 26593 30113 29109 +3 26594 29110 30114 +3 26594 30114 27574 +3 26595 26891 27515 +3 26595 27515 26890 +3 26596 27169 28736 +3 26596 28736 28145 +3 26597 28146 28737 +3 26597 28737 27170 +3 26598 27357 27643 +3 26598 27643 26892 +3 26599 26893 27644 +3 26599 27644 27358 +3 26600 27780 28839 +3 26600 28839 27601 +3 26601 27602 28840 +3 26601 28840 27781 +3 26602 28847 29461 +3 26602 29461 27218 +3 26603 27219 29462 +3 26603 29462 28848 +3 26604 26752 27241 +3 26604 27241 27093 +3 26605 27094 27242 +3 26605 27242 26753 +3 26606 30829 31901 +3 26606 31901 28312 +3 26607 28313 31902 +3 26607 31902 30830 +3 26608 26910 27311 +3 26608 27311 27001 +3 26609 27002 27312 +3 26609 27312 26911 +3 26610 27349 28178 +3 26610 28178 27383 +3 26611 27384 28179 +3 26611 28179 27350 +3 26612 26792 27303 +3 26612 27303 27107 +3 26613 27108 27304 +3 26613 27304 26793 +3 26614 26784 27251 +3 26614 27251 27057 +3 26615 27058 27252 +3 26615 27252 26785 +3 26616 27202 27695 +3 26616 27695 27069 +3 26617 27070 27696 +3 26617 27696 27203 +3 26618 26848 26947 +3 26618 26947 26724 +3 26619 26725 26948 +3 26619 26948 26849 +3 26620 26860 26906 +3 26620 26906 26770 +3 26621 26771 26907 +3 26621 26907 26861 +3 26622 27557 28807 +3 26622 28807 27807 +3 26623 27808 28808 +3 26623 28808 27558 +3 26624 27013 28061 +3 26624 28061 27593 +3 26625 27594 28062 +3 26625 28062 27014 +3 26626 27859 28371 +3 26626 28371 27079 +3 26627 27080 28372 +3 26627 28372 27860 +3 26628 26840 26977 +3 26628 26977 26754 +3 26629 26755 26978 +3 26629 26978 26841 +3 26630 26770 26973 +3 26630 26973 26828 +3 26631 26829 26974 +3 26631 26974 26771 +3 26632 26884 26937 +3 26632 26937 26734 +3 26633 26735 26938 +3 26633 26938 26885 +3 26634 27726 28237 +3 26634 28237 27095 +3 26635 27096 28238 +3 26635 28238 27727 +3 26636 26882 26939 +3 26636 26939 26706 +3 26637 26707 26940 +3 26637 26940 26883 +3 26638 28200 31777 +3 26638 31777 30619 +3 26639 30620 31778 +3 26639 31778 28201 +3 26640 26844 27329 +3 26640 27329 27099 +3 26641 27100 27330 +3 26641 27330 26845 +3 26642 27589 29834 +3 26642 29834 28867 +3 26643 28867 29835 +3 26643 29835 27590 +3 26644 26856 26957 +3 26644 26957 26744 +3 26645 26745 26958 +3 26645 26958 26857 +3 26646 27453 30470 +3 26646 30470 29649 +3 26647 29650 30471 +3 26647 30471 27454 +3 26648 27369 27607 +3 26648 27607 26858 +3 26649 26859 27608 +3 26649 27608 27370 +3 26650 27023 27335 +3 26650 27335 26953 +3 26651 26954 27336 +3 26651 27336 27024 +3 26652 27417 29521 +3 26652 29521 28706 +3 26653 28707 29522 +3 26653 29522 27418 +3 26654 27121 27732 +3 26654 27732 27226 +3 26655 27227 27733 +3 26655 27733 27122 +3 26656 27807 28853 +3 26656 28853 27633 +3 26657 27634 28854 +3 26657 28854 27808 +3 26658 26834 26995 +3 26658 26995 26786 +3 26659 26787 26996 +3 26659 26996 26835 +3 26660 26804 27285 +3 26660 27285 27119 +3 26661 27120 27286 +3 26661 27286 26805 +3 26662 26963 27267 +3 26662 27267 26941 +3 26663 26942 27268 +3 26663 27268 26964 +3 26664 27145 27613 +3 26664 27613 27121 +3 26665 27122 27614 +3 26665 27614 27146 +3 26666 26953 27273 +3 26666 27273 26963 +3 26667 26964 27274 +3 26667 27274 26954 +3 26668 28459 32209 +3 26668 32209 31046 +3 26669 31047 32210 +3 26669 32210 28460 +3 26670 26899 26929 +3 26670 26929 26680 +3 26671 26681 26930 +3 26671 26930 26900 +3 26672 26961 27962 +3 26672 27962 27647 +3 26673 27648 27963 +3 26673 27963 26962 +3 26674 26828 27015 +3 26674 27015 26854 +3 26675 26855 27016 +3 26675 27016 26829 +3 26676 27823 28960 +3 26676 28960 27780 +3 26677 27781 28961 +3 26677 28961 27824 +3 26678 26684 27172 +3 26678 27172 27159 +3 26679 27160 27173 +3 26679 27173 26684 +3 26680 26929 26933 +3 26680 26933 26685 +3 26681 26685 26934 +3 26681 26934 26930 +3 26682 26683 27708 +3 26682 27708 27697 +3 26683 27698 27708 +3 26684 27173 27172 +3 26685 26933 26934 +3 26686 26864 27297 +3 26686 27297 27103 +3 26687 27104 27298 +3 26687 27298 26865 +3 26688 27461 27776 +3 26688 27776 26975 +3 26689 26976 27777 +3 26689 27777 27462 +3 26690 26897 26991 +3 26690 26991 26778 +3 26691 26779 26992 +3 26691 26992 26898 +3 26692 27455 27605 +3 26692 27605 27143 +3 26693 27144 27606 +3 26693 27606 27456 +3 26694 30856 32080 +3 26694 32080 28359 +3 26695 28360 32081 +3 26695 32081 30857 +3 26696 27633 28658 +3 26696 28658 27663 +3 26697 27664 28659 +3 26697 28659 27634 +3 26698 26870 27035 +3 26698 27035 26834 +3 26699 26835 27036 +3 26699 27036 26871 +3 26700 27001 27401 +3 26700 27401 27065 +3 26701 27068 27402 +3 26701 27402 27002 +3 26702 29465 30476 +3 26702 30476 27791 +3 26703 27792 30477 +3 26703 30477 29466 +3 26704 26896 27003 +3 26704 27003 26794 +3 26705 26795 27004 +3 26705 27004 26896 +3 26706 26939 27011 +3 26706 27011 26762 +3 26707 26763 27012 +3 26707 27012 26940 +3 26708 27089 28610 +3 26708 28610 28182 +3 26709 28183 28611 +3 26709 28611 27090 +3 26710 26854 27043 +3 26710 27043 26878 +3 26711 26879 27044 +3 26711 27044 26855 +3 26712 27143 27623 +3 26712 27623 27145 +3 26713 27146 27624 +3 26713 27624 27144 +3 26714 27423 27627 +3 26714 27627 26903 +3 26715 26904 27628 +3 26715 27628 27424 +3 26716 27065 27415 +3 26716 27415 27023 +3 26717 27024 27416 +3 26717 27416 27068 +3 26718 27431 29523 +3 26718 29523 28774 +3 26719 28775 29524 +3 26719 29524 27432 +3 26720 28502 29036 +3 26720 29036 27178 +3 26721 27179 29037 +3 26721 29037 28503 +3 26722 27373 29885 +3 26722 29885 29182 +3 26723 29183 29886 +3 26723 29886 27374 +3 26724 26947 27049 +3 26724 27049 26806 +3 26725 26807 27050 +3 26725 27050 26948 +3 26726 29992 30774 +3 26726 30774 27595 +3 26727 27596 30775 +3 26727 30775 29993 +3 26728 31280 32482 +3 26728 32482 28644 +3 26729 28645 32483 +3 26729 32483 31281 +3 26730 26878 27053 +3 26730 27053 26870 +3 26731 26871 27054 +3 26731 27054 26879 +3 26732 26935 27061 +3 26732 27061 26840 +3 26733 26841 27062 +3 26733 27062 26936 +3 26734 26937 27041 +3 26734 27041 26818 +3 26735 26819 27042 +3 26735 27042 26938 +3 26736 29163 30229 +3 26736 30229 27803 +3 26737 27804 30230 +3 26737 30230 29163 +3 26738 27226 27805 +3 26738 27805 27202 +3 26739 27203 27806 +3 26739 27806 27227 +3 26740 26908 27443 +3 26740 27443 27253 +3 26741 27254 27444 +3 26741 27444 26909 +3 26742 27890 29042 +3 26742 29042 27823 +3 26743 27824 29043 +3 26743 29043 27891 +3 26744 26957 27051 +3 26744 27051 26808 +3 26745 26809 27052 +3 26745 27052 26958 +3 26746 27888 29279 +3 26746 29279 28075 +3 26747 28076 29280 +3 26747 29280 27889 +3 26748 27663 28700 +3 26748 28700 27756 +3 26749 27757 28701 +3 26749 28701 27664 +3 26750 28465 29192 +3 26750 29192 27425 +3 26751 27426 29193 +3 26751 29193 28466 +3 26752 26838 27343 +3 26752 27343 27241 +3 26753 27242 27344 +3 26753 27344 26839 +3 26754 26977 27085 +3 26754 27085 26848 +3 26755 26849 27086 +3 26755 27086 26978 +3 26756 28511 32370 +3 26756 32370 31071 +3 26757 31072 32371 +3 26757 32371 28512 +3 26758 28018 28395 +3 26758 28395 27087 +3 26759 27088 28396 +3 26759 28396 28019 +3 26760 28028 28547 +3 26760 28547 27233 +3 26761 27234 28548 +3 26761 28548 28029 +3 26762 27011 27066 +3 26762 27066 26816 +3 26763 26817 27067 +3 26763 27067 27012 +3 26764 28581 29257 +3 26764 29257 27433 +3 26765 27434 29258 +3 26765 29258 28582 +3 26766 29089 30003 +3 26766 30003 27629 +3 26767 27630 30004 +3 26767 30004 29090 +3 26768 28034 28515 +3 26768 28515 27224 +3 26769 27225 28516 +3 26769 28516 28035 +3 26770 26906 27111 +3 26770 27111 26973 +3 26771 26974 27112 +3 26771 27112 26907 +3 26772 27033 28012 +3 26772 28012 27437 +3 26773 27438 28013 +3 26773 28013 27034 +3 26774 28803 32769 +3 26774 32769 31534 +3 26775 31535 32770 +3 26775 32770 28804 +3 26776 28174 29331 +3 26776 29331 27890 +3 26777 27891 29332 +3 26777 29332 28175 +3 26778 26991 27077 +3 26778 27077 26856 +3 26779 26857 27078 +3 26779 27078 26992 +3 26780 27974 30806 +3 26780 30806 29816 +3 26781 29817 30807 +3 26781 30807 27975 +3 26782 27522 27849 +3 26782 27849 27073 +3 26783 27074 27850 +3 26783 27850 27523 +3 26784 26955 27429 +3 26784 27429 27251 +3 26785 27252 27430 +3 26785 27430 26956 +3 26786 26995 27141 +3 26786 27141 26935 +3 26787 26936 27142 +3 26787 27142 26996 +3 26788 27756 28696 +3 26788 28696 27724 +3 26789 27725 28697 +3 26789 28697 27757 +3 26790 27768 31055 +3 26790 31055 30299 +3 26791 30300 31056 +3 26791 31056 27769 +3 26792 26981 27480 +3 26792 27480 27303 +3 26793 27304 27481 +3 26793 27481 26982 +3 26794 27003 27109 +3 26794 27109 26897 +3 26795 26898 27110 +3 26795 27110 27004 +3 26796 27151 28195 +3 26796 28195 27809 +3 26797 27810 28196 +3 26797 28196 27152 +3 26798 27019 28046 +3 26798 28046 27831 +3 26799 27832 28047 +3 26799 28047 27020 +3 26800 31325 32677 +3 26800 32677 28686 +3 26801 28687 32678 +3 26801 32678 31326 +3 26802 27471 27789 +3 26802 27789 27075 +3 26803 27076 27790 +3 26803 27790 27472 +3 26804 26943 27457 +3 26804 27457 27285 +3 26805 27286 27458 +3 26805 27458 26944 +3 26806 27049 27131 +3 26806 27131 26884 +3 26807 26885 27132 +3 26807 27132 27050 +3 26808 27051 27123 +3 26808 27123 26882 +3 26809 26883 27124 +3 26809 27124 27052 +3 26810 27361 28922 +3 26810 28922 28328 +3 26811 28329 28923 +3 26811 28923 27362 +3 26812 29541 30289 +3 26812 30289 27549 +3 26813 27550 30290 +3 26813 30290 29542 +3 26814 27970 29369 +3 26814 29369 28174 +3 26815 28175 29370 +3 26815 29370 27971 +3 26816 27066 27117 +3 26816 27117 26860 +3 26817 26861 27118 +3 26817 27118 27067 +3 26818 27041 27127 +3 26818 27127 26899 +3 26819 26900 27128 +3 26819 27128 27042 +3 26820 27182 28091 +3 26820 28091 27712 +3 26821 27713 28092 +3 26821 28092 27183 +3 26822 28075 29439 +3 26822 29439 28137 +3 26823 28138 29440 +3 26823 29440 28076 +3 26824 27389 28754 +3 26824 28754 28139 +3 26825 28140 28755 +3 26825 28755 27390 +3 26826 27992 30550 +3 26826 30550 29484 +3 26827 29484 30551 +3 26827 30551 27993 +3 26828 26973 27161 +3 26828 27161 27015 +3 26829 27016 27162 +3 26829 27162 26974 +3 26830 26965 27445 +3 26830 27445 27155 +3 26831 27156 27446 +3 26831 27446 26966 +3 26832 29155 30011 +3 26832 30011 27661 +3 26833 27662 30012 +3 26833 30012 29156 +3 26834 27035 27206 +3 26834 27206 26995 +3 26835 26996 27207 +3 26835 27207 27036 +3 26836 27405 29505 +3 26836 29505 28924 +3 26837 28925 29506 +3 26837 29506 27406 +3 26838 26941 27469 +3 26838 27469 27343 +3 26839 27344 27470 +3 26839 27470 26942 +3 26840 27061 27137 +3 26840 27137 26977 +3 26841 26978 27138 +3 26841 27138 27062 +3 26842 27615 27874 +3 26842 27874 27135 +3 26843 27136 27875 +3 26843 27875 27616 +3 26844 27047 27561 +3 26844 27561 27329 +3 26845 27330 27562 +3 26845 27562 27048 +3 26846 28093 28694 +3 26846 28694 27345 +3 26847 27346 28695 +3 26847 28695 28094 +3 26848 27085 27196 +3 26848 27196 26947 +3 26849 26948 27197 +3 26849 27197 27086 +3 26850 28004 29147 +3 26850 29147 27970 +3 26851 27971 29148 +3 26851 29148 28005 +3 26852 27437 28119 +3 26852 28119 27506 +3 26853 27507 28120 +3 26853 28120 27438 +3 26854 27015 27220 +3 26854 27220 27043 +3 26855 27044 27221 +3 26855 27221 27016 +3 26856 27077 27187 +3 26856 27187 26957 +3 26857 26958 27188 +3 26857 27188 27078 +3 26858 27607 27829 +3 26858 27829 27063 +3 26859 27064 27830 +3 26859 27830 27608 +3 26860 27117 27167 +3 26860 27167 26906 +3 26861 26907 27168 +3 26861 27168 27118 +3 26862 28626 29093 +3 26862 29093 27321 +3 26863 27322 29094 +3 26863 29094 28627 +3 26864 27057 27498 +3 26864 27498 27297 +3 26865 27298 27499 +3 26865 27499 27058 +3 26866 28868 32974 +3 26866 32974 31575 +3 26867 31576 32975 +3 26867 32975 28869 +3 26868 28401 29717 +3 26868 29717 28184 +3 26869 28185 29718 +3 26869 29718 28402 +3 26870 27053 27239 +3 26870 27239 27035 +3 26871 27036 27240 +3 26871 27240 27054 +3 26872 30538 31363 +3 26872 31363 27908 +3 26873 27909 31364 +3 26873 31364 30539 +3 26874 30143 31117 +3 26874 31117 28186 +3 26875 28187 31118 +3 26875 31118 30144 +3 26876 28137 29515 +3 26876 29515 28228 +3 26877 28229 29516 +3 26877 29516 28138 +3 26878 27043 27237 +3 26878 27237 27053 +3 26879 27054 27238 +3 26879 27238 27044 +3 26880 27155 27490 +3 26880 27490 27216 +3 26881 27217 27491 +3 26881 27491 27156 +3 26882 27123 27208 +3 26882 27208 26939 +3 26883 26940 27209 +3 26883 27209 27124 +3 26884 27131 27222 +3 26884 27222 26937 +3 26885 26938 27223 +3 26885 27223 27132 +3 26886 27857 30405 +3 26886 30405 29476 +3 26887 29477 30406 +3 26887 30406 27858 +3 26888 27506 28197 +3 26888 28197 27543 +3 26889 27544 28198 +3 26889 28198 27507 +3 26890 27515 27845 +3 26890 27845 27174 +3 26891 27175 27846 +3 26891 27846 27515 +3 26892 27643 27926 +3 26892 27926 27165 +3 26893 27166 27927 +3 26893 27927 27644 +3 26894 27683 29691 +3 26894 29691 28906 +3 26895 28907 29692 +3 26895 29692 27684 +3 26896 27004 27191 +3 26896 27191 27003 +3 26897 27109 27212 +3 26897 27212 26991 +3 26898 26992 27213 +3 26898 27213 27110 +3 26899 27127 27153 +3 26899 27153 26929 +3 26900 26930 27154 +3 26900 27154 27128 +3 26901 27247 28300 +3 26901 28300 27916 +3 26902 27917 28301 +3 26902 28301 27248 +3 26903 27627 27841 +3 26903 27841 27101 +3 26904 27102 27842 +3 26904 27842 27628 +3 26905 27103 27512 +3 26905 27512 27104 +3 26906 27167 27111 +3 26907 27112 27168 +3 26908 27107 27581 +3 26908 27581 27443 +3 26909 27444 27582 +3 26909 27582 27108 +3 26910 27216 27641 +3 26910 27641 27311 +3 26911 27312 27642 +3 26911 27642 27217 +3 26912 27295 28190 +3 26912 28190 27296 +3 26913 27706 29779 +3 26913 29779 29014 +3 26914 29015 29780 +3 26914 29780 27707 +3 26915 27299 28342 +3 26915 28342 27938 +3 26916 27939 28343 +3 26916 28343 27300 +3 26917 27752 30599 +3 26917 30599 29883 +3 26918 29884 30600 +3 26918 30600 27753 +3 26919 28095 29234 +3 26919 29234 28004 +3 26920 28005 29235 +3 26920 29235 28096 +3 26921 28160 28569 +3 26921 28569 27287 +3 26922 27288 28570 +3 26922 28570 28161 +3 26923 29811 30864 +3 26923 30864 28204 +3 26924 28205 30865 +3 26924 30865 29811 +3 26925 28218 28230 +3 26925 28230 26926 +3 26926 28230 28219 +3 26927 27543 28393 +3 26927 28393 27740 +3 26928 27741 28394 +3 26928 28394 27544 +3 26929 27153 27180 +3 26929 27180 26933 +3 26930 26934 27181 +3 26930 27181 27154 +3 26931 28228 29856 +3 26931 29856 28541 +3 26932 28542 29857 +3 26932 29857 28229 +3 26933 27180 27186 +3 26933 27186 26934 +3 26934 27186 27181 +3 26935 27141 27281 +3 26935 27281 27061 +3 26936 27062 27282 +3 26936 27282 27142 +3 26937 27222 27271 +3 26937 27271 27041 +3 26938 27042 27272 +3 26938 27272 27223 +3 26939 27208 27265 +3 26939 27265 27011 +3 26940 27012 27266 +3 26940 27266 27209 +3 26941 27267 27563 +3 26941 27563 27469 +3 26942 27470 27564 +3 26942 27564 27268 +3 26943 27093 27591 +3 26943 27591 27457 +3 26944 27458 27592 +3 26944 27592 27094 +3 26945 28451 29923 +3 26945 29923 28401 +3 26946 28402 29924 +3 26946 29924 28452 +3 26947 27196 27293 +3 26947 27293 27049 +3 26948 27050 27294 +3 26948 27294 27197 +3 26949 28044 31658 +3 26949 31658 30788 +3 26950 30789 31659 +3 26950 31659 28045 +3 26951 27882 30411 +3 26951 30411 29553 +3 26952 29554 30412 +3 26952 30412 27883 +3 26953 27335 27685 +3 26953 27685 27273 +3 26954 27274 27686 +3 26954 27686 27336 +3 26955 27119 27603 +3 26955 27603 27429 +3 26956 27430 27604 +3 26956 27604 27120 +3 26957 27187 27283 +3 26957 27283 27051 +3 26958 27052 27284 +3 26958 27284 27188 +3 26959 27365 28948 +3 26959 28948 28523 +3 26960 28524 28949 +3 26960 28949 27366 +3 26961 27261 28284 +3 26961 28284 27962 +3 26962 27963 28285 +3 26962 28285 27262 +3 26963 27273 27577 +3 26963 27577 27267 +3 26964 27268 27578 +3 26964 27578 27274 +3 26965 27099 27575 +3 26965 27575 27445 +3 26966 27446 27576 +3 26966 27576 27100 +3 26967 28385 31459 +3 26967 31459 30423 +3 26968 30424 31460 +3 26968 31460 28386 +3 26969 27529 29133 +3 26969 29133 28543 +3 26970 28544 29134 +3 26970 29134 27530 +3 26971 27764 28429 +3 26971 28429 27621 +3 26972 27622 28430 +3 26972 28430 27765 +3 26973 27111 27313 +3 26973 27313 27161 +3 26974 27162 27314 +3 26974 27314 27112 +3 26975 27776 28059 +3 26975 28059 27259 +3 26976 27260 28060 +3 26976 28060 27777 +3 26977 27137 27263 +3 26977 27263 27085 +3 26978 27086 27264 +3 26978 27264 27138 +3 26979 28541 29899 +3 26979 29899 28320 +3 26980 28323 29900 +3 26980 29900 28542 +3 26981 27159 27673 +3 26981 27673 27480 +3 26982 27481 27674 +3 26982 27674 27160 +3 26983 28055 29216 +3 26983 29216 28095 +3 26984 28096 29217 +3 26984 29217 28056 +3 26985 27510 29099 +3 26985 29099 28549 +3 26986 28550 29100 +3 26986 29100 27511 +3 26987 27621 28296 +3 26987 28296 27665 +3 26988 27666 28297 +3 26988 28297 27622 +3 26989 27486 27918 +3 26989 27918 27423 +3 26990 27424 27919 +3 26990 27919 27487 +3 26991 27212 27291 +3 26991 27291 27077 +3 26992 27078 27292 +3 26992 27292 27213 +3 26993 29343 29980 +3 26993 29980 27617 +3 26994 27618 29981 +3 26994 29981 29344 +3 26995 27206 27333 +3 26995 27333 27141 +3 26996 27142 27334 +3 26996 27334 27207 +3 26997 28785 29463 +3 26997 29463 27671 +3 26998 27672 29464 +3 26998 29464 28786 +3 26999 28457 30177 +3 26999 30177 28702 +3 27000 28703 30178 +3 27000 30178 28458 +3 27001 27311 27734 +3 27001 27734 27401 +3 27002 27402 27737 +3 27002 27737 27312 +3 27003 27191 27307 +3 27003 27307 27109 +3 27004 27110 27308 +3 27004 27308 27191 +3 27005 28577 29287 +3 27005 29287 27689 +3 27006 27690 29288 +3 27006 29288 28578 +3 27007 29866 30776 +3 27007 30776 28085 +3 27008 28086 30777 +3 27008 30777 29867 +3 27009 28405 31159 +3 27009 31159 30117 +3 27010 30117 31160 +3 27010 31160 28406 +3 27011 27265 27323 +3 27011 27323 27066 +3 27012 27067 27324 +3 27012 27324 27266 +3 27013 27419 28483 +3 27013 28483 28061 +3 27014 28062 28484 +3 27014 28484 27420 +3 27015 27161 27347 +3 27015 27347 27220 +3 27016 27221 27348 +3 27016 27348 27162 +3 27017 30220 30910 +3 27017 30910 27912 +3 27018 27913 30911 +3 27018 30911 30221 +3 27019 27659 28278 +3 27019 28278 28046 +3 27020 28047 28279 +3 27020 28279 27660 +3 27021 28320 29653 +3 27021 29653 28353 +3 27022 28354 29654 +3 27022 29654 28323 +3 27023 27415 27754 +3 27023 27754 27335 +3 27024 27336 27755 +3 27024 27755 27416 +3 27025 28553 29995 +3 27025 29995 28451 +3 27026 28452 29996 +3 27026 29996 28554 +3 27027 27569 29598 +3 27027 29598 29054 +3 27028 29055 29599 +3 27028 29599 27570 +3 27029 31007 31959 +3 27029 31959 28222 +3 27030 28223 31960 +3 27030 31960 31008 +3 27031 27665 28310 +3 27031 28310 27659 +3 27032 27660 28311 +3 27032 28311 27666 +3 27033 27315 28316 +3 27033 28316 28012 +3 27034 28013 28317 +3 27034 28317 27316 +3 27035 27239 27397 +3 27035 27397 27206 +3 27036 27207 27398 +3 27036 27398 27240 +3 27037 27894 28638 +3 27037 28638 27385 +3 27038 27386 28639 +3 27038 28639 27895 +3 27039 29307 30193 +3 27039 30193 27920 +3 27040 27921 30194 +3 27040 30194 29308 +3 27041 27271 27355 +3 27041 27355 27127 +3 27042 27128 27356 +3 27042 27356 27272 +3 27043 27220 27395 +3 27043 27395 27237 +3 27044 27238 27396 +3 27044 27396 27221 +3 27045 27524 28000 +3 27045 28000 27486 +3 27046 27487 28001 +3 27046 28001 27525 +3 27047 27253 27786 +3 27047 27786 27561 +3 27048 27562 27787 +3 27048 27787 27254 +3 27049 27293 27379 +3 27049 27379 27131 +3 27050 27132 27380 +3 27050 27380 27294 +3 27051 27283 27363 +3 27051 27363 27123 +3 27052 27124 27364 +3 27052 27364 27284 +3 27053 27237 27393 +3 27053 27393 27239 +3 27054 27240 27394 +3 27054 27394 27238 +3 27055 30675 31791 +3 27055 31791 28587 +3 27056 28588 31792 +3 27056 31792 30676 +3 27057 27251 27722 +3 27057 27722 27498 +3 27058 27499 27723 +3 27058 27723 27252 +3 27059 29422 30272 +3 27059 30272 27944 +3 27060 27945 30273 +3 27060 30273 29423 +3 27061 27281 27353 +3 27061 27353 27137 +3 27062 27138 27354 +3 27062 27354 27282 +3 27063 27829 28026 +3 27063 28026 27277 +3 27064 27278 28027 +3 27064 28027 27830 +3 27065 27401 27795 +3 27065 27795 27415 +3 27066 27323 27387 +3 27066 27387 27117 +3 27067 27118 27388 +3 27067 27388 27324 +3 27068 27416 27796 +3 27068 27796 27402 +3 27069 27695 28170 +3 27069 28170 27524 +3 27070 27525 28171 +3 27070 28171 27696 +3 27071 27740 28531 +3 27071 28531 27764 +3 27072 27765 28534 +3 27072 28534 27741 +3 27073 27849 28149 +3 27073 28149 27357 +3 27074 27358 28150 +3 27074 28150 27850 +3 27075 27789 28057 +3 27075 28057 27339 +3 27076 27340 28058 +3 27076 28058 27790 +3 27077 27291 27421 +3 27077 27421 27187 +3 27078 27188 27422 +3 27078 27422 27292 +3 27079 28371 28863 +3 27079 28863 27520 +3 27080 27521 28864 +3 27080 28864 28372 +3 27081 28916 30351 +3 27081 30351 28553 +3 27082 28554 30352 +3 27082 30352 28917 +3 27083 29943 30780 +3 27083 30780 28109 +3 27084 28110 30781 +3 27084 30781 29944 +3 27085 27263 27367 +3 27085 27367 27196 +3 27086 27197 27368 +3 27086 27368 27264 +3 27087 28395 28682 +3 27087 28682 27349 +3 27088 27350 28683 +3 27088 28683 28396 +3 27089 27720 29313 +3 27089 29313 28610 +3 27090 28611 29314 +3 27090 29314 27721 +3 27091 28353 29723 +3 27091 29723 28447 +3 27092 28448 29724 +3 27092 29724 28354 +3 27093 27241 27750 +3 27093 27750 27591 +3 27094 27592 27751 +3 27094 27751 27242 +3 27095 28237 28716 +3 27095 28716 27567 +3 27096 27568 28717 +3 27096 28717 28238 +3 27097 28702 30357 +3 27097 30357 28794 +3 27098 28795 30358 +3 27098 30358 28703 +3 27099 27329 27833 +3 27099 27833 27575 +3 27100 27576 27834 +3 27100 27834 27330 +3 27101 27841 28212 +3 27101 28212 27461 +3 27102 27462 28213 +3 27102 28213 27842 +3 27103 27297 27746 +3 27103 27746 27512 +3 27104 27512 27747 +3 27104 27747 27298 +3 27105 30384 31470 +3 27105 31470 28606 +3 27106 28607 31471 +3 27106 31471 30384 +3 27107 27303 27801 +3 27107 27801 27581 +3 27108 27582 27802 +3 27108 27802 27304 +3 27109 27307 27411 +3 27109 27411 27212 +3 27110 27213 27412 +3 27110 27412 27308 +3 27111 27167 27377 +3 27111 27377 27313 +3 27112 27314 27378 +3 27112 27378 27168 +3 27113 28375 32257 +3 27113 32257 31270 +3 27114 31271 32258 +3 27114 32258 28376 +3 27115 28089 31224 +3 27115 31224 30494 +3 27116 30495 31225 +3 27116 31225 28090 +3 27117 27387 27441 +3 27117 27441 27167 +3 27118 27168 27442 +3 27118 27442 27388 +3 27119 27285 27817 +3 27119 27817 27603 +3 27120 27604 27818 +3 27120 27818 27286 +3 27121 27613 28231 +3 27121 28231 27732 +3 27122 27733 28232 +3 27122 28232 27614 +3 27123 27363 27459 +3 27123 27459 27208 +3 27124 27209 27460 +3 27124 27460 27364 +3 27125 28318 31111 +3 27125 31111 30227 +3 27126 30228 31112 +3 27126 31112 28319 +3 27127 27355 27407 +3 27127 27407 27153 +3 27128 27154 27408 +3 27128 27408 27356 +3 27129 29038 30518 +3 27129 30518 28756 +3 27130 28757 30519 +3 27130 30519 29039 +3 27131 27379 27467 +3 27131 27467 27222 +3 27132 27223 27468 +3 27132 27468 27380 +3 27133 28664 30380 +3 27133 30380 28916 +3 27134 28917 30381 +3 27134 30381 28665 +3 27135 27874 28125 +3 27135 28125 27369 +3 27136 27370 28126 +3 27136 28126 27875 +3 27137 27353 27435 +3 27137 27435 27263 +3 27138 27264 27436 +3 27138 27436 27354 +3 27139 27851 30391 +3 27139 30391 29741 +3 27140 29742 30392 +3 27140 30392 27852 +3 27141 27333 27484 +3 27141 27484 27281 +3 27142 27282 27485 +3 27142 27485 27334 +3 27143 27605 28097 +3 27143 28097 27623 +3 27144 27624 28098 +3 27144 28098 27606 +3 27145 27623 28103 +3 27145 28103 27613 +3 27146 27614 28104 +3 27146 28104 27624 +3 27147 28791 32103 +3 27147 32103 30938 +3 27148 30939 32104 +3 27148 32104 28792 +3 27149 27994 28766 +3 27149 28766 27894 +3 27150 27895 28767 +3 27150 28767 27995 +3 27151 27551 28620 +3 27151 28620 28195 +3 27152 28196 28621 +3 27152 28621 27552 +3 27153 27407 27427 +3 27153 27427 27180 +3 27154 27181 27428 +3 27154 27428 27408 +3 27155 27445 27799 +3 27155 27799 27490 +3 27156 27491 27800 +3 27156 27800 27446 +3 27157 27619 29157 +3 27157 29157 28672 +3 27158 28673 29158 +3 27158 29158 27620 +3 27159 27172 27699 +3 27159 27699 27673 +3 27160 27674 27700 +3 27160 27700 27173 +3 27161 27313 27502 +3 27161 27502 27347 +3 27162 27348 27503 +3 27162 27503 27314 +3 27163 28447 29709 +3 27163 29709 28423 +3 27164 28424 29710 +3 27164 29710 28448 +3 27165 27926 27946 +3 27165 27946 27171 +3 27166 27171 27947 +3 27166 27947 27927 +3 27167 27441 27377 +3 27168 27378 27442 +3 27169 27170 28750 +3 27169 28750 28736 +3 27170 28737 28750 +3 27171 27946 27947 +3 27172 27173 27709 +3 27172 27709 27699 +3 27173 27700 27709 +3 27174 27845 28143 +3 27174 28143 27471 +3 27175 27472 28144 +3 27175 28144 27846 +3 27176 28794 30399 +3 27176 30399 28898 +3 27177 28899 30400 +3 27177 30400 28795 +3 27178 29036 29511 +3 27178 29511 27681 +3 27179 27682 29512 +3 27179 29512 29037 +3 27180 27427 27451 +3 27180 27451 27186 +3 27181 27186 27452 +3 27181 27452 27428 +3 27182 27553 28508 +3 27182 28508 28091 +3 27183 28092 28509 +3 27183 28509 27554 +3 27184 29050 29711 +3 27184 29711 27868 +3 27185 27869 29712 +3 27185 29712 29051 +3 27186 27451 27452 +3 27187 27421 27504 +3 27187 27504 27283 +3 27188 27284 27505 +3 27188 27505 27422 +3 27189 27950 30009 +3 27189 30009 29239 +3 27190 29240 30010 +3 27190 30010 27951 +3 27191 27308 27479 +3 27191 27479 27307 +3 27192 28022 28865 +3 27192 28865 27994 +3 27193 27995 28866 +3 27193 28866 28023 +3 27194 28698 30141 +3 27194 30141 28664 +3 27195 28665 30142 +3 27195 30142 28699 +3 27196 27367 27477 +3 27196 27477 27293 +3 27197 27294 27478 +3 27197 27478 27368 +3 27198 28210 30571 +3 27198 30571 29697 +3 27199 29698 30572 +3 27199 30572 28211 +3 27200 31528 32549 +3 27200 32549 28517 +3 27201 28518 32550 +3 27201 32550 31529 +3 27202 27805 28304 +3 27202 28304 27695 +3 27203 27696 28305 +3 27203 28305 27806 +3 27204 27984 29805 +3 27204 29805 29008 +3 27205 29009 29806 +3 27205 29806 27985 +3 27206 27397 27539 +3 27206 27539 27333 +3 27207 27334 27540 +3 27207 27540 27398 +3 27208 27459 27508 +3 27208 27508 27265 +3 27209 27266 27509 +3 27209 27509 27460 +3 27210 28815 31771 +3 27210 31771 30618 +3 27211 30618 31772 +3 27211 31772 28816 +3 27212 27411 27492 +3 27212 27492 27291 +3 27213 27292 27493 +3 27213 27493 27412 +3 27214 29056 29683 +3 27214 29683 27847 +3 27215 27848 29684 +3 27215 29684 29057 +3 27216 27490 27930 +3 27216 27930 27641 +3 27217 27642 27931 +3 27217 27931 27491 +3 27218 29461 30073 +3 27218 30073 27819 +3 27219 27820 30074 +3 27219 30074 29462 +3 27220 27347 27541 +3 27220 27541 27395 +3 27221 27396 27542 +3 27221 27542 27348 +3 27222 27467 27513 +3 27222 27513 27271 +3 27223 27272 27514 +3 27223 27514 27468 +3 27224 28515 28976 +3 27224 28976 27653 +3 27225 27654 28977 +3 27225 28977 28516 +3 27226 27732 28314 +3 27226 28314 27805 +3 27227 27806 28315 +3 27227 28315 27733 +3 27228 28351 31115 +3 27228 31115 30309 +3 27229 30310 31116 +3 27229 31116 28352 +3 27230 27727 28855 +3 27230 28855 27726 +3 27231 28226 30637 +3 27231 30637 29838 +3 27232 29839 30638 +3 27232 30638 28227 +3 27233 28547 29034 +3 27233 29034 27730 +3 27234 27731 29035 +3 27234 29035 28548 +3 27235 30746 31542 +3 27235 31542 28276 +3 27236 28277 31543 +3 27236 31543 30747 +3 27237 27395 27555 +3 27237 27555 27393 +3 27238 27394 27556 +3 27238 27556 27396 +3 27239 27393 27559 +3 27239 27559 27397 +3 27240 27398 27560 +3 27240 27560 27394 +3 27241 27343 27861 +3 27241 27861 27750 +3 27242 27751 27862 +3 27242 27862 27344 +3 27243 28261 29085 +3 27243 29085 28022 +3 27244 28023 29086 +3 27244 29086 28262 +3 27245 29097 30683 +3 27245 30683 29038 +3 27246 29039 30684 +3 27246 30684 29098 +3 27247 27647 28654 +3 27247 28654 28300 +3 27248 28301 28655 +3 27248 28655 27648 +3 27249 28898 30705 +3 27249 30705 29281 +3 27250 29282 30706 +3 27250 30706 28899 +3 27251 27429 27906 +3 27251 27906 27722 +3 27252 27723 27907 +3 27252 27907 27430 +3 27253 27443 27966 +3 27253 27966 27786 +3 27254 27787 27967 +3 27254 27967 27444 +3 27255 31191 32419 +3 27255 32419 28978 +3 27256 28979 32420 +3 27256 32420 31192 +3 27257 30512 31483 +3 27257 31483 28545 +3 27258 28546 31484 +3 27258 31484 30513 +3 27259 28059 28369 +3 27259 28369 27522 +3 27260 27523 28370 +3 27260 28370 28060 +3 27261 27537 28583 +3 27261 28583 28284 +3 27262 28285 28584 +3 27262 28584 27538 +3 27263 27435 27545 +3 27263 27545 27367 +3 27264 27368 27546 +3 27264 27546 27436 +3 27265 27508 27587 +3 27265 27587 27323 +3 27266 27324 27588 +3 27266 27588 27509 +3 27267 27577 27886 +3 27267 27886 27563 +3 27268 27564 27887 +3 27268 27887 27578 +3 27269 29062 30854 +3 27269 30854 29333 +3 27270 29334 30855 +3 27270 30855 29063 +3 27271 27513 27585 +3 27271 27585 27355 +3 27272 27356 27586 +3 27272 27586 27514 +3 27273 27685 28002 +3 27273 28002 27577 +3 27274 27578 28003 +3 27274 28003 27686 +3 27275 28845 30223 +3 27275 30223 28698 +3 27276 28699 30224 +3 27276 30224 28846 +3 27277 28026 28241 +3 27277 28241 27455 +3 27278 27456 28242 +3 27278 28242 28027 +3 27279 28678 32835 +3 27279 32835 31751 +3 27280 31752 32836 +3 27280 32836 28679 +3 27281 27484 27571 +3 27281 27571 27353 +3 27282 27354 27572 +3 27282 27572 27485 +3 27283 27504 27609 +3 27283 27609 27363 +3 27284 27364 27610 +3 27284 27610 27505 +3 27285 27457 27968 +3 27285 27968 27817 +3 27286 27818 27969 +3 27286 27969 27458 +3 27287 28569 28954 +3 27287 28954 27679 +3 27288 27680 28955 +3 27288 28955 28570 +3 27289 30135 30744 +3 27289 30744 28071 +3 27290 28072 30745 +3 27290 30745 30136 +3 27291 27492 27635 +3 27291 27635 27421 +3 27292 27422 27636 +3 27292 27636 27493 +3 27293 27477 27579 +3 27293 27579 27379 +3 27294 27380 27580 +3 27294 27580 27478 +3 27295 27712 28612 +3 27295 28612 28190 +3 27296 28190 28613 +3 27296 28613 27713 +3 27297 27498 27940 +3 27297 27940 27746 +3 27298 27747 27941 +3 27298 27941 27499 +3 27299 27697 28722 +3 27299 28722 28342 +3 27300 28343 28723 +3 27300 28723 27698 +3 27301 28131 29141 +3 27301 29141 28290 +3 27302 28291 29142 +3 27302 29142 28132 +3 27303 27480 27982 +3 27303 27982 27801 +3 27304 27802 27983 +3 27304 27983 27481 +3 27305 30851 32070 +3 27305 32070 29004 +3 27306 29005 32071 +3 27306 32071 30851 +3 27307 27479 27599 +3 27307 27599 27411 +3 27308 27412 27600 +3 27308 27600 27479 +3 27309 29281 30756 +3 27309 30756 29016 +3 27310 29017 30757 +3 27310 30757 29282 +3 27311 27641 28040 +3 27311 28040 27734 +3 27312 27737 28041 +3 27312 28041 27642 +3 27313 27377 27583 +3 27313 27583 27502 +3 27314 27503 27584 +3 27314 27584 27378 +3 27315 27593 28604 +3 27315 28604 28316 +3 27316 28317 28605 +3 27316 28605 27594 +3 27317 28188 28964 +3 27317 28964 28131 +3 27318 28132 28965 +3 27318 28965 28189 +3 27319 27758 29243 +3 27319 29243 28357 +3 27320 28358 29244 +3 27320 29244 27759 +3 27321 29093 29925 +3 27321 29925 28042 +3 27322 28043 29926 +3 27322 29926 29094 +3 27323 27587 27645 +3 27323 27645 27387 +3 27324 27388 27646 +3 27324 27646 27588 +3 27325 28441 31838 +3 27325 31838 30983 +3 27326 30984 31839 +3 27326 31839 28442 +3 27327 29212 30760 +3 27327 30760 29097 +3 27328 29098 30761 +3 27328 30761 29213 +3 27329 27561 28065 +3 27329 28065 27833 +3 27330 27834 28066 +3 27330 28066 27562 +3 27331 29176 32732 +3 27331 32732 31440 +3 27332 31441 32733 +3 27332 32733 29177 +3 27333 27539 27704 +3 27333 27704 27484 +3 27334 27485 27705 +3 27334 27705 27540 +3 27335 27754 28079 +3 27335 28079 27685 +3 27336 27686 28080 +3 27336 28080 27755 +3 27337 30583 31489 +3 27337 31489 28585 +3 27338 28586 31490 +3 27338 31490 30584 +3 27339 28057 28349 +3 27339 28349 27615 +3 27340 27616 28350 +3 27340 28350 28058 +3 27341 30096 30946 +3 27341 30946 28445 +3 27342 28446 30947 +3 27342 30947 30097 +3 27343 27469 27980 +3 27343 27980 27861 +3 27344 27862 27981 +3 27344 27981 27470 +3 27345 28694 29214 +3 27345 29214 27859 +3 27346 27860 29215 +3 27346 29215 28695 +3 27347 27502 27714 +3 27347 27714 27541 +3 27348 27542 27715 +3 27348 27715 27503 +3 27349 28682 28950 +3 27349 28950 28178 +3 27350 28179 28951 +3 27350 28951 28683 +3 27351 28782 30209 +3 27351 30209 28845 +3 27352 28846 30210 +3 27352 30210 28783 +3 27353 27571 27657 +3 27353 27657 27435 +3 27354 27436 27658 +3 27354 27658 27572 +3 27355 27585 27631 +3 27355 27631 27407 +3 27356 27408 27632 +3 27356 27632 27586 +3 27357 28149 28435 +3 27357 28435 27643 +3 27358 27644 28436 +3 27358 28436 28150 +3 27359 29016 30540 +3 27359 30540 29058 +3 27360 29059 30541 +3 27360 30541 29017 +3 27361 27914 29480 +3 27361 29480 28922 +3 27362 28923 29481 +3 27362 29481 27915 +3 27363 27609 27702 +3 27363 27702 27459 +3 27364 27460 27703 +3 27364 27703 27610 +3 27365 27724 29301 +3 27365 29301 28948 +3 27366 28949 29302 +3 27366 29302 27725 +3 27367 27545 27669 +3 27367 27669 27477 +3 27368 27478 27670 +3 27368 27670 27546 +3 27369 28125 28379 +3 27369 28379 27607 +3 27370 27608 28380 +3 27370 28380 28126 +3 27371 28780 31834 +3 27371 31834 30802 +3 27372 30803 31835 +3 27372 31835 28781 +3 27373 28063 30484 +3 27373 30484 29885 +3 27374 29886 30485 +3 27374 30485 28064 +3 27375 30235 31005 +3 27375 31005 28477 +3 27376 28478 31006 +3 27376 31006 30236 +3 27377 27441 27651 +3 27377 27651 27583 +3 27378 27584 27652 +3 27378 27652 27442 +3 27379 27579 27677 +3 27379 27677 27467 +3 27380 27468 27678 +3 27380 27678 27580 +3 27381 29673 30464 +3 27381 30464 28263 +3 27382 28264 30465 +3 27382 30465 29674 +3 27383 28178 28990 +3 27383 28990 28188 +3 27384 28189 28991 +3 27384 28991 28179 +3 27385 28638 29002 +3 27385 29002 27760 +3 27386 27761 29003 +3 27386 29003 28639 +3 27387 27645 27710 +3 27387 27710 27441 +3 27388 27442 27711 +3 27388 27711 27646 +3 27389 27960 29355 +3 27389 29355 28754 +3 27390 28755 29356 +3 27390 29356 27961 +3 27391 29333 31019 +3 27391 31019 29416 +3 27392 29417 31020 +3 27392 31020 29334 +3 27393 27555 27738 +3 27393 27738 27559 +3 27394 27560 27739 +3 27394 27739 27556 +3 27395 27541 27742 +3 27395 27742 27555 +3 27396 27556 27743 +3 27396 27743 27542 +3 27397 27559 27744 +3 27397 27744 27539 +3 27398 27540 27745 +3 27398 27745 27560 +3 27399 29418 30295 +3 27399 30295 28282 +3 27400 28283 30296 +3 27400 30296 29419 +3 27401 27734 28107 +3 27401 28107 27795 +3 27402 27796 28108 +3 27402 28108 27737 +3 27403 29208 32364 +3 27403 32364 31070 +3 27404 31070 32365 +3 27404 32365 29209 +3 27405 27958 30047 +3 27405 30047 29505 +3 27406 29506 30048 +3 27406 30048 27959 +3 27407 27631 27667 +3 27407 27667 27427 +3 27408 27428 27668 +3 27408 27668 27632 +3 27409 29637 31087 +3 27409 31087 29212 +3 27410 29213 31088 +3 27410 31088 29638 +3 27411 27599 27716 +3 27411 27716 27492 +3 27412 27493 27717 +3 27412 27717 27600 +3 27413 29629 31183 +3 27413 31183 29337 +3 27414 29338 31184 +3 27414 31184 29630 +3 27415 27795 28115 +3 27415 28115 27754 +3 27416 27755 28116 +3 27416 28116 27796 +3 27417 28202 30274 +3 27417 30274 29521 +3 27418 29522 30275 +3 27418 30275 28203 +3 27419 27809 28914 +3 27419 28914 28483 +3 27420 28484 28915 +3 27420 28915 27810 +3 27421 27635 27770 +3 27421 27770 27504 +3 27422 27505 27771 +3 27422 27771 27636 +3 27423 27918 28373 +3 27423 28373 27627 +3 27424 27628 28374 +3 27424 28374 27919 +3 27425 29192 29745 +3 27425 29745 27954 +3 27426 27955 29746 +3 27426 29746 29193 +3 27427 27667 27691 +3 27427 27691 27451 +3 27428 27452 27692 +3 27428 27692 27668 +3 27429 27603 28081 +3 27429 28081 27906 +3 27430 27907 28082 +3 27430 28082 27604 +3 27431 28172 30237 +3 27431 30237 29523 +3 27432 29524 30238 +3 27432 30238 28173 +3 27433 29257 29278 +3 27433 29278 27434 +3 27434 29278 29258 +3 27435 27657 27735 +3 27435 27735 27545 +3 27436 27546 27736 +3 27436 27736 27658 +3 27437 28012 28712 +3 27437 28712 28119 +3 27438 28120 28713 +3 27438 28713 28013 +3 27439 28290 29263 +3 27439 29263 28261 +3 27440 28262 29264 +3 27440 29264 28291 +3 27441 27710 27651 +3 27442 27652 27711 +3 27443 27581 28123 +3 27443 28123 27966 +3 27444 27967 28124 +3 27444 28124 27582 +3 27445 27575 28049 +3 27445 28049 27799 +3 27446 27800 28050 +3 27446 28050 27576 +3 27447 31260 32119 +3 27447 32119 28646 +3 27448 28647 32120 +3 27448 32120 31261 +3 27449 31680 33047 +3 27449 33047 29373 +3 27450 29374 33048 +3 27450 33048 31681 +3 27451 27691 27701 +3 27451 27701 27452 +3 27452 27701 27692 +3 27453 28306 31085 +3 27453 31085 30470 +3 27454 30471 31086 +3 27454 31086 28307 +3 27455 28241 28411 +3 27455 28411 27605 +3 27456 27606 28412 +3 27456 28412 28242 +3 27457 27591 28121 +3 27457 28121 27968 +3 27458 27969 28122 +3 27458 28122 27592 +3 27459 27702 27782 +3 27459 27782 27508 +3 27460 27509 27783 +3 27460 27783 27703 +3 27461 28212 28555 +3 27461 28555 27776 +3 27462 27777 28556 +3 27462 28556 28213 +3 27463 29058 30605 +3 27463 30605 29180 +3 27464 29181 30606 +3 27464 30606 29059 +3 27465 28357 29398 +3 27465 29398 28473 +3 27466 28474 29399 +3 27466 29399 28358 +3 27467 27677 27762 +3 27467 27762 27513 +3 27468 27514 27763 +3 27468 27763 27678 +3 27469 27563 28087 +3 27469 28087 27980 +3 27470 27981 28088 +3 27470 28088 27564 +3 27471 28143 28453 +3 27471 28453 27789 +3 27472 27790 28454 +3 27472 28454 28144 +3 27473 29347 31137 +3 27473 31137 29637 +3 27474 29638 31138 +3 27474 31138 29348 +3 27475 28827 31842 +3 27475 31842 30886 +3 27476 30887 31843 +3 27476 31843 28828 +3 27477 27669 27784 +3 27477 27784 27579 +3 27478 27580 27785 +3 27478 27785 27670 +3 27479 27600 27788 +3 27479 27788 27599 +3 27480 27673 28168 +3 27480 28168 27982 +3 27481 27983 28169 +3 27481 28169 27674 +3 27482 29416 31101 +3 27482 31101 29531 +3 27483 29532 31102 +3 27483 31102 29417 +3 27484 27704 27797 +3 27484 27797 27571 +3 27485 27572 27798 +3 27485 27798 27705 +3 27486 28000 28443 +3 27486 28443 27918 +3 27487 27919 28444 +3 27487 28444 28001 +3 27488 31312 32671 +3 27488 32671 29400 +3 27489 29401 32672 +3 27489 32672 31312 +3 27490 27799 28253 +3 27490 28253 27930 +3 27491 27931 28254 +3 27491 28254 27800 +3 27492 27716 27843 +3 27492 27843 27635 +3 27493 27636 27844 +3 27493 27844 27717 +3 27494 31064 32166 +3 27494 32166 29006 +3 27495 29007 32167 +3 27495 32167 31065 +3 27496 28473 29482 +3 27496 29482 28535 +3 27497 28536 29483 +3 27497 29483 28474 +3 27498 27722 28162 +3 27498 28162 27940 +3 27499 27941 28163 +3 27499 28163 27723 +3 27500 28714 31304 +3 27500 31304 30432 +3 27501 30433 31305 +3 27501 31305 28715 +3 27502 27583 27793 +3 27502 27793 27714 +3 27503 27715 27794 +3 27503 27794 27584 +3 27504 27770 27855 +3 27504 27855 27609 +3 27505 27610 27856 +3 27505 27856 27771 +3 27506 28119 28829 +3 27506 28829 28197 +3 27507 28198 28830 +3 27507 28830 28120 +3 27508 27782 27839 +3 27508 27839 27587 +3 27509 27588 27840 +3 27509 27840 27783 +3 27510 28051 29639 +3 27510 29639 29099 +3 27511 29100 29640 +3 27511 29640 28052 +3 27512 27746 28159 +3 27512 28159 27747 +3 27513 27762 27813 +3 27513 27813 27585 +3 27514 27586 27814 +3 27514 27814 27763 +3 27515 27846 28499 +3 27515 28499 27845 +3 27516 29567 33389 +3 27516 33389 31939 +3 27517 31940 33390 +3 27517 33390 29568 +3 27518 29719 31373 +3 27518 31373 29629 +3 27519 29630 31374 +3 27519 31374 29720 +3 27520 28863 29365 +3 27520 29365 28028 +3 27521 28029 29366 +3 27521 29366 28864 +3 27522 28369 28599 +3 27522 28599 27849 +3 27523 27850 28600 +3 27523 28600 28370 +3 27524 28170 28670 +3 27524 28670 28000 +3 27525 28001 28671 +3 27525 28671 28171 +3 27526 28139 29473 +3 27526 29473 28140 +3 27527 28746 31397 +3 27527 31397 30556 +3 27528 30557 31398 +3 27528 31398 28747 +3 27529 28145 29687 +3 27529 29687 29133 +3 27530 29134 29688 +3 27530 29688 28146 +3 27531 29382 30912 +3 27531 30912 29347 +3 27532 29348 30913 +3 27532 30913 29383 +3 27533 29610 31532 +3 27533 31532 29939 +3 27534 29940 31533 +3 27534 31533 29611 +3 27535 28831 32441 +3 27535 32441 31538 +3 27536 31539 32442 +3 27536 32442 28832 +3 27537 27831 28886 +3 27537 28886 28583 +3 27538 28584 28887 +3 27538 28887 27832 +3 27539 27744 27872 +3 27539 27872 27704 +3 27540 27705 27873 +3 27540 27873 27745 +3 27541 27714 27876 +3 27541 27876 27742 +3 27542 27743 27877 +3 27542 27877 27715 +3 27543 28197 29046 +3 27543 29046 28393 +3 27544 28394 29047 +3 27544 29047 28198 +3 27545 27735 27837 +3 27545 27837 27669 +3 27546 27670 27838 +3 27546 27838 27736 +3 27547 29180 30595 +3 27547 30595 29117 +3 27548 29118 30596 +3 27548 30596 29181 +3 27549 30289 30843 +3 27549 30843 28330 +3 27550 28331 30844 +3 27550 30844 30290 +3 27551 27938 29020 +3 27551 29020 28620 +3 27552 28621 29021 +3 27552 29021 27939 +3 27553 27916 28912 +3 27553 28912 28508 +3 27554 28509 28913 +3 27554 28913 27917 +3 27555 27742 27892 +3 27555 27892 27738 +3 27556 27739 27893 +3 27556 27893 27743 +3 27557 28535 29777 +3 27557 29777 28807 +3 27558 28808 29778 +3 27558 29778 28536 +3 27559 27738 27896 +3 27559 27896 27744 +3 27560 27745 27897 +3 27560 27897 27739 +3 27561 27786 28288 +3 27561 28288 28065 +3 27562 28066 28289 +3 27562 28289 27787 +3 27563 27886 28193 +3 27563 28193 28087 +3 27564 28088 28194 +3 27564 28194 27887 +3 27565 29531 31491 +3 27565 31491 29997 +3 27566 29998 31492 +3 27566 31492 29532 +3 27567 28716 29249 +3 27567 29249 28034 +3 27568 28035 29250 +3 27568 29250 28717 +3 27569 28417 30442 +3 27569 30442 29598 +3 27570 29599 30443 +3 27570 30443 28418 +3 27571 27797 27870 +3 27571 27870 27657 +3 27572 27658 27871 +3 27572 27871 27798 +3 27573 28559 30878 +3 27573 30878 30113 +3 27574 30114 30879 +3 27574 30879 28560 +3 27575 27833 28332 +3 27575 28332 28049 +3 27576 28050 28333 +3 27576 28333 27834 +3 27577 28002 28326 +3 27577 28326 27886 +3 27578 27887 28327 +3 27578 28327 28003 +3 27579 27784 27866 +3 27579 27866 27677 +3 27580 27678 27867 +3 27580 27867 27785 +3 27581 27801 28272 +3 27581 28272 28123 +3 27582 28124 28273 +3 27582 28273 27802 +3 27583 27651 27853 +3 27583 27853 27793 +3 27584 27794 27854 +3 27584 27854 27652 +3 27585 27813 27904 +3 27585 27904 27631 +3 27586 27632 27905 +3 27586 27905 27814 +3 27587 27839 27902 +3 27587 27902 27645 +3 27588 27646 27903 +3 27588 27903 27840 +3 27589 28593 30667 +3 27589 30667 29834 +3 27590 29835 30668 +3 27590 30668 28594 +3 27591 27750 28274 +3 27591 28274 28121 +3 27592 28122 28275 +3 27592 28275 27751 +3 27593 28061 29083 +3 27593 29083 28604 +3 27594 28605 29084 +3 27594 29084 28062 +3 27595 30774 31454 +3 27595 31454 28529 +3 27596 28530 31455 +3 27596 31455 30775 +3 27597 29592 32968 +3 27597 32968 31574 +3 27598 31574 32969 +3 27598 32969 29593 +3 27599 27788 27884 +3 27599 27884 27716 +3 27600 27717 27885 +3 27600 27885 27788 +3 27601 28839 29830 +3 27601 29830 28101 +3 27602 28102 29831 +3 27602 29831 28840 +3 27603 27817 28302 +3 27603 28302 28081 +3 27604 28082 28303 +3 27604 28303 27818 +3 27605 28411 28557 +3 27605 28557 28097 +3 27606 28098 28558 +3 27606 28558 28412 +3 27607 28379 28608 +3 27607 28608 27829 +3 27608 27830 28609 +3 27608 28609 28380 +3 27609 27855 27928 +3 27609 27928 27702 +3 27610 27703 27929 +3 27610 27929 27856 +3 27611 31147 32180 +3 27611 32180 29052 +3 27612 29053 32181 +3 27612 32181 31148 +3 27613 28103 28724 +3 27613 28724 28231 +3 27614 28232 28725 +3 27614 28725 28104 +3 27615 28349 28630 +3 27615 28630 27874 +3 27616 27875 28631 +3 27616 28631 28350 +3 27617 29980 30498 +3 27617 30498 28266 +3 27618 28267 30499 +3 27618 30499 29981 +3 27619 28083 29622 +3 27619 29622 29157 +3 27620 29158 29623 +3 27620 29623 28084 +3 27621 28429 29095 +3 27621 29095 28296 +3 27622 28297 29096 +3 27622 29096 28430 +3 27623 28097 28591 +3 27623 28591 28103 +3 27624 28104 28592 +3 27624 28592 28098 +3 27625 29237 32516 +3 27625 32516 31355 +3 27626 31356 32517 +3 27626 32517 29238 +3 27627 28373 28589 +3 27627 28589 27841 +3 27628 27842 28590 +3 27628 28590 28374 +3 27629 30003 30697 +3 27629 30697 28513 +3 27630 28514 30698 +3 27630 30698 30004 +3 27631 27904 27922 +3 27631 27922 27667 +3 27632 27668 27923 +3 27632 27923 27905 +3 27633 28853 29840 +3 27633 29840 28658 +3 27634 28659 29841 +3 27634 29841 28854 +3 27635 27843 27964 +3 27635 27964 27770 +3 27636 27771 27965 +3 27636 27965 27844 +3 27637 29537 30969 +3 27637 30969 29382 +3 27638 29383 30970 +3 27638 30970 29538 +3 27639 29997 31552 +3 27639 31552 29665 +3 27640 29666 31553 +3 27640 31553 29998 +3 27641 27930 28383 +3 27641 28383 28040 +3 27642 28041 28384 +3 27642 28384 27931 +3 27643 28435 28708 +3 27643 28708 27926 +3 27644 27927 28709 +3 27644 28709 28436 +3 27645 27902 27932 +3 27645 27932 27710 +3 27646 27711 27933 +3 27646 27933 27903 +3 27647 27962 28982 +3 27647 28982 28654 +3 27648 28655 28983 +3 27648 28983 27963 +3 27649 29860 31466 +3 27649 31466 29719 +3 27650 29720 31467 +3 27650 31467 29861 +3 27651 27710 27910 +3 27651 27910 27853 +3 27652 27854 27911 +3 27652 27911 27711 +3 27653 28976 29408 +3 27653 29408 28160 +3 27654 28161 29409 +3 27654 29409 28977 +3 27655 31789 32730 +3 27655 32730 28994 +3 27656 28995 32731 +3 27656 32731 31790 +3 27657 27870 27924 +3 27657 27924 27735 +3 27658 27736 27925 +3 27658 27925 27871 +3 27659 28310 28936 +3 27659 28936 28278 +3 27660 28279 28937 +3 27660 28937 28311 +3 27661 30011 30663 +3 27661 30663 28493 +3 27662 28494 30664 +3 27662 30664 30012 +3 27663 28658 29635 +3 27663 29635 28700 +3 27664 28701 29636 +3 27664 29636 28659 +3 27665 28296 28942 +3 27665 28942 28310 +3 27666 28311 28943 +3 27666 28943 28297 +3 27667 27922 27956 +3 27667 27956 27691 +3 27668 27692 27957 +3 27668 27957 27923 +3 27669 27837 27942 +3 27669 27942 27784 +3 27670 27785 27943 +3 27670 27943 27838 +3 27671 29463 30109 +3 27671 30109 28324 +3 27672 28325 30110 +3 27672 30110 29464 +3 27673 27699 28233 +3 27673 28233 28168 +3 27674 28169 28234 +3 27674 28234 27700 +3 27675 30716 31668 +3 27675 31668 28984 +3 27676 28985 31669 +3 27676 31669 30717 +3 27677 27866 27936 +3 27677 27936 27762 +3 27678 27763 27937 +3 27678 27937 27867 +3 27679 28954 29321 +3 27679 29321 28018 +3 27680 28019 29322 +3 27680 29322 28955 +3 27681 29511 29909 +3 27681 29909 28055 +3 27682 28056 29910 +3 27682 29910 29512 +3 27683 28308 30311 +3 27683 30311 29691 +3 27684 29692 30312 +3 27684 30312 28309 +3 27685 28079 28421 +3 27685 28421 28002 +3 27686 28003 28422 +3 27686 28422 28080 +3 27687 30225 31852 +3 27687 31852 29897 +3 27688 29898 31853 +3 27688 31853 30226 +3 27689 29287 29956 +3 27689 29956 28377 +3 27690 28378 29957 +3 27690 29957 29288 +3 27691 27956 27972 +3 27691 27972 27701 +3 27692 27701 27973 +3 27692 27973 27957 +3 27693 29939 31712 +3 27693 31712 30039 +3 27694 30040 31713 +3 27694 31713 29940 +3 27695 28304 28799 +3 27695 28799 28170 +3 27696 28171 28800 +3 27696 28800 28305 +3 27697 27708 28752 +3 27697 28752 28722 +3 27698 28723 28753 +3 27698 28753 27708 +3 27699 27709 28247 +3 27699 28247 28233 +3 27700 28234 28248 +3 27700 28248 27709 +3 27701 27972 27973 +3 27702 27928 27996 +3 27702 27996 27782 +3 27703 27783 27997 +3 27703 27997 27929 +3 27704 27872 27988 +3 27704 27988 27797 +3 27705 27798 27989 +3 27705 27989 27873 +3 27706 27707 29795 +3 27706 29795 29779 +3 27707 29780 29795 +3 27708 28753 28752 +3 27709 28248 28247 +3 27710 27932 27910 +3 27711 27911 27933 +3 27712 28091 29010 +3 27712 29010 28612 +3 27713 28613 29011 +3 27713 29011 28092 +3 27714 27793 27976 +3 27714 27976 27876 +3 27715 27877 27977 +3 27715 27977 27794 +3 27716 27884 28020 +3 27716 28020 27843 +3 27717 27844 28021 +3 27717 28021 27885 +3 27718 30868 31787 +3 27718 31787 29028 +3 27719 29029 31788 +3 27719 31788 30869 +3 27720 28328 29927 +3 27720 29927 29313 +3 27721 29314 29928 +3 27721 29928 28329 +3 27722 27906 28361 +3 27722 28361 28162 +3 27723 28163 28362 +3 27723 28362 27907 +3 27724 28696 29618 +3 27724 29618 29301 +3 27725 29302 29619 +3 27725 29619 28697 +3 27726 28855 29357 +3 27726 29357 28237 +3 27727 28238 29358 +3 27727 29358 28855 +3 27728 29665 31272 +3 27728 31272 29715 +3 27729 29716 31273 +3 27729 31273 29666 +3 27730 29034 29509 +3 27730 29509 28218 +3 27731 28219 29510 +3 27731 29510 29035 +3 27732 28231 28835 +3 27732 28835 28314 +3 27733 28315 28836 +3 27733 28836 28232 +3 27734 28040 28455 +3 27734 28455 28107 +3 27735 27924 27998 +3 27735 27998 27837 +3 27736 27838 27999 +3 27736 27999 27925 +3 27737 28108 28456 +3 27737 28456 28041 +3 27738 27892 28024 +3 27738 28024 27896 +3 27739 27897 28025 +3 27739 28025 27893 +3 27740 28393 29210 +3 27740 29210 28531 +3 27741 28534 29211 +3 27741 29211 28394 +3 27742 27876 28030 +3 27742 28030 27892 +3 27743 27893 28031 +3 27743 28031 27877 +3 27744 27896 28032 +3 27744 28032 27872 +3 27745 27873 28033 +3 27745 28033 27897 +3 27746 27940 28397 +3 27746 28397 28159 +3 27747 28159 28398 +3 27747 28398 27941 +3 27748 30345 31875 +3 27748 31875 29860 +3 27749 29861 31876 +3 27749 31876 30346 +3 27750 27861 28415 +3 27750 28415 28274 +3 27751 28275 28416 +3 27751 28416 27862 +3 27752 28573 31206 +3 27752 31206 30599 +3 27753 30600 31207 +3 27753 31207 28574 +3 27754 28115 28467 +3 27754 28467 28079 +3 27755 28080 28468 +3 27755 28468 28116 +3 27756 28700 29655 +3 27756 29655 28696 +3 27757 28697 29656 +3 27757 29656 28701 +3 27758 28182 29657 +3 27758 29657 29243 +3 27759 29244 29658 +3 27759 29658 28183 +3 27760 29002 29353 +3 27760 29353 28093 +3 27761 28094 29354 +3 27761 29354 29003 +3 27762 27936 28010 +3 27762 28010 27813 +3 27763 27814 28011 +3 27763 28011 27937 +3 27764 28531 29232 +3 27764 29232 28429 +3 27765 28430 29233 +3 27765 29233 28534 +3 27766 29267 32520 +3 27766 32520 31446 +3 27767 31447 32521 +3 27767 32521 29268 +3 27768 28760 31814 +3 27768 31814 31055 +3 27769 31056 31815 +3 27769 31815 28761 +3 27770 27964 28077 +3 27770 28077 27855 +3 27771 27856 28078 +3 27771 28078 27965 +3 27772 29471 30956 +3 27772 30956 29537 +3 27773 29538 30957 +3 27773 30957 29472 +3 27774 31642 32859 +3 27774 32859 29443 +3 27775 29444 32860 +3 27775 32860 31643 +3 27776 28555 28892 +3 27776 28892 28059 +3 27777 28060 28893 +3 27777 28893 28556 +3 27778 29166 33025 +3 27778 33025 32024 +3 27779 32025 33026 +3 27779 33026 29167 +3 27780 28960 30021 +3 27780 30021 28839 +3 27781 28840 30022 +3 27781 30022 28961 +3 27782 27996 28067 +3 27782 28067 27839 +3 27783 27840 28068 +3 27783 28068 27997 +3 27784 27942 28036 +3 27784 28036 27866 +3 27785 27867 28037 +3 27785 28037 27943 +3 27786 27966 28489 +3 27786 28489 28288 +3 27787 28289 28490 +3 27787 28490 27967 +3 27788 27885 28048 +3 27788 28048 27884 +3 27789 28453 28778 +3 27789 28778 28057 +3 27790 28058 28779 +3 27790 28779 28454 +3 27791 30476 31256 +3 27791 31256 28878 +3 27792 28879 31257 +3 27792 31257 30477 +3 27793 27853 28038 +3 27793 28038 27976 +3 27794 27977 28039 +3 27794 28039 27854 +3 27795 28107 28497 +3 27795 28497 28115 +3 27796 28116 28498 +3 27796 28498 28108 +3 27797 27988 28073 +3 27797 28073 27870 +3 27798 27871 28074 +3 27798 28074 27989 +3 27799 28049 28521 +3 27799 28521 28253 +3 27800 28254 28522 +3 27800 28522 28050 +3 27801 27982 28463 +3 27801 28463 28272 +3 27802 28273 28464 +3 27802 28464 27983 +3 27803 30229 31038 +3 27803 31038 28902 +3 27804 28903 31039 +3 27804 31039 30230 +3 27805 28314 28900 +3 27805 28900 28304 +3 27806 28305 28901 +3 27806 28901 28315 +3 27807 28807 29988 +3 27807 29988 28853 +3 27808 28854 29991 +3 27808 29991 28808 +3 27809 28195 29289 +3 27809 29289 28914 +3 27810 28915 29290 +3 27810 29290 28196 +3 27811 30039 31822 +3 27811 31822 30171 +3 27812 30172 31823 +3 27812 31823 30040 +3 27813 28010 28105 +3 27813 28105 27904 +3 27814 27905 28106 +3 27814 28106 28011 +3 27815 30007 31911 +3 27815 31911 30345 +3 27816 30346 31912 +3 27816 31912 30008 +3 27817 27968 28491 +3 27817 28491 28302 +3 27818 28303 28492 +3 27818 28492 27969 +3 27819 30073 30898 +3 27819 30898 28770 +3 27820 28771 30899 +3 27820 30899 30074 +3 27821 30169 32160 +3 27821 32160 30456 +3 27822 30457 32161 +3 27822 32161 30170 +3 27823 29042 30111 +3 27823 30111 28960 +3 27824 28961 30112 +3 27824 30112 29043 +3 27825 29715 31343 +3 27825 31343 29881 +3 27826 29882 31344 +3 27826 31344 29716 +3 27827 29251 32036 +3 27827 32036 31001 +3 27828 31002 32037 +3 27828 32037 29252 +3 27829 28608 28823 +3 27829 28823 28026 +3 27830 28027 28824 +3 27830 28824 28609 +3 27831 28046 29101 +3 27831 29101 28886 +3 27832 28887 29102 +3 27832 29102 28047 +3 27833 28065 28563 +3 27833 28563 28332 +3 27834 28333 28564 +3 27834 28564 28066 +3 27835 30333 32060 +3 27835 32060 30225 +3 27836 30226 32061 +3 27836 32061 30334 +3 27837 27998 28117 +3 27837 28117 27942 +3 27838 27943 28118 +3 27838 28118 27999 +3 27839 28067 28127 +3 27839 28127 27902 +3 27840 27903 28128 +3 27840 28128 28068 +3 27841 28589 28952 +3 27841 28952 28212 +3 27842 28213 28953 +3 27842 28953 28590 +3 27843 28020 28176 +3 27843 28176 27964 +3 27844 27965 28177 +3 27844 28177 28021 +3 27845 28499 28821 +3 27845 28821 28143 +3 27846 28144 28822 +3 27846 28822 28499 +3 27847 29683 30286 +3 27847 30286 28465 +3 27848 28466 30287 +3 27848 30287 29684 +3 27849 28599 28910 +3 27849 28910 28149 +3 27850 28150 28911 +3 27850 28911 28600 +3 27851 28565 30906 +3 27851 30906 30391 +3 27852 30392 30907 +3 27852 30907 28566 +3 27853 27910 28111 +3 27853 28111 28038 +3 27854 28039 28112 +3 27854 28112 27911 +3 27855 28077 28180 +3 27855 28180 27928 +3 27856 27929 28181 +3 27856 28181 28078 +3 27857 28870 31113 +3 27857 31113 30405 +3 27858 30406 31114 +3 27858 31114 28871 +3 27859 29214 29701 +3 27859 29701 28371 +3 27860 28372 29702 +3 27860 29702 29215 +3 27861 27980 28532 +3 27861 28532 28415 +3 27862 28416 28533 +3 27862 28533 27981 +3 27863 28578 30104 +3 27863 30104 28577 +3 27864 29272 32129 +3 27864 32129 31163 +3 27865 31164 32130 +3 27865 32130 29273 +3 27866 28036 28133 +3 27866 28133 27936 +3 27867 27937 28134 +3 27867 28134 28037 +3 27868 29711 30343 +3 27868 30343 28581 +3 27869 28582 30344 +3 27869 30344 29712 +3 27870 28073 28157 +3 27870 28157 27924 +3 27871 27925 28158 +3 27871 28158 28074 +3 27872 28032 28166 +3 27872 28166 27988 +3 27873 27989 28167 +3 27873 28167 28033 +3 27874 28630 28926 +3 27874 28926 28125 +3 27875 28126 28927 +3 27875 28927 28631 +3 27876 27976 28155 +3 27876 28155 28030 +3 27877 28031 28156 +3 27877 28156 27977 +3 27878 31716 32865 +3 27878 32865 29495 +3 27879 29496 32866 +3 27879 32866 31717 +3 27880 29659 33218 +3 27880 33218 31907 +3 27881 31908 33219 +3 27881 33219 29660 +3 27882 28843 31073 +3 27882 31073 30411 +3 27883 30412 31074 +3 27883 31074 28844 +3 27884 28048 28224 +3 27884 28224 28020 +3 27885 28021 28225 +3 27885 28225 28048 +3 27886 28326 28634 +3 27886 28634 28193 +3 27887 28194 28635 +3 27887 28635 28327 +3 27888 28449 30382 +3 27888 30382 29279 +3 27889 29280 30383 +3 27889 30383 28450 +3 27890 29331 30393 +3 27890 30393 29042 +3 27891 29043 30394 +3 27891 30394 29332 +3 27892 28030 28214 +3 27892 28214 28024 +3 27893 28025 28215 +3 27893 28215 28031 +3 27894 28766 29501 +3 27894 29501 28638 +3 27895 28639 29502 +3 27895 29502 28767 +3 27896 28024 28216 +3 27896 28216 28032 +3 27897 28033 28217 +3 27897 28217 28025 +3 27898 30049 31640 +3 27898 31640 30007 +3 27899 30008 31641 +3 27899 31641 30050 +3 27900 30171 32245 +3 27900 32245 30589 +3 27901 30590 32246 +3 27901 32246 30172 +3 27902 28127 28191 +3 27902 28191 27932 +3 27903 27933 28192 +3 27903 28192 28128 +3 27904 28105 28206 +3 27904 28206 27922 +3 27905 27923 28207 +3 27905 28207 28106 +3 27906 28081 28551 +3 27906 28551 28361 +3 27907 28362 28552 +3 27907 28552 28082 +3 27908 31363 32125 +3 27908 32125 28986 +3 27909 28987 32126 +3 27909 32126 31364 +3 27910 27932 28164 +3 27910 28164 28111 +3 27911 28112 28165 +3 27911 28165 27933 +3 27912 30910 31579 +3 27912 31579 28841 +3 27913 28842 31580 +3 27913 31580 30911 +3 27914 28543 30086 +3 27914 30086 29480 +3 27915 29481 30087 +3 27915 30087 28544 +3 27916 28300 29261 +3 27916 29261 28912 +3 27917 28913 29262 +3 27917 29262 28301 +3 27918 28443 28904 +3 27918 28904 28373 +3 27919 28374 28905 +3 27919 28905 28444 +3 27920 30193 30724 +3 27920 30724 28656 +3 27921 28657 30725 +3 27921 30725 30194 +3 27922 28206 28245 +3 27922 28245 27956 +3 27923 27957 28246 +3 27923 28246 28207 +3 27924 28157 28235 +3 27924 28235 27998 +3 27925 27999 28236 +3 27925 28236 28158 +3 27926 28708 28738 +3 27926 28738 27946 +3 27927 27947 28739 +3 27927 28739 28709 +3 27928 28180 28249 +3 27928 28249 27996 +3 27929 27997 28250 +3 27929 28250 28181 +3 27930 28253 28688 +3 27930 28688 28383 +3 27931 28384 28689 +3 27931 28689 28254 +3 27932 28191 28164 +3 27933 28165 28192 +3 27934 29881 31337 +3 27934 31337 29826 +3 27935 29827 31338 +3 27935 31338 29882 +3 27936 28133 28220 +3 27936 28220 28010 +3 27937 28011 28221 +3 27937 28221 28134 +3 27938 28342 29380 +3 27938 29380 29020 +3 27939 29021 29381 +3 27939 29381 28343 +3 27940 28162 28624 +3 27940 28624 28397 +3 27941 28398 28625 +3 27941 28625 28163 +3 27942 28117 28243 +3 27942 28243 28036 +3 27943 28037 28244 +3 27943 28244 28118 +3 27944 30272 30288 +3 27944 30288 27945 +3 27945 30288 30273 +3 27946 28738 28751 +3 27946 28751 27947 +3 27947 28751 28739 +3 27948 30679 32488 +3 27948 32488 30387 +3 27949 30388 32489 +3 27949 32489 30680 +3 27950 28706 30614 +3 27950 30614 30009 +3 27951 30010 30615 +3 27951 30615 28707 +3 27952 30413 32145 +3 27952 32145 30333 +3 27953 30334 32146 +3 27953 32146 30414 +3 27954 29745 30268 +3 27954 30268 28502 +3 27955 28503 30269 +3 27955 30269 29746 +3 27956 28245 28259 +3 27956 28259 27972 +3 27957 27973 28260 +3 27957 28260 28246 +3 27958 28423 30427 +3 27958 30427 30047 +3 27959 30048 30428 +3 27959 30428 28424 +3 27960 28549 29954 +3 27960 29954 29355 +3 27961 29356 29955 +3 27961 29955 28550 +3 27962 28284 29305 +3 27962 29305 28982 +3 27963 28983 29306 +3 27963 29306 28285 +3 27964 28176 28294 +3 27964 28294 28077 +3 27965 28078 28295 +3 27965 28295 28177 +3 27966 28123 28666 +3 27966 28666 28489 +3 27967 28490 28667 +3 27967 28667 28124 +3 27968 28121 28660 +3 27968 28660 28491 +3 27969 28492 28661 +3 27969 28661 28122 +3 27970 29147 30450 +3 27970 30450 29369 +3 27971 29370 30451 +3 27971 30451 29148 +3 27972 28259 28265 +3 27972 28265 27973 +3 27973 28265 28260 +3 27974 29143 31654 +3 27974 31654 30806 +3 27975 30807 31655 +3 27975 31655 29144 +3 27976 28038 28255 +3 27976 28255 28155 +3 27977 28156 28256 +3 27977 28256 28039 +3 27978 30589 32299 +3 27978 32299 30323 +3 27979 30324 32300 +3 27979 32300 30590 +3 27980 28087 28652 +3 27980 28652 28532 +3 27981 28533 28653 +3 27981 28653 28088 +3 27982 28168 28662 +3 27982 28662 28463 +3 27983 28464 28663 +3 27983 28663 28169 +3 27984 28774 30482 +3 27984 30482 29805 +3 27985 29806 30483 +3 27985 30483 28775 +3 27986 30456 32407 +3 27986 32407 30548 +3 27987 30549 32408 +3 27987 32408 30457 +3 27988 28166 28270 +3 27988 28270 28073 +3 27989 28074 28271 +3 27989 28271 28167 +3 27990 31321 32405 +3 27990 32405 29503 +3 27991 29504 32406 +3 27991 32406 31322 +3 27992 29190 31424 +3 27992 31424 30550 +3 27993 30551 31425 +3 27993 31425 29191 +3 27994 28865 29604 +3 27994 29604 28766 +3 27995 28767 29605 +3 27995 29605 28866 +3 27996 28249 28298 +3 27996 28298 28067 +3 27997 28068 28299 +3 27997 28299 28250 +3 27998 28235 28268 +3 27998 28268 28117 +3 27999 28118 28269 +3 27999 28269 28236 +3 28000 28670 29111 +3 28000 29111 28443 +3 28001 28444 29112 +3 28001 29112 28671 +3 28002 28421 28726 +3 28002 28726 28326 +3 28003 28327 28727 +3 28003 28727 28422 +3 28004 29234 30276 +3 28004 30276 29147 +3 28005 29148 30277 +3 28005 30277 29235 +3 28006 30218 31710 +3 28006 31710 30049 +3 28007 30050 31711 +3 28007 31711 30219 +3 28008 32194 33546 +3 28008 33546 29895 +3 28009 29896 33547 +3 28009 33547 32195 +3 28010 28220 28321 +3 28010 28321 28105 +3 28011 28106 28322 +3 28011 28322 28221 +3 28012 28316 29291 +3 28012 29291 28712 +3 28013 28713 29292 +3 28013 29292 28317 +3 28014 29713 33226 +3 28014 33226 31992 +3 28015 31993 33227 +3 28015 33227 29714 +3 28016 31472 32512 +3 28016 32512 29527 +3 28017 29528 32513 +3 28017 32513 31473 +3 28018 29321 29671 +3 28018 29671 28395 +3 28019 28396 29672 +3 28019 29672 29322 +3 28020 28224 28367 +3 28020 28367 28176 +3 28021 28177 28368 +3 28021 28368 28225 +3 28022 29085 29879 +3 28022 29879 28865 +3 28023 28866 29880 +3 28023 29880 29086 +3 28024 28214 28355 +3 28024 28355 28216 +3 28025 28217 28356 +3 28025 28356 28215 +3 28026 28823 29018 +3 28026 29018 28241 +3 28027 28242 29019 +3 28027 29019 28824 +3 28028 29365 29848 +3 28028 29848 28547 +3 28029 28548 29849 +3 28029 29849 29366 +3 28030 28155 28340 +3 28030 28340 28214 +3 28031 28215 28341 +3 28031 28341 28156 +3 28032 28216 28345 +3 28032 28345 28166 +3 28033 28167 28346 +3 28033 28346 28217 +3 28034 29249 29699 +3 28034 29699 28515 +3 28035 28516 29700 +3 28035 29700 29250 +3 28036 28243 28338 +3 28036 28338 28133 +3 28037 28134 28339 +3 28037 28339 28244 +3 28038 28111 28334 +3 28038 28334 28255 +3 28039 28256 28335 +3 28039 28335 28112 +3 28040 28383 28817 +3 28040 28817 28455 +3 28041 28456 28818 +3 28041 28818 28384 +3 28042 29925 30514 +3 28042 30514 28785 +3 28043 28786 30515 +3 28043 30515 29926 +3 28044 29218 32486 +3 28044 32486 31658 +3 28045 31659 32487 +3 28045 32487 29219 +3 28046 28278 29349 +3 28046 29349 29101 +3 28047 29102 29350 +3 28047 29350 28279 +3 28048 28225 28344 +3 28048 28344 28224 +3 28049 28332 28674 +3 28049 28674 28521 +3 28050 28522 28675 +3 28050 28675 28333 +3 28051 28672 30137 +3 28051 30137 29639 +3 28052 29640 30138 +3 28052 30138 28673 +3 28053 30858 32614 +3 28053 32614 30413 +3 28054 30414 32615 +3 28054 32615 30859 +3 28055 29909 30258 +3 28055 30258 29216 +3 28056 29217 30259 +3 28056 30259 29910 +3 28057 28778 29072 +3 28057 29072 28349 +3 28058 28350 29073 +3 28058 29073 28779 +3 28059 28892 29159 +3 28059 29159 28369 +3 28060 28370 29160 +3 28060 29160 28893 +3 28061 28483 29545 +3 28061 29545 29083 +3 28062 29084 29546 +3 28062 29546 28484 +3 28063 29109 31333 +3 28063 31333 30484 +3 28064 30485 31334 +3 28064 31334 29110 +3 28065 28288 28801 +3 28065 28801 28563 +3 28066 28564 28802 +3 28066 28802 28289 +3 28067 28298 28363 +3 28067 28363 28127 +3 28068 28128 28364 +3 28068 28364 28299 +3 28069 30323 31983 +3 28069 31983 30369 +3 28070 30370 31984 +3 28070 31984 30324 +3 28071 30744 31296 +3 28071 31296 28884 +3 28072 28885 31297 +3 28072 31297 30745 +3 28073 28270 28365 +3 28073 28365 28157 +3 28074 28158 28366 +3 28074 28366 28271 +3 28075 29279 30524 +3 28075 30524 29439 +3 28076 29440 30525 +3 28076 30525 29280 +3 28077 28294 28399 +3 28077 28399 28180 +3 28078 28181 28400 +3 28078 28400 28295 +3 28079 28467 28833 +3 28079 28833 28421 +3 28080 28422 28834 +3 28080 28834 28468 +3 28081 28302 28787 +3 28081 28787 28551 +3 28082 28552 28788 +3 28082 28788 28303 +3 28083 28523 30045 +3 28083 30045 29622 +3 28084 29623 30046 +3 28084 30046 28524 +3 28085 30776 31572 +3 28085 31572 29168 +3 28086 29169 31573 +3 28086 31573 30777 +3 28087 28193 28740 +3 28087 28740 28652 +3 28088 28653 28741 +3 28088 28741 28194 +3 28089 29079 31915 +3 28089 31915 31224 +3 28090 31225 31916 +3 28090 31916 29080 +3 28091 28508 29420 +3 28091 29420 29010 +3 28092 29011 29421 +3 28092 29421 28509 +3 28093 29353 29937 +3 28093 29937 28694 +3 28094 28695 29938 +3 28094 29938 29354 +3 28095 29216 30303 +3 28095 30303 29234 +3 28096 29235 30304 +3 28096 30304 29217 +3 28097 28557 29060 +3 28097 29060 28591 +3 28098 28592 29061 +3 28098 29061 28558 +3 28099 30603 32801 +3 28099 32801 30916 +3 28100 30917 32802 +3 28100 32802 30604 +3 28101 29830 30317 +3 28101 30317 28626 +3 28102 28627 30318 +3 28102 30318 29831 +3 28103 28591 29226 +3 28103 29226 28724 +3 28104 28725 29227 +3 28104 29227 28592 +3 28105 28321 28413 +3 28105 28413 28206 +3 28106 28207 28414 +3 28106 28414 28322 +3 28107 28455 28876 +3 28107 28876 28497 +3 28108 28498 28877 +3 28108 28877 28456 +3 28109 30780 31522 +3 28109 31522 29137 +3 28110 29138 31523 +3 28110 31523 30781 +3 28111 28164 28381 +3 28111 28381 28334 +3 28112 28335 28382 +3 28112 28382 28165 +3 28113 30548 32500 +3 28113 32500 30649 +3 28114 30650 32501 +3 28114 32501 30549 +3 28115 28497 28874 +3 28115 28874 28467 +3 28116 28468 28875 +3 28116 28875 28498 +3 28117 28268 28389 +3 28117 28389 28243 +3 28118 28244 28390 +3 28118 28390 28269 +3 28119 28712 29406 +3 28119 29406 28829 +3 28120 28830 29407 +3 28120 29407 28713 +3 28121 28274 28819 +3 28121 28819 28660 +3 28122 28661 28820 +3 28122 28820 28275 +3 28123 28272 28837 +3 28123 28837 28666 +3 28124 28667 28838 +3 28124 28838 28273 +3 28125 28926 29164 +3 28125 29164 28379 +3 28126 28380 29165 +3 28126 29165 28927 +3 28127 28363 28419 +3 28127 28419 28191 +3 28128 28192 28420 +3 28128 28420 28364 +3 28129 30784 32734 +3 28129 32734 30679 +3 28130 30680 32735 +3 28130 32735 30785 +3 28131 28964 29958 +3 28131 29958 29141 +3 28132 29142 29959 +3 28132 29959 28965 +3 28133 28338 28407 +3 28133 28407 28220 +3 28134 28221 28408 +3 28134 28408 28339 +3 28135 30105 33846 +3 28135 33846 32456 +3 28136 32457 33847 +3 28136 33847 30106 +3 28137 29439 30616 +3 28137 30616 29515 +3 28138 29516 30617 +3 28138 30617 29440 +3 28139 28754 30075 +3 28139 30075 29473 +3 28140 29473 30076 +3 28140 30076 28755 +3 28141 30159 31698 +3 28141 31698 30218 +3 28142 30219 31699 +3 28142 31699 30160 +3 28143 28821 29135 +3 28143 29135 28453 +3 28144 28454 29136 +3 28144 29136 28822 +3 28145 28736 30254 +3 28145 30254 29687 +3 28146 29688 30255 +3 28146 30255 28737 +3 28147 29751 32760 +3 28147 32760 31628 +3 28148 31629 32761 +3 28148 32761 29752 +3 28149 28910 29188 +3 28149 29188 28435 +3 28150 28436 29189 +3 28150 29189 28911 +3 28151 30558 32675 +3 28151 32675 30858 +3 28152 30859 32676 +3 28152 32676 30559 +3 28153 32293 33550 +3 28153 33550 29945 +3 28154 29946 33551 +3 28154 33551 32294 +3 28155 28255 28425 +3 28155 28425 28340 +3 28156 28341 28426 +3 28156 28426 28256 +3 28157 28365 28431 +3 28157 28431 28235 +3 28158 28236 28432 +3 28158 28432 28366 +3 28159 28397 28793 +3 28159 28793 28398 +3 28160 29408 29820 +3 28160 29820 28569 +3 28161 28570 29821 +3 28161 29821 29409 +3 28162 28361 28825 +3 28162 28825 28624 +3 28163 28625 28826 +3 28163 28826 28362 +3 28164 28191 28409 +3 28164 28409 28381 +3 28165 28382 28410 +3 28165 28410 28192 +3 28166 28345 28439 +3 28166 28439 28270 +3 28167 28271 28440 +3 28167 28440 28346 +3 28168 28233 28710 +3 28168 28710 28662 +3 28169 28663 28711 +3 28169 28711 28234 +3 28170 28799 29299 +3 28170 29299 28670 +3 28171 28671 29300 +3 28171 29300 28800 +3 28172 28906 30772 +3 28172 30772 30237 +3 28173 30238 30773 +3 28173 30773 28907 +3 28174 29369 30573 +3 28174 30573 29331 +3 28175 29332 30574 +3 28175 30574 29370 +3 28176 28367 28479 +3 28176 28479 28294 +3 28177 28295 28480 +3 28177 28480 28368 +3 28178 28950 29759 +3 28178 29759 28990 +3 28179 28991 29760 +3 28179 29760 28951 +3 28180 28399 28461 +3 28180 28461 28249 +3 28181 28250 28462 +3 28181 28462 28400 +3 28182 28610 30065 +3 28182 30065 29657 +3 28183 29658 30066 +3 28183 30066 28611 +3 28184 29717 30814 +3 28184 30814 28847 +3 28185 28848 30815 +3 28185 30815 29718 +3 28186 31117 32046 +3 28186 32046 29441 +3 28187 29442 32047 +3 28187 32047 31118 +3 28188 28990 29765 +3 28188 29765 28964 +3 28189 28965 29766 +3 28189 29766 28991 +3 28190 28612 29460 +3 28190 29460 28613 +3 28191 28419 28409 +3 28192 28410 28420 +3 28193 28634 28740 +3 28194 28741 28635 +3 28195 28620 29581 +3 28195 29581 29289 +3 28196 29290 29582 +3 28196 29582 28621 +3 28197 28829 29685 +3 28197 29685 29046 +3 28198 29047 29686 +3 28198 29686 28830 +3 28199 29008 30607 +3 28199 30607 29009 +3 28200 29793 32891 +3 28200 32891 31777 +3 28201 31778 32892 +3 28201 32892 29794 +3 28202 29014 30824 +3 28202 30824 30274 +3 28203 30275 30825 +3 28203 30825 29015 +3 28204 30864 31816 +3 28204 31816 29474 +3 28205 29475 31817 +3 28205 31817 30865 +3 28206 28413 28471 +3 28206 28471 28245 +3 28207 28246 28472 +3 28207 28472 28414 +3 28208 30369 32094 +3 28208 32094 30486 +3 28209 30487 32095 +3 28209 32095 30370 +3 28210 28988 31149 +3 28210 31149 30571 +3 28211 30572 31150 +3 28211 31150 28989 +3 28212 28952 29317 +3 28212 29317 28555 +3 28213 28556 29318 +3 28213 29318 28953 +3 28214 28340 28469 +3 28214 28469 28355 +3 28215 28356 28470 +3 28215 28470 28341 +3 28216 28355 28481 +3 28216 28481 28345 +3 28217 28346 28482 +3 28217 28482 28356 +3 28218 29509 29549 +3 28218 29549 28230 +3 28219 28230 29550 +3 28219 29550 29510 +3 28220 28407 28504 +3 28220 28504 28321 +3 28221 28322 28505 +3 28221 28505 28408 +3 28222 31959 32829 +3 28222 32829 29426 +3 28223 29427 32830 +3 28223 32830 31960 +3 28224 28344 28475 +3 28224 28475 28367 +3 28225 28368 28476 +3 28225 28476 28344 +3 28226 28227 30653 +3 28226 30653 30637 +3 28227 30638 30653 +3 28228 29515 30904 +3 28228 30904 29856 +3 28229 29857 30905 +3 28229 30905 29516 +3 28230 29549 29550 +3 28231 28724 29335 +3 28231 29335 28835 +3 28232 28836 29336 +3 28232 29336 28725 +3 28233 28247 28768 +3 28233 28768 28710 +3 28234 28711 28769 +3 28234 28769 28248 +3 28235 28431 28487 +3 28235 28487 28268 +3 28236 28269 28488 +3 28236 28488 28432 +3 28237 29357 29836 +3 28237 29836 28716 +3 28238 28717 29837 +3 28238 29837 29358 +3 28239 30649 32998 +3 28239 32998 31109 +3 28240 31110 32999 +3 28240 32999 30650 +3 28241 29018 29186 +3 28241 29186 28411 +3 28242 28412 29187 +3 28242 29187 29019 +3 28243 28389 28485 +3 28243 28485 28338 +3 28244 28339 28486 +3 28244 28486 28390 +3 28245 28471 28506 +3 28245 28506 28259 +3 28246 28260 28507 +3 28246 28507 28472 +3 28247 28248 28784 +3 28247 28784 28768 +3 28248 28769 28784 +3 28249 28461 28525 +3 28249 28525 28298 +3 28250 28299 28526 +3 28250 28526 28462 +3 28251 31125 33130 +3 28251 33130 30818 +3 28252 30819 33131 +3 28252 33131 31126 +3 28253 28521 28968 +3 28253 28968 28688 +3 28254 28689 28969 +3 28254 28969 28522 +3 28255 28334 28500 +3 28255 28500 28425 +3 28256 28426 28501 +3 28256 28501 28335 +3 28257 30601 32350 +3 28257 32350 30558 +3 28258 30559 32351 +3 28258 32351 30602 +3 28259 28506 28527 +3 28259 28527 28265 +3 28260 28265 28528 +3 28260 28528 28507 +3 28261 29263 30080 +3 28261 30080 29085 +3 28262 29086 30081 +3 28262 30081 29264 +3 28263 30464 31066 +3 28263 31066 29089 +3 28264 29090 31067 +3 28264 31067 30465 +3 28265 28527 28528 +3 28266 30498 30888 +3 28266 30888 28782 +3 28267 28783 30889 +3 28267 30889 30499 +3 28268 28487 28519 +3 28268 28519 28389 +3 28269 28390 28520 +3 28269 28520 28488 +3 28270 28439 28539 +3 28270 28539 28365 +3 28271 28366 28540 +3 28271 28540 28440 +3 28272 28463 28940 +3 28272 28940 28837 +3 28273 28838 28941 +3 28273 28941 28464 +3 28274 28415 28934 +3 28274 28934 28819 +3 28275 28820 28935 +3 28275 28935 28416 +3 28276 31542 32273 +3 28276 32273 29315 +3 28277 29316 32274 +3 28277 32274 31543 +3 28278 28936 29547 +3 28278 29547 29349 +3 28279 29350 29548 +3 28279 29548 28937 +3 28280 30902 32849 +3 28280 32849 30784 +3 28281 30785 32850 +3 28281 32850 30903 +3 28282 30295 30934 +3 28282 30934 29155 +3 28283 29156 30935 +3 28283 30935 30296 +3 28284 28583 29594 +3 28284 29594 29305 +3 28285 29306 29595 +3 28285 29595 28584 +3 28286 30916 33077 +3 28286 33077 30985 +3 28287 30986 33078 +3 28287 33078 30917 +3 28288 28489 29000 +3 28288 29000 28801 +3 28289 28802 29001 +3 28289 29001 28490 +3 28290 29141 30102 +3 28290 30102 29263 +3 28291 29264 30103 +3 28291 30103 29142 +3 28292 30157 33852 +3 28292 33852 32563 +3 28293 32564 33853 +3 28293 33853 30158 +3 28294 28479 28602 +3 28294 28602 28399 +3 28295 28400 28603 +3 28295 28603 28480 +3 28296 29095 29761 +3 28296 29761 28942 +3 28297 28943 29762 +3 28297 29762 29096 +3 28298 28525 28571 +3 28298 28571 28363 +3 28299 28364 28572 +3 28299 28572 28526 +3 28300 28654 29616 +3 28300 29616 29261 +3 28301 29262 29617 +3 28301 29617 28655 +3 28302 28491 28980 +3 28302 28980 28787 +3 28303 28788 28981 +3 28303 28981 28492 +3 28304 28900 29377 +3 28304 29377 28799 +3 28305 28800 29378 +3 28305 29378 28901 +3 28306 29149 31694 +3 28306 31694 31085 +3 28307 31086 31695 +3 28307 31695 29150 +3 28308 28924 30752 +3 28308 30752 30311 +3 28309 30312 30753 +3 28309 30753 28925 +3 28310 28942 29571 +3 28310 29571 28936 +3 28311 28937 29572 +3 28311 29572 28943 +3 28312 31901 33116 +3 28312 33116 30017 +3 28313 30018 33117 +3 28313 33117 31902 +3 28314 28835 29386 +3 28314 29386 28900 +3 28315 28901 29387 +3 28315 29387 28836 +3 28316 28604 29569 +3 28316 29569 29291 +3 28317 29292 29570 +3 28317 29570 28605 +3 28318 29485 31971 +3 28318 31971 31111 +3 28319 31112 31972 +3 28319 31972 29486 +3 28320 29899 30954 +3 28320 30954 29653 +3 28321 28504 28616 +3 28321 28616 28413 +3 28322 28414 28617 +3 28322 28617 28505 +3 28323 29654 30955 +3 28323 30955 29900 +3 28324 30109 30665 +3 28324 30665 29050 +3 28325 29051 30666 +3 28325 30666 30110 +3 28326 28726 29048 +3 28326 29048 28634 +3 28327 28635 29049 +3 28327 29049 28727 +3 28328 28922 30438 +3 28328 30438 29927 +3 28329 29928 30439 +3 28329 30439 28923 +3 28330 30843 31785 +3 28330 31785 29465 +3 28331 29466 31786 +3 28331 31786 30844 +3 28332 28563 28930 +3 28332 28930 28674 +3 28333 28675 28931 +3 28333 28931 28564 +3 28334 28381 28567 +3 28334 28567 28500 +3 28335 28501 28568 +3 28335 28568 28382 +3 28336 31109 33039 +3 28336 33039 30798 +3 28337 30801 33040 +3 28337 33040 31110 +3 28338 28485 28575 +3 28338 28575 28407 +3 28339 28408 28576 +3 28339 28576 28486 +3 28340 28425 28595 +3 28340 28595 28469 +3 28341 28470 28596 +3 28341 28596 28426 +3 28342 28722 29735 +3 28342 29735 29380 +3 28343 29381 29736 +3 28343 29736 28723 +3 28344 28476 28601 +3 28344 28601 28475 +3 28345 28481 28618 +3 28345 28618 28439 +3 28346 28440 28619 +3 28346 28619 28482 +3 28347 30486 32068 +3 28347 32068 30434 +3 28348 30435 32069 +3 28348 32069 30487 +3 28349 29072 29339 +3 28349 29339 28630 +3 28350 28631 29340 +3 28350 29340 29073 +3 28351 29457 31919 +3 28351 31919 31115 +3 28352 31116 31920 +3 28352 31920 29458 +3 28353 29653 30766 +3 28353 30766 29723 +3 28354 29724 30767 +3 28354 30767 29654 +3 28355 28469 28650 +3 28355 28650 28481 +3 28356 28482 28651 +3 28356 28651 28470 +3 28357 29243 30245 +3 28357 30245 29398 +3 28358 29399 30246 +3 28358 30246 29244 +3 28359 32080 33256 +3 28359 33256 30041 +3 28360 30042 33257 +3 28360 33257 32081 +3 28361 28551 28996 +3 28361 28996 28825 +3 28362 28826 28999 +3 28362 28999 28552 +3 28363 28571 28640 +3 28363 28640 28419 +3 28364 28420 28641 +3 28364 28641 28572 +3 28365 28539 28636 +3 28365 28636 28431 +3 28366 28432 28637 +3 28366 28637 28540 +3 28367 28475 28632 +3 28367 28632 28479 +3 28368 28480 28633 +3 28368 28633 28476 +3 28369 29159 29404 +3 28369 29404 28599 +3 28370 28600 29405 +3 28370 29405 29160 +3 28371 29701 30183 +3 28371 30183 28863 +3 28372 28864 30184 +3 28372 30184 29702 +3 28373 28904 29303 +3 28373 29303 28589 +3 28374 28590 29304 +3 28374 29304 28905 +3 28375 29647 33177 +3 28375 33177 32257 +3 28376 32258 33178 +3 28376 33178 29648 +3 28377 29956 30554 +3 28377 30554 29056 +3 28378 29057 30555 +3 28378 30555 29957 +3 28379 29164 29402 +3 28379 29402 28608 +3 28380 28609 29403 +3 28380 29403 29165 +3 28381 28409 28622 +3 28381 28622 28567 +3 28382 28568 28623 +3 28382 28623 28410 +3 28383 28688 29091 +3 28383 29091 28817 +3 28384 28818 29092 +3 28384 29092 28689 +3 28385 29733 32443 +3 28385 32443 31459 +3 28386 31460 32444 +3 28386 32444 29734 +3 28387 30993 33462 +3 28387 33462 31347 +3 28388 31348 33463 +3 28388 33463 30994 +3 28389 28519 28648 +3 28389 28648 28485 +3 28390 28486 28649 +3 28390 28649 28520 +3 28391 30742 32451 +3 28391 32451 30601 +3 28392 30602 32452 +3 28392 32452 30743 +3 28393 29046 29842 +3 28393 29842 29210 +3 28394 29211 29845 +3 28394 29845 29047 +3 28395 29671 29978 +3 28395 29978 28682 +3 28396 28683 29979 +3 28396 29979 29672 +3 28397 28624 29024 +3 28397 29024 28793 +3 28398 28793 29025 +3 28398 29025 28625 +3 28399 28602 28680 +3 28399 28680 28461 +3 28400 28462 28681 +3 28400 28681 28603 +3 28401 29923 30971 +3 28401 30971 29717 +3 28402 29718 30972 +3 28402 30972 29924 +3 28403 31379 33368 +3 28403 33368 30902 +3 28404 30903 33369 +3 28404 33369 31380 +3 28405 29767 32172 +3 28405 32172 31159 +3 28406 31160 32173 +3 28406 32173 29768 +3 28407 28575 28692 +3 28407 28692 28504 +3 28408 28505 28693 +3 28408 28693 28576 +3 28409 28419 28642 +3 28409 28642 28622 +3 28410 28623 28643 +3 28410 28643 28420 +3 28411 29186 29351 +3 28411 29351 28557 +3 28412 28558 29352 +3 28412 29352 29187 +3 28413 28616 28684 +3 28413 28684 28471 +3 28414 28472 28685 +3 28414 28685 28617 +3 28415 28532 29081 +3 28415 29081 28934 +3 28416 28935 29082 +3 28416 29082 28533 +3 28417 29239 31029 +3 28417 31029 30442 +3 28418 30443 31030 +3 28418 31030 29240 +3 28419 28640 28642 +3 28420 28643 28641 +3 28421 28833 29113 +3 28421 29113 28726 +3 28422 28727 29114 +3 28422 29114 28834 +3 28423 29709 30740 +3 28423 30740 30427 +3 28424 30428 30741 +3 28424 30741 29710 +3 28425 28500 28676 +3 28425 28676 28595 +3 28426 28596 28677 +3 28426 28677 28501 +3 28427 30798 32706 +3 28427 32706 30847 +3 28428 30848 32707 +3 28428 32707 30801 +3 28429 29232 29877 +3 28429 29877 29095 +3 28430 29096 29878 +3 28430 29878 29233 +3 28431 28636 28690 +3 28431 28690 28487 +3 28432 28488 28691 +3 28432 28691 28637 +3 28433 31238 33416 +3 28433 33416 31125 +3 28434 31126 33417 +3 28434 33417 31239 +3 28435 29188 29455 +3 28435 29455 28708 +3 28436 28709 29456 +3 28436 29456 29189 +3 28437 30985 33198 +3 28437 33198 31127 +3 28438 31128 33199 +3 28438 33199 30986 +3 28439 28618 28704 +3 28439 28704 28539 +3 28440 28540 28705 +3 28440 28705 28619 +3 28441 29557 32625 +3 28441 32625 31838 +3 28442 31839 32626 +3 28442 32626 29558 +3 28443 29111 29561 +3 28443 29561 28904 +3 28444 28905 29562 +3 28444 29562 29112 +3 28445 30946 31593 +3 28445 31593 29325 +3 28446 29326 31594 +3 28446 31594 30947 +3 28447 29723 30790 +3 28447 30790 29709 +3 28448 29710 30791 +3 28448 30791 29724 +3 28449 29054 30796 +3 28449 30796 30382 +3 28450 30383 30797 +3 28450 30797 29055 +3 28451 29995 31068 +3 28451 31068 29923 +3 28452 29924 31069 +3 28452 31069 29996 +3 28453 29135 29447 +3 28453 29447 28778 +3 28454 28779 29448 +3 28454 29448 29136 +3 28455 28817 29204 +3 28455 29204 28876 +3 28456 28877 29205 +3 28456 29205 28818 +3 28457 29182 31244 +3 28457 31244 30177 +3 28458 30178 31245 +3 28458 31245 29183 +3 28459 30247 33490 +3 28459 33490 32209 +3 28460 32210 33491 +3 28460 33491 30248 +3 28461 28680 28748 +3 28461 28748 28525 +3 28462 28526 28749 +3 28462 28749 28681 +3 28463 28662 29131 +3 28463 29131 28940 +3 28464 28941 29132 +3 28464 29132 28663 +3 28465 30286 30710 +3 28465 30710 29192 +3 28466 29193 30711 +3 28466 30711 30287 +3 28467 28874 29200 +3 28467 29200 28833 +3 28468 28834 29201 +3 28468 29201 28875 +3 28469 28595 28764 +3 28469 28764 28650 +3 28470 28651 28765 +3 28470 28765 28596 +3 28471 28684 28742 +3 28471 28742 28506 +3 28472 28507 28743 +3 28472 28743 28685 +3 28473 29398 30365 +3 28473 30365 29482 +3 28474 29483 30366 +3 28474 30366 29399 +3 28475 28601 28730 +3 28475 28730 28632 +3 28476 28633 28731 +3 28476 28731 28601 +3 28477 31005 31031 +3 28477 31031 28478 +3 28478 31031 31006 +3 28479 28632 28728 +3 28479 28728 28602 +3 28480 28603 28729 +3 28480 28729 28633 +3 28481 28650 28776 +3 28481 28776 28618 +3 28482 28619 28777 +3 28482 28777 28651 +3 28483 28914 29949 +3 28483 29949 29545 +3 28484 29546 29950 +3 28484 29950 28915 +3 28485 28648 28720 +3 28485 28720 28575 +3 28486 28576 28721 +3 28486 28721 28649 +3 28487 28690 28732 +3 28487 28732 28519 +3 28488 28520 28733 +3 28488 28733 28691 +3 28489 28666 29172 +3 28489 29172 29000 +3 28490 29001 29173 +3 28490 29173 28667 +3 28491 28660 29145 +3 28491 29145 28980 +3 28492 28981 29146 +3 28492 29146 28661 +3 28493 30663 31252 +3 28493 31252 29307 +3 28494 29308 31253 +3 28494 31253 30664 +3 28495 31036 33430 +3 28495 33430 31379 +3 28496 31380 33431 +3 28496 33431 31037 +3 28497 28876 29194 +3 28497 29194 28874 +3 28498 28875 29195 +3 28498 29195 28877 +3 28499 28822 29436 +3 28499 29436 28821 +3 28500 28567 28744 +3 28500 28744 28676 +3 28501 28677 28745 +3 28501 28745 28568 +3 28502 30268 30627 +3 28502 30627 29036 +3 28503 29037 30628 +3 28503 30628 30269 +3 28504 28692 28805 +3 28504 28805 28616 +3 28505 28617 28806 +3 28505 28806 28693 +3 28506 28742 28789 +3 28506 28789 28527 +3 28507 28528 28790 +3 28507 28790 28743 +3 28508 28912 29822 +3 28508 29822 29420 +3 28509 29421 29823 +3 28509 29823 28913 +3 28510 29419 31061 +3 28510 31061 29418 +3 28511 30284 33615 +3 28511 33615 32370 +3 28512 32371 33616 +3 28512 33616 30285 +3 28513 30697 31298 +3 28513 31298 29422 +3 28514 29423 31299 +3 28514 31299 30698 +3 28515 29699 30153 +3 28515 30153 28976 +3 28516 28977 30154 +3 28516 30154 29700 +3 28517 32549 33524 +3 28517 33524 29875 +3 28518 29876 33525 +3 28518 33525 32550 +3 28519 28732 28772 +3 28519 28772 28648 +3 28520 28649 28773 +3 28520 28773 28733 +3 28521 28674 29125 +3 28521 29125 28968 +3 28522 28969 29126 +3 28522 29126 28675 +3 28523 28948 30403 +3 28523 30403 30045 +3 28524 30046 30404 +3 28524 30404 28949 +3 28525 28748 28813 +3 28525 28813 28571 +3 28526 28572 28814 +3 28526 28814 28749 +3 28527 28789 28798 +3 28527 28798 28528 +3 28528 28798 28790 +3 28529 31454 32101 +3 28529 32101 29449 +3 28530 29450 32102 +3 28530 32102 31455 +3 28531 29210 29962 +3 28531 29962 29232 +3 28532 28652 29184 +3 28532 29184 29081 +3 28533 29082 29185 +3 28533 29185 28653 +3 28534 29233 29963 +3 28534 29963 29211 +3 28535 29482 30585 +3 28535 30585 29777 +3 28536 29778 30586 +3 28536 30586 29483 +3 28537 30689 32437 +3 28537 32437 30742 +3 28538 30743 32438 +3 28538 32438 30690 +3 28539 28704 28811 +3 28539 28811 28636 +3 28540 28637 28812 +3 28540 28812 28705 +3 28541 29856 31095 +3 28541 31095 29899 +3 28542 29900 31098 +3 28542 31098 29857 +3 28543 29133 30560 +3 28543 30560 30086 +3 28544 30087 30561 +3 28544 30561 29134 +3 28545 31483 32376 +3 28545 32376 29814 +3 28546 29815 32377 +3 28546 32377 31484 +3 28547 29848 30291 +3 28547 30291 29034 +3 28548 29035 30292 +3 28548 30292 29849 +3 28549 29099 30436 +3 28549 30436 29954 +3 28550 29955 30437 +3 28550 30437 29100 +3 28551 28787 29241 +3 28551 29241 28996 +3 28552 28999 29242 +3 28552 29242 28788 +3 28553 30351 31395 +3 28553 31395 29995 +3 28554 29996 31396 +3 28554 31396 30352 +3 28555 29317 29626 +3 28555 29626 28892 +3 28556 28893 29627 +3 28556 29627 29318 +3 28557 29351 29478 +3 28557 29478 29060 +3 28558 29061 29479 +3 28558 29479 29352 +3 28559 29476 31568 +3 28559 31568 30878 +3 28560 30879 31569 +3 28560 31569 29477 +3 28561 31127 33727 +3 28561 33727 31646 +3 28562 31647 33728 +3 28562 33728 31128 +3 28563 28801 29153 +3 28563 29153 28930 +3 28564 28931 29154 +3 28564 29154 28802 +3 28565 29117 31315 +3 28565 31315 30906 +3 28566 30907 31316 +3 28566 31316 29118 +3 28567 28622 28809 +3 28567 28809 28744 +3 28568 28745 28810 +3 28568 28810 28623 +3 28569 29820 30199 +3 28569 30199 28954 +3 28570 28955 30200 +3 28570 30200 29821 +3 28571 28813 28851 +3 28571 28851 28640 +3 28572 28641 28852 +3 28572 28852 28814 +3 28573 29816 32225 +3 28573 32225 31206 +3 28574 31207 32226 +3 28574 32226 29817 +3 28575 28720 28872 +3 28575 28872 28692 +3 28576 28693 28873 +3 28576 28873 28721 +3 28577 30104 30654 +3 28577 30654 29287 +3 28578 29288 30655 +3 28578 30655 30104 +3 28579 30847 32805 +3 28579 32805 30981 +3 28580 30982 32806 +3 28580 32806 30848 +3 28581 30343 30831 +3 28581 30831 29257 +3 28582 29258 30832 +3 28582 30832 30344 +3 28583 28886 29870 +3 28583 29870 29594 +3 28584 29595 29871 +3 28584 29871 28887 +3 28585 31489 32336 +3 28585 32336 29773 +3 28586 29774 32337 +3 28586 32337 31490 +3 28587 31791 32823 +3 28587 32823 30029 +3 28588 30030 32824 +3 28588 32824 31792 +3 28589 29303 29675 +3 28589 29675 28952 +3 28590 28953 29676 +3 28590 29676 29304 +3 28591 29060 29667 +3 28591 29667 29226 +3 28592 29227 29668 +3 28592 29668 29061 +3 28593 29553 31375 +3 28593 31375 30667 +3 28594 30668 31376 +3 28594 31376 29554 +3 28595 28676 28882 +3 28595 28882 28764 +3 28596 28765 28883 +3 28596 28883 28677 +3 28597 31347 33741 +3 28597 33741 31468 +3 28598 31469 33742 +3 28598 33742 31348 +3 28599 29404 29606 +3 28599 29606 28910 +3 28600 28911 29607 +3 28600 29607 29405 +3 28601 28731 28856 +3 28601 28856 28730 +3 28602 28728 28857 +3 28602 28857 28680 +3 28603 28681 28858 +3 28603 28858 28729 +3 28604 29083 30051 +3 28604 30051 29569 +3 28605 29570 30052 +3 28605 30052 29084 +3 28606 31470 32551 +3 28606 32551 30053 +3 28607 30054 32552 +3 28607 32552 31471 +3 28608 29402 29608 +3 28608 29608 28823 +3 28609 28824 29609 +3 28609 29609 29403 +3 28610 29313 30629 +3 28610 30629 30065 +3 28611 30066 30630 +3 28611 30630 29314 +3 28612 29010 29868 +3 28612 29868 29460 +3 28613 29460 29869 +3 28613 29869 29011 +3 28614 31365 33539 +3 28614 33539 31238 +3 28615 31239 33540 +3 28615 33540 31366 +3 28616 28805 28894 +3 28616 28894 28684 +3 28617 28685 28895 +3 28617 28895 28806 +3 28618 28776 28896 +3 28618 28896 28704 +3 28619 28705 28897 +3 28619 28897 28777 +3 28620 29020 29974 +3 28620 29974 29581 +3 28621 29582 29975 +3 28621 29975 29021 +3 28622 28642 28849 +3 28622 28849 28809 +3 28623 28810 28850 +3 28623 28850 28643 +3 28624 28825 29230 +3 28624 29230 29024 +3 28625 29025 29231 +3 28625 29231 28826 +3 28626 30317 30645 +3 28626 30645 29093 +3 28627 29094 30646 +3 28627 30646 30318 +3 28628 31077 33063 +3 28628 33063 31036 +3 28629 31037 33064 +3 28629 33064 31078 +3 28630 29339 29641 +3 28630 29641 28926 +3 28631 28927 29642 +3 28631 29642 29340 +3 28632 28730 28880 +3 28632 28880 28728 +3 28633 28729 28881 +3 28633 28881 28731 +3 28634 29048 29170 +3 28634 29170 28740 +3 28635 28741 29171 +3 28635 29171 29049 +3 28636 28811 28890 +3 28636 28890 28690 +3 28637 28691 28891 +3 28637 28891 28812 +3 28638 29501 30185 +3 28638 30185 29002 +3 28639 29003 30186 +3 28639 30186 29502 +3 28640 28851 28859 +3 28640 28859 28642 +3 28641 28643 28860 +3 28641 28860 28852 +3 28642 28859 28849 +3 28643 28850 28860 +3 28644 32482 33800 +3 28644 33800 30440 +3 28645 30441 33801 +3 28645 33801 32483 +3 28646 32119 32972 +3 28646 32972 29803 +3 28647 29804 32973 +3 28647 32973 32120 +3 28648 28772 28888 +3 28648 28888 28720 +3 28649 28721 28889 +3 28649 28889 28773 +3 28650 28764 28920 +3 28650 28920 28776 +3 28651 28777 28921 +3 28651 28921 28765 +3 28652 28740 29285 +3 28652 29285 29184 +3 28653 29185 29286 +3 28653 29286 28741 +3 28654 28982 30023 +3 28654 30023 29616 +3 28655 29617 30024 +3 28655 30024 28983 +3 28656 30724 31236 +3 28656 31236 29343 +3 28657 29344 31237 +3 28657 31237 30725 +3 28658 29840 30656 +3 28658 30656 29635 +3 28659 29636 30657 +3 28659 30657 29841 +3 28660 28819 29309 +3 28660 29309 29145 +3 28661 29146 29310 +3 28661 29310 28820 +3 28662 28710 29220 +3 28662 29220 29131 +3 28663 29132 29221 +3 28663 29221 28711 +3 28664 30141 31474 +3 28664 31474 30380 +3 28665 30381 31475 +3 28665 31475 30142 +3 28666 28837 29341 +3 28666 29341 29172 +3 28667 29173 29342 +3 28667 29342 28838 +3 28668 31646 33784 +3 28668 33784 31286 +3 28669 31287 33785 +3 28669 33785 31647 +3 28670 29299 29757 +3 28670 29757 29111 +3 28671 29112 29758 +3 28671 29758 29300 +3 28672 29157 30532 +3 28672 30532 30137 +3 28673 30138 30533 +3 28673 30533 29158 +3 28674 28930 29276 +3 28674 29276 29125 +3 28675 29126 29277 +3 28675 29277 28931 +3 28676 28744 28938 +3 28676 28938 28882 +3 28677 28883 28939 +3 28677 28939 28745 +3 28678 30088 33810 +3 28678 33810 32835 +3 28679 32836 33811 +3 28679 33811 30089 +3 28680 28857 28918 +3 28680 28918 28748 +3 28681 28749 28919 +3 28681 28919 28858 +3 28682 29978 30241 +3 28682 30241 28950 +3 28683 28951 30242 +3 28683 30242 29979 +3 28684 28894 28944 +3 28684 28944 28742 +3 28685 28743 28945 +3 28685 28945 28895 +3 28686 32677 33915 +3 28686 33915 30472 +3 28687 30473 33916 +3 28687 33916 32678 +3 28688 28968 29390 +3 28688 29390 29091 +3 28689 29092 29391 +3 28689 29391 28969 +3 28690 28890 28928 +3 28690 28928 28732 +3 28691 28733 28929 +3 28691 28929 28891 +3 28692 28872 28956 +3 28692 28956 28805 +3 28693 28806 28957 +3 28693 28957 28873 +3 28694 29937 30421 +3 28694 30421 29214 +3 28695 29215 30422 +3 28695 30422 29938 +3 28696 29655 30490 +3 28696 30490 29618 +3 28697 29619 30491 +3 28697 30491 29656 +3 28698 30223 31250 +3 28698 31250 30141 +3 28699 30142 31251 +3 28699 31251 30224 +3 28700 29635 30496 +3 28700 30496 29655 +3 28701 29656 30497 +3 28701 30497 29636 +3 28702 30177 31434 +3 28702 31434 30357 +3 28703 30358 31435 +3 28703 31435 30178 +3 28704 28896 28974 +3 28704 28974 28811 +3 28705 28812 28975 +3 28705 28975 28897 +3 28706 29521 31216 +3 28706 31216 30614 +3 28707 30615 31217 +3 28707 31217 29522 +3 28708 29455 29543 +3 28708 29543 28738 +3 28709 28739 29544 +3 28709 29544 29456 +3 28710 28768 29255 +3 28710 29255 29220 +3 28711 29221 29256 +3 28711 29256 28769 +3 28712 29291 29968 +3 28712 29968 29406 +3 28713 29407 29969 +3 28713 29969 29292 +3 28714 29649 31994 +3 28714 31994 31304 +3 28715 31305 31995 +3 28715 31995 29650 +3 28716 29836 30341 +3 28716 30341 29249 +3 28717 29250 30342 +3 28717 30342 29837 +3 28718 31905 34024 +3 28718 34024 31365 +3 28719 31366 34025 +3 28719 34025 31906 +3 28720 28888 29012 +3 28720 29012 28872 +3 28721 28873 29013 +3 28721 29013 28889 +3 28722 28752 29781 +3 28722 29781 29735 +3 28723 29736 29782 +3 28723 29782 28753 +3 28724 29226 29818 +3 28724 29818 29335 +3 28725 29336 29819 +3 28725 29819 29227 +3 28726 29113 29424 +3 28726 29424 29048 +3 28727 29049 29425 +3 28727 29425 29114 +3 28728 28880 28972 +3 28728 28972 28857 +3 28729 28858 28973 +3 28729 28973 28881 +3 28730 28856 28966 +3 28730 28966 28880 +3 28731 28881 28967 +3 28731 28967 28856 +3 28732 28928 28962 +3 28732 28962 28772 +3 28733 28773 28963 +3 28733 28963 28929 +3 28734 30981 32787 +3 28734 32787 30948 +3 28735 30949 32788 +3 28735 32788 30982 +3 28736 28750 30293 +3 28736 30293 30254 +3 28737 30255 30294 +3 28737 30294 28750 +3 28738 29543 29555 +3 28738 29555 28751 +3 28739 28751 29556 +3 28739 29556 29544 +3 28740 29170 29285 +3 28741 29286 29171 +3 28742 28944 28992 +3 28742 28992 28789 +3 28743 28790 28993 +3 28743 28993 28945 +3 28744 28809 29022 +3 28744 29022 28938 +3 28745 28939 29023 +3 28745 29023 28810 +3 28746 28747 31416 +3 28746 31416 31397 +3 28747 31398 31416 +3 28748 28918 28970 +3 28748 28970 28813 +3 28749 28814 28971 +3 28749 28971 28919 +3 28750 30294 30293 +3 28751 29555 29556 +3 28752 28753 29796 +3 28752 29796 29781 +3 28753 29782 29796 +3 28754 29355 30552 +3 28754 30552 30075 +3 28755 30076 30553 +3 28755 30553 29356 +3 28756 30518 31666 +3 28756 31666 29541 +3 28757 29542 31667 +3 28757 31667 30519 +3 28758 31468 33830 +3 28758 33830 31616 +3 28759 31617 33831 +3 28759 33831 31469 +3 28760 29743 32494 +3 28760 32494 31814 +3 28761 31815 32495 +3 28761 32495 29744 +3 28762 31258 33189 +3 28762 33189 31077 +3 28763 31078 33190 +3 28763 33190 31259 +3 28764 28882 29040 +3 28764 29040 28920 +3 28765 28921 29041 +3 28765 29041 28883 +3 28766 29604 30321 +3 28766 30321 29501 +3 28767 29502 30322 +3 28767 30322 29605 +3 28768 28784 29295 +3 28768 29295 29255 +3 28769 29256 29296 +3 28769 29296 28784 +3 28770 30898 31577 +3 28770 31577 29673 +3 28771 29674 31578 +3 28771 31578 30899 +3 28772 28962 28997 +3 28772 28997 28888 +3 28773 28889 28998 +3 28773 28998 28963 +3 28774 29523 31062 +3 28774 31062 30482 +3 28775 30483 31063 +3 28775 31063 29524 +3 28776 28920 29044 +3 28776 29044 28896 +3 28777 28897 29045 +3 28777 29045 28921 +3 28778 29447 29725 +3 28778 29725 29072 +3 28779 29073 29726 +3 28779 29726 29448 +3 28780 30122 32789 +3 28780 32789 31834 +3 28781 31835 32790 +3 28781 32790 30123 +3 28782 30888 31232 +3 28782 31232 30209 +3 28783 30210 31233 +3 28783 31233 30889 +3 28784 29296 29295 +3 28785 30514 31015 +3 28785 31015 29463 +3 28786 29464 31016 +3 28786 31016 30515 +3 28787 28980 29437 +3 28787 29437 29241 +3 28788 29242 29438 +3 28788 29438 28981 +3 28789 28992 29032 +3 28789 29032 28798 +3 28790 28798 29033 +3 28790 29033 28993 +3 28791 30297 33224 +3 28791 33224 32103 +3 28792 32104 33225 +3 28792 33225 30298 +3 28793 29024 29379 +3 28793 29379 29025 +3 28794 30357 31570 +3 28794 31570 30399 +3 28795 30400 31571 +3 28795 31571 30358 +3 28796 31286 33428 +3 28796 33428 31341 +3 28797 31342 33429 +3 28797 33429 31287 +3 28798 29032 29033 +3 28799 29377 29893 +3 28799 29893 29299 +3 28800 29300 29894 +3 28800 29894 29378 +3 28801 29000 29375 +3 28801 29375 29153 +3 28802 29154 29376 +3 28802 29376 29001 +3 28803 30625 34109 +3 28803 34109 32769 +3 28804 32770 34110 +3 28804 34110 30626 +3 28805 28956 29068 +3 28805 29068 28894 +3 28806 28895 29069 +3 28806 29069 28957 +3 28807 29777 30782 +3 28807 30782 29988 +3 28808 29991 30783 +3 28808 30783 29778 +3 28809 28849 29064 +3 28809 29064 29022 +3 28810 29023 29065 +3 28810 29065 28850 +3 28811 28974 29066 +3 28811 29066 28890 +3 28812 28891 29067 +3 28812 29067 28975 +3 28813 28970 29030 +3 28813 29030 28851 +3 28814 28852 29031 +3 28814 29031 28971 +3 28815 30339 32924 +3 28815 32924 31771 +3 28816 31772 32925 +3 28816 32925 30340 +3 28817 29091 29507 +3 28817 29507 29204 +3 28818 29205 29508 +3 28818 29508 29092 +3 28819 28934 29453 +3 28819 29453 29309 +3 28820 29310 29454 +3 28820 29454 28935 +3 28821 29436 29785 +3 28821 29785 29135 +3 28822 29136 29786 +3 28822 29786 29436 +3 28823 29608 29812 +3 28823 29812 29018 +3 28824 29019 29813 +3 28824 29813 29609 +3 28825 28996 29412 +3 28825 29412 29230 +3 28826 29231 29413 +3 28826 29413 28999 +3 28827 30082 32748 +3 28827 32748 31842 +3 28828 31843 32749 +3 28828 32749 30083 +3 28829 29406 30262 +3 28829 30262 29685 +3 28830 29686 30263 +3 28830 30263 29407 +3 28831 30037 33331 +3 28831 33331 32441 +3 28832 32442 33332 +3 28832 33332 30038 +3 28833 29200 29513 +3 28833 29513 29113 +3 28834 29114 29514 +3 28834 29514 29201 +3 28835 29335 29913 +3 28835 29913 29386 +3 28836 29387 29914 +3 28836 29914 29336 +3 28837 28940 29469 +3 28837 29469 29341 +3 28838 29342 29470 +3 28838 29470 28941 +3 28839 30021 30826 +3 28839 30826 29830 +3 28840 29831 30827 +3 28840 30827 30022 +3 28841 31579 32653 +3 28841 32653 30143 +3 28842 30144 32654 +3 28842 32654 31580 +3 28843 29697 31738 +3 28843 31738 31073 +3 28844 31074 31739 +3 28844 31739 29698 +3 28845 30209 31274 +3 28845 31274 30223 +3 28846 30224 31275 +3 28846 31275 30210 +3 28847 30814 31278 +3 28847 31278 29461 +3 28848 29462 31279 +3 28848 31279 30815 +3 28849 28859 29077 +3 28849 29077 29064 +3 28850 29065 29078 +3 28850 29078 28860 +3 28851 29030 29075 +3 28851 29075 28859 +3 28852 28860 29076 +3 28852 29076 29031 +3 28853 29988 30794 +3 28853 30794 29840 +3 28854 29841 30795 +3 28854 30795 29991 +3 28855 29358 30377 +3 28855 30377 29357 +3 28856 28967 29074 +3 28856 29074 28966 +3 28857 28972 29070 +3 28857 29070 28918 +3 28858 28919 29071 +3 28858 29071 28973 +3 28859 29075 29077 +3 28860 29078 29076 +3 28861 31554 34090 +3 28861 34090 31905 +3 28862 31906 34091 +3 28862 34091 31555 +3 28863 30183 30468 +3 28863 30468 29365 +3 28864 29366 30469 +3 28864 30469 30184 +3 28865 29879 30564 +3 28865 30564 29604 +3 28866 29605 30565 +3 28866 30565 29880 +3 28867 29834 31556 +3 28867 31556 29835 +3 28868 30647 34209 +3 28868 34209 32974 +3 28869 32975 34210 +3 28869 34210 30648 +3 28870 29838 31812 +3 28870 31812 31113 +3 28871 31114 31813 +3 28871 31813 29839 +3 28872 29012 29103 +3 28872 29103 28956 +3 28873 28957 29104 +3 28873 29104 29013 +3 28874 29194 29529 +3 28874 29529 29200 +3 28875 29201 29530 +3 28875 29530 29195 +3 28876 29204 29539 +3 28876 29539 29194 +3 28877 29195 29540 +3 28877 29540 29205 +3 28878 31256 31996 +3 28878 31996 29866 +3 28879 29867 31997 +3 28879 31997 31257 +3 28880 28966 29087 +3 28880 29087 28972 +3 28881 28973 29088 +3 28881 29088 28967 +3 28882 28938 29107 +3 28882 29107 29040 +3 28883 29041 29108 +3 28883 29108 28939 +3 28884 31296 31761 +3 28884 31761 29471 +3 28885 29472 31762 +3 28885 31762 31297 +3 28886 29101 30115 +3 28886 30115 29870 +3 28887 29871 30116 +3 28887 30116 29102 +3 28888 28997 29123 +3 28888 29123 29012 +3 28889 29013 29124 +3 28889 29124 28998 +3 28890 29066 29105 +3 28890 29105 28928 +3 28891 28929 29106 +3 28891 29106 29067 +3 28892 29626 29931 +3 28892 29931 29159 +3 28893 29160 29932 +3 28893 29932 29627 +3 28894 29068 29115 +3 28894 29115 28944 +3 28895 28945 29116 +3 28895 29116 29069 +3 28896 29044 29127 +3 28896 29127 28974 +3 28897 28975 29128 +3 28897 29128 29045 +3 28898 30399 31897 +3 28898 31897 30705 +3 28899 30706 31898 +3 28899 31898 30400 +3 28900 29386 29935 +3 28900 29935 29377 +3 28901 29378 29936 +3 28901 29936 29387 +3 28902 31038 31836 +3 28902 31836 29943 +3 28903 29944 31837 +3 28903 31837 31039 +3 28904 29561 29976 +3 28904 29976 29303 +3 28905 29304 29977 +3 28905 29977 29562 +3 28906 29691 31268 +3 28906 31268 30772 +3 28907 30773 31269 +3 28907 31269 29692 +3 28908 31616 34323 +3 28908 34323 32162 +3 28909 32163 34324 +3 28909 34324 31617 +3 28910 29606 29905 +3 28910 29905 29188 +3 28911 29189 29906 +3 28911 29906 29607 +3 28912 29261 30197 +3 28912 30197 29822 +3 28913 29823 30198 +3 28913 30198 29262 +3 28914 29289 30315 +3 28914 30315 29949 +3 28915 29950 30316 +3 28915 30316 29290 +3 28916 30380 31638 +3 28916 31638 30351 +3 28917 30352 31639 +3 28917 31639 30381 +3 28918 29070 29119 +3 28918 29119 28970 +3 28919 28971 29120 +3 28919 29120 29071 +3 28920 29040 29161 +3 28920 29161 29044 +3 28921 29045 29162 +3 28921 29162 29041 +3 28922 29480 30876 +3 28922 30876 30438 +3 28923 30439 30877 +3 28923 30877 29481 +3 28924 29505 31167 +3 28924 31167 30752 +3 28925 30753 31168 +3 28925 31168 29506 +3 28926 29641 29933 +3 28926 29933 29164 +3 28927 29165 29934 +3 28927 29934 29642 +3 28928 29105 29151 +3 28928 29151 28962 +3 28929 28963 29152 +3 28929 29152 29106 +3 28930 29153 29517 +3 28930 29517 29276 +3 28931 29277 29518 +3 28931 29518 29154 +3 28932 31204 33159 +3 28932 33159 31258 +3 28933 31259 33160 +3 28933 33160 31205 +3 28934 29081 29590 +3 28934 29590 29453 +3 28935 29454 29591 +3 28935 29591 29082 +3 28936 29571 30167 +3 28936 30167 29547 +3 28937 29548 30168 +3 28937 30168 29572 +3 28938 29022 29196 +3 28938 29196 29107 +3 28939 29108 29197 +3 28939 29197 29023 +3 28940 29131 29585 +3 28940 29585 29469 +3 28941 29470 29586 +3 28941 29586 29132 +3 28942 29761 30367 +3 28942 30367 29571 +3 28943 29572 30368 +3 28943 30368 29762 +3 28944 29115 29178 +3 28944 29178 28992 +3 28945 28993 29179 +3 28945 29179 29116 +3 28946 31341 33542 +3 28946 33542 31536 +3 28947 31537 33543 +3 28947 33543 31342 +3 28948 29301 30669 +3 28948 30669 30403 +3 28949 30404 30670 +3 28949 30670 29302 +3 28950 30241 30425 +3 28950 30425 29759 +3 28951 29760 30426 +3 28951 30426 30242 +3 28952 29675 30031 +3 28952 30031 29317 +3 28953 29318 30032 +3 28953 30032 29676 +3 28954 30199 30480 +3 28954 30480 29321 +3 28955 29322 30481 +3 28955 30481 30200 +3 28956 29103 29222 +3 28956 29222 29068 +3 28957 29069 29223 +3 28957 29223 29104 +3 28958 31603 33767 +3 28958 33767 31554 +3 28959 31555 33768 +3 28959 33768 31604 +3 28960 30111 30928 +3 28960 30928 30021 +3 28961 30022 30929 +3 28961 30929 30112 +3 28962 29151 29198 +3 28962 29198 28997 +3 28963 28998 29199 +3 28963 29199 29152 +3 28964 29765 30631 +3 28964 30631 29958 +3 28965 29959 30632 +3 28965 30632 29766 +3 28966 29074 29206 +3 28966 29206 29087 +3 28967 29088 29207 +3 28967 29207 29074 +3 28968 29125 29559 +3 28968 29559 29390 +3 28969 29391 29560 +3 28969 29560 29126 +3 28970 29119 29174 +3 28970 29174 29030 +3 28971 29031 29175 +3 28971 29175 29120 +3 28972 29087 29202 +3 28972 29202 29070 +3 28973 29071 29203 +3 28973 29203 29088 +3 28974 29127 29228 +3 28974 29228 29066 +3 28975 29067 29229 +3 28975 29229 29128 +3 28976 30153 30500 +3 28976 30500 29408 +3 28977 29409 30501 +3 28977 30501 30154 +3 28978 32419 33593 +3 28978 33593 30502 +3 28979 30503 33594 +3 28979 33594 32420 +3 28980 29145 29624 +3 28980 29624 29437 +3 28981 29438 29625 +3 28981 29625 29146 +3 28982 29305 30319 +3 28982 30319 30023 +3 28983 30024 30320 +3 28983 30320 29306 +3 28984 31668 32429 +3 28984 32429 29992 +3 28985 29993 32430 +3 28985 32430 31669 +3 28986 32125 32897 +3 28986 32897 30033 +3 28987 30034 32898 +3 28987 32898 32126 +3 28988 29741 31704 +3 28988 31704 31149 +3 28989 31150 31705 +3 28989 31705 29742 +3 28990 29759 30458 +3 28990 30458 29765 +3 28991 29766 30459 +3 28991 30459 29760 +3 28992 29178 29224 +3 28992 29224 29032 +3 28993 29033 29225 +3 28993 29225 29179 +3 28994 32730 33668 +3 28994 33668 30266 +3 28995 30267 33669 +3 28995 33669 32731 +3 28996 29241 29677 +3 28996 29677 29412 +3 28997 29198 29123 +3 28998 29124 29199 +3 28999 29413 29678 +3 28999 29678 29242 +3 29000 29172 29577 +3 29000 29577 29375 +3 29001 29376 29578 +3 29001 29578 29173 +3 29002 30185 30454 +3 29002 30454 29353 +3 29003 29354 30455 +3 29003 30455 30186 +3 29004 32070 33283 +3 29004 33283 30534 +3 29005 30535 33284 +3 29005 33284 32071 +3 29006 32166 33220 +3 29006 33220 30385 +3 29007 30386 33221 +3 29007 33221 32167 +3 29008 29805 31208 +3 29008 31208 30607 +3 29009 30607 31209 +3 29009 31209 29806 +3 29010 29420 30280 +3 29010 30280 29868 +3 29011 29869 30281 +3 29011 30281 29421 +3 29012 29123 29253 +3 29012 29253 29103 +3 29013 29104 29254 +3 29013 29254 29124 +3 29014 29779 31381 +3 29014 31381 30824 +3 29015 30825 31382 +3 29015 31382 29780 +3 29016 30756 31977 +3 29016 31977 30540 +3 29017 30541 31978 +3 29017 31978 30757 +3 29018 29812 29989 +3 29018 29989 29186 +3 29019 29187 29990 +3 29019 29990 29813 +3 29020 29380 30337 +3 29020 30337 29974 +3 29021 29975 30338 +3 29021 30338 29381 +3 29022 29064 29247 +3 29022 29247 29196 +3 29023 29197 29248 +3 29023 29248 29065 +3 29024 29230 29600 +3 29024 29600 29379 +3 29025 29379 29601 +3 29025 29601 29231 +3 29026 32162 34396 +3 29026 34396 31781 +3 29027 31782 34397 +3 29027 34397 32163 +3 29028 31787 31811 +3 29028 31811 29029 +3 29029 31811 31788 +3 29030 29174 29245 +3 29030 29245 29075 +3 29031 29076 29246 +3 29031 29246 29175 +3 29032 29224 29236 +3 29032 29236 29033 +3 29033 29236 29225 +3 29034 30291 30610 +3 29034 30610 29509 +3 29035 29510 30611 +3 29035 30611 30292 +3 29036 30627 30977 +3 29036 30977 29511 +3 29037 29512 30978 +3 29037 30978 30628 +3 29038 30683 31893 +3 29038 31893 30518 +3 29039 30519 31894 +3 29039 31894 30684 +3 29040 29107 29259 +3 29040 29259 29161 +3 29041 29162 29260 +3 29041 29260 29108 +3 29042 30393 31210 +3 29042 31210 30111 +3 29043 30112 31211 +3 29043 31211 30394 +3 29044 29161 29269 +3 29044 29269 29127 +3 29045 29128 29270 +3 29045 29270 29162 +3 29046 29685 30419 +3 29046 30419 29842 +3 29047 29845 30420 +3 29047 30420 29686 +3 29048 29424 29583 +3 29048 29583 29170 +3 29049 29171 29584 +3 29049 29584 29425 +3 29050 30665 31169 +3 29050 31169 29711 +3 29051 29712 31170 +3 29051 31170 30666 +3 29052 32180 33161 +3 29052 33161 30375 +3 29053 30376 33162 +3 29053 33162 32181 +3 29054 29598 31200 +3 29054 31200 30796 +3 29055 30797 31201 +3 29055 31201 29599 +3 29056 30554 31011 +3 29056 31011 29683 +3 29057 29684 31012 +3 29057 31012 30555 +3 29058 30540 31720 +3 29058 31720 30605 +3 29059 30606 31721 +3 29059 31721 30541 +3 29060 29478 30107 +3 29060 30107 29667 +3 29061 29668 30108 +3 29061 30108 29479 +3 29062 29883 32109 +3 29062 32109 30854 +3 29063 30855 32110 +3 29063 32110 29884 +3 29064 29077 29274 +3 29064 29274 29247 +3 29065 29248 29275 +3 29065 29275 29078 +3 29066 29228 29293 +3 29066 29293 29105 +3 29067 29106 29294 +3 29067 29294 29229 +3 29068 29222 29297 +3 29068 29297 29115 +3 29069 29116 29298 +3 29069 29298 29223 +3 29070 29202 29265 +3 29070 29265 29119 +3 29071 29120 29266 +3 29071 29266 29203 +3 29072 29725 30015 +3 29072 30015 29339 +3 29073 29340 30016 +3 29073 30016 29726 +3 29074 29207 29271 +3 29074 29271 29206 +3 29075 29245 29283 +3 29075 29283 29077 +3 29076 29078 29284 +3 29076 29284 29246 +3 29077 29283 29274 +3 29078 29275 29284 +3 29079 30423 33081 +3 29079 33081 31915 +3 29080 31916 33082 +3 29080 33082 30424 +3 29081 29184 29689 +3 29081 29689 29590 +3 29082 29591 29690 +3 29082 29690 29185 +3 29083 29545 30446 +3 29083 30446 30051 +3 29084 30052 30447 +3 29084 30447 29546 +3 29085 30080 30703 +3 29085 30703 29879 +3 29086 29880 30704 +3 29086 30704 30081 +3 29087 29206 29311 +3 29087 29311 29202 +3 29088 29203 29312 +3 29088 29312 29207 +3 29089 31066 31748 +3 29089 31748 30003 +3 29090 30004 31749 +3 29090 31749 31067 +3 29091 29390 29791 +3 29091 29791 29507 +3 29092 29508 29792 +3 29092 29792 29391 +3 29093 30645 31262 +3 29093 31262 29925 +3 29094 29926 31263 +3 29094 31263 30646 +3 29095 29877 30462 +3 29095 30462 29761 +3 29096 29762 30463 +3 29096 30463 29878 +3 29097 30760 32000 +3 29097 32000 30683 +3 29098 30684 32001 +3 29098 32001 30761 +3 29099 29639 30845 +3 29099 30845 30436 +3 29100 30437 30846 +3 29100 30846 29640 +3 29101 29349 30335 +3 29101 30335 30115 +3 29102 30116 30336 +3 29102 30336 29350 +3 29103 29253 29361 +3 29103 29361 29222 +3 29104 29223 29362 +3 29104 29362 29254 +3 29105 29293 29345 +3 29105 29345 29151 +3 29106 29152 29346 +3 29106 29346 29294 +3 29107 29196 29363 +3 29107 29363 29259 +3 29108 29260 29364 +3 29108 29364 29197 +3 29109 30113 32066 +3 29109 32066 31333 +3 29110 31334 32067 +3 29110 32067 30114 +3 29111 29757 30205 +3 29111 30205 29561 +3 29112 29562 30206 +3 29112 30206 29758 +3 29113 29513 29807 +3 29113 29807 29424 +3 29114 29425 29808 +3 29114 29808 29514 +3 29115 29297 29359 +3 29115 29359 29178 +3 29116 29179 29360 +3 29116 29360 29298 +3 29117 30595 31700 +3 29117 31700 31315 +3 29118 31316 31701 +3 29118 31701 30596 +3 29119 29265 29329 +3 29119 29329 29174 +3 29120 29175 29330 +3 29120 29330 29266 +3 29121 31536 33528 +3 29121 33528 31456 +3 29122 31457 33529 +3 29122 33529 31537 +3 29123 29198 29323 +3 29123 29323 29253 +3 29124 29254 29324 +3 29124 29324 29199 +3 29125 29276 29707 +3 29125 29707 29559 +3 29126 29560 29708 +3 29126 29708 29277 +3 29127 29269 29367 +3 29127 29367 29228 +3 29128 29229 29368 +3 29128 29368 29270 +3 29129 31779 33856 +3 29129 33856 31603 +3 29130 31604 33857 +3 29130 33857 31780 +3 29131 29220 29661 +3 29131 29661 29585 +3 29132 29586 29662 +3 29132 29662 29221 +3 29133 29687 30965 +3 29133 30965 30560 +3 29134 30561 30966 +3 29134 30966 29688 +3 29135 29785 30090 +3 29135 30090 29447 +3 29136 29448 30091 +3 29136 30091 29786 +3 29137 31522 32227 +3 29137 32227 30096 +3 29138 30097 32228 +3 29138 32228 31523 +3 29139 31781 34052 +3 29139 34052 31844 +3 29140 31845 34053 +3 29140 34053 31782 +3 29141 29958 30736 +3 29141 30736 30102 +3 29142 30103 30737 +3 29142 30737 29959 +3 29143 30227 32460 +3 29143 32460 31654 +3 29144 31655 32461 +3 29144 32461 30228 +3 29145 29309 29788 +3 29145 29788 29624 +3 29146 29625 29789 +3 29146 29789 29310 +3 29147 30276 31288 +3 29147 31288 30450 +3 29148 30451 31289 +3 29148 31289 30277 +3 29149 29826 32202 +3 29149 32202 31694 +3 29150 31695 32203 +3 29150 32203 29827 +3 29151 29345 29371 +3 29151 29371 29198 +3 29152 29199 29372 +3 29152 29372 29346 +3 29153 29375 29731 +3 29153 29731 29517 +3 29154 29518 29732 +3 29154 29732 29376 +3 29155 30934 31612 +3 29155 31612 30011 +3 29156 30012 31613 +3 29156 31613 30935 +3 29157 29622 30890 +3 29157 30890 30532 +3 29158 30533 30891 +3 29158 30891 29623 +3 29159 29931 30179 +3 29159 30179 29404 +3 29160 29405 30180 +3 29160 30180 29932 +3 29161 29259 29388 +3 29161 29388 29269 +3 29162 29270 29389 +3 29162 29389 29260 +3 29163 30230 31987 +3 29163 31987 30229 +3 29164 29933 30151 +3 29164 30151 29402 +3 29165 29403 30152 +3 29165 30152 29934 +3 29166 30444 33956 +3 29166 33956 33025 +3 29167 33026 33957 +3 29167 33957 30445 +3 29168 31572 32283 +3 29168 32283 30235 +3 29169 30236 32284 +3 29169 32284 31573 +3 29170 29583 29695 +3 29170 29695 29285 +3 29171 29286 29696 +3 29171 29696 29584 +3 29172 29341 29739 +3 29172 29739 29577 +3 29173 29578 29740 +3 29173 29740 29342 +3 29174 29329 29394 +3 29174 29394 29245 +3 29175 29246 29395 +3 29175 29395 29330 +3 29176 30707 33927 +3 29176 33927 32732 +3 29177 32733 33928 +3 29177 33928 30708 +3 29178 29359 29384 +3 29178 29384 29224 +3 29179 29225 29385 +3 29179 29385 29360 +3 29180 30605 31757 +3 29180 31757 30595 +3 29181 30596 31758 +3 29181 31758 30606 +3 29182 29885 31769 +3 29182 31769 31244 +3 29183 31245 31770 +3 29183 31770 29886 +3 29184 29285 29797 +3 29184 29797 29689 +3 29185 29690 29798 +3 29185 29798 29286 +3 29186 29989 30133 +3 29186 30133 29351 +3 29187 29352 30134 +3 29187 30134 29990 +3 29188 29905 30165 +3 29188 30165 29455 +3 29189 29456 30166 +3 29189 30166 29906 +3 29190 30309 32271 +3 29190 32271 31424 +3 29191 31425 32272 +3 29191 32272 30310 +3 29192 30710 31135 +3 29192 31135 29745 +3 29193 29746 31136 +3 29193 31136 30711 +3 29194 29539 29852 +3 29194 29852 29529 +3 29195 29530 29853 +3 29195 29853 29540 +3 29196 29247 29414 +3 29196 29414 29363 +3 29197 29364 29415 +3 29197 29415 29248 +3 29198 29371 29323 +3 29199 29324 29372 +3 29200 29529 29858 +3 29200 29858 29513 +3 29201 29514 29859 +3 29201 29859 29530 +3 29202 29311 29392 +3 29202 29392 29265 +3 29203 29266 29393 +3 29203 29393 29312 +3 29204 29507 29862 +3 29204 29862 29539 +3 29205 29540 29863 +3 29205 29863 29508 +3 29206 29271 29396 +3 29206 29396 29311 +3 29207 29312 29397 +3 29207 29397 29271 +3 29208 30750 33652 +3 29208 33652 32364 +3 29209 32365 33653 +3 29209 33653 30751 +3 29210 29842 30506 +3 29210 30506 29962 +3 29211 29963 30507 +3 29211 30507 29845 +3 29212 31087 32386 +3 29212 32386 30760 +3 29213 30761 32387 +3 29213 32387 31088 +3 29214 30421 30816 +3 29214 30816 29701 +3 29215 29702 30817 +3 29215 30817 30422 +3 29216 30258 31075 +3 29216 31075 30303 +3 29217 30304 31076 +3 29217 31076 30259 +3 29218 30305 33279 +3 29218 33279 32486 +3 29219 32487 33280 +3 29219 33280 30306 +3 29220 29255 29729 +3 29220 29729 29661 +3 29221 29662 29730 +3 29221 29730 29256 +3 29222 29361 29428 +3 29222 29428 29297 +3 29223 29298 29429 +3 29223 29429 29362 +3 29224 29384 29410 +3 29224 29410 29236 +3 29225 29236 29411 +3 29225 29411 29385 +3 29226 29667 30260 +3 29226 30260 29818 +3 29227 29819 30261 +3 29227 30261 29668 +3 29228 29367 29432 +3 29228 29432 29293 +3 29229 29294 29433 +3 29229 29433 29368 +3 29230 29412 29809 +3 29230 29809 29600 +3 29231 29601 29810 +3 29231 29810 29413 +3 29232 29962 30516 +3 29232 30516 29877 +3 29233 29878 30517 +3 29233 30517 29963 +3 29234 30303 31079 +3 29234 31079 30276 +3 29235 30277 31080 +3 29235 31080 30304 +3 29236 29410 29411 +3 29237 30619 33619 +3 29237 33619 32516 +3 29238 32517 33620 +3 29238 33620 30620 +3 29239 30009 31634 +3 29239 31634 31029 +3 29240 31030 31635 +3 29240 31635 30010 +3 29241 29437 29907 +3 29241 29907 29677 +3 29242 29678 29908 +3 29242 29908 29438 +3 29243 29657 30880 +3 29243 30880 30245 +3 29244 30246 30881 +3 29244 30881 29658 +3 29245 29394 29434 +3 29245 29434 29283 +3 29246 29284 29435 +3 29246 29435 29395 +3 29247 29274 29445 +3 29247 29445 29414 +3 29248 29415 29446 +3 29248 29446 29275 +3 29249 30341 30681 +3 29249 30681 29699 +3 29250 29700 30682 +3 29250 30682 30342 +3 29251 30299 32837 +3 29251 32837 32036 +3 29252 32037 32838 +3 29252 32838 30300 +3 29253 29323 29430 +3 29253 29430 29361 +3 29254 29362 29431 +3 29254 29431 29324 +3 29255 29295 29769 +3 29255 29769 29729 +3 29256 29730 29770 +3 29256 29770 29296 +3 29257 30831 30860 +3 29257 30860 29278 +3 29258 29278 30861 +3 29258 30861 30832 +3 29259 29363 29487 +3 29259 29487 29388 +3 29260 29389 29488 +3 29260 29488 29364 +3 29261 29616 30466 +3 29261 30466 30197 +3 29262 30198 30467 +3 29262 30467 29617 +3 29263 30102 30833 +3 29263 30833 30080 +3 29264 30081 30834 +3 29264 30834 30103 +3 29265 29392 29451 +3 29265 29451 29329 +3 29266 29330 29452 +3 29266 29452 29393 +3 29267 30587 33560 +3 29267 33560 32520 +3 29268 32521 33561 +3 29268 33561 30588 +3 29269 29388 29491 +3 29269 29491 29367 +3 29270 29368 29492 +3 29270 29492 29389 +3 29271 29397 29459 +3 29271 29459 29396 +3 29272 29273 32158 +3 29272 32158 32129 +3 29273 32130 32158 +3 29274 29283 29467 +3 29274 29467 29445 +3 29275 29446 29468 +3 29275 29468 29284 +3 29276 29517 29843 +3 29276 29843 29707 +3 29277 29708 29844 +3 29277 29844 29518 +3 29278 30860 30861 +3 29279 30382 31371 +3 29279 31371 30524 +3 29280 30525 31372 +3 29280 31372 30383 +3 29281 30705 32139 +3 29281 32139 30756 +3 29282 30757 32142 +3 29282 32142 30706 +3 29283 29434 29467 +3 29284 29468 29435 +3 29285 29695 29797 +3 29286 29798 29696 +3 29287 30654 31161 +3 29287 31161 29956 +3 29288 29957 31162 +3 29288 31162 30655 +3 29289 29581 30528 +3 29289 30528 30315 +3 29290 30316 30529 +3 29290 30529 29582 +3 29291 29569 30430 +3 29291 30430 29968 +3 29292 29969 30431 +3 29292 30431 29570 +3 29293 29432 29493 +3 29293 29493 29345 +3 29294 29346 29494 +3 29294 29494 29433 +3 29295 29296 29787 +3 29295 29787 29769 +3 29296 29770 29787 +3 29297 29428 29499 +3 29297 29499 29359 +3 29298 29360 29500 +3 29298 29500 29429 +3 29299 29893 30353 +3 29299 30353 29757 +3 29300 29758 30354 +3 29300 30354 29894 +3 29301 29618 30926 +3 29301 30926 30669 +3 29302 30670 30927 +3 29302 30927 29619 +3 29303 29976 30195 +3 29303 30195 29675 +3 29304 29676 30196 +3 29304 30196 29977 +3 29305 29594 30526 +3 29305 30526 30319 +3 29306 30320 30527 +3 29306 30527 29595 +3 29307 31252 31824 +3 29307 31824 30193 +3 29308 30194 31825 +3 29308 31825 31253 +3 29309 29453 29941 +3 29309 29941 29788 +3 29310 29789 29942 +3 29310 29942 29454 +3 29311 29396 29489 +3 29311 29489 29392 +3 29312 29393 29490 +3 29312 29490 29397 +3 29313 29927 31131 +3 29313 31131 30629 +3 29314 30630 31132 +3 29314 31132 29928 +3 29315 32273 33526 +3 29315 33526 30675 +3 29316 30676 33527 +3 29316 33527 32274 +3 29317 30031 30349 +3 29317 30349 29626 +3 29318 29627 30350 +3 29318 30350 30032 +3 29319 31844 34153 +3 29319 34153 32020 +3 29320 32021 34154 +3 29320 34154 31845 +3 29321 30480 30726 +3 29321 30726 29671 +3 29322 29672 30727 +3 29322 30727 30481 +3 29323 29371 29497 +3 29323 29497 29430 +3 29324 29431 29498 +3 29324 29498 29372 +3 29325 31593 32200 +3 29325 32200 30135 +3 29326 30136 32201 +3 29326 32201 31594 +3 29327 31696 33832 +3 29327 33832 31779 +3 29328 31780 33833 +3 29328 33833 31697 +3 29329 29451 29525 +3 29329 29525 29394 +3 29330 29395 29526 +3 29330 29526 29452 +3 29331 30573 31420 +3 29331 31420 30393 +3 29332 30394 31421 +3 29332 31421 30574 +3 29333 30854 32332 +3 29333 32332 31019 +3 29334 31020 32333 +3 29334 32333 30855 +3 29335 29818 30371 +3 29335 30371 29913 +3 29336 29914 30372 +3 29336 30372 29819 +3 29337 31183 32528 +3 29337 32528 30220 +3 29338 30221 32529 +3 29338 32529 31184 +3 29339 30015 30326 +3 29339 30326 29641 +3 29340 29642 30327 +3 29340 30327 30016 +3 29341 29469 29887 +3 29341 29887 29739 +3 29342 29740 29888 +3 29342 29888 29470 +3 29343 31236 31692 +3 29343 31692 29980 +3 29344 29981 31693 +3 29344 31693 31237 +3 29345 29493 29535 +3 29345 29535 29371 +3 29346 29372 29536 +3 29346 29536 29494 +3 29347 30912 32470 +3 29347 32470 31137 +3 29348 31138 32471 +3 29348 32471 30913 +3 29349 29547 30478 +3 29349 30478 30335 +3 29350 30336 30479 +3 29350 30479 29548 +3 29351 30133 30278 +3 29351 30278 29478 +3 29352 29479 30279 +3 29352 30279 30134 +3 29353 30454 30918 +3 29353 30918 29937 +3 29354 29938 30919 +3 29354 30919 30455 +3 29355 29954 30987 +3 29355 30987 30552 +3 29356 30553 30988 +3 29356 30988 29955 +3 29357 30377 30722 +3 29357 30722 29836 +3 29358 29837 30723 +3 29358 30723 30377 +3 29359 29499 29551 +3 29359 29551 29384 +3 29360 29385 29552 +3 29360 29552 29500 +3 29361 29430 29533 +3 29361 29533 29428 +3 29362 29429 29534 +3 29362 29534 29431 +3 29363 29414 29563 +3 29363 29563 29487 +3 29364 29488 29564 +3 29364 29564 29415 +3 29365 30468 30839 +3 29365 30839 29848 +3 29366 29849 30840 +3 29366 30840 30469 +3 29367 29491 29575 +3 29367 29575 29432 +3 29368 29433 29576 +3 29368 29576 29492 +3 29369 30450 31448 +3 29369 31448 30573 +3 29370 30574 31449 +3 29370 31449 30451 +3 29371 29535 29497 +3 29372 29498 29536 +3 29373 33047 34235 +3 29373 34235 30936 +3 29374 30937 34236 +3 29374 34236 33048 +3 29375 29577 29947 +3 29375 29947 29731 +3 29376 29732 29948 +3 29376 29948 29578 +3 29377 29935 30395 +3 29377 30395 29893 +3 29378 29894 30396 +3 29378 30396 29936 +3 29379 29600 29951 +3 29379 29951 29601 +3 29380 29735 30581 +3 29380 30581 30337 +3 29381 30338 30582 +3 29381 30582 29736 +3 29382 30969 32215 +3 29382 32215 30912 +3 29383 30913 32216 +3 29383 32216 30970 +3 29384 29551 29579 +3 29384 29579 29410 +3 29385 29411 29580 +3 29385 29580 29552 +3 29386 29913 30389 +3 29386 30389 29935 +3 29387 29936 30390 +3 29387 30390 29914 +3 29388 29487 29596 +3 29388 29596 29491 +3 29389 29492 29597 +3 29389 29597 29488 +3 29390 29559 29966 +3 29390 29966 29791 +3 29391 29792 29967 +3 29391 29967 29560 +3 29392 29489 29565 +3 29392 29565 29451 +3 29393 29452 29566 +3 29393 29566 29490 +3 29394 29525 29588 +3 29394 29588 29434 +3 29395 29435 29589 +3 29395 29589 29526 +3 29396 29459 29573 +3 29396 29573 29489 +3 29397 29490 29574 +3 29397 29574 29459 +3 29398 30245 30975 +3 29398 30975 30365 +3 29399 30366 30976 +3 29399 30976 30246 +3 29400 32671 33952 +3 29400 33952 30960 +3 29401 30961 33953 +3 29401 33953 32672 +3 29402 30151 30355 +3 29402 30355 29608 +3 29403 29609 30356 +3 29403 30356 30152 +3 29404 30179 30373 +3 29404 30373 29606 +3 29405 29607 30374 +3 29405 30374 30180 +3 29406 29968 30691 +3 29406 30691 30262 +3 29407 30263 30692 +3 29407 30692 29969 +3 29408 30500 30884 +3 29408 30884 29820 +3 29409 29821 30885 +3 29409 30885 30501 +3 29410 29579 29587 +3 29410 29587 29411 +3 29411 29587 29580 +3 29412 29677 30069 +3 29412 30069 29809 +3 29413 29810 30070 +3 29413 30070 29678 +3 29414 29445 29612 +3 29414 29612 29563 +3 29415 29564 29613 +3 29415 29613 29446 +3 29416 31019 32462 +3 29416 32462 31101 +3 29417 31102 32463 +3 29417 32463 31020 +3 29418 31061 31740 +3 29418 31740 30295 +3 29419 30296 31741 +3 29419 31741 31061 +3 29420 29822 30575 +3 29420 30575 30280 +3 29421 30281 30576 +3 29421 30576 29823 +3 29422 31298 31937 +3 29422 31937 30272 +3 29423 30273 31938 +3 29423 31938 31299 +3 29424 29807 29960 +3 29424 29960 29583 +3 29425 29584 29961 +3 29425 29961 29808 +3 29426 32829 33664 +3 29426 33664 30508 +3 29427 30509 33665 +3 29427 33665 32830 +3 29428 29533 29614 +3 29428 29614 29499 +3 29429 29500 29615 +3 29429 29615 29534 +3 29430 29497 29602 +3 29430 29602 29533 +3 29431 29534 29603 +3 29431 29603 29498 +3 29432 29575 29631 +3 29432 29631 29493 +3 29433 29494 29632 +3 29433 29632 29576 +3 29434 29588 29620 +3 29434 29620 29467 +3 29435 29468 29621 +3 29435 29621 29589 +3 29436 29786 30330 +3 29436 30330 29785 +3 29437 29624 30094 +3 29437 30094 29907 +3 29438 29908 30095 +3 29438 30095 29625 +3 29439 30524 31516 +3 29439 31516 30616 +3 29440 30617 31517 +3 29440 31517 30525 +3 29441 32046 32928 +3 29441 32928 30512 +3 29442 30513 32929 +3 29442 32929 32047 +3 29443 32859 33958 +3 29443 33958 30856 +3 29444 30857 33959 +3 29444 33959 32860 +3 29445 29467 29633 +3 29445 29633 29612 +3 29446 29613 29634 +3 29446 29634 29468 +3 29447 30090 30363 +3 29447 30363 29725 +3 29448 29726 30364 +3 29448 30364 30091 +3 29449 32101 32627 +3 29449 32627 30159 +3 29450 30160 32628 +3 29450 32628 32102 +3 29451 29565 29643 +3 29451 29643 29525 +3 29452 29526 29644 +3 29452 29644 29566 +3 29453 29590 30063 +3 29453 30063 29941 +3 29454 29942 30064 +3 29454 30064 29591 +3 29455 30165 30243 +3 29455 30243 29543 +3 29456 29544 30244 +3 29456 30244 30166 +3 29457 30432 32692 +3 29457 32692 31919 +3 29458 31920 32693 +3 29458 32693 30433 +3 29459 29574 29628 +3 29459 29628 29573 +3 29460 29868 30570 +3 29460 30570 29869 +3 29461 31278 31732 +3 29461 31732 30073 +3 29462 30074 31733 +3 29462 31733 31279 +3 29463 31015 31540 +3 29463 31540 30109 +3 29464 30110 31541 +3 29464 31541 31016 +3 29465 31785 32577 +3 29465 32577 30476 +3 29466 30477 32578 +3 29466 32578 31786 +3 29467 29620 29633 +3 29468 29634 29621 +3 29469 29585 30019 +3 29469 30019 29887 +3 29470 29888 30020 +3 29470 30020 29586 +3 29471 31761 32188 +3 29471 32188 30956 +3 29472 30957 32189 +3 29472 32189 31762 +3 29473 30075 31050 +3 29473 31050 30076 +3 29474 31816 32702 +3 29474 32702 30583 +3 29475 30584 32703 +3 29475 32703 31817 +3 29476 30405 32287 +3 29476 32287 31568 +3 29477 31569 32288 +3 29477 32288 30406 +3 29478 30278 30107 +3 29479 30108 30279 +3 29480 30086 31187 +3 29480 31187 30876 +3 29481 30877 31188 +3 29481 31188 30087 +3 29482 30365 31294 +3 29482 31294 30585 +3 29483 30586 31295 +3 29483 31295 30366 +3 29484 30550 32453 +3 29484 32453 30551 +3 29485 30556 32756 +3 29485 32756 31971 +3 29486 31972 32757 +3 29486 32757 30557 +3 29487 29563 29679 +3 29487 29679 29596 +3 29488 29597 29680 +3 29488 29680 29564 +3 29489 29573 29651 +3 29489 29651 29565 +3 29490 29566 29652 +3 29490 29652 29574 +3 29491 29596 29681 +3 29491 29681 29575 +3 29492 29576 29682 +3 29492 29682 29597 +3 29493 29631 29669 +3 29493 29669 29535 +3 29494 29536 29670 +3 29494 29670 29632 +3 29495 32865 33909 +3 29495 33909 30829 +3 29496 30830 33910 +3 29496 33910 32866 +3 29497 29535 29645 +3 29497 29645 29602 +3 29498 29603 29646 +3 29498 29646 29536 +3 29499 29614 29663 +3 29499 29663 29551 +3 29500 29552 29664 +3 29500 29664 29615 +3 29501 30321 30837 +3 29501 30837 30185 +3 29502 30186 30838 +3 29502 30838 30322 +3 29503 32405 33266 +3 29503 33266 30538 +3 29504 30539 33267 +3 29504 33267 32406 +3 29505 30047 31595 +3 29505 31595 31167 +3 29506 31168 31596 +3 29506 31596 30048 +3 29507 29791 30131 +3 29507 30131 29862 +3 29508 29863 30132 +3 29508 30132 29792 +3 29509 30610 30641 +3 29509 30641 29549 +3 29510 29550 30642 +3 29510 30642 30611 +3 29511 30977 31302 +3 29511 31302 29909 +3 29512 29910 31303 +3 29512 31303 30978 +3 29513 29858 30139 +3 29513 30139 29807 +3 29514 29808 30140 +3 29514 30140 29859 +3 29515 30616 31830 +3 29515 31830 30904 +3 29516 30905 31831 +3 29516 31831 30617 +3 29517 29731 30059 +3 29517 30059 29843 +3 29518 29844 30060 +3 29518 30060 29732 +3 29519 32020 34143 +3 29519 34143 31955 +3 29520 31956 34144 +3 29520 34144 32021 +3 29521 30274 31795 +3 29521 31795 31216 +3 29522 31217 31796 +3 29522 31796 30275 +3 29523 30237 31632 +3 29523 31632 31062 +3 29524 31063 31633 +3 29524 31633 30238 +3 29525 29643 29705 +3 29525 29705 29588 +3 29526 29589 29706 +3 29526 29706 29644 +3 29527 32512 32534 +3 29527 32534 29528 +3 29528 32534 32513 +3 29529 29852 30173 +3 29529 30173 29858 +3 29530 29859 30174 +3 29530 30174 29853 +3 29531 31101 32889 +3 29531 32889 31491 +3 29532 31492 32890 +3 29532 32890 31102 +3 29533 29602 29693 +3 29533 29693 29614 +3 29534 29615 29694 +3 29534 29694 29603 +3 29535 29669 29645 +3 29536 29646 29670 +3 29537 30956 32243 +3 29537 32243 30969 +3 29538 30970 32244 +3 29538 32244 30957 +3 29539 29862 30181 +3 29539 30181 29852 +3 29540 29853 30182 +3 29540 30182 29863 +3 29541 31666 32253 +3 29541 32253 30289 +3 29542 30290 32254 +3 29542 32254 31667 +3 29543 30243 30307 +3 29543 30307 29555 +3 29544 29556 30308 +3 29544 30308 30244 +3 29545 29949 30754 +3 29545 30754 30446 +3 29546 30447 30755 +3 29546 30755 29950 +3 29547 30167 30612 +3 29547 30612 30478 +3 29548 30479 30613 +3 29548 30613 30168 +3 29549 30641 30658 +3 29549 30658 29550 +3 29550 30658 30642 +3 29551 29663 29703 +3 29551 29703 29579 +3 29552 29580 29704 +3 29552 29704 29664 +3 29553 30411 32115 +3 29553 32115 31375 +3 29554 31376 32116 +3 29554 32116 30412 +3 29555 30307 30325 +3 29555 30325 29556 +3 29556 30325 30308 +3 29557 30938 33893 +3 29557 33893 32625 +3 29558 32626 33894 +3 29558 33894 30939 +3 29559 29707 30124 +3 29559 30124 29966 +3 29560 29967 30125 +3 29560 30125 29708 +3 29561 30205 30520 +3 29561 30520 29976 +3 29562 29977 30521 +3 29562 30521 30206 +3 29563 29612 29737 +3 29563 29737 29679 +3 29564 29680 29738 +3 29564 29738 29613 +3 29565 29651 29749 +3 29565 29749 29643 +3 29566 29644 29750 +3 29566 29750 29652 +3 29567 31139 34567 +3 29567 34567 33389 +3 29568 33390 34568 +3 29568 34568 31140 +3 29569 30051 30810 +3 29569 30810 30430 +3 29570 30431 30811 +3 29570 30811 30052 +3 29571 30367 30804 +3 29571 30804 30167 +3 29572 30168 30805 +3 29572 30805 30368 +3 29573 29628 29721 +3 29573 29721 29651 +3 29574 29652 29722 +3 29574 29722 29628 +3 29575 29681 29747 +3 29575 29747 29631 +3 29576 29632 29748 +3 29576 29748 29682 +3 29577 29739 30120 +3 29577 30120 29947 +3 29578 29948 30121 +3 29578 30121 29740 +3 29579 29703 29727 +3 29579 29727 29587 +3 29580 29587 29728 +3 29580 29728 29704 +3 29581 29974 30730 +3 29581 30730 30528 +3 29582 30529 30731 +3 29582 30731 29975 +3 29583 29960 30092 +3 29583 30092 29695 +3 29584 29696 30093 +3 29584 30093 29961 +3 29585 29661 30189 +3 29585 30189 30019 +3 29586 30020 30190 +3 29586 30190 29662 +3 29587 29727 29728 +3 29588 29705 29753 +3 29588 29753 29620 +3 29589 29621 29754 +3 29589 29754 29706 +3 29590 29689 30187 +3 29590 30187 30063 +3 29591 30064 30188 +3 29591 30188 29690 +3 29592 31181 34254 +3 29592 34254 32968 +3 29593 32969 34255 +3 29593 34255 31182 +3 29594 29870 30732 +3 29594 30732 30526 +3 29595 30527 30733 +3 29595 30733 29871 +3 29596 29679 29763 +3 29596 29763 29681 +3 29597 29682 29764 +3 29597 29764 29680 +3 29598 30442 31889 +3 29598 31889 31200 +3 29599 31201 31890 +3 29599 31890 30443 +3 29600 29809 30161 +3 29600 30161 29951 +3 29601 29951 30162 +3 29601 30162 29810 +3 29602 29645 29755 +3 29602 29755 29693 +3 29603 29694 29756 +3 29603 29756 29646 +3 29604 30564 31103 +3 29604 31103 30321 +3 29605 30322 31104 +3 29605 31104 30565 +3 29606 30373 30492 +3 29606 30492 29905 +3 29607 29906 30493 +3 29607 30493 30374 +3 29608 30355 30488 +3 29608 30488 29812 +3 29609 29813 30489 +3 29609 30489 30356 +3 29610 30494 32958 +3 29610 32958 31532 +3 29611 31533 32959 +3 29611 32959 30495 +3 29612 29633 29775 +3 29612 29775 29737 +3 29613 29738 29776 +3 29613 29776 29634 +3 29614 29693 29771 +3 29614 29771 29663 +3 29615 29664 29772 +3 29615 29772 29694 +3 29616 30023 30778 +3 29616 30778 30466 +3 29617 30467 30779 +3 29617 30779 30024 +3 29618 30490 31133 +3 29618 31133 30926 +3 29619 30927 31134 +3 29619 31134 30491 +3 29620 29753 29783 +3 29620 29783 29633 +3 29621 29634 29784 +3 29621 29784 29754 +3 29622 30045 31202 +3 29622 31202 30890 +3 29623 30891 31203 +3 29623 31203 30046 +3 29624 29788 30256 +3 29624 30256 30094 +3 29625 30095 30257 +3 29625 30257 29789 +3 29626 30349 30546 +3 29626 30546 29931 +3 29627 29932 30547 +3 29627 30547 30350 +3 29628 29722 29790 +3 29628 29790 29721 +3 29629 31373 32773 +3 29629 32773 31183 +3 29630 31184 32774 +3 29630 32774 31374 +3 29631 29747 29801 +3 29631 29801 29669 +3 29632 29670 29802 +3 29632 29802 29748 +3 29633 29783 29775 +3 29634 29776 29784 +3 29635 30656 31383 +3 29635 31383 30496 +3 29636 30497 31384 +3 29636 31384 30657 +3 29637 31137 32669 +3 29637 32669 31087 +3 29638 31088 32670 +3 29638 32670 31138 +3 29639 30137 31228 +3 29639 31228 30845 +3 29640 30846 31229 +3 29640 31229 30138 +3 29641 30326 30530 +3 29641 30530 29933 +3 29642 29934 30531 +3 29642 30531 30327 +3 29643 29749 29824 +3 29643 29824 29705 +3 29644 29706 29825 +3 29644 29825 29750 +3 29645 29669 29799 +3 29645 29799 29755 +3 29646 29756 29800 +3 29646 29800 29670 +3 29647 30714 33976 +3 29647 33976 33177 +3 29648 33178 33977 +3 29648 33977 30715 +3 29649 30470 32665 +3 29649 32665 31994 +3 29650 31995 32666 +3 29650 32666 30471 +3 29651 29721 29832 +3 29651 29832 29749 +3 29652 29750 29833 +3 29652 29833 29722 +3 29653 30954 31917 +3 29653 31917 30766 +3 29654 30767 31918 +3 29654 31918 30955 +3 29655 30496 31173 +3 29655 31173 30490 +3 29656 30491 31174 +3 29656 31174 30497 +3 29657 30065 31171 +3 29657 31171 30880 +3 29658 30881 31172 +3 29658 31172 30066 +3 29659 31071 34300 +3 29659 34300 33218 +3 29660 33219 34301 +3 29660 34301 31072 +3 29661 29729 30249 +3 29661 30249 30189 +3 29662 30190 30250 +3 29662 30250 29730 +3 29663 29771 29828 +3 29663 29828 29703 +3 29664 29704 29829 +3 29664 29829 29772 +3 29665 31552 32976 +3 29665 32976 31272 +3 29666 31273 32977 +3 29666 32977 31553 +3 29667 30107 30591 +3 29667 30591 30260 +3 29668 30261 30592 +3 29668 30592 30108 +3 29669 29801 29799 +3 29670 29800 29802 +3 29671 30726 30958 +3 29671 30958 29978 +3 29672 29979 30959 +3 29672 30959 30727 +3 29673 31577 32219 +3 29673 32219 30464 +3 29674 30465 32220 +3 29674 32220 31578 +3 29675 30195 30474 +3 29675 30474 30031 +3 29676 30032 30475 +3 29676 30475 30196 +3 29677 29907 30313 +3 29677 30313 30069 +3 29678 30070 30314 +3 29678 30314 29908 +3 29679 29737 29846 +3 29679 29846 29763 +3 29680 29764 29847 +3 29680 29847 29738 +3 29681 29763 29850 +3 29681 29850 29747 +3 29682 29748 29851 +3 29682 29851 29764 +3 29683 31011 31512 +3 29683 31512 30286 +3 29684 30287 31513 +3 29684 31513 31012 +3 29685 30262 30896 +3 29685 30896 30419 +3 29686 30420 30897 +3 29686 30897 30263 +3 29687 30254 31357 +3 29687 31357 30965 +3 29688 30966 31358 +3 29688 31358 30255 +3 29689 29797 30264 +3 29689 30264 30187 +3 29690 30188 30265 +3 29690 30265 29798 +3 29691 30311 31746 +3 29691 31746 31268 +3 29692 31269 31747 +3 29692 31747 30312 +3 29693 29755 29854 +3 29693 29854 29771 +3 29694 29772 29855 +3 29694 29855 29756 +3 29695 30092 30201 +3 29695 30201 29797 +3 29696 29798 30202 +3 29696 30202 30093 +3 29697 30571 32346 +3 29697 32346 31738 +3 29698 31739 32347 +3 29698 32347 30572 +3 29699 30681 31021 +3 29699 31021 30153 +3 29700 30154 31022 +3 29700 31022 30682 +3 29701 30816 31151 +3 29701 31151 30183 +3 29702 30184 31152 +3 29702 31152 30817 +3 29703 29828 29864 +3 29703 29864 29727 +3 29704 29728 29865 +3 29704 29865 29829 +3 29705 29824 29873 +3 29705 29873 29753 +3 29706 29754 29874 +3 29706 29874 29825 +3 29707 29843 30252 +3 29707 30252 30124 +3 29708 30125 30253 +3 29708 30253 29844 +3 29709 30790 31674 +3 29709 31674 30740 +3 29710 30741 31675 +3 29710 31675 30791 +3 29711 31169 31648 +3 29711 31648 30343 +3 29712 30344 31649 +3 29712 31649 31170 +3 29713 31046 34250 +3 29713 34250 33226 +3 29714 33227 34251 +3 29714 34251 31047 +3 29715 31272 32688 +3 29715 32688 31343 +3 29716 31344 32689 +3 29716 32689 31273 +3 29717 30971 31921 +3 29717 31921 30814 +3 29718 30815 31922 +3 29718 31922 30972 +3 29719 31466 32930 +3 29719 32930 31373 +3 29720 31374 32931 +3 29720 32931 31467 +3 29721 29790 29889 +3 29721 29889 29832 +3 29722 29833 29890 +3 29722 29890 29790 +3 29723 30766 31682 +3 29723 31682 30790 +3 29724 30791 31683 +3 29724 31683 30767 +3 29725 30363 30544 +3 29725 30544 30015 +3 29726 30016 30545 +3 29726 30545 30364 +3 29727 29864 29872 +3 29727 29872 29728 +3 29728 29872 29865 +3 29729 29769 30301 +3 29729 30301 30249 +3 29730 30250 30302 +3 29730 30302 29770 +3 29731 29947 30282 +3 29731 30282 30059 +3 29732 30060 30283 +3 29732 30283 29948 +3 29733 30802 33385 +3 29733 33385 32443 +3 29734 32444 33386 +3 29734 33386 30803 +3 29735 29781 30659 +3 29735 30659 30581 +3 29736 30582 30660 +3 29736 30660 29782 +3 29737 29775 29891 +3 29737 29891 29846 +3 29738 29847 29892 +3 29738 29892 29776 +3 29739 29887 30270 +3 29739 30270 30120 +3 29740 30121 30271 +3 29740 30271 29888 +3 29741 30391 32235 +3 29741 32235 31704 +3 29742 31705 32236 +3 29742 32236 30392 +3 29743 30434 33055 +3 29743 33055 32494 +3 29744 32495 33056 +3 29744 33056 30435 +3 29745 31135 31562 +3 29745 31562 30268 +3 29746 30269 31563 +3 29746 31563 31136 +3 29747 29850 29903 +3 29747 29903 29801 +3 29748 29802 29904 +3 29748 29904 29851 +3 29749 29832 29917 +3 29749 29917 29824 +3 29750 29825 29918 +3 29750 29918 29833 +3 29751 30788 33672 +3 29751 33672 32760 +3 29752 32761 33673 +3 29752 33673 30789 +3 29753 29873 29911 +3 29753 29911 29783 +3 29754 29784 29912 +3 29754 29912 29874 +3 29755 29799 29901 +3 29755 29901 29854 +3 29756 29855 29902 +3 29756 29902 29800 +3 29757 30353 30651 +3 29757 30651 30205 +3 29758 30206 30652 +3 29758 30652 30354 +3 29759 30425 30991 +3 29759 30991 30458 +3 29760 30459 30992 +3 29760 30992 30426 +3 29761 30462 30942 +3 29761 30942 30367 +3 29762 30368 30943 +3 29762 30943 30463 +3 29763 29846 29929 +3 29763 29929 29850 +3 29764 29851 29930 +3 29764 29930 29847 +3 29765 30458 31226 +3 29765 31226 30631 +3 29766 30632 31227 +3 29766 31227 30459 +3 29767 30886 33141 +3 29767 33141 32172 +3 29768 32173 33142 +3 29768 33142 30887 +3 29769 29787 30328 +3 29769 30328 30301 +3 29770 30302 30329 +3 29770 30329 29787 +3 29771 29854 29921 +3 29771 29921 29828 +3 29772 29829 29922 +3 29772 29922 29855 +3 29773 32336 33165 +3 29773 33165 30716 +3 29774 30717 33166 +3 29774 33166 32337 +3 29775 29783 29915 +3 29775 29915 29891 +3 29776 29892 29916 +3 29776 29916 29784 +3 29777 30585 31477 +3 29777 31477 30782 +3 29778 30783 31480 +3 29778 31480 30586 +3 29779 29795 31422 +3 29779 31422 31381 +3 29780 31382 31423 +3 29780 31423 29795 +3 29781 29796 30677 +3 29781 30677 30659 +3 29782 30660 30678 +3 29782 30678 29796 +3 29783 29911 29915 +3 29784 29916 29912 +3 29785 30330 30562 +3 29785 30562 30090 +3 29786 30091 30563 +3 29786 30563 30330 +3 29787 30329 30328 +3 29788 29941 30359 +3 29788 30359 30256 +3 29789 30257 30360 +3 29789 30360 29942 +3 29790 29890 29889 +3 29791 29966 30347 +3 29791 30347 30131 +3 29792 30132 30348 +3 29792 30348 29967 +3 29793 29794 32913 +3 29793 32913 32891 +3 29794 32892 32913 +3 29795 31423 31422 +3 29796 30678 30677 +3 29797 30201 30264 +3 29798 30265 30202 +3 29799 29801 29919 +3 29799 29919 29901 +3 29800 29902 29920 +3 29800 29920 29802 +3 29801 29903 29919 +3 29802 29920 29904 +3 29803 32972 34244 +3 29803 34244 31191 +3 29804 31192 34245 +3 29804 34245 32973 +3 29805 30482 31773 +3 29805 31773 31208 +3 29806 31209 31774 +3 29806 31774 30483 +3 29807 30139 30331 +3 29807 30331 29960 +3 29808 29961 30332 +3 29808 30332 30140 +3 29809 30069 30397 +3 29809 30397 30161 +3 29810 30162 30398 +3 29810 30398 30070 +3 29811 30865 32919 +3 29811 32919 30864 +3 29812 30488 30621 +3 29812 30621 29989 +3 29813 29990 30622 +3 29813 30622 30489 +3 29814 32376 33250 +3 29814 33250 30868 +3 29815 30869 33251 +3 29815 33251 32377 +3 29816 30806 33087 +3 29816 33087 32225 +3 29817 32226 33088 +3 29817 33088 30807 +3 29818 30260 30685 +3 29818 30685 30371 +3 29819 30372 30686 +3 29819 30686 30261 +3 29820 30884 31157 +3 29820 31157 30199 +3 29821 30200 31158 +3 29821 31158 30885 +3 29822 30197 30862 +3 29822 30862 30575 +3 29823 30576 30863 +3 29823 30863 30198 +3 29824 29917 29964 +3 29824 29964 29873 +3 29825 29874 29965 +3 29825 29965 29918 +3 29826 31337 32661 +3 29826 32661 32202 +3 29827 32203 32662 +3 29827 32662 31338 +3 29828 29921 29952 +3 29828 29952 29864 +3 29829 29865 29953 +3 29829 29953 29922 +3 29830 30826 31544 +3 29830 31544 30317 +3 29831 30318 31545 +3 29831 31545 30827 +3 29832 29889 29972 +3 29832 29972 29917 +3 29833 29918 29973 +3 29833 29973 29890 +3 29834 30667 32275 +3 29834 32275 31556 +3 29835 31556 32276 +3 29835 32276 30668 +3 29836 30722 31121 +3 29836 31121 30341 +3 29837 30342 31122 +3 29837 31122 30723 +3 29838 30637 32492 +3 29838 32492 31812 +3 29839 31813 32493 +3 29839 32493 30638 +3 29840 30794 31526 +3 29840 31526 30656 +3 29841 30657 31527 +3 29841 31527 30795 +3 29842 30419 30989 +3 29842 30989 30506 +3 29843 30059 30361 +3 29843 30361 30252 +3 29844 30253 30362 +3 29844 30362 30060 +3 29845 30507 30990 +3 29845 30990 30420 +3 29846 29891 29982 +3 29846 29982 29929 +3 29847 29930 29983 +3 29847 29983 29892 +3 29848 30839 31179 +3 29848 31179 30291 +3 29849 30292 31180 +3 29849 31180 30840 +3 29850 29929 29984 +3 29850 29984 29903 +3 29851 29904 29985 +3 29851 29985 29930 +3 29852 30181 30401 +3 29852 30401 30173 +3 29853 30174 30402 +3 29853 30402 30182 +3 29854 29901 29970 +3 29854 29970 29921 +3 29855 29922 29971 +3 29855 29971 29902 +3 29856 30904 32058 +3 29856 32058 31095 +3 29857 31098 32059 +3 29857 32059 30905 +3 29858 30173 30407 +3 29858 30407 30139 +3 29859 30140 30408 +3 29859 30408 30174 +3 29860 31875 33381 +3 29860 33381 31466 +3 29861 31467 33382 +3 29861 33382 31876 +3 29862 30131 30409 +3 29862 30409 30181 +3 29863 30182 30410 +3 29863 30410 30132 +3 29864 29952 29986 +3 29864 29986 29872 +3 29865 29872 29987 +3 29865 29987 29953 +3 29866 31996 32797 +3 29866 32797 30776 +3 29867 30777 32798 +3 29867 32798 31997 +3 29868 30280 30908 +3 29868 30908 30570 +3 29869 30570 30909 +3 29869 30909 30281 +3 29870 30115 30932 +3 29870 30932 30732 +3 29871 30733 30933 +3 29871 30933 30116 +3 29872 29986 29987 +3 29873 29964 30001 +3 29873 30001 29911 +3 29874 29912 30002 +3 29874 30002 29965 +3 29875 33524 34302 +3 29875 34302 30944 +3 29876 30945 34303 +3 29876 34303 33525 +3 29877 30516 31003 +3 29877 31003 30462 +3 29878 30463 31004 +3 29878 31004 30517 +3 29879 30703 31310 +3 29879 31310 30564 +3 29880 30565 31311 +3 29880 31311 30704 +3 29881 31343 32708 +3 29881 32708 31337 +3 29882 31338 32709 +3 29882 32709 31344 +3 29883 30599 32716 +3 29883 32716 32109 +3 29884 32110 32717 +3 29884 32717 30600 +3 29885 30484 32269 +3 29885 32269 31769 +3 29886 31770 32270 +3 29886 32270 30485 +3 29887 30019 30378 +3 29887 30378 30270 +3 29888 30271 30379 +3 29888 30379 30020 +3 29889 29890 29994 +3 29889 29994 29972 +3 29890 29973 29994 +3 29891 29915 30013 +3 29891 30013 29982 +3 29892 29983 30014 +3 29892 30014 29916 +3 29893 30395 30770 +3 29893 30770 30353 +3 29894 30354 30771 +3 29894 30771 30396 +3 29895 33546 34637 +3 29895 34637 31325 +3 29896 31326 34638 +3 29896 34638 33547 +3 29897 31852 33397 +3 29897 33397 30746 +3 29898 30747 33398 +3 29898 33398 31853 +3 29899 31095 32092 +3 29899 32092 30954 +3 29900 30955 32093 +3 29900 32093 31098 +3 29901 29919 29999 +3 29901 29999 29970 +3 29902 29971 30000 +3 29902 30000 29920 +3 29903 29984 30005 +3 29903 30005 29919 +3 29904 29920 30006 +3 29904 30006 29985 +3 29905 30492 30695 +3 29905 30695 30165 +3 29906 30166 30696 +3 29906 30696 30493 +3 29907 30094 30460 +3 29907 30460 30313 +3 29908 30314 30461 +3 29908 30461 30095 +3 29909 31302 31607 +3 29909 31607 30258 +3 29910 30259 31608 +3 29910 31608 31303 +3 29911 30001 30025 +3 29911 30025 29915 +3 29912 29916 30026 +3 29912 30026 30002 +3 29913 30371 30764 +3 29913 30764 30389 +3 29914 30390 30765 +3 29914 30765 30372 +3 29915 30025 30013 +3 29916 30014 30026 +3 29917 29972 30035 +3 29917 30035 29964 +3 29918 29965 30036 +3 29918 30036 29973 +3 29919 30005 29999 +3 29920 30000 30006 +3 29921 29970 30027 +3 29921 30027 29952 +3 29922 29953 30028 +3 29922 30028 29971 +3 29923 31068 32074 +3 29923 32074 30971 +3 29924 30972 32075 +3 29924 32075 31069 +3 29925 31262 31854 +3 29925 31854 30514 +3 29926 30515 31855 +3 29926 31855 31263 +3 29927 30438 31605 +3 29927 31605 31131 +3 29928 31132 31606 +3 29928 31606 30439 +3 29929 29982 30043 +3 29929 30043 29984 +3 29930 29985 30044 +3 29930 30044 29983 +3 29931 30546 30738 +3 29931 30738 30179 +3 29932 30180 30739 +3 29932 30739 30547 +3 29933 30530 30712 +3 29933 30712 30151 +3 29934 30152 30713 +3 29934 30713 30531 +3 29935 30389 30758 +3 29935 30758 30395 +3 29936 30396 30759 +3 29936 30759 30390 +3 29937 30918 31339 +3 29937 31339 30421 +3 29938 30422 31340 +3 29938 31340 30919 +3 29939 31532 33236 +3 29939 33236 31712 +3 29940 31713 33237 +3 29940 33237 31533 +3 29941 30063 30448 +3 29941 30448 30359 +3 29942 30360 30449 +3 29942 30449 30064 +3 29943 31836 32629 +3 29943 32629 30780 +3 29944 30781 32630 +3 29944 32630 31837 +3 29945 33550 34595 +3 29945 34595 31280 +3 29946 31281 34596 +3 29946 34596 33551 +3 29947 30120 30415 +3 29947 30415 30282 +3 29948 30283 30416 +3 29948 30416 30121 +3 29949 30315 31040 +3 29949 31040 30754 +3 29950 30755 31041 +3 29950 31041 30316 +3 29951 30161 30429 +3 29951 30429 30162 +3 29952 30027 30057 +3 29952 30057 29986 +3 29953 29987 30058 +3 29953 30058 30028 +3 29954 30436 31452 +3 29954 31452 30987 +3 29955 30988 31453 +3 29955 31453 30437 +3 29956 31161 31690 +3 29956 31690 30554 +3 29957 30555 31691 +3 29957 31691 31162 +3 29958 30631 31353 +3 29958 31353 30736 +3 29959 30737 31354 +3 29959 31354 30632 +3 29960 30331 30417 +3 29960 30417 30092 +3 29961 30093 30418 +3 29961 30418 30332 +3 29962 30506 31048 +3 29962 31048 30516 +3 29963 30517 31049 +3 29963 31049 30507 +3 29964 30035 30071 +3 29964 30071 30001 +3 29965 30002 30072 +3 29965 30072 30036 +3 29966 30124 30452 +3 29966 30452 30347 +3 29967 30348 30453 +3 29967 30453 30125 +3 29968 30430 31083 +3 29968 31083 30691 +3 29969 30692 31084 +3 29969 31084 30431 +3 29970 29999 30061 +3 29970 30061 30027 +3 29971 30028 30062 +3 29971 30062 30000 +3 29972 29994 30055 +3 29972 30055 30035 +3 29973 30036 30056 +3 29973 30056 29994 +3 29974 30337 30999 +3 29974 30999 30730 +3 29975 30731 31000 +3 29975 31000 30338 +3 29976 30520 30693 +3 29976 30693 30195 +3 29977 30196 30694 +3 29977 30694 30521 +3 29978 30958 31177 +3 29978 31177 30241 +3 29979 30242 31178 +3 29979 31178 30959 +3 29980 31692 32156 +3 29980 32156 30498 +3 29981 30499 32157 +3 29981 32157 31693 +3 29982 30013 30078 +3 29982 30078 30043 +3 29983 30044 30079 +3 29983 30079 30014 +3 29984 30043 30067 +3 29984 30067 30005 +3 29985 30006 30068 +3 29985 30068 30044 +3 29986 30057 30077 +3 29986 30077 29987 +3 29987 30077 30058 +3 29988 30782 31622 +3 29988 31622 30794 +3 29989 30621 30748 +3 29989 30748 30133 +3 29990 30134 30749 +3 29990 30749 30622 +3 29991 30795 31623 +3 29991 31623 30783 +3 29992 32429 33133 +3 29992 33133 30774 +3 29993 30775 33134 +3 29993 33134 32430 +3 29994 30056 30055 +3 29995 31395 32431 +3 29995 32431 31068 +3 29996 31069 32432 +3 29996 32432 31396 +3 29997 31491 33191 +3 29997 33191 31552 +3 29998 31553 33194 +3 29998 33194 31492 +3 29999 30005 30084 +3 29999 30084 30061 +3 30000 30062 30085 +3 30000 30085 30006 +3 30001 30071 30098 +3 30001 30098 30025 +3 30002 30026 30099 +3 30002 30099 30072 +3 30003 31748 32374 +3 30003 32374 30697 +3 30004 30698 32375 +3 30004 32375 31749 +3 30005 30067 30084 +3 30006 30085 30068 +3 30007 31640 33476 +3 30007 33476 31911 +3 30008 31912 33477 +3 30008 33477 31641 +3 30009 30614 32174 +3 30009 32174 31634 +3 30010 31635 32175 +3 30010 32175 30615 +3 30011 31612 32213 +3 30011 32213 30663 +3 30012 30664 32214 +3 30012 32214 31613 +3 30013 30025 30100 +3 30013 30100 30078 +3 30014 30079 30101 +3 30014 30101 30026 +3 30015 30544 30808 +3 30015 30808 30326 +3 30016 30327 30809 +3 30016 30809 30545 +3 30017 33116 34002 +3 30017 34002 31007 +3 30018 31008 34003 +3 30018 34003 33117 +3 30019 30189 30504 +3 30019 30504 30378 +3 30020 30379 30505 +3 30020 30505 30190 +3 30021 30928 31670 +3 30021 31670 30826 +3 30022 30827 31671 +3 30022 31671 30929 +3 30023 30319 31042 +3 30023 31042 30778 +3 30024 30779 31043 +3 30024 31043 30320 +3 30025 30098 30100 +3 30026 30101 30099 +3 30027 30061 30126 +3 30027 30126 30057 +3 30028 30058 30127 +3 30028 30127 30062 +3 30029 32823 33794 +3 30029 33794 31064 +3 30030 31065 33795 +3 30030 33795 32824 +3 30031 30474 30720 +3 30031 30720 30349 +3 30032 30350 30721 +3 30032 30721 30475 +3 30033 32897 33502 +3 30033 33502 30689 +3 30034 30690 33503 +3 30034 33503 32898 +3 30035 30055 30118 +3 30035 30118 30071 +3 30036 30072 30119 +3 30036 30119 30056 +3 30037 31440 34608 +3 30037 34608 33331 +3 30038 33332 34609 +3 30038 34609 31441 +3 30039 31712 33387 +3 30039 33387 31822 +3 30040 31823 33388 +3 30040 33388 31713 +3 30041 33256 33274 +3 30041 33274 30042 +3 30042 33274 33257 +3 30043 30078 30129 +3 30043 30129 30067 +3 30044 30068 30130 +3 30044 30130 30079 +3 30045 30403 31510 +3 30045 31510 31202 +3 30046 31203 31511 +3 30046 31511 30404 +3 30047 30427 31923 +3 30047 31923 31595 +3 30048 31596 31924 +3 30048 31924 30428 +3 30049 31710 33151 +3 30049 33151 31640 +3 30050 31641 33152 +3 30050 33152 31711 +3 30051 30446 31141 +3 30051 31141 30810 +3 30052 30811 31142 +3 30052 31142 30447 +3 30053 32551 33576 +3 30053 33576 31147 +3 30054 31148 33577 +3 30054 33577 32552 +3 30055 30056 30128 +3 30055 30128 30118 +3 30056 30119 30128 +3 30057 30126 30145 +3 30057 30145 30077 +3 30058 30077 30146 +3 30058 30146 30127 +3 30059 30282 30522 +3 30059 30522 30361 +3 30060 30362 30523 +3 30060 30523 30283 +3 30061 30084 30147 +3 30061 30147 30126 +3 30062 30127 30148 +3 30062 30148 30085 +3 30063 30187 30536 +3 30063 30536 30448 +3 30064 30449 30537 +3 30064 30537 30188 +3 30065 30629 31702 +3 30065 31702 31171 +3 30066 31172 31703 +3 30066 31703 30630 +3 30067 30129 30155 +3 30067 30155 30084 +3 30068 30085 30156 +3 30068 30156 30130 +3 30069 30313 30593 +3 30069 30593 30397 +3 30070 30398 30594 +3 30070 30594 30314 +3 30071 30118 30149 +3 30071 30149 30098 +3 30072 30099 30150 +3 30072 30150 30119 +3 30073 31732 32498 +3 30073 32498 30898 +3 30074 30899 32499 +3 30074 32499 31733 +3 30075 30552 31508 +3 30075 31508 31050 +3 30076 31050 31509 +3 30076 31509 30553 +3 30077 30145 30146 +3 30078 30100 30163 +3 30078 30163 30129 +3 30079 30130 30164 +3 30079 30164 30101 +3 30080 30833 31414 +3 30080 31414 30703 +3 30081 30704 31415 +3 30081 31415 30834 +3 30082 31001 33639 +3 30082 33639 32748 +3 30083 32749 33640 +3 30083 33640 31002 +3 30084 30155 30147 +3 30085 30148 30156 +3 30086 30560 31630 +3 30086 31630 31187 +3 30087 31188 31631 +3 30087 31631 30561 +3 30088 31143 34623 +3 30088 34623 33810 +3 30089 33811 34624 +3 30089 34624 31144 +3 30090 30562 30792 +3 30090 30792 30363 +3 30091 30364 30793 +3 30091 30793 30563 +3 30092 30417 30510 +3 30092 30510 30201 +3 30093 30202 30511 +3 30093 30511 30418 +3 30094 30256 30597 +3 30094 30597 30460 +3 30095 30461 30598 +3 30095 30598 30257 +3 30096 32227 32901 +3 30096 32901 30946 +3 30097 30947 32902 +3 30097 32902 32228 +3 30098 30149 30175 +3 30098 30175 30100 +3 30099 30101 30176 +3 30099 30176 30150 +3 30100 30175 30163 +3 30101 30164 30176 +3 30102 30736 31428 +3 30102 31428 30833 +3 30103 30834 31429 +3 30103 31429 30737 +3 30104 30655 31750 +3 30104 31750 30654 +3 30105 31575 34967 +3 30105 34967 33846 +3 30106 33847 34968 +3 30106 34968 31576 +3 30107 30278 30734 +3 30107 30734 30591 +3 30108 30592 30735 +3 30108 30735 30279 +3 30109 31540 31895 +3 30109 31895 30665 +3 30110 30666 31896 +3 30110 31896 31541 +3 30111 31210 32022 +3 30111 32022 30928 +3 30112 30929 32023 +3 30112 32023 31211 +3 30113 30878 32777 +3 30113 32777 32066 +3 30114 32067 32778 +3 30114 32778 30879 +3 30115 30335 31096 +3 30115 31096 30932 +3 30116 30933 31097 +3 30116 31097 30336 +3 30117 31159 33372 +3 30117 33372 31160 +3 30118 30128 30191 +3 30118 30191 30149 +3 30119 30150 30192 +3 30119 30192 30128 +3 30120 30270 30542 +3 30120 30542 30415 +3 30121 30416 30543 +3 30121 30543 30271 +3 30122 31163 33712 +3 30122 33712 32789 +3 30123 32790 33713 +3 30123 33713 31164 +3 30124 30252 30568 +3 30124 30568 30452 +3 30125 30453 30569 +3 30125 30569 30253 +3 30126 30147 30203 +3 30126 30203 30145 +3 30127 30146 30204 +3 30127 30204 30148 +3 30128 30192 30191 +3 30129 30163 30207 +3 30129 30207 30155 +3 30130 30156 30208 +3 30130 30208 30164 +3 30131 30347 30579 +3 30131 30579 30409 +3 30132 30410 30580 +3 30132 30580 30348 +3 30133 30748 30866 +3 30133 30866 30278 +3 30134 30279 30867 +3 30134 30867 30749 +3 30135 32200 32754 +3 30135 32754 30744 +3 30136 30745 32755 +3 30136 32755 32201 +3 30137 30532 31660 +3 30137 31660 31228 +3 30138 31229 31661 +3 30138 31661 30533 +3 30139 30407 30566 +3 30139 30566 30331 +3 30140 30332 30567 +3 30140 30567 30408 +3 30141 31250 32537 +3 30141 32537 31474 +3 30142 31475 32538 +3 30142 32538 31251 +3 30143 32653 33589 +3 30143 33589 31117 +3 30144 31118 33590 +3 30144 33590 32654 +3 30145 30203 30213 +3 30145 30213 30146 +3 30146 30213 30204 +3 30147 30155 30214 +3 30147 30214 30203 +3 30148 30204 30215 +3 30148 30215 30156 +3 30149 30191 30211 +3 30149 30211 30175 +3 30150 30176 30212 +3 30150 30212 30192 +3 30151 30712 30894 +3 30151 30894 30355 +3 30152 30356 30895 +3 30152 30895 30713 +3 30153 31021 31359 +3 30153 31359 30500 +3 30154 30501 31360 +3 30154 31360 31022 +3 30155 30207 30214 +3 30156 30215 30208 +3 30157 31534 34901 +3 30157 34901 33852 +3 30158 33853 34902 +3 30158 34902 31535 +3 30159 32627 33122 +3 30159 33122 31698 +3 30160 31699 33123 +3 30160 33123 32628 +3 30161 30397 30643 +3 30161 30643 30429 +3 30162 30429 30644 +3 30162 30644 30398 +3 30163 30175 30216 +3 30163 30216 30207 +3 30164 30208 30217 +3 30164 30217 30176 +3 30165 30695 30786 +3 30165 30786 30243 +3 30166 30244 30787 +3 30166 30787 30696 +3 30167 30804 31234 +3 30167 31234 30612 +3 30168 30613 31235 +3 30168 31235 30805 +3 30169 30983 33786 +3 30169 33786 32160 +3 30170 32161 33787 +3 30170 33787 30984 +3 30171 31822 33812 +3 30171 33812 32245 +3 30172 32246 33813 +3 30172 33813 31823 +3 30173 30401 30633 +3 30173 30633 30407 +3 30174 30408 30634 +3 30174 30634 30402 +3 30175 30211 30216 +3 30176 30217 30212 +3 30177 31244 32484 +3 30177 32484 31434 +3 30178 31435 32485 +3 30178 32485 31245 +3 30179 30738 30922 +3 30179 30922 30373 +3 30180 30374 30923 +3 30180 30923 30739 +3 30181 30409 30635 +3 30181 30635 30401 +3 30182 30402 30636 +3 30182 30636 30410 +3 30183 31151 31442 +3 30183 31442 30468 +3 30184 30469 31443 +3 30184 31443 31152 +3 30185 30837 31317 +3 30185 31317 30454 +3 30186 30455 31318 +3 30186 31318 30838 +3 30187 30264 30608 +3 30187 30608 30536 +3 30188 30537 30609 +3 30188 30609 30265 +3 30189 30249 30623 +3 30189 30623 30504 +3 30190 30505 30624 +3 30190 30624 30250 +3 30191 30192 30222 +3 30191 30222 30211 +3 30192 30212 30222 +3 30193 31824 32340 +3 30193 32340 30724 +3 30194 30725 32341 +3 30194 32341 31825 +3 30195 30693 30849 +3 30195 30849 30474 +3 30196 30475 30850 +3 30196 30850 30694 +3 30197 30466 31119 +3 30197 31119 30862 +3 30198 30863 31120 +3 30198 31120 30467 +3 30199 31157 31436 +3 30199 31436 30480 +3 30200 30481 31437 +3 30200 31437 31158 +3 30201 30510 30577 +3 30201 30577 30264 +3 30202 30265 30578 +3 30202 30578 30511 +3 30203 30214 30231 +3 30203 30231 30213 +3 30204 30213 30232 +3 30204 30232 30215 +3 30205 30651 30967 +3 30205 30967 30520 +3 30206 30521 30968 +3 30206 30968 30652 +3 30207 30216 30233 +3 30207 30233 30214 +3 30208 30215 30234 +3 30208 30234 30217 +3 30209 31232 32289 +3 30209 32289 31274 +3 30210 31275 32290 +3 30210 32290 31233 +3 30211 30222 30239 +3 30211 30239 30216 +3 30212 30217 30240 +3 30212 30240 30222 +3 30213 30231 30232 +3 30214 30233 30231 +3 30215 30232 30234 +3 30216 30239 30233 +3 30217 30234 30240 +3 30218 31698 33196 +3 30218 33196 31710 +3 30219 31711 33197 +3 30219 33197 31699 +3 30220 32528 33210 +3 30220 33210 30910 +3 30221 30911 33211 +3 30221 33211 32529 +3 30222 30240 30239 +3 30223 31274 32295 +3 30223 32295 31250 +3 30224 31251 32296 +3 30224 32296 31275 +3 30225 32060 33662 +3 30225 33662 31852 +3 30226 31853 33663 +3 30226 33663 32061 +3 30227 31111 33348 +3 30227 33348 32460 +3 30228 32461 33349 +3 30228 33349 31112 +3 30229 31987 32791 +3 30229 32791 31038 +3 30230 31039 32792 +3 30230 32792 31987 +3 30231 30233 30251 +3 30231 30251 30232 +3 30232 30251 30234 +3 30233 30239 30251 +3 30234 30251 30240 +3 30235 32283 33029 +3 30235 33029 31005 +3 30236 31006 33030 +3 30236 33030 32284 +3 30237 30772 32137 +3 30237 32137 31632 +3 30238 31633 32138 +3 30238 32138 30773 +3 30239 30240 30251 +3 30241 31177 31367 +3 30241 31367 30425 +3 30242 30426 31368 +3 30242 31368 31178 +3 30243 30786 30841 +3 30243 30841 30307 +3 30244 30308 30842 +3 30244 30842 30787 +3 30245 30880 31626 +3 30245 31626 30975 +3 30246 30976 31627 +3 30246 31627 30881 +3 30247 31270 34346 +3 30247 34346 33490 +3 30248 33491 34347 +3 30248 34347 31271 +3 30249 30301 30673 +3 30249 30673 30623 +3 30250 30624 30674 +3 30250 30674 30302 +3 30252 30361 30661 +3 30252 30661 30568 +3 30253 30569 30662 +3 30253 30662 30362 +3 30254 30293 31399 +3 30254 31399 31357 +3 30255 31358 31400 +3 30255 31400 30294 +3 30256 30359 30687 +3 30256 30687 30597 +3 30257 30598 30688 +3 30257 30688 30360 +3 30258 31607 31856 +3 30258 31856 31075 +3 30259 31076 31857 +3 30259 31857 31608 +3 30260 30591 30997 +3 30260 30997 30685 +3 30261 30686 30998 +3 30261 30998 30592 +3 30262 30691 31327 +3 30262 31327 30896 +3 30263 30897 31328 +3 30263 31328 30692 +3 30264 30577 30608 +3 30265 30609 30578 +3 30266 33668 34949 +3 30266 34949 31680 +3 30267 31681 34950 +3 30267 34950 33669 +3 30268 31562 31909 +3 30268 31909 30627 +3 30269 30628 31910 +3 30269 31910 31563 +3 30270 30378 30639 +3 30270 30639 30542 +3 30271 30543 30640 +3 30271 30640 30379 +3 30272 31937 31979 +3 30272 31979 30288 +3 30273 30288 31980 +3 30273 31980 31938 +3 30274 30824 32312 +3 30274 32312 31795 +3 30275 31796 32313 +3 30275 32313 30825 +3 30276 31079 32121 +3 30276 32121 31288 +3 30277 31289 32122 +3 30277 32122 31080 +3 30278 30866 30734 +3 30279 30735 30867 +3 30280 30575 31222 +3 30280 31222 30908 +3 30281 30909 31223 +3 30281 31223 30576 +3 30282 30415 30671 +3 30282 30671 30522 +3 30283 30523 30672 +3 30283 30672 30416 +3 30284 30285 33641 +3 30284 33641 33615 +3 30285 33616 33641 +3 30286 31512 31945 +3 30286 31945 30710 +3 30287 30711 31946 +3 30287 31946 31513 +3 30288 31979 31980 +3 30289 32253 32781 +3 30289 32781 30843 +3 30290 30844 32782 +3 30290 32782 32254 +3 30291 31179 31524 +3 30291 31524 30610 +3 30292 30611 31525 +3 30292 31525 31180 +3 30293 30294 31417 +3 30293 31417 31399 +3 30294 31400 31417 +3 30295 31740 32368 +3 30295 32368 30934 +3 30296 30935 32369 +3 30296 32369 31741 +3 30297 31355 34170 +3 30297 34170 33224 +3 30298 33225 34171 +3 30298 34171 31356 +3 30299 31055 33607 +3 30299 33607 32837 +3 30300 32838 33608 +3 30300 33608 31056 +3 30301 30328 30701 +3 30301 30701 30673 +3 30302 30674 30702 +3 30302 30702 30329 +3 30303 31075 31891 +3 30303 31891 31079 +3 30304 31080 31892 +3 30304 31892 31076 +3 30305 30948 33880 +3 30305 33880 33279 +3 30306 33280 33881 +3 30306 33881 30949 +3 30307 30841 30882 +3 30307 30882 30325 +3 30308 30325 30883 +3 30308 30883 30842 +3 30309 31115 33139 +3 30309 33139 32271 +3 30310 32272 33140 +3 30310 33140 31116 +3 30311 30752 32207 +3 30311 32207 31746 +3 30312 31747 32208 +3 30312 32208 30753 +3 30313 30460 30762 +3 30313 30762 30593 +3 30314 30594 30763 +3 30314 30763 30461 +3 30315 30528 31292 +3 30315 31292 31040 +3 30316 31041 31293 +3 30316 31293 30529 +3 30317 31544 31887 +3 30317 31887 30645 +3 30318 30646 31888 +3 30318 31888 31545 +3 30319 30526 31276 +3 30319 31276 31042 +3 30320 31043 31277 +3 30320 31277 30527 +3 30321 31103 31644 +3 30321 31644 30837 +3 30322 30838 31645 +3 30322 31645 31104 +3 30323 32299 33903 +3 30323 33903 31983 +3 30324 31984 33904 +3 30324 33904 32300 +3 30325 30882 30883 +3 30326 30808 31017 +3 30326 31017 30530 +3 30327 30531 31018 +3 30327 31018 30809 +3 30328 30329 30709 +3 30328 30709 30701 +3 30329 30702 30709 +3 30330 30563 30962 +3 30330 30962 30562 +3 30331 30566 30699 +3 30331 30699 30417 +3 30332 30418 30700 +3 30332 30700 30567 +3 30333 32145 33796 +3 30333 33796 32060 +3 30334 32061 33797 +3 30334 33797 32146 +3 30335 30478 31266 +3 30335 31266 31096 +3 30336 31097 31267 +3 30336 31267 30479 +3 30337 30581 31284 +3 30337 31284 30999 +3 30338 31000 31285 +3 30338 31285 30582 +3 30339 31446 33954 +3 30339 33954 32924 +3 30340 32925 33955 +3 30340 33955 31447 +3 30341 31121 31518 +3 30341 31518 30681 +3 30342 30682 31519 +3 30342 31519 31122 +3 30343 31648 32099 +3 30343 32099 30831 +3 30344 30832 32100 +3 30344 32100 31649 +3 30345 31911 33697 +3 30345 33697 31875 +3 30346 31876 33698 +3 30346 33698 31912 +3 30347 30452 30728 +3 30347 30728 30579 +3 30348 30580 30729 +3 30348 30729 30453 +3 30349 30720 30952 +3 30349 30952 30546 +3 30350 30547 30953 +3 30350 30953 30721 +3 30351 31638 32696 +3 30351 32696 31395 +3 30352 31396 32697 +3 30352 32697 31639 +3 30353 30770 31089 +3 30353 31089 30651 +3 30354 30652 31090 +3 30354 31090 30771 +3 30355 30894 31044 +3 30355 31044 30488 +3 30356 30489 31045 +3 30356 31045 30895 +3 30357 31434 32641 +3 30357 32641 31570 +3 30358 31571 32642 +3 30358 32642 31435 +3 30359 30448 30768 +3 30359 30768 30687 +3 30360 30688 30769 +3 30360 30769 30449 +3 30361 30522 30718 +3 30361 30718 30661 +3 30362 30662 30719 +3 30362 30719 30523 +3 30363 30792 30979 +3 30363 30979 30544 +3 30364 30545 30980 +3 30364 30980 30793 +3 30365 30975 31947 +3 30365 31947 31294 +3 30366 31295 31948 +3 30366 31948 30976 +3 30367 30942 31385 +3 30367 31385 30804 +3 30368 30805 31386 +3 30368 31386 30943 +3 30369 31983 33621 +3 30369 33621 32094 +3 30370 32095 33622 +3 30370 33622 31984 +3 30371 30685 31099 +3 30371 31099 30764 +3 30372 30765 31100 +3 30372 31100 30686 +3 30373 30922 31051 +3 30373 31051 30492 +3 30374 30493 31052 +3 30374 31052 30923 +3 30375 33161 34026 +3 30375 34026 31321 +3 30376 31322 34027 +3 30376 34027 33162 +3 30377 30723 31507 +3 30377 31507 30722 +3 30378 30504 30799 +3 30378 30799 30639 +3 30379 30640 30800 +3 30379 30800 30505 +3 30380 31474 32714 +3 30380 32714 31638 +3 30381 31639 32715 +3 30381 32715 31475 +3 30382 30796 32178 +3 30382 32178 31371 +3 30383 31372 32179 +3 30383 32179 30797 +3 30384 31471 33788 +3 30384 33788 31470 +3 30385 33220 34098 +3 30385 34098 31472 +3 30386 31473 34099 +3 30386 34099 33221 +3 30387 32488 34133 +3 30387 34133 31260 +3 30388 31261 34134 +3 30388 34134 32489 +3 30389 30764 31123 +3 30389 31123 30758 +3 30390 30759 31124 +3 30390 31124 30765 +3 30391 30906 32728 +3 30391 32728 32235 +3 30392 32236 32729 +3 30392 32729 30907 +3 30393 31420 32233 +3 30393 32233 31210 +3 30394 31211 32234 +3 30394 32234 31421 +3 30395 30758 31129 +3 30395 31129 30770 +3 30396 30771 31130 +3 30396 31130 30759 +3 30397 30593 30874 +3 30397 30874 30643 +3 30398 30644 30875 +3 30398 30875 30594 +3 30399 31570 33019 +3 30399 33019 31897 +3 30400 31898 33020 +3 30400 33020 31571 +3 30401 30635 30852 +3 30401 30852 30633 +3 30402 30634 30853 +3 30402 30853 30636 +3 30403 30669 31793 +3 30403 31793 31510 +3 30404 31511 31794 +3 30404 31794 30670 +3 30405 31113 32984 +3 30405 32984 32287 +3 30406 32288 32985 +3 30406 32985 31114 +3 30407 30633 30822 +3 30407 30822 30566 +3 30408 30567 30823 +3 30408 30823 30634 +3 30409 30579 30835 +3 30409 30835 30635 +3 30410 30636 30836 +3 30410 30836 30580 +3 30411 31073 32775 +3 30411 32775 32115 +3 30412 32116 32776 +3 30412 32776 31074 +3 30413 32614 34207 +3 30413 34207 32145 +3 30414 32146 34208 +3 30414 34208 32615 +3 30415 30542 30820 +3 30415 30820 30671 +3 30416 30672 30821 +3 30416 30821 30543 +3 30417 30699 30812 +3 30417 30812 30510 +3 30418 30511 30813 +3 30418 30813 30700 +3 30419 30896 31501 +3 30419 31501 30989 +3 30420 30990 31502 +3 30420 31502 30897 +3 30421 31339 31708 +3 30421 31708 30816 +3 30422 30817 31709 +3 30422 31709 31340 +3 30423 31459 34008 +3 30423 34008 33081 +3 30424 33082 34009 +3 30424 34009 31460 +3 30425 31367 31566 +3 30425 31566 30991 +3 30426 30992 31567 +3 30426 31567 31368 +3 30427 30740 32263 +3 30427 32263 31923 +3 30428 31924 32264 +3 30428 32264 30741 +3 30429 30643 30828 +3 30429 30828 30644 +3 30430 30810 31306 +3 30430 31306 31083 +3 30431 31084 31307 +3 30431 31307 30811 +3 30432 31304 33424 +3 30432 33424 32692 +3 30433 32693 33425 +3 30433 33425 31305 +3 30434 32068 33591 +3 30434 33591 33055 +3 30435 33056 33592 +3 30435 33592 32069 +3 30436 30845 31872 +3 30436 31872 31452 +3 30437 31453 31873 +3 30437 31873 30846 +3 30438 30876 32002 +3 30438 32002 31605 +3 30439 31606 32003 +3 30439 32003 30877 +3 30440 33800 34695 +3 30440 34695 31528 +3 30441 31529 34696 +3 30441 34696 33801 +3 30442 31029 32541 +3 30442 32541 31889 +3 30443 31890 32542 +3 30443 32542 31030 +3 30444 31939 35308 +3 30444 35308 33956 +3 30445 33957 35309 +3 30445 35309 31940 +3 30446 30754 31481 +3 30446 31481 31141 +3 30447 31142 31482 +3 30447 31482 30755 +3 30448 30536 30870 +3 30448 30870 30768 +3 30449 30769 30871 +3 30449 30871 30537 +3 30450 31288 32281 +3 30450 32281 31448 +3 30451 31449 32282 +3 30451 32282 31289 +3 30452 30568 30872 +3 30452 30872 30728 +3 30453 30729 30873 +3 30453 30873 30569 +3 30454 31317 31797 +3 30454 31797 30918 +3 30455 30919 31798 +3 30455 31798 31318 +3 30456 32160 34028 +3 30456 34028 32407 +3 30457 32408 34029 +3 30457 34029 32161 +3 30458 30991 31783 +3 30458 31783 31226 +3 30459 31227 31784 +3 30459 31784 30992 +3 30460 30597 30914 +3 30460 30914 30762 +3 30461 30763 30915 +3 30461 30915 30598 +3 30462 31003 31520 +3 30462 31520 30942 +3 30463 30943 31521 +3 30463 31521 31004 +3 30464 32219 32821 +3 30464 32821 31066 +3 30465 31067 32822 +3 30465 32822 32220 +3 30466 30778 31461 +3 30466 31461 31119 +3 30467 31120 31462 +3 30467 31462 30779 +3 30468 31442 31684 +3 30468 31684 30839 +3 30469 30840 31685 +3 30469 31685 31443 +3 30470 31085 33277 +3 30470 33277 32665 +3 30471 32666 33278 +3 30471 33278 31086 +3 30472 33915 33943 +3 30472 33943 30473 +3 30473 33943 33916 +3 30474 30849 31105 +3 30474 31105 30720 +3 30475 30721 31106 +3 30475 31106 30850 +3 30476 32577 33377 +3 30476 33377 31256 +3 30477 31257 33378 +3 30477 33378 32578 +3 30478 30612 31401 +3 30478 31401 31266 +3 30479 31267 31402 +3 30479 31402 30613 +3 30480 31436 31688 +3 30480 31688 30726 +3 30481 30727 31689 +3 30481 31689 31437 +3 30482 31062 32366 +3 30482 32366 31773 +3 30483 31774 32367 +3 30483 32367 31063 +3 30484 31333 33108 +3 30484 33108 32269 +3 30485 32270 33109 +3 30485 33109 31334 +3 30486 32094 33660 +3 30486 33660 32068 +3 30487 32069 33661 +3 30487 33661 32095 +3 30488 31044 31198 +3 30488 31198 30621 +3 30489 30622 31199 +3 30489 31199 31045 +3 30490 31173 31846 +3 30490 31846 31133 +3 30491 31134 31847 +3 30491 31847 31174 +3 30492 31051 31193 +3 30492 31193 30695 +3 30493 30696 31194 +3 30493 31194 31052 +3 30494 31224 33680 +3 30494 33680 32958 +3 30495 32959 33681 +3 30495 33681 31225 +3 30496 31383 32082 +3 30496 32082 31173 +3 30497 31174 32083 +3 30497 32083 31384 +3 30498 32156 32555 +3 30498 32555 30888 +3 30499 30889 32556 +3 30499 32556 32157 +3 30500 31359 31742 +3 30500 31742 30884 +3 30501 30885 31743 +3 30501 31743 31360 +3 30502 33593 34543 +3 30502 34543 31642 +3 30503 31643 34544 +3 30503 34544 33594 +3 30504 30623 30930 +3 30504 30930 30799 +3 30505 30800 30931 +3 30505 30931 30624 +3 30506 30989 31585 +3 30506 31585 31048 +3 30507 31049 31586 +3 30507 31586 30990 +3 30508 33664 34217 +3 30508 34217 31204 +3 30509 31205 34218 +3 30509 34218 33665 +3 30510 30812 30892 +3 30510 30892 30577 +3 30511 30578 30893 +3 30511 30893 30813 +3 30512 32928 33816 +3 30512 33816 31483 +3 30513 31484 33817 +3 30513 33817 32929 +3 30514 31854 32358 +3 30514 32358 31015 +3 30515 31016 32359 +3 30515 32359 31855 +3 30516 31048 31583 +3 30516 31583 31003 +3 30517 31004 31584 +3 30517 31584 31049 +3 30518 31893 33023 +3 30518 33023 31666 +3 30519 31667 33024 +3 30519 33024 31894 +3 30520 30967 31165 +3 30520 31165 30693 +3 30521 30694 31166 +3 30521 31166 30968 +3 30522 30671 30900 +3 30522 30900 30718 +3 30523 30719 30901 +3 30523 30901 30672 +3 30524 31371 32344 +3 30524 32344 31516 +3 30525 31517 32345 +3 30525 32345 31372 +3 30526 30732 31503 +3 30526 31503 31276 +3 30527 31277 31504 +3 30527 31504 30733 +3 30528 30730 31530 +3 30528 31530 31292 +3 30529 31293 31531 +3 30529 31531 30731 +3 30530 31017 31240 +3 30530 31240 30712 +3 30531 30713 31241 +3 30531 31241 31018 +3 30532 30890 32006 +3 30532 32006 31660 +3 30533 31661 32007 +3 30533 32007 30891 +3 30534 33283 34310 +3 30534 34310 31716 +3 30535 31717 34311 +3 30535 34311 33284 +3 30536 30608 30940 +3 30536 30940 30870 +3 30537 30871 30941 +3 30537 30941 30609 +3 30538 33266 33990 +3 30538 33990 31363 +3 30539 31364 33991 +3 30539 33991 33267 +3 30540 31977 33145 +3 30540 33145 31720 +3 30541 31721 33146 +3 30541 33146 31978 +3 30542 30639 30920 +3 30542 30920 30820 +3 30543 30821 30921 +3 30543 30921 30640 +3 30544 30979 31290 +3 30544 31290 30808 +3 30545 30809 31291 +3 30545 31291 30980 +3 30546 30952 31175 +3 30546 31175 30738 +3 30547 30739 31176 +3 30547 31176 30953 +3 30548 32407 34172 +3 30548 34172 32500 +3 30549 32501 34173 +3 30549 34173 32408 +3 30550 31424 33333 +3 30550 33333 32453 +3 30551 32453 33334 +3 30551 33334 31425 +3 30552 30987 31973 +3 30552 31973 31508 +3 30553 31509 31974 +3 30553 31974 30988 +3 30554 31690 32211 +3 30554 32211 31011 +3 30555 31012 32212 +3 30555 32212 31691 +3 30556 31397 33585 +3 30556 33585 32756 +3 30557 32757 33586 +3 30557 33586 31398 +3 30558 32350 34312 +3 30558 34312 32675 +3 30559 32676 34313 +3 30559 34313 32351 +3 30560 30965 32030 +3 30560 32030 31630 +3 30561 31631 32031 +3 30561 32031 30966 +3 30562 30962 31218 +3 30562 31218 30792 +3 30563 30793 31219 +3 30563 31219 30962 +3 30564 31310 31885 +3 30564 31885 31103 +3 30565 31104 31886 +3 30565 31886 31311 +3 30566 30822 30950 +3 30566 30950 30699 +3 30567 30700 30951 +3 30567 30951 30823 +3 30568 30661 30963 +3 30568 30963 30872 +3 30569 30873 30964 +3 30569 30964 30662 +3 30570 30908 31465 +3 30570 31465 30909 +3 30571 31149 32950 +3 30571 32950 32346 +3 30572 32347 32951 +3 30572 32951 31150 +3 30573 31448 32378 +3 30573 32378 31420 +3 30574 31421 32379 +3 30574 32379 31449 +3 30575 30862 31514 +3 30575 31514 31222 +3 30576 31223 31515 +3 30576 31515 30863 +3 30577 30892 30924 +3 30577 30924 30608 +3 30578 30609 30925 +3 30578 30925 30893 +3 30579 30728 30973 +3 30579 30973 30835 +3 30580 30836 30974 +3 30580 30974 30729 +3 30581 30659 31369 +3 30581 31369 31284 +3 30582 31285 31370 +3 30582 31370 30660 +3 30583 32702 33650 +3 30583 33650 31489 +3 30584 31490 33651 +3 30584 33651 32703 +3 30585 31294 32198 +3 30585 32198 31477 +3 30586 31480 32199 +3 30586 32199 31295 +3 30587 31628 34422 +3 30587 34422 33560 +3 30588 33561 34423 +3 30588 34423 31629 +3 30589 32245 34113 +3 30589 34113 32299 +3 30590 32300 34116 +3 30590 34116 32246 +3 30591 30734 31189 +3 30591 31189 30997 +3 30592 30998 31190 +3 30592 31190 30735 +3 30593 30762 31025 +3 30593 31025 30874 +3 30594 30875 31026 +3 30594 31026 30763 +3 30595 31757 32867 +3 30595 32867 31700 +3 30596 31701 32868 +3 30596 32868 31758 +3 30597 30687 30995 +3 30597 30995 30914 +3 30598 30915 30996 +3 30598 30996 30688 +3 30599 31206 33319 +3 30599 33319 32716 +3 30600 32717 33320 +3 30600 33320 31207 +3 30601 32451 34006 +3 30601 34006 32350 +3 30602 32351 34007 +3 30602 34007 32452 +3 30603 31538 34473 +3 30603 34473 32801 +3 30604 32802 34474 +3 30604 34474 31539 +3 30605 31720 32877 +3 30605 32877 31757 +3 30606 31758 32878 +3 30606 32878 31721 +3 30607 31208 32434 +3 30607 32434 31209 +3 30608 30924 30940 +3 30609 30941 30925 +3 30610 31524 31618 +3 30610 31618 30641 +3 30611 30642 31619 +3 30611 31619 31525 +3 30612 31234 31401 +3 30613 31402 31235 +3 30614 31216 32599 +3 30614 32599 32174 +3 30615 32175 32600 +3 30615 32600 31217 +3 30616 31516 32750 +3 30616 32750 31830 +3 30617 31831 32751 +3 30617 32751 31517 +3 30618 31771 34155 +3 30618 34155 31772 +3 30619 31777 34486 +3 30619 34486 33619 +3 30620 33620 34487 +3 30620 34487 31778 +3 30621 31198 31300 +3 30621 31300 30748 +3 30622 30749 31301 +3 30622 31301 31199 +3 30623 30673 31013 +3 30623 31013 30930 +3 30624 30931 31014 +3 30624 31014 30674 +3 30625 31751 35017 +3 30625 35017 34109 +3 30626 34110 35018 +3 30626 35018 31752 +3 30627 31909 32265 +3 30627 32265 30977 +3 30628 30978 32266 +3 30628 32266 31910 +3 30629 31131 32229 +3 30629 32229 31702 +3 30630 31703 32230 +3 30630 32230 31132 +3 30631 31226 31943 +3 30631 31943 31353 +3 30632 31354 31944 +3 30632 31944 31227 +3 30633 30852 31009 +3 30633 31009 30822 +3 30634 30823 31010 +3 30634 31010 30853 +3 30635 30835 31027 +3 30635 31027 30852 +3 30636 30853 31028 +3 30636 31028 30836 +3 30637 30653 32545 +3 30637 32545 32492 +3 30638 32493 32546 +3 30638 32546 30653 +3 30639 30799 31057 +3 30639 31057 30920 +3 30640 30921 31058 +3 30640 31058 30800 +3 30641 31618 31636 +3 30641 31636 30658 +3 30642 30658 31637 +3 30642 31637 31619 +3 30643 30874 31023 +3 30643 31023 30828 +3 30644 30828 31024 +3 30644 31024 30875 +3 30645 31887 32506 +3 30645 32506 31262 +3 30646 31263 32507 +3 30646 32507 31888 +3 30647 30648 34232 +3 30647 34232 34209 +3 30648 34210 34232 +3 30649 32500 34617 +3 30649 34617 32998 +3 30650 32999 34618 +3 30650 34618 32501 +3 30651 31089 31410 +3 30651 31410 30967 +3 30652 30968 31411 +3 30652 31411 31090 +3 30653 32546 32545 +3 30654 31750 32261 +3 30654 32261 31161 +3 30655 31162 32262 +3 30655 32262 31750 +3 30656 31526 32249 +3 30656 32249 31383 +3 30657 31384 32250 +3 30657 32250 31527 +3 30658 31636 31637 +3 30659 30677 31438 +3 30659 31438 31369 +3 30660 31370 31439 +3 30660 31439 30678 +3 30661 30718 31034 +3 30661 31034 30963 +3 30662 30964 31035 +3 30662 31035 30719 +3 30663 32213 32793 +3 30663 32793 31252 +3 30664 31253 32794 +3 30664 32794 32214 +3 30665 31895 32390 +3 30665 32390 31169 +3 30666 31170 32391 +3 30666 32391 31896 +3 30667 31375 32970 +3 30667 32970 32275 +3 30668 32276 32971 +3 30668 32971 31376 +3 30669 30926 32028 +3 30669 32028 31793 +3 30670 31794 32029 +3 30670 32029 30927 +3 30671 30820 31032 +3 30671 31032 30900 +3 30672 30901 31033 +3 30672 31033 30821 +3 30673 30701 31059 +3 30673 31059 31013 +3 30674 31014 31060 +3 30674 31060 30702 +3 30675 33526 34430 +3 30675 34430 31791 +3 30676 31792 34431 +3 30676 34431 33527 +3 30677 30678 31458 +3 30677 31458 31438 +3 30678 31439 31458 +3 30679 32734 34392 +3 30679 34392 32488 +3 30680 32489 34393 +3 30680 34393 32735 +3 30681 31518 31858 +3 30681 31858 31021 +3 30682 31022 31859 +3 30682 31859 31519 +3 30683 32000 33206 +3 30683 33206 31893 +3 30684 31894 33207 +3 30684 33207 32001 +3 30685 30997 31426 +3 30685 31426 31099 +3 30686 31100 31427 +3 30686 31427 30998 +3 30687 30768 31091 +3 30687 31091 30995 +3 30688 30996 31092 +3 30688 31092 30769 +3 30689 33502 33980 +3 30689 33980 32437 +3 30690 32438 33981 +3 30690 33981 33503 +3 30691 31083 31726 +3 30691 31726 31327 +3 30692 31328 31727 +3 30692 31727 31084 +3 30693 31165 31335 +3 30693 31335 30849 +3 30694 30850 31336 +3 30694 31336 31166 +3 30695 31193 31282 +3 30695 31282 30786 +3 30696 30787 31283 +3 30696 31283 31194 +3 30697 32374 32996 +3 30697 32996 31298 +3 30698 31299 32997 +3 30698 32997 32375 +3 30699 30950 31053 +3 30699 31053 30812 +3 30700 30813 31054 +3 30700 31054 30951 +3 30701 30709 31093 +3 30701 31093 31059 +3 30702 31060 31094 +3 30702 31094 30709 +3 30703 31414 32032 +3 30703 32032 31310 +3 30704 31311 32033 +3 30704 32033 31415 +3 30705 31897 33340 +3 30705 33340 32139 +3 30706 32142 33341 +3 30706 33341 31898 +3 30707 31907 34891 +3 30707 34891 33927 +3 30708 33928 34892 +3 30708 34892 31908 +3 30709 31094 31093 +3 30710 31945 32449 +3 30710 32449 31135 +3 30711 31136 32450 +3 30711 32450 31946 +3 30712 31240 31404 +3 30712 31404 30894 +3 30713 30895 31405 +3 30713 31405 31241 +3 30714 31456 34589 +3 30714 34589 33976 +3 30715 33977 34590 +3 30715 34590 31457 +3 30716 33165 33897 +3 30716 33897 31668 +3 30717 31669 33898 +3 30717 33898 33166 +3 30718 30900 31081 +3 30718 31081 31034 +3 30719 31035 31082 +3 30719 31082 30901 +3 30720 31105 31349 +3 30720 31349 30952 +3 30721 30953 31350 +3 30721 31350 31106 +3 30722 31507 31899 +3 30722 31899 31121 +3 30723 31122 31900 +3 30723 31900 31507 +3 30724 32340 32847 +3 30724 32847 31236 +3 30725 31237 32848 +3 30725 32848 32341 +3 30726 31688 31925 +3 30726 31925 30958 +3 30727 30959 31926 +3 30727 31926 31689 +3 30728 30872 31107 +3 30728 31107 30973 +3 30729 30974 31108 +3 30729 31108 30873 +3 30730 30999 31678 +3 30730 31678 31530 +3 30731 31531 31679 +3 30731 31679 31000 +3 30732 30932 31672 +3 30732 31672 31503 +3 30733 31504 31673 +3 30733 31673 30933 +3 30734 30866 31319 +3 30734 31319 31189 +3 30735 31190 31320 +3 30735 31320 30867 +3 30736 31353 32056 +3 30736 32056 31428 +3 30737 31429 32057 +3 30737 32057 31354 +3 30738 31175 31361 +3 30738 31361 30922 +3 30739 30923 31362 +3 30739 31362 31176 +3 30740 31674 32543 +3 30740 32543 32263 +3 30741 32264 32544 +3 30741 32544 31675 +3 30742 32437 34056 +3 30742 34056 32451 +3 30743 32452 34057 +3 30743 34057 32438 +3 30744 32754 33313 +3 30744 33313 31296 +3 30745 31297 33314 +3 30745 33314 32755 +3 30746 33397 34070 +3 30746 34070 31542 +3 30747 31543 34071 +3 30747 34071 33398 +3 30748 31300 31418 +3 30748 31418 30866 +3 30749 30867 31419 +3 30749 31419 31301 +3 30750 31992 34675 +3 30750 34675 33652 +3 30751 33653 34676 +3 30751 34676 31993 +3 30752 31167 32616 +3 30752 32616 32207 +3 30753 32208 32617 +3 30753 32617 31168 +3 30754 31040 31767 +3 30754 31767 31481 +3 30755 31482 31768 +3 30755 31768 31041 +3 30756 32139 33366 +3 30756 33366 31977 +3 30757 31978 33367 +3 30757 33367 32142 +3 30758 31123 31487 +3 30758 31487 31129 +3 30759 31130 31488 +3 30759 31488 31124 +3 30760 32386 33629 +3 30760 33629 32000 +3 30761 32001 33630 +3 30761 33630 32387 +3 30762 30914 31196 +3 30762 31196 31025 +3 30763 31026 31197 +3 30763 31197 30915 +3 30764 31099 31499 +3 30764 31499 31123 +3 30765 31124 31500 +3 30765 31500 31100 +3 30766 31917 32869 +3 30766 32869 31682 +3 30767 31683 32870 +3 30767 32870 31918 +3 30768 30870 31153 +3 30768 31153 31091 +3 30769 31092 31154 +3 30769 31154 30871 +3 30770 31129 31505 +3 30770 31505 31089 +3 30771 31090 31506 +3 30771 31506 31130 +3 30772 31268 32659 +3 30772 32659 32137 +3 30773 32138 32660 +3 30773 32660 31269 +3 30774 33133 33774 +3 30774 33774 31454 +3 30775 31455 33775 +3 30775 33775 33134 +3 30776 32797 33566 +3 30776 33566 31572 +3 30777 31573 33567 +3 30777 33567 32798 +3 30778 31042 31744 +3 30778 31744 31461 +3 30779 31462 31745 +3 30779 31745 31043 +3 30780 32629 33373 +3 30780 33373 31522 +3 30781 31523 33374 +3 30781 33374 32630 +3 30782 31477 32309 +3 30782 32309 31622 +3 30783 31623 32310 +3 30783 32310 31480 +3 30784 32849 34545 +3 30784 34545 32734 +3 30785 32735 34546 +3 30785 34546 32850 +3 30786 31282 31345 +3 30786 31345 30841 +3 30787 30842 31346 +3 30787 31346 31283 +3 30788 31658 34390 +3 30788 34390 33672 +3 30789 33673 34391 +3 30789 34391 31659 +3 30790 31682 32587 +3 30790 32587 31674 +3 30791 31675 32588 +3 30791 32588 31683 +3 30792 31218 31430 +3 30792 31430 30979 +3 30793 30980 31431 +3 30793 31431 31219 +3 30794 31622 32318 +3 30794 32318 31526 +3 30795 31527 32319 +3 30795 32319 31623 +3 30796 31200 32585 +3 30796 32585 32178 +3 30797 32179 32586 +3 30797 32586 31201 +3 30798 33039 34711 +3 30798 34711 32706 +3 30799 30930 31212 +3 30799 31212 31057 +3 30800 31058 31213 +3 30800 31213 30931 +3 30801 32707 34712 +3 30801 34712 33040 +3 30802 31834 34252 +3 30802 34252 33385 +3 30803 33386 34253 +3 30803 34253 31835 +3 30804 31385 31832 +3 30804 31832 31234 +3 30805 31235 31833 +3 30805 31833 31386 +3 30806 31654 33891 +3 30806 33891 33087 +3 30807 33088 33892 +3 30807 33892 31655 +3 30808 31290 31560 +3 30808 31560 31017 +3 30809 31018 31561 +3 30809 31561 31291 +3 30810 31141 31664 +3 30810 31664 31306 +3 30811 31307 31665 +3 30811 31665 31142 +3 30812 31053 31145 +3 30812 31145 30892 +3 30813 30893 31146 +3 30813 31146 31054 +3 30814 31921 32825 +3 30814 32825 31278 +3 30815 31279 32826 +3 30815 32826 31922 +3 30816 31708 32084 +3 30816 32084 31151 +3 30817 31152 32085 +3 30817 32085 31709 +3 30818 33130 34802 +3 30818 34802 31789 +3 30819 31790 34803 +3 30819 34803 33131 +3 30820 30920 31155 +3 30820 31155 31032 +3 30821 31033 31156 +3 30821 31156 30921 +3 30822 31009 31185 +3 30822 31185 30950 +3 30823 30951 31186 +3 30823 31186 31010 +3 30824 31381 32827 +3 30824 32827 32312 +3 30825 32313 32828 +3 30825 32828 31382 +3 30826 31670 32384 +3 30826 32384 31544 +3 30827 31545 32385 +3 30827 32385 31671 +3 30828 31023 31195 +3 30828 31195 31024 +3 30829 33909 34782 +3 30829 34782 31901 +3 30830 31902 34783 +3 30830 34783 33910 +3 30831 32099 32131 +3 30831 32131 30860 +3 30832 30861 32132 +3 30832 32132 32100 +3 30833 31428 32096 +3 30833 32096 31414 +3 30834 31415 32097 +3 30834 32097 31429 +3 30835 30973 31214 +3 30835 31214 31027 +3 30836 31028 31215 +3 30836 31215 30974 +3 30837 31644 32123 +3 30837 32123 31317 +3 30838 31318 32124 +3 30838 32124 31645 +3 30839 31684 32052 +3 30839 32052 31179 +3 30840 31180 32053 +3 30840 32053 31685 +3 30841 31345 31389 +3 30841 31389 30882 +3 30842 30883 31390 +3 30842 31390 31346 +3 30843 32781 33721 +3 30843 33721 31785 +3 30844 31786 33722 +3 30844 33722 32782 +3 30845 31228 32251 +3 30845 32251 31872 +3 30846 31873 32252 +3 30846 32252 31229 +3 30847 32706 34410 +3 30847 34410 32805 +3 30848 32806 34411 +3 30848 34411 32707 +3 30849 31335 31478 +3 30849 31478 31105 +3 30850 31106 31479 +3 30850 31479 31336 +3 30851 32071 34525 +3 30851 34525 32070 +3 30852 31027 31264 +3 30852 31264 31009 +3 30853 31010 31265 +3 30853 31265 31028 +3 30854 32109 33574 +3 30854 33574 32332 +3 30855 32333 33575 +3 30855 33575 32110 +3 30856 33958 34870 +3 30856 34870 32080 +3 30857 32081 34871 +3 30857 34871 33959 +3 30858 32675 34530 +3 30858 34530 32614 +3 30859 32615 34531 +3 30859 34531 32676 +3 30860 32131 32159 +3 30860 32159 30861 +3 30861 32159 32132 +3 30862 31119 31763 +3 30862 31763 31514 +3 30863 31515 31766 +3 30863 31766 31120 +3 30864 32919 33804 +3 30864 33804 31816 +3 30865 31817 33805 +3 30865 33805 32919 +3 30866 31418 31319 +3 30867 31320 31419 +3 30868 33250 34054 +3 30868 34054 31787 +3 30869 31788 34055 +3 30869 34055 33251 +3 30870 30940 31246 +3 30870 31246 31153 +3 30871 31154 31247 +3 30871 31247 30941 +3 30872 30963 31242 +3 30872 31242 31107 +3 30873 31108 31243 +3 30873 31243 30964 +3 30874 31025 31230 +3 30874 31230 31023 +3 30875 31024 31231 +3 30875 31231 31026 +3 30876 31187 32338 +3 30876 32338 32002 +3 30877 32003 32339 +3 30877 32339 31188 +3 30878 31568 33478 +3 30878 33478 32777 +3 30879 32778 33479 +3 30879 33479 31569 +3 30880 31171 32205 +3 30880 32205 31626 +3 30881 31627 32206 +3 30881 32206 31172 +3 30882 31389 31403 +3 30882 31403 30883 +3 30883 31403 31390 +3 30884 31742 32086 +3 30884 32086 31157 +3 30885 31158 32087 +3 30885 32087 31743 +3 30886 31842 34076 +3 30886 34076 33141 +3 30887 33142 34077 +3 30887 34077 31843 +3 30888 32555 32926 +3 30888 32926 31232 +3 30889 31233 32927 +3 30889 32927 32556 +3 30890 31202 32334 +3 30890 32334 32006 +3 30891 32007 32335 +3 30891 32335 31203 +3 30892 31145 31220 +3 30892 31220 30924 +3 30893 30925 31221 +3 30893 31221 31146 +3 30894 31404 31591 +3 30894 31591 31044 +3 30895 31045 31592 +3 30895 31592 31405 +3 30896 31327 31913 +3 30896 31913 31501 +3 30897 31502 31914 +3 30897 31914 31328 +3 30898 32498 33244 +3 30898 33244 31577 +3 30899 31578 33245 +3 30899 33245 32499 +3 30900 31032 31254 +3 30900 31254 31081 +3 30901 31082 31255 +3 30901 31255 31033 +3 30902 33368 35005 +3 30902 35005 32849 +3 30903 32850 35006 +3 30903 35006 33369 +3 30904 31830 32978 +3 30904 32978 32058 +3 30905 32059 32981 +3 30905 32981 31831 +3 30906 31315 33175 +3 30906 33175 32728 +3 30907 32729 33176 +3 30907 33176 31316 +3 30908 31222 31801 +3 30908 31801 31465 +3 30909 31465 31802 +3 30909 31802 31223 +3 30910 33210 33802 +3 30910 33802 31579 +3 30911 31580 33803 +3 30911 33803 33211 +3 30912 32215 33753 +3 30912 33753 32470 +3 30913 32471 33754 +3 30913 33754 32216 +3 30914 30995 31313 +3 30914 31313 31196 +3 30915 31197 31314 +3 30915 31314 30996 +3 30916 32801 34744 +3 30916 34744 33077 +3 30917 33078 34745 +3 30917 34745 32802 +3 30918 31797 32221 +3 30918 32221 31339 +3 30919 31340 32222 +3 30919 32222 31798 +3 30920 31057 31331 +3 30920 31331 31155 +3 30921 31156 31332 +3 30921 31332 31058 +3 30922 31361 31546 +3 30922 31546 31051 +3 30923 31052 31547 +3 30923 31547 31362 +3 30924 31220 31248 +3 30924 31248 30940 +3 30925 30941 31249 +3 30925 31249 31221 +3 30926 31133 32267 +3 30926 32267 32028 +3 30927 32029 32268 +3 30927 32268 31134 +3 30928 32022 32771 +3 30928 32771 31670 +3 30929 31671 32772 +3 30929 32772 32023 +3 30930 31013 31323 +3 30930 31323 31212 +3 30931 31213 31324 +3 30931 31324 31014 +3 30932 31096 31881 +3 30932 31881 31672 +3 30933 31673 31882 +3 30933 31882 31097 +3 30934 32368 33033 +3 30934 33033 31612 +3 30935 31613 33034 +3 30935 33034 32369 +3 30936 34235 35269 +3 30936 35269 32194 +3 30937 32195 35270 +3 30937 35270 34236 +3 30938 32103 34843 +3 30938 34843 33893 +3 30939 33894 34844 +3 30939 34844 32104 +3 30940 31248 31246 +3 30941 31247 31249 +3 30942 31520 31949 +3 30942 31949 31385 +3 30943 31386 31950 +3 30943 31950 31521 +3 30944 34302 34919 +3 30944 34919 31696 +3 30945 31697 34920 +3 30945 34920 34303 +3 30946 32901 33537 +3 30946 33537 31593 +3 30947 31594 33538 +3 30947 33538 32902 +3 30948 32787 34378 +3 30948 34378 33880 +3 30949 33881 34379 +3 30949 34379 32788 +3 30950 31185 31308 +3 30950 31308 31053 +3 30951 31054 31309 +3 30951 31309 31186 +3 30952 31349 31599 +3 30952 31599 31175 +3 30953 31176 31600 +3 30953 31600 31350 +3 30954 32092 33017 +3 30954 33017 31917 +3 30955 31918 33018 +3 30955 33018 32093 +3 30956 32188 33456 +3 30956 33456 32243 +3 30957 32244 33457 +3 30957 33457 32189 +3 30958 31925 32140 +3 30958 32140 31177 +3 30959 31178 32141 +3 30959 32141 31926 +3 30960 33952 35009 +3 30960 35009 32293 +3 30961 32294 35010 +3 30961 35010 33953 +3 30962 31219 31609 +3 30962 31609 31218 +3 30963 31034 31329 +3 30963 31329 31242 +3 30964 31243 31330 +3 30964 31330 31035 +3 30965 31357 32427 +3 30965 32427 32030 +3 30966 32031 32428 +3 30966 32428 31358 +3 30967 31410 31624 +3 30967 31624 31165 +3 30968 31166 31625 +3 30968 31625 31411 +3 30969 32243 33466 +3 30969 33466 32215 +3 30970 32216 33467 +3 30970 33467 32244 +3 30971 32074 33013 +3 30971 33013 31921 +3 30972 31922 33014 +3 30972 33014 32075 +3 30973 31107 31351 +3 30973 31351 31214 +3 30974 31215 31352 +3 30974 31352 31108 +3 30975 31626 32571 +3 30975 32571 31947 +3 30976 31948 32572 +3 30976 32572 31627 +3 30977 32265 32582 +3 30977 32582 31302 +3 30978 31303 32583 +3 30978 32583 32266 +3 30979 31430 31736 +3 30979 31736 31290 +3 30980 31291 31737 +3 30980 31737 31431 +3 30981 32805 34444 +3 30981 34444 32787 +3 30982 32788 34445 +3 30982 34445 32806 +3 30983 31838 34454 +3 30983 34454 33786 +3 30984 33787 34455 +3 30984 34455 31839 +3 30985 33077 34893 +3 30985 34893 33198 +3 30986 33199 34894 +3 30986 34894 33078 +3 30987 31452 32413 +3 30987 32413 31973 +3 30988 31974 32414 +3 30988 32414 31453 +3 30989 31501 32050 +3 30989 32050 31585 +3 30990 31586 32051 +3 30990 32051 31502 +3 30991 31566 32303 +3 30991 32303 31783 +3 30992 31784 32304 +3 30992 32304 31567 +3 30993 32024 35167 +3 30993 35167 33462 +3 30994 33463 35168 +3 30994 35168 32025 +3 30995 31091 31412 +3 30995 31412 31313 +3 30996 31314 31413 +3 30996 31413 31092 +3 30997 31189 31620 +3 30997 31620 31426 +3 30998 31427 31621 +3 30998 31621 31190 +3 30999 31284 31969 +3 30999 31969 31678 +3 31000 31679 31970 +3 31000 31970 31285 +3 31001 32036 34330 +3 31001 34330 33639 +3 31002 33640 34331 +3 31002 34331 32037 +3 31003 31583 32044 +3 31003 32044 31520 +3 31004 31521 32045 +3 31004 32045 31584 +3 31005 33029 33099 +3 31005 33099 31031 +3 31006 31031 33100 +3 31006 33100 33030 +3 31007 34002 34762 +3 31007 34762 31959 +3 31008 31960 34763 +3 31008 34763 34003 +3 31009 31264 31432 +3 31009 31432 31185 +3 31010 31186 31433 +3 31010 31433 31265 +3 31011 32211 32679 +3 31011 32679 31512 +3 31012 31513 32680 +3 31012 32680 32212 +3 31013 31059 31406 +3 31013 31406 31323 +3 31014 31324 31407 +3 31014 31407 31060 +3 31015 32358 32841 +3 31015 32841 31540 +3 31016 31541 32842 +3 31016 32842 32359 +3 31017 31560 31755 +3 31017 31755 31240 +3 31018 31241 31756 +3 31018 31756 31561 +3 31019 32332 33755 +3 31019 33755 32462 +3 31020 32463 33756 +3 31020 33756 32333 +3 31021 31858 32184 +3 31021 32184 31359 +3 31022 31360 32185 +3 31022 32185 31859 +3 31023 31230 31391 +3 31023 31391 31195 +3 31024 31195 31392 +3 31024 31392 31231 +3 31025 31196 31387 +3 31025 31387 31230 +3 31026 31231 31388 +3 31026 31388 31197 +3 31027 31214 31450 +3 31027 31450 31264 +3 31028 31265 31451 +3 31028 31451 31215 +3 31029 31634 33124 +3 31029 33124 32541 +3 31030 32542 33125 +3 31030 33125 31635 +3 31031 33099 33100 +3 31032 31155 31377 +3 31032 31377 31254 +3 31033 31255 31378 +3 31033 31378 31156 +3 31034 31081 31393 +3 31034 31393 31329 +3 31035 31330 31394 +3 31035 31394 31082 +3 31036 33063 35137 +3 31036 35137 33430 +3 31037 33431 35138 +3 31037 35138 33064 +3 31038 32791 33554 +3 31038 33554 31836 +3 31039 31837 33555 +3 31039 33555 32792 +3 31040 31292 32010 +3 31040 32010 31767 +3 31041 31768 32011 +3 31041 32011 31293 +3 31042 31276 31981 +3 31042 31981 31744 +3 31043 31745 31982 +3 31043 31982 31277 +3 31044 31591 31724 +3 31044 31724 31198 +3 31045 31199 31725 +3 31045 31725 31592 +3 31046 32209 35182 +3 31046 35182 34250 +3 31047 34251 35183 +3 31047 35183 32210 +3 31048 31585 32038 +3 31048 32038 31583 +3 31049 31584 32039 +3 31049 32039 31586 +3 31050 31508 32402 +3 31050 32402 31509 +3 31051 31546 31656 +3 31051 31656 31193 +3 31052 31194 31657 +3 31052 31657 31547 +3 31053 31308 31408 +3 31053 31408 31145 +3 31054 31146 31409 +3 31054 31409 31309 +3 31055 31814 34193 +3 31055 34193 33607 +3 31056 33608 34194 +3 31056 34194 31815 +3 31057 31212 31485 +3 31057 31485 31331 +3 31058 31332 31486 +3 31058 31486 31213 +3 31059 31093 31463 +3 31059 31463 31406 +3 31060 31407 31464 +3 31060 31464 31094 +3 31061 31741 33107 +3 31061 33107 31740 +3 31062 31632 32952 +3 31062 32952 32366 +3 31063 32367 32953 +3 31063 32953 31633 +3 31064 33794 34693 +3 31064 34693 32166 +3 31065 32167 34694 +3 31065 34694 33795 +3 31066 32821 33295 +3 31066 33295 31748 +3 31067 31749 33296 +3 31067 33296 32822 +3 31068 32431 33474 +3 31068 33474 32074 +3 31069 32075 33475 +3 31069 33475 32432 +3 31070 32364 34884 +3 31070 34884 32365 +3 31071 32370 35251 +3 31071 35251 34300 +3 31072 34301 35252 +3 31072 35252 32371 +3 31073 31738 33442 +3 31073 33442 32775 +3 31074 32776 33443 +3 31074 33443 31739 +3 31075 31856 32649 +3 31075 32649 31891 +3 31076 31892 32650 +3 31076 32650 31857 +3 31077 33189 34776 +3 31077 34776 33063 +3 31078 33064 34777 +3 31078 34777 33190 +3 31079 31891 32940 +3 31079 32940 32121 +3 31080 32122 32941 +3 31080 32941 31892 +3 31081 31254 31444 +3 31081 31444 31393 +3 31082 31394 31445 +3 31082 31445 31255 +3 31083 31306 31965 +3 31083 31965 31726 +3 31084 31727 31966 +3 31084 31966 31307 +3 31085 31694 33838 +3 31085 33838 33277 +3 31086 33278 33839 +3 31086 33839 31695 +3 31087 32669 33901 +3 31087 33901 32386 +3 31088 32387 33902 +3 31088 33902 32670 +3 31089 31505 31818 +3 31089 31818 31410 +3 31090 31411 31819 +3 31090 31819 31506 +3 31091 31153 31497 +3 31091 31497 31412 +3 31092 31413 31498 +3 31092 31498 31154 +3 31093 31094 31476 +3 31093 31476 31463 +3 31094 31464 31476 +3 31095 32058 33149 +3 31095 33149 32092 +3 31096 31266 32026 +3 31096 32026 31881 +3 31097 31882 32027 +3 31097 32027 31267 +3 31098 32093 33150 +3 31098 33150 32059 +3 31099 31426 31826 +3 31099 31826 31499 +3 31100 31500 31827 +3 31100 31827 31427 +3 31101 32462 34135 +3 31101 34135 32889 +3 31102 32890 34136 +3 31102 34136 32463 +3 31103 31885 32423 +3 31103 32423 31644 +3 31104 31645 32424 +3 31104 32424 31886 +3 31105 31478 31714 +3 31105 31714 31349 +3 31106 31350 31715 +3 31106 31715 31479 +3 31107 31242 31495 +3 31107 31495 31351 +3 31108 31352 31496 +3 31108 31496 31243 +3 31109 32998 34943 +3 31109 34943 33039 +3 31110 33040 34946 +3 31110 34946 32999 +3 31111 31971 34082 +3 31111 34082 33348 +3 31112 33349 34083 +3 31112 34083 31972 +3 31113 31812 33646 +3 31113 33646 32984 +3 31114 32985 33647 +3 31114 33647 31813 +3 31115 31919 33889 +3 31115 33889 33139 +3 31116 33140 33890 +3 31116 33890 31920 +3 31117 33589 34364 +3 31117 34364 32046 +3 31118 32047 34365 +3 31118 34365 33590 +3 31119 31461 32107 +3 31119 32107 31763 +3 31120 31766 32108 +3 31120 32108 31462 +3 31121 31899 32291 +3 31121 32291 31518 +3 31122 31519 32292 +3 31122 32292 31900 +3 31123 31499 31850 +3 31123 31850 31487 +3 31124 31488 31851 +3 31124 31851 31500 +3 31125 33416 35117 +3 31125 35117 33130 +3 31126 33131 35118 +3 31126 35118 33417 +3 31127 33198 35406 +3 31127 35406 33727 +3 31128 33728 35407 +3 31128 35407 33199 +3 31129 31487 31860 +3 31129 31860 31505 +3 31130 31506 31861 +3 31130 31861 31488 +3 31131 31605 32673 +3 31131 32673 32229 +3 31132 32230 32674 +3 31132 32674 31606 +3 31133 31846 32458 +3 31133 32458 32267 +3 31134 32268 32459 +3 31134 32459 31847 +3 31135 32449 32851 +3 31135 32851 31562 +3 31136 31563 32852 +3 31136 32852 32450 +3 31137 32470 33931 +3 31137 33931 32669 +3 31138 32670 33932 +3 31138 33932 32471 +3 31139 32456 35671 +3 31139 35671 34567 +3 31140 34568 35672 +3 31140 35672 32457 +3 31141 31481 31990 +3 31141 31990 31664 +3 31142 31665 31991 +3 31142 31991 31482 +3 31143 31955 35279 +3 31143 35279 34623 +3 31144 34624 35280 +3 31144 35280 31956 +3 31145 31408 31493 +3 31145 31493 31220 +3 31146 31221 31494 +3 31146 31494 31409 +3 31147 33576 34488 +3 31147 34488 32180 +3 31148 32181 34489 +3 31148 34489 33577 +3 31149 31704 33504 +3 31149 33504 32950 +3 31150 32951 33505 +3 31150 33505 31705 +3 31151 32084 32380 +3 31151 32380 31442 +3 31152 31443 32381 +3 31152 32381 32085 +3 31153 31246 31550 +3 31153 31550 31497 +3 31154 31498 31551 +3 31154 31551 31247 +3 31155 31331 31581 +3 31155 31581 31377 +3 31156 31378 31582 +3 31156 31582 31332 +3 31157 32086 32360 +3 31157 32360 31436 +3 31158 31437 32361 +3 31158 32361 32087 +3 31159 32172 34233 +3 31159 34233 33372 +3 31160 33372 34234 +3 31160 34234 32173 +3 31161 32261 32795 +3 31161 32795 31690 +3 31162 31691 32796 +3 31162 32796 32262 +3 31163 32129 34499 +3 31163 34499 33712 +3 31164 33713 34500 +3 31164 34500 32130 +3 31165 31624 31809 +3 31165 31809 31335 +3 31166 31336 31810 +3 31166 31810 31625 +3 31167 31595 33010 +3 31167 33010 32616 +3 31168 32617 33011 +3 31168 33011 31596 +3 31169 32390 32879 +3 31169 32879 31648 +3 31170 31649 32880 +3 31170 32880 32391 +3 31171 31702 32736 +3 31171 32736 32205 +3 31172 32206 32737 +3 31172 32737 31703 +3 31173 32082 32724 +3 31173 32724 31846 +3 31174 31847 32725 +3 31174 32725 32083 +3 31175 31599 31803 +3 31175 31803 31361 +3 31176 31362 31804 +3 31176 31804 31600 +3 31177 32140 32342 +3 31177 32342 31367 +3 31178 31368 32343 +3 31178 32343 32141 +3 31179 32052 32372 +3 31179 32372 31524 +3 31180 31525 32373 +3 31180 32373 32053 +3 31181 32563 35370 +3 31181 35370 34254 +3 31182 34255 35371 +3 31182 35371 32564 +3 31183 32773 34048 +3 31183 34048 32528 +3 31184 32529 34049 +3 31184 34049 32774 +3 31185 31432 31589 +3 31185 31589 31308 +3 31186 31309 31590 +3 31186 31590 31433 +3 31187 31630 32643 +3 31187 32643 32338 +3 31188 32339 32644 +3 31188 32644 31631 +3 31189 31319 31753 +3 31189 31753 31620 +3 31190 31621 31754 +3 31190 31754 31320 +3 31191 34244 35242 +3 31191 35242 32419 +3 31192 32420 35243 +3 31192 35243 34245 +3 31193 31656 31868 +3 31193 31868 31282 +3 31194 31283 31869 +3 31194 31869 31657 +3 31195 31391 31557 +3 31195 31557 31392 +3 31196 31313 31558 +3 31196 31558 31387 +3 31197 31388 31559 +3 31197 31559 31314 +3 31198 31724 31866 +3 31198 31866 31300 +3 31199 31301 31867 +3 31199 31867 31725 +3 31200 31889 33291 +3 31200 33291 32585 +3 31201 32586 33292 +3 31201 33292 31890 +3 31202 31510 32645 +3 31202 32645 32334 +3 31203 32335 32646 +3 31203 32646 31511 +3 31204 34217 34756 +3 31204 34756 33159 +3 31205 33160 34757 +3 31205 34757 34218 +3 31206 32225 34197 +3 31206 34197 33319 +3 31207 33320 34198 +3 31207 34198 32226 +3 31208 31773 33008 +3 31208 33008 32434 +3 31209 32434 33009 +3 31209 33009 31774 +3 31210 32233 33043 +3 31210 33043 32022 +3 31211 32023 33044 +3 31211 33044 32234 +3 31212 31323 31610 +3 31212 31610 31485 +3 31213 31486 31611 +3 31213 31611 31324 +3 31214 31351 31614 +3 31214 31614 31450 +3 31215 31451 31615 +3 31215 31615 31352 +3 31216 31795 33169 +3 31216 33169 32599 +3 31217 32600 33170 +3 31217 33170 31796 +3 31218 31609 31840 +3 31218 31840 31430 +3 31219 31431 31841 +3 31219 31841 31609 +3 31220 31493 31548 +3 31220 31548 31248 +3 31221 31249 31549 +3 31221 31549 31494 +3 31222 31514 32090 +3 31222 32090 31801 +3 31223 31802 32091 +3 31223 32091 31515 +3 31224 31915 34228 +3 31224 34228 33680 +3 31225 33681 34229 +3 31225 34229 31916 +3 31226 31783 32502 +3 31226 32502 31943 +3 31227 31944 32503 +3 31227 32503 31784 +3 31228 31660 32694 +3 31228 32694 32251 +3 31229 32252 32695 +3 31229 32695 31661 +3 31230 31387 31587 +3 31230 31587 31391 +3 31231 31392 31588 +3 31231 31588 31388 +3 31232 32926 33248 +3 31232 33248 32289 +3 31233 32290 33249 +3 31233 33249 32927 +3 31234 31832 32008 +3 31234 32008 31401 +3 31235 31402 32009 +3 31235 32009 31833 +3 31236 32847 33327 +3 31236 33327 31692 +3 31237 31693 33328 +3 31237 33328 32848 +3 31238 33539 35271 +3 31238 35271 33416 +3 31239 33417 35272 +3 31239 35272 33540 +3 31240 31755 31941 +3 31240 31941 31404 +3 31241 31405 31942 +3 31241 31942 31756 +3 31242 31329 31601 +3 31242 31601 31495 +3 31243 31496 31602 +3 31243 31602 31330 +3 31244 31769 33480 +3 31244 33480 32484 +3 31245 32485 33481 +3 31245 33481 31770 +3 31246 31248 31564 +3 31246 31564 31550 +3 31247 31551 31565 +3 31247 31565 31249 +3 31248 31548 31564 +3 31249 31565 31549 +3 31250 32295 33595 +3 31250 33595 32537 +3 31251 32538 33596 +3 31251 33596 32296 +3 31252 32793 33370 +3 31252 33370 31824 +3 31253 31825 33371 +3 31253 33371 32794 +3 31254 31377 31597 +3 31254 31597 31444 +3 31255 31445 31598 +3 31255 31598 31378 +3 31256 33377 34036 +3 31256 34036 31996 +3 31257 31997 34037 +3 31257 34037 33378 +3 31258 33159 34812 +3 31258 34812 33189 +3 31259 33190 34813 +3 31259 34813 33160 +3 31260 34133 34839 +3 31260 34839 32119 +3 31261 32120 34840 +3 31261 34840 34134 +3 31262 32506 33093 +3 31262 33093 31854 +3 31263 31855 33094 +3 31263 33094 32507 +3 31264 31450 31652 +3 31264 31652 31432 +3 31265 31433 31653 +3 31265 31653 31451 +3 31266 31401 32170 +3 31266 32170 32026 +3 31267 32027 32171 +3 31267 32171 31402 +3 31268 31746 33240 +3 31268 33240 32659 +3 31269 32660 33241 +3 31269 33241 31747 +3 31270 32257 35157 +3 31270 35157 34346 +3 31271 34347 35158 +3 31271 35158 32258 +3 31272 32976 34237 +3 31272 34237 32688 +3 31273 32689 34238 +3 31273 34238 32977 +3 31274 32289 33287 +3 31274 33287 32295 +3 31275 32296 33288 +3 31275 33288 32290 +3 31276 31503 32217 +3 31276 32217 31981 +3 31277 31982 32218 +3 31277 32218 31504 +3 31278 32825 33285 +3 31278 33285 31732 +3 31279 31733 33286 +3 31279 33286 32826 +3 31280 34595 35572 +3 31280 35572 32482 +3 31281 32483 35573 +3 31281 35573 34596 +3 31282 31868 31933 +3 31282 31933 31345 +3 31283 31346 31934 +3 31283 31934 31869 +3 31284 31369 32072 +3 31284 32072 31969 +3 31285 31970 32073 +3 31285 32073 31370 +3 31286 33784 35518 +3 31286 35518 33428 +3 31287 33429 35519 +3 31287 35519 33785 +3 31288 32121 33110 +3 31288 33110 32281 +3 31289 32282 33111 +3 31289 33111 32122 +3 31290 31736 31998 +3 31290 31998 31560 +3 31291 31561 31999 +3 31291 31999 31737 +3 31292 31530 32255 +3 31292 32255 32010 +3 31293 32011 32256 +3 31293 32256 31531 +3 31294 31947 32861 +3 31294 32861 32198 +3 31295 32199 32862 +3 31295 32862 31948 +3 31296 33313 33771 +3 31296 33771 31761 +3 31297 31762 33772 +3 31297 33772 33314 +3 31298 32996 33548 +3 31298 33548 31937 +3 31299 31938 33549 +3 31299 33549 32997 +3 31300 31866 31951 +3 31300 31951 31418 +3 31301 31419 31952 +3 31301 31952 31867 +3 31302 32582 32875 +3 31302 32875 31607 +3 31303 31608 32876 +3 31303 32876 32583 +3 31304 31994 34044 +3 31304 34044 33424 +3 31305 33425 34045 +3 31305 34045 31995 +3 31306 31664 32152 +3 31306 32152 31965 +3 31307 31966 32153 +3 31307 32153 31665 +3 31308 31589 31676 +3 31308 31676 31408 +3 31309 31409 31677 +3 31309 31677 31590 +3 31310 32032 32621 +3 31310 32621 31885 +3 31311 31886 32622 +3 31311 32622 32033 +3 31312 32672 35250 +3 31312 35250 32671 +3 31313 31412 31650 +3 31313 31650 31558 +3 31314 31559 31651 +3 31314 31651 31413 +3 31315 31700 33564 +3 31315 33564 33175 +3 31316 33176 33565 +3 31316 33565 31701 +3 31317 32123 32409 +3 31317 32409 31797 +3 31318 31798 32410 +3 31318 32410 32124 +3 31319 31418 31883 +3 31319 31883 31753 +3 31320 31754 31884 +3 31320 31884 31419 +3 31321 34026 34766 +3 31321 34766 32405 +3 31322 32406 34767 +3 31322 34767 34027 +3 31323 31406 31686 +3 31323 31686 31610 +3 31324 31611 31687 +3 31324 31687 31407 +3 31325 34637 35683 +3 31325 35683 32677 +3 31326 32678 35684 +3 31326 35684 34638 +3 31327 31726 32324 +3 31327 32324 31913 +3 31328 31914 32325 +3 31328 32325 31727 +3 31329 31393 31662 +3 31329 31662 31601 +3 31330 31602 31663 +3 31330 31663 31394 +3 31331 31485 31706 +3 31331 31706 31581 +3 31332 31582 31707 +3 31332 31707 31486 +3 31333 32066 33872 +3 31333 33872 33108 +3 31334 33109 33873 +3 31334 33873 32067 +3 31335 31809 31935 +3 31335 31935 31478 +3 31336 31479 31936 +3 31336 31936 31810 +3 31337 32708 33964 +3 31337 33964 32661 +3 31338 32662 33965 +3 31338 33965 32709 +3 31339 32221 32605 +3 31339 32605 31708 +3 31340 31709 32606 +3 31340 32606 32222 +3 31341 33428 35178 +3 31341 35178 33542 +3 31342 33543 35179 +3 31342 35179 33429 +3 31343 32688 33970 +3 31343 33970 32708 +3 31344 32709 33971 +3 31344 33971 32689 +3 31345 31933 31985 +3 31345 31985 31389 +3 31346 31390 31986 +3 31346 31986 31934 +3 31347 33462 35470 +3 31347 35470 33741 +3 31348 33742 35471 +3 31348 35471 33463 +3 31349 31714 31975 +3 31349 31975 31599 +3 31350 31600 31976 +3 31350 31976 31715 +3 31351 31495 31734 +3 31351 31734 31614 +3 31352 31615 31735 +3 31352 31735 31496 +3 31353 31943 32647 +3 31353 32647 32056 +3 31354 32057 32648 +3 31354 32648 31944 +3 31355 32516 35115 +3 31355 35115 34170 +3 31356 34171 35116 +3 31356 35116 32517 +3 31357 31399 32539 +3 31357 32539 32427 +3 31358 32428 32540 +3 31358 32540 31400 +3 31359 32184 32580 +3 31359 32580 31742 +3 31360 31743 32581 +3 31360 32581 32185 +3 31361 31803 31963 +3 31361 31963 31546 +3 31362 31547 31964 +3 31362 31964 31804 +3 31363 33990 34621 +3 31363 34621 32125 +3 31364 32126 34622 +3 31364 34622 33991 +3 31365 34024 35820 +3 31365 35820 33539 +3 31366 33540 35821 +3 31366 35821 34025 +3 31367 32342 32518 +3 31367 32518 31566 +3 31368 31567 32519 +3 31368 32519 32343 +3 31369 31438 32127 +3 31369 32127 32072 +3 31370 32073 32128 +3 31370 32128 31439 +3 31371 32178 33157 +3 31371 33157 32344 +3 31372 32345 33158 +3 31372 33158 32179 +3 31373 32930 34195 +3 31373 34195 32773 +3 31374 32774 34196 +3 31374 34196 32931 +3 31375 32115 33710 +3 31375 33710 32970 +3 31376 32971 33711 +3 31376 33711 32116 +3 31377 31581 31775 +3 31377 31775 31597 +3 31378 31598 31776 +3 31378 31776 31582 +3 31379 33430 35350 +3 31379 35350 33368 +3 31380 33369 35351 +3 31380 35351 33431 +3 31381 31422 32893 +3 31381 32893 32827 +3 31382 32828 32894 +3 31382 32894 31423 +3 31383 32249 32946 +3 31383 32946 32082 +3 31384 32083 32947 +3 31384 32947 32250 +3 31385 31949 32382 +3 31385 32382 31832 +3 31386 31833 32383 +3 31386 32383 31950 +3 31387 31558 31730 +3 31387 31730 31587 +3 31388 31588 31731 +3 31388 31731 31559 +3 31389 31985 32014 +3 31389 32014 31403 +3 31390 31403 32015 +3 31390 32015 31986 +3 31391 31587 31722 +3 31391 31722 31557 +3 31392 31557 31723 +3 31392 31723 31588 +3 31393 31444 31718 +3 31393 31718 31662 +3 31394 31663 31719 +3 31394 31719 31445 +3 31395 32696 33715 +3 31395 33715 32431 +3 31396 32432 33716 +3 31396 33716 32697 +3 31397 31416 33648 +3 31397 33648 33585 +3 31398 33586 33649 +3 31398 33649 31416 +3 31399 31417 32565 +3 31399 32565 32539 +3 31400 32540 32566 +3 31400 32566 31417 +3 31401 32008 32170 +3 31402 32171 32009 +3 31403 32014 32015 +3 31404 31941 32062 +3 31404 32062 31591 +3 31405 31592 32063 +3 31405 32063 31942 +3 31406 31463 31759 +3 31406 31759 31686 +3 31407 31687 31760 +3 31407 31760 31464 +3 31408 31676 31799 +3 31408 31799 31493 +3 31409 31494 31800 +3 31409 31800 31677 +3 31410 31818 32034 +3 31410 32034 31624 +3 31411 31625 32035 +3 31411 32035 31819 +3 31412 31497 31728 +3 31412 31728 31650 +3 31413 31651 31729 +3 31413 31729 31498 +3 31414 32096 32712 +3 31414 32712 32032 +3 31415 32033 32713 +3 31415 32713 32097 +3 31416 33649 33648 +3 31417 32566 32565 +3 31418 31951 31883 +3 31419 31884 31952 +3 31420 32378 33202 +3 31420 33202 32233 +3 31421 32234 33203 +3 31421 33203 32379 +3 31422 31423 32914 +3 31422 32914 32893 +3 31423 32894 32914 +3 31424 32271 34074 +3 31424 34074 33333 +3 31425 33334 34075 +3 31425 34075 32272 +3 31426 31620 32018 +3 31426 32018 31826 +3 31427 31827 32019 +3 31427 32019 31621 +3 31428 32056 32710 +3 31428 32710 32096 +3 31429 32097 32711 +3 31429 32711 32057 +3 31430 31840 32133 +3 31430 32133 31736 +3 31431 31737 32134 +3 31431 32134 31841 +3 31432 31652 31820 +3 31432 31820 31589 +3 31433 31590 31821 +3 31433 31821 31653 +3 31434 32484 33686 +3 31434 33686 32641 +3 31435 32642 33687 +3 31435 33687 32485 +3 31436 32360 32623 +3 31436 32623 31688 +3 31437 31689 32624 +3 31437 32624 32361 +3 31438 31458 32186 +3 31438 32186 32127 +3 31439 32128 32187 +3 31439 32187 31458 +3 31440 32732 35689 +3 31440 35689 34608 +3 31441 34609 35690 +3 31441 35690 32733 +3 31442 32380 32657 +3 31442 32657 31684 +3 31443 31685 32658 +3 31443 32658 32381 +3 31444 31597 31764 +3 31444 31764 31718 +3 31445 31719 31765 +3 31445 31765 31598 +3 31446 32520 34887 +3 31446 34887 33954 +3 31447 33955 34888 +3 31447 34888 32521 +3 31448 32281 33228 +3 31448 33228 32378 +3 31449 32379 33229 +3 31449 33229 32282 +3 31450 31614 31828 +3 31450 31828 31652 +3 31451 31653 31829 +3 31451 31829 31615 +3 31452 31872 32807 +3 31452 32807 32413 +3 31453 32414 32808 +3 31453 32808 31873 +3 31454 33774 34306 +3 31454 34306 32101 +3 31455 32102 34307 +3 31455 34307 33775 +3 31456 33528 35151 +3 31456 35151 34589 +3 31457 34590 35152 +3 31457 35152 33529 +3 31458 32187 32186 +3 31459 32443 34828 +3 31459 34828 34008 +3 31460 34009 34829 +3 31460 34829 32444 +3 31461 31744 32403 +3 31461 32403 32107 +3 31462 32108 32404 +3 31462 32404 31745 +3 31463 31476 31807 +3 31463 31807 31759 +3 31464 31760 31808 +3 31464 31808 31476 +3 31465 31801 32311 +3 31465 32311 31802 +3 31466 33381 34615 +3 31466 34615 32930 +3 31467 32931 34616 +3 31467 34616 33382 +3 31468 33741 35673 +3 31468 35673 33830 +3 31469 33831 35674 +3 31469 35674 33742 +3 31470 33788 34677 +3 31470 34677 32551 +3 31471 32552 34678 +3 31471 34678 33788 +3 31472 34098 34937 +3 31472 34937 32512 +3 31473 32513 34938 +3 31473 34938 34099 +3 31474 32537 33763 +3 31474 33763 32714 +3 31475 32715 33764 +3 31475 33764 32538 +3 31476 31808 31807 +3 31477 32198 33037 +3 31477 33037 32309 +3 31478 31935 32064 +3 31478 32064 31714 +3 31479 31715 32065 +3 31479 32065 31936 +3 31480 32310 33038 +3 31480 33038 32199 +3 31481 31767 32307 +3 31481 32307 31990 +3 31482 31991 32308 +3 31482 32308 31768 +3 31483 33816 34573 +3 31483 34573 32376 +3 31484 32377 34574 +3 31484 34574 33817 +3 31485 31610 31864 +3 31485 31864 31706 +3 31486 31707 31865 +3 31486 31865 31611 +3 31487 31850 32154 +3 31487 32154 31860 +3 31488 31861 32155 +3 31488 32155 31851 +3 31489 33650 34360 +3 31489 34360 32336 +3 31490 32337 34361 +3 31490 34361 33651 +3 31491 32889 34428 +3 31491 34428 33191 +3 31492 33194 34429 +3 31492 34429 32890 +3 31493 31799 31848 +3 31493 31848 31548 +3 31494 31549 31849 +3 31494 31849 31800 +3 31495 31601 31862 +3 31495 31862 31734 +3 31496 31735 31863 +3 31496 31863 31602 +3 31497 31550 31805 +3 31497 31805 31728 +3 31498 31729 31806 +3 31498 31806 31551 +3 31499 31826 32168 +3 31499 32168 31850 +3 31500 31851 32169 +3 31500 32169 31827 +3 31501 31913 32490 +3 31501 32490 32050 +3 31502 32051 32491 +3 31502 32491 31914 +3 31503 31672 32425 +3 31503 32425 32217 +3 31504 32218 32426 +3 31504 32426 31673 +3 31505 31860 32176 +3 31505 32176 31818 +3 31506 31819 32177 +3 31506 32177 31861 +3 31507 31900 32584 +3 31507 32584 31899 +3 31508 31973 32899 +3 31508 32899 32402 +3 31509 32402 32900 +3 31509 32900 31974 +3 31510 31793 32942 +3 31510 32942 32645 +3 31511 32646 32943 +3 31511 32943 31794 +3 31512 32679 33114 +3 31512 33114 31945 +3 31513 31946 33115 +3 31513 33115 32680 +3 31514 31763 32356 +3 31514 32356 32090 +3 31515 32091 32357 +3 31515 32357 31766 +3 31516 32344 33599 +3 31516 33599 32750 +3 31517 32751 33600 +3 31517 33600 32345 +3 31518 32291 32637 +3 31518 32637 31858 +3 31519 31859 32638 +3 31519 32638 32292 +3 31520 32044 32496 +3 31520 32496 31949 +3 31521 31950 32497 +3 31521 32497 32045 +3 31522 33373 33996 +3 31522 33996 32227 +3 31523 32228 33997 +3 31523 33997 33374 +3 31524 32372 32480 +3 31524 32480 31618 +3 31525 31619 32481 +3 31525 32481 32373 +3 31526 32318 33061 +3 31526 33061 32249 +3 31527 32250 33062 +3 31527 33062 32319 +3 31528 34695 35535 +3 31528 35535 32549 +3 31529 32550 35536 +3 31529 35536 34696 +3 31530 31678 32447 +3 31530 32447 32255 +3 31531 32256 32448 +3 31531 32448 31679 +3 31532 32958 34492 +3 31532 34492 33236 +3 31533 33237 34493 +3 31533 34493 32959 +3 31534 32769 35945 +3 31534 35945 34901 +3 31535 34902 35946 +3 31535 35946 32770 +3 31536 33542 35206 +3 31536 35206 33528 +3 31537 33529 35207 +3 31537 35207 33543 +3 31538 32441 35212 +3 31538 35212 34473 +3 31539 34474 35213 +3 31539 35213 32442 +3 31540 32841 33246 +3 31540 33246 31895 +3 31541 31896 33247 +3 31541 33247 32842 +3 31542 34070 34667 +3 31542 34667 32273 +3 31543 32274 34668 +3 31543 34668 34071 +3 31544 32384 33059 +3 31544 33059 31887 +3 31545 31888 33060 +3 31545 33060 32385 +3 31546 31963 32105 +3 31546 32105 31656 +3 31547 31657 32106 +3 31547 32106 31964 +3 31548 31848 31879 +3 31548 31879 31564 +3 31549 31565 31880 +3 31549 31880 31849 +3 31550 31564 31877 +3 31550 31877 31805 +3 31551 31806 31878 +3 31551 31878 31565 +3 31552 33191 34452 +3 31552 34452 32976 +3 31553 32977 34453 +3 31553 34453 33194 +3 31554 33767 35909 +3 31554 35909 34090 +3 31555 34091 35910 +3 31555 35910 33768 +3 31556 32275 33773 +3 31556 33773 32276 +3 31557 31722 31874 +3 31557 31874 31723 +3 31558 31650 31870 +3 31558 31870 31730 +3 31559 31731 31871 +3 31559 31871 31651 +3 31560 31998 32247 +3 31560 32247 31755 +3 31561 31756 32248 +3 31561 32248 31999 +3 31562 32851 33238 +3 31562 33238 31909 +3 31563 31910 33239 +3 31563 33239 32852 +3 31564 31879 31877 +3 31565 31878 31880 +3 31566 32518 32303 +3 31567 32304 32519 +3 31568 32287 33933 +3 31568 33933 33478 +3 31569 33479 33934 +3 31569 33934 32288 +3 31570 32641 34092 +3 31570 34092 33019 +3 31571 33020 34093 +3 31571 34093 32642 +3 31572 33566 34191 +3 31572 34191 32283 +3 31573 32284 34192 +3 31573 34192 33567 +3 31574 32968 35645 +3 31574 35645 32969 +3 31575 32974 36044 +3 31575 36044 34967 +3 31576 34968 36045 +3 31576 36045 32975 +3 31577 33244 33844 +3 31577 33844 32219 +3 31578 32220 33845 +3 31578 33845 33245 +3 31579 33802 34705 +3 31579 34705 32653 +3 31580 32654 34706 +3 31580 34706 33803 +3 31581 31706 31927 +3 31581 31927 31775 +3 31582 31776 31928 +3 31582 31928 31707 +3 31583 32038 32526 +3 31583 32526 32044 +3 31584 32045 32527 +3 31584 32527 32039 +3 31585 32050 32535 +3 31585 32535 32038 +3 31586 32039 32536 +3 31586 32536 32051 +3 31587 31730 31903 +3 31587 31903 31722 +3 31588 31723 31904 +3 31588 31904 31731 +3 31589 31820 31931 +3 31589 31931 31676 +3 31590 31677 31932 +3 31590 31932 31821 +3 31591 32062 32231 +3 31591 32231 31724 +3 31592 31725 32232 +3 31592 32232 32063 +3 31593 33537 34060 +3 31593 34060 32200 +3 31594 32201 34061 +3 31594 34061 33538 +3 31595 31923 33391 +3 31595 33391 33010 +3 31596 33011 33392 +3 31596 33392 31924 +3 31597 31775 31961 +3 31597 31961 31764 +3 31598 31765 31962 +3 31598 31962 31776 +3 31599 31975 32190 +3 31599 32190 31803 +3 31600 31804 32191 +3 31600 32191 31976 +3 31601 31662 31929 +3 31601 31929 31862 +3 31602 31863 31930 +3 31602 31930 31663 +3 31603 33856 35557 +3 31603 35557 33767 +3 31604 33768 35558 +3 31604 35558 33857 +3 31605 32002 33101 +3 31605 33101 32673 +3 31606 32674 33102 +3 31606 33102 32003 +3 31607 32875 33137 +3 31607 33137 31856 +3 31608 31857 33138 +3 31608 33138 32876 +3 31609 31841 32204 +3 31609 32204 31840 +3 31610 31686 31953 +3 31610 31953 31864 +3 31611 31865 31954 +3 31611 31954 31687 +3 31612 33033 33684 +3 31612 33684 32213 +3 31613 32214 33685 +3 31613 33685 33034 +3 31614 31734 31967 +3 31614 31967 31828 +3 31615 31829 31968 +3 31615 31968 31735 +3 31616 33830 36218 +3 31616 36218 34323 +3 31617 34324 36219 +3 31617 36219 33831 +3 31618 32480 32561 +3 31618 32561 31636 +3 31619 31637 32562 +3 31619 32562 32481 +3 31620 31753 32196 +3 31620 32196 32018 +3 31621 32019 32197 +3 31621 32197 31754 +3 31622 32309 33105 +3 31622 33105 32318 +3 31623 32319 33106 +3 31623 33106 32310 +3 31624 32034 32237 +3 31624 32237 31809 +3 31625 31810 32238 +3 31625 32238 32035 +3 31626 32205 33173 +3 31626 33173 32571 +3 31627 32572 33174 +3 31627 33174 32206 +3 31628 32760 35202 +3 31628 35202 34422 +3 31629 34423 35203 +3 31629 35203 32761 +3 31630 32030 33051 +3 31630 33051 32643 +3 31631 32644 33052 +3 31631 33052 32031 +3 31632 32137 33496 +3 31632 33496 32952 +3 31633 32953 33497 +3 31633 33497 32138 +3 31634 32174 33676 +3 31634 33676 33124 +3 31635 33125 33677 +3 31635 33677 32175 +3 31636 32561 32579 +3 31636 32579 31637 +3 31637 32579 32562 +3 31638 32714 33874 +3 31638 33874 32696 +3 31639 32697 33875 +3 31639 33875 32715 +3 31640 33151 34730 +3 31640 34730 33476 +3 31641 33477 34731 +3 31641 34731 33152 +3 31642 34543 35543 +3 31642 35543 32859 +3 31643 32860 35544 +3 31643 35544 34544 +3 31644 32423 32936 +3 31644 32936 32123 +3 31645 32124 32937 +3 31645 32937 32424 +3 31646 33727 35798 +3 31646 35798 33784 +3 31647 33785 35801 +3 31647 35801 33728 +3 31648 32879 33338 +3 31648 33338 32099 +3 31649 32100 33339 +3 31649 33339 32880 +3 31650 31728 31957 +3 31650 31957 31870 +3 31651 31871 31958 +3 31651 31958 31729 +3 31652 31828 32004 +3 31652 32004 31820 +3 31653 31821 32005 +3 31653 32005 31829 +3 31654 32460 34565 +3 31654 34565 33891 +3 31655 33892 34566 +3 31655 34566 32461 +3 31656 32105 32305 +3 31656 32305 31868 +3 31657 31869 32306 +3 31657 32306 32106 +3 31658 32486 35035 +3 31658 35035 34390 +3 31659 34391 35036 +3 31659 35036 32487 +3 31660 32006 33103 +3 31660 33103 32694 +3 31661 32695 33104 +3 31661 33104 32007 +3 31662 31718 31988 +3 31662 31988 31929 +3 31663 31930 31989 +3 31663 31989 31719 +3 31664 31990 32508 +3 31664 32508 32152 +3 31665 32153 32509 +3 31665 32509 31991 +3 31666 33023 34038 +3 31666 34038 32253 +3 31667 32254 34039 +3 31667 34039 33024 +3 31668 33897 34519 +3 31668 34519 32429 +3 31669 32430 34520 +3 31669 34520 33898 +3 31670 32771 33516 +3 31670 33516 32384 +3 31671 32385 33517 +3 31671 33517 32772 +3 31672 31881 32612 +3 31672 32612 32425 +3 31673 32426 32613 +3 31673 32613 31882 +3 31674 32587 33454 +3 31674 33454 32543 +3 31675 32544 33455 +3 31675 33455 32588 +3 31676 31931 32040 +3 31676 32040 31799 +3 31677 31800 32041 +3 31677 32041 31932 +3 31678 31969 32607 +3 31678 32607 32447 +3 31679 32448 32608 +3 31679 32608 31970 +3 31680 34949 36070 +3 31680 36070 33047 +3 31681 33048 36071 +3 31681 36071 34950 +3 31682 32869 33757 +3 31682 33757 32587 +3 31683 32588 33758 +3 31683 33758 32870 +3 31684 32657 32871 +3 31684 32871 32052 +3 31685 32053 32872 +3 31685 32872 32658 +3 31686 31759 32016 +3 31686 32016 31953 +3 31687 31954 32017 +3 31687 32017 31760 +3 31688 32623 32863 +3 31688 32863 31925 +3 31689 31926 32864 +3 31689 32864 32624 +3 31690 32795 33325 +3 31690 33325 32211 +3 31691 32212 33326 +3 31691 33326 32796 +3 31692 33327 33749 +3 31692 33749 32156 +3 31693 32157 33750 +3 31693 33750 33328 +3 31694 32202 34262 +3 31694 34262 33838 +3 31695 33839 34263 +3 31695 34263 32203 +3 31696 34919 35516 +3 31696 35516 33832 +3 31697 33833 35517 +3 31697 35517 34920 +3 31698 33122 34448 +3 31698 34448 33196 +3 31699 33197 34449 +3 31699 34449 33123 +3 31700 32867 33878 +3 31700 33878 33564 +3 31701 33565 33879 +3 31701 33879 32868 +3 31702 32229 33258 +3 31702 33258 32736 +3 31703 32737 33259 +3 31703 33259 32230 +3 31704 32235 33950 +3 31704 33950 33504 +3 31705 33505 33951 +3 31705 33951 32236 +3 31706 31864 32076 +3 31706 32076 31927 +3 31707 31928 32077 +3 31707 32077 31865 +3 31708 32605 32966 +3 31708 32966 32084 +3 31709 32085 32967 +3 31709 32967 32606 +3 31710 33196 34456 +3 31710 34456 33151 +3 31711 33152 34457 +3 31711 34457 33197 +3 31712 33236 34663 +3 31712 34663 33387 +3 31713 33388 34664 +3 31713 34664 33237 +3 31714 32064 32320 +3 31714 32320 31975 +3 31715 31976 32321 +3 31715 32321 32065 +3 31716 34310 35316 +3 31716 35316 32865 +3 31717 32866 35317 +3 31717 35317 34311 +3 31718 31764 32042 +3 31718 32042 31988 +3 31719 31989 32043 +3 31719 32043 31765 +3 31720 33145 34199 +3 31720 34199 32877 +3 31721 32878 34200 +3 31721 34200 33146 +3 31722 31903 32054 +3 31722 32054 31874 +3 31723 31874 32055 +3 31723 32055 31904 +3 31724 32231 32348 +3 31724 32348 31866 +3 31725 31867 32349 +3 31725 32349 32232 +3 31726 31965 32569 +3 31726 32569 32324 +3 31727 32325 32570 +3 31727 32570 31966 +3 31728 31805 32012 +3 31728 32012 31957 +3 31729 31958 32013 +3 31729 32013 31806 +3 31730 31870 32048 +3 31730 32048 31903 +3 31731 31904 32049 +3 31731 32049 31871 +3 31732 33285 33988 +3 31732 33988 32498 +3 31733 32499 33989 +3 31733 33989 33286 +3 31734 31862 32088 +3 31734 32088 31967 +3 31735 31968 32089 +3 31735 32089 31863 +3 31736 32133 32435 +3 31736 32435 31998 +3 31737 31999 32436 +3 31737 32436 32134 +3 31738 32346 33978 +3 31738 33978 33442 +3 31739 33443 33979 +3 31739 33979 32347 +3 31740 33107 33747 +3 31740 33747 32368 +3 31741 32369 33748 +3 31741 33748 33107 +3 31742 32580 32948 +3 31742 32948 32086 +3 31743 32087 32949 +3 31743 32949 32581 +3 31744 31981 32667 +3 31744 32667 32403 +3 31745 32404 32668 +3 31745 32668 31982 +3 31746 32207 33682 +3 31746 33682 33240 +3 31747 33241 33683 +3 31747 33683 32208 +3 31748 33295 33887 +3 31748 33887 32374 +3 31749 32375 33888 +3 31749 33888 33296 +3 31750 32262 33299 +3 31750 33299 32261 +3 31751 32835 35897 +3 31751 35897 35017 +3 31752 35018 35898 +3 31752 35898 32836 +3 31753 31883 32314 +3 31753 32314 32196 +3 31754 32197 32315 +3 31754 32315 31884 +3 31755 32247 32439 +3 31755 32439 31941 +3 31756 31942 32440 +3 31756 32440 32248 +3 31757 32877 33917 +3 31757 33917 32867 +3 31758 32868 33918 +3 31758 33918 32878 +3 31759 31807 32078 +3 31759 32078 32016 +3 31760 32017 32079 +3 31760 32079 31808 +3 31761 33771 34129 +3 31761 34129 32188 +3 31762 32189 34130 +3 31762 34130 33772 +3 31763 32107 32740 +3 31763 32740 32356 +3 31764 31961 32042 +3 31765 32043 31962 +3 31766 32357 32741 +3 31766 32741 32108 +3 31767 32010 32593 +3 31767 32593 32307 +3 31768 32308 32594 +3 31768 32594 32011 +3 31769 32269 33913 +3 31769 33913 33480 +3 31770 33481 33914 +3 31770 33914 32270 +3 31771 32924 35099 +3 31771 35099 34155 +3 31772 34155 35100 +3 31772 35100 32925 +3 31773 32366 33631 +3 31773 33631 33008 +3 31774 33009 33632 +3 31774 33632 32367 +3 31775 31927 32117 +3 31775 32117 31961 +3 31776 31962 32118 +3 31776 32118 31928 +3 31777 32891 35376 +3 31777 35376 34486 +3 31778 34487 35377 +3 31778 35377 32892 +3 31779 33832 35607 +3 31779 35607 33856 +3 31780 33857 35608 +3 31780 35608 33833 +3 31781 34396 36325 +3 31781 36325 34052 +3 31782 34053 36326 +3 31782 36326 34397 +3 31783 32303 33021 +3 31783 33021 32502 +3 31784 32503 33022 +3 31784 33022 32304 +3 31785 33721 34438 +3 31785 34438 32577 +3 31786 32578 34439 +3 31786 34439 33722 +3 31787 34054 34111 +3 31787 34111 31811 +3 31788 31811 34112 +3 31788 34112 34055 +3 31789 34802 35625 +3 31789 35625 32730 +3 31790 32731 35626 +3 31790 35626 34803 +3 31791 34430 35294 +3 31791 35294 32823 +3 31792 32824 35295 +3 31792 35295 34431 +3 31793 32028 33192 +3 31793 33192 32942 +3 31794 32943 33193 +3 31794 33193 32029 +3 31795 32312 33708 +3 31795 33708 33169 +3 31796 33170 33709 +3 31796 33709 32313 +3 31797 32409 32845 +3 31797 32845 32221 +3 31798 32222 32846 +3 31798 32846 32410 +3 31799 32040 32113 +3 31799 32113 31848 +3 31800 31849 32114 +3 31800 32114 32041 +3 31801 32090 32633 +3 31801 32633 32311 +3 31802 32311 32634 +3 31802 32634 32091 +3 31803 32190 32354 +3 31803 32354 31963 +3 31804 31964 32355 +3 31804 32355 32191 +3 31805 31877 32111 +3 31805 32111 32012 +3 31806 32013 32112 +3 31806 32112 31878 +3 31807 31808 32098 +3 31807 32098 32078 +3 31808 32079 32098 +3 31809 32237 32398 +3 31809 32398 31935 +3 31810 31936 32399 +3 31810 32399 32238 +3 31811 34111 34112 +3 31812 32492 34166 +3 31812 34166 33646 +3 31813 33647 34167 +3 31813 34167 32493 +3 31814 32494 34770 +3 31814 34770 34193 +3 31815 34194 34771 +3 31815 34771 32495 +3 31816 33804 34555 +3 31816 34555 32702 +3 31817 32703 34556 +3 31817 34556 33805 +3 31818 32176 32421 +3 31818 32421 32034 +3 31819 32035 32422 +3 31819 32422 32177 +3 31820 32004 32135 +3 31820 32135 31931 +3 31821 31932 32136 +3 31821 32136 32005 +3 31822 33387 35101 +3 31822 35101 33812 +3 31823 33813 35102 +3 31823 35102 33388 +3 31824 33370 33937 +3 31824 33937 32340 +3 31825 32341 33938 +3 31825 33938 33371 +3 31826 32018 32396 +3 31826 32396 32168 +3 31827 32169 32397 +3 31827 32397 32019 +3 31828 31967 32147 +3 31828 32147 32004 +3 31829 32005 32148 +3 31829 32148 31968 +3 31830 32750 33870 +3 31830 33870 32978 +3 31831 32981 33871 +3 31831 33871 32751 +3 31832 32382 32603 +3 31832 32603 32008 +3 31833 32009 32604 +3 31833 32604 32383 +3 31834 32789 35043 +3 31834 35043 34252 +3 31835 34253 35044 +3 31835 35044 32790 +3 31836 33554 34246 +3 31836 34246 32629 +3 31837 32630 34247 +3 31837 34247 33555 +3 31838 32625 35091 +3 31838 35091 34454 +3 31839 34455 35092 +3 31839 35092 32626 +3 31840 32204 32522 +3 31840 32522 32133 +3 31841 32134 32523 +3 31841 32523 32204 +3 31842 32748 34820 +3 31842 34820 34076 +3 31843 34077 34821 +3 31843 34821 32749 +3 31844 34052 35919 +3 31844 35919 34153 +3 31845 34154 35920 +3 31845 35920 34053 +3 31846 32724 33379 +3 31846 33379 32458 +3 31847 32459 33380 +3 31847 33380 32725 +3 31848 32113 32150 +3 31848 32150 31879 +3 31849 31880 32151 +3 31849 32151 32114 +3 31850 32168 32504 +3 31850 32504 32154 +3 31851 32155 32505 +3 31851 32505 32169 +3 31852 33662 34927 +3 31852 34927 33397 +3 31853 33398 34928 +3 31853 34928 33663 +3 31854 33093 33613 +3 31854 33613 32358 +3 31855 32359 33614 +3 31855 33614 33094 +3 31856 33137 33383 +3 31856 33383 32649 +3 31857 32650 33384 +3 31857 33384 33138 +3 31858 32637 32964 +3 31858 32964 32184 +3 31859 32185 32965 +3 31859 32965 32638 +3 31860 32154 32510 +3 31860 32510 32176 +3 31861 32177 32511 +3 31861 32511 32155 +3 31862 31929 32182 +3 31862 32182 32088 +3 31863 32089 32183 +3 31863 32183 31930 +3 31864 31953 32192 +3 31864 32192 32076 +3 31865 32077 32193 +3 31865 32193 31954 +3 31866 32348 32454 +3 31866 32454 31951 +3 31867 31952 32455 +3 31867 32455 32349 +3 31868 32305 32476 +3 31868 32476 31933 +3 31869 31934 32477 +3 31869 32477 32306 +3 31870 31957 32143 +3 31870 32143 32048 +3 31871 32049 32144 +3 31871 32144 31958 +3 31872 32251 33232 +3 31872 33232 32807 +3 31873 32808 33233 +3 31873 33233 32252 +3 31874 32054 32149 +3 31874 32149 32055 +3 31875 33697 34925 +3 31875 34925 33381 +3 31876 33382 34926 +3 31876 34926 33698 +3 31877 31879 32164 +3 31877 32164 32111 +3 31878 32112 32165 +3 31878 32165 31880 +3 31879 32150 32164 +3 31880 32165 32151 +3 31881 32026 32758 +3 31881 32758 32612 +3 31882 32613 32759 +3 31882 32759 32027 +3 31883 31951 32415 +3 31883 32415 32314 +3 31884 32315 32416 +3 31884 32416 31952 +3 31885 32621 33143 +3 31885 33143 32423 +3 31886 32424 33144 +3 31886 33144 32622 +3 31887 33059 33695 +3 31887 33695 32506 +3 31888 32507 33696 +3 31888 33696 33060 +3 31889 32541 33895 +3 31889 33895 33291 +3 31890 33292 33896 +3 31890 33896 32542 +3 31891 32649 33688 +3 31891 33688 32940 +3 31892 32941 33689 +3 31892 33689 32650 +3 31893 33206 34215 +3 31893 34215 33023 +3 31894 33024 34216 +3 31894 34216 33207 +3 31895 33246 33568 +3 31895 33568 32390 +3 31896 32391 33569 +3 31896 33569 33247 +3 31897 33019 34316 +3 31897 34316 33340 +3 31898 33341 34319 +3 31898 34319 33020 +3 31899 32584 32994 +3 31899 32994 32291 +3 31900 32292 32995 +3 31900 32995 32584 +3 31901 34782 35663 +3 31901 35663 33116 +3 31902 33117 35664 +3 31902 35664 34783 +3 31903 32048 32223 +3 31903 32223 32054 +3 31904 32055 32224 +3 31904 32224 32049 +3 31905 34090 36206 +3 31905 36206 34024 +3 31906 34025 36207 +3 31906 36207 34091 +3 31907 33218 35964 +3 31907 35964 34891 +3 31908 34892 35965 +3 31908 35965 33219 +3 31909 33238 33570 +3 31909 33570 32265 +3 31910 32266 33571 +3 31910 33571 33239 +3 31911 33476 34961 +3 31911 34961 33697 +3 31912 33698 34962 +3 31912 34962 33477 +3 31913 32324 32909 +3 31913 32909 32490 +3 31914 32491 32910 +3 31914 32910 32325 +3 31915 33081 35194 +3 31915 35194 34228 +3 31916 34229 35195 +3 31916 35195 33082 +3 31917 33017 33925 +3 31917 33925 32869 +3 31918 32870 33926 +3 31918 33926 33018 +3 31919 32692 34528 +3 31919 34528 33889 +3 31920 33890 34529 +3 31920 34529 32693 +3 31921 33013 33885 +3 31921 33885 32825 +3 31922 32826 33886 +3 31922 33886 33014 +3 31923 32263 33706 +3 31923 33706 33391 +3 31924 33392 33707 +3 31924 33707 32264 +3 31925 32863 33089 +3 31925 33089 32140 +3 31926 32141 33090 +3 31926 33090 32864 +3 31927 32076 32279 +3 31927 32279 32117 +3 31928 32118 32280 +3 31928 32280 32077 +3 31929 31988 32259 +3 31929 32259 32182 +3 31930 32183 32260 +3 31930 32260 31989 +3 31931 32135 32285 +3 31931 32285 32040 +3 31932 32041 32286 +3 31932 32286 32136 +3 31933 32476 32559 +3 31933 32559 31985 +3 31934 31986 32560 +3 31934 32560 32477 +3 31935 32398 32547 +3 31935 32547 32064 +3 31936 32065 32548 +3 31936 32548 32399 +3 31937 33548 33617 +3 31937 33617 31979 +3 31938 31980 33618 +3 31938 33618 33549 +3 31939 33389 36461 +3 31939 36461 35308 +3 31940 35309 36462 +3 31940 36462 33390 +3 31941 32439 32567 +3 31941 32567 32062 +3 31942 32063 32568 +3 31942 32568 32440 +3 31943 32502 33200 +3 31943 33200 32647 +3 31944 32648 33201 +3 31944 33201 32503 +3 31945 33114 33643 +3 31945 33643 32449 +3 31946 32450 33644 +3 31946 33644 33115 +3 31947 32571 33512 +3 31947 33512 32861 +3 31948 32862 33513 +3 31948 33513 32572 +3 31949 32496 32932 +3 31949 32932 32382 +3 31950 32383 32933 +3 31950 32933 32497 +3 31951 32454 32415 +3 31952 32416 32455 +3 31953 32016 32277 +3 31953 32277 32192 +3 31954 32193 32278 +3 31954 32278 32017 +3 31955 34143 35893 +3 31955 35893 35279 +3 31956 35280 35894 +3 31956 35894 34144 +3 31957 32012 32241 +3 31957 32241 32143 +3 31958 32144 32242 +3 31958 32242 32013 +3 31959 34762 35468 +3 31959 35468 32829 +3 31960 32830 35469 +3 31960 35469 34763 +3 31961 32117 32239 +3 31961 32239 32042 +3 31962 32043 32240 +3 31962 32240 32118 +3 31963 32354 32514 +3 31963 32514 32105 +3 31964 32106 32515 +3 31964 32515 32355 +3 31965 32152 32785 +3 31965 32785 32569 +3 31966 32570 32786 +3 31966 32786 32153 +3 31967 32088 32297 +3 31967 32297 32147 +3 31968 32148 32298 +3 31968 32298 32089 +3 31969 32072 32718 +3 31969 32718 32607 +3 31970 32608 32719 +3 31970 32719 32073 +3 31971 32756 34720 +3 31971 34720 34082 +3 31972 34083 34721 +3 31972 34721 32757 +3 31973 32413 33352 +3 31973 33352 32899 +3 31974 32900 33353 +3 31974 33353 32414 +3 31975 32320 32557 +3 31975 32557 32190 +3 31976 32191 32558 +3 31976 32558 32321 +3 31977 33366 34370 +3 31977 34370 33145 +3 31978 33146 34371 +3 31978 34371 33367 +3 31979 33617 33642 +3 31979 33642 31980 +3 31980 33642 33618 +3 31981 32217 32906 +3 31981 32906 32667 +3 31982 32668 32907 +3 31982 32907 32218 +3 31983 33903 35230 +3 31983 35230 33621 +3 31984 33622 35231 +3 31984 35231 33904 +3 31985 32559 32601 +3 31985 32601 32014 +3 31986 32015 32602 +3 31986 32602 32560 +3 31987 32792 34320 +3 31987 34320 32791 +3 31988 32042 32301 +3 31988 32301 32259 +3 31989 32260 32302 +3 31989 32302 32043 +3 31990 32307 32813 +3 31990 32813 32508 +3 31991 32509 32814 +3 31991 32814 32308 +3 31992 33226 35748 +3 31992 35748 34675 +3 31993 34676 35749 +3 31993 35749 33227 +3 31994 32665 34593 +3 31994 34593 34044 +3 31995 34045 34594 +3 31995 34594 32666 +3 31996 34036 34509 +3 31996 34509 32797 +3 31997 32798 34510 +3 31997 34510 34037 +3 31998 32435 32682 +3 31998 32682 32247 +3 31999 32248 32683 +3 31999 32683 32436 +3 32000 33629 34679 +3 32000 34679 33206 +3 32001 33207 34680 +3 32001 34680 33630 +3 32002 32338 33468 +3 32002 33468 33101 +3 32003 33102 33469 +3 32003 33469 32339 +3 32004 32147 32322 +3 32004 32322 32135 +3 32005 32136 32323 +3 32005 32323 32148 +3 32006 32334 33440 +3 32006 33440 33103 +3 32007 33104 33441 +3 32007 33441 32335 +3 32008 32603 32767 +3 32008 32767 32170 +3 32009 32171 32768 +3 32009 32768 32604 +3 32010 32255 32833 +3 32010 32833 32593 +3 32011 32594 32834 +3 32011 32834 32256 +3 32012 32111 32328 +3 32012 32328 32241 +3 32013 32242 32329 +3 32013 32329 32112 +3 32014 32601 32620 +3 32014 32620 32015 +3 32015 32620 32602 +3 32016 32078 32316 +3 32016 32316 32277 +3 32017 32278 32317 +3 32017 32317 32079 +3 32018 32196 32597 +3 32018 32597 32396 +3 32019 32397 32598 +3 32019 32598 32197 +3 32020 34153 35975 +3 32020 35975 34143 +3 32021 34144 35976 +3 32021 35976 34154 +3 32022 33043 33798 +3 32022 33798 32771 +3 32023 32772 33799 +3 32023 33799 33044 +3 32024 33025 35997 +3 32024 35997 35167 +3 32025 35168 35998 +3 32025 35998 33026 +3 32026 32170 32915 +3 32026 32915 32758 +3 32027 32759 32916 +3 32027 32916 32171 +3 32028 32267 33422 +3 32028 33422 33192 +3 32029 33193 33423 +3 32029 33423 32268 +3 32030 32427 33452 +3 32030 33452 33051 +3 32031 33052 33453 +3 32031 33453 32428 +3 32032 32712 33315 +3 32032 33315 32621 +3 32033 32622 33316 +3 32033 33316 32713 +3 32034 32421 32635 +3 32034 32635 32237 +3 32035 32238 32636 +3 32035 32636 32422 +3 32036 32837 34999 +3 32036 34999 34330 +3 32037 34331 35000 +3 32037 35000 32838 +3 32038 32535 32990 +3 32038 32990 32526 +3 32039 32527 32991 +3 32039 32991 32536 +3 32040 32285 32362 +3 32040 32362 32113 +3 32041 32114 32363 +3 32041 32363 32286 +3 32042 32239 32301 +3 32043 32302 32240 +3 32044 32526 33000 +3 32044 33000 32496 +3 32045 32497 33001 +3 32045 33001 32527 +3 32046 34364 35087 +3 32046 35087 32928 +3 32047 32929 35088 +3 32047 35088 34365 +3 32048 32143 32326 +3 32048 32326 32223 +3 32049 32224 32327 +3 32049 32327 32144 +3 32050 32490 33002 +3 32050 33002 32535 +3 32051 32536 33003 +3 32051 33003 32491 +3 32052 32871 33212 +3 32052 33212 32372 +3 32053 32373 33213 +3 32053 33213 32872 +3 32054 32223 32330 +3 32054 32330 32149 +3 32055 32149 32331 +3 32055 32331 32224 +3 32056 32647 33311 +3 32056 33311 32710 +3 32057 32711 33312 +3 32057 33312 32648 +3 32058 32978 33992 +3 32058 33992 33149 +3 32059 33150 33993 +3 32059 33993 32981 +3 32060 33796 35127 +3 32060 35127 33662 +3 32061 33663 35128 +3 32061 35128 33797 +3 32062 32567 32690 +3 32062 32690 32231 +3 32063 32232 32691 +3 32063 32691 32568 +3 32064 32547 32631 +3 32064 32631 32320 +3 32065 32321 32632 +3 32065 32632 32548 +3 32066 32777 34475 +3 32066 34475 33872 +3 32067 33873 34476 +3 32067 34476 32778 +3 32068 33660 34909 +3 32068 34909 33591 +3 32069 33592 34910 +3 32069 34910 33661 +3 32070 34525 35525 +3 32070 35525 33283 +3 32071 33284 35526 +3 32071 35526 34525 +3 32072 32127 32811 +3 32072 32811 32718 +3 32073 32719 32812 +3 32073 32812 32128 +3 32074 33474 34280 +3 32074 34280 33013 +3 32075 33014 34281 +3 32075 34281 33475 +3 32076 32192 32388 +3 32076 32388 32279 +3 32077 32280 32389 +3 32077 32389 32193 +3 32078 32098 32352 +3 32078 32352 32316 +3 32079 32317 32353 +3 32079 32353 32098 +3 32080 34870 35840 +3 32080 35840 33256 +3 32081 33257 35841 +3 32081 35841 34871 +3 32082 32946 33597 +3 32082 33597 32724 +3 32083 32725 33598 +3 32083 33598 32947 +3 32084 32966 33281 +3 32084 33281 32380 +3 32085 32381 33282 +3 32085 33282 32967 +3 32086 32948 33254 +3 32086 33254 32360 +3 32087 32361 33255 +3 32087 33255 32949 +3 32088 32182 32394 +3 32088 32394 32297 +3 32089 32298 32395 +3 32089 32395 32183 +3 32090 32356 32934 +3 32090 32934 32633 +3 32091 32634 32935 +3 32091 32935 32357 +3 32092 33149 34012 +3 32092 34012 33017 +3 32093 33018 34013 +3 32093 34013 33150 +3 32094 33621 34913 +3 32094 34913 33660 +3 32095 33661 34914 +3 32095 34914 33622 +3 32096 32710 33300 +3 32096 33300 32712 +3 32097 32713 33301 +3 32097 33301 32711 +3 32098 32353 32352 +3 32099 33338 33464 +3 32099 33464 32131 +3 32100 32132 33465 +3 32100 33465 33339 +3 32101 34306 34760 +3 32101 34760 32627 +3 32102 32628 34761 +3 32102 34761 34307 +3 32103 33224 35784 +3 32103 35784 34843 +3 32104 34844 35785 +3 32104 35785 33225 +3 32105 32514 32722 +3 32105 32722 32305 +3 32106 32306 32723 +3 32106 32723 32515 +3 32107 32403 33053 +3 32107 33053 32740 +3 32108 32741 33054 +3 32108 33054 32404 +3 32109 32716 34569 +3 32109 34569 33574 +3 32110 33575 34570 +3 32110 34570 32717 +3 32111 32164 32400 +3 32111 32400 32328 +3 32112 32329 32401 +3 32112 32401 32165 +3 32113 32362 32411 +3 32113 32411 32150 +3 32114 32151 32412 +3 32114 32412 32363 +3 32115 32775 34276 +3 32115 34276 33710 +3 32116 33711 34277 +3 32116 34277 32776 +3 32117 32279 32392 +3 32117 32392 32239 +3 32118 32240 32393 +3 32118 32393 32280 +3 32119 34839 35512 +3 32119 35512 32972 +3 32120 32973 35513 +3 32120 35513 34840 +3 32121 32940 33876 +3 32121 33876 33110 +3 32122 33111 33877 +3 32122 33877 32941 +3 32123 32936 33204 +3 32123 33204 32409 +3 32124 32410 33205 +3 32124 33205 32937 +3 32125 34621 35228 +3 32125 35228 32897 +3 32126 32898 35229 +3 32126 35229 34622 +3 32127 32186 32881 +3 32127 32881 32811 +3 32128 32812 32882 +3 32128 32882 32187 +3 32129 32158 34551 +3 32129 34551 34499 +3 32130 34500 34552 +3 32130 34552 32158 +3 32131 33464 33500 +3 32131 33500 32159 +3 32132 32159 33501 +3 32132 33501 33465 +3 32133 32522 32819 +3 32133 32819 32435 +3 32134 32436 32820 +3 32134 32820 32523 +3 32135 32322 32464 +3 32135 32464 32285 +3 32136 32286 32465 +3 32136 32465 32323 +3 32137 32659 33929 +3 32137 33929 33496 +3 32138 33497 33930 +3 32138 33930 32660 +3 32139 33340 34503 +3 32139 34503 33366 +3 32140 33089 33289 +3 32140 33289 32342 +3 32141 32343 33290 +3 32141 33290 33090 +3 32142 33367 34504 +3 32142 34504 33341 +3 32143 32241 32417 +3 32143 32417 32326 +3 32144 32327 32418 +3 32144 32418 32242 +3 32145 34207 35605 +3 32145 35605 33796 +3 32146 33797 35606 +3 32146 35606 34208 +3 32147 32297 32468 +3 32147 32468 32322 +3 32148 32323 32469 +3 32148 32469 32298 +3 32149 32330 32433 +3 32149 32433 32331 +3 32150 32411 32445 +3 32150 32445 32164 +3 32151 32165 32446 +3 32151 32446 32412 +3 32152 32508 32979 +3 32152 32979 32785 +3 32153 32786 32980 +3 32153 32980 32509 +3 32154 32504 32799 +3 32154 32799 32510 +3 32155 32511 32800 +3 32155 32800 32505 +3 32156 33749 34080 +3 32156 34080 32555 +3 32157 32556 34081 +3 32157 34081 33750 +3 32158 34552 34551 +3 32159 33500 33501 +3 32160 33786 35364 +3 32160 35364 34028 +3 32161 34029 35365 +3 32161 35365 33787 +3 32162 34323 36565 +3 32162 36565 34396 +3 32163 34397 36568 +3 32163 36568 34324 +3 32164 32445 32400 +3 32165 32401 32446 +3 32166 34693 35533 +3 32166 35533 33220 +3 32167 33221 35534 +3 32167 35534 34694 +3 32168 32396 32752 +3 32168 32752 32504 +3 32169 32505 32753 +3 32169 32753 32397 +3 32170 32767 32915 +3 32171 32916 32768 +3 32172 33141 35031 +3 32172 35031 34233 +3 32173 34234 35032 +3 32173 35032 33142 +3 32174 32599 34040 +3 32174 34040 33676 +3 32175 33677 34041 +3 32175 34041 32600 +3 32176 32510 32763 +3 32176 32763 32421 +3 32177 32422 32764 +3 32177 32764 32511 +3 32178 32585 33883 +3 32178 33883 33157 +3 32179 33158 33884 +3 32179 33884 32586 +3 32180 34488 35292 +3 32180 35292 33161 +3 32181 33162 35293 +3 32181 35293 34489 +3 32182 32259 32472 +3 32182 32472 32394 +3 32183 32395 32473 +3 32183 32473 32260 +3 32184 32964 33393 +3 32184 33393 32580 +3 32185 32581 33394 +3 32185 33394 32965 +3 32186 32187 32905 +3 32186 32905 32881 +3 32187 32882 32905 +3 32188 34129 34442 +3 32188 34442 33456 +3 32189 33457 34443 +3 32189 34443 34130 +3 32190 32557 32746 +3 32190 32746 32354 +3 32191 32355 32747 +3 32191 32747 32558 +3 32192 32277 32478 +3 32192 32478 32388 +3 32193 32389 32479 +3 32193 32479 32278 +3 32194 35269 36373 +3 32194 36373 33546 +3 32195 33547 36374 +3 32195 36374 35270 +3 32196 32314 32738 +3 32196 32738 32597 +3 32197 32598 32739 +3 32197 32739 32315 +3 32198 32861 33735 +3 32198 33735 33037 +3 32199 33038 33736 +3 32199 33736 32862 +3 32200 34060 34523 +3 32200 34523 32754 +3 32201 32755 34524 +3 32201 34524 34061 +3 32202 32661 34655 +3 32202 34655 34262 +3 32203 34263 34656 +3 32203 34656 32662 +3 32204 32523 32762 +3 32204 32762 32522 +3 32205 32736 33492 +3 32205 33492 33173 +3 32206 33174 33493 +3 32206 33493 32737 +3 32207 32616 34030 +3 32207 34030 33682 +3 32208 33683 34031 +3 32208 34031 32617 +3 32209 33490 36066 +3 32209 36066 35182 +3 32210 35183 36067 +3 32210 36067 33491 +3 32211 33325 33769 +3 32211 33769 32679 +3 32212 32680 33770 +3 32212 33770 33326 +3 32213 33684 34180 +3 32213 34180 32793 +3 32214 32794 34181 +3 32214 34181 33685 +3 32215 33466 34790 +3 32215 34790 33753 +3 32216 33754 34791 +3 32216 34791 33467 +3 32217 32425 33112 +3 32217 33112 32906 +3 32218 32907 33113 +3 32218 33113 32426 +3 32219 33844 34348 +3 32219 34348 32821 +3 32220 32822 34349 +3 32220 34349 33845 +3 32221 32845 33264 +3 32221 33264 32605 +3 32222 32606 33265 +3 32222 33265 32846 +3 32223 32326 32466 +3 32223 32466 32330 +3 32224 32331 32467 +3 32224 32467 32327 +3 32225 33087 34991 +3 32225 34991 34197 +3 32226 34198 34992 +3 32226 34992 33088 +3 32227 33996 34577 +3 32227 34577 32901 +3 32228 32902 34578 +3 32228 34578 33997 +3 32229 32673 33719 +3 32229 33719 33258 +3 32230 33259 33720 +3 32230 33720 32674 +3 32231 32690 32815 +3 32231 32815 32348 +3 32232 32349 32816 +3 32232 32816 32691 +3 32233 33202 33974 +3 32233 33974 33043 +3 32234 33044 33975 +3 32234 33975 33203 +3 32235 32728 34350 +3 32235 34350 33950 +3 32236 33951 34351 +3 32236 34351 32729 +3 32237 32635 32817 +3 32237 32817 32398 +3 32238 32399 32818 +3 32238 32818 32636 +3 32239 32392 32474 +3 32239 32474 32301 +3 32240 32302 32475 +3 32240 32475 32393 +3 32241 32328 32524 +3 32241 32524 32417 +3 32242 32418 32525 +3 32242 32525 32329 +3 32243 33456 34496 +3 32243 34496 33466 +3 32244 33467 34497 +3 32244 34497 33457 +3 32245 33812 35442 +3 32245 35442 34113 +3 32246 34116 35443 +3 32246 35443 33813 +3 32247 32682 32903 +3 32247 32903 32439 +3 32248 32440 32904 +3 32248 32904 32683 +3 32249 33061 33759 +3 32249 33759 32946 +3 32250 32947 33760 +3 32250 33760 33062 +3 32251 32694 33691 +3 32251 33691 33232 +3 32252 33233 33692 +3 32252 33692 32695 +3 32253 34038 34494 +3 32253 34494 32781 +3 32254 32782 34495 +3 32254 34495 34039 +3 32255 32447 33027 +3 32255 33027 32833 +3 32256 32834 33028 +3 32256 33028 32448 +3 32257 33177 35887 +3 32257 35887 35157 +3 32258 35158 35888 +3 32258 35888 33178 +3 32259 32301 32532 +3 32259 32532 32472 +3 32260 32473 32533 +3 32260 32533 32302 +3 32261 33299 33822 +3 32261 33822 32795 +3 32262 32796 33823 +3 32262 33823 33299 +3 32263 32543 33948 +3 32263 33948 33706 +3 32264 33707 33949 +3 32264 33949 32544 +3 32265 33570 33862 +3 32265 33862 32582 +3 32266 32583 33863 +3 32266 33863 33571 +3 32267 32458 33623 +3 32267 33623 33422 +3 32268 33423 33624 +3 32268 33624 32459 +3 32269 33108 34641 +3 32269 34641 33913 +3 32270 33914 34642 +3 32270 34642 33109 +3 32271 33139 34784 +3 32271 34784 34074 +3 32272 34075 34785 +3 32272 34785 33140 +3 32273 34667 35711 +3 32273 35711 33526 +3 32274 33527 35712 +3 32274 35712 34668 +3 32275 32970 34342 +3 32275 34342 33773 +3 32276 33773 34343 +3 32276 34343 32971 +3 32277 32316 32553 +3 32277 32553 32478 +3 32278 32479 32554 +3 32278 32554 32317 +3 32279 32388 32530 +3 32279 32530 32392 +3 32280 32393 32531 +3 32280 32531 32389 +3 32281 33110 33986 +3 32281 33986 33228 +3 32282 33229 33987 +3 32282 33987 33111 +3 32283 34191 34754 +3 32283 34754 33029 +3 32284 33030 34755 +3 32284 34755 34192 +3 32285 32464 32573 +3 32285 32573 32362 +3 32286 32363 32574 +3 32286 32574 32465 +3 32287 32984 34517 +3 32287 34517 33933 +3 32288 33934 34518 +3 32288 34518 32985 +3 32289 33248 34149 +3 32289 34149 33287 +3 32290 33288 34150 +3 32290 34150 33249 +3 32291 32994 33364 +3 32291 33364 32637 +3 32292 32638 33365 +3 32292 33365 32995 +3 32293 35009 36148 +3 32293 36148 33550 +3 32294 33551 36149 +3 32294 36149 35010 +3 32295 33287 34440 +3 32295 34440 33595 +3 32296 33596 34441 +3 32296 34441 33288 +3 32297 32394 32591 +3 32297 32591 32468 +3 32298 32469 32592 +3 32298 32592 32395 +3 32299 34113 35482 +3 32299 35482 33903 +3 32300 33904 35483 +3 32300 35483 34116 +3 32301 32474 32532 +3 32302 32533 32475 +3 32303 32518 33275 +3 32303 33275 33021 +3 32304 33022 33276 +3 32304 33276 32519 +3 32305 32722 32938 +3 32305 32938 32476 +3 32306 32477 32939 +3 32306 32939 32723 +3 32307 32593 33118 +3 32307 33118 32813 +3 32308 32814 33119 +3 32308 33119 32594 +3 32309 33037 33818 +3 32309 33818 33105 +3 32310 33106 33819 +3 32310 33819 33038 +3 32311 32633 33132 +3 32311 33132 32634 +3 32312 32827 34127 +3 32312 34127 33708 +3 32313 33709 34128 +3 32313 34128 32828 +3 32314 32415 32853 +3 32314 32853 32738 +3 32315 32739 32854 +3 32315 32854 32416 +3 32316 32352 32595 +3 32316 32595 32553 +3 32317 32554 32596 +3 32317 32596 32353 +3 32318 33105 33808 +3 32318 33808 33061 +3 32319 33062 33809 +3 32319 33809 33106 +3 32320 32631 32885 +3 32320 32885 32557 +3 32321 32558 32886 +3 32321 32886 32632 +3 32322 32468 32618 +3 32322 32618 32464 +3 32323 32465 32619 +3 32323 32619 32469 +3 32324 32569 33155 +3 32324 33155 32909 +3 32325 32910 33156 +3 32325 33156 32570 +3 32326 32417 32575 +3 32326 32575 32466 +3 32327 32467 32576 +3 32327 32576 32418 +3 32328 32400 32610 +3 32328 32610 32524 +3 32329 32525 32611 +3 32329 32611 32401 +3 32330 32466 32589 +3 32330 32589 32433 +3 32331 32433 32590 +3 32331 32590 32467 +3 32332 33574 34764 +3 32332 34764 33755 +3 32333 33756 34765 +3 32333 34765 33575 +3 32334 32645 33737 +3 32334 33737 33440 +3 32335 33441 33738 +3 32335 33738 32646 +3 32336 34360 35045 +3 32336 35045 33165 +3 32337 33166 35046 +3 32337 35046 34361 +3 32338 32643 33765 +3 32338 33765 33468 +3 32339 33469 33766 +3 32339 33766 32644 +3 32340 33937 34356 +3 32340 34356 32847 +3 32341 32848 34357 +3 32341 34357 33938 +3 32342 33289 33472 +3 32342 33472 32518 +3 32343 32519 33473 +3 32343 33473 33290 +3 32344 33157 34288 +3 32344 34288 33599 +3 32345 33600 34289 +3 32345 34289 33158 +3 32346 32950 34585 +3 32346 34585 33978 +3 32347 33979 34586 +3 32347 34586 32951 +3 32348 32815 32944 +3 32348 32944 32454 +3 32349 32455 32945 +3 32349 32945 32816 +3 32350 34006 35752 +3 32350 35752 34312 +3 32351 34313 35753 +3 32351 35753 34007 +3 32352 32353 32609 +3 32352 32609 32595 +3 32353 32596 32609 +3 32354 32746 32911 +3 32354 32911 32514 +3 32355 32515 32912 +3 32355 32912 32747 +3 32356 32740 33323 +3 32356 33323 32934 +3 32357 32935 33324 +3 32357 33324 32741 +3 32358 33613 34032 +3 32358 34032 32841 +3 32359 32842 34033 +3 32359 34033 33614 +3 32360 33254 33518 +3 32360 33518 32623 +3 32361 32624 33519 +3 32361 33519 33255 +3 32362 32573 32651 +3 32362 32651 32411 +3 32363 32412 32652 +3 32363 32652 32574 +3 32364 33652 35947 +3 32364 35947 34884 +3 32365 34884 35948 +3 32365 35948 33653 +3 32366 32952 34119 +3 32366 34119 33631 +3 32367 33632 34120 +3 32367 34120 32953 +3 32368 33747 34308 +3 32368 34308 33033 +3 32369 33034 34309 +3 32369 34309 33748 +3 32370 33615 36276 +3 32370 36276 35251 +3 32371 35252 36277 +3 32371 36277 33616 +3 32372 33212 33354 +3 32372 33354 32480 +3 32373 32481 33355 +3 32373 33355 33213 +3 32374 33887 34386 +3 32374 34386 32996 +3 32375 32997 34387 +3 32375 34387 33888 +3 32376 34573 35257 +3 32376 35257 33250 +3 32377 33251 35258 +3 32377 35258 34574 +3 32378 33228 34046 +3 32378 34046 33202 +3 32379 33203 34047 +3 32379 34047 33229 +3 32380 33281 33552 +3 32380 33552 32657 +3 32381 32658 33553 +3 32381 33553 33282 +3 32382 32932 33147 +3 32382 33147 32603 +3 32383 32604 33148 +3 32383 33148 32933 +3 32384 33516 34102 +3 32384 34102 33059 +3 32385 33060 34103 +3 32385 34103 33517 +3 32386 33901 34903 +3 32386 34903 33629 +3 32387 33630 34904 +3 32387 34904 33902 +3 32388 32478 32655 +3 32388 32655 32530 +3 32389 32531 32656 +3 32389 32656 32479 +3 32390 33568 33982 +3 32390 33982 32879 +3 32391 32880 33983 +3 32391 33983 33569 +3 32392 32530 32639 +3 32392 32639 32474 +3 32393 32475 32640 +3 32393 32640 32531 +3 32394 32472 32684 +3 32394 32684 32591 +3 32395 32592 32685 +3 32395 32685 32473 +3 32396 32597 32962 +3 32396 32962 32752 +3 32397 32753 32963 +3 32397 32963 32598 +3 32398 32817 32986 +3 32398 32986 32547 +3 32399 32548 32987 +3 32399 32987 32818 +3 32400 32445 32663 +3 32400 32663 32610 +3 32401 32611 32664 +3 32401 32664 32446 +3 32402 32899 33703 +3 32402 33703 32900 +3 32403 32667 33358 +3 32403 33358 33053 +3 32404 33054 33359 +3 32404 33359 32668 +3 32405 34766 35488 +3 32405 35488 33266 +3 32406 33267 35489 +3 32406 35489 34767 +3 32407 34028 35584 +3 32407 35584 34172 +3 32408 34173 35585 +3 32408 35585 34029 +3 32409 33204 33450 +3 32409 33450 32845 +3 32410 32846 33451 +3 32410 33451 33205 +3 32411 32651 32686 +3 32411 32686 32445 +3 32412 32446 32687 +3 32412 32687 32652 +3 32413 32807 33751 +3 32413 33751 33352 +3 32414 33353 33752 +3 32414 33752 32808 +3 32415 32454 32922 +3 32415 32922 32853 +3 32416 32854 32923 +3 32416 32923 32455 +3 32417 32524 32698 +3 32417 32698 32575 +3 32418 32576 32699 +3 32418 32699 32525 +3 32419 35242 36239 +3 32419 36239 33593 +3 32420 33594 36240 +3 32420 36240 35243 +3 32421 32763 33006 +3 32421 33006 32635 +3 32422 32636 33007 +3 32422 33007 32764 +3 32423 33143 33656 +3 32423 33656 32936 +3 32424 32937 33657 +3 32424 33657 33144 +3 32425 32612 33317 +3 32425 33317 33112 +3 32426 33113 33318 +3 32426 33318 32613 +3 32427 32539 33572 +3 32427 33572 33452 +3 32428 33453 33573 +3 32428 33573 32540 +3 32429 34519 35107 +3 32429 35107 33133 +3 32430 33134 35108 +3 32430 35108 34520 +3 32431 33715 34583 +3 32431 34583 33474 +3 32432 33475 34584 +3 32432 34584 33716 +3 32433 32589 32681 +3 32433 32681 32590 +3 32434 33008 34108 +3 32434 34108 33009 +3 32435 32819 33083 +3 32435 33083 32682 +3 32436 32683 33084 +3 32436 33084 32820 +3 32437 33980 35382 +3 32437 35382 34056 +3 32438 34057 35383 +3 32438 35383 33981 +3 32439 32903 33045 +3 32439 33045 32567 +3 32440 32568 33046 +3 32440 33046 32904 +3 32441 33331 35935 +3 32441 35935 35212 +3 32442 35213 35936 +3 32442 35936 33332 +3 32443 33385 35615 +3 32443 35615 34828 +3 32444 34829 35616 +3 32444 35616 33386 +3 32445 32686 32663 +3 32446 32664 32687 +3 32447 32607 33234 +3 32447 33234 33027 +3 32448 33028 33235 +3 32448 33235 32608 +3 32449 33643 34034 +3 32449 34034 32851 +3 32450 32852 34035 +3 32450 34035 33644 +3 32451 34056 35394 +3 32451 35394 34006 +3 32452 34007 35395 +3 32452 35395 34057 +3 32453 33333 34869 +3 32453 34869 33334 +3 32454 32944 32922 +3 32455 32923 32945 +3 32456 33846 36750 +3 32456 36750 35671 +3 32457 35672 36751 +3 32457 36751 33847 +3 32458 33379 33623 +3 32459 33624 33380 +3 32460 33348 35071 +3 32460 35071 34565 +3 32461 34566 35072 +3 32461 35072 33349 +3 32462 33755 35246 +3 32462 35246 34135 +3 32463 34136 35247 +3 32463 35247 33756 +3 32464 32618 32742 +3 32464 32742 32573 +3 32465 32574 32743 +3 32465 32743 32619 +3 32466 32575 32704 +3 32466 32704 32589 +3 32467 32590 32705 +3 32467 32705 32576 +3 32468 32591 32744 +3 32468 32744 32618 +3 32469 32619 32745 +3 32469 32745 32592 +3 32470 33753 34969 +3 32470 34969 33931 +3 32471 33932 34970 +3 32471 34970 33754 +3 32472 32532 32726 +3 32472 32726 32684 +3 32473 32685 32727 +3 32473 32727 32533 +3 32474 32639 32700 +3 32474 32700 32532 +3 32475 32533 32701 +3 32475 32701 32640 +3 32476 32938 33075 +3 32476 33075 32559 +3 32477 32560 33076 +3 32477 33076 32939 +3 32478 32553 32720 +3 32478 32720 32655 +3 32479 32656 32721 +3 32479 32721 32554 +3 32480 33354 33432 +3 32480 33432 32561 +3 32481 32562 33433 +3 32481 33433 33355 +3 32482 35572 36493 +3 32482 36493 33800 +3 32483 33801 36494 +3 32483 36494 35573 +3 32484 33480 34513 +3 32484 34513 33686 +3 32485 33687 34514 +3 32485 34514 33481 +3 32486 33279 35717 +3 32486 35717 35035 +3 32487 35036 35718 +3 32487 35718 33280 +3 32488 34392 35830 +3 32488 35830 34133 +3 32489 34134 35831 +3 32489 35831 34393 +3 32490 32909 33418 +3 32490 33418 33002 +3 32491 33003 33419 +3 32491 33419 32910 +3 32492 32545 34213 +3 32492 34213 34166 +3 32493 34167 34214 +3 32493 34214 32546 +3 32494 33055 35255 +3 32494 35255 34770 +3 32495 34771 35256 +3 32495 35256 33056 +3 32496 33000 33426 +3 32496 33426 32932 +3 32497 32933 33427 +3 32497 33427 33001 +3 32498 33988 34611 +3 32498 34611 33244 +3 32499 33245 34612 +3 32499 34612 33989 +3 32500 34172 36078 +3 32500 36078 34617 +3 32501 34618 36079 +3 32501 36079 34173 +3 32502 33021 33725 +3 32502 33725 33200 +3 32503 33201 33726 +3 32503 33726 33022 +3 32504 32752 33069 +3 32504 33069 32799 +3 32505 32800 33070 +3 32505 33070 32753 +3 32506 33695 34176 +3 32506 34176 33093 +3 32507 33094 34177 +3 32507 34177 33696 +3 32508 32813 33304 +3 32508 33304 32979 +3 32509 32980 33305 +3 32509 33305 32814 +3 32510 32799 33085 +3 32510 33085 32763 +3 32511 32764 33086 +3 32511 33086 32800 +3 32512 34937 34997 +3 32512 34997 32534 +3 32513 32534 34998 +3 32513 34998 34938 +3 32514 32911 33126 +3 32514 33126 32722 +3 32515 32723 33127 +3 32515 33127 32912 +3 32516 33619 36015 +3 32516 36015 35115 +3 32517 35116 36016 +3 32517 36016 33620 +3 32518 33472 33275 +3 32519 33276 33473 +3 32520 33560 35780 +3 32520 35780 34887 +3 32521 34888 35781 +3 32521 35781 33561 +3 32522 32762 33079 +3 32522 33079 32819 +3 32523 32820 33080 +3 32523 33080 32762 +3 32524 32610 32783 +3 32524 32783 32698 +3 32525 32699 32784 +3 32525 32784 32611 +3 32526 32990 33458 +3 32526 33458 33000 +3 32527 33001 33459 +3 32527 33459 32991 +3 32528 34048 35089 +3 32528 35089 33210 +3 32529 33211 35090 +3 32529 35090 34049 +3 32530 32655 32765 +3 32530 32765 32639 +3 32531 32640 32766 +3 32531 32766 32656 +3 32532 32700 32726 +3 32533 32727 32701 +3 32534 34997 34998 +3 32535 33002 33470 +3 32535 33470 32990 +3 32536 32991 33471 +3 32536 33471 33003 +3 32537 33595 34633 +3 32537 34633 33763 +3 32538 33764 34634 +3 32538 34634 33596 +3 32539 32565 33666 +3 32539 33666 33572 +3 32540 33573 33667 +3 32540 33667 32566 +3 32541 33124 34394 +3 32541 34394 33895 +3 32542 33896 34395 +3 32542 34395 33125 +3 32543 33454 34168 +3 32543 34168 33948 +3 32544 33949 34169 +3 32544 34169 33455 +3 32545 32546 34239 +3 32545 34239 34213 +3 32546 34214 34239 +3 32547 32986 33097 +3 32547 33097 32631 +3 32548 32632 33098 +3 32548 33098 32987 +3 32549 35535 36315 +3 32549 36315 33524 +3 32550 33525 36316 +3 32550 36316 35536 +3 32551 34677 35514 +3 32551 35514 33576 +3 32552 33577 35515 +3 32552 35515 34678 +3 32553 32595 32779 +3 32553 32779 32720 +3 32554 32721 32780 +3 32554 32780 32596 +3 32555 34080 34384 +3 32555 34384 32926 +3 32556 32927 34385 +3 32556 34385 34081 +3 32557 32885 33095 +3 32557 33095 32746 +3 32558 32747 33096 +3 32558 33096 32886 +3 32559 33075 33128 +3 32559 33128 32601 +3 32560 32602 33129 +3 32560 33129 33076 +3 32561 33432 33488 +3 32561 33488 32579 +3 32562 32579 33489 +3 32562 33489 33433 +3 32563 33852 36533 +3 32563 36533 35370 +3 32564 35371 36534 +3 32564 36534 33853 +3 32565 32566 33690 +3 32565 33690 33666 +3 32566 33667 33690 +3 32567 33045 33183 +3 32567 33183 32690 +3 32568 32691 33184 +3 32568 33184 33046 +3 32569 32785 33407 +3 32569 33407 33155 +3 32570 33156 33408 +3 32570 33408 32786 +3 32571 33173 34014 +3 32571 34014 33512 +3 32572 33513 34015 +3 32572 34015 33174 +3 32573 32742 32831 +3 32573 32831 32651 +3 32574 32652 32832 +3 32574 32832 32743 +3 32575 32698 32843 +3 32575 32843 32704 +3 32576 32705 32844 +3 32576 32844 32699 +3 32577 34438 35093 +3 32577 35093 33377 +3 32578 33378 35094 +3 32578 35094 34439 +3 32579 33488 33489 +3 32580 33393 33739 +3 32580 33739 32948 +3 32581 32949 33740 +3 32581 33740 33394 +3 32582 33862 34114 +3 32582 34114 32875 +3 32583 32876 34115 +3 32583 34115 33863 +3 32584 32995 33645 +3 32584 33645 32994 +3 32585 33291 34469 +3 32585 34469 33883 +3 32586 33884 34470 +3 32586 34470 33292 +3 32587 33757 34461 +3 32587 34461 33454 +3 32588 33455 34462 +3 32588 34462 33758 +3 32589 32704 32803 +3 32589 32803 32681 +3 32590 32681 32804 +3 32590 32804 32705 +3 32591 32684 32839 +3 32591 32839 32744 +3 32592 32745 32840 +3 32592 32840 32685 +3 32593 32833 33405 +3 32593 33405 33118 +3 32594 33119 33406 +3 32594 33406 32834 +3 32595 32609 32809 +3 32595 32809 32779 +3 32596 32780 32810 +3 32596 32810 32609 +3 32597 32738 33120 +3 32597 33120 32962 +3 32598 32963 33121 +3 32598 33121 32739 +3 32599 33169 34358 +3 32599 34358 34040 +3 32600 34041 34359 +3 32600 34359 33170 +3 32601 33128 33185 +3 32601 33185 32620 +3 32602 32620 33186 +3 32602 33186 33129 +3 32603 33147 33356 +3 32603 33356 32767 +3 32604 32768 33357 +3 32604 33357 33148 +3 32605 33264 33635 +3 32605 33635 32966 +3 32606 32967 33636 +3 32606 33636 33265 +3 32607 32718 33484 +3 32607 33484 33234 +3 32608 33235 33485 +3 32608 33485 32719 +3 32609 32810 32809 +3 32610 32663 32855 +3 32610 32855 32783 +3 32611 32784 32856 +3 32611 32856 32664 +3 32612 32758 33482 +3 32612 33482 33317 +3 32613 33318 33483 +3 32613 33483 32759 +3 32614 34530 35956 +3 32614 35956 34207 +3 32615 34208 35957 +3 32615 35957 34531 +3 32616 33010 34362 +3 32616 34362 34030 +3 32617 34031 34363 +3 32617 34363 33011 +3 32618 32744 32873 +3 32618 32873 32742 +3 32619 32743 32874 +3 32619 32874 32745 +3 32620 33185 33186 +3 32621 33315 33814 +3 32621 33814 33143 +3 32622 33144 33815 +3 32622 33815 33316 +3 32623 33518 33761 +3 32623 33761 32863 +3 32624 32864 33762 +3 32624 33762 33519 +3 32625 33893 36191 +3 32625 36191 35091 +3 32626 35092 36192 +3 32626 36192 33894 +3 32627 34760 35188 +3 32627 35188 33122 +3 32628 33123 35189 +3 32628 35189 34761 +3 32629 34246 34878 +3 32629 34878 33373 +3 32630 33374 34879 +3 32630 34879 34247 +3 32631 33097 33171 +3 32631 33171 32885 +3 32632 32886 33172 +3 32632 33172 33098 +3 32633 32934 33446 +3 32633 33446 33132 +3 32634 33132 33447 +3 32634 33447 32935 +3 32635 33006 33208 +3 32635 33208 32817 +3 32636 32818 33209 +3 32636 33209 33007 +3 32637 33364 33699 +3 32637 33699 32964 +3 32638 32965 33700 +3 32638 33700 33365 +3 32639 32765 32857 +3 32639 32857 32700 +3 32640 32701 32858 +3 32640 32858 32766 +3 32641 33686 34951 +3 32641 34951 34092 +3 32642 34093 34952 +3 32642 34952 33687 +3 32643 33051 33968 +3 32643 33968 33765 +3 32644 33766 33969 +3 32644 33969 33052 +3 32645 32942 33962 +3 32645 33962 33737 +3 32646 33738 33963 +3 32646 33963 32943 +3 32647 33200 33824 +3 32647 33824 33311 +3 32648 33312 33825 +3 32648 33825 33201 +3 32649 33383 34278 +3 32649 34278 33688 +3 32650 33689 34279 +3 32650 34279 33384 +3 32651 32831 32887 +3 32651 32887 32686 +3 32652 32687 32888 +3 32652 32888 32832 +3 32653 34705 35563 +3 32653 35563 33589 +3 32654 33590 35564 +3 32654 35564 34706 +3 32655 32720 32883 +3 32655 32883 32765 +3 32656 32766 32884 +3 32656 32884 32721 +3 32657 33552 33782 +3 32657 33782 32871 +3 32658 32872 33783 +3 32658 33783 33553 +3 32659 33240 34426 +3 32659 34426 33929 +3 32660 33930 34427 +3 32660 34427 33241 +3 32661 33964 34993 +3 32661 34993 34655 +3 32662 34656 34994 +3 32662 34994 33965 +3 32663 32686 32895 +3 32663 32895 32855 +3 32664 32856 32896 +3 32664 32896 32687 +3 32665 33277 35095 +3 32665 35095 34593 +3 32666 34594 35096 +3 32666 35096 33278 +3 32667 32906 33587 +3 32667 33587 33358 +3 32668 33359 33588 +3 32668 33588 32907 +3 32669 33931 35131 +3 32669 35131 33901 +3 32670 33902 35132 +3 32670 35132 33932 +3 32671 35250 36355 +3 32671 36355 33952 +3 32672 33953 36356 +3 32672 36356 35250 +3 32673 33101 34068 +3 32673 34068 33719 +3 32674 33720 34069 +3 32674 34069 33102 +3 32675 34312 35995 +3 32675 35995 34530 +3 32676 34531 35996 +3 32676 35996 34313 +3 32677 35683 36665 +3 32677 36665 33915 +3 32678 33916 36666 +3 32678 36666 35684 +3 32679 33769 34147 +3 32679 34147 33114 +3 32680 33115 34148 +3 32680 34148 33770 +3 32681 32803 32908 +3 32681 32908 32804 +3 32682 33083 33309 +3 32682 33309 32903 +3 32683 32904 33310 +3 32683 33310 33084 +3 32684 32726 32920 +3 32684 32920 32839 +3 32685 32840 32921 +3 32685 32921 32727 +3 32686 32887 32895 +3 32687 32896 32888 +3 32688 34237 35384 +3 32688 35384 33970 +3 32689 33971 35385 +3 32689 35385 34238 +3 32690 33183 33268 +3 32690 33268 32815 +3 32691 32816 33269 +3 32691 33269 33184 +3 32692 33424 35147 +3 32692 35147 34528 +3 32693 34529 35148 +3 32693 35148 33425 +3 32694 33103 34042 +3 32694 34042 33691 +3 32695 33692 34043 +3 32695 34043 33104 +3 32696 33874 34713 +3 32696 34713 33715 +3 32697 33716 34714 +3 32697 34714 33875 +3 32698 32783 32954 +3 32698 32954 32843 +3 32699 32844 32955 +3 32699 32955 32784 +3 32700 32857 32917 +3 32700 32917 32726 +3 32701 32727 32918 +3 32701 32918 32858 +3 32702 34555 35328 +3 32702 35328 33650 +3 32703 33651 35329 +3 32703 35329 34556 +3 32704 32843 32960 +3 32704 32960 32803 +3 32705 32804 32961 +3 32705 32961 32844 +3 32706 34711 36241 +3 32706 36241 34410 +3 32707 34411 36242 +3 32707 36242 34712 +3 32708 33970 35055 +3 32708 35055 33964 +3 32709 33965 35056 +3 32709 35056 33971 +3 32710 33311 33860 +3 32710 33860 33300 +3 32711 33301 33861 +3 32711 33861 33312 +3 32712 33300 33866 +3 32712 33866 33315 +3 32713 33316 33867 +3 32713 33867 33301 +3 32714 33763 34728 +3 32714 34728 33874 +3 32715 33875 34729 +3 32715 34729 33764 +3 32716 33319 35051 +3 32716 35051 34569 +3 32717 34570 35052 +3 32717 35052 33320 +3 32718 32811 33578 +3 32718 33578 33484 +3 32719 33485 33579 +3 32719 33579 32812 +3 32720 32779 32956 +3 32720 32956 32883 +3 32721 32884 32957 +3 32721 32957 32780 +3 32722 33126 33342 +3 32722 33342 32938 +3 32723 32939 33343 +3 32723 33343 33127 +3 32724 33597 34137 +3 32724 34137 33379 +3 32725 33380 34138 +3 32725 34138 33598 +3 32726 32917 32920 +3 32727 32921 32918 +3 32728 33175 34715 +3 32728 34715 34350 +3 32729 34351 34716 +3 32729 34716 33176 +3 32730 35625 36345 +3 32730 36345 33668 +3 32731 33669 36346 +3 32731 36346 35626 +3 32732 33927 36647 +3 32732 36647 35689 +3 32733 35690 36648 +3 32733 36648 33928 +3 32734 34545 36037 +3 32734 36037 34392 +3 32735 34393 36038 +3 32735 36038 34546 +3 32736 33258 33946 +3 32736 33946 33492 +3 32737 33493 33947 +3 32737 33947 33259 +3 32738 32853 33260 +3 32738 33260 33120 +3 32739 33121 33261 +3 32739 33261 32854 +3 32740 33053 33674 +3 32740 33674 33323 +3 32741 33324 33675 +3 32741 33675 33054 +3 32742 32873 32982 +3 32742 32982 32831 +3 32743 32832 32983 +3 32743 32983 32874 +3 32744 32839 32988 +3 32744 32988 32873 +3 32745 32874 32989 +3 32745 32989 32840 +3 32746 33095 33270 +3 32746 33270 32911 +3 32747 32912 33271 +3 32747 33271 33096 +3 32748 33639 35580 +3 32748 35580 34820 +3 32749 34821 35581 +3 32749 35581 33640 +3 32750 33599 34606 +3 32750 34606 33870 +3 32751 33871 34607 +3 32751 34607 33600 +3 32752 32962 33293 +3 32752 33293 33069 +3 32753 33070 33294 +3 32753 33294 32963 +3 32754 34523 34959 +3 32754 34959 33313 +3 32755 33314 34960 +3 32755 34960 34524 +3 32756 33585 35340 +3 32756 35340 34720 +3 32757 34721 35341 +3 32757 35341 33586 +3 32758 32915 33603 +3 32758 33603 33482 +3 32759 33483 33604 +3 32759 33604 32916 +3 32760 33672 35962 +3 32760 35962 35202 +3 32761 35203 35963 +3 32761 35963 33673 +3 32762 33080 33308 +3 32762 33308 33079 +3 32763 33085 33346 +3 32763 33346 33006 +3 32764 33007 33347 +3 32764 33347 33086 +3 32765 32883 32992 +3 32765 32992 32857 +3 32766 32858 32993 +3 32766 32993 32884 +3 32767 33356 33508 +3 32767 33508 32915 +3 32768 32916 33509 +3 32768 33509 33357 +3 32769 34109 36831 +3 32769 36831 35945 +3 32770 35946 36832 +3 32770 36832 34110 +3 32771 33798 34424 +3 32771 34424 33516 +3 32772 33517 34425 +3 32772 34425 33799 +3 32773 34195 35312 +3 32773 35312 34048 +3 32774 34049 35313 +3 32774 35313 34196 +3 32775 33442 34833 +3 32775 34833 34276 +3 32776 34277 34834 +3 32776 34834 33443 +3 32777 33478 35021 +3 32777 35021 34475 +3 32778 34476 35022 +3 32778 35022 33479 +3 32779 32809 33004 +3 32779 33004 32956 +3 32780 32957 33005 +3 32780 33005 32810 +3 32781 34494 35273 +3 32781 35273 33721 +3 32782 33722 35274 +3 32782 35274 34495 +3 32783 32855 33015 +3 32783 33015 32954 +3 32784 32955 33016 +3 32784 33016 32856 +3 32785 32979 33583 +3 32785 33583 33407 +3 32786 33408 33584 +3 32786 33584 32980 +3 32787 34444 35867 +3 32787 35867 34378 +3 32788 34379 35868 +3 32788 35868 34445 +3 32789 33712 35812 +3 32789 35812 35043 +3 32790 35044 35813 +3 32790 35813 33713 +3 32791 34320 34955 +3 32791 34955 33554 +3 32792 33555 34956 +3 32792 34956 34320 +3 32793 34180 34643 +3 32793 34643 33370 +3 32794 33371 34644 +3 32794 34644 34181 +3 32795 33822 34256 +3 32795 34256 33325 +3 32796 33326 34257 +3 32796 34257 33823 +3 32797 34509 35145 +3 32797 35145 33566 +3 32798 33567 35146 +3 32798 35146 34510 +3 32799 33069 33420 +3 32799 33420 33085 +3 32800 33086 33421 +3 32800 33421 33070 +3 32801 34473 36259 +3 32801 36259 34744 +3 32802 34745 36260 +3 32802 36260 34474 +3 32803 32960 33031 +3 32803 33031 32908 +3 32804 32908 33032 +3 32804 33032 32961 +3 32805 34410 35875 +3 32805 35875 34444 +3 32806 34445 35876 +3 32806 35876 34411 +3 32807 33232 34064 +3 32807 34064 33751 +3 32808 33752 34067 +3 32808 34067 33233 +3 32809 32810 33012 +3 32809 33012 33004 +3 32810 33005 33012 +3 32811 32881 33654 +3 32811 33654 33578 +3 32812 33579 33655 +3 32812 33655 32882 +3 32813 33118 33633 +3 32813 33633 33304 +3 32814 33305 33634 +3 32814 33634 33119 +3 32815 33268 33401 +3 32815 33401 32944 +3 32816 32945 33402 +3 32816 33402 33269 +3 32817 33208 33395 +3 32817 33395 32986 +3 32818 32987 33396 +3 32818 33396 33209 +3 32819 33079 33375 +3 32819 33375 33083 +3 32820 33084 33376 +3 32820 33376 33080 +3 32821 34348 34752 +3 32821 34752 33295 +3 32822 33296 34753 +3 32822 34753 34349 +3 32823 35294 36138 +3 32823 36138 33794 +3 32824 33795 36139 +3 32824 36139 35295 +3 32825 33885 34591 +3 32825 34591 33285 +3 32826 33286 34592 +3 32826 34592 33886 +3 32827 32893 34242 +3 32827 34242 34127 +3 32828 34128 34243 +3 32828 34243 32894 +3 32829 35468 36173 +3 32829 36173 33664 +3 32830 33665 36174 +3 32830 36174 35469 +3 32831 32982 33035 +3 32831 33035 32887 +3 32832 32888 33036 +3 32832 33036 32983 +3 32833 33027 33611 +3 32833 33611 33405 +3 32834 33406 33612 +3 32834 33612 33028 +3 32835 33810 36675 +3 32835 36675 35897 +3 32836 35898 36676 +3 32836 36676 33811 +3 32837 33607 35655 +3 32837 35655 34999 +3 32838 35000 35656 +3 32838 35656 33608 +3 32839 32920 33049 +3 32839 33049 32988 +3 32840 32989 33050 +3 32840 33050 32921 +3 32841 34032 34376 +3 32841 34376 33246 +3 32842 33247 34377 +3 32842 34377 34033 +3 32843 32954 33067 +3 32843 33067 32960 +3 32844 32961 33068 +3 32844 33068 32955 +3 32845 33450 33834 +3 32845 33834 33264 +3 32846 33265 33835 +3 32846 33835 33451 +3 32847 34356 34748 +3 32847 34748 33327 +3 32848 33328 34749 +3 32848 34749 34357 +3 32849 35005 36535 +3 32849 36535 34545 +3 32850 34546 36536 +3 32850 36536 35006 +3 32851 34034 34344 +3 32851 34344 33238 +3 32852 33239 34345 +3 32852 34345 34035 +3 32853 32922 33350 +3 32853 33350 33260 +3 32854 33261 33351 +3 32854 33351 32923 +3 32855 32895 33057 +3 32855 33057 33015 +3 32856 33016 33058 +3 32856 33058 32896 +3 32857 32992 33041 +3 32857 33041 32917 +3 32858 32918 33042 +3 32858 33042 32993 +3 32859 35543 36485 +3 32859 36485 33958 +3 32860 33959 36486 +3 32860 36486 35544 +3 32861 33512 34230 +3 32861 34230 33735 +3 32862 33736 34231 +3 32862 34231 33513 +3 32863 33761 33941 +3 32863 33941 33089 +3 32864 33090 33942 +3 32864 33942 33762 +3 32865 35316 36233 +3 32865 36233 33909 +3 32866 33910 36234 +3 32866 36234 35317 +3 32867 33917 34788 +3 32867 34788 33878 +3 32868 33879 34789 +3 32868 34789 33918 +3 32869 33925 34689 +3 32869 34689 33757 +3 32870 33758 34690 +3 32870 34690 33926 +3 32871 33782 33939 +3 32871 33939 33212 +3 32872 33213 33940 +3 32872 33940 33783 +3 32873 32988 33091 +3 32873 33091 32982 +3 32874 32983 33092 +3 32874 33092 32989 +3 32875 34114 34325 +3 32875 34325 33137 +3 32876 33138 34326 +3 32876 34326 34115 +3 32877 34199 35133 +3 32877 35133 33917 +3 32878 33918 35134 +3 32878 35134 34200 +3 32879 33982 34366 +3 32879 34366 33338 +3 32880 33339 34367 +3 32880 34367 33983 +3 32881 32905 33701 +3 32881 33701 33654 +3 32882 33655 33702 +3 32882 33702 32905 +3 32883 32956 33073 +3 32883 33073 32992 +3 32884 32993 33074 +3 32884 33074 32957 +3 32885 33171 33411 +3 32885 33411 33095 +3 32886 33096 33412 +3 32886 33412 33172 +3 32887 33035 33065 +3 32887 33065 32895 +3 32888 32896 33066 +3 32888 33066 33036 +3 32889 34135 35521 +3 32889 35521 34428 +3 32890 34429 35524 +3 32890 35524 34136 +3 32891 32913 35448 +3 32891 35448 35376 +3 32892 35377 35449 +3 32892 35449 32913 +3 32893 32914 34274 +3 32893 34274 34242 +3 32894 34243 34275 +3 32894 34275 32914 +3 32895 33065 33057 +3 32896 33058 33066 +3 32897 35228 35782 +3 32897 35782 33502 +3 32898 33503 35783 +3 32898 35783 35229 +3 32899 33352 34088 +3 32899 34088 33703 +3 32900 33703 34089 +3 32900 34089 33353 +3 32901 34577 35200 +3 32901 35200 33537 +3 32902 33538 35201 +3 32902 35201 34578 +3 32903 33309 33498 +3 32903 33498 33045 +3 32904 33046 33499 +3 32904 33499 33310 +3 32905 33702 33701 +3 32906 33112 33743 +3 32906 33743 33587 +3 32907 33588 33744 +3 32907 33744 33113 +3 32908 33031 33032 +3 32909 33155 33717 +3 32909 33717 33418 +3 32910 33419 33718 +3 32910 33718 33156 +3 32911 33270 33522 +3 32911 33522 33126 +3 32912 33127 33523 +3 32912 33523 33271 +3 32913 35449 35448 +3 32914 34275 34274 +3 32915 33508 33603 +3 32916 33604 33509 +3 32917 33041 33071 +3 32917 33071 32920 +3 32918 32921 33072 +3 32918 33072 33042 +3 32919 33805 35412 +3 32919 35412 33804 +3 32920 33071 33049 +3 32921 33050 33072 +3 32922 32944 33403 +3 32922 33403 33350 +3 32923 33351 33404 +3 32923 33404 32945 +3 32924 33954 36001 +3 32924 36001 35099 +3 32925 35100 36002 +3 32925 36002 33955 +3 32926 34384 34659 +3 32926 34659 33248 +3 32927 33249 34660 +3 32927 34660 34385 +3 32928 35087 35659 +3 32928 35659 33816 +3 32929 33817 35660 +3 32929 35660 35088 +3 32930 34615 35846 +3 32930 35846 34195 +3 32931 34196 35847 +3 32931 35847 34616 +3 32932 33426 33704 +3 32932 33704 33147 +3 32933 33148 33705 +3 32933 33705 33427 +3 32934 33323 33820 +3 32934 33820 33446 +3 32935 33447 33821 +3 32935 33821 33324 +3 32936 33656 33905 +3 32936 33905 33204 +3 32937 33205 33906 +3 32937 33906 33657 +3 32938 33342 33506 +3 32938 33506 33075 +3 32939 33076 33507 +3 32939 33507 33343 +3 32940 33688 34515 +3 32940 34515 33876 +3 32941 33877 34516 +3 32941 34516 33689 +3 32942 33192 34187 +3 32942 34187 33962 +3 32943 33963 34188 +3 32943 34188 33193 +3 32944 33401 33403 +3 32945 33404 33402 +3 32946 33759 34282 +3 32946 34282 33597 +3 32947 33598 34283 +3 32947 34283 33760 +3 32948 33739 33994 +3 32948 33994 33254 +3 32949 33255 33995 +3 32949 33995 33740 +3 32950 33504 35029 +3 32950 35029 34585 +3 32951 34586 35030 +3 32951 35030 33505 +3 32952 33496 34553 +3 32952 34553 34119 +3 32953 34120 34554 +3 32953 34554 33497 +3 32954 33015 33153 +3 32954 33153 33067 +3 32955 33068 33154 +3 32955 33154 33016 +3 32956 33004 33135 +3 32956 33135 33073 +3 32957 33074 33136 +3 32957 33136 33005 +3 32958 33680 35617 +3 32958 35617 34492 +3 32959 34493 35618 +3 32959 35618 33681 +3 32960 33067 33167 +3 32960 33167 33031 +3 32961 33032 33168 +3 32961 33168 33068 +3 32962 33120 33494 +3 32962 33494 33293 +3 32963 33294 33495 +3 32963 33495 33121 +3 32964 33699 34086 +3 32964 34086 33393 +3 32965 33394 34087 +3 32965 34087 33700 +3 32966 33635 33921 +3 32966 33921 33281 +3 32967 33282 33922 +3 32967 33922 33636 +3 32968 34254 36736 +3 32968 36736 35645 +3 32969 35645 36737 +3 32969 36737 34255 +3 32970 33710 34975 +3 32970 34975 34342 +3 32971 34343 34976 +3 32971 34976 33711 +3 32972 35512 36632 +3 32972 36632 34244 +3 32973 34245 36633 +3 32973 36633 35513 +3 32974 34209 37005 +3 32974 37005 36044 +3 32975 36045 37006 +3 32975 37006 34210 +3 32976 34452 35601 +3 32976 35601 34237 +3 32977 34238 35602 +3 32977 35602 34453 +3 32978 33870 34786 +3 32978 34786 33992 +3 32979 33304 33745 +3 32979 33745 33583 +3 32980 33584 33746 +3 32980 33746 33305 +3 32981 33993 34787 +3 32981 34787 33871 +3 32982 33091 33179 +3 32982 33179 33035 +3 32983 33036 33180 +3 32983 33180 33092 +3 32984 33646 35067 +3 32984 35067 34517 +3 32985 34518 35068 +3 32985 35068 33647 +3 32986 33395 33520 +3 32986 33520 33097 +3 32987 33098 33521 +3 32987 33521 33396 +3 32988 33049 33181 +3 32988 33181 33091 +3 32989 33092 33182 +3 32989 33182 33050 +3 32990 33470 33836 +3 32990 33836 33458 +3 32991 33459 33837 +3 32991 33837 33471 +3 32992 33073 33163 +3 32992 33163 33041 +3 32993 33042 33164 +3 32993 33164 33074 +3 32994 33645 33960 +3 32994 33960 33364 +3 32995 33365 33961 +3 32995 33961 33645 +3 32996 34386 34864 +3 32996 34864 33548 +3 32997 33549 34865 +3 32997 34865 34387 +3 32998 34617 36447 +3 32998 36447 34943 +3 32999 34946 36448 +3 32999 36448 34618 +3 33000 33458 33848 +3 33000 33848 33426 +3 33001 33427 33849 +3 33001 33849 33459 +3 33002 33418 33850 +3 33002 33850 33470 +3 33003 33471 33851 +3 33003 33851 33419 +3 33004 33012 33187 +3 33004 33187 33135 +3 33005 33136 33188 +3 33005 33188 33012 +3 33006 33346 33544 +3 33006 33544 33208 +3 33007 33209 33545 +3 33007 33545 33347 +3 33008 33631 34625 +3 33008 34625 34108 +3 33009 34108 34626 +3 33009 34626 33632 +3 33010 33391 34673 +3 33010 34673 34362 +3 33011 34363 34674 +3 33011 34674 33392 +3 33012 33188 33187 +3 33013 34280 35037 +3 33013 35037 33885 +3 33014 33886 35038 +3 33014 35038 34281 +3 33015 33057 33216 +3 33015 33216 33153 +3 33016 33154 33217 +3 33016 33217 33058 +3 33017 34012 34806 +3 33017 34806 33925 +3 33018 33926 34807 +3 33018 34807 34013 +3 33019 34092 35267 +3 33019 35267 34316 +3 33020 34319 35268 +3 33020 35268 34093 +3 33021 33275 33935 +3 33021 33935 33725 +3 33022 33726 33936 +3 33022 33936 33276 +3 33023 34215 35139 +3 33023 35139 34038 +3 33024 34039 35140 +3 33024 35140 34216 +3 33025 33956 36730 +3 33025 36730 35997 +3 33026 35998 36731 +3 33026 36731 33957 +3 33027 33234 33780 +3 33027 33780 33611 +3 33028 33612 33781 +3 33028 33781 33235 +3 33029 34754 34808 +3 33029 34808 33099 +3 33030 33100 34809 +3 33030 34809 34755 +3 33031 33167 33195 +3 33031 33195 33032 +3 33032 33195 33168 +3 33033 34308 34854 +3 33033 34854 33684 +3 33034 33685 34855 +3 33034 34855 34309 +3 33035 33179 33230 +3 33035 33230 33065 +3 33036 33066 33231 +3 33036 33231 33180 +3 33037 33735 34416 +3 33037 34416 33818 +3 33038 33819 34417 +3 33038 34417 33736 +3 33039 34943 36499 +3 33039 36499 34711 +3 33040 34712 36500 +3 33040 36500 34946 +3 33041 33163 33214 +3 33041 33214 33071 +3 33042 33072 33215 +3 33042 33215 33164 +3 33043 33974 34635 +3 33043 34635 33798 +3 33044 33799 34636 +3 33044 34636 33975 +3 33045 33498 33637 +3 33045 33637 33183 +3 33046 33184 33638 +3 33046 33638 33499 +3 33047 36070 37011 +3 33047 37011 34235 +3 33048 34236 37012 +3 33048 37012 36071 +3 33049 33071 33222 +3 33049 33222 33181 +3 33050 33182 33223 +3 33050 33223 33072 +3 33051 33452 34298 +3 33051 34298 33968 +3 33052 33969 34299 +3 33052 34299 33453 +3 33053 33358 33919 +3 33053 33919 33674 +3 33054 33675 33920 +3 33054 33920 33359 +3 33055 33591 35739 +3 33055 35739 35255 +3 33056 35256 35740 +3 33056 35740 33592 +3 33057 33065 33242 +3 33057 33242 33216 +3 33058 33217 33243 +3 33058 33243 33066 +3 33059 34102 34398 +3 33059 34398 33695 +3 33060 33696 34399 +3 33060 34399 34103 +3 33061 33808 34408 +3 33061 34408 33759 +3 33062 33760 34409 +3 33062 34409 33809 +3 33063 34776 36673 +3 33063 36673 35137 +3 33064 35138 36674 +3 33064 36674 34777 +3 33065 33230 33242 +3 33066 33243 33231 +3 33067 33153 33262 +3 33067 33262 33167 +3 33068 33168 33263 +3 33068 33263 33154 +3 33069 33293 33658 +3 33069 33658 33420 +3 33070 33421 33659 +3 33070 33659 33294 +3 33071 33214 33222 +3 33072 33223 33215 +3 33073 33135 33252 +3 33073 33252 33163 +3 33074 33164 33253 +3 33074 33253 33136 +3 33075 33506 33625 +3 33075 33625 33128 +3 33076 33129 33626 +3 33076 33626 33507 +3 33077 34744 36473 +3 33077 36473 34893 +3 33078 34894 36474 +3 33078 36474 34745 +3 33079 33308 33605 +3 33079 33605 33375 +3 33080 33376 33606 +3 33080 33606 33308 +3 33081 34008 36116 +3 33081 36116 35194 +3 33082 35195 36117 +3 33082 36117 34009 +3 33083 33375 33601 +3 33083 33601 33309 +3 33084 33310 33602 +3 33084 33602 33376 +3 33085 33420 33678 +3 33085 33678 33346 +3 33086 33347 33679 +3 33086 33679 33421 +3 33087 33891 35737 +3 33087 35737 34991 +3 33088 34992 35738 +3 33088 35738 33892 +3 33089 33941 34100 +3 33089 34100 33289 +3 33090 33290 34101 +3 33090 34101 33942 +3 33091 33181 33272 +3 33091 33272 33179 +3 33092 33180 33273 +3 33092 33273 33182 +3 33093 34176 34619 +3 33093 34619 33613 +3 33094 33614 34620 +3 33094 34620 34177 +3 33095 33411 33581 +3 33095 33581 33270 +3 33096 33271 33582 +3 33096 33582 33412 +3 33097 33520 33609 +3 33097 33609 33171 +3 33098 33172 33610 +3 33098 33610 33521 +3 33099 34808 34845 +3 33099 34845 33100 +3 33100 34845 34809 +3 33101 33468 34372 +3 33101 34372 34068 +3 33102 34069 34373 +3 33102 34373 33469 +3 33103 33440 34332 +3 33103 34332 34042 +3 33104 34043 34333 +3 33104 34333 33441 +3 33105 33818 34400 +3 33105 34400 33808 +3 33106 33809 34401 +3 33106 34401 33819 +3 33107 33748 34830 +3 33107 34830 33747 +3 33108 33872 35314 +3 33108 35314 34641 +3 33109 34642 35315 +3 33109 35315 33873 +3 33110 33876 34671 +3 33110 34671 33986 +3 33111 33987 34672 +3 33111 34672 33877 +3 33112 33317 33899 +3 33112 33899 33743 +3 33113 33744 33900 +3 33113 33900 33318 +3 33114 34147 34602 +3 33114 34602 33643 +3 33115 33644 34603 +3 33115 34603 34148 +3 33116 35663 36421 +3 33116 36421 34002 +3 33117 34003 36422 +3 33117 36422 35664 +3 33118 33405 33864 +3 33118 33864 33633 +3 33119 33634 33865 +3 33119 33865 33406 +3 33120 33260 33627 +3 33120 33627 33494 +3 33121 33495 33628 +3 33121 33628 33261 +3 33122 35188 35570 +3 33122 35570 34448 +3 33123 34449 35571 +3 33123 35571 35189 +3 33124 33676 34858 +3 33124 34858 34394 +3 33125 34395 34859 +3 33125 34859 33677 +3 33126 33522 33723 +3 33126 33723 33342 +3 33127 33343 33724 +3 33127 33724 33523 +3 33128 33625 33693 +3 33128 33693 33185 +3 33129 33186 33694 +3 33129 33694 33626 +3 33130 35117 36653 +3 33130 36653 34802 +3 33131 34803 36654 +3 33131 36654 35118 +3 33132 33446 33882 +3 33132 33882 33447 +3 33133 35107 35687 +3 33133 35687 33774 +3 33134 33775 35688 +3 33134 35688 35108 +3 33135 33187 33302 +3 33135 33302 33252 +3 33136 33253 33303 +3 33136 33303 33188 +3 33137 34325 34534 +3 33137 34534 33383 +3 33138 33384 34535 +3 33138 34535 34326 +3 33139 33889 35490 +3 33139 35490 34784 +3 33140 34785 35491 +3 33140 35491 33890 +3 33141 34076 35885 +3 33141 35885 35031 +3 33142 35032 35886 +3 33142 35886 34077 +3 33143 33814 34224 +3 33143 34224 33656 +3 33144 33657 34225 +3 33144 34225 33815 +3 33145 34370 35338 +3 33145 35338 34199 +3 33146 34200 35339 +3 33146 35339 34371 +3 33147 33704 33868 +3 33147 33868 33356 +3 33148 33357 33869 +3 33148 33869 33705 +3 33149 33992 34866 +3 33149 34866 34012 +3 33150 34013 34867 +3 33150 34867 33993 +3 33151 34456 35993 +3 33151 35993 34730 +3 33152 34731 35994 +3 33152 35994 34457 +3 33153 33216 33329 +3 33153 33329 33262 +3 33154 33263 33330 +3 33154 33330 33217 +3 33155 33407 33907 +3 33155 33907 33717 +3 33156 33718 33908 +3 33156 33908 33408 +3 33157 33883 34921 +3 33157 34921 34288 +3 33158 34289 34922 +3 33158 34922 33884 +3 33159 34756 36335 +3 33159 36335 34812 +3 33160 34813 36336 +3 33160 36336 34757 +3 33161 35292 36092 +3 33161 36092 34026 +3 33162 34027 36093 +3 33162 36093 35293 +3 33163 33252 33306 +3 33163 33306 33214 +3 33164 33215 33307 +3 33164 33307 33253 +3 33165 35045 35733 +3 33165 35733 33897 +3 33166 33898 35734 +3 33166 35734 35046 +3 33167 33262 33297 +3 33167 33297 33195 +3 33168 33195 33298 +3 33168 33298 33263 +3 33169 33708 34798 +3 33169 34798 34358 +3 33170 34359 34799 +3 33170 34799 33709 +3 33171 33609 33670 +3 33171 33670 33411 +3 33172 33412 33671 +3 33172 33671 33610 +3 33173 33492 34294 +3 33173 34294 34014 +3 33174 34015 34295 +3 33174 34295 33493 +3 33175 33564 35065 +3 33175 35065 34715 +3 33176 34716 35066 +3 33176 35066 33565 +3 33177 33976 36585 +3 33177 36585 35887 +3 33178 35888 36586 +3 33178 36586 33977 +3 33179 33272 33336 +3 33179 33336 33230 +3 33180 33231 33337 +3 33180 33337 33273 +3 33181 33222 33321 +3 33181 33321 33272 +3 33182 33273 33322 +3 33182 33322 33223 +3 33183 33637 33733 +3 33183 33733 33268 +3 33184 33269 33734 +3 33184 33734 33638 +3 33185 33693 33714 +3 33185 33714 33186 +3 33186 33714 33694 +3 33187 33188 33335 +3 33187 33335 33302 +3 33188 33303 33335 +3 33189 34812 36337 +3 33189 36337 34776 +3 33190 34777 36338 +3 33190 36338 34813 +3 33191 34428 35758 +3 33191 35758 34452 +3 33192 33422 34382 +3 33192 34382 34187 +3 33193 34188 34383 +3 33193 34383 33423 +3 33194 34453 35759 +3 33194 35759 34429 +3 33195 33297 33298 +3 33196 34448 35639 +3 33196 35639 34456 +3 33197 34457 35640 +3 33197 35640 34449 +3 33198 34893 36939 +3 33198 36939 35406 +3 33199 35407 36940 +3 33199 36940 34894 +3 33200 33725 34258 +3 33200 34258 33824 +3 33201 33825 34259 +3 33201 34259 33726 +3 33202 34046 34750 +3 33202 34750 33974 +3 33203 33975 34751 +3 33203 34751 34047 +3 33204 33905 34139 +3 33204 34139 33450 +3 33205 33451 34140 +3 33205 34140 33906 +3 33206 34679 35641 +3 33206 35641 34215 +3 33207 34216 35642 +3 33207 35642 34680 +3 33208 33544 33731 +3 33208 33731 33395 +3 33209 33396 33732 +3 33209 33732 33545 +3 33210 35089 35637 +3 33210 35637 33802 +3 33211 33803 35638 +3 33211 35638 35090 +3 33212 33939 34072 +3 33212 34072 33354 +3 33213 33355 34073 +3 33213 34073 33940 +3 33214 33306 33344 +3 33214 33344 33222 +3 33215 33223 33345 +3 33215 33345 33307 +3 33216 33242 33360 +3 33216 33360 33329 +3 33217 33330 33361 +3 33217 33361 33243 +3 33218 34300 36870 +3 33218 36870 35964 +3 33219 35965 36871 +3 33219 36871 34301 +3 33220 35533 36331 +3 33220 36331 34098 +3 33221 34099 36332 +3 33221 36332 35534 +3 33222 33344 33321 +3 33223 33322 33345 +3 33224 34170 36602 +3 33224 36602 35784 +3 33225 35785 36603 +3 33225 36603 34171 +3 33226 34250 36643 +3 33226 36643 35748 +3 33227 35749 36644 +3 33227 36644 34251 +3 33228 33986 34742 +3 33228 34742 34046 +3 33229 34047 34743 +3 33229 34743 33987 +3 33230 33336 33362 +3 33230 33362 33242 +3 33231 33243 33363 +3 33231 33363 33337 +3 33232 33691 34465 +3 33232 34465 34064 +3 33233 34067 34466 +3 33233 34466 33692 +3 33234 33484 33984 +3 33234 33984 33780 +3 33235 33781 33985 +3 33235 33985 33485 +3 33236 34492 35855 +3 33236 35855 34663 +3 33237 34664 35856 +3 33237 35856 34493 +3 33238 34344 34639 +3 33238 34639 33570 +3 33239 33571 34640 +3 33239 34640 34345 +3 33240 33682 34860 +3 33240 34860 34426 +3 33241 34427 34861 +3 33241 34861 33683 +3 33242 33362 33360 +3 33243 33361 33363 +3 33244 34611 35165 +3 33244 35165 33844 +3 33245 33845 35166 +3 33245 35166 34612 +3 33246 34376 34685 +3 33246 34685 33568 +3 33247 33569 34686 +3 33247 34686 34377 +3 33248 34659 34889 +3 33248 34889 34149 +3 33249 34150 34890 +3 33249 34890 34660 +3 33250 35257 35923 +3 33250 35923 34054 +3 33251 34055 35924 +3 33251 35924 35258 +3 33252 33302 33409 +3 33252 33409 33306 +3 33253 33307 33410 +3 33253 33410 33303 +3 33254 33994 34222 +3 33254 34222 33518 +3 33255 33519 34223 +3 33255 34223 33995 +3 33256 35840 35889 +3 33256 35889 33274 +3 33257 33274 35890 +3 33257 35890 35841 +3 33258 33719 34340 +3 33258 34340 33946 +3 33259 33947 34341 +3 33259 34341 33720 +3 33260 33350 33729 +3 33260 33729 33627 +3 33261 33628 33730 +3 33261 33730 33351 +3 33262 33329 33399 +3 33262 33399 33297 +3 33263 33298 33400 +3 33263 33400 33330 +3 33264 33834 34158 +3 33264 34158 33635 +3 33265 33636 34159 +3 33265 34159 33835 +3 33266 35488 36165 +3 33266 36165 33990 +3 33267 33991 36166 +3 33267 36166 35489 +3 33268 33733 33778 +3 33268 33778 33401 +3 33269 33402 33779 +3 33269 33779 33734 +3 33270 33581 33806 +3 33270 33806 33522 +3 33271 33523 33807 +3 33271 33807 33582 +3 33272 33321 33414 +3 33272 33414 33336 +3 33273 33337 33415 +3 33273 33415 33322 +3 33274 35889 35890 +3 33275 33472 34117 +3 33275 34117 33935 +3 33276 33936 34118 +3 33276 34118 33473 +3 33277 33838 35578 +3 33277 35578 35095 +3 33278 35096 35579 +3 33278 35579 33839 +3 33279 33880 36261 +3 33279 36261 35717 +3 33280 35718 36262 +3 33280 36262 33881 +3 33281 33921 34174 +3 33281 34174 33552 +3 33282 33553 34175 +3 33282 34175 33922 +3 33283 35525 36471 +3 33283 36471 34310 +3 33284 34311 36472 +3 33284 36472 35526 +3 33285 34591 35232 +3 33285 35232 33988 +3 33286 33989 35233 +3 33286 35233 34592 +3 33287 34149 35220 +3 33287 35220 34440 +3 33288 34441 35221 +3 33288 35221 34150 +3 33289 34100 34240 +3 33289 34240 33472 +3 33290 33473 34241 +3 33290 34241 34101 +3 33291 33895 35007 +3 33291 35007 34469 +3 33292 34470 35008 +3 33292 35008 33896 +3 33293 33494 33828 +3 33293 33828 33658 +3 33294 33659 33829 +3 33294 33829 33495 +3 33295 34752 35129 +3 33295 35129 33887 +3 33296 33888 35130 +3 33296 35130 34753 +3 33297 33399 33413 +3 33297 33413 33298 +3 33298 33413 33400 +3 33299 33823 34610 +3 33299 34610 33822 +3 33300 33860 34321 +3 33300 34321 33866 +3 33301 33867 34322 +3 33301 34322 33861 +3 33302 33335 33434 +3 33302 33434 33409 +3 33303 33410 33435 +3 33303 33435 33335 +3 33304 33633 34020 +3 33304 34020 33745 +3 33305 33746 34021 +3 33305 34021 33634 +3 33306 33409 33436 +3 33306 33436 33344 +3 33307 33345 33437 +3 33307 33437 33410 +3 33308 33606 33789 +3 33308 33789 33605 +3 33309 33601 33790 +3 33309 33790 33498 +3 33310 33499 33791 +3 33310 33791 33602 +3 33311 33824 34327 +3 33311 34327 33860 +3 33312 33861 34328 +3 33312 34328 33825 +3 33313 34959 35358 +3 33313 35358 33771 +3 33314 33772 35359 +3 33314 35359 34960 +3 33315 33866 34334 +3 33315 34334 33814 +3 33316 33815 34335 +3 33316 34335 33867 +3 33317 33482 34050 +3 33317 34050 33899 +3 33318 33900 34051 +3 33318 34051 33483 +3 33319 34197 35895 +3 33319 35895 35051 +3 33320 35052 35896 +3 33320 35896 34198 +3 33321 33344 33444 +3 33321 33444 33414 +3 33322 33415 33445 +3 33322 33445 33345 +3 33323 33674 34141 +3 33323 34141 33820 +3 33324 33821 34142 +3 33324 34142 33675 +3 33325 34256 34657 +3 33325 34657 33769 +3 33326 33770 34658 +3 33326 34658 34257 +3 33327 34748 35135 +3 33327 35135 33749 +3 33328 33750 35136 +3 33328 35136 34749 +3 33329 33360 33438 +3 33329 33438 33399 +3 33330 33400 33439 +3 33330 33439 33361 +3 33331 34608 37017 +3 33331 37017 35935 +3 33332 35936 37018 +3 33332 37018 34609 +3 33333 34074 35576 +3 33333 35576 34869 +3 33334 34869 35577 +3 33334 35577 34075 +3 33335 33435 33434 +3 33336 33414 33448 +3 33336 33448 33362 +3 33337 33363 33449 +3 33337 33449 33415 +3 33338 34366 34490 +3 33338 34490 33464 +3 33339 33465 34491 +3 33339 34491 34367 +3 33340 34316 35437 +3 33340 35437 34503 +3 33341 34504 35438 +3 33341 35438 34319 +3 33342 33723 33854 +3 33342 33854 33506 +3 33343 33507 33855 +3 33343 33855 33724 +3 33344 33436 33444 +3 33345 33445 33437 +3 33346 33678 33858 +3 33346 33858 33544 +3 33347 33545 33859 +3 33347 33859 33679 +3 33348 34082 35776 +3 33348 35776 35071 +3 33349 35072 35777 +3 33349 35777 34083 +3 33350 33403 33776 +3 33350 33776 33729 +3 33351 33730 33777 +3 33351 33777 33404 +3 33352 33751 34450 +3 33352 34450 34088 +3 33353 34089 34451 +3 33353 34451 33752 +3 33354 34072 34156 +3 33354 34156 33432 +3 33355 33433 34157 +3 33355 34157 34073 +3 33356 33868 34000 +3 33356 34000 33508 +3 33357 33509 34001 +3 33357 34001 33869 +3 33358 33587 34145 +3 33358 34145 33919 +3 33359 33920 34146 +3 33359 34146 33588 +3 33360 33362 33460 +3 33360 33460 33438 +3 33361 33439 33461 +3 33361 33461 33363 +3 33362 33448 33460 +3 33363 33461 33449 +3 33364 33960 34260 +3 33364 34260 33699 +3 33365 33700 34261 +3 33365 34261 33961 +3 33366 34503 35458 +3 33366 35458 34370 +3 33367 34371 35459 +3 33367 35459 34504 +3 33368 35350 36868 +3 33368 36868 35005 +3 33369 35006 36869 +3 33369 36869 35351 +3 33370 34643 35186 +3 33370 35186 33937 +3 33371 33938 35187 +3 33371 35187 34644 +3 33372 34233 35966 +3 33372 35966 34234 +3 33373 34878 35492 +3 33373 35492 33996 +3 33374 33997 35493 +3 33374 35493 34879 +3 33375 33605 33826 +3 33375 33826 33601 +3 33376 33602 33827 +3 33376 33827 33606 +3 33377 35093 35719 +3 33377 35719 34036 +3 33378 34037 35720 +3 33378 35720 35094 +3 33379 34137 34368 +3 33379 34368 33623 +3 33380 33624 34369 +3 33380 34369 34138 +3 33381 34925 36132 +3 33381 36132 34615 +3 33382 34616 36133 +3 33382 36133 34926 +3 33383 34534 34278 +3 33384 34279 34535 +3 33385 34252 36214 +3 33385 36214 35615 +3 33386 35616 36215 +3 33386 36215 34253 +3 33387 34663 36395 +3 33387 36395 35101 +3 33388 35102 36396 +3 33388 36396 34664 +3 33389 34567 37435 +3 33389 37435 36461 +3 33390 36462 37436 +3 33390 37436 34568 +3 33391 33706 34944 +3 33391 34944 34673 +3 33392 34674 34945 +3 33392 34945 33707 +3 33393 34086 34418 +3 33393 34418 33739 +3 33394 33740 34419 +3 33394 34419 34087 +3 33395 33731 33842 +3 33395 33842 33520 +3 33396 33521 33843 +3 33396 33843 33732 +3 33397 34927 36140 +3 33397 36140 34070 +3 33398 34071 36141 +3 33398 36141 34928 +3 33399 33438 33486 +3 33399 33486 33413 +3 33400 33413 33487 +3 33400 33487 33439 +3 33401 33778 33792 +3 33401 33792 33403 +3 33402 33404 33793 +3 33402 33793 33779 +3 33403 33792 33776 +3 33404 33777 33793 +3 33405 33611 34062 +3 33405 34062 33864 +3 33406 33865 34063 +3 33406 34063 33612 +3 33407 33583 34106 +3 33407 34106 33907 +3 33408 33908 34107 +3 33408 34107 33584 +3 33409 33434 33510 +3 33409 33510 33436 +3 33410 33437 33511 +3 33410 33511 33435 +3 33411 33670 33840 +3 33411 33840 33581 +3 33412 33582 33841 +3 33412 33841 33671 +3 33413 33486 33487 +3 33414 33444 33514 +3 33414 33514 33448 +3 33415 33449 33515 +3 33415 33515 33445 +3 33416 35271 36837 +3 33416 36837 35117 +3 33417 35118 36838 +3 33417 36838 35272 +3 33418 33717 34125 +3 33418 34125 33850 +3 33419 33851 34126 +3 33419 34126 33718 +3 33420 33658 33923 +3 33420 33923 33678 +3 33421 33679 33924 +3 33421 33924 33659 +3 33422 33623 34557 +3 33422 34557 34382 +3 33423 34383 34558 +3 33423 34558 33624 +3 33424 34044 35842 +3 33424 35842 35147 +3 33425 35148 35843 +3 33425 35843 34045 +3 33426 33848 34104 +3 33426 34104 33704 +3 33427 33705 34105 +3 33427 34105 33849 +3 33428 35518 37073 +3 33428 37073 35178 +3 33429 35179 37074 +3 33429 37074 35519 +3 33430 35137 36913 +3 33430 36913 35350 +3 33431 35351 36914 +3 33431 36914 35138 +3 33432 34156 34203 +3 33432 34203 33488 +3 33433 33489 34204 +3 33433 34204 34157 +3 33434 33435 33532 +3 33434 33532 33510 +3 33435 33511 33532 +3 33436 33510 33533 +3 33436 33533 33444 +3 33437 33445 33534 +3 33437 33534 33511 +3 33438 33460 33530 +3 33438 33530 33486 +3 33439 33487 33531 +3 33439 33531 33461 +3 33440 33737 34600 +3 33440 34600 34332 +3 33441 34333 34601 +3 33441 34601 33738 +3 33442 33978 35344 +3 33442 35344 34833 +3 33443 34834 35345 +3 33443 35345 33979 +3 33444 33533 33514 +3 33445 33515 33534 +3 33446 33820 34226 +3 33446 34226 33882 +3 33447 33882 34227 +3 33447 34227 33821 +3 33448 33514 33535 +3 33448 33535 33460 +3 33449 33461 33536 +3 33449 33536 33515 +3 33450 34139 34317 +3 33450 34317 33834 +3 33451 33835 34318 +3 33451 34318 34140 +3 33452 33572 34432 +3 33452 34432 34298 +3 33453 34299 34433 +3 33453 34433 33573 +3 33454 34461 35155 +3 33454 35155 34168 +3 33455 34169 35156 +3 33455 35156 34462 +3 33456 34442 35452 +3 33456 35452 34496 +3 33457 34497 35453 +3 33457 35453 34443 +3 33458 33836 34201 +3 33458 34201 33848 +3 33459 33849 34202 +3 33459 34202 33837 +3 33460 33535 33530 +3 33461 33531 33536 +3 33462 35167 36999 +3 33462 36999 35470 +3 33463 35471 37000 +3 33463 37000 35168 +3 33464 34490 34587 +3 33464 34587 33500 +3 33465 33501 34588 +3 33465 34588 34491 +3 33466 34496 35810 +3 33466 35810 34790 +3 33467 34791 35811 +3 33467 35811 34497 +3 33468 33765 34647 +3 33468 34647 34372 +3 33469 34373 34648 +3 33469 34648 33766 +3 33470 33850 34205 +3 33470 34205 33836 +3 33471 33837 34206 +3 33471 34206 33851 +3 33472 34240 34117 +3 33473 34118 34241 +3 33474 34583 35380 +3 33474 35380 34280 +3 33475 34281 35381 +3 33475 35381 34584 +3 33476 34730 36208 +3 33476 36208 34961 +3 33477 34962 36209 +3 33477 36209 34731 +3 33478 33933 35476 +3 33478 35476 35021 +3 33479 35022 35477 +3 33479 35477 33934 +3 33480 33913 35282 +3 33480 35282 34513 +3 33481 34514 35283 +3 33481 35283 33914 +3 33482 33603 34162 +3 33482 34162 34050 +3 33483 34051 34163 +3 33483 34163 33604 +3 33484 33578 34189 +3 33484 34189 33984 +3 33485 33985 34190 +3 33485 34190 33579 +3 33486 33530 33541 +3 33486 33541 33487 +3 33487 33541 33531 +3 33488 34203 34221 +3 33488 34221 33489 +3 33489 34221 34204 +3 33490 34346 36823 +3 33490 36823 36066 +3 33491 36067 36824 +3 33491 36824 34347 +3 33492 33946 34541 +3 33492 34541 34294 +3 33493 34295 34542 +3 33493 34542 33947 +3 33494 33627 33966 +3 33494 33966 33828 +3 33495 33829 33967 +3 33495 33967 33628 +3 33496 33929 34973 +3 33496 34973 34553 +3 33497 34554 34974 +3 33497 34974 33930 +3 33498 33790 33911 +3 33498 33911 33637 +3 33499 33638 33912 +3 33499 33912 33791 +3 33500 34587 34599 +3 33500 34599 33501 +3 33501 34599 34588 +3 33502 35782 36253 +3 33502 36253 33980 +3 33503 33981 36254 +3 33503 36254 35783 +3 33504 33950 35472 +3 33504 35472 35029 +3 33505 35030 35473 +3 33505 35473 33951 +3 33506 33854 33972 +3 33506 33972 33625 +3 33507 33626 33973 +3 33507 33973 33855 +3 33508 34000 34123 +3 33508 34123 33603 +3 33509 33604 34124 +3 33509 34124 34001 +3 33510 33532 33556 +3 33510 33556 33533 +3 33511 33534 33557 +3 33511 33557 33532 +3 33512 34014 34734 +3 33512 34734 34230 +3 33513 34231 34735 +3 33513 34735 34015 +3 33514 33533 33558 +3 33514 33558 33535 +3 33515 33536 33559 +3 33515 33559 33534 +3 33516 34424 34971 +3 33516 34971 34102 +3 33517 34103 34972 +3 33517 34972 34425 +3 33518 34222 34463 +3 33518 34463 33761 +3 33519 33762 34464 +3 33519 34464 34223 +3 33520 33842 33944 +3 33520 33944 33609 +3 33521 33610 33945 +3 33521 33945 33843 +3 33522 33806 33998 +3 33522 33998 33723 +3 33523 33724 33999 +3 33523 33999 33807 +3 33524 36315 36965 +3 33524 36965 34302 +3 33525 34303 36966 +3 33525 36966 36316 +3 33526 35711 36628 +3 33526 36628 34430 +3 33527 34431 36629 +3 33527 36629 35712 +3 33528 35206 36754 +3 33528 36754 35151 +3 33529 35152 36755 +3 33529 36755 35207 +3 33530 33535 33562 +3 33530 33562 33541 +3 33531 33541 33563 +3 33531 33563 33536 +3 33532 33557 33556 +3 33533 33556 33558 +3 33534 33559 33557 +3 33535 33558 33562 +3 33536 33563 33559 +3 33537 35200 35729 +3 33537 35729 34060 +3 33538 34061 35730 +3 33538 35730 35201 +3 33539 35820 37351 +3 33539 37351 35271 +3 33540 35272 37352 +3 33540 37352 35821 +3 33541 33562 33563 +3 33542 35178 36762 +3 33542 36762 35206 +3 33543 35207 36763 +3 33543 36763 35179 +3 33544 33858 34022 +3 33544 34022 33731 +3 33545 33732 34023 +3 33545 34023 33859 +3 33546 36373 37304 +3 33546 37304 34637 +3 33547 34638 37305 +3 33547 37305 36374 +3 33548 34864 34989 +3 33548 34989 33617 +3 33549 33618 34990 +3 33549 34990 34865 +3 33550 36148 37007 +3 33550 37007 34595 +3 33551 34596 37008 +3 33551 37008 36149 +3 33552 34174 34388 +3 33552 34388 33782 +3 33553 33783 34389 +3 33553 34389 34175 +3 33554 34955 35685 +3 33554 35685 34246 +3 33555 34247 35686 +3 33555 35686 34956 +3 33556 33557 33580 +3 33556 33580 33558 +3 33557 33559 33580 +3 33558 33580 33562 +3 33559 33563 33580 +3 33560 34422 36563 +3 33560 36563 35780 +3 33561 35781 36564 +3 33561 36564 34423 +3 33562 33580 33563 +3 33564 33878 35360 +3 33564 35360 35065 +3 33565 35066 35361 +3 33565 35361 33879 +3 33566 35145 35762 +3 33566 35762 34191 +3 33567 34192 35763 +3 33567 35763 35146 +3 33568 34685 34911 +3 33568 34911 33982 +3 33569 33983 34912 +3 33569 34912 34686 +3 33570 34639 34907 +3 33570 34907 33862 +3 33571 33863 34908 +3 33571 34908 34640 +3 33572 33666 34521 +3 33572 34521 34432 +3 33573 34433 34522 +3 33573 34522 33667 +3 33574 34569 35770 +3 33574 35770 34764 +3 33575 34765 35771 +3 33575 35771 34570 +3 33576 35514 36403 +3 33576 36403 34488 +3 33577 34489 36404 +3 33577 36404 35515 +3 33578 33654 34272 +3 33578 34272 34189 +3 33579 34190 34273 +3 33579 34273 33655 +3 33581 33840 34078 +3 33581 34078 33806 +3 33582 33807 34079 +3 33582 34079 33841 +3 33583 33745 34248 +3 33583 34248 34106 +3 33584 34107 34249 +3 33584 34249 33746 +3 33585 33648 35410 +3 33585 35410 35340 +3 33586 35341 35411 +3 33586 35411 33649 +3 33587 33743 34284 +3 33587 34284 34145 +3 33588 34146 34285 +3 33588 34285 33744 +3 33589 35563 36327 +3 33589 36327 34364 +3 33590 34365 36328 +3 33590 36328 35564 +3 33591 34909 36120 +3 33591 36120 35739 +3 33592 35740 36121 +3 33592 36121 34910 +3 33593 36239 37015 +3 33593 37015 34543 +3 33594 34544 37016 +3 33594 37016 36240 +3 33595 34440 35484 +3 33595 35484 34633 +3 33596 34634 35485 +3 33596 35485 34441 +3 33597 34282 34796 +3 33597 34796 34137 +3 33598 34138 34797 +3 33598 34797 34283 +3 33599 34288 35290 +3 33599 35290 34606 +3 33600 34607 35291 +3 33600 35291 34289 +3 33601 33826 34018 +3 33601 34018 33790 +3 33602 33791 34019 +3 33602 34019 33827 +3 33603 34123 34162 +3 33604 34163 34124 +3 33605 33789 34010 +3 33605 34010 33826 +3 33606 33827 34011 +3 33606 34011 33789 +3 33607 34193 36231 +3 33607 36231 35655 +3 33608 35656 36232 +3 33608 36232 34194 +3 33609 33944 34004 +3 33609 34004 33670 +3 33610 33671 34005 +3 33610 34005 33945 +3 33611 33780 34211 +3 33611 34211 34062 +3 33612 34063 34212 +3 33612 34212 33781 +3 33613 34619 35015 +3 33613 35015 34032 +3 33614 34033 35016 +3 33614 35016 34620 +3 33615 33641 36333 +3 33615 36333 36276 +3 33616 36277 36334 +3 33616 36334 33641 +3 33617 34989 35023 +3 33617 35023 33642 +3 33618 33642 35024 +3 33618 35024 34990 +3 33619 34486 36787 +3 33619 36787 36015 +3 33620 36016 36788 +3 33620 36788 34487 +3 33621 35230 36539 +3 33621 36539 34913 +3 33622 34914 36540 +3 33622 36540 35231 +3 33623 34368 34557 +3 33624 34558 34369 +3 33625 33972 34058 +3 33625 34058 33693 +3 33626 33694 34059 +3 33626 34059 33973 +3 33627 33729 34084 +3 33627 34084 33966 +3 33628 33967 34085 +3 33628 34085 33730 +3 33629 34903 35969 +3 33629 35969 34679 +3 33630 34680 35970 +3 33630 35970 34904 +3 33631 34119 35125 +3 33631 35125 34625 +3 33632 34626 35126 +3 33632 35126 34120 +3 33633 33864 34268 +3 33633 34268 34020 +3 33634 34021 34269 +3 33634 34269 33865 +3 33635 34158 34467 +3 33635 34467 33921 +3 33636 33922 34468 +3 33636 34468 34159 +3 33637 33911 34016 +3 33637 34016 33733 +3 33638 33734 34017 +3 33638 34017 33912 +3 33639 34330 36284 +3 33639 36284 35580 +3 33640 35581 36285 +3 33640 36285 34331 +3 33641 36334 36333 +3 33642 35023 35024 +3 33643 34602 34995 +3 33643 34995 34034 +3 33644 34035 34996 +3 33644 34996 34603 +3 33645 33961 34483 +3 33645 34483 33960 +3 33646 34166 35599 +3 33646 35599 35067 +3 33647 35068 35600 +3 33647 35600 34167 +3 33648 33649 35439 +3 33648 35439 35410 +3 33649 35411 35439 +3 33650 35328 36084 +3 33650 36084 34360 +3 33651 34361 36085 +3 33651 36085 35329 +3 33652 34675 36862 +3 33652 36862 35947 +3 33653 35948 36863 +3 33653 36863 34676 +3 33654 33701 34314 +3 33654 34314 34272 +3 33655 34273 34315 +3 33655 34315 33702 +3 33656 34224 34511 +3 33656 34511 33905 +3 33657 33906 34512 +3 33657 34512 34225 +3 33658 33828 34121 +3 33658 34121 33923 +3 33659 33924 34122 +3 33659 34122 33829 +3 33660 34913 36193 +3 33660 36193 34909 +3 33661 34910 36194 +3 33661 36194 34914 +3 33662 35127 36375 +3 33662 36375 34927 +3 33663 34928 36376 +3 33663 36376 35128 +3 33664 36173 36699 +3 33664 36699 34217 +3 33665 34218 36700 +3 33665 36700 36174 +3 33666 33690 34579 +3 33666 34579 34521 +3 33667 34522 34580 +3 33667 34580 33690 +3 33668 36345 37453 +3 33668 37453 34949 +3 33669 34950 37454 +3 33669 37454 36346 +3 33670 34004 34065 +3 33670 34065 33840 +3 33671 33841 34066 +3 33671 34066 34005 +3 33672 34390 36637 +3 33672 36637 35962 +3 33673 35963 36638 +3 33673 36638 34391 +3 33674 33919 34402 +3 33674 34402 34141 +3 33675 34142 34403 +3 33675 34403 33920 +3 33676 34040 35240 +3 33676 35240 34858 +3 33677 34859 35241 +3 33677 35241 34041 +3 33678 33923 34131 +3 33678 34131 33858 +3 33679 33859 34132 +3 33679 34132 33924 +3 33680 34228 36189 +3 33680 36189 35617 +3 33681 35618 36190 +3 33681 36190 34229 +3 33682 34030 35210 +3 33682 35210 34860 +3 33683 34861 35211 +3 33683 35211 34031 +3 33684 34854 35324 +3 33684 35324 34180 +3 33685 34181 35325 +3 33685 35325 34855 +3 33686 34513 35807 +3 33686 35807 34951 +3 33687 34952 35808 +3 33687 35808 34514 +3 33688 34278 35113 +3 33688 35113 34515 +3 33689 34516 35114 +3 33689 35114 34279 +3 33690 34580 34579 +3 33691 34042 34831 +3 33691 34831 34465 +3 33692 34466 34832 +3 33692 34832 34043 +3 33693 34058 34096 +3 33693 34096 33714 +3 33694 33714 34097 +3 33694 34097 34059 +3 33695 34398 34885 +3 33695 34885 34176 +3 33696 34177 34886 +3 33696 34886 34399 +3 33697 34961 36343 +3 33697 36343 34925 +3 33698 34926 36344 +3 33698 36344 34962 +3 33699 34260 34669 +3 33699 34669 34086 +3 33700 34087 34670 +3 33700 34670 34261 +3 33701 33702 34329 +3 33701 34329 34314 +3 33702 34315 34329 +3 33703 34088 34717 +3 33703 34717 34089 +3 33704 34104 34304 +3 33704 34304 33868 +3 33705 33869 34305 +3 33705 34305 34105 +3 33706 33948 35198 +3 33706 35198 34944 +3 33707 34945 35199 +3 33707 35199 33949 +3 33708 34127 35218 +3 33708 35218 34798 +3 33709 34799 35219 +3 33709 35219 34128 +3 33710 34276 35587 +3 33710 35587 34975 +3 33711 34976 35588 +3 33711 35588 34277 +3 33712 34499 36509 +3 33712 36509 35812 +3 33713 35813 36510 +3 33713 36510 34500 +3 33714 34096 34097 +3 33715 34713 35631 +3 33715 35631 34583 +3 33716 34584 35632 +3 33716 35632 34714 +3 33717 33907 34352 +3 33717 34352 34125 +3 33718 34126 34353 +3 33718 34353 33908 +3 33719 34068 34709 +3 33719 34709 34340 +3 33720 34341 34710 +3 33720 34710 34069 +3 33721 35273 36013 +3 33721 36013 34438 +3 33722 34439 36014 +3 33722 36014 35274 +3 33723 33998 34164 +3 33723 34164 33854 +3 33724 33855 34165 +3 33724 34165 33999 +3 33725 33935 34501 +3 33725 34501 34258 +3 33726 34259 34502 +3 33726 34502 33936 +3 33727 35406 37323 +3 33727 37323 35798 +3 33728 35801 37324 +3 33728 37324 35407 +3 33729 33776 34151 +3 33729 34151 34084 +3 33730 34085 34152 +3 33730 34152 33777 +3 33731 34022 34160 +3 33731 34160 33842 +3 33732 33843 34161 +3 33732 34161 34023 +3 33733 34016 34094 +3 33733 34094 33778 +3 33734 33779 34095 +3 33734 34095 34017 +3 33735 34230 34929 +3 33735 34929 34416 +3 33736 34417 34930 +3 33736 34930 34231 +3 33737 33962 34862 +3 33737 34862 34600 +3 33738 34601 34863 +3 33738 34863 33963 +3 33739 34418 34699 +3 33739 34699 33994 +3 33740 33995 34700 +3 33740 34700 34419 +3 33741 35470 37231 +3 33741 37231 35673 +3 33742 35674 37232 +3 33742 37232 35471 +3 33743 33899 34414 +3 33743 34414 34284 +3 33744 34285 34415 +3 33744 34415 33900 +3 33745 34020 34338 +3 33745 34338 34248 +3 33746 34249 34339 +3 33746 34339 34021 +3 33747 34830 35415 +3 33747 35415 34308 +3 33748 34309 35416 +3 33748 35416 34830 +3 33749 35135 35466 +3 33749 35466 34080 +3 33750 34081 35467 +3 33750 35467 35136 +3 33751 34064 34774 +3 33751 34774 34450 +3 33752 34451 34775 +3 33752 34775 34067 +3 33753 34790 36052 +3 33753 36052 34969 +3 33754 34970 36053 +3 33754 36053 34791 +3 33755 34764 36289 +3 33755 36289 35246 +3 33756 35247 36290 +3 33756 36290 34765 +3 33757 34689 35386 +3 33757 35386 34461 +3 33758 34462 35387 +3 33758 35387 34690 +3 33759 34408 34947 +3 33759 34947 34282 +3 33760 34283 34948 +3 33760 34948 34409 +3 33761 34463 34661 +3 33761 34661 33941 +3 33762 33942 34662 +3 33762 34662 34464 +3 33763 34633 35665 +3 33763 35665 34728 +3 33764 34729 35666 +3 33764 35666 34634 +3 33765 33968 34874 +3 33765 34874 34647 +3 33766 34648 34875 +3 33766 34875 33969 +3 33767 35557 37499 +3 33767 37499 35909 +3 33768 35910 37500 +3 33768 37500 35558 +3 33769 34657 35013 +3 33769 35013 34147 +3 33770 34148 35014 +3 33770 35014 34658 +3 33771 35358 35760 +3 33771 35760 34129 +3 33772 34130 35761 +3 33772 35761 35359 +3 33773 34342 35569 +3 33773 35569 34343 +3 33774 35687 36185 +3 33774 36185 34306 +3 33775 34307 36186 +3 33775 36186 35688 +3 33776 33792 34185 +3 33776 34185 34151 +3 33777 34152 34186 +3 33777 34186 33793 +3 33778 34094 34183 +3 33778 34183 33792 +3 33779 33793 34184 +3 33779 34184 34095 +3 33780 33984 34459 +3 33780 34459 34211 +3 33781 34212 34460 +3 33781 34460 33985 +3 33782 34388 34575 +3 33782 34575 33939 +3 33783 33940 34576 +3 33783 34576 34389 +3 33784 35798 37347 +3 33784 37347 35518 +3 33785 35519 37348 +3 33785 37348 35801 +3 33786 34454 36606 +3 33786 36606 35364 +3 33787 35365 36607 +3 33787 36607 34455 +3 33788 34678 36504 +3 33788 36504 34677 +3 33789 34011 34182 +3 33789 34182 34010 +3 33790 34018 34178 +3 33790 34178 33911 +3 33791 33912 34179 +3 33791 34179 34019 +3 33792 34183 34185 +3 33793 34186 34184 +3 33794 36138 36705 +3 33794 36705 34693 +3 33795 34694 36706 +3 33795 36706 36139 +3 33796 35605 36888 +3 33796 36888 35127 +3 33797 35128 36889 +3 33797 36889 35606 +3 33798 34635 35224 +3 33798 35224 34424 +3 33799 34425 35225 +3 33799 35225 34636 +3 33800 36493 37239 +3 33800 37239 34695 +3 33801 34696 37240 +3 33801 37240 36494 +3 33802 35637 36529 +3 33802 36529 34705 +3 33803 34706 36530 +3 33803 36530 35638 +3 33804 35412 36181 +3 33804 36181 34555 +3 33805 34556 36182 +3 33805 36182 35412 +3 33806 34078 34264 +3 33806 34264 33998 +3 33807 33999 34265 +3 33807 34265 34079 +3 33808 34400 34981 +3 33808 34981 34408 +3 33809 34409 34982 +3 33809 34982 34401 +3 33810 34623 37367 +3 33810 37367 36675 +3 33811 36676 37368 +3 33811 37368 34624 +3 33812 35101 36669 +3 33812 36669 35442 +3 33813 35443 36672 +3 33813 36672 35102 +3 33814 34334 34758 +3 33814 34758 34224 +3 33815 34225 34759 +3 33815 34759 34335 +3 33816 35659 36365 +3 33816 36365 34573 +3 33817 34574 36366 +3 33817 36366 35660 +3 33818 34416 34987 +3 33818 34987 34400 +3 33819 34401 34988 +3 33819 34988 34417 +3 33820 34141 34563 +3 33820 34563 34226 +3 33821 34227 34564 +3 33821 34564 34142 +3 33822 34610 35047 +3 33822 35047 34256 +3 33823 34257 35048 +3 33823 35048 34610 +3 33824 34258 34768 +3 33824 34768 34327 +3 33825 34328 34769 +3 33825 34769 34259 +3 33826 34010 34219 +3 33826 34219 34018 +3 33827 34019 34220 +3 33827 34220 34011 +3 33828 33966 34270 +3 33828 34270 34121 +3 33829 34122 34271 +3 33829 34271 33967 +3 33830 35673 37753 +3 33830 37753 36218 +3 33831 36219 37754 +3 33831 37754 35674 +3 33832 35516 37118 +3 33832 37118 35607 +3 33833 35608 37119 +3 33833 37119 35517 +3 33834 34317 34651 +3 33834 34651 34158 +3 33835 34159 34652 +3 33835 34652 34318 +3 33836 34205 34547 +3 33836 34547 34201 +3 33837 34202 34548 +3 33837 34548 34206 +3 33838 34262 36011 +3 33838 36011 35578 +3 33839 35579 36012 +3 33839 36012 34263 +3 33840 34065 34292 +3 33840 34292 34078 +3 33841 34079 34293 +3 33841 34293 34066 +3 33842 34160 34266 +3 33842 34266 33944 +3 33843 33945 34267 +3 33843 34267 34161 +3 33844 35165 35699 +3 33844 35699 34348 +3 33845 34349 35700 +3 33845 35700 35166 +3 33846 34967 37695 +3 33846 37695 36750 +3 33847 36751 37696 +3 33847 37696 34968 +3 33848 34201 34481 +3 33848 34481 34104 +3 33849 34105 34482 +3 33849 34482 34202 +3 33850 34125 34507 +3 33850 34507 34205 +3 33851 34206 34508 +3 33851 34508 34126 +3 33852 34901 37429 +3 33852 37429 36533 +3 33853 36534 37430 +3 33853 37430 34902 +3 33854 34164 34286 +3 33854 34286 33972 +3 33855 33973 34287 +3 33855 34287 34165 +3 33856 35607 37131 +3 33856 37131 35557 +3 33857 35558 37132 +3 33857 37132 35608 +3 33858 34131 34296 +3 33858 34296 34022 +3 33859 34023 34297 +3 33859 34297 34132 +3 33860 34327 34792 +3 33860 34792 34321 +3 33861 34322 34793 +3 33861 34793 34328 +3 33862 34907 35180 +3 33862 35180 34114 +3 33863 34115 35181 +3 33863 35181 34908 +3 33864 34062 34477 +3 33864 34477 34268 +3 33865 34269 34478 +3 33865 34478 34063 +3 33866 34321 34800 +3 33866 34800 34334 +3 33867 34335 34801 +3 33867 34801 34322 +3 33868 34304 34471 +3 33868 34471 34000 +3 33869 34001 34472 +3 33869 34472 34305 +3 33870 34606 35553 +3 33870 35553 34786 +3 33871 34787 35554 +3 33871 35554 34607 +3 33872 34475 35903 +3 33872 35903 35314 +3 33873 35315 35904 +3 33873 35904 34476 +3 33874 34728 35705 +3 33874 35705 34713 +3 33875 34714 35706 +3 33875 35706 34729 +3 33876 34515 35288 +3 33876 35288 34671 +3 33877 34672 35289 +3 33877 35289 34516 +3 33878 34788 35669 +3 33878 35669 35360 +3 33879 35361 35670 +3 33879 35670 34789 +3 33880 34378 36718 +3 33880 36718 36261 +3 33881 36262 36719 +3 33881 36719 34379 +3 33882 34226 34498 +3 33882 34498 34227 +3 33883 34469 35261 +3 33883 35261 34921 +3 33884 34922 35262 +3 33884 35262 34470 +3 33885 35037 35778 +3 33885 35778 34591 +3 33886 34592 35779 +3 33886 35779 35038 +3 33887 35129 35647 +3 33887 35647 34386 +3 33888 34387 35648 +3 33888 35648 35130 +3 33889 34528 36154 +3 33889 36154 35490 +3 33890 35491 36155 +3 33890 36155 34529 +3 33891 34565 36363 +3 33891 36363 35737 +3 33892 35738 36364 +3 33892 36364 34566 +3 33893 34843 37078 +3 33893 37078 36191 +3 33894 36192 37079 +3 33894 37079 34844 +3 33895 34394 35527 +3 33895 35527 35007 +3 33896 35008 35528 +3 33896 35528 34395 +3 33897 35733 36441 +3 33897 36441 34519 +3 33898 34520 36442 +3 33898 36442 35734 +3 33899 34050 34559 +3 33899 34559 34414 +3 33900 34415 34560 +3 33900 34560 34051 +3 33901 35131 36161 +3 33901 36161 34903 +3 33902 34904 36162 +3 33902 36162 35132 +3 33903 35482 36742 +3 33903 36742 35230 +3 33904 35231 36743 +3 33904 36743 35483 +3 33905 34511 34724 +3 33905 34724 34139 +3 33906 34140 34725 +3 33906 34725 34512 +3 33907 34106 34561 +3 33907 34561 34352 +3 33908 34353 34562 +3 33908 34562 34107 +3 33909 36233 36985 +3 33909 36985 34782 +3 33910 34783 36986 +3 33910 36986 36234 +3 33911 34178 34290 +3 33911 34290 34016 +3 33912 34017 34291 +3 33912 34291 34179 +3 33913 34641 36017 +3 33913 36017 35282 +3 33914 35283 36018 +3 33914 36018 34642 +3 33915 36665 36728 +3 33915 36728 33943 +3 33916 33943 36729 +3 33916 36729 36666 +3 33917 35133 36007 +3 33917 36007 34788 +3 33918 34789 36008 +3 33918 36008 35134 +3 33919 34145 34631 +3 33919 34631 34402 +3 33920 34403 34632 +3 33920 34632 34146 +3 33921 34467 34722 +3 33921 34722 34174 +3 33922 34175 34723 +3 33922 34723 34468 +3 33923 34121 34354 +3 33923 34354 34131 +3 33924 34132 34355 +3 33924 34355 34122 +3 33925 34806 35589 +3 33925 35589 34689 +3 33926 34690 35590 +3 33926 35590 34807 +3 33927 34891 37481 +3 33927 37481 36647 +3 33928 36648 37482 +3 33928 37482 34892 +3 33929 34426 35501 +3 33929 35501 34973 +3 33930 34974 35502 +3 33930 35502 34427 +3 33931 34969 36183 +3 33931 36183 35131 +3 33932 35132 36184 +3 33932 36184 34970 +3 33933 34517 35877 +3 33933 35877 35476 +3 33934 35477 35878 +3 33934 35878 34518 +3 33935 34117 34697 +3 33935 34697 34501 +3 33936 34502 34698 +3 33936 34698 34118 +3 33937 35186 35701 +3 33937 35701 34356 +3 33938 34357 35702 +3 33938 35702 35187 +3 33939 34575 34818 +3 33939 34818 34072 +3 33940 34073 34819 +3 33940 34819 34576 +3 33941 34661 34816 +3 33941 34816 34100 +3 33942 34101 34817 +3 33942 34817 34662 +3 33943 36728 36729 +3 33944 34266 34336 +3 33944 34336 34004 +3 33945 34005 34337 +3 33945 34337 34267 +3 33946 34340 34957 +3 33946 34957 34541 +3 33947 34542 34958 +3 33947 34958 34341 +3 33948 34168 35421 +3 33948 35421 35198 +3 33949 35199 35422 +3 33949 35422 34169 +3 33950 34350 35883 +3 33950 35883 35472 +3 33951 35473 35884 +3 33951 35884 34351 +3 33952 36355 37287 +3 33952 37287 35009 +3 33953 35010 37288 +3 33953 37288 36356 +3 33954 34887 36860 +3 33954 36860 36001 +3 33955 36002 36861 +3 33955 36861 34888 +3 33956 35308 37874 +3 33956 37874 36730 +3 33957 36731 37875 +3 33957 37875 35309 +3 33958 36485 37257 +3 33958 37257 34870 +3 33959 34871 37258 +3 33959 37258 36486 +3 33960 34483 34780 +3 33960 34780 34260 +3 33961 34261 34781 +3 33961 34781 34483 +3 33962 34187 35085 +3 33962 35085 34862 +3 33963 34863 35086 +3 33963 35086 34188 +3 33964 35055 36104 +3 33964 36104 34993 +3 33965 34994 36105 +3 33965 36105 35056 +3 33966 34084 34404 +3 33966 34404 34270 +3 33967 34271 34405 +3 33967 34405 34085 +3 33968 34298 35077 +3 33968 35077 34874 +3 33969 34875 35078 +3 33969 35078 34299 +3 33970 35384 36481 +3 33970 36481 35055 +3 33971 35056 36482 +3 33971 36482 35385 +3 33972 34286 34380 +3 33972 34380 34058 +3 33973 34059 34381 +3 33973 34381 34287 +3 33974 34750 35419 +3 33974 35419 34635 +3 33975 34636 35420 +3 33975 35420 34751 +3 33976 34589 37096 +3 33976 37096 36585 +3 33977 36586 37097 +3 33977 37097 34590 +3 33978 34585 35950 +3 33978 35950 35344 +3 33979 35345 35951 +3 33979 35951 34586 +3 33980 36253 36630 +3 33980 36630 35382 +3 33981 35383 36631 +3 33981 36631 36254 +3 33982 34911 35304 +3 33982 35304 34366 +3 33983 34367 35305 +3 33983 35305 34912 +3 33984 34189 34665 +3 33984 34665 34459 +3 33985 34460 34666 +3 33985 34666 34190 +3 33986 34671 35417 +3 33986 35417 34742 +3 33987 34743 35418 +3 33987 35418 34672 +3 33988 35232 35857 +3 33988 35857 34611 +3 33989 34612 35858 +3 33989 35858 35233 +3 33990 36165 36732 +3 33990 36732 34621 +3 33991 34622 36733 +3 33991 36733 36166 +3 33992 34786 35703 +3 33992 35703 34866 +3 33993 34867 35704 +3 33993 35704 34787 +3 33994 34699 34941 +3 33994 34941 34222 +3 33995 34223 34942 +3 33995 34942 34700 +3 33996 35492 36054 +3 33996 36054 34577 +3 33997 34578 36055 +3 33997 36055 35493 +3 33998 34264 34434 +3 33998 34434 34164 +3 33999 34165 34435 +3 33999 34435 34265 +3 34000 34471 34597 +3 34000 34597 34123 +3 34001 34124 34598 +3 34001 34598 34472 +3 34002 36421 37045 +3 34002 37045 34762 +3 34003 34763 37046 +3 34003 37046 36422 +3 34004 34336 34406 +3 34004 34406 34065 +3 34005 34066 34407 +3 34005 34407 34337 +3 34006 35394 37021 +3 34006 37021 35752 +3 34007 35753 37022 +3 34007 37022 35395 +3 34008 34828 36847 +3 34008 36847 36116 +3 34009 36117 36848 +3 34009 36848 34829 +3 34010 34182 34420 +3 34010 34420 34219 +3 34011 34220 34421 +3 34011 34421 34182 +3 34012 34866 35697 +3 34012 35697 34806 +3 34013 34807 35698 +3 34013 35698 34867 +3 34014 34294 35033 +3 34014 35033 34734 +3 34015 34735 35034 +3 34015 35034 34295 +3 34016 34290 34374 +3 34016 34374 34094 +3 34017 34095 34375 +3 34017 34375 34291 +3 34018 34219 34412 +3 34018 34412 34178 +3 34019 34179 34413 +3 34019 34413 34220 +3 34020 34268 34613 +3 34020 34613 34338 +3 34021 34339 34614 +3 34021 34614 34269 +3 34022 34296 34446 +3 34022 34446 34160 +3 34023 34161 34447 +3 34023 34447 34297 +3 34024 36206 37736 +3 34024 37736 35820 +3 34025 35821 37737 +3 34025 37737 36207 +3 34026 36092 36768 +3 34026 36768 34766 +3 34027 34767 36769 +3 34027 36769 36093 +3 34028 35364 36829 +3 34028 36829 35584 +3 34029 35585 36830 +3 34029 36830 35365 +3 34030 34362 35555 +3 34030 35555 35210 +3 34031 35211 35556 +3 34031 35556 34363 +3 34032 35015 35378 +3 34032 35378 34376 +3 34033 34377 35379 +3 34033 35379 35016 +3 34034 34995 35342 +3 34034 35342 34344 +3 34035 34345 35343 +3 34035 35343 34996 +3 34036 35719 36204 +3 34036 36204 34509 +3 34037 34510 36205 +3 34037 36205 35720 +3 34038 35139 35979 +3 34038 35979 34494 +3 34039 34495 35980 +3 34039 35980 35140 +3 34040 34358 35603 +3 34040 35603 35240 +3 34041 35241 35604 +3 34041 35604 34359 +3 34042 34332 35159 +3 34042 35159 34831 +3 34043 34832 35160 +3 34043 35160 34333 +3 34044 34593 36369 +3 34044 36369 35842 +3 34045 35843 36370 +3 34045 36370 34594 +3 34046 34742 35408 +3 34046 35408 34750 +3 34047 34751 35409 +3 34047 35409 34743 +3 34048 35312 36349 +3 34048 36349 35089 +3 34049 35090 36350 +3 34049 36350 35313 +3 34050 34162 34687 +3 34050 34687 34559 +3 34051 34560 34688 +3 34051 34688 34163 +3 34052 36325 37917 +3 34052 37917 35919 +3 34053 35920 37918 +3 34053 37918 36326 +3 34054 35923 36009 +3 34054 36009 34111 +3 34055 34112 36010 +3 34055 36010 35924 +3 34056 35382 36687 +3 34056 36687 35394 +3 34057 35395 36688 +3 34057 36688 35383 +3 34058 34380 34436 +3 34058 34436 34096 +3 34059 34097 34437 +3 34059 34437 34381 +3 34060 35729 36199 +3 34060 36199 34523 +3 34061 34524 36200 +3 34061 36200 35730 +3 34062 34211 34645 +3 34062 34645 34477 +3 34063 34478 34646 +3 34063 34646 34212 +3 34064 34465 35234 +3 34064 35234 34774 +3 34065 34406 34292 +3 34066 34293 34407 +3 34067 34775 35235 +3 34067 35235 34466 +3 34068 34372 35061 +3 34068 35061 34709 +3 34069 34710 35062 +3 34069 35062 34373 +3 34070 36140 36685 +3 34070 36685 34667 +3 34071 34668 36686 +3 34071 36686 36141 +3 34072 34818 34931 +3 34072 34931 34156 +3 34073 34157 34932 +3 34073 34932 34819 +3 34074 34784 36321 +3 34074 36321 35576 +3 34075 35577 36322 +3 34075 36322 34785 +3 34076 34820 36641 +3 34076 36641 35885 +3 34077 35886 36642 +3 34077 36642 34821 +3 34078 34292 34505 +3 34078 34505 34264 +3 34079 34265 34506 +3 34079 34506 34293 +3 34080 35466 35799 +3 34080 35799 34384 +3 34081 34385 35800 +3 34081 35800 35467 +3 34082 34720 36401 +3 34082 36401 35776 +3 34083 35777 36402 +3 34083 36402 34721 +3 34084 34151 34484 +3 34084 34484 34404 +3 34085 34405 34485 +3 34085 34485 34152 +3 34086 34669 35019 +3 34086 35019 34418 +3 34087 34419 35020 +3 34087 35020 34670 +3 34088 34450 35119 +3 34088 35119 34717 +3 34089 34717 35120 +3 34089 35120 34451 +3 34090 35909 37763 +3 34090 37763 36206 +3 34091 36207 37764 +3 34091 37764 35910 +3 34092 34951 36187 +3 34092 36187 35267 +3 34093 35268 36188 +3 34093 36188 34952 +3 34094 34374 34479 +3 34094 34479 34183 +3 34095 34184 34480 +3 34095 34480 34375 +3 34096 34436 34458 +3 34096 34458 34097 +3 34097 34458 34437 +3 34098 36331 36975 +3 34098 36975 34937 +3 34099 34938 36976 +3 34099 36976 36332 +3 34100 34816 34953 +3 34100 34953 34240 +3 34101 34241 34954 +3 34101 34954 34817 +3 34102 34971 35298 +3 34102 35298 34398 +3 34103 34399 35299 +3 34103 35299 34972 +3 34104 34481 34703 +3 34104 34703 34304 +3 34105 34305 34704 +3 34105 34704 34482 +3 34106 34248 34718 +3 34106 34718 34561 +3 34107 34562 34719 +3 34107 34719 34249 +3 34108 34625 35511 +3 34108 35511 34626 +3 34109 35017 37649 +3 34109 37649 36831 +3 34110 36832 37650 +3 34110 37650 35018 +3 34111 36009 36043 +3 34111 36043 34112 +3 34112 36043 36010 +3 34113 35442 36874 +3 34113 36874 35482 +3 34114 35180 35392 +3 34114 35392 34325 +3 34115 34326 35393 +3 34115 35393 35181 +3 34116 35483 36875 +3 34116 36875 35443 +3 34117 34240 34850 +3 34117 34850 34697 +3 34118 34698 34851 +3 34118 34851 34241 +3 34119 34553 35582 +3 34119 35582 35125 +3 34120 35126 35583 +3 34120 35583 34554 +3 34121 34270 34526 +3 34121 34526 34354 +3 34122 34355 34527 +3 34122 34527 34271 +3 34123 34597 34653 +3 34123 34653 34162 +3 34124 34163 34654 +3 34124 34654 34598 +3 34125 34352 34746 +3 34125 34746 34507 +3 34126 34508 34747 +3 34126 34747 34353 +3 34127 34242 35362 +3 34127 35362 35218 +3 34128 35219 35363 +3 34128 35363 34243 +3 34129 35760 36076 +3 34129 36076 34442 +3 34130 34443 36077 +3 34130 36077 35761 +3 34131 34354 34536 +3 34131 34536 34296 +3 34132 34297 34537 +3 34132 34537 34355 +3 34133 35830 37019 +3 34133 37019 34839 +3 34134 34840 37020 +3 34134 37020 35831 +3 34135 35246 36626 +3 34135 36626 35521 +3 34136 35524 36627 +3 34136 36627 35247 +3 34137 34796 35073 +3 34137 35073 34368 +3 34138 34369 35074 +3 34138 35074 34797 +3 34139 34724 34933 +3 34139 34933 34317 +3 34140 34318 34934 +3 34140 34934 34725 +3 34141 34402 34837 +3 34141 34837 34563 +3 34142 34564 34838 +3 34142 34838 34403 +3 34143 35975 37538 +3 34143 37538 35893 +3 34144 35894 37539 +3 34144 37539 35976 +3 34145 34284 34794 +3 34145 34794 34631 +3 34146 34632 34795 +3 34146 34795 34285 +3 34147 35013 35503 +3 34147 35503 34602 +3 34148 34603 35504 +3 34148 35504 35014 +3 34149 34889 35999 +3 34149 35999 35220 +3 34150 35221 36000 +3 34150 36000 34890 +3 34151 34185 34539 +3 34151 34539 34484 +3 34152 34485 34540 +3 34152 34540 34186 +3 34153 35919 37550 +3 34153 37550 35975 +3 34154 35976 37551 +3 34154 37551 35920 +3 34155 35099 36948 +3 34155 36948 35100 +3 34156 34931 35003 +3 34156 35003 34203 +3 34157 34204 35004 +3 34157 35004 34932 +3 34158 34651 34977 +3 34158 34977 34467 +3 34159 34468 34978 +3 34159 34978 34652 +3 34160 34446 34571 +3 34160 34571 34266 +3 34161 34267 34572 +3 34161 34572 34447 +3 34162 34653 34687 +3 34163 34688 34654 +3 34164 34434 34581 +3 34164 34581 34286 +3 34165 34287 34582 +3 34165 34582 34435 +3 34166 34213 35754 +3 34166 35754 35599 +3 34167 35600 35755 +3 34167 35755 34214 +3 34168 35155 35421 +3 34169 35422 35156 +3 34170 35115 37168 +3 34170 37168 36602 +3 34171 36603 37169 +3 34171 37169 35116 +3 34172 35584 37389 +3 34172 37389 36078 +3 34173 36079 37390 +3 34173 37390 35585 +3 34174 34722 34963 +3 34174 34963 34388 +3 34175 34389 34964 +3 34175 34964 34723 +3 34176 34885 35352 +3 34176 35352 34619 +3 34177 34620 35353 +3 34177 35353 34886 +3 34178 34412 34532 +3 34178 34532 34290 +3 34179 34291 34533 +3 34179 34533 34413 +3 34180 35324 35832 +3 34180 35832 34643 +3 34181 34644 35833 +3 34181 35833 35325 +3 34182 34421 34538 +3 34182 34538 34420 +3 34183 34479 34549 +3 34183 34549 34185 +3 34184 34186 34550 +3 34184 34550 34480 +3 34185 34549 34539 +3 34186 34540 34550 +3 34187 34382 35253 +3 34187 35253 35085 +3 34188 35086 35254 +3 34188 35254 34383 +3 34189 34272 34824 +3 34189 34824 34665 +3 34190 34666 34825 +3 34190 34825 34273 +3 34191 35762 36319 +3 34191 36319 34754 +3 34192 34755 36320 +3 34192 36320 35763 +3 34193 34770 36722 +3 34193 36722 36231 +3 34194 36232 36723 +3 34194 36723 34771 +3 34195 35846 36857 +3 34195 36857 35312 +3 34196 35313 36858 +3 34196 36858 35847 +3 34197 34991 36661 +3 34197 36661 35895 +3 34198 35896 36662 +3 34198 36662 34992 +3 34199 35338 36282 +3 34199 36282 35133 +3 34200 35134 36283 +3 34200 36283 35339 +3 34201 34547 34814 +3 34201 34814 34481 +3 34202 34482 34815 +3 34202 34815 34548 +3 34203 35003 35049 +3 34203 35049 34221 +3 34204 34221 35050 +3 34204 35050 35004 +3 34205 34507 34841 +3 34205 34841 34547 +3 34206 34548 34842 +3 34206 34842 34508 +3 34207 35956 37175 +3 34207 37175 35605 +3 34208 35606 37176 +3 34208 37176 35957 +3 34209 34232 37082 +3 34209 37082 37005 +3 34210 37006 37083 +3 34210 37083 34232 +3 34211 34459 34880 +3 34211 34880 34645 +3 34212 34646 34881 +3 34212 34881 34460 +3 34213 34239 35796 +3 34213 35796 35754 +3 34214 35755 35797 +3 34214 35797 34239 +3 34215 35641 36527 +3 34215 36527 35139 +3 34216 35140 36528 +3 34216 36528 35642 +3 34217 36699 37148 +3 34217 37148 34756 +3 34218 34757 37149 +3 34218 37149 36700 +3 34219 34420 34604 +3 34219 34604 34412 +3 34220 34413 34605 +3 34220 34605 34421 +3 34221 35049 35050 +3 34222 34941 35105 +3 34222 35105 34463 +3 34223 34464 35106 +3 34223 35106 34942 +3 34224 34758 35075 +3 34224 35075 34511 +3 34225 34512 35076 +3 34225 35076 34759 +3 34226 34563 34835 +3 34226 34835 34498 +3 34227 34498 34836 +3 34227 34836 34564 +3 34228 35194 37029 +3 34228 37029 36189 +3 34229 36190 37030 +3 34229 37030 35195 +3 34230 34734 35431 +3 34230 35431 34929 +3 34231 34930 35432 +3 34231 35432 34735 +3 34232 37083 37082 +3 34233 35031 36716 +3 34233 36716 35966 +3 34234 35966 36717 +3 34234 36717 35032 +3 34235 37011 37915 +3 34235 37915 35269 +3 34236 35270 37916 +3 34236 37916 37012 +3 34237 35601 36691 +3 34237 36691 35384 +3 34238 35385 36692 +3 34238 36692 35602 +3 34239 35797 35796 +3 34240 34953 34850 +3 34241 34851 34954 +3 34242 34274 35474 +3 34242 35474 35362 +3 34243 35363 35475 +3 34243 35475 34275 +3 34244 36632 37568 +3 34244 37568 35242 +3 34245 35243 37569 +3 34245 37569 36633 +3 34246 35685 36311 +3 34246 36311 34878 +3 34247 34879 36312 +3 34247 36312 35686 +3 34248 34338 34848 +3 34248 34848 34718 +3 34249 34719 34849 +3 34249 34849 34339 +3 34250 35182 37445 +3 34250 37445 36643 +3 34251 36644 37446 +3 34251 37446 35183 +3 34252 35043 36892 +3 34252 36892 36214 +3 34253 36215 36893 +3 34253 36893 35044 +3 34254 35370 37681 +3 34254 37681 36736 +3 34255 36737 37682 +3 34255 37682 35371 +3 34256 35047 35480 +3 34256 35480 34657 +3 34257 34658 35481 +3 34257 35481 35048 +3 34258 34501 35053 +3 34258 35053 34768 +3 34259 34769 35054 +3 34259 35054 34502 +3 34260 34780 35208 +3 34260 35208 34669 +3 34261 34670 35209 +3 34261 35209 34781 +3 34262 34655 36399 +3 34262 36399 36011 +3 34263 36012 36400 +3 34263 36400 34656 +3 34264 34505 34683 +3 34264 34683 34434 +3 34265 34435 34684 +3 34265 34684 34506 +3 34266 34571 34649 +3 34266 34649 34336 +3 34267 34337 34650 +3 34267 34650 34572 +3 34268 34477 34846 +3 34268 34846 34613 +3 34269 34614 34847 +3 34269 34847 34478 +3 34270 34404 34691 +3 34270 34691 34526 +3 34271 34527 34692 +3 34271 34692 34405 +3 34272 34314 34882 +3 34272 34882 34824 +3 34273 34825 34883 +3 34273 34883 34315 +3 34274 34275 35500 +3 34274 35500 35474 +3 34275 35475 35500 +3 34276 34833 36122 +3 34276 36122 35587 +3 34277 35588 36123 +3 34277 36123 34834 +3 34278 34534 35366 +3 34278 35366 35113 +3 34279 35114 35367 +3 34279 35367 34535 +3 34280 35380 36175 +3 34280 36175 35037 +3 34281 35038 36176 +3 34281 36176 35381 +3 34282 34947 35456 +3 34282 35456 34796 +3 34283 34797 35457 +3 34283 35457 34948 +3 34284 34414 34935 +3 34284 34935 34794 +3 34285 34795 34936 +3 34285 34936 34415 +3 34286 34581 34681 +3 34286 34681 34380 +3 34287 34381 34682 +3 34287 34682 34582 +3 34288 34921 35929 +3 34288 35929 35290 +3 34289 35291 35930 +3 34289 35930 34922 +3 34290 34532 34629 +3 34290 34629 34374 +3 34291 34375 34630 +3 34291 34630 34533 +3 34292 34406 34627 +3 34292 34627 34505 +3 34293 34506 34628 +3 34293 34628 34407 +3 34294 34541 35310 +3 34294 35310 35033 +3 34295 35034 35311 +3 34295 35311 34542 +3 34296 34536 34701 +3 34296 34701 34446 +3 34297 34447 34702 +3 34297 34702 34537 +3 34298 34432 35214 +3 34298 35214 35077 +3 34299 35078 35215 +3 34299 35215 34433 +3 34300 35251 37710 +3 34300 37710 36870 +3 34301 36871 37711 +3 34301 37711 35252 +3 34302 36965 37526 +3 34302 37526 34919 +3 34303 34920 37527 +3 34303 37527 36966 +3 34304 34703 34876 +3 34304 34876 34471 +3 34305 34472 34877 +3 34305 34877 34704 +3 34306 36185 36614 +3 34306 36614 34760 +3 34307 34761 36615 +3 34307 36615 36186 +3 34308 35415 35967 +3 34308 35967 34854 +3 34309 34855 35968 +3 34309 35968 35416 +3 34310 36471 37335 +3 34310 37335 35316 +3 34311 35317 37336 +3 34311 37336 36472 +3 34312 35752 37253 +3 34312 37253 35995 +3 34313 35996 37254 +3 34313 37254 35753 +3 34314 34329 34939 +3 34314 34939 34882 +3 34315 34883 34940 +3 34315 34940 34329 +3 34316 35267 36407 +3 34316 36407 35437 +3 34317 34933 35111 +3 34317 35111 34651 +3 34318 34652 35112 +3 34318 35112 34934 +3 34319 35438 36408 +3 34319 36408 35268 +3 34320 34956 36286 +3 34320 36286 34955 +3 34321 34792 35226 +3 34321 35226 34800 +3 34322 34801 35227 +3 34322 35227 34793 +3 34323 36218 38180 +3 34323 38180 36565 +3 34324 36568 38181 +3 34324 38181 36219 +3 34325 35392 35609 +3 34325 35609 34534 +3 34326 34535 35610 +3 34326 35610 35393 +3 34327 34768 35244 +3 34327 35244 34792 +3 34328 34793 35245 +3 34328 35245 34769 +3 34329 34940 34939 +3 34330 34999 36963 +3 34330 36963 36284 +3 34331 36285 36964 +3 34331 36964 35000 +3 34332 34600 35424 +3 34332 35424 35159 +3 34333 35160 35425 +3 34333 35425 34601 +3 34334 34800 35248 +3 34334 35248 34758 +3 34335 34759 35249 +3 34335 35249 34801 +3 34336 34649 34707 +3 34336 34707 34406 +3 34337 34407 34708 +3 34337 34708 34650 +3 34338 34613 34917 +3 34338 34917 34848 +3 34339 34849 34918 +3 34339 34918 34614 +3 34340 34709 35332 +3 34340 35332 34957 +3 34341 34958 35333 +3 34341 35333 34710 +3 34342 34975 36222 +3 34342 36222 35569 +3 34343 35569 36223 +3 34343 36223 34976 +3 34344 35342 35681 +3 34344 35681 34639 +3 34345 34640 35682 +3 34345 35682 35343 +3 34346 35157 37513 +3 34346 37513 36823 +3 34347 36824 37514 +3 34347 37514 35158 +3 34348 35699 36118 +3 34348 36118 34752 +3 34349 34753 36119 +3 34349 36119 35700 +3 34350 34715 36263 +3 34350 36263 35883 +3 34351 35884 36264 +3 34351 36264 34716 +3 34352 34561 34965 +3 34352 34965 34746 +3 34353 34747 34966 +3 34353 34966 34562 +3 34354 34526 34732 +3 34354 34732 34536 +3 34355 34537 34733 +3 34355 34733 34527 +3 34356 35701 36090 +3 34356 36090 34748 +3 34357 34749 36091 +3 34357 36091 35702 +3 34358 34798 35871 +3 34358 35871 35603 +3 34359 35604 35872 +3 34359 35872 34799 +3 34360 36084 36734 +3 34360 36734 35045 +3 34361 35046 36735 +3 34361 36735 36085 +3 34362 34673 35865 +3 34362 35865 35555 +3 34363 35556 35866 +3 34363 35866 34674 +3 34364 36327 36935 +3 34364 36935 35087 +3 34365 35088 36936 +3 34365 36936 36328 +3 34366 35304 35454 +3 34366 35454 34490 +3 34367 34491 35455 +3 34367 35455 35305 +3 34368 35073 35284 +3 34368 35284 34557 +3 34369 34558 35285 +3 34369 35285 35074 +3 34370 35458 36435 +3 34370 36435 35338 +3 34371 35339 36436 +3 34371 36436 35459 +3 34372 34647 35348 +3 34372 35348 35061 +3 34373 35062 35349 +3 34373 35349 34648 +3 34374 34629 34738 +3 34374 34738 34479 +3 34375 34480 34739 +3 34375 34739 34630 +3 34376 35378 35731 +3 34376 35731 34685 +3 34377 34686 35732 +3 34377 35732 35379 +3 34378 35867 37080 +3 34378 37080 36718 +3 34379 36719 37081 +3 34379 37081 35868 +3 34380 34681 34726 +3 34380 34726 34436 +3 34381 34437 34727 +3 34381 34727 34682 +3 34382 34557 35440 +3 34382 35440 35253 +3 34383 35254 35441 +3 34383 35441 34558 +3 34384 35799 36062 +3 34384 36062 34659 +3 34385 34660 36063 +3 34385 36063 35800 +3 34386 35647 36102 +3 34386 36102 34864 +3 34387 34865 36103 +3 34387 36103 35648 +3 34388 34963 35161 +3 34388 35161 34575 +3 34389 34576 35162 +3 34389 35162 34964 +3 34390 35035 37198 +3 34390 37198 36637 +3 34391 36638 37199 +3 34391 37199 35036 +3 34392 36037 37319 +3 34392 37319 35830 +3 34393 35831 37320 +3 34393 37320 36038 +3 34394 34858 35991 +3 34394 35991 35527 +3 34395 35528 35992 +3 34395 35992 34859 +3 34396 36565 38224 +3 34396 38224 36325 +3 34397 36326 38225 +3 34397 38225 36568 +3 34398 35298 35593 +3 34398 35593 34885 +3 34399 34886 35594 +3 34399 35594 35299 +3 34400 34987 35539 +3 34400 35539 34981 +3 34401 34982 35540 +3 34401 35540 34988 +3 34402 34631 35083 +3 34402 35083 34837 +3 34403 34838 35084 +3 34403 35084 34632 +3 34404 34484 34778 +3 34404 34778 34691 +3 34405 34692 34779 +3 34405 34779 34485 +3 34406 34707 34627 +3 34407 34628 34708 +3 34408 34981 35551 +3 34408 35551 34947 +3 34409 34948 35552 +3 34409 35552 34982 +3 34410 36241 37540 +3 34410 37540 35875 +3 34411 35876 37541 +3 34411 37541 36242 +3 34412 34604 34736 +3 34412 34736 34532 +3 34413 34533 34737 +3 34413 34737 34605 +3 34414 34559 35025 +3 34414 35025 34935 +3 34415 34936 35026 +3 34415 35026 34560 +3 34416 34929 35559 +3 34416 35559 34987 +3 34417 34988 35560 +3 34417 35560 34930 +3 34418 35019 35334 +3 34418 35334 34699 +3 34419 34700 35335 +3 34419 35335 35020 +3 34420 34538 34740 +3 34420 34740 34604 +3 34421 34605 34741 +3 34421 34741 34538 +3 34422 35202 37263 +3 34422 37263 36563 +3 34423 36564 37264 +3 34423 37264 35203 +3 34424 35224 35836 +3 34424 35836 34971 +3 34425 34972 35837 +3 34425 35837 35225 +3 34426 34860 35960 +3 34426 35960 35501 +3 34427 35502 35961 +3 34427 35961 34861 +3 34428 35521 36782 +3 34428 36782 35758 +3 34429 35759 36783 +3 34429 36783 35524 +3 34430 36628 37385 +3 34430 37385 35294 +3 34431 35295 37386 +3 34431 37386 36629 +3 34432 34521 35330 +3 34432 35330 35214 +3 34433 35215 35331 +3 34433 35331 34522 +3 34434 34683 34804 +3 34434 34804 34581 +3 34435 34582 34805 +3 34435 34805 34684 +3 34436 34726 34772 +3 34436 34772 34458 +3 34437 34458 34773 +3 34437 34773 34727 +3 34438 36013 36639 +3 34438 36639 35093 +3 34439 35094 36640 +3 34439 36640 36014 +3 34440 35220 36287 +3 34440 36287 35484 +3 34441 35485 36288 +3 34441 36288 35221 +3 34442 36076 36359 +3 34442 36359 35452 +3 34443 35453 36360 +3 34443 36360 36077 +3 34444 35875 37150 +3 34444 37150 35867 +3 34445 35868 37151 +3 34445 37151 35876 +3 34446 34701 34822 +3 34446 34822 34571 +3 34447 34572 34823 +3 34447 34823 34702 +3 34448 35570 36693 +3 34448 36693 35639 +3 34449 35640 36694 +3 34449 36694 35571 +3 34450 34774 35460 +3 34450 35460 35119 +3 34451 35120 35461 +3 34451 35461 34775 +3 34452 35758 36797 +3 34452 36797 35601 +3 34453 35602 36798 +3 34453 36798 35759 +3 34454 35091 37146 +3 34454 37146 36606 +3 34455 36607 37147 +3 34455 37147 35092 +3 34456 35639 37013 +3 34456 37013 35993 +3 34457 35994 37014 +3 34457 37014 35640 +3 34458 34772 34773 +3 34459 34665 35103 +3 34459 35103 34880 +3 34460 34881 35104 +3 34460 35104 34666 +3 34461 35386 36082 +3 34461 36082 35155 +3 34462 35156 36083 +3 34462 36083 35387 +3 34463 35105 35318 +3 34463 35318 34661 +3 34464 34662 35319 +3 34464 35319 35106 +3 34465 34831 35651 +3 34465 35651 35234 +3 34466 35235 35652 +3 34466 35652 34832 +3 34467 34977 35259 +3 34467 35259 34722 +3 34468 34723 35260 +3 34468 35260 34978 +3 34469 35007 35850 +3 34469 35850 35261 +3 34470 35262 35851 +3 34470 35851 35008 +3 34471 34876 35011 +3 34471 35011 34597 +3 34472 34598 35012 +3 34472 35012 34877 +3 34473 35212 37483 +3 34473 37483 36259 +3 34474 36260 37484 +3 34474 37484 35213 +3 34475 35021 36487 +3 34475 36487 35903 +3 34476 35904 36488 +3 34476 36488 35022 +3 34477 34645 35027 +3 34477 35027 34846 +3 34478 34847 35028 +3 34478 35028 34646 +3 34479 34738 34826 +3 34479 34826 34549 +3 34480 34550 34827 +3 34480 34827 34739 +3 34481 34814 35069 +3 34481 35069 34703 +3 34482 34704 35070 +3 34482 35070 34815 +3 34483 34781 35281 +3 34483 35281 34780 +3 34484 34539 34852 +3 34484 34852 34778 +3 34485 34779 34853 +3 34485 34853 34540 +3 34486 35376 37485 +3 34486 37485 36787 +3 34487 36788 37486 +3 34487 37486 35377 +3 34488 36403 37114 +3 34488 37114 35292 +3 34489 35293 37115 +3 34489 37115 36404 +3 34490 35454 35574 +3 34490 35574 34587 +3 34491 34588 35575 +3 34491 35575 35455 +3 34492 35617 36884 +3 34492 36884 35855 +3 34493 35856 36885 +3 34493 36885 35618 +3 34494 35979 36726 +3 34494 36726 35273 +3 34495 35274 36727 +3 34495 36727 35980 +3 34496 35452 36714 +3 34496 36714 35810 +3 34497 35811 36715 +3 34497 36715 35453 +3 34498 34835 35080 +3 34498 35080 34836 +3 34499 34551 36553 +3 34499 36553 36509 +3 34500 36510 36554 +3 34500 36554 34552 +3 34501 34697 35265 +3 34501 35265 35053 +3 34502 35054 35266 +3 34502 35266 34698 +3 34503 35437 36501 +3 34503 36501 35458 +3 34504 35459 36502 +3 34504 36502 35438 +3 34505 34627 34810 +3 34505 34810 34683 +3 34506 34684 34811 +3 34506 34811 34628 +3 34507 34746 35109 +3 34507 35109 34841 +3 34508 34842 35110 +3 34508 35110 34747 +3 34509 36204 36592 +3 34509 36592 35145 +3 34510 35146 36593 +3 34510 36593 36205 +3 34511 35075 35320 +3 34511 35320 34724 +3 34512 34725 35321 +3 34512 35321 35076 +3 34513 35282 36545 +3 34513 36545 35807 +3 34514 35808 36546 +3 34514 36546 35283 +3 34515 35113 35891 +3 34515 35891 35288 +3 34516 35289 35892 +3 34516 35892 35114 +3 34517 35067 36429 +3 34517 36429 35877 +3 34518 35878 36430 +3 34518 36430 35068 +3 34519 36441 36941 +3 34519 36941 35107 +3 34520 35108 36942 +3 34520 36942 36442 +3 34521 34579 35396 +3 34521 35396 35330 +3 34522 35331 35397 +3 34522 35397 34580 +3 34523 36199 36596 +3 34523 36596 34959 +3 34524 34960 36597 +3 34524 36597 36200 +3 34525 35526 37412 +3 34525 37412 35525 +3 34526 34691 34895 +3 34526 34895 34732 +3 34527 34733 34896 +3 34527 34896 34692 +3 34528 35147 36697 +3 34528 36697 36154 +3 34529 36155 36698 +3 34529 36698 35148 +3 34530 35995 37406 +3 34530 37406 35956 +3 34531 35957 37407 +3 34531 37407 35996 +3 34532 34736 34856 +3 34532 34856 34629 +3 34533 34630 34857 +3 34533 34857 34737 +3 34534 35609 35366 +3 34535 35367 35610 +3 34536 34732 34899 +3 34536 34899 34701 +3 34537 34702 34900 +3 34537 34900 34733 +3 34538 34741 34868 +3 34538 34868 34740 +3 34539 34549 34872 +3 34539 34872 34852 +3 34540 34853 34873 +3 34540 34873 34550 +3 34541 34957 35522 +3 34541 35522 35310 +3 34542 35311 35523 +3 34542 35523 34958 +3 34543 37015 37657 +3 34543 37657 35543 +3 34544 35544 37658 +3 34544 37658 37016 +3 34545 36535 37867 +3 34545 37867 36037 +3 34546 36038 37868 +3 34546 37868 36536 +3 34547 34841 35196 +3 34547 35196 34814 +3 34548 34815 35197 +3 34548 35197 34842 +3 34549 34826 34872 +3 34550 34873 34827 +3 34551 34552 36587 +3 34551 36587 36553 +3 34552 36554 36587 +3 34553 34973 35987 +3 34553 35987 35582 +3 34554 35583 35990 +3 34554 35990 34974 +3 34555 36181 36886 +3 34555 36886 35328 +3 34556 35329 36887 +3 34556 36887 36182 +3 34557 35284 35440 +3 34558 35441 35285 +3 34559 34687 35169 +3 34559 35169 35025 +3 34560 35026 35170 +3 34560 35170 34688 +3 34561 34718 35163 +3 34561 35163 34965 +3 34562 34966 35164 +3 34562 35164 34719 +3 34563 34837 35149 +3 34563 35149 34835 +3 34564 34836 35150 +3 34564 35150 34838 +3 34565 35071 36819 +3 34565 36819 36363 +3 34566 36364 36820 +3 34566 36820 35072 +3 34567 35671 38362 +3 34567 38362 37435 +3 34568 37436 38363 +3 34568 38363 35672 +3 34569 35051 36635 +3 34569 36635 35770 +3 34570 35771 36636 +3 34570 36636 35052 +3 34571 34822 34905 +3 34571 34905 34649 +3 34572 34650 34906 +3 34572 34906 34823 +3 34573 36365 36969 +3 34573 36969 35257 +3 34574 35258 36970 +3 34574 36970 36366 +3 34575 35161 35433 +3 34575 35433 34818 +3 34576 34819 35434 +3 34576 35434 35162 +3 34577 36054 36663 +3 34577 36663 35200 +3 34578 35201 36664 +3 34578 36664 36055 +3 34579 34580 35423 +3 34579 35423 35396 +3 34580 35397 35423 +3 34581 34804 34923 +3 34581 34923 34681 +3 34582 34682 34924 +3 34582 34924 34805 +3 34583 35631 36437 +3 34583 36437 35380 +3 34584 35381 36438 +3 34584 36438 35632 +3 34585 35029 36489 +3 34585 36489 35950 +3 34586 35951 36490 +3 34586 36490 35030 +3 34587 35574 35633 +3 34587 35633 34599 +3 34588 34599 35634 +3 34588 35634 35575 +3 34589 35151 37615 +3 34589 37615 37096 +3 34590 37097 37616 +3 34590 37616 35152 +3 34591 35778 36152 +3 34591 36152 35232 +3 34592 35233 36153 +3 34592 36153 35779 +3 34593 35095 36817 +3 34593 36817 36369 +3 34594 36370 36818 +3 34594 36818 35096 +3 34595 37007 37882 +3 34595 37882 35572 +3 34596 35573 37883 +3 34596 37883 37008 +3 34597 35011 35123 +3 34597 35123 34653 +3 34598 34654 35124 +3 34598 35124 35012 +3 34599 35633 35634 +3 34600 34862 35715 +3 34600 35715 35424 +3 34601 35425 35716 +3 34601 35716 34863 +3 34602 35503 35905 +3 34602 35905 34995 +3 34603 34996 35906 +3 34603 35906 35504 +3 34604 34740 34897 +3 34604 34897 34736 +3 34605 34737 34898 +3 34605 34898 34741 +3 34606 35290 36235 +3 34606 36235 35553 +3 34607 35554 36236 +3 34607 36236 35291 +3 34608 35689 38042 +3 34608 38042 37017 +3 34609 37018 38043 +3 34609 38043 35690 +3 34610 35048 35809 +3 34610 35809 35047 +3 34611 35857 36411 +3 34611 36411 35165 +3 34612 35166 36412 +3 34612 36412 35858 +3 34613 34846 35184 +3 34613 35184 34917 +3 34614 34918 35185 +3 34614 35185 34847 +3 34615 36132 37211 +3 34615 37211 35846 +3 34616 35847 37212 +3 34616 37212 36133 +3 34617 36078 37687 +3 34617 37687 36447 +3 34618 36448 37690 +3 34618 37690 36079 +3 34619 35352 35803 +3 34619 35803 35015 +3 34620 35016 35804 +3 34620 35804 35353 +3 34621 36732 37223 +3 34621 37223 35228 +3 34622 35229 37224 +3 34622 37224 36733 +3 34623 35279 37947 +3 34623 37947 37367 +3 34624 37368 37948 +3 34624 37948 35280 +3 34625 35125 36023 +3 34625 36023 35511 +3 34626 35511 36024 +3 34626 36024 35126 +3 34627 34707 34915 +3 34627 34915 34810 +3 34628 34811 34916 +3 34628 34916 34708 +3 34629 34856 34979 +3 34629 34979 34738 +3 34630 34739 34980 +3 34630 34980 34857 +3 34631 34794 35275 +3 34631 35275 35083 +3 34632 35084 35276 +3 34632 35276 34795 +3 34633 35484 36483 +3 34633 36483 35665 +3 34634 35666 36484 +3 34634 36484 35485 +3 34635 35419 36047 +3 34635 36047 35224 +3 34636 35225 36048 +3 34636 36048 35420 +3 34637 37304 38157 +3 34637 38157 35683 +3 34638 35684 38158 +3 34638 38158 37305 +3 34639 35681 35954 +3 34639 35954 34907 +3 34640 34908 35955 +3 34640 35955 35682 +3 34641 35314 36649 +3 34641 36649 36017 +3 34642 36018 36650 +3 34642 36650 35315 +3 34643 35832 36380 +3 34643 36380 35186 +3 34644 35187 36381 +3 34644 36381 35833 +3 34645 34880 35302 +3 34645 35302 35027 +3 34646 35028 35303 +3 34646 35303 34881 +3 34647 34874 35619 +3 34647 35619 35348 +3 34648 35349 35620 +3 34648 35620 34875 +3 34649 34905 34985 +3 34649 34985 34707 +3 34650 34708 34986 +3 34650 34986 34906 +3 34651 35111 35462 +3 34651 35462 34977 +3 34652 34978 35463 +3 34652 35463 35112 +3 34653 35123 35171 +3 34653 35171 34687 +3 34654 34688 35172 +3 34654 35172 35124 +3 34655 34993 36724 +3 34655 36724 36399 +3 34656 36400 36725 +3 34656 36725 34994 +3 34657 35480 35859 +3 34657 35859 35013 +3 34658 35014 35860 +3 34658 35860 35481 +3 34659 36062 36317 +3 34659 36317 34889 +3 34660 34890 36318 +3 34660 36318 36063 +3 34661 35318 35494 +3 34661 35494 34816 +3 34662 34817 35495 +3 34662 35495 35319 +3 34663 35855 37421 +3 34663 37421 36395 +3 34664 36396 37422 +3 34664 37422 35856 +3 34665 34824 35286 +3 34665 35286 35103 +3 34666 35104 35287 +3 34666 35287 34825 +3 34667 36685 37588 +3 34667 37588 35711 +3 34668 35712 37589 +3 34668 37589 36686 +3 34669 35208 35611 +3 34669 35611 35019 +3 34670 35020 35612 +3 34670 35612 35209 +3 34671 35288 36058 +3 34671 36058 35417 +3 34672 35418 36059 +3 34672 36059 35289 +3 34673 34944 36163 +3 34673 36163 35865 +3 34674 35866 36164 +3 34674 36164 34945 +3 34675 35748 37773 +3 34675 37773 36862 +3 34676 36863 37774 +3 34676 37774 35749 +3 34677 36504 37221 +3 34677 37221 35514 +3 34678 35515 37222 +3 34678 37222 36504 +3 34679 35969 36864 +3 34679 36864 35641 +3 34680 35642 36865 +3 34680 36865 35970 +3 34681 34923 35001 +3 34681 35001 34726 +3 34682 34727 35002 +3 34682 35002 34924 +3 34683 34810 34983 +3 34683 34983 34804 +3 34684 34805 34984 +3 34684 34984 34811 +3 34685 35731 35981 +3 34685 35981 34911 +3 34686 34912 35982 +3 34686 35982 35732 +3 34687 35171 35169 +3 34688 35170 35172 +3 34689 35589 36291 +3 34689 36291 35386 +3 34690 35387 36292 +3 34690 36292 35590 +3 34691 34778 35039 +3 34691 35039 34895 +3 34692 34896 35040 +3 34692 35040 34779 +3 34693 36705 37423 +3 34693 37423 35533 +3 34694 35534 37424 +3 34694 37424 36706 +3 34695 37239 37945 +3 34695 37945 35535 +3 34696 35536 37946 +3 34696 37946 37240 +3 34697 34850 35446 +3 34697 35446 35265 +3 34698 35266 35447 +3 34698 35447 34851 +3 34699 35334 35613 +3 34699 35613 34941 +3 34700 34942 35614 +3 34700 35614 35335 +3 34701 34899 35059 +3 34701 35059 34822 +3 34702 34823 35060 +3 34702 35060 34900 +3 34703 35069 35263 +3 34703 35263 34876 +3 34704 34877 35264 +3 34704 35264 35070 +3 34705 36529 37261 +3 34705 37261 35563 +3 34706 35564 37262 +3 34706 37262 36530 +3 34707 34985 34915 +3 34708 34916 34986 +3 34709 35061 35725 +3 34709 35725 35332 +3 34710 35333 35726 +3 34710 35726 35062 +3 34711 36499 37747 +3 34711 37747 36241 +3 34712 36242 37748 +3 34712 37748 36500 +3 34713 35705 36551 +3 34713 36551 35631 +3 34714 35632 36552 +3 34714 36552 35706 +3 34715 35065 36566 +3 34715 36566 36263 +3 34716 36264 36567 +3 34716 36567 35066 +3 34717 35119 35741 +3 34717 35741 35120 +3 34718 34848 35296 +3 34718 35296 35163 +3 34719 35164 35297 +3 34719 35297 34849 +3 34720 35340 36933 +3 34720 36933 36401 +3 34721 36402 36934 +3 34721 36934 35341 +3 34722 35259 35507 +3 34722 35507 34963 +3 34723 34964 35508 +3 34723 35508 35260 +3 34724 35320 35567 +3 34724 35567 34933 +3 34725 34934 35568 +3 34725 35568 35321 +3 34726 35001 35063 +3 34726 35063 34772 +3 34727 34773 35064 +3 34727 35064 35002 +3 34728 35665 36547 +3 34728 36547 35705 +3 34729 35706 36548 +3 34729 36548 35666 +3 34730 35993 37302 +3 34730 37302 36208 +3 34731 36209 37303 +3 34731 37303 35994 +3 34732 34895 35097 +3 34732 35097 34899 +3 34733 34900 35098 +3 34733 35098 34896 +3 34734 35033 35768 +3 34734 35768 35431 +3 34735 35432 35769 +3 34735 35769 35034 +3 34736 34897 35041 +3 34736 35041 34856 +3 34737 34857 35042 +3 34737 35042 34898 +3 34738 34979 35081 +3 34738 35081 34826 +3 34739 34827 35082 +3 34739 35082 34980 +3 34740 34868 35057 +3 34740 35057 34897 +3 34741 34898 35058 +3 34741 35058 34868 +3 34742 35417 36100 +3 34742 36100 35408 +3 34743 35409 36101 +3 34743 36101 35418 +3 34744 36259 37741 +3 34744 37741 36473 +3 34745 36474 37742 +3 34745 37742 36260 +3 34746 34965 35336 +3 34746 35336 35109 +3 34747 35110 35337 +3 34747 35337 34966 +3 34748 36090 36439 +3 34748 36439 35135 +3 34749 35136 36440 +3 34749 36440 36091 +3 34750 35408 36110 +3 34750 36110 35419 +3 34751 35420 36111 +3 34751 36111 35409 +3 34752 36118 36495 +3 34752 36495 35129 +3 34753 35130 36496 +3 34753 36496 36119 +3 34754 36319 36475 +3 34754 36475 34808 +3 34755 34809 36476 +3 34755 36476 36320 +3 34756 37148 37578 +3 34756 37578 36335 +3 34757 36336 37579 +3 34757 37579 37149 +3 34758 35248 35597 +3 34758 35597 35075 +3 34759 35076 35598 +3 34759 35598 35249 +3 34760 36614 36967 +3 34760 36967 35188 +3 34761 35189 36968 +3 34761 36968 36615 +3 34762 37045 37679 +3 34762 37679 35468 +3 34763 35469 37680 +3 34763 37680 37046 +3 34764 35770 37124 +3 34764 37124 36289 +3 34765 36290 37125 +3 34765 37125 35771 +3 34766 36768 37497 +3 34766 37497 35488 +3 34767 35489 37498 +3 34767 37498 36769 +3 34768 35053 35565 +3 34768 35565 35244 +3 34769 35245 35566 +3 34769 35566 35054 +3 34770 35255 37135 +3 34770 37135 36722 +3 34771 36723 37136 +3 34771 37136 35256 +3 34772 35063 35079 +3 34772 35079 34773 +3 34773 35079 35064 +3 34774 35234 35941 +3 34774 35941 35460 +3 34775 35461 35942 +3 34775 35942 35235 +3 34776 36337 38048 +3 34776 38048 36673 +3 34777 36674 38049 +3 34777 38049 36338 +3 34778 34852 35141 +3 34778 35141 35039 +3 34779 35040 35142 +3 34779 35142 34853 +3 34780 35281 35746 +3 34780 35746 35208 +3 34781 35209 35747 +3 34781 35747 35281 +3 34782 36985 37732 +3 34782 37732 35663 +3 34783 35664 37733 +3 34783 37733 36986 +3 34784 35490 36921 +3 34784 36921 36321 +3 34785 36322 36922 +3 34785 36922 35491 +3 34786 35553 36427 +3 34786 36427 35703 +3 34787 35704 36428 +3 34787 36428 35554 +3 34788 36007 36776 +3 34788 36776 35669 +3 34789 35670 36777 +3 34789 36777 36008 +3 34790 35810 36959 +3 34790 36959 36052 +3 34791 36053 36960 +3 34791 36960 35811 +3 34792 35244 35713 +3 34792 35713 35226 +3 34793 35227 35714 +3 34793 35714 35245 +3 34794 34935 35435 +3 34794 35435 35275 +3 34795 35276 35436 +3 34795 35436 34936 +3 34796 35456 35756 +3 34796 35756 35073 +3 34797 35074 35757 +3 34797 35757 35457 +3 34798 35218 36309 +3 34798 36309 35871 +3 34799 35872 36310 +3 34799 36310 35219 +3 34800 35226 35723 +3 34800 35723 35248 +3 34801 35249 35724 +3 34801 35724 35227 +3 34802 36653 37919 +3 34802 37919 35625 +3 34803 35626 37920 +3 34803 37920 36654 +3 34804 34983 35143 +3 34804 35143 34923 +3 34805 34924 35144 +3 34805 35144 34984 +3 34806 35697 36423 +3 34806 36423 35589 +3 34807 35590 36424 +3 34807 36424 35698 +3 34808 36475 36511 +3 34808 36511 34845 +3 34809 34845 36512 +3 34809 36512 36476 +3 34810 34915 35121 +3 34810 35121 34983 +3 34811 34984 35122 +3 34811 35122 34916 +3 34812 36335 37651 +3 34812 37651 36337 +3 34813 36338 37652 +3 34813 37652 36336 +3 34814 35196 35464 +3 34814 35464 35069 +3 34815 35070 35465 +3 34815 35465 35197 +3 34816 35494 35661 +3 34816 35661 34953 +3 34817 34954 35662 +3 34817 35662 35495 +3 34818 35433 35695 +3 34818 35695 34931 +3 34819 34932 35696 +3 34819 35696 35434 +3 34820 35580 37291 +3 34820 37291 36641 +3 34821 36642 37292 +3 34821 37292 35581 +3 34822 35059 35174 +3 34822 35174 34905 +3 34823 34906 35175 +3 34823 35175 35060 +3 34824 34882 35426 +3 34824 35426 35286 +3 34825 35287 35427 +3 34825 35427 34883 +3 34826 35081 35153 +3 34826 35153 34872 +3 34827 34873 35154 +3 34827 35154 35082 +3 34828 35615 37507 +3 34828 37507 36847 +3 34829 36848 37508 +3 34829 37508 35616 +3 34830 35416 36390 +3 34830 36390 35415 +3 34831 35159 35973 +3 34831 35973 35651 +3 34832 35652 35974 +3 34832 35974 35160 +3 34833 35344 36616 +3 34833 36616 36122 +3 34834 36123 36617 +3 34834 36617 35345 +3 34835 35149 35398 +3 34835 35398 35080 +3 34836 35080 35399 +3 34836 35399 35150 +3 34837 35083 35390 +3 34837 35390 35149 +3 34838 35150 35391 +3 34838 35391 35084 +3 34839 37019 37643 +3 34839 37643 35512 +3 34840 35513 37644 +3 34840 37644 37020 +3 34841 35109 35486 +3 34841 35486 35196 +3 34842 35197 35487 +3 34842 35487 35110 +3 34843 35784 37894 +3 34843 37894 37078 +3 34844 37079 37895 +3 34844 37895 35785 +3 34845 36511 36512 +3 34846 35027 35372 +3 34846 35372 35184 +3 34847 35185 35373 +3 34847 35373 35028 +3 34848 34917 35402 +3 34848 35402 35296 +3 34849 35297 35403 +3 34849 35403 34918 +3 34850 34953 35591 +3 34850 35591 35446 +3 34851 35447 35592 +3 34851 35592 34954 +3 34852 34872 35176 +3 34852 35176 35141 +3 34853 35142 35177 +3 34853 35177 34873 +3 34854 35967 36463 +3 34854 36463 35324 +3 34855 35325 36464 +3 34855 36464 35968 +3 34856 35041 35190 +3 34856 35190 34979 +3 34857 34980 35191 +3 34857 35191 35042 +3 34858 35240 36384 +3 34858 36384 35991 +3 34859 35992 36385 +3 34859 36385 35241 +3 34860 35210 36339 +3 34860 36339 35960 +3 34861 35961 36340 +3 34861 36340 35211 +3 34862 35085 35927 +3 34862 35927 35715 +3 34863 35716 35928 +3 34863 35928 35086 +3 34864 36102 36257 +3 34864 36257 34989 +3 34865 34990 36258 +3 34865 36258 36103 +3 34866 35703 36413 +3 34866 36413 35697 +3 34867 35698 36414 +3 34867 36414 35704 +3 34868 35058 35173 +3 34868 35173 35057 +3 34869 35576 36906 +3 34869 36906 35577 +3 34870 37257 37976 +3 34870 37976 35840 +3 34871 35841 37977 +3 34871 37977 37258 +3 34872 35153 35176 +3 34873 35177 35154 +3 34874 35077 35834 +3 34874 35834 35619 +3 34875 35620 35835 +3 34875 35835 35078 +3 34876 35263 35429 +3 34876 35429 35011 +3 34877 35012 35430 +3 34877 35430 35264 +3 34878 36311 36815 +3 34878 36815 35492 +3 34879 35493 36816 +3 34879 36816 36312 +3 34880 35103 35529 +3 34880 35529 35302 +3 34881 35303 35530 +3 34881 35530 35104 +3 34882 34939 35505 +3 34882 35505 35426 +3 34883 35427 35506 +3 34883 35506 34940 +3 34884 35947 37873 +3 34884 37873 35948 +3 34885 35593 36072 +3 34885 36072 35352 +3 34886 35353 36073 +3 34886 36073 35594 +3 34887 35780 37653 +3 34887 37653 36860 +3 34888 36861 37654 +3 34888 37654 35781 +3 34889 36317 35999 +3 34890 36000 36318 +3 34891 35964 38115 +3 34891 38115 37481 +3 34892 37482 38116 +3 34892 38116 35965 +3 34893 36473 38360 +3 34893 38360 36939 +3 34894 36940 38361 +3 34894 38361 36474 +3 34895 35039 35236 +3 34895 35236 35097 +3 34896 35098 35237 +3 34896 35237 35040 +3 34897 35057 35204 +3 34897 35204 35041 +3 34898 35042 35205 +3 34898 35205 35058 +3 34899 35097 35238 +3 34899 35238 35059 +3 34900 35060 35239 +3 34900 35239 35098 +3 34901 35945 38312 +3 34901 38312 37429 +3 34902 37430 38313 +3 34902 38313 35946 +3 34903 36161 37086 +3 34903 37086 35969 +3 34904 35970 37087 +3 34904 37087 36162 +3 34905 35174 35222 +3 34905 35222 34985 +3 34906 34986 35223 +3 34906 35223 35175 +3 34907 35954 36224 +3 34907 36224 35180 +3 34908 35181 36225 +3 34908 36225 35955 +3 34909 36193 37245 +3 34909 37245 36120 +3 34910 36121 37246 +3 34910 37246 36194 +3 34911 35981 36220 +3 34911 36220 35304 +3 34912 35305 36221 +3 34912 36221 35982 +3 34913 36539 37633 +3 34913 37633 36193 +3 34914 36194 37634 +3 34914 37634 36540 +3 34915 34985 35192 +3 34915 35192 35121 +3 34916 35122 35193 +3 34916 35193 34986 +3 34917 35184 35478 +3 34917 35478 35402 +3 34918 35403 35479 +3 34918 35479 35185 +3 34919 37526 38056 +3 34919 38056 35516 +3 34920 35517 38057 +3 34920 38057 37527 +3 34921 35261 36305 +3 34921 36305 35929 +3 34922 35930 36306 +3 34922 36306 35262 +3 34923 35143 35216 +3 34923 35216 35001 +3 34924 35002 35217 +3 34924 35217 35144 +3 34925 36343 37393 +3 34925 37393 36132 +3 34926 36133 37394 +3 34926 37394 36344 +3 34927 36375 37417 +3 34927 37417 36140 +3 34928 36141 37418 +3 34928 37418 36376 +3 34929 35431 36060 +3 34929 36060 35559 +3 34930 35560 36061 +3 34930 36061 35432 +3 34931 35695 35790 +3 34931 35790 35003 +3 34932 35004 35791 +3 34932 35791 35696 +3 34933 35567 35766 +3 34933 35766 35111 +3 34934 35112 35767 +3 34934 35767 35568 +3 34935 35025 35549 +3 34935 35549 35435 +3 34936 35436 35550 +3 34936 35550 35026 +3 34937 36975 37041 +3 34937 37041 34997 +3 34938 34998 37042 +3 34938 37042 36976 +3 34939 34940 35520 +3 34939 35520 35505 +3 34940 35506 35520 +3 34941 35613 35805 +3 34941 35805 35105 +3 34942 35106 35806 +3 34942 35806 35614 +3 34943 36447 37923 +3 34943 37923 36499 +3 34944 35198 36397 +3 34944 36397 36163 +3 34945 36164 36398 +3 34945 36398 35199 +3 34946 36500 37924 +3 34946 37924 36448 +3 34947 35551 36068 +3 34947 36068 35456 +3 34948 35457 36069 +3 34948 36069 35552 +3 34949 37453 38495 +3 34949 38495 36070 +3 34950 36071 38496 +3 34950 38496 37454 +3 34951 35807 36929 +3 34951 36929 36187 +3 34952 36188 36930 +3 34952 36930 35808 +3 34953 35661 35591 +3 34954 35592 35662 +3 34955 36286 36896 +3 34955 36896 35685 +3 34956 35686 36897 +3 34956 36897 36286 +3 34957 35332 35911 +3 34957 35911 35522 +3 34958 35523 35912 +3 34958 35912 35333 +3 34959 36596 36949 +3 34959 36949 35358 +3 34960 35359 36950 +3 34960 36950 36597 +3 34961 36208 37415 +3 34961 37415 36343 +3 34962 36344 37416 +3 34962 37416 36209 +3 34963 35507 35735 +3 34963 35735 35161 +3 34964 35162 35736 +3 34964 35736 35508 +3 34965 35163 35547 +3 34965 35547 35336 +3 34966 35337 35548 +3 34966 35548 35164 +3 34967 36044 38599 +3 34967 38599 37695 +3 34968 37696 38600 +3 34968 38600 36045 +3 34969 36052 37104 +3 34969 37104 36183 +3 34970 36184 37105 +3 34970 37105 36053 +3 34971 35836 36177 +3 34971 36177 35298 +3 34972 35299 36178 +3 34972 36178 35837 +3 34973 35501 36515 +3 34973 36515 35987 +3 34974 35990 36516 +3 34974 36516 35502 +3 34975 35587 36760 +3 34975 36760 36222 +3 34976 36223 36761 +3 34976 36761 35588 +3 34977 35462 35786 +3 34977 35786 35259 +3 34978 35260 35787 +3 34978 35787 35463 +3 34979 35190 35306 +3 34979 35306 35081 +3 34980 35082 35307 +3 34980 35307 35191 +3 34981 35539 36112 +3 34981 36112 35551 +3 34982 35552 36113 +3 34982 36113 35540 +3 34983 35121 35277 +3 34983 35277 35143 +3 34984 35144 35278 +3 34984 35278 35122 +3 34985 35222 35192 +3 34986 35193 35223 +3 34987 35559 36124 +3 34987 36124 35539 +3 34988 35540 36125 +3 34988 36125 35560 +3 34989 36257 36353 +3 34989 36353 35023 +3 34990 35024 36354 +3 34990 36354 36258 +3 34991 35737 37285 +3 34991 37285 36661 +3 34992 36662 37286 +3 34992 37286 35738 +3 34993 36104 36977 +3 34993 36977 36724 +3 34994 36725 36978 +3 34994 36978 36105 +3 34995 35905 36297 +3 34995 36297 35342 +3 34996 35343 36298 +3 34996 36298 35906 +3 34997 37041 37075 +3 34997 37075 34998 +3 34998 37075 37042 +3 34999 35655 37515 +3 34999 37515 36963 +3 35000 36964 37516 +3 35000 37516 35656 +3 35001 35216 35300 +3 35001 35300 35063 +3 35002 35064 35301 +3 35002 35301 35217 +3 35003 35790 35838 +3 35003 35838 35049 +3 35004 35050 35839 +3 35004 35839 35791 +3 35005 36868 38208 +3 35005 38208 36535 +3 35006 36536 38209 +3 35006 38209 36869 +3 35007 35527 36357 +3 35007 36357 35850 +3 35008 35851 36358 +3 35008 36358 35528 +3 35009 37287 38247 +3 35009 38247 36148 +3 35010 36149 38248 +3 35010 38248 37288 +3 35011 35429 35545 +3 35011 35545 35123 +3 35012 35124 35546 +3 35012 35546 35430 +3 35013 35859 36382 +3 35013 36382 35503 +3 35014 35504 36383 +3 35014 36383 35860 +3 35015 35803 36197 +3 35015 36197 35378 +3 35016 35379 36198 +3 35016 36198 35804 +3 35017 35897 38398 +3 35017 38398 37649 +3 35018 37650 38399 +3 35018 38399 35898 +3 35019 35611 35915 +3 35019 35915 35334 +3 35020 35335 35916 +3 35020 35916 35612 +3 35021 35476 36878 +3 35021 36878 36487 +3 35022 36488 36879 +3 35022 36879 35477 +3 35023 36353 36379 +3 35023 36379 35024 +3 35024 36379 36354 +3 35025 35169 35627 +3 35025 35627 35549 +3 35026 35550 35628 +3 35026 35628 35170 +3 35027 35302 35693 +3 35027 35693 35372 +3 35028 35373 35694 +3 35028 35694 35303 +3 35029 35472 36853 +3 35029 36853 36489 +3 35030 36490 36854 +3 35030 36854 35473 +3 35031 35885 37447 +3 35031 37447 36716 +3 35032 36717 37448 +3 35032 37448 35886 +3 35033 35310 36039 +3 35033 36039 35768 +3 35034 35769 36040 +3 35034 36040 35311 +3 35035 35717 37734 +3 35035 37734 37198 +3 35036 37199 37735 +3 35036 37735 35718 +3 35037 36175 36799 +3 35037 36799 35778 +3 35038 35779 36800 +3 35038 36800 36176 +3 35039 35141 35346 +3 35039 35346 35236 +3 35040 35237 35347 +3 35040 35347 35142 +3 35041 35204 35356 +3 35041 35356 35190 +3 35042 35191 35357 +3 35042 35357 35205 +3 35043 35812 37552 +3 35043 37552 36892 +3 35044 36893 37553 +3 35044 37553 35813 +3 35045 36734 37313 +3 35045 37313 35733 +3 35046 35734 37314 +3 35046 37314 36735 +3 35047 35809 36249 +3 35047 36249 35480 +3 35048 35481 36250 +3 35048 36250 35809 +3 35049 35838 35854 +3 35049 35854 35050 +3 35050 35854 35839 +3 35051 35895 37373 +3 35051 37373 36635 +3 35052 36636 37374 +3 35052 37374 35896 +3 35053 35265 35826 +3 35053 35826 35565 +3 35054 35566 35827 +3 35054 35827 35266 +3 35055 36481 37363 +3 35055 37363 36104 +3 35056 36105 37364 +3 35056 37364 36482 +3 35057 35173 35322 +3 35057 35322 35204 +3 35058 35205 35323 +3 35058 35323 35173 +3 35059 35238 35354 +3 35059 35354 35174 +3 35060 35175 35355 +3 35060 35355 35239 +3 35061 35348 36027 +3 35061 36027 35725 +3 35062 35726 36028 +3 35062 36028 35349 +3 35063 35300 35326 +3 35063 35326 35079 +3 35064 35079 35327 +3 35064 35327 35301 +3 35065 35360 36827 +3 35065 36827 36566 +3 35066 36567 36828 +3 35066 36828 35361 +3 35067 35599 36866 +3 35067 36866 36429 +3 35068 36430 36867 +3 35068 36867 35600 +3 35069 35464 35709 +3 35069 35709 35263 +3 35070 35264 35710 +3 35070 35710 35465 +3 35071 35776 37235 +3 35071 37235 36819 +3 35072 36820 37236 +3 35072 37236 35777 +3 35073 35756 35971 +3 35073 35971 35284 +3 35074 35285 35972 +3 35074 35972 35757 +3 35075 35597 35873 +3 35075 35873 35320 +3 35076 35321 35874 +3 35076 35874 35598 +3 35077 35214 36144 +3 35077 36144 35834 +3 35078 35835 36145 +3 35078 36145 35215 +3 35079 35326 35327 +3 35080 35398 35646 +3 35080 35646 35399 +3 35081 35306 35368 +3 35081 35368 35153 +3 35082 35154 35369 +3 35082 35369 35307 +3 35083 35275 35649 +3 35083 35649 35390 +3 35084 35391 35650 +3 35084 35650 35276 +3 35085 35253 36142 +3 35085 36142 35927 +3 35086 35928 36143 +3 35086 36143 35254 +3 35087 36935 37431 +3 35087 37431 35659 +3 35088 35660 37432 +3 35088 37432 36936 +3 35089 36349 37213 +3 35089 37213 35637 +3 35090 35638 37214 +3 35090 37214 36350 +3 35091 36191 38111 +3 35091 38111 37146 +3 35092 37147 38112 +3 35092 38112 36192 +3 35093 36639 37162 +3 35093 37162 35719 +3 35094 35720 37163 +3 35094 37163 36640 +3 35095 35578 37237 +3 35095 37237 36817 +3 35096 36818 37238 +3 35096 37238 35579 +3 35097 35236 35388 +3 35097 35388 35238 +3 35098 35239 35389 +3 35098 35389 35237 +3 35099 36001 37730 +3 35099 37730 36948 +3 35100 36948 37731 +3 35100 37731 36002 +3 35101 36395 37791 +3 35101 37791 36669 +3 35102 36672 37792 +3 35102 37792 36396 +3 35103 35286 35744 +3 35103 35744 35529 +3 35104 35530 35745 +3 35104 35745 35287 +3 35105 35805 35921 +3 35105 35921 35318 +3 35106 35319 35922 +3 35106 35922 35806 +3 35107 36941 37427 +3 35107 37427 35687 +3 35108 35688 37428 +3 35108 37428 36942 +3 35109 35336 35750 +3 35109 35750 35486 +3 35110 35487 35751 +3 35110 35751 35337 +3 35111 35766 35861 +3 35111 35861 35462 +3 35112 35463 35862 +3 35112 35862 35767 +3 35113 35366 36216 +3 35113 36216 35891 +3 35114 35892 36217 +3 35114 36217 35367 +3 35115 36015 37937 +3 35115 37937 37168 +3 35116 37169 37938 +3 35116 37938 36016 +3 35117 36837 38218 +3 35117 38218 36653 +3 35118 36654 38219 +3 35118 38219 36838 +3 35119 35460 36096 +3 35119 36096 35741 +3 35120 35741 36097 +3 35120 36097 35461 +3 35121 35192 35374 +3 35121 35374 35277 +3 35122 35278 35375 +3 35122 35375 35193 +3 35123 35545 35621 +3 35123 35621 35171 +3 35124 35172 35622 +3 35124 35622 35546 +3 35125 35582 36497 +3 35125 36497 36023 +3 35126 36024 36498 +3 35126 36498 35583 +3 35127 36888 37980 +3 35127 37980 36375 +3 35128 36376 37981 +3 35128 37981 36889 +3 35129 36495 36756 +3 35129 36756 35647 +3 35130 35648 36757 +3 35130 36757 36496 +3 35131 36183 37170 +3 35131 37170 36161 +3 35132 36162 37171 +3 35132 37171 36184 +3 35133 36282 37023 +3 35133 37023 36007 +3 35134 36008 37024 +3 35134 37024 36283 +3 35135 36439 36752 +3 35135 36752 35466 +3 35136 35467 36753 +3 35136 36753 36440 +3 35137 36673 38274 +3 35137 38274 36913 +3 35138 36914 38275 +3 35138 38275 36674 +3 35139 36527 37265 +3 35139 37265 35979 +3 35140 35980 37266 +3 35140 37266 36528 +3 35141 35176 35404 +3 35141 35404 35346 +3 35142 35347 35405 +3 35142 35405 35177 +3 35143 35277 35400 +3 35143 35400 35216 +3 35144 35217 35401 +3 35144 35401 35278 +3 35145 36592 37098 +3 35145 37098 35762 +3 35146 35763 37099 +3 35146 37099 36593 +3 35147 35842 37321 +3 35147 37321 36697 +3 35148 36698 37322 +3 35148 37322 35843 +3 35149 35390 35707 +3 35149 35707 35398 +3 35150 35399 35708 +3 35150 35708 35391 +3 35151 36754 38046 +3 35151 38046 37615 +3 35152 37616 38047 +3 35152 38047 36755 +3 35153 35368 35413 +3 35153 35413 35176 +3 35154 35177 35414 +3 35154 35414 35369 +3 35155 36082 36377 +3 35155 36377 35421 +3 35156 35422 36378 +3 35156 36378 36083 +3 35157 35887 38167 +3 35157 38167 37513 +3 35158 37514 38168 +3 35158 38168 35888 +3 35159 35424 36278 +3 35159 36278 35973 +3 35160 35974 36279 +3 35160 36279 35425 +3 35161 35735 36005 +3 35161 36005 35433 +3 35162 35434 36006 +3 35162 36006 35736 +3 35163 35296 35727 +3 35163 35727 35547 +3 35164 35548 35728 +3 35164 35728 35297 +3 35165 36411 36851 +3 35165 36851 35699 +3 35166 35700 36852 +3 35166 36852 36412 +3 35167 35997 38364 +3 35167 38364 36999 +3 35168 37000 38365 +3 35168 38365 35998 +3 35169 35171 35657 +3 35169 35657 35627 +3 35170 35628 35658 +3 35170 35658 35172 +3 35171 35621 35657 +3 35172 35658 35622 +3 35173 35323 35428 +3 35173 35428 35322 +3 35174 35354 35450 +3 35174 35450 35222 +3 35175 35223 35451 +3 35175 35451 35355 +3 35176 35413 35404 +3 35177 35405 35414 +3 35178 37073 38526 +3 35178 38526 36762 +3 35179 36763 38527 +3 35179 38527 37074 +3 35180 36224 36405 +3 35180 36405 35392 +3 35181 35393 36406 +3 35181 36406 36225 +3 35182 36066 38226 +3 35182 38226 37445 +3 35183 37446 38227 +3 35183 38227 36067 +3 35184 35372 35721 +3 35184 35721 35478 +3 35185 35479 35722 +3 35185 35722 35373 +3 35186 36380 36821 +3 35186 36821 35701 +3 35187 35702 36822 +3 35187 36822 36381 +3 35188 36967 37325 +3 35188 37325 35570 +3 35189 35571 37326 +3 35189 37326 36968 +3 35190 35356 35496 +3 35190 35496 35306 +3 35191 35307 35497 +3 35191 35497 35357 +3 35192 35222 35444 +3 35192 35444 35374 +3 35193 35375 35445 +3 35193 35445 35223 +3 35194 36116 37849 +3 35194 37849 37029 +3 35195 37030 37850 +3 35195 37850 36117 +3 35196 35486 35824 +3 35196 35824 35464 +3 35197 35465 35825 +3 35197 35825 35487 +3 35198 35421 36600 +3 35198 36600 36397 +3 35199 36398 36601 +3 35199 36601 35422 +3 35200 36663 37166 +3 35200 37166 35729 +3 35201 35730 37167 +3 35201 37167 36664 +3 35202 35962 38038 +3 35202 38038 37263 +3 35203 37264 38039 +3 35203 38039 35963 +3 35204 35322 35509 +3 35204 35509 35356 +3 35205 35357 35510 +3 35205 35510 35323 +3 35206 36762 38099 +3 35206 38099 36754 +3 35207 36755 38100 +3 35207 38100 36763 +3 35208 35746 36134 +3 35208 36134 35611 +3 35209 35612 36135 +3 35209 36135 35747 +3 35210 35555 36645 +3 35210 36645 36339 +3 35211 36340 36646 +3 35211 36646 35556 +3 35212 35935 38095 +3 35212 38095 37483 +3 35213 37484 38096 +3 35213 38096 35936 +3 35214 35330 36271 +3 35214 36271 36144 +3 35215 36145 36272 +3 35215 36272 35331 +3 35216 35400 35498 +3 35216 35498 35300 +3 35217 35301 35499 +3 35217 35499 35401 +3 35218 35362 36465 +3 35218 36465 36309 +3 35219 36310 36466 +3 35219 36466 35363 +3 35220 35999 36945 +3 35220 36945 36287 +3 35221 36288 36946 +3 35221 36946 36000 +3 35222 35450 35444 +3 35223 35445 35451 +3 35224 36047 36574 +3 35224 36574 35836 +3 35225 35837 36575 +3 35225 36575 36048 +3 35226 35713 36108 +3 35226 36108 35723 +3 35227 35724 36109 +3 35227 36109 35714 +3 35228 37223 37691 +3 35228 37691 35782 +3 35229 35783 37692 +3 35229 37692 37224 +3 35230 36742 37878 +3 35230 37878 36539 +3 35231 36540 37879 +3 35231 37879 36743 +3 35232 36152 36720 +3 35232 36720 35857 +3 35233 35858 36721 +3 35233 36721 36153 +3 35234 35651 36361 +3 35234 36361 35941 +3 35235 35942 36362 +3 35235 36362 35652 +3 35236 35346 35531 +3 35236 35531 35388 +3 35237 35389 35532 +3 35237 35532 35347 +3 35238 35388 35537 +3 35238 35537 35354 +3 35239 35355 35538 +3 35239 35538 35389 +3 35240 35603 36707 +3 35240 36707 36384 +3 35241 36385 36708 +3 35241 36708 35604 +3 35242 37568 38418 +3 35242 38418 36239 +3 35243 36240 38419 +3 35243 38419 37569 +3 35244 35565 36033 +3 35244 36033 35713 +3 35245 35714 36034 +3 35245 36034 35566 +3 35246 36289 37528 +3 35246 37528 36626 +3 35247 36627 37529 +3 35247 37529 36290 +3 35248 35723 36056 +3 35248 36056 35597 +3 35249 35598 36057 +3 35249 36057 35724 +3 35250 36356 38335 +3 35250 38335 36355 +3 35251 36276 38467 +3 35251 38467 37710 +3 35252 37711 38468 +3 35252 38468 36277 +3 35253 35440 36293 +3 35253 36293 36142 +3 35254 36143 36294 +3 35254 36294 35441 +3 35255 35739 37548 +3 35255 37548 37135 +3 35256 37136 37549 +3 35256 37549 35740 +3 35257 36969 37554 +3 35257 37554 35923 +3 35258 35924 37555 +3 35258 37555 36970 +3 35259 35786 36029 +3 35259 36029 35507 +3 35260 35508 36030 +3 35260 36030 35787 +3 35261 35850 36581 +3 35261 36581 36305 +3 35262 36306 36582 +3 35262 36582 35851 +3 35263 35709 35869 +3 35263 35869 35429 +3 35264 35430 35870 +3 35264 35870 35710 +3 35265 35446 36019 +3 35265 36019 35826 +3 35266 35827 36020 +3 35266 36020 35447 +3 35267 36187 37203 +3 35267 37203 36407 +3 35268 36408 37204 +3 35268 37204 36188 +3 35269 37915 38597 +3 35269 38597 36373 +3 35270 36374 38598 +3 35270 38598 37916 +3 35271 37351 38805 +3 35271 38805 36837 +3 35272 36838 38806 +3 35272 38806 37352 +3 35273 36726 37355 +3 35273 37355 36013 +3 35274 36014 37356 +3 35274 37356 36727 +3 35275 35435 35816 +3 35275 35816 35649 +3 35276 35650 35817 +3 35276 35817 35436 +3 35277 35374 35541 +3 35277 35541 35400 +3 35278 35401 35542 +3 35278 35542 35375 +3 35279 35893 38493 +3 35279 38493 37947 +3 35280 37948 38494 +3 35280 38494 35894 +3 35281 35747 36049 +3 35281 36049 35746 +3 35282 36017 36909 +3 35282 36909 36545 +3 35283 36546 36910 +3 35283 36910 36018 +3 35284 35971 36167 +3 35284 36167 35440 +3 35285 35441 36168 +3 35285 36168 35972 +3 35286 35426 35881 +3 35286 35881 35744 +3 35287 35745 35882 +3 35287 35882 35427 +3 35288 35891 36608 +3 35288 36608 36058 +3 35289 36059 36609 +3 35289 36609 35892 +3 35290 35929 36805 +3 35290 36805 36235 +3 35291 36236 36806 +3 35291 36806 35930 +3 35292 37114 37832 +3 35292 37832 36092 +3 35293 36093 37833 +3 35293 37833 37115 +3 35294 37385 38072 +3 35294 38072 36138 +3 35295 36139 38073 +3 35295 38073 37386 +3 35296 35402 35848 +3 35296 35848 35727 +3 35297 35728 35849 +3 35297 35849 35403 +3 35298 36177 36455 +3 35298 36455 35593 +3 35299 35594 36456 +3 35299 36456 36178 +3 35300 35498 35561 +3 35300 35561 35326 +3 35301 35327 35562 +3 35301 35562 35499 +3 35302 35529 35899 +3 35302 35899 35693 +3 35303 35694 35900 +3 35303 35900 35530 +3 35304 36220 36371 +3 35304 36371 35454 +3 35305 35455 36372 +3 35305 36372 36221 +3 35306 35496 35595 +3 35306 35595 35368 +3 35307 35369 35596 +3 35307 35596 35497 +3 35308 36461 38914 +3 35308 38914 37874 +3 35309 37875 38915 +3 35309 38915 36462 +3 35310 35522 36274 +3 35310 36274 36039 +3 35311 36040 36275 +3 35311 36275 35523 +3 35312 36857 37769 +3 35312 37769 36349 +3 35313 36350 37770 +3 35313 37770 36858 +3 35314 35903 37179 +3 35314 37179 36649 +3 35315 36650 37180 +3 35315 37180 35904 +3 35316 37335 38153 +3 35316 38153 36233 +3 35317 36234 38154 +3 35317 38154 37336 +3 35318 35921 36128 +3 35318 36128 35494 +3 35319 35495 36129 +3 35319 36129 35922 +3 35320 35873 36130 +3 35320 36130 35567 +3 35321 35568 36131 +3 35321 36131 35874 +3 35322 35428 35623 +3 35322 35623 35509 +3 35323 35510 35624 +3 35323 35624 35428 +3 35324 36463 36849 +3 35324 36849 35832 +3 35325 35833 36850 +3 35325 36850 36464 +3 35326 35561 35586 +3 35326 35586 35327 +3 35327 35586 35562 +3 35328 36886 37534 +3 35328 37534 36084 +3 35329 36085 37535 +3 35329 37535 36887 +3 35330 35396 36341 +3 35330 36341 36271 +3 35331 36272 36342 +3 35331 36342 35397 +3 35332 35725 36323 +3 35332 36323 35911 +3 35333 35912 36324 +3 35333 36324 35726 +3 35334 35915 36229 +3 35334 36229 35613 +3 35335 35614 36230 +3 35335 36230 35916 +3 35336 35547 35937 +3 35336 35937 35750 +3 35337 35751 35938 +3 35337 35938 35548 +3 35338 36435 37241 +3 35338 37241 36282 +3 35339 36283 37242 +3 35339 37242 36436 +3 35340 35410 37076 +3 35340 37076 36933 +3 35341 36934 37077 +3 35341 37077 35411 +3 35342 36297 36572 +3 35342 36572 35681 +3 35343 35682 36573 +3 35343 36573 36298 +3 35344 35950 37133 +3 35344 37133 36616 +3 35345 36617 37134 +3 35345 37134 35951 +3 35346 35404 35629 +3 35346 35629 35531 +3 35347 35532 35630 +3 35347 35630 35405 +3 35348 35619 36303 +3 35348 36303 36027 +3 35349 36028 36304 +3 35349 36304 35620 +3 35350 36913 38445 +3 35350 38445 36868 +3 35351 36869 38446 +3 35351 38446 36914 +3 35352 36072 36507 +3 35352 36507 35803 +3 35353 35804 36508 +3 35353 36508 36073 +3 35354 35537 35643 +3 35354 35643 35450 +3 35355 35451 35644 +3 35355 35644 35538 +3 35356 35509 35675 +3 35356 35675 35496 +3 35357 35497 35676 +3 35357 35676 35510 +3 35358 36949 37283 +3 35358 37283 35760 +3 35359 35761 37284 +3 35359 37284 36950 +3 35360 35669 37047 +3 35360 37047 36827 +3 35361 36828 37048 +3 35361 37048 35670 +3 35362 35474 36549 +3 35362 36549 36465 +3 35363 36466 36550 +3 35363 36550 35475 +3 35364 36606 37929 +3 35364 37929 36829 +3 35365 36830 37930 +3 35365 37930 36607 +3 35366 35609 36431 +3 35366 36431 36216 +3 35367 36217 36432 +3 35367 36432 35610 +3 35368 35595 35653 +3 35368 35653 35413 +3 35369 35414 35654 +3 35369 35654 35596 +3 35370 36533 38685 +3 35370 38685 37681 +3 35371 37682 38686 +3 35371 38686 36534 +3 35372 35693 36003 +3 35372 36003 35721 +3 35373 35722 36004 +3 35373 36004 35694 +3 35374 35444 35635 +3 35374 35635 35541 +3 35375 35542 35636 +3 35375 35636 35445 +3 35376 35448 37572 +3 35376 37572 37485 +3 35377 37486 37573 +3 35377 37573 35449 +3 35378 36197 36517 +3 35378 36517 35731 +3 35379 35732 36518 +3 35379 36518 36198 +3 35380 36437 37069 +3 35380 37069 36175 +3 35381 36176 37070 +3 35381 37070 36438 +3 35382 36630 37779 +3 35382 37779 36687 +3 35383 36688 37780 +3 35383 37780 36631 +3 35384 36691 37645 +3 35384 37645 36481 +3 35385 36482 37646 +3 35385 37646 36692 +3 35386 36291 36880 +3 35386 36880 36082 +3 35387 36083 36881 +3 35387 36881 36292 +3 35388 35531 35691 +3 35388 35691 35537 +3 35389 35538 35692 +3 35389 35692 35532 +3 35390 35649 35933 +3 35390 35933 35707 +3 35391 35708 35934 +3 35391 35934 35650 +3 35392 36405 36588 +3 35392 36588 35609 +3 35393 35610 36589 +3 35393 36589 36406 +3 35394 36687 38204 +3 35394 38204 37021 +3 35395 37022 38205 +3 35395 38205 36688 +3 35396 35423 36388 +3 35396 36388 36341 +3 35397 36342 36389 +3 35397 36389 35423 +3 35398 35707 35925 +3 35398 35925 35646 +3 35399 35646 35926 +3 35399 35926 35708 +3 35400 35541 35679 +3 35400 35679 35498 +3 35401 35499 35680 +3 35401 35680 35542 +3 35402 35478 35917 +3 35402 35917 35848 +3 35403 35849 35918 +3 35403 35918 35479 +3 35404 35413 35667 +3 35404 35667 35629 +3 35405 35630 35668 +3 35405 35668 35414 +3 35406 36939 38690 +3 35406 38690 37323 +3 35407 37324 38693 +3 35407 38693 36940 +3 35408 36100 36681 +3 35408 36681 36110 +3 35409 36111 36682 +3 35409 36682 36101 +3 35410 35439 37110 +3 35410 37110 37076 +3 35411 37077 37111 +3 35411 37111 35439 +3 35412 36182 37517 +3 35412 37517 36181 +3 35413 35653 35667 +3 35414 35668 35654 +3 35415 36390 36876 +3 35415 36876 35967 +3 35416 35968 36877 +3 35416 36877 36390 +3 35417 36058 36695 +3 35417 36695 36100 +3 35418 36101 36696 +3 35418 36696 36059 +3 35419 36110 36701 +3 35419 36701 36047 +3 35420 36048 36702 +3 35420 36702 36111 +3 35421 36377 36600 +3 35422 36601 36378 +3 35423 36389 36388 +3 35424 35715 36449 +3 35424 36449 36278 +3 35425 36279 36450 +3 35425 36450 35716 +3 35426 35505 35977 +3 35426 35977 35881 +3 35427 35882 35978 +3 35427 35978 35506 +3 35428 35624 35623 +3 35429 35869 36021 +3 35429 36021 35545 +3 35430 35546 36022 +3 35430 36022 35870 +3 35431 35768 36409 +3 35431 36409 36060 +3 35432 36061 36410 +3 35432 36410 35769 +3 35433 36005 36255 +3 35433 36255 35695 +3 35434 35696 36256 +3 35434 36256 36006 +3 35435 35549 35931 +3 35435 35931 35816 +3 35436 35817 35932 +3 35436 35932 35550 +3 35437 36407 37343 +3 35437 37343 36501 +3 35438 36502 37344 +3 35438 37344 36408 +3 35439 37111 37110 +3 35440 36167 36293 +3 35441 36294 36168 +3 35442 36669 37988 +3 35442 37988 36874 +3 35443 36875 37989 +3 35443 37989 36672 +3 35444 35450 35677 +3 35444 35677 35635 +3 35445 35636 35678 +3 35445 35678 35451 +3 35446 35591 36171 +3 35446 36171 36019 +3 35447 36020 36172 +3 35447 36172 35592 +3 35448 35449 37594 +3 35448 37594 37572 +3 35449 37573 37594 +3 35450 35643 35677 +3 35451 35678 35644 +3 35452 36359 37495 +3 35452 37495 36714 +3 35453 36715 37496 +3 35453 37496 36360 +3 35454 36371 36505 +3 35454 36505 35574 +3 35455 35575 36506 +3 35455 36506 36372 +3 35456 36068 36393 +3 35456 36393 35756 +3 35457 35757 36394 +3 35457 36394 36069 +3 35458 36501 37341 +3 35458 37341 36435 +3 35459 36436 37342 +3 35459 37342 36502 +3 35460 35941 36555 +3 35460 36555 36096 +3 35461 36097 36556 +3 35461 36556 35942 +3 35462 35861 36210 +3 35462 36210 35786 +3 35463 35787 36211 +3 35463 36211 35862 +3 35464 35824 36064 +3 35464 36064 35709 +3 35465 35710 36065 +3 35465 36065 35825 +3 35466 36752 36989 +3 35466 36989 35799 +3 35467 35800 36990 +3 35467 36990 36753 +3 35468 37679 38259 +3 35468 38259 36173 +3 35469 36174 38260 +3 35469 38260 37680 +3 35470 36999 38647 +3 35470 38647 37231 +3 35471 37232 38648 +3 35471 38648 37000 +3 35472 35883 37205 +3 35472 37205 36853 +3 35473 36854 37206 +3 35473 37206 35884 +3 35474 35500 36618 +3 35474 36618 36549 +3 35475 36550 36619 +3 35475 36619 35500 +3 35476 35877 37255 +3 35476 37255 36878 +3 35477 36879 37256 +3 35477 37256 35878 +3 35478 35721 35988 +3 35478 35988 35917 +3 35479 35918 35989 +3 35479 35989 35722 +3 35480 36249 36612 +3 35480 36612 35859 +3 35481 35860 36613 +3 35481 36613 36250 +3 35482 36874 38018 +3 35482 38018 36742 +3 35483 36743 38019 +3 35483 38019 36875 +3 35484 36287 37116 +3 35484 37116 36483 +3 35485 36484 37117 +3 35485 37117 36288 +3 35486 35750 36074 +3 35486 36074 35824 +3 35487 35825 36075 +3 35487 36075 35751 +3 35488 37497 38080 +3 35488 38080 36165 +3 35489 36166 38081 +3 35489 38081 37498 +3 35490 36154 37463 +3 35490 37463 36921 +3 35491 36922 37464 +3 35491 37464 36155 +3 35492 36815 37327 +3 35492 37327 36054 +3 35493 36055 37328 +3 35493 37328 36816 +3 35494 36128 36280 +3 35494 36280 35661 +3 35495 35662 36281 +3 35495 36281 36129 +3 35496 35675 35764 +3 35496 35764 35595 +3 35497 35596 35765 +3 35497 35765 35676 +3 35498 35679 35742 +3 35498 35742 35561 +3 35499 35562 35743 +3 35499 35743 35680 +3 35500 36619 36618 +3 35501 35960 36907 +3 35501 36907 36515 +3 35502 36516 36908 +3 35502 36908 35961 +3 35503 36382 36774 +3 35503 36774 35905 +3 35504 35906 36775 +3 35504 36775 36383 +3 35505 35520 36035 +3 35505 36035 35977 +3 35506 35978 36036 +3 35506 36036 35520 +3 35507 36029 36237 +3 35507 36237 35735 +3 35508 35736 36238 +3 35508 36238 36030 +3 35509 35623 35774 +3 35509 35774 35675 +3 35510 35676 35775 +3 35510 35775 35624 +3 35511 36023 36784 +3 35511 36784 36024 +3 35512 37643 38645 +3 35512 38645 36632 +3 35513 36633 38646 +3 35513 38646 37644 +3 35514 37221 38026 +3 35514 38026 36403 +3 35515 36404 38027 +3 35515 38027 37222 +3 35516 38056 38503 +3 35516 38503 37118 +3 35517 37119 38504 +3 35517 38504 38057 +3 35518 37347 38766 +3 35518 38766 37073 +3 35519 37074 38767 +3 35519 38767 37348 +3 35520 36036 36035 +3 35521 36626 37777 +3 35521 37777 36782 +3 35522 35911 36453 +3 35522 36453 36274 +3 35523 36275 36454 +3 35523 36454 35912 +3 35524 36783 37778 +3 35524 37778 36627 +3 35525 37412 38255 +3 35525 38255 36471 +3 35526 36472 38256 +3 35526 38256 37412 +3 35527 35991 36780 +3 35527 36780 36357 +3 35528 36358 36781 +3 35528 36781 35992 +3 35529 35744 36136 +3 35529 36136 35899 +3 35530 35900 36137 +3 35530 36137 35745 +3 35531 35629 35788 +3 35531 35788 35691 +3 35532 35692 35789 +3 35532 35789 35630 +3 35533 37423 38109 +3 35533 38109 36331 +3 35534 36332 38110 +3 35534 38110 37424 +3 35535 37945 38623 +3 35535 38623 36315 +3 35536 36316 38624 +3 35536 38624 37946 +3 35537 35691 35792 +3 35537 35792 35643 +3 35538 35644 35793 +3 35538 35793 35692 +3 35539 36124 36583 +3 35539 36583 36112 +3 35540 36113 36584 +3 35540 36584 36125 +3 35541 35635 35772 +3 35541 35772 35679 +3 35542 35680 35773 +3 35542 35773 35636 +3 35543 37657 38460 +3 35543 38460 36485 +3 35544 36486 38461 +3 35544 38461 37658 +3 35545 36021 36106 +3 35545 36106 35621 +3 35546 35622 36107 +3 35546 36107 36022 +3 35547 35727 36126 +3 35547 36126 35937 +3 35548 35938 36127 +3 35548 36127 35728 +3 35549 35627 36031 +3 35549 36031 35931 +3 35550 35932 36032 +3 35550 36032 35628 +3 35551 36112 36598 +3 35551 36598 36068 +3 35552 36069 36599 +3 35552 36599 36113 +3 35553 36235 37001 +3 35553 37001 36427 +3 35554 36428 37002 +3 35554 37002 36236 +3 35555 35865 36931 +3 35555 36931 36645 +3 35556 36646 36932 +3 35556 36932 35866 +3 35557 37131 38955 +3 35557 38955 37499 +3 35558 37500 38956 +3 35558 38956 37132 +3 35559 36060 36604 +3 35559 36604 36124 +3 35560 36125 36605 +3 35560 36605 36061 +3 35561 35742 35794 +3 35561 35794 35586 +3 35562 35586 35795 +3 35562 35795 35743 +3 35563 37261 37910 +3 35563 37910 36327 +3 35564 36328 37911 +3 35564 37911 37262 +3 35565 35826 36313 +3 35565 36313 36033 +3 35566 36034 36314 +3 35566 36314 35827 +3 35567 36130 36329 +3 35567 36329 35766 +3 35568 35767 36330 +3 35568 36330 36131 +3 35569 36222 37145 +3 35569 37145 36223 +3 35570 37325 37619 +3 35570 37619 36693 +3 35571 36694 37620 +3 35571 37620 37326 +3 35572 37882 38687 +3 35572 38687 36493 +3 35573 36494 38688 +3 35573 38688 37883 +3 35574 36505 36543 +3 35574 36543 35633 +3 35575 35634 36544 +3 35575 36544 36506 +3 35576 36321 37576 +3 35576 37576 36906 +3 35577 36906 37577 +3 35577 37577 36322 +3 35578 36011 37639 +3 35578 37639 37237 +3 35579 37238 37640 +3 35579 37640 36012 +3 35580 36284 37886 +3 35580 37886 37291 +3 35581 37292 37887 +3 35581 37887 36285 +3 35582 35987 36845 +3 35582 36845 36497 +3 35583 36498 36846 +3 35583 36846 35990 +3 35584 36829 38530 +3 35584 38530 37389 +3 35585 37390 38531 +3 35585 38531 36830 +3 35586 35794 35795 +3 35587 36122 37227 +3 35587 37227 36760 +3 35588 36761 37228 +3 35588 37228 36123 +3 35589 36423 37009 +3 35589 37009 36291 +3 35590 36292 37010 +3 35590 37010 36424 +3 35591 35661 36247 +3 35591 36247 36171 +3 35592 36172 36248 +3 35592 36248 35662 +3 35593 36455 36670 +3 35593 36670 36072 +3 35594 36073 36671 +3 35594 36671 36456 +3 35595 35764 35818 +3 35595 35818 35653 +3 35596 35654 35819 +3 35596 35819 35765 +3 35597 36056 36347 +3 35597 36347 35873 +3 35598 35874 36348 +3 35598 36348 36057 +3 35599 35754 36997 +3 35599 36997 36866 +3 35600 36867 36998 +3 35600 36998 35755 +3 35601 36797 37810 +3 35601 37810 36691 +3 35602 36692 37811 +3 35602 37811 36798 +3 35603 35871 36961 +3 35603 36961 36707 +3 35604 36708 36962 +3 35604 36962 35872 +3 35605 37175 38390 +3 35605 38390 36888 +3 35606 36889 38391 +3 35606 38391 37176 +3 35607 37118 38585 +3 35607 38585 37131 +3 35608 37132 38586 +3 35608 38586 37119 +3 35609 36588 36431 +3 35610 36432 36589 +3 35611 36134 36457 +3 35611 36457 35915 +3 35612 35916 36458 +3 35612 36458 36135 +3 35613 36229 36415 +3 35613 36415 35805 +3 35614 35806 36416 +3 35614 36416 36230 +3 35615 36214 38044 +3 35615 38044 37507 +3 35616 37508 38045 +3 35616 38045 36215 +3 35617 36189 37806 +3 35617 37806 36884 +3 35618 36885 37807 +3 35618 37807 36190 +3 35619 35834 36513 +3 35619 36513 36303 +3 35620 36304 36514 +3 35620 36514 35835 +3 35621 36106 36159 +3 35621 36159 35657 +3 35622 35658 36160 +3 35622 36160 36107 +3 35623 35624 35802 +3 35623 35802 35774 +3 35624 35775 35802 +3 35625 37919 38579 +3 35625 38579 36345 +3 35626 36346 38580 +3 35626 38580 37920 +3 35627 35657 36157 +3 35627 36157 36031 +3 35628 36032 36158 +3 35628 36158 35658 +3 35629 35667 35828 +3 35629 35828 35788 +3 35630 35789 35829 +3 35630 35829 35668 +3 35631 36551 37309 +3 35631 37309 36437 +3 35632 36438 37310 +3 35632 37310 36552 +3 35633 36543 36571 +3 35633 36571 35634 +3 35634 36571 36544 +3 35635 35677 35814 +3 35635 35814 35772 +3 35636 35773 35815 +3 35636 35815 35678 +3 35637 37213 38032 +3 35637 38032 36529 +3 35638 36530 38033 +3 35638 38033 37214 +3 35639 36693 38014 +3 35639 38014 37013 +3 35640 37014 38015 +3 35640 38015 36694 +3 35641 36864 37677 +3 35641 37677 36527 +3 35642 36528 37678 +3 35642 37678 36865 +3 35643 35792 35822 +3 35643 35822 35677 +3 35644 35678 35823 +3 35644 35823 35793 +3 35645 36736 38773 +3 35645 38773 36737 +3 35646 35925 36156 +3 35646 36156 35926 +3 35647 36756 37141 +3 35647 37141 36102 +3 35648 36103 37142 +3 35648 37142 36757 +3 35649 35816 36150 +3 35649 36150 35933 +3 35650 35934 36151 +3 35650 36151 35817 +3 35651 35973 36689 +3 35651 36689 36361 +3 35652 36362 36690 +3 35652 36690 35974 +3 35653 35818 35844 +3 35653 35844 35667 +3 35654 35668 35845 +3 35654 35845 35819 +3 35655 36231 38036 +3 35655 38036 37515 +3 35656 37516 38037 +3 35656 38037 36232 +3 35657 36159 36157 +3 35658 36158 36160 +3 35659 37431 37869 +3 35659 37869 36365 +3 35660 36366 37870 +3 35660 37870 37432 +3 35661 36280 36247 +3 35662 36248 36281 +3 35663 37732 38550 +3 35663 38550 36421 +3 35664 36422 38551 +3 35664 38551 37733 +3 35665 36483 37298 +3 35665 37298 36547 +3 35666 36548 37299 +3 35666 37299 36484 +3 35667 35844 35828 +3 35668 35829 35845 +3 35669 36776 37047 +3 35670 37048 36777 +3 35671 36750 39003 +3 35671 39003 38362 +3 35672 38363 39004 +3 35672 39004 36751 +3 35673 37231 39230 +3 35673 39230 37753 +3 35674 37754 39231 +3 35674 39231 37232 +3 35675 35774 35863 +3 35675 35863 35764 +3 35676 35765 35864 +3 35676 35864 35775 +3 35677 35822 35814 +3 35678 35815 35823 +3 35679 35772 35852 +3 35679 35852 35742 +3 35680 35743 35853 +3 35680 35853 35773 +3 35681 36572 36835 +3 35681 36835 35954 +3 35682 35955 36836 +3 35682 36836 36573 +3 35683 38157 38910 +3 35683 38910 36665 +3 35684 36666 38911 +3 35684 38911 38158 +3 35685 36896 37457 +3 35685 37457 36311 +3 35686 36312 37458 +3 35686 37458 36897 +3 35687 37427 37871 +3 35687 37871 36185 +3 35688 36186 37872 +3 35688 37872 37428 +3 35689 36647 38871 +3 35689 38871 38042 +3 35690 38043 38872 +3 35690 38872 36648 +3 35691 35788 35879 +3 35691 35879 35792 +3 35692 35793 35880 +3 35692 35880 35789 +3 35693 35899 36265 +3 35693 36265 36003 +3 35694 36004 36266 +3 35694 36266 35900 +3 35695 36255 36445 +3 35695 36445 35790 +3 35696 35791 36446 +3 35696 36446 36256 +3 35697 36413 37059 +3 35697 37059 36423 +3 35698 36424 37060 +3 35698 37060 36414 +3 35699 36851 37259 +3 35699 37259 36118 +3 35700 36119 37260 +3 35700 37260 36852 +3 35701 36821 37207 +3 35701 37207 36090 +3 35702 36091 37208 +3 35702 37208 36822 +3 35703 36427 37071 +3 35703 37071 36413 +3 35704 36414 37072 +3 35704 37072 36428 +3 35705 36547 37289 +3 35705 37289 36551 +3 35706 36552 37290 +3 35706 37290 36548 +3 35707 35933 36227 +3 35707 36227 35925 +3 35708 35926 36228 +3 35708 36228 35934 +3 35709 36064 36269 +3 35709 36269 35869 +3 35710 35870 36270 +3 35710 36270 36065 +3 35711 37588 38432 +3 35711 38432 36628 +3 35712 36629 38433 +3 35712 38433 37589 +3 35713 36033 36443 +3 35713 36443 36108 +3 35714 36109 36444 +3 35714 36444 36034 +3 35715 35927 36667 +3 35715 36667 36449 +3 35716 36450 36668 +3 35716 36668 35928 +3 35717 36261 38241 +3 35717 38241 37734 +3 35718 37735 38242 +3 35718 38242 36262 +3 35719 37162 37637 +3 35719 37637 36204 +3 35720 36205 37638 +3 35720 37638 37163 +3 35721 36003 36301 +3 35721 36301 35988 +3 35722 35989 36302 +3 35722 36302 36004 +3 35723 36108 36459 +3 35723 36459 36056 +3 35724 36057 36460 +3 35724 36460 36109 +3 35725 36027 36620 +3 35725 36620 36323 +3 35726 36324 36621 +3 35726 36621 36028 +3 35727 35848 36267 +3 35727 36267 36126 +3 35728 36127 36268 +3 35728 36268 35849 +3 35729 37166 37590 +3 35729 37590 36199 +3 35730 36200 37591 +3 35730 37591 37167 +3 35731 36517 36764 +3 35731 36764 35981 +3 35732 35982 36765 +3 35732 36765 36518 +3 35733 37313 37939 +3 35733 37939 36441 +3 35734 36442 37940 +3 35734 37940 37314 +3 35735 36237 36521 +3 35735 36521 36005 +3 35736 36006 36522 +3 35736 36522 36238 +3 35737 36363 37857 +3 35737 37857 37285 +3 35738 37286 37858 +3 35738 37858 36364 +3 35739 36120 37908 +3 35739 37908 37548 +3 35740 37549 37909 +3 35740 37909 36121 +3 35741 36096 36634 +3 35741 36634 36097 +3 35742 35852 35907 +3 35742 35907 35794 +3 35743 35795 35908 +3 35743 35908 35853 +3 35744 35881 36295 +3 35744 36295 36136 +3 35745 36137 36296 +3 35745 36296 35882 +3 35746 36049 36451 +3 35746 36451 36134 +3 35747 36135 36452 +3 35747 36452 36049 +3 35748 36643 38643 +3 35748 38643 37773 +3 35749 37774 38644 +3 35749 38644 36644 +3 35750 35937 36307 +3 35750 36307 36074 +3 35751 36075 36308 +3 35751 36308 35938 +3 35752 37021 38464 +3 35752 38464 37253 +3 35753 37254 38465 +3 35753 38465 37022 +3 35754 35796 37106 +3 35754 37106 36997 +3 35755 36998 37107 +3 35755 37107 35797 +3 35756 36393 36624 +3 35756 36624 35971 +3 35757 35972 36625 +3 35757 36625 36394 +3 35758 36782 37865 +3 35758 37865 36797 +3 35759 36798 37866 +3 35759 37866 36783 +3 35760 37283 37570 +3 35760 37570 36076 +3 35761 36077 37571 +3 35761 37571 37284 +3 35762 37098 37611 +3 35762 37611 36319 +3 35763 36320 37612 +3 35763 37612 37099 +3 35764 35863 35943 +3 35764 35943 35818 +3 35765 35819 35944 +3 35765 35944 35864 +3 35766 36329 36469 +3 35766 36469 35861 +3 35767 35862 36470 +3 35767 36470 36330 +3 35768 36039 36677 +3 35768 36677 36409 +3 35769 36410 36678 +3 35769 36678 36040 +3 35770 36635 37943 +3 35770 37943 37124 +3 35771 37125 37944 +3 35771 37944 36636 +3 35772 35814 35913 +3 35772 35913 35852 +3 35773 35853 35914 +3 35773 35914 35815 +3 35774 35802 35901 +3 35774 35901 35863 +3 35775 35864 35902 +3 35775 35902 35802 +3 35776 36401 37799 +3 35776 37799 37235 +3 35777 37236 37800 +3 35777 37800 36402 +3 35778 36799 37139 +3 35778 37139 36152 +3 35779 36153 37140 +3 35779 37140 36800 +3 35780 36563 38384 +3 35780 38384 37653 +3 35781 37654 38385 +3 35781 38385 36564 +3 35782 37691 38107 +3 35782 38107 36253 +3 35783 36254 38108 +3 35783 38108 37692 +3 35784 36602 38635 +3 35784 38635 37894 +3 35785 37895 38636 +3 35785 38636 36603 +3 35786 36210 36467 +3 35786 36467 36029 +3 35787 36030 36468 +3 35787 36468 36211 +3 35788 35828 35952 +3 35788 35952 35879 +3 35789 35880 35953 +3 35789 35953 35829 +3 35790 36445 36525 +3 35790 36525 35838 +3 35791 35839 36526 +3 35791 36526 36446 +3 35792 35879 35939 +3 35792 35939 35822 +3 35793 35823 35940 +3 35793 35940 35880 +3 35794 35907 35949 +3 35794 35949 35795 +3 35795 35949 35908 +3 35796 35797 37130 +3 35796 37130 37106 +3 35797 37107 37130 +3 35798 37323 38918 +3 35798 38918 37347 +3 35799 36989 37271 +3 35799 37271 36062 +3 35800 36063 37272 +3 35800 37272 36990 +3 35801 37348 38919 +3 35801 38919 37324 +3 35802 35902 35901 +3 35803 36507 36841 +3 35803 36841 36197 +3 35804 36198 36842 +3 35804 36842 36508 +3 35805 36415 36557 +3 35805 36557 35921 +3 35806 35922 36558 +3 35806 36558 36416 +3 35807 36545 37625 +3 35807 37625 36929 +3 35808 36930 37626 +3 35808 37626 36546 +3 35809 36250 36859 +3 35809 36859 36249 +3 35810 36714 37789 +3 35810 37789 36959 +3 35811 36960 37790 +3 35811 37790 36715 +3 35812 36509 38178 +3 35812 38178 37552 +3 35813 37553 38179 +3 35813 38179 36510 +3 35814 35822 35958 +3 35814 35958 35913 +3 35815 35914 35959 +3 35815 35959 35823 +3 35816 35931 36299 +3 35816 36299 36150 +3 35817 36151 36300 +3 35817 36300 35932 +3 35818 35943 35983 +3 35818 35983 35844 +3 35819 35845 35984 +3 35819 35984 35944 +3 35820 37736 39093 +3 35820 39093 37351 +3 35821 37352 39094 +3 35821 39094 37737 +3 35822 35939 35958 +3 35823 35959 35940 +3 35824 36074 36367 +3 35824 36367 36064 +3 35825 36065 36368 +3 35825 36368 36075 +3 35826 36019 36519 +3 35826 36519 36313 +3 35827 36314 36520 +3 35827 36520 36020 +3 35828 35844 35985 +3 35828 35985 35952 +3 35829 35953 35986 +3 35829 35986 35845 +3 35830 37319 38450 +3 35830 38450 37019 +3 35831 37020 38451 +3 35831 38451 37320 +3 35832 36849 37371 +3 35832 37371 36380 +3 35833 36381 37372 +3 35833 37372 36850 +3 35834 36144 36778 +3 35834 36778 36513 +3 35835 36514 36779 +3 35835 36779 36145 +3 35836 36574 36882 +3 35836 36882 36177 +3 35837 36178 36883 +3 35837 36883 36575 +3 35838 36525 36559 +3 35838 36559 35854 +3 35839 35854 36560 +3 35839 36560 36526 +3 35840 37976 38060 +3 35840 38060 35889 +3 35841 35890 38061 +3 35841 38061 37977 +3 35842 36369 37859 +3 35842 37859 37321 +3 35843 37322 37860 +3 35843 37860 36370 +3 35844 35983 35985 +3 35845 35986 35984 +3 35846 37211 38212 +3 35846 38212 36857 +3 35847 36858 38213 +3 35847 38213 37212 +3 35848 35917 36351 +3 35848 36351 36267 +3 35849 36268 36352 +3 35849 36352 35918 +3 35850 36357 37033 +3 35850 37033 36581 +3 35851 36582 37034 +3 35851 37034 36358 +3 35852 35913 36041 +3 35852 36041 35907 +3 35853 35908 36042 +3 35853 36042 35914 +3 35854 36559 36560 +3 35855 36884 38414 +3 35855 38414 37421 +3 35856 37422 38415 +3 35856 38415 36885 +3 35857 36720 37217 +3 35857 37217 36411 +3 35858 36412 37218 +3 35858 37218 36721 +3 35859 36612 37061 +3 35859 37061 36382 +3 35860 36383 37062 +3 35860 37062 36613 +3 35861 36469 36541 +3 35861 36541 36210 +3 35862 36211 36542 +3 35862 36542 36470 +3 35863 35901 36025 +3 35863 36025 35943 +3 35864 35944 36026 +3 35864 36026 35902 +3 35865 36163 37188 +3 35865 37188 36931 +3 35866 36932 37189 +3 35866 37189 36164 +3 35867 37150 38336 +3 35867 38336 37080 +3 35868 37081 38337 +3 35868 38337 37151 +3 35869 36269 36417 +3 35869 36417 36021 +3 35870 36022 36418 +3 35870 36418 36270 +3 35871 36309 37181 +3 35871 37181 36961 +3 35872 36962 37182 +3 35872 37182 36310 +3 35873 36347 36590 +3 35873 36590 36130 +3 35874 36131 36591 +3 35874 36591 36348 +3 35875 37540 38746 +3 35875 38746 37150 +3 35876 37151 38747 +3 35876 38747 37541 +3 35877 36429 37544 +3 35877 37544 37255 +3 35878 37256 37545 +3 35878 37545 36430 +3 35879 35952 36050 +3 35879 36050 35939 +3 35880 35940 36051 +3 35880 36051 35953 +3 35881 35977 36391 +3 35881 36391 36295 +3 35882 36296 36392 +3 35882 36392 35978 +3 35883 36263 37536 +3 35883 37536 37205 +3 35884 37206 37537 +3 35884 37537 36264 +3 35885 36641 38165 +3 35885 38165 37447 +3 35886 37448 38166 +3 35886 38166 36642 +3 35887 36585 38742 +3 35887 38742 38167 +3 35888 38168 38743 +3 35888 38743 36586 +3 35889 38060 38086 +3 35889 38086 35890 +3 35890 38086 38061 +3 35891 36216 36872 +3 35891 36872 36608 +3 35892 36609 36873 +3 35892 36873 36217 +3 35893 37538 38926 +3 35893 38926 38493 +3 35894 38494 38927 +3 35894 38927 37539 +3 35895 36661 38058 +3 35895 38058 37373 +3 35896 37374 38059 +3 35896 38059 36662 +3 35897 36675 39031 +3 35897 39031 38398 +3 35898 38399 39032 +3 35898 39032 36676 +3 35899 36136 36477 +3 35899 36477 36265 +3 35900 36266 36478 +3 35900 36478 36137 +3 35901 35902 36046 +3 35901 36046 36025 +3 35902 36026 36046 +3 35903 36487 37675 +3 35903 37675 37179 +3 35904 37180 37676 +3 35904 37676 36488 +3 35905 36774 37092 +3 35905 37092 36297 +3 35906 36298 37093 +3 35906 37093 36775 +3 35907 36041 36080 +3 35907 36080 35949 +3 35908 35949 36081 +3 35908 36081 36042 +3 35909 37499 39196 +3 35909 39196 37763 +3 35910 37764 39197 +3 35910 39197 37500 +3 35911 36323 36801 +3 35911 36801 36453 +3 35912 36454 36802 +3 35912 36802 36324 +3 35913 35958 36086 +3 35913 36086 36041 +3 35914 36042 36087 +3 35914 36087 35959 +3 35915 36457 36712 +3 35915 36712 36229 +3 35916 36230 36713 +3 35916 36713 36458 +3 35917 35988 36419 +3 35917 36419 36351 +3 35918 36352 36420 +3 35918 36420 35989 +3 35919 37917 39395 +3 35919 39395 37550 +3 35920 37551 39396 +3 35920 39396 37918 +3 35921 36557 36657 +3 35921 36657 36128 +3 35922 36129 36658 +3 35922 36658 36558 +3 35923 37554 37722 +3 35923 37722 36009 +3 35924 36010 37723 +3 35924 37723 37555 +3 35925 36227 36433 +3 35925 36433 36156 +3 35926 36156 36434 +3 35926 36434 36228 +3 35927 36142 36833 +3 35927 36833 36667 +3 35928 36668 36834 +3 35928 36834 36143 +3 35929 36305 37122 +3 35929 37122 36805 +3 35930 36806 37123 +3 35930 37123 36306 +3 35931 36031 36386 +3 35931 36386 36299 +3 35932 36300 36387 +3 35932 36387 36032 +3 35933 36150 36425 +3 35933 36425 36227 +3 35934 36228 36426 +3 35934 36426 36151 +3 35935 37017 39079 +3 35935 39079 38095 +3 35936 38096 39080 +3 35936 39080 37018 +3 35937 36126 36491 +3 35937 36491 36307 +3 35938 36308 36492 +3 35938 36492 36127 +3 35939 36050 36094 +3 35939 36094 35958 +3 35940 35959 36095 +3 35940 36095 36051 +3 35941 36361 36951 +3 35941 36951 36555 +3 35942 36556 36952 +3 35942 36952 36362 +3 35943 36025 36088 +3 35943 36088 35983 +3 35944 35984 36089 +3 35944 36089 36026 +3 35945 36831 39067 +3 35945 39067 38312 +3 35946 38313 39068 +3 35946 39068 36832 +3 35947 36862 38738 +3 35947 38738 37873 +3 35948 37873 38739 +3 35948 38739 36863 +3 35949 36080 36081 +3 35950 36489 37647 +3 35950 37647 37133 +3 35951 37134 37648 +3 35951 37648 36490 +3 35952 35985 36098 +3 35952 36098 36050 +3 35953 36051 36099 +3 35953 36099 35986 +3 35954 36835 37053 +3 35954 37053 36224 +3 35955 36225 37054 +3 35955 37054 36836 +3 35956 37406 38589 +3 35956 38589 37175 +3 35957 37176 38590 +3 35957 38590 37407 +3 35958 36094 36086 +3 35959 36087 36095 +3 35960 36339 37275 +3 35960 37275 36907 +3 35961 36908 37276 +3 35961 37276 36340 +3 35962 36637 38639 +3 35962 38639 38038 +3 35963 38039 38640 +3 35963 38640 36638 +3 35964 36870 38937 +3 35964 38937 38115 +3 35965 38116 38938 +3 35965 38938 36871 +3 35966 36716 38125 +3 35966 38125 36717 +3 35967 36876 37345 +3 35967 37345 36463 +3 35968 36464 37346 +3 35968 37346 36877 +3 35969 37086 37965 +3 35969 37965 36864 +3 35970 36865 37966 +3 35970 37966 37087 +3 35971 36624 36789 +3 35971 36789 36167 +3 35972 36168 36790 +3 35972 36790 36625 +3 35973 36278 36953 +3 35973 36953 36689 +3 35974 36690 36954 +3 35974 36954 36279 +3 35975 37550 38977 +3 35975 38977 37538 +3 35976 37539 38978 +3 35976 38978 37551 +3 35977 36035 36479 +3 35977 36479 36391 +3 35978 36392 36480 +3 35978 36480 36036 +3 35979 37265 37655 +3 35979 37655 36726 +3 35980 36727 37656 +3 35980 37656 37266 +3 35981 36764 36957 +3 35981 36957 36220 +3 35982 36221 36958 +3 35982 36958 36765 +3 35983 36088 36114 +3 35983 36114 35985 +3 35984 35986 36115 +3 35984 36115 36089 +3 35985 36114 36098 +3 35986 36099 36115 +3 35987 36515 37377 +3 35987 37377 36845 +3 35988 36301 36419 +3 35989 36420 36302 +3 35990 36846 37378 +3 35990 37378 36516 +3 35991 36384 37156 +3 35991 37156 36780 +3 35992 36781 37157 +3 35992 37157 36385 +3 35993 37013 38296 +3 35993 38296 37302 +3 35994 37303 38297 +3 35994 38297 37014 +3 35995 37253 38605 +3 35995 38605 37406 +3 35996 37407 38606 +3 35996 38606 37254 +3 35997 36730 38975 +3 35997 38975 38364 +3 35998 38365 38976 +3 35998 38976 36731 +3 35999 36317 37243 +3 35999 37243 36945 +3 36000 36946 37244 +3 36000 37244 36318 +3 36001 36860 38575 +3 36001 38575 37730 +3 36002 37731 38576 +3 36002 38576 36861 +3 36003 36265 36537 +3 36003 36537 36301 +3 36004 36302 36538 +3 36004 36538 36266 +3 36005 36521 36744 +3 36005 36744 36255 +3 36006 36256 36745 +3 36006 36745 36522 +3 36007 37023 37757 +3 36007 37757 36776 +3 36008 36777 37758 +3 36008 37758 37024 +3 36009 37722 37751 +3 36009 37751 36043 +3 36010 36043 37752 +3 36010 37752 37723 +3 36011 36399 37971 +3 36011 37971 37639 +3 36012 37640 37972 +3 36012 37972 36400 +3 36013 37355 37933 +3 36013 37933 36639 +3 36014 36640 37934 +3 36014 37934 37356 +3 36015 36787 38683 +3 36015 38683 37937 +3 36016 37938 38684 +3 36016 38684 36788 +3 36017 36649 37511 +3 36017 37511 36909 +3 36018 36910 37512 +3 36018 37512 36650 +3 36019 36171 36655 +3 36019 36655 36519 +3 36020 36520 36656 +3 36020 36656 36172 +3 36021 36417 36531 +3 36021 36531 36106 +3 36022 36107 36532 +3 36022 36532 36418 +3 36023 36497 37219 +3 36023 37219 36784 +3 36024 36784 37220 +3 36024 37220 36498 +3 36025 36046 36146 +3 36025 36146 36088 +3 36026 36089 36147 +3 36026 36147 36046 +3 36027 36303 36843 +3 36027 36843 36620 +3 36028 36621 36844 +3 36028 36844 36304 +3 36029 36467 36659 +3 36029 36659 36237 +3 36030 36238 36660 +3 36030 36660 36468 +3 36031 36157 36523 +3 36031 36523 36386 +3 36032 36387 36524 +3 36032 36524 36158 +3 36033 36313 36703 +3 36033 36703 36443 +3 36034 36444 36704 +3 36034 36704 36314 +3 36035 36036 36503 +3 36035 36503 36479 +3 36036 36480 36503 +3 36037 37867 39029 +3 36037 39029 37319 +3 36038 37320 39030 +3 36038 39030 37868 +3 36039 36274 36902 +3 36039 36902 36677 +3 36040 36678 36903 +3 36040 36903 36275 +3 36041 36086 36169 +3 36041 36169 36080 +3 36042 36081 36170 +3 36042 36170 36087 +3 36043 37751 37752 +3 36044 37005 39331 +3 36044 39331 38599 +3 36045 38600 39332 +3 36045 39332 37006 +3 36046 36147 36146 +3 36047 36701 37194 +3 36047 37194 36574 +3 36048 36575 37195 +3 36048 37195 36702 +3 36049 36452 36711 +3 36049 36711 36451 +3 36050 36098 36179 +3 36050 36179 36094 +3 36051 36095 36180 +3 36051 36180 36099 +3 36052 36959 38010 +3 36052 38010 37104 +3 36053 37105 38011 +3 36053 38011 36960 +3 36054 37327 37904 +3 36054 37904 36663 +3 36055 36664 37905 +3 36055 37905 37328 +3 36056 36459 36748 +3 36056 36748 36347 +3 36057 36348 36749 +3 36057 36749 36460 +3 36058 36608 37209 +3 36058 37209 36695 +3 36059 36696 37210 +3 36059 37210 36609 +3 36060 36409 36927 +3 36060 36927 36604 +3 36061 36605 36928 +3 36061 36928 36410 +3 36062 37271 37469 +3 36062 37469 36317 +3 36063 36318 37470 +3 36063 37470 37272 +3 36064 36367 36561 +3 36064 36561 36269 +3 36065 36270 36562 +3 36065 36562 36368 +3 36066 36823 39011 +3 36066 39011 38226 +3 36067 38227 39012 +3 36067 39012 36824 +3 36068 36598 36900 +3 36068 36900 36393 +3 36069 36394 36901 +3 36069 36901 36599 +3 36070 38495 39319 +3 36070 39319 37011 +3 36071 37012 39320 +3 36071 39320 38496 +3 36072 36670 37043 +3 36072 37043 36507 +3 36073 36508 37044 +3 36073 37044 36671 +3 36074 36307 36576 +3 36074 36576 36367 +3 36075 36368 36577 +3 36075 36577 36308 +3 36076 37570 37824 +3 36076 37824 36359 +3 36077 36360 37825 +3 36077 37825 37571 +3 36078 37389 38908 +3 36078 38908 37687 +3 36079 37690 38909 +3 36079 38909 37390 +3 36080 36169 36201 +3 36080 36201 36081 +3 36081 36201 36170 +3 36082 36880 37177 +3 36082 37177 36377 +3 36083 36378 37178 +3 36083 37178 36881 +3 36084 37534 38126 +3 36084 38126 36734 +3 36085 36735 38127 +3 36085 38127 37535 +3 36086 36094 36202 +3 36086 36202 36169 +3 36087 36170 36203 +3 36087 36203 36095 +3 36088 36146 36195 +3 36088 36195 36114 +3 36089 36115 36196 +3 36089 36196 36147 +3 36090 37207 37524 +3 36090 37524 36439 +3 36091 36440 37525 +3 36091 37525 37208 +3 36092 37832 38473 +3 36092 38473 36768 +3 36093 36769 38474 +3 36093 38474 37833 +3 36094 36179 36202 +3 36095 36203 36180 +3 36096 36555 37055 +3 36096 37055 36634 +3 36097 36634 37056 +3 36097 37056 36556 +3 36098 36114 36212 +3 36098 36212 36179 +3 36099 36180 36213 +3 36099 36213 36115 +3 36100 36695 37251 +3 36100 37251 36681 +3 36101 36682 37252 +3 36101 37252 36696 +3 36102 37141 37333 +3 36102 37333 36257 +3 36103 36258 37334 +3 36103 37334 37142 +3 36104 37363 38231 +3 36104 38231 36977 +3 36105 36978 38232 +3 36105 38232 37364 +3 36106 36531 36579 +3 36106 36579 36159 +3 36107 36160 36580 +3 36107 36580 36532 +3 36108 36443 36825 +3 36108 36825 36459 +3 36109 36460 36826 +3 36109 36826 36444 +3 36110 36681 37269 +3 36110 37269 36701 +3 36111 36702 37270 +3 36111 37270 36682 +3 36112 36583 37025 +3 36112 37025 36598 +3 36113 36599 37026 +3 36113 37026 36584 +3 36114 36195 36212 +3 36115 36213 36196 +3 36116 36847 38548 +3 36116 38548 37849 +3 36117 37850 38549 +3 36117 38549 36848 +3 36118 37259 37599 +3 36118 37599 36495 +3 36119 36496 37600 +3 36119 37600 37260 +3 36120 37245 38235 +3 36120 38235 37908 +3 36121 37909 38236 +3 36121 38236 37246 +3 36122 36616 37671 +3 36122 37671 37227 +3 36123 37228 37674 +3 36123 37674 36617 +3 36124 36604 37037 +3 36124 37037 36583 +3 36125 36584 37038 +3 36125 37038 36605 +3 36126 36267 36610 +3 36126 36610 36491 +3 36127 36492 36611 +3 36127 36611 36268 +3 36128 36657 36791 +3 36128 36791 36280 +3 36129 36281 36792 +3 36129 36792 36658 +3 36130 36590 36785 +3 36130 36785 36329 +3 36131 36330 36786 +3 36131 36786 36591 +3 36132 37393 38462 +3 36132 38462 37211 +3 36133 37212 38463 +3 36133 38463 37394 +3 36134 36451 36772 +3 36134 36772 36457 +3 36135 36458 36773 +3 36135 36773 36452 +3 36136 36295 36622 +3 36136 36622 36477 +3 36137 36478 36623 +3 36137 36623 36296 +3 36138 38072 38629 +3 36138 38629 36705 +3 36139 36706 38630 +3 36139 38630 38073 +3 36140 37417 38396 +3 36140 38396 36685 +3 36141 36686 38397 +3 36141 38397 37418 +3 36142 36293 36971 +3 36142 36971 36833 +3 36143 36834 36972 +3 36143 36972 36294 +3 36144 36271 36993 +3 36144 36993 36778 +3 36145 36779 36994 +3 36145 36994 36272 +3 36146 36147 36226 +3 36146 36226 36195 +3 36147 36196 36226 +3 36148 38247 39057 +3 36148 39057 37007 +3 36149 37008 39058 +3 36149 39058 38248 +3 36150 36299 36569 +3 36150 36569 36425 +3 36151 36426 36570 +3 36151 36570 36300 +3 36152 37139 37451 +3 36152 37451 36720 +3 36153 36721 37452 +3 36153 37452 37140 +3 36154 36697 38022 +3 36154 38022 37463 +3 36155 37464 38023 +3 36155 38023 36698 +3 36156 36433 36578 +3 36156 36578 36434 +3 36157 36159 36594 +3 36157 36594 36523 +3 36158 36524 36595 +3 36158 36595 36160 +3 36159 36579 36594 +3 36160 36595 36580 +3 36161 37170 38103 +3 36161 38103 37086 +3 36162 37087 38104 +3 36162 38104 37171 +3 36163 36397 37397 +3 36163 37397 37188 +3 36164 37189 37398 +3 36164 37398 36398 +3 36165 38080 38625 +3 36165 38625 36732 +3 36166 36733 38626 +3 36166 38626 38081 +3 36167 36789 36923 +3 36167 36923 36293 +3 36168 36294 36924 +3 36168 36924 36790 +3 36169 36202 36243 +3 36169 36243 36201 +3 36170 36201 36244 +3 36170 36244 36203 +3 36171 36247 36758 +3 36171 36758 36655 +3 36172 36656 36759 +3 36172 36759 36248 +3 36173 38259 38758 +3 36173 38758 36699 +3 36174 36700 38759 +3 36174 38759 38260 +3 36175 37069 37724 +3 36175 37724 36799 +3 36176 36800 37725 +3 36176 37725 37070 +3 36177 36882 37160 +3 36177 37160 36455 +3 36178 36456 37161 +3 36178 37161 36883 +3 36179 36212 36245 +3 36179 36245 36202 +3 36180 36203 36246 +3 36180 36246 36213 +3 36181 37517 38239 +3 36181 38239 36886 +3 36182 36887 38240 +3 36182 38240 37517 +3 36183 37104 38097 +3 36183 38097 37170 +3 36184 37171 38098 +3 36184 38098 37105 +3 36185 37871 38286 +3 36185 38286 36614 +3 36186 36615 38287 +3 36186 38287 37872 +3 36187 36929 37913 +3 36187 37913 37203 +3 36188 37204 37914 +3 36188 37914 36930 +3 36189 37029 38662 +3 36189 38662 37806 +3 36190 37807 38663 +3 36190 38663 37030 +3 36191 37078 38951 +3 36191 38951 38111 +3 36192 38112 38952 +3 36192 38952 37079 +3 36193 37633 38651 +3 36193 38651 37245 +3 36194 37246 38652 +3 36194 38652 37634 +3 36195 36226 36251 +3 36195 36251 36212 +3 36196 36213 36252 +3 36196 36252 36226 +3 36197 36841 37143 +3 36197 37143 36517 +3 36198 36518 37144 +3 36198 37144 36842 +3 36199 37590 37969 +3 36199 37969 36596 +3 36200 36597 37970 +3 36200 37970 37591 +3 36201 36243 36244 +3 36202 36245 36243 +3 36203 36244 36246 +3 36204 37637 38016 +3 36204 38016 36592 +3 36205 36593 38017 +3 36205 38017 37638 +3 36206 37763 39372 +3 36206 39372 37736 +3 36207 37737 39373 +3 36207 39373 37764 +3 36208 37302 38489 +3 36208 38489 37415 +3 36209 37416 38490 +3 36209 38490 37303 +3 36210 36541 36813 +3 36210 36813 36467 +3 36211 36468 36814 +3 36211 36814 36542 +3 36212 36251 36245 +3 36213 36246 36252 +3 36214 36892 38501 +3 36214 38501 38044 +3 36215 38045 38502 +3 36215 38502 36893 +3 36216 36431 37090 +3 36216 37090 36872 +3 36217 36873 37091 +3 36217 37091 36432 +3 36218 37753 39557 +3 36218 39557 38180 +3 36219 38181 39560 +3 36219 39560 37754 +3 36220 36957 37281 +3 36220 37281 36371 +3 36221 36372 37282 +3 36221 37282 36958 +3 36222 36760 37708 +3 36222 37708 37145 +3 36223 37145 37709 +3 36223 37709 36761 +3 36224 37053 37277 +3 36224 37277 36405 +3 36225 36406 37278 +3 36225 37278 37054 +3 36226 36252 36251 +3 36227 36425 36651 +3 36227 36651 36433 +3 36228 36434 36652 +3 36228 36652 36426 +3 36229 36712 36915 +3 36229 36915 36415 +3 36230 36416 36916 +3 36230 36916 36713 +3 36231 36722 38505 +3 36231 38505 38036 +3 36232 38037 38506 +3 36232 38506 36723 +3 36233 38153 38867 +3 36233 38867 36985 +3 36234 36986 38868 +3 36234 38868 38154 +3 36235 36805 37586 +3 36235 37586 37001 +3 36236 37002 37587 +3 36236 37587 36806 +3 36237 36659 36943 +3 36237 36943 36521 +3 36238 36522 36944 +3 36238 36944 36660 +3 36239 38418 39104 +3 36239 39104 37015 +3 36240 37016 39105 +3 36240 39105 38419 +3 36241 37747 38995 +3 36241 38995 37540 +3 36242 37541 38996 +3 36242 38996 37748 +3 36243 36245 36273 +3 36243 36273 36244 +3 36244 36273 36246 +3 36245 36251 36273 +3 36246 36273 36252 +3 36247 36280 36793 +3 36247 36793 36758 +3 36248 36759 36794 +3 36248 36794 36281 +3 36249 36859 37233 +3 36249 37233 36612 +3 36250 36613 37234 +3 36250 37234 36859 +3 36251 36252 36273 +3 36253 38107 38499 +3 36253 38499 36630 +3 36254 36631 38500 +3 36254 38500 38108 +3 36255 36744 36917 +3 36255 36917 36445 +3 36256 36446 36918 +3 36256 36918 36745 +3 36257 37333 37439 +3 36257 37439 36353 +3 36258 36354 37440 +3 36258 37440 37334 +3 36259 37483 38933 +3 36259 38933 37741 +3 36260 37742 38934 +3 36260 38934 37484 +3 36261 36718 38681 +3 36261 38681 38241 +3 36262 38242 38682 +3 36262 38682 36719 +3 36263 36566 37845 +3 36263 37845 37536 +3 36264 37537 37846 +3 36264 37846 36567 +3 36265 36477 36740 +3 36265 36740 36537 +3 36266 36538 36741 +3 36266 36741 36478 +3 36267 36351 36709 +3 36267 36709 36610 +3 36268 36611 36710 +3 36268 36710 36352 +3 36269 36561 36746 +3 36269 36746 36417 +3 36270 36418 36747 +3 36270 36747 36562 +3 36271 36341 37102 +3 36271 37102 36993 +3 36272 36994 37103 +3 36272 37103 36342 +3 36274 36453 37084 +3 36274 37084 36902 +3 36275 36903 37085 +3 36275 37085 36454 +3 36276 36333 38556 +3 36276 38556 38467 +3 36277 38468 38557 +3 36277 38557 36334 +3 36278 36449 37120 +3 36278 37120 36953 +3 36279 36954 37121 +3 36279 37121 36450 +3 36280 36791 36793 +3 36281 36794 36792 +3 36282 37241 37982 +3 36282 37982 37023 +3 36283 37024 37983 +3 36283 37983 37242 +3 36284 36963 38592 +3 36284 38592 37886 +3 36285 37887 38593 +3 36285 38593 36964 +3 36286 36897 37912 +3 36286 37912 36896 +3 36287 36945 37797 +3 36287 37797 37116 +3 36288 37117 37798 +3 36288 37798 36946 +3 36289 37124 38408 +3 36289 38408 37528 +3 36290 37529 38409 +3 36290 38409 37125 +3 36291 37009 37621 +3 36291 37621 36880 +3 36292 36881 37622 +3 36292 37622 37010 +3 36293 36923 36971 +3 36294 36972 36924 +3 36295 36391 36738 +3 36295 36738 36622 +3 36296 36623 36739 +3 36296 36739 36392 +3 36297 37092 37408 +3 36297 37408 36572 +3 36298 36573 37409 +3 36298 37409 37093 +3 36299 36386 36683 +3 36299 36683 36569 +3 36300 36570 36684 +3 36300 36684 36387 +3 36301 36537 36679 +3 36301 36679 36419 +3 36302 36420 36680 +3 36302 36680 36538 +3 36303 36513 37039 +3 36303 37039 36843 +3 36304 36844 37040 +3 36304 37040 36514 +3 36305 36581 37443 +3 36305 37443 37122 +3 36306 37123 37444 +3 36306 37444 36582 +3 36307 36491 36766 +3 36307 36766 36576 +3 36308 36577 36767 +3 36308 36767 36492 +3 36309 36465 37357 +3 36309 37357 37181 +3 36310 37182 37358 +3 36310 37358 36466 +3 36311 37457 37994 +3 36311 37994 36815 +3 36312 36816 37995 +3 36312 37995 37458 +3 36313 36519 36911 +3 36313 36911 36703 +3 36314 36704 36912 +3 36314 36912 36520 +3 36315 38623 39174 +3 36315 39174 36965 +3 36316 36966 39175 +3 36316 39175 38624 +3 36317 37469 37243 +3 36318 37244 37470 +3 36319 37611 37759 +3 36319 37759 36475 +3 36320 36476 37760 +3 36320 37760 37612 +3 36321 36921 38194 +3 36321 38194 37576 +3 36322 37577 38195 +3 36322 38195 36922 +3 36323 36620 37100 +3 36323 37100 36801 +3 36324 36802 37101 +3 36324 37101 36621 +3 36325 38224 39625 +3 36325 39625 37917 +3 36326 37918 39626 +3 36326 39626 38225 +3 36327 37910 38536 +3 36327 38536 36935 +3 36328 36936 38537 +3 36328 38537 37911 +3 36329 36785 36937 +3 36329 36937 36469 +3 36330 36470 36938 +3 36330 36938 36786 +3 36331 38109 38764 +3 36331 38764 36975 +3 36332 36976 38765 +3 36332 38765 38110 +3 36333 36334 38591 +3 36333 38591 38556 +3 36334 38557 38591 +3 36335 37578 38825 +3 36335 38825 37651 +3 36336 37652 38826 +3 36336 38826 37579 +3 36337 37651 39238 +3 36337 39238 38048 +3 36338 38049 39239 +3 36338 39239 37652 +3 36339 36645 37583 +3 36339 37583 37275 +3 36340 37276 37584 +3 36340 37584 36646 +3 36341 36388 37172 +3 36341 37172 37102 +3 36342 37103 37173 +3 36342 37173 36389 +3 36343 37415 38554 +3 36343 38554 37393 +3 36344 37394 38555 +3 36344 38555 37416 +3 36345 38579 39565 +3 36345 39565 37453 +3 36346 37454 39566 +3 36346 39566 38580 +3 36347 36748 36973 +3 36347 36973 36590 +3 36348 36591 36974 +3 36348 36974 36749 +3 36349 37769 38641 +3 36349 38641 37213 +3 36350 37214 38642 +3 36350 38642 37770 +3 36351 36419 36770 +3 36351 36770 36709 +3 36352 36710 36771 +3 36352 36771 36420 +3 36353 37439 37493 +3 36353 37493 36379 +3 36354 36379 37494 +3 36354 37494 37440 +3 36355 38335 39168 +3 36355 39168 37287 +3 36356 37288 39169 +3 36356 39169 38335 +3 36357 36780 37471 +3 36357 37471 37033 +3 36358 37034 37472 +3 36358 37472 36781 +3 36359 37824 37495 +3 36360 37496 37825 +3 36361 36689 37294 +3 36361 37294 36951 +3 36362 36952 37295 +3 36362 37295 36690 +3 36363 36819 38352 +3 36363 38352 37857 +3 36364 37858 38353 +3 36364 38353 36820 +3 36365 37869 38479 +3 36365 38479 36969 +3 36366 36970 38480 +3 36366 38480 37870 +3 36367 36576 36803 +3 36367 36803 36561 +3 36368 36562 36804 +3 36368 36804 36577 +3 36369 36817 38308 +3 36369 38308 37859 +3 36370 37860 38309 +3 36370 38309 36818 +3 36371 37281 37402 +3 36371 37402 36505 +3 36372 36506 37403 +3 36372 37403 37282 +3 36373 38597 39383 +3 36373 39383 37304 +3 36374 37305 39384 +3 36374 39384 38598 +3 36375 37980 38959 +3 36375 38959 37417 +3 36376 37418 38960 +3 36376 38960 37981 +3 36377 37177 37419 +3 36377 37419 36600 +3 36378 36601 37420 +3 36378 37420 37178 +3 36379 37493 37494 +3 36380 37371 37828 +3 36380 37828 36821 +3 36381 36822 37829 +3 36381 37829 37372 +3 36382 37061 37505 +3 36382 37505 36774 +3 36383 36775 37506 +3 36383 37506 37062 +3 36384 36707 37491 +3 36384 37491 37156 +3 36385 37157 37492 +3 36385 37492 36708 +3 36386 36523 36809 +3 36386 36809 36683 +3 36387 36684 36810 +3 36387 36810 36524 +3 36388 36389 37202 +3 36388 37202 37172 +3 36389 37173 37202 +3 36390 36877 37697 +3 36390 37697 36876 +3 36391 36479 36795 +3 36391 36795 36738 +3 36392 36739 36796 +3 36392 36796 36480 +3 36393 36900 37164 +3 36393 37164 36624 +3 36394 36625 37165 +3 36394 37165 36901 +3 36395 37421 38813 +3 36395 38813 37791 +3 36396 37792 38814 +3 36396 38814 37422 +3 36397 36600 37595 +3 36397 37595 37397 +3 36398 37398 37596 +3 36398 37596 36601 +3 36399 36724 38284 +3 36399 38284 37971 +3 36400 37972 38285 +3 36400 38285 36725 +3 36401 36933 38333 +3 36401 38333 37799 +3 36402 37800 38334 +3 36402 38334 36934 +3 36403 38026 38750 +3 36403 38750 37114 +3 36404 37115 38751 +3 36404 38751 38027 +3 36405 37277 37425 +3 36405 37425 36588 +3 36406 36589 37426 +3 36406 37426 37278 +3 36407 37203 38151 +3 36407 38151 37343 +3 36408 37344 38152 +3 36408 38152 37204 +3 36409 36677 37225 +3 36409 37225 36927 +3 36410 36928 37226 +3 36410 37226 36678 +3 36411 37217 37685 +3 36411 37685 36851 +3 36412 36852 37686 +3 36412 37686 37218 +3 36413 37071 37704 +3 36413 37704 37059 +3 36414 37060 37705 +3 36414 37705 37072 +3 36415 36915 37063 +3 36415 37063 36557 +3 36416 36558 37064 +3 36416 37064 36916 +3 36417 36746 36855 +3 36417 36855 36531 +3 36418 36532 36856 +3 36418 36856 36747 +3 36419 36679 36770 +3 36420 36771 36680 +3 36421 38550 39114 +3 36421 39114 37045 +3 36422 37046 39115 +3 36422 39115 38551 +3 36423 37059 37716 +3 36423 37716 37009 +3 36424 37010 37717 +3 36424 37717 37060 +3 36425 36569 36807 +3 36425 36807 36651 +3 36426 36652 36808 +3 36426 36808 36570 +3 36427 37001 37718 +3 36427 37718 37071 +3 36428 37072 37719 +3 36428 37719 37002 +3 36429 36866 38002 +3 36429 38002 37544 +3 36430 37545 38003 +3 36430 38003 36867 +3 36431 36588 37317 +3 36431 37317 37090 +3 36432 37091 37318 +3 36432 37318 36589 +3 36433 36651 36811 +3 36433 36811 36578 +3 36434 36578 36812 +3 36434 36812 36652 +3 36435 37341 38147 +3 36435 38147 37241 +3 36436 37242 38148 +3 36436 38148 37342 +3 36437 37309 37955 +3 36437 37955 37069 +3 36438 37070 37956 +3 36438 37956 37310 +3 36439 37524 37861 +3 36439 37861 36752 +3 36440 36753 37862 +3 36440 37862 37525 +3 36441 37939 38538 +3 36441 38538 36941 +3 36442 36942 38539 +3 36442 38539 37940 +3 36443 36703 37094 +3 36443 37094 36825 +3 36444 36826 37095 +3 36444 37095 36704 +3 36445 36917 37049 +3 36445 37049 36525 +3 36446 36526 37050 +3 36446 37050 36918 +3 36447 37687 39081 +3 36447 39081 37923 +3 36448 37924 39082 +3 36448 39082 37690 +3 36449 36667 37306 +3 36449 37306 37120 +3 36450 37121 37307 +3 36450 37307 36668 +3 36451 36711 37031 +3 36451 37031 36772 +3 36452 36773 37032 +3 36452 37032 36711 +3 36453 36801 37215 +3 36453 37215 37084 +3 36454 37085 37216 +3 36454 37216 36802 +3 36455 37160 37404 +3 36455 37404 36670 +3 36456 36671 37405 +3 36456 37405 37161 +3 36457 36772 37027 +3 36457 37027 36712 +3 36458 36713 37028 +3 36458 37028 36773 +3 36459 36825 37112 +3 36459 37112 36748 +3 36460 36749 37113 +3 36460 37113 36826 +3 36461 37435 39779 +3 36461 39779 38914 +3 36462 38915 39780 +3 36462 39780 37436 +3 36463 37345 37755 +3 36463 37755 36849 +3 36464 36850 37756 +3 36464 37756 37346 +3 36465 36549 37467 +3 36465 37467 37357 +3 36466 37358 37468 +3 36466 37468 36550 +3 36467 36813 37003 +3 36467 37003 36659 +3 36468 36660 37004 +3 36468 37004 36814 +3 36469 36937 37035 +3 36469 37035 36541 +3 36470 36542 37036 +3 36470 37036 36938 +3 36471 38255 39049 +3 36471 39049 37335 +3 36472 37336 39050 +3 36472 39050 38256 +3 36473 37741 39505 +3 36473 39505 38360 +3 36474 38361 39506 +3 36474 39506 37742 +3 36475 37759 37880 +3 36475 37880 36511 +3 36476 36512 37881 +3 36476 37881 37760 +3 36477 36622 36890 +3 36477 36890 36740 +3 36478 36741 36891 +3 36478 36891 36623 +3 36479 36503 36839 +3 36479 36839 36795 +3 36480 36796 36840 +3 36480 36840 36503 +3 36481 37645 38528 +3 36481 38528 37363 +3 36482 37364 38529 +3 36482 38529 37646 +3 36483 37116 37973 +3 36483 37973 37298 +3 36484 37299 37974 +3 36484 37974 37117 +3 36485 38460 39166 +3 36485 39166 37257 +3 36486 37258 39167 +3 36486 39167 38461 +3 36487 36878 38089 +3 36487 38089 37675 +3 36488 37676 38090 +3 36488 38090 36879 +3 36489 36853 38054 +3 36489 38054 37647 +3 36490 37648 38055 +3 36490 38055 36854 +3 36491 36610 36898 +3 36491 36898 36766 +3 36492 36767 36899 +3 36492 36899 36611 +3 36493 38687 39459 +3 36493 39459 37239 +3 36494 37240 39460 +3 36494 39460 38688 +3 36495 37599 37890 +3 36495 37890 36756 +3 36496 36757 37891 +3 36496 37891 37600 +3 36497 36845 37623 +3 36497 37623 37219 +3 36498 37220 37624 +3 36498 37624 36846 +3 36499 37923 39122 +3 36499 39122 37747 +3 36500 37748 39123 +3 36500 39123 37924 +3 36501 37343 38128 +3 36501 38128 37341 +3 36502 37342 38129 +3 36502 38129 37344 +3 36503 36840 36839 +3 36504 37222 38731 +3 36504 38731 37221 +3 36505 37402 37489 +3 36505 37489 36543 +3 36506 36544 37490 +3 36506 37490 37403 +3 36507 37043 37449 +3 36507 37449 36841 +3 36508 36842 37450 +3 36508 37450 37044 +3 36509 36553 38346 +3 36509 38346 38178 +3 36510 38179 38347 +3 36510 38347 36554 +3 36511 37880 37903 +3 36511 37903 36512 +3 36512 37903 37881 +3 36513 36778 37361 +3 36513 37361 37039 +3 36514 37040 37362 +3 36514 37362 36779 +3 36515 36907 37801 +3 36515 37801 37377 +3 36516 37378 37802 +3 36516 37802 36908 +3 36517 37143 37433 +3 36517 37433 36764 +3 36518 36765 37434 +3 36518 37434 37144 +3 36519 36655 37051 +3 36519 37051 36911 +3 36520 36912 37052 +3 36520 37052 36656 +3 36521 36943 37184 +3 36521 37184 36744 +3 36522 36745 37185 +3 36522 37185 36944 +3 36523 36594 36904 +3 36523 36904 36809 +3 36524 36810 36905 +3 36524 36905 36595 +3 36525 37049 37137 +3 36525 37137 36559 +3 36526 36560 37138 +3 36526 37138 37050 +3 36527 37677 38424 +3 36527 38424 37265 +3 36528 37266 38425 +3 36528 38425 37678 +3 36529 38032 38754 +3 36529 38754 37261 +3 36530 37262 38755 +3 36530 38755 38033 +3 36531 36855 36919 +3 36531 36919 36579 +3 36532 36580 36920 +3 36532 36920 36856 +3 36533 37429 39497 +3 36533 39497 38685 +3 36534 38686 39498 +3 36534 39498 37430 +3 36535 38208 39413 +3 36535 39413 37867 +3 36536 37868 39414 +3 36536 39414 38209 +3 36537 36740 36894 +3 36537 36894 36679 +3 36538 36680 36895 +3 36538 36895 36741 +3 36539 37878 38924 +3 36539 38924 37633 +3 36540 37634 38925 +3 36540 38925 37879 +3 36541 37035 37108 +3 36541 37108 36813 +3 36542 36814 37109 +3 36542 37109 37036 +3 36543 37489 37530 +3 36543 37530 36571 +3 36544 36571 37531 +3 36544 37531 37490 +3 36545 36909 37996 +3 36545 37996 37625 +3 36546 37626 37997 +3 36546 37997 36910 +3 36547 37298 38030 +3 36547 38030 37289 +3 36548 37290 38031 +3 36548 38031 37299 +3 36549 36618 37556 +3 36549 37556 37467 +3 36550 37468 37557 +3 36550 37557 36619 +3 36551 37289 38034 +3 36551 38034 37309 +3 36552 37310 38035 +3 36552 38035 37290 +3 36553 36587 38394 +3 36553 38394 38346 +3 36554 38347 38395 +3 36554 38395 36587 +3 36555 36951 37477 +3 36555 37477 37055 +3 36556 37056 37478 +3 36556 37478 36952 +3 36557 37063 37196 +3 36557 37196 36657 +3 36558 36658 37197 +3 36558 37197 37064 +3 36559 37137 37174 +3 36559 37174 36560 +3 36560 37174 37138 +3 36561 36803 36979 +3 36561 36979 36746 +3 36562 36747 36980 +3 36562 36980 36804 +3 36563 37263 38999 +3 36563 38999 38384 +3 36564 38385 39000 +3 36564 39000 37264 +3 36565 38180 39809 +3 36565 39809 38224 +3 36566 36827 38105 +3 36566 38105 37845 +3 36567 37846 38106 +3 36567 38106 36828 +3 36568 38225 39810 +3 36568 39810 38181 +3 36569 36683 36925 +3 36569 36925 36807 +3 36570 36808 36926 +3 36570 36926 36684 +3 36571 37530 37531 +3 36572 37408 37603 +3 36572 37603 36835 +3 36573 36836 37604 +3 36573 37604 37409 +3 36574 37194 37566 +3 36574 37566 36882 +3 36575 36883 37567 +3 36575 37567 37195 +3 36576 36766 36983 +3 36576 36983 36803 +3 36577 36804 36984 +3 36577 36984 36767 +3 36578 36811 36947 +3 36578 36947 36812 +3 36579 36919 36955 +3 36579 36955 36594 +3 36580 36595 36956 +3 36580 36956 36920 +3 36581 37033 37688 +3 36581 37688 37443 +3 36582 37444 37689 +3 36582 37689 37034 +3 36583 37037 37455 +3 36583 37455 37025 +3 36584 37026 37456 +3 36584 37456 37038 +3 36585 37096 39212 +3 36585 39212 38742 +3 36586 38743 39213 +3 36586 39213 37097 +3 36587 38395 38394 +3 36588 37425 37317 +3 36589 37318 37426 +3 36590 36973 37192 +3 36590 37192 36785 +3 36591 36786 37193 +3 36591 37193 36974 +3 36592 38016 38342 +3 36592 38342 37098 +3 36593 37099 38343 +3 36593 38343 38017 +3 36594 36955 36904 +3 36595 36905 36956 +3 36596 37969 38338 +3 36596 38338 36949 +3 36597 36950 38339 +3 36597 38339 37970 +3 36598 37025 37391 +3 36598 37391 36900 +3 36599 36901 37392 +3 36599 37392 37026 +3 36600 37419 37595 +3 36601 37596 37420 +3 36602 37168 39150 +3 36602 39150 38635 +3 36603 38636 39151 +3 36603 39151 37169 +3 36604 36927 37410 +3 36604 37410 37037 +3 36605 37038 37411 +3 36605 37411 36928 +3 36606 37146 38931 +3 36606 38931 37929 +3 36607 37930 38932 +3 36607 38932 37147 +3 36608 36872 37532 +3 36608 37532 37209 +3 36609 37210 37533 +3 36609 37533 36873 +3 36610 36709 36987 +3 36610 36987 36898 +3 36611 36899 36988 +3 36611 36988 36710 +3 36612 37233 37728 +3 36612 37728 37061 +3 36613 37062 37729 +3 36613 37729 37234 +3 36614 38286 38666 +3 36614 38666 36967 +3 36615 36968 38667 +3 36615 38667 38287 +3 36616 37133 38243 +3 36616 38243 37671 +3 36617 37674 38244 +3 36617 38244 37134 +3 36618 36619 37582 +3 36618 37582 37556 +3 36619 37557 37582 +3 36620 36843 37387 +3 36620 37387 37100 +3 36621 37101 37388 +3 36621 37388 36844 +3 36622 36738 36995 +3 36622 36995 36890 +3 36623 36891 36996 +3 36623 36996 36739 +3 36624 37164 37375 +3 36624 37375 36789 +3 36625 36790 37376 +3 36625 37376 37165 +3 36626 37528 38719 +3 36626 38719 37777 +3 36627 37778 38720 +3 36627 38720 37529 +3 36628 38432 39091 +3 36628 39091 37385 +3 36629 37386 39092 +3 36629 39092 38433 +3 36630 38499 38809 +3 36630 38809 37779 +3 36631 37780 38810 +3 36631 38810 38500 +3 36632 38645 39457 +3 36632 39457 37568 +3 36633 37569 39458 +3 36633 39458 38646 +3 36634 37055 37401 +3 36634 37401 37056 +3 36635 37373 38380 +3 36635 38380 37943 +3 36636 37944 38381 +3 36636 38381 37374 +3 36637 37198 39144 +3 36637 39144 38639 +3 36638 38640 39145 +3 36638 39145 37199 +3 36639 37933 38471 +3 36639 38471 37162 +3 36640 37163 38472 +3 36640 38472 37934 +3 36641 37291 38771 +3 36641 38771 38165 +3 36642 38166 38772 +3 36642 38772 37292 +3 36643 37445 39347 +3 36643 39347 38643 +3 36644 38644 39348 +3 36644 39348 37446 +3 36645 36931 37884 +3 36645 37884 37583 +3 36646 37584 37885 +3 36646 37885 36932 +3 36647 37481 39602 +3 36647 39602 38871 +3 36648 38872 39603 +3 36648 39603 37482 +3 36649 37179 38070 +3 36649 38070 37511 +3 36650 37512 38071 +3 36650 38071 37180 +3 36651 36807 36981 +3 36651 36981 36811 +3 36652 36812 36982 +3 36652 36982 36808 +3 36653 38218 39379 +3 36653 39379 37919 +3 36654 37920 39380 +3 36654 39380 38219 +3 36655 36758 37190 +3 36655 37190 37051 +3 36656 37052 37191 +3 36656 37191 36759 +3 36657 37196 37279 +3 36657 37279 36791 +3 36658 36792 37280 +3 36658 37280 37197 +3 36659 37003 37339 +3 36659 37339 36943 +3 36660 36944 37340 +3 36660 37340 37004 +3 36661 37285 38696 +3 36661 38696 38058 +3 36662 38059 38697 +3 36662 38697 37286 +3 36663 37904 38441 +3 36663 38441 37166 +3 36664 37167 38442 +3 36664 38442 37905 +3 36665 38910 38983 +3 36665 38983 36728 +3 36666 36729 38984 +3 36666 38984 38911 +3 36667 36833 37473 +3 36667 37473 37306 +3 36668 37307 37474 +3 36668 37474 36834 +3 36669 37791 39059 +3 36669 39059 37988 +3 36670 37404 37609 +3 36670 37609 37043 +3 36671 37044 37610 +3 36671 37610 37405 +3 36672 37989 39060 +3 36672 39060 37792 +3 36673 38048 39495 +3 36673 39495 38274 +3 36674 38275 39496 +3 36674 39496 38049 +3 36675 37367 39604 +3 36675 39604 39031 +3 36676 39032 39605 +3 36676 39605 37368 +3 36677 36902 37475 +3 36677 37475 37225 +3 36678 37226 37476 +3 36678 37476 36903 +3 36679 36894 36991 +3 36679 36991 36770 +3 36680 36771 36992 +3 36680 36992 36895 +3 36681 37251 37745 +3 36681 37745 37269 +3 36682 37270 37746 +3 36682 37746 37252 +3 36683 36809 37057 +3 36683 37057 36925 +3 36684 36926 37058 +3 36684 37058 36810 +3 36685 38396 39214 +3 36685 39214 37588 +3 36686 37589 39215 +3 36686 39215 38397 +3 36687 37779 39208 +3 36687 39208 38204 +3 36688 38205 39209 +3 36688 39209 37780 +3 36689 36953 37580 +3 36689 37580 37294 +3 36690 37295 37581 +3 36690 37581 36954 +3 36691 37810 38752 +3 36691 38752 37645 +3 36692 37646 38753 +3 36692 38753 37811 +3 36693 37619 38873 +3 36693 38873 38014 +3 36694 38015 38874 +3 36694 38874 37620 +3 36695 37209 37761 +3 36695 37761 37251 +3 36696 37252 37762 +3 36696 37762 37210 +3 36697 37321 38656 +3 36697 38656 38022 +3 36698 38023 38657 +3 36698 38657 37322 +3 36699 38758 39164 +3 36699 39164 37148 +3 36700 37149 39165 +3 36700 39165 38759 +3 36701 37269 37765 +3 36701 37765 37194 +3 36702 37195 37766 +3 36702 37766 37270 +3 36703 36911 37353 +3 36703 37353 37094 +3 36704 37095 37354 +3 36704 37354 36912 +3 36705 38629 39051 +3 36705 39051 37423 +3 36706 37424 39052 +3 36706 39052 38630 +3 36707 36961 37767 +3 36707 37767 37491 +3 36708 37492 37768 +3 36708 37768 36962 +3 36709 36770 37067 +3 36709 37067 36987 +3 36710 36988 37068 +3 36710 37068 36771 +3 36711 37032 37308 +3 36711 37308 37031 +3 36712 37027 37311 +3 36712 37311 36915 +3 36713 36916 37312 +3 36713 37312 37028 +3 36714 37495 38587 +3 36714 38587 37789 +3 36715 37790 38588 +3 36715 38588 37496 +3 36716 37447 38839 +3 36716 38839 38125 +3 36717 38125 38840 +3 36717 38840 37448 +3 36718 37080 39025 +3 36718 39025 38681 +3 36719 38682 39026 +3 36719 39026 37081 +3 36720 37451 37986 +3 36720 37986 37217 +3 36721 37218 37987 +3 36721 37987 37452 +3 36722 37135 38896 +3 36722 38896 38505 +3 36723 38506 38897 +3 36723 38897 37136 +3 36724 36977 38564 +3 36724 38564 38284 +3 36725 38285 38565 +3 36725 38565 36978 +3 36726 37655 38292 +3 36726 38292 37355 +3 36727 37356 38293 +3 36727 38293 37656 +3 36728 38983 39020 +3 36728 39020 36729 +3 36729 39020 38984 +3 36730 37874 40015 +3 36730 40015 38975 +3 36731 38976 40016 +3 36731 40016 37875 +3 36732 38625 39055 +3 36732 39055 37223 +3 36733 37224 39056 +3 36733 39056 38626 +3 36734 38126 38709 +3 36734 38709 37313 +3 36735 37314 38710 +3 36735 38710 38127 +3 36736 37681 39596 +3 36736 39596 38773 +3 36737 38773 39597 +3 36737 39597 37682 +3 36738 36795 37088 +3 36738 37088 36995 +3 36739 36996 37089 +3 36739 37089 36796 +3 36740 36890 37065 +3 36740 37065 36894 +3 36741 36895 37066 +3 36741 37066 36891 +3 36742 38018 39075 +3 36742 39075 37878 +3 36743 37879 39076 +3 36743 39076 38019 +3 36744 37184 37395 +3 36744 37395 36917 +3 36745 36918 37396 +3 36745 37396 37185 +3 36746 36979 37126 +3 36746 37126 36855 +3 36747 36856 37127 +3 36747 37127 36980 +3 36748 37112 37399 +3 36748 37399 36973 +3 36749 36974 37400 +3 36749 37400 37113 +3 36750 37695 39835 +3 36750 39835 39003 +3 36751 39004 39836 +3 36751 39836 37696 +3 36752 37861 38143 +3 36752 38143 36989 +3 36753 36990 38144 +3 36753 38144 37862 +3 36754 38099 39302 +3 36754 39302 38046 +3 36755 38047 39303 +3 36755 39303 38100 +3 36756 37890 38132 +3 36756 38132 37141 +3 36757 37142 38133 +3 36757 38133 37891 +3 36758 36793 37273 +3 36758 37273 37190 +3 36759 37191 37274 +3 36759 37274 36794 +3 36760 37227 38222 +3 36760 38222 37708 +3 36761 37709 38223 +3 36761 38223 37228 +3 36762 38526 39743 +3 36762 39743 38099 +3 36763 38100 39744 +3 36763 39744 38527 +3 36764 37433 37663 +3 36764 37663 36957 +3 36765 36958 37664 +3 36765 37664 37434 +3 36766 36898 37154 +3 36766 37154 36983 +3 36767 36984 37155 +3 36767 37155 36899 +3 36768 38473 39142 +3 36768 39142 37497 +3 36769 37498 39143 +3 36769 39143 38474 +3 36770 36991 37067 +3 36771 37068 36992 +3 36772 37031 37349 +3 36772 37349 37027 +3 36773 37028 37350 +3 36773 37350 37032 +3 36774 37505 37876 +3 36774 37876 37092 +3 36775 37093 37877 +3 36775 37877 37506 +3 36776 37757 38084 +3 36776 38084 37047 +3 36777 37048 38085 +3 36777 38085 37758 +3 36778 36993 37631 +3 36778 37631 37361 +3 36779 37362 37632 +3 36779 37632 36994 +3 36780 37156 37888 +3 36780 37888 37471 +3 36781 37472 37889 +3 36781 37889 37157 +3 36782 37777 38835 +3 36782 38835 37865 +3 36783 37866 38836 +3 36783 38836 37778 +3 36784 37219 37902 +3 36784 37902 37220 +3 36785 37192 37379 +3 36785 37379 36937 +3 36786 36938 37380 +3 36786 37380 37193 +3 36787 37485 39277 +3 36787 39277 38683 +3 36788 38684 39278 +3 36788 39278 37486 +3 36789 37375 37518 +3 36789 37518 36923 +3 36790 36924 37519 +3 36790 37519 37376 +3 36791 37279 37315 +3 36791 37315 36793 +3 36792 36794 37316 +3 36792 37316 37280 +3 36793 37315 37273 +3 36794 37274 37316 +3 36795 36839 37158 +3 36795 37158 37088 +3 36796 37089 37159 +3 36796 37159 36840 +3 36797 37865 38831 +3 36797 38831 37810 +3 36798 37811 38832 +3 36798 38832 37866 +3 36799 37724 38087 +3 36799 38087 37139 +3 36800 37140 38088 +3 36800 38088 37725 +3 36801 37100 37562 +3 36801 37562 37215 +3 36802 37216 37563 +3 36802 37563 37101 +3 36803 36983 37200 +3 36803 37200 36979 +3 36804 36980 37201 +3 36804 37201 36984 +3 36805 37122 37927 +3 36805 37927 37586 +3 36806 37587 37928 +3 36806 37928 37123 +3 36807 36925 37128 +3 36807 37128 36981 +3 36808 36982 37129 +3 36808 37129 36926 +3 36809 36904 37186 +3 36809 37186 37057 +3 36810 37058 37187 +3 36810 37187 36905 +3 36811 36981 37152 +3 36811 37152 36947 +3 36812 36947 37153 +3 36812 37153 36982 +3 36813 37108 37369 +3 36813 37369 37003 +3 36814 37004 37370 +3 36814 37370 37109 +3 36815 37994 38469 +3 36815 38469 37327 +3 36816 37328 38470 +3 36816 38470 37995 +3 36817 37237 38721 +3 36817 38721 38308 +3 36818 38309 38722 +3 36818 38722 37238 +3 36819 37235 38768 +3 36819 38768 38352 +3 36820 38353 38769 +3 36820 38769 37236 +3 36821 37828 38237 +3 36821 38237 37207 +3 36822 37208 38238 +3 36822 38238 37829 +3 36823 37513 39610 +3 36823 39610 39011 +3 36824 39012 39611 +3 36824 39611 37514 +3 36825 37094 37479 +3 36825 37479 37112 +3 36826 37113 37480 +3 36826 37480 37095 +3 36827 37047 38358 +3 36827 38358 38105 +3 36828 38106 38359 +3 36828 38359 37048 +3 36829 37929 39521 +3 36829 39521 38530 +3 36830 38531 39522 +3 36830 39522 37930 +3 36831 37649 39937 +3 36831 39937 39067 +3 36832 39068 39938 +3 36832 39938 37650 +3 36833 36971 37641 +3 36833 37641 37473 +3 36834 37474 37642 +3 36834 37642 36972 +3 36835 37603 37855 +3 36835 37855 37053 +3 36836 37054 37856 +3 36836 37856 37604 +3 36837 38805 39987 +3 36837 39987 38218 +3 36838 38219 39988 +3 36838 39988 38806 +3 36839 36840 37183 +3 36839 37183 37158 +3 36840 37159 37183 +3 36841 37449 37785 +3 36841 37785 37143 +3 36842 37144 37786 +3 36842 37786 37450 +3 36843 37039 37592 +3 36843 37592 37387 +3 36844 37388 37593 +3 36844 37593 37040 +3 36845 37377 38163 +3 36845 38163 37623 +3 36846 37624 38164 +3 36846 38164 37378 +3 36847 37507 39146 +3 36847 39146 38548 +3 36848 38549 39147 +3 36848 39147 37508 +3 36849 37755 38348 +3 36849 38348 37371 +3 36850 37372 38349 +3 36850 38349 37756 +3 36851 37685 38101 +3 36851 38101 37259 +3 36852 37260 38102 +3 36852 38102 37686 +3 36853 37205 38416 +3 36853 38416 38054 +3 36854 38055 38417 +3 36854 38417 37206 +3 36855 37126 37247 +3 36855 37247 36919 +3 36856 36920 37248 +3 36856 37248 37127 +3 36857 38212 39047 +3 36857 39047 37769 +3 36858 37770 39048 +3 36858 39048 38213 +3 36859 37234 37805 +3 36859 37805 37233 +3 36860 37653 39265 +3 36860 39265 38575 +3 36861 38576 39266 +3 36861 39266 37654 +3 36862 37773 39551 +3 36862 39551 38738 +3 36863 38739 39552 +3 36863 39552 37774 +3 36864 37965 38740 +3 36864 38740 37677 +3 36865 37678 38741 +3 36865 38741 37966 +3 36866 36997 38198 +3 36866 38198 38002 +3 36867 38003 38199 +3 36867 38199 36998 +3 36868 38445 39617 +3 36868 39617 38208 +3 36869 38209 39618 +3 36869 39618 38446 +3 36870 37710 39647 +3 36870 39647 38937 +3 36871 38938 39648 +3 36871 39648 37711 +3 36872 37090 37787 +3 36872 37787 37532 +3 36873 37533 37788 +3 36873 37788 37091 +3 36874 37988 39154 +3 36874 39154 38018 +3 36875 38019 39155 +3 36875 39155 37989 +3 36876 37697 38188 +3 36876 38188 37345 +3 36877 37346 38189 +3 36877 38189 37697 +3 36878 37255 38477 +3 36878 38477 38089 +3 36879 38090 38478 +3 36879 38478 37256 +3 36880 37621 37921 +3 36880 37921 37177 +3 36881 37178 37922 +3 36881 37922 37622 +3 36882 37566 37863 +3 36882 37863 37160 +3 36883 37161 37864 +3 36883 37864 37567 +3 36884 37806 39244 +3 36884 39244 38414 +3 36885 38415 39245 +3 36885 39245 37807 +3 36886 38239 38843 +3 36886 38843 37534 +3 36887 37535 38844 +3 36887 38844 38240 +3 36888 38390 39389 +3 36888 39389 37980 +3 36889 37981 39390 +3 36889 39390 38391 +3 36890 36995 37249 +3 36890 37249 37065 +3 36891 37066 37250 +3 36891 37250 36996 +3 36892 37552 39069 +3 36892 39069 38501 +3 36893 38502 39070 +3 36893 39070 37553 +3 36894 37065 37229 +3 36894 37229 36991 +3 36895 36992 37230 +3 36895 37230 37066 +3 36896 37912 38507 +3 36896 38507 37457 +3 36897 37458 38508 +3 36897 38508 37912 +3 36898 36987 37296 +3 36898 37296 37154 +3 36899 37155 37297 +3 36899 37297 36988 +3 36900 37391 37669 +3 36900 37669 37164 +3 36901 37165 37670 +3 36901 37670 37392 +3 36902 37084 37698 +3 36902 37698 37475 +3 36903 37476 37699 +3 36903 37699 37085 +3 36904 36955 37267 +3 36904 37267 37186 +3 36905 37187 37268 +3 36905 37268 36956 +3 36906 37576 38672 +3 36906 38672 37577 +3 36907 37275 38210 +3 36907 38210 37801 +3 36908 37802 38211 +3 36908 38211 37276 +3 36909 37511 38331 +3 36909 38331 37996 +3 36910 37997 38332 +3 36910 38332 37512 +3 36911 37051 37542 +3 36911 37542 37353 +3 36912 37354 37543 +3 36912 37543 37052 +3 36913 38274 39639 +3 36913 39639 38445 +3 36914 38446 39640 +3 36914 39640 38275 +3 36915 37311 37461 +3 36915 37461 37063 +3 36916 37064 37462 +3 36916 37462 37312 +3 36917 37395 37558 +3 36917 37558 37049 +3 36918 37050 37559 +3 36918 37559 37396 +3 36919 37247 37300 +3 36919 37300 36955 +3 36920 36956 37301 +3 36920 37301 37248 +3 36921 37463 38744 +3 36921 38744 38194 +3 36922 38195 38745 +3 36922 38745 37464 +3 36923 37518 37607 +3 36923 37607 36971 +3 36924 36972 37608 +3 36924 37608 37519 +3 36925 37057 37329 +3 36925 37329 37128 +3 36926 37129 37330 +3 36926 37330 37058 +3 36927 37225 37726 +3 36927 37726 37410 +3 36928 37411 37727 +3 36928 37727 37226 +3 36929 37625 38613 +3 36929 38613 37913 +3 36930 37914 38614 +3 36930 38614 37626 +3 36931 37188 38155 +3 36931 38155 37884 +3 36932 37885 38156 +3 36932 38156 37189 +3 36933 37076 38509 +3 36933 38509 38333 +3 36934 38334 38510 +3 36934 38510 37077 +3 36935 38536 39007 +3 36935 39007 37431 +3 36936 37432 39008 +3 36936 39008 38537 +3 36937 37379 37501 +3 36937 37501 37035 +3 36938 37036 37502 +3 36938 37502 37380 +3 36939 38360 39935 +3 36939 39935 38690 +3 36940 38693 39936 +3 36940 39936 38361 +3 36941 38538 38965 +3 36941 38965 37427 +3 36942 37428 38966 +3 36942 38966 38539 +3 36943 37339 37597 +3 36943 37597 37184 +3 36944 37185 37598 +3 36944 37598 37340 +3 36945 37243 38119 +3 36945 38119 37797 +3 36946 37798 38120 +3 36946 38120 37244 +3 36947 37152 37293 +3 36947 37293 37153 +3 36948 37730 39250 +3 36948 39250 37731 +3 36949 38338 38658 +3 36949 38658 37283 +3 36950 37284 38659 +3 36950 38659 38339 +3 36951 37294 37839 +3 36951 37839 37477 +3 36952 37478 37840 +3 36952 37840 37295 +3 36953 37120 37793 +3 36953 37793 37580 +3 36954 37581 37794 +3 36954 37794 37121 +3 36955 37300 37267 +3 36956 37268 37301 +3 36957 37663 37978 +3 36957 37978 37281 +3 36958 37282 37979 +3 36958 37979 37664 +3 36959 37789 38792 +3 36959 38792 38010 +3 36960 38011 38793 +3 36960 38793 37790 +3 36961 37181 38028 +3 36961 38028 37767 +3 36962 37768 38029 +3 36962 38029 37182 +3 36963 37515 39148 +3 36963 39148 38592 +3 36964 38593 39149 +3 36964 39149 37516 +3 36965 39174 39683 +3 36965 39683 37526 +3 36966 37527 39684 +3 36966 39684 39175 +3 36967 38666 38947 +3 36967 38947 37325 +3 36968 37326 38948 +3 36968 38948 38667 +3 36969 38479 38987 +3 36969 38987 37554 +3 36970 37555 38988 +3 36970 38988 38480 +3 36971 37607 37641 +3 36972 37642 37608 +3 36973 37399 37635 +3 36973 37635 37192 +3 36974 37193 37636 +3 36974 37636 37400 +3 36975 38764 38912 +3 36975 38912 37041 +3 36976 37042 38913 +3 36976 38913 38765 +3 36977 38231 38564 +3 36978 38565 38232 +3 36979 37200 37381 +3 36979 37381 37126 +3 36980 37127 37382 +3 36980 37382 37201 +3 36981 37128 37337 +3 36981 37337 37152 +3 36982 37153 37338 +3 36982 37338 37129 +3 36983 37154 37383 +3 36983 37383 37200 +3 36984 37201 37384 +3 36984 37384 37155 +3 36985 38867 39509 +3 36985 39509 37732 +3 36986 37733 39510 +3 36986 39510 38868 +3 36987 37067 37365 +3 36987 37365 37296 +3 36988 37297 37366 +3 36988 37366 37068 +3 36989 38143 38368 +3 36989 38368 37271 +3 36990 37272 38369 +3 36990 38369 38144 +3 36991 37229 37331 +3 36991 37331 37067 +3 36992 37068 37332 +3 36992 37332 37230 +3 36993 37102 37826 +3 36993 37826 37631 +3 36994 37632 37827 +3 36994 37827 37103 +3 36995 37088 37359 +3 36995 37359 37249 +3 36996 37250 37360 +3 36996 37360 37089 +3 36997 37106 38298 +3 36997 38298 38198 +3 36998 38199 38299 +3 36998 38299 37107 +3 36999 38364 39821 +3 36999 39821 38647 +3 37000 38648 39822 +3 37000 39822 38365 +3 37001 37586 38280 +3 37001 38280 37718 +3 37002 37719 38281 +3 37002 38281 37587 +3 37003 37369 37683 +3 37003 37683 37339 +3 37004 37340 37684 +3 37004 37684 37370 +3 37005 37082 39417 +3 37005 39417 39331 +3 37006 39332 39418 +3 37006 39418 37083 +3 37007 39057 39823 +3 37007 39823 37882 +3 37008 37883 39824 +3 37008 39824 39058 +3 37009 37716 38290 +3 37009 38290 37621 +3 37010 37622 38291 +3 37010 38291 37717 +3 37011 39319 40086 +3 37011 40086 37915 +3 37012 37916 40087 +3 37012 40087 39320 +3 37013 38014 39194 +3 37013 39194 38296 +3 37014 38297 39195 +3 37014 39195 38015 +3 37015 39104 39673 +3 37015 39673 37657 +3 37016 37658 39674 +3 37016 39674 39105 +3 37017 38042 39972 +3 37017 39972 39079 +3 37018 39080 39973 +3 37018 39973 38043 +3 37019 38450 39426 +3 37019 39426 37643 +3 37020 37644 39427 +3 37020 39427 38451 +3 37021 38204 39491 +3 37021 39491 38464 +3 37022 38465 39492 +3 37022 39492 38205 +3 37023 37982 38703 +3 37023 38703 37757 +3 37024 37758 38704 +3 37024 38704 37983 +3 37025 37455 37818 +3 37025 37818 37391 +3 37026 37392 37819 +3 37026 37819 37456 +3 37027 37349 37629 +3 37027 37629 37311 +3 37028 37312 37630 +3 37028 37630 37350 +3 37029 37849 39343 +3 37029 39343 38662 +3 37030 38663 39344 +3 37030 39344 37850 +3 37031 37308 37617 +3 37031 37617 37349 +3 37032 37350 37618 +3 37032 37618 37308 +3 37033 37471 38134 +3 37033 38134 37688 +3 37034 37689 38135 +3 37034 38135 37472 +3 37035 37501 37613 +3 37035 37613 37108 +3 37036 37109 37614 +3 37036 37614 37502 +3 37037 37410 37843 +3 37037 37843 37455 +3 37038 37456 37844 +3 37038 37844 37411 +3 37039 37361 37896 +3 37039 37896 37592 +3 37040 37593 37897 +3 37040 37897 37362 +3 37041 38912 38949 +3 37041 38949 37075 +3 37042 37075 38950 +3 37042 38950 38913 +3 37043 37609 38024 +3 37043 38024 37449 +3 37044 37450 38025 +3 37044 38025 37610 +3 37045 39114 39659 +3 37045 39659 37679 +3 37046 37680 39660 +3 37046 39660 39115 +3 37047 38084 38358 +3 37048 38359 38085 +3 37049 37558 37665 +3 37049 37665 37137 +3 37050 37138 37666 +3 37050 37666 37559 +3 37051 37190 37702 +3 37051 37702 37542 +3 37052 37543 37703 +3 37052 37703 37191 +3 37053 37855 38052 +3 37053 38052 37277 +3 37054 37278 38053 +3 37054 38053 37856 +3 37055 37477 37835 +3 37055 37835 37401 +3 37056 37401 37836 +3 37056 37836 37478 +3 37057 37186 37441 +3 37057 37441 37329 +3 37058 37330 37442 +3 37058 37442 37187 +3 37059 37704 38340 +3 37059 38340 37716 +3 37060 37717 38341 +3 37060 38341 37705 +3 37061 37728 38190 +3 37061 38190 37505 +3 37062 37506 38191 +3 37062 38191 37729 +3 37063 37461 37627 +3 37063 37627 37196 +3 37064 37197 37628 +3 37064 37628 37462 +3 37065 37249 37413 +3 37065 37413 37229 +3 37066 37230 37414 +3 37066 37414 37250 +3 37067 37331 37365 +3 37068 37366 37332 +3 37069 37955 38573 +3 37069 38573 37724 +3 37070 37725 38574 +3 37070 38574 37956 +3 37071 37718 38354 +3 37071 38354 37704 +3 37072 37705 38355 +3 37072 38355 37719 +3 37073 38766 40009 +3 37073 40009 38526 +3 37074 38527 40010 +3 37074 40010 38767 +3 37075 38949 38950 +3 37076 37110 38627 +3 37076 38627 38509 +3 37077 38510 38628 +3 37077 38628 37111 +3 37078 37894 39661 +3 37078 39661 38951 +3 37079 38952 39662 +3 37079 39662 37895 +3 37080 38336 39333 +3 37080 39333 39025 +3 37081 39026 39334 +3 37081 39334 38337 +3 37082 37083 39442 +3 37082 39442 39417 +3 37083 39418 39442 +3 37084 37215 37853 +3 37084 37853 37698 +3 37085 37699 37854 +3 37085 37854 37216 +3 37086 38103 38943 +3 37086 38943 37965 +3 37087 37966 38944 +3 37087 38944 38104 +3 37088 37158 37437 +3 37088 37437 37359 +3 37089 37360 37438 +3 37089 37438 37159 +3 37090 37317 38006 +3 37090 38006 37787 +3 37091 37788 38007 +3 37091 38007 37318 +3 37092 37876 38196 +3 37092 38196 37408 +3 37093 37409 38197 +3 37093 38197 37877 +3 37094 37353 37739 +3 37094 37739 37479 +3 37095 37480 37740 +3 37095 37740 37354 +3 37096 37615 39645 +3 37096 39645 39212 +3 37097 39213 39646 +3 37097 39646 37616 +3 37098 38342 38803 +3 37098 38803 37611 +3 37099 37612 38804 +3 37099 38804 38343 +3 37100 37387 37851 +3 37100 37851 37562 +3 37101 37563 37852 +3 37101 37852 37388 +3 37102 37172 37898 +3 37102 37898 37826 +3 37103 37827 37899 +3 37103 37899 37173 +3 37104 38010 38941 +3 37104 38941 38097 +3 37105 38098 38942 +3 37105 38942 38011 +3 37106 37130 38376 +3 37106 38376 38298 +3 37107 38299 38377 +3 37107 38377 37130 +3 37108 37613 37672 +3 37108 37672 37369 +3 37109 37370 37673 +3 37109 37673 37614 +3 37110 37111 38653 +3 37110 38653 38627 +3 37111 38628 38653 +3 37112 37479 37749 +3 37112 37749 37399 +3 37113 37400 37750 +3 37113 37750 37480 +3 37114 38750 39311 +3 37114 39311 37832 +3 37115 37833 39312 +3 37115 39312 38751 +3 37116 37797 38603 +3 37116 38603 37973 +3 37117 37974 38604 +3 37117 38604 37798 +3 37118 38503 39781 +3 37118 39781 38585 +3 37119 38586 39782 +3 37119 39782 38504 +3 37120 37306 37961 +3 37120 37961 37793 +3 37121 37794 37962 +3 37121 37962 37307 +3 37122 37443 38263 +3 37122 38263 37927 +3 37123 37928 38264 +3 37123 38264 37444 +3 37124 37943 39128 +3 37124 39128 38408 +3 37125 38409 39129 +3 37125 39129 37944 +3 37126 37381 37487 +3 37126 37487 37247 +3 37127 37248 37488 +3 37127 37488 37382 +3 37128 37329 37509 +3 37128 37509 37337 +3 37129 37338 37510 +3 37129 37510 37330 +3 37130 38377 38376 +3 37131 38585 40205 +3 37131 40205 38955 +3 37132 38956 40206 +3 37132 40206 38586 +3 37133 37647 38732 +3 37133 38732 38243 +3 37134 38244 38733 +3 37134 38733 37648 +3 37135 37548 39257 +3 37135 39257 38896 +3 37136 38897 39258 +3 37136 39258 37549 +3 37137 37665 37714 +3 37137 37714 37174 +3 37138 37174 37715 +3 37138 37715 37666 +3 37139 38087 38428 +3 37139 38428 37451 +3 37140 37452 38429 +3 37140 38429 38088 +3 37141 38132 38320 +3 37141 38320 37333 +3 37142 37334 38321 +3 37142 38321 38133 +3 37143 37785 38062 +3 37143 38062 37433 +3 37144 37434 38063 +3 37144 38063 37786 +3 37145 37708 38596 +3 37145 38596 37709 +3 37146 38111 39775 +3 37146 39775 38931 +3 37147 38932 39776 +3 37147 39776 38112 +3 37148 39164 39545 +3 37148 39545 37578 +3 37149 37579 39546 +3 37149 39546 39165 +3 37150 38746 39764 +3 37150 39764 38336 +3 37151 38337 39765 +3 37151 39765 38747 +3 37152 37337 37459 +3 37152 37459 37293 +3 37153 37293 37460 +3 37153 37460 37338 +3 37154 37296 37503 +3 37154 37503 37383 +3 37155 37384 37504 +3 37155 37504 37297 +3 37156 37491 38257 +3 37156 38257 37888 +3 37157 37889 38258 +3 37157 38258 37492 +3 37158 37183 37465 +3 37158 37465 37437 +3 37159 37438 37466 +3 37159 37466 37183 +3 37160 37863 38123 +3 37160 38123 37404 +3 37161 37405 38124 +3 37161 38124 37864 +3 37162 38471 38888 +3 37162 38888 37637 +3 37163 37638 38889 +3 37163 38889 38472 +3 37164 37669 37892 +3 37164 37892 37375 +3 37165 37376 37893 +3 37165 37893 37670 +3 37166 38441 38841 +3 37166 38841 37590 +3 37167 37591 38842 +3 37167 38842 38442 +3 37168 37937 39612 +3 37168 39612 39150 +3 37169 39151 39613 +3 37169 39613 37938 +3 37170 38097 38935 +3 37170 38935 38103 +3 37171 38104 38936 +3 37171 38936 38098 +3 37172 37202 37963 +3 37172 37963 37898 +3 37173 37899 37964 +3 37173 37964 37202 +3 37174 37714 37715 +3 37175 38589 39657 +3 37175 39657 38390 +3 37176 38391 39658 +3 37176 39658 38590 +3 37177 37921 38206 +3 37177 38206 37419 +3 37178 37420 38207 +3 37178 38207 37922 +3 37179 37675 38581 +3 37179 38581 38070 +3 37180 38071 38582 +3 37180 38582 37676 +3 37181 37357 38372 +3 37181 38372 38028 +3 37182 38029 38373 +3 37182 38373 37358 +3 37183 37466 37465 +3 37184 37597 37812 +3 37184 37812 37395 +3 37185 37396 37813 +3 37185 37813 37598 +3 37186 37267 37520 +3 37186 37520 37441 +3 37187 37442 37521 +3 37187 37521 37268 +3 37188 37397 38370 +3 37188 38370 38155 +3 37189 38156 38371 +3 37189 38371 37398 +3 37190 37273 37783 +3 37190 37783 37702 +3 37191 37703 37784 +3 37191 37784 37274 +3 37192 37635 37808 +3 37192 37808 37379 +3 37193 37380 37809 +3 37193 37809 37636 +3 37194 37765 38173 +3 37194 38173 37566 +3 37195 37567 38174 +3 37195 38174 37766 +3 37196 37627 37712 +3 37196 37712 37279 +3 37197 37280 37713 +3 37197 37713 37628 +3 37198 37734 39614 +3 37198 39614 39144 +3 37199 39145 39615 +3 37199 39615 37735 +3 37200 37383 37546 +3 37200 37546 37381 +3 37201 37382 37547 +3 37201 37547 37384 +3 37202 37964 37963 +3 37203 37913 38833 +3 37203 38833 38151 +3 37204 38152 38834 +3 37204 38834 37914 +3 37205 37536 38762 +3 37205 38762 38416 +3 37206 38417 38763 +3 37206 38763 37537 +3 37207 38237 38567 +3 37207 38567 37524 +3 37208 37525 38568 +3 37208 38568 38238 +3 37209 37532 38117 +3 37209 38117 37761 +3 37210 37762 38118 +3 37210 38118 37533 +3 37211 38462 39362 +3 37211 39362 38212 +3 37212 38213 39363 +3 37212 39363 38463 +3 37213 38641 39035 +3 37213 39035 38032 +3 37214 38033 39036 +3 37214 39036 38642 +3 37215 37562 37941 +3 37215 37941 37853 +3 37216 37854 37942 +3 37216 37942 37563 +3 37217 37986 38456 +3 37217 38456 37685 +3 37218 37686 38457 +3 37218 38457 37987 +3 37219 37623 38318 +3 37219 38318 37902 +3 37220 37902 38319 +3 37220 38319 37624 +3 37221 38731 39422 +3 37221 39422 38026 +3 37222 38027 39423 +3 37222 39423 38731 +3 37223 39055 39471 +3 37223 39471 37691 +3 37224 37692 39472 +3 37224 39472 39056 +3 37225 37475 38000 +3 37225 38000 37726 +3 37226 37727 38001 +3 37226 38001 37476 +3 37227 37671 38668 +3 37227 38668 38222 +3 37228 38223 38669 +3 37228 38669 37674 +3 37229 37413 37522 +3 37229 37522 37331 +3 37230 37332 37523 +3 37230 37523 37414 +3 37231 38647 40467 +3 37231 40467 39230 +3 37232 39231 40468 +3 37232 40468 38648 +3 37233 37805 38324 +3 37233 38324 37728 +3 37234 37729 38325 +3 37234 38325 37805 +3 37235 37799 39043 +3 37235 39043 38768 +3 37236 38769 39044 +3 37236 39044 37800 +3 37237 37639 39039 +3 37237 39039 38721 +3 37238 38722 39040 +3 37238 39040 37640 +3 37239 39459 40096 +3 37239 40096 37945 +3 37240 37946 40097 +3 37240 40097 39460 +3 37241 38147 38845 +3 37241 38845 37982 +3 37242 37983 38846 +3 37242 38846 38148 +3 37243 37469 38400 +3 37243 38400 38119 +3 37244 38120 38401 +3 37244 38401 37470 +3 37245 38651 39501 +3 37245 39501 38235 +3 37246 38236 39502 +3 37246 39502 38652 +3 37247 37487 37564 +3 37247 37564 37300 +3 37248 37301 37565 +3 37248 37565 37488 +3 37249 37359 37560 +3 37249 37560 37413 +3 37250 37414 37561 +3 37250 37561 37360 +3 37251 37761 38288 +3 37251 38288 37745 +3 37252 37746 38289 +3 37252 38289 37762 +3 37253 38464 39707 +3 37253 39707 38605 +3 37254 38606 39708 +3 37254 39708 38465 +3 37255 37544 38790 +3 37255 38790 38477 +3 37256 38478 38791 +3 37256 38791 37545 +3 37257 39166 39800 +3 37257 39800 37976 +3 37258 37977 39801 +3 37258 39801 39167 +3 37259 38101 38475 +3 37259 38475 37599 +3 37260 37600 38476 +3 37260 38476 38102 +3 37261 38754 39329 +3 37261 39329 37910 +3 37262 37911 39330 +3 37262 39330 38755 +3 37263 38038 39715 +3 37263 39715 38999 +3 37264 39000 39716 +3 37264 39716 38039 +3 37265 38424 38801 +3 37265 38801 37655 +3 37266 37656 38802 +3 37266 38802 38425 +3 37267 37300 37574 +3 37267 37574 37520 +3 37268 37521 37575 +3 37268 37575 37301 +3 37269 37745 38294 +3 37269 38294 37765 +3 37270 37766 38295 +3 37270 38295 37746 +3 37271 38368 38594 +3 37271 38594 37469 +3 37272 37470 38595 +3 37272 38595 38369 +3 37273 37315 37841 +3 37273 37841 37783 +3 37274 37784 37842 +3 37274 37842 37316 +3 37275 37583 38522 +3 37275 38522 38210 +3 37276 38211 38523 +3 37276 38523 37584 +3 37277 38052 38233 +3 37277 38233 37425 +3 37278 37426 38234 +3 37278 38234 38053 +3 37279 37712 37837 +3 37279 37837 37315 +3 37280 37316 37838 +3 37280 37838 37713 +3 37281 37978 38269 +3 37281 38269 37402 +3 37282 37403 38270 +3 37282 38270 37979 +3 37283 38658 38920 +3 37283 38920 37570 +3 37284 37571 38921 +3 37284 38921 38659 +3 37285 37857 39190 +3 37285 39190 38696 +3 37286 38697 39191 +3 37286 39191 37858 +3 37287 39168 40025 +3 37287 40025 38247 +3 37288 38248 40026 +3 37288 40026 39169 +3 37289 38030 38701 +3 37289 38701 38034 +3 37290 38035 38702 +3 37290 38702 38031 +3 37291 37886 39300 +3 37291 39300 38771 +3 37292 38772 39301 +3 37292 39301 37887 +3 37293 37459 37585 +3 37293 37585 37460 +3 37294 37580 38139 +3 37294 38139 37839 +3 37295 37840 38140 +3 37295 38140 37581 +3 37296 37365 37605 +3 37296 37605 37503 +3 37297 37504 37606 +3 37297 37606 37366 +3 37298 37973 38717 +3 37298 38717 38030 +3 37299 38031 38718 +3 37299 38718 37974 +3 37300 37564 37574 +3 37301 37575 37565 +3 37302 38296 39393 +3 37302 39393 38489 +3 37303 38490 39394 +3 37303 39394 38297 +3 37304 39383 40127 +3 37304 40127 38157 +3 37305 38158 40128 +3 37305 40128 39384 +3 37306 37473 38074 +3 37306 38074 37961 +3 37307 37962 38075 +3 37307 38075 37474 +3 37308 37618 37834 +3 37308 37834 37617 +3 37309 38034 38725 +3 37309 38725 37955 +3 37310 37956 38726 +3 37310 38726 38035 +3 37311 37629 37830 +3 37311 37830 37461 +3 37312 37462 37831 +3 37312 37831 37630 +3 37313 38709 39298 +3 37313 39298 37939 +3 37314 37940 39299 +3 37314 39299 38710 +3 37315 37837 37841 +3 37316 37842 37838 +3 37317 37425 38171 +3 37317 38171 38006 +3 37318 38007 38172 +3 37318 38172 37426 +3 37319 39029 40061 +3 37319 40061 38450 +3 37320 38451 40062 +3 37320 40062 39030 +3 37321 37859 39152 +3 37321 39152 38656 +3 37322 38657 39153 +3 37322 39153 37860 +3 37323 38690 40123 +3 37323 40123 38918 +3 37324 38919 40124 +3 37324 40124 38693 +3 37325 38947 39224 +3 37325 39224 37619 +3 37326 37620 39225 +3 37326 39225 38948 +3 37327 38469 39027 +3 37327 39027 37904 +3 37328 37905 39028 +3 37328 39028 38470 +3 37329 37441 37659 +3 37329 37659 37509 +3 37330 37510 37660 +3 37330 37660 37442 +3 37331 37522 37601 +3 37331 37601 37365 +3 37332 37366 37602 +3 37332 37602 37523 +3 37333 38320 38454 +3 37333 38454 37439 +3 37334 37440 38455 +3 37334 38455 38321 +3 37335 39049 39794 +3 37335 39794 38153 +3 37336 38154 39795 +3 37336 39795 39050 +3 37337 37509 37667 +3 37337 37667 37459 +3 37338 37460 37668 +3 37338 37668 37510 +3 37339 37683 37949 +3 37339 37949 37597 +3 37340 37598 37950 +3 37340 37950 37684 +3 37341 38128 38894 +3 37341 38894 38147 +3 37342 38148 38895 +3 37342 38895 38129 +3 37343 38151 38904 +3 37343 38904 38128 +3 37344 38129 38905 +3 37344 38905 38152 +3 37345 38188 38607 +3 37345 38607 37755 +3 37346 37756 38608 +3 37346 38608 38189 +3 37347 38918 40152 +3 37347 40152 38766 +3 37348 38767 40153 +3 37348 40153 38919 +3 37349 37617 37900 +3 37349 37900 37629 +3 37350 37630 37901 +3 37350 37901 37618 +3 37351 39093 40416 +3 37351 40416 38805 +3 37352 38806 40417 +3 37352 40417 39094 +3 37353 37542 37957 +3 37353 37957 37739 +3 37354 37740 37958 +3 37354 37958 37543 +3 37355 38292 38853 +3 37355 38853 37933 +3 37356 37934 38854 +3 37356 38854 38293 +3 37357 37467 38513 +3 37357 38513 38372 +3 37358 38373 38514 +3 37358 38514 37468 +3 37359 37437 37661 +3 37359 37661 37560 +3 37360 37561 37662 +3 37360 37662 37438 +3 37361 37631 38182 +3 37361 38182 37896 +3 37362 37897 38183 +3 37362 38183 37632 +3 37363 38528 39287 +3 37363 39287 38231 +3 37364 38232 39288 +3 37364 39288 38529 +3 37365 37601 37605 +3 37366 37606 37602 +3 37367 37947 40129 +3 37367 40129 39604 +3 37368 39605 40130 +3 37368 40130 37948 +3 37369 37672 37992 +3 37369 37992 37683 +3 37370 37684 37993 +3 37370 37993 37673 +3 37371 38348 38797 +3 37371 38797 37828 +3 37372 37829 38798 +3 37372 38798 38349 +3 37373 38058 39023 +3 37373 39023 38380 +3 37374 38381 39024 +3 37374 39024 38059 +3 37375 37892 38066 +3 37375 38066 37518 +3 37376 37519 38067 +3 37376 38067 37893 +3 37377 37801 38633 +3 37377 38633 38163 +3 37378 38164 38634 +3 37378 38634 37802 +3 37379 37808 37951 +3 37379 37951 37501 +3 37380 37502 37952 +3 37380 37952 37809 +3 37381 37546 37693 +3 37381 37693 37487 +3 37382 37488 37694 +3 37382 37694 37547 +3 37383 37503 37700 +3 37383 37700 37546 +3 37384 37547 37701 +3 37384 37701 37504 +3 37385 39091 39745 +3 37385 39745 38072 +3 37386 38073 39746 +3 37386 39746 39092 +3 37387 37592 38076 +3 37387 38076 37851 +3 37388 37852 38077 +3 37388 38077 37593 +3 37389 38530 39967 +3 37389 39967 38908 +3 37390 38909 39968 +3 37390 39968 38531 +3 37391 37818 38113 +3 37391 38113 37669 +3 37392 37670 38114 +3 37392 38114 37819 +3 37393 38554 39519 +3 37393 39519 38462 +3 37394 38463 39520 +3 37394 39520 38555 +3 37395 37812 37984 +3 37395 37984 37558 +3 37396 37559 37985 +3 37396 37985 37813 +3 37397 37595 38534 +3 37397 38534 38370 +3 37398 38371 38535 +3 37398 38535 37596 +3 37399 37749 37998 +3 37399 37998 37635 +3 37400 37636 37999 +3 37400 37999 37750 +3 37401 37835 38138 +3 37401 38138 37836 +3 37402 38269 38388 +3 37402 38388 37489 +3 37403 37490 38389 +3 37403 38389 38270 +3 37404 38123 38356 +3 37404 38356 37609 +3 37405 37610 38357 +3 37405 38357 38124 +3 37406 38605 39757 +3 37406 39757 38589 +3 37407 38590 39758 +3 37407 39758 38606 +3 37408 38196 38410 +3 37408 38410 37603 +3 37409 37604 38411 +3 37409 38411 38197 +3 37410 37726 38186 +3 37410 38186 37843 +3 37411 37844 38187 +3 37411 38187 37727 +3 37412 38256 39768 +3 37412 39768 38255 +3 37413 37560 37706 +3 37413 37706 37522 +3 37414 37523 37707 +3 37414 37707 37561 +3 37415 38489 39503 +3 37415 39503 38554 +3 37416 38555 39504 +3 37416 39504 38490 +3 37417 38959 39843 +3 37417 39843 38396 +3 37418 38397 39844 +3 37418 39844 38960 +3 37419 38206 38404 +3 37419 38404 37595 +3 37420 37596 38405 +3 37420 38405 38207 +3 37421 38414 39711 +3 37421 39711 38813 +3 37422 38814 39712 +3 37422 39712 38415 +3 37423 39051 39697 +3 37423 39697 38109 +3 37424 38110 39698 +3 37424 39698 39052 +3 37425 38233 38171 +3 37426 38172 38234 +3 37427 38965 39370 +3 37427 39370 37871 +3 37428 37872 39371 +3 37428 39371 38966 +3 37429 38312 40297 +3 37429 40297 39497 +3 37430 39498 40298 +3 37430 40298 38313 +3 37431 39007 39405 +3 37431 39405 37869 +3 37432 37870 39406 +3 37432 39406 39008 +3 37433 38062 38300 +3 37433 38300 37663 +3 37434 37664 38301 +3 37434 38301 38063 +3 37435 38362 40567 +3 37435 40567 39779 +3 37436 39780 40568 +3 37436 40568 38363 +3 37437 37465 37720 +3 37437 37720 37661 +3 37438 37662 37721 +3 37438 37721 37466 +3 37439 38454 38540 +3 37439 38540 37493 +3 37440 37494 38541 +3 37440 38541 38455 +3 37441 37520 37743 +3 37441 37743 37659 +3 37442 37660 37744 +3 37442 37744 37521 +3 37443 37688 38518 +3 37443 38518 38263 +3 37444 38264 38519 +3 37444 38519 37689 +3 37445 38226 40017 +3 37445 40017 39347 +3 37446 39348 40018 +3 37446 40018 38227 +3 37447 38165 39463 +3 37447 39463 38839 +3 37448 38840 39464 +3 37448 39464 38166 +3 37449 38024 38378 +3 37449 38378 37785 +3 37450 37786 38379 +3 37450 38379 38025 +3 37451 38428 38691 +3 37451 38691 37986 +3 37452 37987 38692 +3 37452 38692 38429 +3 37453 39565 40473 +3 37453 40473 38495 +3 37454 38496 40474 +3 37454 40474 39566 +3 37455 37843 38282 +3 37455 38282 37818 +3 37456 37819 38283 +3 37456 38283 37844 +3 37457 38507 38997 +3 37457 38997 37994 +3 37458 37995 38998 +3 37458 38998 38508 +3 37459 37667 37771 +3 37459 37771 37585 +3 37460 37585 37772 +3 37460 37772 37668 +3 37461 37830 37990 +3 37461 37990 37627 +3 37462 37628 37991 +3 37462 37991 37831 +3 37463 38022 39186 +3 37463 39186 38744 +3 37464 38745 39189 +3 37464 39189 38023 +3 37465 37466 37738 +3 37465 37738 37720 +3 37466 37721 37738 +3 37467 37556 38611 +3 37467 38611 38513 +3 37468 38514 38612 +3 37468 38612 37557 +3 37469 38594 38400 +3 37470 38401 38595 +3 37471 37888 38577 +3 37471 38577 38134 +3 37472 38135 38578 +3 37472 38578 37889 +3 37473 37641 38251 +3 37473 38251 38074 +3 37474 38075 38252 +3 37474 38252 37642 +3 37475 37698 38245 +3 37475 38245 38000 +3 37476 38001 38246 +3 37476 38246 37699 +3 37477 37839 38228 +3 37477 38228 37835 +3 37478 37836 38229 +3 37478 38229 37840 +3 37479 37739 38078 +3 37479 38078 37749 +3 37480 37750 38079 +3 37480 38079 37740 +3 37481 38115 40183 +3 37481 40183 39602 +3 37482 39603 40184 +3 37482 40184 38116 +3 37483 38095 39950 +3 37483 39950 38933 +3 37484 38934 39951 +3 37484 39951 38096 +3 37485 37572 39445 +3 37485 39445 39277 +3 37486 39278 39446 +3 37486 39446 37573 +3 37487 37693 37775 +3 37487 37775 37564 +3 37488 37565 37776 +3 37488 37776 37694 +3 37489 38388 38443 +3 37489 38443 37530 +3 37490 37531 38444 +3 37490 38444 38389 +3 37491 37767 38546 +3 37491 38546 38257 +3 37492 38258 38547 +3 37492 38547 37768 +3 37493 38540 38566 +3 37493 38566 37494 +3 37494 38566 38541 +3 37495 37824 38877 +3 37495 38877 38587 +3 37496 38588 38878 +3 37496 38878 37825 +3 37497 39142 39747 +3 37497 39747 38080 +3 37498 38081 39748 +3 37498 39748 39143 +3 37499 38955 40521 +3 37499 40521 39196 +3 37500 39197 40522 +3 37500 40522 38956 +3 37501 37951 38064 +3 37501 38064 37613 +3 37502 37614 38065 +3 37502 38065 37952 +3 37503 37605 37795 +3 37503 37795 37700 +3 37504 37701 37796 +3 37504 37796 37606 +3 37505 38190 38558 +3 37505 38558 37876 +3 37506 37877 38559 +3 37506 38559 38191 +3 37507 38044 39633 +3 37507 39633 39146 +3 37508 39147 39634 +3 37508 39634 38045 +3 37509 37659 37816 +3 37509 37816 37667 +3 37510 37668 37817 +3 37510 37817 37660 +3 37511 38070 38857 +3 37511 38857 38331 +3 37512 38332 38858 +3 37512 38858 38071 +3 37513 38167 40177 +3 37513 40177 39610 +3 37514 39611 40178 +3 37514 40178 38168 +3 37515 38036 39598 +3 37515 39598 39148 +3 37516 39149 39599 +3 37516 39599 38037 +3 37517 38240 39306 +3 37517 39306 38239 +3 37518 38066 38192 +3 37518 38192 37607 +3 37519 37608 38193 +3 37519 38193 38067 +3 37520 37574 37803 +3 37520 37803 37743 +3 37521 37744 37804 +3 37521 37804 37575 +3 37522 37706 37781 +3 37522 37781 37601 +3 37523 37602 37782 +3 37523 37782 37707 +3 37524 38567 38855 +3 37524 38855 37861 +3 37525 37862 38856 +3 37525 38856 38568 +3 37526 39683 40125 +3 37526 40125 38056 +3 37527 38057 40126 +3 37527 40126 39684 +3 37528 38408 39440 +3 37528 39440 38719 +3 37529 38720 39441 +3 37529 39441 38409 +3 37530 38443 38466 +3 37530 38466 37531 +3 37531 38466 38444 +3 37532 37787 38435 +3 37532 38435 38117 +3 37533 38118 38436 +3 37533 38436 37788 +3 37534 38843 39387 +3 37534 39387 38126 +3 37535 38127 39388 +3 37535 39388 38844 +3 37536 37845 39018 +3 37536 39018 38762 +3 37537 38763 39019 +3 37537 39019 37846 +3 37538 38977 40243 +3 37538 40243 38926 +3 37539 38927 40244 +3 37539 40244 38978 +3 37540 38995 40078 +3 37540 40078 38746 +3 37541 38747 40079 +3 37541 40079 38996 +3 37542 37702 38141 +3 37542 38141 37957 +3 37543 37958 38142 +3 37543 38142 37703 +3 37544 38002 39013 +3 37544 39013 38790 +3 37545 38791 39014 +3 37545 39014 38003 +3 37546 37700 37847 +3 37546 37847 37693 +3 37547 37694 37848 +3 37547 37848 37701 +3 37548 37908 39577 +3 37548 39577 39257 +3 37549 39258 39578 +3 37549 39578 37909 +3 37550 39395 40703 +3 37550 40703 38977 +3 37551 38978 40704 +3 37551 40704 39396 +3 37552 38178 39621 +3 37552 39621 39069 +3 37553 39070 39622 +3 37553 39622 38179 +3 37554 38987 39162 +3 37554 39162 37722 +3 37555 37723 39163 +3 37555 39163 38988 +3 37556 37582 38670 +3 37556 38670 38611 +3 37557 38612 38671 +3 37557 38671 37582 +3 37558 37984 38093 +3 37558 38093 37665 +3 37559 37666 38094 +3 37559 38094 37985 +3 37560 37661 37822 +3 37560 37822 37706 +3 37561 37707 37823 +3 37561 37823 37662 +3 37562 37851 38271 +3 37562 38271 37941 +3 37563 37942 38272 +3 37563 38272 37852 +3 37564 37775 37814 +3 37564 37814 37574 +3 37565 37575 37815 +3 37565 37815 37776 +3 37566 38173 38497 +3 37566 38497 37863 +3 37567 37864 38498 +3 37567 38498 38174 +3 37568 39457 40199 +3 37568 40199 38418 +3 37569 38419 40200 +3 37569 40200 39458 +3 37570 38920 39140 +3 37570 39140 37824 +3 37571 37825 39141 +3 37571 39141 38921 +3 37572 37594 39489 +3 37572 39489 39445 +3 37573 39446 39490 +3 37573 39490 37594 +3 37574 37814 37803 +3 37575 37804 37815 +3 37576 38194 39222 +3 37576 39222 38672 +3 37577 38672 39223 +3 37577 39223 38195 +3 37578 39545 39875 +3 37578 39875 38825 +3 37579 38826 39876 +3 37579 39876 39546 +3 37580 37793 38392 +3 37580 38392 38139 +3 37581 38140 38393 +3 37581 38393 37794 +3 37582 38671 38670 +3 37583 37884 38734 +3 37583 38734 38522 +3 37584 38523 38735 +3 37584 38735 37885 +3 37585 37771 37772 +3 37586 37927 38694 +3 37586 38694 38280 +3 37587 38281 38695 +3 37587 38695 37928 +3 37588 39214 39963 +3 37588 39963 38432 +3 37589 38433 39964 +3 37589 39964 39215 +3 37590 38841 39200 +3 37590 39200 37969 +3 37591 37970 39201 +3 37591 39201 38842 +3 37592 37896 38426 +3 37592 38426 38076 +3 37593 38077 38427 +3 37593 38427 37897 +3 37594 39490 39489 +3 37595 38404 38534 +3 37596 38535 38405 +3 37597 37949 38200 +3 37597 38200 37812 +3 37598 37813 38201 +3 37598 38201 37950 +3 37599 38475 38780 +3 37599 38780 37890 +3 37600 37891 38781 +3 37600 38781 38476 +3 37601 37781 37820 +3 37601 37820 37605 +3 37602 37606 37821 +3 37602 37821 37782 +3 37603 38410 38560 +3 37603 38560 37855 +3 37604 37856 38561 +3 37604 38561 38411 +3 37605 37820 37795 +3 37606 37796 37821 +3 37607 38192 38253 +3 37607 38253 37641 +3 37608 37642 38254 +3 37608 38254 38193 +3 37609 38356 38487 +3 37609 38487 38024 +3 37610 38025 38488 +3 37610 38488 38357 +3 37611 38803 38969 +3 37611 38969 37759 +3 37612 37760 38970 +3 37612 38970 38804 +3 37613 38064 38145 +3 37613 38145 37672 +3 37614 37673 38146 +3 37614 38146 38065 +3 37615 38046 40043 +3 37615 40043 39645 +3 37616 39646 40044 +3 37616 40044 38047 +3 37617 37834 38159 +3 37617 38159 37900 +3 37618 37901 38160 +3 37618 38160 37834 +3 37619 39224 38873 +3 37620 38874 39225 +3 37621 38290 38673 +3 37621 38673 37921 +3 37622 37922 38674 +3 37622 38674 38291 +3 37623 38163 38837 +3 37623 38837 38318 +3 37624 38319 38838 +3 37624 38838 38164 +3 37625 37996 38957 +3 37625 38957 38613 +3 37626 38614 38958 +3 37626 38958 37997 +3 37627 37990 38091 +3 37627 38091 37712 +3 37628 37713 38092 +3 37628 38092 37991 +3 37629 37900 38149 +3 37629 38149 37830 +3 37630 37831 38150 +3 37630 38150 37901 +3 37631 37826 38402 +3 37631 38402 38182 +3 37632 38183 38403 +3 37632 38403 37827 +3 37633 38924 39829 +3 37633 39829 38651 +3 37634 38652 39830 +3 37634 39830 38925 +3 37635 37998 38220 +3 37635 38220 37808 +3 37636 37809 38221 +3 37636 38221 37999 +3 37637 38888 39261 +3 37637 39261 38016 +3 37638 38017 39262 +3 37638 39262 38889 +3 37639 37971 39364 +3 37639 39364 39039 +3 37640 39040 39365 +3 37640 39365 37972 +3 37641 38253 38251 +3 37642 38252 38254 +3 37643 39426 40331 +3 37643 40331 38645 +3 37644 38646 40332 +3 37644 40332 39427 +3 37645 38752 39507 +3 37645 39507 38528 +3 37646 38529 39508 +3 37646 39508 38753 +3 37647 38054 39083 +3 37647 39083 38732 +3 37648 38733 39084 +3 37648 39084 38055 +3 37649 38398 40575 +3 37649 40575 39937 +3 37650 39938 40576 +3 37650 40576 38399 +3 37651 38825 40317 +3 37651 40317 39238 +3 37652 39239 40318 +3 37652 40318 38826 +3 37653 38384 39897 +3 37653 39897 39265 +3 37654 39266 39898 +3 37654 39898 38385 +3 37655 38801 39102 +3 37655 39102 38292 +3 37656 38293 39103 +3 37656 39103 38802 +3 37657 39673 40142 +3 37657 40142 38460 +3 37658 38461 40143 +3 37658 40143 39674 +3 37659 37743 37925 +3 37659 37925 37816 +3 37660 37817 37926 +3 37660 37926 37744 +3 37661 37720 37906 +3 37661 37906 37822 +3 37662 37823 37907 +3 37662 37907 37721 +3 37663 38300 38649 +3 37663 38649 37978 +3 37664 37979 38650 +3 37664 38650 38301 +3 37665 38093 38202 +3 37665 38202 37714 +3 37666 37715 38203 +3 37666 38203 38094 +3 37667 37816 37935 +3 37667 37935 37771 +3 37668 37772 37936 +3 37668 37936 37817 +3 37669 38113 38382 +3 37669 38382 37892 +3 37670 37893 38383 +3 37670 38383 38114 +3 37671 38243 39218 +3 37671 39218 38668 +3 37672 38145 37992 +3 37673 37993 38146 +3 37674 38669 39219 +3 37674 39219 38244 +3 37675 38089 38989 +3 37675 38989 38581 +3 37676 38582 38990 +3 37676 38990 38090 +3 37677 38740 39391 +3 37677 39391 38424 +3 37678 38425 39392 +3 37678 39392 38741 +3 37679 39659 40148 +3 37679 40148 38259 +3 37680 38260 40149 +3 37680 40149 39660 +3 37681 38685 40507 +3 37681 40507 39596 +3 37682 39597 40508 +3 37682 40508 38686 +3 37683 37992 38278 +3 37683 38278 37949 +3 37684 37950 38279 +3 37684 38279 37993 +3 37685 38456 38865 +3 37685 38865 38101 +3 37686 38102 38866 +3 37686 38866 38457 +3 37687 38908 40239 +3 37687 40239 39081 +3 37688 38134 38736 +3 37688 38736 38518 +3 37689 38519 38737 +3 37689 38737 38135 +3 37690 39082 40240 +3 37690 40240 38909 +3 37691 39471 39861 +3 37691 39861 38107 +3 37692 38108 39862 +3 37692 39862 39472 +3 37693 37847 37953 +3 37693 37953 37775 +3 37694 37776 37954 +3 37694 37954 37848 +3 37695 38599 40621 +3 37695 40621 39835 +3 37696 39836 40622 +3 37696 40622 38600 +3 37697 38189 38881 +3 37697 38881 38188 +3 37698 37853 38420 +3 37698 38420 38245 +3 37699 38246 38421 +3 37699 38421 37854 +3 37700 37795 37959 +3 37700 37959 37847 +3 37701 37848 37960 +3 37701 37960 37796 +3 37702 37783 38267 +3 37702 38267 38141 +3 37703 38142 38268 +3 37703 38268 37784 +3 37704 38354 38859 +3 37704 38859 38340 +3 37705 38341 38860 +3 37705 38860 38355 +3 37706 37822 37931 +3 37706 37931 37781 +3 37707 37782 37932 +3 37707 37932 37823 +3 37708 38222 39037 +3 37708 39037 38596 +3 37709 38596 39038 +3 37709 39038 38223 +3 37710 38467 40339 +3 37710 40339 39647 +3 37711 39648 40340 +3 37711 40340 38468 +3 37712 38091 38261 +3 37712 38261 37837 +3 37713 37838 38262 +3 37713 38262 38092 +3 37714 38202 38230 +3 37714 38230 37715 +3 37715 38230 38203 +3 37716 38340 38879 +3 37716 38879 38290 +3 37717 38291 38880 +3 37717 38880 38341 +3 37718 38280 38882 +3 37718 38882 38354 +3 37719 38355 38883 +3 37719 38883 38281 +3 37720 37738 37967 +3 37720 37967 37906 +3 37721 37907 37968 +3 37721 37968 37738 +3 37722 39162 39275 +3 37722 39275 37751 +3 37723 37752 39276 +3 37723 39276 39163 +3 37724 38573 38928 +3 37724 38928 38087 +3 37725 38088 38929 +3 37725 38929 38574 +3 37726 38000 38458 +3 37726 38458 38186 +3 37727 38187 38459 +3 37727 38459 38001 +3 37728 38324 38778 +3 37728 38778 38190 +3 37729 38191 38779 +3 37729 38779 38325 +3 37730 38575 39993 +3 37730 39993 39250 +3 37731 39250 39994 +3 37731 39994 38576 +3 37732 39509 40241 +3 37732 40241 38550 +3 37733 38551 40242 +3 37733 40242 39510 +3 37734 38241 40059 +3 37734 40059 39614 +3 37735 39615 40060 +3 37735 40060 38242 +3 37736 39372 40643 +3 37736 40643 39093 +3 37737 39094 40644 +3 37737 40644 39373 +3 37738 37968 37967 +3 37739 37957 38310 +3 37739 38310 38078 +3 37740 38079 38311 +3 37740 38311 37958 +3 37741 38933 40585 +3 37741 40585 39505 +3 37742 39506 40586 +3 37742 40586 38934 +3 37743 37803 38008 +3 37743 38008 37925 +3 37744 37926 38009 +3 37744 38009 37804 +3 37745 38288 38760 +3 37745 38760 38294 +3 37746 38295 38761 +3 37746 38761 38289 +3 37747 39122 40265 +3 37747 40265 38995 +3 37748 38996 40266 +3 37748 40266 39123 +3 37749 38078 38326 +3 37749 38326 37998 +3 37750 37999 38327 +3 37750 38327 38079 +3 37751 39275 39297 +3 37751 39297 37752 +3 37752 39297 39276 +3 37753 39230 40860 +3 37753 40860 39557 +3 37754 39560 40861 +3 37754 40861 39231 +3 37755 38607 39138 +3 37755 39138 38348 +3 37756 38349 39139 +3 37756 39139 38608 +3 37757 38703 39005 +3 37757 39005 38084 +3 37758 38085 39006 +3 37758 39006 38704 +3 37759 38969 39077 +3 37759 39077 37880 +3 37760 37881 39078 +3 37760 39078 38970 +3 37761 38117 38679 +3 37761 38679 38288 +3 37762 38289 38680 +3 37762 38680 38118 +3 37763 39196 40666 +3 37763 40666 39372 +3 37764 39373 40667 +3 37764 40667 39197 +3 37765 38294 38705 +3 37765 38705 38173 +3 37766 38174 38706 +3 37766 38706 38295 +3 37767 38028 38788 +3 37767 38788 38546 +3 37768 38547 38789 +3 37768 38789 38029 +3 37769 39047 39819 +3 37769 39819 38641 +3 37770 38642 39820 +3 37770 39820 39048 +3 37771 37935 37975 +3 37771 37975 37772 +3 37772 37975 37936 +3 37773 38643 40319 +3 37773 40319 39551 +3 37774 39552 40320 +3 37774 40320 38644 +3 37775 37953 38020 +3 37775 38020 37814 +3 37776 37815 38021 +3 37776 38021 37954 +3 37777 38719 39695 +3 37777 39695 38835 +3 37778 38836 39696 +3 37778 39696 38720 +3 37779 38809 40115 +3 37779 40115 39208 +3 37780 39209 40116 +3 37780 40116 38810 +3 37781 37931 38004 +3 37781 38004 37820 +3 37782 37821 38005 +3 37782 38005 37932 +3 37783 37841 38329 +3 37783 38329 38267 +3 37784 38268 38330 +3 37784 38330 37842 +3 37785 38378 38675 +3 37785 38675 38062 +3 37786 38063 38676 +3 37786 38676 38379 +3 37787 38006 38664 +3 37787 38664 38435 +3 37788 38436 38665 +3 37788 38665 38007 +3 37789 38587 39469 +3 37789 39469 38792 +3 37790 38793 39470 +3 37790 39470 38588 +3 37791 38813 40011 +3 37791 40011 39059 +3 37792 39060 40012 +3 37792 40012 38814 +3 37793 37961 38583 +3 37793 38583 38392 +3 37794 38393 38584 +3 37794 38584 37962 +3 37795 37820 38012 +3 37795 38012 37959 +3 37796 37960 38013 +3 37796 38013 37821 +3 37797 38119 38916 +3 37797 38916 38603 +3 37798 38604 38917 +3 37798 38917 38120 +3 37799 38333 39537 +3 37799 39537 39043 +3 37800 39044 39538 +3 37800 39538 38334 +3 37801 38210 38979 +3 37801 38979 38633 +3 37802 38634 38980 +3 37802 38980 38211 +3 37803 37814 38040 +3 37803 38040 38008 +3 37804 38009 38041 +3 37804 38041 37815 +3 37805 38325 38698 +3 37805 38698 38324 +3 37806 38662 39667 +3 37806 39667 39244 +3 37807 39245 39668 +3 37807 39668 38663 +3 37808 38220 38366 +3 37808 38366 37951 +3 37809 37952 38367 +3 37809 38367 38221 +3 37810 38831 39681 +3 37810 39681 38752 +3 37811 38753 39682 +3 37811 39682 38832 +3 37812 38200 38386 +3 37812 38386 37984 +3 37813 37985 38387 +3 37813 38387 38201 +3 37814 38020 38040 +3 37815 38041 38021 +3 37816 37925 38068 +3 37816 38068 37935 +3 37817 37936 38069 +3 37817 38069 37926 +3 37818 38282 38617 +3 37818 38617 38113 +3 37819 38114 38618 +3 37819 38618 38283 +3 37820 38004 38012 +3 37821 38013 38005 +3 37822 37906 38050 +3 37822 38050 37931 +3 37823 37932 38051 +3 37823 38051 37907 +3 37824 39140 38877 +3 37825 38878 39141 +3 37826 37898 38569 +3 37826 38569 38402 +3 37827 38403 38570 +3 37827 38570 37899 +3 37828 38797 39178 +3 37828 39178 38237 +3 37829 38238 39179 +3 37829 39179 38798 +3 37830 38149 38316 +3 37830 38316 37990 +3 37831 37991 38317 +3 37831 38317 38150 +3 37832 39311 39919 +3 37832 39919 38473 +3 37833 38474 39920 +3 37833 39920 39312 +3 37834 38160 38328 +3 37834 38328 38159 +3 37835 38228 38542 +3 37835 38542 38138 +3 37836 38138 38543 +3 37836 38543 38229 +3 37837 38261 38350 +3 37837 38350 37841 +3 37838 37842 38351 +3 37838 38351 38262 +3 37839 38139 38532 +3 37839 38532 38228 +3 37840 38229 38533 +3 37840 38533 38140 +3 37841 38350 38329 +3 37842 38330 38351 +3 37843 38186 38637 +3 37843 38637 38282 +3 37844 38283 38638 +3 37844 38638 38187 +3 37845 38105 39240 +3 37845 39240 39018 +3 37846 39019 39241 +3 37846 39241 38106 +3 37847 37959 38082 +3 37847 38082 37953 +3 37848 37954 38083 +3 37848 38083 37960 +3 37849 38548 39981 +3 37849 39981 39343 +3 37850 39344 39982 +3 37850 39982 38549 +3 37851 38076 38516 +3 37851 38516 38271 +3 37852 38272 38517 +3 37852 38517 38077 +3 37853 37941 38544 +3 37853 38544 38420 +3 37854 38421 38545 +3 37854 38545 37942 +3 37855 38560 38774 +3 37855 38774 38052 +3 37856 38053 38775 +3 37856 38775 38561 +3 37857 38352 39627 +3 37857 39627 39190 +3 37858 39191 39628 +3 37858 39628 38353 +3 37859 38308 39582 +3 37859 39582 39152 +3 37860 39153 39583 +3 37860 39583 38309 +3 37861 38855 39126 +3 37861 39126 38143 +3 37862 38144 39127 +3 37862 39127 38856 +3 37863 38497 38776 +3 37863 38776 38123 +3 37864 38124 38777 +3 37864 38777 38498 +3 37865 38835 39671 +3 37865 39671 38831 +3 37866 38832 39672 +3 37866 39672 38836 +3 37867 39413 40529 +3 37867 40529 39029 +3 37868 39030 40530 +3 37868 40530 39414 +3 37869 39405 39755 +3 37869 39755 38479 +3 37870 38480 39756 +3 37870 39756 39406 +3 37871 39370 39751 +3 37871 39751 38286 +3 37872 38287 39752 +3 37872 39752 39371 +3 37873 38738 40287 +3 37873 40287 38739 +3 37874 38914 40913 +3 37874 40913 40015 +3 37875 40016 40914 +3 37875 40914 38915 +3 37876 38558 38849 +3 37876 38849 38196 +3 37877 38197 38850 +3 37877 38850 38559 +3 37878 39075 40055 +3 37878 40055 38924 +3 37879 38925 40056 +3 37879 40056 39076 +3 37880 39077 39158 +3 37880 39158 37903 +3 37881 37903 39159 +3 37881 39159 39078 +3 37882 39823 40527 +3 37882 40527 38687 +3 37883 38688 40528 +3 37883 40528 39824 +3 37884 38155 38953 +3 37884 38953 38734 +3 37885 38735 38954 +3 37885 38954 38156 +3 37886 38592 39959 +3 37886 39959 39300 +3 37887 39301 39960 +3 37887 39960 38593 +3 37888 38257 38898 +3 37888 38898 38577 +3 37889 38578 38899 +3 37889 38899 38258 +3 37890 38780 39001 +3 37890 39001 38132 +3 37891 38133 39002 +3 37891 39002 38781 +3 37892 38382 38571 +3 37892 38571 38066 +3 37893 38067 38572 +3 37893 38572 38383 +3 37894 38635 40333 +3 37894 40333 39661 +3 37895 39662 40334 +3 37895 40334 38636 +3 37896 38182 38699 +3 37896 38699 38426 +3 37897 38427 38700 +3 37897 38700 38183 +3 37898 37963 38660 +3 37898 38660 38569 +3 37899 38570 38661 +3 37899 38661 37964 +3 37900 38159 38422 +3 37900 38422 38149 +3 37901 38150 38423 +3 37901 38423 38160 +3 37902 38318 38930 +3 37902 38930 38319 +3 37903 39158 39159 +3 37904 39027 39499 +3 37904 39499 38441 +3 37905 38442 39500 +3 37905 39500 39028 +3 37906 37967 38130 +3 37906 38130 38050 +3 37907 38051 38131 +3 37907 38131 37968 +3 37908 38235 39866 +3 37908 39866 39577 +3 37909 39578 39867 +3 37909 39867 38236 +3 37910 39329 39891 +3 37910 39891 38536 +3 37911 38537 39892 +3 37911 39892 39330 +3 37912 38508 39374 +3 37912 39374 38507 +3 37913 38613 39434 +3 37913 39434 38833 +3 37914 38834 39435 +3 37914 39435 38614 +3 37915 40086 40697 +3 37915 40697 38597 +3 37916 38598 40698 +3 37916 40698 40087 +3 37917 39625 40947 +3 37917 40947 39395 +3 37918 39396 40948 +3 37918 40948 39626 +3 37919 39379 40436 +3 37919 40436 38579 +3 37920 38580 40437 +3 37920 40437 39380 +3 37921 38673 38906 +3 37921 38906 38206 +3 37922 38207 38907 +3 37922 38907 38674 +3 37923 39081 40349 +3 37923 40349 39122 +3 37924 39123 40350 +3 37924 40350 39082 +3 37925 38008 38169 +3 37925 38169 38068 +3 37926 38069 38170 +3 37926 38170 38009 +3 37927 38263 38967 +3 37927 38967 38694 +3 37928 38695 38968 +3 37928 38968 38264 +3 37929 38931 40430 +3 37929 40430 39521 +3 37930 39522 40431 +3 37930 40431 38932 +3 37931 38050 38136 +3 37931 38136 38004 +3 37932 38005 38137 +3 37932 38137 38051 +3 37933 38853 39350 +3 37933 39350 38471 +3 37934 38472 39351 +3 37934 39351 38854 +3 37935 38068 38121 +3 37935 38121 37975 +3 37936 37975 38122 +3 37936 38122 38069 +3 37937 38683 40259 +3 37937 40259 39612 +3 37938 39613 40260 +3 37938 40260 38684 +3 37939 39298 39847 +3 37939 39847 38538 +3 37940 38539 39848 +3 37940 39848 39299 +3 37941 38271 38631 +3 37941 38631 38544 +3 37942 38545 38632 +3 37942 38632 38272 +3 37943 38380 39531 +3 37943 39531 39128 +3 37944 39129 39532 +3 37944 39532 38381 +3 37945 40096 40685 +3 37945 40685 38623 +3 37946 38624 40686 +3 37946 40686 40097 +3 37947 38493 40619 +3 37947 40619 40129 +3 37948 40130 40620 +3 37948 40620 38494 +3 37949 38278 38520 +3 37949 38520 38200 +3 37950 38201 38521 +3 37950 38521 38279 +3 37951 38366 38483 +3 37951 38483 38064 +3 37952 38065 38484 +3 37952 38484 38367 +3 37953 38082 38176 +3 37953 38176 38020 +3 37954 38021 38177 +3 37954 38177 38083 +3 37955 38725 39263 +3 37955 39263 38573 +3 37956 38574 39264 +3 37956 39264 38726 +3 37957 38141 38524 +3 37957 38524 38310 +3 37958 38311 38525 +3 37958 38525 38142 +3 37959 38012 38161 +3 37959 38161 38082 +3 37960 38083 38162 +3 37960 38162 38013 +3 37961 38074 38715 +3 37961 38715 38583 +3 37962 38584 38716 +3 37962 38716 38075 +3 37963 37964 38689 +3 37963 38689 38660 +3 37964 38661 38689 +3 37965 38943 39641 +3 37965 39641 38740 +3 37966 38741 39642 +3 37966 39642 38944 +3 37967 37968 38175 +3 37967 38175 38130 +3 37968 38131 38175 +3 37969 39200 39549 +3 37969 39549 38338 +3 37970 38339 39550 +3 37970 39550 39201 +3 37971 38284 39643 +3 37971 39643 39364 +3 37972 39365 39644 +3 37972 39644 38285 +3 37973 38603 39271 +3 37973 39271 38717 +3 37974 38718 39272 +3 37974 39272 38604 +3 37975 38121 38122 +3 37976 39800 39983 +3 37976 39983 38060 +3 37977 38061 39984 +3 37977 39984 39801 +3 37978 38649 38886 +3 37978 38886 38269 +3 37979 38270 38887 +3 37979 38887 38650 +3 37980 39389 40329 +3 37980 40329 38959 +3 37981 38960 40330 +3 37981 40330 39390 +3 37982 38845 39465 +3 37982 39465 38703 +3 37983 38704 39466 +3 37983 39466 38846 +3 37984 38386 38511 +3 37984 38511 38093 +3 37985 38094 38512 +3 37985 38512 38387 +3 37986 38691 39097 +3 37986 39097 38456 +3 37987 38457 39098 +3 37987 39098 38692 +3 37988 39059 40179 +3 37988 40179 39154 +3 37989 39155 40180 +3 37989 40180 39060 +3 37990 38316 38452 +3 37990 38452 38091 +3 37991 38092 38453 +3 37991 38453 38317 +3 37992 38145 38447 +3 37992 38447 38278 +3 37993 38279 38448 +3 37993 38448 38146 +3 37994 38997 39438 +3 37994 39438 38469 +3 37995 38470 39439 +3 37995 39439 38998 +3 37996 38331 39289 +3 37996 39289 38957 +3 37997 38958 39290 +3 37997 39290 38332 +3 37998 38326 38552 +3 37998 38552 38220 +3 37999 38221 38553 +3 37999 38553 38327 +3 38000 38245 38711 +3 38000 38711 38458 +3 38001 38459 38712 +3 38001 38712 38246 +3 38002 38198 39202 +3 38002 39202 39013 +3 38003 39014 39203 +3 38003 39203 38199 +3 38004 38136 38184 +3 38004 38184 38012 +3 38005 38013 38185 +3 38005 38185 38137 +3 38006 38171 38807 +3 38006 38807 38664 +3 38007 38665 38808 +3 38007 38808 38172 +3 38008 38040 38214 +3 38008 38214 38169 +3 38009 38170 38215 +3 38009 38215 38041 +3 38010 38792 39655 +3 38010 39655 38941 +3 38011 38942 39656 +3 38011 39656 38793 +3 38012 38184 38161 +3 38013 38162 38185 +3 38014 38873 39985 +3 38014 39985 39194 +3 38015 39195 39986 +3 38015 39986 38874 +3 38016 39261 39573 +3 38016 39573 38342 +3 38017 38343 39574 +3 38017 39574 39262 +3 38018 39154 40168 +3 38018 40168 39075 +3 38019 39076 40169 +3 38019 40169 39155 +3 38020 38176 38216 +3 38020 38216 38040 +3 38021 38041 38217 +3 38021 38217 38177 +3 38022 38656 39771 +3 38022 39771 39186 +3 38023 39189 39772 +3 38023 39772 38657 +3 38024 38487 38829 +3 38024 38829 38378 +3 38025 38379 38830 +3 38025 38830 38488 +3 38026 39422 40084 +3 38026 40084 38750 +3 38027 38751 40085 +3 38027 40085 39423 +3 38028 38372 39073 +3 38028 39073 38788 +3 38029 38789 39074 +3 38029 39074 38373 +3 38030 38717 39307 +3 38030 39307 38701 +3 38031 38702 39308 +3 38031 39308 38718 +3 38032 39035 39723 +3 38032 39723 38754 +3 38033 38755 39724 +3 38033 39724 39036 +3 38034 38701 39315 +3 38034 39315 38725 +3 38035 38726 39316 +3 38035 39316 38702 +3 38036 38505 40013 +3 38036 40013 39598 +3 38037 39599 40014 +3 38037 40014 38506 +3 38038 38639 40335 +3 38038 40335 39715 +3 38039 39716 40336 +3 38039 40336 38640 +3 38040 38216 38214 +3 38041 38215 38217 +3 38042 38871 40737 +3 38042 40737 39972 +3 38043 39973 40738 +3 38043 40738 38872 +3 38044 38501 40070 +3 38044 40070 39633 +3 38045 39634 40071 +3 38045 40071 38502 +3 38046 39302 40392 +3 38046 40392 40043 +3 38047 40044 40393 +3 38047 40393 39303 +3 38048 39238 40641 +3 38048 40641 39495 +3 38049 39496 40642 +3 38049 40642 39239 +3 38050 38130 38265 +3 38050 38265 38136 +3 38051 38137 38266 +3 38051 38266 38131 +3 38052 38774 38922 +3 38052 38922 38233 +3 38053 38234 38923 +3 38053 38923 38775 +3 38054 38416 39431 +3 38054 39431 39083 +3 38055 39084 39432 +3 38055 39432 38417 +3 38056 40125 40541 +3 38056 40541 38503 +3 38057 38504 40542 +3 38057 40542 40126 +3 38058 38696 39594 +3 38058 39594 39023 +3 38059 39024 39595 +3 38059 39595 38697 +3 38060 39983 40039 +3 38060 40039 38086 +3 38061 38086 40040 +3 38061 40040 39984 +3 38062 38675 38861 +3 38062 38861 38300 +3 38063 38301 38862 +3 38063 38862 38676 +3 38064 38483 38562 +3 38064 38562 38145 +3 38065 38146 38563 +3 38065 38563 38484 +3 38066 38571 38707 +3 38066 38707 38192 +3 38067 38193 38708 +3 38067 38708 38572 +3 38068 38169 38249 +3 38068 38249 38121 +3 38069 38122 38250 +3 38069 38250 38170 +3 38070 38581 39321 +3 38070 39321 38857 +3 38071 38858 39322 +3 38071 39322 38582 +3 38072 39745 40255 +3 38072 40255 38629 +3 38073 38630 40256 +3 38073 40256 39746 +3 38074 38251 38786 +3 38074 38786 38715 +3 38075 38716 38787 +3 38075 38787 38252 +3 38076 38426 38823 +3 38076 38823 38516 +3 38077 38517 38824 +3 38077 38824 38427 +3 38078 38310 38609 +3 38078 38609 38326 +3 38079 38327 38610 +3 38079 38610 38311 +3 38080 39747 40219 +3 38080 40219 38625 +3 38081 38626 40220 +3 38081 40220 39748 +3 38082 38161 38276 +3 38082 38276 38176 +3 38083 38177 38277 +3 38083 38277 38162 +3 38084 39005 39259 +3 38084 39259 38358 +3 38085 38359 39260 +3 38085 39260 39006 +3 38086 40039 40040 +3 38087 38928 39236 +3 38087 39236 38428 +3 38088 38429 39237 +3 38088 39237 38929 +3 38089 38477 39341 +3 38089 39341 38989 +3 38090 38990 39342 +3 38090 39342 38478 +3 38091 38452 38619 +3 38091 38619 38261 +3 38092 38262 38620 +3 38092 38620 38453 +3 38093 38511 38601 +3 38093 38601 38202 +3 38094 38203 38602 +3 38094 38602 38512 +3 38095 39079 40816 +3 38095 40816 39950 +3 38096 39951 40817 +3 38096 40817 39080 +3 38097 38941 39729 +3 38097 39729 38935 +3 38098 38936 39730 +3 38098 39730 38942 +3 38099 39743 40808 +3 38099 40808 39302 +3 38100 39303 40809 +3 38100 40809 39744 +3 38101 38865 39228 +3 38101 39228 38475 +3 38102 38476 39229 +3 38102 39229 38866 +3 38103 38935 39733 +3 38103 39733 38943 +3 38104 38944 39734 +3 38104 39734 38936 +3 38105 38358 39443 +3 38105 39443 39240 +3 38106 39241 39444 +3 38106 39444 38359 +3 38107 39861 40193 +3 38107 40193 38499 +3 38108 38500 40194 +3 38108 40194 39862 +3 38109 39697 40237 +3 38109 40237 38764 +3 38110 38765 40238 +3 38110 40238 39698 +3 38111 38951 40547 +3 38111 40547 39775 +3 38112 39776 40548 +3 38112 40548 38952 +3 38113 38617 38851 +3 38113 38851 38382 +3 38114 38383 38852 +3 38114 38852 38618 +3 38115 38937 40699 +3 38115 40699 40183 +3 38116 40184 40700 +3 38116 40700 38938 +3 38117 38435 38945 +3 38117 38945 38679 +3 38118 38680 38946 +3 38118 38946 38436 +3 38119 38400 39172 +3 38119 39172 38916 +3 38120 38917 39173 +3 38120 39173 38401 +3 38121 38249 38273 +3 38121 38273 38122 +3 38122 38273 38250 +3 38123 38776 38971 +3 38123 38971 38356 +3 38124 38357 38972 +3 38124 38972 38777 +3 38125 38839 39969 +3 38125 39969 38840 +3 38126 39387 39889 +3 38126 39889 38709 +3 38127 38710 39890 +3 38127 39890 39388 +3 38128 38904 39569 +3 38128 39569 38894 +3 38129 38895 39570 +3 38129 39570 38905 +3 38130 38175 38302 +3 38130 38302 38265 +3 38131 38266 38303 +3 38131 38303 38175 +3 38132 39001 39337 +3 38132 39337 38320 +3 38133 38321 39338 +3 38133 39338 39002 +3 38134 38577 39134 +3 38134 39134 38736 +3 38135 38737 39135 +3 38135 39135 38578 +3 38136 38265 38304 +3 38136 38304 38184 +3 38137 38185 38305 +3 38137 38305 38266 +3 38138 38542 38794 +3 38138 38794 38543 +3 38139 38392 38795 +3 38139 38795 38532 +3 38140 38533 38796 +3 38140 38796 38393 +3 38141 38267 38677 +3 38141 38677 38524 +3 38142 38525 38678 +3 38142 38678 38268 +3 38143 39126 39335 +3 38143 39335 38368 +3 38144 38369 39336 +3 38144 39336 39127 +3 38145 38562 38447 +3 38146 38448 38563 +3 38147 38894 39579 +3 38147 39579 38845 +3 38148 38846 39580 +3 38148 39580 38895 +3 38149 38422 38615 +3 38149 38615 38316 +3 38150 38317 38616 +3 38150 38616 38423 +3 38151 38833 39584 +3 38151 39584 38904 +3 38152 38905 39585 +3 38152 39585 38834 +3 38153 39794 40455 +3 38153 40455 38867 +3 38154 38868 40456 +3 38154 40456 39795 +3 38155 38370 39170 +3 38155 39170 38953 +3 38156 38954 39171 +3 38156 39171 38371 +3 38157 40127 40794 +3 38157 40794 38910 +3 38158 38911 40795 +3 38158 40795 40128 +3 38159 38328 38621 +3 38159 38621 38422 +3 38160 38423 38622 +3 38160 38622 38328 +3 38161 38184 38314 +3 38161 38314 38276 +3 38162 38277 38315 +3 38162 38315 38185 +3 38163 38633 39291 +3 38163 39291 38837 +3 38164 38838 39292 +3 38164 39292 38634 +3 38165 38771 40041 +3 38165 40041 39463 +3 38166 39464 40042 +3 38166 40042 38772 +3 38167 38742 40705 +3 38167 40705 40177 +3 38168 40178 40706 +3 38168 40706 38743 +3 38169 38214 38306 +3 38169 38306 38249 +3 38170 38250 38307 +3 38170 38307 38215 +3 38171 38233 38875 +3 38171 38875 38807 +3 38172 38808 38876 +3 38172 38876 38234 +3 38173 38705 39009 +3 38173 39009 38497 +3 38174 38498 39010 +3 38174 39010 38706 +3 38175 38303 38302 +3 38176 38276 38322 +3 38176 38322 38216 +3 38177 38217 38323 +3 38177 38323 38277 +3 38178 38346 39798 +3 38178 39798 39621 +3 38179 39622 39799 +3 38179 39799 38347 +3 38180 39557 41079 +3 38180 41079 39809 +3 38181 39810 41080 +3 38181 41080 39560 +3 38182 38402 38884 +3 38182 38884 38699 +3 38183 38700 38885 +3 38183 38885 38403 +3 38184 38304 38314 +3 38185 38315 38305 +3 38186 38458 38892 +3 38186 38892 38637 +3 38187 38638 38893 +3 38187 38893 38459 +3 38188 38881 39295 +3 38188 39295 38607 +3 38189 38608 39296 +3 38189 39296 38881 +3 38190 38778 39110 +3 38190 39110 38558 +3 38191 38559 39111 +3 38191 39111 38779 +3 38192 38707 38782 +3 38192 38782 38253 +3 38193 38254 38783 +3 38193 38783 38708 +3 38194 38744 39753 +3 38194 39753 39222 +3 38195 39223 39754 +3 38195 39754 38745 +3 38196 38849 39065 +3 38196 39065 38410 +3 38197 38411 39066 +3 38197 39066 38850 +3 38198 38298 39317 +3 38198 39317 39202 +3 38199 39203 39318 +3 38199 39318 38299 +3 38200 38520 38713 +3 38200 38713 38386 +3 38201 38387 38714 +3 38201 38714 38521 +3 38202 38601 38654 +3 38202 38654 38230 +3 38203 38230 38655 +3 38203 38655 38602 +3 38204 39208 40465 +3 38204 40465 39491 +3 38205 39492 40466 +3 38205 40466 39209 +3 38206 38906 39095 +3 38206 39095 38404 +3 38207 38405 39096 +3 38207 39096 38907 +3 38208 39617 40780 +3 38208 40780 39413 +3 38209 39414 40781 +3 38209 40781 39618 +3 38210 38522 39293 +3 38210 39293 38979 +3 38211 38980 39294 +3 38211 39294 38523 +3 38212 39362 40150 +3 38212 40150 39047 +3 38213 39048 40151 +3 38213 40151 39363 +3 38214 38216 38344 +3 38214 38344 38306 +3 38215 38307 38345 +3 38215 38345 38217 +3 38216 38322 38344 +3 38217 38345 38323 +3 38218 39987 41045 +3 38218 41045 39379 +3 38219 39380 41046 +3 38219 41046 39988 +3 38220 38552 38727 +3 38220 38727 38366 +3 38221 38367 38728 +3 38221 38728 38553 +3 38222 38668 39467 +3 38222 39467 39037 +3 38223 39038 39468 +3 38223 39468 38669 +3 38224 39809 41103 +3 38224 41103 39625 +3 38225 39626 41104 +3 38225 41104 39810 +3 38226 39011 40765 +3 38226 40765 40017 +3 38227 40018 40766 +3 38227 40766 39012 +3 38228 38532 38847 +3 38228 38847 38542 +3 38229 38543 38848 +3 38229 38848 38533 +3 38230 38654 38655 +3 38231 39287 39623 +3 38231 39623 38564 +3 38232 38565 39624 +3 38232 39624 39288 +3 38233 38922 38875 +3 38234 38876 38923 +3 38235 39501 39866 +3 38236 39867 39502 +3 38237 39178 39487 +3 38237 39487 38567 +3 38238 38568 39488 +3 38238 39488 39179 +3 38239 39306 39927 +3 38239 39927 38843 +3 38240 38844 39928 +3 38240 39928 39306 +3 38241 38681 40461 +3 38241 40461 40059 +3 38242 40060 40462 +3 38242 40462 38682 +3 38243 38732 39699 +3 38243 39699 39218 +3 38244 39219 39700 +3 38244 39700 38733 +3 38245 38420 38869 +3 38245 38869 38711 +3 38246 38712 38870 +3 38246 38870 38421 +3 38247 40025 40784 +3 38247 40784 39057 +3 38248 39058 40785 +3 38248 40785 40026 +3 38249 38306 38374 +3 38249 38374 38273 +3 38250 38273 38375 +3 38250 38375 38307 +3 38251 38253 38799 +3 38251 38799 38786 +3 38252 38787 38800 +3 38252 38800 38254 +3 38253 38782 38799 +3 38254 38800 38783 +3 38255 39768 40553 +3 38255 40553 39049 +3 38256 39050 40554 +3 38256 40554 39768 +3 38257 38546 39182 +3 38257 39182 38898 +3 38258 38899 39183 +3 38258 39183 38547 +3 38259 40148 40623 +3 38259 40623 38758 +3 38260 38759 40624 +3 38260 40624 40149 +3 38261 38619 38729 +3 38261 38729 38350 +3 38262 38351 38730 +3 38262 38730 38620 +3 38263 38518 39248 +3 38263 39248 38967 +3 38264 38968 39249 +3 38264 39249 38519 +3 38265 38302 38406 +3 38265 38406 38304 +3 38266 38305 38407 +3 38266 38407 38303 +3 38267 38329 38748 +3 38267 38748 38677 +3 38268 38678 38749 +3 38268 38749 38330 +3 38269 38886 39089 +3 38269 39089 38388 +3 38270 38389 39090 +3 38270 39090 38887 +3 38271 38516 38863 +3 38271 38863 38631 +3 38272 38632 38864 +3 38272 38864 38517 +3 38273 38374 38375 +3 38274 39495 40798 +3 38274 40798 39639 +3 38275 39640 40799 +3 38275 40799 39496 +3 38276 38314 38412 +3 38276 38412 38322 +3 38277 38323 38413 +3 38277 38413 38315 +3 38278 38447 38723 +3 38278 38723 38520 +3 38279 38521 38724 +3 38279 38724 38448 +3 38280 38694 39273 +3 38280 39273 38882 +3 38281 38883 39274 +3 38281 39274 38695 +3 38282 38637 38991 +3 38282 38991 38617 +3 38283 38618 38992 +3 38283 38992 38638 +3 38284 38564 39903 +3 38284 39903 39643 +3 38285 39644 39904 +3 38285 39904 38565 +3 38286 39751 40072 +3 38286 40072 38666 +3 38287 38667 40073 +3 38287 40073 39752 +3 38288 38679 39085 +3 38288 39085 38760 +3 38289 38761 39086 +3 38289 39086 38680 +3 38290 38879 39246 +3 38290 39246 38673 +3 38291 38674 39247 +3 38291 39247 38880 +3 38292 39102 39687 +3 38292 39687 38853 +3 38293 38854 39688 +3 38293 39688 39103 +3 38294 38760 39116 +3 38294 39116 38705 +3 38295 38706 39117 +3 38295 39117 38761 +3 38296 39194 40223 +3 38296 40223 39393 +3 38297 39394 40224 +3 38297 40224 39195 +3 38298 38376 39401 +3 38298 39401 39317 +3 38299 39318 39402 +3 38299 39402 38377 +3 38300 38861 39192 +3 38300 39192 38649 +3 38301 38650 39193 +3 38301 39193 38862 +3 38302 38303 38434 +3 38302 38434 38406 +3 38303 38407 38434 +3 38304 38406 38437 +3 38304 38437 38314 +3 38305 38315 38438 +3 38305 38438 38407 +3 38306 38344 38430 +3 38306 38430 38374 +3 38307 38375 38431 +3 38307 38431 38345 +3 38308 38721 39957 +3 38308 39957 39582 +3 38309 39583 39958 +3 38309 39958 38722 +3 38310 38524 38811 +3 38310 38811 38609 +3 38311 38610 38812 +3 38311 38812 38525 +3 38312 39067 40953 +3 38312 40953 40297 +3 38313 40298 40954 +3 38313 40954 39068 +3 38314 38437 38412 +3 38315 38413 38438 +3 38316 38615 38756 +3 38316 38756 38452 +3 38317 38453 38757 +3 38317 38757 38616 +3 38318 38837 39436 +3 38318 39436 38930 +3 38319 38930 39437 +3 38319 39437 38838 +3 38320 39337 39483 +3 38320 39483 38454 +3 38321 38455 39484 +3 38321 39484 39338 +3 38322 38412 38439 +3 38322 38439 38344 +3 38323 38345 38440 +3 38323 38440 38413 +3 38324 38698 39099 +3 38324 39099 38778 +3 38325 38779 39100 +3 38325 39100 38698 +3 38326 38609 38817 +3 38326 38817 38552 +3 38327 38553 38818 +3 38327 38818 38610 +3 38328 38622 38770 +3 38328 38770 38621 +3 38329 38350 38784 +3 38329 38784 38748 +3 38330 38749 38785 +3 38330 38785 38351 +3 38331 38857 39558 +3 38331 39558 39289 +3 38332 39290 39559 +3 38332 39559 38858 +3 38333 38509 39737 +3 38333 39737 39537 +3 38334 39538 39738 +3 38334 39738 38510 +3 38335 39169 40769 +3 38335 40769 39168 +3 38336 39764 40725 +3 38336 40725 39333 +3 38337 39334 40726 +3 38337 40726 39765 +3 38338 39549 39839 +3 38338 39839 38658 +3 38339 38659 39840 +3 38339 39840 39550 +3 38340 38859 39399 +3 38340 39399 38879 +3 38341 38880 39400 +3 38341 39400 38860 +3 38342 39573 39831 +3 38342 39831 38803 +3 38343 38804 39832 +3 38343 39832 39574 +3 38344 38439 38430 +3 38345 38431 38440 +3 38346 38394 39941 +3 38346 39941 39798 +3 38347 39799 39942 +3 38347 39942 38395 +3 38348 39138 39600 +3 38348 39600 38797 +3 38349 38798 39601 +3 38349 39601 39139 +3 38350 38729 38784 +3 38351 38785 38730 +3 38352 38768 40023 +3 38352 40023 39627 +3 38353 39628 40024 +3 38353 40024 38769 +3 38354 38882 39409 +3 38354 39409 38859 +3 38355 38860 39410 +3 38355 39410 38883 +3 38356 38971 39124 +3 38356 39124 38487 +3 38357 38488 39125 +3 38357 39125 38972 +3 38358 39259 39443 +3 38359 39444 39260 +3 38360 39505 41001 +3 38360 41001 39935 +3 38361 39936 41002 +3 38361 41002 39506 +3 38362 39003 41129 +3 38362 41129 40567 +3 38363 40568 41130 +3 38363 41130 39004 +3 38364 38975 40873 +3 38364 40873 39821 +3 38365 39822 40874 +3 38365 40874 38976 +3 38366 38727 38819 +3 38366 38819 38483 +3 38367 38484 38820 +3 38367 38820 38728 +3 38368 39335 39511 +3 38368 39511 38594 +3 38369 38595 39512 +3 38369 39512 39336 +3 38370 38534 39325 +3 38370 39325 39170 +3 38371 39171 39326 +3 38371 39326 38535 +3 38372 38513 39377 +3 38372 39377 39073 +3 38373 39074 39378 +3 38373 39378 38514 +3 38374 38430 38449 +3 38374 38449 38375 +3 38375 38449 38431 +3 38376 38377 39430 +3 38376 39430 39401 +3 38377 39402 39430 +3 38378 38829 39120 +3 38378 39120 38675 +3 38379 38676 39121 +3 38379 39121 38830 +3 38380 39023 39879 +3 38380 39879 39531 +3 38381 39532 39880 +3 38381 39880 39024 +3 38382 38851 39041 +3 38382 39041 38571 +3 38383 38572 39042 +3 38383 39042 38852 +3 38384 38999 40503 +3 38384 40503 39897 +3 38385 39898 40504 +3 38385 40504 39000 +3 38386 38713 38827 +3 38386 38827 38511 +3 38387 38512 38828 +3 38387 38828 38714 +3 38388 39089 39198 +3 38388 39198 38443 +3 38389 38444 39199 +3 38389 39199 39090 +3 38390 39657 40662 +3 38390 40662 39389 +3 38391 39390 40663 +3 38391 40663 39658 +3 38392 38583 38973 +3 38392 38973 38795 +3 38393 38796 38974 +3 38393 38974 38584 +3 38394 38395 39956 +3 38394 39956 39941 +3 38395 39942 39956 +3 38396 39843 40295 +3 38396 40295 39214 +3 38397 39215 40296 +3 38397 40296 39844 +3 38398 39031 41123 +3 38398 41123 40575 +3 38399 40576 41124 +3 38399 41124 39032 +3 38400 38594 39375 +3 38400 39375 39172 +3 38401 39173 39376 +3 38401 39376 38595 +3 38402 38569 39053 +3 38402 39053 38884 +3 38403 38885 39054 +3 38403 39054 38570 +3 38404 39095 39269 +3 38404 39269 38534 +3 38405 38535 39270 +3 38405 39270 39096 +3 38406 38434 38481 +3 38406 38481 38437 +3 38407 38438 38482 +3 38407 38482 38434 +3 38408 39128 40158 +3 38408 40158 39440 +3 38409 39441 40159 +3 38409 40159 39129 +3 38410 39065 39251 +3 38410 39251 38560 +3 38411 38561 39252 +3 38411 39252 39066 +3 38412 38437 38485 +3 38412 38485 38439 +3 38413 38440 38486 +3 38413 38486 38438 +3 38414 39244 40495 +3 38414 40495 39711 +3 38415 39712 40496 +3 38415 40496 39245 +3 38416 38762 39766 +3 38416 39766 39431 +3 38417 39432 39767 +3 38417 39767 38763 +3 38418 40199 40841 +3 38418 40841 39104 +3 38419 39105 40842 +3 38419 40842 40200 +3 38420 38544 39021 +3 38420 39021 38869 +3 38421 38870 39022 +3 38421 39022 38545 +3 38422 38621 38815 +3 38422 38815 38615 +3 38423 38616 38816 +3 38423 38816 38622 +3 38424 39391 39789 +3 38424 39789 38801 +3 38425 38802 39790 +3 38425 39790 39392 +3 38426 38699 39087 +3 38426 39087 38823 +3 38427 38824 39088 +3 38427 39088 38700 +3 38428 39236 39485 +3 38428 39485 38691 +3 38429 38692 39486 +3 38429 39486 39237 +3 38430 38439 38491 +3 38430 38491 38449 +3 38431 38449 38492 +3 38431 38492 38440 +3 38432 39963 40633 +3 38432 40633 39091 +3 38433 39092 40634 +3 38433 40634 39964 +3 38434 38482 38481 +3 38435 38664 39184 +3 38435 39184 38945 +3 38436 38946 39185 +3 38436 39185 38665 +3 38437 38481 38485 +3 38438 38486 38482 +3 38439 38485 38491 +3 38440 38492 38486 +3 38441 39499 39945 +3 38441 39945 38841 +3 38442 38842 39946 +3 38442 39946 39500 +3 38443 39198 39253 +3 38443 39253 38466 +3 38444 38466 39254 +3 38444 39254 39199 +3 38445 39639 40864 +3 38445 40864 39617 +3 38446 39618 40865 +3 38446 40865 39640 +3 38447 38562 38821 +3 38447 38821 38723 +3 38448 38724 38822 +3 38448 38822 38563 +3 38449 38491 38492 +3 38450 40061 40949 +3 38450 40949 39426 +3 38451 39427 40950 +3 38451 40950 40062 +3 38452 38756 38890 +3 38452 38890 38619 +3 38453 38620 38891 +3 38453 38891 38757 +3 38454 39483 39588 +3 38454 39588 38540 +3 38455 38541 39589 +3 38455 39589 39484 +3 38456 39097 39553 +3 38456 39553 38865 +3 38457 38866 39554 +3 38457 39554 39098 +3 38458 38711 39136 +3 38458 39136 38892 +3 38459 38893 39137 +3 38459 39137 38712 +3 38460 40142 40792 +3 38460 40792 39166 +3 38461 39167 40793 +3 38461 40793 40143 +3 38462 39519 40396 +3 38462 40396 39362 +3 38463 39363 40397 +3 38463 40397 39520 +3 38464 39491 40709 +3 38464 40709 39707 +3 38465 39708 40710 +3 38465 40710 39492 +3 38466 39253 39254 +3 38467 38556 40525 +3 38467 40525 40339 +3 38468 40340 40526 +3 38468 40526 38557 +3 38469 39438 40047 +3 38469 40047 39027 +3 38470 39028 40048 +3 38470 40048 39439 +3 38471 39350 39803 +3 38471 39803 38888 +3 38472 38889 39804 +3 38472 39804 39351 +3 38473 39919 40592 +3 38473 40592 39142 +3 38474 39143 40593 +3 38474 40593 39920 +3 38475 39228 39529 +3 38475 39529 38780 +3 38476 38781 39530 +3 38476 39530 39229 +3 38477 38790 39649 +3 38477 39649 39341 +3 38478 39342 39650 +3 38478 39650 38791 +3 38479 39755 40245 +3 38479 40245 38987 +3 38480 38988 40246 +3 38480 40246 39756 +3 38481 38482 38515 +3 38481 38515 38485 +3 38482 38486 38515 +3 38483 38819 38902 +3 38483 38902 38562 +3 38484 38563 38903 +3 38484 38903 38820 +3 38485 38515 38491 +3 38486 38492 38515 +3 38487 39124 39242 +3 38487 39242 38829 +3 38488 38830 39243 +3 38488 39243 39125 +3 38489 39393 40394 +3 38489 40394 39503 +3 38490 39504 40395 +3 38490 40395 39394 +3 38491 38515 38492 +3 38493 38926 40977 +3 38493 40977 40619 +3 38494 40620 40978 +3 38494 40978 38927 +3 38495 40473 41209 +3 38495 41209 39319 +3 38496 39320 41210 +3 38496 41210 40474 +3 38497 39009 39281 +3 38497 39281 38776 +3 38498 38777 39282 +3 38498 39282 39010 +3 38499 40193 40491 +3 38499 40491 38809 +3 38500 38810 40492 +3 38500 40492 40194 +3 38501 39069 40420 +3 38501 40420 40070 +3 38502 40071 40421 +3 38502 40421 39070 +3 38503 40541 40862 +3 38503 40862 39781 +3 38504 39782 40863 +3 38504 40863 40542 +3 38505 38896 40414 +3 38505 40414 40013 +3 38506 40014 40415 +3 38506 40415 38897 +3 38507 39374 39883 +3 38507 39883 38997 +3 38508 38998 39884 +3 38508 39884 39374 +3 38509 38627 39851 +3 38509 39851 39737 +3 38510 39738 39852 +3 38510 39852 38628 +3 38511 38827 38939 +3 38511 38939 38601 +3 38512 38602 38940 +3 38512 38940 38828 +3 38513 38611 39481 +3 38513 39481 39377 +3 38514 39378 39482 +3 38514 39482 38612 +3 38516 38823 39206 +3 38516 39206 38863 +3 38517 38864 39207 +3 38517 39207 38824 +3 38518 38736 39453 +3 38518 39453 39248 +3 38519 39249 39454 +3 38519 39454 38737 +3 38520 38723 38900 +3 38520 38900 38713 +3 38521 38714 38901 +3 38521 38901 38724 +3 38522 38734 39515 +3 38522 39515 39293 +3 38523 39294 39516 +3 38523 39516 38735 +3 38524 38677 38961 +3 38524 38961 38811 +3 38525 38812 38962 +3 38525 38962 38678 +3 38526 40009 41137 +3 38526 41137 39743 +3 38527 39744 41138 +3 38527 41138 40010 +3 38528 39507 40257 +3 38528 40257 39287 +3 38529 39288 40258 +3 38529 40258 39508 +3 38530 39521 40885 +3 38530 40885 39967 +3 38531 39968 40886 +3 38531 40886 39522 +3 38532 38795 39132 +3 38532 39132 38847 +3 38533 38848 39133 +3 38533 39133 38796 +3 38534 39269 39325 +3 38535 39326 39270 +3 38536 39891 40371 +3 38536 40371 39007 +3 38537 39008 40372 +3 38537 40372 39892 +3 38538 39847 40305 +3 38538 40305 38965 +3 38539 38966 40306 +3 38539 40306 39848 +3 38540 39588 39631 +3 38540 39631 38566 +3 38541 38566 39632 +3 38541 39632 39589 +3 38542 38847 39118 +3 38542 39118 38794 +3 38543 38794 39119 +3 38543 39119 38848 +3 38544 38631 39112 +3 38544 39112 39021 +3 38545 39022 39113 +3 38545 39113 38632 +3 38546 38788 39415 +3 38546 39415 39182 +3 38547 39183 39416 +3 38547 39416 38789 +3 38548 39146 40563 +3 38548 40563 39981 +3 38549 39982 40564 +3 38549 40564 39147 +3 38550 40241 40843 +3 38550 40843 39114 +3 38551 39115 40844 +3 38551 40844 40242 +3 38552 38817 38985 +3 38552 38985 38727 +3 38553 38728 38986 +3 38553 38986 38818 +3 38554 39503 40390 +3 38554 40390 39519 +3 38555 39520 40391 +3 38555 40391 39504 +3 38556 38591 40569 +3 38556 40569 40525 +3 38557 40526 40570 +3 38557 40570 38591 +3 38558 39110 39424 +3 38558 39424 38849 +3 38559 38850 39425 +3 38559 39425 39111 +3 38560 39251 39360 +3 38560 39360 38774 +3 38561 38775 39361 +3 38561 39361 39252 +3 38562 38902 38821 +3 38563 38822 38903 +3 38564 39623 39903 +3 38565 39904 39624 +3 38566 39631 39632 +3 38567 39487 39725 +3 38567 39725 38855 +3 38568 38856 39726 +3 38568 39726 39488 +3 38569 38660 39180 +3 38569 39180 39053 +3 38570 39054 39181 +3 38570 39181 38661 +3 38571 39041 39216 +3 38571 39216 38707 +3 38572 38708 39217 +3 38572 39217 39042 +3 38573 39263 39663 +3 38573 39663 38928 +3 38574 38929 39664 +3 38574 39664 39264 +3 38575 39265 40695 +3 38575 40695 39993 +3 38576 39994 40696 +3 38576 40696 39266 +3 38577 38898 39477 +3 38577 39477 39134 +3 38578 39135 39478 +3 38578 39478 38899 +3 38579 40436 41323 +3 38579 41323 39565 +3 38580 39566 41324 +3 38580 41324 40437 +3 38581 38989 39773 +3 38581 39773 39321 +3 38582 39322 39774 +3 38582 39774 38990 +3 38583 38715 39130 +3 38583 39130 38973 +3 38584 38974 39131 +3 38584 39131 38716 +3 38585 39781 41312 +3 38585 41312 40205 +3 38586 40206 41313 +3 38586 41313 39782 +3 38587 38877 39825 +3 38587 39825 39469 +3 38588 39470 39826 +3 38588 39826 38878 +3 38589 39757 40786 +3 38589 40786 39657 +3 38590 39658 40787 +3 38590 40787 39758 +3 38591 40570 40569 +3 38592 39148 40533 +3 38592 40533 39959 +3 38593 39960 40534 +3 38593 40534 39149 +3 38594 39511 39375 +3 38595 39376 39512 +3 38596 39037 39791 +3 38596 39791 39038 +3 38597 40697 41159 +3 38597 41159 39383 +3 38598 39384 41160 +3 38598 41160 40698 +3 38599 39331 41270 +3 38599 41270 40621 +3 38600 40622 41271 +3 38600 41271 39332 +3 38601 38939 38993 +3 38601 38993 38654 +3 38602 38655 38994 +3 38602 38994 38940 +3 38603 38916 39637 +3 38603 39637 39271 +3 38604 39272 39638 +3 38604 39638 38917 +3 38605 39707 40782 +3 38605 40782 39757 +3 38606 39758 40783 +3 38606 40783 39708 +3 38607 39295 39855 +3 38607 39855 39138 +3 38608 39139 39856 +3 38608 39856 39296 +3 38609 38811 39033 +3 38609 39033 38817 +3 38610 38818 39034 +3 38610 39034 38812 +3 38611 38670 39555 +3 38611 39555 39481 +3 38612 39482 39556 +3 38612 39556 38671 +3 38613 38957 39817 +3 38613 39817 39434 +3 38614 39435 39818 +3 38614 39818 38958 +3 38615 38815 38963 +3 38615 38963 38756 +3 38616 38757 38964 +3 38616 38964 38816 +3 38617 38991 39267 +3 38617 39267 38851 +3 38618 38852 39268 +3 38618 39268 38992 +3 38619 38890 39016 +3 38619 39016 38729 +3 38620 38730 39017 +3 38620 39017 38891 +3 38621 38770 38981 +3 38621 38981 38815 +3 38622 38816 38982 +3 38622 38982 38770 +3 38623 40685 41165 +3 38623 41165 39174 +3 38624 39175 41166 +3 38624 41166 40686 +3 38625 40219 40664 +3 38625 40664 39055 +3 38626 39056 40665 +3 38626 40665 40220 +3 38627 38653 39925 +3 38627 39925 39851 +3 38628 39852 39926 +3 38628 39926 38653 +3 38629 40255 40719 +3 38629 40719 39051 +3 38630 39052 40720 +3 38630 40720 40256 +3 38631 38863 39187 +3 38631 39187 39112 +3 38632 39113 39188 +3 38632 39188 38864 +3 38633 38979 39675 +3 38633 39675 39291 +3 38634 39292 39676 +3 38634 39676 38980 +3 38635 39150 40826 +3 38635 40826 40333 +3 38636 40334 40827 +3 38636 40827 39151 +3 38637 38892 39279 +3 38637 39279 38991 +3 38638 38992 39280 +3 38638 39280 38893 +3 38639 39144 40790 +3 38639 40790 40335 +3 38640 40336 40791 +3 38640 40791 39145 +3 38641 39819 40235 +3 38641 40235 39035 +3 38642 39036 40236 +3 38642 40236 39820 +3 38643 39347 40929 +3 38643 40929 40319 +3 38644 40320 40930 +3 38644 40930 39348 +3 38645 40331 41083 +3 38645 41083 39457 +3 38646 39458 41084 +3 38646 41084 40332 +3 38647 39821 41525 +3 38647 41525 40467 +3 38648 40468 41526 +3 38648 41526 39822 +3 38649 39192 39449 +3 38649 39449 38886 +3 38650 38887 39450 +3 38650 39450 39193 +3 38651 39829 40679 +3 38651 40679 39501 +3 38652 39502 40680 +3 38652 40680 39830 +3 38653 39926 39925 +3 38654 38993 39015 +3 38654 39015 38655 +3 38655 39015 38994 +3 38656 39152 40293 +3 38656 40293 39771 +3 38657 39772 40294 +3 38657 40294 39153 +3 38658 39839 40080 +3 38658 40080 38920 +3 38659 38921 40081 +3 38659 40081 39840 +3 38660 38689 39234 +3 38660 39234 39180 +3 38661 39181 39235 +3 38661 39235 38689 +3 38662 39343 40386 +3 38662 40386 39667 +3 38663 39668 40387 +3 38663 40387 39344 +3 38664 38807 39352 +3 38664 39352 39184 +3 38665 39185 39353 +3 38665 39353 38808 +3 38666 40072 40384 +3 38666 40384 38947 +3 38667 38948 40385 +3 38667 40385 40073 +3 38668 39218 40053 +3 38668 40053 39467 +3 38669 39468 40054 +3 38669 40054 39219 +3 38670 38671 39581 +3 38670 39581 39555 +3 38671 39556 39581 +3 38672 39222 40131 +3 38672 40131 39223 +3 38673 39246 39547 +3 38673 39547 38906 +3 38674 38907 39548 +3 38674 39548 39247 +3 38675 39120 39368 +3 38675 39368 38861 +3 38676 38862 39369 +3 38676 39369 39121 +3 38677 38748 39061 +3 38677 39061 38961 +3 38678 38962 39062 +3 38678 39062 38749 +3 38679 38945 39407 +3 38679 39407 39085 +3 38680 39086 39408 +3 38680 39408 38946 +3 38681 39025 40776 +3 38681 40776 40461 +3 38682 40462 40777 +3 38682 40777 39026 +3 38683 39277 40804 +3 38683 40804 40259 +3 38684 40260 40805 +3 38684 40805 39278 +3 38685 39497 41253 +3 38685 41253 40507 +3 38686 40508 41254 +3 38686 41254 39498 +3 38687 40527 41242 +3 38687 41242 39459 +3 38688 39460 41243 +3 38688 41243 40528 +3 38689 39235 39234 +3 38690 39935 41304 +3 38690 41304 40123 +3 38691 39485 39727 +3 38691 39727 39097 +3 38692 39098 39728 +3 38692 39728 39486 +3 38693 40124 41305 +3 38693 41305 39936 +3 38694 38967 39606 +3 38694 39606 39273 +3 38695 39274 39607 +3 38695 39607 38968 +3 38696 39190 40119 +3 38696 40119 39594 +3 38697 39595 40120 +3 38697 40120 39191 +3 38698 39100 39421 +3 38698 39421 39099 +3 38699 38884 39327 +3 38699 39327 39087 +3 38700 39088 39328 +3 38700 39328 38885 +3 38701 39307 39887 +3 38701 39887 39315 +3 38702 39316 39888 +3 38702 39888 39308 +3 38703 39465 39807 +3 38703 39807 39005 +3 38704 39006 39808 +3 38704 39808 39466 +3 38705 39116 39455 +3 38705 39455 39009 +3 38706 39010 39456 +3 38706 39456 39117 +3 38707 39216 39304 +3 38707 39304 38782 +3 38708 38783 39305 +3 38708 39305 39217 +3 38709 39889 40505 +3 38709 40505 39298 +3 38710 39299 40506 +3 38710 40506 39890 +3 38711 38869 39323 +3 38711 39323 39136 +3 38712 39137 39324 +3 38712 39324 38870 +3 38713 38900 39063 +3 38713 39063 38827 +3 38714 38828 39064 +3 38714 39064 38901 +3 38715 38786 39232 +3 38715 39232 39130 +3 38716 39131 39233 +3 38716 39233 38787 +3 38717 39271 39901 +3 38717 39901 39307 +3 38718 39308 39902 +3 38718 39902 39272 +3 38719 39440 40440 +3 38719 40440 39695 +3 38720 39696 40441 +3 38720 40441 39441 +3 38721 39039 40337 +3 38721 40337 39957 +3 38722 39958 40338 +3 38722 40338 39040 +3 38723 38821 39045 +3 38723 39045 38900 +3 38724 38901 39046 +3 38724 39046 38822 +3 38725 39315 39913 +3 38725 39913 39263 +3 38726 39264 39914 +3 38726 39914 39316 +3 38727 38985 39106 +3 38727 39106 38819 +3 38728 38820 39107 +3 38728 39107 38986 +3 38729 39016 39071 +3 38729 39071 38784 +3 38730 38785 39072 +3 38730 39072 39017 +3 38731 39423 40600 +3 38731 40600 39422 +3 38732 39083 40092 +3 38732 40092 39699 +3 38733 39700 40093 +3 38733 40093 39084 +3 38734 38953 39693 +3 38734 39693 39515 +3 38735 39516 39694 +3 38735 39694 38954 +3 38736 39134 39592 +3 38736 39592 39453 +3 38737 39454 39593 +3 38737 39593 39135 +3 38738 39551 41041 +3 38738 41041 40287 +3 38739 40287 41042 +3 38739 41042 39552 +3 38740 39641 40291 +3 38740 40291 39391 +3 38741 39392 40292 +3 38741 40292 39642 +3 38742 39212 41119 +3 38742 41119 40705 +3 38743 40706 41120 +3 38743 41120 39213 +3 38744 39186 40211 +3 38744 40211 39753 +3 38745 39754 40212 +3 38745 40212 39189 +3 38746 40078 41007 +3 38746 41007 39764 +3 38747 39765 41008 +3 38747 41008 40079 +3 38748 38784 39108 +3 38748 39108 39061 +3 38749 39062 39109 +3 38749 39109 38785 +3 38750 40084 40689 +3 38750 40689 39311 +3 38751 39312 40690 +3 38751 40690 40085 +3 38752 39681 40463 +3 38752 40463 39507 +3 38753 39508 40464 +3 38753 40464 39682 +3 38754 39723 40343 +3 38754 40343 39329 +3 38755 39330 40344 +3 38755 40344 39724 +3 38756 38963 39156 +3 38756 39156 38890 +3 38757 38891 39157 +3 38757 39157 38964 +3 38758 40623 40963 +3 38758 40963 39164 +3 38759 39165 40964 +3 38759 40964 40624 +3 38760 39085 39575 +3 38760 39575 39116 +3 38761 39117 39576 +3 38761 39576 39086 +3 38762 39018 40045 +3 38762 40045 39766 +3 38763 39767 40046 +3 38763 40046 39019 +3 38764 40237 40438 +3 38764 40438 38912 +3 38765 38913 40439 +3 38765 40439 40238 +3 38766 40152 41341 +3 38766 41341 40009 +3 38767 40010 41342 +3 38767 41342 40153 +3 38768 39043 40373 +3 38768 40373 40023 +3 38769 40024 40374 +3 38769 40374 39044 +3 38770 38982 39101 +3 38770 39101 38981 +3 38771 39300 40559 +3 38771 40559 40041 +3 38772 40042 40562 +3 38772 40562 39301 +3 38773 39596 41237 +3 38773 41237 39597 +3 38774 39360 39539 +3 38774 39539 38922 +3 38775 38923 39540 +3 38775 39540 39361 +3 38776 39281 39533 +3 38776 39533 38971 +3 38777 38972 39534 +3 38777 39534 39282 +3 38778 39099 39493 +3 38778 39493 39110 +3 38779 39111 39494 +3 38779 39494 39100 +3 38780 39529 39769 +3 38780 39769 39001 +3 38781 39002 39770 +3 38781 39770 39530 +3 38782 39304 39356 +3 38782 39356 38799 +3 38783 38800 39357 +3 38783 39357 39305 +3 38784 39071 39108 +3 38785 39109 39072 +3 38786 38799 39354 +3 38786 39354 39232 +3 38787 39233 39355 +3 38787 39355 38800 +3 38788 39073 39762 +3 38788 39762 39415 +3 38789 39416 39763 +3 38789 39763 39074 +3 38790 39013 39921 +3 38790 39921 39649 +3 38791 39650 39922 +3 38791 39922 39014 +3 38792 39469 40345 +3 38792 40345 39655 +3 38793 39656 40346 +3 38793 40346 39470 +3 38794 39118 39349 +3 38794 39349 39119 +3 38795 38973 39345 +3 38795 39345 39132 +3 38796 39133 39346 +3 38796 39346 38974 +3 38797 39600 40005 +3 38797 40005 39178 +3 38798 39179 40006 +3 38798 40006 39601 +3 38799 39356 39354 +3 38800 39355 39357 +3 38801 39789 40121 +3 38801 40121 39102 +3 38802 39103 40122 +3 38802 40122 39790 +3 38803 39831 40027 +3 38803 40027 38969 +3 38804 38970 40028 +3 38804 40028 39832 +3 38805 40416 41513 +3 38805 41513 39987 +3 38806 39988 41514 +3 38806 41514 40417 +3 38807 38875 39461 +3 38807 39461 39352 +3 38808 39353 39462 +3 38808 39462 38876 +3 38809 40491 40115 +3 38810 40116 40492 +3 38811 38961 39220 +3 38811 39220 39033 +3 38812 39034 39221 +3 38812 39221 38962 +3 38813 39711 40812 +3 38813 40812 40011 +3 38814 40012 40813 +3 38814 40813 39712 +3 38815 38981 39176 +3 38815 39176 38963 +3 38816 38964 39177 +3 38816 39177 38982 +3 38817 39033 39226 +3 38817 39226 38985 +3 38818 38986 39227 +3 38818 39227 39034 +3 38819 39106 39210 +3 38819 39210 38902 +3 38820 38903 39211 +3 38820 39211 39107 +3 38821 38902 39160 +3 38821 39160 39045 +3 38822 39046 39161 +3 38822 39161 38903 +3 38823 39087 39473 +3 38823 39473 39206 +3 38824 39207 39474 +3 38824 39474 39088 +3 38825 39875 41248 +3 38825 41248 40317 +3 38826 40318 41249 +3 38826 41249 39876 +3 38827 39063 39204 +3 38827 39204 38939 +3 38828 38940 39205 +3 38828 39205 39064 +3 38829 39242 39561 +3 38829 39561 39120 +3 38830 39121 39562 +3 38830 39562 39243 +3 38831 39671 40515 +3 38831 40515 39681 +3 38832 39682 40516 +3 38832 40516 39672 +3 38833 39434 40191 +3 38833 40191 39584 +3 38834 39585 40192 +3 38834 40192 39435 +3 38835 39695 40523 +3 38835 40523 39671 +3 38836 39672 40524 +3 38836 40524 39696 +3 38837 39291 39911 +3 38837 39911 39436 +3 38838 39437 39912 +3 38838 39912 39292 +3 38839 39463 40596 +3 38839 40596 39969 +3 38840 39969 40597 +3 38840 40597 39464 +3 38841 39945 40289 +3 38841 40289 39200 +3 38842 39201 40290 +3 38842 40290 39946 +3 38843 39927 40477 +3 38843 40477 39387 +3 38844 39388 40478 +3 38844 40478 39928 +3 38845 39579 40197 +3 38845 40197 39465 +3 38846 39466 40198 +3 38846 40198 39580 +3 38847 39132 39428 +3 38847 39428 39118 +3 38848 39119 39429 +3 38848 39429 39133 +3 38849 39424 39691 +3 38849 39691 39065 +3 38850 39066 39692 +3 38850 39692 39425 +3 38851 39267 39479 +3 38851 39479 39041 +3 38852 39042 39480 +3 38852 39480 39268 +3 38853 39687 40175 +3 38853 40175 39350 +3 38854 39351 40176 +3 38854 40176 39688 +3 38855 39725 39974 +3 38855 39974 39126 +3 38856 39127 39975 +3 38856 39975 39726 +3 38857 39321 40033 +3 38857 40033 39558 +3 38858 39559 40034 +3 38858 40034 39322 +3 38859 39409 39885 +3 38859 39885 39399 +3 38860 39400 39886 +3 38860 39886 39410 +3 38861 39368 39731 +3 38861 39731 39192 +3 38862 39193 39732 +3 38862 39732 39369 +3 38863 39206 39527 +3 38863 39527 39187 +3 38864 39188 39528 +3 38864 39528 39207 +3 38865 39553 39929 +3 38865 39929 39228 +3 38866 39229 39930 +3 38866 39930 39554 +3 38867 40455 41013 +3 38867 41013 39509 +3 38868 39510 41014 +3 38868 41014 40456 +3 38869 39021 39475 +3 38869 39475 39323 +3 38870 39324 39476 +3 38870 39476 39022 +3 38871 39602 41393 +3 38871 41393 40737 +3 38872 40738 41394 +3 38872 41394 39603 +3 38873 39224 40358 +3 38873 40358 39985 +3 38874 39986 40359 +3 38874 40359 39225 +3 38875 38922 39543 +3 38875 39543 39461 +3 38876 39462 39544 +3 38876 39544 38923 +3 38877 39140 40098 +3 38877 40098 39825 +3 38878 39826 40099 +3 38878 40099 39141 +3 38879 39399 39787 +3 38879 39787 39246 +3 38880 39247 39788 +3 38880 39788 39400 +3 38881 39296 39949 +3 38881 39949 39295 +3 38882 39273 39815 +3 38882 39815 39409 +3 38883 39410 39816 +3 38883 39816 39274 +3 38884 39053 39517 +3 38884 39517 39327 +3 38885 39328 39518 +3 38885 39518 39054 +3 38886 39449 39705 +3 38886 39705 39089 +3 38887 39090 39706 +3 38887 39706 39450 +3 38888 39803 40187 +3 38888 40187 39261 +3 38889 39262 40188 +3 38889 40188 39804 +3 38890 39156 39285 +3 38890 39285 39016 +3 38891 39017 39286 +3 38891 39286 39157 +3 38892 39136 39535 +3 38892 39535 39279 +3 38893 39280 39536 +3 38893 39536 39137 +3 38894 39569 40247 +3 38894 40247 39579 +3 38895 39580 40248 +3 38895 40248 39570 +3 38896 39257 40759 +3 38896 40759 40414 +3 38897 40415 40760 +3 38897 40760 39258 +3 38898 39182 39783 +3 38898 39783 39477 +3 38899 39478 39784 +3 38899 39784 39183 +3 38900 39045 39255 +3 38900 39255 39063 +3 38901 39064 39256 +3 38901 39256 39046 +3 38902 39210 39160 +3 38903 39161 39211 +3 38904 39584 40261 +3 38904 40261 39569 +3 38905 39570 40262 +3 38905 40262 39585 +3 38906 39547 39777 +3 38906 39777 39095 +3 38907 39096 39778 +3 38907 39778 39548 +3 38908 39967 41223 +3 38908 41223 40239 +3 38909 40240 41224 +3 38909 41224 39968 +3 38910 40794 40969 +3 38910 40969 38983 +3 38911 38984 40970 +3 38911 40970 40795 +3 38912 40438 40555 +3 38912 40555 38949 +3 38913 38950 40556 +3 38913 40556 40439 +3 38914 39779 41659 +3 38914 41659 40913 +3 38915 40914 41660 +3 38915 41660 39780 +3 38916 39172 39933 +3 38916 39933 39637 +3 38917 39638 39934 +3 38917 39934 39173 +3 38918 40123 41407 +3 38918 41407 40152 +3 38919 40153 41408 +3 38919 41408 40124 +3 38920 40080 40311 +3 38920 40311 39140 +3 38921 39141 40312 +3 38921 40312 40081 +3 38922 39539 39543 +3 38923 39544 39540 +3 38924 40055 40883 +3 38924 40883 39829 +3 38925 39830 40884 +3 38925 40884 40056 +3 38926 40243 41347 +3 38926 41347 40977 +3 38927 40978 41348 +3 38927 41348 40244 +3 38928 39663 39991 +3 38928 39991 39236 +3 38929 39237 39992 +3 38929 39992 39664 +3 38930 39436 39802 +3 38930 39802 39437 +3 38931 39775 40851 +3 38931 40851 40430 +3 38932 40431 40852 +3 38932 40852 39776 +3 38933 39950 41488 +3 38933 41488 40585 +3 38934 40586 41489 +3 38934 41489 39951 +3 38935 39729 40428 +3 38935 40428 39733 +3 38936 39734 40429 +3 38936 40429 39730 +3 38937 39647 41325 +3 38937 41325 40699 +3 38938 40700 41326 +3 38938 41326 39648 +3 38939 39204 39283 +3 38939 39283 38993 +3 38940 38994 39284 +3 38940 39284 39205 +3 38941 39655 40447 +3 38941 40447 39729 +3 38942 39730 40448 +3 38942 40448 39656 +3 38943 39733 40457 +3 38943 40457 39641 +3 38944 39642 40458 +3 38944 40458 39734 +3 38945 39184 39669 +3 38945 39669 39407 +3 38946 39408 39670 +3 38946 39670 39185 +3 38947 40384 40638 +3 38947 40638 39224 +3 38948 39225 40639 +3 38948 40639 40385 +3 38949 40555 40591 +3 38949 40591 38950 +3 38950 40591 40556 +3 38951 39661 41191 +3 38951 41191 40547 +3 38952 40548 41192 +3 38952 41192 39662 +3 38953 39170 39905 +3 38953 39905 39693 +3 38954 39694 39906 +3 38954 39906 39171 +3 38955 40205 41627 +3 38955 41627 40521 +3 38956 40522 41628 +3 38956 41628 40206 +3 38957 39289 40140 +3 38957 40140 39817 +3 38958 39818 40141 +3 38958 40141 39290 +3 38959 40329 41111 +3 38959 41111 39843 +3 38960 39844 41112 +3 38960 41112 40330 +3 38961 39061 39339 +3 38961 39339 39220 +3 38962 39221 39340 +3 38962 39340 39062 +3 38963 39176 39366 +3 38963 39366 39156 +3 38964 39157 39367 +3 38964 39367 39177 +3 38965 40305 40707 +3 38965 40707 39370 +3 38966 39371 40708 +3 38966 40708 40306 +3 38967 39248 39907 +3 38967 39907 39606 +3 38968 39607 39908 +3 38968 39908 39249 +3 38969 40027 40170 +3 38969 40170 39077 +3 38970 39078 40171 +3 38970 40171 40028 +3 38971 39533 39721 +3 38971 39721 39124 +3 38972 39125 39722 +3 38972 39722 39534 +3 38973 39130 39525 +3 38973 39525 39345 +3 38974 39346 39526 +3 38974 39526 39131 +3 38975 40015 41795 +3 38975 41795 40873 +3 38976 40874 41796 +3 38976 41796 40016 +3 38977 40703 41791 +3 38977 41791 40243 +3 38978 40244 41792 +3 38978 41792 40704 +3 38979 39293 39999 +3 38979 39999 39675 +3 38980 39676 40000 +3 38980 40000 39294 +3 38981 39101 39309 +3 38981 39309 39176 +3 38982 39177 39310 +3 38982 39310 39101 +3 38983 40969 41019 +3 38983 41019 39020 +3 38984 39020 41020 +3 38984 41020 40970 +3 38985 39226 39358 +3 38985 39358 39106 +3 38986 39107 39359 +3 38986 39359 39227 +3 38987 40245 40459 +3 38987 40459 39162 +3 38988 39163 40460 +3 38988 40460 40246 +3 38989 39341 40138 +3 38989 40138 39773 +3 38990 39774 40139 +3 38990 40139 39342 +3 38991 39279 39608 +3 38991 39608 39267 +3 38992 39268 39609 +3 38992 39609 39280 +3 38993 39283 39313 +3 38993 39313 39015 +3 38994 39015 39314 +3 38994 39314 39284 +3 38995 40265 41255 +3 38995 41255 40078 +3 38996 40079 41256 +3 38996 41256 40266 +3 38997 39883 40347 +3 38997 40347 39438 +3 38998 39439 40348 +3 38998 40348 39884 +3 38999 39715 41157 +3 38999 41157 40503 +3 39000 40504 41158 +3 39000 41158 39716 +3 39001 39769 40117 +3 39001 40117 39337 +3 39002 39338 40118 +3 39002 40118 39770 +3 39003 39835 41625 +3 39003 41625 41129 +3 39004 41130 41626 +3 39004 41626 39836 +3 39005 39807 40088 +3 39005 40088 39259 +3 39006 39260 40089 +3 39006 40089 39808 +3 39007 40371 40761 +3 39007 40761 39405 +3 39008 39406 40762 +3 39008 40762 40372 +3 39009 39455 39760 +3 39009 39760 39281 +3 39010 39282 39761 +3 39010 39761 39456 +3 39011 39610 41395 +3 39011 41395 40765 +3 39012 40766 41396 +3 39012 41396 39611 +3 39013 39202 40273 +3 39013 40273 39921 +3 39014 39922 40274 +3 39014 40274 39203 +3 39015 39313 39314 +3 39016 39285 39381 +3 39016 39381 39071 +3 39017 39072 39382 +3 39017 39382 39286 +3 39018 39240 40271 +3 39018 40271 40045 +3 39019 40046 40272 +3 39019 40272 39241 +3 39020 41019 41020 +3 39021 39112 39590 +3 39021 39590 39475 +3 39022 39476 39591 +3 39022 39591 39113 +3 39023 39594 40475 +3 39023 40475 39879 +3 39024 39880 40476 +3 39024 40476 39595 +3 39025 39333 41059 +3 39025 41059 40776 +3 39026 40777 41060 +3 39026 41060 39334 +3 39027 40047 40543 +3 39027 40543 39499 +3 39028 39500 40544 +3 39028 40544 40048 +3 39029 40529 41458 +3 39029 41458 40061 +3 39030 40062 41459 +3 39030 41459 40530 +3 39031 39604 41633 +3 39031 41633 41123 +3 39032 41124 41634 +3 39032 41634 39605 +3 39033 39220 39397 +3 39033 39397 39226 +3 39034 39227 39398 +3 39034 39398 39221 +3 39035 40235 40605 +3 39035 40605 39723 +3 39036 39724 40606 +3 39036 40606 40236 +3 39037 39467 40227 +3 39037 40227 39791 +3 39038 39791 40228 +3 39038 40228 39468 +3 39039 39364 40649 +3 39039 40649 40337 +3 39040 40338 40650 +3 39040 40650 39365 +3 39041 39479 39677 +3 39041 39677 39216 +3 39042 39217 39678 +3 39042 39678 39480 +3 39043 39537 40635 +3 39043 40635 40373 +3 39044 40374 40636 +3 39044 40636 39538 +3 39045 39160 39385 +3 39045 39385 39255 +3 39046 39256 39386 +3 39046 39386 39161 +3 39047 40150 40879 +3 39047 40879 39819 +3 39048 39820 40880 +3 39048 40880 40151 +3 39049 40553 41217 +3 39049 41217 39794 +3 39050 39795 41218 +3 39050 41218 40554 +3 39051 40719 41009 +3 39051 41009 39697 +3 39052 39698 41010 +3 39052 41010 40720 +3 39053 39180 39635 +3 39053 39635 39517 +3 39054 39518 39636 +3 39054 39636 39181 +3 39055 40664 41005 +3 39055 41005 39471 +3 39056 39472 41006 +3 39056 41006 40665 +3 39057 40784 41454 +3 39057 41454 39823 +3 39058 39824 41455 +3 39058 41455 40785 +3 39059 40011 41057 +3 39059 41057 40179 +3 39060 40180 41058 +3 39060 41058 40012 +3 39061 39108 39411 +3 39061 39411 39339 +3 39062 39340 39412 +3 39062 39412 39109 +3 39063 39255 39403 +3 39063 39403 39204 +3 39064 39205 39404 +3 39064 39404 39256 +3 39065 39691 39881 +3 39065 39881 39251 +3 39066 39252 39882 +3 39066 39882 39692 +3 39067 39937 41724 +3 39067 41724 40953 +3 39068 40954 41725 +3 39068 41725 39938 +3 39069 39621 40905 +3 39069 40905 40420 +3 39070 40421 40906 +3 39070 40906 39622 +3 39071 39381 39419 +3 39071 39419 39108 +3 39072 39109 39420 +3 39072 39420 39382 +3 39073 39377 40049 +3 39073 40049 39762 +3 39074 39763 40050 +3 39074 40050 39378 +3 39075 40168 41049 +3 39075 41049 40055 +3 39076 40056 41050 +3 39076 41050 40169 +3 39077 40170 40253 +3 39077 40253 39158 +3 39078 39159 40254 +3 39078 40254 40171 +3 39079 39972 41593 +3 39079 41593 40816 +3 39080 40817 41594 +3 39080 41594 39973 +3 39081 40239 41397 +3 39081 41397 40349 +3 39082 40350 41398 +3 39082 41398 40240 +3 39083 39431 40453 +3 39083 40453 40092 +3 39084 40093 40454 +3 39084 40454 39432 +3 39085 39407 39923 +3 39085 39923 39575 +3 39086 39576 39924 +3 39086 39924 39408 +3 39087 39327 39739 +3 39087 39739 39473 +3 39088 39474 39740 +3 39088 39740 39328 +3 39089 39705 39868 +3 39089 39868 39198 +3 39090 39199 39869 +3 39090 39869 39706 +3 39091 40633 41180 +3 39091 41180 39745 +3 39092 39746 41181 +3 39092 41181 40634 +3 39093 40643 41809 +3 39093 41809 40416 +3 39094 40417 41810 +3 39094 41810 40644 +3 39095 39777 39954 +3 39095 39954 39269 +3 39096 39270 39955 +3 39096 39955 39778 +3 39097 39727 40154 +3 39097 40154 39553 +3 39098 39554 40155 +3 39098 40155 39728 +3 39099 39421 39841 +3 39099 39841 39493 +3 39100 39494 39842 +3 39100 39842 39421 +3 39101 39310 39433 +3 39101 39433 39309 +3 39102 40121 40408 +3 39102 40408 39687 +3 39103 39688 40409 +3 39103 40409 40122 +3 39104 40841 41401 +3 39104 41401 39673 +3 39105 39674 41402 +3 39105 41402 40842 +3 39106 39358 39451 +3 39106 39451 39210 +3 39107 39211 39452 +3 39107 39452 39359 +3 39108 39419 39411 +3 39109 39412 39420 +3 39110 39493 39837 +3 39110 39837 39424 +3 39111 39425 39838 +3 39111 39838 39494 +3 39112 39187 39679 +3 39112 39679 39590 +3 39113 39591 39680 +3 39113 39680 39188 +3 39114 40843 41367 +3 39114 41367 39659 +3 39115 39660 41368 +3 39115 41368 40844 +3 39116 39575 39947 +3 39116 39947 39455 +3 39117 39456 39948 +3 39117 39948 39576 +3 39118 39428 39703 +3 39118 39703 39349 +3 39119 39349 39704 +3 39119 39704 39429 +3 39120 39561 39805 +3 39120 39805 39368 +3 39121 39369 39806 +3 39121 39806 39562 +3 39122 40349 41391 +3 39122 41391 40265 +3 39123 40266 41392 +3 39123 41392 40350 +3 39124 39721 39845 +3 39124 39845 39242 +3 39125 39243 39846 +3 39125 39846 39722 +3 39126 39974 40195 +3 39126 40195 39335 +3 39127 39336 40196 +3 39127 40196 39975 +3 39128 39531 40583 +3 39128 40583 40158 +3 39129 40159 40584 +3 39129 40584 39532 +3 39130 39232 39629 +3 39130 39629 39525 +3 39131 39526 39630 +3 39131 39630 39233 +3 39132 39345 39689 +3 39132 39689 39428 +3 39133 39429 39690 +3 39133 39690 39346 +3 39134 39477 39978 +3 39134 39978 39592 +3 39135 39593 39979 +3 39135 39979 39478 +3 39136 39323 39749 +3 39136 39749 39535 +3 39137 39536 39750 +3 39137 39750 39324 +3 39138 39855 40354 +3 39138 40354 39600 +3 39139 39601 40355 +3 39139 40355 39856 +3 39140 40311 40098 +3 39141 40099 40312 +3 39142 40592 41141 +3 39142 41141 39747 +3 39143 39748 41142 +3 39143 41142 40593 +3 39144 39614 41225 +3 39144 41225 40790 +3 39145 40791 41226 +3 39145 41226 39615 +3 39146 39633 40997 +3 39146 40997 40563 +3 39147 40564 40998 +3 39147 40998 39634 +3 39148 39598 40951 +3 39148 40951 40533 +3 39149 40534 40952 +3 39149 40952 39599 +3 39150 39612 41272 +3 39150 41272 40826 +3 39151 40827 41273 +3 39151 41273 39613 +3 39152 39582 40731 +3 39152 40731 40293 +3 39153 40294 40732 +3 39153 40732 39583 +3 39154 40179 41035 +3 39154 41035 40168 +3 39155 40169 41036 +3 39155 41036 40180 +3 39156 39366 39513 +3 39156 39513 39285 +3 39157 39286 39514 +3 39157 39514 39367 +3 39158 40253 40288 +3 39158 40288 39159 +3 39159 40288 40254 +3 39160 39210 39447 +3 39160 39447 39385 +3 39161 39386 39448 +3 39161 39448 39211 +3 39162 40459 40581 +3 39162 40581 39275 +3 39163 39276 40582 +3 39163 40582 40460 +3 39164 40963 41333 +3 39164 41333 39545 +3 39165 39546 41334 +3 39165 41334 40964 +3 39166 40792 41385 +3 39166 41385 39800 +3 39167 39801 41386 +3 39167 41386 40793 +3 39168 40769 41548 +3 39168 41548 40025 +3 39169 40026 41549 +3 39169 41549 40769 +3 39170 39325 40074 +3 39170 40074 39905 +3 39171 39906 40075 +3 39171 40075 39326 +3 39172 39375 40136 +3 39172 40136 39933 +3 39173 39934 40137 +3 39173 40137 39376 +3 39174 41165 41599 +3 39174 41599 39683 +3 39175 39684 41600 +3 39175 41600 41166 +3 39176 39309 39541 +3 39176 39541 39366 +3 39177 39367 39542 +3 39177 39542 39310 +3 39178 40005 40362 +3 39178 40362 39487 +3 39179 39488 40363 +3 39179 40363 40006 +3 39180 39234 39741 +3 39180 39741 39635 +3 39181 39636 39742 +3 39181 39742 39235 +3 39182 39415 40019 +3 39182 40019 39783 +3 39183 39784 40020 +3 39183 40020 39416 +3 39184 39352 39870 +3 39184 39870 39669 +3 39185 39670 39871 +3 39185 39871 39353 +3 39186 39771 40820 +3 39186 40820 40211 +3 39187 39527 39679 +3 39188 39680 39528 +3 39189 40212 40821 +3 39189 40821 39772 +3 39190 39627 40611 +3 39190 40611 40119 +3 39191 40120 40612 +3 39191 40612 39628 +3 39192 39731 39989 +3 39192 39989 39449 +3 39193 39450 39990 +3 39193 39990 39732 +3 39194 39985 40959 +3 39194 40959 40223 +3 39195 40224 40960 +3 39195 40960 39986 +3 39196 40521 41858 +3 39196 41858 40666 +3 39197 40667 41859 +3 39197 41859 40522 +3 39198 39868 39961 +3 39198 39961 39253 +3 39199 39254 39962 +3 39199 39962 39869 +3 39200 40289 40651 +3 39200 40651 39549 +3 39201 39550 40652 +3 39201 40652 40290 +3 39202 39317 40442 +3 39202 40442 40273 +3 39203 40274 40443 +3 39203 40443 39318 +3 39204 39403 39523 +3 39204 39523 39283 +3 39205 39284 39524 +3 39205 39524 39404 +3 39206 39473 39813 +3 39206 39813 39527 +3 39207 39528 39814 +3 39207 39814 39474 +3 39208 40115 41276 +3 39208 41276 40465 +3 39209 40466 41277 +3 39209 41277 40116 +3 39210 39451 39447 +3 39211 39448 39452 +3 39212 39645 41508 +3 39212 41508 41119 +3 39213 41120 41509 +3 39213 41509 39646 +3 39214 40295 40973 +3 39214 40973 39963 +3 39215 39964 40974 +3 39215 40974 40296 +3 39216 39677 39796 +3 39216 39796 39304 +3 39217 39305 39797 +3 39217 39797 39678 +3 39218 39699 40565 +3 39218 40565 40053 +3 39219 40054 40566 +3 39219 40566 39700 +3 39220 39339 39563 +3 39220 39563 39397 +3 39221 39398 39564 +3 39221 39564 39340 +3 39222 39753 40683 +3 39222 40683 40131 +3 39223 40131 40684 +3 39223 40684 39754 +3 39224 40638 40358 +3 39225 40359 40639 +3 39226 39397 39567 +3 39226 39567 39358 +3 39227 39359 39568 +3 39227 39568 39398 +3 39228 39929 40207 +3 39228 40207 39529 +3 39229 39530 40208 +3 39229 40208 39930 +3 39230 40467 42023 +3 39230 42023 40860 +3 39231 40861 42024 +3 39231 42024 40468 +3 39232 39354 39785 +3 39232 39785 39629 +3 39233 39630 39786 +3 39233 39786 39355 +3 39234 39235 39759 +3 39234 39759 39741 +3 39235 39742 39759 +3 39236 39991 40281 +3 39236 40281 39485 +3 39237 39486 40282 +3 39237 40282 39992 +3 39238 40317 41584 +3 39238 41584 40641 +3 39239 40642 41585 +3 39239 41585 40318 +3 39240 39443 40471 +3 39240 40471 40271 +3 39241 40272 40472 +3 39241 40472 39444 +3 39242 39845 39943 +3 39242 39943 39561 +3 39243 39562 39944 +3 39243 39944 39846 +3 39244 39667 40895 +3 39244 40895 40495 +3 39245 40496 40896 +3 39245 40896 39668 +3 39246 39787 40106 +3 39246 40106 39547 +3 39247 39548 40107 +3 39247 40107 39788 +3 39248 39453 40132 +3 39248 40132 39907 +3 39249 39908 40133 +3 39249 40133 39454 +3 39250 39993 41175 +3 39250 41175 39994 +3 39251 39881 40007 +3 39251 40007 39360 +3 39252 39361 40008 +3 39252 40008 39882 +3 39253 39961 39980 +3 39253 39980 39254 +3 39254 39980 39962 +3 39255 39385 39571 +3 39255 39571 39403 +3 39256 39404 39572 +3 39256 39572 39386 +3 39257 39577 41017 +3 39257 41017 40759 +3 39258 40760 41018 +3 39258 41018 39578 +3 39259 40088 40313 +3 39259 40313 39443 +3 39260 39444 40314 +3 39260 40314 40089 +3 39261 40187 40531 +3 39261 40531 39573 +3 39262 39574 40532 +3 39262 40532 40188 +3 39263 39913 40327 +3 39263 40327 39663 +3 39264 39664 40328 +3 39264 40328 39914 +3 39265 39897 41246 +3 39265 41246 40695 +3 39266 40696 41247 +3 39266 41247 39898 +3 39267 39608 39859 +3 39267 39859 39479 +3 39268 39480 39860 +3 39268 39860 39609 +3 39269 39954 40037 +3 39269 40037 39325 +3 39270 39326 40038 +3 39270 40038 39955 +3 39271 39637 40279 +3 39271 40279 39901 +3 39272 39902 40280 +3 39272 40280 39638 +3 39273 39606 40173 +3 39273 40173 39815 +3 39274 39816 40174 +3 39274 40174 39607 +3 39275 40581 40655 +3 39275 40655 39297 +3 39276 39297 40656 +3 39276 40656 40582 +3 39277 39445 40979 +3 39277 40979 40804 +3 39278 40805 40980 +3 39278 40980 39446 +3 39279 39535 39872 +3 39279 39872 39608 +3 39280 39609 39873 +3 39280 39873 39536 +3 39281 39760 40003 +3 39281 40003 39533 +3 39282 39534 40004 +3 39282 40004 39761 +3 39283 39523 39586 +3 39283 39586 39313 +3 39284 39314 39587 +3 39284 39587 39524 +3 39285 39513 39619 +3 39285 39619 39381 +3 39286 39382 39620 +3 39286 39620 39514 +3 39287 40257 40629 +3 39287 40629 39623 +3 39288 39624 40630 +3 39288 40630 40258 +3 39289 39558 40445 +3 39289 40445 40140 +3 39290 40141 40446 +3 39290 40446 39559 +3 39291 39675 40301 +3 39291 40301 39911 +3 39292 39912 40302 +3 39292 40302 39676 +3 39293 39515 40251 +3 39293 40251 39999 +3 39294 40000 40252 +3 39294 40252 39516 +3 39295 39949 40499 +3 39295 40499 39855 +3 39296 39856 40500 +3 39296 40500 39949 +3 39297 40655 40656 +3 39298 40505 40983 +3 39298 40983 39847 +3 39299 39848 40984 +3 39299 40984 40506 +3 39300 39959 41161 +3 39300 41161 40559 +3 39301 40562 41162 +3 39301 41162 39960 +3 39302 40808 41781 +3 39302 41781 40392 +3 39303 40393 41782 +3 39303 41782 40809 +3 39304 39796 39877 +3 39304 39877 39356 +3 39305 39357 39878 +3 39305 39878 39797 +3 39306 39928 40840 +3 39306 40840 39927 +3 39307 39901 40469 +3 39307 40469 39887 +3 39308 39888 40470 +3 39308 40470 39902 +3 39309 39433 39651 +3 39309 39651 39541 +3 39310 39542 39652 +3 39310 39652 39433 +3 39311 40689 41178 +3 39311 41178 39919 +3 39312 39920 41179 +3 39312 41179 40690 +3 39313 39586 39616 +3 39313 39616 39314 +3 39314 39616 39587 +3 39315 39887 40479 +3 39315 40479 39913 +3 39316 39914 40480 +3 39316 40480 39888 +3 39317 39401 40539 +3 39317 40539 40442 +3 39318 40443 40540 +3 39318 40540 39402 +3 39319 41209 41904 +3 39319 41904 40086 +3 39320 40087 41905 +3 39320 41905 41210 +3 39321 39773 40509 +3 39321 40509 40033 +3 39322 40034 40510 +3 39322 40510 39774 +3 39323 39475 39917 +3 39323 39917 39749 +3 39324 39750 39918 +3 39324 39918 39476 +3 39325 40037 40074 +3 39326 40075 40038 +3 39327 39517 39931 +3 39327 39931 39739 +3 39328 39740 39932 +3 39328 39932 39518 +3 39329 40343 40834 +3 39329 40834 39891 +3 39330 39892 40835 +3 39330 40835 40344 +3 39331 39417 41466 +3 39331 41466 41270 +3 39332 41271 41467 +3 39332 41467 39418 +3 39333 40725 41059 +3 39334 41060 40726 +3 39335 40195 40388 +3 39335 40388 39511 +3 39336 39512 40389 +3 39336 40389 40196 +3 39337 40117 40432 +3 39337 40432 39483 +3 39338 39484 40433 +3 39338 40433 40118 +3 39339 39411 39653 +3 39339 39653 39563 +3 39340 39564 39654 +3 39340 39654 39412 +3 39341 39649 40481 +3 39341 40481 40138 +3 39342 40139 40482 +3 39342 40482 39650 +3 39343 39981 40965 +3 39343 40965 40386 +3 39344 40387 40966 +3 39344 40966 39982 +3 39345 39525 39863 +3 39345 39863 39689 +3 39346 39690 39864 +3 39346 39864 39526 +3 39347 40017 41556 +3 39347 41556 40929 +3 39348 40930 41557 +3 39348 41557 40018 +3 39349 39703 39874 +3 39349 39874 39704 +3 39350 40175 40653 +3 39350 40653 39803 +3 39351 39804 40654 +3 39351 40654 40176 +3 39352 39461 40001 +3 39352 40001 39870 +3 39353 39871 40002 +3 39353 40002 39462 +3 39354 39356 39893 +3 39354 39893 39785 +3 39355 39786 39894 +3 39355 39894 39357 +3 39356 39877 39893 +3 39357 39894 39878 +3 39358 39567 39685 +3 39358 39685 39451 +3 39359 39452 39686 +3 39359 39686 39568 +3 39360 40007 40094 +3 39360 40094 39539 +3 39361 39540 40095 +3 39361 40095 40008 +3 39362 40396 41150 +3 39362 41150 40150 +3 39363 40151 41151 +3 39363 41151 40397 +3 39364 39643 40838 +3 39364 40838 40649 +3 39365 40650 40839 +3 39365 40839 39644 +3 39366 39541 39713 +3 39366 39713 39513 +3 39367 39514 39714 +3 39367 39714 39542 +3 39368 39805 40160 +3 39368 40160 39731 +3 39369 39732 40161 +3 39369 40161 39806 +3 39370 40707 41021 +3 39370 41021 39751 +3 39371 39752 41022 +3 39371 41022 40708 +3 39372 40666 41912 +3 39372 41912 40643 +3 39373 40644 41913 +3 39373 41913 40667 +3 39374 39884 40668 +3 39374 40668 39883 +3 39375 39511 40321 +3 39375 40321 40136 +3 39376 40137 40322 +3 39376 40322 39512 +3 39377 39481 40283 +3 39377 40283 40049 +3 39378 40050 40284 +3 39378 40284 39482 +3 39379 41045 42019 +3 39379 42019 40436 +3 39380 40437 42020 +3 39380 42020 41046 +3 39381 39619 39701 +3 39381 39701 39419 +3 39382 39420 39702 +3 39382 39702 39620 +3 39383 41159 41852 +3 39383 41852 40127 +3 39384 40128 41853 +3 39384 41853 41160 +3 39385 39447 39665 +3 39385 39665 39571 +3 39386 39572 39666 +3 39386 39666 39448 +3 39387 40477 40917 +3 39387 40917 39889 +3 39388 39890 40918 +3 39388 40918 40478 +3 39389 40662 41462 +3 39389 41462 40329 +3 39390 40330 41463 +3 39390 41463 40663 +3 39391 40291 40711 +3 39391 40711 39789 +3 39392 39790 40712 +3 39392 40712 40292 +3 39393 40223 41169 +3 39393 41169 40394 +3 39394 40395 41170 +3 39394 41170 40224 +3 39395 40947 42121 +3 39395 42121 40703 +3 39396 40704 42122 +3 39396 42122 40948 +3 39397 39563 39735 +3 39397 39735 39567 +3 39398 39568 39736 +3 39398 39736 39564 +3 39399 39885 40269 +3 39399 40269 39787 +3 39400 39788 40270 +3 39400 40270 39886 +3 39401 39430 40598 +3 39401 40598 40539 +3 39402 40540 40599 +3 39402 40599 39430 +3 39403 39571 39719 +3 39403 39719 39523 +3 39404 39524 39720 +3 39404 39720 39572 +3 39405 40761 41075 +3 39405 41075 39755 +3 39406 39756 41076 +3 39406 41076 40762 +3 39407 39669 40189 +3 39407 40189 39923 +3 39408 39924 40190 +3 39408 40190 39670 +3 39409 39815 40303 +3 39409 40303 39885 +3 39410 39886 40304 +3 39410 40304 39816 +3 39411 39419 39709 +3 39411 39709 39653 +3 39412 39654 39710 +3 39412 39710 39420 +3 39413 40780 41783 +3 39413 41783 40529 +3 39414 40530 41784 +3 39414 41784 40781 +3 39415 39762 40377 +3 39415 40377 40019 +3 39416 40020 40378 +3 39416 40378 39763 +3 39417 39442 41506 +3 39417 41506 41466 +3 39418 41467 41507 +3 39418 41507 39442 +3 39419 39701 39709 +3 39420 39710 39702 +3 39421 39842 40108 +3 39421 40108 39841 +3 39422 40600 41205 +3 39422 41205 40084 +3 39423 40085 41206 +3 39423 41206 40600 +3 39424 39837 40111 +3 39424 40111 39691 +3 39425 39692 40112 +3 39425 40112 39838 +3 39426 40949 41425 +3 39426 41425 40331 +3 39427 40332 41426 +3 39427 41426 40950 +3 39428 39689 39965 +3 39428 39965 39703 +3 39429 39704 39966 +3 39429 39966 39690 +3 39430 40599 40598 +3 39431 39766 40673 +3 39431 40673 40453 +3 39432 40454 40674 +3 39432 40674 39767 +3 39433 39652 39651 +3 39434 39817 40631 +3 39434 40631 40191 +3 39435 40192 40632 +3 39435 40632 39818 +3 39436 39911 40299 +3 39436 40299 39802 +3 39437 39802 40300 +3 39437 40300 39912 +3 39438 40347 40909 +3 39438 40909 40047 +3 39439 40048 40910 +3 39439 40910 40348 +3 39440 40158 41069 +3 39440 41069 40440 +3 39441 40441 41070 +3 39441 41070 40159 +3 39442 41507 41506 +3 39443 40313 40471 +3 39444 40472 40314 +3 39445 39489 41125 +3 39445 41125 40979 +3 39446 40980 41126 +3 39446 41126 39490 +3 39447 39451 39717 +3 39447 39717 39665 +3 39448 39666 39718 +3 39448 39718 39452 +3 39449 39989 40229 +3 39449 40229 39705 +3 39450 39706 40230 +3 39450 40230 39990 +3 39451 39685 39717 +3 39452 39718 39686 +3 39453 39592 40309 +3 39453 40309 40132 +3 39454 40133 40310 +3 39454 40310 39593 +3 39455 39947 40233 +3 39455 40233 39760 +3 39456 39761 40234 +3 39456 40234 39948 +3 39457 41083 41758 +3 39457 41758 40199 +3 39458 40200 41759 +3 39458 41759 41084 +3 39459 41242 41906 +3 39459 41906 40096 +3 39460 40097 41907 +3 39460 41907 41243 +3 39461 39543 40090 +3 39461 40090 40001 +3 39462 40002 40091 +3 39462 40091 39544 +3 39463 40041 41133 +3 39463 41133 40596 +3 39464 40597 41134 +3 39464 41134 40042 +3 39465 40197 40601 +3 39465 40601 39807 +3 39466 39808 40602 +3 39466 40602 40198 +3 39467 40053 40788 +3 39467 40788 40227 +3 39468 40228 40789 +3 39468 40789 40054 +3 39469 39825 40701 +3 39469 40701 40345 +3 39470 40346 40702 +3 39470 40702 39826 +3 39471 41005 41377 +3 39471 41377 39861 +3 39472 39862 41378 +3 39472 41378 41006 +3 39473 39739 40068 +3 39473 40068 39813 +3 39474 39814 40069 +3 39474 40069 39740 +3 39475 39590 40031 +3 39475 40031 39917 +3 39476 39918 40032 +3 39476 40032 39591 +3 39477 39783 40307 +3 39477 40307 39978 +3 39478 39979 40308 +3 39478 40308 39784 +3 39479 39859 40082 +3 39479 40082 39677 +3 39480 39678 40083 +3 39480 40083 39860 +3 39481 39555 40382 +3 39481 40382 40283 +3 39482 40284 40383 +3 39482 40383 39556 +3 39483 40432 40551 +3 39483 40551 39588 +3 39484 39589 40552 +3 39484 40552 40433 +3 39485 40281 40535 +3 39485 40535 39727 +3 39486 39728 40536 +3 39486 40536 40282 +3 39487 40362 40579 +3 39487 40579 39725 +3 39488 39726 40580 +3 39488 40580 40363 +3 39489 39490 41156 +3 39489 41156 41125 +3 39490 41126 41156 +3 39491 40465 41517 +3 39491 41517 40709 +3 39492 40710 41518 +3 39492 41518 40466 +3 39493 39841 40185 +3 39493 40185 39837 +3 39494 39838 40186 +3 39494 40186 39842 +3 39495 40641 41846 +3 39495 41846 40798 +3 39496 40799 41847 +3 39496 41847 40642 +3 39497 40297 41940 +3 39497 41940 41253 +3 39498 41254 41941 +3 39498 41941 40298 +3 39499 40543 40927 +3 39499 40927 39945 +3 39500 39946 40928 +3 39500 40928 40544 +3 39501 40679 40987 +3 39501 40987 39866 +3 39502 39867 40988 +3 39502 40988 40680 +3 39503 40394 41215 +3 39503 41215 40390 +3 39504 40391 41216 +3 39504 41216 40395 +3 39505 40585 42005 +3 39505 42005 41001 +3 39506 41002 42006 +3 39506 42006 40586 +3 39507 40463 41101 +3 39507 41101 40257 +3 39508 40258 41102 +3 39508 41102 40464 +3 39509 41013 41721 +3 39509 41721 40241 +3 39510 40242 41722 +3 39510 41722 41014 +3 39511 40388 40321 +3 39512 40322 40389 +3 39513 39713 39811 +3 39513 39811 39619 +3 39514 39620 39812 +3 39514 39812 39714 +3 39515 39693 40449 +3 39515 40449 40251 +3 39516 40252 40450 +3 39516 40450 39694 +3 39517 39635 40063 +3 39517 40063 39931 +3 39518 39932 40064 +3 39518 40064 39636 +3 39519 40390 41227 +3 39519 41227 40396 +3 39520 40397 41228 +3 39520 41228 40391 +3 39521 40430 41698 +3 39521 41698 40885 +3 39522 40886 41699 +3 39522 41699 40431 +3 39523 39719 39792 +3 39523 39792 39586 +3 39524 39587 39793 +3 39524 39793 39720 +3 39525 39629 39997 +3 39525 39997 39863 +3 39526 39864 39998 +3 39526 39998 39630 +3 39527 39813 39995 +3 39527 39995 39679 +3 39528 39680 39996 +3 39528 39996 39814 +3 39529 40207 40487 +3 39529 40487 39769 +3 39530 39770 40488 +3 39530 40488 40208 +3 39531 39879 40911 +3 39531 40911 40583 +3 39532 40584 40912 +3 39532 40912 39880 +3 39533 40003 40209 +3 39533 40209 39721 +3 39534 39722 40210 +3 39534 40210 40004 +3 39535 39749 40100 +3 39535 40100 39872 +3 39536 39873 40101 +3 39536 40101 39750 +3 39537 39737 40800 +3 39537 40800 40635 +3 39538 40636 40801 +3 39538 40801 39738 +3 39539 40094 40113 +3 39539 40113 39543 +3 39540 39544 40114 +3 39540 40114 40095 +3 39541 39651 39833 +3 39541 39833 39713 +3 39542 39714 39834 +3 39542 39834 39652 +3 39543 40113 40090 +3 39544 40091 40114 +3 39545 41333 41609 +3 39545 41609 39875 +3 39546 39876 41610 +3 39546 41610 41334 +3 39547 40106 40375 +3 39547 40375 39777 +3 39548 39778 40376 +3 39548 40376 40107 +3 39549 40651 40897 +3 39549 40897 39839 +3 39550 39840 40898 +3 39550 40898 40652 +3 39551 40319 41746 +3 39551 41746 41041 +3 39552 41042 41747 +3 39552 41747 40320 +3 39553 40154 40549 +3 39553 40549 39929 +3 39554 39930 40550 +3 39554 40550 40155 +3 39555 39581 40451 +3 39555 40451 40382 +3 39556 40383 40452 +3 39556 40452 39581 +3 39557 40860 42279 +3 39557 42279 41079 +3 39558 40033 40677 +3 39558 40677 40445 +3 39559 40446 40678 +3 39559 40678 40034 +3 39560 41080 42280 +3 39560 42280 40861 +3 39561 39943 40203 +3 39561 40203 39805 +3 39562 39806 40204 +3 39562 40204 39944 +3 39563 39653 39849 +3 39563 39849 39735 +3 39564 39736 39850 +3 39564 39850 39654 +3 39565 41323 42123 +3 39565 42123 40473 +3 39566 40474 42124 +3 39566 42124 41324 +3 39567 39735 39853 +3 39567 39853 39685 +3 39568 39686 39854 +3 39568 39854 39736 +3 39569 40261 40814 +3 39569 40814 40247 +3 39570 40248 40815 +3 39570 40815 40262 +3 39571 39665 39827 +3 39571 39827 39719 +3 39572 39720 39828 +3 39572 39828 39666 +3 39573 40531 40767 +3 39573 40767 39831 +3 39574 39832 40768 +3 39574 40768 40532 +3 39575 39923 40360 +3 39575 40360 39947 +3 39576 39948 40361 +3 39576 40361 39924 +3 39577 39866 41278 +3 39577 41278 41017 +3 39578 41018 41279 +3 39578 41279 39867 +3 39579 40247 40830 +3 39579 40830 40197 +3 39580 40198 40831 +3 39580 40831 40248 +3 39581 40452 40451 +3 39582 39957 41062 +3 39582 41062 40731 +3 39583 40732 41063 +3 39583 41063 39958 +3 39584 40191 40836 +3 39584 40836 40261 +3 39585 40262 40837 +3 39585 40837 40192 +3 39586 39792 39857 +3 39586 39857 39616 +3 39587 39616 39858 +3 39587 39858 39793 +3 39588 40551 40627 +3 39588 40627 39631 +3 39589 39632 40628 +3 39589 40628 40552 +3 39590 39679 40109 +3 39590 40109 40031 +3 39591 40032 40110 +3 39591 40110 39680 +3 39592 39978 40424 +3 39592 40424 40309 +3 39593 40310 40425 +3 39593 40425 39979 +3 39594 40119 40935 +3 39594 40935 40475 +3 39595 40476 40936 +3 39595 40936 40120 +3 39596 40507 42051 +3 39596 42051 41237 +3 39597 41237 42052 +3 39597 42052 40508 +3 39598 40013 41361 +3 39598 41361 40951 +3 39599 40952 41362 +3 39599 41362 40014 +3 39600 40354 40747 +3 39600 40747 40005 +3 39601 40006 40748 +3 39601 40748 40355 +3 39602 40183 41938 +3 39602 41938 41393 +3 39603 41394 41939 +3 39603 41939 40184 +3 39604 40129 42098 +3 39604 42098 41633 +3 39605 41634 42099 +3 39605 42099 40130 +3 39606 39907 40485 +3 39606 40485 40173 +3 39607 40174 40486 +3 39607 40486 39908 +3 39608 39872 40156 +3 39608 40156 39859 +3 39609 39860 40157 +3 39609 40157 39873 +3 39610 40177 41902 +3 39610 41902 41395 +3 39611 41396 41903 +3 39611 41903 40178 +3 39612 40259 41621 +3 39612 41621 41272 +3 39613 41273 41622 +3 39613 41622 40260 +3 39614 40059 41611 +3 39614 41611 41225 +3 39615 41226 41612 +3 39615 41612 40060 +3 39616 39857 39858 +3 39617 40864 41972 +3 39617 41972 40780 +3 39618 40781 41973 +3 39618 41973 40865 +3 39619 39811 39899 +3 39619 39899 39701 +3 39620 39702 39900 +3 39620 39900 39812 +3 39621 39798 41099 +3 39621 41099 40905 +3 39622 40906 41100 +3 39622 41100 39799 +3 39623 40629 40875 +3 39623 40875 39903 +3 39624 39904 40876 +3 39624 40876 40630 +3 39625 41103 42325 +3 39625 42325 40947 +3 39626 40948 42326 +3 39626 42326 41104 +3 39627 40023 40957 +3 39627 40957 40611 +3 39628 40612 40958 +3 39628 40958 40024 +3 39629 39785 40164 +3 39629 40164 39997 +3 39630 39998 40165 +3 39630 40165 39786 +3 39631 40627 40661 +3 39631 40661 39632 +3 39632 40661 40628 +3 39633 40070 41431 +3 39633 41431 40997 +3 39634 40998 41432 +3 39634 41432 40071 +3 39635 39741 40144 +3 39635 40144 40063 +3 39636 40064 40145 +3 39636 40145 39742 +3 39637 39933 40617 +3 39637 40617 40279 +3 39638 40280 40618 +3 39638 40618 39934 +3 39639 40798 41958 +3 39639 41958 40864 +3 39640 40865 41959 +3 39640 41959 40799 +3 39641 40457 41037 +3 39641 41037 40291 +3 39642 40292 41038 +3 39642 41038 40458 +3 39643 39903 41085 +3 39643 41085 40838 +3 39644 40839 41086 +3 39644 41086 39904 +3 39645 40043 41882 +3 39645 41882 41508 +3 39646 41509 41883 +3 39646 41883 40044 +3 39647 40339 41922 +3 39647 41922 41325 +3 39648 41326 41923 +3 39648 41923 40340 +3 39649 39921 40733 +3 39649 40733 40481 +3 39650 40482 40734 +3 39650 40734 39922 +3 39651 39652 39865 +3 39651 39865 39833 +3 39652 39834 39865 +3 39653 39709 39915 +3 39653 39915 39849 +3 39654 39850 39916 +3 39654 39916 39710 +3 39655 40345 41051 +3 39655 41051 40447 +3 39656 40448 41052 +3 39656 41052 40346 +3 39657 40786 41692 +3 39657 41692 40662 +3 39658 40663 41693 +3 39658 41693 40787 +3 39659 41367 41785 +3 39659 41785 40148 +3 39660 40149 41786 +3 39660 41786 41368 +3 39661 40333 41773 +3 39661 41773 41191 +3 39662 41192 41774 +3 39662 41774 40334 +3 39663 40327 40687 +3 39663 40687 39991 +3 39664 39992 40688 +3 39664 40688 40328 +3 39665 39717 39895 +3 39665 39895 39827 +3 39666 39828 39896 +3 39666 39896 39718 +3 39667 40386 41264 +3 39667 41264 40895 +3 39668 40896 41265 +3 39668 41265 40387 +3 39669 39870 40418 +3 39669 40418 40189 +3 39670 40190 40419 +3 39670 40419 39871 +3 39671 40523 41201 +3 39671 41201 40515 +3 39672 40516 41202 +3 39672 41202 40524 +3 39673 41401 41861 +3 39673 41861 40142 +3 39674 40143 41862 +3 39674 41862 41402 +3 39675 39999 40647 +3 39675 40647 40301 +3 39676 40302 40648 +3 39676 40648 40000 +3 39677 40082 40221 +3 39677 40221 39796 +3 39678 39797 40222 +3 39678 40222 40083 +3 39679 39995 40109 +3 39680 40110 39996 +3 39681 40515 41221 +3 39681 41221 40463 +3 39682 40464 41222 +3 39682 41222 40516 +3 39683 41599 42040 +3 39683 42040 40125 +3 39684 40126 42041 +3 39684 42041 41600 +3 39685 39853 39909 +3 39685 39909 39717 +3 39686 39718 39910 +3 39686 39910 39854 +3 39687 40408 40881 +3 39687 40881 40175 +3 39688 40176 40882 +3 39688 40882 40409 +3 39689 39863 40162 +3 39689 40162 39965 +3 39690 39966 40163 +3 39690 40163 39864 +3 39691 40111 40351 +3 39691 40351 39881 +3 39692 39882 40352 +3 39692 40352 40112 +3 39693 39905 40571 +3 39693 40571 40449 +3 39694 40450 40572 +3 39694 40572 39906 +3 39695 40440 41229 +3 39695 41229 40523 +3 39696 40524 41230 +3 39696 41230 40441 +3 39697 41009 41532 +3 39697 41532 40237 +3 39698 40238 41533 +3 39698 41533 41010 +3 39699 40092 40937 +3 39699 40937 40565 +3 39700 40566 40938 +3 39700 40938 40093 +3 39701 39899 39939 +3 39701 39939 39709 +3 39702 39710 39940 +3 39702 39940 39900 +3 39703 39965 40166 +3 39703 40166 39874 +3 39704 39874 40167 +3 39704 40167 39966 +3 39705 40229 40426 +3 39705 40426 39868 +3 39706 39869 40427 +3 39706 40427 40230 +3 39707 40709 41684 +3 39707 41684 40782 +3 39708 40783 41685 +3 39708 41685 40710 +3 39709 39939 39915 +3 39710 39916 39940 +3 39711 40495 41562 +3 39711 41562 40812 +3 39712 40813 41563 +3 39712 41563 40496 +3 39713 39833 39970 +3 39713 39970 39811 +3 39714 39812 39971 +3 39714 39971 39834 +3 39715 40335 41737 +3 39715 41737 41157 +3 39716 41158 41738 +3 39716 41738 40336 +3 39717 39909 39895 +3 39718 39896 39910 +3 39719 39827 39952 +3 39719 39952 39792 +3 39720 39793 39953 +3 39720 39953 39828 +3 39721 40209 40380 +3 39721 40380 39845 +3 39722 39846 40381 +3 39722 40381 40210 +3 39723 40605 41184 +3 39723 41184 40343 +3 39724 40344 41185 +3 39724 41185 40606 +3 39725 40579 40757 +3 39725 40757 39974 +3 39726 39975 40758 +3 39726 40758 40580 +3 39727 40535 40681 +3 39727 40681 40154 +3 39728 40155 40682 +3 39728 40682 40536 +3 39729 40447 41097 +3 39729 41097 40428 +3 39730 40429 41098 +3 39730 41098 40448 +3 39731 40160 40483 +3 39731 40483 39989 +3 39732 39990 40484 +3 39732 40484 40161 +3 39733 40428 41121 +3 39733 41121 40457 +3 39734 40458 41122 +3 39734 41122 40429 +3 39735 39849 39976 +3 39735 39976 39853 +3 39736 39854 39977 +3 39736 39977 39850 +3 39737 39851 40933 +3 39737 40933 40800 +3 39738 40801 40934 +3 39738 40934 39852 +3 39739 39931 40263 +3 39739 40263 40068 +3 39740 40069 40264 +3 39740 40264 39932 +3 39741 39759 40201 +3 39741 40201 40144 +3 39742 40145 40202 +3 39742 40202 39759 +3 39743 41137 42131 +3 39743 42131 40808 +3 39744 40809 42132 +3 39744 42132 41138 +3 39745 41180 41639 +3 39745 41639 40255 +3 39746 40256 41640 +3 39746 41640 41181 +3 39747 41141 41589 +3 39747 41589 40219 +3 39748 40220 41590 +3 39748 41590 41142 +3 39749 39917 40275 +3 39749 40275 40100 +3 39750 40101 40276 +3 39750 40276 39918 +3 39751 41021 41357 +3 39751 41357 40072 +3 39752 40073 41358 +3 39752 41358 41022 +3 39753 40211 41109 +3 39753 41109 40683 +3 39754 40684 41110 +3 39754 41110 40212 +3 39755 41075 41351 +3 39755 41351 40245 +3 39756 40246 41352 +3 39756 41352 41076 +3 39757 40782 41667 +3 39757 41667 40786 +3 39758 40787 41668 +3 39758 41668 40783 +3 39759 40202 40201 +3 39760 40233 40513 +3 39760 40513 40003 +3 39761 40004 40514 +3 39761 40514 40234 +3 39762 40049 40671 +3 39762 40671 40377 +3 39763 40378 40672 +3 39763 40672 40050 +3 39764 41007 41896 +3 39764 41896 40725 +3 39765 40726 41897 +3 39765 41897 41008 +3 39766 40045 40915 +3 39766 40915 40673 +3 39767 40674 40916 +3 39767 40916 40046 +3 39768 40554 41732 +3 39768 41732 40553 +3 39769 40487 40806 +3 39769 40806 40117 +3 39770 40118 40807 +3 39770 40807 40488 +3 39771 40293 41329 +3 39771 41329 40820 +3 39772 40821 41330 +3 39772 41330 40294 +3 39773 40138 40847 +3 39773 40847 40509 +3 39774 40510 40848 +3 39774 40848 40139 +3 39775 40547 41578 +3 39775 41578 40851 +3 39776 40852 41579 +3 39776 41579 40548 +3 39777 40375 40557 +3 39777 40557 39954 +3 39778 39955 40558 +3 39778 40558 40376 +3 39779 40567 42381 +3 39779 42381 41659 +3 39780 41660 42382 +3 39780 42382 40568 +3 39781 40862 42281 +3 39781 42281 41312 +3 39782 41313 42282 +3 39782 42282 40863 +3 39783 40019 40573 +3 39783 40573 40307 +3 39784 40308 40574 +3 39784 40574 40020 +3 39785 39893 40285 +3 39785 40285 40164 +3 39786 40165 40286 +3 39786 40286 39894 +3 39787 40269 40625 +3 39787 40625 40106 +3 39788 40107 40626 +3 39788 40626 40270 +3 39789 40711 40993 +3 39789 40993 40121 +3 39790 40122 40994 +3 39790 40994 40712 +3 39791 40227 40872 +3 39791 40872 40228 +3 39792 39952 40029 +3 39792 40029 39857 +3 39793 39858 40030 +3 39793 40030 39953 +3 39794 41217 41830 +3 39794 41830 40455 +3 39795 40456 41831 +3 39795 41831 41218 +3 39796 40221 40315 +3 39796 40315 39877 +3 39797 39878 40316 +3 39797 40316 40222 +3 39798 39941 41240 +3 39798 41240 41099 +3 39799 41100 41241 +3 39799 41241 39942 +3 39800 41385 41552 +3 39800 41552 39983 +3 39801 39984 41553 +3 39801 41553 41386 +3 39802 40299 40640 +3 39802 40640 40300 +3 39803 40653 40981 +3 39803 40981 40187 +3 39804 40188 40982 +3 39804 40982 40654 +3 39805 40203 40577 +3 39805 40577 40160 +3 39806 40161 40578 +3 39806 40578 40204 +3 39807 40601 40858 +3 39807 40858 40088 +3 39808 40089 40859 +3 39808 40859 40602 +3 39809 41079 42397 +3 39809 42397 41103 +3 39810 41104 42398 +3 39810 42398 41080 +3 39811 39970 40057 +3 39811 40057 39899 +3 39812 39900 40058 +3 39812 40058 39971 +3 39813 40068 40267 +3 39813 40267 39995 +3 39814 39996 40268 +3 39814 40268 40069 +3 39815 40173 40675 +3 39815 40675 40303 +3 39816 40304 40676 +3 39816 40676 40174 +3 39817 40140 40921 +3 39817 40921 40631 +3 39818 40632 40922 +3 39818 40922 40141 +3 39819 40879 41288 +3 39819 41288 40235 +3 39820 40236 41289 +3 39820 41289 40880 +3 39821 40873 42479 +3 39821 42479 41525 +3 39822 41526 42480 +3 39822 42480 40874 +3 39823 41454 42076 +3 39823 42076 40527 +3 39824 40528 42077 +3 39824 42077 41455 +3 39825 40098 40925 +3 39825 40925 40701 +3 39826 40702 40926 +3 39826 40926 40099 +3 39827 39895 40035 +3 39827 40035 39952 +3 39828 39953 40036 +3 39828 40036 39896 +3 39829 40883 41641 +3 39829 41641 40679 +3 39830 40680 41642 +3 39830 41642 40884 +3 39831 40767 41145 +3 39831 41145 40027 +3 39832 40028 41146 +3 39832 41146 40768 +3 39833 39865 40021 +3 39833 40021 39970 +3 39834 39971 40022 +3 39834 40022 39865 +3 39835 40621 42311 +3 39835 42311 41625 +3 39836 41626 42312 +3 39836 42312 40622 +3 39837 40185 40501 +3 39837 40501 40111 +3 39838 40112 40502 +3 39838 40502 40186 +3 39839 40897 41143 +3 39839 41143 40080 +3 39840 40081 41144 +3 39840 41144 40898 +3 39841 40108 40493 +3 39841 40493 40185 +3 39842 40186 40494 +3 39842 40494 40108 +3 39843 41111 41528 +3 39843 41528 40295 +3 39844 40296 41529 +3 39844 41529 41112 +3 39845 40380 40489 +3 39845 40489 39943 +3 39846 39944 40490 +3 39846 40490 40381 +3 39847 40983 41448 +3 39847 41448 40305 +3 39848 40306 41449 +3 39848 41449 40984 +3 39849 39915 40066 +3 39849 40066 39976 +3 39850 39977 40067 +3 39850 40067 39916 +3 39851 39925 41023 +3 39851 41023 40933 +3 39852 40934 41024 +3 39852 41024 39926 +3 39853 39976 40051 +3 39853 40051 39909 +3 39854 39910 40052 +3 39854 40052 39977 +3 39855 40499 40945 +3 39855 40945 40354 +3 39856 40355 40946 +3 39856 40946 40500 +3 39857 40029 40065 +3 39857 40065 39858 +3 39858 40065 40030 +3 39859 40156 40400 +3 39859 40400 40082 +3 39860 40083 40401 +3 39860 40401 40157 +3 39861 41377 41645 +3 39861 41645 40193 +3 39862 40194 41646 +3 39862 41646 41378 +3 39863 39997 40325 +3 39863 40325 40162 +3 39864 40163 40326 +3 39864 40326 39998 +3 39865 40022 40021 +3 39866 40987 41278 +3 39867 41279 40988 +3 39868 40426 40545 +3 39868 40545 39961 +3 39869 39962 40546 +3 39869 40546 40427 +3 39870 40001 40594 +3 39870 40594 40418 +3 39871 40419 40595 +3 39871 40595 40002 +3 39872 40100 40406 +3 39872 40406 40156 +3 39873 40157 40407 +3 39873 40407 40101 +3 39874 40166 40353 +3 39874 40353 40167 +3 39875 41609 41248 +3 39876 41249 41610 +3 39877 40315 40367 +3 39877 40367 39893 +3 39878 39894 40368 +3 39878 40368 40316 +3 39879 40475 41189 +3 39879 41189 40911 +3 39880 40912 41190 +3 39880 41190 40476 +3 39881 40351 40497 +3 39881 40497 40007 +3 39882 40008 40498 +3 39882 40498 40352 +3 39883 40668 41087 +3 39883 41087 40347 +3 39884 40348 41088 +3 39884 41088 40668 +3 39885 40303 40774 +3 39885 40774 40269 +3 39886 40270 40775 +3 39886 40775 40304 +3 39887 40469 40919 +3 39887 40919 40479 +3 39888 40480 40920 +3 39888 40920 40470 +3 39889 40917 41564 +3 39889 41564 40505 +3 39890 40506 41565 +3 39890 41565 40918 +3 39891 40834 41316 +3 39891 41316 40371 +3 39892 40372 41317 +3 39892 41317 40835 +3 39893 40367 40285 +3 39894 40286 40368 +3 39895 39909 40076 +3 39895 40076 40035 +3 39896 40036 40077 +3 39896 40077 39910 +3 39897 40503 41769 +3 39897 41769 41246 +3 39898 41247 41772 +3 39898 41772 40504 +3 39899 40057 40102 +3 39899 40102 39939 +3 39900 39940 40103 +3 39900 40103 40058 +3 39901 40279 40832 +3 39901 40832 40469 +3 39902 40470 40833 +3 39902 40833 40280 +3 39903 40875 41085 +3 39904 41086 40876 +3 39905 40074 40741 +3 39905 40741 40571 +3 39906 40572 40742 +3 39906 40742 40075 +3 39907 40132 40735 +3 39907 40735 40485 +3 39908 40486 40736 +3 39908 40736 40133 +3 39909 40051 40076 +3 39910 40077 40052 +3 39911 40301 40721 +3 39911 40721 40299 +3 39912 40300 40722 +3 39912 40722 40302 +3 39913 40479 40868 +3 39913 40868 40327 +3 39914 40328 40869 +3 39914 40869 40480 +3 39915 39939 40104 +3 39915 40104 40066 +3 39916 40067 40105 +3 39916 40105 39940 +3 39917 40031 40410 +3 39917 40410 40275 +3 39918 40276 40411 +3 39918 40411 40032 +3 39919 41178 41793 +3 39919 41793 40592 +3 39920 40593 41794 +3 39920 41794 41179 +3 39921 40273 41073 +3 39921 41073 40733 +3 39922 40734 41074 +3 39922 41074 40274 +3 39923 40189 40657 +3 39923 40657 40360 +3 39924 40361 40658 +3 39924 40658 40190 +3 39925 39926 41061 +3 39925 41061 41023 +3 39926 41024 41061 +3 39927 40840 41399 +3 39927 41399 40477 +3 39928 40478 41400 +3 39928 41400 40840 +3 39929 40549 40828 +3 39929 40828 40207 +3 39930 40208 40829 +3 39930 40829 40550 +3 39931 40063 40434 +3 39931 40434 40263 +3 39932 40264 40435 +3 39932 40435 40064 +3 39933 40136 40818 +3 39933 40818 40617 +3 39934 40618 40819 +3 39934 40819 40137 +3 39935 41001 42331 +3 39935 42331 41304 +3 39936 41305 42332 +3 39936 42332 41002 +3 39937 40575 42383 +3 39937 42383 41724 +3 39938 41725 42384 +3 39938 42384 40576 +3 39939 40102 40104 +3 39940 40105 40103 +3 39941 39956 41306 +3 39941 41306 41240 +3 39942 41241 41307 +3 39942 41307 39956 +3 39943 40489 40560 +3 39943 40560 40203 +3 39944 40204 40561 +3 39944 40561 40490 +3 39945 40927 41292 +3 39945 41292 40289 +3 39946 40290 41293 +3 39946 41293 40928 +3 39947 40360 40669 +3 39947 40669 40233 +3 39948 40234 40670 +3 39948 40670 40361 +3 39949 40500 40857 +3 39949 40857 40499 +3 39950 40816 41976 +3 39950 41976 41488 +3 39951 41489 41977 +3 39951 41977 40817 +3 39952 40035 40146 +3 39952 40146 40029 +3 39953 40030 40147 +3 39953 40147 40036 +3 39954 40557 40693 +3 39954 40693 40037 +3 39955 40038 40694 +3 39955 40694 40558 +3 39956 41307 41306 +3 39957 40337 41417 +3 39957 41417 41062 +3 39958 41063 41418 +3 39958 41418 40338 +3 39959 40533 41665 +3 39959 41665 41161 +3 39960 41162 41666 +3 39960 41666 40534 +3 39961 40545 40613 +3 39961 40613 39980 +3 39962 39980 40614 +3 39962 40614 40546 +3 39963 40973 41607 +3 39963 41607 40633 +3 39964 40634 41608 +3 39964 41608 40974 +3 39965 40162 40402 +3 39965 40402 40166 +3 39966 40167 40403 +3 39966 40403 40163 +3 39967 40885 42072 +3 39967 42072 41223 +3 39968 41224 42073 +3 39968 42073 40886 +3 39969 40596 41527 +3 39969 41527 40597 +3 39970 40021 40134 +3 39970 40134 40057 +3 39971 40058 40135 +3 39971 40135 40022 +3 39972 40737 42285 +3 39972 42285 41593 +3 39973 41594 42286 +3 39973 42286 40738 +3 39974 40757 40941 +3 39974 40941 40195 +3 39975 40196 40942 +3 39975 40942 40758 +3 39976 40066 40181 +3 39976 40181 40051 +3 39977 40052 40182 +3 39977 40182 40067 +3 39978 40307 40763 +3 39978 40763 40424 +3 39979 40425 40764 +3 39979 40764 40308 +3 39980 40613 40614 +3 39981 40563 41519 +3 39981 41519 40965 +3 39982 40966 41520 +3 39982 41520 40564 +3 39983 41552 41663 +3 39983 41663 40039 +3 39984 40040 41664 +3 39984 41664 41553 +3 39985 40358 41343 +3 39985 41343 40959 +3 39986 40960 41344 +3 39986 41344 40359 +3 39987 41513 42499 +3 39987 42499 41045 +3 39988 41046 42500 +3 39988 42500 41514 +3 39989 40483 40729 +3 39989 40729 40229 +3 39990 40230 40730 +3 39990 40730 40484 +3 39991 40687 40943 +3 39991 40943 40281 +3 39992 40282 40944 +3 39992 40944 40688 +3 39993 40695 41805 +3 39993 41805 41175 +3 39994 41175 41806 +3 39994 41806 40696 +3 39995 40267 40422 +3 39995 40422 40109 +3 39996 40110 40423 +3 39996 40423 40268 +3 39997 40164 40511 +3 39997 40511 40325 +3 39998 40326 40512 +3 39998 40512 40165 +3 39999 40251 40866 +3 39999 40866 40647 +3 40000 40648 40867 +3 40000 40867 40252 +3 40001 40090 40713 +3 40001 40713 40594 +3 40002 40595 40714 +3 40002 40714 40091 +3 40003 40513 40727 +3 40003 40727 40209 +3 40004 40210 40728 +3 40004 40728 40514 +3 40005 40747 41055 +3 40005 41055 40362 +3 40006 40363 41056 +3 40006 41056 40748 +3 40007 40497 40607 +3 40007 40607 40094 +3 40008 40095 40608 +3 40008 40608 40498 +3 40009 41341 42375 +3 40009 42375 41137 +3 40010 41138 42376 +3 40010 42376 41342 +3 40011 40812 41865 +3 40011 41865 41057 +3 40012 41058 41866 +3 40012 41866 40813 +3 40013 40414 41728 +3 40013 41728 41361 +3 40014 41362 41729 +3 40014 41729 40415 +3 40015 40913 42602 +3 40015 42602 41795 +3 40016 41796 42603 +3 40016 42603 40914 +3 40017 40765 42247 +3 40017 42247 41556 +3 40018 41557 42248 +3 40018 42248 40766 +3 40019 40377 40903 +3 40019 40903 40573 +3 40020 40574 40904 +3 40020 40904 40378 +3 40021 40022 40172 +3 40021 40172 40134 +3 40022 40135 40172 +3 40023 40373 41290 +3 40023 41290 40957 +3 40024 40958 41291 +3 40024 41291 40374 +3 40025 41548 42244 +3 40025 42244 40784 +3 40026 40785 42245 +3 40026 42245 41549 +3 40027 41145 41282 +3 40027 41282 40170 +3 40028 40171 41283 +3 40028 41283 41146 +3 40029 40146 40213 +3 40029 40213 40065 +3 40030 40065 40214 +3 40030 40214 40147 +3 40031 40109 40519 +3 40031 40519 40410 +3 40032 40411 40520 +3 40032 40520 40110 +3 40033 40509 41113 +3 40033 41113 40677 +3 40034 40678 41114 +3 40034 41114 40510 +3 40035 40076 40215 +3 40035 40215 40146 +3 40036 40147 40216 +3 40036 40216 40077 +3 40037 40693 40744 +3 40037 40744 40074 +3 40038 40075 40745 +3 40038 40745 40694 +3 40039 41663 41716 +3 40039 41716 40040 +3 40040 41716 41664 +3 40041 40559 41595 +3 40041 41595 41133 +3 40042 41134 41596 +3 40042 41596 40562 +3 40043 40392 42172 +3 40043 42172 41882 +3 40044 41883 42173 +3 40044 42173 40393 +3 40045 40271 41148 +3 40045 41148 40915 +3 40046 40916 41149 +3 40046 41149 40272 +3 40047 40909 41419 +3 40047 41419 40543 +3 40048 40544 41420 +3 40048 41420 40910 +3 40049 40283 40877 +3 40049 40877 40671 +3 40050 40672 40878 +3 40050 40878 40284 +3 40051 40181 40225 +3 40051 40225 40076 +3 40052 40077 40226 +3 40052 40226 40182 +3 40053 40565 41280 +3 40053 41280 40788 +3 40054 40789 41281 +3 40054 41281 40566 +3 40055 41049 41874 +3 40055 41874 40883 +3 40056 40884 41875 +3 40056 41875 41050 +3 40057 40134 40217 +3 40057 40217 40102 +3 40058 40103 40218 +3 40058 40218 40135 +3 40059 40461 41991 +3 40059 41991 41611 +3 40060 41612 41992 +3 40060 41992 40462 +3 40061 41458 42272 +3 40061 42272 40949 +3 40062 40950 42273 +3 40062 42273 41459 +3 40063 40144 40537 +3 40063 40537 40434 +3 40064 40435 40538 +3 40064 40538 40145 +3 40065 40213 40214 +3 40066 40104 40231 +3 40066 40231 40181 +3 40067 40182 40232 +3 40067 40232 40105 +3 40068 40263 40517 +3 40068 40517 40267 +3 40069 40268 40518 +3 40069 40518 40264 +3 40070 40420 41763 +3 40070 41763 41431 +3 40071 41432 41764 +3 40071 41764 40421 +3 40072 41357 41582 +3 40072 41582 40384 +3 40073 40385 41583 +3 40073 41583 41358 +3 40074 40744 40741 +3 40075 40742 40745 +3 40076 40225 40215 +3 40077 40216 40226 +3 40078 41255 42133 +3 40078 42133 41007 +3 40079 41008 42134 +3 40079 42134 41256 +3 40080 41143 41318 +3 40080 41318 40311 +3 40081 40312 41319 +3 40081 41319 41144 +3 40082 40400 40587 +3 40082 40587 40221 +3 40083 40222 40588 +3 40083 40588 40401 +3 40084 41205 41775 +3 40084 41775 40689 +3 40085 40690 41776 +3 40085 41776 41206 +3 40086 41904 42447 +3 40086 42447 40697 +3 40087 40698 42448 +3 40087 42448 41905 +3 40088 40858 41091 +3 40088 41091 40313 +3 40089 40314 41092 +3 40089 41092 40859 +3 40090 40113 40755 +3 40090 40755 40713 +3 40091 40714 40756 +3 40091 40756 40114 +3 40092 40453 41284 +3 40092 41284 40937 +3 40093 40938 41285 +3 40093 41285 40454 +3 40094 40607 40753 +3 40094 40753 40113 +3 40095 40114 40754 +3 40095 40754 40608 +3 40096 41906 42410 +3 40096 42410 40685 +3 40097 40686 42411 +3 40097 42411 41907 +3 40098 40311 41171 +3 40098 41171 40925 +3 40099 40926 41172 +3 40099 41172 40312 +3 40100 40275 40609 +3 40100 40609 40406 +3 40101 40407 40610 +3 40101 40610 40276 +3 40102 40217 40249 +3 40102 40249 40104 +3 40103 40105 40250 +3 40103 40250 40218 +3 40104 40249 40231 +3 40105 40232 40250 +3 40106 40625 40853 +3 40106 40853 40375 +3 40107 40376 40854 +3 40107 40854 40626 +3 40108 40494 40743 +3 40108 40743 40493 +3 40109 40422 40519 +3 40110 40520 40423 +3 40111 40501 40739 +3 40111 40739 40351 +3 40112 40352 40740 +3 40112 40740 40502 +3 40113 40753 40755 +3 40114 40756 40754 +3 40115 40491 41635 +3 40115 41635 41276 +3 40116 41277 41636 +3 40116 41636 40492 +3 40117 40806 41115 +3 40117 41115 40432 +3 40118 40433 41116 +3 40118 41116 40807 +3 40119 40611 41427 +3 40119 41427 40935 +3 40120 40936 41428 +3 40120 41428 40612 +3 40121 40993 41286 +3 40121 41286 40408 +3 40122 40409 41287 +3 40122 41287 40994 +3 40123 41304 42491 +3 40123 42491 41407 +3 40124 41408 42492 +3 40124 42492 41305 +3 40125 42040 42379 +3 40125 42379 40541 +3 40126 40542 42380 +3 40126 42380 42041 +3 40127 41852 42428 +3 40127 42428 40794 +3 40128 40795 42429 +3 40128 42429 41853 +3 40129 40619 42506 +3 40129 42506 42098 +3 40130 42099 42507 +3 40130 42507 40620 +3 40131 40683 41443 +3 40131 41443 40684 +3 40132 40309 40893 +3 40132 40893 40735 +3 40133 40736 40894 +3 40133 40894 40310 +3 40134 40172 40277 +3 40134 40277 40217 +3 40135 40218 40278 +3 40135 40278 40172 +3 40136 40321 40985 +3 40136 40985 40818 +3 40137 40819 40986 +3 40137 40986 40322 +3 40138 40481 41167 +3 40138 41167 40847 +3 40139 40848 41168 +3 40139 41168 40482 +3 40140 40445 41235 +3 40140 41235 40921 +3 40141 40922 41236 +3 40141 41236 40446 +3 40142 41861 42200 +3 40142 42200 40792 +3 40143 40793 42201 +3 40143 42201 41862 +3 40144 40201 40615 +3 40144 40615 40537 +3 40145 40538 40616 +3 40145 40616 40202 +3 40146 40215 40323 +3 40146 40323 40213 +3 40147 40214 40324 +3 40147 40324 40216 +3 40148 41785 42196 +3 40148 42196 40623 +3 40149 40624 42197 +3 40149 42197 41786 +3 40150 41150 41820 +3 40150 41820 40879 +3 40151 40880 41821 +3 40151 41821 41151 +3 40152 41407 42483 +3 40152 42483 41341 +3 40153 41342 42484 +3 40153 42484 41408 +3 40154 40681 41031 +3 40154 41031 40549 +3 40155 40550 41032 +3 40155 41032 40682 +3 40156 40406 40659 +3 40156 40659 40400 +3 40157 40401 40660 +3 40157 40660 40407 +3 40158 40583 41478 +3 40158 41478 41069 +3 40159 41070 41479 +3 40159 41479 40584 +3 40160 40577 40845 +3 40160 40845 40483 +3 40161 40484 40846 +3 40161 40846 40578 +3 40162 40325 40589 +3 40162 40589 40402 +3 40163 40403 40590 +3 40163 40590 40326 +3 40164 40285 40645 +3 40164 40645 40511 +3 40165 40512 40646 +3 40165 40646 40286 +3 40166 40402 40603 +3 40166 40603 40353 +3 40167 40353 40604 +3 40167 40604 40403 +3 40168 41035 41920 +3 40168 41920 41049 +3 40169 41050 41921 +3 40169 41921 41036 +3 40170 41282 41411 +3 40170 41411 40253 +3 40171 40254 41412 +3 40171 41412 41283 +3 40172 40278 40277 +3 40173 40485 40939 +3 40173 40939 40675 +3 40174 40676 40940 +3 40174 40940 40486 +3 40175 40881 41369 +3 40175 41369 40653 +3 40176 40654 41370 +3 40176 41370 40882 +3 40177 40705 42333 +3 40177 42333 41902 +3 40178 41903 42334 +3 40178 42334 40706 +3 40179 41057 41932 +3 40179 41932 41035 +3 40180 41036 41933 +3 40180 41933 41058 +3 40181 40231 40341 +3 40181 40341 40225 +3 40182 40226 40342 +3 40182 40342 40232 +3 40183 40699 42389 +3 40183 42389 41938 +3 40184 41939 42390 +3 40184 42390 40700 +3 40185 40493 40796 +3 40185 40796 40501 +3 40186 40502 40797 +3 40186 40797 40494 +3 40187 40981 41335 +3 40187 41335 40531 +3 40188 40532 41336 +3 40188 41336 40982 +3 40189 40418 40855 +3 40189 40855 40657 +3 40190 40658 40856 +3 40190 40856 40419 +3 40191 40631 41268 +3 40191 41268 40836 +3 40192 40837 41269 +3 40192 41269 40632 +3 40193 41645 41944 +3 40193 41944 40491 +3 40194 40492 41945 +3 40194 41945 41646 +3 40195 40941 41135 +3 40195 41135 40388 +3 40196 40389 41136 +3 40196 41136 40942 +3 40197 40830 41233 +3 40197 41233 40601 +3 40198 40602 41234 +3 40198 41234 40831 +3 40199 41758 42345 +3 40199 42345 40841 +3 40200 40842 42346 +3 40200 42346 41759 +3 40201 40202 40637 +3 40201 40637 40615 +3 40202 40616 40637 +3 40203 40560 40891 +3 40203 40891 40577 +3 40204 40578 40892 +3 40204 40892 40561 +3 40205 41312 42626 +3 40205 42626 41627 +3 40206 41628 42627 +3 40206 42627 41313 +3 40207 40828 41081 +3 40207 41081 40487 +3 40208 40488 41082 +3 40208 41082 40829 +3 40209 40727 40849 +3 40209 40849 40380 +3 40210 40381 40850 +3 40210 40850 40728 +3 40211 40820 41712 +3 40211 41712 41109 +3 40212 41110 41713 +3 40212 41713 40821 +3 40213 40323 40364 +3 40213 40364 40214 +3 40214 40364 40324 +3 40215 40225 40365 +3 40215 40365 40323 +3 40216 40324 40366 +3 40216 40366 40226 +3 40217 40277 40356 +3 40217 40356 40249 +3 40218 40250 40357 +3 40218 40357 40278 +3 40219 41589 42015 +3 40219 42015 40664 +3 40220 40665 42016 +3 40220 42016 41590 +3 40221 40587 40715 +3 40221 40715 40315 +3 40222 40316 40716 +3 40222 40716 40588 +3 40223 40959 41872 +3 40223 41872 41169 +3 40224 41170 41873 +3 40224 41873 40960 +3 40225 40341 40365 +3 40226 40366 40342 +3 40227 40788 41450 +3 40227 41450 40872 +3 40228 40872 41451 +3 40228 41451 40789 +3 40229 40729 40887 +3 40229 40887 40426 +3 40230 40427 40888 +3 40230 40888 40730 +3 40231 40249 40369 +3 40231 40369 40341 +3 40232 40342 40370 +3 40232 40370 40250 +3 40233 40669 40899 +3 40233 40899 40513 +3 40234 40514 40900 +3 40234 40900 40670 +3 40235 41288 41637 +3 40235 41637 40605 +3 40236 40606 41638 +3 40236 41638 41289 +3 40237 41532 41748 +3 40237 41748 40438 +3 40238 40439 41749 +3 40238 41749 41533 +3 40239 41223 42307 +3 40239 42307 41397 +3 40240 41398 42308 +3 40240 42308 41224 +3 40241 41721 42297 +3 40241 42297 40843 +3 40242 40844 42298 +3 40242 42298 41722 +3 40243 41791 42760 +3 40243 42760 41347 +3 40244 41348 42761 +3 40244 42761 41792 +3 40245 41351 41540 +3 40245 41540 40459 +3 40246 40460 41541 +3 40246 41541 41352 +3 40247 40814 41415 +3 40247 41415 40830 +3 40248 40831 41416 +3 40248 41416 40815 +3 40249 40356 40369 +3 40250 40370 40357 +3 40251 40449 41077 +3 40251 41077 40866 +3 40252 40867 41078 +3 40252 41078 40450 +3 40253 41411 41456 +3 40253 41456 40288 +3 40254 40288 41457 +3 40254 41457 41412 +3 40255 41639 42078 +3 40255 42078 40719 +3 40256 40720 42079 +3 40256 42079 41640 +3 40257 41101 41470 +3 40257 41470 40629 +3 40258 40630 41471 +3 40258 41471 41102 +3 40259 40804 42157 +3 40259 42157 41621 +3 40260 41622 42158 +3 40260 42158 40805 +3 40261 40836 41423 +3 40261 41423 40814 +3 40262 40815 41424 +3 40262 41424 40837 +3 40263 40434 40717 +3 40263 40717 40517 +3 40264 40518 40718 +3 40264 40718 40435 +3 40265 41391 42301 +3 40265 42301 41255 +3 40266 41256 42302 +3 40266 42302 41392 +3 40267 40517 40691 +3 40267 40691 40422 +3 40268 40423 40692 +3 40268 40692 40518 +3 40269 40774 41117 +3 40269 41117 40625 +3 40270 40626 41118 +3 40270 41118 40775 +3 40271 40471 41339 +3 40271 41339 41148 +3 40272 41149 41340 +3 40272 41340 40472 +3 40273 40442 41389 +3 40273 41389 41073 +3 40274 41074 41390 +3 40274 41390 40443 +3 40275 40410 40749 +3 40275 40749 40609 +3 40276 40610 40750 +3 40276 40750 40411 +3 40277 40278 40379 +3 40277 40379 40356 +3 40278 40357 40379 +3 40279 40617 41176 +3 40279 41176 40832 +3 40280 40833 41177 +3 40280 41177 40618 +3 40281 40943 41197 +3 40281 41197 40535 +3 40282 40536 41198 +3 40282 41198 40944 +3 40283 40382 41064 +3 40283 41064 40877 +3 40284 40878 41065 +3 40284 41065 40383 +3 40285 40367 40723 +3 40285 40723 40645 +3 40286 40646 40724 +3 40286 40724 40368 +3 40287 41041 42267 +3 40287 42267 41042 +3 40288 41456 41457 +3 40289 41292 41515 +3 40289 41515 40651 +3 40290 40652 41516 +3 40290 41516 41293 +3 40291 41037 41480 +3 40291 41480 40711 +3 40292 40712 41481 +3 40292 41481 41038 +3 40293 40731 41754 +3 40293 41754 41329 +3 40294 41330 41755 +3 40294 41755 40732 +3 40295 41528 41918 +3 40295 41918 40973 +3 40296 40974 41919 +3 40296 41919 41529 +3 40297 40953 42571 +3 40297 42571 41940 +3 40298 41941 42572 +3 40298 42572 40954 +3 40299 40721 41025 +3 40299 41025 40640 +3 40300 40640 41026 +3 40300 41026 40722 +3 40301 40647 41015 +3 40301 41015 40721 +3 40302 40722 41016 +3 40302 41016 40648 +3 40303 40675 41139 +3 40303 41139 40774 +3 40304 40775 41140 +3 40304 41140 40676 +3 40305 41448 41818 +3 40305 41818 40707 +3 40306 40708 41819 +3 40306 41819 41449 +3 40307 40573 40991 +3 40307 40991 40763 +3 40308 40764 40992 +3 40308 40992 40574 +3 40309 40424 41029 +3 40309 41029 40893 +3 40310 40894 41030 +3 40310 41030 40425 +3 40311 41318 41171 +3 40312 41172 41319 +3 40313 41091 41260 +3 40313 41260 40471 +3 40314 40472 41261 +3 40314 41261 41092 +3 40315 40715 40751 +3 40315 40751 40367 +3 40316 40368 40752 +3 40316 40752 40716 +3 40317 41248 42459 +3 40317 42459 41584 +3 40318 41585 42460 +3 40318 42460 41249 +3 40319 40929 42363 +3 40319 42363 41746 +3 40320 41747 42364 +3 40320 42364 40930 +3 40321 40388 41095 +3 40321 41095 40985 +3 40322 40986 41096 +3 40322 41096 40389 +3 40323 40365 40398 +3 40323 40398 40364 +3 40324 40364 40399 +3 40324 40399 40366 +3 40325 40511 40770 +3 40325 40770 40589 +3 40326 40590 40771 +3 40326 40771 40512 +3 40327 40868 41238 +3 40327 41238 40687 +3 40328 40688 41239 +3 40328 41239 40869 +3 40329 41462 42210 +3 40329 42210 41111 +3 40330 41112 42211 +3 40330 42211 41463 +3 40331 41425 42166 +3 40331 42166 41083 +3 40332 41084 42167 +3 40332 42167 41426 +3 40333 40826 42253 +3 40333 42253 41773 +3 40334 41774 42254 +3 40334 42254 40827 +3 40335 40790 42204 +3 40335 42204 41737 +3 40336 41738 42205 +3 40336 42205 40791 +3 40337 40649 41696 +3 40337 41696 41417 +3 40338 41418 41697 +3 40338 41697 40650 +3 40339 40525 42096 +3 40339 42096 41922 +3 40340 41923 42097 +3 40340 42097 40526 +3 40341 40369 40404 +3 40341 40404 40365 +3 40342 40366 40405 +3 40342 40405 40370 +3 40343 41184 41678 +3 40343 41678 40834 +3 40344 40835 41679 +3 40344 41679 41185 +3 40345 40701 41460 +3 40345 41460 41051 +3 40346 41052 41461 +3 40346 41461 40702 +3 40347 41087 41647 +3 40347 41647 40909 +3 40348 40910 41648 +3 40348 41648 41088 +3 40349 41397 42287 +3 40349 42287 41391 +3 40350 41392 42288 +3 40350 42288 41398 +3 40351 40739 40889 +3 40351 40889 40497 +3 40352 40498 40890 +3 40352 40890 40740 +3 40353 40603 40746 +3 40353 40746 40604 +3 40354 40945 41373 +3 40354 41373 40747 +3 40355 40748 41374 +3 40355 41374 40946 +3 40356 40379 40412 +3 40356 40412 40369 +3 40357 40370 40413 +3 40357 40413 40379 +3 40358 40638 41597 +3 40358 41597 41343 +3 40359 41344 41598 +3 40359 41598 40639 +3 40360 40657 40975 +3 40360 40975 40669 +3 40361 40670 40976 +3 40361 40976 40658 +3 40362 41055 41314 +3 40362 41314 40579 +3 40363 40580 41315 +3 40363 41315 41056 +3 40364 40398 40399 +3 40365 40404 40398 +3 40366 40399 40405 +3 40367 40751 40723 +3 40368 40724 40752 +3 40369 40412 40404 +3 40370 40405 40413 +3 40371 41316 41704 +3 40371 41704 40761 +3 40372 40762 41705 +3 40372 41705 41317 +3 40373 40635 41558 +3 40373 41558 41290 +3 40374 41291 41559 +3 40374 41559 40636 +3 40375 40853 41067 +3 40375 41067 40557 +3 40376 40558 41068 +3 40376 41068 40854 +3 40377 40671 41193 +3 40377 41193 40903 +3 40378 40904 41194 +3 40378 41194 40672 +3 40379 40413 40412 +3 40380 40849 40961 +3 40380 40961 40489 +3 40381 40490 40962 +3 40381 40962 40850 +3 40382 40451 41163 +3 40382 41163 41064 +3 40383 41065 41164 +3 40383 41164 40452 +3 40384 41582 41850 +3 40384 41850 40638 +3 40385 40639 41851 +3 40385 41851 41583 +3 40386 40965 41888 +3 40386 41888 41264 +3 40387 41265 41889 +3 40387 41889 40966 +3 40388 41135 41095 +3 40389 41096 41136 +3 40390 41215 41970 +3 40390 41970 41227 +3 40391 41228 41971 +3 40391 41971 41216 +3 40392 41781 42172 +3 40393 42173 41782 +3 40394 41169 41987 +3 40394 41987 41215 +3 40395 41216 41988 +3 40395 41988 41170 +3 40396 41227 41993 +3 40396 41993 41150 +3 40397 41151 41994 +3 40397 41994 41228 +3 40398 40404 40444 +3 40398 40444 40399 +3 40399 40444 40405 +3 40400 40659 40822 +3 40400 40822 40587 +3 40401 40588 40823 +3 40401 40823 40660 +3 40402 40589 40778 +3 40402 40778 40603 +3 40403 40604 40779 +3 40403 40779 40590 +3 40404 40412 40444 +3 40405 40444 40413 +3 40406 40609 40824 +3 40406 40824 40659 +3 40407 40660 40825 +3 40407 40825 40610 +3 40408 41286 41521 +3 40408 41521 40881 +3 40409 40882 41522 +3 40409 41522 41287 +3 40410 40519 40810 +3 40410 40810 40749 +3 40411 40750 40811 +3 40411 40811 40520 +3 40412 40413 40444 +3 40414 40759 42055 +3 40414 42055 41728 +3 40415 41729 42056 +3 40415 42056 40760 +3 40416 41809 42828 +3 40416 42828 41513 +3 40417 41514 42829 +3 40417 42829 41810 +3 40418 40594 41043 +3 40418 41043 40855 +3 40419 40856 41044 +3 40419 41044 40595 +3 40420 40905 42048 +3 40420 42048 41763 +3 40421 41764 42049 +3 40421 42049 40906 +3 40422 40691 40772 +3 40422 40772 40519 +3 40423 40520 40773 +3 40423 40773 40692 +3 40424 40763 41131 +3 40424 41131 41029 +3 40425 41030 41132 +3 40425 41132 40764 +3 40426 40887 41003 +3 40426 41003 40545 +3 40427 40546 41004 +3 40427 41004 40888 +3 40428 41097 41688 +3 40428 41688 41121 +3 40429 41122 41689 +3 40429 41689 41098 +3 40430 40851 42153 +3 40430 42153 41698 +3 40431 41699 42154 +3 40431 42154 40852 +3 40432 41115 41363 +3 40432 41363 40551 +3 40433 40552 41364 +3 40433 41364 41116 +3 40434 40537 40802 +3 40434 40802 40717 +3 40435 40718 40803 +3 40435 40803 40538 +3 40436 42019 42467 +3 40436 42467 41323 +3 40437 41324 42468 +3 40437 42468 42020 +3 40438 41748 41892 +3 40438 41892 40555 +3 40439 40556 41893 +3 40439 41893 41749 +3 40440 41069 41878 +3 40440 41878 41229 +3 40441 41230 41879 +3 40441 41879 41070 +3 40442 40539 41496 +3 40442 41496 41389 +3 40443 41390 41497 +3 40443 41497 40540 +3 40445 40677 41476 +3 40445 41476 41235 +3 40446 41236 41477 +3 40446 41477 40678 +3 40447 41051 41719 +3 40447 41719 41097 +3 40448 41098 41720 +3 40448 41720 41052 +3 40449 40571 41219 +3 40449 41219 41077 +3 40450 41078 41220 +3 40450 41220 40572 +3 40451 40452 41188 +3 40451 41188 41163 +3 40452 41164 41188 +3 40453 40673 41523 +3 40453 41523 41284 +3 40454 41285 41524 +3 40454 41524 40674 +3 40455 41830 42343 +3 40455 42343 41013 +3 40456 41014 42344 +3 40456 42344 41831 +3 40457 41121 41730 +3 40457 41730 41037 +3 40458 41038 41731 +3 40458 41731 41122 +3 40459 41540 41673 +3 40459 41673 40581 +3 40460 40582 41674 +3 40460 41674 41541 +3 40461 40776 42274 +3 40461 42274 41991 +3 40462 41992 42275 +3 40462 42275 40777 +3 40463 41221 41886 +3 40463 41886 41101 +3 40464 41102 41887 +3 40464 41887 41222 +3 40465 41276 42305 +3 40465 42305 41517 +3 40466 41518 42306 +3 40466 42306 41277 +3 40467 41525 42990 +3 40467 42990 42023 +3 40468 42024 42991 +3 40468 42991 41526 +3 40469 40832 41353 +3 40469 41353 40919 +3 40470 40920 41354 +3 40470 41354 40833 +3 40471 41260 41339 +3 40472 41340 41261 +3 40473 42123 42792 +3 40473 42792 41209 +3 40474 41210 42793 +3 40474 42793 42124 +3 40475 40935 41671 +3 40475 41671 41189 +3 40476 41190 41672 +3 40476 41672 40936 +3 40477 41399 41876 +3 40477 41876 40917 +3 40478 40918 41877 +3 40478 41877 41400 +3 40479 40919 41375 +3 40479 41375 40868 +3 40480 40869 41376 +3 40480 41376 40920 +3 40481 40733 41435 +3 40481 41435 41167 +3 40482 41168 41436 +3 40482 41436 40734 +3 40483 40845 41105 +3 40483 41105 40729 +3 40484 40730 41106 +3 40484 41106 40846 +3 40485 40735 41213 +3 40485 41213 40939 +3 40486 40940 41214 +3 40486 41214 40736 +3 40487 41081 41439 +3 40487 41439 40806 +3 40488 40807 41440 +3 40488 41440 41082 +3 40489 40961 41047 +3 40489 41047 40560 +3 40490 40561 41048 +3 40490 41048 40962 +3 40491 41944 41635 +3 40492 41636 41945 +3 40493 40743 41071 +3 40493 41071 40796 +3 40494 40797 41072 +3 40494 41072 40743 +3 40495 40895 42007 +3 40495 42007 41562 +3 40496 41563 42008 +3 40496 42008 40896 +3 40497 40889 40999 +3 40497 40999 40607 +3 40498 40608 41000 +3 40498 41000 40890 +3 40499 40857 41371 +3 40499 41371 40945 +3 40500 40946 41372 +3 40500 41372 40857 +3 40501 40796 41053 +3 40501 41053 40739 +3 40502 40740 41054 +3 40502 41054 40797 +3 40503 41157 42418 +3 40503 42418 41769 +3 40504 41772 42419 +3 40504 42419 41158 +3 40505 41564 42080 +3 40505 42080 40983 +3 40506 40984 42081 +3 40506 42081 41565 +3 40507 41253 42731 +3 40507 42731 42051 +3 40508 42052 42732 +3 40508 42732 41254 +3 40509 40847 41490 +3 40509 41490 41113 +3 40510 41114 41491 +3 40510 41491 40848 +3 40511 40645 40907 +3 40511 40907 40770 +3 40512 40771 40908 +3 40512 40908 40646 +3 40513 40899 41127 +3 40513 41127 40727 +3 40514 40728 41128 +3 40514 41128 40900 +3 40515 41201 41934 +3 40515 41934 41221 +3 40516 41222 41935 +3 40516 41935 41202 +3 40517 40717 40870 +3 40517 40870 40691 +3 40518 40692 40871 +3 40518 40871 40718 +3 40519 40772 40810 +3 40520 40811 40773 +3 40521 41627 42870 +3 40521 42870 41858 +3 40522 41859 42871 +3 40522 42871 41628 +3 40523 41229 41942 +3 40523 41942 41201 +3 40524 41202 41943 +3 40524 41943 41230 +3 40525 40569 42224 +3 40525 42224 42096 +3 40526 42097 42225 +3 40526 42225 40570 +3 40527 42076 42748 +3 40527 42748 41242 +3 40528 41243 42749 +3 40528 42749 42077 +3 40529 41783 42622 +3 40529 42622 41458 +3 40530 41459 42623 +3 40530 42623 41784 +3 40531 41335 41580 +3 40531 41580 40767 +3 40532 40768 41581 +3 40532 41581 41336 +3 40533 40951 42143 +3 40533 42143 41665 +3 40534 41666 42144 +3 40534 42144 40952 +3 40535 41197 41383 +3 40535 41383 40681 +3 40536 40682 41384 +3 40536 41384 41198 +3 40537 40615 40901 +3 40537 40901 40802 +3 40538 40803 40902 +3 40538 40902 40616 +3 40539 40598 41570 +3 40539 41570 41496 +3 40540 41497 41571 +3 40540 41571 40599 +3 40541 42379 42662 +3 40541 42662 40862 +3 40542 40863 42663 +3 40542 42663 42380 +3 40543 41419 41863 +3 40543 41863 40927 +3 40544 40928 41864 +3 40544 41864 41420 +3 40545 41003 41107 +3 40545 41107 40613 +3 40546 40614 41108 +3 40546 41108 41004 +3 40547 41191 42226 +3 40547 42226 41578 +3 40548 41579 42227 +3 40548 42227 41192 +3 40549 41031 41381 +3 40549 41381 40828 +3 40550 40829 41382 +3 40550 41382 41032 +3 40551 41363 41441 +3 40551 41441 40627 +3 40552 40628 41442 +3 40552 41442 41364 +3 40553 41732 42391 +3 40553 42391 41217 +3 40554 41218 42392 +3 40554 42392 41732 +3 40555 41892 41968 +3 40555 41968 40591 +3 40556 40591 41969 +3 40556 41969 41893 +3 40557 41067 41211 +3 40557 41211 40693 +3 40558 40694 41212 +3 40558 41212 41068 +3 40559 41161 42251 +3 40559 42251 41595 +3 40560 41047 40891 +3 40561 40892 41048 +3 40562 41596 42252 +3 40562 42252 41162 +3 40563 40997 42033 +3 40563 42033 41519 +3 40564 41520 42034 +3 40564 42034 40998 +3 40565 40937 41680 +3 40565 41680 41280 +3 40566 41281 41681 +3 40566 41681 40938 +3 40567 41129 42915 +3 40567 42915 42381 +3 40568 42382 42916 +3 40568 42916 41130 +3 40569 40570 42246 +3 40569 42246 42224 +3 40570 42225 42246 +3 40571 40741 41300 +3 40571 41300 41219 +3 40572 41220 41301 +3 40572 41301 40742 +3 40573 40903 41387 +3 40573 41387 40991 +3 40574 40992 41388 +3 40574 41388 40904 +3 40575 41123 42882 +3 40575 42882 42383 +3 40576 42384 42883 +3 40576 42883 41124 +3 40577 40891 41207 +3 40577 41207 40845 +3 40578 40846 41208 +3 40578 41208 40892 +3 40579 41314 41500 +3 40579 41500 40757 +3 40580 40758 41501 +3 40580 41501 41315 +3 40581 41673 41779 +3 40581 41779 40655 +3 40582 40656 41780 +3 40582 41780 41674 +3 40583 40911 41840 +3 40583 41840 41478 +3 40584 41479 41841 +3 40584 41841 40912 +3 40585 41488 42804 +3 40585 42804 42005 +3 40586 42006 42805 +3 40586 42805 41489 +3 40587 40822 40955 +3 40587 40955 40715 +3 40588 40716 40956 +3 40588 40956 40823 +3 40589 40770 40971 +3 40589 40971 40778 +3 40590 40779 40972 +3 40590 40972 40771 +3 40591 41968 41969 +3 40592 41793 42339 +3 40592 42339 41141 +3 40593 41142 42340 +3 40593 42340 41794 +3 40594 40713 41186 +3 40594 41186 41043 +3 40595 41044 41187 +3 40595 41187 40714 +3 40596 41133 42088 +3 40596 42088 41527 +3 40597 41527 42089 +3 40597 42089 41134 +3 40598 40599 41588 +3 40598 41588 41570 +3 40599 41571 41588 +3 40600 41206 42192 +3 40600 42192 41205 +3 40601 41233 41546 +3 40601 41546 40858 +3 40602 40859 41547 +3 40602 41547 41234 +3 40603 40778 40923 +3 40603 40923 40746 +3 40604 40746 40924 +3 40604 40924 40779 +3 40605 41637 41952 +3 40605 41952 41184 +3 40606 41185 41953 +3 40606 41953 41638 +3 40607 40999 41182 +3 40607 41182 40753 +3 40608 40754 41183 +3 40608 41183 41000 +3 40609 40749 40967 +3 40609 40967 40824 +3 40610 40825 40968 +3 40610 40968 40750 +3 40611 40957 41815 +3 40611 41815 41427 +3 40612 41428 41816 +3 40612 41816 40958 +3 40613 41107 41147 +3 40613 41147 40614 +3 40614 41147 41108 +3 40615 40637 40931 +3 40615 40931 40901 +3 40616 40902 40932 +3 40616 40932 40637 +3 40617 40818 41433 +3 40617 41433 41176 +3 40618 41177 41434 +3 40618 41434 40819 +3 40619 40977 42846 +3 40619 42846 42506 +3 40620 42507 42847 +3 40620 42847 40978 +3 40621 41270 42903 +3 40621 42903 42311 +3 40622 42312 42904 +3 40622 42904 41271 +3 40623 42196 42557 +3 40623 42557 40963 +3 40624 40964 42558 +3 40624 42558 42197 +3 40625 41117 41413 +3 40625 41413 40853 +3 40626 40854 41414 +3 40626 41414 41118 +3 40627 41441 41502 +3 40627 41502 40661 +3 40628 40661 41503 +3 40628 41503 41442 +3 40629 41470 41752 +3 40629 41752 40875 +3 40630 40876 41753 +3 40630 41753 41471 +3 40631 40921 41623 +3 40631 41623 41268 +3 40632 41269 41624 +3 40632 41624 40922 +3 40633 41607 42184 +3 40633 42184 41180 +3 40634 41181 42185 +3 40634 42185 41608 +3 40635 40800 41964 +3 40635 41964 41558 +3 40636 41559 41965 +3 40636 41965 40801 +3 40637 40932 40931 +3 40638 41850 41597 +3 40639 41598 41851 +3 40640 41025 41322 +3 40640 41322 41026 +3 40641 41584 42693 +3 40641 42693 41846 +3 40642 41847 42694 +3 40642 42694 41585 +3 40643 41912 43017 +3 40643 43017 41809 +3 40644 41810 43018 +3 40644 43018 41913 +3 40645 40723 40989 +3 40645 40989 40907 +3 40646 40908 40990 +3 40646 40990 40724 +3 40647 40866 41327 +3 40647 41327 41015 +3 40648 41016 41328 +3 40648 41328 40867 +3 40649 40838 41962 +3 40649 41962 41696 +3 40650 41697 41963 +3 40650 41963 40839 +3 40651 41515 41803 +3 40651 41803 40897 +3 40652 40898 41804 +3 40652 41804 41516 +3 40653 41369 41742 +3 40653 41742 40981 +3 40654 40982 41743 +3 40654 41743 41370 +3 40655 41779 41817 +3 40655 41817 40656 +3 40656 41817 41780 +3 40657 40855 41244 +3 40657 41244 40975 +3 40658 40976 41245 +3 40658 41245 40856 +3 40659 40824 41011 +3 40659 41011 40822 +3 40660 40823 41012 +3 40660 41012 40825 +3 40661 41502 41503 +3 40662 41692 42487 +3 40662 42487 41462 +3 40663 41463 42488 +3 40663 42488 41693 +3 40664 42015 42385 +3 40664 42385 41005 +3 40665 41006 42386 +3 40665 42386 42016 +3 40666 41858 43002 +3 40666 43002 41912 +3 40667 41913 43003 +3 40667 43003 41859 +3 40668 41088 41762 +3 40668 41762 41087 +3 40669 40975 41257 +3 40669 41257 40899 +3 40670 40900 41258 +3 40670 41258 40976 +3 40671 40877 41446 +3 40671 41446 41193 +3 40672 41194 41447 +3 40672 41447 40878 +3 40673 40915 41690 +3 40673 41690 41523 +3 40674 41524 41691 +3 40674 41691 40916 +3 40675 40939 41452 +3 40675 41452 41139 +3 40676 41140 41453 +3 40676 41453 40940 +3 40677 41113 41603 +3 40677 41603 41476 +3 40678 41477 41604 +3 40678 41604 41114 +3 40679 41641 42046 +3 40679 42046 40987 +3 40680 40988 42047 +3 40680 42047 41642 +3 40681 41383 41486 +3 40681 41486 41031 +3 40682 41032 41487 +3 40682 41487 41384 +3 40683 41109 41910 +3 40683 41910 41443 +3 40684 41443 41911 +3 40684 41911 41110 +3 40685 42410 42836 +3 40685 42836 41165 +3 40686 41166 42837 +3 40686 42837 42411 +3 40687 41238 41530 +3 40687 41530 40943 +3 40688 40944 41531 +3 40688 41531 41239 +3 40689 41775 42259 +3 40689 42259 41178 +3 40690 41179 42260 +3 40690 42260 41776 +3 40691 40870 40995 +3 40691 40995 40772 +3 40692 40773 40996 +3 40692 40996 40871 +3 40693 41211 41294 +3 40693 41294 40744 +3 40694 40745 41295 +3 40694 41295 41212 +3 40695 41246 42393 +3 40695 42393 41805 +3 40696 41806 42394 +3 40696 42394 41247 +3 40697 42447 42890 +3 40697 42890 41159 +3 40698 41160 42891 +3 40698 42891 42448 +3 40699 41325 42726 +3 40699 42726 42389 +3 40700 42390 42727 +3 40700 42727 41326 +3 40701 40925 41750 +3 40701 41750 41460 +3 40702 41461 41751 +3 40702 41751 40926 +3 40703 42121 43110 +3 40703 43110 41791 +3 40704 41792 43111 +3 40704 43111 42122 +3 40705 41119 42720 +3 40705 42720 42333 +3 40706 42334 42721 +3 40706 42721 41120 +3 40707 41818 42174 +3 40707 42174 41021 +3 40708 41022 42175 +3 40708 42175 41819 +3 40709 41517 42508 +3 40709 42508 41684 +3 40710 41685 42509 +3 40710 42509 41518 +3 40711 41480 41844 +3 40711 41844 40993 +3 40712 40994 41845 +3 40712 41845 41481 +3 40713 40755 41262 +3 40713 41262 41186 +3 40714 41187 41263 +3 40714 41263 40756 +3 40715 40955 41033 +3 40715 41033 40751 +3 40716 40752 41034 +3 40716 41034 40956 +3 40717 40802 41027 +3 40717 41027 40870 +3 40718 40871 41028 +3 40718 41028 40803 +3 40719 42078 42424 +3 40719 42424 41009 +3 40720 41010 42425 +3 40720 42425 42079 +3 40721 41015 41409 +3 40721 41409 41025 +3 40722 41026 41410 +3 40722 41410 41016 +3 40723 40751 41039 +3 40723 41039 40989 +3 40724 40990 41040 +3 40724 41040 40752 +3 40725 41896 42240 +3 40725 42240 41059 +3 40726 41060 42241 +3 40726 42241 41897 +3 40727 41127 41298 +3 40727 41298 40849 +3 40728 40850 41299 +3 40728 41299 41128 +3 40729 41105 41310 +3 40729 41310 40887 +3 40730 40888 41311 +3 40730 41311 41106 +3 40731 41062 42117 +3 40731 42117 41754 +3 40732 41755 42118 +3 40732 42118 41063 +3 40733 41073 41789 +3 40733 41789 41435 +3 40734 41436 41790 +3 40734 41790 41074 +3 40735 40893 41429 +3 40735 41429 41213 +3 40736 41214 41430 +3 40736 41430 40894 +3 40737 41393 42880 +3 40737 42880 42285 +3 40738 42286 42881 +3 40738 42881 41394 +3 40739 41053 41250 +3 40739 41250 40889 +3 40740 40890 41251 +3 40740 41251 41054 +3 40741 40744 41337 +3 40741 41337 41300 +3 40742 41301 41338 +3 40742 41338 40745 +3 40743 41072 41259 +3 40743 41259 41071 +3 40744 41294 41337 +3 40745 41338 41295 +3 40746 40923 41066 +3 40746 41066 40924 +3 40747 41373 41682 +3 40747 41682 41055 +3 40748 41056 41683 +3 40748 41683 41374 +3 40749 40810 41093 +3 40749 41093 40967 +3 40750 40968 41094 +3 40750 41094 40811 +3 40751 41033 41039 +3 40752 41040 41034 +3 40753 41182 41274 +3 40753 41274 40755 +3 40754 40756 41275 +3 40754 41275 41183 +3 40755 41274 41262 +3 40756 41263 41275 +3 40757 41500 41615 +3 40757 41615 40941 +3 40758 40942 41616 +3 40758 41616 41501 +3 40759 41017 42276 +3 40759 42276 42055 +3 40760 42056 42277 +3 40760 42277 41018 +3 40761 41704 42062 +3 40761 42062 41075 +3 40762 41076 42063 +3 40762 42063 41705 +3 40763 40991 41421 +3 40763 41421 41131 +3 40764 41132 41422 +3 40764 41422 40992 +3 40765 41395 42840 +3 40765 42840 42247 +3 40766 42248 42841 +3 40766 42841 41396 +3 40767 41580 41981 +3 40767 41981 41145 +3 40768 41146 41982 +3 40768 41982 41581 +3 40769 41549 42762 +3 40769 42762 41548 +3 40770 40907 41152 +3 40770 41152 40971 +3 40771 40972 41153 +3 40771 41153 40908 +3 40772 40995 41089 +3 40772 41089 40810 +3 40773 40811 41090 +3 40773 41090 40996 +3 40774 41139 41544 +3 40774 41544 41117 +3 40775 41118 41545 +3 40775 41545 41140 +3 40776 41059 42559 +3 40776 42559 42274 +3 40777 42275 42560 +3 40777 42560 41060 +3 40778 40971 41173 +3 40778 41173 40923 +3 40779 40924 41174 +3 40779 41174 40972 +3 40780 41972 42886 +3 40780 42886 41783 +3 40781 41784 42887 +3 40781 42887 41973 +3 40782 41684 42575 +3 40782 42575 41667 +3 40783 41668 42576 +3 40783 42576 41685 +3 40784 42244 42854 +3 40784 42854 41454 +3 40785 41455 42855 +3 40785 42855 42245 +3 40786 41667 42585 +3 40786 42585 41692 +3 40787 41693 42586 +3 40787 42586 41668 +3 40788 41280 41954 +3 40788 41954 41450 +3 40789 41451 41955 +3 40789 41955 41281 +3 40790 41225 42600 +3 40790 42600 42204 +3 40791 42205 42601 +3 40791 42601 41226 +3 40792 42200 42708 +3 40792 42708 41385 +3 40793 41386 42709 +3 40793 42709 42201 +3 40794 42428 42606 +3 40794 42606 40969 +3 40795 40970 42607 +3 40795 42607 42429 +3 40796 41071 41365 +3 40796 41365 41053 +3 40797 41054 41366 +3 40797 41366 41072 +3 40798 41846 42874 +3 40798 42874 41958 +3 40799 41959 42875 +3 40799 42875 41847 +3 40800 40933 42108 +3 40800 42108 41964 +3 40801 41965 42109 +3 40801 42109 40934 +3 40802 40901 41154 +3 40802 41154 41027 +3 40803 41028 41155 +3 40803 41155 40902 +3 40804 40979 42365 +3 40804 42365 42157 +3 40805 42158 42366 +3 40805 42366 40980 +3 40806 41439 41733 +3 40806 41733 41115 +3 40807 41116 41734 +3 40807 41734 41440 +3 40808 42131 43006 +3 40808 43006 41781 +3 40809 41782 43007 +3 40809 43007 42132 +3 40810 41089 41093 +3 40811 41094 41090 +3 40812 41562 42522 +3 40812 42522 41865 +3 40813 41866 42523 +3 40813 42523 41563 +3 40814 41423 41930 +3 40814 41930 41415 +3 40815 41416 41931 +3 40815 41931 41424 +3 40816 41593 42685 +3 40816 42685 41976 +3 40817 41977 42686 +3 40817 42686 41594 +3 40818 40985 41601 +3 40818 41601 41433 +3 40819 41434 41602 +3 40819 41602 40986 +3 40820 41329 42230 +3 40820 42230 41712 +3 40821 41713 42231 +3 40821 42231 41330 +3 40822 41011 41195 +3 40822 41195 40955 +3 40823 40956 41196 +3 40823 41196 41012 +3 40824 40967 41199 +3 40824 41199 41011 +3 40825 41012 41200 +3 40825 41200 40968 +3 40826 41272 42668 +3 40826 42668 42253 +3 40827 42254 42669 +3 40827 42669 41273 +3 40828 41381 41617 +3 40828 41617 41081 +3 40829 41082 41618 +3 40829 41618 41382 +3 40830 41415 41836 +3 40830 41836 41233 +3 40831 41234 41837 +3 40831 41837 41416 +3 40832 41176 41651 +3 40832 41651 41353 +3 40833 41354 41652 +3 40833 41652 41177 +3 40834 41678 42182 +3 40834 42182 41316 +3 40835 41317 42183 +3 40835 42183 41679 +3 40836 41268 41870 +3 40836 41870 41423 +3 40837 41424 41871 +3 40837 41871 41269 +3 40838 41085 42137 +3 40838 42137 41962 +3 40839 41963 42138 +3 40839 42138 41086 +3 40840 41400 42195 +3 40840 42195 41399 +3 40841 42345 42838 +3 40841 42838 41401 +3 40842 41402 42839 +3 40842 42839 42346 +3 40843 42297 42765 +3 40843 42765 41367 +3 40844 41368 42766 +3 40844 42766 42298 +3 40845 41207 41468 +3 40845 41468 41105 +3 40846 41106 41469 +3 40846 41469 41208 +3 40847 41167 41828 +3 40847 41828 41490 +3 40848 41491 41829 +3 40848 41829 41168 +3 40849 41298 41437 +3 40849 41437 40961 +3 40850 40962 41438 +3 40850 41438 41299 +3 40851 41578 42531 +3 40851 42531 42153 +3 40852 42154 42532 +3 40852 42532 41579 +3 40853 41413 41619 +3 40853 41619 41067 +3 40854 41068 41620 +3 40854 41620 41414 +3 40855 41043 41474 +3 40855 41474 41244 +3 40856 41245 41475 +3 40856 41475 41044 +3 40857 41372 41677 +3 40857 41677 41371 +3 40858 41546 41797 +3 40858 41797 41091 +3 40859 41092 41798 +3 40859 41798 41547 +3 40860 42023 43338 +3 40860 43338 42279 +3 40861 42280 43339 +3 40861 43339 42024 +3 40862 42662 42281 +3 40863 42282 42663 +3 40864 41958 42866 +3 40864 42866 41972 +3 40865 41973 42867 +3 40865 42867 41959 +3 40866 41077 41536 +3 40866 41536 41327 +3 40867 41328 41537 +3 40867 41537 41078 +3 40868 41375 41739 +3 40868 41739 41238 +3 40869 41239 41740 +3 40869 41740 41376 +3 40870 41027 41203 +3 40870 41203 40995 +3 40871 40996 41204 +3 40871 41204 41028 +3 40872 41450 41867 +3 40872 41867 41451 +3 40873 41795 42953 +3 40873 42953 42479 +3 40874 42480 42954 +3 40874 42954 41796 +3 40875 41752 41997 +3 40875 41997 41085 +3 40876 41086 41998 +3 40876 41998 41753 +3 40877 41064 41631 +3 40877 41631 41446 +3 40878 41447 41632 +3 40878 41632 41065 +3 40879 41820 42218 +3 40879 42218 41288 +3 40880 41289 42219 +3 40880 42219 41821 +3 40881 41521 42021 +3 40881 42021 41369 +3 40882 41370 42022 +3 40882 42022 41522 +3 40883 41874 42565 +3 40883 42565 41641 +3 40884 41642 42566 +3 40884 42566 41875 +3 40885 41698 42818 +3 40885 42818 42072 +3 40886 42073 42819 +3 40886 42819 41699 +3 40887 41310 41464 +3 40887 41464 41003 +3 40888 41004 41465 +3 40888 41465 41311 +3 40889 41250 41405 +3 40889 41405 40999 +3 40890 41000 41406 +3 40890 41406 41251 +3 40891 41047 41403 +3 40891 41403 41207 +3 40892 41208 41404 +3 40892 41404 41048 +3 40893 41029 41576 +3 40893 41576 41429 +3 40894 41430 41577 +3 40894 41577 41030 +3 40895 41264 42357 +3 40895 42357 42007 +3 40896 42008 42358 +3 40896 42358 41265 +3 40897 41803 42057 +3 40897 42057 41143 +3 40898 41144 42058 +3 40898 42058 41804 +3 40899 41257 41492 +3 40899 41492 41127 +3 40900 41128 41493 +3 40900 41493 41258 +3 40901 40931 41231 +3 40901 41231 41154 +3 40902 41155 41232 +3 40902 41232 40932 +3 40903 41193 41653 +3 40903 41653 41387 +3 40904 41388 41654 +3 40904 41654 41194 +3 40905 41099 42236 +3 40905 42236 42048 +3 40906 42049 42237 +3 40906 42237 41100 +3 40907 40989 41266 +3 40907 41266 41152 +3 40908 41153 41267 +3 40908 41267 40990 +3 40909 41647 42188 +3 40909 42188 41419 +3 40910 41420 42189 +3 40910 42189 41648 +3 40911 41189 42115 +3 40911 42115 41840 +3 40912 41841 42116 +3 40912 42116 41190 +3 40913 41659 43301 +3 40913 43301 42602 +3 40914 42603 43302 +3 40914 43302 41660 +3 40915 41148 41948 +3 40915 41948 41690 +3 40916 41691 41949 +3 40916 41949 41149 +3 40917 41876 42469 +3 40917 42469 41564 +3 40918 41565 42470 +3 40918 42470 41877 +3 40919 41353 41880 +3 40919 41880 41375 +3 40920 41376 41881 +3 40920 41881 41354 +3 40921 41235 41950 +3 40921 41950 41623 +3 40922 41624 41951 +3 40922 41951 41236 +3 40923 41173 41296 +3 40923 41296 41066 +3 40924 41066 41297 +3 40924 41297 41174 +3 40925 41171 42001 +3 40925 42001 41750 +3 40926 41751 42002 +3 40926 42002 41172 +3 40927 41863 42190 +3 40927 42190 41292 +3 40928 41293 42191 +3 40928 42191 41864 +3 40929 41556 42876 +3 40929 42876 42363 +3 40930 42364 42879 +3 40930 42879 41557 +3 40931 40932 41252 +3 40931 41252 41231 +3 40932 41232 41252 +3 40933 41023 42208 +3 40933 42208 42108 +3 40934 42109 42209 +3 40934 42209 41024 +3 40935 41427 42180 +3 40935 42180 41671 +3 40936 41672 42181 +3 40936 42181 41428 +3 40937 41284 42064 +3 40937 42064 41680 +3 40938 41681 42065 +3 40938 42065 41285 +3 40939 41213 41706 +3 40939 41706 41452 +3 40940 41453 41707 +3 40940 41707 41214 +3 40941 41615 41811 +3 40941 41811 41135 +3 40942 41136 41812 +3 40942 41812 41616 +3 40943 41530 41799 +3 40943 41799 41197 +3 40944 41198 41800 +3 40944 41800 41531 +3 40945 41371 41777 +3 40945 41777 41373 +3 40946 41374 41778 +3 40946 41778 41372 +3 40947 42325 43389 +3 40947 43389 42121 +3 40948 42122 43390 +3 40948 43390 42326 +3 40949 42272 42704 +3 40949 42704 41425 +3 40950 41426 42705 +3 40950 42705 42273 +3 40951 41361 42517 +3 40951 42517 42143 +3 40952 42144 42518 +3 40952 42518 41362 +3 40953 41724 43257 +3 40953 43257 42571 +3 40954 42572 43258 +3 40954 43258 41725 +3 40955 41195 41302 +3 40955 41302 41033 +3 40956 41034 41303 +3 40956 41303 41196 +3 40957 41290 42151 +3 40957 42151 41815 +3 40958 41816 42152 +3 40958 42152 41291 +3 40959 41343 42212 +3 40959 42212 41872 +3 40960 41873 42213 +3 40960 42213 41344 +3 40961 41437 41510 +3 40961 41510 41047 +3 40962 41048 41511 +3 40962 41511 41438 +3 40963 42557 42842 +3 40963 42842 41333 +3 40964 41334 42843 +3 40964 42843 42558 +3 40965 41519 42406 +3 40965 42406 41888 +3 40966 41889 42407 +3 40966 42407 41520 +3 40967 41093 41320 +3 40967 41320 41199 +3 40968 41200 41321 +3 40968 41321 41094 +3 40969 42606 42722 +3 40969 42722 41019 +3 40970 41020 42723 +3 40970 42723 42607 +3 40971 41152 41349 +3 40971 41349 41173 +3 40972 41174 41350 +3 40972 41350 41153 +3 40973 41918 42535 +3 40973 42535 41607 +3 40974 41608 42536 +3 40974 42536 41919 +3 40975 41244 41560 +3 40975 41560 41257 +3 40976 41258 41561 +3 40976 41561 41245 +3 40977 41347 43140 +3 40977 43140 42846 +3 40978 42847 43141 +3 40978 43141 41348 +3 40979 41125 42489 +3 40979 42489 42365 +3 40980 42366 42490 +3 40980 42490 41126 +3 40981 41742 42066 +3 40981 42066 41335 +3 40982 41336 42067 +3 40982 42067 41743 +3 40983 42080 42520 +3 40983 42520 41448 +3 40984 41449 42521 +3 40984 42521 42081 +3 40985 41095 41744 +3 40985 41744 41601 +3 40986 41602 41745 +3 40986 41745 41096 +3 40987 42046 42317 +3 40987 42317 41278 +3 40988 41279 42318 +3 40988 42318 42047 +3 40989 41039 41331 +3 40989 41331 41266 +3 40990 41267 41332 +3 40990 41332 41040 +3 40991 41387 41787 +3 40991 41787 41421 +3 40992 41422 41788 +3 40992 41788 41388 +3 40993 41844 42129 +3 40993 42129 41286 +3 40994 41287 42130 +3 40994 42130 41845 +3 40995 41203 41308 +3 40995 41308 41089 +3 40996 41090 41309 +3 40996 41309 41204 +3 40997 41431 42422 +3 40997 42422 42033 +3 40998 42034 42423 +3 40998 42423 41432 +3 40999 41405 41568 +3 40999 41568 41182 +3 41000 41183 41569 +3 41000 41569 41406 +3 41001 42005 43173 +3 41001 43173 42331 +3 41002 42332 43174 +3 41002 43174 42006 +3 41003 41464 41550 +3 41003 41550 41107 +3 41004 41108 41551 +3 41004 41551 41465 +3 41005 42385 42681 +3 41005 42681 41377 +3 41006 41378 42682 +3 41006 42682 42386 +3 41007 42133 42917 +3 41007 42917 41896 +3 41008 41897 42918 +3 41008 42918 42134 +3 41009 42424 42674 +3 41009 42674 41532 +3 41010 41533 42675 +3 41010 42675 42425 +3 41011 41199 41379 +3 41011 41379 41195 +3 41012 41196 41380 +3 41012 41380 41200 +3 41013 42343 42988 +3 41013 42988 41721 +3 41014 41722 42989 +3 41014 42989 42344 +3 41015 41327 41702 +3 41015 41702 41409 +3 41016 41410 41703 +3 41016 41703 41328 +3 41017 41278 42543 +3 41017 42543 42276 +3 41018 42277 42544 +3 41018 42544 41279 +3 41019 42722 42747 +3 41019 42747 41020 +3 41020 42747 42723 +3 41021 42174 42463 +3 41021 42463 41357 +3 41022 41358 42464 +3 41022 42464 42175 +3 41023 41061 42261 +3 41023 42261 42208 +3 41024 42209 42262 +3 41024 42262 41061 +3 41025 41409 41694 +3 41025 41694 41322 +3 41026 41322 41695 +3 41026 41695 41410 +3 41027 41154 41359 +3 41027 41359 41203 +3 41028 41204 41360 +3 41028 41360 41155 +3 41029 41131 41686 +3 41029 41686 41576 +3 41030 41577 41687 +3 41030 41687 41132 +3 41031 41486 41856 +3 41031 41856 41381 +3 41032 41382 41857 +3 41032 41857 41487 +3 41033 41302 41345 +3 41033 41345 41039 +3 41034 41040 41346 +3 41034 41346 41303 +3 41035 41932 42638 +3 41035 42638 41920 +3 41036 41921 42639 +3 41036 42639 41933 +3 41037 41730 42170 +3 41037 42170 41480 +3 41038 41481 42171 +3 41038 42171 41731 +3 41039 41345 41331 +3 41040 41332 41346 +3 41041 41746 42913 +3 41041 42913 42267 +3 41042 42267 42914 +3 41042 42914 41747 +3 41043 41186 41613 +3 41043 41613 41474 +3 41044 41475 41614 +3 41044 41614 41187 +3 41045 42499 43354 +3 41045 43354 42019 +3 41046 42020 43355 +3 41046 43355 42500 +3 41047 41510 41403 +3 41048 41404 41511 +3 41049 41920 42654 +3 41049 42654 41874 +3 41050 41875 42655 +3 41050 42655 41921 +3 41051 41460 42125 +3 41051 42125 41719 +3 41052 41720 42126 +3 41052 42126 41461 +3 41053 41365 41566 +3 41053 41566 41250 +3 41054 41251 41567 +3 41054 41567 41366 +3 41055 41682 41989 +3 41055 41989 41314 +3 41056 41315 41990 +3 41056 41990 41683 +3 41057 41865 42656 +3 41057 42656 41932 +3 41058 41933 42657 +3 41058 42657 41866 +3 41059 42240 42559 +3 41060 42560 42241 +3 41061 42262 42261 +3 41062 41417 42347 +3 41062 42347 42117 +3 41063 42118 42348 +3 41063 42348 41418 +3 41064 41163 41760 +3 41064 41760 41631 +3 41065 41632 41761 +3 41065 41761 41164 +3 41066 41296 41297 +3 41067 41619 41801 +3 41067 41801 41211 +3 41068 41212 41802 +3 41068 41802 41620 +3 41069 41478 42283 +3 41069 42283 41878 +3 41070 41879 42284 +3 41070 42284 41479 +3 41071 41259 41572 +3 41071 41572 41365 +3 41072 41366 41573 +3 41072 41573 41259 +3 41073 41389 42094 +3 41073 42094 41789 +3 41074 41790 42095 +3 41074 42095 41390 +3 41075 42062 42319 +3 41075 42319 41351 +3 41076 41352 42320 +3 41076 42320 42063 +3 41077 41219 41700 +3 41077 41700 41536 +3 41078 41537 41701 +3 41078 41701 41220 +3 41079 42279 43515 +3 41079 43515 42397 +3 41080 42398 43516 +3 41080 43516 42280 +3 41081 41617 42025 +3 41081 42025 41439 +3 41082 41440 42026 +3 41082 42026 41618 +3 41083 42166 42784 +3 41083 42784 41758 +3 41084 41759 42785 +3 41084 42785 42167 +3 41085 41997 42137 +3 41086 42138 41998 +3 41087 41762 42349 +3 41087 42349 41647 +3 41088 41648 42350 +3 41088 42350 41762 +3 41089 41308 41355 +3 41089 41355 41093 +3 41090 41094 41356 +3 41090 41356 41309 +3 41091 41797 42003 +3 41091 42003 41260 +3 41092 41261 42004 +3 41092 42004 41798 +3 41093 41355 41320 +3 41094 41321 41356 +3 41095 41135 41813 +3 41095 41813 41744 +3 41096 41745 41814 +3 41096 41814 41136 +3 41097 41719 42293 +3 41097 42293 41688 +3 41098 41689 42294 +3 41098 42294 41720 +3 41099 41240 42402 +3 41099 42402 42236 +3 41100 42237 42403 +3 41100 42403 41241 +3 41101 41886 42270 +3 41101 42270 41470 +3 41102 41471 42271 +3 41102 42271 41887 +3 41103 42397 43511 +3 41103 43511 42325 +3 41104 42326 43512 +3 41104 43512 42398 +3 41105 41468 41643 +3 41105 41643 41310 +3 41106 41311 41644 +3 41106 41644 41469 +3 41107 41550 41591 +3 41107 41591 41147 +3 41108 41147 41592 +3 41108 41592 41551 +3 41109 41712 42495 +3 41109 42495 41910 +3 41110 41911 42496 +3 41110 42496 41713 +3 41111 42210 42628 +3 41111 42628 41528 +3 41112 41529 42629 +3 41112 42629 42211 +3 41113 41490 42042 +3 41113 42042 41603 +3 41114 41604 42043 +3 41114 42043 41491 +3 41115 41733 41995 +3 41115 41995 41363 +3 41116 41364 41996 +3 41116 41996 41734 +3 41117 41544 41884 +3 41117 41884 41413 +3 41118 41414 41885 +3 41118 41885 41545 +3 41119 41508 43080 +3 41119 43080 42720 +3 41120 42721 43081 +3 41120 43081 41509 +3 41121 41688 42313 +3 41121 42313 41730 +3 41122 41731 42314 +3 41122 42314 41689 +3 41123 41633 43340 +3 41123 43340 42882 +3 41124 42883 43341 +3 41124 43341 41634 +3 41125 41156 42577 +3 41125 42577 42489 +3 41126 42490 42578 +3 41126 42578 41156 +3 41127 41492 41655 +3 41127 41655 41298 +3 41128 41299 41656 +3 41128 41656 41493 +3 41129 41625 43400 +3 41129 43400 42915 +3 41130 42916 43401 +3 41130 43401 41626 +3 41131 41421 41770 +3 41131 41770 41686 +3 41132 41687 41771 +3 41132 41771 41422 +3 41133 41595 42569 +3 41133 42569 42088 +3 41134 42089 42570 +3 41134 42570 41596 +3 41135 41811 41813 +3 41136 41814 41812 +3 41137 42375 43228 +3 41137 43228 42131 +3 41138 42132 43229 +3 41138 43229 42376 +3 41139 41452 41890 +3 41139 41890 41544 +3 41140 41545 41891 +3 41140 41891 41453 +3 41141 42339 42771 +3 41141 42771 41589 +3 41142 41590 42772 +3 41142 42772 42340 +3 41143 42057 42220 +3 41143 42220 41318 +3 41144 41319 42221 +3 41144 42221 42058 +3 41145 41981 42265 +3 41145 42265 41282 +3 41146 41283 42266 +3 41146 42266 41982 +3 41147 41591 41592 +3 41148 41339 42119 +3 41148 42119 41948 +3 41149 41949 42120 +3 41149 42120 41340 +3 41150 41993 42612 +3 41150 42612 41820 +3 41151 41821 42613 +3 41151 42613 41994 +3 41152 41266 41472 +3 41152 41472 41349 +3 41153 41350 41473 +3 41153 41473 41267 +3 41154 41231 41444 +3 41154 41444 41359 +3 41155 41360 41445 +3 41155 41445 41232 +3 41156 42578 42577 +3 41157 41737 42951 +3 41157 42951 42418 +3 41158 42419 42952 +3 41158 42952 41738 +3 41159 42890 43238 +3 41159 43238 41852 +3 41160 41853 43239 +3 41160 43239 42891 +3 41161 41665 42756 +3 41161 42756 42251 +3 41162 42252 42757 +3 41162 42757 41666 +3 41163 41188 41838 +3 41163 41838 41760 +3 41164 41761 41839 +3 41164 41839 41188 +3 41165 42836 43232 +3 41165 43232 41599 +3 41166 41600 43233 +3 41166 43233 42837 +3 41167 41435 42074 +3 41167 42074 41828 +3 41168 41829 42075 +3 41168 42075 41436 +3 41169 41872 42618 +3 41169 42618 41987 +3 41170 41988 42619 +3 41170 42619 41873 +3 41171 41318 42162 +3 41171 42162 42001 +3 41172 42002 42163 +3 41172 42163 41319 +3 41173 41349 41484 +3 41173 41484 41296 +3 41174 41297 41485 +3 41174 41485 41350 +3 41175 41805 42781 +3 41175 42781 41806 +3 41176 41433 41978 +3 41176 41978 41651 +3 41177 41652 41979 +3 41177 41979 41434 +3 41178 42259 42907 +3 41178 42907 41793 +3 41179 41794 42908 +3 41179 42908 42260 +3 41180 42184 42650 +3 41180 42650 41639 +3 41181 41640 42651 +3 41181 42651 42185 +3 41182 41568 41661 +3 41182 41661 41274 +3 41183 41275 41662 +3 41183 41662 41569 +3 41184 41952 42453 +3 41184 42453 41678 +3 41185 41679 42454 +3 41185 42454 41953 +3 41186 41262 41708 +3 41186 41708 41613 +3 41187 41614 41709 +3 41187 41709 41263 +3 41188 41839 41838 +3 41189 41671 42353 +3 41189 42353 42115 +3 41190 42116 42354 +3 41190 42354 41672 +3 41191 41773 42767 +3 41191 42767 42226 +3 41192 42227 42768 +3 41192 42768 41774 +3 41193 41446 41956 +3 41193 41956 41653 +3 41194 41654 41957 +3 41194 41957 41447 +3 41195 41379 41494 +3 41195 41494 41302 +3 41196 41303 41495 +3 41196 41495 41380 +3 41197 41799 42017 +3 41197 42017 41383 +3 41198 41384 42018 +3 41198 42018 41800 +3 41199 41320 41498 +3 41199 41498 41379 +3 41200 41380 41499 +3 41200 41499 41321 +3 41201 41942 42537 +3 41201 42537 41934 +3 41202 41935 42538 +3 41202 42538 41943 +3 41203 41359 41482 +3 41203 41482 41308 +3 41204 41309 41483 +3 41204 41483 41360 +3 41205 42192 42718 +3 41205 42718 41775 +3 41206 41776 42719 +3 41206 42719 42192 +3 41207 41403 41649 +3 41207 41649 41468 +3 41208 41469 41650 +3 41208 41650 41404 +3 41209 42792 43420 +3 41209 43420 41904 +3 41210 41905 43421 +3 41210 43421 42793 +3 41211 41801 41924 +3 41211 41924 41294 +3 41212 41295 41925 +3 41212 41925 41802 +3 41213 41429 41946 +3 41213 41946 41706 +3 41214 41707 41947 +3 41214 41947 41430 +3 41215 41987 42658 +3 41215 42658 41970 +3 41216 41971 42659 +3 41216 42659 41988 +3 41217 42391 42959 +3 41217 42959 41830 +3 41218 41831 42960 +3 41218 42960 42392 +3 41219 41300 41834 +3 41219 41834 41700 +3 41220 41701 41835 +3 41220 41835 41301 +3 41221 41934 42555 +3 41221 42555 41886 +3 41222 41887 42556 +3 41222 42556 41935 +3 41223 42072 43098 +3 41223 43098 42307 +3 41224 42308 43099 +3 41224 43099 42073 +3 41225 41611 42992 +3 41225 42992 42600 +3 41226 42601 42993 +3 41226 42993 41612 +3 41227 41970 42670 +3 41227 42670 41993 +3 41228 41994 42671 +3 41228 42671 41971 +3 41229 41878 42561 +3 41229 42561 41942 +3 41230 41943 42562 +3 41230 42562 41879 +3 41231 41252 41504 +3 41231 41504 41444 +3 41232 41445 41505 +3 41232 41505 41252 +3 41233 41836 42159 +3 41233 42159 41546 +3 41234 41547 42160 +3 41234 42160 41837 +3 41235 41476 42193 +3 41235 42193 41950 +3 41236 41951 42194 +3 41236 42194 41477 +3 41237 42051 43277 +3 41237 43277 42052 +3 41238 41739 42068 +3 41238 42068 41530 +3 41239 41531 42069 +3 41239 42069 41740 +3 41240 41306 42475 +3 41240 42475 42402 +3 41241 42403 42476 +3 41241 42476 41307 +3 41242 42748 43383 +3 41242 43383 41906 +3 41243 41907 43384 +3 41243 43384 42749 +3 41244 41474 41822 +3 41244 41822 41560 +3 41245 41561 41823 +3 41245 41823 41475 +3 41246 41769 42872 +3 41246 42872 42393 +3 41247 42394 42873 +3 41247 42873 41772 +3 41248 41609 42814 +3 41248 42814 42459 +3 41249 42460 42815 +3 41249 42815 41610 +3 41250 41566 41717 +3 41250 41717 41405 +3 41251 41406 41718 +3 41251 41718 41567 +3 41252 41505 41504 +3 41253 41940 43377 +3 41253 43377 42731 +3 41254 42732 43378 +3 41254 43378 41941 +3 41255 42301 43104 +3 41255 43104 42133 +3 41256 42134 43105 +3 41256 43105 42302 +3 41257 41560 41826 +3 41257 41826 41492 +3 41258 41493 41827 +3 41258 41827 41561 +3 41259 41573 41741 +3 41259 41741 41572 +3 41260 42003 42086 +3 41260 42086 41339 +3 41261 41340 42087 +3 41261 42087 42004 +3 41262 41274 41756 +3 41262 41756 41708 +3 41263 41709 41757 +3 41263 41757 41275 +3 41264 41888 42624 +3 41264 42624 42357 +3 41265 42358 42625 +3 41265 42625 41889 +3 41266 41331 41538 +3 41266 41538 41472 +3 41267 41473 41539 +3 41267 41539 41332 +3 41268 41623 42216 +3 41268 42216 41870 +3 41269 41871 42217 +3 41269 42217 41624 +3 41270 41466 43094 +3 41270 43094 42903 +3 41271 42904 43095 +3 41271 43095 41467 +3 41272 41621 43031 +3 41272 43031 42668 +3 41273 42669 43032 +3 41273 43032 41622 +3 41274 41661 41756 +3 41275 41757 41662 +3 41276 41635 42666 +3 41276 42666 42305 +3 41277 42306 42667 +3 41277 42667 41636 +3 41278 42317 42543 +3 41279 42544 42318 +3 41280 41680 42359 +3 41280 42359 41954 +3 41281 41955 42360 +3 41281 42360 41681 +3 41282 42265 42408 +3 41282 42408 41411 +3 41283 41412 42409 +3 41283 42409 42266 +3 41284 41523 42291 +3 41284 42291 42064 +3 41285 42065 42292 +3 41285 42292 41524 +3 41286 42129 42377 +3 41286 42377 41521 +3 41287 41522 42378 +3 41287 42378 42130 +3 41288 42218 42589 +3 41288 42589 41637 +3 41289 41638 42590 +3 41289 42590 42219 +3 41290 41558 42416 +3 41290 42416 42151 +3 41291 42152 42417 +3 41291 42417 41559 +3 41292 42190 42434 +3 41292 42434 41515 +3 41293 41516 42435 +3 41293 42435 42191 +3 41294 41924 41985 +3 41294 41985 41337 +3 41295 41338 41986 +3 41295 41986 41925 +3 41296 41484 41512 +3 41296 41512 41297 +3 41297 41512 41485 +3 41298 41655 41832 +3 41298 41832 41437 +3 41299 41438 41833 +3 41299 41833 41656 +3 41300 41337 41983 +3 41300 41983 41834 +3 41301 41835 41984 +3 41301 41984 41338 +3 41302 41494 41554 +3 41302 41554 41345 +3 41303 41346 41555 +3 41303 41555 41495 +3 41304 42331 43468 +3 41304 43468 42491 +3 41305 42492 43469 +3 41305 43469 42332 +3 41306 41307 42516 +3 41306 42516 42475 +3 41307 42476 42516 +3 41308 41482 41534 +3 41308 41534 41355 +3 41309 41356 41535 +3 41309 41535 41483 +3 41310 41643 41854 +3 41310 41854 41464 +3 41311 41465 41855 +3 41311 41855 41644 +3 41312 42281 43531 +3 41312 43531 42626 +3 41313 42627 43532 +3 41313 43532 42282 +3 41314 41989 42186 +3 41314 42186 41500 +3 41315 41501 42187 +3 41315 42187 41990 +3 41316 42182 42581 +3 41316 42581 41704 +3 41317 41705 42582 +3 41317 42582 42183 +3 41318 42220 42162 +3 41319 42163 42221 +3 41320 41355 41542 +3 41320 41542 41498 +3 41321 41499 41543 +3 41321 41543 41356 +3 41322 41694 41980 +3 41322 41980 41695 +3 41323 42467 43198 +3 41323 43198 42123 +3 41324 42124 43199 +3 41324 43199 42468 +3 41325 41922 43273 +3 41325 43273 42726 +3 41326 42727 43274 +3 41326 43274 41923 +3 41327 41536 41974 +3 41327 41974 41702 +3 41328 41703 41975 +3 41328 41975 41537 +3 41329 41754 42648 +3 41329 42648 42230 +3 41330 42231 42649 +3 41330 42649 41755 +3 41331 41345 41574 +3 41331 41574 41538 +3 41332 41539 41575 +3 41332 41575 41346 +3 41333 42842 43106 +3 41333 43106 41609 +3 41334 41610 43107 +3 41334 43107 42843 +3 41335 42066 42329 +3 41335 42329 41580 +3 41336 41581 42330 +3 41336 42330 42067 +3 41337 41985 41983 +3 41338 41984 41986 +3 41339 42086 42119 +3 41340 42120 42087 +3 41341 42483 43459 +3 41341 43459 42375 +3 41342 42376 43460 +3 41342 43460 42484 +3 41343 41597 42514 +3 41343 42514 42212 +3 41344 42213 42515 +3 41344 42515 41598 +3 41345 41554 41574 +3 41346 41575 41555 +3 41347 42760 43140 +3 41348 43141 42761 +3 41349 41472 41605 +3 41349 41605 41484 +3 41350 41485 41606 +3 41350 41606 41473 +3 41351 42319 42691 +3 41351 42691 41540 +3 41352 41541 42692 +3 41352 42692 42320 +3 41353 41651 42214 +3 41353 42214 41880 +3 41354 41881 42215 +3 41354 42215 41652 +3 41355 41534 41542 +3 41356 41543 41535 +3 41357 42463 42689 +3 41357 42689 41582 +3 41358 41583 42690 +3 41358 42690 42464 +3 41359 41444 41586 +3 41359 41586 41482 +3 41360 41483 41587 +3 41360 41587 41445 +3 41361 41728 42852 +3 41361 42852 42517 +3 41362 42518 42853 +3 41362 42853 41729 +3 41363 41995 42176 +3 41363 42176 41441 +3 41364 41442 42177 +3 41364 42177 41996 +3 41365 41572 41824 +3 41365 41824 41566 +3 41366 41567 41825 +3 41366 41825 41573 +3 41367 42765 43175 +3 41367 43175 41785 +3 41368 41786 43176 +3 41368 43176 42766 +3 41369 42021 42404 +3 41369 42404 41742 +3 41370 41743 42405 +3 41370 42405 42022 +3 41371 41677 42141 +3 41371 42141 41777 +3 41372 41778 42142 +3 41372 42142 41677 +3 41373 41777 42135 +3 41373 42135 41682 +3 41374 41683 42136 +3 41374 42136 41778 +3 41375 41880 42232 +3 41375 42232 41739 +3 41376 41740 42233 +3 41376 42233 41881 +3 41377 42681 42939 +3 41377 42939 41645 +3 41378 41646 42940 +3 41378 42940 42682 +3 41379 41498 41629 +3 41379 41629 41494 +3 41380 41495 41630 +3 41380 41630 41499 +3 41381 41856 42113 +3 41381 42113 41617 +3 41382 41618 42114 +3 41382 42114 41857 +3 41383 42017 42145 +3 41383 42145 41486 +3 41384 41487 42146 +3 41384 42146 42018 +3 41385 42708 42927 +3 41385 42927 41552 +3 41386 41553 42928 +3 41386 42928 42709 +3 41387 41653 42100 +3 41387 42100 41787 +3 41388 41788 42101 +3 41388 42101 41654 +3 41389 41496 42337 +3 41389 42337 42094 +3 41390 42095 42338 +3 41390 42338 41497 +3 41391 42287 43159 +3 41391 43159 42301 +3 41392 42302 43160 +3 41392 43160 42288 +3 41393 41938 43404 +3 41393 43404 42880 +3 41394 42881 43405 +3 41394 43405 41939 +3 41395 41902 43342 +3 41395 43342 42840 +3 41396 42841 43343 +3 41396 43343 41903 +3 41397 42307 43177 +3 41397 43177 42287 +3 41398 42288 43178 +3 41398 43178 42308 +3 41399 42195 42644 +3 41399 42644 41876 +3 41400 41877 42645 +3 41400 42645 42195 +3 41401 42838 43252 +3 41401 43252 41861 +3 41402 41862 43253 +3 41402 43253 42839 +3 41403 41510 41848 +3 41403 41848 41649 +3 41404 41650 41849 +3 41404 41849 41511 +3 41405 41717 41916 +3 41405 41916 41568 +3 41406 41569 41917 +3 41406 41917 41718 +3 41407 42491 43446 +3 41407 43446 42483 +3 41408 42484 43447 +3 41408 43447 42492 +3 41409 41702 42060 +3 41409 42060 41694 +3 41410 41695 42061 +3 41410 42061 41703 +3 41411 42408 42465 +3 41411 42465 41456 +3 41412 41457 42466 +3 41412 42466 42409 +3 41413 41884 42104 +3 41413 42104 41619 +3 41414 41620 42105 +3 41414 42105 41885 +3 41415 41930 42335 +3 41415 42335 41836 +3 41416 41837 42336 +3 41416 42336 41931 +3 41417 41696 42620 +3 41417 42620 42347 +3 41418 42348 42621 +3 41418 42621 41697 +3 41419 42188 42592 +3 41419 42592 41863 +3 41420 41864 42593 +3 41420 42593 42189 +3 41421 41787 42149 +3 41421 42149 41770 +3 41422 41771 42150 +3 41422 42150 41788 +3 41423 41870 42361 +3 41423 42361 41930 +3 41424 41931 42362 +3 41424 42362 41871 +3 41425 42704 43084 +3 41425 43084 42166 +3 41426 42167 43085 +3 41426 43085 42705 +3 41427 41815 42579 +3 41427 42579 42180 +3 41428 42181 42580 +3 41428 42580 41816 +3 41429 41576 42102 +3 41429 42102 41946 +3 41430 41947 42103 +3 41430 42103 41577 +3 41431 41763 42733 +3 41431 42733 42422 +3 41432 42423 42734 +3 41432 42734 41764 +3 41433 41601 42178 +3 41433 42178 41978 +3 41434 41979 42179 +3 41434 42179 41602 +3 41435 41789 42430 +3 41435 42430 42074 +3 41436 42075 42431 +3 41436 42431 41790 +3 41437 41832 41928 +3 41437 41928 41510 +3 41438 41511 41929 +3 41438 41929 41833 +3 41439 42025 42289 +3 41439 42289 41733 +3 41440 41734 42290 +3 41440 42290 42026 +3 41441 42176 42249 +3 41441 42249 41502 +3 41442 41503 42250 +3 41442 42250 42177 +3 41443 41910 42591 +3 41443 42591 41911 +3 41444 41504 41669 +3 41444 41669 41586 +3 41445 41587 41670 +3 41445 41670 41505 +3 41446 41631 42139 +3 41446 42139 41956 +3 41447 41957 42140 +3 41447 42140 41632 +3 41448 42520 42860 +3 41448 42860 41818 +3 41449 41819 42861 +3 41449 42861 42521 +3 41450 41954 42351 +3 41450 42351 41867 +3 41451 41867 42352 +3 41451 42352 41955 +3 41452 41706 42155 +3 41452 42155 41890 +3 41453 41891 42156 +3 41453 42156 41707 +3 41454 42854 43418 +3 41454 43418 42076 +3 41455 42077 43419 +3 41455 43419 42855 +3 41456 42465 42501 +3 41456 42501 41457 +3 41457 42501 42466 +3 41458 42622 43428 +3 41458 43428 42272 +3 41459 42273 43429 +3 41459 43429 42623 +3 41460 41750 42455 +3 41460 42455 42125 +3 41461 42126 42456 +3 41461 42456 41751 +3 41462 42487 43149 +3 41462 43149 42210 +3 41463 42211 43150 +3 41463 43150 42488 +3 41464 41854 41960 +3 41464 41960 41550 +3 41465 41551 41961 +3 41465 41961 41855 +3 41466 41506 43218 +3 41466 43218 43094 +3 41467 43095 43219 +3 41467 43219 41507 +3 41468 41649 41926 +3 41468 41926 41643 +3 41469 41644 41927 +3 41469 41927 41650 +3 41470 42270 42587 +3 41470 42587 41752 +3 41471 41753 42588 +3 41471 42588 42271 +3 41472 41538 41714 +3 41472 41714 41605 +3 41473 41606 41715 +3 41473 41715 41539 +3 41474 41613 42011 +3 41474 42011 41822 +3 41475 41823 42012 +3 41475 42012 41614 +3 41476 41603 42369 +3 41476 42369 42193 +3 41477 42194 42370 +3 41477 42370 41604 +3 41478 41840 42632 +3 41478 42632 42283 +3 41479 42284 42633 +3 41479 42633 41841 +3 41480 42170 42541 +3 41480 42541 41844 +3 41481 41845 42542 +3 41481 42542 42171 +3 41482 41586 41675 +3 41482 41675 41534 +3 41483 41535 41676 +3 41483 41676 41587 +3 41484 41605 41657 +3 41484 41657 41512 +3 41485 41512 41658 +3 41485 41658 41606 +3 41486 42145 42228 +3 41486 42228 41856 +3 41487 41857 42229 +3 41487 42229 42146 +3 41488 41976 43265 +3 41488 43265 42804 +3 41489 42805 43266 +3 41489 43266 41977 +3 41490 41828 42367 +3 41490 42367 42042 +3 41491 42043 42368 +3 41491 42368 41829 +3 41492 41826 42031 +3 41492 42031 41655 +3 41493 41656 42032 +3 41493 42032 41827 +3 41494 41629 41726 +3 41494 41726 41554 +3 41495 41555 41727 +3 41495 41727 41630 +3 41496 41570 42438 +3 41496 42438 42337 +3 41497 42338 42439 +3 41497 42439 41571 +3 41498 41542 41710 +3 41498 41710 41629 +3 41499 41630 41711 +3 41499 41711 41543 +3 41500 42186 42327 +3 41500 42327 41615 +3 41501 41616 42328 +3 41501 42328 42187 +3 41502 42249 42278 +3 41502 42278 41503 +3 41503 42278 42250 +3 41504 41505 41723 +3 41504 41723 41669 +3 41505 41670 41723 +3 41506 41507 43256 +3 41506 43256 43218 +3 41507 43219 43256 +3 41508 41882 43422 +3 41508 43422 43080 +3 41509 43081 43423 +3 41509 43423 41883 +3 41510 41928 41848 +3 41511 41849 41929 +3 41512 41657 41658 +3 41513 42828 43698 +3 41513 43698 42499 +3 41514 42500 43699 +3 41514 43699 42829 +3 41515 42434 42598 +3 41515 42598 41803 +3 41516 41804 42599 +3 41516 42599 42435 +3 41517 42305 43188 +3 41517 43188 42508 +3 41518 42509 43189 +3 41518 43189 42306 +3 41519 42033 42864 +3 41519 42864 42406 +3 41520 42407 42865 +3 41520 42865 42034 +3 41521 42377 42533 +3 41521 42533 42021 +3 41522 42022 42534 +3 41522 42534 42378 +3 41523 41690 42497 +3 41523 42497 42291 +3 41524 42292 42498 +3 41524 42498 41691 +3 41525 42479 43828 +3 41525 43828 42990 +3 41526 42991 43829 +3 41526 43829 42480 +3 41527 42088 42894 +3 41527 42894 42089 +3 41528 42628 43013 +3 41528 43013 41918 +3 41529 41919 43014 +3 41529 43014 42629 +3 41530 42068 42321 +3 41530 42321 41799 +3 41531 41800 42322 +3 41531 42322 42069 +3 41532 42674 42897 +3 41532 42897 41748 +3 41533 41749 42898 +3 41533 42898 42675 +3 41534 41675 41735 +3 41534 41735 41542 +3 41535 41543 41736 +3 41535 41736 41676 +3 41536 41700 42147 +3 41536 42147 41974 +3 41537 41975 42148 +3 41537 42148 41701 +3 41538 41574 41765 +3 41538 41765 41714 +3 41539 41715 41766 +3 41539 41766 41575 +3 41540 42691 42850 +3 41540 42850 41673 +3 41541 41674 42851 +3 41541 42851 42692 +3 41542 41735 41710 +3 41543 41711 41736 +3 41544 41890 42234 +3 41544 42234 41884 +3 41545 41885 42235 +3 41545 42235 41891 +3 41546 42159 42426 +3 41546 42426 41797 +3 41547 41798 42427 +3 41547 42427 42160 +3 41548 42762 43474 +3 41548 43474 42244 +3 41549 42245 43475 +3 41549 43475 42762 +3 41550 41960 42035 +3 41550 42035 41591 +3 41551 41592 42036 +3 41551 42036 41961 +3 41552 42927 43061 +3 41552 43061 41663 +3 41553 41664 43062 +3 41553 43062 42928 +3 41554 41726 41767 +3 41554 41767 41574 +3 41555 41575 41768 +3 41555 41768 41727 +3 41556 42247 43547 +3 41556 43547 42876 +3 41557 42879 43548 +3 41557 43548 42248 +3 41558 41964 42763 +3 41558 42763 42416 +3 41559 42417 42764 +3 41559 42764 41965 +3 41560 41822 42070 +3 41560 42070 41826 +3 41561 41827 42071 +3 41561 42071 41823 +3 41562 42007 42921 +3 41562 42921 42522 +3 41563 42523 42922 +3 41563 42922 42008 +3 41564 42469 42996 +3 41564 42996 42080 +3 41565 42081 42997 +3 41565 42997 42470 +3 41566 41824 42013 +3 41566 42013 41717 +3 41567 41718 42014 +3 41567 42014 41825 +3 41568 41916 42053 +3 41568 42053 41661 +3 41569 41662 42054 +3 41569 42054 41917 +3 41570 41588 42502 +3 41570 42502 42438 +3 41571 42439 42503 +3 41571 42503 41588 +3 41572 41741 42027 +3 41572 42027 41824 +3 41573 41825 42028 +3 41573 42028 41741 +3 41574 41767 41765 +3 41575 41766 41768 +3 41576 41686 42222 +3 41576 42222 42102 +3 41577 42103 42223 +3 41577 42223 41687 +3 41578 42226 43120 +3 41578 43120 42531 +3 41579 42532 43121 +3 41579 43121 42227 +3 41580 42329 42679 +3 41580 42679 41981 +3 41581 41982 42680 +3 41581 42680 42330 +3 41582 42689 42892 +3 41582 42892 41850 +3 41583 41851 42893 +3 41583 42893 42690 +3 41584 42459 43519 +3 41584 43519 42693 +3 41585 42694 43520 +3 41585 43520 42460 +3 41586 41669 41842 +3 41586 41842 41675 +3 41587 41676 41843 +3 41587 41843 41670 +3 41588 42503 42502 +3 41589 42771 43143 +3 41589 43143 42015 +3 41590 42016 43144 +3 41590 43144 42772 +3 41591 42035 42050 +3 41591 42050 41592 +3 41592 42050 42036 +3 41593 42285 43365 +3 41593 43365 42685 +3 41594 42686 43366 +3 41594 43366 42286 +3 41595 42251 43163 +3 41595 43163 42569 +3 41596 42570 43164 +3 41596 43164 42252 +3 41597 41850 42716 +3 41597 42716 42514 +3 41598 42515 42717 +3 41598 42717 41851 +3 41599 43232 43619 +3 41599 43619 42040 +3 41600 42041 43620 +3 41600 43620 43233 +3 41601 41744 42315 +3 41601 42315 42178 +3 41602 42179 42316 +3 41602 42316 41745 +3 41603 42042 42473 +3 41603 42473 42369 +3 41604 42370 42474 +3 41604 42474 42043 +3 41605 41714 41807 +3 41605 41807 41657 +3 41606 41658 41808 +3 41606 41808 41715 +3 41607 42535 43043 +3 41607 43043 42184 +3 41608 42185 43044 +3 41608 43044 42536 +3 41609 43106 42814 +3 41610 42815 43107 +3 41611 41991 43315 +3 41611 43315 42992 +3 41612 42993 43316 +3 41612 43316 41992 +3 41613 41708 42106 +3 41613 42106 42011 +3 41614 42012 42107 +3 41614 42107 41709 +3 41615 42327 42414 +3 41615 42414 41811 +3 41616 41812 42415 +3 41616 42415 42328 +3 41617 42113 42477 +3 41617 42477 42025 +3 41618 42026 42478 +3 41618 42478 42114 +3 41619 42104 42295 +3 41619 42295 41801 +3 41620 41802 42296 +3 41620 42296 42105 +3 41621 42157 43304 +3 41621 43304 43031 +3 41622 43032 43305 +3 41622 43305 42158 +3 41623 41950 42547 +3 41623 42547 42216 +3 41624 42217 42548 +3 41624 42548 41951 +3 41625 42311 43746 +3 41625 43746 43400 +3 41626 43401 43747 +3 41626 43747 42312 +3 41627 42626 43768 +3 41627 43768 42870 +3 41628 42871 43769 +3 41628 43769 42627 +3 41629 41710 41868 +3 41629 41868 41726 +3 41630 41727 41869 +3 41630 41869 41711 +3 41631 41760 42268 +3 41631 42268 42139 +3 41632 42140 42269 +3 41632 42269 41761 +3 41633 42098 43740 +3 41633 43740 43340 +3 41634 43341 43741 +3 41634 43741 42099 +3 41635 41944 42970 +3 41635 42970 42666 +3 41636 42667 42971 +3 41636 42971 41945 +3 41637 42589 42856 +3 41637 42856 41952 +3 41638 41953 42857 +3 41638 42857 42590 +3 41639 42650 43059 +3 41639 43059 42078 +3 41640 42079 43060 +3 41640 43060 42651 +3 41641 42565 42909 +3 41641 42909 42046 +3 41642 42047 42910 +3 41642 42910 42566 +3 41643 41926 42111 +3 41643 42111 41854 +3 41644 41855 42112 +3 41644 42112 41927 +3 41645 42939 43182 +3 41645 43182 41944 +3 41646 41945 43183 +3 41646 43183 42940 +3 41647 42349 42834 +3 41647 42834 42188 +3 41648 42189 42835 +3 41648 42835 42350 +3 41649 41848 42092 +3 41649 42092 41926 +3 41650 41927 42093 +3 41650 42093 41849 +3 41651 41978 42524 +3 41651 42524 42214 +3 41652 42215 42525 +3 41652 42525 41979 +3 41653 41956 42371 +3 41653 42371 42100 +3 41654 42101 42372 +3 41654 42372 41957 +3 41655 42031 42164 +3 41655 42164 41832 +3 41656 41833 42165 +3 41656 42165 42032 +3 41657 41807 41860 +3 41657 41860 41658 +3 41658 41860 41808 +3 41659 42381 43896 +3 41659 43896 43301 +3 41660 43302 43897 +3 41660 43897 42382 +3 41661 42053 42127 +3 41661 42127 41756 +3 41662 41757 42128 +3 41662 42128 42054 +3 41663 43061 43122 +3 41663 43122 41716 +3 41664 41716 43123 +3 41664 43123 43062 +3 41665 42143 43200 +3 41665 43200 42756 +3 41666 42757 43201 +3 41666 43201 42144 +3 41667 42575 43317 +3 41667 43317 42585 +3 41668 42586 43318 +3 41668 43318 42576 +3 41669 41723 41894 +3 41669 41894 41842 +3 41670 41843 41895 +3 41670 41895 41723 +3 41671 42180 42810 +3 41671 42810 42353 +3 41672 42354 42811 +3 41672 42811 42181 +3 41673 42850 42974 +3 41673 42974 41779 +3 41674 41780 42975 +3 41674 42975 42851 +3 41675 41842 41898 +3 41675 41898 41735 +3 41676 41736 41899 +3 41676 41899 41843 +3 41677 42142 42440 +3 41677 42440 42141 +3 41678 42453 42923 +3 41678 42923 42182 +3 41679 42183 42924 +3 41679 42924 42454 +3 41680 42064 42677 +3 41680 42677 42359 +3 41681 42360 42678 +3 41681 42678 42065 +3 41682 42135 42443 +3 41682 42443 41989 +3 41683 41990 42444 +3 41683 42444 42136 +3 41684 42508 43331 +3 41684 43331 42575 +3 41685 42576 43332 +3 41685 43332 42509 +3 41686 41770 42299 +3 41686 42299 42222 +3 41687 42223 42300 +3 41687 42300 41771 +3 41688 42293 42796 +3 41688 42796 42313 +3 41689 42314 42797 +3 41689 42797 42294 +3 41690 41948 42614 +3 41690 42614 42497 +3 41691 42498 42615 +3 41691 42615 41949 +3 41692 42585 43346 +3 41692 43346 42487 +3 41693 42488 43347 +3 41693 43347 42586 +3 41694 42060 42323 +3 41694 42323 41980 +3 41695 41980 42324 +3 41695 42324 42061 +3 41696 41962 42848 +3 41696 42848 42620 +3 41697 42621 42849 +3 41697 42849 41963 +3 41698 42153 43242 +3 41698 43242 42818 +3 41699 42819 43243 +3 41699 43243 42154 +3 41700 41834 42257 +3 41700 42257 42147 +3 41701 42148 42258 +3 41701 42258 41835 +3 41702 41974 42303 +3 41702 42303 42060 +3 41703 42061 42304 +3 41703 42304 41975 +3 41704 42581 42899 +3 41704 42899 42062 +3 41705 42063 42900 +3 41705 42900 42582 +3 41706 41946 42387 +3 41706 42387 42155 +3 41707 42156 42388 +3 41707 42388 41947 +3 41708 41756 42168 +3 41708 42168 42106 +3 41709 42107 42169 +3 41709 42169 41757 +3 41710 41735 41908 +3 41710 41908 41868 +3 41711 41869 41909 +3 41711 41909 41736 +3 41712 42230 43015 +3 41712 43015 42495 +3 41713 42496 43016 +3 41713 43016 42231 +3 41714 41765 41900 +3 41714 41900 41807 +3 41715 41808 41901 +3 41715 41901 41766 +3 41716 43122 43123 +3 41717 42013 42198 +3 41717 42198 41916 +3 41718 41917 42199 +3 41718 42199 42014 +3 41719 42125 42702 +3 41719 42702 42293 +3 41720 42294 42703 +3 41720 42703 42126 +3 41721 42988 43549 +3 41721 43549 42297 +3 41722 42298 43550 +3 41722 43550 42989 +3 41723 41895 41894 +3 41724 42383 43850 +3 41724 43850 43257 +3 41725 43258 43851 +3 41725 43851 42384 +3 41726 41868 41914 +3 41726 41914 41767 +3 41727 41768 41915 +3 41727 41915 41869 +3 41728 42055 43151 +3 41728 43151 42852 +3 41729 42853 43152 +3 41729 43152 42056 +3 41730 42313 42739 +3 41730 42739 42170 +3 41731 42171 42740 +3 41731 42740 42314 +3 41732 42392 43395 +3 41732 43395 42391 +3 41733 42289 42563 +3 41733 42563 41995 +3 41734 41996 42564 +3 41734 42564 42290 +3 41735 41898 41908 +3 41736 41909 41899 +3 41737 42204 43434 +3 41737 43434 42951 +3 41738 42952 43435 +3 41738 43435 42205 +3 41739 42232 42573 +3 41739 42573 42068 +3 41740 42069 42574 +3 41740 42574 42233 +3 41741 42028 42161 +3 41741 42161 42027 +3 41742 42404 42698 +3 41742 42698 42066 +3 41743 42067 42699 +3 41743 42699 42405 +3 41744 41813 42412 +3 41744 42412 42315 +3 41745 42316 42413 +3 41745 42413 41814 +3 41746 42363 43517 +3 41746 43517 42913 +3 41747 42914 43518 +3 41747 43518 42364 +3 41748 42897 43041 +3 41748 43041 41892 +3 41749 41893 43042 +3 41749 43042 42898 +3 41750 42001 42687 +3 41750 42687 42455 +3 41751 42456 42688 +3 41751 42688 42002 +3 41752 42587 42786 +3 41752 42786 41997 +3 41753 41998 42787 +3 41753 42787 42588 +3 41754 42117 43021 +3 41754 43021 42648 +3 41755 42649 43022 +3 41755 43022 42118 +3 41756 42127 42168 +3 41757 42169 42128 +3 41758 42784 43385 +3 41758 43385 42345 +3 41759 42346 43386 +3 41759 43386 42785 +3 41760 41838 42373 +3 41760 42373 42268 +3 41761 42269 42374 +3 41761 42374 41839 +3 41762 42350 42728 +3 41762 42728 42349 +3 41763 42048 43029 +3 41763 43029 42733 +3 41764 42734 43030 +3 41764 43030 42049 +3 41765 41767 41936 +3 41765 41936 41900 +3 41766 41901 41937 +3 41766 41937 41768 +3 41767 41914 41936 +3 41768 41937 41915 +3 41769 42418 43555 +3 41769 43555 42872 +3 41770 42149 42299 +3 41771 42300 42150 +3 41772 42873 43556 +3 41772 43556 42419 +3 41773 42253 43282 +3 41773 43282 42767 +3 41774 42768 43283 +3 41774 43283 42254 +3 41775 42718 43192 +3 41775 43192 42259 +3 41776 42260 43193 +3 41776 43193 42719 +3 41777 42141 42510 +3 41777 42510 42135 +3 41778 42136 42511 +3 41778 42511 42142 +3 41779 42974 43033 +3 41779 43033 41817 +3 41780 41817 43034 +3 41780 43034 42975 +3 41781 43006 43391 +3 41781 43391 42172 +3 41782 42173 43392 +3 41782 43392 43007 +3 41783 42886 43694 +3 41783 43694 42622 +3 41784 42623 43695 +3 41784 43695 42887 +3 41785 43175 43586 +3 41785 43586 42196 +3 41786 42197 43587 +3 41786 43587 43176 +3 41787 42100 42461 +3 41787 42461 42149 +3 41788 42150 42462 +3 41788 42462 42101 +3 41789 42094 42710 +3 41789 42710 42430 +3 41790 42431 42711 +3 41790 42711 42095 +3 41791 43110 44004 +3 41791 44004 42760 +3 41792 42761 44005 +3 41792 44005 43111 +3 41793 42907 43472 +3 41793 43472 42339 +3 41794 42340 43473 +3 41794 43473 42908 +3 41795 42602 43710 +3 41795 43710 42953 +3 41796 42954 43711 +3 41796 43711 42603 +3 41797 42426 42610 +3 41797 42610 42003 +3 41798 42004 42611 +3 41798 42611 42427 +3 41799 42321 42545 +3 41799 42545 42017 +3 41800 42018 42546 +3 41800 42546 42322 +3 41801 42295 42449 +3 41801 42449 41924 +3 41802 41925 42450 +3 41802 42450 42296 +3 41803 42598 42830 +3 41803 42830 42057 +3 41804 42058 42831 +3 41804 42831 42599 +3 41805 42393 43367 +3 41805 43367 42781 +3 41806 42781 43368 +3 41806 43368 42394 +3 41807 41900 41966 +3 41807 41966 41860 +3 41808 41860 41967 +3 41808 41967 41901 +3 41809 43017 43957 +3 41809 43957 42828 +3 41810 42829 43958 +3 41810 43958 43018 +3 41811 42414 42445 +3 41811 42445 41813 +3 41812 41814 42446 +3 41812 42446 42415 +3 41813 42445 42412 +3 41814 42413 42446 +3 41815 42151 42868 +3 41815 42868 42579 +3 41816 42580 42869 +3 41816 42869 42152 +3 41817 43033 43034 +3 41818 42860 43096 +3 41818 43096 42174 +3 41819 42175 43097 +3 41819 43097 42861 +3 41820 42612 43055 +3 41820 43055 42218 +3 41821 42219 43056 +3 41821 43056 42613 +3 41822 42011 42255 +3 41822 42255 42070 +3 41823 42071 42256 +3 41823 42256 42012 +3 41824 42027 42206 +3 41824 42206 42013 +3 41825 42014 42207 +3 41825 42207 42028 +3 41826 42070 42263 +3 41826 42263 42031 +3 41827 42032 42264 +3 41827 42264 42071 +3 41828 42074 42616 +3 41828 42616 42367 +3 41829 42368 42617 +3 41829 42617 42075 +3 41830 42959 43488 +3 41830 43488 42343 +3 41831 42344 43489 +3 41831 43489 42960 +3 41832 42164 42242 +3 41832 42242 41928 +3 41833 41929 42243 +3 41833 42243 42165 +3 41834 41983 42432 +3 41834 42432 42257 +3 41835 42258 42433 +3 41835 42433 41984 +3 41836 42335 42664 +3 41836 42664 42159 +3 41837 42160 42665 +3 41837 42665 42336 +3 41838 41839 42401 +3 41838 42401 42373 +3 41839 42374 42401 +3 41840 42115 42947 +3 41840 42947 42632 +3 41841 42633 42948 +3 41841 42948 42116 +3 41842 41894 41999 +3 41842 41999 41898 +3 41843 41899 42000 +3 41843 42000 41895 +3 41844 42541 42832 +3 41844 42832 42129 +3 41845 42130 42833 +3 41845 42833 42542 +3 41846 42693 43700 +3 41846 43700 42874 +3 41847 42875 43701 +3 41847 43701 42694 +3 41848 41928 42202 +3 41848 42202 42092 +3 41849 42093 42203 +3 41849 42203 41929 +3 41850 42892 42716 +3 41851 42717 42893 +3 41852 43238 43792 +3 41852 43792 42428 +3 41853 42429 43793 +3 41853 43793 43239 +3 41854 42111 42238 +3 41854 42238 41960 +3 41855 41961 42239 +3 41855 42239 42112 +3 41856 42228 42539 +3 41856 42539 42113 +3 41857 42114 42540 +3 41857 42540 42229 +3 41858 42870 43953 +3 41858 43953 43002 +3 41859 43003 43954 +3 41859 43954 42871 +3 41860 41966 41967 +3 41861 43252 43621 +3 41861 43621 42200 +3 41862 42201 43622 +3 41862 43622 43253 +3 41863 42592 42945 +3 41863 42945 42190 +3 41864 42191 42946 +3 41864 42946 42593 +3 41865 42522 43327 +3 41865 43327 42656 +3 41866 42657 43328 +3 41866 43328 42523 +3 41867 42351 42676 +3 41867 42676 42352 +3 41868 41908 42009 +3 41868 42009 41914 +3 41869 41915 42010 +3 41869 42010 41909 +3 41870 42216 42714 +3 41870 42714 42361 +3 41871 42362 42715 +3 41871 42715 42217 +3 41872 42212 43037 +3 41872 43037 42618 +3 41873 42619 43038 +3 41873 43038 42213 +3 41874 42654 43344 +3 41874 43344 42565 +3 41875 42566 43345 +3 41875 43345 42655 +3 41876 42644 43246 +3 41876 43246 42469 +3 41877 42470 43247 +3 41877 43247 42645 +3 41878 42283 42986 +3 41878 42986 42561 +3 41879 42562 42987 +3 41879 42987 42284 +3 41880 42214 42652 +3 41880 42652 42232 +3 41881 42233 42653 +3 41881 42653 42215 +3 41882 42172 43668 +3 41882 43668 43422 +3 41883 43423 43669 +3 41883 43669 42173 +3 41884 42234 42504 +3 41884 42504 42104 +3 41885 42105 42505 +3 41885 42505 42235 +3 41886 42555 42943 +3 41886 42943 42270 +3 41887 42271 42944 +3 41887 42944 42556 +3 41888 42406 43134 +3 41888 43134 42624 +3 41889 42625 43135 +3 41889 43135 42407 +3 41890 42155 42526 +3 41890 42526 42234 +3 41891 42235 42527 +3 41891 42527 42156 +3 41892 43041 43116 +3 41892 43116 41968 +3 41893 41969 43117 +3 41893 43117 43042 +3 41894 41895 42037 +3 41894 42037 41999 +3 41895 42000 42037 +3 41896 42917 43299 +3 41896 43299 42240 +3 41897 42241 43300 +3 41897 43300 42918 +3 41898 41999 42038 +3 41898 42038 41908 +3 41899 41909 42039 +3 41899 42039 42000 +3 41900 41936 42029 +3 41900 42029 41966 +3 41901 41967 42030 +3 41901 42030 41937 +3 41902 42333 43730 +3 41902 43730 43342 +3 41903 43343 43731 +3 41903 43731 42334 +3 41904 43420 43902 +3 41904 43902 42447 +3 41905 42448 43903 +3 41905 43903 43421 +3 41906 43383 43846 +3 41906 43846 42410 +3 41907 42411 43847 +3 41907 43847 43384 +3 41908 42038 42009 +3 41909 42010 42039 +3 41910 42495 43153 +3 41910 43153 42591 +3 41911 42591 43154 +3 41911 43154 42496 +3 41912 43002 43941 +3 41912 43941 43017 +3 41913 43018 43942 +3 41913 43942 43003 +3 41914 42009 42044 +3 41914 42044 41936 +3 41915 41937 42045 +3 41915 42045 42010 +3 41916 42198 42355 +3 41916 42355 42053 +3 41917 42054 42356 +3 41917 42356 42199 +3 41918 43013 43297 +3 41918 43297 42535 +3 41919 42536 43298 +3 41919 43298 43014 +3 41920 42638 43398 +3 41920 43398 42654 +3 41921 42655 43399 +3 41921 43399 42639 +3 41922 42096 43496 +3 41922 43496 43273 +3 41923 43274 43497 +3 41923 43497 42097 +3 41924 42449 42529 +3 41924 42529 41985 +3 41925 41986 42530 +3 41925 42530 42450 +3 41926 42092 42309 +3 41926 42309 42111 +3 41927 42112 42310 +3 41927 42310 42093 +3 41928 42242 42202 +3 41929 42203 42243 +3 41930 42361 42844 +3 41930 42844 42335 +3 41931 42336 42845 +3 41931 42845 42362 +3 41932 42656 43416 +3 41932 43416 42638 +3 41933 42639 43417 +3 41933 43417 42657 +3 41934 42537 43112 +3 41934 43112 42555 +3 41935 42556 43113 +3 41935 43113 42538 +3 41936 42044 42029 +3 41937 42030 42045 +3 41938 42389 43800 +3 41938 43800 43404 +3 41939 43405 43801 +3 41939 43801 42390 +3 41940 42571 43892 +3 41940 43892 43377 +3 41941 43378 43895 +3 41941 43895 42572 +3 41942 42561 43126 +3 41942 43126 42537 +3 41943 42538 43127 +3 41943 43127 42562 +3 41944 43182 42970 +3 41945 42971 43183 +3 41946 42102 42567 +3 41946 42567 42387 +3 41947 42388 42568 +3 41947 42568 42103 +3 41948 42119 42788 +3 41948 42788 42614 +3 41949 42615 42789 +3 41949 42789 42120 +3 41950 42193 42782 +3 41950 42782 42547 +3 41951 42548 42783 +3 41951 42783 42194 +3 41952 42856 43100 +3 41952 43100 42453 +3 41953 42454 43101 +3 41953 43101 42857 +3 41954 42359 42754 +3 41954 42754 42351 +3 41955 42352 42755 +3 41955 42755 42360 +3 41956 42139 42583 +3 41956 42583 42371 +3 41957 42372 42584 +3 41957 42584 42140 +3 41958 42874 43752 +3 41958 43752 42866 +3 41959 42867 43753 +3 41959 43753 42875 +3 41960 42238 42341 +3 41960 42341 42035 +3 41961 42036 42342 +3 41961 42342 42239 +3 41962 42137 43047 +3 41962 43047 42848 +3 41963 42849 43048 +3 41963 43048 42138 +3 41964 42108 43090 +3 41964 43090 42763 +3 41965 42764 43091 +3 41965 43091 42109 +3 41966 42029 42059 +3 41966 42059 41967 +3 41967 42059 42030 +3 41968 43116 43142 +3 41968 43142 41969 +3 41969 43142 43117 +3 41970 42658 43292 +3 41970 43292 42670 +3 41971 42671 43293 +3 41971 43293 42659 +3 41972 42866 43762 +3 41972 43762 42886 +3 41973 42887 43763 +3 41973 43763 42867 +3 41974 42147 42512 +3 41974 42512 42303 +3 41975 42304 42513 +3 41975 42513 42148 +3 41976 42685 43648 +3 41976 43648 43265 +3 41977 43266 43649 +3 41977 43649 42686 +3 41978 42178 42724 +3 41978 42724 42524 +3 41979 42525 42725 +3 41979 42725 42179 +3 41980 42323 42528 +3 41980 42528 42324 +3 41981 42679 43000 +3 41981 43000 42265 +3 41982 42266 43001 +3 41982 43001 42680 +3 41983 41985 42551 +3 41983 42551 42432 +3 41984 42433 42552 +3 41984 42552 41986 +3 41985 42529 42551 +3 41986 42552 42530 +3 41987 42618 43307 +3 41987 43307 42658 +3 41988 42659 43308 +3 41988 43308 42619 +3 41989 42443 42646 +3 41989 42646 42186 +3 41990 42187 42647 +3 41990 42647 42444 +3 41991 42274 43582 +3 41991 43582 43315 +3 41992 43316 43583 +3 41992 43583 42275 +3 41993 42670 43319 +3 41993 43319 42612 +3 41994 42613 43320 +3 41994 43320 42671 +3 41995 42563 42735 +3 41995 42735 42176 +3 41996 42177 42736 +3 41996 42736 42564 +3 41997 42786 42980 +3 41997 42980 42137 +3 41998 42138 42981 +3 41998 42981 42787 +3 41999 42037 42082 +3 41999 42082 42038 +3 42000 42039 42083 +3 42000 42083 42037 +3 42001 42162 42884 +3 42001 42884 42687 +3 42002 42688 42885 +3 42002 42885 42163 +3 42003 42610 42729 +3 42003 42729 42086 +3 42004 42087 42730 +3 42004 42730 42611 +3 42005 42804 43963 +3 42005 43963 43173 +3 42006 43174 43964 +3 42006 43964 42805 +3 42007 42357 43286 +3 42007 43286 42921 +3 42008 42922 43287 +3 42008 43287 42358 +3 42009 42038 42084 +3 42009 42084 42044 +3 42010 42045 42085 +3 42010 42085 42039 +3 42011 42106 42420 +3 42011 42420 42255 +3 42012 42256 42421 +3 42012 42421 42107 +3 42013 42206 42441 +3 42013 42441 42198 +3 42014 42199 42442 +3 42014 42442 42207 +3 42015 43143 43539 +3 42015 43539 42385 +3 42016 42386 43540 +3 42016 43540 43144 +3 42017 42545 42683 +3 42017 42683 42145 +3 42018 42146 42684 +3 42018 42684 42546 +3 42019 43354 43784 +3 42019 43784 42467 +3 42020 42468 43785 +3 42020 43785 43355 +3 42021 42533 42919 +3 42021 42919 42404 +3 42022 42405 42920 +3 42022 42920 42534 +3 42023 42990 44179 +3 42023 44179 43338 +3 42024 43339 44180 +3 42024 44180 42991 +3 42025 42477 42779 +3 42025 42779 42289 +3 42026 42290 42780 +3 42026 42780 42478 +3 42027 42161 42395 +3 42027 42395 42206 +3 42028 42207 42396 +3 42028 42396 42161 +3 42029 42044 42090 +3 42029 42090 42059 +3 42030 42059 42091 +3 42030 42091 42045 +3 42031 42263 42436 +3 42031 42436 42164 +3 42032 42165 42437 +3 42032 42437 42264 +3 42033 42422 43275 +3 42033 43275 42864 +3 42034 42865 43276 +3 42034 43276 42423 +3 42035 42341 42399 +3 42035 42399 42050 +3 42036 42050 42400 +3 42036 42400 42342 +3 42037 42083 42082 +3 42038 42082 42084 +3 42039 42085 42083 +3 42040 43619 43918 +3 42040 43918 42379 +3 42041 42380 43919 +3 42041 43919 43620 +3 42042 42367 42826 +3 42042 42826 42473 +3 42043 42474 42827 +3 42043 42827 42368 +3 42044 42084 42090 +3 42045 42091 42085 +3 42046 42909 43196 +3 42046 43196 42317 +3 42047 42318 43197 +3 42047 43197 42910 +3 42048 42236 43442 +3 42048 43442 43029 +3 42049 43030 43443 +3 42049 43443 42237 +3 42050 42399 42400 +3 42051 42731 43933 +3 42051 43933 43277 +3 42052 43277 43934 +3 42052 43934 42732 +3 42053 42355 42451 +3 42053 42451 42127 +3 42054 42128 42452 +3 42054 42452 42356 +3 42055 42276 43438 +3 42055 43438 43151 +3 42056 43152 43439 +3 42056 43439 42277 +3 42057 42830 43025 +3 42057 43025 42220 +3 42058 42221 43026 +3 42058 43026 42831 +3 42059 42090 42091 +3 42060 42303 42604 +3 42060 42604 42323 +3 42061 42324 42605 +3 42061 42605 42304 +3 42062 42899 43155 +3 42062 43155 42319 +3 42063 42320 43156 +3 42063 43156 42900 +3 42064 42291 42965 +3 42064 42965 42677 +3 42065 42678 42966 +3 42065 42966 42292 +3 42066 42698 42967 +3 42066 42967 42329 +3 42067 42330 42968 +3 42067 42968 42699 +3 42068 42573 42816 +3 42068 42816 42321 +3 42069 42322 42817 +3 42069 42817 42574 +3 42070 42255 42471 +3 42070 42471 42263 +3 42071 42264 42472 +3 42071 42472 42256 +3 42072 42818 43790 +3 42072 43790 43098 +3 42073 43099 43791 +3 42073 43791 42819 +3 42074 42430 43004 +3 42074 43004 42616 +3 42075 42617 43005 +3 42075 43005 42431 +3 42076 43418 44042 +3 42076 44042 42748 +3 42077 42749 44043 +3 42077 44043 43419 +3 42078 43059 43426 +3 42078 43426 42424 +3 42079 42425 43427 +3 42079 43427 43060 +3 42080 42996 43449 +3 42080 43449 42520 +3 42081 42521 43450 +3 42081 43450 42997 +3 42082 42083 42110 +3 42082 42110 42084 +3 42083 42085 42110 +3 42084 42110 42090 +3 42085 42091 42110 +3 42086 42729 42790 +3 42086 42790 42119 +3 42087 42120 42791 +3 42087 42791 42730 +3 42088 42569 43381 +3 42088 43381 42894 +3 42089 42894 43382 +3 42089 43382 42570 +3 42090 42110 42091 +3 42092 42202 42457 +3 42092 42457 42309 +3 42093 42310 42458 +3 42093 42458 42203 +3 42094 42337 42972 +3 42094 42972 42710 +3 42095 42711 42973 +3 42095 42973 42338 +3 42096 42224 43627 +3 42096 43627 43496 +3 42097 43497 43628 +3 42097 43628 42225 +3 42098 42506 44111 +3 42098 44111 43740 +3 42099 43741 44112 +3 42099 44112 42507 +3 42100 42371 42706 +3 42100 42706 42461 +3 42101 42462 42707 +3 42101 42707 42372 +3 42102 42222 42672 +3 42102 42672 42567 +3 42103 42568 42673 +3 42103 42673 42223 +3 42104 42504 42712 +3 42104 42712 42295 +3 42105 42296 42713 +3 42105 42713 42505 +3 42106 42168 42485 +3 42106 42485 42420 +3 42107 42421 42486 +3 42107 42486 42169 +3 42108 42208 43214 +3 42108 43214 43090 +3 42109 43091 43215 +3 42109 43215 42209 +3 42111 42309 42481 +3 42111 42481 42238 +3 42112 42239 42482 +3 42112 42482 42310 +3 42113 42539 42901 +3 42113 42901 42477 +3 42114 42478 42902 +3 42114 42902 42540 +3 42115 42353 43186 +3 42115 43186 42947 +3 42116 42948 43187 +3 42116 43187 42354 +3 42117 42347 43234 +3 42117 43234 43021 +3 42118 43022 43235 +3 42118 43235 42348 +3 42119 42790 42788 +3 42120 42789 42791 +3 42121 43389 44257 +3 42121 44257 43110 +3 42122 43111 44258 +3 42122 44258 43390 +3 42123 43198 43860 +3 42123 43860 42792 +3 42124 42793 43861 +3 42124 43861 43199 +3 42125 42455 43057 +3 42125 43057 42702 +3 42126 42703 43058 +3 42126 43058 42456 +3 42127 42451 42493 +3 42127 42493 42168 +3 42128 42169 42494 +3 42128 42494 42452 +3 42129 42832 43082 +3 42129 43082 42377 +3 42130 42378 43083 +3 42130 43083 42833 +3 42131 43228 44048 +3 42131 44048 43006 +3 42132 43007 44049 +3 42132 44049 43229 +3 42133 43104 43822 +3 42133 43822 42917 +3 42134 42918 43823 +3 42134 43823 43105 +3 42135 42510 42808 +3 42135 42808 42443 +3 42136 42444 42809 +3 42136 42809 42511 +3 42137 42980 43047 +3 42138 43048 42981 +3 42139 42268 42700 +3 42139 42700 42583 +3 42140 42584 42701 +3 42140 42701 42269 +3 42141 42440 42800 +3 42141 42800 42510 +3 42142 42511 42801 +3 42142 42801 42440 +3 42143 42517 43598 +3 42143 43598 43200 +3 42144 43201 43599 +3 42144 43599 42518 +3 42145 42683 42794 +3 42145 42794 42228 +3 42146 42229 42795 +3 42146 42795 42684 +3 42147 42257 42642 +3 42147 42642 42512 +3 42148 42513 42643 +3 42148 42643 42258 +3 42149 42461 42634 +3 42149 42634 42299 +3 42150 42300 42635 +3 42150 42635 42462 +3 42151 42416 43130 +3 42151 43130 42868 +3 42152 42869 43131 +3 42152 43131 42417 +3 42153 42531 43631 +3 42153 43631 43242 +3 42154 43243 43632 +3 42154 43632 42532 +3 42155 42387 42743 +3 42155 42743 42526 +3 42156 42527 42744 +3 42156 42744 42388 +3 42157 42365 43527 +3 42157 43527 43304 +3 42158 43305 43528 +3 42158 43528 42366 +3 42159 42664 42955 +3 42159 42955 42426 +3 42160 42427 42956 +3 42160 42956 42665 +3 42161 42396 42519 +3 42161 42519 42395 +3 42162 42220 42982 +3 42162 42982 42884 +3 42163 42885 42983 +3 42163 42983 42221 +3 42164 42436 42553 +3 42164 42553 42242 +3 42165 42243 42554 +3 42165 42554 42437 +3 42166 43084 43722 +3 42166 43722 42784 +3 42167 42785 43723 +3 42167 43723 43085 +3 42168 42493 42485 +3 42169 42486 42494 +3 42170 42739 43108 +3 42170 43108 42541 +3 42171 42542 43109 +3 42171 43109 42740 +3 42172 43391 43668 +3 42173 43669 43392 +3 42174 43096 43410 +3 42174 43410 42463 +3 42175 42464 43411 +3 42175 43411 43097 +3 42176 42735 42862 +3 42176 42862 42249 +3 42177 42250 42863 +3 42177 42863 42736 +3 42178 42315 42905 +3 42178 42905 42724 +3 42179 42725 42906 +3 42179 42906 42316 +3 42180 42579 43208 +3 42180 43208 42810 +3 42181 42811 43209 +3 42181 43209 42580 +3 42182 42923 43335 +3 42182 43335 42581 +3 42183 42582 43336 +3 42183 43336 42924 +3 42184 43043 43551 +3 42184 43551 42650 +3 42185 42651 43552 +3 42185 43552 43044 +3 42186 42646 42806 +3 42186 42806 42327 +3 42187 42328 42807 +3 42187 42807 42647 +3 42188 42834 43240 +3 42188 43240 42592 +3 42189 42593 43241 +3 42189 43241 42835 +3 42190 42945 43190 +3 42190 43190 42434 +3 42191 42435 43191 +3 42191 43191 42946 +3 42192 42719 43577 +3 42192 43577 42718 +3 42193 42369 42998 +3 42193 42998 42782 +3 42194 42783 42999 +3 42194 42999 42370 +3 42195 42645 43356 +3 42195 43356 42644 +3 42196 43586 43884 +3 42196 43884 42557 +3 42197 42558 43885 +3 42197 43885 43587 +3 42198 42441 42594 +3 42198 42594 42355 +3 42199 42356 42595 +3 42199 42595 42442 +3 42200 43621 43880 +3 42200 43880 42708 +3 42201 42709 43881 +3 42201 43881 43622 +3 42202 42242 42549 +3 42202 42549 42457 +3 42203 42458 42550 +3 42203 42550 42243 +3 42204 42600 43787 +3 42204 43787 43434 +3 42205 43435 43788 +3 42205 43788 42601 +3 42206 42395 42608 +3 42206 42608 42441 +3 42207 42442 42609 +3 42207 42609 42396 +3 42208 42261 43294 +3 42208 43294 43214 +3 42209 43215 43295 +3 42209 43295 42262 +3 42210 43149 43608 +3 42210 43608 42628 +3 42211 42629 43609 +3 42211 43609 43150 +3 42212 42514 43350 +3 42212 43350 43037 +3 42213 43038 43351 +3 42213 43351 42515 +3 42214 42524 42978 +3 42214 42978 42652 +3 42215 42653 42979 +3 42215 42979 42525 +3 42216 42547 43049 +3 42216 43049 42714 +3 42217 42715 43050 +3 42217 43050 42548 +3 42218 43055 43436 +3 42218 43436 42589 +3 42219 42590 43437 +3 42219 43437 43056 +3 42220 43025 42982 +3 42221 42983 43026 +3 42222 42299 42752 +3 42222 42752 42672 +3 42223 42673 42753 +3 42223 42753 42300 +3 42224 42246 43690 +3 42224 43690 43627 +3 42225 43628 43691 +3 42225 43691 42246 +3 42226 42767 43670 +3 42226 43670 43120 +3 42227 43121 43671 +3 42227 43671 42768 +3 42228 42794 42877 +3 42228 42877 42539 +3 42229 42540 42878 +3 42229 42878 42795 +3 42230 42648 43451 +3 42230 43451 43015 +3 42231 43016 43452 +3 42231 43452 42649 +3 42232 42652 42994 +3 42232 42994 42573 +3 42233 42574 42995 +3 42233 42995 42653 +3 42234 42526 42812 +3 42234 42812 42504 +3 42235 42505 42813 +3 42235 42813 42527 +3 42236 42402 43591 +3 42236 43591 43442 +3 42237 43443 43592 +3 42237 43592 42403 +3 42238 42481 42596 +3 42238 42596 42341 +3 42239 42342 42597 +3 42239 42597 42482 +3 42240 43299 43610 +3 42240 43610 42559 +3 42241 42560 43611 +3 42241 43611 43300 +3 42242 42553 42549 +3 42243 42550 42554 +3 42244 43474 44010 +3 42244 44010 42854 +3 42245 42855 44011 +3 42245 44011 43475 +3 42246 43691 43690 +3 42247 42840 44093 +3 42247 44093 43547 +3 42248 43548 44094 +3 42248 44094 42841 +3 42249 42862 42929 +3 42249 42929 42278 +3 42250 42278 42930 +3 42250 42930 42863 +3 42251 42756 43706 +3 42251 43706 43163 +3 42252 43164 43707 +3 42252 43707 42757 +3 42253 42668 43688 +3 42253 43688 43282 +3 42254 43283 43689 +3 42254 43689 42669 +3 42255 42420 42630 +3 42255 42630 42471 +3 42256 42472 42631 +3 42256 42631 42421 +3 42257 42432 42822 +3 42257 42822 42642 +3 42258 42643 42823 +3 42258 42823 42433 +3 42259 43192 43838 +3 42259 43838 42907 +3 42260 42908 43839 +3 42260 43839 43193 +3 42261 42262 43337 +3 42261 43337 43294 +3 42262 43295 43337 +3 42263 42471 42636 +3 42263 42636 42436 +3 42264 42437 42637 +3 42264 42637 42472 +3 42265 43000 43226 +3 42265 43226 42408 +3 42266 42409 43227 +3 42266 43227 43001 +3 42267 42913 43922 +3 42267 43922 42914 +3 42268 42373 42802 +3 42268 42802 42700 +3 42269 42701 42803 +3 42269 42803 42374 +3 42270 42943 43288 +3 42270 43288 42587 +3 42271 42588 43289 +3 42271 43289 42944 +3 42272 43428 43840 +3 42272 43840 42704 +3 42273 42705 43841 +3 42273 43841 43429 +3 42274 42559 43796 +3 42274 43796 43582 +3 42275 43583 43797 +3 42275 43797 42560 +3 42276 42543 43615 +3 42276 43615 43438 +3 42277 43439 43616 +3 42277 43616 42544 +3 42278 42929 42930 +3 42279 43338 44457 +3 42279 44457 43515 +3 42280 43516 44458 +3 42280 44458 43339 +3 42281 42662 43886 +3 42281 43886 43531 +3 42282 43532 43887 +3 42282 43887 42663 +3 42283 42632 43371 +3 42283 43371 42986 +3 42284 42987 43372 +3 42284 43372 42633 +3 42285 42880 43910 +3 42285 43910 43365 +3 42286 43366 43911 +3 42286 43911 42881 +3 42287 43177 43929 +3 42287 43929 43159 +3 42288 43160 43930 +3 42288 43930 43178 +3 42289 42779 43051 +3 42289 43051 42563 +3 42290 42564 43052 +3 42290 43052 42780 +3 42291 42497 43165 +3 42291 43165 42965 +3 42292 42966 43166 +3 42292 43166 42498 +3 42293 42702 43224 +3 42293 43224 42796 +3 42294 42797 43225 +3 42294 43225 42703 +3 42295 42712 42888 +3 42295 42888 42449 +3 42296 42450 42889 +3 42296 42889 42713 +3 42297 43549 43988 +3 42297 43988 42765 +3 42298 42766 43989 +3 42298 43989 43550 +3 42299 42634 42752 +3 42300 42753 42635 +3 42301 43159 43949 +3 42301 43949 43104 +3 42302 43105 43950 +3 42302 43950 43160 +3 42303 42512 42820 +3 42303 42820 42604 +3 42304 42605 42821 +3 42304 42821 42513 +3 42305 42666 43596 +3 42305 43596 43188 +3 42306 43189 43597 +3 42306 43597 42667 +3 42307 43098 43955 +3 42307 43955 43177 +3 42308 43178 43956 +3 42308 43956 43099 +3 42309 42457 42640 +3 42309 42640 42481 +3 42310 42482 42641 +3 42310 42641 42458 +3 42311 42903 44279 +3 42311 44279 43746 +3 42312 43747 44280 +3 42312 44280 42904 +3 42313 42796 43248 +3 42313 43248 42739 +3 42314 42740 43249 +3 42314 43249 42797 +3 42315 42412 43035 +3 42315 43035 42905 +3 42316 42906 43036 +3 42316 43036 42413 +3 42317 43196 43480 +3 42317 43480 42543 +3 42318 42544 43481 +3 42318 43481 43197 +3 42319 43155 43569 +3 42319 43569 42691 +3 42320 42692 43570 +3 42320 43570 43156 +3 42321 42816 43045 +3 42321 43045 42545 +3 42322 42546 43046 +3 42322 43046 42817 +3 42323 42604 42824 +3 42323 42824 42528 +3 42324 42528 42825 +3 42324 42825 42605 +3 42325 43511 44452 +3 42325 44452 43389 +3 42326 43390 44453 +3 42326 44453 43512 +3 42327 42806 42925 +3 42327 42925 42414 +3 42328 42415 42926 +3 42328 42926 42807 +3 42329 42967 43348 +3 42329 43348 42679 +3 42330 42680 43349 +3 42330 43349 42968 +3 42331 43173 44226 +3 42331 44226 43468 +3 42332 43469 44227 +3 42332 44227 43174 +3 42333 42720 44131 +3 42333 44131 43730 +3 42334 43731 44132 +3 42334 44132 42721 +3 42335 42844 43202 +3 42335 43202 42664 +3 42336 42665 43203 +3 42336 43203 42845 +3 42337 42438 43145 +3 42337 43145 42972 +3 42338 42973 43146 +3 42338 43146 42439 +3 42339 43472 43868 +3 42339 43868 42771 +3 42340 42772 43869 +3 42340 43869 43473 +3 42341 42596 42660 +3 42341 42660 42399 +3 42342 42400 42661 +3 42342 42661 42597 +3 42343 43488 44129 +3 42343 44129 42988 +3 42344 42989 44130 +3 42344 44130 43489 +3 42345 43385 43854 +3 42345 43854 42838 +3 42346 42839 43855 +3 42346 43855 43386 +3 42347 42620 43465 +3 42347 43465 43234 +3 42348 43235 43466 +3 42348 43466 42621 +3 42349 42728 43230 +3 42349 43230 42834 +3 42350 42835 43231 +3 42350 43231 42728 +3 42351 42754 43118 +3 42351 43118 42676 +3 42352 42676 43119 +3 42352 43119 42755 +3 42353 42810 43361 +3 42353 43361 43186 +3 42354 43187 43362 +3 42354 43362 42811 +3 42355 42594 42696 +3 42355 42696 42451 +3 42356 42452 42697 +3 42356 42697 42595 +3 42357 42624 43594 +3 42357 43594 43286 +3 42358 43287 43595 +3 42358 43595 42625 +3 42359 42677 43114 +3 42359 43114 42754 +3 42360 42755 43115 +3 42360 43115 42678 +3 42361 42714 43222 +3 42361 43222 42844 +3 42362 42845 43223 +3 42362 43223 42715 +3 42363 42876 44002 +3 42363 44002 43517 +3 42364 43518 44003 +3 42364 44003 42879 +3 42365 42489 43666 +3 42365 43666 43527 +3 42366 43528 43667 +3 42366 43667 42490 +3 42367 42616 43102 +3 42367 43102 42826 +3 42368 42827 43103 +3 42368 43103 42617 +3 42369 42473 43124 +3 42369 43124 42998 +3 42370 42999 43125 +3 42370 43125 42474 +3 42371 42583 42933 +3 42371 42933 42706 +3 42372 42707 42934 +3 42372 42934 42584 +3 42373 42401 42858 +3 42373 42858 42802 +3 42374 42803 42859 +3 42374 42859 42401 +3 42375 43459 44250 +3 42375 44250 43228 +3 42376 43229 44251 +3 42376 44251 43460 +3 42377 43082 43267 +3 42377 43267 42533 +3 42378 42534 43268 +3 42378 43268 43083 +3 42379 43918 44177 +3 42379 44177 42662 +3 42380 42663 44178 +3 42380 44178 43919 +3 42381 42915 44378 +3 42381 44378 43896 +3 42382 43897 44379 +3 42382 44379 42916 +3 42383 42882 44329 +3 42383 44329 43850 +3 42384 43851 44330 +3 42384 44330 42883 +3 42385 43539 43824 +3 42385 43824 42681 +3 42386 42682 43825 +3 42386 43825 43540 +3 42387 42567 42941 +3 42387 42941 42743 +3 42388 42744 42942 +3 42388 42942 42568 +3 42389 42726 44158 +3 42389 44158 43800 +3 42390 43801 44159 +3 42390 44159 42727 +3 42391 43395 43935 +3 42391 43935 42959 +3 42392 42960 43936 +3 42392 43936 43395 +3 42393 42872 43826 +3 42393 43826 43367 +3 42394 43368 43827 +3 42394 43827 42873 +3 42395 42519 42737 +3 42395 42737 42608 +3 42396 42609 42738 +3 42396 42738 42519 +3 42397 43515 44422 +3 42397 44422 43511 +3 42398 43512 44423 +3 42398 44423 43516 +3 42399 42660 42695 +3 42399 42695 42400 +3 42400 42695 42661 +3 42401 42859 42858 +3 42402 42475 43686 +3 42402 43686 43591 +3 42403 43592 43687 +3 42403 43687 42476 +3 42404 42919 43263 +3 42404 43263 42698 +3 42405 42699 43264 +3 42405 43264 42920 +3 42406 42864 43641 +3 42406 43641 43134 +3 42407 43135 43642 +3 42407 43642 42865 +3 42408 43226 43352 +3 42408 43352 42465 +3 42409 42466 43353 +3 42409 43353 43227 +3 42410 43846 44246 +3 42410 44246 42836 +3 42411 42837 44247 +3 42411 44247 43847 +3 42412 42445 43078 +3 42412 43078 43035 +3 42413 43036 43079 +3 42413 43079 42446 +3 42414 42925 43072 +3 42414 43072 42445 +3 42415 42446 43073 +3 42415 43073 42926 +3 42416 42763 43533 +3 42416 43533 43130 +3 42417 43131 43534 +3 42417 43534 42764 +3 42418 42951 44050 +3 42418 44050 43555 +3 42419 43556 44051 +3 42419 44051 42952 +3 42420 42485 42741 +3 42420 42741 42630 +3 42421 42631 42742 +3 42421 42742 42486 +3 42422 42733 43623 +3 42422 43623 43275 +3 42423 43276 43624 +3 42423 43624 42734 +3 42424 43426 43682 +3 42424 43682 42674 +3 42425 42675 43683 +3 42425 43683 43427 +3 42426 42955 43147 +3 42426 43147 42610 +3 42427 42611 43148 +3 42427 43148 42956 +3 42428 43792 43996 +3 42428 43996 42606 +3 42429 42607 43997 +3 42429 43997 43793 +3 42430 42710 43309 +3 42430 43309 43004 +3 42431 43005 43310 +3 42431 43310 42711 +3 42432 42551 42949 +3 42432 42949 42822 +3 42433 42823 42950 +3 42433 42950 42552 +3 42434 43190 43424 +3 42434 43424 42598 +3 42435 42599 43425 +3 42435 43425 43191 +3 42436 42636 42750 +3 42436 42750 42553 +3 42437 42554 42751 +3 42437 42751 42637 +3 42438 42502 43261 +3 42438 43261 43145 +3 42439 43146 43262 +3 42439 43262 42503 +3 42440 42801 43065 +3 42440 43065 42800 +3 42441 42608 42773 +3 42441 42773 42594 +3 42442 42595 42774 +3 42442 42774 42609 +3 42443 42808 43063 +3 42443 43063 42646 +3 42444 42647 43064 +3 42444 43064 42809 +3 42445 43072 43078 +3 42446 43079 43073 +3 42447 43902 44321 +3 42447 44321 42890 +3 42448 42891 44322 +3 42448 44322 43903 +3 42449 42888 42976 +3 42449 42976 42529 +3 42450 42530 42977 +3 42450 42977 42889 +3 42451 42696 42758 +3 42451 42758 42493 +3 42452 42494 42759 +3 42452 42759 42697 +3 42453 43100 43612 +3 42453 43612 42923 +3 42454 42924 43613 +3 42454 43613 43101 +3 42455 42687 43325 +3 42455 43325 43057 +3 42456 43058 43326 +3 42456 43326 42688 +3 42457 42549 42745 +3 42457 42745 42640 +3 42458 42641 42746 +3 42458 42746 42550 +3 42459 42814 43866 +3 42459 43866 43519 +3 42460 43520 43867 +3 42460 43867 42815 +3 42461 42706 42937 +3 42461 42937 42634 +3 42462 42635 42938 +3 42462 42938 42707 +3 42463 43410 43635 +3 42463 43635 42689 +3 42464 42690 43636 +3 42464 43636 43411 +3 42465 43352 43430 +3 42465 43430 42501 +3 42466 42501 43431 +3 42466 43431 43353 +3 42467 43784 44162 +3 42467 44162 43198 +3 42468 43199 44163 +3 42468 44163 43785 +3 42469 43246 43774 +3 42469 43774 42996 +3 42470 42997 43775 +3 42470 43775 43247 +3 42471 42630 42798 +3 42471 42798 42636 +3 42472 42637 42799 +3 42472 42799 42631 +3 42473 42826 43220 +3 42473 43220 43124 +3 42474 43125 43221 +3 42474 43221 42827 +3 42475 42516 43734 +3 42475 43734 43686 +3 42476 43687 43735 +3 42476 43735 42516 +3 42477 42901 43204 +3 42477 43204 42779 +3 42478 42780 43205 +3 42478 43205 42902 +3 42479 42953 44273 +3 42479 44273 43828 +3 42480 43829 44274 +3 42480 44274 42954 +3 42481 42640 42777 +3 42481 42777 42596 +3 42482 42597 42778 +3 42482 42778 42641 +3 42483 43446 44301 +3 42483 44301 43459 +3 42484 43460 44302 +3 42484 44302 43447 +3 42485 42493 42769 +3 42485 42769 42741 +3 42486 42742 42770 +3 42486 42770 42494 +3 42487 43346 43980 +3 42487 43980 43149 +3 42488 43150 43981 +3 42488 43981 43347 +3 42489 42577 43754 +3 42489 43754 43666 +3 42490 43667 43755 +3 42490 43755 42578 +3 42491 43468 44309 +3 42491 44309 43446 +3 42492 43447 44310 +3 42492 44310 43469 +3 42493 42758 42769 +3 42494 42770 42759 +3 42495 43015 43676 +3 42495 43676 43153 +3 42496 43154 43677 +3 42496 43677 43016 +3 42497 42614 43329 +3 42497 43329 43165 +3 42498 43166 43330 +3 42498 43330 42615 +3 42499 43698 44486 +3 42499 44486 43354 +3 42500 43355 44487 +3 42500 44487 43699 +3 42501 43430 43431 +3 42502 42503 43296 +3 42502 43296 43261 +3 42503 43262 43296 +3 42504 42812 43066 +3 42504 43066 42712 +3 42505 42713 43067 +3 42505 43067 42813 +3 42506 42846 44402 +3 42506 44402 44111 +3 42507 44112 44403 +3 42507 44403 42847 +3 42508 43188 43992 +3 42508 43992 43331 +3 42509 43332 43993 +3 42509 43993 43189 +3 42510 42800 43138 +3 42510 43138 42808 +3 42511 42809 43139 +3 42511 43139 42801 +3 42512 42642 42984 +3 42512 42984 42820 +3 42513 42821 42985 +3 42513 42985 42643 +3 42514 42716 43588 +3 42514 43588 43350 +3 42515 43351 43589 +3 42515 43589 42717 +3 42516 43735 43734 +3 42517 42852 43804 +3 42517 43804 43598 +3 42518 43599 43805 +3 42518 43805 42853 +3 42519 42738 42737 +3 42520 43449 43778 +3 42520 43778 42860 +3 42521 42861 43779 +3 42521 43779 43450 +3 42522 42921 43766 +3 42522 43766 43327 +3 42523 43328 43767 +3 42523 43767 42922 +3 42524 42724 43212 +3 42524 43212 42978 +3 42525 42979 43213 +3 42525 43213 42725 +3 42526 42743 43070 +3 42526 43070 42812 +3 42527 42813 43071 +3 42527 43071 42744 +3 42528 42824 43010 +3 42528 43010 42825 +3 42529 42976 43027 +3 42529 43027 42551 +3 42530 42552 43028 +3 42530 43028 42977 +3 42531 43120 43912 +3 42531 43912 43631 +3 42532 43632 43913 +3 42532 43913 43121 +3 42533 43267 43408 +3 42533 43408 42919 +3 42534 42920 43409 +3 42534 43409 43268 +3 42535 43297 43810 +3 42535 43810 43043 +3 42536 43044 43811 +3 42536 43811 43298 +3 42537 43126 43654 +3 42537 43654 43112 +3 42538 43113 43655 +3 42538 43655 43127 +3 42539 42877 43259 +3 42539 43259 42901 +3 42540 42902 43260 +3 42540 43260 42878 +3 42541 43108 43482 +3 42541 43482 42832 +3 42542 42833 43483 +3 42542 43483 43109 +3 42543 43480 43615 +3 42544 43616 43481 +3 42545 43045 43206 +3 42545 43206 42683 +3 42546 42684 43207 +3 42546 43207 43046 +3 42547 42782 43323 +3 42547 43323 43049 +3 42548 43050 43324 +3 42548 43324 42783 +3 42549 42553 42775 +3 42549 42775 42745 +3 42550 42746 42776 +3 42550 42776 42554 +3 42551 43027 42949 +3 42552 42950 43028 +3 42553 42750 42775 +3 42554 42776 42751 +3 42555 43112 43573 +3 42555 43573 42943 +3 42556 42944 43574 +3 42556 43574 43113 +3 42557 43884 44146 +3 42557 44146 42842 +3 42558 42843 44147 +3 42558 44147 43885 +3 42559 43610 43796 +3 42560 43797 43611 +3 42561 42986 43602 +3 42561 43602 43126 +3 42562 43127 43603 +3 42562 43603 42987 +3 42563 43051 43236 +3 42563 43236 42735 +3 42564 42736 43237 +3 42564 43237 43052 +3 42565 43344 43736 +3 42565 43736 42909 +3 42566 42910 43737 +3 42566 43737 43345 +3 42567 42672 43074 +3 42567 43074 42941 +3 42568 42942 43075 +3 42568 43075 42673 +3 42569 43163 43977 +3 42569 43977 43381 +3 42570 43382 43978 +3 42570 43978 43164 +3 42571 43257 44555 +3 42571 44555 43892 +3 42572 43895 44556 +3 42572 44556 43258 +3 42573 42994 43269 +3 42573 43269 42816 +3 42574 42817 43270 +3 42574 43270 42995 +3 42575 43331 44032 +3 42575 44032 43317 +3 42576 43318 44033 +3 42576 44033 43332 +3 42577 42578 43786 +3 42577 43786 43754 +3 42578 43755 43786 +3 42579 42868 43567 +3 42579 43567 43208 +3 42580 43209 43568 +3 42580 43568 42869 +3 42581 43335 43650 +3 42581 43650 42899 +3 42582 42900 43651 +3 42582 43651 43336 +3 42583 42700 43092 +3 42583 43092 42933 +3 42584 42934 43093 +3 42584 43093 42701 +3 42585 43317 44054 +3 42585 44054 43346 +3 42586 43347 44055 +3 42586 44055 43318 +3 42587 43288 43553 +3 42587 43553 42786 +3 42588 42787 43554 +3 42588 43554 43289 +3 42589 43436 43716 +3 42589 43716 42856 +3 42590 42857 43717 +3 42590 43717 43437 +3 42591 43153 43590 +3 42591 43590 43154 +3 42592 43240 43617 +3 42592 43617 42945 +3 42593 42946 43618 +3 42593 43618 43241 +3 42594 42773 42911 +3 42594 42911 42696 +3 42595 42697 42912 +3 42595 42912 42774 +3 42596 42777 42895 +3 42596 42895 42660 +3 42597 42661 42896 +3 42597 42896 42778 +3 42598 43424 43541 +3 42598 43541 42830 +3 42599 42831 43542 +3 42599 43542 43425 +3 42600 42992 44148 +3 42600 44148 43787 +3 42601 43788 44149 +3 42601 44149 42993 +3 42602 43301 44351 +3 42602 44351 43710 +3 42603 43711 44352 +3 42603 44352 43302 +3 42604 42820 43068 +3 42604 43068 42824 +3 42605 42825 43069 +3 42605 43069 42821 +3 42606 43996 44142 +3 42606 44142 42722 +3 42607 42723 44143 +3 42607 44143 43997 +3 42608 42737 42935 +3 42608 42935 42773 +3 42609 42774 42936 +3 42609 42936 42738 +3 42610 43147 43321 +3 42610 43321 42729 +3 42611 42730 43322 +3 42611 43322 43148 +3 42612 43319 43750 +3 42612 43750 43055 +3 42613 43056 43751 +3 42613 43751 43320 +3 42614 42788 43440 +3 42614 43440 43329 +3 42615 43330 43441 +3 42615 43441 42789 +3 42616 43004 43507 +3 42616 43507 43102 +3 42617 43103 43508 +3 42617 43508 43005 +3 42618 43037 43714 +3 42618 43714 43307 +3 42619 43308 43715 +3 42619 43715 43038 +3 42620 42848 43672 +3 42620 43672 43465 +3 42621 43466 43673 +3 42621 43673 42849 +3 42622 43694 44362 +3 42622 44362 43428 +3 42623 43429 44363 +3 42623 44363 43695 +3 42624 43134 43814 +3 42624 43814 43594 +3 42625 43595 43815 +3 42625 43815 43135 +3 42626 43531 44582 +3 42626 44582 43768 +3 42627 43769 44583 +3 42627 44583 43532 +3 42628 43608 43947 +3 42628 43947 43013 +3 42629 43014 43948 +3 42629 43948 43609 +3 42630 42741 42957 +3 42630 42957 42798 +3 42631 42799 42958 +3 42631 42958 42742 +3 42632 42947 43674 +3 42632 43674 43371 +3 42633 43372 43675 +3 42633 43675 42948 +3 42634 42937 43086 +3 42634 43086 42752 +3 42635 42753 43087 +3 42635 43087 42938 +3 42636 42798 42961 +3 42636 42961 42750 +3 42637 42751 42962 +3 42637 42962 42799 +3 42638 43416 43994 +3 42638 43994 43398 +3 42639 43399 43995 +3 42639 43995 43417 +3 42640 42745 42931 +3 42640 42931 42777 +3 42641 42778 42932 +3 42641 42932 42746 +3 42642 42822 43157 +3 42642 43157 42984 +3 42643 42985 43158 +3 42643 43158 42823 +3 42644 43356 43939 +3 42644 43939 43246 +3 42645 43247 43940 +3 42645 43940 43356 +3 42646 43063 43254 +3 42646 43254 42806 +3 42647 42807 43255 +3 42647 43255 43064 +3 42648 43021 43782 +3 42648 43782 43451 +3 42649 43452 43783 +3 42649 43783 43022 +3 42650 43551 43937 +3 42650 43937 43059 +3 42651 43060 43938 +3 42651 43938 43552 +3 42652 42978 43375 +3 42652 43375 42994 +3 42653 42995 43376 +3 42653 43376 42979 +3 42654 43398 44006 +3 42654 44006 43344 +3 42655 43345 44007 +3 42655 44007 43399 +3 42656 43327 44016 +3 42656 44016 43416 +3 42657 43417 44017 +3 42657 44017 43328 +3 42658 43307 43898 +3 42658 43898 43292 +3 42659 43293 43899 +3 42659 43899 43308 +3 42660 42895 42963 +3 42660 42963 42695 +3 42661 42695 42964 +3 42661 42964 42896 +3 42662 44177 43886 +3 42663 43887 44178 +3 42664 43202 43525 +3 42664 43525 42955 +3 42665 42956 43526 +3 42665 43526 43203 +3 42666 42970 43864 +3 42666 43864 43596 +3 42667 43597 43865 +3 42667 43865 42971 +3 42668 43031 44020 +3 42668 44020 43688 +3 42669 43689 44021 +3 42669 44021 43032 +3 42670 43292 43906 +3 42670 43906 43319 +3 42671 43320 43907 +3 42671 43907 43293 +3 42672 42752 43171 +3 42672 43171 43074 +3 42673 43075 43172 +3 42673 43172 42753 +3 42674 43682 44079 +3 42674 44079 42897 +3 42675 42898 44080 +3 42675 44080 43683 +3 42676 43118 43467 +3 42676 43467 43119 +3 42677 42965 43470 +3 42677 43470 43114 +3 42678 43115 43471 +3 42678 43471 42966 +3 42679 43348 43639 +3 42679 43639 43000 +3 42680 43001 43640 +3 42680 43640 43349 +3 42681 43824 44075 +3 42681 44075 42939 +3 42682 42940 44076 +3 42682 44076 43825 +3 42683 43206 43357 +3 42683 43357 42794 +3 42684 42795 43358 +3 42684 43358 43207 +3 42685 43365 44265 +3 42685 44265 43648 +3 42686 43649 44266 +3 42686 44266 43366 +3 42687 42884 43537 +3 42687 43537 43325 +3 42688 43326 43538 +3 42688 43538 42885 +3 42689 43635 43816 +3 42689 43816 42892 +3 42690 42893 43817 +3 42690 43817 43636 +3 42691 43569 43856 +3 42691 43856 42850 +3 42692 42851 43857 +3 42692 43857 43570 +3 42693 43519 44396 +3 42693 44396 43700 +3 42694 43701 44397 +3 42694 44397 43520 +3 42695 42963 42964 +3 42696 42911 43011 +3 42696 43011 42758 +3 42697 42759 43012 +3 42697 43012 42912 +3 42698 43263 43543 +3 42698 43543 42967 +3 42699 42968 43544 +3 42699 43544 43264 +3 42700 42802 43194 +3 42700 43194 43092 +3 42701 43093 43195 +3 42701 43195 42803 +3 42702 43057 43606 +3 42702 43606 43224 +3 42703 43225 43607 +3 42703 43607 43058 +3 42704 43840 44189 +3 42704 44189 43084 +3 42705 43085 44190 +3 42705 44190 43841 +3 42706 42933 43169 +3 42706 43169 42937 +3 42707 42938 43170 +3 42707 43170 42934 +3 42708 43880 44117 +3 42708 44117 42927 +3 42709 42928 44118 +3 42709 44118 43881 +3 42710 42972 43578 +3 42710 43578 43309 +3 42711 43310 43579 +3 42711 43579 42973 +3 42712 43066 43244 +3 42712 43244 42888 +3 42713 42889 43245 +3 42713 43245 43067 +3 42714 43049 43584 +3 42714 43584 43222 +3 42715 43223 43585 +3 42715 43585 43050 +3 42716 42892 43742 +3 42716 43742 43588 +3 42717 43589 43743 +3 42717 43743 42893 +3 42718 43577 44018 +3 42718 44018 43192 +3 42719 43193 44019 +3 42719 44019 43577 +3 42720 43080 44442 +3 42720 44442 44131 +3 42721 44132 44443 +3 42721 44443 43081 +3 42722 44142 44191 +3 42722 44191 42747 +3 42723 42747 44192 +3 42723 44192 44143 +3 42724 42905 43453 +3 42724 43453 43212 +3 42725 43213 43454 +3 42725 43454 42906 +3 42726 43273 44428 +3 42726 44428 44158 +3 42727 44159 44429 +3 42727 44429 43274 +3 42728 43231 43614 +3 42728 43614 43230 +3 42729 43321 43432 +3 42729 43432 42790 +3 42730 42791 43433 +3 42730 43433 43322 +3 42731 43377 44534 +3 42731 44534 43933 +3 42732 43934 44535 +3 42732 44535 43378 +3 42733 43029 43874 +3 42733 43874 43623 +3 42734 43624 43875 +3 42734 43875 43030 +3 42735 43236 43412 +3 42735 43412 42862 +3 42736 42863 43413 +3 42736 43413 43237 +3 42737 42738 42969 +3 42737 42969 42935 +3 42738 42936 42969 +3 42739 43248 43652 +3 42739 43652 43108 +3 42740 43109 43653 +3 42740 43653 43249 +3 42741 42769 43023 +3 42741 43023 42957 +3 42742 42958 43024 +3 42742 43024 42770 +3 42743 42941 43280 +3 42743 43280 43070 +3 42744 43071 43281 +3 42744 43281 42942 +3 42745 42775 43008 +3 42745 43008 42931 +3 42746 42932 43009 +3 42746 43009 42776 +3 42747 44191 44192 +3 42748 44042 44603 +3 42748 44603 43383 +3 42749 43384 44604 +3 42749 44604 44043 +3 42750 42961 43019 +3 42750 43019 42775 +3 42751 42776 43020 +3 42751 43020 42962 +3 42752 43086 43171 +3 42753 43172 43087 +3 42754 43114 43522 +3 42754 43522 43118 +3 42755 43119 43523 +3 42755 43523 43115 +3 42756 43200 44144 +3 42756 44144 43706 +3 42757 43707 44145 +3 42757 44145 43201 +3 42758 43011 43039 +3 42758 43039 42769 +3 42759 42770 43040 +3 42759 43040 43012 +3 42760 44004 44368 +3 42760 44368 43140 +3 42761 43141 44369 +3 42761 44369 44005 +3 42762 43475 44456 +3 42762 44456 43474 +3 42763 43090 43834 +3 42763 43834 43533 +3 42764 43534 43835 +3 42764 43835 43091 +3 42765 43988 44360 +3 42765 44360 43175 +3 42766 43176 44361 +3 42766 44361 43989 +3 42767 43282 44156 +3 42767 44156 43670 +3 42768 43671 44157 +3 42768 44157 43283 +3 42769 43039 43023 +3 42770 43024 43040 +3 42771 43868 44244 +3 42771 44244 43143 +3 42772 43144 44245 +3 42772 44245 43869 +3 42773 42935 43076 +3 42773 43076 42911 +3 42774 42912 43077 +3 42774 43077 42936 +3 42775 43019 43008 +3 42776 43009 43020 +3 42777 42931 43053 +3 42777 43053 42895 +3 42778 42896 43054 +3 42778 43054 42932 +3 42779 43204 43499 +3 42779 43499 43051 +3 42780 43052 43500 +3 42780 43500 43205 +3 42781 43367 44172 +3 42781 44172 43368 +3 42782 42998 43557 +3 42782 43557 43323 +3 42783 43324 43558 +3 42783 43558 42999 +3 42784 43722 44252 +3 42784 44252 43385 +3 42785 43386 44253 +3 42785 44253 43723 +3 42786 43553 43724 +3 42786 43724 42980 +3 42787 42981 43725 +3 42787 43725 43554 +3 42788 42790 43476 +3 42788 43476 43440 +3 42789 43441 43477 +3 42789 43477 42791 +3 42790 43432 43476 +3 42791 43477 43433 +3 42792 43860 44424 +3 42792 44424 43420 +3 42793 43421 44425 +3 42793 44425 43861 +3 42794 43357 43457 +3 42794 43457 42877 +3 42795 42878 43458 +3 42795 43458 43358 +3 42796 43224 43770 +3 42796 43770 43248 +3 42797 43249 43771 +3 42797 43771 43225 +3 42798 42957 43088 +3 42798 43088 42961 +3 42799 42962 43089 +3 42799 43089 42958 +3 42800 43065 43478 +3 42800 43478 43138 +3 42801 43139 43479 +3 42801 43479 43065 +3 42802 42858 43284 +3 42802 43284 43194 +3 42803 43195 43285 +3 42803 43285 42859 +3 42804 43265 44372 +3 42804 44372 43963 +3 42805 43964 44373 +3 42805 44373 43266 +3 42806 43254 43406 +3 42806 43406 42925 +3 42807 42926 43407 +3 42807 43407 43255 +3 42808 43138 43463 +3 42808 43463 43063 +3 42809 43064 43464 +3 42809 43464 43139 +3 42810 43208 43760 +3 42810 43760 43361 +3 42811 43362 43761 +3 42811 43761 43209 +3 42812 43070 43333 +3 42812 43333 43066 +3 42813 43067 43334 +3 42813 43334 43071 +3 42814 43106 44166 +3 42814 44166 43866 +3 42815 43867 44167 +3 42815 44167 43107 +3 42816 43269 43513 +3 42816 43513 43045 +3 42817 43046 43514 +3 42817 43514 43270 +3 42818 43242 44195 +3 42818 44195 43790 +3 42819 43791 44196 +3 42819 44196 43243 +3 42820 42984 43250 +3 42820 43250 43068 +3 42821 43069 43251 +3 42821 43251 42985 +3 42822 42949 43313 +3 42822 43313 43157 +3 42823 43158 43314 +3 42823 43314 42950 +3 42824 43068 43278 +3 42824 43278 43010 +3 42825 43010 43279 +3 42825 43279 43069 +3 42826 43102 43545 +3 42826 43545 43220 +3 42827 43221 43546 +3 42827 43546 43103 +3 42828 43957 44775 +3 42828 44775 43698 +3 42829 43699 44776 +3 42829 44776 43958 +3 42830 43541 43718 +3 42830 43718 43025 +3 42831 43026 43719 +3 42831 43719 43542 +3 42832 43482 43712 +3 42832 43712 43082 +3 42833 43083 43713 +3 42833 43713 43483 +3 42834 43230 43692 +3 42834 43692 43240 +3 42835 43241 43693 +3 42835 43693 43231 +3 42836 44246 44641 +3 42836 44641 43232 +3 42837 43233 44642 +3 42837 44642 44247 +3 42838 43854 44263 +3 42838 44263 43252 +3 42839 43253 44264 +3 42839 44264 43855 +3 42840 43342 44551 +3 42840 44551 44093 +3 42841 44094 44552 +3 42841 44552 43343 +3 42842 44146 44370 +3 42842 44370 43106 +3 42843 43107 44371 +3 42843 44371 44147 +3 42844 43222 43678 +3 42844 43678 43202 +3 42845 43203 43679 +3 42845 43679 43223 +3 42846 43140 44696 +3 42846 44696 44402 +3 42847 44403 44697 +3 42847 44697 43141 +3 42848 43047 43848 +3 42848 43848 43672 +3 42849 43673 43849 +3 42849 43849 43048 +3 42850 43856 43990 +3 42850 43990 42974 +3 42851 42975 43991 +3 42851 43991 43857 +3 42852 43151 44123 +3 42852 44123 43804 +3 42853 43805 44124 +3 42853 44124 43152 +3 42854 44010 44541 +3 42854 44541 43418 +3 42855 43419 44542 +3 42855 44542 44011 +3 42856 43716 43973 +3 42856 43973 43100 +3 42857 43101 43974 +3 42857 43974 43717 +3 42858 42859 43306 +3 42858 43306 43284 +3 42859 43285 43306 +3 42860 43778 44012 +3 42860 44012 43096 +3 42861 43097 44013 +3 42861 44013 43779 +3 42862 43412 43501 +3 42862 43501 42929 +3 42863 42930 43502 +3 42863 43502 43413 +3 42864 43275 44030 +3 42864 44030 43641 +3 42865 43642 44031 +3 42865 44031 43276 +3 42866 43752 44532 +3 42866 44532 43762 +3 42867 43763 44533 +3 42867 44533 43753 +3 42868 43130 43794 +3 42868 43794 43567 +3 42869 43568 43795 +3 42869 43795 43131 +3 42870 43768 44787 +3 42870 44787 43953 +3 42871 43954 44788 +3 42871 44788 43769 +3 42872 43555 44469 +3 42872 44469 43826 +3 42873 43827 44470 +3 42873 44470 43556 +3 42874 43700 44543 +3 42874 44543 43752 +3 42875 43753 44544 +3 42875 44544 43701 +3 42876 43547 44678 +3 42876 44678 44002 +3 42877 43457 43259 +3 42878 43260 43458 +3 42879 44003 44679 +3 42879 44679 43548 +3 42880 43404 44394 +3 42880 44394 43910 +3 42881 43911 44395 +3 42881 44395 43405 +3 42882 43340 44753 +3 42882 44753 44329 +3 42883 44330 44754 +3 42883 44754 43341 +3 42884 42982 43656 +3 42884 43656 43537 +3 42885 43538 43657 +3 42885 43657 42983 +3 42886 43762 44549 +3 42886 44549 43694 +3 42887 43695 44550 +3 42887 44550 43763 +3 42888 43244 43393 +3 42888 43393 42976 +3 42889 42977 43394 +3 42889 43394 43245 +3 42890 44321 44692 +3 42890 44692 43238 +3 42891 43239 44693 +3 42891 44693 44322 +3 42892 43816 43742 +3 42893 43743 43817 +3 42894 43381 44058 +3 42894 44058 43382 +3 42895 43053 43132 +3 42895 43132 42963 +3 42896 42964 43133 +3 42896 43133 43054 +3 42897 44079 44230 +3 42897 44230 43041 +3 42898 43042 44231 +3 42898 44231 44080 +3 42899 43650 43916 +3 42899 43916 43155 +3 42900 43156 43917 +3 42900 43917 43651 +3 42901 43259 43600 +3 42901 43600 43204 +3 42902 43205 43601 +3 42902 43601 43260 +3 42903 43094 44510 +3 42903 44510 44279 +3 42904 44280 44511 +3 42904 44511 43095 +3 42905 43035 43580 +3 42905 43580 43453 +3 42906 43454 43581 +3 42906 43581 43036 +3 42907 43838 44353 +3 42907 44353 43472 +3 42908 43473 44354 +3 42908 44354 43839 +3 42909 43736 44034 +3 42909 44034 43196 +3 42910 43197 44035 +3 42910 44035 43737 +3 42911 43076 43167 +3 42911 43167 43011 +3 42912 43012 43168 +3 42912 43168 43077 +3 42913 43517 44498 +3 42913 44498 43922 +3 42914 43922 44499 +3 42914 44499 43518 +3 42915 43400 44829 +3 42915 44829 44378 +3 42916 44379 44830 +3 42916 44830 43401 +3 42917 43822 44183 +3 42917 44183 43299 +3 42918 43300 44184 +3 42918 44184 43823 +3 42919 43408 43738 +3 42919 43738 43263 +3 42920 43264 43739 +3 42920 43739 43409 +3 42921 43286 44135 +3 42921 44135 43766 +3 42922 43767 44136 +3 42922 44136 43287 +3 42923 43612 43986 +3 42923 43986 43335 +3 42924 43336 43987 +3 42924 43987 43613 +3 42925 43406 43571 +3 42925 43571 43072 +3 42926 43073 43572 +3 42926 43572 43407 +3 42927 44117 44248 +3 42927 44248 43061 +3 42928 43062 44249 +3 42928 44249 44118 +3 42929 43501 43524 +3 42929 43524 42930 +3 42930 43524 43502 +3 42931 43008 43136 +3 42931 43136 43053 +3 42932 43054 43137 +3 42932 43137 43009 +3 42933 43092 43396 +3 42933 43396 43169 +3 42934 43170 43397 +3 42934 43397 43093 +3 42935 42969 43128 +3 42935 43128 43076 +3 42936 43077 43129 +3 42936 43129 42969 +3 42937 43169 43379 +3 42937 43379 43086 +3 42938 43087 43380 +3 42938 43380 43170 +3 42939 44075 44259 +3 42939 44259 43182 +3 42940 43183 44260 +3 42940 44260 44076 +3 42941 43074 43455 +3 42941 43455 43280 +3 42942 43281 43456 +3 42942 43456 43075 +3 42943 43573 43890 +3 42943 43890 43288 +3 42944 43289 43891 +3 42944 43891 43574 +3 42945 43617 43870 +3 42945 43870 43190 +3 42946 43191 43871 +3 42946 43871 43618 +3 42947 43186 43923 +3 42947 43923 43674 +3 42948 43675 43924 +3 42948 43924 43187 +3 42949 43027 43414 +3 42949 43414 43313 +3 42950 43314 43415 +3 42950 43415 43028 +3 42951 43434 44520 +3 42951 44520 44050 +3 42952 44051 44521 +3 42952 44521 43435 +3 42953 43710 44664 +3 42953 44664 44273 +3 42954 44274 44665 +3 42954 44665 43711 +3 42955 43525 43744 +3 42955 43744 43147 +3 42956 43148 43745 +3 42956 43745 43526 +3 42957 43023 43180 +3 42957 43180 43088 +3 42958 43089 43181 +3 42958 43181 43024 +3 42959 43935 44400 +3 42959 44400 43488 +3 42960 43489 44401 +3 42960 44401 43936 +3 42961 43088 43161 +3 42961 43161 43019 +3 42962 43020 43162 +3 42962 43162 43089 +3 42963 43132 43179 +3 42963 43179 42964 +3 42964 43179 43133 +3 42965 43165 43662 +3 42965 43662 43470 +3 42966 43471 43663 +3 42966 43663 43166 +3 42967 43543 43914 +3 42967 43914 43348 +3 42968 43349 43915 +3 42968 43915 43544 +3 42969 43129 43128 +3 42970 43182 44121 +3 42970 44121 43864 +3 42971 43865 44122 +3 42971 44122 43183 +3 42972 43145 43756 +3 42972 43756 43578 +3 42973 43579 43757 +3 42973 43757 43146 +3 42974 43990 44063 +3 42974 44063 43033 +3 42975 43034 44064 +3 42975 44064 43991 +3 42976 43393 43461 +3 42976 43461 43027 +3 42977 43028 43462 +3 42977 43462 43394 +3 42978 43212 43633 +3 42978 43633 43375 +3 42979 43376 43634 +3 42979 43634 43213 +3 42980 43724 43812 +3 42980 43812 43047 +3 42981 43048 43813 +3 42981 43813 43725 +3 42982 43025 43720 +3 42982 43720 43656 +3 42983 43657 43721 +3 42983 43721 43026 +3 42984 43157 43490 +3 42984 43490 43250 +3 42985 43251 43491 +3 42985 43491 43158 +3 42986 43371 43971 +3 42986 43971 43602 +3 42987 43603 43972 +3 42987 43972 43372 +3 42988 44129 44639 +3 42988 44639 43549 +3 42989 43550 44640 +3 42989 44640 44130 +3 42990 43828 44983 +3 42990 44983 44179 +3 42991 44180 44984 +3 42991 44984 43829 +3 42992 43315 44461 +3 42992 44461 44148 +3 42993 44149 44462 +3 42993 44462 43316 +3 42994 43375 43643 +3 42994 43643 43269 +3 42995 43270 43644 +3 42995 43644 43376 +3 42996 43774 44181 +3 42996 44181 43449 +3 42997 43450 44182 +3 42997 44182 43775 +3 42998 43124 43702 +3 42998 43702 43557 +3 42999 43558 43703 +3 42999 43703 43125 +3 43000 43639 43882 +3 43000 43882 43226 +3 43001 43227 43883 +3 43001 43883 43640 +3 43002 43953 44831 +3 43002 44831 43941 +3 43003 43942 44832 +3 43003 44832 43954 +3 43004 43309 43798 +3 43004 43798 43507 +3 43005 43508 43799 +3 43005 43799 43310 +3 43006 44048 44412 +3 43006 44412 43391 +3 43007 43392 44413 +3 43007 44413 44049 +3 43008 43019 43184 +3 43008 43184 43136 +3 43009 43137 43185 +3 43009 43185 43020 +3 43010 43278 43448 +3 43010 43448 43279 +3 43011 43167 43210 +3 43011 43210 43039 +3 43012 43040 43211 +3 43012 43211 43168 +3 43013 43947 44236 +3 43013 44236 43297 +3 43014 43298 44237 +3 43014 44237 43948 +3 43015 43451 44104 +3 43015 44104 43676 +3 43016 43677 44105 +3 43016 44105 43452 +3 43017 43941 44843 +3 43017 44843 43957 +3 43018 43958 44844 +3 43018 44844 43942 +3 43019 43161 43184 +3 43020 43185 43162 +3 43021 43234 44036 +3 43021 44036 43782 +3 43022 43783 44037 +3 43022 44037 43235 +3 43023 43039 43216 +3 43023 43216 43180 +3 43024 43181 43217 +3 43024 43217 43040 +3 43025 43718 43720 +3 43026 43721 43719 +3 43027 43461 43414 +3 43028 43415 43462 +3 43029 43442 44255 +3 43029 44255 43874 +3 43030 43875 44256 +3 43030 44256 43443 +3 43031 43304 44295 +3 43031 44295 44020 +3 43032 44021 44296 +3 43032 44296 43305 +3 43033 44063 44110 +3 43033 44110 43034 +3 43034 44110 44064 +3 43035 43078 43646 +3 43035 43646 43580 +3 43036 43581 43647 +3 43036 43647 43079 +3 43037 43350 44040 +3 43037 44040 43714 +3 43038 43715 44041 +3 43038 44041 43351 +3 43039 43210 43216 +3 43040 43217 43211 +3 43041 44230 44334 +3 43041 44334 43116 +3 43042 43117 44335 +3 43042 44335 44231 +3 43043 43810 44297 +3 43043 44297 43551 +3 43044 43552 44298 +3 43044 44298 43811 +3 43045 43513 43680 +3 43045 43680 43206 +3 43046 43207 43681 +3 43046 43681 43514 +3 43047 43812 43848 +3 43048 43849 43813 +3 43049 43323 43836 +3 43049 43836 43584 +3 43050 43585 43837 +3 43050 43837 43324 +3 43051 43499 43696 +3 43051 43696 43236 +3 43052 43237 43697 +3 43052 43697 43500 +3 43053 43136 43290 +3 43053 43290 43132 +3 43054 43133 43291 +3 43054 43291 43137 +3 43055 43750 44137 +3 43055 44137 43436 +3 43056 43437 44138 +3 43056 44138 43751 +3 43057 43325 43858 +3 43057 43858 43606 +3 43058 43607 43859 +3 43058 43859 43326 +3 43059 43937 44271 +3 43059 44271 43426 +3 43060 43427 44272 +3 43060 44272 43938 +3 43061 44248 44325 +3 43061 44325 43122 +3 43062 43123 44326 +3 43062 44326 44249 +3 43063 43463 43637 +3 43063 43637 43254 +3 43064 43255 43638 +3 43064 43638 43464 +3 43065 43479 43645 +3 43065 43645 43478 +3 43066 43333 43559 +3 43066 43559 43244 +3 43067 43245 43560 +3 43067 43560 43334 +3 43068 43250 43505 +3 43068 43505 43278 +3 43069 43279 43506 +3 43069 43506 43251 +3 43070 43280 43561 +3 43070 43561 43333 +3 43071 43334 43562 +3 43071 43562 43281 +3 43072 43571 43660 +3 43072 43660 43078 +3 43073 43079 43661 +3 43073 43661 43572 +3 43074 43171 43535 +3 43074 43535 43455 +3 43075 43456 43536 +3 43075 43536 43172 +3 43076 43128 43271 +3 43076 43271 43167 +3 43077 43168 43272 +3 43077 43272 43129 +3 43078 43660 43646 +3 43079 43647 43661 +3 43080 43422 44702 +3 43080 44702 44442 +3 43081 44443 44703 +3 43081 44703 43423 +3 43082 43712 43904 +3 43082 43904 43267 +3 43083 43268 43905 +3 43083 43905 43713 +3 43084 44189 44518 +3 43084 44518 43722 +3 43085 43723 44519 +3 43085 44519 44190 +3 43086 43379 43492 +3 43086 43492 43171 +3 43087 43172 43493 +3 43087 43493 43380 +3 43088 43180 43311 +3 43088 43311 43161 +3 43089 43162 43312 +3 43089 43312 43181 +3 43090 43214 44085 +3 43090 44085 43834 +3 43091 43835 44086 +3 43091 44086 43215 +3 43092 43194 43529 +3 43092 43529 43396 +3 43093 43397 43530 +3 43093 43530 43195 +3 43094 43218 44627 +3 43094 44627 44510 +3 43095 44511 44628 +3 43095 44628 43219 +3 43096 44012 44187 +3 43096 44187 43410 +3 43097 43411 44188 +3 43097 44188 44013 +3 43098 43790 44609 +3 43098 44609 43955 +3 43099 43956 44610 +3 43099 44610 43791 +3 43100 43973 44133 +3 43100 44133 43612 +3 43101 43613 44134 +3 43101 44134 43974 +3 43102 43507 43908 +3 43102 43908 43545 +3 43103 43546 43909 +3 43103 43909 43508 +3 43104 43949 44617 +3 43104 44617 43822 +3 43105 43823 44618 +3 43105 44618 43950 +3 43106 44370 44166 +3 43107 44167 44371 +3 43108 43652 43975 +3 43108 43975 43482 +3 43109 43483 43976 +3 43109 43976 43653 +3 43110 44257 45074 +3 43110 45074 44004 +3 43111 44005 45075 +3 43111 45075 44258 +3 43112 43654 44073 +3 43112 44073 43573 +3 43113 43574 44074 +3 43113 44074 43655 +3 43114 43470 43832 +3 43114 43832 43522 +3 43115 43523 43833 +3 43115 43833 43471 +3 43116 44334 44382 +3 43116 44382 43142 +3 43117 43142 44383 +3 43117 44383 44335 +3 43118 43522 43820 +3 43118 43820 43467 +3 43119 43467 43821 +3 43119 43821 43523 +3 43120 43670 44431 +3 43120 44431 43912 +3 43121 43913 44432 +3 43121 44432 43671 +3 43122 44325 44359 +3 43122 44359 43123 +3 43123 44359 44326 +3 43124 43220 43818 +3 43124 43818 43702 +3 43125 43703 43819 +3 43125 43819 43221 +3 43126 43602 44108 +3 43126 44108 43654 +3 43127 43655 44109 +3 43127 44109 43603 +3 43128 43129 43303 +3 43128 43303 43271 +3 43129 43272 43303 +3 43130 43533 44164 +3 43130 44164 43794 +3 43131 43795 44165 +3 43131 44165 43534 +3 43132 43290 43359 +3 43132 43359 43179 +3 43133 43179 43360 +3 43133 43360 43291 +3 43134 43641 44293 +3 43134 44293 43814 +3 43135 43815 44294 +3 43135 44294 43642 +3 43136 43184 43363 +3 43136 43363 43290 +3 43137 43291 43364 +3 43137 43364 43185 +3 43138 43478 43732 +3 43138 43732 43463 +3 43139 43464 43733 +3 43139 43733 43479 +3 43140 44368 44696 +3 43141 44697 44369 +3 43142 44382 44383 +3 43143 44244 44490 +3 43143 44490 43539 +3 43144 43540 44491 +3 43144 44491 44245 +3 43145 43261 43876 +3 43145 43876 43756 +3 43146 43757 43877 +3 43146 43877 43262 +3 43147 43744 43927 +3 43147 43927 43321 +3 43148 43322 43928 +3 43148 43928 43745 +3 43149 43980 44418 +3 43149 44418 43608 +3 43150 43609 44419 +3 43150 44419 43981 +3 43151 43438 44327 +3 43151 44327 44123 +3 43152 44124 44328 +3 43152 44328 43439 +3 43153 43676 44098 +3 43153 44098 43590 +3 43154 43590 44099 +3 43154 44099 43677 +3 43155 43916 44289 +3 43155 44289 43569 +3 43156 43570 44290 +3 43156 44290 43917 +3 43157 43313 43629 +3 43157 43629 43490 +3 43158 43491 43630 +3 43158 43630 43314 +3 43159 43929 44674 +3 43159 44674 43949 +3 43160 43950 44675 +3 43160 44675 43930 +3 43161 43311 43373 +3 43161 43373 43184 +3 43162 43185 43374 +3 43162 43374 43312 +3 43163 43706 44500 +3 43163 44500 43977 +3 43164 43978 44501 +3 43164 44501 43707 +3 43165 43329 43830 +3 43165 43830 43662 +3 43166 43663 43831 +3 43166 43831 43330 +3 43167 43271 43369 +3 43167 43369 43210 +3 43168 43211 43370 +3 43168 43370 43272 +3 43169 43396 43604 +3 43169 43604 43379 +3 43170 43380 43605 +3 43170 43605 43397 +3 43171 43492 43535 +3 43172 43536 43493 +3 43173 43963 44934 +3 43173 44934 44226 +3 43174 44227 44935 +3 43174 44935 43964 +3 43175 44360 44741 +3 43175 44741 43586 +3 43176 43587 44742 +3 43176 44742 44361 +3 43177 43955 44688 +3 43177 44688 43929 +3 43178 43930 44689 +3 43178 44689 43956 +3 43179 43359 43360 +3 43180 43216 43387 +3 43180 43387 43311 +3 43181 43312 43388 +3 43181 43388 43217 +3 43182 44259 44121 +3 43183 44122 44260 +3 43184 43373 43363 +3 43185 43364 43374 +3 43186 43361 44119 +3 43186 44119 43923 +3 43187 43924 44120 +3 43187 44120 43362 +3 43188 43596 44388 +3 43188 44388 43992 +3 43189 43993 44389 +3 43189 44389 43597 +3 43190 43870 44100 +3 43190 44100 43424 +3 43191 43425 44101 +3 43191 44101 43871 +3 43192 44018 44635 +3 43192 44635 43838 +3 43193 43839 44636 +3 43193 44636 44019 +3 43194 43284 43625 +3 43194 43625 43529 +3 43195 43530 43626 +3 43195 43626 43285 +3 43196 44034 44283 +3 43196 44283 43480 +3 43197 43481 44284 +3 43197 44284 44035 +3 43198 44162 44797 +3 43198 44797 43860 +3 43199 43861 44798 +3 43199 44798 44163 +3 43200 43598 44508 +3 43200 44508 44144 +3 43201 44145 44509 +3 43201 44509 43599 +3 43202 43678 43982 +3 43202 43982 43525 +3 43203 43526 43983 +3 43203 43983 43679 +3 43204 43600 43844 +3 43204 43844 43499 +3 43205 43500 43845 +3 43205 43845 43601 +3 43206 43680 43806 +3 43206 43806 43357 +3 43207 43358 43807 +3 43207 43807 43681 +3 43208 43567 44115 +3 43208 44115 43760 +3 43209 43761 44116 +3 43209 44116 43568 +3 43210 43369 43402 +3 43210 43402 43216 +3 43211 43217 43403 +3 43211 43403 43370 +3 43212 43453 43852 +3 43212 43852 43633 +3 43213 43634 43853 +3 43213 43853 43454 +3 43214 43294 44168 +3 43214 44168 44085 +3 43215 44086 44169 +3 43215 44169 43295 +3 43216 43402 43387 +3 43217 43388 43403 +3 43218 43256 44712 +3 43218 44712 44627 +3 43219 44628 44713 +3 43219 44713 43256 +3 43220 43545 43893 +3 43220 43893 43818 +3 43221 43819 43894 +3 43221 43894 43546 +3 43222 43584 44000 +3 43222 44000 43678 +3 43223 43679 44001 +3 43223 44001 43585 +3 43224 43606 44140 +3 43224 44140 43770 +3 43225 43771 44141 +3 43225 44141 43607 +3 43226 43882 44089 +3 43226 44089 43352 +3 43227 43353 44090 +3 43227 44090 43883 +3 43228 44250 44973 +3 43228 44973 44048 +3 43229 44049 44974 +3 43229 44974 44251 +3 43230 43614 44046 +3 43230 44046 43692 +3 43231 43693 44047 +3 43231 44047 43614 +3 43232 44641 44969 +3 43232 44969 43619 +3 43233 43620 44970 +3 43233 44970 44642 +3 43234 43465 44238 +3 43234 44238 44036 +3 43235 44037 44239 +3 43235 44239 43466 +3 43236 43696 43842 +3 43236 43842 43412 +3 43237 43413 43843 +3 43237 43843 43697 +3 43238 44692 44967 +3 43238 44967 43792 +3 43239 43793 44968 +3 43239 44968 44693 +3 43240 43692 44038 +3 43240 44038 43617 +3 43241 43618 44039 +3 43241 44039 43693 +3 43242 43631 44576 +3 43242 44576 44195 +3 43243 44196 44577 +3 43243 44577 43632 +3 43244 43559 43684 +3 43244 43684 43393 +3 43245 43394 43685 +3 43245 43685 43560 +3 43246 43939 44448 +3 43246 44448 43774 +3 43247 43775 44449 +3 43247 44449 43940 +3 43248 43770 44154 +3 43248 44154 43652 +3 43249 43653 44155 +3 43249 44155 43771 +3 43250 43490 43708 +3 43250 43708 43505 +3 43251 43506 43709 +3 43251 43709 43491 +3 43252 44263 44613 +3 43252 44613 43621 +3 43253 43622 44614 +3 43253 44614 44264 +3 43254 43637 43780 +3 43254 43780 43406 +3 43255 43407 43781 +3 43255 43781 43638 +3 43256 44713 44712 +3 43257 43850 45108 +3 43257 45108 44555 +3 43258 44556 45109 +3 43258 45109 43851 +3 43259 43457 43776 +3 43259 43776 43600 +3 43260 43601 43777 +3 43260 43777 43458 +3 43261 43296 43945 +3 43261 43945 43876 +3 43262 43877 43946 +3 43262 43946 43296 +3 43263 43738 44014 +3 43263 44014 43543 +3 43264 43544 44015 +3 43264 44015 43739 +3 43265 43648 44773 +3 43265 44773 44372 +3 43266 44373 44774 +3 43266 44774 43649 +3 43267 43904 44052 +3 43267 44052 43408 +3 43268 43409 44053 +3 43268 44053 43905 +3 43269 43643 43878 +3 43269 43878 43513 +3 43270 43514 43879 +3 43270 43879 43644 +3 43271 43303 43444 +3 43271 43444 43369 +3 43272 43370 43445 +3 43272 43445 43303 +3 43273 43496 44651 +3 43273 44651 44428 +3 43274 44429 44652 +3 43274 44652 43497 +3 43275 43623 44341 +3 43275 44341 44030 +3 43276 44031 44342 +3 43276 44342 43624 +3 43277 43933 44954 +3 43277 44954 43934 +3 43278 43505 43658 +3 43278 43658 43448 +3 43279 43448 43659 +3 43279 43659 43506 +3 43280 43455 43704 +3 43280 43704 43561 +3 43281 43562 43705 +3 43281 43705 43456 +3 43282 43688 44567 +3 43282 44567 44156 +3 43283 44157 44568 +3 43283 44568 43689 +3 43284 43306 43664 +3 43284 43664 43625 +3 43285 43626 43665 +3 43285 43665 43306 +3 43286 43594 44416 +3 43286 44416 44135 +3 43287 44136 44417 +3 43287 44417 43595 +3 43288 43890 44160 +3 43288 44160 43553 +3 43289 43554 44161 +3 43289 44161 43891 +3 43290 43363 43484 +3 43290 43484 43359 +3 43291 43360 43485 +3 43291 43485 43364 +3 43292 43898 44404 +3 43292 44404 43906 +3 43293 43907 44405 +3 43293 44405 43899 +3 43294 43337 44240 +3 43294 44240 44168 +3 43295 44169 44241 +3 43295 44241 43337 +3 43296 43946 43945 +3 43297 44236 44496 +3 43297 44496 43810 +3 43298 43811 44497 +3 43298 44497 44237 +3 43299 44183 44516 +3 43299 44516 43610 +3 43300 43611 44517 +3 43300 44517 44184 +3 43301 43896 44942 +3 43301 44942 44351 +3 43302 44352 44943 +3 43302 44943 43897 +3 43303 43445 43444 +3 43304 43527 44708 +3 43304 44708 44295 +3 43305 44296 44709 +3 43305 44709 43528 +3 43306 43665 43664 +3 43307 43714 44315 +3 43307 44315 43898 +3 43308 43899 44316 +3 43308 44316 43715 +3 43309 43578 44065 +3 43309 44065 43798 +3 43310 43799 44066 +3 43310 44066 43579 +3 43311 43387 43486 +3 43311 43486 43373 +3 43312 43374 43487 +3 43312 43487 43388 +3 43313 43414 43726 +3 43313 43726 43629 +3 43314 43630 43727 +3 43314 43727 43415 +3 43315 43582 44704 +3 43315 44704 44461 +3 43316 44462 44705 +3 43316 44705 43583 +3 43317 44032 44668 +3 43317 44668 44054 +3 43318 44055 44669 +3 43318 44669 44033 +3 43319 43906 44339 +3 43319 44339 43750 +3 43320 43751 44340 +3 43320 44340 43907 +3 43321 43927 44028 +3 43321 44028 43432 +3 43322 43433 44029 +3 43322 44029 43928 +3 43323 43557 44059 +3 43323 44059 43836 +3 43324 43837 44060 +3 43324 44060 43558 +3 43325 43537 44091 +3 43325 44091 43858 +3 43326 43859 44092 +3 43326 44092 43538 +3 43327 43766 44477 +3 43327 44477 44016 +3 43328 44017 44478 +3 43328 44478 43767 +3 43329 43440 43943 +3 43329 43943 43830 +3 43330 43831 43944 +3 43330 43944 43441 +3 43331 43992 44694 +3 43331 44694 44032 +3 43332 44033 44695 +3 43332 44695 43993 +3 43333 43561 43748 +3 43333 43748 43559 +3 43334 43560 43749 +3 43334 43749 43562 +3 43335 43986 44313 +3 43335 44313 43650 +3 43336 43651 44314 +3 43336 44314 43987 +3 43337 44241 44240 +3 43338 44179 45250 +3 43338 45250 44457 +3 43339 44458 45251 +3 43339 45251 44180 +3 43340 43740 45129 +3 43340 45129 44753 +3 43341 44754 45130 +3 43341 45130 43741 +3 43342 43730 44927 +3 43342 44927 44551 +3 43343 44552 44928 +3 43343 44928 43731 +3 43344 44006 44410 +3 43344 44410 43736 +3 43345 43737 44411 +3 43345 44411 44007 +3 43346 44054 44698 +3 43346 44698 43980 +3 43347 43981 44699 +3 43347 44699 44055 +3 43348 43914 44208 +3 43348 44208 43639 +3 43349 43640 44209 +3 43349 44209 43915 +3 43350 43588 44303 +3 43350 44303 44040 +3 43351 44041 44304 +3 43351 44304 43589 +3 43352 44089 44175 +3 43352 44175 43430 +3 43353 43431 44176 +3 43353 44176 44090 +3 43354 44486 44920 +3 43354 44920 43784 +3 43355 43785 44921 +3 43355 44921 44487 +3 43356 43940 44333 +3 43356 44333 43939 +3 43357 43806 43900 +3 43357 43900 43457 +3 43358 43458 43901 +3 43358 43901 43807 +3 43359 43484 43498 +3 43359 43498 43360 +3 43360 43498 43485 +3 43361 43760 44212 +3 43361 44212 44119 +3 43362 44120 44213 +3 43362 44213 43761 +3 43363 43373 43503 +3 43363 43503 43484 +3 43364 43485 43504 +3 43364 43504 43374 +3 43365 43910 44814 +3 43365 44814 44265 +3 43366 44266 44815 +3 43366 44815 43911 +3 43367 43826 44649 +3 43367 44649 44172 +3 43368 44172 44650 +3 43368 44650 43827 +3 43369 43444 43494 +3 43369 43494 43402 +3 43370 43403 43495 +3 43370 43495 43445 +3 43371 43674 44277 +3 43371 44277 43971 +3 43372 43972 44278 +3 43372 44278 43675 +3 43373 43486 43503 +3 43374 43504 43487 +3 43375 43633 43961 +3 43375 43961 43643 +3 43376 43644 43962 +3 43376 43962 43634 +3 43377 43892 45036 +3 43377 45036 44534 +3 43378 44535 45037 +3 43378 45037 43895 +3 43379 43604 43728 +3 43379 43728 43492 +3 43380 43493 43729 +3 43380 43729 43605 +3 43381 43977 44655 +3 43381 44655 44058 +3 43382 44058 44656 +3 43382 44656 43978 +3 43383 44603 45068 +3 43383 45068 43846 +3 43384 43847 45069 +3 43384 45069 44604 +3 43385 44252 44747 +3 43385 44747 43854 +3 43386 43855 44748 +3 43386 44748 44253 +3 43387 43402 43509 +3 43387 43509 43486 +3 43388 43487 43510 +3 43388 43510 43403 +3 43389 44452 45258 +3 43389 45258 44257 +3 43390 44258 45259 +3 43390 45259 44453 +3 43391 44412 44731 +3 43391 44731 43668 +3 43392 43669 44732 +3 43392 44732 44413 +3 43393 43684 43764 +3 43393 43764 43461 +3 43394 43462 43765 +3 43394 43765 43685 +3 43395 43936 44777 +3 43395 44777 43935 +3 43396 43529 43758 +3 43396 43758 43604 +3 43397 43605 43759 +3 43397 43759 43530 +3 43398 43994 44615 +3 43398 44615 44006 +3 43399 44007 44616 +3 43399 44616 43995 +3 43400 43746 45172 +3 43400 45172 44829 +3 43401 44830 45173 +3 43401 45173 43747 +3 43402 43494 43509 +3 43403 43510 43495 +3 43404 43800 44827 +3 43404 44827 44394 +3 43405 44395 44828 +3 43405 44828 43801 +3 43406 43780 43967 +3 43406 43967 43571 +3 43407 43572 43968 +3 43407 43968 43781 +3 43408 44052 44150 +3 43408 44150 43738 +3 43409 43739 44151 +3 43409 44151 44053 +3 43410 44187 44444 +3 43410 44444 43635 +3 43411 43636 44445 +3 43411 44445 44188 +3 43412 43842 43951 +3 43412 43951 43501 +3 43413 43502 43952 +3 43413 43952 43843 +3 43414 43461 43772 +3 43414 43772 43726 +3 43415 43727 43773 +3 43415 43773 43462 +3 43416 44016 44623 +3 43416 44623 43994 +3 43417 43995 44624 +3 43417 44624 44017 +3 43418 44541 45185 +3 43418 45185 44042 +3 43419 44043 45186 +3 43419 45186 44542 +3 43420 44424 44948 +3 43420 44948 43902 +3 43421 43903 44949 +3 43421 44949 44425 +3 43422 43668 44950 +3 43422 44950 44702 +3 43423 44703 44951 +3 43423 44951 43669 +3 43424 44100 44234 +3 43424 44234 43541 +3 43425 43542 44235 +3 43425 44235 44101 +3 43426 44271 44553 +3 43426 44553 43682 +3 43427 43683 44554 +3 43427 44554 44272 +3 43428 44362 44801 +3 43428 44801 43840 +3 43429 43841 44802 +3 43429 44802 44363 +3 43430 44175 44201 +3 43430 44201 43431 +3 43431 44201 44176 +3 43432 44028 44106 +3 43432 44106 43476 +3 43433 43477 44107 +3 43433 44107 44029 +3 43434 43787 44882 +3 43434 44882 44520 +3 43435 44521 44883 +3 43435 44883 43788 +3 43436 44137 44446 +3 43436 44446 43716 +3 43437 43717 44447 +3 43437 44447 44138 +3 43438 43615 44547 +3 43438 44547 44327 +3 43439 44328 44548 +3 43439 44548 43616 +3 43440 43476 44102 +3 43440 44102 43943 +3 43441 43944 44103 +3 43441 44103 43477 +3 43442 43591 44586 +3 43442 44586 44255 +3 43443 44256 44587 +3 43443 44587 43592 +3 43444 43445 43521 +3 43444 43521 43494 +3 43445 43495 43521 +3 43446 44309 45070 +3 43446 45070 44301 +3 43447 44302 45071 +3 43447 45071 44310 +3 43448 43658 43789 +3 43448 43789 43659 +3 43449 44181 44559 +3 43449 44559 43778 +3 43450 43779 44560 +3 43450 44560 44182 +3 43451 43782 44438 +3 43451 44438 44104 +3 43452 44105 44439 +3 43452 44439 43783 +3 43453 43580 44008 +3 43453 44008 43852 +3 43454 43853 44009 +3 43454 44009 43581 +3 43455 43535 43808 +3 43455 43808 43704 +3 43456 43705 43809 +3 43456 43809 43536 +3 43457 43900 43776 +3 43458 43777 43901 +3 43459 44301 45086 +3 43459 45086 44250 +3 43460 44251 45087 +3 43460 45087 44302 +3 43461 43764 43772 +3 43462 43773 43765 +3 43463 43732 43965 +3 43463 43965 43637 +3 43464 43638 43966 +3 43464 43966 43733 +3 43465 43672 44355 +3 43465 44355 44238 +3 43466 44239 44356 +3 43466 44356 43673 +3 43467 43820 44097 +3 43467 44097 43821 +3 43468 44226 45094 +3 43468 45094 44309 +3 43469 44310 45095 +3 43469 45095 44227 +3 43470 43662 44095 +3 43470 44095 43832 +3 43471 43833 44096 +3 43471 44096 43663 +3 43472 44353 44816 +3 43472 44816 43868 +3 43473 43869 44817 +3 43473 44817 44354 +3 43474 44456 45008 +3 43474 45008 44010 +3 43475 44011 45009 +3 43475 45009 44456 +3 43476 44106 44102 +3 43477 44103 44107 +3 43478 43645 43969 +3 43478 43969 43732 +3 43479 43733 43970 +3 43479 43970 43645 +3 43480 44283 44475 +3 43480 44475 43615 +3 43481 43616 44476 +3 43481 44476 44284 +3 43482 43975 44222 +3 43482 44222 43712 +3 43483 43713 44223 +3 43483 44223 43976 +3 43484 43503 43563 +3 43484 43563 43498 +3 43485 43498 43564 +3 43485 43564 43504 +3 43486 43509 43565 +3 43486 43565 43503 +3 43487 43504 43566 +3 43487 43566 43510 +3 43488 44400 45052 +3 43488 45052 44129 +3 43489 44130 45053 +3 43489 45053 44401 +3 43490 43629 43862 +3 43490 43862 43708 +3 43491 43709 43863 +3 43491 43863 43630 +3 43492 43728 43802 +3 43492 43802 43535 +3 43493 43536 43803 +3 43493 43803 43729 +3 43494 43521 43575 +3 43494 43575 43509 +3 43495 43510 43576 +3 43495 43576 43521 +3 43496 43627 44812 +3 43496 44812 44651 +3 43497 44652 44813 +3 43497 44813 43628 +3 43498 43563 43564 +3 43499 43844 44061 +3 43499 44061 43696 +3 43500 43697 44062 +3 43500 44062 43845 +3 43501 43951 43998 +3 43501 43998 43524 +3 43502 43524 43999 +3 43502 43999 43952 +3 43503 43565 43563 +3 43504 43564 43566 +3 43505 43708 43888 +3 43505 43888 43658 +3 43506 43659 43889 +3 43506 43889 43709 +3 43507 43798 44216 +3 43507 44216 43908 +3 43508 43909 44217 +3 43508 44217 43799 +3 43509 43575 43565 +3 43510 43566 43576 +3 43511 44422 45321 +3 43511 45321 44452 +3 43512 44453 45322 +3 43512 45322 44423 +3 43513 43878 44083 +3 43513 44083 43680 +3 43514 43681 44084 +3 43514 44084 43879 +3 43515 44457 45341 +3 43515 45341 44422 +3 43516 44423 45342 +3 43516 45342 44458 +3 43517 44002 44975 +3 43517 44975 44498 +3 43518 44499 44976 +3 43518 44976 44003 +3 43519 43866 44793 +3 43519 44793 44396 +3 43520 44397 44794 +3 43520 44794 43867 +3 43521 43576 43575 +3 43522 43832 44170 +3 43522 44170 43820 +3 43523 43821 44171 +3 43523 44171 43833 +3 43524 43998 43999 +3 43525 43982 44228 +3 43525 44228 43744 +3 43526 43745 44229 +3 43526 44229 43983 +3 43527 43666 44867 +3 43527 44867 44708 +3 43528 44709 44868 +3 43528 44868 43667 +3 43529 43625 43872 +3 43529 43872 43758 +3 43530 43759 43873 +3 43530 43873 43626 +3 43531 43886 44961 +3 43531 44961 44582 +3 43532 44583 44962 +3 43532 44962 43887 +3 43533 43834 44484 +3 43533 44484 44164 +3 43534 44165 44485 +3 43534 44485 43835 +3 43535 43802 43808 +3 43536 43809 43803 +3 43537 43656 44218 +3 43537 44218 44091 +3 43538 44092 44219 +3 43538 44219 43657 +3 43539 44490 44785 +3 43539 44785 43824 +3 43540 43825 44786 +3 43540 44786 44491 +3 43541 44234 44319 +3 43541 44319 43718 +3 43542 43719 44320 +3 43542 44320 44235 +3 43543 44014 44384 +3 43543 44384 43914 +3 43544 43915 44385 +3 43544 44385 44015 +3 43545 43908 44269 +3 43545 44269 43893 +3 43546 43894 44270 +3 43546 44270 43909 +3 43547 44093 45183 +3 43547 45183 44678 +3 43548 44679 45184 +3 43548 45184 44094 +3 43549 44639 45090 +3 43549 45090 43988 +3 43550 43989 45091 +3 43550 45091 44640 +3 43551 44297 44714 +3 43551 44714 43937 +3 43552 43938 44715 +3 43552 44715 44298 +3 43553 44160 44347 +3 43553 44347 43724 +3 43554 43725 44348 +3 43554 44348 44161 +3 43555 44050 44999 +3 43555 44999 44469 +3 43556 44470 45000 +3 43556 45000 44051 +3 43557 43702 44220 +3 43557 44220 44059 +3 43558 44060 44221 +3 43558 44221 43703 +3 43559 43748 43920 +3 43559 43920 43684 +3 43560 43685 43921 +3 43560 43921 43749 +3 43561 43704 43925 +3 43561 43925 43748 +3 43562 43749 43926 +3 43562 43926 43705 +3 43563 43565 43593 +3 43563 43593 43564 +3 43564 43593 43566 +3 43565 43575 43593 +3 43566 43593 43576 +3 43567 43794 44357 +3 43567 44357 44115 +3 43568 44116 44358 +3 43568 44358 43795 +3 43569 44289 44605 +3 43569 44605 43856 +3 43570 43857 44606 +3 43570 44606 44290 +3 43571 43967 44087 +3 43571 44087 43660 +3 43572 43661 44088 +3 43572 44088 43968 +3 43573 44073 44406 +3 43573 44406 43890 +3 43574 43891 44407 +3 43574 44407 44074 +3 43575 43576 43593 +3 43577 44019 44730 +3 43577 44730 44018 +3 43578 43756 44261 +3 43578 44261 44065 +3 43579 44066 44262 +3 43579 44262 43757 +3 43580 43646 44125 +3 43580 44125 44008 +3 43581 44009 44126 +3 43581 44126 43647 +3 43582 43796 44896 +3 43582 44896 44704 +3 43583 44705 44897 +3 43583 44897 43797 +3 43584 43836 44275 +3 43584 44275 44000 +3 43585 44001 44276 +3 43585 44276 43837 +3 43586 44741 45050 +3 43586 45050 43884 +3 43587 43885 45051 +3 43587 45051 44742 +3 43588 43742 44502 +3 43588 44502 44303 +3 43589 44304 44503 +3 43589 44503 43743 +3 43590 44098 44435 +3 43590 44435 44099 +3 43591 43686 44722 +3 43591 44722 44586 +3 43592 44587 44723 +3 43592 44723 43687 +3 43594 43814 44690 +3 43594 44690 44416 +3 43595 44417 44691 +3 43595 44691 43815 +3 43596 43864 44724 +3 43596 44724 44388 +3 43597 44389 44725 +3 43597 44725 43865 +3 43598 43804 44745 +3 43598 44745 44508 +3 43599 44509 44746 +3 43599 44746 43805 +3 43600 43776 44069 +3 43600 44069 43844 +3 43601 43845 44070 +3 43601 44070 43777 +3 43602 43971 44492 +3 43602 44492 44108 +3 43603 44109 44493 +3 43603 44493 43972 +3 43604 43758 43931 +3 43604 43931 43728 +3 43605 43729 43932 +3 43605 43932 43759 +3 43606 43858 44420 +3 43606 44420 44140 +3 43607 44141 44421 +3 43607 44421 43859 +3 43608 44418 44795 +3 43608 44795 43947 +3 43609 43948 44796 +3 43609 44796 44419 +3 43610 44516 44737 +3 43610 44737 43796 +3 43611 43797 44738 +3 43611 44738 44517 +3 43612 44133 44545 +3 43612 44545 43986 +3 43613 43987 44546 +3 43613 44546 44134 +3 43614 44047 44336 +3 43614 44336 44046 +3 43615 44475 44547 +3 43616 44548 44476 +3 43617 44038 44337 +3 43617 44337 43870 +3 43618 43871 44338 +3 43618 44338 44039 +3 43619 44969 45218 +3 43619 45218 43918 +3 43620 43919 45219 +3 43620 45219 44970 +3 43621 44613 44898 +3 43621 44898 43880 +3 43622 43881 44899 +3 43622 44899 44614 +3 43623 43874 44629 +3 43623 44629 44341 +3 43624 44342 44630 +3 43624 44630 43875 +3 43625 43664 43959 +3 43625 43959 43872 +3 43626 43873 43960 +3 43626 43960 43665 +3 43627 43690 44900 +3 43627 44900 44812 +3 43628 44813 44901 +3 43628 44901 43691 +3 43629 43726 43984 +3 43629 43984 43862 +3 43630 43863 43985 +3 43630 43985 43727 +3 43631 43912 44874 +3 43631 44874 44576 +3 43632 44577 44875 +3 43632 44875 43913 +3 43633 43852 44193 +3 43633 44193 43961 +3 43634 43962 44194 +3 43634 44194 43853 +3 43635 44444 44625 +3 43635 44625 43816 +3 43636 43817 44626 +3 43636 44626 44445 +3 43637 43965 44127 +3 43637 44127 43780 +3 43638 43781 44128 +3 43638 44128 43966 +3 43639 44208 44482 +3 43639 44482 43882 +3 43640 43883 44483 +3 43640 44483 44209 +3 43641 44030 44716 +3 43641 44716 44293 +3 43642 44294 44717 +3 43642 44717 44031 +3 43643 43961 44199 +3 43643 44199 43878 +3 43644 43879 44200 +3 43644 44200 43962 +3 43645 43970 44139 +3 43645 44139 43969 +3 43646 43660 44152 +3 43646 44152 44125 +3 43647 44126 44153 +3 43647 44153 43661 +3 43648 44265 45055 +3 43648 45055 44773 +3 43649 44774 45056 +3 43649 45056 44266 +3 43650 44313 44580 +3 43650 44580 43916 +3 43651 43917 44581 +3 43651 44581 44314 +3 43652 44154 44494 +3 43652 44494 43975 +3 43653 43976 44495 +3 43653 44495 44155 +3 43654 44108 44611 +3 43654 44611 44073 +3 43655 44074 44612 +3 43655 44612 44109 +3 43656 43720 44317 +3 43656 44317 44218 +3 43657 44219 44318 +3 43657 44318 43721 +3 43658 43888 44022 +3 43658 44022 43789 +3 43659 43789 44023 +3 43659 44023 43889 +3 43660 44087 44152 +3 43661 44153 44088 +3 43662 43830 44267 +3 43662 44267 44095 +3 43663 44096 44268 +3 43663 44268 43831 +3 43664 43665 43979 +3 43664 43979 43959 +3 43665 43960 43979 +3 43666 43754 44981 +3 43666 44981 44867 +3 43667 44868 44982 +3 43667 44982 43755 +3 43668 44731 44950 +3 43669 44951 44732 +3 43670 44156 44938 +3 43670 44938 44431 +3 43671 44432 44939 +3 43671 44939 44157 +3 43672 43848 44563 +3 43672 44563 44355 +3 43673 44356 44564 +3 43673 44564 43849 +3 43674 43923 44557 +3 43674 44557 44277 +3 43675 44278 44558 +3 43675 44558 43924 +3 43676 44104 44536 +3 43676 44536 44098 +3 43677 44099 44537 +3 43677 44537 44105 +3 43678 44000 44364 +3 43678 44364 43982 +3 43679 43983 44365 +3 43679 44365 44001 +3 43680 44083 44202 +3 43680 44202 43806 +3 43681 43807 44203 +3 43681 44203 44084 +3 43682 44553 44940 +3 43682 44940 44079 +3 43683 44080 44941 +3 43683 44941 44554 +3 43684 43920 44024 +3 43684 44024 43764 +3 43685 43765 44025 +3 43685 44025 43921 +3 43686 43734 44791 +3 43686 44791 44722 +3 43687 44723 44792 +3 43687 44792 43735 +3 43688 44020 44908 +3 43688 44908 44567 +3 43689 44568 44909 +3 43689 44909 44021 +3 43690 43691 44926 +3 43690 44926 44900 +3 43691 44901 44926 +3 43692 44046 44408 +3 43692 44408 44038 +3 43693 44039 44409 +3 43693 44409 44047 +3 43694 44549 45191 +3 43694 45191 44362 +3 43695 44363 45192 +3 43695 45192 44550 +3 43696 44061 44214 +3 43696 44214 43842 +3 43697 43843 44215 +3 43697 44215 44062 +3 43698 44775 45440 +3 43698 45440 44486 +3 43699 44487 45441 +3 43699 45441 44776 +3 43700 44396 45203 +3 43700 45203 44543 +3 43701 44544 45204 +3 43701 45204 44397 +3 43702 43818 44345 +3 43702 44345 44220 +3 43703 44221 44346 +3 43703 44346 43819 +3 43704 43808 44044 +3 43704 44044 43925 +3 43705 43926 44045 +3 43705 44045 43809 +3 43706 44144 44918 +3 43706 44918 44500 +3 43707 44501 44919 +3 43707 44919 44145 +3 43708 43862 44071 +3 43708 44071 43888 +3 43709 43889 44072 +3 43709 44072 43863 +3 43710 44351 45278 +3 43710 45278 44664 +3 43711 44665 45279 +3 43711 45279 44352 +3 43712 44222 44465 +3 43712 44465 43904 +3 43713 43905 44466 +3 43713 44466 44223 +3 43714 44040 44670 +3 43714 44670 44315 +3 43715 44316 44671 +3 43715 44671 44041 +3 43716 44446 44706 +3 43716 44706 43973 +3 43717 43974 44707 +3 43717 44707 44447 +3 43718 44319 44343 +3 43718 44343 43720 +3 43719 43721 44344 +3 43719 44344 44320 +3 43720 44343 44317 +3 43721 44318 44344 +3 43722 44518 45034 +3 43722 45034 44252 +3 43723 44253 45035 +3 43723 45035 44519 +3 43724 44347 44506 +3 43724 44506 43812 +3 43725 43813 44507 +3 43725 44507 44348 +3 43726 43772 44056 +3 43726 44056 43984 +3 43727 43985 44057 +3 43727 44057 43773 +3 43728 43931 44026 +3 43728 44026 43802 +3 43729 43803 44027 +3 43729 44027 43932 +3 43730 44131 45276 +3 43730 45276 44927 +3 43731 44928 45277 +3 43731 45277 44132 +3 43732 43969 44197 +3 43732 44197 43965 +3 43733 43966 44198 +3 43733 44198 43970 +3 43734 43735 44820 +3 43734 44820 44791 +3 43735 44792 44820 +3 43736 44410 44781 +3 43736 44781 44034 +3 43737 44035 44782 +3 43737 44782 44411 +3 43738 44150 44459 +3 43738 44459 44014 +3 43739 44015 44460 +3 43739 44460 44151 +3 43740 44111 45462 +3 43740 45462 45129 +3 43741 45130 45463 +3 43741 45463 44112 +3 43742 43816 44593 +3 43742 44593 44502 +3 43743 44503 44594 +3 43743 44594 43817 +3 43744 44228 44440 +3 43744 44440 43927 +3 43745 43928 44441 +3 43745 44441 44229 +3 43746 44279 45457 +3 43746 45457 45172 +3 43747 45173 45458 +3 43747 45458 44280 +3 43748 43925 44113 +3 43748 44113 43920 +3 43749 43921 44114 +3 43749 44114 43926 +3 43750 44339 44743 +3 43750 44743 44137 +3 43751 44138 44744 +3 43751 44744 44340 +3 43752 44543 45246 +3 43752 45246 44532 +3 43753 44533 45247 +3 43753 45247 44544 +3 43754 43786 45038 +3 43754 45038 44981 +3 43755 44982 45039 +3 43755 45039 43786 +3 43756 43876 44386 +3 43756 44386 44261 +3 43757 44262 44387 +3 43757 44387 43877 +3 43758 43872 44081 +3 43758 44081 43931 +3 43759 43932 44082 +3 43759 44082 43873 +3 43760 44115 44590 +3 43760 44590 44212 +3 43761 44213 44591 +3 43761 44591 44116 +3 43762 44532 45254 +3 43762 45254 44549 +3 43763 44550 45255 +3 43763 45255 44533 +3 43764 44024 44067 +3 43764 44067 43772 +3 43765 43773 44068 +3 43765 44068 44025 +3 43766 44135 44851 +3 43766 44851 44477 +3 43767 44478 44852 +3 43767 44852 44136 +3 43768 44582 45481 +3 43768 45481 44787 +3 43769 44788 45482 +3 43769 45482 44583 +3 43770 44140 44595 +3 43770 44595 44154 +3 43771 44155 44596 +3 43771 44596 44141 +3 43772 44067 44056 +3 43773 44057 44068 +3 43774 44448 44880 +3 43774 44880 44181 +3 43775 44182 44881 +3 43775 44881 44449 +3 43776 43900 44210 +3 43776 44210 44069 +3 43777 44070 44211 +3 43777 44211 43901 +3 43778 44559 44823 +3 43778 44823 44012 +3 43779 44013 44824 +3 43779 44824 44560 +3 43780 44127 44299 +3 43780 44299 43967 +3 43781 43968 44300 +3 43781 44300 44128 +3 43782 44036 44726 +3 43782 44726 44438 +3 43783 44439 44727 +3 43783 44727 44037 +3 43784 44920 45266 +3 43784 45266 44162 +3 43785 44163 45267 +3 43785 45267 44921 +3 43786 45039 45038 +3 43787 44148 45110 +3 43787 45110 44882 +3 43788 44883 45111 +3 43788 45111 44149 +3 43789 44022 44023 +3 43790 44195 45059 +3 43790 45059 44609 +3 43791 44610 45060 +3 43791 45060 44196 +3 43792 44967 45170 +3 43792 45170 43996 +3 43793 43997 45171 +3 43793 45171 44968 +3 43794 44164 44769 +3 43794 44769 44357 +3 43795 44358 44770 +3 43795 44770 44165 +3 43796 44737 44896 +3 43797 44897 44738 +3 43798 44065 44512 +3 43798 44512 44216 +3 43799 44217 44513 +3 43799 44513 44066 +3 43800 44158 45156 +3 43800 45156 44827 +3 43801 44828 45157 +3 43801 45157 44159 +3 43802 44026 44077 +3 43802 44077 43808 +3 43803 43809 44078 +3 43803 44078 44027 +3 43804 44123 44922 +3 43804 44922 44745 +3 43805 44746 44923 +3 43805 44923 44124 +3 43806 44202 44307 +3 43806 44307 43900 +3 43807 43901 44308 +3 43807 44308 44203 +3 43808 44077 44044 +3 43809 44045 44078 +3 43810 44496 44977 +3 43810 44977 44297 +3 43811 44298 44978 +3 43811 44978 44497 +3 43812 44506 44565 +3 43812 44565 43848 +3 43813 43849 44566 +3 43813 44566 44507 +3 43814 44293 44841 +3 43814 44841 44690 +3 43815 44691 44842 +3 43815 44842 44294 +3 43816 44625 44593 +3 43817 44594 44626 +3 43818 43893 44450 +3 43818 44450 44345 +3 43819 44346 44451 +3 43819 44451 43894 +3 43820 44170 44463 +3 43820 44463 44097 +3 43821 44097 44464 +3 43821 44464 44171 +3 43822 44617 45042 +3 43822 45042 44183 +3 43823 44184 45043 +3 43823 45043 44618 +3 43824 44785 45012 +3 43824 45012 44075 +3 43825 44076 45013 +3 43825 45013 44786 +3 43826 44469 45252 +3 43826 45252 44649 +3 43827 44650 45253 +3 43827 45253 44470 +3 43828 44273 45393 +3 43828 45393 44983 +3 43829 44984 45394 +3 43829 45394 44274 +3 43830 43943 44380 +3 43830 44380 44267 +3 43831 44268 44381 +3 43831 44381 43944 +3 43832 44095 44454 +3 43832 44454 44170 +3 43833 44171 44455 +3 43833 44455 44096 +3 43834 44085 44735 +3 43834 44735 44484 +3 43835 44485 44736 +3 43835 44736 44086 +3 43836 44059 44530 +3 43836 44530 44275 +3 43837 44276 44531 +3 43837 44531 44060 +3 43838 44635 45142 +3 43838 45142 44353 +3 43839 44354 45143 +3 43839 45143 44636 +3 43840 44801 45138 +3 43840 45138 44189 +3 43841 44190 45139 +3 43841 45139 44802 +3 43842 44214 44331 +3 43842 44331 43951 +3 43843 43952 44332 +3 43843 44332 44215 +3 43844 44069 44305 +3 43844 44305 44061 +3 43845 44062 44306 +3 43845 44306 44070 +3 43846 45068 45438 +3 43846 45438 44246 +3 43847 44247 45439 +3 43847 45439 45069 +3 43848 44565 44563 +3 43849 44564 44566 +3 43850 44329 45527 +3 43850 45527 45108 +3 43851 45109 45528 +3 43851 45528 44330 +3 43852 44008 44374 +3 43852 44374 44193 +3 43853 44194 44375 +3 43853 44375 44009 +3 43854 44747 45135 +3 43854 45135 44263 +3 43855 44264 45136 +3 43855 45136 44748 +3 43856 44605 44857 +3 43856 44857 43990 +3 43857 43991 44858 +3 43857 44858 44606 +3 43858 44091 44672 +3 43858 44672 44420 +3 43859 44421 44673 +3 43859 44673 44092 +3 43860 44797 45329 +3 43860 45329 44424 +3 43861 44425 45330 +3 43861 45330 44798 +3 43862 43984 44185 +3 43862 44185 44071 +3 43863 44072 44186 +3 43863 44186 43985 +3 43864 44121 44959 +3 43864 44959 44724 +3 43865 44725 44960 +3 43865 44960 44122 +3 43866 44166 45088 +3 43866 45088 44793 +3 43867 44794 45089 +3 43867 45089 44167 +3 43868 44816 45154 +3 43868 45154 44244 +3 43869 44245 45155 +3 43869 45155 44817 +3 43870 44337 44588 +3 43870 44588 44100 +3 43871 44101 44589 +3 43871 44589 44338 +3 43872 43959 44173 +3 43872 44173 44081 +3 43873 44082 44174 +3 43873 44174 43960 +3 43874 44255 45010 +3 43874 45010 44629 +3 43875 44630 45011 +3 43875 45011 44256 +3 43876 43945 44514 +3 43876 44514 44386 +3 43877 44387 44515 +3 43877 44515 43946 +3 43878 44199 44392 +3 43878 44392 44083 +3 43879 44084 44393 +3 43879 44393 44200 +3 43880 44898 45274 +3 43880 45274 44117 +3 43881 44118 45275 +3 43881 45275 44899 +3 43882 44482 44686 +3 43882 44686 44089 +3 43883 44090 44687 +3 43883 44687 44483 +3 43884 45050 45272 +3 43884 45272 44146 +3 43885 44147 45273 +3 43885 45273 45051 +3 43886 44177 45240 +3 43886 45240 44961 +3 43887 44962 45241 +3 43887 45241 44178 +3 43888 44071 44206 +3 43888 44206 44022 +3 43889 44023 44207 +3 43889 44207 44072 +3 43890 44406 44718 +3 43890 44718 44160 +3 43891 44161 44719 +3 43891 44719 44407 +3 43892 44555 45678 +3 43892 45678 45036 +3 43893 44269 44450 +3 43894 44451 44270 +3 43895 45037 45679 +3 43895 45679 44556 +3 43896 44378 45421 +3 43896 45421 44942 +3 43897 44943 45422 +3 43897 45422 44379 +3 43898 44315 44853 +3 43898 44853 44404 +3 43899 44405 44854 +3 43899 44854 44316 +3 43900 44307 44210 +3 43901 44211 44308 +3 43902 44948 45351 +3 43902 45351 44321 +3 43903 44322 45352 +3 43903 45352 44949 +3 43904 44465 44621 +3 43904 44621 44052 +3 43905 44053 44622 +3 43905 44622 44466 +3 43906 44404 44884 +3 43906 44884 44339 +3 43907 44340 44885 +3 43907 44885 44405 +3 43908 44216 44599 +3 43908 44599 44269 +3 43909 44270 44600 +3 43909 44600 44217 +3 43910 44394 45288 +3 43910 45288 44814 +3 43911 44815 45289 +3 43911 45289 44395 +3 43912 44431 45112 +3 43912 45112 44874 +3 43913 44875 45113 +3 43913 45113 44432 +3 43914 44384 44733 +3 43914 44733 44208 +3 43915 44209 44734 +3 43915 44734 44385 +3 43916 44580 44952 +3 43916 44952 44289 +3 43917 44290 44953 +3 43917 44953 44581 +3 43918 45218 45466 +3 43918 45466 44177 +3 43919 44178 45467 +3 43919 45467 45219 +3 43920 44113 44224 +3 43920 44224 44024 +3 43921 44025 44225 +3 43921 44225 44114 +3 43922 44498 45302 +3 43922 45302 44499 +3 43923 44119 44757 +3 43923 44757 44557 +3 43924 44558 44758 +3 43924 44758 44120 +3 43925 44044 44232 +3 43925 44232 44113 +3 43926 44114 44233 +3 43926 44233 44045 +3 43927 44440 44584 +3 43927 44584 44028 +3 43928 44029 44585 +3 43928 44585 44441 +3 43929 44688 45280 +3 43929 45280 44674 +3 43930 44675 45281 +3 43930 45281 44689 +3 43931 44081 44204 +3 43931 44204 44026 +3 43932 44027 44205 +3 43932 44205 44082 +3 43933 44534 45495 +3 43933 45495 44954 +3 43934 44954 45496 +3 43934 45496 44535 +3 43935 44777 45228 +3 43935 45228 44400 +3 43936 44401 45229 +3 43936 45229 44777 +3 43937 44714 45032 +3 43937 45032 44271 +3 43938 44272 45033 +3 43938 45033 44715 +3 43939 44333 44861 +3 43939 44861 44448 +3 43940 44449 44862 +3 43940 44862 44333 +3 43941 44831 45585 +3 43941 45585 44843 +3 43942 44844 45586 +3 43942 45586 44832 +3 43943 44102 44574 +3 43943 44574 44380 +3 43944 44381 44575 +3 43944 44575 44103 +3 43945 43946 44540 +3 43945 44540 44514 +3 43946 44515 44540 +3 43947 44795 45104 +3 43947 45104 44236 +3 43948 44237 45105 +3 43948 45105 44796 +3 43949 44674 45300 +3 43949 45300 44617 +3 43950 44618 45301 +3 43950 45301 44675 +3 43951 44331 44398 +3 43951 44398 43998 +3 43952 43999 44399 +3 43952 44399 44332 +3 43953 44787 45603 +3 43953 45603 44831 +3 43954 44832 45604 +3 43954 45604 44788 +3 43955 44609 45305 +3 43955 45305 44688 +3 43956 44689 45306 +3 43956 45306 44610 +3 43957 44843 45608 +3 43957 45608 44775 +3 43958 44776 45609 +3 43958 45609 44844 +3 43959 43979 44242 +3 43959 44242 44173 +3 43960 44174 44243 +3 43960 44243 43979 +3 43961 44193 44471 +3 43961 44471 44199 +3 43962 44200 44472 +3 43962 44472 44194 +3 43963 44372 45355 +3 43963 45355 44934 +3 43964 44935 45356 +3 43964 45356 44373 +3 43965 44197 44376 +3 43965 44376 44127 +3 43966 44128 44377 +3 43966 44377 44198 +3 43967 44299 44436 +3 43967 44436 44087 +3 43968 44088 44437 +3 43968 44437 44300 +3 43969 44139 44390 +3 43969 44390 44197 +3 43970 44198 44391 +3 43970 44391 44139 +3 43971 44277 44818 +3 43971 44818 44492 +3 43972 44493 44819 +3 43972 44819 44278 +3 43973 44706 44888 +3 43973 44888 44133 +3 43974 44134 44889 +3 43974 44889 44707 +3 43975 44494 44767 +3 43975 44767 44222 +3 43976 44223 44768 +3 43976 44768 44495 +3 43977 44500 45152 +3 43977 45152 44655 +3 43978 44656 45153 +3 43978 45153 44501 +3 43979 44243 44242 +3 43980 44698 45123 +3 43980 45123 44418 +3 43981 44419 45124 +3 43981 45124 44699 +3 43982 44364 44643 +3 43982 44643 44228 +3 43983 44229 44644 +3 43983 44644 44365 +3 43984 44056 44285 +3 43984 44285 44185 +3 43985 44186 44286 +3 43985 44286 44057 +3 43986 44545 44886 +3 43986 44886 44313 +3 43987 44314 44887 +3 43987 44887 44546 +3 43988 45090 45453 +3 43988 45453 44360 +3 43989 44361 45454 +3 43989 45454 45091 +3 43990 44857 44955 +3 43990 44955 44063 +3 43991 44064 44956 +3 43991 44956 44858 +3 43992 44388 45102 +3 43992 45102 44694 +3 43993 44695 45103 +3 43993 45103 44389 +3 43994 44623 45125 +3 43994 45125 44615 +3 43995 44616 45126 +3 43995 45126 44624 +3 43996 45170 45325 +3 43996 45325 44142 +3 43997 44143 45326 +3 43997 45326 45171 +3 43998 44398 44430 +3 43998 44430 43999 +3 43999 44430 44399 +3 44000 44275 44659 +3 44000 44659 44364 +3 44001 44365 44660 +3 44001 44660 44276 +3 44002 44678 45599 +3 44002 45599 44975 +3 44003 44976 45600 +3 44003 45600 44679 +3 44004 45074 45444 +3 44004 45444 44368 +3 44005 44369 45445 +3 44005 45445 45075 +3 44006 44615 45048 +3 44006 45048 44410 +3 44007 44411 45049 +3 44007 45049 44616 +3 44008 44125 44524 +3 44008 44524 44374 +3 44009 44375 44525 +3 44009 44525 44126 +3 44010 45008 45483 +3 44010 45483 44541 +3 44011 44542 45484 +3 44011 45484 45009 +3 44012 44823 45020 +3 44012 45020 44187 +3 44013 44188 45021 +3 44013 45021 44824 +3 44014 44459 44837 +3 44014 44837 44384 +3 44015 44385 44838 +3 44015 44838 44460 +3 44016 44477 45076 +3 44016 45076 44623 +3 44017 44624 45077 +3 44017 45077 44478 +3 44018 44730 45311 +3 44018 45311 44635 +3 44019 44636 45312 +3 44019 45312 44730 +3 44020 44295 45166 +3 44020 45166 44908 +3 44021 44909 45167 +3 44021 45167 44296 +3 44022 44206 44254 +3 44022 44254 44023 +3 44023 44254 44207 +3 44024 44224 44291 +3 44024 44291 44067 +3 44025 44068 44292 +3 44025 44292 44225 +3 44026 44204 44281 +3 44026 44281 44077 +3 44027 44078 44282 +3 44027 44282 44205 +3 44028 44584 44662 +3 44028 44662 44106 +3 44029 44107 44663 +3 44029 44663 44585 +3 44030 44341 45044 +3 44030 45044 44716 +3 44031 44717 45045 +3 44031 45045 44342 +3 44032 44694 45268 +3 44032 45268 44668 +3 44033 44669 45269 +3 44033 45269 44695 +3 44034 44781 45030 +3 44034 45030 44283 +3 44035 44284 45031 +3 44035 45031 44782 +3 44036 44238 44944 +3 44036 44944 44726 +3 44037 44727 44945 +3 44037 44945 44239 +3 44038 44408 44765 +3 44038 44765 44337 +3 44039 44338 44766 +3 44039 44766 44409 +3 44040 44303 44946 +3 44040 44946 44670 +3 44041 44671 44947 +3 44041 44947 44304 +3 44042 45185 45714 +3 44042 45714 44603 +3 44043 44604 45715 +3 44043 45715 45186 +3 44044 44077 44287 +3 44044 44287 44232 +3 44045 44233 44288 +3 44045 44288 44078 +3 44046 44336 44755 +3 44046 44755 44408 +3 44047 44409 44756 +3 44047 44756 44336 +3 44048 44973 45345 +3 44048 45345 44412 +3 44049 44413 45346 +3 44049 45346 44974 +3 44050 44520 45415 +3 44050 45415 44999 +3 44051 45000 45416 +3 44051 45416 44521 +3 44052 44621 44749 +3 44052 44749 44150 +3 44053 44151 44750 +3 44053 44750 44622 +3 44054 44668 45286 +3 44054 45286 44698 +3 44055 44699 45287 +3 44055 45287 44669 +3 44056 44067 44311 +3 44056 44311 44285 +3 44057 44286 44312 +3 44057 44312 44068 +3 44058 44655 45061 +3 44058 45061 44656 +3 44059 44220 44700 +3 44059 44700 44530 +3 44060 44531 44701 +3 44060 44701 44221 +3 44061 44305 44528 +3 44061 44528 44214 +3 44062 44215 44529 +3 44062 44529 44306 +3 44063 44955 45024 +3 44063 45024 44110 +3 44064 44110 45025 +3 44064 45025 44956 +3 44065 44261 44720 +3 44065 44720 44512 +3 44066 44513 44721 +3 44066 44721 44262 +3 44067 44291 44311 +3 44068 44312 44292 +3 44069 44210 44504 +3 44069 44504 44305 +3 44070 44306 44505 +3 44070 44505 44211 +3 44071 44185 44349 +3 44071 44349 44206 +3 44072 44207 44350 +3 44072 44350 44186 +3 44073 44611 44987 +3 44073 44987 44406 +3 44074 44407 44988 +3 44074 44988 44612 +3 44075 45012 45201 +3 44075 45201 44259 +3 44076 44260 45202 +3 44076 45202 45013 +3 44077 44281 44287 +3 44078 44288 44282 +3 44079 44940 45236 +3 44079 45236 44230 +3 44080 44231 45237 +3 44080 45237 44941 +3 44081 44173 44323 +3 44081 44323 44204 +3 44082 44205 44324 +3 44082 44324 44174 +3 44083 44392 44570 +3 44083 44570 44202 +3 44084 44203 44571 +3 44084 44571 44393 +3 44085 44168 44929 +3 44085 44929 44735 +3 44086 44736 44930 +3 44086 44930 44169 +3 44087 44436 44538 +3 44087 44538 44152 +3 44088 44153 44539 +3 44088 44539 44437 +3 44089 44686 44810 +3 44089 44810 44175 +3 44090 44176 44811 +3 44090 44811 44687 +3 44091 44218 44855 +3 44091 44855 44672 +3 44092 44673 44856 +3 44092 44856 44219 +3 44093 44551 45632 +3 44093 45632 45183 +3 44094 45184 45633 +3 44094 45633 44552 +3 44095 44267 44647 +3 44095 44647 44454 +3 44096 44455 44648 +3 44096 44648 44268 +3 44097 44463 44661 +3 44097 44661 44464 +3 44098 44536 44902 +3 44098 44902 44435 +3 44099 44435 44903 +3 44099 44903 44537 +3 44100 44588 44763 +3 44100 44763 44234 +3 44101 44235 44764 +3 44101 44764 44589 +3 44102 44106 44682 +3 44102 44682 44574 +3 44103 44575 44683 +3 44103 44683 44107 +3 44104 44438 44894 +3 44104 44894 44536 +3 44105 44537 44895 +3 44105 44895 44439 +3 44106 44662 44682 +3 44107 44683 44663 +3 44108 44492 45001 +3 44108 45001 44611 +3 44109 44612 45002 +3 44109 45002 44493 +3 44110 45024 45025 +3 44111 44402 45710 +3 44111 45710 45462 +3 44112 45463 45711 +3 44112 45711 44403 +3 44113 44232 44366 +3 44113 44366 44224 +3 44114 44225 44367 +3 44114 44367 44233 +3 44115 44357 44872 +3 44115 44872 44590 +3 44116 44591 44873 +3 44116 44873 44358 +3 44117 45274 45446 +3 44117 45446 44248 +3 44118 44249 45447 +3 44118 45447 45275 +3 44119 44212 44906 +3 44119 44906 44757 +3 44120 44758 44907 +3 44120 44907 44213 +3 44121 44259 45117 +3 44121 45117 44959 +3 44122 44960 45118 +3 44122 45118 44260 +3 44123 44327 45146 +3 44123 45146 44922 +3 44124 44923 45147 +3 44124 45147 44328 +3 44125 44152 44572 +3 44125 44572 44524 +3 44126 44525 44573 +3 44126 44573 44153 +3 44127 44376 44601 +3 44127 44601 44299 +3 44128 44300 44602 +3 44128 44602 44377 +3 44129 45052 45559 +3 44129 45559 44639 +3 44130 44640 45560 +3 44130 45560 45053 +3 44131 44442 45583 +3 44131 45583 45276 +3 44132 45277 45584 +3 44132 45584 44443 +3 44133 44888 45003 +3 44133 45003 44545 +3 44134 44546 45004 +3 44134 45004 44889 +3 44135 44416 45150 +3 44135 45150 44851 +3 44136 44852 45151 +3 44136 45151 44417 +3 44137 44743 45057 +3 44137 45057 44446 +3 44138 44447 45058 +3 44138 45058 44744 +3 44139 44391 44569 +3 44139 44569 44390 +3 44140 44420 44916 +3 44140 44916 44595 +3 44141 44596 44917 +3 44141 44917 44421 +3 44142 45325 45403 +3 44142 45403 44191 +3 44143 44192 45404 +3 44143 45404 45326 +3 44144 44508 45262 +3 44144 45262 44918 +3 44145 44919 45263 +3 44145 45263 44509 +3 44146 45272 45468 +3 44146 45468 44370 +3 44147 44371 45469 +3 44147 45469 45273 +3 44148 44461 45389 +3 44148 45389 45110 +3 44149 45111 45390 +3 44149 45390 44462 +3 44150 44749 44821 +3 44150 44821 44459 +3 44151 44460 44822 +3 44151 44822 44750 +3 44152 44538 44572 +3 44153 44573 44539 +3 44154 44595 44936 +3 44154 44936 44494 +3 44155 44495 44937 +3 44155 44937 44596 +3 44156 44567 45331 +3 44156 45331 44938 +3 44157 44939 45332 +3 44157 45332 44568 +3 44158 44428 45435 +3 44158 45435 45156 +3 44159 45157 45436 +3 44159 45436 44429 +3 44160 44718 44932 +3 44160 44932 44347 +3 44161 44348 44933 +3 44161 44933 44719 +3 44162 45266 45543 +3 44162 45543 44797 +3 44163 44798 45544 +3 44163 45544 45267 +3 44164 44484 45062 +3 44164 45062 44769 +3 44165 44770 45063 +3 44165 45063 44485 +3 44166 44370 45303 +3 44166 45303 45088 +3 44167 45089 45304 +3 44167 45304 44371 +3 44168 44240 45028 +3 44168 45028 44929 +3 44169 44930 45029 +3 44169 45029 44241 +3 44170 44454 44759 +3 44170 44759 44463 +3 44171 44464 44760 +3 44171 44760 44455 +3 44172 44649 45357 +3 44172 45357 44650 +3 44173 44242 44426 +3 44173 44426 44323 +3 44174 44324 44427 +3 44174 44427 44243 +3 44175 44810 44870 +3 44175 44870 44201 +3 44176 44201 44871 +3 44176 44871 44811 +3 44177 45466 45240 +3 44178 45241 45467 +3 44179 44983 45949 +3 44179 45949 45250 +3 44180 45251 45950 +3 44180 45950 44984 +3 44181 44880 45214 +3 44181 45214 44559 +3 44182 44560 45215 +3 44182 45215 44881 +3 44183 45042 45343 +3 44183 45343 44516 +3 44184 44517 45344 +3 44184 45344 45043 +3 44185 44285 44473 +3 44185 44473 44349 +3 44186 44350 44474 +3 44186 44474 44286 +3 44187 45020 45131 +3 44187 45131 44444 +3 44188 44445 45132 +3 44188 45132 45021 +3 44189 45138 45449 +3 44189 45449 44518 +3 44190 44519 45450 +3 44190 45450 45139 +3 44191 45403 45437 +3 44191 45437 44192 +3 44192 45437 45404 +3 44193 44374 44680 +3 44193 44680 44471 +3 44194 44472 44681 +3 44194 44681 44375 +3 44195 44576 45399 +3 44195 45399 45059 +3 44196 45060 45400 +3 44196 45400 44577 +3 44197 44390 44619 +3 44197 44619 44376 +3 44198 44377 44620 +3 44198 44620 44391 +3 44199 44471 44684 +3 44199 44684 44392 +3 44200 44393 44685 +3 44200 44685 44472 +3 44201 44870 44871 +3 44202 44570 44666 +3 44202 44666 44307 +3 44203 44308 44667 +3 44203 44667 44571 +3 44204 44323 44433 +3 44204 44433 44281 +3 44205 44282 44434 +3 44205 44434 44324 +3 44206 44349 44414 +3 44206 44414 44254 +3 44207 44254 44415 +3 44207 44415 44350 +3 44208 44733 44995 +3 44208 44995 44482 +3 44209 44483 44996 +3 44209 44996 44734 +3 44210 44307 44607 +3 44210 44607 44504 +3 44211 44505 44608 +3 44211 44608 44308 +3 44212 44590 44997 +3 44212 44997 44906 +3 44213 44907 44998 +3 44213 44998 44591 +3 44214 44528 44657 +3 44214 44657 44331 +3 44215 44332 44658 +3 44215 44658 44529 +3 44216 44512 44876 +3 44216 44876 44599 +3 44217 44600 44877 +3 44217 44877 44513 +3 44218 44317 44965 +3 44218 44965 44855 +3 44219 44856 44966 +3 44219 44966 44318 +3 44220 44345 44835 +3 44220 44835 44700 +3 44221 44701 44836 +3 44221 44836 44346 +3 44222 44767 44993 +3 44222 44993 44465 +3 44223 44466 44994 +3 44223 44994 44768 +3 44224 44366 44480 +3 44224 44480 44291 +3 44225 44292 44481 +3 44225 44481 44367 +3 44226 44934 45738 +3 44226 45738 45094 +3 44227 45095 45739 +3 44227 45739 44935 +3 44228 44643 44890 +3 44228 44890 44440 +3 44229 44441 44891 +3 44229 44891 44644 +3 44230 45236 45378 +3 44230 45378 44334 +3 44231 44335 45379 +3 44231 45379 45237 +3 44232 44287 44467 +3 44232 44467 44366 +3 44233 44367 44468 +3 44233 44468 44288 +3 44234 44763 44865 +3 44234 44865 44319 +3 44235 44320 44866 +3 44235 44866 44764 +3 44236 45104 45353 +3 44236 45353 44496 +3 44237 44497 45354 +3 44237 45354 45105 +3 44238 44355 45084 +3 44238 45084 44944 +3 44239 44945 45085 +3 44239 45085 44356 +3 44240 44241 45054 +3 44240 45054 45028 +3 44241 45029 45054 +3 44242 44243 44479 +3 44242 44479 44426 +3 44243 44427 44479 +3 44244 45154 45391 +3 44244 45391 44490 +3 44245 44491 45392 +3 44245 45392 45155 +3 44246 45438 45798 +3 44246 45798 44641 +3 44247 44642 45799 +3 44247 45799 45439 +3 44248 45446 45525 +3 44248 45525 44325 +3 44249 44326 45526 +3 44249 45526 45447 +3 44250 45086 45746 +3 44250 45746 44973 +3 44251 44974 45747 +3 44251 45747 45087 +3 44252 45034 45503 +3 44252 45503 44747 +3 44253 44748 45504 +3 44253 45504 45035 +3 44254 44414 44415 +3 44255 44586 45313 +3 44255 45313 45010 +3 44256 45011 45314 +3 44256 45314 44587 +3 44257 45258 45990 +3 44257 45990 45074 +3 44258 45075 45991 +3 44258 45991 45259 +3 44259 45201 45117 +3 44260 45118 45202 +3 44261 44386 44863 +3 44261 44863 44720 +3 44262 44721 44864 +3 44262 44864 44387 +3 44263 45135 45477 +3 44263 45477 44613 +3 44264 44614 45478 +3 44264 45478 45136 +3 44265 44814 45547 +3 44265 45547 45055 +3 44266 45056 45548 +3 44266 45548 44815 +3 44267 44380 44806 +3 44267 44806 44647 +3 44268 44648 44807 +3 44268 44807 44381 +3 44269 44599 44799 +3 44269 44799 44450 +3 44270 44451 44800 +3 44270 44800 44600 +3 44271 45032 45296 +3 44271 45296 44553 +3 44272 44554 45297 +3 44272 45297 45033 +3 44273 44664 45768 +3 44273 45768 45393 +3 44274 45394 45769 +3 44274 45769 44665 +3 44275 44530 44912 +3 44275 44912 44659 +3 44276 44660 44913 +3 44276 44913 44531 +3 44277 44557 45080 +3 44277 45080 44818 +3 44278 44819 45081 +3 44278 45081 44558 +3 44279 44510 45658 +3 44279 45658 45457 +3 44280 45458 45659 +3 44280 45659 44511 +3 44281 44433 44488 +3 44281 44488 44287 +3 44282 44288 44489 +3 44282 44489 44434 +3 44283 45030 45207 +3 44283 45207 44475 +3 44284 44476 45208 +3 44284 45208 45031 +3 44285 44311 44522 +3 44285 44522 44473 +3 44286 44474 44523 +3 44286 44523 44312 +3 44287 44488 44467 +3 44288 44468 44489 +3 44289 44952 45244 +3 44289 45244 44605 +3 44290 44606 45245 +3 44290 45245 44953 +3 44291 44480 44526 +3 44291 44526 44311 +3 44292 44312 44527 +3 44292 44527 44481 +3 44293 44716 45242 +3 44293 45242 44841 +3 44294 44842 45243 +3 44294 45243 44717 +3 44295 44708 45523 +3 44295 45523 45166 +3 44296 45167 45524 +3 44296 45524 44709 +3 44297 44977 45372 +3 44297 45372 44714 +3 44298 44715 45373 +3 44298 45373 44978 +3 44299 44601 44771 +3 44299 44771 44436 +3 44300 44437 44772 +3 44300 44772 44602 +3 44301 45070 45794 +3 44301 45794 45086 +3 44302 45087 45795 +3 44302 45795 45071 +3 44303 44502 45127 +3 44303 45127 44946 +3 44304 44947 45128 +3 44304 45128 44503 +3 44305 44504 44728 +3 44305 44728 44528 +3 44306 44529 44729 +3 44306 44729 44505 +3 44307 44666 44607 +3 44308 44608 44667 +3 44309 45094 45806 +3 44309 45806 45070 +3 44310 45071 45807 +3 44310 45807 45095 +3 44311 44526 44522 +3 44312 44523 44527 +3 44313 44886 45133 +3 44313 45133 44580 +3 44314 44581 45134 +3 44314 45134 44887 +3 44315 44670 45197 +3 44315 45197 44853 +3 44316 44854 45198 +3 44316 45198 44671 +3 44317 44343 45018 +3 44317 45018 44965 +3 44318 44966 45019 +3 44318 45019 44344 +3 44319 44865 45016 +3 44319 45016 44343 +3 44320 44344 45017 +3 44320 45017 44866 +3 44321 45351 45670 +3 44321 45670 44692 +3 44322 44693 45671 +3 44322 45671 45352 +3 44323 44426 44578 +3 44323 44578 44433 +3 44324 44434 44579 +3 44324 44579 44427 +3 44325 45525 45610 +3 44325 45610 44359 +3 44326 44359 45611 +3 44326 45611 45526 +3 44327 44547 45349 +3 44327 45349 45146 +3 44328 45147 45350 +3 44328 45350 44548 +3 44329 44753 45946 +3 44329 45946 45527 +3 44330 45528 45947 +3 44330 45947 44754 +3 44331 44657 44761 +3 44331 44761 44398 +3 44332 44399 44762 +3 44332 44762 44658 +3 44333 44862 45211 +3 44333 45211 44861 +3 44334 45378 45442 +3 44334 45442 44382 +3 44335 44383 45443 +3 44335 45443 45379 +3 44336 44756 45007 +3 44336 45007 44755 +3 44337 44765 45005 +3 44337 45005 44588 +3 44338 44589 45006 +3 44338 45006 44766 +3 44339 44884 45248 +3 44339 45248 44743 +3 44340 44744 45249 +3 44340 45249 44885 +3 44341 44629 45282 +3 44341 45282 45044 +3 44342 45045 45283 +3 44342 45283 44630 +3 44343 45016 45018 +3 44344 45019 45017 +3 44345 44450 44924 +3 44345 44924 44835 +3 44346 44836 44925 +3 44346 44925 44451 +3 44347 44932 45078 +3 44347 45078 44506 +3 44348 44507 45079 +3 44348 45079 44933 +3 44349 44473 44561 +3 44349 44561 44414 +3 44350 44415 44562 +3 44350 44562 44474 +3 44351 44942 45810 +3 44351 45810 45278 +3 44352 45279 45811 +3 44352 45811 44943 +3 44353 45142 45561 +3 44353 45561 44816 +3 44354 44817 45562 +3 44354 45562 45143 +3 44355 44563 45164 +3 44355 45164 45084 +3 44356 45085 45165 +3 44356 45165 44564 +3 44357 44769 45234 +3 44357 45234 44872 +3 44358 44873 45235 +3 44358 45235 44770 +3 44359 45610 45611 +3 44360 45453 45676 +3 44360 45676 44741 +3 44361 44742 45677 +3 44361 45677 45454 +3 44362 45191 45634 +3 44362 45634 44801 +3 44363 44802 45635 +3 44363 45635 45192 +3 44364 44659 44979 +3 44364 44979 44643 +3 44365 44644 44980 +3 44365 44980 44660 +3 44366 44467 44597 +3 44366 44597 44480 +3 44367 44481 44598 +3 44367 44598 44468 +3 44368 45444 45734 +3 44368 45734 44696 +3 44369 44697 45735 +3 44369 45735 45445 +3 44370 45468 45303 +3 44371 45304 45469 +3 44372 44773 45704 +3 44372 45704 45355 +3 44373 45356 45705 +3 44373 45705 44774 +3 44374 44524 44825 +3 44374 44825 44680 +3 44375 44681 44826 +3 44375 44826 44525 +3 44376 44619 44849 +3 44376 44849 44601 +3 44377 44602 44850 +3 44377 44850 44620 +3 44378 44829 45838 +3 44378 45838 45421 +3 44379 45422 45839 +3 44379 45839 44830 +3 44380 44574 44989 +3 44380 44989 44806 +3 44381 44807 44990 +3 44381 44990 44575 +3 44382 45442 45474 +3 44382 45474 44383 +3 44383 45474 45443 +3 44384 44837 45140 +3 44384 45140 44733 +3 44385 44734 45141 +3 44385 45141 44838 +3 44386 44514 44971 +3 44386 44971 44863 +3 44387 44864 44972 +3 44387 44972 44515 +3 44388 44724 45429 +3 44388 45429 45102 +3 44389 45103 45430 +3 44389 45430 44725 +3 44390 44569 44804 +3 44390 44804 44619 +3 44391 44620 44805 +3 44391 44805 44569 +3 44392 44684 44847 +3 44392 44847 44570 +3 44393 44571 44848 +3 44393 44848 44685 +3 44394 44827 45688 +3 44394 45688 45288 +3 44395 45289 45689 +3 44395 45689 44828 +3 44396 44793 45616 +3 44396 45616 45203 +3 44397 45204 45617 +3 44397 45617 44794 +3 44398 44761 44808 +3 44398 44808 44430 +3 44399 44430 44809 +3 44399 44809 44762 +3 44400 45228 45844 +3 44400 45844 45052 +3 44401 45053 45845 +3 44401 45845 45229 +3 44402 44696 45959 +3 44402 45959 45710 +3 44403 45711 45960 +3 44403 45960 44697 +3 44404 44853 45386 +3 44404 45386 44884 +3 44405 44885 45387 +3 44405 45387 44854 +3 44406 44987 45264 +3 44406 45264 44718 +3 44407 44719 45265 +3 44407 45265 44988 +3 44408 44755 45098 +3 44408 45098 44765 +3 44409 44766 45099 +3 44409 45099 44756 +3 44410 45048 45382 +3 44410 45382 44781 +3 44411 44782 45383 +3 44411 45383 45049 +3 44412 45345 45626 +3 44412 45626 44731 +3 44413 44732 45627 +3 44413 45627 45346 +3 44414 44561 44592 +3 44414 44592 44415 +3 44415 44592 44562 +3 44416 44690 45401 +3 44416 45401 45150 +3 44417 45151 45402 +3 44417 45402 44691 +3 44418 45123 45499 +3 44418 45499 44795 +3 44419 44796 45500 +3 44419 45500 45124 +3 44420 44672 45148 +3 44420 45148 44916 +3 44421 44917 45149 +3 44421 45149 44673 +3 44422 45341 46088 +3 44422 46088 45321 +3 44423 45322 46089 +3 44423 46089 45342 +3 44424 45329 45802 +3 44424 45802 44948 +3 44425 44949 45803 +3 44425 45803 45330 +3 44426 44479 44631 +3 44426 44631 44578 +3 44427 44579 44632 +3 44427 44632 44479 +3 44428 44651 45832 +3 44428 45832 45435 +3 44429 45436 45833 +3 44429 45833 44652 +3 44430 44808 44809 +3 44431 44938 45591 +3 44431 45591 45112 +3 44432 45113 45592 +3 44432 45592 44939 +3 44433 44578 44633 +3 44433 44633 44488 +3 44434 44489 44634 +3 44434 44634 44579 +3 44435 44902 45180 +3 44435 45180 44903 +3 44436 44771 44859 +3 44436 44859 44538 +3 44437 44539 44860 +3 44437 44860 44772 +3 44438 44726 45181 +3 44438 45181 44894 +3 44439 44895 45182 +3 44439 45182 44727 +3 44440 44890 45046 +3 44440 45046 44584 +3 44441 44585 45047 +3 44441 45047 44891 +3 44442 44702 45830 +3 44442 45830 45583 +3 44443 45584 45831 +3 44443 45831 44703 +3 44444 45131 45337 +3 44444 45337 44625 +3 44445 44626 45338 +3 44445 45338 45132 +3 44446 45057 45323 +3 44446 45323 44706 +3 44447 44707 45324 +3 44447 45324 45058 +3 44448 44861 45294 +3 44448 45294 44880 +3 44449 44881 45295 +3 44449 45295 44862 +3 44450 44799 44924 +3 44451 44925 44800 +3 44452 45321 46102 +3 44452 46102 45258 +3 44453 45259 46103 +3 44453 46103 45322 +3 44454 44647 44985 +3 44454 44985 44759 +3 44455 44760 44986 +3 44455 44986 44648 +3 44456 45009 45827 +3 44456 45827 45008 +3 44457 45250 46105 +3 44457 46105 45341 +3 44458 45342 46106 +3 44458 46106 45251 +3 44459 44821 45193 +3 44459 45193 44837 +3 44460 44838 45194 +3 44460 45194 44822 +3 44461 44704 45624 +3 44461 45624 45389 +3 44462 45390 45625 +3 44462 45625 44705 +3 44463 44759 44991 +3 44463 44991 44661 +3 44464 44661 44992 +3 44464 44992 44760 +3 44465 44993 45144 +3 44465 45144 44621 +3 44466 44622 45145 +3 44466 45145 44994 +3 44467 44488 44645 +3 44467 44645 44597 +3 44468 44598 44646 +3 44468 44646 44489 +3 44469 44999 45772 +3 44469 45772 45252 +3 44470 45253 45773 +3 44470 45773 45000 +3 44471 44680 44892 +3 44471 44892 44684 +3 44472 44685 44893 +3 44472 44893 44681 +3 44473 44522 44637 +3 44473 44637 44561 +3 44474 44562 44638 +3 44474 44638 44523 +3 44475 45207 45298 +3 44475 45298 44547 +3 44476 44548 45299 +3 44476 45299 45208 +3 44477 44851 45451 +3 44477 45451 45076 +3 44478 45077 45452 +3 44478 45452 44852 +3 44479 44632 44631 +3 44480 44597 44653 +3 44480 44653 44526 +3 44481 44527 44654 +3 44481 44654 44598 +3 44482 44995 45176 +3 44482 45176 44686 +3 44483 44687 45177 +3 44483 45177 44996 +3 44484 44735 45309 +3 44484 45309 45062 +3 44485 45063 45310 +3 44485 45310 44736 +3 44486 45440 45871 +3 44486 45871 44920 +3 44487 44921 45872 +3 44487 45872 45441 +3 44488 44633 44645 +3 44489 44646 44634 +3 44490 45391 45575 +3 44490 45575 44785 +3 44491 44786 45576 +3 44491 45576 45392 +3 44492 44818 45317 +3 44492 45317 45001 +3 44493 45002 45318 +3 44493 45318 44819 +3 44494 44936 45199 +3 44494 45199 44767 +3 44495 44768 45200 +3 44495 45200 44937 +3 44496 45353 45491 +3 44496 45491 44977 +3 44497 44978 45492 +3 44497 45492 45354 +3 44498 44975 45780 +3 44498 45780 45302 +3 44499 45302 45781 +3 44499 45781 44976 +3 44500 44918 45569 +3 44500 45569 45152 +3 44501 45153 45570 +3 44501 45570 44919 +3 44502 44593 45256 +3 44502 45256 45127 +3 44503 45128 45257 +3 44503 45257 44594 +3 44504 44607 44878 +3 44504 44878 44728 +3 44505 44729 44879 +3 44505 44879 44608 +3 44506 45078 45158 +3 44506 45158 44565 +3 44507 44566 45159 +3 44507 45159 45079 +3 44508 44745 45519 +3 44508 45519 45262 +3 44509 45263 45520 +3 44509 45520 44746 +3 44510 44627 45808 +3 44510 45808 45658 +3 44511 45659 45809 +3 44511 45809 44628 +3 44512 44720 45082 +3 44512 45082 44876 +3 44513 44877 45083 +3 44513 45083 44721 +3 44514 44540 45026 +3 44514 45026 44971 +3 44515 44972 45027 +3 44515 45027 44540 +3 44516 45343 45545 +3 44516 45545 44737 +3 44517 44738 45546 +3 44517 45546 45344 +3 44518 45449 45682 +3 44518 45682 45034 +3 44519 45035 45683 +3 44519 45683 45450 +3 44520 44882 45778 +3 44520 45778 45415 +3 44521 45416 45779 +3 44521 45779 44883 +3 44522 44526 44676 +3 44522 44676 44637 +3 44523 44638 44677 +3 44523 44677 44527 +3 44524 44572 44910 +3 44524 44910 44825 +3 44525 44826 44911 +3 44525 44911 44573 +3 44526 44653 44676 +3 44527 44677 44654 +3 44528 44728 44904 +3 44528 44904 44657 +3 44529 44658 44905 +3 44529 44905 44729 +3 44530 44700 45100 +3 44530 45100 44912 +3 44531 44913 45101 +3 44531 45101 44701 +3 44532 45246 45879 +3 44532 45879 45254 +3 44533 45255 45880 +3 44533 45880 45247 +3 44534 45036 45992 +3 44534 45992 45495 +3 44535 45496 45993 +3 44535 45993 45037 +3 44536 44894 45260 +3 44536 45260 44902 +3 44537 44903 45261 +3 44537 45261 44895 +3 44538 44859 44914 +3 44538 44914 44572 +3 44539 44573 44915 +3 44539 44915 44860 +3 44540 45027 45026 +3 44541 45483 46113 +3 44541 46113 45185 +3 44542 45186 46114 +3 44542 46114 45484 +3 44543 45203 45891 +3 44543 45891 45246 +3 44544 45247 45892 +3 44544 45892 45204 +3 44545 45003 45360 +3 44545 45360 44886 +3 44546 44887 45361 +3 44546 45361 45004 +3 44547 45298 45349 +3 44548 45350 45299 +3 44549 45254 45899 +3 44549 45899 45191 +3 44550 45192 45900 +3 44550 45900 45255 +3 44551 44927 46015 +3 44551 46015 45632 +3 44552 45633 46016 +3 44552 46016 44928 +3 44553 45296 45666 +3 44553 45666 44940 +3 44554 44941 45667 +3 44554 45667 45297 +3 44555 45108 46192 +3 44555 46192 45678 +3 44556 45679 46193 +3 44556 46193 45109 +3 44557 44757 45292 +3 44557 45292 45080 +3 44558 45081 45293 +3 44558 45293 44758 +3 44559 45214 45485 +3 44559 45485 44823 +3 44560 44824 45486 +3 44560 45486 45215 +3 44561 44637 44710 +3 44561 44710 44592 +3 44562 44592 44711 +3 44562 44711 44638 +3 44563 44565 45195 +3 44563 45195 45164 +3 44564 45165 45196 +3 44564 45196 44566 +3 44565 45158 45195 +3 44566 45196 45159 +3 44567 44908 45638 +3 44567 45638 45331 +3 44568 45332 45639 +3 44568 45639 44909 +3 44569 44805 44931 +3 44569 44931 44804 +3 44570 44847 44963 +3 44570 44963 44666 +3 44571 44667 44964 +3 44571 44964 44848 +3 44572 44914 44910 +3 44573 44911 44915 +3 44574 44682 45106 +3 44574 45106 44989 +3 44575 44990 45107 +3 44575 45107 44683 +3 44576 44874 45720 +3 44576 45720 45399 +3 44577 45400 45721 +3 44577 45721 44875 +3 44578 44631 44739 +3 44578 44739 44633 +3 44579 44634 44740 +3 44579 44740 44632 +3 44580 45133 45513 +3 44580 45513 44952 +3 44581 44953 45514 +3 44581 45514 45134 +3 44582 44961 45867 +3 44582 45867 45481 +3 44583 45482 45868 +3 44583 45868 44962 +3 44584 45046 45115 +3 44584 45115 44662 +3 44585 44663 45116 +3 44585 45116 45047 +3 44586 44722 45539 +3 44586 45539 45313 +3 44587 45314 45540 +3 44587 45540 44723 +3 44588 45005 45187 +3 44588 45187 44763 +3 44589 44764 45188 +3 44589 45188 45006 +3 44590 44872 45284 +3 44590 45284 44997 +3 44591 44998 45285 +3 44591 45285 44873 +3 44592 44710 44711 +3 44593 44625 45339 +3 44593 45339 45256 +3 44594 45257 45340 +3 44594 45340 44626 +3 44595 44916 45290 +3 44595 45290 44936 +3 44596 44937 45291 +3 44596 45291 44917 +3 44597 44645 44751 +3 44597 44751 44653 +3 44598 44654 44752 +3 44598 44752 44646 +3 44599 44876 45092 +3 44599 45092 44799 +3 44600 44800 45093 +3 44600 45093 44877 +3 44601 44849 45014 +3 44601 45014 44771 +3 44602 44772 45015 +3 44602 45015 44850 +3 44603 45714 46144 +3 44603 46144 45068 +3 44604 45069 46145 +3 44604 46145 45715 +3 44605 45244 45489 +3 44605 45489 44857 +3 44606 44858 45490 +3 44606 45490 45245 +3 44607 44666 44957 +3 44607 44957 44878 +3 44608 44879 44958 +3 44608 44958 44667 +3 44609 45059 45748 +3 44609 45748 45305 +3 44610 45306 45749 +3 44610 45749 45060 +3 44611 45001 45425 +3 44611 45425 44987 +3 44612 44988 45426 +3 44612 45426 45002 +3 44613 45477 45750 +3 44613 45750 44898 +3 44614 44899 45751 +3 44614 45751 45478 +3 44615 45125 45529 +3 44615 45529 45048 +3 44616 45049 45530 +3 44616 45530 45126 +3 44617 45300 45718 +3 44617 45718 45042 +3 44618 45043 45719 +3 44618 45719 45301 +3 44619 44804 45040 +3 44619 45040 44849 +3 44620 44850 45041 +3 44620 45041 44805 +3 44621 45144 45270 +3 44621 45270 44749 +3 44622 44750 45271 +3 44622 45271 45145 +3 44623 45076 45573 +3 44623 45573 45125 +3 44624 45126 45574 +3 44624 45574 45077 +3 44625 45337 45339 +3 44626 45340 45338 +3 44627 44712 45910 +3 44627 45910 45808 +3 44628 45809 45911 +3 44628 45911 44713 +3 44629 45010 45648 +3 44629 45648 45282 +3 44630 45283 45649 +3 44630 45649 45011 +3 44631 44632 44780 +3 44631 44780 44739 +3 44632 44740 44780 +3 44633 44739 44783 +3 44633 44783 44645 +3 44634 44646 44784 +3 44634 44784 44740 +3 44635 45311 45823 +3 44635 45823 45142 +3 44636 45143 45824 +3 44636 45824 45312 +3 44637 44676 44778 +3 44637 44778 44710 +3 44638 44711 44779 +3 44638 44779 44677 +3 44639 45559 46021 +3 44639 46021 45090 +3 44640 45091 46022 +3 44640 46022 45560 +3 44641 45798 46111 +3 44641 46111 44969 +3 44642 44970 46112 +3 44642 46112 45799 +3 44643 44979 45220 +3 44643 45220 44890 +3 44644 44891 45221 +3 44644 45221 44980 +3 44645 44783 44751 +3 44646 44752 44784 +3 44647 44806 45121 +3 44647 45121 44985 +3 44648 44986 45122 +3 44648 45122 44807 +3 44649 45252 45953 +3 44649 45953 45357 +3 44650 45357 45954 +3 44650 45954 45253 +3 44651 44812 46008 +3 44651 46008 45832 +3 44652 45833 46009 +3 44652 46009 44813 +3 44653 44751 44789 +3 44653 44789 44676 +3 44654 44677 44790 +3 44654 44790 44752 +3 44655 45152 45549 +3 44655 45549 45061 +3 44656 45061 45550 +3 44656 45550 45153 +3 44657 44904 45022 +3 44657 45022 44761 +3 44658 44762 45023 +3 44658 45023 44905 +3 44659 44912 45224 +3 44659 45224 44979 +3 44660 44980 45225 +3 44660 45225 44913 +3 44661 44991 45137 +3 44661 45137 44992 +3 44662 45115 45162 +3 44662 45162 44682 +3 44663 44683 45163 +3 44663 45163 45116 +3 44664 45278 46077 +3 44664 46077 45768 +3 44665 45769 46078 +3 44665 46078 45279 +3 44666 44963 44957 +3 44667 44958 44964 +3 44668 45268 45792 +3 44668 45792 45286 +3 44669 45287 45793 +3 44669 45793 45269 +3 44670 44946 45475 +3 44670 45475 45197 +3 44671 45198 45476 +3 44671 45476 44947 +3 44672 44855 45364 +3 44672 45364 45148 +3 44673 45149 45365 +3 44673 45365 44856 +3 44674 45280 45906 +3 44674 45906 45300 +3 44675 45301 45907 +3 44675 45907 45281 +3 44676 44789 44778 +3 44677 44779 44790 +3 44678 45183 46121 +3 44678 46121 45599 +3 44679 45600 46122 +3 44679 46122 45184 +3 44680 44825 45064 +3 44680 45064 44892 +3 44681 44893 45065 +3 44681 45065 44826 +3 44682 45162 45106 +3 44683 45107 45163 +3 44684 44892 45066 +3 44684 45066 44847 +3 44685 44848 45067 +3 44685 45067 44893 +3 44686 45176 45327 +3 44686 45327 44810 +3 44687 44811 45328 +3 44687 45328 45177 +3 44688 45305 45922 +3 44688 45922 45280 +3 44689 45281 45923 +3 44689 45923 45306 +3 44690 44841 45581 +3 44690 45581 45401 +3 44691 45402 45582 +3 44691 45582 44842 +3 44692 45670 45961 +3 44692 45961 44967 +3 44693 44968 45962 +3 44693 45962 45671 +3 44694 45102 45698 +3 44694 45698 45268 +3 44695 45269 45699 +3 44695 45699 45103 +3 44696 45734 45959 +3 44697 45960 45735 +3 44698 45286 45730 +3 44698 45730 45123 +3 44699 45124 45731 +3 44699 45731 45287 +3 44700 44835 45226 +3 44700 45226 45100 +3 44701 45101 45227 +3 44701 45227 44836 +3 44702 44950 46031 +3 44702 46031 45830 +3 44703 45831 46032 +3 44703 46032 44951 +3 44704 44896 45814 +3 44704 45814 45624 +3 44705 45625 45815 +3 44705 45815 44897 +3 44706 45323 45511 +3 44706 45511 44888 +3 44707 44889 45512 +3 44707 45512 45324 +3 44708 44867 45873 +3 44708 45873 45523 +3 44709 45524 45874 +3 44709 45874 44868 +3 44710 44778 44803 +3 44710 44803 44711 +3 44711 44803 44779 +3 44712 44713 45945 +3 44712 45945 45910 +3 44713 45911 45945 +3 44714 45372 45694 +3 44714 45694 45032 +3 44715 45033 45695 +3 44715 45695 45373 +3 44716 45044 45579 +3 44716 45579 45242 +3 44717 45243 45580 +3 44717 45580 45045 +3 44718 45264 45497 +3 44718 45497 44932 +3 44719 44933 45498 +3 44719 45498 45265 +3 44720 44863 45238 +3 44720 45238 45082 +3 44721 45083 45239 +3 44721 45239 44864 +3 44722 44791 45652 +3 44722 45652 45539 +3 44723 45540 45653 +3 44723 45653 44792 +3 44724 44959 45672 +3 44724 45672 45429 +3 44725 45430 45673 +3 44725 45673 44960 +3 44726 44944 45411 +3 44726 45411 45181 +3 44727 45182 45412 +3 44727 45412 44945 +3 44728 44878 45072 +3 44728 45072 44904 +3 44729 44905 45073 +3 44729 45073 44879 +3 44730 45312 45723 +3 44730 45723 45311 +3 44731 45626 45869 +3 44731 45869 44950 +3 44732 44951 45870 +3 44732 45870 45627 +3 44733 45140 45405 +3 44733 45405 44995 +3 44734 44996 45406 +3 44734 45406 45141 +3 44735 44929 45507 +3 44735 45507 45309 +3 44736 45310 45508 +3 44736 45508 44930 +3 44737 45545 45742 +3 44737 45742 44896 +3 44738 44897 45743 +3 44738 45743 45546 +3 44739 44780 44833 +3 44739 44833 44783 +3 44740 44784 44834 +3 44740 44834 44780 +3 44741 45676 45986 +3 44741 45986 45050 +3 44742 45051 45987 +3 44742 45987 45677 +3 44743 45248 45565 +3 44743 45565 45057 +3 44744 45058 45566 +3 44744 45566 45249 +3 44745 44922 45726 +3 44745 45726 45519 +3 44746 45520 45727 +3 44746 45727 44923 +3 44747 45503 45920 +3 44747 45920 45135 +3 44748 45136 45921 +3 44748 45921 45504 +3 44749 45270 45368 +3 44749 45368 44821 +3 44750 44822 45369 +3 44750 45369 45271 +3 44751 44783 44839 +3 44751 44839 44789 +3 44752 44790 44840 +3 44752 44840 44784 +3 44753 45129 46269 +3 44753 46269 45946 +3 44754 45947 46270 +3 44754 46270 45130 +3 44755 45007 45376 +3 44755 45376 45098 +3 44756 45099 45377 +3 44756 45377 45007 +3 44757 44906 45464 +3 44757 45464 45292 +3 44758 45293 45465 +3 44758 45465 44907 +3 44759 44985 45222 +3 44759 45222 44991 +3 44760 44992 45223 +3 44760 45223 44986 +3 44761 45022 45096 +3 44761 45096 44808 +3 44762 44809 45097 +3 44762 45097 45023 +3 44763 45187 45319 +3 44763 45319 44865 +3 44764 44866 45320 +3 44764 45320 45188 +3 44765 45098 45370 +3 44765 45370 45005 +3 44766 45006 45371 +3 44766 45371 45099 +3 44767 45199 45431 +3 44767 45431 44993 +3 44768 44994 45432 +3 44768 45432 45200 +3 44769 45062 45533 +3 44769 45533 45234 +3 44770 45235 45534 +3 44770 45534 45063 +3 44771 45014 45119 +3 44771 45119 44859 +3 44772 44860 45120 +3 44772 45120 45015 +3 44773 45055 46013 +3 44773 46013 45704 +3 44774 45705 46014 +3 44774 46014 45056 +3 44775 45608 46252 +3 44775 46252 45440 +3 44776 45441 46253 +3 44776 46253 45609 +3 44777 45229 45936 +3 44777 45936 45228 +3 44778 44789 44845 +3 44778 44845 44803 +3 44779 44803 44846 +3 44779 44846 44790 +3 44780 44834 44833 +3 44781 45382 45642 +3 44781 45642 45030 +3 44782 45031 45643 +3 44782 45643 45383 +3 44783 44833 44839 +3 44784 44840 44834 +3 44785 45575 45818 +3 44785 45818 45012 +3 44786 45013 45819 +3 44786 45819 45576 +3 44787 45481 46256 +3 44787 46256 45603 +3 44788 45604 46257 +3 44788 46257 45482 +3 44789 44839 44845 +3 44790 44846 44840 +3 44791 44820 45728 +3 44791 45728 45652 +3 44792 45653 45729 +3 44792 45729 44820 +3 44793 45088 45926 +3 44793 45926 45616 +3 44794 45617 45927 +3 44794 45927 45089 +3 44795 45499 45820 +3 44795 45820 45104 +3 44796 45105 45821 +3 44796 45821 45500 +3 44797 45543 46098 +3 44797 46098 45329 +3 44798 45330 46099 +3 44798 46099 45544 +3 44799 45092 45232 +3 44799 45232 44924 +3 44800 44925 45233 +3 44800 45233 45093 +3 44801 45634 46004 +3 44801 46004 45138 +3 44802 45139 46005 +3 44802 46005 45635 +3 44803 44845 44846 +3 44804 44931 45160 +3 44804 45160 45040 +3 44805 45041 45161 +3 44805 45161 44931 +3 44806 44989 45315 +3 44806 45315 45121 +3 44807 45122 45316 +3 44807 45316 44990 +3 44808 45096 45114 +3 44808 45114 44809 +3 44809 45114 45097 +3 44810 45327 45407 +3 44810 45407 44870 +3 44811 44871 45408 +3 44811 45408 45328 +3 44812 44900 46109 +3 44812 46109 46008 +3 44813 46009 46110 +3 44813 46110 44901 +3 44814 45288 46071 +3 44814 46071 45547 +3 44815 45548 46072 +3 44815 46072 45289 +3 44816 45561 45939 +3 44816 45939 45154 +3 44817 45155 45940 +3 44817 45940 45562 +3 44818 45080 45593 +3 44818 45593 45317 +3 44819 45318 45594 +3 44819 45594 45081 +3 44820 45729 45728 +3 44821 45368 45193 +3 44822 45194 45369 +3 44823 45485 45702 +3 44823 45702 45020 +3 44824 45021 45703 +3 44824 45703 45486 +3 44825 44910 45168 +3 44825 45168 45064 +3 44826 45065 45169 +3 44826 45169 44911 +3 44827 45156 46045 +3 44827 46045 45688 +3 44828 45689 46046 +3 44828 46046 45157 +3 44829 45172 46160 +3 44829 46160 45838 +3 44830 45839 46161 +3 44830 46161 45173 +3 44831 45603 46293 +3 44831 46293 45585 +3 44832 45586 46294 +3 44832 46294 45604 +3 44833 44834 44869 +3 44833 44869 44839 +3 44834 44840 44869 +3 44835 44924 45335 +3 44835 45335 45226 +3 44836 45227 45336 +3 44836 45336 44925 +3 44837 45193 45509 +3 44837 45509 45140 +3 44838 45141 45510 +3 44838 45510 45194 +3 44839 44869 44845 +3 44840 44846 44869 +3 44841 45242 45712 +3 44841 45712 45581 +3 44842 45582 45713 +3 44842 45713 45243 +3 44843 45585 46310 +3 44843 46310 45608 +3 44844 45609 46311 +3 44844 46311 45586 +3 44845 44869 44846 +3 44847 45066 45178 +3 44847 45178 44963 +3 44848 44964 45179 +3 44848 45179 45067 +3 44849 45040 45209 +3 44849 45209 45014 +3 44850 45015 45210 +3 44850 45210 45041 +3 44851 45150 45758 +3 44851 45758 45451 +3 44852 45452 45759 +3 44852 45759 45151 +3 44853 45197 45736 +3 44853 45736 45386 +3 44854 45387 45737 +3 44854 45737 45198 +3 44855 44965 45487 +3 44855 45487 45364 +3 44856 45365 45488 +3 44856 45488 44966 +3 44857 45489 45690 +3 44857 45690 44955 +3 44858 44956 45691 +3 44858 45691 45490 +3 44859 45119 45189 +3 44859 45189 44914 +3 44860 44915 45190 +3 44860 45190 45120 +3 44861 45211 45654 +3 44861 45654 45294 +3 44862 45295 45655 +3 44862 45655 45211 +3 44863 44971 45366 +3 44863 45366 45238 +3 44864 45239 45367 +3 44864 45367 44972 +3 44865 45319 45479 +3 44865 45479 45016 +3 44866 45017 45480 +3 44866 45480 45320 +3 44867 44981 46006 +3 44867 46006 45873 +3 44868 45874 46007 +3 44868 46007 44982 +3 44870 45407 45448 +3 44870 45448 44871 +3 44871 45448 45408 +3 44872 45234 45664 +3 44872 45664 45284 +3 44873 45285 45665 +3 44873 45665 45235 +3 44874 45112 45974 +3 44874 45974 45720 +3 44875 45721 45975 +3 44875 45975 45113 +3 44876 45082 45333 +3 44876 45333 45092 +3 44877 45093 45334 +3 44877 45334 45083 +3 44878 44957 45174 +3 44878 45174 45072 +3 44879 45073 45175 +3 44879 45175 44958 +3 44880 45294 45650 +3 44880 45650 45214 +3 44881 45215 45651 +3 44881 45651 45295 +3 44882 45110 46035 +3 44882 46035 45778 +3 44883 45779 46036 +3 44883 46036 45111 +3 44884 45386 45756 +3 44884 45756 45248 +3 44885 45249 45757 +3 44885 45757 45387 +3 44886 45360 45628 +3 44886 45628 45133 +3 44887 45134 45629 +3 44887 45629 45361 +3 44888 45511 45656 +3 44888 45656 45003 +3 44889 45004 45657 +3 44889 45657 45512 +3 44890 45220 45395 +3 44890 45395 45046 +3 44891 45047 45396 +3 44891 45396 45221 +3 44892 45064 45230 +3 44892 45230 45066 +3 44893 45067 45231 +3 44893 45231 45065 +3 44894 45181 45589 +3 44894 45589 45260 +3 44895 45261 45590 +3 44895 45590 45182 +3 44896 45742 45814 +3 44897 45815 45743 +3 44898 45750 46127 +3 44898 46127 45274 +3 44899 45275 46128 +3 44899 46128 45751 +3 44900 44926 46150 +3 44900 46150 46109 +3 44901 46110 46151 +3 44901 46151 44926 +3 44902 45260 45577 +3 44902 45577 45180 +3 44903 45180 45578 +3 44903 45578 45261 +3 44904 45072 45216 +3 44904 45216 45022 +3 44905 45023 45217 +3 44905 45217 45073 +3 44906 44997 45571 +3 44906 45571 45464 +3 44907 45465 45572 +3 44907 45572 44998 +3 44908 45166 45928 +3 44908 45928 45638 +3 44909 45639 45929 +3 44909 45929 45167 +3 44910 44914 45205 +3 44910 45205 45168 +3 44911 45169 45206 +3 44911 45206 44915 +3 44912 45100 45419 +3 44912 45419 45224 +3 44913 45225 45420 +3 44913 45420 45101 +3 44914 45189 45205 +3 44915 45206 45190 +3 44916 45148 45531 +3 44916 45531 45290 +3 44917 45291 45532 +3 44917 45532 45149 +3 44918 45262 45933 +3 44918 45933 45569 +3 44919 45570 45934 +3 44919 45934 45263 +3 44920 45871 46206 +3 44920 46206 45266 +3 44921 45267 46207 +3 44921 46207 45872 +3 44922 45146 45861 +3 44922 45861 45726 +3 44923 45727 45862 +3 44923 45862 45147 +3 44924 45232 45335 +3 44925 45336 45233 +3 44926 46151 46150 +3 44927 45276 46224 +3 44927 46224 46015 +3 44928 46016 46225 +3 44928 46225 45277 +3 44929 45028 45636 +3 44929 45636 45507 +3 44930 45508 45637 +3 44930 45637 45029 +3 44931 45161 45160 +3 44932 45497 45674 +3 44932 45674 45078 +3 44933 45079 45675 +3 44933 45675 45498 +3 44934 45355 46166 +3 44934 46166 45738 +3 44935 45739 46167 +3 44935 46167 45356 +3 44936 45290 45553 +3 44936 45553 45199 +3 44937 45200 45554 +3 44937 45554 45291 +3 44938 45331 46000 +3 44938 46000 45591 +3 44939 45592 46001 +3 44939 46001 45332 +3 44940 45666 45994 +3 44940 45994 45236 +3 44941 45237 45995 +3 44941 45995 45667 +3 44942 45421 46279 +3 44942 46279 45810 +3 44943 45811 46280 +3 44943 46280 45422 +3 44944 45084 45587 +3 44944 45587 45411 +3 44945 45412 45588 +3 44945 45588 45085 +3 44946 45127 45692 +3 44946 45692 45475 +3 44947 45476 45693 +3 44947 45693 45128 +3 44948 45802 46200 +3 44948 46200 45351 +3 44949 45352 46201 +3 44949 46201 45803 +3 44950 45869 46031 +3 44951 46032 45870 +3 44952 45513 45828 +3 44952 45828 45244 +3 44953 45245 45829 +3 44953 45829 45514 +3 44954 45495 46297 +3 44954 46297 45496 +3 44955 45690 45786 +3 44955 45786 45024 +3 44956 45025 45787 +3 44956 45787 45691 +3 44957 44963 45212 +3 44957 45212 45174 +3 44958 45175 45213 +3 44958 45213 44964 +3 44959 45117 45877 +3 44959 45877 45672 +3 44960 45673 45878 +3 44960 45878 45118 +3 44961 45240 46140 +3 44961 46140 45867 +3 44962 45868 46141 +3 44962 46141 45241 +3 44963 45178 45212 +3 44964 45213 45179 +3 44965 45018 45557 +3 44965 45557 45487 +3 44966 45488 45558 +3 44966 45558 45019 +3 44967 45961 46333 +3 44967 46333 45170 +3 44968 45171 46334 +3 44968 46334 45962 +3 44969 46111 46327 +3 44969 46327 45218 +3 44970 45219 46328 +3 44970 46328 46112 +3 44971 45026 45427 +3 44971 45427 45366 +3 44972 45367 45428 +3 44972 45428 45027 +3 44973 45746 46156 +3 44973 46156 45345 +3 44974 45346 46157 +3 44974 46157 45747 +3 44975 45599 46372 +3 44975 46372 45780 +3 44976 45781 46373 +3 44976 46373 45600 +3 44977 45491 45914 +3 44977 45914 45372 +3 44978 45373 45915 +3 44978 45915 45492 +3 44979 45224 45472 +3 44979 45472 45220 +3 44980 45221 45473 +3 44980 45473 45225 +3 44981 45038 46075 +3 44981 46075 46006 +3 44982 46007 46076 +3 44982 46076 45039 +3 44983 45393 46341 +3 44983 46341 45949 +3 44984 45950 46342 +3 44984 46342 45394 +3 44985 45121 45397 +3 44985 45397 45222 +3 44986 45223 45398 +3 44986 45398 45122 +3 44987 45425 45740 +3 44987 45740 45264 +3 44988 45265 45741 +3 44988 45741 45426 +3 44989 45106 45460 +3 44989 45460 45315 +3 44990 45316 45461 +3 44990 45461 45107 +3 44991 45222 45417 +3 44991 45417 45137 +3 44992 45137 45418 +3 44992 45418 45223 +3 44993 45431 45614 +3 44993 45614 45144 +3 44994 45145 45615 +3 44994 45615 45432 +3 44995 45405 45622 +3 44995 45622 45176 +3 44996 45177 45623 +3 44996 45623 45406 +3 44997 45284 45646 +3 44997 45646 45571 +3 44998 45572 45647 +3 44998 45647 45285 +3 44999 45415 46176 +3 44999 46176 45772 +3 45000 45773 46177 +3 45000 46177 45416 +3 45001 45317 45754 +3 45001 45754 45425 +3 45002 45426 45755 +3 45002 45755 45318 +3 45003 45656 45752 +3 45003 45752 45360 +3 45004 45361 45753 +3 45004 45753 45657 +3 45005 45370 45535 +3 45005 45535 45187 +3 45006 45188 45536 +3 45006 45536 45371 +3 45007 45377 45555 +3 45007 45555 45376 +3 45008 45827 46275 +3 45008 46275 45483 +3 45009 45484 46276 +3 45009 46276 45827 +3 45010 45313 45966 +3 45010 45966 45648 +3 45011 45649 45967 +3 45011 45967 45314 +3 45012 45818 46017 +3 45012 46017 45201 +3 45013 45202 46018 +3 45013 46018 45819 +3 45014 45209 45347 +3 45014 45347 45119 +3 45015 45120 45348 +3 45015 45348 45210 +3 45016 45479 45597 +3 45016 45597 45018 +3 45017 45019 45598 +3 45017 45598 45480 +3 45018 45597 45557 +3 45019 45558 45598 +3 45020 45702 45855 +3 45020 45855 45131 +3 45021 45132 45856 +3 45021 45856 45703 +3 45022 45216 45307 +3 45022 45307 45096 +3 45023 45097 45308 +3 45023 45308 45217 +3 45024 45786 45822 +3 45024 45822 45025 +3 45025 45822 45787 +3 45026 45027 45459 +3 45026 45459 45427 +3 45027 45428 45459 +3 45028 45054 45700 +3 45028 45700 45636 +3 45029 45637 45701 +3 45029 45701 45054 +3 45030 45642 45851 +3 45030 45851 45207 +3 45031 45208 45852 +3 45031 45852 45643 +3 45032 45694 45955 +3 45032 45955 45296 +3 45033 45297 45956 +3 45033 45956 45695 +3 45034 45682 46158 +3 45034 46158 45503 +3 45035 45504 46159 +3 45035 46159 45683 +3 45036 45678 46588 +3 45036 46588 45992 +3 45037 45993 46589 +3 45037 46589 45679 +3 45038 45039 46104 +3 45038 46104 46075 +3 45039 46076 46104 +3 45040 45160 45362 +3 45040 45362 45209 +3 45041 45210 45363 +3 45041 45363 45161 +3 45042 45718 46067 +3 45042 46067 45343 +3 45043 45344 46068 +3 45043 46068 45719 +3 45044 45282 45865 +3 45044 45865 45579 +3 45045 45580 45866 +3 45045 45866 45283 +3 45046 45395 45515 +3 45046 45515 45115 +3 45047 45116 45516 +3 45047 45516 45396 +3 45048 45529 45916 +3 45048 45916 45382 +3 45049 45383 45917 +3 45049 45917 45530 +3 45050 45986 46202 +3 45050 46202 45272 +3 45051 45273 46203 +3 45051 46203 45987 +3 45052 45844 46339 +3 45052 46339 45559 +3 45053 45560 46340 +3 45053 46340 45845 +3 45054 45701 45700 +3 45055 45547 46230 +3 45055 46230 46013 +3 45056 46014 46231 +3 45056 46231 45548 +3 45057 45565 45849 +3 45057 45849 45323 +3 45058 45324 45850 +3 45058 45850 45566 +3 45059 45399 46123 +3 45059 46123 45748 +3 45060 45749 46124 +3 45060 46124 45400 +3 45061 45549 45932 +3 45061 45932 45550 +3 45062 45309 45825 +3 45062 45825 45533 +3 45063 45534 45826 +3 45063 45826 45310 +3 45064 45168 45374 +3 45064 45374 45230 +3 45065 45231 45375 +3 45065 45375 45169 +3 45066 45230 45380 +3 45066 45380 45178 +3 45067 45179 45381 +3 45067 45381 45231 +3 45068 46144 46500 +3 45068 46500 45438 +3 45069 45439 46501 +3 45069 46501 46145 +3 45070 45806 46404 +3 45070 46404 45794 +3 45071 45795 46405 +3 45071 46405 45807 +3 45072 45174 45358 +3 45072 45358 45216 +3 45073 45217 45359 +3 45073 45359 45175 +3 45074 45990 46325 +3 45074 46325 45444 +3 45075 45445 46326 +3 45075 46326 45991 +3 45076 45451 45976 +3 45076 45976 45573 +3 45077 45574 45977 +3 45077 45977 45452 +3 45078 45674 45790 +3 45078 45790 45158 +3 45079 45159 45791 +3 45079 45791 45675 +3 45080 45292 45812 +3 45080 45812 45593 +3 45081 45594 45813 +3 45081 45813 45293 +3 45082 45238 45517 +3 45082 45517 45333 +3 45083 45334 45518 +3 45083 45518 45239 +3 45084 45164 45696 +3 45084 45696 45587 +3 45085 45588 45697 +3 45085 45697 45165 +3 45086 45794 46418 +3 45086 46418 45746 +3 45087 45747 46419 +3 45087 46419 45795 +3 45088 45303 46142 +3 45088 46142 45926 +3 45089 45927 46143 +3 45089 46143 45304 +3 45090 46021 46349 +3 45090 46349 45453 +3 45091 45454 46350 +3 45091 46350 46022 +3 45092 45333 45501 +3 45092 45501 45232 +3 45093 45233 45502 +3 45093 45502 45334 +3 45094 45738 46434 +3 45094 46434 45806 +3 45095 45807 46435 +3 45095 46435 45739 +3 45096 45307 45384 +3 45096 45384 45114 +3 45097 45114 45385 +3 45097 45385 45308 +3 45098 45376 45660 +3 45098 45660 45370 +3 45099 45371 45661 +3 45099 45661 45377 +3 45100 45226 45563 +3 45100 45563 45419 +3 45101 45420 45564 +3 45101 45564 45227 +3 45102 45429 46061 +3 45102 46061 45698 +3 45103 45699 46062 +3 45103 46062 45430 +3 45104 45820 46084 +3 45104 46084 45353 +3 45105 45354 46085 +3 45105 46085 45821 +3 45106 45162 45521 +3 45106 45521 45460 +3 45107 45461 45522 +3 45107 45522 45163 +3 45108 45527 46632 +3 45108 46632 46192 +3 45109 46193 46633 +3 45109 46633 45528 +3 45110 45389 46190 +3 45110 46190 46035 +3 45111 46036 46191 +3 45111 46191 45390 +3 45112 45591 46119 +3 45112 46119 45974 +3 45113 45975 46120 +3 45113 46120 45592 +3 45114 45384 45385 +3 45115 45515 45567 +3 45115 45567 45162 +3 45116 45163 45568 +3 45116 45568 45516 +3 45117 45201 45982 +3 45117 45982 45877 +3 45118 45878 45983 +3 45118 45983 45202 +3 45119 45347 45413 +3 45119 45413 45189 +3 45120 45190 45414 +3 45120 45414 45348 +3 45121 45315 45618 +3 45121 45618 45397 +3 45122 45398 45619 +3 45122 45619 45316 +3 45123 45730 46115 +3 45123 46115 45499 +3 45124 45500 46116 +3 45124 46116 45731 +3 45125 45573 46100 +3 45125 46100 45529 +3 45126 45530 46101 +3 45126 46101 45574 +3 45127 45256 45847 +3 45127 45847 45692 +3 45128 45693 45848 +3 45128 45848 45257 +3 45129 45462 46578 +3 45129 46578 46269 +3 45130 46270 46579 +3 45130 46579 45463 +3 45131 45855 45951 +3 45131 45951 45337 +3 45132 45338 45952 +3 45132 45952 45856 +3 45133 45628 46027 +3 45133 46027 45513 +3 45134 45514 46028 +3 45134 46028 45629 +3 45135 45920 46212 +3 45135 46212 45477 +3 45136 45478 46213 +3 45136 46213 45921 +3 45137 45417 45556 +3 45137 45556 45418 +3 45138 46004 46273 +3 45138 46273 45449 +3 45139 45450 46274 +3 45139 46274 46005 +3 45140 45509 45782 +3 45140 45782 45405 +3 45141 45406 45783 +3 45141 45783 45510 +3 45142 45823 46234 +3 45142 46234 45561 +3 45143 45562 46235 +3 45143 46235 45824 +3 45144 45614 45744 +3 45144 45744 45270 +3 45145 45271 45745 +3 45145 45745 45615 +3 45146 45349 46055 +3 45146 46055 45861 +3 45147 45862 46056 +3 45147 46056 45350 +3 45148 45364 45788 +3 45148 45788 45531 +3 45149 45532 45789 +3 45149 45789 45365 +3 45150 45401 46047 +3 45150 46047 45758 +3 45151 45759 46048 +3 45151 46048 45402 +3 45152 45569 46023 +3 45152 46023 45549 +3 45153 45550 46024 +3 45153 46024 45570 +3 45154 45939 46174 +3 45154 46174 45391 +3 45155 45392 46175 +3 45155 46175 45940 +3 45156 45435 46277 +3 45156 46277 46045 +3 45157 46046 46278 +3 45157 46278 45436 +3 45158 45790 45857 +3 45158 45857 45195 +3 45159 45196 45858 +3 45159 45858 45791 +3 45160 45161 45388 +3 45160 45388 45362 +3 45161 45363 45388 +3 45162 45567 45521 +3 45163 45522 45568 +3 45164 45195 45853 +3 45164 45853 45696 +3 45165 45697 45854 +3 45165 45854 45196 +3 45166 45523 46267 +3 45166 46267 45928 +3 45167 45929 46268 +3 45167 46268 45524 +3 45168 45205 45433 +3 45168 45433 45374 +3 45169 45375 45434 +3 45169 45434 45206 +3 45170 46333 46490 +3 45170 46490 45325 +3 45171 45326 46491 +3 45171 46491 46334 +3 45172 45457 46442 +3 45172 46442 46160 +3 45173 46161 46443 +3 45173 46443 45458 +3 45174 45212 45409 +3 45174 45409 45358 +3 45175 45359 45410 +3 45175 45410 45213 +3 45176 45622 45774 +3 45176 45774 45327 +3 45177 45328 45775 +3 45177 45775 45623 +3 45178 45380 45423 +3 45178 45423 45212 +3 45179 45213 45424 +3 45179 45424 45381 +3 45180 45577 45846 +3 45180 45846 45578 +3 45181 45411 45842 +3 45181 45842 45589 +3 45182 45590 45843 +3 45182 45843 45412 +3 45183 45632 46539 +3 45183 46539 46121 +3 45184 46122 46540 +3 45184 46540 45633 +3 45185 46113 46624 +3 45185 46624 45714 +3 45186 45715 46625 +3 45186 46625 46114 +3 45187 45535 45716 +3 45187 45716 45319 +3 45188 45320 45717 +3 45188 45717 45536 +3 45189 45413 45455 +3 45189 45455 45205 +3 45190 45206 45456 +3 45190 45456 45414 +3 45191 45899 46312 +3 45191 46312 45634 +3 45192 45635 46313 +3 45192 46313 45900 +3 45193 45368 45708 +3 45193 45708 45509 +3 45194 45510 45709 +3 45194 45709 45369 +3 45195 45857 45853 +3 45196 45854 45858 +3 45197 45475 46063 +3 45197 46063 45736 +3 45198 45737 46064 +3 45198 46064 45476 +3 45199 45553 45816 +3 45199 45816 45431 +3 45200 45432 45817 +3 45200 45817 45554 +3 45201 46017 45982 +3 45202 45983 46018 +3 45203 45616 46271 +3 45203 46271 45891 +3 45204 45892 46272 +3 45204 46272 45617 +3 45205 45455 45433 +3 45206 45434 45456 +3 45207 45851 45988 +3 45207 45988 45298 +3 45208 45299 45989 +3 45208 45989 45852 +3 45209 45362 45493 +3 45209 45493 45347 +3 45210 45348 45494 +3 45210 45494 45363 +3 45211 45655 45965 +3 45211 45965 45654 +3 45212 45423 45409 +3 45213 45410 45424 +3 45214 45650 45968 +3 45214 45968 45485 +3 45215 45486 45969 +3 45215 45969 45651 +3 45216 45358 45470 +3 45216 45470 45307 +3 45217 45308 45471 +3 45217 45471 45359 +3 45218 46327 46517 +3 45218 46517 45466 +3 45219 45467 46518 +3 45219 46518 46328 +3 45220 45472 45680 +3 45220 45680 45395 +3 45221 45396 45681 +3 45221 45681 45473 +3 45222 45397 45630 +3 45222 45630 45417 +3 45223 45418 45631 +3 45223 45631 45398 +3 45224 45419 45686 +3 45224 45686 45472 +3 45225 45473 45687 +3 45225 45687 45420 +3 45226 45335 45668 +3 45226 45668 45563 +3 45227 45564 45669 +3 45227 45669 45336 +3 45228 45936 46502 +3 45228 46502 45844 +3 45229 45845 46503 +3 45229 46503 45936 +3 45230 45374 45505 +3 45230 45505 45380 +3 45231 45381 45506 +3 45231 45506 45375 +3 45232 45501 45620 +3 45232 45620 45335 +3 45233 45336 45621 +3 45233 45621 45502 +3 45234 45533 45996 +3 45234 45996 45664 +3 45235 45665 45997 +3 45235 45997 45534 +3 45236 45994 46218 +3 45236 46218 45378 +3 45237 45379 46219 +3 45237 46219 45995 +3 45238 45366 45662 +3 45238 45662 45517 +3 45239 45518 45663 +3 45239 45663 45367 +3 45240 45466 46366 +3 45240 46366 46140 +3 45241 46141 46367 +3 45241 46367 45467 +3 45242 45579 46080 +3 45242 46080 45712 +3 45243 45713 46081 +3 45243 46081 45580 +3 45244 45828 46092 +3 45244 46092 45489 +3 45245 45490 46093 +3 45245 46093 45829 +3 45246 45891 46467 +3 45246 46467 45879 +3 45247 45880 46468 +3 45247 46468 45892 +3 45248 45756 46096 +3 45248 46096 45565 +3 45249 45566 46097 +3 45249 46097 45757 +3 45250 45949 46725 +3 45250 46725 46105 +3 45251 46106 46726 +3 45251 46726 45950 +3 45252 45772 46428 +3 45252 46428 45953 +3 45253 45954 46429 +3 45253 46429 45773 +3 45254 45879 46476 +3 45254 46476 45899 +3 45255 45900 46477 +3 45255 46477 45880 +3 45256 45339 45943 +3 45256 45943 45847 +3 45257 45848 45944 +3 45257 45944 45340 +3 45258 46102 46739 +3 45258 46739 45990 +3 45259 45991 46740 +3 45259 46740 46103 +3 45260 45589 45937 +3 45260 45937 45577 +3 45261 45578 45938 +3 45261 45938 45590 +3 45262 45519 46188 +3 45262 46188 45933 +3 45263 45934 46189 +3 45263 46189 45520 +3 45264 45740 46002 +3 45264 46002 45497 +3 45265 45498 46003 +3 45265 46003 45741 +3 45266 46206 46498 +3 45266 46498 45543 +3 45267 45544 46499 +3 45267 46499 46207 +3 45268 45698 46210 +3 45268 46210 45792 +3 45269 45793 46211 +3 45269 46211 45699 +3 45270 45744 45840 +3 45270 45840 45368 +3 45271 45369 45841 +3 45271 45841 45745 +3 45272 46202 46386 +3 45272 46386 45468 +3 45273 45469 46387 +3 45273 46387 46203 +3 45274 46127 46436 +3 45274 46436 45446 +3 45275 45447 46437 +3 45275 46437 46128 +3 45276 45583 46504 +3 45276 46504 46224 +3 45277 46225 46505 +3 45277 46505 45584 +3 45278 45810 46563 +3 45278 46563 46077 +3 45279 46078 46564 +3 45279 46564 45811 +3 45280 45922 46402 +3 45280 46402 45906 +3 45281 45907 46403 +3 45281 46403 45923 +3 45282 45648 46232 +3 45282 46232 45865 +3 45283 45866 46233 +3 45283 46233 45649 +3 45284 45664 46043 +3 45284 46043 45646 +3 45285 45647 46044 +3 45285 46044 45665 +3 45286 45792 46240 +3 45286 46240 45730 +3 45287 45731 46241 +3 45287 46241 45793 +3 45288 45688 46450 +3 45288 46450 46071 +3 45289 46072 46451 +3 45289 46451 45689 +3 45290 45531 45889 +3 45290 45889 45553 +3 45291 45554 45890 +3 45291 45890 45532 +3 45292 45464 45998 +3 45292 45998 45812 +3 45293 45813 45999 +3 45293 45999 45465 +3 45294 45654 46051 +3 45294 46051 45650 +3 45295 45651 46052 +3 45295 46052 45655 +3 45296 45955 46287 +3 45296 46287 45666 +3 45297 45667 46288 +3 45297 46288 45956 +3 45298 45988 46059 +3 45298 46059 45349 +3 45299 45350 46060 +3 45299 46060 45989 +3 45300 45906 46291 +3 45300 46291 45718 +3 45301 45719 46292 +3 45301 46292 45907 +3 45302 45780 46466 +3 45302 46466 45781 +3 45303 45468 46304 +3 45303 46304 46142 +3 45304 46143 46305 +3 45304 46305 45469 +3 45305 45748 46337 +3 45305 46337 45922 +3 45306 45923 46338 +3 45306 46338 45749 +3 45307 45470 45541 +3 45307 45541 45384 +3 45308 45385 45542 +3 45308 45542 45471 +3 45309 45507 46037 +3 45309 46037 45825 +3 45310 45826 46038 +3 45310 46038 45508 +3 45311 45723 46228 +3 45311 46228 45823 +3 45312 45824 46229 +3 45312 46229 45723 +3 45313 45539 46198 +3 45313 46198 45966 +3 45314 45967 46199 +3 45314 46199 45540 +3 45315 45460 45764 +3 45315 45764 45618 +3 45316 45619 45765 +3 45316 45765 45461 +3 45317 45593 46049 +3 45317 46049 45754 +3 45318 45755 46050 +3 45318 46050 45594 +3 45319 45716 45895 +3 45319 45895 45479 +3 45320 45480 45896 +3 45320 45896 45717 +3 45321 46088 46787 +3 45321 46787 46102 +3 45322 46103 46788 +3 45322 46788 46089 +3 45323 45849 46073 +3 45323 46073 45511 +3 45324 45512 46074 +3 45324 46074 45850 +3 45325 46490 46612 +3 45325 46612 45403 +3 45326 45404 46613 +3 45326 46613 46491 +3 45327 45774 45887 +3 45327 45887 45407 +3 45328 45408 45888 +3 45328 45888 45775 +3 45329 46098 46555 +3 45329 46555 45802 +3 45330 45803 46556 +3 45330 46556 46099 +3 45331 45638 46285 +3 45331 46285 46000 +3 45332 46001 46286 +3 45332 46286 45639 +3 45333 45517 45732 +3 45333 45732 45501 +3 45334 45502 45733 +3 45334 45733 45518 +3 45335 45620 45668 +3 45336 45669 45621 +3 45337 45951 45980 +3 45337 45980 45339 +3 45338 45340 45981 +3 45338 45981 45952 +3 45339 45980 45943 +3 45340 45944 45981 +3 45341 46105 46799 +3 45341 46799 46088 +3 45342 46089 46800 +3 45342 46800 46106 +3 45343 46067 46281 +3 45343 46281 45545 +3 45344 45546 46282 +3 45344 46282 46068 +3 45345 46156 46454 +3 45345 46454 45626 +3 45346 45627 46455 +3 45346 46455 46157 +3 45347 45493 45601 +3 45347 45601 45413 +3 45348 45414 45602 +3 45348 45602 45494 +3 45349 46059 46055 +3 45350 46056 46060 +3 45351 46200 46531 +3 45351 46531 45670 +3 45352 45671 46532 +3 45352 46532 46201 +3 45353 46084 46246 +3 45353 46246 45491 +3 45354 45492 46247 +3 45354 46247 46085 +3 45355 45704 46521 +3 45355 46521 46166 +3 45356 46167 46522 +3 45356 46522 45705 +3 45357 45953 46316 +3 45357 46316 45954 +3 45358 45409 45551 +3 45358 45551 45470 +3 45359 45471 45552 +3 45359 45552 45410 +3 45360 45752 46069 +3 45360 46069 45628 +3 45361 45629 46070 +3 45361 46070 45753 +3 45362 45388 45537 +3 45362 45537 45493 +3 45363 45494 45538 +3 45363 45538 45388 +3 45364 45487 45957 +3 45364 45957 45788 +3 45365 45789 45958 +3 45365 45958 45488 +3 45366 45427 45760 +3 45366 45760 45662 +3 45367 45663 45761 +3 45367 45761 45428 +3 45368 45840 45708 +3 45369 45709 45841 +3 45370 45660 45893 +3 45370 45893 45535 +3 45371 45536 45894 +3 45371 45894 45661 +3 45372 45914 46244 +3 45372 46244 45694 +3 45373 45695 46245 +3 45373 46245 45915 +3 45374 45433 45606 +3 45374 45606 45505 +3 45375 45506 45607 +3 45375 45607 45434 +3 45376 45555 45897 +3 45376 45897 45660 +3 45377 45661 45898 +3 45377 45898 45555 +3 45378 46218 46295 +3 45378 46295 45442 +3 45379 45443 46296 +3 45379 46296 46219 +3 45380 45505 45595 +3 45380 45595 45423 +3 45381 45424 45596 +3 45381 45596 45506 +3 45382 45916 46172 +3 45382 46172 45642 +3 45383 45643 46173 +3 45383 46173 45917 +3 45384 45541 45605 +3 45384 45605 45385 +3 45385 45605 45542 +3 45386 45736 46182 +3 45386 46182 45756 +3 45387 45757 46183 +3 45387 46183 45737 +3 45388 45538 45537 +3 45389 45624 46422 +3 45389 46422 46190 +3 45390 46191 46423 +3 45390 46423 45625 +3 45391 46174 46374 +3 45391 46374 45575 +3 45392 45576 46375 +3 45392 46375 46175 +3 45393 45768 46688 +3 45393 46688 46341 +3 45394 46342 46689 +3 45394 46689 45769 +3 45395 45680 45834 +3 45395 45834 45515 +3 45396 45516 45835 +3 45396 45835 45681 +3 45397 45618 45863 +3 45397 45863 45630 +3 45398 45631 45864 +3 45398 45864 45619 +3 45399 45720 46424 +3 45399 46424 46123 +3 45400 46124 46425 +3 45400 46425 45721 +3 45401 45581 46222 +3 45401 46222 46047 +3 45402 46048 46223 +3 45402 46223 45582 +3 45403 46612 46653 +3 45403 46653 45437 +3 45404 45437 46654 +3 45404 46654 46613 +3 45405 45782 46011 +3 45405 46011 45622 +3 45406 45623 46012 +3 45406 46012 45783 +3 45407 45887 45941 +3 45407 45941 45448 +3 45408 45448 45942 +3 45408 45942 45888 +3 45409 45423 45612 +3 45409 45612 45551 +3 45410 45552 45613 +3 45410 45613 45424 +3 45411 45587 46041 +3 45411 46041 45842 +3 45412 45843 46042 +3 45412 46042 45588 +3 45413 45601 45640 +3 45413 45640 45455 +3 45414 45456 45641 +3 45414 45641 45602 +3 45415 45778 46533 +3 45415 46533 46176 +3 45416 46177 46534 +3 45416 46534 45779 +3 45417 45630 45800 +3 45417 45800 45556 +3 45418 45556 45801 +3 45418 45801 45631 +3 45419 45563 45859 +3 45419 45859 45686 +3 45420 45687 45860 +3 45420 45860 45564 +3 45421 45838 46682 +3 45421 46682 46279 +3 45422 46280 46683 +3 45422 46683 45839 +3 45423 45595 45612 +3 45424 45613 45596 +3 45425 45754 46125 +3 45425 46125 45740 +3 45426 45741 46126 +3 45426 46126 45755 +3 45427 45459 45804 +3 45427 45804 45760 +3 45428 45761 45805 +3 45428 45805 45459 +3 45429 45672 46283 +3 45429 46283 46061 +3 45430 46062 46284 +3 45430 46284 45673 +3 45431 45816 46025 +3 45431 46025 45614 +3 45432 45615 46026 +3 45432 46026 45817 +3 45433 45455 45644 +3 45433 45644 45606 +3 45434 45607 45645 +3 45434 45645 45456 +3 45435 45832 46660 +3 45435 46660 46277 +3 45436 46278 46661 +3 45436 46661 45833 +3 45437 46653 46654 +3 45438 46500 46721 +3 45438 46721 45798 +3 45439 45799 46722 +3 45439 46722 46501 +3 45440 46252 46684 +3 45440 46684 45871 +3 45441 45872 46685 +3 45441 46685 46253 +3 45442 46295 46378 +3 45442 46378 45474 +3 45443 45474 46379 +3 45443 46379 46296 +3 45444 46325 46626 +3 45444 46626 45734 +3 45445 45735 46627 +3 45445 46627 46326 +3 45446 46436 46553 +3 45446 46553 45525 +3 45447 45526 46554 +3 45447 46554 46437 +3 45448 45941 45942 +3 45449 46273 46525 +3 45449 46525 45682 +3 45450 45683 46526 +3 45450 46526 46274 +3 45451 45758 46265 +3 45451 46265 45976 +3 45452 45977 46266 +3 45452 46266 45759 +3 45453 46349 46590 +3 45453 46590 45676 +3 45454 45677 46591 +3 45454 46591 46350 +3 45455 45640 45644 +3 45456 45645 45641 +3 45457 45658 46813 +3 45457 46813 46442 +3 45458 46443 46814 +3 45458 46814 45659 +3 45459 45805 45804 +3 45460 45521 45881 +3 45460 45881 45764 +3 45461 45765 45882 +3 45461 45882 45522 +3 45462 45710 46811 +3 45462 46811 46578 +3 45463 46579 46812 +3 45463 46812 45711 +3 45464 45571 46117 +3 45464 46117 45998 +3 45465 45999 46118 +3 45465 46118 45572 +3 45466 46517 46366 +3 45467 46367 46518 +3 45468 46386 46304 +3 45469 46305 46387 +3 45470 45551 45706 +3 45470 45706 45541 +3 45471 45542 45707 +3 45471 45707 45552 +3 45472 45686 45903 +3 45472 45903 45680 +3 45473 45681 45904 +3 45473 45904 45687 +3 45474 46378 46379 +3 45475 45692 46258 +3 45475 46258 46063 +3 45476 46064 46259 +3 45476 46259 45693 +3 45477 46212 46482 +3 45477 46482 45750 +3 45478 45751 46483 +3 45478 46483 46213 +3 45479 45895 46029 +3 45479 46029 45597 +3 45480 45598 46030 +3 45480 46030 45896 +3 45481 45867 46662 +3 45481 46662 46256 +3 45482 46257 46663 +3 45482 46663 45868 +3 45483 46275 46885 +3 45483 46885 46113 +3 45484 46114 46886 +3 45484 46886 46276 +3 45485 45968 46170 +3 45485 46170 45702 +3 45486 45703 46171 +3 45486 46171 45969 +3 45487 45557 46053 +3 45487 46053 45957 +3 45488 45958 46054 +3 45488 46054 45558 +3 45489 46092 46262 +3 45489 46262 45690 +3 45490 45691 46263 +3 45490 46263 46093 +3 45491 46246 46360 +3 45491 46360 45914 +3 45492 45915 46361 +3 45492 46361 46247 +3 45493 45537 45684 +3 45493 45684 45601 +3 45494 45602 45685 +3 45494 45685 45538 +3 45495 45992 46771 +3 45495 46771 46297 +3 45496 46297 46772 +3 45496 46772 45993 +3 45497 46002 46178 +3 45497 46178 45674 +3 45498 45675 46179 +3 45498 46179 46003 +3 45499 46115 46410 +3 45499 46410 45820 +3 45500 45821 46411 +3 45500 46411 46116 +3 45501 45732 45885 +3 45501 45885 45620 +3 45502 45621 45886 +3 45502 45886 45733 +3 45503 46158 46549 +3 45503 46549 45920 +3 45504 45921 46550 +3 45504 46550 46159 +3 45505 45606 45724 +3 45505 45724 45595 +3 45506 45596 45725 +3 45506 45725 45607 +3 45507 45636 46154 +3 45507 46154 46037 +3 45508 46038 46155 +3 45508 46155 45637 +3 45509 45708 46019 +3 45509 46019 45782 +3 45510 45783 46020 +3 45510 46020 45709 +3 45511 46073 46220 +3 45511 46220 45656 +3 45512 45657 46221 +3 45512 46221 46074 +3 45513 46027 46308 +3 45513 46308 45828 +3 45514 45829 46309 +3 45514 46309 46028 +3 45515 45834 45924 +3 45515 45924 45567 +3 45516 45568 45925 +3 45516 45925 45835 +3 45517 45662 45912 +3 45517 45912 45732 +3 45518 45733 45913 +3 45518 45913 45663 +3 45519 45726 46400 +3 45519 46400 46188 +3 45520 46189 46401 +3 45520 46401 45727 +3 45521 45567 45930 +3 45521 45930 45881 +3 45522 45882 45931 +3 45522 45931 45568 +3 45523 45873 46580 +3 45523 46580 46267 +3 45524 46268 46581 +3 45524 46581 45874 +3 45525 46553 46628 +3 45525 46628 45610 +3 45526 45611 46629 +3 45526 46629 46554 +3 45527 45946 46988 +3 45527 46988 46632 +3 45528 46633 46989 +3 45528 46989 45947 +3 45529 46100 46446 +3 45529 46446 45916 +3 45530 45917 46447 +3 45530 46447 46101 +3 45531 45788 46130 +3 45531 46130 45889 +3 45532 45890 46131 +3 45532 46131 45789 +3 45533 45825 46248 +3 45533 46248 45996 +3 45534 45997 46249 +3 45534 46249 45826 +3 45535 45893 46065 +3 45535 46065 45716 +3 45536 45717 46066 +3 45536 46066 45894 +3 45537 45538 45722 +3 45537 45722 45684 +3 45538 45685 45722 +3 45539 45652 46389 +3 45539 46389 46198 +3 45540 46199 46390 +3 45540 46390 45653 +3 45541 45706 45762 +3 45541 45762 45605 +3 45542 45605 45763 +3 45542 45763 45707 +3 45543 46498 46729 +3 45543 46729 46098 +3 45544 46099 46730 +3 45544 46730 46499 +3 45545 46281 46471 +3 45545 46471 45742 +3 45546 45743 46472 +3 45546 46472 46282 +3 45547 46071 46694 +3 45547 46694 46230 +3 45548 46231 46695 +3 45548 46695 46072 +3 45549 46023 46362 +3 45549 46362 45932 +3 45550 45932 46363 +3 45550 46363 46024 +3 45551 45612 45766 +3 45551 45766 45706 +3 45552 45707 45767 +3 45552 45767 45613 +3 45553 45889 46136 +3 45553 46136 45816 +3 45554 45817 46137 +3 45554 46137 45890 +3 45555 45898 46079 +3 45555 46079 45897 +3 45556 45800 45948 +3 45556 45948 45801 +3 45557 45597 46094 +3 45557 46094 46053 +3 45558 46054 46095 +3 45558 46095 45598 +3 45559 46339 46753 +3 45559 46753 46021 +3 45560 46022 46754 +3 45560 46754 46340 +3 45561 46234 46572 +3 45561 46572 45939 +3 45562 45940 46573 +3 45562 46573 46235 +3 45563 45668 45972 +3 45563 45972 45859 +3 45564 45860 45973 +3 45564 45973 45669 +3 45565 46096 46347 +3 45565 46347 45849 +3 45566 45850 46348 +3 45566 46348 46097 +3 45567 45924 45930 +3 45568 45931 45925 +3 45569 45933 46356 +3 45569 46356 46023 +3 45570 46024 46357 +3 45570 46357 45934 +3 45571 45646 46180 +3 45571 46180 46117 +3 45572 46118 46181 +3 45572 46181 45647 +3 45573 45976 46464 +3 45573 46464 46100 +3 45574 46101 46465 +3 45574 46465 45977 +3 45575 46374 46494 +3 45575 46494 45818 +3 45576 45819 46495 +3 45576 46495 46375 +3 45577 45937 46196 +3 45577 46196 45846 +3 45578 45846 46197 +3 45578 46197 45938 +3 45579 45865 46321 +3 45579 46321 46080 +3 45580 46081 46322 +3 45580 46322 45866 +3 45581 45712 46364 +3 45581 46364 46222 +3 45582 46223 46365 +3 45582 46365 45713 +3 45583 45830 46735 +3 45583 46735 46504 +3 45584 46505 46736 +3 45584 46736 45831 +3 45585 46293 46907 +3 45585 46907 46310 +3 45586 46311 46908 +3 45586 46908 46294 +3 45587 45696 46146 +3 45587 46146 46041 +3 45588 46042 46147 +3 45588 46147 45697 +3 45589 45842 46186 +3 45589 46186 45937 +3 45590 45938 46187 +3 45590 46187 45843 +3 45591 46000 46510 +3 45591 46510 46119 +3 45592 46120 46511 +3 45592 46511 46001 +3 45593 45812 46254 +3 45593 46254 46049 +3 45594 46050 46255 +3 45594 46255 45813 +3 45595 45724 45776 +3 45595 45776 45612 +3 45596 45613 45777 +3 45596 45777 45725 +3 45597 46029 46094 +3 45598 46095 46030 +3 45599 46121 46881 +3 45599 46881 46372 +3 45600 46373 46882 +3 45600 46882 46122 +3 45601 45684 45770 +3 45601 45770 45640 +3 45602 45641 45771 +3 45602 45771 45685 +3 45603 46256 46924 +3 45603 46924 46293 +3 45604 46294 46925 +3 45604 46925 46257 +3 45605 45762 45763 +3 45606 45644 45784 +3 45606 45784 45724 +3 45607 45725 45785 +3 45607 45785 45645 +3 45608 46310 46928 +3 45608 46928 46252 +3 45609 46253 46929 +3 45609 46929 46311 +3 45610 46628 46657 +3 45610 46657 45611 +3 45611 46657 46629 +3 45612 45776 45766 +3 45613 45767 45777 +3 45614 46025 46138 +3 45614 46138 45744 +3 45615 45745 46139 +3 45615 46139 46026 +3 45616 45926 46620 +3 45616 46620 46271 +3 45617 46272 46621 +3 45617 46621 45927 +3 45618 45764 46033 +3 45618 46033 45863 +3 45619 45864 46034 +3 45619 46034 45765 +3 45620 45885 45963 +3 45620 45963 45668 +3 45621 45669 45964 +3 45621 45964 45886 +3 45622 46011 46152 +3 45622 46152 45774 +3 45623 45775 46153 +3 45623 46153 46012 +3 45624 45814 46608 +3 45624 46608 46422 +3 45625 46423 46609 +3 45625 46609 45815 +3 45626 46454 46676 +3 45626 46676 45869 +3 45627 45870 46677 +3 45627 46677 46455 +3 45628 46069 46420 +3 45628 46420 46027 +3 45629 46028 46421 +3 45629 46421 46070 +3 45630 45863 46057 +3 45630 46057 45800 +3 45631 45801 46058 +3 45631 46058 45864 +3 45632 46015 46889 +3 45632 46889 46539 +3 45633 46540 46890 +3 45633 46890 46016 +3 45634 46312 46686 +3 45634 46686 46004 +3 45635 46005 46687 +3 45635 46687 46313 +3 45636 45700 46250 +3 45636 46250 46154 +3 45637 46155 46251 +3 45637 46251 45701 +3 45638 45928 46545 +3 45638 46545 46285 +3 45639 46286 46546 +3 45639 46546 45929 +3 45640 45770 45796 +3 45640 45796 45644 +3 45641 45645 45797 +3 45641 45797 45771 +3 45642 46172 46391 +3 45642 46391 45851 +3 45643 45852 46392 +3 45643 46392 46173 +3 45644 45796 45784 +3 45645 45785 45797 +3 45646 46043 46180 +3 45647 46181 46044 +3 45648 45966 46519 +3 45648 46519 46232 +3 45649 46233 46520 +3 45649 46520 45967 +3 45650 46051 46345 +3 45650 46345 45968 +3 45651 45969 46346 +3 45651 46346 46052 +3 45652 45728 46480 +3 45652 46480 46389 +3 45653 46390 46481 +3 45653 46481 45729 +3 45654 45965 46335 +3 45654 46335 46051 +3 45655 46052 46336 +3 45655 46336 45965 +3 45656 46220 46323 +3 45656 46323 45752 +3 45657 45753 46324 +3 45657 46324 46221 +3 45658 45808 46977 +3 45658 46977 46813 +3 45659 46814 46978 +3 45659 46978 45809 +3 45660 45897 46134 +3 45660 46134 45893 +3 45661 45894 46135 +3 45661 46135 45898 +3 45662 45760 46039 +3 45662 46039 45912 +3 45663 45913 46040 +3 45663 46040 45761 +3 45664 45996 46331 +3 45664 46331 46043 +3 45665 46044 46332 +3 45665 46332 45997 +3 45666 46287 46610 +3 45666 46610 45994 +3 45667 45995 46611 +3 45667 46611 46288 +3 45668 45963 45972 +3 45669 45973 45964 +3 45670 46531 46795 +3 45670 46795 45961 +3 45671 45962 46796 +3 45671 46796 46532 +3 45672 45877 46486 +3 45672 46486 46283 +3 45673 46284 46487 +3 45673 46487 45878 +3 45674 46178 46306 +3 45674 46306 45790 +3 45675 45791 46307 +3 45675 46307 46179 +3 45676 46590 46761 +3 45676 46761 45986 +3 45677 45987 46762 +3 45677 46762 46591 +3 45678 46192 47104 +3 45678 47104 46588 +3 45679 46589 47105 +3 45679 47105 46193 +3 45680 45903 46082 +3 45680 46082 45834 +3 45681 45835 46083 +3 45681 46083 45904 +3 45682 46525 46672 +3 45682 46672 46158 +3 45683 46159 46673 +3 45683 46673 46526 +3 45684 45722 45836 +3 45684 45836 45770 +3 45685 45771 45837 +3 45685 45837 45722 +3 45686 45859 46086 +3 45686 46086 45903 +3 45687 45904 46087 +3 45687 46087 45860 +3 45688 46045 46749 +3 45688 46749 46450 +3 45689 46451 46750 +3 45689 46750 46046 +3 45690 46262 46393 +3 45690 46393 45786 +3 45691 45787 46394 +3 45691 46394 46263 +3 45692 45847 46444 +3 45692 46444 46258 +3 45693 46259 46445 +3 45693 46445 45848 +3 45694 46244 46496 +3 45694 46496 45955 +3 45695 45956 46497 +3 45695 46497 46245 +3 45696 45853 46289 +3 45696 46289 46146 +3 45697 46147 46290 +3 45697 46290 45854 +3 45698 46061 46547 +3 45698 46547 46210 +3 45699 46211 46548 +3 45699 46548 46062 +3 45700 45701 46264 +3 45700 46264 46250 +3 45701 46251 46264 +3 45702 46170 46343 +3 45702 46343 45855 +3 45703 45856 46344 +3 45703 46344 46171 +3 45704 46013 46821 +3 45704 46821 46521 +3 45705 46522 46822 +3 45705 46822 46014 +3 45706 45766 45875 +3 45706 45875 45762 +3 45707 45763 45876 +3 45707 45876 45767 +3 45708 45840 46148 +3 45708 46148 46019 +3 45709 46020 46149 +3 45709 46149 45841 +3 45710 45959 47006 +3 45710 47006 46811 +3 45711 46812 47007 +3 45711 47007 45960 +3 45712 46080 46462 +3 45712 46462 46364 +3 45713 46365 46463 +3 45713 46463 46081 +3 45714 46624 47056 +3 45714 47056 46144 +3 45715 46145 47057 +3 45715 47057 46625 +3 45716 46065 46226 +3 45716 46226 45895 +3 45717 45896 46227 +3 45717 46227 46066 +3 45718 46291 46644 +3 45718 46644 46067 +3 45719 46068 46645 +3 45719 46645 46292 +3 45720 45974 46666 +3 45720 46666 46424 +3 45721 46425 46667 +3 45721 46667 45975 +3 45722 45837 45836 +3 45723 46229 46567 +3 45723 46567 46228 +3 45724 45784 45883 +3 45724 45883 45776 +3 45725 45777 45884 +3 45725 45884 45785 +3 45726 45861 46541 +3 45726 46541 46400 +3 45727 46401 46542 +3 45727 46542 45862 +3 45728 45729 46512 +3 45728 46512 46480 +3 45729 46481 46512 +3 45730 46240 46618 +3 45730 46618 46115 +3 45731 46116 46619 +3 45731 46619 46241 +3 45732 45912 46090 +3 45732 46090 45885 +3 45733 45886 46091 +3 45733 46091 45913 +3 45734 46626 46844 +3 45734 46844 45959 +3 45735 45960 46845 +3 45735 46845 46627 +3 45736 46063 46492 +3 45736 46492 46182 +3 45737 46183 46493 +3 45737 46493 46064 +3 45738 46166 46860 +3 45738 46860 46434 +3 45739 46435 46861 +3 45739 46861 46167 +3 45740 46125 46382 +3 45740 46382 46002 +3 45741 46003 46383 +3 45741 46383 46126 +3 45742 46471 46568 +3 45742 46568 45814 +3 45743 45815 46569 +3 45743 46569 46472 +3 45744 46138 46238 +3 45744 46238 45840 +3 45745 45841 46239 +3 45745 46239 46139 +3 45746 46418 46819 +3 45746 46819 46156 +3 45747 46157 46820 +3 45747 46820 46419 +3 45748 46123 46713 +3 45748 46713 46337 +3 45749 46338 46714 +3 45749 46714 46124 +3 45750 46482 46848 +3 45750 46848 46127 +3 45751 46128 46849 +3 45751 46849 46483 +3 45752 46323 46406 +3 45752 46406 46069 +3 45753 46070 46407 +3 45753 46407 46324 +3 45754 46049 46395 +3 45754 46395 46125 +3 45755 46126 46396 +3 45755 46396 46050 +3 45756 46182 46508 +3 45756 46508 46096 +3 45757 46097 46509 +3 45757 46509 46183 +3 45758 46047 46537 +3 45758 46537 46265 +3 45759 46266 46538 +3 45759 46538 46048 +3 45760 45804 46107 +3 45760 46107 46039 +3 45761 46040 46108 +3 45761 46108 45805 +3 45762 45875 45905 +3 45762 45905 45763 +3 45763 45905 45876 +3 45764 45881 46132 +3 45764 46132 46033 +3 45765 46034 46133 +3 45765 46133 45882 +3 45766 45776 45908 +3 45766 45908 45875 +3 45767 45876 45909 +3 45767 45909 45777 +3 45768 46077 46982 +3 45768 46982 46688 +3 45769 46689 46983 +3 45769 46983 46078 +3 45770 45836 45901 +3 45770 45901 45796 +3 45771 45797 45902 +3 45771 45902 45837 +3 45772 46176 46832 +3 45772 46832 46428 +3 45773 46429 46833 +3 45773 46833 46177 +3 45774 46152 46260 +3 45774 46260 45887 +3 45775 45888 46261 +3 45775 46261 46153 +3 45776 45883 45908 +3 45777 45909 45884 +3 45778 46035 46793 +3 45778 46793 46533 +3 45779 46534 46794 +3 45779 46794 46036 +3 45780 46372 47042 +3 45780 47042 46466 +3 45781 46466 47043 +3 45781 47043 46373 +3 45782 46019 46236 +3 45782 46236 46011 +3 45783 46012 46237 +3 45783 46237 46020 +3 45784 45796 45918 +3 45784 45918 45883 +3 45785 45884 45919 +3 45785 45919 45797 +3 45786 46393 46460 +3 45786 46460 45822 +3 45787 45822 46461 +3 45787 46461 46394 +3 45788 45957 46298 +3 45788 46298 46130 +3 45789 46131 46299 +3 45789 46299 45958 +3 45790 46306 46398 +3 45790 46398 45857 +3 45791 45858 46399 +3 45791 46399 46307 +3 45792 46210 46727 +3 45792 46727 46240 +3 45793 46241 46728 +3 45793 46728 46211 +3 45794 46404 47002 +3 45794 47002 46418 +3 45795 46419 47003 +3 45795 47003 46405 +3 45796 45901 45918 +3 45797 45919 45902 +3 45798 46721 47016 +3 45798 47016 46111 +3 45799 46112 47017 +3 45799 47017 46722 +3 45800 46057 46162 +3 45800 46162 45948 +3 45801 45948 46163 +3 45801 46163 46058 +3 45802 46555 46946 +3 45802 46946 46200 +3 45803 46201 46947 +3 45803 46947 46556 +3 45804 45805 46129 +3 45804 46129 46107 +3 45805 46108 46129 +3 45806 46434 47014 +3 45806 47014 46404 +3 45807 46405 47015 +3 45807 47015 46435 +3 45808 45910 47078 +3 45808 47078 46977 +3 45809 46978 47079 +3 45809 47079 45911 +3 45810 46279 47048 +3 45810 47048 46563 +3 45811 46564 47049 +3 45811 47049 46280 +3 45812 45998 46440 +3 45812 46440 46254 +3 45813 46255 46441 +3 45813 46441 45999 +3 45814 46568 46608 +3 45815 46609 46569 +3 45816 46136 46317 +3 45816 46317 46025 +3 45817 46026 46318 +3 45817 46318 46137 +3 45818 46494 46678 +3 45818 46678 46017 +3 45819 46018 46679 +3 45819 46679 46495 +3 45820 46410 46668 +3 45820 46668 46084 +3 45821 46085 46669 +3 45821 46669 46411 +3 45822 46460 46461 +3 45823 46228 46649 +3 45823 46649 46234 +3 45824 46235 46650 +3 45824 46650 46229 +3 45825 46037 46452 +3 45825 46452 46248 +3 45826 46249 46453 +3 45826 46453 46038 +3 45827 46276 46974 +3 45827 46974 46275 +3 45828 46308 46576 +3 45828 46576 46092 +3 45829 46093 46577 +3 45829 46577 46309 +3 45830 46031 46920 +3 45830 46920 46735 +3 45831 46736 46921 +3 45831 46921 46032 +3 45832 46008 46968 +3 45832 46968 46660 +3 45833 46661 46969 +3 45833 46969 46009 +3 45834 46082 46164 +3 45834 46164 45924 +3 45835 45925 46165 +3 45835 46165 46083 +3 45836 45837 45935 +3 45836 45935 45901 +3 45837 45902 45935 +3 45838 46160 47018 +3 45838 47018 46682 +3 45839 46683 47019 +3 45839 47019 46161 +3 45840 46238 46148 +3 45841 46149 46239 +3 45842 46041 46384 +3 45842 46384 46186 +3 45843 46187 46385 +3 45843 46385 46042 +3 45844 46502 47000 +3 45844 47000 46339 +3 45845 46340 47001 +3 45845 47001 46503 +3 45846 46196 46397 +3 45846 46397 46197 +3 45847 45943 46543 +3 45847 46543 46444 +3 45848 46445 46544 +3 45848 46544 45944 +3 45849 46347 46570 +3 45849 46570 46073 +3 45850 46074 46571 +3 45850 46571 46348 +3 45851 46391 46535 +3 45851 46535 45988 +3 45852 45989 46536 +3 45852 46536 46392 +3 45853 45857 46412 +3 45853 46412 46289 +3 45854 46290 46413 +3 45854 46413 45858 +3 45855 46343 46458 +3 45855 46458 45951 +3 45856 45952 46459 +3 45856 46459 46344 +3 45857 46398 46412 +3 45858 46413 46399 +3 45859 45972 46184 +3 45859 46184 46086 +3 45860 46087 46185 +3 45860 46185 45973 +3 45861 46055 46634 +3 45861 46634 46541 +3 45862 46542 46635 +3 45862 46635 46056 +3 45863 46033 46208 +3 45863 46208 46057 +3 45864 46058 46209 +3 45864 46209 46034 +3 45865 46232 46700 +3 45865 46700 46321 +3 45866 46322 46701 +3 45866 46701 46233 +3 45867 46140 46954 +3 45867 46954 46662 +3 45868 46663 46955 +3 45868 46955 46141 +3 45869 46676 46852 +3 45869 46852 46031 +3 45870 46032 46853 +3 45870 46853 46677 +3 45871 46684 47032 +3 45871 47032 46206 +3 45872 46207 47033 +3 45872 47033 46685 +3 45873 46006 46823 +3 45873 46823 46580 +3 45874 46581 46824 +3 45874 46824 46007 +3 45875 45908 45970 +3 45875 45970 45905 +3 45876 45905 45971 +3 45876 45971 45909 +3 45877 45982 46622 +3 45877 46622 46486 +3 45878 46487 46623 +3 45878 46623 45983 +3 45879 46467 46975 +3 45879 46975 46476 +3 45880 46477 46976 +3 45880 46976 46468 +3 45881 45930 46194 +3 45881 46194 46132 +3 45882 46133 46195 +3 45882 46195 45931 +3 45883 45918 45978 +3 45883 45978 45908 +3 45884 45909 45979 +3 45884 45979 45919 +3 45885 46090 46168 +3 45885 46168 45963 +3 45886 45964 46169 +3 45886 46169 46091 +3 45887 46260 46319 +3 45887 46319 45941 +3 45888 45942 46320 +3 45888 46320 46261 +3 45889 46130 46376 +3 45889 46376 46136 +3 45890 46137 46377 +3 45890 46377 46131 +3 45891 46271 46879 +3 45891 46879 46467 +3 45892 46468 46880 +3 45892 46880 46272 +3 45893 46134 46300 +3 45893 46300 46065 +3 45894 46066 46301 +3 45894 46301 46135 +3 45895 46226 46358 +3 45895 46358 46029 +3 45896 46030 46359 +3 45896 46359 46227 +3 45897 46079 46314 +3 45897 46314 46134 +3 45898 46135 46315 +3 45898 46315 46079 +3 45899 46476 46905 +3 45899 46905 46312 +3 45900 46313 46906 +3 45900 46906 46477 +3 45901 45935 45984 +3 45901 45984 45918 +3 45902 45919 45985 +3 45902 45985 45935 +3 45903 46086 46242 +3 45903 46242 46082 +3 45904 46083 46243 +3 45904 46243 46087 +3 45905 45970 45971 +3 45906 46402 46809 +3 45906 46809 46291 +3 45907 46292 46810 +3 45907 46810 46403 +3 45908 45978 45970 +3 45909 45971 45979 +3 45910 45945 47140 +3 45910 47140 47078 +3 45911 47079 47141 +3 45911 47141 45945 +3 45912 46039 46216 +3 45912 46216 46090 +3 45913 46091 46217 +3 45913 46217 46040 +3 45914 46360 46708 +3 45914 46708 46244 +3 45915 46245 46709 +3 45915 46709 46361 +3 45916 46446 46723 +3 45916 46723 46172 +3 45917 46173 46724 +3 45917 46724 46447 +3 45918 45984 45978 +3 45919 45979 45985 +3 45920 46549 46872 +3 45920 46872 46212 +3 45921 46213 46873 +3 45921 46873 46550 +3 45922 46337 46834 +3 45922 46834 46402 +3 45923 46403 46835 +3 45923 46835 46338 +3 45924 46164 46204 +3 45924 46204 45930 +3 45925 45931 46205 +3 45925 46205 46165 +3 45926 46142 46864 +3 45926 46864 46620 +3 45927 46621 46865 +3 45927 46865 46143 +3 45928 46267 46909 +3 45928 46909 46545 +3 45929 46546 46910 +3 45929 46910 46268 +3 45930 46204 46194 +3 45931 46195 46205 +3 45932 46362 46646 +3 45932 46646 46363 +3 45933 46188 46651 +3 45933 46651 46356 +3 45934 46357 46652 +3 45934 46652 46189 +3 45935 45985 45984 +3 45936 46503 46900 +3 45936 46900 46502 +3 45937 46186 46484 +3 45937 46484 46196 +3 45938 46197 46485 +3 45938 46485 46187 +3 45939 46572 46836 +3 45939 46836 46174 +3 45940 46175 46837 +3 45940 46837 46573 +3 45941 46319 46353 +3 45941 46353 45942 +3 45942 46353 46320 +3 45943 45980 46606 +3 45943 46606 46543 +3 45944 46544 46607 +3 45944 46607 45981 +3 45945 47141 47140 +3 45946 46269 47211 +3 45946 47211 46988 +3 45947 46989 47212 +3 45947 47212 46270 +3 45948 46162 46163 +3 45949 46341 47170 +3 45949 47170 46725 +3 45950 46726 47171 +3 45950 47171 46342 +3 45951 46458 46604 +3 45951 46604 45980 +3 45952 45981 46605 +3 45952 46605 46459 +3 45953 46428 46830 +3 45953 46830 46316 +3 45954 46316 46831 +3 45954 46831 46429 +3 45955 46496 46874 +3 45955 46874 46287 +3 45956 46288 46875 +3 45956 46875 46497 +3 45957 46053 46430 +3 45957 46430 46298 +3 45958 46299 46431 +3 45958 46431 46054 +3 45959 46844 47006 +3 45960 47007 46845 +3 45961 46795 47172 +3 45961 47172 46333 +3 45962 46334 47173 +3 45962 47173 46796 +3 45963 46168 46214 +3 45963 46214 45972 +3 45964 45973 46215 +3 45964 46215 46169 +3 45965 46336 46596 +3 45965 46596 46335 +3 45966 46198 46775 +3 45966 46775 46519 +3 45967 46520 46776 +3 45967 46776 46199 +3 45968 46345 46594 +3 45968 46594 46170 +3 45969 46171 46595 +3 45969 46595 46346 +3 45970 45978 46010 +3 45970 46010 45971 +3 45971 46010 45979 +3 45972 46214 46184 +3 45973 46185 46215 +3 45974 46119 46840 +3 45974 46840 46666 +3 45975 46667 46841 +3 45975 46841 46120 +3 45976 46265 46783 +3 45976 46783 46464 +3 45977 46465 46784 +3 45977 46784 46266 +3 45978 45984 46010 +3 45979 46010 45985 +3 45980 46604 46606 +3 45981 46607 46605 +3 45982 46017 46680 +3 45982 46680 46622 +3 45983 46623 46681 +3 45983 46681 46018 +3 45984 45985 46010 +3 45986 46761 46996 +3 45986 46996 46202 +3 45987 46203 46997 +3 45987 46997 46762 +3 45988 46535 46630 +3 45988 46630 46059 +3 45989 46060 46631 +3 45989 46631 46536 +3 45990 46739 47142 +3 45990 47142 46325 +3 45991 46326 47143 +3 45991 47143 46740 +3 45992 46588 47339 +3 45992 47339 46771 +3 45993 46772 47340 +3 45993 47340 46589 +3 45994 46610 46842 +3 45994 46842 46218 +3 45995 46219 46843 +3 45995 46843 46611 +3 45996 46248 46602 +3 45996 46602 46331 +3 45997 46332 46603 +3 45997 46603 46249 +3 45998 46117 46561 +3 45998 46561 46440 +3 45999 46441 46562 +3 45999 46562 46118 +3 46000 46285 46838 +3 46000 46838 46510 +3 46001 46511 46839 +3 46001 46839 46286 +3 46002 46382 46616 +3 46002 46616 46178 +3 46003 46179 46617 +3 46003 46617 46383 +3 46004 46686 46998 +3 46004 46998 46273 +3 46005 46274 46999 +3 46005 46999 46687 +3 46006 46075 46916 +3 46006 46916 46823 +3 46007 46824 46917 +3 46007 46917 46076 +3 46008 46109 47092 +3 46008 47092 46968 +3 46009 46969 47093 +3 46009 47093 46110 +3 46011 46236 46432 +3 46011 46432 46152 +3 46012 46153 46433 +3 46012 46433 46237 +3 46013 46230 47066 +3 46013 47066 46821 +3 46014 46822 47067 +3 46014 47067 46231 +3 46015 46224 47122 +3 46015 47122 46889 +3 46016 46890 47123 +3 46016 47123 46225 +3 46017 46678 46680 +3 46018 46681 46679 +3 46019 46148 46408 +3 46019 46408 46236 +3 46020 46237 46409 +3 46020 46409 46149 +3 46021 46753 47102 +3 46021 47102 46349 +3 46022 46350 47103 +3 46022 47103 46754 +3 46023 46356 46717 +3 46023 46717 46362 +3 46024 46363 46718 +3 46024 46718 46357 +3 46025 46317 46474 +3 46025 46474 46138 +3 46026 46139 46475 +3 46026 46475 46318 +3 46027 46420 46731 +3 46027 46731 46308 +3 46028 46309 46732 +3 46028 46732 46421 +3 46029 46358 46448 +3 46029 46448 46094 +3 46030 46095 46449 +3 46030 46449 46359 +3 46031 46852 46920 +3 46032 46921 46853 +3 46033 46132 46329 +3 46033 46329 46208 +3 46034 46209 46330 +3 46034 46330 46133 +3 46035 46190 46984 +3 46035 46984 46793 +3 46036 46794 46985 +3 46036 46985 46191 +3 46037 46154 46597 +3 46037 46597 46452 +3 46038 46453 46598 +3 46038 46598 46155 +3 46039 46107 46302 +3 46039 46302 46216 +3 46040 46217 46303 +3 46040 46303 46108 +3 46041 46146 46527 +3 46041 46527 46384 +3 46042 46385 46528 +3 46042 46528 46147 +3 46043 46331 46523 +3 46043 46523 46180 +3 46044 46181 46524 +3 46044 46524 46332 +3 46045 46277 47024 +3 46045 47024 46749 +3 46046 46750 47025 +3 46046 47025 46278 +3 46047 46222 46751 +3 46047 46751 46537 +3 46048 46538 46752 +3 46048 46752 46223 +3 46049 46254 46638 +3 46049 46638 46395 +3 46050 46396 46639 +3 46050 46639 46255 +3 46051 46335 46670 +3 46051 46670 46345 +3 46052 46346 46671 +3 46052 46671 46336 +3 46053 46094 46478 +3 46053 46478 46430 +3 46054 46431 46479 +3 46054 46479 46095 +3 46055 46059 46655 +3 46055 46655 46634 +3 46056 46635 46656 +3 46056 46656 46060 +3 46057 46208 46354 +3 46057 46354 46162 +3 46058 46163 46355 +3 46058 46355 46209 +3 46059 46630 46655 +3 46060 46656 46631 +3 46061 46283 46828 +3 46061 46828 46547 +3 46062 46548 46829 +3 46062 46829 46284 +3 46063 46258 46737 +3 46063 46737 46492 +3 46064 46493 46738 +3 46064 46738 46259 +3 46065 46300 46513 +3 46065 46513 46226 +3 46066 46227 46514 +3 46066 46514 46301 +3 46067 46644 46901 +3 46067 46901 46281 +3 46068 46282 46902 +3 46068 46902 46645 +3 46069 46406 46781 +3 46069 46781 46420 +3 46070 46421 46782 +3 46070 46782 46407 +3 46071 46450 47090 +3 46071 47090 46694 +3 46072 46695 47091 +3 46072 47091 46451 +3 46073 46570 46733 +3 46073 46733 46220 +3 46074 46221 46734 +3 46074 46734 46571 +3 46075 46104 46986 +3 46075 46986 46916 +3 46076 46917 46987 +3 46076 46987 46104 +3 46077 46563 47215 +3 46077 47215 46982 +3 46078 46983 47216 +3 46078 47216 46564 +3 46079 46315 46473 +3 46079 46473 46314 +3 46080 46321 46747 +3 46080 46747 46462 +3 46081 46463 46748 +3 46081 46748 46322 +3 46082 46242 46368 +3 46082 46368 46164 +3 46083 46165 46369 +3 46083 46369 46243 +3 46084 46668 46868 +3 46084 46868 46246 +3 46085 46247 46869 +3 46085 46869 46669 +3 46086 46184 46370 +3 46086 46370 46242 +3 46087 46243 46371 +3 46087 46371 46185 +3 46088 46799 47363 +3 46088 47363 46787 +3 46089 46788 47364 +3 46089 47364 46800 +3 46090 46216 46351 +3 46090 46351 46168 +3 46091 46169 46352 +3 46091 46352 46217 +3 46092 46576 46769 +3 46092 46769 46262 +3 46093 46263 46770 +3 46093 46770 46577 +3 46094 46448 46478 +3 46095 46479 46449 +3 46096 46508 46785 +3 46096 46785 46347 +3 46097 46348 46786 +3 46097 46786 46509 +3 46098 46729 47203 +3 46098 47203 46555 +3 46099 46556 47204 +3 46099 47204 46730 +3 46100 46464 46887 +3 46100 46887 46446 +3 46101 46447 46888 +3 46101 46888 46465 +3 46102 46787 47391 +3 46102 47391 46739 +3 46103 46740 47392 +3 46103 47392 46788 +3 46104 46987 46986 +3 46105 46725 47399 +3 46105 47399 46799 +3 46106 46800 47400 +3 46106 47400 46726 +3 46107 46129 46380 +3 46107 46380 46302 +3 46108 46303 46381 +3 46108 46381 46129 +3 46109 46150 47165 +3 46109 47165 47092 +3 46110 47093 47166 +3 46110 47166 46151 +3 46111 47016 47239 +3 46111 47239 46327 +3 46112 46328 47240 +3 46112 47240 47017 +3 46113 46885 47357 +3 46113 47357 46624 +3 46114 46625 47358 +3 46114 47358 46886 +3 46115 46618 46922 +3 46115 46922 46410 +3 46116 46411 46923 +3 46116 46923 46619 +3 46117 46180 46647 +3 46117 46647 46561 +3 46118 46562 46648 +3 46118 46648 46181 +3 46119 46510 46964 +3 46119 46964 46840 +3 46120 46841 46965 +3 46120 46965 46511 +3 46121 46539 47282 +3 46121 47282 46881 +3 46122 46882 47283 +3 46122 47283 46540 +3 46123 46424 47022 +3 46123 47022 46713 +3 46124 46714 47023 +3 46124 47023 46425 +3 46125 46395 46696 +3 46125 46696 46382 +3 46126 46383 46697 +3 46126 46697 46396 +3 46127 46848 47161 +3 46127 47161 46436 +3 46128 46437 47162 +3 46128 47162 46849 +3 46129 46381 46380 +3 46130 46298 46582 +3 46130 46582 46376 +3 46131 46377 46583 +3 46131 46583 46299 +3 46132 46194 46416 +3 46132 46416 46329 +3 46133 46330 46417 +3 46133 46417 46195 +3 46134 46314 46529 +3 46134 46529 46300 +3 46135 46301 46530 +3 46135 46530 46315 +3 46136 46376 46586 +3 46136 46586 46317 +3 46137 46318 46587 +3 46137 46587 46377 +3 46138 46474 46574 +3 46138 46574 46238 +3 46139 46239 46575 +3 46139 46575 46475 +3 46140 46366 47190 +3 46140 47190 46954 +3 46141 46955 47191 +3 46141 47191 46367 +3 46142 46304 47046 +3 46142 47046 46864 +3 46143 46865 47047 +3 46143 47047 46305 +3 46144 47056 47365 +3 46144 47365 46500 +3 46145 46501 47366 +3 46145 47366 47057 +3 46146 46289 46704 +3 46146 46704 46527 +3 46147 46528 46705 +3 46147 46705 46290 +3 46148 46238 46515 +3 46148 46515 46408 +3 46149 46409 46516 +3 46149 46516 46239 +3 46150 46151 47198 +3 46150 47198 47165 +3 46151 47166 47198 +3 46152 46432 46559 +3 46152 46559 46260 +3 46153 46261 46560 +3 46153 46560 46433 +3 46154 46250 46690 +3 46154 46690 46597 +3 46155 46598 46691 +3 46155 46691 46251 +3 46156 46819 47159 +3 46156 47159 46454 +3 46157 46455 47160 +3 46157 47160 46820 +3 46158 46672 47074 +3 46158 47074 46549 +3 46159 46550 47075 +3 46159 47075 46673 +3 46160 46442 47263 +3 46160 47263 47018 +3 46161 47019 47264 +3 46161 47264 46443 +3 46162 46354 46388 +3 46162 46388 46163 +3 46163 46388 46355 +3 46164 46368 46438 +3 46164 46438 46204 +3 46165 46205 46439 +3 46165 46439 46369 +3 46166 46521 47219 +3 46166 47219 46860 +3 46167 46861 47220 +3 46167 47220 46522 +3 46168 46351 46414 +3 46168 46414 46214 +3 46169 46215 46415 +3 46169 46415 46352 +3 46170 46594 46777 +3 46170 46777 46343 +3 46171 46344 46778 +3 46171 46778 46595 +3 46172 46723 46956 +3 46172 46956 46391 +3 46173 46392 46957 +3 46173 46957 46724 +3 46174 46836 47054 +3 46174 47054 46374 +3 46175 46375 47055 +3 46175 47055 46837 +3 46176 46533 47182 +3 46176 47182 46832 +3 46177 46833 47183 +3 46177 47183 46534 +3 46178 46616 46765 +3 46178 46765 46306 +3 46179 46307 46766 +3 46179 46766 46617 +3 46180 46523 46647 +3 46181 46648 46524 +3 46182 46492 46870 +3 46182 46870 46508 +3 46183 46509 46871 +3 46183 46871 46493 +3 46184 46214 46426 +3 46184 46426 46370 +3 46185 46371 46427 +3 46185 46427 46215 +3 46186 46384 46702 +3 46186 46702 46484 +3 46187 46485 46703 +3 46187 46703 46385 +3 46188 46400 46876 +3 46188 46876 46651 +3 46189 46652 46877 +3 46189 46877 46401 +3 46190 46422 47106 +3 46190 47106 46984 +3 46191 46985 47107 +3 46191 47107 46423 +3 46192 46632 47500 +3 46192 47500 47104 +3 46193 47105 47501 +3 46193 47501 46633 +3 46194 46204 46456 +3 46194 46456 46416 +3 46195 46417 46457 +3 46195 46457 46205 +3 46196 46484 46706 +3 46196 46706 46397 +3 46197 46397 46707 +3 46197 46707 46485 +3 46198 46389 46966 +3 46198 46966 46775 +3 46199 46776 46967 +3 46199 46967 46390 +3 46200 46946 47245 +3 46200 47245 46531 +3 46201 46532 47246 +3 46201 47246 46947 +3 46202 46996 47178 +3 46202 47178 46386 +3 46203 46387 47179 +3 46203 47179 46997 +3 46204 46438 46456 +3 46205 46457 46439 +3 46206 47032 47313 +3 46206 47313 46498 +3 46207 46499 47314 +3 46207 47314 47033 +3 46208 46329 46488 +3 46208 46488 46354 +3 46209 46355 46489 +3 46209 46489 46330 +3 46210 46547 47082 +3 46210 47082 46727 +3 46211 46728 47083 +3 46211 47083 46548 +3 46212 46872 47120 +3 46212 47120 46482 +3 46213 46483 47121 +3 46213 47121 46873 +3 46214 46414 46426 +3 46215 46427 46415 +3 46216 46302 46469 +3 46216 46469 46351 +3 46217 46352 46470 +3 46217 46470 46303 +3 46218 46842 47036 +3 46218 47036 46295 +3 46219 46296 47037 +3 46219 47037 46843 +3 46220 46733 46862 +3 46220 46862 46323 +3 46221 46324 46863 +3 46221 46863 46734 +3 46222 46364 46914 +3 46222 46914 46751 +3 46223 46752 46915 +3 46223 46915 46365 +3 46224 46504 47292 +3 46224 47292 47122 +3 46225 47123 47293 +3 46225 47293 46505 +3 46226 46513 46664 +3 46226 46664 46358 +3 46227 46359 46665 +3 46227 46665 46514 +3 46228 46567 47008 +3 46228 47008 46649 +3 46229 46650 47009 +3 46229 47009 46567 +3 46230 46694 47217 +3 46230 47217 47066 +3 46231 47067 47218 +3 46231 47218 46695 +3 46232 46519 47020 +3 46232 47020 46700 +3 46233 46701 47021 +3 46233 47021 46520 +3 46234 46649 47004 +3 46234 47004 46572 +3 46235 46573 47005 +3 46235 47005 46650 +3 46236 46408 46636 +3 46236 46636 46432 +3 46237 46433 46637 +3 46237 46637 46409 +3 46238 46574 46515 +3 46239 46516 46575 +3 46240 46727 47110 +3 46240 47110 46618 +3 46241 46619 47111 +3 46241 47111 46728 +3 46242 46370 46506 +3 46242 46506 46368 +3 46243 46369 46507 +3 46243 46507 46371 +3 46244 46708 46980 +3 46244 46980 46496 +3 46245 46497 46981 +3 46245 46981 46709 +3 46246 46868 47012 +3 46246 47012 46360 +3 46247 46361 47013 +3 46247 47013 46869 +3 46248 46452 46803 +3 46248 46803 46602 +3 46249 46603 46804 +3 46249 46804 46453 +3 46250 46264 46743 +3 46250 46743 46690 +3 46251 46691 46744 +3 46251 46744 46264 +3 46252 46928 47341 +3 46252 47341 46684 +3 46253 46685 47342 +3 46253 47342 46929 +3 46254 46440 46815 +3 46254 46815 46638 +3 46255 46639 46816 +3 46255 46816 46441 +3 46256 46662 47311 +3 46256 47311 46924 +3 46257 46925 47312 +3 46257 47312 46663 +3 46258 46444 46930 +3 46258 46930 46737 +3 46259 46738 46931 +3 46259 46931 46445 +3 46260 46559 46658 +3 46260 46658 46319 +3 46261 46320 46659 +3 46261 46659 46560 +3 46262 46769 46903 +3 46262 46903 46393 +3 46263 46394 46904 +3 46263 46904 46770 +3 46264 46744 46743 +3 46265 46537 47052 +3 46265 47052 46783 +3 46266 46784 47053 +3 46266 47053 46538 +3 46267 46580 47207 +3 46267 47207 46909 +3 46268 46910 47208 +3 46268 47208 46581 +3 46269 46578 47476 +3 46269 47476 47211 +3 46270 47212 47477 +3 46270 47477 46579 +3 46271 46620 47209 +3 46271 47209 46879 +3 46272 46880 47210 +3 46272 47210 46621 +3 46273 46998 47233 +3 46273 47233 46525 +3 46274 46526 47234 +3 46274 47234 46999 +3 46275 46974 47520 +3 46275 47520 46885 +3 46276 46886 47521 +3 46276 47521 46974 +3 46277 46660 47351 +3 46277 47351 47024 +3 46278 47025 47352 +3 46278 47352 46661 +3 46279 46682 47409 +3 46279 47409 47048 +3 46280 47049 47410 +3 46280 47410 46683 +3 46281 46901 47094 +3 46281 47094 46471 +3 46282 46472 47095 +3 46282 47095 46902 +3 46283 46486 47038 +3 46283 47038 46828 +3 46284 46829 47039 +3 46284 47039 46487 +3 46285 46545 47108 +3 46285 47108 46838 +3 46286 46839 47109 +3 46286 47109 46546 +3 46287 46874 47175 +3 46287 47175 46610 +3 46288 46611 47176 +3 46288 47176 46875 +3 46289 46412 46825 +3 46289 46825 46704 +3 46290 46705 46826 +3 46290 46826 46413 +3 46291 46809 47163 +3 46291 47163 46644 +3 46292 46645 47164 +3 46292 47164 46810 +3 46293 46924 47484 +3 46293 47484 46907 +3 46294 46908 47485 +3 46294 47485 46925 +3 46295 47036 47130 +3 46295 47130 46378 +3 46296 46379 47131 +3 46296 47131 47037 +3 46297 46771 47428 +3 46297 47428 46772 +3 46298 46430 46719 +3 46298 46719 46582 +3 46299 46583 46720 +3 46299 46720 46431 +3 46300 46529 46745 +3 46300 46745 46513 +3 46301 46514 46746 +3 46301 46746 46530 +3 46302 46380 46557 +3 46302 46557 46469 +3 46303 46470 46558 +3 46303 46558 46381 +3 46304 46386 47136 +3 46304 47136 47046 +3 46305 47047 47137 +3 46305 47137 46387 +3 46306 46765 46850 +3 46306 46850 46398 +3 46307 46399 46851 +3 46307 46851 46766 +3 46308 46731 46992 +3 46308 46992 46576 +3 46309 46577 46993 +3 46309 46993 46732 +3 46310 46907 47492 +3 46310 47492 46928 +3 46311 46929 47493 +3 46311 47493 46908 +3 46312 46905 47267 +3 46312 47267 46686 +3 46313 46687 47268 +3 46313 47268 46906 +3 46314 46473 46698 +3 46314 46698 46529 +3 46315 46530 46699 +3 46315 46699 46473 +3 46316 46830 47177 +3 46316 47177 46831 +3 46317 46586 46741 +3 46317 46741 46474 +3 46318 46475 46742 +3 46318 46742 46587 +3 46319 46658 46710 +3 46319 46710 46353 +3 46320 46353 46711 +3 46320 46711 46659 +3 46321 46700 47118 +3 46321 47118 46747 +3 46322 46748 47119 +3 46322 47119 46701 +3 46323 46862 46932 +3 46323 46932 46406 +3 46324 46407 46933 +3 46324 46933 46863 +3 46325 47142 47418 +3 46325 47418 46626 +3 46326 46627 47419 +3 46326 47419 47143 +3 46327 47239 47405 +3 46327 47405 46517 +3 46328 46518 47406 +3 46328 47406 47240 +3 46329 46416 46592 +3 46329 46592 46488 +3 46330 46489 46593 +3 46330 46593 46417 +3 46331 46602 46807 +3 46331 46807 46523 +3 46332 46524 46808 +3 46332 46808 46603 +3 46333 47172 47457 +3 46333 47457 46490 +3 46334 46491 47458 +3 46334 47458 47173 +3 46335 46596 46944 +3 46335 46944 46670 +3 46336 46671 46945 +3 46336 46945 46596 +3 46337 46713 47213 +3 46337 47213 46834 +3 46338 46835 47214 +3 46338 47214 46714 +3 46339 47000 47385 +3 46339 47385 46753 +3 46340 46754 47386 +3 46340 47386 47001 +3 46341 46688 47486 +3 46341 47486 47170 +3 46342 47171 47487 +3 46342 47487 46689 +3 46343 46777 46898 +3 46343 46898 46458 +3 46344 46459 46899 +3 46344 46899 46778 +3 46345 46670 46934 +3 46345 46934 46594 +3 46346 46595 46935 +3 46346 46935 46671 +3 46347 46785 47010 +3 46347 47010 46570 +3 46348 46571 47011 +3 46348 47011 46786 +3 46349 47102 47333 +3 46349 47333 46590 +3 46350 46591 47334 +3 46350 47334 47103 +3 46351 46469 46565 +3 46351 46565 46414 +3 46352 46415 46566 +3 46352 46566 46470 +3 46353 46710 46711 +3 46354 46488 46551 +3 46354 46551 46388 +3 46355 46388 46552 +3 46355 46552 46489 +3 46356 46651 47044 +3 46356 47044 46717 +3 46357 46718 47045 +3 46357 47045 46652 +3 46358 46664 46763 +3 46358 46763 46448 +3 46359 46449 46764 +3 46359 46764 46665 +3 46360 47012 47100 +3 46360 47100 46708 +3 46361 46709 47101 +3 46361 47101 47013 +3 46362 46717 47034 +3 46362 47034 46646 +3 46363 46646 47035 +3 46363 47035 46718 +3 46364 46462 47030 +3 46364 47030 46914 +3 46365 46915 47031 +3 46365 47031 46463 +3 46366 46517 47335 +3 46366 47335 47190 +3 46367 47191 47336 +3 46367 47336 46518 +3 46368 46506 46600 +3 46368 46600 46438 +3 46369 46439 46601 +3 46369 46601 46507 +3 46370 46426 46584 +3 46370 46584 46506 +3 46371 46507 46585 +3 46371 46585 46427 +3 46372 46881 47510 +3 46372 47510 47042 +3 46373 47043 47511 +3 46373 47511 46882 +3 46374 47054 47192 +3 46374 47192 46494 +3 46375 46495 47193 +3 46375 47193 47055 +3 46376 46582 46789 +3 46376 46789 46586 +3 46377 46587 46790 +3 46377 46790 46583 +3 46378 47130 47167 +3 46378 47167 46379 +3 46379 47167 47131 +3 46380 46381 46599 +3 46380 46599 46557 +3 46381 46558 46599 +3 46382 46696 46938 +3 46382 46938 46616 +3 46383 46617 46939 +3 46383 46939 46697 +3 46384 46527 46858 +3 46384 46858 46702 +3 46385 46703 46859 +3 46385 46859 46528 +3 46386 47178 47136 +3 46387 47137 47179 +3 46388 46551 46552 +3 46389 46480 47084 +3 46389 47084 46966 +3 46390 46967 47085 +3 46390 47085 46481 +3 46391 46956 47132 +3 46391 47132 46535 +3 46392 46536 47133 +3 46392 47133 46957 +3 46393 46903 46994 +3 46393 46994 46460 +3 46394 46461 46995 +3 46394 46995 46904 +3 46395 46638 46948 +3 46395 46948 46696 +3 46396 46697 46949 +3 46396 46949 46639 +3 46397 46706 46878 +3 46397 46878 46707 +3 46398 46850 46894 +3 46398 46894 46412 +3 46399 46413 46895 +3 46399 46895 46851 +3 46400 46541 47040 +3 46400 47040 46876 +3 46401 46877 47041 +3 46401 47041 46542 +3 46402 46834 47319 +3 46402 47319 46809 +3 46403 46810 47320 +3 46403 47320 46835 +3 46404 47014 47482 +3 46404 47482 47002 +3 46405 47003 47483 +3 46405 47483 47015 +3 46406 46932 46781 +3 46407 46782 46933 +3 46408 46515 46773 +3 46408 46773 46636 +3 46409 46637 46774 +3 46409 46774 46516 +3 46410 46922 47188 +3 46410 47188 46668 +3 46411 46669 47189 +3 46411 47189 46923 +3 46412 46894 46825 +3 46413 46826 46895 +3 46414 46565 46614 +3 46414 46614 46426 +3 46415 46427 46615 +3 46415 46615 46566 +3 46416 46456 46640 +3 46416 46640 46592 +3 46417 46593 46641 +3 46417 46641 46457 +3 46418 47002 47395 +3 46418 47395 46819 +3 46419 46820 47396 +3 46419 47396 47003 +3 46420 46781 47086 +3 46420 47086 46731 +3 46421 46732 47087 +3 46421 47087 46782 +3 46422 46608 47276 +3 46422 47276 47106 +3 46423 47107 47277 +3 46423 47277 46609 +3 46424 46666 47269 +3 46424 47269 47022 +3 46425 47023 47270 +3 46425 47270 46667 +3 46426 46614 46584 +3 46427 46585 46615 +3 46428 46832 47243 +3 46428 47243 46830 +3 46429 46831 47244 +3 46429 47244 46833 +3 46430 46478 46801 +3 46430 46801 46719 +3 46431 46720 46802 +3 46431 46802 46479 +3 46432 46636 46797 +3 46432 46797 46559 +3 46433 46560 46798 +3 46433 46798 46637 +3 46434 46860 47424 +3 46434 47424 47014 +3 46435 47015 47425 +3 46435 47425 46861 +3 46436 47161 47367 +3 46436 47367 46553 +3 46437 46554 47368 +3 46437 47368 47162 +3 46438 46600 46642 +3 46438 46642 46456 +3 46439 46457 46643 +3 46439 46643 46601 +3 46440 46561 46950 +3 46440 46950 46815 +3 46441 46816 46951 +3 46441 46951 46562 +3 46442 46813 47615 +3 46442 47615 47263 +3 46443 47264 47616 +3 46443 47616 46814 +3 46444 46543 47070 +3 46444 47070 46930 +3 46445 46931 47071 +3 46445 47071 46544 +3 46446 46887 47194 +3 46446 47194 46723 +3 46447 46724 47195 +3 46447 47195 46888 +3 46448 46763 46805 +3 46448 46805 46478 +3 46449 46479 46806 +3 46449 46806 46764 +3 46450 46749 47389 +3 46450 47389 47090 +3 46451 47091 47390 +3 46451 47390 46750 +3 46452 46597 46972 +3 46452 46972 46803 +3 46453 46804 46973 +3 46453 46973 46598 +3 46454 47159 47371 +3 46454 47371 46676 +3 46455 46677 47372 +3 46455 47372 47160 +3 46456 46642 46640 +3 46457 46641 46643 +3 46458 46898 47062 +3 46458 47062 46604 +3 46459 46605 47063 +3 46459 47063 46899 +3 46460 46994 47027 +3 46460 47027 46461 +3 46461 47027 46995 +3 46462 46747 47096 +3 46462 47096 47030 +3 46463 47031 47097 +3 46463 47097 46748 +3 46464 46783 47201 +3 46464 47201 46887 +3 46465 46888 47202 +3 46465 47202 46784 +3 46466 47042 47417 +3 46466 47417 47043 +3 46467 46879 47355 +3 46467 47355 46975 +3 46468 46976 47356 +3 46468 47356 46880 +3 46469 46557 46692 +3 46469 46692 46565 +3 46470 46566 46693 +3 46470 46693 46558 +3 46471 47094 47223 +3 46471 47223 46568 +3 46472 46569 47224 +3 46472 47224 47095 +3 46473 46699 46827 +3 46473 46827 46698 +3 46474 46741 46856 +3 46474 46856 46574 +3 46475 46575 46857 +3 46475 46857 46742 +3 46476 46975 47387 +3 46476 47387 46905 +3 46477 46906 47388 +3 46477 47388 46976 +3 46478 46805 46801 +3 46479 46802 46806 +3 46480 46512 47155 +3 46480 47155 47084 +3 46481 47085 47156 +3 46481 47156 46512 +3 46482 47120 47461 +3 46482 47461 46848 +3 46483 46849 47462 +3 46483 47462 47121 +3 46484 46702 46940 +3 46484 46940 46706 +3 46485 46707 46941 +3 46485 46941 46703 +3 46486 46622 47186 +3 46486 47186 47038 +3 46487 47039 47187 +3 46487 47187 46623 +3 46488 46592 46674 +3 46488 46674 46551 +3 46489 46552 46675 +3 46489 46675 46593 +3 46490 47457 47568 +3 46490 47568 46612 +3 46491 46613 47569 +3 46491 47569 47458 +3 46492 46737 47134 +3 46492 47134 46870 +3 46493 46871 47135 +3 46493 47135 46738 +3 46494 47192 47261 +3 46494 47261 46678 +3 46495 46679 47262 +3 46495 47262 47193 +3 46496 46980 47329 +3 46496 47329 46874 +3 46497 46875 47330 +3 46497 47330 46981 +3 46498 47313 47542 +3 46498 47542 46729 +3 46499 46730 47543 +3 46499 47543 47314 +3 46500 47365 47596 +3 46500 47596 46721 +3 46501 46722 47597 +3 46501 47597 47366 +3 46502 46900 47377 +3 46502 47377 47000 +3 46503 47001 47378 +3 46503 47378 46900 +3 46504 46735 47504 +3 46504 47504 47292 +3 46505 47293 47505 +3 46505 47505 46736 +3 46506 46584 46715 +3 46506 46715 46600 +3 46507 46601 46716 +3 46507 46716 46585 +3 46508 46870 47146 +3 46508 47146 46785 +3 46509 46786 47147 +3 46509 47147 46871 +3 46510 46838 47301 +3 46510 47301 46964 +3 46511 46965 47302 +3 46511 47302 46839 +3 46512 47156 47155 +3 46513 46745 46911 +3 46513 46911 46664 +3 46514 46665 46912 +3 46514 46912 46746 +3 46515 46574 46846 +3 46515 46846 46773 +3 46516 46774 46847 +3 46516 46847 46575 +3 46517 47405 47335 +3 46518 47336 47406 +3 46519 46775 47253 +3 46519 47253 47020 +3 46520 47021 47254 +3 46520 47254 46776 +3 46521 46821 47508 +3 46521 47508 47219 +3 46522 47220 47509 +3 46522 47509 46822 +3 46523 46807 46962 +3 46523 46962 46647 +3 46524 46648 46963 +3 46524 46963 46808 +3 46525 47233 47397 +3 46525 47397 46672 +3 46526 46673 47398 +3 46526 47398 47234 +3 46527 46704 47050 +3 46527 47050 46858 +3 46528 46859 47051 +3 46528 47051 46705 +3 46529 46698 46926 +3 46529 46926 46745 +3 46530 46746 46927 +3 46530 46927 46699 +3 46531 47245 47498 +3 46531 47498 46795 +3 46532 46796 47499 +3 46532 47499 47246 +3 46533 46793 47420 +3 46533 47420 47182 +3 46534 47183 47421 +3 46534 47421 46794 +3 46535 47132 47229 +3 46535 47229 46630 +3 46536 46631 47230 +3 46536 47230 47133 +3 46537 46751 47249 +3 46537 47249 47052 +3 46538 47053 47250 +3 46538 47250 46752 +3 46539 46889 47604 +3 46539 47604 47282 +3 46540 47283 47605 +3 46540 47605 46890 +3 46541 46634 47151 +3 46541 47151 47040 +3 46542 47041 47152 +3 46542 47152 46635 +3 46543 46606 47149 +3 46543 47149 47070 +3 46544 47071 47150 +3 46544 47150 46607 +3 46545 46909 47463 +3 46545 47463 47108 +3 46546 47109 47464 +3 46546 47464 46910 +3 46547 46828 47347 +3 46547 47347 47082 +3 46548 47083 47348 +3 46548 47348 46829 +3 46549 47074 47393 +3 46549 47393 46872 +3 46550 46873 47394 +3 46550 47394 47075 +3 46551 46674 46712 +3 46551 46712 46552 +3 46552 46712 46675 +3 46553 47367 47471 +3 46553 47471 46628 +3 46554 46629 47472 +3 46554 47472 47368 +3 46555 47203 47562 +3 46555 47562 46946 +3 46556 46947 47563 +3 46556 47563 47204 +3 46557 46599 46755 +3 46557 46755 46692 +3 46558 46693 46756 +3 46558 46756 46599 +3 46559 46797 46918 +3 46559 46918 46658 +3 46560 46659 46919 +3 46560 46919 46798 +3 46561 46647 47060 +3 46561 47060 46950 +3 46562 46951 47061 +3 46562 47061 46648 +3 46563 47048 47665 +3 46563 47665 47215 +3 46564 47216 47666 +3 46564 47666 47049 +3 46565 46692 46757 +3 46565 46757 46614 +3 46566 46615 46758 +3 46566 46758 46693 +3 46567 47009 47294 +3 46567 47294 47008 +3 46568 47223 47279 +3 46568 47279 46608 +3 46569 46609 47280 +3 46569 47280 47224 +3 46570 47010 47184 +3 46570 47184 46733 +3 46571 46734 47185 +3 46571 47185 47011 +3 46572 47004 47295 +3 46572 47295 46836 +3 46573 46837 47296 +3 46573 47296 47005 +3 46574 46856 46846 +3 46575 46847 46857 +3 46576 46992 47199 +3 46576 47199 46769 +3 46577 46770 47200 +3 46577 47200 46993 +3 46578 46811 47699 +3 46578 47699 47476 +3 46579 47477 47700 +3 46579 47700 46812 +3 46580 46823 47433 +3 46580 47433 47207 +3 46581 47208 47434 +3 46581 47434 46824 +3 46582 46719 46958 +3 46582 46958 46789 +3 46583 46790 46959 +3 46583 46959 46720 +3 46584 46614 46767 +3 46584 46767 46715 +3 46585 46716 46768 +3 46585 46768 46615 +3 46586 46789 46960 +3 46586 46960 46741 +3 46587 46742 46961 +3 46587 46961 46790 +3 46588 47104 47829 +3 46588 47829 47339 +3 46589 47340 47830 +3 46589 47830 47105 +3 46590 47333 47522 +3 46590 47522 46761 +3 46591 46762 47523 +3 46591 47523 47334 +3 46592 46640 46759 +3 46592 46759 46674 +3 46593 46675 46760 +3 46593 46760 46641 +3 46594 46934 47138 +3 46594 47138 46777 +3 46595 46778 47139 +3 46595 47139 46935 +3 46596 46945 47148 +3 46596 47148 46944 +3 46597 46690 47076 +3 46597 47076 46972 +3 46598 46973 47077 +3 46598 47077 46691 +3 46599 46756 46755 +3 46600 46715 46779 +3 46600 46779 46642 +3 46601 46643 46780 +3 46601 46780 46716 +3 46602 46803 47058 +3 46602 47058 46807 +3 46603 46808 47059 +3 46603 47059 46804 +3 46604 47062 47168 +3 46604 47168 46606 +3 46605 46607 47169 +3 46605 47169 47063 +3 46606 47168 47149 +3 46607 47150 47169 +3 46608 47279 47276 +3 46609 47277 47280 +3 46610 47175 47401 +3 46610 47401 46842 +3 46611 46843 47402 +3 46611 47402 47176 +3 46612 47568 47637 +3 46612 47637 46653 +3 46613 46654 47638 +3 46613 47638 47569 +3 46614 46757 46767 +3 46615 46768 46758 +3 46616 46938 47124 +3 46616 47124 46765 +3 46617 46766 47125 +3 46617 47125 46939 +3 46618 47110 47403 +3 46618 47403 46922 +3 46619 46923 47404 +3 46619 47404 47111 +3 46620 46864 47449 +3 46620 47449 47209 +3 46621 47210 47450 +3 46621 47450 46865 +3 46622 46680 47259 +3 46622 47259 47186 +3 46623 47187 47260 +3 46623 47260 46681 +3 46624 47357 47774 +3 46624 47774 47056 +3 46625 47057 47775 +3 46625 47775 47358 +3 46626 47418 47641 +3 46626 47641 46844 +3 46627 46845 47642 +3 46627 47642 47419 +3 46628 47471 47524 +3 46628 47524 46657 +3 46629 46657 47525 +3 46629 47525 47472 +3 46630 47229 47290 +3 46630 47290 46655 +3 46631 46656 47291 +3 46631 47291 47230 +3 46632 46988 47832 +3 46632 47832 47500 +3 46633 47501 47833 +3 46633 47833 46989 +3 46634 46655 47288 +3 46634 47288 47151 +3 46635 47152 47289 +3 46635 47289 46656 +3 46636 46773 46970 +3 46636 46970 46797 +3 46637 46798 46971 +3 46637 46971 46774 +3 46638 46815 47153 +3 46638 47153 46948 +3 46639 46949 47154 +3 46639 47154 46816 +3 46640 46642 46791 +3 46640 46791 46759 +3 46641 46760 46792 +3 46641 46792 46643 +3 46642 46779 46791 +3 46643 46792 46780 +3 46644 47163 47413 +3 46644 47413 46901 +3 46645 46902 47414 +3 46645 47414 47164 +3 46646 47034 47278 +3 46646 47278 47035 +3 46647 46962 47060 +3 46648 47061 46963 +3 46649 47008 47345 +3 46649 47345 47004 +3 46650 47005 47346 +3 46650 47346 47009 +3 46651 46876 47274 +3 46651 47274 47044 +3 46652 47045 47275 +3 46652 47275 46877 +3 46653 47637 47677 +3 46653 47677 46654 +3 46654 47677 47638 +3 46655 47290 47288 +3 46656 47289 47291 +3 46657 47524 47525 +3 46658 46918 46990 +3 46658 46990 46710 +3 46659 46711 46991 +3 46659 46991 46919 +3 46660 46968 47667 +3 46660 47667 47351 +3 46661 47352 47668 +3 46661 47668 46969 +3 46662 46954 47627 +3 46662 47627 47311 +3 46663 47312 47628 +3 46663 47628 46955 +3 46664 46911 47028 +3 46664 47028 46763 +3 46665 46764 47029 +3 46665 47029 46912 +3 46666 46840 47453 +3 46666 47453 47269 +3 46667 47270 47454 +3 46667 47454 46841 +3 46668 47188 47373 +3 46668 47373 46868 +3 46669 46869 47374 +3 46669 47374 47189 +3 46670 46944 47227 +3 46670 47227 46934 +3 46671 46935 47228 +3 46671 47228 46945 +3 46672 47397 47516 +3 46672 47516 47074 +3 46673 47075 47517 +3 46673 47517 47398 +3 46674 46759 46817 +3 46674 46817 46712 +3 46675 46712 46818 +3 46675 46818 46760 +3 46676 47371 47548 +3 46676 47548 46852 +3 46677 46853 47549 +3 46677 47549 47372 +3 46678 47261 47297 +3 46678 47297 46680 +3 46679 46681 47298 +3 46679 47298 47262 +3 46680 47297 47259 +3 46681 47260 47298 +3 46682 47018 47713 +3 46682 47713 47409 +3 46683 47410 47714 +3 46683 47714 47019 +3 46684 47341 47705 +3 46684 47705 47032 +3 46685 47033 47706 +3 46685 47706 47342 +3 46686 47267 47554 +3 46686 47554 46998 +3 46687 46999 47555 +3 46687 47555 47268 +3 46688 46982 47787 +3 46688 47787 47486 +3 46689 47487 47788 +3 46689 47788 46983 +3 46690 46743 47157 +3 46690 47157 47076 +3 46691 47077 47158 +3 46691 47158 46744 +3 46692 46755 46854 +3 46692 46854 46757 +3 46693 46758 46855 +3 46693 46855 46756 +3 46694 47090 47589 +3 46694 47589 47217 +3 46695 47218 47590 +3 46695 47590 47091 +3 46696 46948 47196 +3 46696 47196 46938 +3 46697 46939 47197 +3 46697 47197 46949 +3 46698 46827 47064 +3 46698 47064 46926 +3 46699 46927 47065 +3 46699 47065 46827 +3 46700 47020 47407 +3 46700 47407 47118 +3 46701 47119 47408 +3 46701 47408 47021 +3 46702 46858 47126 +3 46702 47126 46940 +3 46703 46941 47127 +3 46703 47127 46859 +3 46704 46825 47180 +3 46704 47180 47050 +3 46705 47051 47181 +3 46705 47181 46826 +3 46706 46940 47144 +3 46706 47144 46878 +3 46707 46878 47145 +3 46707 47145 46941 +3 46708 47100 47369 +3 46708 47369 46980 +3 46709 46981 47370 +3 46709 47370 47101 +3 46710 46990 47026 +3 46710 47026 46711 +3 46711 47026 46991 +3 46712 46817 46818 +3 46713 47022 47502 +3 46713 47502 47213 +3 46714 47214 47503 +3 46714 47503 47023 +3 46715 46767 46866 +3 46715 46866 46779 +3 46716 46780 46867 +3 46716 46867 46768 +3 46717 47044 47343 +3 46717 47343 47034 +3 46718 47035 47344 +3 46718 47344 47045 +3 46719 46801 47068 +3 46719 47068 46958 +3 46720 46959 47069 +3 46720 47069 46802 +3 46721 47596 47780 +3 46721 47780 47016 +3 46722 47017 47781 +3 46722 47781 47597 +3 46723 47194 47415 +3 46723 47415 46956 +3 46724 46957 47416 +3 46724 47416 47195 +3 46725 47170 47815 +3 46725 47815 47399 +3 46726 47400 47816 +3 46726 47816 47171 +3 46727 47082 47512 +3 46727 47512 47110 +3 46728 47111 47513 +3 46728 47513 47083 +3 46729 47542 47697 +3 46729 47697 47203 +3 46730 47204 47698 +3 46730 47698 47543 +3 46731 47086 47327 +3 46731 47327 46992 +3 46732 46993 47328 +3 46732 47328 47087 +3 46733 47184 47305 +3 46733 47305 46862 +3 46734 46863 47306 +3 46734 47306 47185 +3 46735 46920 47686 +3 46735 47686 47504 +3 46736 47505 47687 +3 46736 47687 46921 +3 46737 46930 47331 +3 46737 47331 47134 +3 46738 47135 47332 +3 46738 47332 46931 +3 46739 47391 47785 +3 46739 47785 47142 +3 46740 47143 47786 +3 46740 47786 47392 +3 46741 46960 47080 +3 46741 47080 46856 +3 46742 46857 47081 +3 46742 47081 46961 +3 46743 46744 47174 +3 46743 47174 47157 +3 46744 47158 47174 +3 46745 46926 47112 +3 46745 47112 46911 +3 46746 46912 47113 +3 46746 47113 46927 +3 46747 47118 47451 +3 46747 47451 47096 +3 46748 47097 47452 +3 46748 47452 47119 +3 46749 47024 47625 +3 46749 47625 47389 +3 46750 47390 47626 +3 46750 47626 47025 +3 46751 46914 47411 +3 46751 47411 47249 +3 46752 47250 47412 +3 46752 47412 46915 +3 46753 47385 47716 +3 46753 47716 47102 +3 46754 47103 47717 +3 46754 47717 47386 +3 46755 46756 46891 +3 46755 46891 46854 +3 46756 46855 46891 +3 46757 46854 46892 +3 46757 46892 46767 +3 46758 46768 46893 +3 46758 46893 46855 +3 46759 46791 46883 +3 46759 46883 46817 +3 46760 46818 46884 +3 46760 46884 46792 +3 46761 47522 47647 +3 46761 47647 46996 +3 46762 46997 47648 +3 46762 47648 47523 +3 46763 47028 47088 +3 46763 47088 46805 +3 46764 46806 47089 +3 46764 47089 47029 +3 46765 47124 47231 +3 46765 47231 46850 +3 46766 46851 47232 +3 46766 47232 47125 +3 46767 46892 46866 +3 46768 46867 46893 +3 46769 47199 47323 +3 46769 47323 46903 +3 46770 46904 47324 +3 46770 47324 47200 +3 46771 47339 47982 +3 46771 47982 47428 +3 46772 47428 47983 +3 46772 47983 47340 +3 46773 46846 47072 +3 46773 47072 46970 +3 46774 46971 47073 +3 46774 47073 46847 +3 46775 46966 47445 +3 46775 47445 47253 +3 46776 47254 47446 +3 46776 47446 46967 +3 46777 47138 47272 +3 46777 47272 46898 +3 46778 46899 47273 +3 46778 47273 47139 +3 46779 46866 46896 +3 46779 46896 46791 +3 46780 46792 46897 +3 46780 46897 46867 +3 46781 46932 47265 +3 46781 47265 47086 +3 46782 47087 47266 +3 46782 47266 46933 +3 46783 47052 47455 +3 46783 47455 47201 +3 46784 47202 47456 +3 46784 47456 47053 +3 46785 47146 47353 +3 46785 47353 47010 +3 46786 47011 47354 +3 46786 47354 47147 +3 46787 47363 47944 +3 46787 47944 47391 +3 46788 47392 47945 +3 46788 47945 47364 +3 46789 46958 47128 +3 46789 47128 46960 +3 46790 46961 47129 +3 46790 47129 46959 +3 46791 46896 46883 +3 46792 46884 46897 +3 46793 46984 47619 +3 46793 47619 47420 +3 46794 47421 47620 +3 46794 47620 46985 +3 46795 47498 47856 +3 46795 47856 47172 +3 46796 47173 47857 +3 46796 47857 47499 +3 46797 46970 47116 +3 46797 47116 46918 +3 46798 46919 47117 +3 46798 47117 46971 +3 46799 47399 47952 +3 46799 47952 47363 +3 46800 47364 47953 +3 46800 47953 47400 +3 46801 46805 47098 +3 46801 47098 47068 +3 46802 47069 47099 +3 46802 47099 46806 +3 46803 46972 47237 +3 46803 47237 47058 +3 46804 47059 47238 +3 46804 47238 46973 +3 46805 47088 47098 +3 46806 47099 47089 +3 46807 47058 47221 +3 46807 47221 46962 +3 46808 46963 47222 +3 46808 47222 47059 +3 46809 47319 47671 +3 46809 47671 47163 +3 46810 47164 47672 +3 46810 47672 47320 +3 46811 47006 47881 +3 46811 47881 47699 +3 46812 47700 47882 +3 46812 47882 47007 +3 46813 46977 47932 +3 46813 47932 47615 +3 46814 47616 47933 +3 46814 47933 46978 +3 46815 46950 47284 +3 46815 47284 47153 +3 46816 47154 47285 +3 46816 47285 46951 +3 46817 46883 46913 +3 46817 46913 46818 +3 46818 46913 46884 +3 46819 47395 47720 +3 46819 47720 47159 +3 46820 47160 47721 +3 46820 47721 47396 +3 46821 47066 47744 +3 46821 47744 47508 +3 46822 47509 47745 +3 46822 47745 47067 +3 46823 46916 47606 +3 46823 47606 47433 +3 46824 47434 47607 +3 46824 47607 46917 +3 46825 46894 47247 +3 46825 47247 47180 +3 46826 47181 47248 +3 46826 47248 46895 +3 46827 47065 47064 +3 46828 47038 47571 +3 46828 47571 47347 +3 46829 47348 47572 +3 46829 47572 47039 +3 46830 47243 47581 +3 46830 47581 47177 +3 46831 47177 47582 +3 46831 47582 47244 +3 46832 47182 47577 +3 46832 47577 47243 +3 46833 47244 47578 +3 46833 47578 47183 +3 46834 47213 47688 +3 46834 47688 47319 +3 46835 47320 47689 +3 46835 47689 47214 +3 46836 47295 47494 +3 46836 47494 47054 +3 46837 47055 47495 +3 46837 47495 47296 +3 46838 47108 47552 +3 46838 47552 47301 +3 46839 47302 47553 +3 46839 47553 47109 +3 46840 46964 47587 +3 46840 47587 47453 +3 46841 47454 47588 +3 46841 47588 46965 +3 46842 47401 47583 +3 46842 47583 47036 +3 46843 47037 47584 +3 46843 47584 47402 +3 46844 47641 47807 +3 46844 47807 47006 +3 46845 47007 47808 +3 46845 47808 47642 +3 46846 46856 47114 +3 46846 47114 47072 +3 46847 47073 47115 +3 46847 47115 46857 +3 46848 47461 47741 +3 46848 47741 47161 +3 46849 47162 47742 +3 46849 47742 47462 +3 46850 47231 47286 +3 46850 47286 46894 +3 46851 46895 47287 +3 46851 47287 47232 +3 46852 47548 47645 +3 46852 47645 46920 +3 46853 46921 47646 +3 46853 47646 47549 +3 46854 46891 46936 +3 46854 46936 46892 +3 46855 46893 46937 +3 46855 46937 46891 +3 46856 47080 47114 +3 46857 47115 47081 +3 46858 47050 47315 +3 46858 47315 47126 +3 46859 47127 47316 +3 46859 47316 47051 +3 46860 47219 47789 +3 46860 47789 47424 +3 46861 47425 47790 +3 46861 47790 47220 +3 46862 47305 47379 +3 46862 47379 46932 +3 46863 46933 47380 +3 46863 47380 47306 +3 46864 47046 47635 +3 46864 47635 47449 +3 46865 47450 47636 +3 46865 47636 47047 +3 46866 46892 46942 +3 46866 46942 46896 +3 46867 46897 46943 +3 46867 46943 46893 +3 46868 47373 47530 +3 46868 47530 47012 +3 46869 47013 47531 +3 46869 47531 47374 +3 46870 47134 47429 +3 46870 47429 47146 +3 46871 47147 47430 +3 46871 47430 47135 +3 46872 47393 47649 +3 46872 47649 47120 +3 46873 47121 47650 +3 46873 47650 47394 +3 46874 47329 47631 +3 46874 47631 47175 +3 46875 47176 47632 +3 46875 47632 47330 +3 46876 47040 47447 +3 46876 47447 47274 +3 46877 47275 47448 +3 46877 47448 47041 +3 46878 47144 47281 +3 46878 47281 47145 +3 46879 47209 47701 +3 46879 47701 47355 +3 46880 47356 47702 +3 46880 47702 47210 +3 46881 47282 47913 +3 46881 47913 47510 +3 46882 47511 47914 +3 46882 47914 47283 +3 46883 46896 46952 +3 46883 46952 46913 +3 46884 46913 46953 +3 46884 46953 46897 +3 46885 47520 47990 +3 46885 47990 47357 +3 46886 47358 47991 +3 46886 47991 47521 +3 46887 47201 47536 +3 46887 47536 47194 +3 46888 47195 47537 +3 46888 47537 47202 +3 46889 47122 47860 +3 46889 47860 47604 +3 46890 47605 47861 +3 46890 47861 47123 +3 46891 46937 46936 +3 46892 46936 46942 +3 46893 46943 46937 +3 46894 47286 47247 +3 46895 47248 47287 +3 46896 46942 46952 +3 46897 46953 46943 +3 46898 47272 47437 +3 46898 47437 47062 +3 46899 47063 47438 +3 46899 47438 47273 +3 46900 47378 47715 +3 46900 47715 47377 +3 46901 47413 47609 +3 46901 47609 47094 +3 46902 47095 47610 +3 46902 47610 47414 +3 46903 47323 47422 +3 46903 47422 46994 +3 46904 46995 47423 +3 46904 47423 47324 +3 46905 47387 47752 +3 46905 47752 47267 +3 46906 47268 47753 +3 46906 47753 47388 +3 46907 47484 47968 +3 46907 47968 47492 +3 46908 47493 47969 +3 46908 47969 47485 +3 46909 47207 47737 +3 46909 47737 47463 +3 46910 47464 47738 +3 46910 47738 47208 +3 46911 47112 47225 +3 46911 47225 47028 +3 46912 47029 47226 +3 46912 47226 47113 +3 46913 46952 46953 +3 46914 47030 47526 +3 46914 47526 47411 +3 46915 47412 47527 +3 46915 47527 47031 +3 46916 46986 47711 +3 46916 47711 47606 +3 46917 47607 47712 +3 46917 47712 46987 +3 46918 47116 47205 +3 46918 47205 46990 +3 46919 46991 47206 +3 46919 47206 47117 +3 46920 47645 47686 +3 46921 47687 47646 +3 46922 47403 47669 +3 46922 47669 47188 +3 46923 47189 47670 +3 46923 47670 47404 +3 46924 47311 47889 +3 46924 47889 47484 +3 46925 47485 47890 +3 46925 47890 47312 +3 46926 47064 47241 +3 46926 47241 47112 +3 46927 47113 47242 +3 46927 47242 47065 +3 46928 47492 47928 +3 46928 47928 47341 +3 46929 47342 47929 +3 46929 47929 47493 +3 46930 47070 47488 +3 46930 47488 47331 +3 46931 47332 47489 +3 46931 47489 47071 +3 46932 47379 47265 +3 46933 47266 47380 +3 46934 47227 47435 +3 46934 47435 47138 +3 46935 47139 47436 +3 46935 47436 47228 +3 46936 46937 46979 +3 46936 46979 46942 +3 46937 46943 46979 +3 46938 47196 47375 +3 46938 47375 47124 +3 46939 47125 47376 +3 46939 47376 47197 +3 46940 47126 47325 +3 46940 47325 47144 +3 46941 47145 47326 +3 46941 47326 47127 +3 46942 46979 46952 +3 46943 46953 46979 +3 46944 47148 47439 +3 46944 47439 47227 +3 46945 47228 47440 +3 46945 47440 47148 +3 46946 47562 47885 +3 46946 47885 47245 +3 46947 47246 47886 +3 46947 47886 47563 +3 46948 47153 47383 +3 46948 47383 47196 +3 46949 47197 47384 +3 46949 47384 47154 +3 46950 47060 47359 +3 46950 47359 47284 +3 46951 47285 47360 +3 46951 47360 47061 +3 46952 46979 46953 +3 46954 47190 47869 +3 46954 47869 47627 +3 46955 47628 47870 +3 46955 47870 47191 +3 46956 47415 47598 +3 46956 47598 47132 +3 46957 47133 47599 +3 46957 47599 47416 +3 46958 47068 47251 +3 46958 47251 47128 +3 46959 47129 47252 +3 46959 47252 47069 +3 46960 47128 47255 +3 46960 47255 47080 +3 46961 47081 47256 +3 46961 47256 47129 +3 46962 47221 47317 +3 46962 47317 47060 +3 46963 47061 47318 +3 46963 47318 47222 +3 46964 47301 47684 +3 46964 47684 47587 +3 46965 47588 47685 +3 46965 47685 47302 +3 46966 47084 47564 +3 46966 47564 47445 +3 46967 47446 47565 +3 46967 47565 47085 +3 46968 47092 47902 +3 46968 47902 47667 +3 46969 47668 47903 +3 46969 47903 47093 +3 46970 47072 47235 +3 46970 47235 47116 +3 46971 47117 47236 +3 46971 47236 47073 +3 46972 47076 47349 +3 46972 47349 47237 +3 46973 47238 47350 +3 46973 47350 47077 +3 46974 47521 47917 +3 46974 47917 47520 +3 46975 47355 47875 +3 46975 47875 47387 +3 46976 47388 47876 +3 46976 47876 47356 +3 46977 47078 48029 +3 46977 48029 47932 +3 46978 47933 48030 +3 46978 48030 47079 +3 46980 47369 47732 +3 46980 47732 47329 +3 46981 47330 47733 +3 46981 47733 47370 +3 46982 47215 48009 +3 46982 48009 47787 +3 46983 47788 48010 +3 46983 48010 47216 +3 46984 47106 47772 +3 46984 47772 47619 +3 46985 47620 47773 +3 46985 47773 47107 +3 46986 46987 47734 +3 46986 47734 47711 +3 46987 47712 47734 +3 46988 47211 48052 +3 46988 48052 47832 +3 46989 47833 48053 +3 46989 48053 47212 +3 46990 47205 47257 +3 46990 47257 47026 +3 46991 47026 47258 +3 46991 47258 47206 +3 46992 47327 47528 +3 46992 47528 47199 +3 46993 47200 47529 +3 46993 47529 47328 +3 46994 47422 47478 +3 46994 47478 47027 +3 46995 47027 47479 +3 46995 47479 47423 +3 46996 47647 47823 +3 46996 47823 47178 +3 46997 47179 47824 +3 46997 47824 47648 +3 46998 47554 47819 +3 46998 47819 47233 +3 46999 47234 47820 +3 46999 47820 47555 +3 47000 47377 47791 +3 47000 47791 47385 +3 47001 47386 47792 +3 47001 47792 47378 +3 47002 47482 47894 +3 47002 47894 47395 +3 47003 47396 47895 +3 47003 47895 47483 +3 47004 47345 47663 +3 47004 47663 47295 +3 47005 47296 47664 +3 47005 47664 47346 +3 47006 47807 47881 +3 47007 47882 47808 +3 47008 47294 47653 +3 47008 47653 47345 +3 47009 47346 47654 +3 47009 47654 47294 +3 47010 47353 47540 +3 47010 47540 47184 +3 47011 47185 47541 +3 47011 47541 47354 +3 47012 47530 47651 +3 47012 47651 47100 +3 47013 47101 47652 +3 47013 47652 47531 +3 47014 47424 47918 +3 47014 47918 47482 +3 47015 47483 47919 +3 47015 47919 47425 +3 47016 47780 47986 +3 47016 47986 47239 +3 47017 47240 47987 +3 47017 47987 47781 +3 47018 47263 47960 +3 47018 47960 47713 +3 47019 47714 47961 +3 47019 47961 47264 +3 47020 47253 47657 +3 47020 47657 47407 +3 47021 47408 47658 +3 47021 47658 47254 +3 47022 47269 47764 +3 47022 47764 47502 +3 47023 47503 47765 +3 47023 47765 47270 +3 47024 47351 47970 +3 47024 47970 47625 +3 47025 47626 47971 +3 47025 47971 47352 +3 47026 47257 47258 +3 47027 47478 47479 +3 47028 47225 47303 +3 47028 47303 47088 +3 47029 47089 47304 +3 47029 47304 47226 +3 47030 47096 47600 +3 47030 47600 47526 +3 47031 47527 47601 +3 47031 47601 47097 +3 47032 47705 47988 +3 47032 47988 47313 +3 47033 47314 47989 +3 47033 47989 47706 +3 47034 47343 47613 +3 47034 47613 47278 +3 47035 47278 47614 +3 47035 47614 47344 +3 47036 47583 47709 +3 47036 47709 47130 +3 47037 47131 47710 +3 47037 47710 47584 +3 47038 47186 47748 +3 47038 47748 47571 +3 47039 47572 47749 +3 47039 47749 47187 +3 47040 47151 47560 +3 47040 47560 47447 +3 47041 47448 47561 +3 47041 47561 47152 +3 47042 47510 47909 +3 47042 47909 47417 +3 47043 47417 47910 +3 47043 47910 47511 +3 47044 47274 47602 +3 47044 47602 47343 +3 47045 47344 47603 +3 47045 47603 47275 +3 47046 47136 47766 +3 47046 47766 47635 +3 47047 47636 47767 +3 47047 47767 47137 +3 47048 47409 48021 +3 47048 48021 47665 +3 47049 47666 48022 +3 47049 48022 47410 +3 47050 47180 47467 +3 47050 47467 47315 +3 47051 47316 47468 +3 47051 47468 47181 +3 47052 47249 47680 +3 47052 47680 47455 +3 47053 47456 47681 +3 47053 47681 47250 +3 47054 47494 47661 +3 47054 47661 47192 +3 47055 47193 47662 +3 47055 47662 47495 +3 47056 47774 48086 +3 47056 48086 47365 +3 47057 47366 48087 +3 47057 48087 47775 +3 47058 47237 47426 +3 47058 47426 47221 +3 47059 47222 47427 +3 47059 47427 47238 +3 47060 47317 47359 +3 47061 47360 47318 +3 47062 47437 47546 +3 47062 47546 47168 +3 47063 47169 47547 +3 47063 47547 47438 +3 47064 47065 47271 +3 47064 47271 47241 +3 47065 47242 47271 +3 47066 47217 47926 +3 47066 47926 47744 +3 47067 47745 47927 +3 47067 47927 47218 +3 47068 47098 47309 +3 47068 47309 47251 +3 47069 47252 47310 +3 47069 47310 47099 +3 47070 47149 47566 +3 47070 47566 47488 +3 47071 47489 47567 +3 47071 47567 47150 +3 47072 47114 47299 +3 47072 47299 47235 +3 47073 47236 47300 +3 47073 47300 47115 +3 47074 47516 47844 +3 47074 47844 47393 +3 47075 47394 47845 +3 47075 47845 47517 +3 47076 47157 47459 +3 47076 47459 47349 +3 47077 47350 47460 +3 47077 47460 47158 +3 47078 47140 48096 +3 47078 48096 48029 +3 47079 48030 48097 +3 47079 48097 47141 +3 47080 47255 47307 +3 47080 47307 47114 +3 47081 47115 47308 +3 47081 47308 47256 +3 47082 47347 47800 +3 47082 47800 47512 +3 47083 47513 47801 +3 47083 47801 47348 +3 47084 47155 47659 +3 47084 47659 47564 +3 47085 47565 47660 +3 47085 47660 47156 +3 47086 47265 47538 +3 47086 47538 47327 +3 47087 47328 47539 +3 47087 47539 47266 +3 47088 47303 47321 +3 47088 47321 47098 +3 47089 47099 47322 +3 47089 47322 47304 +3 47090 47389 47924 +3 47090 47924 47589 +3 47091 47590 47925 +3 47091 47925 47390 +3 47092 47165 47972 +3 47092 47972 47902 +3 47093 47903 47973 +3 47093 47973 47166 +3 47094 47609 47760 +3 47094 47760 47223 +3 47095 47224 47761 +3 47095 47761 47610 +3 47096 47451 47600 +3 47097 47601 47452 +3 47098 47321 47309 +3 47099 47310 47322 +3 47100 47651 47724 +3 47100 47724 47369 +3 47101 47370 47725 +3 47101 47725 47652 +3 47102 47716 47966 +3 47102 47966 47333 +3 47103 47334 47967 +3 47103 47967 47717 +3 47104 47500 48196 +3 47104 48196 47829 +3 47105 47830 48197 +3 47105 48197 47501 +3 47106 47276 47846 +3 47106 47846 47772 +3 47107 47773 47847 +3 47107 47847 47277 +3 47108 47463 47930 +3 47108 47930 47552 +3 47109 47553 47931 +3 47109 47931 47464 +3 47110 47512 47821 +3 47110 47821 47403 +3 47111 47404 47822 +3 47111 47822 47513 +3 47112 47241 47361 +3 47112 47361 47225 +3 47113 47226 47362 +3 47113 47362 47242 +3 47114 47307 47299 +3 47115 47300 47308 +3 47116 47235 47337 +3 47116 47337 47205 +3 47117 47206 47338 +3 47117 47338 47236 +3 47118 47407 47756 +3 47118 47756 47451 +3 47119 47452 47757 +3 47119 47757 47408 +3 47120 47649 48003 +3 47120 48003 47461 +3 47121 47462 48004 +3 47121 48004 47650 +3 47122 47292 48037 +3 47122 48037 47860 +3 47123 47861 48038 +3 47123 48038 47293 +3 47124 47375 47518 +3 47124 47518 47231 +3 47125 47232 47519 +3 47125 47519 47376 +3 47126 47315 47534 +3 47126 47534 47325 +3 47127 47326 47535 +3 47127 47535 47316 +3 47128 47251 47381 +3 47128 47381 47255 +3 47129 47256 47382 +3 47129 47382 47252 +3 47130 47709 47770 +3 47130 47770 47167 +3 47131 47167 47771 +3 47131 47771 47710 +3 47132 47598 47730 +3 47132 47730 47229 +3 47133 47230 47731 +3 47133 47731 47599 +3 47134 47331 47673 +3 47134 47673 47429 +3 47135 47430 47674 +3 47135 47674 47332 +3 47136 47178 47825 +3 47136 47825 47766 +3 47137 47767 47826 +3 47137 47826 47179 +3 47138 47435 47575 +3 47138 47575 47272 +3 47139 47273 47576 +3 47139 47576 47436 +3 47140 47141 48118 +3 47140 48118 48096 +3 47141 48097 48118 +3 47142 47785 48078 +3 47142 48078 47418 +3 47143 47419 48079 +3 47143 48079 47786 +3 47144 47325 47490 +3 47144 47490 47281 +3 47145 47281 47491 +3 47145 47491 47326 +3 47146 47429 47678 +3 47146 47678 47353 +3 47147 47354 47679 +3 47147 47679 47430 +3 47148 47440 47593 +3 47148 47593 47439 +3 47149 47168 47611 +3 47149 47611 47566 +3 47150 47567 47612 +3 47150 47612 47169 +3 47151 47288 47726 +3 47151 47726 47560 +3 47152 47561 47727 +3 47152 47727 47289 +3 47153 47284 47532 +3 47153 47532 47383 +3 47154 47384 47533 +3 47154 47533 47285 +3 47155 47156 47694 +3 47155 47694 47659 +3 47156 47660 47694 +3 47157 47174 47496 +3 47157 47496 47459 +3 47158 47460 47497 +3 47158 47497 47174 +3 47159 47720 47958 +3 47159 47958 47371 +3 47160 47372 47959 +3 47160 47959 47721 +3 47161 47741 47976 +3 47161 47976 47367 +3 47162 47368 47977 +3 47162 47977 47742 +3 47163 47671 47942 +3 47163 47942 47413 +3 47164 47414 47943 +3 47164 47943 47672 +3 47165 47198 48041 +3 47165 48041 47972 +3 47166 47973 48042 +3 47166 48042 47198 +3 47167 47770 47771 +3 47168 47546 47611 +3 47169 47612 47547 +3 47170 47486 48147 +3 47170 48147 47815 +3 47171 47816 48148 +3 47171 48148 47487 +3 47172 47856 48123 +3 47172 48123 47457 +3 47173 47458 48124 +3 47173 48124 47857 +3 47174 47497 47496 +3 47175 47631 47883 +3 47175 47883 47401 +3 47176 47402 47884 +3 47176 47884 47632 +3 47177 47581 47868 +3 47177 47868 47582 +3 47178 47823 47825 +3 47179 47826 47824 +3 47180 47247 47550 +3 47180 47550 47467 +3 47181 47468 47551 +3 47181 47551 47248 +3 47182 47420 47871 +3 47182 47871 47577 +3 47183 47578 47872 +3 47183 47872 47421 +3 47184 47540 47682 +3 47184 47682 47305 +3 47185 47306 47683 +3 47185 47683 47541 +3 47186 47259 47852 +3 47186 47852 47748 +3 47187 47749 47853 +3 47187 47853 47260 +3 47188 47669 47879 +3 47188 47879 47373 +3 47189 47374 47880 +3 47189 47880 47670 +3 47190 47335 48035 +3 47190 48035 47869 +3 47191 47870 48036 +3 47191 48036 47336 +3 47192 47661 47768 +3 47192 47768 47261 +3 47193 47262 47769 +3 47193 47769 47662 +3 47194 47536 47793 +3 47194 47793 47415 +3 47195 47416 47794 +3 47195 47794 47537 +3 47196 47383 47573 +3 47196 47573 47375 +3 47197 47376 47574 +3 47197 47574 47384 +3 47198 48042 48041 +3 47199 47528 47695 +3 47199 47695 47323 +3 47200 47324 47696 +3 47200 47696 47529 +3 47201 47455 47802 +3 47201 47802 47536 +3 47202 47537 47803 +3 47202 47803 47456 +3 47203 47697 48064 +3 47203 48064 47562 +3 47204 47563 48065 +3 47204 48065 47698 +3 47205 47337 47441 +3 47205 47441 47257 +3 47206 47258 47442 +3 47206 47442 47338 +3 47207 47433 47980 +3 47207 47980 47737 +3 47208 47738 47981 +3 47208 47981 47434 +3 47209 47449 47954 +3 47209 47954 47701 +3 47210 47702 47955 +3 47210 47955 47450 +3 47211 47476 48210 +3 47211 48210 48052 +3 47212 48053 48211 +3 47212 48211 47477 +3 47213 47502 47984 +3 47213 47984 47688 +3 47214 47689 47985 +3 47214 47985 47503 +3 47215 47665 48131 +3 47215 48131 48009 +3 47216 48010 48132 +3 47216 48132 47666 +3 47217 47589 48015 +3 47217 48015 47926 +3 47218 47927 48016 +3 47218 48016 47590 +3 47219 47508 48062 +3 47219 48062 47789 +3 47220 47790 48063 +3 47220 48063 47509 +3 47221 47426 47556 +3 47221 47556 47317 +3 47222 47318 47557 +3 47222 47557 47427 +3 47223 47760 47836 +3 47223 47836 47279 +3 47224 47280 47837 +3 47224 47837 47761 +3 47225 47361 47469 +3 47225 47469 47303 +3 47226 47304 47470 +3 47226 47470 47362 +3 47227 47439 47675 +3 47227 47675 47435 +3 47228 47436 47676 +3 47228 47676 47440 +3 47229 47730 47809 +3 47229 47809 47290 +3 47230 47291 47810 +3 47230 47810 47731 +3 47231 47518 47591 +3 47231 47591 47286 +3 47232 47287 47592 +3 47232 47592 47519 +3 47233 47819 47995 +3 47233 47995 47397 +3 47234 47398 47996 +3 47234 47996 47820 +3 47235 47299 47443 +3 47235 47443 47337 +3 47236 47338 47444 +3 47236 47444 47300 +3 47237 47349 47585 +3 47237 47585 47426 +3 47238 47427 47586 +3 47238 47586 47350 +3 47239 47986 48151 +3 47239 48151 47405 +3 47240 47406 48152 +3 47240 48152 47987 +3 47241 47271 47431 +3 47241 47431 47361 +3 47242 47362 47432 +3 47242 47432 47271 +3 47243 47577 47940 +3 47243 47940 47581 +3 47244 47582 47941 +3 47244 47941 47578 +3 47245 47885 48106 +3 47245 48106 47498 +3 47246 47499 48107 +3 47246 48107 47886 +3 47247 47286 47594 +3 47247 47594 47550 +3 47248 47551 47595 +3 47248 47595 47287 +3 47249 47411 47842 +3 47249 47842 47680 +3 47250 47681 47843 +3 47250 47843 47412 +3 47251 47309 47474 +3 47251 47474 47381 +3 47252 47382 47475 +3 47252 47475 47310 +3 47253 47445 47854 +3 47253 47854 47657 +3 47254 47658 47855 +3 47254 47855 47446 +3 47255 47381 47465 +3 47255 47465 47307 +3 47256 47308 47466 +3 47256 47466 47382 +3 47257 47441 47473 +3 47257 47473 47258 +3 47258 47473 47442 +3 47259 47297 47915 +3 47259 47915 47852 +3 47260 47853 47916 +3 47260 47916 47298 +3 47261 47768 47911 +3 47261 47911 47297 +3 47262 47298 47912 +3 47262 47912 47769 +3 47263 47615 48294 +3 47263 48294 47960 +3 47264 47961 48295 +3 47264 48295 47616 +3 47265 47379 47692 +3 47265 47692 47538 +3 47266 47539 47693 +3 47266 47693 47380 +3 47267 47752 48048 +3 47267 48048 47554 +3 47268 47555 48049 +3 47268 48049 47753 +3 47269 47453 47956 +3 47269 47956 47764 +3 47270 47765 47957 +3 47270 47957 47454 +3 47271 47432 47431 +3 47272 47575 47762 +3 47272 47762 47437 +3 47273 47438 47763 +3 47273 47763 47576 +3 47274 47447 47795 +3 47274 47795 47602 +3 47275 47603 47796 +3 47275 47796 47448 +3 47276 47279 47877 +3 47276 47877 47846 +3 47277 47847 47878 +3 47277 47878 47280 +3 47278 47613 47804 +3 47278 47804 47614 +3 47279 47836 47877 +3 47280 47878 47837 +3 47281 47490 47608 +3 47281 47608 47491 +3 47282 47604 48200 +3 47282 48200 47913 +3 47283 47914 48201 +3 47283 48201 47605 +3 47284 47359 47643 +3 47284 47643 47532 +3 47285 47533 47644 +3 47285 47644 47360 +3 47286 47591 47594 +3 47287 47595 47592 +3 47288 47290 47827 +3 47288 47827 47726 +3 47289 47727 47828 +3 47289 47828 47291 +3 47290 47809 47827 +3 47291 47828 47810 +3 47292 47504 48137 +3 47292 48137 48037 +3 47293 48038 48138 +3 47293 48138 47505 +3 47294 47654 47908 +3 47294 47908 47653 +3 47295 47663 47906 +3 47295 47906 47494 +3 47296 47495 47907 +3 47296 47907 47664 +3 47297 47911 47915 +3 47298 47916 47912 +3 47299 47307 47480 +3 47299 47480 47443 +3 47300 47444 47481 +3 47300 47481 47308 +3 47301 47552 47950 +3 47301 47950 47684 +3 47302 47685 47951 +3 47302 47951 47553 +3 47303 47469 47506 +3 47303 47506 47321 +3 47304 47322 47507 +3 47304 47507 47470 +3 47305 47682 47778 +3 47305 47778 47379 +3 47306 47380 47779 +3 47306 47779 47683 +3 47307 47465 47480 +3 47308 47481 47466 +3 47309 47321 47514 +3 47309 47514 47474 +3 47310 47475 47515 +3 47310 47515 47322 +3 47311 47627 48169 +3 47311 48169 47889 +3 47312 47890 48170 +3 47312 48170 47628 +3 47313 47988 48212 +3 47313 48212 47542 +3 47314 47543 48213 +3 47314 48213 47989 +3 47315 47467 47703 +3 47315 47703 47534 +3 47316 47535 47704 +3 47316 47704 47468 +3 47317 47556 47633 +3 47317 47633 47359 +3 47318 47360 47634 +3 47318 47634 47557 +3 47319 47688 48076 +3 47319 48076 47671 +3 47320 47672 48077 +3 47320 48077 47689 +3 47321 47506 47514 +3 47322 47515 47507 +3 47323 47695 47797 +3 47323 47797 47422 +3 47324 47423 47798 +3 47324 47798 47696 +3 47325 47534 47718 +3 47325 47718 47490 +3 47326 47491 47719 +3 47326 47719 47535 +3 47327 47538 47776 +3 47327 47776 47528 +3 47328 47529 47777 +3 47328 47777 47539 +3 47329 47732 48017 +3 47329 48017 47631 +3 47330 47632 48018 +3 47330 48018 47733 +3 47331 47488 47834 +3 47331 47834 47673 +3 47332 47674 47835 +3 47332 47835 47489 +3 47333 47966 48157 +3 47333 48157 47522 +3 47334 47523 48158 +3 47334 48158 47967 +3 47335 47405 48112 +3 47335 48112 48035 +3 47336 48036 48113 +3 47336 48113 47406 +3 47337 47443 47558 +3 47337 47558 47441 +3 47338 47442 47559 +3 47338 47559 47444 +3 47339 47829 48429 +3 47339 48429 47982 +3 47340 47983 48430 +3 47340 48430 47830 +3 47341 47928 48250 +3 47341 48250 47705 +3 47342 47706 48251 +3 47342 48251 47929 +3 47343 47602 47904 +3 47343 47904 47613 +3 47344 47614 47905 +3 47344 47905 47603 +3 47345 47653 47974 +3 47345 47974 47663 +3 47346 47664 47975 +3 47346 47975 47654 +3 47347 47571 48027 +3 47347 48027 47800 +3 47348 47801 48028 +3 47348 48028 47572 +3 47349 47459 47707 +3 47349 47707 47585 +3 47350 47586 47708 +3 47350 47708 47460 +3 47351 47667 48243 +3 47351 48243 47970 +3 47352 47971 48244 +3 47352 48244 47668 +3 47353 47678 47862 +3 47353 47862 47540 +3 47354 47541 47863 +3 47354 47863 47679 +3 47355 47701 48173 +3 47355 48173 47875 +3 47356 47876 48174 +3 47356 48174 47702 +3 47357 47990 48365 +3 47357 48365 47774 +3 47358 47775 48366 +3 47358 48366 47991 +3 47359 47633 47643 +3 47360 47644 47634 +3 47361 47431 47544 +3 47361 47544 47469 +3 47362 47470 47545 +3 47362 47545 47432 +3 47363 47952 48415 +3 47363 48415 47944 +3 47364 47945 48416 +3 47364 48416 47953 +3 47365 48086 48329 +3 47365 48329 47596 +3 47366 47597 48330 +3 47366 48330 48087 +3 47367 47976 48143 +3 47367 48143 47471 +3 47368 47472 48144 +3 47368 48144 47977 +3 47369 47724 48058 +3 47369 48058 47732 +3 47370 47733 48059 +3 47370 48059 47725 +3 47371 47958 48129 +3 47371 48129 47548 +3 47372 47549 48130 +3 47372 48130 47959 +3 47373 47879 48019 +3 47373 48019 47530 +3 47374 47531 48020 +3 47374 48020 47880 +3 47375 47573 47739 +3 47375 47739 47518 +3 47376 47519 47740 +3 47376 47740 47574 +3 47377 47715 48116 +3 47377 48116 47791 +3 47378 47792 48117 +3 47378 48117 47715 +3 47379 47778 47692 +3 47380 47693 47779 +3 47381 47474 47579 +3 47381 47579 47465 +3 47382 47466 47580 +3 47382 47580 47475 +3 47383 47532 47746 +3 47383 47746 47573 +3 47384 47574 47747 +3 47384 47747 47533 +3 47385 47791 48110 +3 47385 48110 47716 +3 47386 47717 48111 +3 47386 48111 47792 +3 47387 47875 48198 +3 47387 48198 47752 +3 47388 47753 48199 +3 47388 48199 47876 +3 47389 47625 48139 +3 47389 48139 47924 +3 47390 47925 48140 +3 47390 48140 47626 +3 47391 47944 48325 +3 47391 48325 47785 +3 47392 47786 48326 +3 47392 48326 47945 +3 47393 47844 48102 +3 47393 48102 47649 +3 47394 47650 48103 +3 47394 48103 47845 +3 47395 47894 48175 +3 47395 48175 47720 +3 47396 47721 48176 +3 47396 48176 47895 +3 47397 47995 48119 +3 47397 48119 47516 +3 47398 47517 48120 +3 47398 48120 47996 +3 47399 47815 48353 +3 47399 48353 47952 +3 47400 47953 48354 +3 47400 48354 47816 +3 47401 47883 48054 +3 47401 48054 47583 +3 47402 47584 48055 +3 47402 48055 47884 +3 47403 47821 48060 +3 47403 48060 47669 +3 47404 47670 48061 +3 47404 48061 47822 +3 47405 48151 48112 +3 47406 48113 48152 +3 47407 47657 47999 +3 47407 47999 47756 +3 47408 47757 48000 +3 47408 48000 47658 +3 47409 47713 48317 +3 47409 48317 48021 +3 47410 48022 48318 +3 47410 48318 47714 +3 47411 47526 47964 +3 47411 47964 47842 +3 47412 47843 47965 +3 47412 47965 47527 +3 47413 47942 48141 +3 47413 48141 47609 +3 47414 47610 48142 +3 47414 48142 47943 +3 47415 47793 48007 +3 47415 48007 47598 +3 47416 47599 48008 +3 47416 48008 47794 +3 47417 47909 48195 +3 47417 48195 47910 +3 47418 48078 48298 +3 47418 48298 47641 +3 47419 47642 48299 +3 47419 48299 48079 +3 47420 47619 48068 +3 47420 48068 47871 +3 47421 47872 48069 +3 47421 48069 47620 +3 47422 47797 47864 +3 47422 47864 47478 +3 47423 47479 47865 +3 47423 47865 47798 +3 47424 47789 48247 +3 47424 48247 47918 +3 47425 47919 48248 +3 47425 48248 47790 +3 47426 47585 47754 +3 47426 47754 47556 +3 47427 47557 47755 +3 47427 47755 47586 +3 47428 47982 48346 +3 47428 48346 47983 +3 47429 47673 47920 +3 47429 47920 47678 +3 47430 47679 47921 +3 47430 47921 47674 +3 47431 47432 47570 +3 47431 47570 47544 +3 47432 47545 47570 +3 47433 47606 48155 +3 47433 48155 47980 +3 47434 47981 48156 +3 47434 48156 47607 +3 47435 47675 47838 +3 47435 47838 47575 +3 47436 47576 47839 +3 47436 47839 47676 +3 47437 47762 47898 +3 47437 47898 47546 +3 47438 47547 47899 +3 47438 47899 47763 +3 47439 47593 47858 +3 47439 47858 47675 +3 47440 47676 47859 +3 47440 47859 47593 +3 47441 47558 47617 +3 47441 47617 47473 +3 47442 47473 47618 +3 47442 47618 47559 +3 47443 47480 47621 +3 47443 47621 47558 +3 47444 47559 47622 +3 47444 47622 47481 +3 47445 47564 47993 +3 47445 47993 47854 +3 47446 47855 47994 +3 47446 47994 47565 +3 47447 47560 47938 +3 47447 47938 47795 +3 47448 47796 47939 +3 47448 47939 47561 +3 47449 47635 48145 +3 47449 48145 47954 +3 47450 47955 48146 +3 47450 48146 47636 +3 47451 47756 47934 +3 47451 47934 47600 +3 47452 47601 47935 +3 47452 47935 47757 +3 47453 47587 48108 +3 47453 48108 47956 +3 47454 47957 48109 +3 47454 48109 47588 +3 47455 47680 48023 +3 47455 48023 47802 +3 47456 47803 48024 +3 47456 48024 47681 +3 47457 48123 48355 +3 47457 48355 47568 +3 47458 47569 48356 +3 47458 48356 48124 +3 47459 47496 47782 +3 47459 47782 47707 +3 47460 47708 47783 +3 47460 47783 47497 +3 47461 48003 48269 +3 47461 48269 47741 +3 47462 47742 48270 +3 47462 48270 48004 +3 47463 47737 48177 +3 47463 48177 47930 +3 47464 47931 48178 +3 47464 48178 47738 +3 47465 47579 47629 +3 47465 47629 47480 +3 47466 47481 47630 +3 47466 47630 47580 +3 47467 47550 47811 +3 47467 47811 47703 +3 47468 47704 47812 +3 47468 47812 47551 +3 47469 47544 47623 +3 47469 47623 47506 +3 47470 47507 47624 +3 47470 47624 47545 +3 47471 48143 48234 +3 47471 48234 47524 +3 47472 47525 48235 +3 47472 48235 48144 +3 47473 47617 47618 +3 47474 47514 47639 +3 47474 47639 47579 +3 47475 47580 47640 +3 47475 47640 47515 +3 47476 47699 48425 +3 47476 48425 48210 +3 47477 48211 48426 +3 47477 48426 47700 +3 47478 47864 47893 +3 47478 47893 47479 +3 47479 47893 47865 +3 47480 47629 47621 +3 47481 47622 47630 +3 47482 47918 48359 +3 47482 48359 47894 +3 47483 47895 48360 +3 47483 48360 47919 +3 47484 47889 48349 +3 47484 48349 47968 +3 47485 47969 48350 +3 47485 48350 47890 +3 47486 47787 48427 +3 47486 48427 48147 +3 47487 48148 48428 +3 47487 48428 47788 +3 47488 47566 47946 +3 47488 47946 47834 +3 47489 47835 47947 +3 47489 47947 47567 +3 47490 47718 47840 +3 47490 47840 47608 +3 47491 47608 47841 +3 47491 47841 47719 +3 47492 47968 48369 +3 47492 48369 47928 +3 47493 47929 48370 +3 47493 48370 47969 +3 47494 47906 48056 +3 47494 48056 47661 +3 47495 47662 48057 +3 47495 48057 47907 +3 47496 47497 47799 +3 47496 47799 47782 +3 47497 47783 47799 +3 47498 48106 48433 +3 47498 48433 47856 +3 47499 47857 48434 +3 47499 48434 48107 +3 47500 47832 48530 +3 47500 48530 48196 +3 47501 48197 48531 +3 47501 48531 47833 +3 47502 47764 48224 +3 47502 48224 47984 +3 47503 47985 48225 +3 47503 48225 47765 +3 47504 47686 48306 +3 47504 48306 48137 +3 47505 48138 48307 +3 47505 48307 47687 +3 47506 47623 47655 +3 47506 47655 47514 +3 47507 47515 47656 +3 47507 47656 47624 +3 47508 47744 48300 +3 47508 48300 48062 +3 47509 48063 48301 +3 47509 48301 47745 +3 47510 47913 48283 +3 47510 48283 47909 +3 47511 47910 48284 +3 47511 48284 47914 +3 47512 47800 48149 +3 47512 48149 47821 +3 47513 47822 48150 +3 47513 48150 47801 +3 47514 47655 47639 +3 47515 47640 47656 +3 47516 48119 48191 +3 47516 48191 47844 +3 47517 47845 48192 +3 47517 48192 48120 +3 47518 47739 47848 +3 47518 47848 47591 +3 47519 47592 47849 +3 47519 47849 47740 +3 47520 47917 48357 +3 47520 48357 47990 +3 47521 47991 48358 +3 47521 48358 47917 +3 47522 48157 48286 +3 47522 48286 47647 +3 47523 47648 48287 +3 47523 48287 48158 +3 47524 48234 48260 +3 47524 48260 47525 +3 47525 48260 48235 +3 47526 47600 48045 +3 47526 48045 47964 +3 47527 47965 48046 +3 47527 48046 47601 +3 47528 47776 47948 +3 47528 47948 47695 +3 47529 47696 47949 +3 47529 47949 47777 +3 47530 48019 48127 +3 47530 48127 47651 +3 47531 47652 48128 +3 47531 48128 48020 +3 47532 47643 47866 +3 47532 47866 47746 +3 47533 47747 47867 +3 47533 47867 47644 +3 47534 47703 47891 +3 47534 47891 47718 +3 47535 47719 47892 +3 47535 47892 47704 +3 47536 47802 48088 +3 47536 48088 47793 +3 47537 47794 48089 +3 47537 48089 47803 +3 47538 47692 47936 +3 47538 47936 47776 +3 47539 47777 47937 +3 47539 47937 47693 +3 47540 47862 47997 +3 47540 47997 47682 +3 47541 47683 47998 +3 47541 47998 47863 +3 47542 48212 48373 +3 47542 48373 47697 +3 47543 47698 48374 +3 47543 48374 48213 +3 47544 47570 47690 +3 47544 47690 47623 +3 47545 47624 47691 +3 47545 47691 47570 +3 47546 47898 47962 +3 47546 47962 47611 +3 47547 47612 47963 +3 47547 47963 47899 +3 47548 48129 48254 +3 47548 48254 47645 +3 47549 47646 48255 +3 47549 48255 48130 +3 47550 47594 47873 +3 47550 47873 47811 +3 47551 47812 47874 +3 47551 47874 47595 +3 47552 47930 48290 +3 47552 48290 47950 +3 47553 47951 48291 +3 47553 48291 47931 +3 47554 48048 48281 +3 47554 48281 47819 +3 47555 47820 48282 +3 47555 48282 48049 +3 47556 47754 47850 +3 47556 47850 47633 +3 47557 47634 47851 +3 47557 47851 47755 +3 47558 47621 47722 +3 47558 47722 47617 +3 47559 47618 47723 +3 47559 47723 47622 +3 47560 47726 48094 +3 47560 48094 47938 +3 47561 47939 48095 +3 47561 48095 47727 +3 47562 48064 48371 +3 47562 48371 47885 +3 47563 47886 48372 +3 47563 48372 48065 +3 47564 47659 48082 +3 47564 48082 47993 +3 47565 47994 48083 +3 47565 48083 47660 +3 47566 47611 48001 +3 47566 48001 47946 +3 47567 47947 48002 +3 47567 48002 47612 +3 47568 48355 48439 +3 47568 48439 47637 +3 47569 47638 48440 +3 47569 48440 48356 +3 47570 47691 47690 +3 47571 47748 48202 +3 47571 48202 48027 +3 47572 48028 48203 +3 47572 48203 47749 +3 47573 47746 47922 +3 47573 47922 47739 +3 47574 47740 47923 +3 47574 47923 47747 +3 47575 47838 48033 +3 47575 48033 47762 +3 47576 47763 48034 +3 47576 48034 47839 +3 47577 47871 48220 +3 47577 48220 47940 +3 47578 47941 48221 +3 47578 48221 47872 +3 47579 47639 47728 +3 47579 47728 47629 +3 47580 47630 47729 +3 47580 47729 47640 +3 47581 47940 48214 +3 47581 48214 47868 +3 47582 47868 48215 +3 47582 48215 47941 +3 47583 48054 48165 +3 47583 48165 47709 +3 47584 47710 48166 +3 47584 48166 48055 +3 47585 47707 47900 +3 47585 47900 47754 +3 47586 47755 47901 +3 47586 47901 47708 +3 47587 47684 48206 +3 47587 48206 48108 +3 47588 48109 48207 +3 47588 48207 47685 +3 47589 47924 48341 +3 47589 48341 48015 +3 47590 48016 48342 +3 47590 48342 47925 +3 47591 47848 47887 +3 47591 47887 47594 +3 47592 47595 47888 +3 47592 47888 47849 +3 47593 47859 47992 +3 47593 47992 47858 +3 47594 47887 47873 +3 47595 47874 47888 +3 47596 48329 48505 +3 47596 48505 47780 +3 47597 47781 48506 +3 47597 48506 48330 +3 47598 48007 48135 +3 47598 48135 47730 +3 47599 47731 48136 +3 47599 48136 48008 +3 47600 47934 48045 +3 47601 48046 47935 +3 47602 47795 48090 +3 47602 48090 47904 +3 47603 47905 48091 +3 47603 48091 47796 +3 47604 47860 48464 +3 47604 48464 48200 +3 47605 48201 48465 +3 47605 48465 47861 +3 47606 47711 48265 +3 47606 48265 48155 +3 47607 48156 48266 +3 47607 48266 47712 +3 47608 47840 47841 +3 47609 48141 48302 +3 47609 48302 47760 +3 47610 47761 48303 +3 47610 48303 48142 +3 47611 47962 48001 +3 47612 48002 47963 +3 47613 47904 48098 +3 47613 48098 47804 +3 47614 47804 48099 +3 47614 48099 47905 +3 47615 47932 48568 +3 47615 48568 48294 +3 47616 48295 48569 +3 47616 48569 47933 +3 47617 47722 47743 +3 47617 47743 47618 +3 47618 47743 47723 +3 47619 47772 48216 +3 47619 48216 48068 +3 47620 48069 48217 +3 47620 48217 47773 +3 47621 47629 47750 +3 47621 47750 47722 +3 47622 47723 47751 +3 47622 47751 47630 +3 47623 47690 47735 +3 47623 47735 47655 +3 47624 47656 47736 +3 47624 47736 47691 +3 47625 47970 48492 +3 47625 48492 48139 +3 47626 48140 48493 +3 47626 48493 47971 +3 47627 47869 48421 +3 47627 48421 48169 +3 47628 48170 48422 +3 47628 48422 47870 +3 47629 47728 47750 +3 47630 47751 47729 +3 47631 48017 48256 +3 47631 48256 47883 +3 47632 47884 48257 +3 47632 48257 48018 +3 47633 47850 47896 +3 47633 47896 47643 +3 47634 47644 47897 +3 47634 47897 47851 +3 47635 47766 48279 +3 47635 48279 48145 +3 47636 48146 48280 +3 47636 48280 47767 +3 47637 48439 48510 +3 47637 48510 47677 +3 47638 47677 48511 +3 47638 48511 48440 +3 47639 47655 47758 +3 47639 47758 47728 +3 47640 47729 47759 +3 47640 47759 47656 +3 47641 48298 48474 +3 47641 48474 47807 +3 47642 47808 48475 +3 47642 48475 48299 +3 47643 47896 47866 +3 47644 47867 47897 +3 47645 48254 48308 +3 47645 48308 47686 +3 47646 47687 48309 +3 47646 48309 48255 +3 47647 48286 48367 +3 47647 48367 47823 +3 47648 47824 48368 +3 47648 48368 48287 +3 47649 48102 48435 +3 47649 48435 48003 +3 47650 48004 48436 +3 47650 48436 48103 +3 47651 48127 48204 +3 47651 48204 47724 +3 47652 47725 48205 +3 47652 48205 48128 +3 47653 47908 48218 +3 47653 48218 47974 +3 47654 47975 48219 +3 47654 48219 47908 +3 47655 47735 47758 +3 47656 47759 47736 +3 47657 47854 48167 +3 47657 48167 47999 +3 47658 48000 48168 +3 47658 48168 47855 +3 47659 47694 48121 +3 47659 48121 48082 +3 47660 48083 48122 +3 47660 48122 47694 +3 47661 48056 48163 +3 47661 48163 47768 +3 47662 47769 48164 +3 47662 48164 48057 +3 47663 47974 48208 +3 47663 48208 47906 +3 47664 47907 48209 +3 47664 48209 47975 +3 47665 48021 48516 +3 47665 48516 48131 +3 47666 48132 48517 +3 47666 48517 48022 +3 47667 47902 48470 +3 47667 48470 48243 +3 47668 48244 48471 +3 47668 48471 47903 +3 47669 48060 48273 +3 47669 48273 47879 +3 47670 47880 48274 +3 47670 48274 48061 +3 47671 48076 48361 +3 47671 48361 47942 +3 47672 47943 48362 +3 47672 48362 48077 +3 47673 47834 48092 +3 47673 48092 47920 +3 47674 47921 48093 +3 47674 48093 47835 +3 47675 47858 48050 +3 47675 48050 47838 +3 47676 47839 48051 +3 47676 48051 47859 +3 47677 48510 48511 +3 47678 47920 48100 +3 47678 48100 47862 +3 47679 47863 48101 +3 47679 48101 47921 +3 47680 47842 48179 +3 47680 48179 48023 +3 47681 48024 48180 +3 47681 48180 47843 +3 47682 47997 48080 +3 47682 48080 47778 +3 47683 47779 48081 +3 47683 48081 47998 +3 47684 47950 48275 +3 47684 48275 48206 +3 47685 48207 48276 +3 47685 48276 47951 +3 47686 48308 48306 +3 47687 48307 48309 +3 47688 47984 48375 +3 47688 48375 48076 +3 47689 48077 48376 +3 47689 48376 47985 +3 47690 47691 47784 +3 47690 47784 47735 +3 47691 47736 47784 +3 47692 47778 48039 +3 47692 48039 47936 +3 47693 47937 48040 +3 47693 48040 47779 +3 47694 48122 48121 +3 47695 47948 48072 +3 47695 48072 47797 +3 47696 47798 48073 +3 47696 48073 47949 +3 47697 48373 48486 +3 47697 48486 48064 +3 47698 48065 48487 +3 47698 48487 48374 +3 47699 47881 48593 +3 47699 48593 48425 +3 47700 48426 48594 +3 47700 48594 47882 +3 47701 47954 48466 +3 47701 48466 48173 +3 47702 48174 48467 +3 47702 48467 47955 +3 47703 47811 48005 +3 47703 48005 47891 +3 47704 47892 48006 +3 47704 48006 47812 +3 47705 48250 48532 +3 47705 48532 47988 +3 47706 47989 48533 +3 47706 48533 48251 +3 47707 47782 47978 +3 47707 47978 47900 +3 47708 47901 47979 +3 47708 47979 47783 +3 47709 48165 48258 +3 47709 48258 47770 +3 47710 47771 48259 +3 47710 48259 48166 +3 47711 47734 48327 +3 47711 48327 48265 +3 47712 48266 48328 +3 47712 48328 47734 +3 47713 47960 48544 +3 47713 48544 48317 +3 47714 48318 48545 +3 47714 48545 47961 +3 47715 48117 48383 +3 47715 48383 48116 +3 47716 48110 48384 +3 47716 48384 47966 +3 47717 47967 48385 +3 47717 48385 48111 +3 47718 47891 48013 +3 47718 48013 47840 +3 47719 47841 48014 +3 47719 48014 47892 +3 47720 48175 48453 +3 47720 48453 47958 +3 47721 47959 48454 +3 47721 48454 48176 +3 47722 47750 47805 +3 47722 47805 47743 +3 47723 47743 47806 +3 47723 47806 47751 +3 47724 48204 48058 +3 47725 48059 48205 +3 47726 47827 48185 +3 47726 48185 48094 +3 47727 48095 48186 +3 47727 48186 47828 +3 47728 47758 47813 +3 47728 47813 47750 +3 47729 47751 47814 +3 47729 47814 47759 +3 47730 48135 48226 +3 47730 48226 47809 +3 47731 47810 48227 +3 47731 48227 48136 +3 47732 48058 48351 +3 47732 48351 48017 +3 47733 48018 48352 +3 47733 48352 48059 +3 47734 48328 48327 +3 47735 47784 47817 +3 47735 47817 47758 +3 47736 47759 47818 +3 47736 47818 47784 +3 47737 47980 48431 +3 47737 48431 48177 +3 47738 48178 48432 +3 47738 48432 47981 +3 47739 47922 48025 +3 47739 48025 47848 +3 47740 47849 48026 +3 47740 48026 47923 +3 47741 48269 48503 +3 47741 48503 47976 +3 47742 47977 48504 +3 47742 48504 48270 +3 47743 47805 47806 +3 47744 47926 48488 +3 47744 48488 48300 +3 47745 48301 48489 +3 47745 48489 47927 +3 47746 47866 48031 +3 47746 48031 47922 +3 47747 47923 48032 +3 47747 48032 47867 +3 47748 47852 48333 +3 47748 48333 48202 +3 47749 48203 48334 +3 47749 48334 47853 +3 47750 47813 47805 +3 47751 47806 47814 +3 47752 48198 48514 +3 47752 48514 48048 +3 47753 48049 48515 +3 47753 48515 48199 +3 47754 47900 48011 +3 47754 48011 47850 +3 47755 47851 48012 +3 47755 48012 47901 +3 47756 47999 48171 +3 47756 48171 47934 +3 47757 47935 48172 +3 47757 48172 48000 +3 47758 47817 47813 +3 47759 47814 47818 +3 47760 48302 48407 +3 47760 48407 47836 +3 47761 47837 48408 +3 47761 48408 48303 +3 47762 48033 48161 +3 47762 48161 47898 +3 47763 47899 48162 +3 47763 48162 48034 +3 47764 47956 48423 +3 47764 48423 48224 +3 47765 48225 48424 +3 47765 48424 47957 +3 47766 47825 48363 +3 47766 48363 48279 +3 47767 48280 48364 +3 47767 48364 47826 +3 47768 48163 48323 +3 47768 48323 47911 +3 47769 47912 48324 +3 47769 48324 48164 +3 47770 48258 48285 +3 47770 48285 47771 +3 47771 48285 48259 +3 47772 47846 48321 +3 47772 48321 48216 +3 47773 48217 48322 +3 47773 48322 47847 +3 47774 48365 48653 +3 47774 48653 48086 +3 47775 48087 48654 +3 47775 48654 48366 +3 47776 47936 48125 +3 47776 48125 47948 +3 47777 47949 48126 +3 47777 48126 47937 +3 47778 48080 48039 +3 47779 48040 48081 +3 47780 48505 48605 +3 47780 48605 47986 +3 47781 47987 48606 +3 47781 48606 48506 +3 47782 47799 48043 +3 47782 48043 47978 +3 47783 47979 48044 +3 47783 48044 47799 +3 47784 47818 47817 +3 47785 48325 48623 +3 47785 48623 48078 +3 47786 48079 48624 +3 47786 48624 48326 +3 47787 48009 48640 +3 47787 48640 48427 +3 47788 48428 48641 +3 47788 48641 48010 +3 47789 48062 48538 +3 47789 48538 48247 +3 47790 48248 48539 +3 47790 48539 48063 +3 47791 48116 48460 +3 47791 48460 48110 +3 47792 48111 48461 +3 47792 48461 48117 +3 47793 48088 48311 +3 47793 48311 48007 +3 47794 48008 48312 +3 47794 48312 48089 +3 47795 47938 48232 +3 47795 48232 48090 +3 47796 48091 48233 +3 47796 48233 47939 +3 47797 48072 48159 +3 47797 48159 47864 +3 47798 47865 48160 +3 47798 48160 48073 +3 47799 48044 48043 +3 47800 48027 48386 +3 47800 48386 48149 +3 47801 48150 48387 +3 47801 48387 48028 +3 47802 48023 48315 +3 47802 48315 48088 +3 47803 48089 48316 +3 47803 48316 48024 +3 47804 48098 48249 +3 47804 48249 48099 +3 47805 47813 47831 +3 47805 47831 47806 +3 47806 47831 47814 +3 47807 48474 48556 +3 47807 48556 47881 +3 47808 47882 48557 +3 47808 48557 48475 +3 47809 48226 48263 +3 47809 48263 47827 +3 47810 47828 48264 +3 47810 48264 48227 +3 47811 47873 48070 +3 47811 48070 48005 +3 47812 48006 48071 +3 47812 48071 47874 +3 47813 47817 47831 +3 47814 47831 47818 +3 47815 48147 48673 +3 47815 48673 48353 +3 47816 48354 48674 +3 47816 48674 48148 +3 47817 47818 47831 +3 47819 48281 48480 +3 47819 48480 47995 +3 47820 47996 48481 +3 47820 48481 48282 +3 47821 48149 48402 +3 47821 48402 48060 +3 47822 48061 48403 +3 47822 48403 48150 +3 47823 48367 48390 +3 47823 48390 47825 +3 47824 47826 48391 +3 47824 48391 48368 +3 47825 48390 48363 +3 47826 48364 48391 +3 47827 48263 48185 +3 47828 48186 48264 +3 47829 48196 48793 +3 47829 48793 48429 +3 47830 48430 48794 +3 47830 48794 48197 +3 47832 48052 48739 +3 47832 48739 48530 +3 47833 48531 48740 +3 47833 48740 48053 +3 47834 47946 48222 +3 47834 48222 48092 +3 47835 48093 48223 +3 47835 48223 47947 +3 47836 48407 48462 +3 47836 48462 47877 +3 47837 47878 48463 +3 47837 48463 48408 +3 47838 48050 48241 +3 47838 48241 48033 +3 47839 48034 48242 +3 47839 48242 48051 +3 47840 48013 48047 +3 47840 48047 47841 +3 47841 48047 48014 +3 47842 47964 48319 +3 47842 48319 48179 +3 47843 48180 48320 +3 47843 48320 47965 +3 47844 48191 48476 +3 47844 48476 48102 +3 47845 48103 48477 +3 47845 48477 48192 +3 47846 47877 48458 +3 47846 48458 48321 +3 47847 48322 48459 +3 47847 48459 47878 +3 47848 48025 48084 +3 47848 48084 47887 +3 47849 47888 48085 +3 47849 48085 48026 +3 47850 48011 48066 +3 47850 48066 47896 +3 47851 47897 48067 +3 47851 48067 48012 +3 47852 47915 48405 +3 47852 48405 48333 +3 47853 48334 48406 +3 47853 48406 47916 +3 47854 47993 48337 +3 47854 48337 48167 +3 47855 48168 48338 +3 47855 48338 47994 +3 47856 48433 48687 +3 47856 48687 48123 +3 47857 48124 48688 +3 47857 48688 48434 +3 47858 47992 48183 +3 47858 48183 48050 +3 47859 48051 48184 +3 47859 48184 47992 +3 47860 48037 48638 +3 47860 48638 48464 +3 47861 48465 48639 +3 47861 48639 48038 +3 47862 48100 48239 +3 47862 48239 47997 +3 47863 47998 48240 +3 47863 48240 48101 +3 47864 48159 48187 +3 47864 48187 47893 +3 47865 47893 48188 +3 47865 48188 48160 +3 47866 47896 48074 +3 47866 48074 48031 +3 47867 48032 48075 +3 47867 48075 47897 +3 47868 48214 48457 +3 47868 48457 48215 +3 47869 48035 48601 +3 47869 48601 48421 +3 47870 48422 48602 +3 47870 48602 48036 +3 47871 48068 48451 +3 47871 48451 48220 +3 47872 48221 48452 +3 47872 48452 48069 +3 47873 47887 48104 +3 47873 48104 48070 +3 47874 48071 48105 +3 47874 48105 47888 +3 47875 48173 48599 +3 47875 48599 48198 +3 47876 48199 48600 +3 47876 48600 48174 +3 47877 48462 48458 +3 47878 48459 48463 +3 47879 48273 48437 +3 47879 48437 48019 +3 47880 48020 48438 +3 47880 48438 48274 +3 47881 48556 48593 +3 47882 48594 48557 +3 47883 48256 48455 +3 47883 48455 48054 +3 47884 48055 48456 +3 47884 48456 48257 +3 47885 48371 48609 +3 47885 48609 48106 +3 47886 48107 48610 +3 47886 48610 48372 +3 47887 48084 48104 +3 47888 48105 48085 +3 47889 48169 48642 +3 47889 48642 48349 +3 47890 48350 48643 +3 47890 48643 48170 +3 47891 48005 48133 +3 47891 48133 48013 +3 47892 48014 48134 +3 47892 48134 48006 +3 47893 48187 48188 +3 47894 48359 48665 +3 47894 48665 48175 +3 47895 48176 48666 +3 47895 48666 48360 +3 47896 48066 48074 +3 47897 48075 48067 +3 47898 48161 48252 +3 47898 48252 47962 +3 47899 47963 48253 +3 47899 48253 48162 +3 47900 47978 48114 +3 47900 48114 48011 +3 47901 48012 48115 +3 47901 48115 47979 +3 47902 47972 48634 +3 47902 48634 48470 +3 47903 48471 48635 +3 47903 48635 47973 +3 47904 48090 48313 +3 47904 48313 48098 +3 47905 48099 48314 +3 47905 48314 48091 +3 47906 48208 48392 +3 47906 48392 48056 +3 47907 48057 48393 +3 47907 48393 48209 +3 47908 48219 48404 +3 47908 48404 48218 +3 47909 48283 48611 +3 47909 48611 48195 +3 47910 48195 48612 +3 47910 48612 48284 +3 47911 48323 48419 +3 47911 48419 47915 +3 47912 47916 48420 +3 47912 48420 48324 +3 47913 48200 48603 +3 47913 48603 48283 +3 47914 48284 48604 +3 47914 48604 48201 +3 47915 48419 48405 +3 47916 48406 48420 +3 47917 48358 48652 +3 47917 48652 48357 +3 47918 48247 48681 +3 47918 48681 48359 +3 47919 48360 48682 +3 47919 48682 48248 +3 47920 48092 48277 +3 47920 48277 48100 +3 47921 48101 48278 +3 47921 48278 48093 +3 47922 48031 48153 +3 47922 48153 48025 +3 47923 48026 48154 +3 47923 48154 48032 +3 47924 48139 48585 +3 47924 48585 48341 +3 47925 48342 48586 +3 47925 48586 48140 +3 47926 48015 48613 +3 47926 48613 48488 +3 47927 48489 48614 +3 47927 48614 48016 +3 47928 48369 48689 +3 47928 48689 48250 +3 47929 48251 48690 +3 47929 48690 48370 +3 47930 48177 48572 +3 47930 48572 48290 +3 47931 48291 48573 +3 47931 48573 48178 +3 47932 48029 48779 +3 47932 48779 48568 +3 47933 48569 48780 +3 47933 48780 48030 +3 47934 48171 48335 +3 47934 48335 48045 +3 47935 48046 48336 +3 47935 48336 48172 +3 47936 48039 48261 +3 47936 48261 48125 +3 47937 48126 48262 +3 47937 48262 48040 +3 47938 48094 48400 +3 47938 48400 48232 +3 47939 48233 48401 +3 47939 48401 48095 +3 47940 48220 48528 +3 47940 48528 48214 +3 47941 48215 48529 +3 47941 48529 48221 +3 47942 48361 48576 +3 47942 48576 48141 +3 47943 48142 48577 +3 47943 48577 48362 +3 47944 48415 48775 +3 47944 48775 48325 +3 47945 48326 48776 +3 47945 48776 48416 +3 47946 48001 48292 +3 47946 48292 48222 +3 47947 48223 48293 +3 47947 48293 48002 +3 47948 48125 48288 +3 47948 48288 48072 +3 47949 48073 48289 +3 47949 48289 48126 +3 47950 48290 48617 +3 47950 48617 48275 +3 47951 48276 48618 +3 47951 48618 48291 +3 47952 48353 48797 +3 47952 48797 48415 +3 47953 48416 48798 +3 47953 48798 48354 +3 47954 48145 48646 +3 47954 48646 48466 +3 47955 48467 48647 +3 47955 48647 48146 +3 47956 48108 48574 +3 47956 48574 48423 +3 47957 48424 48575 +3 47957 48575 48109 +3 47958 48453 48636 +3 47958 48636 48129 +3 47959 48130 48637 +3 47959 48637 48454 +3 47960 48294 48843 +3 47960 48843 48544 +3 47961 48545 48844 +3 47961 48844 48295 +3 47962 48252 48296 +3 47962 48296 48001 +3 47963 48002 48297 +3 47963 48297 48253 +3 47964 48045 48411 +3 47964 48411 48319 +3 47965 48320 48412 +3 47965 48412 48046 +3 47966 48384 48589 +3 47966 48589 48157 +3 47967 48158 48590 +3 47967 48590 48385 +3 47968 48349 48813 +3 47968 48813 48369 +3 47969 48370 48814 +3 47969 48814 48350 +3 47970 48243 48737 +3 47970 48737 48492 +3 47971 48493 48738 +3 47971 48738 48244 +3 47972 48041 48707 +3 47972 48707 48634 +3 47973 48635 48708 +3 47973 48708 48042 +3 47974 48218 48490 +3 47974 48490 48208 +3 47975 48209 48491 +3 47975 48491 48219 +3 47976 48503 48657 +3 47976 48657 48143 +3 47977 48144 48658 +3 47977 48658 48504 +3 47978 48043 48189 +3 47978 48189 48114 +3 47979 48115 48190 +3 47979 48190 48044 +3 47980 48155 48607 +3 47980 48607 48431 +3 47981 48432 48608 +3 47981 48608 48156 +3 47982 48429 48789 +3 47982 48789 48346 +3 47983 48346 48790 +3 47983 48790 48430 +3 47984 48224 48619 +3 47984 48619 48375 +3 47985 48376 48620 +3 47985 48620 48225 +3 47986 48605 48761 +3 47986 48761 48151 +3 47987 48152 48762 +3 47987 48762 48606 +3 47988 48532 48751 +3 47988 48751 48212 +3 47989 48213 48752 +3 47989 48752 48533 +3 47990 48357 48730 +3 47990 48730 48365 +3 47991 48366 48731 +3 47991 48731 48358 +3 47992 48184 48310 +3 47992 48310 48183 +3 47993 48082 48441 +3 47993 48441 48337 +3 47994 48338 48442 +3 47994 48442 48083 +3 47995 48480 48626 +3 47995 48626 48119 +3 47996 48120 48627 +3 47996 48627 48481 +3 47997 48239 48344 +3 47997 48344 48080 +3 47998 48081 48345 +3 47998 48345 48240 +3 47999 48167 48409 +3 47999 48409 48171 +3 48000 48172 48410 +3 48000 48410 48168 +3 48001 48296 48292 +3 48002 48293 48297 +3 48003 48435 48699 +3 48003 48699 48269 +3 48004 48270 48700 +3 48004 48700 48436 +3 48005 48070 48230 +3 48005 48230 48133 +3 48006 48134 48231 +3 48006 48231 48071 +3 48007 48311 48482 +3 48007 48482 48135 +3 48008 48136 48483 +3 48008 48483 48312 +3 48009 48131 48801 +3 48009 48801 48640 +3 48010 48641 48802 +3 48010 48802 48132 +3 48011 48114 48193 +3 48011 48193 48066 +3 48012 48067 48194 +3 48012 48194 48115 +3 48013 48133 48181 +3 48013 48181 48047 +3 48014 48047 48182 +3 48014 48182 48134 +3 48015 48341 48679 +3 48015 48679 48613 +3 48016 48614 48680 +3 48016 48680 48342 +3 48017 48351 48587 +3 48017 48587 48256 +3 48018 48257 48588 +3 48018 48588 48352 +3 48019 48437 48552 +3 48019 48552 48127 +3 48020 48128 48553 +3 48020 48553 48438 +3 48021 48317 48799 +3 48021 48799 48516 +3 48022 48517 48800 +3 48022 48800 48318 +3 48023 48179 48501 +3 48023 48501 48315 +3 48024 48316 48502 +3 48024 48502 48180 +3 48025 48153 48237 +3 48025 48237 48084 +3 48026 48085 48238 +3 48026 48238 48154 +3 48027 48202 48595 +3 48027 48595 48386 +3 48028 48387 48596 +3 48028 48596 48203 +3 48029 48096 48849 +3 48029 48849 48779 +3 48030 48780 48850 +3 48030 48850 48097 +3 48031 48074 48228 +3 48031 48228 48153 +3 48032 48154 48229 +3 48032 48229 48075 +3 48033 48241 48394 +3 48033 48394 48161 +3 48034 48162 48395 +3 48034 48395 48242 +3 48035 48112 48701 +3 48035 48701 48601 +3 48036 48602 48702 +3 48036 48702 48113 +3 48037 48137 48767 +3 48037 48767 48638 +3 48038 48639 48768 +3 48038 48768 48138 +3 48039 48080 48339 +3 48039 48339 48261 +3 48040 48262 48340 +3 48040 48340 48081 +3 48041 48042 48732 +3 48041 48732 48707 +3 48042 48708 48732 +3 48043 48044 48236 +3 48043 48236 48189 +3 48044 48190 48236 +3 48045 48335 48411 +3 48046 48412 48336 +3 48047 48181 48182 +3 48048 48514 48728 +3 48048 48728 48281 +3 48049 48282 48729 +3 48049 48729 48515 +3 48050 48183 48413 +3 48050 48413 48241 +3 48051 48242 48414 +3 48051 48414 48184 +3 48052 48210 48917 +3 48052 48917 48739 +3 48053 48740 48918 +3 48053 48918 48211 +3 48054 48455 48578 +3 48054 48578 48165 +3 48055 48166 48579 +3 48055 48579 48456 +3 48056 48392 48526 +3 48056 48526 48163 +3 48057 48164 48527 +3 48057 48527 48393 +3 48058 48204 48521 +3 48058 48521 48351 +3 48059 48352 48522 +3 48059 48522 48205 +3 48060 48402 48621 +3 48060 48621 48273 +3 48061 48274 48622 +3 48061 48622 48403 +3 48062 48300 48757 +3 48062 48757 48538 +3 48063 48539 48758 +3 48063 48758 48301 +3 48064 48486 48787 +3 48064 48787 48371 +3 48065 48372 48788 +3 48065 48788 48487 +3 48066 48193 48245 +3 48066 48245 48074 +3 48067 48075 48246 +3 48067 48246 48194 +3 48068 48216 48615 +3 48068 48615 48451 +3 48069 48452 48616 +3 48069 48616 48217 +3 48070 48104 48267 +3 48070 48267 48230 +3 48071 48231 48268 +3 48071 48268 48105 +3 48072 48288 48396 +3 48072 48396 48159 +3 48073 48160 48397 +3 48073 48397 48289 +3 48074 48245 48228 +3 48075 48229 48246 +3 48076 48375 48685 +3 48076 48685 48361 +3 48077 48362 48686 +3 48077 48686 48376 +3 48078 48623 48841 +3 48078 48841 48298 +3 48079 48299 48842 +3 48079 48842 48624 +3 48080 48344 48339 +3 48081 48340 48345 +3 48082 48121 48507 +3 48082 48507 48441 +3 48083 48442 48508 +3 48083 48508 48122 +3 48084 48237 48271 +3 48084 48271 48104 +3 48085 48105 48272 +3 48085 48272 48238 +3 48086 48653 48893 +3 48086 48893 48329 +3 48087 48330 48894 +3 48087 48894 48654 +3 48088 48315 48540 +3 48088 48540 48311 +3 48089 48312 48541 +3 48089 48541 48316 +3 48090 48232 48484 +3 48090 48484 48313 +3 48091 48314 48485 +3 48091 48485 48233 +3 48092 48222 48443 +3 48092 48443 48277 +3 48093 48278 48444 +3 48093 48444 48223 +3 48094 48185 48523 +3 48094 48523 48400 +3 48095 48401 48524 +3 48095 48524 48186 +3 48096 48118 48919 +3 48096 48919 48849 +3 48097 48850 48920 +3 48097 48920 48118 +3 48098 48313 48495 +3 48098 48495 48249 +3 48099 48249 48496 +3 48099 48496 48314 +3 48100 48277 48445 +3 48100 48445 48239 +3 48101 48240 48446 +3 48101 48446 48278 +3 48102 48476 48807 +3 48102 48807 48435 +3 48103 48436 48808 +3 48103 48808 48477 +3 48104 48271 48267 +3 48105 48268 48272 +3 48106 48609 48936 +3 48106 48936 48433 +3 48107 48434 48937 +3 48107 48937 48610 +3 48108 48206 48675 +3 48108 48675 48574 +3 48109 48575 48676 +3 48109 48676 48207 +3 48110 48460 48726 +3 48110 48726 48384 +3 48111 48385 48727 +3 48111 48727 48461 +3 48112 48151 48763 +3 48112 48763 48701 +3 48113 48702 48764 +3 48113 48764 48152 +3 48114 48189 48331 +3 48114 48331 48193 +3 48115 48194 48332 +3 48115 48332 48190 +3 48116 48383 48720 +3 48116 48720 48460 +3 48117 48461 48721 +3 48117 48721 48383 +3 48118 48920 48919 +3 48119 48626 48718 +3 48119 48718 48191 +3 48120 48192 48719 +3 48120 48719 48627 +3 48121 48122 48520 +3 48121 48520 48507 +3 48122 48508 48520 +3 48123 48687 48909 +3 48123 48909 48355 +3 48124 48356 48910 +3 48124 48910 48688 +3 48125 48261 48449 +3 48125 48449 48288 +3 48126 48289 48450 +3 48126 48450 48262 +3 48127 48552 48632 +3 48127 48632 48204 +3 48128 48205 48633 +3 48128 48633 48553 +3 48129 48636 48755 +3 48129 48755 48254 +3 48130 48255 48756 +3 48130 48756 48637 +3 48131 48516 48899 +3 48131 48899 48801 +3 48132 48802 48900 +3 48132 48900 48517 +3 48133 48230 48304 +3 48133 48304 48181 +3 48134 48182 48305 +3 48134 48305 48231 +3 48135 48482 48580 +3 48135 48580 48226 +3 48136 48227 48581 +3 48136 48581 48483 +3 48137 48306 48837 +3 48137 48837 48767 +3 48138 48768 48838 +3 48138 48838 48307 +3 48139 48492 48901 +3 48139 48901 48585 +3 48140 48586 48902 +3 48140 48902 48493 +3 48141 48576 48741 +3 48141 48741 48302 +3 48142 48303 48742 +3 48142 48742 48577 +3 48143 48657 48773 +3 48143 48773 48234 +3 48144 48235 48774 +3 48144 48774 48658 +3 48145 48279 48815 +3 48145 48815 48646 +3 48146 48647 48816 +3 48146 48816 48280 +3 48147 48427 48954 +3 48147 48954 48673 +3 48148 48674 48955 +3 48148 48955 48428 +3 48149 48386 48659 +3 48149 48659 48402 +3 48150 48403 48660 +3 48150 48660 48387 +3 48151 48761 48763 +3 48152 48764 48762 +3 48153 48228 48347 +3 48153 48347 48237 +3 48154 48238 48348 +3 48154 48348 48229 +3 48155 48265 48716 +3 48155 48716 48607 +3 48156 48608 48717 +3 48156 48717 48266 +3 48157 48589 48724 +3 48157 48724 48286 +3 48158 48287 48725 +3 48158 48725 48590 +3 48159 48396 48468 +3 48159 48468 48187 +3 48160 48188 48469 +3 48160 48469 48397 +3 48161 48394 48499 +3 48161 48499 48252 +3 48162 48253 48500 +3 48162 48500 48395 +3 48163 48526 48667 +3 48163 48667 48323 +3 48164 48324 48668 +3 48164 48668 48527 +3 48165 48578 48655 +3 48165 48655 48258 +3 48166 48259 48656 +3 48166 48656 48579 +3 48167 48337 48583 +3 48167 48583 48409 +3 48168 48410 48584 +3 48168 48584 48338 +3 48169 48421 48882 +3 48169 48882 48642 +3 48170 48643 48883 +3 48170 48883 48422 +3 48171 48409 48562 +3 48171 48562 48335 +3 48172 48336 48563 +3 48172 48563 48410 +3 48173 48466 48856 +3 48173 48856 48599 +3 48174 48600 48857 +3 48174 48857 48467 +3 48175 48665 48934 +3 48175 48934 48453 +3 48176 48454 48935 +3 48176 48935 48666 +3 48177 48431 48803 +3 48177 48803 48572 +3 48178 48573 48804 +3 48178 48804 48432 +3 48179 48319 48628 +3 48179 48628 48501 +3 48180 48502 48629 +3 48180 48629 48320 +3 48181 48304 48343 +3 48181 48343 48182 +3 48182 48343 48305 +3 48183 48310 48534 +3 48183 48534 48413 +3 48184 48414 48535 +3 48184 48535 48310 +3 48185 48263 48597 +3 48185 48597 48523 +3 48186 48524 48598 +3 48186 48598 48264 +3 48187 48468 48494 +3 48187 48494 48188 +3 48188 48494 48469 +3 48189 48236 48377 +3 48189 48377 48331 +3 48190 48332 48378 +3 48190 48378 48236 +3 48191 48718 48785 +3 48191 48785 48476 +3 48192 48477 48786 +3 48192 48786 48719 +3 48193 48331 48379 +3 48193 48379 48245 +3 48194 48246 48380 +3 48194 48380 48332 +3 48195 48611 48851 +3 48195 48851 48612 +3 48196 48530 49073 +3 48196 49073 48793 +3 48197 48794 49074 +3 48197 49074 48531 +3 48198 48599 48870 +3 48198 48870 48514 +3 48199 48515 48871 +3 48199 48871 48600 +3 48200 48464 48854 +3 48200 48854 48603 +3 48201 48604 48855 +3 48201 48855 48465 +3 48202 48333 48722 +3 48202 48722 48595 +3 48203 48596 48723 +3 48203 48723 48334 +3 48204 48632 48521 +3 48205 48522 48633 +3 48206 48275 48745 +3 48206 48745 48675 +3 48207 48676 48746 +3 48207 48746 48276 +3 48208 48490 48663 +3 48208 48663 48392 +3 48209 48393 48664 +3 48209 48664 48491 +3 48210 48425 49003 +3 48210 49003 48917 +3 48211 48918 49004 +3 48211 49004 48426 +3 48212 48751 48927 +3 48212 48927 48373 +3 48213 48374 48928 +3 48213 48928 48752 +3 48214 48528 48759 +3 48214 48759 48457 +3 48215 48457 48760 +3 48215 48760 48529 +3 48216 48321 48711 +3 48216 48711 48615 +3 48217 48616 48712 +3 48217 48712 48322 +3 48218 48404 48669 +3 48218 48669 48490 +3 48219 48491 48670 +3 48219 48670 48404 +3 48220 48451 48747 +3 48220 48747 48528 +3 48221 48529 48748 +3 48221 48748 48452 +3 48222 48292 48536 +3 48222 48536 48443 +3 48223 48444 48537 +3 48223 48537 48293 +3 48224 48423 48817 +3 48224 48817 48619 +3 48225 48620 48818 +3 48225 48818 48424 +3 48226 48580 48630 +3 48226 48630 48263 +3 48227 48264 48631 +3 48227 48631 48581 +3 48228 48245 48388 +3 48228 48388 48347 +3 48229 48348 48389 +3 48229 48389 48246 +3 48230 48267 48381 +3 48230 48381 48304 +3 48231 48305 48382 +3 48231 48382 48268 +3 48232 48400 48648 +3 48232 48648 48484 +3 48233 48485 48649 +3 48233 48649 48401 +3 48234 48773 48830 +3 48234 48830 48260 +3 48235 48260 48831 +3 48235 48831 48774 +3 48236 48378 48377 +3 48237 48347 48398 +3 48237 48398 48271 +3 48238 48272 48399 +3 48238 48399 48348 +3 48239 48445 48546 +3 48239 48546 48344 +3 48240 48345 48547 +3 48240 48547 48446 +3 48241 48413 48564 +3 48241 48564 48394 +3 48242 48395 48565 +3 48242 48565 48414 +3 48243 48470 48966 +3 48243 48966 48737 +3 48244 48738 48967 +3 48244 48967 48471 +3 48245 48379 48388 +3 48246 48389 48380 +3 48247 48538 48972 +3 48247 48972 48681 +3 48248 48682 48973 +3 48248 48973 48539 +3 48249 48495 48625 +3 48249 48625 48496 +3 48250 48689 48976 +3 48250 48976 48532 +3 48251 48533 48977 +3 48251 48977 48690 +3 48252 48499 48548 +3 48252 48548 48296 +3 48253 48297 48549 +3 48253 48549 48500 +3 48254 48755 48833 +3 48254 48833 48308 +3 48255 48309 48834 +3 48255 48834 48756 +3 48256 48587 48765 +3 48256 48765 48455 +3 48257 48456 48766 +3 48257 48766 48588 +3 48258 48655 48705 +3 48258 48705 48285 +3 48259 48285 48706 +3 48259 48706 48656 +3 48260 48830 48831 +3 48261 48339 48542 +3 48261 48542 48449 +3 48262 48450 48543 +3 48262 48543 48340 +3 48263 48630 48597 +3 48264 48598 48631 +3 48265 48327 48805 +3 48265 48805 48716 +3 48266 48717 48806 +3 48266 48806 48328 +3 48267 48271 48417 +3 48267 48417 48381 +3 48268 48382 48418 +3 48268 48418 48272 +3 48269 48699 48931 +3 48269 48931 48503 +3 48270 48504 48932 +3 48270 48932 48700 +3 48271 48398 48417 +3 48272 48418 48399 +3 48273 48621 48777 +3 48273 48777 48437 +3 48274 48438 48778 +3 48274 48778 48622 +3 48275 48617 48745 +3 48276 48746 48618 +3 48277 48443 48591 +3 48277 48591 48445 +3 48278 48446 48592 +3 48278 48592 48444 +3 48279 48363 48907 +3 48279 48907 48815 +3 48280 48816 48908 +3 48280 48908 48364 +3 48281 48728 48929 +3 48281 48929 48480 +3 48282 48481 48930 +3 48282 48930 48729 +3 48283 48603 48923 +3 48283 48923 48611 +3 48284 48612 48924 +3 48284 48924 48604 +3 48285 48705 48706 +3 48286 48724 48823 +3 48286 48823 48367 +3 48287 48368 48824 +3 48287 48824 48725 +3 48288 48449 48570 +3 48288 48570 48396 +3 48289 48397 48571 +3 48289 48571 48450 +3 48290 48572 48874 +3 48290 48874 48617 +3 48291 48618 48875 +3 48291 48875 48573 +3 48292 48296 48560 +3 48292 48560 48536 +3 48293 48537 48561 +3 48293 48561 48297 +3 48294 48568 49096 +3 48294 49096 48843 +3 48295 48844 49097 +3 48295 49097 48569 +3 48296 48548 48560 +3 48297 48561 48549 +3 48298 48841 48999 +3 48298 48999 48474 +3 48299 48475 49000 +3 48299 49000 48842 +3 48300 48488 48952 +3 48300 48952 48757 +3 48301 48758 48953 +3 48301 48953 48489 +3 48302 48741 48860 +3 48302 48860 48407 +3 48303 48408 48861 +3 48303 48861 48742 +3 48304 48381 48447 +3 48304 48447 48343 +3 48305 48343 48448 +3 48305 48448 48382 +3 48306 48308 48858 +3 48306 48858 48837 +3 48307 48838 48859 +3 48307 48859 48309 +3 48308 48833 48858 +3 48309 48859 48834 +3 48310 48535 48534 +3 48311 48540 48709 +3 48311 48709 48482 +3 48312 48483 48710 +3 48312 48710 48541 +3 48313 48484 48661 +3 48313 48661 48495 +3 48314 48496 48662 +3 48314 48662 48485 +3 48315 48501 48714 +3 48315 48714 48540 +3 48316 48541 48715 +3 48316 48715 48502 +3 48317 48544 49007 +3 48317 49007 48799 +3 48318 48800 49008 +3 48318 49008 48545 +3 48319 48411 48695 +3 48319 48695 48628 +3 48320 48629 48696 +3 48320 48696 48412 +3 48321 48458 48845 +3 48321 48845 48711 +3 48322 48712 48846 +3 48322 48846 48459 +3 48323 48667 48781 +3 48323 48781 48419 +3 48324 48420 48782 +3 48324 48782 48668 +3 48325 48775 49055 +3 48325 49055 48623 +3 48326 48624 49056 +3 48326 49056 48776 +3 48327 48328 48832 +3 48327 48832 48805 +3 48328 48806 48832 +3 48329 48893 49065 +3 48329 49065 48505 +3 48330 48506 49066 +3 48330 49066 48894 +3 48331 48377 48472 +3 48331 48472 48379 +3 48332 48380 48473 +3 48332 48473 48378 +3 48333 48405 48809 +3 48333 48809 48722 +3 48334 48723 48810 +3 48334 48810 48406 +3 48335 48562 48650 +3 48335 48650 48411 +3 48336 48412 48651 +3 48336 48651 48563 +3 48337 48441 48691 +3 48337 48691 48583 +3 48338 48584 48692 +3 48338 48692 48442 +3 48339 48344 48566 +3 48339 48566 48542 +3 48340 48543 48567 +3 48340 48567 48345 +3 48341 48585 48947 +3 48341 48947 48679 +3 48342 48680 48948 +3 48342 48948 48586 +3 48343 48447 48448 +3 48344 48546 48566 +3 48345 48567 48547 +3 48346 48789 49070 +3 48346 49070 48790 +3 48347 48388 48478 +3 48347 48478 48398 +3 48348 48399 48479 +3 48348 48479 48389 +3 48349 48642 49098 +3 48349 49098 48813 +3 48350 48814 49099 +3 48350 49099 48643 +3 48351 48521 48769 +3 48351 48769 48587 +3 48352 48588 48770 +3 48352 48770 48522 +3 48353 48673 49102 +3 48353 49102 48797 +3 48354 48798 49103 +3 48354 49103 48674 +3 48355 48909 49059 +3 48355 49059 48439 +3 48356 48440 49060 +3 48356 49060 48910 +3 48357 48652 49023 +3 48357 49023 48730 +3 48358 48731 49024 +3 48358 49024 48652 +3 48359 48681 49045 +3 48359 49045 48665 +3 48360 48666 49046 +3 48360 49046 48682 +3 48361 48685 48921 +3 48361 48921 48576 +3 48362 48577 48922 +3 48362 48922 48686 +3 48363 48390 48962 +3 48363 48962 48907 +3 48364 48908 48963 +3 48364 48963 48391 +3 48365 48730 49015 +3 48365 49015 48653 +3 48366 48654 49016 +3 48366 49016 48731 +3 48367 48823 48960 +3 48367 48960 48390 +3 48368 48391 48961 +3 48368 48961 48824 +3 48369 48813 49114 +3 48369 49114 48689 +3 48370 48690 49115 +3 48370 49115 48814 +3 48371 48787 49005 +3 48371 49005 48609 +3 48372 48610 49006 +3 48372 49006 48788 +3 48373 48927 49031 +3 48373 49031 48486 +3 48374 48487 49032 +3 48374 49032 48928 +3 48375 48619 48938 +3 48375 48938 48685 +3 48376 48686 48939 +3 48376 48939 48620 +3 48377 48378 48509 +3 48377 48509 48472 +3 48378 48473 48509 +3 48379 48472 48512 +3 48379 48512 48388 +3 48380 48389 48513 +3 48380 48513 48473 +3 48381 48417 48497 +3 48381 48497 48447 +3 48382 48448 48498 +3 48382 48498 48418 +3 48383 48721 48951 +3 48383 48951 48720 +3 48384 48726 48949 +3 48384 48949 48589 +3 48385 48590 48950 +3 48385 48950 48727 +3 48386 48595 48876 +3 48386 48876 48659 +3 48387 48660 48877 +3 48387 48877 48596 +3 48388 48512 48478 +3 48389 48479 48513 +3 48390 48960 48962 +3 48391 48963 48961 +3 48392 48663 48811 +3 48392 48811 48526 +3 48393 48527 48812 +3 48393 48812 48664 +3 48394 48564 48671 +3 48394 48671 48499 +3 48395 48500 48672 +3 48395 48672 48565 +3 48396 48570 48644 +3 48396 48644 48468 +3 48397 48469 48645 +3 48397 48645 48571 +3 48398 48478 48518 +3 48398 48518 48417 +3 48399 48418 48519 +3 48399 48519 48479 +3 48400 48523 48791 +3 48400 48791 48648 +3 48401 48649 48792 +3 48401 48792 48524 +3 48402 48659 48880 +3 48402 48880 48621 +3 48403 48622 48881 +3 48403 48881 48660 +3 48404 48670 48825 +3 48404 48825 48669 +3 48405 48419 48835 +3 48405 48835 48809 +3 48406 48810 48836 +3 48406 48836 48420 +3 48407 48860 48941 +3 48407 48941 48462 +3 48408 48463 48942 +3 48408 48942 48861 +3 48409 48583 48749 +3 48409 48749 48562 +3 48410 48563 48750 +3 48410 48750 48584 +3 48411 48650 48695 +3 48412 48696 48651 +3 48413 48534 48683 +3 48413 48683 48564 +3 48414 48565 48684 +3 48414 48684 48535 +3 48415 48797 49224 +3 48415 49224 48775 +3 48416 48776 49225 +3 48416 49225 48798 +3 48417 48518 48497 +3 48418 48498 48519 +3 48419 48781 48835 +3 48420 48836 48782 +3 48421 48601 49061 +3 48421 49061 48882 +3 48422 48883 49062 +3 48422 49062 48602 +3 48423 48574 48968 +3 48423 48968 48817 +3 48424 48818 48969 +3 48424 48969 48575 +3 48425 48593 49167 +3 48425 49167 49003 +3 48426 49004 49168 +3 48426 49168 48594 +3 48427 48640 49161 +3 48427 49161 48954 +3 48428 48955 49162 +3 48428 49162 48641 +3 48429 48793 49143 +3 48429 49143 48789 +3 48430 48790 49144 +3 48430 49144 48794 +3 48431 48607 48982 +3 48431 48982 48803 +3 48432 48804 48983 +3 48432 48983 48608 +3 48433 48936 49180 +3 48433 49180 48687 +3 48434 48688 49181 +3 48434 49181 48937 +3 48435 48807 49053 +3 48435 49053 48699 +3 48436 48700 49054 +3 48436 49054 48808 +3 48437 48777 48884 +3 48437 48884 48552 +3 48438 48553 48885 +3 48438 48885 48778 +3 48439 49059 49139 +3 48439 49139 48510 +3 48440 48511 49140 +3 48440 49140 49060 +3 48441 48507 48783 +3 48441 48783 48691 +3 48442 48692 48784 +3 48442 48784 48508 +3 48443 48536 48693 +3 48443 48693 48591 +3 48444 48592 48694 +3 48444 48694 48537 +3 48445 48591 48697 +3 48445 48697 48546 +3 48446 48547 48698 +3 48446 48698 48592 +3 48447 48497 48525 +3 48447 48525 48448 +3 48448 48525 48498 +3 48449 48542 48677 +3 48449 48677 48570 +3 48450 48571 48678 +3 48450 48678 48543 +3 48451 48615 48925 +3 48451 48925 48747 +3 48452 48748 48926 +3 48452 48926 48616 +3 48453 48934 49106 +3 48453 49106 48636 +3 48454 48637 49107 +3 48454 49107 48935 +3 48455 48765 48903 +3 48455 48903 48578 +3 48456 48579 48904 +3 48456 48904 48766 +3 48457 48759 48940 +3 48457 48940 48760 +3 48458 48462 48958 +3 48458 48958 48845 +3 48459 48846 48959 +3 48459 48959 48463 +3 48460 48720 49001 +3 48460 49001 48726 +3 48461 48727 49002 +3 48461 49002 48721 +3 48462 48941 48958 +3 48463 48959 48942 +3 48464 48638 49037 +3 48464 49037 48854 +3 48465 48855 49038 +3 48465 49038 48639 +3 48466 48646 49063 +3 48466 49063 48856 +3 48467 48857 49064 +3 48467 49064 48647 +3 48468 48644 48703 +3 48468 48703 48494 +3 48469 48494 48704 +3 48469 48704 48645 +3 48470 48634 49118 +3 48470 49118 48966 +3 48471 48967 49119 +3 48471 49119 48635 +3 48472 48509 48550 +3 48472 48550 48512 +3 48473 48513 48551 +3 48473 48551 48509 +3 48474 48999 49110 +3 48474 49110 48556 +3 48475 48557 49111 +3 48475 49111 49000 +3 48476 48785 49088 +3 48476 49088 48807 +3 48477 48808 49089 +3 48477 49089 48786 +3 48478 48512 48554 +3 48478 48554 48518 +3 48479 48519 48555 +3 48479 48555 48513 +3 48480 48929 49057 +3 48480 49057 48626 +3 48481 48627 49058 +3 48481 49058 48930 +3 48482 48709 48839 +3 48482 48839 48580 +3 48483 48581 48840 +3 48483 48840 48710 +3 48484 48648 48852 +3 48484 48852 48661 +3 48485 48662 48853 +3 48485 48853 48649 +3 48486 49031 49112 +3 48486 49112 48787 +3 48487 48788 49113 +3 48487 49113 49032 +3 48488 48613 49075 +3 48488 49075 48952 +3 48489 48953 49076 +3 48489 49076 48614 +3 48490 48669 48878 +3 48490 48878 48663 +3 48491 48664 48879 +3 48491 48879 48670 +3 48492 48737 49159 +3 48492 49159 48901 +3 48493 48902 49160 +3 48493 49160 48738 +3 48494 48703 48704 +3 48495 48661 48821 +3 48495 48821 48625 +3 48496 48625 48822 +3 48496 48822 48662 +3 48497 48518 48558 +3 48497 48558 48525 +3 48498 48525 48559 +3 48498 48559 48519 +3 48499 48671 48735 +3 48499 48735 48548 +3 48500 48549 48736 +3 48500 48736 48672 +3 48501 48628 48847 +3 48501 48847 48714 +3 48502 48715 48848 +3 48502 48848 48629 +3 48503 48931 49080 +3 48503 49080 48657 +3 48504 48658 49081 +3 48504 49081 48932 +3 48505 49065 49208 +3 48505 49208 48605 +3 48506 48606 49209 +3 48506 49209 49066 +3 48507 48520 48826 +3 48507 48826 48783 +3 48508 48784 48827 +3 48508 48827 48520 +3 48509 48551 48550 +3 48510 49139 49166 +3 48510 49166 48511 +3 48511 49166 49140 +3 48512 48550 48554 +3 48513 48555 48551 +3 48514 48870 49092 +3 48514 49092 48728 +3 48515 48729 49093 +3 48515 49093 48871 +3 48516 48799 49206 +3 48516 49206 48899 +3 48517 48900 49207 +3 48517 49207 48800 +3 48518 48554 48558 +3 48519 48559 48555 +3 48520 48827 48826 +3 48521 48632 48897 +3 48521 48897 48769 +3 48522 48770 48898 +3 48522 48898 48633 +3 48523 48597 48864 +3 48523 48864 48791 +3 48524 48792 48865 +3 48524 48865 48598 +3 48525 48558 48559 +3 48526 48811 48970 +3 48526 48970 48667 +3 48527 48668 48971 +3 48527 48971 48812 +3 48528 48747 48995 +3 48528 48995 48759 +3 48529 48760 48996 +3 48529 48996 48748 +3 48530 48739 49300 +3 48530 49300 49073 +3 48531 49074 49301 +3 48531 49301 48740 +3 48532 48976 49204 +3 48532 49204 48751 +3 48533 48752 49205 +3 48533 49205 48977 +3 48534 48535 48713 +3 48534 48713 48683 +3 48535 48684 48713 +3 48536 48560 48753 +3 48536 48753 48693 +3 48537 48694 48754 +3 48537 48754 48561 +3 48538 48757 49194 +3 48538 49194 48972 +3 48539 48973 49195 +3 48539 49195 48758 +3 48540 48714 48890 +3 48540 48890 48709 +3 48541 48710 48891 +3 48541 48891 48715 +3 48542 48566 48733 +3 48542 48733 48677 +3 48543 48678 48734 +3 48543 48734 48567 +3 48544 48843 49322 +3 48544 49322 49007 +3 48545 49008 49323 +3 48545 49323 48844 +3 48546 48697 48743 +3 48546 48743 48566 +3 48547 48567 48744 +3 48547 48744 48698 +3 48548 48735 48771 +3 48548 48771 48560 +3 48549 48561 48772 +3 48549 48772 48736 +3 48550 48551 48582 +3 48550 48582 48554 +3 48551 48555 48582 +3 48552 48884 48980 +3 48552 48980 48632 +3 48553 48633 48981 +3 48553 48981 48885 +3 48554 48582 48558 +3 48555 48559 48582 +3 48556 49110 49169 +3 48556 49169 48593 +3 48557 48594 49170 +3 48557 49170 49111 +3 48558 48582 48559 +3 48560 48771 48753 +3 48561 48754 48772 +3 48562 48749 48872 +3 48562 48872 48650 +3 48563 48651 48873 +3 48563 48873 48750 +3 48564 48683 48819 +3 48564 48819 48671 +3 48565 48672 48820 +3 48565 48820 48684 +3 48566 48743 48733 +3 48567 48734 48744 +3 48568 48779 49306 +3 48568 49306 49096 +3 48569 49097 49307 +3 48569 49307 48780 +3 48570 48677 48795 +3 48570 48795 48644 +3 48571 48645 48796 +3 48571 48796 48678 +3 48572 48803 49094 +3 48572 49094 48874 +3 48573 48875 49095 +3 48573 49095 48804 +3 48574 48675 49067 +3 48574 49067 48968 +3 48575 48969 49068 +3 48575 49068 48676 +3 48576 48921 49100 +3 48576 49100 48741 +3 48577 48742 49101 +3 48577 49101 48922 +3 48578 48903 48989 +3 48578 48989 48655 +3 48579 48656 48990 +3 48579 48990 48904 +3 48580 48839 48913 +3 48580 48913 48630 +3 48581 48631 48914 +3 48581 48914 48840 +3 48583 48691 48905 +3 48583 48905 48749 +3 48584 48750 48906 +3 48584 48906 48692 +3 48585 48901 49249 +3 48585 49249 48947 +3 48586 48948 49250 +3 48586 49250 48902 +3 48587 48769 48978 +3 48587 48978 48765 +3 48588 48766 48979 +3 48588 48979 48770 +3 48589 48949 49086 +3 48589 49086 48724 +3 48590 48725 49087 +3 48590 49087 48950 +3 48591 48693 48828 +3 48591 48828 48697 +3 48592 48698 48829 +3 48592 48829 48694 +3 48593 49169 49167 +3 48594 49168 49170 +3 48595 48722 49013 +3 48595 49013 48876 +3 48596 48877 49014 +3 48596 49014 48723 +3 48597 48630 48915 +3 48597 48915 48864 +3 48598 48865 48916 +3 48598 48916 48631 +3 48599 48856 49174 +3 48599 49174 48870 +3 48600 48871 49175 +3 48600 49175 48857 +3 48601 48701 49198 +3 48601 49198 49061 +3 48602 49062 49199 +3 48602 49199 48702 +3 48603 48854 49190 +3 48603 49190 48923 +3 48604 48924 49191 +3 48604 49191 48855 +3 48605 49208 49259 +3 48605 49259 48761 +3 48606 48762 49260 +3 48606 49260 49209 +3 48607 48716 49090 +3 48607 49090 48982 +3 48608 48983 49091 +3 48608 49091 48717 +3 48609 49005 49318 +3 48609 49318 48936 +3 48610 48937 49319 +3 48610 49319 49006 +3 48611 48923 49184 +3 48611 49184 48851 +3 48612 48851 49185 +3 48612 49185 48924 +3 48613 48679 49178 +3 48613 49178 49075 +3 48614 49076 49179 +3 48614 49179 48680 +3 48615 48711 49035 +3 48615 49035 48925 +3 48616 48926 49036 +3 48616 49036 48712 +3 48617 48874 49025 +3 48617 49025 48745 +3 48618 48746 49026 +3 48618 49026 48875 +3 48619 48817 49124 +3 48619 49124 48938 +3 48620 48939 49125 +3 48620 49125 48818 +3 48621 48880 49043 +3 48621 49043 48777 +3 48622 48778 49044 +3 48622 49044 48881 +3 48623 49055 49292 +3 48623 49292 48841 +3 48624 48842 49293 +3 48624 49293 49056 +3 48625 48821 48933 +3 48625 48933 48822 +3 48626 49057 49164 +3 48626 49164 48718 +3 48627 48719 49165 +3 48627 49165 49058 +3 48628 48695 48964 +3 48628 48964 48847 +3 48629 48848 48965 +3 48629 48965 48696 +3 48630 48913 48915 +3 48631 48916 48914 +3 48632 48980 48897 +3 48633 48898 48981 +3 48634 48707 49231 +3 48634 49231 49118 +3 48635 49119 49232 +3 48635 49232 48708 +3 48636 49106 49253 +3 48636 49253 48755 +3 48637 48756 49254 +3 48637 49254 49107 +3 48638 48767 49188 +3 48638 49188 49037 +3 48639 49038 49189 +3 48639 49189 48768 +3 48640 48801 49316 +3 48640 49316 49161 +3 48641 49162 49317 +3 48641 49317 48802 +3 48642 48882 49343 +3 48642 49343 49098 +3 48643 49099 49344 +3 48643 49344 48883 +3 48644 48795 48866 +3 48644 48866 48703 +3 48645 48704 48867 +3 48645 48867 48796 +3 48646 48815 49233 +3 48646 49233 49063 +3 48647 49064 49234 +3 48647 49234 48816 +3 48648 48791 48987 +3 48648 48987 48852 +3 48649 48853 48988 +3 48649 48988 48792 +3 48650 48872 48956 +3 48650 48956 48695 +3 48651 48696 48957 +3 48651 48957 48873 +3 48652 49024 49281 +3 48652 49281 49023 +3 48653 49015 49282 +3 48653 49282 48893 +3 48654 48894 49283 +3 48654 49283 49016 +3 48655 48989 49047 +3 48655 49047 48705 +3 48656 48706 49048 +3 48656 49048 48990 +3 48657 49080 49218 +3 48657 49218 48773 +3 48658 48774 49219 +3 48658 49219 49081 +3 48659 48876 49082 +3 48659 49082 48880 +3 48660 48881 49083 +3 48660 49083 48877 +3 48661 48852 48997 +3 48661 48997 48821 +3 48662 48822 48998 +3 48662 48998 48853 +3 48663 48878 49017 +3 48663 49017 48811 +3 48664 48812 49018 +3 48664 49018 48879 +3 48665 49045 49310 +3 48665 49310 48934 +3 48666 48935 49311 +3 48666 49311 49046 +3 48667 48970 49071 +3 48667 49071 48781 +3 48668 48782 49072 +3 48668 49072 48971 +3 48669 48825 49041 +3 48669 49041 48878 +3 48670 48879 49042 +3 48670 49042 48825 +3 48671 48819 48888 +3 48671 48888 48735 +3 48672 48736 48889 +3 48672 48889 48820 +3 48673 48954 49361 +3 48673 49361 49102 +3 48674 49103 49362 +3 48674 49362 48955 +3 48675 48745 49141 +3 48675 49141 49067 +3 48676 49068 49142 +3 48676 49142 48746 +3 48677 48733 48868 +3 48677 48868 48795 +3 48678 48796 48869 +3 48678 48869 48734 +3 48679 48947 49237 +3 48679 49237 49178 +3 48680 49179 49238 +3 48680 49238 48948 +3 48681 48972 49314 +3 48681 49314 49045 +3 48682 49046 49315 +3 48682 49315 48973 +3 48683 48713 48862 +3 48683 48862 48819 +3 48684 48820 48863 +3 48684 48863 48713 +3 48685 48938 49192 +3 48685 49192 48921 +3 48686 48922 49193 +3 48686 49193 48939 +3 48687 49180 49369 +3 48687 49369 48909 +3 48688 48910 49370 +3 48688 49370 49181 +3 48689 49114 49373 +3 48689 49373 48976 +3 48690 48977 49374 +3 48690 49374 49115 +3 48691 48783 48993 +3 48691 48993 48905 +3 48692 48906 48994 +3 48692 48994 48784 +3 48693 48753 48895 +3 48693 48895 48828 +3 48694 48829 48896 +3 48694 48896 48754 +3 48695 48956 48964 +3 48696 48965 48957 +3 48697 48828 48886 +3 48697 48886 48743 +3 48698 48744 48887 +3 48698 48887 48829 +3 48699 49053 49273 +3 48699 49273 48931 +3 48700 48932 49274 +3 48700 49274 49054 +3 48701 48763 49255 +3 48701 49255 49198 +3 48702 49199 49256 +3 48702 49256 48764 +3 48703 48866 48892 +3 48703 48892 48704 +3 48704 48892 48867 +3 48705 49047 49069 +3 48705 49069 48706 +3 48706 49069 49048 +3 48707 48732 49267 +3 48707 49267 49231 +3 48708 49232 49268 +3 48708 49268 48732 +3 48709 48890 49021 +3 48709 49021 48839 +3 48710 48840 49022 +3 48710 49022 48891 +3 48711 48845 49200 +3 48711 49200 49035 +3 48712 49036 49201 +3 48712 49201 48846 +3 48713 48863 48862 +3 48714 48847 49027 +3 48714 49027 48890 +3 48715 48891 49028 +3 48715 49028 48848 +3 48716 48805 49186 +3 48716 49186 49090 +3 48717 49091 49187 +3 48717 49187 48806 +3 48718 49164 49235 +3 48718 49235 48785 +3 48719 48786 49236 +3 48719 49236 49165 +3 48720 48951 49243 +3 48720 49243 49001 +3 48721 49002 49244 +3 48721 49244 48951 +3 48722 48809 49128 +3 48722 49128 49013 +3 48723 49014 49129 +3 48723 49129 48810 +3 48724 49086 49214 +3 48724 49214 48823 +3 48725 48824 49215 +3 48725 49215 49087 +3 48726 49001 49239 +3 48726 49239 48949 +3 48727 48950 49240 +3 48727 49240 49002 +3 48728 49092 49290 +3 48728 49290 48929 +3 48729 48930 49291 +3 48729 49291 49093 +3 48730 49023 49339 +3 48730 49339 49015 +3 48731 49016 49340 +3 48731 49340 49024 +3 48732 49268 49267 +3 48733 48743 48911 +3 48733 48911 48868 +3 48734 48869 48912 +3 48734 48912 48744 +3 48735 48888 48943 +3 48735 48943 48771 +3 48736 48772 48944 +3 48736 48944 48889 +3 48737 48966 49363 +3 48737 49363 49159 +3 48738 49160 49364 +3 48738 49364 48967 +3 48739 48917 49454 +3 48739 49454 49300 +3 48740 49301 49455 +3 48740 49455 48918 +3 48741 49100 49241 +3 48741 49241 48860 +3 48742 48861 49242 +3 48742 49242 49101 +3 48743 48886 48911 +3 48744 48912 48887 +3 48745 49025 49141 +3 48746 49142 49026 +3 48747 48925 49196 +3 48747 49196 48995 +3 48748 48996 49197 +3 48748 49197 48926 +3 48749 48905 49033 +3 48749 49033 48872 +3 48750 48873 49034 +3 48750 49034 48906 +3 48751 49204 49355 +3 48751 49355 48927 +3 48752 48928 49356 +3 48752 49356 49205 +3 48753 48771 48945 +3 48753 48945 48895 +3 48754 48896 48946 +3 48754 48946 48772 +3 48755 49253 49345 +3 48755 49345 48833 +3 48756 48834 49346 +3 48756 49346 49254 +3 48757 48952 49359 +3 48757 49359 49194 +3 48758 49195 49360 +3 48758 49360 48953 +3 48759 48995 49202 +3 48759 49202 48940 +3 48760 48940 49203 +3 48760 49203 48996 +3 48761 49259 49286 +3 48761 49286 48763 +3 48762 48764 49287 +3 48762 49287 49260 +3 48763 49286 49255 +3 48764 49256 49287 +3 48765 48978 49130 +3 48765 49130 48903 +3 48766 48904 49131 +3 48766 49131 48979 +3 48767 48837 49265 +3 48767 49265 49188 +3 48768 49189 49266 +3 48768 49266 48838 +3 48769 48897 49108 +3 48769 49108 48978 +3 48770 48979 49109 +3 48770 49109 48898 +3 48771 48943 48945 +3 48772 48946 48944 +3 48773 49218 49275 +3 48773 49275 48830 +3 48774 48831 49276 +3 48774 49276 49219 +3 48775 49224 49479 +3 48775 49479 49055 +3 48776 49056 49480 +3 48776 49480 49225 +3 48777 49043 49172 +3 48777 49172 48884 +3 48778 48885 49173 +3 48778 49173 49044 +3 48779 48849 49443 +3 48779 49443 49306 +3 48780 49307 49444 +3 48780 49444 48850 +3 48781 49071 49145 +3 48781 49145 48835 +3 48782 48836 49146 +3 48782 49146 49072 +3 48783 48826 49051 +3 48783 49051 48993 +3 48784 48994 49052 +3 48784 49052 48827 +3 48785 49235 49088 +3 48786 49089 49236 +3 48787 49112 49351 +3 48787 49351 49005 +3 48788 49006 49352 +3 48788 49352 49113 +3 48789 49143 49423 +3 48789 49423 49070 +3 48790 49070 49424 +3 48790 49424 49144 +3 48791 48864 49084 +3 48791 49084 48987 +3 48792 48988 49085 +3 48792 49085 48865 +3 48793 49073 49421 +3 48793 49421 49143 +3 48794 49144 49422 +3 48794 49422 49074 +3 48795 48868 48984 +3 48795 48984 48866 +3 48796 48867 48985 +3 48796 48985 48869 +3 48797 49102 49497 +3 48797 49497 49224 +3 48798 49225 49498 +3 48798 49498 49103 +3 48799 49007 49411 +3 48799 49411 49206 +3 48800 49207 49412 +3 48800 49412 49008 +3 48801 48899 49427 +3 48801 49427 49316 +3 48802 49317 49428 +3 48802 49428 48900 +3 48803 48982 49271 +3 48803 49271 49094 +3 48804 49095 49272 +3 48804 49272 48983 +3 48805 48832 49229 +3 48805 49229 49186 +3 48806 49187 49230 +3 48806 49230 48832 +3 48807 49088 49349 +3 48807 49349 49053 +3 48808 49054 49350 +3 48808 49350 49089 +3 48809 48835 49176 +3 48809 49176 49128 +3 48810 49129 49177 +3 48810 49177 48836 +3 48811 49017 49220 +3 48811 49220 48970 +3 48812 48971 49221 +3 48812 49221 49018 +3 48813 49098 49462 +3 48813 49462 49114 +3 48814 49115 49463 +3 48814 49463 49099 +3 48815 48907 49335 +3 48815 49335 49233 +3 48816 49234 49336 +3 48816 49336 48908 +3 48817 48968 49284 +3 48817 49284 49124 +3 48818 49125 49285 +3 48818 49285 48969 +3 48819 48862 48974 +3 48819 48974 48888 +3 48820 48889 48975 +3 48820 48975 48863 +3 48821 48997 49120 +3 48821 49120 48933 +3 48822 48933 49121 +3 48822 49121 48998 +3 48823 49214 49328 +3 48823 49328 48960 +3 48824 48961 49329 +3 48824 49329 49215 +3 48825 49042 49171 +3 48825 49171 49041 +3 48826 48827 49079 +3 48826 49079 49051 +3 48827 49052 49079 +3 48828 48895 48991 +3 48828 48991 48886 +3 48829 48887 48992 +3 48829 48992 48896 +3 48830 49275 49302 +3 48830 49302 48831 +3 48831 49302 49276 +3 48832 49230 49229 +3 48833 49345 49390 +3 48833 49390 48858 +3 48834 48859 49391 +3 48834 49391 49346 +3 48835 49145 49176 +3 48836 49177 49146 +3 48837 48858 49384 +3 48837 49384 49265 +3 48838 49266 49385 +3 48838 49385 48859 +3 48839 49021 49122 +3 48839 49122 48913 +3 48840 48914 49123 +3 48840 49123 49022 +3 48841 49292 49446 +3 48841 49446 48999 +3 48842 49000 49447 +3 48842 49447 49293 +3 48843 49096 49542 +3 48843 49542 49322 +3 48844 49323 49543 +3 48844 49543 49097 +3 48845 48958 49288 +3 48845 49288 49200 +3 48846 49201 49289 +3 48846 49289 48959 +3 48847 48964 49135 +3 48847 49135 49027 +3 48848 49028 49136 +3 48848 49136 48965 +3 48849 48919 49515 +3 48849 49515 49443 +3 48850 49444 49516 +3 48850 49516 48920 +3 48851 49184 49375 +3 48851 49375 49185 +3 48852 48987 49153 +3 48852 49153 48997 +3 48853 48998 49154 +3 48853 49154 48988 +3 48854 49037 49371 +3 48854 49371 49190 +3 48855 49191 49372 +3 48855 49372 49038 +3 48856 49063 49382 +3 48856 49382 49174 +3 48857 49175 49383 +3 48857 49383 49064 +3 48858 49390 49384 +3 48859 49385 49391 +3 48860 49241 49308 +3 48860 49308 48941 +3 48861 48942 49309 +3 48861 49309 49242 +3 48862 48863 48986 +3 48862 48986 48974 +3 48863 48975 48986 +3 48864 48915 49147 +3 48864 49147 49084 +3 48865 49085 49148 +3 48865 49148 48916 +3 48866 48984 49009 +3 48866 49009 48892 +3 48867 48892 49010 +3 48867 49010 48985 +3 48868 48911 49011 +3 48868 49011 48984 +3 48869 48985 49012 +3 48869 49012 48912 +3 48870 49174 49398 +3 48870 49398 49092 +3 48871 49093 49399 +3 48871 49399 49175 +3 48872 49033 49126 +3 48872 49126 48956 +3 48873 48957 49127 +3 48873 49127 49034 +3 48874 49094 49279 +3 48874 49279 49025 +3 48875 49026 49280 +3 48875 49280 49095 +3 48876 49013 49257 +3 48876 49257 49082 +3 48877 49083 49258 +3 48877 49258 49014 +3 48878 49041 49227 +3 48878 49227 49017 +3 48879 49018 49228 +3 48879 49228 49042 +3 48880 49082 49263 +3 48880 49263 49043 +3 48881 49044 49264 +3 48881 49264 49083 +3 48882 49061 49503 +3 48882 49503 49343 +3 48883 49344 49504 +3 48883 49504 49062 +3 48884 49172 49251 +3 48884 49251 48980 +3 48885 48981 49252 +3 48885 49252 49173 +3 48886 48991 49029 +3 48886 49029 48911 +3 48887 48912 49030 +3 48887 49030 48992 +3 48888 48974 49019 +3 48888 49019 48943 +3 48889 48944 49020 +3 48889 49020 48975 +3 48890 49027 49182 +3 48890 49182 49021 +3 48891 49022 49183 +3 48891 49183 49028 +3 48892 49009 49010 +3 48893 49282 49448 +3 48893 49448 49065 +3 48894 49066 49449 +3 48894 49449 49283 +3 48895 48945 49039 +3 48895 49039 48991 +3 48896 48992 49040 +3 48896 49040 48946 +3 48897 48980 49222 +3 48897 49222 49108 +3 48898 49109 49223 +3 48898 49223 48981 +3 48899 49206 49495 +3 48899 49495 49427 +3 48900 49428 49496 +3 48900 49496 49207 +3 48901 49159 49481 +3 48901 49481 49249 +3 48902 49250 49482 +3 48902 49482 49160 +3 48903 49130 49247 +3 48903 49247 48989 +3 48904 48990 49248 +3 48904 49248 49131 +3 48905 48993 49157 +3 48905 49157 49033 +3 48906 49034 49158 +3 48906 49158 48994 +3 48907 48962 49401 +3 48907 49401 49335 +3 48908 49336 49402 +3 48908 49402 48963 +3 48909 49369 49517 +3 48909 49517 49059 +3 48910 49060 49518 +3 48910 49518 49370 +3 48911 49029 49011 +3 48912 49012 49030 +3 48913 49122 49151 +3 48913 49151 48915 +3 48914 48916 49152 +3 48914 49152 49123 +3 48915 49151 49147 +3 48916 49148 49152 +3 48917 49003 49562 +3 48917 49562 49454 +3 48918 49455 49563 +3 48918 49563 49004 +3 48919 48920 49535 +3 48919 49535 49515 +3 48920 49516 49535 +3 48921 49192 49376 +3 48921 49376 49100 +3 48922 49101 49377 +3 48922 49377 49193 +3 48923 49190 49441 +3 48923 49441 49184 +3 48924 49185 49442 +3 48924 49442 49191 +3 48925 49035 49312 +3 48925 49312 49196 +3 48926 49197 49313 +3 48926 49313 49036 +3 48927 49355 49475 +3 48927 49475 49031 +3 48928 49032 49476 +3 48928 49476 49356 +3 48929 49290 49419 +3 48929 49419 49057 +3 48930 49058 49420 +3 48930 49420 49291 +3 48931 49273 49429 +3 48931 49429 49080 +3 48932 49081 49430 +3 48932 49430 49274 +3 48933 49120 49121 +3 48934 49310 49487 +3 48934 49487 49106 +3 48935 49107 49488 +3 48935 49488 49311 +3 48936 49318 49556 +3 48936 49556 49180 +3 48937 49181 49557 +3 48937 49557 49319 +3 48938 49124 49380 +3 48938 49380 49192 +3 48939 49193 49381 +3 48939 49381 49125 +3 48940 49202 49330 +3 48940 49330 49203 +3 48941 49308 49341 +3 48941 49341 48958 +3 48942 48959 49342 +3 48942 49342 49309 +3 48943 49019 49049 +3 48943 49049 48945 +3 48944 48946 49050 +3 48944 49050 49020 +3 48945 49049 49039 +3 48946 49040 49050 +3 48947 49249 49513 +3 48947 49513 49237 +3 48948 49238 49514 +3 48948 49514 49250 +3 48949 49239 49392 +3 48949 49392 49086 +3 48950 49087 49393 +3 48950 49393 49240 +3 48951 49244 49400 +3 48951 49400 49243 +3 48952 49075 49483 +3 48952 49483 49359 +3 48953 49360 49484 +3 48953 49484 49076 +3 48954 49161 49560 +3 48954 49560 49361 +3 48955 49362 49561 +3 48955 49561 49162 +3 48956 49126 49155 +3 48956 49155 48964 +3 48957 48965 49156 +3 48957 49156 49127 +3 48958 49341 49288 +3 48959 49289 49342 +3 48960 49328 49415 +3 48960 49415 48962 +3 48961 48963 49416 +3 48961 49416 49329 +3 48962 49415 49401 +3 48963 49402 49416 +3 48964 49155 49135 +3 48965 49136 49156 +3 48966 49118 49501 +3 48966 49501 49363 +3 48967 49364 49502 +3 48967 49502 49119 +3 48968 49067 49386 +3 48968 49386 49284 +3 48969 49285 49387 +3 48969 49387 49068 +3 48970 49220 49324 +3 48970 49324 49071 +3 48971 49072 49325 +3 48971 49325 49221 +3 48972 49194 49519 +3 48972 49519 49314 +3 48973 49315 49520 +3 48973 49520 49195 +3 48974 48986 49077 +3 48974 49077 49019 +3 48975 49020 49078 +3 48975 49078 48986 +3 48976 49373 49578 +3 48976 49578 49204 +3 48977 49205 49579 +3 48977 49579 49374 +3 48978 49108 49303 +3 48978 49303 49130 +3 48979 49131 49304 +3 48979 49304 49109 +3 48980 49251 49222 +3 48981 49223 49252 +3 48982 49090 49407 +3 48982 49407 49271 +3 48983 49272 49408 +3 48983 49408 49091 +3 48984 49011 49104 +3 48984 49104 49009 +3 48985 49010 49105 +3 48985 49105 49012 +3 48986 49078 49077 +3 48987 49084 49261 +3 48987 49261 49153 +3 48988 49154 49262 +3 48988 49262 49085 +3 48989 49247 49320 +3 48989 49320 49047 +3 48990 49048 49321 +3 48990 49321 49248 +3 48991 49039 49116 +3 48991 49116 49029 +3 48992 49030 49117 +3 48992 49117 49040 +3 48993 49051 49245 +3 48993 49245 49157 +3 48994 49158 49246 +3 48994 49246 49052 +3 48995 49196 49378 +3 48995 49378 49202 +3 48996 49203 49379 +3 48996 49379 49197 +3 48997 49153 49277 +3 48997 49277 49120 +3 48998 49121 49278 +3 48998 49278 49154 +3 48999 49446 49558 +3 48999 49558 49110 +3 49000 49111 49559 +3 49000 49559 49447 +3 49001 49243 49467 +3 49001 49467 49239 +3 49002 49240 49468 +3 49002 49468 49244 +3 49003 49167 49631 +3 49003 49631 49562 +3 49004 49563 49632 +3 49004 49632 49168 +3 49005 49351 49639 +3 49005 49639 49318 +3 49006 49319 49640 +3 49006 49640 49352 +3 49007 49322 49702 +3 49007 49702 49411 +3 49008 49412 49703 +3 49008 49703 49323 +3 49009 49104 49134 +3 49009 49134 49010 +3 49010 49134 49105 +3 49011 49029 49137 +3 49011 49137 49104 +3 49012 49105 49138 +3 49012 49138 49030 +3 49013 49128 49367 +3 49013 49367 49257 +3 49014 49258 49368 +3 49014 49368 49129 +3 49015 49339 49576 +3 49015 49576 49282 +3 49016 49283 49577 +3 49016 49577 49340 +3 49017 49227 49396 +3 49017 49396 49220 +3 49018 49221 49397 +3 49018 49397 49228 +3 49019 49077 49132 +3 49019 49132 49049 +3 49020 49050 49133 +3 49020 49133 49078 +3 49021 49182 49294 +3 49021 49294 49122 +3 49022 49123 49295 +3 49022 49295 49183 +3 49023 49281 49570 +3 49023 49570 49339 +3 49024 49340 49571 +3 49024 49571 49281 +3 49025 49279 49403 +3 49025 49403 49141 +3 49026 49142 49404 +3 49026 49404 49280 +3 49027 49135 49296 +3 49027 49296 49182 +3 49028 49183 49297 +3 49028 49297 49136 +3 49029 49116 49137 +3 49030 49138 49117 +3 49031 49475 49566 +3 49031 49566 49112 +3 49032 49113 49567 +3 49032 49567 49476 +3 49033 49157 49269 +3 49033 49269 49126 +3 49034 49127 49270 +3 49034 49270 49158 +3 49035 49200 49450 +3 49035 49450 49312 +3 49036 49313 49451 +3 49036 49451 49201 +3 49037 49188 49511 +3 49037 49511 49371 +3 49038 49372 49512 +3 49038 49512 49189 +3 49039 49049 49149 +3 49039 49149 49116 +3 49040 49117 49150 +3 49040 49150 49050 +3 49041 49171 49353 +3 49041 49353 49227 +3 49042 49228 49354 +3 49042 49354 49171 +3 49043 49263 49394 +3 49043 49394 49172 +3 49044 49173 49395 +3 49044 49395 49264 +3 49045 49314 49592 +3 49045 49592 49310 +3 49046 49311 49593 +3 49046 49593 49315 +3 49047 49320 49357 +3 49047 49357 49069 +3 49048 49069 49358 +3 49048 49358 49321 +3 49049 49132 49149 +3 49050 49150 49133 +3 49051 49079 49298 +3 49051 49298 49245 +3 49052 49246 49299 +3 49052 49299 49079 +3 49053 49349 49538 +3 49053 49538 49273 +3 49054 49274 49539 +3 49054 49539 49350 +3 49055 49479 49718 +3 49055 49718 49292 +3 49056 49293 49719 +3 49056 49719 49480 +3 49057 49419 49521 +3 49057 49521 49164 +3 49058 49165 49522 +3 49058 49522 49420 +3 49059 49517 49609 +3 49059 49609 49139 +3 49060 49140 49610 +3 49060 49610 49518 +3 49061 49198 49655 +3 49061 49655 49503 +3 49062 49504 49656 +3 49062 49656 49199 +3 49063 49233 49552 +3 49063 49552 49382 +3 49064 49383 49553 +3 49064 49553 49234 +3 49065 49448 49574 +3 49065 49574 49208 +3 49066 49209 49575 +3 49066 49575 49449 +3 49067 49141 49460 +3 49067 49460 49386 +3 49068 49387 49461 +3 49068 49461 49142 +3 49069 49357 49358 +3 49070 49423 49654 +3 49070 49654 49424 +3 49071 49324 49409 +3 49071 49409 49145 +3 49072 49146 49410 +3 49072 49410 49325 +3 49073 49300 49657 +3 49073 49657 49421 +3 49074 49422 49658 +3 49074 49658 49301 +3 49075 49178 49580 +3 49075 49580 49483 +3 49076 49484 49581 +3 49076 49581 49179 +3 49077 49078 49163 +3 49077 49163 49132 +3 49078 49133 49163 +3 49079 49299 49298 +3 49080 49429 49536 +3 49080 49536 49218 +3 49081 49219 49537 +3 49081 49537 49430 +3 49082 49257 49417 +3 49082 49417 49263 +3 49083 49264 49418 +3 49083 49418 49258 +3 49084 49147 49331 +3 49084 49331 49261 +3 49085 49262 49332 +3 49085 49332 49148 +3 49086 49392 49493 +3 49086 49493 49214 +3 49087 49215 49494 +3 49087 49494 49393 +3 49088 49235 49489 +3 49088 49489 49349 +3 49089 49350 49490 +3 49089 49490 49236 +3 49090 49186 49477 +3 49090 49477 49407 +3 49091 49408 49478 +3 49091 49478 49187 +3 49092 49398 49572 +3 49092 49572 49290 +3 49093 49291 49573 +3 49093 49573 49399 +3 49094 49271 49458 +3 49094 49458 49279 +3 49095 49280 49459 +3 49095 49459 49272 +3 49096 49306 49752 +3 49096 49752 49542 +3 49097 49543 49753 +3 49097 49753 49307 +3 49098 49343 49706 +3 49098 49706 49462 +3 49099 49463 49707 +3 49099 49707 49344 +3 49100 49376 49505 +3 49100 49505 49241 +3 49101 49242 49506 +3 49101 49506 49377 +3 49102 49361 49756 +3 49102 49756 49497 +3 49103 49498 49757 +3 49103 49757 49362 +3 49104 49137 49210 +3 49104 49210 49134 +3 49105 49134 49211 +3 49105 49211 49138 +3 49106 49487 49642 +3 49106 49642 49253 +3 49107 49254 49643 +3 49107 49643 49488 +3 49108 49222 49413 +3 49108 49413 49303 +3 49109 49304 49414 +3 49109 49414 49223 +3 49110 49558 49625 +3 49110 49625 49169 +3 49111 49170 49626 +3 49111 49626 49559 +3 49112 49566 49617 +3 49112 49617 49351 +3 49113 49352 49618 +3 49113 49618 49567 +3 49114 49462 49711 +3 49114 49711 49373 +3 49115 49374 49712 +3 49115 49712 49463 +3 49116 49149 49212 +3 49116 49212 49137 +3 49117 49138 49213 +3 49117 49213 49150 +3 49118 49231 49611 +3 49118 49611 49501 +3 49119 49502 49612 +3 49119 49612 49232 +3 49120 49277 49305 +3 49120 49305 49121 +3 49121 49305 49278 +3 49122 49294 49337 +3 49122 49337 49151 +3 49123 49152 49338 +3 49123 49338 49295 +3 49124 49284 49529 +3 49124 49529 49380 +3 49125 49381 49530 +3 49125 49530 49285 +3 49126 49269 49326 +3 49126 49326 49155 +3 49127 49156 49327 +3 49127 49327 49270 +3 49128 49176 49433 +3 49128 49433 49367 +3 49129 49368 49434 +3 49129 49434 49177 +3 49130 49303 49425 +3 49130 49425 49247 +3 49131 49248 49426 +3 49131 49426 49304 +3 49132 49163 49216 +3 49132 49216 49149 +3 49133 49150 49217 +3 49133 49217 49163 +3 49134 49210 49211 +3 49135 49155 49333 +3 49135 49333 49296 +3 49136 49297 49334 +3 49136 49334 49156 +3 49137 49212 49210 +3 49138 49211 49213 +3 49139 49609 49671 +3 49139 49671 49166 +3 49140 49166 49672 +3 49140 49672 49610 +3 49141 49403 49460 +3 49142 49461 49404 +3 49143 49421 49713 +3 49143 49713 49423 +3 49144 49424 49714 +3 49144 49714 49422 +3 49145 49409 49437 +3 49145 49437 49176 +3 49146 49177 49438 +3 49146 49438 49410 +3 49147 49151 49347 +3 49147 49347 49331 +3 49148 49332 49348 +3 49148 49348 49152 +3 49149 49216 49212 +3 49150 49213 49217 +3 49151 49337 49347 +3 49152 49348 49338 +3 49153 49261 49388 +3 49153 49388 49277 +3 49154 49278 49389 +3 49154 49389 49262 +3 49155 49326 49333 +3 49156 49334 49327 +3 49157 49245 49365 +3 49157 49365 49269 +3 49158 49270 49366 +3 49158 49366 49246 +3 49159 49363 49694 +3 49159 49694 49481 +3 49160 49482 49695 +3 49160 49695 49364 +3 49161 49316 49732 +3 49161 49732 49560 +3 49162 49561 49733 +3 49162 49733 49317 +3 49163 49217 49216 +3 49164 49521 49588 +3 49164 49588 49235 +3 49165 49236 49589 +3 49165 49589 49522 +3 49166 49671 49672 +3 49167 49169 49661 +3 49167 49661 49631 +3 49168 49632 49662 +3 49168 49662 49170 +3 49169 49625 49661 +3 49170 49662 49626 +3 49171 49354 49445 +3 49171 49445 49353 +3 49172 49394 49473 +3 49172 49473 49251 +3 49173 49252 49474 +3 49173 49474 49395 +3 49174 49382 49619 +3 49174 49619 49398 +3 49175 49399 49620 +3 49175 49620 49383 +3 49176 49437 49433 +3 49177 49434 49438 +3 49178 49237 49646 +3 49178 49646 49580 +3 49179 49581 49647 +3 49179 49647 49238 +3 49180 49556 49762 +3 49180 49762 49369 +3 49181 49370 49763 +3 49181 49763 49557 +3 49182 49296 49405 +3 49182 49405 49294 +3 49183 49295 49406 +3 49183 49406 49297 +3 49184 49441 49663 +3 49184 49663 49375 +3 49185 49375 49664 +3 49185 49664 49442 +3 49186 49229 49531 +3 49186 49531 49477 +3 49187 49478 49532 +3 49187 49532 49230 +3 49188 49265 49607 +3 49188 49607 49511 +3 49189 49512 49608 +3 49189 49608 49266 +3 49190 49371 49652 +3 49190 49652 49441 +3 49191 49442 49653 +3 49191 49653 49372 +3 49192 49380 49564 +3 49192 49564 49376 +3 49193 49377 49565 +3 49193 49565 49381 +3 49194 49359 49708 +3 49194 49708 49519 +3 49195 49520 49709 +3 49195 49709 49360 +3 49196 49312 49507 +3 49196 49507 49378 +3 49197 49379 49508 +3 49197 49508 49313 +3 49198 49255 49742 +3 49198 49742 49655 +3 49199 49656 49743 +3 49199 49743 49256 +3 49200 49288 49550 +3 49200 49550 49450 +3 49201 49451 49551 +3 49201 49551 49289 +3 49202 49378 49527 +3 49202 49527 49330 +3 49203 49330 49528 +3 49203 49528 49379 +3 49204 49578 49760 +3 49204 49760 49355 +3 49205 49356 49761 +3 49205 49761 49579 +3 49206 49411 49730 +3 49206 49730 49495 +3 49207 49496 49731 +3 49207 49731 49412 +3 49208 49574 49669 +3 49208 49669 49259 +3 49209 49260 49670 +3 49209 49670 49575 +3 49210 49212 49226 +3 49210 49226 49211 +3 49211 49226 49213 +3 49212 49216 49226 +3 49213 49226 49217 +3 49214 49493 49623 +3 49214 49623 49328 +3 49215 49329 49624 +3 49215 49624 49494 +3 49216 49217 49226 +3 49218 49536 49615 +3 49218 49615 49275 +3 49219 49276 49616 +3 49219 49616 49537 +3 49220 49396 49499 +3 49220 49499 49324 +3 49221 49325 49500 +3 49221 49500 49397 +3 49222 49251 49469 +3 49222 49469 49413 +3 49223 49414 49470 +3 49223 49470 49252 +3 49224 49497 49827 +3 49224 49827 49479 +3 49225 49480 49828 +3 49225 49828 49498 +3 49227 49353 49525 +3 49227 49525 49396 +3 49228 49397 49526 +3 49228 49526 49354 +3 49229 49230 49541 +3 49229 49541 49531 +3 49230 49532 49541 +3 49231 49267 49696 +3 49231 49696 49611 +3 49232 49612 49697 +3 49232 49697 49268 +3 49233 49335 49683 +3 49233 49683 49552 +3 49234 49553 49684 +3 49234 49684 49336 +3 49235 49588 49489 +3 49236 49490 49589 +3 49237 49513 49646 +3 49238 49647 49514 +3 49239 49467 49621 +3 49239 49621 49392 +3 49240 49393 49622 +3 49240 49622 49468 +3 49241 49505 49601 +3 49241 49601 49308 +3 49242 49309 49602 +3 49242 49602 49506 +3 49243 49400 49629 +3 49243 49629 49467 +3 49244 49468 49630 +3 49244 49630 49400 +3 49245 49298 49435 +3 49245 49435 49365 +3 49246 49366 49436 +3 49246 49436 49299 +3 49247 49425 49509 +3 49247 49509 49320 +3 49248 49321 49510 +3 49248 49510 49426 +3 49249 49481 49767 +3 49249 49767 49513 +3 49250 49514 49768 +3 49250 49768 49482 +3 49251 49473 49469 +3 49252 49470 49474 +3 49253 49642 49754 +3 49253 49754 49345 +3 49254 49346 49755 +3 49254 49755 49643 +3 49255 49286 49781 +3 49255 49781 49742 +3 49256 49743 49782 +3 49256 49782 49287 +3 49257 49367 49544 +3 49257 49544 49417 +3 49258 49418 49545 +3 49258 49545 49368 +3 49259 49669 49777 +3 49259 49777 49286 +3 49260 49287 49778 +3 49260 49778 49670 +3 49261 49331 49456 +3 49261 49456 49388 +3 49262 49389 49457 +3 49262 49457 49332 +3 49263 49417 49548 +3 49263 49548 49394 +3 49264 49395 49549 +3 49264 49549 49418 +3 49265 49384 49744 +3 49265 49744 49607 +3 49266 49608 49745 +3 49266 49745 49385 +3 49267 49268 49717 +3 49267 49717 49696 +3 49268 49697 49717 +3 49269 49365 49439 +3 49269 49439 49326 +3 49270 49327 49440 +3 49270 49440 49366 +3 49271 49407 49603 +3 49271 49603 49458 +3 49272 49459 49604 +3 49272 49604 49408 +3 49273 49538 49715 +3 49273 49715 49429 +3 49274 49430 49716 +3 49274 49716 49539 +3 49275 49615 49673 +3 49275 49673 49302 +3 49276 49302 49674 +3 49276 49674 49616 +3 49277 49388 49431 +3 49277 49431 49305 +3 49278 49305 49432 +3 49278 49432 49389 +3 49279 49458 49594 +3 49279 49594 49403 +3 49280 49404 49595 +3 49280 49595 49459 +3 49281 49571 49774 +3 49281 49774 49570 +3 49282 49576 49772 +3 49282 49772 49448 +3 49283 49449 49773 +3 49283 49773 49577 +3 49284 49386 49644 +3 49284 49644 49529 +3 49285 49530 49645 +3 49285 49645 49387 +3 49286 49777 49781 +3 49287 49782 49778 +3 49288 49341 49613 +3 49288 49613 49550 +3 49289 49551 49614 +3 49289 49614 49342 +3 49290 49572 49726 +3 49290 49726 49419 +3 49291 49420 49727 +3 49291 49727 49573 +3 49292 49718 49867 +3 49292 49867 49446 +3 49293 49447 49868 +3 49293 49868 49719 +3 49294 49405 49465 +3 49294 49465 49337 +3 49295 49338 49466 +3 49295 49466 49406 +3 49296 49333 49452 +3 49296 49452 49405 +3 49297 49406 49453 +3 49297 49453 49334 +3 49298 49299 49464 +3 49298 49464 49435 +3 49299 49436 49464 +3 49300 49454 49819 +3 49300 49819 49657 +3 49301 49658 49820 +3 49301 49820 49455 +3 49302 49673 49674 +3 49303 49413 49554 +3 49303 49554 49425 +3 49304 49426 49555 +3 49304 49555 49414 +3 49305 49431 49432 +3 49306 49443 49875 +3 49306 49875 49752 +3 49307 49753 49876 +3 49307 49876 49444 +3 49308 49601 49648 +3 49308 49648 49341 +3 49309 49342 49649 +3 49309 49649 49602 +3 49310 49592 49795 +3 49310 49795 49487 +3 49311 49488 49796 +3 49311 49796 49593 +3 49312 49450 49685 +3 49312 49685 49507 +3 49313 49508 49686 +3 49313 49686 49451 +3 49314 49519 49800 +3 49314 49800 49592 +3 49315 49593 49801 +3 49315 49801 49520 +3 49316 49427 49845 +3 49316 49845 49732 +3 49317 49733 49846 +3 49317 49846 49428 +3 49318 49639 49859 +3 49318 49859 49556 +3 49319 49557 49860 +3 49319 49860 49640 +3 49320 49509 49568 +3 49320 49568 49357 +3 49321 49358 49569 +3 49321 49569 49510 +3 49322 49542 49902 +3 49322 49902 49702 +3 49323 49703 49903 +3 49323 49903 49543 +3 49324 49499 49599 +3 49324 49599 49409 +3 49325 49410 49600 +3 49325 49600 49500 +3 49326 49439 49471 +3 49326 49471 49333 +3 49327 49334 49472 +3 49327 49472 49440 +3 49328 49623 49728 +3 49328 49728 49415 +3 49329 49416 49729 +3 49329 49729 49624 +3 49330 49527 49641 +3 49330 49641 49528 +3 49331 49347 49485 +3 49331 49485 49456 +3 49332 49457 49486 +3 49332 49486 49348 +3 49333 49471 49452 +3 49334 49453 49472 +3 49335 49401 49748 +3 49335 49748 49683 +3 49336 49684 49749 +3 49336 49749 49402 +3 49337 49465 49491 +3 49337 49491 49347 +3 49338 49348 49492 +3 49338 49492 49466 +3 49339 49570 49837 +3 49339 49837 49576 +3 49340 49577 49838 +3 49340 49838 49571 +3 49341 49648 49613 +3 49342 49614 49649 +3 49343 49503 49865 +3 49343 49865 49706 +3 49344 49707 49866 +3 49344 49866 49504 +3 49345 49754 49803 +3 49345 49803 49390 +3 49346 49391 49804 +3 49346 49804 49755 +3 49347 49491 49485 +3 49348 49486 49492 +3 49349 49489 49722 +3 49349 49722 49538 +3 49350 49539 49723 +3 49350 49723 49490 +3 49351 49617 49895 +3 49351 49895 49639 +3 49352 49640 49896 +3 49352 49896 49618 +3 49353 49445 49627 +3 49353 49627 49525 +3 49354 49526 49628 +3 49354 49628 49445 +3 49355 49760 49861 +3 49355 49861 49475 +3 49356 49476 49862 +3 49356 49862 49761 +3 49357 49568 49596 +3 49357 49596 49358 +3 49358 49596 49569 +3 49359 49483 49835 +3 49359 49835 49708 +3 49360 49709 49836 +3 49360 49836 49484 +3 49361 49560 49924 +3 49361 49924 49756 +3 49362 49757 49925 +3 49362 49925 49561 +3 49363 49501 49841 +3 49363 49841 49694 +3 49364 49695 49842 +3 49364 49842 49502 +3 49365 49435 49533 +3 49365 49533 49439 +3 49366 49440 49534 +3 49366 49534 49436 +3 49367 49433 49633 +3 49367 49633 49544 +3 49368 49545 49634 +3 49368 49634 49434 +3 49369 49762 49887 +3 49369 49887 49517 +3 49370 49518 49888 +3 49370 49888 49763 +3 49371 49511 49797 +3 49371 49797 49652 +3 49372 49653 49798 +3 49372 49798 49512 +3 49373 49711 49897 +3 49373 49897 49578 +3 49374 49579 49898 +3 49374 49898 49712 +3 49375 49663 49802 +3 49375 49802 49664 +3 49376 49564 49734 +3 49376 49734 49505 +3 49377 49506 49735 +3 49377 49735 49565 +3 49378 49507 49700 +3 49378 49700 49527 +3 49379 49528 49701 +3 49379 49701 49508 +3 49380 49529 49736 +3 49380 49736 49564 +3 49381 49565 49737 +3 49381 49737 49530 +3 49382 49552 49805 +3 49382 49805 49619 +3 49383 49620 49806 +3 49383 49806 49553 +3 49384 49390 49811 +3 49384 49811 49744 +3 49385 49745 49812 +3 49385 49812 49391 +3 49386 49460 49724 +3 49386 49724 49644 +3 49387 49645 49725 +3 49387 49725 49461 +3 49388 49456 49523 +3 49388 49523 49431 +3 49389 49432 49524 +3 49389 49524 49457 +3 49390 49803 49811 +3 49391 49812 49804 +3 49392 49621 49758 +3 49392 49758 49493 +3 49393 49494 49759 +3 49393 49759 49622 +3 49394 49548 49650 +3 49394 49650 49473 +3 49395 49474 49651 +3 49395 49651 49549 +3 49396 49525 49675 +3 49396 49675 49499 +3 49397 49500 49676 +3 49397 49676 49526 +3 49398 49619 49813 +3 49398 49813 49572 +3 49399 49573 49814 +3 49399 49814 49620 +3 49400 49630 49769 +3 49400 49769 49629 +3 49401 49415 49783 +3 49401 49783 49748 +3 49402 49749 49784 +3 49402 49784 49416 +3 49403 49594 49687 +3 49403 49687 49460 +3 49404 49461 49688 +3 49404 49688 49595 +3 49405 49452 49546 +3 49405 49546 49465 +3 49406 49466 49547 +3 49406 49547 49453 +3 49407 49477 49720 +3 49407 49720 49603 +3 49408 49604 49721 +3 49408 49721 49478 +3 49409 49599 49659 +3 49409 49659 49437 +3 49410 49438 49660 +3 49410 49660 49600 +3 49411 49702 49982 +3 49411 49982 49730 +3 49412 49731 49983 +3 49412 49983 49703 +3 49413 49469 49637 +3 49413 49637 49554 +3 49414 49555 49638 +3 49414 49638 49470 +3 49415 49728 49783 +3 49416 49784 49729 +3 49417 49544 49691 +3 49417 49691 49548 +3 49418 49549 49692 +3 49418 49692 49545 +3 49419 49726 49815 +3 49419 49815 49521 +3 49420 49522 49816 +3 49420 49816 49727 +3 49421 49657 49922 +3 49421 49922 49713 +3 49422 49714 49923 +3 49422 49923 49658 +3 49423 49713 49918 +3 49423 49918 49654 +3 49424 49654 49919 +3 49424 49919 49714 +3 49425 49554 49681 +3 49425 49681 49509 +3 49426 49510 49682 +3 49426 49682 49555 +3 49427 49495 49916 +3 49427 49916 49845 +3 49428 49846 49917 +3 49428 49917 49496 +3 49429 49715 49831 +3 49429 49831 49536 +3 49430 49537 49832 +3 49430 49832 49716 +3 49431 49523 49540 +3 49431 49540 49432 +3 49432 49540 49524 +3 49433 49437 49667 +3 49433 49667 49633 +3 49434 49634 49668 +3 49434 49668 49438 +3 49435 49464 49582 +3 49435 49582 49533 +3 49436 49534 49583 +3 49436 49583 49464 +3 49437 49659 49667 +3 49438 49668 49660 +3 49439 49533 49584 +3 49439 49584 49471 +3 49440 49472 49585 +3 49440 49585 49534 +3 49441 49652 49857 +3 49441 49857 49663 +3 49442 49664 49858 +3 49442 49858 49653 +3 49443 49515 49959 +3 49443 49959 49875 +3 49444 49876 49960 +3 49444 49960 49516 +3 49445 49628 49627 +3 49446 49867 49988 +3 49446 49988 49558 +3 49447 49559 49989 +3 49447 49989 49868 +3 49448 49772 49891 +3 49448 49891 49574 +3 49449 49575 49892 +3 49449 49892 49773 +3 49450 49550 49791 +3 49450 49791 49685 +3 49451 49686 49792 +3 49451 49792 49551 +3 49452 49471 49590 +3 49452 49590 49546 +3 49453 49547 49591 +3 49453 49591 49472 +3 49454 49562 49920 +3 49454 49920 49819 +3 49455 49820 49921 +3 49455 49921 49563 +3 49456 49485 49586 +3 49456 49586 49523 +3 49457 49524 49587 +3 49457 49587 49486 +3 49458 49603 49770 +3 49458 49770 49594 +3 49459 49595 49771 +3 49459 49771 49604 +3 49460 49687 49724 +3 49461 49725 49688 +3 49462 49706 49955 +3 49462 49955 49711 +3 49463 49712 49956 +3 49463 49956 49707 +3 49464 49583 49582 +3 49465 49546 49597 +3 49465 49597 49491 +3 49466 49492 49598 +3 49466 49598 49547 +3 49467 49629 49807 +3 49467 49807 49621 +3 49468 49622 49808 +3 49468 49808 49630 +3 49469 49473 49677 +3 49469 49677 49637 +3 49470 49638 49678 +3 49470 49678 49474 +3 49471 49584 49590 +3 49472 49591 49585 +3 49473 49650 49677 +3 49474 49678 49651 +3 49475 49861 49951 +3 49475 49951 49566 +3 49476 49567 49952 +3 49476 49952 49862 +3 49477 49531 49785 +3 49477 49785 49720 +3 49478 49721 49786 +3 49478 49786 49532 +3 49479 49827 50032 +3 49479 50032 49718 +3 49480 49719 50033 +3 49480 50033 49828 +3 49481 49694 49939 +3 49481 49939 49767 +3 49482 49768 49940 +3 49482 49940 49695 +3 49483 49580 49910 +3 49483 49910 49835 +3 49484 49836 49911 +3 49484 49911 49581 +3 49485 49491 49605 +3 49485 49605 49586 +3 49486 49587 49606 +3 49486 49606 49492 +3 49487 49795 49943 +3 49487 49943 49642 +3 49488 49643 49944 +3 49488 49944 49796 +3 49489 49588 49829 +3 49489 49829 49722 +3 49490 49723 49830 +3 49490 49830 49589 +3 49491 49597 49605 +3 49492 49606 49598 +3 49493 49758 49871 +3 49493 49871 49623 +3 49494 49624 49872 +3 49494 49872 49759 +3 49495 49730 49972 +3 49495 49972 49916 +3 49496 49917 49973 +3 49496 49973 49731 +3 49497 49756 50042 +3 49497 50042 49827 +3 49498 49828 50043 +3 49498 50043 49757 +3 49499 49675 49765 +3 49499 49765 49599 +3 49500 49600 49766 +3 49500 49766 49676 +3 49501 49611 49934 +3 49501 49934 49841 +3 49502 49842 49935 +3 49502 49935 49612 +3 49503 49655 50000 +3 49503 50000 49865 +3 49504 49866 50001 +3 49504 50001 49656 +3 49505 49734 49839 +3 49505 49839 49601 +3 49506 49602 49840 +3 49506 49840 49735 +3 49507 49685 49849 +3 49507 49849 49700 +3 49508 49701 49850 +3 49508 49850 49686 +3 49509 49681 49750 +3 49509 49750 49568 +3 49510 49569 49751 +3 49510 49751 49682 +3 49511 49607 49893 +3 49511 49893 49797 +3 49512 49798 49894 +3 49512 49894 49608 +3 49513 49767 49889 +3 49513 49889 49646 +3 49514 49647 49890 +3 49514 49890 49768 +3 49515 49535 49998 +3 49515 49998 49959 +3 49516 49960 49999 +3 49516 49999 49535 +3 49517 49887 49980 +3 49517 49980 49609 +3 49518 49610 49981 +3 49518 49981 49888 +3 49519 49708 49961 +3 49519 49961 49800 +3 49520 49801 49962 +3 49520 49962 49709 +3 49521 49815 49881 +3 49521 49881 49588 +3 49522 49589 49882 +3 49522 49882 49816 +3 49523 49586 49635 +3 49523 49635 49540 +3 49524 49540 49636 +3 49524 49636 49587 +3 49525 49627 49779 +3 49525 49779 49675 +3 49526 49676 49780 +3 49526 49780 49628 +3 49527 49700 49809 +3 49527 49809 49641 +3 49528 49641 49810 +3 49528 49810 49701 +3 49529 49644 49847 +3 49529 49847 49736 +3 49530 49737 49848 +3 49530 49848 49645 +3 49531 49541 49821 +3 49531 49821 49785 +3 49532 49786 49822 +3 49532 49822 49541 +3 49533 49582 49665 +3 49533 49665 49584 +3 49534 49585 49666 +3 49534 49666 49583 +3 49535 49999 49998 +3 49536 49831 49900 +3 49536 49900 49615 +3 49537 49616 49901 +3 49537 49901 49832 +3 49538 49722 49879 +3 49538 49879 49715 +3 49539 49716 49880 +3 49539 49880 49723 +3 49540 49635 49636 +3 49541 49822 49821 +3 49542 49752 50086 +3 49542 50086 49902 +3 49543 49903 50087 +3 49543 50087 49753 +3 49544 49633 49787 +3 49544 49787 49691 +3 49545 49692 49788 +3 49545 49788 49634 +3 49546 49590 49679 +3 49546 49679 49597 +3 49547 49598 49680 +3 49547 49680 49591 +3 49548 49691 49789 +3 49548 49789 49650 +3 49549 49651 49790 +3 49549 49790 49692 +3 49550 49613 49853 +3 49550 49853 49791 +3 49551 49792 49854 +3 49551 49854 49614 +3 49552 49683 49930 +3 49552 49930 49805 +3 49553 49806 49931 +3 49553 49931 49684 +3 49554 49637 49775 +3 49554 49775 49681 +3 49555 49682 49776 +3 49555 49776 49638 +3 49556 49859 50038 +3 49556 50038 49762 +3 49557 49763 50039 +3 49557 50039 49860 +3 49558 49988 50070 +3 49558 50070 49625 +3 49559 49626 50071 +3 49559 50071 49989 +3 49560 49732 50082 +3 49560 50082 49924 +3 49561 49925 50083 +3 49561 50083 49733 +3 49562 49631 49996 +3 49562 49996 49920 +3 49563 49921 49997 +3 49563 49997 49632 +3 49564 49736 49869 +3 49564 49869 49734 +3 49565 49735 49870 +3 49565 49870 49737 +3 49566 49951 50006 +3 49566 50006 49617 +3 49567 49618 50007 +3 49567 50007 49952 +3 49568 49750 49793 +3 49568 49793 49596 +3 49569 49596 49794 +3 49569 49794 49751 +3 49570 49774 50022 +3 49570 50022 49837 +3 49571 49838 50023 +3 49571 50023 49774 +3 49572 49813 49947 +3 49572 49947 49726 +3 49573 49727 49948 +3 49573 49948 49814 +3 49574 49891 49976 +3 49574 49976 49669 +3 49575 49670 49977 +3 49575 49977 49892 +3 49576 49837 50008 +3 49576 50008 49772 +3 49577 49773 50009 +3 49577 50009 49838 +3 49578 49897 50057 +3 49578 50057 49760 +3 49579 49761 50058 +3 49579 50058 49898 +3 49580 49646 49974 +3 49580 49974 49910 +3 49581 49911 49975 +3 49581 49975 49647 +3 49582 49583 49693 +3 49582 49693 49665 +3 49583 49666 49693 +3 49584 49665 49698 +3 49584 49698 49590 +3 49585 49591 49699 +3 49585 49699 49666 +3 49586 49605 49689 +3 49586 49689 49635 +3 49587 49636 49690 +3 49587 49690 49606 +3 49588 49881 49829 +3 49589 49830 49882 +3 49590 49698 49679 +3 49591 49680 49699 +3 49592 49800 50012 +3 49592 50012 49795 +3 49593 49796 50013 +3 49593 50013 49801 +3 49594 49770 49855 +3 49594 49855 49687 +3 49595 49688 49856 +3 49595 49856 49771 +3 49596 49793 49794 +3 49597 49679 49704 +3 49597 49704 49605 +3 49598 49606 49705 +3 49598 49705 49680 +3 49599 49765 49823 +3 49599 49823 49659 +3 49600 49660 49824 +3 49600 49824 49766 +3 49601 49839 49883 +3 49601 49883 49648 +3 49602 49649 49884 +3 49602 49884 49840 +3 49603 49720 49877 +3 49603 49877 49770 +3 49604 49771 49878 +3 49604 49878 49721 +3 49605 49704 49689 +3 49606 49690 49705 +3 49607 49744 50016 +3 49607 50016 49893 +3 49608 49894 50017 +3 49608 50017 49745 +3 49609 49980 50040 +3 49609 50040 49671 +3 49610 49672 50041 +3 49610 50041 49981 +3 49611 49696 50002 +3 49611 50002 49934 +3 49612 49935 50003 +3 49612 50003 49697 +3 49613 49648 49885 +3 49613 49885 49853 +3 49614 49854 49886 +3 49614 49886 49649 +3 49615 49900 49949 +3 49615 49949 49673 +3 49616 49674 49950 +3 49616 49950 49901 +3 49617 50006 49895 +3 49618 49896 50007 +3 49619 49805 49978 +3 49619 49978 49813 +3 49620 49814 49979 +3 49620 49979 49806 +3 49621 49807 49932 +3 49621 49932 49758 +3 49622 49759 49933 +3 49622 49933 49808 +3 49623 49871 49968 +3 49623 49968 49728 +3 49624 49729 49969 +3 49624 49969 49872 +3 49625 50070 50115 +3 49625 50115 49661 +3 49626 49662 50116 +3 49626 50116 50071 +3 49627 49628 49799 +3 49627 49799 49779 +3 49628 49780 49799 +3 49629 49769 49945 +3 49629 49945 49807 +3 49630 49808 49946 +3 49630 49946 49769 +3 49631 49661 50113 +3 49631 50113 49996 +3 49632 49997 50114 +3 49632 50114 49662 +3 49633 49667 49833 +3 49633 49833 49787 +3 49634 49788 49834 +3 49634 49834 49668 +3 49635 49689 49710 +3 49635 49710 49636 +3 49636 49710 49690 +3 49637 49677 49817 +3 49637 49817 49775 +3 49638 49776 49818 +3 49638 49818 49678 +3 49639 49895 50121 +3 49639 50121 49859 +3 49640 49860 50122 +3 49640 50122 49896 +3 49641 49809 49899 +3 49641 49899 49810 +3 49642 49943 50055 +3 49642 50055 49754 +3 49643 49755 50056 +3 49643 50056 49944 +3 49644 49724 49912 +3 49644 49912 49847 +3 49645 49848 49913 +3 49645 49913 49725 +3 49646 49889 49974 +3 49647 49975 49890 +3 49648 49883 49885 +3 49649 49886 49884 +3 49650 49789 49825 +3 49650 49825 49677 +3 49651 49678 49826 +3 49651 49826 49790 +3 49652 49797 50014 +3 49652 50014 49857 +3 49653 49858 50015 +3 49653 50015 49798 +3 49654 49918 50112 +3 49654 50112 49919 +3 49655 49742 50106 +3 49655 50106 50000 +3 49656 50001 50107 +3 49656 50107 49743 +3 49657 49819 50110 +3 49657 50110 49922 +3 49658 49923 50111 +3 49658 50111 49820 +3 49659 49823 49843 +3 49659 49843 49667 +3 49660 49668 49844 +3 49660 49844 49824 +3 49661 50115 50113 +3 49662 50114 50116 +3 49663 49857 50018 +3 49663 50018 49802 +3 49664 49802 50019 +3 49664 50019 49858 +3 49665 49693 49738 +3 49665 49738 49698 +3 49666 49699 49739 +3 49666 49739 49693 +3 49667 49843 49833 +3 49668 49834 49844 +3 49669 49976 50092 +3 49669 50092 49777 +3 49670 49778 50093 +3 49670 50093 49977 +3 49671 50040 50067 +3 49671 50067 49672 +3 49672 50067 50041 +3 49673 49949 49963 +3 49673 49963 49674 +3 49674 49963 49950 +3 49675 49779 49863 +3 49675 49863 49765 +3 49676 49766 49864 +3 49676 49864 49780 +3 49677 49825 49817 +3 49678 49818 49826 +3 49679 49698 49740 +3 49679 49740 49704 +3 49680 49705 49741 +3 49680 49741 49699 +3 49681 49775 49851 +3 49681 49851 49750 +3 49682 49751 49852 +3 49682 49852 49776 +3 49683 49748 50020 +3 49683 50020 49930 +3 49684 49931 50021 +3 49684 50021 49749 +3 49685 49791 49953 +3 49685 49953 49849 +3 49686 49850 49954 +3 49686 49954 49792 +3 49687 49855 49906 +3 49687 49906 49724 +3 49688 49725 49907 +3 49688 49907 49856 +3 49689 49704 49746 +3 49689 49746 49710 +3 49690 49710 49747 +3 49690 49747 49705 +3 49691 49787 49873 +3 49691 49873 49789 +3 49692 49790 49874 +3 49692 49874 49788 +3 49693 49739 49738 +3 49694 49841 50084 +3 49694 50084 49939 +3 49695 49940 50085 +3 49695 50085 49842 +3 49696 49717 50036 +3 49696 50036 50002 +3 49697 50003 50037 +3 49697 50037 49717 +3 49698 49738 49740 +3 49699 49741 49739 +3 49700 49849 49970 +3 49700 49970 49809 +3 49701 49810 49971 +3 49701 49971 49850 +3 49702 49902 50197 +3 49702 50197 49982 +3 49703 49983 50198 +3 49703 50198 49903 +3 49704 49740 49746 +3 49705 49747 49741 +3 49706 49865 50143 +3 49706 50143 49955 +3 49707 49956 50144 +3 49707 50144 49866 +3 49708 49835 50102 +3 49708 50102 49961 +3 49709 49962 50103 +3 49709 50103 49836 +3 49710 49746 49747 +3 49711 49955 50151 +3 49711 50151 49897 +3 49712 49898 50152 +3 49712 50152 49956 +3 49713 49922 50159 +3 49713 50159 49918 +3 49714 49919 50160 +3 49714 50160 49923 +3 49715 49879 50024 +3 49715 50024 49831 +3 49716 49832 50025 +3 49716 50025 49880 +3 49717 50037 50036 +3 49718 50032 50203 +3 49718 50203 49867 +3 49719 49868 50204 +3 49719 50204 50033 +3 49720 49785 49957 +3 49720 49957 49877 +3 49721 49878 49958 +3 49721 49958 49786 +3 49722 49829 49994 +3 49722 49994 49879 +3 49723 49880 49995 +3 49723 49995 49830 +3 49724 49906 49912 +3 49725 49913 49907 +3 49726 49947 50045 +3 49726 50045 49815 +3 49727 49816 50046 +3 49727 50046 49948 +3 49728 49968 50029 +3 49728 50029 49783 +3 49729 49784 50030 +3 49729 50030 49969 +3 49730 49982 50223 +3 49730 50223 49972 +3 49731 49973 50224 +3 49731 50224 49983 +3 49732 49845 50199 +3 49732 50199 50082 +3 49733 50083 50200 +3 49733 50200 49846 +3 49734 49869 49984 +3 49734 49984 49839 +3 49735 49840 49985 +3 49735 49985 49870 +3 49736 49847 49986 +3 49736 49986 49869 +3 49737 49870 49987 +3 49737 49987 49848 +3 49738 49739 49764 +3 49738 49764 49740 +3 49739 49741 49764 +3 49740 49764 49746 +3 49741 49747 49764 +3 49742 49781 50154 +3 49742 50154 50106 +3 49743 50107 50155 +3 49743 50155 49782 +3 49744 49811 50108 +3 49744 50108 50016 +3 49745 50017 50109 +3 49745 50109 49812 +3 49746 49764 49747 +3 49748 49783 50049 +3 49748 50049 50020 +3 49749 50021 50050 +3 49749 50050 49784 +3 49750 49851 49908 +3 49750 49908 49793 +3 49751 49794 49909 +3 49751 49909 49852 +3 49752 49875 50219 +3 49752 50219 50086 +3 49753 50087 50220 +3 49753 50220 49876 +3 49754 50055 50123 +3 49754 50123 49803 +3 49755 49804 50124 +3 49755 50124 50056 +3 49756 49924 50225 +3 49756 50225 50042 +3 49757 50043 50226 +3 49757 50226 49925 +3 49758 49932 50074 +3 49758 50074 49871 +3 49759 49872 50075 +3 49759 50075 49933 +3 49760 50057 50167 +3 49760 50167 49861 +3 49761 49862 50168 +3 49761 50168 50058 +3 49762 50038 50183 +3 49762 50183 49887 +3 49763 49888 50184 +3 49763 50184 50039 +3 49765 49863 49928 +3 49765 49928 49823 +3 49766 49824 49929 +3 49766 49929 49864 +3 49767 49939 50094 +3 49767 50094 49889 +3 49768 49890 50095 +3 49768 50095 49940 +3 49769 49946 50044 +3 49769 50044 49945 +3 49770 49877 49990 +3 49770 49990 49855 +3 49771 49856 49991 +3 49771 49991 49878 +3 49772 50008 50145 +3 49772 50145 49891 +3 49773 49892 50146 +3 49773 50146 50009 +3 49774 50023 50153 +3 49774 50153 50022 +3 49775 49817 49914 +3 49775 49914 49851 +3 49776 49852 49915 +3 49776 49915 49818 +3 49777 50092 50163 +3 49777 50163 49781 +3 49778 49782 50164 +3 49778 50164 50093 +3 49779 49799 49904 +3 49779 49904 49863 +3 49780 49864 49905 +3 49780 49905 49799 +3 49781 50163 50154 +3 49782 50155 50164 +3 49783 50029 50049 +3 49784 50050 50030 +3 49785 49821 50010 +3 49785 50010 49957 +3 49786 49958 50011 +3 49786 50011 49822 +3 49787 49833 49937 +3 49787 49937 49873 +3 49788 49874 49938 +3 49788 49938 49834 +3 49789 49873 49926 +3 49789 49926 49825 +3 49790 49826 49927 +3 49790 49927 49874 +3 49791 49853 50034 +3 49791 50034 49953 +3 49792 49954 50035 +3 49792 50035 49854 +3 49793 49908 49936 +3 49793 49936 49794 +3 49794 49936 49909 +3 49795 50012 50175 +3 49795 50175 49943 +3 49796 49944 50176 +3 49796 50176 50013 +3 49797 49893 50129 +3 49797 50129 50014 +3 49798 50015 50130 +3 49798 50130 49894 +3 49799 49905 49904 +3 49800 49961 50181 +3 49800 50181 50012 +3 49801 50013 50182 +3 49801 50182 49962 +3 49802 50018 50137 +3 49802 50137 50019 +3 49803 50123 50147 +3 49803 50147 49811 +3 49804 49812 50148 +3 49804 50148 50124 +3 49805 49930 50133 +3 49805 50133 49978 +3 49806 49979 50134 +3 49806 50134 49931 +3 49807 49945 50088 +3 49807 50088 49932 +3 49808 49933 50089 +3 49808 50089 49946 +3 49809 49970 50061 +3 49809 50061 49899 +3 49810 49899 50062 +3 49810 50062 49971 +3 49811 50147 50108 +3 49812 50109 50148 +3 49813 49978 50135 +3 49813 50135 49947 +3 49814 49948 50136 +3 49814 50136 49979 +3 49815 50045 50125 +3 49815 50125 49881 +3 49816 49882 50126 +3 49816 50126 50046 +3 49817 49825 49941 +3 49817 49941 49914 +3 49818 49915 49942 +3 49818 49942 49826 +3 49819 49920 50221 +3 49819 50221 50110 +3 49820 50111 50222 +3 49820 50222 49921 +3 49821 49822 50031 +3 49821 50031 50010 +3 49822 50011 50031 +3 49823 49928 49964 +3 49823 49964 49843 +3 49824 49844 49965 +3 49824 49965 49929 +3 49825 49926 49941 +3 49826 49942 49927 +3 49827 50042 50278 +3 49827 50278 50032 +3 49828 50033 50279 +3 49828 50279 50043 +3 49829 49881 50078 +3 49829 50078 49994 +3 49830 49995 50079 +3 49830 50079 49882 +3 49831 50024 50119 +3 49831 50119 49900 +3 49832 49901 50120 +3 49832 50120 50025 +3 49833 49843 49966 +3 49833 49966 49937 +3 49834 49938 49967 +3 49834 49967 49844 +3 49835 49910 50185 +3 49835 50185 50102 +3 49836 50103 50186 +3 49836 50186 49911 +3 49837 50022 50215 +3 49837 50215 50008 +3 49838 50009 50216 +3 49838 50216 50023 +3 49839 49984 50065 +3 49839 50065 49883 +3 49840 49884 50066 +3 49840 50066 49985 +3 49841 49934 50195 +3 49841 50195 50084 +3 49842 50085 50196 +3 49842 50196 49935 +3 49843 49964 49966 +3 49844 49967 49965 +3 49845 49916 50269 +3 49845 50269 50199 +3 49846 50200 50270 +3 49846 50270 49917 +3 49847 49912 50076 +3 49847 50076 49986 +3 49848 49987 50077 +3 49848 50077 49913 +3 49849 49953 50096 +3 49849 50096 49970 +3 49850 49971 50097 +3 49850 50097 49954 +3 49851 49914 50004 +3 49851 50004 49908 +3 49852 49909 50005 +3 49852 50005 49915 +3 49853 49885 50080 +3 49853 50080 50034 +3 49854 50035 50081 +3 49854 50081 49886 +3 49855 49990 50068 +3 49855 50068 49906 +3 49856 49907 50069 +3 49856 50069 49991 +3 49857 50014 50177 +3 49857 50177 50018 +3 49858 50019 50178 +3 49858 50178 50015 +3 49859 50121 50275 +3 49859 50275 50038 +3 49860 50039 50276 +3 49860 50276 50122 +3 49861 50167 50257 +3 49861 50257 49951 +3 49862 49952 50258 +3 49862 50258 50168 +3 49863 49904 49992 +3 49863 49992 49928 +3 49864 49929 49993 +3 49864 49993 49905 +3 49865 50000 50282 +3 49865 50282 50143 +3 49866 50144 50283 +3 49866 50283 50001 +3 49867 50203 50315 +3 49867 50315 49988 +3 49868 49989 50316 +3 49868 50316 50204 +3 49869 49986 50117 +3 49869 50117 49984 +3 49870 49985 50118 +3 49870 50118 49987 +3 49871 50074 50171 +3 49871 50171 49968 +3 49872 49969 50172 +3 49872 50172 50075 +3 49873 49937 50027 +3 49873 50027 49926 +3 49874 49927 50028 +3 49874 50028 49938 +3 49875 49959 50294 +3 49875 50294 50219 +3 49876 50220 50295 +3 49876 50295 49960 +3 49877 49957 50100 +3 49877 50100 49990 +3 49878 49991 50101 +3 49878 50101 49958 +3 49879 49994 50156 +3 49879 50156 50024 +3 49880 50025 50157 +3 49880 50157 49995 +3 49881 50125 50078 +3 49882 50079 50126 +3 49883 50065 50090 +3 49883 50090 49885 +3 49884 49886 50091 +3 49884 50091 50066 +3 49885 50090 50080 +3 49886 50081 50091 +3 49887 50183 50273 +3 49887 50273 49980 +3 49888 49981 50274 +3 49888 50274 50184 +3 49889 50094 50193 +3 49889 50193 49974 +3 49890 49975 50194 +3 49890 50194 50095 +3 49891 50145 50241 +3 49891 50241 49976 +3 49892 49977 50242 +3 49892 50242 50146 +3 49893 50016 50243 +3 49893 50243 50129 +3 49894 50130 50244 +3 49894 50244 50017 +3 49895 50006 50237 +3 49895 50237 50121 +3 49896 50122 50238 +3 49896 50238 50007 +3 49897 50151 50296 +3 49897 50296 50057 +3 49898 50058 50297 +3 49898 50297 50152 +3 49899 50061 50062 +3 49900 50119 50165 +3 49900 50165 49949 +3 49901 49950 50166 +3 49901 50166 50120 +3 49902 50086 50352 +3 49902 50352 50197 +3 49903 50198 50353 +3 49903 50353 50087 +3 49904 49905 50026 +3 49904 50026 49992 +3 49905 49993 50026 +3 49906 50068 50098 +3 49906 50098 49912 +3 49907 49913 50099 +3 49907 50099 50069 +3 49908 50004 50047 +3 49908 50047 49936 +3 49909 49936 50048 +3 49909 50048 50005 +3 49910 49974 50249 +3 49910 50249 50185 +3 49911 50186 50250 +3 49911 50250 49975 +3 49912 50098 50076 +3 49913 50077 50099 +3 49914 49941 50051 +3 49914 50051 50004 +3 49915 50005 50052 +3 49915 50052 49942 +3 49916 49972 50317 +3 49916 50317 50269 +3 49917 50270 50318 +3 49917 50318 49973 +3 49918 50159 50321 +3 49918 50321 50112 +3 49919 50112 50322 +3 49919 50322 50160 +3 49920 49996 50292 +3 49920 50292 50221 +3 49921 50222 50293 +3 49921 50293 49997 +3 49922 50110 50319 +3 49922 50319 50159 +3 49923 50160 50320 +3 49923 50320 50111 +3 49924 50082 50368 +3 49924 50368 50225 +3 49925 50226 50369 +3 49925 50369 50083 +3 49926 50027 50059 +3 49926 50059 49941 +3 49927 49942 50060 +3 49927 50060 50028 +3 49928 49992 50053 +3 49928 50053 49964 +3 49929 49965 50054 +3 49929 50054 49993 +3 49930 50020 50217 +3 49930 50217 50133 +3 49931 50134 50218 +3 49931 50218 50021 +3 49932 50088 50233 +3 49932 50233 50074 +3 49933 50075 50234 +3 49933 50234 50089 +3 49934 50002 50263 +3 49934 50263 50195 +3 49935 50196 50264 +3 49935 50264 50003 +3 49936 50047 50048 +3 49937 49966 50063 +3 49937 50063 50027 +3 49938 50028 50064 +3 49938 50064 49967 +3 49939 50084 50247 +3 49939 50247 50094 +3 49940 50095 50248 +3 49940 50248 50085 +3 49941 50059 50051 +3 49942 50052 50060 +3 49943 50175 50284 +3 49943 50284 50055 +3 49944 50056 50285 +3 49944 50285 50176 +3 49945 50044 50208 +3 49945 50208 50088 +3 49946 50089 50209 +3 49946 50209 50044 +3 49947 50135 50231 +3 49947 50231 50045 +3 49948 50046 50232 +3 49948 50232 50136 +3 49949 50165 50212 +3 49949 50212 49963 +3 49950 49963 50213 +3 49950 50213 50166 +3 49951 50257 50304 +3 49951 50304 50006 +3 49952 50007 50305 +3 49952 50305 50258 +3 49953 50034 50169 +3 49953 50169 50096 +3 49954 50097 50170 +3 49954 50170 50035 +3 49955 50143 50338 +3 49955 50338 50151 +3 49956 50152 50339 +3 49956 50339 50144 +3 49957 50010 50161 +3 49957 50161 50100 +3 49958 50101 50162 +3 49958 50162 50011 +3 49959 49998 50354 +3 49959 50354 50294 +3 49960 50295 50355 +3 49960 50355 49999 +3 49961 50102 50300 +3 49961 50300 50181 +3 49962 50182 50301 +3 49962 50301 50103 +3 49963 50212 50213 +3 49964 50053 50072 +3 49964 50072 49966 +3 49965 49967 50073 +3 49965 50073 50054 +3 49966 50072 50063 +3 49967 50064 50073 +3 49968 50171 50245 +3 49968 50245 50029 +3 49969 50030 50246 +3 49969 50246 50172 +3 49970 50096 50191 +3 49970 50191 50061 +3 49971 50062 50192 +3 49971 50192 50097 +3 49972 50223 50317 +3 49973 50318 50224 +3 49974 50193 50249 +3 49975 50250 50194 +3 49976 50241 50346 +3 49976 50346 50092 +3 49977 50093 50347 +3 49977 50347 50242 +3 49978 50133 50255 +3 49978 50255 50135 +3 49979 50136 50256 +3 49979 50256 50134 +3 49980 50273 50336 +3 49980 50336 50040 +3 49981 50041 50337 +3 49981 50337 50274 +3 49982 50197 50404 +3 49982 50404 50223 +3 49983 50224 50405 +3 49983 50405 50198 +3 49984 50117 50201 +3 49984 50201 50065 +3 49985 50066 50202 +3 49985 50202 50118 +3 49986 50076 50206 +3 49986 50206 50117 +3 49987 50118 50207 +3 49987 50207 50077 +3 49988 50315 50393 +3 49988 50393 50070 +3 49989 50071 50394 +3 49989 50394 50316 +3 49990 50100 50189 +3 49990 50189 50068 +3 49991 50069 50190 +3 49991 50190 50101 +3 49992 50026 50104 +3 49992 50104 50053 +3 49993 50054 50105 +3 49993 50105 50026 +3 49994 50078 50251 +3 49994 50251 50156 +3 49995 50157 50252 +3 49995 50252 50079 +3 49996 50113 50388 +3 49996 50388 50292 +3 49997 50293 50389 +3 49997 50389 50114 +3 49998 49999 50376 +3 49998 50376 50354 +3 49999 50355 50376 +3 50000 50106 50379 +3 50000 50379 50282 +3 50001 50283 50380 +3 50001 50380 50107 +3 50002 50036 50302 +3 50002 50302 50263 +3 50003 50264 50303 +3 50003 50303 50037 +3 50004 50051 50127 +3 50004 50127 50047 +3 50005 50048 50128 +3 50005 50128 50052 +3 50006 50304 50237 +3 50007 50238 50305 +3 50008 50215 50344 +3 50008 50344 50145 +3 50009 50146 50345 +3 50009 50345 50216 +3 50010 50031 50210 +3 50010 50210 50161 +3 50011 50162 50211 +3 50011 50211 50031 +3 50012 50181 50327 +3 50012 50327 50175 +3 50013 50176 50328 +3 50013 50328 50182 +3 50014 50129 50286 +3 50014 50286 50177 +3 50015 50178 50287 +3 50015 50287 50130 +3 50016 50108 50313 +3 50016 50313 50243 +3 50017 50244 50314 +3 50017 50314 50109 +3 50018 50177 50298 +3 50018 50298 50137 +3 50019 50137 50299 +3 50019 50299 50178 +3 50020 50049 50265 +3 50020 50265 50217 +3 50021 50218 50266 +3 50021 50266 50050 +3 50022 50153 50348 +3 50022 50348 50215 +3 50023 50216 50349 +3 50023 50349 50153 +3 50024 50156 50261 +3 50024 50261 50119 +3 50025 50120 50262 +3 50025 50262 50157 +3 50026 50105 50104 +3 50027 50063 50131 +3 50027 50131 50059 +3 50028 50060 50132 +3 50028 50132 50064 +3 50029 50245 50267 +3 50029 50267 50049 +3 50030 50050 50268 +3 50030 50268 50246 +3 50031 50211 50210 +3 50032 50278 50436 +3 50032 50436 50203 +3 50033 50204 50437 +3 50033 50437 50279 +3 50034 50080 50229 +3 50034 50229 50169 +3 50035 50170 50230 +3 50035 50230 50081 +3 50036 50037 50310 +3 50036 50310 50302 +3 50037 50303 50310 +3 50038 50275 50397 +3 50038 50397 50183 +3 50039 50184 50398 +3 50039 50398 50276 +3 50040 50336 50372 +3 50040 50372 50067 +3 50041 50067 50373 +3 50041 50373 50337 +3 50042 50225 50449 +3 50042 50449 50278 +3 50043 50279 50450 +3 50043 50450 50226 +3 50044 50209 50277 +3 50044 50277 50208 +3 50045 50231 50290 +3 50045 50290 50125 +3 50046 50126 50291 +3 50046 50291 50232 +3 50047 50127 50140 +3 50047 50140 50048 +3 50048 50140 50128 +3 50049 50267 50265 +3 50050 50266 50268 +3 50051 50059 50141 +3 50051 50141 50127 +3 50052 50128 50142 +3 50052 50142 50060 +3 50053 50104 50138 +3 50053 50138 50072 +3 50054 50073 50139 +3 50054 50139 50105 +3 50055 50284 50360 +3 50055 50360 50123 +3 50056 50124 50361 +3 50056 50361 50285 +3 50057 50296 50406 +3 50057 50406 50167 +3 50058 50168 50407 +3 50058 50407 50297 +3 50059 50131 50141 +3 50060 50142 50132 +3 50061 50191 50214 +3 50061 50214 50062 +3 50062 50214 50192 +3 50063 50072 50149 +3 50063 50149 50131 +3 50064 50132 50150 +3 50064 50150 50073 +3 50065 50201 50239 +3 50065 50239 50090 +3 50066 50091 50240 +3 50066 50240 50202 +3 50067 50372 50373 +3 50068 50189 50227 +3 50068 50227 50098 +3 50069 50099 50228 +3 50069 50228 50190 +3 50070 50393 50452 +3 50070 50452 50115 +3 50071 50116 50453 +3 50071 50453 50394 +3 50072 50138 50149 +3 50073 50150 50139 +3 50074 50233 50325 +3 50074 50325 50171 +3 50075 50172 50326 +3 50075 50326 50234 +3 50076 50098 50235 +3 50076 50235 50206 +3 50077 50207 50236 +3 50077 50236 50099 +3 50078 50125 50288 +3 50078 50288 50251 +3 50079 50252 50289 +3 50079 50289 50126 +3 50080 50090 50253 +3 50080 50253 50229 +3 50081 50230 50254 +3 50081 50254 50091 +3 50082 50199 50474 +3 50082 50474 50368 +3 50083 50369 50475 +3 50083 50475 50200 +3 50084 50195 50366 +3 50084 50366 50247 +3 50085 50248 50367 +3 50085 50367 50196 +3 50086 50219 50478 +3 50086 50478 50352 +3 50087 50353 50479 +3 50087 50479 50220 +3 50088 50208 50340 +3 50088 50340 50233 +3 50089 50234 50341 +3 50089 50341 50209 +3 50090 50239 50253 +3 50091 50254 50240 +3 50092 50346 50408 +3 50092 50408 50163 +3 50093 50164 50409 +3 50093 50409 50347 +3 50094 50247 50350 +3 50094 50350 50193 +3 50095 50194 50351 +3 50095 50351 50248 +3 50096 50169 50271 +3 50096 50271 50191 +3 50097 50192 50272 +3 50097 50272 50170 +3 50098 50227 50235 +3 50099 50236 50228 +3 50100 50161 50259 +3 50100 50259 50189 +3 50101 50190 50260 +3 50101 50260 50162 +3 50102 50185 50384 +3 50102 50384 50300 +3 50103 50301 50385 +3 50103 50385 50186 +3 50104 50105 50158 +3 50104 50158 50138 +3 50105 50139 50158 +3 50106 50154 50422 +3 50106 50422 50379 +3 50107 50380 50423 +3 50107 50423 50155 +3 50108 50147 50374 +3 50108 50374 50313 +3 50109 50314 50375 +3 50109 50375 50148 +3 50110 50221 50440 +3 50110 50440 50319 +3 50111 50320 50441 +3 50111 50441 50222 +3 50112 50321 50451 +3 50112 50451 50322 +3 50113 50115 50468 +3 50113 50468 50388 +3 50114 50389 50469 +3 50114 50469 50116 +3 50115 50452 50468 +3 50116 50469 50453 +3 50117 50206 50280 +3 50117 50280 50201 +3 50118 50202 50281 +3 50118 50281 50207 +3 50119 50261 50331 +3 50119 50331 50165 +3 50120 50166 50332 +3 50120 50332 50262 +3 50121 50237 50402 +3 50121 50402 50275 +3 50122 50276 50403 +3 50122 50403 50238 +3 50123 50360 50386 +3 50123 50386 50147 +3 50124 50148 50387 +3 50124 50387 50361 +3 50125 50290 50288 +3 50126 50289 50291 +3 50127 50141 50173 +3 50127 50173 50140 +3 50128 50140 50174 +3 50128 50174 50142 +3 50129 50243 50410 +3 50129 50410 50286 +3 50130 50287 50411 +3 50130 50411 50244 +3 50131 50149 50179 +3 50131 50179 50141 +3 50132 50142 50180 +3 50132 50180 50150 +3 50133 50217 50358 +3 50133 50358 50255 +3 50134 50256 50359 +3 50134 50359 50218 +3 50135 50255 50362 +3 50135 50362 50231 +3 50136 50232 50363 +3 50136 50363 50256 +3 50137 50298 50383 +3 50137 50383 50299 +3 50138 50158 50187 +3 50138 50187 50149 +3 50139 50150 50188 +3 50139 50188 50158 +3 50140 50173 50174 +3 50141 50179 50173 +3 50142 50174 50180 +3 50143 50282 50482 +3 50143 50482 50338 +3 50144 50339 50483 +3 50144 50483 50283 +3 50145 50344 50426 +3 50145 50426 50241 +3 50146 50242 50427 +3 50146 50427 50345 +3 50147 50386 50374 +3 50148 50375 50387 +3 50149 50187 50179 +3 50150 50180 50188 +3 50151 50338 50486 +3 50151 50486 50296 +3 50152 50297 50487 +3 50152 50487 50339 +3 50153 50349 50448 +3 50153 50448 50348 +3 50154 50163 50466 +3 50154 50466 50422 +3 50155 50423 50467 +3 50155 50467 50164 +3 50156 50251 50370 +3 50156 50370 50261 +3 50157 50262 50371 +3 50157 50371 50252 +3 50158 50188 50187 +3 50159 50319 50496 +3 50159 50496 50321 +3 50160 50322 50497 +3 50160 50497 50320 +3 50161 50210 50308 +3 50161 50308 50259 +3 50162 50260 50309 +3 50162 50309 50211 +3 50163 50408 50466 +3 50164 50467 50409 +3 50165 50331 50377 +3 50165 50377 50212 +3 50166 50213 50378 +3 50166 50378 50332 +3 50167 50406 50490 +3 50167 50490 50257 +3 50168 50258 50491 +3 50168 50491 50407 +3 50169 50229 50329 +3 50169 50329 50271 +3 50170 50272 50330 +3 50170 50330 50230 +3 50171 50325 50395 +3 50171 50395 50245 +3 50172 50246 50396 +3 50172 50396 50326 +3 50173 50179 50205 +3 50173 50205 50174 +3 50174 50205 50180 +3 50175 50327 50464 +3 50175 50464 50284 +3 50176 50285 50465 +3 50176 50465 50328 +3 50177 50286 50418 +3 50177 50418 50298 +3 50178 50299 50419 +3 50178 50419 50287 +3 50179 50187 50205 +3 50180 50205 50188 +3 50181 50300 50470 +3 50181 50470 50327 +3 50182 50328 50471 +3 50182 50471 50301 +3 50183 50397 50500 +3 50183 50500 50273 +3 50184 50274 50501 +3 50184 50501 50398 +3 50185 50249 50456 +3 50185 50456 50384 +3 50186 50385 50457 +3 50186 50457 50250 +3 50187 50188 50205 +3 50189 50259 50311 +3 50189 50311 50227 +3 50190 50228 50312 +3 50190 50312 50260 +3 50191 50271 50306 +3 50191 50306 50214 +3 50192 50214 50307 +3 50192 50307 50272 +3 50193 50350 50412 +3 50193 50412 50249 +3 50194 50250 50413 +3 50194 50413 50351 +3 50195 50263 50446 +3 50195 50446 50366 +3 50196 50367 50447 +3 50196 50447 50264 +3 50197 50352 50560 +3 50197 50560 50404 +3 50198 50405 50561 +3 50198 50561 50353 +3 50199 50269 50540 +3 50199 50540 50474 +3 50200 50475 50541 +3 50200 50541 50270 +3 50201 50280 50334 +3 50201 50334 50239 +3 50202 50240 50335 +3 50202 50335 50281 +3 50203 50436 50570 +3 50203 50570 50315 +3 50204 50316 50571 +3 50204 50571 50437 +3 50206 50235 50323 +3 50206 50323 50280 +3 50207 50281 50324 +3 50207 50324 50236 +3 50208 50277 50414 +3 50208 50414 50340 +3 50209 50341 50415 +3 50209 50415 50277 +3 50210 50211 50333 +3 50210 50333 50308 +3 50211 50309 50333 +3 50212 50377 50392 +3 50212 50392 50213 +3 50213 50392 50378 +3 50214 50306 50307 +3 50215 50348 50484 +3 50215 50484 50344 +3 50216 50345 50485 +3 50216 50485 50349 +3 50217 50265 50416 +3 50217 50416 50358 +3 50218 50359 50417 +3 50218 50417 50266 +3 50219 50294 50557 +3 50219 50557 50478 +3 50220 50479 50558 +3 50220 50558 50295 +3 50221 50292 50520 +3 50221 50520 50440 +3 50222 50441 50521 +3 50222 50521 50293 +3 50223 50404 50515 +3 50223 50515 50317 +3 50224 50318 50516 +3 50224 50516 50405 +3 50225 50368 50584 +3 50225 50584 50449 +3 50226 50450 50585 +3 50226 50585 50369 +3 50227 50311 50342 +3 50227 50342 50235 +3 50228 50236 50343 +3 50228 50343 50312 +3 50229 50253 50356 +3 50229 50356 50329 +3 50230 50330 50357 +3 50230 50357 50254 +3 50231 50362 50432 +3 50231 50432 50290 +3 50232 50291 50433 +3 50232 50433 50363 +3 50233 50340 50454 +3 50233 50454 50325 +3 50234 50326 50455 +3 50234 50455 50341 +3 50235 50342 50323 +3 50236 50324 50343 +3 50237 50304 50494 +3 50237 50494 50402 +3 50238 50403 50495 +3 50238 50495 50305 +3 50239 50334 50364 +3 50239 50364 50253 +3 50240 50254 50365 +3 50240 50365 50335 +3 50241 50426 50534 +3 50241 50534 50346 +3 50242 50347 50535 +3 50242 50535 50427 +3 50243 50313 50502 +3 50243 50502 50410 +3 50244 50411 50503 +3 50244 50503 50314 +3 50245 50395 50434 +3 50245 50434 50267 +3 50246 50268 50435 +3 50246 50435 50396 +3 50247 50366 50480 +3 50247 50480 50350 +3 50248 50351 50481 +3 50248 50481 50367 +3 50249 50412 50456 +3 50250 50457 50413 +3 50251 50288 50420 +3 50251 50420 50370 +3 50252 50371 50421 +3 50252 50421 50289 +3 50253 50364 50356 +3 50254 50357 50365 +3 50255 50358 50472 +3 50255 50472 50362 +3 50256 50363 50473 +3 50256 50473 50359 +3 50257 50490 50546 +3 50257 50546 50304 +3 50258 50305 50547 +3 50258 50547 50491 +3 50259 50308 50390 +3 50259 50390 50311 +3 50260 50312 50391 +3 50260 50391 50309 +3 50261 50370 50460 +3 50261 50460 50331 +3 50262 50332 50461 +3 50262 50461 50371 +3 50263 50302 50498 +3 50263 50498 50446 +3 50264 50447 50499 +3 50264 50499 50303 +3 50265 50267 50444 +3 50265 50444 50416 +3 50266 50417 50445 +3 50266 50445 50268 +3 50267 50434 50444 +3 50268 50445 50435 +3 50269 50317 50592 +3 50269 50592 50540 +3 50270 50541 50593 +3 50270 50593 50318 +3 50271 50329 50381 +3 50271 50381 50306 +3 50272 50307 50382 +3 50272 50382 50330 +3 50273 50500 50564 +3 50273 50564 50336 +3 50274 50337 50565 +3 50274 50565 50501 +3 50275 50402 50544 +3 50275 50544 50397 +3 50276 50398 50545 +3 50276 50545 50403 +3 50277 50415 50414 +3 50278 50449 50616 +3 50278 50616 50436 +3 50279 50437 50617 +3 50279 50617 50450 +3 50280 50323 50400 +3 50280 50400 50334 +3 50281 50335 50401 +3 50281 50401 50324 +3 50282 50379 50588 +3 50282 50588 50482 +3 50283 50483 50589 +3 50283 50589 50380 +3 50284 50464 50528 +3 50284 50528 50360 +3 50285 50361 50529 +3 50285 50529 50465 +3 50286 50410 50553 +3 50286 50553 50418 +3 50287 50419 50554 +3 50287 50554 50411 +3 50288 50290 50458 +3 50288 50458 50420 +3 50289 50421 50459 +3 50289 50459 50291 +3 50290 50432 50458 +3 50291 50459 50433 +3 50292 50388 50620 +3 50292 50620 50520 +3 50293 50521 50621 +3 50293 50621 50389 +3 50294 50354 50614 +3 50294 50614 50557 +3 50295 50558 50615 +3 50295 50615 50355 +3 50296 50486 50599 +3 50296 50599 50406 +3 50297 50407 50600 +3 50297 50600 50487 +3 50298 50418 50518 +3 50298 50518 50383 +3 50299 50383 50519 +3 50299 50519 50419 +3 50300 50384 50551 +3 50300 50551 50470 +3 50301 50471 50552 +3 50301 50552 50385 +3 50302 50310 50522 +3 50302 50522 50498 +3 50303 50499 50523 +3 50303 50523 50310 +3 50304 50546 50494 +3 50305 50495 50547 +3 50306 50381 50399 +3 50306 50399 50307 +3 50307 50399 50382 +3 50308 50333 50424 +3 50308 50424 50390 +3 50309 50391 50425 +3 50309 50425 50333 +3 50310 50523 50522 +3 50311 50390 50428 +3 50311 50428 50342 +3 50312 50343 50429 +3 50312 50429 50391 +3 50313 50374 50555 +3 50313 50555 50502 +3 50314 50503 50556 +3 50314 50556 50375 +3 50315 50570 50646 +3 50315 50646 50393 +3 50316 50394 50647 +3 50316 50647 50571 +3 50317 50515 50592 +3 50318 50593 50516 +3 50319 50440 50618 +3 50319 50618 50496 +3 50320 50497 50619 +3 50320 50619 50441 +3 50321 50496 50622 +3 50321 50622 50451 +3 50322 50451 50623 +3 50322 50623 50497 +3 50323 50342 50438 +3 50323 50438 50400 +3 50324 50401 50439 +3 50324 50439 50343 +3 50325 50454 50513 +3 50325 50513 50395 +3 50326 50396 50514 +3 50326 50514 50455 +3 50327 50470 50574 +3 50327 50574 50464 +3 50328 50465 50575 +3 50328 50575 50471 +3 50329 50356 50430 +3 50329 50430 50381 +3 50330 50382 50431 +3 50330 50431 50357 +3 50331 50460 50506 +3 50331 50506 50377 +3 50332 50378 50507 +3 50332 50507 50461 +3 50333 50425 50424 +3 50334 50400 50442 +3 50334 50442 50364 +3 50335 50365 50443 +3 50335 50443 50401 +3 50336 50564 50601 +3 50336 50601 50372 +3 50337 50373 50602 +3 50337 50602 50565 +3 50338 50482 50624 +3 50338 50624 50486 +3 50339 50487 50625 +3 50339 50625 50483 +3 50340 50414 50526 +3 50340 50526 50454 +3 50341 50455 50527 +3 50341 50527 50415 +3 50342 50428 50438 +3 50343 50439 50429 +3 50344 50484 50590 +3 50344 50590 50426 +3 50345 50427 50591 +3 50345 50591 50485 +3 50346 50534 50610 +3 50346 50610 50408 +3 50347 50409 50611 +3 50347 50611 50535 +3 50348 50448 50597 +3 50348 50597 50484 +3 50349 50485 50598 +3 50349 50598 50448 +3 50350 50480 50562 +3 50350 50562 50412 +3 50351 50413 50563 +3 50351 50563 50481 +3 50352 50478 50665 +3 50352 50665 50560 +3 50353 50561 50666 +3 50353 50666 50479 +3 50354 50376 50634 +3 50354 50634 50614 +3 50355 50615 50635 +3 50355 50635 50376 +3 50356 50364 50462 +3 50356 50462 50430 +3 50357 50431 50463 +3 50357 50463 50365 +3 50358 50416 50530 +3 50358 50530 50472 +3 50359 50473 50531 +3 50359 50531 50417 +3 50360 50528 50580 +3 50360 50580 50386 +3 50361 50387 50581 +3 50361 50581 50529 +3 50362 50472 50532 +3 50362 50532 50432 +3 50363 50433 50533 +3 50363 50533 50473 +3 50364 50442 50462 +3 50365 50463 50443 +3 50366 50446 50578 +3 50366 50578 50480 +3 50367 50481 50579 +3 50367 50579 50447 +3 50368 50474 50676 +3 50368 50676 50584 +3 50369 50585 50677 +3 50369 50677 50475 +3 50370 50420 50524 +3 50370 50524 50460 +3 50371 50461 50525 +3 50371 50525 50421 +3 50372 50601 50609 +3 50372 50609 50373 +3 50373 50609 50602 +3 50374 50386 50586 +3 50374 50586 50555 +3 50375 50556 50587 +3 50375 50587 50387 +3 50376 50635 50634 +3 50377 50506 50536 +3 50377 50536 50392 +3 50378 50392 50537 +3 50378 50537 50507 +3 50379 50422 50642 +3 50379 50642 50588 +3 50380 50589 50643 +3 50380 50643 50423 +3 50381 50430 50476 +3 50381 50476 50399 +3 50382 50399 50477 +3 50382 50477 50431 +3 50383 50518 50594 +3 50383 50594 50519 +3 50384 50456 50607 +3 50384 50607 50551 +3 50385 50552 50608 +3 50385 50608 50457 +3 50386 50580 50586 +3 50387 50587 50581 +3 50388 50468 50682 +3 50388 50682 50620 +3 50389 50621 50683 +3 50389 50683 50469 +3 50390 50424 50488 +3 50390 50488 50428 +3 50391 50429 50489 +3 50391 50489 50425 +3 50392 50536 50537 +3 50393 50646 50685 +3 50393 50685 50452 +3 50394 50453 50686 +3 50394 50686 50647 +3 50395 50513 50568 +3 50395 50568 50434 +3 50396 50435 50569 +3 50396 50569 50514 +3 50397 50544 50644 +3 50397 50644 50500 +3 50398 50501 50645 +3 50398 50645 50545 +3 50399 50476 50477 +3 50400 50438 50492 +3 50400 50492 50442 +3 50401 50443 50493 +3 50401 50493 50439 +3 50402 50494 50628 +3 50402 50628 50544 +3 50403 50545 50629 +3 50403 50629 50495 +3 50404 50560 50672 +3 50404 50672 50515 +3 50405 50516 50673 +3 50405 50673 50561 +3 50406 50599 50668 +3 50406 50668 50490 +3 50407 50491 50669 +3 50407 50669 50600 +3 50408 50610 50652 +3 50408 50652 50466 +3 50409 50467 50653 +3 50409 50653 50611 +3 50410 50502 50626 +3 50410 50626 50553 +3 50411 50554 50627 +3 50411 50627 50503 +3 50412 50562 50603 +3 50412 50603 50456 +3 50413 50457 50604 +3 50413 50604 50563 +3 50414 50415 50550 +3 50414 50550 50526 +3 50415 50527 50550 +3 50416 50444 50576 +3 50416 50576 50530 +3 50417 50531 50577 +3 50417 50577 50445 +3 50418 50553 50640 +3 50418 50640 50518 +3 50419 50519 50641 +3 50419 50641 50554 +3 50420 50458 50566 +3 50420 50566 50524 +3 50421 50525 50567 +3 50421 50567 50459 +3 50422 50466 50670 +3 50422 50670 50642 +3 50423 50643 50671 +3 50423 50671 50467 +3 50424 50425 50508 +3 50424 50508 50488 +3 50425 50489 50508 +3 50426 50590 50687 +3 50426 50687 50534 +3 50427 50535 50688 +3 50427 50688 50591 +3 50428 50488 50509 +3 50428 50509 50438 +3 50429 50439 50510 +3 50429 50510 50489 +3 50430 50462 50504 +3 50430 50504 50476 +3 50431 50477 50505 +3 50431 50505 50463 +3 50432 50532 50572 +3 50432 50572 50458 +3 50433 50459 50573 +3 50433 50573 50533 +3 50434 50568 50582 +3 50434 50582 50444 +3 50435 50445 50583 +3 50435 50583 50569 +3 50436 50616 50739 +3 50436 50739 50570 +3 50437 50571 50740 +3 50437 50740 50617 +3 50438 50509 50492 +3 50439 50493 50510 +3 50440 50520 50693 +3 50440 50693 50618 +3 50441 50619 50694 +3 50441 50694 50521 +3 50442 50492 50511 +3 50442 50511 50462 +3 50443 50463 50512 +3 50443 50512 50493 +3 50444 50582 50576 +3 50445 50577 50583 +3 50446 50498 50632 +3 50446 50632 50578 +3 50447 50579 50633 +3 50447 50633 50499 +3 50448 50598 50667 +3 50448 50667 50597 +3 50449 50584 50743 +3 50449 50743 50616 +3 50450 50617 50744 +3 50450 50744 50585 +3 50451 50622 50699 +3 50451 50699 50623 +3 50452 50685 50704 +3 50452 50704 50468 +3 50453 50469 50705 +3 50453 50705 50686 +3 50454 50526 50605 +3 50454 50605 50513 +3 50455 50514 50606 +3 50455 50606 50527 +3 50456 50603 50607 +3 50457 50608 50604 +3 50458 50572 50566 +3 50459 50567 50573 +3 50460 50524 50595 +3 50460 50595 50506 +3 50461 50507 50596 +3 50461 50596 50525 +3 50462 50511 50504 +3 50463 50505 50512 +3 50464 50574 50657 +3 50464 50657 50528 +3 50465 50529 50658 +3 50465 50658 50575 +3 50466 50652 50670 +3 50467 50671 50653 +3 50468 50704 50682 +3 50469 50683 50705 +3 50470 50551 50661 +3 50470 50661 50574 +3 50471 50575 50662 +3 50471 50662 50552 +3 50472 50530 50612 +3 50472 50612 50532 +3 50473 50533 50613 +3 50473 50613 50531 +3 50474 50540 50747 +3 50474 50747 50676 +3 50475 50677 50748 +3 50475 50748 50541 +3 50476 50504 50517 +3 50476 50517 50477 +3 50477 50517 50505 +3 50478 50557 50757 +3 50478 50757 50665 +3 50479 50666 50758 +3 50479 50758 50558 +3 50480 50578 50663 +3 50480 50663 50562 +3 50481 50563 50664 +3 50481 50664 50579 +3 50482 50588 50721 +3 50482 50721 50624 +3 50483 50625 50722 +3 50483 50722 50589 +3 50484 50597 50697 +3 50484 50697 50590 +3 50485 50591 50698 +3 50485 50698 50598 +3 50486 50624 50723 +3 50486 50723 50599 +3 50487 50600 50724 +3 50487 50724 50625 +3 50488 50508 50538 +3 50488 50538 50509 +3 50489 50510 50539 +3 50489 50539 50508 +3 50490 50668 50715 +3 50490 50715 50546 +3 50491 50547 50716 +3 50491 50716 50669 +3 50492 50509 50542 +3 50492 50542 50511 +3 50493 50512 50543 +3 50493 50543 50510 +3 50494 50546 50691 +3 50494 50691 50628 +3 50495 50629 50692 +3 50495 50692 50547 +3 50496 50618 50741 +3 50496 50741 50622 +3 50497 50623 50742 +3 50497 50742 50619 +3 50498 50522 50674 +3 50498 50674 50632 +3 50499 50633 50675 +3 50499 50675 50523 +3 50500 50644 50711 +3 50500 50711 50564 +3 50501 50565 50712 +3 50501 50712 50645 +3 50502 50555 50689 +3 50502 50689 50626 +3 50503 50627 50690 +3 50503 50690 50556 +3 50504 50511 50548 +3 50504 50548 50517 +3 50505 50517 50549 +3 50505 50549 50512 +3 50506 50595 50636 +3 50506 50636 50536 +3 50507 50537 50637 +3 50507 50637 50596 +3 50508 50539 50538 +3 50509 50538 50542 +3 50510 50543 50539 +3 50511 50542 50548 +3 50512 50549 50543 +3 50513 50605 50650 +3 50513 50650 50568 +3 50514 50569 50651 +3 50514 50651 50606 +3 50515 50672 50753 +3 50515 50753 50592 +3 50516 50593 50754 +3 50516 50754 50673 +3 50517 50548 50549 +3 50518 50640 50702 +3 50518 50702 50594 +3 50519 50594 50703 +3 50519 50703 50641 +3 50520 50620 50773 +3 50520 50773 50693 +3 50521 50694 50774 +3 50521 50774 50621 +3 50522 50523 50684 +3 50522 50684 50674 +3 50523 50675 50684 +3 50524 50566 50638 +3 50524 50638 50595 +3 50525 50596 50639 +3 50525 50639 50567 +3 50526 50550 50630 +3 50526 50630 50605 +3 50527 50606 50631 +3 50527 50631 50550 +3 50528 50657 50706 +3 50528 50706 50580 +3 50529 50581 50707 +3 50529 50707 50658 +3 50530 50576 50655 +3 50530 50655 50612 +3 50531 50613 50656 +3 50531 50656 50577 +3 50532 50612 50648 +3 50532 50648 50572 +3 50533 50573 50649 +3 50533 50649 50613 +3 50534 50687 50763 +3 50534 50763 50610 +3 50535 50611 50764 +3 50535 50764 50688 +3 50536 50636 50654 +3 50536 50654 50537 +3 50537 50654 50637 +3 50538 50539 50559 +3 50538 50559 50542 +3 50539 50543 50559 +3 50540 50592 50781 +3 50540 50781 50747 +3 50541 50748 50782 +3 50541 50782 50593 +3 50542 50559 50548 +3 50543 50549 50559 +3 50544 50628 50755 +3 50544 50755 50644 +3 50545 50645 50756 +3 50545 50756 50629 +3 50546 50715 50691 +3 50547 50692 50716 +3 50548 50559 50549 +3 50550 50631 50630 +3 50551 50607 50717 +3 50551 50717 50661 +3 50552 50662 50718 +3 50552 50718 50608 +3 50553 50626 50727 +3 50553 50727 50640 +3 50554 50641 50728 +3 50554 50728 50627 +3 50555 50586 50719 +3 50555 50719 50689 +3 50556 50690 50720 +3 50556 50720 50587 +3 50557 50614 50800 +3 50557 50800 50757 +3 50558 50758 50801 +3 50558 50801 50615 +3 50560 50665 50779 +3 50560 50779 50672 +3 50561 50673 50780 +3 50561 50780 50666 +3 50562 50663 50709 +3 50562 50709 50603 +3 50563 50604 50710 +3 50563 50710 50664 +3 50564 50711 50761 +3 50564 50761 50601 +3 50565 50602 50762 +3 50565 50762 50712 +3 50566 50572 50659 +3 50566 50659 50638 +3 50567 50639 50660 +3 50567 50660 50573 +3 50568 50650 50678 +3 50568 50678 50582 +3 50569 50583 50679 +3 50569 50679 50651 +3 50570 50739 50818 +3 50570 50818 50646 +3 50571 50647 50819 +3 50571 50819 50740 +3 50572 50648 50659 +3 50573 50660 50649 +3 50574 50661 50749 +3 50574 50749 50657 +3 50575 50658 50750 +3 50575 50750 50662 +3 50576 50582 50680 +3 50576 50680 50655 +3 50577 50656 50681 +3 50577 50681 50583 +3 50578 50632 50731 +3 50578 50731 50663 +3 50579 50664 50732 +3 50579 50732 50633 +3 50580 50706 50725 +3 50580 50725 50586 +3 50581 50587 50726 +3 50581 50726 50707 +3 50582 50678 50680 +3 50583 50681 50679 +3 50584 50676 50838 +3 50584 50838 50743 +3 50585 50744 50839 +3 50585 50839 50677 +3 50586 50725 50719 +3 50587 50720 50726 +3 50588 50642 50785 +3 50588 50785 50721 +3 50589 50722 50786 +3 50589 50786 50643 +3 50590 50697 50802 +3 50590 50802 50687 +3 50591 50688 50803 +3 50591 50803 50698 +3 50592 50753 50781 +3 50593 50782 50754 +3 50594 50702 50703 +3 50595 50638 50700 +3 50595 50700 50636 +3 50596 50637 50701 +3 50596 50701 50639 +3 50597 50667 50769 +3 50597 50769 50697 +3 50598 50698 50770 +3 50598 50770 50667 +3 50599 50723 50796 +3 50599 50796 50668 +3 50600 50669 50797 +3 50600 50797 50724 +3 50601 50761 50775 +3 50601 50775 50609 +3 50602 50609 50776 +3 50602 50776 50762 +3 50603 50709 50729 +3 50603 50729 50607 +3 50604 50608 50730 +3 50604 50730 50710 +3 50605 50630 50695 +3 50605 50695 50650 +3 50606 50651 50696 +3 50606 50696 50631 +3 50607 50729 50717 +3 50608 50718 50730 +3 50609 50775 50776 +3 50610 50763 50808 +3 50610 50808 50652 +3 50611 50653 50809 +3 50611 50809 50764 +3 50612 50655 50713 +3 50612 50713 50648 +3 50613 50649 50714 +3 50613 50714 50656 +3 50614 50634 50844 +3 50614 50844 50800 +3 50615 50801 50845 +3 50615 50845 50635 +3 50616 50743 50861 +3 50616 50861 50739 +3 50617 50740 50862 +3 50617 50862 50744 +3 50618 50693 50820 +3 50618 50820 50741 +3 50619 50742 50821 +3 50619 50821 50694 +3 50620 50682 50853 +3 50620 50853 50773 +3 50621 50774 50854 +3 50621 50854 50683 +3 50622 50741 50836 +3 50622 50836 50699 +3 50623 50699 50837 +3 50623 50837 50742 +3 50624 50721 50816 +3 50624 50816 50723 +3 50625 50724 50817 +3 50625 50817 50722 +3 50626 50689 50783 +3 50626 50783 50727 +3 50627 50728 50784 +3 50627 50784 50690 +3 50628 50691 50813 +3 50628 50813 50755 +3 50629 50756 50814 +3 50629 50814 50692 +3 50630 50631 50708 +3 50630 50708 50695 +3 50631 50696 50708 +3 50632 50674 50767 +3 50632 50767 50731 +3 50633 50732 50768 +3 50633 50768 50675 +3 50634 50635 50852 +3 50634 50852 50844 +3 50635 50845 50852 +3 50636 50700 50733 +3 50636 50733 50654 +3 50637 50654 50734 +3 50637 50734 50701 +3 50638 50659 50735 +3 50638 50735 50700 +3 50639 50701 50736 +3 50639 50736 50660 +3 50640 50727 50794 +3 50640 50794 50702 +3 50641 50703 50795 +3 50641 50795 50728 +3 50642 50670 50834 +3 50642 50834 50785 +3 50643 50786 50835 +3 50643 50835 50671 +3 50644 50755 50824 +3 50644 50824 50711 +3 50645 50712 50825 +3 50645 50825 50756 +3 50646 50818 50869 +3 50646 50869 50685 +3 50647 50686 50870 +3 50647 50870 50819 +3 50648 50713 50745 +3 50648 50745 50659 +3 50649 50660 50746 +3 50649 50746 50714 +3 50650 50695 50737 +3 50650 50737 50678 +3 50651 50679 50738 +3 50651 50738 50696 +3 50652 50808 50842 +3 50652 50842 50670 +3 50653 50671 50843 +3 50653 50843 50809 +3 50654 50733 50734 +3 50655 50680 50751 +3 50655 50751 50713 +3 50656 50714 50752 +3 50656 50752 50681 +3 50657 50749 50804 +3 50657 50804 50706 +3 50658 50707 50805 +3 50658 50805 50750 +3 50659 50745 50735 +3 50660 50736 50746 +3 50661 50717 50806 +3 50661 50806 50749 +3 50662 50750 50807 +3 50662 50807 50718 +3 50663 50731 50790 +3 50663 50790 50709 +3 50664 50710 50791 +3 50664 50791 50732 +3 50665 50757 50871 +3 50665 50871 50779 +3 50666 50780 50872 +3 50666 50872 50758 +3 50667 50770 50848 +3 50667 50848 50769 +3 50668 50796 50857 +3 50668 50857 50715 +3 50669 50716 50858 +3 50669 50858 50797 +3 50670 50842 50834 +3 50671 50835 50843 +3 50672 50779 50865 +3 50672 50865 50753 +3 50673 50754 50866 +3 50673 50866 50780 +3 50674 50684 50811 +3 50674 50811 50767 +3 50675 50768 50812 +3 50675 50812 50684 +3 50676 50747 50888 +3 50676 50888 50838 +3 50677 50839 50889 +3 50677 50889 50748 +3 50678 50737 50759 +3 50678 50759 50680 +3 50679 50681 50760 +3 50679 50760 50738 +3 50680 50759 50751 +3 50681 50752 50760 +3 50682 50704 50877 +3 50682 50877 50853 +3 50683 50854 50878 +3 50683 50878 50705 +3 50684 50812 50811 +3 50685 50869 50890 +3 50685 50890 50704 +3 50686 50705 50891 +3 50686 50891 50870 +3 50687 50802 50873 +3 50687 50873 50763 +3 50688 50764 50874 +3 50688 50874 50803 +3 50689 50719 50830 +3 50689 50830 50783 +3 50690 50784 50831 +3 50690 50831 50720 +3 50691 50715 50855 +3 50691 50855 50813 +3 50692 50814 50856 +3 50692 50856 50716 +3 50693 50773 50909 +3 50693 50909 50820 +3 50694 50821 50910 +3 50694 50910 50774 +3 50695 50708 50765 +3 50695 50765 50737 +3 50696 50738 50766 +3 50696 50766 50708 +3 50697 50769 50879 +3 50697 50879 50802 +3 50698 50803 50880 +3 50698 50880 50770 +3 50699 50836 50887 +3 50699 50887 50837 +3 50700 50735 50771 +3 50700 50771 50733 +3 50701 50734 50772 +3 50701 50772 50736 +3 50702 50794 50815 +3 50702 50815 50703 +3 50703 50815 50795 +3 50704 50890 50877 +3 50705 50878 50891 +3 50706 50804 50846 +3 50706 50846 50725 +3 50707 50726 50847 +3 50707 50847 50805 +3 50708 50766 50765 +3 50709 50790 50828 +3 50709 50828 50729 +3 50710 50730 50829 +3 50710 50829 50791 +3 50711 50824 50875 +3 50711 50875 50761 +3 50712 50762 50876 +3 50712 50876 50825 +3 50713 50751 50777 +3 50713 50777 50745 +3 50714 50746 50778 +3 50714 50778 50752 +3 50715 50857 50855 +3 50716 50856 50858 +3 50717 50729 50840 +3 50717 50840 50806 +3 50718 50807 50841 +3 50718 50841 50730 +3 50719 50725 50850 +3 50719 50850 50830 +3 50720 50831 50851 +3 50720 50851 50726 +3 50721 50785 50892 +3 50721 50892 50816 +3 50722 50817 50893 +3 50722 50893 50786 +3 50723 50816 50894 +3 50723 50894 50796 +3 50724 50797 50895 +3 50724 50895 50817 +3 50725 50846 50850 +3 50726 50851 50847 +3 50727 50783 50863 +3 50727 50863 50794 +3 50728 50795 50864 +3 50728 50864 50784 +3 50729 50828 50840 +3 50730 50841 50829 +3 50731 50767 50859 +3 50731 50859 50790 +3 50732 50791 50860 +3 50732 50860 50768 +3 50733 50771 50789 +3 50733 50789 50734 +3 50734 50789 50772 +3 50735 50745 50792 +3 50735 50792 50771 +3 50736 50772 50793 +3 50736 50793 50746 +3 50737 50765 50787 +3 50737 50787 50759 +3 50738 50760 50788 +3 50738 50788 50766 +3 50739 50861 50928 +3 50739 50928 50818 +3 50740 50819 50929 +3 50740 50929 50862 +3 50741 50820 50913 +3 50741 50913 50836 +3 50742 50837 50914 +3 50742 50914 50821 +3 50743 50838 50932 +3 50743 50932 50861 +3 50744 50862 50933 +3 50744 50933 50839 +3 50745 50777 50792 +3 50746 50793 50778 +3 50747 50781 50924 +3 50747 50924 50888 +3 50748 50889 50925 +3 50748 50925 50782 +3 50749 50806 50867 +3 50749 50867 50804 +3 50750 50805 50868 +3 50750 50868 50807 +3 50751 50759 50798 +3 50751 50798 50777 +3 50752 50778 50799 +3 50752 50799 50760 +3 50753 50865 50911 +3 50753 50911 50781 +3 50754 50782 50912 +3 50754 50912 50866 +3 50755 50813 50896 +3 50755 50896 50824 +3 50756 50825 50897 +3 50756 50897 50814 +3 50757 50800 50922 +3 50757 50922 50871 +3 50758 50872 50923 +3 50758 50923 50801 +3 50759 50787 50798 +3 50760 50799 50788 +3 50761 50875 50905 +3 50761 50905 50775 +3 50762 50776 50906 +3 50762 50906 50876 +3 50763 50873 50920 +3 50763 50920 50808 +3 50764 50809 50921 +3 50764 50921 50874 +3 50765 50766 50810 +3 50765 50810 50787 +3 50766 50788 50810 +3 50767 50811 50883 +3 50767 50883 50859 +3 50768 50860 50884 +3 50768 50884 50812 +3 50769 50848 50926 +3 50769 50926 50879 +3 50770 50880 50927 +3 50770 50927 50848 +3 50771 50792 50822 +3 50771 50822 50789 +3 50772 50789 50823 +3 50772 50823 50793 +3 50773 50853 50963 +3 50773 50963 50909 +3 50774 50910 50964 +3 50774 50964 50854 +3 50775 50905 50915 +3 50775 50915 50776 +3 50776 50915 50906 +3 50777 50798 50826 +3 50777 50826 50792 +3 50778 50793 50827 +3 50778 50827 50799 +3 50779 50871 50955 +3 50779 50955 50865 +3 50780 50866 50956 +3 50780 50956 50872 +3 50781 50911 50924 +3 50782 50925 50912 +3 50783 50830 50900 +3 50783 50900 50863 +3 50784 50864 50901 +3 50784 50901 50831 +3 50785 50834 50934 +3 50785 50934 50892 +3 50786 50893 50935 +3 50786 50935 50835 +3 50787 50810 50832 +3 50787 50832 50798 +3 50788 50799 50833 +3 50788 50833 50810 +3 50789 50822 50823 +3 50790 50859 50885 +3 50790 50885 50828 +3 50791 50829 50886 +3 50791 50886 50860 +3 50792 50826 50822 +3 50793 50823 50827 +3 50794 50863 50881 +3 50794 50881 50815 +3 50795 50815 50882 +3 50795 50882 50864 +3 50796 50894 50940 +3 50796 50940 50857 +3 50797 50858 50941 +3 50797 50941 50895 +3 50798 50832 50826 +3 50799 50827 50833 +3 50800 50844 50959 +3 50800 50959 50922 +3 50801 50923 50960 +3 50801 50960 50845 +3 50802 50879 50949 +3 50802 50949 50873 +3 50803 50874 50950 +3 50803 50950 50880 +3 50804 50867 50903 +3 50804 50903 50846 +3 50805 50847 50904 +3 50805 50904 50868 +3 50806 50840 50898 +3 50806 50898 50867 +3 50807 50868 50899 +3 50807 50899 50841 +3 50808 50920 50942 +3 50808 50942 50842 +3 50809 50843 50943 +3 50809 50943 50921 +3 50810 50833 50832 +3 50811 50812 50902 +3 50811 50902 50883 +3 50812 50884 50902 +3 50813 50855 50936 +3 50813 50936 50896 +3 50814 50897 50937 +3 50814 50937 50856 +3 50815 50881 50882 +3 50816 50892 50957 +3 50816 50957 50894 +3 50817 50895 50958 +3 50817 50958 50893 +3 50818 50928 50981 +3 50818 50981 50869 +3 50819 50870 50982 +3 50819 50982 50929 +3 50820 50909 50987 +3 50820 50987 50913 +3 50821 50914 50988 +3 50821 50988 50910 +3 50822 50826 50849 +3 50822 50849 50823 +3 50823 50849 50827 +3 50824 50896 50953 +3 50824 50953 50875 +3 50825 50876 50954 +3 50825 50954 50897 +3 50826 50832 50849 +3 50827 50849 50833 +3 50828 50885 50907 +3 50828 50907 50840 +3 50829 50841 50908 +3 50829 50908 50886 +3 50830 50850 50916 +3 50830 50916 50900 +3 50831 50901 50917 +3 50831 50917 50851 +3 50832 50833 50849 +3 50834 50842 50945 +3 50834 50945 50934 +3 50835 50935 50946 +3 50835 50946 50843 +3 50836 50913 50975 +3 50836 50975 50887 +3 50837 50887 50976 +3 50837 50976 50914 +3 50838 50888 50985 +3 50838 50985 50932 +3 50839 50933 50986 +3 50839 50986 50889 +3 50840 50907 50898 +3 50841 50899 50908 +3 50842 50942 50945 +3 50843 50946 50943 +3 50844 50852 50977 +3 50844 50977 50959 +3 50845 50960 50978 +3 50845 50978 50852 +3 50846 50903 50918 +3 50846 50918 50850 +3 50847 50851 50919 +3 50847 50919 50904 +3 50848 50927 50926 +3 50850 50918 50916 +3 50851 50917 50919 +3 50852 50978 50977 +3 50853 50877 50993 +3 50853 50993 50963 +3 50854 50964 50994 +3 50854 50994 50878 +3 50855 50857 50951 +3 50855 50951 50936 +3 50856 50937 50952 +3 50856 50952 50858 +3 50857 50940 50951 +3 50858 50952 50941 +3 50859 50883 50938 +3 50859 50938 50885 +3 50860 50886 50939 +3 50860 50939 50884 +3 50861 50932 51009 +3 50861 51009 50928 +3 50862 50929 51010 +3 50862 51010 50933 +3 50863 50900 50930 +3 50863 50930 50881 +3 50864 50882 50931 +3 50864 50931 50901 +3 50865 50955 51001 +3 50865 51001 50911 +3 50866 50912 51002 +3 50866 51002 50956 +3 50867 50898 50947 +3 50867 50947 50903 +3 50868 50904 50948 +3 50868 50948 50899 +3 50869 50981 51021 +3 50869 51021 50890 +3 50870 50891 51022 +3 50870 51022 50982 +3 50871 50922 51016 +3 50871 51016 50955 +3 50872 50956 51017 +3 50872 51017 50923 +3 50873 50949 50989 +3 50873 50989 50920 +3 50874 50921 50990 +3 50874 50990 50950 +3 50875 50953 50979 +3 50875 50979 50905 +3 50876 50906 50980 +3 50876 50980 50954 +3 50877 50890 51023 +3 50877 51023 50993 +3 50878 50994 51024 +3 50878 51024 50891 +3 50879 50926 50999 +3 50879 50999 50949 +3 50880 50950 51000 +3 50880 51000 50927 +3 50881 50930 50944 +3 50881 50944 50882 +3 50882 50944 50931 +3 50883 50902 50961 +3 50883 50961 50938 +3 50884 50939 50962 +3 50884 50962 50902 +3 50885 50938 50965 +3 50885 50965 50907 +3 50886 50908 50966 +3 50886 50966 50939 +3 50887 50975 51026 +3 50887 51026 50976 +3 50888 50924 51039 +3 50888 51039 50985 +3 50889 50986 51040 +3 50889 51040 50925 +3 50890 51021 51023 +3 50891 51024 51022 +3 50892 50934 51003 +3 50892 51003 50957 +3 50893 50958 51004 +3 50893 51004 50935 +3 50894 50957 51005 +3 50894 51005 50940 +3 50895 50941 51006 +3 50895 51006 50958 +3 50896 50936 50995 +3 50896 50995 50953 +3 50897 50954 50996 +3 50897 50996 50937 +3 50898 50907 50969 +3 50898 50969 50947 +3 50899 50948 50970 +3 50899 50970 50908 +3 50900 50916 50967 +3 50900 50967 50930 +3 50901 50931 50968 +3 50901 50968 50917 +3 50902 50962 50961 +3 50903 50947 50971 +3 50903 50971 50918 +3 50904 50919 50972 +3 50904 50972 50948 +3 50905 50979 51012 +3 50905 51012 50915 +3 50906 50915 51013 +3 50906 51013 50980 +3 50907 50965 50969 +3 50908 50970 50966 +3 50909 50963 51052 +3 50909 51052 50987 +3 50910 50988 51053 +3 50910 51053 50964 +3 50911 51001 51035 +3 50911 51035 50924 +3 50912 50925 51036 +3 50912 51036 51002 +3 50913 50987 51058 +3 50913 51058 50975 +3 50914 50976 51059 +3 50914 51059 50988 +3 50915 51012 51013 +3 50916 50918 50973 +3 50916 50973 50967 +3 50917 50968 50974 +3 50917 50974 50919 +3 50918 50971 50973 +3 50919 50974 50972 +3 50920 50989 51029 +3 50920 51029 50942 +3 50921 50943 51030 +3 50921 51030 50990 +3 50922 50959 51054 +3 50922 51054 51016 +3 50923 51017 51055 +3 50923 51055 50960 +3 50924 51035 51039 +3 50925 51040 51036 +3 50926 50927 51018 +3 50926 51018 50999 +3 50927 51000 51018 +3 50928 51009 51060 +3 50928 51060 50981 +3 50929 50982 51061 +3 50929 51061 51010 +3 50930 50967 50983 +3 50930 50983 50944 +3 50931 50944 50984 +3 50931 50984 50968 +3 50932 50985 51062 +3 50932 51062 51009 +3 50933 51010 51063 +3 50933 51063 50986 +3 50934 50945 51033 +3 50934 51033 51003 +3 50935 51004 51034 +3 50935 51034 50946 +3 50936 50951 51027 +3 50936 51027 50995 +3 50937 50996 51028 +3 50937 51028 50952 +3 50938 50961 50991 +3 50938 50991 50965 +3 50939 50966 50992 +3 50939 50992 50962 +3 50940 51005 51031 +3 50940 51031 50951 +3 50941 50952 51032 +3 50941 51032 51006 +3 50942 51029 51045 +3 50942 51045 50945 +3 50943 50946 51046 +3 50943 51046 51030 +3 50944 50983 50984 +3 50945 51045 51033 +3 50946 51034 51046 +3 50947 50969 50997 +3 50947 50997 50971 +3 50948 50972 50998 +3 50948 50998 50970 +3 50949 50999 51050 +3 50949 51050 50989 +3 50950 50990 51051 +3 50950 51051 51000 +3 50951 51031 51027 +3 50952 51028 51032 +3 50953 50995 51047 +3 50953 51047 50979 +3 50954 50980 51048 +3 50954 51048 50996 +3 50955 51016 51064 +3 50955 51064 51001 +3 50956 51002 51065 +3 50956 51065 51017 +3 50957 51003 51056 +3 50957 51056 51005 +3 50958 51006 51057 +3 50958 51057 51004 +3 50959 50977 51072 +3 50959 51072 51054 +3 50960 51055 51073 +3 50960 51073 50978 +3 50961 50962 51011 +3 50961 51011 50991 +3 50962 50992 51011 +3 50963 50993 51084 +3 50963 51084 51052 +3 50964 51053 51085 +3 50964 51085 50994 +3 50965 50991 51014 +3 50965 51014 50969 +3 50966 50970 51015 +3 50966 51015 50992 +3 50967 50973 51007 +3 50967 51007 50983 +3 50968 50984 51008 +3 50968 51008 50974 +3 50969 51014 50997 +3 50970 50998 51015 +3 50971 50997 51019 +3 50971 51019 50973 +3 50972 50974 51020 +3 50972 51020 50998 +3 50973 51019 51007 +3 50974 51008 51020 +3 50975 51058 51090 +3 50975 51090 51026 +3 50976 51026 51091 +3 50976 51091 51059 +3 50977 50978 51083 +3 50977 51083 51072 +3 50978 51073 51083 +3 50979 51047 51068 +3 50979 51068 51012 +3 50980 51013 51069 +3 50980 51069 51048 +3 50981 51060 51092 +3 50981 51092 51021 +3 50982 51022 51093 +3 50982 51093 51061 +3 50983 51007 51025 +3 50983 51025 50984 +3 50984 51025 51008 +3 50985 51039 51096 +3 50985 51096 51062 +3 50986 51063 51097 +3 50986 51097 51040 +3 50987 51052 51104 +3 50987 51104 51058 +3 50988 51059 51105 +3 50988 51105 51053 +3 50989 51050 51076 +3 50989 51076 51029 +3 50990 51030 51077 +3 50990 51077 51051 +3 50991 51011 51037 +3 50991 51037 51014 +3 50992 51015 51038 +3 50992 51038 51011 +3 50993 51023 51098 +3 50993 51098 51084 +3 50994 51085 51099 +3 50994 51099 51024 +3 50995 51027 51070 +3 50995 51070 51047 +3 50996 51048 51071 +3 50996 51071 51028 +3 50997 51014 51041 +3 50997 51041 51019 +3 50998 51020 51042 +3 50998 51042 51015 +3 50999 51018 51066 +3 50999 51066 51050 +3 51000 51051 51067 +3 51000 51067 51018 +3 51001 51064 51094 +3 51001 51094 51035 +3 51002 51036 51095 +3 51002 51095 51065 +3 51003 51033 51079 +3 51003 51079 51056 +3 51004 51057 51080 +3 51004 51080 51034 +3 51005 51056 51074 +3 51005 51074 51031 +3 51006 51032 51075 +3 51006 51075 51057 +3 51007 51019 51043 +3 51007 51043 51025 +3 51008 51025 51044 +3 51008 51044 51020 +3 51009 51062 51115 +3 51009 51115 51060 +3 51010 51061 51116 +3 51010 51116 51063 +3 51011 51038 51037 +3 51012 51068 51078 +3 51012 51078 51013 +3 51013 51078 51069 +3 51014 51037 51041 +3 51015 51042 51038 +3 51016 51054 51110 +3 51016 51110 51064 +3 51017 51065 51111 +3 51017 51111 51055 +3 51018 51067 51066 +3 51019 51041 51043 +3 51020 51044 51042 +3 51021 51092 51102 +3 51021 51102 51023 +3 51022 51024 51103 +3 51022 51103 51093 +3 51023 51102 51098 +3 51024 51099 51103 +3 51025 51043 51044 +3 51026 51090 51091 +3 51027 51031 51081 +3 51027 51081 51070 +3 51028 51071 51082 +3 51028 51082 51032 +3 51029 51076 51086 +3 51029 51086 51045 +3 51030 51046 51087 +3 51030 51087 51077 +3 51031 51074 51081 +3 51032 51082 51075 +3 51033 51045 51088 +3 51033 51088 51079 +3 51034 51080 51089 +3 51034 51089 51046 +3 51035 51094 51108 +3 51035 51108 51039 +3 51036 51040 51109 +3 51036 51109 51095 +3 51037 51038 51049 +3 51037 51049 51041 +3 51038 51042 51049 +3 51039 51108 51096 +3 51040 51097 51109 +3 51041 51049 51043 +3 51042 51044 51049 +3 51043 51049 51044 +3 51045 51086 51088 +3 51046 51089 51087 +3 51047 51070 51106 +3 51047 51106 51068 +3 51048 51069 51107 +3 51048 51107 51071 +3 51050 51066 51100 +3 51050 51100 51076 +3 51051 51077 51101 +3 51051 51101 51067 +3 51052 51084 51131 +3 51052 51131 51104 +3 51053 51105 51132 +3 51053 51132 51085 +3 51054 51072 51129 +3 51054 51129 51110 +3 51055 51111 51130 +3 51055 51130 51073 +3 51056 51079 51113 +3 51056 51113 51074 +3 51057 51075 51114 +3 51057 51114 51080 +3 51058 51104 51137 +3 51058 51137 51090 +3 51059 51091 51138 +3 51059 51138 51105 +3 51060 51115 51139 +3 51060 51139 51092 +3 51061 51093 51140 +3 51061 51140 51116 +3 51062 51096 51143 +3 51062 51143 51115 +3 51063 51116 51144 +3 51063 51144 51097 +3 51064 51110 51135 +3 51064 51135 51094 +3 51065 51095 51136 +3 51065 51136 51111 +3 51066 51067 51112 +3 51066 51112 51100 +3 51067 51101 51112 +3 51068 51106 51117 +3 51068 51117 51078 +3 51069 51078 51118 +3 51069 51118 51107 +3 51070 51081 51119 +3 51070 51119 51106 +3 51071 51107 51120 +3 51071 51120 51082 +3 51072 51083 51145 +3 51072 51145 51129 +3 51073 51130 51146 +3 51073 51146 51083 +3 51074 51113 51123 +3 51074 51123 51081 +3 51075 51082 51124 +3 51075 51124 51114 +3 51076 51100 51121 +3 51076 51121 51086 +3 51077 51087 51122 +3 51077 51122 51101 +3 51078 51117 51118 +3 51079 51088 51125 +3 51079 51125 51113 +3 51080 51114 51126 +3 51080 51126 51089 +3 51081 51123 51119 +3 51082 51120 51124 +3 51083 51146 51145 +3 51084 51098 51159 +3 51084 51159 51131 +3 51085 51132 51160 +3 51085 51160 51099 +3 51086 51121 51127 +3 51086 51127 51088 +3 51087 51089 51128 +3 51087 51128 51122 +3 51088 51127 51125 +3 51089 51126 51128 +3 51090 51137 51149 +3 51090 51149 51091 +3 51091 51149 51138 +3 51092 51139 51164 +3 51092 51164 51102 +3 51093 51103 51165 +3 51093 51165 51140 +3 51094 51135 51157 +3 51094 51157 51108 +3 51095 51109 51158 +3 51095 51158 51136 +3 51096 51108 51161 +3 51096 51161 51143 +3 51097 51144 51162 +3 51097 51162 51109 +3 51098 51102 51166 +3 51098 51166 51159 +3 51099 51160 51167 +3 51099 51167 51103 +3 51100 51112 51133 +3 51100 51133 51121 +3 51101 51122 51134 +3 51101 51134 51112 +3 51102 51164 51166 +3 51103 51167 51165 +3 51104 51131 51176 +3 51104 51176 51137 +3 51105 51138 51177 +3 51105 51177 51132 +3 51106 51119 51141 +3 51106 51141 51117 +3 51107 51118 51142 +3 51107 51142 51120 +3 51108 51157 51161 +3 51109 51162 51158 +3 51110 51129 51172 +3 51110 51172 51135 +3 51111 51136 51173 +3 51111 51173 51130 +3 51112 51134 51133 +3 51113 51125 51147 +3 51113 51147 51123 +3 51114 51124 51148 +3 51114 51148 51126 +3 51115 51143 51179 +3 51115 51179 51139 +3 51116 51140 51180 +3 51116 51180 51144 +3 51117 51141 51152 +3 51117 51152 51118 +3 51118 51152 51142 +3 51119 51123 51153 +3 51119 51153 51141 +3 51120 51142 51154 +3 51120 51154 51124 +3 51121 51133 51150 +3 51121 51150 51127 +3 51122 51128 51151 +3 51122 51151 51134 +3 51123 51147 51153 +3 51124 51154 51148 +3 51125 51127 51155 +3 51125 51155 51147 +3 51126 51148 51156 +3 51126 51156 51128 +3 51127 51150 51155 +3 51128 51156 51151 +3 51129 51145 51183 +3 51129 51183 51172 +3 51130 51173 51184 +3 51130 51184 51146 +3 51131 51159 51189 +3 51131 51189 51176 +3 51132 51177 51190 +3 51132 51190 51160 +3 51133 51134 51163 +3 51133 51163 51150 +3 51134 51151 51163 +3 51135 51172 51185 +3 51135 51185 51157 +3 51136 51158 51186 +3 51136 51186 51173 +3 51137 51176 51181 +3 51137 51181 51149 +3 51138 51149 51182 +3 51138 51182 51177 +3 51139 51179 51192 +3 51139 51192 51164 +3 51140 51165 51193 +3 51140 51193 51180 +3 51141 51153 51168 +3 51141 51168 51152 +3 51142 51152 51169 +3 51142 51169 51154 +3 51143 51161 51187 +3 51143 51187 51179 +3 51144 51180 51188 +3 51144 51188 51162 +3 51145 51146 51191 +3 51145 51191 51183 +3 51146 51184 51191 +3 51147 51155 51170 +3 51147 51170 51153 +3 51148 51154 51171 +3 51148 51171 51156 +3 51149 51181 51182 +3 51150 51163 51174 +3 51150 51174 51155 +3 51151 51156 51175 +3 51151 51175 51163 +3 51152 51168 51169 +3 51153 51170 51168 +3 51154 51169 51171 +3 51155 51174 51170 +3 51156 51171 51175 +3 51157 51185 51194 +3 51157 51194 51161 +3 51158 51162 51195 +3 51158 51195 51186 +3 51159 51166 51196 +3 51159 51196 51189 +3 51160 51190 51197 +3 51160 51197 51167 +3 51161 51194 51187 +3 51162 51188 51195 +3 51163 51175 51174 +3 51164 51192 51198 +3 51164 51198 51166 +3 51165 51167 51199 +3 51165 51199 51193 +3 51166 51198 51196 +3 51167 51197 51199 +3 51168 51170 51178 +3 51168 51178 51169 +3 51169 51178 51171 +3 51170 51174 51178 +3 51171 51178 51175 +3 51172 51183 51202 +3 51172 51202 51185 +3 51173 51186 51203 +3 51173 51203 51184 +3 51174 51175 51178 +3 51176 51189 51200 +3 51176 51200 51181 +3 51177 51182 51201 +3 51177 51201 51190 +3 51179 51187 51205 +3 51179 51205 51192 +3 51180 51193 51206 +3 51180 51206 51188 +3 51181 51200 51204 +3 51181 51204 51182 +3 51182 51204 51201 +3 51183 51191 51207 +3 51183 51207 51202 +3 51184 51203 51208 +3 51184 51208 51191 +3 51185 51202 51209 +3 51185 51209 51194 +3 51186 51195 51210 +3 51186 51210 51203 +3 51187 51194 51213 +3 51187 51213 51205 +3 51188 51206 51214 +3 51188 51214 51195 +3 51189 51196 51211 +3 51189 51211 51200 +3 51190 51201 51212 +3 51190 51212 51197 +3 51191 51208 51207 +3 51192 51205 51215 +3 51192 51215 51198 +3 51193 51199 51216 +3 51193 51216 51206 +3 51194 51209 51213 +3 51195 51214 51210 +3 51196 51198 51217 +3 51196 51217 51211 +3 51197 51212 51218 +3 51197 51218 51199 +3 51198 51215 51217 +3 51199 51218 51216 +3 51200 51211 51219 +3 51200 51219 51204 +3 51201 51204 51220 +3 51201 51220 51212 +3 51202 51207 51221 +3 51202 51221 51209 +3 51203 51210 51222 +3 51203 51222 51208 +3 51204 51219 51220 +3 51205 51213 51223 +3 51205 51223 51215 +3 51206 51216 51224 +3 51206 51224 51214 +3 51207 51208 51227 +3 51207 51227 51221 +3 51208 51222 51227 +3 51209 51221 51228 +3 51209 51228 51213 +3 51210 51214 51229 +3 51210 51229 51222 +3 51211 51217 51225 +3 51211 51225 51219 +3 51212 51220 51226 +3 51212 51226 51218 +3 51213 51228 51223 +3 51214 51224 51229 +3 51215 51223 51230 +3 51215 51230 51217 +3 51216 51218 51231 +3 51216 51231 51224 +3 51217 51230 51225 +3 51218 51226 51231 +3 51219 51225 51232 +3 51219 51232 51220 +3 51220 51232 51226 +3 51221 51227 51233 +3 51221 51233 51228 +3 51222 51229 51234 +3 51222 51234 51227 +3 51223 51228 51235 +3 51223 51235 51230 +3 51224 51231 51236 +3 51224 51236 51229 +3 51225 51230 51237 +3 51225 51237 51232 +3 51226 51232 51238 +3 51226 51238 51231 +3 51227 51234 51233 +3 51228 51233 51235 +3 51229 51236 51234 +3 51230 51235 51237 +3 51231 51238 51236 +3 51232 51237 51238 +3 51233 51234 51239 +3 51233 51239 51235 +3 51234 51236 51239 +3 51235 51239 51237 +3 51236 51238 51239 +3 51237 51239 51238 diff --git a/thirdparty/carve-1.4.0/data/sphere.ply b/thirdparty/carve-1.4.0/data/sphere.ply new file mode 100644 index 00000000..de585be8 --- /dev/null +++ b/thirdparty/carve-1.4.0/data/sphere.ply @@ -0,0 +1,14711 @@ +ply +format ascii 1.0 +element vertex 4902 +property double x +property double y +property double z +element face 9800 +property list uchar ushort vertex_indices +end_header +-1.41414299999999992785149061092 0.0113489999999999997132293927393 -0.00851200000000000046862513869428 +-1.41232500000000005258016244625 -0.0729849999999999943245398981162 -0.00364000000000000000638378239159 +-1.41183700000000000862598881213 0.0172980000000000008752998326145 0.0801020000000000065298877416353 +-1.4109039999999999359658886533 0.0955330000000000068016703380636 -0.0149899999999999998523403377249 +-1.41086599999999995347366166243 0.00535599999999999965005770263815 -0.0970919999999999977502440628996 +-1.40998599999999996157384885009 -0.0685909999999999991926458164926 0.0850640000000000007229772336359 +-1.40908900000000003593925157475 -0.0770919999999999938644634767115 -0.092328999999999994408028669568 +-1.40853899999999998549071733578 0.103032999999999999585220678 0.0735039999999999998925304112163 +-1.40769999999999995132782260043 0.0876559999999999978070874817604 -0.103425000000000003042011087473 +-1.40545699999999995633004346018 -0.157137999999999999900524016994 -0.00039300000000000001165040286466 +-1.40396000000000009677592061053 0.0231780000000000006854516954036 0.168398999999999993137933529397 +-1.40299100000000009913492249325 -0.154293999999999986716403554965 0.0883700000000000041033842990146 +-1.40262099999999989563548297156 0.179234000000000004426681243785 -0.023047999999999999043431841983 +-1.40237499999999992716936958459 -0.159362000000000003652189661807 -0.0891549999999999981392662107282 +-1.4020820000000000504769559484 -0.0639259999999999967146280255292 0.173431000000000001826094830903 +-1.40202200000000010149392437597 -0.000658999999999999972084829824581 -0.185289000000000009249490062757 +-1.40061499999999994336974395992 0.11012700000000000266631161594 0.161708999999999991636912000104 +-1.40029300000000000991917659121 -0.0808949999999999946886930501933 -0.180654000000000009018563673635 +-1.40010300000000009745804163686 0.188275999999999998912869614287 0.0652969999999999939355177502875 +-1.39960200000000001274713667954 0.169483999999999995766941651709 -0.111304000000000000158983937126 +-1.39894099999999999006661255407 0.0794320000000000026041391265608 -0.191452000000000011059597682106 +-1.39498900000000003451816610323 -0.150842000000000003856470698338 0.176784999999999997699617892977 +-1.39375899999999997014299424336 -0.160956999999999988970600384164 -0.177565000000000000612843109593 +-1.39356600000000008243716820289 -0.240775999999999990031085417286 0.00121499999999999993421928579096 +-1.39206000000000007510436716984 0.196576000000000000733635374672 0.153384999999999993569588241371 +-1.39106100000000010297185326635 0.159064000000000010937029060187 -0.199118999999999990446752917705 +-1.39088100000000003397815362405 -0.239473999999999992427390793637 0.0900080000000000046700421307833 +-1.39074999999999993072208326339 -0.241129000000000009995559935305 -0.0875829999999999941895367783218 +-1.39054300000000008452616384602 0.0289680000000000006932232565759 0.256031999999999981820764105578 +-1.38932600000000006090772330936 0.26212099999999999289101992872 -0.0326559999999999975295317256041 +-1.38864600000000004698108568846 -0.0590069999999999969531039312187 0.261114999999999986002308105526 +-1.38764599999999993507060480624 -0.0066709999999999998465671779968 -0.27275500000000002520650355109 +-1.38716400000000006365041826939 0.116786000000000000920152842809 0.249274999999999996580513084155 +-1.38660500000000008746781077207 0.250516000000000016445511619168 -0.120695999999999997731592316086 +-1.38656299999999998995292571635 0.272691000000000016711965145078 0.0555129999999999998450128657623 +-1.3859710000000000640341113467 -0.0843779999999999946735940170583 -0.268266000000000004455102953216 +-1.38466099999999991965182744025 0.0708960000000000006847855615888 -0.278724000000000027288393766867 +-1.3827080000000000481463757751 -0.237225999999999992429167150476 0.17844599999999999351274482251 +-1.38244600000000006367883997882 -0.240528999999999992809307514108 -0.176034999999999997033484078202 +-1.38148200000000009879386198008 -0.146793000000000006810552122261 0.264500999999999986123100370605 +-1.37964200000000003498712430883 -0.161916000000000004366285111246 -0.265274000000000009791278898774 +-1.37852299999999994284394233546 0.204100000000000003641531520771 0.240867999999999998772537423974 +-1.37841199999999997061195244896 0.237922999999999995601740465645 -0.208260000000000000675015598972 +-1.37832899999999991536014931626 0.282185000000000019149126728735 0.143462000000000006183498157952 +-1.37702900000000005853451057192 0.148018000000000010674128247956 -0.286148999999999986698639986571 +-1.37670000000000003481659405224 -0.323570999999999997509547711161 0.00117899999999999992653099134543 +-1.37426099999999995482369286037 -0.322070000000000022932766796657 -0.0876180000000000014370726830748 +-1.37370400000000003615241439547 -0.32379400000000002624034323162 0.0899709999999999954223284248656 +-1.37163699999999999512567683269 0.034641999999999999182431764666 0.342654999999999987370102871864 +-1.37107200000000006845368716313 0.343868000000000006988187806201 -0.0437740000000000004098943406916 +-1.36972899999999997433519638435 -0.0538570000000000020934365352332 0.347768000000000021554313889283 +-1.36907800000000001716671249596 -0.234042000000000000037303493627 0.266178999999999998937738610039 +-1.36875999999999997669419826707 0.330434000000000005492495347426 -0.131565999999999988512300319599 +-1.36868600000000006922107331775 -0.238980999999999998983923887863 -0.263792000000000026460611479706 +-1.36823800000000006527045570692 0.122983999999999996100008559097 0.335857000000000016637358157823 +-1.36797300000000010555822882452 0.355945000000000011386447340556 0.0441900000000000001132427485118 +-1.36779199999999989678656220349 -0.0126569999999999998480104679288 -0.359144000000000018779644506139 +-1.36639899999999991919708008936 -0.319298999999999999488409230253 -0.176070000000000004281019982955 +-1.36617799999999989246646237007 -0.0875269999999999936957095769685 -0.354818999999999995509369909996 +-1.36528699999999991732124726695 -0.322738999999999998102850895521 0.178408000000000011020517831639 +-1.36491699999999993586641267029 0.0620800000000000032351898937577 -0.364895000000000024886759319998 +-1.36478000000000010416556506243 0.224391000000000007119638212316 -0.295001000000000013212542171459 +-1.36465499999999995139887687401 0.290565999999999990954790973774 0.230845999999999995644373029791 +-1.36252200000000001089972556656 -0.142165999999999986824761322168 0.351173999999999986165732934751 +-1.36104599999999997805844031973 0.315695999999999976637354848208 -0.218838000000000004741096404359 +-1.3600810000000000954401002673 -0.162235999999999991327825910048 -0.351936000000000026588509172143 +-1.35954599999999992121502145892 0.21081800000000000538946665074 0.327400000000000024336088699783 +-1.35947599999999990671994964941 0.366615999999999997438493437585 0.131979000000000012970957641301 +-1.35756300000000007521805400756 0.136387000000000008226308523263 -0.372049000000000018584245253805 +-1.35492400000000001725197762426 -0.405193999999999998617994378947 -0.000501999999999999950602014298084 +-1.35314599999999995993960055785 -0.315267999999999992688515249029 -0.263826000000000004952482868248 +-1.3529729999999999812132500665 -0.401866999999999974235720401339 -0.0892609999999999931263872099407 +-1.35152699999999992286348060588 -0.406920999999999977170261900028 0.0882590000000000041158187968904 +-1.35148299999999998988187144278 -0.320411000000000001364242052659 0.266141000000000016445511619168 +-1.35004400000000002179945113312 -0.229935000000000000497379915032 0.352862000000000008981260180008 +-1.34952399999999994584243268037 -0.236489000000000004764189043271 -0.350509000000000014996004438217 +-1.34796099999999996477129116101 0.299711999999999978427922542323 -0.305246000000000017315926470474 +-1.3479319999999999080131374285 0.424151999999999973489650528791 -0.0563600000000000003752553823233 +-1.34731800000000001560351847729 0.0401800000000000004374278717023 0.42792499999999999982236431606 +-1.34613699999999991696597589907 0.408920999999999978946618739428 -0.143868999999999996886046460531 +-1.34576000000000006728839707648 0.20997299999999999298161412753 -0.380579000000000000625277607469 +-1.34568200000000004479261406232 -0.396955000000000002291500322826 -0.177668999999999993599786307641 +-1.34561299999999994803090430651 0.375842000000000009407585821464 0.219247999999999998443911408685 +-1.3455950000000000965627577898 0.2977989999999999803925732067 0.317317999999999988958165886288 +-1.34540600000000010183498488914 -0.0484940000000000023816504324259 0.433047999999999988496313108044 +-1.34440599999999998992450400692 0.437707999999999985973886396096 0.0313719999999999971107556007155 +-1.34391199999999999548094820057 0.128697000000000005837108574269 0.421113999999999988332888278819 +-1.34279700000000001836042429204 -0.407042999999999988158805308558 0.176671999999999995711874589688 +-1.34254099999999998438227066799 -0.0185929999999999984172660560944 -0.444116000000000010761169733087 +-1.34099400000000001931255155796 -0.0903319999999999956319385319148 -0.439971000000000000973443547991 +-1.33978500000000000369482222595 0.0530180000000000026250113194237 -0.449626000000000025647040047261 +-1.33902999999999994251709267701 0.392077000000000008839151632856 -0.230810999999999988396837125038 +-1.33818499999999995786481576943 -0.136976999999999987656096323008 0.436460999999999987863930073217 +-1.33557499999999995665689311863 0.449535999999999991150190226108 0.118980000000000002424727085781 +-1.33520299999999991769072948955 0.216705000000000008730793865652 0.412640000000000006785683126509 +-1.33515199999999989444177117548 -0.161917000000000005366374011828 -0.43720999999999998752997498741 +-1.33455100000000004278888354747 -0.309991999999999989778842746091 -0.350540999999999991487698025594 +-1.33308099999999996043698047288 -0.390475999999999989764631891376 -0.265373999999999998777866494493 +-1.33273899999999989596233263001 0.124217999999999995086596982219 -0.456481000000000025629276478867 +-1.33234399999999997277200236567 -0.316817999999999988514076676438 0.352824000000000026489033189137 +-1.3295550000000000423483470513 0.282546000000000019358736835784 -0.390448999999999990517807191281 +-1.32876700000000003143441063003 -0.405557999999999974072295572114 0.264388000000000011890932682945 +-1.32832499999999997797317519144 -0.48532399999999997763922010563 -0.00382000000000000004482525461924 +-1.32696900000000006514255801449 -0.480204000000000019721113631022 -0.0925060000000000048903103788689 +-1.32663899999999990164667451609 0.373686000000000018150814184992 -0.316842000000000012516210290414 +-1.32643899999999992367349932465 0.383583000000000007290168468899 0.305651000000000006018296971888 +-1.32568200000000002702904566831 -0.224920000000000008810729923425 0.438151999999999985924148404592 +-1.32503700000000002034994395217 -0.23306399999999999339550527111 -0.435842000000000007187139772213 +-1.32443800000000000416378043155 -0.488528000000000017788437389754 0.0848799999999999971178610280731 +-1.32147299999999989772447861469 0.459592000000000000525801624462 0.206118999999999996664001855606 +-1.32143000000000010452083643031 0.194726000000000010192735544479 -0.46465400000000001146105432781 +-1.32122399999999995401367414161 0.30385800000000001697131324363 0.402538000000000006917133532625 +-1.32037599999999999411670614791 -0.473189999999999999502620084968 -0.180825999999999986744825264395 +-1.31999500000000002941646926047 0.502655999999999991700860846322 -0.0703619999999999939932493475681 +-1.31882600000000005380229595175 0.485669000000000017358559034619 -0.157559000000000004604316927725 +-1.31768200000000001992361831071 0.045560000000000003272937476595 0.511507000000000044970249746257 +-1.31595499999999998586019955837 0.517657999999999951512563711731 0.0171110000000000012088108292119 +-1.31577399999999999913313786237 -0.0429399999999999990030197238866 0.516619000000000050398796247464 +-1.31532399999999993767119121912 -0.489804999999999990389909498845 0.17324500000000001009858863199 +-1.31521899999999991592858350486 -0.382454999999999989412913237175 -0.352032999999999984819254450485 +-1.31428300000000009006839718495 0.133900999999999992251531466536 0.5047089999999999632152025697 +-1.31245100000000003426237071835 0.466764999999999985469401053706 -0.244132999999999988904875181106 +-1.31199099999999990728838383802 -0.0244559999999999985731413687517 -0.527334999999999998188116023812 +-1.31068999999999991068477811496 -0.303493000000000012761347534251 -0.435871999999999981678655558426 +-1.31051800000000007173639460234 -0.0927810000000000023590018827235 -0.523387999999999964373387228989 +-1.30949300000000001809041805245 -0.402473000000000025178081841659 0.35105999999999998317790073088 +-1.30936699999999994759036781034 0.0437470000000000011630696405973 -0.532583000000000028606450541702 +-1.30901099999999992462562659057 0.353820000000000023376856006507 -0.401621999999999979014120299325 +-1.30857299999999998618704921682 -0.464307999999999998497202113867 -0.268432000000000003936406756111 +-1.30856700000000003569766704459 -0.131248000000000003550937321961 0.520025999999999988254728577886 +-1.30794800000000011053202797484 -0.31197500000000000230926389122 0.438114000000000003431921413721 +-1.30672100000000002140154720109 0.530618000000000034077629607054 0.10451799999999999979394260663 +-1.30590300000000003599609499361 0.264263999999999998902211473251 -0.474111999999999977895015490503 +-1.30559099999999994601296293695 0.221735999999999988663290650948 0.496252000000000026425084342918 +-1.30495300000000002960121037177 -0.160957999999999989970689284746 -0.520758000000000054185989029065 +-1.30265600000000003610978183133 0.111558000000000004381384144381 -0.539112000000000035626612771011 +-1.30215600000000009117684385274 0.467832000000000025607960196794 0.292443999999999981742604404644 +-1.30203099999999993841015566431 0.389811000000000018594903394842 0.390847999999999973219644289202 +-1.30102000000000006529887741635 -0.489146999999999998465227690758 0.260925999999999991274535204866 +-1.30089800000000010982148523908 0.446020000000000027551294579098 -0.329743999999999981564968720704 +-1.29700799999999993872279446805 -0.563644999999999951612039694737 -0.00876299999999999995603516822484 +-1.29635199999999994879829046113 -0.55677299999999996238386756886 -0.0973379999999999939719330654953 +-1.29608900000000004659739261115 -0.219016999999999989467980299196 0.521714000000000011070255823142 +-1.29532000000000002692956968531 -0.228719000000000005634603894578 -0.519455000000000000071054273576 +-1.2925439999999999152180407691 -0.568292000000000019355184122105 0.0798460000000000003073097332162 +-1.29233099999999989648813425447 0.541484999999999994102495293191 0.19151199999999998779820487016 +-1.29216599999999992576249496778 -0.372925999999999979728215748764 -0.437302000000000024027002609728 +-1.29188499999999995004884567606 0.17871100000000000873612293617 -0.546896000000000048757442527858 +-1.29163999999999989931609434279 0.308717000000000019177548438165 0.486169999999999991047161529423 +-1.29160499999999989206855843804 -0.453593000000000023952395622473 -0.354978999999999988990140309397 +-1.29058099999999997820054886688 -0.547703999999999968650854498264 -0.185528999999999999470645661859 +-1.2873730000000001005844296742 0.5790699999999999736388645033 -0.0857269999999999976481035446341 +-1.28693400000000002236788532173 0.560373000000000009990230864787 -0.172580000000000011173284519828 +-1.28621800000000008346034974238 0.332556999999999991501908880309 -0.484818000000000026705748723543 +-1.28505099999999994331290054106 -0.397799000000000013699263945455 0.436346999999999984876097869346 +-1.28421000000000007368328169832 0.423514000000000001566746732351 -0.414053999999999977621456537236 +-1.28297799999999995179678080603 -0.57069700000000000983391146292 0.168139000000000010670575534277 +-1.28284500000000001307398633799 0.0507599999999999995647925743469 0.593068999999999957317697862891 +-1.28273199999999998333066741907 0.595481000000000038063774354669 0.00146400000000000002353672812205 +-1.28165499999999998870237050141 -0.295796000000000003371525281182 -0.519483999999999945806905543577 +-1.28158100000000008122924555209 -0.486559999999999992503774137731 0.347577999999999998070876472411 +-1.28141499999999997072563928668 0.539464999999999972324360442144 -0.258751000000000008771650072958 +-1.28094899999999989326227023412 -0.0372159999999999990816235140301 0.598152000000000017010393094097 +-1.27971699999999999342037426686 -0.536472999999999977660536387702 -0.272986999999999979671372329904 +-1.27946699999999990993160281505 0.138578000000000006730616064488 0.586312000000000055344173688354 +-1.2783889999999999975699438437 -0.305900999999999978484765961184 0.521676000000000028578028832271 +-1.27769899999999991813126598572 0.474227000000000009638512210586 0.377614999999999978452791538075 +-1.27709699999999992670041137899 0.244938999999999990064836197234 -0.555903000000000035996094993607 +-1.27626299999999992529353676218 -0.0302219999999999988649079796232 -0.608473000000000041609382606111 +-1.27486900000000002997069259436 -0.094863000000000002875921722989 -0.604737999999999997768895809713 +-1.27378400000000002734168447205 -0.125001000000000001000088900582 0.601538000000000017131185359176 +-1.2737799999999999123190264072 0.034304000000000001158184659289 -0.613438000000000038802738799859 +-1.27302800000000004843059286941 0.609540999999999999481303802895 0.0886480000000000045723425046162 +-1.27283999999999997143618202244 0.550212999999999952116525037127 0.27774999999999999689137553105 +-1.27248399999999994847144080268 0.394500999999999990563992469106 0.474501999999999979351628098811 +-1.27083999999999996965982518304 0.516427999999999998159694314381 -0.343901000000000012235545909789 +-1.27082600000000001116973180615 0.225892000000000009451994742449 0.577905000000000002025046796916 +-1.26960500000000009457323812967 -0.159364000000000005652367462972 -0.602249999999999952038365336193 +-1.26953999999999989078958151367 -0.441089000000000008849809773892 -0.440124999999999988453680543898 +-1.26835100000000000619593265583 -0.57084900000000005082512188892 0.255769999999999997353228309294 +-1.2674319999999998920259258739 0.098459000000000004848565993143 -0.619615000000000026858515411732 +-1.2640139999999999709245912527 -0.361924000000000023469226562156 -0.520846000000000031171509817796 +-1.26380200000000009197265171679 -0.523124000000000033416824862798 -0.359366999999999991999288795341 +-1.26245399999999996509814081946 0.399336999999999997523758565876 -0.496728999999999976111553223745 +-1.26137999999999994571453498793 -0.212249999999999994226840271949 0.603215999999999974434672367352 +-1.26124400000000003174704943376 -0.631269999999999997797317519144 -0.103739999999999998880895191178 +-1.26109599999999999475619461009 -0.639847000000000054598103815806 -0.0153119999999999992223997935525 +-1.26049100000000002808064891724 -0.223471000000000002971844992317 -0.601017000000000023440804852726 +-1.2583489999999999398028194264 0.309981999999999979777953740268 -0.566100000000000047606363295927 +-1.25829999999999997406519014476 0.621196999999999999175770426518 0.175483000000000000095923269328 +-1.25724100000000005294964466884 0.161990999999999996106225808035 -0.626978999999999953018914311542 +-1.25708299999999995044674960809 -0.482053000000000009261924560633 0.43285800000000002052402692243 +-1.256957000000000101991304291 0.312358000000000024520829811081 0.567883000000000026652458018361 +-1.2564150000000000595434812567 -0.620202000000000031043612125359 -0.191759000000000012775558388967 +-1.25597000000000003083755473199 -0.645899000000000000909494701773 0.0731770000000000059303673083377 +-1.25553800000000004288835953048 -0.391554999999999986393106610194 0.519912000000000040778047605272 +-1.2552490000000000591739990341 0.491352999999999984215293125089 -0.427694000000000018602008822199 +-1.25058699999999989316279425111 0.632739000000000051393556077528 -0.188873000000000013098855333737 +-1.2501949999999999452171550729 0.653092000000000005854872142663 -0.102393999999999998906652365349 +-1.24871700000000007690914571867 -0.568748999999999949039874991286 0.342391000000000000902389274415 +-1.24832499999999990691890161543 0.556769999999999987139176482742 0.362891999999999992354560163221 +-1.24820099999999989393018040573 0.478750000000000008881784197001 0.461295999999999983831600047779 +-1.24756299999999997751842784055 -0.286932000000000020367707520563 -0.601045000000000051443294069031 +-1.24662800000000006939160357433 -0.606685999999999947540629818832 -0.279019999999999990247800951693 +-1.24604399999999992942889548431 0.609889000000000014445333818003 -0.274606999999999989992005566819 +-1.24588699999999996670396740228 -0.649402000000000034773961488099 0.161375999999999991674215493731 +-1.24486800000000008559197794966 0.670866999999999991111110375641 -0.0155099999999999994815258475001 +-1.24378600000000005820766091347 -0.29861900000000002330935444661 0.60317799999999999194244537648 +-1.2432499999999999662492200514 0.224647999999999986586729505689 -0.635500999999999982570386691805 +-1.24294600000000010631140412443 0.0557590000000000030055957722652 0.672292000000000000703437308402 +-1.24289999999999989377386100387 -0.507712000000000052146731377434 -0.444330000000000002735589532676 +-1.24246400000000001284661266254 -0.426842999999999972438047279866 -0.523534000000000054875215482753 +-1.2410680000000000600124394623 -0.0313449999999999978639309006212 0.677323000000000008391509709327 +-1.23960099999999995290522747382 0.142707000000000000516919840265 0.665600999999999998202326878527 +-1.23860700000000001352873368887 0.630400999999999989142906997586 0.261626000000000025202950837411 +-1.2379160000000000163566937772 0.397633999999999987462473427513 0.556284000000000000696331881045 +-1.23658399999999990548360528919 0.584632999999999958262719701452 -0.359258000000000021767476710011 +-1.23571600000000003660716174636 0.373582999999999998408384271897 -0.577443999999999957317697862891 +-1.23549799999999998512123511318 -0.0358679999999999971072028870367 -0.687208999999999958774310471199 +-1.23470400000000002371791651967 0.46433799999999997298871790008 -0.509799000000000002152944489353 +-1.23462899999999997646682459163 0.685995000000000021422863483167 0.0714349999999999984989784707068 +-1.23418999999999989825028023915 -0.0965700000000000030597746558669 -0.683702999999999949665152598755 +-1.2339739999999999042756826384 -0.11826100000000000500577357343 0.680676999999999976509457155771 +-1.23316699999999990211563272169 0.0247250000000000004496403249732 -0.691872000000000042518877307884 +-1.23191999999999990400567639881 -0.590775000000000050093262871087 -0.365180999999999977845277499 +-1.23104499999999994486188370502 0.229155999999999998584243598998 0.657277000000000000135003119794 +-1.23088799999999998213695562299 -0.650341999999999975656805872859 0.248938999999999993617549876035 +-1.2308730000000001059135001924 -0.349494000000000026862068125411 -0.602333000000000007290168468899 +-1.22924600000000006083666903578 -0.157141000000000002900790718741 -0.681366000000000027192470497539 +-1.22762600000000010602718703012 -0.475642999999999982474463422477 0.516429999999999944648720884288 +-1.22720500000000010132339411939 0.0849710000000000048592241341794 -0.697672999999999987608134688344 +-1.2255130000000000745075112718 0.286183999999999993946175891324 -0.645147000000000025998758701462 +-1.2241539999999999643875980837 -0.564404000000000016790124846011 0.4276599999999999845989862024 +-1.22224299999999996835242654925 0.557069000000000036365577216202 -0.442489999999999994440003092677 +-1.22178199999999992364507761522 -0.70340199999999997171329368939 -0.111685999999999993614885340776 +-1.22169299999999991790389231028 -0.20464599999999999457855892615 0.682338000000000000078159700934 +-1.22107000000000009976020010072 -0.383765999999999996017407966065 0.601424999999999987387866440258 +-1.22073100000000001053024334396 -0.713631000000000015326406810345 -0.0234390000000000015001333508735 +-1.22068799999999999528199623455 -0.217342000000000007409184377138 -0.680208000000000034823699479603 +-1.21951699999999996215649389342 0.6984160000000000367847974303 0.158097999999999988540722029029 +-1.21888499999999999623412350047 0.56113100000000004641265149985 0.446601000000000025735857889231 +-1.2180120000000000946016598391 -0.690398999999999984922283147171 -0.19949100000000000165734093116 +-1.21763599999999994061283814517 0.144631000000000009553247082295 -0.704587999999999992084553923632 +-1.21731400000000000716227077646 0.314765999999999990244248238014 0.647353999999999984993337420747 +-1.21709200000000006269829100347 -0.490296000000000009588774219083 -0.527538999999999980161646817578 +-1.21486099999999996867927620769 -0.721041999999999960735408421897 0.0648989999999999983559817451351 +-1.21402499999999990976107255847 0.637117000000000044401815557649 0.346735999999999988663290650948 +-1.21377599999999996605026808538 0.481383000000000005336175945558 0.543155999999999972160935612919 +-1.21235099999999995645794115262 -0.572533999999999987373655585543 -0.449900000000000022115642650533 +-1.21103099999999996860822193412 -0.648715000000000041602277178754 0.335519000000000011674217148538 +-1.21048500000000003318234576 -0.41091299999999997272226437417 -0.604876999999999998003374912514 +-1.20992900000000003224442934879 0.702482000000000050832227316278 -0.206374000000000001886490963443 +-1.20943500000000003780087354244 -0.674669999999999991935339949123 -0.286509000000000013663736808667 +-1.20928700000000000081001871877 0.435491000000000016978418670988 -0.589891999999999971926456510118 +-1.20860600000000006915001904417 0.72443100000000004712319423561 -0.120294999999999999151789609186 +-1.20854799999999995563371157914 -0.27693499999999998673061440968 -0.680234000000000005314859663486 +-1.20647700000000002162892087654 0.677760999999999946830087083072 -0.291638999999999981582732289098 +-1.20449699999999992883203958627 0.203470000000000011963763313361 -0.712590999999999974434672367352 +-1.20427299999999992685673078086 -0.290159000000000000252242671195 0.682300000000000017585932710062 +-1.20419699999999996187227679911 -0.725608000000000030738078748982 0.152982000000000006867395541121 +-1.20410100000000008790834726824 0.346355999999999997207567048463 -0.655880000000000018545165403339 +-1.20307800000000009177369975077 0.527306000000000052452264753811 -0.523975999999999997314148458827 +-1.20251299999999994305710515619 0.743520999999999987473131568549 -0.0337420000000000011586287484988 +-1.19959199999999999164401742746 0.708079000000000013947953902971 0.244136999999999992905230783435 +-1.19846099999999999852207110962 0.399197000000000024044766178122 0.635870999999999964025221288466 +-1.1982639999999999957935870043 0.650364999999999970903274970624 -0.375751999999999974910736000311 +-1.1981409999999999005382278483 0.0605390000000000025326407637749 0.748859999999999970121677961288 +-1.1962900000000000755306928113 -0.0253500000000000010047518372858 0.753821999999999992070343068917 +-1.19608500000000006480149750132 -0.656278000000000028002489216306 -0.372396000000000004792610752702 +-1.19484300000000009944756129698 0.146273999999999987364773801346 0.742263000000000006117772954894 +-1.1947620000000001017070871967 -0.55783199999999999452171550729 0.511241999999999974235720401339 +-1.19332299999999991158006196201 -0.467355000000000020410340084709 0.597963000000000022282620193437 +-1.19287399999999998989608229749 -0.335685999999999984400034236387 -0.681444000000000049688253511704 +-1.19167399999999990001242622384 0.759677000000000046675552312081 0.0529449999999999990074606159851 +-1.18985800000000008225242709159 -0.0413730000000000000537347943919 -0.76323399999999996801136603608 +-1.18929499999999999104716152942 -0.111052999999999998936850431619 0.757128000000000023206325749925 +-1.18878100000000008762413017394 -0.727310000000000012043699371134 0.240460000000000007069900220813 +-1.1886390000000000011226575225 -0.0978969999999999979101161784456 -0.759969000000000005634603894578 +-1.18799699999999996968824689247 -0.552031999999999967165820180526 -0.532843999999999984318321821775 +-1.18784099999999992469668086414 0.261255999999999988236965009492 -0.721648999999999984922283147171 +-1.18768699999999993721644386824 0.0150489999999999998769872888715 -0.767576000000000036038727557752 +-1.18648099999999989684340562235 -0.470943999999999973748998627343 -0.608666000000000040337511109101 +-1.18640699999999998937028067303 0.231517000000000000570210545447 0.734056000000000041794123717409 +-1.18639399999999994861354934983 -0.6445279999999999898108171692 0.420775000000000010125233984581 +-1.18532100000000006900791049702 0.620402000000000009016787316796 -0.458382999999999984908072292455 +-1.1846520000000000383266751669 0.641318000000000054683368944097 0.430478000000000027291946480545 +-1.18463300000000004708056167146 0.563275999999999998912869614287 0.528548000000000017806200958148 +-1.18403600000000008840572718327 -0.154297999999999990716759157294 -0.757793000000000049887205477717 +-1.18213600000000007561595793959 0.0711470000000000019069190670962 -0.772977000000000025181634555338 +-1.18178200000000011016254575225 -0.374462999999999990308197084232 0.680563999999999946766138236853 +-1.17916599999999993642063600419 0.495462000000000013510970120478 -0.603395000000000014672707493446 +-1.17909599999999992192556419468 0.404926000000000008149925179168 -0.667656999999999944961359688023 +-1.17812199999999989152854595886 -0.772885000000000044195758164278 -0.121144000000000001682209926912 +-1.17801399999999989454124715849 -0.63529800000000002935252041425 -0.45681399999999999783639736961 +-1.17718600000000006566835963895 -0.196232999999999990770049862476 0.758766000000000051528559197322 +-1.17613300000000009504219633527 0.772835000000000049702464366419 0.139422999999999991382892972069 +-1.17607200000000000628119778412 -0.784703000000000039371172988467 -0.0331139999999999976032505344392 +-1.17606699999999997352517766558 -0.210354999999999986437515531179 -0.756715000000000026503244043852 +-1.17552400000000001334399257757 -0.75801700000000005186251428313 -0.20869599999999999262456640281 +-1.17493300000000000515854026162 0.714948999999999945664796996425 0.329212000000000004629185923477 +-1.17456099999999996619237663253 0.482117000000000017756462966645 0.622871999999999981234566348576 +-1.17372900000000002229683104815 -0.393361000000000016196821661651 -0.683833000000000024165558443201 +-1.17322499999999996234123500471 0.126701000000000008061107337198 -0.779415999999999997704946963495 +-1.17286800000000002164313173125 0.315931999999999990613730460609 0.724270999999999998131272604951 +-1.16937899999999994626875832182 -0.793425000000000046895820560167 0.0550459999999999977093878555934 +-1.16867199999999993309529600083 -0.726141999999999954162888116116 0.326990000000000002877698079828 +-1.16828599999999993563903899485 -0.740156999999999953843143885024 -0.295424000000000019916512883356 +-1.16773299999999990994581366976 0.317761000000000015663914609831 -0.731728000000000045055514874548 +-1.16770100000000009998757377616 0.58799000000000001264766069653 -0.539204000000000016612489162071 +-1.16511999999999993349319993285 0.769325999999999954326312945341 -0.225014999999999992796873016232 +-1.1647620000000000750617346057 -0.265846000000000026730617719295 -0.756739000000000050505377657828 +-1.16287099999999998800603862037 0.742810999999999999054978161439 -0.309779000000000026560087462713 +-1.16277199999999991675281307835 0.792806000000000010707879027905 -0.139362000000000013644196883433 +-1.16099100000000010624034985085 0.181489000000000011425527191022 -0.786868000000000011873169114551 +-1.16065299999999993474375514779 -0.549057000000000017259083051613 0.592806999999999972850162066607 +-1.16000799999999992806465343165 -0.280552999999999996827426684831 0.758730000000000015525358776358 +-1.15895499999999995743849012797 -0.529352000000000044721559788741 -0.613685000000000036024516703037 +-1.15807100000000007256062417582 -0.799015000000000030766500458412 0.142989000000000004986233648197 +-1.15707599999999999340616341215 -0.637797999999999976061815232242 0.504371000000000013763212791673 +-1.15643800000000007699441084696 -0.719374999999999986677323704498 -0.380985000000000018083312625095 +-1.15603199999999994851407336682 0.713365000000000026858515411732 -0.393320999999999976193265638358 +-1.15594899999999989326227023412 0.782942000000000026815882847586 0.225350999999999995759836224352 +-1.15583400000000002805222720781 0.813154999999999961168839490711 -0.0531599999999999989208632200643 +-1.15529499999999996084909525962 -0.611809000000000047236881073331 -0.539429000000000047343462483695 +-1.15430999999999994720667473302 -0.457224000000000019294787989566 0.677136999999999988908427894785 +-1.15427699999999999747046786069 0.399185000000000012043699371134 0.712948000000000026155078103329 +-1.15118800000000010008704975917 -0.449734999999999995878852132591 -0.687390999999999974257036683412 +-1.15060300000000004239097961545 0.642989000000000032741809263825 0.512519999999999975592857026641 +-1.15060000000000006714628852933 0.461662999999999990041743558322 -0.680431000000000008043343768804 +-1.15016800000000007919709332782 -0.320552000000000003598898956625 -0.75786500000000001087130385713 +-1.14860800000000007337064289459 0.0650789999999999979607423483685 0.822474000000000038390624013118 +-1.14678999999999997605470980488 -0.0192559999999999988118393190462 0.827346000000000025842439299595 +-1.14570700000000003093703071499 0.563199000000000005172751116334 0.608410000000000006359357485053 +-1.14563700000000001644195890549 0.718996999999999997221777903178 0.412988000000000021749713141617 +-1.14548199999999988918375493085 0.235298000000000007148059921747 -0.795302999999999982172482759779 +-1.1454720000000000457163196188 0.553258000000000027540636438061 -0.617897999999999947284834433958 +-1.14536900000000008148504093697 0.14926300000000000678390676967 0.815996000000000054619420097879 +-1.14463000000000003630873379734 0.681103000000000013969270185044 -0.475310000000000010267342531733 +-1.14433500000000010210499112873 0.830296000000000034013680760836 0.0332519999999999968376407366577 +-1.14425299999999996458655004972 0.372761999999999982247089747034 -0.742786999999999975052844547463 +-1.14395200000000007989342520887 -0.722107999999999972118303048774 0.412229000000000012082779221601 +-1.14219399999999993156052369159 -0.801451000000000024492408101651 0.230367999999999989446664017123 +-1.14002500000000006608047442569 -0.695756000000000041083580981649 -0.465044000000000012917666936119 +-1.13992200000000010184919574385 -0.103407999999999999918287585388 0.830591999999999996973087945662 +-1.13952100000000000612487838225 -0.0467149999999999995803356966917 -0.836246000000000044849457481178 +-1.13839800000000002100364326907 -0.0988369999999999943041117944631 -0.833234999999999947917217468785 +-1.13783100000000003682032456709 -0.36368099999999997651300986945 0.757017999999999968707697917125 +-1.13752000000000008661515948916 0.00531300000000000001432187701766 -0.840250000000000052402526762307 +-1.13708600000000004115463525523 0.232963000000000003408828774809 0.807937000000000016264323221549 +-1.134152999999999966718178257 -0.150846000000000007856826300667 -0.831228999999999995651478457148 +-1.13240099999999999091926383699 0.0570430000000000034243718971538 -0.845230999999999954575002902857 +-1.13234100000000004193623226456 -0.374257000000000006334488489301 -0.760090000000000043378634018154 +-1.13120400000000009832490377448 0.7899589999999999667679162485 0.310389000000000025991653274104 +-1.13071000000000010388134796813 0.480947999999999986631138426674 0.700130999999999947824846913136 +-1.13043800000000005390177193476 -0.839443999999999967975838899292 -0.132078000000000000957456336437 +-1.12911800000000006605205271626 -0.82278899999999999259614469338 -0.219336000000000003185007813045 +-1.12871199999999993757171523612 0.646152999999999977376319293398 -0.555424000000000028798297080357 +-1.1283199999999999896260760579 0.844161000000000050214055136166 0.119533000000000000362376795238 +-1.12803100000000000591171556152 -0.187046999999999991048937886262 0.832200999999999968537167660543 +-1.1280159999999999076436552059 -0.585906000000000037886138670729 -0.619914999999999993818278198887 +-1.12729600000000007575806648674 -0.852786000000000043996806198265 -0.0442979999999999971005415488889 +-1.12680399999999991678123478778 -0.202536999999999994814814385791 -0.830234999999999945252682209684 +-1.12675799999999992628829659225 0.28791299999999997449862121357 -0.804687999999999958866681026848 +-1.12533900000000008922995675675 -0.504583000000000003737454790098 -0.692104000000000052494897317956 +-1.12418400000000007210587682493 0.10827000000000000512478948167 -0.851168000000000035676350762515 +-1.12379199999999990211563272169 0.315850999999999992873256360326 0.798329999999999984083842718974 +-1.12334399999999989816501511086 -0.8028880000000000460858018414 -0.305727999999999999758415469842 +-1.12319100000000005046274509368 -0.628550000000000053113069498067 0.585976000000000052381210480235 +-1.12196399999999996133226431994 -0.538116999999999956472152007336 0.67203100000000004499156602833 +-1.12180799999999991634069829161 -0.800725000000000020072832285223 0.316836999999999979760190171874 +-1.11970400000000003259970071667 -0.862761000000000000120792265079 0.0436560000000000003606004383983 +-1.11911399999999994214761045441 -0.669390000000000040536463075114 -0.547266999999999947945639178215 +-1.11872299999999991193533332989 0.516342999999999996418864611769 -0.694153000000000020008883439004 +-1.11749300000000006960476639506 0.426041999999999976278530766649 -0.754782999999999981710629981535 +-1.11637999999999992795096659393 -0.253707000000000015837997580093 -0.830257000000000022765789253754 +-1.11633699999999991270271948451 0.833007999999999970697217577253 -0.244719999999999993089971894733 +-1.11539699999999997181987509975 0.804784000000000054875215482753 -0.328956000000000026162183530687 +-1.11471699999999995789323747886 -0.71522499999999999964472863212 0.495842000000000004966693722963 +-1.11313599999999990330934451777 -0.77981699999999998240696186258 -0.390913999999999983714360496379 +-1.112902999999999975599962454 0.158791999999999988713028642451 -0.858040000000000024904522888392 +-1.11287200000000008337508461409 0.857944999999999957651652948698 -0.159518999999999994132693359461 +-1.11201400000000005796607638331 0.642121999999999970576425312174 0.592540999999999984382270667993 +-1.11182000000000003048228336411 0.720207999999999959328533805092 0.495134999999999991793231401971 +-1.11135099999999997777422322542 -0.426750000000000018207657603853 -0.763403000000000053759663387609 +-1.11116499999999995829114141088 -0.269840999999999997527311279555 0.832164000000000014800605185883 +-1.11074199999999989607601946773 -0.445288000000000017131185359176 0.753638000000000030098590286798 +-1.1100540000000000961932755672 0.773383999999999960373031626659 -0.411893000000000009119816013481 +-1.10833899999999996310862115934 0.608652999999999999580779785902 -0.633345000000000046824766286591 +-1.10785200000000005893241450394 0.854693000000000036031622130395 0.205341999999999996751043340737 +-1.1076930000000000386961573895 -0.869333000000000022389201603801 0.131437999999999999278799123203 +-1.10553799999999990966159657546 0.397598000000000006970424237807 0.787210999999999994081179011118 +-1.10501500000000008050449196162 0.879495000000000026751934001368 -0.0736880000000000034976466167791 +-1.10489400000000004276046183804 0.339127999999999985014653702819 -0.814985999999999988219201441098 +-1.10292199999999995796429175243 -0.304153000000000006686207143503 -0.831296000000000034901859180536 +-1.10225900000000009981704351958 0.560899000000000036436631489778 0.685869999999999979678477757261 +-1.10199500000000005783817869087 0.793858999999999981334042331582 0.394201999999999996848742966904 +-1.10033099999999994800248259708 0.738932000000000033246294606215 -0.493205000000000004511946372077 +-1.09860099999999993869437275862 0.208410000000000011910472608179 -0.865817999999999976523668010486 +-1.09853399999999989944399203523 -0.753669999999999951079132642917 -0.474557999999999979845455300165 +-1.09699499999999994237498412986 -0.796838999999999963996799579036 0.402056000000000024474644533257 +-1.09628499999999995395683072275 -0.557691000000000047798209834582 -0.697953999999999963321783980064 +-1.09454199999999990389198956109 0.0693619999999999931050709278679 0.892842000000000024506618956366 +-1.09378599999999992498089795845 -0.640382000000000006778577699151 -0.627330000000000054249937875284 +-1.09279700000000001836042429204 0.89757399999999998296829062383 0.0124340000000000006075140390749 +-1.09276499999999998635757947341 -0.0130849999999999994093613508994 0.897604999999999986215470926254 +-1.09137599999999990174615049909 0.151662999999999992262189607573 0.886508999999999991459276316164 +-1.09131200000000005978506578685 -0.872473000000000054043880481913 0.218701000000000006506795102723 +-1.08938899999999994072652498289 -0.351463999999999998635757947341 0.830483999999999999985789145285 +-1.08755899999999994243182754872 0.477389999999999981028508955205 -0.767668000000000017024603948812 +-1.08728200000000008174083632184 -0.477822999999999997733368672925 -0.767791000000000001257660642295 +-1.08648300000000008758149760979 -0.353675999999999990386356785166 -0.833346999999999948904871871491 +-1.08626500000000003609557097661 0.701563999999999965417885050556 -0.572570000000000023376856006507 +-1.08605100000000009963230240828 -0.0953549999999999953192997281803 0.900777999999999967606356676697 +-1.08487299999999997623945091618 -0.616821999999999981412202032516 0.665267999999999970484054756525 +-1.08468800000000009653433608037 -0.0518730000000000024407142973359 -0.905958000000000041040948417503 +-1.08366399999999996062172158418 -0.0993870000000000031192826099868 -0.903213999999999961332264319935 +-1.08359200000000011065992566728 0.568751000000000006551204023708 -0.708767000000000035875302728527 +-1.0832779999999999631654645782 0.233490000000000003099742684753 0.878630000000000022097879082139 +-1.08301099999999994594190866337 0.861851999999999951462825720228 0.290341000000000015734968883407 +-1.0828629999999999089510538397 -0.00444400000000000003352873534368 -0.909607999999999972118303048774 +-1.08239700000000005353228971217 0.477881000000000000227373675443 0.774626000000000036749270293512 +-1.0813349999999999351274482251 0.25692799999999998972199932723 -0.874472000000000027064572805102 +-1.0810830000000000161719526659 -0.705517999999999978477660533827 0.577497000000000038077985209384 +-1.07997600000000004705213996203 0.388739999999999974455988649424 -0.826156000000000001470823463023 +-1.07979399999999992054711128731 -0.146799000000000012811085525755 -0.90138399999999996303756688576 +-1.07959699999999991781862718199 -0.724547000000000052111204240646 -0.556328000000000044700243506668 +-1.07897899999999991038635016594 -0.884461000000000052700954711327 -0.231369999999999992335020237988 +-1.07891599999999998615862750739 -0.902815999999999951874940506968 -0.14444399999999998907007636717 +-1.07884800000000002917488473031 -0.525051999999999963186780860269 0.748604000000000047165826799755 +-1.07819700000000007200640084193 0.0427130000000000009663381206337 -0.91414799999999996060751072946 +-1.07626599999999994494714883331 0.912112000000000033850255931611 0.0985059999999999963415930892552 +-1.07478500000000010139444839297 -0.862616000000000049396930990042 -0.317383000000000026208368808511 +-1.07459400000000004915534645988 -0.917607999999999979223730406375 -0.0569469999999999976214581920431 +-1.07442600000000010318501608708 -0.177122000000000001662670001679 0.902351000000000014189538433129 +-1.07361400000000006826894605183 0.718574999999999963762320476235 0.575327000000000032819968964759 +-1.07309499999999991004528965277 -0.193921000000000010032863428933 -0.900478000000000000646593889542 +-1.07070599999999993556798472127 0.0894120000000000053619331197297 -0.919560999999999961751484534034 +-1.0706230000000001023607865136 -0.872170000000000000817124146124 0.305101000000000011080913964179 +-1.07028100000000003788613867073 0.314522999999999997022825937165 0.869237999999999955136331664107 +-1.06903600000000009728751138027 0.638720999999999983209875153989 0.670221999999999984432008659496 +-1.06843599999999994132338088093 0.79462699999999997224620074121 0.476459999999999994635402345011 +-1.06791199999999997238830928836 0.661425999999999958411933675961 -0.649676000000000031242564091372 +-1.06785299999999994113863976963 -0.789807999999999954532370338711 0.485688999999999981849185815008 +-1.06712800000000007649703093193 -0.402081000000000021721291432186 -0.836401999999999978818721046991 +-1.06634899999999999131716776901 -0.837365000000000025970336992032 -0.402144000000000001460165321987 +-1.06603200000000009062262051884 -0.928779000000000021231016944512 0.0307739999999999992719157404508 +-1.06424300000000005006484116166 0.863434999999999952535745251225 -0.349094000000000015404566511279 +-1.06414100000000000356692453352 -0.608847000000000027064572805102 -0.704918000000000044558134959516 +-1.06377300000000007962341896928 0.893275999999999958944840727781 -0.265413999999999983270271286528 +-1.06359300000000001062971932697 -0.240567000000000003057110120608 -0.9004990000000000494040364174 +-1.06278999999999990144772255007 -0.431593999999999977656983674024 0.827165000000000039115377603594 +-1.06117400000000006166089860926 0.304155000000000008686384944667 -0.883967999999999975990760958666 +-1.0605130000000000389803744838 0.830187000000000008270717444248 -0.431396000000000001683986283751 +-1.06042199999999997572786014643 0.135468000000000005078604203845 -0.925825000000000009059419880941 +-1.06022799999999994824406712723 -0.527274000000000020449419935176 -0.773239000000000009649170351622 +-1.05910499999999996312283201405 0.919591999999999964998664836457 -0.180686000000000013265832876641 +-1.05793699999999990524202075903 -0.258064000000000015599965763613 0.902314999999999978186338012165 +-1.05640000000000000568434188608 -0.692566000000000014935608305677 -0.635902999999999996028066107101 +-1.05548799999999998178168425511 0.923049000000000008370193427254 0.184189999999999992619237332292 +-1.05456799999999994987831541948 0.526603999999999961012520088843 -0.781391999999999975479170188919 +-1.05446100000000009266898359783 0.556385000000000018438583992975 0.760623000000000049070081331593 +-1.05389700000000008373035598197 0.865609999999999990549781614391 0.374194000000000026595614599501 +-1.05370399999999997397992501647 -0.808810999999999946652451399132 -0.485316999999999998394173417182 +-1.05326199999999992051868957788 -0.936284000000000005137223979546 0.118373000000000005993427976136 +-1.0525970000000000048601123126 0.793660999999999949849893710052 -0.511996000000000006657785434072 +-1.05243599999999992711252616573 0.394440999999999986069809665423 0.858368000000000019866774891852 +-1.05210200000000009268319445255 0.436553000000000024360957695535 -0.838153999999999954617635467002 +-1.05132399999999992523669334332 -0.286553999999999975401010487985 -0.901445999999999969531927490607 +-1.05025699999999999612043666275 0.942278999999999977710274379206 -0.0952449999999999963318231266385 +-1.04738500000000001044497821567 0.180699999999999999511501869165 -0.932915999999999967506880693691 +-1.0457089999999999996305177774 -0.868423999999999973731235058949 0.390297000000000005037747996539 +-1.04534499999999996866506535298 0.618678999999999978953724166786 -0.724216999999999999637623204762 +-1.0449329999999998896953457006 -0.449176999999999992940757920223 -0.840449000000000001620037437533 +-1.04318200000000005367439825932 -0.693027999999999977376319293398 0.656873999999999957921659188287 +-1.04227399999999992274979376816 -0.602658999999999944741091439937 0.741935000000000011155520951434 +-1.04052799999999989744026152039 0.75400400000000000755306928113 -0.590575999999999989853449733346 +-1.0381959999999998967012970752 0.349903000000000019564794229154 -0.894267999999999951832307942823 +-1.0372639999999999638191638951 0.961246000000000044849457481178 -0.0094280000000000006160627563645 +-1.03689999999999993285371147067 -0.777063999999999976964204506658 -0.566575999999999968537167660543 +-1.03664899999999993163157796516 -0.337861000000000022414070599552 0.900672000000000028130386908742 +-1.03633799999999998142641288723 -0.331699000000000021604051880786 -0.903314999999999979074516431865 +-1.03633599999999992391508385481 -0.940093999999999985206500241475 0.205505999999999994232169342467 +-1.03615600000000007696598913753 0.0733720000000000066586736124918 0.959686000000000039023007047945 +-1.03449699999999999988631316228 -0.779658999999999990926369264344 0.567405000000000048210324621323 +-1.03442699999999998539124135277 -0.00686300000000000017669199436909 0.964320999999999983742782205809 +-1.03307499999999996553867731564 0.153463999999999989309884540489 0.953521999999999980701659296756 +-1.03164499999999992319033026433 0.224928999999999990055954413037 -0.940805000000000002380318164796 +-1.03147300000000008424194675172 -0.509915000000000007140954494389 0.8222220000000000084128259914 +-1.03117199999999997750421698584 0.714107999999999965012875691173 0.653248999999999968579800224688 +-1.03065999999999990954790973774 0.792256999999999989015009305149 0.55683700000000002638955720613 +-1.0305439999999999045598997327 0.93034399999999994879118503377 0.269147000000000025110580281762 +-1.03029600000000010062706223835 -0.574909000000000003360867140145 -0.779723000000000054932058901613 +-1.02981300000000008942890872277 0.472928000000000015035084288684 0.846064000000000038248515465966 +-1.02903300000000008651568350615 -0.657850999999999963563368510222 -0.712968000000000046156856114976 +-1.02789299999999994561505900492 -0.0869250000000000022648549702353 0.96740899999999996339283825364 +-1.02557399999999998563282588293 -0.0568260000000000015107914919099 -0.97209500000000004238387418809 +-1.02530300000000007543121682829 -0.942787999999999959399588078668 -0.244749999999999995337063296574 +-1.02519399999999993866595104919 0.233095999999999997642774474116 0.945855000000000001314504061156 +-1.02465300000000003599609499361 -0.0995449999999999945998752082232 -0.969627000000000016655121726217 +-1.02435199999999992925836522772 0.711370999999999975571540744568 -0.666823999999999972310149587429 +-1.02393299999999998206590134942 -0.014182999999999999427013896991 -0.975377000000000049517723255121 +-1.02376000000000000333955085807 -0.962751000000000023426593998011 -0.158193000000000000282440737465 +-1.02280100000000007121059297788 -0.919104000000000032066793664853 -0.330342000000000024506618956366 +-1.02183899999999994179233908653 0.632799000000000000376587649953 0.745257999999999976026288095454 +-1.02138200000000001210764821735 0.482379000000000002223998762929 -0.850933000000000050455639666325 +-1.02117400000000002613376182126 -0.142171999999999992825294725662 -0.967983000000000037843506106583 +-1.02062199999999991817389854987 0.865952000000000055024429457262 0.456569999999999975859310552551 +-1.02017699999999988946797202516 0.976420999999999983387510837929 0.0764250000000000068167693711985 +-1.01998600000000005927347501711 -0.494777000000000022339463612298 -0.845472000000000001307398633799 +-1.01973699999999989351806561899 0.0282150000000000004962696920074 -0.9794589999999999685442730879 +-1.0186939999999999884039425524 -0.375825000000000020161650127193 -0.906100000000000016520118606422 +-1.01865199999999989088905749668 0.573490000000000055280224842136 -0.795900999999999969602981764183 +-1.01817599999999996995825313206 -0.978914999999999979607423483685 -0.0710110000000000046727066660424 +-1.0166679999999999051141230666 -0.861252000000000017543300145917 0.473953000000000013169909607313 +-1.01658000000000003915090474038 -0.166498000000000007103651000762 0.96893899999999999472777290066 +-1.01626199999999999867839051149 -0.891792999999999946858508792502 -0.414629000000000025316637675132 +-1.01600500000000004696687483374 -0.742250999999999994116706147906 -0.645598000000000005194067398406 +-1.01531900000000008255085504061 -0.940193999999999974193087837193 0.291827000000000003065991904805 +-1.01515099999999991453591974278 -0.184539000000000008583356247982 -0.967168000000000027682744985214 +-1.01326600000000000001421085472 0.267981000000000024741098059167 -0.94946200000000002816591404553 +-1.01300300000000009781331300474 0.0702009999999999995123900475846 -0.984325000000000005506706202141 +-1.01254599999999994608401721052 0.31195400000000000906297259462 0.936714999999999964330754664843 +-1.01249300000000008736833478906 0.393992999999999982119192054597 -0.905332000000000025607960196794 +-1.01064500000000001556088591315 -0.416198000000000012388312597977 0.897428000000000003488764832582 +-1.0096110000000000361808361049 0.918532000000000015127454844333 -0.370113000000000025302426820417 +-1.00857400000000008155609521054 -0.991215999999999985980991823453 0.0164510000000000003450573160535 +-1.00763500000000005840661287948 0.949892999999999987359444730828 -0.287013000000000018108181620846 +-1.00760300000000002640376806085 0.883546999999999971286968047934 -0.451753000000000015656809182474 +-1.00660700000000002951594524347 -0.226478000000000012637002555493 -0.967187000000000018928858480649 +-1.00571199999999993934807207552 -0.860962000000000005073275133327 -0.497280999999999973049114032619 +-1.00413299999999994227550814685 0.66593100000000005067590791441 -0.740441000000000015823786725377 +-1.00375700000000001033129137795 0.111610000000000000874855743405 -0.989956999999999975869968693587 +-1.00250100000000008648726179672 0.549676000000000053447024583875 0.832374999999999976019182668097 +-1.0016819999999999613038426105 0.977504000000000039527492390334 -0.202778999999999987036147786057 +-1.00161799999999989729815297324 0.845075000000000020605739337043 -0.531610000000000026965096822096 +-1.00153300000000000657962573314 0.933966999999999991644017427461 0.353042000000000022463808591056 +-1.0011650000000000826361201689 -0.677802000000000015589307622577 0.733658000000000032336799904442 +-1.00053299999999989466914485092 -0.245268000000000013782752716907 0.968905000000000016235901512118 +-0.999064999999999980850873271265 0.987740999999999980119014253432 0.161978000000000010860645716093 +-0.998461000000000042930992094625 -0.41875800000000001910294145091 -0.909789999999999987601029260986 +-0.997604999999999964011010433751 -0.620539999999999980495601903385 -0.787219000000000002081890215777 +-0.997056999999999971073805227206 -0.766433999999999948649076486618 0.646881000000000039307224142249 +-0.995577000000000045254466840561 -0.267824000000000006505018745884 -0.968037999999999954070517560467 +-0.995561000000000029253044431243 -0.586118000000000027860380669154 0.815674000000000010146550266654 +-0.995179999999999953530505081289 0.389726999999999990098586977183 0.926136999999999988020249475085 +-0.994990999999999958802732180629 -0.999604000000000048054005219456 0.103847999999999995868193991555 +-0.992385999999999990350829648378 -0.538702000000000014168222151056 -0.851451999999999986634691140353 +-0.992319999999999979856113441201 0.309686000000000016818546555442 -0.958851000000000008860467914928 +-0.992035000000000000142108547152 0.152276999999999995694111021294 -0.99633199999999999540989392699 +-0.991775999999999990919263836986 1.00125799999999998135535861365 -0.117746000000000003438138662659 +-0.991681000000000034688696359808 0.803266999999999953274709696416 -0.609369000000000049510617827764 +-0.991191999999999961978858209477 -0.826733000000000051166182402085 -0.577969999999999983764098487882 +-0.991099999999999980992981818417 -0.704509000000000051855408855772 -0.722072000000000047137405090325 +-0.990295000000000036344260934129 -0.936583000000000054363624713005 0.376997000000000026531665753282 +-0.988816999999999945991646654875 0.786761999999999961374896884081 0.63501700000000005363887112253 +-0.987939000000000011603162874962 0.526036999999999976829201386863 -0.864442999999999961424634875584 +-0.984659999999999979714004894049 0.706821999999999950325957343011 0.728592000000000017401191598765 +-0.984165999999999985270449087693 0.436250000000000026645352591004 -0.917116000000000042291503632441 +-0.98361500000000001708855279503 -0.850681000000000020477841644606 0.555737999999999954248153244407 +-0.983321000000000000618172180111 0.862877000000000005108802270115 0.53714399999999995483079828773 +-0.982102999999999948244067127234 -0.308412999999999992706278817423 -0.969718999999999997640998117276 +-0.980028000000000010238920822303 -0.492765999999999981806553250863 0.892595000000000027284841053188 +-0.97995100000000001649880232435 0.61786200000000002230393647551 -0.811135999999999968146369155875 +-0.979816000000000020264678823878 -0.322923999999999988830268193851 0.967305999999999999161559571803 +-0.977955000000000018722801087279 1.02106000000000007865708084864 -0.0322469999999999978879117179531 +-0.977883999999999975472064761561 0.192042999999999991489474382433 -1.00342500000000001136868377216 +-0.977828999999999948222750845161 0.75828899999999999081978785398 -0.684723999999999999310773546313 +-0.977481999999999962014385346265 -1.00404800000000005155698090675 0.190835000000000004627409566638 +-0.975719000000000002970068635477 -0.460326999999999986190601930502 -0.914368999999999987338128448755 +-0.974009000000000013663736808667 0.995164000000000048551385134488 0.24689099999999999934807703994 +-0.973681000000000018701484805206 0.0770929999999999948645523772939 1.02274200000000003996092345915 +-0.973164000000000029011459901085 0.466108999999999995544897046784 0.914162999999999947853268622566 +-0.972762000000000015553780485789 -0.789241999999999999104716152942 -0.656376999999999988233412295813 +-0.972006000000000036642688883148 -0.00061399999999999996247446176767 1.02723100000000000520117282576 +-0.970697000000000032038371955423 0.154659999999999991926458164926 1.01677299999999992685673078086 +-0.970609999999999972786213220388 0.624380000000000046078696414042 0.817354000000000024961366307252 +-0.968889000000000000234479102801 0.349878000000000022318147330225 -0.968937000000000048238746330753 +-0.968569000000000013272938303999 0.933903999999999956393992306403 0.435543000000000013471890270011 +-0.968303000000000024805046905385 -0.997539999999999982271958742786 -0.259423999999999987942089774151 +-0.9675979999999999581206111543 -0.972130999999999967364772146539 -0.344552999999999998159694314381 +-0.966238999999999959023000428715 -0.34808600000000000651567688692 -0.972222999999999948350648537598 +-0.965678000000000036351366361487 -0.0781519999999999992468247000943 1.03022199999999997110933236399 +-0.96518800000000004590816615746 -1.01901299999999994660981883499 -0.173271000000000008345324431502 +-0.96307299999999995687716136672 -0.942884000000000055408122534573 -0.428321999999999980524023612816 +-0.963064999999999948876450162061 0.231781999999999988038013043479 1.00934799999999991193533332989 +-0.962412000000000045218939703773 -0.0615539999999999976054709804885 -1.03439600000000009316636351286 +-0.962284000000000028229862891749 -0.663985000000000047393200475199 -0.795696999999999987629450970417 +-0.962239999999999984225951266126 -0.580779000000000045211834276415 -0.858364000000000015866419289523 +-0.961597999999999952791540636099 -0.0993099999999999955013763042189 -1.03221500000000010466294497746 +-0.96136399999999999632649405612 -0.929275999999999990919263836986 0.46067900000000000515498754794 +-0.96135899999999996357047393758 0.230750000000000010658141036402 -1.01120800000000010676615147531 +-0.960961999999999982868814640824 -0.023865999999999998326671857285 -1.03729599999999999582200871373 +-0.960274999999999989697130331479 1.03683299999999989360333074728 0.0533780000000000018345325258906 +-0.960118999999999944705564303149 0.710319000000000033701041957102 -0.757375000000000020428103653103 +-0.958523000000000013898215911468 -0.136983999999999994656718627084 -1.03076100000000003831246431218 +-0.958264000000000004675371201301 -1.03646499999999996965982518304 -0.0864349999999999979438669583942 +-0.957254000000000049297455007036 0.013606000000000000038635761257 -1.04090400000000005142908321432 +-0.956115000000000048174797484535 -1.00452900000000000524380538991 0.277069000000000009720224625198 +-0.95568299999999994920329982051 -0.750183999999999961971752782119 0.723804000000000002934541498689 +-0.955196000000000045027093165118 -0.659900999999999959833019147482 0.807545999999999986052046097029 +-0.95474700000000001232081103808 -0.909916999999999975834441556799 -0.510400999999999993583799096086 +-0.954721999999999959563012907893 -0.155216999999999993864463476712 1.03170399999999995443999978306 +-0.954509999999999969588770909468 -0.399158999999999986041387955993 0.964149000000000033772096230678 +-0.953327000000000035484504223859 0.476509000000000015884182857917 -0.929574000000000011390000054234 +-0.953200000000000047251091928047 -0.174427999999999999714006548857 -1.03004099999999998438227066799 +-0.951902000000000025892177291098 0.567355000000000053717030823464 -0.878630000000000022097879082139 +-0.951717000000000035164759992767 0.969857999999999997875477220077 -0.391932000000000002604139126561 +-0.951533999999999990926369264344 0.933254999999999945714534987928 -0.472884000000000026542323894319 +-0.951301999999999980950349254272 0.0507140000000000021329604749099 -1.04520499999999993967492173397 +-0.950814999999999965751840136363 0.308155000000000012239098623468 1.00049499999999991217691786005 +-0.950559000000000042795988974831 -0.500369999999999981454834596661 -0.9198199999999999709743292442 +-0.950492000000000003545608251443 -0.748635999999999968146369155875 -0.73219500000000004025224598081 +-0.948143999999999986805221396935 1.00263400000000002521005626477 -0.30943300000000001359623524877 +-0.948048000000000001818989403546 -0.386685999999999974185982409836 -0.975539999999999962732033509383 +-0.947594999999999965112351674179 0.892969000000000012740031252179 -0.551969999999999960671459575678 +-0.947556999999999982620124683308 -1.04982599999999992590460351494 0.000742999999999999953884111114633 +-0.946679000000000048231640903396 -0.836752000000000051294080094522 0.635329999999999950333062770369 +-0.946585000000000009734435479913 0.540796999999999972175146467634 0.900841000000000002856381797756 +-0.945648999999999961829644234967 -0.211494999999999988560261954262 -1.03005700000000000038369307731 +-0.945110000000000005648814749293 0.99865899999999996339283825364 0.330828999999999984193976843017 +-0.944919999999999982165377332421 -0.567263999999999990464516486099 0.886194000000000037253755635902 +-0.943130000000000023874235921539 0.0873109999999999997211119762142 -1.0501819999999999488693447347 +-0.943072000000000021380230919021 0.778160999999999991594279435958 0.710690000000000043911541069974 +-0.94306599999999995986854628427 0.388400000000000023003821070233 -0.979679999999999995274890807195 +-0.942652999999999963165464578196 -0.873357999999999967677410950273 -0.59046500000000001762145984685 +-0.942527000000000003687716798595 0.268245999999999984453324941569 -1.0196510000000000850661763252 +-0.942138000000000030986768706498 0.856396000000000046092907268758 0.615597999999999978548714807403 +-0.940829000000000026382451778773 1.03145299999999995321786627756 -0.225711999999999995969446331401 +-0.939917000000000002479794147803 0.849157999999999968387953686033 -0.628877000000000019319656985317 +-0.939181000000000043570480556809 -0.231503999999999987569054837877 1.03167100000000000470379291073 +-0.938806000000000029359625841607 1.0485130000000000283222334474 0.13879299999999999970512476466 +-0.938620000000000009876544027065 0.659545999999999965623942443926 -0.827038000000000050881965307781 +-0.935899999999999954169993543474 -0.248036000000000006471267965935 -1.03081000000000000405009359383 +-0.934262999999999954603424612287 0.696745999999999976459719164268 0.801059999999999994280130977131 +-0.933996000000000048402171159978 0.383475999999999983547382953475 0.990250999999999992340349308506 +-0.933111000000000023746338229103 -1.05904400000000009640643838793 0.0879179999999999961524110858591 +-0.932769999999999988027354902442 0.123253000000000001445954467272 -1.05581700000000000549960077478 +-0.931783000000000027895907805942 0.93015499999999995406341213311 0.51632599999999995166177768624 +-0.930973999999999968224528856808 -1.00104499999999996262545209902 0.362209000000000003183231456205 +-0.929802000000000017365664461977 1.05620099999999994544452874834 -0.141101000000000004197531211503 +-0.929668999999999967620567531412 -0.620842000000000004966693722963 -0.8661809999999999787334559187 +-0.928637999999999963485208809288 -0.918301999999999951640461404168 0.542542999999999997484678715409 +-0.928529000000000048764547955216 0.801996000000000042184922222077 -0.703303000000000011482370609883 +-0.92760200000000003761613243114 -0.424061000000000021259438653942 -0.97965700000000000002842170943 +-0.926839999999999997193356193748 -0.833353000000000010416556506243 -0.668198999999999987409182722331 +-0.924714999999999953672613628441 -0.473673000000000010700773600547 0.959446000000000021046275833214 +-0.924471000000000042717829273897 -0.705075000000000007283063041541 -0.80512300000000003308286977699 +-0.923992000000000035520031360647 -0.283909999999999995701216448651 -1.03229499999999996262545209902 +-0.923077999999999954106044697255 -0.538726999999999955903717818728 -0.926120999999999972018827065767 +-0.921459999999999945785589261504 0.304381999999999985906384836198 -1.02871899999999993902122241707 +-0.920263000000000053191229199001 0.158399000000000012011724948024 -1.06208600000000008556355624023 +-0.920097000000000053709925396106 0.514608999999999983110399170982 -0.94265600000000004943245812683 +-0.919116999999999961801222525537 -0.306711999999999984645171480224 1.03012199999999998212274476828 +-0.915548999999999946197704048245 0.613496000000000041296743802377 0.886222999999999982989606905903 +-0.915104999999999946247442039748 1.07678000000000007041478511383 -0.0559329999999999966098229720046 +-0.914982999999999990770049862476 -1.06408199999999997231725501479 0.174746000000000012430945162123 +-0.914951999999999987522869560053 0.425099999999999977884357349467 -0.991036000000000028009594643663 +-0.913630999999999970917485825339 1.05605600000000010574296993582 0.223659999999999997699617892977 +-0.913476999999999983437248829432 0.751669999999999949302775803517 -0.774953000000000002955857780762 +-0.913416000000000005698552740796 0.606168999999999957850604914711 -0.893437000000000036692426874652 +-0.912673999999999985277554515051 0.457450000000000023270274596143 0.978655000000000052651216719823 +-0.91247999999999995779376149585 0.998213000000000016953549675236 0.413461999999999996191490936326 +-0.910537000000000040778047605272 -0.730974000000000012633449841815 0.797870999999999996887822817371 +-0.909972000000000003083755473199 -0.318973000000000006526335027957 -1.03450799999999998313171545306 +-0.909391999999999978143705448019 -1.02148599999999989407228895288 -0.359960999999999975429432197416 +-0.90820400000000001128341864387 -1.04850200000000004507683115662 -0.275332999999999994411581383247 +-0.907367999999999952365214994643 -0.790058999999999955754503844219 -0.743295999999999956742158246925 +-0.907363999999999948364859392314 0.0805089999999999972324360442144 1.08176199999999989032062330807 +-0.906992000000000020420998225745 -0.990438000000000040579095639259 -0.44316800000000000636646291241 +-0.906008000000000035534242215363 -0.819521000000000054974691465759 0.71241399999999999170796627368 +-0.905750000000000055067062021408 0.00563799999999999978256282062716 1.08608700000000002461320036673 +-0.905658999999999991814547684044 0.192608000000000001428190898878 -1.06896400000000002528111053834 +-0.905457999999999985085707976395 -0.639395999999999964380492656346 0.87824800000000002864197767849 +-0.904980000000000006643574579357 -0.4600620000000000264783750481 -0.984558000000000044238390728424 +-0.904487999999999958689045342908 0.155244999999999994111377077388 1.07601100000000005074696218799 +-0.903432000000000012818190953112 -1.07137999999999999900524016994 -0.189619000000000009764633546183 +-0.902159999999999961950436500047 -0.993611000000000021969981389702 0.445919999999999983053555752122 +-0.90101100000000000633804120298 -0.955482000000000053496762575378 -0.524626000000000036749270293512 +-0.899652000000000007240430477395 -0.0690709999999999935127448225103 1.08896999999999999353406110458 +-0.898243000000000013649525953952 0.339017000000000012782663816324 -1.03837700000000010547296369623 +-0.8972369999999999512496628995 0.846535000000000037445602174557 0.691622999999999987785770372284 +-0.897135000000000015774048733874 0.229553000000000007041478511383 1.06885699999999994602717379166 +-0.896796000000000037566394439636 1.0931100000000000260769184024 0.0294549999999999985444976147164 +-0.895452000000000025714541607158 -0.0660400000000000014788170688007 -1.09261300000000005638867150992 +-0.895093999999999945238471354969 -1.09003099999999997216093561292 -0.10315699999999999869615407988 +-0.894819999999999948769868751697 0.698375999999999996781241407007 -0.843544999999999989270804690022 +-0.894800999999999957523755256261 -0.658731999999999984218845838768 -0.874873000000000011766587704187 +-0.894747999999999987785770372284 -0.0986830000000000068238747985561 -1.09072799999999991982235769683 +-0.894607999999999958795626753272 -0.380543999999999993377741702716 1.02706499999999989469756656035 +-0.894198000000000048359538595832 -0.0334549999999999986277643415633 -1.09512100000000001109867753257 +-0.893893999999999966377117743832 -0.353088000000000012956746786585 -1.03743999999999991779020547256 +-0.893604999999999982662757247454 0.766488999999999975898390403017 0.783559000000000005492495347426 +-0.893386000000000013443468560581 -0.575247999999999981568521434383 -0.933247000000000048736126245785 +-0.893243000000000009208633855451 -1.06492100000000000648014975013 0.260884000000000004781952611665 +-0.892525000000000012789769243682 0.979114999999999957580598675122 -0.494705000000000005844214001627 +-0.89224700000000001232081103808 -0.903703000000000034042102470266 0.622264999999999957047691623302 +-0.892090000000000049595882956055 -0.13125600000000001155164852662 -1.0894710000000000782449660619 +-0.891475000000000017408297026122 -0.916754999999999986570742294134 -0.604013000000000022104984509497 +-0.891318999999999972416730997793 0.922736000000000000653699316899 0.595069999999999987849719218502 +-0.890992000000000006210143510543 -0.00105699999999999999684974216763 -1.09824000000000010501821634534 +-0.890788000000000024236612716777 1.0172099999999999475619461009 -0.414463000000000025835333872237 +-0.890739999999999976232345488825 0.93715499999999996028066107101 -0.572994000000000003325340003357 +-0.890548000000000006259881502046 -0.546170999999999962071228765126 0.953215999999999952230211874848 +-0.889095999999999997420729869191 -0.143323000000000005949019055151 1.09039700000000006063771706977 +-0.889013999999999970924591252697 0.225748000000000004217071136736 -1.07642600000000010496137292648 +-0.887488000000000054612314670521 -0.163629999999999997672972540386 -1.08884800000000003805666892731 +-0.886934000000000000163424829225 0.529784000000000032670754990249 0.965752000000000054846793773322 +-0.885846000000000022289725620794 0.0310260000000000014941381465405 -1.10195899999999991081267580739 +-0.885534999999999961062258080347 1.05129199999999989323384852469 -0.332585000000000019504398096615 +-0.885440000000000004831690603169 0.891495999999999955143437091465 -0.649023000000000016562751170568 +-0.885332000000000007844391802792 0.303138000000000018552270830696 1.06032700000000001949729266926 +-0.884851000000000054157567319635 1.0594310000000000115960574476 0.307645000000000001794120407794 +-0.884660000000000001918465386552 0.459832000000000018502532839193 -1.00296099999999999141664375202 +-0.884607000000000032180480502575 0.55040000000000000035527136788 -0.956309999999999993391952557431 +-0.884315999999999990954790973774 -0.743646999999999946950879348151 -0.815459999999999962660979235807 +-0.883222999999999980325071646803 -1.10437899999999999955946350383 -0.0162869999999999993944843623694 +-0.880959000000000047592152441212 -0.195676999999999989832133451273 -1.0888629999999999142801243579 +-0.880272999999999972153830185562 -0.494549000000000016363799204555 -0.990222999999999964337860092201 +-0.880178000000000015923262708384 0.683921000000000001151079231931 0.870367000000000001769251412043 +-0.878781000000000034333424991928 0.0626680000000000014814816040598 -1.1062620000000000786144482845 +-0.878421000000000007368328169832 -0.874410000000000020570212200255 -0.681015999999999954717111450009 +-0.876788000000000011802114840975 1.08122399999999996289545833861 -0.249394000000000004568789790937 +-0.876645000000000007567280135845 0.842319999999999957651652948698 -0.722489999999999965574204452423 +-0.876249999999999973354647408996 0.993827000000000015944578990457 0.494464000000000014622969501943 +-0.875823000000000018161472326028 -0.386120000000000018758328224067 -1.04107900000000008766676273808 +-0.874947999999999947995377169718 1.10512600000000005273648184811 0.114726999999999995649702100309 +-0.874121999999999954589213757572 -0.216825999999999990963672757971 1.09036500000000002863487225113 +-0.872967000000000048487436288269 0.372012999999999982581044832841 -1.04858699999999993579535839672 +-0.87263100000000004552447308015 0.642326999999999981305620622152 -0.90880799999999994920329982051 +-0.87253000000000002778222096822 -0.227269999999999999795718963469 -1.08951299999999995371524619259 +-0.870395000000000029771740628348 0.257684999999999997388755446082 -1.08444000000000007055689366098 +-0.869824000000000041588066324039 0.0937430000000000068771655037381 -1.11113400000000006606626357097 +-0.869785000000000030340174816956 -0.982256000000000017990942069446 0.52787200000000000787991893958 +-0.869126999999999982904341777612 0.375711999999999990418331208275 1.05045699999999997409361185419 +-0.867978000000000027291946480545 -1.06155700000000008387246452912 0.345992000000000021753265855295 +-0.86786700000000005505995659405 -1.11436800000000002519584541005 0.0706470000000000014628298572461 +-0.865752999999999994784616319521 -0.452708999999999972541075976551 1.02251000000000002998490344908 +-0.864580000000000015170087408478 1.1068890000000000117807985589 -0.16522000000000000574651437546 +-0.864389999999999991686649991607 0.789819000000000048800075092004 -0.793104999999999948911977298849 +-0.862234999999999973674391640088 -0.258286000000000015575096767861 -1.09079799999999993431742950634 +-0.86189999999999999946709294818 -0.828613999999999961687535687815 -0.755333000000000032159164220502 +-0.861797999999999952969176320039 -0.708879000000000036862957131234 0.868789000000000033452351999586 +-0.861760999999999999232613845379 -0.799055999999999988503418535402 0.78668700000000002514610741855 +-0.861600000000000032507330161025 -0.609789000000000025458746222284 -0.941170999999999979834797159128 +-0.859010999999999969034547575575 0.124129000000000003223199485092 -1.116554000000000046455284064 +-0.857773000000000007680966973567 -0.694298999999999999488409230253 -0.884404999999999996695976278716 +-0.856875999999999971024067235703 0.600191999999999947768003494275 0.95159499999999996866506535298 +-0.855829999999999979642950620473 -0.417939000000000004941824727211 -1.04540999999999995040411704395 +-0.854790000000000049773518639995 -0.289289999999999991597832149637 1.08887299999999997979216459498 +-0.853577000000000030155433705659 -0.52738399999999996392574530546 -0.996630000000000015880630144238 +-0.852577999999999947000617339654 1.05862499999999992716936958459 0.39041500000000001202593580274 +-0.852335999999999982534859555017 -0.88553800000000004732925162898 0.699532000000000042660985855036 +-0.852307000000000036799008285016 0.492460000000000008846257060213 -1.01540900000000000602540239925 +-0.85214500000000004131806008445 -0.616368000000000026972202249453 0.945482999999999962348340432072 +-0.850113000000000007538858426415 -0.288602000000000025181634555338 -1.09271099999999998786393007322 +-0.849875999999999964806818297802 0.288295999999999996710187133431 -1.09297599999999994757615695562 +-0.849647000000000041097791836364 1.11278100000000002012257027673 0.199547000000000002151168132514 +-0.84908600000000000740385530662 -1.11996000000000006657785434072 0.157301999999999997381650018724 +-0.848960000000000047926107527019 1.12818599999999991112531461113 -0.080393000000000006122213846993 +-0.84879599999999999493383029403 0.833334000000000019170443010808 0.764919000000000015582202195219 +-0.848724000000000033949731914618 0.734200999999999992517984992446 -0.860590999999999994862776020454 +-0.848582999999999976203923779394 0.446985999999999994436450378998 1.03928400000000009661960120866 +-0.848415000000000030233593406592 -1.06697599999999992448351804342 -0.37650400000000000533262323188 +-0.848239999999999993995913882827 -1.03426799999999996515498423832 -0.459106999999999987327470307719 +-0.847338000000000035605296488939 0.911673999999999984389376095351 0.671467000000000036052938412467 +-0.84699800000000002864197767849 0.58374199999999998311750459834 -0.970484000000000013308465440787 +-0.846384000000000025210056264768 0.153707000000000010286882456967 -1.1225009999999999710240672357 +-0.845731000000000010530243343965 0.403239999999999987334575735076 -1.05930900000000005611866527033 +-0.845242000000000048842707656149 -1.0954720000000000013073986338 -0.292414999999999980495601903385 +-0.844716000000000022396307031158 -0.997479000000000004533262654149 -0.539899000000000017784884676075 +-0.841978000000000004199307568342 -0.779548000000000018694379377848 -0.826667000000000040671466194908 +-0.840610999999999997100985638099 0.751792000000000015802470443305 0.853335999999999983423037974717 +-0.839288000000000034006575333478 -1.05400300000000002320632574992 0.429734999999999978115283738589 +-0.838732999999999950802020975971 -1.11964500000000000135003119794 -0.207171999999999995045740774913 +-0.837859000000000020413892798388 -0.956752999999999964586550049717 -0.618558999999999969965358559421 +-0.83746500000000001495692458775 0.083607000000000000761168905683 1.13651300000000010648193438101 +-0.836560999999999999054978161439 0.985519000000000033878677641042 0.573513000000000050526693939901 +-0.83621199999999995533528363012 -0.318097000000000018626877817951 -1.09524500000000002408739874227 +-0.835918000000000049887205477717 0.0118670000000000008116840533035 1.14065700000000003200284481863 +-0.834709999999999952002838199405 0.155217999999999994864552377294 1.13100299999999998057376160432 +-0.833992999999999984339638103847 -0.448419000000000012029488516418 -1.05041699999999993409005583089 +-0.83397699999999996833821569453 -0.967023999999999994692245763872 0.607739999999999946922457638721 +-0.83266300000000004200018111078 -0.522921999999999997932320638938 1.01647599999999993514165907982 +-0.831992999999999982563281264447 0.182357999999999992324362096952 -1.12895199999999995554844645085 +-0.831278999999999990144772255007 0.9774589999999999667679162485 -0.594601000000000046163961542334 +-0.831176000000000025913493573171 -0.360428000000000026137314534935 1.08592700000000008664358119859 +-0.830811999999999994948041148746 1.0209449999999999914024328973 -0.517128999999999949821472000622 +-0.830076000000000036038727557752 -0.0597169999999999992490451461435 1.14341899999999996317967543291 +-0.829990000000000005542233338929 1.14503099999999990998844623391 0.00475100000000000001476596622751 +-0.829709000000000029828584047209 0.675684999999999980069276261929 -0.924679999999999946425077723688 +-0.828914999999999957402962991182 -1.13939999999999996838084825868 -0.121110999999999996434851823324 +-0.828465000000000006963318810449 0.930115000000000025082158572332 -0.669725000000000014743761767022 +-0.827845999999999970775377278187 -0.642212000000000005073275133327 -0.949860000000000037623237858497 +-0.827695999999999987295495884609 -0.912251000000000034084735034412 -0.694778000000000006686207143503 +-0.827663999999999955292651065974 0.226418000000000008142819751811 1.12414700000000000734701188776 +-0.827536000000000049325876716466 0.3174580000000000179483095053 -1.10200000000000009059419880941 +-0.827065999999999967862152061571 1.0604020000000000667483845973 -0.437616999999999978232523289989 +-0.826953000000000049141135605169 -1.12113200000000001743671873555 0.243335999999999996745714270219 +-0.824999000000000037857716961298 -0.558439000000000018708590232563 -1.00375400000000003508660029183 +-0.824957999999999969098496421793 -0.0702649999999999941291406457822 -1.14651999999999998358646280394 +-0.824366999999999960913044105837 -0.0976670000000000038120617773529 -1.14493700000000009353584573546 +-0.823906000000000027227997634327 -0.04291199999999999875610612321 -1.14862400000000008937206530391 +-0.823782000000000014239276424632 0.5166800000000000281374923361 1.02685200000000009801226497075 +-0.822618999999999989114485288155 0.668397000000000018893331343861 0.936239000000000043399950300227 +-0.822381999999999946382445159543 0.879099999999999992539301274519 -0.742206999999999950112794522283 +-0.822135999999999977916331772576 -0.125010000000000010000889005823 -1.14388200000000006539835339936 +-0.821213999999999999523936367041 -0.0157160000000000008024692021991 -1.15124300000000001631406121305 +-0.820992999999999972793318647746 1.11604400000000003601030584832 0.283579000000000025494273359072 +-0.820587999999999984090948146331 -0.346656999999999992922994351829 -1.0983909999999998952091573301 +-0.820056000000000007155165349104 1.09567400000000003679190285766 -0.356377999999999972580155827018 +-0.819961000000000050924597871926 -0.130864000000000008094858117147 1.14478699999999999903366187937 +-0.818732000000000015305090528273 -0.727404999999999968274266848312 -0.894739999999999979785059167625 +-0.818271999999999999353406110458 -0.152184999999999986952659014605 -1.14335900000000001419664386049 +-0.818022999999999944620299174858 0.522854000000000040948577861855 -1.02832900000000004858691227128 +-0.816941000000000028258284601179 1.0536399999999999099742353792 0.471644999999999980921927544841 +-0.816895000000000037765346405649 0.0112160000000000002751132655021 -1.15436399999999994570032413321 +-0.816644000000000036543212900142 0.432574999999999987299048598288 -1.0705000000000000071054273576 +-0.816355000000000052828852403763 0.29692600000000002324895831407 1.11597499999999993924859609251 +-0.815895000000000036877167985949 0.209971999999999991981525226947 -1.13588099999999991851495906303 +-0.815825000000000022382096176443 -1.15465799999999996217070474813 -0.0345729999999999995652366635568 +-0.814266000000000045311310259422 -0.864148999999999944954254260665 -0.76825600000000004996536517865 +-0.81411299999999997556443531721 -0.775437000000000042909675812552 0.857855999999999951910467643756 +-0.813053000000000025693225325085 0.824616000000000015646151041437 -0.811759000000000008334666290466 +-0.812791999999999958959051582497 -0.179086999999999996191490936326 -1.14337099999999991517540820496 +-0.810964000000000018175683180743 0.0377769999999999980810905242379 -1.15797700000000003406341875234 +-0.810400000000000009237055564881 -0.477439000000000002277289468111 -1.05607999999999990770049862476 +-0.809810000000000029807267765136 1.12662299999999993005417309178 -0.273731999999999975337061641767 +-0.809657999999999988816057339136 -0.683985999999999982890130922897 0.936278999999999972381203861005 +-0.809060000000000001385558334732 -0.863878000000000034752645206027 0.774038000000000003808509063674 +-0.807744000000000017536194718559 1.15735600000000005138645065017 0.0898759999999999975583975242444 +-0.807418999999999997818633801216 0.614503000000000021429968910525 -0.985119999999999995665689311863 +-0.807285999999999948073536870652 -1.04228999999999993875121617748 0.511781999999999959172214403225 +-0.805717000000000016513013179065 -0.205608000000000012974510354979 -1.14391700000000007264588930411 +-0.805614000000000052281734497228 -0.20129299999999999970512476466 1.14475600000000010680878403946 +-0.803464999999999984758858317946 0.345057000000000002604139126561 -1.11147599999999990849630648881 +-0.803444999999999964757080306299 0.0638620000000000020978774273317 -1.16206600000000004335731773608 +-0.803374000000000032528646443097 -0.429958999999999980090592544002 1.08153900000000002812328148138 +-0.803301999999999960522245601169 -0.374167000000000027348789899406 -1.10213600000000000456168436358 +-0.801556999999999963968377869605 -1.11787900000000006706102340104 0.328409999999999979714004894049 +-0.800826999999999955548446450848 0.366464000000000011958434242842 1.10651699999999997281463492982 +-0.800514999999999976587616856705 0.766877000000000030865976441419 -0.878107999999999999651834059478 +-0.80001299999999997414334984569 0.897015000000000006785683126509 0.745213000000000014289014416136 +-0.799514999999999975699438437005 -1.16535900000000003373656909389 0.0521020000000000024775737017535 +-0.798154000000000030112801141513 0.236437000000000008270717444248 -1.14326100000000008272138529719 +-0.797622999999999970910380397981 -0.812636000000000024989788016683 -0.838701000000000029821478619851 +-0.797073999999999949217510675226 -0.231642999999999987803533940678 -1.14499499999999998500754827546 +-0.797004000000000045744741328235 0.816842999999999985760723575368 0.835195000000000020712320747407 +-0.796367999999999964799712870445 1.1531240000000000378577169613 -0.190006000000000008220979452744 +-0.795471000000000039165115595097 -0.590906000000000042327030769229 1.00898799999999999599253897031 +-0.794877999999999973468334246718 -0.947975000000000012079226507922 0.685208999999999956997953631799 +-0.794820999999999999729993760411 0.584519000000000010786038728838 1.01321200000000000152056145453 +-0.794650999999999996248334355187 -0.587590999999999974434672367352 -1.0115670000000001049755837812 +-0.794367999999999963023356031044 0.0893700000000000049915627187147 -1.16661600000000009735856565385 +-0.793571000000000026375346351415 0.973322000000000020492052499321 0.650299999999999989164223279658 +-0.792255000000000042525982735242 -0.67239099999999996093436038791 -0.95928100000000005032063654653 +-0.789098999999999994869881447812 1.1149020000000000596429572397 0.36649199999999998444977222789 +-0.787089999999999956337148887542 -0.27072600000000002218314421043 1.14332699999999998219379904185 +-0.787048999999999998600230810553 -1.07419899999999990392041127052 -0.476078999999999974424014226315 +-0.786899000000000015120349416975 -0.257091000000000013958612044007 -1.14660099999999998132693690422 +-0.786084000000000004959588295605 -1.03574000000000010501821634534 -0.55615999999999998770761067135 +-0.785819000000000045247361413203 0.459901999999999977486453417441 -1.08211699999999999555200247414 +-0.785142000000000006565414878423 -0.504885999999999945941908663372 -1.06237599999999998701127879031 +-0.784905999999999992589039266022 -1.10841900000000004311573320592 -0.394118000000000023863577780503 +-0.784818000000000015603518477292 0.706112999999999990663468452112 -0.94099200000000005061906449555 +-0.784422999999999981390885750443 -0.400519000000000013894663197789 -1.10646500000000003183231456205 +-0.784298999999999968402164540748 0.734129000000000031533886613033 0.919744000000000005989875262458 +-0.783768000000000020222046259732 0.1141979999999999939586103892 -1.17160799999999998277644408518 +-0.782309999999999949871209992125 1.16511399999999998300381776062 0.174645999999999995688781950776 +-0.782017999999999990912158409628 -0.993192999999999992510879565089 -0.634047000000000027242208489042 +-0.781942000000000025927704427886 0.550896000000000052310156206659 -1.04167199999999993131893916143 +-0.781143000000000031768365715834 0.434757000000000004558131649901 1.09581100000000009053735539055 +-0.780050000000000021138646388863 -1.17146100000000008556355624023 0.138572000000000000730082660994 +-0.779783000000000003915090474038 1.17507500000000009166001291305 -0.105529999999999998805400025503 +-0.779665999999999970171415952791 -1.13826399999999994250288182229 -0.310603000000000017966073073694 +-0.778839999999999976765252540645 0.261649999999999993693933220129 -1.15106299999999994732036157075 +-0.778079999999999993853805335675 1.0444990000000000662794263917 0.55101299999999997503152826539 +-0.77783100000000005014300086259 -0.757916999999999951853624224896 -0.905837000000000003296918293927 +-0.77775799999999994938093550445 0.370983999999999980445863911882 -1.12136700000000000265742983174 +-0.775229999999999974669151470152 -0.28185100000000001818634132178 -1.14872899999999988907006809313 +-0.774866000000000054726001508243 -0.946725999999999956457941152621 -0.709431000000000033800517940108 +-0.77299799999999996291677462068 -1.11021400000000003416289473535 0.4121870000000000255901966284 +-0.772097000000000033281821743003 -1.02646299999999990326671195362 0.591809999999999947206674733025 +-0.771688000000000040579095639259 0.138249000000000010768275160444 -1.17702400000000007018741143838 +-0.771491999999999955583973587636 -0.497609999999999996767030552292 1.07572500000000004227729277773 +-0.771349999999999980104803398717 -1.16361800000000004118305696466 -0.225861000000000006204814440025 +-0.76944500000000004558131649901 1.0137210000000000942321776165 -0.616704000000000029935165457573 +-0.769217999999999957339014144964 0.964860999999999968679276207695 -0.690903999999999962611241244304 +-0.766635999999999984133580710477 1.05858099999999999418776042148 -0.5400690000000000212665440813 +-0.766024000000000038212988329178 0.642561000000000048792969664646 -1.00016100000000007774758614687 +-0.765954000000000023717916519672 0.912192000000000002835065515683 -0.762378000000000000113686837722 +-0.764654999999999973603337366512 -0.896523999999999987586818406271 -0.782016000000000044423131839721 +-0.764464000000000032386537895945 -0.3388889999999999957935870043 1.14050399999999996225596987642 +-0.764260999999999968146369155875 0.0863749999999999934496841547116 1.18677900000000002833644430211 +-0.764024000000000036436631489778 -0.42560999999999998832933556514 -1.11136100000000004328626346251 +-0.76325200000000004152411747782 -0.748758000000000034646063795662 0.925637999999999960820673550188 +-0.762788000000000021572077457677 0.0180500000000000000721644966006 1.19072599999999995112887063442 +-0.762651999999999996582289440994 -0.61472400000000004816058662982 -1.02003700000000008252243333118 +-0.762591000000000018843593352358 -0.838809999999999944542139473924 0.845489999999999963797847613023 +-0.762114999999999986890486525226 -0.305823999999999984744647463231 -1.15137000000000000454747350886 +-0.76181399999999999117505922186 0.650233999999999978669507072482 0.998415999999999970171415952791 +-0.761637000000000008448353128188 0.154577999999999993185895164061 1.18152999999999996916244526801 +-0.760801999999999978285813995171 1.09926300000000010115286386281 -0.461303999999999991832311252438 +-0.760120000000000017870149804367 1.19238899999999992118659974949 -0.020638000000000000094813046303 +-0.759989000000000025636381906224 -1.18437900000000007061373707984 -0.140227999999999991542765087615 +-0.759666999999999981163512075 0.855924000000000018140156043955 -0.830841999999999969439556934958 +-0.758319999999999994066968156403 -0.530649999999999955058171963174 -1.06928099999999992597565778851 +-0.758175000000000043343106881366 0.161428999999999989167775993337 -1.18283999999999989150012424943 +-0.758028000000000035107916573907 0.285511999999999988020249475085 -1.15925600000000006417621989385 +-0.757506000000000012661871551245 -1.17294000000000009364953257318 0.224493999999999999106492509782 +-0.757377999999999995672794739221 0.501537000000000010579981335468 1.08390000000000008562039965909 +-0.757224000000000008192557743314 -0.0501279999999999989479526618652 1.19335600000000008336087375937 +-0.754970000000000029949376312288 -0.700205999999999995075938841183 -0.969396999999999953168128286052 +-0.754927000000000014701129202876 0.222389000000000003343103571751 1.17500200000000010192025001743 +-0.754322000000000048025583510025 -0.65639300000000000423483470513 1.00007299999999998973976289562 +-0.754090000000000038049563499953 1.10935999999999990173193964438 0.447958999999999996077804098604 +-0.753789000000000042334136196587 1.16827400000000003466027465038 0.258726999999999984769516458982 +-0.753380000000000049631410092843 0.485113999999999989665155908369 -1.0941129999999998911874854457 +-0.752642000000000033210767469427 -0.925185999999999952869700337033 0.759974999999999956123986066814 +-0.751964999999999994528820934647 1.13560700000000003306865892228 -0.38071800000000000085975671027 +-0.751426999999999956081353502668 -0.842782000000000031114666398935 -0.8515139999999999931290517452 +-0.751207999999999986862064815796 -0.0742130000000000011883827255588 -1.1959010000000001028297447192 +-0.750732999999999983664622504875 -0.096265000000000003343991750171 -1.19462700000000010547296369623 +-0.750515000000000043200998334214 0.395135999999999987242205179427 -1.13163400000000002876276994357 +-0.750383000000000022211565919861 0.796278000000000041325165511807 -0.896028999999999964387598083704 +-0.750361999999999973454123392003 -0.0522000000000000033417713041217 -1.19759499999999996511235167418 +-0.74953000000000002955857780762 0.878816000000000041580960896681 0.816019000000000049865889195644 +-0.748936999999999963861796459241 -0.118270000000000000128785870857 -1.1937780000000000057980287238 +-0.748195999999999972196462749707 -0.0303129999999999996673771818223 -1.19970200000000004614264526026 +-0.747604000000000046277648380055 -0.328917000000000014914292023605 -1.15451299999999990042454101058 +-0.747591000000000005520917056856 -0.117888999999999993795185559975 1.19465899999999991543120358983 +-0.747449000000000030041746867937 0.957282999999999995033306277037 0.724520000000000052864379540551 +-0.745828000000000046476600346068 -0.140139999999999986801668683256 -1.19335700000000000109423581307 +-0.745627999999999957481122692116 -1.20046600000000003305444806756 -0.0540419999999999997597477374711 +-0.74471900000000001984545860978 -0.00863900000000000084510176634467 -1.20221399999999989383070442273 +-0.744206999999999951889151361684 0.576473000000000013187673175707 -1.05538400000000009981704351958 +-0.744156000000000039662495510129 0.289542000000000021575630171355 1.16721800000000008878942026058 +-0.743283000000000027007729386241 0.183645000000000002682298827494 -1.18903500000000006409095476556 +-0.742186000000000012377654456941 -0.449340000000000017177370637 -1.1168050000000000476774175695 +-0.742067000000000032144953365787 0.797128999999999976466824591625 0.902175999999999977951858909364 +-0.741418000000000021465496047313 -0.161789999999999989377386100387 -1.19336700000000006660627605015 +-0.7413880000000000469739802611 -1.09816800000000003301181550341 0.494337999999999999634070491084 +-0.740160000000000040110137433658 1.16746900000000009001155376609 -0.298628999999999977799092221176 +-0.73994599999999999262456640281 0.012737000000000000057842619583 -1.20512100000000010879830369959 +-0.738137000000000043087311496492 0.733488999999999946588502552913 -0.957678000000000029245939003886 +-0.737824000000000035370817386138 -0.405513000000000012335021892795 1.13629899999999994797406088765 +-0.73745799999999994689403592929 1.20499599999999995603161551117 0.0643360000000000042952308376698 +-0.736148000000000024556356947869 1.03123399999999998399857759068 0.628206000000000042149395085289 +-0.735801999999999956081353502668 0.307927999999999979507947500679 -1.16780799999999995719690559781 +-0.735723000000000015852208434808 -0.183132999999999990237142810656 -1.19380599999999992277821547759 +-0.73565599999999997660182771142 -0.56311299999999997467625689751 1.06851000000000007084111075528 +-0.735233000000000025409008230781 -0.785715000000000052260418215155 -0.917652000000000023227642031998 +-0.733925999999999967293717872963 -0.184965999999999991532106946579 1.19463000000000008071765478235 +-0.733894999999999964046537570539 0.0337300000000000030353497493252 -1.20841200000000004166622602497 +-0.733862000000000014310330698208 -1.00658500000000006302514066192 0.66950200000000004152411747782 +-0.731972999999999984765963745303 -1.16978899999999996772714894178 0.309531000000000000582645043323 +-0.731755999999999962035701628338 -0.351038000000000016687096149326 -1.15814700000000003754507815756 +-0.73003899999999999348432311308 -0.554630999999999985128340540541 -1.07676700000000002965805379063 +-0.729628999999999972025932493125 0.566537999999999986044940669672 1.07082999999999994855670593097 +-0.729366999999999987558396696841 0.35576999999999997514876781679 1.15820999999999996177280081611 +-0.729129000000000027092994514533 -0.639731999999999967343455864466 -1.02913199999999993572430412314 +-0.728767999999999971372233176226 -0.204085999999999989640286912618 -1.19467400000000001369926394545 +-0.72832500000000000017763568394 -1.21181500000000008654410521558 0.0323579999999999978754772200773 +-0.727069999999999994066968156403 0.204809999999999992059684927881 -1.1955849999999998978239545977 +-0.726589999999999958113505726942 0.0542580000000000006732392421327 -1.21207400000000009576694992575 +-0.725435000000000052011728257639 1.1947229999999999794368932271 -0.215361999999999997879029933756 +-0.725346999999999964003905006393 -1.07011499999999992738253240532 -0.573346000000000022289725620794 +-0.724893000000000009563905223331 0.713567999999999980076381689287 0.982523000000000035214497984271 +-0.724171000000000009144685009232 -1.02593200000000006610889613512 -0.650414000000000047663206714788 +-0.723659999999999969944042277348 -1.11007499999999992290611317003 -0.494014000000000008672174089952 +-0.722978000000000009528378086543 0.667804999999999981952214511693 -1.01554799999999989523757903953 +-0.722292000000000045112358293409 1.16682200000000002582112301752 0.341787000000000007471356866517 +-0.721844000000000041161740682583 0.417418000000000011251444220761 -1.1422360000000000290754087473 +-0.720578999999999969539032917965 -0.224565999999999987846166504823 -1.19596600000000008456879641017 +-0.720137999999999944833461995586 -0.977700000000000013500311979442 -0.724916000000000004810374321096 +-0.719451999999999980417442202452 0.508109999999999950581752727885 -1.10644100000000000783018094808 +-0.719117000000000006210143510543 -1.1456539999999999501767433685 -0.41273300000000001652722403378 +-0.718995999999999968466113386967 -0.471615999999999979674925043582 -1.12277500000000007851497230149 +-0.718060000000000031583624604536 0.0742389999999999994351185250707 -1.21609100000000003305444806756 +-0.716284000000000031782576570549 -0.251093999999999983874232611925 1.19326799999999999535305050813 +-0.71613700000000002354738626309 -0.725547000000000052999382660346 -0.980167000000000010473399925104 +-0.716106000000000020300205960666 1.09944099999999989059062954766 0.527657000000000042660985855036 +-0.714632000000000044970249746257 -0.372101000000000015077716852829 -1.16225700000000009559641966916 +-0.71326199999999995160493426738 -0.925610000000000043840486796398 -0.796556999999999959527485771105 +-0.713112999999999996880717390013 -0.810429999999999983728571351094 0.913603999999999971670661125245 +-0.712247999999999992226662470785 0.328809999999999991171506508181 -1.17668499999999998095745468163 +-0.711884999999999990016874562571 1.2128479999999999261461880451 0.149055999999999994054533658527 +-0.711735000000000006536993168993 -1.17671100000000006247091732803 -0.329824000000000006060929536034 +-0.711188999999999960088814532355 -0.244491999999999987114307486991 -1.19767899999999993809751686058 +-0.710619000000000000660804744257 0.420812999999999992617460975453 1.14801400000000008994049949251 +-0.709600000000000008526512829121 0.224840000000000012070344723725 -1.20246199999999991980814684212 +-0.709378999999999981795895109826 -0.719123999999999985455190198991 0.989767999999999981142195792927 +-0.708338000000000023170798613137 0.0935949999999999976418862956962 -1.22044899999999989503862707352 +-0.708147999999999999687361196266 -1.21838200000000007605649443576 0.118629999999999999338307077323 +-0.7079309999999999769570990793 0.995596999999999954233942389692 -0.712474999999999969446662362316 +-0.707845999999999975216269376688 1.21726299999999998391331246239 -0.131243999999999999550581719632 +-0.707583999999999990748733580403 0.941466000000000025060842290259 -0.782922000000000006814104835939 +-0.707435999999999953757878756733 -0.898745000000000016093792964966 0.831740999999999952585483242729 +-0.707274999999999987032595072378 -0.470333999999999974317432815951 1.13072900000000009512746146356 +-0.706852000000000035839775591739 -1.08178799999999997183408595447 0.574539000000000021906032543484 +-0.705482999999999971230124629074 1.04579899999999992310506513604 -0.639216000000000006409095476556 +-0.704965999999999981540099724953 0.599485999999999963350205689494 -1.06941099999999988945376117044 +-0.704444999999999987849719218502 0.883619000000000043293368889863 -0.85027900000000000702016222931 +-0.703570999999999946439288578404 -0.869866999999999945814010970935 -0.865053999999999989611865203187 +-0.703551000000000037459813029272 -1.16202200000000011037570857297 0.393345999999999973439912537287 +-0.701546000000000002927436071332 -1.2031240000000000822666379463 -0.245611999999999996990851514056 +-0.700633999999999979024778440362 -0.263784999999999991704413560001 -1.1998040000000000926405618884 +-0.70041100000000000580513415116 -0.576733000000000051166182402085 -1.0848050000000000192557081391 +-0.700251999999999985568877036712 1.09187400000000001121236437029 -0.563435000000000019149126728735 +-0.698525999999999980261122800584 0.822285000000000043662851112458 -0.914281000000000010352607660025 +-0.698377000000000025536905923218 0.937467000000000050263793127669 0.795880999999999949601203752536 +-0.698003000000000040081715724227 0.629506000000000009997336292145 1.05665300000000006441780442401 +-0.697463000000000055145221722341 0.112249000000000001553424056056 -1.22513099999999997002930740564 +-0.69630099999999994775379263956 -0.392019999999999979589659915291 -1.16682700000000005857714313606 +-0.696089999999999986535215157346 0.857148000000000021003643269069 0.883603000000000027291946480545 +-0.696008999999999988794741057063 -0.626210000000000044373393848218 1.05991999999999997328359313542 +-0.694734999999999991437960034091 -0.316012999999999988354204560892 1.19057999999999997164934484317 +-0.694544999999999967954522617219 -0.49234899999999998110311594246 -1.12924800000000002953015609819 +-0.694215000000000026503244043852 -0.662515999999999993796961916814 -1.03881500000000004391154106997 +-0.69272999999999995690558307615 -0.982735000000000025188739982696 0.744550999999999962852825774462 +-0.692257000000000011219469797652 1.13363900000000006329514690151 -0.485428999999999999381827819889 +-0.691857999999999973006481468474 0.437742999999999993221422300849 -1.15313200000000004585842816596 +-0.691309999999999980069276261929 1.01390000000000002344791028008 0.702921000000000018026469206234 +-0.691104000000000051606718898256 -0.810690000000000021707080577471 -0.930138000000000020328627670096 +-0.690941999999999945103468235175 0.243657000000000012462919585232 -1.20964099999999996626343090611 +-0.689849000000000045496051370719 0.757705999999999990635046742682 -0.974674000000000040344616536458 +-0.688956000000000012839507235185 -0.282370000000000009876544027065 -1.20233400000000001384137249261 +-0.688586999999999949118034692219 -1.22479000000000004533262654149 -0.160430999999999990279775374802 +-0.688041000000000013692158518097 0.0888020000000000059303673083377 1.2323610000000000397335497837 +-0.687985999999999986442844601697 0.484414000000000011247891507082 1.13667000000000006920686246303 +-0.687945999999999946439288578404 1.16076599999999996448707406671 0.423499000000000014320988839245 +-0.687463999999999963996799579036 1.23499899999999995792165918829 -0.046608999999999997654320793572 +-0.687459000000000042263081923011 0.348075000000000023270274596143 -1.18585099999999998843236426183 +-0.686648000000000036102676403971 0.0241609999999999984499066130184 1.23609499999999994379606960138 +-0.685559000000000029473312679329 0.153327999999999992075672139435 1.22739500000000001378452907375 +-0.685478000000000031732838579046 0.130127999999999993674393294896 -1.23011599999999998722444161103 +-0.685176000000000007261746759468 -1.22014000000000000234479102801 0.204434000000000004604316927725 +-0.684201999999999976864728523651 0.774268999999999985028864557535 0.965596000000000009855227744993 +-0.684172000000000002373212737439 0.528800999999999965517361033562 -1.11905300000000007543121682829 +-0.683502999999999971691977407318 1.21591399999999993930543951137 0.233188000000000006384226480805 +-0.681529999999999969162445268012 1.1709309999999999440944975504 -0.405507999999999979579001774255 +-0.681382999999999960927254960552 -0.0403400000000000008570921750106 1.2385829999999999895266000749 +-0.679209999999999980424547629809 0.217483000000000009643841281104 1.22121799999999991470644999936 +-0.678451000000000026268764941051 0.690135999999999971699082834675 -1.03122099999999994324184626748 +-0.676834999999999964437336075207 -0.410719000000000000749622586227 -1.17183799999999993524113506282 +-0.67620199999999996975930116605 -0.300173000000000023135271476349 -1.20525799999999994049915130745 +-0.675908999999999982044585067342 -0.748314999999999952429163840861 -0.991550000000000042454928461666 +-0.675294999999999978612663653621 1.08518200000000009097789188672 0.605272999999999949949369693059 +-0.674494000000000037964298371662 -0.0778670000000000056550319982307 -1.24056199999999994254551438644 +-0.674135999999999957488228119473 -0.0944829999999999975424103126898 -1.23960200000000009268319445255 +-0.673856000000000010530243343965 -0.0612810000000000021369572777985 -1.24183799999999999741362444183 +-0.672938999999999953871565594454 -0.5330979999999999607851464134 1.12381500000000000838440428197 +-0.672911000000000036891378840664 -1.24162100000000008570566478738 -0.0746170000000000027684521342053 +-0.67278300000000001990230202864 -0.111062999999999995059951629628 -1.23896199999999989671550792991 +-0.672429999999999972182251894992 0.147160999999999986265208917757 -1.23538700000000001288924522669 +-0.672352999999999978442133397039 -1.14966900000000005199751740292 0.475609000000000003982592033935 +-0.672269000000000005456968210638 -0.104447999999999999176658604938 1.23981600000000002914646302088 +-0.672224000000000043719694531319 -0.0447900000000000034217073618947 -1.24342599999999992022026162886 +-0.67117000000000004433786671143 0.261185999999999973741893199985 -1.21709200000000006269829100347 +-0.670440000000000035917935292673 -0.127541999999999988713028642451 -1.23864599999999991375432273344 +-0.669605000000000005755396159657 -0.0284590000000000016566747973457 -1.24531900000000006478728664661 +-0.669553999999999982506437845586 -0.596870000000000011652900866466 -1.09336400000000000254374299402 +-0.669526999999999983259613145492 -1.06113799999999991463539572578 0.652471000000000023177904040494 +-0.669362000000000012533973858808 -0.379466000000000025504931500109 1.18657499999999993534061104583 +-0.669019999999999948059326015937 0.28101500000000001477928890381 1.21385499999999990627941315324 +-0.668928999999999995829114141088 -0.511457999999999968210318002093 -1.1361969999999999014761442595 +-0.668112999999999956912688503508 1.20360200000000006070877134334 -0.32398700000000002496847173461 +-0.667116999999999960024865686137 -0.143854000000000009640288567425 -1.2386530000000000040216718844 +-0.666008000000000044416026412364 -0.0123529999999999993975929868384 -1.24750899999999997902477844036 +-0.664546999999999998820499058638 -1.05484200000000005736922048527 -0.667598000000000024733992631809 +-0.664375000000000048849813083507 0.619843000000000032834179819474 -1.08369699999999991035792845651 +-0.664368999999999987338128448755 1.24785999999999996923349954159 0.0382100000000000009081624341434 +-0.663727999999999984659382334939 -1.00505099999999991666754795006 -0.741172999999999970732744714041 +-0.662827000000000055024429457262 -0.159935999999999994836130667863 -1.2389840000000000852509174365 +-0.662742999999999971016961808346 -1.10046899999999991948129718367 -0.591388000000000024769519768597 +-0.662625000000000019539925233403 0.690190999999999998948396751075 1.04142399999999990534149674204 +-0.662421000000000037566394439636 -0.317122999999999988229859582134 -1.20856600000000002914646302088 +-0.661556999999999950645701574103 0.546321999999999974306774674915 1.12422099999999991482013683708 +-0.661533999999999955399232476339 0.365646999999999999797495320308 -1.19527199999999989010746048734 +-0.661448999999999953658402773726 0.0034640000000000000651700915455 -1.24998900000000001675459770922 +-0.660819999999999962980723466899 -0.778851999999999988766319347633 0.978113000000000010203393685515 +-0.660676999999999958745888761769 0.456029000000000017678303265711 -1.16427799999999992408561411139 +-0.660290000000000043556269702094 -0.951293999999999972949638049613 -0.81182299999999996131805346522 +-0.659498999999999946375339732185 -1.21708199999999999718625076639 0.289430000000000020587975768649 +-0.659437000000000050903281589854 -0.868757000000000001449507180951 0.900224000000000024179769297916 +-0.65934199999999998365041165016 -0.167908000000000001694644424788 1.23978799999999989012167134206 +-0.658371000000000039520386962977 0.163281000000000009464429240325 -1.24092200000000008053291367105 +-0.658324000000000020271784251236 -1.14175399999999993561061728542 -0.512843999999999966554753427772 +-0.658047000000000048558490561845 -0.682985999999999982001952503197 -1.04904899999999989823606938444 +-0.65758600000000000385114162782 -0.175723999999999991317167769012 -1.239638000000000017664092411 +-0.656309000000000031249669518729 -0.428124000000000004551026222543 -1.17727099999999995638688687905 +-0.655945000000000000284217094304 0.0189309999999999999109601134251 -1.25274799999999997268673723738 +-0.655028999999999972381203861005 0.343671999999999977504216985835 1.2053329999999999877502432355 +-0.654579000000000021941559680272 -1.25355299999999991733545812167 0.0114920000000000004786171459159 +-0.65424599999999999422328755827 -0.893782999999999994145127857337 -0.879268999999999967265296163532 +-0.652707000000000037154279652896 -0.6866520000000000401030320063 1.04999200000000003640820978035 +-0.652422999999999975173636812542 1.2141809999999999547526385868 0.316398999999999985810461566871 +-0.652059999999999972963848904328 1.23152200000000000557065504836 -0.241187000000000012489564937823 +-0.651415999999999995040411704395 -0.19115499999999999158895036544 -1.24061200000000004806111064681 +-0.65130600000000005156408633411 -1.17853300000000005276490355755 -0.432275999999999993583799096086 +-0.650884000000000018104628907167 1.15013000000000009670486633695 0.503538999999999958845364744775 +-0.650361999999999995658583884506 0.277357999999999993434585121577 -1.22478700000000007008793545538 +-0.649518000000000039761971493135 0.0339870000000000033191227544194 -1.25577500000000008562039965909 +-0.64886399999999999632649405612 -0.955007000000000050299320264457 0.816661999999999999033661879366 +-0.647676999999999947199569305667 0.547104000000000034731328923954 -1.13189800000000007074163477228 +-0.647668000000000021465496047313 -0.33315400000000000568789459976 -1.21224299999999995947064235224 +-0.647603000000000039726444356347 0.907591999999999954340523800056 -0.869993000000000016314061213052 +-0.647503000000000050739856760629 0.966805000000000025472957077 -0.803759000000000001229238932865 +-0.646548000000000011588952020247 0.913950999999999957879026624141 0.864099999999999979216624979017 +-0.64561999999999997168487197996 -0.832744000000000039740655211062 -0.943246000000000028862245926575 +-0.645147000000000025998758701462 0.844797000000000020136781131441 -0.932792999999999983273824000207 +-0.644846999999999948016693451791 1.02220200000000005502442945726 -0.734353000000000033509195418446 +-0.644340000000000023838708784751 -0.206167999999999990157206752883 -1.2419020000000000614193140791 +-0.643745000000000011652900866466 0.992564000000000001833200258261 0.774861000000000021969981389702 +-0.643355000000000010196288258157 0.178423999999999999266364625328 -1.24669900000000000162003743753 +-0.642650999999999972267517023283 -0.230471000000000009189093930217 1.23849999999999993427479694219 +-0.642249999999999987565502124198 -0.52886800000000000476774175695 -1.14359699999999997466204604279 +-0.642193000000000013827161637892 0.0485710000000000030606628342866 -1.25905899999999992822097283351 +-0.641718000000000010629719326971 -1.21065899999999992964205830503 -0.350001999999999979795717308662 +-0.640267999999999948279594264022 -0.441201999999999983081977461552 1.18127000000000004220623850415 +-0.64014599999999999280220208675 0.778668000000000026794566565513 -0.991912000000000015909051853669 +-0.63990199999999997082511526969 0.832098000000000004305888978706 0.947701000000000015610623904649 +-0.639646000000000047869264108158 1.07356600000000002026467882388 -0.662048999999999998600230810553 +-0.638650999999999968714803344483 1.25579700000000005211120424065 0.122878000000000001112887559884 +-0.638499999999999956479257434694 -1.13277899999999998037480963831 0.555993999999999988226306868455 +-0.63758800000000004359890226624 -0.614960999999999979870324295916 -1.10240800000000005454126039695 +-0.637291999999999969617192618898 0.405208000000000012619238987099 1.19568600000000002658850917214 +-0.636387000000000035981884138891 -0.220705000000000012283507544453 -1.24350300000000002498268258933 +-0.634950000000000014388490399142 -0.593555999999999972516206980799 1.11558500000000004881428594672 +-0.634807000000000010153655694012 -0.444164999999999976498799014735 -1.18310500000000007325695605687 +-0.63457500000000000017763568394 0.381456999999999990524912618639 -1.20490900000000000780175923865 +-0.634445999999999954432894355705 -0.768418999999999963179675432912 -1.00349899999999991884180872148 +-0.63399899999999997923794126109 0.0626270000000000021112001036272 -1.26258599999999998608757323382 +-0.633664000000000005030642569182 -1.26053700000000001857358711277 0.0975550000000000028244073746464 +-0.633433000000000023810287075321 1.2545820000000000860040927364 -0.157434999999999991615595718031 +-0.632618000000000013649525953952 0.709466000000000041048053844861 -1.04711599999999993571009326843 +-0.632001999999999952706275507808 -0.348202000000000011503686891956 -1.21627599999999991275956290337 +-0.631920999999999954965801407525 1.12069200000000002148681232939 -0.58713300000000001599431698196 +-0.631820000000000048245851758111 1.06664099999999995027621935151 0.68050100000000002253841557831 +-0.631435999999999997278621322039 0.606292999999999970839326124405 1.11071900000000001185185283248 +-0.631221000000000032059688237496 -1.2092220000000000190709670278 0.373284999999999977937648054649 +-0.629596999999999962227548166993 -1.23800899999999991507593222195 -0.266347000000000000419220214098 +-0.629558999999999979735321176122 -1.03630099999999991666754795006 0.727828999999999948222750845161 +-0.628599000000000018850698779715 0.292107999999999978779641196525 -1.23269500000000009620748642192 +-0.628422000000000036123992686043 0.472204999999999985860199558374 -1.17563100000000009259792932426 +-0.627588999999999952450480122934 -0.234707999999999999962696506373 -1.24540899999999998826183400524 +-0.627442999999999972970954331686 0.192531000000000007688072400924 -1.25269600000000003170441686962 +-0.624967999999999967997155181365 0.0760979999999999989768184605055 -1.26634299999999999641886461177 +-0.623635999999999968146369155875 0.748353000000000045943693294248 1.02520499999999992191135333996 +-0.622592999999999952009943626763 0.637464999999999948343543110241 -1.09818799999999994199129105255 +-0.622263000000000010558665053395 -0.291889000000000009560352509652 1.23595699999999997231725501479 +-0.621701999999999976864728523651 1.16339600000000009671907719166 -0.509898999999999991139532085072 +-0.620767999999999986471266311128 -0.701061000000000045240255985846 -1.05979299999999998505018083961 +-0.618769000000000013450573987939 1.20765600000000006275513442233 0.398361999999999993882227045106 +-0.617978999999999945025308534241 -0.24812200000000000921218656913 -1.24761300000000008303402410093 +-0.615878999999999954262364099122 0.465380000000000015880630144238 1.18495299999999992301980000775 +-0.615484000000000031072033834789 -0.362209000000000003183231456205 -1.22064900000000009505640718999 +-0.615137000000000044863668335893 0.0889319999999999971640463058975 -1.27031399999999994321342455805 +-0.61499199999999998311750459834 -1.2604729999999999545678974755 -0.181639999999999995905497485182 +-0.614612999999999964906294280809 -0.544510000000000049524828682479 -1.15141699999999991277377375809 +-0.612411000000000038667735680065 -0.458778999999999992365218304258 -1.18931699999999995753796611098 +-0.612306000000000016925127965806 1.27269100000000001671196514508 -0.0730620000000000019424462038842 +-0.611253999999999964032326715824 1.13495400000000001838884600147 0.581590999999999969105601849151 +-0.610697000000000045361048250925 0.205546000000000006480149750132 -1.25888800000000000700595137459 +-0.610412999999999983380405410571 1.25877799999999995250732354179 0.207060999999999995058175272789 +-0.610248000000000012654766123887 -1.26254599999999994608401721052 0.183233000000000006979306022004 +-0.610110999999999958909313590993 0.562946999999999975194953094615 -1.14492600000000011029044344468 +-0.609106000000000036287417515268 0.0908790000000000014468426456915 1.27307900000000007167955118348 +-0.60902999999999996028066107101 1.20150800000000002043520908046 -0.430651999999999979262810256841 +-0.608836999999999961552532568021 -0.835341000000000000191846538655 0.965154999999999985149656822614 +-0.607797000000000031683100587543 0.0301769999999999989637178288149 1.27658599999999999852207110962 +-0.607594999999999996198596363683 -0.260894000000000014782841617489 -1.25010500000000002174260771426 +-0.607565000000000021707080577471 -0.500978999999999952130735891842 1.17468499999999997918109784223 +-0.606774999999999953281815123773 0.15147299999999999653432780633 1.26841599999999998793498434679 +-0.606688000000000005051958851254 0.395442999999999988958165886288 -1.2147239999999999149338236748 +-0.605968999999999979877429723274 0.305379999999999984794385454734 -1.24078400000000010905409908446 +-0.605948000000000042142289657932 -0.973473999999999950460960462806 -0.827752999999999961033836370916 +-0.605920000000000014139800441626 -0.744199999999999972644104673236 1.03876199999999996315125372348 +-0.605859999999999954134466406686 -1.02866999999999997328359313542 -0.758136999999999949828577427979 +-0.604639999999999955271334783902 -0.630936000000000052345683343447 -1.11190400000000000346744855051 +-0.604543000000000052551740736817 0.101078000000000001179500941362 -1.27448399999999995024779764208 +-0.603644999999999987139176482742 -0.914434999999999997832844655932 -0.894102999999999981106668656139 +-0.603380999999999945160311654035 -1.07980600000000004357048055681 -0.685529000000000054981796893117 +-0.602854000000000000980548975349 -0.0303940000000000008772982340588 1.27892300000000003201705567335 +-0.602437000000000000277111666946 -0.923510000000000053077542361279 0.885549999999999948308015973453 +-0.602129000000000025316637675132 -1.11141800000000001702460394881 0.634186000000000027476687591843 +-0.600813000000000041467274058959 0.211718999999999990535570759675 1.26261599999999996057908902003 +-0.600450999999999956990848204441 -1.19659000000000004249045559845 0.455666999999999988713028642451 +-0.598959000000000019170443010808 -0.851787999999999989597654348472 -0.956923999999999996823873971152 +-0.598520000000000051976201120851 -1.1266819999999999613038426105 -0.610214999999999951896256789041 +-0.598258999999999985242027378263 -0.351920999999999983831600047779 1.2321679999999999299831188182 +-0.598179000000000016257217794191 -0.375118999999999980232701091154 -1.22534399999999998875921392028 +-0.597960000000000047037929107319 -1.27796200000000004237676876073 -0.096216999999999996973087945662 +-0.597743000000000024307666990353 0.664089000000000040380143673246 1.09621600000000007923972589197 +-0.596480000000000010196288258157 -0.272973000000000021181278953009 -1.25287600000000010069811651192 +-0.595222000000000028840929644502 0.48620700000000000029487523534 -1.18714499999999989476862083393 +-0.595118000000000035853986446455 -0.0812149999999999955280216568099 -1.28032799999999991058530213195 +-0.594878000000000017877255231724 -0.092328999999999994408028669568 -1.27968499999999996141752944823 +-0.594690999999999969638508900971 -0.0701210000000000027720048478841 -1.28118099999999990323829024419 +-0.594295000000000017692514120426 -0.0905939999999999939772621360135 1.28008000000000010665246463759 +-0.593972999999999973219644289202 -0.103417999999999996041388783397 -1.27925800000000000622435436526 +-0.593953999999999981973530793766 1.23487799999999992017762906471 -0.349706999999999990080823408789 +-0.593637999999999999012345597293 0.967311000000000031917579690344 0.843743000000000020754953311553 +-0.593600000000000016520118606422 -0.0590909999999999976938447332486 -1.28224300000000002164313173125 +-0.593458000000000041040948417503 -0.651469999999999993534061104583 1.10607100000000002637534635141 +-0.593230000000000035065284009761 0.112488000000000004652278562389 -1.27883700000000000152056145453 +-0.59318300000000001581668129802 0.217416999999999999149125073927 -1.26525200000000004330047431722 +-0.592405999999999988148147167522 -0.114441000000000001057820497863 -1.27904599999999990522780990432 +-0.592168999999999945416107038909 0.886827000000000031931790545059 0.928910000000000013464784842654 +-0.591910000000000047215564791259 -0.785780000000000033999469906121 -1.01596899999999989994137195026 +-0.591848000000000040721204186411 -0.0481680000000000024806823262224 -1.28350900000000001099920154957 +-0.591297999999999990272669947444 -1.16911000000000009357847829961 -0.532491999999999965353936204338 +-0.591243999999999991779020547256 0.271378999999999981351805899976 1.25570099999999995610266978474 +-0.590875000000000039079850466806 0.523950000000000026822988274944 1.17317599999999999660360572307 +-0.590458999999999956109775212099 0.863724999999999965005770263815 -0.951492000000000004433786671143 +-0.590184000000000041907810555131 -0.125350999999999990208721101226 -1.27905099999999993798383002286 +-0.589442000000000021486812329385 -0.0373949999999999976862952166812 -1.28497499999999997832844655932 +-0.589365999999999945480055885128 0.927748000000000017095658222388 -0.889904999999999946069806355808 +-0.589222000000000023511859126302 0.796293000000000028570923404914 -1.00932299999999997019983766222 +-0.589211000000000040266456835525 -0.471909999999999996145305658501 -1.19588099999999997180566424504 +-0.588763000000000036315839224699 1.28577699999999994773247635749 0.0115989999999999999352739976644 +-0.587314000000000002721378677961 -0.136108000000000006757261417079 -1.27927199999999996471444774215 +-0.587107000000000045503156798077 -1.00737399999999999167243913689 0.800313999999999969858777149057 +-0.586393000000000053084647788637 -0.0268149999999999985589305140365 -1.28663299999999991563015555585 +-0.586126000000000035861091873812 -0.558321999999999984964915711316 -1.15962600000000004563105449051 +-0.585945999999999966867392231507 0.988110000000000043840486796398 -0.824806000000000039129588458309 +-0.585849999999999981881160238117 1.04388999999999998458122263401 0.753043000000000017912782368512 +-0.585659999999999958397722821246 0.725719000000000002970068635477 -1.06317200000000000592592641624 +-0.584674999999999944755302294652 -0.284310999999999980403231347736 -1.25591499999999989256593835307 +-0.584423000000000025799806735449 -1.25957300000000005368860911403 0.268187999999999981959319939051 +-0.583809000000000022367885321728 -0.146667999999999992821742011984 -1.2797089999999999854196630622 +-0.582710999999999978982145876216 -0.0164690000000000009994227667676 -1.28847800000000001219291334564 +-0.582671999999999967734254369134 1.19636499999999990073717981431 0.478752999999999984126475283119 +-0.582559000000000049013237912732 0.317120000000000012985168496016 -1.24902299999999999435829067806 +-0.582524999999999959499064061674 -0.716670000000000029238833576528 -1.07100400000000006706102340104 +-0.582154999999999978044229465013 -0.150187999999999988176568876952 1.28005400000000002513900199119 +-0.58174199999999998134114775894 -1.20692500000000002557953848736 -0.452668999999999988048671184515 +-0.581239999999999978896880747925 0.123117000000000004211742066218 -1.28335599999999994125232660735 +-0.581188999999999955647922433855 0.803764000000000033985259051406 1.00805900000000003835509687633 +-0.580215000000000036273206660553 1.04457200000000005601918928733 -0.756452000000000013280043731356 +-0.580156000000000005023537141824 -0.386880000000000001669775429036 -1.23034299999999996444444150256 +-0.579786000000000023568702545163 0.652279999999999970938802107412 -1.11282400000000003537081738614 +-0.579766000000000003566924533516 1.25679099999999999148769802559 0.290426999999999990720311870973 +-0.579682000000000030581759347115 -0.156988999999999989665155908369 -1.28036100000000008236611392931 +-0.57856700000000005346123543859 -1.29040799999999999947419837554 -0.0104139999999999996460608997495 +-0.578412000000000037225333926472 -0.00639900000000000017397194795876 -1.29050299999999995570476585272 +-0.578104999999999979998221988353 0.330218000000000011517897746671 1.24769799999999997375255134102 +-0.577983000000000024520829811081 0.407548999999999994603427921902 -1.224679000000000073100636655 +-0.576533999999999990926369264344 1.26337499999999991473487170879 -0.26738099999999997979927002234 +-0.574971000000000009855227744993 0.22809799999999999520206017678 -1.27176200000000005907452305109 +-0.574949000000000043364423163439 -0.1670310000000000127950983142 -1.2812239999999999184865373536 +-0.573513000000000050526693939901 0.00335499999999999990937804561497 -1.29269900000000004247624474374 +-0.572228999999999987657872679847 -0.294864999999999988222754154776 -1.25920900000000002272315668961 +-0.572192999999999951654672258883 1.09691200000000010916778592218 -0.68511299999999997201172163841 +-0.571624000000000020982326986996 0.57626800000000000245847786573 -1.15808500000000003105071755272 +-0.571384000000000003005595772265 -0.558559999999999945430317893624 1.16684699999999996755661868519 +-0.57084000000000001406874616805 -0.644731999999999971784347962966 -1.12181200000000003136335635645 +-0.570733000000000045837111883884 -0.410328999999999999293009977919 1.22714900000000004531841568678 +-0.569888999999999978918197029998 -1.23997599999999996711608218902 -0.371059000000000027696955839929 +-0.569629999999999969695352319832 -0.176753999999999994452437590553 -1.28229499999999996262545209902 +-0.569211000000000022502888441522 1.11529900000000004034461653646 0.657348999999999961119101499207 +-0.568622999999999989562127211684 0.132923000000000013365308859647 -1.28802100000000008250822247646 +-0.568031999999999981376674895728 0.0127569999999999992429389195081 -1.29505899999999996019539594272 +-0.567311000000000009713119197841 -1.17923399999999989340437878127 0.536250000000000004440892098501 +-0.566482000000000041062264699576 -0.208938000000000012601475418705 1.27884400000000009178791060549 +-0.565298999999999995935695551452 -0.483503999999999989345411677277 -1.20277199999999995227994986635 +-0.56374400000000002286526523676 -0.186120000000000007656097977815 -1.28357000000000009976020010072 +-0.563381000000000020655477328546 -1.08566999999999991288746059581 0.709874000000000004995115432394 +-0.562896999999999980701659296756 1.29378900000000007786127298459 0.0962149999999999949729101444973 +-0.562378000000000044522607822728 0.58068699999999995320365542284 1.16040199999999993352162164229 +-0.561992000000000047066350816749 0.0217670000000000016249224188414 -1.29757100000000002992806003022 +-0.561912999999999995814903286373 1.14492199999999999526778537984 -0.611070000000000002060573933704 +-0.561485000000000011866063687194 -0.397446999999999994734878328018 -1.23562599999999989108800946269 +-0.561448999999999975862863266229 0.388004000000000015546675058431 1.23863900000000004553157850751 +-0.561205999999999982641440965381 0.497979999999999978221865148953 -1.1987760000000000637498942524 +-0.560609000000000023966606477188 0.719484000000000012420287021087 1.08076799999999995094412952312 +-0.559190999999999993619326232874 -0.304591999999999973880449033459 -1.26274700000000006383515938069 +-0.558463999999999960444085900235 0.327282999999999990592414178536 -1.25737999999999994216182130913 +-0.557316999999999951320717173076 -0.195091999999999987647214538811 -1.28504400000000007509015631513 +-0.556903000000000036884273413307 -0.570249000000000005883293852094 -1.16819300000000003691980055009 +-0.55689200000000005363887112253 -1.29776000000000002465583293088 0.0754299999999999970512476465956 +-0.556838999999999972878583776037 1.28688599999999997436361809378 -0.183998999999999995891286630467 +-0.556293000000000037452707601915 -1.25162900000000010258816018904 0.352084999999999981312726049509 +-0.556131999999999959705121455045 0.237546000000000007146283564907 -1.27839299999999989054799698351 +-0.555833000000000021501023184101 -0.798628000000000004554578936222 1.02627599999999996605026808538 +-0.555787999999999948741447042266 -1.26813400000000009448797300138 -0.287984000000000017749357539287 +-0.555427000000000004042988166475 0.141867999999999994109600720549 -1.2928170000000001049755837812 +-0.555416000000000020797585875698 0.0303509999999999995068389324615 -1.30022799999999993936228293023 +-0.553633000000000041751491153263 -0.888367000000000017756462966645 0.950944000000000011496581464598 +-0.551968000000000014182433005772 -0.931744000000000016648016298859 -0.909496999999999999886313162278 +-0.551306999999999991501908880309 -0.867748999999999992560617556592 -0.97111899999999995447552691985 +-0.550451000000000023604229681951 -0.992060999999999970633268731035 -0.844284999999999952180473883345 +-0.550371999999999972352782151575 -0.203635000000000010444978215673 -1.28671099999999993812593857001 +-0.549416000000000015468515357497 1.18841400000000008141398666339 -0.534614999999999951363349737221 +-0.548628000000000004554578936222 -0.706612000000000017863044377009 1.09531099999999992355981248693 +-0.548574000000000006060929536034 0.41772799999999998821209601374 -1.23473499999999991594279435958 +-0.548470000000000013073986337986 -0.800328999999999957104535042163 -1.02890900000000007352696229646 +-0.548329999999999984083842718974 0.0384750000000000022537527399891 -1.30301700000000009183054316964 +-0.547336000000000044707348934026 -0.266614000000000017642776128923 1.27645600000000003504396772769 +-0.546831999999999984751752890588 1.24984300000000003727507191797 0.372647999999999979259257543163 +-0.546761999999999970256681081082 -1.04846400000000006258460416575 -0.775741000000000013869794202037 +-0.545610999999999957132956751593 -0.31345400000000001039524022417 -1.26651299999999999990052401699 +-0.544275999999999982037479639985 1.18035200000000006781419870094 0.557254000000000027092994514533 +-0.543467999999999951121765207063 -0.729751000000000038525627132913 -1.08263799999999998924238298059 +-0.542937000000000002941646926047 -0.211714000000000013290701872393 -1.28856400000000004268940756447 +-0.54233699999999995799981888922 -0.974470999999999976104447796388 0.869640999999999997349675595615 +-0.542240999999999973013586895831 -0.406777999999999972935427194898 -1.24117100000000002424371814413 +-0.541703999999999963321783980064 0.149914999999999992708055174262 -1.29772200000000004216360594 +-0.54134099999999996111199607185 0.444510000000000016218137943724 1.22856100000000001415401129634 +-0.541189999999999948876450162061 0.938240999999999991665333709534 0.909294999999999964401808938419 +-0.540914000000000005918820988882 -1.10072900000000006848210887256 -0.704135999999999984133580710477 +-0.540768000000000026439295197633 -0.493516000000000010228262681267 -1.20996400000000003949196525355 +-0.540762999999999993683275079093 0.0461070000000000021489476864645 -1.30592899999999989546495271497 +-0.539793999999999996042276961816 -0.466882000000000019213075574953 1.22091900000000008752465419093 +-0.539494000000000029082514174661 -1.29128799999999999137401118787 -0.203773000000000009679368417892 +-0.537761999999999962263075303781 0.738829999999999986748377978074 -1.07932500000000008988365607365 +-0.537568999999999963534946800792 1.01701899999999989532284416782 0.822613000000000038625103115919 +-0.537278999999999951064921788202 0.810510999999999981469045451377 -1.02684099999999989272225775494 +-0.536739999999999994884092302527 0.245723999999999997978505916763 -1.28511899999999990029664331814 +-0.536321999999999965424990477914 -0.656293000000000015248247109412 -1.13209500000000007347011887759 +-0.536123000000000016207479802688 0.664232000000000044614978378377 -1.12754899999999991244692409964 +-0.53545200000000003903721790266 0.856203999999999965098140819464 0.990052999999999960856200686976 +-0.535040999999999988823162766494 -0.219297999999999992937205206545 -1.2905960000000000764686092225 +-0.534945000000000003836930773105 1.30531799999999997830002484989 -0.0998919999999999946860285149342 +-0.534807999999999950091478240211 1.29669499999999993100630035769 0.180451000000000000289546164822 +-0.534749999999999947597473237693 1.22721600000000008456879641017 -0.456050000000000010924594562312 +-0.534676999999999957857710342068 0.878994000000000053063331506564 -0.970304000000000055337068260997 +-0.533776000000000028222757464391 0.335826999999999986634691140353 -1.26582100000000008499512205162 +-0.533017999999999991800336829328 -1.29999200000000003640820978035 0.160976000000000007972289495228 +-0.532931999999999961303842610505 -1.14864900000000003110756097158 -0.629751999999999978463449679111 +-0.532743999999999995331734226056 0.053217000000000000414779322 -1.30895099999999997564259501814 +-0.532367000000000034631852940947 0.587013000000000007005951374595 -1.17132400000000003181810370734 +-0.531932999999999989171328707016 -1.15722499999999994813038028951 0.614716999999999957893237478856 +-0.531868000000000007432277016051 -0.613717999999999985760723575368 1.15778599999999998182431681926 +-0.531542999999999987714716098708 -0.321415999999999979497289359642 -1.27049400000000001220712420036 +-0.530501000000000000333955085807 0.635368000000000043847592223756 1.14667999999999992155608197208 +-0.529962999999999961886487653828 0.944007999999999958262719701452 -0.909938000000000024591884084657 +-0.52776699999999998613731122532 0.0925979999999999997539745777431 1.30877299999999996416022440826 +-0.527509000000000005670131031366 0.157034000000000006913580818946 -1.30271800000000004260414243618 +-0.527059000000000055230486850633 -0.580245000000000010764722446766 -1.17708300000000010143708095711 +-0.526716999999999990755839007761 -0.226357000000000002648548047546 -1.29279999999999994919619439315 +-0.526548000000000016029844118748 0.0360740000000000018975931936893 1.31203899999999995529265106597 +-0.526510000000000033537617127877 0.507477999999999984659382334939 -1.21047700000000002518163455534 +-0.525966999999999962334129577357 -1.23874499999999998500754827546 0.434591999999999978321341131959 +-0.525595999999999952123630464484 0.149020000000000013562484468821 1.30443200000000003591082986532 +-0.524921999999999999708677478338 1.09124200000000004528999397735 0.730512000000000050192738854093 +-0.524795000000000011475265182526 -0.32298700000000002408029331491 1.27289800000000008495248948748 +-0.524303999999999992276400462288 0.0597760000000000027431390492438 -1.31207199999999990502885793831 +-0.523159000000000040664360767551 1.00529700000000010717826626205 -0.845980999999999982996712333261 +-0.522846999999999950681228710891 -1.19203700000000001324451659457 -0.552883000000000013329781722859 +-0.522499000000000046739501158299 -0.414835000000000009290346270063 -1.24695899999999992857624420139 +-0.522409000000000012242651337147 -1.0556389999999999940172301649 0.782761000000000040088821151585 +-0.521944999999999992290611317003 -0.0203270000000000013173906410202 1.31421499999999991104004948284 +-0.521070000000000033146818623209 -1.30934499999999998109956322878 -0.118757000000000001449507180951 +-0.520182999999999950979656659911 0.772258000000000000007105427358 1.06443799999999999528199623455 +-0.520044999999999979500842073321 0.205117999999999994775734535324 1.299029999999999906989955889 +-0.518576000000000036926905977452 0.425939000000000012047252084812 -1.24485099999999992981258856162 +-0.517994999999999983231191436062 -0.232862999999999986666665563462 -1.2951660000000000394493326894 +-0.517974000000000045496051370719 1.26117499999999993498533967795 -0.375686000000000019927171024392 +-0.51785999999999998699706793559 0.499510000000000009556799795973 1.2175009999999999443787146447 +-0.517043000000000030347280244314 -0.328446000000000015717205315013 -1.27467200000000002724220848904 +-0.516871999999999998109956322878 0.25260100000000001996269816118 -1.29191199999999994929567037616 +-0.515715999999999952230211874848 -0.501906999999999992034815932129 -1.21742599999999989712762271665 +-0.51547799999999999176480969254 0.0657579999999999970095032608697 -1.31527900000000008695622000232 +-0.51428899999999999614885837218 1.06261800000000006249933903746 -0.778684999999999960529351028526 +-0.513975999999999988432364261826 -0.0763839999999999935687000629514 1.31529300000000004544631337922 +-0.513392999999999988247623150528 -0.0842419999999999974393816160045 -1.31503999999999998671285084129 +-0.513272999999999979259257543163 -0.0898100000000000009414691248821 -1.31471800000000005326228347258 +-0.513179000000000051784354582196 -0.0786840000000000039381831129504 -1.31546800000000008168399290298 +-0.512897999999999965048402827961 0.163197000000000008723688438295 -1.30778499999999997527311279555 +-0.512820000000000053574922276312 -0.0953650000000000053201887340038 -1.31450399999999989475440997921 +-0.512631999999999976580511429347 -0.0731580000000000008064660050877 -1.31600000000000005861977570021 +-0.512035000000000017905676941155 -0.100887000000000004451550239537 -1.31439799999999995527844021126 +-0.51175499999999995992538970313 -0.0676859999999999961683982974137 -1.31663400000000008205347512558 +-0.511739000000000054946269756329 1.23796400000000006436096100515 0.453396999999999994468424802108 +-0.511133999999999977248421600962 0.26067200000000001480771061324 1.29259100000000004548894594336 +-0.510940999999999978520293097972 1.31859900000000007658229606022 -0.0153899999999999991667776200188 +-0.510920999999999958518515086325 -0.106353000000000003089084543717 -1.31440000000000001278976924368 +-0.510697999999999985298870797124 -1.23072000000000003616662525019 -0.473831000000000002181366198784 +-0.510549000000000030574653919757 -0.0622889999999999971480590943429 -1.31736800000000009447376214666 +-0.50948300000000001919175929288 -0.111741999999999994108712542129 -1.31451099999999998502175913018 +-0.509021999999999974484410358855 -0.0569879999999999969917396924757 -1.31819899999999989859134075232 +-0.508912000000000031008084988571 -0.238790000000000002255973186038 -1.29768499999999997740474100283 +-0.508595000000000019291235275887 0.342720000000000024620305794087 -1.27431300000000002903277618316 +-0.50772700000000003939248927054 -0.117032999999999998141930745987 -1.31472999999999995424104781705 +-0.507176999999999988943955031573 -0.0518049999999999968847141929018 -1.31912399999999996325072970649 +-0.50704099999999996395416701489 -1.29709199999999991170795965445 0.245886999999999994459543017911 +-0.50629900000000005455547125166 0.0711409999999999959063856636021 -1.31855999999999995431210209063 +-0.505659999999999998365751707752 -0.122203000000000006064482249712 -1.3150569999999999204476353043 +-0.505564000000000013379519714363 -0.521357999999999988105514603376 1.21350299999999999833732999832 +-0.505024000000000028443025712477 -0.0467600000000000029509727994537 -1.3201380000000000336513039656 +-0.504608999999999974228614973981 1.29448300000000005027800398238 0.263973999999999986432186460661 +-0.504296999999999995267785379838 -0.812010000000000009556799795973 -1.04226899999999988999377364962 +-0.503753000000000006330935775622 -0.740253000000000049851678340929 -1.09464999999999990087928836147 +-0.503731999999999957573493247764 1.15968200000000010163603292312 0.633556000000000008043343768804 +-0.503390000000000004121147867409 1.11574499999999998678390511486 -0.708315999999999945657691569068 +-0.503288999999999986378895755479 -0.127234000000000013752554650637 -1.31548899999999990839683050581 +-0.502850000000000019184653865523 -0.88056199999999995586819068194 -0.985774999999999956834528802574 +-0.502670999999999978946618739428 -0.131874999999999992228438827624 1.31526800000000010371081771154 +-0.502643999999999979699794039334 -0.849719000000000002081890215777 1.01258399999999992857624420139 +-0.502569000000000043471004573803 -0.0418730000000000004978240042419 -1.3212379999999999125037675185 +-0.502337999999999951228346617427 -0.421588000000000018285817304786 -1.25296500000000010643930181686 +-0.502167999999999947746687212202 -0.334517000000000008785860927674 -1.27903300000000008651568350615 +-0.501221000000000027618796138995 -0.665575000000000027711166694644 -1.14271100000000003227285105822 +-0.500635999999999969922725995275 -0.758762999999999965261565648689 1.0833479999999999776605363877 +-0.500623999999999957921659188287 -0.132106000000000001204369937113 -1.31602599999999991808863342158 +-0.500589999999999979429787799745 -1.32223399999999990939159033587 -0.0332739999999999980229148377475 +-0.499823000000000017273293906328 -0.0371640000000000025881519150062 -1.32241999999999992887467215041 +-0.499502999999999974800601876268 -0.244115999999999999658939486835 -1.30034800000000005937295100011 +-0.49941999999999997505994997482 -0.945639000000000007339906460402 -0.925390000000000045865533593314 +-0.499153999999999986592058576207 1.29015699999999999825206487003 -0.293837999999999988087751034982 +-0.498946000000000000618172180111 -0.37783600000000000518340925737 1.26818499999999989569232639042 +-0.498900000000000010125233984581 0.315460999999999991416643752018 1.28513900000000003132072379231 +-0.497927999999999981728393549929 0.168377999999999999891642232797 -1.31290400000000007096900844772 +-0.497674999999999978506082243257 -0.136798000000000002929212428171 -1.31666400000000005654499091179 +-0.496804999999999996607158436746 0.0759029999999999982485121563514 -1.32190199999999991042898273008 +-0.496796999999999988606447232087 -0.0326489999999999974678033254349 -1.3236790000000000500079977428 +-0.496711000000000013621104244521 -0.588269999999999959605645472038 -1.18626100000000000989075488178 +-0.496607000000000020634161046473 0.258147999999999988585130950014 -1.29874599999999995603161551117 +-0.496533999999999975383246919591 -1.26454500000000003012701199623 -0.392909999999999981490361733449 +-0.495427999999999979507947500679 -0.937722999999999973219644289202 0.935536000000000034226843581564 +-0.495369999999999977013942498161 0.687775000000000025224267119484 1.13206600000000001671196514508 +-0.494454999999999977866593781073 -1.13064900000000001512034941697 0.690757999999999983131715453055 +-0.494454999999999977866593781073 -0.14129300000000000192557081391 -1.31740300000000010172129805142 +-0.494018000000000012672529692281 -1.0069840000000001012381289911 -0.861353000000000035285552257847 +-0.493564000000000002721378677961 -1.22097199999999994624033661239 0.515383999999999953267604269058 +-0.493503000000000024982682589325 -0.0283489999999999991997512438502 -1.32501000000000002110311925207 +-0.492495000000000016093792964966 0.595141999999999948833817597915 -1.18459099999999994956567661575 +-0.491775000000000017674750552032 0.673273000000000010345502232667 -1.14230499999999990379251357808 +-0.491271000000000013230305739853 0.51466199999999995284838405496 -1.22220100000000009288214641856 +-0.491099999999999980992981818417 0.552790000000000003588240815589 1.20550500000000004874323167314 +-0.490976000000000023515411839981 -0.145572000000000006947331598894 -1.31823800000000002086153472192 +-0.490505000000000024318325131389 1.16446899999999997632471604447 -0.635152000000000049872994623001 +-0.490240999999999982339460302683 -0.508642999999999956273200041323 -1.22513099999999997002930740564 +-0.489953000000000027380764322515 -0.0242789999999999984992005153117 -1.32640699999999989167065450602 +-0.489804000000000017145396213891 -0.248818000000000011384670983716 -1.30314299999999994028598848672 +-0.489171000000000022467361304734 -0.666235000000000021636026303895 1.14753799999999994696509020287 +-0.48911399999999999321786958717 0.748747000000000051400661504886 -1.09551099999999990153298767837 +-0.488107999999999986329157763976 0.432151000000000007350564601438 -1.25498799999999999243982529151 +-0.488076999999999983081977461552 -0.186580999999999996852295680583 1.31414199999999992130028658721 +-0.487250999999999989675814049406 -0.149620000000000002993161274389 -1.3191660000000000607656147622 +-0.487165999999999987934984346793 0.98613499999999998379962562467 0.888935999999999948428808238532 +-0.487032000000000020456525362533 0.080023999999999997911892535285 -1.32529099999999999681676854379 +-0.486976999999999993207211446133 -0.339604999999999990212273814905 -1.28355799999999997673683083121 +-0.486665999999999987490895136943 -1.06435499999999994003019310185 -0.7939169999999999838280473341 +-0.486605000000000009752199048307 0.905467000000000021842083697265 0.971258999999999983465670538862 +-0.486161999999999983046450324764 -0.0204550000000000009592326932761 -1.32786599999999999077715528983 +-0.48492099999999999093702740538 1.32667500000000004867217739957 0.0691719999999999973772091266255 +-0.484522999999999981479703592413 0.821266000000000051528559197322 -1.04439400000000004453681867744 +-0.483389999999999986357579473406 0.369269000000000013894663197789 1.27670400000000006102141014708 +-0.483296000000000003371525281182 -0.153418999999999999817035245542 -1.32018499999999994187760421482 +-0.483018999999999976147080360533 0.347934000000000021035617692178 -1.28282300000000004658318175643 +-0.482659000000000004693134769695 0.172556999999999988171239806434 -1.31805299999999991911181496107 +-0.482144000000000017003287666739 -0.016893999999999999295230423968 -1.32938000000000000611066752754 +-0.481835999999999986531662443667 -0.427009000000000027430502314019 -1.2591650000000000897415475265 +-0.480410000000000003694822225953 -1.29338099999999989186960647203 -0.310437999999999991729282555752 +-0.479854999999999976001419099703 -0.252879000000000020431656366782 -1.30605900000000008098766102194 +-0.479376000000000024314772417711 -1.02144100000000004335731773608 0.852558999999999955754503844219 +-0.479125000000000023092638912203 -0.15695600000000001217337342041 -1.32128899999999993575272583257 +-0.479063000000000016598278307356 -1.28907400000000005313438578014 0.329828000000000010061285138363 +-0.478561000000000014154011296341 1.06287899999999990718890785502 0.800791999999999948300910546095 +-0.478364000000000011425527191022 1.31404699999999996506971911003 -0.210830999999999990635046742682 +-0.478134000000000003449684982115 -1.32990600000000003255706815253 0.0523419999999999996376232047623 +-0.478020000000000000461852778244 0.890544000000000002259525899717 -0.989155000000000006465938895417 +-0.477916000000000007474909580196 -0.0136080000000000003040900864448 -1.33094299999999998718180904689 +-0.477393999999999985028864557535 -1.11752500000000010160761121369 -0.723347999999999990983212683204 +-0.477019000000000026329161073591 0.0834899999999999947730700000648 -1.32871399999999995067412328353 +-0.476621999999999990116350545577 0.822201999999999988411047979753 1.04728899999999991443644375977 +-0.476024000000000002685851541173 0.26234400000000002162181544918 -1.30559399999999992125765402307 +-0.475683000000000022478019445771 1.20859699999999992137134086079 -0.559479999999999977333686729253 +-0.474756000000000011329603921695 -0.160214999999999996305177774047 -1.3224739999999999273683215506 +-0.474625999999999992340349308506 1.22119899999999992346033650392 0.532356999999999969119812703866 +-0.47349400000000002597388970571 -0.0106110000000000006398215290915 -1.33254999999999990123455972935 +-0.472418999999999977834619357964 1.28716300000000005709921424568 0.346457000000000014949819160393 +-0.471528999999999975933917539805 -0.343689999999999995505817196317 -1.28822999999999998621547092625 +-0.470248999999999972576603113339 -0.240285999999999999587885213259 1.3119179999999999175486209424 +-0.470204999999999984083842718974 -0.163184999999999996722621631307 -1.3237360000000000237463382291 +-0.46989300000000000512301312483 -0.430943000000000020488499785642 1.26233499999999998486543972831 +-0.469694000000000000394351218347 -0.256282000000000009798384326132 -1.30908599999999997187671851862 +-0.469629999999999991899812812335 0.956308000000000046902925987524 -0.930011999999999949828577427979 +-0.468895999999999979479525791248 -0.00791399999999999916033832647599 -1.33419400000000010209078027401 +-0.468177999999999983060661179479 -0.573541999999999996262545209902 1.2049309999999999742925638202 +-0.467150000000000009681144774731 0.1757189999999999863167232661 -1.32321299999999997254462869023 +-0.466805999999999998717470361953 0.0862860000000000015862866575844 -1.33215900000000009306688752986 +-0.466237999999999985778487143762 -1.16628500000000001612932010175 -0.649923999999999946197704048245 +-0.465980000000000005311306949807 -0.594292000000000042447823034308 -1.19569199999999997707789134438 +-0.465677000000000007595701845275 -0.672540000000000026680879727792 -1.15361800000000003230127276765 +-0.465490999999999988112620030734 -0.165853000000000000424549284617 -1.3250699999999999700861508245 +-0.464666999999999996706634419752 0.421883999999999981245224489612 1.26731900000000008432721188001 +-0.46444400000000002348699013055 -0.513697999999999987963406056224 -1.23304700000000000414956957684 +-0.464139999999999997015720509808 -0.0055279999999999999277244810969 -1.33586800000000005539391167986 +-0.46353600000000000358468810191 -0.74813399999999996570210214486 -1.10699100000000005827871518704 +-0.462390999999999996461497175915 -1.31711200000000006049560852261 -0.22674099999999999810462725236 +-0.46119999999999999884536805439 1.13443399999999994243182754872 0.707357000000000013528733688872 +-0.461166000000000020353496665848 0.604137999999999952827067772887 1.19262000000000001342925770587 +-0.461075000000000012612133559742 -0.431078000000000016722623286114 -1.26553599999999999425881469506 +-0.460631999999999985906384836198 -0.168208999999999997410071728154 -1.32647000000000003794298208959 +-0.459565000000000001278976924368 -0.82077599999999995006305653078 -1.05599500000000001698197138467 +-0.459386999999999989796606314485 1.01829700000000000770228325564 -0.86719900000000005313438578014 +-0.459361999999999992549959415555 -0.259014000000000021994850385454 -1.31221100000000001628563950362 +-0.459243000000000012317258324401 -0.00346299999999999993244292895156 -1.33756600000000003269917669968 +-0.459214999999999984314769108096 -1.19838099999999991851495906303 0.594141999999999947945639178215 +-0.458984000000000003094413614235 1.24795600000000006524203399749 -0.481601000000000001310951347477 +-0.457291000000000003034017481696 0.436336999999999974875208863523 -1.26510699999999998155431057967 +-0.45715000000000000079936057773 0.351447999999999982634335538023 -1.29131700000000004813216492039 +-0.457123000000000001552535877636 0.737702999999999997626787262561 1.11661600000000005294964466884 +-0.456986000000000003318234576 1.3295159999999999200781530817 0.153460999999999986309617838742 +-0.456432999999999977625009250914 0.0884000000000000063504757008559 -1.33560999999999996390442902339 +-0.455886999999999986687981845535 -0.346754999999999979909404146383 -1.29303100000000004143885234953 +-0.455685000000000006714628852933 1.33275000000000010125233984581 -0.126992999999999994775734535324 +-0.455647999999999997466915147015 -0.170243000000000005433875571725 -1.3279309999999999725162069808 +-0.455627000000000004220623850415 0.519503999999999965808683555224 -1.23390399999999988978061082889 +-0.45520500000000002627231765473 0.265172000000000018804513501891 -1.31242999999999998550492819049 +-0.455025000000000012789769243682 -1.09961200000000003385025593161 0.764071999999999973418596255215 +-0.454226999999999991874943816583 -0.00172700000000000001947053629436 -1.33928099999999994373922618252 +-0.453790999999999999925393012745 -1.33232799999999995677057995636 0.137750000000000011324274851177 +-0.453780999999999989924504006922 -0.890178000000000024805046905385 -1.00083300000000008367351256311 +-0.453241999999999978232523289989 -1.21044200000000001793409865058 -0.573934000000000055230486850633 +-0.452164999999999983604226372336 0.600620999999999960472507609666 -1.19783200000000000784439180279 +-0.451463999999999976431297454837 0.177850000000000008082423619271 -1.32836400000000010024336916103 +-0.45055800000000001404032445862 -0.171947999999999989739762895624 -1.32944799999999996309441030462 +-0.449670999999999987384313726579 -0.807718000000000047045034534676 1.07022799999999995712585132424 +-0.449259999999999992681409821671 -0.29277900000000001146105432781 1.30860500000000001818989403546 +-0.449195000000000010942358130706 -1.27596799999999999108979409357 0.412466999999999972548181403909 +-0.449110999999999982446041713047 -0.000326999999999999979485160173098 -1.34100700000000006006928288116 +-0.448898999999999992471799714622 -0.261064999999999991509014307667 -1.31542200000000009119105470745 +-0.44733099999999997864463807673 1.07626800000000000245847786573 -0.800962999999999980538234467531 +-0.446917999999999981941556370657 0.67936700000000005417177817435 -1.15703299999999997815791630273 +-0.446562999999999987732479667102 -0.897272999999999987252863320464 0.997738000000000013756107364316 +-0.446207000000000020278889678593 -0.956067000000000000170530256582 -0.941718999999999972772002365673 +-0.445940999999999976299847048722 0.0898260000000000030651037263851 -1.33905500000000010629719326971 +-0.445381000000000026872726266447 -0.173316999999999998838262627032 -1.33101300000000000167688085639 +-0.444344999999999989981347425783 0.0939500000000000057287508070658 1.33930199999999999249666871037 +-0.443913999999999975276665509227 0.000733000000000000036075309406414 -1.34273599999999992959942574089 +-0.443462999999999996081356812283 -0.715903999999999984815701736807 1.13614400000000004276046183804 +-0.443220999999999976104447796388 0.0418289999999999981272758020623 1.34231300000000008942890872277 +-0.442803000000000002156497203032 0.473098999999999991761256978862 1.25702099999999994395238900324 +-0.44254599999999999493383029403 -1.33564499999999997115196492814 -0.142148999999999997578825627897 +-0.442342999999999986204812785218 0.145978999999999997649879901473 1.33529900000000001369926394545 +-0.44047399999999997666222384396 1.2823890000000000011226575225 -0.40182200000000001249844672202 +-0.440139999999999975699438437005 -0.174343999999999998973265746827 -1.33262199999999997324096057127 +-0.440137000000000000454747350886 -0.433777000000000023671731241848 -1.27205199999999996052224560117 +-0.440110000000000001207922650792 -0.348789000000000015688783605583 -1.29794000000000009364953257318 +-0.439906999999999992478905141979 0.755431999999999992390087300009 -1.1116669999999999607354084219 +-0.438977000000000006085798531785 -0.0101799999999999998129274203507 1.3443199999999999594280097881 +-0.438657000000000019124257732983 0.00144699999999999993557930899613 -1.34446200000000004592948243953 +-0.438456000000000012395418025335 -1.24982299999999990625099144381 -0.495680999999999982730258807351 +-0.438425999999999982392751007865 -0.517052999999999984837018018879 -1.24114400000000002499689344404 +-0.438363999999999975898390403017 1.27476300000000009049472282641 0.427570999999999978857800897458 +-0.438346000000000013407941423793 -0.262425000000000019362289549463 -1.31870599999999993379162788187 +-0.437748000000000025977442419389 -0.482099999999999972999376041116 1.25537100000000001465139121137 +-0.437224000000000001531219595563 0.197708999999999995855759493679 1.33031799999999988948218287987 +-0.436871000000000009322320693173 -1.01818300000000006022560228303 -0.878889999999999949054085846001 +-0.435661000000000020460078076212 0.178941999999999989956478430031 -1.33348399999999989162802194187 +-0.435641000000000000458300064565 1.19961399999999995813482200901 0.609215999999999979763742885552 +-0.435371000000000007990053063622 0.0905559999999999976072473373279 -1.34247999999999989562127211684 +-0.434985999999999983778309342597 -0.59828800000000004200018111078 -1.20533800000000002050626335404 +-0.43485299999999998954436364329 -0.175024999999999986144416652678 -1.33426700000000009183054316964 +-0.434840999999999977543296836302 0.951358000000000036955327686883 0.951751000000000013656631381309 +-0.434450999999999976086684227994 -0.983211999999999974875208863523 0.918992000000000031079139262147 +-0.434232000000000006867395541121 0.266622000000000025643487333582 -1.31922500000000009201528428093 +-0.433508999999999977692510810812 1.12999099999999996768451637763 -0.731566999999999967307928727678 +-0.43336200000000002496847173461 0.00181299999999999994146349102664 -1.34617699999999995696953192237 +-0.431628000000000011660006293823 -0.0618720000000000033835156898476 1.34531399999999989880450357305 +-0.431209000000000008956391184256 1.34619500000000003048228336411 -0.042652000000000002410960320276 +-0.431161000000000016463275187562 0.828516000000000030212277124519 -1.06191400000000002457056780258 +-0.431088999999999999968025576891 0.35324899999999997968203047094 -1.29976000000000002643218977028 +-0.430310999999999999054978161439 1.03032100000000004236255790602 0.867912000000000016797230273369 +-0.430099999999999982325249447968 0.869120000000000003659295089165 1.02939000000000002721378677961 +-0.42982799999999998785682464586 -0.677162000000000041666226024972 -1.16477399999999997604049895017 +-0.42964400000000002588507186374 -0.086937000000000000388133969409 -1.34456200000000003491607003525 +-0.429543000000000008142819751811 -0.175358999999999987107202059633 -1.33594199999999996286703662918 +-0.429007000000000027206681352254 0.248935999999999990617283174288 1.32437999999999989064747296652 +-0.428174999999999972288833305356 0.653352000000000043833381369041 1.17889599999999994395238900324 +-0.428049000000000012811085525755 0.00182899999999999989669374755863 -1.34787600000000007405276392092 +-0.427783000000000024343194127141 -0.623226999999999975443643052131 1.19523599999999996512656252889 +-0.427746000000000015095480421223 -0.263089999999999990532018045997 -1.32204999999999994741983755375 +-0.427657000000000009354295116282 -1.32949300000000003585398644645 0.222616000000000008318679078911 +-0.427248000000000016651569012538 1.32711000000000001186606368719 0.237144999999999994688693050193 +-0.426244999999999985007548275462 0.438483000000000011642242725429 -1.2751660000000000216857642954 +-0.425810999999999995058175272789 -1.0762799999999999034372422102 -0.81259199999999998098587639106 +-0.42519000000000001238120717062 -0.343851999999999990986765396883 1.30421600000000004193623226456 +-0.424765000000000003677058657559 0.0905890000000000028546054409162 -1.34587100000000003952038696298 +-0.424261999999999972477127130333 -0.349783999999999983820941906743 -1.30293999999999998706812220917 +-0.424229000000000022740920258002 -0.175341999999999997861266365362 -1.33764100000000007995026862773 +-0.423053000000000012370549029583 -1.17105999999999998983923887863 0.670555000000000012150280781498 +-0.422974999999999989874766015419 -0.753363000000000004874323167314 -1.11961400000000010912515335804 +-0.422738000000000002653877118064 0.00149599999999999993399724118603 -1.34955200000000008486722435919 +-0.421941000000000010494716207177 -1.28427000000000002266631327075 -0.415470000000000005968558980385 +-0.421204000000000022829738099972 -0.113041000000000002589928271846 1.3452910000000000145803369378 +-0.420953999999999994852117879418 -1.34890700000000007818812264304 -0.0569959999999999980535569932272 +-0.420713000000000003630873379734 0.898329999999999961879382226471 -1.00797000000000003261391157139 +-0.420225999999999988432364261826 1.3117620000000000946016598391 -0.320456000000000018612666963236 +-0.41980400000000001048405806614 0.178991000000000011205258942937 -1.33855400000000002158628831239 +-0.419719000000000008743228363528 0.521985999999999950027529393992 -1.24553899999999995173993738717 +-0.419103999999999976555642433595 -0.43509700000000001152145046035 -1.27868800000000004679634457716 +-0.418933999999999973073983028371 -0.174975999999999992651211755401 -1.33935699999999990872368016426 +-0.417976999999999987434051718083 1.17925499999999994216182130913 -0.659282999999999952400742131431 +-0.417885000000000006448175327023 0.522711000000000036713743156724 1.24585100000000004172306944383 +-0.417725999999999986211918212575 0.299458000000000001961097950698 1.31750900000000004119726781937 +-0.417553000000000007485567721233 -1.25782700000000002837907686626 0.493478000000000027736035690396 +-0.417451999999999989743315609303 0.000814000000000000053373971908854 -1.35119699999999998141220203252 +-0.417140999999999984026999300113 -0.26305800000000001404032445862 -1.32544100000000009131895239989 +-0.416847000000000023067769916452 1.1047089999999999410107420772 0.778367000000000031079139262147 +-0.415910999999999975162978671506 0.78495499999999995832666854767 1.10039200000000003676348114823 +-0.414451999999999987078780350203 -0.826591999999999993420374266861 -1.07003500000000006942002528376 +-0.414165000000000005364597654989 0.0899240000000000039293013287534 -1.34921500000000005314859663486 +-0.41380000000000000115463194561 -1.06423399999999990228616297827 0.834372000000000002550848421379 +-0.413677000000000016921575252127 -0.174262000000000000232702745961 -1.3410830000000000250537368629 +-0.4131870000000000264783750481 0.266687000000000007382539024547 -1.32595400000000007700862170168 +-0.413069999999999992734700526853 -1.13013000000000007894129794295 -0.743087000000000053034909797134 +-0.412291000000000018577139826448 -0.518692999999999959648278036184 -1.24938900000000008283507213491 +-0.412210000000000020836665726165 -0.000213000000000000000313984949152 -1.3528050000000000352429196937 +-0.411536000000000012910561508761 0.603428999999999993164578881988 -1.21099599999999996136068602937 +-0.408604000000000022740920258002 0.964597999999999955456075895199 -0.950048000000000003595346242946 +-0.408480999999999982996712333261 -0.173202999999999995850430423161 -1.34281199999999989458387972263 +-0.408405999999999991256771636472 -0.349735000000000018083312625095 -1.30800999999999989498178365466 +-0.407745000000000024087398742267 -0.163486999999999993438137835255 1.34425299999999992017762906471 +-0.407034000000000006913580818946 -0.00158200000000000007283063041541 -1.35437099999999999155875229917 +-0.406571000000000015717205315013 -0.262326999999999976864728523651 -1.32886600000000010268763617205 +-0.40503099999999997438138166217 1.35432599999999991879917615734 0.0418559999999999973741005021566 +-0.40493899999999999339550527111 0.353329999999999977422504571223 -1.30812200000000000699174051988 +-0.404293000000000013471890270011 -0.896557999999999966078689794813 -1.0162340000000000816982037577 +-0.403955999999999981753262545681 0.177996999999999988562038311102 -1.34355399999999991500487794838 +-0.403851999999999988766319347633 -0.60024200000000005328359975465 -1.21516000000000001790567694115 +-0.403760000000000007780442956573 -1.31364900000000006663469775958 -0.333620000000000027640112421068 +-0.40361200000000002630073936416 0.088563000000000002831512802004 -1.35249899999999989574916980928 +-0.403424000000000004817479748453 0.349075999999999997402966300797 1.30973099999999997855582023476 +-0.403364000000000000323296944771 -0.171802000000000010260237104376 -1.34453700000000009318057436758 +-0.402639999999999997903898929508 -0.531104000000000020520474208752 1.2473209999999999020303675934 +-0.402579000000000020165202840872 1.25733099999999997642419202748 0.50699899999999997746158442169 +-0.401942999999999994731325614339 -0.00328699999999999999122923810546 -1.3558870000000000644035935693 +-0.401729000000000002756905814749 0.682490000000000041069370126934 -1.17167400000000010429346275487 +-0.400795000000000012363443602226 1.22386400000000006293987553363 -0.584397000000000055308646551566 +-0.399836000000000024723334490773 -1.32141099999999989123011800984 0.306601999999999985657694878682 +-0.39869999999999999884536805439 -1.17951999999999990187404819153 -0.67064900000000005064748620498 +-0.398347999999999979880982436953 -0.170065999999999994951593862424 -1.34625299999999992195398590411 +-0.398318999999999978633979935694 1.3359570000000000611350969848 -0.237826000000000009615419571674 +-0.398137000000000018662404954739 -0.393303999999999986947329944087 1.29876799999999992252242009272 +-0.398058999999999996166621940574 -0.435031999999999974271247538127 -1.28541700000000003178968199791 +-0.397701999999999999957367435854 -1.3568450000000000787991893958 0.0283820000000000009776623954849 +-0.396959000000000006291855925156 -0.00532100000000000020877743978076 -1.35734799999999999897681846051 +-0.39607799999999998563637859661 -0.260902000000000022783552822148 -1.33231100000000002303579549334 +-0.395936000000000010157208407691 -0.85328300000000001368505309074 1.05600300000000002498268258933 +-0.395824000000000009169554004984 1.31946600000000002772537754936 0.319892999999999982918552632327 +-0.395093000000000027505109301273 0.438578999999999996628474718818 -1.28512599999999999056399246911 +-0.394936000000000009269029987991 1.17329499999999997683630681422 0.683671000000000028684610242635 +-0.394923999999999997267963181002 -0.762527999999999983593568231299 1.12364799999999998014743596286 +-0.394882999999999984019893872755 1.02706000000000008398615136684 -0.88837699999999997224620074121 +-0.39381800000000000139266376209 -0.679421999999999970398789628234 -1.17613499999999993050892044266 +-0.393452000000000023938184767758 -0.168001000000000011436185332059 -1.34795099999999989925925092393 +-0.393149000000000026222579663226 0.0865130000000000065618621647445 -1.35570999999999997065458501311 +-0.392602999999999979774401026589 -0.348642999999999980698106583077 -1.31312999999999990841104136052 +-0.392539000000000026791013851835 -0.9629860000000000086473050942 -0.958420999999999967400299283327 +-0.392259000000000024321877845068 0.700238000000000027078783659817 1.16438799999999997858424194419 +-0.392154000000000002579270130809 0.265367000000000019532819806045 -1.33258999999999994123811575264 +-0.392100000000000004085620730621 -0.00767699999999999979638509728375 -1.35874899999999998456701177929 +-0.391305999999999987171150905851 -0.21301100000000000589395199313 1.34220199999999989515231391124 +-0.390336999999999989530152788575 0.758858000000000032514435588382 -1.12772899999999998144062374195 +-0.390010999999999996568078586279 0.570524999999999948840923025273 1.23385300000000008857625743985 +-0.388695000000000012718714970106 -0.165616000000000013203660387262 -1.34962500000000007460698725481 +-0.38818000000000002502886786715 0.17596300000000000829381008316 -1.34846299999999996721555817203 +-0.387811000000000016818546555442 -0.941103000000000022851054382045 0.98179899999999997728394873775 +-0.38738600000000000811439804238 -0.0103450000000000000288657986403 -1.36008299999999993090682437469 +-0.386158000000000001250555214938 0.397594000000000002970068635477 1.30107700000000003903721790266 +-0.38614199999999998524913280562 -0.518611999999999961907803935901 -1.25775100000000006339462288452 +-0.385705000000000020055068716829 -0.258786999999999989263699262665 -1.33576199999999989387333698687 +-0.385220999999999980101250685038 -1.13911800000000007493383691326 0.744322000000000039143799313024 +-0.384539999999999992930099779187 -0.670217999999999980431653057167 1.18445599999999995333155311528 +-0.38426399999999999446131937475 -1.23472200000000009723066796141 0.57254099999999996661870227399 +-0.384097000000000021735502286901 -0.162919000000000008254730232693 -1.35126900000000005341860287444 +-0.383985999999999993992361169148 -1.33784499999999995090149695898 -0.25045400000000000995115101432 +-0.3836879999999999735216249519 0.522097000000000033281821743003 -1.25705899999999992644461599411 +-0.382834999999999980868636839659 -0.013313999999999999446220755317 -1.36134500000000002728484105319 +-0.382817000000000018378187860435 0.0837809999999999943653961054224 -1.35883500000000001506350599811 +-0.382755999999999985128340540541 -1.22425500000000009315215265815 -0.59556500000000001104893954107 +-0.382230000000000014193091146808 -0.755920000000000036344260934129 -1.13246800000000003016964456037 +-0.382031000000000009464429240325 1.26364300000000007173639460234 -0.507205000000000016946444247878 +-0.380798999999999998600230810553 0.912827999999999972757791510958 1.01080999999999998628652519983 +-0.380363999999999979895193291668 0.993697000000000052466475608526 0.93160600000000004516920171227 +-0.379674999999999984723331181158 -0.15992200000000000859046167534 -1.35287500000000004973799150321 +-0.379603999999999996983746086698 1.08546900000000001718092335068 -0.823200000000000042810199829546 +-0.379236000000000017529089291202 -1.02561400000000002563638190622 -0.896826000000000012057910225849 +-0.378803999999999974068742858435 0.351690000000000002611244553918 -1.31636700000000006482991921075 +-0.378466000000000024616753080409 -0.0165739999999999984559018173513 -1.36253000000000001890043677122 +-0.377404000000000017234214055861 0.832231000000000054050985909271 -1.07933199999999995810640029958 +-0.377253999999999978243181431026 1.35711200000000009602274531062 0.126199000000000005616840326184 +-0.377085999999999976761699826966 -0.433582000000000022943424937694 -1.29221199999999991625543316331 +-0.376915999999999973280040421741 -0.346511999999999986687981845535 -1.3182799999999998963318148526 +-0.375491999999999992443378005191 -0.255991000000000024083846028589 -1.33920599999999989648813425447 +-0.375446999999999975194953094615 -0.156635999999999997456257005979 -1.35443899999999994854249507625 +-0.374840000000000006519229600599 1.35488000000000008427036846115 -0.154257000000000005224265464676 +-0.374296000000000017582379996384 -0.0201099999999999994038102357763 -1.36363400000000001277555838897 +-0.372879999999999989235277553234 -1.35942800000000008076028734649 0.11364799999999999902122738149 +-0.372699999999999975752729142187 -0.600145999999999957275065298745 -1.22511999999999998678390511486 +-0.372655999999999987259968747821 0.0803780000000000049986681460723 -1.3618609999999999882192014411 +-0.372537000000000007027267656667 0.172896999999999995134558616883 -1.35326300000000010470557754161 +-0.371950999999999976086684227994 -0.261415999999999981717735408893 1.33914700000000008728306966077 +-0.371896999999999977593034827805 0.829343999999999970107467106573 1.0834580000000000321591642205 +-0.37142900000000000915179043659 -0.153073999999999987853271932181 -1.35595299999999996387600731396 +-0.371215999999999990421883921954 0.262668000000000012583711850311 -1.33910599999999990750154665875 +-0.370941999999999993953281318682 -1.02465600000000001124078607972 0.901378000000000012548184713523 +-0.370850000000000012967404927622 1.07062499999999993782751062099 0.846304999999999973958608734392 +-0.370769000000000015226930827339 0.603554999999999952642326661589 -1.22403100000000009117684385274 +-0.370437000000000016264323221549 -1.30811300000000008125766726153 0.389378999999999975134556962075 +-0.370340000000000002522426711948 -0.0239100000000000006972200594646 -1.36465199999999997615418578789 +-0.369134000000000017660539697317 -0.829435999999999951093343497632 -1.0843320000000000735695948606 +-0.368205000000000004511946372077 -0.440939000000000025369928380314 1.29228399999999998826183400524 +-0.367638000000000020328627670096 -0.149250999999999994782839962681 -1.35741200000000006298250809778 +-0.366615000000000024193980152631 -0.0279569999999999992124077863309 -1.36558099999999993379162788187 +-0.365997000000000016761703136581 0.444821000000000021934454252914 1.2915810000000000901110297491 +-0.365478999999999998316013716249 -0.252525999999999972711606233133 -1.34262999999999999012345597293 +-0.365300999999999986833643106365 -1.26415900000000003267075499025 -0.518129999999999979465314936533 +-0.36520599999999997509192439793 1.23493800000000009120526556217 0.584424999999999972288833305356 +-0.364707000000000003403499704291 -0.577760999999999969034547575575 1.23821699999999990104981861805 +-0.364435999999999982179588187137 -1.08419299999999996231281329528 -0.831691999999999986847853961081 +-0.364088000000000022726709403287 -0.145181000000000004490630090004 -1.35880899999999993355004335172 +-0.363958999999999976981968075052 0.436624999999999985345056074948 -1.29494899999999990569676810992 +-0.363136000000000014331646980281 -0.0322370000000000017648105199441 -1.36641600000000007497646947741 +-0.362980999999999998095745468163 0.902320000000000010942358130706 -1.02667599999999992199661846826 +-0.362837999999999993860910763033 1.30661599999999999965893948684 0.401378000000000012548184713523 +-0.362825999999999981859843956045 1.13959300000000007813127922418 -0.754773999999999944954254260665 +-0.362707000000000001627142864891 0.0763169999999999959516827630068 -1.36477800000000004665423603001 +-0.362696999999999991626253859067 -1.35675900000000004830269517697 -0.166299000000000002374989094278 +-0.361760000000000025988100560426 1.29843599999999992355981248693 -0.428012000000000003563371819837 +-0.361408000000000007023714942989 -0.343349999999999988542498385868 -1.32344100000000008954259556049 +-0.360794000000000003591793529267 -0.140880000000000005222489107837 -1.36013999999999990464516486099 +-0.360080999999999984417797804781 -0.516811000000000020371260234242 -1.2661949999999999594280097881 +-0.359916000000000013692158518097 -0.036732000000000000761168905683 -1.36715399999999998037480963831 +-0.359291000000000027014834813599 0.616350999999999982215115323925 1.22107399999999999273825324053 +-0.359169000000000016026291405069 0.0949330000000000034932057246806 1.36454600000000003667821601994 +-0.358144999999999991135979371393 0.0474180000000000018145485114474 1.3672910000000000341202621712 +-0.357787999999999994926724866673 -0.679309999999999969411135225528 -1.18765600000000004499156602833 +-0.357767999999999974924946855026 -0.136365999999999987224441611033 -1.36139900000000002577849045338 +-0.357343999999999994976462858176 0.142361999999999988553156526905 1.36089600000000010560086138867 +-0.357090000000000018509638266551 0.16881199999999998984101523547 -1.35793600000000003191757969034 +-0.356966999999999978765430341809 -0.0414240000000000024860113967407 -1.36779300000000003656452918221 +-0.356385999999999980580867031676 0.68262999999999995903721128343 -1.18617200000000000414956957684 +-0.356267000000000000348165940522 -0.430754000000000025760726884982 -1.29904799999999998050270733074 +-0.35570699999999999540989392699 -0.248404000000000013681500377061 -1.34601900000000007651124178665 +-0.355022000000000004238387418809 -0.131655999999999995253574525123 -1.36257999999999990237142810656 +-0.35458099999999997953281649643 -0.899676999999999948975926145067 -1.0319169999999999731699062977 +-0.354302000000000005819345005875 -0.0462950000000000028155255904494 -1.36833000000000004625633209798 +-0.354275000000000006572520305781 6.99999999999999989499501959478e-06 1.36911999999999989263699262665 +-0.353559000000000012153833495177 0.744609999999999994102495293191 1.14915300000000009106315701501 +-0.353007999999999988460785971256 0.0716139999999999971036501733579 -1.36757299999999992756727351662 +-0.352787000000000017241319483219 0.348335999999999978982145876216 -1.32446400000000008567724307795 +-0.352677000000000018253842881677 0.189518999999999993022470334836 1.35635599999999989506704878295 +-0.352671999999999985497822763136 1.14234499999999994379606960138 0.755426999999999959634067181469 +-0.352567999999999992510879565089 -0.126768999999999992800425729911 -1.36368099999999992100185863819 +-0.351932000000000022588153569814 -0.0513259999999999966258101835592 -1.36876200000000003420552729949 +-0.350455000000000016502355038028 0.258599000000000023291590878216 -1.34547700000000003406341875234 +-0.350414000000000003254285729781 -0.121723999999999998866684336463 -1.3646949999999999914024328973 +-0.349882000000000026318502932554 1.36845599999999989471177741507 -0.0700790000000000024016344468691 +-0.349864000000000008316902722072 -0.0564969999999999986095566839595 -1.36908800000000008267875273305 +-0.349756000000000011329603921695 -0.308510999999999979692688611976 1.33509999999999995345945080771 +-0.349457999999999990858867704446 -1.20674299999999989907450981264 0.649344999999999950013318539277 +-0.348569000000000017713830402499 -0.116541000000000005698552740796 -1.36562000000000005606182185147 +-0.348196999999999978747666773415 -1.13849399999999989496757279994 -0.763275999999999954503948629281 +-0.348107999999999973006481468474 -0.0617870000000000016426859872354 -1.36930700000000005189804141992 +-0.347988000000000019529267092366 1.35454199999999991277377375809 0.210044000000000008476774837618 +-0.34767799999999998705746406813 0.519836999999999993526955677225 -1.26842000000000010295764241164 +-0.347575999999999996070698671247 -0.0471149999999999971600495030088 1.37002599999999996605026808538 +-0.347127000000000018875567775467 0.9688470000000000137418965096 -0.969968000000000052374105052877 +-0.347042000000000017134738072855 -0.111241000000000006542322239511 -1.36645100000000008222400538216 +-0.346669999999999978168574443771 -0.0671759999999999996012078895546 -1.36941899999999994186339336011 +-0.34658600000000000518340925737 -1.35664600000000001855937625805 0.198466000000000003522515612531 +-0.346403999999999989700683045157 -1.29907200000000000450484094472 -0.438649999999999984368059813278 +-0.346212000000000019728219058379 -0.243642999999999998461674977079 -1.3493610000000000326281224261 +-0.346138999999999974477304931497 -0.339170000000000027018387527278 -1.32858999999999993768540207384 +-0.345868999999999982009057930554 -1.10268000000000010452083643031 0.815150999999999958944840727781 +-0.345837000000000005517364343177 -0.105843999999999993644195228626 -1.36718500000000009464429240325 +-0.345557000000000003048228336411 -0.0726419999999999982387421937347 -1.36942099999999999937472239253 +-0.345187000000000021593393739749 0.236218000000000011295853141746 1.35094300000000000494537744089 +-0.344959000000000015617729332007 -0.100372000000000002883915328766 -1.36781899999999989603338690358 +-0.344772000000000022890134232512 -0.0781639999999999973701036992679 -1.36931500000000005989875262458 +-0.344617000000000006654232720393 1.1892210000000000835740365801 -0.683369000000000004213518423057 +-0.344411999999999995925037410416 -0.0948459999999999997521982209037 -1.36835100000000009501377462584 +-0.344318000000000012938983218191 -0.0837200000000000027489122089719 -1.36909999999999998365751707752 +-0.344198000000000003950617610826 -0.0892880000000000062509997178495 -1.3687789999999999679403117625 +-0.343745999999999995999644397671 -0.80592500000000000248689957516 1.11010100000000000441957581643 +-0.343598999999999987764454090211 0.0662890000000000007007727731434 -1.3702360000000000095354835139 +-0.343019000000000018335555296289 0.490568999999999977301712306144 1.28127999999999997449151578621 +-0.341899000000000008459011269224 0.163724000000000008414602348239 -1.36246099999999992213872701541 +-0.341654000000000013237411167211 -0.597999999999999976019182668097 -1.23517900000000002691535883059 +-0.341463000000000016509460465386 -0.755793999999999965844210692012 -1.14550299999999993794119745871 +-0.340596999999999983099741029946 0.759012000000000019994672584289 -1.14363199999999998190958194755 +-0.34006100000000000216360263039 1.32810399999999995124255747214 -0.347129000000000020875745576632 +-0.339975000000000027178259642824 -1.3703199999999999825206487003 -0.0814870000000000038742342667319 +-0.339641000000000026215474235869 -0.895279000000000046988191115815 1.04072999999999993292476574425 +-0.339575000000000015720758028692 -1.28965400000000007807443580532 0.470617999999999980786924425047 +-0.338629000000000013326229009181 -0.966369000000000033523406273162 -0.975428999999999990500043622887 +-0.338617999999999974569675487146 -0.714328999999999991743493410468 1.17263399999999995415578268876 +-0.338073000000000012388312597977 -0.0937619999999999981232789991736 1.37000499999999991729282555752 +-0.337033000000000027007729386241 -0.238259999999999999564792574347 -1.35264199999999989998400451441 +-0.335683999999999982399856435222 -0.426557999999999992724042385817 -1.30589599999999994572874584264 +-0.335513999999999978918197029998 -0.486568999999999973748998627343 1.28478800000000004111200269108 +-0.334903000000000006242117933652 0.282274000000000024890312033676 1.34467899999999995763744209398 +-0.334515999999999980030196411462 0.0603619999999999989892529583813 -1.37275499999999994749089182733 +-0.334210999999999980314413505766 -0.513295999999999974505726640928 -1.27468800000000004324363089836 +-0.3329650000000000109601216991 0.432630000000000014548362514688 -1.30459400000000003139177806588 +-0.331168999999999991157295653466 -0.333988999999999980339282501518 -1.33370799999999989360333074728 +-0.330585000000000017728041257214 -1.18830199999999996940402979817 -0.691846999999999989761079177697 +-0.330023999999999984034104727471 0.60099800000000003219469135729 -1.23688500000000001222133505507 +-0.329952999999999996294519633011 0.253178000000000014146905868984 -1.35167700000000001736566446198 +-0.329901999999999973045561318941 1.03155100000000010673772976588 -0.909432000000000018147261471313 +-0.32891500000000001291411422244 0.953150999999999970491160183883 0.991623999999999949928053410986 +-0.328419999999999989714893899873 1.28860799999999997567101672757 0.481279000000000012349232747511 +-0.328207000000000026496138616494 -0.232277000000000011237233366046 -1.35584900000000008191136657842 +-0.32702399999999998136956946837 0.15765299999999998759037111995 -1.36682100000000006367883997882 +-0.326990000000000002877698079828 0.343281000000000002803091092574 -1.33237999999999989775290032412 +-0.326620000000000021422863483167 -0.981033999999999961616481414239 0.964826999999999990187404819153 +-0.326390999999999986691534559213 1.20767099999999993897858985292 0.659545000000000047890580390231 +-0.326141000000000014225065569917 -1.32885999999999993015364907478 -0.357439000000000006718181566612 +-0.325846999999999997754684954998 0.660008999999999956820317947859 1.20756400000000008176925803127 +-0.325805000000000011262102361798 -0.139748000000000011100453889412 1.36905900000000002592059900053 +-0.325795000000000001261213355974 0.0538550000000000000932587340685 -1.37512100000000003774403012358 +-0.325255000000000016324719354088 0.870693999999999967975838899292 1.06587999999999993860910763033 +-0.325046999999999974839681726735 1.2341549999999998910027443344 -0.609267000000000003012701199623 +-0.324809000000000014374279544427 -0.354111999999999982335907589004 1.33007699999999995377208961145 +-0.324099000000000025956126137316 -0.621889000000000025103474854404 1.22809400000000001895728019008 +-0.323790999999999995484500914245 -0.829296000000000033125502341136 -1.09882999999999997342570168257 +-0.323543000000000025018209726113 1.37663099999999993805488429643 0.0143750000000000006245004513517 +-0.323463000000000000522248910784 0.832397999999999971265651765862 -1.09657899999999997042721133766 +-0.323388999999999982026821498948 1.03231500000000009364953257318 0.910903000000000018232526599604 +-0.321879999999999999449329379786 -0.676829000000000013947953902971 -1.19928999999999996717292560788 +-0.321865999999999985448084771633 0.327506000000000019323209698996 1.33758799999999999918998128123 +-0.3213400000000000145128353779 -1.02924700000000002297895207448 -0.915092000000000016513013179065 +-0.319767000000000023440804852726 -0.225718000000000001969979734895 -1.35897000000000001129762949859 +-0.318925000000000014033219031262 -1.34851100000000001521982539998 0.282499999999999973354647408996 +-0.31746999999999997443822508103 0.0467969999999999983208986975569 -1.37732499999999991047161529423 +-0.317348999999999992205346188712 1.34662700000000001843147856562 0.293061000000000015930368135741 +-0.317315999999999986957988085123 0.534658999999999995367261362844 1.27021600000000001173816599476 +-0.317020000000000023998580900297 1.35253099999999992775201462791 -0.264876000000000000333955085807 +-0.316558000000000006046718681318 -0.327826999999999979529263782752 -1.33877599999999996605026808538 +-0.315912999999999999367616965174 -1.37847199999999991959498402139 0.00364599999999999993538501996682 +-0.315419000000000004924061158817 -0.421011000000000024101609596983 -1.31272999999999995246469097765 +-0.313273000000000023668178528169 -1.17400299999999990774313118891 0.723586999999999980204279381724 +-0.312524000000000024002133613976 0.150623000000000006881606395837 -1.3709999999999999964472863212 +-0.312226999999999976775910681681 0.786294000000000048444803724124 1.13325000000000009059419880941 +-0.311829999999999996074251384925 0.515216000000000007297273896256 -1.27957600000000004669686859415 +-0.311748000000000025089263999689 -0.218608999999999997765343096034 -1.36199200000000009147527180176 +-0.31166800000000000059330318436 -1.23341999999999996084909525962 -0.617686999999999986066256951744 +-0.311375000000000012878587085652 1.09018400000000004190781055513 -0.845307000000000030581759347115 +-0.311068000000000011162626378791 0.679787000000000030119906568871 -1.20046900000000000829913915368 +-0.310836999999999974431119653673 -0.593813000000000035250025121059 -1.24529800000000001602984411875 +-0.310819000000000011940670674448 -0.184894000000000002792432951537 1.36718899999999998762234554306 +-0.309792000000000011805667554654 0.246425000000000005151434834261 -1.35768299999999997318411715241 +-0.309574999999999989075405437688 0.039211999999999996857624751101 -1.37935699999999994425081695226 +-0.309016000000000012892797940367 1.10688699999999995426946952648 0.824201999999999990187404819153 +-0.308636000000000021437074337882 -0.508082000000000033601565974095 -1.28319800000000006079403647163 +-0.30737399999999998057020889064 -1.26610399999999989617549545073 0.550000999999999962142283038702 +-0.306126000000000009215739282808 0.371734999999999982112086627239 1.32969899999999996431654381013 +-0.305151999999999978818721046991 -1.06189000000000000056843418861 0.882762999999999964373387228989 +-0.305053999999999991832311252438 0.9024990000000000511803932568 -1.04519800000000007145217750804 +-0.304840999999999973102404737801 -0.899523999999999990251353665371 -1.047820999999999891372226557 +-0.304591000000000000635935748505 -1.35340299999999991165111623559 -0.274818000000000006721734280291 +-0.304194999999999993178789736703 1.27421800000000007280220870598 -0.532761000000000040088821151585 +-0.30418099999999997917754512855 -0.210976999999999997870148149559 -1.36490399999999989510968134709 +-0.302783000000000024343194127141 -1.08806200000000008465406153846 -0.851141999999999954162888116116 +-0.302362999999999992883914501363 -0.320707999999999993079313753697 -1.34377199999999996649080458155 +-0.302234000000000002650324404385 0.426607000000000013972822898722 -1.31402499999999999857891452848 +-0.302140000000000019664270212161 0.031133000000000000950794998289 -1.38121000000000004881428594672 +-0.301514999999999977475795276405 0.336544000000000009809042467168 -1.34008499999999997065458501311 +-0.300835000000000019060308886765 -0.752986000000000044174441882205 -1.15866699999999989145749168529 +-0.300192000000000014381384971784 -0.53001500000000001389111048411 1.27631099999999997329780399014 +-0.298455999999999999072741729833 0.142661000000000010023981644736 -1.37498100000000000875388650456 +-0.297209000000000000962785406955 -0.398036999999999974164666127763 1.32409700000000007946709956741 +-0.297094999999999997974953203084 -0.202853000000000005531575197892 -1.3676930000000000475779415865 +-0.295926999999999995605293179324 1.37937400000000010003020634031 0.0987719999999999986872722956832 +-0.295551000000000008149925179168 -0.414134000000000002117417352565 -1.31952300000000000146371803567 +-0.295194999999999985185183959402 0.0225909999999999999698019337302 -1.3828769999999999118500682016 +-0.293175000000000018918200339613 -0.229020000000000001350031197944 1.3644039999999999501767433685 +-0.292727000000000014967582728787 1.37162000000000006139089236967 -0.181577999999999989411136880335 +-0.292704999999999992965626915975 1.2655149999999999455013721672 0.559281000000000028116176054027 +-0.291619000000000017092105508709 1.144514999999999949054085846 -0.777846000000000037388758755696 +-0.291520999999999974594544482898 -1.27367099999999999759836555313 -0.541090999999999988645527082554 +-0.290885000000000004671818487623 0.755892000000000008341771717824 -1.15931600000000001315925146628 +-0.290603999999999973447017964645 -1.38118399999999996730082330032 0.0887639999999999956825647018377 +-0.290519000000000027217339493291 -0.194268999999999997241317828411 -1.37034999999999995701216448651 +-0.290198999999999984744647463231 -0.755386000000000001897149104479 1.1598170000000000978701564236 +-0.290129999999999999005240169936 -0.845922999999999980502707330743 1.09555399999999991678123478778 +-0.290049999999999974509279354606 0.238367999999999996552091374724 -1.36347100000000009956124813471 +-0.290005000000000012772005675288 -1.33505300000000004523315055849 0.365418999999999993821830912566 +-0.289810999999999985288212656087 0.701327000000000033708147384459 1.19337800000000004985167834093 +-0.289463000000000025835333872237 0.595768999999999993022470334836 -1.24950800000000006306777322607 +-0.28898899999999999588240484627 0.576917000000000013137935184204 1.25843199999999999505462255911 +-0.288766999999999995907273842022 0.0136189999999999991620036610129 -1.38435100000000010922462934104 +-0.288640000000000007673861546209 -0.312659999999999993480770399401 -1.34867699999999990367882674036 +-0.287746999999999975017317410675 0.414787000000000016797230273369 1.3210429999999999672866124456 +-0.286287999999999986933119089372 1.17563799999999996082067355019 0.732061999999999990507149050245 +-0.286235000000000017195134205394 -0.671985999999999972231989886495 -1.21099299999999998611599494325 +-0.285457999999999989526600074896 1.33339699999999994339816566935 0.374919999999999975504039184671 +-0.285440000000000027036151095672 0.969037999999999954958695980167 -0.989692000000000016157741811185 +-0.28487600000000001809752347981 0.133799000000000001264766069653 -1.37874699999999994481925114087 +-0.284689000000000025369928380314 -0.966202000000000005286437954055 -0.992676000000000002820854660968 +-0.284478999999999981884712951796 -0.185258000000000006002309760333 -1.37286200000000002674482857401 +-0.283453999999999983749887633167 -0.501190000000000024371615836571 -1.29169000000000000483169060317 +-0.28303099999999997704591692127 -1.14258299999999990426147178368 -0.783834999999999948450124520605 +-0.282880999999999993566035527692 0.00425299999999999983613108156533 -1.38562600000000002431477241771 +-0.282142000000000003900879619323 1.30925300000000000011368683772 -0.454152000000000000135003119794 +-0.28183799999999997742960999858 -1.37260500000000007503331289627 -0.191112000000000004096278871657 +-0.281007999999999980023090984105 -0.933540999999999954184204398189 1.02446900000000007402434221149 +-0.280976000000000003531397396728 -0.663312000000000012711609542748 1.21699200000000007371170340775 +-0.280368999999999979344522671454 -0.587601999999999957680074658128 -1.25543500000000007865708084864 +-0.278998999999999997001509655092 -0.175857000000000013306689083947 -1.37522100000000002673061771929 +-0.278602000000000016299850358337 -0.826172000000000017472245872341 -1.1134720000000000172946101884 +-0.277561999999999975408115915343 -0.0054710000000000001685318551381 -1.38669700000000006845368716313 +-0.276461999999999985533349899924 0.328152999999999972491337985048 -1.34754799999999996806820945494 +-0.276285000000000002806643806252 0.508249999999999979571896346897 -1.29048399999999996445865235728 +-0.276168000000000024574120516263 0.908842999999999956450835725263 1.04772799999999999265298811224 +-0.276158999999999987817744795393 -0.405955999999999983529619385081 -1.32624900000000001121236437029 +-0.275851000000000012857270803579 -1.13662899999999988942533946101 0.7949720000000000119655396702 +-0.275444000000000022154722501 -0.303715999999999985980991823453 -1.3534720000000000084128259914 +-0.274652000000000007240430477395 0.989931000000000005378808509704 0.971906999999999965389463341126 +-0.27409899999999998154720515231 -0.166101999999999999646504988959 -1.37741800000000003123545866401 +-0.273959999999999981312726049509 -1.23755799999999993588062352501 0.627213000000000020506263354036 +-0.272942000000000017934098650585 -0.271953000000000000291322521662 1.36071499999999989682919476763 +-0.272830000000000016946444247878 -0.0155130000000000007470690732703 -1.38755999999999990457411058742 +-0.272575999999999984968468424995 0.0955399999999999999245048343255 1.3844039999999999679403117625 +-0.271886000000000016552093029532 0.418582000000000009620748642192 -1.32320299999999990703258845315 +-0.271836999999999995303312516626 0.124072000000000001729283383156 -1.38228400000000006819789177825 +-0.271654999999999979820586304413 0.0528209999999999998965272141049 1.38687200000000010469136668689 +-0.270934999999999981401543891479 0.138183000000000000273558953268 1.3811230000000001005844296742 +-0.270805999999999991167953794502 0.229036999999999990595966892215 -1.36901699999999992840571394481 +-0.270712999999999981426412887231 1.19432899999999997397992501647 -0.707315000000000027036151095672 +-0.270222999999999990983212683204 -1.30889400000000000190425453184 -0.462357999999999991214139072326 +-0.269799999999999984279241971308 -0.156032000000000004025224598081 -1.37944299999999997474731117109 +-0.26955299999999998705746406813 0.8290149999999999463895505869 -1.11358700000000010454925813974 +-0.268701999999999996404653757054 -0.0258339999999999993252064456328 -1.38821200000000000152056145453 +-0.268427000000000026691537868828 0.8251249999999999973354647409 1.11674300000000004118305696466 +-0.268176000000000025469404363321 0.0101930000000000006710187960834 1.38851600000000008350298230653 +-0.267280000000000017568169141668 1.38529499999999994308552686562 -0.0975629999999999969473307714907 +-0.267143000000000019333867840032 1.37667199999999989579180237342 0.182779999999999998028243908266 +-0.267062999999999994837907024703 -0.440114000000000005208278253122 1.31718500000000005023537141824 +-0.266799999999999981614706712207 0.456492000000000008874678769644 1.31165299999999995783639406 +-0.266739999999999977120523908525 0.180580999999999991523225162382 1.37704099999999995951327491639 +-0.266118999999999994443555806356 -0.145687000000000010935252703348 -1.38128800000000007131006896088 +-0.265954999999999996962429804626 0.673969999999999958006924316578 -1.21450900000000006073719305277 +-0.265197000000000016051160400821 -0.0363940000000000027369218003059 -1.38864900000000002222577677458 +-0.264699000000000017607248992135 1.03175299999999992017762906471 -0.930279999999999995807797859015 +-0.264147000000000020669688183261 -1.37844499999999992034815932129 0.173531999999999991812771327204 +-0.264141999999999987913668064721 1.06706100000000003724665020854 0.889724999999999988098409176018 +-0.263411999999999979493736645964 -1.0290680000000000937632194109 -0.933613000000000026190605240117 +-0.263230999999999992766674949962 -1.01690999999999998060218331375 0.946891999999999955939244955516 +-0.263068999999999997285726749396 -0.135107000000000004868994096796 -1.38294600000000000861177795741 +-0.262826000000000004064304448548 -0.293910000000000004583000645653 -1.3581380000000000674020839142 +-0.262378999999999973358200122675 -0.571104999999999973780973050452 1.26688500000000003886668764608 +-0.262328000000000005620393039862 -0.0471499999999999974686915038546 -1.38887000000000004895639449387 +-0.262162000000000006139089236967 -1.19259500000000007169376203819 -0.713432999999999983842258188815 +-0.262153000000000024893864747355 -0.0321730000000000002091660178394 1.3893310000000000936637434279 +-0.260664000000000006806999408582 -0.124334000000000000074606987255 -1.38441199999999997594102296716 +-0.260504000000000013326229009181 -0.747507000000000032535751870455 -1.17190900000000008951417385106 +-0.260104999999999975113240680002 -0.0580610000000000014974688156144 -1.38887500000000008171241461241 +-0.260004999999999986126653084284 0.222566999999999987069898566006 1.37217400000000000481747974845 +-0.259940000000000004387601393319 -1.31632600000000010709300113376 0.446896000000000015450751789103 +-0.259390999999999982694731670563 0.113517999999999993909760576116 -1.38557899999999989404386724345 +-0.258975000000000010746958878372 1.33912000000000008803624496068 -0.373750999999999999889865875957 +-0.258911999999999975496933757313 -0.113410999999999997922550676321 -1.38567799999999996529709278548 +-0.258767000000000024773072482276 -0.492644999999999999573674358544 -1.30013099999999992562038642063 +-0.258537999999999990041743558322 -0.0690830000000000055138116294984 -1.38866299999999998071587015147 +-0.258149999999999990585308751179 0.617175000000000029132252166164 1.24597500000000005471179065353 +-0.257973000000000007858602657507 -1.38638900000000009349321317131 -0.106651999999999996804334045919 +-0.257819999999999993622878946553 -0.102380999999999999783284465593 -1.38674000000000008370193427254 +-0.257633000000000000895283847058 -0.0801729999999999942694728360948 -1.38823500000000010778933301481 +-0.257392999999999982918552632327 -0.0912869999999999931494798488529 -1.38759300000000007635492238478 +-0.257319999999999993178789736703 -0.396508000000000027096547228211 -1.33288000000000006473044322775 +-0.25583600000000000784794451647 1.23742700000000005466915808938 0.635075999999999973866238178744 +-0.255269999999999996909139099444 -0.896097999999999950127005376999 -1.06388199999999999434407982335 +-0.253608999999999973340436554281 -0.0741119999999999973239184214435 1.38931300000000002015099198616 +-0.252439999999999997726263245568 1.31490499999999999047872734081 0.455299999999999982502885131908 +-0.252134999999999998010480339872 0.218469999999999997530863993234 -1.37429899999999993731591985124 +-0.251931000000000016036949546105 0.318141000000000007119638212316 -1.35473899999999991550225786341 +-0.251323999999999991850074820832 0.740141000000000048864023938222 1.17856999999999989547916356969 +-0.250995999999999996887822817371 -0.664802000000000004042988166475 -1.22271799999999997154986886017 +-0.250836999999999976651565702923 -0.283281000000000005023537141824 -1.36265600000000008940048701334 +-0.250759000000000009666933920016 0.263975999999999988432364261826 1.36654199999999992343191479449 +-0.250371000000000010210499112873 -0.579390999999999989356069818314 -1.26555100000000009252687505068 +-0.250199999999999977973175191437 -0.313522000000000022890134232512 1.35613500000000009038103598868 +-0.249245999999999995333510582896 0.587887000000000048416382014693 -1.26184999999999991615595718031 +-0.248737999999999986888710168387 1.23942899999999989191223903617 -0.633991999999999999992894572642 +-0.247858999999999995988986256634 -1.33895199999999992002130966284 -0.381801000000000001488587031417 +-0.247587000000000001520561454527 0.102180000000000006932232565759 -1.38861799999999990795629400964 +-0.247157999999999988816057339136 0.898866000000000053837823088543 -1.06346300000000004715161594504 +-0.24505499999999999505284620227 1.13896500000000000518696197105 0.80169000000000001371347480017 +-0.243369000000000001993072373807 0.496684000000000014374279544427 1.30156699999999991845811564417 +-0.242913999999999991041832458905 1.09039599999999992085975009104 -0.867195999999999966867392231507 +-0.242578999999999989078958151367 -0.115458000000000005069722419648 1.38846099999999994523136592761 +-0.242042000000000007142730851228 0.408586999999999977983833332473 -1.33209299999999997154986886017 +-0.241397000000000000463629135083 0.74951199999999995604582636588 -1.17471700000000001118394266086 +-0.241184000000000009489298236076 0.498968000000000022620127992923 -1.30109999999999992326138453791 +-0.241096000000000004748201831717 -1.08787100000000003241495960538 -0.870866000000000028968827336939 +-0.240776999999999991031174317868 1.39350400000000007594280759804 -0.0131629999999999993537391773657 +-0.240259000000000000341060513165 -1.23790099999999991808863342158 -0.640216000000000007297273896256 +-0.239523000000000013676171306543 -0.271870999999999973795183905168 -1.36700899999999991862864590075 +-0.239473999999999992427390793637 -0.793227000000000015411671938637 1.1460550000000000459010607301 +-0.239464000000000010182077403442 -1.20412800000000008715517196833 0.701949999999999962874142056535 +-0.239107999999999987217336183676 -0.385826999999999975532460894101 -1.33939000000000008050449196162 +-0.239036999999999999477751089216 0.304642999999999997129407347529 1.36016699999999990389198956109 +-0.23734099999999999641708825493 -1.09476900000000010315659437765 0.863221000000000016072476682893 +-0.237304999999999988169463449594 1.36853800000000003223021849408 0.266066000000000024705570922379 +-0.236648999999999998244959442673 -1.37026699999999990176036135381 0.257616000000000011649348152787 +-0.236470999999999986762588832789 0.0901010000000000005337952302398 -1.3913889999999999869118028073 +-0.235506999999999994122035218425 -0.701867000000000018644641386345 1.20495599999999991602805948787 +-0.234786999999999995702992805491 1.36370199999999996975930116605 -0.291874999999999995559107901499 +-0.234670999999999990714982800455 -0.482482999999999995210941960977 -1.30848800000000009546852197673 +-0.234492000000000005988098905618 -0.480177000000000020474288930927 1.30936800000000008736833478906 +-0.234287999999999996258992496223 -0.882363000000000008427036846115 1.0800670000000001103046542994 +-0.234111999999999986776799687505 0.20670900000000000384936527098 -1.37929799999999991300114743353 +-0.23374500000000000832223179259 -0.820077999999999973645969930658 -1.12819899999999995188204593433 +-0.233089999999999991642241070622 -1.39470300000000002604849669297 -0.0217700000000000011557421686348 +-0.230930999999999997385202732403 -0.962486999999999981447729169304 -1.01009400000000004737898962048 +-0.229105000000000003090860900556 -0.15604799999999999227107139177 1.3867799999999999016608853708 +-0.22892999999999999460875699242 -0.259724999999999983657517077518 -1.37118000000000006544098596351 +-0.22884999999999999786837179272 -1.29240500000000002600586412882 0.526610000000000022524204723595 +-0.228018999999999999461763877662 0.30654700000000001391953219354 -1.36162999999999989597654348472 +-0.226088000000000011180389947185 0.0773289999999999949631401818806 -1.39388099999999992562038642063 +-0.225782000000000010464518140907 1.27963699999999991341326222027 -0.558167999999999997484678715409 +-0.225038999999999989043431014579 -0.353565000000000018154366898671 1.35068499999999991345589478442 +-0.224920000000000008810729923425 0.655275999999999969602981764183 1.23289300000000001666933258093 +-0.224886000000000002563282919255 0.344409000000000020680346324298 1.35307400000000010997780464095 +-0.224831000000000003069544618484 0.943640999999999952052576190908 1.02907400000000004425260158314 +-0.224516999999999994352961607547 -1.36372699999999991149479683372 -0.299736999999999975674569441253 +-0.223787000000000013688605804418 0.965169000000000054662052662025 -1.00914199999999998347277596622 +-0.222331000000000000849098569233 0.860948999999999964316543810128 1.09969800000000006434675015043 +-0.222224000000000004861888669438 -0.609675999999999995715427303367 1.25654700000000008053291367105 +-0.221594000000000013184120462029 -0.373956000000000010619061185935 -1.34575399999999989475440997921 +-0.221223000000000002973621349156 0.665205000000000046256332097983 -1.22823600000000010545875284151 +-0.220961999999999991750598837825 -0.569212000000000051258552957734 -1.27560699999999993536903275526 +-0.2206319999999999947881690332 -0.73937900000000000844124770083 -1.18517500000000008952838470577 +-0.22027099999999999457855892615 -0.967915999999999998593125383195 1.00728299999999992841992479953 +-0.220171000000000005591971330432 1.1447350000000000580513415116 -0.800691000000000041580960896681 +-0.219097999999999987208454399479 -0.24689099999999999934807703994 -1.37515100000000001223554590979 +-0.218426000000000009038103598868 1.2912239999999999273683215506 0.533882999999999996454391748557 +-0.218224000000000001309174990638 1.02302300000000001567457275087 0.951736000000000026410873488203 +-0.217957000000000011841194691442 1.20445599999999997109512150928 0.70836399999999999366195879702 +-0.217827999999999993852028978836 -1.14238200000000000855493453855 -0.804682000000000008377298854612 +-0.217545999999999989382715170905 0.535205999999999959548802053177 1.29082399999999997142197116773 +-0.217406999999999989148236068104 -1.27832199999999995831956312031 -0.564471999999999973773867623095 +-0.216806999999999999717559262535 0.193798999999999999044320020403 -1.38399300000000002874855908885 +-0.216478000000000003755218358492 0.0639160000000000005915268275203 -1.39608400000000010265921446262 +-0.216299999999999992272847748609 -0.6553050000000000263611354967 -1.23441899999999993298160916311 +-0.215885999999999994569677141953 0.822096000000000048935078211798 -1.13028799999999995939958807867 +-0.213324999999999986854959388438 1.39621299999999992635935086582 0.071289000000000005141664871644 +-0.213241999999999987114307486991 -0.195721000000000006080469461267 1.38427699999999997970689946669 +-0.212819000000000008165912390723 0.396658999999999983820941906743 -1.34065999999999996283861491975 +-0.211262000000000005339728659237 -0.470743000000000022531310150953 -1.31672699999999998077271357033 +-0.210539000000000003920419544556 0.776298999999999961296737183147 1.16320000000000001172395514004 +-0.210068000000000004723332835965 -0.233418999999999987604581974665 -1.37890800000000002256683728774 +-0.209671999999999997266186824163 1.382902999999999993363530848 -0.208847000000000004860112312599 +-0.209530999999999995031529920197 0.577385000000000037090330806677 -1.27386099999999991005950050749 +-0.208360999999999990661692095273 0.383116000000000012093437362637 1.3452910000000000145803369378 +-0.208216000000000012182255204607 -1.35668000000000010807355010911 0.34068300000000001359623524877 +-0.207679000000000002490452288839 0.0499119999999999980344611572036 -1.39799099999999998367172793223 +-0.207286999999999999033661879366 -1.39751099999999994771826550277 0.0631970000000000031725733151688 +-0.206665999999999988601118161569 0.487406999999999979156228846477 -1.31138200000000004763478500536 +-0.206529999999999991366905760515 1.35500200000000003974776063842 0.348302000000000000490274487674 +-0.206063999999999997170263554835 -0.889413000000000009137579581875 -1.08003800000000005354650056688 +-0.205681000000000002714273250604 -1.02507799999999993367794104415 -0.952319000000000026595614599501 +-0.204848000000000002307487534381 -0.360941000000000011826983836727 -1.35194600000000009210054940922 +-0.204819000000000001060485033122 0.29341699999999998338395812425 -1.36819399999999991024424161878 +-0.204023000000000009901413022817 -1.165945999999999926899363345 0.773916000000000048331116886402 +-0.202855000000000007531752999057 1.09779699999999991177901392803 0.868153999999999981262988058006 +-0.201934000000000002383870878475 1.31479600000000007575806648674 -0.48014000000000001122657522501 +-0.201873999999999997889688074793 -0.219364000000000003431921413721 -1.38243500000000008043343768804 +-0.20028899999999999481659074263 0.179792000000000007364775456153 -1.38836599999999998900079845043 +-0.200287999999999993816501842048 -1.38311800000000006960476639506 -0.216489999999999988000709549851 +-0.19972599999999998687805202735 0.0353749999999999967248420773558 -1.39959199999999994723509644245 +-0.199623999999999995891286630467 -0.51806700000000005523759227799 1.30067599999999994331290054106 +-0.199532999999999988149923524361 1.02766299999999999315036802727 -0.950838999999999989753973750339 +-0.197894999999999987583265692592 -1.04858899999999999330668742914 0.928062000000000053567816848954 +-0.197559000000000012375878100102 -0.391921999999999992603250120737 1.34438400000000002343369942537 +-0.196856000000000003202771381439 -1.26338200000000000500222085975 0.604245000000000032081004519569 +-0.196558000000000010487610779819 1.19455700000000009097789188672 -0.731025000000000035882408155885 +-0.195051000000000002154720846193 -0.234321000000000001506350599811 1.38095999999999996532551449491 +-0.194548999999999999710453835178 -0.20477999999999998981259352604 -1.38571800000000000530064880877 +-0.193701000000000012057910225849 -1.19238400000000011047518455598 -0.735322999999999948883555589418 +-0.19369700000000000805755462352 -1.31369599999999997486099800881 -0.48650100000000001676525585026 +-0.192650999999999988920862392661 0.020362000000000001626032641866 -1.40088199999999996059329987474 +-0.192326999999999997958965991529 0.739895999999999998131272604951 -1.18977500000000002700062395888 +-0.192257000000000011219469797652 -0.557105999999999990102139690862 -1.28556200000000009353584573546 +-0.189529000000000003023359340659 0.420611999999999985888621267804 1.33684899999999995401367414161 +-0.189522999999999997022825937165 0.891434999999999977404741002829 -1.08139899999999999913313786237 +-0.189432999999999990281551731641 0.571906000000000025451640794927 1.27946800000000004970956979378 +-0.189429999999999987281285029894 0.691066999999999986847853961081 1.21923800000000004395417363412 +-0.189398000000000010789591442517 -0.811038000000000036671110592579 -1.14295499999999994322763541277 +-0.188935999999999992837729223538 -0.346835000000000004405364961713 -1.35794299999999990014032391628 +-0.188630999999999993121946317842 -0.457471000000000016516565892744 -1.32481599999999999361932623287 +-0.18812200000000001143263261838 -0.189724000000000003751665644813 -1.38874600000000003596767328418 +-0.187873000000000012210676914037 -0.737402000000000001911359959195 1.19203299999999989822185852972 +-0.18664300000000000334665628543 -0.827702999999999966540542573057 1.1314020000000000187867499335 +-0.186481000000000007865708084864 0.00493099999999999961952656946096 -1.40185599999999999099031811056 +-0.185030000000000000026645352591 1.39341200000000009495693120698 0.155459000000000013841372492607 +-0.184906999999999988038013043479 0.0957699999999999940225592354182 1.39879799999999998583177784894 +-0.18462200000000000832400814943 0.164744000000000001548983163957 -1.39239899999999994228971900156 +-0.18433199999999999585398313684 0.382846999999999992869703646647 -1.34887000000000001342925770587 +-0.184093000000000006632916438321 0.0580149999999999971267428122701 1.40097999999999989206855843804 +-0.183730000000000004423128530107 1.39664600000000005408651304606 -0.124993999999999993999466596506 +-0.183548999999999989940491218476 1.26244599999999995709742961481 0.610360000000000013642420526594 +-0.183457000000000008954614827417 0.133458999999999994301447259204 1.39589800000000008317613264808 +-0.1826180000000000025472957077 -0.17425699999999999523225824305 -1.39150499999999999189981281233 +-0.182424000000000002819078304128 0.278801999999999994273025549774 -1.37440600000000001656985659793 +-0.182284000000000001584510300745 -0.643531999999999992922994351829 -1.24604899999999996218491560285 +-0.181375000000000008437694987151 -0.728632999999999975138109675754 -1.19841400000000009029577086039 +-0.18124000000000001220357148668 -0.0108570000000000003309574836408 -1.40250999999999992340349308506 +-0.181018000000000012228440482431 0.0203400000000000004407585407762 1.40243300000000004068567704962 +-0.180665999999999993264054864994 -1.39480500000000007254641332111 0.147913999999999989931609434279 +-0.179885999999999990350829648378 -0.645576999999999956436624870548 1.24533999999999989150012424943 +-0.179748999999999992116528346742 0.170930999999999999605648781653 1.39229000000000002756905814749 +-0.1796179999999999998827604486 -1.08362200000000008515144145349 -0.890785999999999966725283684355 +-0.179216999999999987425169933886 1.16673200000000010234657565888 0.778857000000000021522339466173 +-0.178961000000000008958167541095 -1.33773900000000001142552719102 0.422404999999999974935604996062 +-0.178057999999999994056310015367 -0.15843899999999999650412974006 -1.39398399999999988985166510247 +-0.177569000000000004613198711922 -0.955238000000000031519675758318 -1.02761400000000002741273874562 +-0.177290000000000003144151605738 1.34476499999999998813393631281 -0.400218000000000018179235894422 +-0.177050000000000012922996006637 0.653523999999999993804067344172 -1.24159599999999992192556419468 +-0.176949999999999996180832795289 -0.026938000000000000139221967288 -1.40284100000000000463273863716 +-0.176440999999999986735943480198 -0.915102999999999999758415469842 1.06369899999999995010568909493 +-0.175694999999999990070165267753 -0.0171040000000000011470824290427 1.40315300000000009461587069381 +-0.175269000000000008121503469738 -1.39705199999999996052224560117 -0.132389000000000006673772645627 +-0.174940000000000012159162565695 1.33611900000000005661604518536 0.429163999999999989931609434279 +-0.174604000000000009196199357575 -0.27169599999999999306865561266 1.37684199999999989927346177865 +-0.174492000000000008208544954869 1.08610199999999990083665579732 -0.888782999999999989704235758836 +-0.174462000000000005961453553027 -0.142332999999999987306154025646 -1.39617499999999994386712387495 +-0.174121999999999998998134742578 0.893626000000000031420199775312 1.08217999999999991977972513268 +-0.173919999999999991269206134348 -0.331691000000000013603340676127 -1.36372000000000004327205260779 +-0.173797000000000007036149440864 0.208039000000000001699973495306 1.38798899999999991727861470281 +-0.17362700000000000355449003564 -0.0432509999999999977804421291694 -1.40284800000000009490008778812 +-0.172865999999999991887378314459 0.473611999999999977450926280653 -1.32129099999999999326405486499 +-0.172169999999999989714893899873 1.23966500000000001691091711109 -0.658474000000000003751665644813 +-0.171842999999999995752730796994 -0.126003000000000003888445121447 -1.3980680000000000884341488927 +-0.171444999999999986295406984027 0.974948000000000036813219139731 1.00999100000000008314771093865 +-0.171283999999999991814547684044 -0.0597299999999999983724130458995 -1.40253099999999997216093561292 +-0.170473999999999986654231065586 0.564304000000000027803537250293 -1.28549599999999997201882706577 +-0.170211000000000001186606368719 -0.109511999999999998234301301636 -1.39965500000000009350742402603 +-0.169930999999999998717470361953 -0.0763100000000000028288482667449 -1.40189199999999991597121606901 +-0.169869999999999993223198657688 0.14871300000000001184652376196 -1.39607600000000009465850325796 +-0.169572000000000000508038056068 -0.092925999999999994716226581204 -1.40093200000000006610889613512 +-0.169223000000000012299494756007 -1.34388700000000005374545253289 -0.406610000000000026965096822096 +-0.168809999999999987840837434305 -1.23768100000000003113598268101 -0.663061000000000011489476037241 +-0.168462000000000000632383034826 0.456749000000000016097345678645 1.32777999999999996028066107101 +-0.16814399999999998791544442156 -0.0541700000000000028710367416807 1.4031370000000000786144482845 +-0.167866999999999988446575116541 -0.428443000000000018268053736392 1.33725699999999991796073572914 +-0.167777000000000009460876526646 -1.12316199999999999370459136117 0.842828000000000021607604594465 +-0.167616999999999988224530511616 0.809656999999999960060392822925 1.14732699999999998574651272065 +-0.166868999999999989558574498005 -0.442720000000000002415845301584 -1.33272400000000001973887719942 +-0.165624999999999994448884876874 0.244635999999999992349231092703 1.38301199999999990808419170207 +-0.164369999999999988338217349337 -0.543120000000000047180037654471 -1.29537799999999991840127222531 +-0.164086000000000009624301355871 -1.22937500000000010658141036402 0.679494999999999960138552523858 +-0.162672000000000011032952329515 0.811667999999999945082151953102 -1.14661799999999991506172136724 +-0.162595999999999990537347116515 -0.55363499999999998824051772317 1.29114299999999992962784745032 +-0.162412000000000000810018718767 0.957255999999999995786481576943 -1.02824200000000010035705599876 +-0.160921000000000008478551194457 0.262761000000000022325252757582 -1.38023899999999999366195879702 +-0.159861000000000003096189971075 -0.31557099999999999040412035356 -1.36925500000000011091572105215 +-0.159853999999999996095567666998 1.05229700000000003790034952544 0.931192000000000019710455489985 +-0.159140000000000003677058657559 0.606638000000000010558665053395 1.26754300000000008630252068542 +-0.158395000000000008011369345695 -0.090712000000000000965449942214 1.40238400000000007494804776798 +-0.157667000000000001591615728103 -0.998269999999999990691890161543 0.98924100000000003696243311424 +-0.157416000000000000369482222595 -0.879495000000000026751934001368 -1.09622400000000008724043709663 +-0.157062000000000007160494419622 1.404876999999999931389993435 -0.0406489999999999976343367791287 +-0.156695000000000000950350909079 0.36720599999999997686828123733 -1.35668999999999995154098542116 +-0.156089000000000005519140700017 0.131762999999999991240784424917 -1.39938399999999996126121004636 +-0.156005000000000004778399897987 1.3851109999999999811137740835 0.239016000000000006231459792616 +-0.155264999999999986357579473406 0.280577999999999994074073583761 1.37737700000000007349854058702 +-0.153331999999999996076027741765 -1.38659400000000010422240848129 0.232048000000000004261480057721 +-0.15284700000000001063327204065 -1.13789099999999998580335613951 -0.825737000000000054278359584714 +-0.151982000000000005979217121421 -0.307696999999999998287592006818 1.37194199999999999484145973838 +-0.151945999999999997731592316086 1.36942800000000008964207154349 -0.318715999999999999303668118955 +-0.151821000000000011498357821438 0.724408999999999969610087191541 1.20506500000000005279332526698 +-0.149558999999999997498889570124 -1.40547200000000005459810381581 -0.0477650000000000019007018181583 +-0.149083999999999994301447259204 -0.629530000000000033999469906121 -1.25756399999999990413357409125 +-0.149000999999999994560795357756 -1.31351900000000010315659437765 0.502460000000000017728041257214 +-0.148761000000000004339639758655 1.14025400000000010081180334964 -0.823219000000000034056313324982 +-0.148373000000000004883204951511 -1.01729200000000008508038717991 -0.971134000000000052743587275472 +-0.147948999999999997179145339032 1.22868700000000008465406153846 0.684427000000000007595701845275 +-0.147102000000000010526690630286 1.27987999999999990663468452112 -0.583324999999999982414067289938 +-0.146812999999999999056754518278 -0.298538000000000025568880346327 -1.37452599999999991453591974278 +-0.146487000000000006094680315982 -0.126586000000000004073186232745 1.40089899999999989432808433776 +-0.146060999999999996390442902339 -0.426547999999999982723153379993 -1.34041900000000002712852165132 +-0.14573400000000000242827979946 -0.799085999999999962994934321614 -1.1576800000000000423483470513 +-0.145245000000000012985168496016 0.49138300000000001421796014256 1.31812200000000001587352471688 +-0.144080999999999986860288458956 -1.36877399999999993518429164396 -0.325112999999999985334397933912 +-0.143870999999999998886224261696 0.727083000000000034823699479603 -1.20442999999999988958165886288 +-0.143334999999999990194510246511 0.113960000000000005737632591263 -1.40230800000000010996359378623 +-0.143251999999999990453858345063 -1.27809299999999992358823419636 -0.588183000000000011375789199519 +-0.142887999999999987243981536267 -0.715311999999999947874584904639 -1.21157399999999992878940702212 +-0.142757999999999996010302538707 0.315724000000000004639844064513 1.37110899999999991116794717527 +-0.142660000000000009023892744153 1.31196299999999999030819708423 0.508332000000000006068034963391 +-0.140395999999999993024246691675 0.245356999999999991768362406219 -1.38567299999999993254107266694 +-0.139917999999999986826537679008 0.457637000000000015997869695639 -1.33078600000000002445688096486 +-0.139771000000000006346922987177 1.12440300000000004132516551181 0.846276000000000028222757464391 +-0.138261999999999996013855252386 -0.769777000000000044543924104801 1.17827299999999990376409186865 +-0.13741100000000000536104494131 -0.527309999999999945430317893624 -1.30501399999999989631760399789 +-0.136081000000000007510436716984 -0.462984000000000006647127293036 1.32933400000000001561772933201 +-0.135531000000000012573053709275 -0.678665999999999991487698025594 1.23330600000000001337241428701 +-0.134828000000000003399946990612 -0.280658999999999991814547684044 -1.37951099999999993173105394817 +-0.134660000000000001918465386552 1.01930000000000009485745522397 -0.971026999999999973489650528791 +-0.133610000000000006536993168993 0.638974000000000041943337691919 -1.25453600000000009551115454087 +-0.132467000000000001413980044163 -0.161648999999999987142729196421 1.39868600000000009586642590875 +-0.132375999999999993672616938056 0.880236000000000018417267710902 -1.09893599999999991290167145053 +-0.132230999999999987437604431761 0.54869500000000004380495965961 -1.2967070000000000540296696272 +-0.131915000000000004476419235289 -0.858677000000000023582913399878 1.11591700000000004777689355251 +-0.131656999999999996253663425705 0.0953750000000000014432899320127 -1.40483800000000003116440439044 +-0.130869000000000013095302620059 -1.07594499999999992922994351829 0.908414000000000054768634072389 +-0.130667000000000005366374011828 -1.19051499999999998991029315221 0.752063999999999954759744014154 +-0.130015999999999992686738892189 0.349795999999999995822008713731 -1.36408900000000010699352515076 +-0.129775000000000001465494392505 1.40756400000000003736033704627 0.0438570000000000001505462421392 +-0.128153999999999990144772255007 0.349932999999999994056310015367 1.36423000000000005371703082346 +-0.127274999999999999245048343255 -0.342183999999999988173016163273 1.36627699999999996371968791209 +-0.126788000000000011802114840975 0.639266000000000000902389274415 1.25509500000000007169376203819 +-0.126365000000000005098144129079 1.37134500000000003616662525019 0.32163000000000002698286039049 +-0.126289000000000012358114531708 -0.40901900000000002144417976524 -1.34786999999999990151877682365 +-0.126002000000000002888356220865 1.38868600000000008698464171175 -0.235957000000000000072830630415 +-0.125473000000000001197264509756 -1.18766900000000008574829735153 -0.757430000000000047677417569503 +-0.125393000000000004456879310055 -1.37291000000000007474909580196 0.315265999999999990688337447864 +-0.12481299999999999339461709269 -0.944482999999999961460162012372 -1.0451669999999999571826947431 +-0.123990000000000002988720382291 0.923026000000000013123724329489 1.06425999999999998379962562467 +-0.123952999999999993741006676373 -0.262004999999999987903009923684 -1.38419300000000000672173428029 +-0.123554999999999998161470671221 -0.586740000000000039293013287534 1.28080900000000008631673154014 +-0.123258000000000006446398970184 -1.40834499999999995800692431658 0.0370469999999999966000530093879 +-0.12272700000000000275512945791 0.840084000000000052921222959412 1.13101600000000002133049292752 +-0.122443999999999997285726749396 1.18990700000000004799005637324 -0.754407000000000049766413212637 +-0.12145400000000000639843733552 1.31504400000000010173550890613 -0.505873000000000017095658222388 +-0.121102000000000001311839525897 0.0760819999999999968531838590025 -1.40696299999999996366284449323 +-0.120928999999999994829913418926 0.226657999999999998363975350912 -1.39068400000000003124966951873 +-0.11996900000000000618971540689 0.524379000000000039527492390334 1.30791199999999996350652509136 +-0.11859300000000000396838117922 -1.07533199999999995455368662078 -0.910822000000000020492052499321 +-0.118452000000000001733724275255 -1.28411499999999989540810929611 0.580532000000000047990056373237 +-0.118370000000000002993161274389 -1.38825899999999990974686170375 -0.242333999999999993857358049354 +-0.117128999999999997005950547191 -1.31346000000000007190692485892 -0.510982999999999965012875691173 +-0.116829000000000002290612144407 -0.613353000000000037061909097247 -1.26891599999999993286792232539 +-0.116817000000000004167333145233 -0.944011999999999962263075303781 1.04651600000000000179056769412 +-0.116389000000000006340705738239 -0.19576399999999999357314095505 1.39575399999999993916333096422 +-0.116223000000000006859401935344 1.00264400000000009072209650185 0.990554000000000045567105644295 +-0.114230999999999999205968492788 -0.242649000000000003574029960873 -1.38855100000000009075051821128 +-0.112240999999999993552712851397 0.755170000000000007922551503725 1.19042899999999995941379893338 +-0.111764000000000002232880547126 1.19007799999999996920507783216 0.755793000000000048110848638316 +-0.111712000000000005739408948102 0.0561559999999999975850428768354 -1.40867600000000003923616986867 +-0.111508999999999997010391439289 0.383072999999999996845190253225 1.35676799999999997403676843533 +-0.111486000000000001763922341524 -0.509736999999999995658583884506 -1.31443500000000002003730514843 +-0.110123999999999999666044914193 0.797772000000000036656899737864 -1.16251100000000007206324426079 +-0.109816999999999997950084207332 1.28262900000000001909938873723 0.585493999999999958916419018351 +-0.10951800000000000423483470513 -0.866384000000000042973624658771 -1.11237699999999994915356182901 +-0.107952000000000006285638676218 0.439545000000000019024781749977 -1.33983099999999999418776042148 +-0.107631000000000004446221169019 -0.390203000000000022051693804315 -1.35504899999999994797406088765 +-0.106376999999999999335642542064 1.07732000000000005535127911571 -0.909980000000000011084466677858 +-0.10570100000000000328714833131 -0.222668000000000004812150677935 -1.39256800000000002803801635309 +-0.105322999999999999953814722176 -0.699469000000000007410960733978 -1.22460199999999996833821569453 +-0.104400000000000006683542608243 0.330685999999999979959142137886 -1.37103899999999989667287536577 +-0.103523000000000003906208689841 0.0356759999999999993791632846296 -1.40996800000000011010570233339 +-0.102927000000000004598099678788 -0.784270000000000022666313270747 -1.17231700000000005346123543859 +-0.10259799999999999475797096693 0.206738000000000005096367772239 -1.39525399999999999423039298563 +-0.102326000000000000289546164822 -0.49540800000000001501732072029 1.32064399999999992907362411643 +-0.101974999999999996203037255782 1.40469500000000002692956968531 0.128189999999999998392397060343 +-0.101555999999999993499422146215 0.945331000000000032379432468588 -1.04691700000000009751488505572 +-0.100579000000000001735500632094 -0.375020000000000020001778011647 1.35986899999999999444355580636 +-0.0997730000000000005755396159657 1.07763600000000003831246431218 0.91035500000000002529532139306 +-0.0995609999999999967235098097262 1.40246300000000001517719283584 -0.152266000000000012448708730517 +-0.0983959999999999973541164877133 -0.202139999999999986357579473406 -1.39623000000000008213874025387 +-0.0983180000000000026139090891775 -0.228795999999999999374722392531 1.39211499999999999133137862373 +-0.0976029999999999953175233713409 -1.23275899999999993816857113416 -0.686132999999999992901678069757 +-0.0969580000000000025162094630105 -1.35380900000000004013145371573 0.397239999999999982005505216875 +-0.0967340000000000005409006575974 -1.1469560000000000865583160703 0.821664999999999978719245063985 +-0.0965670000000000000595079541199 0.0147229999999999999760191826681 -1.41083599999999997898214587622 +-0.0965079999999999965654140510196 0.0956229999999999996651567357731 1.40767299999999995208099790034 +-0.0964710000000000011954881529164 -1.40565899999999999181454768404 0.121712000000000000743405337289 +-0.096226000000000005973888050903 1.35216599999999997905320014979 0.402973999999999998866684336463 +-0.0962179999999999979731768462443 0.711122000000000031860736271483 -1.21862500000000006927791673661 +-0.0958050000000000012700951401712 0.0629789999999999933200101054354 1.40955900000000000638067376713 +-0.0956440000000000067892358401878 1.23486300000000004395417363412 -0.682617000000000029302782422747 +-0.0953259999999999940722972269214 1.34501899999999996460076090443 -0.42642499999999999849009668651 +-0.0952550000000000063327121324619 0.128207999999999988638421655196 1.40516499999999999737099187769 +-0.0949519999999999947393192201162 0.530619999999999980566656176961 -1.30745000000000000106581410364 +-0.0934439999999999992841281937217 -1.02448199999999989273646860966 0.970413999999999998813393631281 +-0.0931460000000000065689675921021 0.0304070000000000000006661338148 1.41081499999999993022470334836 +-0.092890000000000000346389583683 0.415011000000000018772539078782 1.34875400000000000844124770083 +-0.0927329999999999959880980782145 0.555606999999999962014385346265 1.29719000000000006522782314278 +-0.0925040000000000028901325777042 0.669660999999999950738072129752 1.24217500000000002913225216616 +-0.092344999999999996531663271071 -0.181147000000000002462030579409 -1.39952100000000001500666257925 +-0.0921919999999999961737273679319 -1.40226500000000009471534667682 -0.158598999999999989984900139461 +-0.0920490000000000058166804706161 0.160605999999999998761879282938 1.40204599999999990345145306492 +-0.0917170000000000068540728648259 -1.00574199999999991383958786173 -0.989985000000000003872457909893 +-0.0910740000000000021751489498456 0.62161299999999997112354321871 -1.26700499999999993683275079093 +-0.0908729999999999954463092421975 -0.00662000000000000001637578961322 -1.41127500000000005719869022869 +-0.0905429999999999984838794375719 -1.34364400000000006052403023205 -0.431767000000000011894485396624 +-0.0901610000000000050279780339224 -0.370172000000000001040945107889 -1.36192599999999996995825313206 +-0.0893349999999999977440268139617 -0.708811999999999997612576407846 1.22049399999999996779820321535 +-0.088543999999999997707611498754 -0.00196699999999999999844568776552 1.41143799999999997041300048295 +-0.0883430000000000048565595989203 -1.12912799999999990951948802831 -0.846914999999999973390174545784 +-0.0875719999999999970663466797305 -0.159770999999999996354915765551 -1.40242800000000000792965693108 +-0.0874359999999999998321342786767 -1.24964300000000005930189672654 0.656313000000000035250025121059 +-0.0869029999999999941406869652383 0.192688999999999999168664999161 1.39832700000000009765699360287 +-0.086869000000000001771027768882 -0.798862999999999989775290032412 1.16373199999999998865973793727 +-0.0866969999999999962891905624929 -0.490472000000000019070967027801 -1.32360100000000002751221472863 +-0.0864629999999999981907805590708 -0.0282699999999999999900079927784 -1.41128499999999990066612554074 +-0.0856480000000000019078072455159 -0.595067000000000012605028132384 -1.28006200000000003313971319585 +-0.085473999999999994425792237962 0.185676000000000007705835969318 -1.39936400000000005228173449723 +-0.0840950000000000030819791163594 -0.138096999999999997532640350073 -1.40494000000000007766232101858 +-0.083353999999999997538857599011 -0.0501399999999999970712316610388 -1.41086399999999989596233263001 +-0.0826540000000000052438053899095 -0.617252000000000022872370664118 1.26971199999999995178256995132 +-0.0820150000000000045652370772586 -0.0340140000000000025659474545137 1.41142400000000001192290710605 +-0.0819290000000000018243184740641 -0.116210999999999994858335128356 -1.40704800000000007642597665836 +-0.0815580000000000054916071690059 -0.0721450000000000007949196856316 -1.41001500000000001833200258261 +-0.0810820000000000012940759575031 -0.0941980000000000039506176108262 -1.40874100000000002097522155964 +-0.0799490000000000061719518384962 0.309952999999999978530951239009 -1.37751099999999992995469710877 +-0.0798370000000000051842974357896 0.224331000000000002625455408634 1.39402399999999992985522112576 +-0.0783250000000000057287508070658 -0.260614999999999985558218895676 1.38778399999999990654941939283 +-0.0776730000000000059268145946589 1.13108900000000001107025582314 -0.845342000000000037829295251868 +-0.0770949999999999968647301784586 0.419408999999999976271425339291 -1.34838900000000005974243322271 +-0.0765399999999999969269026678376 1.24823299999999992593302522437 0.660344999999999959783281155978 +-0.0760460000000000024833468614816 0.867461000000000037601921576425 1.11432899999999990292565144046 +-0.0759419999999999956186158556193 0.865314000000000027590374429565 -1.11600399999999999600674982503 +-0.0755060000000000036690650517812 -0.886028000000000037772451833007 1.09966099999999999958788521326 +-0.0751389999999999974589215412379 1.14677300000000004231992534187 0.82417600000000001969624463527 +-0.0739479999999999998427924197131 -0.349007000000000011663559007502 -1.36847600000000002573585788923 +-0.0737730000000000052384763193913 1.39628299999999994085442267533 0.212017000000000011006306976924 +-0.0735869999999999996331823126638 -0.0656079999999999996518340594776 1.41077300000000005475442321767 +-0.0728700000000000042144066014771 -0.930265000000000008562039965909 -1.06268399999999996197175278212 +-0.0727269999999999999795718963469 1.41070600000000001550404249429 -0.0679740000000000066382455088387 +-0.0723710000000000047704062922094 0.44562099999999998933830624992 1.34021799999999990937737948116 +-0.072133000000000002671640686458 0.94903300000000001546140993014 1.04600800000000004885691851086 +-0.0720009999999999955599960799191 -0.406073999999999990517807191281 1.35274500000000008625988812128 +-0.0708799999999999985611509600858 0.255406000000000021898927116126 1.38915199999999994240340583929 +-0.0708469999999999933137928564975 0.783228000000000035285552257847 1.17538699999999995959854004468 +-0.0703359999999999957465135480561 1.00669499999999989547916356969 -0.990766999999999953274709696416 +-0.0696259999999999934505723331313 0.163555000000000005933031843597 -1.40299799999999996735766671918 +-0.0693480000000000068594019353441 -1.27298500000000003318234576 -0.612128000000000005442757355922 +-0.0693030000000000034887648325821 -1.39742699999999997473310031637 0.20589799999999999768895975194 +-0.0688280000000000002913225216616 -0.681166000000000049219295306102 -1.23744699999999996364863363851 +-0.0688219999999999942907891181676 1.36968399999999990157562024251 -0.345293999999999989825028023915 +-0.0684659999999999990816235140301 1.2749449999999999949551465761 -0.608133000000000034646063795662 +-0.0681419999999999942419393050841 -1.32936499999999990784260717192 0.477646999999999988251175864207 +-0.0667360000000000036513014833872 -0.525585999999999997633892689919 1.31122300000000002739852789091 +-0.0657070000000000015161205624281 1.32765099999999991453591974278 0.48272799999999999043254206299 +-0.0656510000000000010222933610748 -1.41073699999999990772892033419 -0.074236999999999997434940723906 +-0.0636459999999999942454920187629 0.584941999999999961978858209477 1.28599899999999989219645613048 +-0.063600000000000003752553823233 -1.36852599999999990920684922457 -0.35084599999999999120348093129 +-0.0632910000000000000364153152077 -0.0966240000000000015534240560555 1.40948899999999999188560195762 +-0.0631430000000000046789239149803 -0.469590999999999980651921305252 -1.33247800000000005127276381245 +-0.0625600000000000044941828036826 -0.85013199999999999878497192185 -1.12843300000000001936939497682 +-0.0624180000000000012594369991348 -1.09887200000000007094058673829 0.888023000000000006792788553867 +-0.0611449999999999979638509728375 -0.766649000000000024890312033676 -1.1868069999999999453166310559 +-0.0600670000000000023354651546015 0.285791999999999990489385481851 1.38373199999999996201438534627 +-0.0593810000000000032249758419312 1.02661699999999989074694894953 0.970840999999999954006568714249 +-0.0590550000000000033240077357277 -0.326790999999999998149036173345 -1.37467099999999997628208348033 +-0.0587840000000000029167779302952 0.510149999999999992361665590579 -1.31768400000000007743494734314 +-0.0584469999999999989537258215933 0.780464000000000046597392611147 -1.17790499999999997982058630441 +-0.0582589999999999982871479176083 -1.06303199999999997693578279723 -0.930895999999999945728745842644 +-0.0577449999999999977196019074199 -1.17846800000000007102585186658 -0.779665999999999970171415952791 +-0.0567589999999999969548802880581 0.287677000000000016033396832427 -1.38348099999999996079225184076 +-0.0564879999999999965476504826256 -0.291094999999999992645882684883 1.38277699999999992286348060588 +-0.0564230000000000009308109838457 0.697702000000000044366288420861 1.22883199999999992435562035098 +-0.0560739999999999988444798759701 -1.21023900000000006471623237303 0.729504000000000041303849229735 +-0.0556620000000000031414870704793 -0.57474300000000000387956333725 -1.2909580000000000499227326145 +-0.0556509999999999990794030679808 -0.968976999999999977219999891531 1.02858500000000008256506589532 +-0.055115999999999998326671857285 0.140462000000000003518962898852 -1.40614100000000008527933914593 +-0.0511689999999999992064125819979 -0.126939999999999997282174035718 1.40757500000000002060573933704 +-0.0500309999999999990838439600793 0.474783000000000010576428621789 1.3311939999999999884039425524 +-0.049611000000000002319033853837 0.601508999999999960373031626659 -1.27895500000000006401990049199 +-0.0495579999999999978865794503236 0.692077999999999970981434671558 -1.2323040000000000659952092974 +-0.0486639999999999989244159337431 1.18039500000000008306244581036 -0.777367999999999947924322896142 +-0.0474670000000000022466473126315 0.397305999999999992500221424052 -1.35642700000000004934008757118 +-0.0474400000000000029998226125372 0.315369999999999983675280645912 1.37778500000000003744560217456 +-0.045606000000000000704769576032 1.41338099999999999845101683604 0.0165860000000000000486277684786 +-0.0455419999999999991491250739273 -0.303611999999999992994048625405 -1.38048700000000001963940121641 +-0.0452789999999999998037125692463 1.38236000000000003318234576 0.295007000000000019213075574953 +-0.0429609999999999991882049243941 1.20891100000000006886580194987 0.732589999999999963442576245143 +-0.0420470000000000010409451078885 1.38894500000000009620748642192 -0.262801000000000006817657549618 +-0.0420000000000000026090241078691 0.116487999999999994327204433375 -1.40878199999999997871213963663 +-0.0418620000000000033746339056506 -1.3836800000000000210320649785 0.289271000000000000351718654201 +-0.0416520000000000015227819005759 -0.435226000000000001755040557327 1.34493200000000001637090463191 +-0.0414800000000000029798385980939 -0.735897000000000023334223442362 1.20695299999999994255972524115 +-0.0414609999999999978559372948439 0.929440000000000043911541069974 -1.06509300000000006747313818778 +-0.0410179999999999989057641869294 1.30999700000000007804601409589 -0.53125 +-0.0409170000000000019801937867214 -0.447174999999999989164223279658 -1.34102999999999994429344951641 +-0.0408200000000000021160850849355 -1.30818600000000007099743015715 -0.535707999999999961993069064192 +-0.0400550000000000003264055692398 -0.645050000000000012256862191862 1.25789700000000004287414867576 +-0.039056000000000000438316050122 -1.29967399999999999593569555145 0.556167999999999995708321876009 +-0.0388500000000000025868196473766 -1.4136409999999999254072235999 0.0104169999999999991768806495429 +-0.0388389999999999985247356448781 1.0640849999999999475619461009 -0.930706000000000033267610888288 +-0.0382170000000000009698908343125 1.09894099999999994565769156907 0.889306999999999958639307351405 +-0.0372689999999999965751840136363 -0.156434999999999990727417298331 1.40504099999999998438227066799 +-0.0364060000000000008602007994796 -1.38800600000000007305800409085 -0.268540999999999974168218841442 +-0.0359340000000000006630251903061 -0.990473000000000047826631544012 -1.00879699999999994375343703723 +-0.0349290000000000017132961716015 1.29789599999999993862331848504 0.560576999999999991963761658553 +-0.03492100000000000065147887085 0.263946999999999987185361760567 -1.38892499999999996518340594776 +-0.0338969999999999965778485488954 -0.824547000000000029906743748143 1.14846599999999998686917024315 +-0.0335470000000000004303224443447 -0.66047599999999995201704905412 -1.25005799999999989147170254 +-0.0334619999999999986894927417325 -0.27956100000000000393995946979 -1.38590300000000010705036856962 +-0.0330490000000000019864110356593 0.344021999999999994468424802108 1.37133400000000005292122295941 +-0.0328939999999999996282973313555 -0.320114999999999982893683636576 1.37711399999999994925303781201 +-0.0328210000000000029496405318241 0.61226899999999995216626302863 1.27438199999999990374988101394 +-0.0303320000000000013218315331187 0.0917290000000000049773518639995 -1.41091000000000010849987575057 +-0.0294510000000000014830359162943 -0.553401000000000031775471143192 1.30110700000000001352873368887 +-0.0278559999999999988173904341693 -1.04645000000000010231815394945 0.950876000000000054512838687515 +-0.0278009999999999993236521333984 0.808471999999999968444797104894 1.15999999999999992006394222699 +-0.0277580000000000014226397837547 0.891677999999999970626163303677 1.09733299999999989182697390788 +-0.0269919999999999986328713674766 -0.552459999999999951114659779705 -1.30156000000000005023537141824 +-0.0269199999999999994848565165739 -1.22315700000000004976641321264 -0.709339999999999970548003602744 +-0.0259600000000000004363176486777 0.50238199999999999523225824305 1.32171799999999994845722994796 +-0.024572000000000000091704421834 -1.11612700000000009126210898103 -0.868133999999999961261210046359 +-0.0244919999999999998818722701799 -1.16605899999999995664268226392 0.799815999999999971414865740371 +-0.023869000000000001326938559032 0.487366000000000021419310769488 -1.32736699999999996357757936494 +-0.022863000000000001377120639745 -0.254732000000000013972822898722 -1.39089499999999999246824700094 +-0.0219470000000000012296830220748 -0.912638999999999978030018610298 -1.08009599999999994501820310688 +-0.0216450000000000010447198661723 -0.184993999999999991779020547256 1.40189499999999989121590715513 +-0.0205539999999999993540722442731 -0.746291000000000037672975850001 -1.20109400000000010599876532069 +-0.0204450000000000013666845433136 0.846725999999999978662401645124 -1.13253599999999998715338733746 +-0.020156000000000000305089287167 0.0662810000000000065778493762991 -1.41251600000000010481926437933 +-0.0201050000000000013422596367718 -0.423312999999999994837907024703 -1.34922300000000006114930783951 +-0.0194620000000000001327826737452 1.225041000000000046554760047 -0.706324999999999980637710450537 +-0.0191869999999999991946442179369 0.373325999999999991185717362896 -1.36391400000000007075584562699 +-0.018753999999999999837019259985 0.971546000000000020691004465334 1.02749599999999996491339970817 +-0.0186869999999999987505550080868 0.72327900000000000524380538991 1.21511999999999997790212091786 +-0.0183049999999999983557597005301 1.41047799999999989850607562403 0.101080000000000003179678742526 +-0.0176380000000000008997247391562 -0.909645999999999954610530039645 1.08269600000000010275869044563 +-0.0169519999999999983197884745323 0.371634999999999993125499031521 1.36440500000000008995471034723 +-0.0167269999999999988138377204905 -0.83080200000000004045830337418 -1.14432800000000001183764197776 +-0.0166080000000000012339018695684 1.36298199999999991582910752186 0.376832999999999973539388520294 +-0.0151050000000000003708144902248 1.40272400000000008191136657842 -0.179270000000000012674306049121 +-0.0145220000000000001860733789272 0.238856000000000012750689393215 -1.39382099999999997663735484821 +-0.0142550000000000003097522238704 -1.36447099999999998942712409189 0.371503000000000027647217848425 +-0.0137859999999999996433963644904 -0.229225000000000012079226507922 -1.39544500000000004646949491871 +-0.0134079999999999997795097073094 1.33987799999999990241406067071 -0.452268999999999976591169570383 +-0.0121300000000000001570965579845 -1.33822499999999999786837179272 -0.457172999999999996045829675495 +-0.0118960000000000003239630785856 -1.41096700000000008223821623687 0.0950300000000000033573144264665 +-0.0115139999999999999291677710289 0.0402450000000000029931612743894 -1.41359400000000001718092335068 +-0.00981600000000000007249756350802 -1.26485399999999992282084804174 0.632494000000000000660804744257 +-0.00965399999999999938737893501184 -0.462359000000000019969803588538 1.33646200000000003882405508193 +-0.00938300000000000071487260555614 0.578741999999999978676612499839 -1.29033700000000006724576451234 +-0.00921300000000000070266015228526 1.16481799999999990902210811328 0.801943999999999990180299391795 +-0.00906900000000000067190697450314 -1.40200799999999992095922607405 -0.185177000000000008261835660051 +-0.00784600000000000054323212594909 0.759811000000000014154011296341 -1.19273800000000007592859674332 +-0.00772899999999999975930364826127 0.0950980000000000019744206269934 1.41099100000000010624034985085 +-0.00763600000000000042610359685114 -0.347561999999999982069454063094 1.3708180000000000919868625715 +-0.00718799999999999994493293797859 1.11727700000000007563016879431 -0.866971999999999964892083426093 +-0.00713800000000000024746871218895 0.0676960000000000061692873032371 1.41257399999999999629096691933 +-0.00681600000000000001004751837286 0.989897999999999944620299174858 -1.00997800000000004239097961545 +-0.00667699999999999977556841557202 0.122451000000000004286349053473 1.40888700000000000045474735089 +-0.00626700000000000000122124532709 -0.203138999999999986245668992524 -1.39953400000000005576339390245 +-0.00490699999999999990352161916007 0.0403529999999999999804600747666 1.41362900000000002442845925543 +-0.0044390000000000002372546603624 0.0137240000000000000879296635503 -1.4141399999999999526067995248 +-0.0043579999999999998946953461143 -0.212504999999999999449329379786 1.39815000000000000390798504668 +-0.00407400000000000036409764092582 0.670024999999999981703524554177 -1.24541199999999996350652509136 +-0.00401199999999999994126920199733 1.26301899999999989177013048902 0.636213000000000028499869131338 +-0.00398499999999999982708276391463 0.149647000000000002239985974484 1.40626800000000007351275144174 +-0.0011429999999999999188426968999 1.04677299999999995350208337186 0.950927999999999995495159055281 +-0.00104300000000000009023337632641 0.013176999999999999477195977704 1.41415200000000007563016879431 +-0.000790000000000000012108369862318 -0.398100000000000009414691248821 -1.35702499999999992574828411307 +-0.000380999999999999991017601841392 0.637480999999999964344965519558 1.26238600000000000811439804238 +-0.000335999999999999981407233784481 -0.176578000000000012725820397463 -1.40314699999999992208188359655 +-0.000251999999999999999607952494429 0.528309000000000028585134259629 1.31182700000000007634071153007 +0.000250999999999999975301007149042 -0.528307999999999999829469743418 -1.31182700000000007634071153007 +0.000335000000000000011310397063369 0.176579000000000013725909298046 1.40314699999999992208188359655 +0.00038000000000000002092076512028 -0.637480000000000046611603465863 -1.26238600000000000811439804238 +0.000790000000000000012108369862318 0.398100000000000009414691248821 1.35702499999999992574828411307 +0.00104199999999999995750621373247 -0.013176999999999999477195977704 -1.41415200000000007563016879431 +0.0011429999999999999188426968999 -1.04677200000000003576872131816 -0.950929000000000024250823571492 +0.00398399999999999969435560132069 -0.149647000000000002239985974484 -1.40626800000000007351275144174 +0.00401199999999999994126920199733 -1.26301899999999989177013048902 -0.636213999999999946233231185033 +0.00407300000000000023137047833188 -0.670026000000000010459189070389 1.24541100000000004577316303767 +0.00435699999999999976196818352037 0.212503999999999998449240479204 -1.39815000000000000390798504668 +0.00443699999999999997180033517452 -0.0137240000000000000879296635503 1.4141399999999999526067995248 +0.0049049999999999996380672939722 -0.0403529999999999999804600747666 -1.41362900000000002442845925543 +0.00626599999999999986849408273315 0.203139999999999987245757893106 1.39953400000000005576339390245 +0.00667500000000000037747582837255 -0.122451000000000004286349053473 -1.40888700000000000045474735089 +0.00681600000000000001004751837286 -0.989898999999999973375963691069 1.00997699999999990261301263672 +0.00713700000000000011474154959501 -0.0676960000000000061692873032371 -1.41257399999999999629096691933 +0.00718699999999999981220577538465 -1.117277999999999993363530848 0.866971000000000047158721372398 +0.00763600000000000042610359685114 0.34756100000000000882494077814 -1.3708180000000000919868625715 +0.00772700000000000036121106106179 -0.0950980000000000019744206269934 -1.41099100000000010624034985085 +0.00784600000000000054323212594909 -0.759812000000000042909675812552 1.19273800000000007592859674332 +0.00906900000000000067190697450314 1.40200799999999992095922607405 0.185176000000000007261746759468 +0.00921300000000000070266015228526 -1.16481699999999999128874605958 -0.801945000000000018935963908007 +0.0093819999999999997147837049738 -0.578743000000000007432277016051 1.29033700000000006724576451234 +0.0096530000000000001220135104063 0.462357999999999991214139072326 -1.33646200000000003882405508193 +0.00981600000000000007249756350802 1.26485300000000000508748598804 -0.632495000000000029416469260468 +0.011511999999999999663713445841 -0.0402450000000000029931612743894 1.41359400000000001718092335068 +0.0118949999999999993238741780033 1.41096700000000008223821623687 -0.0950320000000000053574922276312 +0.0121300000000000001570965579845 1.33822499999999999786837179272 0.457172000000000022801316390542 +0.0134070000000000005141442827039 -1.33987799999999990241406067071 0.45226800000000000334665628543 +0.0137839999999999993779420393025 0.229225000000000012079226507922 1.39544500000000004646949491871 +0.0142550000000000003097522238704 1.36447099999999998942712409189 -0.371504000000000000891731133379 +0.0145209999999999991859844783448 -0.238857000000000013750778293797 1.39382099999999997663735484821 +0.0151050000000000003708144902248 -1.40272400000000008191136657842 0.179269000000000011674217148538 +0.0166070000000000002338129689861 -1.36298199999999991582910752186 -0.376834000000000002295053036505 +0.0167269999999999988138377204905 0.830802999999999958191665427876 1.14432800000000001183764197776 +0.0169510000000000007891465259036 -0.371634000000000019880985746568 -1.36440500000000008995471034723 +0.0176369999999999998996358385739 0.909645999999999954610530039645 -1.08269700000000002049205249932 +0.0183040000000000008251177519014 -1.41047799999999989850607562403 -0.101081000000000004179767643109 +0.0186869999999999987505550080868 -0.72327900000000000524380538991 -1.21512099999999989563548297156 +0.018753999999999999837019259985 -0.971544999999999991935339949123 -1.02749599999999996491339970817 +0.0191860000000000016640022693082 -0.373325999999999991185717362896 1.36391299999999993097787864826 +0.0194620000000000001327826737452 -1.2250419999999999642881221007 0.706323999999999951882045934326 +0.0201040000000000003421707361895 0.423314000000000023593571540914 1.34922300000000006114930783951 +0.0201549999999999993050003865847 -0.0662810000000000065778493762991 1.41251600000000010481926437933 +0.0204450000000000013666845433136 -0.846727000000000007418066161335 1.13253500000000006942002528376 +0.0205539999999999993540722442731 0.746291999999999955406337903696 1.20109299999999996622079834196 +0.0216429999999999990445420650076 0.184993999999999991779020547256 -1.40189499999999989121590715513 +0.0219460000000000002295941214925 0.912640000000000006785683126509 1.08009500000000002728484105319 +0.0228609999999999993769428385804 0.254732999999999987217336183676 1.39089499999999999246824700094 +0.023869000000000001326938559032 -0.487366999999999994663824054442 1.32736699999999996357757936494 +0.0244909999999999988817833695975 1.16605899999999995664268226392 -0.799817000000000000170530256582 +0.0245709999999999990916155212517 1.11612800000000000899547103472 0.868133000000000043527847992664 +0.0259589999999999994362287480953 -0.50238199999999999523225824305 -1.32171799999999994845722994796 +0.0269199999999999994848565165739 1.22315700000000004976641321264 0.709339000000000052814641549048 +0.0269910000000000011022294188479 0.552460999999999979870324295916 1.30156000000000005023537141824 +0.0277570000000000004225508831723 -0.891677000000000052892801249982 -1.09733400000000003160494088661 +0.027799999999999998323563232816 -0.808471000000000050711435051198 -1.16000100000000005984190920572 +0.0278559999999999988173904341693 1.04644899999999996254018697073 -0.95087699999999997224620074121 +0.0294500000000000004829470157119 0.553401000000000031775471143192 -1.30110700000000001352873368887 +0.0303310000000000003217426325364 -0.0917290000000000049773518639995 1.41091000000000010849987575057 +0.0328200000000000019495516312418 -0.612268000000000034432900974934 -1.27438199999999990374988101394 +0.0328929999999999986282084307732 0.320114999999999982893683636576 -1.37711500000000008903100479074 +0.033048000000000000986322135077 -0.344021000000000021223911517154 -1.37133400000000005292122295941 +0.0334609999999999976894038411501 0.27956100000000000393995946979 1.38590300000000010705036856962 +0.0335459999999999994302335437624 0.660476999999999980772713570332 1.25005799999999989147170254 +0.0338960000000000025166535522203 0.824546000000000001151079231931 -1.14846599999999998686917024315 +0.0349199999999999996513899702677 -0.263948000000000015941026276778 1.38892499999999996518340594776 +0.0349280000000000007132072710192 -1.29789500000000002088995643135 -0.560578000000000020719426174765 +0.0359340000000000006630251903061 0.990473999999999965559993597708 1.00879699999999994375343703723 +0.0364060000000000008602007994796 1.38800600000000007305800409085 0.268540000000000000923705556488 +0.0372670000000000015139001163789 0.156434999999999990727417298331 -1.40504099999999998438227066799 +0.0382159999999999999698019337302 -1.09894000000000002792432951537 -0.889307999999999987394971867616 +0.0388379999999999975246467442958 -1.06408600000000008733991307963 0.930705000000000004511946372077 +0.0388500000000000025868196473766 1.4136409999999999254072235999 -0.0104180000000000001769695501252 +0.039056000000000000438316050122 1.29967300000000007820233349776 -0.55616900000000002446398639222 +0.0400550000000000003264055692398 0.64504899999999998350119767565 -1.25789799999999996060751072946 +0.0408190000000000011159961843532 1.30818600000000007099743015715 0.535707000000000044259707010497 +0.0409160000000000009801048861391 0.44717600000000001791988779587 1.34102900000000002656008746271 +0.0410169999999999979056752863471 -1.30999700000000007804601409589 0.531248000000000053510973430093 +0.0414609999999999978559372948439 -0.929440000000000043911541069974 1.06509199999999992769517120905 +0.0414790000000000019797496975116 0.73589599999999999457855892615 -1.20695299999999994255972524115 +0.0416520000000000015227819005759 0.435224999999999972999376041116 -1.34493299999999993410426668561 +0.0418620000000000033746339056506 1.3836790000000001032987029248 -0.289271999999999973596231939155 +0.0419990000000000016089352072868 -0.116488999999999995327293333958 1.40878199999999997871213963663 +0.0420460000000000000408562073062 -1.38894500000000009620748642192 0.262799999999999978061993033407 +0.0429609999999999991882049243941 -1.20891100000000006886580194987 -0.732590999999999992198240761354 +0.0452789999999999998037125692463 -1.38236000000000003318234576 -0.295007999999999992457588859907 +0.0455409999999999981490361733449 0.303613000000000021749713141617 1.38048700000000001963940121641 +0.0456049999999999997046806754497 -1.41338099999999999845101683604 -0.0165870000000000010487166690609 +0.0474390000000000019997337119548 -0.315369000000000010430767360958 -1.37778500000000003744560217456 +0.0474670000000000022466473126315 -0.397307000000000021255885940263 1.35642700000000004934008757118 +0.0486639999999999989244159337431 -1.18039500000000008306244581036 0.777367000000000030190960842447 +0.0495579999999999978865794503236 -0.692078999999999999737099187769 1.23230299999999992621724231867 +0.0496100000000000013189449532547 -0.60150999999999998912869614287 1.27895399999999992424193351326 +0.050029999999999998083755059497 -0.474783000000000010576428621789 -1.33119499999999990613730460609 +0.0511679999999999982063236814156 0.126938999999999996282085135135 -1.40757500000000002060573933704 +0.0551149999999999973265829567026 -0.140462000000000003518962898852 1.40614100000000008527933914593 +0.0556499999999999980793141673985 0.96897599999999994846433537532 -1.02858600000000000029842794902 +0.0556620000000000031414870704793 0.574744000000000032635227853461 1.2909580000000000499227326145 +0.0560739999999999988444798759701 1.21023900000000006471623237303 -0.72950499999999995903721128343 +0.0564219999999999999307220832634 -0.697701000000000015610623904649 -1.22883199999999992435562035098 +0.0564870000000000024864554859505 0.29109400000000001940136939993 -1.38277800000000006264144758461 +0.056758000000000002893685291383 -0.28767799999999998927791011738 1.38348099999999996079225184076 +0.0577449999999999977196019074199 1.17846800000000007102585186658 0.779665000000000052438053899095 +0.0582589999999999982871479176083 1.06303299999999989466914485092 0.930895000000000027995383788948 +0.0584469999999999989537258215933 -0.780464999999999964330754664843 1.17790400000000006208722425072 +0.0587830000000000019166890297129 -0.51015100000000002111733010679 1.31768400000000007743494734314 +0.0590540000000000023239188351454 0.326792000000000026904700689556 1.37467099999999997628208348033 +0.0593800000000000022248869413488 -1.02661599999999997301358689583 -0.970840999999999954006568714249 +0.0600660000000000013353762540191 -0.285791999999999990489385481851 -1.38373199999999996201438534627 +0.0611449999999999979638509728375 0.766650000000000053645976549888 1.18680600000000002758326900221 +0.0624180000000000012594369991348 1.09887099999999993116261975956 -0.888024000000000035548453070078 +0.0625600000000000044941828036826 0.850133000000000027540636438061 1.12843200000000010163603292312 +0.0631420000000000036788350143979 0.469592000000000009407585821464 1.33247800000000005127276381245 +0.0632899999999999990363264146254 0.0966240000000000015534240560555 -1.40948899999999999188560195762 +0.063600000000000003752553823233 1.36852599999999990920684922457 0.350845000000000017958967646337 +0.0636449999999999932454031181805 -0.584941000000000044245496155781 -1.28599899999999989219645613048 +0.0656500000000000000222044604925 1.41073699999999990772892033419 0.0742359999999999964348518233237 +0.0657060000000000005160316618458 -1.32764999999999999680255768908 -0.482729000000000019188206579202 +0.0667350000000000026512125828049 0.525585999999999997633892689919 -1.31122300000000002739852789091 +0.0681419999999999942419393050841 1.32936399999999999010924511822 -0.477648000000000017006840380418 +0.0684659999999999990816235140301 -1.2749459999999999126885086298 0.608132000000000005890399279451 +0.0688219999999999942907891181676 -1.36968399999999990157562024251 0.345293000000000016580514738962 +0.0688269999999999992912336210793 0.681167999999999995708321876009 1.23744600000000004591527158482 +0.0693030000000000034887648325821 1.39742699999999997473310031637 -0.205898999999999998689048652523 +0.0693480000000000068594019353441 1.27298500000000003318234576 0.612126999999999976687092839711 +0.0696250000000000063282712403634 -0.163555000000000005933031843597 1.40299700000000004962430466549 +0.0703359999999999957465135480561 -1.00669600000000003525713054842 0.99076600000000003554134764272 +0.0708460000000000061914917637296 -0.783225999999999977774223225424 -1.17538800000000009937650702341 +0.0708789999999999975610620595035 -0.255404999999999993143262599915 -1.38915199999999994240340583929 +0.0719999999999999945599071793367 0.406073999999999990517807191281 -1.35274500000000008625988812128 +0.0721320000000000016715517858756 -0.94903300000000001546140993014 -1.04600899999999996659028056456 +0.072370000000000003770317391627 -0.445620000000000016093792964966 -1.34021799999999990937737948116 +0.0727259999999999989794829957646 -1.41070500000000009777068044059 0.0679730000000000056381566082564 +0.0728700000000000042144066014771 0.930265000000000008562039965909 1.06268399999999996197175278212 +0.0735849999999999976330045114992 0.0656079999999999996518340594776 -1.41077300000000005475442321767 +0.0737730000000000052384763193913 -1.39628299999999994085442267533 -0.212018000000000012006395877506 +0.0739459999999999978426146185484 0.349007999999999984908072292455 1.36847500000000010800249583554 +0.0751379999999999964588326406556 -1.14677199999999990254195836314 -0.824177000000000048451909151481 +0.0755060000000000036690650517812 0.886027000000000009016787316796 -1.09966099999999999958788521326 +0.0759419999999999956186158556193 -0.865314000000000027590374429565 1.11600300000000007827338777133 +0.0760450000000000014832579608992 -0.867460000000000008846257060213 -1.11432899999999990292565144046 +0.0765399999999999969269026678376 -1.24823299999999992593302522437 -0.66034599999999998853894567219 +0.0770939999999999958646412778762 -0.419410000000000005027089855503 1.34838900000000005974243322271 +0.0776730000000000059268145946589 -1.13108999999999992880361787684 0.845341000000000009073630735656 +0.0783240000000000047286619064835 0.260614000000000012313705610723 -1.38778399999999990654941939283 +0.0798360000000000041842085352073 -0.224330000000000001625366508051 -1.39402399999999992985522112576 +0.0799480000000000051718629379138 -0.30995400000000000728661575522 1.37751099999999992995469710877 +0.0810810000000000002939870569207 0.0941980000000000039506176108262 1.40874100000000002097522155964 +0.0815560000000000034914293678412 0.0721450000000000007949196856316 1.41001500000000001833200258261 +0.0819280000000000008242295734817 0.116210999999999994858335128356 1.40704800000000007642597665836 +0.0820140000000000035651481766763 0.0340140000000000025659474545137 -1.41142400000000001192290710605 +0.0826530000000000042437164893272 0.617250999999999994116706147906 -1.26971199999999995178256995132 +0.0833519999999999955386797978463 0.0501399999999999970712316610388 1.41086399999999989596233263001 +0.0840940000000000020818902157771 0.138096999999999997532640350073 1.40494000000000007766232101858 +0.0854729999999999934257033373797 -0.185677000000000008705924869901 1.39936400000000005228173449723 +0.0856470000000000009077183449335 0.595068000000000041360692648595 1.28006200000000003313971319585 +0.0864619999999999971906916584885 0.0282699999999999999900079927784 1.41128499999999990066612554074 +0.0866969999999999962891905624929 0.490472999999999992315480312755 1.32360100000000002751221472863 +0.0868680000000000007709388682997 0.798861999999999961019625516201 -1.16373199999999998865973793727 +0.0869019999999999931405980646559 -0.192688999999999999168664999161 -1.39832700000000009765699360287 +0.0874349999999999988320453780943 1.24964300000000005930189672654 -0.656313999999999952983387174754 +0.0875699999999999950661688785658 0.159770999999999996354915765551 1.40242800000000000792965693108 +0.0883430000000000048565595989203 1.12912900000000004929745500704 0.846913999999999944634510029573 +0.0885429999999999967075225981716 0.00196699999999999999844568776552 -1.41143799999999997041300048295 +0.0893339999999999967439379133793 0.708810999999999968856911891635 -1.22049399999999996779820321535 +0.0901600000000000040278891333401 0.370172999999999974285458392842 1.36192599999999996995825313206 +0.0905429999999999984838794375719 1.34364400000000006052403023205 0.431765999999999983138820880413 +0.0908719999999999944462203416151 0.00662000000000000001637578961322 1.41127500000000005719869022869 +0.0910740000000000021751489498456 -0.621613999999999999879207734921 1.26700499999999993683275079093 +0.0917170000000000068540728648259 1.00574300000000005361755484046 0.989983999999999975116793393681 +0.0920470000000000038165026694514 -0.160604999999999997761790382356 -1.40204599999999990345145306492 +0.0921919999999999961737273679319 1.40226500000000009471534667682 0.158597999999999988984811238879 +0.0923429999999999945314854699063 0.181147000000000002462030579409 1.39952100000000001500666257925 +0.0925030000000000018900436771219 -0.669660000000000033004710076057 -1.24217500000000002913225216616 +0.0927319999999999949880091776322 -0.555606000000000044281023292569 -1.29719000000000006522782314278 +0.0928889999999999993463006831007 -0.415009999999999990016874562571 -1.34875499999999992617460975453 +0.0931450000000000055688786915198 -0.0304070000000000000006661338148 -1.41081499999999993022470334836 +0.0934439999999999992841281937217 1.02448199999999989273646860966 -0.970415000000000027569058147492 +0.0949509999999999937392303195338 -0.530621000000000009322320693173 1.30745000000000000106581410364 +0.0952540000000000053326232318796 -0.128207999999999988638421655196 -1.40516499999999999737099187769 +0.0953259999999999940722972269214 -1.34501899999999996460076090443 0.426424000000000025245583401556 +0.0956440000000000067892358401878 -1.23486300000000004395417363412 0.682616000000000000547117906535 +0.0958029999999999992699173390065 -0.0629789999999999933200101054354 -1.40955900000000000638067376713 +0.0962179999999999979731768462443 -0.711122999999999949594098325178 1.21862399999999992949994975788 +0.0962250000000000049737991503207 -1.35216599999999997905320014979 -0.402975000000000027622348852674 +0.0964710000000000011954881529164 1.40565999999999990954790973774 -0.121714000000000002743583138454 +0.0965069999999999955653251504373 -0.0956229999999999996651567357731 -1.40767299999999995208099790034 +0.0965659999999999990594190535376 -0.0147229999999999999760191826681 1.41083599999999997898214587622 +0.096732999999999999540811757015 1.1469560000000000865583160703 -0.821666000000000007474909580196 +0.0969580000000000025162094630105 1.35380900000000004013145371573 -0.397241000000000010761169733087 +0.0976029999999999953175233713409 1.23276000000000007794653811288 0.686131999999999964146013553545 +0.0983170000000000016138201885951 0.228795999999999999374722392531 -1.39211599999999990906474067742 +0.0983939999999999953539386865486 0.202139999999999986357579473406 1.39623000000000008213874025387 +0.0995609999999999967235098097262 -1.40246300000000001517719283584 0.152265000000000011448619829935 +0.0997719999999999995754507153833 -1.07763600000000003831246431218 -0.91035500000000002529532139306 +0.100578000000000000735411731512 0.375018999999999991246113495436 -1.35986899999999999444355580636 +0.101555999999999993499422146215 -0.945331999999999950112794522283 1.04691599999999995773691807699 +0.1019739999999999952029483552 -1.40469500000000002692956968531 -0.128190999999999999392485960925 +0.102326000000000000289546164822 0.495406999999999986261656204078 -1.32064399999999992907362411643 +0.102596999999999993757882066348 -0.206739000000000006096456672822 1.39525399999999999423039298563 +0.102927000000000004598099678788 0.784271000000000051421977786958 1.17231599999999991368326845986 +0.103521000000000001906030888676 -0.035677000000000000379252185212 1.40996800000000011010570233339 +0.104399000000000005683453707661 -0.330687000000000008714806654098 1.37103899999999989667287536577 +0.105321999999999998953725821593 0.699470999999999953899987303885 1.22460100000000005060485364083 +0.105700000000000002287059430728 0.222668000000000004812150677935 1.39256800000000002803801635309 +0.106375999999999998335553641482 -1.07732099999999997308464116941 0.909980000000000011084466677858 +0.107630000000000003446132268436 0.390203999999999995296207089268 1.35504899999999994797406088765 +0.107952000000000006285638676218 -0.43954599999999999226929503493 1.33983000000000007645439836779 +0.10951800000000000423483470513 0.866385999999999989462651228678 1.11237699999999994915356182901 +0.10981599999999999694999530675 -1.28262800000000010136602668354 -0.585494999999999987672083534562 +0.110123999999999999666044914193 -0.797772999999999954390261791559 1.16250999999999993228527728206 +0.111485000000000000763833440942 0.509738000000000024414248400717 1.31443500000000002003730514843 +0.111507999999999996010302538707 -0.383072000000000023600676968272 -1.35676899999999989177013048902 +0.11171100000000000473932004752 -0.0561569999999999985851317774177 1.40867600000000003923616986867 +0.111763000000000001232791646544 -1.19007799999999996920507783216 -0.755793999999999965844210692012 +0.112240000000000006430411758629 -0.755168999999999979166886987514 -1.19042899999999995941379893338 +0.114229999999999998205879592206 0.242650000000000004574118861456 1.38855100000000009075051821128 +0.116222000000000005859313034762 -1.00264299999999995094412952312 -0.990554999999999963300467697991 +0.116388000000000005340616837657 0.19576399999999999357314095505 -1.39575500000000007894129794295 +0.116816000000000003167244244651 0.944011000000000044529713250085 -1.04651699999999991952392974781 +0.116829000000000002290612144407 0.613354999999999983550935667154 1.26891599999999993286792232539 +0.117127999999999996005861646609 1.31346000000000007190692485892 0.510982000000000047279513637477 +0.118370000000000002993161274389 1.38825899999999990974686170375 0.242332999999999992857269148772 +0.118452000000000001733724275255 1.28411499999999989540810929611 -0.580532999999999965723418426933 +0.118592000000000002968292278638 1.07533300000000009433165359951 0.91082099999999999173638798311 +0.119968000000000005189626506308 -0.524378000000000010771827874123 -1.30791199999999996350652509136 +0.120927999999999993829824518343 -0.226658999999999999364064251495 1.39068400000000003124966951873 +0.121101000000000000311750625315 -0.0760829999999999978532727595848 1.40696299999999996366284449323 +0.121453000000000005398348434937 -1.31504500000000001946887095983 0.505871999999999988339993706177 +0.122443999999999997285726749396 -1.18990700000000004799005637324 0.754406000000000021010748696426 +0.122726000000000001755040557327 -0.840084000000000052921222959412 -1.13101600000000002133049292752 +0.123258000000000006446398970184 1.40834499999999995800692431658 -0.0370479999999999976001419099703 +0.123553999999999997161381770638 0.586739000000000010537348771322 -1.28080900000000008631673154014 +0.123951000000000005618616683023 0.262006000000000016658674439896 1.38419300000000000672173428029 +0.123990000000000002988720382291 -0.923024999999999984368059813278 -1.06426099999999990153298767837 +0.124812000000000006272315999922 0.944482999999999961460162012372 1.0451660000000000394493326894 +0.125392000000000003456790409473 1.37291000000000007474909580196 -0.315267999999999992688515249029 +0.125472000000000000197175609173 1.18766900000000008574829735153 0.757429000000000018921753053291 +0.126001000000000001888267320282 -1.38868600000000008698464171175 0.235955999999999999072741729833 +0.126288000000000011358025631125 0.409021000000000023444357566405 1.34786999999999990151877682365 +0.126364000000000004098055228496 -1.37134500000000003616662525019 -0.321631000000000000227373675443 +0.126787000000000010802025940393 -0.639264999999999972146724758204 -1.25509500000000007169376203819 +0.127273999999999998244959442673 0.34218300000000001492850287832 -1.36627699999999996371968791209 +0.128151999999999988144594453843 -0.349932999999999994056310015367 -1.36423000000000005371703082346 +0.129774000000000000465405491923 -1.40756400000000003736033704627 -0.0438580000000000011506351427215 +0.130014999999999991686649991607 -0.349797000000000024577673229942 1.36408900000000010699352515076 +0.130667000000000005366374011828 1.19051400000000007217693109851 -0.752064999999999983515408530366 +0.130869000000000013095302620059 1.0759440000000000114965814646 -0.908414000000000054768634072389 +0.131655999999999995253574525123 -0.095376000000000002443378832595 1.40483800000000003116440439044 +0.131915000000000004476419235289 0.858675999999999994827248883666 -1.1159179999999999655102556062 +0.132230999999999987437604431761 -0.548695999999999961538321713306 1.29670599999999991425170264847 +0.132374999999999992672528037474 -0.880237000000000047172932227113 1.09893499999999999516830939683 +0.132464999999999999413802242998 0.161648999999999987142729196421 -1.39868600000000009586642590875 +0.133609000000000005536904268411 -0.638974999999999959676699745614 1.25453499999999995573318756215 +0.134660000000000001918465386552 -1.01930100000000001259081727767 0.971026999999999973489650528791 +0.134826000000000001399769189447 0.280660000000000020570212200255 1.37951099999999993173105394817 +0.135531000000000012573053709275 0.678664999999999962732033509383 -1.23330600000000001337241428701 +0.136080000000000006510347816402 0.462982999999999977891462776824 -1.32933400000000001561772933201 +0.137410000000000004360956040728 0.527310999999999974185982409836 1.30501399999999989631760399789 +0.138260999999999995013766351803 0.769776000000000015788259588589 -1.17827400000000004354205884738 +0.139770000000000005346834086595 -1.12440199999999990154719853308 -0.846276000000000028222757464391 +0.139917999999999986826537679008 -0.457637999999999989242382980592 1.33078600000000002445688096486 +0.140394999999999992024157791093 -0.245357999999999992768451306802 1.38567299999999993254107266694 +0.142659000000000008023803843571 -1.31196200000000007257483503054 -0.508333000000000034823699479603 +0.142756999999999995010213638125 -0.315722999999999975884179548302 -1.37110899999999991116794717527 +0.142886999999999986243892635684 0.715314000000000005385913937062 1.21157300000000001105604496843 +0.143251999999999990453858345063 1.27809299999999992358823419636 0.588181999999999982620124683308 +0.143333999999999989194421345928 -0.113961000000000006737721491845 1.40230800000000010996359378623 +0.143869999999999997886135361114 -0.727083999999999952557061533298 1.20442999999999988958165886288 +0.144080999999999986860288458956 1.36877399999999993518429164396 0.325112000000000012089884648958 +0.145244000000000011985079595433 -0.491381999999999985462295626348 -1.31812299999999993360688677058 +0.14573400000000000242827979946 0.799086999999999991750598837825 1.1576800000000000423483470513 +0.146059999999999995390354001756 0.426549000000000011478817896204 1.34041900000000002712852165132 +0.1464860000000000050945914154 0.126585000000000003073097332162 -1.40089899999999989432808433776 +0.146811999999999998056665617696 0.298538999999999998813393631281 1.37452599999999991453591974278 +0.147102000000000010526690630286 -1.27988100000000004641265149985 0.583323999999999953658402773726 +0.147948999999999997179145339032 -1.22868700000000008465406153846 -0.684428000000000036351366361487 +0.148373000000000004883204951511 1.01729300000000000281374923361 0.971133000000000023987922759261 +0.148761000000000004339639758655 -1.14025500000000001854516540334 0.82321800000000000530064880877 +0.148999999999999993560706457174 1.31351900000000010315659437765 -0.502461000000000046483705773426 +0.149082999999999993301358358622 0.629530999999999951732831959816 1.25756299999999998640021203755 +0.149558999999999997498889570124 1.40547200000000005459810381581 0.0477640000000000009006129175759 +0.151820000000000010498268920855 -0.724408000000000051876725137845 -1.20506599999999997052668732067 +0.151945999999999997731592316086 -1.36942800000000008964207154349 0.318715000000000026059154834002 +0.151981000000000004979128220839 0.307696000000000025043078721865 -1.37194199999999999484145973838 +0.15284700000000001063327204065 1.13789199999999990353671819321 0.825736000000000025522695068503 +0.153330999999999995075938841183 1.38659400000000010422240848129 -0.232049000000000005261568958304 +0.155264000000000013113066188453 -0.280577999999999994074073583761 -1.37737799999999999123190264072 +0.156005000000000004778399897987 -1.3851109999999999811137740835 -0.239017000000000007231548693198 +0.156088000000000004519051799434 -0.131762999999999991240784424917 1.39938399999999996126121004636 +0.156693999999999999950262008497 -0.367207000000000005623945753541 1.35668900000000003380762336747 +0.157062000000000007160494419622 -1.404876999999999931389993435 0.0406479999999999966342478785464 +0.157414999999999999369393322013 0.879496999999999973240960571275 1.09622400000000008724043709663 +0.15766600000000000059152682752 0.998268999999999961936225645331 -0.989241999999999954695795167936 +0.158394000000000007011280445113 0.090712000000000000965449942214 -1.40238499999999999268140982167 +0.159139000000000002676969756976 -0.606636999999999981803000537184 -1.26754300000000008630252068542 +0.159853999999999996095567666998 -1.05229599999999989812238254672 -0.931192000000000019710455489985 +0.159860000000000002096101070492 0.315572000000000019159784869771 1.36925500000000011091572105215 +0.160920000000000007478462293875 -0.262761999999999995569766042536 1.38023899999999999366195879702 +0.162410999999999999809929818184 -0.957257000000000024542146093154 1.02824200000000010035705599876 +0.162594999999999989537258215933 0.553633999999999959484853206959 -1.29114400000000006940581442905 +0.162672000000000011032952329515 -0.811668999999999973837816469313 1.14661699999999999732835931354 +0.164085000000000008624212455288 1.22937399999999996680344338529 -0.67949599999999998889421704007 +0.164368999999999987338128448755 0.543120999999999964913399708166 1.29537700000000000066791017161 +0.165623999999999993448795976292 -0.244634999999999991349142192121 -1.38301199999999990808419170207 +0.166867999999999988558485597423 0.442720999999999975660358586538 1.33272400000000001973887719942 +0.167615999999999987224441611033 -0.809656000000000042327030769229 -1.14732799999999990347987477435 +0.167777000000000009460876526646 1.12316100000000007597122930747 -0.842829000000000050363269110676 +0.167865999999999987446486215958 0.428443000000000018268053736392 -1.33725699999999991796073572914 +0.168142999999999986915355520978 0.0541700000000000028710367416807 -1.4031370000000000786144482845 +0.168460999999999999632294134244 -0.456747999999999987341681162434 -1.32778100000000010005862804974 +0.168808999999999986840748533723 1.23768100000000003113598268101 0.66305999999999998273381152103 +0.169223000000000012299494756007 1.34388700000000005374545253289 0.406608999999999998209432305885 +0.169570999999999999507949155486 0.0929249999999999937161376806216 1.40093200000000006610889613512 +0.169868999999999992223109757106 -0.148714000000000012846612662543 1.39607600000000009465850325796 +0.169928999999999996717292560788 0.0763100000000000028288482667449 1.40189199999999991597121606901 +0.170208999999999999186428567555 0.109511999999999998234301301636 1.39965600000000001124078607972 +0.170473999999999986654231065586 -0.564304999999999945536899303988 1.28549500000000005428546501207 +0.171281999999999989814369882879 0.0597289999999999973723241453172 1.40253199999999988989429766661 +0.171444999999999986295406984027 -0.974948000000000036813219139731 -1.00999200000000000088107299234 +0.171840999999999993752552995829 0.126003000000000003888445121447 1.3980680000000000884341488927 +0.172169999999999989714893899873 -1.23966599999999993464427916479 0.658472999999999974996001128602 +0.172864999999999990887289413877 -0.473613000000000006206590796864 1.3212900000000000755306928113 +0.173625000000000001554312234475 0.0432509999999999977804421291694 1.40284800000000009490008778812 +0.173796000000000006036060540282 -0.208038000000000000699884594724 -1.38799000000000005705658168154 +0.173918999999999990269117233765 0.331691999999999986847853961081 1.36372000000000004327205260779 +0.174121999999999998998134742578 -0.8936250000000000026645352591 -1.08218100000000005955769211141 +0.174461000000000004961364652445 0.142333999999999988306242926228 1.39617499999999994386712387495 +0.174491000000000007208456054286 -1.08610300000000004061462277605 0.888781999999999960948571242625 +0.174603000000000008196110456993 0.271695000000000019824142327707 -1.37684300000000003905142875738 +0.174940000000000012159162565695 -1.33611900000000005661604518536 -0.429165000000000018687273950491 +0.175269000000000008121503469738 1.39705199999999996052224560117 0.132388000000000005673683745044 +0.17569399999999998907007636717 0.0171040000000000011470824290427 -1.40315300000000009461587069381 +0.176440999999999986735943480198 0.91510199999999997100275095363 -1.06370000000000008988365607365 +0.176947999999999994180654994125 0.026938000000000000139221967288 1.40284100000000000463273863716 +0.177050000000000012922996006637 -0.653525000000000022559731860383 1.24159500000000000419220214098 +0.177289000000000002144062705156 -1.3447659999999999058672983665 0.400216999999999989423571378211 +0.177569000000000004613198711922 0.955238000000000031519675758318 1.02761300000000010967937669193 +0.178056999999999993056221114784 0.158439999999999997504218640643 1.39398399999999988985166510247 +0.178961000000000008958167541095 1.33773900000000001142552719102 -0.422406000000000003691269512274 +0.179216999999999987425169933886 -1.16673099999999996256860868016 -0.778857000000000021522339466173 +0.1796179999999999998827604486 1.08362300000000000288480350719 0.890785000000000048991921630659 +0.179746999999999990116350545577 -0.170929999999999998605559881071 -1.39229099999999994530242020119 +0.179884999999999989350740747795 0.645576000000000038703262816853 -1.24533999999999989150012424943 +0.180664999999999992263965964412 1.39480500000000007254641332111 -0.147915999999999991931787235444 +0.181017000000000011228351581849 -0.0203400000000000004407585407762 -1.40243300000000004068567704962 +0.181239000000000011203482586097 0.0108559999999999993308685830584 1.40250999999999992340349308506 +0.181374000000000007437606086569 0.728634000000000003893774191965 1.19841400000000009029577086039 +0.182284000000000001584510300745 0.643533000000000021678658868041 1.24604899999999996218491560285 +0.182423000000000001818989403546 -0.278803000000000023028690065985 1.37440600000000001656985659793 +0.182616000000000000547117906535 0.174257999999999996232347143632 1.39150499999999999189981281233 +0.183456000000000007954525926834 -0.133457999999999993301358358622 -1.39589900000000000090949470177 +0.183548999999999989940491218476 -1.26244599999999995709742961481 -0.610361000000000042398085042805 +0.183729000000000003423039629524 -1.39664600000000005408651304606 0.124993000000000006877165503738 +0.184092000000000005632827537738 -0.058014000000000003065547815595 -1.40097999999999989206855843804 +0.18433199999999999585398313684 -0.382848000000000021625368162859 1.34887000000000001342925770587 +0.18462200000000000832400814943 -0.164745000000000002549072064539 1.39239899999999994228971900156 +0.184905999999999987037924142896 -0.0957699999999999940225592354182 -1.39879899999999990356513990264 +0.185030000000000000026645352591 -1.39341200000000009495693120698 -0.15545999999999998708588577756 +0.1864790000000000058655302837 -0.00493099999999999961952656946096 1.40185599999999999099031811056 +0.18664300000000000334665628543 0.827702000000000048807180519361 -1.13140299999999993652011198719 +0.187873000000000012210676914037 0.737400999999999973155695442983 -1.19203299999999989822185852972 +0.188120000000000009432454817215 0.189725000000000004751754545396 1.38874600000000003596767328418 +0.188630999999999993121946317842 0.457471999999999989761079177697 1.32481599999999999361932623287 +0.188934999999999991837640322956 0.346835000000000004405364961713 1.35794299999999990014032391628 +0.189397000000000009789502541935 0.811038999999999954404472646274 1.14295400000000002549427335907 +0.189428999999999986281196129312 -0.691065999999999958092189444869 -1.21923899999999996168753568782 +0.189431999999999989281462831059 -0.571904999999999996695976278716 -1.27946800000000004970956979378 +0.189521999999999996022737036583 -0.89143600000000000616040551904 1.08139899999999999913313786237 +0.189528000000000002023270440077 -0.420611000000000012644107982851 -1.33684899999999995401367414161 +0.19225600000000001021938089707 0.557107000000000018857804207073 1.28556200000000009353584573546 +0.192326999999999997958965991529 -0.739897000000000026886937121162 1.18977400000000010926726190519 +0.192649999999999987920773492078 -0.020362000000000001626032641866 1.40088199999999996059329987474 +0.19369700000000000805755462352 1.3136969999999998925943600625 0.486499999999999988009591334048 +0.193701000000000012057910225849 1.19238500000000002820854660968 0.735322000000000031150193535723 +0.194547999999999998710364934595 0.20477999999999998981259352604 1.38571899999999992303401086247 +0.195049000000000000154543045028 0.234320000000000000506261699229 -1.38095999999999996532551449491 +0.196558000000000010487610779819 -1.19455800000000000871125394042 0.731024000000000007126743639674 +0.196856000000000003202771381439 1.26338200000000000500222085975 -0.604245999999999949814366573264 +0.197558000000000011375789199519 0.391921999999999992603250120737 -1.34438400000000002343369942537 +0.19789399999999998658317679201 1.04858800000000007557332537544 -0.92806299999999997130117890265 +0.199532999999999988149923524361 -1.02766399999999991088373008097 0.950837999999999960998309234128 +0.199622999999999994891197729885 0.518066000000000026481927761779 -1.30067599999999994331290054106 +0.199725000000000013633538742397 -0.0353759999999999977249309779381 1.39959199999999994723509644245 +0.200287999999999993816501842048 -0.179793000000000008364864356736 1.38836599999999998900079845043 +0.200287999999999993816501842048 1.38311899999999998733812844876 0.216488999999999987000620649269 +0.20187299999999999688959917421 0.219364000000000003431921413721 1.38243500000000008043343768804 +0.201934000000000002383870878475 -1.31479600000000007575806648674 0.480138999999999982470910708798 +0.202854000000000006531664098475 -1.09779699999999991177901392803 -0.868155000000000010018652574217 +0.204022000000000008901324122235 1.16594500000000000916600129131 -0.773916999999999966064478940098 +0.204819000000000001060485033122 -0.293418000000000012139622640461 1.36819399999999991024424161878 +0.204847000000000001307398633799 0.36094199999999998507149712168 1.35194600000000009210054940922 +0.205680000000000001714184350021 1.02507799999999993367794104415 0.952317999999999997839950083289 +0.206063999999999997170263554835 0.889414000000000037893244098086 1.08003699999999991376853358815 +0.206528999999999990366816859932 -1.35500200000000003974776063842 -0.348302999999999973734787772628 +0.206664999999999987601029260986 -0.487408000000000007911893362689 1.31138200000000004763478500536 +0.207285999999999998033572978784 1.39751099999999994771826550277 -0.0631980000000000041726622157512 +0.207678000000000001490363388257 -0.049912999999999999034550057786 1.39799099999999998367172793223 +0.208216000000000012182255204607 1.35668000000000010807355010911 -0.340683999999999986840748533723 +0.208359999999999989661603194691 -0.383116000000000012093437362637 -1.3452910000000000145803369378 +0.209529999999999994031441019615 -0.577386999999999983579357376584 1.27386099999999991005950050749 +0.209671999999999997266186824163 -1.382902999999999993363530848 0.208846000000000003860023412017 +0.210067000000000003723243935383 0.233419999999999988604670875247 1.37890800000000002256683728774 +0.210539000000000003920419544556 -0.776298000000000043563375129452 -1.16320000000000001172395514004 +0.211261000000000004339639758655 0.470743999999999995775823435906 1.31672699999999998077271357033 +0.212818000000000007165823490141 -0.396660000000000012576606422954 1.34065999999999996283861491975 +0.213241000000000013869794202037 0.195720000000000005080380560685 -1.38427699999999997970689946669 +0.213324999999999986854959388438 -1.39621299999999992635935086582 -0.0712900000000000061417537722264 +0.215884999999999993569588241371 -0.822096999999999966668440265494 1.13028799999999995939958807867 +0.216298999999999991272758848027 0.655306000000000055116800012911 1.23441800000000001524824710941 +0.21647700000000000275512945791 -0.0639160000000000005915268275203 1.39608500000000002039257651631 +0.216805999999999998717470361953 -0.193800000000000000044408920985 1.38399300000000002874855908885 +0.217406999999999989148236068104 1.27832199999999995831956312031 0.564470999999999945018203106883 +0.217544999999999988382626270322 -0.535205999999999959548802053177 -1.29082499999999988915533322142 +0.217827999999999993852028978836 1.14238299999999992628829659225 0.804682000000000008377298854612 +0.21795600000000001084110579086 -1.20445599999999997109512150928 -0.708365000000000022417623313231 +0.218224000000000001309174990638 -1.02302300000000001567457275087 -0.951737000000000055166538004414 +0.218425000000000008038014698286 -1.29122300000000000963495949691 -0.533884000000000025210056264768 +0.219096999999999986208365498896 0.24689099999999999934807703994 1.37515100000000001223554590979 +0.22017000000000000459188242985 -1.1447359999999999757847035653 0.80069000000000001282529638047 +0.220269999999999993578470025568 0.967914999999999969837460866984 -1.00728400000000006819789177825 +0.2206319999999999947881690332 0.739380000000000037196912217041 1.18517500000000008952838470577 +0.220960999999999990750509937243 0.569212999999999968991915011429 1.27560699999999993536903275526 +0.221223000000000002973621349156 -0.665205000000000046256332097983 1.22823499999999996568078586279 +0.221593000000000012184031561446 0.373956999999999983863574470888 1.34575399999999989475440997921 +0.222224000000000004861888669438 0.609674999999999966959762787155 -1.25654799999999999826627572475 +0.222331000000000000849098569233 -0.860948999999999964316543810128 -1.09969899999999998208011220413 +0.223787000000000013688605804418 -0.96516999999999997239541471572 1.00914100000000006573941391252 +0.224515999999999993352872706964 1.36372699999999991149479683372 0.2997360000000000024300561563 +0.224830000000000002069455717901 -0.943640000000000034319214137213 -1.02907499999999996198596363683 +0.224885000000000001563194018672 -0.344407999999999991924681808086 -1.35307400000000010997780464095 +0.224918000000000006810552122261 -0.655275000000000051869619710487 -1.23289300000000001666933258093 +0.225038999999999989043431014579 0.353563999999999989398702382459 -1.35068499999999991345589478442 +0.225782000000000010464518140907 -1.279638000000000053191229199 0.558166999999999968729014199198 +0.226087000000000010180301046603 -0.0773299999999999959632290824629 1.39388099999999992562038642063 +0.228017999999999998461674977079 -0.306547999999999987164045478494 1.36162999999999989597654348472 +0.22884999999999999786837179272 1.29240400000000010827250207512 -0.526611000000000051279869239806 +0.228928999999999993608668091838 0.259724999999999983657517077518 1.37118000000000006544098596351 +0.229104000000000002090771999974 0.156046999999999991270982491187 -1.38678100000000004143885234953 +0.230930999999999997385202732403 0.962488000000000010203393685515 1.01009299999999990760102264176 +0.233089999999999991642241070622 1.39470200000000010831513463927 0.0217690000000000001556532680524 +0.23374500000000000832223179259 0.82008000000000003115729896308 1.12819899999999995188204593433 +0.234111000000000013532286402551 -0.206710000000000004849454171563 1.37929799999999991300114743353 +0.234287999999999996258992496223 0.882361999999999979671372329904 -1.08006800000000002803801635309 +0.234491000000000004988010005036 0.480175999999999991718624414716 -1.30936800000000008736833478906 +0.234670999999999990714982800455 0.482484000000000023966606477188 1.308486999999999955690554998 +0.234786999999999995702992805491 -1.36370199999999996975930116605 0.291874000000000022314594616546 +0.235506999999999994122035218425 0.701865999999999989888976870134 -1.2049570000000000558060264666 +0.236470000000000013518075547836 -0.0901020000000000015338841308221 1.3913889999999999869118028073 +0.23664799999999999724487054209 1.37026699999999990176036135381 -0.25761699999999998489386143774 +0.237303999999999987169374549012 -1.36853699999999989245225151535 -0.266066999999999997950084207332 +0.23734099999999999641708825493 1.09476799999999996337862739892 -0.863222000000000044828141199105 +0.239035999999999998477662188634 -0.304642999999999997129407347529 -1.36016699999999990389198956109 +0.239106999999999986217247283093 0.385828000000000004288125410312 1.33939000000000008050449196162 +0.23946300000000000918198850286 1.20412699999999994737720498961 -0.701949999999999962874142056535 +0.239473999999999992427390793637 0.793227000000000015411671938637 -1.1460559999999999636344227838 +0.23952200000000001267608240596 0.271872000000000002550848421379 1.36701000000000005840661287948 +0.240257999999999999340971612583 1.2379020000000000578666004003 0.640214999999999978541609380045 +0.240776999999999991031174317868 -1.39350400000000007594280759804 0.0131620000000000000883737527602 +0.241096000000000004748201831717 1.08787199999999995014832165907 0.870866000000000028968827336939 +0.241184000000000009489298236076 -0.498968999999999995864641277876 1.30109900000000000552802248421 +0.241395999999999999463540234501 -0.749512999999999984801490882091 1.17471600000000009345058060717 +0.242041000000000006142641950646 -0.408588000000000006739497848685 1.33209299999999997154986886017 +0.242577999999999988078869250785 0.115458000000000005069722419648 -1.38846200000000008500933290634 +0.242913999999999991041832458905 -1.09039700000000006063771706977 0.867195999999999966867392231507 +0.243368000000000000992983473225 -0.496684000000000014374279544427 -1.30156699999999991845811564417 +0.245053999999999994052757301688 -1.13896500000000000518696197105 -0.80169000000000001371347480017 +0.247156999999999987815968438554 -0.898866999999999971571185142238 1.06346199999999990737364896631 +0.247586000000000000520472553944 -0.102180999999999994054533658527 1.38861799999999990795629400964 +0.247858999999999995988986256634 1.33895300000000005979927664157 0.381799999999999972732922515206 +0.248737999999999986888710168387 -1.23942899999999989191223903617 0.633990999999999971237230056431 +0.249245999999999995333510582896 -0.5878889999999999949054085846 1.26184899999999999842259512661 +0.250199000000000004728661906483 0.313522000000000022890134232512 -1.35613600000000000811439804238 +0.250371000000000010210499112873 0.579392000000000018111734334525 1.26555100000000009252687505068 +0.250757000000000007666756118851 -0.263975000000000015187850976872 -1.36654199999999992343191479449 +0.25083600000000000340705241797 0.283281999999999978268050426777 1.36265700000000000713384906703 +0.250995000000000023643309532417 0.664803000000000032798652682686 1.22271700000000005381650680647 +0.251323999999999991850074820832 -0.740141000000000048864023938222 -1.17856999999999989547916356969 +0.251931000000000016036949546105 -0.31814199999999998036415149727 1.35473799999999999776889580971 +0.252134000000000024765967054918 -0.218470999999999998530952893816 1.37429899999999993731591985124 +0.252439999999999997726263245568 -1.31490499999999999047872734081 -0.455301000000000011258549648119 +0.253608000000000000095923269328 0.0741119999999999973239184214435 -1.38931300000000002015099198616 +0.255269999999999996909139099444 0.89609899999999997888266989321 1.06388100000000007661071776965 +0.255834999999999979092280000259 -1.23742700000000005466915808938 -0.635077000000000002621902694955 +0.25731900000000001993427645175 0.396509000000000000341060513165 1.33287899999999992495247624902 +0.257392000000000009674039347374 0.0912869999999999931494798488529 1.38759399999999999408828443848 +0.257630999999999998895106045893 0.0801729999999999942694728360948 1.3882360000000000255226950685 +0.2578190000000000203783656616 0.102380999999999999783284465593 1.38674000000000008370193427254 +0.257971999999999979102938141295 1.38638900000000009349321317131 0.106650999999999995804245145337 +0.258147999999999988585130950014 -0.617174000000000000376587649953 -1.24597500000000005471179065353 +0.258535999999999988041565757158 0.0690830000000000055138116294984 1.38866299999999998071587015147 +0.258767000000000024773072482276 0.492647000000000001573852159709 1.30013000000000000788702436694 +0.258909999999999973496755956148 0.113410999999999997922550676321 1.38567799999999996529709278548 +0.258975000000000010746958878372 -1.33912000000000008803624496068 0.373750000000000026645352591004 +0.259390000000000009450218385609 -0.113519999999999995909938377281 1.38557899999999989404386724345 +0.259940000000000004387601393319 1.31632600000000010709300113376 -0.446896999999999988695265074057 +0.260004000000000012882139799331 -0.222566999999999987069898566006 -1.37217400000000000481747974845 +0.260102999999999973113062878838 0.0580610000000000014974688156144 1.38887500000000008171241461241 +0.260504000000000013326229009181 0.747507999999999950269113924151 1.17190799999999994973620687233 +0.260662000000000004806821607417 0.124334000000000000074606987255 1.38441199999999997594102296716 +0.26215100000000002289368694619 0.0321730000000000002091660178394 -1.3893310000000000936637434279 +0.262162000000000006139089236967 1.19259599999999998942712409189 0.713431999999999955086593672604 +0.262326000000000003620215238698 0.0471499999999999974686915038546 1.38887099999999996668975654757 +0.262378999999999973358200122675 0.571103999999999945025308534241 -1.26688500000000003886668764608 +0.262824999999999975308639932337 0.293910999999999977827513930606 1.3581380000000000674020839142 +0.263068000000000024041213464443 0.135107000000000004868994096796 1.38294699999999992634514001111 +0.263230000000000019522161665009 1.01690900000000006286882126005 -0.946891999999999955939244955516 +0.263411999999999979493736645964 1.0290680000000000937632194109 0.933613000000000026190605240117 +0.264141000000000014669154779767 -1.06705999999999989746868322982 -0.88972600000000001685407369223 +0.264147000000000020669688183261 1.37844600000000006012612630002 -0.173533999999999993812949128369 +0.264699000000000017607248992135 -1.03175400000000005995559604344 0.930278999999999967052133342804 +0.265195999999999987295495884609 0.0363930000000000017368328997236 1.38864900000000002222577677458 +0.265954000000000023717916519672 -0.673970999999999986762588832789 1.21450900000000006073719305277 +0.266116999999999992443378005191 0.145687000000000010935252703348 1.38128800000000007131006896088 +0.26673799999999997512034610736 -0.180580999999999991523225162382 -1.37704099999999995951327491639 +0.266799999999999981614706712207 -0.456490999999999980119014253432 -1.31165299999999995783639406 +0.267062000000000021593393739749 0.440114000000000005208278253122 -1.31718599999999996796873347193 +0.267141999999999990578203323821 -1.37667300000000003556976935215 -0.182780999999999999028332808848 +0.267280000000000017568169141668 -1.38529600000000008286349384434 0.0975619999999999959472418709083 +0.26817499999999999671373984711 -0.010193999999999999936384220689 -1.38851700000000000123634436022 +0.268425999999999997935873352617 -0.825123999999999968579800224688 -1.11674399999999995891641901835 +0.2687010000000000231601404721 0.0258339999999999993252064456328 1.38821200000000000152056145453 +0.26955299999999998705746406813 -0.829015999999999975145215103112 1.11358599999999996477129116101 +0.269799000000000011034728686354 0.156033000000000005025313498663 1.37944299999999997474731117109 +0.270222999999999990983212683204 1.30889499999999991963761658553 0.462357000000000017969625787373 +0.270712999999999981426412887231 -1.19432899999999997397992501647 0.707313999999999998280486579461 +0.270805000000000017923440509549 -0.229037999999999991596055792797 1.36901600000000001067235189112 +0.270934000000000008157030606526 -0.138183000000000000273558953268 -1.3811230000000001005844296742 +0.271652999999999977820408503248 -0.0528209999999999998965272141049 -1.38687200000000010469136668689 +0.271836000000000022058799231672 -0.124073000000000002729372283738 1.38228499999999998593125383195 +0.27188499999999998779642851332 -0.418584000000000011620926443356 1.32320299999999990703258845315 +0.27257399999999998296829062383 -0.0955399999999999999245048343255 -1.3844039999999999679403117625 +0.272828000000000014946266446714 0.0155119999999999997469801726879 1.38755999999999990457411058742 +0.272940999999999989178434134374 0.271952000000000027046809236708 -1.36071499999999989682919476763 +0.273959000000000008068212764556 1.23755799999999993588062352501 -0.627214000000000049261927870248 +0.274098000000000008302691867357 0.166103000000000000646593889542 1.37741800000000003123545866401 +0.274650999999999978484765961184 -0.989931000000000005378808509704 -0.971906999999999965389463341126 +0.275442999999999993399057984789 0.303717000000000014736656339664 1.3534720000000000084128259914 +0.275851000000000012857270803579 1.13662799999999997169197740732 -0.794973000000000040721204186411 +0.276158999999999987817744795393 0.405957000000000012285283901292 1.3262480000000000934790023166 +0.276166999999999995818456000052 -0.908842999999999956450835725263 -1.04772899999999991038635016594 +0.276285000000000002806643806252 -0.508251000000000008327560863108 1.29048300000000004672529030358 +0.276461999999999985533349899924 -0.328154999999999974491515786212 1.34754700000000005033484740125 +0.27756100000000000216360263039 0.00547000000000000003580469254416 1.38669700000000006845368716313 +0.278602000000000016299850358337 0.826173000000000046227910388552 1.11347100000000009956124813471 +0.278996999999999995001331853928 0.175857999999999986551202368901 1.37522199999999994446397977299 +0.280368999999999979344522671454 0.58760299999999998643573917434 1.25543500000000007865708084864 +0.280974999999999974775732880516 0.663310999999999983955945026537 -1.21699299999999999144506546145 +0.281007999999999980023090984105 0.933540000000000036450842344493 -1.02446900000000007402434221149 +0.28183799999999997742960999858 1.37260500000000007503331289627 0.191111000000000003096189971075 +0.282142000000000003900879619323 -1.30925300000000000011368683772 0.454151000000000026890489834841 +0.282880000000000020321522242739 -0.00425299999999999983613108156533 1.38562600000000002431477241771 +0.28303099999999997704591692127 1.14258400000000004403943876241 0.783834000000000030716762466909 +0.283453999999999983749887633167 0.501191000000000053127280352783 1.29168900000000008709832854947 +0.284478000000000008640199666843 0.185259000000000007002398660916 1.37286200000000002674482857401 +0.284687999999999996614263864103 0.966203000000000034042102470266 0.992674999999999974065190144756 +0.284874999999999989341858963598 -0.133800000000000002264854970235 1.37874699999999994481925114087 +0.285438999999999998280486579461 -0.969037999999999954958695980167 0.989690999999999987402077294973 +0.285457999999999989526600074896 -1.33339699999999994339816566935 -0.374921000000000004259703700882 +0.286235000000000017195134205394 0.671987000000000000987654402707 1.21099200000000006838263288955 +0.286287000000000013688605804418 -1.17563799999999996082067355019 -0.732063000000000019262813566456 +0.287746000000000001772804125721 -0.414787000000000016797230273369 -1.3210429999999999672866124456 +0.288638999999999978918197029998 0.312661999999999995480948200566 1.34867699999999990367882674036 +0.288766000000000022662760557068 -0.0136200000000000001620925615953 1.38435100000000010922462934104 +0.288988000000000022637891561317 -0.576915999999999984382270667993 -1.25843299999999991278798461281 +0.289463000000000025835333872237 -0.595770000000000021778134851047 1.24950800000000006306777322607 +0.289810000000000012043699371134 -0.701326000000000004952482868248 -1.19337800000000004985167834093 +0.290005000000000012772005675288 1.33505300000000004523315055849 -0.365420000000000022577495428777 +0.290049000000000001264766069653 -0.238368999999999997552180275306 1.36346999999999995978328115598 +0.290129000000000025760726884982 0.845921999999999951747042814532 -1.0955550000000000565592017665 +0.290198000000000011500134178277 0.755386000000000001897149104479 -1.15981800000000001560351847729 +0.290517999999999998461674977079 0.194269999999999998241406728994 1.37034999999999995701216448651 +0.290603000000000000202504679692 1.38118399999999996730082330032 -0.08876499999999999668265360242 +0.290885000000000004671818487623 -0.755893000000000037097436234035 1.15931500000000009542588941258 +0.291520999999999974594544482898 1.27367099999999999759836555313 0.541089999999999959889862566342 +0.291619000000000017092105508709 -1.14451600000000008883205282473 0.777845000000000008633094239485 +0.292704999999999992965626915975 -1.2655149999999999455013721672 -0.559281999999999945849538107723 +0.292727000000000014967582728787 -1.37162000000000006139089236967 0.181576999999999988411047979753 +0.293173999999999990162535823401 0.229020000000000001350031197944 -1.3644039999999999501767433685 +0.295192999999999983185006158237 -0.0225920000000000009698908343125 1.3828769999999999118500682016 +0.295551000000000008149925179168 0.41413600000000000411759515373 1.31952300000000000146371803567 +0.29592600000000002236077989437 -1.37937400000000010003020634031 -0.0987729999999999996873611962656 +0.29709400000000002473043991813 0.202854000000000006531664098475 1.3676930000000000475779415865 +0.297208000000000027718272122002 0.398036999999999974164666127763 -1.32409799999999999720046162111 +0.29845500000000002582822844488 -0.142662000000000011024070545318 1.37498100000000000875388650456 +0.300190999999999985625720455573 0.530013999999999985135445967899 -1.27631099999999997329780399014 +0.300833999999999990304644370553 0.752987999999999990663468452112 1.15866699999999989145749168529 +0.301514000000000004231281991451 -0.336544999999999983053555752122 1.34008499999999997065458501311 +0.30213899999999999090860569595 -0.0311339999999999984814369469177 1.38121099999999996654764800041 +0.302232999999999973894659888174 -0.426607999999999987217336183676 1.31402400000000008084555247478 +0.302362000000000019639401216409 0.320709000000000021834978269908 1.34377199999999996649080458155 +0.302783000000000024343194127141 1.08806300000000000238742359215 0.851141999999999954162888116116 +0.304180000000000005933031843597 0.210977999999999998870237050141 1.36490399999999989510968134709 +0.304194999999999993178789736703 -1.27421899999999999053557075968 0.532760000000000011333156635374 +0.304590000000000027391422463552 1.35340299999999991165111623559 0.274816999999999977966069764079 +0.304840999999999973102404737801 0.899525000000000019007018181583 1.0478199999999999736388645033 +0.305053000000000018587797967484 -0.902499999999999968913755310496 1.04519699999999993167421052931 +0.305151999999999978818721046991 1.06189000000000000056843418861 -0.8827639999999999931290517452 +0.306124999999999980460074766597 -0.371734999999999982112086627239 -1.32969899999999996431654381013 +0.30737399999999998057020889064 1.26610399999999989617549545073 -0.550001999999999990897947554913 +0.308634999999999992681409821671 0.508083999999999980090592544002 1.28319699999999992101606949291 +0.309016000000000012892797940367 -1.10688699999999995426946952648 -0.824203000000000018943069335364 +0.309574000000000015830892152735 -0.0392139999999999988578025522656 1.37935699999999994425081695226 +0.309790999999999983050003038443 -0.246426000000000006151523734843 1.35768299999999997318411715241 +0.310817999999999983185006158237 0.184894000000000002792432951537 -1.36718899999999998762234554306 +0.310836000000000001186606368719 0.593813999999999952983387174754 1.24529700000000009829648206505 +0.311068000000000011162626378791 -0.679787000000000030119906568871 1.20046900000000000829913915368 +0.311375000000000012878587085652 -1.09018499999999995964117260883 0.845306000000000001826094830903 +0.31166800000000000059330318436 1.23341999999999996084909525962 0.617686999999999986066256951744 +0.311746999999999996333599483478 0.218609999999999998765431996617 1.36199200000000009147527180176 +0.311829000000000022829738099972 -0.515217000000000036052938412467 1.27957600000000004669686859415 +0.312226000000000003531397396728 -0.786294000000000048444803724124 -1.13325100000000000832756086311 +0.312522999999999995246469097765 -0.150624000000000007881695296419 1.3709999999999999964472863212 +0.313271999999999994912514011958 1.17400199999999999000976913521 -0.723588000000000008959943897935 +0.315417999999999976168396642606 0.421011999999999997346122881936 1.31272999999999995246469097765 +0.315912999999999999367616965174 1.37847199999999991959498402139 -0.00364700000000000006811218256075 +0.316556999999999977291054165107 0.327828000000000008284928298963 1.33877599999999996605026808538 +0.317020000000000023998580900297 -1.35253099999999992775201462791 0.264875000000000027089441800854 +0.31731500000000001371347480017 -0.534658999999999995367261362844 -1.27021699999999992947152804845 +0.317348999999999992205346188712 -1.34662700000000001843147856562 -0.293061999999999989174881420695 +0.317469000000000001193711796077 -0.0467979999999999993209875981393 1.37732499999999991047161529423 +0.318925000000000014033219031262 1.34851000000000009748646334629 -0.282501000000000002110311925207 +0.319767000000000023440804852726 0.225719000000000002970068635477 1.35897000000000001129762949859 +0.3213400000000000145128353779 1.02924700000000002297895207448 0.915090999999999987757348662853 +0.32186500000000001220357148668 -0.327506000000000019323209698996 -1.33758799999999999918998128123 +0.321879000000000026204816094832 0.676830000000000042703618419182 1.19928900000000004943956355419 +0.323388999999999982026821498948 -1.03231500000000009364953257318 -0.910904000000000046988191115815 +0.323463000000000000522248910784 -0.832399000000000000021316282073 1.09657800000000005269384928397 +0.323541999999999996262545209902 -1.37663099999999993805488429643 -0.0143759999999999998898658759572 +0.323790999999999995484500914245 0.829296999999999950858864394831 1.09882999999999997342570168257 +0.324097999999999997200461621105 0.621887999999999996347810338193 -1.22809400000000001895728019008 +0.324807999999999985618615028216 0.35411100000000000909139430405 -1.33007699999999995377208961145 +0.325046999999999974839681726735 -1.2341549999999998910027443344 0.609265999999999974257036683412 +0.325253999999999987569054837877 -0.870693999999999967975838899292 -1.06588100000000007838707460905 +0.325793999999999972505548839763 -0.0538570000000000020934365352332 1.37512100000000003774403012358 +0.325803999999999982506437845586 0.139748000000000011100453889412 -1.36905900000000002592059900053 +0.325846000000000024510171670045 -0.660008999999999956820317947859 -1.20756499999999999950262008497 +0.326141000000000014225065569917 1.32886100000000006993161605351 0.3574379999999999779625170504 +0.32639000000000001344702127426 -1.20767000000000002124522779923 -0.659545999999999965623942443926 +0.326618999999999992667198966956 0.981033000000000043883119360544 -0.964828000000000018943069335364 +0.326988999999999974122033563617 -0.343281999999999976047604377527 1.33237999999999989775290032412 +0.327023000000000008125056183417 -0.157654999999999989590548921115 1.36682100000000006367883997882 +0.328205999999999997740474100283 0.232278000000000012237322266628 1.35584900000000008191136657842 +0.328419000000000016470380614919 -1.28860799999999997567101672757 -0.481279999999999985593746032464 +0.32891500000000001291411422244 -0.953150000000000052757798130187 -0.991624999999999978683717927197 +0.329901999999999973045561318941 -1.03155200000000002447109181958 0.909430999999999989391596955102 +0.329952999999999996294519633011 -0.253178999999999987391419153937 1.35167700000000001736566446198 +0.330023999999999984034104727471 -0.600998999999999949928053410986 1.23688500000000001222133505507 +0.330585000000000017728041257214 1.1883030000000001091819967769 0.691845999999999961005414661486 +0.331168000000000017912782368512 0.333990999999999982339460302683 1.33370799999999989360333074728 +0.3329650000000000109601216991 -0.432630999999999987792875799641 1.30459400000000003139177806588 +0.334210999999999980314413505766 0.51329800000000003201705567335 1.27468800000000004324363089836 +0.334515000000000006785683126509 -0.0603629999999999999893418589636 1.37275499999999994749089182733 +0.334901999999999977486453417441 -0.282274000000000024890312033676 -1.34467899999999995763744209398 +0.335513000000000005673683745044 0.48656800000000000050448534239 -1.28478800000000004111200269108 +0.335683999999999982399856435222 0.426559000000000021479706902028 1.30589599999999994572874584264 +0.337033000000000027007729386241 0.238261000000000000564881474929 1.35264199999999989998400451441 +0.338071999999999983632648081766 0.0937619999999999981232789991736 -1.37000600000000005707079253625 +0.338617000000000001325162202193 0.714328999999999991743493410468 -1.17263500000000009393374966749 +0.338629000000000013326229009181 0.966369999999999951256768326857 0.975427999999999961744379106676 +0.339575000000000015720758028692 1.28965400000000007807443580532 -0.470619999999999982787102226212 +0.339639999999999997459809719658 0.895279000000000046988191115815 -1.04073100000000007270273272297 +0.339975000000000027178259642824 1.3703199999999999825206487003 0.0814860000000000028741453661496 +0.340059999999999973407938114178 -1.32810399999999995124255747214 0.34712799999999999212008106042 +0.340596999999999983099741029946 -0.7590130000000000487503371005 1.14363199999999998190958194755 +0.341463000000000016509460465386 0.755794999999999994599875208223 1.14550299999999993794119745871 +0.341654000000000013237411167211 0.598001000000000004774847184308 1.23517900000000002691535883059 +0.341897999999999979703346753013 -0.163726000000000010414780149404 1.36246099999999992213872701541 +0.343017999999999989579890780078 -0.490568999999999977301712306144 -1.28128099999999989222487783991 +0.343598000000000014519940805258 -0.0662900000000000017008616737257 1.3702360000000000095354835139 +0.343745000000000022755131112717 0.805923999999999973731235058949 -1.11010100000000000441957581643 +0.344196999999999975194953094615 0.0892880000000000062509997178495 1.3687789999999999679403117625 +0.34431699999999998418331870198 0.0837200000000000027489122089719 1.36910099999999990139087913121 +0.344411000000000022680524125462 0.0948459999999999997521982209037 1.36835100000000009501377462584 +0.344615999999999977898568204182 -1.1892210000000000835740365801 0.683367999999999975457853906846 +0.344770000000000020889956431347 0.0781639999999999973701036992679 1.36931500000000005989875262458 +0.344957999999999986862064815796 0.100372000000000002883915328766 1.36781899999999989603338690358 +0.345185999999999992837729223538 -0.236218000000000011295853141746 -1.35094300000000000494537744089 +0.345555000000000001048050535246 0.0726419999999999982387421937347 1.36942099999999999937472239253 +0.345835000000000003517186542012 0.105843999999999993644195228626 1.36718500000000009464429240325 +0.345868999999999982009057930554 1.10267899999999996474286945158 -0.815151999999999987700505243993 +0.346138000000000001232791646544 0.339171999999999973507414097185 1.32858999999999993768540207384 +0.346210999999999990972554542168 0.243643999999999999461763877662 1.3493610000000000326281224261 +0.346403999999999989700683045157 1.29907299999999992223820299841 0.438649000000000011123546528324 +0.34658600000000000518340925737 1.35664600000000001855937625805 -0.198467000000000004522604513113 +0.346669000000000004924061158817 0.0671759999999999996012078895546 1.36941899999999994186339336011 +0.34704000000000001513456027169 0.111241000000000006542322239511 1.36645100000000008222400538216 +0.347125999999999990119903259256 -0.968848000000000042497561025812 0.969967000000000023618440536666 +0.347575000000000022826185386293 0.0471149999999999971600495030088 -1.37002599999999996605026808538 +0.34767799999999998705746406813 -0.519838000000000022282620193437 1.26842000000000010295764241164 +0.347988000000000019529267092366 -1.35454300000000005255174073682 -0.2100450000000000094768637382 +0.34810699999999999976196818352 0.0617870000000000016426859872354 1.36930799999999996963140347361 +0.348196999999999978747666773415 1.13849500000000003474553977867 0.763275000000000036770586575585 +0.348567999999999988958165886288 0.116542000000000006698641641378 1.36562000000000005606182185147 +0.349457999999999990858867704446 1.20674299999999989907450981264 -0.649345999999999978768983055488 +0.349754999999999982573939405484 0.308510999999999979692688611976 -1.33509999999999995345945080771 +0.349862999999999979561238205861 0.0564959999999999976094677833771 1.36908900000000000041211478674 +0.349880999999999997562838416343 -1.36845599999999989471177741507 0.0700780000000000014015455462868 +0.35041299999999997449862121357 0.121724999999999999866773237045 1.364695999999999909135794951 +0.350455000000000016502355038028 -0.25859999999999999653610416317 1.34547700000000003406341875234 +0.351930000000000020587975768649 0.0513259999999999966258101835592 1.36876200000000003420552729949 +0.352565999999999990510701763924 0.126769999999999993800514630493 1.36368099999999992100185863819 +0.352671999999999985497822763136 -1.14234499999999994379606960138 -0.75542799999999998838973169768 +0.352675999999999989498178365466 -0.189518999999999993022470334836 -1.35635599999999989506704878295 +0.352785999999999988485654967008 -0.348337000000000007737810392427 1.32446299999999994589927609923 +0.353007999999999988460785971256 -0.0716159999999999991038279745226 1.36757299999999992756727351662 +0.353557999999999983398168978965 -0.744609999999999994102495293191 -1.14915300000000009106315701501 +0.35427399999999997781685578957 -6.99999999999999989499501959478e-06 -1.36911999999999989263699262665 +0.354300999999999977063680489664 0.0462940000000000018154366898671 1.36833000000000004625633209798 +0.35458099999999997953281649643 0.89967900000000000648725517749 1.031916000000000055436544244 +0.355020999999999975482722902598 0.131656999999999996253663425705 1.36258100000000004214939508529 +0.355706000000000022165380642036 0.248405999999999987926102562596 1.34601900000000007651124178665 +0.356267000000000000348165940522 0.430754999999999999005240169936 1.29904700000000006276934527705 +0.356385999999999980580867031676 -0.682630999999999987792875799641 1.18617200000000000414956957684 +0.356966000000000005520917056856 0.0414230000000000014859224961583 1.36779399999999995429789123591 +0.357088999999999989753973750339 -0.168813999999999991841193036635 1.35793600000000003191757969034 +0.357343000000000021731949573223 -0.142361999999999988553156526905 -1.36089600000000010560086138867 +0.357767000000000001680433570073 0.136366999999999988224530511616 1.36139900000000002577849045338 +0.357787999999999994926724866673 0.679310999999999998166799741739 1.1876549999999999052135990496 +0.358144000000000017891466086439 -0.0474180000000000018145485114474 -1.3672910000000000341202621712 +0.359167999999999987270626888858 -0.0949320000000000024931168240983 -1.36454600000000003667821601994 +0.359289999999999998259170297388 -0.616349999999999953459450807713 -1.22107399999999999273825324053 +0.359914999999999984936494001886 0.0367309999999999997610800051007 1.367154999999999898108171692 +0.360080000000000011173284519828 0.516812000000000049126924750453 1.2661940000000000416946477344 +0.360792999999999974836129013056 0.140881000000000006222578008419 1.36013999999999990464516486099 +0.361406999999999978268050426777 0.34335100000000001729816290208 1.32343999999999994976462858176 +0.361760000000000025988100560426 -1.29843599999999992355981248693 0.428010999999999974807707303626 +0.362696000000000018381740574114 1.35675900000000004830269517697 0.166298000000000001374900193696 +0.362705999999999972871478348679 -0.0763179999999999969517716635892 1.36477800000000004665423603001 +0.362825999999999981859843956045 -1.13959399999999999586464127788 0.754773000000000027220892206969 +0.362837000000000020616397478079 -1.30661500000000008192557743314 -0.401378999999999985792697998477 +0.362980999999999998095745468163 -0.902321000000000039698022646917 1.02667500000000000426325641456 +0.36313499999999998557598246407 0.0322360000000000007647216193618 1.36641600000000007497646947741 +0.363958999999999976981968075052 -0.436626999999999987345233876113 1.29494799999999998796340605622 +0.364086999999999993971044887076 0.145182000000000005490718990586 1.35880899999999993355004335172 +0.364435000000000008935074902183 1.08419400000000010209078027401 0.831690999999999958092189444869 +0.364707000000000003403499704291 0.577760999999999969034547575575 -1.23821699999999990104981861805 +0.365205000000000001847411112976 -1.23493800000000009120526556217 -0.584426000000000001044497821567 +0.365300999999999986833643106365 1.26415900000000003267075499025 0.518128999999999950709650420322 +0.365478999999999998316013716249 0.252527000000000001467270749345 1.34262999999999999012345597293 +0.36599599999999998800603862037 -0.444819999999999993178789736703 -1.2915810000000000901110297491 +0.36661399999999999543831563642 0.0279560000000000016817658377022 1.36558099999999993379162788187 +0.367636999999999991572963153885 0.149251999999999995782928863264 1.35741200000000006298250809778 +0.368203999999999975756281855865 0.440937999999999996614263864103 -1.29228399999999998826183400524 +0.369134000000000017660539697317 0.829436999999999979849008013844 1.0843320000000000735695948606 +0.370338999999999973766762195737 0.0239089999999999996971311588823 1.36465299999999989388754784159 +0.370437000000000016264323221549 1.30811300000000008125766726153 -0.389380000000000003890221478287 +0.370769000000000015226930827339 -0.603555999999999981397991177801 1.22403100000000009117684385274 +0.370848999999999984211740411411 -1.07062499999999993782751062099 -0.846306000000000002714273250604 +0.370941000000000020708768033728 1.02465500000000009350742402603 -0.901379000000000041303849229735 +0.371215999999999990421883921954 -0.262668999999999985828225135265 1.33910599999999990750154665875 +0.371427999999999980396125920379 0.153074999999999988853360832763 1.35595299999999996387600731396 +0.371896000000000004348521542852 -0.829343000000000052374105052877 -1.0834589999999999498925262742 +0.37195000000000000284217094304 0.261415000000000008473222123939 -1.33914700000000008728306966077 +0.372537000000000007027267656667 -0.172898999999999997134736418047 1.3532640000000000224389395953 +0.372655999999999987259968747821 -0.0803790000000000059987570466546 1.3618609999999999882192014411 +0.372699999999999975752729142187 0.600146999999999986030729814956 1.22511999999999998678390511486 +0.372879999999999989235277553234 1.35942800000000008076028734649 -0.113649000000000000021316282073 +0.374294999999999988826715480172 0.0201089999999999984037213351939 1.36363400000000001277555838897 +0.374838999999999977763565084388 -1.35488000000000008427036846115 0.154256000000000004224176564094 +0.375446000000000001950439809661 0.156636999999999998456345906561 1.35443899999999994854249507625 +0.375491999999999992443378005191 0.255993000000000026084023829753 1.33920599999999989648813425447 +0.376915999999999973280040421741 0.346513000000000015443646361746 1.3182799999999998963318148526 +0.377085999999999976761699826966 0.433584000000000024943602738858 1.29221199999999991625543316331 +0.377253999999999978243181431026 -1.35711200000000009602274531062 -0.126200000000000006616929226766 +0.377404000000000017234214055861 -0.832231999999999971784347962966 1.07933100000000004037303824589 +0.378464999999999995861088564197 0.0165730000000000009252598687226 1.36253000000000001890043677122 +0.378803999999999974068742858435 -0.351690999999999975855757838872 1.31636700000000006482991921075 +0.379236000000000017529089291202 1.02561400000000002563638190622 0.896824999999999983302245709638 +0.379603999999999996983746086698 -1.08546999999999993491428540437 0.823199000000000014054535313335 +0.379674000000000011478817896204 0.159923000000000009590550575922 1.3528759999999999674713535569 +0.380363000000000006650680006715 -0.993696000000000023710811092315 -0.931606999999999962902563765965 +0.380798999999999998600230810553 -0.912827000000000055024429457262 -1.01081099999999990401988725353 +0.382031000000000009464429240325 -1.26364399999999998946975665604 0.507203999999999988190779731667 +0.382230000000000014193091146808 0.755920999999999954077622987825 1.13246800000000003016964456037 +0.382755999999999985128340540541 1.22425600000000001088551471184 0.595563999999999982293275024858 +0.382817000000000018378187860435 -0.0837819999999999953654850060047 1.35883500000000001506350599811 +0.382834999999999980868636839659 0.0133130000000000001808553307114 1.36134500000000002728484105319 +0.3836879999999999735216249519 -0.522097999999999951015183796699 1.25705899999999992644461599411 +0.383985999999999993992361169148 1.33784499999999995090149695898 0.250452999999999981195486498109 +0.38409599999999999297983777069 0.162920000000000009254819133275 1.35126900000000005341860287444 +0.384263000000000021216806089797 1.23472200000000009723066796141 -0.572541999999999995374366790202 +0.384539000000000019685586494234 0.670217999999999980431653057167 -1.18445599999999995333155311528 +0.385220999999999980101250685038 1.13911699999999993515586993453 -0.74432299999999995687716136672 +0.385705000000000020055068716829 0.258788000000000018019363778876 1.33576199999999989387333698687 +0.386141000000000012004619520667 0.518612999999999990663468452112 1.25774999999999992361665590579 +0.386156999999999972494890698727 -0.397594000000000002970068635477 -1.30107700000000003903721790266 +0.387384999999999979358733526169 0.0103429999999999997634114734524 1.36008299999999993090682437469 +0.38780999999999998806288203923 0.941101999999999994095389865834 -0.98179899999999997728394873775 +0.38818000000000002502886786715 -0.175964000000000009293898983742 1.34846299999999996721555817203 +0.388693999999999983963050453895 0.165616999999999986448173672215 1.34962500000000007460698725481 +0.390010000000000023323565301325 -0.570524000000000031107560971577 -1.23385300000000008857625743985 +0.390336000000000016285639503621 -0.758858999999999950247797642078 1.12772800000000006370726168825 +0.391305000000000013926637620898 0.213010000000000004893863092548 -1.34220199999999989515231391124 +0.392098999999999975329956214409 0.00767500000000000039829251008427 1.35874899999999998456701177929 +0.392154000000000002579270130809 -0.265367999999999992777333090999 1.33258999999999994123811575264 +0.392257999999999995566213328857 -0.700238000000000027078783659817 -1.16438899999999989631760399789 +0.392539000000000026791013851835 0.962987000000000037402969610412 0.958420000000000049666937229631 +0.392602999999999979774401026589 0.348644000000000009453771099288 1.31312999999999990841104136052 +0.393149000000000026222579663226 -0.0865139999999999936841632575124 1.35570999999999997065458501311 +0.393450999999999995182520251547 0.168002000000000012436274232641 1.34795099999999989925925092393 +0.39381800000000000139266376209 0.679422999999999999154454144445 1.17613400000000001277555838897 +0.394882999999999984019893872755 -1.02706100000000000171951342054 0.888376000000000054512838687515 +0.394923000000000024023449896049 0.762527999999999983593568231299 -1.12364899999999989788079801656 +0.394934999999999980513365471779 -1.17329400000000005910294476053 -0.683671000000000028684610242635 +0.395093000000000027505109301273 -0.43858000000000002538413923503 1.28512599999999999056399246911 +0.395824000000000009169554004984 -1.31946600000000002772537754936 -0.319894000000000011674217148538 +0.395934999999999981401543891479 0.853281999999999984929388574528 -1.05600399999999994271604464302 +0.39607799999999998563637859661 0.260902999999999996028066107101 1.33231100000000002303579549334 +0.396957999999999977536191408944 0.00532000000000000007605027718682 1.3573489999999999167101805142 +0.397701999999999999957367435854 1.3568450000000000787991893958 -0.0283829999999999985083043441136 +0.398058999999999996166621940574 0.435033000000000003026912054338 1.28541599999999989201171501918 +0.398135999999999989906740438528 0.393303000000000013702816659134 -1.29876900000000006230038707145 +0.398318999999999978633979935694 -1.3359570000000000611350969848 0.237825000000000008615330671091 +0.398347000000000006636469151999 0.170066999999999995951682763007 1.34625299999999992195398590411 +0.39869999999999999884536805439 1.17952100000000004165201517026 0.670648000000000021891821688769 +0.399836000000000024723334490773 1.32140999999999997349675595615 -0.306603000000000014413359394894 +0.400795000000000012363443602226 -1.22386499999999998067323758733 0.584396000000000026552982035355 +0.401729000000000002756905814749 -0.682490999999999958802732180629 1.17167400000000010429346275487 +0.401942999999999994731325614339 0.00328500000000000015945578191179 1.35588799999999998213695562299 +0.402579000000000020165202840872 -1.25733099999999997642419202748 -0.507000000000000006217248937901 +0.402639999999999997903898929508 0.53110299999999999176480969254 -1.2473209999999999020303675934 +0.403364000000000000323296944771 0.171804000000000012260414905541 1.34453800000000001091393642128 +0.403422999999999976061815232242 -0.349075999999999997402966300797 -1.30973099999999997855582023476 +0.40361200000000002630073936416 -0.0885650000000000048316906031687 1.35249899999999989574916980928 +0.403760000000000007780442956573 1.31364999999999998436805981328 0.333618999999999998884447904857 +0.403851000000000015521806062679 0.600242999999999971016961808346 1.21515900000000010017231488746 +0.403955999999999981753262545681 -0.177997999999999989562127211684 1.34355399999999991500487794838 +0.404293000000000013471890270011 0.896558999999999994834354311024 1.01623299999999994192023677897 +0.40493899999999999339550527111 -0.353331000000000006178169087434 1.30812100000000008925837846618 +0.405030000000000001136868377216 -1.35432500000000000106581410364 -0.0418569999999999983741894027389 +0.406569999999999986961540798802 0.262328999999999978864906324816 1.32886600000000010268763617205 +0.407032999999999978157916302735 0.00158000000000000002421673972464 1.35437099999999999155875229917 +0.407743999999999995331734226056 0.163486999999999993438137835255 -1.34425299999999992017762906471 +0.408405999999999991256771636472 0.349735999999999991327825910048 1.30800999999999989498178365466 +0.408480000000000009752199048307 0.173203999999999996850519323743 1.34281199999999989458387972263 +0.408604000000000022740920258002 -0.964598999999999984211740411411 0.950048000000000003595346242946 +0.411536000000000012910561508761 -0.603430000000000021920243398199 1.21099599999999996136068602937 +0.412210000000000020836665726165 0.000211000000000000005910202882653 1.3528059999999999529762817474 +0.412291000000000018577139826448 0.518693999999999988403942552395 1.24938900000000008283507213491 +0.413069999999999992734700526853 1.13013099999999999667465999664 0.743086000000000024279245280923 +0.4131870000000000264783750481 -0.266687999999999980627052309501 1.32595400000000007700862170168 +0.413677000000000016921575252127 0.174264000000000002232880547126 1.3410830000000000250537368629 +0.413798999999999972398967429399 1.06423299999999998455280092458 -0.83437300000000003130651293759 +0.414165000000000005364597654989 -0.0899250000000000049293902293357 1.34921500000000005314859663486 +0.414451999999999987078780350203 0.826593000000000022176038783073 1.07003500000000006942002528376 +0.415910000000000001918465386552 -0.78495499999999995832666854767 -1.10039299999999995449684320192 +0.416847000000000023067769916452 -1.1047089999999999410107420772 -0.778367999999999948812501315842 +0.41714000000000001078248601516 0.263058999999999987284837743573 1.32544100000000009131895239989 +0.417451999999999989743315609303 -0.000815999999999999993567645351078 1.35119699999999998141220203252 +0.417553000000000007485567721233 1.25782700000000002837907686626 -0.493479000000000000980548975349 +0.417723999999999984211740411411 -0.299458000000000001961097950698 -1.31750900000000004119726781937 +0.417883000000000004447997525858 -0.522711000000000036713743156724 -1.24585199999999995945643149753 +0.417976999999999987434051718083 -1.17925499999999994216182130913 0.659282000000000034667380077735 +0.418933999999999973073983028371 0.174977999999999994651389556566 1.33935699999999990872368016426 +0.419103999999999976555642433595 0.435097999999999984765963745303 1.27868699999999990701837759843 +0.419719000000000008743228363528 -0.521986999999999978783193910203 1.24553800000000003400657533348 +0.41980400000000001048405806614 -0.178992000000000012205347843519 1.33855400000000002158628831239 +0.420225000000000015187850976872 -1.3117620000000000946016598391 0.320454999999999989857002447025 +0.420713000000000003630873379734 -0.898330999999999990635046742682 1.00796899999999989283594459266 +0.420953999999999994852117879418 1.34890700000000007818812264304 0.0569949999999999970534680926448 +0.421202000000000020829560298807 0.113041000000000002589928271846 -1.34529199999999993231369899149 +0.421941000000000010494716207177 1.28427099999999994039967532444 0.415468999999999977212894464174 +0.422738000000000002653877118064 -0.00149700000000000006672440377997 1.34955200000000008486722435919 +0.422974999999999989874766015419 0.753364999999999951363349737221 1.11961299999999996934718637931 +0.423053000000000012370549029583 1.17105999999999998983923887863 -0.670556000000000040905945297709 +0.424229000000000022740920258002 0.175343999999999999861444166527 1.33764100000000007995026862773 +0.424261999999999972477127130333 0.349785000000000012576606422954 1.30293999999999998706812220917 +0.424765000000000003677058657559 -0.0905900000000000038546943414985 1.34587100000000003952038696298 +0.425188999999999983625542654408 0.343851999999999990986765396883 -1.30421600000000004193623226456 +0.425810999999999995058175272789 1.07628100000000004321520918893 0.812590999999999952230211874848 +0.426244999999999985007548275462 -0.438483999999999984886756010383 1.2751660000000000216857642954 +0.427248000000000016651569012538 -1.32711000000000001186606368719 -0.237145999999999995688781950776 +0.427657000000000009354295116282 1.32949300000000003585398644645 -0.222617000000000009318767979494 +0.427746000000000015095480421223 0.263091999999999992532195847161 1.32204999999999994741983755375 +0.427783000000000024343194127141 0.623226999999999975443643052131 -1.19523599999999996512656252889 +0.428049000000000012811085525755 -0.0018309999999999999453076382494 1.34787699999999999178612597461 +0.428174999999999972288833305356 -0.653352000000000043833381369041 -1.17889700000000008373035598197 +0.429005999999999998451016836043 -0.248935999999999990617283174288 -1.32438100000000003042543994525 +0.429543000000000008142819751811 0.175359999999999988107290960215 1.33594199999999996286703662918 +0.429642999999999997129407347529 0.0869359999999999993880450688266 1.34456299999999995264943208895 +0.42982799999999998785682464586 0.677162999999999959399588078668 1.16477399999999997604049895017 +0.430099000000000009080736163014 -0.869120000000000003659295089165 -1.02939099999999994494714883331 +0.430310999999999999054978161439 -1.03032100000000004236255790602 -0.867912000000000016797230273369 +0.431088999999999999968025576891 -0.353250999999999981682208272105 1.29976000000000002643218977028 +0.431161000000000016463275187562 -0.828516999999999947945639178215 1.06191300000000010683720574889 +0.431209000000000008956391184256 -1.34619500000000003048228336411 0.0426510000000000014108714196936 +0.431626000000000009659828492659 0.0618720000000000033835156898476 -1.34531399999999989880450357305 +0.43336200000000002496847173461 -0.00181400000000000007419065362058 1.3461780000000000967474989011 +0.433508999999999977692510810812 -1.12999200000000010746248335636 0.731566000000000049574566673982 +0.434232000000000006867395541121 -0.266622999999999998888000618535 1.31922500000000009201528428093 +0.43445000000000000284217094304 0.983211999999999974875208863523 -0.918992999999999948812501315842 +0.434840000000000004298783551349 -0.951358000000000036955327686883 -0.95175200000000004241229589752 +0.43485299999999998954436364329 0.175026999999999988144594453843 1.33426700000000009183054316964 +0.434985999999999983778309342597 0.598288999999999959733543164475 1.20533700000000010277290130034 +0.435371000000000007990053063622 -0.0905579999999999996074251384925 1.34247999999999989562127211684 +0.435640000000000027213786779612 -1.19961300000000004040145995532 -0.609217000000000008519407401764 +0.435661000000000020460078076212 -0.178942999999999990956567330613 1.33348399999999989162802194187 +0.436871000000000009322320693173 1.01818399999999997795896433672 0.878889000000000031320723792305 +0.437221999999999999531041794398 -0.197708999999999995855759493679 -1.33031799999999988948218287987 +0.437746999999999997221777903178 0.482098999999999999754862756163 -1.25537100000000001465139121137 +0.438346999999999986652454708747 0.262427000000000021362467350627 1.31870599999999993379162788187 +0.438363999999999975898390403017 -1.27476300000000009049472282641 -0.427572000000000007613465413669 +0.438425999999999982392751007865 0.517054000000000013592682535091 1.24114400000000002499689344404 +0.438456000000000012395418025335 1.24982299999999990625099144381 0.495680000000000009485745522397 +0.438657999999999992368771017937 -0.00144800000000000006830647159006 1.34446200000000004592948243953 +0.438975000000000004085620730621 0.0101799999999999998129274203507 -1.3443199999999999594280097881 +0.439906999999999992478905141979 -0.755433000000000021145751816221 1.1116660000000000430020463682 +0.440110000000000001207922650792 0.348791000000000017688961406748 1.29794000000000009364953257318 +0.440137000000000000454747350886 0.433777999999999996916244526801 1.27205199999999996052224560117 +0.440139999999999975699438437005 0.174344999999999999973354647409 1.33262199999999997324096057127 +0.44047399999999997666222384396 -1.2823899999999999188560195762 0.401820999999999983742782205809 +0.442342000000000012960299500264 -0.145978999999999997649879901473 -1.33529900000000001369926394545 +0.44254599999999999493383029403 1.33564499999999997115196492814 0.142147999999999996578736727315 +0.442801999999999973400832686821 -0.473098999999999991761256978862 -1.25702200000000008373035598197 +0.443220000000000002859934511434 -0.0418289999999999981272758020623 -1.34231400000000000716227077646 +0.44346200000000002283684352733 0.715902999999999956060037220595 -1.13614499999999996049382389174 +0.443913999999999975276665509227 -0.00073399999999999995196203750325 1.34273599999999992959942574089 +0.444342999999999987981169624618 -0.0939500000000000057287508070658 -1.33930299999999991023003076407 +0.4453820000000000001172395514 0.173317999999999999838351527615 1.33101300000000000167688085639 +0.445940999999999976299847048722 -0.0898270000000000040651926269675 1.33905500000000010629719326971 +0.446207000000000020278889678593 0.956068000000000028926194772794 0.941718999999999972772002365673 +0.446562000000000014487966382148 0.897272999999999987252863320464 -0.997739000000000042511771880527 +0.446917999999999981941556370657 -0.679367999999999971905140228046 1.15703200000000006042455424904 +0.44733099999999997864463807673 -1.07626899999999992019183991943 0.800962999999999980538234467531 +0.448898999999999992471799714622 0.261066000000000020264678823878 1.31542200000000009119105470745 +0.449110999999999982446041713047 0.000324999999999999985081378106599 1.34100700000000006006928288116 +0.449193999999999982186693614494 1.27596799999999999108979409357 -0.41246800000000000130384592012 +0.449259000000000019436896536718 0.29277900000000001146105432781 -1.30860500000000001818989403546 +0.449670999999999987384313726579 0.807717000000000018289370018465 -1.07022900000000009690381830296 +0.45055800000000001404032445862 0.171948999999999990739851796206 1.32944799999999996309441030462 +0.451463999999999976431297454837 -0.177851000000000009082512519853 1.32836299999999996046540218231 +0.452164999999999983604226372336 -0.600621999999999989228172125877 1.19783200000000000784439180279 +0.453241000000000004988010005036 1.21044299999999993566746070428 0.573934000000000055230486850633 +0.453780999999999989924504006922 0.890179000000000053560711421596 1.00083199999999994389554558438 +0.453790999999999999925393012745 1.33232799999999995677057995636 -0.137752000000000013324452652341 +0.454228000000000020630608332795 0.00172600000000000010358380819753 1.33928099999999994373922618252 +0.455025000000000012789769243682 1.09961099999999989407228895288 -0.764073000000000002174260771426 +0.45520500000000002627231765473 -0.265174000000000020804691303056 1.31242999999999998550492819049 +0.455627000000000004220623850415 -0.519504999999999994564348071435 1.23390399999999988978061082889 +0.455647999999999997466915147015 0.170244000000000006433964472308 1.3279309999999999725162069808 +0.455685000000000006714628852933 -1.33275100000000001898570189951 0.126990999999999992775556734159 +0.455886999999999986687981845535 0.346756999999999981909581947548 1.2930299999999999016608853708 +0.456432999999999977625009250914 -0.0884019999999999944728656942061 1.33560999999999996390442902339 +0.456986000000000003318234576 -1.3295159999999999200781530817 -0.153461999999999987309706739325 +0.457121999999999972796871361425 -0.737702999999999997626787262561 -1.11661699999999997068300672254 +0.45715000000000000079936057773 -0.351449999999999984634513339188 1.29131599999999990835419794166 +0.457291000000000003034017481696 -0.436338000000000003630873379734 1.26510600000000006382094852597 +0.458984000000000003094413614235 -1.24795699999999998297539605119 0.481599999999999972555286831266 +0.459214999999999984314769108096 1.19838099999999991851495906303 -0.594142999999999976701303694426 +0.459243999999999985561771609355 0.00346199999999999979971576635762 1.33756600000000003269917669968 +0.459361999999999992549959415555 0.259016000000000023995028186619 1.31221100000000001628563950362 +0.459386999999999989796606314485 -1.01829799999999992543564530934 0.867198000000000024378721263929 +0.459565000000000001278976924368 0.820776999999999978818721046991 1.05599500000000001698197138467 +0.46063300000000001466204935241 0.168209999999999998410160628737 1.32647000000000003794298208959 +0.461075000000000012612133559742 0.431078999999999989967136571067 1.26553599999999999425881469506 +0.461164999999999991597832149637 -0.604137999999999952827067772887 -1.19262099999999993116261975956 +0.461199000000000025600854769436 -1.13443300000000002469846549502 -0.707358000000000042284398205084 +0.462390000000000023216983890961 1.31711200000000006049560852261 0.226739999999999997104538351778 +0.46353600000000000358468810191 0.748134999999999994457766661071 1.10699100000000005827871518704 +0.464139999999999997015720509808 0.00552699999999999979499731850296 1.33586800000000005539391167986 +0.46444400000000002348699013055 0.513700000000000045474735088646 1.23304700000000000414956957684 +0.464666000000000023462121134799 -0.421883999999999981245224489612 -1.2673200000000000020605739337 +0.465492000000000016868284546945 0.165854000000000001424638185199 1.3250699999999999700861508245 +0.465677000000000007595701845275 0.672541000000000055436544244003 1.15361699999999989252330578893 +0.465980000000000005311306949807 0.594292999999999960181185088004 1.19569199999999997707789134438 +0.466237999999999985778487143762 1.16628599999999993386268215545 0.64992300000000002846434199455 +0.466805999999999998717470361953 -0.0862870000000000025863755581668 1.33215900000000009306688752986 +0.467150000000000009681144774731 -0.175719999999999987316812166682 1.32321299999999997254462869023 +0.468177000000000009816147894526 0.573541999999999996262545209902 -1.2049309999999999742925638202 +0.46889700000000000823519030746 0.00791299999999999989497290187046 1.33419400000000010209078027401 +0.469629999999999991899812812335 -0.956308000000000046902925987524 0.930011000000000032095215374284 +0.469694000000000000394351218347 0.256284000000000011798562127296 1.30908599999999997187671851862 +0.469891999999999976367348608619 0.430943000000000020488499785642 -1.26233499999999998486543972831 +0.470206000000000012839507235185 0.163185999999999997722710531889 1.3237360000000000237463382291 +0.470247999999999999332089828386 0.240285999999999999587885213259 -1.3119179999999999175486209424 +0.471530000000000004689582056017 0.343691000000000024261481712529 1.28822999999999998621547092625 +0.472418999999999977834619357964 -1.28716199999999991732124726695 -0.346457999999999988194332445346 +0.473494999999999999218402990664 0.0106090000000000003743672039036 1.33254999999999990123455972935 +0.474625999999999992340349308506 -1.22119899999999992346033650392 -0.532357999999999997875477220077 +0.474756999999999984574117206648 0.16021599999999999730526667463 1.3224739999999999273683215506 +0.475683000000000022478019445771 -1.20859800000000006114930783951 0.559478999999999948578022213042 +0.476024000000000002685851541173 -0.262344999999999994866328734133 1.30559399999999992125765402307 +0.476621000000000016871837260624 -0.822200999999999959655383463542 -1.0472900000000000542144107385 +0.477019000000000026329161073591 -0.0834909999999999957731589006471 1.32871399999999995067412328353 +0.477393999999999985028864557535 1.11752600000000001934097326739 0.723346999999999962227548166993 +0.47791699999999998071942286515 0.0136069999999999993040011858625 1.33094299999999998718180904689 +0.478020000000000000461852778244 -0.890545000000000031015190415928 0.989153999999999977710274379206 +0.478134000000000003449684982115 1.3299049999999998927791011738 -0.0523430000000000006377121053447 +0.478364000000000011425527191022 -1.31404600000000004733635705634 0.2108299999999999896349578421 +0.478561000000000014154011296341 -1.06287899999999990718890785502 -0.800792999999999977056575062306 +0.479063000000000016598278307356 1.28907400000000005313438578014 -0.329828999999999983305798423316 +0.479125999999999996337152197157 0.156957000000000013173462320992 1.32128800000000001801936377888 +0.479374999999999995559107901499 1.02143999999999990357935075735 -0.85255999999999998451016836043 +0.479854999999999976001419099703 0.252879999999999993676169651735 1.30605900000000008098766102194 +0.480410000000000003694822225953 1.29338099999999989186960647203 0.310437000000000018484769270799 +0.481835999999999986531662443667 0.427010999999999973919528883926 1.2591650000000000897415475265 +0.482144999999999990247800951693 0.0168929999999999982951415233856 1.32938000000000000611066752754 +0.482659000000000004693134769695 -0.172558999999999990171417607598 1.31805299999999991911181496107 +0.483018999999999976147080360533 -0.347934999999999994280130977131 1.28282199999999990680521477771 +0.483296000000000003371525281182 0.153420000000000000817124146124 1.32018400000000002414424216113 +0.483389000000000013113066188453 -0.369269000000000013894663197789 -1.27670499999999997875477220077 +0.484522999999999981479703592413 -0.821266999999999969261921251018 1.04439299999999990475885169872 +0.484920000000000017692514120426 -1.32667500000000004867217739957 -0.0691729999999999983772980272079 +0.486163000000000011802114840975 0.0204539999999999999591437926938 1.32786599999999999077715528983 +0.486603999999999980996534532096 -0.905467000000000021842083697265 -0.971260000000000012221335055074 +0.486665999999999987490895136943 1.06435600000000007980816008057 0.793915999999999955072382817889 +0.486976999999999993207211446133 0.339606999999999992212451616069 1.28355799999999997673683083121 +0.487032000000000020456525362533 -0.0800259999999999999120703364497 1.32529099999999999681676854379 +0.48716500000000001469047106184 -0.98613499999999998379962562467 -0.888936999999999977184472754743 +0.487252000000000018431478565617 0.149621000000000003993250174972 1.3191660000000000607656147622 +0.488076000000000009837464176599 0.186580999999999996852295680583 -1.31414199999999992130028658721 +0.488107999999999986329157763976 -0.432151999999999980595077886392 1.25498799999999999243982529151 +0.48911399999999999321786958717 -0.748747999999999969134023558581 1.09551099999999990153298767837 +0.489169999999999993711696788523 0.666233999999999992880361787684 -1.14753900000000008674305718159 +0.489804999999999990389909498845 0.248820000000000013384848784881 1.30314200000000002255262643303 +0.489954000000000000625277607469 0.024278000000000000968558566683 1.32640699999999989167065450602 +0.490240999999999982339460302683 0.508643999999999985028864557535 1.22513000000000005229594535194 +0.490503999999999995562660615178 -1.16446899999999997632471604447 0.635149999999999992361665590579 +0.490976999999999996759925124934 0.145573000000000007947420499477 1.31823800000000002086153472192 +0.491099999999999980992981818417 -0.552790000000000003588240815589 -1.20550599999999996647659372684 +0.491271000000000013230305739853 -0.514662999999999981604048571171 1.22220100000000009288214641856 +0.491775000000000017674750552032 -0.673274000000000039101166748878 1.14230499999999990379251357808 +0.492495000000000016093792964966 -0.595142999999999977589482114126 1.18459000000000003183231456205 +0.493503999999999998227195874279 0.0283480000000000016691092952215 1.32501000000000002110311925207 +0.493564000000000002721378677961 1.22097199999999994624033661239 -0.515384999999999982023268785269 +0.494018000000000012672529692281 1.00698500000000001897149104479 0.861352000000000006529887741635 +0.494454000000000004622080496119 1.13064900000000001512034941697 -0.690759000000000011887379969266 +0.494456000000000006622258297284 0.141294000000000002925659714492 1.31740199999999996194333107269 +0.495369000000000003769429213207 -0.687775000000000025224267119484 -1.13206699999999993444532719877 +0.495427000000000006263434215725 0.937722000000000055486282235506 -0.93553699999999995196020563526 +0.496533999999999975383246919591 1.26454599999999994786037404992 0.392909000000000008245848448496 +0.496607000000000020634161046473 -0.258149000000000017340795466225 1.29874599999999995603161551117 +0.496711000000000013621104244521 0.58827099999999998836130998825 1.18626100000000000989075488178 +0.496798000000000017362111748298 0.0326489999999999974678033254349 1.3236790000000000500079977428 +0.496804999999999996607158436746 -0.0759039999999999992486010569337 1.32190099999999999269562067639 +0.497676999999999980506260044422 0.136799000000000003929301328753 1.31666400000000005654499091179 +0.497927999999999981728393549929 -0.168379000000000000891731133379 1.31290400000000007096900844772 +0.49889899999999998136956946837 -0.315460999999999991416643752018 -1.285139999999999949054085846 +0.498945000000000027373658895158 0.377834999999999976427744741159 -1.26818499999999989569232639042 +0.499153000000000013347545291253 -1.29015699999999999825206487003 0.293837000000000014843237750028 +0.49941999999999997505994997482 0.945640000000000036095570976613 0.925389000000000017109869077103 +0.499502999999999974800601876268 0.244117000000000000659028387417 1.30034699999999991959498402139 +0.499823999999999990517807191281 0.0371630000000000015880630144238 1.32241999999999992887467215041 +0.500588999999999950674123283534 1.32223399999999990939159033587 0.0332720000000000029616309404901 +0.500624999999999986677323704498 0.132106000000000001204369937113 1.31602500000000000035527136788 +0.500635000000000052189363941579 0.758762000000000047528203594993 -1.0833489999999998953938984414 +0.501221000000000027618796138995 0.66557599999999994544452874834 1.1427099999999998924948840795 +0.502167999999999947746687212202 0.334519000000000010786038728838 1.27903300000000008651568350615 +0.502337999999999951228346617427 0.42158899999999999153033058974 1.25296399999999996666133483814 +0.502569999999999961204366627499 0.0418730000000000004978240042419 1.3212379999999999125037675185 +0.502643999999999979699794039334 0.849719000000000002081890215777 -1.01258500000000006835421118012 +0.502669999999999950190954223217 0.131873999999999991228349927042 -1.31526900000000002144417976524 +0.502851000000000047940318381734 0.880562999999999984623855198151 0.985774000000000039101166748878 +0.50329000000000001513456027169 0.12723499999999998699706793559 1.31548899999999990839683050581 +0.503390000000000004121147867409 -1.11574599999999990451726716856 0.708315000000000027924329515372 +0.503731000000000039840131194069 -1.1596809999999999618580659444 -0.633557000000000036799008285016 +0.503753000000000006330935775622 0.740253999999999967585040394624 1.09464899999999998314592630777 +0.504296999999999995267785379838 0.812011000000000038312464312185 1.04226799999999997226041159593 +0.504608999999999974228614973981 -1.29448399999999996801136603608 -0.263975999999999988432364261826 +0.505024999999999946176387766172 0.0467600000000000029509727994537 1.3201380000000000336513039656 +0.505562999999999984623855198151 0.521357999999999988105514603376 -1.21350399999999991607069205202 +0.505661000000000027121416223963 0.12220399999999999318678334248 1.3150560000000000027142732506 +0.506299999999999972288833305356 -0.0711419999999999969064745641845 1.31855999999999995431210209063 +0.50704099999999996395416701489 1.29709199999999991170795965445 -0.245887999999999995459631918493 +0.507179000000000046455284063995 0.0518049999999999968847141929018 1.31912300000000004551736765279 +0.507728999999999985881515840447 0.117032999999999998141930745987 1.31472999999999995424104781705 +0.508595000000000019291235275887 -0.342720999999999997864819079041 1.27431300000000002903277618316 +0.508912999999999948741447042266 0.238792000000000004256150987203 1.29768499999999997740474100283 +0.509023000000000003240074875066 0.0569879999999999969917396924757 1.31819899999999989859134075232 +0.509484999999999965680785862787 0.111742999999999995108801442711 1.31451099999999998502175913018 +0.510550999999999977063680489664 0.0622880000000000030868640976678 1.31736800000000009447376214666 +0.510697999999999985298870797124 1.23072000000000003616662525019 0.473829999999999973425701682572 +0.510921999999999987274179602537 0.106354000000000004089173444299 1.31440000000000001278976924368 +0.510940999999999978520293097972 -1.31859900000000007658229606022 0.0153889999999999999014121954133 +0.51113299999999994849275708475 -0.26067200000000001480771061324 -1.29259199999999996322230799706 +0.511738000000000026190605240117 -1.23796400000000006436096100515 -0.453398000000000023224089318319 +0.511755999999999988681054219342 0.0676849999999999951683093968313 1.31663400000000008205347512558 +0.512036000000000046661341457366 0.100888000000000005451639140119 1.31439799999999995527844021126 +0.51263400000000003409184046177 0.0731580000000000008064660050877 1.31600000000000005861977570021 +0.512820999999999971308284330007 0.0953660000000000063202776345861 1.31450399999999989475440997921 +0.512897999999999965048402827961 -0.163198000000000009723777338877 1.30778499999999997527311279555 +0.513180999999999998273381152103 0.0786840000000000039381831129504 1.31546699999999994190602592425 +0.513274000000000008014922059374 0.0898100000000000009414691248821 1.31471800000000005326228347258 +0.513394000000000017003287666739 0.0842419999999999974393816160045 1.31503999999999998671285084129 +0.513974999999999959676699745614 0.0763839999999999935687000629514 -1.31529300000000004544631337922 +0.51428899999999999614885837218 -1.06261800000000006249933903746 0.778684000000000042795988974831 +0.51547799999999999176480969254 -0.065758999999999998009592161452 1.31527900000000008695622000232 +0.515715999999999952230211874848 0.501908000000000020790480448341 1.21742599999999989712762271665 +0.516871999999999998109956322878 -0.252601999999999993207211446133 1.29191100000000003156230832246 +0.517043000000000030347280244314 0.328446999999999988961718599967 1.27467200000000002724220848904 +0.51785999999999998699706793559 -0.499510000000000009556799795973 -1.21750200000000008415668162343 +0.517974000000000045496051370719 -1.26117600000000007476330665668 0.375684000000000017926993223227 +0.517996000000000011986855952273 0.232863999999999987666754464044 1.2951660000000000394493326894 +0.518576000000000036926905977452 -0.425939999999999985291765369766 1.24485099999999992981258856162 +0.520043000000000033011815503414 -0.205117999999999994775734535324 -1.29903100000000004676792286773 +0.520182000000000033246294606215 -0.772256999999999971251440911146 -1.06443899999999991301535828825 +0.521070000000000033146818623209 1.30934499999999998109956322878 0.118756000000000000449418280368 +0.521943999999999963534946800792 0.0203270000000000013173906410202 -1.31421499999999991104004948284 +0.522407999999999983486986820935 1.0556380000000000762838681112 -0.78276199999999995782218320528 +0.522499999999999964472863211995 0.414835999999999982534859555017 1.2469580000000000108428821477 +0.522846999999999950681228710891 1.19203700000000001324451659457 0.552881999999999984574117206648 +0.523159000000000040664360767551 -1.00529800000000002491162831575 0.84597999999999995424104781705 +0.524305000000000021032064978499 -0.0597769999999999968043340459189 1.31207099999999998729549588461 +0.524793999999999982719600666314 0.32298700000000002408029331491 -1.27289900000000000268585154117 +0.524920999999999970953012962127 -1.09124200000000004528999397735 -0.730512999999999967926100907789 +0.525595000000000034390268410789 -0.149020000000000013562484468821 -1.30443200000000003591082986532 +0.525966999999999962334129577357 1.23874499999999998500754827546 -0.434593000000000007077005648171 +0.526510999999999951270979181572 -0.507479000000000013415046851151 1.21047600000000010744827250164 +0.526546999999999987274179602537 -0.0360740000000000018975931936893 -1.31203899999999995529265106597 +0.526716999999999990755839007761 0.226358000000000003648636948128 1.29279999999999994919619439315 +0.527059000000000055230486850633 0.580246000000000039520386962977 1.17708199999999996165911397838 +0.527510000000000034425795547577 -0.15703600000000000891375862011 1.30271800000000004260414243618 +0.527765999999999957381646709109 -0.0925979999999999997539745777431 -1.30877400000000010393819138699 +0.529962999999999961886487653828 -0.944008999999999987018384217663 0.909936999999999995836219568446 +0.530499999999999971578290569596 -0.635367000000000015091927707545 -1.14668100000000006133404895081 +0.531542999999999987714716098708 0.321417000000000008252953875854 1.27049300000000009447376214666 +0.531866999999999978676612499839 0.613716999999999957005059059156 -1.15778599999999998182431681926 +0.531931999999999960415664190805 1.15722499999999994813038028951 -0.614717999999999986648901995068 +0.532367000000000034631852940947 -0.587014000000000035761615890806 1.17132400000000003181810370734 +0.532745000000000024087398742267 -0.0532180000000000014148682225823 1.30895000000000005790923296445 +0.532931999999999961303842610505 1.14864999999999994884092302527 0.6297509999999999497077851629 +0.533017999999999991800336829328 1.29999200000000003640820978035 -0.160977000000000008972378395811 +0.533776000000000028222757464391 -0.335828000000000015390355656564 1.26582100000000008499512205162 +0.534676000000000040124348288373 -0.87899499999999997079669356026 0.970303000000000026581403744785 +0.534749999999999947597473237693 -1.22721700000000000230215846386 0.4560489999999999821689300461 +0.534807999999999950091478240211 -1.29669499999999993100630035769 -0.180452000000000001289635065405 +0.534945000000000003836930773105 -1.30531799999999997830002484989 0.0998909999999999936859396143518 +0.535042000000000017578827282705 0.219298999999999993937294107127 1.2905960000000000764686092225 +0.535451000000000010281553386449 -0.856203999999999965098140819464 -0.990053999999999989611865203187 +0.536121999999999987451815286477 -0.664232999999999962348340432072 1.12754899999999991244692409964 +0.536321999999999965424990477914 0.656294000000000044003911625623 1.13209399999999993369215189887 +0.536739999999999994884092302527 -0.245725999999999999978683717927 1.28511799999999998256328126445 +0.537279999999999979820586304413 -0.810512000000000010224709967588 1.02683999999999997498889570124 +0.537568999999999963534946800792 -1.01701899999999989532284416782 -0.822613999999999956358465169615 +0.537761999999999962263075303781 -0.738831000000000015504042494285 1.07932399999999995010568909493 +0.539494000000000029082514174661 1.29128799999999999137401118787 0.20377200000000000867927951731 +0.539792999999999967286612445605 0.466882000000000019213075574953 -1.22091900000000008752465419093 +0.540764000000000022438939595304 -0.0461080000000000031490365870468 1.30592799999999997773159066128 +0.540769000000000055194959713845 0.49351699999999998347277596622 1.20996299999999989971399827482 +0.540914000000000005918820988882 1.10072900000000006848210887256 0.704134999999999955377916194266 +0.541189000000000031143088108365 -0.938239999999999962909669193323 -0.90929599999999999315747345463 +0.541340000000000043378634018154 -0.444508999999999987462473427513 -1.22856100000000001415401129634 +0.541704999999999992077448496275 -0.149915999999999993708144074844 1.29772200000000004216360594 +0.542240999999999973013586895831 0.406779000000000001691091711109 1.24117100000000002424371814413 +0.54233699999999995799981888922 0.974470999999999976104447796388 -0.869642000000000026105340111826 +0.542938000000000031697311442258 0.211714999999999986535215157346 1.28856299999999990291144058574 +0.543468999999999979877429723274 0.729751999999999956258989186608 1.0826370000000000715090209269 +0.544275999999999982037479639985 -1.18035200000000006781419870094 -0.557254999999999944826356568228 +0.545610999999999957132956751593 0.313454999999999983639753509124 1.26651299999999999990052401699 +0.546761999999999970256681081082 1.04846499999999998031796621945 0.775741000000000013869794202037 +0.546831999999999984751752890588 -1.24984300000000003727507191797 -0.372649000000000008014922059374 +0.547335000000000015951684417814 0.266612999999999988887111612712 -1.27645600000000003504396772769 +0.548331000000000012839507235185 -0.0384760000000000032538416405714 1.30301700000000009183054316964 +0.548470000000000013073986337986 0.800329999999999985860199558374 1.02890799999999993374899531773 +0.548574000000000006060929536034 -0.417729000000000016967760529951 1.23473399999999999820943230588 +0.548626999999999975798914420011 0.706610999999999989107379860798 -1.09531200000000006333777946566 +0.549416000000000015468515357497 -1.18841499999999999914734871709 0.534614000000000033629987683526 +0.550371999999999972352782151575 0.203636000000000011445067116256 1.28671000000000002039257651631 +0.550451000000000023604229681951 0.992061999999999999388933247246 0.84428400000000003444711182965 +0.551306999999999991501908880309 0.867750000000000021316282072803 0.971118000000000036742164866155 +0.551968000000000014182433005772 0.93174500000000004540368081507 0.909495999999999971130648646067 +0.553633000000000041751491153263 0.888367000000000017756462966645 -0.950944000000000011496581464598 +0.555417000000000049553250391909 -0.0303520000000000005069278330438 1.30022700000000002162892087654 +0.555427000000000004042988166475 -0.141868999999999995109689621131 1.29281599999999996519761680247 +0.555787999999999948741447042266 1.26813500000000001222133505507 0.287982999999999988993693023076 +0.555831999999999992745358667889 0.798626999999999975798914420011 -1.02627700000000010582823506411 +0.556131999999999959705121455045 -0.23754700000000000814637246549 1.27839299999999989054799698351 +0.556293000000000037452707601915 1.25162900000000010258816018904 -0.352086000000000010068390565721 +0.556838000000000055145221722341 -1.28688599999999997436361809378 0.183997999999999994891197729885 +0.556891000000000024883206606319 1.29776000000000002465583293088 -0.0754309999999999980513365471779 +0.556903999999999954617635467002 0.570250000000000034638958368305 1.16819199999999989714183357137 +0.557317999999999980076381689287 0.195092999999999988647303439393 1.2850429999999999353121893364 +0.558463999999999960444085900235 -0.327284000000000019348078694748 1.25737999999999994216182130913 +0.559190999999999993619326232874 0.30459300000000000263611354967 1.26274599999999992405719240196 +0.560609000000000023966606477188 -0.719482999999999983664622504875 -1.08076900000000009072209650185 +0.561207000000000011397105481592 -0.497981000000000006977529665164 1.19877499999999992397192727367 +0.561447999999999947107198750018 -0.388004000000000015546675058431 -1.2386399999999999632649405612 +0.561486000000000040621728203405 0.397448000000000023490542844229 1.235624999999999973354647409 +0.561912999999999995814903286373 -1.14492299999999991300114743353 0.611068999999999973304909417493 +0.561992999999999964799712870445 -0.0217679999999999991555643674701 1.29757100000000002992806003022 +0.562377000000000015766943306517 -0.58068699999999995320365542284 -1.16040300000000007329958862101 +0.562895999999999951945994780544 -1.29378900000000007786127298459 -0.0962159999999999959729990450796 +0.563379999999999991899812812335 1.08566999999999991288746059581 -0.709875000000000033750779948605 +0.563745000000000051620929752971 0.186121000000000008656186878397 1.28356899999999995998223312199 +0.565300000000000024691360067663 0.483505000000000018101076193489 1.20277199999999995227994986635 +0.566481000000000012306600183365 0.208938000000000012601475418705 -1.27884500000000000952127265919 +0.567311000000000009713119197841 1.17923399999999989340437878127 -0.536251000000000033196556614712 +0.568033000000000010132339411939 -0.0127569999999999992429389195081 1.29505800000000004246203388902 +0.568622999999999989562127211684 -0.132923999999999986609822144601 1.28802100000000008250822247646 +0.569209999999999993747223925311 -1.11529900000000004034461653646 -0.657349999999999989874766015419 +0.569630999999999998451016836043 0.176754999999999995452526491135 1.28229400000000004489209004532 +0.569888999999999978918197029998 1.23997700000000010689404916775 0.371057999999999998941291323717 +0.570732000000000017081447367673 0.410328000000000026048496692965 -1.22714900000000004531841568678 +0.570841000000000042824410684261 0.644733000000000000540012479178 1.12181099999999989158538937772 +0.571382999999999974249931256054 0.558559000000000027696955839929 -1.16684699999999996755661868519 +0.571624000000000020982326986996 -0.576269000000000031214142381941 1.15808500000000003105071755272 +0.572192999999999951654672258883 -1.09691200000000010916778592218 0.685112000000000054278359584714 +0.572230000000000016413537196058 0.294866000000000016978418670988 1.25920900000000002272315668961 +0.573513999999999968260055993596 -0.00335600000000000004210520820891 1.29269900000000004247624474374 +0.574949999999999961097785217135 0.167032000000000013795187214782 1.28122300000000000075317529991 +0.574971000000000009855227744993 -0.228098999999999996202149077362 1.27176200000000005907452305109 +0.576532999999999962170704748132 -1.26337499999999991473487170879 0.267380000000000006554756737387 +0.577983000000000024520829811081 -0.407550000000000023359092438113 1.224679000000000073100636655 +0.578103999999999951242557472142 -0.330218000000000011517897746671 -1.24769899999999989148591339472 +0.578412999999999954958695980167 0.00639900000000000017397194795876 1.29050299999999995570476585272 +0.57856700000000005346123543859 1.29040700000000008174083632184 0.010413000000000000380695475144 +0.57968299999999994831512140081 0.156988999999999989665155908369 1.28035999999999994258814695058 +0.579766000000000003566924533516 -1.25679099999999999148769802559 -0.290428999999999992720489672138 +0.579786000000000023568702545163 -0.652280999999999999694466623623 1.11282400000000003537081738614 +0.580156000000000005023537141824 0.38688099999999997491428871399 1.23034200000000004671107944887 +0.580215000000000036273206660553 -1.04457299999999997375255134102 0.756450999999999984524379215145 +0.581188999999999955647922433855 -0.803763000000000005229594535194 -1.00805999999999995608845893003 +0.581241000000000007652545264136 -0.1231180000000000052118309668 1.28335500000000002351896455366 +0.58174199999999998134114775894 1.20692500000000002557953848736 0.452668000000000014804157899562 +0.582153999999999949288564948802 0.15018699999999998717647997637 -1.28005499999999994287236404489 +0.582524999999999959499064061674 0.716670999999999946972195630224 1.07100299999999992728305642231 +0.582559999999999966746599966427 -0.317122000000000014985346297181 1.24902299999999999435829067806 +0.582671999999999967734254369134 -1.19636499999999990073717981431 -0.478754000000000012882139799331 +0.582712000000000007737810392427 0.0164690000000000009994227667676 1.28847800000000001219291334564 +0.583810000000000051123549837939 0.146667999999999992821742011984 1.2797089999999999854196630622 +0.584423000000000025799806735449 1.25957300000000005368860911403 -0.268189000000000010714984455262 +0.584675999999999973510966810863 0.284312000000000009158895863948 1.25591399999999997483257629938 +0.585659999999999958397722821246 -0.725720000000000031725733151688 1.06317100000000008819256436254 +0.585849999999999981881160238117 -1.04388900000000006684786058031 -0.753044000000000046668446884723 +0.585946999999999995623056747718 -0.988110999999999961573848850094 0.824805000000000010373923942097 +0.586126999999999953594453927508 0.558323000000000013720580227528 1.15962499999999990585308751179 +0.586393999999999970818009842333 0.0268140000000000010282885654078 1.28663299999999991563015555585 +0.587106000000000016747492281866 1.0073730000000000739390770832 -0.800314999999999998614441665268 +0.587315000000000031477043194172 0.136108000000000006757261417079 1.27927100000000004698108568846 +0.588763000000000036315839224699 -1.28577800000000008751044333621 -0.0115999999999999992006394222699 +0.58921199999999995799981888922 0.471911000000000024900970174713 1.19588000000000005407230219134 +0.589222000000000023511859126302 -0.796293999999999946304285458609 1.00932299999999997019983766222 +0.589365999999999945480055885128 -0.927749000000000045851322738599 0.889904000000000028336444302113 +0.589443000000000050242476845597 0.0373939999999999966862063160988 1.28497400000000006059508450562 +0.590184999999999959641172608826 0.125351999999999991208810001808 1.27905000000000002025046796916 +0.590458999999999956109775212099 -0.863725999999999993761434780026 0.951490999999999975678122154932 +0.590874000000000010324185950594 -0.523950000000000026822988274944 -1.17317699999999991433696777676 +0.591242999999999963023356031044 -0.271378999999999981351805899976 -1.25570099999999995610266978474 +0.591297999999999990272669947444 1.1691110000000000113118403533 0.532491000000000047620574150642 +0.591848999999999958454566240107 0.0481670000000000014805934256401 1.28350900000000001099920154957 +0.591910000000000047215564791259 0.785780999999999951732831959816 1.01596799999999998220800989657 +0.592168000000000027682744985214 -0.886827000000000031931790545059 -0.928910000000000013464784842654 +0.592408000000000045659476199944 0.114441000000000001057820497863 1.27904499999999998749444785062 +0.593184000000000044572345814231 -0.21741800000000000014921397451 1.26525200000000004330047431722 +0.593230999999999952798646063457 -0.112489000000000005652367462972 1.27883700000000000152056145453 +0.593457000000000012285283901292 0.651469999999999993534061104583 -1.10607199999999994410870840511 +0.593601000000000045275783122634 0.0590899999999999966937558326663 1.28224300000000002164313173125 +0.593637999999999999012345597293 -0.967311000000000031917579690344 -0.843744000000000049510617827764 +0.593953999999999981973530793766 -1.23487900000000005995559604344 0.349704999999999988080645607624 +0.593975000000000030730973321624 0.103418999999999997041477683979 1.27925700000000008849099231156 +0.594295000000000017692514120426 0.0905939999999999939772621360135 -1.28008100000000002438582669129 +0.594691999999999998394173417182 0.0701210000000000027720048478841 1.28118099999999990323829024419 +0.594879999999999964366281801631 0.092328999999999994408028669568 1.27968499999999996141752944823 +0.59511899999999995358734850015 0.0812149999999999955280216568099 1.28032699999999999285194007825 +0.595222000000000028840929644502 -0.486207999999999973539388520294 1.18714399999999997703525878023 +0.596480000000000010196288258157 0.272973999999999994425792237962 1.25287499999999996092014953319 +0.597741999999999995552002474142 -0.664089000000000040380143673246 -1.09621600000000007923972589197 +0.597959000000000018282264591107 1.27796200000000004237676876073 0.0962159999999999959729990450796 +0.598180000000000045012882310402 0.375120000000000008988365607365 1.22534300000000007102585186658 +0.598257999999999956486362862051 0.351920000000000010587086762825 -1.2321679999999999299831188182 +0.598520000000000051976201120851 1.1266819999999999613038426105 0.610214000000000034162894735346 +0.598960000000000047926107527019 0.851789000000000018353318864683 0.956922999999999968068209454941 +0.600450999999999956990848204441 1.19658899999999990271248861973 -0.455668000000000017468693158662 +0.600812000000000012711609542748 -0.211717999999999989535481859093 -1.26261700000000010035705599876 +0.602127999999999996560973158921 1.11141800000000001702460394881 -0.634186999999999945210049645539 +0.602437000000000000277111666946 0.923509000000000024321877845068 -0.885550999999999977063680489664 +0.602852999999999972224884459138 0.0303940000000000008772982340588 -1.27892300000000003201705567335 +0.603380999999999945160311654035 1.0798069999999999613038426105 0.685528000000000026226132376905 +0.603644999999999987139176482742 0.914436000000000026588509172143 0.894101999999999952351004139928 +0.604543999999999970285102790513 -0.101079000000000002179589841944 1.27448399999999995024779764208 +0.604640999999999984026999300113 0.630936999999999970079045397142 1.11190300000000008573408649681 +0.605859999999999954134466406686 1.02867099999999989101695518912 0.758136000000000032095215374284 +0.605918999999999985384135925415 0.744199999999999972644104673236 -1.03876300000000010292922070221 +0.605948000000000042142289657932 0.973473999999999950460960462806 0.827752999999999961033836370916 +0.605968999999999979877429723274 -0.305381000000000013550049970945 1.24078299999999996927613210573 +0.606688000000000005051958851254 -0.395444000000000017713830402499 1.21472299999999999720046162111 +0.606774000000000035548453070078 -0.15147299999999999653432780633 -1.26841699999999990566834640049 +0.60756399999999999295141606126 0.500978000000000034397373838146 -1.17468499999999997918109784223 +0.607596000000000024954260879895 0.260894999999999988027354902442 1.25010400000000010400924566056 +0.607797000000000031683100587543 -0.0301769999999999989637178288149 -1.27658699999999991625543316331 +0.608836000000000043819170514325 0.835339999999999971436182022444 -0.965156000000000013905321338825 +0.60902999999999996028066107101 -1.20150899999999993816857113416 0.430651000000000006018296971888 +0.609105000000000007531752999057 -0.0908790000000000014468426456915 -1.27307999999999998941291323717 +0.610111999999999987664978107205 -0.562948000000000003950617610826 1.14492499999999997051247646596 +0.610248000000000012654766123887 1.26254599999999994608401721052 -0.183234000000000007979394922586 +0.610412999999999983380405410571 -1.25877799999999995250732354179 -0.207062999999999997058353073953 +0.61069799999999996309441030462 -0.205547000000000007480238650714 1.25888800000000000700595137459 +0.611253000000000046298964662128 -1.13495400000000001838884600147 -0.581591999999999997861266365362 +0.612306000000000016925127965806 -1.27269100000000001671196514508 0.0730610000000000009423573033018 +0.61241199999999995640109773376 0.458780000000000021120882820469 1.18931600000000003980460405728 +0.614612999999999964906294280809 0.544510999999999967258190736175 1.15141599999999999504041170439 +0.61499199999999998311750459834 1.2604729999999999545678974755 0.1816389999999999949054085846 +0.615137999999999962597030389588 -0.0889329999999999981641352064798 1.27031399999999994321342455805 +0.615484999999999948805395888485 0.362209999999999976427744741159 1.22064799999999995527844021126 +0.615878000000000036529002045427 -0.465380000000000015880630144238 -1.18495400000000006279776698648 +0.617979999999999973780973050452 0.248123000000000010212275469712 1.2476119999999999432560571222 +0.618767999999999984694909471727 -1.20765600000000006275513442233 -0.398363000000000022637891561317 +0.620767999999999986471266311128 0.701061999999999962973618039541 1.05979200000000006731681878591 +0.621703000000000005620393039862 -1.16339600000000009671907719166 0.509897000000000044650505515165 +0.622261999999999981803000537184 0.291889000000000009560352509652 -1.23595699999999997231725501479 +0.622592999999999952009943626763 -0.637465999999999977099207626452 1.09818700000000002425792899885 +0.623635999999999968146369155875 -0.748353000000000045943693294248 -1.02520600000000006168932031869 +0.624968999999999996752819697576 -0.0760989999999999999769073610878 1.26634200000000007868550255807 +0.627444000000000001726618847897 -0.192532000000000008688161301507 1.25269499999999989192644989089 +0.627589999999999981206144639145 0.234709000000000000962785406955 1.24540899999999998826183400524 +0.628422999999999953857354739739 -0.472206000000000014615864074585 1.17562999999999995281996234553 +0.628600000000000047606363295927 -0.292109999999999980779818997689 1.23269399999999995642951944319 +0.629558999999999979735321176122 1.03630099999999991666754795006 -0.727829999999999976978415361373 +0.629596999999999962227548166993 1.23800899999999991507593222195 0.266346000000000027174706929145 +0.631220000000000003304023721284 1.2092220000000000190709670278 -0.37328600000000000669331257086 +0.631435999999999997278621322039 -0.60629200000000005310596407071 -1.11071999999999992958521488617 +0.6318190000000000194901872419 -1.06664099999999995027621935151 -0.680502000000000051294080094522 +0.631920999999999954965801407525 -1.12069299999999993922017438308 0.587131999999999987238652465749 +0.632002999999999981461940024019 0.348202999999999984748200176909 1.21627599999999991275956290337 +0.632618000000000013649525953952 -0.709466999999999958781415898557 1.04711500000000001797673121473 +0.633433000000000023810287075321 -1.2545820000000000860040927364 0.157433999999999990615506817448 +0.633664000000000005030642569182 1.26053700000000001857358711277 -0.0975560000000000038244962752287 +0.634000000000000007993605777301 -0.0626270000000000021112001036272 1.26258599999999998608757323382 +0.634445999999999954432894355705 0.768419999999999991935339949123 1.00349899999999991884180872148 +0.63457500000000000017763568394 -0.38145800000000001928057713485 1.20490800000000009006839718495 +0.634807000000000010153655694012 0.444166000000000005254463530946 1.18310500000000007325695605687 +0.634948999999999985632825882931 0.593555999999999972516206980799 -1.11558599999999996654764800041 +0.636388999999999982470910708798 0.220706000000000013283596445035 1.24350200000000010724932053563 +0.637291000000000051883830565203 -0.405208000000000012619238987099 -1.19568699999999994432187122584 +0.63758800000000004359890226624 0.614962000000000008625988812128 1.10240699999999991476329341822 +0.638499999999999956479257434694 1.13277800000000006264144758461 -0.555995000000000016981971384666 +0.638650999999999968714803344483 -1.25579599999999991233323726192 -0.122879000000000002112976460467 +0.639646000000000047869264108158 -1.07356600000000002026467882388 0.662047999999999969844566294341 +0.639901000000000053091753215995 -0.832098000000000004305888978706 -0.947702000000000044366288420861 +0.64014599999999999280220208675 -0.778668999999999944527928619209 0.991910999999999987153387337457 +0.640267000000000030546232210327 0.441201999999999983081977461552 -1.18127000000000004220623850415 +0.641718000000000010629719326971 1.21066000000000006942002528376 0.350001000000000006551204023708 +0.642194000000000042582826154103 -0.0485719999999999971218578309617 1.25905800000000001048761077982 +0.642249999999999987565502124198 0.528869000000000033523406273162 1.1435960000000000569286839891 +0.642650000000000054534154969588 0.230470000000000008189005029635 -1.23850100000000007405276392092 +0.643356000000000038951952774369 -0.17842500000000000026645352591 1.24669800000000008388667538384 +0.643743999999999982897236350254 -0.99256299999999997307753574205 -0.774862000000000050725645905914 +0.644341000000000052594373300963 0.206168999999999991157295653466 1.24190099999999992164134710038 +0.644846999999999948016693451791 -1.02220299999999997275779151096 0.734352000000000004753530902235 +0.645147000000000025998758701462 -0.844798000000000048892445647652 0.932791999999999954518159483996 +0.64561999999999997168487197996 0.832744999999999957474017264758 0.943245000000000000106581410364 +0.646548000000000011588952020247 -0.913950000000000040145664570446 -0.864101000000000007972289495228 +0.647503000000000050739856760629 -0.966806000000000054228621593211 0.803757999999999972473574416654 +0.647603000000000039726444356347 -0.907592999999999983096188316267 0.869991999999999987558396696841 +0.647669000000000050221160563524 0.333154999999999978932407884713 1.21224299999999995947064235224 +0.647676999999999947199569305667 -0.547104999999999952464690977649 1.13189699999999993096366779355 +0.648862999999999967570829539909 0.955007000000000050299320264457 -0.816663000000000027789326395578 +0.649518999999999957495333546831 -0.0339870000000000033191227544194 1.25577500000000008562039965909 +0.650361999999999995658583884506 -0.277359000000000022190249637788 1.22478599999999993030996847665 +0.650884000000000018104628907167 -1.15013000000000009670486633695 -0.503539999999999987601029260986 +0.65130600000000005156408633411 1.17853199999999991298693657882 0.432275000000000020339285811133 +0.651417000000000023796076220606 0.19115499999999999158895036544 1.24061099999999990828314366809 +0.652059999999999972963848904328 -1.23152200000000000557065504836 0.241186000000000011489476037241 +0.652422999999999975173636812542 -1.2141809999999999547526385868 -0.316400000000000014566126083082 +0.652706000000000008398615136684 0.6866520000000000401030320063 -1.04999200000000003640820978035 +0.65424599999999999422328755827 0.893782999999999994145127857337 0.879268999999999967265296163532 +0.654579000000000021941559680272 1.25355299999999991733545812167 -0.0114929999999999997439825705214 +0.655028000000000054647841807309 -0.343671999999999977504216985835 -1.2053329999999999877502432355 +0.655946000000000029039881610515 -0.0189320000000000009110490140074 1.25274799999999997268673723738 +0.656309999999999948983031572425 0.428124999999999977795539507497 1.17727099999999995638688687905 +0.657587000000000032606806144031 0.175723999999999991317167769012 1.2396370000000000999307303573 +0.658047999999999966291852615541 0.682987000000000010757617019408 1.04904799999999998050270733074 +0.658322999999999991516119735024 1.14175399999999993561061728542 0.512843000000000048821391374076 +0.658371999999999957253749016672 -0.163282000000000010464518140907 1.24092099999999994075494669232 +0.659340999999999954894747133949 0.167908000000000001694644424788 -1.23978900000000002989963832079 +0.659437000000000050903281589854 0.868757000000000001449507180951 -0.900225000000000052935433814127 +0.659498999999999946375339732185 1.21708299999999991491961282009 -0.289432000000000022588153569814 +0.660290000000000043556269702094 0.951295000000000001705302565824 0.811822000000000043584691411525 +0.660676999999999958745888761769 -0.456029999999999990922816550665 1.1642770000000000063522520577 +0.660819999999999962980723466899 0.778851999999999988766319347633 -0.978114000000000038959058201726 +0.661449999999999982414067289938 -0.00346500000000000019789725413943 1.24998900000000001675459770922 +0.66153499999999998415489699255 -0.365647999999999973042008605262 1.19527099999999997237409843365 +0.661556000000000032912339520408 -0.546321999999999974306774674915 -1.12422200000000005459810381581 +0.662421999999999955299756493332 0.317124000000000016985524098345 1.20856499999999988936849604215 +0.662625000000000019539925233403 -0.690189999999999970192732234864 -1.04142500000000004511946372077 +0.662742999999999971016961808346 1.10047000000000005925926416239 0.591386999999999996013855252386 +0.662827999999999972757791510958 0.159935999999999994836130667863 1.23898299999999994547295045777 +0.663727999999999984659382334939 1.00505200000000005644551492878 0.741172000000000052999382660346 +0.664367999999999958582463932544 -1.24785999999999996923349954159 -0.0382110000000000019082513347257 +0.664375000000000048849813083507 -0.61984399999999995056754187317 1.08369699999999991035792845651 +0.664546999999999998820499058638 1.05484200000000005736922048527 0.667596999999999995978328115598 +0.666008999999999962149388466059 0.0123529999999999993975929868384 1.24750899999999997902477844036 +0.667117999999999988780530202348 0.143855000000000010640377468008 1.23865200000000008628830983071 +0.668112999999999956912688503508 -1.20360200000000006070877134334 0.323985999999999996212807218399 +0.668930000000000024584778657299 0.511458999999999996965982518304 1.1361969999999999014761442595 +0.669019000000000030325963962241 -0.28101500000000001477928890381 -1.21385499999999990627941315324 +0.669360999999999983778309342597 0.379464999999999996749266983898 -1.18657499999999993534061104583 +0.669526999999999983259613145492 1.06113799999999991463539572578 -0.652472000000000051933568556706 +0.669553999999999982506437845586 0.596871000000000040408565382677 1.09336300000000008481038094033 +0.669606000000000034511060675868 0.0284590000000000016566747973457 1.24531799999999992500931966788 +0.670440999999999953651297346369 0.127541999999999988713028642451 1.23864499999999999602096067974 +0.67117000000000004433786671143 -0.261187000000000002497557716197 1.21709099999999992292032402474 +0.672224999999999961453056585015 0.0447900000000000034217073618947 1.24342500000000000248689957516 +0.672269000000000005456968210638 0.104446999999999998176569704356 -1.23981699999999994687982507457 +0.672351999999999949686468880827 1.14966900000000005199751740292 -0.475609999999999977227105318889 +0.672431000000000000937916411203 -0.14716199999999998726529781834 1.23538600000000009515588317299 +0.672784000000000048657966544852 0.111062999999999995059951629628 1.23896199999999989671550792991 +0.672911000000000036891378840664 1.24162100000000008570566478738 0.0746160000000000017683632336229 +0.672938000000000036138203540759 0.5330979999999999607851464134 -1.12381599999999992611776633566 +0.673857000000000039285907860176 0.0612810000000000021369572777985 1.24183799999999999741362444183 +0.674136999999999986243892635684 0.0944829999999999975424103126898 1.23960099999999995290522747382 +0.674494999999999955697660425358 0.0778670000000000056550319982307 1.24056100000000002481215233274 +0.675294999999999978612663653621 -1.08518200000000009097789188672 -0.60527399999999997870503420927 +0.675910000000000010800249583554 0.748315999999999981184828357073 0.991549000000000013699263945455 +0.676202999999999998514965682261 0.300173000000000023135271476349 1.20525799999999994049915130745 +0.676834999999999964437336075207 0.41071999999999997399413587118 1.17183700000000001750777300913 +0.678451000000000026268764941051 -0.690137000000000000454747350886 1.03122000000000002550848421379 +0.679208999999999951668883113598 -0.217483000000000009643841281104 -1.22121900000000005448441697808 +0.681382999999999960927254960552 0.0403400000000000008570921750106 -1.23858399999999990725996212859 +0.681529999999999969162445268012 -1.17093200000000008387246452912 0.405507000000000006334488489301 +0.683502999999999971691977407318 -1.21591399999999993930543951137 -0.233189000000000007384315381387 +0.684172000000000002373212737439 -0.528801999999999994273025549774 1.11905199999999993565324984957 +0.68420099999999994810906400744 -0.774268999999999985028864557535 -0.965597000000000038610892261204 +0.685176000000000007261746759468 1.22014000000000000234479102801 -0.204435000000000005604405828308 +0.685478999999999949466200632742 -0.130128999999999994674482195478 1.23011599999999998722444161103 +0.685558000000000000717648163118 -0.153327999999999992075672139435 -1.22739599999999993151789112744 +0.686647000000000007347011887759 -0.0241609999999999984499066130184 -1.23609499999999994379606960138 +0.687459999999999959996443976706 -0.348075999999999996514787881097 1.18585099999999998843236426183 +0.68746300000000004626343752534 -1.23499899999999995792165918829 0.0466079999999999966542318929896 +0.687945999999999946439288578404 -1.16076599999999996448707406671 -0.423499999999999987565502124198 +0.687984999999999957687180085486 -0.484414000000000011247891507082 -1.13667000000000006920686246303 +0.688039999999999984936494001886 -0.0888020000000000059303673083377 -1.2323610000000000397335497837 +0.688586999999999949118034692219 1.22479000000000004533262654149 0.160429999999999989279686474219 +0.688957000000000041595171751396 0.282370999999999983121057312019 1.20233300000000009610801043891 +0.689849999999999963229413424415 -0.757707000000000019390711258893 0.974673000000000011588952020247 +0.690942999999999973859132751386 -0.243658000000000013463008485814 1.20964000000000004853006885241 +0.691104000000000051606718898256 0.810691000000000050462745093682 0.930136999999999991572963153885 +0.691309999999999980069276261929 -1.01389900000000010571454822639 -0.702922000000000046782133722445 +0.691859000000000001762145984685 -0.437742999999999993221422300849 1.15313099999999990608046118723 +0.692257000000000011219469797652 -1.13363999999999998102850895521 0.485428000000000026137314534935 +0.692729000000000039172221022454 0.982735000000000025188739982696 -0.744551999999999991608490290673 +0.694216000000000055258908560063 0.662517000000000022552626433026 1.03881500000000004391154106997 +0.694544999999999967954522617219 0.492350000000000009858780458671 1.12924699999999988975218911946 +0.69473399999999996268229551788 0.316012000000000015109691275939 -1.19057999999999997164934484317 +0.696008999999999988794741057063 0.626210000000000044373393848218 -1.05992099999999989101695518912 +0.696089999999999986535215157346 -0.857148000000000021003643269069 -0.883603999999999945025308534241 +0.696301999999999976509457155771 0.392021000000000008345324431502 1.16682599999999991879917615734 +0.697463999999999972878583776037 -0.112250000000000002553512956638 1.22513000000000005229594535194 +0.698002000000000011326051208016 -0.629504999999999981241671775933 -1.05665300000000006441780442401 +0.698375999999999996781241407007 -0.937466000000000021508128611458 -0.795881999999999978356868268747 +0.698525999999999980261122800584 -0.822285999999999961396213166154 0.914279999999999981596943143813 +0.700251999999999985568877036712 -1.09187400000000001121236437029 0.563433999999999990393462212523 +0.700412000000000034560798667371 0.57673399999999996889954445578 1.0848050000000000192557081391 +0.700635000000000007780442956573 0.263786000000000020460078076212 1.19980299999999995286259490967 +0.701546000000000002927436071332 1.203125 0.245610999999999995990762613474 +0.703551000000000037459813029272 1.16202200000000011037570857297 -0.393347000000000002195577053499 +0.703571999999999975194953094615 0.869867999999999974569675487146 0.865052999999999960856200686976 +0.704444999999999987849719218502 -0.883619999999999961026730943559 0.850277999999999978264497713099 +0.704965999999999981540099724953 -0.599486999999999992105870205705 1.06940999999999997172039911675 +0.705482999999999971230124629074 -1.04580000000000006288303211477 0.639214999999999977653430960345 +0.706852000000000035839775591739 1.08178700000000005410072390077 -0.574540000000000050661697059695 +0.707273999999999958276930556167 0.470333999999999974317432815951 -1.13072900000000009512746146356 +0.707435000000000036024516703037 0.898743999999999987338128448755 -0.831740999999999952585483242729 +0.707583999999999990748733580403 -0.94146700000000005381650680647 0.782920999999999978058440319728 +0.707845999999999975216269376688 -1.21726299999999998391331246239 0.131242999999999998550492819049 +0.7079309999999999769570990793 -0.995597999999999982989606905903 0.71247400000000005171330030862 +0.708147999999999999687361196266 1.21838200000000007605649443576 -0.118631000000000000338395977906 +0.708339000000000051926463129348 -0.0935959999999999986419751962785 1.22044899999999989503862707352 +0.709378999999999981795895109826 0.719123999999999985455190198991 -0.989769000000000009897860309138 +0.709601000000000037282177345332 -0.224841000000000013070433624307 1.20246100000000000207478478842 +0.710619000000000000660804744257 -0.420812999999999992617460975453 -1.14801500000000000767386154621 +0.711189999999999988844479048566 0.244492999999999988114396387573 1.19767800000000002036415480688 +0.711735000000000006536993168993 1.17671100000000006247091732803 0.329822000000000004060751734869 +0.711884999999999990016874562571 -1.2128479999999999261461880451 -0.14905699999999999505462255911 +0.712247999999999992226662470785 -0.328811000000000019927171024392 1.17668400000000006322409262793 +0.713111999999999968125052873802 0.810428999999999954972906834882 -0.913605000000000000426325641456 +0.71326199999999995160493426738 0.925610999999999961573848850094 0.796556000000000041794123717409 +0.714632999999999962703611799952 0.372101000000000015077716852829 1.16225599999999995581845269044 +0.716104999999999991544541444455 -1.09944099999999989059062954766 -0.527657999999999960394347908732 +0.71613700000000002354738626309 0.725547999999999970732744714041 0.980167000000000010473399925104 +0.716283000000000003026912054338 0.251093999999999983874232611925 -1.19326899999999991308641256182 +0.718060999999999949316986658232 -0.0742400000000000004352074256531 1.21609100000000003305444806756 +0.718996999999999997221777903178 0.471615999999999979674925043582 1.12277399999999993873700532276 +0.719117000000000006210143510543 1.1456539999999999501767433685 0.412731999999999987771559517569 +0.719453000000000009173106718663 -0.508110999999999979337417244096 1.10644000000000009009681889438 +0.720137999999999944833461995586 0.977701000000000042255976495653 0.724914999999999976054709804885 +0.720579999999999998294697434176 0.224566999999999988846255405406 1.19596600000000008456879641017 +0.721844000000000041161740682583 -0.417418999999999984495957505715 1.1422360000000000290754087473 +0.722292000000000045112358293409 -1.16682299999999994355448507122 -0.341789000000000009471534667682 +0.722979000000000038284042602754 -0.667806000000000010707879027905 1.01554799999999989523757903953 +0.723659999999999969944042277348 1.11007499999999992290611317003 0.494012999999999979916509573741 +0.724171000000000009144685009232 1.02593299999999998384225818882 0.650413000000000018907542198576 +0.72489199999999998080824070712 -0.713567999999999980076381689287 -0.982523999999999952947860037966 +0.725346999999999964003905006393 1.07011600000000006716049938404 0.573344999999999993534061104583 +0.725434000000000023256063741428 -1.1947239999999998971702552808 0.215360999999999996878941033174 +0.726590999999999986869170243153 -0.0542580000000000006732392421327 1.21207299999999995598898294702 +0.727071000000000022822632672614 -0.204810999999999993059773828463 1.195583999999999980090592544 +0.72832500000000000017763568394 1.21181500000000008654410521558 -0.0323589999999999988755661206596 +0.728769000000000000127897692437 0.2040869999999999906403758132 1.19467300000000009596590189176 +0.729129999999999944826356568228 0.639732999999999996099120380677 1.02913100000000001799094206945 +0.729365999999999958802732180629 -0.35576999999999997514876781679 -1.15821100000000010155076779483 +0.729628000000000054292570439429 -0.566537999999999986044940669672 -1.07082999999999994855670593097 +0.73003899999999999348432311308 0.554632000000000013884005056752 1.0767659999999998898800868119 +0.731756999999999990791366144549 0.351038999999999989931609434279 1.15814700000000003754507815756 +0.731972999999999984765963745303 1.16978899999999996772714894178 -0.309531999999999973827158328277 +0.733860999999999985554666181997 1.00658500000000006302514066192 -0.669502999999999959257479531516 +0.73389599999999999280220208675 -0.0337300000000000030353497493252 1.20841200000000004166622602497 +0.733925000000000049560355819267 0.184964999999999990532018045997 -1.19463000000000008071765478235 +0.735233000000000025409008230781 0.785715999999999969993780268851 0.917650999999999994471977515786 +0.735654999999999947846163195209 0.56311299999999997467625689751 -1.06851000000000007084111075528 +0.735724999999999962341235004715 0.183132999999999990237142810656 1.1938050000000000050448534239 +0.735801999999999956081353502668 -0.30792900000000000826361201689 1.16780799999999995719690559781 +0.736146999999999995800692431658 -1.03123399999999998399857759068 -0.628206999999999959882757138985 +0.73745799999999994689403592929 -1.20499700000000009580958248989 -0.0643370000000000052953197382521 +0.737823000000000006615152869927 0.405511999999999983579357376584 -1.13630000000000008775202786637 +0.738137999999999960820673550188 -0.733489999999999975344167069125 0.957677000000000000490274487674 +0.739947000000000021380230919021 -0.012737000000000000057842619583 1.20512100000000010879830369959 +0.740160000000000040110137433658 -1.16746900000000009001155376609 0.298628000000000004554578936222 +0.7413880000000000469739802611 1.09816800000000003301181550341 -0.494340000000000001634248292248 +0.741419000000000050221160563524 0.161789999999999989377386100387 1.19336599999999992682830907142 +0.742067000000000032144953365787 -0.797128999999999976466824591625 -0.902177000000000006707523425575 +0.742187000000000041133318973152 0.449340999999999990421883921954 1.11680399999999990789945059078 +0.743283999999999944741091439937 -0.183646000000000003682387728077 1.18903500000000006409095476556 +0.744155000000000010906830993918 -0.289540999999999992819965655144 -1.16721900000000000652278231428 +0.744206999999999951889151361684 -0.576474000000000041943337691919 1.05538299999999996003907654085 +0.744720000000000048601123125991 0.00863900000000000084510176634467 1.20221299999999997609734236903 +0.745627999999999957481122692116 1.20046600000000003305444806756 0.0540409999999999987596588368888 +0.745828999999999964209962399764 0.140139999999999986801668683256 1.19335600000000008336087375937 +0.747448000000000001286082351726 -0.957282999999999995033306277037 -0.724520999999999970597741594247 +0.747589999999999976765252540645 0.117888999999999993795185559975 -1.19466000000000005520917056856 +0.747604999999999964011010433751 0.328917999999999988158805308558 1.15451299999999990042454101058 +0.748197000000000000952127265919 0.0303129999999999996673771818223 1.19970099999999990636467828153 +0.748937999999999992617460975453 0.118270000000000000128785870857 1.19377700000000008806466667011 +0.74953000000000002955857780762 -0.87881500000000001282529638047 -0.816019000000000049865889195644 +0.750363000000000002209787908214 0.0521990000000000023416824035394 1.19759400000000004737898962048 +0.750383000000000022211565919861 -0.796278000000000041325165511807 0.896028000000000046654236030008 +0.750515000000000043200998334214 -0.395137000000000015997869695639 1.13163299999999988898480296484 +0.750734000000000012420287021087 0.096265000000000003343991750171 1.1946259999999999656949967175 +0.751210000000000044373393848218 0.0742120000000000001882938249764 1.19589999999999996305177774047 +0.751426999999999956081353502668 0.84278299999999994884802845263 0.851512999999999964373387228989 +0.751964999999999994528820934647 -1.13560700000000003306865892228 0.380717000000000027615243425316 +0.752642000000000033210767469427 0.925185000000000035136338283337 -0.759974999999999956123986066814 +0.753380000000000049631410092843 -0.485115000000000018420820424581 1.094111999999999973454123392 +0.753789000000000042334136196587 -1.16827400000000003466027465038 -0.258728999999999986769694260147 +0.754090000000000038049563499953 -1.10935999999999990173193964438 -0.447960000000000024833468614816 +0.754321000000000019269918993814 0.65639300000000000423483470513 -1.00007399999999990747312494932 +0.754925999999999985945464686665 -0.222389000000000003343103571751 -1.17500200000000010192025001743 +0.754970999999999947682738365984 0.700207000000000023831603357394 0.969396000000000035434766232356 +0.757222999999999979436893227103 0.0501279999999999989479526618652 -1.19335700000000000109423581307 +0.757377999999999995672794739221 -0.501535999999999981824316819257 -1.08390000000000008562039965909 +0.757506000000000012661871551245 1.17293899999999995387156559445 -0.224495000000000000106581410364 +0.758028999999999952841278627602 -0.285513000000000016775913991296 1.15925600000000006417621989385 +0.758175999999999961076468935062 -0.16142999999999999016786489392 1.18283899999999997376676219574 +0.758319999999999994066968156403 0.530650999999999983813836479385 1.06928000000000000824229573482 +0.759666999999999981163512075 -0.855924000000000018140156043955 0.830841999999999969439556934958 +0.759987999999999996880717390013 1.18437900000000007061373707984 0.140226999999999990542676187033 +0.760120000000000017870149804367 -1.19238899999999992118659974949 0.0206360000000000015640821970919 +0.760801999999999978285813995171 -1.09926300000000010115286386281 0.461303000000000018587797967484 +0.761635999999999979692688611976 -0.154576999999999992185806263478 -1.18153100000000010894041224674 +0.761812999999999962419394705648 -0.650233999999999978669507072482 -0.998416999999999998927080469002 +0.762116000000000015646151041437 0.305825000000000013500311979442 1.15136900000000008681411145517 +0.762591000000000018843593352358 0.838809000000000026808777420229 -0.845490999999999992553512129234 +0.762653000000000025337953957205 0.614724999999999965893948683515 1.02003599999999994274446635245 +0.762786999999999992816412941465 -0.0180500000000000000721644966006 -1.19072700000000009090683761315 +0.76325200000000004152411747782 0.748758000000000034646063795662 -0.925638999999999989576338066399 +0.764024000000000036436631489778 0.42560999999999998832933556514 1.11136100000000004328626346251 +0.764260000000000050413007102179 -0.0863749999999999934496841547116 -1.18677900000000002833644430211 +0.764463000000000003630873379734 0.3388889999999999957935870043 -1.14050500000000010203393685515 +0.764654999999999973603337366512 0.896523999999999987586818406271 0.78201500000000001566746732351 +0.765954000000000023717916519672 -0.912193000000000031590730031894 0.76237699999999997135802232151 +0.766024000000000038212988329178 -0.642561999999999966526331718342 1.00015999999999993796961916814 +0.766635999999999984133580710477 -1.05858099999999999418776042148 0.540067999999999992510879565089 +0.769217999999999957339014144964 -0.964860999999999968679276207695 0.690903000000000044877879190608 +0.76944500000000004558131649901 -1.0137220000000000119655396702 0.616703000000000001179500941362 +0.771349999999999980104803398717 1.16361800000000004118305696466 0.225860000000000005204725539443 +0.771491000000000037850611533941 0.497609999999999996767030552292 -1.07572599999999996001065483142 +0.771688999999999958312457692955 -0.138250000000000011768364061027 1.17702299999999993040944445966 +0.772097000000000033281821743003 1.02646299999999990326671195362 -0.591810999999999975962339249236 +0.77299799999999996291677462068 1.11021400000000003416289473535 -0.412187999999999998834709913353 +0.774866000000000054726001508243 0.946726999999999985213605668832 0.709430000000000005044853423897 +0.775231000000000003424815986364 0.28185100000000001818634132178 1.14872799999999997133670603944 +0.77775799999999994938093550445 -0.370983999999999980445863911882 1.12136600000000008492406777805 +0.777831999999999967876362916286 0.757917999999999980609288741107 0.905835999999999974541253777716 +0.778078999999999965098140819464 -1.04449799999999992650145941298 -0.551014000000000003787192781601 +0.778841000000000005520917056856 -0.26165100000000002244959773634 1.15106299999999994732036157075 +0.779665999999999970171415952791 1.13826500000000008228084880102 0.310601999999999989210408557483 +0.779783000000000003915090474038 -1.17507500000000009166001291305 0.105528999999999997805311124921 +0.780050000000000021138646388863 1.17146100000000008556355624023 -0.138573000000000001730171561576 +0.781142000000000003012701199623 -0.434757000000000004558131649901 -1.09581200000000000827071744425 +0.781942000000000025927704427886 -0.550896000000000052310156206659 1.04167100000000001358557710773 +0.782017999999999990912158409628 0.9931940000000000212665440813 0.634045999999999998486543972831 +0.782309000000000032137847938429 -1.16511300000000006527045570692 -0.174646999999999996688870851358 +0.783769000000000048977710775944 -0.114198999999999994958699289782 1.17160700000000006504308203148 +0.784298999999999968402164540748 -0.734129000000000031533886613033 -0.919745000000000034745539778669 +0.784422999999999981390885750443 0.400519999999999987139176482742 1.10646500000000003183231456205 +0.784819000000000044359182993503 -0.706112999999999990663468452112 0.940991000000000021863399979338 +0.784905999999999992589039266022 1.10841900000000004311573320592 0.394116999999999995107913264292 +0.785142000000000006565414878423 0.504885999999999945941908663372 1.06237500000000006927791673661 +0.785819999999999962980723466899 -0.459903000000000006242117933652 1.08211600000000007781864042045 +0.786084000000000004959588295605 1.03574000000000010501821634534 0.556158999999999958951946155139 +0.786900000000000043876013933186 0.257091999999999987203125328961 1.14660000000000006359357485053 +0.787047999999999969844566294341 1.07420000000000004369837824925 0.476078000000000001179500941362 +0.787089999999999956337148887542 0.27072600000000002218314421043 -1.14332699999999998219379904185 +0.789097999999999966114216931601 -1.1149029999999999773763192934 -0.366493000000000013205436744101 +0.792255999999999960259344788938 0.672391999999999989690024904121 0.95928100000000005032063654653 +0.793569999999999997619681835204 -0.973322000000000020492052499321 -0.65030100000000001791988779587 +0.794368999999999991779020547256 -0.0893700000000000049915627187147 1.16661499999999995758059867512 +0.794650999999999996248334355187 0.587592000000000003190336883563 1.01156599999999996519761680247 +0.7948199999999999709743292442 -0.584519000000000010786038728838 -1.01321299999999991925392350822 +0.794877999999999973468334246718 0.947975000000000012079226507922 -0.68520999999999998575361814801 +0.795470000000000010409451078885 0.590906000000000042327030769229 -1.00898799999999999599253897031 +0.796367000000000047066350816749 -1.15312499999999995559107901499 0.190005000000000007220890552162 +0.797003000000000016989076812024 -0.816841999999999957005059059156 -0.835196000000000049467985263618 +0.797074999999999977973175191437 0.23164399999999998880362284126 1.14499400000000006727418622177 +0.797622999999999970910380397981 0.812637000000000053745452532894 0.83870000000000000106581410364 +0.798154999999999947846163195209 -0.23643800000000000927080634483 1.14326100000000008272138529719 +0.799514999999999975699438437005 1.16535900000000003373656909389 -0.0521029999999999965387686984286 +0.800011999999999945387685329479 -0.897015000000000006785683126509 -0.745214000000000043044678932347 +0.800514999999999976587616856705 -0.766877999999999948599338495114 0.878106999999999970896169543266 +0.800826000000000037815084397153 -0.366464000000000011958434242842 -1.10651799999999989054799698351 +0.801556999999999963968377869605 1.11787900000000006706102340104 -0.32841100000000000846966941026 +0.80330299999999998927791011738 0.374167000000000027348789899406 1.10213600000000000456168436358 +0.803373000000000003772981926886 0.429958999999999980090592544002 -1.08153900000000002812328148138 +0.80344599999999999351274482251 -0.063863000000000003097966327914 1.16206600000000004335731773608 +0.803466000000000013514522834157 -0.345057999999999975848652411514 1.11147499999999999076294443512 +0.805613000000000023526069981017 0.20129299999999999970512476466 -1.14475700000000002454214609315 +0.805718000000000045268677695276 0.205608000000000012974510354979 1.14391599999999993286792232539 +0.807285000000000030340174816956 1.04228999999999993875121617748 -0.511784000000000016683543435647 +0.807418999999999997818633801216 -0.614504000000000050185633426736 0.985118999999999966910024795652 +0.807744000000000017536194718559 -1.15735600000000005138645065017 -0.0898769999999999985584864248267 +0.809060000000000001385558334732 0.863878000000000034752645206027 -0.774039000000000032564173579885 +0.809656999999999960060392822925 0.683984999999999954134466406686 -0.936280000000000001136868377216 +0.809810000000000029807267765136 -1.12662299999999993005417309178 0.273731000000000002092548356813 +0.810400000000000009237055564881 0.477439999999999975521802753065 1.05607899999999998996713657107 +0.810965000000000046931347696955 -0.0377769999999999980810905242379 1.15797599999999989428545177361 +0.812792999999999987714716098708 0.179086999999999996191490936326 1.14336999999999999744204615126 +0.813053000000000025693225325085 -0.824617000000000044401815557649 0.811759000000000008334666290466 +0.81411299999999997556443531721 0.775437000000000042909675812552 -0.857856999999999980666132159968 +0.814266000000000045311310259422 0.864148999999999944954254260665 0.768255000000000021209700662439 +0.815825000000000022382096176443 1.15465799999999996217070474813 0.0345719999999999985651477629744 +0.815895999999999954610530039645 -0.209971999999999991981525226947 1.13588099999999991851495906303 +0.816354000000000024073187887552 -0.29692600000000002324895831407 -1.11597499999999993924859609251 +0.816644999999999954276574953838 -0.432576000000000016054713114499 1.0705000000000000071054273576 +0.816895999999999955498708459345 -0.0112160000000000002751132655021 1.15436399999999994570032413321 +0.816941000000000028258284601179 -1.0536399999999999099742353792 -0.471646000000000009677592061053 +0.818022999999999944620299174858 -0.52285499999999995868193991555 1.02832900000000004858691227128 +0.81827300000000002810907062667 0.152184999999999986952659014605 1.14335800000000009646328180679 +0.818732000000000015305090528273 0.727404999999999968274266848312 0.894738999999999951029394651414 +0.819960000000000022168933355715 0.130864000000000008094858117147 -1.14478799999999991676702393306 +0.820056000000000007155165349104 -1.09567499999999995452526491135 0.356376999999999999335642542064 +0.820589000000000012846612662543 0.346656999999999992922994351829 1.0983909999999998952091573301 +0.820992999999999972793318647746 -1.11604400000000003601030584832 -0.283579999999999998738786644026 +0.821215999999999946012962936948 0.0157160000000000008024692021991 1.15124200000000009858069915936 +0.822137000000000006671996288787 0.125010000000000010000889005823 1.14388099999999992562038642063 +0.822381999999999946382445159543 -0.87910100000000002129496579073 0.742206000000000032379432468588 +0.822618999999999989114485288155 -0.66839599999999999013766682765 -0.936239999999999961133312353923 +0.823780999999999985483611908421 -0.5166800000000000281374923361 -1.02685300000000001574562702444 +0.823906999999999944961359688023 0.04291199999999999875610612321 1.14862400000000008937206530391 +0.824369000000000018424373138259 0.0976670000000000038120617773529 1.14493599999999995375787875673 +0.824958999999999997854160938004 0.0702649999999999941291406457822 1.14651900000000006585310075025 +0.824999999999999955591079014994 0.558440000000000047464254748775 1.00375299999999989530863331311 +0.826953000000000049141135605169 1.12113100000000009970335668186 -0.243336999999999997745803170801 +0.827065999999999967862152061571 -1.060402999999999984481746651 0.437616000000000004988010005036 +0.827536999999999967059238770162 -0.317458999999999991192822790254 1.10199899999999995081623183069 +0.827663000000000037559289012279 -0.226418000000000008142819751811 -1.12414799999999992508037394146 +0.827695999999999987295495884609 0.912251000000000034084735034412 0.694778000000000006686207143503 +0.827845999999999970775377278187 0.642213000000000033828939649538 0.949859000000000008867573342286 +0.828465000000000006963318810449 -0.930115000000000025082158572332 0.669723999999999985988097250811 +0.828914999999999957402962991182 1.13939999999999996838084825868 0.121109999999999995434762922741 +0.829709000000000029828584047209 -0.67568600000000000882494077814 0.924679000000000028691715669993 +0.829988999999999976786568822718 -1.14502999999999999225508418021 -0.00475200000000000014749312882145 +0.830075000000000007283063041541 0.0597169999999999992490451461435 -1.14342000000000010295764241164 +0.830811999999999994948041148746 -1.020945999999999909135794951 0.517128000000000032088109946926 +0.831176000000000025913493573171 0.360426999999999997381650018724 -1.08592800000000000437694325228 +0.831278999999999990144772255007 -0.9774589999999999667679162485 0.594600000000000017408297026122 +0.831994000000000011318945780658 -0.182358999999999993324450997534 1.12895100000000003781508439715 +0.832662000000000013244516594568 0.522921999999999997932320638938 -1.01647700000000007491962605854 +0.83397699999999996833821569453 0.967022999999999965936581247661 -0.607740999999999975678122154932 +0.833994000000000013095302620059 0.448419000000000012029488516418 1.0504160000000000163566937772 +0.83470900000000003426947614571 -0.155217999999999994864552377294 -1.13100299999999998057376160432 +0.835917000000000021131540961505 -0.0118670000000000008116840533035 -1.14065799999999994973620687233 +0.836212999999999984090948146331 0.318097999999999991871391102904 1.09524500000000002408739874227 +0.836560999999999999054978161439 -0.985519000000000033878677641042 -0.573514999999999997015720509808 +0.837463999999999986201260071539 -0.083607000000000000761168905683 -1.1365140000000000242152964347 +0.837860000000000049169557314599 0.956752999999999964586550049717 0.618558000000000052231996505725 +0.838732999999999950802020975971 1.11964599999999991908339325164 0.20717099999999999404565187433 +0.839288000000000034006575333478 1.05400300000000002320632574992 -0.4297360000000000068709482548 +0.840609999999999968345321121888 -0.751792000000000015802470443305 -0.853335999999999983423037974717 +0.841978000000000004199307568342 0.779548000000000018694379377848 0.826667000000000040671466194908 +0.84471700000000005115197154737 0.997479000000000004533262654149 0.539897999999999989029220159864 +0.845242000000000048842707656149 1.0954720000000000013073986338 0.292414000000000007251088618432 +0.845732000000000039285907860176 -0.403241000000000016090240251287 1.05930799999999991634069829161 +0.84638500000000005396572078098 -0.153707000000000010286882456967 1.12250000000000005329070518201 +0.846998999999999946375339732185 -0.583743000000000011873169114551 0.970482999999999984552800924575 +0.847338000000000035605296488939 -0.911675000000000013145040611562 -0.671467999999999953786300466163 +0.848239999999999993995913882827 1.03426799999999996515498423832 0.459106000000000014082957022765 +0.848415000000000030233593406592 1.06697599999999992448351804342 0.376502999999999976576958715668 +0.848581999999999947448259263183 -0.446985999999999994436450378998 -1.03928400000000009661960120866 +0.848724000000000033949731914618 -0.734202000000000021273649508657 0.860589999999999966107111504243 +0.848794999999999966178165777819 -0.833332999999999990414778494596 -0.76492000000000004433786671143 +0.848960000000000047926107527019 -1.12818599999999991112531461113 0.0803920000000000051221249464106 +0.849084999999999978648190790409 1.11996000000000006657785434072 -0.157302999999999998381738919306 +0.849646000000000012342127320153 -1.11278000000000010238920822303 -0.199548000000000003151257033096 +0.849876999999999993562482814013 -0.288295999999999996710187133431 1.09297500000000002984279490192 +0.850114000000000036294522942626 0.288602000000000025181634555338 1.09271000000000007013056801952 +0.85214500000000004131806008445 0.616366999999999998216537733242 -0.945483999999999991104004948284 +0.852307999999999954532370338711 -0.492460000000000008846257060213 1.01540800000000008829204034555 +0.852334999999999953779195038805 0.88553800000000004732925162898 -0.699532999999999960394347908732 +0.852577999999999947000617339654 -1.05862499999999992716936958459 -0.390415999999999985270449087693 +0.853577999999999947888795759354 0.527384999999999992681409821671 0.996628999999999987124965628027 +0.854790000000000049773518639995 0.289289999999999991597832149637 -1.08887399999999989752552664868 +0.855831000000000008398615136684 0.417939999999999978186338012165 1.04540900000000003267075499025 +0.856875000000000053290705182008 -0.600191999999999947768003494275 -0.951595999999999997420729869191 +0.857774000000000036436631489778 0.694300000000000028244073746464 0.884403999999999967940311762504 +0.859011999999999997790212091786 -0.124130000000000004223288385674 1.11655299999999990667731708527 +0.86160099999999995024069221472 0.609789000000000025458746222284 0.941169999999999951079132642917 +0.861760999999999999232613845379 0.799055999999999988503418535402 -0.786688000000000053901771934761 +0.861797000000000035235814266343 0.708878000000000008107292615023 -0.868789999999999951185714053281 +0.86189999999999999946709294818 0.828613999999999961687535687815 0.755332000000000003403499704291 +0.8622360000000000024300561563 0.258286999999999988819610052815 1.09079700000000001658406745264 +0.864389999999999991686649991607 -0.789819000000000048800075092004 0.793104000000000031178615245153 +0.864580000000000015170087408478 -1.1068899999999999295141606126 0.165219000000000004746425474877 +0.86575199999999996602895180331 0.452708999999999972541075976551 -1.02251099999999994771826550277 +0.86786700000000005505995659405 1.11436800000000002519584541005 -0.0706480000000000024629187578284 +0.867978000000000027291946480545 1.0615559999999999440944975504 -0.345992999999999994997779140249 +0.869125999999999954148677261401 -0.375711999999999990418331208275 -1.05045699999999997409361185419 +0.869784000000000001584510300745 0.982254999999999989235277553234 -0.527873000000000036635583455791 +0.869824999999999959321428377734 -0.0937430000000000068771655037381 1.11113299999999992628829659225 +0.870395999999999947505102682044 -0.257686000000000026144419962293 1.08443899999999993077892668225 +0.872530999999999945515583021916 0.227271000000000000795807864051 1.08951200000000003598188413889 +0.87263100000000004552447308015 -0.642328000000000010061285138363 0.908807000000000031469937766815 +0.872967999999999966220798341965 -0.372014000000000011336709349052 1.04858600000000001806199634302 +0.874121999999999954589213757572 0.216825999999999990963672757971 -1.09036599999999994636823430483 +0.874947999999999947995377169718 -1.10512600000000005273648184811 -0.114728999999999997649879901473 +0.875824000000000046917136842239 0.38612099999999999200284150902 1.04107799999999994788879575935 +0.876248999999999944598982892785 -0.993827000000000015944578990457 -0.494464999999999987867482786896 +0.876645000000000007567280135845 -0.842319999999999957651652948698 0.722488000000000019085177882516 +0.876788000000000011802114840975 -1.08122500000000010267342531733 0.249393000000000003568700890355 +0.878421000000000007368328169832 0.874411000000000049325876716466 0.681015999999999954717111450009 +0.878781999999999952066787045624 -0.0626680000000000014814816040598 1.1062620000000000786144482845 +0.880176999999999987167598192173 -0.68391999999999997239541471572 -0.870368000000000030524915928254 +0.880272999999999972153830185562 0.494549000000000016363799204555 0.990222000000000046604498038505 +0.880959999999999965325514494907 0.195676999999999989832133451273 1.08886199999999999654676230421 +0.883222999999999980325071646803 1.10437800000000008182610145013 0.0162859999999999983943954617871 +0.884315999999999990954790973774 0.743646999999999946950879348151 0.815459000000000044927617182111 +0.884607999999999949913842556271 -0.550401000000000029110935884091 0.95630899999999996463628804122 +0.884660000000000001918465386552 -0.459832999999999991747046124146 1.00296099999999999141664375202 +0.884851000000000054157567319635 -1.0594310000000000115960574476 -0.307645999999999975038633692748 +0.88533099999999997908872728658 -0.30313899999999999179678411565 -1.06032799999999993723065472295 +0.885440000000000004831690603169 -0.891496999999999983899101607676 0.649021999999999987807086654357 +0.885535999999999989817922596558 -1.05129199999999989323384852469 0.332583999999999990748733580403 +0.885847000000000051045390137006 -0.0310260000000000014941381465405 1.1019579999999999930793137537 +0.886932999999999971407760313014 -0.529784000000000032670754990249 -0.965754000000000001335820343229 +0.887488000000000054612314670521 0.163629999999999997672972540386 1.08884800000000003805666892731 +0.889014999999999999680255768908 -0.225748000000000004217071136736 1.07642499999999996518340594776 +0.88909499999999996866506535298 0.143323000000000005949019055151 -1.09039799999999997837107912346 +0.890548000000000006259881502046 0.54617000000000004433786671143 -0.95321699999999998098587639106 +0.890739999999999976232345488825 -0.93715499999999996028066107101 0.572992999999999974569675487146 +0.890788000000000024236612716777 -1.01721100000000008733991307963 0.414461000000000023835156071073 +0.890993000000000034965808026755 0.00105699999999999999684974216763 1.09823899999999996524024936662 +0.891318999999999972416730997793 -0.922736000000000000653699316899 -0.595071000000000016605383734714 +0.891475000000000017408297026122 0.916756000000000015326406810345 0.604011999999999993349319993285 +0.892090999999999967329245009751 0.13125600000000001155164852662 1.08946999999999993846699908318 +0.89224700000000001232081103808 0.903703000000000034042102470266 -0.622267000000000014559020655724 +0.892525000000000012789769243682 -0.979114999999999957580598675122 0.494703999999999977088549485416 +0.893243000000000009208633855451 1.06492100000000000648014975013 -0.260884999999999978026465896619 +0.893387000000000042199133076792 0.575249000000000010324185950594 0.933246000000000019980461729574 +0.893603999999999953907092731242 -0.766488999999999975898390403017 -0.783560000000000034248159863637 +0.893894999999999995132782260043 0.353088999999999986201260071539 1.03743900000000000005684341886 +0.894198999999999966092900649528 0.0334549999999999986277643415633 1.09512000000000009336531547888 +0.894607999999999958795626753272 0.380543999999999993377741702716 -1.02706600000000003447553353908 +0.894749000000000016541434888495 0.0986830000000000068238747985561 1.09072700000000000208899564313 +0.894801999999999986279419772472 0.658731999999999984218845838768 0.874871999999999983010923187976 +0.894819999999999948769868751697 -0.698377000000000025536905923218 0.843543999999999960515140173811 +0.895093000000000027505109301273 1.09003099999999997216093561292 0.103155999999999997696065179298 +0.895453000000000054470206123369 0.0660400000000000014788170688007 1.09261300000000005638867150992 +0.896795000000000008810729923425 -1.0931100000000000260769184024 -0.0294559999999999995445865152988 +0.897133999999999987018384217663 -0.229553000000000007041478511383 -1.06885699999999994602717379166 +0.8972369999999999512496628995 -0.846535000000000037445602174557 -0.691624000000000016541434888495 +0.898244000000000042405190470163 -0.339017999999999986027177101278 1.0383759999999999656949967175 +0.899652000000000007240430477395 0.0690700000000000063904437297424 -1.08896999999999999353406110458 +0.901012000000000035093705719191 0.955482999999999971230124629074 0.52462399999999997923794126109 +0.902159000000000044217074446351 0.993611000000000021969981389702 -0.445921999999999985053733553286 +0.903432000000000012818190953112 1.07138099999999991673860222363 0.189618000000000008764544645601 +0.904487000000000040955683289212 -0.155245999999999995111465977971 -1.07601199999999996848032424168 +0.904981000000000035399239095568 0.460062999999999999722888333054 0.984557000000000015482726212213 +0.905456999999999956330043460184 0.639395999999999964380492656346 -0.878248999999999946375339732185 +0.905658999999999991814547684044 -0.19260900000000000242827979946 1.06896300000000010754774848465 +0.905749000000000026311397505197 -0.0056389999999999999152899832211 -1.08608799999999994234656242043 +0.906008000000000035534242215363 0.819521000000000054974691465759 -0.712415000000000020463630789891 +0.906992000000000020420998225745 0.990438999999999958312457692955 0.443166999999999977610798396199 +0.907363000000000030631497338618 -0.0805089999999999972324360442144 -1.0817630000000000300985902868 +0.907368999999999981120879510854 0.790058999999999955754503844219 0.74329500000000003900879619323 +0.90820400000000001128341864387 1.04850200000000004507683115662 0.275332000000000021167068098293 +0.909391999999999978143705448019 1.02148599999999989407228895288 0.359960000000000002184918912462 +0.90997300000000003183941998941 0.31897399999999997977084831291 1.03450700000000006539835339936 +0.910537000000000040778047605272 0.730974000000000012633449841815 -0.797872000000000025643487333582 +0.91247999999999995779376149585 -0.998213000000000016953549675236 -0.413463000000000024947155452537 +0.912673999999999985277554515051 -0.457450000000000023270274596143 -0.978655999999999970384578773519 +0.913416000000000005698552740796 -0.606169999999999986606269430922 0.89343600000000000793676235844 +0.913476999999999983437248829432 -0.751669999999999949302775803517 0.774951999999999974200193264551 +0.913630000000000053184123771643 -1.05605600000000010574296993582 -0.223660999999999998699706793559 +0.914953000000000016278534076264 -0.425101000000000006640021865678 0.991034999999999999253930127452 +0.914982999999999990770049862476 1.06408199999999997231725501479 -0.174747000000000013431034062705 +0.915104000000000028514079986053 -1.07678000000000007041478511383 0.0559320000000000025486279753295 +0.91554800000000002846434199455 -0.613496000000000041296743802377 -0.886224000000000011745271422114 +0.919116000000000044067860471841 0.306711999999999984645171480224 -1.03012299999999989985610682197 +0.920097000000000053709925396106 -0.514610000000000011866063687194 0.942655000000000020676793610619 +0.920263999999999970924591252697 -0.158399000000000012011724948024 1.0620849999999999457855892615 +0.921460999999999974541253777716 -0.30438300000000001466204935241 1.02871800000000002128786036337 +0.923078999999999982861709213466 0.538727999999999984659382334939 0.926120000000000054285465012072 +0.923992999999999953253393414343 0.283909999999999995701216448651 1.03229400000000004489209004532 +0.924471000000000042717829273897 0.705076000000000036038727557752 0.805122000000000004327205260779 +0.924714000000000035939251574746 0.473671999999999981945109084336 -0.959447000000000049801940349425 +0.926839999999999997193356193748 0.833353000000000010416556506243 0.66819799999999995865351820612 +0.92760200000000003761613243114 0.424061000000000021259438653942 0.979655999999999971272757193219 +0.928529000000000048764547955216 -0.801996999999999959918284275773 0.703301999999999982726706093672 +0.928637999999999963485208809288 0.918301000000000033907099350472 -0.54254400000000002624034323162 +0.929669999999999996376232047623 0.620843000000000033722358239174 0.866179999999999949977791402489 +0.929800999999999988609999945766 -1.05620099999999994544452874834 0.14110000000000000319744231092 +0.930973999999999968224528856808 1.00104499999999996262545209902 -0.36221100000000000518340925737 +0.93178199999999999914024328973 -0.93015499999999995406341213311 -0.516326999999999980417442202452 +0.932771000000000016783019418654 -0.123254000000000002446043367854 1.05581600000000008776623872109 +0.933111000000000023746338229103 1.05904400000000009640643838793 -0.0879189999999999971524999864414 +0.933996000000000048402171159978 -0.383475999999999983547382953475 -0.990252000000000021096013824717 +0.934262000000000036870062558592 -0.696745999999999976459719164268 -0.801061000000000023035795493342 +0.935900999999999982925658059685 0.248037000000000007471356866517 1.03080900000000008631673154014 +0.938620000000000009876544027065 -0.659545999999999965623942443926 0.827038000000000050881965307781 +0.938806000000000029359625841607 -1.04851399999999994605559550109 -0.138794000000000000705213665242 +0.939180000000000014814816040598 0.231503999999999987569054837877 -1.03167199999999992243715496443 +0.939917000000000002479794147803 -0.849158999999999997143618202244 0.628877000000000019319656985317 +0.940829000000000026382451778773 -1.03145299999999995321786627756 0.225710999999999994969357430818 +0.942138000000000030986768706498 -0.856396000000000046092907268758 -0.615600000000000036060043839825 +0.942528000000000032443381314806 -0.268245999999999984453324941569 1.01964999999999994528820934647 +0.942653999999999991921129094408 0.873358999999999996433075466484 0.590463999999999988865795330639 +0.94306599999999995986854628427 -0.388400999999999996248334355187 0.979678999999999966519226290984 +0.943072000000000021380230919021 -0.778160999999999991594279435958 -0.71069099999999996164490312367 +0.943131000000000052629900437751 -0.0873109999999999997211119762142 1.05018100000000003113598268101 +0.94491899999999995340971281621 0.567262999999999961708851969888 -0.886194000000000037253755635902 +0.945110000000000005648814749293 -0.99865899999999996339283825364 -0.330830999999999986194154644181 +0.945649999999999990585308751179 0.211494999999999988560261954262 1.03005600000000008265033102361 +0.946583999999999980978770963702 -0.540796000000000054441784413939 -0.900842000000000031612046313967 +0.946679000000000048231640903396 0.836752000000000051294080094522 -0.63533099999999997908872728658 +0.947556999999999982620124683308 1.04982599999999992590460351494 -0.00074399999999999997819105646002 +0.947594999999999965112351674179 -0.892969000000000012740031252179 0.551969000000000042938097521983 +0.948049000000000030574653919757 0.386687000000000002941646926047 0.975539000000000044998671455687 +0.948143999999999986805221396935 -1.00263400000000002521005626477 0.309431000000000011596057447605 +0.950492000000000003545608251443 0.748635999999999968146369155875 0.732194000000000011496581464598 +0.950559000000000042795988974831 0.500369999999999981454834596661 0.919819000000000053240967190504 +0.950814999999999965751840136363 -0.308153999999999983483434107256 -1.00049600000000005195488483878 +0.951303000000000009706013770483 -0.0507140000000000021329604749099 1.04520400000000002194155968027 +0.951532999999999962170704748132 -0.933254999999999945714534987928 0.472882999999999997786659378107 +0.951717000000000035164759992767 -0.969857999999999997875477220077 0.39193099999999997384847461035 +0.951903000000000054647841807309 -0.567355999999999971450392877159 0.878628999999999993342214565928 +0.953200999999999964984453981742 0.174429000000000000714095449439 1.0300400000000000666489086143 +0.953327000000000035484504223859 -0.47650999999999998912869614287 0.929572999999999982634335538023 +0.954509000000000051855408855772 0.399158000000000012796874671039 -0.964149999999999951505458284373 +0.954721999999999959563012907893 0.155216999999999993864463476712 -1.03170500000000009421796676179 +0.95474700000000001232081103808 0.909916999999999975834441556799 0.510399999999999964828134579875 +0.955196000000000045027093165118 0.659900999999999959833019147482 -0.80754700000000001480771061324 +0.95568299999999994920329982051 0.750183999999999961971752782119 -0.7238050000000000316902060149 +0.956114000000000019419132968324 1.00452800000000008751044333621 -0.277069999999999982964737910152 +0.957254999999999967030817060731 -0.013606000000000000038635761257 1.04090299999999991165111623559 +0.958264000000000004675371201301 1.03646499999999996965982518304 0.0864339999999999969437780578119 +0.958524000000000042653880427679 0.136984999999999995656807527666 1.03075999999999989853449733346 +0.960118999999999944705564303149 -0.710319999999999951434404010797 0.757375000000000020428103653103 +0.960274999999999989697130331479 -1.03683299999999989360333074728 -0.0533790000000000028346214264729 +0.960963000000000011624479157035 0.023865999999999998326671857285 1.03729500000000007808864666004 +0.961359999999999992326138453791 -0.230751000000000011658229936984 1.01120699999999996698818449659 +0.96136399999999999632649405612 0.929275999999999990919263836986 -0.460679999999999978399500832893 +0.96159899999999998154720515231 0.0993099999999999955013763042189 1.03221399999999996488497799874 +0.962241000000000012981615782337 0.580779999999999962945196330111 0.858362999999999987110754773312 +0.962284000000000028229862891749 0.663985999999999965126562528894 0.795695999999999958873786454205 +0.962412999999999962952301757468 0.0615539999999999976054709804885 1.03439499999999995338839653414 +0.963064999999999948876450162061 -0.231781999999999988038013043479 -1.00934900000000005171330030862 +0.96307299999999995687716136672 0.942884999999999973141484588268 0.428321000000000007279510327862 +0.96518800000000004590816615746 1.01901400000000008638778581371 0.17327000000000000734523553092 +0.965678000000000036351366361487 0.0781519999999999992468247000943 -1.03022300000000011088729934272 +0.966239999999999987778664944926 0.34808600000000000651567688692 0.972222000000000030617286483903 +0.9675979999999999581206111543 0.972130999999999967364772146539 0.344552000000000024915181029428 +0.968304000000000053560711421596 0.997541000000000011027623258997 0.259423000000000014697576489198 +0.968569000000000013272938303999 -0.933903999999999956393992306403 -0.435543999999999986716403554965 +0.968889000000000000234479102801 -0.349878999999999995562660615178 0.968937000000000048238746330753 +0.970609000000000055052851166693 -0.624380000000000046078696414042 -0.817355000000000053717030823464 +0.970697000000000032038371955423 -0.154659999999999991926458164926 -1.01677400000000006663469775958 +0.972006000000000036642688883148 0.00061399999999999996247446176767 -1.02723199999999992293453487946 +0.972762000000000015553780485789 0.789241999999999999104716152942 0.656376999999999988233412295813 +0.973163000000000000255795384874 -0.466108999999999995544897046784 -0.914163999999999976608933138778 +0.973681000000000018701484805206 -0.0770919999999999938644634767115 -1.02274299999999995769428551284 +0.974009000000000013663736808667 -0.995163000000000019795720618276 -0.246892000000000000348165940522 +0.975720000000000031725733151688 0.460328000000000014946266446714 0.914367999999999958582463932544 +0.977481000000000044281023292569 1.00404699999999991177901392803 -0.19083600000000000562749846722 +0.977829999999999976978415361373 -0.758290000000000019575452370191 0.684722999999999970555109030101 +0.977885000000000004227729277773 -0.192042999999999991489474382433 1.00342500000000001136868377216 +0.977955000000000018722801087279 -1.02106000000000007865708084864 0.0322459999999999968878228173708 +0.979814999999999991509014307667 0.322923000000000015585754908898 -0.967307000000000027917224088014 +0.979952000000000045254466840561 -0.617863000000000051059600991721 0.811135000000000050413007102179 +0.980026999999999981483256306092 0.492765999999999981806553250863 -0.892595999999999945018203106883 +0.982103999999999976999731643446 0.308412999999999992706278817423 0.969717999999999968885333601065 +0.9833199999999999718625076639 -0.862875999999999976353137753904 -0.537144999999999983586462803942 +0.983613999999999988332888278819 0.850679999999999991722177128395 -0.555738999999999983003817760618 +0.984167000000000014026113603904 -0.436250999999999999889865875957 0.91711500000000001353583911623 +0.984659999999999979714004894049 -0.706821999999999950325957343011 -0.728593000000000046156856114976 +0.987939000000000011603162874962 -0.526038000000000005584865903074 0.864442000000000043691272821889 +0.988816999999999945991646654875 -0.786761999999999961374896884081 -0.635017999999999971372233176226 +0.990295000000000036344260934129 0.936583000000000054363624713005 -0.376997999999999999776179038236 +0.991101000000000009748646334629 0.704509000000000051855408855772 0.722071000000000018381740574114 +0.991192999999999990734522725688 0.82673399999999996889954445578 0.57796899999999995500843397167 +0.991681000000000034688696359808 -0.803267999999999982030374212627 0.609369000000000049510617827764 +0.991774999999999962163599320775 -1.00125799999999998135535861365 0.117745000000000002438049762077 +0.992036000000000028897773063363 -0.152277999999999996694199921876 0.996330999999999966654229410778 +0.992319999999999979856113441201 -0.309686000000000016818546555442 0.958851000000000008860467914928 +0.992385999999999990350829648378 0.538703000000000042923886667268 0.851450999999999957879026624141 +0.994990999999999958802732180629 0.999604000000000048054005219456 -0.103848999999999996868282892137 +0.995179000000000035797143027594 -0.389726999999999990098586977183 -0.926138000000000016775913991296 +0.995561000000000029253044431243 0.586118000000000027860380669154 -0.815675000000000038902214782865 +0.995577999999999962987828894256 0.267824000000000006505018745884 0.968037000000000036337155506772 +0.997056999999999971073805227206 0.766433999999999948649076486618 -0.646881999999999957040586195944 +0.997605999999999992766674949962 0.620539999999999980495601903385 0.787217999999999973326225699566 +0.998461999999999960664354148321 0.41875800000000001910294145091 0.909788999999999958845364744775 +0.999064999999999980850873271265 -0.987740999999999980119014253432 -0.161979000000000011860734616675 +1.00053199999999997693578279723 0.245268000000000013782752716907 -0.96890600000000004499156602833 +1.00116399999999994285815319017 0.677800999999999986833643106365 -0.733658999999999950070161958138 +1.00153300000000000657962573314 -0.933966999999999991644017427461 -0.353042999999999995708321876009 +1.00161799999999989729815297324 -0.845075000000000020605739337043 0.531608999999999998209432305885 +1.0016819999999999613038426105 -0.977504000000000039527492390334 0.202778000000000013791634501104 +1.00250100000000008648726179672 -0.549676000000000053447024583875 -0.832376000000000004774847184308 +1.00375799999999992806465343165 -0.111610000000000000874855743405 0.989955999999999947114304177376 +1.00413299999999994227550814685 -0.66593100000000005067590791441 0.740439999999999987068122209166 +1.00571199999999993934807207552 0.860962000000000005073275133327 0.497279999999999999804600747666 +1.00660799999999994724930729717 0.226478000000000012637002555493 0.967185999999999990173193964438 +1.00760300000000002640376806085 -0.883546999999999971286968047934 0.451751999999999986901144666263 +1.00763500000000005840661287948 -0.949892999999999987359444730828 0.287011999999999989352517104635 +1.00857400000000008155609521054 0.991215999999999985980991823453 -0.0164520000000000013451462166358 +1.0096110000000000361808361049 -0.918532000000000015127454844333 0.370111999999999996546762304206 +1.01064400000000009782752385945 0.416198000000000012388312597977 -0.897429000000000032244429348793 +1.01249400000000000510169684276 -0.393994000000000010874856570808 0.905330999999999996852295680583 +1.01254500000000002835065515683 -0.31195400000000000906297259462 -0.936715999999999993086419181054 +1.01300400000000001554667505843 -0.070202000000000000512478948167 0.98432399999999997675104168593 +1.01326699999999991774757290841 -0.26798199999999999798561134412 0.949460999999999999410249529319 +1.0151520000000000543138867215 0.184539000000000008583356247982 0.967166999999999998927080469002 +1.01531900000000008255085504061 0.940192999999999945437423320982 -0.29182900000000000506616970597 +1.01600599999999996470023688744 0.742252000000000022872370664118 0.645596999999999976438402882195 +1.01626199999999999867839051149 0.891792999999999946858508792502 0.414627999999999996560973158921 +1.01657899999999989937293776165 0.166498000000000007103651000762 -0.968940000000000023483437416871 +1.0166669999999999873807610129 0.861252000000000017543300145917 -0.473953999999999986414422892267 +1.01817599999999996995825313206 0.978914999999999979607423483685 0.07101000000000000367261776546 +1.01865199999999989088905749668 -0.573490000000000055280224842136 0.795900000000000051869619710487 +1.01869499999999990613730460609 0.375825000000000020161650127193 0.906098999999999987764454090211 +1.01973800000000003329603259772 -0.0282150000000000004962696920074 0.979458000000000050810911034205 +1.0199869999999999770068370708 0.494777999999999995583976897251 0.845470999999999972551734117587 +1.02017699999999988946797202516 -0.976420999999999983387510837929 -0.0764269999999999949391593645487 +1.02062199999999991817389854987 -0.865952999999999972757791510958 -0.456571000000000004614975068762 +1.02117499999999994386712387495 0.142171999999999992825294725662 0.967982000000000009087841590372 +1.02138299999999992984101027105 -0.482379999999999975468512047883 0.850933000000000050455639666325 +1.02183899999999994179233908653 -0.632799000000000000376587649953 -0.745259000000000004781952611665 +1.02280100000000007121059297788 0.919104000000000032066793664853 0.330340999999999995750954440155 +1.02376000000000000333955085807 0.962752000000000052182258514222 0.158191999999999999282351836882 +1.02393399999999989979926340311 0.014182999999999999427013896991 0.97537600000000002076205873891 +1.02435199999999992925836522772 -0.711372000000000004327205260779 0.666823000000000054576787533733 +1.0246539999999999537294570473 0.0995449999999999945998752082232 0.969625999999999987899457210005 +1.02519300000000002093258899549 -0.233095999999999997642774474116 -0.945856000000000030070168577367 +1.02530399999999999316457888199 0.942787999999999959399588078668 0.244748999999999994336974395992 +1.02557499999999990336618793663 0.0568260000000000015107914919099 0.972094000000000013628209671879 +1.02789200000000002788169695123 0.0869250000000000022648549702353 -0.967409999999999992148502769851 +1.02903400000000000424904555985 0.657850999999999963563368510222 0.712967000000000017401191598765 +1.02981199999999994965094174404 -0.472928000000000015035084288684 -0.846064999999999955981877519662 +1.03029700000000001836042429204 0.574910000000000032116531656357 0.779722000000000026176394385402 +1.03054299999999998682653767901 -0.930343000000000031057822980074 -0.269147999999999998355093566715 +1.03065999999999990954790973774 -0.792256999999999989015009305149 -0.556838000000000055145221722341 +1.03117199999999997750421698584 -0.714107999999999965012875691173 -0.6532499999999999973354647409 +1.03147300000000008424194675172 0.509915000000000007140954494389 -0.822223000000000037168490507611 +1.03164600000000006296829724306 -0.22492999999999999105604331362 0.940803999999999973624653648585 +1.03307400000000004780531526194 -0.153463999999999989309884540489 -0.953523000000000009457323812967 +1.03442600000000006765787929908 0.00686300000000000017669199436909 -0.964320999999999983742782205809 +1.03449600000000008215295110858 0.779658999999999990926369264344 -0.567405999999999965943686675018 +1.03615499999999993718802215881 -0.0733720000000000066586736124918 -0.959686000000000039023007047945 +1.03633500000000000618172180111 0.940093999999999985206500241475 -0.20550699999999999523225824305 +1.03633899999999989915977494093 0.331699000000000021604051880786 0.903313999999999950318851915654 +1.03664800000000001389821591147 0.337859999999999993658406083341 -0.900672999999999945863748962438 +1.0369010000000000726316784494 0.777065000000000005719869022869 0.566575000000000050803805606847 +1.0372639999999999638191638951 -0.961246000000000044849457481178 0.00942699999999999961597385578216 +1.03819700000000003647926405392 -0.349903999999999992809307514108 0.894267000000000034098945889127 +1.04052799999999989744026152039 -0.754005000000000036308733797341 0.590574999999999961097785217135 +1.04227300000000000501643171447 0.602658999999999944741091439937 -0.741936000000000039911185467645 +1.04318200000000005367439825932 0.693026999999999948620654777187 -0.656874999999999986677323704498 +1.04493400000000002947331267933 0.449176999999999992940757920223 0.840447999999999972864372921322 +1.04534499999999996866506535298 -0.618680000000000007709388682997 0.724215999999999970881958688551 +1.0457089999999999996305177774 0.868423999999999973731235058949 -0.390297999999999978282261281493 +1.04738500000000001044497821567 -0.180701000000000000511590769747 0.932915000000000049773518639995 +1.05025699999999999612043666275 -0.942278999999999977710274379206 0.0952439999999999953317342260561 +1.05132500000000006501466032205 0.286553999999999975401010487985 0.901445000000000051798565436911 +1.05210300000000001041655650624 -0.436553999999999997605470980488 0.838153000000000036884273413307 +1.05243500000000000937916411203 -0.394440999999999986069809665423 -0.858369000000000048622439408064 +1.05259799999999992259347436629 -0.793661999999999978605558226263 0.511994999999999977902120917861 +1.05326199999999992051868957788 0.936284000000000005137223979546 -0.118373999999999993115729068904 +1.05370399999999997397992501647 0.808810999999999946652451399132 0.485316000000000025149660132229 +1.05389599999999994395238900324 -0.865609999999999990549781614391 -0.374194999999999999840127884454 +1.05446100000000009266898359783 -0.556385000000000018438583992975 -0.760623999999999966803443385288 +1.05456799999999994987831541948 -0.526604999999999989768184605055 0.781390999999999946723505672708 +1.05548799999999998178168425511 -0.923049000000000008370193427254 -0.184190999999999993619326232874 +1.05640000000000000568434188608 0.692566000000000014935608305677 0.63590199999999996727240159089 +1.05793599999999998750865870534 0.258062999999999986844301247402 -0.902316000000000006942002528376 +1.05910499999999996312283201405 -0.919591999999999964998664836457 0.180685000000000012265743976059 +1.06022799999999994824406712723 0.527275000000000049205084451387 0.773237999999999980893505835411 +1.06042299999999989346122220013 -0.135469000000000006078693104428 0.925825000000000009059419880941 +1.0605130000000000389803744838 -0.830187000000000008270717444248 0.43139499999999997292832176754 +1.06117499999999997939426066296 -0.304155000000000008686384944667 0.883966999999999947235096442455 +1.06278999999999990144772255007 0.431593999999999977656983674024 -0.827165999999999956848739657289 +1.06359300000000001062971932697 0.240567000000000003057110120608 0.900498000000000020648371901189 +1.06377300000000007962341896928 -0.893276999999999987700505243993 0.265411999999999981270093485364 +1.06414100000000000356692453352 0.608847000000000027064572805102 0.704917000000000015802470443305 +1.06424300000000005006484116166 -0.863434999999999952535745251225 0.349092999999999986648901995068 +1.06603099999999995084465354012 0.928779000000000021231016944512 -0.0307750000000000002720046410332 +1.06634899999999999131716776901 0.837366000000000054726001508243 0.402142999999999972704500805776 +1.06712899999999999423039298563 0.402081000000000021721291432186 0.83640099999999995006305653078 +1.06785299999999994113863976963 0.789807000000000036799008285016 -0.485690000000000010604850331219 +1.06791299999999989012167134206 -0.661426999999999987167598192173 0.649673999999999973731235058949 +1.06843500000000002359001882724 -0.79462699999999997224620074121 -0.476461000000000023391066861222 +1.06903600000000009728751138027 -0.638720999999999983209875153989 -0.670223000000000013187673175707 +1.070279999999999898108171692 -0.314522999999999997022825937165 -0.869237999999999955136331664107 +1.0706230000000001023607865136 0.872168999999999972061459629913 -0.305101999999999984325427249132 +1.0707070000000000753459517 -0.089413000000000006362022020312 0.919560000000000044018122480338 +1.0730960000000000498232566315 0.193921000000000010032863428933 0.900478000000000000646593889542 +1.07361400000000006826894605183 -0.718574999999999963762320476235 -0.575327999999999950553331018455 +1.07442499999999996340704910835 0.177122000000000001662670001679 -0.90235200000000004294520294934 +1.07459400000000004915534645988 0.917607999999999979223730406375 0.0569459999999999966213692914607 +1.07478500000000010139444839297 0.862616000000000049396930990042 0.3173819999999999974527042923 +1.07626599999999994494714883331 -0.912112000000000033850255931611 -0.0985069999999999973416819898375 +1.07819700000000007200640084193 -0.0427140000000000019664270212161 0.91414799999999996060751072946 +1.07884699999999988939691775158 0.525051999999999963186780860269 -0.748604999999999964899188853451 +1.07891599999999998615862750739 0.902815999999999951874940506968 0.144442999999999988069987466588 +1.07897899999999991038635016594 0.884461000000000052700954711327 0.231368999999999991334931337406 +1.07959699999999991781862718199 0.724547999999999969844566294341 0.556327000000000015944578990457 +1.07979500000000006032507826603 0.146799000000000012811085525755 0.90138399999999996303756688576 +1.07997600000000004705213996203 -0.388739999999999974455988649424 0.826154999999999972715158946812 +1.0810830000000000161719526659 0.705517999999999978477660533827 -0.577497999999999955811347263079 +1.08133600000000007490541520383 -0.256929000000000018477663843441 0.874470999999999998308908288891 +1.08239700000000005353228971217 -0.477881000000000000227373675443 -0.774626999999999954482632347208 +1.08286400000000004872902081843 0.00444299999999999990080157274974 0.909607000000000054384940995078 +1.08301000000000002820854660968 -0.861851999999999951462825720228 -0.290341999999999988979482168361 +1.0832770000000000454321025245 -0.233490000000000003099742684753 -0.87863100000000005085354359835 +1.08359200000000011065992566728 -0.568751000000000006551204023708 0.708767000000000035875302728527 +1.0836650000000001003996885629 0.0993870000000000031192826099868 0.90321300000000004359890226624 +1.08468900000000001426769813406 0.0518730000000000024407142973359 0.905958000000000041040948417503 +1.08487200000000005850608886249 0.616820999999999952656537516305 -0.665268999999999999239719272737 +1.08604999999999995985433542955 0.0953549999999999953192997281803 -0.900778999999999996362021192908 +1.08626500000000003609557097661 -0.701563999999999965417885050556 0.572568999999999994621191490296 +1.08648400000000000531485966349 0.353675999999999990386356785166 0.833346000000000031171509817796 +1.08728200000000008174083632184 0.477822999999999997733368672925 0.767791000000000001257660642295 +1.08755899999999994243182754872 -0.477391000000000009784173471417 0.767668000000000017024603948812 +1.08938899999999994072652498289 0.351463999999999998635757947341 -0.830485000000000028741453661496 +1.09131200000000005978506578685 0.872473000000000054043880481913 -0.218702000000000007506884003305 +1.0913749999999999840127884454 -0.151662999999999992262189607573 -0.886508999999999991459276316164 +1.09276400000000006862421741971 0.0130849999999999994093613508994 -0.897604999999999986215470926254 +1.09279700000000001836042429204 -0.89757399999999998296829062383 -0.0124349999999999998728794636804 +1.09378599999999992498089795845 0.640382000000000006778577699151 0.627329000000000025494273359072 +1.09454099999999998615862750739 -0.0693619999999999931050709278679 -0.892842000000000024506618956366 +1.09628600000000009373479770147 0.557691000000000047798209834582 0.697953000000000045588421926368 +1.09699499999999994237498412986 0.796838999999999963996799579036 -0.402058000000000026474822334421 +1.09853399999999989944399203523 0.753669999999999951079132642917 0.474555999999999977845277499 +1.09860200000000007847233973735 -0.208411000000000012910561508761 0.865816999999999947768003494275 +1.10033099999999994800248259708 -0.738932999999999950979656659911 0.493203999999999975756281855865 +1.10199399999999991806021171215 -0.793858999999999981334042331582 -0.394203999999999998848920768069 +1.10225900000000009981704351958 -0.560899000000000036436631489778 -0.685871000000000008434142273472 +1.10292300000000009774225873116 0.304153000000000006686207143503 0.831295000000000006146194664325 +1.10489499999999996049382389174 -0.339127999999999985014653702819 0.814984999999999959463536924886 +1.10501500000000008050449196162 -0.879496000000000055507598517579 0.0736870000000000024975577161968 +1.10553799999999990966159657546 -0.397598000000000006970424237807 -0.78721200000000002283684352733 +1.1076930000000000386961573895 0.86933199999999999363353708759 -0.131439000000000000278888023786 +1.10785099999999991915444752522 -0.854693000000000036031622130395 -0.205342999999999997751132241319 +1.10834000000000010288658813806 -0.608652999999999999580779785902 0.633344000000000018069101770379 +1.1100540000000000961932755672 -0.77338499999999998912869614287 0.41189199999999998036415149727 +1.11074099999999997834265741403 0.445288000000000017131185359176 -0.753638999999999947831952340493 +1.11116499999999995829114141088 0.269840999999999997527311279555 -0.832165000000000043556269702094 +1.11135099999999997777422322542 0.426750000000000018207657603853 0.763402000000000025003998871398 +1.11181899999999989070431638538 -0.720207999999999959328533805092 -0.495136000000000020548895918182 +1.11201299999999991818810940458 -0.642121999999999970576425312174 -0.592540999999999984382270667993 +1.11287200000000008337508461409 -0.857944999999999957651652948698 0.159517999999999993132604458879 +1.11290399999999989333332450769 -0.158791999999999988713028642451 0.85803899999999999614885837218 +1.11313599999999990330934451777 0.779818000000000011162626378791 0.390913000000000010469847211425 +1.11471699999999995789323747886 0.715223999999999970889064115909 -0.495842999999999978211207007917 +1.11539699999999997181987509975 -0.804784999999999972608577536448 0.328954999999999997406519014476 +1.11633800000000005248068646324 -0.833008999999999999452882093465 0.244718999999999992089882994151 +1.11638100000000006772893357265 0.253707000000000015837997580093 0.830255999999999994010124737542 +1.11749300000000006960476639506 -0.42604300000000000503419528286 0.754781999999999952954965465324 +1.11872299999999991193533332989 -0.51634400000000002517452912798 0.694151999999999991253218922793 +1.11911399999999994214761045441 0.669390000000000040536463075114 0.547266000000000030212277124519 +1.11970400000000003259970071667 0.862761000000000000120792265079 -0.0436570000000000013606893389806 +1.12180799999999991634069829161 0.800725000000000020072832285223 -0.316838000000000008515854688085 +1.12196399999999996133226431994 0.538116000000000038738789953641 -0.672031999999999962724928082025 +1.12318999999999991068477811496 0.628549000000000024357404981856 -0.58597699999999997011457253393 +1.12334399999999989816501511086 0.8028880000000000460858018414 0.305727000000000026513902184888 +1.12379099999999998438227066799 -0.315850999999999992873256360326 -0.798331000000000012839507235185 +1.12418499999999998983923887863 -0.10827000000000000512478948167 0.851167000000000006920686246303 +1.12533900000000008922995675675 0.504584000000000032493119306309 0.692103000000000023739232801745 +1.12675900000000006606626357097 -0.28791299999999997449862121357 0.804687000000000041133318973152 +1.1268050000000000565592017665 0.202537999999999995814903286373 0.830234000000000027519320155989 +1.12729499999999993598009950801 0.852786000000000043996806198265 0.0442970000000000030393465522138 +1.1280159999999999076436552059 0.585906000000000037886138670729 0.619913999999999965062613682676 +1.12803100000000000591171556152 0.187046999999999991048937886262 -0.832201999999999997292832176754 +1.12831900000000007189271400421 -0.844160000000000021458390619955 -0.11953400000000000136246569582 +1.12871199999999993757171523612 -0.646152999999999977376319293398 0.555423000000000000042632564146 +1.12911899999999998378541476995 0.822790000000000021351809209591 0.219335000000000002184918912462 +1.13043800000000005390177193476 0.839443999999999967975838899292 0.132076999999999999957367435854 +1.13071000000000010388134796813 -0.480947999999999986631138426674 -0.700131999999999976580511429347 +1.13120299999999995854693679576 -0.7899589999999999667679162485 -0.310389999999999999236166559058 +1.13234100000000004193623226456 0.374257000000000006334488489301 0.760089000000000014622969501943 +1.13240099999999999091926383699 -0.0570430000000000034243718971538 0.845230000000000036841640849161 +1.13415400000000010649614523572 0.150846000000000007856826300667 0.831227999999999966895813940937 +1.13708600000000004115463525523 -0.232963000000000003408828774809 -0.80793800000000004501998773776 +1.13752100000000000434852154285 -0.00531300000000000001432187701766 0.840249000000000023646862246096 +1.13783100000000003682032456709 0.36368099999999997651300986945 -0.757018999999999997463362433336 +1.13839899999999993873700532276 0.0988369999999999943041117944631 0.833234000000000030183855415089 +1.13952300000000006363620741467 0.0467149999999999995803356966917 0.836245000000000016093792964966 +1.13992200000000010184919574385 0.103407999999999999918287585388 -0.830593000000000025728752461873 +1.14002599999999998381383647938 0.695756000000000041083580981649 0.465042999999999984162002419907 +1.14219300000000001382716163789 0.801451000000000024492408101651 -0.230368999999999990446752917705 +1.14395200000000007989342520887 0.722107999999999972118303048774 -0.412229999999999985327292506554 +1.14425299999999996458655004972 -0.372763000000000011002754263245 0.742785999999999946297180031252 +1.14433500000000010210499112873 -0.830296000000000034013680760836 -0.03325299999999999783772963724 +1.14463099999999995404209585104 -0.681103000000000013969270185044 0.475308999999999981511678015522 +1.14536900000000008148504093697 -0.14926300000000000678390676967 -0.815996999999999972352782151575 +1.1454729999999999634496816725 -0.553258999999999945273998491757 0.617897000000000029551472380263 +1.14548199999999988918375493085 -0.235298000000000007148059921747 0.795301999999999953416818243568 +1.14563700000000001644195890549 -0.718996999999999997221777903178 -0.412990000000000023749890942781 +1.14570599999999989115906373627 -0.563197999999999976417086600122 -0.608411000000000035115022001264 +1.14678999999999997605470980488 0.0192559999999999988118393190462 -0.827347000000000054598103815806 +1.14860800000000007337064289459 -0.0650789999999999979607423483685 -0.822474999999999956123986066814 +1.15016899999999999693045538152 0.320552000000000003598898956625 0.75786500000000001087130385713 +1.15060000000000006714628852933 -0.461662999999999990041743558322 0.680431000000000008043343768804 +1.15060300000000004239097961545 -0.642989999999999950475171317521 -0.512522000000000033104186059063 +1.15118800000000010008704975917 0.449734999999999995878852132591 0.6873899999999999455013721672 +1.15427699999999999747046786069 -0.399185000000000012043699371134 -0.712949000000000054910742619541 +1.15430999999999994720667473302 0.457224000000000019294787989566 -0.677138000000000017664092410996 +1.15529499999999996084909525962 0.611809000000000047236881073331 0.539428000000000018587797967484 +1.15583400000000002805222720781 -0.813155999999999989924504006922 0.053158999999999997920774319482 +1.15594899999999989326227023412 -0.782942000000000026815882847586 -0.225351999999999996759925124934 +1.15603199999999994851407336682 -0.713365000000000026858515411732 0.393320000000000002948752353404 +1.15643800000000007699441084696 0.719376000000000015432988220709 0.380983999999999989327648108883 +1.15707500000000007567280135845 0.637796999999999947306150716031 -0.504372000000000042518877307884 +1.15807100000000007256062417582 0.799015000000000030766500458412 -0.142990000000000005986322548779 +1.15895499999999995743849012797 0.529352999999999962454921842436 0.613684000000000007268852186826 +1.16000799999999992806465343165 0.280552999999999996827426684831 -0.758731000000000044281023292569 +1.16065299999999993474375514779 0.549057000000000017259083051613 -0.592808000000000001605826582818 +1.16099200000000002397371190455 -0.181490000000000012425616091605 0.78686699999999998311750459834 +1.16277199999999991675281307835 -0.792806000000000010707879027905 0.139361000000000012644107982851 +1.16287099999999998800603862037 -0.74281200000000002781064267765 0.309777999999999997804422946501 +1.16476299999999999279509665939 0.265846000000000026730617719295 0.756738000000000021749713141617 +1.16512100000000007327116691158 -0.769326999999999983081977461552 0.225012999999999990796695215067 +1.16770100000000009998757377616 -0.587991000000000041403325212741 0.53920299999999998785682464586 +1.16773400000000004972378064849 -0.317761999999999988908427894785 0.731727000000000016299850358337 +1.16828599999999993563903899485 0.740156999999999953843143885024 0.295422000000000017916335082191 +1.16867199999999993309529600083 0.726141999999999954162888116116 -0.326990999999999976122211364782 +1.16937899999999994626875832182 0.793425000000000046895820560167 -0.0550469999999999987094767561757 +1.17286700000000010390976967756 -0.315931999999999990613730460609 -0.724272000000000026886937121162 +1.17322600000000010211920198344 -0.126701000000000008061107337198 0.779414999999999968949282447284 +1.17372900000000002229683104815 0.393361000000000016196821661651 0.68383199999999999540989392699 +1.17456000000000004845901457884 -0.482117000000000017756462966645 -0.622873000000000009990230864787 +1.17493200000000008742517820792 -0.714948999999999945664796996425 -0.32921299999999997787369920843 +1.17552400000000001334399257757 0.75801700000000005186251428313 0.208694999999999991624477502228 +1.17606799999999989125853971927 0.210354999999999986437515531179 0.75671399999999999774757952764 +1.17607200000000000628119778412 0.784703000000000039371172988467 0.0331129999999999966031616338569 +1.17613199999999995526422935654 -0.772835000000000049702464366419 -0.139423999999999992382981872652 +1.17718499999999992589039266022 0.196232999999999990770049862476 -0.758766999999999969261921251018 +1.17801500000000003431921413721 0.63529800000000002935252041425 0.456813000000000024591884084657 +1.17812300000000003130651293759 0.772885000000000044195758164278 0.12114300000000000068212102633 +1.17909700000000006170353117341 -0.404926000000000008149925179168 0.667656000000000027227997634327 +1.17916700000000007619860298291 -0.495462000000000013510970120478 0.603392999999999957161378461024 +1.18178200000000011016254575225 0.374462000000000017063683799279 -0.680564999999999975521802753065 +1.18213600000000007561595793959 -0.0711470000000000019069190670962 0.772975999999999996425970039127 +1.18403700000000000613908923697 0.154297999999999990716759157294 0.757792000000000021131540961505 +1.18463300000000004708056167146 -0.563277000000000027668534130498 -0.528549999999999964295227528055 +1.18465099999999989854870818817 -0.641318999999999972416730997793 -0.430479000000000000536459765499 +1.18532100000000006900791049702 -0.620402000000000009016787316796 0.458382000000000011663559007502 +1.18639399999999994861354934983 0.6445279999999999898108171692 -0.420775999999999983369747269535 +1.18640699999999998937028067303 -0.231517000000000000570210545447 -0.734056999999999959527485771105 +1.18648099999999989684340562235 0.470945000000000002504663143554 0.60866500000000001158184659289 +1.18768800000000007699441084696 -0.0150489999999999998769872888715 0.767575000000000007283063041541 +1.18784200000000006447464784287 -0.261257000000000016992629525703 0.721647999999999956166618630959 +1.1879980000000001094662138712 0.552032999999999995921484696737 0.532842999999999955562657305563 +1.1886399999999999188560195762 0.0978969999999999979101161784456 0.759967999999999976878939378366 +1.18877999999999994784616319521 0.727310000000000012043699371134 -0.240461000000000008069989121395 +1.18929499999999999104716152942 0.111053999999999999936939332201 -0.757129000000000051961990266136 +1.18985899999999999998578914528 0.0413740000000000010538236949742 0.763233000000000050278003982385 +1.19167399999999990001242622384 -0.759677000000000046675552312081 -0.0529460000000000000075495165675 +1.19287499999999990762944435119 0.335685999999999984400034236387 0.681443000000000020932588995493 +1.19332199999999999384669990832 0.467355000000000020410340084709 -0.597964000000000051038284709648 +1.19476099999999996192912021797 0.557830999999999965766050991078 -0.511244000000000031747049433761 +1.19484199999999995966959431826 -0.146273999999999987364773801346 -0.742264000000000034873437471106 +1.19608500000000006480149750132 0.656278999999999945735851270001 0.372394999999999976036946236491 +1.19628899999999993575272583257 0.0253500000000000010047518372858 -0.753823000000000020826007585129 +1.1981409999999999005382278483 -0.0605380000000000015325518631926 -0.748860999999999998877342477499 +1.1982639999999999957935870043 -0.650364999999999970903274970624 0.375751000000000001666222715357 +1.19846099999999999852207110962 -0.399197000000000024044766178122 -0.635871999999999992780885804677 +1.19959199999999999164401742746 -0.708080000000000042703618419182 -0.244137999999999993905319684018 +1.20251299999999994305710515619 -0.743522000000000016228796084761 0.0337410000000000001585398479165 +1.20307900000000000950706180447 -0.527306000000000052452264753811 0.523974999999999968558483942616 +1.20410100000000008790834726824 -0.346355999999999997207567048463 0.655878999999999989789500887127 +1.20419600000000004413891474542 0.725608000000000030738078748982 -0.152983000000000007867484441704 +1.20427299999999992685673078086 0.290159000000000000252242671195 -0.682301000000000046341597226274 +1.204498000000000068610006565 -0.203471000000000012963852213943 0.71258999999999994567900785114 +1.20647700000000002162892087654 -0.677760999999999946830087083072 0.291638000000000008338219004145 +1.20854799999999995563371157914 0.27693499999999998673061440968 0.680232999999999976559195147274 +1.20860600000000006915001904417 -0.72443100000000004712319423561 0.120293999999999998151700708604 +1.20928700000000000081001871877 -0.435491999999999990222931955941 0.589891000000000054193094456423 +1.20943500000000003780087354244 0.674669999999999991935339949123 0.286507999999999984908072292455 +1.20992900000000003224442934879 -0.702482999999999968565589369973 0.206373000000000000886402062861 +1.21048599999999995091570781369 0.41091299999999997272226437417 0.604875999999999969247710396303 +1.21103099999999996860822193412 0.648715000000000041602277178754 -0.335519999999999984918730433492 +1.21235099999999995645794115262 0.572533999999999987373655585543 0.449898999999999993359978134322 +1.21377599999999996605026808538 -0.481383999999999978580689230512 -0.543157000000000000916600129131 +1.21402399999999999202771050477 -0.637117000000000044401815557649 -0.346737000000000017418955167159 +1.21486099999999996867927620769 0.721041999999999960735408421897 -0.0648999999999999993560706457174 +1.21709200000000006269829100347 0.490296000000000009588774219083 0.527537999999999951405982301367 +1.21731400000000000716227077646 -0.31476500000000001699973495306 -0.647355000000000013749001936958 +1.2176370000000000803908051239 -0.144631000000000009553247082295 0.704586999999999963328889407421 +1.2180120000000000946016598391 0.690398999999999984922283147171 0.199490000000000000657252030578 +1.21888400000000007850076144678 -0.56113100000000004641265149985 -0.446601999999999998980371174184 +1.21951699999999996215649389342 -0.6984160000000000367847974303 -0.158098999999999989540810929611 +1.22068799999999999528199623455 0.217342000000000007409184377138 0.680207000000000006068034963391 +1.22073000000000009279688129027 0.713631000000000015326406810345 0.0234380000000000005000444502912 +1.22106899999999995998223312199 0.383765999999999996017407966065 -0.601426000000000016143530956469 +1.22169299999999991790389231028 0.20464599999999999457855892615 -0.682339000000000028833824217145 +1.22178199999999992364507761522 0.703403000000000000468958205602 0.111685000000000006492584248008 +1.22224299999999996835242654925 -0.557069000000000036365577216202 0.442489000000000021195489807724 +1.2241539999999999643875980837 0.564404000000000016790124846011 -0.427661999999999986599164003565 +1.2255139999999999922408733255 -0.286185000000000022701840407535 0.645145999999999997243094185251 +1.22720600000000001905675617309 -0.0849710000000000048592241341794 0.697671999999999958852470172133 +1.2276249999999999662492200514 0.475642000000000009229950137524 -0.516430999999999973404385400499 +1.22924699999999997857003108948 0.157141000000000002900790718741 0.681364999999999998436805981328 +1.2308730000000001059135001924 0.349495000000000000106581410364 0.602331999999999978534503952687 +1.23088799999999998213695562299 0.650341999999999975656805872859 -0.248939999999999994617638776617 +1.23104499999999994486188370502 -0.229155999999999998584243598998 -0.657278000000000028890667636006 +1.23191999999999990400567639881 0.590775999999999967826624924783 0.365180000000000004600764214047 +1.23316800000000004189359970042 -0.0247250000000000004496403249732 0.691871000000000013763212791673 +1.2339739999999999042756826384 0.11826100000000000500577357343 -0.680676999999999976509457155771 +1.23418999999999989825028023915 0.0965700000000000030597746558669 0.683702000000000031931790545059 +1.23462800000000005873346253793 -0.685995000000000021422863483167 -0.0714359999999999994990673712891 +1.23470499999999994145127857337 -0.464339000000000001744382416291 0.509797999999999973397279973142 +1.23549899999999990285459716688 0.0358679999999999971072028870367 0.687208000000000041040948417503 +1.23571600000000003660716174636 -0.373584000000000027164048788109 0.577443000000000039584335809195 +1.2365829999999999877502432355 -0.584632999999999958262719701452 0.359256000000000019767298908846 +1.2379160000000000163566937772 -0.397633999999999987462473427513 -0.556285999999999947185358450952 +1.23860700000000001352873368887 -0.630400999999999989142906997586 -0.261626999999999998447464122364 +1.23960000000000003517186542012 -0.142707000000000000516919840265 -0.665602000000000026957991394738 +1.24106699999999992023447248357 0.0313449999999999978639309006212 -0.677324000000000037147174225538 +1.24246499999999993057997471624 0.426842999999999972438047279866 0.523533000000000026119550966541 +1.24289999999999989377386100387 0.507712000000000052146731377434 0.444328999999999973979925016465 +1.2429449999999999665334371457 -0.0557590000000000030055957722652 -0.672292000000000000703437308402 +1.24325100000000010602718703012 -0.224647999999999986586729505689 0.635499999999999953814722175593 +1.24378499999999991842969393474 0.29861900000000002330935444661 -0.603179000000000020698109892692 +1.24486800000000008559197794966 -0.670868000000000019866774891852 0.0155090000000000002161604228945 +1.24588699999999996670396740228 0.649402000000000034773961488099 -0.161376999999999992674304394313 +1.24604399999999992942889548431 -0.609890000000000043200998334214 0.274606000000000016747492281866 +1.24662800000000006939160357433 0.606685999999999947540629818832 0.279019000000000017003287666739 +1.24756399999999989525178989425 0.286932000000000020367707520563 0.60104400000000002268762955282 +1.24820099999999989393018040573 -0.478750000000000008881784197001 -0.46129700000000001258726456399 +1.24832499999999990691890161543 -0.556769999999999987139176482742 -0.362893000000000021110224679433 +1.24871599999999993713117873995 0.568748999999999949039874991286 -0.342391999999999974146902559369 +1.2501949999999999452171550729 -0.653092000000000005854872142663 0.102391999999999996906474564184 +1.25058699999999989316279425111 -0.632739999999999969126918131224 0.188872000000000012098766433155 +1.2552490000000000591739990341 -0.491352999999999984215293125089 0.427692999999999989846344305988 +1.25553800000000004288835953048 0.391554999999999986393106610194 -0.519912999999999958511409658968 +1.25597000000000003083755473199 0.645899000000000000909494701773 -0.0731780000000000069304562089201 +1.2564150000000000595434812567 0.620202000000000031043612125359 0.191757000000000010775380587802 +1.256957000000000101991304291 -0.312358000000000024520829811081 -0.567884000000000055408122534573 +1.25708299999999995044674960809 0.482051999999999980506260044422 -0.432858999999999993768540207384 +1.25724199999999997068300672254 -0.161990999999999996106225808035 0.626978000000000035285552257847 +1.25829999999999997406519014476 -0.621196999999999999175770426518 -0.175485000000000002096101070492 +1.25835000000000007958078640513 -0.309983000000000008533618256479 0.566097999999999990095034263504 +1.26049199999999994581401097093 0.223471000000000002971844992317 0.601015999999999994685140336514 +1.26109500000000007702283255639 0.639847000000000054598103815806 0.015310999999999999957034368947 +1.26124400000000003174704943376 0.631269999999999997797317519144 0.103738999999999997880806290596 +1.26138100000000008549250196666 0.212249999999999994226840271949 -0.603217000000000003190336883563 +1.26245399999999996509814081946 -0.399336999999999997523758565876 0.496728000000000002867039938792 +1.26380200000000009197265171679 0.523124999999999951150186916493 0.359366000000000018754775510388 +1.2640139999999999709245912527 0.361924000000000023469226562156 0.520843999999999973660180785373 +1.2674319999999998920259258739 -0.098459000000000004848565993143 0.619613999999999998102850895521 +1.26835000000000008846257060213 0.57084900000000005082512188892 -0.255771000000000026108892825505 +1.26953999999999989078958151367 0.441089000000000008849809773892 0.440124000000000015209167258945 +1.26960600000000001230660018336 0.159364000000000005652367462972 0.602249000000000034305003282498 +1.27082600000000001116973180615 -0.225892000000000009451994742449 -0.577906000000000030780711313128 +1.27083999999999996965982518304 -0.516427999999999998159694314381 0.343899999999999983479881393578 +1.27248399999999994847144080268 -0.394500999999999990563992469106 -0.474503999999999981351805899976 +1.27283999999999997143618202244 -0.550212999999999952116525037127 -0.277751000000000025647040047261 +1.27302800000000004843059286941 -0.609540999999999999481303802895 -0.0886490000000000055724314051986 +1.27378100000000005209699338593 -0.034304000000000001158184659289 0.613437000000000010047074283648 +1.27378499999999994507504652574 0.125001000000000001000088900582 -0.601539999999999963620211929083 +1.27486999999999994770405464806 0.0948620000000000018758328224067 0.604737999999999997768895809713 +1.27626299999999992529353676218 0.0302210000000000013342660309945 0.6084720000000000128537180899 +1.27709699999999992670041137899 -0.244938999999999990064836197234 0.555902000000000007240430477395 +1.27769899999999991813126598572 -0.474227000000000009638512210586 -0.377616000000000007208456054286 +1.2783889999999999975699438437 0.305900000000000005240252676231 -0.521676999999999946311390885967 +1.27946699999999990993160281505 -0.138578000000000006730616064488 -0.58631299999999997307753574205 +1.27971699999999999342037426686 0.536472999999999977660536387702 0.272984999999999977671194528739 +1.28094899999999989326227023412 0.0372149999999999980815346134477 -0.598153000000000045766057610308 +1.28141600000000011050360626541 -0.539464999999999972324360442144 0.258749999999999980015985556747 +1.28157999999999994145127857337 0.486559999999999992503774137731 -0.347579000000000026826540988623 +1.28165599999999990643573255511 0.295796000000000003371525281182 0.519483000000000028073543489882 +1.28273199999999998333066741907 -0.595481000000000038063774354669 -0.00146499999999999993942345621889 +1.28284500000000001307398633799 -0.0507599999999999995647925743469 -0.593071000000000014829026895313 +1.28297799999999995179678080603 0.57069700000000000983391146292 -0.168141000000000012670753335442 +1.28421000000000007368328169832 -0.423514000000000001566746732351 0.414051999999999975621278736071 +1.28505099999999994331290054106 0.397799000000000013699263945455 -0.436348000000000013631762385558 +1.28621900000000000119371179608 -0.33255800000000002025757339652 0.484816999999999997950084207332 +1.28693400000000002236788532173 -0.560373000000000009990230864787 0.172578000000000009173106718663 +1.2873730000000001005844296742 -0.5790699999999999736388645033 0.0857259999999999966480146440517 +1.29058099999999997820054886688 0.547703999999999968650854498264 0.185526999999999997470467860694 +1.29160499999999989206855843804 0.453593000000000023952395622473 0.354978000000000015745627024444 +1.2916389999999999815827322891 -0.308717000000000019177548438165 -0.486171000000000019802826045634 +1.29188600000000008982681265479 -0.17871100000000000873612293617 0.546893999999999991246113495436 +1.29216599999999992576249496778 0.372925999999999979728215748764 0.437300999999999995271338093517 +1.29232999999999997875477220077 -0.54148399999999996534683077698 -0.191512999999999988798293770742 +1.29254299999999999748467871541 0.568292000000000019355184122105 -0.0798470000000000013073986337986 +1.295320999999999944662931739 0.228719000000000005634603894578 0.519453000000000053582027703669 +1.29608900000000004659739261115 0.219017999999999990468069199778 -0.521715000000000039825920339354 +1.29635199999999994879829046113 0.55677299999999996238386756886 0.0973370000000000068496319727274 +1.29700700000000002098943241435 0.563644999999999951612039694737 0.00876200000000000069066974361931 +1.30089800000000010982148523908 -0.446020000000000027551294579098 0.329743000000000008320455435751 +1.30101899999999992552091043763 0.489146999999999998465227690758 -0.260927999999999993274713006031 +1.30203000000000002067679361062 -0.389811000000000018594903394842 -0.390849000000000001975308805413 +1.30215600000000009117684385274 -0.467832000000000025607960196794 -0.292445000000000010498268920855 +1.30265699999999995384314388502 -0.111558000000000004381384144381 0.5391110000000000068709482548 +1.30495399999999994733457242546 0.160957999999999989970689284746 0.520755999999999996674659996643 +1.30559099999999994601296293695 -0.221735999999999988663290650948 -0.496252999999999999669597627872 +1.30590300000000003599609499361 -0.264263999999999998902211473251 0.47411100000000000465050220555 +1.30672100000000002140154720109 -0.530618000000000034077629607054 -0.104519000000000000794031507212 +1.30794699999999997075406099611 0.31197500000000000230926389122 -0.438114999999999976676434698675 +1.30856700000000003569766704459 0.131248000000000003550937321961 -0.520027000000000017010393094097 +1.30857299999999998618704921682 0.464307999999999998497202113867 0.2684309999999999751807422399 +1.3090120000000000644035935693 -0.353820000000000023376856006507 0.401621000000000005769607014372 +1.30936699999999994759036781034 -0.0437470000000000011630696405973 0.53258199999999999985078602549 +1.30949300000000001809041805245 0.402471999999999996422417325448 -0.351061999999999985178078532044 +1.31051800000000007173639460234 0.0927810000000000023590018827235 0.523387000000000046640025175293 +1.31068999999999991068477811496 0.303493000000000012761347534251 0.435871000000000008434142273472 +1.31199099999999990728838383802 0.0244559999999999985731413687517 0.5273339999999999694324515076 +1.31245199999999995199573277205 -0.466764999999999985469401053706 0.244131999999999987904786280524 +1.31428300000000009006839718495 -0.133900999999999992251531466536 -0.504709999999999991970867085911 +1.31521899999999991592858350486 0.382454999999999989412913237175 0.352032000000000011574741165532 +1.31532399999999993767119121912 0.489804000000000017145396213891 -0.173246000000000011098677532573 +1.31577399999999999913313786237 0.0429399999999999990030197238866 -0.51661999999999996813215830116 +1.31595499999999998586019955837 -0.517658999999999980268228227942 -0.0171119999999999987394527778406 +1.31768200000000001992361831071 -0.045560000000000003272937476595 -0.511507999999999962703611799952 +1.31882600000000005380229595175 -0.485669000000000017358559034619 0.157557000000000002604139126561 +1.31999500000000002941646926047 -0.502655999999999991700860846322 0.0703610000000000068709482548002 +1.32037599999999999411670614791 0.473189999999999999502620084968 0.18082400000000001250022307886 +1.32122300000000003628031208791 -0.30385800000000001697131324363 -0.402538999999999980161646817578 +1.32143100000000002225419848401 -0.194726000000000010192735544479 0.464652999999999982705389811599 +1.32147299999999989772447861469 -0.459592000000000000525801624462 -0.206119999999999997664090756189 +1.32443800000000000416378043155 0.488528000000000017788437389754 -0.0848809999999999981179499286554 +1.32503700000000002034994395217 0.23306399999999999339550527111 0.435840999999999978431475256002 +1.32568100000000010929568361462 0.224920000000000008810729923425 -0.438153000000000014679812920804 +1.32643899999999992367349932465 -0.383583000000000007290168468899 -0.305651999999999979262810256841 +1.32663899999999990164667451609 -0.373686000000000018150814184992 0.316840999999999983760545774203 +1.32696900000000006514255801449 0.480204000000000019721113631022 0.0925040000000000028901325777042 +1.32832499999999997797317519144 0.48532399999999997763922010563 0.0038189999999999999120980920253 +1.32876700000000003143441063003 0.405557999999999974072295572114 -0.264388999999999985135445967899 +1.329555999999999960081709105 -0.282546000000000019358736835784 0.390448000000000017273293906328 +1.33234399999999997277200236567 0.316817999999999988514076676438 -0.35282499999999999973354647409 +1.33274000000000003574029960873 -0.124217999999999995086596982219 0.456479999999999996873611962656 +1.33308099999999996043698047288 0.390475000000000016520118606422 0.265373000000000025533353209539 +1.33455100000000004278888354747 0.309991999999999989778842746091 0.350540000000000018243184740641 +1.33515199999999989444177117548 0.161917000000000005366374011828 0.437209000000000014285461702457 +1.33520199999999999995736743585 -0.216705000000000008730793865652 -0.412640999999999980030196411462 +1.33557499999999995665689311863 -0.449535999999999991150190226108 -0.118981000000000003424815986364 +1.33818400000000004013145371573 0.136976999999999987656096323008 -0.436462000000000016619594589429 +1.33902999999999994251709267701 -0.392077000000000008839151632856 0.230809999999999987396748224455 +1.33978599999999992142818427965 -0.0530180000000000026250113194237 0.44962499999999999689137553105 +1.34099400000000001931255155796 0.0903319999999999956319385319148 0.439970000000000027728930263038 +1.34254099999999998438227066799 0.0185929999999999984172660560944 0.444114999999999982005505216875 +1.34279700000000001836042429204 0.407042999999999988158805308558 -0.17667299999999999671196349027 +1.34391199999999999548094820057 -0.128697000000000005837108574269 -0.42111500000000001708855279503 +1.34440599999999998992450400692 -0.437707999999999985973886396096 -0.0313729999999999981108445012978 +1.34540499999999996205701791041 0.0484940000000000023816504324259 -0.433049000000000017251977624255 +1.3455950000000000965627577898 -0.2977989999999999803925732067 -0.317319999999999990958343687453 +1.34561200000000003029754225281 -0.375842000000000009407585821464 -0.219248999999999999444000309268 +1.34568299999999996252597611601 0.396955000000000002291500322826 0.177666999999999991599608506476 +1.34576099999999998502175913018 -0.20997299999999999298161412753 0.380576999999999998625099806304 +1.3461380000000000567439428778 -0.408922000000000007702283255639 0.143867999999999995885957559949 +1.3473170000000000978701564236 -0.0401810000000000014375167722847 -0.427925999999999973066877601013 +1.3479309999999999902797753748 -0.424151999999999973489650528791 0.056358999999999999375166481741 +1.34796099999999996477129116101 -0.299713000000000007183587058535 0.305244999999999988560261954262 +1.34952500000000008562039965909 0.236489000000000004764189043271 0.350507999999999986240339922006 +1.35004400000000002179945113312 0.229935000000000000497379915032 -0.352862999999999982225773464961 +1.35148299999999998988187144278 0.320411000000000001364242052659 -0.266141999999999989690024904121 +1.35152699999999992286348060588 0.406920999999999977170261900028 -0.0882600000000000051159076974727 +1.3529729999999999812132500665 0.401866999999999974235720401339 0.0892600000000000060040861171728 +1.35314500000000004220623850415 0.315267999999999992688515249029 0.263824999999999976196818352037 +1.35492300000000009951861557056 0.405193999999999998617994378947 0.000501000000000000034715286201248 +1.35756300000000007521805400756 -0.136387000000000008226308523263 0.372047999999999989828580737594 +1.35947499999999998898658759572 -0.366615999999999997438493437585 -0.131979999999999986215470926254 +1.35954599999999992121502145892 -0.21081800000000000538946665074 -0.327402000000000026336266500948 +1.3600810000000000954401002673 0.162235999999999991327825910048 0.351934999999999997832844655932 +1.36104599999999997805844031973 -0.315695999999999976637354848208 0.218836000000000002740918603195 +1.36252200000000001089972556656 0.142165999999999986824761322168 -0.351175999999999988165910735916 +1.36465400000000003366551482031 -0.290565999999999990954790973774 -0.230846999999999996644461930373 +1.36478000000000010416556506243 -0.224391000000000007119638212316 0.294999999999999984456877655248 +1.36491699999999993586641267029 -0.0620800000000000032351898937577 0.364893999999999996131094803786 +1.36528699999999991732124726695 0.322738999999999998102850895521 -0.178409000000000012020606732221 +1.36617799999999989246646237007 0.0875269999999999936957095769685 0.354818000000000022264856625043 +1.36640000000000005897504706809 0.319298999999999999488409230253 0.17606800000000000228084218179 +1.36779199999999989678656220349 0.0126569999999999998480104679288 0.359142999999999990023979989928 +1.36797300000000010555822882452 -0.355945000000000011386447340556 -0.0441910000000000011133316490941 +1.36823800000000006527045570692 -0.122983999999999996100008559097 -0.335857999999999989881871442776 +1.36868600000000006922107331775 0.238980999999999998983923887863 0.263790999999999997704946963495 +1.36875999999999997669419826707 -0.330434000000000005492495347426 0.131563999999999986512122518434 +1.36907700000000009943335044227 0.234042000000000000037303493627 -0.26618000000000002769340312625 +1.36972899999999997433519638435 0.0538570000000000020934365352332 -0.347768999999999994798827174236 +1.37107200000000006845368716313 -0.343868000000000006988187806201 0.0437729999999999994098054401093 +1.37163699999999999512567683269 -0.034641999999999999182431764666 -0.342656000000000016125767388075 +1.37370400000000003615241439547 0.32379400000000002624034323162 -0.0899719999999999964224173254479 +1.37426099999999995482369286037 0.322070000000000022932766796657 0.0876170000000000004369837824925 +1.37669899999999989503862707352 0.323570000000000024265034426207 -0.00118000000000000005925815393937 +1.37702900000000005853451057192 -0.148018000000000010674128247956 0.286148000000000013454126701617 +1.37832799999999999762678726256 -0.282185000000000019149126728735 -0.143463000000000007183587058535 +1.37841300000000011038991942769 -0.237922999999999995601740465645 0.208257999999999998674837797807 +1.37852299999999994284394233546 -0.204100000000000003641531520771 -0.240868999999999999772626324557 +1.37964200000000003498712430883 0.161916000000000004366285111246 0.265272999999999981035614382563 +1.38148099999999995901589500136 0.146793000000000006810552122261 -0.26450299999999998812327817177 +1.38244600000000006367883997882 0.24052999999999999380939641469 0.176033999999999996033395177619 +1.38270699999999990836840879638 0.237226999999999993429256051058 -0.178446999999999994512833723093 +1.38466099999999991965182744025 -0.0708960000000000006847855615888 0.278722000000000025288215965702 +1.3859710000000000640341113467 0.084376999999999993673505116476 0.268264000000000002454925152051 +1.38656299999999998995292571635 -0.272691999999999989956478430031 -0.0555140000000000008451017663447 +1.38660600000000000520117282576 -0.250516999999999989690024904121 0.120694999999999996731503415504 +1.38716299999999992387245129066 -0.116786000000000000920152842809 -0.249275999999999997580601984737 +1.38764599999999993507060480624 0.0066709999999999998465671779968 0.272753000000000023206325749925 +1.38864600000000004698108568846 0.0590069999999999969531039312187 -0.261116000000000014757972621737 +1.38932600000000006090772330936 -0.26212099999999999289101992872 0.032655000000000003468336728929 +1.39054199999999994474819686729 -0.0289680000000000006932232565759 -0.256033999999999983820941906743 +1.39075100000000007050005024212 0.241129000000000009995559935305 0.0875819999999999931894478777394 +1.39088100000000003397815362405 0.239473999999999992427390793637 -0.0900090000000000056701310313656 +1.39106100000000010297185326635 -0.15906500000000001193711796077 0.199117999999999989446664017123 +1.39205899999999993532640019112 -0.196576000000000000733635374672 -0.153385999999999994569677141953 +1.39356600000000008243716820289 0.240775999999999990031085417286 -0.0012160000000000000669464483849 +1.39375899999999997014299424336 0.160956999999999988970600384164 0.177563999999999999612754209011 +1.3949879999999998947401991245 0.150842000000000003856470698338 -0.176784999999999997699617892977 +1.39894199999999990779997460777 -0.0794320000000000026041391265608 0.191451000000000010059508781524 +1.39960299999999993048049873323 -0.169483999999999995766941651709 0.111301999999999998158806135962 +1.40010300000000009745804163686 -0.188276999999999999912958514869 -0.0652979999999999949356066508699 +1.40029300000000000991917659121 0.0808949999999999946886930501933 0.180653000000000008018474773053 +1.40061400000000002563638190622 -0.110126000000000001666222715357 -0.161709999999999992637000900686 +1.40202300000000001922728642967 0.000658999999999999972084829824581 0.185288000000000008249401162175 +1.4020820000000000504769559484 0.0639259999999999967146280255292 -0.173432000000000002826183731486 +1.40237499999999992716936958459 0.159362000000000003652189661807 0.0891539999999999971391773101459 +1.40261999999999997790212091786 -0.179234000000000004426681243785 0.0230470000000000015127898933542 +1.40299100000000009913492249325 0.154293999999999986716403554965 -0.0883710000000000051034731995969 +1.40396000000000009677592061053 -0.0231780000000000006854516954036 -0.168399999999999994138022429979 +1.40545600000000003859668140649 0.157137999999999999900524016994 0.000391999999999999987343457519273 +1.40770100000000009110578957916 -0.0876559999999999978070874817604 0.103424000000000002041922186891 +1.40853899999999998549071733578 -0.103034000000000000585309578582 -0.073506000000000001892708212381 +1.40908999999999995367261362844 0.0770919999999999938644634767115 0.0923279999999999934079397689857 +1.40998599999999996157384885009 0.0685899999999999981925569159102 -0.0850650000000000017230661342182 +1.41086700000000009325162864116 -0.00535599999999999965005770263815 0.0970909999999999967501551623172 +1.4109030000000000182325265996 -0.0955330000000000068016703380636 0.0149890000000000005869749131193 +1.41183700000000000862598881213 -0.0172980000000000008752998326145 -0.0801029999999999936521888344032 +1.41232399999999991280219546752 0.0729849999999999943245398981162 0.00363899999999999987365661979766 +1.41414200000000001011812855722 -0.0113489999999999997132293927393 0.00851099999999999946853623811194 +3 1569 1758 1764 +3 1764 1758 1938 +3 1764 1938 1947 +3 1947 1938 2103 +3 1947 2103 2115 +3 2115 2103 2262 +3 2115 2262 2282 +3 2282 2262 2425 +3 2282 2425 2440 +3 2440 2425 2586 +3 2440 2586 2602 +3 2602 2586 2746 +3 2602 2746 2761 +3 2761 2746 2915 +3 2761 2915 2933 +3 2933 2915 3087 +3 2933 3087 3109 +3 3109 3087 3285 +3 3109 3285 3313 +3 3313 3285 3463 +3 3313 3463 3504 +3 3504 3463 3638 +3 3504 3638 3667 +3 3667 3638 3787 +3 3667 3787 3817 +3 3817 3787 3923 +3 3817 3923 3950 +3 3950 3923 4045 +3 3950 4045 4068 +3 4068 4045 4153 +3 4068 4153 4175 +3 4175 4153 4249 +3 4175 4249 4272 +3 4272 4249 4338 +3 4272 4338 4364 +3 4364 4338 4422 +3 4364 4422 4445 +3 4445 4422 4494 +3 4445 4494 4517 +3 4517 4494 4555 +3 4517 4555 4586 +3 4586 4555 4612 +3 4586 4612 4643 +3 4643 4612 4665 +3 4643 4665 4694 +3 4694 4665 4706 +3 4694 4706 4736 +3 4736 4706 4747 +3 4736 4747 4771 +3 4771 4747 4776 +3 4771 4776 4802 +3 4802 4776 4800 +3 4802 4800 4828 +3 4828 4800 4814 +3 4828 4814 4842 +3 4842 4814 4829 +3 4842 4829 4854 +3 4854 4829 4832 +3 4854 4832 4856 +3 4856 4832 4830 +3 4856 4830 4855 +3 4855 4830 4820 +3 4855 4820 4844 +3 4844 4820 4804 +3 4844 4804 4831 +3 4831 4804 4782 +3 4831 4782 4805 +3 4805 4782 4755 +3 4805 4755 4778 +3 4778 4755 4720 +3 4778 4720 4742 +3 4742 4720 4674 +3 4742 4674 4699 +3 4699 4674 4629 +3 4699 4629 4646 +3 4646 4629 4572 +3 4646 4572 4591 +3 4591 4572 4508 +3 4591 4508 4527 +3 4527 4508 4434 +3 4527 4434 4452 +3 4452 4434 4359 +3 4452 4359 4373 +3 4373 4359 4269 +3 4373 4269 4283 +3 4283 4269 4172 +3 4283 4172 4185 +3 4185 4172 4069 +3 4185 4069 4078 +3 4078 4069 3953 +3 4078 3953 3962 +3 3962 3953 3829 +3 3962 3829 3835 +3 3835 3829 3681 +3 3835 3681 3687 +3 3522 3525 3687 +3 3522 3687 3681 +3 3525 3522 3332 +3 3522 3518 3332 +3 3681 3672 3518 +3 3681 3518 3522 +3 3829 3813 3672 +3 3829 3672 3681 +3 3953 3941 3813 +3 3953 3813 3829 +3 4069 4056 3941 +3 4069 3941 3953 +3 4172 4162 4056 +3 4172 4056 4069 +3 4269 4254 4162 +3 4269 4162 4172 +3 4359 4341 4254 +3 4359 4254 4269 +3 4434 4421 4341 +3 4434 4341 4359 +3 4508 4491 4421 +3 4508 4421 4434 +3 4572 4550 4491 +3 4572 4491 4508 +3 4629 4600 4550 +3 4629 4550 4572 +3 4674 4651 4600 +3 4674 4600 4629 +3 4720 4690 4651 +3 4720 4651 4674 +3 4755 4723 4690 +3 4755 4690 4720 +3 4782 4752 4723 +3 4782 4723 4755 +3 4804 4773 4752 +3 4804 4752 4782 +3 4820 4789 4773 +3 4820 4773 4804 +3 4830 4798 4789 +3 4830 4789 4820 +3 4832 4799 4798 +3 4832 4798 4830 +3 4829 4793 4799 +3 4829 4799 4832 +3 4814 4783 4793 +3 4814 4793 4829 +3 4800 4763 4783 +3 4800 4783 4814 +3 4776 4741 4763 +3 4776 4763 4800 +3 4747 4710 4741 +3 4747 4741 4776 +3 4706 4672 4710 +3 4706 4710 4747 +3 4665 4630 4672 +3 4665 4672 4706 +3 4612 4577 4630 +3 4612 4630 4665 +3 4555 4516 4577 +3 4555 4577 4612 +3 4494 4451 4516 +3 4494 4516 4555 +3 4422 4378 4451 +3 4422 4451 4494 +3 4338 4299 4378 +3 4338 4378 4422 +3 4249 4213 4299 +3 4249 4299 4338 +3 4153 4116 4213 +3 4153 4213 4249 +3 4045 4010 4116 +3 4045 4116 4153 +3 3923 3886 4010 +3 3923 4010 4045 +3 3787 3752 3886 +3 3787 3886 3923 +3 3638 3604 3752 +3 3638 3752 3787 +3 3463 3427 3604 +3 3463 3604 3638 +3 3285 3245 3427 +3 3285 3427 3463 +3 3087 3056 3245 +3 3087 3245 3285 +3 2915 2890 3056 +3 2915 3056 3087 +3 2746 2725 2890 +3 2746 2890 2915 +3 2586 2565 2725 +3 2586 2725 2746 +3 2425 2407 2565 +3 2425 2565 2586 +3 2262 2248 2407 +3 2262 2407 2425 +3 2103 2090 2248 +3 2103 2248 2262 +3 1938 1928 2090 +3 1938 2090 2103 +3 1758 1753 1928 +3 1758 1928 1938 +3 1569 1753 1758 +3 1569 1749 1753 +3 1753 1749 1917 +3 1753 1917 1928 +3 1928 1917 2077 +3 1928 2077 2090 +3 2090 2077 2236 +3 2090 2236 2248 +3 2248 2236 2391 +3 2248 2391 2407 +3 2407 2391 2546 +3 2407 2546 2565 +3 2565 2546 2704 +3 2565 2704 2725 +3 2725 2704 2858 +3 2725 2858 2890 +3 2890 2858 3030 +3 2890 3030 3056 +3 3056 3030 3205 +3 3056 3205 3245 +3 3245 3205 3380 +3 3245 3380 3427 +3 3427 3380 3556 +3 3427 3556 3604 +3 3604 3556 3712 +3 3604 3712 3752 +3 3752 3712 3839 +3 3752 3839 3886 +3 3886 3839 3957 +3 3886 3957 4010 +3 4010 3957 4065 +3 4010 4065 4116 +3 4116 4065 4165 +3 4116 4165 4213 +3 4213 4165 4256 +3 4213 4256 4299 +3 4299 4256 4340 +3 4299 4340 4378 +3 4378 4340 4414 +3 4378 4414 4451 +3 4451 4414 4473 +3 4451 4473 4516 +3 4516 4473 4533 +3 4516 4533 4577 +3 4577 4533 4587 +3 4577 4587 4630 +3 4630 4587 4631 +3 4630 4631 4672 +3 4672 4631 4669 +3 4672 4669 4710 +3 4710 4669 4702 +3 4710 4702 4741 +3 4741 4702 4722 +3 4741 4722 4763 +3 4763 4722 4745 +3 4763 4745 4783 +3 4783 4745 4757 +3 4783 4757 4793 +3 4793 4757 4761 +3 4793 4761 4799 +3 4799 4761 4760 +3 4799 4760 4798 +3 4798 4760 4751 +3 4798 4751 4789 +3 4789 4751 4738 +3 4789 4738 4773 +3 4773 4738 4719 +3 4773 4719 4752 +3 4752 4719 4691 +3 4752 4691 4723 +3 4723 4691 4657 +3 4723 4657 4690 +3 4690 4657 4620 +3 4690 4620 4651 +3 4651 4620 4575 +3 4651 4575 4600 +3 4600 4575 4518 +3 4600 4518 4550 +3 4550 4518 4458 +3 4550 4458 4491 +3 4491 4458 4391 +3 4491 4391 4421 +3 4421 4391 4321 +3 4421 4321 4341 +3 4341 4321 4238 +3 4341 4238 4254 +3 4254 4238 4147 +3 4254 4147 4162 +3 4162 4147 4043 +3 4162 4043 4056 +3 4056 4043 3929 +3 4056 3929 3941 +3 3941 3929 3804 +3 3941 3804 3813 +3 3813 3804 3659 +3 3813 3659 3672 +3 3672 3659 3514 +3 3672 3514 3518 +3 3518 3514 3332 +3 3514 3506 3332 +3 3659 3652 3506 +3 3659 3506 3514 +3 3804 3790 3652 +3 3804 3652 3659 +3 3929 3914 3790 +3 3929 3790 3804 +3 4043 4023 3914 +3 4043 3914 3929 +3 4147 4124 4023 +3 4147 4023 4043 +3 4238 4211 4124 +3 4238 4124 4147 +3 4321 4288 4211 +3 4321 4211 4238 +3 4391 4362 4288 +3 4391 4288 4321 +3 4458 4429 4362 +3 4458 4362 4391 +3 4518 4492 4429 +3 4518 4429 4458 +3 4575 4538 4492 +3 4575 4492 4518 +3 4620 4585 4538 +3 4620 4538 4575 +3 4657 4623 4585 +3 4657 4585 4620 +3 4691 4653 4623 +3 4691 4623 4657 +3 4719 4677 4653 +3 4719 4653 4691 +3 4738 4698 4677 +3 4738 4677 4719 +3 4751 4708 4698 +3 4751 4698 4738 +3 4760 4716 4708 +3 4760 4708 4751 +3 4761 4715 4716 +3 4761 4716 4760 +3 4757 4707 4715 +3 4757 4715 4761 +3 4745 4696 4707 +3 4745 4707 4757 +3 4722 4675 4696 +3 4722 4696 4745 +3 4702 4652 4675 +3 4702 4675 4722 +3 4669 4618 4652 +3 4669 4652 4702 +3 4631 4583 4618 +3 4631 4618 4669 +3 4587 4534 4583 +3 4587 4583 4631 +3 4533 4488 4534 +3 4533 4534 4587 +3 4473 4427 4488 +3 4473 4488 4533 +3 4414 4358 4427 +3 4414 4427 4473 +3 4340 4281 4358 +3 4340 4358 4414 +3 4256 4199 4281 +3 4256 4281 4340 +3 4165 4119 4199 +3 4165 4199 4256 +3 4065 4018 4119 +3 4065 4119 4165 +3 3957 3904 4018 +3 3957 4018 4065 +3 3839 3783 3904 +3 3839 3904 3957 +3 3712 3645 3783 +3 3712 3783 3839 +3 3556 3491 3645 +3 3556 3645 3712 +3 3380 3321 3491 +3 3380 3491 3556 +3 3205 3147 3321 +3 3205 3321 3380 +3 3030 2985 3147 +3 3030 3147 3205 +3 2858 2828 2985 +3 2858 2985 3030 +3 2704 2670 2828 +3 2704 2828 2858 +3 2546 2521 2670 +3 2546 2670 2704 +3 2391 2367 2521 +3 2391 2521 2546 +3 2236 2222 2367 +3 2236 2367 2391 +3 2077 2066 2222 +3 2077 2222 2236 +3 1917 1906 2066 +3 1917 2066 2077 +3 1749 1741 1906 +3 1749 1906 1917 +3 1569 1741 1749 +3 1569 1735 1741 +3 1741 1735 1898 +3 1741 1898 1906 +3 1906 1898 2052 +3 1906 2052 2066 +3 2066 2052 2201 +3 2066 2201 2222 +3 2222 2201 2354 +3 2222 2354 2367 +3 2367 2354 2497 +3 2367 2497 2521 +3 2521 2497 2643 +3 2521 2643 2670 +3 2670 2643 2781 +3 2670 2781 2828 +3 2828 2781 2924 +3 2828 2924 2985 +3 2985 2924 3083 +3 2985 3083 3147 +3 3147 3083 3264 +3 3147 3264 3321 +3 3321 3264 3425 +3 3321 3425 3491 +3 3491 3425 3589 +3 3491 3589 3645 +3 3645 3589 3730 +3 3645 3730 3783 +3 3783 3730 3851 +3 3783 3851 3904 +3 3904 3851 3952 +3 3904 3952 4018 +3 4018 3952 4053 +3 4018 4053 4119 +3 4119 4053 4148 +3 4119 4148 4199 +3 4199 4148 4229 +3 4199 4229 4281 +3 4281 4229 4302 +3 4281 4302 4358 +3 4358 4302 4365 +3 4358 4365 4427 +3 4427 4365 4428 +3 4427 4428 4488 +3 4488 4428 4479 +3 4488 4479 4534 +3 4534 4479 4524 +3 4534 4524 4583 +3 4583 4524 4561 +3 4583 4561 4618 +3 4618 4561 4596 +3 4618 4596 4652 +3 4652 4596 4625 +3 4652 4625 4675 +3 4675 4625 4642 +3 4675 4642 4696 +3 4696 4642 4656 +3 4696 4656 4707 +3 4707 4656 4664 +3 4707 4664 4715 +3 4715 4664 4667 +3 4715 4667 4716 +3 4716 4667 4660 +3 4716 4660 4708 +3 4708 4660 4649 +3 4708 4649 4698 +3 4698 4649 4633 +3 4698 4633 4677 +3 4677 4633 4608 +3 4677 4608 4653 +3 4653 4608 4578 +3 4653 4578 4623 +3 4623 4578 4542 +3 4623 4542 4585 +3 4585 4542 4501 +3 4585 4501 4538 +3 4538 4501 4447 +3 4538 4447 4492 +3 4492 4447 4393 +3 4492 4393 4429 +3 4429 4393 4333 +3 4429 4333 4362 +3 4362 4333 4258 +3 4362 4258 4288 +3 4288 4258 4177 +3 4288 4177 4211 +3 4211 4177 4093 +3 4211 4093 4124 +3 4124 4093 4003 +3 4124 4003 4023 +3 4023 4003 3896 +3 4023 3896 3914 +3 3914 3896 3775 +3 3914 3775 3790 +3 3790 3775 3643 +3 3790 3643 3652 +3 3652 3643 3497 +3 3652 3497 3506 +3 3506 3497 3332 +3 3497 3488 3332 +3 3643 3636 3488 +3 3643 3488 3497 +3 3775 3757 3636 +3 3775 3636 3643 +3 3896 3876 3757 +3 3896 3757 3775 +3 4003 3973 3876 +3 4003 3876 3896 +3 4093 4064 3973 +3 4093 3973 4003 +3 4177 4154 4064 +3 4177 4064 4093 +3 4258 4228 4154 +3 4258 4154 4177 +3 4333 4291 4228 +3 4333 4228 4258 +3 4393 4355 4291 +3 4393 4291 4333 +3 4447 4410 4355 +3 4447 4355 4393 +3 4501 4454 4410 +3 4501 4410 4447 +3 4542 4499 4454 +3 4542 4454 4501 +3 4578 4530 4499 +3 4578 4499 4542 +3 4608 4559 4530 +3 4608 4530 4578 +3 4633 4582 4559 +3 4633 4559 4608 +3 4649 4595 4582 +3 4649 4582 4633 +3 4660 4603 4595 +3 4660 4595 4649 +3 4667 4609 4603 +3 4667 4603 4660 +3 4664 4605 4609 +3 4664 4609 4667 +3 4656 4597 4605 +3 4656 4605 4664 +3 4642 4584 4597 +3 4642 4597 4656 +3 4625 4560 4584 +3 4625 4584 4642 +3 4596 4532 4560 +3 4596 4560 4625 +3 4561 4502 4532 +3 4561 4532 4596 +3 4524 4459 4502 +3 4524 4502 4561 +3 4479 4418 4459 +3 4479 4459 4524 +3 4428 4360 4418 +3 4428 4418 4479 +3 4365 4303 4360 +3 4365 4360 4428 +3 4302 4239 4303 +3 4302 4303 4365 +3 4229 4160 4239 +3 4229 4239 4302 +3 4148 4074 4160 +3 4148 4160 4229 +3 4053 3988 4074 +3 4053 4074 4148 +3 3952 3887 3988 +3 3952 3988 4053 +3 3851 3774 3887 +3 3851 3887 3952 +3 3730 3647 3774 +3 3730 3774 3851 +3 3589 3513 3647 +3 3589 3647 3730 +3 3425 3352 3513 +3 3425 3513 3589 +3 3264 3195 3352 +3 3264 3352 3425 +3 3083 3035 3195 +3 3083 3195 3264 +3 2924 2884 3035 +3 2924 3035 3083 +3 2781 2736 2884 +3 2781 2884 2924 +3 2643 2596 2736 +3 2643 2736 2781 +3 2497 2460 2596 +3 2497 2596 2643 +3 2354 2324 2460 +3 2354 2460 2497 +3 2201 2182 2324 +3 2201 2324 2354 +3 2052 2039 2182 +3 2052 2182 2201 +3 1898 1886 2039 +3 1898 2039 2052 +3 1735 1727 1886 +3 1735 1886 1898 +3 1569 1727 1735 +3 1569 1717 1727 +3 1727 1717 1870 +3 1727 1870 1886 +3 1886 1870 2015 +3 1886 2015 2039 +3 2039 2015 2160 +3 2039 2160 2182 +3 2182 2160 2295 +3 2182 2295 2324 +3 2324 2295 2419 +3 2324 2419 2460 +3 2460 2419 2552 +3 2460 2552 2596 +3 2596 2552 2694 +3 2596 2694 2736 +3 2736 2694 2831 +3 2736 2831 2884 +3 2884 2831 2968 +3 2884 2968 3035 +3 3035 2968 3106 +3 3035 3106 3195 +3 3195 3106 3273 +3 3195 3273 3352 +3 3352 3273 3421 +3 3352 3421 3513 +3 3513 3421 3569 +3 3513 3569 3647 +3 3647 3569 3698 +3 3647 3698 3774 +3 3774 3698 3807 +3 3774 3807 3887 +3 3887 3807 3911 +3 3887 3911 3988 +3 3988 3911 4007 +3 3988 4007 4074 +3 4074 4007 4080 +3 4074 4080 4160 +3 4160 4080 4159 +3 4160 4159 4239 +3 4239 4159 4232 +3 4239 4232 4303 +3 4303 4232 4285 +3 4303 4285 4360 +3 4360 4285 4343 +3 4360 4343 4418 +3 4418 4343 4388 +3 4418 4388 4459 +3 4459 4388 4431 +3 4459 4431 4502 +3 4502 4431 4464 +3 4502 4464 4532 +3 4532 4464 4495 +3 4532 4495 4560 +3 4560 4495 4512 +3 4560 4512 4584 +3 4584 4512 4531 +3 4584 4531 4597 +3 4597 4531 4541 +3 4597 4541 4605 +3 4605 4541 4547 +3 4605 4547 4609 +3 4609 4547 4546 +3 4609 4546 4603 +3 4603 4546 4535 +3 4603 4535 4595 +3 4595 4535 4523 +3 4595 4523 4582 +3 4582 4523 4503 +3 4582 4503 4559 +3 4559 4503 4476 +3 4559 4476 4530 +3 4530 4476 4444 +3 4530 4444 4499 +3 4499 4444 4408 +3 4499 4408 4454 +3 4454 4408 4361 +3 4454 4361 4410 +3 4410 4361 4314 +3 4410 4314 4355 +3 4355 4314 4253 +3 4355 4253 4291 +3 4291 4253 4184 +3 4291 4184 4228 +3 4228 4184 4121 +3 4228 4121 4154 +3 4154 4121 4037 +3 4154 4037 4064 +3 4064 4037 3946 +3 4064 3946 3973 +3 3973 3946 3857 +3 3973 3857 3876 +3 3876 3857 3748 +3 3876 3748 3757 +3 3757 3748 3624 +3 3757 3624 3636 +3 3636 3624 3480 +3 3636 3480 3488 +3 3488 3480 3332 +3 3480 3471 3332 +3 3624 3610 3471 +3 3624 3471 3480 +3 3748 3731 3610 +3 3748 3610 3624 +3 3857 3826 3731 +3 3857 3731 3748 +3 3946 3920 3826 +3 3946 3826 3857 +3 4037 4008 3920 +3 4037 3920 3946 +3 4121 4076 4008 +3 4121 4008 4037 +3 4184 4152 4076 +3 4184 4076 4121 +3 4253 4209 4152 +3 4253 4152 4184 +3 4314 4261 4209 +3 4314 4209 4253 +3 4361 4315 4261 +3 4361 4261 4314 +3 4408 4349 4315 +3 4408 4315 4361 +3 4444 4385 4349 +3 4444 4349 4408 +3 4476 4423 4385 +3 4476 4385 4444 +3 4503 4439 4423 +3 4503 4423 4476 +3 4523 4457 4439 +3 4523 4439 4503 +3 4535 4470 4457 +3 4535 4457 4523 +3 4546 4475 4470 +3 4546 4470 4535 +3 4547 4474 4475 +3 4547 4475 4546 +3 4541 4469 4474 +3 4541 4474 4547 +3 4531 4456 4469 +3 4531 4469 4541 +3 4512 4438 4456 +3 4512 4456 4531 +3 4495 4420 4438 +3 4495 4438 4512 +3 4464 4384 4420 +3 4464 4420 4495 +3 4431 4348 4384 +3 4431 4384 4464 +3 4388 4312 4348 +3 4388 4348 4431 +3 4343 4260 4312 +3 4343 4312 4388 +3 4285 4206 4260 +3 4285 4260 4343 +3 4232 4150 4206 +3 4232 4206 4285 +3 4159 4073 4150 +3 4159 4150 4232 +3 4080 4004 4073 +3 4080 4073 4159 +3 4007 3918 4004 +3 4007 4004 4080 +3 3911 3822 3918 +3 3911 3918 4007 +3 3807 3725 3822 +3 3807 3822 3911 +3 3698 3608 3725 +3 3698 3725 3807 +3 3569 3466 3608 +3 3569 3608 3698 +3 3421 3327 3466 +3 3421 3466 3569 +3 3273 3188 3327 +3 3273 3327 3421 +3 3106 3037 3188 +3 3106 3188 3273 +3 2968 2896 3037 +3 2968 3037 3106 +3 2831 2760 2896 +3 2831 2896 2968 +3 2694 2647 2760 +3 2694 2760 2831 +3 2552 2512 2647 +3 2552 2647 2694 +3 2419 2384 2512 +3 2419 2512 2552 +3 2295 2250 2384 +3 2295 2384 2419 +3 2160 2135 2250 +3 2160 2250 2295 +3 2015 2001 2135 +3 2015 2135 2160 +3 1870 1861 2001 +3 1870 2001 2015 +3 1717 1708 1861 +3 1717 1861 1870 +3 1569 1708 1717 +3 1569 1704 1708 +3 1708 1704 1847 +3 1708 1847 1861 +3 1861 1847 1981 +3 1861 1981 2001 +3 2001 1981 2093 +3 2001 2093 2135 +3 2135 2093 2223 +3 2135 2223 2250 +3 2250 2223 2348 +3 2250 2348 2384 +3 2384 2348 2468 +3 2384 2468 2512 +3 2512 2468 2581 +3 2512 2581 2647 +3 2647 2581 2709 +3 2647 2709 2760 +3 2760 2709 2834 +3 2760 2834 2896 +3 2896 2834 2955 +3 2896 2955 3037 +3 3037 2955 3082 +3 3037 3082 3188 +3 3188 3082 3234 +3 3188 3234 3327 +3 3327 3234 3368 +3 3327 3368 3466 +3 3466 3368 3498 +3 3466 3498 3608 +3 3608 3498 3618 +3 3608 3618 3725 +3 3725 3618 3733 +3 3725 3733 3822 +3 3822 3733 3818 +3 3822 3818 3918 +3 3918 3818 3905 +3 3918 3905 4004 +3 4004 3905 3984 +3 4004 3984 4073 +3 4073 3984 4052 +3 4073 4052 4150 +3 4150 4052 4120 +3 4150 4120 4206 +3 4206 4120 4169 +3 4206 4169 4260 +3 4260 4169 4225 +3 4260 4225 4312 +3 4312 4225 4263 +3 4312 4263 4348 +3 4348 4263 4304 +3 4348 4304 4384 +3 4384 4304 4334 +3 4384 4334 4420 +3 4420 4334 4356 +3 4420 4356 4438 +3 4438 4356 4376 +3 4438 4376 4456 +3 4456 4376 4389 +3 4456 4389 4469 +3 4469 4389 4400 +3 4469 4400 4474 +3 4474 4400 4405 +3 4474 4405 4475 +3 4475 4405 4399 +3 4475 4399 4470 +3 4470 4399 4386 +3 4470 4386 4457 +3 4457 4386 4372 +3 4457 4372 4439 +3 4439 4372 4350 +3 4439 4350 4423 +3 4423 4350 4329 +3 4423 4329 4385 +3 4385 4329 4290 +3 4385 4290 4349 +3 4349 4290 4255 +3 4349 4255 4315 +3 4315 4255 4215 +3 4315 4215 4261 +3 4261 4215 4158 +3 4261 4158 4209 +3 4209 4158 4103 +3 4209 4103 4152 +3 4152 4103 4040 +3 4152 4040 4076 +3 4076 4040 3964 +3 4076 3964 4008 +3 4008 3964 3889 +3 4008 3889 3920 +3 3920 3889 3797 +3 3920 3797 3826 +3 3826 3797 3708 +3 3826 3708 3731 +3 3731 3708 3598 +3 3731 3598 3610 +3 3610 3598 3462 +3 3610 3462 3471 +3 3471 3462 3332 +3 3462 3452 3332 +3 3598 3580 3452 +3 3598 3452 3462 +3 3708 3674 3580 +3 3708 3580 3598 +3 3797 3766 3674 +3 3797 3674 3708 +3 3889 3858 3766 +3 3889 3766 3797 +3 3964 3925 3858 +3 3964 3858 3889 +3 4040 3996 3925 +3 4040 3925 3964 +3 4103 4050 3996 +3 4103 3996 4040 +3 4158 4109 4050 +3 4158 4050 4103 +3 4215 4156 4109 +3 4215 4109 4158 +3 4255 4187 4156 +3 4255 4156 4215 +3 4290 4235 4187 +3 4290 4187 4255 +3 4329 4257 4235 +3 4329 4235 4290 +3 4350 4277 4257 +3 4350 4257 4329 +3 4372 4301 4277 +3 4372 4277 4350 +3 4386 4318 4301 +3 4386 4301 4372 +3 4399 4322 4318 +3 4399 4318 4386 +3 4405 4323 4322 +3 4405 4322 4399 +3 4400 4319 4323 +3 4400 4323 4405 +3 4389 4306 4319 +3 4389 4319 4400 +3 4376 4286 4306 +3 4376 4306 4389 +3 4356 4266 4286 +3 4356 4286 4376 +3 4334 4246 4266 +3 4334 4266 4356 +3 4304 4208 4246 +3 4304 4246 4334 +3 4263 4167 4208 +3 4263 4208 4304 +3 4225 4129 4167 +3 4225 4167 4263 +3 4169 4070 4129 +3 4169 4129 4225 +3 4120 4020 4070 +3 4120 4070 4169 +3 4052 3948 4020 +3 4052 4020 4120 +3 3984 3883 3948 +3 3984 3948 4052 +3 3905 3799 3883 +3 3905 3883 3984 +3 3818 3718 3799 +3 3818 3799 3905 +3 3733 3614 3718 +3 3733 3718 3818 +3 3618 3503 3614 +3 3618 3614 3733 +3 3498 3381 3503 +3 3498 3503 3618 +3 3368 3255 3381 +3 3368 3381 3498 +3 3234 3110 3255 +3 3234 3255 3368 +3 3082 2999 3110 +3 3082 3110 3234 +3 2955 2877 2999 +3 2955 2999 3082 +3 2834 2752 2877 +3 2834 2877 2955 +3 2709 2650 2752 +3 2709 2752 2834 +3 2581 2532 2650 +3 2581 2650 2709 +3 2468 2410 2532 +3 2468 2532 2581 +3 2348 2303 2410 +3 2348 2410 2468 +3 2223 2187 2303 +3 2223 2303 2348 +3 2093 2064 2187 +3 2093 2187 2223 +3 1981 1955 2064 +3 1981 2064 2093 +3 1847 1829 1955 +3 1847 1955 1981 +3 1704 1691 1829 +3 1704 1829 1847 +3 1569 1691 1704 +3 1569 1683 1691 +3 1691 1683 1815 +3 1691 1815 1829 +3 1829 1815 1920 +3 1829 1920 1955 +3 1955 1920 2038 +3 1955 2038 2064 +3 2064 2038 2151 +3 2064 2151 2187 +3 2187 2151 2247 +3 2187 2247 2303 +3 2303 2247 2360 +3 2303 2360 2410 +3 2410 2360 2474 +3 2410 2474 2532 +3 2532 2474 2570 +3 2532 2570 2650 +3 2650 2570 2684 +3 2650 2684 2752 +3 2752 2684 2795 +3 2752 2795 2877 +3 2877 2795 2899 +3 2877 2899 2999 +3 2999 2899 3022 +3 2999 3022 3110 +3 3110 3022 3122 +3 3110 3122 3255 +3 3255 3122 3259 +3 3255 3259 3381 +3 3381 3259 3374 +3 3381 3374 3503 +3 3503 3374 3482 +3 3503 3482 3614 +3 3614 3482 3597 +3 3614 3597 3718 +3 3718 3597 3680 +3 3718 3680 3799 +3 3799 3680 3760 +3 3799 3760 3883 +3 3883 3760 3840 +3 3883 3840 3948 +3 3948 3840 3903 +3 3948 3903 4020 +3 4020 3903 3961 +3 4020 3961 4070 +3 4070 3961 4021 +3 4070 4021 4129 +3 4129 4021 4063 +3 4129 4063 4167 +3 4167 4063 4104 +3 4167 4104 4208 +3 4208 4104 4144 +3 4208 4144 4246 +3 4246 4144 4166 +3 4246 4166 4266 +3 4266 4166 4186 +3 4266 4186 4286 +3 4286 4186 4217 +3 4286 4217 4306 +3 4306 4217 4226 +3 4306 4226 4319 +3 4319 4226 4236 +3 4319 4236 4323 +3 4323 4236 4237 +3 4323 4237 4322 +3 4322 4237 4233 +3 4322 4233 4318 +3 4318 4233 4224 +3 4318 4224 4301 +3 4301 4224 4204 +3 4301 4204 4277 +3 4277 4204 4181 +3 4277 4181 4257 +3 4257 4181 4161 +3 4257 4161 4235 +3 4235 4161 4131 +3 4235 4131 4187 +3 4187 4131 4090 +3 4187 4090 4156 +3 4156 4090 4047 +3 4156 4047 4109 +3 4109 4047 4005 +3 4109 4005 4050 +3 4050 4005 3945 +3 4050 3945 3996 +3 3996 3945 3885 +3 3996 3885 3925 +3 3925 3885 3812 +3 3925 3812 3858 +3 3858 3812 3746 +3 3858 3746 3766 +3 3766 3746 3650 +3 3766 3650 3674 +3 3674 3650 3562 +3 3674 3562 3580 +3 3580 3562 3444 +3 3580 3444 3452 +3 3452 3444 3332 +3 3444 3432 3332 +3 3562 3545 3432 +3 3562 3432 3444 +3 3650 3626 3545 +3 3650 3545 3562 +3 3746 3711 3626 +3 3746 3626 3650 +3 3812 3773 3711 +3 3812 3711 3746 +3 3885 3837 3773 +3 3885 3773 3812 +3 3945 3895 3837 +3 3945 3837 3885 +3 4005 3942 3895 +3 4005 3895 3945 +3 4047 3990 3942 +3 4047 3942 4005 +3 4090 4025 3990 +3 4090 3990 4047 +3 4131 4057 4025 +3 4131 4025 4090 +3 4161 4081 4057 +3 4161 4057 4131 +3 4181 4108 4081 +3 4181 4081 4161 +3 4204 4127 4108 +3 4204 4108 4181 +3 4224 4132 4127 +3 4224 4127 4204 +3 4233 4138 4132 +3 4233 4132 4224 +3 4237 4139 4138 +3 4237 4138 4233 +3 4236 4133 4139 +3 4236 4139 4237 +3 4226 4128 4133 +3 4226 4133 4236 +3 4217 4111 4128 +3 4217 4128 4226 +3 4186 4082 4111 +3 4186 4111 4217 +3 4166 4059 4082 +3 4166 4082 4186 +3 4144 4030 4059 +3 4144 4059 4166 +3 4104 3993 4030 +3 4104 4030 4144 +3 4063 3947 3993 +3 4063 3993 4104 +3 4021 3898 3947 +3 4021 3947 4063 +3 3961 3847 3898 +3 3961 3898 4021 +3 3903 3778 3847 +3 3903 3847 3961 +3 3840 3717 3778 +3 3840 3778 3903 +3 3760 3635 3717 +3 3760 3717 3840 +3 3680 3551 3635 +3 3680 3635 3760 +3 3597 3445 3551 +3 3597 3551 3680 +3 3482 3343 3445 +3 3482 3445 3597 +3 3374 3240 3343 +3 3374 3343 3482 +3 3259 3113 3240 +3 3259 3240 3374 +3 3122 3021 3113 +3 3122 3113 3259 +3 3022 2907 3021 +3 3022 3021 3122 +3 2899 2813 2907 +3 2899 2907 3022 +3 2795 2708 2813 +3 2795 2813 2899 +3 2684 2603 2708 +3 2684 2708 2795 +3 2570 2509 2603 +3 2570 2603 2684 +3 2474 2401 2509 +3 2474 2509 2570 +3 2360 2307 2401 +3 2360 2401 2474 +3 2247 2204 2307 +3 2247 2307 2360 +3 2151 2100 2204 +3 2151 2204 2247 +3 2038 2007 2100 +3 2038 2100 2151 +3 1920 1893 2007 +3 1920 2007 2038 +3 1815 1797 1893 +3 1815 1893 1920 +3 1683 1672 1797 +3 1683 1797 1815 +3 1569 1672 1683 +3 1569 1662 1672 +3 1672 1662 1780 +3 1672 1780 1797 +3 1797 1780 1865 +3 1797 1865 1893 +3 1893 1865 1970 +3 1893 1970 2007 +3 2007 1970 2059 +3 2007 2059 2100 +3 2100 2059 2159 +3 2100 2159 2204 +3 2204 2159 2242 +3 2204 2242 2307 +3 2307 2242 2344 +3 2307 2344 2401 +3 2401 2344 2428 +3 2401 2428 2509 +3 2509 2428 2526 +3 2509 2526 2603 +3 2603 2526 2616 +3 2603 2616 2708 +3 2708 2616 2711 +3 2708 2711 2813 +3 2813 2711 2812 +3 2813 2812 2907 +3 2907 2812 2895 +3 2907 2895 3021 +3 3021 2895 3000 +3 3021 3000 3113 +3 3113 3000 3091 +3 3113 3091 3240 +3 3240 3091 3201 +3 3240 3201 3343 +3 3343 3201 3295 +3 3343 3295 3445 +3 3445 3295 3389 +3 3445 3389 3551 +3 3551 3389 3479 +3 3551 3479 3635 +3 3635 3479 3570 +3 3635 3570 3717 +3 3717 3570 3639 +3 3717 3639 3778 +3 3778 3639 3715 +3 3778 3715 3847 +3 3847 3715 3762 +3 3847 3762 3898 +3 3898 3762 3819 +3 3898 3819 3947 +3 3947 3819 3866 +3 3947 3866 3993 +3 3993 3866 3909 +3 3993 3909 4030 +3 4030 3909 3940 +3 4030 3940 4059 +3 4059 3940 3969 +3 4059 3969 4082 +3 4082 3969 3998 +3 4082 3998 4111 +3 4111 3998 4017 +3 4111 4017 4128 +3 4128 4017 4028 +3 4128 4028 4133 +3 4133 4028 4039 +3 4133 4039 4139 +3 4139 4039 4044 +3 4139 4044 4138 +3 4138 4044 4042 +3 4138 4042 4132 +3 4132 4042 4033 +3 4132 4033 4127 +3 4127 4033 4022 +3 4127 4022 4108 +3 4108 4022 4011 +3 4108 4011 4081 +3 4081 4011 3982 +3 4081 3982 4057 +3 4057 3982 3951 +3 4057 3951 4025 +3 4025 3951 3922 +3 4025 3922 3990 +3 3990 3922 3884 +3 3990 3884 3942 +3 3942 3884 3841 +3 3942 3841 3895 +3 3895 3841 3786 +3 3895 3786 3837 +3 3837 3786 3742 +3 3837 3742 3773 +3 3773 3742 3662 +3 3773 3662 3711 +3 3711 3662 3601 +3 3711 3601 3626 +3 3626 3601 3520 +3 3626 3520 3545 +3 3545 3520 3426 +3 3545 3426 3432 +3 3432 3426 3332 +3 3426 3415 3332 +3 3520 3494 3415 +3 3520 3415 3426 +3 3601 3568 3494 +3 3601 3494 3520 +3 3662 3630 3568 +3 3662 3568 3601 +3 3742 3683 3630 +3 3742 3630 3662 +3 3786 3743 3683 +3 3786 3683 3742 +3 3841 3777 3743 +3 3841 3743 3786 +3 3884 3814 3777 +3 3884 3777 3841 +3 3922 3856 3814 +3 3922 3814 3884 +3 3951 3879 3856 +3 3951 3856 3922 +3 3982 3899 3879 +3 3982 3879 3951 +3 4011 3919 3899 +3 4011 3899 3982 +3 4022 3928 3919 +3 4022 3919 4011 +3 4033 3934 3928 +3 4033 3928 4022 +3 4042 3936 3934 +3 4042 3934 4033 +3 4044 3933 3936 +3 4044 3936 4042 +3 4039 3926 3933 +3 4039 3933 4044 +3 4028 3915 3926 +3 4028 3926 4039 +3 4017 3897 3915 +3 4017 3915 4028 +3 3998 3875 3897 +3 3998 3897 4017 +3 3969 3850 3875 +3 3969 3875 3998 +3 3940 3809 3850 +3 3940 3850 3969 +3 3909 3769 3809 +3 3909 3809 3940 +3 3866 3737 3769 +3 3866 3769 3909 +3 3819 3673 3737 +3 3819 3737 3866 +3 3762 3620 3673 +3 3762 3673 3819 +3 3715 3559 3620 +3 3715 3620 3762 +3 3639 3477 3559 +3 3639 3559 3715 +3 3570 3401 3477 +3 3570 3477 3639 +3 3479 3317 3401 +3 3479 3401 3570 +3 3389 3235 3317 +3 3389 3317 3479 +3 3295 3132 3235 +3 3295 3235 3389 +3 3201 3049 3132 +3 3201 3132 3295 +3 3091 2958 3049 +3 3091 3049 3201 +3 3000 2872 2958 +3 3000 2958 3091 +3 2895 2785 2872 +3 2895 2872 3000 +3 2812 2701 2785 +3 2812 2785 2895 +3 2711 2610 2701 +3 2711 2701 2812 +3 2616 2531 2610 +3 2616 2610 2711 +3 2526 2442 2531 +3 2526 2531 2616 +3 2428 2357 2442 +3 2428 2442 2526 +3 2344 2271 2357 +3 2344 2357 2428 +3 2242 2188 2271 +3 2242 2271 2344 +3 2159 2094 2188 +3 2159 2188 2242 +3 2059 2014 2094 +3 2059 2094 2159 +3 1970 1923 2014 +3 1970 2014 2059 +3 1865 1837 1923 +3 1865 1923 1970 +3 1780 1744 1837 +3 1780 1837 1865 +3 1662 1655 1744 +3 1662 1744 1780 +3 1569 1655 1662 +3 1569 1640 1655 +3 1655 1640 1721 +3 1655 1721 1744 +3 1744 1721 1808 +3 1744 1808 1837 +3 1837 1808 1881 +3 1837 1881 1923 +3 1923 1881 1971 +3 1923 1971 2014 +3 2014 1971 2044 +3 2014 2044 2094 +3 2094 2044 2127 +3 2094 2127 2188 +3 2188 2127 2199 +3 2188 2199 2271 +3 2271 2199 2281 +3 2271 2281 2357 +3 2357 2281 2358 +3 2357 2358 2442 +3 2442 2358 2431 +3 2442 2431 2531 +3 2531 2431 2516 +3 2531 2516 2610 +3 2610 2516 2590 +3 2610 2590 2701 +3 2701 2590 2671 +3 2701 2671 2785 +3 2785 2671 2745 +3 2785 2745 2872 +3 2872 2745 2832 +3 2872 2832 2958 +3 2958 2832 2903 +3 2958 2903 3049 +3 3049 2903 2990 +3 3049 2990 3132 +3 3132 2990 3065 +3 3132 3065 3235 +3 3235 3065 3146 +3 3235 3146 3317 +3 3317 3146 3233 +3 3317 3233 3401 +3 3401 3233 3302 +3 3401 3302 3477 +3 3477 3302 3379 +3 3477 3379 3559 +3 3559 3379 3443 +3 3559 3443 3620 +3 3620 3443 3516 +3 3620 3516 3673 +3 3673 3516 3574 +3 3673 3574 3737 +3 3737 3574 3622 +3 3737 3622 3769 +3 3769 3622 3658 +3 3769 3658 3809 +3 3809 3658 3710 +3 3809 3710 3850 +3 3850 3710 3744 +3 3850 3744 3875 +3 3875 3744 3761 +3 3875 3761 3897 +3 3897 3761 3784 +3 3897 3784 3915 +3 3915 3784 3803 +3 3915 3803 3926 +3 3926 3803 3815 +3 3926 3815 3933 +3 3933 3815 3828 +3 3933 3828 3936 +3 3936 3828 3833 +3 3936 3833 3934 +3 3934 3833 3830 +3 3934 3830 3928 +3 3928 3830 3820 +3 3928 3820 3919 +3 3919 3820 3808 +3 3919 3808 3899 +3 3899 3808 3793 +3 3899 3793 3879 +3 3879 3793 3771 +3 3879 3771 3856 +3 3856 3771 3750 +3 3856 3750 3814 +3 3814 3750 3723 +3 3814 3723 3777 +3 3777 3723 3678 +3 3777 3678 3743 +3 3743 3678 3637 +3 3743 3637 3683 +3 3683 3637 3596 +3 3683 3596 3630 +3 3630 3596 3542 +3 3630 3542 3568 +3 3568 3542 3467 +3 3568 3467 3494 +3 3494 3467 3406 +3 3494 3406 3415 +3 3415 3406 3332 +3 3406 3392 3332 +3 3467 3446 3392 +3 3467 3392 3406 +3 3542 3500 3446 +3 3542 3446 3467 +3 3596 3552 3500 +3 3596 3500 3542 +3 3637 3591 3552 +3 3637 3552 3596 +3 3678 3623 3591 +3 3678 3591 3637 +3 3723 3646 3623 +3 3723 3623 3678 +3 3750 3668 3646 +3 3750 3646 3723 +3 3771 3693 3668 +3 3771 3668 3750 +3 3793 3714 3693 +3 3793 3693 3771 +3 3808 3721 3714 +3 3808 3714 3793 +3 3820 3726 3721 +3 3820 3721 3808 +3 3830 3724 3726 +3 3830 3726 3820 +3 3833 3720 3724 +3 3833 3724 3830 +3 3828 3713 3720 +3 3828 3720 3833 +3 3815 3691 3713 +3 3815 3713 3828 +3 3803 3666 3691 +3 3803 3691 3815 +3 3784 3644 3666 +3 3784 3666 3803 +3 3761 3617 3644 +3 3761 3644 3784 +3 3744 3588 3617 +3 3744 3617 3761 +3 3710 3549 3588 +3 3710 3588 3744 +3 3658 3496 3549 +3 3658 3549 3710 +3 3622 3440 3496 +3 3622 3496 3658 +3 3574 3387 3440 +3 3574 3440 3622 +3 3516 3325 3387 +3 3516 3387 3574 +3 3443 3268 3325 +3 3443 3325 3516 +3 3379 3198 3268 +3 3379 3268 3443 +3 3302 3112 3198 +3 3302 3198 3379 +3 3233 3051 3112 +3 3233 3112 3302 +3 3146 2986 3051 +3 3146 3051 3233 +3 3065 2906 2986 +3 3065 2986 3146 +3 2990 2841 2906 +3 2990 2906 3065 +3 2903 2759 2841 +3 2903 2841 2990 +3 2832 2699 2759 +3 2832 2759 2903 +3 2745 2629 2699 +3 2745 2699 2832 +3 2671 2548 2629 +3 2671 2629 2745 +3 2590 2487 2548 +3 2590 2548 2671 +3 2516 2406 2487 +3 2516 2487 2590 +3 2431 2345 2406 +3 2431 2406 2516 +3 2358 2266 2345 +3 2358 2345 2431 +3 2281 2196 2266 +3 2281 2266 2358 +3 2199 2132 2196 +3 2199 2196 2281 +3 2127 2054 2132 +3 2127 2132 2199 +3 2044 1987 2054 +3 2044 2054 2127 +3 1971 1907 1987 +3 1971 1987 2044 +3 1881 1846 1907 +3 1881 1907 1971 +3 1808 1782 1846 +3 1808 1846 1881 +3 1721 1694 1782 +3 1721 1782 1808 +3 1640 1630 1694 +3 1640 1694 1721 +3 1569 1630 1640 +3 1569 1617 1630 +3 1630 1617 1673 +3 1630 1673 1694 +3 1694 1673 1734 +3 1694 1734 1782 +3 1782 1734 1803 +3 1782 1803 1846 +3 1846 1803 1862 +3 1846 1862 1907 +3 1907 1862 1919 +3 1907 1919 1987 +3 1987 1919 1989 +3 1987 1989 2054 +3 2054 1989 2049 +3 2054 2049 2132 +3 2132 2049 2114 +3 2132 2114 2196 +3 2196 2114 2181 +3 2196 2181 2266 +3 2266 2181 2239 +3 2266 2239 2345 +3 2345 2239 2310 +3 2345 2310 2406 +3 2406 2310 2371 +3 2406 2371 2487 +3 2487 2371 2436 +3 2487 2436 2548 +3 2548 2436 2508 +3 2548 2508 2629 +3 2629 2508 2562 +3 2629 2562 2699 +3 2699 2562 2640 +3 2699 2640 2759 +3 2759 2640 2698 +3 2759 2698 2841 +3 2841 2698 2754 +3 2841 2754 2906 +3 2906 2754 2830 +3 2906 2830 2986 +3 2986 2830 2888 +3 2986 2888 3051 +3 3051 2888 2947 +3 3051 2947 3112 +3 3112 2947 3019 +3 3112 3019 3198 +3 3198 3019 3073 +3 3198 3073 3268 +3 3268 3073 3136 +3 3268 3136 3325 +3 3325 3136 3209 +3 3325 3209 3387 +3 3387 3209 3262 +3 3387 3262 3440 +3 3440 3262 3312 +3 3440 3312 3496 +3 3496 3312 3365 +3 3496 3365 3549 +3 3549 3365 3410 +3 3549 3410 3588 +3 3588 3410 3447 +3 3588 3447 3617 +3 3617 3447 3483 +3 3617 3483 3644 +3 3644 3483 3524 +3 3644 3524 3666 +3 3666 3524 3553 +3 3666 3553 3691 +3 3691 3553 3573 +3 3691 3573 3713 +3 3713 3573 3592 +3 3713 3592 3720 +3 3720 3592 3602 +3 3720 3602 3724 +3 3724 3602 3611 +3 3724 3611 3726 +3 3726 3611 3613 +3 3726 3613 3721 +3 3721 3613 3612 +3 3721 3612 3714 +3 3714 3612 3606 +3 3714 3606 3693 +3 3693 3606 3599 +3 3693 3599 3668 +3 3668 3599 3583 +3 3668 3583 3646 +3 3646 3583 3563 +3 3646 3563 3623 +3 3623 3563 3540 +3 3623 3540 3591 +3 3591 3540 3501 +3 3591 3501 3552 +3 3552 3501 3459 +3 3552 3459 3500 +3 3500 3459 3424 +3 3500 3424 3446 +3 3446 3424 3382 +3 3446 3382 3392 +3 3392 3382 3332 +3 3382 3371 3332 +3 3424 3403 3371 +3 3424 3371 3382 +3 3459 3428 3403 +3 3459 3403 3424 +3 3501 3448 3428 +3 3501 3428 3459 +3 3540 3469 3448 +3 3540 3448 3501 +3 3563 3485 3469 +3 3563 3469 3540 +3 3583 3499 3485 +3 3583 3485 3563 +3 3599 3509 3499 +3 3599 3499 3583 +3 3606 3510 3509 +3 3606 3509 3599 +3 3612 3505 3510 +3 3612 3510 3606 +3 3613 3493 3505 +3 3613 3505 3612 +3 3611 3478 3493 +3 3611 3493 3613 +3 3602 3458 3478 +3 3602 3478 3611 +3 3592 3437 3458 +3 3592 3458 3602 +3 3573 3418 3437 +3 3573 3437 3592 +3 3553 3385 3418 +3 3553 3418 3573 +3 3524 3356 3385 +3 3524 3385 3553 +3 3483 3314 3356 +3 3483 3356 3524 +3 3447 3277 3314 +3 3447 3314 3483 +3 3410 3231 3277 +3 3410 3277 3447 +3 3365 3179 3231 +3 3365 3231 3410 +3 3312 3114 3179 +3 3312 3179 3365 +3 3262 3067 3114 +3 3262 3114 3312 +3 3209 3024 3067 +3 3209 3067 3262 +3 3136 2961 3024 +3 3136 3024 3209 +3 3073 2901 2961 +3 3073 2961 3136 +3 3019 2850 2901 +3 3019 2901 3073 +3 2947 2791 2850 +3 2947 2850 3019 +3 2888 2731 2791 +3 2888 2791 2947 +3 2830 2675 2731 +3 2830 2731 2888 +3 2754 2612 2675 +3 2754 2675 2830 +3 2698 2550 2612 +3 2698 2612 2754 +3 2640 2501 2550 +3 2640 2550 2698 +3 2562 2434 2501 +3 2562 2501 2640 +3 2508 2378 2434 +3 2508 2434 2562 +3 2436 2323 2378 +3 2436 2378 2508 +3 2371 2253 2323 +3 2371 2323 2436 +3 2310 2198 2253 +3 2310 2253 2371 +3 2239 2148 2198 +3 2239 2198 2310 +3 2181 2078 2148 +3 2181 2148 2239 +3 2114 2026 2078 +3 2114 2078 2181 +3 2049 1978 2026 +3 2049 2026 2114 +3 1989 1908 1978 +3 1989 1978 2049 +3 1919 1860 1908 +3 1919 1908 1989 +3 1862 1809 1860 +3 1862 1860 1919 +3 1803 1750 1809 +3 1803 1809 1862 +3 1734 1695 1750 +3 1734 1750 1803 +3 1673 1650 1695 +3 1673 1695 1734 +3 1617 1611 1650 +3 1617 1650 1673 +3 1569 1611 1617 +3 1569 1600 1611 +3 1611 1600 1625 +3 1611 1625 1650 +3 1650 1625 1660 +3 1650 1660 1695 +3 1695 1660 1699 +3 1695 1699 1750 +3 1750 1699 1745 +3 1750 1745 1809 +3 1809 1745 1799 +3 1809 1799 1860 +3 1860 1799 1839 +3 1860 1839 1908 +3 1908 1839 1884 +3 1908 1884 1978 +3 1978 1884 1937 +3 1978 1937 2026 +3 2026 1937 1988 +3 2026 1988 2078 +3 2078 1988 2041 +3 2078 2041 2148 +3 2148 2041 2081 +3 2148 2081 2198 +3 2198 2081 2150 +3 2198 2150 2253 +3 2253 2150 2195 +3 2253 2195 2323 +3 2323 2195 2244 +3 2323 2244 2378 +3 2378 2244 2306 +3 2378 2306 2434 +3 2434 2306 2359 +3 2434 2359 2501 +3 2501 2359 2409 +3 2501 2409 2550 +3 2550 2409 2475 +3 2550 2475 2612 +3 2612 2475 2525 +3 2612 2525 2675 +3 2675 2525 2571 +3 2675 2571 2731 +3 2731 2571 2641 +3 2731 2641 2791 +3 2791 2641 2688 +3 2791 2688 2850 +3 2850 2688 2738 +3 2850 2738 2901 +3 2901 2738 2796 +3 2901 2796 2961 +3 2961 2796 2848 +3 2961 2848 3024 +3 3024 2848 2892 +3 3024 2892 3067 +3 3067 2892 2940 +3 3067 2940 3114 +3 3114 2940 3001 +3 3114 3001 3179 +3 3179 3001 3046 +3 3179 3046 3231 +3 3231 3046 3089 +3 3231 3089 3277 +3 3277 3089 3135 +3 3277 3135 3314 +3 3314 3135 3190 +3 3314 3190 3356 +3 3356 3190 3227 +3 3356 3227 3385 +3 3385 3227 3267 +3 3385 3267 3418 +3 3418 3267 3292 +3 3418 3292 3437 +3 3437 3292 3322 +3 3437 3322 3458 +3 3458 3322 3350 +3 3458 3350 3478 +3 3478 3350 3373 +3 3478 3373 3493 +3 3493 3373 3386 +3 3493 3386 3505 +3 3505 3386 3405 +3 3505 3405 3510 +3 3510 3405 3411 +3 3510 3411 3509 +3 3509 3411 3416 +3 3509 3416 3499 +3 3499 3416 3417 +3 3499 3417 3485 +3 3485 3417 3413 +3 3485 3413 3469 +3 3469 3413 3407 +3 3469 3407 3448 +3 3448 3407 3394 +3 3448 3394 3428 +3 3428 3394 3377 +3 3428 3377 3403 +3 3403 3377 3362 +3 3403 3362 3371 +3 3371 3362 3332 +3 3362 3345 3332 +3 3377 3353 3345 +3 3377 3345 3362 +3 3394 3360 3353 +3 3394 3353 3377 +3 3407 3361 3360 +3 3407 3360 3394 +3 3413 3355 3361 +3 3413 3361 3407 +3 3417 3346 3355 +3 3417 3355 3413 +3 3416 3333 3346 +3 3416 3346 3417 +3 3411 3316 3333 +3 3411 3333 3416 +3 3405 3297 3316 +3 3405 3316 3411 +3 3386 3280 3297 +3 3386 3297 3405 +3 3373 3249 3280 +3 3373 3280 3386 +3 3350 3220 3249 +3 3350 3249 3373 +3 3322 3187 3220 +3 3322 3220 3350 +3 3292 3144 3187 +3 3292 3187 3322 +3 3267 3100 3144 +3 3267 3144 3292 +3 3227 3060 3100 +3 3227 3100 3267 +3 3190 3026 3060 +3 3190 3060 3227 +3 3135 2976 3026 +3 3135 3026 3190 +3 3089 2921 2976 +3 3089 2976 3135 +3 3046 2880 2921 +3 3046 2921 3089 +3 3001 2837 2880 +3 3001 2880 3046 +3 2940 2783 2837 +3 2940 2837 3001 +3 2892 2733 2783 +3 2892 2783 2940 +3 2848 2683 2733 +3 2848 2733 2892 +3 2796 2637 2683 +3 2796 2683 2848 +3 2738 2575 2637 +3 2738 2637 2796 +3 2688 2533 2575 +3 2688 2575 2738 +3 2641 2481 2533 +3 2641 2533 2688 +3 2571 2422 2481 +3 2571 2481 2641 +3 2525 2372 2422 +3 2525 2422 2571 +3 2475 2329 2372 +3 2475 2372 2525 +3 2409 2268 2329 +3 2409 2329 2475 +3 2359 2220 2268 +3 2359 2268 2409 +3 2306 2171 2220 +3 2306 2220 2359 +3 2244 2121 2171 +3 2244 2171 2306 +3 2195 2068 2121 +3 2195 2121 2244 +3 2150 2022 2068 +3 2150 2068 2195 +3 2081 1982 2022 +3 2081 2022 2150 +3 2041 1927 1982 +3 2041 1982 2081 +3 1988 1876 1927 +3 1988 1927 2041 +3 1937 1843 1876 +3 1937 1876 1988 +3 1884 1802 1843 +3 1884 1843 1937 +3 1839 1760 1802 +3 1839 1802 1884 +3 1799 1716 1760 +3 1799 1760 1839 +3 1745 1682 1716 +3 1745 1716 1799 +3 1699 1654 1682 +3 1699 1682 1745 +3 1660 1622 1654 +3 1660 1654 1699 +3 1625 1605 1622 +3 1625 1622 1660 +3 1600 1586 1605 +3 1600 1605 1625 +3 1569 1586 1600 +3 1569 1573 1586 +3 1586 1573 1581 +3 1586 1581 1605 +3 1605 1581 1592 +3 1605 1592 1622 +3 1622 1592 1608 +3 1622 1608 1654 +3 1654 1608 1620 +3 1654 1620 1682 +3 1682 1620 1644 +3 1682 1644 1716 +3 1716 1644 1671 +3 1716 1671 1760 +3 1760 1671 1702 +3 1760 1702 1802 +3 1802 1702 1736 +3 1802 1736 1843 +3 1843 1736 1785 +3 1843 1785 1876 +3 1876 1785 1822 +3 1876 1822 1927 +3 1927 1822 1853 +3 1927 1853 1982 +3 1982 1853 1892 +3 1982 1892 2022 +3 2022 1892 1939 +3 2022 1939 2068 +3 2068 1939 1985 +3 2068 1985 2121 +3 2121 1985 2030 +3 2121 2030 2171 +3 2171 2030 2072 +3 2171 2072 2220 +3 2220 2072 2128 +3 2220 2128 2268 +3 2268 2128 2174 +3 2268 2174 2329 +3 2329 2174 2221 +3 2329 2221 2372 +3 2372 2221 2269 +3 2372 2269 2422 +3 2422 2269 2328 +3 2422 2328 2481 +3 2481 2328 2366 +3 2481 2366 2533 +3 2533 2366 2418 +3 2533 2418 2575 +3 2575 2418 2477 +3 2575 2477 2637 +3 2637 2477 2524 +3 2637 2524 2683 +3 2683 2524 2568 +3 2683 2568 2733 +3 2733 2568 2623 +3 2733 2623 2783 +3 2783 2623 2674 +3 2783 2674 2837 +3 2837 2674 2721 +3 2837 2721 2880 +3 2880 2721 2764 +3 2880 2764 2921 +3 2921 2764 2825 +3 2921 2825 2976 +3 2976 2825 2864 +3 2976 2864 3026 +3 3026 2864 2909 +3 3026 2909 3060 +3 3060 2909 2953 +3 3060 2953 3100 +3 3100 2953 3004 +3 3100 3004 3144 +3 3144 3004 3043 +3 3144 3043 3187 +3 3187 3043 3075 +3 3187 3075 3220 +3 3220 3075 3111 +3 3220 3111 3249 +3 3249 3111 3161 +3 3249 3161 3280 +3 3280 3161 3196 +3 3280 3196 3297 +3 3297 3196 3226 +3 3297 3226 3316 +3 3316 3226 3253 +3 3316 3253 3333 +3 3333 3253 3278 +3 3333 3278 3346 +3 3346 3278 3291 +3 3346 3291 3355 +3 3355 3291 3307 +3 3355 3307 3361 +3 3361 3307 3319 +3 3361 3319 3360 +3 3360 3319 3326 +3 3360 3326 3353 +3 3353 3326 3331 +3 3353 3331 3345 +3 3345 3331 3332 +3 3331 3318 3332 +3 3326 3300 3318 +3 3326 3318 3331 +3 3319 3286 3300 +3 3319 3300 3326 +3 3307 3263 3286 +3 3307 3286 3319 +3 3291 3237 3263 +3 3291 3263 3307 +3 3278 3208 3237 +3 3278 3237 3291 +3 3253 3170 3208 +3 3253 3208 3278 +3 3226 3117 3170 +3 3226 3170 3253 +3 3196 3081 3117 +3 3196 3117 3226 +3 3161 3047 3081 +3 3161 3081 3196 +3 3111 3007 3047 +3 3111 3047 3161 +3 3075 2959 3007 +3 3075 3007 3111 +3 3043 2911 2959 +3 3043 2959 3075 +3 3004 2866 2911 +3 3004 2911 3043 +3 2953 2826 2866 +3 2953 2866 3004 +3 2909 2763 2826 +3 2909 2826 2953 +3 2864 2718 2763 +3 2864 2763 2909 +3 2825 2673 2718 +3 2825 2718 2864 +3 2764 2618 2673 +3 2764 2673 2825 +3 2721 2566 2618 +3 2721 2618 2764 +3 2674 2520 2566 +3 2674 2566 2721 +3 2623 2471 2520 +3 2623 2520 2674 +3 2568 2413 2471 +3 2568 2471 2623 +3 2524 2362 2413 +3 2524 2413 2568 +3 2477 2317 2362 +3 2477 2362 2524 +3 2418 2256 2317 +3 2418 2317 2477 +3 2366 2211 2256 +3 2366 2256 2418 +3 2328 2166 2211 +3 2328 2211 2366 +3 2269 2113 2166 +3 2269 2166 2328 +3 2221 2062 2113 +3 2221 2113 2269 +3 2174 2016 2062 +3 2174 2062 2221 +3 2128 1979 2016 +3 2128 2016 2174 +3 2072 1924 1979 +3 2072 1979 2128 +3 2030 1874 1924 +3 2030 1924 2072 +3 1985 1842 1874 +3 1985 1874 2030 +3 1939 1804 1842 +3 1939 1842 1985 +3 1892 1762 1804 +3 1892 1804 1939 +3 1853 1718 1762 +3 1853 1762 1892 +3 1822 1684 1718 +3 1822 1718 1853 +3 1785 1657 1684 +3 1785 1684 1822 +3 1736 1631 1657 +3 1736 1657 1785 +3 1702 1612 1631 +3 1702 1631 1736 +3 1671 1593 1612 +3 1671 1612 1702 +3 1644 1578 1593 +3 1644 1593 1671 +3 1620 1565 1578 +3 1620 1578 1644 +3 1608 1559 1565 +3 1608 1565 1620 +3 1592 1552 1559 +3 1592 1559 1608 +3 1581 1554 1552 +3 1581 1552 1592 +3 1573 1561 1554 +3 1573 1554 1581 +3 1569 1561 1573 +3 1569 1544 1561 +3 1561 1544 1529 +3 1561 1529 1554 +3 1554 1529 1518 +3 1554 1518 1552 +3 1552 1518 1511 +3 1552 1511 1559 +3 1559 1511 1503 +3 1559 1503 1565 +3 1565 1503 1502 +3 1565 1502 1578 +3 1578 1502 1510 +3 1578 1510 1593 +3 1593 1510 1517 +3 1593 1517 1612 +3 1612 1517 1526 +3 1612 1526 1631 +3 1631 1526 1542 +3 1631 1542 1657 +3 1657 1542 1564 +3 1657 1564 1684 +3 1684 1564 1590 +3 1684 1590 1718 +3 1718 1590 1613 +3 1718 1613 1762 +3 1762 1613 1647 +3 1762 1647 1804 +3 1804 1647 1680 +3 1804 1680 1842 +3 1842 1680 1720 +3 1842 1720 1874 +3 1874 1720 1775 +3 1874 1775 1924 +3 1924 1775 1817 +3 1924 1817 1979 +3 1979 1817 1856 +3 1979 1856 2016 +3 2016 1856 1899 +3 2016 1899 2062 +3 2062 1899 1956 +3 2062 1956 2113 +3 2113 1956 2003 +3 2113 2003 2166 +3 2166 2003 2048 +3 2166 2048 2211 +3 2211 2048 2096 +3 2211 2096 2256 +3 2256 2096 2158 +3 2256 2158 2317 +3 2317 2158 2205 +3 2317 2205 2362 +3 2362 2205 2252 +3 2362 2252 2413 +3 2413 2252 2314 +3 2413 2314 2471 +3 2471 2314 2364 +3 2471 2364 2520 +3 2520 2364 2417 +3 2520 2417 2566 +3 2566 2417 2478 +3 2566 2478 2618 +3 2618 2478 2527 +3 2618 2527 2673 +3 2673 2527 2576 +3 2673 2576 2718 +3 2718 2576 2642 +3 2718 2642 2763 +3 2763 2642 2689 +3 2763 2689 2826 +3 2826 2689 2737 +3 2826 2737 2866 +3 2866 2737 2793 +3 2866 2793 2911 +3 2911 2793 2844 +3 2911 2844 2959 +3 2959 2844 2891 +3 2959 2891 3007 +3 3007 2891 2934 +3 3007 2934 3047 +3 3047 2934 2996 +3 3047 2996 3081 +3 3081 2996 3038 +3 3081 3038 3117 +3 3117 3038 3077 +3 3117 3077 3170 +3 3170 3077 3118 +3 3170 3118 3208 +3 3208 3118 3175 +3 3208 3175 3237 +3 3237 3175 3215 +3 3237 3215 3263 +3 3263 3215 3250 +3 3263 3250 3286 +3 3286 3250 3283 +3 3286 3283 3300 +3 3300 3283 3306 +3 3300 3306 3318 +3 3318 3306 3332 +3 3306 3294 3332 +3 3283 3260 3294 +3 3283 3294 3306 +3 3250 3214 3260 +3 3250 3260 3283 +3 3215 3164 3214 +3 3215 3214 3250 +3 3175 3103 3164 +3 3175 3164 3215 +3 3118 3057 3103 +3 3118 3103 3175 +3 3077 3011 3057 +3 3077 3057 3118 +3 3038 2950 3011 +3 3038 3011 3077 +3 2996 2893 2950 +3 2996 2950 3038 +3 2934 2845 2893 +3 2934 2893 2996 +3 2891 2789 2845 +3 2891 2845 2934 +3 2844 2729 2789 +3 2844 2789 2891 +3 2793 2676 2729 +3 2793 2729 2844 +3 2737 2614 2676 +3 2737 2676 2793 +3 2689 2554 2614 +3 2689 2614 2737 +3 2642 2504 2554 +3 2642 2554 2689 +3 2576 2443 2504 +3 2576 2504 2642 +3 2527 2383 2443 +3 2527 2443 2576 +3 2478 2332 2383 +3 2478 2383 2527 +3 2417 2265 2332 +3 2417 2332 2478 +3 2364 2209 2265 +3 2364 2265 2417 +3 2314 2161 2209 +3 2314 2209 2364 +3 2252 2091 2161 +3 2252 2161 2314 +3 2205 2042 2091 +3 2205 2091 2252 +3 2158 1991 2042 +3 2158 2042 2205 +3 2096 1931 1991 +3 2096 1991 2158 +3 2048 1872 1931 +3 2048 1931 2096 +3 2003 1832 1872 +3 2003 1872 2048 +3 1956 1786 1832 +3 1956 1832 2003 +3 1899 1723 1786 +3 1899 1786 1956 +3 1856 1676 1723 +3 1856 1723 1899 +3 1817 1632 1676 +3 1817 1676 1856 +3 1775 1596 1632 +3 1775 1632 1817 +3 1720 1560 1596 +3 1720 1596 1775 +3 1680 1525 1560 +3 1680 1560 1720 +3 1647 1497 1525 +3 1647 1525 1680 +3 1613 1478 1497 +3 1613 1497 1647 +3 1590 1462 1478 +3 1590 1478 1613 +3 1564 1447 1462 +3 1564 1462 1590 +3 1542 1436 1447 +3 1542 1447 1564 +3 1526 1427 1436 +3 1526 1436 1542 +3 1517 1426 1427 +3 1517 1427 1526 +3 1510 1428 1426 +3 1510 1426 1517 +3 1502 1437 1428 +3 1502 1428 1510 +3 1503 1450 1437 +3 1503 1437 1502 +3 1511 1467 1450 +3 1511 1450 1503 +3 1518 1481 1467 +3 1518 1467 1511 +3 1529 1506 1481 +3 1529 1481 1518 +3 1544 1532 1506 +3 1544 1506 1529 +3 1569 1532 1544 +3 1569 1523 1532 +3 1532 1523 1482 +3 1532 1482 1506 +3 1506 1482 1451 +3 1506 1451 1481 +3 1481 1451 1417 +3 1481 1417 1467 +3 1467 1417 1382 +3 1467 1382 1450 +3 1450 1382 1355 +3 1450 1355 1437 +3 1437 1355 1341 +3 1437 1341 1428 +3 1428 1341 1330 +3 1428 1330 1426 +3 1426 1330 1319 +3 1426 1319 1427 +3 1427 1319 1314 +3 1427 1314 1436 +3 1436 1314 1316 +3 1436 1316 1447 +3 1447 1316 1325 +3 1447 1325 1462 +3 1462 1325 1335 +3 1462 1335 1478 +3 1478 1335 1347 +3 1478 1347 1497 +3 1497 1347 1363 +3 1497 1363 1525 +3 1525 1363 1394 +3 1525 1394 1560 +3 1560 1394 1431 +3 1560 1431 1596 +3 1596 1431 1468 +3 1596 1468 1632 +3 1632 1468 1501 +3 1632 1501 1676 +3 1676 1501 1538 +3 1676 1538 1723 +3 1723 1538 1591 +3 1723 1591 1786 +3 1786 1591 1636 +3 1786 1636 1832 +3 1832 1636 1690 +3 1832 1690 1872 +3 1872 1690 1752 +3 1872 1752 1931 +3 1931 1752 1821 +3 1931 1821 1991 +3 1991 1821 1868 +3 1991 1868 2042 +3 2042 1868 1932 +3 2042 1932 2091 +3 2091 1932 1999 +3 2091 1999 2161 +3 2161 1999 2055 +3 2161 2055 2209 +3 2209 2055 2119 +3 2209 2119 2265 +3 2265 2119 2186 +3 2265 2186 2332 +3 2332 2186 2240 +3 2332 2240 2383 +3 2383 2240 2308 +3 2383 2308 2443 +3 2443 2308 2365 +3 2443 2365 2504 +3 2504 2365 2429 +3 2504 2429 2554 +3 2554 2429 2502 +3 2554 2502 2614 +3 2614 2502 2555 +3 2614 2555 2676 +3 2676 2555 2621 +3 2676 2621 2729 +3 2729 2621 2687 +3 2729 2687 2789 +3 2789 2687 2744 +3 2789 2744 2845 +3 2845 2744 2817 +3 2845 2817 2893 +3 2893 2817 2873 +3 2893 2873 2950 +3 2950 2873 2928 +3 2950 2928 3011 +3 3011 2928 2998 +3 3011 2998 3057 +3 3057 2998 3052 +3 3057 3052 3103 +3 3103 3052 3107 +3 3103 3107 3164 +3 3164 3107 3177 +3 3164 3177 3214 +3 3214 3177 3236 +3 3214 3236 3260 +3 3260 3236 3287 +3 3260 3287 3294 +3 3294 3287 3332 +3 3287 3274 3332 +3 3236 3213 3274 +3 3236 3274 3287 +3 3177 3133 3213 +3 3177 3213 3236 +3 3107 3066 3133 +3 3107 3133 3177 +3 3052 3005 3066 +3 3052 3066 3107 +3 2998 2925 3005 +3 2998 3005 3052 +3 2928 2861 2925 +3 2928 2925 2998 +3 2873 2799 2861 +3 2873 2861 2928 +3 2817 2723 2799 +3 2817 2799 2873 +3 2744 2660 2723 +3 2744 2723 2817 +3 2687 2585 2660 +3 2687 2660 2744 +3 2621 2519 2585 +3 2621 2585 2687 +3 2555 2445 2519 +3 2555 2519 2621 +3 2502 2379 2445 +3 2502 2445 2555 +3 2429 2312 2379 +3 2429 2379 2502 +3 2365 2235 2312 +3 2365 2312 2429 +3 2308 2173 2235 +3 2308 2235 2365 +3 2240 2097 2173 +3 2240 2173 2308 +3 2186 2032 2097 +3 2186 2097 2240 +3 2119 1969 2032 +3 2119 2032 2186 +3 2055 1891 1969 +3 2055 1969 2119 +3 1999 1830 1891 +3 1999 1891 2055 +3 1932 1759 1830 +3 1932 1830 1999 +3 1868 1685 1759 +3 1868 1759 1932 +3 1821 1619 1685 +3 1821 1685 1868 +3 1752 1563 1619 +3 1752 1619 1821 +3 1690 1508 1563 +3 1690 1563 1752 +3 1636 1460 1508 +3 1636 1508 1690 +3 1591 1409 1460 +3 1591 1460 1636 +3 1538 1357 1409 +3 1538 1409 1591 +3 1501 1324 1357 +3 1501 1357 1538 +3 1468 1292 1324 +3 1468 1324 1501 +3 1431 1270 1292 +3 1431 1292 1468 +3 1394 1252 1270 +3 1394 1270 1431 +3 1363 1238 1252 +3 1363 1252 1394 +3 1347 1224 1238 +3 1347 1238 1363 +3 1335 1216 1224 +3 1335 1224 1347 +3 1325 1213 1216 +3 1325 1216 1335 +3 1316 1217 1213 +3 1316 1213 1325 +3 1314 1226 1217 +3 1314 1217 1316 +3 1319 1240 1226 +3 1319 1226 1314 +3 1330 1253 1240 +3 1330 1240 1319 +3 1341 1273 1253 +3 1341 1253 1330 +3 1355 1294 1273 +3 1355 1273 1341 +3 1382 1326 1294 +3 1382 1294 1355 +3 1417 1360 1326 +3 1417 1326 1382 +3 1451 1412 1360 +3 1451 1360 1417 +3 1482 1465 1412 +3 1482 1412 1451 +3 1523 1513 1465 +3 1523 1465 1482 +3 1569 1513 1523 +3 1569 1499 1513 +3 1513 1499 1441 +3 1513 1441 1465 +3 1465 1441 1368 +3 1465 1368 1412 +3 1412 1368 1317 +3 1412 1317 1360 +3 1360 1317 1276 +3 1360 1276 1326 +3 1326 1276 1246 +3 1326 1246 1294 +3 1294 1246 1194 +3 1294 1194 1273 +3 1273 1194 1165 +3 1273 1165 1253 +3 1253 1165 1148 +3 1253 1148 1240 +3 1240 1148 1134 +3 1240 1134 1226 +3 1226 1134 1119 +3 1226 1119 1217 +3 1217 1119 1109 +3 1217 1109 1213 +3 1213 1109 1105 +3 1213 1105 1216 +3 1216 1105 1106 +3 1216 1106 1224 +3 1224 1106 1110 +3 1224 1110 1238 +3 1238 1110 1121 +3 1238 1121 1252 +3 1252 1121 1136 +3 1252 1136 1270 +3 1270 1136 1150 +3 1270 1150 1292 +3 1292 1150 1167 +3 1292 1167 1324 +3 1324 1167 1200 +3 1324 1200 1357 +3 1357 1200 1247 +3 1357 1247 1409 +3 1409 1247 1280 +3 1409 1280 1460 +3 1460 1280 1322 +3 1460 1322 1508 +3 1508 1322 1375 +3 1508 1375 1563 +3 1563 1375 1446 +3 1563 1446 1619 +3 1619 1446 1505 +3 1619 1505 1685 +3 1685 1505 1577 +3 1685 1577 1759 +3 1759 1577 1643 +3 1759 1643 1830 +3 1830 1643 1719 +3 1830 1719 1891 +3 1891 1719 1806 +3 1891 1806 1969 +3 1969 1806 1873 +3 1969 1873 2032 +3 2032 1873 1966 +3 2032 1966 2097 +3 2097 1966 2034 +3 2097 2034 2173 +3 2173 2034 2109 +3 2173 2109 2235 +3 2235 2109 2189 +3 2235 2189 2312 +3 2312 2189 2255 +3 2312 2255 2379 +3 2379 2255 2342 +3 2379 2342 2445 +3 2445 2342 2411 +3 2445 2411 2519 +3 2519 2411 2498 +3 2519 2498 2585 +3 2585 2498 2563 +3 2585 2563 2660 +3 2660 2563 2652 +3 2660 2652 2723 +3 2723 2652 2717 +3 2723 2717 2799 +3 2799 2717 2800 +3 2799 2800 2861 +3 2861 2800 2874 +3 2861 2874 2925 +3 2925 2874 2943 +3 2925 2943 3005 +3 3005 2943 3032 +3 3005 3032 3066 +3 3066 3032 3101 +3 3066 3101 3133 +3 3133 3101 3191 +3 3133 3191 3213 +3 3213 3191 3266 +3 3213 3266 3274 +3 3274 3266 3332 +3 3266 3252 3332 +3 3191 3163 3252 +3 3191 3252 3266 +3 3101 3068 3163 +3 3101 3163 3191 +3 3032 2991 3068 +3 3032 3068 3101 +3 2943 2897 2991 +3 2943 2991 3032 +3 2874 2822 2897 +3 2874 2897 2943 +3 2800 2732 2822 +3 2800 2822 2874 +3 2717 2655 2732 +3 2717 2732 2800 +3 2652 2561 2655 +3 2652 2655 2717 +3 2563 2485 2561 +3 2563 2561 2652 +3 2498 2395 2485 +3 2498 2485 2563 +3 2411 2319 2395 +3 2411 2395 2498 +3 2342 2232 2319 +3 2342 2319 2411 +3 2255 2153 2232 +3 2255 2232 2342 +3 2189 2061 2153 +3 2189 2153 2255 +3 2109 1983 2061 +3 2109 2061 2189 +3 2034 1889 1983 +3 2034 1983 2109 +3 1966 1811 1889 +3 1966 1889 2034 +3 1873 1712 1811 +3 1873 1811 1966 +3 1806 1629 1712 +3 1806 1712 1873 +3 1719 1547 1629 +3 1719 1629 1806 +3 1643 1472 1547 +3 1643 1547 1719 +3 1577 1390 1472 +3 1577 1472 1643 +3 1505 1323 1390 +3 1505 1390 1577 +3 1446 1267 1323 +3 1446 1323 1505 +3 1375 1219 1267 +3 1375 1267 1446 +3 1322 1160 1219 +3 1322 1219 1375 +3 1280 1133 1160 +3 1280 1160 1322 +3 1247 1096 1133 +3 1247 1133 1280 +3 1200 1065 1096 +3 1200 1096 1247 +3 1167 1039 1065 +3 1167 1065 1200 +3 1150 1019 1039 +3 1150 1039 1167 +3 1136 1007 1019 +3 1136 1019 1150 +3 1121 999 1007 +3 1121 1007 1136 +3 1110 993 999 +3 1110 999 1121 +3 1106 995 993 +3 1106 993 1110 +3 1105 1001 995 +3 1105 995 1106 +3 1109 1008 1001 +3 1109 1001 1105 +3 1119 1024 1008 +3 1119 1008 1109 +3 1134 1042 1024 +3 1134 1024 1119 +3 1148 1069 1042 +3 1148 1042 1134 +3 1165 1103 1069 +3 1165 1069 1148 +3 1194 1143 1103 +3 1194 1103 1165 +3 1246 1173 1143 +3 1246 1143 1194 +3 1276 1232 1173 +3 1276 1173 1246 +3 1317 1282 1232 +3 1317 1232 1276 +3 1368 1337 1282 +3 1368 1282 1317 +3 1441 1414 1337 +3 1441 1337 1368 +3 1499 1489 1414 +3 1499 1414 1441 +3 1569 1489 1499 +3 1569 1479 1489 +3 1489 1479 1386 +3 1489 1386 1414 +3 1414 1386 1306 +3 1414 1306 1337 +3 1337 1306 1248 +3 1337 1248 1282 +3 1282 1248 1174 +3 1282 1174 1232 +3 1232 1174 1129 +3 1232 1129 1173 +3 1173 1129 1080 +3 1173 1080 1143 +3 1143 1080 1037 +3 1143 1037 1103 +3 1103 1037 1000 +3 1103 1000 1069 +3 1069 1000 969 +3 1069 969 1042 +3 1042 969 943 +3 1042 943 1024 +3 1024 943 923 +3 1024 923 1008 +3 1008 923 904 +3 1008 904 1001 +3 1001 904 889 +3 1001 889 995 +3 995 889 886 +3 995 886 993 +3 993 886 885 +3 993 885 999 +3 999 885 887 +3 999 887 1007 +3 1007 887 901 +3 1007 901 1019 +3 1019 901 918 +3 1019 918 1039 +3 1039 918 941 +3 1039 941 1065 +3 1065 941 964 +3 1065 964 1096 +3 1096 964 994 +3 1096 994 1133 +3 1133 994 1030 +3 1133 1030 1160 +3 1160 1030 1070 +3 1160 1070 1219 +3 1219 1070 1122 +3 1219 1122 1267 +3 1267 1122 1163 +3 1267 1163 1323 +3 1323 1163 1241 +3 1323 1241 1390 +3 1390 1241 1298 +3 1390 1298 1472 +3 1472 1298 1373 +3 1472 1373 1547 +3 1547 1373 1470 +3 1547 1470 1629 +3 1629 1470 1553 +3 1629 1553 1712 +3 1712 1553 1645 +3 1712 1645 1811 +3 1811 1645 1747 +3 1811 1747 1889 +3 1889 1747 1848 +3 1889 1848 1983 +3 1983 1848 1941 +3 1983 1941 2061 +3 2061 1941 2033 +3 2061 2033 2153 +3 2153 2033 2130 +3 2153 2130 2232 +3 2232 2130 2215 +3 2232 2215 2319 +3 2319 2215 2309 +3 2319 2309 2395 +3 2395 2309 2394 +3 2395 2394 2485 +3 2485 2394 2496 +3 2485 2496 2561 +3 2561 2496 2574 +3 2561 2574 2655 +3 2655 2574 2672 +3 2655 2672 2732 +3 2732 2672 2755 +3 2732 2755 2822 +3 2822 2755 2856 +3 2822 2856 2897 +3 2897 2856 2936 +3 2897 2936 2991 +3 2991 2936 3042 +3 2991 3042 3068 +3 3068 3042 3134 +3 3068 3134 3163 +3 3163 3134 3242 +3 3163 3242 3252 +3 3252 3242 3332 +3 3242 3232 3332 +3 3134 3108 3232 +3 3134 3232 3242 +3 3042 3014 3108 +3 3042 3108 3134 +3 2936 2905 3014 +3 2936 3014 3042 +3 2856 2815 2905 +3 2856 2905 2936 +3 2755 2710 2815 +3 2755 2815 2856 +3 2672 2607 2710 +3 2672 2710 2755 +3 2574 2515 2607 +3 2574 2607 2672 +3 2496 2412 2515 +3 2496 2515 2574 +3 2394 2322 2412 +3 2394 2412 2496 +3 2309 2219 2322 +3 2309 2322 2394 +3 2215 2123 2219 +3 2215 2219 2309 +3 2130 2020 2123 +3 2130 2123 2215 +3 2033 1913 2020 +3 2033 2020 2130 +3 1941 1823 1913 +3 1941 1913 2033 +3 1848 1701 1823 +3 1848 1823 1941 +3 1747 1602 1701 +3 1747 1701 1848 +3 1645 1492 1602 +3 1645 1602 1747 +3 1553 1393 1492 +3 1553 1492 1645 +3 1470 1301 1393 +3 1470 1393 1553 +3 1373 1231 1301 +3 1373 1301 1470 +3 1298 1152 1231 +3 1298 1231 1373 +3 1241 1095 1152 +3 1241 1152 1298 +3 1163 1038 1095 +3 1163 1095 1241 +3 1122 985 1038 +3 1122 1038 1163 +3 1070 945 985 +3 1070 985 1122 +3 1030 902 945 +3 1030 945 1070 +3 994 872 902 +3 994 902 1030 +3 964 847 872 +3 964 872 994 +3 941 826 847 +3 941 847 964 +3 918 809 826 +3 918 826 941 +3 901 796 809 +3 901 809 918 +3 887 786 796 +3 887 796 901 +3 885 784 786 +3 885 786 887 +3 886 791 784 +3 886 784 885 +3 889 804 791 +3 889 791 886 +3 904 822 804 +3 904 804 889 +3 923 840 822 +3 923 822 904 +3 943 863 840 +3 943 840 923 +3 969 888 863 +3 969 863 943 +3 1000 934 888 +3 1000 888 969 +3 1037 974 934 +3 1037 934 1000 +3 1080 1020 974 +3 1080 974 1037 +3 1129 1077 1020 +3 1129 1020 1080 +3 1174 1142 1077 +3 1174 1077 1129 +3 1248 1205 1142 +3 1248 1142 1174 +3 1306 1285 1205 +3 1306 1205 1248 +3 1386 1362 1285 +3 1386 1285 1306 +3 1479 1471 1362 +3 1479 1362 1386 +3 1569 1471 1479 +3 1569 1463 1471 +3 1471 1463 1346 +3 1471 1346 1362 +3 1362 1346 1260 +3 1362 1260 1285 +3 1285 1260 1162 +3 1285 1162 1205 +3 1205 1162 1100 +3 1205 1100 1142 +3 1142 1100 1031 +3 1142 1031 1077 +3 1077 1031 971 +3 1077 971 1020 +3 1020 971 916 +3 1020 916 974 +3 974 916 869 +3 974 869 934 +3 934 869 830 +3 934 830 888 +3 888 830 789 +3 888 789 863 +3 863 789 760 +3 863 760 840 +3 840 760 738 +3 840 738 822 +3 822 738 722 +3 822 722 804 +3 804 722 709 +3 804 709 791 +3 791 709 701 +3 791 701 784 +3 784 701 694 +3 784 694 786 +3 786 694 700 +3 786 700 796 +3 796 700 708 +3 796 708 809 +3 809 708 721 +3 809 721 826 +3 826 721 737 +3 826 737 847 +3 847 737 758 +3 847 758 872 +3 872 758 788 +3 872 788 902 +3 902 788 829 +3 902 829 945 +3 945 829 867 +3 945 867 985 +3 985 867 915 +3 985 915 1038 +3 1038 915 970 +3 1038 970 1095 +3 1095 970 1029 +3 1095 1029 1152 +3 1152 1029 1099 +3 1152 1099 1231 +3 1231 1099 1161 +3 1231 1161 1301 +3 1301 1161 1259 +3 1301 1259 1393 +3 1393 1259 1344 +3 1393 1344 1492 +3 1492 1344 1459 +3 1492 1459 1602 +3 1602 1459 1566 +3 1602 1566 1701 +3 1701 1566 1678 +3 1701 1678 1823 +3 1823 1678 1805 +3 1823 1805 1913 +3 1913 1805 1909 +3 1913 1909 2020 +3 2020 1909 2023 +3 2020 2023 2123 +3 2123 2023 2143 +3 2123 2143 2219 +3 2219 2143 2234 +3 2219 2234 2322 +3 2322 2234 2350 +3 2322 2350 2412 +3 2412 2350 2448 +3 2412 2448 2515 +3 2515 2448 2549 +3 2515 2549 2607 +3 2607 2549 2663 +3 2607 2663 2710 +3 2710 2663 2757 +3 2710 2757 2815 +3 2815 2757 2876 +3 2815 2876 2905 +3 2905 2876 2989 +3 2905 2989 3014 +3 3014 2989 3094 +3 3014 3094 3108 +3 3108 3094 3222 +3 3108 3222 3232 +3 3232 3222 3332 +3 3222 3212 3332 +3 3094 3074 3212 +3 3094 3212 3222 +3 2989 2956 3074 +3 2989 3074 3094 +3 2876 2843 2956 +3 2876 2956 2989 +3 2757 2724 2843 +3 2757 2843 2876 +3 2663 2609 2724 +3 2663 2724 2757 +3 2549 2505 2609 +3 2549 2609 2663 +3 2448 2390 2505 +3 2448 2505 2549 +3 2350 2276 2390 +3 2350 2390 2448 +3 2234 2167 2276 +3 2234 2276 2350 +3 2143 2046 2167 +3 2143 2167 2234 +3 2023 1929 2046 +3 2023 2046 2143 +3 1909 1816 1929 +3 1909 1929 2023 +3 1805 1677 1816 +3 1805 1816 1909 +3 1678 1557 1677 +3 1678 1677 1805 +3 1566 1440 1557 +3 1566 1557 1678 +3 1459 1315 1440 +3 1459 1440 1566 +3 1344 1225 1315 +3 1344 1315 1459 +3 1259 1137 1225 +3 1259 1225 1344 +3 1161 1046 1137 +3 1161 1137 1259 +3 1099 980 1046 +3 1099 1046 1161 +3 1029 914 980 +3 1029 980 1099 +3 970 855 914 +3 970 914 1029 +3 915 807 855 +3 915 855 970 +3 867 756 807 +3 867 807 915 +3 829 725 756 +3 829 756 867 +3 788 682 725 +3 788 725 829 +3 758 654 682 +3 758 682 788 +3 737 639 654 +3 737 654 758 +3 721 627 639 +3 721 639 737 +3 708 612 627 +3 708 627 721 +3 700 606 612 +3 700 612 708 +3 694 607 606 +3 694 606 700 +3 701 614 607 +3 701 607 694 +3 709 628 614 +3 709 614 701 +3 722 642 628 +3 722 628 709 +3 738 658 642 +3 738 642 722 +3 760 685 658 +3 760 658 738 +3 789 728 685 +3 789 685 760 +3 830 765 728 +3 830 728 789 +3 869 813 765 +3 869 765 830 +3 916 860 813 +3 916 813 869 +3 971 922 860 +3 971 860 916 +3 1031 984 922 +3 1031 922 971 +3 1100 1057 984 +3 1100 984 1031 +3 1162 1145 1057 +3 1162 1057 1100 +3 1260 1236 1145 +3 1260 1145 1162 +3 1346 1329 1236 +3 1346 1236 1260 +3 1463 1452 1329 +3 1463 1329 1346 +3 1569 1452 1463 +3 1569 1445 1452 +3 1452 1445 1311 +3 1452 1311 1329 +3 1329 1311 1204 +3 1329 1204 1236 +3 1236 1204 1113 +3 1236 1113 1145 +3 1145 1113 1023 +3 1145 1023 1057 +3 1057 1023 947 +3 1057 947 984 +3 984 947 877 +3 984 877 922 +3 922 877 816 +3 922 816 860 +3 860 816 752 +3 860 752 813 +3 813 752 713 +3 813 713 765 +3 765 713 659 +3 765 659 728 +3 728 659 631 +3 728 631 685 +3 685 631 593 +3 685 593 658 +3 658 593 566 +3 658 566 642 +3 642 566 550 +3 642 550 628 +3 628 550 534 +3 628 534 614 +3 614 534 527 +3 614 527 607 +3 607 527 524 +3 607 524 606 +3 606 524 526 +3 606 526 612 +3 612 526 533 +3 612 533 627 +3 627 533 549 +3 627 549 639 +3 639 549 564 +3 639 564 654 +3 654 564 592 +3 654 592 682 +3 682 592 630 +3 682 630 725 +3 725 630 657 +3 725 657 756 +3 756 657 711 +3 756 711 807 +3 807 711 750 +3 807 750 855 +3 855 750 814 +3 855 814 914 +3 914 814 875 +3 914 875 980 +3 980 875 946 +3 980 946 1046 +3 1046 946 1021 +3 1046 1021 1137 +3 1137 1021 1112 +3 1137 1112 1225 +3 1225 1112 1201 +3 1225 1201 1315 +3 1315 1201 1308 +3 1315 1308 1440 +3 1440 1308 1444 +3 1440 1444 1557 +3 1557 1444 1567 +3 1557 1567 1677 +3 1677 1567 1697 +3 1677 1697 1816 +3 1816 1697 1838 +3 1816 1838 1929 +3 1929 1838 1972 +3 1929 1972 2046 +3 2046 1972 2083 +3 2046 2083 2167 +3 2167 2083 2208 +3 2167 2208 2276 +3 2276 2208 2334 +3 2276 2334 2390 +3 2390 2334 2450 +3 2390 2450 2505 +3 2505 2450 2564 +3 2505 2564 2609 +3 2609 2564 2691 +3 2609 2691 2724 +3 2724 2691 2816 +3 2724 2816 2843 +3 2843 2816 2927 +3 2843 2927 2956 +3 2956 2927 3061 +3 2956 3061 3074 +3 3074 3061 3203 +3 3074 3203 3212 +3 3212 3203 3332 +3 3203 3194 3332 +3 3061 3044 3194 +3 3061 3194 3203 +3 2927 2908 3044 +3 2927 3044 3061 +3 2816 2777 2908 +3 2816 2908 2927 +3 2691 2658 2777 +3 2691 2777 2816 +3 2564 2528 2658 +3 2564 2658 2691 +3 2450 2398 2528 +3 2450 2528 2564 +3 2334 2275 2398 +3 2334 2398 2450 +3 2208 2154 2275 +3 2208 2275 2334 +3 2083 2018 2154 +3 2083 2154 2208 +3 1972 1883 2018 +3 1972 2018 2083 +3 1838 1743 1883 +3 1838 1883 1972 +3 1697 1603 1743 +3 1697 1743 1838 +3 1567 1466 1603 +3 1567 1603 1697 +3 1444 1320 1466 +3 1444 1466 1567 +3 1308 1207 1320 +3 1308 1320 1444 +3 1201 1107 1207 +3 1201 1207 1308 +3 1112 1009 1107 +3 1112 1107 1201 +3 1021 930 1009 +3 1021 1009 1112 +3 946 853 930 +3 946 930 1021 +3 875 776 853 +3 875 853 946 +3 814 723 776 +3 814 776 875 +3 750 661 723 +3 750 723 814 +3 711 619 661 +3 711 661 750 +3 657 569 619 +3 657 619 711 +3 630 538 569 +3 630 569 657 +3 592 507 538 +3 592 538 630 +3 564 477 507 +3 564 507 592 +3 549 468 477 +3 549 477 564 +3 533 455 468 +3 533 468 549 +3 526 448 455 +3 526 455 533 +3 524 446 448 +3 524 448 526 +3 527 452 446 +3 527 446 524 +3 534 464 452 +3 534 452 527 +3 550 475 464 +3 550 464 534 +3 566 499 475 +3 566 475 550 +3 593 530 499 +3 593 499 566 +3 631 562 530 +3 631 530 593 +3 659 605 562 +3 659 562 631 +3 713 651 605 +3 713 605 659 +3 752 712 651 +3 752 651 713 +3 816 767 712 +3 816 712 752 +3 877 834 767 +3 877 767 816 +3 947 907 834 +3 947 834 877 +3 1023 989 907 +3 1023 907 947 +3 1113 1085 989 +3 1113 989 1023 +3 1204 1179 1085 +3 1204 1085 1113 +3 1311 1296 1179 +3 1311 1179 1204 +3 1445 1433 1296 +3 1445 1296 1311 +3 1569 1433 1445 +3 1569 1425 1433 +3 1433 1425 1286 +3 1433 1286 1296 +3 1296 1286 1156 +3 1296 1156 1179 +3 1179 1156 1053 +3 1179 1053 1085 +3 1085 1053 962 +3 1085 962 989 +3 989 962 874 +3 989 874 907 +3 907 874 795 +3 907 795 834 +3 834 795 727 +3 834 727 767 +3 767 727 656 +3 767 656 712 +3 712 656 603 +3 712 603 651 +3 651 603 555 +3 651 555 605 +3 605 555 511 +3 605 511 562 +3 562 511 471 +3 562 471 530 +3 530 471 441 +3 530 441 499 +3 499 441 411 +3 499 411 475 +3 475 411 396 +3 475 396 464 +3 464 396 386 +3 464 386 452 +3 452 386 376 +3 452 376 446 +3 446 376 375 +3 446 375 448 +3 448 375 380 +3 448 380 455 +3 455 380 391 +3 455 391 468 +3 468 391 403 +3 468 403 477 +3 477 403 430 +3 477 430 507 +3 507 430 458 +3 507 458 538 +3 538 458 490 +3 538 490 569 +3 569 490 535 +3 569 535 619 +3 619 535 577 +3 619 577 661 +3 661 577 637 +3 661 637 723 +3 723 637 698 +3 723 698 776 +3 776 698 764 +3 776 764 853 +3 853 764 841 +3 853 841 930 +3 930 841 925 +3 930 925 1009 +3 1009 925 1013 +3 1009 1013 1107 +3 1107 1013 1120 +3 1107 1120 1207 +3 1207 1120 1237 +3 1207 1237 1320 +3 1320 1237 1353 +3 1320 1353 1466 +3 1466 1353 1504 +3 1466 1504 1603 +3 1603 1504 1653 +3 1603 1653 1743 +3 1743 1653 1813 +3 1743 1813 1883 +3 1883 1813 1960 +3 1883 1960 2018 +3 2018 1960 2082 +3 2018 2082 2154 +3 2154 2082 2224 +3 2154 2224 2275 +3 2275 2224 2356 +3 2275 2356 2398 +3 2398 2356 2493 +3 2398 2493 2528 +3 2528 2493 2617 +3 2528 2617 2658 +3 2658 2617 2749 +3 2658 2749 2777 +3 2777 2749 2889 +3 2777 2889 2908 +3 2908 2889 3034 +3 2908 3034 3044 +3 3044 3034 3186 +3 3044 3186 3194 +3 3194 3186 3332 +3 3186 3176 3332 +3 3034 3023 3176 +3 3034 3176 3186 +3 2889 2870 3023 +3 2889 3023 3034 +3 2749 2726 2870 +3 2749 2870 2889 +3 2617 2588 2726 +3 2617 2726 2749 +3 2493 2454 2588 +3 2493 2588 2617 +3 2356 2318 2454 +3 2356 2454 2493 +3 2224 2179 2318 +3 2224 2318 2356 +3 2082 2036 2179 +3 2082 2179 2224 +3 1960 1885 2036 +3 1960 2036 2082 +3 1813 1728 1885 +3 1813 1885 1960 +3 1653 1572 1728 +3 1653 1728 1813 +3 1504 1420 1572 +3 1504 1572 1653 +3 1353 1274 1420 +3 1353 1420 1504 +3 1237 1147 1274 +3 1237 1274 1353 +3 1120 1036 1147 +3 1120 1147 1237 +3 1013 938 1036 +3 1013 1036 1120 +3 925 846 938 +3 925 938 1013 +3 841 759 846 +3 841 846 925 +3 764 680 759 +3 764 759 841 +3 698 626 680 +3 698 680 764 +3 637 559 626 +3 637 626 698 +3 577 506 559 +3 577 559 637 +3 535 461 506 +3 535 506 577 +3 490 418 461 +3 490 461 535 +3 458 388 418 +3 458 418 490 +3 430 357 388 +3 430 388 458 +3 403 338 357 +3 403 357 430 +3 391 322 338 +3 391 338 403 +3 380 312 322 +3 380 322 391 +3 375 309 312 +3 375 312 380 +3 376 311 309 +3 376 309 375 +3 386 320 311 +3 386 311 376 +3 396 337 320 +3 396 320 386 +3 411 356 337 +3 411 337 396 +3 441 387 356 +3 441 356 411 +3 471 416 387 +3 471 387 441 +3 511 459 416 +3 511 416 471 +3 555 504 459 +3 555 459 511 +3 603 557 504 +3 603 504 555 +3 656 623 557 +3 656 557 603 +3 727 679 623 +3 727 623 656 +3 795 755 679 +3 795 679 727 +3 874 843 755 +3 874 755 795 +3 962 936 843 +3 962 843 874 +3 1053 1034 936 +3 1053 936 962 +3 1156 1146 1034 +3 1156 1034 1053 +3 1286 1269 1146 +3 1286 1146 1156 +3 1425 1415 1269 +3 1425 1269 1286 +3 1569 1415 1425 +3 1569 1406 1415 +3 1415 1406 1261 +3 1415 1261 1269 +3 1269 1261 1131 +3 1269 1131 1146 +3 1146 1131 1011 +3 1146 1011 1034 +3 1034 1011 906 +3 1034 906 936 +3 936 906 818 +3 936 818 843 +3 843 818 730 +3 843 730 755 +3 755 730 649 +3 755 649 679 +3 679 649 576 +3 679 576 623 +3 623 576 522 +3 623 522 557 +3 557 522 466 +3 557 466 504 +3 504 466 408 +3 504 408 459 +3 459 408 372 +3 459 372 416 +3 416 372 335 +3 416 335 387 +3 387 335 308 +3 387 308 356 +3 356 308 284 +3 356 284 337 +3 337 284 265 +3 337 265 320 +3 320 265 256 +3 320 256 311 +3 311 256 251 +3 311 251 309 +3 309 251 254 +3 309 254 312 +3 312 254 262 +3 312 262 322 +3 322 262 273 +3 322 273 338 +3 338 273 295 +3 338 295 357 +3 357 295 321 +3 357 321 388 +3 388 321 352 +3 388 352 418 +3 418 352 395 +3 418 395 461 +3 461 395 440 +3 461 440 506 +3 506 440 489 +3 506 489 559 +3 559 489 554 +3 559 554 626 +3 626 554 622 +3 626 622 680 +3 680 622 691 +3 680 691 759 +3 759 691 771 +3 759 771 846 +3 846 771 865 +3 846 865 938 +3 938 865 966 +3 938 966 1036 +3 1036 966 1074 +3 1036 1074 1147 +3 1147 1074 1192 +3 1147 1192 1274 +3 1274 1192 1334 +3 1274 1334 1420 +3 1420 1334 1493 +3 1420 1493 1572 +3 1572 1493 1658 +3 1572 1658 1728 +3 1728 1658 1831 +3 1728 1831 1885 +3 1885 1831 1984 +3 1885 1984 2036 +3 2036 1984 2139 +3 2036 2139 2179 +3 2179 2139 2274 +3 2179 2274 2318 +3 2318 2274 2415 +3 2318 2415 2454 +3 2454 2415 2558 +3 2454 2558 2588 +3 2588 2558 2707 +3 2588 2707 2726 +3 2726 2707 2854 +3 2726 2854 2870 +3 2870 2854 3006 +3 2870 3006 3023 +3 3023 3006 3169 +3 3023 3169 3176 +3 3176 3169 3332 +3 3169 3162 3332 +3 3006 2997 3162 +3 3006 3162 3169 +3 2854 2838 2997 +3 2854 2997 3006 +3 2707 2685 2838 +3 2707 2838 2854 +3 2558 2538 2685 +3 2558 2685 2707 +3 2415 2388 2538 +3 2415 2538 2558 +3 2274 2237 2388 +3 2274 2388 2415 +3 2139 2080 2237 +3 2139 2237 2274 +3 1984 1934 2080 +3 1984 2080 2139 +3 1831 1781 1934 +3 1831 1934 1984 +3 1658 1597 1781 +3 1658 1781 1831 +3 1493 1429 1597 +3 1493 1597 1658 +3 1334 1268 1429 +3 1334 1429 1493 +3 1192 1138 1268 +3 1192 1268 1334 +3 1074 1010 1138 +3 1074 1138 1192 +3 966 899 1010 +3 966 1010 1074 +3 865 803 899 +3 865 899 966 +3 771 718 803 +3 771 803 865 +3 691 633 718 +3 691 718 771 +3 622 556 633 +3 622 633 691 +3 554 488 556 +3 554 556 622 +3 489 434 488 +3 489 488 554 +3 440 382 434 +3 440 434 489 +3 395 333 382 +3 395 382 440 +3 352 299 333 +3 352 333 395 +3 321 263 299 +3 321 299 352 +3 295 239 263 +3 295 263 321 +3 273 220 239 +3 273 239 295 +3 262 206 220 +3 262 220 273 +3 254 198 206 +3 254 206 262 +3 251 197 198 +3 251 198 254 +3 256 204 197 +3 256 197 251 +3 265 216 204 +3 265 204 256 +3 284 233 216 +3 284 216 265 +3 308 261 233 +3 308 233 284 +3 335 290 261 +3 335 261 308 +3 372 328 290 +3 372 290 335 +3 408 373 328 +3 408 328 372 +3 466 423 373 +3 466 373 408 +3 522 476 423 +3 522 423 466 +3 576 547 476 +3 576 476 522 +3 649 625 547 +3 649 547 576 +3 730 704 625 +3 730 625 649 +3 818 783 704 +3 818 704 730 +3 906 882 783 +3 906 783 818 +3 1011 991 882 +3 1011 882 906 +3 1131 1116 991 +3 1131 991 1011 +3 1261 1250 1116 +3 1261 1116 1131 +3 1406 1399 1250 +3 1406 1250 1261 +3 1569 1399 1406 +3 1569 1389 1399 +3 1399 1389 1244 +3 1399 1244 1250 +3 1250 1244 1101 +3 1250 1101 1116 +3 1116 1101 977 +3 1116 977 991 +3 991 977 866 +3 991 866 882 +3 882 866 766 +3 882 766 783 +3 783 766 671 +3 783 671 704 +3 704 671 590 +3 704 590 625 +3 625 590 519 +3 625 519 547 +3 547 519 451 +3 547 451 476 +3 476 451 392 +3 476 392 423 +3 423 392 339 +3 423 339 373 +3 373 339 291 +3 373 291 328 +3 328 291 253 +3 328 253 290 +3 290 253 219 +3 290 219 261 +3 261 219 196 +3 261 196 233 +3 233 196 175 +3 233 175 216 +3 216 175 161 +3 216 161 204 +3 204 161 152 +3 204 152 197 +3 197 152 151 +3 197 151 198 +3 198 151 158 +3 198 158 206 +3 206 158 172 +3 206 172 220 +3 220 172 189 +3 220 189 239 +3 239 189 214 +3 239 214 263 +3 263 214 246 +3 263 246 299 +3 299 246 285 +3 299 285 333 +3 333 285 327 +3 333 327 382 +3 382 327 381 +3 382 381 434 +3 434 381 439 +3 434 439 488 +3 488 439 503 +3 488 503 556 +3 556 503 575 +3 556 575 633 +3 633 575 653 +3 633 653 718 +3 718 653 746 +3 718 746 803 +3 803 746 850 +3 803 850 899 +3 899 850 957 +3 899 957 1010 +3 1010 957 1076 +3 1010 1076 1138 +3 1138 1076 1212 +3 1138 1212 1268 +3 1268 1212 1358 +3 1268 1358 1429 +3 1429 1358 1535 +3 1429 1535 1597 +3 1597 1535 1709 +3 1597 1709 1781 +3 1781 1709 1888 +3 1781 1888 1934 +3 1934 1888 2050 +3 1934 2050 2080 +3 2080 2050 2206 +3 2080 2206 2237 +3 2237 2206 2361 +3 2237 2361 2388 +3 2388 2361 2514 +3 2388 2514 2538 +3 2538 2514 2668 +3 2538 2668 2685 +3 2685 2668 2827 +3 2685 2827 2838 +3 2838 2827 2987 +3 2838 2987 2997 +3 2997 2987 3153 +3 2997 3153 3162 +3 3162 3153 3332 +3 3153 3150 3332 +3 2987 2975 3150 +3 2987 3150 3153 +3 2827 2814 2975 +3 2827 2975 2987 +3 2668 2656 2814 +3 2668 2814 2827 +3 2514 2499 2656 +3 2514 2656 2668 +3 2361 2341 2499 +3 2361 2499 2514 +3 2206 2185 2341 +3 2206 2341 2361 +3 2050 2019 2185 +3 2050 2185 2206 +3 1888 1851 2019 +3 1888 2019 2050 +3 1709 1663 1851 +3 1709 1851 1888 +3 1535 1487 1663 +3 1535 1663 1709 +3 1358 1307 1487 +3 1358 1487 1535 +3 1212 1154 1307 +3 1212 1307 1358 +3 1076 1028 1154 +3 1076 1154 1212 +3 957 909 1028 +3 957 1028 1076 +3 850 802 909 +3 850 909 957 +3 746 706 802 +3 746 802 850 +3 653 617 706 +3 653 706 746 +3 575 532 617 +3 575 617 653 +3 503 460 532 +3 503 532 575 +3 439 394 460 +3 439 460 503 +3 381 332 394 +3 381 394 439 +3 327 286 332 +3 327 332 381 +3 285 240 286 +3 285 286 327 +3 246 200 240 +3 246 240 285 +3 214 173 200 +3 214 200 246 +3 189 145 173 +3 189 173 214 +3 172 131 145 +3 172 145 189 +3 158 116 131 +3 158 131 172 +3 151 113 116 +3 151 116 158 +3 152 114 113 +3 152 113 151 +3 161 121 114 +3 161 114 152 +3 175 139 121 +3 175 121 161 +3 196 155 139 +3 196 139 175 +3 219 183 155 +3 219 155 196 +3 253 217 183 +3 253 183 219 +3 291 260 217 +3 291 217 253 +3 339 307 260 +3 339 260 291 +3 392 362 307 +3 392 307 339 +3 451 421 362 +3 451 362 392 +3 519 486 421 +3 519 421 451 +3 590 565 486 +3 590 486 519 +3 671 650 565 +3 671 565 590 +3 766 744 650 +3 766 650 671 +3 866 852 744 +3 866 744 766 +3 977 963 852 +3 977 852 866 +3 1101 1090 963 +3 1101 963 977 +3 1244 1230 1090 +3 1244 1090 1101 +3 1389 1384 1230 +3 1389 1230 1244 +3 1569 1384 1389 +3 1569 1380 1384 +3 1384 1380 1222 +3 1384 1222 1230 +3 1230 1222 1078 +3 1230 1078 1090 +3 1090 1078 952 +3 1090 952 963 +3 963 952 835 +3 963 835 852 +3 852 835 731 +3 852 731 744 +3 744 731 636 +3 744 636 650 +3 650 636 548 +3 650 548 565 +3 565 548 469 +3 565 469 486 +3 486 469 397 +3 486 397 421 +3 421 397 334 +3 421 334 362 +3 362 334 279 +3 362 279 307 +3 307 279 231 +3 307 231 260 +3 260 231 188 +3 260 188 217 +3 217 188 153 +3 217 153 183 +3 183 153 127 +3 183 127 155 +3 155 127 104 +3 155 104 139 +3 139 104 91 +3 139 91 121 +3 121 91 79 +3 121 79 114 +3 114 79 77 +3 114 77 113 +3 113 77 85 +3 113 85 116 +3 116 85 93 +3 116 93 131 +3 131 93 109 +3 131 109 145 +3 145 109 136 +3 145 136 173 +3 173 136 166 +3 173 166 200 +3 200 166 201 +3 200 201 240 +3 240 201 247 +3 240 247 286 +3 286 247 300 +3 286 300 332 +3 332 300 353 +3 332 353 394 +3 394 353 420 +3 394 420 460 +3 460 420 492 +3 460 492 532 +3 532 492 571 +3 532 571 617 +3 617 571 660 +3 617 660 706 +3 706 660 761 +3 706 761 802 +3 802 761 870 +3 802 870 909 +3 909 870 988 +3 909 988 1028 +3 1028 988 1125 +3 1028 1125 1154 +3 1154 1125 1272 +3 1154 1272 1307 +3 1307 1272 1448 +3 1307 1448 1487 +3 1487 1448 1626 +3 1487 1626 1663 +3 1663 1626 1825 +3 1663 1825 1851 +3 1851 1825 1997 +3 1851 1997 2019 +3 2019 1997 2162 +3 2019 2162 2185 +3 2185 2162 2321 +3 2185 2321 2341 +3 2341 2321 2480 +3 2341 2480 2499 +3 2499 2480 2644 +3 2499 2644 2656 +3 2656 2644 2802 +3 2656 2802 2814 +3 2814 2802 2965 +3 2814 2965 2975 +3 2975 2965 3145 +3 2975 3145 3150 +3 3150 3145 3332 +3 3145 3138 3332 +3 2965 2957 3138 +3 2965 3138 3145 +3 2802 2790 2957 +3 2802 2957 2965 +3 2644 2624 2790 +3 2644 2790 2802 +3 2480 2463 2624 +3 2480 2624 2644 +3 2321 2304 2463 +3 2321 2463 2480 +3 2162 2145 2304 +3 2162 2304 2321 +3 1997 1975 2145 +3 1997 2145 2162 +3 1825 1796 1975 +3 1825 1975 1997 +3 1626 1598 1796 +3 1626 1796 1825 +3 1448 1411 1598 +3 1448 1598 1626 +3 1272 1245 1411 +3 1272 1411 1448 +3 1125 1091 1245 +3 1125 1245 1272 +3 988 958 1091 +3 988 1091 1125 +3 870 839 958 +3 870 958 988 +3 761 733 839 +3 761 839 870 +3 660 634 733 +3 660 733 761 +3 571 544 634 +3 571 634 660 +3 492 465 544 +3 492 544 571 +3 420 390 465 +3 420 465 492 +3 353 325 390 +3 353 390 420 +3 300 264 325 +3 300 325 353 +3 247 215 264 +3 247 264 300 +3 201 174 215 +3 201 215 247 +3 166 137 174 +3 166 174 201 +3 136 105 137 +3 136 137 166 +3 109 82 105 +3 109 105 136 +3 93 67 82 +3 93 82 109 +3 85 55 67 +3 85 67 93 +3 77 49 55 +3 77 55 85 +3 79 52 49 +3 79 49 77 +3 91 64 52 +3 91 52 79 +3 104 76 64 +3 104 64 91 +3 127 100 76 +3 127 76 104 +3 153 132 100 +3 153 100 127 +3 188 167 132 +3 188 132 153 +3 231 208 167 +3 231 167 188 +3 279 257 208 +3 279 208 231 +3 334 313 257 +3 334 257 279 +3 397 379 313 +3 397 313 334 +3 469 453 379 +3 469 379 397 +3 548 531 453 +3 548 453 469 +3 636 621 531 +3 636 531 548 +3 731 719 621 +3 731 621 636 +3 835 824 719 +3 835 719 731 +3 952 942 824 +3 952 824 835 +3 1078 1067 942 +3 1078 942 952 +3 1222 1215 1067 +3 1222 1067 1078 +3 1380 1378 1215 +3 1380 1215 1222 +3 1569 1378 1380 +3 1569 1372 1378 +3 1378 1372 1209 +3 1378 1209 1215 +3 1215 1209 1059 +3 1215 1059 1067 +3 1067 1059 933 +3 1067 933 942 +3 942 933 815 +3 942 815 824 +3 824 815 707 +3 824 707 719 +3 719 707 608 +3 719 608 621 +3 621 608 520 +3 621 520 531 +3 531 520 436 +3 531 436 453 +3 453 436 364 +3 453 364 379 +3 379 364 302 +3 379 302 313 +3 313 302 242 +3 313 242 257 +3 257 242 190 +3 257 190 208 +3 208 190 147 +3 208 147 167 +3 167 147 110 +3 167 110 132 +3 132 110 80 +3 132 80 100 +3 100 80 61 +3 100 61 76 +3 76 61 42 +3 76 42 64 +3 64 42 33 +3 64 33 52 +3 52 33 29 +3 52 29 49 +3 49 29 34 +3 49 34 55 +3 55 34 43 +3 55 43 67 +3 67 43 62 +3 67 62 82 +3 82 62 83 +3 82 83 105 +3 105 83 111 +3 105 111 137 +3 137 111 148 +3 137 148 174 +3 174 148 192 +3 174 192 215 +3 215 192 243 +3 215 243 264 +3 264 243 303 +3 264 303 325 +3 325 303 365 +3 325 365 390 +3 390 365 438 +3 390 438 465 +3 465 438 521 +3 465 521 544 +3 544 521 609 +3 544 609 634 +3 634 609 710 +3 634 710 733 +3 733 710 817 +3 733 817 839 +3 839 817 935 +3 839 935 958 +3 958 935 1063 +3 958 1063 1091 +3 1091 1063 1211 +3 1091 1211 1245 +3 1245 1211 1374 +3 1245 1374 1411 +3 1411 1374 1571 +3 1411 1571 1598 +3 1598 1571 1772 +3 1598 1772 1796 +3 1796 1772 1953 +3 1796 1953 1975 +3 1975 1953 2125 +3 1975 2125 2145 +3 2145 2125 2290 +3 2145 2290 2304 +3 2304 2290 2452 +3 2304 2452 2463 +3 2463 2452 2613 +3 2463 2613 2624 +3 2624 2613 2779 +3 2624 2779 2790 +3 2790 2779 2951 +3 2790 2951 2957 +3 2957 2951 3131 +3 2957 3131 3138 +3 3138 3131 3332 +3 3131 3128 3332 +3 2951 2944 3128 +3 2951 3128 3131 +3 2779 2772 2944 +3 2779 2944 2951 +3 2613 2605 2772 +3 2613 2772 2779 +3 2452 2444 2605 +3 2452 2605 2613 +3 2290 2279 2444 +3 2290 2444 2452 +3 2125 2107 2279 +3 2125 2279 2290 +3 1953 1935 2107 +3 1953 2107 2125 +3 1772 1746 1935 +3 1772 1935 1953 +3 1571 1550 1746 +3 1571 1746 1772 +3 1374 1354 1550 +3 1374 1550 1571 +3 1211 1185 1354 +3 1211 1354 1374 +3 1063 1041 1185 +3 1063 1185 1211 +3 935 912 1041 +3 935 1041 1063 +3 817 794 912 +3 817 912 935 +3 710 681 794 +3 710 794 817 +3 609 584 681 +3 609 681 710 +3 521 497 584 +3 521 584 609 +3 438 417 497 +3 438 497 521 +3 365 348 417 +3 365 417 438 +3 303 282 348 +3 303 348 365 +3 243 225 282 +3 243 282 303 +3 192 176 225 +3 192 225 243 +3 148 133 176 +3 148 176 192 +3 111 94 133 +3 111 133 148 +3 83 66 94 +3 83 94 111 +3 62 41 66 +3 62 66 83 +3 43 24 41 +3 43 41 62 +3 34 18 24 +3 34 24 43 +3 29 12 18 +3 29 18 34 +3 33 19 12 +3 33 12 29 +3 42 25 19 +3 42 19 33 +3 61 44 25 +3 61 25 42 +3 80 68 44 +3 80 44 61 +3 110 98 68 +3 110 68 80 +3 147 135 98 +3 147 98 110 +3 190 180 135 +3 190 135 147 +3 242 230 180 +3 242 180 190 +3 302 288 230 +3 302 230 242 +3 364 350 288 +3 364 288 302 +3 436 429 350 +3 436 350 364 +3 520 509 429 +3 520 429 436 +3 608 596 509 +3 608 509 520 +3 707 699 596 +3 707 596 608 +3 815 806 699 +3 815 699 707 +3 933 927 806 +3 933 806 815 +3 1059 1056 927 +3 1059 927 933 +3 1209 1202 1056 +3 1209 1056 1059 +3 1372 1370 1202 +3 1372 1202 1209 +3 1569 1370 1372 +3 1569 1367 1370 +3 1370 1367 1197 +3 1370 1197 1202 +3 1202 1197 1049 +3 1202 1049 1056 +3 1056 1049 924 +3 1056 924 927 +3 927 924 801 +3 927 801 806 +3 806 801 689 +3 806 689 699 +3 699 689 591 +3 699 591 596 +3 596 591 500 +3 596 500 509 +3 509 500 419 +3 509 419 429 +3 429 419 347 +3 429 347 350 +3 350 347 280 +3 350 280 288 +3 288 280 223 +3 288 223 230 +3 230 223 171 +3 230 171 180 +3 180 171 126 +3 180 126 135 +3 135 126 90 +3 135 90 98 +3 98 90 60 +3 98 60 68 +3 68 60 36 +3 68 36 44 +3 44 36 20 +3 44 20 25 +3 25 20 8 +3 25 8 19 +3 19 8 3 +3 19 3 12 +3 12 3 7 +3 12 7 18 +3 18 7 16 +3 18 16 24 +3 24 16 32 +3 24 32 41 +3 41 32 54 +3 41 54 66 +3 66 54 86 +3 66 86 94 +3 94 86 120 +3 94 120 133 +3 133 120 164 +3 133 164 176 +3 176 164 213 +3 176 213 225 +3 225 213 269 +3 225 269 282 +3 282 269 336 +3 282 336 348 +3 348 336 405 +3 348 405 417 +3 417 405 485 +3 417 485 497 +3 497 485 574 +3 497 574 584 +3 584 574 674 +3 584 674 681 +3 681 674 779 +3 681 779 794 +3 794 779 900 +3 794 900 912 +3 912 900 1033 +3 912 1033 1041 +3 1041 1033 1172 +3 1041 1172 1185 +3 1185 1172 1343 +3 1185 1343 1354 +3 1354 1343 1537 +3 1354 1537 1550 +3 1550 1537 1733 +3 1550 1733 1746 +3 1746 1733 1922 +3 1746 1922 1935 +3 1935 1922 2098 +3 1935 2098 2107 +3 2107 2098 2270 +3 2107 2270 2279 +3 2279 2270 2437 +3 2279 2437 2444 +3 2444 2437 2601 +3 2444 2601 2605 +3 2605 2601 2768 +3 2605 2768 2772 +3 2772 2768 2939 +3 2772 2939 2944 +3 2944 2939 3125 +3 2944 3125 3128 +3 3128 3125 3332 +3 3125 3123 3332 +3 2939 2937 3123 +3 2939 3123 3125 +3 2768 2765 2937 +3 2768 2937 2939 +3 2601 2599 2765 +3 2601 2765 2768 +3 2437 2432 2599 +3 2437 2599 2601 +3 2270 2263 2432 +3 2270 2432 2437 +3 2098 2092 2263 +3 2098 2263 2270 +3 1922 1918 2092 +3 1922 2092 2098 +3 1733 1729 1918 +3 1733 1918 1922 +3 1537 1531 1729 +3 1537 1729 1733 +3 1343 1336 1531 +3 1343 1531 1537 +3 1172 1166 1336 +3 1172 1336 1343 +3 1033 1027 1166 +3 1033 1166 1172 +3 900 892 1027 +3 900 1027 1033 +3 779 775 892 +3 779 892 900 +3 674 667 775 +3 674 775 779 +3 574 570 667 +3 574 667 674 +3 485 482 570 +3 485 570 574 +3 405 401 482 +3 405 482 485 +3 336 330 401 +3 336 401 405 +3 269 266 330 +3 269 330 336 +3 213 209 266 +3 213 266 269 +3 164 157 209 +3 164 209 213 +3 120 115 157 +3 120 157 164 +3 86 78 115 +3 86 115 120 +3 54 48 78 +3 54 78 86 +3 32 28 48 +3 32 48 54 +3 16 10 28 +3 16 28 32 +3 7 2 10 +3 7 10 16 +3 3 0 2 +3 3 2 7 +3 8 4 0 +3 8 0 3 +3 20 15 4 +3 20 4 8 +3 36 31 15 +3 36 15 20 +3 60 56 31 +3 60 31 36 +3 90 88 56 +3 90 56 60 +3 126 122 88 +3 126 88 90 +3 171 168 122 +3 171 122 126 +3 223 218 168 +3 223 168 171 +3 280 274 218 +3 280 218 223 +3 347 344 274 +3 347 274 280 +3 419 414 344 +3 419 344 347 +3 500 495 414 +3 500 414 419 +3 591 585 495 +3 591 495 500 +3 689 683 585 +3 689 585 591 +3 801 799 683 +3 801 683 689 +3 924 920 799 +3 924 799 801 +3 1049 1047 920 +3 1049 920 924 +3 1197 1195 1047 +3 1197 1047 1049 +3 1367 1365 1195 +3 1367 1195 1197 +3 1569 1365 1367 +3 1569 1366 1365 +3 1365 1366 1196 +3 1365 1196 1195 +3 1195 1196 1048 +3 1195 1048 1047 +3 1047 1048 921 +3 1047 921 920 +3 920 921 800 +3 920 800 799 +3 799 800 687 +3 799 687 683 +3 683 687 588 +3 683 588 585 +3 585 588 498 +3 585 498 495 +3 495 498 415 +3 495 415 414 +3 414 415 345 +3 414 345 344 +3 344 345 277 +3 344 277 274 +3 274 277 221 +3 274 221 218 +3 218 221 169 +3 218 169 168 +3 168 169 124 +3 168 124 122 +3 122 124 89 +3 122 89 88 +3 88 89 58 +3 88 58 56 +3 56 58 35 +3 56 35 31 +3 31 35 17 +3 31 17 15 +3 15 17 6 +3 15 6 4 +3 4 6 1 +3 4 1 0 +3 0 1 5 +3 0 5 2 +3 2 5 14 +3 2 14 10 +3 10 14 30 +3 10 30 28 +3 28 30 50 +3 28 50 48 +3 48 50 84 +3 48 84 78 +3 78 84 117 +3 78 117 115 +3 115 117 162 +3 115 162 157 +3 157 162 212 +3 157 212 209 +3 209 212 267 +3 209 267 266 +3 266 267 331 +3 266 331 330 +3 330 331 404 +3 330 404 401 +3 401 404 484 +3 401 484 482 +3 482 484 573 +3 482 573 570 +3 570 573 670 +3 570 670 667 +3 667 670 778 +3 667 778 775 +3 775 778 895 +3 775 895 892 +3 892 895 1032 +3 892 1032 1027 +3 1027 1032 1169 +3 1027 1169 1166 +3 1166 1169 1340 +3 1166 1340 1336 +3 1336 1340 1534 +3 1336 1534 1531 +3 1531 1534 1730 +3 1531 1730 1729 +3 1729 1730 1921 +3 1729 1921 1918 +3 1918 1921 2095 +3 1918 2095 2092 +3 2092 2095 2267 +3 2092 2267 2263 +3 2263 2267 2435 +3 2263 2435 2432 +3 2432 2435 2600 +3 2432 2600 2599 +3 2599 2600 2767 +3 2599 2767 2765 +3 2765 2767 2938 +3 2765 2938 2937 +3 2937 2938 3124 +3 2937 3124 3123 +3 3123 3124 3332 +3 3124 3127 3332 +3 2938 2942 3127 +3 2938 3127 3124 +3 2767 2770 2942 +3 2767 2942 2938 +3 2600 2604 2770 +3 2600 2770 2767 +3 2435 2439 2604 +3 2435 2604 2600 +3 2267 2273 2439 +3 2267 2439 2435 +3 2095 2104 2273 +3 2095 2273 2267 +3 1921 1930 2104 +3 1921 2104 2095 +3 1730 1742 1930 +3 1730 1930 1921 +3 1534 1543 1742 +3 1534 1742 1730 +3 1340 1351 1543 +3 1340 1543 1534 +3 1169 1182 1351 +3 1169 1351 1340 +3 1032 1040 1182 +3 1032 1182 1169 +3 895 910 1040 +3 895 1040 1032 +3 778 787 910 +3 778 910 895 +3 670 678 787 +3 670 787 778 +3 573 581 678 +3 573 678 670 +3 484 494 581 +3 484 581 573 +3 404 412 494 +3 404 494 484 +3 331 343 412 +3 331 412 404 +3 267 275 343 +3 267 343 331 +3 212 222 275 +3 212 275 267 +3 162 170 222 +3 162 222 212 +3 117 129 170 +3 117 170 162 +3 84 92 129 +3 84 129 117 +3 50 63 92 +3 50 92 84 +3 30 39 63 +3 30 63 50 +3 14 21 39 +3 14 39 30 +3 5 11 21 +3 5 21 14 +3 1 9 11 +3 1 11 5 +3 6 13 9 +3 6 9 1 +3 17 22 13 +3 17 13 6 +3 35 40 22 +3 35 22 17 +3 58 65 40 +3 58 40 35 +3 89 95 65 +3 89 65 58 +3 124 134 95 +3 124 95 89 +3 169 177 134 +3 169 134 124 +3 221 228 177 +3 221 177 169 +3 277 287 228 +3 277 228 221 +3 345 349 287 +3 345 287 277 +3 415 424 349 +3 415 349 345 +3 498 505 424 +3 498 424 415 +3 588 594 505 +3 588 505 498 +3 687 696 594 +3 687 594 588 +3 800 805 696 +3 800 696 687 +3 921 926 805 +3 921 805 800 +3 1048 1052 926 +3 1048 926 921 +3 1196 1199 1052 +3 1196 1052 1048 +3 1366 1369 1199 +3 1366 1199 1196 +3 1569 1369 1366 +3 1569 1371 1369 +3 1369 1371 1206 +3 1369 1206 1199 +3 1199 1206 1058 +3 1199 1058 1052 +3 1052 1058 931 +3 1052 931 926 +3 926 931 812 +3 926 812 805 +3 805 812 705 +3 805 705 696 +3 696 705 604 +3 696 604 594 +3 594 604 518 +3 594 518 505 +3 505 518 435 +3 505 435 424 +3 424 435 361 +3 424 361 349 +3 349 361 297 +3 349 297 287 +3 287 297 238 +3 287 238 228 +3 228 238 187 +3 228 187 177 +3 177 187 143 +3 177 143 134 +3 134 143 107 +3 134 107 95 +3 95 107 75 +3 95 75 65 +3 65 75 53 +3 65 53 40 +3 40 53 38 +3 40 38 22 +3 22 38 27 +3 22 27 13 +3 13 27 23 +3 13 23 9 +3 9 23 26 +3 9 26 11 +3 11 26 37 +3 11 37 21 +3 21 37 51 +3 21 51 39 +3 39 51 74 +3 39 74 63 +3 63 74 106 +3 63 106 92 +3 92 106 142 +3 92 142 129 +3 129 142 184 +3 129 184 170 +3 170 184 235 +3 170 235 222 +3 222 235 294 +3 222 294 275 +3 275 294 358 +3 275 358 343 +3 343 358 433 +3 343 433 412 +3 412 433 514 +3 412 514 494 +3 494 514 601 +3 494 601 581 +3 581 601 703 +3 581 703 678 +3 678 703 810 +3 678 810 787 +3 787 810 929 +3 787 929 910 +3 910 929 1055 +3 910 1055 1040 +3 1040 1055 1198 +3 1040 1198 1182 +3 1182 1198 1364 +3 1182 1364 1351 +3 1351 1364 1562 +3 1351 1562 1543 +3 1543 1562 1761 +3 1543 1761 1742 +3 1742 1761 1949 +3 1742 1949 1930 +3 1930 1949 2117 +3 1930 2117 2104 +3 2104 2117 2286 +3 2104 2286 2273 +3 2273 2286 2446 +3 2273 2446 2439 +3 2439 2446 2608 +3 2439 2608 2604 +3 2604 2608 2775 +3 2604 2775 2770 +3 2770 2775 2949 +3 2770 2949 2942 +3 2942 2949 3130 +3 2942 3130 3127 +3 3127 3130 3332 +3 3130 3137 3332 +3 2949 2954 3137 +3 2949 3137 3130 +3 2775 2786 2954 +3 2775 2954 2949 +3 2608 2619 2786 +3 2608 2786 2775 +3 2446 2461 2619 +3 2446 2619 2608 +3 2286 2299 2461 +3 2286 2461 2446 +3 2117 2140 2299 +3 2117 2299 2286 +3 1949 1968 2140 +3 1949 2140 2117 +3 1761 1792 1968 +3 1761 1968 1949 +3 1562 1588 1792 +3 1562 1792 1761 +3 1364 1397 1588 +3 1364 1588 1562 +3 1198 1234 1397 +3 1198 1397 1364 +3 1055 1084 1234 +3 1055 1234 1198 +3 929 951 1084 +3 929 1084 1055 +3 810 833 951 +3 810 951 929 +3 703 726 833 +3 703 833 810 +3 601 629 726 +3 601 726 703 +3 514 537 629 +3 514 629 601 +3 433 456 537 +3 433 537 514 +3 358 384 456 +3 358 456 433 +3 294 315 384 +3 294 384 358 +3 235 258 315 +3 235 315 294 +3 184 207 258 +3 184 258 235 +3 142 165 207 +3 142 207 184 +3 106 130 165 +3 106 165 142 +3 74 99 130 +3 74 130 106 +3 51 73 99 +3 51 99 74 +3 37 59 73 +3 37 73 51 +3 26 47 59 +3 26 59 37 +3 23 45 47 +3 23 47 26 +3 27 46 45 +3 27 45 23 +3 38 57 46 +3 38 46 27 +3 53 70 57 +3 53 57 38 +3 75 96 70 +3 75 70 53 +3 107 123 96 +3 107 96 75 +3 143 159 123 +3 143 123 107 +3 187 202 159 +3 187 159 143 +3 238 255 202 +3 238 202 187 +3 297 310 255 +3 297 255 238 +3 361 374 310 +3 361 310 297 +3 435 449 374 +3 435 374 361 +3 518 528 449 +3 518 449 435 +3 604 618 528 +3 604 528 518 +3 705 716 618 +3 705 618 604 +3 812 823 716 +3 812 716 705 +3 931 939 823 +3 931 823 812 +3 1058 1066 939 +3 1058 939 931 +3 1206 1214 1066 +3 1206 1066 1058 +3 1371 1376 1214 +3 1371 1214 1206 +3 1569 1376 1371 +3 1569 1379 1376 +3 1376 1379 1220 +3 1376 1220 1214 +3 1214 1220 1072 +3 1214 1072 1066 +3 1066 1072 948 +3 1066 948 939 +3 939 948 832 +3 939 832 823 +3 823 832 729 +3 823 729 716 +3 716 729 632 +3 716 632 618 +3 618 632 542 +3 618 542 528 +3 528 542 467 +3 528 467 449 +3 449 467 393 +3 449 393 374 +3 374 393 329 +3 374 329 310 +3 310 329 272 +3 310 272 255 +3 255 272 227 +3 255 227 202 +3 202 227 181 +3 202 181 159 +3 159 181 146 +3 159 146 123 +3 123 146 119 +3 123 119 96 +3 96 119 97 +3 96 97 70 +3 70 97 81 +3 70 81 57 +3 57 81 71 +3 57 71 46 +3 46 71 69 +3 46 69 45 +3 45 69 72 +3 45 72 47 +3 47 72 87 +3 47 87 59 +3 59 87 101 +3 59 101 73 +3 73 101 125 +3 73 125 99 +3 99 125 154 +3 99 154 130 +3 130 154 195 +3 130 195 165 +3 165 195 236 +3 165 236 207 +3 207 236 289 +3 207 289 258 +3 258 289 346 +3 258 346 315 +3 315 346 407 +3 315 407 384 +3 384 407 479 +3 384 479 456 +3 456 479 563 +3 456 563 537 +3 537 563 652 +3 537 652 629 +3 629 652 748 +3 629 748 726 +3 726 748 856 +3 726 856 833 +3 833 856 978 +3 833 978 951 +3 951 978 1114 +3 951 1114 1084 +3 1084 1114 1263 +3 1084 1263 1234 +3 1234 1263 1438 +3 1234 1438 1397 +3 1397 1438 1616 +3 1397 1616 1588 +3 1588 1616 1814 +3 1588 1814 1792 +3 1792 1814 1986 +3 1792 1986 1968 +3 1968 1986 2155 +3 1968 2155 2140 +3 2140 2155 2315 +3 2140 2315 2299 +3 2299 2315 2476 +3 2299 2476 2461 +3 2461 2476 2639 +3 2461 2639 2619 +3 2619 2639 2798 +3 2619 2798 2786 +3 2786 2798 2963 +3 2786 2963 2954 +3 2954 2963 3143 +3 2954 3143 3137 +3 3137 3143 3332 +3 3143 3148 3332 +3 2963 2973 3148 +3 2963 3148 3143 +3 2798 2811 2973 +3 2798 2973 2963 +3 2639 2653 2811 +3 2639 2811 2798 +3 2476 2494 2653 +3 2476 2653 2639 +3 2315 2336 2494 +3 2315 2494 2476 +3 2155 2176 2336 +3 2155 2336 2315 +3 1986 2011 2176 +3 1986 2176 2155 +3 1814 1845 2011 +3 1814 2011 1986 +3 1616 1656 1845 +3 1616 1845 1814 +3 1438 1474 1656 +3 1438 1656 1616 +3 1263 1297 1474 +3 1263 1474 1438 +3 1114 1149 1297 +3 1114 1297 1263 +3 978 1015 1149 +3 978 1149 1114 +3 856 891 1015 +3 856 1015 978 +3 748 785 891 +3 748 891 856 +3 652 688 785 +3 652 785 748 +3 563 602 688 +3 563 688 652 +3 479 523 602 +3 479 602 563 +3 407 450 523 +3 407 523 479 +3 346 385 450 +3 346 450 407 +3 289 324 385 +3 289 385 346 +3 236 271 324 +3 236 324 289 +3 195 229 271 +3 195 271 236 +3 154 191 229 +3 154 229 195 +3 125 160 191 +3 125 191 154 +3 101 138 160 +3 101 160 125 +3 87 118 138 +3 87 138 101 +3 72 108 118 +3 72 118 87 +3 69 102 108 +3 69 108 72 +3 71 103 102 +3 71 102 69 +3 81 112 103 +3 81 103 71 +3 97 128 112 +3 97 112 81 +3 119 149 128 +3 119 128 97 +3 146 178 149 +3 146 149 119 +3 181 211 178 +3 181 178 146 +3 227 250 211 +3 227 211 181 +3 272 301 250 +3 272 250 227 +3 329 351 301 +3 329 301 272 +3 393 410 351 +3 393 351 329 +3 467 480 410 +3 467 410 393 +3 542 560 480 +3 542 480 467 +3 632 647 560 +3 632 560 542 +3 729 739 647 +3 729 647 632 +3 832 845 739 +3 832 739 729 +3 948 960 845 +3 948 845 832 +3 1072 1088 960 +3 1072 960 948 +3 1220 1229 1088 +3 1220 1088 1072 +3 1379 1383 1229 +3 1379 1229 1220 +3 1569 1383 1379 +3 1569 1387 1383 +3 1383 1387 1242 +3 1383 1242 1229 +3 1229 1242 1097 +3 1229 1097 1088 +3 1088 1097 972 +3 1088 972 960 +3 960 972 858 +3 960 858 845 +3 845 858 754 +3 845 754 739 +3 739 754 663 +3 739 663 647 +3 647 663 580 +3 647 580 560 +3 560 580 510 +3 560 510 480 +3 480 510 443 +3 480 443 410 +3 410 443 383 +3 410 383 351 +3 351 383 326 +3 351 326 301 +3 301 326 281 +3 301 281 250 +3 250 281 244 +3 250 244 211 +3 211 244 210 +3 211 210 178 +3 178 210 182 +3 178 182 149 +3 149 182 163 +3 149 163 128 +3 128 163 150 +3 128 150 112 +3 112 150 141 +3 112 141 103 +3 103 141 140 +3 103 140 102 +3 102 140 144 +3 102 144 108 +3 108 144 156 +3 108 156 118 +3 118 156 179 +3 118 179 138 +3 138 179 199 +3 138 199 160 +3 160 199 232 +3 160 232 191 +3 191 232 270 +3 191 270 229 +3 229 270 314 +3 229 314 271 +3 271 314 368 +3 271 368 324 +3 324 368 428 +3 324 428 385 +3 385 428 487 +3 385 487 450 +3 450 487 561 +3 450 561 523 +3 523 561 645 +3 523 645 602 +3 602 645 736 +3 602 736 688 +3 688 736 836 +3 688 836 785 +3 785 836 944 +3 785 944 891 +3 891 944 1062 +3 891 1062 1015 +3 1015 1062 1189 +3 1015 1189 1149 +3 1149 1189 1345 +3 1149 1345 1297 +3 1297 1345 1521 +3 1297 1521 1474 +3 1474 1521 1696 +3 1474 1696 1656 +3 1656 1696 1871 +3 1656 1871 1845 +3 1845 1871 2043 +3 1845 2043 2011 +3 2011 2043 2197 +3 2011 2197 2176 +3 2176 2197 2355 +3 2176 2355 2336 +3 2336 2355 2510 +3 2336 2510 2494 +3 2494 2510 2665 +3 2494 2665 2653 +3 2653 2665 2824 +3 2653 2824 2811 +3 2811 2824 2984 +3 2811 2984 2973 +3 2973 2984 3152 +3 2973 3152 3148 +3 3148 3152 3332 +3 3152 3160 3332 +3 2984 2995 3160 +3 2984 3160 3152 +3 2824 2835 2995 +3 2824 2995 2984 +3 2665 2679 2835 +3 2665 2835 2824 +3 2510 2534 2679 +3 2510 2679 2665 +3 2355 2380 2534 +3 2355 2534 2510 +3 2197 2231 2380 +3 2197 2380 2355 +3 2043 2073 2231 +3 2043 2231 2197 +3 1871 1916 2073 +3 1871 2073 2043 +3 1696 1754 1916 +3 1696 1916 1871 +3 1521 1580 1754 +3 1521 1754 1696 +3 1345 1410 1580 +3 1345 1580 1521 +3 1189 1256 1410 +3 1189 1410 1345 +3 1062 1118 1256 +3 1062 1256 1189 +3 944 997 1118 +3 944 1118 1062 +3 836 883 997 +3 836 997 944 +3 736 782 883 +3 736 883 836 +3 645 702 782 +3 645 782 736 +3 561 620 702 +3 561 702 645 +3 487 543 620 +3 487 620 561 +3 428 474 543 +3 428 543 487 +3 368 413 474 +3 368 474 428 +3 314 367 413 +3 314 413 368 +3 270 318 367 +3 270 367 314 +3 232 283 318 +3 232 318 270 +3 199 249 283 +3 199 283 232 +3 179 226 249 +3 179 249 199 +3 156 205 226 +3 156 226 179 +3 144 194 205 +3 144 205 156 +3 140 186 194 +3 140 194 144 +3 141 185 186 +3 141 186 140 +3 150 193 185 +3 150 185 141 +3 163 203 193 +3 163 193 150 +3 182 224 203 +3 182 203 163 +3 210 248 224 +3 210 224 182 +3 244 278 248 +3 244 248 210 +3 281 316 278 +3 281 278 244 +3 326 363 316 +3 326 316 281 +3 383 409 363 +3 383 363 326 +3 443 472 409 +3 443 409 383 +3 510 539 472 +3 510 472 443 +3 580 613 539 +3 580 539 510 +3 663 690 613 +3 663 613 580 +3 754 777 690 +3 754 690 663 +3 858 878 777 +3 858 777 754 +3 972 987 878 +3 972 878 858 +3 1097 1111 987 +3 1097 987 972 +3 1242 1249 1111 +3 1242 1111 1097 +3 1387 1395 1249 +3 1387 1249 1242 +3 1569 1395 1387 +3 1569 1404 1395 +3 1395 1404 1258 +3 1395 1258 1249 +3 1249 1258 1126 +3 1249 1126 1111 +3 1111 1126 1005 +3 1111 1005 987 +3 987 1005 898 +3 987 898 878 +3 878 898 808 +3 878 808 777 +3 777 808 724 +3 777 724 690 +3 690 724 643 +3 690 643 613 +3 613 643 568 +3 613 568 539 +3 539 568 508 +3 539 508 472 +3 472 508 454 +3 472 454 409 +3 409 454 400 +3 409 400 363 +3 363 400 359 +3 363 359 316 +3 316 359 323 +3 316 323 278 +3 278 323 293 +3 278 293 248 +3 248 293 268 +3 248 268 224 +3 224 268 252 +3 224 252 203 +3 203 252 241 +3 203 241 193 +3 193 241 234 +3 193 234 185 +3 185 234 237 +3 185 237 186 +3 186 237 245 +3 186 245 194 +3 194 245 259 +3 194 259 205 +3 205 259 276 +3 205 276 226 +3 226 276 305 +3 226 305 249 +3 249 305 340 +3 249 340 283 +3 283 340 377 +3 283 377 318 +3 318 377 422 +3 318 422 367 +3 367 422 473 +3 367 473 413 +3 413 473 536 +3 413 536 474 +3 474 536 599 +3 474 599 543 +3 543 599 672 +3 543 672 620 +3 620 672 753 +3 620 753 702 +3 702 753 848 +3 702 848 782 +3 782 848 949 +3 782 949 883 +3 883 949 1050 +3 883 1050 997 +3 997 1050 1171 +3 997 1171 1118 +3 1118 1171 1312 +3 1118 1312 1256 +3 1256 1312 1476 +3 1256 1476 1410 +3 1410 1476 1637 +3 1410 1637 1580 +3 1580 1637 1818 +3 1580 1818 1754 +3 1754 1818 1977 +3 1754 1977 1916 +3 1916 1977 2120 +3 1916 2120 2073 +3 2073 2120 2258 +3 2073 2258 2231 +3 2231 2258 2404 +3 2231 2404 2380 +3 2380 2404 2547 +3 2380 2547 2534 +3 2534 2547 2700 +3 2534 2700 2679 +3 2679 2700 2849 +3 2679 2849 2835 +3 2835 2849 3003 +3 2835 3003 2995 +3 2995 3003 3166 +3 2995 3166 3160 +3 3160 3166 3332 +3 3166 3174 3332 +3 3003 3015 3174 +3 3003 3174 3166 +3 2849 2862 3015 +3 2849 3015 3003 +3 2700 2719 2862 +3 2700 2862 2849 +3 2547 2577 2719 +3 2547 2719 2700 +3 2404 2441 2577 +3 2404 2577 2547 +3 2258 2305 2441 +3 2258 2441 2404 +3 2120 2165 2305 +3 2120 2305 2258 +3 1977 2017 2165 +3 1977 2165 2120 +3 1818 1866 2017 +3 1818 2017 1977 +3 1637 1706 1866 +3 1637 1866 1818 +3 1476 1549 1706 +3 1476 1706 1637 +3 1312 1388 1549 +3 1312 1549 1476 +3 1171 1254 1388 +3 1171 1388 1312 +3 1050 1127 1254 +3 1050 1254 1171 +3 949 1014 1127 +3 949 1127 1050 +3 848 913 1014 +3 848 1014 949 +3 753 827 913 +3 753 913 848 +3 672 741 827 +3 672 827 753 +3 599 662 741 +3 599 741 672 +3 536 598 662 +3 536 662 599 +3 473 541 598 +3 473 598 536 +3 422 483 541 +3 422 541 473 +3 377 442 483 +3 377 483 422 +3 340 399 442 +3 340 442 377 +3 305 369 399 +3 305 399 340 +3 276 341 369 +3 276 369 305 +3 259 317 341 +3 259 341 276 +3 245 304 317 +3 245 317 259 +3 237 296 304 +3 237 304 245 +3 234 292 296 +3 234 296 237 +3 241 298 292 +3 241 292 234 +3 252 306 298 +3 252 298 241 +3 268 319 306 +3 268 306 252 +3 293 342 319 +3 293 319 268 +3 323 371 342 +3 323 342 293 +3 359 402 371 +3 359 371 323 +3 400 447 402 +3 400 402 359 +3 454 491 447 +3 454 447 400 +3 508 546 491 +3 508 491 454 +3 568 610 546 +3 568 546 508 +3 643 673 610 +3 643 610 568 +3 724 747 673 +3 724 673 643 +3 808 837 747 +3 808 747 724 +3 898 928 837 +3 898 837 808 +3 1005 1025 928 +3 1005 928 898 +3 1126 1144 1025 +3 1126 1025 1005 +3 1258 1265 1144 +3 1258 1144 1126 +3 1404 1413 1265 +3 1404 1265 1258 +3 1569 1413 1404 +3 1569 1422 1413 +3 1413 1422 1277 +3 1413 1277 1265 +3 1265 1277 1153 +3 1265 1153 1144 +3 1144 1153 1044 +3 1144 1044 1025 +3 1025 1044 955 +3 1025 955 928 +3 928 955 864 +3 928 864 837 +3 837 864 780 +3 837 780 747 +3 747 780 717 +3 747 717 673 +3 673 717 648 +3 673 648 610 +3 610 648 587 +3 610 587 546 +3 546 587 540 +3 546 540 491 +3 491 540 493 +3 491 493 447 +3 447 493 457 +3 447 457 402 +3 402 457 425 +3 402 425 371 +3 371 425 398 +3 371 398 342 +3 342 398 378 +3 342 378 319 +3 319 378 366 +3 319 366 306 +3 306 366 355 +3 306 355 298 +3 298 355 354 +3 298 354 292 +3 292 354 360 +3 292 360 296 +3 296 360 370 +3 296 370 304 +3 304 370 389 +3 304 389 317 +3 317 389 406 +3 317 406 341 +3 341 406 437 +3 341 437 369 +3 369 437 470 +3 369 470 399 +3 399 470 513 +3 399 513 442 +3 442 513 558 +3 442 558 483 +3 483 558 616 +3 483 616 541 +3 541 616 669 +3 541 669 598 +3 598 669 742 +3 598 742 662 +3 662 742 821 +3 662 821 741 +3 741 821 894 +3 741 894 827 +3 827 894 990 +3 827 990 913 +3 913 990 1094 +3 913 1094 1014 +3 1014 1094 1203 +3 1014 1203 1127 +3 1127 1203 1332 +3 1127 1332 1254 +3 1254 1332 1480 +3 1254 1480 1388 +3 1388 1480 1628 +3 1388 1628 1549 +3 1549 1628 1795 +3 1549 1795 1706 +3 1706 1795 1933 +3 1706 1933 1866 +3 1866 1933 2070 +3 1866 2070 2017 +3 2017 2070 2207 +3 2017 2207 2165 +3 2165 2207 2349 +3 2165 2349 2305 +3 2305 2349 2482 +3 2305 2482 2441 +3 2441 2482 2606 +3 2441 2606 2577 +3 2577 2606 2741 +3 2577 2741 2719 +3 2719 2741 2886 +3 2719 2886 2862 +3 2862 2886 3031 +3 2862 3031 3015 +3 3015 3031 3184 +3 3015 3184 3174 +3 3174 3184 3332 +3 3184 3193 3332 +3 3031 3040 3193 +3 3031 3193 3184 +3 2886 2900 3040 +3 2886 3040 3031 +3 2741 2766 2900 +3 2741 2900 2886 +3 2606 2651 2766 +3 2606 2766 2741 +3 2482 2517 2651 +3 2482 2651 2606 +3 2349 2389 2517 +3 2349 2517 2482 +3 2207 2254 2389 +3 2207 2389 2349 +3 2070 2141 2254 +3 2070 2254 2207 +3 1933 2005 2141 +3 1933 2141 2070 +3 1795 1864 2005 +3 1795 2005 1933 +3 1628 1713 1864 +3 1628 1864 1795 +3 1480 1574 1713 +3 1480 1713 1628 +3 1332 1435 1574 +3 1332 1574 1480 +3 1203 1293 1435 +3 1203 1435 1332 +3 1094 1176 1293 +3 1094 1293 1203 +3 990 1079 1176 +3 990 1176 1094 +3 894 983 1079 +3 894 1079 990 +3 821 897 983 +3 821 983 894 +3 742 828 897 +3 742 897 821 +3 669 751 828 +3 669 828 742 +3 616 695 751 +3 616 751 669 +3 558 641 695 +3 558 695 616 +3 513 589 641 +3 513 641 558 +3 470 553 589 +3 470 589 513 +3 437 517 553 +3 437 553 470 +3 406 481 517 +3 406 517 437 +3 389 463 481 +3 389 481 406 +3 370 445 463 +3 370 463 389 +3 360 432 445 +3 360 445 370 +3 354 427 432 +3 354 432 360 +3 355 426 427 +3 355 427 354 +3 366 431 426 +3 366 426 355 +3 378 444 431 +3 378 431 366 +3 398 462 444 +3 398 444 378 +3 425 478 462 +3 425 462 398 +3 457 516 478 +3 457 478 425 +3 493 552 516 +3 493 516 457 +3 540 586 552 +3 540 552 493 +3 587 640 586 +3 587 586 540 +3 648 692 640 +3 648 640 587 +3 717 749 692 +3 717 692 648 +3 780 825 749 +3 780 749 717 +3 864 893 825 +3 864 825 780 +3 955 981 893 +3 955 893 864 +3 1044 1075 981 +3 1044 981 955 +3 1153 1170 1075 +3 1153 1075 1044 +3 1277 1291 1170 +3 1277 1170 1153 +3 1422 1430 1291 +3 1422 1291 1277 +3 1569 1430 1422 +3 1569 1439 1430 +3 1430 1439 1303 +3 1430 1303 1291 +3 1291 1303 1193 +3 1291 1193 1170 +3 1170 1193 1104 +3 1170 1104 1075 +3 1075 1104 1012 +3 1075 1012 981 +3 981 1012 937 +3 981 937 893 +3 893 937 861 +3 893 861 825 +3 825 861 798 +3 825 798 749 +3 749 798 743 +3 749 743 692 +3 692 743 686 +3 692 686 640 +3 640 686 646 +3 640 646 586 +3 586 646 611 +3 586 611 552 +3 552 611 572 +3 552 572 516 +3 516 572 551 +3 516 551 478 +3 478 551 529 +3 478 529 462 +3 462 529 515 +3 462 515 444 +3 444 515 502 +3 444 502 431 +3 431 502 496 +3 431 496 426 +3 426 496 501 +3 426 501 427 +3 427 501 512 +3 427 512 432 +3 432 512 525 +3 432 525 445 +3 445 525 545 +3 445 545 463 +3 463 545 567 +3 463 567 481 +3 481 567 597 +3 481 597 517 +3 517 597 638 +3 517 638 553 +3 553 638 676 +3 553 676 589 +3 589 676 732 +3 589 732 641 +3 641 732 781 +3 641 781 695 +3 695 781 849 +3 695 849 751 +3 751 849 917 +3 751 917 828 +3 828 917 996 +3 828 996 897 +3 897 996 1083 +3 897 1083 983 +3 983 1083 1168 +3 983 1168 1079 +3 1079 1168 1283 +3 1079 1283 1176 +3 1176 1283 1403 +3 1176 1403 1293 +3 1293 1403 1533 +3 1293 1533 1435 +3 1435 1533 1667 +3 1435 1667 1574 +3 1574 1667 1819 +3 1574 1819 1713 +3 1713 1819 1946 +3 1713 1946 1864 +3 1864 1946 2067 +3 1864 2067 2005 +3 2005 2067 2192 +3 2005 2192 2141 +3 2141 2192 2320 +3 2141 2320 2254 +3 2254 2320 2433 +3 2254 2433 2389 +3 2389 2433 2553 +3 2389 2553 2517 +3 2517 2553 2678 +3 2517 2678 2651 +3 2651 2678 2808 +3 2651 2808 2766 +3 2766 2808 2920 +3 2766 2920 2900 +3 2900 2920 3054 +3 2900 3054 3040 +3 3040 3054 3197 +3 3040 3197 3193 +3 3193 3197 3332 +3 3197 3210 3332 +3 3054 3072 3210 +3 3054 3210 3197 +3 2920 2946 3072 +3 2920 3072 3054 +3 2808 2836 2946 +3 2808 2946 2920 +3 2678 2714 2836 +3 2678 2836 2808 +3 2553 2598 2714 +3 2553 2714 2678 +3 2433 2491 2598 +3 2433 2598 2553 +3 2320 2369 2491 +3 2320 2491 2433 +3 2192 2251 2369 +3 2192 2369 2320 +3 2067 2149 2251 +3 2067 2251 2192 +3 1946 2024 2149 +3 1946 2149 2067 +3 1819 1902 2024 +3 1819 2024 1946 +3 1667 1791 1902 +3 1667 1902 1819 +3 1533 1646 1791 +3 1533 1791 1667 +3 1403 1520 1646 +3 1403 1646 1533 +3 1283 1398 1520 +3 1283 1520 1403 +3 1168 1287 1398 +3 1168 1398 1283 +3 1083 1183 1287 +3 1083 1287 1168 +3 996 1102 1183 +3 996 1183 1083 +3 917 1018 1102 +3 917 1102 996 +3 849 953 1018 +3 849 1018 917 +3 781 881 953 +3 781 953 849 +3 732 831 881 +3 732 881 781 +3 676 772 831 +3 676 831 732 +3 638 734 772 +3 638 772 676 +3 597 693 734 +3 597 734 638 +3 567 655 693 +3 567 693 597 +3 545 635 655 +3 545 655 567 +3 525 615 635 +3 525 635 545 +3 512 595 615 +3 512 615 525 +3 501 582 595 +3 501 595 512 +3 496 578 582 +3 496 582 501 +3 502 579 578 +3 502 578 496 +3 515 583 579 +3 515 579 502 +3 529 600 583 +3 529 583 515 +3 551 624 600 +3 551 600 529 +3 572 644 624 +3 572 624 551 +3 611 666 644 +3 611 644 572 +3 646 714 666 +3 646 666 611 +3 686 745 714 +3 686 714 646 +3 743 792 745 +3 743 745 686 +3 798 851 792 +3 798 792 743 +3 861 905 851 +3 861 851 798 +3 937 976 905 +3 937 905 861 +3 1012 1043 976 +3 1012 976 937 +3 1104 1135 1043 +3 1104 1043 1012 +3 1193 1227 1135 +3 1193 1135 1104 +3 1303 1321 1227 +3 1303 1227 1193 +3 1439 1449 1321 +3 1439 1321 1303 +3 1569 1449 1439 +3 1569 1457 1449 +3 1449 1457 1339 +3 1449 1339 1321 +3 1321 1339 1251 +3 1321 1251 1227 +3 1227 1251 1155 +3 1227 1155 1135 +3 1135 1155 1089 +3 1135 1089 1043 +3 1043 1089 1016 +3 1043 1016 976 +3 976 1016 956 +3 976 956 905 +3 905 956 896 +3 905 896 851 +3 851 896 854 +3 851 854 792 +3 792 854 811 +3 792 811 745 +3 745 811 770 +3 745 770 714 +3 714 770 740 +3 714 740 666 +3 666 740 720 +3 666 720 644 +3 644 720 697 +3 644 697 624 +3 624 697 677 +3 624 677 600 +3 600 677 668 +3 600 668 583 +3 583 668 664 +3 583 664 579 +3 579 664 665 +3 579 665 578 +3 578 665 675 +3 578 675 582 +3 582 675 684 +3 582 684 595 +3 595 684 715 +3 595 715 615 +3 615 715 735 +3 615 735 635 +3 635 735 757 +3 635 757 655 +3 655 757 797 +3 655 797 693 +3 693 797 838 +3 693 838 734 +3 734 838 880 +3 734 880 772 +3 772 880 940 +3 772 940 831 +3 831 940 998 +3 831 998 881 +3 881 998 1061 +3 881 1061 953 +3 953 1061 1141 +3 953 1141 1018 +3 1018 1141 1221 +3 1018 1221 1102 +3 1102 1221 1304 +3 1102 1304 1183 +3 1183 1304 1419 +3 1183 1419 1287 +3 1287 1419 1527 +3 1287 1527 1398 +3 1398 1527 1642 +3 1398 1642 1520 +3 1520 1642 1779 +3 1520 1779 1646 +3 1646 1779 1879 +3 1646 1879 1791 +3 1791 1879 2002 +3 1791 2002 1902 +3 1902 2002 2106 +3 1902 2106 2024 +3 2024 2106 2217 +3 2024 2217 2149 +3 2149 2217 2331 +3 2149 2331 2251 +3 2251 2331 2427 +3 2251 2427 2369 +3 2369 2427 2541 +3 2369 2541 2491 +3 2491 2541 2654 +3 2491 2654 2598 +3 2598 2654 2750 +3 2598 2750 2714 +3 2714 2750 2863 +3 2714 2863 2836 +3 2836 2863 2981 +3 2836 2981 2946 +3 2946 2981 3086 +3 2946 3086 3072 +3 3072 3086 3218 +3 3072 3218 3210 +3 3210 3218 3332 +3 3218 3229 3332 +3 3086 3104 3229 +3 3086 3229 3218 +3 2981 3008 3104 +3 2981 3104 3086 +3 2863 2894 3008 +3 2863 3008 2981 +3 2750 2801 2894 +3 2750 2894 2863 +3 2654 2697 2801 +3 2654 2801 2750 +3 2541 2594 2697 +3 2541 2697 2654 +3 2427 2500 2594 +3 2427 2594 2541 +3 2331 2392 2500 +3 2331 2500 2427 +3 2217 2298 2392 +3 2217 2392 2331 +3 2106 2193 2298 +3 2106 2298 2217 +3 2002 2088 2193 +3 2002 2193 2106 +3 1879 1994 2088 +3 1879 2088 2002 +3 1779 1880 1994 +3 1779 1994 1879 +3 1642 1788 1880 +3 1642 1880 1779 +3 1527 1661 1788 +3 1527 1788 1642 +3 1419 1558 1661 +3 1419 1661 1527 +3 1304 1456 1558 +3 1304 1558 1419 +3 1221 1350 1456 +3 1221 1456 1304 +3 1141 1266 1350 +3 1141 1350 1221 +3 1061 1184 1266 +3 1061 1266 1141 +3 998 1123 1184 +3 998 1184 1061 +3 940 1054 1123 +3 940 1123 998 +3 880 1003 1054 +3 880 1054 940 +3 838 954 1003 +3 838 1003 880 +3 797 908 954 +3 797 954 838 +3 757 871 908 +3 757 908 797 +3 735 842 871 +3 735 871 757 +3 715 819 842 +3 715 842 735 +3 684 790 819 +3 684 819 715 +3 675 773 790 +3 675 790 684 +3 665 768 773 +3 665 773 675 +3 664 762 768 +3 664 768 665 +3 668 763 762 +3 668 762 664 +3 677 769 763 +3 677 763 668 +3 697 774 769 +3 697 769 677 +3 720 793 774 +3 720 774 697 +3 740 820 793 +3 740 793 720 +3 770 844 820 +3 770 820 740 +3 811 876 844 +3 811 844 770 +3 854 911 876 +3 854 876 811 +3 896 959 911 +3 896 911 854 +3 956 1006 959 +3 956 959 896 +3 1016 1064 1006 +3 1016 1006 956 +3 1089 1128 1064 +3 1089 1064 1016 +3 1155 1190 1128 +3 1155 1128 1089 +3 1251 1275 1190 +3 1251 1190 1155 +3 1339 1356 1275 +3 1339 1275 1251 +3 1457 1469 1356 +3 1457 1356 1339 +3 1569 1469 1457 +3 1569 1475 1469 +3 1469 1475 1381 +3 1469 1381 1356 +3 1356 1381 1300 +3 1356 1300 1275 +3 1275 1300 1239 +3 1275 1239 1190 +3 1190 1239 1159 +3 1190 1159 1128 +3 1128 1159 1115 +3 1128 1115 1064 +3 1064 1115 1060 +3 1064 1060 1006 +3 1006 1060 1017 +3 1006 1017 959 +3 959 1017 979 +3 959 979 911 +3 911 979 950 +3 911 950 876 +3 876 950 919 +3 876 919 844 +3 844 919 890 +3 844 890 820 +3 820 890 879 +3 820 879 793 +3 793 879 868 +3 793 868 774 +3 774 868 859 +3 774 859 769 +3 769 859 857 +3 769 857 763 +3 763 857 862 +3 763 862 762 +3 762 862 873 +3 762 873 768 +3 768 873 884 +3 768 884 773 +3 773 884 903 +3 773 903 790 +3 790 903 932 +3 790 932 819 +3 819 932 961 +3 819 961 842 +3 842 961 992 +3 842 992 871 +3 871 992 1035 +3 871 1035 908 +3 908 1035 1082 +3 908 1082 954 +3 954 1082 1139 +3 954 1139 1003 +3 1003 1139 1186 +3 1003 1186 1054 +3 1054 1186 1262 +3 1054 1262 1123 +3 1123 1262 1331 +3 1123 1331 1184 +3 1184 1331 1421 +3 1184 1421 1266 +3 1266 1421 1512 +3 1266 1512 1350 +3 1350 1512 1606 +3 1350 1606 1456 +3 1456 1606 1700 +3 1456 1700 1558 +3 1558 1700 1810 +3 1558 1810 1661 +3 1661 1810 1901 +3 1661 1901 1788 +3 1788 1901 2006 +3 1788 2006 1880 +3 1880 2006 2089 +3 1880 2089 1994 +3 1994 2089 2190 +3 1994 2190 2088 +3 2088 2190 2285 +3 2088 2285 2193 +3 2193 2285 2375 +3 2193 2375 2298 +3 2298 2375 2473 +3 2298 2473 2392 +3 2392 2473 2557 +3 2392 2557 2500 +3 2500 2557 2659 +3 2500 2659 2594 +3 2594 2659 2742 +3 2594 2742 2697 +3 2697 2742 2842 +3 2697 2842 2801 +3 2801 2842 2931 +3 2801 2931 2894 +3 2894 2931 3036 +3 2894 3036 3008 +3 3008 3036 3121 +3 3008 3121 3104 +3 3104 3121 3239 +3 3104 3239 3229 +3 3229 3239 3332 +3 3239 3246 3332 +3 3121 3157 3246 +3 3121 3246 3239 +3 3036 3064 3157 +3 3036 3157 3121 +3 2931 2978 3064 +3 2931 3064 3036 +3 2842 2887 2978 +3 2842 2978 2931 +3 2742 2807 2887 +3 2742 2887 2842 +3 2659 2713 2807 +3 2659 2807 2742 +3 2557 2630 2713 +3 2557 2713 2659 +3 2473 2544 2630 +3 2473 2630 2557 +3 2375 2459 2544 +3 2375 2544 2473 +3 2285 2370 2459 +3 2285 2459 2375 +3 2190 2291 2370 +3 2190 2370 2285 +3 2089 2200 2291 +3 2089 2291 2190 +3 2006 2116 2200 +3 2006 2200 2089 +3 1901 2029 2116 +3 1901 2116 2006 +3 1810 1943 2029 +3 1810 2029 1901 +3 1700 1852 1943 +3 1700 1943 1810 +3 1606 1769 1852 +3 1606 1852 1700 +3 1512 1666 1769 +3 1512 1769 1606 +3 1421 1584 1666 +3 1421 1666 1512 +3 1331 1500 1584 +3 1331 1584 1421 +3 1262 1424 1500 +3 1262 1500 1331 +3 1186 1342 1424 +3 1186 1424 1262 +3 1139 1281 1342 +3 1139 1342 1186 +3 1082 1228 1281 +3 1082 1281 1139 +3 1035 1164 1228 +3 1035 1228 1082 +3 992 1132 1164 +3 992 1164 1035 +3 961 1092 1132 +3 961 1132 992 +3 932 1051 1092 +3 932 1092 961 +3 903 1026 1051 +3 903 1051 932 +3 884 1004 1026 +3 884 1026 903 +3 873 986 1004 +3 873 1004 884 +3 862 975 986 +3 862 986 873 +3 857 968 975 +3 857 975 862 +3 859 965 968 +3 859 968 857 +3 868 967 965 +3 868 965 859 +3 879 973 967 +3 879 967 868 +3 890 982 973 +3 890 973 879 +3 919 1002 982 +3 919 982 890 +3 950 1022 1002 +3 950 1002 919 +3 979 1045 1022 +3 979 1022 950 +3 1017 1087 1045 +3 1017 1045 979 +3 1060 1124 1087 +3 1060 1087 1017 +3 1115 1158 1124 +3 1115 1124 1060 +3 1159 1218 1158 +3 1159 1158 1115 +3 1239 1271 1218 +3 1239 1218 1159 +3 1300 1333 1271 +3 1300 1271 1239 +3 1381 1407 1333 +3 1381 1333 1300 +3 1475 1486 1407 +3 1475 1407 1381 +3 1569 1486 1475 +3 1569 1495 1486 +3 1486 1495 1434 +3 1486 1434 1407 +3 1407 1434 1359 +3 1407 1359 1333 +3 1333 1359 1305 +3 1333 1305 1271 +3 1271 1305 1264 +3 1271 1264 1218 +3 1218 1264 1223 +3 1218 1223 1158 +3 1158 1223 1178 +3 1158 1178 1124 +3 1124 1178 1151 +3 1124 1151 1087 +3 1087 1151 1130 +3 1087 1130 1045 +3 1045 1130 1108 +3 1045 1108 1022 +3 1022 1108 1093 +3 1022 1093 1002 +3 1002 1093 1081 +3 1002 1081 982 +3 982 1081 1071 +3 982 1071 973 +3 973 1071 1068 +3 973 1068 967 +3 967 1068 1073 +3 967 1073 965 +3 965 1073 1086 +3 965 1086 968 +3 968 1086 1098 +3 968 1098 975 +3 975 1098 1117 +3 975 1117 986 +3 986 1117 1140 +3 986 1140 1004 +3 1004 1140 1157 +3 1004 1157 1026 +3 1026 1157 1191 +3 1026 1191 1051 +3 1051 1191 1243 +3 1051 1243 1092 +3 1092 1243 1279 +3 1092 1279 1132 +3 1132 1279 1327 +3 1132 1327 1164 +3 1164 1327 1385 +3 1164 1385 1228 +3 1228 1385 1458 +3 1228 1458 1281 +3 1281 1458 1522 +3 1281 1522 1342 +3 1342 1522 1599 +3 1342 1599 1424 +3 1424 1599 1668 +3 1424 1668 1500 +3 1500 1668 1755 +3 1500 1755 1584 +3 1584 1755 1836 +3 1584 1836 1666 +3 1666 1836 1911 +3 1666 1911 1769 +3 1769 1911 1998 +3 1769 1998 1852 +3 1852 1998 2069 +3 1852 2069 1943 +3 1943 2069 2156 +3 1943 2156 2029 +3 2029 2156 2230 +3 2029 2230 2116 +3 2116 2230 2311 +3 2116 2311 2200 +3 2200 2311 2385 +3 2200 2385 2291 +3 2291 2385 2470 +3 2291 2470 2370 +3 2370 2470 2543 +3 2370 2543 2459 +3 2459 2543 2620 +3 2459 2620 2544 +3 2544 2620 2702 +3 2544 2702 2630 +3 2630 2702 2774 +3 2630 2774 2713 +3 2713 2774 2857 +3 2713 2857 2807 +3 2807 2857 2930 +3 2807 2930 2887 +3 2887 2930 3020 +3 2887 3020 2978 +3 2978 3020 3093 +3 2978 3093 3064 +3 3064 3093 3180 +3 3064 3180 3157 +3 3157 3180 3261 +3 3157 3261 3246 +3 3246 3261 3332 +3 3261 3271 3332 +3 3180 3207 3271 +3 3180 3271 3261 +3 3093 3119 3207 +3 3093 3207 3180 +3 3020 3055 3119 +3 3020 3119 3093 +3 2930 2994 3055 +3 2930 3055 3020 +3 2857 2914 2994 +3 2857 2994 2930 +3 2774 2847 2914 +3 2774 2914 2857 +3 2702 2769 2847 +3 2702 2847 2774 +3 2620 2705 2769 +3 2620 2769 2702 +3 2543 2635 2705 +3 2543 2705 2620 +3 2470 2556 2635 +3 2470 2635 2543 +3 2385 2495 2556 +3 2385 2556 2470 +3 2311 2414 2495 +3 2311 2495 2385 +3 2230 2353 2414 +3 2230 2414 2311 +3 2156 2272 2353 +3 2156 2353 2230 +3 2069 2202 2272 +3 2069 2272 2156 +3 1998 2142 2202 +3 1998 2202 2069 +3 1911 2060 2142 +3 1911 2142 1998 +3 1836 1995 2060 +3 1836 2060 1911 +3 1755 1915 1995 +3 1755 1995 1836 +3 1668 1850 1915 +3 1668 1915 1755 +3 1599 1789 1850 +3 1599 1850 1668 +3 1522 1703 1789 +3 1522 1789 1599 +3 1458 1633 1703 +3 1458 1703 1522 +3 1385 1576 1633 +3 1385 1633 1458 +3 1327 1514 1576 +3 1327 1576 1385 +3 1279 1461 1514 +3 1279 1514 1327 +3 1243 1405 1461 +3 1243 1461 1279 +3 1191 1352 1405 +3 1191 1405 1243 +3 1157 1313 1352 +3 1157 1352 1191 +3 1140 1284 1313 +3 1140 1313 1157 +3 1117 1257 1284 +3 1117 1284 1140 +3 1098 1235 1257 +3 1098 1257 1117 +3 1086 1210 1235 +3 1086 1235 1098 +3 1073 1188 1210 +3 1073 1210 1086 +3 1068 1181 1188 +3 1068 1188 1073 +3 1071 1177 1181 +3 1071 1181 1068 +3 1081 1175 1177 +3 1081 1177 1071 +3 1093 1180 1175 +3 1093 1175 1081 +3 1108 1187 1180 +3 1108 1180 1093 +3 1130 1208 1187 +3 1130 1187 1108 +3 1151 1233 1208 +3 1151 1208 1130 +3 1178 1255 1233 +3 1178 1233 1151 +3 1223 1278 1255 +3 1223 1255 1178 +3 1264 1310 1278 +3 1264 1278 1223 +3 1305 1349 1310 +3 1305 1310 1264 +3 1359 1401 1349 +3 1359 1349 1305 +3 1434 1455 1401 +3 1434 1401 1359 +3 1495 1509 1455 +3 1495 1455 1434 +3 1569 1509 1495 +3 1569 1519 1509 +3 1509 1519 1477 +3 1509 1477 1455 +3 1455 1477 1442 +3 1455 1442 1401 +3 1401 1442 1400 +3 1401 1400 1349 +3 1349 1400 1361 +3 1349 1361 1310 +3 1310 1361 1338 +3 1310 1338 1278 +3 1278 1338 1318 +3 1278 1318 1255 +3 1255 1318 1302 +3 1255 1302 1233 +3 1233 1302 1295 +3 1233 1295 1208 +3 1208 1295 1289 +3 1208 1289 1187 +3 1187 1289 1288 +3 1187 1288 1180 +3 1180 1288 1290 +3 1180 1290 1175 +3 1175 1290 1299 +3 1175 1299 1177 +3 1177 1299 1309 +3 1177 1309 1181 +3 1181 1309 1328 +3 1181 1328 1188 +3 1188 1328 1348 +3 1188 1348 1210 +3 1210 1348 1377 +3 1210 1377 1235 +3 1235 1377 1418 +3 1235 1418 1257 +3 1257 1418 1454 +3 1257 1454 1284 +3 1284 1454 1491 +3 1284 1491 1313 +3 1313 1491 1536 +3 1313 1536 1352 +3 1352 1536 1589 +3 1352 1589 1405 +3 1405 1589 1639 +3 1405 1639 1461 +3 1461 1639 1692 +3 1461 1692 1514 +3 1514 1692 1765 +3 1514 1765 1576 +3 1576 1765 1828 +3 1576 1828 1633 +3 1633 1828 1882 +3 1633 1882 1703 +3 1703 1882 1954 +3 1703 1954 1789 +3 1789 1954 2013 +3 1789 2013 1850 +3 1850 2013 2071 +3 1850 2071 1915 +3 1915 2071 2147 +3 1915 2147 1995 +3 1995 2147 2203 +3 1995 2203 2060 +3 2060 2203 2261 +3 2060 2261 2142 +3 2142 2261 2339 +3 2142 2339 2202 +3 2202 2339 2393 +3 2202 2393 2272 +3 2272 2393 2465 +3 2272 2465 2353 +3 2353 2465 2530 +3 2353 2530 2414 +3 2414 2530 2591 +3 2414 2591 2495 +3 2495 2591 2662 +3 2495 2662 2556 +3 2556 2662 2720 +3 2556 2720 2635 +3 2635 2720 2787 +3 2635 2787 2705 +3 2705 2787 2852 +3 2705 2852 2769 +3 2769 2852 2912 +3 2769 2912 2847 +3 2847 2912 2982 +3 2847 2982 2914 +3 2914 2982 3039 +3 2914 3039 2994 +3 2994 3039 3098 +3 2994 3098 3055 +3 3055 3098 3167 +3 3055 3167 3119 +3 3119 3167 3228 +3 3119 3228 3207 +3 3207 3228 3284 +3 3207 3284 3271 +3 3271 3284 3332 +3 3284 3290 3332 +3 3228 3251 3290 +3 3228 3290 3284 +3 3167 3206 3251 +3 3167 3251 3228 +3 3098 3151 3206 +3 3098 3206 3167 +3 3039 3092 3151 +3 3039 3151 3098 +3 2982 3041 3092 +3 2982 3092 3039 +3 2912 2993 3041 +3 2912 3041 2982 +3 2852 2923 2993 +3 2852 2993 2912 +3 2787 2875 2923 +3 2787 2923 2852 +3 2720 2823 2875 +3 2720 2875 2787 +3 2662 2753 2823 +3 2662 2823 2720 +3 2591 2703 2753 +3 2591 2753 2662 +3 2530 2648 2703 +3 2530 2703 2591 +3 2465 2578 2648 +3 2465 2648 2530 +3 2393 2523 2578 +3 2393 2578 2465 +3 2339 2467 2523 +3 2339 2523 2393 +3 2261 2400 2467 +3 2261 2467 2339 +3 2203 2351 2400 +3 2203 2400 2261 +3 2147 2289 2351 +3 2147 2351 2203 +3 2071 2226 2289 +3 2071 2289 2147 +3 2013 2170 2226 +3 2013 2226 2071 +3 1954 2110 2170 +3 1954 2170 2013 +3 1882 2051 2110 +3 1882 2110 1954 +3 1828 2000 2051 +3 1828 2051 1882 +3 1765 1940 2000 +3 1765 2000 1828 +3 1692 1877 1940 +3 1692 1940 1765 +3 1639 1834 1877 +3 1639 1877 1692 +3 1589 1787 1834 +3 1589 1834 1639 +3 1536 1722 1787 +3 1536 1787 1589 +3 1491 1670 1722 +3 1491 1722 1536 +3 1454 1624 1670 +3 1454 1670 1491 +3 1418 1587 1624 +3 1418 1624 1454 +3 1377 1545 1587 +3 1377 1587 1418 +3 1348 1516 1545 +3 1348 1545 1377 +3 1328 1483 1516 +3 1328 1516 1348 +3 1309 1464 1483 +3 1309 1483 1328 +3 1299 1443 1464 +3 1299 1464 1309 +3 1290 1423 1443 +3 1290 1443 1299 +3 1288 1408 1423 +3 1288 1423 1290 +3 1289 1396 1408 +3 1289 1408 1288 +3 1295 1391 1396 +3 1295 1396 1289 +3 1302 1392 1391 +3 1302 1391 1295 +3 1318 1402 1392 +3 1318 1392 1302 +3 1338 1416 1402 +3 1338 1402 1318 +3 1361 1432 1416 +3 1361 1416 1338 +3 1400 1453 1432 +3 1400 1432 1361 +3 1442 1473 1453 +3 1442 1453 1400 +3 1477 1498 1473 +3 1477 1473 1442 +3 1519 1530 1498 +3 1519 1498 1477 +3 1569 1530 1519 +3 1569 1539 1530 +3 1530 1539 1524 +3 1530 1524 1498 +3 1498 1524 1507 +3 1498 1507 1473 +3 1473 1507 1494 +3 1473 1494 1453 +3 1453 1494 1488 +3 1453 1488 1432 +3 1432 1488 1484 +3 1432 1484 1416 +3 1416 1484 1485 +3 1416 1485 1402 +3 1402 1485 1490 +3 1402 1490 1392 +3 1392 1490 1496 +3 1392 1496 1391 +3 1391 1496 1515 +3 1391 1515 1396 +3 1396 1515 1528 +3 1396 1528 1408 +3 1408 1528 1551 +3 1408 1551 1423 +3 1423 1551 1579 +3 1423 1579 1443 +3 1443 1579 1609 +3 1443 1609 1464 +3 1464 1609 1634 +3 1464 1634 1483 +3 1483 1634 1674 +3 1483 1674 1516 +3 1516 1674 1711 +3 1516 1711 1545 +3 1545 1711 1766 +3 1545 1766 1587 +3 1587 1766 1812 +3 1587 1812 1624 +3 1624 1812 1855 +3 1624 1855 1670 +3 1670 1855 1900 +3 1670 1900 1722 +3 1722 1900 1961 +3 1722 1961 1787 +3 1787 1961 2009 +3 1787 2009 1834 +3 1834 2009 2053 +3 1834 2053 1877 +3 1877 2053 2105 +3 1877 2105 1940 +3 1940 2105 2163 +3 1940 2163 2000 +3 2000 2163 2213 +3 2000 2213 2051 +3 2051 2213 2260 +3 2051 2260 2110 +3 2110 2260 2330 +3 2110 2330 2170 +3 2170 2330 2376 +3 2170 2376 2226 +3 2226 2376 2426 +3 2226 2426 2289 +3 2289 2426 2492 +3 2289 2492 2351 +3 2351 2492 2542 +3 2351 2542 2400 +3 2400 2542 2595 +3 2400 2595 2467 +3 2467 2595 2657 +3 2467 2657 2523 +3 2523 2657 2706 +3 2523 2706 2578 +3 2578 2706 2751 +3 2578 2751 2648 +3 2648 2751 2820 +3 2648 2820 2703 +3 2703 2820 2860 +3 2703 2860 2753 +3 2753 2860 2913 +3 2753 2913 2823 +3 2823 2913 2964 +3 2823 2964 2875 +3 2875 2964 3017 +3 2875 3017 2923 +3 2923 3017 3062 +3 2923 3062 2993 +3 2993 3062 3102 +3 2993 3102 3041 +3 3041 3102 3156 +3 3041 3156 3092 +3 3092 3156 3202 +3 3092 3202 3151 +3 3151 3202 3241 +3 3151 3241 3206 +3 3206 3241 3276 +3 3206 3276 3251 +3 3251 3276 3301 +3 3251 3301 3290 +3 3290 3301 3332 +3 3301 3315 3332 +3 3276 3296 3315 +3 3276 3315 3301 +3 3241 3279 3296 +3 3241 3296 3276 +3 3202 3247 3279 +3 3202 3279 3241 +3 3156 3219 3247 +3 3156 3247 3202 +3 3102 3185 3219 +3 3102 3219 3156 +3 3062 3141 3185 +3 3062 3185 3102 +3 3017 3099 3141 +3 3017 3141 3062 +3 2964 3058 3099 +3 2964 3099 3017 +3 2913 3025 3058 +3 2913 3058 2964 +3 2860 2974 3025 +3 2860 3025 2913 +3 2820 2919 2974 +3 2820 2974 2860 +3 2751 2879 2919 +3 2751 2919 2820 +3 2706 2833 2879 +3 2706 2879 2751 +3 2657 2780 2833 +3 2657 2833 2706 +3 2595 2730 2780 +3 2595 2780 2657 +3 2542 2681 2730 +3 2542 2730 2595 +3 2492 2633 2681 +3 2492 2681 2542 +3 2426 2572 2633 +3 2426 2633 2492 +3 2376 2529 2572 +3 2376 2572 2426 +3 2330 2479 2529 +3 2330 2529 2376 +3 2260 2420 2479 +3 2260 2479 2330 +3 2213 2368 2420 +3 2213 2420 2260 +3 2163 2326 2368 +3 2163 2368 2213 +3 2105 2264 2326 +3 2105 2326 2163 +3 2053 2218 2264 +3 2053 2264 2105 +3 2009 2168 2218 +3 2009 2218 2053 +3 1961 2118 2168 +3 1961 2168 2009 +3 1900 2065 2118 +3 1900 2118 1961 +3 1855 2021 2065 +3 1855 2065 1900 +3 1812 1980 2021 +3 1812 2021 1855 +3 1766 1925 1980 +3 1766 1980 1812 +3 1711 1875 1925 +3 1711 1925 1766 +3 1674 1841 1875 +3 1674 1875 1711 +3 1634 1801 1841 +3 1634 1841 1674 +3 1609 1757 1801 +3 1609 1801 1634 +3 1579 1714 1757 +3 1579 1757 1609 +3 1551 1681 1714 +3 1551 1714 1579 +3 1528 1652 1681 +3 1528 1681 1551 +3 1515 1621 1652 +3 1515 1652 1528 +3 1496 1604 1621 +3 1496 1621 1515 +3 1490 1585 1604 +3 1490 1604 1496 +3 1485 1568 1585 +3 1485 1585 1490 +3 1484 1555 1568 +3 1484 1568 1485 +3 1488 1546 1555 +3 1488 1555 1484 +3 1494 1540 1546 +3 1494 1546 1488 +3 1507 1541 1540 +3 1507 1540 1494 +3 1524 1548 1541 +3 1524 1541 1507 +3 1539 1556 1548 +3 1539 1548 1524 +3 1569 1556 1539 +3 1569 1570 1556 +3 1556 1570 1575 +3 1556 1575 1548 +3 1548 1575 1582 +3 1548 1582 1541 +3 1541 1582 1594 +3 1541 1594 1540 +3 1540 1594 1610 +3 1540 1610 1546 +3 1546 1610 1623 +3 1546 1623 1555 +3 1555 1623 1648 +3 1555 1648 1568 +3 1568 1648 1675 +3 1568 1675 1585 +3 1585 1675 1705 +3 1585 1705 1604 +3 1604 1705 1740 +3 1604 1740 1621 +3 1621 1740 1790 +3 1621 1790 1652 +3 1652 1790 1826 +3 1652 1826 1681 +3 1681 1826 1858 +3 1681 1858 1714 +3 1714 1858 1897 +3 1714 1897 1757 +3 1757 1897 1948 +3 1757 1948 1801 +3 1801 1948 1992 +3 1801 1992 1841 +3 1841 1992 2037 +3 1841 2037 1875 +3 1875 2037 2076 +3 1875 2076 1925 +3 1925 2076 2137 +3 1925 2137 1980 +3 1980 2137 2180 +3 1980 2180 2021 +3 2021 2180 2227 +3 2021 2227 2065 +3 2065 2227 2278 +3 2065 2278 2118 +3 2118 2278 2333 +3 2118 2333 2168 +3 2168 2333 2377 +3 2168 2377 2218 +3 2218 2377 2424 +3 2218 2424 2264 +3 2264 2424 2483 +3 2264 2483 2326 +3 2326 2483 2535 +3 2326 2535 2368 +3 2368 2535 2573 +3 2368 2573 2420 +3 2420 2573 2632 +3 2420 2632 2479 +3 2479 2632 2680 +3 2479 2680 2529 +3 2529 2680 2727 +3 2529 2727 2572 +3 2572 2727 2773 +3 2572 2773 2633 +3 2633 2773 2829 +3 2633 2829 2681 +3 2681 2829 2871 +3 2681 2871 2730 +3 2730 2871 2916 +3 2730 2916 2780 +3 2780 2916 2962 +3 2780 2962 2833 +3 2833 2962 3009 +3 2833 3009 2879 +3 2879 3009 3048 +3 2879 3048 2919 +3 2919 3048 3079 +3 2919 3079 2974 +3 2974 3079 3116 +3 2974 3116 3025 +3 3025 3116 3165 +3 3025 3165 3058 +3 3058 3165 3199 +3 3058 3199 3099 +3 3099 3199 3230 +3 3099 3230 3141 +3 3141 3230 3257 +3 3141 3257 3185 +3 3185 3257 3281 +3 3185 3281 3219 +3 3219 3281 3293 +3 3219 3293 3247 +3 3247 3293 3309 +3 3247 3309 3279 +3 3279 3309 3320 +3 3279 3320 3296 +3 3296 3320 3328 +3 3296 3328 3315 +3 3315 3328 3332 +3 3328 3340 3332 +3 3320 3347 3340 +3 3320 3340 3328 +3 3309 3349 3347 +3 3309 3347 3320 +3 3293 3342 3349 +3 3293 3349 3309 +3 3281 3336 3342 +3 3281 3342 3293 +3 3257 3323 3336 +3 3257 3336 3281 +3 3230 3308 3323 +3 3230 3323 3257 +3 3199 3289 3308 +3 3199 3308 3230 +3 3165 3270 3289 +3 3165 3289 3199 +3 3116 3244 3270 +3 3116 3270 3165 +3 3079 3217 3244 +3 3079 3244 3116 +3 3048 3183 3217 +3 3048 3217 3079 +3 3009 3139 3183 +3 3009 3183 3048 +3 2962 3097 3139 +3 2962 3139 3009 +3 2916 3059 3097 +3 2916 3097 2962 +3 2871 3027 3059 +3 2871 3059 2916 +3 2829 2977 3027 +3 2829 3027 2871 +3 2773 2922 2977 +3 2773 2977 2829 +3 2727 2885 2922 +3 2727 2922 2773 +3 2680 2839 2885 +3 2680 2885 2727 +3 2632 2788 2839 +3 2632 2839 2680 +3 2573 2735 2788 +3 2573 2788 2632 +3 2535 2690 2735 +3 2535 2735 2573 +3 2483 2645 2690 +3 2483 2690 2535 +3 2424 2584 2645 +3 2424 2645 2483 +3 2377 2539 2584 +3 2377 2584 2424 +3 2333 2488 2539 +3 2333 2539 2377 +3 2278 2430 2488 +3 2278 2488 2333 +3 2227 2381 2430 +3 2227 2430 2278 +3 2180 2335 2381 +3 2180 2381 2227 +3 2137 2283 2335 +3 2137 2335 2180 +3 2076 2228 2283 +3 2076 2283 2137 +3 2037 2183 2228 +3 2037 2228 2076 +3 1992 2138 2183 +3 1992 2183 2037 +3 1948 2075 2138 +3 1948 2138 1992 +3 1897 2035 2075 +3 1897 2075 1948 +3 1858 1990 2035 +3 1858 2035 1897 +3 1826 1942 1990 +3 1826 1990 1858 +3 1790 1894 1942 +3 1790 1942 1826 +3 1740 1854 1894 +3 1740 1894 1790 +3 1705 1820 1854 +3 1705 1854 1740 +3 1675 1784 1820 +3 1675 1820 1705 +3 1648 1731 1784 +3 1648 1784 1675 +3 1623 1693 1731 +3 1623 1731 1648 +3 1610 1664 1693 +3 1610 1693 1623 +3 1594 1638 1664 +3 1594 1664 1610 +3 1582 1615 1638 +3 1582 1638 1594 +3 1575 1601 1615 +3 1575 1615 1582 +3 1570 1583 1601 +3 1570 1601 1575 +3 1569 1583 1570 +3 1569 1595 1583 +3 1583 1595 1618 +3 1583 1618 1601 +3 1601 1618 1651 +3 1601 1651 1615 +3 1615 1651 1686 +3 1615 1686 1638 +3 1638 1686 1726 +3 1638 1726 1664 +3 1664 1726 1783 +3 1664 1783 1693 +3 1693 1783 1824 +3 1693 1824 1731 +3 1731 1824 1863 +3 1731 1863 1784 +3 1784 1863 1905 +3 1784 1905 1820 +3 1820 1905 1967 +3 1820 1967 1854 +3 1854 1967 2010 +3 1854 2010 1894 +3 1894 2010 2057 +3 1894 2057 1942 +3 1942 2057 2108 +3 1942 2108 1990 +3 1990 2108 2164 +3 1990 2164 2035 +3 2035 2164 2212 +3 2035 2212 2075 +3 2075 2212 2259 +3 2075 2259 2138 +3 2138 2259 2325 +3 2138 2325 2183 +3 2183 2325 2374 +3 2183 2374 2228 +3 2228 2374 2423 +3 2228 2423 2283 +3 2283 2423 2484 +3 2283 2484 2335 +3 2335 2484 2537 +3 2335 2537 2381 +3 2381 2537 2587 +3 2381 2587 2430 +3 2430 2587 2649 +3 2430 2649 2488 +3 2488 2649 2696 +3 2488 2696 2539 +3 2539 2696 2743 +3 2539 2743 2584 +3 2584 2743 2805 +3 2584 2805 2645 +3 2645 2805 2853 +3 2645 2853 2690 +3 2690 2853 2898 +3 2690 2898 2735 +3 2735 2898 2945 +3 2735 2945 2788 +3 2788 2945 3002 +3 2788 3002 2839 +3 2839 3002 3045 +3 2839 3045 2885 +3 2885 3045 3084 +3 2885 3084 2922 +3 2922 3084 3126 +3 2922 3126 2977 +3 2977 3126 3181 +3 2977 3181 3027 +3 3027 3181 3221 +3 3027 3221 3059 +3 3059 3221 3254 +3 3059 3254 3097 +3 3097 3254 3288 +3 3097 3288 3139 +3 3139 3288 3311 +3 3139 3311 3183 +3 3183 3311 3337 +3 3183 3337 3217 +3 3217 3337 3359 +3 3217 3359 3244 +3 3244 3359 3375 +3 3244 3375 3270 +3 3270 3375 3384 +3 3270 3384 3289 +3 3289 3384 3391 +3 3289 3391 3308 +3 3308 3391 3399 +3 3308 3399 3323 +3 3323 3399 3398 +3 3323 3398 3336 +3 3336 3398 3390 +3 3336 3390 3342 +3 3342 3390 3383 +3 3342 3383 3349 +3 3349 3383 3372 +3 3349 3372 3347 +3 3347 3372 3357 +3 3347 3357 3340 +3 3340 3357 3332 +3 3357 3369 3332 +3 3372 3395 3369 +3 3372 3369 3357 +3 3383 3420 3395 +3 3383 3395 3372 +3 3390 3434 3420 +3 3390 3420 3383 +3 3398 3451 3434 +3 3398 3434 3390 +3 3399 3464 3451 +3 3399 3451 3398 +3 3391 3473 3464 +3 3391 3464 3399 +3 3384 3475 3473 +3 3384 3473 3391 +3 3375 3474 3475 +3 3375 3475 3384 +3 3359 3465 3474 +3 3359 3474 3375 +3 3337 3454 3465 +3 3337 3465 3359 +3 3311 3439 3454 +3 3311 3454 3337 +3 3288 3423 3439 +3 3288 3439 3311 +3 3254 3404 3423 +3 3254 3423 3288 +3 3221 3376 3404 +3 3221 3404 3254 +3 3181 3341 3376 +3 3181 3376 3221 +3 3126 3305 3341 +3 3126 3341 3181 +3 3084 3269 3305 +3 3084 3305 3126 +3 3045 3225 3269 +3 3045 3269 3084 +3 3002 3178 3225 +3 3002 3225 3045 +3 2945 3115 3178 +3 2945 3178 3002 +3 2898 3069 3115 +3 2898 3115 2945 +3 2853 3029 3069 +3 2853 3069 2898 +3 2805 2970 3029 +3 2805 3029 2853 +3 2743 2910 2970 +3 2743 2970 2805 +3 2696 2859 2910 +3 2696 2910 2743 +3 2649 2810 2859 +3 2649 2859 2696 +3 2587 2740 2810 +3 2587 2810 2649 +3 2537 2692 2740 +3 2537 2740 2587 +3 2484 2636 2692 +3 2484 2692 2537 +3 2423 2569 2636 +3 2423 2636 2484 +3 2374 2518 2569 +3 2374 2569 2423 +3 2325 2458 2518 +3 2325 2518 2374 +3 2259 2397 2458 +3 2259 2458 2325 +3 2212 2347 2397 +3 2212 2397 2259 +3 2164 2287 2347 +3 2164 2347 2212 +3 2108 2225 2287 +3 2108 2287 2164 +3 2057 2172 2225 +3 2057 2225 2108 +3 2010 2112 2172 +3 2010 2172 2057 +3 1967 2056 2112 +3 1967 2112 2010 +3 1905 2008 2056 +3 1905 2056 1967 +3 1863 1951 2008 +3 1863 2008 1905 +3 1824 1890 1951 +3 1824 1951 1863 +3 1783 1844 1890 +3 1783 1890 1824 +3 1726 1798 1844 +3 1726 1844 1783 +3 1686 1737 1798 +3 1686 1798 1726 +3 1651 1687 1737 +3 1651 1737 1686 +3 1618 1641 1687 +3 1618 1687 1651 +3 1595 1607 1641 +3 1595 1641 1618 +3 1569 1607 1595 +3 1569 1614 1607 +3 1607 1614 1665 +3 1607 1665 1641 +3 1641 1665 1724 +3 1641 1724 1687 +3 1687 1724 1794 +3 1687 1794 1737 +3 1737 1794 1849 +3 1737 1849 1798 +3 1798 1849 1903 +3 1798 1903 1844 +3 1844 1903 1973 +3 1844 1973 1890 +3 1890 1973 2028 +3 1890 2028 1951 +3 1951 2028 2084 +3 1951 2084 2008 +3 2008 2084 2157 +3 2008 2157 2056 +3 2056 2157 2214 +3 2056 2214 2112 +3 2112 2214 2280 +3 2112 2280 2172 +3 2172 2280 2346 +3 2172 2346 2225 +3 2225 2346 2399 +3 2225 2399 2287 +3 2287 2399 2472 +3 2287 2472 2347 +3 2347 2472 2536 +3 2347 2536 2397 +3 2397 2536 2593 +3 2397 2593 2458 +3 2458 2593 2661 +3 2458 2661 2518 +3 2518 2661 2715 +3 2518 2715 2569 +3 2569 2715 2782 +3 2569 2782 2636 +3 2636 2782 2846 +3 2636 2846 2692 +3 2692 2846 2902 +3 2692 2902 2740 +3 2740 2902 2969 +3 2740 2969 2810 +3 2810 2969 3033 +3 2810 3033 2859 +3 2859 3033 3080 +3 2859 3080 2910 +3 2910 3080 3149 +3 2910 3149 2970 +3 2970 3149 3211 +3 2970 3211 3029 +3 3029 3211 3265 +3 3029 3265 3069 +3 3069 3265 3310 +3 3069 3310 3115 +3 3115 3310 3363 +3 3115 3363 3178 +3 3178 3363 3400 +3 3178 3400 3225 +3 3225 3400 3433 +3 3225 3433 3269 +3 3269 3433 3470 +3 3269 3470 3305 +3 3305 3470 3507 +3 3305 3507 3341 +3 3341 3507 3538 +3 3341 3538 3376 +3 3376 3538 3554 +3 3376 3554 3404 +3 3404 3554 3566 +3 3404 3566 3423 +3 3423 3566 3576 +3 3423 3576 3439 +3 3439 3576 3585 +3 3439 3585 3454 +3 3454 3585 3587 +3 3454 3587 3465 +3 3465 3587 3582 +3 3465 3582 3474 +3 3474 3582 3571 +3 3474 3571 3475 +3 3475 3571 3560 +3 3475 3560 3473 +3 3473 3560 3546 +3 3473 3546 3464 +3 3464 3546 3519 +3 3464 3519 3451 +3 3451 3519 3484 +3 3451 3484 3434 +3 3434 3484 3450 +3 3434 3450 3420 +3 3420 3450 3419 +3 3420 3419 3395 +3 3395 3419 3378 +3 3395 3378 3369 +3 3369 3378 3332 +3 3378 3388 3332 +3 3419 3436 3388 +3 3419 3388 3378 +3 3450 3489 3436 +3 3450 3436 3419 +3 3484 3541 3489 +3 3484 3489 3450 +3 3519 3575 3541 +3 3519 3541 3484 +3 3546 3607 3575 +3 3546 3575 3519 +3 3560 3628 3607 +3 3560 3607 3546 +3 3571 3648 3628 +3 3571 3628 3560 +3 3582 3661 3648 +3 3582 3648 3571 +3 3587 3675 3661 +3 3587 3661 3582 +3 3585 3684 3675 +3 3585 3675 3587 +3 3576 3688 3684 +3 3576 3684 3585 +3 3566 3685 3688 +3 3566 3688 3576 +3 3554 3677 3685 +3 3554 3685 3566 +3 3538 3663 3677 +3 3538 3677 3554 +3 3507 3649 3663 +3 3507 3663 3538 +3 3470 3631 3649 +3 3470 3649 3507 +3 3433 3609 3631 +3 3433 3631 3470 +3 3400 3577 3609 +3 3400 3609 3433 +3 3363 3544 3577 +3 3363 3577 3400 +3 3310 3492 3544 +3 3310 3544 3363 +3 3265 3441 3492 +3 3265 3492 3310 +3 3211 3393 3441 +3 3211 3441 3265 +3 3149 3338 3393 +3 3149 3393 3211 +3 3080 3282 3338 +3 3080 3338 3149 +3 3033 3216 3282 +3 3033 3282 3080 +3 2969 3142 3216 +3 2969 3216 3033 +3 2902 3071 3142 +3 2902 3142 2969 +3 2846 3010 3071 +3 2846 3071 2902 +3 2782 2932 3010 +3 2782 3010 2846 +3 2715 2869 2932 +3 2715 2932 2782 +3 2661 2804 2869 +3 2661 2869 2715 +3 2593 2728 2804 +3 2593 2804 2661 +3 2536 2666 2728 +3 2536 2728 2593 +3 2472 2589 2666 +3 2472 2666 2536 +3 2399 2522 2589 +3 2399 2589 2472 +3 2346 2456 2522 +3 2346 2522 2399 +3 2280 2382 2456 +3 2280 2456 2346 +3 2214 2316 2382 +3 2214 2382 2280 +3 2157 2241 2316 +3 2157 2316 2214 +3 2084 2178 2241 +3 2084 2241 2157 +3 2028 2102 2178 +3 2028 2178 2084 +3 1973 2040 2102 +3 1973 2102 2028 +3 1903 1976 2040 +3 1903 2040 1973 +3 1849 1896 1976 +3 1849 1976 1903 +3 1794 1835 1896 +3 1794 1896 1849 +3 1724 1768 1835 +3 1724 1835 1794 +3 1665 1688 1768 +3 1665 1768 1724 +3 1614 1627 1688 +3 1614 1688 1665 +3 1569 1627 1614 +3 1569 1635 1627 +3 1627 1635 1710 +3 1627 1710 1688 +3 1688 1710 1800 +3 1688 1800 1768 +3 1768 1800 1869 +3 1768 1869 1835 +3 1835 1869 1958 +3 1835 1958 1896 +3 1896 1958 2027 +3 1896 2027 1976 +3 1976 2027 2101 +3 1976 2101 2040 +3 2040 2101 2184 +3 2040 2184 2102 +3 2102 2184 2249 +3 2102 2249 2178 +3 2178 2249 2338 +3 2178 2338 2241 +3 2241 2338 2403 +3 2241 2403 2316 +3 2316 2403 2490 +3 2316 2490 2382 +3 2382 2490 2559 +3 2382 2559 2456 +3 2456 2559 2646 +3 2456 2646 2522 +3 2522 2646 2712 +3 2522 2712 2589 +3 2589 2712 2792 +3 2589 2792 2666 +3 2666 2792 2867 +3 2666 2867 2728 +3 2728 2867 2935 +3 2728 2935 2804 +3 2804 2935 3028 +3 2804 3028 2869 +3 2869 3028 3095 +3 2869 3095 2932 +3 2932 3095 3182 +3 2932 3182 3010 +3 3010 3182 3258 +3 3010 3258 3071 +3 3071 3258 3324 +3 3071 3324 3142 +3 3142 3324 3396 +3 3142 3396 3216 +3 3216 3396 3455 +3 3216 3455 3282 +3 3282 3455 3526 +3 3282 3526 3338 +3 3338 3526 3579 +3 3338 3579 3393 +3 3393 3579 3621 +3 3393 3621 3441 +3 3441 3621 3654 +3 3441 3654 3492 +3 3492 3654 3701 +3 3492 3701 3544 +3 3544 3701 3734 +3 3544 3734 3577 +3 3577 3734 3751 +3 3577 3751 3609 +3 3609 3751 3765 +3 3609 3765 3631 +3 3631 3765 3780 +3 3631 3780 3649 +3 3649 3780 3791 +3 3649 3791 3663 +3 3663 3791 3795 +3 3663 3795 3677 +3 3677 3795 3796 +3 3677 3796 3685 +3 3685 3796 3792 +3 3685 3792 3688 +3 3688 3792 3782 +3 3688 3782 3684 +3 3684 3782 3767 +3 3684 3767 3675 +3 3675 3767 3753 +3 3675 3753 3661 +3 3661 3753 3736 +3 3661 3736 3648 +3 3648 3736 3707 +3 3648 3707 3628 +3 3628 3707 3655 +3 3628 3655 3607 +3 3607 3655 3625 +3 3607 3625 3575 +3 3575 3625 3584 +3 3575 3584 3541 +3 3541 3584 3533 +3 3541 3533 3489 +3 3489 3533 3460 +3 3489 3460 3436 +3 3436 3460 3402 +3 3436 3402 3388 +3 3388 3402 3332 +3 3402 3412 3332 +3 3460 3487 3412 +3 3460 3412 3402 +3 3533 3564 3487 +3 3533 3487 3460 +3 3584 3619 3564 +3 3584 3564 3533 +3 3625 3669 3619 +3 3625 3619 3584 +3 3655 3728 3669 +3 3655 3669 3625 +3 3707 3758 3728 +3 3707 3728 3655 +3 3736 3798 3758 +3 3736 3758 3707 +3 3753 3832 3798 +3 3753 3798 3736 +3 3767 3859 3832 +3 3767 3832 3753 +3 3782 3877 3859 +3 3782 3859 3767 +3 3792 3893 3877 +3 3792 3877 3782 +3 3796 3900 3893 +3 3796 3893 3792 +3 3795 3906 3900 +3 3795 3900 3796 +3 3791 3908 3906 +3 3791 3906 3795 +3 3780 3902 3908 +3 3780 3908 3791 +3 3765 3894 3902 +3 3765 3902 3780 +3 3751 3882 3894 +3 3751 3894 3765 +3 3734 3862 3882 +3 3734 3882 3751 +3 3701 3836 3862 +3 3701 3862 3734 +3 3654 3805 3836 +3 3654 3836 3701 +3 3621 3768 3805 +3 3621 3805 3654 +3 3579 3741 3768 +3 3579 3768 3621 +3 3526 3682 3741 +3 3526 3741 3579 +3 3455 3634 3682 +3 3455 3682 3526 +3 3396 3578 3634 +3 3396 3634 3455 +3 3324 3511 3578 +3 3324 3578 3396 +3 3258 3429 3511 +3 3258 3511 3324 +3 3182 3354 3429 +3 3182 3429 3258 +3 3095 3272 3354 +3 3095 3354 3182 +3 3028 3189 3272 +3 3028 3272 3095 +3 2935 3090 3189 +3 2935 3189 3028 +3 2867 3012 3090 +3 2867 3090 2935 +3 2792 2918 3012 +3 2792 3012 2867 +3 2712 2840 2918 +3 2712 2918 2792 +3 2646 2748 2840 +3 2646 2840 2712 +3 2559 2669 2748 +3 2559 2748 2646 +3 2490 2582 2669 +3 2490 2669 2559 +3 2403 2506 2582 +3 2403 2582 2490 +3 2338 2416 2506 +3 2338 2506 2403 +3 2249 2340 2416 +3 2249 2416 2338 +3 2184 2246 2340 +3 2184 2340 2249 +3 2101 2169 2246 +3 2101 2246 2184 +3 2027 2079 2169 +3 2027 2169 2101 +3 1958 2004 2079 +3 1958 2079 2027 +3 1869 1910 2004 +3 1869 2004 1958 +3 1800 1833 1910 +3 1800 1910 1869 +3 1710 1738 1833 +3 1710 1833 1800 +3 1635 1649 1738 +3 1635 1738 1710 +3 1569 1649 1635 +3 1569 1659 1649 +3 1649 1659 1767 +3 1649 1767 1738 +3 1738 1767 1859 +3 1738 1859 1833 +3 1833 1859 1965 +3 1833 1965 1910 +3 1910 1965 2045 +3 1910 2045 2004 +3 2004 2045 2146 +3 2004 2146 2079 +3 2079 2146 2229 +3 2079 2229 2169 +3 2169 2229 2327 +3 2169 2327 2246 +3 2246 2327 2405 +3 2246 2405 2340 +3 2340 2405 2507 +3 2340 2507 2416 +3 2416 2507 2592 +3 2416 2592 2506 +3 2506 2592 2686 +3 2506 2686 2582 +3 2582 2686 2771 +3 2582 2771 2669 +3 2669 2771 2868 +3 2669 2868 2748 +3 2748 2868 2960 +3 2748 2960 2840 +3 2840 2960 3053 +3 2840 3053 2918 +3 2918 3053 3154 +3 2918 3154 3012 +3 3012 3154 3256 +3 3012 3256 3090 +3 3090 3256 3348 +3 3090 3348 3189 +3 3189 3348 3431 +3 3189 3431 3272 +3 3272 3431 3528 +3 3272 3528 3354 +3 3354 3528 3603 +3 3354 3603 3429 +3 3429 3603 3660 +3 3429 3660 3511 +3 3511 3660 3738 +3 3511 3738 3578 +3 3578 3738 3779 +3 3578 3779 3634 +3 3634 3779 3831 +3 3634 3831 3682 +3 3682 3831 3871 +3 3682 3871 3741 +3 3741 3871 3907 +3 3741 3907 3768 +3 3768 3907 3937 +3 3768 3937 3805 +3 3805 3937 3960 +3 3805 3960 3836 +3 3836 3960 3983 +3 3836 3983 3862 +3 3862 3983 4000 +3 3862 4000 3882 +3 3882 4000 4014 +3 3882 4014 3894 +3 3894 4014 4016 +3 3894 4016 3902 +3 3902 4016 4015 +3 3902 4015 3908 +3 3908 4015 4012 +3 3908 4012 3906 +3 3906 4012 3997 +3 3906 3997 3900 +3 3900 3997 3978 +3 3900 3978 3893 +3 3893 3978 3958 +3 3893 3958 3877 +3 3877 3958 3932 +3 3877 3932 3859 +3 3859 3932 3901 +3 3859 3901 3832 +3 3832 3901 3864 +3 3832 3864 3798 +3 3798 3864 3821 +3 3798 3821 3758 +3 3758 3821 3772 +3 3758 3772 3728 +3 3728 3772 3727 +3 3728 3727 3669 +3 3669 3727 3653 +3 3669 3653 3619 +3 3619 3653 3595 +3 3619 3595 3564 +3 3564 3595 3515 +3 3564 3515 3487 +3 3487 3515 3422 +3 3487 3422 3412 +3 3412 3422 3332 +3 3422 3430 3332 +3 3515 3539 3430 +3 3515 3430 3422 +3 3595 3616 3539 +3 3595 3539 3515 +3 3653 3696 3616 +3 3653 3616 3595 +3 3727 3759 3696 +3 3727 3696 3653 +3 3772 3824 3759 +3 3772 3759 3727 +3 3821 3881 3824 +3 3821 3824 3772 +3 3864 3927 3881 +3 3864 3881 3821 +3 3901 3967 3927 +3 3901 3927 3864 +3 3932 4013 3967 +3 3932 3967 3901 +3 3958 4038 4013 +3 3958 4013 3932 +3 3978 4061 4038 +3 3978 4038 3958 +3 3997 4079 4061 +3 3997 4061 3978 +3 4012 4097 4079 +3 4012 4079 3997 +3 4015 4110 4097 +3 4015 4097 4012 +3 4016 4117 4110 +3 4016 4110 4015 +3 4014 4115 4117 +3 4014 4117 4016 +3 4000 4105 4115 +3 4000 4115 4014 +3 3983 4092 4105 +3 3983 4105 4000 +3 3960 4075 4092 +3 3960 4092 3983 +3 3937 4054 4075 +3 3937 4075 3960 +3 3907 4029 4054 +3 3907 4054 3937 +3 3871 3999 4029 +3 3871 4029 3907 +3 3831 3956 3999 +3 3831 3999 3871 +3 3779 3916 3956 +3 3779 3956 3831 +3 3738 3863 3916 +3 3738 3916 3779 +3 3660 3806 3863 +3 3660 3863 3738 +3 3603 3749 3806 +3 3603 3806 3660 +3 3528 3670 3749 +3 3528 3749 3603 +3 3431 3600 3670 +3 3431 3670 3528 +3 3348 3508 3600 +3 3348 3600 3431 +3 3256 3409 3508 +3 3256 3508 3348 +3 3154 3299 3409 +3 3154 3409 3256 +3 3053 3200 3299 +3 3053 3299 3154 +3 2960 3078 3200 +3 2960 3200 3053 +3 2868 2988 3078 +3 2868 3078 2960 +3 2771 2881 2988 +3 2771 2988 2868 +3 2686 2778 2881 +3 2686 2881 2771 +3 2592 2682 2778 +3 2592 2778 2686 +3 2507 2579 2682 +3 2507 2682 2592 +3 2405 2489 2579 +3 2405 2579 2507 +3 2327 2386 2489 +3 2327 2489 2405 +3 2229 2294 2386 +3 2229 2386 2327 +3 2146 2191 2294 +3 2146 2294 2229 +3 2045 2086 2191 +3 2045 2191 2146 +3 1965 1996 2086 +3 1965 2086 2045 +3 1859 1887 1996 +3 1859 1996 1965 +3 1767 1793 1887 +3 1767 1887 1859 +3 1659 1669 1793 +3 1659 1793 1767 +3 1569 1669 1659 +3 1569 1679 1669 +3 1669 1679 1807 +3 1669 1807 1793 +3 1793 1807 1912 +3 1793 1912 1887 +3 1887 1912 2025 +3 1887 2025 1996 +3 1996 2025 2144 +3 1996 2144 2086 +3 2086 2144 2238 +3 2086 2238 2191 +3 2191 2238 2352 +3 2191 2352 2294 +3 2294 2352 2453 +3 2294 2453 2386 +3 2386 2453 2551 +3 2386 2551 2489 +3 2489 2551 2667 +3 2489 2667 2579 +3 2579 2667 2758 +3 2579 2758 2682 +3 2682 2758 2878 +3 2682 2878 2778 +3 2778 2878 2992 +3 2778 2992 2881 +3 2881 2992 3096 +3 2881 3096 2988 +3 2988 3096 3223 +3 2988 3223 3078 +3 3078 3223 3335 +3 3078 3335 3200 +3 3200 3335 3442 +3 3200 3442 3299 +3 3299 3442 3557 +3 3299 3557 3409 +3 3409 3557 3642 +3 3409 3642 3508 +3 3508 3642 3740 +3 3508 3740 3600 +3 3600 3740 3802 +3 3600 3802 3670 +3 3670 3802 3872 +3 3670 3872 3749 +3 3749 3872 3931 +3 3749 3931 3806 +3 3806 3931 3986 +3 3806 3986 3863 +3 3863 3986 4034 +3 3863 4034 3916 +3 3916 4034 4072 +3 3916 4072 3956 +3 3956 4072 4113 +3 3956 4113 3999 +3 3999 4113 4143 +3 3999 4143 4029 +3 4029 4143 4164 +3 4029 4164 4054 +3 4054 4164 4180 +3 4054 4180 4075 +3 4075 4180 4193 +3 4075 4193 4092 +3 4092 4193 4201 +3 4092 4201 4105 +3 4105 4201 4207 +3 4105 4207 4115 +3 4115 4207 4200 +3 4115 4200 4117 +3 4117 4200 4192 +3 4117 4192 4110 +3 4110 4192 4179 +3 4110 4179 4097 +3 4097 4179 4163 +3 4097 4163 4079 +3 4079 4163 4141 +3 4079 4141 4061 +3 4061 4141 4112 +3 4061 4112 4038 +3 4038 4112 4071 +3 4038 4071 4013 +3 4013 4071 4032 +3 4013 4032 3967 +3 3967 4032 3985 +3 3967 3985 3927 +3 3927 3985 3930 +3 3927 3930 3881 +3 3881 3930 3870 +3 3881 3870 3824 +3 3824 3870 3801 +3 3824 3801 3759 +3 3759 3801 3739 +3 3759 3739 3696 +3 3696 3739 3641 +3 3696 3641 3616 +3 3616 3641 3555 +3 3616 3555 3539 +3 3539 3555 3438 +3 3539 3438 3430 +3 3430 3438 3332 +3 3438 3449 3332 +3 3555 3572 3449 +3 3555 3449 3438 +3 3641 3665 3572 +3 3641 3572 3555 +3 3739 3756 3665 +3 3739 3665 3641 +3 3801 3844 3756 +3 3801 3756 3739 +3 3870 3917 3844 +3 3870 3844 3801 +3 3930 3979 3917 +3 3930 3917 3870 +3 3985 4041 3979 +3 3985 3979 3930 +3 4032 4088 4041 +3 4032 4041 3985 +3 4071 4136 4088 +3 4071 4088 4032 +3 4112 4173 4136 +3 4112 4136 4071 +3 4141 4216 4173 +3 4141 4173 4112 +3 4163 4243 4216 +3 4163 4216 4141 +3 4179 4259 4243 +3 4179 4243 4163 +3 4192 4273 4259 +3 4192 4259 4179 +3 4200 4287 4273 +3 4200 4273 4192 +3 4207 4294 4287 +3 4207 4287 4200 +3 4201 4295 4294 +3 4201 4294 4207 +3 4193 4289 4295 +3 4193 4295 4201 +3 4180 4274 4289 +3 4180 4289 4193 +3 4164 4262 4274 +3 4164 4274 4180 +3 4143 4247 4262 +3 4143 4262 4164 +3 4113 4219 4247 +3 4113 4247 4143 +3 4072 4176 4219 +3 4072 4219 4113 +3 4034 4145 4176 +3 4034 4176 4072 +3 3986 4094 4145 +3 3986 4145 4034 +3 3931 4046 4094 +3 3931 4094 3986 +3 3872 3987 4046 +3 3872 4046 3931 +3 3802 3921 3987 +3 3802 3987 3872 +3 3740 3855 3921 +3 3740 3921 3802 +3 3642 3764 3855 +3 3642 3855 3740 +3 3557 3676 3764 +3 3557 3764 3642 +3 3442 3586 3676 +3 3442 3676 3557 +3 3335 3461 3586 +3 3335 3586 3442 +3 3223 3344 3461 +3 3223 3461 3335 +3 3096 3224 3344 +3 3096 3344 3223 +3 2992 3085 3224 +3 2992 3224 3096 +3 2878 2972 3085 +3 2878 3085 2992 +3 2758 2855 2972 +3 2758 2972 2878 +3 2667 2734 2855 +3 2667 2855 2758 +3 2551 2625 2734 +3 2551 2734 2667 +3 2453 2511 2625 +3 2453 2625 2551 +3 2352 2396 2511 +3 2352 2511 2453 +3 2238 2292 2396 +3 2238 2396 2352 +3 2144 2177 2292 +3 2144 2292 2238 +3 2025 2058 2177 +3 2025 2177 2144 +3 1912 1945 2058 +3 1912 2058 2025 +3 1807 1827 1945 +3 1807 1945 1912 +3 1679 1689 1827 +3 1679 1827 1807 +3 1569 1689 1679 +3 1569 1698 1689 +3 1689 1698 1840 +3 1689 1840 1827 +3 1827 1840 1974 +3 1827 1974 1945 +3 1945 1974 2085 +3 1945 2085 2058 +3 2058 2085 2210 +3 2058 2210 2177 +3 2177 2210 2337 +3 2177 2337 2292 +3 2292 2337 2451 +3 2292 2451 2396 +3 2396 2451 2567 +3 2396 2567 2511 +3 2511 2567 2693 +3 2511 2693 2625 +3 2625 2693 2818 +3 2625 2818 2734 +3 2734 2818 2929 +3 2734 2929 2855 +3 2855 2929 3063 +3 2855 3063 2972 +3 2972 3063 3204 +3 2972 3204 3085 +3 3085 3204 3334 +3 3085 3334 3224 +3 3224 3334 3457 +3 3224 3457 3344 +3 3344 3457 3593 +3 3344 3593 3461 +3 3461 3593 3700 +3 3461 3700 3586 +3 3586 3700 3789 +3 3586 3789 3676 +3 3676 3789 3880 +3 3676 3880 3764 +3 3764 3880 3955 +3 3764 3955 3855 +3 3855 3955 4026 +3 3855 4026 3921 +3 3921 4026 4087 +3 3921 4087 3987 +3 3987 4087 4151 +3 3987 4151 4046 +3 4046 4151 4190 +3 4046 4190 4094 +3 4094 4190 4244 +3 4094 4244 4145 +3 4145 4244 4271 +3 4145 4271 4176 +3 4176 4271 4309 +3 4176 4309 4219 +3 4219 4309 4337 +3 4219 4337 4247 +3 4247 4337 4352 +3 4247 4352 4262 +3 4262 4352 4368 +3 4262 4368 4274 +3 4274 4368 4375 +3 4274 4375 4289 +3 4289 4375 4377 +3 4289 4377 4295 +3 4295 4377 4374 +3 4295 4374 4294 +3 4294 4374 4367 +3 4294 4367 4287 +3 4287 4367 4351 +3 4287 4351 4273 +3 4273 4351 4335 +3 4273 4335 4259 +3 4259 4335 4308 +3 4259 4308 4243 +3 4243 4308 4270 +3 4243 4270 4216 +3 4216 4270 4242 +3 4216 4242 4173 +3 4173 4242 4188 +3 4173 4188 4136 +3 4136 4188 4149 +3 4136 4149 4088 +3 4088 4149 4085 +3 4088 4085 4041 +3 4041 4085 4024 +3 4041 4024 3979 +3 3979 4024 3954 +3 3979 3954 3917 +3 3917 3954 3878 +3 3917 3878 3844 +3 3844 3878 3788 +3 3844 3788 3756 +3 3756 3788 3697 +3 3756 3697 3665 +3 3665 3697 3590 +3 3665 3590 3572 +3 3572 3590 3456 +3 3572 3456 3449 +3 3449 3456 3332 +3 3456 3468 3332 +3 3590 3605 3468 +3 3590 3468 3456 +3 3697 3722 3605 +3 3697 3605 3590 +3 3788 3816 3722 +3 3788 3722 3697 +3 3878 3912 3816 +3 3878 3816 3788 +3 3954 3994 3912 +3 3954 3912 3878 +3 4024 4067 3994 +3 4024 3994 3954 +3 4085 4134 4067 +3 4085 4067 4024 +3 4149 4189 4134 +3 4149 4134 4085 +3 4188 4250 4189 +3 4188 4189 4149 +3 4242 4296 4250 +3 4242 4250 4188 +3 4270 4339 4296 +3 4270 4296 4242 +3 4308 4371 4339 +3 4308 4339 4270 +3 4335 4402 4371 +3 4335 4371 4308 +3 4351 4426 4402 +3 4351 4402 4335 +3 4367 4437 4426 +3 4367 4426 4351 +3 4374 4449 4437 +3 4374 4437 4367 +3 4377 4455 4449 +3 4377 4449 4374 +3 4375 4453 4455 +3 4375 4455 4377 +3 4368 4446 4453 +3 4368 4453 4375 +3 4352 4433 4446 +3 4352 4446 4368 +3 4337 4424 4433 +3 4337 4433 4352 +3 4309 4394 4424 +3 4309 4424 4337 +3 4271 4363 4394 +3 4271 4394 4309 +3 4244 4332 4363 +3 4244 4363 4271 +3 4190 4282 4332 +3 4190 4332 4244 +3 4151 4240 4282 +3 4151 4282 4190 +3 4087 4178 4240 +3 4087 4240 4151 +3 4026 4125 4178 +3 4026 4178 4087 +3 3955 4048 4125 +3 3955 4125 4026 +3 3880 3971 4048 +3 3880 4048 3955 +3 3789 3892 3971 +3 3789 3971 3880 +3 3700 3794 3892 +3 3700 3892 3789 +3 3593 3694 3794 +3 3593 3794 3700 +3 3457 3581 3694 +3 3457 3694 3593 +3 3334 3435 3581 +3 3334 3581 3457 +3 3204 3298 3435 +3 3204 3435 3334 +3 3063 3158 3298 +3 3063 3298 3204 +3 2929 3018 3158 +3 2929 3158 3063 +3 2818 2883 3018 +3 2818 3018 2929 +3 2693 2747 2883 +3 2693 2883 2818 +3 2567 2626 2747 +3 2567 2747 2693 +3 2451 2503 2626 +3 2451 2626 2567 +3 2337 2373 2503 +3 2337 2503 2451 +3 2210 2243 2373 +3 2210 2373 2337 +3 2085 2124 2243 +3 2085 2243 2210 +3 1974 1993 2124 +3 1974 2124 2085 +3 1840 1857 1993 +3 1840 1993 1974 +3 1698 1707 1857 +3 1698 1857 1840 +3 1569 1707 1698 +3 1569 1715 1707 +3 1707 1715 1867 +3 1707 1867 1857 +3 1857 1867 2012 +3 1857 2012 1993 +3 1993 2012 2152 +3 1993 2152 2124 +3 2124 2152 2284 +3 2124 2284 2243 +3 2243 2284 2408 +3 2243 2408 2373 +3 2373 2408 2545 +3 2373 2545 2503 +3 2503 2545 2677 +3 2503 2677 2626 +3 2626 2677 2819 +3 2626 2819 2747 +3 2747 2819 2941 +3 2747 2941 2883 +3 2883 2941 3088 +3 2883 3088 3018 +3 3018 3088 3248 +3 3018 3248 3158 +3 3158 3248 3397 +3 3158 3397 3298 +3 3298 3397 3548 +3 3298 3548 3435 +3 3435 3548 3664 +3 3435 3664 3581 +3 3581 3664 3781 +3 3581 3781 3694 +3 3694 3781 3888 +3 3694 3888 3794 +3 3794 3888 3976 +3 3794 3976 3892 +3 3892 3976 4060 +3 3892 4060 3971 +3 3971 4060 4137 +3 3971 4137 4048 +3 4048 4137 4203 +3 4048 4203 4125 +3 4125 4203 4264 +3 4125 4264 4178 +3 4178 4264 4324 +3 4178 4324 4240 +3 4240 4324 4366 +3 4240 4366 4282 +3 4282 4366 4411 +3 4282 4411 4332 +3 4332 4411 4443 +3 4332 4443 4363 +3 4363 4443 4471 +3 4363 4471 4394 +3 4394 4471 4498 +3 4394 4498 4424 +3 4424 4498 4510 +3 4424 4510 4433 +3 4433 4510 4521 +3 4433 4521 4446 +3 4446 4521 4526 +3 4446 4526 4453 +3 4453 4526 4525 +3 4453 4525 4455 +3 4455 4525 4515 +3 4455 4515 4449 +3 4449 4515 4505 +3 4449 4505 4437 +3 4437 4505 4490 +3 4437 4490 4426 +3 4426 4490 4460 +3 4426 4460 4402 +3 4402 4460 4430 +3 4402 4430 4371 +3 4371 4430 4390 +3 4371 4390 4339 +3 4339 4390 4346 +3 4339 4346 4296 +3 4296 4346 4298 +3 4296 4298 4250 +3 4250 4298 4245 +3 4250 4245 4189 +3 4189 4245 4174 +3 4189 4174 4134 +3 4134 4174 4106 +3 4134 4106 4067 +3 4067 4106 4027 +3 4067 4027 3994 +3 3994 4027 3939 +3 3994 3939 3912 +3 3912 3939 3848 +3 3912 3848 3816 +3 3816 3848 3745 +3 3816 3745 3722 +3 3722 3745 3615 +3 3722 3615 3605 +3 3605 3615 3476 +3 3605 3476 3468 +3 3468 3476 3332 +3 3476 3486 3332 +3 3615 3632 3486 +3 3615 3486 3476 +3 3745 3755 3632 +3 3745 3632 3615 +3 3848 3867 3755 +3 3848 3755 3745 +3 3939 3965 3867 +3 3939 3867 3848 +3 4027 4058 3965 +3 4027 3965 3939 +3 4106 4146 4058 +3 4106 4058 4027 +3 4174 4222 4146 +3 4174 4146 4106 +3 4245 4278 4222 +3 4245 4222 4174 +3 4298 4344 4278 +3 4298 4278 4245 +3 4346 4397 4344 +3 4346 4344 4298 +3 4390 4442 4397 +3 4390 4397 4346 +3 4430 4485 4442 +3 4430 4442 4390 +3 4460 4514 4485 +3 4460 4485 4430 +3 4490 4545 4514 +3 4490 4514 4460 +3 4505 4564 4545 +3 4505 4545 4490 +3 4515 4581 4564 +3 4515 4564 4505 +3 4525 4590 4581 +3 4525 4581 4515 +3 4526 4592 4590 +3 4526 4590 4525 +3 4521 4589 4592 +3 4521 4592 4526 +3 4510 4579 4589 +3 4510 4589 4521 +3 4498 4563 4579 +3 4498 4579 4510 +3 4471 4544 4563 +3 4471 4563 4498 +3 4443 4513 4544 +3 4443 4544 4471 +3 4411 4483 4513 +3 4411 4513 4443 +3 4366 4440 4483 +3 4366 4483 4411 +3 4324 4395 4440 +3 4324 4440 4366 +3 4264 4342 4395 +3 4264 4395 4324 +3 4203 4275 4342 +3 4203 4342 4264 +3 4137 4221 4275 +3 4137 4275 4203 +3 4060 4142 4221 +3 4060 4221 4137 +3 3976 4055 4142 +3 3976 4142 4060 +3 3888 3963 4055 +3 3888 4055 3976 +3 3781 3865 3963 +3 3781 3963 3888 +3 3664 3754 3865 +3 3664 3865 3781 +3 3548 3627 3754 +3 3548 3754 3664 +3 3397 3481 3627 +3 3397 3627 3548 +3 3248 3329 3481 +3 3248 3481 3397 +3 3088 3173 3329 +3 3088 3329 3248 +3 2941 3016 3173 +3 2941 3173 3088 +3 2819 2865 3016 +3 2819 3016 2941 +3 2677 2722 2865 +3 2677 2865 2819 +3 2545 2583 2722 +3 2545 2722 2677 +3 2408 2447 2583 +3 2408 2583 2545 +3 2284 2313 2447 +3 2284 2447 2408 +3 2152 2175 2313 +3 2152 2313 2284 +3 2012 2031 2175 +3 2012 2175 2152 +3 1867 1878 2031 +3 1867 2031 2012 +3 1715 1725 1878 +3 1715 1878 1867 +3 1569 1725 1715 +3 1569 1732 1725 +3 1725 1732 1895 +3 1725 1895 1878 +3 1878 1895 2047 +3 1878 2047 2031 +3 2031 2047 2194 +3 2031 2194 2175 +3 2175 2194 2343 +3 2175 2343 2313 +3 2313 2343 2486 +3 2313 2486 2447 +3 2447 2486 2627 +3 2447 2627 2583 +3 2583 2627 2762 +3 2583 2762 2722 +3 2722 2762 2917 +3 2722 2917 2865 +3 2865 2917 3070 +3 2865 3070 3016 +3 3016 3070 3243 +3 3016 3243 3173 +3 3173 3243 3408 +3 3173 3408 3329 +3 3329 3408 3567 +3 3329 3567 3481 +3 3481 3567 3709 +3 3481 3709 3627 +3 3627 3709 3827 +3 3627 3827 3754 +3 3754 3827 3935 +3 3754 3935 3865 +3 3865 3935 4036 +3 3865 4036 3963 +3 3963 4036 4130 +3 3963 4130 4055 +3 4055 4130 4210 +3 4055 4210 4142 +3 4142 4210 4279 +3 4142 4279 4221 +3 4221 4279 4347 +3 4221 4347 4275 +3 4275 4347 4412 +3 4275 4412 4342 +3 4342 4412 4461 +3 4342 4461 4395 +3 4395 4461 4506 +3 4395 4506 4440 +3 4440 4506 4549 +3 4440 4549 4483 +3 4483 4549 4580 +3 4483 4580 4513 +3 4513 4580 4606 +3 4513 4606 4544 +3 4544 4606 4628 +3 4544 4628 4563 +3 4563 4628 4639 +3 4563 4639 4579 +3 4579 4639 4647 +3 4579 4647 4589 +3 4589 4647 4650 +3 4589 4650 4592 +3 4592 4650 4645 +3 4592 4645 4590 +3 4590 4645 4636 +3 4590 4636 4581 +3 4581 4636 4617 +3 4581 4617 4564 +3 4564 4617 4593 +3 4564 4593 4545 +3 4545 4593 4566 +3 4545 4566 4514 +3 4514 4566 4529 +3 4514 4529 4485 +3 4485 4529 4493 +3 4485 4493 4442 +3 4442 4493 4435 +3 4442 4435 4397 +3 4397 4435 4379 +3 4397 4379 4344 +3 4344 4379 4325 +3 4344 4325 4278 +3 4278 4325 4252 +3 4278 4252 4222 +3 4222 4252 4171 +3 4222 4171 4146 +3 4146 4171 4083 +3 4146 4083 4058 +3 4058 4083 3995 +3 4058 3995 3965 +3 3965 3995 3890 +3 3965 3890 3867 +3 3867 3890 3770 +3 3867 3770 3755 +3 3755 3770 3640 +3 3755 3640 3632 +3 3632 3640 3495 +3 3632 3495 3486 +3 3486 3495 3332 +3 3495 3502 3332 +3 3640 3651 3502 +3 3640 3502 3495 +3 3770 3785 3651 +3 3770 3651 3640 +3 3890 3910 3785 +3 3890 3785 3770 +3 3995 4019 3910 +3 3995 3910 3890 +3 4083 4118 4019 +3 4083 4019 3995 +3 4171 4197 4118 +3 4171 4118 4083 +3 4252 4276 4197 +3 4252 4197 4171 +3 4325 4354 4276 +3 4325 4276 4252 +3 4379 4425 4354 +3 4379 4354 4325 +3 4435 4478 4425 +3 4435 4425 4379 +3 4493 4528 4478 +3 4493 4478 4435 +3 4529 4573 4528 +3 4529 4528 4493 +3 4566 4611 4573 +3 4566 4573 4529 +3 4593 4640 4611 +3 4593 4611 4566 +3 4617 4668 4640 +3 4617 4640 4593 +3 4636 4685 4668 +3 4636 4668 4617 +3 4645 4697 4685 +3 4645 4685 4636 +3 4650 4704 4697 +3 4650 4697 4645 +3 4647 4703 4704 +3 4647 4704 4650 +3 4639 4695 4703 +3 4639 4703 4647 +3 4628 4681 4695 +3 4628 4695 4639 +3 4606 4662 4681 +3 4606 4681 4628 +3 4580 4638 4662 +3 4580 4662 4606 +3 4549 4602 4638 +3 4549 4638 4580 +3 4506 4568 4602 +3 4506 4602 4549 +3 4461 4519 4568 +3 4461 4568 4506 +3 4412 4467 4519 +3 4412 4519 4461 +3 4347 4413 4467 +3 4347 4467 4412 +3 4279 4345 4413 +3 4279 4413 4347 +3 4210 4268 4345 +3 4210 4345 4279 +3 4130 4183 4268 +3 4130 4268 4210 +3 4036 4098 4183 +3 4036 4183 4130 +3 3935 4002 4098 +3 3935 4098 4036 +3 3827 3891 4002 +3 3827 4002 3935 +3 3709 3763 3891 +3 3709 3891 3827 +3 3567 3633 3763 +3 3567 3763 3709 +3 3408 3472 3633 +3 3408 3633 3567 +3 3243 3304 3472 +3 3243 3472 3408 +3 3070 3120 3304 +3 3070 3304 3243 +3 2917 2967 3120 +3 2917 3120 3070 +3 2762 2821 2967 +3 2762 2967 2917 +3 2627 2664 2821 +3 2627 2821 2762 +3 2486 2513 2664 +3 2486 2664 2627 +3 2343 2363 2513 +3 2343 2513 2486 +3 2194 2216 2363 +3 2194 2363 2343 +3 2047 2063 2216 +3 2047 2216 2194 +3 1895 1904 2063 +3 1895 2063 2047 +3 1732 1739 1904 +3 1732 1904 1895 +3 1569 1739 1732 +3 1569 1748 1739 +3 1739 1748 1914 +3 1739 1914 1904 +3 1904 1914 2074 +3 1904 2074 2063 +3 2063 2074 2233 +3 2063 2233 2216 +3 2216 2233 2387 +3 2216 2387 2363 +3 2363 2387 2540 +3 2363 2540 2513 +3 2513 2540 2695 +3 2513 2695 2664 +3 2664 2695 2851 +3 2664 2851 2821 +3 2821 2851 3013 +3 2821 3013 2967 +3 2967 3013 3192 +3 2967 3192 3120 +3 3120 3192 3366 +3 3120 3366 3304 +3 3304 3366 3543 +3 3304 3543 3472 +3 3472 3543 3689 +3 3472 3689 3633 +3 3633 3689 3825 +3 3633 3825 3763 +3 3763 3825 3944 +3 3763 3944 3891 +3 3891 3944 4051 +3 3891 4051 4002 +3 4002 4051 4155 +3 4002 4155 4098 +3 4098 4155 4248 +3 4098 4248 4183 +3 4183 4248 4326 +3 4183 4326 4268 +3 4268 4326 4398 +3 4268 4398 4345 +3 4345 4398 4462 +3 4345 4462 4413 +3 4413 4462 4520 +3 4413 4520 4467 +3 4467 4520 4574 +3 4467 4574 4519 +3 4519 4574 4616 +3 4519 4616 4568 +3 4568 4616 4655 +3 4568 4655 4602 +3 4602 4655 4687 +3 4602 4687 4638 +3 4638 4687 4712 +3 4638 4712 4662 +3 4662 4712 4729 +3 4662 4729 4681 +3 4681 4729 4743 +3 4681 4743 4695 +3 4695 4743 4750 +3 4695 4750 4703 +3 4703 4750 4749 +3 4703 4749 4704 +3 4704 4749 4740 +3 4704 4740 4697 +3 4697 4740 4726 +3 4697 4726 4685 +3 4685 4726 4705 +3 4685 4705 4668 +3 4668 4705 4682 +3 4668 4682 4640 +3 4640 4682 4648 +3 4640 4648 4611 +3 4611 4648 4610 +3 4611 4610 4573 +3 4573 4610 4562 +3 4573 4562 4528 +3 4528 4562 4509 +3 4528 4509 4478 +3 4478 4509 4450 +3 4478 4450 4425 +3 4425 4450 4382 +3 4425 4382 4354 +3 4354 4382 4311 +3 4354 4311 4276 +3 4276 4311 4230 +3 4276 4230 4197 +3 4197 4230 4135 +3 4197 4135 4118 +3 4118 4135 4035 +3 4118 4035 4019 +3 4019 4035 3924 +3 4019 3924 3910 +3 3910 3924 3800 +3 3910 3800 3785 +3 3785 3800 3657 +3 3785 3657 3651 +3 3651 3657 3512 +3 3651 3512 3502 +3 3502 3512 3332 +3 3512 3517 3332 +3 3657 3671 3517 +3 3657 3517 3512 +3 3800 3811 3671 +3 3800 3671 3657 +3 3924 3938 3811 +3 3924 3811 3800 +3 4035 4049 3938 +3 4035 3938 3924 +3 4135 4157 4049 +3 4135 4049 4035 +3 4230 4251 4157 +3 4230 4157 4135 +3 4311 4336 4251 +3 4311 4251 4230 +3 4382 4415 4336 +3 4382 4336 4311 +3 4450 4480 4415 +3 4450 4415 4382 +3 4509 4539 4480 +3 4509 4480 4450 +3 4562 4594 4539 +3 4562 4539 4509 +3 4610 4641 4594 +3 4610 4594 4562 +3 4648 4684 4641 +3 4648 4641 4610 +3 4682 4718 4684 +3 4682 4684 4648 +3 4705 4746 4718 +3 4705 4718 4682 +3 4726 4762 4746 +3 4726 4746 4705 +3 4740 4780 4762 +3 4740 4762 4726 +3 4749 4787 4780 +3 4749 4780 4740 +3 4750 4788 4787 +3 4750 4787 4749 +3 4743 4785 4788 +3 4743 4788 4750 +3 4729 4770 4785 +3 4729 4785 4743 +3 4712 4756 4770 +3 4712 4770 4729 +3 4687 4728 4756 +3 4687 4756 4712 +3 4655 4701 4728 +3 4655 4728 4687 +3 4616 4661 4701 +3 4616 4701 4655 +3 4574 4615 4661 +3 4574 4661 4616 +3 4520 4569 4615 +3 4520 4615 4574 +3 4462 4507 4569 +3 4462 4569 4520 +3 4398 4441 4507 +3 4398 4507 4462 +3 4326 4369 4441 +3 4326 4441 4398 +3 4248 4284 4369 +3 4248 4369 4326 +3 4155 4195 4284 +3 4155 4284 4248 +3 4051 4099 4195 +3 4051 4195 4155 +3 3944 3992 4099 +3 3944 4099 4051 +3 3825 3873 3992 +3 3825 3992 3944 +3 3689 3747 3873 +3 3689 3873 3825 +3 3543 3594 3747 +3 3543 3747 3689 +3 3366 3414 3594 +3 3366 3594 3543 +3 3192 3238 3414 +3 3192 3414 3366 +3 3013 3050 3238 +3 3013 3238 3192 +3 2851 2882 3050 +3 2851 3050 3013 +3 2695 2716 2882 +3 2695 2882 2851 +3 2540 2560 2716 +3 2540 2716 2695 +3 2387 2402 2560 +3 2387 2560 2540 +3 2233 2245 2402 +3 2233 2402 2387 +3 2074 2087 2245 +3 2074 2245 2233 +3 1914 1926 2087 +3 1914 2087 2074 +3 1748 1751 1926 +3 1748 1926 1914 +3 1569 1751 1748 +3 1569 1756 1751 +3 1751 1756 1936 +3 1751 1936 1926 +3 1926 1936 2099 +3 1926 2099 2087 +3 2087 2099 2257 +3 2087 2257 2245 +3 2245 2257 2421 +3 2245 2421 2402 +3 2402 2421 2580 +3 2402 2580 2560 +3 2560 2580 2739 +3 2560 2739 2716 +3 2716 2739 2904 +3 2716 2904 2882 +3 2882 2904 3076 +3 2882 3076 3050 +3 3050 3076 3275 +3 3050 3275 3238 +3 3238 3275 3453 +3 3238 3453 3414 +3 3414 3453 3629 +3 3414 3629 3594 +3 3594 3629 3776 +3 3594 3776 3747 +3 3747 3776 3913 +3 3747 3913 3873 +3 3873 3913 4031 +3 3873 4031 3992 +3 3992 4031 4140 +3 3992 4140 4099 +3 4099 4140 4241 +3 4099 4241 4195 +3 4195 4241 4330 +3 4195 4330 4284 +3 4284 4330 4409 +3 4284 4409 4369 +3 4369 4409 4481 +3 4369 4481 4441 +3 4441 4481 4548 +3 4441 4548 4507 +3 4507 4548 4601 +3 4507 4601 4569 +3 4569 4601 4654 +3 4569 4654 4615 +3 4615 4654 4700 +3 4615 4700 4661 +3 4661 4700 4735 +3 4661 4735 4701 +3 4701 4735 4765 +3 4701 4765 4728 +3 4728 4765 4792 +3 4728 4792 4756 +3 4756 4792 4808 +3 4756 4808 4770 +3 4770 4808 4816 +3 4770 4816 4785 +3 4785 4816 4824 +3 4785 4824 4788 +3 4788 4824 4822 +3 4788 4822 4787 +3 4787 4822 4810 +3 4787 4810 4780 +3 4780 4810 4797 +3 4780 4797 4762 +3 4762 4797 4774 +3 4762 4774 4746 +3 4746 4774 4748 +3 4746 4748 4718 +3 4718 4748 4713 +3 4718 4713 4684 +3 4684 4713 4670 +3 4684 4670 4641 +3 4641 4670 4622 +3 4641 4622 4594 +3 4594 4622 4567 +3 4594 4567 4539 +3 4539 4567 4504 +3 4539 4504 4480 +3 4480 4504 4432 +3 4480 4432 4415 +3 4415 4432 4353 +3 4415 4353 4336 +3 4336 4353 4265 +3 4336 4265 4251 +3 4251 4265 4170 +3 4251 4170 4157 +3 4157 4170 4066 +3 4157 4066 4049 +3 4049 4066 3949 +3 4049 3949 3938 +3 3938 3949 3823 +3 3938 3823 3811 +3 3811 3823 3679 +3 3811 3679 3671 +3 3671 3679 3521 +3 3671 3521 3517 +3 3517 3521 3332 +3 3521 3523 3332 +3 3679 3686 3523 +3 3679 3523 3521 +3 3823 3834 3686 +3 3823 3686 3679 +3 3949 3959 3834 +3 3949 3834 3823 +3 4066 4077 3959 +3 4066 3959 3949 +3 4170 4182 4077 +3 4170 4077 4066 +3 4265 4280 4182 +3 4265 4182 4170 +3 4353 4370 4280 +3 4353 4280 4265 +3 4432 4448 4370 +3 4432 4370 4353 +3 4504 4522 4448 +3 4504 4448 4432 +3 4567 4588 4522 +3 4567 4522 4504 +3 4622 4644 4588 +3 4622 4588 4567 +3 4670 4693 4644 +3 4670 4644 4622 +3 4713 4734 4693 +3 4713 4693 4670 +3 4748 4769 4734 +3 4748 4734 4713 +3 4774 4801 4769 +3 4774 4769 4748 +3 4797 4825 4801 +3 4797 4801 4774 +3 4810 4837 4825 +3 4810 4825 4797 +3 4822 4849 4837 +3 4822 4837 4810 +3 4824 4852 4849 +3 4824 4849 4822 +3 4816 4846 4852 +3 4816 4852 4824 +3 4808 4834 4846 +3 4808 4846 4816 +3 4792 4819 4834 +3 4792 4834 4808 +3 4765 4796 4819 +3 4765 4819 4792 +3 4735 4764 4796 +3 4735 4796 4765 +3 4700 4727 4764 +3 4700 4764 4735 +3 4654 4686 4727 +3 4654 4727 4700 +3 4601 4637 4686 +3 4601 4686 4654 +3 4548 4576 4637 +3 4548 4637 4601 +3 4481 4511 4576 +3 4481 4576 4548 +3 4409 4436 4511 +3 4409 4511 4481 +3 4330 4357 4436 +3 4330 4436 4409 +3 4241 4267 4357 +3 4241 4357 4330 +3 4140 4168 4267 +3 4140 4267 4241 +3 4031 4062 4168 +3 4031 4168 4140 +3 3913 3943 4062 +3 3913 4062 4031 +3 3776 3810 3943 +3 3776 3943 3913 +3 3629 3656 3810 +3 3629 3810 3776 +3 3453 3490 3656 +3 3453 3656 3629 +3 3275 3303 3490 +3 3275 3490 3453 +3 3076 3105 3303 +3 3076 3303 3275 +3 2904 2926 3105 +3 2904 3105 3076 +3 2739 2756 2926 +3 2739 2926 2904 +3 2580 2597 2756 +3 2580 2756 2739 +3 2421 2438 2597 +3 2421 2597 2580 +3 2257 2277 2438 +3 2257 2438 2421 +3 2099 2111 2277 +3 2099 2277 2257 +3 1936 1944 2111 +3 1936 2111 2099 +3 1756 1763 1944 +3 1756 1944 1936 +3 1569 1763 1756 +3 1569 1770 1763 +3 1763 1770 1950 +3 1763 1950 1944 +3 1944 1950 2122 +3 1944 2122 2111 +3 2111 2122 2288 +3 2111 2288 2277 +3 2277 2288 2449 +3 2277 2449 2438 +3 2438 2449 2611 +3 2438 2611 2597 +3 2597 2611 2776 +3 2597 2776 2756 +3 2756 2776 2948 +3 2756 2948 2926 +3 2926 2948 3129 +3 2926 3129 3105 +3 3105 3129 3330 +3 3105 3330 3303 +3 3303 3330 3527 +3 3303 3527 3490 +3 3490 3527 3690 +3 3490 3690 3656 +3 3656 3690 3838 +3 3656 3838 3810 +3 3810 3838 3966 +3 3810 3966 3943 +3 3943 3966 4084 +3 3943 4084 4062 +3 4062 4084 4191 +3 4062 4191 4168 +3 4168 4191 4292 +3 4168 4292 4267 +3 4267 4292 4380 +3 4267 4380 4357 +3 4357 4380 4463 +3 4357 4463 4436 +3 4436 4463 4536 +3 4436 4536 4511 +3 4511 4536 4598 +3 4511 4598 4576 +3 4576 4598 4658 +3 4576 4658 4637 +3 4637 4658 4709 +3 4637 4709 4686 +3 4686 4709 4753 +3 4686 4753 4727 +3 4727 4753 4790 +3 4727 4790 4764 +3 4764 4790 4818 +3 4764 4818 4796 +3 4796 4818 4839 +3 4796 4839 4819 +3 4819 4839 4858 +3 4819 4858 4834 +3 4834 4858 4867 +3 4834 4867 4846 +3 4846 4867 4872 +3 4846 4872 4852 +3 4852 4872 4868 +3 4852 4868 4849 +3 4849 4868 4859 +3 4849 4859 4837 +3 4837 4859 4840 +3 4837 4840 4825 +3 4825 4840 4821 +3 4825 4821 4801 +3 4801 4821 4791 +3 4801 4791 4769 +3 4769 4791 4754 +3 4769 4754 4734 +3 4734 4754 4711 +3 4734 4711 4693 +3 4693 4711 4659 +3 4693 4659 4644 +3 4644 4659 4599 +3 4644 4599 4588 +3 4588 4599 4537 +3 4588 4537 4522 +3 4522 4537 4465 +3 4522 4465 4448 +3 4448 4465 4381 +3 4448 4381 4370 +3 4370 4381 4293 +3 4370 4293 4280 +3 4280 4293 4194 +3 4280 4194 4182 +3 4182 4194 4086 +3 4182 4086 4077 +3 4077 4086 3968 +3 4077 3968 3959 +3 3959 3968 3842 +3 3959 3842 3834 +3 3834 3842 3692 +3 3834 3692 3686 +3 3686 3692 3529 +3 3686 3529 3523 +3 3523 3529 3332 +3 3529 3531 3332 +3 3692 3699 3531 +3 3692 3531 3529 +3 3842 3845 3699 +3 3842 3699 3692 +3 3968 3974 3845 +3 3968 3845 3842 +3 4086 4095 3974 +3 4086 3974 3968 +3 4194 4202 4095 +3 4194 4095 4086 +3 4293 4305 4202 +3 4293 4202 4194 +3 4381 4392 4305 +3 4381 4305 4293 +3 4465 4472 4392 +3 4465 4392 4381 +3 4537 4551 4472 +3 4537 4472 4465 +3 4599 4613 4551 +3 4599 4551 4537 +3 4659 4671 4613 +3 4659 4613 4599 +3 4711 4721 4671 +3 4711 4671 4659 +3 4754 4766 4721 +3 4754 4721 4711 +3 4791 4803 4766 +3 4791 4766 4754 +3 4821 4833 4803 +3 4821 4803 4791 +3 4840 4857 4833 +3 4840 4833 4821 +3 4859 4876 4857 +3 4859 4857 4840 +3 4868 4882 4876 +3 4868 4876 4859 +3 4872 4889 4882 +3 4872 4882 4868 +3 4867 4883 4889 +3 4867 4889 4872 +3 4858 4877 4883 +3 4858 4883 4867 +3 4839 4860 4877 +3 4839 4877 4858 +3 4818 4835 4860 +3 4818 4860 4839 +3 4790 4807 4835 +3 4790 4835 4818 +3 4753 4768 4807 +3 4753 4807 4790 +3 4709 4725 4768 +3 4709 4768 4753 +3 4658 4676 4725 +3 4658 4725 4709 +3 4598 4619 4676 +3 4598 4676 4658 +3 4536 4553 4619 +3 4536 4619 4598 +3 4463 4484 4553 +3 4463 4553 4536 +3 4380 4404 4484 +3 4380 4484 4463 +3 4292 4317 4404 +3 4292 4404 4380 +3 4191 4220 4317 +3 4191 4317 4292 +3 4084 4107 4220 +3 4084 4220 4191 +3 3966 3989 4107 +3 3966 4107 4084 +3 3838 3860 3989 +3 3838 3989 3966 +3 3690 3716 3860 +3 3690 3860 3838 +3 3527 3547 3716 +3 3527 3716 3690 +3 3330 3351 3547 +3 3330 3547 3527 +3 3129 3155 3351 +3 3129 3351 3330 +3 2948 2966 3155 +3 2948 3155 3129 +3 2776 2794 2966 +3 2776 2966 2948 +3 2611 2622 2794 +3 2611 2794 2776 +3 2449 2457 2622 +3 2449 2622 2611 +3 2288 2296 2457 +3 2288 2457 2449 +3 2122 2129 2296 +3 2122 2296 2288 +3 1950 1957 2129 +3 1950 2129 2122 +3 1770 1773 1957 +3 1770 1957 1950 +3 1569 1773 1770 +3 1569 1776 1773 +3 1773 1776 1962 +3 1773 1962 1957 +3 1957 1962 2133 +3 1957 2133 2129 +3 2129 2133 2300 +3 2129 2300 2296 +3 2296 2300 2464 +3 2296 2464 2457 +3 2457 2464 2631 +3 2457 2631 2622 +3 2622 2631 2803 +3 2622 2803 2794 +3 2794 2803 2979 +3 2794 2979 2966 +3 2966 2979 3168 +3 2966 3168 3155 +3 3155 3168 3364 +3 3155 3364 3351 +3 3351 3364 3558 +3 3351 3558 3547 +3 3547 3558 3729 +3 3547 3729 3716 +3 3716 3729 3868 +3 3716 3868 3860 +3 3860 3868 4001 +3 3860 4001 3989 +3 3989 4001 4122 +3 3989 4122 4107 +3 4107 4122 4227 +3 4107 4227 4220 +3 4220 4227 4327 +3 4220 4327 4317 +3 4317 4327 4416 +3 4317 4416 4404 +3 4404 4416 4496 +3 4404 4496 4484 +3 4484 4496 4565 +3 4484 4565 4553 +3 4553 4565 4632 +3 4553 4632 4619 +3 4619 4632 4688 +3 4619 4688 4676 +3 4676 4688 4737 +3 4676 4737 4725 +3 4725 4737 4781 +3 4725 4781 4768 +3 4768 4781 4815 +3 4768 4815 4807 +3 4807 4815 4847 +3 4807 4847 4835 +3 4835 4847 4869 +3 4835 4869 4860 +3 4860 4869 4885 +3 4860 4885 4877 +3 4877 4885 4894 +3 4877 4894 4883 +3 4883 4894 4898 +3 4883 4898 4889 +3 4889 4898 4893 +3 4889 4893 4882 +3 4882 4893 4881 +3 4882 4881 4876 +3 4876 4881 4865 +3 4876 4865 4857 +3 4857 4865 4841 +3 4857 4841 4833 +3 4833 4841 4811 +3 4833 4811 4803 +3 4803 4811 4775 +3 4803 4775 4766 +3 4766 4775 4730 +3 4766 4730 4721 +3 4721 4730 4678 +3 4721 4678 4671 +3 4671 4678 4621 +3 4671 4621 4613 +3 4613 4621 4554 +3 4613 4554 4551 +3 4551 4554 4482 +3 4551 4482 4472 +3 4472 4482 4401 +3 4472 4401 4392 +3 4392 4401 4310 +3 4392 4310 4305 +3 4305 4310 4212 +3 4305 4212 4202 +3 4202 4212 4100 +3 4202 4100 4095 +3 4095 4100 3977 +3 4095 3977 3974 +3 3974 3977 3852 +3 3974 3852 3845 +3 3845 3852 3704 +3 3845 3704 3699 +3 3699 3704 3534 +3 3699 3534 3531 +3 3531 3534 3332 +3 3534 3536 3332 +3 3704 3706 3536 +3 3704 3536 3534 +3 3852 3854 3706 +3 3852 3706 3704 +3 3977 3981 3854 +3 3977 3854 3852 +3 4100 4102 3981 +3 4100 3981 3977 +3 4212 4218 4102 +3 4212 4102 4100 +3 4310 4316 4218 +3 4310 4218 4212 +3 4401 4406 4316 +3 4401 4316 4310 +3 4482 4487 4406 +3 4482 4406 4401 +3 4554 4557 4487 +3 4554 4487 4482 +3 4621 4627 4557 +3 4621 4557 4554 +3 4678 4683 4627 +3 4678 4627 4621 +3 4730 4733 4683 +3 4730 4683 4678 +3 4775 4779 4733 +3 4775 4733 4730 +3 4811 4813 4779 +3 4811 4779 4775 +3 4841 4845 4813 +3 4841 4813 4811 +3 4865 4870 4845 +3 4865 4845 4841 +3 4881 4886 4870 +3 4881 4870 4865 +3 4893 4897 4886 +3 4893 4886 4881 +3 4898 4901 4897 +3 4898 4897 4893 +3 4894 4899 4901 +3 4894 4901 4898 +3 4885 4891 4899 +3 4885 4899 4894 +3 4869 4873 4891 +3 4869 4891 4885 +3 4847 4853 4873 +3 4847 4873 4869 +3 4815 4823 4853 +3 4815 4853 4847 +3 4781 4786 4823 +3 4781 4823 4815 +3 4737 4744 4786 +3 4737 4786 4781 +3 4688 4692 4744 +3 4688 4744 4737 +3 4632 4635 4692 +3 4632 4692 4688 +3 4565 4571 4635 +3 4565 4635 4632 +3 4496 4500 4571 +3 4496 4571 4565 +3 4416 4419 4500 +3 4416 4500 4496 +3 4327 4331 4419 +3 4327 4419 4416 +3 4227 4234 4331 +3 4227 4331 4327 +3 4122 4126 4234 +3 4122 4234 4227 +3 4001 4009 4126 +3 4001 4126 4122 +3 3868 3874 4009 +3 3868 4009 4001 +3 3729 3735 3874 +3 3729 3874 3868 +3 3558 3565 3735 +3 3558 3735 3729 +3 3364 3370 3565 +3 3364 3565 3558 +3 3168 3172 3370 +3 3168 3370 3364 +3 2979 2983 3172 +3 2979 3172 3168 +3 2803 2809 2983 +3 2803 2983 2979 +3 2631 2638 2809 +3 2631 2809 2803 +3 2464 2469 2638 +3 2464 2638 2631 +3 2300 2302 2469 +3 2300 2469 2464 +3 2133 2136 2302 +3 2133 2302 2300 +3 1962 1964 2136 +3 1962 2136 2133 +3 1776 1778 1964 +3 1776 1964 1962 +3 1569 1778 1776 +3 1569 1777 1778 +3 1778 1777 1963 +3 1778 1963 1964 +3 1964 1963 2134 +3 1964 2134 2136 +3 2136 2134 2301 +3 2136 2301 2302 +3 2302 2301 2466 +3 2302 2466 2469 +3 2469 2466 2634 +3 2469 2634 2638 +3 2638 2634 2806 +3 2638 2806 2809 +3 2809 2806 2980 +3 2809 2980 2983 +3 2983 2980 3171 +3 2983 3171 3172 +3 3172 3171 3367 +3 3172 3367 3370 +3 3370 3367 3561 +3 3370 3561 3565 +3 3565 3561 3732 +3 3565 3732 3735 +3 3735 3732 3869 +3 3735 3869 3874 +3 3874 3869 4006 +3 3874 4006 4009 +3 4009 4006 4123 +3 4009 4123 4126 +3 4126 4123 4231 +3 4126 4231 4234 +3 4234 4231 4328 +3 4234 4328 4331 +3 4331 4328 4417 +3 4331 4417 4419 +3 4419 4417 4497 +3 4419 4497 4500 +3 4500 4497 4570 +3 4500 4570 4571 +3 4571 4570 4634 +3 4571 4634 4635 +3 4635 4634 4689 +3 4635 4689 4692 +3 4692 4689 4739 +3 4692 4739 4744 +3 4744 4739 4784 +3 4744 4784 4786 +3 4786 4784 4817 +3 4786 4817 4823 +3 4823 4817 4851 +3 4823 4851 4853 +3 4853 4851 4871 +3 4853 4871 4873 +3 4873 4871 4887 +3 4873 4887 4891 +3 4891 4887 4896 +3 4891 4896 4899 +3 4899 4896 4900 +3 4899 4900 4901 +3 4901 4900 4895 +3 4901 4895 4897 +3 4897 4895 4884 +3 4897 4884 4886 +3 4886 4884 4866 +3 4886 4866 4870 +3 4870 4866 4843 +3 4870 4843 4845 +3 4845 4843 4812 +3 4845 4812 4813 +3 4813 4812 4777 +3 4813 4777 4779 +3 4779 4777 4732 +3 4779 4732 4733 +3 4733 4732 4680 +3 4733 4680 4683 +3 4683 4680 4624 +3 4683 4624 4627 +3 4627 4624 4556 +3 4627 4556 4557 +3 4557 4556 4486 +3 4557 4486 4487 +3 4487 4486 4403 +3 4487 4403 4406 +3 4406 4403 4313 +3 4406 4313 4316 +3 4316 4313 4214 +3 4316 4214 4218 +3 4218 4214 4101 +3 4218 4101 4102 +3 4102 4101 3980 +3 4102 3980 3981 +3 3981 3980 3853 +3 3981 3853 3854 +3 3854 3853 3705 +3 3854 3705 3706 +3 3706 3705 3535 +3 3706 3535 3536 +3 3536 3535 3332 +3 3535 3532 3332 +3 3705 3702 3532 +3 3705 3532 3535 +3 3853 3849 3702 +3 3853 3702 3705 +3 3980 3975 3849 +3 3980 3849 3853 +3 4101 4096 3975 +3 4101 3975 3980 +3 4214 4205 4096 +3 4214 4096 4101 +3 4313 4307 4205 +3 4313 4205 4214 +3 4403 4396 4307 +3 4403 4307 4313 +3 4486 4477 4396 +3 4486 4396 4403 +3 4556 4552 4477 +3 4556 4477 4486 +3 4624 4614 4552 +3 4624 4552 4556 +3 4680 4673 4614 +3 4680 4614 4624 +3 4732 4724 4673 +3 4732 4673 4680 +3 4777 4767 4724 +3 4777 4724 4732 +3 4812 4806 4767 +3 4812 4767 4777 +3 4843 4836 4806 +3 4843 4806 4812 +3 4866 4861 4836 +3 4866 4836 4843 +3 4884 4879 4861 +3 4884 4861 4866 +3 4895 4888 4879 +3 4895 4879 4884 +3 4900 4892 4888 +3 4900 4888 4895 +3 4896 4890 4892 +3 4896 4892 4900 +3 4887 4880 4890 +3 4887 4890 4896 +3 4871 4862 4880 +3 4871 4880 4887 +3 4851 4838 4862 +3 4851 4862 4871 +3 4817 4809 4838 +3 4817 4838 4851 +3 4784 4772 4809 +3 4784 4809 4817 +3 4739 4731 4772 +3 4739 4772 4784 +3 4689 4679 4731 +3 4689 4731 4739 +3 4634 4626 4679 +3 4634 4679 4689 +3 4570 4558 4626 +3 4570 4626 4634 +3 4497 4489 4558 +3 4497 4558 4570 +3 4417 4407 4489 +3 4417 4489 4497 +3 4328 4320 4407 +3 4328 4407 4417 +3 4231 4223 4320 +3 4231 4320 4328 +3 4123 4114 4223 +3 4123 4223 4231 +3 4006 3991 4114 +3 4006 4114 4123 +3 3869 3861 3991 +3 3869 3991 4006 +3 3732 3719 3861 +3 3732 3861 3869 +3 3561 3550 3719 +3 3561 3719 3732 +3 3367 3358 3550 +3 3367 3550 3561 +3 3171 3159 3358 +3 3171 3358 3367 +3 2980 2971 3159 +3 2980 3159 3171 +3 2806 2797 2971 +3 2806 2971 2980 +3 2634 2628 2797 +3 2634 2797 2806 +3 2466 2462 2628 +3 2466 2628 2634 +3 2301 2297 2462 +3 2301 2462 2466 +3 2134 2131 2297 +3 2134 2297 2301 +3 1963 1959 2131 +3 1963 2131 2134 +3 1777 1774 1959 +3 1777 1959 1963 +3 1569 1774 1777 +3 1569 1771 1774 +3 1774 1771 1952 +3 1774 1952 1959 +3 1959 1952 2126 +3 1959 2126 2131 +3 2131 2126 2293 +3 2131 2293 2297 +3 2297 2293 2455 +3 2297 2455 2462 +3 2462 2455 2615 +3 2462 2615 2628 +3 2628 2615 2784 +3 2628 2784 2797 +3 2797 2784 2952 +3 2797 2952 2971 +3 2971 2952 3140 +3 2971 3140 3159 +3 3159 3140 3339 +3 3159 3339 3358 +3 3358 3339 3537 +3 3358 3537 3550 +3 3550 3537 3703 +3 3550 3703 3719 +3 3719 3703 3846 +3 3719 3846 3861 +3 3861 3846 3972 +3 3861 3972 3991 +3 3991 3972 4091 +3 3991 4091 4114 +3 4114 4091 4198 +3 4114 4198 4223 +3 4223 4198 4300 +3 4223 4300 4320 +3 4320 4300 4387 +3 4320 4387 4407 +3 4407 4387 4468 +3 4407 4468 4489 +3 4489 4468 4543 +3 4489 4543 4558 +3 4558 4543 4607 +3 4558 4607 4626 +3 4626 4607 4666 +3 4626 4666 4679 +3 4679 4666 4717 +3 4679 4717 4731 +3 4731 4717 4759 +3 4731 4759 4772 +3 4772 4759 4795 +3 4772 4795 4809 +3 4809 4795 4827 +3 4809 4827 4838 +3 4838 4827 4850 +3 4838 4850 4862 +3 4862 4850 4864 +3 4862 4864 4880 +3 4880 4864 4875 +3 4880 4875 4890 +3 4890 4875 4878 +3 4890 4878 4892 +3 4892 4878 4874 +3 4892 4874 4888 +3 4888 4874 4863 +3 4888 4863 4879 +3 4879 4863 4848 +3 4879 4848 4861 +3 4861 4848 4826 +3 4861 4826 4836 +3 4836 4826 4794 +3 4836 4794 4806 +3 4806 4794 4758 +3 4806 4758 4767 +3 4767 4758 4714 +3 4767 4714 4724 +3 4724 4714 4663 +3 4724 4663 4673 +3 4673 4663 4604 +3 4673 4604 4614 +3 4614 4604 4540 +3 4614 4540 4552 +3 4552 4540 4466 +3 4552 4466 4477 +3 4477 4466 4383 +3 4477 4383 4396 +3 4396 4383 4297 +3 4396 4297 4307 +3 4307 4297 4196 +3 4307 4196 4205 +3 4205 4196 4089 +3 4205 4089 4096 +3 4096 4089 3970 +3 4096 3970 3975 +3 3975 3970 3843 +3 3975 3843 3849 +3 3849 3843 3695 +3 3849 3695 3702 +3 3702 3695 3530 +3 3702 3530 3532 +3 3532 3530 3332 +3 3530 3525 3332 +3 3525 3530 3695 +3 3525 3695 3687 +3 3843 3835 3687 +3 3843 3687 3695 +3 3970 3962 3835 +3 3970 3835 3843 +3 4089 4078 3962 +3 4089 3962 3970 +3 4196 4185 4078 +3 4196 4078 4089 +3 4297 4283 4185 +3 4297 4185 4196 +3 4383 4373 4283 +3 4383 4283 4297 +3 4466 4452 4373 +3 4466 4373 4383 +3 4540 4527 4452 +3 4540 4452 4466 +3 4604 4591 4527 +3 4604 4527 4540 +3 4663 4646 4591 +3 4663 4591 4604 +3 4714 4699 4646 +3 4714 4646 4663 +3 4758 4742 4699 +3 4758 4699 4714 +3 4794 4778 4742 +3 4794 4742 4758 +3 4826 4805 4778 +3 4826 4778 4794 +3 4848 4831 4805 +3 4848 4805 4826 +3 4863 4844 4831 +3 4863 4831 4848 +3 4874 4855 4844 +3 4874 4844 4863 +3 4878 4856 4855 +3 4878 4855 4874 +3 4875 4854 4856 +3 4875 4856 4878 +3 4864 4842 4854 +3 4864 4854 4875 +3 4850 4828 4842 +3 4850 4842 4864 +3 4827 4802 4828 +3 4827 4828 4850 +3 4795 4771 4802 +3 4795 4802 4827 +3 4759 4736 4771 +3 4759 4771 4795 +3 4717 4694 4736 +3 4717 4736 4759 +3 4666 4643 4694 +3 4666 4694 4717 +3 4607 4586 4643 +3 4607 4643 4666 +3 4543 4517 4586 +3 4543 4586 4607 +3 4468 4445 4517 +3 4468 4517 4543 +3 4387 4364 4445 +3 4387 4445 4468 +3 4300 4272 4364 +3 4300 4364 4387 +3 4198 4175 4272 +3 4198 4272 4300 +3 4091 4068 4175 +3 4091 4175 4198 +3 3972 3950 4068 +3 3972 4068 4091 +3 3846 3817 3950 +3 3846 3950 3972 +3 3703 3667 3817 +3 3703 3817 3846 +3 3537 3504 3667 +3 3537 3667 3703 +3 3339 3313 3504 +3 3339 3504 3537 +3 3140 3109 3313 +3 3140 3313 3339 +3 2952 2933 3109 +3 2952 3109 3140 +3 2784 2761 2933 +3 2784 2933 2952 +3 2615 2602 2761 +3 2615 2761 2784 +3 2455 2440 2602 +3 2455 2602 2615 +3 2293 2282 2440 +3 2293 2440 2455 +3 2126 2115 2282 +3 2126 2282 2293 +3 1952 1947 2115 +3 1952 2115 2126 +3 1771 1764 1947 +3 1771 1947 1952 +3 1569 1764 1771 diff --git a/thirdparty/carve-1.4.0/data/sphere_one_point_moved.ply b/thirdparty/carve-1.4.0/data/sphere_one_point_moved.ply new file mode 100644 index 00000000..58e3957a --- /dev/null +++ b/thirdparty/carve-1.4.0/data/sphere_one_point_moved.ply @@ -0,0 +1,14711 @@ +ply +format ascii 1.0 +element vertex 4902 +property double x +property double y +property double z +element face 9800 +property list uchar ushort vertex_indices +end_header +-1.41414299999999992785149061092 0.0113489999999999997132293927393 -0.00851200000000000046862513869428 +-1.41232500000000005258016244625 -0.0729849999999999943245398981162 -0.00364000000000000000638378239159 +-1.41183700000000000862598881213 0.0172980000000000008752998326145 0.0801020000000000065298877416353 +-1.4109039999999999359658886533 0.0955330000000000068016703380636 -0.0149899999999999998523403377249 +-1.41086599999999995347366166243 0.00535599999999999965005770263815 -0.0970919999999999977502440628996 +-1.40998599999999996157384885009 -0.0685909999999999991926458164926 0.0850640000000000007229772336359 +-1.40908900000000003593925157475 -0.0770919999999999938644634767115 -0.092328999999999994408028669568 +-1.40853899999999998549071733578 0.103032999999999999585220678 0.0735039999999999998925304112163 +-1.40769999999999995132782260043 0.0876559999999999978070874817604 -0.103425000000000003042011087473 +-1.40545699999999995633004346018 -0.157137999999999999900524016994 -0.00039300000000000001165040286466 +-1.40396000000000009677592061053 0.0231780000000000006854516954036 0.168398999999999993137933529397 +-1.40299100000000009913492249325 -0.154293999999999986716403554965 0.0883700000000000041033842990146 +-1.40262099999999989563548297156 0.179234000000000004426681243785 -0.023047999999999999043431841983 +-1.40237499999999992716936958459 -0.159362000000000003652189661807 -0.0891549999999999981392662107282 +-1.4020820000000000504769559484 -0.0639259999999999967146280255292 0.173431000000000001826094830903 +-1.40202200000000010149392437597 -0.000658999999999999972084829824581 -0.185289000000000009249490062757 +-1.40061499999999994336974395992 0.11012700000000000266631161594 0.161708999999999991636912000104 +-1.40029300000000000991917659121 -0.0808949999999999946886930501933 -0.180654000000000009018563673635 +-1.40010300000000009745804163686 0.188275999999999998912869614287 0.0652969999999999939355177502875 +-1.39960200000000001274713667954 0.169483999999999995766941651709 -0.111304000000000000158983937126 +-1.39894099999999999006661255407 0.0794320000000000026041391265608 -0.191452000000000011059597682106 +-1.39498900000000003451816610323 -0.150842000000000003856470698338 0.176784999999999997699617892977 +-1.39375899999999997014299424336 -0.160956999999999988970600384164 -0.177565000000000000612843109593 +-1.39356600000000008243716820289 -0.240775999999999990031085417286 0.00121499999999999993421928579096 +-1.39206000000000007510436716984 0.196576000000000000733635374672 0.153384999999999993569588241371 +-1.39106100000000010297185326635 0.159064000000000010937029060187 -0.199118999999999990446752917705 +-1.39088100000000003397815362405 -0.239473999999999992427390793637 0.0900080000000000046700421307833 +-1.39074999999999993072208326339 -0.241129000000000009995559935305 -0.0875829999999999941895367783218 +-1.39054300000000008452616384602 0.0289680000000000006932232565759 0.256031999999999981820764105578 +-1.38932600000000006090772330936 0.26212099999999999289101992872 -0.0326559999999999975295317256041 +-1.38864600000000004698108568846 -0.0590069999999999969531039312187 0.261114999999999986002308105526 +-1.38764599999999993507060480624 -0.0066709999999999998465671779968 -0.27275500000000002520650355109 +-1.38716400000000006365041826939 0.116786000000000000920152842809 0.249274999999999996580513084155 +-1.38660500000000008746781077207 0.250516000000000016445511619168 -0.120695999999999997731592316086 +-1.38656299999999998995292571635 0.272691000000000016711965145078 0.0555129999999999998450128657623 +-1.3859710000000000640341113467 -0.0843779999999999946735940170583 -0.268266000000000004455102953216 +-1.38466099999999991965182744025 0.0708960000000000006847855615888 -0.278724000000000027288393766867 +-1.3827080000000000481463757751 -0.237225999999999992429167150476 0.17844599999999999351274482251 +-1.38244600000000006367883997882 -0.240528999999999992809307514108 -0.176034999999999997033484078202 +-1.38148200000000009879386198008 -0.146793000000000006810552122261 0.264500999999999986123100370605 +-1.37964200000000003498712430883 -0.161916000000000004366285111246 -0.265274000000000009791278898774 +-1.37852299999999994284394233546 0.204100000000000003641531520771 0.240867999999999998772537423974 +-1.37841199999999997061195244896 0.237922999999999995601740465645 -0.208260000000000000675015598972 +-1.37832899999999991536014931626 0.282185000000000019149126728735 0.143462000000000006183498157952 +-1.37702900000000005853451057192 0.148018000000000010674128247956 -0.286148999999999986698639986571 +-1.37670000000000003481659405224 -0.323570999999999997509547711161 0.00117899999999999992653099134543 +-1.37426099999999995482369286037 -0.322070000000000022932766796657 -0.0876180000000000014370726830748 +-1.37370400000000003615241439547 -0.32379400000000002624034323162 0.0899709999999999954223284248656 +-1.37163699999999999512567683269 0.034641999999999999182431764666 0.342654999999999987370102871864 +-1.37107200000000006845368716313 0.343868000000000006988187806201 -0.0437740000000000004098943406916 +-1.36972899999999997433519638435 -0.0538570000000000020934365352332 0.347768000000000021554313889283 +-1.36907800000000001716671249596 -0.234042000000000000037303493627 0.266178999999999998937738610039 +-1.36875999999999997669419826707 0.330434000000000005492495347426 -0.131565999999999988512300319599 +-1.36868600000000006922107331775 -0.238980999999999998983923887863 -0.263792000000000026460611479706 +-1.36823800000000006527045570692 0.122983999999999996100008559097 0.335857000000000016637358157823 +-1.36797300000000010555822882452 0.355945000000000011386447340556 0.0441900000000000001132427485118 +-1.36779199999999989678656220349 -0.0126569999999999998480104679288 -0.359144000000000018779644506139 +-1.36639899999999991919708008936 -0.319298999999999999488409230253 -0.176070000000000004281019982955 +-1.36617799999999989246646237007 -0.0875269999999999936957095769685 -0.354818999999999995509369909996 +-1.36528699999999991732124726695 -0.322738999999999998102850895521 0.178408000000000011020517831639 +-1.36491699999999993586641267029 0.0620800000000000032351898937577 -0.364895000000000024886759319998 +-1.36478000000000010416556506243 0.224391000000000007119638212316 -0.295001000000000013212542171459 +-1.36465499999999995139887687401 0.290565999999999990954790973774 0.230845999999999995644373029791 +-1.36252200000000001089972556656 -0.142165999999999986824761322168 0.351173999999999986165732934751 +-1.36104599999999997805844031973 0.315695999999999976637354848208 -0.218838000000000004741096404359 +-1.3600810000000000954401002673 -0.162235999999999991327825910048 -0.351936000000000026588509172143 +-1.35954599999999992121502145892 0.21081800000000000538946665074 0.327400000000000024336088699783 +-1.35947599999999990671994964941 0.366615999999999997438493437585 0.131979000000000012970957641301 +-1.35756300000000007521805400756 0.136387000000000008226308523263 -0.372049000000000018584245253805 +-1.35492400000000001725197762426 -0.405193999999999998617994378947 -0.000501999999999999950602014298084 +-1.35314599999999995993960055785 -0.315267999999999992688515249029 -0.263826000000000004952482868248 +-1.3529729999999999812132500665 -0.401866999999999974235720401339 -0.0892609999999999931263872099407 +-1.35152699999999992286348060588 -0.406920999999999977170261900028 0.0882590000000000041158187968904 +-1.35148299999999998988187144278 -0.320411000000000001364242052659 0.266141000000000016445511619168 +-1.35004400000000002179945113312 -0.229935000000000000497379915032 0.352862000000000008981260180008 +-1.34952399999999994584243268037 -0.236489000000000004764189043271 -0.350509000000000014996004438217 +-1.34796099999999996477129116101 0.299711999999999978427922542323 -0.305246000000000017315926470474 +-1.3479319999999999080131374285 0.424151999999999973489650528791 -0.0563600000000000003752553823233 +-1.34731800000000001560351847729 0.0401800000000000004374278717023 0.42792499999999999982236431606 +-1.34613699999999991696597589907 0.408920999999999978946618739428 -0.143868999999999996886046460531 +-1.34576000000000006728839707648 0.20997299999999999298161412753 -0.380579000000000000625277607469 +-1.34568200000000004479261406232 -0.396955000000000002291500322826 -0.177668999999999993599786307641 +-1.34561299999999994803090430651 0.375842000000000009407585821464 0.219247999999999998443911408685 +-1.3455950000000000965627577898 0.2977989999999999803925732067 0.317317999999999988958165886288 +-1.34540600000000010183498488914 -0.0484940000000000023816504324259 0.433047999999999988496313108044 +-1.34440599999999998992450400692 0.437707999999999985973886396096 0.0313719999999999971107556007155 +-1.34391199999999999548094820057 0.128697000000000005837108574269 0.421113999999999988332888278819 +-1.34279700000000001836042429204 -0.407042999999999988158805308558 0.176671999999999995711874589688 +-1.34254099999999998438227066799 -0.0185929999999999984172660560944 -0.444116000000000010761169733087 +-1.34099400000000001931255155796 -0.0903319999999999956319385319148 -0.439971000000000000973443547991 +-1.33978500000000000369482222595 0.0530180000000000026250113194237 -0.449626000000000025647040047261 +-1.33902999999999994251709267701 0.392077000000000008839151632856 -0.230810999999999988396837125038 +-1.33818499999999995786481576943 -0.136976999999999987656096323008 0.436460999999999987863930073217 +-1.33557499999999995665689311863 0.449535999999999991150190226108 0.118980000000000002424727085781 +-1.33520299999999991769072948955 0.216705000000000008730793865652 0.412640000000000006785683126509 +-1.33515199999999989444177117548 -0.161917000000000005366374011828 -0.43720999999999998752997498741 +-1.33455100000000004278888354747 -0.309991999999999989778842746091 -0.350540999999999991487698025594 +-1.33308099999999996043698047288 -0.390475999999999989764631891376 -0.265373999999999998777866494493 +-1.33273899999999989596233263001 0.124217999999999995086596982219 -0.456481000000000025629276478867 +-1.33234399999999997277200236567 -0.316817999999999988514076676438 0.352824000000000026489033189137 +-1.3295550000000000423483470513 0.282546000000000019358736835784 -0.390448999999999990517807191281 +-1.32876700000000003143441063003 -0.405557999999999974072295572114 0.264388000000000011890932682945 +-1.32832499999999997797317519144 -0.48532399999999997763922010563 -0.00382000000000000004482525461924 +-1.32696900000000006514255801449 -0.480204000000000019721113631022 -0.0925060000000000048903103788689 +-1.32663899999999990164667451609 0.373686000000000018150814184992 -0.316842000000000012516210290414 +-1.32643899999999992367349932465 0.383583000000000007290168468899 0.305651000000000006018296971888 +-1.32568200000000002702904566831 -0.224920000000000008810729923425 0.438151999999999985924148404592 +-1.32503700000000002034994395217 -0.23306399999999999339550527111 -0.435842000000000007187139772213 +-1.32443800000000000416378043155 -0.488528000000000017788437389754 0.0848799999999999971178610280731 +-1.32147299999999989772447861469 0.459592000000000000525801624462 0.206118999999999996664001855606 +-1.32143000000000010452083643031 0.194726000000000010192735544479 -0.46465400000000001146105432781 +-1.32122399999999995401367414161 0.30385800000000001697131324363 0.402538000000000006917133532625 +-1.32037599999999999411670614791 -0.473189999999999999502620084968 -0.180825999999999986744825264395 +-1.31999500000000002941646926047 0.502655999999999991700860846322 -0.0703619999999999939932493475681 +-1.31882600000000005380229595175 0.485669000000000017358559034619 -0.157559000000000004604316927725 +-1.31768200000000001992361831071 0.045560000000000003272937476595 0.511507000000000044970249746257 +-1.31595499999999998586019955837 0.517657999999999951512563711731 0.0171110000000000012088108292119 +-1.31577399999999999913313786237 -0.0429399999999999990030197238866 0.516619000000000050398796247464 +-1.31532399999999993767119121912 -0.489804999999999990389909498845 0.17324500000000001009858863199 +-1.31521899999999991592858350486 -0.382454999999999989412913237175 -0.352032999999999984819254450485 +-1.31428300000000009006839718495 0.133900999999999992251531466536 0.5047089999999999632152025697 +-1.31245100000000003426237071835 0.466764999999999985469401053706 -0.244132999999999988904875181106 +-1.31199099999999990728838383802 -0.0244559999999999985731413687517 -0.527334999999999998188116023812 +-1.31068999999999991068477811496 -0.303493000000000012761347534251 -0.435871999999999981678655558426 +-1.31051800000000007173639460234 -0.0927810000000000023590018827235 -0.523387999999999964373387228989 +-1.30949300000000001809041805245 -0.402473000000000025178081841659 0.35105999999999998317790073088 +-1.30936699999999994759036781034 0.0437470000000000011630696405973 -0.532583000000000028606450541702 +-1.30901099999999992462562659057 0.353820000000000023376856006507 -0.401621999999999979014120299325 +-1.30857299999999998618704921682 -0.464307999999999998497202113867 -0.268432000000000003936406756111 +-1.30856700000000003569766704459 -0.131248000000000003550937321961 0.520025999999999988254728577886 +-1.30794800000000011053202797484 -0.31197500000000000230926389122 0.438114000000000003431921413721 +-1.30672100000000002140154720109 0.530618000000000034077629607054 0.10451799999999999979394260663 +-1.30590300000000003599609499361 0.264263999999999998902211473251 -0.474111999999999977895015490503 +-1.30559099999999994601296293695 0.221735999999999988663290650948 0.496252000000000026425084342918 +-1.30495300000000002960121037177 -0.160957999999999989970689284746 -0.520758000000000054185989029065 +-1.30265600000000003610978183133 0.111558000000000004381384144381 -0.539112000000000035626612771011 +-1.30215600000000009117684385274 0.467832000000000025607960196794 0.292443999999999981742604404644 +-1.30203099999999993841015566431 0.389811000000000018594903394842 0.390847999999999973219644289202 +-1.30102000000000006529887741635 -0.489146999999999998465227690758 0.260925999999999991274535204866 +-1.30089800000000010982148523908 0.446020000000000027551294579098 -0.329743999999999981564968720704 +-1.29700799999999993872279446805 -0.563644999999999951612039694737 -0.00876299999999999995603516822484 +-1.29635199999999994879829046113 -0.55677299999999996238386756886 -0.0973379999999999939719330654953 +-1.29608900000000004659739261115 -0.219016999999999989467980299196 0.521714000000000011070255823142 +-1.29532000000000002692956968531 -0.228719000000000005634603894578 -0.519455000000000000071054273576 +-1.2925439999999999152180407691 -0.568292000000000019355184122105 0.0798460000000000003073097332162 +-1.29233099999999989648813425447 0.541484999999999994102495293191 0.19151199999999998779820487016 +-1.29216599999999992576249496778 -0.372925999999999979728215748764 -0.437302000000000024027002609728 +-1.29188499999999995004884567606 0.17871100000000000873612293617 -0.546896000000000048757442527858 +-1.29163999999999989931609434279 0.308717000000000019177548438165 0.486169999999999991047161529423 +-1.29160499999999989206855843804 -0.453593000000000023952395622473 -0.354978999999999988990140309397 +-1.29058099999999997820054886688 -0.547703999999999968650854498264 -0.185528999999999999470645661859 +-1.2873730000000001005844296742 0.5790699999999999736388645033 -0.0857269999999999976481035446341 +-1.28693400000000002236788532173 0.560373000000000009990230864787 -0.172580000000000011173284519828 +-1.28621800000000008346034974238 0.332556999999999991501908880309 -0.484818000000000026705748723543 +-1.28505099999999994331290054106 -0.397799000000000013699263945455 0.436346999999999984876097869346 +-1.28421000000000007368328169832 0.423514000000000001566746732351 -0.414053999999999977621456537236 +-1.28297799999999995179678080603 -0.57069700000000000983391146292 0.168139000000000010670575534277 +-1.28284500000000001307398633799 0.0507599999999999995647925743469 0.593068999999999957317697862891 +-1.28273199999999998333066741907 0.595481000000000038063774354669 0.00146400000000000002353672812205 +-1.28165499999999998870237050141 -0.295796000000000003371525281182 -0.519483999999999945806905543577 +-1.28158100000000008122924555209 -0.486559999999999992503774137731 0.347577999999999998070876472411 +-1.28141499999999997072563928668 0.539464999999999972324360442144 -0.258751000000000008771650072958 +-1.28094899999999989326227023412 -0.0372159999999999990816235140301 0.598152000000000017010393094097 +-1.27971699999999999342037426686 -0.536472999999999977660536387702 -0.272986999999999979671372329904 +-1.27946699999999990993160281505 0.138578000000000006730616064488 0.586312000000000055344173688354 +-1.2783889999999999975699438437 -0.305900999999999978484765961184 0.521676000000000028578028832271 +-1.27769899999999991813126598572 0.474227000000000009638512210586 0.377614999999999978452791538075 +-1.27709699999999992670041137899 0.244938999999999990064836197234 -0.555903000000000035996094993607 +-1.27626299999999992529353676218 -0.0302219999999999988649079796232 -0.608473000000000041609382606111 +-1.27486900000000002997069259436 -0.094863000000000002875921722989 -0.604737999999999997768895809713 +-1.27378400000000002734168447205 -0.125001000000000001000088900582 0.601538000000000017131185359176 +-1.2737799999999999123190264072 0.034304000000000001158184659289 -0.613438000000000038802738799859 +-1.27302800000000004843059286941 0.609540999999999999481303802895 0.0886480000000000045723425046162 +-1.27283999999999997143618202244 0.550212999999999952116525037127 0.27774999999999999689137553105 +-1.27248399999999994847144080268 0.394500999999999990563992469106 0.474501999999999979351628098811 +-1.27083999999999996965982518304 0.516427999999999998159694314381 -0.343901000000000012235545909789 +-1.27082600000000001116973180615 0.225892000000000009451994742449 0.577905000000000002025046796916 +-1.26960500000000009457323812967 -0.159364000000000005652367462972 -0.602249999999999952038365336193 +-1.26953999999999989078958151367 -0.441089000000000008849809773892 -0.440124999999999988453680543898 +-1.26835100000000000619593265583 -0.57084900000000005082512188892 0.255769999999999997353228309294 +-1.2674319999999998920259258739 0.098459000000000004848565993143 -0.619615000000000026858515411732 +-1.2640139999999999709245912527 -0.361924000000000023469226562156 -0.520846000000000031171509817796 +-1.26380200000000009197265171679 -0.523124000000000033416824862798 -0.359366999999999991999288795341 +-1.26245399999999996509814081946 0.399336999999999997523758565876 -0.496728999999999976111553223745 +-1.26137999999999994571453498793 -0.212249999999999994226840271949 0.603215999999999974434672367352 +-1.26124400000000003174704943376 -0.631269999999999997797317519144 -0.103739999999999998880895191178 +-1.26109599999999999475619461009 -0.639847000000000054598103815806 -0.0153119999999999992223997935525 +-1.26049100000000002808064891724 -0.223471000000000002971844992317 -0.601017000000000023440804852726 +-1.2583489999999999398028194264 0.309981999999999979777953740268 -0.566100000000000047606363295927 +-1.25829999999999997406519014476 0.621196999999999999175770426518 0.175483000000000000095923269328 +-1.25724100000000005294964466884 0.161990999999999996106225808035 -0.626978999999999953018914311542 +-1.25708299999999995044674960809 -0.482053000000000009261924560633 0.43285800000000002052402692243 +-1.256957000000000101991304291 0.312358000000000024520829811081 0.567883000000000026652458018361 +-1.2564150000000000595434812567 -0.620202000000000031043612125359 -0.191759000000000012775558388967 +-1.25597000000000003083755473199 -0.645899000000000000909494701773 0.0731770000000000059303673083377 +-1.25553800000000004288835953048 -0.391554999999999986393106610194 0.519912000000000040778047605272 +-1.2552490000000000591739990341 0.491352999999999984215293125089 -0.427694000000000018602008822199 +-1.25058699999999989316279425111 0.632739000000000051393556077528 -0.188873000000000013098855333737 +-1.2501949999999999452171550729 0.653092000000000005854872142663 -0.102393999999999998906652365349 +-1.24871700000000007690914571867 -0.568748999999999949039874991286 0.342391000000000000902389274415 +-1.24832499999999990691890161543 0.556769999999999987139176482742 0.362891999999999992354560163221 +-1.24820099999999989393018040573 0.478750000000000008881784197001 0.461295999999999983831600047779 +-1.24756299999999997751842784055 -0.286932000000000020367707520563 -0.601045000000000051443294069031 +-1.24662800000000006939160357433 -0.606685999999999947540629818832 -0.279019999999999990247800951693 +-1.24604399999999992942889548431 0.609889000000000014445333818003 -0.274606999999999989992005566819 +-1.24588699999999996670396740228 -0.649402000000000034773961488099 0.161375999999999991674215493731 +-1.24486800000000008559197794966 0.670866999999999991111110375641 -0.0155099999999999994815258475001 +-1.24378600000000005820766091347 -0.29861900000000002330935444661 0.60317799999999999194244537648 +-1.2432499999999999662492200514 0.224647999999999986586729505689 -0.635500999999999982570386691805 +-1.24294600000000010631140412443 0.0557590000000000030055957722652 0.672292000000000000703437308402 +-1.24289999999999989377386100387 -0.507712000000000052146731377434 -0.444330000000000002735589532676 +-1.24246400000000001284661266254 -0.426842999999999972438047279866 -0.523534000000000054875215482753 +-1.2410680000000000600124394623 -0.0313449999999999978639309006212 0.677323000000000008391509709327 +-1.23960099999999995290522747382 0.142707000000000000516919840265 0.665600999999999998202326878527 +-1.23860700000000001352873368887 0.630400999999999989142906997586 0.261626000000000025202950837411 +-1.2379160000000000163566937772 0.397633999999999987462473427513 0.556284000000000000696331881045 +-1.23658399999999990548360528919 0.584632999999999958262719701452 -0.359258000000000021767476710011 +-1.23571600000000003660716174636 0.373582999999999998408384271897 -0.577443999999999957317697862891 +-1.23549799999999998512123511318 -0.0358679999999999971072028870367 -0.687208999999999958774310471199 +-1.23470400000000002371791651967 0.46433799999999997298871790008 -0.509799000000000002152944489353 +-1.23462899999999997646682459163 0.685995000000000021422863483167 0.0714349999999999984989784707068 +-1.23418999999999989825028023915 -0.0965700000000000030597746558669 -0.683702999999999949665152598755 +-1.2339739999999999042756826384 -0.11826100000000000500577357343 0.680676999999999976509457155771 +-1.23316699999999990211563272169 0.0247250000000000004496403249732 -0.691872000000000042518877307884 +-1.23191999999999990400567639881 -0.590775000000000050093262871087 -0.365180999999999977845277499 +-1.23104499999999994486188370502 0.229155999999999998584243598998 0.657277000000000000135003119794 +-1.23088799999999998213695562299 -0.650341999999999975656805872859 0.248938999999999993617549876035 +-1.2308730000000001059135001924 -0.349494000000000026862068125411 -0.602333000000000007290168468899 +-1.22924600000000006083666903578 -0.157141000000000002900790718741 -0.681366000000000027192470497539 +-1.22762600000000010602718703012 -0.475642999999999982474463422477 0.516429999999999944648720884288 +-1.22720500000000010132339411939 0.0849710000000000048592241341794 -0.697672999999999987608134688344 +-1.2255130000000000745075112718 0.286183999999999993946175891324 -0.645147000000000025998758701462 +-1.2241539999999999643875980837 -0.564404000000000016790124846011 0.4276599999999999845989862024 +-1.22224299999999996835242654925 0.557069000000000036365577216202 -0.442489999999999994440003092677 +-1.22178199999999992364507761522 -0.70340199999999997171329368939 -0.111685999999999993614885340776 +-1.22169299999999991790389231028 -0.20464599999999999457855892615 0.682338000000000000078159700934 +-1.22107000000000009976020010072 -0.383765999999999996017407966065 0.601424999999999987387866440258 +-1.22073100000000001053024334396 -0.713631000000000015326406810345 -0.0234390000000000015001333508735 +-1.22068799999999999528199623455 -0.217342000000000007409184377138 -0.680208000000000034823699479603 +-1.21951699999999996215649389342 0.6984160000000000367847974303 0.158097999999999988540722029029 +-1.21888499999999999623412350047 0.56113100000000004641265149985 0.446601000000000025735857889231 +-1.2180120000000000946016598391 -0.690398999999999984922283147171 -0.19949100000000000165734093116 +-1.21763599999999994061283814517 0.144631000000000009553247082295 -0.704587999999999992084553923632 +-1.21731400000000000716227077646 0.314765999999999990244248238014 0.647353999999999984993337420747 +-1.21709200000000006269829100347 -0.490296000000000009588774219083 -0.527538999999999980161646817578 +-1.21486099999999996867927620769 -0.721041999999999960735408421897 0.0648989999999999983559817451351 +-1.21402499999999990976107255847 0.637117000000000044401815557649 0.346735999999999988663290650948 +-1.21377599999999996605026808538 0.481383000000000005336175945558 0.543155999999999972160935612919 +-1.21235099999999995645794115262 -0.572533999999999987373655585543 -0.449900000000000022115642650533 +-1.21103099999999996860822193412 -0.648715000000000041602277178754 0.335519000000000011674217148538 +-1.21048500000000003318234576 -0.41091299999999997272226437417 -0.604876999999999998003374912514 +-1.20992900000000003224442934879 0.702482000000000050832227316278 -0.206374000000000001886490963443 +-1.20943500000000003780087354244 -0.674669999999999991935339949123 -0.286509000000000013663736808667 +-1.20928700000000000081001871877 0.435491000000000016978418670988 -0.589891999999999971926456510118 +-1.20860600000000006915001904417 0.72443100000000004712319423561 -0.120294999999999999151789609186 +-1.20854799999999995563371157914 -0.27693499999999998673061440968 -0.680234000000000005314859663486 +-1.20647700000000002162892087654 0.677760999999999946830087083072 -0.291638999999999981582732289098 +-1.20449699999999992883203958627 0.203470000000000011963763313361 -0.712590999999999974434672367352 +-1.20427299999999992685673078086 -0.290159000000000000252242671195 0.682300000000000017585932710062 +-1.20419699999999996187227679911 -0.725608000000000030738078748982 0.152982000000000006867395541121 +-1.20410100000000008790834726824 0.346355999999999997207567048463 -0.655880000000000018545165403339 +-1.20307800000000009177369975077 0.527306000000000052452264753811 -0.523975999999999997314148458827 +-1.20251299999999994305710515619 0.743520999999999987473131568549 -0.0337420000000000011586287484988 +-1.19959199999999999164401742746 0.708079000000000013947953902971 0.244136999999999992905230783435 +-1.19846099999999999852207110962 0.399197000000000024044766178122 0.635870999999999964025221288466 +-1.1982639999999999957935870043 0.650364999999999970903274970624 -0.375751999999999974910736000311 +-1.1981409999999999005382278483 0.0605390000000000025326407637749 0.748859999999999970121677961288 +-1.1962900000000000755306928113 -0.0253500000000000010047518372858 0.753821999999999992070343068917 +-1.19608500000000006480149750132 -0.656278000000000028002489216306 -0.372396000000000004792610752702 +-1.19484300000000009944756129698 0.146273999999999987364773801346 0.742263000000000006117772954894 +-1.1947620000000001017070871967 -0.55783199999999999452171550729 0.511241999999999974235720401339 +-1.19332299999999991158006196201 -0.467355000000000020410340084709 0.597963000000000022282620193437 +-1.19287399999999998989608229749 -0.335685999999999984400034236387 -0.681444000000000049688253511704 +-1.19167399999999990001242622384 0.759677000000000046675552312081 0.0529449999999999990074606159851 +-1.18985800000000008225242709159 -0.0413730000000000000537347943919 -0.76323399999999996801136603608 +-1.18929499999999999104716152942 -0.111052999999999998936850431619 0.757128000000000023206325749925 +-1.18878100000000008762413017394 -0.727310000000000012043699371134 0.240460000000000007069900220813 +-1.1886390000000000011226575225 -0.0978969999999999979101161784456 -0.759969000000000005634603894578 +-1.18799699999999996968824689247 -0.552031999999999967165820180526 -0.532843999999999984318321821775 +-1.18784099999999992469668086414 0.261255999999999988236965009492 -0.721648999999999984922283147171 +-1.18768699999999993721644386824 0.0150489999999999998769872888715 -0.767576000000000036038727557752 +-1.18648099999999989684340562235 -0.470943999999999973748998627343 -0.608666000000000040337511109101 +-1.18640699999999998937028067303 0.231517000000000000570210545447 0.734056000000000041794123717409 +-1.18639399999999994861354934983 -0.6445279999999999898108171692 0.420775000000000010125233984581 +-1.18532100000000006900791049702 0.620402000000000009016787316796 -0.458382999999999984908072292455 +-1.1846520000000000383266751669 0.641318000000000054683368944097 0.430478000000000027291946480545 +-1.18463300000000004708056167146 0.563275999999999998912869614287 0.528548000000000017806200958148 +-1.18403600000000008840572718327 -0.154297999999999990716759157294 -0.757793000000000049887205477717 +-1.18213600000000007561595793959 0.0711470000000000019069190670962 -0.772977000000000025181634555338 +-1.18178200000000011016254575225 -0.374462999999999990308197084232 0.680563999999999946766138236853 +-1.17916599999999993642063600419 0.495462000000000013510970120478 -0.603395000000000014672707493446 +-1.17909599999999992192556419468 0.404926000000000008149925179168 -0.667656999999999944961359688023 +-1.17812199999999989152854595886 -0.772885000000000044195758164278 -0.121144000000000001682209926912 +-1.17801399999999989454124715849 -0.63529800000000002935252041425 -0.45681399999999999783639736961 +-1.17718600000000006566835963895 -0.196232999999999990770049862476 0.758766000000000051528559197322 +-1.17613300000000009504219633527 0.772835000000000049702464366419 0.139422999999999991382892972069 +-1.17607200000000000628119778412 -0.784703000000000039371172988467 -0.0331139999999999976032505344392 +-1.17606699999999997352517766558 -0.210354999999999986437515531179 -0.756715000000000026503244043852 +-1.17552400000000001334399257757 -0.75801700000000005186251428313 -0.20869599999999999262456640281 +-1.17493300000000000515854026162 0.714948999999999945664796996425 0.329212000000000004629185923477 +-1.17456099999999996619237663253 0.482117000000000017756462966645 0.622871999999999981234566348576 +-1.17372900000000002229683104815 -0.393361000000000016196821661651 -0.683833000000000024165558443201 +-1.17322499999999996234123500471 0.126701000000000008061107337198 -0.779415999999999997704946963495 +-1.17286800000000002164313173125 0.315931999999999990613730460609 0.724270999999999998131272604951 +-1.16937899999999994626875832182 -0.793425000000000046895820560167 0.0550459999999999977093878555934 +-1.16867199999999993309529600083 -0.726141999999999954162888116116 0.326990000000000002877698079828 +-1.16828599999999993563903899485 -0.740156999999999953843143885024 -0.295424000000000019916512883356 +-1.16773299999999990994581366976 0.317761000000000015663914609831 -0.731728000000000045055514874548 +-1.16770100000000009998757377616 0.58799000000000001264766069653 -0.539204000000000016612489162071 +-1.16511999999999993349319993285 0.769325999999999954326312945341 -0.225014999999999992796873016232 +-1.1647620000000000750617346057 -0.265846000000000026730617719295 -0.756739000000000050505377657828 +-1.16287099999999998800603862037 0.742810999999999999054978161439 -0.309779000000000026560087462713 +-1.16277199999999991675281307835 0.792806000000000010707879027905 -0.139362000000000013644196883433 +-1.16099100000000010624034985085 0.181489000000000011425527191022 -0.786868000000000011873169114551 +-1.16065299999999993474375514779 -0.549057000000000017259083051613 0.592806999999999972850162066607 +-1.16000799999999992806465343165 -0.280552999999999996827426684831 0.758730000000000015525358776358 +-1.15895499999999995743849012797 -0.529352000000000044721559788741 -0.613685000000000036024516703037 +-1.15807100000000007256062417582 -0.799015000000000030766500458412 0.142989000000000004986233648197 +-1.15707599999999999340616341215 -0.637797999999999976061815232242 0.504371000000000013763212791673 +-1.15643800000000007699441084696 -0.719374999999999986677323704498 -0.380985000000000018083312625095 +-1.15603199999999994851407336682 0.713365000000000026858515411732 -0.393320999999999976193265638358 +-1.15594899999999989326227023412 0.782942000000000026815882847586 0.225350999999999995759836224352 +-1.15583400000000002805222720781 0.813154999999999961168839490711 -0.0531599999999999989208632200643 +-1.15529499999999996084909525962 -0.611809000000000047236881073331 -0.539429000000000047343462483695 +-1.15430999999999994720667473302 -0.457224000000000019294787989566 0.677136999999999988908427894785 +-1.15427699999999999747046786069 0.399185000000000012043699371134 0.712948000000000026155078103329 +-1.15118800000000010008704975917 -0.449734999999999995878852132591 -0.687390999999999974257036683412 +-1.15060300000000004239097961545 0.642989000000000032741809263825 0.512519999999999975592857026641 +-1.15060000000000006714628852933 0.461662999999999990041743558322 -0.680431000000000008043343768804 +-1.15016800000000007919709332782 -0.320552000000000003598898956625 -0.75786500000000001087130385713 +-1.14860800000000007337064289459 0.0650789999999999979607423483685 0.822474000000000038390624013118 +-1.14678999999999997605470980488 -0.0192559999999999988118393190462 0.827346000000000025842439299595 +-1.14570700000000003093703071499 0.563199000000000005172751116334 0.608410000000000006359357485053 +-1.14563700000000001644195890549 0.718996999999999997221777903178 0.412988000000000021749713141617 +-1.14548199999999988918375493085 0.235298000000000007148059921747 -0.795302999999999982172482759779 +-1.1454720000000000457163196188 0.553258000000000027540636438061 -0.617897999999999947284834433958 +-1.14536900000000008148504093697 0.14926300000000000678390676967 0.815996000000000054619420097879 +-1.14463000000000003630873379734 0.681103000000000013969270185044 -0.475310000000000010267342531733 +-1.14433500000000010210499112873 0.830296000000000034013680760836 0.0332519999999999968376407366577 +-1.14425299999999996458655004972 0.372761999999999982247089747034 -0.742786999999999975052844547463 +-1.14395200000000007989342520887 -0.722107999999999972118303048774 0.412229000000000012082779221601 +-1.14219399999999993156052369159 -0.801451000000000024492408101651 0.230367999999999989446664017123 +-1.14002500000000006608047442569 -0.695756000000000041083580981649 -0.465044000000000012917666936119 +-1.13992200000000010184919574385 -0.103407999999999999918287585388 0.830591999999999996973087945662 +-1.13952100000000000612487838225 -0.0467149999999999995803356966917 -0.836246000000000044849457481178 +-1.13839800000000002100364326907 -0.0988369999999999943041117944631 -0.833234999999999947917217468785 +-1.13783100000000003682032456709 -0.36368099999999997651300986945 0.757017999999999968707697917125 +-1.13752000000000008661515948916 0.00531300000000000001432187701766 -0.840250000000000052402526762307 +-1.13708600000000004115463525523 0.232963000000000003408828774809 0.807937000000000016264323221549 +-1.134152999999999966718178257 -0.150846000000000007856826300667 -0.831228999999999995651478457148 +-1.13240099999999999091926383699 0.0570430000000000034243718971538 -0.845230999999999954575002902857 +-1.13234100000000004193623226456 -0.374257000000000006334488489301 -0.760090000000000043378634018154 +-1.13120400000000009832490377448 0.7899589999999999667679162485 0.310389000000000025991653274104 +-1.13071000000000010388134796813 0.480947999999999986631138426674 0.700130999999999947824846913136 +-1.13043800000000005390177193476 -0.839443999999999967975838899292 -0.132078000000000000957456336437 +-1.12911800000000006605205271626 -0.82278899999999999259614469338 -0.219336000000000003185007813045 +-1.12871199999999993757171523612 0.646152999999999977376319293398 -0.555424000000000028798297080357 +-1.1283199999999999896260760579 0.844161000000000050214055136166 0.119533000000000000362376795238 +-1.12803100000000000591171556152 -0.187046999999999991048937886262 0.832200999999999968537167660543 +-1.1280159999999999076436552059 -0.585906000000000037886138670729 -0.619914999999999993818278198887 +-1.12729600000000007575806648674 -0.852786000000000043996806198265 -0.0442979999999999971005415488889 +-1.12680399999999991678123478778 -0.202536999999999994814814385791 -0.830234999999999945252682209684 +-1.12675799999999992628829659225 0.28791299999999997449862121357 -0.804687999999999958866681026848 +-1.12533900000000008922995675675 -0.504583000000000003737454790098 -0.692104000000000052494897317956 +-1.12418400000000007210587682493 0.10827000000000000512478948167 -0.851168000000000035676350762515 +-1.12379199999999990211563272169 0.315850999999999992873256360326 0.798329999999999984083842718974 +-1.12334399999999989816501511086 -0.8028880000000000460858018414 -0.305727999999999999758415469842 +-1.12319100000000005046274509368 -0.628550000000000053113069498067 0.585976000000000052381210480235 +-1.12196399999999996133226431994 -0.538116999999999956472152007336 0.67203100000000004499156602833 +-1.12180799999999991634069829161 -0.800725000000000020072832285223 0.316836999999999979760190171874 +-1.11970400000000003259970071667 -0.862761000000000000120792265079 0.0436560000000000003606004383983 +-1.11911399999999994214761045441 -0.669390000000000040536463075114 -0.547266999999999947945639178215 +-1.11872299999999991193533332989 0.516342999999999996418864611769 -0.694153000000000020008883439004 +-1.11749300000000006960476639506 0.426041999999999976278530766649 -0.754782999999999981710629981535 +-1.11637999999999992795096659393 -0.253707000000000015837997580093 -0.830257000000000022765789253754 +-1.11633699999999991270271948451 0.833007999999999970697217577253 -0.244719999999999993089971894733 +-1.11539699999999997181987509975 0.804784000000000054875215482753 -0.328956000000000026162183530687 +-1.11471699999999995789323747886 -0.71522499999999999964472863212 0.495842000000000004966693722963 +-1.11313599999999990330934451777 -0.77981699999999998240696186258 -0.390913999999999983714360496379 +-1.112902999999999975599962454 0.158791999999999988713028642451 -0.858040000000000024904522888392 +-1.11287200000000008337508461409 0.857944999999999957651652948698 -0.159518999999999994132693359461 +-1.11201400000000005796607638331 0.642121999999999970576425312174 0.592540999999999984382270667993 +-1.11182000000000003048228336411 0.720207999999999959328533805092 0.495134999999999991793231401971 +-1.11135099999999997777422322542 -0.426750000000000018207657603853 -0.763403000000000053759663387609 +-1.11116499999999995829114141088 -0.269840999999999997527311279555 0.832164000000000014800605185883 +-1.11074199999999989607601946773 -0.445288000000000017131185359176 0.753638000000000030098590286798 +-1.1100540000000000961932755672 0.773383999999999960373031626659 -0.411893000000000009119816013481 +-1.10833899999999996310862115934 0.608652999999999999580779785902 -0.633345000000000046824766286591 +-1.10785200000000005893241450394 0.854693000000000036031622130395 0.205341999999999996751043340737 +-1.1076930000000000386961573895 -0.869333000000000022389201603801 0.131437999999999999278799123203 +-1.10553799999999990966159657546 0.397598000000000006970424237807 0.787210999999999994081179011118 +-1.10501500000000008050449196162 0.879495000000000026751934001368 -0.0736880000000000034976466167791 +-1.10489400000000004276046183804 0.339127999999999985014653702819 -0.814985999999999988219201441098 +-1.10292199999999995796429175243 -0.304153000000000006686207143503 -0.831296000000000034901859180536 +-1.10225900000000009981704351958 0.560899000000000036436631489778 0.685869999999999979678477757261 +-1.10199500000000005783817869087 0.793858999999999981334042331582 0.394201999999999996848742966904 +-1.10033099999999994800248259708 0.738932000000000033246294606215 -0.493205000000000004511946372077 +-1.09860099999999993869437275862 0.208410000000000011910472608179 -0.865817999999999976523668010486 +-1.09853399999999989944399203523 -0.753669999999999951079132642917 -0.474557999999999979845455300165 +-1.09699499999999994237498412986 -0.796838999999999963996799579036 0.402056000000000024474644533257 +-1.09628499999999995395683072275 -0.557691000000000047798209834582 -0.697953999999999963321783980064 +-1.09454199999999990389198956109 0.0693619999999999931050709278679 0.892842000000000024506618956366 +-1.09378599999999992498089795845 -0.640382000000000006778577699151 -0.627330000000000054249937875284 +-1.09279700000000001836042429204 0.89757399999999998296829062383 0.0124340000000000006075140390749 +-1.09276499999999998635757947341 -0.0130849999999999994093613508994 0.897604999999999986215470926254 +-1.09137599999999990174615049909 0.151662999999999992262189607573 0.886508999999999991459276316164 +-1.09131200000000005978506578685 -0.872473000000000054043880481913 0.218701000000000006506795102723 +-1.08938899999999994072652498289 -0.351463999999999998635757947341 0.830483999999999999985789145285 +-1.08755899999999994243182754872 0.477389999999999981028508955205 -0.767668000000000017024603948812 +-1.08728200000000008174083632184 -0.477822999999999997733368672925 -0.767791000000000001257660642295 +-1.08648300000000008758149760979 -0.353675999999999990386356785166 -0.833346999999999948904871871491 +-1.08626500000000003609557097661 0.701563999999999965417885050556 -0.572570000000000023376856006507 +-1.08605100000000009963230240828 -0.0953549999999999953192997281803 0.900777999999999967606356676697 +-1.08487299999999997623945091618 -0.616821999999999981412202032516 0.665267999999999970484054756525 +-1.08468800000000009653433608037 -0.0518730000000000024407142973359 -0.905958000000000041040948417503 +-1.08366399999999996062172158418 -0.0993870000000000031192826099868 -0.903213999999999961332264319935 +-1.08359200000000011065992566728 0.568751000000000006551204023708 -0.708767000000000035875302728527 +-1.0832779999999999631654645782 0.233490000000000003099742684753 0.878630000000000022097879082139 +-1.08301099999999994594190866337 0.861851999999999951462825720228 0.290341000000000015734968883407 +-1.0828629999999999089510538397 -0.00444400000000000003352873534368 -0.909607999999999972118303048774 +-1.08239700000000005353228971217 0.477881000000000000227373675443 0.774626000000000036749270293512 +-1.0813349999999999351274482251 0.25692799999999998972199932723 -0.874472000000000027064572805102 +-1.0810830000000000161719526659 -0.705517999999999978477660533827 0.577497000000000038077985209384 +-1.07997600000000004705213996203 0.388739999999999974455988649424 -0.826156000000000001470823463023 +-1.07979399999999992054711128731 -0.146799000000000012811085525755 -0.90138399999999996303756688576 +-1.07959699999999991781862718199 -0.724547000000000052111204240646 -0.556328000000000044700243506668 +-1.07897899999999991038635016594 -0.884461000000000052700954711327 -0.231369999999999992335020237988 +-1.07891599999999998615862750739 -0.902815999999999951874940506968 -0.14444399999999998907007636717 +-1.07884800000000002917488473031 -0.525051999999999963186780860269 0.748604000000000047165826799755 +-1.07819700000000007200640084193 0.0427130000000000009663381206337 -0.91414799999999996060751072946 +-1.07626599999999994494714883331 0.912112000000000033850255931611 0.0985059999999999963415930892552 +-1.07478500000000010139444839297 -0.862616000000000049396930990042 -0.317383000000000026208368808511 +-1.07459400000000004915534645988 -0.917607999999999979223730406375 -0.0569469999999999976214581920431 +-1.07442600000000010318501608708 -0.177122000000000001662670001679 0.902351000000000014189538433129 +-1.07361400000000006826894605183 0.718574999999999963762320476235 0.575327000000000032819968964759 +-1.07309499999999991004528965277 -0.193921000000000010032863428933 -0.900478000000000000646593889542 +-1.07070599999999993556798472127 0.0894120000000000053619331197297 -0.919560999999999961751484534034 +-1.0706230000000001023607865136 -0.872170000000000000817124146124 0.305101000000000011080913964179 +-1.07028100000000003788613867073 0.314522999999999997022825937165 0.869237999999999955136331664107 +-1.06903600000000009728751138027 0.638720999999999983209875153989 0.670221999999999984432008659496 +-1.06843599999999994132338088093 0.79462699999999997224620074121 0.476459999999999994635402345011 +-1.06791199999999997238830928836 0.661425999999999958411933675961 -0.649676000000000031242564091372 +-1.06785299999999994113863976963 -0.789807999999999954532370338711 0.485688999999999981849185815008 +-1.06712800000000007649703093193 -0.402081000000000021721291432186 -0.836401999999999978818721046991 +-1.06634899999999999131716776901 -0.837365000000000025970336992032 -0.402144000000000001460165321987 +-1.06603200000000009062262051884 -0.928779000000000021231016944512 0.0307739999999999992719157404508 +-1.06424300000000005006484116166 0.863434999999999952535745251225 -0.349094000000000015404566511279 +-1.06414100000000000356692453352 -0.608847000000000027064572805102 -0.704918000000000044558134959516 +-1.06377300000000007962341896928 0.893275999999999958944840727781 -0.265413999999999983270271286528 +-1.06359300000000001062971932697 -0.240567000000000003057110120608 -0.9004990000000000494040364174 +-1.06278999999999990144772255007 -0.431593999999999977656983674024 0.827165000000000039115377603594 +-1.06117400000000006166089860926 0.304155000000000008686384944667 -0.883967999999999975990760958666 +-1.0605130000000000389803744838 0.830187000000000008270717444248 -0.431396000000000001683986283751 +-1.06042199999999997572786014643 0.135468000000000005078604203845 -0.925825000000000009059419880941 +-1.06022799999999994824406712723 -0.527274000000000020449419935176 -0.773239000000000009649170351622 +-1.05910499999999996312283201405 0.919591999999999964998664836457 -0.180686000000000013265832876641 +-1.05793699999999990524202075903 -0.258064000000000015599965763613 0.902314999999999978186338012165 +-1.05640000000000000568434188608 -0.692566000000000014935608305677 -0.635902999999999996028066107101 +-1.05548799999999998178168425511 0.923049000000000008370193427254 0.184189999999999992619237332292 +-1.05456799999999994987831541948 0.526603999999999961012520088843 -0.781391999999999975479170188919 +-1.05446100000000009266898359783 0.556385000000000018438583992975 0.760623000000000049070081331593 +-1.05389700000000008373035598197 0.865609999999999990549781614391 0.374194000000000026595614599501 +-1.05370399999999997397992501647 -0.808810999999999946652451399132 -0.485316999999999998394173417182 +-1.05326199999999992051868957788 -0.936284000000000005137223979546 0.118373000000000005993427976136 +-1.0525970000000000048601123126 0.793660999999999949849893710052 -0.511996000000000006657785434072 +-1.05243599999999992711252616573 0.394440999999999986069809665423 0.858368000000000019866774891852 +-1.05210200000000009268319445255 0.436553000000000024360957695535 -0.838153999999999954617635467002 +-1.05132399999999992523669334332 -0.286553999999999975401010487985 -0.901445999999999969531927490607 +-1.05025699999999999612043666275 0.942278999999999977710274379206 -0.0952449999999999963318231266385 +-1.04738500000000001044497821567 0.180699999999999999511501869165 -0.932915999999999967506880693691 +-1.0457089999999999996305177774 -0.868423999999999973731235058949 0.390297000000000005037747996539 +-1.04534499999999996866506535298 0.618678999999999978953724166786 -0.724216999999999999637623204762 +-1.0449329999999998896953457006 -0.449176999999999992940757920223 -0.840449000000000001620037437533 +-1.04318200000000005367439825932 -0.693027999999999977376319293398 0.656873999999999957921659188287 +-1.04227399999999992274979376816 -0.602658999999999944741091439937 0.741935000000000011155520951434 +-1.04052799999999989744026152039 0.75400400000000000755306928113 -0.590575999999999989853449733346 +-1.0381959999999998967012970752 0.349903000000000019564794229154 -0.894267999999999951832307942823 +-1.0372639999999999638191638951 0.961246000000000044849457481178 -0.0094280000000000006160627563645 +-1.03689999999999993285371147067 -0.777063999999999976964204506658 -0.566575999999999968537167660543 +-1.03664899999999993163157796516 -0.337861000000000022414070599552 0.900672000000000028130386908742 +-1.03633799999999998142641288723 -0.331699000000000021604051880786 -0.903314999999999979074516431865 +-1.03633599999999992391508385481 -0.940093999999999985206500241475 0.205505999999999994232169342467 +-1.03615600000000007696598913753 0.0733720000000000066586736124918 0.959686000000000039023007047945 +-1.03449699999999999988631316228 -0.779658999999999990926369264344 0.567405000000000048210324621323 +-1.03442699999999998539124135277 -0.00686300000000000017669199436909 0.964320999999999983742782205809 +-1.03307499999999996553867731564 0.153463999999999989309884540489 0.953521999999999980701659296756 +-1.03164499999999992319033026433 0.224928999999999990055954413037 -0.940805000000000002380318164796 +-1.03147300000000008424194675172 -0.509915000000000007140954494389 0.8222220000000000084128259914 +-1.03117199999999997750421698584 0.714107999999999965012875691173 0.653248999999999968579800224688 +-1.03065999999999990954790973774 0.792256999999999989015009305149 0.55683700000000002638955720613 +-1.0305439999999999045598997327 0.93034399999999994879118503377 0.269147000000000025110580281762 +-1.03029600000000010062706223835 -0.574909000000000003360867140145 -0.779723000000000054932058901613 +-1.02981300000000008942890872277 0.472928000000000015035084288684 0.846064000000000038248515465966 +-1.02903300000000008651568350615 -0.657850999999999963563368510222 -0.712968000000000046156856114976 +-1.02789299999999994561505900492 -0.0869250000000000022648549702353 0.96740899999999996339283825364 +-1.02557399999999998563282588293 -0.0568260000000000015107914919099 -0.97209500000000004238387418809 +-1.02530300000000007543121682829 -0.942787999999999959399588078668 -0.244749999999999995337063296574 +-1.02519399999999993866595104919 0.233095999999999997642774474116 0.945855000000000001314504061156 +-1.02465300000000003599609499361 -0.0995449999999999945998752082232 -0.969627000000000016655121726217 +-1.02435199999999992925836522772 0.711370999999999975571540744568 -0.666823999999999972310149587429 +-1.02393299999999998206590134942 -0.014182999999999999427013896991 -0.975377000000000049517723255121 +-1.02376000000000000333955085807 -0.962751000000000023426593998011 -0.158193000000000000282440737465 +-1.02280100000000007121059297788 -0.919104000000000032066793664853 -0.330342000000000024506618956366 +-1.02183899999999994179233908653 0.632799000000000000376587649953 0.745257999999999976026288095454 +-1.02138200000000001210764821735 0.482379000000000002223998762929 -0.850933000000000050455639666325 +-1.02117400000000002613376182126 -0.142171999999999992825294725662 -0.967983000000000037843506106583 +-1.02062199999999991817389854987 0.865952000000000055024429457262 0.456569999999999975859310552551 +-1.02017699999999988946797202516 0.976420999999999983387510837929 0.0764250000000000068167693711985 +-1.01998600000000005927347501711 -0.494777000000000022339463612298 -0.845472000000000001307398633799 +-1.01973699999999989351806561899 0.0282150000000000004962696920074 -0.9794589999999999685442730879 +-1.0186939999999999884039425524 -0.375825000000000020161650127193 -0.906100000000000016520118606422 +-1.01865199999999989088905749668 0.573490000000000055280224842136 -0.795900999999999969602981764183 +-1.01817599999999996995825313206 -0.978914999999999979607423483685 -0.0710110000000000046727066660424 +-1.0166679999999999051141230666 -0.861252000000000017543300145917 0.473953000000000013169909607313 +-1.01658000000000003915090474038 -0.166498000000000007103651000762 0.96893899999999999472777290066 +-1.01626199999999999867839051149 -0.891792999999999946858508792502 -0.414629000000000025316637675132 +-1.01600500000000004696687483374 -0.742250999999999994116706147906 -0.645598000000000005194067398406 +-1.01531900000000008255085504061 -0.940193999999999974193087837193 0.291827000000000003065991904805 +-1.01515099999999991453591974278 -0.184539000000000008583356247982 -0.967168000000000027682744985214 +-1.01326600000000000001421085472 0.267981000000000024741098059167 -0.94946200000000002816591404553 +-1.01300300000000009781331300474 0.0702009999999999995123900475846 -0.984325000000000005506706202141 +-1.01254599999999994608401721052 0.31195400000000000906297259462 0.936714999999999964330754664843 +-1.01249300000000008736833478906 0.393992999999999982119192054597 -0.905332000000000025607960196794 +-1.01064500000000001556088591315 -0.416198000000000012388312597977 0.897428000000000003488764832582 +-1.0096110000000000361808361049 0.918532000000000015127454844333 -0.370113000000000025302426820417 +-1.00857400000000008155609521054 -0.991215999999999985980991823453 0.0164510000000000003450573160535 +-1.00763500000000005840661287948 0.949892999999999987359444730828 -0.287013000000000018108181620846 +-1.00760300000000002640376806085 0.883546999999999971286968047934 -0.451753000000000015656809182474 +-1.00660700000000002951594524347 -0.226478000000000012637002555493 -0.967187000000000018928858480649 +-1.00571199999999993934807207552 -0.860962000000000005073275133327 -0.497280999999999973049114032619 +-1.00413299999999994227550814685 0.66593100000000005067590791441 -0.740441000000000015823786725377 +-1.00375700000000001033129137795 0.111610000000000000874855743405 -0.989956999999999975869968693587 +-1.00250100000000008648726179672 0.549676000000000053447024583875 0.832374999999999976019182668097 +-1.0016819999999999613038426105 0.977504000000000039527492390334 -0.202778999999999987036147786057 +-1.00161799999999989729815297324 0.845075000000000020605739337043 -0.531610000000000026965096822096 +-1.00153300000000000657962573314 0.933966999999999991644017427461 0.353042000000000022463808591056 +-1.0011650000000000826361201689 -0.677802000000000015589307622577 0.733658000000000032336799904442 +-1.00053299999999989466914485092 -0.245268000000000013782752716907 0.968905000000000016235901512118 +-0.999064999999999980850873271265 0.987740999999999980119014253432 0.161978000000000010860645716093 +-0.998461000000000042930992094625 -0.41875800000000001910294145091 -0.909789999999999987601029260986 +-0.997604999999999964011010433751 -0.620539999999999980495601903385 -0.787219000000000002081890215777 +-0.997056999999999971073805227206 -0.766433999999999948649076486618 0.646881000000000039307224142249 +-0.995577000000000045254466840561 -0.267824000000000006505018745884 -0.968037999999999954070517560467 +-0.995561000000000029253044431243 -0.586118000000000027860380669154 0.815674000000000010146550266654 +-0.995179999999999953530505081289 0.389726999999999990098586977183 0.926136999999999988020249475085 +-0.994990999999999958802732180629 -0.999604000000000048054005219456 0.103847999999999995868193991555 +-0.992385999999999990350829648378 -0.538702000000000014168222151056 -0.851451999999999986634691140353 +-0.992319999999999979856113441201 0.309686000000000016818546555442 -0.958851000000000008860467914928 +-0.992035000000000000142108547152 0.152276999999999995694111021294 -0.99633199999999999540989392699 +-0.991775999999999990919263836986 1.00125799999999998135535861365 -0.117746000000000003438138662659 +-0.991681000000000034688696359808 0.803266999999999953274709696416 -0.609369000000000049510617827764 +-0.991191999999999961978858209477 -0.826733000000000051166182402085 -0.577969999999999983764098487882 +-0.991099999999999980992981818417 -0.704509000000000051855408855772 -0.722072000000000047137405090325 +-0.990295000000000036344260934129 -0.936583000000000054363624713005 0.376997000000000026531665753282 +-0.988816999999999945991646654875 0.786761999999999961374896884081 0.63501700000000005363887112253 +-0.987939000000000011603162874962 0.526036999999999976829201386863 -0.864442999999999961424634875584 +-0.984659999999999979714004894049 0.706821999999999950325957343011 0.728592000000000017401191598765 +-0.984165999999999985270449087693 0.436250000000000026645352591004 -0.917116000000000042291503632441 +-0.98361500000000001708855279503 -0.850681000000000020477841644606 0.555737999999999954248153244407 +-0.983321000000000000618172180111 0.862877000000000005108802270115 0.53714399999999995483079828773 +-0.982102999999999948244067127234 -0.308412999999999992706278817423 -0.969718999999999997640998117276 +-0.980028000000000010238920822303 -0.492765999999999981806553250863 0.892595000000000027284841053188 +-0.97995100000000001649880232435 0.61786200000000002230393647551 -0.811135999999999968146369155875 +-0.979816000000000020264678823878 -0.322923999999999988830268193851 0.967305999999999999161559571803 +-0.977955000000000018722801087279 1.02106000000000007865708084864 -0.0322469999999999978879117179531 +-0.977883999999999975472064761561 0.192042999999999991489474382433 -1.00342500000000001136868377216 +-0.977828999999999948222750845161 0.75828899999999999081978785398 -0.684723999999999999310773546313 +-0.977481999999999962014385346265 -1.00404800000000005155698090675 0.190835000000000004627409566638 +-0.975719000000000002970068635477 -0.460326999999999986190601930502 -0.914368999999999987338128448755 +-0.974009000000000013663736808667 0.995164000000000048551385134488 0.24689099999999999934807703994 +-0.973681000000000018701484805206 0.0770929999999999948645523772939 1.02274200000000003996092345915 +-0.973164000000000029011459901085 0.466108999999999995544897046784 0.914162999999999947853268622566 +-0.972762000000000015553780485789 -0.789241999999999999104716152942 -0.656376999999999988233412295813 +-0.972006000000000036642688883148 -0.00061399999999999996247446176767 1.02723100000000000520117282576 +-0.970697000000000032038371955423 0.154659999999999991926458164926 1.01677299999999992685673078086 +-0.970609999999999972786213220388 0.624380000000000046078696414042 0.817354000000000024961366307252 +-0.968889000000000000234479102801 0.349878000000000022318147330225 -0.968937000000000048238746330753 +-0.968569000000000013272938303999 0.933903999999999956393992306403 0.435543000000000013471890270011 +-0.968303000000000024805046905385 -0.997539999999999982271958742786 -0.259423999999999987942089774151 +-0.9675979999999999581206111543 -0.972130999999999967364772146539 -0.344552999999999998159694314381 +-0.966238999999999959023000428715 -0.34808600000000000651567688692 -0.972222999999999948350648537598 +-0.965678000000000036351366361487 -0.0781519999999999992468247000943 1.03022199999999997110933236399 +-0.96518800000000004590816615746 -1.01901299999999994660981883499 -0.173271000000000008345324431502 +-0.96307299999999995687716136672 -0.942884000000000055408122534573 -0.428321999999999980524023612816 +-0.963064999999999948876450162061 0.231781999999999988038013043479 1.00934799999999991193533332989 +-0.962412000000000045218939703773 -0.0615539999999999976054709804885 -1.03439600000000009316636351286 +-0.962284000000000028229862891749 -0.663985000000000047393200475199 -0.795696999999999987629450970417 +-0.962239999999999984225951266126 -0.580779000000000045211834276415 -0.858364000000000015866419289523 +-0.961597999999999952791540636099 -0.0993099999999999955013763042189 -1.03221500000000010466294497746 +-0.96136399999999999632649405612 -0.929275999999999990919263836986 0.46067900000000000515498754794 +-0.96135899999999996357047393758 0.230750000000000010658141036402 -1.01120800000000010676615147531 +-0.960961999999999982868814640824 -0.023865999999999998326671857285 -1.03729599999999999582200871373 +-0.960274999999999989697130331479 1.03683299999999989360333074728 0.0533780000000000018345325258906 +-0.960118999999999944705564303149 0.710319000000000033701041957102 -0.757375000000000020428103653103 +-0.958523000000000013898215911468 -0.136983999999999994656718627084 -1.03076100000000003831246431218 +-0.958264000000000004675371201301 -1.03646499999999996965982518304 -0.0864349999999999979438669583942 +-0.957254000000000049297455007036 0.013606000000000000038635761257 -1.04090400000000005142908321432 +-0.956115000000000048174797484535 -1.00452900000000000524380538991 0.277069000000000009720224625198 +-0.95568299999999994920329982051 -0.750183999999999961971752782119 0.723804000000000002934541498689 +-0.955196000000000045027093165118 -0.659900999999999959833019147482 0.807545999999999986052046097029 +-0.95474700000000001232081103808 -0.909916999999999975834441556799 -0.510400999999999993583799096086 +-0.954721999999999959563012907893 -0.155216999999999993864463476712 1.03170399999999995443999978306 +-0.954509999999999969588770909468 -0.399158999999999986041387955993 0.964149000000000033772096230678 +-0.953327000000000035484504223859 0.476509000000000015884182857917 -0.929574000000000011390000054234 +-0.953200000000000047251091928047 -0.174427999999999999714006548857 -1.03004099999999998438227066799 +-0.951902000000000025892177291098 0.567355000000000053717030823464 -0.878630000000000022097879082139 +-0.951717000000000035164759992767 0.969857999999999997875477220077 -0.391932000000000002604139126561 +-0.951533999999999990926369264344 0.933254999999999945714534987928 -0.472884000000000026542323894319 +-0.951301999999999980950349254272 0.0507140000000000021329604749099 -1.04520499999999993967492173397 +-0.950814999999999965751840136363 0.308155000000000012239098623468 1.00049499999999991217691786005 +-0.950559000000000042795988974831 -0.500369999999999981454834596661 -0.9198199999999999709743292442 +-0.950492000000000003545608251443 -0.748635999999999968146369155875 -0.73219500000000004025224598081 +-0.948143999999999986805221396935 1.00263400000000002521005626477 -0.30943300000000001359623524877 +-0.948048000000000001818989403546 -0.386685999999999974185982409836 -0.975539999999999962732033509383 +-0.947594999999999965112351674179 0.892969000000000012740031252179 -0.551969999999999960671459575678 +-0.947556999999999982620124683308 -1.04982599999999992590460351494 0.000742999999999999953884111114633 +-0.946679000000000048231640903396 -0.836752000000000051294080094522 0.635329999999999950333062770369 +-0.946585000000000009734435479913 0.540796999999999972175146467634 0.900841000000000002856381797756 +-0.945648999999999961829644234967 -0.211494999999999988560261954262 -1.03005700000000000038369307731 +-0.945110000000000005648814749293 0.99865899999999996339283825364 0.330828999999999984193976843017 +-0.944919999999999982165377332421 -0.567263999999999990464516486099 0.886194000000000037253755635902 +-0.943130000000000023874235921539 0.0873109999999999997211119762142 -1.0501819999999999488693447347 +-0.943072000000000021380230919021 0.778160999999999991594279435958 0.710690000000000043911541069974 +-0.94306599999999995986854628427 0.388400000000000023003821070233 -0.979679999999999995274890807195 +-0.942652999999999963165464578196 -0.873357999999999967677410950273 -0.59046500000000001762145984685 +-0.942527000000000003687716798595 0.268245999999999984453324941569 -1.0196510000000000850661763252 +-0.942138000000000030986768706498 0.856396000000000046092907268758 0.615597999999999978548714807403 +-0.940829000000000026382451778773 1.03145299999999995321786627756 -0.225711999999999995969446331401 +-0.939917000000000002479794147803 0.849157999999999968387953686033 -0.628877000000000019319656985317 +-0.939181000000000043570480556809 -0.231503999999999987569054837877 1.03167100000000000470379291073 +-0.938806000000000029359625841607 1.0485130000000000283222334474 0.13879299999999999970512476466 +-0.938620000000000009876544027065 0.659545999999999965623942443926 -0.827038000000000050881965307781 +-0.935899999999999954169993543474 -0.248036000000000006471267965935 -1.03081000000000000405009359383 +-0.934262999999999954603424612287 0.696745999999999976459719164268 0.801059999999999994280130977131 +-0.933996000000000048402171159978 0.383475999999999983547382953475 0.990250999999999992340349308506 +-0.933111000000000023746338229103 -1.05904400000000009640643838793 0.0879179999999999961524110858591 +-0.932769999999999988027354902442 0.123253000000000001445954467272 -1.05581700000000000549960077478 +-0.931783000000000027895907805942 0.93015499999999995406341213311 0.51632599999999995166177768624 +-0.930973999999999968224528856808 -1.00104499999999996262545209902 0.362209000000000003183231456205 +-0.929802000000000017365664461977 1.05620099999999994544452874834 -0.141101000000000004197531211503 +-0.929668999999999967620567531412 -0.620842000000000004966693722963 -0.8661809999999999787334559187 +-0.928637999999999963485208809288 -0.918301999999999951640461404168 0.542542999999999997484678715409 +-0.928529000000000048764547955216 0.801996000000000042184922222077 -0.703303000000000011482370609883 +-0.92760200000000003761613243114 -0.424061000000000021259438653942 -0.97965700000000000002842170943 +-0.926839999999999997193356193748 -0.833353000000000010416556506243 -0.668198999999999987409182722331 +-0.924714999999999953672613628441 -0.473673000000000010700773600547 0.959446000000000021046275833214 +-0.924471000000000042717829273897 -0.705075000000000007283063041541 -0.80512300000000003308286977699 +-0.923992000000000035520031360647 -0.283909999999999995701216448651 -1.03229499999999996262545209902 +-0.923077999999999954106044697255 -0.538726999999999955903717818728 -0.926120999999999972018827065767 +-0.921459999999999945785589261504 0.304381999999999985906384836198 -1.02871899999999993902122241707 +-0.920263000000000053191229199001 0.158399000000000012011724948024 -1.06208600000000008556355624023 +-0.920097000000000053709925396106 0.514608999999999983110399170982 -0.94265600000000004943245812683 +-0.919116999999999961801222525537 -0.306711999999999984645171480224 1.03012199999999998212274476828 +-0.915548999999999946197704048245 0.613496000000000041296743802377 0.886222999999999982989606905903 +-0.915104999999999946247442039748 1.07678000000000007041478511383 -0.0559329999999999966098229720046 +-0.914982999999999990770049862476 -1.06408199999999997231725501479 0.174746000000000012430945162123 +-0.914951999999999987522869560053 0.425099999999999977884357349467 -0.991036000000000028009594643663 +-0.913630999999999970917485825339 1.05605600000000010574296993582 0.223659999999999997699617892977 +-0.913476999999999983437248829432 0.751669999999999949302775803517 -0.774953000000000002955857780762 +-0.913416000000000005698552740796 0.606168999999999957850604914711 -0.893437000000000036692426874652 +-0.912673999999999985277554515051 0.457450000000000023270274596143 0.978655000000000052651216719823 +-0.91247999999999995779376149585 0.998213000000000016953549675236 0.413461999999999996191490936326 +-0.910537000000000040778047605272 -0.730974000000000012633449841815 0.797870999999999996887822817371 +-0.909972000000000003083755473199 -0.318973000000000006526335027957 -1.03450799999999998313171545306 +-0.909391999999999978143705448019 -1.02148599999999989407228895288 -0.359960999999999975429432197416 +-0.90820400000000001128341864387 -1.04850200000000004507683115662 -0.275332999999999994411581383247 +-0.907367999999999952365214994643 -0.790058999999999955754503844219 -0.743295999999999956742158246925 +-0.907363999999999948364859392314 0.0805089999999999972324360442144 1.08176199999999989032062330807 +-0.906992000000000020420998225745 -0.990438000000000040579095639259 -0.44316800000000000636646291241 +-0.906008000000000035534242215363 -0.819521000000000054974691465759 0.71241399999999999170796627368 +-0.905750000000000055067062021408 0.00563799999999999978256282062716 1.08608700000000002461320036673 +-0.905658999999999991814547684044 0.192608000000000001428190898878 -1.06896400000000002528111053834 +-0.905457999999999985085707976395 -0.639395999999999964380492656346 0.87824800000000002864197767849 +-0.904980000000000006643574579357 -0.4600620000000000264783750481 -0.984558000000000044238390728424 +-0.904487999999999958689045342908 0.155244999999999994111377077388 1.07601100000000005074696218799 +-0.903432000000000012818190953112 -1.07137999999999999900524016994 -0.189619000000000009764633546183 +-0.902159999999999961950436500047 -0.993611000000000021969981389702 0.445919999999999983053555752122 +-0.90101100000000000633804120298 -0.955482000000000053496762575378 -0.524626000000000036749270293512 +-0.899652000000000007240430477395 -0.0690709999999999935127448225103 1.08896999999999999353406110458 +-0.898243000000000013649525953952 0.339017000000000012782663816324 -1.03837700000000010547296369623 +-0.8972369999999999512496628995 0.846535000000000037445602174557 0.691622999999999987785770372284 +-0.897135000000000015774048733874 0.229553000000000007041478511383 1.06885699999999994602717379166 +-0.896796000000000037566394439636 1.0931100000000000260769184024 0.0294549999999999985444976147164 +-0.895452000000000025714541607158 -0.0660400000000000014788170688007 -1.09261300000000005638867150992 +-0.895093999999999945238471354969 -1.09003099999999997216093561292 -0.10315699999999999869615407988 +-0.894819999999999948769868751697 0.698375999999999996781241407007 -0.843544999999999989270804690022 +-0.894800999999999957523755256261 -0.658731999999999984218845838768 -0.874873000000000011766587704187 +-0.894747999999999987785770372284 -0.0986830000000000068238747985561 -1.09072799999999991982235769683 +-0.894607999999999958795626753272 -0.380543999999999993377741702716 1.02706499999999989469756656035 +-0.894198000000000048359538595832 -0.0334549999999999986277643415633 -1.09512100000000001109867753257 +-0.893893999999999966377117743832 -0.353088000000000012956746786585 -1.03743999999999991779020547256 +-0.893604999999999982662757247454 0.766488999999999975898390403017 0.783559000000000005492495347426 +-0.893386000000000013443468560581 -0.575247999999999981568521434383 -0.933247000000000048736126245785 +-0.893243000000000009208633855451 -1.06492100000000000648014975013 0.260884000000000004781952611665 +-0.892525000000000012789769243682 0.979114999999999957580598675122 -0.494705000000000005844214001627 +-0.89224700000000001232081103808 -0.903703000000000034042102470266 0.622264999999999957047691623302 +-0.892090000000000049595882956055 -0.13125600000000001155164852662 -1.0894710000000000782449660619 +-0.891475000000000017408297026122 -0.916754999999999986570742294134 -0.604013000000000022104984509497 +-0.891318999999999972416730997793 0.922736000000000000653699316899 0.595069999999999987849719218502 +-0.890992000000000006210143510543 -0.00105699999999999999684974216763 -1.09824000000000010501821634534 +-0.890788000000000024236612716777 1.0172099999999999475619461009 -0.414463000000000025835333872237 +-0.890739999999999976232345488825 0.93715499999999996028066107101 -0.572994000000000003325340003357 +-0.890548000000000006259881502046 -0.546170999999999962071228765126 0.953215999999999952230211874848 +-0.889095999999999997420729869191 -0.143323000000000005949019055151 1.09039700000000006063771706977 +-0.889013999999999970924591252697 0.225748000000000004217071136736 -1.07642600000000010496137292648 +-0.887488000000000054612314670521 -0.163629999999999997672972540386 -1.08884800000000003805666892731 +-0.886934000000000000163424829225 0.529784000000000032670754990249 0.965752000000000054846793773322 +-0.885846000000000022289725620794 0.0310260000000000014941381465405 -1.10195899999999991081267580739 +-0.885534999999999961062258080347 1.05129199999999989323384852469 -0.332585000000000019504398096615 +-0.885440000000000004831690603169 0.891495999999999955143437091465 -0.649023000000000016562751170568 +-0.885332000000000007844391802792 0.303138000000000018552270830696 1.06032700000000001949729266926 +-0.884851000000000054157567319635 1.0594310000000000115960574476 0.307645000000000001794120407794 +-0.884660000000000001918465386552 0.459832000000000018502532839193 -1.00296099999999999141664375202 +-0.884607000000000032180480502575 0.55040000000000000035527136788 -0.956309999999999993391952557431 +-0.884315999999999990954790973774 -0.743646999999999946950879348151 -0.815459999999999962660979235807 +-0.883222999999999980325071646803 -1.10437899999999999955946350383 -0.0162869999999999993944843623694 +-0.880959000000000047592152441212 -0.195676999999999989832133451273 -1.0888629999999999142801243579 +-0.880272999999999972153830185562 -0.494549000000000016363799204555 -0.990222999999999964337860092201 +-0.880178000000000015923262708384 0.683921000000000001151079231931 0.870367000000000001769251412043 +-0.878781000000000034333424991928 0.0626680000000000014814816040598 -1.1062620000000000786144482845 +-0.878421000000000007368328169832 -0.874410000000000020570212200255 -0.681015999999999954717111450009 +-0.876788000000000011802114840975 1.08122399999999996289545833861 -0.249394000000000004568789790937 +-0.876645000000000007567280135845 0.842319999999999957651652948698 -0.722489999999999965574204452423 +-0.876249999999999973354647408996 0.993827000000000015944578990457 0.494464000000000014622969501943 +-0.875823000000000018161472326028 -0.386120000000000018758328224067 -1.04107900000000008766676273808 +-0.874947999999999947995377169718 1.10512600000000005273648184811 0.114726999999999995649702100309 +-0.874121999999999954589213757572 -0.216825999999999990963672757971 1.09036500000000002863487225113 +-0.872967000000000048487436288269 0.372012999999999982581044832841 -1.04858699999999993579535839672 +-0.87263100000000004552447308015 0.642326999999999981305620622152 -0.90880799999999994920329982051 +-0.87253000000000002778222096822 -0.227269999999999999795718963469 -1.08951299999999995371524619259 +-0.870395000000000029771740628348 0.257684999999999997388755446082 -1.08444000000000007055689366098 +-0.869824000000000041588066324039 0.0937430000000000068771655037381 -1.11113400000000006606626357097 +-0.869785000000000030340174816956 -0.982256000000000017990942069446 0.52787200000000000787991893958 +-0.869126999999999982904341777612 0.375711999999999990418331208275 1.05045699999999997409361185419 +-0.867978000000000027291946480545 -1.06155700000000008387246452912 0.345992000000000021753265855295 +-0.86786700000000005505995659405 -1.11436800000000002519584541005 0.0706470000000000014628298572461 +-0.865752999999999994784616319521 -0.452708999999999972541075976551 1.02251000000000002998490344908 +-0.864580000000000015170087408478 1.1068890000000000117807985589 -0.16522000000000000574651437546 +-0.864389999999999991686649991607 0.789819000000000048800075092004 -0.793104999999999948911977298849 +-0.862234999999999973674391640088 -0.258286000000000015575096767861 -1.09079799999999993431742950634 +-0.86189999999999999946709294818 -0.828613999999999961687535687815 -0.755333000000000032159164220502 +-0.861797999999999952969176320039 -0.708879000000000036862957131234 0.868789000000000033452351999586 +-0.861760999999999999232613845379 -0.799055999999999988503418535402 0.78668700000000002514610741855 +-0.861600000000000032507330161025 -0.609789000000000025458746222284 -0.941170999999999979834797159128 +-0.859010999999999969034547575575 0.124129000000000003223199485092 -1.116554000000000046455284064 +-0.857773000000000007680966973567 -0.694298999999999999488409230253 -0.884404999999999996695976278716 +-0.856875999999999971024067235703 0.600191999999999947768003494275 0.95159499999999996866506535298 +-0.855829999999999979642950620473 -0.417939000000000004941824727211 -1.04540999999999995040411704395 +-0.854790000000000049773518639995 -0.289289999999999991597832149637 1.08887299999999997979216459498 +-0.853577000000000030155433705659 -0.52738399999999996392574530546 -0.996630000000000015880630144238 +-0.852577999999999947000617339654 1.05862499999999992716936958459 0.39041500000000001202593580274 +-0.852335999999999982534859555017 -0.88553800000000004732925162898 0.699532000000000042660985855036 +-0.852307000000000036799008285016 0.492460000000000008846257060213 -1.01540900000000000602540239925 +-0.85214500000000004131806008445 -0.616368000000000026972202249453 0.945482999999999962348340432072 +-0.850113000000000007538858426415 -0.288602000000000025181634555338 -1.09271099999999998786393007322 +-0.849875999999999964806818297802 0.288295999999999996710187133431 -1.09297599999999994757615695562 +-0.849647000000000041097791836364 1.11278100000000002012257027673 0.199547000000000002151168132514 +-0.84908600000000000740385530662 -1.11996000000000006657785434072 0.157301999999999997381650018724 +-0.848960000000000047926107527019 1.12818599999999991112531461113 -0.080393000000000006122213846993 +-0.84879599999999999493383029403 0.833334000000000019170443010808 0.764919000000000015582202195219 +-0.848724000000000033949731914618 0.734200999999999992517984992446 -0.860590999999999994862776020454 +-0.848582999999999976203923779394 0.446985999999999994436450378998 1.03928400000000009661960120866 +-0.848415000000000030233593406592 -1.06697599999999992448351804342 -0.37650400000000000533262323188 +-0.848239999999999993995913882827 -1.03426799999999996515498423832 -0.459106999999999987327470307719 +-0.847338000000000035605296488939 0.911673999999999984389376095351 0.671467000000000036052938412467 +-0.84699800000000002864197767849 0.58374199999999998311750459834 -0.970484000000000013308465440787 +-0.846384000000000025210056264768 0.153707000000000010286882456967 -1.1225009999999999710240672357 +-0.845731000000000010530243343965 0.403239999999999987334575735076 -1.05930900000000005611866527033 +-0.845242000000000048842707656149 -1.0954720000000000013073986338 -0.292414999999999980495601903385 +-0.844716000000000022396307031158 -0.997479000000000004533262654149 -0.539899000000000017784884676075 +-0.841978000000000004199307568342 -0.779548000000000018694379377848 -0.826667000000000040671466194908 +-0.840610999999999997100985638099 0.751792000000000015802470443305 0.853335999999999983423037974717 +-0.839288000000000034006575333478 -1.05400300000000002320632574992 0.429734999999999978115283738589 +-0.838732999999999950802020975971 -1.11964500000000000135003119794 -0.207171999999999995045740774913 +-0.837859000000000020413892798388 -0.956752999999999964586550049717 -0.618558999999999969965358559421 +-0.83746500000000001495692458775 0.083607000000000000761168905683 1.13651300000000010648193438101 +-0.836560999999999999054978161439 0.985519000000000033878677641042 0.573513000000000050526693939901 +-0.83621199999999995533528363012 -0.318097000000000018626877817951 -1.09524500000000002408739874227 +-0.835918000000000049887205477717 0.0118670000000000008116840533035 1.14065700000000003200284481863 +-0.834709999999999952002838199405 0.155217999999999994864552377294 1.13100299999999998057376160432 +-0.833992999999999984339638103847 -0.448419000000000012029488516418 -1.05041699999999993409005583089 +-0.83397699999999996833821569453 -0.967023999999999994692245763872 0.607739999999999946922457638721 +-0.83266300000000004200018111078 -0.522921999999999997932320638938 1.01647599999999993514165907982 +-0.831992999999999982563281264447 0.182357999999999992324362096952 -1.12895199999999995554844645085 +-0.831278999999999990144772255007 0.9774589999999999667679162485 -0.594601000000000046163961542334 +-0.831176000000000025913493573171 -0.360428000000000026137314534935 1.08592700000000008664358119859 +-0.830811999999999994948041148746 1.0209449999999999914024328973 -0.517128999999999949821472000622 +-0.830076000000000036038727557752 -0.0597169999999999992490451461435 1.14341899999999996317967543291 +-0.829990000000000005542233338929 1.14503099999999990998844623391 0.00475100000000000001476596622751 +-0.829709000000000029828584047209 0.675684999999999980069276261929 -0.924679999999999946425077723688 +-0.828914999999999957402962991182 -1.13939999999999996838084825868 -0.121110999999999996434851823324 +-0.828465000000000006963318810449 0.930115000000000025082158572332 -0.669725000000000014743761767022 +-0.827845999999999970775377278187 -0.642212000000000005073275133327 -0.949860000000000037623237858497 +-0.827695999999999987295495884609 -0.912251000000000034084735034412 -0.694778000000000006686207143503 +-0.827663999999999955292651065974 0.226418000000000008142819751811 1.12414700000000000734701188776 +-0.827536000000000049325876716466 0.3174580000000000179483095053 -1.10200000000000009059419880941 +-0.827065999999999967862152061571 1.0604020000000000667483845973 -0.437616999999999978232523289989 +-0.826953000000000049141135605169 -1.12113200000000001743671873555 0.243335999999999996745714270219 +-0.824999000000000037857716961298 -0.558439000000000018708590232563 -1.00375400000000003508660029183 +-0.824957999999999969098496421793 -0.0702649999999999941291406457822 -1.14651999999999998358646280394 +-0.824366999999999960913044105837 -0.0976670000000000038120617773529 -1.14493700000000009353584573546 +-0.823906000000000027227997634327 -0.04291199999999999875610612321 -1.14862400000000008937206530391 +-0.823782000000000014239276424632 0.5166800000000000281374923361 1.02685200000000009801226497075 +-0.822618999999999989114485288155 0.668397000000000018893331343861 0.936239000000000043399950300227 +-0.822381999999999946382445159543 0.879099999999999992539301274519 -0.742206999999999950112794522283 +-0.822135999999999977916331772576 -0.125010000000000010000889005823 -1.14388200000000006539835339936 +-0.821213999999999999523936367041 -0.0157160000000000008024692021991 -1.15124300000000001631406121305 +-0.820992999999999972793318647746 1.11604400000000003601030584832 0.283579000000000025494273359072 +-0.820587999999999984090948146331 -0.346656999999999992922994351829 -1.0983909999999998952091573301 +-0.820056000000000007155165349104 1.09567400000000003679190285766 -0.356377999999999972580155827018 +-0.819961000000000050924597871926 -0.130864000000000008094858117147 1.14478699999999999903366187937 +-0.818732000000000015305090528273 -0.727404999999999968274266848312 -0.894739999999999979785059167625 +-0.818271999999999999353406110458 -0.152184999999999986952659014605 -1.14335900000000001419664386049 +-0.818022999999999944620299174858 0.522854000000000040948577861855 -1.02832900000000004858691227128 +-0.816941000000000028258284601179 1.0536399999999999099742353792 0.471644999999999980921927544841 +-0.816895000000000037765346405649 0.0112160000000000002751132655021 -1.15436399999999994570032413321 +-0.816644000000000036543212900142 0.432574999999999987299048598288 -1.0705000000000000071054273576 +-0.816355000000000052828852403763 0.29692600000000002324895831407 1.11597499999999993924859609251 +-0.815895000000000036877167985949 0.209971999999999991981525226947 -1.13588099999999991851495906303 +-0.815825000000000022382096176443 -1.15465799999999996217070474813 -0.0345729999999999995652366635568 +-0.814266000000000045311310259422 -0.864148999999999944954254260665 -0.76825600000000004996536517865 +-0.81411299999999997556443531721 -0.775437000000000042909675812552 0.857855999999999951910467643756 +-0.813053000000000025693225325085 0.824616000000000015646151041437 -0.811759000000000008334666290466 +-0.812791999999999958959051582497 -0.179086999999999996191490936326 -1.14337099999999991517540820496 +-0.810964000000000018175683180743 0.0377769999999999980810905242379 -1.15797700000000003406341875234 +-0.810400000000000009237055564881 -0.477439000000000002277289468111 -1.05607999999999990770049862476 +-0.809810000000000029807267765136 1.12662299999999993005417309178 -0.273731999999999975337061641767 +-0.809657999999999988816057339136 -0.683985999999999982890130922897 0.936278999999999972381203861005 +-0.809060000000000001385558334732 -0.863878000000000034752645206027 0.774038000000000003808509063674 +-0.807744000000000017536194718559 1.15735600000000005138645065017 0.0898759999999999975583975242444 +-0.807418999999999997818633801216 0.614503000000000021429968910525 -0.985119999999999995665689311863 +-0.807285999999999948073536870652 -1.04228999999999993875121617748 0.511781999999999959172214403225 +-0.805717000000000016513013179065 -0.205608000000000012974510354979 -1.14391700000000007264588930411 +-0.805614000000000052281734497228 -0.20129299999999999970512476466 1.14475600000000010680878403946 +-0.803464999999999984758858317946 0.345057000000000002604139126561 -1.11147599999999990849630648881 +-0.803444999999999964757080306299 0.0638620000000000020978774273317 -1.16206600000000004335731773608 +-0.803374000000000032528646443097 -0.429958999999999980090592544002 1.08153900000000002812328148138 +-0.803301999999999960522245601169 -0.374167000000000027348789899406 -1.10213600000000000456168436358 +-0.801556999999999963968377869605 -1.11787900000000006706102340104 0.328409999999999979714004894049 +-0.800826999999999955548446450848 0.366464000000000011958434242842 1.10651699999999997281463492982 +-0.800514999999999976587616856705 0.766877000000000030865976441419 -0.878107999999999999651834059478 +-0.80001299999999997414334984569 0.897015000000000006785683126509 0.745213000000000014289014416136 +-0.799514999999999975699438437005 -1.16535900000000003373656909389 0.0521020000000000024775737017535 +-0.798154000000000030112801141513 0.236437000000000008270717444248 -1.14326100000000008272138529719 +-0.797622999999999970910380397981 -0.812636000000000024989788016683 -0.838701000000000029821478619851 +-0.797073999999999949217510675226 -0.231642999999999987803533940678 -1.14499499999999998500754827546 +-0.797004000000000045744741328235 0.816842999999999985760723575368 0.835195000000000020712320747407 +-0.796367999999999964799712870445 1.1531240000000000378577169613 -0.190006000000000008220979452744 +-0.795471000000000039165115595097 -0.590906000000000042327030769229 1.00898799999999999599253897031 +-0.794877999999999973468334246718 -0.947975000000000012079226507922 0.685208999999999956997953631799 +-0.794820999999999999729993760411 0.584519000000000010786038728838 1.01321200000000000152056145453 +-0.794650999999999996248334355187 -0.587590999999999974434672367352 -1.0115670000000001049755837812 +-0.794367999999999963023356031044 0.0893700000000000049915627187147 -1.16661600000000009735856565385 +-0.793571000000000026375346351415 0.973322000000000020492052499321 0.650299999999999989164223279658 +-0.792255000000000042525982735242 -0.67239099999999996093436038791 -0.95928100000000005032063654653 +-0.789098999999999994869881447812 1.1149020000000000596429572397 0.36649199999999998444977222789 +-0.787089999999999956337148887542 -0.27072600000000002218314421043 1.14332699999999998219379904185 +-0.787048999999999998600230810553 -1.07419899999999990392041127052 -0.476078999999999974424014226315 +-0.786899000000000015120349416975 -0.257091000000000013958612044007 -1.14660099999999998132693690422 +-0.786084000000000004959588295605 -1.03574000000000010501821634534 -0.55615999999999998770761067135 +-0.785819000000000045247361413203 0.459901999999999977486453417441 -1.08211699999999999555200247414 +-0.785142000000000006565414878423 -0.504885999999999945941908663372 -1.06237599999999998701127879031 +-0.784905999999999992589039266022 -1.10841900000000004311573320592 -0.394118000000000023863577780503 +-0.784818000000000015603518477292 0.706112999999999990663468452112 -0.94099200000000005061906449555 +-0.784422999999999981390885750443 -0.400519000000000013894663197789 -1.10646500000000003183231456205 +-0.784298999999999968402164540748 0.734129000000000031533886613033 0.919744000000000005989875262458 +-0.783768000000000020222046259732 0.1141979999999999939586103892 -1.17160799999999998277644408518 +-0.782309999999999949871209992125 1.16511399999999998300381776062 0.174645999999999995688781950776 +-0.782017999999999990912158409628 -0.993192999999999992510879565089 -0.634047000000000027242208489042 +-0.781942000000000025927704427886 0.550896000000000052310156206659 -1.04167199999999993131893916143 +-0.781143000000000031768365715834 0.434757000000000004558131649901 1.09581100000000009053735539055 +-0.780050000000000021138646388863 -1.17146100000000008556355624023 0.138572000000000000730082660994 +-0.779783000000000003915090474038 1.17507500000000009166001291305 -0.105529999999999998805400025503 +-0.779665999999999970171415952791 -1.13826399999999994250288182229 -0.310603000000000017966073073694 +-0.778839999999999976765252540645 0.261649999999999993693933220129 -1.15106299999999994732036157075 +-0.778079999999999993853805335675 1.0444990000000000662794263917 0.55101299999999997503152826539 +-0.77783100000000005014300086259 -0.757916999999999951853624224896 -0.905837000000000003296918293927 +-0.77775799999999994938093550445 0.370983999999999980445863911882 -1.12136700000000000265742983174 +-0.775229999999999974669151470152 -0.28185100000000001818634132178 -1.14872899999999988907006809313 +-0.774866000000000054726001508243 -0.946725999999999956457941152621 -0.709431000000000033800517940108 +-0.77299799999999996291677462068 -1.11021400000000003416289473535 0.4121870000000000255901966284 +-0.772097000000000033281821743003 -1.02646299999999990326671195362 0.591809999999999947206674733025 +-0.771688000000000040579095639259 0.138249000000000010768275160444 -1.17702400000000007018741143838 +-0.771491999999999955583973587636 -0.497609999999999996767030552292 1.07572500000000004227729277773 +-0.771349999999999980104803398717 -1.16361800000000004118305696466 -0.225861000000000006204814440025 +-0.76944500000000004558131649901 1.0137210000000000942321776165 -0.616704000000000029935165457573 +-0.769217999999999957339014144964 0.964860999999999968679276207695 -0.690903999999999962611241244304 +-0.766635999999999984133580710477 1.05858099999999999418776042148 -0.5400690000000000212665440813 +-0.766024000000000038212988329178 0.642561000000000048792969664646 -1.00016100000000007774758614687 +-0.765954000000000023717916519672 0.912192000000000002835065515683 -0.762378000000000000113686837722 +-0.764654999999999973603337366512 -0.896523999999999987586818406271 -0.782016000000000044423131839721 +-0.764464000000000032386537895945 -0.3388889999999999957935870043 1.14050399999999996225596987642 +-0.764260999999999968146369155875 0.0863749999999999934496841547116 1.18677900000000002833644430211 +-0.764024000000000036436631489778 -0.42560999999999998832933556514 -1.11136100000000004328626346251 +-0.76325200000000004152411747782 -0.748758000000000034646063795662 0.925637999999999960820673550188 +-0.762788000000000021572077457677 0.0180500000000000000721644966006 1.19072599999999995112887063442 +-0.762651999999999996582289440994 -0.61472400000000004816058662982 -1.02003700000000008252243333118 +-0.762591000000000018843593352358 -0.838809999999999944542139473924 0.845489999999999963797847613023 +-0.762114999999999986890486525226 -0.305823999999999984744647463231 -1.15137000000000000454747350886 +-0.76181399999999999117505922186 0.650233999999999978669507072482 0.998415999999999970171415952791 +-0.761637000000000008448353128188 0.154577999999999993185895164061 1.18152999999999996916244526801 +-0.760801999999999978285813995171 1.09926300000000010115286386281 -0.461303999999999991832311252438 +-0.760120000000000017870149804367 1.19238899999999992118659974949 -0.020638000000000000094813046303 +-0.759989000000000025636381906224 -1.18437900000000007061373707984 -0.140227999999999991542765087615 +-0.759666999999999981163512075 0.855924000000000018140156043955 -0.830841999999999969439556934958 +-0.758319999999999994066968156403 -0.530649999999999955058171963174 -1.06928099999999992597565778851 +-0.758175000000000043343106881366 0.161428999999999989167775993337 -1.18283999999999989150012424943 +-0.758028000000000035107916573907 0.285511999999999988020249475085 -1.15925600000000006417621989385 +-0.757506000000000012661871551245 -1.17294000000000009364953257318 0.224493999999999999106492509782 +-0.757377999999999995672794739221 0.501537000000000010579981335468 1.08390000000000008562039965909 +-0.757224000000000008192557743314 -0.0501279999999999989479526618652 1.19335600000000008336087375937 +-0.754970000000000029949376312288 -0.700205999999999995075938841183 -0.969396999999999953168128286052 +-0.754927000000000014701129202876 0.222389000000000003343103571751 1.17500200000000010192025001743 +-0.754322000000000048025583510025 -0.65639300000000000423483470513 1.00007299999999998973976289562 +-0.754090000000000038049563499953 1.10935999999999990173193964438 0.447958999999999996077804098604 +-0.753789000000000042334136196587 1.16827400000000003466027465038 0.258726999999999984769516458982 +-0.753380000000000049631410092843 0.485113999999999989665155908369 -1.0941129999999998911874854457 +-0.752642000000000033210767469427 -0.925185999999999952869700337033 0.759974999999999956123986066814 +-0.751964999999999994528820934647 1.13560700000000003306865892228 -0.38071800000000000085975671027 +-0.751426999999999956081353502668 -0.842782000000000031114666398935 -0.8515139999999999931290517452 +-0.751207999999999986862064815796 -0.0742130000000000011883827255588 -1.1959010000000001028297447192 +-0.750732999999999983664622504875 -0.096265000000000003343991750171 -1.19462700000000010547296369623 +-0.750515000000000043200998334214 0.395135999999999987242205179427 -1.13163400000000002876276994357 +-0.750383000000000022211565919861 0.796278000000000041325165511807 -0.896028999999999964387598083704 +-0.750361999999999973454123392003 -0.0522000000000000033417713041217 -1.19759499999999996511235167418 +-0.74953000000000002955857780762 0.878816000000000041580960896681 0.816019000000000049865889195644 +-0.748936999999999963861796459241 -0.118270000000000000128785870857 -1.1937780000000000057980287238 +-0.748195999999999972196462749707 -0.0303129999999999996673771818223 -1.19970200000000004614264526026 +-0.747604000000000046277648380055 -0.328917000000000014914292023605 -1.15451299999999990042454101058 +-0.747591000000000005520917056856 -0.117888999999999993795185559975 1.19465899999999991543120358983 +-0.747449000000000030041746867937 0.957282999999999995033306277037 0.724520000000000052864379540551 +-0.745828000000000046476600346068 -0.140139999999999986801668683256 -1.19335700000000000109423581307 +-0.745627999999999957481122692116 -1.20046600000000003305444806756 -0.0540419999999999997597477374711 +-0.74471900000000001984545860978 -0.00863900000000000084510176634467 -1.20221399999999989383070442273 +-0.744206999999999951889151361684 0.576473000000000013187673175707 -1.05538400000000009981704351958 +-0.744156000000000039662495510129 0.289542000000000021575630171355 1.16721800000000008878942026058 +-0.743283000000000027007729386241 0.183645000000000002682298827494 -1.18903500000000006409095476556 +-0.742186000000000012377654456941 -0.449340000000000017177370637 -1.1168050000000000476774175695 +-0.742067000000000032144953365787 0.797128999999999976466824591625 0.902175999999999977951858909364 +-0.741418000000000021465496047313 -0.161789999999999989377386100387 -1.19336700000000006660627605015 +-0.7413880000000000469739802611 -1.09816800000000003301181550341 0.494337999999999999634070491084 +-0.740160000000000040110137433658 1.16746900000000009001155376609 -0.298628999999999977799092221176 +-0.73994599999999999262456640281 0.012737000000000000057842619583 -1.20512100000000010879830369959 +-0.738137000000000043087311496492 0.733488999999999946588502552913 -0.957678000000000029245939003886 +-0.737824000000000035370817386138 -0.405513000000000012335021892795 1.13629899999999994797406088765 +-0.73745799999999994689403592929 1.20499599999999995603161551117 0.0643360000000000042952308376698 +-0.736148000000000024556356947869 1.03123399999999998399857759068 0.628206000000000042149395085289 +-0.735801999999999956081353502668 0.307927999999999979507947500679 -1.16780799999999995719690559781 +-0.735723000000000015852208434808 -0.183132999999999990237142810656 -1.19380599999999992277821547759 +-0.73565599999999997660182771142 -0.56311299999999997467625689751 1.06851000000000007084111075528 +-0.735233000000000025409008230781 -0.785715000000000052260418215155 -0.917652000000000023227642031998 +-0.733925999999999967293717872963 -0.184965999999999991532106946579 1.19463000000000008071765478235 +-0.733894999999999964046537570539 0.0337300000000000030353497493252 -1.20841200000000004166622602497 +-0.733862000000000014310330698208 -1.00658500000000006302514066192 0.66950200000000004152411747782 +-0.731972999999999984765963745303 -1.16978899999999996772714894178 0.309531000000000000582645043323 +-0.731755999999999962035701628338 -0.351038000000000016687096149326 -1.15814700000000003754507815756 +-0.73003899999999999348432311308 -0.554630999999999985128340540541 -1.07676700000000002965805379063 +-0.729628999999999972025932493125 0.566537999999999986044940669672 1.07082999999999994855670593097 +-0.729366999999999987558396696841 0.35576999999999997514876781679 1.15820999999999996177280081611 +-0.729129000000000027092994514533 -0.639731999999999967343455864466 -1.02913199999999993572430412314 +-0.728767999999999971372233176226 -0.204085999999999989640286912618 -1.19467400000000001369926394545 +-0.72832500000000000017763568394 -1.21181500000000008654410521558 0.0323579999999999978754772200773 +-0.727069999999999994066968156403 0.204809999999999992059684927881 -1.1955849999999998978239545977 +-0.726589999999999958113505726942 0.0542580000000000006732392421327 -1.21207400000000009576694992575 +-0.725435000000000052011728257639 1.1947229999999999794368932271 -0.215361999999999997879029933756 +-0.725346999999999964003905006393 -1.07011499999999992738253240532 -0.573346000000000022289725620794 +-0.724893000000000009563905223331 0.713567999999999980076381689287 0.982523000000000035214497984271 +-0.724171000000000009144685009232 -1.02593200000000006610889613512 -0.650414000000000047663206714788 +-0.723659999999999969944042277348 -1.11007499999999992290611317003 -0.494014000000000008672174089952 +-0.722978000000000009528378086543 0.667804999999999981952214511693 -1.01554799999999989523757903953 +-0.722292000000000045112358293409 1.16682200000000002582112301752 0.341787000000000007471356866517 +-0.721844000000000041161740682583 0.417418000000000011251444220761 -1.1422360000000000290754087473 +-0.720578999999999969539032917965 -0.224565999999999987846166504823 -1.19596600000000008456879641017 +-0.720137999999999944833461995586 -0.977700000000000013500311979442 -0.724916000000000004810374321096 +-0.719451999999999980417442202452 0.508109999999999950581752727885 -1.10644100000000000783018094808 +-0.719117000000000006210143510543 -1.1456539999999999501767433685 -0.41273300000000001652722403378 +-0.718995999999999968466113386967 -0.471615999999999979674925043582 -1.12277500000000007851497230149 +-0.718060000000000031583624604536 0.0742389999999999994351185250707 -1.21609100000000003305444806756 +-0.716284000000000031782576570549 -0.251093999999999983874232611925 1.19326799999999999535305050813 +-0.71613700000000002354738626309 -0.725547000000000052999382660346 -0.980167000000000010473399925104 +-0.716106000000000020300205960666 1.09944099999999989059062954766 0.527657000000000042660985855036 +-0.714632000000000044970249746257 -0.372101000000000015077716852829 -1.16225700000000009559641966916 +-0.71326199999999995160493426738 -0.925610000000000043840486796398 -0.796556999999999959527485771105 +-0.713112999999999996880717390013 -0.810429999999999983728571351094 0.913603999999999971670661125245 +-0.712247999999999992226662470785 0.328809999999999991171506508181 -1.17668499999999998095745468163 +-0.711884999999999990016874562571 1.2128479999999999261461880451 0.149055999999999994054533658527 +-0.711735000000000006536993168993 -1.17671100000000006247091732803 -0.329824000000000006060929536034 +-0.711188999999999960088814532355 -0.244491999999999987114307486991 -1.19767899999999993809751686058 +-0.710619000000000000660804744257 0.420812999999999992617460975453 1.14801400000000008994049949251 +-0.709600000000000008526512829121 0.224840000000000012070344723725 -1.20246199999999991980814684212 +-0.709378999999999981795895109826 -0.719123999999999985455190198991 0.989767999999999981142195792927 +-0.708338000000000023170798613137 0.0935949999999999976418862956962 -1.22044899999999989503862707352 +-0.708147999999999999687361196266 -1.21838200000000007605649443576 0.118629999999999999338307077323 +-0.7079309999999999769570990793 0.995596999999999954233942389692 -0.712474999999999969446662362316 +-0.707845999999999975216269376688 1.21726299999999998391331246239 -0.131243999999999999550581719632 +-0.707583999999999990748733580403 0.941466000000000025060842290259 -0.782922000000000006814104835939 +-0.707435999999999953757878756733 -0.898745000000000016093792964966 0.831740999999999952585483242729 +-0.707274999999999987032595072378 -0.470333999999999974317432815951 1.13072900000000009512746146356 +-0.706852000000000035839775591739 -1.08178799999999997183408595447 0.574539000000000021906032543484 +-0.705482999999999971230124629074 1.04579899999999992310506513604 -0.639216000000000006409095476556 +-0.704965999999999981540099724953 0.599485999999999963350205689494 -1.06941099999999988945376117044 +-0.704444999999999987849719218502 0.883619000000000043293368889863 -0.85027900000000000702016222931 +-0.703570999999999946439288578404 -0.869866999999999945814010970935 -0.865053999999999989611865203187 +-0.703551000000000037459813029272 -1.16202200000000011037570857297 0.393345999999999973439912537287 +-0.701546000000000002927436071332 -1.2031240000000000822666379463 -0.245611999999999996990851514056 +-0.700633999999999979024778440362 -0.263784999999999991704413560001 -1.1998040000000000926405618884 +-0.70041100000000000580513415116 -0.576733000000000051166182402085 -1.0848050000000000192557081391 +-0.700251999999999985568877036712 1.09187400000000001121236437029 -0.563435000000000019149126728735 +-0.698525999999999980261122800584 0.822285000000000043662851112458 -0.914281000000000010352607660025 +-0.698377000000000025536905923218 0.937467000000000050263793127669 0.795880999999999949601203752536 +-0.698003000000000040081715724227 0.629506000000000009997336292145 1.05665300000000006441780442401 +-0.697463000000000055145221722341 0.112249000000000001553424056056 -1.22513099999999997002930740564 +-0.69630099999999994775379263956 -0.392019999999999979589659915291 -1.16682700000000005857714313606 +-0.696089999999999986535215157346 0.857148000000000021003643269069 0.883603000000000027291946480545 +-0.696008999999999988794741057063 -0.626210000000000044373393848218 1.05991999999999997328359313542 +-0.694734999999999991437960034091 -0.316012999999999988354204560892 1.19057999999999997164934484317 +-0.694544999999999967954522617219 -0.49234899999999998110311594246 -1.12924800000000002953015609819 +-0.694215000000000026503244043852 -0.662515999999999993796961916814 -1.03881500000000004391154106997 +-0.69272999999999995690558307615 -0.982735000000000025188739982696 0.744550999999999962852825774462 +-0.692257000000000011219469797652 1.13363900000000006329514690151 -0.485428999999999999381827819889 +-0.691857999999999973006481468474 0.437742999999999993221422300849 -1.15313200000000004585842816596 +-0.691309999999999980069276261929 1.01390000000000002344791028008 0.702921000000000018026469206234 +-0.691104000000000051606718898256 -0.810690000000000021707080577471 -0.930138000000000020328627670096 +-0.690941999999999945103468235175 0.243657000000000012462919585232 -1.20964099999999996626343090611 +-0.689849000000000045496051370719 0.757705999999999990635046742682 -0.974674000000000040344616536458 +-0.688956000000000012839507235185 -0.282370000000000009876544027065 -1.20233400000000001384137249261 +-0.688586999999999949118034692219 -1.22479000000000004533262654149 -0.160430999999999990279775374802 +-0.688041000000000013692158518097 0.0888020000000000059303673083377 1.2323610000000000397335497837 +-0.687985999999999986442844601697 0.484414000000000011247891507082 1.13667000000000006920686246303 +-0.687945999999999946439288578404 1.16076599999999996448707406671 0.423499000000000014320988839245 +-0.687463999999999963996799579036 1.23499899999999995792165918829 -0.046608999999999997654320793572 +-0.687459000000000042263081923011 0.348075000000000023270274596143 -1.18585099999999998843236426183 +-0.686648000000000036102676403971 0.0241609999999999984499066130184 1.23609499999999994379606960138 +-0.685559000000000029473312679329 0.153327999999999992075672139435 1.22739500000000001378452907375 +-0.685478000000000031732838579046 0.130127999999999993674393294896 -1.23011599999999998722444161103 +-0.685176000000000007261746759468 -1.22014000000000000234479102801 0.204434000000000004604316927725 +-0.684201999999999976864728523651 0.774268999999999985028864557535 0.965596000000000009855227744993 +-0.684172000000000002373212737439 0.528800999999999965517361033562 -1.11905300000000007543121682829 +-0.683502999999999971691977407318 1.21591399999999993930543951137 0.233188000000000006384226480805 +-0.681529999999999969162445268012 1.1709309999999999440944975504 -0.405507999999999979579001774255 +-0.681382999999999960927254960552 -0.0403400000000000008570921750106 1.2385829999999999895266000749 +-0.679209999999999980424547629809 0.217483000000000009643841281104 1.22121799999999991470644999936 +-0.678451000000000026268764941051 0.690135999999999971699082834675 -1.03122099999999994324184626748 +-0.676834999999999964437336075207 -0.410719000000000000749622586227 -1.17183799999999993524113506282 +-0.67620199999999996975930116605 -0.300173000000000023135271476349 -1.20525799999999994049915130745 +-0.675908999999999982044585067342 -0.748314999999999952429163840861 -0.991550000000000042454928461666 +-0.675294999999999978612663653621 1.08518200000000009097789188672 0.605272999999999949949369693059 +-0.674494000000000037964298371662 -0.0778670000000000056550319982307 -1.24056199999999994254551438644 +-0.674135999999999957488228119473 -0.0944829999999999975424103126898 -1.23960200000000009268319445255 +-0.673856000000000010530243343965 -0.0612810000000000021369572777985 -1.24183799999999999741362444183 +-0.672938999999999953871565594454 -0.5330979999999999607851464134 1.12381500000000000838440428197 +-0.672911000000000036891378840664 -1.24162100000000008570566478738 -0.0746170000000000027684521342053 +-0.67278300000000001990230202864 -0.111062999999999995059951629628 -1.23896199999999989671550792991 +-0.672429999999999972182251894992 0.147160999999999986265208917757 -1.23538700000000001288924522669 +-0.672352999999999978442133397039 -1.14966900000000005199751740292 0.475609000000000003982592033935 +-0.672269000000000005456968210638 -0.104447999999999999176658604938 1.23981600000000002914646302088 +-0.672224000000000043719694531319 -0.0447900000000000034217073618947 -1.24342599999999992022026162886 +-0.67117000000000004433786671143 0.261185999999999973741893199985 -1.21709200000000006269829100347 +-0.670440000000000035917935292673 -0.127541999999999988713028642451 -1.23864599999999991375432273344 +-0.669605000000000005755396159657 -0.0284590000000000016566747973457 -1.24531900000000006478728664661 +-0.669553999999999982506437845586 -0.596870000000000011652900866466 -1.09336400000000000254374299402 +-0.669526999999999983259613145492 -1.06113799999999991463539572578 0.652471000000000023177904040494 +-0.669362000000000012533973858808 -0.379466000000000025504931500109 1.18657499999999993534061104583 +-0.669019999999999948059326015937 0.28101500000000001477928890381 1.21385499999999990627941315324 +-0.668928999999999995829114141088 -0.511457999999999968210318002093 -1.1361969999999999014761442595 +-0.668112999999999956912688503508 1.20360200000000006070877134334 -0.32398700000000002496847173461 +-0.667116999999999960024865686137 -0.143854000000000009640288567425 -1.2386530000000000040216718844 +-0.666008000000000044416026412364 -0.0123529999999999993975929868384 -1.24750899999999997902477844036 +-0.664546999999999998820499058638 -1.05484200000000005736922048527 -0.667598000000000024733992631809 +-0.664375000000000048849813083507 0.619843000000000032834179819474 -1.08369699999999991035792845651 +-0.664368999999999987338128448755 1.24785999999999996923349954159 0.0382100000000000009081624341434 +-0.663727999999999984659382334939 -1.00505099999999991666754795006 -0.741172999999999970732744714041 +-0.662827000000000055024429457262 -0.159935999999999994836130667863 -1.2389840000000000852509174365 +-0.662742999999999971016961808346 -1.10046899999999991948129718367 -0.591388000000000024769519768597 +-0.662625000000000019539925233403 0.690190999999999998948396751075 1.04142399999999990534149674204 +-0.662421000000000037566394439636 -0.317122999999999988229859582134 -1.20856600000000002914646302088 +-0.661556999999999950645701574103 0.546321999999999974306774674915 1.12422099999999991482013683708 +-0.661533999999999955399232476339 0.365646999999999999797495320308 -1.19527199999999989010746048734 +-0.661448999999999953658402773726 0.0034640000000000000651700915455 -1.24998900000000001675459770922 +-0.660819999999999962980723466899 -0.778851999999999988766319347633 0.978113000000000010203393685515 +-0.660676999999999958745888761769 0.456029000000000017678303265711 -1.16427799999999992408561411139 +-0.660290000000000043556269702094 -0.951293999999999972949638049613 -0.81182299999999996131805346522 +-0.659498999999999946375339732185 -1.21708199999999999718625076639 0.289430000000000020587975768649 +-0.659437000000000050903281589854 -0.868757000000000001449507180951 0.900224000000000024179769297916 +-0.65934199999999998365041165016 -0.167908000000000001694644424788 1.23978799999999989012167134206 +-0.658371000000000039520386962977 0.163281000000000009464429240325 -1.24092200000000008053291367105 +-0.658324000000000020271784251236 -1.14175399999999993561061728542 -0.512843999999999966554753427772 +-0.658047000000000048558490561845 -0.682985999999999982001952503197 -1.04904899999999989823606938444 +-0.65758600000000000385114162782 -0.175723999999999991317167769012 -1.239638000000000017664092411 +-0.656309000000000031249669518729 -0.428124000000000004551026222543 -1.17727099999999995638688687905 +-0.655945000000000000284217094304 0.0189309999999999999109601134251 -1.25274799999999997268673723738 +-0.655028999999999972381203861005 0.343671999999999977504216985835 1.2053329999999999877502432355 +-0.654579000000000021941559680272 -1.25355299999999991733545812167 0.0114920000000000004786171459159 +-0.65424599999999999422328755827 -0.893782999999999994145127857337 -0.879268999999999967265296163532 +-0.652707000000000037154279652896 -0.6866520000000000401030320063 1.04999200000000003640820978035 +-0.652422999999999975173636812542 1.2141809999999999547526385868 0.316398999999999985810461566871 +-0.652059999999999972963848904328 1.23152200000000000557065504836 -0.241187000000000012489564937823 +-0.651415999999999995040411704395 -0.19115499999999999158895036544 -1.24061200000000004806111064681 +-0.65130600000000005156408633411 -1.17853300000000005276490355755 -0.432275999999999993583799096086 +-0.650884000000000018104628907167 1.15013000000000009670486633695 0.503538999999999958845364744775 +-0.650361999999999995658583884506 0.277357999999999993434585121577 -1.22478700000000007008793545538 +-0.649518000000000039761971493135 0.0339870000000000033191227544194 -1.25577500000000008562039965909 +-0.64886399999999999632649405612 -0.955007000000000050299320264457 0.816661999999999999033661879366 +-0.647676999999999947199569305667 0.547104000000000034731328923954 -1.13189800000000007074163477228 +-0.647668000000000021465496047313 -0.33315400000000000568789459976 -1.21224299999999995947064235224 +-0.647603000000000039726444356347 0.907591999999999954340523800056 -0.869993000000000016314061213052 +-0.647503000000000050739856760629 0.966805000000000025472957077 -0.803759000000000001229238932865 +-0.646548000000000011588952020247 0.913950999999999957879026624141 0.864099999999999979216624979017 +-0.64561999999999997168487197996 -0.832744000000000039740655211062 -0.943246000000000028862245926575 +-0.645147000000000025998758701462 0.844797000000000020136781131441 -0.932792999999999983273824000207 +-0.644846999999999948016693451791 1.02220200000000005502442945726 -0.734353000000000033509195418446 +-0.644340000000000023838708784751 -0.206167999999999990157206752883 -1.2419020000000000614193140791 +-0.643745000000000011652900866466 0.992564000000000001833200258261 0.774861000000000021969981389702 +-0.643355000000000010196288258157 0.178423999999999999266364625328 -1.24669900000000000162003743753 +-0.642650999999999972267517023283 -0.230471000000000009189093930217 1.23849999999999993427479694219 +-0.642249999999999987565502124198 -0.52886800000000000476774175695 -1.14359699999999997466204604279 +-0.642193000000000013827161637892 0.0485710000000000030606628342866 -1.25905899999999992822097283351 +-0.641718000000000010629719326971 -1.21065899999999992964205830503 -0.350001999999999979795717308662 +-0.640267999999999948279594264022 -0.441201999999999983081977461552 1.18127000000000004220623850415 +-0.64014599999999999280220208675 0.778668000000000026794566565513 -0.991912000000000015909051853669 +-0.63990199999999997082511526969 0.832098000000000004305888978706 0.947701000000000015610623904649 +-0.639646000000000047869264108158 1.07356600000000002026467882388 -0.662048999999999998600230810553 +-0.638650999999999968714803344483 1.25579700000000005211120424065 0.122878000000000001112887559884 +-0.638499999999999956479257434694 -1.13277899999999998037480963831 0.555993999999999988226306868455 +-0.63758800000000004359890226624 -0.614960999999999979870324295916 -1.10240800000000005454126039695 +-0.637291999999999969617192618898 0.405208000000000012619238987099 1.19568600000000002658850917214 +-0.636387000000000035981884138891 -0.220705000000000012283507544453 -1.24350300000000002498268258933 +-0.634950000000000014388490399142 -0.593555999999999972516206980799 1.11558500000000004881428594672 +-0.634807000000000010153655694012 -0.444164999999999976498799014735 -1.18310500000000007325695605687 +-0.63457500000000000017763568394 0.381456999999999990524912618639 -1.20490900000000000780175923865 +-0.634445999999999954432894355705 -0.768418999999999963179675432912 -1.00349899999999991884180872148 +-0.63399899999999997923794126109 0.0626270000000000021112001036272 -1.26258599999999998608757323382 +-0.633664000000000005030642569182 -1.26053700000000001857358711277 0.0975550000000000028244073746464 +-0.633433000000000023810287075321 1.2545820000000000860040927364 -0.157434999999999991615595718031 +-0.632618000000000013649525953952 0.709466000000000041048053844861 -1.04711599999999993571009326843 +-0.632001999999999952706275507808 -0.348202000000000011503686891956 -1.21627599999999991275956290337 +-0.631920999999999954965801407525 1.12069200000000002148681232939 -0.58713300000000001599431698196 +-0.631820000000000048245851758111 1.06664099999999995027621935151 0.68050100000000002253841557831 +-0.631435999999999997278621322039 0.606292999999999970839326124405 1.11071900000000001185185283248 +-0.631221000000000032059688237496 -1.2092220000000000190709670278 0.373284999999999977937648054649 +-0.629596999999999962227548166993 -1.23800899999999991507593222195 -0.266347000000000000419220214098 +-0.629558999999999979735321176122 -1.03630099999999991666754795006 0.727828999999999948222750845161 +-0.628599000000000018850698779715 0.292107999999999978779641196525 -1.23269500000000009620748642192 +-0.628422000000000036123992686043 0.472204999999999985860199558374 -1.17563100000000009259792932426 +-0.627588999999999952450480122934 -0.234707999999999999962696506373 -1.24540899999999998826183400524 +-0.627442999999999972970954331686 0.192531000000000007688072400924 -1.25269600000000003170441686962 +-0.624967999999999967997155181365 0.0760979999999999989768184605055 -1.26634299999999999641886461177 +-0.623635999999999968146369155875 0.748353000000000045943693294248 1.02520499999999992191135333996 +-0.622592999999999952009943626763 0.637464999999999948343543110241 -1.09818799999999994199129105255 +-0.622263000000000010558665053395 -0.291889000000000009560352509652 1.23595699999999997231725501479 +-0.621701999999999976864728523651 1.16339600000000009671907719166 -0.509898999999999991139532085072 +-0.620767999999999986471266311128 -0.701061000000000045240255985846 -1.05979299999999998505018083961 +-0.618769000000000013450573987939 1.20765600000000006275513442233 0.398361999999999993882227045106 +-0.617978999999999945025308534241 -0.24812200000000000921218656913 -1.24761300000000008303402410093 +-0.615878999999999954262364099122 0.465380000000000015880630144238 1.18495299999999992301980000775 +-0.615484000000000031072033834789 -0.362209000000000003183231456205 -1.22064900000000009505640718999 +-0.615137000000000044863668335893 0.0889319999999999971640463058975 -1.27031399999999994321342455805 +-0.61499199999999998311750459834 -1.2604729999999999545678974755 -0.181639999999999995905497485182 +-0.614612999999999964906294280809 -0.544510000000000049524828682479 -1.15141699999999991277377375809 +-0.612411000000000038667735680065 -0.458778999999999992365218304258 -1.18931699999999995753796611098 +-0.612306000000000016925127965806 1.27269100000000001671196514508 -0.0730620000000000019424462038842 +-0.611253999999999964032326715824 1.13495400000000001838884600147 0.581590999999999969105601849151 +-0.610697000000000045361048250925 0.205546000000000006480149750132 -1.25888800000000000700595137459 +-0.610412999999999983380405410571 1.25877799999999995250732354179 0.207060999999999995058175272789 +-0.610248000000000012654766123887 -1.26254599999999994608401721052 0.183233000000000006979306022004 +-0.610110999999999958909313590993 0.562946999999999975194953094615 -1.14492600000000011029044344468 +-0.609106000000000036287417515268 0.0908790000000000014468426456915 1.27307900000000007167955118348 +-0.60902999999999996028066107101 1.20150800000000002043520908046 -0.430651999999999979262810256841 +-0.608836999999999961552532568021 -0.835341000000000000191846538655 0.965154999999999985149656822614 +-0.607797000000000031683100587543 0.0301769999999999989637178288149 1.27658599999999999852207110962 +-0.607594999999999996198596363683 -0.260894000000000014782841617489 -1.25010500000000002174260771426 +-0.607565000000000021707080577471 -0.500978999999999952130735891842 1.17468499999999997918109784223 +-0.606774999999999953281815123773 0.15147299999999999653432780633 1.26841599999999998793498434679 +-0.606688000000000005051958851254 0.395442999999999988958165886288 -1.2147239999999999149338236748 +-0.605968999999999979877429723274 0.305379999999999984794385454734 -1.24078400000000010905409908446 +-0.605948000000000042142289657932 -0.973473999999999950460960462806 -0.827752999999999961033836370916 +-0.605920000000000014139800441626 -0.744199999999999972644104673236 1.03876199999999996315125372348 +-0.605859999999999954134466406686 -1.02866999999999997328359313542 -0.758136999999999949828577427979 +-0.604639999999999955271334783902 -0.630936000000000052345683343447 -1.11190400000000000346744855051 +-0.604543000000000052551740736817 0.101078000000000001179500941362 -1.27448399999999995024779764208 +-0.603644999999999987139176482742 -0.914434999999999997832844655932 -0.894102999999999981106668656139 +-0.603380999999999945160311654035 -1.07980600000000004357048055681 -0.685529000000000054981796893117 +-0.602854000000000000980548975349 -0.0303940000000000008772982340588 1.27892300000000003201705567335 +-0.602437000000000000277111666946 -0.923510000000000053077542361279 0.885549999999999948308015973453 +-0.602129000000000025316637675132 -1.11141800000000001702460394881 0.634186000000000027476687591843 +-0.600813000000000041467274058959 0.211718999999999990535570759675 1.26261599999999996057908902003 +-0.600450999999999956990848204441 -1.19659000000000004249045559845 0.455666999999999988713028642451 +-0.598959000000000019170443010808 -0.851787999999999989597654348472 -0.956923999999999996823873971152 +-0.598520000000000051976201120851 -1.1266819999999999613038426105 -0.610214999999999951896256789041 +-0.598258999999999985242027378263 -0.351920999999999983831600047779 1.2321679999999999299831188182 +-0.598179000000000016257217794191 -0.375118999999999980232701091154 -1.22534399999999998875921392028 +-0.597960000000000047037929107319 -1.27796200000000004237676876073 -0.096216999999999996973087945662 +-0.597743000000000024307666990353 0.664089000000000040380143673246 1.09621600000000007923972589197 +-0.596480000000000010196288258157 -0.272973000000000021181278953009 -1.25287600000000010069811651192 +-0.595222000000000028840929644502 0.48620700000000000029487523534 -1.18714499999999989476862083393 +-0.595118000000000035853986446455 -0.0812149999999999955280216568099 -1.28032799999999991058530213195 +-0.594878000000000017877255231724 -0.092328999999999994408028669568 -1.27968499999999996141752944823 +-0.594690999999999969638508900971 -0.0701210000000000027720048478841 -1.28118099999999990323829024419 +-0.594295000000000017692514120426 -0.0905939999999999939772621360135 1.28008000000000010665246463759 +-0.593972999999999973219644289202 -0.103417999999999996041388783397 -1.27925800000000000622435436526 +-0.593953999999999981973530793766 1.23487799999999992017762906471 -0.349706999999999990080823408789 +-0.593637999999999999012345597293 0.967311000000000031917579690344 0.843743000000000020754953311553 +-0.593600000000000016520118606422 -0.0590909999999999976938447332486 -1.28224300000000002164313173125 +-0.593458000000000041040948417503 -0.651469999999999993534061104583 1.10607100000000002637534635141 +-0.593230000000000035065284009761 0.112488000000000004652278562389 -1.27883700000000000152056145453 +-0.59318300000000001581668129802 0.217416999999999999149125073927 -1.26525200000000004330047431722 +-0.592405999999999988148147167522 -0.114441000000000001057820497863 -1.27904599999999990522780990432 +-0.592168999999999945416107038909 0.886827000000000031931790545059 0.928910000000000013464784842654 +-0.591910000000000047215564791259 -0.785780000000000033999469906121 -1.01596899999999989994137195026 +-0.591848000000000040721204186411 -0.0481680000000000024806823262224 -1.28350900000000001099920154957 +-0.591297999999999990272669947444 -1.16911000000000009357847829961 -0.532491999999999965353936204338 +-0.591243999999999991779020547256 0.271378999999999981351805899976 1.25570099999999995610266978474 +-0.590875000000000039079850466806 0.523950000000000026822988274944 1.17317599999999999660360572307 +-0.590458999999999956109775212099 0.863724999999999965005770263815 -0.951492000000000004433786671143 +-0.590184000000000041907810555131 -0.125350999999999990208721101226 -1.27905099999999993798383002286 +-0.589442000000000021486812329385 -0.0373949999999999976862952166812 -1.28497499999999997832844655932 +-0.589365999999999945480055885128 0.927748000000000017095658222388 -0.889904999999999946069806355808 +-0.589222000000000023511859126302 0.796293000000000028570923404914 -1.00932299999999997019983766222 +-0.589211000000000040266456835525 -0.471909999999999996145305658501 -1.19588099999999997180566424504 +-0.588763000000000036315839224699 1.28577699999999994773247635749 0.0115989999999999999352739976644 +-0.587314000000000002721378677961 -0.136108000000000006757261417079 -1.27927199999999996471444774215 +-0.587107000000000045503156798077 -1.00737399999999999167243913689 0.800313999999999969858777149057 +-0.586393000000000053084647788637 -0.0268149999999999985589305140365 -1.28663299999999991563015555585 +-0.586126000000000035861091873812 -0.558321999999999984964915711316 -1.15962600000000004563105449051 +-0.585945999999999966867392231507 0.988110000000000043840486796398 -0.824806000000000039129588458309 +-0.585849999999999981881160238117 1.04388999999999998458122263401 0.753043000000000017912782368512 +-0.585659999999999958397722821246 0.725719000000000002970068635477 -1.06317200000000000592592641624 +-0.584674999999999944755302294652 -0.284310999999999980403231347736 -1.25591499999999989256593835307 +-0.584423000000000025799806735449 -1.25957300000000005368860911403 0.268187999999999981959319939051 +-0.583809000000000022367885321728 -0.146667999999999992821742011984 -1.2797089999999999854196630622 +-0.582710999999999978982145876216 -0.0164690000000000009994227667676 -1.28847800000000001219291334564 +-0.582671999999999967734254369134 1.19636499999999990073717981431 0.478752999999999984126475283119 +-0.582559000000000049013237912732 0.317120000000000012985168496016 -1.24902299999999999435829067806 +-0.582524999999999959499064061674 -0.716670000000000029238833576528 -1.07100400000000006706102340104 +-0.582154999999999978044229465013 -0.150187999999999988176568876952 1.28005400000000002513900199119 +-0.58174199999999998134114775894 -1.20692500000000002557953848736 -0.452668999999999988048671184515 +-0.581239999999999978896880747925 0.123117000000000004211742066218 -1.28335599999999994125232660735 +-0.581188999999999955647922433855 0.803764000000000033985259051406 1.00805900000000003835509687633 +-0.580215000000000036273206660553 1.04457200000000005601918928733 -0.756452000000000013280043731356 +-0.580156000000000005023537141824 -0.386880000000000001669775429036 -1.23034299999999996444444150256 +-0.579786000000000023568702545163 0.652279999999999970938802107412 -1.11282400000000003537081738614 +-0.579766000000000003566924533516 1.25679099999999999148769802559 0.290426999999999990720311870973 +-0.579682000000000030581759347115 -0.156988999999999989665155908369 -1.28036100000000008236611392931 +-0.57856700000000005346123543859 -1.29040799999999999947419837554 -0.0104139999999999996460608997495 +-0.578412000000000037225333926472 -0.00639900000000000017397194795876 -1.29050299999999995570476585272 +-0.578104999999999979998221988353 0.330218000000000011517897746671 1.24769799999999997375255134102 +-0.577983000000000024520829811081 0.407548999999999994603427921902 -1.224679000000000073100636655 +-0.576533999999999990926369264344 1.26337499999999991473487170879 -0.26738099999999997979927002234 +-0.574971000000000009855227744993 0.22809799999999999520206017678 -1.27176200000000005907452305109 +-0.574949000000000043364423163439 -0.1670310000000000127950983142 -1.2812239999999999184865373536 +-0.573513000000000050526693939901 0.00335499999999999990937804561497 -1.29269900000000004247624474374 +-0.572228999999999987657872679847 -0.294864999999999988222754154776 -1.25920900000000002272315668961 +-0.572192999999999951654672258883 1.09691200000000010916778592218 -0.68511299999999997201172163841 +-0.571624000000000020982326986996 0.57626800000000000245847786573 -1.15808500000000003105071755272 +-0.571384000000000003005595772265 -0.558559999999999945430317893624 1.16684699999999996755661868519 +-0.57084000000000001406874616805 -0.644731999999999971784347962966 -1.12181200000000003136335635645 +-0.570733000000000045837111883884 -0.410328999999999999293009977919 1.22714900000000004531841568678 +-0.569888999999999978918197029998 -1.23997599999999996711608218902 -0.371059000000000027696955839929 +-0.569629999999999969695352319832 -0.176753999999999994452437590553 -1.28229499999999996262545209902 +-0.569211000000000022502888441522 1.11529900000000004034461653646 0.657348999999999961119101499207 +-0.568622999999999989562127211684 0.132923000000000013365308859647 -1.28802100000000008250822247646 +-0.568031999999999981376674895728 0.0127569999999999992429389195081 -1.29505899999999996019539594272 +-0.567311000000000009713119197841 -1.17923399999999989340437878127 0.536250000000000004440892098501 +-0.566482000000000041062264699576 -0.208938000000000012601475418705 1.27884400000000009178791060549 +-0.565298999999999995935695551452 -0.483503999999999989345411677277 -1.20277199999999995227994986635 +-0.56374400000000002286526523676 -0.186120000000000007656097977815 -1.28357000000000009976020010072 +-0.563381000000000020655477328546 -1.08566999999999991288746059581 0.709874000000000004995115432394 +-0.562896999999999980701659296756 1.29378900000000007786127298459 0.0962149999999999949729101444973 +-0.562378000000000044522607822728 0.58068699999999995320365542284 1.16040199999999993352162164229 +-0.561992000000000047066350816749 0.0217670000000000016249224188414 -1.29757100000000002992806003022 +-0.561912999999999995814903286373 1.14492199999999999526778537984 -0.611070000000000002060573933704 +-0.561485000000000011866063687194 -0.397446999999999994734878328018 -1.23562599999999989108800946269 +-0.561448999999999975862863266229 0.388004000000000015546675058431 1.23863900000000004553157850751 +-0.561205999999999982641440965381 0.497979999999999978221865148953 -1.1987760000000000637498942524 +-0.560609000000000023966606477188 0.719484000000000012420287021087 1.08076799999999995094412952312 +-0.559190999999999993619326232874 -0.304591999999999973880449033459 -1.26274700000000006383515938069 +-0.558463999999999960444085900235 0.327282999999999990592414178536 -1.25737999999999994216182130913 +-0.557316999999999951320717173076 -0.195091999999999987647214538811 -1.28504400000000007509015631513 +-0.556903000000000036884273413307 -0.570249000000000005883293852094 -1.16819300000000003691980055009 +-0.55689200000000005363887112253 -1.29776000000000002465583293088 0.0754299999999999970512476465956 +-0.556838999999999972878583776037 1.28688599999999997436361809378 -0.183998999999999995891286630467 +-0.556293000000000037452707601915 -1.25162900000000010258816018904 0.352084999999999981312726049509 +-0.556131999999999959705121455045 0.237546000000000007146283564907 -1.27839299999999989054799698351 +-0.555833000000000021501023184101 -0.798628000000000004554578936222 1.02627599999999996605026808538 +-0.555787999999999948741447042266 -1.26813400000000009448797300138 -0.287984000000000017749357539287 +-0.555427000000000004042988166475 0.141867999999999994109600720549 -1.2928170000000001049755837812 +-0.555416000000000020797585875698 0.0303509999999999995068389324615 -1.30022799999999993936228293023 +-0.553633000000000041751491153263 -0.888367000000000017756462966645 0.950944000000000011496581464598 +-0.551968000000000014182433005772 -0.931744000000000016648016298859 -0.909496999999999999886313162278 +-0.551306999999999991501908880309 -0.867748999999999992560617556592 -0.97111899999999995447552691985 +-0.550451000000000023604229681951 -0.992060999999999970633268731035 -0.844284999999999952180473883345 +-0.550371999999999972352782151575 -0.203635000000000010444978215673 -1.28671099999999993812593857001 +-0.549416000000000015468515357497 1.18841400000000008141398666339 -0.534614999999999951363349737221 +-0.548628000000000004554578936222 -0.706612000000000017863044377009 1.09531099999999992355981248693 +-0.548574000000000006060929536034 0.41772799999999998821209601374 -1.23473499999999991594279435958 +-0.548470000000000013073986337986 -0.800328999999999957104535042163 -1.02890900000000007352696229646 +-0.548329999999999984083842718974 0.0384750000000000022537527399891 -1.30301700000000009183054316964 +-0.547336000000000044707348934026 -0.266614000000000017642776128923 1.27645600000000003504396772769 +-0.546831999999999984751752890588 1.24984300000000003727507191797 0.372647999999999979259257543163 +-0.546761999999999970256681081082 -1.04846400000000006258460416575 -0.775741000000000013869794202037 +-0.545610999999999957132956751593 -0.31345400000000001039524022417 -1.26651299999999999990052401699 +-0.544275999999999982037479639985 1.18035200000000006781419870094 0.557254000000000027092994514533 +-0.543467999999999951121765207063 -0.729751000000000038525627132913 -1.08263799999999998924238298059 +-0.542937000000000002941646926047 -0.211714000000000013290701872393 -1.28856400000000004268940756447 +-0.54233699999999995799981888922 -0.974470999999999976104447796388 0.869640999999999997349675595615 +-0.542240999999999973013586895831 -0.406777999999999972935427194898 -1.24117100000000002424371814413 +-0.541703999999999963321783980064 0.149914999999999992708055174262 -1.29772200000000004216360594 +-0.54134099999999996111199607185 0.444510000000000016218137943724 1.22856100000000001415401129634 +-0.541189999999999948876450162061 0.938240999999999991665333709534 0.909294999999999964401808938419 +-0.540914000000000005918820988882 -1.10072900000000006848210887256 -0.704135999999999984133580710477 +-0.540768000000000026439295197633 -0.493516000000000010228262681267 -1.20996400000000003949196525355 +-0.540762999999999993683275079093 0.0461070000000000021489476864645 -1.30592899999999989546495271497 +-0.539793999999999996042276961816 -0.466882000000000019213075574953 1.22091900000000008752465419093 +-0.539494000000000029082514174661 -1.29128799999999999137401118787 -0.203773000000000009679368417892 +-0.537761999999999962263075303781 0.738829999999999986748377978074 -1.07932500000000008988365607365 +-0.537568999999999963534946800792 1.01701899999999989532284416782 0.822613000000000038625103115919 +-0.537278999999999951064921788202 0.810510999999999981469045451377 -1.02684099999999989272225775494 +-0.536739999999999994884092302527 0.245723999999999997978505916763 -1.28511899999999990029664331814 +-0.536321999999999965424990477914 -0.656293000000000015248247109412 -1.13209500000000007347011887759 +-0.536123000000000016207479802688 0.664232000000000044614978378377 -1.12754899999999991244692409964 +-0.53545200000000003903721790266 0.856203999999999965098140819464 0.990052999999999960856200686976 +-0.535040999999999988823162766494 -0.219297999999999992937205206545 -1.2905960000000000764686092225 +-0.534945000000000003836930773105 1.30531799999999997830002484989 -0.0998919999999999946860285149342 +-0.534807999999999950091478240211 1.29669499999999993100630035769 0.180451000000000000289546164822 +-0.534749999999999947597473237693 1.22721600000000008456879641017 -0.456050000000000010924594562312 +-0.534676999999999957857710342068 0.878994000000000053063331506564 -0.970304000000000055337068260997 +-0.533776000000000028222757464391 0.335826999999999986634691140353 -1.26582100000000008499512205162 +-0.533017999999999991800336829328 -1.29999200000000003640820978035 0.160976000000000007972289495228 +-0.532931999999999961303842610505 -1.14864900000000003110756097158 -0.629751999999999978463449679111 +-0.532743999999999995331734226056 0.053217000000000000414779322 -1.30895099999999997564259501814 +-0.532367000000000034631852940947 0.587013000000000007005951374595 -1.17132400000000003181810370734 +-0.531932999999999989171328707016 -1.15722499999999994813038028951 0.614716999999999957893237478856 +-0.531868000000000007432277016051 -0.613717999999999985760723575368 1.15778599999999998182431681926 +-0.531542999999999987714716098708 -0.321415999999999979497289359642 -1.27049400000000001220712420036 +-0.530501000000000000333955085807 0.635368000000000043847592223756 1.14667999999999992155608197208 +-0.529962999999999961886487653828 0.944007999999999958262719701452 -0.909938000000000024591884084657 +-0.52776699999999998613731122532 0.0925979999999999997539745777431 1.30877299999999996416022440826 +-0.527509000000000005670131031366 0.157034000000000006913580818946 -1.30271800000000004260414243618 +-0.527059000000000055230486850633 -0.580245000000000010764722446766 -1.17708300000000010143708095711 +-0.526716999999999990755839007761 -0.226357000000000002648548047546 -1.29279999999999994919619439315 +-0.526548000000000016029844118748 0.0360740000000000018975931936893 1.31203899999999995529265106597 +-0.526510000000000033537617127877 0.507477999999999984659382334939 -1.21047700000000002518163455534 +-0.525966999999999962334129577357 -1.23874499999999998500754827546 0.434591999999999978321341131959 +-0.525595999999999952123630464484 0.149020000000000013562484468821 1.30443200000000003591082986532 +-0.524921999999999999708677478338 1.09124200000000004528999397735 0.730512000000000050192738854093 +-0.524795000000000011475265182526 -0.32298700000000002408029331491 1.27289800000000008495248948748 +-0.524303999999999992276400462288 0.0597760000000000027431390492438 -1.31207199999999990502885793831 +-0.523159000000000040664360767551 1.00529700000000010717826626205 -0.845980999999999982996712333261 +-0.522846999999999950681228710891 -1.19203700000000001324451659457 -0.552883000000000013329781722859 +-0.522499000000000046739501158299 -0.414835000000000009290346270063 -1.24695899999999992857624420139 +-0.522409000000000012242651337147 -1.0556389999999999940172301649 0.782761000000000040088821151585 +-0.521944999999999992290611317003 -0.0203270000000000013173906410202 1.31421499999999991104004948284 +-0.521070000000000033146818623209 -1.30934499999999998109956322878 -0.118757000000000001449507180951 +-0.520182999999999950979656659911 0.772258000000000000007105427358 1.06443799999999999528199623455 +-0.520044999999999979500842073321 0.205117999999999994775734535324 1.299029999999999906989955889 +-0.518576000000000036926905977452 0.425939000000000012047252084812 -1.24485099999999992981258856162 +-0.517994999999999983231191436062 -0.232862999999999986666665563462 -1.2951660000000000394493326894 +-0.517974000000000045496051370719 1.26117499999999993498533967795 -0.375686000000000019927171024392 +-0.51785999999999998699706793559 0.499510000000000009556799795973 1.2175009999999999443787146447 +-0.517043000000000030347280244314 -0.328446000000000015717205315013 -1.27467200000000002724220848904 +-0.516871999999999998109956322878 0.25260100000000001996269816118 -1.29191199999999994929567037616 +-0.515715999999999952230211874848 -0.501906999999999992034815932129 -1.21742599999999989712762271665 +-0.51547799999999999176480969254 0.0657579999999999970095032608697 -1.31527900000000008695622000232 +-0.51428899999999999614885837218 1.06261800000000006249933903746 -0.778684999999999960529351028526 +-0.513975999999999988432364261826 -0.0763839999999999935687000629514 1.31529300000000004544631337922 +-0.513392999999999988247623150528 -0.0842419999999999974393816160045 -1.31503999999999998671285084129 +-0.513272999999999979259257543163 -0.0898100000000000009414691248821 -1.31471800000000005326228347258 +-0.513179000000000051784354582196 -0.0786840000000000039381831129504 -1.31546800000000008168399290298 +-0.512897999999999965048402827961 0.163197000000000008723688438295 -1.30778499999999997527311279555 +-0.512820000000000053574922276312 -0.0953650000000000053201887340038 -1.31450399999999989475440997921 +-0.512631999999999976580511429347 -0.0731580000000000008064660050877 -1.31600000000000005861977570021 +-0.512035000000000017905676941155 -0.100887000000000004451550239537 -1.31439799999999995527844021126 +-0.51175499999999995992538970313 -0.0676859999999999961683982974137 -1.31663400000000008205347512558 +-0.511739000000000054946269756329 1.23796400000000006436096100515 0.453396999999999994468424802108 +-0.511133999999999977248421600962 0.26067200000000001480771061324 1.29259100000000004548894594336 +-0.510940999999999978520293097972 1.31859900000000007658229606022 -0.0153899999999999991667776200188 +-0.510920999999999958518515086325 -0.106353000000000003089084543717 -1.31440000000000001278976924368 +-0.510697999999999985298870797124 -1.23072000000000003616662525019 -0.473831000000000002181366198784 +-0.510549000000000030574653919757 -0.0622889999999999971480590943429 -1.31736800000000009447376214666 +-0.50948300000000001919175929288 -0.111741999999999994108712542129 -1.31451099999999998502175913018 +-0.509021999999999974484410358855 -0.0569879999999999969917396924757 -1.31819899999999989859134075232 +-0.508912000000000031008084988571 -0.238790000000000002255973186038 -1.29768499999999997740474100283 +-0.508595000000000019291235275887 0.342720000000000024620305794087 -1.27431300000000002903277618316 +-0.50772700000000003939248927054 -0.117032999999999998141930745987 -1.31472999999999995424104781705 +-0.507176999999999988943955031573 -0.0518049999999999968847141929018 -1.31912399999999996325072970649 +-0.50704099999999996395416701489 -1.29709199999999991170795965445 0.245886999999999994459543017911 +-0.50629900000000005455547125166 0.0711409999999999959063856636021 -1.31855999999999995431210209063 +-0.505659999999999998365751707752 -0.122203000000000006064482249712 -1.3150569999999999204476353043 +-0.505564000000000013379519714363 -0.521357999999999988105514603376 1.21350299999999999833732999832 +-0.505024000000000028443025712477 -0.0467600000000000029509727994537 -1.3201380000000000336513039656 +-0.504608999999999974228614973981 1.29448300000000005027800398238 0.263973999999999986432186460661 +-0.504296999999999995267785379838 -0.812010000000000009556799795973 -1.04226899999999988999377364962 +-0.503753000000000006330935775622 -0.740253000000000049851678340929 -1.09464999999999990087928836147 +-0.503731999999999957573493247764 1.15968200000000010163603292312 0.633556000000000008043343768804 +-0.503390000000000004121147867409 1.11574499999999998678390511486 -0.708315999999999945657691569068 +-0.503288999999999986378895755479 -0.127234000000000013752554650637 -1.31548899999999990839683050581 +-0.502850000000000019184653865523 -0.88056199999999995586819068194 -0.985774999999999956834528802574 +-0.502670999999999978946618739428 -0.131874999999999992228438827624 1.31526800000000010371081771154 +-0.502643999999999979699794039334 -0.849719000000000002081890215777 1.01258399999999992857624420139 +-0.502569000000000043471004573803 -0.0418730000000000004978240042419 -1.3212379999999999125037675185 +-0.502337999999999951228346617427 -0.421588000000000018285817304786 -1.25296500000000010643930181686 +-0.502167999999999947746687212202 -0.334517000000000008785860927674 -1.27903300000000008651568350615 +-0.501221000000000027618796138995 -0.665575000000000027711166694644 -1.14271100000000003227285105822 +-0.500635999999999969922725995275 -0.758762999999999965261565648689 1.0833479999999999776605363877 +-0.500623999999999957921659188287 -0.132106000000000001204369937113 -1.31602599999999991808863342158 +-0.500589999999999979429787799745 -1.32223399999999990939159033587 -0.0332739999999999980229148377475 +-0.499823000000000017273293906328 -0.0371640000000000025881519150062 -1.32241999999999992887467215041 +-0.499502999999999974800601876268 -0.244115999999999999658939486835 -1.30034800000000005937295100011 +-0.49941999999999997505994997482 -0.945639000000000007339906460402 -0.925390000000000045865533593314 +-0.499153999999999986592058576207 1.29015699999999999825206487003 -0.293837999999999988087751034982 +-0.498946000000000000618172180111 -0.37783600000000000518340925737 1.26818499999999989569232639042 +-0.498900000000000010125233984581 0.315460999999999991416643752018 1.28513900000000003132072379231 +-0.497927999999999981728393549929 0.168377999999999999891642232797 -1.31290400000000007096900844772 +-0.497674999999999978506082243257 -0.136798000000000002929212428171 -1.31666400000000005654499091179 +-0.496804999999999996607158436746 0.0759029999999999982485121563514 -1.32190199999999991042898273008 +-0.496796999999999988606447232087 -0.0326489999999999974678033254349 -1.3236790000000000500079977428 +-0.496711000000000013621104244521 -0.588269999999999959605645472038 -1.18626100000000000989075488178 +-0.496607000000000020634161046473 0.258147999999999988585130950014 -1.29874599999999995603161551117 +-0.496533999999999975383246919591 -1.26454500000000003012701199623 -0.392909999999999981490361733449 +-0.495427999999999979507947500679 -0.937722999999999973219644289202 0.935536000000000034226843581564 +-0.495369999999999977013942498161 0.687775000000000025224267119484 1.13206600000000001671196514508 +-0.494454999999999977866593781073 -1.13064900000000001512034941697 0.690757999999999983131715453055 +-0.494454999999999977866593781073 -0.14129300000000000192557081391 -1.31740300000000010172129805142 +-0.494018000000000012672529692281 -1.0069840000000001012381289911 -0.861353000000000035285552257847 +-0.493564000000000002721378677961 -1.22097199999999994624033661239 0.515383999999999953267604269058 +-0.493503000000000024982682589325 -0.0283489999999999991997512438502 -1.32501000000000002110311925207 +-0.492495000000000016093792964966 0.595141999999999948833817597915 -1.18459099999999994956567661575 +-0.491775000000000017674750552032 0.673273000000000010345502232667 -1.14230499999999990379251357808 +-0.491271000000000013230305739853 0.51466199999999995284838405496 -1.22220100000000009288214641856 +-0.491099999999999980992981818417 0.552790000000000003588240815589 1.20550500000000004874323167314 +-0.490976000000000023515411839981 -0.145572000000000006947331598894 -1.31823800000000002086153472192 +-0.490505000000000024318325131389 1.16446899999999997632471604447 -0.635152000000000049872994623001 +-0.490240999999999982339460302683 -0.508642999999999956273200041323 -1.22513099999999997002930740564 +-0.489953000000000027380764322515 -0.0242789999999999984992005153117 -1.32640699999999989167065450602 +-0.489804000000000017145396213891 -0.248818000000000011384670983716 -1.30314299999999994028598848672 +-0.489171000000000022467361304734 -0.666235000000000021636026303895 1.14753799999999994696509020287 +-0.48911399999999999321786958717 0.748747000000000051400661504886 -1.09551099999999990153298767837 +-0.488107999999999986329157763976 0.432151000000000007350564601438 -1.25498799999999999243982529151 +-0.488076999999999983081977461552 -0.186580999999999996852295680583 1.31414199999999992130028658721 +-0.487250999999999989675814049406 -0.149620000000000002993161274389 -1.3191660000000000607656147622 +-0.487165999999999987934984346793 0.98613499999999998379962562467 0.888935999999999948428808238532 +-0.487032000000000020456525362533 0.080023999999999997911892535285 -1.32529099999999999681676854379 +-0.486976999999999993207211446133 -0.339604999999999990212273814905 -1.28355799999999997673683083121 +-0.486665999999999987490895136943 -1.06435499999999994003019310185 -0.7939169999999999838280473341 +-0.486605000000000009752199048307 0.905467000000000021842083697265 0.971258999999999983465670538862 +-0.486161999999999983046450324764 -0.0204550000000000009592326932761 -1.32786599999999999077715528983 +-0.48492099999999999093702740538 1.32667500000000004867217739957 0.0691719999999999973772091266255 +-0.484522999999999981479703592413 0.821266000000000051528559197322 -1.04439400000000004453681867744 +-0.483389999999999986357579473406 0.369269000000000013894663197789 1.27670400000000006102141014708 +-0.483296000000000003371525281182 -0.153418999999999999817035245542 -1.32018499999999994187760421482 +-0.483018999999999976147080360533 0.347934000000000021035617692178 -1.28282300000000004658318175643 +-0.482659000000000004693134769695 0.172556999999999988171239806434 -1.31805299999999991911181496107 +-0.482144000000000017003287666739 -0.016893999999999999295230423968 -1.32938000000000000611066752754 +-0.481835999999999986531662443667 -0.427009000000000027430502314019 -1.2591650000000000897415475265 +-0.480410000000000003694822225953 -1.29338099999999989186960647203 -0.310437999999999991729282555752 +-0.479854999999999976001419099703 -0.252879000000000020431656366782 -1.30605900000000008098766102194 +-0.479376000000000024314772417711 -1.02144100000000004335731773608 0.852558999999999955754503844219 +-0.479125000000000023092638912203 -0.15695600000000001217337342041 -1.32128899999999993575272583257 +-0.479063000000000016598278307356 -1.28907400000000005313438578014 0.329828000000000010061285138363 +-0.478561000000000014154011296341 1.06287899999999990718890785502 0.800791999999999948300910546095 +-0.478364000000000011425527191022 1.31404699999999996506971911003 -0.210830999999999990635046742682 +-0.478134000000000003449684982115 -1.32990600000000003255706815253 0.0523419999999999996376232047623 +-0.478020000000000000461852778244 0.890544000000000002259525899717 -0.989155000000000006465938895417 +-0.477916000000000007474909580196 -0.0136080000000000003040900864448 -1.33094299999999998718180904689 +-0.477393999999999985028864557535 -1.11752500000000010160761121369 -0.723347999999999990983212683204 +-0.477019000000000026329161073591 0.0834899999999999947730700000648 -1.32871399999999995067412328353 +-0.476621999999999990116350545577 0.822201999999999988411047979753 1.04728899999999991443644375977 +-0.476024000000000002685851541173 0.26234400000000002162181544918 -1.30559399999999992125765402307 +-0.475683000000000022478019445771 1.20859699999999992137134086079 -0.559479999999999977333686729253 +-0.474756000000000011329603921695 -0.160214999999999996305177774047 -1.3224739999999999273683215506 +-0.474625999999999992340349308506 1.22119899999999992346033650392 0.532356999999999969119812703866 +-0.47349400000000002597388970571 -0.0106110000000000006398215290915 -1.33254999999999990123455972935 +-0.472418999999999977834619357964 1.28716300000000005709921424568 0.346457000000000014949819160393 +-0.471528999999999975933917539805 -0.343689999999999995505817196317 -1.28822999999999998621547092625 +-0.470248999999999972576603113339 -0.240285999999999999587885213259 1.3119179999999999175486209424 +-0.470204999999999984083842718974 -0.163184999999999996722621631307 -1.3237360000000000237463382291 +-0.46989300000000000512301312483 -0.430943000000000020488499785642 1.26233499999999998486543972831 +-0.469694000000000000394351218347 -0.256282000000000009798384326132 -1.30908599999999997187671851862 +-0.469629999999999991899812812335 0.956308000000000046902925987524 -0.930011999999999949828577427979 +-0.468895999999999979479525791248 -0.00791399999999999916033832647599 -1.33419400000000010209078027401 +-0.468177999999999983060661179479 -0.573541999999999996262545209902 1.2049309999999999742925638202 +-0.467150000000000009681144774731 0.1757189999999999863167232661 -1.32321299999999997254462869023 +-0.466805999999999998717470361953 0.0862860000000000015862866575844 -1.33215900000000009306688752986 +-0.466237999999999985778487143762 -1.16628500000000001612932010175 -0.649923999999999946197704048245 +-0.465980000000000005311306949807 -0.594292000000000042447823034308 -1.19569199999999997707789134438 +-0.465677000000000007595701845275 -0.672540000000000026680879727792 -1.15361800000000003230127276765 +-0.465490999999999988112620030734 -0.165853000000000000424549284617 -1.3250699999999999700861508245 +-0.464666999999999996706634419752 0.421883999999999981245224489612 1.26731900000000008432721188001 +-0.46444400000000002348699013055 -0.513697999999999987963406056224 -1.23304700000000000414956957684 +-0.464139999999999997015720509808 -0.0055279999999999999277244810969 -1.33586800000000005539391167986 +-0.46353600000000000358468810191 -0.74813399999999996570210214486 -1.10699100000000005827871518704 +-0.462390999999999996461497175915 -1.31711200000000006049560852261 -0.22674099999999999810462725236 +-0.46119999999999999884536805439 1.13443399999999994243182754872 0.707357000000000013528733688872 +-0.461166000000000020353496665848 0.604137999999999952827067772887 1.19262000000000001342925770587 +-0.461075000000000012612133559742 -0.431078000000000016722623286114 -1.26553599999999999425881469506 +-0.460631999999999985906384836198 -0.168208999999999997410071728154 -1.32647000000000003794298208959 +-0.459565000000000001278976924368 -0.82077599999999995006305653078 -1.05599500000000001698197138467 +-0.459386999999999989796606314485 1.01829700000000000770228325564 -0.86719900000000005313438578014 +-0.459361999999999992549959415555 -0.259014000000000021994850385454 -1.31221100000000001628563950362 +-0.459243000000000012317258324401 -0.00346299999999999993244292895156 -1.33756600000000003269917669968 +-0.459214999999999984314769108096 -1.19838099999999991851495906303 0.594141999999999947945639178215 +-0.458984000000000003094413614235 1.24795600000000006524203399749 -0.481601000000000001310951347477 +-0.457291000000000003034017481696 0.436336999999999974875208863523 -1.26510699999999998155431057967 +-0.45715000000000000079936057773 0.351447999999999982634335538023 -1.29131700000000004813216492039 +-0.457123000000000001552535877636 0.737702999999999997626787262561 1.11661600000000005294964466884 +-0.456986000000000003318234576 1.3295159999999999200781530817 0.153460999999999986309617838742 +-0.456432999999999977625009250914 0.0884000000000000063504757008559 -1.33560999999999996390442902339 +-0.455886999999999986687981845535 -0.346754999999999979909404146383 -1.29303100000000004143885234953 +-0.455685000000000006714628852933 1.33275000000000010125233984581 -0.126992999999999994775734535324 +-0.455647999999999997466915147015 -0.170243000000000005433875571725 -1.3279309999999999725162069808 +-0.455627000000000004220623850415 0.519503999999999965808683555224 -1.23390399999999988978061082889 +-0.45520500000000002627231765473 0.265172000000000018804513501891 -1.31242999999999998550492819049 +-0.455025000000000012789769243682 -1.09961200000000003385025593161 0.764071999999999973418596255215 +-0.454226999999999991874943816583 -0.00172700000000000001947053629436 -1.33928099999999994373922618252 +-0.453790999999999999925393012745 -1.33232799999999995677057995636 0.137750000000000011324274851177 +-0.453780999999999989924504006922 -0.890178000000000024805046905385 -1.00083300000000008367351256311 +-0.453241999999999978232523289989 -1.21044200000000001793409865058 -0.573934000000000055230486850633 +-0.452164999999999983604226372336 0.600620999999999960472507609666 -1.19783200000000000784439180279 +-0.451463999999999976431297454837 0.177850000000000008082423619271 -1.32836400000000010024336916103 +-0.45055800000000001404032445862 -0.171947999999999989739762895624 -1.32944799999999996309441030462 +-0.449670999999999987384313726579 -0.807718000000000047045034534676 1.07022799999999995712585132424 +-0.449259999999999992681409821671 -0.29277900000000001146105432781 1.30860500000000001818989403546 +-0.449195000000000010942358130706 -1.27596799999999999108979409357 0.412466999999999972548181403909 +-0.449110999999999982446041713047 -0.000326999999999999979485160173098 -1.34100700000000006006928288116 +-0.448898999999999992471799714622 -0.261064999999999991509014307667 -1.31542200000000009119105470745 +-0.44733099999999997864463807673 1.07626800000000000245847786573 -0.800962999999999980538234467531 +-0.446917999999999981941556370657 0.67936700000000005417177817435 -1.15703299999999997815791630273 +-0.446562999999999987732479667102 -0.897272999999999987252863320464 0.997738000000000013756107364316 +-0.446207000000000020278889678593 -0.956067000000000000170530256582 -0.941718999999999972772002365673 +-0.445940999999999976299847048722 0.0898260000000000030651037263851 -1.33905500000000010629719326971 +-0.445381000000000026872726266447 -0.173316999999999998838262627032 -1.33101300000000000167688085639 +-0.444344999999999989981347425783 0.0939500000000000057287508070658 1.33930199999999999249666871037 +-0.443913999999999975276665509227 0.000733000000000000036075309406414 -1.34273599999999992959942574089 +-0.443462999999999996081356812283 -0.715903999999999984815701736807 1.13614400000000004276046183804 +-0.443220999999999976104447796388 0.0418289999999999981272758020623 1.34231300000000008942890872277 +-0.442803000000000002156497203032 0.473098999999999991761256978862 1.25702099999999994395238900324 +-0.44254599999999999493383029403 -1.33564499999999997115196492814 -0.142148999999999997578825627897 +-0.442342999999999986204812785218 0.145978999999999997649879901473 1.33529900000000001369926394545 +-0.44047399999999997666222384396 1.2823890000000000011226575225 -0.40182200000000001249844672202 +-0.440139999999999975699438437005 -0.174343999999999998973265746827 -1.33262199999999997324096057127 +-0.440137000000000000454747350886 -0.433777000000000023671731241848 -1.27205199999999996052224560117 +-0.440110000000000001207922650792 -0.348789000000000015688783605583 -1.29794000000000009364953257318 +-0.439906999999999992478905141979 0.755431999999999992390087300009 -1.1116669999999999607354084219 +-0.438977000000000006085798531785 -0.0101799999999999998129274203507 1.3443199999999999594280097881 +-0.438657000000000019124257732983 0.00144699999999999993557930899613 -1.34446200000000004592948243953 +-0.438456000000000012395418025335 -1.24982299999999990625099144381 -0.495680999999999982730258807351 +-0.438425999999999982392751007865 -0.517052999999999984837018018879 -1.24114400000000002499689344404 +-0.438363999999999975898390403017 1.27476300000000009049472282641 0.427570999999999978857800897458 +-0.438346000000000013407941423793 -0.262425000000000019362289549463 -1.31870599999999993379162788187 +-0.437748000000000025977442419389 -0.482099999999999972999376041116 1.25537100000000001465139121137 +-0.437224000000000001531219595563 0.197708999999999995855759493679 1.33031799999999988948218287987 +-0.436871000000000009322320693173 -1.01818300000000006022560228303 -0.878889999999999949054085846001 +-0.435661000000000020460078076212 0.178941999999999989956478430031 -1.33348399999999989162802194187 +-0.435641000000000000458300064565 1.19961399999999995813482200901 0.609215999999999979763742885552 +-0.435371000000000007990053063622 0.0905559999999999976072473373279 -1.34247999999999989562127211684 +-0.434985999999999983778309342597 -0.59828800000000004200018111078 -1.20533800000000002050626335404 +-0.43485299999999998954436364329 -0.175024999999999986144416652678 -1.33426700000000009183054316964 +-0.434840999999999977543296836302 0.951358000000000036955327686883 0.951751000000000013656631381309 +-0.434450999999999976086684227994 -0.983211999999999974875208863523 0.918992000000000031079139262147 +-0.434232000000000006867395541121 0.266622000000000025643487333582 -1.31922500000000009201528428093 +-0.433508999999999977692510810812 1.12999099999999996768451637763 -0.731566999999999967307928727678 +-0.43336200000000002496847173461 0.00181299999999999994146349102664 -1.34617699999999995696953192237 +-0.431628000000000011660006293823 -0.0618720000000000033835156898476 1.34531399999999989880450357305 +-0.431209000000000008956391184256 1.34619500000000003048228336411 -0.042652000000000002410960320276 +-0.431161000000000016463275187562 0.828516000000000030212277124519 -1.06191400000000002457056780258 +-0.431088999999999999968025576891 0.35324899999999997968203047094 -1.29976000000000002643218977028 +-0.430310999999999999054978161439 1.03032100000000004236255790602 0.867912000000000016797230273369 +-0.430099999999999982325249447968 0.869120000000000003659295089165 1.02939000000000002721378677961 +-0.42982799999999998785682464586 -0.677162000000000041666226024972 -1.16477399999999997604049895017 +-0.42964400000000002588507186374 -0.086937000000000000388133969409 -1.34456200000000003491607003525 +-0.429543000000000008142819751811 -0.175358999999999987107202059633 -1.33594199999999996286703662918 +-0.429007000000000027206681352254 0.248935999999999990617283174288 1.32437999999999989064747296652 +-0.428174999999999972288833305356 0.653352000000000043833381369041 1.17889599999999994395238900324 +-0.428049000000000012811085525755 0.00182899999999999989669374755863 -1.34787600000000007405276392092 +-0.427783000000000024343194127141 -0.623226999999999975443643052131 1.19523599999999996512656252889 +-0.427746000000000015095480421223 -0.263089999999999990532018045997 -1.32204999999999994741983755375 +-0.427657000000000009354295116282 -1.32949300000000003585398644645 0.222616000000000008318679078911 +-0.427248000000000016651569012538 1.32711000000000001186606368719 0.237144999999999994688693050193 +-0.426244999999999985007548275462 0.438483000000000011642242725429 -1.2751660000000000216857642954 +-0.425810999999999995058175272789 -1.0762799999999999034372422102 -0.81259199999999998098587639106 +-0.42519000000000001238120717062 -0.343851999999999990986765396883 1.30421600000000004193623226456 +-0.424765000000000003677058657559 0.0905890000000000028546054409162 -1.34587100000000003952038696298 +-0.424261999999999972477127130333 -0.349783999999999983820941906743 -1.30293999999999998706812220917 +-0.424229000000000022740920258002 -0.175341999999999997861266365362 -1.33764100000000007995026862773 +-0.423053000000000012370549029583 -1.17105999999999998983923887863 0.670555000000000012150280781498 +-0.422974999999999989874766015419 -0.753363000000000004874323167314 -1.11961400000000010912515335804 +-0.422738000000000002653877118064 0.00149599999999999993399724118603 -1.34955200000000008486722435919 +-0.421941000000000010494716207177 -1.28427000000000002266631327075 -0.415470000000000005968558980385 +-0.421204000000000022829738099972 -0.113041000000000002589928271846 1.3452910000000000145803369378 +-0.420953999999999994852117879418 -1.34890700000000007818812264304 -0.0569959999999999980535569932272 +-0.420713000000000003630873379734 0.898329999999999961879382226471 -1.00797000000000003261391157139 +-0.420225999999999988432364261826 1.3117620000000000946016598391 -0.320456000000000018612666963236 +-0.41980400000000001048405806614 0.178991000000000011205258942937 -1.33855400000000002158628831239 +-0.419719000000000008743228363528 0.521985999999999950027529393992 -1.24553899999999995173993738717 +-0.419103999999999976555642433595 -0.43509700000000001152145046035 -1.27868800000000004679634457716 +-0.418933999999999973073983028371 -0.174975999999999992651211755401 -1.33935699999999990872368016426 +-0.417976999999999987434051718083 1.17925499999999994216182130913 -0.659282999999999952400742131431 +-0.417885000000000006448175327023 0.522711000000000036713743156724 1.24585100000000004172306944383 +-0.417725999999999986211918212575 0.299458000000000001961097950698 1.31750900000000004119726781937 +-0.417553000000000007485567721233 -1.25782700000000002837907686626 0.493478000000000027736035690396 +-0.417451999999999989743315609303 0.000814000000000000053373971908854 -1.35119699999999998141220203252 +-0.417140999999999984026999300113 -0.26305800000000001404032445862 -1.32544100000000009131895239989 +-0.416847000000000023067769916452 1.1047089999999999410107420772 0.778367000000000031079139262147 +-0.415910999999999975162978671506 0.78495499999999995832666854767 1.10039200000000003676348114823 +-0.414451999999999987078780350203 -0.826591999999999993420374266861 -1.07003500000000006942002528376 +-0.414165000000000005364597654989 0.0899240000000000039293013287534 -1.34921500000000005314859663486 +-0.41380000000000000115463194561 -1.06423399999999990228616297827 0.834372000000000002550848421379 +-0.413677000000000016921575252127 -0.174262000000000000232702745961 -1.3410830000000000250537368629 +-0.4131870000000000264783750481 0.266687000000000007382539024547 -1.32595400000000007700862170168 +-0.413069999999999992734700526853 -1.13013000000000007894129794295 -0.743087000000000053034909797134 +-0.412291000000000018577139826448 -0.518692999999999959648278036184 -1.24938900000000008283507213491 +-0.412210000000000020836665726165 -0.000213000000000000000313984949152 -1.3528050000000000352429196937 +-0.411536000000000012910561508761 0.603428999999999993164578881988 -1.21099599999999996136068602937 +-0.408604000000000022740920258002 0.964597999999999955456075895199 -0.950048000000000003595346242946 +-0.408480999999999982996712333261 -0.173202999999999995850430423161 -1.34281199999999989458387972263 +-0.408405999999999991256771636472 -0.349735000000000018083312625095 -1.30800999999999989498178365466 +-0.407745000000000024087398742267 -0.163486999999999993438137835255 1.34425299999999992017762906471 +-0.407034000000000006913580818946 -0.00158200000000000007283063041541 -1.35437099999999999155875229917 +-0.406571000000000015717205315013 -0.262326999999999976864728523651 -1.32886600000000010268763617205 +-0.40503099999999997438138166217 1.35432599999999991879917615734 0.0418559999999999973741005021566 +-0.40493899999999999339550527111 0.353329999999999977422504571223 -1.30812200000000000699174051988 +-0.404293000000000013471890270011 -0.896557999999999966078689794813 -1.0162340000000000816982037577 +-0.403955999999999981753262545681 0.177996999999999988562038311102 -1.34355399999999991500487794838 +-0.403851999999999988766319347633 -0.60024200000000005328359975465 -1.21516000000000001790567694115 +-0.403760000000000007780442956573 -1.31364900000000006663469775958 -0.333620000000000027640112421068 +-0.40361200000000002630073936416 0.088563000000000002831512802004 -1.35249899999999989574916980928 +-0.403424000000000004817479748453 0.349075999999999997402966300797 1.30973099999999997855582023476 +-0.403364000000000000323296944771 -0.171802000000000010260237104376 -1.34453700000000009318057436758 +-0.402639999999999997903898929508 -0.531104000000000020520474208752 1.2473209999999999020303675934 +-0.402579000000000020165202840872 1.25733099999999997642419202748 0.50699899999999997746158442169 +-0.401942999999999994731325614339 -0.00328699999999999999122923810546 -1.3558870000000000644035935693 +-0.401729000000000002756905814749 0.682490000000000041069370126934 -1.17167400000000010429346275487 +-0.400795000000000012363443602226 1.22386400000000006293987553363 -0.584397000000000055308646551566 +-0.399836000000000024723334490773 -1.32141099999999989123011800984 0.306601999999999985657694878682 +-0.39869999999999999884536805439 -1.17951999999999990187404819153 -0.67064900000000005064748620498 +-0.398347999999999979880982436953 -0.170065999999999994951593862424 -1.34625299999999992195398590411 +-0.398318999999999978633979935694 1.3359570000000000611350969848 -0.237826000000000009615419571674 +-0.398137000000000018662404954739 -0.393303999999999986947329944087 1.29876799999999992252242009272 +-0.398058999999999996166621940574 -0.435031999999999974271247538127 -1.28541700000000003178968199791 +-0.397701999999999999957367435854 -1.3568450000000000787991893958 0.0283820000000000009776623954849 +-0.396959000000000006291855925156 -0.00532100000000000020877743978076 -1.35734799999999999897681846051 +-0.39607799999999998563637859661 -0.260902000000000022783552822148 -1.33231100000000002303579549334 +-0.395936000000000010157208407691 -0.85328300000000001368505309074 1.05600300000000002498268258933 +-0.395824000000000009169554004984 1.31946600000000002772537754936 0.319892999999999982918552632327 +-0.395093000000000027505109301273 0.438578999999999996628474718818 -1.28512599999999999056399246911 +-0.394936000000000009269029987991 1.17329499999999997683630681422 0.683671000000000028684610242635 +-0.394923999999999997267963181002 -0.762527999999999983593568231299 1.12364799999999998014743596286 +-0.394882999999999984019893872755 1.02706000000000008398615136684 -0.88837699999999997224620074121 +-0.39381800000000000139266376209 -0.679421999999999970398789628234 -1.17613499999999993050892044266 +-0.393452000000000023938184767758 -0.168001000000000011436185332059 -1.34795099999999989925925092393 +-0.393149000000000026222579663226 0.0865130000000000065618621647445 -1.35570999999999997065458501311 +-0.392602999999999979774401026589 -0.348642999999999980698106583077 -1.31312999999999990841104136052 +-0.392539000000000026791013851835 -0.9629860000000000086473050942 -0.958420999999999967400299283327 +-0.392259000000000024321877845068 0.700238000000000027078783659817 1.16438799999999997858424194419 +-0.392154000000000002579270130809 0.265367000000000019532819806045 -1.33258999999999994123811575264 +-0.392100000000000004085620730621 -0.00767699999999999979638509728375 -1.35874899999999998456701177929 +-0.391305999999999987171150905851 -0.21301100000000000589395199313 1.34220199999999989515231391124 +-0.390336999999999989530152788575 0.758858000000000032514435588382 -1.12772899999999998144062374195 +-0.390010999999999996568078586279 0.570524999999999948840923025273 1.23385300000000008857625743985 +-0.388695000000000012718714970106 -0.165616000000000013203660387262 -1.34962500000000007460698725481 +-0.38818000000000002502886786715 0.17596300000000000829381008316 -1.34846299999999996721555817203 +-0.387811000000000016818546555442 -0.941103000000000022851054382045 0.98179899999999997728394873775 +-0.38738600000000000811439804238 -0.0103450000000000000288657986403 -1.36008299999999993090682437469 +-0.386158000000000001250555214938 0.397594000000000002970068635477 1.30107700000000003903721790266 +-0.38614199999999998524913280562 -0.518611999999999961907803935901 -1.25775100000000006339462288452 +-0.385705000000000020055068716829 -0.258786999999999989263699262665 -1.33576199999999989387333698687 +-0.385220999999999980101250685038 -1.13911800000000007493383691326 0.744322000000000039143799313024 +-0.384539999999999992930099779187 -0.670217999999999980431653057167 1.18445599999999995333155311528 +-0.38426399999999999446131937475 -1.23472200000000009723066796141 0.57254099999999996661870227399 +-0.384097000000000021735502286901 -0.162919000000000008254730232693 -1.35126900000000005341860287444 +-0.383985999999999993992361169148 -1.33784499999999995090149695898 -0.25045400000000000995115101432 +-0.3836879999999999735216249519 0.522097000000000033281821743003 -1.25705899999999992644461599411 +-0.382834999999999980868636839659 -0.013313999999999999446220755317 -1.36134500000000002728484105319 +-0.382817000000000018378187860435 0.0837809999999999943653961054224 -1.35883500000000001506350599811 +-0.382755999999999985128340540541 -1.22425500000000009315215265815 -0.59556500000000001104893954107 +-0.382230000000000014193091146808 -0.755920000000000036344260934129 -1.13246800000000003016964456037 +-0.382031000000000009464429240325 1.26364300000000007173639460234 -0.507205000000000016946444247878 +-0.380798999999999998600230810553 0.912827999999999972757791510958 1.01080999999999998628652519983 +-0.380363999999999979895193291668 0.993697000000000052466475608526 0.93160600000000004516920171227 +-0.379674999999999984723331181158 -0.15992200000000000859046167534 -1.35287500000000004973799150321 +-0.379603999999999996983746086698 1.08546900000000001718092335068 -0.823200000000000042810199829546 +-0.379236000000000017529089291202 -1.02561400000000002563638190622 -0.896826000000000012057910225849 +-0.378803999999999974068742858435 0.351690000000000002611244553918 -1.31636700000000006482991921075 +-0.378466000000000024616753080409 -0.0165739999999999984559018173513 -1.36253000000000001890043677122 +-0.377404000000000017234214055861 0.832231000000000054050985909271 -1.07933199999999995810640029958 +-0.377253999999999978243181431026 1.35711200000000009602274531062 0.126199000000000005616840326184 +-0.377085999999999976761699826966 -0.433582000000000022943424937694 -1.29221199999999991625543316331 +-0.376915999999999973280040421741 -0.346511999999999986687981845535 -1.3182799999999998963318148526 +-0.375491999999999992443378005191 -0.255991000000000024083846028589 -1.33920599999999989648813425447 +-0.375446999999999975194953094615 -0.156635999999999997456257005979 -1.35443899999999994854249507625 +-0.374840000000000006519229600599 1.35488000000000008427036846115 -0.154257000000000005224265464676 +-0.374296000000000017582379996384 -0.0201099999999999994038102357763 -1.36363400000000001277555838897 +-0.372879999999999989235277553234 -1.35942800000000008076028734649 0.11364799999999999902122738149 +-0.372699999999999975752729142187 -0.600145999999999957275065298745 -1.22511999999999998678390511486 +-0.372655999999999987259968747821 0.0803780000000000049986681460723 -1.3618609999999999882192014411 +-0.372537000000000007027267656667 0.172896999999999995134558616883 -1.35326300000000010470557754161 +-0.371950999999999976086684227994 -0.261415999999999981717735408893 1.33914700000000008728306966077 +-0.371896999999999977593034827805 0.829343999999999970107467106573 1.0834580000000000321591642205 +-0.37142900000000000915179043659 -0.153073999999999987853271932181 -1.35595299999999996387600731396 +-0.371215999999999990421883921954 0.262668000000000012583711850311 -1.33910599999999990750154665875 +-0.370941999999999993953281318682 -1.02465600000000001124078607972 0.901378000000000012548184713523 +-0.370850000000000012967404927622 1.07062499999999993782751062099 0.846304999999999973958608734392 +-0.370769000000000015226930827339 0.603554999999999952642326661589 -1.22403100000000009117684385274 +-0.370437000000000016264323221549 -1.30811300000000008125766726153 0.389378999999999975134556962075 +-0.370340000000000002522426711948 -0.0239100000000000006972200594646 -1.36465199999999997615418578789 +-0.369134000000000017660539697317 -0.829435999999999951093343497632 -1.0843320000000000735695948606 +-0.368205000000000004511946372077 -0.440939000000000025369928380314 1.29228399999999998826183400524 +-0.367638000000000020328627670096 -0.149250999999999994782839962681 -1.35741200000000006298250809778 +-0.366615000000000024193980152631 -0.0279569999999999992124077863309 -1.36558099999999993379162788187 +-0.365997000000000016761703136581 0.444821000000000021934454252914 1.2915810000000000901110297491 +-0.365478999999999998316013716249 -0.252525999999999972711606233133 -1.34262999999999999012345597293 +-0.365300999999999986833643106365 -1.26415900000000003267075499025 -0.518129999999999979465314936533 +-0.36520599999999997509192439793 1.23493800000000009120526556217 0.584424999999999972288833305356 +-0.364707000000000003403499704291 -0.577760999999999969034547575575 1.23821699999999990104981861805 +-0.364435999999999982179588187137 -1.08419299999999996231281329528 -0.831691999999999986847853961081 +-0.364088000000000022726709403287 -0.145181000000000004490630090004 -1.35880899999999993355004335172 +-0.363958999999999976981968075052 0.436624999999999985345056074948 -1.29494899999999990569676810992 +-0.363136000000000014331646980281 -0.0322370000000000017648105199441 -1.36641600000000007497646947741 +-0.362980999999999998095745468163 0.902320000000000010942358130706 -1.02667599999999992199661846826 +-0.362837999999999993860910763033 1.30661599999999999965893948684 0.401378000000000012548184713523 +-0.362825999999999981859843956045 1.13959300000000007813127922418 -0.754773999999999944954254260665 +-0.362707000000000001627142864891 0.0763169999999999959516827630068 -1.36477800000000004665423603001 +-0.362696999999999991626253859067 -1.35675900000000004830269517697 -0.166299000000000002374989094278 +-0.361760000000000025988100560426 1.29843599999999992355981248693 -0.428012000000000003563371819837 +-0.361408000000000007023714942989 -0.343349999999999988542498385868 -1.32344100000000008954259556049 +-0.360794000000000003591793529267 -0.140880000000000005222489107837 -1.36013999999999990464516486099 +-0.360080999999999984417797804781 -0.516811000000000020371260234242 -1.2661949999999999594280097881 +-0.359916000000000013692158518097 -0.036732000000000000761168905683 -1.36715399999999998037480963831 +-0.359291000000000027014834813599 0.616350999999999982215115323925 1.22107399999999999273825324053 +-0.359169000000000016026291405069 0.0949330000000000034932057246806 1.36454600000000003667821601994 +-0.358144999999999991135979371393 0.0474180000000000018145485114474 1.3672910000000000341202621712 +-0.357787999999999994926724866673 -0.679309999999999969411135225528 -1.18765600000000004499156602833 +-0.357767999999999974924946855026 -0.136365999999999987224441611033 -1.36139900000000002577849045338 +-0.357343999999999994976462858176 0.142361999999999988553156526905 1.36089600000000010560086138867 +-0.357090000000000018509638266551 0.16881199999999998984101523547 -1.35793600000000003191757969034 +-0.356966999999999978765430341809 -0.0414240000000000024860113967407 -1.36779300000000003656452918221 +-0.356385999999999980580867031676 0.68262999999999995903721128343 -1.18617200000000000414956957684 +-0.356267000000000000348165940522 -0.430754000000000025760726884982 -1.29904799999999998050270733074 +-0.35570699999999999540989392699 -0.248404000000000013681500377061 -1.34601900000000007651124178665 +-0.355022000000000004238387418809 -0.131655999999999995253574525123 -1.36257999999999990237142810656 +-0.35458099999999997953281649643 -0.899676999999999948975926145067 -1.0319169999999999731699062977 +-0.354302000000000005819345005875 -0.0462950000000000028155255904494 -1.36833000000000004625633209798 +-0.354275000000000006572520305781 6.99999999999999989499501959478e-06 1.36911999999999989263699262665 +-0.353559000000000012153833495177 0.744609999999999994102495293191 1.14915300000000009106315701501 +-0.353007999999999988460785971256 0.0716139999999999971036501733579 -1.36757299999999992756727351662 +-0.352787000000000017241319483219 0.348335999999999978982145876216 -1.32446400000000008567724307795 +-0.352677000000000018253842881677 0.189518999999999993022470334836 1.35635599999999989506704878295 +-0.352671999999999985497822763136 1.14234499999999994379606960138 0.755426999999999959634067181469 +-0.352567999999999992510879565089 -0.126768999999999992800425729911 -1.36368099999999992100185863819 +-0.351932000000000022588153569814 -0.0513259999999999966258101835592 -1.36876200000000003420552729949 +-0.350455000000000016502355038028 0.258599000000000023291590878216 -1.34547700000000003406341875234 +-0.350414000000000003254285729781 -0.121723999999999998866684336463 -1.3646949999999999914024328973 +-0.349882000000000026318502932554 1.36845599999999989471177741507 -0.0700790000000000024016344468691 +-0.349864000000000008316902722072 -0.0564969999999999986095566839595 -1.36908800000000008267875273305 +-0.349756000000000011329603921695 -0.308510999999999979692688611976 1.33509999999999995345945080771 +-0.349457999999999990858867704446 -1.20674299999999989907450981264 0.649344999999999950013318539277 +-0.348569000000000017713830402499 -0.116541000000000005698552740796 -1.36562000000000005606182185147 +-0.348196999999999978747666773415 -1.13849399999999989496757279994 -0.763275999999999954503948629281 +-0.348107999999999973006481468474 -0.0617870000000000016426859872354 -1.36930700000000005189804141992 +-0.347988000000000019529267092366 1.35454199999999991277377375809 0.210044000000000008476774837618 +-0.34767799999999998705746406813 0.519836999999999993526955677225 -1.26842000000000010295764241164 +-0.347575999999999996070698671247 -0.0471149999999999971600495030088 1.37002599999999996605026808538 +-0.347127000000000018875567775467 0.9688470000000000137418965096 -0.969968000000000052374105052877 +-0.347042000000000017134738072855 -0.111241000000000006542322239511 -1.36645100000000008222400538216 +-0.346669999999999978168574443771 -0.0671759999999999996012078895546 -1.36941899999999994186339336011 +-0.34658600000000000518340925737 -1.35664600000000001855937625805 0.198466000000000003522515612531 +-0.346403999999999989700683045157 -1.29907200000000000450484094472 -0.438649999999999984368059813278 +-0.346212000000000019728219058379 -0.243642999999999998461674977079 -1.3493610000000000326281224261 +-0.346138999999999974477304931497 -0.339170000000000027018387527278 -1.32858999999999993768540207384 +-0.345868999999999982009057930554 -1.10268000000000010452083643031 0.815150999999999958944840727781 +-0.345837000000000005517364343177 -0.105843999999999993644195228626 -1.36718500000000009464429240325 +-0.345557000000000003048228336411 -0.0726419999999999982387421937347 -1.36942099999999999937472239253 +-0.345187000000000021593393739749 0.236218000000000011295853141746 1.35094300000000000494537744089 +-0.344959000000000015617729332007 -0.100372000000000002883915328766 -1.36781899999999989603338690358 +-0.344772000000000022890134232512 -0.0781639999999999973701036992679 -1.36931500000000005989875262458 +-0.344617000000000006654232720393 1.1892210000000000835740365801 -0.683369000000000004213518423057 +-0.344411999999999995925037410416 -0.0948459999999999997521982209037 -1.36835100000000009501377462584 +-0.344318000000000012938983218191 -0.0837200000000000027489122089719 -1.36909999999999998365751707752 +-0.344198000000000003950617610826 -0.0892880000000000062509997178495 -1.3687789999999999679403117625 +-0.343745999999999995999644397671 -0.80592500000000000248689957516 1.11010100000000000441957581643 +-0.343598999999999987764454090211 0.0662890000000000007007727731434 -1.3702360000000000095354835139 +-0.343019000000000018335555296289 0.490568999999999977301712306144 1.28127999999999997449151578621 +-0.341899000000000008459011269224 0.163724000000000008414602348239 -1.36246099999999992213872701541 +-0.341654000000000013237411167211 -0.597999999999999976019182668097 -1.23517900000000002691535883059 +-0.341463000000000016509460465386 -0.755793999999999965844210692012 -1.14550299999999993794119745871 +-0.340596999999999983099741029946 0.759012000000000019994672584289 -1.14363199999999998190958194755 +-0.34006100000000000216360263039 1.32810399999999995124255747214 -0.347129000000000020875745576632 +-0.339975000000000027178259642824 -1.3703199999999999825206487003 -0.0814870000000000038742342667319 +-0.339641000000000026215474235869 -0.895279000000000046988191115815 1.04072999999999993292476574425 +-0.339575000000000015720758028692 -1.28965400000000007807443580532 0.470617999999999980786924425047 +-0.338629000000000013326229009181 -0.966369000000000033523406273162 -0.975428999999999990500043622887 +-0.338617999999999974569675487146 -0.714328999999999991743493410468 1.17263399999999995415578268876 +-0.338073000000000012388312597977 -0.0937619999999999981232789991736 1.37000499999999991729282555752 +-0.337033000000000027007729386241 -0.238259999999999999564792574347 -1.35264199999999989998400451441 +-0.335683999999999982399856435222 -0.426557999999999992724042385817 -1.30589599999999994572874584264 +-0.335513999999999978918197029998 -0.486568999999999973748998627343 1.28478800000000004111200269108 +-0.334903000000000006242117933652 0.282274000000000024890312033676 1.34467899999999995763744209398 +-0.334515999999999980030196411462 0.0603619999999999989892529583813 -1.37275499999999994749089182733 +-0.334210999999999980314413505766 -0.513295999999999974505726640928 -1.27468800000000004324363089836 +-0.3329650000000000109601216991 0.432630000000000014548362514688 -1.30459400000000003139177806588 +-0.331168999999999991157295653466 -0.333988999999999980339282501518 -1.33370799999999989360333074728 +-0.330585000000000017728041257214 -1.18830199999999996940402979817 -0.691846999999999989761079177697 +-0.330023999999999984034104727471 0.60099800000000003219469135729 -1.23688500000000001222133505507 +-0.329952999999999996294519633011 0.253178000000000014146905868984 -1.35167700000000001736566446198 +-0.329901999999999973045561318941 1.03155100000000010673772976588 -0.909432000000000018147261471313 +-0.32891500000000001291411422244 0.953150999999999970491160183883 0.991623999999999949928053410986 +-0.328419999999999989714893899873 1.28860799999999997567101672757 0.481279000000000012349232747511 +-0.328207000000000026496138616494 -0.232277000000000011237233366046 -1.35584900000000008191136657842 +-0.32702399999999998136956946837 0.15765299999999998759037111995 -1.36682100000000006367883997882 +-0.326990000000000002877698079828 0.343281000000000002803091092574 -1.33237999999999989775290032412 +-0.326620000000000021422863483167 -0.981033999999999961616481414239 0.964826999999999990187404819153 +-0.326390999999999986691534559213 1.20767099999999993897858985292 0.659545000000000047890580390231 +-0.326141000000000014225065569917 -1.32885999999999993015364907478 -0.357439000000000006718181566612 +-0.325846999999999997754684954998 0.660008999999999956820317947859 1.20756400000000008176925803127 +-0.325805000000000011262102361798 -0.139748000000000011100453889412 1.36905900000000002592059900053 +-0.325795000000000001261213355974 0.0538550000000000000932587340685 -1.37512100000000003774403012358 +-0.325255000000000016324719354088 0.870693999999999967975838899292 1.06587999999999993860910763033 +-0.325046999999999974839681726735 1.2341549999999998910027443344 -0.609267000000000003012701199623 +-0.324809000000000014374279544427 -0.354111999999999982335907589004 1.33007699999999995377208961145 +-0.324099000000000025956126137316 -0.621889000000000025103474854404 1.22809400000000001895728019008 +-0.323790999999999995484500914245 -0.829296000000000033125502341136 -1.09882999999999997342570168257 +-0.323543000000000025018209726113 1.37663099999999993805488429643 0.0143750000000000006245004513517 +-0.323463000000000000522248910784 0.832397999999999971265651765862 -1.09657899999999997042721133766 +-0.323388999999999982026821498948 1.03231500000000009364953257318 0.910903000000000018232526599604 +-0.321879999999999999449329379786 -0.676829000000000013947953902971 -1.19928999999999996717292560788 +-0.321865999999999985448084771633 0.327506000000000019323209698996 1.33758799999999999918998128123 +-0.3213400000000000145128353779 -1.02924700000000002297895207448 -0.915092000000000016513013179065 +-0.319767000000000023440804852726 -0.225718000000000001969979734895 -1.35897000000000001129762949859 +-0.318925000000000014033219031262 -1.34851100000000001521982539998 0.282499999999999973354647408996 +-0.31746999999999997443822508103 0.0467969999999999983208986975569 -1.37732499999999991047161529423 +-0.317348999999999992205346188712 1.34662700000000001843147856562 0.293061000000000015930368135741 +-0.317315999999999986957988085123 0.534658999999999995367261362844 1.27021600000000001173816599476 +-0.317020000000000023998580900297 1.35253099999999992775201462791 -0.264876000000000000333955085807 +-0.316558000000000006046718681318 -0.327826999999999979529263782752 -1.33877599999999996605026808538 +-0.315912999999999999367616965174 -1.37847199999999991959498402139 0.00364599999999999993538501996682 +-0.315419000000000004924061158817 -0.421011000000000024101609596983 -1.31272999999999995246469097765 +-0.313273000000000023668178528169 -1.17400299999999990774313118891 0.723586999999999980204279381724 +-0.312524000000000024002133613976 0.150623000000000006881606395837 -1.3709999999999999964472863212 +-0.312226999999999976775910681681 0.786294000000000048444803724124 1.13325000000000009059419880941 +-0.311829999999999996074251384925 0.515216000000000007297273896256 -1.27957600000000004669686859415 +-0.311748000000000025089263999689 -0.218608999999999997765343096034 -1.36199200000000009147527180176 +-0.31166800000000000059330318436 -1.23341999999999996084909525962 -0.617686999999999986066256951744 +-0.311375000000000012878587085652 1.09018400000000004190781055513 -0.845307000000000030581759347115 +-0.311068000000000011162626378791 0.679787000000000030119906568871 -1.20046900000000000829913915368 +-0.310836999999999974431119653673 -0.593813000000000035250025121059 -1.24529800000000001602984411875 +-0.310819000000000011940670674448 -0.184894000000000002792432951537 1.36718899999999998762234554306 +-0.309792000000000011805667554654 0.246425000000000005151434834261 -1.35768299999999997318411715241 +-0.309574999999999989075405437688 0.039211999999999996857624751101 -1.37935699999999994425081695226 +-0.309016000000000012892797940367 1.10688699999999995426946952648 0.824201999999999990187404819153 +-0.308636000000000021437074337882 -0.508082000000000033601565974095 -1.28319800000000006079403647163 +-0.30737399999999998057020889064 -1.26610399999999989617549545073 0.550000999999999962142283038702 +-0.306126000000000009215739282808 0.371734999999999982112086627239 1.32969899999999996431654381013 +-0.305151999999999978818721046991 -1.06189000000000000056843418861 0.882762999999999964373387228989 +-0.305053999999999991832311252438 0.9024990000000000511803932568 -1.04519800000000007145217750804 +-0.304840999999999973102404737801 -0.899523999999999990251353665371 -1.047820999999999891372226557 +-0.304591000000000000635935748505 -1.35340299999999991165111623559 -0.274818000000000006721734280291 +-0.304194999999999993178789736703 1.27421800000000007280220870598 -0.532761000000000040088821151585 +-0.30418099999999997917754512855 -0.210976999999999997870148149559 -1.36490399999999989510968134709 +-0.302783000000000024343194127141 -1.08806200000000008465406153846 -0.851141999999999954162888116116 +-0.302362999999999992883914501363 -0.320707999999999993079313753697 -1.34377199999999996649080458155 +-0.302234000000000002650324404385 0.426607000000000013972822898722 -1.31402499999999999857891452848 +-0.302140000000000019664270212161 0.031133000000000000950794998289 -1.38121000000000004881428594672 +-0.301514999999999977475795276405 0.336544000000000009809042467168 -1.34008499999999997065458501311 +-0.300835000000000019060308886765 -0.752986000000000044174441882205 -1.15866699999999989145749168529 +-0.300192000000000014381384971784 -0.53001500000000001389111048411 1.27631099999999997329780399014 +-0.298455999999999999072741729833 0.142661000000000010023981644736 -1.37498100000000000875388650456 +-0.297209000000000000962785406955 -0.398036999999999974164666127763 1.32409700000000007946709956741 +-0.297094999999999997974953203084 -0.202853000000000005531575197892 -1.3676930000000000475779415865 +-0.295926999999999995605293179324 1.37937400000000010003020634031 0.0987719999999999986872722956832 +-0.295551000000000008149925179168 -0.414134000000000002117417352565 -1.31952300000000000146371803567 +-0.295194999999999985185183959402 0.0225909999999999999698019337302 -1.3828769999999999118500682016 +-0.293175000000000018918200339613 -0.229020000000000001350031197944 1.3644039999999999501767433685 +-0.292727000000000014967582728787 1.37162000000000006139089236967 -0.181577999999999989411136880335 +-0.292704999999999992965626915975 1.2655149999999999455013721672 0.559281000000000028116176054027 +-0.291619000000000017092105508709 1.144514999999999949054085846 -0.777846000000000037388758755696 +-0.291520999999999974594544482898 -1.27367099999999999759836555313 -0.541090999999999988645527082554 +-0.290885000000000004671818487623 0.755892000000000008341771717824 -1.15931600000000001315925146628 +-0.290603999999999973447017964645 -1.38118399999999996730082330032 0.0887639999999999956825647018377 +-0.290519000000000027217339493291 -0.194268999999999997241317828411 -1.37034999999999995701216448651 +-0.290198999999999984744647463231 -0.755386000000000001897149104479 1.1598170000000000978701564236 +-0.290129999999999999005240169936 -0.845922999999999980502707330743 1.09555399999999991678123478778 +-0.290049999999999974509279354606 0.238367999999999996552091374724 -1.36347100000000009956124813471 +-0.290005000000000012772005675288 -1.33505300000000004523315055849 0.365418999999999993821830912566 +-0.289810999999999985288212656087 0.701327000000000033708147384459 1.19337800000000004985167834093 +-0.289463000000000025835333872237 0.595768999999999993022470334836 -1.24950800000000006306777322607 +-0.28898899999999999588240484627 0.576917000000000013137935184204 1.25843199999999999505462255911 +-0.288766999999999995907273842022 0.0136189999999999991620036610129 -1.38435100000000010922462934104 +-0.288640000000000007673861546209 -0.312659999999999993480770399401 -1.34867699999999990367882674036 +-0.287746999999999975017317410675 0.414787000000000016797230273369 1.3210429999999999672866124456 +-0.286287999999999986933119089372 1.17563799999999996082067355019 0.732061999999999990507149050245 +-0.286235000000000017195134205394 -0.671985999999999972231989886495 -1.21099299999999998611599494325 +-0.285457999999999989526600074896 1.33339699999999994339816566935 0.374919999999999975504039184671 +-0.285440000000000027036151095672 0.969037999999999954958695980167 -0.989692000000000016157741811185 +-0.28487600000000001809752347981 0.133799000000000001264766069653 -1.37874699999999994481925114087 +-0.284689000000000025369928380314 -0.966202000000000005286437954055 -0.992676000000000002820854660968 +-0.284478999999999981884712951796 -0.185258000000000006002309760333 -1.37286200000000002674482857401 +-0.283453999999999983749887633167 -0.501190000000000024371615836571 -1.29169000000000000483169060317 +-0.28303099999999997704591692127 -1.14258299999999990426147178368 -0.783834999999999948450124520605 +-0.282880999999999993566035527692 0.00425299999999999983613108156533 -1.38562600000000002431477241771 +-0.282142000000000003900879619323 1.30925300000000000011368683772 -0.454152000000000000135003119794 +-0.28183799999999997742960999858 -1.37260500000000007503331289627 -0.191112000000000004096278871657 +-0.281007999999999980023090984105 -0.933540999999999954184204398189 1.02446900000000007402434221149 +-0.280976000000000003531397396728 -0.663312000000000012711609542748 1.21699200000000007371170340775 +-0.280368999999999979344522671454 -0.587601999999999957680074658128 -1.25543500000000007865708084864 +-0.278998999999999997001509655092 -0.175857000000000013306689083947 -1.37522100000000002673061771929 +-0.278602000000000016299850358337 -0.826172000000000017472245872341 -1.1134720000000000172946101884 +-0.277561999999999975408115915343 -0.0054710000000000001685318551381 -1.38669700000000006845368716313 +-0.276461999999999985533349899924 0.328152999999999972491337985048 -1.34754799999999996806820945494 +-0.276285000000000002806643806252 0.508249999999999979571896346897 -1.29048399999999996445865235728 +-0.276168000000000024574120516263 0.908842999999999956450835725263 1.04772799999999999265298811224 +-0.276158999999999987817744795393 -0.405955999999999983529619385081 -1.32624900000000001121236437029 +-0.275851000000000012857270803579 -1.13662899999999988942533946101 0.7949720000000000119655396702 +-0.275444000000000022154722501 -0.303715999999999985980991823453 -1.3534720000000000084128259914 +-0.274652000000000007240430477395 0.989931000000000005378808509704 0.971906999999999965389463341126 +-0.27409899999999998154720515231 -0.166101999999999999646504988959 -1.37741800000000003123545866401 +-0.273959999999999981312726049509 -1.23755799999999993588062352501 0.627213000000000020506263354036 +-0.272942000000000017934098650585 -0.271953000000000000291322521662 1.36071499999999989682919476763 +-0.272830000000000016946444247878 -0.0155130000000000007470690732703 -1.38755999999999990457411058742 +-0.272575999999999984968468424995 0.0955399999999999999245048343255 1.3844039999999999679403117625 +-0.271886000000000016552093029532 0.418582000000000009620748642192 -1.32320299999999990703258845315 +-0.271836999999999995303312516626 0.124072000000000001729283383156 -1.38228400000000006819789177825 +-0.271654999999999979820586304413 0.0528209999999999998965272141049 1.38687200000000010469136668689 +-0.270934999999999981401543891479 0.138183000000000000273558953268 1.3811230000000001005844296742 +-0.270805999999999991167953794502 0.229036999999999990595966892215 -1.36901699999999992840571394481 +-0.270712999999999981426412887231 1.19432899999999997397992501647 -0.707315000000000027036151095672 +-0.270222999999999990983212683204 -1.30889400000000000190425453184 -0.462357999999999991214139072326 +-0.269799999999999984279241971308 -0.156032000000000004025224598081 -1.37944299999999997474731117109 +-0.26955299999999998705746406813 0.8290149999999999463895505869 -1.11358700000000010454925813974 +-0.268701999999999996404653757054 -0.0258339999999999993252064456328 -1.38821200000000000152056145453 +-0.268427000000000026691537868828 0.8251249999999999973354647409 1.11674300000000004118305696466 +-0.268176000000000025469404363321 0.0101930000000000006710187960834 1.38851600000000008350298230653 +-0.267280000000000017568169141668 1.38529499999999994308552686562 -0.0975629999999999969473307714907 +-0.267143000000000019333867840032 1.37667199999999989579180237342 0.182779999999999998028243908266 +-0.267062999999999994837907024703 -0.440114000000000005208278253122 1.31718500000000005023537141824 +-0.266799999999999981614706712207 0.456492000000000008874678769644 1.31165299999999995783639406 +-0.266739999999999977120523908525 0.180580999999999991523225162382 1.37704099999999995951327491639 +-0.266118999999999994443555806356 -0.145687000000000010935252703348 -1.38128800000000007131006896088 +-0.265954999999999996962429804626 0.673969999999999958006924316578 -1.21450900000000006073719305277 +-0.265197000000000016051160400821 -0.0363940000000000027369218003059 -1.38864900000000002222577677458 +-0.264699000000000017607248992135 1.03175299999999992017762906471 -0.930279999999999995807797859015 +-0.264147000000000020669688183261 -1.37844499999999992034815932129 0.173531999999999991812771327204 +-0.264141999999999987913668064721 1.06706100000000003724665020854 0.889724999999999988098409176018 +-0.263411999999999979493736645964 -1.0290680000000000937632194109 -0.933613000000000026190605240117 +-0.263230999999999992766674949962 -1.01690999999999998060218331375 0.946891999999999955939244955516 +-0.263068999999999997285726749396 -0.135107000000000004868994096796 -1.38294600000000000861177795741 +-0.262826000000000004064304448548 -0.293910000000000004583000645653 -1.3581380000000000674020839142 +-0.262378999999999973358200122675 -0.571104999999999973780973050452 1.26688500000000003886668764608 +-0.262328000000000005620393039862 -0.0471499999999999974686915038546 -1.38887000000000004895639449387 +-0.262162000000000006139089236967 -1.19259500000000007169376203819 -0.713432999999999983842258188815 +-0.262153000000000024893864747355 -0.0321730000000000002091660178394 1.3893310000000000936637434279 +-0.260664000000000006806999408582 -0.124334000000000000074606987255 -1.38441199999999997594102296716 +-0.260504000000000013326229009181 -0.747507000000000032535751870455 -1.17190900000000008951417385106 +-0.260104999999999975113240680002 -0.0580610000000000014974688156144 -1.38887500000000008171241461241 +-0.260004999999999986126653084284 0.222566999999999987069898566006 1.37217400000000000481747974845 +-0.259940000000000004387601393319 -1.31632600000000010709300113376 0.446896000000000015450751789103 +-0.259390999999999982694731670563 0.113517999999999993909760576116 -1.38557899999999989404386724345 +-0.258975000000000010746958878372 1.33912000000000008803624496068 -0.373750999999999999889865875957 +-0.258911999999999975496933757313 -0.113410999999999997922550676321 -1.38567799999999996529709278548 +-0.258767000000000024773072482276 -0.492644999999999999573674358544 -1.30013099999999992562038642063 +-0.258537999999999990041743558322 -0.0690830000000000055138116294984 -1.38866299999999998071587015147 +-0.258149999999999990585308751179 0.617175000000000029132252166164 1.24597500000000005471179065353 +-0.257973000000000007858602657507 -1.38638900000000009349321317131 -0.106651999999999996804334045919 +-0.257819999999999993622878946553 -0.102380999999999999783284465593 -1.38674000000000008370193427254 +-0.257633000000000000895283847058 -0.0801729999999999942694728360948 -1.38823500000000010778933301481 +-0.257392999999999982918552632327 -0.0912869999999999931494798488529 -1.38759300000000007635492238478 +-0.257319999999999993178789736703 -0.396508000000000027096547228211 -1.33288000000000006473044322775 +-0.25583600000000000784794451647 1.23742700000000005466915808938 0.635075999999999973866238178744 +-0.255269999999999996909139099444 -0.896097999999999950127005376999 -1.06388199999999999434407982335 +-0.253608999999999973340436554281 -0.0741119999999999973239184214435 1.38931300000000002015099198616 +-0.252439999999999997726263245568 1.31490499999999999047872734081 0.455299999999999982502885131908 +-0.252134999999999998010480339872 0.218469999999999997530863993234 -1.37429899999999993731591985124 +-0.251931000000000016036949546105 0.318141000000000007119638212316 -1.35473899999999991550225786341 +-0.251323999999999991850074820832 0.740141000000000048864023938222 1.17856999999999989547916356969 +-0.250995999999999996887822817371 -0.664802000000000004042988166475 -1.22271799999999997154986886017 +-0.250836999999999976651565702923 -0.283281000000000005023537141824 -1.36265600000000008940048701334 +-0.250759000000000009666933920016 0.263975999999999988432364261826 1.36654199999999992343191479449 +-0.250371000000000010210499112873 -0.579390999999999989356069818314 -1.26555100000000009252687505068 +-0.250199999999999977973175191437 -0.313522000000000022890134232512 1.35613500000000009038103598868 +-0.249245999999999995333510582896 0.587887000000000048416382014693 -1.26184999999999991615595718031 +-0.248737999999999986888710168387 1.23942899999999989191223903617 -0.633991999999999999992894572642 +-0.247858999999999995988986256634 -1.33895199999999992002130966284 -0.381801000000000001488587031417 +-0.247587000000000001520561454527 0.102180000000000006932232565759 -1.38861799999999990795629400964 +-0.247157999999999988816057339136 0.898866000000000053837823088543 -1.06346300000000004715161594504 +-0.24505499999999999505284620227 1.13896500000000000518696197105 0.80169000000000001371347480017 +-0.243369000000000001993072373807 0.496684000000000014374279544427 1.30156699999999991845811564417 +-0.242913999999999991041832458905 1.09039599999999992085975009104 -0.867195999999999966867392231507 +-0.242578999999999989078958151367 -0.115458000000000005069722419648 1.38846099999999994523136592761 +-0.242042000000000007142730851228 0.408586999999999977983833332473 -1.33209299999999997154986886017 +-0.241397000000000000463629135083 0.74951199999999995604582636588 -1.17471700000000001118394266086 +-0.241184000000000009489298236076 0.498968000000000022620127992923 -1.30109999999999992326138453791 +-0.241096000000000004748201831717 -1.08787100000000003241495960538 -0.870866000000000028968827336939 +-0.240776999999999991031174317868 1.39350400000000007594280759804 -0.0131629999999999993537391773657 +-0.240259000000000000341060513165 -1.23790099999999991808863342158 -0.640216000000000007297273896256 +-0.239523000000000013676171306543 -0.271870999999999973795183905168 -1.36700899999999991862864590075 +-0.239473999999999992427390793637 -0.793227000000000015411671938637 1.1460550000000000459010607301 +-0.239464000000000010182077403442 -1.20412800000000008715517196833 0.701949999999999962874142056535 +-0.239107999999999987217336183676 -0.385826999999999975532460894101 -1.33939000000000008050449196162 +-0.239036999999999999477751089216 0.304642999999999997129407347529 1.36016699999999990389198956109 +-0.23734099999999999641708825493 -1.09476900000000010315659437765 0.863221000000000016072476682893 +-0.237304999999999988169463449594 1.36853800000000003223021849408 0.266066000000000024705570922379 +-0.236648999999999998244959442673 -1.37026699999999990176036135381 0.257616000000000011649348152787 +-0.236470999999999986762588832789 0.0901010000000000005337952302398 -1.3913889999999999869118028073 +-0.235506999999999994122035218425 -0.701867000000000018644641386345 1.20495599999999991602805948787 +-0.234786999999999995702992805491 1.36370199999999996975930116605 -0.291874999999999995559107901499 +-0.234670999999999990714982800455 -0.482482999999999995210941960977 -1.30848800000000009546852197673 +-0.234492000000000005988098905618 -0.480177000000000020474288930927 1.30936800000000008736833478906 +-0.234287999999999996258992496223 -0.882363000000000008427036846115 1.0800670000000001103046542994 +-0.234111999999999986776799687505 0.20670900000000000384936527098 -1.37929799999999991300114743353 +-0.23374500000000000832223179259 -0.820077999999999973645969930658 -1.12819899999999995188204593433 +-0.233089999999999991642241070622 -1.39470300000000002604849669297 -0.0217700000000000011557421686348 +-0.230930999999999997385202732403 -0.962486999999999981447729169304 -1.01009400000000004737898962048 +-0.229105000000000003090860900556 -0.15604799999999999227107139177 1.3867799999999999016608853708 +-0.22892999999999999460875699242 -0.259724999999999983657517077518 -1.37118000000000006544098596351 +-0.22884999999999999786837179272 -1.29240500000000002600586412882 0.526610000000000022524204723595 +-0.228018999999999999461763877662 0.30654700000000001391953219354 -1.36162999999999989597654348472 +-0.226088000000000011180389947185 0.0773289999999999949631401818806 -1.39388099999999992562038642063 +-0.225782000000000010464518140907 1.27963699999999991341326222027 -0.558167999999999997484678715409 +-0.225038999999999989043431014579 -0.353565000000000018154366898671 1.35068499999999991345589478442 +-0.224920000000000008810729923425 0.655275999999999969602981764183 1.23289300000000001666933258093 +-0.224886000000000002563282919255 0.344409000000000020680346324298 1.35307400000000010997780464095 +-0.224831000000000003069544618484 0.943640999999999952052576190908 1.02907400000000004425260158314 +-0.224516999999999994352961607547 -1.36372699999999991149479683372 -0.299736999999999975674569441253 +-0.223787000000000013688605804418 0.965169000000000054662052662025 -1.00914199999999998347277596622 +-0.222331000000000000849098569233 0.860948999999999964316543810128 1.09969800000000006434675015043 +-0.222224000000000004861888669438 -0.609675999999999995715427303367 1.25654700000000008053291367105 +-0.221594000000000013184120462029 -0.373956000000000010619061185935 -1.34575399999999989475440997921 +-0.221223000000000002973621349156 0.665205000000000046256332097983 -1.22823600000000010545875284151 +-0.220961999999999991750598837825 -0.569212000000000051258552957734 -1.27560699999999993536903275526 +-0.2206319999999999947881690332 -0.73937900000000000844124770083 -1.18517500000000008952838470577 +-0.22027099999999999457855892615 -0.967915999999999998593125383195 1.00728299999999992841992479953 +-0.220171000000000005591971330432 1.1447350000000000580513415116 -0.800691000000000041580960896681 +-0.219097999999999987208454399479 -0.24689099999999999934807703994 -1.37515100000000001223554590979 +-0.218426000000000009038103598868 1.2912239999999999273683215506 0.533882999999999996454391748557 +-0.218224000000000001309174990638 1.02302300000000001567457275087 0.951736000000000026410873488203 +-0.217957000000000011841194691442 1.20445599999999997109512150928 0.70836399999999999366195879702 +-0.217827999999999993852028978836 -1.14238200000000000855493453855 -0.804682000000000008377298854612 +-0.217545999999999989382715170905 0.535205999999999959548802053177 1.29082399999999997142197116773 +-0.217406999999999989148236068104 -1.27832199999999995831956312031 -0.564471999999999973773867623095 +-0.216806999999999999717559262535 0.193798999999999999044320020403 -1.38399300000000002874855908885 +-0.216478000000000003755218358492 0.0639160000000000005915268275203 -1.39608400000000010265921446262 +-0.216299999999999992272847748609 -0.6553050000000000263611354967 -1.23441899999999993298160916311 +-0.215885999999999994569677141953 0.822096000000000048935078211798 -1.13028799999999995939958807867 +-0.213324999999999986854959388438 1.39621299999999992635935086582 0.071289000000000005141664871644 +-0.213241999999999987114307486991 -0.195721000000000006080469461267 1.38427699999999997970689946669 +-0.212819000000000008165912390723 0.396658999999999983820941906743 -1.34065999999999996283861491975 +-0.211262000000000005339728659237 -0.470743000000000022531310150953 -1.31672699999999998077271357033 +-0.210539000000000003920419544556 0.776298999999999961296737183147 1.16320000000000001172395514004 +-0.210068000000000004723332835965 -0.233418999999999987604581974665 -1.37890800000000002256683728774 +-0.209671999999999997266186824163 1.382902999999999993363530848 -0.208847000000000004860112312599 +-0.209530999999999995031529920197 0.577385000000000037090330806677 -1.27386099999999991005950050749 +-0.208360999999999990661692095273 0.383116000000000012093437362637 1.3452910000000000145803369378 +-0.208216000000000012182255204607 -1.35668000000000010807355010911 0.34068300000000001359623524877 +-0.207679000000000002490452288839 0.0499119999999999980344611572036 -1.39799099999999998367172793223 +-0.207286999999999999033661879366 -1.39751099999999994771826550277 0.0631970000000000031725733151688 +-0.206665999999999988601118161569 0.487406999999999979156228846477 -1.31138200000000004763478500536 +-0.206529999999999991366905760515 1.35500200000000003974776063842 0.348302000000000000490274487674 +-0.206063999999999997170263554835 -0.889413000000000009137579581875 -1.08003800000000005354650056688 +-0.205681000000000002714273250604 -1.02507799999999993367794104415 -0.952319000000000026595614599501 +-0.204848000000000002307487534381 -0.360941000000000011826983836727 -1.35194600000000009210054940922 +-0.204819000000000001060485033122 0.29341699999999998338395812425 -1.36819399999999991024424161878 +-0.204023000000000009901413022817 -1.165945999999999926899363345 0.773916000000000048331116886402 +-0.202855000000000007531752999057 1.09779699999999991177901392803 0.868153999999999981262988058006 +-0.201934000000000002383870878475 1.31479600000000007575806648674 -0.48014000000000001122657522501 +-0.201873999999999997889688074793 -0.219364000000000003431921413721 -1.38243500000000008043343768804 +-0.20028899999999999481659074263 0.179792000000000007364775456153 -1.38836599999999998900079845043 +-0.200287999999999993816501842048 -1.38311800000000006960476639506 -0.216489999999999988000709549851 +-0.19972599999999998687805202735 0.0353749999999999967248420773558 -1.39959199999999994723509644245 +-0.199623999999999995891286630467 -0.51806700000000005523759227799 1.30067599999999994331290054106 +-0.199532999999999988149923524361 1.02766299999999999315036802727 -0.950838999999999989753973750339 +-0.197894999999999987583265692592 -1.04858899999999999330668742914 0.928062000000000053567816848954 +-0.197559000000000012375878100102 -0.391921999999999992603250120737 1.34438400000000002343369942537 +-0.196856000000000003202771381439 -1.26338200000000000500222085975 0.604245000000000032081004519569 +-0.196558000000000010487610779819 1.19455700000000009097789188672 -0.731025000000000035882408155885 +-0.195051000000000002154720846193 -0.234321000000000001506350599811 1.38095999999999996532551449491 +-0.194548999999999999710453835178 -0.20477999999999998981259352604 -1.38571800000000000530064880877 +-0.193701000000000012057910225849 -1.19238400000000011047518455598 -0.735322999999999948883555589418 +-0.19369700000000000805755462352 -1.31369599999999997486099800881 -0.48650100000000001676525585026 +-0.192650999999999988920862392661 0.020362000000000001626032641866 -1.40088199999999996059329987474 +-0.192326999999999997958965991529 0.739895999999999998131272604951 -1.18977500000000002700062395888 +-0.192257000000000011219469797652 -0.557105999999999990102139690862 -1.28556200000000009353584573546 +-0.189529000000000003023359340659 0.420611999999999985888621267804 1.33684899999999995401367414161 +-0.189522999999999997022825937165 0.891434999999999977404741002829 -1.08139899999999999913313786237 +-0.189432999999999990281551731641 0.571906000000000025451640794927 1.27946800000000004970956979378 +-0.189429999999999987281285029894 0.691066999999999986847853961081 1.21923800000000004395417363412 +-0.189398000000000010789591442517 -0.811038000000000036671110592579 -1.14295499999999994322763541277 +-0.188935999999999992837729223538 -0.346835000000000004405364961713 -1.35794299999999990014032391628 +-0.188630999999999993121946317842 -0.457471000000000016516565892744 -1.32481599999999999361932623287 +-0.18812200000000001143263261838 -0.189724000000000003751665644813 -1.38874600000000003596767328418 +-0.187873000000000012210676914037 -0.737402000000000001911359959195 1.19203299999999989822185852972 +-0.18664300000000000334665628543 -0.827702999999999966540542573057 1.1314020000000000187867499335 +-0.186481000000000007865708084864 0.00493099999999999961952656946096 -1.40185599999999999099031811056 +-0.185030000000000000026645352591 1.39341200000000009495693120698 0.155459000000000013841372492607 +-0.184906999999999988038013043479 0.0957699999999999940225592354182 1.39879799999999998583177784894 +-0.18462200000000000832400814943 0.164744000000000001548983163957 -1.39239899999999994228971900156 +-0.18433199999999999585398313684 0.382846999999999992869703646647 -1.34887000000000001342925770587 +-0.184093000000000006632916438321 0.0580149999999999971267428122701 1.40097999999999989206855843804 +-0.183730000000000004423128530107 1.39664600000000005408651304606 -0.124993999999999993999466596506 +-0.183548999999999989940491218476 1.26244599999999995709742961481 0.610360000000000013642420526594 +-0.183457000000000008954614827417 0.133458999999999994301447259204 1.39589800000000008317613264808 +-0.1826180000000000025472957077 -0.17425699999999999523225824305 -1.39150499999999999189981281233 +-0.182424000000000002819078304128 0.278801999999999994273025549774 -1.37440600000000001656985659793 +-0.182284000000000001584510300745 -0.643531999999999992922994351829 -1.24604899999999996218491560285 +-0.181375000000000008437694987151 -0.728632999999999975138109675754 -1.19841400000000009029577086039 +-0.18124000000000001220357148668 -0.0108570000000000003309574836408 -1.40250999999999992340349308506 +-0.181018000000000012228440482431 0.0203400000000000004407585407762 1.40243300000000004068567704962 +-0.180665999999999993264054864994 -1.39480500000000007254641332111 0.147913999999999989931609434279 +-0.179885999999999990350829648378 -0.645576999999999956436624870548 1.24533999999999989150012424943 +-0.179748999999999992116528346742 0.170930999999999999605648781653 1.39229000000000002756905814749 +-0.1796179999999999998827604486 -1.08362200000000008515144145349 -0.890785999999999966725283684355 +-0.179216999999999987425169933886 1.16673200000000010234657565888 0.778857000000000021522339466173 +-0.178961000000000008958167541095 -1.33773900000000001142552719102 0.422404999999999974935604996062 +-0.178057999999999994056310015367 -0.15843899999999999650412974006 -1.39398399999999988985166510247 +-0.177569000000000004613198711922 -0.955238000000000031519675758318 -1.02761400000000002741273874562 +-0.177290000000000003144151605738 1.34476499999999998813393631281 -0.400218000000000018179235894422 +-0.177050000000000012922996006637 0.653523999999999993804067344172 -1.24159599999999992192556419468 +-0.176949999999999996180832795289 -0.026938000000000000139221967288 -1.40284100000000000463273863716 +-0.176440999999999986735943480198 -0.915102999999999999758415469842 1.06369899999999995010568909493 +-0.175694999999999990070165267753 -0.0171040000000000011470824290427 1.40315300000000009461587069381 +-0.175269000000000008121503469738 -1.39705199999999996052224560117 -0.132389000000000006673772645627 +-0.174940000000000012159162565695 1.33611900000000005661604518536 0.429163999999999989931609434279 +-0.174604000000000009196199357575 -0.27169599999999999306865561266 1.37684199999999989927346177865 +-0.174492000000000008208544954869 1.08610199999999990083665579732 -0.888782999999999989704235758836 +-0.174462000000000005961453553027 -0.142332999999999987306154025646 -1.39617499999999994386712387495 +-0.174121999999999998998134742578 0.893626000000000031420199775312 1.08217999999999991977972513268 +-0.173919999999999991269206134348 -0.331691000000000013603340676127 -1.36372000000000004327205260779 +-0.173797000000000007036149440864 0.208039000000000001699973495306 1.38798899999999991727861470281 +-0.17362700000000000355449003564 -0.0432509999999999977804421291694 -1.40284800000000009490008778812 +-0.172865999999999991887378314459 0.473611999999999977450926280653 -1.32129099999999999326405486499 +-0.172169999999999989714893899873 1.23966500000000001691091711109 -0.658474000000000003751665644813 +-0.171842999999999995752730796994 -0.126003000000000003888445121447 -1.3980680000000000884341488927 +-0.171444999999999986295406984027 0.974948000000000036813219139731 1.00999100000000008314771093865 +-0.171283999999999991814547684044 -0.0597299999999999983724130458995 -1.40253099999999997216093561292 +-0.170473999999999986654231065586 0.564304000000000027803537250293 -1.28549599999999997201882706577 +-0.170211000000000001186606368719 -0.109511999999999998234301301636 -1.39965500000000009350742402603 +-0.169930999999999998717470361953 -0.0763100000000000028288482667449 -1.40189199999999991597121606901 +-0.169869999999999993223198657688 0.14871300000000001184652376196 -1.39607600000000009465850325796 +-0.169572000000000000508038056068 -0.092925999999999994716226581204 -1.40093200000000006610889613512 +-0.169223000000000012299494756007 -1.34388700000000005374545253289 -0.406610000000000026965096822096 +-0.168809999999999987840837434305 -1.23768100000000003113598268101 -0.663061000000000011489476037241 +-0.168462000000000000632383034826 0.456749000000000016097345678645 1.32777999999999996028066107101 +-0.16814399999999998791544442156 -0.0541700000000000028710367416807 1.4031370000000000786144482845 +-0.167866999999999988446575116541 -0.428443000000000018268053736392 1.33725699999999991796073572914 +-0.167777000000000009460876526646 -1.12316199999999999370459136117 0.842828000000000021607604594465 +-0.167616999999999988224530511616 0.809656999999999960060392822925 1.14732699999999998574651272065 +-0.166868999999999989558574498005 -0.442720000000000002415845301584 -1.33272400000000001973887719942 +-0.165624999999999994448884876874 0.244635999999999992349231092703 1.38301199999999990808419170207 +-0.164369999999999988338217349337 -0.543120000000000047180037654471 -1.29537799999999991840127222531 +-0.164086000000000009624301355871 -1.22937500000000010658141036402 0.679494999999999960138552523858 +-0.162672000000000011032952329515 0.811667999999999945082151953102 -1.14661799999999991506172136724 +-0.162595999999999990537347116515 -0.55363499999999998824051772317 1.29114299999999992962784745032 +-0.162412000000000000810018718767 0.957255999999999995786481576943 -1.02824200000000010035705599876 +-0.160921000000000008478551194457 0.262761000000000022325252757582 -1.38023899999999999366195879702 +-0.159861000000000003096189971075 -0.31557099999999999040412035356 -1.36925500000000011091572105215 +-0.159853999999999996095567666998 1.05229700000000003790034952544 0.931192000000000019710455489985 +-0.159140000000000003677058657559 0.606638000000000010558665053395 1.26754300000000008630252068542 +-0.158395000000000008011369345695 -0.090712000000000000965449942214 1.40238400000000007494804776798 +-0.157667000000000001591615728103 -0.998269999999999990691890161543 0.98924100000000003696243311424 +-0.157416000000000000369482222595 -0.879495000000000026751934001368 -1.09622400000000008724043709663 +-0.157062000000000007160494419622 1.404876999999999931389993435 -0.0406489999999999976343367791287 +-0.156695000000000000950350909079 0.36720599999999997686828123733 -1.35668999999999995154098542116 +-0.156089000000000005519140700017 0.131762999999999991240784424917 -1.39938399999999996126121004636 +-0.156005000000000004778399897987 1.3851109999999999811137740835 0.239016000000000006231459792616 +-0.155264999999999986357579473406 0.280577999999999994074073583761 1.37737700000000007349854058702 +-0.153331999999999996076027741765 -1.38659400000000010422240848129 0.232048000000000004261480057721 +-0.15284700000000001063327204065 -1.13789099999999998580335613951 -0.825737000000000054278359584714 +-0.151982000000000005979217121421 -0.307696999999999998287592006818 1.37194199999999999484145973838 +-0.151945999999999997731592316086 1.36942800000000008964207154349 -0.318715999999999999303668118955 +-0.151821000000000011498357821438 0.724408999999999969610087191541 1.20506500000000005279332526698 +-0.149558999999999997498889570124 -1.40547200000000005459810381581 -0.0477650000000000019007018181583 +-0.149083999999999994301447259204 -0.629530000000000033999469906121 -1.25756399999999990413357409125 +-0.149000999999999994560795357756 -1.31351900000000010315659437765 0.502460000000000017728041257214 +-0.148761000000000004339639758655 1.14025400000000010081180334964 -0.823219000000000034056313324982 +-0.148373000000000004883204951511 -1.01729200000000008508038717991 -0.971134000000000052743587275472 +-0.147948999999999997179145339032 1.22868700000000008465406153846 0.684427000000000007595701845275 +-0.147102000000000010526690630286 1.27987999999999990663468452112 -0.583324999999999982414067289938 +-0.146812999999999999056754518278 -0.298538000000000025568880346327 -1.37452599999999991453591974278 +-0.146487000000000006094680315982 -0.126586000000000004073186232745 1.40089899999999989432808433776 +-0.146060999999999996390442902339 -0.426547999999999982723153379993 -1.34041900000000002712852165132 +-0.14573400000000000242827979946 -0.799085999999999962994934321614 -1.1576800000000000423483470513 +-0.145245000000000012985168496016 0.49138300000000001421796014256 1.31812200000000001587352471688 +-0.144080999999999986860288458956 -1.36877399999999993518429164396 -0.325112999999999985334397933912 +-0.143870999999999998886224261696 0.727083000000000034823699479603 -1.20442999999999988958165886288 +-0.143334999999999990194510246511 0.113960000000000005737632591263 -1.40230800000000010996359378623 +-0.143251999999999990453858345063 -1.27809299999999992358823419636 -0.588183000000000011375789199519 +-0.142887999999999987243981536267 -0.715311999999999947874584904639 -1.21157399999999992878940702212 +-0.142757999999999996010302538707 0.315724000000000004639844064513 1.37110899999999991116794717527 +-0.142660000000000009023892744153 1.31196299999999999030819708423 0.508332000000000006068034963391 +-0.140395999999999993024246691675 0.245356999999999991768362406219 -1.38567299999999993254107266694 +-0.139917999999999986826537679008 0.457637000000000015997869695639 -1.33078600000000002445688096486 +-0.139771000000000006346922987177 1.12440300000000004132516551181 0.846276000000000028222757464391 +-0.138261999999999996013855252386 -0.769777000000000044543924104801 1.17827299999999990376409186865 +-0.13741100000000000536104494131 -0.527309999999999945430317893624 -1.30501399999999989631760399789 +-0.136081000000000007510436716984 -0.462984000000000006647127293036 1.32933400000000001561772933201 +-0.135531000000000012573053709275 -0.678665999999999991487698025594 1.23330600000000001337241428701 +-0.134828000000000003399946990612 -0.280658999999999991814547684044 -1.37951099999999993173105394817 +-0.134660000000000001918465386552 1.01930000000000009485745522397 -0.971026999999999973489650528791 +-0.133610000000000006536993168993 0.638974000000000041943337691919 -1.25453600000000009551115454087 +-0.132467000000000001413980044163 -0.161648999999999987142729196421 1.39868600000000009586642590875 +-0.132375999999999993672616938056 0.880236000000000018417267710902 -1.09893599999999991290167145053 +-0.132230999999999987437604431761 0.54869500000000004380495965961 -1.2967070000000000540296696272 +-0.131915000000000004476419235289 -0.858677000000000023582913399878 1.11591700000000004777689355251 +-0.131656999999999996253663425705 0.0953750000000000014432899320127 -1.40483800000000003116440439044 +-0.130869000000000013095302620059 -1.07594499999999992922994351829 0.908414000000000054768634072389 +-0.130667000000000005366374011828 -1.19051499999999998991029315221 0.752063999999999954759744014154 +-0.130015999999999992686738892189 0.349795999999999995822008713731 -1.36408900000000010699352515076 +-0.129775000000000001465494392505 1.40756400000000003736033704627 0.0438570000000000001505462421392 +-0.128153999999999990144772255007 0.349932999999999994056310015367 1.36423000000000005371703082346 +-0.127274999999999999245048343255 -0.342183999999999988173016163273 1.36627699999999996371968791209 +-0.126788000000000011802114840975 0.639266000000000000902389274415 1.25509500000000007169376203819 +-0.126365000000000005098144129079 1.37134500000000003616662525019 0.32163000000000002698286039049 +-0.126289000000000012358114531708 -0.40901900000000002144417976524 -1.34786999999999990151877682365 +-0.126002000000000002888356220865 1.38868600000000008698464171175 -0.235957000000000000072830630415 +-0.125473000000000001197264509756 -1.18766900000000008574829735153 -0.757430000000000047677417569503 +-0.125393000000000004456879310055 -1.37291000000000007474909580196 0.315265999999999990688337447864 +-0.12481299999999999339461709269 -0.944482999999999961460162012372 -1.0451669999999999571826947431 +-0.123990000000000002988720382291 0.923026000000000013123724329489 1.06425999999999998379962562467 +-0.123952999999999993741006676373 -0.262004999999999987903009923684 -1.38419300000000000672173428029 +-0.123554999999999998161470671221 -0.586740000000000039293013287534 1.28080900000000008631673154014 +-0.123258000000000006446398970184 -1.40834499999999995800692431658 0.0370469999999999966000530093879 +-0.12272700000000000275512945791 0.840084000000000052921222959412 1.13101600000000002133049292752 +-0.122443999999999997285726749396 1.18990700000000004799005637324 -0.754407000000000049766413212637 +-0.12145400000000000639843733552 1.31504400000000010173550890613 -0.505873000000000017095658222388 +-0.121102000000000001311839525897 0.0760819999999999968531838590025 -1.40696299999999996366284449323 +-0.120928999999999994829913418926 0.226657999999999998363975350912 -1.39068400000000003124966951873 +-0.11996900000000000618971540689 0.524379000000000039527492390334 1.30791199999999996350652509136 +-0.11859300000000000396838117922 -1.07533199999999995455368662078 -0.910822000000000020492052499321 +-0.118452000000000001733724275255 -1.28411499999999989540810929611 0.580532000000000047990056373237 +-0.118370000000000002993161274389 -1.38825899999999990974686170375 -0.242333999999999993857358049354 +-0.117128999999999997005950547191 -1.31346000000000007190692485892 -0.510982999999999965012875691173 +-0.116829000000000002290612144407 -0.613353000000000037061909097247 -1.26891599999999993286792232539 +-0.116817000000000004167333145233 -0.944011999999999962263075303781 1.04651600000000000179056769412 +-0.116389000000000006340705738239 -0.19576399999999999357314095505 1.39575399999999993916333096422 +-0.116223000000000006859401935344 1.00264400000000009072209650185 0.990554000000000045567105644295 +-0.114230999999999999205968492788 -0.242649000000000003574029960873 -1.38855100000000009075051821128 +-0.112240999999999993552712851397 0.755170000000000007922551503725 1.19042899999999995941379893338 +-0.111764000000000002232880547126 1.19007799999999996920507783216 0.755793000000000048110848638316 +-0.111712000000000005739408948102 0.0561559999999999975850428768354 -1.40867600000000003923616986867 +-0.111508999999999997010391439289 0.383072999999999996845190253225 1.35676799999999997403676843533 +-0.111486000000000001763922341524 -0.509736999999999995658583884506 -1.31443500000000002003730514843 +-0.110123999999999999666044914193 0.797772000000000036656899737864 -1.16251100000000007206324426079 +-0.109816999999999997950084207332 1.28262900000000001909938873723 0.585493999999999958916419018351 +-0.10951800000000000423483470513 -0.866384000000000042973624658771 -1.11237699999999994915356182901 +-0.107952000000000006285638676218 0.439545000000000019024781749977 -1.33983099999999999418776042148 +-0.107631000000000004446221169019 -0.390203000000000022051693804315 -1.35504899999999994797406088765 +-0.106376999999999999335642542064 1.07732000000000005535127911571 -0.909980000000000011084466677858 +-0.10570100000000000328714833131 -0.222668000000000004812150677935 -1.39256800000000002803801635309 +-0.105322999999999999953814722176 -0.699469000000000007410960733978 -1.22460199999999996833821569453 +-0.104400000000000006683542608243 0.330685999999999979959142137886 -1.37103899999999989667287536577 +-0.103523000000000003906208689841 0.0356759999999999993791632846296 -1.40996800000000011010570233339 +-0.102927000000000004598099678788 -0.784270000000000022666313270747 -1.17231700000000005346123543859 +-0.10259799999999999475797096693 0.206738000000000005096367772239 -1.39525399999999999423039298563 +-0.102326000000000000289546164822 -0.49540800000000001501732072029 1.32064399999999992907362411643 +-0.101974999999999996203037255782 1.40469500000000002692956968531 0.128189999999999998392397060343 +-0.101555999999999993499422146215 0.945331000000000032379432468588 -1.04691700000000009751488505572 +-0.100579000000000001735500632094 -0.375020000000000020001778011647 1.35986899999999999444355580636 +-0.0997730000000000005755396159657 1.07763600000000003831246431218 0.91035500000000002529532139306 +-0.0995609999999999967235098097262 1.40246300000000001517719283584 -0.152266000000000012448708730517 +-0.0983959999999999973541164877133 -0.202139999999999986357579473406 -1.39623000000000008213874025387 +-0.0983180000000000026139090891775 -0.228795999999999999374722392531 1.39211499999999999133137862373 +-0.0976029999999999953175233713409 -1.23275899999999993816857113416 -0.686132999999999992901678069757 +-0.0969580000000000025162094630105 -1.35380900000000004013145371573 0.397239999999999982005505216875 +-0.0967340000000000005409006575974 -1.1469560000000000865583160703 0.821664999999999978719245063985 +-0.0965670000000000000595079541199 0.0147229999999999999760191826681 -1.41083599999999997898214587622 +-0.0965079999999999965654140510196 0.0956229999999999996651567357731 1.40767299999999995208099790034 +-0.0964710000000000011954881529164 -1.40565899999999999181454768404 0.121712000000000000743405337289 +-0.096226000000000005973888050903 1.35216599999999997905320014979 0.402973999999999998866684336463 +-0.0962179999999999979731768462443 0.711122000000000031860736271483 -1.21862500000000006927791673661 +-0.0958050000000000012700951401712 0.0629789999999999933200101054354 1.40955900000000000638067376713 +-0.0956440000000000067892358401878 1.23486300000000004395417363412 -0.682617000000000029302782422747 +-0.0953259999999999940722972269214 1.34501899999999996460076090443 -0.42642499999999999849009668651 +-0.0952550000000000063327121324619 0.128207999999999988638421655196 1.40516499999999999737099187769 +-0.0949519999999999947393192201162 0.530619999999999980566656176961 -1.30745000000000000106581410364 +-0.0934439999999999992841281937217 -1.02448199999999989273646860966 0.970413999999999998813393631281 +-0.0931460000000000065689675921021 0.0304070000000000000006661338148 1.41081499999999993022470334836 +-0.092890000000000000346389583683 0.415011000000000018772539078782 1.34875400000000000844124770083 +-0.0927329999999999959880980782145 0.555606999999999962014385346265 1.29719000000000006522782314278 +-0.0925040000000000028901325777042 0.669660999999999950738072129752 1.24217500000000002913225216616 +-0.092344999999999996531663271071 -0.181147000000000002462030579409 -1.39952100000000001500666257925 +-0.0921919999999999961737273679319 -1.40226500000000009471534667682 -0.158598999999999989984900139461 +-0.0920490000000000058166804706161 0.160605999999999998761879282938 1.40204599999999990345145306492 +-0.0917170000000000068540728648259 -1.00574199999999991383958786173 -0.989985000000000003872457909893 +-0.0910740000000000021751489498456 0.62161299999999997112354321871 -1.26700499999999993683275079093 +-0.0908729999999999954463092421975 -0.00662000000000000001637578961322 -1.41127500000000005719869022869 +-0.0905429999999999984838794375719 -1.34364400000000006052403023205 -0.431767000000000011894485396624 +-0.0901610000000000050279780339224 -0.370172000000000001040945107889 -1.36192599999999996995825313206 +-0.0893349999999999977440268139617 -0.708811999999999997612576407846 1.22049399999999996779820321535 +-0.088543999999999997707611498754 -0.00196699999999999999844568776552 1.41143799999999997041300048295 +-0.0883430000000000048565595989203 -1.12912799999999990951948802831 -0.846914999999999973390174545784 +-0.0875719999999999970663466797305 -0.159770999999999996354915765551 -1.40242800000000000792965693108 +-0.0874359999999999998321342786767 -1.24964300000000005930189672654 0.656313000000000035250025121059 +-0.0869029999999999941406869652383 0.192688999999999999168664999161 1.39832700000000009765699360287 +-0.086869000000000001771027768882 -0.798862999999999989775290032412 1.16373199999999998865973793727 +-0.0866969999999999962891905624929 -0.490472000000000019070967027801 -1.32360100000000002751221472863 +-0.0864629999999999981907805590708 -0.0282699999999999999900079927784 -1.41128499999999990066612554074 +-0.0856480000000000019078072455159 -0.595067000000000012605028132384 -1.28006200000000003313971319585 +-0.085473999999999994425792237962 0.185676000000000007705835969318 -1.39936400000000005228173449723 +-0.0840950000000000030819791163594 -0.138096999999999997532640350073 -1.40494000000000007766232101858 +-0.083353999999999997538857599011 -0.0501399999999999970712316610388 -1.41086399999999989596233263001 +-0.0826540000000000052438053899095 -0.617252000000000022872370664118 1.26971199999999995178256995132 +-0.0820150000000000045652370772586 -0.0340140000000000025659474545137 1.41142400000000001192290710605 +-0.0819290000000000018243184740641 -0.116210999999999994858335128356 -1.40704800000000007642597665836 +-0.0815580000000000054916071690059 -0.0721450000000000007949196856316 -1.41001500000000001833200258261 +-0.0810820000000000012940759575031 -0.0941980000000000039506176108262 -1.40874100000000002097522155964 +-0.0799490000000000061719518384962 0.309952999999999978530951239009 -1.37751099999999992995469710877 +-0.0798370000000000051842974357896 0.224331000000000002625455408634 1.39402399999999992985522112576 +-0.0783250000000000057287508070658 -0.260614999999999985558218895676 1.38778399999999990654941939283 +-0.0776730000000000059268145946589 1.13108900000000001107025582314 -0.845342000000000037829295251868 +-0.0770949999999999968647301784586 0.419408999999999976271425339291 -1.34838900000000005974243322271 +-0.0765399999999999969269026678376 1.24823299999999992593302522437 0.660344999999999959783281155978 +-0.0760460000000000024833468614816 0.867461000000000037601921576425 1.11432899999999990292565144046 +-0.0759419999999999956186158556193 0.865314000000000027590374429565 -1.11600399999999999600674982503 +-0.0755060000000000036690650517812 -0.886028000000000037772451833007 1.09966099999999999958788521326 +-0.0751389999999999974589215412379 1.14677300000000004231992534187 0.82417600000000001969624463527 +-0.0739479999999999998427924197131 -0.349007000000000011663559007502 -1.36847600000000002573585788923 +-0.0737730000000000052384763193913 1.39628299999999994085442267533 0.212017000000000011006306976924 +-0.0735869999999999996331823126638 -0.0656079999999999996518340594776 1.41077300000000005475442321767 +-0.0728700000000000042144066014771 -0.930265000000000008562039965909 -1.06268399999999996197175278212 +-0.0727269999999999999795718963469 1.41070600000000001550404249429 -0.0679740000000000066382455088387 +-0.0723710000000000047704062922094 0.44562099999999998933830624992 1.34021799999999990937737948116 +-0.072133000000000002671640686458 0.94903300000000001546140993014 1.04600800000000004885691851086 +-0.0720009999999999955599960799191 -0.406073999999999990517807191281 1.35274500000000008625988812128 +-0.0708799999999999985611509600858 0.255406000000000021898927116126 1.38915199999999994240340583929 +-0.0708469999999999933137928564975 0.783228000000000035285552257847 1.17538699999999995959854004468 +-0.0703359999999999957465135480561 1.00669499999999989547916356969 -0.990766999999999953274709696416 +-0.0696259999999999934505723331313 0.163555000000000005933031843597 -1.40299799999999996735766671918 +-0.0693480000000000068594019353441 -1.27298500000000003318234576 -0.612128000000000005442757355922 +-0.0693030000000000034887648325821 -1.39742699999999997473310031637 0.20589799999999999768895975194 +-0.0688280000000000002913225216616 -0.681166000000000049219295306102 -1.23744699999999996364863363851 +-0.0688219999999999942907891181676 1.36968399999999990157562024251 -0.345293999999999989825028023915 +-0.0684659999999999990816235140301 1.2749449999999999949551465761 -0.608133000000000034646063795662 +-0.0681419999999999942419393050841 -1.32936499999999990784260717192 0.477646999999999988251175864207 +-0.0667360000000000036513014833872 -0.525585999999999997633892689919 1.31122300000000002739852789091 +-0.0657070000000000015161205624281 1.32765099999999991453591974278 0.48272799999999999043254206299 +-0.0656510000000000010222933610748 -1.41073699999999990772892033419 -0.074236999999999997434940723906 +-0.0636459999999999942454920187629 0.584941999999999961978858209477 1.28599899999999989219645613048 +-0.063600000000000003752553823233 -1.36852599999999990920684922457 -0.35084599999999999120348093129 +-0.0632910000000000000364153152077 -0.0966240000000000015534240560555 1.40948899999999999188560195762 +-0.0631430000000000046789239149803 -0.469590999999999980651921305252 -1.33247800000000005127276381245 +-0.0625600000000000044941828036826 -0.85013199999999999878497192185 -1.12843300000000001936939497682 +-0.0624180000000000012594369991348 -1.09887200000000007094058673829 0.888023000000000006792788553867 +-0.0611449999999999979638509728375 -0.766649000000000024890312033676 -1.1868069999999999453166310559 +-0.0600670000000000023354651546015 0.285791999999999990489385481851 1.38373199999999996201438534627 +-0.0593810000000000032249758419312 1.02661699999999989074694894953 0.970840999999999954006568714249 +-0.0590550000000000033240077357277 -0.326790999999999998149036173345 -1.37467099999999997628208348033 +-0.0587840000000000029167779302952 0.510149999999999992361665590579 -1.31768400000000007743494734314 +-0.0584469999999999989537258215933 0.780464000000000046597392611147 -1.17790499999999997982058630441 +-0.0582589999999999982871479176083 -1.06303199999999997693578279723 -0.930895999999999945728745842644 +-0.0577449999999999977196019074199 -1.17846800000000007102585186658 -0.779665999999999970171415952791 +-0.0567589999999999969548802880581 0.287677000000000016033396832427 -1.38348099999999996079225184076 +-0.0564879999999999965476504826256 -0.291094999999999992645882684883 1.38277699999999992286348060588 +-0.0564230000000000009308109838457 0.697702000000000044366288420861 1.22883199999999992435562035098 +-0.0560739999999999988444798759701 -1.21023900000000006471623237303 0.729504000000000041303849229735 +-0.0556620000000000031414870704793 -0.57474300000000000387956333725 -1.2909580000000000499227326145 +-0.0556509999999999990794030679808 -0.968976999999999977219999891531 1.02858500000000008256506589532 +-0.055115999999999998326671857285 0.140462000000000003518962898852 -1.40614100000000008527933914593 +-0.0511689999999999992064125819979 -0.126939999999999997282174035718 1.40757500000000002060573933704 +-0.0500309999999999990838439600793 0.474783000000000010576428621789 1.3311939999999999884039425524 +-0.049611000000000002319033853837 0.601508999999999960373031626659 -1.27895500000000006401990049199 +-0.0495579999999999978865794503236 0.692077999999999970981434671558 -1.2323040000000000659952092974 +-0.0486639999999999989244159337431 1.18039500000000008306244581036 -0.777367999999999947924322896142 +-0.0474670000000000022466473126315 0.397305999999999992500221424052 -1.35642700000000004934008757118 +-0.0474400000000000029998226125372 0.315369999999999983675280645912 1.37778500000000003744560217456 +-0.045606000000000000704769576032 1.41338099999999999845101683604 0.0165860000000000000486277684786 +-0.0455419999999999991491250739273 -0.303611999999999992994048625405 -1.38048700000000001963940121641 +-0.0452789999999999998037125692463 1.38236000000000003318234576 0.295007000000000019213075574953 +-0.0429609999999999991882049243941 1.20891100000000006886580194987 0.732589999999999963442576245143 +-0.0420470000000000010409451078885 1.38894500000000009620748642192 -0.262801000000000006817657549618 +-0.0420000000000000026090241078691 0.116487999999999994327204433375 -1.40878199999999997871213963663 +-0.0418620000000000033746339056506 -1.3836800000000000210320649785 0.289271000000000000351718654201 +-0.0416520000000000015227819005759 -0.435226000000000001755040557327 1.34493200000000001637090463191 +-0.0414800000000000029798385980939 -0.735897000000000023334223442362 1.20695299999999994255972524115 +-0.0414609999999999978559372948439 0.929440000000000043911541069974 -1.06509300000000006747313818778 +-0.0410179999999999989057641869294 1.30999700000000007804601409589 -0.53125 +-0.0409170000000000019801937867214 -0.447174999999999989164223279658 -1.34102999999999994429344951641 +-0.0408200000000000021160850849355 -1.30818600000000007099743015715 -0.535707999999999961993069064192 +-0.0400550000000000003264055692398 -0.645050000000000012256862191862 1.25789700000000004287414867576 +-0.039056000000000000438316050122 -1.29967399999999999593569555145 0.556167999999999995708321876009 +-0.0388500000000000025868196473766 -1.4136409999999999254072235999 0.0104169999999999991768806495429 +-0.0388389999999999985247356448781 1.0640849999999999475619461009 -0.930706000000000033267610888288 +-0.0382170000000000009698908343125 1.09894099999999994565769156907 0.889306999999999958639307351405 +-0.0372689999999999965751840136363 -0.156434999999999990727417298331 1.40504099999999998438227066799 +-0.0364060000000000008602007994796 -1.38800600000000007305800409085 -0.268540999999999974168218841442 +-0.0359340000000000006630251903061 -0.990473000000000047826631544012 -1.00879699999999994375343703723 +-0.0349290000000000017132961716015 1.29789599999999993862331848504 0.560576999999999991963761658553 +-0.03492100000000000065147887085 0.263946999999999987185361760567 -1.38892499999999996518340594776 +-0.0338969999999999965778485488954 -0.824547000000000029906743748143 1.14846599999999998686917024315 +-0.0335470000000000004303224443447 -0.66047599999999995201704905412 -1.25005799999999989147170254 +-0.0334619999999999986894927417325 -0.27956100000000000393995946979 -1.38590300000000010705036856962 +-0.0330490000000000019864110356593 0.344021999999999994468424802108 1.37133400000000005292122295941 +-0.0328939999999999996282973313555 -0.320114999999999982893683636576 1.37711399999999994925303781201 +-0.0328210000000000029496405318241 0.61226899999999995216626302863 1.27438199999999990374988101394 +-0.0303320000000000013218315331187 0.0917290000000000049773518639995 -1.41091000000000010849987575057 +-0.0294510000000000014830359162943 -0.553401000000000031775471143192 1.30110700000000001352873368887 +-0.0278559999999999988173904341693 -1.04645000000000010231815394945 0.950876000000000054512838687515 +-0.0278009999999999993236521333984 0.808471999999999968444797104894 1.15999999999999992006394222699 +-0.0277580000000000014226397837547 0.891677999999999970626163303677 1.09733299999999989182697390788 +-0.0269919999999999986328713674766 -0.552459999999999951114659779705 -1.30156000000000005023537141824 +-0.0269199999999999994848565165739 -1.22315700000000004976641321264 -0.709339999999999970548003602744 +-0.0259600000000000004363176486777 0.50238199999999999523225824305 1.32171799999999994845722994796 +-0.024572000000000000091704421834 -1.11612700000000009126210898103 -0.868133999999999961261210046359 +-0.0244919999999999998818722701799 -1.16605899999999995664268226392 0.799815999999999971414865740371 +-0.023869000000000001326938559032 0.487366000000000021419310769488 -1.32736699999999996357757936494 +-0.022863000000000001377120639745 -0.254732000000000013972822898722 -1.39089499999999999246824700094 +-0.0219470000000000012296830220748 -0.912638999999999978030018610298 -1.08009599999999994501820310688 +-0.0216450000000000010447198661723 -0.184993999999999991779020547256 1.40189499999999989121590715513 +-0.0205539999999999993540722442731 -0.746291000000000037672975850001 -1.20109400000000010599876532069 +-0.0204450000000000013666845433136 0.846725999999999978662401645124 -1.13253599999999998715338733746 +-0.020156000000000000305089287167 0.0662810000000000065778493762991 -1.41251600000000010481926437933 +-0.0201050000000000013422596367718 -0.423312999999999994837907024703 -1.34922300000000006114930783951 +-0.0194620000000000001327826737452 1.225041000000000046554760047 -0.706324999999999980637710450537 +-0.0191869999999999991946442179369 0.373325999999999991185717362896 -1.36391400000000007075584562699 +-0.018753999999999999837019259985 0.971546000000000020691004465334 1.02749599999999996491339970817 +-0.0186869999999999987505550080868 0.72327900000000000524380538991 1.21511999999999997790212091786 +-0.0183049999999999983557597005301 1.41047799999999989850607562403 0.101080000000000003179678742526 +-0.0176380000000000008997247391562 -0.909645999999999954610530039645 1.08269600000000010275869044563 +-0.0169519999999999983197884745323 0.371634999999999993125499031521 1.36440500000000008995471034723 +-0.0167269999999999988138377204905 -0.83080200000000004045830337418 -1.14432800000000001183764197776 +-0.0166080000000000012339018695684 1.36298199999999991582910752186 0.376832999999999973539388520294 +-0.0151050000000000003708144902248 1.40272400000000008191136657842 -0.179270000000000012674306049121 +-0.0145220000000000001860733789272 0.238856000000000012750689393215 -1.39382099999999997663735484821 +-0.0142550000000000003097522238704 -1.36447099999999998942712409189 0.371503000000000027647217848425 +-0.0137859999999999996433963644904 -0.229225000000000012079226507922 -1.39544500000000004646949491871 +-0.0134079999999999997795097073094 1.33987799999999990241406067071 -0.452268999999999976591169570383 +-0.0121300000000000001570965579845 -1.33822499999999999786837179272 -0.457172999999999996045829675495 +-0.0118960000000000003239630785856 -1.41096700000000008223821623687 0.0950300000000000033573144264665 +-0.0115139999999999999291677710289 0.0402450000000000029931612743894 -1.41359400000000001718092335068 +-0.00981600000000000007249756350802 -1.26485399999999992282084804174 0.632494000000000000660804744257 +-0.00965399999999999938737893501184 -0.462359000000000019969803588538 1.33646200000000003882405508193 +-0.00938300000000000071487260555614 0.578741999999999978676612499839 -1.29033700000000006724576451234 +-0.00921300000000000070266015228526 1.16481799999999990902210811328 0.801943999999999990180299391795 +-0.00906900000000000067190697450314 -1.40200799999999992095922607405 -0.185177000000000008261835660051 +-0.00784600000000000054323212594909 0.759811000000000014154011296341 -1.19273800000000007592859674332 +-0.00772899999999999975930364826127 0.0950980000000000019744206269934 1.41099100000000010624034985085 +-0.00763600000000000042610359685114 -0.347561999999999982069454063094 1.3708180000000000919868625715 +-0.00718799999999999994493293797859 1.11727700000000007563016879431 -0.866971999999999964892083426093 +-0.00713800000000000024746871218895 0.0676960000000000061692873032371 1.41257399999999999629096691933 +-0.00681600000000000001004751837286 0.989897999999999944620299174858 -1.00997800000000004239097961545 +-0.00667699999999999977556841557202 0.122451000000000004286349053473 1.40888700000000000045474735089 +-0.00626700000000000000122124532709 -0.203138999999999986245668992524 -1.39953400000000005576339390245 +-0.00490699999999999990352161916007 0.0403529999999999999804600747666 1.41362900000000002442845925543 +-0.0044390000000000002372546603624 0.0137240000000000000879296635503 -1.4141399999999999526067995248 +-0.0043579999999999998946953461143 -0.212504999999999999449329379786 1.39815000000000000390798504668 +-0.00407400000000000036409764092582 0.670024999999999981703524554177 -1.24541199999999996350652509136 +-0.00401199999999999994126920199733 1.26301899999999989177013048902 0.636213000000000028499869131338 +-0.00398499999999999982708276391463 0.149647000000000002239985974484 1.40626800000000007351275144174 +-0.0011429999999999999188426968999 1.04677299999999995350208337186 0.950927999999999995495159055281 +-0.00104300000000000009023337632641 0.013176999999999999477195977704 1.41415200000000007563016879431 +-0.000790000000000000012108369862318 -0.398100000000000009414691248821 -1.35702499999999992574828411307 +-0.000380999999999999991017601841392 0.637480999999999964344965519558 1.26238600000000000811439804238 +-0.000335999999999999981407233784481 -0.176578000000000012725820397463 -1.40314699999999992208188359655 +-0.000251999999999999999607952494429 0.528309000000000028585134259629 1.31182700000000007634071153007 +0.000250999999999999975301007149042 -0.528307999999999999829469743418 -1.31182700000000007634071153007 +0.000335000000000000011310397063369 0.176579000000000013725909298046 1.40314699999999992208188359655 +0.00038000000000000002092076512028 -0.637480000000000046611603465863 -1.26238600000000000811439804238 +0.000790000000000000012108369862318 0.398100000000000009414691248821 1.35702499999999992574828411307 +0.00104199999999999995750621373247 -0.013176999999999999477195977704 -1.41415200000000007563016879431 +0.0011429999999999999188426968999 -1.04677200000000003576872131816 -0.950929000000000024250823571492 +0.00398399999999999969435560132069 -0.149647000000000002239985974484 -1.40626800000000007351275144174 +0.00401199999999999994126920199733 -1.26301899999999989177013048902 -0.636213999999999946233231185033 +0.00407300000000000023137047833188 -0.670026000000000010459189070389 1.24541100000000004577316303767 +0.00435699999999999976196818352037 0.212503999999999998449240479204 -1.39815000000000000390798504668 +0.00443699999999999997180033517452 -0.0137240000000000000879296635503 1.4141399999999999526067995248 +0.0049049999999999996380672939722 -0.0403529999999999999804600747666 -1.41362900000000002442845925543 +0.00626599999999999986849408273315 0.203139999999999987245757893106 1.39953400000000005576339390245 +0.00667500000000000037747582837255 -0.122451000000000004286349053473 -1.40888700000000000045474735089 +0.00681600000000000001004751837286 -0.989898999999999973375963691069 1.00997699999999990261301263672 +0.00713700000000000011474154959501 -0.0676960000000000061692873032371 -1.41257399999999999629096691933 +0.00718699999999999981220577538465 -1.117277999999999993363530848 0.866971000000000047158721372398 +0.00763600000000000042610359685114 0.34756100000000000882494077814 -1.3708180000000000919868625715 +0.00772700000000000036121106106179 -0.0950980000000000019744206269934 -1.41099100000000010624034985085 +0.00784600000000000054323212594909 -0.759812000000000042909675812552 1.19273800000000007592859674332 +0.00906900000000000067190697450314 1.40200799999999992095922607405 0.185176000000000007261746759468 +0.00921300000000000070266015228526 -1.16481699999999999128874605958 -0.801945000000000018935963908007 +0.0093819999999999997147837049738 -0.578743000000000007432277016051 1.29033700000000006724576451234 +0.0096530000000000001220135104063 0.462357999999999991214139072326 -1.33646200000000003882405508193 +0.00981600000000000007249756350802 1.26485300000000000508748598804 -0.632495000000000029416469260468 +0.011511999999999999663713445841 -0.0402450000000000029931612743894 1.41359400000000001718092335068 +0.0118949999999999993238741780033 1.41096700000000008223821623687 -0.0950320000000000053574922276312 +0.0121300000000000001570965579845 1.33822499999999999786837179272 0.457172000000000022801316390542 +0.0134070000000000005141442827039 -1.33987799999999990241406067071 0.45226800000000000334665628543 +0.0137839999999999993779420393025 0.229225000000000012079226507922 1.39544500000000004646949491871 +0.0142550000000000003097522238704 1.36447099999999998942712409189 -0.371504000000000000891731133379 +0.0145209999999999991859844783448 -0.238857000000000013750778293797 1.39382099999999997663735484821 +0.0151050000000000003708144902248 -1.40272400000000008191136657842 0.179269000000000011674217148538 +0.0166070000000000002338129689861 -1.36298199999999991582910752186 -0.376834000000000002295053036505 +0.0167269999999999988138377204905 0.830802999999999958191665427876 1.14432800000000001183764197776 +0.0169510000000000007891465259036 -0.371634000000000019880985746568 -1.36440500000000008995471034723 +0.0176369999999999998996358385739 0.909645999999999954610530039645 -1.08269700000000002049205249932 +0.0183040000000000008251177519014 -1.41047799999999989850607562403 -0.101081000000000004179767643109 +0.0186869999999999987505550080868 -0.72327900000000000524380538991 -1.21512099999999989563548297156 +0.018753999999999999837019259985 -0.971544999999999991935339949123 -1.02749599999999996491339970817 +0.0191860000000000016640022693082 -0.373325999999999991185717362896 1.36391299999999993097787864826 +0.0194620000000000001327826737452 -1.2250419999999999642881221007 0.706323999999999951882045934326 +0.0201040000000000003421707361895 0.423314000000000023593571540914 1.34922300000000006114930783951 +0.0201549999999999993050003865847 -0.0662810000000000065778493762991 1.41251600000000010481926437933 +0.0204450000000000013666845433136 -0.846727000000000007418066161335 1.13253500000000006942002528376 +0.0205539999999999993540722442731 0.746291999999999955406337903696 1.20109299999999996622079834196 +0.0216429999999999990445420650076 0.184993999999999991779020547256 -1.40189499999999989121590715513 +0.0219460000000000002295941214925 0.912640000000000006785683126509 1.08009500000000002728484105319 +0.0228609999999999993769428385804 0.254732999999999987217336183676 1.39089499999999999246824700094 +0.023869000000000001326938559032 -0.487366999999999994663824054442 1.32736699999999996357757936494 +0.0244909999999999988817833695975 1.16605899999999995664268226392 -0.799817000000000000170530256582 +0.0245709999999999990916155212517 1.11612800000000000899547103472 0.868133000000000043527847992664 +0.0259589999999999994362287480953 -0.50238199999999999523225824305 -1.32171799999999994845722994796 +0.0269199999999999994848565165739 1.22315700000000004976641321264 0.709339000000000052814641549048 +0.0269910000000000011022294188479 0.552460999999999979870324295916 1.30156000000000005023537141824 +0.0277570000000000004225508831723 -0.891677000000000052892801249982 -1.09733400000000003160494088661 +0.027799999999999998323563232816 -0.808471000000000050711435051198 -1.16000100000000005984190920572 +0.0278559999999999988173904341693 1.04644899999999996254018697073 -0.95087699999999997224620074121 +0.0294500000000000004829470157119 0.553401000000000031775471143192 -1.30110700000000001352873368887 +0.0303310000000000003217426325364 -0.0917290000000000049773518639995 1.41091000000000010849987575057 +0.0328200000000000019495516312418 -0.612268000000000034432900974934 -1.27438199999999990374988101394 +0.0328929999999999986282084307732 0.320114999999999982893683636576 -1.37711500000000008903100479074 +0.033048000000000000986322135077 -0.344021000000000021223911517154 -1.37133400000000005292122295941 +0.0334609999999999976894038411501 0.27956100000000000393995946979 1.38590300000000010705036856962 +0.0335459999999999994302335437624 0.660476999999999980772713570332 1.25005799999999989147170254 +0.0338960000000000025166535522203 0.824546000000000001151079231931 -1.14846599999999998686917024315 +0.0349199999999999996513899702677 -0.263948000000000015941026276778 1.38892499999999996518340594776 +0.0349280000000000007132072710192 -1.29789500000000002088995643135 -0.560578000000000020719426174765 +0.0359340000000000006630251903061 0.990473999999999965559993597708 1.00879699999999994375343703723 +0.0364060000000000008602007994796 1.38800600000000007305800409085 0.268540000000000000923705556488 +0.0372670000000000015139001163789 0.156434999999999990727417298331 -1.40504099999999998438227066799 +0.0382159999999999999698019337302 -1.09894000000000002792432951537 -0.889307999999999987394971867616 +0.0388379999999999975246467442958 -1.06408600000000008733991307963 0.930705000000000004511946372077 +0.0388500000000000025868196473766 1.4136409999999999254072235999 -0.0104180000000000001769695501252 +0.039056000000000000438316050122 1.29967300000000007820233349776 -0.55616900000000002446398639222 +0.0400550000000000003264055692398 0.64504899999999998350119767565 -1.25789799999999996060751072946 +0.0408190000000000011159961843532 1.30818600000000007099743015715 0.535707000000000044259707010497 +0.0409160000000000009801048861391 0.44717600000000001791988779587 1.34102900000000002656008746271 +0.0410169999999999979056752863471 -1.30999700000000007804601409589 0.531248000000000053510973430093 +0.0414609999999999978559372948439 -0.929440000000000043911541069974 1.06509199999999992769517120905 +0.0414790000000000019797496975116 0.73589599999999999457855892615 -1.20695299999999994255972524115 +0.0416520000000000015227819005759 0.435224999999999972999376041116 -1.34493299999999993410426668561 +0.0418620000000000033746339056506 1.3836790000000001032987029248 -0.289271999999999973596231939155 +0.0419990000000000016089352072868 -0.116488999999999995327293333958 1.40878199999999997871213963663 +0.0420460000000000000408562073062 -1.38894500000000009620748642192 0.262799999999999978061993033407 +0.0429609999999999991882049243941 -1.20891100000000006886580194987 -0.732590999999999992198240761354 +0.0452789999999999998037125692463 -1.38236000000000003318234576 -0.295007999999999992457588859907 +0.0455409999999999981490361733449 0.303613000000000021749713141617 1.38048700000000001963940121641 +0.0456049999999999997046806754497 -1.41338099999999999845101683604 -0.0165870000000000010487166690609 +0.0474390000000000019997337119548 -0.315369000000000010430767360958 -1.37778500000000003744560217456 +0.0474670000000000022466473126315 -0.397307000000000021255885940263 1.35642700000000004934008757118 +0.0486639999999999989244159337431 -1.18039500000000008306244581036 0.777367000000000030190960842447 +0.0495579999999999978865794503236 -0.692078999999999999737099187769 1.23230299999999992621724231867 +0.0496100000000000013189449532547 -0.60150999999999998912869614287 1.27895399999999992424193351326 +0.050029999999999998083755059497 -0.474783000000000010576428621789 -1.33119499999999990613730460609 +0.0511679999999999982063236814156 0.126938999999999996282085135135 -1.40757500000000002060573933704 +0.0551149999999999973265829567026 -0.140462000000000003518962898852 1.40614100000000008527933914593 +0.0556499999999999980793141673985 0.96897599999999994846433537532 -1.02858600000000000029842794902 +0.0556620000000000031414870704793 0.574744000000000032635227853461 1.2909580000000000499227326145 +0.0560739999999999988444798759701 1.21023900000000006471623237303 -0.72950499999999995903721128343 +0.0564219999999999999307220832634 -0.697701000000000015610623904649 -1.22883199999999992435562035098 +0.0564870000000000024864554859505 0.29109400000000001940136939993 -1.38277800000000006264144758461 +0.056758000000000002893685291383 -0.28767799999999998927791011738 1.38348099999999996079225184076 +0.0577449999999999977196019074199 1.17846800000000007102585186658 0.779665000000000052438053899095 +0.0582589999999999982871479176083 1.06303299999999989466914485092 0.930895000000000027995383788948 +0.0584469999999999989537258215933 -0.780464999999999964330754664843 1.17790400000000006208722425072 +0.0587830000000000019166890297129 -0.51015100000000002111733010679 1.31768400000000007743494734314 +0.0590540000000000023239188351454 0.326792000000000026904700689556 1.37467099999999997628208348033 +0.0593800000000000022248869413488 -1.02661599999999997301358689583 -0.970840999999999954006568714249 +0.0600660000000000013353762540191 -0.285791999999999990489385481851 -1.38373199999999996201438534627 +0.0611449999999999979638509728375 0.766650000000000053645976549888 1.18680600000000002758326900221 +0.0624180000000000012594369991348 1.09887099999999993116261975956 -0.888024000000000035548453070078 +0.0625600000000000044941828036826 0.850133000000000027540636438061 1.12843200000000010163603292312 +0.0631420000000000036788350143979 0.469592000000000009407585821464 1.33247800000000005127276381245 +0.0632899999999999990363264146254 0.0966240000000000015534240560555 -1.40948899999999999188560195762 +0.063600000000000003752553823233 1.36852599999999990920684922457 0.350845000000000017958967646337 +0.0636449999999999932454031181805 -0.584941000000000044245496155781 -1.28599899999999989219645613048 +0.0656500000000000000222044604925 1.41073699999999990772892033419 0.0742359999999999964348518233237 +0.0657060000000000005160316618458 -1.32764999999999999680255768908 -0.482729000000000019188206579202 +0.0667350000000000026512125828049 0.525585999999999997633892689919 -1.31122300000000002739852789091 +0.0681419999999999942419393050841 1.32936399999999999010924511822 -0.477648000000000017006840380418 +0.0684659999999999990816235140301 -1.2749459999999999126885086298 0.608132000000000005890399279451 +0.0688219999999999942907891181676 -1.36968399999999990157562024251 0.345293000000000016580514738962 +0.0688269999999999992912336210793 0.681167999999999995708321876009 1.23744600000000004591527158482 +0.0693030000000000034887648325821 1.39742699999999997473310031637 -0.205898999999999998689048652523 +0.0693480000000000068594019353441 1.27298500000000003318234576 0.612126999999999976687092839711 +0.0696250000000000063282712403634 -0.163555000000000005933031843597 1.40299700000000004962430466549 +0.0703359999999999957465135480561 -1.00669600000000003525713054842 0.99076600000000003554134764272 +0.0708460000000000061914917637296 -0.783225999999999977774223225424 -1.17538800000000009937650702341 +0.0708789999999999975610620595035 -0.255404999999999993143262599915 -1.38915199999999994240340583929 +0.0719999999999999945599071793367 0.406073999999999990517807191281 -1.35274500000000008625988812128 +0.0721320000000000016715517858756 -0.94903300000000001546140993014 -1.04600899999999996659028056456 +0.072370000000000003770317391627 -0.445620000000000016093792964966 -1.34021799999999990937737948116 +0.0727259999999999989794829957646 -1.41070500000000009777068044059 0.0679730000000000056381566082564 +0.0728700000000000042144066014771 0.930265000000000008562039965909 1.06268399999999996197175278212 +0.0735849999999999976330045114992 0.0656079999999999996518340594776 -1.41077300000000005475442321767 +0.0737730000000000052384763193913 -1.39628299999999994085442267533 -0.212018000000000012006395877506 +0.0739459999999999978426146185484 0.349007999999999984908072292455 1.36847500000000010800249583554 +0.0751379999999999964588326406556 -1.14677199999999990254195836314 -0.824177000000000048451909151481 +0.0755060000000000036690650517812 0.886027000000000009016787316796 -1.09966099999999999958788521326 +0.0759419999999999956186158556193 -0.865314000000000027590374429565 1.11600300000000007827338777133 +0.0760450000000000014832579608992 -0.867460000000000008846257060213 -1.11432899999999990292565144046 +0.0765399999999999969269026678376 -1.24823299999999992593302522437 -0.66034599999999998853894567219 +0.0770939999999999958646412778762 -0.419410000000000005027089855503 1.34838900000000005974243322271 +0.0776730000000000059268145946589 -1.13108999999999992880361787684 0.845341000000000009073630735656 +0.0783240000000000047286619064835 0.260614000000000012313705610723 -1.38778399999999990654941939283 +0.0798360000000000041842085352073 -0.224330000000000001625366508051 -1.39402399999999992985522112576 +0.0799480000000000051718629379138 -0.30995400000000000728661575522 1.37751099999999992995469710877 +0.0810810000000000002939870569207 0.0941980000000000039506176108262 1.40874100000000002097522155964 +0.0815560000000000034914293678412 0.0721450000000000007949196856316 1.41001500000000001833200258261 +0.0819280000000000008242295734817 0.116210999999999994858335128356 1.40704800000000007642597665836 +0.0820140000000000035651481766763 0.0340140000000000025659474545137 -1.41142400000000001192290710605 +0.0826530000000000042437164893272 0.617250999999999994116706147906 -1.26971199999999995178256995132 +0.0833519999999999955386797978463 0.0501399999999999970712316610388 1.41086399999999989596233263001 +0.0840940000000000020818902157771 0.138096999999999997532640350073 1.40494000000000007766232101858 +0.0854729999999999934257033373797 -0.185677000000000008705924869901 1.39936400000000005228173449723 +0.0856470000000000009077183449335 0.595068000000000041360692648595 1.28006200000000003313971319585 +0.0864619999999999971906916584885 0.0282699999999999999900079927784 1.41128499999999990066612554074 +0.0866969999999999962891905624929 0.490472999999999992315480312755 1.32360100000000002751221472863 +0.0868680000000000007709388682997 0.798861999999999961019625516201 -1.16373199999999998865973793727 +0.0869019999999999931405980646559 -0.192688999999999999168664999161 -1.39832700000000009765699360287 +0.0874349999999999988320453780943 1.24964300000000005930189672654 -0.656313999999999952983387174754 +0.0875699999999999950661688785658 0.159770999999999996354915765551 1.40242800000000000792965693108 +0.0883430000000000048565595989203 1.12912900000000004929745500704 0.846913999999999944634510029573 +0.0885429999999999967075225981716 0.00196699999999999999844568776552 -1.41143799999999997041300048295 +0.0893339999999999967439379133793 0.708810999999999968856911891635 -1.22049399999999996779820321535 +0.0901600000000000040278891333401 0.370172999999999974285458392842 1.36192599999999996995825313206 +0.0905429999999999984838794375719 1.34364400000000006052403023205 0.431765999999999983138820880413 +0.0908719999999999944462203416151 0.00662000000000000001637578961322 1.41127500000000005719869022869 +0.0910740000000000021751489498456 -0.621613999999999999879207734921 1.26700499999999993683275079093 +0.0917170000000000068540728648259 1.00574300000000005361755484046 0.989983999999999975116793393681 +0.0920470000000000038165026694514 -0.160604999999999997761790382356 -1.40204599999999990345145306492 +0.0921919999999999961737273679319 1.40226500000000009471534667682 0.158597999999999988984811238879 +0.0923429999999999945314854699063 0.181147000000000002462030579409 1.39952100000000001500666257925 +0.0925030000000000018900436771219 -0.669660000000000033004710076057 -1.24217500000000002913225216616 +0.0927319999999999949880091776322 -0.555606000000000044281023292569 -1.29719000000000006522782314278 +0.0928889999999999993463006831007 -0.415009999999999990016874562571 -1.34875499999999992617460975453 +0.0931450000000000055688786915198 -0.0304070000000000000006661338148 -1.41081499999999993022470334836 +0.0934439999999999992841281937217 1.02448199999999989273646860966 -0.970415000000000027569058147492 +0.0949509999999999937392303195338 -0.530621000000000009322320693173 1.30745000000000000106581410364 +0.0952540000000000053326232318796 -0.128207999999999988638421655196 -1.40516499999999999737099187769 +0.0953259999999999940722972269214 -1.34501899999999996460076090443 0.426424000000000025245583401556 +0.0956440000000000067892358401878 -1.23486300000000004395417363412 0.682616000000000000547117906535 +0.0958029999999999992699173390065 -0.0629789999999999933200101054354 -1.40955900000000000638067376713 +0.0962179999999999979731768462443 -0.711122999999999949594098325178 1.21862399999999992949994975788 +0.0962250000000000049737991503207 -1.35216599999999997905320014979 -0.402975000000000027622348852674 +0.0964710000000000011954881529164 1.40565999999999990954790973774 -0.121714000000000002743583138454 +0.0965069999999999955653251504373 -0.0956229999999999996651567357731 -1.40767299999999995208099790034 +0.0965659999999999990594190535376 -0.0147229999999999999760191826681 1.41083599999999997898214587622 +0.096732999999999999540811757015 1.1469560000000000865583160703 -0.821666000000000007474909580196 +0.0969580000000000025162094630105 1.35380900000000004013145371573 -0.397241000000000010761169733087 +0.0976029999999999953175233713409 1.23276000000000007794653811288 0.686131999999999964146013553545 +0.0983170000000000016138201885951 0.228795999999999999374722392531 -1.39211599999999990906474067742 +0.0983939999999999953539386865486 0.202139999999999986357579473406 1.39623000000000008213874025387 +0.0995609999999999967235098097262 -1.40246300000000001517719283584 0.152265000000000011448619829935 +0.0997719999999999995754507153833 -1.07763600000000003831246431218 -0.91035500000000002529532139306 +0.100578000000000000735411731512 0.375018999999999991246113495436 -1.35986899999999999444355580636 +0.101555999999999993499422146215 -0.945331999999999950112794522283 1.04691599999999995773691807699 +0.1019739999999999952029483552 -1.40469500000000002692956968531 -0.128190999999999999392485960925 +0.102326000000000000289546164822 0.495406999999999986261656204078 -1.32064399999999992907362411643 +0.102596999999999993757882066348 -0.206739000000000006096456672822 1.39525399999999999423039298563 +0.102927000000000004598099678788 0.784271000000000051421977786958 1.17231599999999991368326845986 +0.103521000000000001906030888676 -0.035677000000000000379252185212 1.40996800000000011010570233339 +0.104399000000000005683453707661 -0.330687000000000008714806654098 1.37103899999999989667287536577 +0.105321999999999998953725821593 0.699470999999999953899987303885 1.22460100000000005060485364083 +0.105700000000000002287059430728 0.222668000000000004812150677935 1.39256800000000002803801635309 +0.106375999999999998335553641482 -1.07732099999999997308464116941 0.909980000000000011084466677858 +0.107630000000000003446132268436 0.390203999999999995296207089268 1.35504899999999994797406088765 +0.107952000000000006285638676218 -0.43954599999999999226929503493 1.33983000000000007645439836779 +0.10951800000000000423483470513 0.866385999999999989462651228678 1.11237699999999994915356182901 +0.10981599999999999694999530675 -1.28262800000000010136602668354 -0.585494999999999987672083534562 +0.110123999999999999666044914193 -0.797772999999999954390261791559 1.16250999999999993228527728206 +0.111485000000000000763833440942 0.509738000000000024414248400717 1.31443500000000002003730514843 +0.111507999999999996010302538707 -0.383072000000000023600676968272 -1.35676899999999989177013048902 +0.11171100000000000473932004752 -0.0561569999999999985851317774177 1.40867600000000003923616986867 +0.111763000000000001232791646544 -1.19007799999999996920507783216 -0.755793999999999965844210692012 +0.112240000000000006430411758629 -0.755168999999999979166886987514 -1.19042899999999995941379893338 +0.114229999999999998205879592206 0.242650000000000004574118861456 1.38855100000000009075051821128 +0.116222000000000005859313034762 -1.00264299999999995094412952312 -0.990554999999999963300467697991 +0.116388000000000005340616837657 0.19576399999999999357314095505 -1.39575500000000007894129794295 +0.116816000000000003167244244651 0.944011000000000044529713250085 -1.04651699999999991952392974781 +0.116829000000000002290612144407 0.613354999999999983550935667154 1.26891599999999993286792232539 +0.117127999999999996005861646609 1.31346000000000007190692485892 0.510982000000000047279513637477 +0.118370000000000002993161274389 1.38825899999999990974686170375 0.242332999999999992857269148772 +0.118452000000000001733724275255 1.28411499999999989540810929611 -0.580532999999999965723418426933 +0.118592000000000002968292278638 1.07533300000000009433165359951 0.91082099999999999173638798311 +0.119968000000000005189626506308 -0.524378000000000010771827874123 -1.30791199999999996350652509136 +0.120927999999999993829824518343 -0.226658999999999999364064251495 1.39068400000000003124966951873 +0.121101000000000000311750625315 -0.0760829999999999978532727595848 1.40696299999999996366284449323 +0.121453000000000005398348434937 -1.31504500000000001946887095983 0.505871999999999988339993706177 +0.122443999999999997285726749396 -1.18990700000000004799005637324 0.754406000000000021010748696426 +0.122726000000000001755040557327 -0.840084000000000052921222959412 -1.13101600000000002133049292752 +0.123258000000000006446398970184 1.40834499999999995800692431658 -0.0370479999999999976001419099703 +0.123553999999999997161381770638 0.586739000000000010537348771322 -1.28080900000000008631673154014 +0.123951000000000005618616683023 0.262006000000000016658674439896 1.38419300000000000672173428029 +0.123990000000000002988720382291 -0.923024999999999984368059813278 -1.06426099999999990153298767837 +0.124812000000000006272315999922 0.944482999999999961460162012372 1.0451660000000000394493326894 +0.125392000000000003456790409473 1.37291000000000007474909580196 -0.315267999999999992688515249029 +0.125472000000000000197175609173 1.18766900000000008574829735153 0.757429000000000018921753053291 +0.126001000000000001888267320282 -1.38868600000000008698464171175 0.235955999999999999072741729833 +0.126288000000000011358025631125 0.409021000000000023444357566405 1.34786999999999990151877682365 +0.126364000000000004098055228496 -1.37134500000000003616662525019 -0.321631000000000000227373675443 +0.126787000000000010802025940393 -0.639264999999999972146724758204 -1.25509500000000007169376203819 +0.127273999999999998244959442673 0.34218300000000001492850287832 -1.36627699999999996371968791209 +0.128151999999999988144594453843 -0.349932999999999994056310015367 -1.36423000000000005371703082346 +0.129774000000000000465405491923 -1.40756400000000003736033704627 -0.0438580000000000011506351427215 +0.130014999999999991686649991607 -0.349797000000000024577673229942 1.36408900000000010699352515076 +0.130667000000000005366374011828 1.19051400000000007217693109851 -0.752064999999999983515408530366 +0.130869000000000013095302620059 1.0759440000000000114965814646 -0.908414000000000054768634072389 +0.131655999999999995253574525123 -0.095376000000000002443378832595 1.40483800000000003116440439044 +0.131915000000000004476419235289 0.858675999999999994827248883666 -1.1159179999999999655102556062 +0.132230999999999987437604431761 -0.548695999999999961538321713306 1.29670599999999991425170264847 +0.132374999999999992672528037474 -0.880237000000000047172932227113 1.09893499999999999516830939683 +0.132464999999999999413802242998 0.161648999999999987142729196421 -1.39868600000000009586642590875 +0.133609000000000005536904268411 -0.638974999999999959676699745614 1.25453499999999995573318756215 +0.134660000000000001918465386552 -1.01930100000000001259081727767 0.971026999999999973489650528791 +0.134826000000000001399769189447 0.280660000000000020570212200255 1.37951099999999993173105394817 +0.135531000000000012573053709275 0.678664999999999962732033509383 -1.23330600000000001337241428701 +0.136080000000000006510347816402 0.462982999999999977891462776824 -1.32933400000000001561772933201 +0.137410000000000004360956040728 0.527310999999999974185982409836 1.30501399999999989631760399789 +0.138260999999999995013766351803 0.769776000000000015788259588589 -1.17827400000000004354205884738 +0.139770000000000005346834086595 -1.12440199999999990154719853308 -0.846276000000000028222757464391 +0.139917999999999986826537679008 -0.457637999999999989242382980592 1.33078600000000002445688096486 +0.140394999999999992024157791093 -0.245357999999999992768451306802 1.38567299999999993254107266694 +0.142659000000000008023803843571 -1.31196200000000007257483503054 -0.508333000000000034823699479603 +0.142756999999999995010213638125 -0.315722999999999975884179548302 -1.37110899999999991116794717527 +0.142886999999999986243892635684 0.715314000000000005385913937062 1.21157300000000001105604496843 +0.143251999999999990453858345063 1.27809299999999992358823419636 0.588181999999999982620124683308 +0.143333999999999989194421345928 -0.113961000000000006737721491845 1.40230800000000010996359378623 +0.143869999999999997886135361114 -0.727083999999999952557061533298 1.20442999999999988958165886288 +0.144080999999999986860288458956 1.36877399999999993518429164396 0.325112000000000012089884648958 +0.145244000000000011985079595433 -0.491381999999999985462295626348 -1.31812299999999993360688677058 +0.14573400000000000242827979946 0.799086999999999991750598837825 1.1576800000000000423483470513 +0.146059999999999995390354001756 0.426549000000000011478817896204 1.34041900000000002712852165132 +0.1464860000000000050945914154 0.126585000000000003073097332162 -1.40089899999999989432808433776 +0.146811999999999998056665617696 0.298538999999999998813393631281 1.37452599999999991453591974278 +0.147102000000000010526690630286 -1.27988100000000004641265149985 0.583323999999999953658402773726 +0.147948999999999997179145339032 -1.22868700000000008465406153846 -0.684428000000000036351366361487 +0.148373000000000004883204951511 1.01729300000000000281374923361 0.971133000000000023987922759261 +0.148761000000000004339639758655 -1.14025500000000001854516540334 0.82321800000000000530064880877 +0.148999999999999993560706457174 1.31351900000000010315659437765 -0.502461000000000046483705773426 +0.149082999999999993301358358622 0.629530999999999951732831959816 1.25756299999999998640021203755 +0.149558999999999997498889570124 1.40547200000000005459810381581 0.0477640000000000009006129175759 +0.151820000000000010498268920855 -0.724408000000000051876725137845 -1.20506599999999997052668732067 +0.151945999999999997731592316086 -1.36942800000000008964207154349 0.318715000000000026059154834002 +0.151981000000000004979128220839 0.307696000000000025043078721865 -1.37194199999999999484145973838 +0.15284700000000001063327204065 1.13789199999999990353671819321 0.825736000000000025522695068503 +0.153330999999999995075938841183 1.38659400000000010422240848129 -0.232049000000000005261568958304 +0.155264000000000013113066188453 -0.280577999999999994074073583761 -1.37737799999999999123190264072 +0.156005000000000004778399897987 -1.3851109999999999811137740835 -0.239017000000000007231548693198 +0.156088000000000004519051799434 -0.131762999999999991240784424917 1.39938399999999996126121004636 +0.156693999999999999950262008497 -0.367207000000000005623945753541 1.35668900000000003380762336747 +0.157062000000000007160494419622 -1.404876999999999931389993435 0.0406479999999999966342478785464 +0.157414999999999999369393322013 0.879496999999999973240960571275 1.09622400000000008724043709663 +0.15766600000000000059152682752 0.998268999999999961936225645331 -0.989241999999999954695795167936 +0.158394000000000007011280445113 0.090712000000000000965449942214 -1.40238499999999999268140982167 +0.159139000000000002676969756976 -0.606636999999999981803000537184 -1.26754300000000008630252068542 +0.159853999999999996095567666998 -1.05229599999999989812238254672 -0.931192000000000019710455489985 +0.159860000000000002096101070492 0.315572000000000019159784869771 1.36925500000000011091572105215 +0.160920000000000007478462293875 -0.262761999999999995569766042536 1.38023899999999999366195879702 +0.162410999999999999809929818184 -0.957257000000000024542146093154 1.02824200000000010035705599876 +0.162594999999999989537258215933 0.553633999999999959484853206959 -1.29114400000000006940581442905 +0.162672000000000011032952329515 -0.811668999999999973837816469313 1.14661699999999999732835931354 +0.164085000000000008624212455288 1.22937399999999996680344338529 -0.67949599999999998889421704007 +0.164368999999999987338128448755 0.543120999999999964913399708166 1.29537700000000000066791017161 +0.165623999999999993448795976292 -0.244634999999999991349142192121 -1.38301199999999990808419170207 +0.166867999999999988558485597423 0.442720999999999975660358586538 1.33272400000000001973887719942 +0.167615999999999987224441611033 -0.809656000000000042327030769229 -1.14732799999999990347987477435 +0.167777000000000009460876526646 1.12316100000000007597122930747 -0.842829000000000050363269110676 +0.167865999999999987446486215958 0.428443000000000018268053736392 -1.33725699999999991796073572914 +0.168142999999999986915355520978 0.0541700000000000028710367416807 -1.4031370000000000786144482845 +0.168460999999999999632294134244 -0.456747999999999987341681162434 -1.32778100000000010005862804974 +0.168808999999999986840748533723 1.23768100000000003113598268101 0.66305999999999998273381152103 +0.169223000000000012299494756007 1.34388700000000005374545253289 0.406608999999999998209432305885 +0.169570999999999999507949155486 0.0929249999999999937161376806216 1.40093200000000006610889613512 +0.169868999999999992223109757106 -0.148714000000000012846612662543 1.39607600000000009465850325796 +0.169928999999999996717292560788 0.0763100000000000028288482667449 1.40189199999999991597121606901 +0.170208999999999999186428567555 0.109511999999999998234301301636 1.39965600000000001124078607972 +0.170473999999999986654231065586 -0.564304999999999945536899303988 1.28549500000000005428546501207 +0.171281999999999989814369882879 0.0597289999999999973723241453172 1.40253199999999988989429766661 +0.171444999999999986295406984027 -0.974948000000000036813219139731 -1.00999200000000000088107299234 +0.171840999999999993752552995829 0.126003000000000003888445121447 1.3980680000000000884341488927 +0.172169999999999989714893899873 -1.23966599999999993464427916479 0.658472999999999974996001128602 +0.172864999999999990887289413877 -0.473613000000000006206590796864 1.3212900000000000755306928113 +0.173625000000000001554312234475 0.0432509999999999977804421291694 1.40284800000000009490008778812 +0.173796000000000006036060540282 -0.208038000000000000699884594724 -1.38799000000000005705658168154 +0.173918999999999990269117233765 0.331691999999999986847853961081 1.36372000000000004327205260779 +0.174121999999999998998134742578 -0.8936250000000000026645352591 -1.08218100000000005955769211141 +0.174461000000000004961364652445 0.142333999999999988306242926228 1.39617499999999994386712387495 +0.174491000000000007208456054286 -1.08610300000000004061462277605 0.888781999999999960948571242625 +0.174603000000000008196110456993 0.271695000000000019824142327707 -1.37684300000000003905142875738 +0.174940000000000012159162565695 -1.33611900000000005661604518536 -0.429165000000000018687273950491 +0.175269000000000008121503469738 1.39705199999999996052224560117 0.132388000000000005673683745044 +0.17569399999999998907007636717 0.0171040000000000011470824290427 -1.40315300000000009461587069381 +0.176440999999999986735943480198 0.91510199999999997100275095363 -1.06370000000000008988365607365 +0.176947999999999994180654994125 0.026938000000000000139221967288 1.40284100000000000463273863716 +0.177050000000000012922996006637 -0.653525000000000022559731860383 1.24159500000000000419220214098 +0.177289000000000002144062705156 -1.3447659999999999058672983665 0.400216999999999989423571378211 +0.177569000000000004613198711922 0.955238000000000031519675758318 1.02761300000000010967937669193 +0.178056999999999993056221114784 0.158439999999999997504218640643 1.39398399999999988985166510247 +0.178961000000000008958167541095 1.33773900000000001142552719102 -0.422406000000000003691269512274 +0.179216999999999987425169933886 -1.16673099999999996256860868016 -0.778857000000000021522339466173 +0.1796179999999999998827604486 1.08362300000000000288480350719 0.890785000000000048991921630659 +0.179746999999999990116350545577 -0.170929999999999998605559881071 -1.39229099999999994530242020119 +0.179884999999999989350740747795 0.645576000000000038703262816853 -1.24533999999999989150012424943 +0.180664999999999992263965964412 1.39480500000000007254641332111 -0.147915999999999991931787235444 +0.181017000000000011228351581849 -0.0203400000000000004407585407762 -1.40243300000000004068567704962 +0.181239000000000011203482586097 0.0108559999999999993308685830584 1.40250999999999992340349308506 +0.181374000000000007437606086569 0.728634000000000003893774191965 1.19841400000000009029577086039 +0.182284000000000001584510300745 0.643533000000000021678658868041 1.24604899999999996218491560285 +0.182423000000000001818989403546 -0.278803000000000023028690065985 1.37440600000000001656985659793 +0.182616000000000000547117906535 0.174257999999999996232347143632 1.39150499999999999189981281233 +0.183456000000000007954525926834 -0.133457999999999993301358358622 -1.39589900000000000090949470177 +0.183548999999999989940491218476 -1.26244599999999995709742961481 -0.610361000000000042398085042805 +0.183729000000000003423039629524 -1.39664600000000005408651304606 0.124993000000000006877165503738 +0.184092000000000005632827537738 -0.058014000000000003065547815595 -1.40097999999999989206855843804 +0.18433199999999999585398313684 -0.382848000000000021625368162859 1.34887000000000001342925770587 +0.18462200000000000832400814943 -0.164745000000000002549072064539 1.39239899999999994228971900156 +0.184905999999999987037924142896 -0.0957699999999999940225592354182 -1.39879899999999990356513990264 +0.185030000000000000026645352591 -1.39341200000000009495693120698 -0.15545999999999998708588577756 +0.1864790000000000058655302837 -0.00493099999999999961952656946096 1.40185599999999999099031811056 +0.18664300000000000334665628543 0.827702000000000048807180519361 -1.13140299999999993652011198719 +0.187873000000000012210676914037 0.737400999999999973155695442983 -1.19203299999999989822185852972 +0.188120000000000009432454817215 0.189725000000000004751754545396 1.38874600000000003596767328418 +0.188630999999999993121946317842 0.457471999999999989761079177697 1.32481599999999999361932623287 +0.188934999999999991837640322956 0.346835000000000004405364961713 1.35794299999999990014032391628 +0.189397000000000009789502541935 0.811038999999999954404472646274 1.14295400000000002549427335907 +0.189428999999999986281196129312 -0.691065999999999958092189444869 -1.21923899999999996168753568782 +0.189431999999999989281462831059 -0.571904999999999996695976278716 -1.27946800000000004970956979378 +0.189521999999999996022737036583 -0.89143600000000000616040551904 1.08139899999999999913313786237 +0.189528000000000002023270440077 -0.420611000000000012644107982851 -1.33684899999999995401367414161 +0.19225600000000001021938089707 0.557107000000000018857804207073 1.28556200000000009353584573546 +0.192326999999999997958965991529 -0.739897000000000026886937121162 1.18977400000000010926726190519 +0.192649999999999987920773492078 -0.020362000000000001626032641866 1.40088199999999996059329987474 +0.19369700000000000805755462352 1.3136969999999998925943600625 0.486499999999999988009591334048 +0.193701000000000012057910225849 1.19238500000000002820854660968 0.735322000000000031150193535723 +0.194547999999999998710364934595 0.20477999999999998981259352604 1.38571899999999992303401086247 +0.195049000000000000154543045028 0.234320000000000000506261699229 -1.38095999999999996532551449491 +0.196558000000000010487610779819 -1.19455800000000000871125394042 0.731024000000000007126743639674 +0.196856000000000003202771381439 1.26338200000000000500222085975 -0.604245999999999949814366573264 +0.197558000000000011375789199519 0.391921999999999992603250120737 -1.34438400000000002343369942537 +0.19789399999999998658317679201 1.04858800000000007557332537544 -0.92806299999999997130117890265 +0.199532999999999988149923524361 -1.02766399999999991088373008097 0.950837999999999960998309234128 +0.199622999999999994891197729885 0.518066000000000026481927761779 -1.30067599999999994331290054106 +0.199725000000000013633538742397 -0.0353759999999999977249309779381 1.39959199999999994723509644245 +0.200287999999999993816501842048 -0.179793000000000008364864356736 1.38836599999999998900079845043 +0.200287999999999993816501842048 1.38311899999999998733812844876 0.216488999999999987000620649269 +0.20187299999999999688959917421 0.219364000000000003431921413721 1.38243500000000008043343768804 +0.201934000000000002383870878475 -1.31479600000000007575806648674 0.480138999999999982470910708798 +0.202854000000000006531664098475 -1.09779699999999991177901392803 -0.868155000000000010018652574217 +0.204022000000000008901324122235 1.16594500000000000916600129131 -0.773916999999999966064478940098 +0.204819000000000001060485033122 -0.293418000000000012139622640461 1.36819399999999991024424161878 +0.204847000000000001307398633799 0.36094199999999998507149712168 1.35194600000000009210054940922 +0.205680000000000001714184350021 1.02507799999999993367794104415 0.952317999999999997839950083289 +0.206063999999999997170263554835 0.889414000000000037893244098086 1.08003699999999991376853358815 +0.206528999999999990366816859932 -1.35500200000000003974776063842 -0.348302999999999973734787772628 +0.206664999999999987601029260986 -0.487408000000000007911893362689 1.31138200000000004763478500536 +0.207285999999999998033572978784 1.39751099999999994771826550277 -0.0631980000000000041726622157512 +0.207678000000000001490363388257 -0.049912999999999999034550057786 1.39799099999999998367172793223 +0.208216000000000012182255204607 1.35668000000000010807355010911 -0.340683999999999986840748533723 +0.208359999999999989661603194691 -0.383116000000000012093437362637 -1.3452910000000000145803369378 +0.209529999999999994031441019615 -0.577386999999999983579357376584 1.27386099999999991005950050749 +0.209671999999999997266186824163 -1.382902999999999993363530848 0.208846000000000003860023412017 +0.210067000000000003723243935383 0.233419999999999988604670875247 1.37890800000000002256683728774 +0.210539000000000003920419544556 -0.776298000000000043563375129452 -1.16320000000000001172395514004 +0.211261000000000004339639758655 0.470743999999999995775823435906 1.31672699999999998077271357033 +0.212818000000000007165823490141 -0.396660000000000012576606422954 1.34065999999999996283861491975 +0.213241000000000013869794202037 0.195720000000000005080380560685 -1.38427699999999997970689946669 +0.213324999999999986854959388438 -1.39621299999999992635935086582 -0.0712900000000000061417537722264 +0.215884999999999993569588241371 -0.822096999999999966668440265494 1.13028799999999995939958807867 +0.216298999999999991272758848027 0.655306000000000055116800012911 1.23441800000000001524824710941 +0.21647700000000000275512945791 -0.0639160000000000005915268275203 1.39608500000000002039257651631 +0.216805999999999998717470361953 -0.193800000000000000044408920985 1.38399300000000002874855908885 +0.217406999999999989148236068104 1.27832199999999995831956312031 0.564470999999999945018203106883 +0.217544999999999988382626270322 -0.535205999999999959548802053177 -1.29082499999999988915533322142 +0.217827999999999993852028978836 1.14238299999999992628829659225 0.804682000000000008377298854612 +0.21795600000000001084110579086 -1.20445599999999997109512150928 -0.708365000000000022417623313231 +0.218224000000000001309174990638 -1.02302300000000001567457275087 -0.951737000000000055166538004414 +0.218425000000000008038014698286 -1.29122300000000000963495949691 -0.533884000000000025210056264768 +0.219096999999999986208365498896 0.24689099999999999934807703994 1.37515100000000001223554590979 +0.22017000000000000459188242985 -1.1447359999999999757847035653 0.80069000000000001282529638047 +0.220269999999999993578470025568 0.967914999999999969837460866984 -1.00728400000000006819789177825 +0.2206319999999999947881690332 0.739380000000000037196912217041 1.18517500000000008952838470577 +0.220960999999999990750509937243 0.569212999999999968991915011429 1.27560699999999993536903275526 +0.221223000000000002973621349156 -0.665205000000000046256332097983 1.22823499999999996568078586279 +0.221593000000000012184031561446 0.373956999999999983863574470888 1.34575399999999989475440997921 +0.222224000000000004861888669438 0.609674999999999966959762787155 -1.25654799999999999826627572475 +0.222331000000000000849098569233 -0.860948999999999964316543810128 -1.09969899999999998208011220413 +0.223787000000000013688605804418 -0.96516999999999997239541471572 1.00914100000000006573941391252 +0.224515999999999993352872706964 1.36372699999999991149479683372 0.2997360000000000024300561563 +0.224830000000000002069455717901 -0.943640000000000034319214137213 -1.02907499999999996198596363683 +0.224885000000000001563194018672 -0.344407999999999991924681808086 -1.35307400000000010997780464095 +0.224918000000000006810552122261 -0.655275000000000051869619710487 -1.23289300000000001666933258093 +0.225038999999999989043431014579 0.353563999999999989398702382459 -1.35068499999999991345589478442 +0.225782000000000010464518140907 -1.279638000000000053191229199 0.558166999999999968729014199198 +0.226087000000000010180301046603 -0.0773299999999999959632290824629 1.39388099999999992562038642063 +0.228017999999999998461674977079 -0.306547999999999987164045478494 1.36162999999999989597654348472 +0.22884999999999999786837179272 1.29240400000000010827250207512 -0.526611000000000051279869239806 +0.228928999999999993608668091838 0.259724999999999983657517077518 1.37118000000000006544098596351 +0.229104000000000002090771999974 0.156046999999999991270982491187 -1.38678100000000004143885234953 +0.230930999999999997385202732403 0.962488000000000010203393685515 1.01009299999999990760102264176 +0.233089999999999991642241070622 1.39470200000000010831513463927 0.0217690000000000001556532680524 +0.23374500000000000832223179259 0.82008000000000003115729896308 1.12819899999999995188204593433 +0.234111000000000013532286402551 -0.206710000000000004849454171563 1.37929799999999991300114743353 +0.234287999999999996258992496223 0.882361999999999979671372329904 -1.08006800000000002803801635309 +0.234491000000000004988010005036 0.480175999999999991718624414716 -1.30936800000000008736833478906 +0.234670999999999990714982800455 0.482484000000000023966606477188 1.308486999999999955690554998 +0.234786999999999995702992805491 -1.36370199999999996975930116605 0.291874000000000022314594616546 +0.235506999999999994122035218425 0.701865999999999989888976870134 -1.2049570000000000558060264666 +0.236470000000000013518075547836 -0.0901020000000000015338841308221 1.3913889999999999869118028073 +0.23664799999999999724487054209 1.37026699999999990176036135381 -0.25761699999999998489386143774 +0.237303999999999987169374549012 -1.36853699999999989245225151535 -0.266066999999999997950084207332 +0.23734099999999999641708825493 1.09476799999999996337862739892 -0.863222000000000044828141199105 +0.239035999999999998477662188634 -0.304642999999999997129407347529 -1.36016699999999990389198956109 +0.239106999999999986217247283093 0.385828000000000004288125410312 1.33939000000000008050449196162 +0.23946300000000000918198850286 1.20412699999999994737720498961 -0.701949999999999962874142056535 +0.239473999999999992427390793637 0.793227000000000015411671938637 -1.1460559999999999636344227838 +0.23952200000000001267608240596 0.271872000000000002550848421379 1.36701000000000005840661287948 +0.240257999999999999340971612583 1.2379020000000000578666004003 0.640214999999999978541609380045 +0.240776999999999991031174317868 -1.39350400000000007594280759804 0.0131620000000000000883737527602 +0.241096000000000004748201831717 1.08787199999999995014832165907 0.870866000000000028968827336939 +0.241184000000000009489298236076 -0.498968999999999995864641277876 1.30109900000000000552802248421 +0.241395999999999999463540234501 -0.749512999999999984801490882091 1.17471600000000009345058060717 +0.242041000000000006142641950646 -0.408588000000000006739497848685 1.33209299999999997154986886017 +0.242577999999999988078869250785 0.115458000000000005069722419648 -1.38846200000000008500933290634 +0.242913999999999991041832458905 -1.09039700000000006063771706977 0.867195999999999966867392231507 +0.243368000000000000992983473225 -0.496684000000000014374279544427 -1.30156699999999991845811564417 +0.245053999999999994052757301688 -1.13896500000000000518696197105 -0.80169000000000001371347480017 +0.247156999999999987815968438554 -0.898866999999999971571185142238 1.06346199999999990737364896631 +0.247586000000000000520472553944 -0.102180999999999994054533658527 1.38861799999999990795629400964 +0.247858999999999995988986256634 1.33895300000000005979927664157 0.381799999999999972732922515206 +0.248737999999999986888710168387 -1.23942899999999989191223903617 0.633990999999999971237230056431 +0.249245999999999995333510582896 -0.5878889999999999949054085846 1.26184899999999999842259512661 +0.250199000000000004728661906483 0.313522000000000022890134232512 -1.35613600000000000811439804238 +0.250371000000000010210499112873 0.579392000000000018111734334525 1.26555100000000009252687505068 +0.250757000000000007666756118851 -0.263975000000000015187850976872 -1.36654199999999992343191479449 +0.25083600000000000340705241797 0.283281999999999978268050426777 1.36265700000000000713384906703 +0.250995000000000023643309532417 0.664803000000000032798652682686 1.22271700000000005381650680647 +0.251323999999999991850074820832 -0.740141000000000048864023938222 -1.17856999999999989547916356969 +0.251931000000000016036949546105 -0.31814199999999998036415149727 1.35473799999999999776889580971 +0.252134000000000024765967054918 -0.218470999999999998530952893816 1.37429899999999993731591985124 +0.252439999999999997726263245568 -1.31490499999999999047872734081 -0.455301000000000011258549648119 +0.253608000000000000095923269328 0.0741119999999999973239184214435 -1.38931300000000002015099198616 +0.255269999999999996909139099444 0.89609899999999997888266989321 1.06388100000000007661071776965 +0.255834999999999979092280000259 -1.23742700000000005466915808938 -0.635077000000000002621902694955 +0.25731900000000001993427645175 0.396509000000000000341060513165 1.33287899999999992495247624902 +0.257392000000000009674039347374 0.0912869999999999931494798488529 1.38759399999999999408828443848 +0.257630999999999998895106045893 0.0801729999999999942694728360948 1.3882360000000000255226950685 +0.2578190000000000203783656616 0.102380999999999999783284465593 1.38674000000000008370193427254 +0.257971999999999979102938141295 1.38638900000000009349321317131 0.106650999999999995804245145337 +0.258147999999999988585130950014 -0.617174000000000000376587649953 -1.24597500000000005471179065353 +0.258535999999999988041565757158 0.0690830000000000055138116294984 1.38866299999999998071587015147 +0.258767000000000024773072482276 0.492647000000000001573852159709 1.30013000000000000788702436694 +0.258909999999999973496755956148 0.113410999999999997922550676321 1.38567799999999996529709278548 +0.258975000000000010746958878372 -1.33912000000000008803624496068 0.373750000000000026645352591004 +0.259390000000000009450218385609 -0.113519999999999995909938377281 1.38557899999999989404386724345 +0.259940000000000004387601393319 1.31632600000000010709300113376 -0.446896999999999988695265074057 +0.260004000000000012882139799331 -0.222566999999999987069898566006 -1.37217400000000000481747974845 +0.260102999999999973113062878838 0.0580610000000000014974688156144 1.38887500000000008171241461241 +0.260504000000000013326229009181 0.747507999999999950269113924151 1.17190799999999994973620687233 +0.260662000000000004806821607417 0.124334000000000000074606987255 1.38441199999999997594102296716 +0.26215100000000002289368694619 0.0321730000000000002091660178394 -1.3893310000000000936637434279 +0.262162000000000006139089236967 1.19259599999999998942712409189 0.713431999999999955086593672604 +0.262326000000000003620215238698 0.0471499999999999974686915038546 1.38887099999999996668975654757 +0.262378999999999973358200122675 0.571103999999999945025308534241 -1.26688500000000003886668764608 +0.262824999999999975308639932337 0.293910999999999977827513930606 1.3581380000000000674020839142 +0.263068000000000024041213464443 0.135107000000000004868994096796 1.38294699999999992634514001111 +0.263230000000000019522161665009 1.01690900000000006286882126005 -0.946891999999999955939244955516 +0.263411999999999979493736645964 1.0290680000000000937632194109 0.933613000000000026190605240117 +0.264141000000000014669154779767 -1.06705999999999989746868322982 -0.88972600000000001685407369223 +0.264147000000000020669688183261 1.37844600000000006012612630002 -0.173533999999999993812949128369 +0.264699000000000017607248992135 -1.03175400000000005995559604344 0.930278999999999967052133342804 +0.265195999999999987295495884609 0.0363930000000000017368328997236 1.38864900000000002222577677458 +0.265954000000000023717916519672 -0.673970999999999986762588832789 1.21450900000000006073719305277 +0.266116999999999992443378005191 0.145687000000000010935252703348 1.38128800000000007131006896088 +0.26673799999999997512034610736 -0.180580999999999991523225162382 -1.37704099999999995951327491639 +0.266799999999999981614706712207 -0.456490999999999980119014253432 -1.31165299999999995783639406 +0.267062000000000021593393739749 0.440114000000000005208278253122 -1.31718599999999996796873347193 +0.267141999999999990578203323821 -1.37667300000000003556976935215 -0.182780999999999999028332808848 +0.267280000000000017568169141668 -1.38529600000000008286349384434 0.0975619999999999959472418709083 +0.26817499999999999671373984711 -0.010193999999999999936384220689 -1.38851700000000000123634436022 +0.268425999999999997935873352617 -0.825123999999999968579800224688 -1.11674399999999995891641901835 +0.2687010000000000231601404721 0.0258339999999999993252064456328 1.38821200000000000152056145453 +0.26955299999999998705746406813 -0.829015999999999975145215103112 1.11358599999999996477129116101 +0.269799000000000011034728686354 0.156033000000000005025313498663 1.37944299999999997474731117109 +0.270222999999999990983212683204 1.30889499999999991963761658553 0.462357000000000017969625787373 +0.270712999999999981426412887231 -1.19432899999999997397992501647 0.707313999999999998280486579461 +0.270805000000000017923440509549 -0.229037999999999991596055792797 1.36901600000000001067235189112 +0.270934000000000008157030606526 -0.138183000000000000273558953268 -1.3811230000000001005844296742 +0.271652999999999977820408503248 -0.0528209999999999998965272141049 -1.38687200000000010469136668689 +0.271836000000000022058799231672 -0.124073000000000002729372283738 1.38228499999999998593125383195 +0.27188499999999998779642851332 -0.418584000000000011620926443356 1.32320299999999990703258845315 +0.27257399999999998296829062383 -0.0955399999999999999245048343255 -1.3844039999999999679403117625 +0.272828000000000014946266446714 0.0155119999999999997469801726879 1.38755999999999990457411058742 +0.272940999999999989178434134374 0.271952000000000027046809236708 -1.36071499999999989682919476763 +0.273959000000000008068212764556 1.23755799999999993588062352501 -0.627214000000000049261927870248 +0.274098000000000008302691867357 0.166103000000000000646593889542 1.37741800000000003123545866401 +0.274650999999999978484765961184 -0.989931000000000005378808509704 -0.971906999999999965389463341126 +0.275442999999999993399057984789 0.303717000000000014736656339664 1.3534720000000000084128259914 +0.275851000000000012857270803579 1.13662799999999997169197740732 -0.794973000000000040721204186411 +0.276158999999999987817744795393 0.405957000000000012285283901292 1.3262480000000000934790023166 +0.276166999999999995818456000052 -0.908842999999999956450835725263 -1.04772899999999991038635016594 +0.276285000000000002806643806252 -0.508251000000000008327560863108 1.29048300000000004672529030358 +0.276461999999999985533349899924 -0.328154999999999974491515786212 1.34754700000000005033484740125 +0.27756100000000000216360263039 0.00547000000000000003580469254416 1.38669700000000006845368716313 +0.278602000000000016299850358337 0.826173000000000046227910388552 1.11347100000000009956124813471 +0.278996999999999995001331853928 0.175857999999999986551202368901 1.37522199999999994446397977299 +0.280368999999999979344522671454 0.58760299999999998643573917434 1.25543500000000007865708084864 +0.280974999999999974775732880516 0.663310999999999983955945026537 -1.21699299999999999144506546145 +0.281007999999999980023090984105 0.933540000000000036450842344493 -1.02446900000000007402434221149 +0.28183799999999997742960999858 1.37260500000000007503331289627 0.191111000000000003096189971075 +0.282142000000000003900879619323 -1.30925300000000000011368683772 0.454151000000000026890489834841 +0.282880000000000020321522242739 -0.00425299999999999983613108156533 1.38562600000000002431477241771 +0.28303099999999997704591692127 1.14258400000000004403943876241 0.783834000000000030716762466909 +0.283453999999999983749887633167 0.501191000000000053127280352783 1.29168900000000008709832854947 +0.284478000000000008640199666843 0.185259000000000007002398660916 1.37286200000000002674482857401 +0.284687999999999996614263864103 0.966203000000000034042102470266 0.992674999999999974065190144756 +0.284874999999999989341858963598 -0.133800000000000002264854970235 1.37874699999999994481925114087 +0.285438999999999998280486579461 -0.969037999999999954958695980167 0.989690999999999987402077294973 +0.285457999999999989526600074896 -1.33339699999999994339816566935 -0.374921000000000004259703700882 +0.286235000000000017195134205394 0.671987000000000000987654402707 1.21099200000000006838263288955 +0.286287000000000013688605804418 -1.17563799999999996082067355019 -0.732063000000000019262813566456 +0.287746000000000001772804125721 -0.414787000000000016797230273369 -1.3210429999999999672866124456 +0.288638999999999978918197029998 0.312661999999999995480948200566 1.34867699999999990367882674036 +0.288766000000000022662760557068 -0.0136200000000000001620925615953 1.38435100000000010922462934104 +0.288988000000000022637891561317 -0.576915999999999984382270667993 -1.25843299999999991278798461281 +0.289463000000000025835333872237 -0.595770000000000021778134851047 1.24950800000000006306777322607 +0.289810000000000012043699371134 -0.701326000000000004952482868248 -1.19337800000000004985167834093 +0.290005000000000012772005675288 1.33505300000000004523315055849 -0.365420000000000022577495428777 +0.290049000000000001264766069653 -0.238368999999999997552180275306 1.36346999999999995978328115598 +0.290129000000000025760726884982 0.845921999999999951747042814532 -1.0955550000000000565592017665 +0.290198000000000011500134178277 0.755386000000000001897149104479 -1.15981800000000001560351847729 +0.290517999999999998461674977079 0.194269999999999998241406728994 1.37034999999999995701216448651 +0.290603000000000000202504679692 1.38118399999999996730082330032 -0.08876499999999999668265360242 +0.290885000000000004671818487623 -0.755893000000000037097436234035 1.15931500000000009542588941258 +0.291520999999999974594544482898 1.27367099999999999759836555313 0.541089999999999959889862566342 +0.291619000000000017092105508709 -1.14451600000000008883205282473 0.777845000000000008633094239485 +0.292704999999999992965626915975 -1.2655149999999999455013721672 -0.559281999999999945849538107723 +0.292727000000000014967582728787 -1.37162000000000006139089236967 0.181576999999999988411047979753 +0.293173999999999990162535823401 0.229020000000000001350031197944 -1.3644039999999999501767433685 +0.295192999999999983185006158237 -0.0225920000000000009698908343125 1.3828769999999999118500682016 +0.295551000000000008149925179168 0.41413600000000000411759515373 1.31952300000000000146371803567 +0.29592600000000002236077989437 -1.37937400000000010003020634031 -0.0987729999999999996873611962656 +0.29709400000000002473043991813 0.202854000000000006531664098475 1.3676930000000000475779415865 +0.297208000000000027718272122002 0.398036999999999974164666127763 -1.32409799999999999720046162111 +0.29845500000000002582822844488 -0.142662000000000011024070545318 1.37498100000000000875388650456 +0.300190999999999985625720455573 0.530013999999999985135445967899 -1.27631099999999997329780399014 +0.300833999999999990304644370553 0.752987999999999990663468452112 1.15866699999999989145749168529 +0.301514000000000004231281991451 -0.336544999999999983053555752122 1.34008499999999997065458501311 +0.30213899999999999090860569595 -0.0311339999999999984814369469177 1.38121099999999996654764800041 +0.302232999999999973894659888174 -0.426607999999999987217336183676 1.31402400000000008084555247478 +0.302362000000000019639401216409 0.320709000000000021834978269908 1.34377199999999996649080458155 +0.302783000000000024343194127141 1.08806300000000000238742359215 0.851141999999999954162888116116 +0.304180000000000005933031843597 0.210977999999999998870237050141 1.36490399999999989510968134709 +0.304194999999999993178789736703 -1.27421899999999999053557075968 0.532760000000000011333156635374 +0.304590000000000027391422463552 1.35340299999999991165111623559 0.274816999999999977966069764079 +0.304840999999999973102404737801 0.899525000000000019007018181583 1.0478199999999999736388645033 +0.305053000000000018587797967484 -0.902499999999999968913755310496 1.04519699999999993167421052931 +0.305151999999999978818721046991 1.06189000000000000056843418861 -0.8827639999999999931290517452 +0.306124999999999980460074766597 -0.371734999999999982112086627239 -1.32969899999999996431654381013 +0.30737399999999998057020889064 1.26610399999999989617549545073 -0.550001999999999990897947554913 +0.308634999999999992681409821671 0.508083999999999980090592544002 1.28319699999999992101606949291 +0.309016000000000012892797940367 -1.10688699999999995426946952648 -0.824203000000000018943069335364 +0.309574000000000015830892152735 -0.0392139999999999988578025522656 1.37935699999999994425081695226 +0.309790999999999983050003038443 -0.246426000000000006151523734843 1.35768299999999997318411715241 +0.310817999999999983185006158237 0.184894000000000002792432951537 -1.36718899999999998762234554306 +0.310836000000000001186606368719 0.593813999999999952983387174754 1.24529700000000009829648206505 +0.311068000000000011162626378791 -0.679787000000000030119906568871 1.20046900000000000829913915368 +0.311375000000000012878587085652 -1.09018499999999995964117260883 0.845306000000000001826094830903 +0.31166800000000000059330318436 1.23341999999999996084909525962 0.617686999999999986066256951744 +0.311746999999999996333599483478 0.218609999999999998765431996617 1.36199200000000009147527180176 +0.311829000000000022829738099972 -0.515217000000000036052938412467 1.27957600000000004669686859415 +0.312226000000000003531397396728 -0.786294000000000048444803724124 -1.13325100000000000832756086311 +0.312522999999999995246469097765 -0.150624000000000007881695296419 1.3709999999999999964472863212 +0.313271999999999994912514011958 1.17400199999999999000976913521 -0.723588000000000008959943897935 +0.315417999999999976168396642606 0.421011999999999997346122881936 1.31272999999999995246469097765 +0.315912999999999999367616965174 1.37847199999999991959498402139 -0.00364700000000000006811218256075 +0.316556999999999977291054165107 0.327828000000000008284928298963 1.33877599999999996605026808538 +0.317020000000000023998580900297 -1.35253099999999992775201462791 0.264875000000000027089441800854 +0.31731500000000001371347480017 -0.534658999999999995367261362844 -1.27021699999999992947152804845 +0.317348999999999992205346188712 -1.34662700000000001843147856562 -0.293061999999999989174881420695 +0.317469000000000001193711796077 -0.0467979999999999993209875981393 1.37732499999999991047161529423 +0.318925000000000014033219031262 1.34851000000000009748646334629 -0.282501000000000002110311925207 +0.319767000000000023440804852726 0.225719000000000002970068635477 1.35897000000000001129762949859 +0.3213400000000000145128353779 1.02924700000000002297895207448 0.915090999999999987757348662853 +0.32186500000000001220357148668 -0.327506000000000019323209698996 -1.33758799999999999918998128123 +0.321879000000000026204816094832 0.676830000000000042703618419182 1.19928900000000004943956355419 +0.323388999999999982026821498948 -1.03231500000000009364953257318 -0.910904000000000046988191115815 +0.323463000000000000522248910784 -0.832399000000000000021316282073 1.09657800000000005269384928397 +0.323541999999999996262545209902 -1.37663099999999993805488429643 -0.0143759999999999998898658759572 +0.323790999999999995484500914245 0.829296999999999950858864394831 1.09882999999999997342570168257 +0.324097999999999997200461621105 0.621887999999999996347810338193 -1.22809400000000001895728019008 +0.324807999999999985618615028216 0.35411100000000000909139430405 -1.33007699999999995377208961145 +0.325046999999999974839681726735 -1.2341549999999998910027443344 0.609265999999999974257036683412 +0.325253999999999987569054837877 -0.870693999999999967975838899292 -1.06588100000000007838707460905 +0.325793999999999972505548839763 -0.0538570000000000020934365352332 1.37512100000000003774403012358 +0.325803999999999982506437845586 0.139748000000000011100453889412 -1.36905900000000002592059900053 +0.325846000000000024510171670045 -0.660008999999999956820317947859 -1.20756499999999999950262008497 +0.326141000000000014225065569917 1.32886100000000006993161605351 0.3574379999999999779625170504 +0.32639000000000001344702127426 -1.20767000000000002124522779923 -0.659545999999999965623942443926 +0.326618999999999992667198966956 0.981033000000000043883119360544 -0.964828000000000018943069335364 +0.326988999999999974122033563617 -0.343281999999999976047604377527 1.33237999999999989775290032412 +0.327023000000000008125056183417 -0.157654999999999989590548921115 1.36682100000000006367883997882 +0.328205999999999997740474100283 0.232278000000000012237322266628 1.35584900000000008191136657842 +0.328419000000000016470380614919 -1.28860799999999997567101672757 -0.481279999999999985593746032464 +0.32891500000000001291411422244 -0.953150000000000052757798130187 -0.991624999999999978683717927197 +0.329901999999999973045561318941 -1.03155200000000002447109181958 0.909430999999999989391596955102 +0.329952999999999996294519633011 -0.253178999999999987391419153937 1.35167700000000001736566446198 +0.330023999999999984034104727471 -0.600998999999999949928053410986 1.23688500000000001222133505507 +0.330585000000000017728041257214 1.1883030000000001091819967769 0.691845999999999961005414661486 +0.331168000000000017912782368512 0.333990999999999982339460302683 1.33370799999999989360333074728 +0.3329650000000000109601216991 -0.432630999999999987792875799641 1.30459400000000003139177806588 +0.334210999999999980314413505766 0.51329800000000003201705567335 1.27468800000000004324363089836 +0.334515000000000006785683126509 -0.0603629999999999999893418589636 1.37275499999999994749089182733 +0.334901999999999977486453417441 -0.282274000000000024890312033676 -1.34467899999999995763744209398 +0.335513000000000005673683745044 0.48656800000000000050448534239 -1.28478800000000004111200269108 +0.335683999999999982399856435222 0.426559000000000021479706902028 1.30589599999999994572874584264 +0.337033000000000027007729386241 0.238261000000000000564881474929 1.35264199999999989998400451441 +0.338071999999999983632648081766 0.0937619999999999981232789991736 -1.37000600000000005707079253625 +0.338617000000000001325162202193 0.714328999999999991743493410468 -1.17263500000000009393374966749 +0.338629000000000013326229009181 0.966369999999999951256768326857 0.975427999999999961744379106676 +0.339575000000000015720758028692 1.28965400000000007807443580532 -0.470619999999999982787102226212 +0.339639999999999997459809719658 0.895279000000000046988191115815 -1.04073100000000007270273272297 +0.339975000000000027178259642824 1.3703199999999999825206487003 0.0814860000000000028741453661496 +0.340059999999999973407938114178 -1.32810399999999995124255747214 0.34712799999999999212008106042 +0.340596999999999983099741029946 -0.7590130000000000487503371005 1.14363199999999998190958194755 +0.341463000000000016509460465386 0.755794999999999994599875208223 1.14550299999999993794119745871 +0.341654000000000013237411167211 0.598001000000000004774847184308 1.23517900000000002691535883059 +0.341897999999999979703346753013 -0.163726000000000010414780149404 1.36246099999999992213872701541 +0.343017999999999989579890780078 -0.490568999999999977301712306144 -1.28128099999999989222487783991 +0.343598000000000014519940805258 -0.0662900000000000017008616737257 1.3702360000000000095354835139 +0.343745000000000022755131112717 0.805923999999999973731235058949 -1.11010100000000000441957581643 +0.344196999999999975194953094615 0.0892880000000000062509997178495 1.3687789999999999679403117625 +0.34431699999999998418331870198 0.0837200000000000027489122089719 1.36910099999999990139087913121 +0.344411000000000022680524125462 0.0948459999999999997521982209037 1.36835100000000009501377462584 +0.344615999999999977898568204182 -1.1892210000000000835740365801 0.683367999999999975457853906846 +0.344770000000000020889956431347 0.0781639999999999973701036992679 1.36931500000000005989875262458 +0.344957999999999986862064815796 0.100372000000000002883915328766 1.36781899999999989603338690358 +0.345185999999999992837729223538 -0.236218000000000011295853141746 -1.35094300000000000494537744089 +0.345555000000000001048050535246 0.0726419999999999982387421937347 1.36942099999999999937472239253 +0.345835000000000003517186542012 0.105843999999999993644195228626 1.36718500000000009464429240325 +0.345868999999999982009057930554 1.10267899999999996474286945158 -0.815151999999999987700505243993 +0.346138000000000001232791646544 0.339171999999999973507414097185 1.32858999999999993768540207384 +0.346210999999999990972554542168 0.243643999999999999461763877662 1.3493610000000000326281224261 +0.346403999999999989700683045157 1.29907299999999992223820299841 0.438649000000000011123546528324 +0.34658600000000000518340925737 1.35664600000000001855937625805 -0.198467000000000004522604513113 +0.346669000000000004924061158817 0.0671759999999999996012078895546 1.36941899999999994186339336011 +0.34704000000000001513456027169 0.111241000000000006542322239511 1.36645100000000008222400538216 +0.347125999999999990119903259256 -0.968848000000000042497561025812 0.969967000000000023618440536666 +0.347575000000000022826185386293 0.0471149999999999971600495030088 -1.37002599999999996605026808538 +0.34767799999999998705746406813 -0.519838000000000022282620193437 1.26842000000000010295764241164 +0.347988000000000019529267092366 -1.35454300000000005255174073682 -0.2100450000000000094768637382 +0.34810699999999999976196818352 0.0617870000000000016426859872354 1.36930799999999996963140347361 +0.348196999999999978747666773415 1.13849500000000003474553977867 0.763275000000000036770586575585 +0.348567999999999988958165886288 0.116542000000000006698641641378 1.36562000000000005606182185147 +0.349457999999999990858867704446 1.20674299999999989907450981264 -0.649345999999999978768983055488 +0.349754999999999982573939405484 0.308510999999999979692688611976 -1.33509999999999995345945080771 +0.349862999999999979561238205861 0.0564959999999999976094677833771 1.36908900000000000041211478674 +0.349880999999999997562838416343 -1.36845599999999989471177741507 0.0700780000000000014015455462868 +0.35041299999999997449862121357 0.121724999999999999866773237045 1.364695999999999909135794951 +0.350455000000000016502355038028 -0.25859999999999999653610416317 1.34547700000000003406341875234 +0.351930000000000020587975768649 0.0513259999999999966258101835592 1.36876200000000003420552729949 +0.352565999999999990510701763924 0.126769999999999993800514630493 1.36368099999999992100185863819 +0.352671999999999985497822763136 -1.14234499999999994379606960138 -0.75542799999999998838973169768 +0.352675999999999989498178365466 -0.189518999999999993022470334836 -1.35635599999999989506704878295 +0.352785999999999988485654967008 -0.348337000000000007737810392427 1.32446299999999994589927609923 +0.353007999999999988460785971256 -0.0716159999999999991038279745226 1.36757299999999992756727351662 +0.353557999999999983398168978965 -0.744609999999999994102495293191 -1.14915300000000009106315701501 +0.35427399999999997781685578957 -6.99999999999999989499501959478e-06 -1.36911999999999989263699262665 +0.354300999999999977063680489664 0.0462940000000000018154366898671 1.36833000000000004625633209798 +0.35458099999999997953281649643 0.89967900000000000648725517749 1.031916000000000055436544244 +0.355020999999999975482722902598 0.131656999999999996253663425705 1.36258100000000004214939508529 +0.355706000000000022165380642036 0.248405999999999987926102562596 1.34601900000000007651124178665 +0.356267000000000000348165940522 0.430754999999999999005240169936 1.29904700000000006276934527705 +0.356385999999999980580867031676 -0.682630999999999987792875799641 1.18617200000000000414956957684 +0.356966000000000005520917056856 0.0414230000000000014859224961583 1.36779399999999995429789123591 +0.357088999999999989753973750339 -0.168813999999999991841193036635 1.35793600000000003191757969034 +0.357343000000000021731949573223 -0.142361999999999988553156526905 -1.36089600000000010560086138867 +0.357767000000000001680433570073 0.136366999999999988224530511616 1.36139900000000002577849045338 +0.357787999999999994926724866673 0.679310999999999998166799741739 1.1876549999999999052135990496 +0.358144000000000017891466086439 -0.0474180000000000018145485114474 -1.3672910000000000341202621712 +0.359167999999999987270626888858 -0.0949320000000000024931168240983 -1.36454600000000003667821601994 +0.359289999999999998259170297388 -0.616349999999999953459450807713 -1.22107399999999999273825324053 +0.359914999999999984936494001886 0.0367309999999999997610800051007 1.367154999999999898108171692 +0.360080000000000011173284519828 0.516812000000000049126924750453 1.2661940000000000416946477344 +0.360792999999999974836129013056 0.140881000000000006222578008419 1.36013999999999990464516486099 +0.361406999999999978268050426777 0.34335100000000001729816290208 1.32343999999999994976462858176 +0.361760000000000025988100560426 -1.29843599999999992355981248693 0.428010999999999974807707303626 +0.362696000000000018381740574114 1.35675900000000004830269517697 0.166298000000000001374900193696 +0.362705999999999972871478348679 -0.0763179999999999969517716635892 1.36477800000000004665423603001 +0.362825999999999981859843956045 -1.13959399999999999586464127788 0.754773000000000027220892206969 +0.362837000000000020616397478079 -1.30661500000000008192557743314 -0.401378999999999985792697998477 +0.362980999999999998095745468163 -0.902321000000000039698022646917 1.02667500000000000426325641456 +0.36313499999999998557598246407 0.0322360000000000007647216193618 1.36641600000000007497646947741 +0.363958999999999976981968075052 -0.436626999999999987345233876113 1.29494799999999998796340605622 +0.364086999999999993971044887076 0.145182000000000005490718990586 1.35880899999999993355004335172 +0.364435000000000008935074902183 1.08419400000000010209078027401 0.831690999999999958092189444869 +0.364707000000000003403499704291 0.577760999999999969034547575575 -1.23821699999999990104981861805 +0.365205000000000001847411112976 -1.23493800000000009120526556217 -0.584426000000000001044497821567 +0.365300999999999986833643106365 1.26415900000000003267075499025 0.518128999999999950709650420322 +0.365478999999999998316013716249 0.252527000000000001467270749345 1.34262999999999999012345597293 +0.36599599999999998800603862037 -0.444819999999999993178789736703 -1.2915810000000000901110297491 +0.36661399999999999543831563642 0.0279560000000000016817658377022 1.36558099999999993379162788187 +0.367636999999999991572963153885 0.149251999999999995782928863264 1.35741200000000006298250809778 +0.368203999999999975756281855865 0.440937999999999996614263864103 -1.29228399999999998826183400524 +0.369134000000000017660539697317 0.829436999999999979849008013844 1.0843320000000000735695948606 +0.370338999999999973766762195737 0.0239089999999999996971311588823 1.36465299999999989388754784159 +0.370437000000000016264323221549 1.30811300000000008125766726153 -0.389380000000000003890221478287 +0.370769000000000015226930827339 -0.603555999999999981397991177801 1.22403100000000009117684385274 +0.370848999999999984211740411411 -1.07062499999999993782751062099 -0.846306000000000002714273250604 +0.370941000000000020708768033728 1.02465500000000009350742402603 -0.901379000000000041303849229735 +0.371215999999999990421883921954 -0.262668999999999985828225135265 1.33910599999999990750154665875 +0.371427999999999980396125920379 0.153074999999999988853360832763 1.35595299999999996387600731396 +0.371896000000000004348521542852 -0.829343000000000052374105052877 -1.0834589999999999498925262742 +0.37195000000000000284217094304 0.261415000000000008473222123939 -1.33914700000000008728306966077 +0.372537000000000007027267656667 -0.172898999999999997134736418047 1.3532640000000000224389395953 +0.372655999999999987259968747821 -0.0803790000000000059987570466546 1.3618609999999999882192014411 +0.372699999999999975752729142187 0.600146999999999986030729814956 1.22511999999999998678390511486 +0.372879999999999989235277553234 1.35942800000000008076028734649 -0.113649000000000000021316282073 +0.374294999999999988826715480172 0.0201089999999999984037213351939 1.36363400000000001277555838897 +0.374838999999999977763565084388 -1.35488000000000008427036846115 0.154256000000000004224176564094 +0.375446000000000001950439809661 0.156636999999999998456345906561 1.35443899999999994854249507625 +0.375491999999999992443378005191 0.255993000000000026084023829753 1.33920599999999989648813425447 +0.376915999999999973280040421741 0.346513000000000015443646361746 1.3182799999999998963318148526 +0.377085999999999976761699826966 0.433584000000000024943602738858 1.29221199999999991625543316331 +0.377253999999999978243181431026 -1.35711200000000009602274531062 -0.126200000000000006616929226766 +0.377404000000000017234214055861 -0.832231999999999971784347962966 1.07933100000000004037303824589 +0.378464999999999995861088564197 0.0165730000000000009252598687226 1.36253000000000001890043677122 +0.378803999999999974068742858435 -0.351690999999999975855757838872 1.31636700000000006482991921075 +0.379236000000000017529089291202 1.02561400000000002563638190622 0.896824999999999983302245709638 +0.379603999999999996983746086698 -1.08546999999999993491428540437 0.823199000000000014054535313335 +0.379674000000000011478817896204 0.159923000000000009590550575922 1.3528759999999999674713535569 +0.380363000000000006650680006715 -0.993696000000000023710811092315 -0.931606999999999962902563765965 +0.380798999999999998600230810553 -0.912827000000000055024429457262 -1.01081099999999990401988725353 +0.382031000000000009464429240325 -1.26364399999999998946975665604 0.507203999999999988190779731667 +0.382230000000000014193091146808 0.755920999999999954077622987825 1.13246800000000003016964456037 +0.382755999999999985128340540541 1.22425600000000001088551471184 0.595563999999999982293275024858 +0.382817000000000018378187860435 -0.0837819999999999953654850060047 1.35883500000000001506350599811 +0.382834999999999980868636839659 0.0133130000000000001808553307114 1.36134500000000002728484105319 +0.3836879999999999735216249519 -0.522097999999999951015183796699 1.25705899999999992644461599411 +0.383985999999999993992361169148 1.33784499999999995090149695898 0.250452999999999981195486498109 +0.38409599999999999297983777069 0.162920000000000009254819133275 1.35126900000000005341860287444 +0.384263000000000021216806089797 1.23472200000000009723066796141 -0.572541999999999995374366790202 +0.384539000000000019685586494234 0.670217999999999980431653057167 -1.18445599999999995333155311528 +0.385220999999999980101250685038 1.13911699999999993515586993453 -0.74432299999999995687716136672 +0.385705000000000020055068716829 0.258788000000000018019363778876 1.33576199999999989387333698687 +0.386141000000000012004619520667 0.518612999999999990663468452112 1.25774999999999992361665590579 +0.386156999999999972494890698727 -0.397594000000000002970068635477 -1.30107700000000003903721790266 +0.387384999999999979358733526169 0.0103429999999999997634114734524 1.36008299999999993090682437469 +0.38780999999999998806288203923 0.941101999999999994095389865834 -0.98179899999999997728394873775 +0.38818000000000002502886786715 -0.175964000000000009293898983742 1.34846299999999996721555817203 +0.388693999999999983963050453895 0.165616999999999986448173672215 1.34962500000000007460698725481 +0.390010000000000023323565301325 -0.570524000000000031107560971577 -1.23385300000000008857625743985 +0.390336000000000016285639503621 -0.758858999999999950247797642078 1.12772800000000006370726168825 +0.391305000000000013926637620898 0.213010000000000004893863092548 -1.34220199999999989515231391124 +0.392098999999999975329956214409 0.00767500000000000039829251008427 1.35874899999999998456701177929 +0.392154000000000002579270130809 -0.265367999999999992777333090999 1.33258999999999994123811575264 +0.392257999999999995566213328857 -0.700238000000000027078783659817 -1.16438899999999989631760399789 +0.392539000000000026791013851835 0.962987000000000037402969610412 0.958420000000000049666937229631 +0.392602999999999979774401026589 0.348644000000000009453771099288 1.31312999999999990841104136052 +0.393149000000000026222579663226 -0.0865139999999999936841632575124 1.35570999999999997065458501311 +0.393450999999999995182520251547 0.168002000000000012436274232641 1.34795099999999989925925092393 +0.39381800000000000139266376209 0.679422999999999999154454144445 1.17613400000000001277555838897 +0.394882999999999984019893872755 -1.02706100000000000171951342054 0.888376000000000054512838687515 +0.394923000000000024023449896049 0.762527999999999983593568231299 -1.12364899999999989788079801656 +0.394934999999999980513365471779 -1.17329400000000005910294476053 -0.683671000000000028684610242635 +0.395093000000000027505109301273 -0.43858000000000002538413923503 1.28512599999999999056399246911 +0.395824000000000009169554004984 -1.31946600000000002772537754936 -0.319894000000000011674217148538 +0.395934999999999981401543891479 0.853281999999999984929388574528 -1.05600399999999994271604464302 +0.39607799999999998563637859661 0.260902999999999996028066107101 1.33231100000000002303579549334 +0.396957999999999977536191408944 0.00532000000000000007605027718682 1.3573489999999999167101805142 +0.397701999999999999957367435854 1.3568450000000000787991893958 -0.0283829999999999985083043441136 +0.398058999999999996166621940574 0.435033000000000003026912054338 1.28541599999999989201171501918 +0.398135999999999989906740438528 0.393303000000000013702816659134 -1.29876900000000006230038707145 +0.398318999999999978633979935694 -1.3359570000000000611350969848 0.237825000000000008615330671091 +0.398347000000000006636469151999 0.170066999999999995951682763007 1.34625299999999992195398590411 +0.39869999999999999884536805439 1.17952100000000004165201517026 0.670648000000000021891821688769 +0.399836000000000024723334490773 1.32140999999999997349675595615 -0.306603000000000014413359394894 +0.400795000000000012363443602226 -1.22386499999999998067323758733 0.584396000000000026552982035355 +0.401729000000000002756905814749 -0.682490999999999958802732180629 1.17167400000000010429346275487 +0.401942999999999994731325614339 0.00328500000000000015945578191179 1.35588799999999998213695562299 +0.402579000000000020165202840872 -1.25733099999999997642419202748 -0.507000000000000006217248937901 +0.402639999999999997903898929508 0.53110299999999999176480969254 -1.2473209999999999020303675934 +0.403364000000000000323296944771 0.171804000000000012260414905541 1.34453800000000001091393642128 +0.403422999999999976061815232242 -0.349075999999999997402966300797 -1.30973099999999997855582023476 +0.40361200000000002630073936416 -0.0885650000000000048316906031687 1.35249899999999989574916980928 +0.403760000000000007780442956573 1.31364999999999998436805981328 0.333618999999999998884447904857 +0.403851000000000015521806062679 0.600242999999999971016961808346 1.21515900000000010017231488746 +0.403955999999999981753262545681 -0.177997999999999989562127211684 1.34355399999999991500487794838 +0.404293000000000013471890270011 0.896558999999999994834354311024 1.01623299999999994192023677897 +0.40493899999999999339550527111 -0.353331000000000006178169087434 1.30812100000000008925837846618 +0.405030000000000001136868377216 -1.35432500000000000106581410364 -0.0418569999999999983741894027389 +0.406569999999999986961540798802 0.262328999999999978864906324816 1.32886600000000010268763617205 +0.407032999999999978157916302735 0.00158000000000000002421673972464 1.35437099999999999155875229917 +0.407743999999999995331734226056 0.163486999999999993438137835255 -1.34425299999999992017762906471 +0.408405999999999991256771636472 0.349735999999999991327825910048 1.30800999999999989498178365466 +0.408480000000000009752199048307 0.173203999999999996850519323743 1.34281199999999989458387972263 +0.408604000000000022740920258002 -0.964598999999999984211740411411 0.950048000000000003595346242946 +0.411536000000000012910561508761 -0.603430000000000021920243398199 1.21099599999999996136068602937 +0.412210000000000020836665726165 0.000211000000000000005910202882653 1.3528059999999999529762817474 +0.412291000000000018577139826448 0.518693999999999988403942552395 1.24938900000000008283507213491 +0.413069999999999992734700526853 1.13013099999999999667465999664 0.743086000000000024279245280923 +0.4131870000000000264783750481 -0.266687999999999980627052309501 1.32595400000000007700862170168 +0.413677000000000016921575252127 0.174264000000000002232880547126 1.3410830000000000250537368629 +0.413798999999999972398967429399 1.06423299999999998455280092458 -0.83437300000000003130651293759 +0.414165000000000005364597654989 -0.0899250000000000049293902293357 1.34921500000000005314859663486 +0.414451999999999987078780350203 0.826593000000000022176038783073 1.07003500000000006942002528376 +0.415910000000000001918465386552 -0.78495499999999995832666854767 -1.10039299999999995449684320192 +0.416847000000000023067769916452 -1.1047089999999999410107420772 -0.778367999999999948812501315842 +0.41714000000000001078248601516 0.263058999999999987284837743573 1.32544100000000009131895239989 +0.417451999999999989743315609303 -0.000815999999999999993567645351078 1.35119699999999998141220203252 +0.417553000000000007485567721233 1.25782700000000002837907686626 -0.493479000000000000980548975349 +0.417723999999999984211740411411 -0.299458000000000001961097950698 -1.31750900000000004119726781937 +0.417883000000000004447997525858 -0.522711000000000036713743156724 -1.24585199999999995945643149753 +0.417976999999999987434051718083 -1.17925499999999994216182130913 0.659282000000000034667380077735 +0.418933999999999973073983028371 0.174977999999999994651389556566 1.33935699999999990872368016426 +0.419103999999999976555642433595 0.435097999999999984765963745303 1.27868699999999990701837759843 +0.419719000000000008743228363528 -0.521986999999999978783193910203 1.24553800000000003400657533348 +0.41980400000000001048405806614 -0.178992000000000012205347843519 1.33855400000000002158628831239 +0.420225000000000015187850976872 -1.3117620000000000946016598391 0.320454999999999989857002447025 +0.420713000000000003630873379734 -0.898330999999999990635046742682 1.00796899999999989283594459266 +0.420953999999999994852117879418 1.34890700000000007818812264304 0.0569949999999999970534680926448 +0.421202000000000020829560298807 0.113041000000000002589928271846 -1.34529199999999993231369899149 +0.421941000000000010494716207177 1.28427099999999994039967532444 0.415468999999999977212894464174 +0.422738000000000002653877118064 -0.00149700000000000006672440377997 1.34955200000000008486722435919 +0.422974999999999989874766015419 0.753364999999999951363349737221 1.11961299999999996934718637931 +0.423053000000000012370549029583 1.17105999999999998983923887863 -0.670556000000000040905945297709 +0.424229000000000022740920258002 0.175343999999999999861444166527 1.33764100000000007995026862773 +0.424261999999999972477127130333 0.349785000000000012576606422954 1.30293999999999998706812220917 +0.424765000000000003677058657559 -0.0905900000000000038546943414985 1.34587100000000003952038696298 +0.425188999999999983625542654408 0.343851999999999990986765396883 -1.30421600000000004193623226456 +0.425810999999999995058175272789 1.07628100000000004321520918893 0.812590999999999952230211874848 +0.426244999999999985007548275462 -0.438483999999999984886756010383 1.2751660000000000216857642954 +0.427248000000000016651569012538 -1.32711000000000001186606368719 -0.237145999999999995688781950776 +0.427657000000000009354295116282 1.32949300000000003585398644645 -0.222617000000000009318767979494 +0.427746000000000015095480421223 0.263091999999999992532195847161 1.32204999999999994741983755375 +0.427783000000000024343194127141 0.623226999999999975443643052131 -1.19523599999999996512656252889 +0.428049000000000012811085525755 -0.0018309999999999999453076382494 1.34787699999999999178612597461 +0.428174999999999972288833305356 -0.653352000000000043833381369041 -1.17889700000000008373035598197 +0.429005999999999998451016836043 -0.248935999999999990617283174288 -1.32438100000000003042543994525 +0.429543000000000008142819751811 0.175359999999999988107290960215 1.33594199999999996286703662918 +0.429642999999999997129407347529 0.0869359999999999993880450688266 1.34456299999999995264943208895 +0.42982799999999998785682464586 0.677162999999999959399588078668 1.16477399999999997604049895017 +0.430099000000000009080736163014 -0.869120000000000003659295089165 -1.02939099999999994494714883331 +0.430310999999999999054978161439 -1.03032100000000004236255790602 -0.867912000000000016797230273369 +0.431088999999999999968025576891 -0.353250999999999981682208272105 1.29976000000000002643218977028 +0.431161000000000016463275187562 -0.828516999999999947945639178215 1.06191300000000010683720574889 +0.431209000000000008956391184256 -1.34619500000000003048228336411 0.0426510000000000014108714196936 +0.431626000000000009659828492659 0.0618720000000000033835156898476 -1.34531399999999989880450357305 +0.43336200000000002496847173461 -0.00181400000000000007419065362058 1.3461780000000000967474989011 +0.433508999999999977692510810812 -1.12999200000000010746248335636 0.731566000000000049574566673982 +0.434232000000000006867395541121 -0.266622999999999998888000618535 1.31922500000000009201528428093 +0.43445000000000000284217094304 0.983211999999999974875208863523 -0.918992999999999948812501315842 +0.434840000000000004298783551349 -0.951358000000000036955327686883 -0.95175200000000004241229589752 +0.43485299999999998954436364329 0.175026999999999988144594453843 1.33426700000000009183054316964 +0.434985999999999983778309342597 0.598288999999999959733543164475 1.20533700000000010277290130034 +0.435371000000000007990053063622 -0.0905579999999999996074251384925 1.34247999999999989562127211684 +0.435640000000000027213786779612 -1.19961300000000004040145995532 -0.609217000000000008519407401764 +0.435661000000000020460078076212 -0.178942999999999990956567330613 1.33348399999999989162802194187 +0.436871000000000009322320693173 1.01818399999999997795896433672 0.878889000000000031320723792305 +0.437221999999999999531041794398 -0.197708999999999995855759493679 -1.33031799999999988948218287987 +0.437746999999999997221777903178 0.482098999999999999754862756163 -1.25537100000000001465139121137 +0.438346999999999986652454708747 0.262427000000000021362467350627 1.31870599999999993379162788187 +0.438363999999999975898390403017 -1.27476300000000009049472282641 -0.427572000000000007613465413669 +0.438425999999999982392751007865 0.517054000000000013592682535091 1.24114400000000002499689344404 +0.438456000000000012395418025335 1.24982299999999990625099144381 0.495680000000000009485745522397 +0.438657999999999992368771017937 -0.00144800000000000006830647159006 1.34446200000000004592948243953 +0.438975000000000004085620730621 0.0101799999999999998129274203507 -1.3443199999999999594280097881 +0.439906999999999992478905141979 -0.755433000000000021145751816221 1.1116660000000000430020463682 +0.440110000000000001207922650792 0.348791000000000017688961406748 1.29794000000000009364953257318 +0.440137000000000000454747350886 0.433777999999999996916244526801 1.27205199999999996052224560117 +0.440139999999999975699438437005 0.174344999999999999973354647409 1.33262199999999997324096057127 +0.44047399999999997666222384396 -1.2823899999999999188560195762 0.401820999999999983742782205809 +0.442342000000000012960299500264 -0.145978999999999997649879901473 -1.33529900000000001369926394545 +0.44254599999999999493383029403 1.33564499999999997115196492814 0.142147999999999996578736727315 +0.442801999999999973400832686821 -0.473098999999999991761256978862 -1.25702200000000008373035598197 +0.443220000000000002859934511434 -0.0418289999999999981272758020623 -1.34231400000000000716227077646 +0.44346200000000002283684352733 0.715902999999999956060037220595 -1.13614499999999996049382389174 +0.443913999999999975276665509227 -0.00073399999999999995196203750325 1.34273599999999992959942574089 +0.444342999999999987981169624618 -0.0939500000000000057287508070658 -1.33930299999999991023003076407 +0.4453820000000000001172395514 0.173317999999999999838351527615 1.33101300000000000167688085639 +0.445940999999999976299847048722 -0.0898270000000000040651926269675 1.33905500000000010629719326971 +0.446207000000000020278889678593 0.956068000000000028926194772794 0.941718999999999972772002365673 +0.446562000000000014487966382148 0.897272999999999987252863320464 -0.997739000000000042511771880527 +0.446917999999999981941556370657 -0.679367999999999971905140228046 1.15703200000000006042455424904 +0.44733099999999997864463807673 -1.07626899999999992019183991943 0.800962999999999980538234467531 +0.448898999999999992471799714622 0.261066000000000020264678823878 1.31542200000000009119105470745 +0.449110999999999982446041713047 0.000324999999999999985081378106599 1.34100700000000006006928288116 +0.449193999999999982186693614494 1.27596799999999999108979409357 -0.41246800000000000130384592012 +0.449259000000000019436896536718 0.29277900000000001146105432781 -1.30860500000000001818989403546 +0.449670999999999987384313726579 0.807717000000000018289370018465 -1.07022900000000009690381830296 +0.45055800000000001404032445862 0.171948999999999990739851796206 1.32944799999999996309441030462 +0.451463999999999976431297454837 -0.177851000000000009082512519853 1.32836299999999996046540218231 +0.452164999999999983604226372336 -0.600621999999999989228172125877 1.19783200000000000784439180279 +0.453241000000000004988010005036 1.21044299999999993566746070428 0.573934000000000055230486850633 +0.453780999999999989924504006922 0.890179000000000053560711421596 1.00083199999999994389554558438 +0.453790999999999999925393012745 1.33232799999999995677057995636 -0.137752000000000013324452652341 +0.454228000000000020630608332795 0.00172600000000000010358380819753 1.33928099999999994373922618252 +0.455025000000000012789769243682 1.09961099999999989407228895288 -0.764073000000000002174260771426 +0.45520500000000002627231765473 -0.265174000000000020804691303056 1.31242999999999998550492819049 +0.455627000000000004220623850415 -0.519504999999999994564348071435 1.23390399999999988978061082889 +0.455647999999999997466915147015 0.170244000000000006433964472308 1.3279309999999999725162069808 +0.455685000000000006714628852933 -1.33275100000000001898570189951 0.126990999999999992775556734159 +0.455886999999999986687981845535 0.346756999999999981909581947548 1.2930299999999999016608853708 +0.456432999999999977625009250914 -0.0884019999999999944728656942061 1.33560999999999996390442902339 +0.456986000000000003318234576 -1.3295159999999999200781530817 -0.153461999999999987309706739325 +0.457121999999999972796871361425 -0.737702999999999997626787262561 -1.11661699999999997068300672254 +0.45715000000000000079936057773 -0.351449999999999984634513339188 1.29131599999999990835419794166 +0.457291000000000003034017481696 -0.436338000000000003630873379734 1.26510600000000006382094852597 +0.458984000000000003094413614235 -1.24795699999999998297539605119 0.481599999999999972555286831266 +0.459214999999999984314769108096 1.19838099999999991851495906303 -0.594142999999999976701303694426 +0.459243999999999985561771609355 0.00346199999999999979971576635762 1.33756600000000003269917669968 +0.459361999999999992549959415555 0.259016000000000023995028186619 1.31221100000000001628563950362 +0.459386999999999989796606314485 -1.01829799999999992543564530934 0.867198000000000024378721263929 +0.459565000000000001278976924368 0.820776999999999978818721046991 1.05599500000000001698197138467 +0.46063300000000001466204935241 0.168209999999999998410160628737 1.32647000000000003794298208959 +0.461075000000000012612133559742 0.431078999999999989967136571067 1.26553599999999999425881469506 +0.461164999999999991597832149637 -0.604137999999999952827067772887 -1.19262099999999993116261975956 +0.461199000000000025600854769436 -1.13443300000000002469846549502 -0.707358000000000042284398205084 +0.462390000000000023216983890961 1.31711200000000006049560852261 0.226739999999999997104538351778 +0.46353600000000000358468810191 0.748134999999999994457766661071 1.10699100000000005827871518704 +0.464139999999999997015720509808 0.00552699999999999979499731850296 1.33586800000000005539391167986 +0.46444400000000002348699013055 0.513700000000000045474735088646 1.23304700000000000414956957684 +0.464666000000000023462121134799 -0.421883999999999981245224489612 -1.2673200000000000020605739337 +0.465492000000000016868284546945 0.165854000000000001424638185199 1.3250699999999999700861508245 +0.465677000000000007595701845275 0.672541000000000055436544244003 1.15361699999999989252330578893 +0.465980000000000005311306949807 0.594292999999999960181185088004 1.19569199999999997707789134438 +0.466237999999999985778487143762 1.16628599999999993386268215545 0.64992300000000002846434199455 +0.466805999999999998717470361953 -0.0862870000000000025863755581668 1.33215900000000009306688752986 +0.467150000000000009681144774731 -0.175719999999999987316812166682 1.32321299999999997254462869023 +0.468177000000000009816147894526 0.573541999999999996262545209902 -1.2049309999999999742925638202 +0.46889700000000000823519030746 0.00791299999999999989497290187046 1.33419400000000010209078027401 +0.469629999999999991899812812335 -0.956308000000000046902925987524 0.930011000000000032095215374284 +0.469694000000000000394351218347 0.256284000000000011798562127296 1.30908599999999997187671851862 +0.469891999999999976367348608619 0.430943000000000020488499785642 -1.26233499999999998486543972831 +0.470206000000000012839507235185 0.163185999999999997722710531889 1.3237360000000000237463382291 +0.470247999999999999332089828386 0.240285999999999999587885213259 -1.3119179999999999175486209424 +0.471530000000000004689582056017 0.343691000000000024261481712529 1.28822999999999998621547092625 +0.472418999999999977834619357964 -1.28716199999999991732124726695 -0.346457999999999988194332445346 +0.473494999999999999218402990664 0.0106090000000000003743672039036 1.33254999999999990123455972935 +0.474625999999999992340349308506 -1.22119899999999992346033650392 -0.532357999999999997875477220077 +0.474756999999999984574117206648 0.16021599999999999730526667463 1.3224739999999999273683215506 +0.475683000000000022478019445771 -1.20859800000000006114930783951 0.559478999999999948578022213042 +0.476024000000000002685851541173 -0.262344999999999994866328734133 1.30559399999999992125765402307 +0.476621000000000016871837260624 -0.822200999999999959655383463542 -1.0472900000000000542144107385 +0.477019000000000026329161073591 -0.0834909999999999957731589006471 1.32871399999999995067412328353 +0.477393999999999985028864557535 1.11752600000000001934097326739 0.723346999999999962227548166993 +0.47791699999999998071942286515 0.0136069999999999993040011858625 1.33094299999999998718180904689 +0.478020000000000000461852778244 -0.890545000000000031015190415928 0.989153999999999977710274379206 +0.478134000000000003449684982115 1.3299049999999998927791011738 -0.0523430000000000006377121053447 +0.478364000000000011425527191022 -1.31404600000000004733635705634 0.2108299999999999896349578421 +0.478561000000000014154011296341 -1.06287899999999990718890785502 -0.800792999999999977056575062306 +0.479063000000000016598278307356 1.28907400000000005313438578014 -0.329828999999999983305798423316 +0.479125999999999996337152197157 0.156957000000000013173462320992 1.32128800000000001801936377888 +0.479374999999999995559107901499 1.02143999999999990357935075735 -0.85255999999999998451016836043 +0.479854999999999976001419099703 0.252879999999999993676169651735 1.30605900000000008098766102194 +0.480410000000000003694822225953 1.29338099999999989186960647203 0.310437000000000018484769270799 +0.481835999999999986531662443667 0.427010999999999973919528883926 1.2591650000000000897415475265 +0.482144999999999990247800951693 0.0168929999999999982951415233856 1.32938000000000000611066752754 +0.482659000000000004693134769695 -0.172558999999999990171417607598 1.31805299999999991911181496107 +0.483018999999999976147080360533 -0.347934999999999994280130977131 1.28282199999999990680521477771 +0.483296000000000003371525281182 0.153420000000000000817124146124 1.32018400000000002414424216113 +0.483389000000000013113066188453 -0.369269000000000013894663197789 -1.27670499999999997875477220077 +0.484522999999999981479703592413 -0.821266999999999969261921251018 1.04439299999999990475885169872 +0.484920000000000017692514120426 -1.32667500000000004867217739957 -0.0691729999999999983772980272079 +0.486163000000000011802114840975 0.0204539999999999999591437926938 1.32786599999999999077715528983 +0.486603999999999980996534532096 -0.905467000000000021842083697265 -0.971260000000000012221335055074 +0.486665999999999987490895136943 1.06435600000000007980816008057 0.793915999999999955072382817889 +0.486976999999999993207211446133 0.339606999999999992212451616069 1.28355799999999997673683083121 +0.487032000000000020456525362533 -0.0800259999999999999120703364497 1.32529099999999999681676854379 +0.48716500000000001469047106184 -0.98613499999999998379962562467 -0.888936999999999977184472754743 +0.487252000000000018431478565617 0.149621000000000003993250174972 1.3191660000000000607656147622 +0.488076000000000009837464176599 0.186580999999999996852295680583 -1.31414199999999992130028658721 +0.488107999999999986329157763976 -0.432151999999999980595077886392 1.25498799999999999243982529151 +0.48911399999999999321786958717 -0.748747999999999969134023558581 1.09551099999999990153298767837 +0.489169999999999993711696788523 0.666233999999999992880361787684 -1.14753900000000008674305718159 +0.489804999999999990389909498845 0.248820000000000013384848784881 1.30314200000000002255262643303 +0.489954000000000000625277607469 0.024278000000000000968558566683 1.32640699999999989167065450602 +0.490240999999999982339460302683 0.508643999999999985028864557535 1.22513000000000005229594535194 +0.490503999999999995562660615178 -1.16446899999999997632471604447 0.635149999999999992361665590579 +0.490976999999999996759925124934 0.145573000000000007947420499477 1.31823800000000002086153472192 +0.491099999999999980992981818417 -0.552790000000000003588240815589 -1.20550599999999996647659372684 +0.491271000000000013230305739853 -0.514662999999999981604048571171 1.22220100000000009288214641856 +0.491775000000000017674750552032 -0.673274000000000039101166748878 1.14230499999999990379251357808 +0.492495000000000016093792964966 -0.595142999999999977589482114126 1.18459000000000003183231456205 +0.493503999999999998227195874279 0.0283480000000000016691092952215 1.32501000000000002110311925207 +0.493564000000000002721378677961 1.22097199999999994624033661239 -0.515384999999999982023268785269 +0.494018000000000012672529692281 1.00698500000000001897149104479 0.861352000000000006529887741635 +0.494454000000000004622080496119 1.13064900000000001512034941697 -0.690759000000000011887379969266 +0.494456000000000006622258297284 0.141294000000000002925659714492 1.31740199999999996194333107269 +0.495369000000000003769429213207 -0.687775000000000025224267119484 -1.13206699999999993444532719877 +0.495427000000000006263434215725 0.937722000000000055486282235506 -0.93553699999999995196020563526 +0.496533999999999975383246919591 1.26454599999999994786037404992 0.392909000000000008245848448496 +0.496607000000000020634161046473 -0.258149000000000017340795466225 1.29874599999999995603161551117 +0.496711000000000013621104244521 0.58827099999999998836130998825 1.18626100000000000989075488178 +0.496798000000000017362111748298 0.0326489999999999974678033254349 1.3236790000000000500079977428 +0.496804999999999996607158436746 -0.0759039999999999992486010569337 1.32190099999999999269562067639 +0.497676999999999980506260044422 0.136799000000000003929301328753 1.31666400000000005654499091179 +0.497927999999999981728393549929 -0.168379000000000000891731133379 1.31290400000000007096900844772 +0.49889899999999998136956946837 -0.315460999999999991416643752018 -1.285139999999999949054085846 +0.498945000000000027373658895158 0.377834999999999976427744741159 -1.26818499999999989569232639042 +0.499153000000000013347545291253 -1.29015699999999999825206487003 0.293837000000000014843237750028 +0.49941999999999997505994997482 0.945640000000000036095570976613 0.925389000000000017109869077103 +0.499502999999999974800601876268 0.244117000000000000659028387417 1.30034699999999991959498402139 +0.499823999999999990517807191281 0.0371630000000000015880630144238 1.32241999999999992887467215041 +0.500588999999999950674123283534 1.32223399999999990939159033587 0.0332720000000000029616309404901 +0.500624999999999986677323704498 0.132106000000000001204369937113 1.31602500000000000035527136788 +0.500635000000000052189363941579 0.758762000000000047528203594993 -1.0833489999999998953938984414 +0.501221000000000027618796138995 0.66557599999999994544452874834 1.1427099999999998924948840795 +0.502167999999999947746687212202 0.334519000000000010786038728838 1.27903300000000008651568350615 +0.502337999999999951228346617427 0.42158899999999999153033058974 1.25296399999999996666133483814 +0.502569999999999961204366627499 0.0418730000000000004978240042419 1.3212379999999999125037675185 +0.502643999999999979699794039334 0.849719000000000002081890215777 -1.01258500000000006835421118012 +0.502669999999999950190954223217 0.131873999999999991228349927042 -1.31526900000000002144417976524 +0.502851000000000047940318381734 0.880562999999999984623855198151 0.985774000000000039101166748878 +0.50329000000000001513456027169 0.12723499999999998699706793559 1.31548899999999990839683050581 +0.503390000000000004121147867409 -1.11574599999999990451726716856 0.708315000000000027924329515372 +0.503731000000000039840131194069 -1.1596809999999999618580659444 -0.633557000000000036799008285016 +0.503753000000000006330935775622 0.740253999999999967585040394624 1.09464899999999998314592630777 +0.504296999999999995267785379838 0.812011000000000038312464312185 1.04226799999999997226041159593 +0.504608999999999974228614973981 -1.29448399999999996801136603608 -0.263975999999999988432364261826 +0.505024999999999946176387766172 0.0467600000000000029509727994537 1.3201380000000000336513039656 +0.505562999999999984623855198151 0.521357999999999988105514603376 -1.21350399999999991607069205202 +0.505661000000000027121416223963 0.12220399999999999318678334248 1.3150560000000000027142732506 +0.506299999999999972288833305356 -0.0711419999999999969064745641845 1.31855999999999995431210209063 +0.50704099999999996395416701489 1.29709199999999991170795965445 -0.245887999999999995459631918493 +0.507179000000000046455284063995 0.0518049999999999968847141929018 1.31912300000000004551736765279 +0.507728999999999985881515840447 0.117032999999999998141930745987 1.31472999999999995424104781705 +0.508595000000000019291235275887 -0.342720999999999997864819079041 1.27431300000000002903277618316 +0.508912999999999948741447042266 0.238792000000000004256150987203 1.29768499999999997740474100283 +0.509023000000000003240074875066 0.0569879999999999969917396924757 1.31819899999999989859134075232 +0.509484999999999965680785862787 0.111742999999999995108801442711 1.31451099999999998502175913018 +0.510550999999999977063680489664 0.0622880000000000030868640976678 1.31736800000000009447376214666 +0.510697999999999985298870797124 1.23072000000000003616662525019 0.473829999999999973425701682572 +0.510921999999999987274179602537 0.106354000000000004089173444299 1.31440000000000001278976924368 +0.510940999999999978520293097972 -1.31859900000000007658229606022 0.0153889999999999999014121954133 +0.51113299999999994849275708475 -0.26067200000000001480771061324 -1.29259199999999996322230799706 +0.511738000000000026190605240117 -1.23796400000000006436096100515 -0.453398000000000023224089318319 +0.511755999999999988681054219342 0.0676849999999999951683093968313 1.31663400000000008205347512558 +0.512036000000000046661341457366 0.100888000000000005451639140119 1.31439799999999995527844021126 +0.51263400000000003409184046177 0.0731580000000000008064660050877 1.31600000000000005861977570021 +0.512820999999999971308284330007 0.0953660000000000063202776345861 1.31450399999999989475440997921 +0.512897999999999965048402827961 -0.163198000000000009723777338877 1.30778499999999997527311279555 +0.513180999999999998273381152103 0.0786840000000000039381831129504 1.31546699999999994190602592425 +0.513274000000000008014922059374 0.0898100000000000009414691248821 1.31471800000000005326228347258 +0.513394000000000017003287666739 0.0842419999999999974393816160045 1.31503999999999998671285084129 +0.513974999999999959676699745614 0.0763839999999999935687000629514 -1.31529300000000004544631337922 +0.51428899999999999614885837218 -1.06261800000000006249933903746 0.778684000000000042795988974831 +0.51547799999999999176480969254 -0.065758999999999998009592161452 1.31527900000000008695622000232 +0.515715999999999952230211874848 0.501908000000000020790480448341 1.21742599999999989712762271665 +0.516871999999999998109956322878 -0.252601999999999993207211446133 1.29191100000000003156230832246 +0.517043000000000030347280244314 0.328446999999999988961718599967 1.27467200000000002724220848904 +0.51785999999999998699706793559 -0.499510000000000009556799795973 -1.21750200000000008415668162343 +0.517974000000000045496051370719 -1.26117600000000007476330665668 0.375684000000000017926993223227 +0.517996000000000011986855952273 0.232863999999999987666754464044 1.2951660000000000394493326894 +0.518576000000000036926905977452 -0.425939999999999985291765369766 1.24485099999999992981258856162 +0.520043000000000033011815503414 -0.205117999999999994775734535324 -1.29903100000000004676792286773 +0.520182000000000033246294606215 -0.772256999999999971251440911146 -1.06443899999999991301535828825 +0.521070000000000033146818623209 1.30934499999999998109956322878 0.118756000000000000449418280368 +0.521943999999999963534946800792 0.0203270000000000013173906410202 -1.31421499999999991104004948284 +0.522407999999999983486986820935 1.0556380000000000762838681112 -0.78276199999999995782218320528 +0.522499999999999964472863211995 0.414835999999999982534859555017 1.2469580000000000108428821477 +0.522846999999999950681228710891 1.19203700000000001324451659457 0.552881999999999984574117206648 +0.523159000000000040664360767551 -1.00529800000000002491162831575 0.84597999999999995424104781705 +0.524305000000000021032064978499 -0.0597769999999999968043340459189 1.31207099999999998729549588461 +0.524793999999999982719600666314 0.32298700000000002408029331491 -1.27289900000000000268585154117 +0.524920999999999970953012962127 -1.09124200000000004528999397735 -0.730512999999999967926100907789 +0.525595000000000034390268410789 -0.149020000000000013562484468821 -1.30443200000000003591082986532 +0.525966999999999962334129577357 1.23874499999999998500754827546 -0.434593000000000007077005648171 +0.526510999999999951270979181572 -0.507479000000000013415046851151 1.21047600000000010744827250164 +0.526546999999999987274179602537 -0.0360740000000000018975931936893 -1.31203899999999995529265106597 +0.526716999999999990755839007761 0.226358000000000003648636948128 1.29279999999999994919619439315 +0.527059000000000055230486850633 0.580246000000000039520386962977 1.17708199999999996165911397838 +0.527510000000000034425795547577 -0.15703600000000000891375862011 1.30271800000000004260414243618 +0.527765999999999957381646709109 -0.0925979999999999997539745777431 -1.30877400000000010393819138699 +0.529962999999999961886487653828 -0.944008999999999987018384217663 0.909936999999999995836219568446 +0.530499999999999971578290569596 -0.635367000000000015091927707545 -1.14668100000000006133404895081 +0.531542999999999987714716098708 0.321417000000000008252953875854 1.27049300000000009447376214666 +0.531866999999999978676612499839 0.613716999999999957005059059156 -1.15778599999999998182431681926 +0.531931999999999960415664190805 1.15722499999999994813038028951 -0.614717999999999986648901995068 +0.532367000000000034631852940947 -0.587014000000000035761615890806 1.17132400000000003181810370734 +0.532745000000000024087398742267 -0.0532180000000000014148682225823 1.30895000000000005790923296445 +0.532931999999999961303842610505 1.14864999999999994884092302527 0.6297509999999999497077851629 +0.533017999999999991800336829328 1.29999200000000003640820978035 -0.160977000000000008972378395811 +0.533776000000000028222757464391 -0.335828000000000015390355656564 1.26582100000000008499512205162 +0.534676000000000040124348288373 -0.87899499999999997079669356026 0.970303000000000026581403744785 +0.534749999999999947597473237693 -1.22721700000000000230215846386 0.4560489999999999821689300461 +0.534807999999999950091478240211 -1.3066949999999999398880845547 -0.180452000000000001289635065405 +0.534945000000000003836930773105 -1.30531799999999997830002484989 0.0998909999999999936859396143518 +0.535042000000000017578827282705 0.219298999999999993937294107127 1.2905960000000000764686092225 +0.535451000000000010281553386449 -0.856203999999999965098140819464 -0.990053999999999989611865203187 +0.536121999999999987451815286477 -0.664232999999999962348340432072 1.12754899999999991244692409964 +0.536321999999999965424990477914 0.656294000000000044003911625623 1.13209399999999993369215189887 +0.536739999999999994884092302527 -0.245725999999999999978683717927 1.28511799999999998256328126445 +0.537279999999999979820586304413 -0.810512000000000010224709967588 1.02683999999999997498889570124 +0.537568999999999963534946800792 -1.01701899999999989532284416782 -0.822613999999999956358465169615 +0.537761999999999962263075303781 -0.738831000000000015504042494285 1.07932399999999995010568909493 +0.539494000000000029082514174661 1.29128799999999999137401118787 0.20377200000000000867927951731 +0.539792999999999967286612445605 0.466882000000000019213075574953 -1.22091900000000008752465419093 +0.540764000000000022438939595304 -0.0461080000000000031490365870468 1.30592799999999997773159066128 +0.540769000000000055194959713845 0.49351699999999998347277596622 1.20996299999999989971399827482 +0.540914000000000005918820988882 1.10072900000000006848210887256 0.704134999999999955377916194266 +0.541189000000000031143088108365 -0.938239999999999962909669193323 -0.90929599999999999315747345463 +0.541340000000000043378634018154 -0.444508999999999987462473427513 -1.22856100000000001415401129634 +0.541704999999999992077448496275 -0.149915999999999993708144074844 1.29772200000000004216360594 +0.542240999999999973013586895831 0.406779000000000001691091711109 1.24117100000000002424371814413 +0.54233699999999995799981888922 0.974470999999999976104447796388 -0.869642000000000026105340111826 +0.542938000000000031697311442258 0.211714999999999986535215157346 1.28856299999999990291144058574 +0.543468999999999979877429723274 0.729751999999999956258989186608 1.0826370000000000715090209269 +0.544275999999999982037479639985 -1.18035200000000006781419870094 -0.557254999999999944826356568228 +0.545610999999999957132956751593 0.313454999999999983639753509124 1.26651299999999999990052401699 +0.546761999999999970256681081082 1.04846499999999998031796621945 0.775741000000000013869794202037 +0.546831999999999984751752890588 -1.24984300000000003727507191797 -0.372649000000000008014922059374 +0.547335000000000015951684417814 0.266612999999999988887111612712 -1.27645600000000003504396772769 +0.548331000000000012839507235185 -0.0384760000000000032538416405714 1.30301700000000009183054316964 +0.548470000000000013073986337986 0.800329999999999985860199558374 1.02890799999999993374899531773 +0.548574000000000006060929536034 -0.417729000000000016967760529951 1.23473399999999999820943230588 +0.548626999999999975798914420011 0.706610999999999989107379860798 -1.09531200000000006333777946566 +0.549416000000000015468515357497 -1.18841499999999999914734871709 0.534614000000000033629987683526 +0.550371999999999972352782151575 0.203636000000000011445067116256 1.28671000000000002039257651631 +0.550451000000000023604229681951 0.992061999999999999388933247246 0.84428400000000003444711182965 +0.551306999999999991501908880309 0.867750000000000021316282072803 0.971118000000000036742164866155 +0.551968000000000014182433005772 0.93174500000000004540368081507 0.909495999999999971130648646067 +0.553633000000000041751491153263 0.888367000000000017756462966645 -0.950944000000000011496581464598 +0.555417000000000049553250391909 -0.0303520000000000005069278330438 1.30022700000000002162892087654 +0.555427000000000004042988166475 -0.141868999999999995109689621131 1.29281599999999996519761680247 +0.555787999999999948741447042266 1.26813500000000001222133505507 0.287982999999999988993693023076 +0.555831999999999992745358667889 0.798626999999999975798914420011 -1.02627700000000010582823506411 +0.556131999999999959705121455045 -0.23754700000000000814637246549 1.27839299999999989054799698351 +0.556293000000000037452707601915 1.25162900000000010258816018904 -0.352086000000000010068390565721 +0.556838000000000055145221722341 -1.28688599999999997436361809378 0.183997999999999994891197729885 +0.556891000000000024883206606319 1.29776000000000002465583293088 -0.0754309999999999980513365471779 +0.556903999999999954617635467002 0.570250000000000034638958368305 1.16819199999999989714183357137 +0.557317999999999980076381689287 0.195092999999999988647303439393 1.2850429999999999353121893364 +0.558463999999999960444085900235 -0.327284000000000019348078694748 1.25737999999999994216182130913 +0.559190999999999993619326232874 0.30459300000000000263611354967 1.26274599999999992405719240196 +0.560609000000000023966606477188 -0.719482999999999983664622504875 -1.08076900000000009072209650185 +0.561207000000000011397105481592 -0.497981000000000006977529665164 1.19877499999999992397192727367 +0.561447999999999947107198750018 -0.388004000000000015546675058431 -1.2386399999999999632649405612 +0.561486000000000040621728203405 0.397448000000000023490542844229 1.235624999999999973354647409 +0.561912999999999995814903286373 -1.14492299999999991300114743353 0.611068999999999973304909417493 +0.561992999999999964799712870445 -0.0217679999999999991555643674701 1.29757100000000002992806003022 +0.562377000000000015766943306517 -0.58068699999999995320365542284 -1.16040300000000007329958862101 +0.562895999999999951945994780544 -1.29378900000000007786127298459 -0.0962159999999999959729990450796 +0.563379999999999991899812812335 1.08566999999999991288746059581 -0.709875000000000033750779948605 +0.563745000000000051620929752971 0.186121000000000008656186878397 1.28356899999999995998223312199 +0.565300000000000024691360067663 0.483505000000000018101076193489 1.20277199999999995227994986635 +0.566481000000000012306600183365 0.208938000000000012601475418705 -1.27884500000000000952127265919 +0.567311000000000009713119197841 1.17923399999999989340437878127 -0.536251000000000033196556614712 +0.568033000000000010132339411939 -0.0127569999999999992429389195081 1.29505800000000004246203388902 +0.568622999999999989562127211684 -0.132923999999999986609822144601 1.28802100000000008250822247646 +0.569209999999999993747223925311 -1.11529900000000004034461653646 -0.657349999999999989874766015419 +0.569630999999999998451016836043 0.176754999999999995452526491135 1.28229400000000004489209004532 +0.569888999999999978918197029998 1.23997700000000010689404916775 0.371057999999999998941291323717 +0.570732000000000017081447367673 0.410328000000000026048496692965 -1.22714900000000004531841568678 +0.570841000000000042824410684261 0.644733000000000000540012479178 1.12181099999999989158538937772 +0.571382999999999974249931256054 0.558559000000000027696955839929 -1.16684699999999996755661868519 +0.571624000000000020982326986996 -0.576269000000000031214142381941 1.15808500000000003105071755272 +0.572192999999999951654672258883 -1.09691200000000010916778592218 0.685112000000000054278359584714 +0.572230000000000016413537196058 0.294866000000000016978418670988 1.25920900000000002272315668961 +0.573513999999999968260055993596 -0.00335600000000000004210520820891 1.29269900000000004247624474374 +0.574949999999999961097785217135 0.167032000000000013795187214782 1.28122300000000000075317529991 +0.574971000000000009855227744993 -0.228098999999999996202149077362 1.27176200000000005907452305109 +0.576532999999999962170704748132 -1.26337499999999991473487170879 0.267380000000000006554756737387 +0.577983000000000024520829811081 -0.407550000000000023359092438113 1.224679000000000073100636655 +0.578103999999999951242557472142 -0.330218000000000011517897746671 -1.24769899999999989148591339472 +0.578412999999999954958695980167 0.00639900000000000017397194795876 1.29050299999999995570476585272 +0.57856700000000005346123543859 1.29040700000000008174083632184 0.010413000000000000380695475144 +0.57968299999999994831512140081 0.156988999999999989665155908369 1.28035999999999994258814695058 +0.579766000000000003566924533516 -1.25679099999999999148769802559 -0.290428999999999992720489672138 +0.579786000000000023568702545163 -0.652280999999999999694466623623 1.11282400000000003537081738614 +0.580156000000000005023537141824 0.38688099999999997491428871399 1.23034200000000004671107944887 +0.580215000000000036273206660553 -1.04457299999999997375255134102 0.756450999999999984524379215145 +0.581188999999999955647922433855 -0.803763000000000005229594535194 -1.00805999999999995608845893003 +0.581241000000000007652545264136 -0.1231180000000000052118309668 1.28335500000000002351896455366 +0.58174199999999998134114775894 1.20692500000000002557953848736 0.452668000000000014804157899562 +0.582153999999999949288564948802 0.15018699999999998717647997637 -1.28005499999999994287236404489 +0.582524999999999959499064061674 0.716670999999999946972195630224 1.07100299999999992728305642231 +0.582559999999999966746599966427 -0.317122000000000014985346297181 1.24902299999999999435829067806 +0.582671999999999967734254369134 -1.19636499999999990073717981431 -0.478754000000000012882139799331 +0.582712000000000007737810392427 0.0164690000000000009994227667676 1.28847800000000001219291334564 +0.583810000000000051123549837939 0.146667999999999992821742011984 1.2797089999999999854196630622 +0.584423000000000025799806735449 1.25957300000000005368860911403 -0.268189000000000010714984455262 +0.584675999999999973510966810863 0.284312000000000009158895863948 1.25591399999999997483257629938 +0.585659999999999958397722821246 -0.725720000000000031725733151688 1.06317100000000008819256436254 +0.585849999999999981881160238117 -1.04388900000000006684786058031 -0.753044000000000046668446884723 +0.585946999999999995623056747718 -0.988110999999999961573848850094 0.824805000000000010373923942097 +0.586126999999999953594453927508 0.558323000000000013720580227528 1.15962499999999990585308751179 +0.586393999999999970818009842333 0.0268140000000000010282885654078 1.28663299999999991563015555585 +0.587106000000000016747492281866 1.0073730000000000739390770832 -0.800314999999999998614441665268 +0.587315000000000031477043194172 0.136108000000000006757261417079 1.27927100000000004698108568846 +0.588763000000000036315839224699 -1.28577800000000008751044333621 -0.0115999999999999992006394222699 +0.58921199999999995799981888922 0.471911000000000024900970174713 1.19588000000000005407230219134 +0.589222000000000023511859126302 -0.796293999999999946304285458609 1.00932299999999997019983766222 +0.589365999999999945480055885128 -0.927749000000000045851322738599 0.889904000000000028336444302113 +0.589443000000000050242476845597 0.0373939999999999966862063160988 1.28497400000000006059508450562 +0.590184999999999959641172608826 0.125351999999999991208810001808 1.27905000000000002025046796916 +0.590458999999999956109775212099 -0.863725999999999993761434780026 0.951490999999999975678122154932 +0.590874000000000010324185950594 -0.523950000000000026822988274944 -1.17317699999999991433696777676 +0.591242999999999963023356031044 -0.271378999999999981351805899976 -1.25570099999999995610266978474 +0.591297999999999990272669947444 1.1691110000000000113118403533 0.532491000000000047620574150642 +0.591848999999999958454566240107 0.0481670000000000014805934256401 1.28350900000000001099920154957 +0.591910000000000047215564791259 0.785780999999999951732831959816 1.01596799999999998220800989657 +0.592168000000000027682744985214 -0.886827000000000031931790545059 -0.928910000000000013464784842654 +0.592408000000000045659476199944 0.114441000000000001057820497863 1.27904499999999998749444785062 +0.593184000000000044572345814231 -0.21741800000000000014921397451 1.26525200000000004330047431722 +0.593230999999999952798646063457 -0.112489000000000005652367462972 1.27883700000000000152056145453 +0.593457000000000012285283901292 0.651469999999999993534061104583 -1.10607199999999994410870840511 +0.593601000000000045275783122634 0.0590899999999999966937558326663 1.28224300000000002164313173125 +0.593637999999999999012345597293 -0.967311000000000031917579690344 -0.843744000000000049510617827764 +0.593953999999999981973530793766 -1.23487900000000005995559604344 0.349704999999999988080645607624 +0.593975000000000030730973321624 0.103418999999999997041477683979 1.27925700000000008849099231156 +0.594295000000000017692514120426 0.0905939999999999939772621360135 -1.28008100000000002438582669129 +0.594691999999999998394173417182 0.0701210000000000027720048478841 1.28118099999999990323829024419 +0.594879999999999964366281801631 0.092328999999999994408028669568 1.27968499999999996141752944823 +0.59511899999999995358734850015 0.0812149999999999955280216568099 1.28032699999999999285194007825 +0.595222000000000028840929644502 -0.486207999999999973539388520294 1.18714399999999997703525878023 +0.596480000000000010196288258157 0.272973999999999994425792237962 1.25287499999999996092014953319 +0.597741999999999995552002474142 -0.664089000000000040380143673246 -1.09621600000000007923972589197 +0.597959000000000018282264591107 1.27796200000000004237676876073 0.0962159999999999959729990450796 +0.598180000000000045012882310402 0.375120000000000008988365607365 1.22534300000000007102585186658 +0.598257999999999956486362862051 0.351920000000000010587086762825 -1.2321679999999999299831188182 +0.598520000000000051976201120851 1.1266819999999999613038426105 0.610214000000000034162894735346 +0.598960000000000047926107527019 0.851789000000000018353318864683 0.956922999999999968068209454941 +0.600450999999999956990848204441 1.19658899999999990271248861973 -0.455668000000000017468693158662 +0.600812000000000012711609542748 -0.211717999999999989535481859093 -1.26261700000000010035705599876 +0.602127999999999996560973158921 1.11141800000000001702460394881 -0.634186999999999945210049645539 +0.602437000000000000277111666946 0.923509000000000024321877845068 -0.885550999999999977063680489664 +0.602852999999999972224884459138 0.0303940000000000008772982340588 -1.27892300000000003201705567335 +0.603380999999999945160311654035 1.0798069999999999613038426105 0.685528000000000026226132376905 +0.603644999999999987139176482742 0.914436000000000026588509172143 0.894101999999999952351004139928 +0.604543999999999970285102790513 -0.101079000000000002179589841944 1.27448399999999995024779764208 +0.604640999999999984026999300113 0.630936999999999970079045397142 1.11190300000000008573408649681 +0.605859999999999954134466406686 1.02867099999999989101695518912 0.758136000000000032095215374284 +0.605918999999999985384135925415 0.744199999999999972644104673236 -1.03876300000000010292922070221 +0.605948000000000042142289657932 0.973473999999999950460960462806 0.827752999999999961033836370916 +0.605968999999999979877429723274 -0.305381000000000013550049970945 1.24078299999999996927613210573 +0.606688000000000005051958851254 -0.395444000000000017713830402499 1.21472299999999999720046162111 +0.606774000000000035548453070078 -0.15147299999999999653432780633 -1.26841699999999990566834640049 +0.60756399999999999295141606126 0.500978000000000034397373838146 -1.17468499999999997918109784223 +0.607596000000000024954260879895 0.260894999999999988027354902442 1.25010400000000010400924566056 +0.607797000000000031683100587543 -0.0301769999999999989637178288149 -1.27658699999999991625543316331 +0.608836000000000043819170514325 0.835339999999999971436182022444 -0.965156000000000013905321338825 +0.60902999999999996028066107101 -1.20150899999999993816857113416 0.430651000000000006018296971888 +0.609105000000000007531752999057 -0.0908790000000000014468426456915 -1.27307999999999998941291323717 +0.610111999999999987664978107205 -0.562948000000000003950617610826 1.14492499999999997051247646596 +0.610248000000000012654766123887 1.26254599999999994608401721052 -0.183234000000000007979394922586 +0.610412999999999983380405410571 -1.25877799999999995250732354179 -0.207062999999999997058353073953 +0.61069799999999996309441030462 -0.205547000000000007480238650714 1.25888800000000000700595137459 +0.611253000000000046298964662128 -1.13495400000000001838884600147 -0.581591999999999997861266365362 +0.612306000000000016925127965806 -1.27269100000000001671196514508 0.0730610000000000009423573033018 +0.61241199999999995640109773376 0.458780000000000021120882820469 1.18931600000000003980460405728 +0.614612999999999964906294280809 0.544510999999999967258190736175 1.15141599999999999504041170439 +0.61499199999999998311750459834 1.2604729999999999545678974755 0.1816389999999999949054085846 +0.615137999999999962597030389588 -0.0889329999999999981641352064798 1.27031399999999994321342455805 +0.615484999999999948805395888485 0.362209999999999976427744741159 1.22064799999999995527844021126 +0.615878000000000036529002045427 -0.465380000000000015880630144238 -1.18495400000000006279776698648 +0.617979999999999973780973050452 0.248123000000000010212275469712 1.2476119999999999432560571222 +0.618767999999999984694909471727 -1.20765600000000006275513442233 -0.398363000000000022637891561317 +0.620767999999999986471266311128 0.701061999999999962973618039541 1.05979200000000006731681878591 +0.621703000000000005620393039862 -1.16339600000000009671907719166 0.509897000000000044650505515165 +0.622261999999999981803000537184 0.291889000000000009560352509652 -1.23595699999999997231725501479 +0.622592999999999952009943626763 -0.637465999999999977099207626452 1.09818700000000002425792899885 +0.623635999999999968146369155875 -0.748353000000000045943693294248 -1.02520600000000006168932031869 +0.624968999999999996752819697576 -0.0760989999999999999769073610878 1.26634200000000007868550255807 +0.627444000000000001726618847897 -0.192532000000000008688161301507 1.25269499999999989192644989089 +0.627589999999999981206144639145 0.234709000000000000962785406955 1.24540899999999998826183400524 +0.628422999999999953857354739739 -0.472206000000000014615864074585 1.17562999999999995281996234553 +0.628600000000000047606363295927 -0.292109999999999980779818997689 1.23269399999999995642951944319 +0.629558999999999979735321176122 1.03630099999999991666754795006 -0.727829999999999976978415361373 +0.629596999999999962227548166993 1.23800899999999991507593222195 0.266346000000000027174706929145 +0.631220000000000003304023721284 1.2092220000000000190709670278 -0.37328600000000000669331257086 +0.631435999999999997278621322039 -0.60629200000000005310596407071 -1.11071999999999992958521488617 +0.6318190000000000194901872419 -1.06664099999999995027621935151 -0.680502000000000051294080094522 +0.631920999999999954965801407525 -1.12069299999999993922017438308 0.587131999999999987238652465749 +0.632002999999999981461940024019 0.348202999999999984748200176909 1.21627599999999991275956290337 +0.632618000000000013649525953952 -0.709466999999999958781415898557 1.04711500000000001797673121473 +0.633433000000000023810287075321 -1.2545820000000000860040927364 0.157433999999999990615506817448 +0.633664000000000005030642569182 1.26053700000000001857358711277 -0.0975560000000000038244962752287 +0.634000000000000007993605777301 -0.0626270000000000021112001036272 1.26258599999999998608757323382 +0.634445999999999954432894355705 0.768419999999999991935339949123 1.00349899999999991884180872148 +0.63457500000000000017763568394 -0.38145800000000001928057713485 1.20490800000000009006839718495 +0.634807000000000010153655694012 0.444166000000000005254463530946 1.18310500000000007325695605687 +0.634948999999999985632825882931 0.593555999999999972516206980799 -1.11558599999999996654764800041 +0.636388999999999982470910708798 0.220706000000000013283596445035 1.24350200000000010724932053563 +0.637291000000000051883830565203 -0.405208000000000012619238987099 -1.19568699999999994432187122584 +0.63758800000000004359890226624 0.614962000000000008625988812128 1.10240699999999991476329341822 +0.638499999999999956479257434694 1.13277800000000006264144758461 -0.555995000000000016981971384666 +0.638650999999999968714803344483 -1.25579599999999991233323726192 -0.122879000000000002112976460467 +0.639646000000000047869264108158 -1.07356600000000002026467882388 0.662047999999999969844566294341 +0.639901000000000053091753215995 -0.832098000000000004305888978706 -0.947702000000000044366288420861 +0.64014599999999999280220208675 -0.778668999999999944527928619209 0.991910999999999987153387337457 +0.640267000000000030546232210327 0.441201999999999983081977461552 -1.18127000000000004220623850415 +0.641718000000000010629719326971 1.21066000000000006942002528376 0.350001000000000006551204023708 +0.642194000000000042582826154103 -0.0485719999999999971218578309617 1.25905800000000001048761077982 +0.642249999999999987565502124198 0.528869000000000033523406273162 1.1435960000000000569286839891 +0.642650000000000054534154969588 0.230470000000000008189005029635 -1.23850100000000007405276392092 +0.643356000000000038951952774369 -0.17842500000000000026645352591 1.24669800000000008388667538384 +0.643743999999999982897236350254 -0.99256299999999997307753574205 -0.774862000000000050725645905914 +0.644341000000000052594373300963 0.206168999999999991157295653466 1.24190099999999992164134710038 +0.644846999999999948016693451791 -1.02220299999999997275779151096 0.734352000000000004753530902235 +0.645147000000000025998758701462 -0.844798000000000048892445647652 0.932791999999999954518159483996 +0.64561999999999997168487197996 0.832744999999999957474017264758 0.943245000000000000106581410364 +0.646548000000000011588952020247 -0.913950000000000040145664570446 -0.864101000000000007972289495228 +0.647503000000000050739856760629 -0.966806000000000054228621593211 0.803757999999999972473574416654 +0.647603000000000039726444356347 -0.907592999999999983096188316267 0.869991999999999987558396696841 +0.647669000000000050221160563524 0.333154999999999978932407884713 1.21224299999999995947064235224 +0.647676999999999947199569305667 -0.547104999999999952464690977649 1.13189699999999993096366779355 +0.648862999999999967570829539909 0.955007000000000050299320264457 -0.816663000000000027789326395578 +0.649518999999999957495333546831 -0.0339870000000000033191227544194 1.25577500000000008562039965909 +0.650361999999999995658583884506 -0.277359000000000022190249637788 1.22478599999999993030996847665 +0.650884000000000018104628907167 -1.15013000000000009670486633695 -0.503539999999999987601029260986 +0.65130600000000005156408633411 1.17853199999999991298693657882 0.432275000000000020339285811133 +0.651417000000000023796076220606 0.19115499999999999158895036544 1.24061099999999990828314366809 +0.652059999999999972963848904328 -1.23152200000000000557065504836 0.241186000000000011489476037241 +0.652422999999999975173636812542 -1.2141809999999999547526385868 -0.316400000000000014566126083082 +0.652706000000000008398615136684 0.6866520000000000401030320063 -1.04999200000000003640820978035 +0.65424599999999999422328755827 0.893782999999999994145127857337 0.879268999999999967265296163532 +0.654579000000000021941559680272 1.25355299999999991733545812167 -0.0114929999999999997439825705214 +0.655028000000000054647841807309 -0.343671999999999977504216985835 -1.2053329999999999877502432355 +0.655946000000000029039881610515 -0.0189320000000000009110490140074 1.25274799999999997268673723738 +0.656309999999999948983031572425 0.428124999999999977795539507497 1.17727099999999995638688687905 +0.657587000000000032606806144031 0.175723999999999991317167769012 1.2396370000000000999307303573 +0.658047999999999966291852615541 0.682987000000000010757617019408 1.04904799999999998050270733074 +0.658322999999999991516119735024 1.14175399999999993561061728542 0.512843000000000048821391374076 +0.658371999999999957253749016672 -0.163282000000000010464518140907 1.24092099999999994075494669232 +0.659340999999999954894747133949 0.167908000000000001694644424788 -1.23978900000000002989963832079 +0.659437000000000050903281589854 0.868757000000000001449507180951 -0.900225000000000052935433814127 +0.659498999999999946375339732185 1.21708299999999991491961282009 -0.289432000000000022588153569814 +0.660290000000000043556269702094 0.951295000000000001705302565824 0.811822000000000043584691411525 +0.660676999999999958745888761769 -0.456029999999999990922816550665 1.1642770000000000063522520577 +0.660819999999999962980723466899 0.778851999999999988766319347633 -0.978114000000000038959058201726 +0.661449999999999982414067289938 -0.00346500000000000019789725413943 1.24998900000000001675459770922 +0.66153499999999998415489699255 -0.365647999999999973042008605262 1.19527099999999997237409843365 +0.661556000000000032912339520408 -0.546321999999999974306774674915 -1.12422200000000005459810381581 +0.662421999999999955299756493332 0.317124000000000016985524098345 1.20856499999999988936849604215 +0.662625000000000019539925233403 -0.690189999999999970192732234864 -1.04142500000000004511946372077 +0.662742999999999971016961808346 1.10047000000000005925926416239 0.591386999999999996013855252386 +0.662827999999999972757791510958 0.159935999999999994836130667863 1.23898299999999994547295045777 +0.663727999999999984659382334939 1.00505200000000005644551492878 0.741172000000000052999382660346 +0.664367999999999958582463932544 -1.24785999999999996923349954159 -0.0382110000000000019082513347257 +0.664375000000000048849813083507 -0.61984399999999995056754187317 1.08369699999999991035792845651 +0.664546999999999998820499058638 1.05484200000000005736922048527 0.667596999999999995978328115598 +0.666008999999999962149388466059 0.0123529999999999993975929868384 1.24750899999999997902477844036 +0.667117999999999988780530202348 0.143855000000000010640377468008 1.23865200000000008628830983071 +0.668112999999999956912688503508 -1.20360200000000006070877134334 0.323985999999999996212807218399 +0.668930000000000024584778657299 0.511458999999999996965982518304 1.1361969999999999014761442595 +0.669019000000000030325963962241 -0.28101500000000001477928890381 -1.21385499999999990627941315324 +0.669360999999999983778309342597 0.379464999999999996749266983898 -1.18657499999999993534061104583 +0.669526999999999983259613145492 1.06113799999999991463539572578 -0.652472000000000051933568556706 +0.669553999999999982506437845586 0.596871000000000040408565382677 1.09336300000000008481038094033 +0.669606000000000034511060675868 0.0284590000000000016566747973457 1.24531799999999992500931966788 +0.670440999999999953651297346369 0.127541999999999988713028642451 1.23864499999999999602096067974 +0.67117000000000004433786671143 -0.261187000000000002497557716197 1.21709099999999992292032402474 +0.672224999999999961453056585015 0.0447900000000000034217073618947 1.24342500000000000248689957516 +0.672269000000000005456968210638 0.104446999999999998176569704356 -1.23981699999999994687982507457 +0.672351999999999949686468880827 1.14966900000000005199751740292 -0.475609999999999977227105318889 +0.672431000000000000937916411203 -0.14716199999999998726529781834 1.23538600000000009515588317299 +0.672784000000000048657966544852 0.111062999999999995059951629628 1.23896199999999989671550792991 +0.672911000000000036891378840664 1.24162100000000008570566478738 0.0746160000000000017683632336229 +0.672938000000000036138203540759 0.5330979999999999607851464134 -1.12381599999999992611776633566 +0.673857000000000039285907860176 0.0612810000000000021369572777985 1.24183799999999999741362444183 +0.674136999999999986243892635684 0.0944829999999999975424103126898 1.23960099999999995290522747382 +0.674494999999999955697660425358 0.0778670000000000056550319982307 1.24056100000000002481215233274 +0.675294999999999978612663653621 -1.08518200000000009097789188672 -0.60527399999999997870503420927 +0.675910000000000010800249583554 0.748315999999999981184828357073 0.991549000000000013699263945455 +0.676202999999999998514965682261 0.300173000000000023135271476349 1.20525799999999994049915130745 +0.676834999999999964437336075207 0.41071999999999997399413587118 1.17183700000000001750777300913 +0.678451000000000026268764941051 -0.690137000000000000454747350886 1.03122000000000002550848421379 +0.679208999999999951668883113598 -0.217483000000000009643841281104 -1.22121900000000005448441697808 +0.681382999999999960927254960552 0.0403400000000000008570921750106 -1.23858399999999990725996212859 +0.681529999999999969162445268012 -1.17093200000000008387246452912 0.405507000000000006334488489301 +0.683502999999999971691977407318 -1.21591399999999993930543951137 -0.233189000000000007384315381387 +0.684172000000000002373212737439 -0.528801999999999994273025549774 1.11905199999999993565324984957 +0.68420099999999994810906400744 -0.774268999999999985028864557535 -0.965597000000000038610892261204 +0.685176000000000007261746759468 1.22014000000000000234479102801 -0.204435000000000005604405828308 +0.685478999999999949466200632742 -0.130128999999999994674482195478 1.23011599999999998722444161103 +0.685558000000000000717648163118 -0.153327999999999992075672139435 -1.22739599999999993151789112744 +0.686647000000000007347011887759 -0.0241609999999999984499066130184 -1.23609499999999994379606960138 +0.687459999999999959996443976706 -0.348075999999999996514787881097 1.18585099999999998843236426183 +0.68746300000000004626343752534 -1.23499899999999995792165918829 0.0466079999999999966542318929896 +0.687945999999999946439288578404 -1.16076599999999996448707406671 -0.423499999999999987565502124198 +0.687984999999999957687180085486 -0.484414000000000011247891507082 -1.13667000000000006920686246303 +0.688039999999999984936494001886 -0.0888020000000000059303673083377 -1.2323610000000000397335497837 +0.688586999999999949118034692219 1.22479000000000004533262654149 0.160429999999999989279686474219 +0.688957000000000041595171751396 0.282370999999999983121057312019 1.20233300000000009610801043891 +0.689849999999999963229413424415 -0.757707000000000019390711258893 0.974673000000000011588952020247 +0.690942999999999973859132751386 -0.243658000000000013463008485814 1.20964000000000004853006885241 +0.691104000000000051606718898256 0.810691000000000050462745093682 0.930136999999999991572963153885 +0.691309999999999980069276261929 -1.01389900000000010571454822639 -0.702922000000000046782133722445 +0.691859000000000001762145984685 -0.437742999999999993221422300849 1.15313099999999990608046118723 +0.692257000000000011219469797652 -1.13363999999999998102850895521 0.485428000000000026137314534935 +0.692729000000000039172221022454 0.982735000000000025188739982696 -0.744551999999999991608490290673 +0.694216000000000055258908560063 0.662517000000000022552626433026 1.03881500000000004391154106997 +0.694544999999999967954522617219 0.492350000000000009858780458671 1.12924699999999988975218911946 +0.69473399999999996268229551788 0.316012000000000015109691275939 -1.19057999999999997164934484317 +0.696008999999999988794741057063 0.626210000000000044373393848218 -1.05992099999999989101695518912 +0.696089999999999986535215157346 -0.857148000000000021003643269069 -0.883603999999999945025308534241 +0.696301999999999976509457155771 0.392021000000000008345324431502 1.16682599999999991879917615734 +0.697463999999999972878583776037 -0.112250000000000002553512956638 1.22513000000000005229594535194 +0.698002000000000011326051208016 -0.629504999999999981241671775933 -1.05665300000000006441780442401 +0.698375999999999996781241407007 -0.937466000000000021508128611458 -0.795881999999999978356868268747 +0.698525999999999980261122800584 -0.822285999999999961396213166154 0.914279999999999981596943143813 +0.700251999999999985568877036712 -1.09187400000000001121236437029 0.563433999999999990393462212523 +0.700412000000000034560798667371 0.57673399999999996889954445578 1.0848050000000000192557081391 +0.700635000000000007780442956573 0.263786000000000020460078076212 1.19980299999999995286259490967 +0.701546000000000002927436071332 1.203125 0.245610999999999995990762613474 +0.703551000000000037459813029272 1.16202200000000011037570857297 -0.393347000000000002195577053499 +0.703571999999999975194953094615 0.869867999999999974569675487146 0.865052999999999960856200686976 +0.704444999999999987849719218502 -0.883619999999999961026730943559 0.850277999999999978264497713099 +0.704965999999999981540099724953 -0.599486999999999992105870205705 1.06940999999999997172039911675 +0.705482999999999971230124629074 -1.04580000000000006288303211477 0.639214999999999977653430960345 +0.706852000000000035839775591739 1.08178700000000005410072390077 -0.574540000000000050661697059695 +0.707273999999999958276930556167 0.470333999999999974317432815951 -1.13072900000000009512746146356 +0.707435000000000036024516703037 0.898743999999999987338128448755 -0.831740999999999952585483242729 +0.707583999999999990748733580403 -0.94146700000000005381650680647 0.782920999999999978058440319728 +0.707845999999999975216269376688 -1.21726299999999998391331246239 0.131242999999999998550492819049 +0.7079309999999999769570990793 -0.995597999999999982989606905903 0.71247400000000005171330030862 +0.708147999999999999687361196266 1.21838200000000007605649443576 -0.118631000000000000338395977906 +0.708339000000000051926463129348 -0.0935959999999999986419751962785 1.22044899999999989503862707352 +0.709378999999999981795895109826 0.719123999999999985455190198991 -0.989769000000000009897860309138 +0.709601000000000037282177345332 -0.224841000000000013070433624307 1.20246100000000000207478478842 +0.710619000000000000660804744257 -0.420812999999999992617460975453 -1.14801500000000000767386154621 +0.711189999999999988844479048566 0.244492999999999988114396387573 1.19767800000000002036415480688 +0.711735000000000006536993168993 1.17671100000000006247091732803 0.329822000000000004060751734869 +0.711884999999999990016874562571 -1.2128479999999999261461880451 -0.14905699999999999505462255911 +0.712247999999999992226662470785 -0.328811000000000019927171024392 1.17668400000000006322409262793 +0.713111999999999968125052873802 0.810428999999999954972906834882 -0.913605000000000000426325641456 +0.71326199999999995160493426738 0.925610999999999961573848850094 0.796556000000000041794123717409 +0.714632999999999962703611799952 0.372101000000000015077716852829 1.16225599999999995581845269044 +0.716104999999999991544541444455 -1.09944099999999989059062954766 -0.527657999999999960394347908732 +0.71613700000000002354738626309 0.725547999999999970732744714041 0.980167000000000010473399925104 +0.716283000000000003026912054338 0.251093999999999983874232611925 -1.19326899999999991308641256182 +0.718060999999999949316986658232 -0.0742400000000000004352074256531 1.21609100000000003305444806756 +0.718996999999999997221777903178 0.471615999999999979674925043582 1.12277399999999993873700532276 +0.719117000000000006210143510543 1.1456539999999999501767433685 0.412731999999999987771559517569 +0.719453000000000009173106718663 -0.508110999999999979337417244096 1.10644000000000009009681889438 +0.720137999999999944833461995586 0.977701000000000042255976495653 0.724914999999999976054709804885 +0.720579999999999998294697434176 0.224566999999999988846255405406 1.19596600000000008456879641017 +0.721844000000000041161740682583 -0.417418999999999984495957505715 1.1422360000000000290754087473 +0.722292000000000045112358293409 -1.16682299999999994355448507122 -0.341789000000000009471534667682 +0.722979000000000038284042602754 -0.667806000000000010707879027905 1.01554799999999989523757903953 +0.723659999999999969944042277348 1.11007499999999992290611317003 0.494012999999999979916509573741 +0.724171000000000009144685009232 1.02593299999999998384225818882 0.650413000000000018907542198576 +0.72489199999999998080824070712 -0.713567999999999980076381689287 -0.982523999999999952947860037966 +0.725346999999999964003905006393 1.07011600000000006716049938404 0.573344999999999993534061104583 +0.725434000000000023256063741428 -1.1947239999999998971702552808 0.215360999999999996878941033174 +0.726590999999999986869170243153 -0.0542580000000000006732392421327 1.21207299999999995598898294702 +0.727071000000000022822632672614 -0.204810999999999993059773828463 1.195583999999999980090592544 +0.72832500000000000017763568394 1.21181500000000008654410521558 -0.0323589999999999988755661206596 +0.728769000000000000127897692437 0.2040869999999999906403758132 1.19467300000000009596590189176 +0.729129999999999944826356568228 0.639732999999999996099120380677 1.02913100000000001799094206945 +0.729365999999999958802732180629 -0.35576999999999997514876781679 -1.15821100000000010155076779483 +0.729628000000000054292570439429 -0.566537999999999986044940669672 -1.07082999999999994855670593097 +0.73003899999999999348432311308 0.554632000000000013884005056752 1.0767659999999998898800868119 +0.731756999999999990791366144549 0.351038999999999989931609434279 1.15814700000000003754507815756 +0.731972999999999984765963745303 1.16978899999999996772714894178 -0.309531999999999973827158328277 +0.733860999999999985554666181997 1.00658500000000006302514066192 -0.669502999999999959257479531516 +0.73389599999999999280220208675 -0.0337300000000000030353497493252 1.20841200000000004166622602497 +0.733925000000000049560355819267 0.184964999999999990532018045997 -1.19463000000000008071765478235 +0.735233000000000025409008230781 0.785715999999999969993780268851 0.917650999999999994471977515786 +0.735654999999999947846163195209 0.56311299999999997467625689751 -1.06851000000000007084111075528 +0.735724999999999962341235004715 0.183132999999999990237142810656 1.1938050000000000050448534239 +0.735801999999999956081353502668 -0.30792900000000000826361201689 1.16780799999999995719690559781 +0.736146999999999995800692431658 -1.03123399999999998399857759068 -0.628206999999999959882757138985 +0.73745799999999994689403592929 -1.20499700000000009580958248989 -0.0643370000000000052953197382521 +0.737823000000000006615152869927 0.405511999999999983579357376584 -1.13630000000000008775202786637 +0.738137999999999960820673550188 -0.733489999999999975344167069125 0.957677000000000000490274487674 +0.739947000000000021380230919021 -0.012737000000000000057842619583 1.20512100000000010879830369959 +0.740160000000000040110137433658 -1.16746900000000009001155376609 0.298628000000000004554578936222 +0.7413880000000000469739802611 1.09816800000000003301181550341 -0.494340000000000001634248292248 +0.741419000000000050221160563524 0.161789999999999989377386100387 1.19336599999999992682830907142 +0.742067000000000032144953365787 -0.797128999999999976466824591625 -0.902177000000000006707523425575 +0.742187000000000041133318973152 0.449340999999999990421883921954 1.11680399999999990789945059078 +0.743283999999999944741091439937 -0.183646000000000003682387728077 1.18903500000000006409095476556 +0.744155000000000010906830993918 -0.289540999999999992819965655144 -1.16721900000000000652278231428 +0.744206999999999951889151361684 -0.576474000000000041943337691919 1.05538299999999996003907654085 +0.744720000000000048601123125991 0.00863900000000000084510176634467 1.20221299999999997609734236903 +0.745627999999999957481122692116 1.20046600000000003305444806756 0.0540409999999999987596588368888 +0.745828999999999964209962399764 0.140139999999999986801668683256 1.19335600000000008336087375937 +0.747448000000000001286082351726 -0.957282999999999995033306277037 -0.724520999999999970597741594247 +0.747589999999999976765252540645 0.117888999999999993795185559975 -1.19466000000000005520917056856 +0.747604999999999964011010433751 0.328917999999999988158805308558 1.15451299999999990042454101058 +0.748197000000000000952127265919 0.0303129999999999996673771818223 1.19970099999999990636467828153 +0.748937999999999992617460975453 0.118270000000000000128785870857 1.19377700000000008806466667011 +0.74953000000000002955857780762 -0.87881500000000001282529638047 -0.816019000000000049865889195644 +0.750363000000000002209787908214 0.0521990000000000023416824035394 1.19759400000000004737898962048 +0.750383000000000022211565919861 -0.796278000000000041325165511807 0.896028000000000046654236030008 +0.750515000000000043200998334214 -0.395137000000000015997869695639 1.13163299999999988898480296484 +0.750734000000000012420287021087 0.096265000000000003343991750171 1.1946259999999999656949967175 +0.751210000000000044373393848218 0.0742120000000000001882938249764 1.19589999999999996305177774047 +0.751426999999999956081353502668 0.84278299999999994884802845263 0.851512999999999964373387228989 +0.751964999999999994528820934647 -1.13560700000000003306865892228 0.380717000000000027615243425316 +0.752642000000000033210767469427 0.925185000000000035136338283337 -0.759974999999999956123986066814 +0.753380000000000049631410092843 -0.485115000000000018420820424581 1.094111999999999973454123392 +0.753789000000000042334136196587 -1.16827400000000003466027465038 -0.258728999999999986769694260147 +0.754090000000000038049563499953 -1.10935999999999990173193964438 -0.447960000000000024833468614816 +0.754321000000000019269918993814 0.65639300000000000423483470513 -1.00007399999999990747312494932 +0.754925999999999985945464686665 -0.222389000000000003343103571751 -1.17500200000000010192025001743 +0.754970999999999947682738365984 0.700207000000000023831603357394 0.969396000000000035434766232356 +0.757222999999999979436893227103 0.0501279999999999989479526618652 -1.19335700000000000109423581307 +0.757377999999999995672794739221 -0.501535999999999981824316819257 -1.08390000000000008562039965909 +0.757506000000000012661871551245 1.17293899999999995387156559445 -0.224495000000000000106581410364 +0.758028999999999952841278627602 -0.285513000000000016775913991296 1.15925600000000006417621989385 +0.758175999999999961076468935062 -0.16142999999999999016786489392 1.18283899999999997376676219574 +0.758319999999999994066968156403 0.530650999999999983813836479385 1.06928000000000000824229573482 +0.759666999999999981163512075 -0.855924000000000018140156043955 0.830841999999999969439556934958 +0.759987999999999996880717390013 1.18437900000000007061373707984 0.140226999999999990542676187033 +0.760120000000000017870149804367 -1.19238899999999992118659974949 0.0206360000000000015640821970919 +0.760801999999999978285813995171 -1.09926300000000010115286386281 0.461303000000000018587797967484 +0.761635999999999979692688611976 -0.154576999999999992185806263478 -1.18153100000000010894041224674 +0.761812999999999962419394705648 -0.650233999999999978669507072482 -0.998416999999999998927080469002 +0.762116000000000015646151041437 0.305825000000000013500311979442 1.15136900000000008681411145517 +0.762591000000000018843593352358 0.838809000000000026808777420229 -0.845490999999999992553512129234 +0.762653000000000025337953957205 0.614724999999999965893948683515 1.02003599999999994274446635245 +0.762786999999999992816412941465 -0.0180500000000000000721644966006 -1.19072700000000009090683761315 +0.76325200000000004152411747782 0.748758000000000034646063795662 -0.925638999999999989576338066399 +0.764024000000000036436631489778 0.42560999999999998832933556514 1.11136100000000004328626346251 +0.764260000000000050413007102179 -0.0863749999999999934496841547116 -1.18677900000000002833644430211 +0.764463000000000003630873379734 0.3388889999999999957935870043 -1.14050500000000010203393685515 +0.764654999999999973603337366512 0.896523999999999987586818406271 0.78201500000000001566746732351 +0.765954000000000023717916519672 -0.912193000000000031590730031894 0.76237699999999997135802232151 +0.766024000000000038212988329178 -0.642561999999999966526331718342 1.00015999999999993796961916814 +0.766635999999999984133580710477 -1.05858099999999999418776042148 0.540067999999999992510879565089 +0.769217999999999957339014144964 -0.964860999999999968679276207695 0.690903000000000044877879190608 +0.76944500000000004558131649901 -1.0137220000000000119655396702 0.616703000000000001179500941362 +0.771349999999999980104803398717 1.16361800000000004118305696466 0.225860000000000005204725539443 +0.771491000000000037850611533941 0.497609999999999996767030552292 -1.07572599999999996001065483142 +0.771688999999999958312457692955 -0.138250000000000011768364061027 1.17702299999999993040944445966 +0.772097000000000033281821743003 1.02646299999999990326671195362 -0.591810999999999975962339249236 +0.77299799999999996291677462068 1.11021400000000003416289473535 -0.412187999999999998834709913353 +0.774866000000000054726001508243 0.946726999999999985213605668832 0.709430000000000005044853423897 +0.775231000000000003424815986364 0.28185100000000001818634132178 1.14872799999999997133670603944 +0.77775799999999994938093550445 -0.370983999999999980445863911882 1.12136600000000008492406777805 +0.777831999999999967876362916286 0.757917999999999980609288741107 0.905835999999999974541253777716 +0.778078999999999965098140819464 -1.04449799999999992650145941298 -0.551014000000000003787192781601 +0.778841000000000005520917056856 -0.26165100000000002244959773634 1.15106299999999994732036157075 +0.779665999999999970171415952791 1.13826500000000008228084880102 0.310601999999999989210408557483 +0.779783000000000003915090474038 -1.17507500000000009166001291305 0.105528999999999997805311124921 +0.780050000000000021138646388863 1.17146100000000008556355624023 -0.138573000000000001730171561576 +0.781142000000000003012701199623 -0.434757000000000004558131649901 -1.09581200000000000827071744425 +0.781942000000000025927704427886 -0.550896000000000052310156206659 1.04167100000000001358557710773 +0.782017999999999990912158409628 0.9931940000000000212665440813 0.634045999999999998486543972831 +0.782309000000000032137847938429 -1.16511300000000006527045570692 -0.174646999999999996688870851358 +0.783769000000000048977710775944 -0.114198999999999994958699289782 1.17160700000000006504308203148 +0.784298999999999968402164540748 -0.734129000000000031533886613033 -0.919745000000000034745539778669 +0.784422999999999981390885750443 0.400519999999999987139176482742 1.10646500000000003183231456205 +0.784819000000000044359182993503 -0.706112999999999990663468452112 0.940991000000000021863399979338 +0.784905999999999992589039266022 1.10841900000000004311573320592 0.394116999999999995107913264292 +0.785142000000000006565414878423 0.504885999999999945941908663372 1.06237500000000006927791673661 +0.785819999999999962980723466899 -0.459903000000000006242117933652 1.08211600000000007781864042045 +0.786084000000000004959588295605 1.03574000000000010501821634534 0.556158999999999958951946155139 +0.786900000000000043876013933186 0.257091999999999987203125328961 1.14660000000000006359357485053 +0.787047999999999969844566294341 1.07420000000000004369837824925 0.476078000000000001179500941362 +0.787089999999999956337148887542 0.27072600000000002218314421043 -1.14332699999999998219379904185 +0.789097999999999966114216931601 -1.1149029999999999773763192934 -0.366493000000000013205436744101 +0.792255999999999960259344788938 0.672391999999999989690024904121 0.95928100000000005032063654653 +0.793569999999999997619681835204 -0.973322000000000020492052499321 -0.65030100000000001791988779587 +0.794368999999999991779020547256 -0.0893700000000000049915627187147 1.16661499999999995758059867512 +0.794650999999999996248334355187 0.587592000000000003190336883563 1.01156599999999996519761680247 +0.7948199999999999709743292442 -0.584519000000000010786038728838 -1.01321299999999991925392350822 +0.794877999999999973468334246718 0.947975000000000012079226507922 -0.68520999999999998575361814801 +0.795470000000000010409451078885 0.590906000000000042327030769229 -1.00898799999999999599253897031 +0.796367000000000047066350816749 -1.15312499999999995559107901499 0.190005000000000007220890552162 +0.797003000000000016989076812024 -0.816841999999999957005059059156 -0.835196000000000049467985263618 +0.797074999999999977973175191437 0.23164399999999998880362284126 1.14499400000000006727418622177 +0.797622999999999970910380397981 0.812637000000000053745452532894 0.83870000000000000106581410364 +0.798154999999999947846163195209 -0.23643800000000000927080634483 1.14326100000000008272138529719 +0.799514999999999975699438437005 1.16535900000000003373656909389 -0.0521029999999999965387686984286 +0.800011999999999945387685329479 -0.897015000000000006785683126509 -0.745214000000000043044678932347 +0.800514999999999976587616856705 -0.766877999999999948599338495114 0.878106999999999970896169543266 +0.800826000000000037815084397153 -0.366464000000000011958434242842 -1.10651799999999989054799698351 +0.801556999999999963968377869605 1.11787900000000006706102340104 -0.32841100000000000846966941026 +0.80330299999999998927791011738 0.374167000000000027348789899406 1.10213600000000000456168436358 +0.803373000000000003772981926886 0.429958999999999980090592544002 -1.08153900000000002812328148138 +0.80344599999999999351274482251 -0.063863000000000003097966327914 1.16206600000000004335731773608 +0.803466000000000013514522834157 -0.345057999999999975848652411514 1.11147499999999999076294443512 +0.805613000000000023526069981017 0.20129299999999999970512476466 -1.14475700000000002454214609315 +0.805718000000000045268677695276 0.205608000000000012974510354979 1.14391599999999993286792232539 +0.807285000000000030340174816956 1.04228999999999993875121617748 -0.511784000000000016683543435647 +0.807418999999999997818633801216 -0.614504000000000050185633426736 0.985118999999999966910024795652 +0.807744000000000017536194718559 -1.15735600000000005138645065017 -0.0898769999999999985584864248267 +0.809060000000000001385558334732 0.863878000000000034752645206027 -0.774039000000000032564173579885 +0.809656999999999960060392822925 0.683984999999999954134466406686 -0.936280000000000001136868377216 +0.809810000000000029807267765136 -1.12662299999999993005417309178 0.273731000000000002092548356813 +0.810400000000000009237055564881 0.477439999999999975521802753065 1.05607899999999998996713657107 +0.810965000000000046931347696955 -0.0377769999999999980810905242379 1.15797599999999989428545177361 +0.812792999999999987714716098708 0.179086999999999996191490936326 1.14336999999999999744204615126 +0.813053000000000025693225325085 -0.824617000000000044401815557649 0.811759000000000008334666290466 +0.81411299999999997556443531721 0.775437000000000042909675812552 -0.857856999999999980666132159968 +0.814266000000000045311310259422 0.864148999999999944954254260665 0.768255000000000021209700662439 +0.815825000000000022382096176443 1.15465799999999996217070474813 0.0345719999999999985651477629744 +0.815895999999999954610530039645 -0.209971999999999991981525226947 1.13588099999999991851495906303 +0.816354000000000024073187887552 -0.29692600000000002324895831407 -1.11597499999999993924859609251 +0.816644999999999954276574953838 -0.432576000000000016054713114499 1.0705000000000000071054273576 +0.816895999999999955498708459345 -0.0112160000000000002751132655021 1.15436399999999994570032413321 +0.816941000000000028258284601179 -1.0536399999999999099742353792 -0.471646000000000009677592061053 +0.818022999999999944620299174858 -0.52285499999999995868193991555 1.02832900000000004858691227128 +0.81827300000000002810907062667 0.152184999999999986952659014605 1.14335800000000009646328180679 +0.818732000000000015305090528273 0.727404999999999968274266848312 0.894738999999999951029394651414 +0.819960000000000022168933355715 0.130864000000000008094858117147 -1.14478799999999991676702393306 +0.820056000000000007155165349104 -1.09567499999999995452526491135 0.356376999999999999335642542064 +0.820589000000000012846612662543 0.346656999999999992922994351829 1.0983909999999998952091573301 +0.820992999999999972793318647746 -1.11604400000000003601030584832 -0.283579999999999998738786644026 +0.821215999999999946012962936948 0.0157160000000000008024692021991 1.15124200000000009858069915936 +0.822137000000000006671996288787 0.125010000000000010000889005823 1.14388099999999992562038642063 +0.822381999999999946382445159543 -0.87910100000000002129496579073 0.742206000000000032379432468588 +0.822618999999999989114485288155 -0.66839599999999999013766682765 -0.936239999999999961133312353923 +0.823780999999999985483611908421 -0.5166800000000000281374923361 -1.02685300000000001574562702444 +0.823906999999999944961359688023 0.04291199999999999875610612321 1.14862400000000008937206530391 +0.824369000000000018424373138259 0.0976670000000000038120617773529 1.14493599999999995375787875673 +0.824958999999999997854160938004 0.0702649999999999941291406457822 1.14651900000000006585310075025 +0.824999999999999955591079014994 0.558440000000000047464254748775 1.00375299999999989530863331311 +0.826953000000000049141135605169 1.12113100000000009970335668186 -0.243336999999999997745803170801 +0.827065999999999967862152061571 -1.060402999999999984481746651 0.437616000000000004988010005036 +0.827536999999999967059238770162 -0.317458999999999991192822790254 1.10199899999999995081623183069 +0.827663000000000037559289012279 -0.226418000000000008142819751811 -1.12414799999999992508037394146 +0.827695999999999987295495884609 0.912251000000000034084735034412 0.694778000000000006686207143503 +0.827845999999999970775377278187 0.642213000000000033828939649538 0.949859000000000008867573342286 +0.828465000000000006963318810449 -0.930115000000000025082158572332 0.669723999999999985988097250811 +0.828914999999999957402962991182 1.13939999999999996838084825868 0.121109999999999995434762922741 +0.829709000000000029828584047209 -0.67568600000000000882494077814 0.924679000000000028691715669993 +0.829988999999999976786568822718 -1.14502999999999999225508418021 -0.00475200000000000014749312882145 +0.830075000000000007283063041541 0.0597169999999999992490451461435 -1.14342000000000010295764241164 +0.830811999999999994948041148746 -1.020945999999999909135794951 0.517128000000000032088109946926 +0.831176000000000025913493573171 0.360426999999999997381650018724 -1.08592800000000000437694325228 +0.831278999999999990144772255007 -0.9774589999999999667679162485 0.594600000000000017408297026122 +0.831994000000000011318945780658 -0.182358999999999993324450997534 1.12895100000000003781508439715 +0.832662000000000013244516594568 0.522921999999999997932320638938 -1.01647700000000007491962605854 +0.83397699999999996833821569453 0.967022999999999965936581247661 -0.607740999999999975678122154932 +0.833994000000000013095302620059 0.448419000000000012029488516418 1.0504160000000000163566937772 +0.83470900000000003426947614571 -0.155217999999999994864552377294 -1.13100299999999998057376160432 +0.835917000000000021131540961505 -0.0118670000000000008116840533035 -1.14065799999999994973620687233 +0.836212999999999984090948146331 0.318097999999999991871391102904 1.09524500000000002408739874227 +0.836560999999999999054978161439 -0.985519000000000033878677641042 -0.573514999999999997015720509808 +0.837463999999999986201260071539 -0.083607000000000000761168905683 -1.1365140000000000242152964347 +0.837860000000000049169557314599 0.956752999999999964586550049717 0.618558000000000052231996505725 +0.838732999999999950802020975971 1.11964599999999991908339325164 0.20717099999999999404565187433 +0.839288000000000034006575333478 1.05400300000000002320632574992 -0.4297360000000000068709482548 +0.840609999999999968345321121888 -0.751792000000000015802470443305 -0.853335999999999983423037974717 +0.841978000000000004199307568342 0.779548000000000018694379377848 0.826667000000000040671466194908 +0.84471700000000005115197154737 0.997479000000000004533262654149 0.539897999999999989029220159864 +0.845242000000000048842707656149 1.0954720000000000013073986338 0.292414000000000007251088618432 +0.845732000000000039285907860176 -0.403241000000000016090240251287 1.05930799999999991634069829161 +0.84638500000000005396572078098 -0.153707000000000010286882456967 1.12250000000000005329070518201 +0.846998999999999946375339732185 -0.583743000000000011873169114551 0.970482999999999984552800924575 +0.847338000000000035605296488939 -0.911675000000000013145040611562 -0.671467999999999953786300466163 +0.848239999999999993995913882827 1.03426799999999996515498423832 0.459106000000000014082957022765 +0.848415000000000030233593406592 1.06697599999999992448351804342 0.376502999999999976576958715668 +0.848581999999999947448259263183 -0.446985999999999994436450378998 -1.03928400000000009661960120866 +0.848724000000000033949731914618 -0.734202000000000021273649508657 0.860589999999999966107111504243 +0.848794999999999966178165777819 -0.833332999999999990414778494596 -0.76492000000000004433786671143 +0.848960000000000047926107527019 -1.12818599999999991112531461113 0.0803920000000000051221249464106 +0.849084999999999978648190790409 1.11996000000000006657785434072 -0.157302999999999998381738919306 +0.849646000000000012342127320153 -1.11278000000000010238920822303 -0.199548000000000003151257033096 +0.849876999999999993562482814013 -0.288295999999999996710187133431 1.09297500000000002984279490192 +0.850114000000000036294522942626 0.288602000000000025181634555338 1.09271000000000007013056801952 +0.85214500000000004131806008445 0.616366999999999998216537733242 -0.945483999999999991104004948284 +0.852307999999999954532370338711 -0.492460000000000008846257060213 1.01540800000000008829204034555 +0.852334999999999953779195038805 0.88553800000000004732925162898 -0.699532999999999960394347908732 +0.852577999999999947000617339654 -1.05862499999999992716936958459 -0.390415999999999985270449087693 +0.853577999999999947888795759354 0.527384999999999992681409821671 0.996628999999999987124965628027 +0.854790000000000049773518639995 0.289289999999999991597832149637 -1.08887399999999989752552664868 +0.855831000000000008398615136684 0.417939999999999978186338012165 1.04540900000000003267075499025 +0.856875000000000053290705182008 -0.600191999999999947768003494275 -0.951595999999999997420729869191 +0.857774000000000036436631489778 0.694300000000000028244073746464 0.884403999999999967940311762504 +0.859011999999999997790212091786 -0.124130000000000004223288385674 1.11655299999999990667731708527 +0.86160099999999995024069221472 0.609789000000000025458746222284 0.941169999999999951079132642917 +0.861760999999999999232613845379 0.799055999999999988503418535402 -0.786688000000000053901771934761 +0.861797000000000035235814266343 0.708878000000000008107292615023 -0.868789999999999951185714053281 +0.86189999999999999946709294818 0.828613999999999961687535687815 0.755332000000000003403499704291 +0.8622360000000000024300561563 0.258286999999999988819610052815 1.09079700000000001658406745264 +0.864389999999999991686649991607 -0.789819000000000048800075092004 0.793104000000000031178615245153 +0.864580000000000015170087408478 -1.1068899999999999295141606126 0.165219000000000004746425474877 +0.86575199999999996602895180331 0.452708999999999972541075976551 -1.02251099999999994771826550277 +0.86786700000000005505995659405 1.11436800000000002519584541005 -0.0706480000000000024629187578284 +0.867978000000000027291946480545 1.0615559999999999440944975504 -0.345992999999999994997779140249 +0.869125999999999954148677261401 -0.375711999999999990418331208275 -1.05045699999999997409361185419 +0.869784000000000001584510300745 0.982254999999999989235277553234 -0.527873000000000036635583455791 +0.869824999999999959321428377734 -0.0937430000000000068771655037381 1.11113299999999992628829659225 +0.870395999999999947505102682044 -0.257686000000000026144419962293 1.08443899999999993077892668225 +0.872530999999999945515583021916 0.227271000000000000795807864051 1.08951200000000003598188413889 +0.87263100000000004552447308015 -0.642328000000000010061285138363 0.908807000000000031469937766815 +0.872967999999999966220798341965 -0.372014000000000011336709349052 1.04858600000000001806199634302 +0.874121999999999954589213757572 0.216825999999999990963672757971 -1.09036599999999994636823430483 +0.874947999999999947995377169718 -1.10512600000000005273648184811 -0.114728999999999997649879901473 +0.875824000000000046917136842239 0.38612099999999999200284150902 1.04107799999999994788879575935 +0.876248999999999944598982892785 -0.993827000000000015944578990457 -0.494464999999999987867482786896 +0.876645000000000007567280135845 -0.842319999999999957651652948698 0.722488000000000019085177882516 +0.876788000000000011802114840975 -1.08122500000000010267342531733 0.249393000000000003568700890355 +0.878421000000000007368328169832 0.874411000000000049325876716466 0.681015999999999954717111450009 +0.878781999999999952066787045624 -0.0626680000000000014814816040598 1.1062620000000000786144482845 +0.880176999999999987167598192173 -0.68391999999999997239541471572 -0.870368000000000030524915928254 +0.880272999999999972153830185562 0.494549000000000016363799204555 0.990222000000000046604498038505 +0.880959999999999965325514494907 0.195676999999999989832133451273 1.08886199999999999654676230421 +0.883222999999999980325071646803 1.10437800000000008182610145013 0.0162859999999999983943954617871 +0.884315999999999990954790973774 0.743646999999999946950879348151 0.815459000000000044927617182111 +0.884607999999999949913842556271 -0.550401000000000029110935884091 0.95630899999999996463628804122 +0.884660000000000001918465386552 -0.459832999999999991747046124146 1.00296099999999999141664375202 +0.884851000000000054157567319635 -1.0594310000000000115960574476 -0.307645999999999975038633692748 +0.88533099999999997908872728658 -0.30313899999999999179678411565 -1.06032799999999993723065472295 +0.885440000000000004831690603169 -0.891496999999999983899101607676 0.649021999999999987807086654357 +0.885535999999999989817922596558 -1.05129199999999989323384852469 0.332583999999999990748733580403 +0.885847000000000051045390137006 -0.0310260000000000014941381465405 1.1019579999999999930793137537 +0.886932999999999971407760313014 -0.529784000000000032670754990249 -0.965754000000000001335820343229 +0.887488000000000054612314670521 0.163629999999999997672972540386 1.08884800000000003805666892731 +0.889014999999999999680255768908 -0.225748000000000004217071136736 1.07642499999999996518340594776 +0.88909499999999996866506535298 0.143323000000000005949019055151 -1.09039799999999997837107912346 +0.890548000000000006259881502046 0.54617000000000004433786671143 -0.95321699999999998098587639106 +0.890739999999999976232345488825 -0.93715499999999996028066107101 0.572992999999999974569675487146 +0.890788000000000024236612716777 -1.01721100000000008733991307963 0.414461000000000023835156071073 +0.890993000000000034965808026755 0.00105699999999999999684974216763 1.09823899999999996524024936662 +0.891318999999999972416730997793 -0.922736000000000000653699316899 -0.595071000000000016605383734714 +0.891475000000000017408297026122 0.916756000000000015326406810345 0.604011999999999993349319993285 +0.892090999999999967329245009751 0.13125600000000001155164852662 1.08946999999999993846699908318 +0.89224700000000001232081103808 0.903703000000000034042102470266 -0.622267000000000014559020655724 +0.892525000000000012789769243682 -0.979114999999999957580598675122 0.494703999999999977088549485416 +0.893243000000000009208633855451 1.06492100000000000648014975013 -0.260884999999999978026465896619 +0.893387000000000042199133076792 0.575249000000000010324185950594 0.933246000000000019980461729574 +0.893603999999999953907092731242 -0.766488999999999975898390403017 -0.783560000000000034248159863637 +0.893894999999999995132782260043 0.353088999999999986201260071539 1.03743900000000000005684341886 +0.894198999999999966092900649528 0.0334549999999999986277643415633 1.09512000000000009336531547888 +0.894607999999999958795626753272 0.380543999999999993377741702716 -1.02706600000000003447553353908 +0.894749000000000016541434888495 0.0986830000000000068238747985561 1.09072700000000000208899564313 +0.894801999999999986279419772472 0.658731999999999984218845838768 0.874871999999999983010923187976 +0.894819999999999948769868751697 -0.698377000000000025536905923218 0.843543999999999960515140173811 +0.895093000000000027505109301273 1.09003099999999997216093561292 0.103155999999999997696065179298 +0.895453000000000054470206123369 0.0660400000000000014788170688007 1.09261300000000005638867150992 +0.896795000000000008810729923425 -1.0931100000000000260769184024 -0.0294559999999999995445865152988 +0.897133999999999987018384217663 -0.229553000000000007041478511383 -1.06885699999999994602717379166 +0.8972369999999999512496628995 -0.846535000000000037445602174557 -0.691624000000000016541434888495 +0.898244000000000042405190470163 -0.339017999999999986027177101278 1.0383759999999999656949967175 +0.899652000000000007240430477395 0.0690700000000000063904437297424 -1.08896999999999999353406110458 +0.901012000000000035093705719191 0.955482999999999971230124629074 0.52462399999999997923794126109 +0.902159000000000044217074446351 0.993611000000000021969981389702 -0.445921999999999985053733553286 +0.903432000000000012818190953112 1.07138099999999991673860222363 0.189618000000000008764544645601 +0.904487000000000040955683289212 -0.155245999999999995111465977971 -1.07601199999999996848032424168 +0.904981000000000035399239095568 0.460062999999999999722888333054 0.984557000000000015482726212213 +0.905456999999999956330043460184 0.639395999999999964380492656346 -0.878248999999999946375339732185 +0.905658999999999991814547684044 -0.19260900000000000242827979946 1.06896300000000010754774848465 +0.905749000000000026311397505197 -0.0056389999999999999152899832211 -1.08608799999999994234656242043 +0.906008000000000035534242215363 0.819521000000000054974691465759 -0.712415000000000020463630789891 +0.906992000000000020420998225745 0.990438999999999958312457692955 0.443166999999999977610798396199 +0.907363000000000030631497338618 -0.0805089999999999972324360442144 -1.0817630000000000300985902868 +0.907368999999999981120879510854 0.790058999999999955754503844219 0.74329500000000003900879619323 +0.90820400000000001128341864387 1.04850200000000004507683115662 0.275332000000000021167068098293 +0.909391999999999978143705448019 1.02148599999999989407228895288 0.359960000000000002184918912462 +0.90997300000000003183941998941 0.31897399999999997977084831291 1.03450700000000006539835339936 +0.910537000000000040778047605272 0.730974000000000012633449841815 -0.797872000000000025643487333582 +0.91247999999999995779376149585 -0.998213000000000016953549675236 -0.413463000000000024947155452537 +0.912673999999999985277554515051 -0.457450000000000023270274596143 -0.978655999999999970384578773519 +0.913416000000000005698552740796 -0.606169999999999986606269430922 0.89343600000000000793676235844 +0.913476999999999983437248829432 -0.751669999999999949302775803517 0.774951999999999974200193264551 +0.913630000000000053184123771643 -1.05605600000000010574296993582 -0.223660999999999998699706793559 +0.914953000000000016278534076264 -0.425101000000000006640021865678 0.991034999999999999253930127452 +0.914982999999999990770049862476 1.06408199999999997231725501479 -0.174747000000000013431034062705 +0.915104000000000028514079986053 -1.07678000000000007041478511383 0.0559320000000000025486279753295 +0.91554800000000002846434199455 -0.613496000000000041296743802377 -0.886224000000000011745271422114 +0.919116000000000044067860471841 0.306711999999999984645171480224 -1.03012299999999989985610682197 +0.920097000000000053709925396106 -0.514610000000000011866063687194 0.942655000000000020676793610619 +0.920263999999999970924591252697 -0.158399000000000012011724948024 1.0620849999999999457855892615 +0.921460999999999974541253777716 -0.30438300000000001466204935241 1.02871800000000002128786036337 +0.923078999999999982861709213466 0.538727999999999984659382334939 0.926120000000000054285465012072 +0.923992999999999953253393414343 0.283909999999999995701216448651 1.03229400000000004489209004532 +0.924471000000000042717829273897 0.705076000000000036038727557752 0.805122000000000004327205260779 +0.924714000000000035939251574746 0.473671999999999981945109084336 -0.959447000000000049801940349425 +0.926839999999999997193356193748 0.833353000000000010416556506243 0.66819799999999995865351820612 +0.92760200000000003761613243114 0.424061000000000021259438653942 0.979655999999999971272757193219 +0.928529000000000048764547955216 -0.801996999999999959918284275773 0.703301999999999982726706093672 +0.928637999999999963485208809288 0.918301000000000033907099350472 -0.54254400000000002624034323162 +0.929669999999999996376232047623 0.620843000000000033722358239174 0.866179999999999949977791402489 +0.929800999999999988609999945766 -1.05620099999999994544452874834 0.14110000000000000319744231092 +0.930973999999999968224528856808 1.00104499999999996262545209902 -0.36221100000000000518340925737 +0.93178199999999999914024328973 -0.93015499999999995406341213311 -0.516326999999999980417442202452 +0.932771000000000016783019418654 -0.123254000000000002446043367854 1.05581600000000008776623872109 +0.933111000000000023746338229103 1.05904400000000009640643838793 -0.0879189999999999971524999864414 +0.933996000000000048402171159978 -0.383475999999999983547382953475 -0.990252000000000021096013824717 +0.934262000000000036870062558592 -0.696745999999999976459719164268 -0.801061000000000023035795493342 +0.935900999999999982925658059685 0.248037000000000007471356866517 1.03080900000000008631673154014 +0.938620000000000009876544027065 -0.659545999999999965623942443926 0.827038000000000050881965307781 +0.938806000000000029359625841607 -1.04851399999999994605559550109 -0.138794000000000000705213665242 +0.939180000000000014814816040598 0.231503999999999987569054837877 -1.03167199999999992243715496443 +0.939917000000000002479794147803 -0.849158999999999997143618202244 0.628877000000000019319656985317 +0.940829000000000026382451778773 -1.03145299999999995321786627756 0.225710999999999994969357430818 +0.942138000000000030986768706498 -0.856396000000000046092907268758 -0.615600000000000036060043839825 +0.942528000000000032443381314806 -0.268245999999999984453324941569 1.01964999999999994528820934647 +0.942653999999999991921129094408 0.873358999999999996433075466484 0.590463999999999988865795330639 +0.94306599999999995986854628427 -0.388400999999999996248334355187 0.979678999999999966519226290984 +0.943072000000000021380230919021 -0.778160999999999991594279435958 -0.71069099999999996164490312367 +0.943131000000000052629900437751 -0.0873109999999999997211119762142 1.05018100000000003113598268101 +0.94491899999999995340971281621 0.567262999999999961708851969888 -0.886194000000000037253755635902 +0.945110000000000005648814749293 -0.99865899999999996339283825364 -0.330830999999999986194154644181 +0.945649999999999990585308751179 0.211494999999999988560261954262 1.03005600000000008265033102361 +0.946583999999999980978770963702 -0.540796000000000054441784413939 -0.900842000000000031612046313967 +0.946679000000000048231640903396 0.836752000000000051294080094522 -0.63533099999999997908872728658 +0.947556999999999982620124683308 1.04982599999999992590460351494 -0.00074399999999999997819105646002 +0.947594999999999965112351674179 -0.892969000000000012740031252179 0.551969000000000042938097521983 +0.948049000000000030574653919757 0.386687000000000002941646926047 0.975539000000000044998671455687 +0.948143999999999986805221396935 -1.00263400000000002521005626477 0.309431000000000011596057447605 +0.950492000000000003545608251443 0.748635999999999968146369155875 0.732194000000000011496581464598 +0.950559000000000042795988974831 0.500369999999999981454834596661 0.919819000000000053240967190504 +0.950814999999999965751840136363 -0.308153999999999983483434107256 -1.00049600000000005195488483878 +0.951303000000000009706013770483 -0.0507140000000000021329604749099 1.04520400000000002194155968027 +0.951532999999999962170704748132 -0.933254999999999945714534987928 0.472882999999999997786659378107 +0.951717000000000035164759992767 -0.969857999999999997875477220077 0.39193099999999997384847461035 +0.951903000000000054647841807309 -0.567355999999999971450392877159 0.878628999999999993342214565928 +0.953200999999999964984453981742 0.174429000000000000714095449439 1.0300400000000000666489086143 +0.953327000000000035484504223859 -0.47650999999999998912869614287 0.929572999999999982634335538023 +0.954509000000000051855408855772 0.399158000000000012796874671039 -0.964149999999999951505458284373 +0.954721999999999959563012907893 0.155216999999999993864463476712 -1.03170500000000009421796676179 +0.95474700000000001232081103808 0.909916999999999975834441556799 0.510399999999999964828134579875 +0.955196000000000045027093165118 0.659900999999999959833019147482 -0.80754700000000001480771061324 +0.95568299999999994920329982051 0.750183999999999961971752782119 -0.7238050000000000316902060149 +0.956114000000000019419132968324 1.00452800000000008751044333621 -0.277069999999999982964737910152 +0.957254999999999967030817060731 -0.013606000000000000038635761257 1.04090299999999991165111623559 +0.958264000000000004675371201301 1.03646499999999996965982518304 0.0864339999999999969437780578119 +0.958524000000000042653880427679 0.136984999999999995656807527666 1.03075999999999989853449733346 +0.960118999999999944705564303149 -0.710319999999999951434404010797 0.757375000000000020428103653103 +0.960274999999999989697130331479 -1.03683299999999989360333074728 -0.0533790000000000028346214264729 +0.960963000000000011624479157035 0.023865999999999998326671857285 1.03729500000000007808864666004 +0.961359999999999992326138453791 -0.230751000000000011658229936984 1.01120699999999996698818449659 +0.96136399999999999632649405612 0.929275999999999990919263836986 -0.460679999999999978399500832893 +0.96159899999999998154720515231 0.0993099999999999955013763042189 1.03221399999999996488497799874 +0.962241000000000012981615782337 0.580779999999999962945196330111 0.858362999999999987110754773312 +0.962284000000000028229862891749 0.663985999999999965126562528894 0.795695999999999958873786454205 +0.962412999999999962952301757468 0.0615539999999999976054709804885 1.03439499999999995338839653414 +0.963064999999999948876450162061 -0.231781999999999988038013043479 -1.00934900000000005171330030862 +0.96307299999999995687716136672 0.942884999999999973141484588268 0.428321000000000007279510327862 +0.96518800000000004590816615746 1.01901400000000008638778581371 0.17327000000000000734523553092 +0.965678000000000036351366361487 0.0781519999999999992468247000943 -1.03022300000000011088729934272 +0.966239999999999987778664944926 0.34808600000000000651567688692 0.972222000000000030617286483903 +0.9675979999999999581206111543 0.972130999999999967364772146539 0.344552000000000024915181029428 +0.968304000000000053560711421596 0.997541000000000011027623258997 0.259423000000000014697576489198 +0.968569000000000013272938303999 -0.933903999999999956393992306403 -0.435543999999999986716403554965 +0.968889000000000000234479102801 -0.349878999999999995562660615178 0.968937000000000048238746330753 +0.970609000000000055052851166693 -0.624380000000000046078696414042 -0.817355000000000053717030823464 +0.970697000000000032038371955423 -0.154659999999999991926458164926 -1.01677400000000006663469775958 +0.972006000000000036642688883148 0.00061399999999999996247446176767 -1.02723199999999992293453487946 +0.972762000000000015553780485789 0.789241999999999999104716152942 0.656376999999999988233412295813 +0.973163000000000000255795384874 -0.466108999999999995544897046784 -0.914163999999999976608933138778 +0.973681000000000018701484805206 -0.0770919999999999938644634767115 -1.02274299999999995769428551284 +0.974009000000000013663736808667 -0.995163000000000019795720618276 -0.246892000000000000348165940522 +0.975720000000000031725733151688 0.460328000000000014946266446714 0.914367999999999958582463932544 +0.977481000000000044281023292569 1.00404699999999991177901392803 -0.19083600000000000562749846722 +0.977829999999999976978415361373 -0.758290000000000019575452370191 0.684722999999999970555109030101 +0.977885000000000004227729277773 -0.192042999999999991489474382433 1.00342500000000001136868377216 +0.977955000000000018722801087279 -1.02106000000000007865708084864 0.0322459999999999968878228173708 +0.979814999999999991509014307667 0.322923000000000015585754908898 -0.967307000000000027917224088014 +0.979952000000000045254466840561 -0.617863000000000051059600991721 0.811135000000000050413007102179 +0.980026999999999981483256306092 0.492765999999999981806553250863 -0.892595999999999945018203106883 +0.982103999999999976999731643446 0.308412999999999992706278817423 0.969717999999999968885333601065 +0.9833199999999999718625076639 -0.862875999999999976353137753904 -0.537144999999999983586462803942 +0.983613999999999988332888278819 0.850679999999999991722177128395 -0.555738999999999983003817760618 +0.984167000000000014026113603904 -0.436250999999999999889865875957 0.91711500000000001353583911623 +0.984659999999999979714004894049 -0.706821999999999950325957343011 -0.728593000000000046156856114976 +0.987939000000000011603162874962 -0.526038000000000005584865903074 0.864442000000000043691272821889 +0.988816999999999945991646654875 -0.786761999999999961374896884081 -0.635017999999999971372233176226 +0.990295000000000036344260934129 0.936583000000000054363624713005 -0.376997999999999999776179038236 +0.991101000000000009748646334629 0.704509000000000051855408855772 0.722071000000000018381740574114 +0.991192999999999990734522725688 0.82673399999999996889954445578 0.57796899999999995500843397167 +0.991681000000000034688696359808 -0.803267999999999982030374212627 0.609369000000000049510617827764 +0.991774999999999962163599320775 -1.00125799999999998135535861365 0.117745000000000002438049762077 +0.992036000000000028897773063363 -0.152277999999999996694199921876 0.996330999999999966654229410778 +0.992319999999999979856113441201 -0.309686000000000016818546555442 0.958851000000000008860467914928 +0.992385999999999990350829648378 0.538703000000000042923886667268 0.851450999999999957879026624141 +0.994990999999999958802732180629 0.999604000000000048054005219456 -0.103848999999999996868282892137 +0.995179000000000035797143027594 -0.389726999999999990098586977183 -0.926138000000000016775913991296 +0.995561000000000029253044431243 0.586118000000000027860380669154 -0.815675000000000038902214782865 +0.995577999999999962987828894256 0.267824000000000006505018745884 0.968037000000000036337155506772 +0.997056999999999971073805227206 0.766433999999999948649076486618 -0.646881999999999957040586195944 +0.997605999999999992766674949962 0.620539999999999980495601903385 0.787217999999999973326225699566 +0.998461999999999960664354148321 0.41875800000000001910294145091 0.909788999999999958845364744775 +0.999064999999999980850873271265 -0.987740999999999980119014253432 -0.161979000000000011860734616675 +1.00053199999999997693578279723 0.245268000000000013782752716907 -0.96890600000000004499156602833 +1.00116399999999994285815319017 0.677800999999999986833643106365 -0.733658999999999950070161958138 +1.00153300000000000657962573314 -0.933966999999999991644017427461 -0.353042999999999995708321876009 +1.00161799999999989729815297324 -0.845075000000000020605739337043 0.531608999999999998209432305885 +1.0016819999999999613038426105 -0.977504000000000039527492390334 0.202778000000000013791634501104 +1.00250100000000008648726179672 -0.549676000000000053447024583875 -0.832376000000000004774847184308 +1.00375799999999992806465343165 -0.111610000000000000874855743405 0.989955999999999947114304177376 +1.00413299999999994227550814685 -0.66593100000000005067590791441 0.740439999999999987068122209166 +1.00571199999999993934807207552 0.860962000000000005073275133327 0.497279999999999999804600747666 +1.00660799999999994724930729717 0.226478000000000012637002555493 0.967185999999999990173193964438 +1.00760300000000002640376806085 -0.883546999999999971286968047934 0.451751999999999986901144666263 +1.00763500000000005840661287948 -0.949892999999999987359444730828 0.287011999999999989352517104635 +1.00857400000000008155609521054 0.991215999999999985980991823453 -0.0164520000000000013451462166358 +1.0096110000000000361808361049 -0.918532000000000015127454844333 0.370111999999999996546762304206 +1.01064400000000009782752385945 0.416198000000000012388312597977 -0.897429000000000032244429348793 +1.01249400000000000510169684276 -0.393994000000000010874856570808 0.905330999999999996852295680583 +1.01254500000000002835065515683 -0.31195400000000000906297259462 -0.936715999999999993086419181054 +1.01300400000000001554667505843 -0.070202000000000000512478948167 0.98432399999999997675104168593 +1.01326699999999991774757290841 -0.26798199999999999798561134412 0.949460999999999999410249529319 +1.0151520000000000543138867215 0.184539000000000008583356247982 0.967166999999999998927080469002 +1.01531900000000008255085504061 0.940192999999999945437423320982 -0.29182900000000000506616970597 +1.01600599999999996470023688744 0.742252000000000022872370664118 0.645596999999999976438402882195 +1.01626199999999999867839051149 0.891792999999999946858508792502 0.414627999999999996560973158921 +1.01657899999999989937293776165 0.166498000000000007103651000762 -0.968940000000000023483437416871 +1.0166669999999999873807610129 0.861252000000000017543300145917 -0.473953999999999986414422892267 +1.01817599999999996995825313206 0.978914999999999979607423483685 0.07101000000000000367261776546 +1.01865199999999989088905749668 -0.573490000000000055280224842136 0.795900000000000051869619710487 +1.01869499999999990613730460609 0.375825000000000020161650127193 0.906098999999999987764454090211 +1.01973800000000003329603259772 -0.0282150000000000004962696920074 0.979458000000000050810911034205 +1.0199869999999999770068370708 0.494777999999999995583976897251 0.845470999999999972551734117587 +1.02017699999999988946797202516 -0.976420999999999983387510837929 -0.0764269999999999949391593645487 +1.02062199999999991817389854987 -0.865952999999999972757791510958 -0.456571000000000004614975068762 +1.02117499999999994386712387495 0.142171999999999992825294725662 0.967982000000000009087841590372 +1.02138299999999992984101027105 -0.482379999999999975468512047883 0.850933000000000050455639666325 +1.02183899999999994179233908653 -0.632799000000000000376587649953 -0.745259000000000004781952611665 +1.02280100000000007121059297788 0.919104000000000032066793664853 0.330340999999999995750954440155 +1.02376000000000000333955085807 0.962752000000000052182258514222 0.158191999999999999282351836882 +1.02393399999999989979926340311 0.014182999999999999427013896991 0.97537600000000002076205873891 +1.02435199999999992925836522772 -0.711372000000000004327205260779 0.666823000000000054576787533733 +1.0246539999999999537294570473 0.0995449999999999945998752082232 0.969625999999999987899457210005 +1.02519300000000002093258899549 -0.233095999999999997642774474116 -0.945856000000000030070168577367 +1.02530399999999999316457888199 0.942787999999999959399588078668 0.244748999999999994336974395992 +1.02557499999999990336618793663 0.0568260000000000015107914919099 0.972094000000000013628209671879 +1.02789200000000002788169695123 0.0869250000000000022648549702353 -0.967409999999999992148502769851 +1.02903400000000000424904555985 0.657850999999999963563368510222 0.712967000000000017401191598765 +1.02981199999999994965094174404 -0.472928000000000015035084288684 -0.846064999999999955981877519662 +1.03029700000000001836042429204 0.574910000000000032116531656357 0.779722000000000026176394385402 +1.03054299999999998682653767901 -0.930343000000000031057822980074 -0.269147999999999998355093566715 +1.03065999999999990954790973774 -0.792256999999999989015009305149 -0.556838000000000055145221722341 +1.03117199999999997750421698584 -0.714107999999999965012875691173 -0.6532499999999999973354647409 +1.03147300000000008424194675172 0.509915000000000007140954494389 -0.822223000000000037168490507611 +1.03164600000000006296829724306 -0.22492999999999999105604331362 0.940803999999999973624653648585 +1.03307400000000004780531526194 -0.153463999999999989309884540489 -0.953523000000000009457323812967 +1.03442600000000006765787929908 0.00686300000000000017669199436909 -0.964320999999999983742782205809 +1.03449600000000008215295110858 0.779658999999999990926369264344 -0.567405999999999965943686675018 +1.03615499999999993718802215881 -0.0733720000000000066586736124918 -0.959686000000000039023007047945 +1.03633500000000000618172180111 0.940093999999999985206500241475 -0.20550699999999999523225824305 +1.03633899999999989915977494093 0.331699000000000021604051880786 0.903313999999999950318851915654 +1.03664800000000001389821591147 0.337859999999999993658406083341 -0.900672999999999945863748962438 +1.0369010000000000726316784494 0.777065000000000005719869022869 0.566575000000000050803805606847 +1.0372639999999999638191638951 -0.961246000000000044849457481178 0.00942699999999999961597385578216 +1.03819700000000003647926405392 -0.349903999999999992809307514108 0.894267000000000034098945889127 +1.04052799999999989744026152039 -0.754005000000000036308733797341 0.590574999999999961097785217135 +1.04227300000000000501643171447 0.602658999999999944741091439937 -0.741936000000000039911185467645 +1.04318200000000005367439825932 0.693026999999999948620654777187 -0.656874999999999986677323704498 +1.04493400000000002947331267933 0.449176999999999992940757920223 0.840447999999999972864372921322 +1.04534499999999996866506535298 -0.618680000000000007709388682997 0.724215999999999970881958688551 +1.0457089999999999996305177774 0.868423999999999973731235058949 -0.390297999999999978282261281493 +1.04738500000000001044497821567 -0.180701000000000000511590769747 0.932915000000000049773518639995 +1.05025699999999999612043666275 -0.942278999999999977710274379206 0.0952439999999999953317342260561 +1.05132500000000006501466032205 0.286553999999999975401010487985 0.901445000000000051798565436911 +1.05210300000000001041655650624 -0.436553999999999997605470980488 0.838153000000000036884273413307 +1.05243500000000000937916411203 -0.394440999999999986069809665423 -0.858369000000000048622439408064 +1.05259799999999992259347436629 -0.793661999999999978605558226263 0.511994999999999977902120917861 +1.05326199999999992051868957788 0.936284000000000005137223979546 -0.118373999999999993115729068904 +1.05370399999999997397992501647 0.808810999999999946652451399132 0.485316000000000025149660132229 +1.05389599999999994395238900324 -0.865609999999999990549781614391 -0.374194999999999999840127884454 +1.05446100000000009266898359783 -0.556385000000000018438583992975 -0.760623999999999966803443385288 +1.05456799999999994987831541948 -0.526604999999999989768184605055 0.781390999999999946723505672708 +1.05548799999999998178168425511 -0.923049000000000008370193427254 -0.184190999999999993619326232874 +1.05640000000000000568434188608 0.692566000000000014935608305677 0.63590199999999996727240159089 +1.05793599999999998750865870534 0.258062999999999986844301247402 -0.902316000000000006942002528376 +1.05910499999999996312283201405 -0.919591999999999964998664836457 0.180685000000000012265743976059 +1.06022799999999994824406712723 0.527275000000000049205084451387 0.773237999999999980893505835411 +1.06042299999999989346122220013 -0.135469000000000006078693104428 0.925825000000000009059419880941 +1.0605130000000000389803744838 -0.830187000000000008270717444248 0.43139499999999997292832176754 +1.06117499999999997939426066296 -0.304155000000000008686384944667 0.883966999999999947235096442455 +1.06278999999999990144772255007 0.431593999999999977656983674024 -0.827165999999999956848739657289 +1.06359300000000001062971932697 0.240567000000000003057110120608 0.900498000000000020648371901189 +1.06377300000000007962341896928 -0.893276999999999987700505243993 0.265411999999999981270093485364 +1.06414100000000000356692453352 0.608847000000000027064572805102 0.704917000000000015802470443305 +1.06424300000000005006484116166 -0.863434999999999952535745251225 0.349092999999999986648901995068 +1.06603099999999995084465354012 0.928779000000000021231016944512 -0.0307750000000000002720046410332 +1.06634899999999999131716776901 0.837366000000000054726001508243 0.402142999999999972704500805776 +1.06712899999999999423039298563 0.402081000000000021721291432186 0.83640099999999995006305653078 +1.06785299999999994113863976963 0.789807000000000036799008285016 -0.485690000000000010604850331219 +1.06791299999999989012167134206 -0.661426999999999987167598192173 0.649673999999999973731235058949 +1.06843500000000002359001882724 -0.79462699999999997224620074121 -0.476461000000000023391066861222 +1.06903600000000009728751138027 -0.638720999999999983209875153989 -0.670223000000000013187673175707 +1.070279999999999898108171692 -0.314522999999999997022825937165 -0.869237999999999955136331664107 +1.0706230000000001023607865136 0.872168999999999972061459629913 -0.305101999999999984325427249132 +1.0707070000000000753459517 -0.089413000000000006362022020312 0.919560000000000044018122480338 +1.0730960000000000498232566315 0.193921000000000010032863428933 0.900478000000000000646593889542 +1.07361400000000006826894605183 -0.718574999999999963762320476235 -0.575327999999999950553331018455 +1.07442499999999996340704910835 0.177122000000000001662670001679 -0.90235200000000004294520294934 +1.07459400000000004915534645988 0.917607999999999979223730406375 0.0569459999999999966213692914607 +1.07478500000000010139444839297 0.862616000000000049396930990042 0.3173819999999999974527042923 +1.07626599999999994494714883331 -0.912112000000000033850255931611 -0.0985069999999999973416819898375 +1.07819700000000007200640084193 -0.0427140000000000019664270212161 0.91414799999999996060751072946 +1.07884699999999988939691775158 0.525051999999999963186780860269 -0.748604999999999964899188853451 +1.07891599999999998615862750739 0.902815999999999951874940506968 0.144442999999999988069987466588 +1.07897899999999991038635016594 0.884461000000000052700954711327 0.231368999999999991334931337406 +1.07959699999999991781862718199 0.724547999999999969844566294341 0.556327000000000015944578990457 +1.07979500000000006032507826603 0.146799000000000012811085525755 0.90138399999999996303756688576 +1.07997600000000004705213996203 -0.388739999999999974455988649424 0.826154999999999972715158946812 +1.0810830000000000161719526659 0.705517999999999978477660533827 -0.577497999999999955811347263079 +1.08133600000000007490541520383 -0.256929000000000018477663843441 0.874470999999999998308908288891 +1.08239700000000005353228971217 -0.477881000000000000227373675443 -0.774626999999999954482632347208 +1.08286400000000004872902081843 0.00444299999999999990080157274974 0.909607000000000054384940995078 +1.08301000000000002820854660968 -0.861851999999999951462825720228 -0.290341999999999988979482168361 +1.0832770000000000454321025245 -0.233490000000000003099742684753 -0.87863100000000005085354359835 +1.08359200000000011065992566728 -0.568751000000000006551204023708 0.708767000000000035875302728527 +1.0836650000000001003996885629 0.0993870000000000031192826099868 0.90321300000000004359890226624 +1.08468900000000001426769813406 0.0518730000000000024407142973359 0.905958000000000041040948417503 +1.08487200000000005850608886249 0.616820999999999952656537516305 -0.665268999999999999239719272737 +1.08604999999999995985433542955 0.0953549999999999953192997281803 -0.900778999999999996362021192908 +1.08626500000000003609557097661 -0.701563999999999965417885050556 0.572568999999999994621191490296 +1.08648400000000000531485966349 0.353675999999999990386356785166 0.833346000000000031171509817796 +1.08728200000000008174083632184 0.477822999999999997733368672925 0.767791000000000001257660642295 +1.08755899999999994243182754872 -0.477391000000000009784173471417 0.767668000000000017024603948812 +1.08938899999999994072652498289 0.351463999999999998635757947341 -0.830485000000000028741453661496 +1.09131200000000005978506578685 0.872473000000000054043880481913 -0.218702000000000007506884003305 +1.0913749999999999840127884454 -0.151662999999999992262189607573 -0.886508999999999991459276316164 +1.09276400000000006862421741971 0.0130849999999999994093613508994 -0.897604999999999986215470926254 +1.09279700000000001836042429204 -0.89757399999999998296829062383 -0.0124349999999999998728794636804 +1.09378599999999992498089795845 0.640382000000000006778577699151 0.627329000000000025494273359072 +1.09454099999999998615862750739 -0.0693619999999999931050709278679 -0.892842000000000024506618956366 +1.09628600000000009373479770147 0.557691000000000047798209834582 0.697953000000000045588421926368 +1.09699499999999994237498412986 0.796838999999999963996799579036 -0.402058000000000026474822334421 +1.09853399999999989944399203523 0.753669999999999951079132642917 0.474555999999999977845277499 +1.09860200000000007847233973735 -0.208411000000000012910561508761 0.865816999999999947768003494275 +1.10033099999999994800248259708 -0.738932999999999950979656659911 0.493203999999999975756281855865 +1.10199399999999991806021171215 -0.793858999999999981334042331582 -0.394203999999999998848920768069 +1.10225900000000009981704351958 -0.560899000000000036436631489778 -0.685871000000000008434142273472 +1.10292300000000009774225873116 0.304153000000000006686207143503 0.831295000000000006146194664325 +1.10489499999999996049382389174 -0.339127999999999985014653702819 0.814984999999999959463536924886 +1.10501500000000008050449196162 -0.879496000000000055507598517579 0.0736870000000000024975577161968 +1.10553799999999990966159657546 -0.397598000000000006970424237807 -0.78721200000000002283684352733 +1.1076930000000000386961573895 0.86933199999999999363353708759 -0.131439000000000000278888023786 +1.10785099999999991915444752522 -0.854693000000000036031622130395 -0.205342999999999997751132241319 +1.10834000000000010288658813806 -0.608652999999999999580779785902 0.633344000000000018069101770379 +1.1100540000000000961932755672 -0.77338499999999998912869614287 0.41189199999999998036415149727 +1.11074099999999997834265741403 0.445288000000000017131185359176 -0.753638999999999947831952340493 +1.11116499999999995829114141088 0.269840999999999997527311279555 -0.832165000000000043556269702094 +1.11135099999999997777422322542 0.426750000000000018207657603853 0.763402000000000025003998871398 +1.11181899999999989070431638538 -0.720207999999999959328533805092 -0.495136000000000020548895918182 +1.11201299999999991818810940458 -0.642121999999999970576425312174 -0.592540999999999984382270667993 +1.11287200000000008337508461409 -0.857944999999999957651652948698 0.159517999999999993132604458879 +1.11290399999999989333332450769 -0.158791999999999988713028642451 0.85803899999999999614885837218 +1.11313599999999990330934451777 0.779818000000000011162626378791 0.390913000000000010469847211425 +1.11471699999999995789323747886 0.715223999999999970889064115909 -0.495842999999999978211207007917 +1.11539699999999997181987509975 -0.804784999999999972608577536448 0.328954999999999997406519014476 +1.11633800000000005248068646324 -0.833008999999999999452882093465 0.244718999999999992089882994151 +1.11638100000000006772893357265 0.253707000000000015837997580093 0.830255999999999994010124737542 +1.11749300000000006960476639506 -0.42604300000000000503419528286 0.754781999999999952954965465324 +1.11872299999999991193533332989 -0.51634400000000002517452912798 0.694151999999999991253218922793 +1.11911399999999994214761045441 0.669390000000000040536463075114 0.547266000000000030212277124519 +1.11970400000000003259970071667 0.862761000000000000120792265079 -0.0436570000000000013606893389806 +1.12180799999999991634069829161 0.800725000000000020072832285223 -0.316838000000000008515854688085 +1.12196399999999996133226431994 0.538116000000000038738789953641 -0.672031999999999962724928082025 +1.12318999999999991068477811496 0.628549000000000024357404981856 -0.58597699999999997011457253393 +1.12334399999999989816501511086 0.8028880000000000460858018414 0.305727000000000026513902184888 +1.12379099999999998438227066799 -0.315850999999999992873256360326 -0.798331000000000012839507235185 +1.12418499999999998983923887863 -0.10827000000000000512478948167 0.851167000000000006920686246303 +1.12533900000000008922995675675 0.504584000000000032493119306309 0.692103000000000023739232801745 +1.12675900000000006606626357097 -0.28791299999999997449862121357 0.804687000000000041133318973152 +1.1268050000000000565592017665 0.202537999999999995814903286373 0.830234000000000027519320155989 +1.12729499999999993598009950801 0.852786000000000043996806198265 0.0442970000000000030393465522138 +1.1280159999999999076436552059 0.585906000000000037886138670729 0.619913999999999965062613682676 +1.12803100000000000591171556152 0.187046999999999991048937886262 -0.832201999999999997292832176754 +1.12831900000000007189271400421 -0.844160000000000021458390619955 -0.11953400000000000136246569582 +1.12871199999999993757171523612 -0.646152999999999977376319293398 0.555423000000000000042632564146 +1.12911899999999998378541476995 0.822790000000000021351809209591 0.219335000000000002184918912462 +1.13043800000000005390177193476 0.839443999999999967975838899292 0.132076999999999999957367435854 +1.13071000000000010388134796813 -0.480947999999999986631138426674 -0.700131999999999976580511429347 +1.13120299999999995854693679576 -0.7899589999999999667679162485 -0.310389999999999999236166559058 +1.13234100000000004193623226456 0.374257000000000006334488489301 0.760089000000000014622969501943 +1.13240099999999999091926383699 -0.0570430000000000034243718971538 0.845230000000000036841640849161 +1.13415400000000010649614523572 0.150846000000000007856826300667 0.831227999999999966895813940937 +1.13708600000000004115463525523 -0.232963000000000003408828774809 -0.80793800000000004501998773776 +1.13752100000000000434852154285 -0.00531300000000000001432187701766 0.840249000000000023646862246096 +1.13783100000000003682032456709 0.36368099999999997651300986945 -0.757018999999999997463362433336 +1.13839899999999993873700532276 0.0988369999999999943041117944631 0.833234000000000030183855415089 +1.13952300000000006363620741467 0.0467149999999999995803356966917 0.836245000000000016093792964966 +1.13992200000000010184919574385 0.103407999999999999918287585388 -0.830593000000000025728752461873 +1.14002599999999998381383647938 0.695756000000000041083580981649 0.465042999999999984162002419907 +1.14219300000000001382716163789 0.801451000000000024492408101651 -0.230368999999999990446752917705 +1.14395200000000007989342520887 0.722107999999999972118303048774 -0.412229999999999985327292506554 +1.14425299999999996458655004972 -0.372763000000000011002754263245 0.742785999999999946297180031252 +1.14433500000000010210499112873 -0.830296000000000034013680760836 -0.03325299999999999783772963724 +1.14463099999999995404209585104 -0.681103000000000013969270185044 0.475308999999999981511678015522 +1.14536900000000008148504093697 -0.14926300000000000678390676967 -0.815996999999999972352782151575 +1.1454729999999999634496816725 -0.553258999999999945273998491757 0.617897000000000029551472380263 +1.14548199999999988918375493085 -0.235298000000000007148059921747 0.795301999999999953416818243568 +1.14563700000000001644195890549 -0.718996999999999997221777903178 -0.412990000000000023749890942781 +1.14570599999999989115906373627 -0.563197999999999976417086600122 -0.608411000000000035115022001264 +1.14678999999999997605470980488 0.0192559999999999988118393190462 -0.827347000000000054598103815806 +1.14860800000000007337064289459 -0.0650789999999999979607423483685 -0.822474999999999956123986066814 +1.15016899999999999693045538152 0.320552000000000003598898956625 0.75786500000000001087130385713 +1.15060000000000006714628852933 -0.461662999999999990041743558322 0.680431000000000008043343768804 +1.15060300000000004239097961545 -0.642989999999999950475171317521 -0.512522000000000033104186059063 +1.15118800000000010008704975917 0.449734999999999995878852132591 0.6873899999999999455013721672 +1.15427699999999999747046786069 -0.399185000000000012043699371134 -0.712949000000000054910742619541 +1.15430999999999994720667473302 0.457224000000000019294787989566 -0.677138000000000017664092410996 +1.15529499999999996084909525962 0.611809000000000047236881073331 0.539428000000000018587797967484 +1.15583400000000002805222720781 -0.813155999999999989924504006922 0.053158999999999997920774319482 +1.15594899999999989326227023412 -0.782942000000000026815882847586 -0.225351999999999996759925124934 +1.15603199999999994851407336682 -0.713365000000000026858515411732 0.393320000000000002948752353404 +1.15643800000000007699441084696 0.719376000000000015432988220709 0.380983999999999989327648108883 +1.15707500000000007567280135845 0.637796999999999947306150716031 -0.504372000000000042518877307884 +1.15807100000000007256062417582 0.799015000000000030766500458412 -0.142990000000000005986322548779 +1.15895499999999995743849012797 0.529352999999999962454921842436 0.613684000000000007268852186826 +1.16000799999999992806465343165 0.280552999999999996827426684831 -0.758731000000000044281023292569 +1.16065299999999993474375514779 0.549057000000000017259083051613 -0.592808000000000001605826582818 +1.16099200000000002397371190455 -0.181490000000000012425616091605 0.78686699999999998311750459834 +1.16277199999999991675281307835 -0.792806000000000010707879027905 0.139361000000000012644107982851 +1.16287099999999998800603862037 -0.74281200000000002781064267765 0.309777999999999997804422946501 +1.16476299999999999279509665939 0.265846000000000026730617719295 0.756738000000000021749713141617 +1.16512100000000007327116691158 -0.769326999999999983081977461552 0.225012999999999990796695215067 +1.16770100000000009998757377616 -0.587991000000000041403325212741 0.53920299999999998785682464586 +1.16773400000000004972378064849 -0.317761999999999988908427894785 0.731727000000000016299850358337 +1.16828599999999993563903899485 0.740156999999999953843143885024 0.295422000000000017916335082191 +1.16867199999999993309529600083 0.726141999999999954162888116116 -0.326990999999999976122211364782 +1.16937899999999994626875832182 0.793425000000000046895820560167 -0.0550469999999999987094767561757 +1.17286700000000010390976967756 -0.315931999999999990613730460609 -0.724272000000000026886937121162 +1.17322600000000010211920198344 -0.126701000000000008061107337198 0.779414999999999968949282447284 +1.17372900000000002229683104815 0.393361000000000016196821661651 0.68383199999999999540989392699 +1.17456000000000004845901457884 -0.482117000000000017756462966645 -0.622873000000000009990230864787 +1.17493200000000008742517820792 -0.714948999999999945664796996425 -0.32921299999999997787369920843 +1.17552400000000001334399257757 0.75801700000000005186251428313 0.208694999999999991624477502228 +1.17606799999999989125853971927 0.210354999999999986437515531179 0.75671399999999999774757952764 +1.17607200000000000628119778412 0.784703000000000039371172988467 0.0331129999999999966031616338569 +1.17613199999999995526422935654 -0.772835000000000049702464366419 -0.139423999999999992382981872652 +1.17718499999999992589039266022 0.196232999999999990770049862476 -0.758766999999999969261921251018 +1.17801500000000003431921413721 0.63529800000000002935252041425 0.456813000000000024591884084657 +1.17812300000000003130651293759 0.772885000000000044195758164278 0.12114300000000000068212102633 +1.17909700000000006170353117341 -0.404926000000000008149925179168 0.667656000000000027227997634327 +1.17916700000000007619860298291 -0.495462000000000013510970120478 0.603392999999999957161378461024 +1.18178200000000011016254575225 0.374462000000000017063683799279 -0.680564999999999975521802753065 +1.18213600000000007561595793959 -0.0711470000000000019069190670962 0.772975999999999996425970039127 +1.18403700000000000613908923697 0.154297999999999990716759157294 0.757792000000000021131540961505 +1.18463300000000004708056167146 -0.563277000000000027668534130498 -0.528549999999999964295227528055 +1.18465099999999989854870818817 -0.641318999999999972416730997793 -0.430479000000000000536459765499 +1.18532100000000006900791049702 -0.620402000000000009016787316796 0.458382000000000011663559007502 +1.18639399999999994861354934983 0.6445279999999999898108171692 -0.420775999999999983369747269535 +1.18640699999999998937028067303 -0.231517000000000000570210545447 -0.734056999999999959527485771105 +1.18648099999999989684340562235 0.470945000000000002504663143554 0.60866500000000001158184659289 +1.18768800000000007699441084696 -0.0150489999999999998769872888715 0.767575000000000007283063041541 +1.18784200000000006447464784287 -0.261257000000000016992629525703 0.721647999999999956166618630959 +1.1879980000000001094662138712 0.552032999999999995921484696737 0.532842999999999955562657305563 +1.1886399999999999188560195762 0.0978969999999999979101161784456 0.759967999999999976878939378366 +1.18877999999999994784616319521 0.727310000000000012043699371134 -0.240461000000000008069989121395 +1.18929499999999999104716152942 0.111053999999999999936939332201 -0.757129000000000051961990266136 +1.18985899999999999998578914528 0.0413740000000000010538236949742 0.763233000000000050278003982385 +1.19167399999999990001242622384 -0.759677000000000046675552312081 -0.0529460000000000000075495165675 +1.19287499999999990762944435119 0.335685999999999984400034236387 0.681443000000000020932588995493 +1.19332199999999999384669990832 0.467355000000000020410340084709 -0.597964000000000051038284709648 +1.19476099999999996192912021797 0.557830999999999965766050991078 -0.511244000000000031747049433761 +1.19484199999999995966959431826 -0.146273999999999987364773801346 -0.742264000000000034873437471106 +1.19608500000000006480149750132 0.656278999999999945735851270001 0.372394999999999976036946236491 +1.19628899999999993575272583257 0.0253500000000000010047518372858 -0.753823000000000020826007585129 +1.1981409999999999005382278483 -0.0605380000000000015325518631926 -0.748860999999999998877342477499 +1.1982639999999999957935870043 -0.650364999999999970903274970624 0.375751000000000001666222715357 +1.19846099999999999852207110962 -0.399197000000000024044766178122 -0.635871999999999992780885804677 +1.19959199999999999164401742746 -0.708080000000000042703618419182 -0.244137999999999993905319684018 +1.20251299999999994305710515619 -0.743522000000000016228796084761 0.0337410000000000001585398479165 +1.20307900000000000950706180447 -0.527306000000000052452264753811 0.523974999999999968558483942616 +1.20410100000000008790834726824 -0.346355999999999997207567048463 0.655878999999999989789500887127 +1.20419600000000004413891474542 0.725608000000000030738078748982 -0.152983000000000007867484441704 +1.20427299999999992685673078086 0.290159000000000000252242671195 -0.682301000000000046341597226274 +1.204498000000000068610006565 -0.203471000000000012963852213943 0.71258999999999994567900785114 +1.20647700000000002162892087654 -0.677760999999999946830087083072 0.291638000000000008338219004145 +1.20854799999999995563371157914 0.27693499999999998673061440968 0.680232999999999976559195147274 +1.20860600000000006915001904417 -0.72443100000000004712319423561 0.120293999999999998151700708604 +1.20928700000000000081001871877 -0.435491999999999990222931955941 0.589891000000000054193094456423 +1.20943500000000003780087354244 0.674669999999999991935339949123 0.286507999999999984908072292455 +1.20992900000000003224442934879 -0.702482999999999968565589369973 0.206373000000000000886402062861 +1.21048599999999995091570781369 0.41091299999999997272226437417 0.604875999999999969247710396303 +1.21103099999999996860822193412 0.648715000000000041602277178754 -0.335519999999999984918730433492 +1.21235099999999995645794115262 0.572533999999999987373655585543 0.449898999999999993359978134322 +1.21377599999999996605026808538 -0.481383999999999978580689230512 -0.543157000000000000916600129131 +1.21402399999999999202771050477 -0.637117000000000044401815557649 -0.346737000000000017418955167159 +1.21486099999999996867927620769 0.721041999999999960735408421897 -0.0648999999999999993560706457174 +1.21709200000000006269829100347 0.490296000000000009588774219083 0.527537999999999951405982301367 +1.21731400000000000716227077646 -0.31476500000000001699973495306 -0.647355000000000013749001936958 +1.2176370000000000803908051239 -0.144631000000000009553247082295 0.704586999999999963328889407421 +1.2180120000000000946016598391 0.690398999999999984922283147171 0.199490000000000000657252030578 +1.21888400000000007850076144678 -0.56113100000000004641265149985 -0.446601999999999998980371174184 +1.21951699999999996215649389342 -0.6984160000000000367847974303 -0.158098999999999989540810929611 +1.22068799999999999528199623455 0.217342000000000007409184377138 0.680207000000000006068034963391 +1.22073000000000009279688129027 0.713631000000000015326406810345 0.0234380000000000005000444502912 +1.22106899999999995998223312199 0.383765999999999996017407966065 -0.601426000000000016143530956469 +1.22169299999999991790389231028 0.20464599999999999457855892615 -0.682339000000000028833824217145 +1.22178199999999992364507761522 0.703403000000000000468958205602 0.111685000000000006492584248008 +1.22224299999999996835242654925 -0.557069000000000036365577216202 0.442489000000000021195489807724 +1.2241539999999999643875980837 0.564404000000000016790124846011 -0.427661999999999986599164003565 +1.2255139999999999922408733255 -0.286185000000000022701840407535 0.645145999999999997243094185251 +1.22720600000000001905675617309 -0.0849710000000000048592241341794 0.697671999999999958852470172133 +1.2276249999999999662492200514 0.475642000000000009229950137524 -0.516430999999999973404385400499 +1.22924699999999997857003108948 0.157141000000000002900790718741 0.681364999999999998436805981328 +1.2308730000000001059135001924 0.349495000000000000106581410364 0.602331999999999978534503952687 +1.23088799999999998213695562299 0.650341999999999975656805872859 -0.248939999999999994617638776617 +1.23104499999999994486188370502 -0.229155999999999998584243598998 -0.657278000000000028890667636006 +1.23191999999999990400567639881 0.590775999999999967826624924783 0.365180000000000004600764214047 +1.23316800000000004189359970042 -0.0247250000000000004496403249732 0.691871000000000013763212791673 +1.2339739999999999042756826384 0.11826100000000000500577357343 -0.680676999999999976509457155771 +1.23418999999999989825028023915 0.0965700000000000030597746558669 0.683702000000000031931790545059 +1.23462800000000005873346253793 -0.685995000000000021422863483167 -0.0714359999999999994990673712891 +1.23470499999999994145127857337 -0.464339000000000001744382416291 0.509797999999999973397279973142 +1.23549899999999990285459716688 0.0358679999999999971072028870367 0.687208000000000041040948417503 +1.23571600000000003660716174636 -0.373584000000000027164048788109 0.577443000000000039584335809195 +1.2365829999999999877502432355 -0.584632999999999958262719701452 0.359256000000000019767298908846 +1.2379160000000000163566937772 -0.397633999999999987462473427513 -0.556285999999999947185358450952 +1.23860700000000001352873368887 -0.630400999999999989142906997586 -0.261626999999999998447464122364 +1.23960000000000003517186542012 -0.142707000000000000516919840265 -0.665602000000000026957991394738 +1.24106699999999992023447248357 0.0313449999999999978639309006212 -0.677324000000000037147174225538 +1.24246499999999993057997471624 0.426842999999999972438047279866 0.523533000000000026119550966541 +1.24289999999999989377386100387 0.507712000000000052146731377434 0.444328999999999973979925016465 +1.2429449999999999665334371457 -0.0557590000000000030055957722652 -0.672292000000000000703437308402 +1.24325100000000010602718703012 -0.224647999999999986586729505689 0.635499999999999953814722175593 +1.24378499999999991842969393474 0.29861900000000002330935444661 -0.603179000000000020698109892692 +1.24486800000000008559197794966 -0.670868000000000019866774891852 0.0155090000000000002161604228945 +1.24588699999999996670396740228 0.649402000000000034773961488099 -0.161376999999999992674304394313 +1.24604399999999992942889548431 -0.609890000000000043200998334214 0.274606000000000016747492281866 +1.24662800000000006939160357433 0.606685999999999947540629818832 0.279019000000000017003287666739 +1.24756399999999989525178989425 0.286932000000000020367707520563 0.60104400000000002268762955282 +1.24820099999999989393018040573 -0.478750000000000008881784197001 -0.46129700000000001258726456399 +1.24832499999999990691890161543 -0.556769999999999987139176482742 -0.362893000000000021110224679433 +1.24871599999999993713117873995 0.568748999999999949039874991286 -0.342391999999999974146902559369 +1.2501949999999999452171550729 -0.653092000000000005854872142663 0.102391999999999996906474564184 +1.25058699999999989316279425111 -0.632739999999999969126918131224 0.188872000000000012098766433155 +1.2552490000000000591739990341 -0.491352999999999984215293125089 0.427692999999999989846344305988 +1.25553800000000004288835953048 0.391554999999999986393106610194 -0.519912999999999958511409658968 +1.25597000000000003083755473199 0.645899000000000000909494701773 -0.0731780000000000069304562089201 +1.2564150000000000595434812567 0.620202000000000031043612125359 0.191757000000000010775380587802 +1.256957000000000101991304291 -0.312358000000000024520829811081 -0.567884000000000055408122534573 +1.25708299999999995044674960809 0.482051999999999980506260044422 -0.432858999999999993768540207384 +1.25724199999999997068300672254 -0.161990999999999996106225808035 0.626978000000000035285552257847 +1.25829999999999997406519014476 -0.621196999999999999175770426518 -0.175485000000000002096101070492 +1.25835000000000007958078640513 -0.309983000000000008533618256479 0.566097999999999990095034263504 +1.26049199999999994581401097093 0.223471000000000002971844992317 0.601015999999999994685140336514 +1.26109500000000007702283255639 0.639847000000000054598103815806 0.015310999999999999957034368947 +1.26124400000000003174704943376 0.631269999999999997797317519144 0.103738999999999997880806290596 +1.26138100000000008549250196666 0.212249999999999994226840271949 -0.603217000000000003190336883563 +1.26245399999999996509814081946 -0.399336999999999997523758565876 0.496728000000000002867039938792 +1.26380200000000009197265171679 0.523124999999999951150186916493 0.359366000000000018754775510388 +1.2640139999999999709245912527 0.361924000000000023469226562156 0.520843999999999973660180785373 +1.2674319999999998920259258739 -0.098459000000000004848565993143 0.619613999999999998102850895521 +1.26835000000000008846257060213 0.57084900000000005082512188892 -0.255771000000000026108892825505 +1.26953999999999989078958151367 0.441089000000000008849809773892 0.440124000000000015209167258945 +1.26960600000000001230660018336 0.159364000000000005652367462972 0.602249000000000034305003282498 +1.27082600000000001116973180615 -0.225892000000000009451994742449 -0.577906000000000030780711313128 +1.27083999999999996965982518304 -0.516427999999999998159694314381 0.343899999999999983479881393578 +1.27248399999999994847144080268 -0.394500999999999990563992469106 -0.474503999999999981351805899976 +1.27283999999999997143618202244 -0.550212999999999952116525037127 -0.277751000000000025647040047261 +1.27302800000000004843059286941 -0.609540999999999999481303802895 -0.0886490000000000055724314051986 +1.27378100000000005209699338593 -0.034304000000000001158184659289 0.613437000000000010047074283648 +1.27378499999999994507504652574 0.125001000000000001000088900582 -0.601539999999999963620211929083 +1.27486999999999994770405464806 0.0948620000000000018758328224067 0.604737999999999997768895809713 +1.27626299999999992529353676218 0.0302210000000000013342660309945 0.6084720000000000128537180899 +1.27709699999999992670041137899 -0.244938999999999990064836197234 0.555902000000000007240430477395 +1.27769899999999991813126598572 -0.474227000000000009638512210586 -0.377616000000000007208456054286 +1.2783889999999999975699438437 0.305900000000000005240252676231 -0.521676999999999946311390885967 +1.27946699999999990993160281505 -0.138578000000000006730616064488 -0.58631299999999997307753574205 +1.27971699999999999342037426686 0.536472999999999977660536387702 0.272984999999999977671194528739 +1.28094899999999989326227023412 0.0372149999999999980815346134477 -0.598153000000000045766057610308 +1.28141600000000011050360626541 -0.539464999999999972324360442144 0.258749999999999980015985556747 +1.28157999999999994145127857337 0.486559999999999992503774137731 -0.347579000000000026826540988623 +1.28165599999999990643573255511 0.295796000000000003371525281182 0.519483000000000028073543489882 +1.28273199999999998333066741907 -0.595481000000000038063774354669 -0.00146499999999999993942345621889 +1.28284500000000001307398633799 -0.0507599999999999995647925743469 -0.593071000000000014829026895313 +1.28297799999999995179678080603 0.57069700000000000983391146292 -0.168141000000000012670753335442 +1.28421000000000007368328169832 -0.423514000000000001566746732351 0.414051999999999975621278736071 +1.28505099999999994331290054106 0.397799000000000013699263945455 -0.436348000000000013631762385558 +1.28621900000000000119371179608 -0.33255800000000002025757339652 0.484816999999999997950084207332 +1.28693400000000002236788532173 -0.560373000000000009990230864787 0.172578000000000009173106718663 +1.2873730000000001005844296742 -0.5790699999999999736388645033 0.0857259999999999966480146440517 +1.29058099999999997820054886688 0.547703999999999968650854498264 0.185526999999999997470467860694 +1.29160499999999989206855843804 0.453593000000000023952395622473 0.354978000000000015745627024444 +1.2916389999999999815827322891 -0.308717000000000019177548438165 -0.486171000000000019802826045634 +1.29188600000000008982681265479 -0.17871100000000000873612293617 0.546893999999999991246113495436 +1.29216599999999992576249496778 0.372925999999999979728215748764 0.437300999999999995271338093517 +1.29232999999999997875477220077 -0.54148399999999996534683077698 -0.191512999999999988798293770742 +1.29254299999999999748467871541 0.568292000000000019355184122105 -0.0798470000000000013073986337986 +1.295320999999999944662931739 0.228719000000000005634603894578 0.519453000000000053582027703669 +1.29608900000000004659739261115 0.219017999999999990468069199778 -0.521715000000000039825920339354 +1.29635199999999994879829046113 0.55677299999999996238386756886 0.0973370000000000068496319727274 +1.29700700000000002098943241435 0.563644999999999951612039694737 0.00876200000000000069066974361931 +1.30089800000000010982148523908 -0.446020000000000027551294579098 0.329743000000000008320455435751 +1.30101899999999992552091043763 0.489146999999999998465227690758 -0.260927999999999993274713006031 +1.30203000000000002067679361062 -0.389811000000000018594903394842 -0.390849000000000001975308805413 +1.30215600000000009117684385274 -0.467832000000000025607960196794 -0.292445000000000010498268920855 +1.30265699999999995384314388502 -0.111558000000000004381384144381 0.5391110000000000068709482548 +1.30495399999999994733457242546 0.160957999999999989970689284746 0.520755999999999996674659996643 +1.30559099999999994601296293695 -0.221735999999999988663290650948 -0.496252999999999999669597627872 +1.30590300000000003599609499361 -0.264263999999999998902211473251 0.47411100000000000465050220555 +1.30672100000000002140154720109 -0.530618000000000034077629607054 -0.104519000000000000794031507212 +1.30794699999999997075406099611 0.31197500000000000230926389122 -0.438114999999999976676434698675 +1.30856700000000003569766704459 0.131248000000000003550937321961 -0.520027000000000017010393094097 +1.30857299999999998618704921682 0.464307999999999998497202113867 0.2684309999999999751807422399 +1.3090120000000000644035935693 -0.353820000000000023376856006507 0.401621000000000005769607014372 +1.30936699999999994759036781034 -0.0437470000000000011630696405973 0.53258199999999999985078602549 +1.30949300000000001809041805245 0.402471999999999996422417325448 -0.351061999999999985178078532044 +1.31051800000000007173639460234 0.0927810000000000023590018827235 0.523387000000000046640025175293 +1.31068999999999991068477811496 0.303493000000000012761347534251 0.435871000000000008434142273472 +1.31199099999999990728838383802 0.0244559999999999985731413687517 0.5273339999999999694324515076 +1.31245199999999995199573277205 -0.466764999999999985469401053706 0.244131999999999987904786280524 +1.31428300000000009006839718495 -0.133900999999999992251531466536 -0.504709999999999991970867085911 +1.31521899999999991592858350486 0.382454999999999989412913237175 0.352032000000000011574741165532 +1.31532399999999993767119121912 0.489804000000000017145396213891 -0.173246000000000011098677532573 +1.31577399999999999913313786237 0.0429399999999999990030197238866 -0.51661999999999996813215830116 +1.31595499999999998586019955837 -0.517658999999999980268228227942 -0.0171119999999999987394527778406 +1.31768200000000001992361831071 -0.045560000000000003272937476595 -0.511507999999999962703611799952 +1.31882600000000005380229595175 -0.485669000000000017358559034619 0.157557000000000002604139126561 +1.31999500000000002941646926047 -0.502655999999999991700860846322 0.0703610000000000068709482548002 +1.32037599999999999411670614791 0.473189999999999999502620084968 0.18082400000000001250022307886 +1.32122300000000003628031208791 -0.30385800000000001697131324363 -0.402538999999999980161646817578 +1.32143100000000002225419848401 -0.194726000000000010192735544479 0.464652999999999982705389811599 +1.32147299999999989772447861469 -0.459592000000000000525801624462 -0.206119999999999997664090756189 +1.32443800000000000416378043155 0.488528000000000017788437389754 -0.0848809999999999981179499286554 +1.32503700000000002034994395217 0.23306399999999999339550527111 0.435840999999999978431475256002 +1.32568100000000010929568361462 0.224920000000000008810729923425 -0.438153000000000014679812920804 +1.32643899999999992367349932465 -0.383583000000000007290168468899 -0.305651999999999979262810256841 +1.32663899999999990164667451609 -0.373686000000000018150814184992 0.316840999999999983760545774203 +1.32696900000000006514255801449 0.480204000000000019721113631022 0.0925040000000000028901325777042 +1.32832499999999997797317519144 0.48532399999999997763922010563 0.0038189999999999999120980920253 +1.32876700000000003143441063003 0.405557999999999974072295572114 -0.264388999999999985135445967899 +1.329555999999999960081709105 -0.282546000000000019358736835784 0.390448000000000017273293906328 +1.33234399999999997277200236567 0.316817999999999988514076676438 -0.35282499999999999973354647409 +1.33274000000000003574029960873 -0.124217999999999995086596982219 0.456479999999999996873611962656 +1.33308099999999996043698047288 0.390475000000000016520118606422 0.265373000000000025533353209539 +1.33455100000000004278888354747 0.309991999999999989778842746091 0.350540000000000018243184740641 +1.33515199999999989444177117548 0.161917000000000005366374011828 0.437209000000000014285461702457 +1.33520199999999999995736743585 -0.216705000000000008730793865652 -0.412640999999999980030196411462 +1.33557499999999995665689311863 -0.449535999999999991150190226108 -0.118981000000000003424815986364 +1.33818400000000004013145371573 0.136976999999999987656096323008 -0.436462000000000016619594589429 +1.33902999999999994251709267701 -0.392077000000000008839151632856 0.230809999999999987396748224455 +1.33978599999999992142818427965 -0.0530180000000000026250113194237 0.44962499999999999689137553105 +1.34099400000000001931255155796 0.0903319999999999956319385319148 0.439970000000000027728930263038 +1.34254099999999998438227066799 0.0185929999999999984172660560944 0.444114999999999982005505216875 +1.34279700000000001836042429204 0.407042999999999988158805308558 -0.17667299999999999671196349027 +1.34391199999999999548094820057 -0.128697000000000005837108574269 -0.42111500000000001708855279503 +1.34440599999999998992450400692 -0.437707999999999985973886396096 -0.0313729999999999981108445012978 +1.34540499999999996205701791041 0.0484940000000000023816504324259 -0.433049000000000017251977624255 +1.3455950000000000965627577898 -0.2977989999999999803925732067 -0.317319999999999990958343687453 +1.34561200000000003029754225281 -0.375842000000000009407585821464 -0.219248999999999999444000309268 +1.34568299999999996252597611601 0.396955000000000002291500322826 0.177666999999999991599608506476 +1.34576099999999998502175913018 -0.20997299999999999298161412753 0.380576999999999998625099806304 +1.3461380000000000567439428778 -0.408922000000000007702283255639 0.143867999999999995885957559949 +1.3473170000000000978701564236 -0.0401810000000000014375167722847 -0.427925999999999973066877601013 +1.3479309999999999902797753748 -0.424151999999999973489650528791 0.056358999999999999375166481741 +1.34796099999999996477129116101 -0.299713000000000007183587058535 0.305244999999999988560261954262 +1.34952500000000008562039965909 0.236489000000000004764189043271 0.350507999999999986240339922006 +1.35004400000000002179945113312 0.229935000000000000497379915032 -0.352862999999999982225773464961 +1.35148299999999998988187144278 0.320411000000000001364242052659 -0.266141999999999989690024904121 +1.35152699999999992286348060588 0.406920999999999977170261900028 -0.0882600000000000051159076974727 +1.3529729999999999812132500665 0.401866999999999974235720401339 0.0892600000000000060040861171728 +1.35314500000000004220623850415 0.315267999999999992688515249029 0.263824999999999976196818352037 +1.35492300000000009951861557056 0.405193999999999998617994378947 0.000501000000000000034715286201248 +1.35756300000000007521805400756 -0.136387000000000008226308523263 0.372047999999999989828580737594 +1.35947499999999998898658759572 -0.366615999999999997438493437585 -0.131979999999999986215470926254 +1.35954599999999992121502145892 -0.21081800000000000538946665074 -0.327402000000000026336266500948 +1.3600810000000000954401002673 0.162235999999999991327825910048 0.351934999999999997832844655932 +1.36104599999999997805844031973 -0.315695999999999976637354848208 0.218836000000000002740918603195 +1.36252200000000001089972556656 0.142165999999999986824761322168 -0.351175999999999988165910735916 +1.36465400000000003366551482031 -0.290565999999999990954790973774 -0.230846999999999996644461930373 +1.36478000000000010416556506243 -0.224391000000000007119638212316 0.294999999999999984456877655248 +1.36491699999999993586641267029 -0.0620800000000000032351898937577 0.364893999999999996131094803786 +1.36528699999999991732124726695 0.322738999999999998102850895521 -0.178409000000000012020606732221 +1.36617799999999989246646237007 0.0875269999999999936957095769685 0.354818000000000022264856625043 +1.36640000000000005897504706809 0.319298999999999999488409230253 0.17606800000000000228084218179 +1.36779199999999989678656220349 0.0126569999999999998480104679288 0.359142999999999990023979989928 +1.36797300000000010555822882452 -0.355945000000000011386447340556 -0.0441910000000000011133316490941 +1.36823800000000006527045570692 -0.122983999999999996100008559097 -0.335857999999999989881871442776 +1.36868600000000006922107331775 0.238980999999999998983923887863 0.263790999999999997704946963495 +1.36875999999999997669419826707 -0.330434000000000005492495347426 0.131563999999999986512122518434 +1.36907700000000009943335044227 0.234042000000000000037303493627 -0.26618000000000002769340312625 +1.36972899999999997433519638435 0.0538570000000000020934365352332 -0.347768999999999994798827174236 +1.37107200000000006845368716313 -0.343868000000000006988187806201 0.0437729999999999994098054401093 +1.37163699999999999512567683269 -0.034641999999999999182431764666 -0.342656000000000016125767388075 +1.37370400000000003615241439547 0.32379400000000002624034323162 -0.0899719999999999964224173254479 +1.37426099999999995482369286037 0.322070000000000022932766796657 0.0876170000000000004369837824925 +1.37669899999999989503862707352 0.323570000000000024265034426207 -0.00118000000000000005925815393937 +1.37702900000000005853451057192 -0.148018000000000010674128247956 0.286148000000000013454126701617 +1.37832799999999999762678726256 -0.282185000000000019149126728735 -0.143463000000000007183587058535 +1.37841300000000011038991942769 -0.237922999999999995601740465645 0.208257999999999998674837797807 +1.37852299999999994284394233546 -0.204100000000000003641531520771 -0.240868999999999999772626324557 +1.37964200000000003498712430883 0.161916000000000004366285111246 0.265272999999999981035614382563 +1.38148099999999995901589500136 0.146793000000000006810552122261 -0.26450299999999998812327817177 +1.38244600000000006367883997882 0.24052999999999999380939641469 0.176033999999999996033395177619 +1.38270699999999990836840879638 0.237226999999999993429256051058 -0.178446999999999994512833723093 +1.38466099999999991965182744025 -0.0708960000000000006847855615888 0.278722000000000025288215965702 +1.3859710000000000640341113467 0.084376999999999993673505116476 0.268264000000000002454925152051 +1.38656299999999998995292571635 -0.272691999999999989956478430031 -0.0555140000000000008451017663447 +1.38660600000000000520117282576 -0.250516999999999989690024904121 0.120694999999999996731503415504 +1.38716299999999992387245129066 -0.116786000000000000920152842809 -0.249275999999999997580601984737 +1.38764599999999993507060480624 0.0066709999999999998465671779968 0.272753000000000023206325749925 +1.38864600000000004698108568846 0.0590069999999999969531039312187 -0.261116000000000014757972621737 +1.38932600000000006090772330936 -0.26212099999999999289101992872 0.032655000000000003468336728929 +1.39054199999999994474819686729 -0.0289680000000000006932232565759 -0.256033999999999983820941906743 +1.39075100000000007050005024212 0.241129000000000009995559935305 0.0875819999999999931894478777394 +1.39088100000000003397815362405 0.239473999999999992427390793637 -0.0900090000000000056701310313656 +1.39106100000000010297185326635 -0.15906500000000001193711796077 0.199117999999999989446664017123 +1.39205899999999993532640019112 -0.196576000000000000733635374672 -0.153385999999999994569677141953 +1.39356600000000008243716820289 0.240775999999999990031085417286 -0.0012160000000000000669464483849 +1.39375899999999997014299424336 0.160956999999999988970600384164 0.177563999999999999612754209011 +1.3949879999999998947401991245 0.150842000000000003856470698338 -0.176784999999999997699617892977 +1.39894199999999990779997460777 -0.0794320000000000026041391265608 0.191451000000000010059508781524 +1.39960299999999993048049873323 -0.169483999999999995766941651709 0.111301999999999998158806135962 +1.40010300000000009745804163686 -0.188276999999999999912958514869 -0.0652979999999999949356066508699 +1.40029300000000000991917659121 0.0808949999999999946886930501933 0.180653000000000008018474773053 +1.40061400000000002563638190622 -0.110126000000000001666222715357 -0.161709999999999992637000900686 +1.40202300000000001922728642967 0.000658999999999999972084829824581 0.185288000000000008249401162175 +1.4020820000000000504769559484 0.0639259999999999967146280255292 -0.173432000000000002826183731486 +1.40237499999999992716936958459 0.159362000000000003652189661807 0.0891539999999999971391773101459 +1.40261999999999997790212091786 -0.179234000000000004426681243785 0.0230470000000000015127898933542 +1.40299100000000009913492249325 0.154293999999999986716403554965 -0.0883710000000000051034731995969 +1.40396000000000009677592061053 -0.0231780000000000006854516954036 -0.168399999999999994138022429979 +1.40545600000000003859668140649 0.157137999999999999900524016994 0.000391999999999999987343457519273 +1.40770100000000009110578957916 -0.0876559999999999978070874817604 0.103424000000000002041922186891 +1.40853899999999998549071733578 -0.103034000000000000585309578582 -0.073506000000000001892708212381 +1.40908999999999995367261362844 0.0770919999999999938644634767115 0.0923279999999999934079397689857 +1.40998599999999996157384885009 0.0685899999999999981925569159102 -0.0850650000000000017230661342182 +1.41086700000000009325162864116 -0.00535599999999999965005770263815 0.0970909999999999967501551623172 +1.4109030000000000182325265996 -0.0955330000000000068016703380636 0.0149890000000000005869749131193 +1.41183700000000000862598881213 -0.0172980000000000008752998326145 -0.0801029999999999936521888344032 +1.41232399999999991280219546752 0.0729849999999999943245398981162 0.00363899999999999987365661979766 +1.41414200000000001011812855722 -0.0113489999999999997132293927393 0.00851099999999999946853623811194 +3 1569 1758 1764 +3 1764 1758 1938 +3 1764 1938 1947 +3 1947 1938 2103 +3 1947 2103 2115 +3 2115 2103 2262 +3 2115 2262 2282 +3 2282 2262 2425 +3 2282 2425 2440 +3 2440 2425 2586 +3 2440 2586 2602 +3 2602 2586 2746 +3 2602 2746 2761 +3 2761 2746 2915 +3 2761 2915 2933 +3 2933 2915 3087 +3 2933 3087 3109 +3 3109 3087 3285 +3 3109 3285 3313 +3 3313 3285 3463 +3 3313 3463 3504 +3 3504 3463 3638 +3 3504 3638 3667 +3 3667 3638 3787 +3 3667 3787 3817 +3 3817 3787 3923 +3 3817 3923 3950 +3 3950 3923 4045 +3 3950 4045 4068 +3 4068 4045 4153 +3 4068 4153 4175 +3 4175 4153 4249 +3 4175 4249 4272 +3 4272 4249 4338 +3 4272 4338 4364 +3 4364 4338 4422 +3 4364 4422 4445 +3 4445 4422 4494 +3 4445 4494 4517 +3 4517 4494 4555 +3 4517 4555 4586 +3 4586 4555 4612 +3 4586 4612 4643 +3 4643 4612 4665 +3 4643 4665 4694 +3 4694 4665 4706 +3 4694 4706 4736 +3 4736 4706 4747 +3 4736 4747 4771 +3 4771 4747 4776 +3 4771 4776 4802 +3 4802 4776 4800 +3 4802 4800 4828 +3 4828 4800 4814 +3 4828 4814 4842 +3 4842 4814 4829 +3 4842 4829 4854 +3 4854 4829 4832 +3 4854 4832 4856 +3 4856 4832 4830 +3 4856 4830 4855 +3 4855 4830 4820 +3 4855 4820 4844 +3 4844 4820 4804 +3 4844 4804 4831 +3 4831 4804 4782 +3 4831 4782 4805 +3 4805 4782 4755 +3 4805 4755 4778 +3 4778 4755 4720 +3 4778 4720 4742 +3 4742 4720 4674 +3 4742 4674 4699 +3 4699 4674 4629 +3 4699 4629 4646 +3 4646 4629 4572 +3 4646 4572 4591 +3 4591 4572 4508 +3 4591 4508 4527 +3 4527 4508 4434 +3 4527 4434 4452 +3 4452 4434 4359 +3 4452 4359 4373 +3 4373 4359 4269 +3 4373 4269 4283 +3 4283 4269 4172 +3 4283 4172 4185 +3 4185 4172 4069 +3 4185 4069 4078 +3 4078 4069 3953 +3 4078 3953 3962 +3 3962 3953 3829 +3 3962 3829 3835 +3 3835 3829 3681 +3 3835 3681 3687 +3 3522 3525 3687 +3 3522 3687 3681 +3 3525 3522 3332 +3 3522 3518 3332 +3 3681 3672 3518 +3 3681 3518 3522 +3 3829 3813 3672 +3 3829 3672 3681 +3 3953 3941 3813 +3 3953 3813 3829 +3 4069 4056 3941 +3 4069 3941 3953 +3 4172 4162 4056 +3 4172 4056 4069 +3 4269 4254 4162 +3 4269 4162 4172 +3 4359 4341 4254 +3 4359 4254 4269 +3 4434 4421 4341 +3 4434 4341 4359 +3 4508 4491 4421 +3 4508 4421 4434 +3 4572 4550 4491 +3 4572 4491 4508 +3 4629 4600 4550 +3 4629 4550 4572 +3 4674 4651 4600 +3 4674 4600 4629 +3 4720 4690 4651 +3 4720 4651 4674 +3 4755 4723 4690 +3 4755 4690 4720 +3 4782 4752 4723 +3 4782 4723 4755 +3 4804 4773 4752 +3 4804 4752 4782 +3 4820 4789 4773 +3 4820 4773 4804 +3 4830 4798 4789 +3 4830 4789 4820 +3 4832 4799 4798 +3 4832 4798 4830 +3 4829 4793 4799 +3 4829 4799 4832 +3 4814 4783 4793 +3 4814 4793 4829 +3 4800 4763 4783 +3 4800 4783 4814 +3 4776 4741 4763 +3 4776 4763 4800 +3 4747 4710 4741 +3 4747 4741 4776 +3 4706 4672 4710 +3 4706 4710 4747 +3 4665 4630 4672 +3 4665 4672 4706 +3 4612 4577 4630 +3 4612 4630 4665 +3 4555 4516 4577 +3 4555 4577 4612 +3 4494 4451 4516 +3 4494 4516 4555 +3 4422 4378 4451 +3 4422 4451 4494 +3 4338 4299 4378 +3 4338 4378 4422 +3 4249 4213 4299 +3 4249 4299 4338 +3 4153 4116 4213 +3 4153 4213 4249 +3 4045 4010 4116 +3 4045 4116 4153 +3 3923 3886 4010 +3 3923 4010 4045 +3 3787 3752 3886 +3 3787 3886 3923 +3 3638 3604 3752 +3 3638 3752 3787 +3 3463 3427 3604 +3 3463 3604 3638 +3 3285 3245 3427 +3 3285 3427 3463 +3 3087 3056 3245 +3 3087 3245 3285 +3 2915 2890 3056 +3 2915 3056 3087 +3 2746 2725 2890 +3 2746 2890 2915 +3 2586 2565 2725 +3 2586 2725 2746 +3 2425 2407 2565 +3 2425 2565 2586 +3 2262 2248 2407 +3 2262 2407 2425 +3 2103 2090 2248 +3 2103 2248 2262 +3 1938 1928 2090 +3 1938 2090 2103 +3 1758 1753 1928 +3 1758 1928 1938 +3 1569 1753 1758 +3 1569 1749 1753 +3 1753 1749 1917 +3 1753 1917 1928 +3 1928 1917 2077 +3 1928 2077 2090 +3 2090 2077 2236 +3 2090 2236 2248 +3 2248 2236 2391 +3 2248 2391 2407 +3 2407 2391 2546 +3 2407 2546 2565 +3 2565 2546 2704 +3 2565 2704 2725 +3 2725 2704 2858 +3 2725 2858 2890 +3 2890 2858 3030 +3 2890 3030 3056 +3 3056 3030 3205 +3 3056 3205 3245 +3 3245 3205 3380 +3 3245 3380 3427 +3 3427 3380 3556 +3 3427 3556 3604 +3 3604 3556 3712 +3 3604 3712 3752 +3 3752 3712 3839 +3 3752 3839 3886 +3 3886 3839 3957 +3 3886 3957 4010 +3 4010 3957 4065 +3 4010 4065 4116 +3 4116 4065 4165 +3 4116 4165 4213 +3 4213 4165 4256 +3 4213 4256 4299 +3 4299 4256 4340 +3 4299 4340 4378 +3 4378 4340 4414 +3 4378 4414 4451 +3 4451 4414 4473 +3 4451 4473 4516 +3 4516 4473 4533 +3 4516 4533 4577 +3 4577 4533 4587 +3 4577 4587 4630 +3 4630 4587 4631 +3 4630 4631 4672 +3 4672 4631 4669 +3 4672 4669 4710 +3 4710 4669 4702 +3 4710 4702 4741 +3 4741 4702 4722 +3 4741 4722 4763 +3 4763 4722 4745 +3 4763 4745 4783 +3 4783 4745 4757 +3 4783 4757 4793 +3 4793 4757 4761 +3 4793 4761 4799 +3 4799 4761 4760 +3 4799 4760 4798 +3 4798 4760 4751 +3 4798 4751 4789 +3 4789 4751 4738 +3 4789 4738 4773 +3 4773 4738 4719 +3 4773 4719 4752 +3 4752 4719 4691 +3 4752 4691 4723 +3 4723 4691 4657 +3 4723 4657 4690 +3 4690 4657 4620 +3 4690 4620 4651 +3 4651 4620 4575 +3 4651 4575 4600 +3 4600 4575 4518 +3 4600 4518 4550 +3 4550 4518 4458 +3 4550 4458 4491 +3 4491 4458 4391 +3 4491 4391 4421 +3 4421 4391 4321 +3 4421 4321 4341 +3 4341 4321 4238 +3 4341 4238 4254 +3 4254 4238 4147 +3 4254 4147 4162 +3 4162 4147 4043 +3 4162 4043 4056 +3 4056 4043 3929 +3 4056 3929 3941 +3 3941 3929 3804 +3 3941 3804 3813 +3 3813 3804 3659 +3 3813 3659 3672 +3 3672 3659 3514 +3 3672 3514 3518 +3 3518 3514 3332 +3 3514 3506 3332 +3 3659 3652 3506 +3 3659 3506 3514 +3 3804 3790 3652 +3 3804 3652 3659 +3 3929 3914 3790 +3 3929 3790 3804 +3 4043 4023 3914 +3 4043 3914 3929 +3 4147 4124 4023 +3 4147 4023 4043 +3 4238 4211 4124 +3 4238 4124 4147 +3 4321 4288 4211 +3 4321 4211 4238 +3 4391 4362 4288 +3 4391 4288 4321 +3 4458 4429 4362 +3 4458 4362 4391 +3 4518 4492 4429 +3 4518 4429 4458 +3 4575 4538 4492 +3 4575 4492 4518 +3 4620 4585 4538 +3 4620 4538 4575 +3 4657 4623 4585 +3 4657 4585 4620 +3 4691 4653 4623 +3 4691 4623 4657 +3 4719 4677 4653 +3 4719 4653 4691 +3 4738 4698 4677 +3 4738 4677 4719 +3 4751 4708 4698 +3 4751 4698 4738 +3 4760 4716 4708 +3 4760 4708 4751 +3 4761 4715 4716 +3 4761 4716 4760 +3 4757 4707 4715 +3 4757 4715 4761 +3 4745 4696 4707 +3 4745 4707 4757 +3 4722 4675 4696 +3 4722 4696 4745 +3 4702 4652 4675 +3 4702 4675 4722 +3 4669 4618 4652 +3 4669 4652 4702 +3 4631 4583 4618 +3 4631 4618 4669 +3 4587 4534 4583 +3 4587 4583 4631 +3 4533 4488 4534 +3 4533 4534 4587 +3 4473 4427 4488 +3 4473 4488 4533 +3 4414 4358 4427 +3 4414 4427 4473 +3 4340 4281 4358 +3 4340 4358 4414 +3 4256 4199 4281 +3 4256 4281 4340 +3 4165 4119 4199 +3 4165 4199 4256 +3 4065 4018 4119 +3 4065 4119 4165 +3 3957 3904 4018 +3 3957 4018 4065 +3 3839 3783 3904 +3 3839 3904 3957 +3 3712 3645 3783 +3 3712 3783 3839 +3 3556 3491 3645 +3 3556 3645 3712 +3 3380 3321 3491 +3 3380 3491 3556 +3 3205 3147 3321 +3 3205 3321 3380 +3 3030 2985 3147 +3 3030 3147 3205 +3 2858 2828 2985 +3 2858 2985 3030 +3 2704 2670 2828 +3 2704 2828 2858 +3 2546 2521 2670 +3 2546 2670 2704 +3 2391 2367 2521 +3 2391 2521 2546 +3 2236 2222 2367 +3 2236 2367 2391 +3 2077 2066 2222 +3 2077 2222 2236 +3 1917 1906 2066 +3 1917 2066 2077 +3 1749 1741 1906 +3 1749 1906 1917 +3 1569 1741 1749 +3 1569 1735 1741 +3 1741 1735 1898 +3 1741 1898 1906 +3 1906 1898 2052 +3 1906 2052 2066 +3 2066 2052 2201 +3 2066 2201 2222 +3 2222 2201 2354 +3 2222 2354 2367 +3 2367 2354 2497 +3 2367 2497 2521 +3 2521 2497 2643 +3 2521 2643 2670 +3 2670 2643 2781 +3 2670 2781 2828 +3 2828 2781 2924 +3 2828 2924 2985 +3 2985 2924 3083 +3 2985 3083 3147 +3 3147 3083 3264 +3 3147 3264 3321 +3 3321 3264 3425 +3 3321 3425 3491 +3 3491 3425 3589 +3 3491 3589 3645 +3 3645 3589 3730 +3 3645 3730 3783 +3 3783 3730 3851 +3 3783 3851 3904 +3 3904 3851 3952 +3 3904 3952 4018 +3 4018 3952 4053 +3 4018 4053 4119 +3 4119 4053 4148 +3 4119 4148 4199 +3 4199 4148 4229 +3 4199 4229 4281 +3 4281 4229 4302 +3 4281 4302 4358 +3 4358 4302 4365 +3 4358 4365 4427 +3 4427 4365 4428 +3 4427 4428 4488 +3 4488 4428 4479 +3 4488 4479 4534 +3 4534 4479 4524 +3 4534 4524 4583 +3 4583 4524 4561 +3 4583 4561 4618 +3 4618 4561 4596 +3 4618 4596 4652 +3 4652 4596 4625 +3 4652 4625 4675 +3 4675 4625 4642 +3 4675 4642 4696 +3 4696 4642 4656 +3 4696 4656 4707 +3 4707 4656 4664 +3 4707 4664 4715 +3 4715 4664 4667 +3 4715 4667 4716 +3 4716 4667 4660 +3 4716 4660 4708 +3 4708 4660 4649 +3 4708 4649 4698 +3 4698 4649 4633 +3 4698 4633 4677 +3 4677 4633 4608 +3 4677 4608 4653 +3 4653 4608 4578 +3 4653 4578 4623 +3 4623 4578 4542 +3 4623 4542 4585 +3 4585 4542 4501 +3 4585 4501 4538 +3 4538 4501 4447 +3 4538 4447 4492 +3 4492 4447 4393 +3 4492 4393 4429 +3 4429 4393 4333 +3 4429 4333 4362 +3 4362 4333 4258 +3 4362 4258 4288 +3 4288 4258 4177 +3 4288 4177 4211 +3 4211 4177 4093 +3 4211 4093 4124 +3 4124 4093 4003 +3 4124 4003 4023 +3 4023 4003 3896 +3 4023 3896 3914 +3 3914 3896 3775 +3 3914 3775 3790 +3 3790 3775 3643 +3 3790 3643 3652 +3 3652 3643 3497 +3 3652 3497 3506 +3 3506 3497 3332 +3 3497 3488 3332 +3 3643 3636 3488 +3 3643 3488 3497 +3 3775 3757 3636 +3 3775 3636 3643 +3 3896 3876 3757 +3 3896 3757 3775 +3 4003 3973 3876 +3 4003 3876 3896 +3 4093 4064 3973 +3 4093 3973 4003 +3 4177 4154 4064 +3 4177 4064 4093 +3 4258 4228 4154 +3 4258 4154 4177 +3 4333 4291 4228 +3 4333 4228 4258 +3 4393 4355 4291 +3 4393 4291 4333 +3 4447 4410 4355 +3 4447 4355 4393 +3 4501 4454 4410 +3 4501 4410 4447 +3 4542 4499 4454 +3 4542 4454 4501 +3 4578 4530 4499 +3 4578 4499 4542 +3 4608 4559 4530 +3 4608 4530 4578 +3 4633 4582 4559 +3 4633 4559 4608 +3 4649 4595 4582 +3 4649 4582 4633 +3 4660 4603 4595 +3 4660 4595 4649 +3 4667 4609 4603 +3 4667 4603 4660 +3 4664 4605 4609 +3 4664 4609 4667 +3 4656 4597 4605 +3 4656 4605 4664 +3 4642 4584 4597 +3 4642 4597 4656 +3 4625 4560 4584 +3 4625 4584 4642 +3 4596 4532 4560 +3 4596 4560 4625 +3 4561 4502 4532 +3 4561 4532 4596 +3 4524 4459 4502 +3 4524 4502 4561 +3 4479 4418 4459 +3 4479 4459 4524 +3 4428 4360 4418 +3 4428 4418 4479 +3 4365 4303 4360 +3 4365 4360 4428 +3 4302 4239 4303 +3 4302 4303 4365 +3 4229 4160 4239 +3 4229 4239 4302 +3 4148 4074 4160 +3 4148 4160 4229 +3 4053 3988 4074 +3 4053 4074 4148 +3 3952 3887 3988 +3 3952 3988 4053 +3 3851 3774 3887 +3 3851 3887 3952 +3 3730 3647 3774 +3 3730 3774 3851 +3 3589 3513 3647 +3 3589 3647 3730 +3 3425 3352 3513 +3 3425 3513 3589 +3 3264 3195 3352 +3 3264 3352 3425 +3 3083 3035 3195 +3 3083 3195 3264 +3 2924 2884 3035 +3 2924 3035 3083 +3 2781 2736 2884 +3 2781 2884 2924 +3 2643 2596 2736 +3 2643 2736 2781 +3 2497 2460 2596 +3 2497 2596 2643 +3 2354 2324 2460 +3 2354 2460 2497 +3 2201 2182 2324 +3 2201 2324 2354 +3 2052 2039 2182 +3 2052 2182 2201 +3 1898 1886 2039 +3 1898 2039 2052 +3 1735 1727 1886 +3 1735 1886 1898 +3 1569 1727 1735 +3 1569 1717 1727 +3 1727 1717 1870 +3 1727 1870 1886 +3 1886 1870 2015 +3 1886 2015 2039 +3 2039 2015 2160 +3 2039 2160 2182 +3 2182 2160 2295 +3 2182 2295 2324 +3 2324 2295 2419 +3 2324 2419 2460 +3 2460 2419 2552 +3 2460 2552 2596 +3 2596 2552 2694 +3 2596 2694 2736 +3 2736 2694 2831 +3 2736 2831 2884 +3 2884 2831 2968 +3 2884 2968 3035 +3 3035 2968 3106 +3 3035 3106 3195 +3 3195 3106 3273 +3 3195 3273 3352 +3 3352 3273 3421 +3 3352 3421 3513 +3 3513 3421 3569 +3 3513 3569 3647 +3 3647 3569 3698 +3 3647 3698 3774 +3 3774 3698 3807 +3 3774 3807 3887 +3 3887 3807 3911 +3 3887 3911 3988 +3 3988 3911 4007 +3 3988 4007 4074 +3 4074 4007 4080 +3 4074 4080 4160 +3 4160 4080 4159 +3 4160 4159 4239 +3 4239 4159 4232 +3 4239 4232 4303 +3 4303 4232 4285 +3 4303 4285 4360 +3 4360 4285 4343 +3 4360 4343 4418 +3 4418 4343 4388 +3 4418 4388 4459 +3 4459 4388 4431 +3 4459 4431 4502 +3 4502 4431 4464 +3 4502 4464 4532 +3 4532 4464 4495 +3 4532 4495 4560 +3 4560 4495 4512 +3 4560 4512 4584 +3 4584 4512 4531 +3 4584 4531 4597 +3 4597 4531 4541 +3 4597 4541 4605 +3 4605 4541 4547 +3 4605 4547 4609 +3 4609 4547 4546 +3 4609 4546 4603 +3 4603 4546 4535 +3 4603 4535 4595 +3 4595 4535 4523 +3 4595 4523 4582 +3 4582 4523 4503 +3 4582 4503 4559 +3 4559 4503 4476 +3 4559 4476 4530 +3 4530 4476 4444 +3 4530 4444 4499 +3 4499 4444 4408 +3 4499 4408 4454 +3 4454 4408 4361 +3 4454 4361 4410 +3 4410 4361 4314 +3 4410 4314 4355 +3 4355 4314 4253 +3 4355 4253 4291 +3 4291 4253 4184 +3 4291 4184 4228 +3 4228 4184 4121 +3 4228 4121 4154 +3 4154 4121 4037 +3 4154 4037 4064 +3 4064 4037 3946 +3 4064 3946 3973 +3 3973 3946 3857 +3 3973 3857 3876 +3 3876 3857 3748 +3 3876 3748 3757 +3 3757 3748 3624 +3 3757 3624 3636 +3 3636 3624 3480 +3 3636 3480 3488 +3 3488 3480 3332 +3 3480 3471 3332 +3 3624 3610 3471 +3 3624 3471 3480 +3 3748 3731 3610 +3 3748 3610 3624 +3 3857 3826 3731 +3 3857 3731 3748 +3 3946 3920 3826 +3 3946 3826 3857 +3 4037 4008 3920 +3 4037 3920 3946 +3 4121 4076 4008 +3 4121 4008 4037 +3 4184 4152 4076 +3 4184 4076 4121 +3 4253 4209 4152 +3 4253 4152 4184 +3 4314 4261 4209 +3 4314 4209 4253 +3 4361 4315 4261 +3 4361 4261 4314 +3 4408 4349 4315 +3 4408 4315 4361 +3 4444 4385 4349 +3 4444 4349 4408 +3 4476 4423 4385 +3 4476 4385 4444 +3 4503 4439 4423 +3 4503 4423 4476 +3 4523 4457 4439 +3 4523 4439 4503 +3 4535 4470 4457 +3 4535 4457 4523 +3 4546 4475 4470 +3 4546 4470 4535 +3 4547 4474 4475 +3 4547 4475 4546 +3 4541 4469 4474 +3 4541 4474 4547 +3 4531 4456 4469 +3 4531 4469 4541 +3 4512 4438 4456 +3 4512 4456 4531 +3 4495 4420 4438 +3 4495 4438 4512 +3 4464 4384 4420 +3 4464 4420 4495 +3 4431 4348 4384 +3 4431 4384 4464 +3 4388 4312 4348 +3 4388 4348 4431 +3 4343 4260 4312 +3 4343 4312 4388 +3 4285 4206 4260 +3 4285 4260 4343 +3 4232 4150 4206 +3 4232 4206 4285 +3 4159 4073 4150 +3 4159 4150 4232 +3 4080 4004 4073 +3 4080 4073 4159 +3 4007 3918 4004 +3 4007 4004 4080 +3 3911 3822 3918 +3 3911 3918 4007 +3 3807 3725 3822 +3 3807 3822 3911 +3 3698 3608 3725 +3 3698 3725 3807 +3 3569 3466 3608 +3 3569 3608 3698 +3 3421 3327 3466 +3 3421 3466 3569 +3 3273 3188 3327 +3 3273 3327 3421 +3 3106 3037 3188 +3 3106 3188 3273 +3 2968 2896 3037 +3 2968 3037 3106 +3 2831 2760 2896 +3 2831 2896 2968 +3 2694 2647 2760 +3 2694 2760 2831 +3 2552 2512 2647 +3 2552 2647 2694 +3 2419 2384 2512 +3 2419 2512 2552 +3 2295 2250 2384 +3 2295 2384 2419 +3 2160 2135 2250 +3 2160 2250 2295 +3 2015 2001 2135 +3 2015 2135 2160 +3 1870 1861 2001 +3 1870 2001 2015 +3 1717 1708 1861 +3 1717 1861 1870 +3 1569 1708 1717 +3 1569 1704 1708 +3 1708 1704 1847 +3 1708 1847 1861 +3 1861 1847 1981 +3 1861 1981 2001 +3 2001 1981 2093 +3 2001 2093 2135 +3 2135 2093 2223 +3 2135 2223 2250 +3 2250 2223 2348 +3 2250 2348 2384 +3 2384 2348 2468 +3 2384 2468 2512 +3 2512 2468 2581 +3 2512 2581 2647 +3 2647 2581 2709 +3 2647 2709 2760 +3 2760 2709 2834 +3 2760 2834 2896 +3 2896 2834 2955 +3 2896 2955 3037 +3 3037 2955 3082 +3 3037 3082 3188 +3 3188 3082 3234 +3 3188 3234 3327 +3 3327 3234 3368 +3 3327 3368 3466 +3 3466 3368 3498 +3 3466 3498 3608 +3 3608 3498 3618 +3 3608 3618 3725 +3 3725 3618 3733 +3 3725 3733 3822 +3 3822 3733 3818 +3 3822 3818 3918 +3 3918 3818 3905 +3 3918 3905 4004 +3 4004 3905 3984 +3 4004 3984 4073 +3 4073 3984 4052 +3 4073 4052 4150 +3 4150 4052 4120 +3 4150 4120 4206 +3 4206 4120 4169 +3 4206 4169 4260 +3 4260 4169 4225 +3 4260 4225 4312 +3 4312 4225 4263 +3 4312 4263 4348 +3 4348 4263 4304 +3 4348 4304 4384 +3 4384 4304 4334 +3 4384 4334 4420 +3 4420 4334 4356 +3 4420 4356 4438 +3 4438 4356 4376 +3 4438 4376 4456 +3 4456 4376 4389 +3 4456 4389 4469 +3 4469 4389 4400 +3 4469 4400 4474 +3 4474 4400 4405 +3 4474 4405 4475 +3 4475 4405 4399 +3 4475 4399 4470 +3 4470 4399 4386 +3 4470 4386 4457 +3 4457 4386 4372 +3 4457 4372 4439 +3 4439 4372 4350 +3 4439 4350 4423 +3 4423 4350 4329 +3 4423 4329 4385 +3 4385 4329 4290 +3 4385 4290 4349 +3 4349 4290 4255 +3 4349 4255 4315 +3 4315 4255 4215 +3 4315 4215 4261 +3 4261 4215 4158 +3 4261 4158 4209 +3 4209 4158 4103 +3 4209 4103 4152 +3 4152 4103 4040 +3 4152 4040 4076 +3 4076 4040 3964 +3 4076 3964 4008 +3 4008 3964 3889 +3 4008 3889 3920 +3 3920 3889 3797 +3 3920 3797 3826 +3 3826 3797 3708 +3 3826 3708 3731 +3 3731 3708 3598 +3 3731 3598 3610 +3 3610 3598 3462 +3 3610 3462 3471 +3 3471 3462 3332 +3 3462 3452 3332 +3 3598 3580 3452 +3 3598 3452 3462 +3 3708 3674 3580 +3 3708 3580 3598 +3 3797 3766 3674 +3 3797 3674 3708 +3 3889 3858 3766 +3 3889 3766 3797 +3 3964 3925 3858 +3 3964 3858 3889 +3 4040 3996 3925 +3 4040 3925 3964 +3 4103 4050 3996 +3 4103 3996 4040 +3 4158 4109 4050 +3 4158 4050 4103 +3 4215 4156 4109 +3 4215 4109 4158 +3 4255 4187 4156 +3 4255 4156 4215 +3 4290 4235 4187 +3 4290 4187 4255 +3 4329 4257 4235 +3 4329 4235 4290 +3 4350 4277 4257 +3 4350 4257 4329 +3 4372 4301 4277 +3 4372 4277 4350 +3 4386 4318 4301 +3 4386 4301 4372 +3 4399 4322 4318 +3 4399 4318 4386 +3 4405 4323 4322 +3 4405 4322 4399 +3 4400 4319 4323 +3 4400 4323 4405 +3 4389 4306 4319 +3 4389 4319 4400 +3 4376 4286 4306 +3 4376 4306 4389 +3 4356 4266 4286 +3 4356 4286 4376 +3 4334 4246 4266 +3 4334 4266 4356 +3 4304 4208 4246 +3 4304 4246 4334 +3 4263 4167 4208 +3 4263 4208 4304 +3 4225 4129 4167 +3 4225 4167 4263 +3 4169 4070 4129 +3 4169 4129 4225 +3 4120 4020 4070 +3 4120 4070 4169 +3 4052 3948 4020 +3 4052 4020 4120 +3 3984 3883 3948 +3 3984 3948 4052 +3 3905 3799 3883 +3 3905 3883 3984 +3 3818 3718 3799 +3 3818 3799 3905 +3 3733 3614 3718 +3 3733 3718 3818 +3 3618 3503 3614 +3 3618 3614 3733 +3 3498 3381 3503 +3 3498 3503 3618 +3 3368 3255 3381 +3 3368 3381 3498 +3 3234 3110 3255 +3 3234 3255 3368 +3 3082 2999 3110 +3 3082 3110 3234 +3 2955 2877 2999 +3 2955 2999 3082 +3 2834 2752 2877 +3 2834 2877 2955 +3 2709 2650 2752 +3 2709 2752 2834 +3 2581 2532 2650 +3 2581 2650 2709 +3 2468 2410 2532 +3 2468 2532 2581 +3 2348 2303 2410 +3 2348 2410 2468 +3 2223 2187 2303 +3 2223 2303 2348 +3 2093 2064 2187 +3 2093 2187 2223 +3 1981 1955 2064 +3 1981 2064 2093 +3 1847 1829 1955 +3 1847 1955 1981 +3 1704 1691 1829 +3 1704 1829 1847 +3 1569 1691 1704 +3 1569 1683 1691 +3 1691 1683 1815 +3 1691 1815 1829 +3 1829 1815 1920 +3 1829 1920 1955 +3 1955 1920 2038 +3 1955 2038 2064 +3 2064 2038 2151 +3 2064 2151 2187 +3 2187 2151 2247 +3 2187 2247 2303 +3 2303 2247 2360 +3 2303 2360 2410 +3 2410 2360 2474 +3 2410 2474 2532 +3 2532 2474 2570 +3 2532 2570 2650 +3 2650 2570 2684 +3 2650 2684 2752 +3 2752 2684 2795 +3 2752 2795 2877 +3 2877 2795 2899 +3 2877 2899 2999 +3 2999 2899 3022 +3 2999 3022 3110 +3 3110 3022 3122 +3 3110 3122 3255 +3 3255 3122 3259 +3 3255 3259 3381 +3 3381 3259 3374 +3 3381 3374 3503 +3 3503 3374 3482 +3 3503 3482 3614 +3 3614 3482 3597 +3 3614 3597 3718 +3 3718 3597 3680 +3 3718 3680 3799 +3 3799 3680 3760 +3 3799 3760 3883 +3 3883 3760 3840 +3 3883 3840 3948 +3 3948 3840 3903 +3 3948 3903 4020 +3 4020 3903 3961 +3 4020 3961 4070 +3 4070 3961 4021 +3 4070 4021 4129 +3 4129 4021 4063 +3 4129 4063 4167 +3 4167 4063 4104 +3 4167 4104 4208 +3 4208 4104 4144 +3 4208 4144 4246 +3 4246 4144 4166 +3 4246 4166 4266 +3 4266 4166 4186 +3 4266 4186 4286 +3 4286 4186 4217 +3 4286 4217 4306 +3 4306 4217 4226 +3 4306 4226 4319 +3 4319 4226 4236 +3 4319 4236 4323 +3 4323 4236 4237 +3 4323 4237 4322 +3 4322 4237 4233 +3 4322 4233 4318 +3 4318 4233 4224 +3 4318 4224 4301 +3 4301 4224 4204 +3 4301 4204 4277 +3 4277 4204 4181 +3 4277 4181 4257 +3 4257 4181 4161 +3 4257 4161 4235 +3 4235 4161 4131 +3 4235 4131 4187 +3 4187 4131 4090 +3 4187 4090 4156 +3 4156 4090 4047 +3 4156 4047 4109 +3 4109 4047 4005 +3 4109 4005 4050 +3 4050 4005 3945 +3 4050 3945 3996 +3 3996 3945 3885 +3 3996 3885 3925 +3 3925 3885 3812 +3 3925 3812 3858 +3 3858 3812 3746 +3 3858 3746 3766 +3 3766 3746 3650 +3 3766 3650 3674 +3 3674 3650 3562 +3 3674 3562 3580 +3 3580 3562 3444 +3 3580 3444 3452 +3 3452 3444 3332 +3 3444 3432 3332 +3 3562 3545 3432 +3 3562 3432 3444 +3 3650 3626 3545 +3 3650 3545 3562 +3 3746 3711 3626 +3 3746 3626 3650 +3 3812 3773 3711 +3 3812 3711 3746 +3 3885 3837 3773 +3 3885 3773 3812 +3 3945 3895 3837 +3 3945 3837 3885 +3 4005 3942 3895 +3 4005 3895 3945 +3 4047 3990 3942 +3 4047 3942 4005 +3 4090 4025 3990 +3 4090 3990 4047 +3 4131 4057 4025 +3 4131 4025 4090 +3 4161 4081 4057 +3 4161 4057 4131 +3 4181 4108 4081 +3 4181 4081 4161 +3 4204 4127 4108 +3 4204 4108 4181 +3 4224 4132 4127 +3 4224 4127 4204 +3 4233 4138 4132 +3 4233 4132 4224 +3 4237 4139 4138 +3 4237 4138 4233 +3 4236 4133 4139 +3 4236 4139 4237 +3 4226 4128 4133 +3 4226 4133 4236 +3 4217 4111 4128 +3 4217 4128 4226 +3 4186 4082 4111 +3 4186 4111 4217 +3 4166 4059 4082 +3 4166 4082 4186 +3 4144 4030 4059 +3 4144 4059 4166 +3 4104 3993 4030 +3 4104 4030 4144 +3 4063 3947 3993 +3 4063 3993 4104 +3 4021 3898 3947 +3 4021 3947 4063 +3 3961 3847 3898 +3 3961 3898 4021 +3 3903 3778 3847 +3 3903 3847 3961 +3 3840 3717 3778 +3 3840 3778 3903 +3 3760 3635 3717 +3 3760 3717 3840 +3 3680 3551 3635 +3 3680 3635 3760 +3 3597 3445 3551 +3 3597 3551 3680 +3 3482 3343 3445 +3 3482 3445 3597 +3 3374 3240 3343 +3 3374 3343 3482 +3 3259 3113 3240 +3 3259 3240 3374 +3 3122 3021 3113 +3 3122 3113 3259 +3 3022 2907 3021 +3 3022 3021 3122 +3 2899 2813 2907 +3 2899 2907 3022 +3 2795 2708 2813 +3 2795 2813 2899 +3 2684 2603 2708 +3 2684 2708 2795 +3 2570 2509 2603 +3 2570 2603 2684 +3 2474 2401 2509 +3 2474 2509 2570 +3 2360 2307 2401 +3 2360 2401 2474 +3 2247 2204 2307 +3 2247 2307 2360 +3 2151 2100 2204 +3 2151 2204 2247 +3 2038 2007 2100 +3 2038 2100 2151 +3 1920 1893 2007 +3 1920 2007 2038 +3 1815 1797 1893 +3 1815 1893 1920 +3 1683 1672 1797 +3 1683 1797 1815 +3 1569 1672 1683 +3 1569 1662 1672 +3 1672 1662 1780 +3 1672 1780 1797 +3 1797 1780 1865 +3 1797 1865 1893 +3 1893 1865 1970 +3 1893 1970 2007 +3 2007 1970 2059 +3 2007 2059 2100 +3 2100 2059 2159 +3 2100 2159 2204 +3 2204 2159 2242 +3 2204 2242 2307 +3 2307 2242 2344 +3 2307 2344 2401 +3 2401 2344 2428 +3 2401 2428 2509 +3 2509 2428 2526 +3 2509 2526 2603 +3 2603 2526 2616 +3 2603 2616 2708 +3 2708 2616 2711 +3 2708 2711 2813 +3 2813 2711 2812 +3 2813 2812 2907 +3 2907 2812 2895 +3 2907 2895 3021 +3 3021 2895 3000 +3 3021 3000 3113 +3 3113 3000 3091 +3 3113 3091 3240 +3 3240 3091 3201 +3 3240 3201 3343 +3 3343 3201 3295 +3 3343 3295 3445 +3 3445 3295 3389 +3 3445 3389 3551 +3 3551 3389 3479 +3 3551 3479 3635 +3 3635 3479 3570 +3 3635 3570 3717 +3 3717 3570 3639 +3 3717 3639 3778 +3 3778 3639 3715 +3 3778 3715 3847 +3 3847 3715 3762 +3 3847 3762 3898 +3 3898 3762 3819 +3 3898 3819 3947 +3 3947 3819 3866 +3 3947 3866 3993 +3 3993 3866 3909 +3 3993 3909 4030 +3 4030 3909 3940 +3 4030 3940 4059 +3 4059 3940 3969 +3 4059 3969 4082 +3 4082 3969 3998 +3 4082 3998 4111 +3 4111 3998 4017 +3 4111 4017 4128 +3 4128 4017 4028 +3 4128 4028 4133 +3 4133 4028 4039 +3 4133 4039 4139 +3 4139 4039 4044 +3 4139 4044 4138 +3 4138 4044 4042 +3 4138 4042 4132 +3 4132 4042 4033 +3 4132 4033 4127 +3 4127 4033 4022 +3 4127 4022 4108 +3 4108 4022 4011 +3 4108 4011 4081 +3 4081 4011 3982 +3 4081 3982 4057 +3 4057 3982 3951 +3 4057 3951 4025 +3 4025 3951 3922 +3 4025 3922 3990 +3 3990 3922 3884 +3 3990 3884 3942 +3 3942 3884 3841 +3 3942 3841 3895 +3 3895 3841 3786 +3 3895 3786 3837 +3 3837 3786 3742 +3 3837 3742 3773 +3 3773 3742 3662 +3 3773 3662 3711 +3 3711 3662 3601 +3 3711 3601 3626 +3 3626 3601 3520 +3 3626 3520 3545 +3 3545 3520 3426 +3 3545 3426 3432 +3 3432 3426 3332 +3 3426 3415 3332 +3 3520 3494 3415 +3 3520 3415 3426 +3 3601 3568 3494 +3 3601 3494 3520 +3 3662 3630 3568 +3 3662 3568 3601 +3 3742 3683 3630 +3 3742 3630 3662 +3 3786 3743 3683 +3 3786 3683 3742 +3 3841 3777 3743 +3 3841 3743 3786 +3 3884 3814 3777 +3 3884 3777 3841 +3 3922 3856 3814 +3 3922 3814 3884 +3 3951 3879 3856 +3 3951 3856 3922 +3 3982 3899 3879 +3 3982 3879 3951 +3 4011 3919 3899 +3 4011 3899 3982 +3 4022 3928 3919 +3 4022 3919 4011 +3 4033 3934 3928 +3 4033 3928 4022 +3 4042 3936 3934 +3 4042 3934 4033 +3 4044 3933 3936 +3 4044 3936 4042 +3 4039 3926 3933 +3 4039 3933 4044 +3 4028 3915 3926 +3 4028 3926 4039 +3 4017 3897 3915 +3 4017 3915 4028 +3 3998 3875 3897 +3 3998 3897 4017 +3 3969 3850 3875 +3 3969 3875 3998 +3 3940 3809 3850 +3 3940 3850 3969 +3 3909 3769 3809 +3 3909 3809 3940 +3 3866 3737 3769 +3 3866 3769 3909 +3 3819 3673 3737 +3 3819 3737 3866 +3 3762 3620 3673 +3 3762 3673 3819 +3 3715 3559 3620 +3 3715 3620 3762 +3 3639 3477 3559 +3 3639 3559 3715 +3 3570 3401 3477 +3 3570 3477 3639 +3 3479 3317 3401 +3 3479 3401 3570 +3 3389 3235 3317 +3 3389 3317 3479 +3 3295 3132 3235 +3 3295 3235 3389 +3 3201 3049 3132 +3 3201 3132 3295 +3 3091 2958 3049 +3 3091 3049 3201 +3 3000 2872 2958 +3 3000 2958 3091 +3 2895 2785 2872 +3 2895 2872 3000 +3 2812 2701 2785 +3 2812 2785 2895 +3 2711 2610 2701 +3 2711 2701 2812 +3 2616 2531 2610 +3 2616 2610 2711 +3 2526 2442 2531 +3 2526 2531 2616 +3 2428 2357 2442 +3 2428 2442 2526 +3 2344 2271 2357 +3 2344 2357 2428 +3 2242 2188 2271 +3 2242 2271 2344 +3 2159 2094 2188 +3 2159 2188 2242 +3 2059 2014 2094 +3 2059 2094 2159 +3 1970 1923 2014 +3 1970 2014 2059 +3 1865 1837 1923 +3 1865 1923 1970 +3 1780 1744 1837 +3 1780 1837 1865 +3 1662 1655 1744 +3 1662 1744 1780 +3 1569 1655 1662 +3 1569 1640 1655 +3 1655 1640 1721 +3 1655 1721 1744 +3 1744 1721 1808 +3 1744 1808 1837 +3 1837 1808 1881 +3 1837 1881 1923 +3 1923 1881 1971 +3 1923 1971 2014 +3 2014 1971 2044 +3 2014 2044 2094 +3 2094 2044 2127 +3 2094 2127 2188 +3 2188 2127 2199 +3 2188 2199 2271 +3 2271 2199 2281 +3 2271 2281 2357 +3 2357 2281 2358 +3 2357 2358 2442 +3 2442 2358 2431 +3 2442 2431 2531 +3 2531 2431 2516 +3 2531 2516 2610 +3 2610 2516 2590 +3 2610 2590 2701 +3 2701 2590 2671 +3 2701 2671 2785 +3 2785 2671 2745 +3 2785 2745 2872 +3 2872 2745 2832 +3 2872 2832 2958 +3 2958 2832 2903 +3 2958 2903 3049 +3 3049 2903 2990 +3 3049 2990 3132 +3 3132 2990 3065 +3 3132 3065 3235 +3 3235 3065 3146 +3 3235 3146 3317 +3 3317 3146 3233 +3 3317 3233 3401 +3 3401 3233 3302 +3 3401 3302 3477 +3 3477 3302 3379 +3 3477 3379 3559 +3 3559 3379 3443 +3 3559 3443 3620 +3 3620 3443 3516 +3 3620 3516 3673 +3 3673 3516 3574 +3 3673 3574 3737 +3 3737 3574 3622 +3 3737 3622 3769 +3 3769 3622 3658 +3 3769 3658 3809 +3 3809 3658 3710 +3 3809 3710 3850 +3 3850 3710 3744 +3 3850 3744 3875 +3 3875 3744 3761 +3 3875 3761 3897 +3 3897 3761 3784 +3 3897 3784 3915 +3 3915 3784 3803 +3 3915 3803 3926 +3 3926 3803 3815 +3 3926 3815 3933 +3 3933 3815 3828 +3 3933 3828 3936 +3 3936 3828 3833 +3 3936 3833 3934 +3 3934 3833 3830 +3 3934 3830 3928 +3 3928 3830 3820 +3 3928 3820 3919 +3 3919 3820 3808 +3 3919 3808 3899 +3 3899 3808 3793 +3 3899 3793 3879 +3 3879 3793 3771 +3 3879 3771 3856 +3 3856 3771 3750 +3 3856 3750 3814 +3 3814 3750 3723 +3 3814 3723 3777 +3 3777 3723 3678 +3 3777 3678 3743 +3 3743 3678 3637 +3 3743 3637 3683 +3 3683 3637 3596 +3 3683 3596 3630 +3 3630 3596 3542 +3 3630 3542 3568 +3 3568 3542 3467 +3 3568 3467 3494 +3 3494 3467 3406 +3 3494 3406 3415 +3 3415 3406 3332 +3 3406 3392 3332 +3 3467 3446 3392 +3 3467 3392 3406 +3 3542 3500 3446 +3 3542 3446 3467 +3 3596 3552 3500 +3 3596 3500 3542 +3 3637 3591 3552 +3 3637 3552 3596 +3 3678 3623 3591 +3 3678 3591 3637 +3 3723 3646 3623 +3 3723 3623 3678 +3 3750 3668 3646 +3 3750 3646 3723 +3 3771 3693 3668 +3 3771 3668 3750 +3 3793 3714 3693 +3 3793 3693 3771 +3 3808 3721 3714 +3 3808 3714 3793 +3 3820 3726 3721 +3 3820 3721 3808 +3 3830 3724 3726 +3 3830 3726 3820 +3 3833 3720 3724 +3 3833 3724 3830 +3 3828 3713 3720 +3 3828 3720 3833 +3 3815 3691 3713 +3 3815 3713 3828 +3 3803 3666 3691 +3 3803 3691 3815 +3 3784 3644 3666 +3 3784 3666 3803 +3 3761 3617 3644 +3 3761 3644 3784 +3 3744 3588 3617 +3 3744 3617 3761 +3 3710 3549 3588 +3 3710 3588 3744 +3 3658 3496 3549 +3 3658 3549 3710 +3 3622 3440 3496 +3 3622 3496 3658 +3 3574 3387 3440 +3 3574 3440 3622 +3 3516 3325 3387 +3 3516 3387 3574 +3 3443 3268 3325 +3 3443 3325 3516 +3 3379 3198 3268 +3 3379 3268 3443 +3 3302 3112 3198 +3 3302 3198 3379 +3 3233 3051 3112 +3 3233 3112 3302 +3 3146 2986 3051 +3 3146 3051 3233 +3 3065 2906 2986 +3 3065 2986 3146 +3 2990 2841 2906 +3 2990 2906 3065 +3 2903 2759 2841 +3 2903 2841 2990 +3 2832 2699 2759 +3 2832 2759 2903 +3 2745 2629 2699 +3 2745 2699 2832 +3 2671 2548 2629 +3 2671 2629 2745 +3 2590 2487 2548 +3 2590 2548 2671 +3 2516 2406 2487 +3 2516 2487 2590 +3 2431 2345 2406 +3 2431 2406 2516 +3 2358 2266 2345 +3 2358 2345 2431 +3 2281 2196 2266 +3 2281 2266 2358 +3 2199 2132 2196 +3 2199 2196 2281 +3 2127 2054 2132 +3 2127 2132 2199 +3 2044 1987 2054 +3 2044 2054 2127 +3 1971 1907 1987 +3 1971 1987 2044 +3 1881 1846 1907 +3 1881 1907 1971 +3 1808 1782 1846 +3 1808 1846 1881 +3 1721 1694 1782 +3 1721 1782 1808 +3 1640 1630 1694 +3 1640 1694 1721 +3 1569 1630 1640 +3 1569 1617 1630 +3 1630 1617 1673 +3 1630 1673 1694 +3 1694 1673 1734 +3 1694 1734 1782 +3 1782 1734 1803 +3 1782 1803 1846 +3 1846 1803 1862 +3 1846 1862 1907 +3 1907 1862 1919 +3 1907 1919 1987 +3 1987 1919 1989 +3 1987 1989 2054 +3 2054 1989 2049 +3 2054 2049 2132 +3 2132 2049 2114 +3 2132 2114 2196 +3 2196 2114 2181 +3 2196 2181 2266 +3 2266 2181 2239 +3 2266 2239 2345 +3 2345 2239 2310 +3 2345 2310 2406 +3 2406 2310 2371 +3 2406 2371 2487 +3 2487 2371 2436 +3 2487 2436 2548 +3 2548 2436 2508 +3 2548 2508 2629 +3 2629 2508 2562 +3 2629 2562 2699 +3 2699 2562 2640 +3 2699 2640 2759 +3 2759 2640 2698 +3 2759 2698 2841 +3 2841 2698 2754 +3 2841 2754 2906 +3 2906 2754 2830 +3 2906 2830 2986 +3 2986 2830 2888 +3 2986 2888 3051 +3 3051 2888 2947 +3 3051 2947 3112 +3 3112 2947 3019 +3 3112 3019 3198 +3 3198 3019 3073 +3 3198 3073 3268 +3 3268 3073 3136 +3 3268 3136 3325 +3 3325 3136 3209 +3 3325 3209 3387 +3 3387 3209 3262 +3 3387 3262 3440 +3 3440 3262 3312 +3 3440 3312 3496 +3 3496 3312 3365 +3 3496 3365 3549 +3 3549 3365 3410 +3 3549 3410 3588 +3 3588 3410 3447 +3 3588 3447 3617 +3 3617 3447 3483 +3 3617 3483 3644 +3 3644 3483 3524 +3 3644 3524 3666 +3 3666 3524 3553 +3 3666 3553 3691 +3 3691 3553 3573 +3 3691 3573 3713 +3 3713 3573 3592 +3 3713 3592 3720 +3 3720 3592 3602 +3 3720 3602 3724 +3 3724 3602 3611 +3 3724 3611 3726 +3 3726 3611 3613 +3 3726 3613 3721 +3 3721 3613 3612 +3 3721 3612 3714 +3 3714 3612 3606 +3 3714 3606 3693 +3 3693 3606 3599 +3 3693 3599 3668 +3 3668 3599 3583 +3 3668 3583 3646 +3 3646 3583 3563 +3 3646 3563 3623 +3 3623 3563 3540 +3 3623 3540 3591 +3 3591 3540 3501 +3 3591 3501 3552 +3 3552 3501 3459 +3 3552 3459 3500 +3 3500 3459 3424 +3 3500 3424 3446 +3 3446 3424 3382 +3 3446 3382 3392 +3 3392 3382 3332 +3 3382 3371 3332 +3 3424 3403 3371 +3 3424 3371 3382 +3 3459 3428 3403 +3 3459 3403 3424 +3 3501 3448 3428 +3 3501 3428 3459 +3 3540 3469 3448 +3 3540 3448 3501 +3 3563 3485 3469 +3 3563 3469 3540 +3 3583 3499 3485 +3 3583 3485 3563 +3 3599 3509 3499 +3 3599 3499 3583 +3 3606 3510 3509 +3 3606 3509 3599 +3 3612 3505 3510 +3 3612 3510 3606 +3 3613 3493 3505 +3 3613 3505 3612 +3 3611 3478 3493 +3 3611 3493 3613 +3 3602 3458 3478 +3 3602 3478 3611 +3 3592 3437 3458 +3 3592 3458 3602 +3 3573 3418 3437 +3 3573 3437 3592 +3 3553 3385 3418 +3 3553 3418 3573 +3 3524 3356 3385 +3 3524 3385 3553 +3 3483 3314 3356 +3 3483 3356 3524 +3 3447 3277 3314 +3 3447 3314 3483 +3 3410 3231 3277 +3 3410 3277 3447 +3 3365 3179 3231 +3 3365 3231 3410 +3 3312 3114 3179 +3 3312 3179 3365 +3 3262 3067 3114 +3 3262 3114 3312 +3 3209 3024 3067 +3 3209 3067 3262 +3 3136 2961 3024 +3 3136 3024 3209 +3 3073 2901 2961 +3 3073 2961 3136 +3 3019 2850 2901 +3 3019 2901 3073 +3 2947 2791 2850 +3 2947 2850 3019 +3 2888 2731 2791 +3 2888 2791 2947 +3 2830 2675 2731 +3 2830 2731 2888 +3 2754 2612 2675 +3 2754 2675 2830 +3 2698 2550 2612 +3 2698 2612 2754 +3 2640 2501 2550 +3 2640 2550 2698 +3 2562 2434 2501 +3 2562 2501 2640 +3 2508 2378 2434 +3 2508 2434 2562 +3 2436 2323 2378 +3 2436 2378 2508 +3 2371 2253 2323 +3 2371 2323 2436 +3 2310 2198 2253 +3 2310 2253 2371 +3 2239 2148 2198 +3 2239 2198 2310 +3 2181 2078 2148 +3 2181 2148 2239 +3 2114 2026 2078 +3 2114 2078 2181 +3 2049 1978 2026 +3 2049 2026 2114 +3 1989 1908 1978 +3 1989 1978 2049 +3 1919 1860 1908 +3 1919 1908 1989 +3 1862 1809 1860 +3 1862 1860 1919 +3 1803 1750 1809 +3 1803 1809 1862 +3 1734 1695 1750 +3 1734 1750 1803 +3 1673 1650 1695 +3 1673 1695 1734 +3 1617 1611 1650 +3 1617 1650 1673 +3 1569 1611 1617 +3 1569 1600 1611 +3 1611 1600 1625 +3 1611 1625 1650 +3 1650 1625 1660 +3 1650 1660 1695 +3 1695 1660 1699 +3 1695 1699 1750 +3 1750 1699 1745 +3 1750 1745 1809 +3 1809 1745 1799 +3 1809 1799 1860 +3 1860 1799 1839 +3 1860 1839 1908 +3 1908 1839 1884 +3 1908 1884 1978 +3 1978 1884 1937 +3 1978 1937 2026 +3 2026 1937 1988 +3 2026 1988 2078 +3 2078 1988 2041 +3 2078 2041 2148 +3 2148 2041 2081 +3 2148 2081 2198 +3 2198 2081 2150 +3 2198 2150 2253 +3 2253 2150 2195 +3 2253 2195 2323 +3 2323 2195 2244 +3 2323 2244 2378 +3 2378 2244 2306 +3 2378 2306 2434 +3 2434 2306 2359 +3 2434 2359 2501 +3 2501 2359 2409 +3 2501 2409 2550 +3 2550 2409 2475 +3 2550 2475 2612 +3 2612 2475 2525 +3 2612 2525 2675 +3 2675 2525 2571 +3 2675 2571 2731 +3 2731 2571 2641 +3 2731 2641 2791 +3 2791 2641 2688 +3 2791 2688 2850 +3 2850 2688 2738 +3 2850 2738 2901 +3 2901 2738 2796 +3 2901 2796 2961 +3 2961 2796 2848 +3 2961 2848 3024 +3 3024 2848 2892 +3 3024 2892 3067 +3 3067 2892 2940 +3 3067 2940 3114 +3 3114 2940 3001 +3 3114 3001 3179 +3 3179 3001 3046 +3 3179 3046 3231 +3 3231 3046 3089 +3 3231 3089 3277 +3 3277 3089 3135 +3 3277 3135 3314 +3 3314 3135 3190 +3 3314 3190 3356 +3 3356 3190 3227 +3 3356 3227 3385 +3 3385 3227 3267 +3 3385 3267 3418 +3 3418 3267 3292 +3 3418 3292 3437 +3 3437 3292 3322 +3 3437 3322 3458 +3 3458 3322 3350 +3 3458 3350 3478 +3 3478 3350 3373 +3 3478 3373 3493 +3 3493 3373 3386 +3 3493 3386 3505 +3 3505 3386 3405 +3 3505 3405 3510 +3 3510 3405 3411 +3 3510 3411 3509 +3 3509 3411 3416 +3 3509 3416 3499 +3 3499 3416 3417 +3 3499 3417 3485 +3 3485 3417 3413 +3 3485 3413 3469 +3 3469 3413 3407 +3 3469 3407 3448 +3 3448 3407 3394 +3 3448 3394 3428 +3 3428 3394 3377 +3 3428 3377 3403 +3 3403 3377 3362 +3 3403 3362 3371 +3 3371 3362 3332 +3 3362 3345 3332 +3 3377 3353 3345 +3 3377 3345 3362 +3 3394 3360 3353 +3 3394 3353 3377 +3 3407 3361 3360 +3 3407 3360 3394 +3 3413 3355 3361 +3 3413 3361 3407 +3 3417 3346 3355 +3 3417 3355 3413 +3 3416 3333 3346 +3 3416 3346 3417 +3 3411 3316 3333 +3 3411 3333 3416 +3 3405 3297 3316 +3 3405 3316 3411 +3 3386 3280 3297 +3 3386 3297 3405 +3 3373 3249 3280 +3 3373 3280 3386 +3 3350 3220 3249 +3 3350 3249 3373 +3 3322 3187 3220 +3 3322 3220 3350 +3 3292 3144 3187 +3 3292 3187 3322 +3 3267 3100 3144 +3 3267 3144 3292 +3 3227 3060 3100 +3 3227 3100 3267 +3 3190 3026 3060 +3 3190 3060 3227 +3 3135 2976 3026 +3 3135 3026 3190 +3 3089 2921 2976 +3 3089 2976 3135 +3 3046 2880 2921 +3 3046 2921 3089 +3 3001 2837 2880 +3 3001 2880 3046 +3 2940 2783 2837 +3 2940 2837 3001 +3 2892 2733 2783 +3 2892 2783 2940 +3 2848 2683 2733 +3 2848 2733 2892 +3 2796 2637 2683 +3 2796 2683 2848 +3 2738 2575 2637 +3 2738 2637 2796 +3 2688 2533 2575 +3 2688 2575 2738 +3 2641 2481 2533 +3 2641 2533 2688 +3 2571 2422 2481 +3 2571 2481 2641 +3 2525 2372 2422 +3 2525 2422 2571 +3 2475 2329 2372 +3 2475 2372 2525 +3 2409 2268 2329 +3 2409 2329 2475 +3 2359 2220 2268 +3 2359 2268 2409 +3 2306 2171 2220 +3 2306 2220 2359 +3 2244 2121 2171 +3 2244 2171 2306 +3 2195 2068 2121 +3 2195 2121 2244 +3 2150 2022 2068 +3 2150 2068 2195 +3 2081 1982 2022 +3 2081 2022 2150 +3 2041 1927 1982 +3 2041 1982 2081 +3 1988 1876 1927 +3 1988 1927 2041 +3 1937 1843 1876 +3 1937 1876 1988 +3 1884 1802 1843 +3 1884 1843 1937 +3 1839 1760 1802 +3 1839 1802 1884 +3 1799 1716 1760 +3 1799 1760 1839 +3 1745 1682 1716 +3 1745 1716 1799 +3 1699 1654 1682 +3 1699 1682 1745 +3 1660 1622 1654 +3 1660 1654 1699 +3 1625 1605 1622 +3 1625 1622 1660 +3 1600 1586 1605 +3 1600 1605 1625 +3 1569 1586 1600 +3 1569 1573 1586 +3 1586 1573 1581 +3 1586 1581 1605 +3 1605 1581 1592 +3 1605 1592 1622 +3 1622 1592 1608 +3 1622 1608 1654 +3 1654 1608 1620 +3 1654 1620 1682 +3 1682 1620 1644 +3 1682 1644 1716 +3 1716 1644 1671 +3 1716 1671 1760 +3 1760 1671 1702 +3 1760 1702 1802 +3 1802 1702 1736 +3 1802 1736 1843 +3 1843 1736 1785 +3 1843 1785 1876 +3 1876 1785 1822 +3 1876 1822 1927 +3 1927 1822 1853 +3 1927 1853 1982 +3 1982 1853 1892 +3 1982 1892 2022 +3 2022 1892 1939 +3 2022 1939 2068 +3 2068 1939 1985 +3 2068 1985 2121 +3 2121 1985 2030 +3 2121 2030 2171 +3 2171 2030 2072 +3 2171 2072 2220 +3 2220 2072 2128 +3 2220 2128 2268 +3 2268 2128 2174 +3 2268 2174 2329 +3 2329 2174 2221 +3 2329 2221 2372 +3 2372 2221 2269 +3 2372 2269 2422 +3 2422 2269 2328 +3 2422 2328 2481 +3 2481 2328 2366 +3 2481 2366 2533 +3 2533 2366 2418 +3 2533 2418 2575 +3 2575 2418 2477 +3 2575 2477 2637 +3 2637 2477 2524 +3 2637 2524 2683 +3 2683 2524 2568 +3 2683 2568 2733 +3 2733 2568 2623 +3 2733 2623 2783 +3 2783 2623 2674 +3 2783 2674 2837 +3 2837 2674 2721 +3 2837 2721 2880 +3 2880 2721 2764 +3 2880 2764 2921 +3 2921 2764 2825 +3 2921 2825 2976 +3 2976 2825 2864 +3 2976 2864 3026 +3 3026 2864 2909 +3 3026 2909 3060 +3 3060 2909 2953 +3 3060 2953 3100 +3 3100 2953 3004 +3 3100 3004 3144 +3 3144 3004 3043 +3 3144 3043 3187 +3 3187 3043 3075 +3 3187 3075 3220 +3 3220 3075 3111 +3 3220 3111 3249 +3 3249 3111 3161 +3 3249 3161 3280 +3 3280 3161 3196 +3 3280 3196 3297 +3 3297 3196 3226 +3 3297 3226 3316 +3 3316 3226 3253 +3 3316 3253 3333 +3 3333 3253 3278 +3 3333 3278 3346 +3 3346 3278 3291 +3 3346 3291 3355 +3 3355 3291 3307 +3 3355 3307 3361 +3 3361 3307 3319 +3 3361 3319 3360 +3 3360 3319 3326 +3 3360 3326 3353 +3 3353 3326 3331 +3 3353 3331 3345 +3 3345 3331 3332 +3 3331 3318 3332 +3 3326 3300 3318 +3 3326 3318 3331 +3 3319 3286 3300 +3 3319 3300 3326 +3 3307 3263 3286 +3 3307 3286 3319 +3 3291 3237 3263 +3 3291 3263 3307 +3 3278 3208 3237 +3 3278 3237 3291 +3 3253 3170 3208 +3 3253 3208 3278 +3 3226 3117 3170 +3 3226 3170 3253 +3 3196 3081 3117 +3 3196 3117 3226 +3 3161 3047 3081 +3 3161 3081 3196 +3 3111 3007 3047 +3 3111 3047 3161 +3 3075 2959 3007 +3 3075 3007 3111 +3 3043 2911 2959 +3 3043 2959 3075 +3 3004 2866 2911 +3 3004 2911 3043 +3 2953 2826 2866 +3 2953 2866 3004 +3 2909 2763 2826 +3 2909 2826 2953 +3 2864 2718 2763 +3 2864 2763 2909 +3 2825 2673 2718 +3 2825 2718 2864 +3 2764 2618 2673 +3 2764 2673 2825 +3 2721 2566 2618 +3 2721 2618 2764 +3 2674 2520 2566 +3 2674 2566 2721 +3 2623 2471 2520 +3 2623 2520 2674 +3 2568 2413 2471 +3 2568 2471 2623 +3 2524 2362 2413 +3 2524 2413 2568 +3 2477 2317 2362 +3 2477 2362 2524 +3 2418 2256 2317 +3 2418 2317 2477 +3 2366 2211 2256 +3 2366 2256 2418 +3 2328 2166 2211 +3 2328 2211 2366 +3 2269 2113 2166 +3 2269 2166 2328 +3 2221 2062 2113 +3 2221 2113 2269 +3 2174 2016 2062 +3 2174 2062 2221 +3 2128 1979 2016 +3 2128 2016 2174 +3 2072 1924 1979 +3 2072 1979 2128 +3 2030 1874 1924 +3 2030 1924 2072 +3 1985 1842 1874 +3 1985 1874 2030 +3 1939 1804 1842 +3 1939 1842 1985 +3 1892 1762 1804 +3 1892 1804 1939 +3 1853 1718 1762 +3 1853 1762 1892 +3 1822 1684 1718 +3 1822 1718 1853 +3 1785 1657 1684 +3 1785 1684 1822 +3 1736 1631 1657 +3 1736 1657 1785 +3 1702 1612 1631 +3 1702 1631 1736 +3 1671 1593 1612 +3 1671 1612 1702 +3 1644 1578 1593 +3 1644 1593 1671 +3 1620 1565 1578 +3 1620 1578 1644 +3 1608 1559 1565 +3 1608 1565 1620 +3 1592 1552 1559 +3 1592 1559 1608 +3 1581 1554 1552 +3 1581 1552 1592 +3 1573 1561 1554 +3 1573 1554 1581 +3 1569 1561 1573 +3 1569 1544 1561 +3 1561 1544 1529 +3 1561 1529 1554 +3 1554 1529 1518 +3 1554 1518 1552 +3 1552 1518 1511 +3 1552 1511 1559 +3 1559 1511 1503 +3 1559 1503 1565 +3 1565 1503 1502 +3 1565 1502 1578 +3 1578 1502 1510 +3 1578 1510 1593 +3 1593 1510 1517 +3 1593 1517 1612 +3 1612 1517 1526 +3 1612 1526 1631 +3 1631 1526 1542 +3 1631 1542 1657 +3 1657 1542 1564 +3 1657 1564 1684 +3 1684 1564 1590 +3 1684 1590 1718 +3 1718 1590 1613 +3 1718 1613 1762 +3 1762 1613 1647 +3 1762 1647 1804 +3 1804 1647 1680 +3 1804 1680 1842 +3 1842 1680 1720 +3 1842 1720 1874 +3 1874 1720 1775 +3 1874 1775 1924 +3 1924 1775 1817 +3 1924 1817 1979 +3 1979 1817 1856 +3 1979 1856 2016 +3 2016 1856 1899 +3 2016 1899 2062 +3 2062 1899 1956 +3 2062 1956 2113 +3 2113 1956 2003 +3 2113 2003 2166 +3 2166 2003 2048 +3 2166 2048 2211 +3 2211 2048 2096 +3 2211 2096 2256 +3 2256 2096 2158 +3 2256 2158 2317 +3 2317 2158 2205 +3 2317 2205 2362 +3 2362 2205 2252 +3 2362 2252 2413 +3 2413 2252 2314 +3 2413 2314 2471 +3 2471 2314 2364 +3 2471 2364 2520 +3 2520 2364 2417 +3 2520 2417 2566 +3 2566 2417 2478 +3 2566 2478 2618 +3 2618 2478 2527 +3 2618 2527 2673 +3 2673 2527 2576 +3 2673 2576 2718 +3 2718 2576 2642 +3 2718 2642 2763 +3 2763 2642 2689 +3 2763 2689 2826 +3 2826 2689 2737 +3 2826 2737 2866 +3 2866 2737 2793 +3 2866 2793 2911 +3 2911 2793 2844 +3 2911 2844 2959 +3 2959 2844 2891 +3 2959 2891 3007 +3 3007 2891 2934 +3 3007 2934 3047 +3 3047 2934 2996 +3 3047 2996 3081 +3 3081 2996 3038 +3 3081 3038 3117 +3 3117 3038 3077 +3 3117 3077 3170 +3 3170 3077 3118 +3 3170 3118 3208 +3 3208 3118 3175 +3 3208 3175 3237 +3 3237 3175 3215 +3 3237 3215 3263 +3 3263 3215 3250 +3 3263 3250 3286 +3 3286 3250 3283 +3 3286 3283 3300 +3 3300 3283 3306 +3 3300 3306 3318 +3 3318 3306 3332 +3 3306 3294 3332 +3 3283 3260 3294 +3 3283 3294 3306 +3 3250 3214 3260 +3 3250 3260 3283 +3 3215 3164 3214 +3 3215 3214 3250 +3 3175 3103 3164 +3 3175 3164 3215 +3 3118 3057 3103 +3 3118 3103 3175 +3 3077 3011 3057 +3 3077 3057 3118 +3 3038 2950 3011 +3 3038 3011 3077 +3 2996 2893 2950 +3 2996 2950 3038 +3 2934 2845 2893 +3 2934 2893 2996 +3 2891 2789 2845 +3 2891 2845 2934 +3 2844 2729 2789 +3 2844 2789 2891 +3 2793 2676 2729 +3 2793 2729 2844 +3 2737 2614 2676 +3 2737 2676 2793 +3 2689 2554 2614 +3 2689 2614 2737 +3 2642 2504 2554 +3 2642 2554 2689 +3 2576 2443 2504 +3 2576 2504 2642 +3 2527 2383 2443 +3 2527 2443 2576 +3 2478 2332 2383 +3 2478 2383 2527 +3 2417 2265 2332 +3 2417 2332 2478 +3 2364 2209 2265 +3 2364 2265 2417 +3 2314 2161 2209 +3 2314 2209 2364 +3 2252 2091 2161 +3 2252 2161 2314 +3 2205 2042 2091 +3 2205 2091 2252 +3 2158 1991 2042 +3 2158 2042 2205 +3 2096 1931 1991 +3 2096 1991 2158 +3 2048 1872 1931 +3 2048 1931 2096 +3 2003 1832 1872 +3 2003 1872 2048 +3 1956 1786 1832 +3 1956 1832 2003 +3 1899 1723 1786 +3 1899 1786 1956 +3 1856 1676 1723 +3 1856 1723 1899 +3 1817 1632 1676 +3 1817 1676 1856 +3 1775 1596 1632 +3 1775 1632 1817 +3 1720 1560 1596 +3 1720 1596 1775 +3 1680 1525 1560 +3 1680 1560 1720 +3 1647 1497 1525 +3 1647 1525 1680 +3 1613 1478 1497 +3 1613 1497 1647 +3 1590 1462 1478 +3 1590 1478 1613 +3 1564 1447 1462 +3 1564 1462 1590 +3 1542 1436 1447 +3 1542 1447 1564 +3 1526 1427 1436 +3 1526 1436 1542 +3 1517 1426 1427 +3 1517 1427 1526 +3 1510 1428 1426 +3 1510 1426 1517 +3 1502 1437 1428 +3 1502 1428 1510 +3 1503 1450 1437 +3 1503 1437 1502 +3 1511 1467 1450 +3 1511 1450 1503 +3 1518 1481 1467 +3 1518 1467 1511 +3 1529 1506 1481 +3 1529 1481 1518 +3 1544 1532 1506 +3 1544 1506 1529 +3 1569 1532 1544 +3 1569 1523 1532 +3 1532 1523 1482 +3 1532 1482 1506 +3 1506 1482 1451 +3 1506 1451 1481 +3 1481 1451 1417 +3 1481 1417 1467 +3 1467 1417 1382 +3 1467 1382 1450 +3 1450 1382 1355 +3 1450 1355 1437 +3 1437 1355 1341 +3 1437 1341 1428 +3 1428 1341 1330 +3 1428 1330 1426 +3 1426 1330 1319 +3 1426 1319 1427 +3 1427 1319 1314 +3 1427 1314 1436 +3 1436 1314 1316 +3 1436 1316 1447 +3 1447 1316 1325 +3 1447 1325 1462 +3 1462 1325 1335 +3 1462 1335 1478 +3 1478 1335 1347 +3 1478 1347 1497 +3 1497 1347 1363 +3 1497 1363 1525 +3 1525 1363 1394 +3 1525 1394 1560 +3 1560 1394 1431 +3 1560 1431 1596 +3 1596 1431 1468 +3 1596 1468 1632 +3 1632 1468 1501 +3 1632 1501 1676 +3 1676 1501 1538 +3 1676 1538 1723 +3 1723 1538 1591 +3 1723 1591 1786 +3 1786 1591 1636 +3 1786 1636 1832 +3 1832 1636 1690 +3 1832 1690 1872 +3 1872 1690 1752 +3 1872 1752 1931 +3 1931 1752 1821 +3 1931 1821 1991 +3 1991 1821 1868 +3 1991 1868 2042 +3 2042 1868 1932 +3 2042 1932 2091 +3 2091 1932 1999 +3 2091 1999 2161 +3 2161 1999 2055 +3 2161 2055 2209 +3 2209 2055 2119 +3 2209 2119 2265 +3 2265 2119 2186 +3 2265 2186 2332 +3 2332 2186 2240 +3 2332 2240 2383 +3 2383 2240 2308 +3 2383 2308 2443 +3 2443 2308 2365 +3 2443 2365 2504 +3 2504 2365 2429 +3 2504 2429 2554 +3 2554 2429 2502 +3 2554 2502 2614 +3 2614 2502 2555 +3 2614 2555 2676 +3 2676 2555 2621 +3 2676 2621 2729 +3 2729 2621 2687 +3 2729 2687 2789 +3 2789 2687 2744 +3 2789 2744 2845 +3 2845 2744 2817 +3 2845 2817 2893 +3 2893 2817 2873 +3 2893 2873 2950 +3 2950 2873 2928 +3 2950 2928 3011 +3 3011 2928 2998 +3 3011 2998 3057 +3 3057 2998 3052 +3 3057 3052 3103 +3 3103 3052 3107 +3 3103 3107 3164 +3 3164 3107 3177 +3 3164 3177 3214 +3 3214 3177 3236 +3 3214 3236 3260 +3 3260 3236 3287 +3 3260 3287 3294 +3 3294 3287 3332 +3 3287 3274 3332 +3 3236 3213 3274 +3 3236 3274 3287 +3 3177 3133 3213 +3 3177 3213 3236 +3 3107 3066 3133 +3 3107 3133 3177 +3 3052 3005 3066 +3 3052 3066 3107 +3 2998 2925 3005 +3 2998 3005 3052 +3 2928 2861 2925 +3 2928 2925 2998 +3 2873 2799 2861 +3 2873 2861 2928 +3 2817 2723 2799 +3 2817 2799 2873 +3 2744 2660 2723 +3 2744 2723 2817 +3 2687 2585 2660 +3 2687 2660 2744 +3 2621 2519 2585 +3 2621 2585 2687 +3 2555 2445 2519 +3 2555 2519 2621 +3 2502 2379 2445 +3 2502 2445 2555 +3 2429 2312 2379 +3 2429 2379 2502 +3 2365 2235 2312 +3 2365 2312 2429 +3 2308 2173 2235 +3 2308 2235 2365 +3 2240 2097 2173 +3 2240 2173 2308 +3 2186 2032 2097 +3 2186 2097 2240 +3 2119 1969 2032 +3 2119 2032 2186 +3 2055 1891 1969 +3 2055 1969 2119 +3 1999 1830 1891 +3 1999 1891 2055 +3 1932 1759 1830 +3 1932 1830 1999 +3 1868 1685 1759 +3 1868 1759 1932 +3 1821 1619 1685 +3 1821 1685 1868 +3 1752 1563 1619 +3 1752 1619 1821 +3 1690 1508 1563 +3 1690 1563 1752 +3 1636 1460 1508 +3 1636 1508 1690 +3 1591 1409 1460 +3 1591 1460 1636 +3 1538 1357 1409 +3 1538 1409 1591 +3 1501 1324 1357 +3 1501 1357 1538 +3 1468 1292 1324 +3 1468 1324 1501 +3 1431 1270 1292 +3 1431 1292 1468 +3 1394 1252 1270 +3 1394 1270 1431 +3 1363 1238 1252 +3 1363 1252 1394 +3 1347 1224 1238 +3 1347 1238 1363 +3 1335 1216 1224 +3 1335 1224 1347 +3 1325 1213 1216 +3 1325 1216 1335 +3 1316 1217 1213 +3 1316 1213 1325 +3 1314 1226 1217 +3 1314 1217 1316 +3 1319 1240 1226 +3 1319 1226 1314 +3 1330 1253 1240 +3 1330 1240 1319 +3 1341 1273 1253 +3 1341 1253 1330 +3 1355 1294 1273 +3 1355 1273 1341 +3 1382 1326 1294 +3 1382 1294 1355 +3 1417 1360 1326 +3 1417 1326 1382 +3 1451 1412 1360 +3 1451 1360 1417 +3 1482 1465 1412 +3 1482 1412 1451 +3 1523 1513 1465 +3 1523 1465 1482 +3 1569 1513 1523 +3 1569 1499 1513 +3 1513 1499 1441 +3 1513 1441 1465 +3 1465 1441 1368 +3 1465 1368 1412 +3 1412 1368 1317 +3 1412 1317 1360 +3 1360 1317 1276 +3 1360 1276 1326 +3 1326 1276 1246 +3 1326 1246 1294 +3 1294 1246 1194 +3 1294 1194 1273 +3 1273 1194 1165 +3 1273 1165 1253 +3 1253 1165 1148 +3 1253 1148 1240 +3 1240 1148 1134 +3 1240 1134 1226 +3 1226 1134 1119 +3 1226 1119 1217 +3 1217 1119 1109 +3 1217 1109 1213 +3 1213 1109 1105 +3 1213 1105 1216 +3 1216 1105 1106 +3 1216 1106 1224 +3 1224 1106 1110 +3 1224 1110 1238 +3 1238 1110 1121 +3 1238 1121 1252 +3 1252 1121 1136 +3 1252 1136 1270 +3 1270 1136 1150 +3 1270 1150 1292 +3 1292 1150 1167 +3 1292 1167 1324 +3 1324 1167 1200 +3 1324 1200 1357 +3 1357 1200 1247 +3 1357 1247 1409 +3 1409 1247 1280 +3 1409 1280 1460 +3 1460 1280 1322 +3 1460 1322 1508 +3 1508 1322 1375 +3 1508 1375 1563 +3 1563 1375 1446 +3 1563 1446 1619 +3 1619 1446 1505 +3 1619 1505 1685 +3 1685 1505 1577 +3 1685 1577 1759 +3 1759 1577 1643 +3 1759 1643 1830 +3 1830 1643 1719 +3 1830 1719 1891 +3 1891 1719 1806 +3 1891 1806 1969 +3 1969 1806 1873 +3 1969 1873 2032 +3 2032 1873 1966 +3 2032 1966 2097 +3 2097 1966 2034 +3 2097 2034 2173 +3 2173 2034 2109 +3 2173 2109 2235 +3 2235 2109 2189 +3 2235 2189 2312 +3 2312 2189 2255 +3 2312 2255 2379 +3 2379 2255 2342 +3 2379 2342 2445 +3 2445 2342 2411 +3 2445 2411 2519 +3 2519 2411 2498 +3 2519 2498 2585 +3 2585 2498 2563 +3 2585 2563 2660 +3 2660 2563 2652 +3 2660 2652 2723 +3 2723 2652 2717 +3 2723 2717 2799 +3 2799 2717 2800 +3 2799 2800 2861 +3 2861 2800 2874 +3 2861 2874 2925 +3 2925 2874 2943 +3 2925 2943 3005 +3 3005 2943 3032 +3 3005 3032 3066 +3 3066 3032 3101 +3 3066 3101 3133 +3 3133 3101 3191 +3 3133 3191 3213 +3 3213 3191 3266 +3 3213 3266 3274 +3 3274 3266 3332 +3 3266 3252 3332 +3 3191 3163 3252 +3 3191 3252 3266 +3 3101 3068 3163 +3 3101 3163 3191 +3 3032 2991 3068 +3 3032 3068 3101 +3 2943 2897 2991 +3 2943 2991 3032 +3 2874 2822 2897 +3 2874 2897 2943 +3 2800 2732 2822 +3 2800 2822 2874 +3 2717 2655 2732 +3 2717 2732 2800 +3 2652 2561 2655 +3 2652 2655 2717 +3 2563 2485 2561 +3 2563 2561 2652 +3 2498 2395 2485 +3 2498 2485 2563 +3 2411 2319 2395 +3 2411 2395 2498 +3 2342 2232 2319 +3 2342 2319 2411 +3 2255 2153 2232 +3 2255 2232 2342 +3 2189 2061 2153 +3 2189 2153 2255 +3 2109 1983 2061 +3 2109 2061 2189 +3 2034 1889 1983 +3 2034 1983 2109 +3 1966 1811 1889 +3 1966 1889 2034 +3 1873 1712 1811 +3 1873 1811 1966 +3 1806 1629 1712 +3 1806 1712 1873 +3 1719 1547 1629 +3 1719 1629 1806 +3 1643 1472 1547 +3 1643 1547 1719 +3 1577 1390 1472 +3 1577 1472 1643 +3 1505 1323 1390 +3 1505 1390 1577 +3 1446 1267 1323 +3 1446 1323 1505 +3 1375 1219 1267 +3 1375 1267 1446 +3 1322 1160 1219 +3 1322 1219 1375 +3 1280 1133 1160 +3 1280 1160 1322 +3 1247 1096 1133 +3 1247 1133 1280 +3 1200 1065 1096 +3 1200 1096 1247 +3 1167 1039 1065 +3 1167 1065 1200 +3 1150 1019 1039 +3 1150 1039 1167 +3 1136 1007 1019 +3 1136 1019 1150 +3 1121 999 1007 +3 1121 1007 1136 +3 1110 993 999 +3 1110 999 1121 +3 1106 995 993 +3 1106 993 1110 +3 1105 1001 995 +3 1105 995 1106 +3 1109 1008 1001 +3 1109 1001 1105 +3 1119 1024 1008 +3 1119 1008 1109 +3 1134 1042 1024 +3 1134 1024 1119 +3 1148 1069 1042 +3 1148 1042 1134 +3 1165 1103 1069 +3 1165 1069 1148 +3 1194 1143 1103 +3 1194 1103 1165 +3 1246 1173 1143 +3 1246 1143 1194 +3 1276 1232 1173 +3 1276 1173 1246 +3 1317 1282 1232 +3 1317 1232 1276 +3 1368 1337 1282 +3 1368 1282 1317 +3 1441 1414 1337 +3 1441 1337 1368 +3 1499 1489 1414 +3 1499 1414 1441 +3 1569 1489 1499 +3 1569 1479 1489 +3 1489 1479 1386 +3 1489 1386 1414 +3 1414 1386 1306 +3 1414 1306 1337 +3 1337 1306 1248 +3 1337 1248 1282 +3 1282 1248 1174 +3 1282 1174 1232 +3 1232 1174 1129 +3 1232 1129 1173 +3 1173 1129 1080 +3 1173 1080 1143 +3 1143 1080 1037 +3 1143 1037 1103 +3 1103 1037 1000 +3 1103 1000 1069 +3 1069 1000 969 +3 1069 969 1042 +3 1042 969 943 +3 1042 943 1024 +3 1024 943 923 +3 1024 923 1008 +3 1008 923 904 +3 1008 904 1001 +3 1001 904 889 +3 1001 889 995 +3 995 889 886 +3 995 886 993 +3 993 886 885 +3 993 885 999 +3 999 885 887 +3 999 887 1007 +3 1007 887 901 +3 1007 901 1019 +3 1019 901 918 +3 1019 918 1039 +3 1039 918 941 +3 1039 941 1065 +3 1065 941 964 +3 1065 964 1096 +3 1096 964 994 +3 1096 994 1133 +3 1133 994 1030 +3 1133 1030 1160 +3 1160 1030 1070 +3 1160 1070 1219 +3 1219 1070 1122 +3 1219 1122 1267 +3 1267 1122 1163 +3 1267 1163 1323 +3 1323 1163 1241 +3 1323 1241 1390 +3 1390 1241 1298 +3 1390 1298 1472 +3 1472 1298 1373 +3 1472 1373 1547 +3 1547 1373 1470 +3 1547 1470 1629 +3 1629 1470 1553 +3 1629 1553 1712 +3 1712 1553 1645 +3 1712 1645 1811 +3 1811 1645 1747 +3 1811 1747 1889 +3 1889 1747 1848 +3 1889 1848 1983 +3 1983 1848 1941 +3 1983 1941 2061 +3 2061 1941 2033 +3 2061 2033 2153 +3 2153 2033 2130 +3 2153 2130 2232 +3 2232 2130 2215 +3 2232 2215 2319 +3 2319 2215 2309 +3 2319 2309 2395 +3 2395 2309 2394 +3 2395 2394 2485 +3 2485 2394 2496 +3 2485 2496 2561 +3 2561 2496 2574 +3 2561 2574 2655 +3 2655 2574 2672 +3 2655 2672 2732 +3 2732 2672 2755 +3 2732 2755 2822 +3 2822 2755 2856 +3 2822 2856 2897 +3 2897 2856 2936 +3 2897 2936 2991 +3 2991 2936 3042 +3 2991 3042 3068 +3 3068 3042 3134 +3 3068 3134 3163 +3 3163 3134 3242 +3 3163 3242 3252 +3 3252 3242 3332 +3 3242 3232 3332 +3 3134 3108 3232 +3 3134 3232 3242 +3 3042 3014 3108 +3 3042 3108 3134 +3 2936 2905 3014 +3 2936 3014 3042 +3 2856 2815 2905 +3 2856 2905 2936 +3 2755 2710 2815 +3 2755 2815 2856 +3 2672 2607 2710 +3 2672 2710 2755 +3 2574 2515 2607 +3 2574 2607 2672 +3 2496 2412 2515 +3 2496 2515 2574 +3 2394 2322 2412 +3 2394 2412 2496 +3 2309 2219 2322 +3 2309 2322 2394 +3 2215 2123 2219 +3 2215 2219 2309 +3 2130 2020 2123 +3 2130 2123 2215 +3 2033 1913 2020 +3 2033 2020 2130 +3 1941 1823 1913 +3 1941 1913 2033 +3 1848 1701 1823 +3 1848 1823 1941 +3 1747 1602 1701 +3 1747 1701 1848 +3 1645 1492 1602 +3 1645 1602 1747 +3 1553 1393 1492 +3 1553 1492 1645 +3 1470 1301 1393 +3 1470 1393 1553 +3 1373 1231 1301 +3 1373 1301 1470 +3 1298 1152 1231 +3 1298 1231 1373 +3 1241 1095 1152 +3 1241 1152 1298 +3 1163 1038 1095 +3 1163 1095 1241 +3 1122 985 1038 +3 1122 1038 1163 +3 1070 945 985 +3 1070 985 1122 +3 1030 902 945 +3 1030 945 1070 +3 994 872 902 +3 994 902 1030 +3 964 847 872 +3 964 872 994 +3 941 826 847 +3 941 847 964 +3 918 809 826 +3 918 826 941 +3 901 796 809 +3 901 809 918 +3 887 786 796 +3 887 796 901 +3 885 784 786 +3 885 786 887 +3 886 791 784 +3 886 784 885 +3 889 804 791 +3 889 791 886 +3 904 822 804 +3 904 804 889 +3 923 840 822 +3 923 822 904 +3 943 863 840 +3 943 840 923 +3 969 888 863 +3 969 863 943 +3 1000 934 888 +3 1000 888 969 +3 1037 974 934 +3 1037 934 1000 +3 1080 1020 974 +3 1080 974 1037 +3 1129 1077 1020 +3 1129 1020 1080 +3 1174 1142 1077 +3 1174 1077 1129 +3 1248 1205 1142 +3 1248 1142 1174 +3 1306 1285 1205 +3 1306 1205 1248 +3 1386 1362 1285 +3 1386 1285 1306 +3 1479 1471 1362 +3 1479 1362 1386 +3 1569 1471 1479 +3 1569 1463 1471 +3 1471 1463 1346 +3 1471 1346 1362 +3 1362 1346 1260 +3 1362 1260 1285 +3 1285 1260 1162 +3 1285 1162 1205 +3 1205 1162 1100 +3 1205 1100 1142 +3 1142 1100 1031 +3 1142 1031 1077 +3 1077 1031 971 +3 1077 971 1020 +3 1020 971 916 +3 1020 916 974 +3 974 916 869 +3 974 869 934 +3 934 869 830 +3 934 830 888 +3 888 830 789 +3 888 789 863 +3 863 789 760 +3 863 760 840 +3 840 760 738 +3 840 738 822 +3 822 738 722 +3 822 722 804 +3 804 722 709 +3 804 709 791 +3 791 709 701 +3 791 701 784 +3 784 701 694 +3 784 694 786 +3 786 694 700 +3 786 700 796 +3 796 700 708 +3 796 708 809 +3 809 708 721 +3 809 721 826 +3 826 721 737 +3 826 737 847 +3 847 737 758 +3 847 758 872 +3 872 758 788 +3 872 788 902 +3 902 788 829 +3 902 829 945 +3 945 829 867 +3 945 867 985 +3 985 867 915 +3 985 915 1038 +3 1038 915 970 +3 1038 970 1095 +3 1095 970 1029 +3 1095 1029 1152 +3 1152 1029 1099 +3 1152 1099 1231 +3 1231 1099 1161 +3 1231 1161 1301 +3 1301 1161 1259 +3 1301 1259 1393 +3 1393 1259 1344 +3 1393 1344 1492 +3 1492 1344 1459 +3 1492 1459 1602 +3 1602 1459 1566 +3 1602 1566 1701 +3 1701 1566 1678 +3 1701 1678 1823 +3 1823 1678 1805 +3 1823 1805 1913 +3 1913 1805 1909 +3 1913 1909 2020 +3 2020 1909 2023 +3 2020 2023 2123 +3 2123 2023 2143 +3 2123 2143 2219 +3 2219 2143 2234 +3 2219 2234 2322 +3 2322 2234 2350 +3 2322 2350 2412 +3 2412 2350 2448 +3 2412 2448 2515 +3 2515 2448 2549 +3 2515 2549 2607 +3 2607 2549 2663 +3 2607 2663 2710 +3 2710 2663 2757 +3 2710 2757 2815 +3 2815 2757 2876 +3 2815 2876 2905 +3 2905 2876 2989 +3 2905 2989 3014 +3 3014 2989 3094 +3 3014 3094 3108 +3 3108 3094 3222 +3 3108 3222 3232 +3 3232 3222 3332 +3 3222 3212 3332 +3 3094 3074 3212 +3 3094 3212 3222 +3 2989 2956 3074 +3 2989 3074 3094 +3 2876 2843 2956 +3 2876 2956 2989 +3 2757 2724 2843 +3 2757 2843 2876 +3 2663 2609 2724 +3 2663 2724 2757 +3 2549 2505 2609 +3 2549 2609 2663 +3 2448 2390 2505 +3 2448 2505 2549 +3 2350 2276 2390 +3 2350 2390 2448 +3 2234 2167 2276 +3 2234 2276 2350 +3 2143 2046 2167 +3 2143 2167 2234 +3 2023 1929 2046 +3 2023 2046 2143 +3 1909 1816 1929 +3 1909 1929 2023 +3 1805 1677 1816 +3 1805 1816 1909 +3 1678 1557 1677 +3 1678 1677 1805 +3 1566 1440 1557 +3 1566 1557 1678 +3 1459 1315 1440 +3 1459 1440 1566 +3 1344 1225 1315 +3 1344 1315 1459 +3 1259 1137 1225 +3 1259 1225 1344 +3 1161 1046 1137 +3 1161 1137 1259 +3 1099 980 1046 +3 1099 1046 1161 +3 1029 914 980 +3 1029 980 1099 +3 970 855 914 +3 970 914 1029 +3 915 807 855 +3 915 855 970 +3 867 756 807 +3 867 807 915 +3 829 725 756 +3 829 756 867 +3 788 682 725 +3 788 725 829 +3 758 654 682 +3 758 682 788 +3 737 639 654 +3 737 654 758 +3 721 627 639 +3 721 639 737 +3 708 612 627 +3 708 627 721 +3 700 606 612 +3 700 612 708 +3 694 607 606 +3 694 606 700 +3 701 614 607 +3 701 607 694 +3 709 628 614 +3 709 614 701 +3 722 642 628 +3 722 628 709 +3 738 658 642 +3 738 642 722 +3 760 685 658 +3 760 658 738 +3 789 728 685 +3 789 685 760 +3 830 765 728 +3 830 728 789 +3 869 813 765 +3 869 765 830 +3 916 860 813 +3 916 813 869 +3 971 922 860 +3 971 860 916 +3 1031 984 922 +3 1031 922 971 +3 1100 1057 984 +3 1100 984 1031 +3 1162 1145 1057 +3 1162 1057 1100 +3 1260 1236 1145 +3 1260 1145 1162 +3 1346 1329 1236 +3 1346 1236 1260 +3 1463 1452 1329 +3 1463 1329 1346 +3 1569 1452 1463 +3 1569 1445 1452 +3 1452 1445 1311 +3 1452 1311 1329 +3 1329 1311 1204 +3 1329 1204 1236 +3 1236 1204 1113 +3 1236 1113 1145 +3 1145 1113 1023 +3 1145 1023 1057 +3 1057 1023 947 +3 1057 947 984 +3 984 947 877 +3 984 877 922 +3 922 877 816 +3 922 816 860 +3 860 816 752 +3 860 752 813 +3 813 752 713 +3 813 713 765 +3 765 713 659 +3 765 659 728 +3 728 659 631 +3 728 631 685 +3 685 631 593 +3 685 593 658 +3 658 593 566 +3 658 566 642 +3 642 566 550 +3 642 550 628 +3 628 550 534 +3 628 534 614 +3 614 534 527 +3 614 527 607 +3 607 527 524 +3 607 524 606 +3 606 524 526 +3 606 526 612 +3 612 526 533 +3 612 533 627 +3 627 533 549 +3 627 549 639 +3 639 549 564 +3 639 564 654 +3 654 564 592 +3 654 592 682 +3 682 592 630 +3 682 630 725 +3 725 630 657 +3 725 657 756 +3 756 657 711 +3 756 711 807 +3 807 711 750 +3 807 750 855 +3 855 750 814 +3 855 814 914 +3 914 814 875 +3 914 875 980 +3 980 875 946 +3 980 946 1046 +3 1046 946 1021 +3 1046 1021 1137 +3 1137 1021 1112 +3 1137 1112 1225 +3 1225 1112 1201 +3 1225 1201 1315 +3 1315 1201 1308 +3 1315 1308 1440 +3 1440 1308 1444 +3 1440 1444 1557 +3 1557 1444 1567 +3 1557 1567 1677 +3 1677 1567 1697 +3 1677 1697 1816 +3 1816 1697 1838 +3 1816 1838 1929 +3 1929 1838 1972 +3 1929 1972 2046 +3 2046 1972 2083 +3 2046 2083 2167 +3 2167 2083 2208 +3 2167 2208 2276 +3 2276 2208 2334 +3 2276 2334 2390 +3 2390 2334 2450 +3 2390 2450 2505 +3 2505 2450 2564 +3 2505 2564 2609 +3 2609 2564 2691 +3 2609 2691 2724 +3 2724 2691 2816 +3 2724 2816 2843 +3 2843 2816 2927 +3 2843 2927 2956 +3 2956 2927 3061 +3 2956 3061 3074 +3 3074 3061 3203 +3 3074 3203 3212 +3 3212 3203 3332 +3 3203 3194 3332 +3 3061 3044 3194 +3 3061 3194 3203 +3 2927 2908 3044 +3 2927 3044 3061 +3 2816 2777 2908 +3 2816 2908 2927 +3 2691 2658 2777 +3 2691 2777 2816 +3 2564 2528 2658 +3 2564 2658 2691 +3 2450 2398 2528 +3 2450 2528 2564 +3 2334 2275 2398 +3 2334 2398 2450 +3 2208 2154 2275 +3 2208 2275 2334 +3 2083 2018 2154 +3 2083 2154 2208 +3 1972 1883 2018 +3 1972 2018 2083 +3 1838 1743 1883 +3 1838 1883 1972 +3 1697 1603 1743 +3 1697 1743 1838 +3 1567 1466 1603 +3 1567 1603 1697 +3 1444 1320 1466 +3 1444 1466 1567 +3 1308 1207 1320 +3 1308 1320 1444 +3 1201 1107 1207 +3 1201 1207 1308 +3 1112 1009 1107 +3 1112 1107 1201 +3 1021 930 1009 +3 1021 1009 1112 +3 946 853 930 +3 946 930 1021 +3 875 776 853 +3 875 853 946 +3 814 723 776 +3 814 776 875 +3 750 661 723 +3 750 723 814 +3 711 619 661 +3 711 661 750 +3 657 569 619 +3 657 619 711 +3 630 538 569 +3 630 569 657 +3 592 507 538 +3 592 538 630 +3 564 477 507 +3 564 507 592 +3 549 468 477 +3 549 477 564 +3 533 455 468 +3 533 468 549 +3 526 448 455 +3 526 455 533 +3 524 446 448 +3 524 448 526 +3 527 452 446 +3 527 446 524 +3 534 464 452 +3 534 452 527 +3 550 475 464 +3 550 464 534 +3 566 499 475 +3 566 475 550 +3 593 530 499 +3 593 499 566 +3 631 562 530 +3 631 530 593 +3 659 605 562 +3 659 562 631 +3 713 651 605 +3 713 605 659 +3 752 712 651 +3 752 651 713 +3 816 767 712 +3 816 712 752 +3 877 834 767 +3 877 767 816 +3 947 907 834 +3 947 834 877 +3 1023 989 907 +3 1023 907 947 +3 1113 1085 989 +3 1113 989 1023 +3 1204 1179 1085 +3 1204 1085 1113 +3 1311 1296 1179 +3 1311 1179 1204 +3 1445 1433 1296 +3 1445 1296 1311 +3 1569 1433 1445 +3 1569 1425 1433 +3 1433 1425 1286 +3 1433 1286 1296 +3 1296 1286 1156 +3 1296 1156 1179 +3 1179 1156 1053 +3 1179 1053 1085 +3 1085 1053 962 +3 1085 962 989 +3 989 962 874 +3 989 874 907 +3 907 874 795 +3 907 795 834 +3 834 795 727 +3 834 727 767 +3 767 727 656 +3 767 656 712 +3 712 656 603 +3 712 603 651 +3 651 603 555 +3 651 555 605 +3 605 555 511 +3 605 511 562 +3 562 511 471 +3 562 471 530 +3 530 471 441 +3 530 441 499 +3 499 441 411 +3 499 411 475 +3 475 411 396 +3 475 396 464 +3 464 396 386 +3 464 386 452 +3 452 386 376 +3 452 376 446 +3 446 376 375 +3 446 375 448 +3 448 375 380 +3 448 380 455 +3 455 380 391 +3 455 391 468 +3 468 391 403 +3 468 403 477 +3 477 403 430 +3 477 430 507 +3 507 430 458 +3 507 458 538 +3 538 458 490 +3 538 490 569 +3 569 490 535 +3 569 535 619 +3 619 535 577 +3 619 577 661 +3 661 577 637 +3 661 637 723 +3 723 637 698 +3 723 698 776 +3 776 698 764 +3 776 764 853 +3 853 764 841 +3 853 841 930 +3 930 841 925 +3 930 925 1009 +3 1009 925 1013 +3 1009 1013 1107 +3 1107 1013 1120 +3 1107 1120 1207 +3 1207 1120 1237 +3 1207 1237 1320 +3 1320 1237 1353 +3 1320 1353 1466 +3 1466 1353 1504 +3 1466 1504 1603 +3 1603 1504 1653 +3 1603 1653 1743 +3 1743 1653 1813 +3 1743 1813 1883 +3 1883 1813 1960 +3 1883 1960 2018 +3 2018 1960 2082 +3 2018 2082 2154 +3 2154 2082 2224 +3 2154 2224 2275 +3 2275 2224 2356 +3 2275 2356 2398 +3 2398 2356 2493 +3 2398 2493 2528 +3 2528 2493 2617 +3 2528 2617 2658 +3 2658 2617 2749 +3 2658 2749 2777 +3 2777 2749 2889 +3 2777 2889 2908 +3 2908 2889 3034 +3 2908 3034 3044 +3 3044 3034 3186 +3 3044 3186 3194 +3 3194 3186 3332 +3 3186 3176 3332 +3 3034 3023 3176 +3 3034 3176 3186 +3 2889 2870 3023 +3 2889 3023 3034 +3 2749 2726 2870 +3 2749 2870 2889 +3 2617 2588 2726 +3 2617 2726 2749 +3 2493 2454 2588 +3 2493 2588 2617 +3 2356 2318 2454 +3 2356 2454 2493 +3 2224 2179 2318 +3 2224 2318 2356 +3 2082 2036 2179 +3 2082 2179 2224 +3 1960 1885 2036 +3 1960 2036 2082 +3 1813 1728 1885 +3 1813 1885 1960 +3 1653 1572 1728 +3 1653 1728 1813 +3 1504 1420 1572 +3 1504 1572 1653 +3 1353 1274 1420 +3 1353 1420 1504 +3 1237 1147 1274 +3 1237 1274 1353 +3 1120 1036 1147 +3 1120 1147 1237 +3 1013 938 1036 +3 1013 1036 1120 +3 925 846 938 +3 925 938 1013 +3 841 759 846 +3 841 846 925 +3 764 680 759 +3 764 759 841 +3 698 626 680 +3 698 680 764 +3 637 559 626 +3 637 626 698 +3 577 506 559 +3 577 559 637 +3 535 461 506 +3 535 506 577 +3 490 418 461 +3 490 461 535 +3 458 388 418 +3 458 418 490 +3 430 357 388 +3 430 388 458 +3 403 338 357 +3 403 357 430 +3 391 322 338 +3 391 338 403 +3 380 312 322 +3 380 322 391 +3 375 309 312 +3 375 312 380 +3 376 311 309 +3 376 309 375 +3 386 320 311 +3 386 311 376 +3 396 337 320 +3 396 320 386 +3 411 356 337 +3 411 337 396 +3 441 387 356 +3 441 356 411 +3 471 416 387 +3 471 387 441 +3 511 459 416 +3 511 416 471 +3 555 504 459 +3 555 459 511 +3 603 557 504 +3 603 504 555 +3 656 623 557 +3 656 557 603 +3 727 679 623 +3 727 623 656 +3 795 755 679 +3 795 679 727 +3 874 843 755 +3 874 755 795 +3 962 936 843 +3 962 843 874 +3 1053 1034 936 +3 1053 936 962 +3 1156 1146 1034 +3 1156 1034 1053 +3 1286 1269 1146 +3 1286 1146 1156 +3 1425 1415 1269 +3 1425 1269 1286 +3 1569 1415 1425 +3 1569 1406 1415 +3 1415 1406 1261 +3 1415 1261 1269 +3 1269 1261 1131 +3 1269 1131 1146 +3 1146 1131 1011 +3 1146 1011 1034 +3 1034 1011 906 +3 1034 906 936 +3 936 906 818 +3 936 818 843 +3 843 818 730 +3 843 730 755 +3 755 730 649 +3 755 649 679 +3 679 649 576 +3 679 576 623 +3 623 576 522 +3 623 522 557 +3 557 522 466 +3 557 466 504 +3 504 466 408 +3 504 408 459 +3 459 408 372 +3 459 372 416 +3 416 372 335 +3 416 335 387 +3 387 335 308 +3 387 308 356 +3 356 308 284 +3 356 284 337 +3 337 284 265 +3 337 265 320 +3 320 265 256 +3 320 256 311 +3 311 256 251 +3 311 251 309 +3 309 251 254 +3 309 254 312 +3 312 254 262 +3 312 262 322 +3 322 262 273 +3 322 273 338 +3 338 273 295 +3 338 295 357 +3 357 295 321 +3 357 321 388 +3 388 321 352 +3 388 352 418 +3 418 352 395 +3 418 395 461 +3 461 395 440 +3 461 440 506 +3 506 440 489 +3 506 489 559 +3 559 489 554 +3 559 554 626 +3 626 554 622 +3 626 622 680 +3 680 622 691 +3 680 691 759 +3 759 691 771 +3 759 771 846 +3 846 771 865 +3 846 865 938 +3 938 865 966 +3 938 966 1036 +3 1036 966 1074 +3 1036 1074 1147 +3 1147 1074 1192 +3 1147 1192 1274 +3 1274 1192 1334 +3 1274 1334 1420 +3 1420 1334 1493 +3 1420 1493 1572 +3 1572 1493 1658 +3 1572 1658 1728 +3 1728 1658 1831 +3 1728 1831 1885 +3 1885 1831 1984 +3 1885 1984 2036 +3 2036 1984 2139 +3 2036 2139 2179 +3 2179 2139 2274 +3 2179 2274 2318 +3 2318 2274 2415 +3 2318 2415 2454 +3 2454 2415 2558 +3 2454 2558 2588 +3 2588 2558 2707 +3 2588 2707 2726 +3 2726 2707 2854 +3 2726 2854 2870 +3 2870 2854 3006 +3 2870 3006 3023 +3 3023 3006 3169 +3 3023 3169 3176 +3 3176 3169 3332 +3 3169 3162 3332 +3 3006 2997 3162 +3 3006 3162 3169 +3 2854 2838 2997 +3 2854 2997 3006 +3 2707 2685 2838 +3 2707 2838 2854 +3 2558 2538 2685 +3 2558 2685 2707 +3 2415 2388 2538 +3 2415 2538 2558 +3 2274 2237 2388 +3 2274 2388 2415 +3 2139 2080 2237 +3 2139 2237 2274 +3 1984 1934 2080 +3 1984 2080 2139 +3 1831 1781 1934 +3 1831 1934 1984 +3 1658 1597 1781 +3 1658 1781 1831 +3 1493 1429 1597 +3 1493 1597 1658 +3 1334 1268 1429 +3 1334 1429 1493 +3 1192 1138 1268 +3 1192 1268 1334 +3 1074 1010 1138 +3 1074 1138 1192 +3 966 899 1010 +3 966 1010 1074 +3 865 803 899 +3 865 899 966 +3 771 718 803 +3 771 803 865 +3 691 633 718 +3 691 718 771 +3 622 556 633 +3 622 633 691 +3 554 488 556 +3 554 556 622 +3 489 434 488 +3 489 488 554 +3 440 382 434 +3 440 434 489 +3 395 333 382 +3 395 382 440 +3 352 299 333 +3 352 333 395 +3 321 263 299 +3 321 299 352 +3 295 239 263 +3 295 263 321 +3 273 220 239 +3 273 239 295 +3 262 206 220 +3 262 220 273 +3 254 198 206 +3 254 206 262 +3 251 197 198 +3 251 198 254 +3 256 204 197 +3 256 197 251 +3 265 216 204 +3 265 204 256 +3 284 233 216 +3 284 216 265 +3 308 261 233 +3 308 233 284 +3 335 290 261 +3 335 261 308 +3 372 328 290 +3 372 290 335 +3 408 373 328 +3 408 328 372 +3 466 423 373 +3 466 373 408 +3 522 476 423 +3 522 423 466 +3 576 547 476 +3 576 476 522 +3 649 625 547 +3 649 547 576 +3 730 704 625 +3 730 625 649 +3 818 783 704 +3 818 704 730 +3 906 882 783 +3 906 783 818 +3 1011 991 882 +3 1011 882 906 +3 1131 1116 991 +3 1131 991 1011 +3 1261 1250 1116 +3 1261 1116 1131 +3 1406 1399 1250 +3 1406 1250 1261 +3 1569 1399 1406 +3 1569 1389 1399 +3 1399 1389 1244 +3 1399 1244 1250 +3 1250 1244 1101 +3 1250 1101 1116 +3 1116 1101 977 +3 1116 977 991 +3 991 977 866 +3 991 866 882 +3 882 866 766 +3 882 766 783 +3 783 766 671 +3 783 671 704 +3 704 671 590 +3 704 590 625 +3 625 590 519 +3 625 519 547 +3 547 519 451 +3 547 451 476 +3 476 451 392 +3 476 392 423 +3 423 392 339 +3 423 339 373 +3 373 339 291 +3 373 291 328 +3 328 291 253 +3 328 253 290 +3 290 253 219 +3 290 219 261 +3 261 219 196 +3 261 196 233 +3 233 196 175 +3 233 175 216 +3 216 175 161 +3 216 161 204 +3 204 161 152 +3 204 152 197 +3 197 152 151 +3 197 151 198 +3 198 151 158 +3 198 158 206 +3 206 158 172 +3 206 172 220 +3 220 172 189 +3 220 189 239 +3 239 189 214 +3 239 214 263 +3 263 214 246 +3 263 246 299 +3 299 246 285 +3 299 285 333 +3 333 285 327 +3 333 327 382 +3 382 327 381 +3 382 381 434 +3 434 381 439 +3 434 439 488 +3 488 439 503 +3 488 503 556 +3 556 503 575 +3 556 575 633 +3 633 575 653 +3 633 653 718 +3 718 653 746 +3 718 746 803 +3 803 746 850 +3 803 850 899 +3 899 850 957 +3 899 957 1010 +3 1010 957 1076 +3 1010 1076 1138 +3 1138 1076 1212 +3 1138 1212 1268 +3 1268 1212 1358 +3 1268 1358 1429 +3 1429 1358 1535 +3 1429 1535 1597 +3 1597 1535 1709 +3 1597 1709 1781 +3 1781 1709 1888 +3 1781 1888 1934 +3 1934 1888 2050 +3 1934 2050 2080 +3 2080 2050 2206 +3 2080 2206 2237 +3 2237 2206 2361 +3 2237 2361 2388 +3 2388 2361 2514 +3 2388 2514 2538 +3 2538 2514 2668 +3 2538 2668 2685 +3 2685 2668 2827 +3 2685 2827 2838 +3 2838 2827 2987 +3 2838 2987 2997 +3 2997 2987 3153 +3 2997 3153 3162 +3 3162 3153 3332 +3 3153 3150 3332 +3 2987 2975 3150 +3 2987 3150 3153 +3 2827 2814 2975 +3 2827 2975 2987 +3 2668 2656 2814 +3 2668 2814 2827 +3 2514 2499 2656 +3 2514 2656 2668 +3 2361 2341 2499 +3 2361 2499 2514 +3 2206 2185 2341 +3 2206 2341 2361 +3 2050 2019 2185 +3 2050 2185 2206 +3 1888 1851 2019 +3 1888 2019 2050 +3 1709 1663 1851 +3 1709 1851 1888 +3 1535 1487 1663 +3 1535 1663 1709 +3 1358 1307 1487 +3 1358 1487 1535 +3 1212 1154 1307 +3 1212 1307 1358 +3 1076 1028 1154 +3 1076 1154 1212 +3 957 909 1028 +3 957 1028 1076 +3 850 802 909 +3 850 909 957 +3 746 706 802 +3 746 802 850 +3 653 617 706 +3 653 706 746 +3 575 532 617 +3 575 617 653 +3 503 460 532 +3 503 532 575 +3 439 394 460 +3 439 460 503 +3 381 332 394 +3 381 394 439 +3 327 286 332 +3 327 332 381 +3 285 240 286 +3 285 286 327 +3 246 200 240 +3 246 240 285 +3 214 173 200 +3 214 200 246 +3 189 145 173 +3 189 173 214 +3 172 131 145 +3 172 145 189 +3 158 116 131 +3 158 131 172 +3 151 113 116 +3 151 116 158 +3 152 114 113 +3 152 113 151 +3 161 121 114 +3 161 114 152 +3 175 139 121 +3 175 121 161 +3 196 155 139 +3 196 139 175 +3 219 183 155 +3 219 155 196 +3 253 217 183 +3 253 183 219 +3 291 260 217 +3 291 217 253 +3 339 307 260 +3 339 260 291 +3 392 362 307 +3 392 307 339 +3 451 421 362 +3 451 362 392 +3 519 486 421 +3 519 421 451 +3 590 565 486 +3 590 486 519 +3 671 650 565 +3 671 565 590 +3 766 744 650 +3 766 650 671 +3 866 852 744 +3 866 744 766 +3 977 963 852 +3 977 852 866 +3 1101 1090 963 +3 1101 963 977 +3 1244 1230 1090 +3 1244 1090 1101 +3 1389 1384 1230 +3 1389 1230 1244 +3 1569 1384 1389 +3 1569 1380 1384 +3 1384 1380 1222 +3 1384 1222 1230 +3 1230 1222 1078 +3 1230 1078 1090 +3 1090 1078 952 +3 1090 952 963 +3 963 952 835 +3 963 835 852 +3 852 835 731 +3 852 731 744 +3 744 731 636 +3 744 636 650 +3 650 636 548 +3 650 548 565 +3 565 548 469 +3 565 469 486 +3 486 469 397 +3 486 397 421 +3 421 397 334 +3 421 334 362 +3 362 334 279 +3 362 279 307 +3 307 279 231 +3 307 231 260 +3 260 231 188 +3 260 188 217 +3 217 188 153 +3 217 153 183 +3 183 153 127 +3 183 127 155 +3 155 127 104 +3 155 104 139 +3 139 104 91 +3 139 91 121 +3 121 91 79 +3 121 79 114 +3 114 79 77 +3 114 77 113 +3 113 77 85 +3 113 85 116 +3 116 85 93 +3 116 93 131 +3 131 93 109 +3 131 109 145 +3 145 109 136 +3 145 136 173 +3 173 136 166 +3 173 166 200 +3 200 166 201 +3 200 201 240 +3 240 201 247 +3 240 247 286 +3 286 247 300 +3 286 300 332 +3 332 300 353 +3 332 353 394 +3 394 353 420 +3 394 420 460 +3 460 420 492 +3 460 492 532 +3 532 492 571 +3 532 571 617 +3 617 571 660 +3 617 660 706 +3 706 660 761 +3 706 761 802 +3 802 761 870 +3 802 870 909 +3 909 870 988 +3 909 988 1028 +3 1028 988 1125 +3 1028 1125 1154 +3 1154 1125 1272 +3 1154 1272 1307 +3 1307 1272 1448 +3 1307 1448 1487 +3 1487 1448 1626 +3 1487 1626 1663 +3 1663 1626 1825 +3 1663 1825 1851 +3 1851 1825 1997 +3 1851 1997 2019 +3 2019 1997 2162 +3 2019 2162 2185 +3 2185 2162 2321 +3 2185 2321 2341 +3 2341 2321 2480 +3 2341 2480 2499 +3 2499 2480 2644 +3 2499 2644 2656 +3 2656 2644 2802 +3 2656 2802 2814 +3 2814 2802 2965 +3 2814 2965 2975 +3 2975 2965 3145 +3 2975 3145 3150 +3 3150 3145 3332 +3 3145 3138 3332 +3 2965 2957 3138 +3 2965 3138 3145 +3 2802 2790 2957 +3 2802 2957 2965 +3 2644 2624 2790 +3 2644 2790 2802 +3 2480 2463 2624 +3 2480 2624 2644 +3 2321 2304 2463 +3 2321 2463 2480 +3 2162 2145 2304 +3 2162 2304 2321 +3 1997 1975 2145 +3 1997 2145 2162 +3 1825 1796 1975 +3 1825 1975 1997 +3 1626 1598 1796 +3 1626 1796 1825 +3 1448 1411 1598 +3 1448 1598 1626 +3 1272 1245 1411 +3 1272 1411 1448 +3 1125 1091 1245 +3 1125 1245 1272 +3 988 958 1091 +3 988 1091 1125 +3 870 839 958 +3 870 958 988 +3 761 733 839 +3 761 839 870 +3 660 634 733 +3 660 733 761 +3 571 544 634 +3 571 634 660 +3 492 465 544 +3 492 544 571 +3 420 390 465 +3 420 465 492 +3 353 325 390 +3 353 390 420 +3 300 264 325 +3 300 325 353 +3 247 215 264 +3 247 264 300 +3 201 174 215 +3 201 215 247 +3 166 137 174 +3 166 174 201 +3 136 105 137 +3 136 137 166 +3 109 82 105 +3 109 105 136 +3 93 67 82 +3 93 82 109 +3 85 55 67 +3 85 67 93 +3 77 49 55 +3 77 55 85 +3 79 52 49 +3 79 49 77 +3 91 64 52 +3 91 52 79 +3 104 76 64 +3 104 64 91 +3 127 100 76 +3 127 76 104 +3 153 132 100 +3 153 100 127 +3 188 167 132 +3 188 132 153 +3 231 208 167 +3 231 167 188 +3 279 257 208 +3 279 208 231 +3 334 313 257 +3 334 257 279 +3 397 379 313 +3 397 313 334 +3 469 453 379 +3 469 379 397 +3 548 531 453 +3 548 453 469 +3 636 621 531 +3 636 531 548 +3 731 719 621 +3 731 621 636 +3 835 824 719 +3 835 719 731 +3 952 942 824 +3 952 824 835 +3 1078 1067 942 +3 1078 942 952 +3 1222 1215 1067 +3 1222 1067 1078 +3 1380 1378 1215 +3 1380 1215 1222 +3 1569 1378 1380 +3 1569 1372 1378 +3 1378 1372 1209 +3 1378 1209 1215 +3 1215 1209 1059 +3 1215 1059 1067 +3 1067 1059 933 +3 1067 933 942 +3 942 933 815 +3 942 815 824 +3 824 815 707 +3 824 707 719 +3 719 707 608 +3 719 608 621 +3 621 608 520 +3 621 520 531 +3 531 520 436 +3 531 436 453 +3 453 436 364 +3 453 364 379 +3 379 364 302 +3 379 302 313 +3 313 302 242 +3 313 242 257 +3 257 242 190 +3 257 190 208 +3 208 190 147 +3 208 147 167 +3 167 147 110 +3 167 110 132 +3 132 110 80 +3 132 80 100 +3 100 80 61 +3 100 61 76 +3 76 61 42 +3 76 42 64 +3 64 42 33 +3 64 33 52 +3 52 33 29 +3 52 29 49 +3 49 29 34 +3 49 34 55 +3 55 34 43 +3 55 43 67 +3 67 43 62 +3 67 62 82 +3 82 62 83 +3 82 83 105 +3 105 83 111 +3 105 111 137 +3 137 111 148 +3 137 148 174 +3 174 148 192 +3 174 192 215 +3 215 192 243 +3 215 243 264 +3 264 243 303 +3 264 303 325 +3 325 303 365 +3 325 365 390 +3 390 365 438 +3 390 438 465 +3 465 438 521 +3 465 521 544 +3 544 521 609 +3 544 609 634 +3 634 609 710 +3 634 710 733 +3 733 710 817 +3 733 817 839 +3 839 817 935 +3 839 935 958 +3 958 935 1063 +3 958 1063 1091 +3 1091 1063 1211 +3 1091 1211 1245 +3 1245 1211 1374 +3 1245 1374 1411 +3 1411 1374 1571 +3 1411 1571 1598 +3 1598 1571 1772 +3 1598 1772 1796 +3 1796 1772 1953 +3 1796 1953 1975 +3 1975 1953 2125 +3 1975 2125 2145 +3 2145 2125 2290 +3 2145 2290 2304 +3 2304 2290 2452 +3 2304 2452 2463 +3 2463 2452 2613 +3 2463 2613 2624 +3 2624 2613 2779 +3 2624 2779 2790 +3 2790 2779 2951 +3 2790 2951 2957 +3 2957 2951 3131 +3 2957 3131 3138 +3 3138 3131 3332 +3 3131 3128 3332 +3 2951 2944 3128 +3 2951 3128 3131 +3 2779 2772 2944 +3 2779 2944 2951 +3 2613 2605 2772 +3 2613 2772 2779 +3 2452 2444 2605 +3 2452 2605 2613 +3 2290 2279 2444 +3 2290 2444 2452 +3 2125 2107 2279 +3 2125 2279 2290 +3 1953 1935 2107 +3 1953 2107 2125 +3 1772 1746 1935 +3 1772 1935 1953 +3 1571 1550 1746 +3 1571 1746 1772 +3 1374 1354 1550 +3 1374 1550 1571 +3 1211 1185 1354 +3 1211 1354 1374 +3 1063 1041 1185 +3 1063 1185 1211 +3 935 912 1041 +3 935 1041 1063 +3 817 794 912 +3 817 912 935 +3 710 681 794 +3 710 794 817 +3 609 584 681 +3 609 681 710 +3 521 497 584 +3 521 584 609 +3 438 417 497 +3 438 497 521 +3 365 348 417 +3 365 417 438 +3 303 282 348 +3 303 348 365 +3 243 225 282 +3 243 282 303 +3 192 176 225 +3 192 225 243 +3 148 133 176 +3 148 176 192 +3 111 94 133 +3 111 133 148 +3 83 66 94 +3 83 94 111 +3 62 41 66 +3 62 66 83 +3 43 24 41 +3 43 41 62 +3 34 18 24 +3 34 24 43 +3 29 12 18 +3 29 18 34 +3 33 19 12 +3 33 12 29 +3 42 25 19 +3 42 19 33 +3 61 44 25 +3 61 25 42 +3 80 68 44 +3 80 44 61 +3 110 98 68 +3 110 68 80 +3 147 135 98 +3 147 98 110 +3 190 180 135 +3 190 135 147 +3 242 230 180 +3 242 180 190 +3 302 288 230 +3 302 230 242 +3 364 350 288 +3 364 288 302 +3 436 429 350 +3 436 350 364 +3 520 509 429 +3 520 429 436 +3 608 596 509 +3 608 509 520 +3 707 699 596 +3 707 596 608 +3 815 806 699 +3 815 699 707 +3 933 927 806 +3 933 806 815 +3 1059 1056 927 +3 1059 927 933 +3 1209 1202 1056 +3 1209 1056 1059 +3 1372 1370 1202 +3 1372 1202 1209 +3 1569 1370 1372 +3 1569 1367 1370 +3 1370 1367 1197 +3 1370 1197 1202 +3 1202 1197 1049 +3 1202 1049 1056 +3 1056 1049 924 +3 1056 924 927 +3 927 924 801 +3 927 801 806 +3 806 801 689 +3 806 689 699 +3 699 689 591 +3 699 591 596 +3 596 591 500 +3 596 500 509 +3 509 500 419 +3 509 419 429 +3 429 419 347 +3 429 347 350 +3 350 347 280 +3 350 280 288 +3 288 280 223 +3 288 223 230 +3 230 223 171 +3 230 171 180 +3 180 171 126 +3 180 126 135 +3 135 126 90 +3 135 90 98 +3 98 90 60 +3 98 60 68 +3 68 60 36 +3 68 36 44 +3 44 36 20 +3 44 20 25 +3 25 20 8 +3 25 8 19 +3 19 8 3 +3 19 3 12 +3 12 3 7 +3 12 7 18 +3 18 7 16 +3 18 16 24 +3 24 16 32 +3 24 32 41 +3 41 32 54 +3 41 54 66 +3 66 54 86 +3 66 86 94 +3 94 86 120 +3 94 120 133 +3 133 120 164 +3 133 164 176 +3 176 164 213 +3 176 213 225 +3 225 213 269 +3 225 269 282 +3 282 269 336 +3 282 336 348 +3 348 336 405 +3 348 405 417 +3 417 405 485 +3 417 485 497 +3 497 485 574 +3 497 574 584 +3 584 574 674 +3 584 674 681 +3 681 674 779 +3 681 779 794 +3 794 779 900 +3 794 900 912 +3 912 900 1033 +3 912 1033 1041 +3 1041 1033 1172 +3 1041 1172 1185 +3 1185 1172 1343 +3 1185 1343 1354 +3 1354 1343 1537 +3 1354 1537 1550 +3 1550 1537 1733 +3 1550 1733 1746 +3 1746 1733 1922 +3 1746 1922 1935 +3 1935 1922 2098 +3 1935 2098 2107 +3 2107 2098 2270 +3 2107 2270 2279 +3 2279 2270 2437 +3 2279 2437 2444 +3 2444 2437 2601 +3 2444 2601 2605 +3 2605 2601 2768 +3 2605 2768 2772 +3 2772 2768 2939 +3 2772 2939 2944 +3 2944 2939 3125 +3 2944 3125 3128 +3 3128 3125 3332 +3 3125 3123 3332 +3 2939 2937 3123 +3 2939 3123 3125 +3 2768 2765 2937 +3 2768 2937 2939 +3 2601 2599 2765 +3 2601 2765 2768 +3 2437 2432 2599 +3 2437 2599 2601 +3 2270 2263 2432 +3 2270 2432 2437 +3 2098 2092 2263 +3 2098 2263 2270 +3 1922 1918 2092 +3 1922 2092 2098 +3 1733 1729 1918 +3 1733 1918 1922 +3 1537 1531 1729 +3 1537 1729 1733 +3 1343 1336 1531 +3 1343 1531 1537 +3 1172 1166 1336 +3 1172 1336 1343 +3 1033 1027 1166 +3 1033 1166 1172 +3 900 892 1027 +3 900 1027 1033 +3 779 775 892 +3 779 892 900 +3 674 667 775 +3 674 775 779 +3 574 570 667 +3 574 667 674 +3 485 482 570 +3 485 570 574 +3 405 401 482 +3 405 482 485 +3 336 330 401 +3 336 401 405 +3 269 266 330 +3 269 330 336 +3 213 209 266 +3 213 266 269 +3 164 157 209 +3 164 209 213 +3 120 115 157 +3 120 157 164 +3 86 78 115 +3 86 115 120 +3 54 48 78 +3 54 78 86 +3 32 28 48 +3 32 48 54 +3 16 10 28 +3 16 28 32 +3 7 2 10 +3 7 10 16 +3 3 0 2 +3 3 2 7 +3 8 4 0 +3 8 0 3 +3 20 15 4 +3 20 4 8 +3 36 31 15 +3 36 15 20 +3 60 56 31 +3 60 31 36 +3 90 88 56 +3 90 56 60 +3 126 122 88 +3 126 88 90 +3 171 168 122 +3 171 122 126 +3 223 218 168 +3 223 168 171 +3 280 274 218 +3 280 218 223 +3 347 344 274 +3 347 274 280 +3 419 414 344 +3 419 344 347 +3 500 495 414 +3 500 414 419 +3 591 585 495 +3 591 495 500 +3 689 683 585 +3 689 585 591 +3 801 799 683 +3 801 683 689 +3 924 920 799 +3 924 799 801 +3 1049 1047 920 +3 1049 920 924 +3 1197 1195 1047 +3 1197 1047 1049 +3 1367 1365 1195 +3 1367 1195 1197 +3 1569 1365 1367 +3 1569 1366 1365 +3 1365 1366 1196 +3 1365 1196 1195 +3 1195 1196 1048 +3 1195 1048 1047 +3 1047 1048 921 +3 1047 921 920 +3 920 921 800 +3 920 800 799 +3 799 800 687 +3 799 687 683 +3 683 687 588 +3 683 588 585 +3 585 588 498 +3 585 498 495 +3 495 498 415 +3 495 415 414 +3 414 415 345 +3 414 345 344 +3 344 345 277 +3 344 277 274 +3 274 277 221 +3 274 221 218 +3 218 221 169 +3 218 169 168 +3 168 169 124 +3 168 124 122 +3 122 124 89 +3 122 89 88 +3 88 89 58 +3 88 58 56 +3 56 58 35 +3 56 35 31 +3 31 35 17 +3 31 17 15 +3 15 17 6 +3 15 6 4 +3 4 6 1 +3 4 1 0 +3 0 1 5 +3 0 5 2 +3 2 5 14 +3 2 14 10 +3 10 14 30 +3 10 30 28 +3 28 30 50 +3 28 50 48 +3 48 50 84 +3 48 84 78 +3 78 84 117 +3 78 117 115 +3 115 117 162 +3 115 162 157 +3 157 162 212 +3 157 212 209 +3 209 212 267 +3 209 267 266 +3 266 267 331 +3 266 331 330 +3 330 331 404 +3 330 404 401 +3 401 404 484 +3 401 484 482 +3 482 484 573 +3 482 573 570 +3 570 573 670 +3 570 670 667 +3 667 670 778 +3 667 778 775 +3 775 778 895 +3 775 895 892 +3 892 895 1032 +3 892 1032 1027 +3 1027 1032 1169 +3 1027 1169 1166 +3 1166 1169 1340 +3 1166 1340 1336 +3 1336 1340 1534 +3 1336 1534 1531 +3 1531 1534 1730 +3 1531 1730 1729 +3 1729 1730 1921 +3 1729 1921 1918 +3 1918 1921 2095 +3 1918 2095 2092 +3 2092 2095 2267 +3 2092 2267 2263 +3 2263 2267 2435 +3 2263 2435 2432 +3 2432 2435 2600 +3 2432 2600 2599 +3 2599 2600 2767 +3 2599 2767 2765 +3 2765 2767 2938 +3 2765 2938 2937 +3 2937 2938 3124 +3 2937 3124 3123 +3 3123 3124 3332 +3 3124 3127 3332 +3 2938 2942 3127 +3 2938 3127 3124 +3 2767 2770 2942 +3 2767 2942 2938 +3 2600 2604 2770 +3 2600 2770 2767 +3 2435 2439 2604 +3 2435 2604 2600 +3 2267 2273 2439 +3 2267 2439 2435 +3 2095 2104 2273 +3 2095 2273 2267 +3 1921 1930 2104 +3 1921 2104 2095 +3 1730 1742 1930 +3 1730 1930 1921 +3 1534 1543 1742 +3 1534 1742 1730 +3 1340 1351 1543 +3 1340 1543 1534 +3 1169 1182 1351 +3 1169 1351 1340 +3 1032 1040 1182 +3 1032 1182 1169 +3 895 910 1040 +3 895 1040 1032 +3 778 787 910 +3 778 910 895 +3 670 678 787 +3 670 787 778 +3 573 581 678 +3 573 678 670 +3 484 494 581 +3 484 581 573 +3 404 412 494 +3 404 494 484 +3 331 343 412 +3 331 412 404 +3 267 275 343 +3 267 343 331 +3 212 222 275 +3 212 275 267 +3 162 170 222 +3 162 222 212 +3 117 129 170 +3 117 170 162 +3 84 92 129 +3 84 129 117 +3 50 63 92 +3 50 92 84 +3 30 39 63 +3 30 63 50 +3 14 21 39 +3 14 39 30 +3 5 11 21 +3 5 21 14 +3 1 9 11 +3 1 11 5 +3 6 13 9 +3 6 9 1 +3 17 22 13 +3 17 13 6 +3 35 40 22 +3 35 22 17 +3 58 65 40 +3 58 40 35 +3 89 95 65 +3 89 65 58 +3 124 134 95 +3 124 95 89 +3 169 177 134 +3 169 134 124 +3 221 228 177 +3 221 177 169 +3 277 287 228 +3 277 228 221 +3 345 349 287 +3 345 287 277 +3 415 424 349 +3 415 349 345 +3 498 505 424 +3 498 424 415 +3 588 594 505 +3 588 505 498 +3 687 696 594 +3 687 594 588 +3 800 805 696 +3 800 696 687 +3 921 926 805 +3 921 805 800 +3 1048 1052 926 +3 1048 926 921 +3 1196 1199 1052 +3 1196 1052 1048 +3 1366 1369 1199 +3 1366 1199 1196 +3 1569 1369 1366 +3 1569 1371 1369 +3 1369 1371 1206 +3 1369 1206 1199 +3 1199 1206 1058 +3 1199 1058 1052 +3 1052 1058 931 +3 1052 931 926 +3 926 931 812 +3 926 812 805 +3 805 812 705 +3 805 705 696 +3 696 705 604 +3 696 604 594 +3 594 604 518 +3 594 518 505 +3 505 518 435 +3 505 435 424 +3 424 435 361 +3 424 361 349 +3 349 361 297 +3 349 297 287 +3 287 297 238 +3 287 238 228 +3 228 238 187 +3 228 187 177 +3 177 187 143 +3 177 143 134 +3 134 143 107 +3 134 107 95 +3 95 107 75 +3 95 75 65 +3 65 75 53 +3 65 53 40 +3 40 53 38 +3 40 38 22 +3 22 38 27 +3 22 27 13 +3 13 27 23 +3 13 23 9 +3 9 23 26 +3 9 26 11 +3 11 26 37 +3 11 37 21 +3 21 37 51 +3 21 51 39 +3 39 51 74 +3 39 74 63 +3 63 74 106 +3 63 106 92 +3 92 106 142 +3 92 142 129 +3 129 142 184 +3 129 184 170 +3 170 184 235 +3 170 235 222 +3 222 235 294 +3 222 294 275 +3 275 294 358 +3 275 358 343 +3 343 358 433 +3 343 433 412 +3 412 433 514 +3 412 514 494 +3 494 514 601 +3 494 601 581 +3 581 601 703 +3 581 703 678 +3 678 703 810 +3 678 810 787 +3 787 810 929 +3 787 929 910 +3 910 929 1055 +3 910 1055 1040 +3 1040 1055 1198 +3 1040 1198 1182 +3 1182 1198 1364 +3 1182 1364 1351 +3 1351 1364 1562 +3 1351 1562 1543 +3 1543 1562 1761 +3 1543 1761 1742 +3 1742 1761 1949 +3 1742 1949 1930 +3 1930 1949 2117 +3 1930 2117 2104 +3 2104 2117 2286 +3 2104 2286 2273 +3 2273 2286 2446 +3 2273 2446 2439 +3 2439 2446 2608 +3 2439 2608 2604 +3 2604 2608 2775 +3 2604 2775 2770 +3 2770 2775 2949 +3 2770 2949 2942 +3 2942 2949 3130 +3 2942 3130 3127 +3 3127 3130 3332 +3 3130 3137 3332 +3 2949 2954 3137 +3 2949 3137 3130 +3 2775 2786 2954 +3 2775 2954 2949 +3 2608 2619 2786 +3 2608 2786 2775 +3 2446 2461 2619 +3 2446 2619 2608 +3 2286 2299 2461 +3 2286 2461 2446 +3 2117 2140 2299 +3 2117 2299 2286 +3 1949 1968 2140 +3 1949 2140 2117 +3 1761 1792 1968 +3 1761 1968 1949 +3 1562 1588 1792 +3 1562 1792 1761 +3 1364 1397 1588 +3 1364 1588 1562 +3 1198 1234 1397 +3 1198 1397 1364 +3 1055 1084 1234 +3 1055 1234 1198 +3 929 951 1084 +3 929 1084 1055 +3 810 833 951 +3 810 951 929 +3 703 726 833 +3 703 833 810 +3 601 629 726 +3 601 726 703 +3 514 537 629 +3 514 629 601 +3 433 456 537 +3 433 537 514 +3 358 384 456 +3 358 456 433 +3 294 315 384 +3 294 384 358 +3 235 258 315 +3 235 315 294 +3 184 207 258 +3 184 258 235 +3 142 165 207 +3 142 207 184 +3 106 130 165 +3 106 165 142 +3 74 99 130 +3 74 130 106 +3 51 73 99 +3 51 99 74 +3 37 59 73 +3 37 73 51 +3 26 47 59 +3 26 59 37 +3 23 45 47 +3 23 47 26 +3 27 46 45 +3 27 45 23 +3 38 57 46 +3 38 46 27 +3 53 70 57 +3 53 57 38 +3 75 96 70 +3 75 70 53 +3 107 123 96 +3 107 96 75 +3 143 159 123 +3 143 123 107 +3 187 202 159 +3 187 159 143 +3 238 255 202 +3 238 202 187 +3 297 310 255 +3 297 255 238 +3 361 374 310 +3 361 310 297 +3 435 449 374 +3 435 374 361 +3 518 528 449 +3 518 449 435 +3 604 618 528 +3 604 528 518 +3 705 716 618 +3 705 618 604 +3 812 823 716 +3 812 716 705 +3 931 939 823 +3 931 823 812 +3 1058 1066 939 +3 1058 939 931 +3 1206 1214 1066 +3 1206 1066 1058 +3 1371 1376 1214 +3 1371 1214 1206 +3 1569 1376 1371 +3 1569 1379 1376 +3 1376 1379 1220 +3 1376 1220 1214 +3 1214 1220 1072 +3 1214 1072 1066 +3 1066 1072 948 +3 1066 948 939 +3 939 948 832 +3 939 832 823 +3 823 832 729 +3 823 729 716 +3 716 729 632 +3 716 632 618 +3 618 632 542 +3 618 542 528 +3 528 542 467 +3 528 467 449 +3 449 467 393 +3 449 393 374 +3 374 393 329 +3 374 329 310 +3 310 329 272 +3 310 272 255 +3 255 272 227 +3 255 227 202 +3 202 227 181 +3 202 181 159 +3 159 181 146 +3 159 146 123 +3 123 146 119 +3 123 119 96 +3 96 119 97 +3 96 97 70 +3 70 97 81 +3 70 81 57 +3 57 81 71 +3 57 71 46 +3 46 71 69 +3 46 69 45 +3 45 69 72 +3 45 72 47 +3 47 72 87 +3 47 87 59 +3 59 87 101 +3 59 101 73 +3 73 101 125 +3 73 125 99 +3 99 125 154 +3 99 154 130 +3 130 154 195 +3 130 195 165 +3 165 195 236 +3 165 236 207 +3 207 236 289 +3 207 289 258 +3 258 289 346 +3 258 346 315 +3 315 346 407 +3 315 407 384 +3 384 407 479 +3 384 479 456 +3 456 479 563 +3 456 563 537 +3 537 563 652 +3 537 652 629 +3 629 652 748 +3 629 748 726 +3 726 748 856 +3 726 856 833 +3 833 856 978 +3 833 978 951 +3 951 978 1114 +3 951 1114 1084 +3 1084 1114 1263 +3 1084 1263 1234 +3 1234 1263 1438 +3 1234 1438 1397 +3 1397 1438 1616 +3 1397 1616 1588 +3 1588 1616 1814 +3 1588 1814 1792 +3 1792 1814 1986 +3 1792 1986 1968 +3 1968 1986 2155 +3 1968 2155 2140 +3 2140 2155 2315 +3 2140 2315 2299 +3 2299 2315 2476 +3 2299 2476 2461 +3 2461 2476 2639 +3 2461 2639 2619 +3 2619 2639 2798 +3 2619 2798 2786 +3 2786 2798 2963 +3 2786 2963 2954 +3 2954 2963 3143 +3 2954 3143 3137 +3 3137 3143 3332 +3 3143 3148 3332 +3 2963 2973 3148 +3 2963 3148 3143 +3 2798 2811 2973 +3 2798 2973 2963 +3 2639 2653 2811 +3 2639 2811 2798 +3 2476 2494 2653 +3 2476 2653 2639 +3 2315 2336 2494 +3 2315 2494 2476 +3 2155 2176 2336 +3 2155 2336 2315 +3 1986 2011 2176 +3 1986 2176 2155 +3 1814 1845 2011 +3 1814 2011 1986 +3 1616 1656 1845 +3 1616 1845 1814 +3 1438 1474 1656 +3 1438 1656 1616 +3 1263 1297 1474 +3 1263 1474 1438 +3 1114 1149 1297 +3 1114 1297 1263 +3 978 1015 1149 +3 978 1149 1114 +3 856 891 1015 +3 856 1015 978 +3 748 785 891 +3 748 891 856 +3 652 688 785 +3 652 785 748 +3 563 602 688 +3 563 688 652 +3 479 523 602 +3 479 602 563 +3 407 450 523 +3 407 523 479 +3 346 385 450 +3 346 450 407 +3 289 324 385 +3 289 385 346 +3 236 271 324 +3 236 324 289 +3 195 229 271 +3 195 271 236 +3 154 191 229 +3 154 229 195 +3 125 160 191 +3 125 191 154 +3 101 138 160 +3 101 160 125 +3 87 118 138 +3 87 138 101 +3 72 108 118 +3 72 118 87 +3 69 102 108 +3 69 108 72 +3 71 103 102 +3 71 102 69 +3 81 112 103 +3 81 103 71 +3 97 128 112 +3 97 112 81 +3 119 149 128 +3 119 128 97 +3 146 178 149 +3 146 149 119 +3 181 211 178 +3 181 178 146 +3 227 250 211 +3 227 211 181 +3 272 301 250 +3 272 250 227 +3 329 351 301 +3 329 301 272 +3 393 410 351 +3 393 351 329 +3 467 480 410 +3 467 410 393 +3 542 560 480 +3 542 480 467 +3 632 647 560 +3 632 560 542 +3 729 739 647 +3 729 647 632 +3 832 845 739 +3 832 739 729 +3 948 960 845 +3 948 845 832 +3 1072 1088 960 +3 1072 960 948 +3 1220 1229 1088 +3 1220 1088 1072 +3 1379 1383 1229 +3 1379 1229 1220 +3 1569 1383 1379 +3 1569 1387 1383 +3 1383 1387 1242 +3 1383 1242 1229 +3 1229 1242 1097 +3 1229 1097 1088 +3 1088 1097 972 +3 1088 972 960 +3 960 972 858 +3 960 858 845 +3 845 858 754 +3 845 754 739 +3 739 754 663 +3 739 663 647 +3 647 663 580 +3 647 580 560 +3 560 580 510 +3 560 510 480 +3 480 510 443 +3 480 443 410 +3 410 443 383 +3 410 383 351 +3 351 383 326 +3 351 326 301 +3 301 326 281 +3 301 281 250 +3 250 281 244 +3 250 244 211 +3 211 244 210 +3 211 210 178 +3 178 210 182 +3 178 182 149 +3 149 182 163 +3 149 163 128 +3 128 163 150 +3 128 150 112 +3 112 150 141 +3 112 141 103 +3 103 141 140 +3 103 140 102 +3 102 140 144 +3 102 144 108 +3 108 144 156 +3 108 156 118 +3 118 156 179 +3 118 179 138 +3 138 179 199 +3 138 199 160 +3 160 199 232 +3 160 232 191 +3 191 232 270 +3 191 270 229 +3 229 270 314 +3 229 314 271 +3 271 314 368 +3 271 368 324 +3 324 368 428 +3 324 428 385 +3 385 428 487 +3 385 487 450 +3 450 487 561 +3 450 561 523 +3 523 561 645 +3 523 645 602 +3 602 645 736 +3 602 736 688 +3 688 736 836 +3 688 836 785 +3 785 836 944 +3 785 944 891 +3 891 944 1062 +3 891 1062 1015 +3 1015 1062 1189 +3 1015 1189 1149 +3 1149 1189 1345 +3 1149 1345 1297 +3 1297 1345 1521 +3 1297 1521 1474 +3 1474 1521 1696 +3 1474 1696 1656 +3 1656 1696 1871 +3 1656 1871 1845 +3 1845 1871 2043 +3 1845 2043 2011 +3 2011 2043 2197 +3 2011 2197 2176 +3 2176 2197 2355 +3 2176 2355 2336 +3 2336 2355 2510 +3 2336 2510 2494 +3 2494 2510 2665 +3 2494 2665 2653 +3 2653 2665 2824 +3 2653 2824 2811 +3 2811 2824 2984 +3 2811 2984 2973 +3 2973 2984 3152 +3 2973 3152 3148 +3 3148 3152 3332 +3 3152 3160 3332 +3 2984 2995 3160 +3 2984 3160 3152 +3 2824 2835 2995 +3 2824 2995 2984 +3 2665 2679 2835 +3 2665 2835 2824 +3 2510 2534 2679 +3 2510 2679 2665 +3 2355 2380 2534 +3 2355 2534 2510 +3 2197 2231 2380 +3 2197 2380 2355 +3 2043 2073 2231 +3 2043 2231 2197 +3 1871 1916 2073 +3 1871 2073 2043 +3 1696 1754 1916 +3 1696 1916 1871 +3 1521 1580 1754 +3 1521 1754 1696 +3 1345 1410 1580 +3 1345 1580 1521 +3 1189 1256 1410 +3 1189 1410 1345 +3 1062 1118 1256 +3 1062 1256 1189 +3 944 997 1118 +3 944 1118 1062 +3 836 883 997 +3 836 997 944 +3 736 782 883 +3 736 883 836 +3 645 702 782 +3 645 782 736 +3 561 620 702 +3 561 702 645 +3 487 543 620 +3 487 620 561 +3 428 474 543 +3 428 543 487 +3 368 413 474 +3 368 474 428 +3 314 367 413 +3 314 413 368 +3 270 318 367 +3 270 367 314 +3 232 283 318 +3 232 318 270 +3 199 249 283 +3 199 283 232 +3 179 226 249 +3 179 249 199 +3 156 205 226 +3 156 226 179 +3 144 194 205 +3 144 205 156 +3 140 186 194 +3 140 194 144 +3 141 185 186 +3 141 186 140 +3 150 193 185 +3 150 185 141 +3 163 203 193 +3 163 193 150 +3 182 224 203 +3 182 203 163 +3 210 248 224 +3 210 224 182 +3 244 278 248 +3 244 248 210 +3 281 316 278 +3 281 278 244 +3 326 363 316 +3 326 316 281 +3 383 409 363 +3 383 363 326 +3 443 472 409 +3 443 409 383 +3 510 539 472 +3 510 472 443 +3 580 613 539 +3 580 539 510 +3 663 690 613 +3 663 613 580 +3 754 777 690 +3 754 690 663 +3 858 878 777 +3 858 777 754 +3 972 987 878 +3 972 878 858 +3 1097 1111 987 +3 1097 987 972 +3 1242 1249 1111 +3 1242 1111 1097 +3 1387 1395 1249 +3 1387 1249 1242 +3 1569 1395 1387 +3 1569 1404 1395 +3 1395 1404 1258 +3 1395 1258 1249 +3 1249 1258 1126 +3 1249 1126 1111 +3 1111 1126 1005 +3 1111 1005 987 +3 987 1005 898 +3 987 898 878 +3 878 898 808 +3 878 808 777 +3 777 808 724 +3 777 724 690 +3 690 724 643 +3 690 643 613 +3 613 643 568 +3 613 568 539 +3 539 568 508 +3 539 508 472 +3 472 508 454 +3 472 454 409 +3 409 454 400 +3 409 400 363 +3 363 400 359 +3 363 359 316 +3 316 359 323 +3 316 323 278 +3 278 323 293 +3 278 293 248 +3 248 293 268 +3 248 268 224 +3 224 268 252 +3 224 252 203 +3 203 252 241 +3 203 241 193 +3 193 241 234 +3 193 234 185 +3 185 234 237 +3 185 237 186 +3 186 237 245 +3 186 245 194 +3 194 245 259 +3 194 259 205 +3 205 259 276 +3 205 276 226 +3 226 276 305 +3 226 305 249 +3 249 305 340 +3 249 340 283 +3 283 340 377 +3 283 377 318 +3 318 377 422 +3 318 422 367 +3 367 422 473 +3 367 473 413 +3 413 473 536 +3 413 536 474 +3 474 536 599 +3 474 599 543 +3 543 599 672 +3 543 672 620 +3 620 672 753 +3 620 753 702 +3 702 753 848 +3 702 848 782 +3 782 848 949 +3 782 949 883 +3 883 949 1050 +3 883 1050 997 +3 997 1050 1171 +3 997 1171 1118 +3 1118 1171 1312 +3 1118 1312 1256 +3 1256 1312 1476 +3 1256 1476 1410 +3 1410 1476 1637 +3 1410 1637 1580 +3 1580 1637 1818 +3 1580 1818 1754 +3 1754 1818 1977 +3 1754 1977 1916 +3 1916 1977 2120 +3 1916 2120 2073 +3 2073 2120 2258 +3 2073 2258 2231 +3 2231 2258 2404 +3 2231 2404 2380 +3 2380 2404 2547 +3 2380 2547 2534 +3 2534 2547 2700 +3 2534 2700 2679 +3 2679 2700 2849 +3 2679 2849 2835 +3 2835 2849 3003 +3 2835 3003 2995 +3 2995 3003 3166 +3 2995 3166 3160 +3 3160 3166 3332 +3 3166 3174 3332 +3 3003 3015 3174 +3 3003 3174 3166 +3 2849 2862 3015 +3 2849 3015 3003 +3 2700 2719 2862 +3 2700 2862 2849 +3 2547 2577 2719 +3 2547 2719 2700 +3 2404 2441 2577 +3 2404 2577 2547 +3 2258 2305 2441 +3 2258 2441 2404 +3 2120 2165 2305 +3 2120 2305 2258 +3 1977 2017 2165 +3 1977 2165 2120 +3 1818 1866 2017 +3 1818 2017 1977 +3 1637 1706 1866 +3 1637 1866 1818 +3 1476 1549 1706 +3 1476 1706 1637 +3 1312 1388 1549 +3 1312 1549 1476 +3 1171 1254 1388 +3 1171 1388 1312 +3 1050 1127 1254 +3 1050 1254 1171 +3 949 1014 1127 +3 949 1127 1050 +3 848 913 1014 +3 848 1014 949 +3 753 827 913 +3 753 913 848 +3 672 741 827 +3 672 827 753 +3 599 662 741 +3 599 741 672 +3 536 598 662 +3 536 662 599 +3 473 541 598 +3 473 598 536 +3 422 483 541 +3 422 541 473 +3 377 442 483 +3 377 483 422 +3 340 399 442 +3 340 442 377 +3 305 369 399 +3 305 399 340 +3 276 341 369 +3 276 369 305 +3 259 317 341 +3 259 341 276 +3 245 304 317 +3 245 317 259 +3 237 296 304 +3 237 304 245 +3 234 292 296 +3 234 296 237 +3 241 298 292 +3 241 292 234 +3 252 306 298 +3 252 298 241 +3 268 319 306 +3 268 306 252 +3 293 342 319 +3 293 319 268 +3 323 371 342 +3 323 342 293 +3 359 402 371 +3 359 371 323 +3 400 447 402 +3 400 402 359 +3 454 491 447 +3 454 447 400 +3 508 546 491 +3 508 491 454 +3 568 610 546 +3 568 546 508 +3 643 673 610 +3 643 610 568 +3 724 747 673 +3 724 673 643 +3 808 837 747 +3 808 747 724 +3 898 928 837 +3 898 837 808 +3 1005 1025 928 +3 1005 928 898 +3 1126 1144 1025 +3 1126 1025 1005 +3 1258 1265 1144 +3 1258 1144 1126 +3 1404 1413 1265 +3 1404 1265 1258 +3 1569 1413 1404 +3 1569 1422 1413 +3 1413 1422 1277 +3 1413 1277 1265 +3 1265 1277 1153 +3 1265 1153 1144 +3 1144 1153 1044 +3 1144 1044 1025 +3 1025 1044 955 +3 1025 955 928 +3 928 955 864 +3 928 864 837 +3 837 864 780 +3 837 780 747 +3 747 780 717 +3 747 717 673 +3 673 717 648 +3 673 648 610 +3 610 648 587 +3 610 587 546 +3 546 587 540 +3 546 540 491 +3 491 540 493 +3 491 493 447 +3 447 493 457 +3 447 457 402 +3 402 457 425 +3 402 425 371 +3 371 425 398 +3 371 398 342 +3 342 398 378 +3 342 378 319 +3 319 378 366 +3 319 366 306 +3 306 366 355 +3 306 355 298 +3 298 355 354 +3 298 354 292 +3 292 354 360 +3 292 360 296 +3 296 360 370 +3 296 370 304 +3 304 370 389 +3 304 389 317 +3 317 389 406 +3 317 406 341 +3 341 406 437 +3 341 437 369 +3 369 437 470 +3 369 470 399 +3 399 470 513 +3 399 513 442 +3 442 513 558 +3 442 558 483 +3 483 558 616 +3 483 616 541 +3 541 616 669 +3 541 669 598 +3 598 669 742 +3 598 742 662 +3 662 742 821 +3 662 821 741 +3 741 821 894 +3 741 894 827 +3 827 894 990 +3 827 990 913 +3 913 990 1094 +3 913 1094 1014 +3 1014 1094 1203 +3 1014 1203 1127 +3 1127 1203 1332 +3 1127 1332 1254 +3 1254 1332 1480 +3 1254 1480 1388 +3 1388 1480 1628 +3 1388 1628 1549 +3 1549 1628 1795 +3 1549 1795 1706 +3 1706 1795 1933 +3 1706 1933 1866 +3 1866 1933 2070 +3 1866 2070 2017 +3 2017 2070 2207 +3 2017 2207 2165 +3 2165 2207 2349 +3 2165 2349 2305 +3 2305 2349 2482 +3 2305 2482 2441 +3 2441 2482 2606 +3 2441 2606 2577 +3 2577 2606 2741 +3 2577 2741 2719 +3 2719 2741 2886 +3 2719 2886 2862 +3 2862 2886 3031 +3 2862 3031 3015 +3 3015 3031 3184 +3 3015 3184 3174 +3 3174 3184 3332 +3 3184 3193 3332 +3 3031 3040 3193 +3 3031 3193 3184 +3 2886 2900 3040 +3 2886 3040 3031 +3 2741 2766 2900 +3 2741 2900 2886 +3 2606 2651 2766 +3 2606 2766 2741 +3 2482 2517 2651 +3 2482 2651 2606 +3 2349 2389 2517 +3 2349 2517 2482 +3 2207 2254 2389 +3 2207 2389 2349 +3 2070 2141 2254 +3 2070 2254 2207 +3 1933 2005 2141 +3 1933 2141 2070 +3 1795 1864 2005 +3 1795 2005 1933 +3 1628 1713 1864 +3 1628 1864 1795 +3 1480 1574 1713 +3 1480 1713 1628 +3 1332 1435 1574 +3 1332 1574 1480 +3 1203 1293 1435 +3 1203 1435 1332 +3 1094 1176 1293 +3 1094 1293 1203 +3 990 1079 1176 +3 990 1176 1094 +3 894 983 1079 +3 894 1079 990 +3 821 897 983 +3 821 983 894 +3 742 828 897 +3 742 897 821 +3 669 751 828 +3 669 828 742 +3 616 695 751 +3 616 751 669 +3 558 641 695 +3 558 695 616 +3 513 589 641 +3 513 641 558 +3 470 553 589 +3 470 589 513 +3 437 517 553 +3 437 553 470 +3 406 481 517 +3 406 517 437 +3 389 463 481 +3 389 481 406 +3 370 445 463 +3 370 463 389 +3 360 432 445 +3 360 445 370 +3 354 427 432 +3 354 432 360 +3 355 426 427 +3 355 427 354 +3 366 431 426 +3 366 426 355 +3 378 444 431 +3 378 431 366 +3 398 462 444 +3 398 444 378 +3 425 478 462 +3 425 462 398 +3 457 516 478 +3 457 478 425 +3 493 552 516 +3 493 516 457 +3 540 586 552 +3 540 552 493 +3 587 640 586 +3 587 586 540 +3 648 692 640 +3 648 640 587 +3 717 749 692 +3 717 692 648 +3 780 825 749 +3 780 749 717 +3 864 893 825 +3 864 825 780 +3 955 981 893 +3 955 893 864 +3 1044 1075 981 +3 1044 981 955 +3 1153 1170 1075 +3 1153 1075 1044 +3 1277 1291 1170 +3 1277 1170 1153 +3 1422 1430 1291 +3 1422 1291 1277 +3 1569 1430 1422 +3 1569 1439 1430 +3 1430 1439 1303 +3 1430 1303 1291 +3 1291 1303 1193 +3 1291 1193 1170 +3 1170 1193 1104 +3 1170 1104 1075 +3 1075 1104 1012 +3 1075 1012 981 +3 981 1012 937 +3 981 937 893 +3 893 937 861 +3 893 861 825 +3 825 861 798 +3 825 798 749 +3 749 798 743 +3 749 743 692 +3 692 743 686 +3 692 686 640 +3 640 686 646 +3 640 646 586 +3 586 646 611 +3 586 611 552 +3 552 611 572 +3 552 572 516 +3 516 572 551 +3 516 551 478 +3 478 551 529 +3 478 529 462 +3 462 529 515 +3 462 515 444 +3 444 515 502 +3 444 502 431 +3 431 502 496 +3 431 496 426 +3 426 496 501 +3 426 501 427 +3 427 501 512 +3 427 512 432 +3 432 512 525 +3 432 525 445 +3 445 525 545 +3 445 545 463 +3 463 545 567 +3 463 567 481 +3 481 567 597 +3 481 597 517 +3 517 597 638 +3 517 638 553 +3 553 638 676 +3 553 676 589 +3 589 676 732 +3 589 732 641 +3 641 732 781 +3 641 781 695 +3 695 781 849 +3 695 849 751 +3 751 849 917 +3 751 917 828 +3 828 917 996 +3 828 996 897 +3 897 996 1083 +3 897 1083 983 +3 983 1083 1168 +3 983 1168 1079 +3 1079 1168 1283 +3 1079 1283 1176 +3 1176 1283 1403 +3 1176 1403 1293 +3 1293 1403 1533 +3 1293 1533 1435 +3 1435 1533 1667 +3 1435 1667 1574 +3 1574 1667 1819 +3 1574 1819 1713 +3 1713 1819 1946 +3 1713 1946 1864 +3 1864 1946 2067 +3 1864 2067 2005 +3 2005 2067 2192 +3 2005 2192 2141 +3 2141 2192 2320 +3 2141 2320 2254 +3 2254 2320 2433 +3 2254 2433 2389 +3 2389 2433 2553 +3 2389 2553 2517 +3 2517 2553 2678 +3 2517 2678 2651 +3 2651 2678 2808 +3 2651 2808 2766 +3 2766 2808 2920 +3 2766 2920 2900 +3 2900 2920 3054 +3 2900 3054 3040 +3 3040 3054 3197 +3 3040 3197 3193 +3 3193 3197 3332 +3 3197 3210 3332 +3 3054 3072 3210 +3 3054 3210 3197 +3 2920 2946 3072 +3 2920 3072 3054 +3 2808 2836 2946 +3 2808 2946 2920 +3 2678 2714 2836 +3 2678 2836 2808 +3 2553 2598 2714 +3 2553 2714 2678 +3 2433 2491 2598 +3 2433 2598 2553 +3 2320 2369 2491 +3 2320 2491 2433 +3 2192 2251 2369 +3 2192 2369 2320 +3 2067 2149 2251 +3 2067 2251 2192 +3 1946 2024 2149 +3 1946 2149 2067 +3 1819 1902 2024 +3 1819 2024 1946 +3 1667 1791 1902 +3 1667 1902 1819 +3 1533 1646 1791 +3 1533 1791 1667 +3 1403 1520 1646 +3 1403 1646 1533 +3 1283 1398 1520 +3 1283 1520 1403 +3 1168 1287 1398 +3 1168 1398 1283 +3 1083 1183 1287 +3 1083 1287 1168 +3 996 1102 1183 +3 996 1183 1083 +3 917 1018 1102 +3 917 1102 996 +3 849 953 1018 +3 849 1018 917 +3 781 881 953 +3 781 953 849 +3 732 831 881 +3 732 881 781 +3 676 772 831 +3 676 831 732 +3 638 734 772 +3 638 772 676 +3 597 693 734 +3 597 734 638 +3 567 655 693 +3 567 693 597 +3 545 635 655 +3 545 655 567 +3 525 615 635 +3 525 635 545 +3 512 595 615 +3 512 615 525 +3 501 582 595 +3 501 595 512 +3 496 578 582 +3 496 582 501 +3 502 579 578 +3 502 578 496 +3 515 583 579 +3 515 579 502 +3 529 600 583 +3 529 583 515 +3 551 624 600 +3 551 600 529 +3 572 644 624 +3 572 624 551 +3 611 666 644 +3 611 644 572 +3 646 714 666 +3 646 666 611 +3 686 745 714 +3 686 714 646 +3 743 792 745 +3 743 745 686 +3 798 851 792 +3 798 792 743 +3 861 905 851 +3 861 851 798 +3 937 976 905 +3 937 905 861 +3 1012 1043 976 +3 1012 976 937 +3 1104 1135 1043 +3 1104 1043 1012 +3 1193 1227 1135 +3 1193 1135 1104 +3 1303 1321 1227 +3 1303 1227 1193 +3 1439 1449 1321 +3 1439 1321 1303 +3 1569 1449 1439 +3 1569 1457 1449 +3 1449 1457 1339 +3 1449 1339 1321 +3 1321 1339 1251 +3 1321 1251 1227 +3 1227 1251 1155 +3 1227 1155 1135 +3 1135 1155 1089 +3 1135 1089 1043 +3 1043 1089 1016 +3 1043 1016 976 +3 976 1016 956 +3 976 956 905 +3 905 956 896 +3 905 896 851 +3 851 896 854 +3 851 854 792 +3 792 854 811 +3 792 811 745 +3 745 811 770 +3 745 770 714 +3 714 770 740 +3 714 740 666 +3 666 740 720 +3 666 720 644 +3 644 720 697 +3 644 697 624 +3 624 697 677 +3 624 677 600 +3 600 677 668 +3 600 668 583 +3 583 668 664 +3 583 664 579 +3 579 664 665 +3 579 665 578 +3 578 665 675 +3 578 675 582 +3 582 675 684 +3 582 684 595 +3 595 684 715 +3 595 715 615 +3 615 715 735 +3 615 735 635 +3 635 735 757 +3 635 757 655 +3 655 757 797 +3 655 797 693 +3 693 797 838 +3 693 838 734 +3 734 838 880 +3 734 880 772 +3 772 880 940 +3 772 940 831 +3 831 940 998 +3 831 998 881 +3 881 998 1061 +3 881 1061 953 +3 953 1061 1141 +3 953 1141 1018 +3 1018 1141 1221 +3 1018 1221 1102 +3 1102 1221 1304 +3 1102 1304 1183 +3 1183 1304 1419 +3 1183 1419 1287 +3 1287 1419 1527 +3 1287 1527 1398 +3 1398 1527 1642 +3 1398 1642 1520 +3 1520 1642 1779 +3 1520 1779 1646 +3 1646 1779 1879 +3 1646 1879 1791 +3 1791 1879 2002 +3 1791 2002 1902 +3 1902 2002 2106 +3 1902 2106 2024 +3 2024 2106 2217 +3 2024 2217 2149 +3 2149 2217 2331 +3 2149 2331 2251 +3 2251 2331 2427 +3 2251 2427 2369 +3 2369 2427 2541 +3 2369 2541 2491 +3 2491 2541 2654 +3 2491 2654 2598 +3 2598 2654 2750 +3 2598 2750 2714 +3 2714 2750 2863 +3 2714 2863 2836 +3 2836 2863 2981 +3 2836 2981 2946 +3 2946 2981 3086 +3 2946 3086 3072 +3 3072 3086 3218 +3 3072 3218 3210 +3 3210 3218 3332 +3 3218 3229 3332 +3 3086 3104 3229 +3 3086 3229 3218 +3 2981 3008 3104 +3 2981 3104 3086 +3 2863 2894 3008 +3 2863 3008 2981 +3 2750 2801 2894 +3 2750 2894 2863 +3 2654 2697 2801 +3 2654 2801 2750 +3 2541 2594 2697 +3 2541 2697 2654 +3 2427 2500 2594 +3 2427 2594 2541 +3 2331 2392 2500 +3 2331 2500 2427 +3 2217 2298 2392 +3 2217 2392 2331 +3 2106 2193 2298 +3 2106 2298 2217 +3 2002 2088 2193 +3 2002 2193 2106 +3 1879 1994 2088 +3 1879 2088 2002 +3 1779 1880 1994 +3 1779 1994 1879 +3 1642 1788 1880 +3 1642 1880 1779 +3 1527 1661 1788 +3 1527 1788 1642 +3 1419 1558 1661 +3 1419 1661 1527 +3 1304 1456 1558 +3 1304 1558 1419 +3 1221 1350 1456 +3 1221 1456 1304 +3 1141 1266 1350 +3 1141 1350 1221 +3 1061 1184 1266 +3 1061 1266 1141 +3 998 1123 1184 +3 998 1184 1061 +3 940 1054 1123 +3 940 1123 998 +3 880 1003 1054 +3 880 1054 940 +3 838 954 1003 +3 838 1003 880 +3 797 908 954 +3 797 954 838 +3 757 871 908 +3 757 908 797 +3 735 842 871 +3 735 871 757 +3 715 819 842 +3 715 842 735 +3 684 790 819 +3 684 819 715 +3 675 773 790 +3 675 790 684 +3 665 768 773 +3 665 773 675 +3 664 762 768 +3 664 768 665 +3 668 763 762 +3 668 762 664 +3 677 769 763 +3 677 763 668 +3 697 774 769 +3 697 769 677 +3 720 793 774 +3 720 774 697 +3 740 820 793 +3 740 793 720 +3 770 844 820 +3 770 820 740 +3 811 876 844 +3 811 844 770 +3 854 911 876 +3 854 876 811 +3 896 959 911 +3 896 911 854 +3 956 1006 959 +3 956 959 896 +3 1016 1064 1006 +3 1016 1006 956 +3 1089 1128 1064 +3 1089 1064 1016 +3 1155 1190 1128 +3 1155 1128 1089 +3 1251 1275 1190 +3 1251 1190 1155 +3 1339 1356 1275 +3 1339 1275 1251 +3 1457 1469 1356 +3 1457 1356 1339 +3 1569 1469 1457 +3 1569 1475 1469 +3 1469 1475 1381 +3 1469 1381 1356 +3 1356 1381 1300 +3 1356 1300 1275 +3 1275 1300 1239 +3 1275 1239 1190 +3 1190 1239 1159 +3 1190 1159 1128 +3 1128 1159 1115 +3 1128 1115 1064 +3 1064 1115 1060 +3 1064 1060 1006 +3 1006 1060 1017 +3 1006 1017 959 +3 959 1017 979 +3 959 979 911 +3 911 979 950 +3 911 950 876 +3 876 950 919 +3 876 919 844 +3 844 919 890 +3 844 890 820 +3 820 890 879 +3 820 879 793 +3 793 879 868 +3 793 868 774 +3 774 868 859 +3 774 859 769 +3 769 859 857 +3 769 857 763 +3 763 857 862 +3 763 862 762 +3 762 862 873 +3 762 873 768 +3 768 873 884 +3 768 884 773 +3 773 884 903 +3 773 903 790 +3 790 903 932 +3 790 932 819 +3 819 932 961 +3 819 961 842 +3 842 961 992 +3 842 992 871 +3 871 992 1035 +3 871 1035 908 +3 908 1035 1082 +3 908 1082 954 +3 954 1082 1139 +3 954 1139 1003 +3 1003 1139 1186 +3 1003 1186 1054 +3 1054 1186 1262 +3 1054 1262 1123 +3 1123 1262 1331 +3 1123 1331 1184 +3 1184 1331 1421 +3 1184 1421 1266 +3 1266 1421 1512 +3 1266 1512 1350 +3 1350 1512 1606 +3 1350 1606 1456 +3 1456 1606 1700 +3 1456 1700 1558 +3 1558 1700 1810 +3 1558 1810 1661 +3 1661 1810 1901 +3 1661 1901 1788 +3 1788 1901 2006 +3 1788 2006 1880 +3 1880 2006 2089 +3 1880 2089 1994 +3 1994 2089 2190 +3 1994 2190 2088 +3 2088 2190 2285 +3 2088 2285 2193 +3 2193 2285 2375 +3 2193 2375 2298 +3 2298 2375 2473 +3 2298 2473 2392 +3 2392 2473 2557 +3 2392 2557 2500 +3 2500 2557 2659 +3 2500 2659 2594 +3 2594 2659 2742 +3 2594 2742 2697 +3 2697 2742 2842 +3 2697 2842 2801 +3 2801 2842 2931 +3 2801 2931 2894 +3 2894 2931 3036 +3 2894 3036 3008 +3 3008 3036 3121 +3 3008 3121 3104 +3 3104 3121 3239 +3 3104 3239 3229 +3 3229 3239 3332 +3 3239 3246 3332 +3 3121 3157 3246 +3 3121 3246 3239 +3 3036 3064 3157 +3 3036 3157 3121 +3 2931 2978 3064 +3 2931 3064 3036 +3 2842 2887 2978 +3 2842 2978 2931 +3 2742 2807 2887 +3 2742 2887 2842 +3 2659 2713 2807 +3 2659 2807 2742 +3 2557 2630 2713 +3 2557 2713 2659 +3 2473 2544 2630 +3 2473 2630 2557 +3 2375 2459 2544 +3 2375 2544 2473 +3 2285 2370 2459 +3 2285 2459 2375 +3 2190 2291 2370 +3 2190 2370 2285 +3 2089 2200 2291 +3 2089 2291 2190 +3 2006 2116 2200 +3 2006 2200 2089 +3 1901 2029 2116 +3 1901 2116 2006 +3 1810 1943 2029 +3 1810 2029 1901 +3 1700 1852 1943 +3 1700 1943 1810 +3 1606 1769 1852 +3 1606 1852 1700 +3 1512 1666 1769 +3 1512 1769 1606 +3 1421 1584 1666 +3 1421 1666 1512 +3 1331 1500 1584 +3 1331 1584 1421 +3 1262 1424 1500 +3 1262 1500 1331 +3 1186 1342 1424 +3 1186 1424 1262 +3 1139 1281 1342 +3 1139 1342 1186 +3 1082 1228 1281 +3 1082 1281 1139 +3 1035 1164 1228 +3 1035 1228 1082 +3 992 1132 1164 +3 992 1164 1035 +3 961 1092 1132 +3 961 1132 992 +3 932 1051 1092 +3 932 1092 961 +3 903 1026 1051 +3 903 1051 932 +3 884 1004 1026 +3 884 1026 903 +3 873 986 1004 +3 873 1004 884 +3 862 975 986 +3 862 986 873 +3 857 968 975 +3 857 975 862 +3 859 965 968 +3 859 968 857 +3 868 967 965 +3 868 965 859 +3 879 973 967 +3 879 967 868 +3 890 982 973 +3 890 973 879 +3 919 1002 982 +3 919 982 890 +3 950 1022 1002 +3 950 1002 919 +3 979 1045 1022 +3 979 1022 950 +3 1017 1087 1045 +3 1017 1045 979 +3 1060 1124 1087 +3 1060 1087 1017 +3 1115 1158 1124 +3 1115 1124 1060 +3 1159 1218 1158 +3 1159 1158 1115 +3 1239 1271 1218 +3 1239 1218 1159 +3 1300 1333 1271 +3 1300 1271 1239 +3 1381 1407 1333 +3 1381 1333 1300 +3 1475 1486 1407 +3 1475 1407 1381 +3 1569 1486 1475 +3 1569 1495 1486 +3 1486 1495 1434 +3 1486 1434 1407 +3 1407 1434 1359 +3 1407 1359 1333 +3 1333 1359 1305 +3 1333 1305 1271 +3 1271 1305 1264 +3 1271 1264 1218 +3 1218 1264 1223 +3 1218 1223 1158 +3 1158 1223 1178 +3 1158 1178 1124 +3 1124 1178 1151 +3 1124 1151 1087 +3 1087 1151 1130 +3 1087 1130 1045 +3 1045 1130 1108 +3 1045 1108 1022 +3 1022 1108 1093 +3 1022 1093 1002 +3 1002 1093 1081 +3 1002 1081 982 +3 982 1081 1071 +3 982 1071 973 +3 973 1071 1068 +3 973 1068 967 +3 967 1068 1073 +3 967 1073 965 +3 965 1073 1086 +3 965 1086 968 +3 968 1086 1098 +3 968 1098 975 +3 975 1098 1117 +3 975 1117 986 +3 986 1117 1140 +3 986 1140 1004 +3 1004 1140 1157 +3 1004 1157 1026 +3 1026 1157 1191 +3 1026 1191 1051 +3 1051 1191 1243 +3 1051 1243 1092 +3 1092 1243 1279 +3 1092 1279 1132 +3 1132 1279 1327 +3 1132 1327 1164 +3 1164 1327 1385 +3 1164 1385 1228 +3 1228 1385 1458 +3 1228 1458 1281 +3 1281 1458 1522 +3 1281 1522 1342 +3 1342 1522 1599 +3 1342 1599 1424 +3 1424 1599 1668 +3 1424 1668 1500 +3 1500 1668 1755 +3 1500 1755 1584 +3 1584 1755 1836 +3 1584 1836 1666 +3 1666 1836 1911 +3 1666 1911 1769 +3 1769 1911 1998 +3 1769 1998 1852 +3 1852 1998 2069 +3 1852 2069 1943 +3 1943 2069 2156 +3 1943 2156 2029 +3 2029 2156 2230 +3 2029 2230 2116 +3 2116 2230 2311 +3 2116 2311 2200 +3 2200 2311 2385 +3 2200 2385 2291 +3 2291 2385 2470 +3 2291 2470 2370 +3 2370 2470 2543 +3 2370 2543 2459 +3 2459 2543 2620 +3 2459 2620 2544 +3 2544 2620 2702 +3 2544 2702 2630 +3 2630 2702 2774 +3 2630 2774 2713 +3 2713 2774 2857 +3 2713 2857 2807 +3 2807 2857 2930 +3 2807 2930 2887 +3 2887 2930 3020 +3 2887 3020 2978 +3 2978 3020 3093 +3 2978 3093 3064 +3 3064 3093 3180 +3 3064 3180 3157 +3 3157 3180 3261 +3 3157 3261 3246 +3 3246 3261 3332 +3 3261 3271 3332 +3 3180 3207 3271 +3 3180 3271 3261 +3 3093 3119 3207 +3 3093 3207 3180 +3 3020 3055 3119 +3 3020 3119 3093 +3 2930 2994 3055 +3 2930 3055 3020 +3 2857 2914 2994 +3 2857 2994 2930 +3 2774 2847 2914 +3 2774 2914 2857 +3 2702 2769 2847 +3 2702 2847 2774 +3 2620 2705 2769 +3 2620 2769 2702 +3 2543 2635 2705 +3 2543 2705 2620 +3 2470 2556 2635 +3 2470 2635 2543 +3 2385 2495 2556 +3 2385 2556 2470 +3 2311 2414 2495 +3 2311 2495 2385 +3 2230 2353 2414 +3 2230 2414 2311 +3 2156 2272 2353 +3 2156 2353 2230 +3 2069 2202 2272 +3 2069 2272 2156 +3 1998 2142 2202 +3 1998 2202 2069 +3 1911 2060 2142 +3 1911 2142 1998 +3 1836 1995 2060 +3 1836 2060 1911 +3 1755 1915 1995 +3 1755 1995 1836 +3 1668 1850 1915 +3 1668 1915 1755 +3 1599 1789 1850 +3 1599 1850 1668 +3 1522 1703 1789 +3 1522 1789 1599 +3 1458 1633 1703 +3 1458 1703 1522 +3 1385 1576 1633 +3 1385 1633 1458 +3 1327 1514 1576 +3 1327 1576 1385 +3 1279 1461 1514 +3 1279 1514 1327 +3 1243 1405 1461 +3 1243 1461 1279 +3 1191 1352 1405 +3 1191 1405 1243 +3 1157 1313 1352 +3 1157 1352 1191 +3 1140 1284 1313 +3 1140 1313 1157 +3 1117 1257 1284 +3 1117 1284 1140 +3 1098 1235 1257 +3 1098 1257 1117 +3 1086 1210 1235 +3 1086 1235 1098 +3 1073 1188 1210 +3 1073 1210 1086 +3 1068 1181 1188 +3 1068 1188 1073 +3 1071 1177 1181 +3 1071 1181 1068 +3 1081 1175 1177 +3 1081 1177 1071 +3 1093 1180 1175 +3 1093 1175 1081 +3 1108 1187 1180 +3 1108 1180 1093 +3 1130 1208 1187 +3 1130 1187 1108 +3 1151 1233 1208 +3 1151 1208 1130 +3 1178 1255 1233 +3 1178 1233 1151 +3 1223 1278 1255 +3 1223 1255 1178 +3 1264 1310 1278 +3 1264 1278 1223 +3 1305 1349 1310 +3 1305 1310 1264 +3 1359 1401 1349 +3 1359 1349 1305 +3 1434 1455 1401 +3 1434 1401 1359 +3 1495 1509 1455 +3 1495 1455 1434 +3 1569 1509 1495 +3 1569 1519 1509 +3 1509 1519 1477 +3 1509 1477 1455 +3 1455 1477 1442 +3 1455 1442 1401 +3 1401 1442 1400 +3 1401 1400 1349 +3 1349 1400 1361 +3 1349 1361 1310 +3 1310 1361 1338 +3 1310 1338 1278 +3 1278 1338 1318 +3 1278 1318 1255 +3 1255 1318 1302 +3 1255 1302 1233 +3 1233 1302 1295 +3 1233 1295 1208 +3 1208 1295 1289 +3 1208 1289 1187 +3 1187 1289 1288 +3 1187 1288 1180 +3 1180 1288 1290 +3 1180 1290 1175 +3 1175 1290 1299 +3 1175 1299 1177 +3 1177 1299 1309 +3 1177 1309 1181 +3 1181 1309 1328 +3 1181 1328 1188 +3 1188 1328 1348 +3 1188 1348 1210 +3 1210 1348 1377 +3 1210 1377 1235 +3 1235 1377 1418 +3 1235 1418 1257 +3 1257 1418 1454 +3 1257 1454 1284 +3 1284 1454 1491 +3 1284 1491 1313 +3 1313 1491 1536 +3 1313 1536 1352 +3 1352 1536 1589 +3 1352 1589 1405 +3 1405 1589 1639 +3 1405 1639 1461 +3 1461 1639 1692 +3 1461 1692 1514 +3 1514 1692 1765 +3 1514 1765 1576 +3 1576 1765 1828 +3 1576 1828 1633 +3 1633 1828 1882 +3 1633 1882 1703 +3 1703 1882 1954 +3 1703 1954 1789 +3 1789 1954 2013 +3 1789 2013 1850 +3 1850 2013 2071 +3 1850 2071 1915 +3 1915 2071 2147 +3 1915 2147 1995 +3 1995 2147 2203 +3 1995 2203 2060 +3 2060 2203 2261 +3 2060 2261 2142 +3 2142 2261 2339 +3 2142 2339 2202 +3 2202 2339 2393 +3 2202 2393 2272 +3 2272 2393 2465 +3 2272 2465 2353 +3 2353 2465 2530 +3 2353 2530 2414 +3 2414 2530 2591 +3 2414 2591 2495 +3 2495 2591 2662 +3 2495 2662 2556 +3 2556 2662 2720 +3 2556 2720 2635 +3 2635 2720 2787 +3 2635 2787 2705 +3 2705 2787 2852 +3 2705 2852 2769 +3 2769 2852 2912 +3 2769 2912 2847 +3 2847 2912 2982 +3 2847 2982 2914 +3 2914 2982 3039 +3 2914 3039 2994 +3 2994 3039 3098 +3 2994 3098 3055 +3 3055 3098 3167 +3 3055 3167 3119 +3 3119 3167 3228 +3 3119 3228 3207 +3 3207 3228 3284 +3 3207 3284 3271 +3 3271 3284 3332 +3 3284 3290 3332 +3 3228 3251 3290 +3 3228 3290 3284 +3 3167 3206 3251 +3 3167 3251 3228 +3 3098 3151 3206 +3 3098 3206 3167 +3 3039 3092 3151 +3 3039 3151 3098 +3 2982 3041 3092 +3 2982 3092 3039 +3 2912 2993 3041 +3 2912 3041 2982 +3 2852 2923 2993 +3 2852 2993 2912 +3 2787 2875 2923 +3 2787 2923 2852 +3 2720 2823 2875 +3 2720 2875 2787 +3 2662 2753 2823 +3 2662 2823 2720 +3 2591 2703 2753 +3 2591 2753 2662 +3 2530 2648 2703 +3 2530 2703 2591 +3 2465 2578 2648 +3 2465 2648 2530 +3 2393 2523 2578 +3 2393 2578 2465 +3 2339 2467 2523 +3 2339 2523 2393 +3 2261 2400 2467 +3 2261 2467 2339 +3 2203 2351 2400 +3 2203 2400 2261 +3 2147 2289 2351 +3 2147 2351 2203 +3 2071 2226 2289 +3 2071 2289 2147 +3 2013 2170 2226 +3 2013 2226 2071 +3 1954 2110 2170 +3 1954 2170 2013 +3 1882 2051 2110 +3 1882 2110 1954 +3 1828 2000 2051 +3 1828 2051 1882 +3 1765 1940 2000 +3 1765 2000 1828 +3 1692 1877 1940 +3 1692 1940 1765 +3 1639 1834 1877 +3 1639 1877 1692 +3 1589 1787 1834 +3 1589 1834 1639 +3 1536 1722 1787 +3 1536 1787 1589 +3 1491 1670 1722 +3 1491 1722 1536 +3 1454 1624 1670 +3 1454 1670 1491 +3 1418 1587 1624 +3 1418 1624 1454 +3 1377 1545 1587 +3 1377 1587 1418 +3 1348 1516 1545 +3 1348 1545 1377 +3 1328 1483 1516 +3 1328 1516 1348 +3 1309 1464 1483 +3 1309 1483 1328 +3 1299 1443 1464 +3 1299 1464 1309 +3 1290 1423 1443 +3 1290 1443 1299 +3 1288 1408 1423 +3 1288 1423 1290 +3 1289 1396 1408 +3 1289 1408 1288 +3 1295 1391 1396 +3 1295 1396 1289 +3 1302 1392 1391 +3 1302 1391 1295 +3 1318 1402 1392 +3 1318 1392 1302 +3 1338 1416 1402 +3 1338 1402 1318 +3 1361 1432 1416 +3 1361 1416 1338 +3 1400 1453 1432 +3 1400 1432 1361 +3 1442 1473 1453 +3 1442 1453 1400 +3 1477 1498 1473 +3 1477 1473 1442 +3 1519 1530 1498 +3 1519 1498 1477 +3 1569 1530 1519 +3 1569 1539 1530 +3 1530 1539 1524 +3 1530 1524 1498 +3 1498 1524 1507 +3 1498 1507 1473 +3 1473 1507 1494 +3 1473 1494 1453 +3 1453 1494 1488 +3 1453 1488 1432 +3 1432 1488 1484 +3 1432 1484 1416 +3 1416 1484 1485 +3 1416 1485 1402 +3 1402 1485 1490 +3 1402 1490 1392 +3 1392 1490 1496 +3 1392 1496 1391 +3 1391 1496 1515 +3 1391 1515 1396 +3 1396 1515 1528 +3 1396 1528 1408 +3 1408 1528 1551 +3 1408 1551 1423 +3 1423 1551 1579 +3 1423 1579 1443 +3 1443 1579 1609 +3 1443 1609 1464 +3 1464 1609 1634 +3 1464 1634 1483 +3 1483 1634 1674 +3 1483 1674 1516 +3 1516 1674 1711 +3 1516 1711 1545 +3 1545 1711 1766 +3 1545 1766 1587 +3 1587 1766 1812 +3 1587 1812 1624 +3 1624 1812 1855 +3 1624 1855 1670 +3 1670 1855 1900 +3 1670 1900 1722 +3 1722 1900 1961 +3 1722 1961 1787 +3 1787 1961 2009 +3 1787 2009 1834 +3 1834 2009 2053 +3 1834 2053 1877 +3 1877 2053 2105 +3 1877 2105 1940 +3 1940 2105 2163 +3 1940 2163 2000 +3 2000 2163 2213 +3 2000 2213 2051 +3 2051 2213 2260 +3 2051 2260 2110 +3 2110 2260 2330 +3 2110 2330 2170 +3 2170 2330 2376 +3 2170 2376 2226 +3 2226 2376 2426 +3 2226 2426 2289 +3 2289 2426 2492 +3 2289 2492 2351 +3 2351 2492 2542 +3 2351 2542 2400 +3 2400 2542 2595 +3 2400 2595 2467 +3 2467 2595 2657 +3 2467 2657 2523 +3 2523 2657 2706 +3 2523 2706 2578 +3 2578 2706 2751 +3 2578 2751 2648 +3 2648 2751 2820 +3 2648 2820 2703 +3 2703 2820 2860 +3 2703 2860 2753 +3 2753 2860 2913 +3 2753 2913 2823 +3 2823 2913 2964 +3 2823 2964 2875 +3 2875 2964 3017 +3 2875 3017 2923 +3 2923 3017 3062 +3 2923 3062 2993 +3 2993 3062 3102 +3 2993 3102 3041 +3 3041 3102 3156 +3 3041 3156 3092 +3 3092 3156 3202 +3 3092 3202 3151 +3 3151 3202 3241 +3 3151 3241 3206 +3 3206 3241 3276 +3 3206 3276 3251 +3 3251 3276 3301 +3 3251 3301 3290 +3 3290 3301 3332 +3 3301 3315 3332 +3 3276 3296 3315 +3 3276 3315 3301 +3 3241 3279 3296 +3 3241 3296 3276 +3 3202 3247 3279 +3 3202 3279 3241 +3 3156 3219 3247 +3 3156 3247 3202 +3 3102 3185 3219 +3 3102 3219 3156 +3 3062 3141 3185 +3 3062 3185 3102 +3 3017 3099 3141 +3 3017 3141 3062 +3 2964 3058 3099 +3 2964 3099 3017 +3 2913 3025 3058 +3 2913 3058 2964 +3 2860 2974 3025 +3 2860 3025 2913 +3 2820 2919 2974 +3 2820 2974 2860 +3 2751 2879 2919 +3 2751 2919 2820 +3 2706 2833 2879 +3 2706 2879 2751 +3 2657 2780 2833 +3 2657 2833 2706 +3 2595 2730 2780 +3 2595 2780 2657 +3 2542 2681 2730 +3 2542 2730 2595 +3 2492 2633 2681 +3 2492 2681 2542 +3 2426 2572 2633 +3 2426 2633 2492 +3 2376 2529 2572 +3 2376 2572 2426 +3 2330 2479 2529 +3 2330 2529 2376 +3 2260 2420 2479 +3 2260 2479 2330 +3 2213 2368 2420 +3 2213 2420 2260 +3 2163 2326 2368 +3 2163 2368 2213 +3 2105 2264 2326 +3 2105 2326 2163 +3 2053 2218 2264 +3 2053 2264 2105 +3 2009 2168 2218 +3 2009 2218 2053 +3 1961 2118 2168 +3 1961 2168 2009 +3 1900 2065 2118 +3 1900 2118 1961 +3 1855 2021 2065 +3 1855 2065 1900 +3 1812 1980 2021 +3 1812 2021 1855 +3 1766 1925 1980 +3 1766 1980 1812 +3 1711 1875 1925 +3 1711 1925 1766 +3 1674 1841 1875 +3 1674 1875 1711 +3 1634 1801 1841 +3 1634 1841 1674 +3 1609 1757 1801 +3 1609 1801 1634 +3 1579 1714 1757 +3 1579 1757 1609 +3 1551 1681 1714 +3 1551 1714 1579 +3 1528 1652 1681 +3 1528 1681 1551 +3 1515 1621 1652 +3 1515 1652 1528 +3 1496 1604 1621 +3 1496 1621 1515 +3 1490 1585 1604 +3 1490 1604 1496 +3 1485 1568 1585 +3 1485 1585 1490 +3 1484 1555 1568 +3 1484 1568 1485 +3 1488 1546 1555 +3 1488 1555 1484 +3 1494 1540 1546 +3 1494 1546 1488 +3 1507 1541 1540 +3 1507 1540 1494 +3 1524 1548 1541 +3 1524 1541 1507 +3 1539 1556 1548 +3 1539 1548 1524 +3 1569 1556 1539 +3 1569 1570 1556 +3 1556 1570 1575 +3 1556 1575 1548 +3 1548 1575 1582 +3 1548 1582 1541 +3 1541 1582 1594 +3 1541 1594 1540 +3 1540 1594 1610 +3 1540 1610 1546 +3 1546 1610 1623 +3 1546 1623 1555 +3 1555 1623 1648 +3 1555 1648 1568 +3 1568 1648 1675 +3 1568 1675 1585 +3 1585 1675 1705 +3 1585 1705 1604 +3 1604 1705 1740 +3 1604 1740 1621 +3 1621 1740 1790 +3 1621 1790 1652 +3 1652 1790 1826 +3 1652 1826 1681 +3 1681 1826 1858 +3 1681 1858 1714 +3 1714 1858 1897 +3 1714 1897 1757 +3 1757 1897 1948 +3 1757 1948 1801 +3 1801 1948 1992 +3 1801 1992 1841 +3 1841 1992 2037 +3 1841 2037 1875 +3 1875 2037 2076 +3 1875 2076 1925 +3 1925 2076 2137 +3 1925 2137 1980 +3 1980 2137 2180 +3 1980 2180 2021 +3 2021 2180 2227 +3 2021 2227 2065 +3 2065 2227 2278 +3 2065 2278 2118 +3 2118 2278 2333 +3 2118 2333 2168 +3 2168 2333 2377 +3 2168 2377 2218 +3 2218 2377 2424 +3 2218 2424 2264 +3 2264 2424 2483 +3 2264 2483 2326 +3 2326 2483 2535 +3 2326 2535 2368 +3 2368 2535 2573 +3 2368 2573 2420 +3 2420 2573 2632 +3 2420 2632 2479 +3 2479 2632 2680 +3 2479 2680 2529 +3 2529 2680 2727 +3 2529 2727 2572 +3 2572 2727 2773 +3 2572 2773 2633 +3 2633 2773 2829 +3 2633 2829 2681 +3 2681 2829 2871 +3 2681 2871 2730 +3 2730 2871 2916 +3 2730 2916 2780 +3 2780 2916 2962 +3 2780 2962 2833 +3 2833 2962 3009 +3 2833 3009 2879 +3 2879 3009 3048 +3 2879 3048 2919 +3 2919 3048 3079 +3 2919 3079 2974 +3 2974 3079 3116 +3 2974 3116 3025 +3 3025 3116 3165 +3 3025 3165 3058 +3 3058 3165 3199 +3 3058 3199 3099 +3 3099 3199 3230 +3 3099 3230 3141 +3 3141 3230 3257 +3 3141 3257 3185 +3 3185 3257 3281 +3 3185 3281 3219 +3 3219 3281 3293 +3 3219 3293 3247 +3 3247 3293 3309 +3 3247 3309 3279 +3 3279 3309 3320 +3 3279 3320 3296 +3 3296 3320 3328 +3 3296 3328 3315 +3 3315 3328 3332 +3 3328 3340 3332 +3 3320 3347 3340 +3 3320 3340 3328 +3 3309 3349 3347 +3 3309 3347 3320 +3 3293 3342 3349 +3 3293 3349 3309 +3 3281 3336 3342 +3 3281 3342 3293 +3 3257 3323 3336 +3 3257 3336 3281 +3 3230 3308 3323 +3 3230 3323 3257 +3 3199 3289 3308 +3 3199 3308 3230 +3 3165 3270 3289 +3 3165 3289 3199 +3 3116 3244 3270 +3 3116 3270 3165 +3 3079 3217 3244 +3 3079 3244 3116 +3 3048 3183 3217 +3 3048 3217 3079 +3 3009 3139 3183 +3 3009 3183 3048 +3 2962 3097 3139 +3 2962 3139 3009 +3 2916 3059 3097 +3 2916 3097 2962 +3 2871 3027 3059 +3 2871 3059 2916 +3 2829 2977 3027 +3 2829 3027 2871 +3 2773 2922 2977 +3 2773 2977 2829 +3 2727 2885 2922 +3 2727 2922 2773 +3 2680 2839 2885 +3 2680 2885 2727 +3 2632 2788 2839 +3 2632 2839 2680 +3 2573 2735 2788 +3 2573 2788 2632 +3 2535 2690 2735 +3 2535 2735 2573 +3 2483 2645 2690 +3 2483 2690 2535 +3 2424 2584 2645 +3 2424 2645 2483 +3 2377 2539 2584 +3 2377 2584 2424 +3 2333 2488 2539 +3 2333 2539 2377 +3 2278 2430 2488 +3 2278 2488 2333 +3 2227 2381 2430 +3 2227 2430 2278 +3 2180 2335 2381 +3 2180 2381 2227 +3 2137 2283 2335 +3 2137 2335 2180 +3 2076 2228 2283 +3 2076 2283 2137 +3 2037 2183 2228 +3 2037 2228 2076 +3 1992 2138 2183 +3 1992 2183 2037 +3 1948 2075 2138 +3 1948 2138 1992 +3 1897 2035 2075 +3 1897 2075 1948 +3 1858 1990 2035 +3 1858 2035 1897 +3 1826 1942 1990 +3 1826 1990 1858 +3 1790 1894 1942 +3 1790 1942 1826 +3 1740 1854 1894 +3 1740 1894 1790 +3 1705 1820 1854 +3 1705 1854 1740 +3 1675 1784 1820 +3 1675 1820 1705 +3 1648 1731 1784 +3 1648 1784 1675 +3 1623 1693 1731 +3 1623 1731 1648 +3 1610 1664 1693 +3 1610 1693 1623 +3 1594 1638 1664 +3 1594 1664 1610 +3 1582 1615 1638 +3 1582 1638 1594 +3 1575 1601 1615 +3 1575 1615 1582 +3 1570 1583 1601 +3 1570 1601 1575 +3 1569 1583 1570 +3 1569 1595 1583 +3 1583 1595 1618 +3 1583 1618 1601 +3 1601 1618 1651 +3 1601 1651 1615 +3 1615 1651 1686 +3 1615 1686 1638 +3 1638 1686 1726 +3 1638 1726 1664 +3 1664 1726 1783 +3 1664 1783 1693 +3 1693 1783 1824 +3 1693 1824 1731 +3 1731 1824 1863 +3 1731 1863 1784 +3 1784 1863 1905 +3 1784 1905 1820 +3 1820 1905 1967 +3 1820 1967 1854 +3 1854 1967 2010 +3 1854 2010 1894 +3 1894 2010 2057 +3 1894 2057 1942 +3 1942 2057 2108 +3 1942 2108 1990 +3 1990 2108 2164 +3 1990 2164 2035 +3 2035 2164 2212 +3 2035 2212 2075 +3 2075 2212 2259 +3 2075 2259 2138 +3 2138 2259 2325 +3 2138 2325 2183 +3 2183 2325 2374 +3 2183 2374 2228 +3 2228 2374 2423 +3 2228 2423 2283 +3 2283 2423 2484 +3 2283 2484 2335 +3 2335 2484 2537 +3 2335 2537 2381 +3 2381 2537 2587 +3 2381 2587 2430 +3 2430 2587 2649 +3 2430 2649 2488 +3 2488 2649 2696 +3 2488 2696 2539 +3 2539 2696 2743 +3 2539 2743 2584 +3 2584 2743 2805 +3 2584 2805 2645 +3 2645 2805 2853 +3 2645 2853 2690 +3 2690 2853 2898 +3 2690 2898 2735 +3 2735 2898 2945 +3 2735 2945 2788 +3 2788 2945 3002 +3 2788 3002 2839 +3 2839 3002 3045 +3 2839 3045 2885 +3 2885 3045 3084 +3 2885 3084 2922 +3 2922 3084 3126 +3 2922 3126 2977 +3 2977 3126 3181 +3 2977 3181 3027 +3 3027 3181 3221 +3 3027 3221 3059 +3 3059 3221 3254 +3 3059 3254 3097 +3 3097 3254 3288 +3 3097 3288 3139 +3 3139 3288 3311 +3 3139 3311 3183 +3 3183 3311 3337 +3 3183 3337 3217 +3 3217 3337 3359 +3 3217 3359 3244 +3 3244 3359 3375 +3 3244 3375 3270 +3 3270 3375 3384 +3 3270 3384 3289 +3 3289 3384 3391 +3 3289 3391 3308 +3 3308 3391 3399 +3 3308 3399 3323 +3 3323 3399 3398 +3 3323 3398 3336 +3 3336 3398 3390 +3 3336 3390 3342 +3 3342 3390 3383 +3 3342 3383 3349 +3 3349 3383 3372 +3 3349 3372 3347 +3 3347 3372 3357 +3 3347 3357 3340 +3 3340 3357 3332 +3 3357 3369 3332 +3 3372 3395 3369 +3 3372 3369 3357 +3 3383 3420 3395 +3 3383 3395 3372 +3 3390 3434 3420 +3 3390 3420 3383 +3 3398 3451 3434 +3 3398 3434 3390 +3 3399 3464 3451 +3 3399 3451 3398 +3 3391 3473 3464 +3 3391 3464 3399 +3 3384 3475 3473 +3 3384 3473 3391 +3 3375 3474 3475 +3 3375 3475 3384 +3 3359 3465 3474 +3 3359 3474 3375 +3 3337 3454 3465 +3 3337 3465 3359 +3 3311 3439 3454 +3 3311 3454 3337 +3 3288 3423 3439 +3 3288 3439 3311 +3 3254 3404 3423 +3 3254 3423 3288 +3 3221 3376 3404 +3 3221 3404 3254 +3 3181 3341 3376 +3 3181 3376 3221 +3 3126 3305 3341 +3 3126 3341 3181 +3 3084 3269 3305 +3 3084 3305 3126 +3 3045 3225 3269 +3 3045 3269 3084 +3 3002 3178 3225 +3 3002 3225 3045 +3 2945 3115 3178 +3 2945 3178 3002 +3 2898 3069 3115 +3 2898 3115 2945 +3 2853 3029 3069 +3 2853 3069 2898 +3 2805 2970 3029 +3 2805 3029 2853 +3 2743 2910 2970 +3 2743 2970 2805 +3 2696 2859 2910 +3 2696 2910 2743 +3 2649 2810 2859 +3 2649 2859 2696 +3 2587 2740 2810 +3 2587 2810 2649 +3 2537 2692 2740 +3 2537 2740 2587 +3 2484 2636 2692 +3 2484 2692 2537 +3 2423 2569 2636 +3 2423 2636 2484 +3 2374 2518 2569 +3 2374 2569 2423 +3 2325 2458 2518 +3 2325 2518 2374 +3 2259 2397 2458 +3 2259 2458 2325 +3 2212 2347 2397 +3 2212 2397 2259 +3 2164 2287 2347 +3 2164 2347 2212 +3 2108 2225 2287 +3 2108 2287 2164 +3 2057 2172 2225 +3 2057 2225 2108 +3 2010 2112 2172 +3 2010 2172 2057 +3 1967 2056 2112 +3 1967 2112 2010 +3 1905 2008 2056 +3 1905 2056 1967 +3 1863 1951 2008 +3 1863 2008 1905 +3 1824 1890 1951 +3 1824 1951 1863 +3 1783 1844 1890 +3 1783 1890 1824 +3 1726 1798 1844 +3 1726 1844 1783 +3 1686 1737 1798 +3 1686 1798 1726 +3 1651 1687 1737 +3 1651 1737 1686 +3 1618 1641 1687 +3 1618 1687 1651 +3 1595 1607 1641 +3 1595 1641 1618 +3 1569 1607 1595 +3 1569 1614 1607 +3 1607 1614 1665 +3 1607 1665 1641 +3 1641 1665 1724 +3 1641 1724 1687 +3 1687 1724 1794 +3 1687 1794 1737 +3 1737 1794 1849 +3 1737 1849 1798 +3 1798 1849 1903 +3 1798 1903 1844 +3 1844 1903 1973 +3 1844 1973 1890 +3 1890 1973 2028 +3 1890 2028 1951 +3 1951 2028 2084 +3 1951 2084 2008 +3 2008 2084 2157 +3 2008 2157 2056 +3 2056 2157 2214 +3 2056 2214 2112 +3 2112 2214 2280 +3 2112 2280 2172 +3 2172 2280 2346 +3 2172 2346 2225 +3 2225 2346 2399 +3 2225 2399 2287 +3 2287 2399 2472 +3 2287 2472 2347 +3 2347 2472 2536 +3 2347 2536 2397 +3 2397 2536 2593 +3 2397 2593 2458 +3 2458 2593 2661 +3 2458 2661 2518 +3 2518 2661 2715 +3 2518 2715 2569 +3 2569 2715 2782 +3 2569 2782 2636 +3 2636 2782 2846 +3 2636 2846 2692 +3 2692 2846 2902 +3 2692 2902 2740 +3 2740 2902 2969 +3 2740 2969 2810 +3 2810 2969 3033 +3 2810 3033 2859 +3 2859 3033 3080 +3 2859 3080 2910 +3 2910 3080 3149 +3 2910 3149 2970 +3 2970 3149 3211 +3 2970 3211 3029 +3 3029 3211 3265 +3 3029 3265 3069 +3 3069 3265 3310 +3 3069 3310 3115 +3 3115 3310 3363 +3 3115 3363 3178 +3 3178 3363 3400 +3 3178 3400 3225 +3 3225 3400 3433 +3 3225 3433 3269 +3 3269 3433 3470 +3 3269 3470 3305 +3 3305 3470 3507 +3 3305 3507 3341 +3 3341 3507 3538 +3 3341 3538 3376 +3 3376 3538 3554 +3 3376 3554 3404 +3 3404 3554 3566 +3 3404 3566 3423 +3 3423 3566 3576 +3 3423 3576 3439 +3 3439 3576 3585 +3 3439 3585 3454 +3 3454 3585 3587 +3 3454 3587 3465 +3 3465 3587 3582 +3 3465 3582 3474 +3 3474 3582 3571 +3 3474 3571 3475 +3 3475 3571 3560 +3 3475 3560 3473 +3 3473 3560 3546 +3 3473 3546 3464 +3 3464 3546 3519 +3 3464 3519 3451 +3 3451 3519 3484 +3 3451 3484 3434 +3 3434 3484 3450 +3 3434 3450 3420 +3 3420 3450 3419 +3 3420 3419 3395 +3 3395 3419 3378 +3 3395 3378 3369 +3 3369 3378 3332 +3 3378 3388 3332 +3 3419 3436 3388 +3 3419 3388 3378 +3 3450 3489 3436 +3 3450 3436 3419 +3 3484 3541 3489 +3 3484 3489 3450 +3 3519 3575 3541 +3 3519 3541 3484 +3 3546 3607 3575 +3 3546 3575 3519 +3 3560 3628 3607 +3 3560 3607 3546 +3 3571 3648 3628 +3 3571 3628 3560 +3 3582 3661 3648 +3 3582 3648 3571 +3 3587 3675 3661 +3 3587 3661 3582 +3 3585 3684 3675 +3 3585 3675 3587 +3 3576 3688 3684 +3 3576 3684 3585 +3 3566 3685 3688 +3 3566 3688 3576 +3 3554 3677 3685 +3 3554 3685 3566 +3 3538 3663 3677 +3 3538 3677 3554 +3 3507 3649 3663 +3 3507 3663 3538 +3 3470 3631 3649 +3 3470 3649 3507 +3 3433 3609 3631 +3 3433 3631 3470 +3 3400 3577 3609 +3 3400 3609 3433 +3 3363 3544 3577 +3 3363 3577 3400 +3 3310 3492 3544 +3 3310 3544 3363 +3 3265 3441 3492 +3 3265 3492 3310 +3 3211 3393 3441 +3 3211 3441 3265 +3 3149 3338 3393 +3 3149 3393 3211 +3 3080 3282 3338 +3 3080 3338 3149 +3 3033 3216 3282 +3 3033 3282 3080 +3 2969 3142 3216 +3 2969 3216 3033 +3 2902 3071 3142 +3 2902 3142 2969 +3 2846 3010 3071 +3 2846 3071 2902 +3 2782 2932 3010 +3 2782 3010 2846 +3 2715 2869 2932 +3 2715 2932 2782 +3 2661 2804 2869 +3 2661 2869 2715 +3 2593 2728 2804 +3 2593 2804 2661 +3 2536 2666 2728 +3 2536 2728 2593 +3 2472 2589 2666 +3 2472 2666 2536 +3 2399 2522 2589 +3 2399 2589 2472 +3 2346 2456 2522 +3 2346 2522 2399 +3 2280 2382 2456 +3 2280 2456 2346 +3 2214 2316 2382 +3 2214 2382 2280 +3 2157 2241 2316 +3 2157 2316 2214 +3 2084 2178 2241 +3 2084 2241 2157 +3 2028 2102 2178 +3 2028 2178 2084 +3 1973 2040 2102 +3 1973 2102 2028 +3 1903 1976 2040 +3 1903 2040 1973 +3 1849 1896 1976 +3 1849 1976 1903 +3 1794 1835 1896 +3 1794 1896 1849 +3 1724 1768 1835 +3 1724 1835 1794 +3 1665 1688 1768 +3 1665 1768 1724 +3 1614 1627 1688 +3 1614 1688 1665 +3 1569 1627 1614 +3 1569 1635 1627 +3 1627 1635 1710 +3 1627 1710 1688 +3 1688 1710 1800 +3 1688 1800 1768 +3 1768 1800 1869 +3 1768 1869 1835 +3 1835 1869 1958 +3 1835 1958 1896 +3 1896 1958 2027 +3 1896 2027 1976 +3 1976 2027 2101 +3 1976 2101 2040 +3 2040 2101 2184 +3 2040 2184 2102 +3 2102 2184 2249 +3 2102 2249 2178 +3 2178 2249 2338 +3 2178 2338 2241 +3 2241 2338 2403 +3 2241 2403 2316 +3 2316 2403 2490 +3 2316 2490 2382 +3 2382 2490 2559 +3 2382 2559 2456 +3 2456 2559 2646 +3 2456 2646 2522 +3 2522 2646 2712 +3 2522 2712 2589 +3 2589 2712 2792 +3 2589 2792 2666 +3 2666 2792 2867 +3 2666 2867 2728 +3 2728 2867 2935 +3 2728 2935 2804 +3 2804 2935 3028 +3 2804 3028 2869 +3 2869 3028 3095 +3 2869 3095 2932 +3 2932 3095 3182 +3 2932 3182 3010 +3 3010 3182 3258 +3 3010 3258 3071 +3 3071 3258 3324 +3 3071 3324 3142 +3 3142 3324 3396 +3 3142 3396 3216 +3 3216 3396 3455 +3 3216 3455 3282 +3 3282 3455 3526 +3 3282 3526 3338 +3 3338 3526 3579 +3 3338 3579 3393 +3 3393 3579 3621 +3 3393 3621 3441 +3 3441 3621 3654 +3 3441 3654 3492 +3 3492 3654 3701 +3 3492 3701 3544 +3 3544 3701 3734 +3 3544 3734 3577 +3 3577 3734 3751 +3 3577 3751 3609 +3 3609 3751 3765 +3 3609 3765 3631 +3 3631 3765 3780 +3 3631 3780 3649 +3 3649 3780 3791 +3 3649 3791 3663 +3 3663 3791 3795 +3 3663 3795 3677 +3 3677 3795 3796 +3 3677 3796 3685 +3 3685 3796 3792 +3 3685 3792 3688 +3 3688 3792 3782 +3 3688 3782 3684 +3 3684 3782 3767 +3 3684 3767 3675 +3 3675 3767 3753 +3 3675 3753 3661 +3 3661 3753 3736 +3 3661 3736 3648 +3 3648 3736 3707 +3 3648 3707 3628 +3 3628 3707 3655 +3 3628 3655 3607 +3 3607 3655 3625 +3 3607 3625 3575 +3 3575 3625 3584 +3 3575 3584 3541 +3 3541 3584 3533 +3 3541 3533 3489 +3 3489 3533 3460 +3 3489 3460 3436 +3 3436 3460 3402 +3 3436 3402 3388 +3 3388 3402 3332 +3 3402 3412 3332 +3 3460 3487 3412 +3 3460 3412 3402 +3 3533 3564 3487 +3 3533 3487 3460 +3 3584 3619 3564 +3 3584 3564 3533 +3 3625 3669 3619 +3 3625 3619 3584 +3 3655 3728 3669 +3 3655 3669 3625 +3 3707 3758 3728 +3 3707 3728 3655 +3 3736 3798 3758 +3 3736 3758 3707 +3 3753 3832 3798 +3 3753 3798 3736 +3 3767 3859 3832 +3 3767 3832 3753 +3 3782 3877 3859 +3 3782 3859 3767 +3 3792 3893 3877 +3 3792 3877 3782 +3 3796 3900 3893 +3 3796 3893 3792 +3 3795 3906 3900 +3 3795 3900 3796 +3 3791 3908 3906 +3 3791 3906 3795 +3 3780 3902 3908 +3 3780 3908 3791 +3 3765 3894 3902 +3 3765 3902 3780 +3 3751 3882 3894 +3 3751 3894 3765 +3 3734 3862 3882 +3 3734 3882 3751 +3 3701 3836 3862 +3 3701 3862 3734 +3 3654 3805 3836 +3 3654 3836 3701 +3 3621 3768 3805 +3 3621 3805 3654 +3 3579 3741 3768 +3 3579 3768 3621 +3 3526 3682 3741 +3 3526 3741 3579 +3 3455 3634 3682 +3 3455 3682 3526 +3 3396 3578 3634 +3 3396 3634 3455 +3 3324 3511 3578 +3 3324 3578 3396 +3 3258 3429 3511 +3 3258 3511 3324 +3 3182 3354 3429 +3 3182 3429 3258 +3 3095 3272 3354 +3 3095 3354 3182 +3 3028 3189 3272 +3 3028 3272 3095 +3 2935 3090 3189 +3 2935 3189 3028 +3 2867 3012 3090 +3 2867 3090 2935 +3 2792 2918 3012 +3 2792 3012 2867 +3 2712 2840 2918 +3 2712 2918 2792 +3 2646 2748 2840 +3 2646 2840 2712 +3 2559 2669 2748 +3 2559 2748 2646 +3 2490 2582 2669 +3 2490 2669 2559 +3 2403 2506 2582 +3 2403 2582 2490 +3 2338 2416 2506 +3 2338 2506 2403 +3 2249 2340 2416 +3 2249 2416 2338 +3 2184 2246 2340 +3 2184 2340 2249 +3 2101 2169 2246 +3 2101 2246 2184 +3 2027 2079 2169 +3 2027 2169 2101 +3 1958 2004 2079 +3 1958 2079 2027 +3 1869 1910 2004 +3 1869 2004 1958 +3 1800 1833 1910 +3 1800 1910 1869 +3 1710 1738 1833 +3 1710 1833 1800 +3 1635 1649 1738 +3 1635 1738 1710 +3 1569 1649 1635 +3 1569 1659 1649 +3 1649 1659 1767 +3 1649 1767 1738 +3 1738 1767 1859 +3 1738 1859 1833 +3 1833 1859 1965 +3 1833 1965 1910 +3 1910 1965 2045 +3 1910 2045 2004 +3 2004 2045 2146 +3 2004 2146 2079 +3 2079 2146 2229 +3 2079 2229 2169 +3 2169 2229 2327 +3 2169 2327 2246 +3 2246 2327 2405 +3 2246 2405 2340 +3 2340 2405 2507 +3 2340 2507 2416 +3 2416 2507 2592 +3 2416 2592 2506 +3 2506 2592 2686 +3 2506 2686 2582 +3 2582 2686 2771 +3 2582 2771 2669 +3 2669 2771 2868 +3 2669 2868 2748 +3 2748 2868 2960 +3 2748 2960 2840 +3 2840 2960 3053 +3 2840 3053 2918 +3 2918 3053 3154 +3 2918 3154 3012 +3 3012 3154 3256 +3 3012 3256 3090 +3 3090 3256 3348 +3 3090 3348 3189 +3 3189 3348 3431 +3 3189 3431 3272 +3 3272 3431 3528 +3 3272 3528 3354 +3 3354 3528 3603 +3 3354 3603 3429 +3 3429 3603 3660 +3 3429 3660 3511 +3 3511 3660 3738 +3 3511 3738 3578 +3 3578 3738 3779 +3 3578 3779 3634 +3 3634 3779 3831 +3 3634 3831 3682 +3 3682 3831 3871 +3 3682 3871 3741 +3 3741 3871 3907 +3 3741 3907 3768 +3 3768 3907 3937 +3 3768 3937 3805 +3 3805 3937 3960 +3 3805 3960 3836 +3 3836 3960 3983 +3 3836 3983 3862 +3 3862 3983 4000 +3 3862 4000 3882 +3 3882 4000 4014 +3 3882 4014 3894 +3 3894 4014 4016 +3 3894 4016 3902 +3 3902 4016 4015 +3 3902 4015 3908 +3 3908 4015 4012 +3 3908 4012 3906 +3 3906 4012 3997 +3 3906 3997 3900 +3 3900 3997 3978 +3 3900 3978 3893 +3 3893 3978 3958 +3 3893 3958 3877 +3 3877 3958 3932 +3 3877 3932 3859 +3 3859 3932 3901 +3 3859 3901 3832 +3 3832 3901 3864 +3 3832 3864 3798 +3 3798 3864 3821 +3 3798 3821 3758 +3 3758 3821 3772 +3 3758 3772 3728 +3 3728 3772 3727 +3 3728 3727 3669 +3 3669 3727 3653 +3 3669 3653 3619 +3 3619 3653 3595 +3 3619 3595 3564 +3 3564 3595 3515 +3 3564 3515 3487 +3 3487 3515 3422 +3 3487 3422 3412 +3 3412 3422 3332 +3 3422 3430 3332 +3 3515 3539 3430 +3 3515 3430 3422 +3 3595 3616 3539 +3 3595 3539 3515 +3 3653 3696 3616 +3 3653 3616 3595 +3 3727 3759 3696 +3 3727 3696 3653 +3 3772 3824 3759 +3 3772 3759 3727 +3 3821 3881 3824 +3 3821 3824 3772 +3 3864 3927 3881 +3 3864 3881 3821 +3 3901 3967 3927 +3 3901 3927 3864 +3 3932 4013 3967 +3 3932 3967 3901 +3 3958 4038 4013 +3 3958 4013 3932 +3 3978 4061 4038 +3 3978 4038 3958 +3 3997 4079 4061 +3 3997 4061 3978 +3 4012 4097 4079 +3 4012 4079 3997 +3 4015 4110 4097 +3 4015 4097 4012 +3 4016 4117 4110 +3 4016 4110 4015 +3 4014 4115 4117 +3 4014 4117 4016 +3 4000 4105 4115 +3 4000 4115 4014 +3 3983 4092 4105 +3 3983 4105 4000 +3 3960 4075 4092 +3 3960 4092 3983 +3 3937 4054 4075 +3 3937 4075 3960 +3 3907 4029 4054 +3 3907 4054 3937 +3 3871 3999 4029 +3 3871 4029 3907 +3 3831 3956 3999 +3 3831 3999 3871 +3 3779 3916 3956 +3 3779 3956 3831 +3 3738 3863 3916 +3 3738 3916 3779 +3 3660 3806 3863 +3 3660 3863 3738 +3 3603 3749 3806 +3 3603 3806 3660 +3 3528 3670 3749 +3 3528 3749 3603 +3 3431 3600 3670 +3 3431 3670 3528 +3 3348 3508 3600 +3 3348 3600 3431 +3 3256 3409 3508 +3 3256 3508 3348 +3 3154 3299 3409 +3 3154 3409 3256 +3 3053 3200 3299 +3 3053 3299 3154 +3 2960 3078 3200 +3 2960 3200 3053 +3 2868 2988 3078 +3 2868 3078 2960 +3 2771 2881 2988 +3 2771 2988 2868 +3 2686 2778 2881 +3 2686 2881 2771 +3 2592 2682 2778 +3 2592 2778 2686 +3 2507 2579 2682 +3 2507 2682 2592 +3 2405 2489 2579 +3 2405 2579 2507 +3 2327 2386 2489 +3 2327 2489 2405 +3 2229 2294 2386 +3 2229 2386 2327 +3 2146 2191 2294 +3 2146 2294 2229 +3 2045 2086 2191 +3 2045 2191 2146 +3 1965 1996 2086 +3 1965 2086 2045 +3 1859 1887 1996 +3 1859 1996 1965 +3 1767 1793 1887 +3 1767 1887 1859 +3 1659 1669 1793 +3 1659 1793 1767 +3 1569 1669 1659 +3 1569 1679 1669 +3 1669 1679 1807 +3 1669 1807 1793 +3 1793 1807 1912 +3 1793 1912 1887 +3 1887 1912 2025 +3 1887 2025 1996 +3 1996 2025 2144 +3 1996 2144 2086 +3 2086 2144 2238 +3 2086 2238 2191 +3 2191 2238 2352 +3 2191 2352 2294 +3 2294 2352 2453 +3 2294 2453 2386 +3 2386 2453 2551 +3 2386 2551 2489 +3 2489 2551 2667 +3 2489 2667 2579 +3 2579 2667 2758 +3 2579 2758 2682 +3 2682 2758 2878 +3 2682 2878 2778 +3 2778 2878 2992 +3 2778 2992 2881 +3 2881 2992 3096 +3 2881 3096 2988 +3 2988 3096 3223 +3 2988 3223 3078 +3 3078 3223 3335 +3 3078 3335 3200 +3 3200 3335 3442 +3 3200 3442 3299 +3 3299 3442 3557 +3 3299 3557 3409 +3 3409 3557 3642 +3 3409 3642 3508 +3 3508 3642 3740 +3 3508 3740 3600 +3 3600 3740 3802 +3 3600 3802 3670 +3 3670 3802 3872 +3 3670 3872 3749 +3 3749 3872 3931 +3 3749 3931 3806 +3 3806 3931 3986 +3 3806 3986 3863 +3 3863 3986 4034 +3 3863 4034 3916 +3 3916 4034 4072 +3 3916 4072 3956 +3 3956 4072 4113 +3 3956 4113 3999 +3 3999 4113 4143 +3 3999 4143 4029 +3 4029 4143 4164 +3 4029 4164 4054 +3 4054 4164 4180 +3 4054 4180 4075 +3 4075 4180 4193 +3 4075 4193 4092 +3 4092 4193 4201 +3 4092 4201 4105 +3 4105 4201 4207 +3 4105 4207 4115 +3 4115 4207 4200 +3 4115 4200 4117 +3 4117 4200 4192 +3 4117 4192 4110 +3 4110 4192 4179 +3 4110 4179 4097 +3 4097 4179 4163 +3 4097 4163 4079 +3 4079 4163 4141 +3 4079 4141 4061 +3 4061 4141 4112 +3 4061 4112 4038 +3 4038 4112 4071 +3 4038 4071 4013 +3 4013 4071 4032 +3 4013 4032 3967 +3 3967 4032 3985 +3 3967 3985 3927 +3 3927 3985 3930 +3 3927 3930 3881 +3 3881 3930 3870 +3 3881 3870 3824 +3 3824 3870 3801 +3 3824 3801 3759 +3 3759 3801 3739 +3 3759 3739 3696 +3 3696 3739 3641 +3 3696 3641 3616 +3 3616 3641 3555 +3 3616 3555 3539 +3 3539 3555 3438 +3 3539 3438 3430 +3 3430 3438 3332 +3 3438 3449 3332 +3 3555 3572 3449 +3 3555 3449 3438 +3 3641 3665 3572 +3 3641 3572 3555 +3 3739 3756 3665 +3 3739 3665 3641 +3 3801 3844 3756 +3 3801 3756 3739 +3 3870 3917 3844 +3 3870 3844 3801 +3 3930 3979 3917 +3 3930 3917 3870 +3 3985 4041 3979 +3 3985 3979 3930 +3 4032 4088 4041 +3 4032 4041 3985 +3 4071 4136 4088 +3 4071 4088 4032 +3 4112 4173 4136 +3 4112 4136 4071 +3 4141 4216 4173 +3 4141 4173 4112 +3 4163 4243 4216 +3 4163 4216 4141 +3 4179 4259 4243 +3 4179 4243 4163 +3 4192 4273 4259 +3 4192 4259 4179 +3 4200 4287 4273 +3 4200 4273 4192 +3 4207 4294 4287 +3 4207 4287 4200 +3 4201 4295 4294 +3 4201 4294 4207 +3 4193 4289 4295 +3 4193 4295 4201 +3 4180 4274 4289 +3 4180 4289 4193 +3 4164 4262 4274 +3 4164 4274 4180 +3 4143 4247 4262 +3 4143 4262 4164 +3 4113 4219 4247 +3 4113 4247 4143 +3 4072 4176 4219 +3 4072 4219 4113 +3 4034 4145 4176 +3 4034 4176 4072 +3 3986 4094 4145 +3 3986 4145 4034 +3 3931 4046 4094 +3 3931 4094 3986 +3 3872 3987 4046 +3 3872 4046 3931 +3 3802 3921 3987 +3 3802 3987 3872 +3 3740 3855 3921 +3 3740 3921 3802 +3 3642 3764 3855 +3 3642 3855 3740 +3 3557 3676 3764 +3 3557 3764 3642 +3 3442 3586 3676 +3 3442 3676 3557 +3 3335 3461 3586 +3 3335 3586 3442 +3 3223 3344 3461 +3 3223 3461 3335 +3 3096 3224 3344 +3 3096 3344 3223 +3 2992 3085 3224 +3 2992 3224 3096 +3 2878 2972 3085 +3 2878 3085 2992 +3 2758 2855 2972 +3 2758 2972 2878 +3 2667 2734 2855 +3 2667 2855 2758 +3 2551 2625 2734 +3 2551 2734 2667 +3 2453 2511 2625 +3 2453 2625 2551 +3 2352 2396 2511 +3 2352 2511 2453 +3 2238 2292 2396 +3 2238 2396 2352 +3 2144 2177 2292 +3 2144 2292 2238 +3 2025 2058 2177 +3 2025 2177 2144 +3 1912 1945 2058 +3 1912 2058 2025 +3 1807 1827 1945 +3 1807 1945 1912 +3 1679 1689 1827 +3 1679 1827 1807 +3 1569 1689 1679 +3 1569 1698 1689 +3 1689 1698 1840 +3 1689 1840 1827 +3 1827 1840 1974 +3 1827 1974 1945 +3 1945 1974 2085 +3 1945 2085 2058 +3 2058 2085 2210 +3 2058 2210 2177 +3 2177 2210 2337 +3 2177 2337 2292 +3 2292 2337 2451 +3 2292 2451 2396 +3 2396 2451 2567 +3 2396 2567 2511 +3 2511 2567 2693 +3 2511 2693 2625 +3 2625 2693 2818 +3 2625 2818 2734 +3 2734 2818 2929 +3 2734 2929 2855 +3 2855 2929 3063 +3 2855 3063 2972 +3 2972 3063 3204 +3 2972 3204 3085 +3 3085 3204 3334 +3 3085 3334 3224 +3 3224 3334 3457 +3 3224 3457 3344 +3 3344 3457 3593 +3 3344 3593 3461 +3 3461 3593 3700 +3 3461 3700 3586 +3 3586 3700 3789 +3 3586 3789 3676 +3 3676 3789 3880 +3 3676 3880 3764 +3 3764 3880 3955 +3 3764 3955 3855 +3 3855 3955 4026 +3 3855 4026 3921 +3 3921 4026 4087 +3 3921 4087 3987 +3 3987 4087 4151 +3 3987 4151 4046 +3 4046 4151 4190 +3 4046 4190 4094 +3 4094 4190 4244 +3 4094 4244 4145 +3 4145 4244 4271 +3 4145 4271 4176 +3 4176 4271 4309 +3 4176 4309 4219 +3 4219 4309 4337 +3 4219 4337 4247 +3 4247 4337 4352 +3 4247 4352 4262 +3 4262 4352 4368 +3 4262 4368 4274 +3 4274 4368 4375 +3 4274 4375 4289 +3 4289 4375 4377 +3 4289 4377 4295 +3 4295 4377 4374 +3 4295 4374 4294 +3 4294 4374 4367 +3 4294 4367 4287 +3 4287 4367 4351 +3 4287 4351 4273 +3 4273 4351 4335 +3 4273 4335 4259 +3 4259 4335 4308 +3 4259 4308 4243 +3 4243 4308 4270 +3 4243 4270 4216 +3 4216 4270 4242 +3 4216 4242 4173 +3 4173 4242 4188 +3 4173 4188 4136 +3 4136 4188 4149 +3 4136 4149 4088 +3 4088 4149 4085 +3 4088 4085 4041 +3 4041 4085 4024 +3 4041 4024 3979 +3 3979 4024 3954 +3 3979 3954 3917 +3 3917 3954 3878 +3 3917 3878 3844 +3 3844 3878 3788 +3 3844 3788 3756 +3 3756 3788 3697 +3 3756 3697 3665 +3 3665 3697 3590 +3 3665 3590 3572 +3 3572 3590 3456 +3 3572 3456 3449 +3 3449 3456 3332 +3 3456 3468 3332 +3 3590 3605 3468 +3 3590 3468 3456 +3 3697 3722 3605 +3 3697 3605 3590 +3 3788 3816 3722 +3 3788 3722 3697 +3 3878 3912 3816 +3 3878 3816 3788 +3 3954 3994 3912 +3 3954 3912 3878 +3 4024 4067 3994 +3 4024 3994 3954 +3 4085 4134 4067 +3 4085 4067 4024 +3 4149 4189 4134 +3 4149 4134 4085 +3 4188 4250 4189 +3 4188 4189 4149 +3 4242 4296 4250 +3 4242 4250 4188 +3 4270 4339 4296 +3 4270 4296 4242 +3 4308 4371 4339 +3 4308 4339 4270 +3 4335 4402 4371 +3 4335 4371 4308 +3 4351 4426 4402 +3 4351 4402 4335 +3 4367 4437 4426 +3 4367 4426 4351 +3 4374 4449 4437 +3 4374 4437 4367 +3 4377 4455 4449 +3 4377 4449 4374 +3 4375 4453 4455 +3 4375 4455 4377 +3 4368 4446 4453 +3 4368 4453 4375 +3 4352 4433 4446 +3 4352 4446 4368 +3 4337 4424 4433 +3 4337 4433 4352 +3 4309 4394 4424 +3 4309 4424 4337 +3 4271 4363 4394 +3 4271 4394 4309 +3 4244 4332 4363 +3 4244 4363 4271 +3 4190 4282 4332 +3 4190 4332 4244 +3 4151 4240 4282 +3 4151 4282 4190 +3 4087 4178 4240 +3 4087 4240 4151 +3 4026 4125 4178 +3 4026 4178 4087 +3 3955 4048 4125 +3 3955 4125 4026 +3 3880 3971 4048 +3 3880 4048 3955 +3 3789 3892 3971 +3 3789 3971 3880 +3 3700 3794 3892 +3 3700 3892 3789 +3 3593 3694 3794 +3 3593 3794 3700 +3 3457 3581 3694 +3 3457 3694 3593 +3 3334 3435 3581 +3 3334 3581 3457 +3 3204 3298 3435 +3 3204 3435 3334 +3 3063 3158 3298 +3 3063 3298 3204 +3 2929 3018 3158 +3 2929 3158 3063 +3 2818 2883 3018 +3 2818 3018 2929 +3 2693 2747 2883 +3 2693 2883 2818 +3 2567 2626 2747 +3 2567 2747 2693 +3 2451 2503 2626 +3 2451 2626 2567 +3 2337 2373 2503 +3 2337 2503 2451 +3 2210 2243 2373 +3 2210 2373 2337 +3 2085 2124 2243 +3 2085 2243 2210 +3 1974 1993 2124 +3 1974 2124 2085 +3 1840 1857 1993 +3 1840 1993 1974 +3 1698 1707 1857 +3 1698 1857 1840 +3 1569 1707 1698 +3 1569 1715 1707 +3 1707 1715 1867 +3 1707 1867 1857 +3 1857 1867 2012 +3 1857 2012 1993 +3 1993 2012 2152 +3 1993 2152 2124 +3 2124 2152 2284 +3 2124 2284 2243 +3 2243 2284 2408 +3 2243 2408 2373 +3 2373 2408 2545 +3 2373 2545 2503 +3 2503 2545 2677 +3 2503 2677 2626 +3 2626 2677 2819 +3 2626 2819 2747 +3 2747 2819 2941 +3 2747 2941 2883 +3 2883 2941 3088 +3 2883 3088 3018 +3 3018 3088 3248 +3 3018 3248 3158 +3 3158 3248 3397 +3 3158 3397 3298 +3 3298 3397 3548 +3 3298 3548 3435 +3 3435 3548 3664 +3 3435 3664 3581 +3 3581 3664 3781 +3 3581 3781 3694 +3 3694 3781 3888 +3 3694 3888 3794 +3 3794 3888 3976 +3 3794 3976 3892 +3 3892 3976 4060 +3 3892 4060 3971 +3 3971 4060 4137 +3 3971 4137 4048 +3 4048 4137 4203 +3 4048 4203 4125 +3 4125 4203 4264 +3 4125 4264 4178 +3 4178 4264 4324 +3 4178 4324 4240 +3 4240 4324 4366 +3 4240 4366 4282 +3 4282 4366 4411 +3 4282 4411 4332 +3 4332 4411 4443 +3 4332 4443 4363 +3 4363 4443 4471 +3 4363 4471 4394 +3 4394 4471 4498 +3 4394 4498 4424 +3 4424 4498 4510 +3 4424 4510 4433 +3 4433 4510 4521 +3 4433 4521 4446 +3 4446 4521 4526 +3 4446 4526 4453 +3 4453 4526 4525 +3 4453 4525 4455 +3 4455 4525 4515 +3 4455 4515 4449 +3 4449 4515 4505 +3 4449 4505 4437 +3 4437 4505 4490 +3 4437 4490 4426 +3 4426 4490 4460 +3 4426 4460 4402 +3 4402 4460 4430 +3 4402 4430 4371 +3 4371 4430 4390 +3 4371 4390 4339 +3 4339 4390 4346 +3 4339 4346 4296 +3 4296 4346 4298 +3 4296 4298 4250 +3 4250 4298 4245 +3 4250 4245 4189 +3 4189 4245 4174 +3 4189 4174 4134 +3 4134 4174 4106 +3 4134 4106 4067 +3 4067 4106 4027 +3 4067 4027 3994 +3 3994 4027 3939 +3 3994 3939 3912 +3 3912 3939 3848 +3 3912 3848 3816 +3 3816 3848 3745 +3 3816 3745 3722 +3 3722 3745 3615 +3 3722 3615 3605 +3 3605 3615 3476 +3 3605 3476 3468 +3 3468 3476 3332 +3 3476 3486 3332 +3 3615 3632 3486 +3 3615 3486 3476 +3 3745 3755 3632 +3 3745 3632 3615 +3 3848 3867 3755 +3 3848 3755 3745 +3 3939 3965 3867 +3 3939 3867 3848 +3 4027 4058 3965 +3 4027 3965 3939 +3 4106 4146 4058 +3 4106 4058 4027 +3 4174 4222 4146 +3 4174 4146 4106 +3 4245 4278 4222 +3 4245 4222 4174 +3 4298 4344 4278 +3 4298 4278 4245 +3 4346 4397 4344 +3 4346 4344 4298 +3 4390 4442 4397 +3 4390 4397 4346 +3 4430 4485 4442 +3 4430 4442 4390 +3 4460 4514 4485 +3 4460 4485 4430 +3 4490 4545 4514 +3 4490 4514 4460 +3 4505 4564 4545 +3 4505 4545 4490 +3 4515 4581 4564 +3 4515 4564 4505 +3 4525 4590 4581 +3 4525 4581 4515 +3 4526 4592 4590 +3 4526 4590 4525 +3 4521 4589 4592 +3 4521 4592 4526 +3 4510 4579 4589 +3 4510 4589 4521 +3 4498 4563 4579 +3 4498 4579 4510 +3 4471 4544 4563 +3 4471 4563 4498 +3 4443 4513 4544 +3 4443 4544 4471 +3 4411 4483 4513 +3 4411 4513 4443 +3 4366 4440 4483 +3 4366 4483 4411 +3 4324 4395 4440 +3 4324 4440 4366 +3 4264 4342 4395 +3 4264 4395 4324 +3 4203 4275 4342 +3 4203 4342 4264 +3 4137 4221 4275 +3 4137 4275 4203 +3 4060 4142 4221 +3 4060 4221 4137 +3 3976 4055 4142 +3 3976 4142 4060 +3 3888 3963 4055 +3 3888 4055 3976 +3 3781 3865 3963 +3 3781 3963 3888 +3 3664 3754 3865 +3 3664 3865 3781 +3 3548 3627 3754 +3 3548 3754 3664 +3 3397 3481 3627 +3 3397 3627 3548 +3 3248 3329 3481 +3 3248 3481 3397 +3 3088 3173 3329 +3 3088 3329 3248 +3 2941 3016 3173 +3 2941 3173 3088 +3 2819 2865 3016 +3 2819 3016 2941 +3 2677 2722 2865 +3 2677 2865 2819 +3 2545 2583 2722 +3 2545 2722 2677 +3 2408 2447 2583 +3 2408 2583 2545 +3 2284 2313 2447 +3 2284 2447 2408 +3 2152 2175 2313 +3 2152 2313 2284 +3 2012 2031 2175 +3 2012 2175 2152 +3 1867 1878 2031 +3 1867 2031 2012 +3 1715 1725 1878 +3 1715 1878 1867 +3 1569 1725 1715 +3 1569 1732 1725 +3 1725 1732 1895 +3 1725 1895 1878 +3 1878 1895 2047 +3 1878 2047 2031 +3 2031 2047 2194 +3 2031 2194 2175 +3 2175 2194 2343 +3 2175 2343 2313 +3 2313 2343 2486 +3 2313 2486 2447 +3 2447 2486 2627 +3 2447 2627 2583 +3 2583 2627 2762 +3 2583 2762 2722 +3 2722 2762 2917 +3 2722 2917 2865 +3 2865 2917 3070 +3 2865 3070 3016 +3 3016 3070 3243 +3 3016 3243 3173 +3 3173 3243 3408 +3 3173 3408 3329 +3 3329 3408 3567 +3 3329 3567 3481 +3 3481 3567 3709 +3 3481 3709 3627 +3 3627 3709 3827 +3 3627 3827 3754 +3 3754 3827 3935 +3 3754 3935 3865 +3 3865 3935 4036 +3 3865 4036 3963 +3 3963 4036 4130 +3 3963 4130 4055 +3 4055 4130 4210 +3 4055 4210 4142 +3 4142 4210 4279 +3 4142 4279 4221 +3 4221 4279 4347 +3 4221 4347 4275 +3 4275 4347 4412 +3 4275 4412 4342 +3 4342 4412 4461 +3 4342 4461 4395 +3 4395 4461 4506 +3 4395 4506 4440 +3 4440 4506 4549 +3 4440 4549 4483 +3 4483 4549 4580 +3 4483 4580 4513 +3 4513 4580 4606 +3 4513 4606 4544 +3 4544 4606 4628 +3 4544 4628 4563 +3 4563 4628 4639 +3 4563 4639 4579 +3 4579 4639 4647 +3 4579 4647 4589 +3 4589 4647 4650 +3 4589 4650 4592 +3 4592 4650 4645 +3 4592 4645 4590 +3 4590 4645 4636 +3 4590 4636 4581 +3 4581 4636 4617 +3 4581 4617 4564 +3 4564 4617 4593 +3 4564 4593 4545 +3 4545 4593 4566 +3 4545 4566 4514 +3 4514 4566 4529 +3 4514 4529 4485 +3 4485 4529 4493 +3 4485 4493 4442 +3 4442 4493 4435 +3 4442 4435 4397 +3 4397 4435 4379 +3 4397 4379 4344 +3 4344 4379 4325 +3 4344 4325 4278 +3 4278 4325 4252 +3 4278 4252 4222 +3 4222 4252 4171 +3 4222 4171 4146 +3 4146 4171 4083 +3 4146 4083 4058 +3 4058 4083 3995 +3 4058 3995 3965 +3 3965 3995 3890 +3 3965 3890 3867 +3 3867 3890 3770 +3 3867 3770 3755 +3 3755 3770 3640 +3 3755 3640 3632 +3 3632 3640 3495 +3 3632 3495 3486 +3 3486 3495 3332 +3 3495 3502 3332 +3 3640 3651 3502 +3 3640 3502 3495 +3 3770 3785 3651 +3 3770 3651 3640 +3 3890 3910 3785 +3 3890 3785 3770 +3 3995 4019 3910 +3 3995 3910 3890 +3 4083 4118 4019 +3 4083 4019 3995 +3 4171 4197 4118 +3 4171 4118 4083 +3 4252 4276 4197 +3 4252 4197 4171 +3 4325 4354 4276 +3 4325 4276 4252 +3 4379 4425 4354 +3 4379 4354 4325 +3 4435 4478 4425 +3 4435 4425 4379 +3 4493 4528 4478 +3 4493 4478 4435 +3 4529 4573 4528 +3 4529 4528 4493 +3 4566 4611 4573 +3 4566 4573 4529 +3 4593 4640 4611 +3 4593 4611 4566 +3 4617 4668 4640 +3 4617 4640 4593 +3 4636 4685 4668 +3 4636 4668 4617 +3 4645 4697 4685 +3 4645 4685 4636 +3 4650 4704 4697 +3 4650 4697 4645 +3 4647 4703 4704 +3 4647 4704 4650 +3 4639 4695 4703 +3 4639 4703 4647 +3 4628 4681 4695 +3 4628 4695 4639 +3 4606 4662 4681 +3 4606 4681 4628 +3 4580 4638 4662 +3 4580 4662 4606 +3 4549 4602 4638 +3 4549 4638 4580 +3 4506 4568 4602 +3 4506 4602 4549 +3 4461 4519 4568 +3 4461 4568 4506 +3 4412 4467 4519 +3 4412 4519 4461 +3 4347 4413 4467 +3 4347 4467 4412 +3 4279 4345 4413 +3 4279 4413 4347 +3 4210 4268 4345 +3 4210 4345 4279 +3 4130 4183 4268 +3 4130 4268 4210 +3 4036 4098 4183 +3 4036 4183 4130 +3 3935 4002 4098 +3 3935 4098 4036 +3 3827 3891 4002 +3 3827 4002 3935 +3 3709 3763 3891 +3 3709 3891 3827 +3 3567 3633 3763 +3 3567 3763 3709 +3 3408 3472 3633 +3 3408 3633 3567 +3 3243 3304 3472 +3 3243 3472 3408 +3 3070 3120 3304 +3 3070 3304 3243 +3 2917 2967 3120 +3 2917 3120 3070 +3 2762 2821 2967 +3 2762 2967 2917 +3 2627 2664 2821 +3 2627 2821 2762 +3 2486 2513 2664 +3 2486 2664 2627 +3 2343 2363 2513 +3 2343 2513 2486 +3 2194 2216 2363 +3 2194 2363 2343 +3 2047 2063 2216 +3 2047 2216 2194 +3 1895 1904 2063 +3 1895 2063 2047 +3 1732 1739 1904 +3 1732 1904 1895 +3 1569 1739 1732 +3 1569 1748 1739 +3 1739 1748 1914 +3 1739 1914 1904 +3 1904 1914 2074 +3 1904 2074 2063 +3 2063 2074 2233 +3 2063 2233 2216 +3 2216 2233 2387 +3 2216 2387 2363 +3 2363 2387 2540 +3 2363 2540 2513 +3 2513 2540 2695 +3 2513 2695 2664 +3 2664 2695 2851 +3 2664 2851 2821 +3 2821 2851 3013 +3 2821 3013 2967 +3 2967 3013 3192 +3 2967 3192 3120 +3 3120 3192 3366 +3 3120 3366 3304 +3 3304 3366 3543 +3 3304 3543 3472 +3 3472 3543 3689 +3 3472 3689 3633 +3 3633 3689 3825 +3 3633 3825 3763 +3 3763 3825 3944 +3 3763 3944 3891 +3 3891 3944 4051 +3 3891 4051 4002 +3 4002 4051 4155 +3 4002 4155 4098 +3 4098 4155 4248 +3 4098 4248 4183 +3 4183 4248 4326 +3 4183 4326 4268 +3 4268 4326 4398 +3 4268 4398 4345 +3 4345 4398 4462 +3 4345 4462 4413 +3 4413 4462 4520 +3 4413 4520 4467 +3 4467 4520 4574 +3 4467 4574 4519 +3 4519 4574 4616 +3 4519 4616 4568 +3 4568 4616 4655 +3 4568 4655 4602 +3 4602 4655 4687 +3 4602 4687 4638 +3 4638 4687 4712 +3 4638 4712 4662 +3 4662 4712 4729 +3 4662 4729 4681 +3 4681 4729 4743 +3 4681 4743 4695 +3 4695 4743 4750 +3 4695 4750 4703 +3 4703 4750 4749 +3 4703 4749 4704 +3 4704 4749 4740 +3 4704 4740 4697 +3 4697 4740 4726 +3 4697 4726 4685 +3 4685 4726 4705 +3 4685 4705 4668 +3 4668 4705 4682 +3 4668 4682 4640 +3 4640 4682 4648 +3 4640 4648 4611 +3 4611 4648 4610 +3 4611 4610 4573 +3 4573 4610 4562 +3 4573 4562 4528 +3 4528 4562 4509 +3 4528 4509 4478 +3 4478 4509 4450 +3 4478 4450 4425 +3 4425 4450 4382 +3 4425 4382 4354 +3 4354 4382 4311 +3 4354 4311 4276 +3 4276 4311 4230 +3 4276 4230 4197 +3 4197 4230 4135 +3 4197 4135 4118 +3 4118 4135 4035 +3 4118 4035 4019 +3 4019 4035 3924 +3 4019 3924 3910 +3 3910 3924 3800 +3 3910 3800 3785 +3 3785 3800 3657 +3 3785 3657 3651 +3 3651 3657 3512 +3 3651 3512 3502 +3 3502 3512 3332 +3 3512 3517 3332 +3 3657 3671 3517 +3 3657 3517 3512 +3 3800 3811 3671 +3 3800 3671 3657 +3 3924 3938 3811 +3 3924 3811 3800 +3 4035 4049 3938 +3 4035 3938 3924 +3 4135 4157 4049 +3 4135 4049 4035 +3 4230 4251 4157 +3 4230 4157 4135 +3 4311 4336 4251 +3 4311 4251 4230 +3 4382 4415 4336 +3 4382 4336 4311 +3 4450 4480 4415 +3 4450 4415 4382 +3 4509 4539 4480 +3 4509 4480 4450 +3 4562 4594 4539 +3 4562 4539 4509 +3 4610 4641 4594 +3 4610 4594 4562 +3 4648 4684 4641 +3 4648 4641 4610 +3 4682 4718 4684 +3 4682 4684 4648 +3 4705 4746 4718 +3 4705 4718 4682 +3 4726 4762 4746 +3 4726 4746 4705 +3 4740 4780 4762 +3 4740 4762 4726 +3 4749 4787 4780 +3 4749 4780 4740 +3 4750 4788 4787 +3 4750 4787 4749 +3 4743 4785 4788 +3 4743 4788 4750 +3 4729 4770 4785 +3 4729 4785 4743 +3 4712 4756 4770 +3 4712 4770 4729 +3 4687 4728 4756 +3 4687 4756 4712 +3 4655 4701 4728 +3 4655 4728 4687 +3 4616 4661 4701 +3 4616 4701 4655 +3 4574 4615 4661 +3 4574 4661 4616 +3 4520 4569 4615 +3 4520 4615 4574 +3 4462 4507 4569 +3 4462 4569 4520 +3 4398 4441 4507 +3 4398 4507 4462 +3 4326 4369 4441 +3 4326 4441 4398 +3 4248 4284 4369 +3 4248 4369 4326 +3 4155 4195 4284 +3 4155 4284 4248 +3 4051 4099 4195 +3 4051 4195 4155 +3 3944 3992 4099 +3 3944 4099 4051 +3 3825 3873 3992 +3 3825 3992 3944 +3 3689 3747 3873 +3 3689 3873 3825 +3 3543 3594 3747 +3 3543 3747 3689 +3 3366 3414 3594 +3 3366 3594 3543 +3 3192 3238 3414 +3 3192 3414 3366 +3 3013 3050 3238 +3 3013 3238 3192 +3 2851 2882 3050 +3 2851 3050 3013 +3 2695 2716 2882 +3 2695 2882 2851 +3 2540 2560 2716 +3 2540 2716 2695 +3 2387 2402 2560 +3 2387 2560 2540 +3 2233 2245 2402 +3 2233 2402 2387 +3 2074 2087 2245 +3 2074 2245 2233 +3 1914 1926 2087 +3 1914 2087 2074 +3 1748 1751 1926 +3 1748 1926 1914 +3 1569 1751 1748 +3 1569 1756 1751 +3 1751 1756 1936 +3 1751 1936 1926 +3 1926 1936 2099 +3 1926 2099 2087 +3 2087 2099 2257 +3 2087 2257 2245 +3 2245 2257 2421 +3 2245 2421 2402 +3 2402 2421 2580 +3 2402 2580 2560 +3 2560 2580 2739 +3 2560 2739 2716 +3 2716 2739 2904 +3 2716 2904 2882 +3 2882 2904 3076 +3 2882 3076 3050 +3 3050 3076 3275 +3 3050 3275 3238 +3 3238 3275 3453 +3 3238 3453 3414 +3 3414 3453 3629 +3 3414 3629 3594 +3 3594 3629 3776 +3 3594 3776 3747 +3 3747 3776 3913 +3 3747 3913 3873 +3 3873 3913 4031 +3 3873 4031 3992 +3 3992 4031 4140 +3 3992 4140 4099 +3 4099 4140 4241 +3 4099 4241 4195 +3 4195 4241 4330 +3 4195 4330 4284 +3 4284 4330 4409 +3 4284 4409 4369 +3 4369 4409 4481 +3 4369 4481 4441 +3 4441 4481 4548 +3 4441 4548 4507 +3 4507 4548 4601 +3 4507 4601 4569 +3 4569 4601 4654 +3 4569 4654 4615 +3 4615 4654 4700 +3 4615 4700 4661 +3 4661 4700 4735 +3 4661 4735 4701 +3 4701 4735 4765 +3 4701 4765 4728 +3 4728 4765 4792 +3 4728 4792 4756 +3 4756 4792 4808 +3 4756 4808 4770 +3 4770 4808 4816 +3 4770 4816 4785 +3 4785 4816 4824 +3 4785 4824 4788 +3 4788 4824 4822 +3 4788 4822 4787 +3 4787 4822 4810 +3 4787 4810 4780 +3 4780 4810 4797 +3 4780 4797 4762 +3 4762 4797 4774 +3 4762 4774 4746 +3 4746 4774 4748 +3 4746 4748 4718 +3 4718 4748 4713 +3 4718 4713 4684 +3 4684 4713 4670 +3 4684 4670 4641 +3 4641 4670 4622 +3 4641 4622 4594 +3 4594 4622 4567 +3 4594 4567 4539 +3 4539 4567 4504 +3 4539 4504 4480 +3 4480 4504 4432 +3 4480 4432 4415 +3 4415 4432 4353 +3 4415 4353 4336 +3 4336 4353 4265 +3 4336 4265 4251 +3 4251 4265 4170 +3 4251 4170 4157 +3 4157 4170 4066 +3 4157 4066 4049 +3 4049 4066 3949 +3 4049 3949 3938 +3 3938 3949 3823 +3 3938 3823 3811 +3 3811 3823 3679 +3 3811 3679 3671 +3 3671 3679 3521 +3 3671 3521 3517 +3 3517 3521 3332 +3 3521 3523 3332 +3 3679 3686 3523 +3 3679 3523 3521 +3 3823 3834 3686 +3 3823 3686 3679 +3 3949 3959 3834 +3 3949 3834 3823 +3 4066 4077 3959 +3 4066 3959 3949 +3 4170 4182 4077 +3 4170 4077 4066 +3 4265 4280 4182 +3 4265 4182 4170 +3 4353 4370 4280 +3 4353 4280 4265 +3 4432 4448 4370 +3 4432 4370 4353 +3 4504 4522 4448 +3 4504 4448 4432 +3 4567 4588 4522 +3 4567 4522 4504 +3 4622 4644 4588 +3 4622 4588 4567 +3 4670 4693 4644 +3 4670 4644 4622 +3 4713 4734 4693 +3 4713 4693 4670 +3 4748 4769 4734 +3 4748 4734 4713 +3 4774 4801 4769 +3 4774 4769 4748 +3 4797 4825 4801 +3 4797 4801 4774 +3 4810 4837 4825 +3 4810 4825 4797 +3 4822 4849 4837 +3 4822 4837 4810 +3 4824 4852 4849 +3 4824 4849 4822 +3 4816 4846 4852 +3 4816 4852 4824 +3 4808 4834 4846 +3 4808 4846 4816 +3 4792 4819 4834 +3 4792 4834 4808 +3 4765 4796 4819 +3 4765 4819 4792 +3 4735 4764 4796 +3 4735 4796 4765 +3 4700 4727 4764 +3 4700 4764 4735 +3 4654 4686 4727 +3 4654 4727 4700 +3 4601 4637 4686 +3 4601 4686 4654 +3 4548 4576 4637 +3 4548 4637 4601 +3 4481 4511 4576 +3 4481 4576 4548 +3 4409 4436 4511 +3 4409 4511 4481 +3 4330 4357 4436 +3 4330 4436 4409 +3 4241 4267 4357 +3 4241 4357 4330 +3 4140 4168 4267 +3 4140 4267 4241 +3 4031 4062 4168 +3 4031 4168 4140 +3 3913 3943 4062 +3 3913 4062 4031 +3 3776 3810 3943 +3 3776 3943 3913 +3 3629 3656 3810 +3 3629 3810 3776 +3 3453 3490 3656 +3 3453 3656 3629 +3 3275 3303 3490 +3 3275 3490 3453 +3 3076 3105 3303 +3 3076 3303 3275 +3 2904 2926 3105 +3 2904 3105 3076 +3 2739 2756 2926 +3 2739 2926 2904 +3 2580 2597 2756 +3 2580 2756 2739 +3 2421 2438 2597 +3 2421 2597 2580 +3 2257 2277 2438 +3 2257 2438 2421 +3 2099 2111 2277 +3 2099 2277 2257 +3 1936 1944 2111 +3 1936 2111 2099 +3 1756 1763 1944 +3 1756 1944 1936 +3 1569 1763 1756 +3 1569 1770 1763 +3 1763 1770 1950 +3 1763 1950 1944 +3 1944 1950 2122 +3 1944 2122 2111 +3 2111 2122 2288 +3 2111 2288 2277 +3 2277 2288 2449 +3 2277 2449 2438 +3 2438 2449 2611 +3 2438 2611 2597 +3 2597 2611 2776 +3 2597 2776 2756 +3 2756 2776 2948 +3 2756 2948 2926 +3 2926 2948 3129 +3 2926 3129 3105 +3 3105 3129 3330 +3 3105 3330 3303 +3 3303 3330 3527 +3 3303 3527 3490 +3 3490 3527 3690 +3 3490 3690 3656 +3 3656 3690 3838 +3 3656 3838 3810 +3 3810 3838 3966 +3 3810 3966 3943 +3 3943 3966 4084 +3 3943 4084 4062 +3 4062 4084 4191 +3 4062 4191 4168 +3 4168 4191 4292 +3 4168 4292 4267 +3 4267 4292 4380 +3 4267 4380 4357 +3 4357 4380 4463 +3 4357 4463 4436 +3 4436 4463 4536 +3 4436 4536 4511 +3 4511 4536 4598 +3 4511 4598 4576 +3 4576 4598 4658 +3 4576 4658 4637 +3 4637 4658 4709 +3 4637 4709 4686 +3 4686 4709 4753 +3 4686 4753 4727 +3 4727 4753 4790 +3 4727 4790 4764 +3 4764 4790 4818 +3 4764 4818 4796 +3 4796 4818 4839 +3 4796 4839 4819 +3 4819 4839 4858 +3 4819 4858 4834 +3 4834 4858 4867 +3 4834 4867 4846 +3 4846 4867 4872 +3 4846 4872 4852 +3 4852 4872 4868 +3 4852 4868 4849 +3 4849 4868 4859 +3 4849 4859 4837 +3 4837 4859 4840 +3 4837 4840 4825 +3 4825 4840 4821 +3 4825 4821 4801 +3 4801 4821 4791 +3 4801 4791 4769 +3 4769 4791 4754 +3 4769 4754 4734 +3 4734 4754 4711 +3 4734 4711 4693 +3 4693 4711 4659 +3 4693 4659 4644 +3 4644 4659 4599 +3 4644 4599 4588 +3 4588 4599 4537 +3 4588 4537 4522 +3 4522 4537 4465 +3 4522 4465 4448 +3 4448 4465 4381 +3 4448 4381 4370 +3 4370 4381 4293 +3 4370 4293 4280 +3 4280 4293 4194 +3 4280 4194 4182 +3 4182 4194 4086 +3 4182 4086 4077 +3 4077 4086 3968 +3 4077 3968 3959 +3 3959 3968 3842 +3 3959 3842 3834 +3 3834 3842 3692 +3 3834 3692 3686 +3 3686 3692 3529 +3 3686 3529 3523 +3 3523 3529 3332 +3 3529 3531 3332 +3 3692 3699 3531 +3 3692 3531 3529 +3 3842 3845 3699 +3 3842 3699 3692 +3 3968 3974 3845 +3 3968 3845 3842 +3 4086 4095 3974 +3 4086 3974 3968 +3 4194 4202 4095 +3 4194 4095 4086 +3 4293 4305 4202 +3 4293 4202 4194 +3 4381 4392 4305 +3 4381 4305 4293 +3 4465 4472 4392 +3 4465 4392 4381 +3 4537 4551 4472 +3 4537 4472 4465 +3 4599 4613 4551 +3 4599 4551 4537 +3 4659 4671 4613 +3 4659 4613 4599 +3 4711 4721 4671 +3 4711 4671 4659 +3 4754 4766 4721 +3 4754 4721 4711 +3 4791 4803 4766 +3 4791 4766 4754 +3 4821 4833 4803 +3 4821 4803 4791 +3 4840 4857 4833 +3 4840 4833 4821 +3 4859 4876 4857 +3 4859 4857 4840 +3 4868 4882 4876 +3 4868 4876 4859 +3 4872 4889 4882 +3 4872 4882 4868 +3 4867 4883 4889 +3 4867 4889 4872 +3 4858 4877 4883 +3 4858 4883 4867 +3 4839 4860 4877 +3 4839 4877 4858 +3 4818 4835 4860 +3 4818 4860 4839 +3 4790 4807 4835 +3 4790 4835 4818 +3 4753 4768 4807 +3 4753 4807 4790 +3 4709 4725 4768 +3 4709 4768 4753 +3 4658 4676 4725 +3 4658 4725 4709 +3 4598 4619 4676 +3 4598 4676 4658 +3 4536 4553 4619 +3 4536 4619 4598 +3 4463 4484 4553 +3 4463 4553 4536 +3 4380 4404 4484 +3 4380 4484 4463 +3 4292 4317 4404 +3 4292 4404 4380 +3 4191 4220 4317 +3 4191 4317 4292 +3 4084 4107 4220 +3 4084 4220 4191 +3 3966 3989 4107 +3 3966 4107 4084 +3 3838 3860 3989 +3 3838 3989 3966 +3 3690 3716 3860 +3 3690 3860 3838 +3 3527 3547 3716 +3 3527 3716 3690 +3 3330 3351 3547 +3 3330 3547 3527 +3 3129 3155 3351 +3 3129 3351 3330 +3 2948 2966 3155 +3 2948 3155 3129 +3 2776 2794 2966 +3 2776 2966 2948 +3 2611 2622 2794 +3 2611 2794 2776 +3 2449 2457 2622 +3 2449 2622 2611 +3 2288 2296 2457 +3 2288 2457 2449 +3 2122 2129 2296 +3 2122 2296 2288 +3 1950 1957 2129 +3 1950 2129 2122 +3 1770 1773 1957 +3 1770 1957 1950 +3 1569 1773 1770 +3 1569 1776 1773 +3 1773 1776 1962 +3 1773 1962 1957 +3 1957 1962 2133 +3 1957 2133 2129 +3 2129 2133 2300 +3 2129 2300 2296 +3 2296 2300 2464 +3 2296 2464 2457 +3 2457 2464 2631 +3 2457 2631 2622 +3 2622 2631 2803 +3 2622 2803 2794 +3 2794 2803 2979 +3 2794 2979 2966 +3 2966 2979 3168 +3 2966 3168 3155 +3 3155 3168 3364 +3 3155 3364 3351 +3 3351 3364 3558 +3 3351 3558 3547 +3 3547 3558 3729 +3 3547 3729 3716 +3 3716 3729 3868 +3 3716 3868 3860 +3 3860 3868 4001 +3 3860 4001 3989 +3 3989 4001 4122 +3 3989 4122 4107 +3 4107 4122 4227 +3 4107 4227 4220 +3 4220 4227 4327 +3 4220 4327 4317 +3 4317 4327 4416 +3 4317 4416 4404 +3 4404 4416 4496 +3 4404 4496 4484 +3 4484 4496 4565 +3 4484 4565 4553 +3 4553 4565 4632 +3 4553 4632 4619 +3 4619 4632 4688 +3 4619 4688 4676 +3 4676 4688 4737 +3 4676 4737 4725 +3 4725 4737 4781 +3 4725 4781 4768 +3 4768 4781 4815 +3 4768 4815 4807 +3 4807 4815 4847 +3 4807 4847 4835 +3 4835 4847 4869 +3 4835 4869 4860 +3 4860 4869 4885 +3 4860 4885 4877 +3 4877 4885 4894 +3 4877 4894 4883 +3 4883 4894 4898 +3 4883 4898 4889 +3 4889 4898 4893 +3 4889 4893 4882 +3 4882 4893 4881 +3 4882 4881 4876 +3 4876 4881 4865 +3 4876 4865 4857 +3 4857 4865 4841 +3 4857 4841 4833 +3 4833 4841 4811 +3 4833 4811 4803 +3 4803 4811 4775 +3 4803 4775 4766 +3 4766 4775 4730 +3 4766 4730 4721 +3 4721 4730 4678 +3 4721 4678 4671 +3 4671 4678 4621 +3 4671 4621 4613 +3 4613 4621 4554 +3 4613 4554 4551 +3 4551 4554 4482 +3 4551 4482 4472 +3 4472 4482 4401 +3 4472 4401 4392 +3 4392 4401 4310 +3 4392 4310 4305 +3 4305 4310 4212 +3 4305 4212 4202 +3 4202 4212 4100 +3 4202 4100 4095 +3 4095 4100 3977 +3 4095 3977 3974 +3 3974 3977 3852 +3 3974 3852 3845 +3 3845 3852 3704 +3 3845 3704 3699 +3 3699 3704 3534 +3 3699 3534 3531 +3 3531 3534 3332 +3 3534 3536 3332 +3 3704 3706 3536 +3 3704 3536 3534 +3 3852 3854 3706 +3 3852 3706 3704 +3 3977 3981 3854 +3 3977 3854 3852 +3 4100 4102 3981 +3 4100 3981 3977 +3 4212 4218 4102 +3 4212 4102 4100 +3 4310 4316 4218 +3 4310 4218 4212 +3 4401 4406 4316 +3 4401 4316 4310 +3 4482 4487 4406 +3 4482 4406 4401 +3 4554 4557 4487 +3 4554 4487 4482 +3 4621 4627 4557 +3 4621 4557 4554 +3 4678 4683 4627 +3 4678 4627 4621 +3 4730 4733 4683 +3 4730 4683 4678 +3 4775 4779 4733 +3 4775 4733 4730 +3 4811 4813 4779 +3 4811 4779 4775 +3 4841 4845 4813 +3 4841 4813 4811 +3 4865 4870 4845 +3 4865 4845 4841 +3 4881 4886 4870 +3 4881 4870 4865 +3 4893 4897 4886 +3 4893 4886 4881 +3 4898 4901 4897 +3 4898 4897 4893 +3 4894 4899 4901 +3 4894 4901 4898 +3 4885 4891 4899 +3 4885 4899 4894 +3 4869 4873 4891 +3 4869 4891 4885 +3 4847 4853 4873 +3 4847 4873 4869 +3 4815 4823 4853 +3 4815 4853 4847 +3 4781 4786 4823 +3 4781 4823 4815 +3 4737 4744 4786 +3 4737 4786 4781 +3 4688 4692 4744 +3 4688 4744 4737 +3 4632 4635 4692 +3 4632 4692 4688 +3 4565 4571 4635 +3 4565 4635 4632 +3 4496 4500 4571 +3 4496 4571 4565 +3 4416 4419 4500 +3 4416 4500 4496 +3 4327 4331 4419 +3 4327 4419 4416 +3 4227 4234 4331 +3 4227 4331 4327 +3 4122 4126 4234 +3 4122 4234 4227 +3 4001 4009 4126 +3 4001 4126 4122 +3 3868 3874 4009 +3 3868 4009 4001 +3 3729 3735 3874 +3 3729 3874 3868 +3 3558 3565 3735 +3 3558 3735 3729 +3 3364 3370 3565 +3 3364 3565 3558 +3 3168 3172 3370 +3 3168 3370 3364 +3 2979 2983 3172 +3 2979 3172 3168 +3 2803 2809 2983 +3 2803 2983 2979 +3 2631 2638 2809 +3 2631 2809 2803 +3 2464 2469 2638 +3 2464 2638 2631 +3 2300 2302 2469 +3 2300 2469 2464 +3 2133 2136 2302 +3 2133 2302 2300 +3 1962 1964 2136 +3 1962 2136 2133 +3 1776 1778 1964 +3 1776 1964 1962 +3 1569 1778 1776 +3 1569 1777 1778 +3 1778 1777 1963 +3 1778 1963 1964 +3 1964 1963 2134 +3 1964 2134 2136 +3 2136 2134 2301 +3 2136 2301 2302 +3 2302 2301 2466 +3 2302 2466 2469 +3 2469 2466 2634 +3 2469 2634 2638 +3 2638 2634 2806 +3 2638 2806 2809 +3 2809 2806 2980 +3 2809 2980 2983 +3 2983 2980 3171 +3 2983 3171 3172 +3 3172 3171 3367 +3 3172 3367 3370 +3 3370 3367 3561 +3 3370 3561 3565 +3 3565 3561 3732 +3 3565 3732 3735 +3 3735 3732 3869 +3 3735 3869 3874 +3 3874 3869 4006 +3 3874 4006 4009 +3 4009 4006 4123 +3 4009 4123 4126 +3 4126 4123 4231 +3 4126 4231 4234 +3 4234 4231 4328 +3 4234 4328 4331 +3 4331 4328 4417 +3 4331 4417 4419 +3 4419 4417 4497 +3 4419 4497 4500 +3 4500 4497 4570 +3 4500 4570 4571 +3 4571 4570 4634 +3 4571 4634 4635 +3 4635 4634 4689 +3 4635 4689 4692 +3 4692 4689 4739 +3 4692 4739 4744 +3 4744 4739 4784 +3 4744 4784 4786 +3 4786 4784 4817 +3 4786 4817 4823 +3 4823 4817 4851 +3 4823 4851 4853 +3 4853 4851 4871 +3 4853 4871 4873 +3 4873 4871 4887 +3 4873 4887 4891 +3 4891 4887 4896 +3 4891 4896 4899 +3 4899 4896 4900 +3 4899 4900 4901 +3 4901 4900 4895 +3 4901 4895 4897 +3 4897 4895 4884 +3 4897 4884 4886 +3 4886 4884 4866 +3 4886 4866 4870 +3 4870 4866 4843 +3 4870 4843 4845 +3 4845 4843 4812 +3 4845 4812 4813 +3 4813 4812 4777 +3 4813 4777 4779 +3 4779 4777 4732 +3 4779 4732 4733 +3 4733 4732 4680 +3 4733 4680 4683 +3 4683 4680 4624 +3 4683 4624 4627 +3 4627 4624 4556 +3 4627 4556 4557 +3 4557 4556 4486 +3 4557 4486 4487 +3 4487 4486 4403 +3 4487 4403 4406 +3 4406 4403 4313 +3 4406 4313 4316 +3 4316 4313 4214 +3 4316 4214 4218 +3 4218 4214 4101 +3 4218 4101 4102 +3 4102 4101 3980 +3 4102 3980 3981 +3 3981 3980 3853 +3 3981 3853 3854 +3 3854 3853 3705 +3 3854 3705 3706 +3 3706 3705 3535 +3 3706 3535 3536 +3 3536 3535 3332 +3 3535 3532 3332 +3 3705 3702 3532 +3 3705 3532 3535 +3 3853 3849 3702 +3 3853 3702 3705 +3 3980 3975 3849 +3 3980 3849 3853 +3 4101 4096 3975 +3 4101 3975 3980 +3 4214 4205 4096 +3 4214 4096 4101 +3 4313 4307 4205 +3 4313 4205 4214 +3 4403 4396 4307 +3 4403 4307 4313 +3 4486 4477 4396 +3 4486 4396 4403 +3 4556 4552 4477 +3 4556 4477 4486 +3 4624 4614 4552 +3 4624 4552 4556 +3 4680 4673 4614 +3 4680 4614 4624 +3 4732 4724 4673 +3 4732 4673 4680 +3 4777 4767 4724 +3 4777 4724 4732 +3 4812 4806 4767 +3 4812 4767 4777 +3 4843 4836 4806 +3 4843 4806 4812 +3 4866 4861 4836 +3 4866 4836 4843 +3 4884 4879 4861 +3 4884 4861 4866 +3 4895 4888 4879 +3 4895 4879 4884 +3 4900 4892 4888 +3 4900 4888 4895 +3 4896 4890 4892 +3 4896 4892 4900 +3 4887 4880 4890 +3 4887 4890 4896 +3 4871 4862 4880 +3 4871 4880 4887 +3 4851 4838 4862 +3 4851 4862 4871 +3 4817 4809 4838 +3 4817 4838 4851 +3 4784 4772 4809 +3 4784 4809 4817 +3 4739 4731 4772 +3 4739 4772 4784 +3 4689 4679 4731 +3 4689 4731 4739 +3 4634 4626 4679 +3 4634 4679 4689 +3 4570 4558 4626 +3 4570 4626 4634 +3 4497 4489 4558 +3 4497 4558 4570 +3 4417 4407 4489 +3 4417 4489 4497 +3 4328 4320 4407 +3 4328 4407 4417 +3 4231 4223 4320 +3 4231 4320 4328 +3 4123 4114 4223 +3 4123 4223 4231 +3 4006 3991 4114 +3 4006 4114 4123 +3 3869 3861 3991 +3 3869 3991 4006 +3 3732 3719 3861 +3 3732 3861 3869 +3 3561 3550 3719 +3 3561 3719 3732 +3 3367 3358 3550 +3 3367 3550 3561 +3 3171 3159 3358 +3 3171 3358 3367 +3 2980 2971 3159 +3 2980 3159 3171 +3 2806 2797 2971 +3 2806 2971 2980 +3 2634 2628 2797 +3 2634 2797 2806 +3 2466 2462 2628 +3 2466 2628 2634 +3 2301 2297 2462 +3 2301 2462 2466 +3 2134 2131 2297 +3 2134 2297 2301 +3 1963 1959 2131 +3 1963 2131 2134 +3 1777 1774 1959 +3 1777 1959 1963 +3 1569 1774 1777 +3 1569 1771 1774 +3 1774 1771 1952 +3 1774 1952 1959 +3 1959 1952 2126 +3 1959 2126 2131 +3 2131 2126 2293 +3 2131 2293 2297 +3 2297 2293 2455 +3 2297 2455 2462 +3 2462 2455 2615 +3 2462 2615 2628 +3 2628 2615 2784 +3 2628 2784 2797 +3 2797 2784 2952 +3 2797 2952 2971 +3 2971 2952 3140 +3 2971 3140 3159 +3 3159 3140 3339 +3 3159 3339 3358 +3 3358 3339 3537 +3 3358 3537 3550 +3 3550 3537 3703 +3 3550 3703 3719 +3 3719 3703 3846 +3 3719 3846 3861 +3 3861 3846 3972 +3 3861 3972 3991 +3 3991 3972 4091 +3 3991 4091 4114 +3 4114 4091 4198 +3 4114 4198 4223 +3 4223 4198 4300 +3 4223 4300 4320 +3 4320 4300 4387 +3 4320 4387 4407 +3 4407 4387 4468 +3 4407 4468 4489 +3 4489 4468 4543 +3 4489 4543 4558 +3 4558 4543 4607 +3 4558 4607 4626 +3 4626 4607 4666 +3 4626 4666 4679 +3 4679 4666 4717 +3 4679 4717 4731 +3 4731 4717 4759 +3 4731 4759 4772 +3 4772 4759 4795 +3 4772 4795 4809 +3 4809 4795 4827 +3 4809 4827 4838 +3 4838 4827 4850 +3 4838 4850 4862 +3 4862 4850 4864 +3 4862 4864 4880 +3 4880 4864 4875 +3 4880 4875 4890 +3 4890 4875 4878 +3 4890 4878 4892 +3 4892 4878 4874 +3 4892 4874 4888 +3 4888 4874 4863 +3 4888 4863 4879 +3 4879 4863 4848 +3 4879 4848 4861 +3 4861 4848 4826 +3 4861 4826 4836 +3 4836 4826 4794 +3 4836 4794 4806 +3 4806 4794 4758 +3 4806 4758 4767 +3 4767 4758 4714 +3 4767 4714 4724 +3 4724 4714 4663 +3 4724 4663 4673 +3 4673 4663 4604 +3 4673 4604 4614 +3 4614 4604 4540 +3 4614 4540 4552 +3 4552 4540 4466 +3 4552 4466 4477 +3 4477 4466 4383 +3 4477 4383 4396 +3 4396 4383 4297 +3 4396 4297 4307 +3 4307 4297 4196 +3 4307 4196 4205 +3 4205 4196 4089 +3 4205 4089 4096 +3 4096 4089 3970 +3 4096 3970 3975 +3 3975 3970 3843 +3 3975 3843 3849 +3 3849 3843 3695 +3 3849 3695 3702 +3 3702 3695 3530 +3 3702 3530 3532 +3 3532 3530 3332 +3 3530 3525 3332 +3 3525 3530 3695 +3 3525 3695 3687 +3 3843 3835 3687 +3 3843 3687 3695 +3 3970 3962 3835 +3 3970 3835 3843 +3 4089 4078 3962 +3 4089 3962 3970 +3 4196 4185 4078 +3 4196 4078 4089 +3 4297 4283 4185 +3 4297 4185 4196 +3 4383 4373 4283 +3 4383 4283 4297 +3 4466 4452 4373 +3 4466 4373 4383 +3 4540 4527 4452 +3 4540 4452 4466 +3 4604 4591 4527 +3 4604 4527 4540 +3 4663 4646 4591 +3 4663 4591 4604 +3 4714 4699 4646 +3 4714 4646 4663 +3 4758 4742 4699 +3 4758 4699 4714 +3 4794 4778 4742 +3 4794 4742 4758 +3 4826 4805 4778 +3 4826 4778 4794 +3 4848 4831 4805 +3 4848 4805 4826 +3 4863 4844 4831 +3 4863 4831 4848 +3 4874 4855 4844 +3 4874 4844 4863 +3 4878 4856 4855 +3 4878 4855 4874 +3 4875 4854 4856 +3 4875 4856 4878 +3 4864 4842 4854 +3 4864 4854 4875 +3 4850 4828 4842 +3 4850 4842 4864 +3 4827 4802 4828 +3 4827 4828 4850 +3 4795 4771 4802 +3 4795 4802 4827 +3 4759 4736 4771 +3 4759 4771 4795 +3 4717 4694 4736 +3 4717 4736 4759 +3 4666 4643 4694 +3 4666 4694 4717 +3 4607 4586 4643 +3 4607 4643 4666 +3 4543 4517 4586 +3 4543 4586 4607 +3 4468 4445 4517 +3 4468 4517 4543 +3 4387 4364 4445 +3 4387 4445 4468 +3 4300 4272 4364 +3 4300 4364 4387 +3 4198 4175 4272 +3 4198 4272 4300 +3 4091 4068 4175 +3 4091 4175 4198 +3 3972 3950 4068 +3 3972 4068 4091 +3 3846 3817 3950 +3 3846 3950 3972 +3 3703 3667 3817 +3 3703 3817 3846 +3 3537 3504 3667 +3 3537 3667 3703 +3 3339 3313 3504 +3 3339 3504 3537 +3 3140 3109 3313 +3 3140 3313 3339 +3 2952 2933 3109 +3 2952 3109 3140 +3 2784 2761 2933 +3 2784 2933 2952 +3 2615 2602 2761 +3 2615 2761 2784 +3 2455 2440 2602 +3 2455 2602 2615 +3 2293 2282 2440 +3 2293 2440 2455 +3 2126 2115 2282 +3 2126 2282 2293 +3 1952 1947 2115 +3 1952 2115 2126 +3 1771 1764 1947 +3 1771 1947 1952 +3 1569 1764 1771 diff --git a/thirdparty/carve-1.4.0/doc/TODO.txt b/thirdparty/carve-1.4.0/doc/TODO.txt new file mode 100644 index 00000000..e69de29b diff --git a/thirdparty/carve-1.4.0/doc/carve.cls b/thirdparty/carve-1.4.0/doc/carve.cls new file mode 100644 index 00000000..ef262be2 --- /dev/null +++ b/thirdparty/carve-1.4.0/doc/carve.cls @@ -0,0 +1,134 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{carve} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{memoir}} +\ProcessOptions\relax +\LoadClass[12pt,a4paper,twoside,openright]{memoir} + +% Extra packages +\usepackage{setspace} +\usepackage{multicol} +\usepackage{multirow} +\usepackage{ifthen} +\usepackage{calc} +\usepackage{listings} +\usepackage{color} +\usepackage{graphicx} +\usepackage{pgf} + +\usepackage{fontspec,xltxtra,xunicode} + +\definecolor{codebg}{cmyk}{0.09,0.06,0.00,0.00} % E3E7F5 +\definecolor{codeframe}{cmyk}{1.00,0.57,0.00,0.40} % E3E7F5 +\definecolor{codekwd}{cmyk}{1.00,0.57,0.00,0.40} % 00447c +\definecolor{codecomment}{cmyk}{0.81,0.58,0.35,0.13} % 3F607C +\definecolor{headingcolour}{cmyk}{1.00,0.57,0.00,0.40}% 00447c +\definecolor{headingtext}{gray}{1.0} + +\defaultfontfeatures{Mapping=tex-text,Fractions=Off,Scale=MatchLowercase} + +\settypeblocksize{237mm}{427pt}{*} +\setlrmargins{*}{*}{2} +\setulmargins{*}{*}{2} + +\checkandfixthelayout +\typeoutlayout +\typeoutstandardlayout + +\setromanfont[ + ItalicFont={Frutiger LT Std 46 Light Italic}, + BoldFont={Frutiger LT Std 55 Roman}, + BoldItalicFont={Frutiger LT Std 56 Italic}, +]{Frutiger LT Std 45 Light} + +\setsansfont[ + ItalicFont={Frutiger LT Std 46 Light Italic}, + BoldFont={Frutiger LT Std 55 Roman}, + BoldItalicFont={Frutiger LT Std 56 Italic}, +]{Frutiger LT Std 45 Light} + +\setmonofont[ + ItalicFont={Letter Gothic Std Slanted}, + BoldFont={Letter Gothic Std Bold}, + BoldItalicFont={Letter Gothic Std Bold Slanted}, +]{Letter Gothic Std Medium} + +\newfontfamily\condensedfont[ + ItalicFont={Frutiger LT Std 47 Light Condensed}, + BoldFont={Frutiger LT Std 57 Condensed}, + BoldItalicFont={Frutiger LT Std 57 Condensed}, +]{Frutiger LT Std 47 Light Condensed} + +\newfontfamily\boldcondensedfont[ + ItalicFont={Frutiger LT Std 67 Bold Condensed}, + BoldFont={Frutiger LT Std 77 Black Condensed}, + BoldItalicFont={Frutiger LT Std 77 Black Condensed}, +]{Frutiger LT Std 67 Bold Condensed} + +\newfontfamily\headingfont[ + ItalicFont={Frutiger LT Std 66 Bold Italic}, +]{Frutiger LT Std 65 Bold} + +\newfontfamily\codefont[]{Bitstream Vera Sans Mono} +\newfontfamily\codekwdfont[]{Bitstream Vera Sans Mono Bold} +\newfontfamily\codecommentfont[]{Bitstream Vera Sans Mono Oblique} + +\lstset{frame=tblr, + rulecolor=\color{codeframe}, + basicstyle=\codefont\small, + keywordstyle=\codekwdfont\color{codekwd}, + commentstyle=\codecommentfont\color{codecomment}, + columns=fixed, + captionpos=b, + xleftmargin=2ex,xrightmargin=2ex, + framexleftmargin=2ex,framexrightmargin=2ex +} + +\newcommand\code[1]{{\codefont\mbox{#1}}} + +\newsavebox{\sb@titlegfx} +\begin{lrbox}{\sb@titlegfx}\makebox[0mm][l]{\includegraphics{title-page.pdf}}\end{lrbox} + +\usepackage[absolute,overlay]{textpos} +\textblockorigin{-6.33mm}{-1.14mm} +\setlength{\TPHorizModule}{210mm} +\setlength{\TPVertModule}{297mm} +\renewcommand\maketitle{\begin{textblock}{1}(0,0)\usebox\sb@titlegfx\end{textblock}~\clearpage} + +\newlength{\leftmar} +\newlength{\@pad} +\newsavebox{\sb@chapnum} +\newsavebox{\sb@chaptitle} +\newsavebox{\sb@title} +\newcommand{\checkmargin}{ +\strictpagechecktrue\checkoddpage +\ifoddpage\setlength{\leftmar}{1.0\spinemargin}\else\setlength{\leftmar}{1.0\foremargin}\fi +} +\newif\ifNoChapNumber +\makeatletter +\makechapterstyle{VZ34}{ +\renewcommand\chapternamenum{} +\renewcommand\printchaptername{} +\renewcommand\printchapternum{} +\renewcommand\chapnumfont{\Large} +\renewcommand\chaptitlefont{\headingfont\Large} +\renewcommand\printchaptertitle[1]{% +\begingroup% +\setlength{\parindent}{0pt} +\checkmargin% +\color{headingtext}% +\begin{lrbox}{\sb@title} +\hspace{-1.0\leftmar}\begin{minipage}{210mm} +\colorbox{headingcolour}{\vspace{5pt}\begin{tabular}{@{}b{\leftmar-2ex}@{\vrule width 1pt}b{210mm+2ex-\leftmar}} +\chapnumfont \raggedleft \ifNoChapNumber \relax \else \thechapter. \fi \hspace{1ex} & +\chaptitlefont \raggedright \hspace{.5ex} ##1 +\end{tabular}\vspace{2pt}} +\end{minipage} +\end{lrbox} +\usebox\sb@title +\NoChapNumberfalse +\endgroup% +} +\renewcommand\printchapternonum{\NoChapNumbertrue} +} +\chapterstyle{VZ34} diff --git a/thirdparty/carve-1.4.0/doc/carve.pdf b/thirdparty/carve-1.4.0/doc/carve.pdf new file mode 100644 index 00000000..b255a3d9 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/carve.pdf differ diff --git a/thirdparty/carve-1.4.0/doc/carve.tex b/thirdparty/carve-1.4.0/doc/carve.tex new file mode 100644 index 00000000..c3c4cc62 --- /dev/null +++ b/thirdparty/carve-1.4.0/doc/carve.tex @@ -0,0 +1,361 @@ +\documentclass{carve} +\begin{document} + +\title{Carve Documentation} +\author{Tobias Sargeant} + +\frontmatter + +\maketitle + +\cleardoublepage\tableofcontents +\cleardoublepage\listoffigures +\cleardoublepage\listoftables +\cleardoublepage\lstlistoflistings + +\mainmatter + +\chapter{Representation of polyhedra} + +Carve polyhedra are defined by collections of vertices (instances of +\code{carve::poly::Vertex}) that define points in 3-dimensional space, +and collections of faces (instances of \code{carve::poly::Face}) that +define the connectivity of vertices. Because faces refer to vertices +by pointer, vertex identity is determined by address rather than by +location in 3-dimensional space. + +Faces are oriented anticlockwise in a right handed coordinate +system. Although a face may consist of more than three vertices, all +vertices of any given face must lie on a single plane. + +A polyhedron defined by a set of faces and vertices consists of one or +more connected surfaces. The decomposition of a set of faces into +surfaces is computed automatically, and shared vertices +(\fref{fig:polyhedron-shared-vertex}) and edges +(\fref{fig:polyhedron-shared-edge}) are handled correctly. A +polyhedron may not, however, be self intersecting. + +Each surface is either ``closed'' or ``open''. A closed surface obeys +the property that for every edge (determined by a pair of consecutive +vertices forming part of a face) there exists an edge of the opposite +orientation that is part of some other face. + +A closed surface bounds a non-zero (possibly infinite) volume of +space. The space defined by a surface depends upon the orientation of +its defining faces. By inverting the vertex order of all faces of a +closed surface, the complementary volume is created. For example, a +cube with faces ordered clockwise in a right-handed coordinate system +describes the infinite volume consisting of all space except that +delimited by the cube. + +Used carefully, more than one closed surface may be combined to create +a shell. A surface representing an infinite volume enclosed within a +surface representing a finite volume represents a hollow solid, and +such solids are handled correctly during CSG operations. + +\begin{figure} + \begin{center}\includegraphics[width=3.453in]{polyhedra/shared-vertex.png}\end{center} + \caption{A polyhedron consisting of two surfaces sharing a vertex} + \label{fig:polyhedron-shared-vertex} +\end{figure} + +\begin{figure} + \begin{center}\includegraphics[width=3.453in]{polyhedra/shared-edge.png}\end{center} + \caption{A polyhedron consisting of two surfaces sharing an edge} + \label{fig:polyhedron-shared-edge} +\end{figure} + +\begin{section}{Construction of Polyhedra} + +A polyhedron may be constructed in a number of ways. + +In the first case (Listing \ref{code:poly-ctor-1}) a vector of faces +and a vector of vertices is provided. The vertices pointed to by the +faces in \code{\_faces} must be members of the vector of vertices, +\code{\_vertices}. Ownership is taken of the face and vertex vectors, +so as to avoid unnecessary copies. On return, both vectors will be +empty. + +\begin{lstlisting}[language=C++,float,caption=\code{carve::poly::Polyhedron} constructor 1,label=code:poly-ctor-1] +carve::poly::Polyhedron( + std::vector &_faces, + std::vector &_vertices, + bool _recalc = false); +\end{lstlisting} + +\begin{lstlisting}[language=C++,float,caption=\code{carve::poly::Polyhedron} constructor 2,label=code:poly-ctor-2] +carve::poly::Polyhedron( + std::vector &_faces, + bool _recalc = false); +\end{lstlisting} + +\begin{lstlisting}[language=C++,float,caption=\code{carve::poly::Polyhedron} constructor 3,label=code:poly-ctor-3] +carve::poly::Polyhedron( + std::list &_faces, + bool _recalc = false); +\end{lstlisting} + +\begin{lstlisting}[language=C++,float,caption=\code{carve::poly::Polyhedron} constructor 4,label=code:poly-ctor-4] +carve::poly::Polyhedron( + const std::vector &vertices, + int n_faces, + const std::vector &face_indices); +\end{lstlisting} + +\begin{lstlisting}[float,language=C++,caption=Constructing a cube directly,label=code:cube-direct] +#include + +carve::poly::Polyhedron *makeCube( + const carve::math::Matrix &t = carve::math::Matrix()) { + + std::vector verts; + std::vector faces; + + verts.reserve(8); + faces.reserve(6); + + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(+1.0, +1.0, +1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(-1.0, +1.0, +1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(-1.0, -1.0, +1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(+1.0, -1.0, +1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(+1.0, +1.0, -1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(-1.0, +1.0, -1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(-1.0, -1.0, -1.0))); + verts.push_back( + carve::poly::Vertex(t * carve::geom::VECTOR(+1.0, -1.0, -1.0))); + + faces.push_back( + new Face(&verts[0], &verts[1], &verts[2], &verts[3])); + faces.push_back( + new Face(&verts[7], &verts[6], &verts[5], &verts[4])); + faces.push_back( + new Face(&verts[0], &verts[4], &verts[5], &verts[1])); + faces.push_back( + new Face(&verts[1], &verts[5], &verts[6], &verts[2])); + faces.push_back( + new Face(&verts[2], &verts[6], &verts[7], &verts[3])); + faces.push_back( + new Face(&verts[3], &verts[7], &verts[4], &verts[0])); + + // note that carve::poly::Polyhedron takes ownership of face + // pointers and the contents of the vertex array. + return new carve::poly::Polyhedron(faces, vertices); +} +\end{lstlisting} + +\begin{lstlisting}[float,language=C++,caption=Constructing a cube using {\codefont carve::input::PolyhedronData}] +#include +#include + +carve::poly::Polyhedron *makeCube( + const carve::math::Matrix &t = carve::math::Matrix()) { + + carve::input::PolyhedronData data; + + data.addVertex(t * carve::geom::VECTOR(+1.0, +1.0, +1.0)); + data.addVertex(t * carve::geom::VECTOR(-1.0, +1.0, +1.0)); + data.addVertex(t * carve::geom::VECTOR(-1.0, -1.0, +1.0)); + data.addVertex(t * carve::geom::VECTOR(+1.0, -1.0, +1.0)); + data.addVertex(t * carve::geom::VECTOR(+1.0, +1.0, -1.0)); + data.addVertex(t * carve::geom::VECTOR(-1.0, +1.0, -1.0)); + data.addVertex(t * carve::geom::VECTOR(-1.0, -1.0, -1.0)); + data.addVertex(t * carve::geom::VECTOR(+1.0, -1.0, -1.0)); + + data.addFace(0, 1, 2, 3); + data.addFace(7, 6, 5, 4); + data.addFace(0, 4, 5, 1); + data.addFace(1, 5, 6, 2); + data.addFace(2, 6, 7, 3); + data.addFace(3, 7, 4, 0); + + return data.create(); +} +\end{lstlisting} + +\end{section} + +\chapter{CSG Operations} + +The \code{carve::csg::CSG} class is responsible for managing CSG +calculations. It provides methods for CSG binary computations between +both closed and open polyhedra, as well as divison of polyhedra by +their common line of intersection. The operation computed by methods +of the \code{carve::csg::CSG} class may be chosen from the standard +primitive binary operations or may be defined by the caller. + +The CSG computation may be influenced by the registration of hook +objects that can be used to perform such tasks as triangulation of +result faces and transfer and interpolation of attributes from source +polyhedra to the result. + +\begin{section}{CSG Operations on Closed Manifolds} + +The \code{compute} method of \code{carve::csg::CSG} has two prototypes: + +\begin{lstlisting}[language=C++] +carve::poly::Polyhedron *compute( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + carve::csg::CSG::OP op, + carve::csg::V2Set *shared_edges = NULL, + carve::csg::CSG::CLASSIFY_TYPE classify_type = CLASSIFY_NORMAL); +\end{lstlisting} + +\begin{lstlisting}[language=C++] +carve::poly::Polyhedron *compute( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + carve::csg::CSG::Collector &collector, + carve::csg::V2Set *shared_edges = NULL, + carve::csg::CSG::CLASSIFY_TYPE classify_type = CLASSIFY_NORMAL); +\end{lstlisting} + +These methods compute a boolean operation between polyhedra \code{a} +and \code{b}. In the first case, the operation is determined by the +enumeration \code{carve::csg::CSG::OP}, which can take the values: + +\begin{itemize} +\item \code{UNION} +\item \code{INTERSECTION} +\item \code{A\_MINUS\_B} +\item \code{B\_MINUS\_A} +\item \code{SYMMETRIC\_DIFFERENCE} +\end{itemize} + +\noindent Results for these boolean operations are shown in +\tref{tab:input-polyhedra} and \tref{tab:csg-results}. + +\begin{table} + \begin{center} + \begin{tabular}{m{2.2in}m{3in}} + \includegraphics[width=2.167in]{ops/a.png} & \vfill Manifold A \vfill \\ + \includegraphics[width=2.167in]{ops/b.png} & Manifold B \\ + \end{tabular} + \end{center} + \caption{Input polyhedra.} + \label{tab:input-polyhedra} +\end{table} + +\begin{table} + \begin{center} + \begin{tabular}{m{2.2in}m{3in}} + \includegraphics[width=2.167in]{ops/a_union_b.png} & + Operation: Union (A | B) \newline Enumeration: \code{carve::CSG::UNION} \\ + \includegraphics[width=2.167in]{ops/a_intersection_b.png} & + Operation: Intersection (A \& B) \newline Enumeration: \code{carve::CSG::INTERSECTION} \\ + \includegraphics[width=2.167in]{ops/a_minus_b.png} & + Operation: Difference (A - B) \newline Enumeration: \code{carve::CSG::A\_MINUS\_B} \\ + \includegraphics[width=2.167in]{ops/b_minus_a.png} & + Operation: Difference (B - A) \newline Enumeration: \code{carve::CSG::B\_MINUS\_A} \\ + \includegraphics[width=2.167in]{ops/a_xor_b.png} & + Operation: Symmetric Difference (A B) \newline Enumeration: \code{carve::CSG::SYMMETRIC\_DIFFERENCE} \\ + \end{tabular} + \end{center} + \caption{The result of predefined CSG operations.} + \label{tab:csg-results} +\end{table} + +In the second case, the result is determined by a custom +collector. Custom collectors allow the caller to programatically +define which regions of the intersected input polyhedra appear in the +output. + +The \code{shared\_edges} parameter provides a way to access the +computed set of edges that defines the point of intersection of the +two polyhedra. + +The algorithm used to classify connected components of the intersected +polyhedra is determined by the parameter \code{classify\_type}. The +type of \code{classify\_type} is an enumeration taking values from the +set \{\code{CLASSIFY\_NORMAL}, \code{CLASSIFY\_EDGE}\}. + +The classifier is responsible for classifying portions of each +polyhedron bounded by the line of intersection as either: + +\begin{itemize} +\item \code{carve::csg::FACE\_OUT} \newline + The group is outside the space defined by the opposing polyhedron. +\item \code{carve::csg::FACE\_IN} \newline + The group is inside the space defined by the opposing polyhedron. +\item \code{carve::csg::FACE\_ON\_ORIENT\_IN} \newline + The group is lying on the surface of the opposing polyhedron, oriented towards its interior. +\item \code{carve::csg::FACE\_ON\_ORIENT\_OUT} \newline + The group is lying on the surface of the opposing polyhedron, oriented towards its exterior. +\end{itemize} + +\noindent with respect to (each surface of) the opposing polyhedron. + +\end{section} + +\begin{section}{CSG Operations on Open Manifolds} + +\end{section} + +\chapter{Attribute Interpolation} + +\begin{lstlisting}[float,language=C++,caption=Associating texture coordinates with a cube] +#include + +struct tex_t { + float u, v; + + tex_t() : u(0.0f), v(0.0f) { } + tex_t(float _u, float _v) : u(_u), v(_v) { } +}; + +// interpolated attributes must support scalar multiplication. +tex_t operator*(double s, const tex_t &t) { + return tex_t(t.u * s, t.v * s); +} + +// interpolated attributes must support operator+=. +tex_t &operator+=(tex_t &t1, const tex_t &t2) { + t1.u += t2.u; t1.v += t2.v; + return t1; +} + +void associateTextureVertices( + carve::poly::Polyhedron *cube, + carve::interpolate::FaceVertexAttr &fv_tex) { + + fv_tex.setAttribute(cube->faces[0], 0, tex_t(1.0f, 1.0f)); + fv_tex.setAttribute(cube->faces[0], 1, tex_t(0.0f, 1.0f)); + fv_tex.setAttribute(cube->faces[0], 2, tex_t(0.0f, 0.0f)); + fv_tex.setAttribute(cube->faces[0], 3, tex_t(1.0f, 0.0f)); + + // ... continue to record other texture coordinates by + // face pointer and vertex number. +} +\end{lstlisting} + +\begin{lstlisting}[float,language=C++,caption=Interpolating texture coordinates during a CSG operation] +#include + +carve::poly::Polyhedron *doCSG() { + carve::poly::Polyhedron *result; + + carve::poly::Polyhedron *cube_1 = makeCube(); + carve::poly::Polyhedron *cube_2 = makeCube( + carve::math::Matrix::ROT(.4, .2, .3, .4)); + + carve::interpolate::FaceVertexAttr fv_tex; + associateTextureVertices(cube_1, fv_tex); + + carve::csg::CSG csg; + fv_tex.installHooks(csg); + result = csg.compute(cube_1, cube_2, carve::csg::CSG::A_MINUS_B); +} +\end{lstlisting} + +\appendix + +\backmatter + +\end{document} diff --git a/thirdparty/carve-1.4.0/doc/ops/a.png b/thirdparty/carve-1.4.0/doc/ops/a.png new file mode 100644 index 00000000..7b354df1 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a.tiff b/thirdparty/carve-1.4.0/doc/ops/a.tiff new file mode 100644 index 00000000..7df897b0 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.png b/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.png new file mode 100644 index 00000000..e9ddb1e1 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.tiff b/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.tiff new file mode 100644 index 00000000..9b9502ca Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_intersection_b.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_minus_b.png b/thirdparty/carve-1.4.0/doc/ops/a_minus_b.png new file mode 100644 index 00000000..6d808fc2 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_minus_b.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_minus_b.tiff b/thirdparty/carve-1.4.0/doc/ops/a_minus_b.tiff new file mode 100644 index 00000000..055241af Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_minus_b.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_union_b.png b/thirdparty/carve-1.4.0/doc/ops/a_union_b.png new file mode 100644 index 00000000..545c126c Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_union_b.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_union_b.tiff b/thirdparty/carve-1.4.0/doc/ops/a_union_b.tiff new file mode 100644 index 00000000..0f59cfcf Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_union_b.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_xor_b.png b/thirdparty/carve-1.4.0/doc/ops/a_xor_b.png new file mode 100644 index 00000000..29c34a66 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_xor_b.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/a_xor_b.tiff b/thirdparty/carve-1.4.0/doc/ops/a_xor_b.tiff new file mode 100644 index 00000000..2ad991ee Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/a_xor_b.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/b.png b/thirdparty/carve-1.4.0/doc/ops/b.png new file mode 100644 index 00000000..21bfac07 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/b.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/b.tiff b/thirdparty/carve-1.4.0/doc/ops/b.tiff new file mode 100644 index 00000000..ad187cb9 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/b.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/b_minus_a.png b/thirdparty/carve-1.4.0/doc/ops/b_minus_a.png new file mode 100644 index 00000000..be76297d Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/b_minus_a.png differ diff --git a/thirdparty/carve-1.4.0/doc/ops/b_minus_a.tiff b/thirdparty/carve-1.4.0/doc/ops/b_minus_a.tiff new file mode 100644 index 00000000..dfa51eeb Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/ops/b_minus_a.tiff differ diff --git a/thirdparty/carve-1.4.0/doc/ops/texput.log b/thirdparty/carve-1.4.0/doc/ops/texput.log new file mode 100644 index 00000000..b3045daf --- /dev/null +++ b/thirdparty/carve-1.4.0/doc/ops/texput.log @@ -0,0 +1,20 @@ +This is XeTeXk, Version 3.141592-2.2-0.996 (Web2C 7.5.6) (format=xelatex 2008.5.12) 29 SEP 2008 15:50 +entering extended mode + %&-line parsing enabled. +**carve.tex + +! Emergency stop. +<*> carve.tex + +End of file on the terminal! + + +Here is how much of TeX's memory you used: + 2 strings out of 94863 + 15 string characters out of 1171490 + 46799 words of memory out of 1500000 + 3287 multiletter control sequences out of 10000+50000 + 3640 words of font info for 14 fonts, out of 1200000 for 2000 + 605 hyphenation exceptions out of 8191 + 0i,0n,0p,1b,6s stack positions out of 5000i,500n,6000p,200000b,5000s +No pages of output. diff --git a/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.png b/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.png new file mode 100644 index 00000000..18bc68d6 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.png differ diff --git a/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.tif b/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.tif new file mode 100644 index 00000000..1f246c4c Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/polyhedra/shared-edge.tif differ diff --git a/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.png b/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.png new file mode 100644 index 00000000..bb5cecea Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.png differ diff --git a/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.tif b/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.tif new file mode 100644 index 00000000..c6941338 Binary files /dev/null and b/thirdparty/carve-1.4.0/doc/polyhedra/shared-vertex.tif differ diff --git a/thirdparty/carve-1.4.0/doc/title-page.pdf b/thirdparty/carve-1.4.0/doc/title-page.pdf new file mode 100644 index 00000000..2baab356 --- /dev/null +++ b/thirdparty/carve-1.4.0/doc/title-page.pdf @@ -0,0 +1,13107 @@ +%PDF-1.4 % +1 0 obj <> endobj 2 0 obj <>stream + + + + + application/pdf + + + title-page + + + + + Adobe Illustrator CS4 + 2010-12-21T23:39:42+11:00 + 2010-12-21T23:39:42+11:00 + 2010-12-21T23:39:42+11:00 + + + + 184 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAC4AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXwX+aH/kyPNP/AG1bz/k++dLg/u4+4fc8/l+uXvP3sYyx g9c/5xe/8min/MDcf8a5h6/+6cvRf3j6/wA0TuHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq+Jtf8ALi+Yfzn8xafNdLY2Q1PUJ7+/kFVgtoJJJJpKdyEXYdzQZ0MJ8OIHnsHRGHFk I8z96NuNY/5x9iH6Nh8v6xc24IV9e+tLHd+BZLckwEdxyA96ZERzc7Hurb9bMyxcqPv6sh/ILSrT TfzkWOwuvr2mzadNPYXnEoZIZONOSn7LowKOOgZTSoyvWEnFvzbNIAMm3Kn1Xmkds7FXYq7FXYq7 FXYq7FXYqseeFOrivgNz+GKqP15eVAhK+Nf4YqqLcwt+1T54qqBlb7JB+WKt4q7FXYq7FXYq7FXY q+KPNV1ax+f/AMxbSZ0hk1CS9gtp5KhVlTUYrinIBuPqJA0dTQfFuaZ0WMEwge4D7nRTIEp+ZP3v PVQs4QUqxoCSAN/EnYZe0vcvyA+px/mbo1pb3Edy1poc6XMsRJT1ZJ3nKAkD7AmCmm1RttmDrb8M +9ztIfWPc+p80jtXYq7FXYq7FXYqseaNPtHfw64rag94f2F+lv7MNItQeaZurGngNv1Y0i1gXFbX BMKthcCrgCDtscVVVlk7N9++NJtUE79wDitrxKp9sCVwZT0OKt4q7FXYq+HfOmvXmj/mb5ye2ign W8vr21uIbqGOeNo2uvUI4yBqNyjFGWjDsRnR4og44+4fc6GcqnL3n70/vPypg1Gy/S0lqPJtk1rD cJe6hcD9HzSy26TNFCkx+truzKvH1jtTrlYz0a+o+XP9X3NpwWL+n38v1/er/wDOMiLH+a3BZFlV LO6USpy4sAVHJeQVqH3AOR1/90y0X94+vM0Tt3Yq7FVrSIvU7+HfFFqTXJ/ZH0nDSOJRZ5G6tt4d MNItZxxV3HFXccVb44q2FxUt8cUtgYq3TFWxiq4DAlcBgVcCQMVXAnvirdcUvjm41Tzfpv5v+dbn ylpzahrP1q+WMx231yW3X68hM8cXGT4hQJXiaBs3/DA4o8RoUPLo6QSkMkuEb2fvY7rPlP8AODW7 xr3V9D16/um6zXFndyMB4Dkmw9hlkcuKIoGI+IYyx5CbIl9rMP8AnGuzurL83ZLO7iaG6trW7huI XFGSSNlV1YHoQRQ5RrjeKx5N2jFZN31Xq+u6Po0MM+q3cdnBPKII5ZjxT1CrOAWOy/Ch3O2aaGOU 9oi3bEgc27LWNP1CD19OuYbuCvH1oJFlSo7ckJHfGUDE0RSOJUZnbqfowItbxwodxxV3HFXccVdx xV3HFXccVcBTAlsCuKt8cVdTFVwGKQ3gpV1MCWwMVbxVvFL42uYdYm/OLzedO15vLUEd3fyaprKy yRejaLdjl/dFXctJwVUB+JiBm/FeFGxxbDb4Ok38SVHh3O/xRq+ftL1K7ELfmB5n0Sy06H04ppXm upL+jNIzn0ZovRkcvxQOHAULV9sicND6Im/s/H4DPxQf4pCvtR35Aal+lPzw1DUuLJ9eS/ueDksy +tIHoxJJJHLepyOsjWGu6mWkleW++3sH/OQ8TP5Gt3HSLUInPyMUq/8AG2Y3ZZ/en3fqdjm5Pn7T Na1bTHeTTb24snkHGRreV4iwG9CUK1zeTxxlzALigkMz0n86/PljQS3UV/GBRUuolNPflH6Tk/Ns xJ9n4j0r3NgyFnuh/wDOQGiy2yLrVjPb3daO9qFkhP8AlUd1dfl8XzzCydmSB9J2ZjKGeaD528p6 9I0WlalFPMv+6SGikI8QkoRj9AzCyaecPqDMSBT3jlKXccVdxxV3HFXccVdxGBIdTFW8VdirYXbF Le3hitrqYEtO6IjO7BUUEsx2AA3JJxVjt7540pAyWXK5lp8LcSsYNablqN77D6cgZtoxHqg4tb1C 9YerJwRv91xjivhTxP0nBbLhAfJuv6RHrH5q69psuqWujx3OpXSveXzvHBT6wTxZkV6b7jlRfEjO lxy4cUTV+kfc85ON5JC69R+9OL3/AJVr5EuBCNGvPNWtKOUd3qyGy007gpLDbLyknRh/vxuJG+RH iT68I8tz82Z4IdOI+ewTj/nHjUm1T86bzU2hjt2vob65NvEKRxmZw/BB2VeVBlWtjWGvc2aQ3lv3 vdvzygST8tdTkbrA9tInzNwifqc5g9nmsw+P3Oyy/S+XAc6RxFRWxVUVsCqqvgSn+kedfNWlGIWG q3MMcP8AdwGQvCNqf3T8o/8Ahcpnp4S5gMhIs50H8+NdtYvS1e0j1LwnVhbybnuFVkNPZRmFk7Ni fpNMxkZ3of5yeT9TmWCZ5dOlKg8roKIi3dRIrNT5sFzDyaHJEXz9zITBZlY6jp9/EZrG6hu4QeJk gkWRa+FVJGYkomOxFMkRkUuxSHYFdirsVXr0wFkEFqms6VpUXq6jdxWqEMU9RgGbiKkIv2mPsoxJ AWMDI7BgOrfnAsqNFo1oyMQKXNxxqprvSJeQO3Qlvoyo5O5yo6bvYvca1qmpyCS/upLg15BWPwKT /Kgoq/QMhdt3CByTCyO4wsSyXSzuuSDVJ8y6p5I8xecPzQ806boFutzewXd5dNE0iRVjW5EZIaQq vWUd86SGWMMUTLuH3PNyxynkkI95+9kekfk7+fGlwG1i0mG505yTJp13PZXNsxOxYRSyMEb/AC0o w7HIS1WE9fvZx0+YdPuRn5DWs1p+e2p2s1tHZzW41GKW0gJaKJkl4tHGSWJVCKDfpkdYbw37melF ZSPe9z/O0E/lhrVP+XY/ddxZgaD++j8fudll+l8qK2dJbiKgbCq9WxVUVsCqqtiqqj4E2rI+BKJt rmWGVJYZGjlQhkkQlWUjuCNxkSAeasx0D80fOGmMR9dN9EakxXvKYVPfmSJB8uVMxMmjxy6V7mQm WdaP+dUMpjj1TTzFt+9uLd+Q5e0TAED/AGZzCydnkfSWwZGaWHnTyrfV+r6lCCCBSUmEknwEoSv0 ZiS0848wzEgnY3FR0PTKEsb8w/mJ5Q0EvHfagjXSEhrOD97MGH7LKv2D/rkZGUwG6GCcuQeW69+d 3mDUY5LfTIU0y3cU9VSZLihBBo/wqtfZajscpOUlzYaWMee7DfrVxcTNPcSvNNIeUksjFmYnqSxq Scg38kwtj0xaynFodx9GSDWU+suowsCybTOq5INcnyv5z1JbPzt51gaNnXULm6tiUfhxpepOGPwt yFYKcdvGu2dPhFwh5Afc81lNTl7z97GXvg9hbWLR/ureaWYsGozGZY1YbggUEIpl1btV7U9c/wCc db/9I/nNdah6Qh+uQXtx6KklU9Vw/EE7kCtN8wtaKxV7nM0hvLfvfRX5qWjXf5d6/EoqVtHmp7Qk Sn/iGavSSrLH3u0nyL5BDZ0wLhqgbJWheGwqvDYqqK2BVVWxVVV8CbVlfAlEQv8AFgKplbv0yspT O2kyBSqa3qN7b+XL6O3uJIY5lRJkjdlDqXUEMAdwRmv7QiPCJ/HNy9F/ej8dGCRNnPO8JR0DdMLA lMLdumFgU1tj0wtZTmz3IwsCn9l1wsCyfS+q/PJhrk+ZNX8leY/N/wCZ3mnTvL9qLy9gu7y5eEyR xfu1uRGSGlZF2Mg750cMsYYomXcPuebljlPJIR7z96J/6F3/ADi/6l//AKfLH/qvg/O4u/7Cy/KZ O77mY/kb5K8x+UPzhtdO8wWos76fSp7lYRJHLSNpDGCWiZ13MZ75Tq8sZ4iY97dpscoZKl3PpHzP bG68tatagVM9lcRAf68TL/HNViNSB83Zl8Sq2dQ4SoGyQKrw2SBQqBsKrw2Kr1bFVVWwKqq+BKIh ffAUpjbv0yBSmdtJlZSt8wv/ALgbn/nn/wAnFzA1/wDcy+H3hy9H/ej8dGGxN0znHdEo6FumFgUx tzhYlNrU9MLWU7sz0+jJMCn9l2wsCyjS+q5INcnzNrbalJ57892Om82u79r2NYovtukN7HdSKKbn 93bsaDrTOkx14cCegH3U85O+OYHUn72CpNdu4RHkZ2NFUFiST2AzJceg98/JjTL3SPzX0TSNQV49 TstAl+vQSNVo3uJ3ukQilVIiuE5Kehr8s12rkJYiRyv9jsNNHhyAdQP2vpkgEUO4PUZpnaPg8HOq BcJerZJVQNhtDpLmGEAyyLGDsCxoPvORnmjCuI1bKOOUuQtWR1ZQykFTuCNwRlsZAiwwIpUDYVVF bFVRWwKrwvvgKQmNu/TIFkmVu+VlLWvv/uCuf9h/ycXMDtD+5Pw+8OVo/wC8H46MWsITM4rtGOrf wGc47op2lrat0XifY5JgUdb2MPZmr70/pixKZ21jSn7z8P7cLAsg0nRdSu242sJlpSrDYD5k0GEM CyOw0uS3mC3UbLIN+DCgPau/UZfHGHGlMprpnVcrDKT5Z8x22uXP5tarDoSzNrDaxcfUPq5IlEon YqysKceNK17dc6XEQMQvlwj7nm5gnIa58R+96re63+bulWDzwS+VNR8yrze6lsRay65GVHx8o14R u1OoRGOYohjkf4xH48LkmeQD+Ey+HExv/nG6/vdQ/N6S+vp3uby5tLqSeeQlnd2Kkkk5ZrgBioeT DRknJZfXGaN274PnjaC4lhb7UTsjfNTTOnBtxCGg2TBYqitkrVLfMW9ih8JB/wAROavtYegHzc7Q H1EeTEIb26tL1Ht5WjYsA1DsRXuOhzUYssobxNFyZxEjRZVp3mK7aVI5wsimtXAo3j22/DM3F2vk j9VSH2/qZS7OhL6diznQvL2o69byS6N6d9LAnqXFnE3+kovILX0W4s4qRUx8gK7nNph7Swz60fN1 2fR5MXMbd6ld6RqtlMYby1kt5l+1FKvBx/sWoczYzEhYNuKsijmBqUYDxocSoKOt3yJZhMrd8rKW 9a+PRrha0rwr/wAjFzA7Q/uT8PvDlaT+8H46JDbOqIFXoOmc47kphDLhYFP9E0vU9SkCWNu8xBoz AUQGlfic0UfScWJL0zy/+XKIofU29aSp/dRsRHTtU0VifuyYi0ymGf2emxwxoiIFRAAqjYADsMmA 0Smi5LG3nj9OZA6dae49xkhs1EpLJ5Ye2cNZsZIgPsORzr36AA5GmXHb5K1f9Kf8rJ842mlrIdYu 5r62skiJWYs1yDKkdNyzwLInHq1aDfbOjx14cb5UPudBMnjlXOz97HvL3kzzhqusQ2WmafcreLIK ylHjWAq395JIQBGqdSx6ZbPJGIslrjjkTQD0r/nH2S1l/O6+ktDW0eO/a3IoKxmQFOn+TmLrf7nf ycrSV4u3m+sc0btnxB50gS185a9bJ9iDUbuNPkk7qP1Z0WE3AHyDiy5pSrZdbFUDYQVS/XzWxX/j IP8AiLZru1f7sf1v0FzNB9Z936mFy/70p/rD9eaQcnLPMJxYki4T6f1HKi5+M7sj0nV9R0u8jvdO uZbS7irwnhYo4rsRUdiOoyLkkCQo7h7z5N/OTyv5mS00nztYQ/pEhYItSkjR4ZHf4SzbAwMxpuvw 96qMycWqlHrTqdT2bVmG47mXaz+THl26CtpUsmlyigI+K4jI3r8Mjcq/7Ontm0x9ozH1er7HUHEG Iah+UHm20YG3SDUUJIHpOEcKOhZZeA38FJzLhr8Z52GJxkMXkt3tp2gurdoJ4zR4nUowI8RtmUCC LCN1DXTCNFuGXYjh3/4sXMLtD+5l8PvDlaM/vB+OiQaHpup6veC006Bri4KluKkABR1LMxCgfM5z juSXrvlP8mZiEuNZcTAje1iJVAa7VkqpPyA+nJCBLRPNEPU9M8uWVjCIoIo4YwaiOJQor40FMsEH GlntNUhjQUUZMBpMihrzXNJsW4XNyiP09MVZh81UMR9OGMCeSEC3nHTzUQRSSEGgJoqn3rUn8Mn4 RVya/dXEg9NREngPiP3kfwx4AEvjbzhZatqX5r61aaXHJPqlxrFyLVIdpDKZ2IKkUpTrXt1zf4yB jBPLhH3OhmCchA58R+96F5n0j8/JPLcum3fmaDVVgjl+v6JZXkUmorGopIs4RUlmFOq83+WY2OWH isRrzrZyJxy8NE35XulP/OL3/k0U/wCYG4/41yWv/umOi/vH1/midw+I/wAwqjz/AOZQdv8Acren 77h86DB9EfcHFlzSJWy5iqBsNpQGumtkv+uP+InNf2p/dj+t+guZofrPuYbcGk6n3H6800XJnzTi 12lU/P8AVlRc2B3TON8g5IKJjkwNwL0/8tPzl1fyuI9NvlOoaJzBMZYmaFTQH0GY8ePfgdq91qTk 4ZDH3OLqdFHLuNpfjm+j/LnmXR/MWnRahpdws0UigvHVfUiZhXhKoJ4sPD7tsyYyBGzo82GWOVSC PvLCxvYhDe28VzEDyEcyLItR3owIycZGO4NNdMR1b8ofKGpyMXWe2hcqZLa3kVY24sG/aV2Fab8S PamXT1E5w4DyTD0y4gm1u3kfytbCxikstOFuA3ockEu4A5Ff7xifHKI4SeQZyyyPMpNe/nBoEYdb K2nunU0VmCxRsPEMSz/emZUdJLqwtJ7n82danLC0toLaNhRS3KWRT48iVX71yY0sRzKpPJrur3wK 3d7NMjGpjZ24VH+RXj+GT4AOQSiLU5EpTq0PTKyqe6edxlUkvl7VrrUbT8w/PVzpbOmpxtfi1eGv qqJLtI5ilN6/V3kqR0FTm6gAYRvlt9zo5Eicq52fvYTo0OsTataJo6zPqplQ2YtuXreqDVSnHetc ukRW/JpiDe3N7D+QaRR/npqSQ09JF1BY+PTiJQBT2pmFrf7n5OZpf70/F9W5pHbPjD84bRrP8zfM MJFC10Zt/CdFlH/E83umN4w40+bEQ2ZDBerYVQusb2LexB/hmB2l/d/FzNEfX8GJpp9/f3Qhsrd7 iY0+GNS1N+pp0Huc00XJylMYdmBysubFGRvkG4FExvgbQUZbyfEMBbQWVeU/NGseXdRXUNKn9C44 lHqAyuhIJRlOxBpgEiDYXJjjkjUnqdx+e3mWeFRbWdpbM0ah5CHkb1KfE6VYKBXoGDfM50WDRRlA SkeYBeWzemZiOhLG9V87+aNZjEWo6jJNDShiXjFGd6/EkYRW+kZlRwwhyDXaXRvhJSjYX6ZUSyCP gbplZLJM7Y5WVTe0PT6MrKU6sz0yBSn2nn4hlUlfLWs2WhXH5nea7nXjOdI0+6vbq6htWVZpT9Z9 KKNGcELyllTkaGi1ObqJPhxrnQ+50ZA45Xys/ejE86/kqqhT+XEjkAAu2s3YJp3NABv7ZHwsv8// AGIT4uP+Z/sin3/OPFzYXX503lzp9v8AVLCeG+ktLUkt6ULuGjj5HrwUgVyrWgjDvz2bdIR4m3J9 Z5pHbPkj/nIq2MH5o3shFBdW9tKPoiEX/MvNxoj+7Dj5ebzUNmYwXhsKF4S2lKrco0lvyUyxo3Bm UGpAajUr8sp1GHxI8N024svAbeo+U7/8tuKWdlGulSyFYwk8fEuQNi0wLg0rSrtXNZPRTj5thy8X N5z57/LDzB5OZZ7gi60qRljiv0ov7xgTweMksrfCT3HvXYa6UadpizCXvYrG+QcgFExvgbAUXbv8 QwFtBTe1k6ZAtgKfQP8Au0+Q/VnW6Y/uo/1R9zy+p/vZf1iio3yRLWEXE/TKyWSNhbplZKUxgOVl kmlsemQKpvanpkCqd2Z6ZWVT7TvtDKyl8n+br9rH8yPM0xtUvbY394l3ay8/TeJpzsxQqy0biVIO zUzeYhcI+4OhmanL3n71JNa/LUIok8rX7SUHMrq6qpPegNkxA+k48OTvHy/avFDuPz/Yzn/nHKay m/OO4msIDbWMlvePa2zNzaOJnBRC1ByKrQVzH11+Fv5N+jrxNn1tmjdu+XP+cowB+YFhQddKhJ/6 SbjNrofoPvaMvN48Dmc1rg2Krw2FVQNkkJvpPmbV9NT0IZzLYMSZtNn/AHtpKG2YSQN8DcgOtK+B yvJhjMbhlGRG4Yzqmn/v5bq1iWOKR2cWsfIiMMahU5FmKr0FSTTqT1zUars8wHFHcO00+r4tpc0B G+ax2AKMt3+LAWwFNbWTpkS2Ap/bv+7T5D9WdPpj+6j7g85qf7yXvRkT5MlrCLibKyWSPgbpkClM YD0yBSmtsemQKpvanpkClPLM9MgVT/Tj8Qysq+Z3OuP+cev2uja9H5cuby/vIZNSluGtEEfrlyhk Xf4mQUXuc3IrwgSOLYebo9/EIB4dz5dU18yecvK3lq3vNBj0weatcr6d3rGu2UUCxOpY/wCjwcFu R9rrJJ9FMjHHKdSJ4R3A/f0ZyyRjYriPeR+C3/zjE5f81Q5AUtZXJooAAqVOwHQZHX/3SdF/ePr3 NE7h8wf85TQsPPGmTfsvpiIPmlxMT/xPNroT6D72jKN3jOZrW7FC8NhVeGwpXhsKFRWwpQV5piSF pYfhlO5Xsx/hmt1WgErlD6vvc7T6wx2lyQEXJH4sCrDqCKHNJKJBo83bRkDuE0tX6ZAtoLILZ/3a fIZ0emP7qPudDqP7yXvRsTZYWsI2E5ApCPgPTIFKZQHpkClNLd1UAk0HcnK5GuaQEyt7yBf2q+w3 ymWaIZ8BTizvmNOKgfPf+mUHMWXhsi0yV2K1PU5WZEoID5n1OPyU35meaW83vfppsd1dtCul+j9Y ef60Aq/v/g48CxPyzoYcfhR4auhz9zz8uHxJcV1Z5e9HS/mB+WsOkSaTF5WvdXt+Hp2kuq6gpe26 kGAxQ8oxyJJRXCnuMfCyE3xAe4ftT4kAKq/eUy/5xjMZ/NWsalIzZ3JRCeRAqtATQVyGv/umei/v H17midw8Y/5yF8hXPmOXRruxmjiu4FmidZuQVkqjD4lDEEEnt3zO0eXhsFqyC3zprflvW9ElSPU7 VrcygmNqq6NTrRkLLX2rXNlGYPJpISzJK7FVwbCq8NhVeGwoVFbCq2aziuN6Ulp8Lj+OYup0kcov +LvcrBqZYz/RQ6RywScJBQ9j2PuM5/NhljlUnc4somLCe2rfuk+Qzd6b+7j7nU6j+8KPhbLS1BFC 5hiAMjBfDx+7KMmWMeZbIwJ5K0erQL9gFz2PQf1zFnq49G2OA9UTDqVy9KEL8h/WuY0tTMtnhRCY 28sj05sW8KmuUmRPNlQCd2Xb6MUFkNh1GLEs90HRJyEluR6adQn7R+fgMkA1SL5puJPLtn+Znn66 1vQ/0/ZWb3jx6eJnt/j/AEjDGJPVjq68VduxzoQJHHARPDy+50Pp45GQvc/eqv5w/KIWFtdL+WiP LczSxC3GsXZYCNYyrbJX4zIQNv2cfCy39f8AsQvHir6f9kU8/IyO1j/PzV47SJYLRDqS28EbeoiR iaiIrj7QVdge+Vau/B38m7SgeKa831TmldqxLz8hYWJ8PV/40y/B1YTYdLaxyxvFKiyRSAq8bDkr KRQgg7EHMhgxDzB+VHlrVI3a0iGmXjEETQKTHttQw8lSlP5ab5bDNIc90GLzjzD+VnmjSAJIYv0l bsxVWtFd5AP2S8dKio8KgeOZMM0T5MDFh5BBodiMtQ2DhVeGwqvDYUK0LfFhSjVjjmThIvIZVlxR mKkG3HklA2EXaWaqqhmJAFNtsrxYeGIF8mWTJxSJ71bVVWHTmaP4WLKOQJr9+Ua7bHt3tmn3klEB zRuemVuemKpranphYlObTtihlPl7Sb/U5xFaRlqU9SQ7IgPdm7dMIDCRp6poPliz05FZ6XFyDX1m FKeyipp8+uTAaTK2SRDCxfFnm+Xy5F+Zvm9tetrq6tzfXgt47OZLeT1vrexMkkU68eHP9jOixcXh xruH3OgnXHK+8/enPlzyj+W2o6Df+ZNVsda0jy7Y/u1vmv7WV7i5P2Le3i+ox+o57nkAvc5CeTIC IggyPl9vNshCBBkQRH3/ALEb/wA4yGI/mtWFWSI2d0Y1dgzBarQMwCgmnegyOv8A7pnov7x9eZon bse85wc7O3f+WQr/AMEtf+NctxHdjJiXoZkWwd6GNq70MbVJPMXkXy75gAbUrXnOiFI7lCUkUH3U 0anUBgR7ZOGUx5IIt5v5k/Iy9t4nn0C6N5QjjZT8Ek49CRLVUY133VdvxyIakdWJg861TRNY0ib0 dTs5rRyWVfVQqrcDRuDfZce6kjMmMweTAikIGyaq0LfFiqYQHpiyTKBsFpa1pv8Acaf9dcwe0P7v 4uTpvqSe3PTNI5yZ256YoTayR5HVEUu7EKqqKkk7AADCgvT/ACl+Wt3dRrc6uXtIq/DbAASsKdST Xhv2Ir8skItMsnc9T0+xtrK2jtbaMRQRCiIOg3r33OTaiUwjXFCKjGBXxhr9h5cvvzl1+HzHqf6J 0YarePd3SxyzOVWdv3caxJIeT9KkUHXfoeihKQxDhFnhH3OhkAchs0OI/emXn2/0jzTewWtl5q0b TvLelqYdE0lY9WVIYR+09bD4pXpV2JO+RwgxG8SZHmfT+tnlkJdRwjlz/Umf/ON9tDa/nDPbQzpd QwW95HHdR1CSqjKokXkFajAVFRkNcbxfJnox+8fW+aN26T+aV5afGP8Ai0f8RbLMXNjJivo5exb9 HFXejirvRxV3o4qhdQ0bTtRgEF/axXcIPIRzosihgKVAYEV3wgkclefeYfyN8v3UMkmjNJp92F/d Rs5ktywNfj585BXpUNt4ZfDVSHPdiYB5l5g/LvzV5dV7i+thJZIwU3kDCSOreI2dRXarKN8y4Z4y 5MOEhKoG6ZYqY27YGQa1lv8Acd/s1/jmFr/7v4uRp/qSq3zTOaynyp5W1rzDctBpsPMRcTPM5Cxx hjQFmP6hU+AxAYykA938qfl3oehIkgj+t344lrqajFWAFfSWlEFRUfte+WAOPKZLL448LBExpiqJ RTiqIQYEPjPXPKkfmX81/OFk+r2GjCC8vbgXepzfV4GIuxH6fMg/EfUqPlnQwycGOJonYcvc6Mw4 py3A3PP3ohPyYhR1dPzA8qK6kFWGpgEEdCDwwfmv6M/kn8uf50Pn+xk/5JQrB/zkDrUKtGyxNqaK 0IAiIWelYwoA4+FO2Vas3gHwbtMP3x+L6nzSu1S3X05WH+q6n9Y/jk8fNBY36eXsHen7YVb9P2wK 7gPDFXemPDFXen7Yq4xV7YqtNvv0wEKxrXfy18qayHaexW3umJP1q2Aik5MaszcRxcmn7YOWQzyj 1Wnnmtfk15h02Jp9OlXVIUFWjRTHPtUmkZLBqU7NU+GZUNVE89kcLBNdsb+KMWUttLHeGVEFsyMJ eTfZXgRyqa7ZVrjePbvbsH1M/wDy+/JK5uUt9T8yVhtmBYaVR0mYGoHqsChj7Gg38aHNUIt8snc9 s0/TbKwtY7SzgS3tohSOGNQqqCanYeJNTkmko5Y/bCqsiYoV1XFVZFwKrKMKviXzlBoM35l+co9Y u5rJDe3v1OaCITj6x9bHFZU5Rn0ynKpBqNtj0zo8RPhxruH3OgmBxyvvP3pPqvknV9PBuIvS1WwS NJ3u7B/VVYZFV0eVKLNAGV1/vY16+OTjkB8mMsZD0X/nHTUH1L85rnUXjSF7yC9uGhj5cEMrhyqc izcRWgqScxdaKxV7nJ0ZvJb61zRu3QuppzsZR7A/cQclDmgsf9PLmFO9P2xtad6ftja070/bG007 0/bG1p3p+2G0O9P2xtWxH7YquEPtgSvWH2wKsnsbaR4ppIkeaAkwSsoLIWHFuBO61GxpkJ8mUVRY 8rZqipiqqqYoVVXFVVVxVVVcVVFGKHxhr9p5QuPzX84P5ru7q10y2vb2ZUsUR7ieX64EEMfqfApK uzcm/lzoYGXhx4RvQ5+50ZEeOXFys/evu/zdFlIsfkvSLXy6fSjtTrEii71Joo4lgFbh1Pp1RdxE g+/Eae/rPF5dPx70nPX0ivvT7/nHS3vLb85rm3vX9S9hgvY7qTn6nKVHAc8wTyqwO/fKtabxbeTZ owRk3fWuaN26ncitvKP8k/qwjmpSP0/bLrYO9P2xtWvS9sbVQDOJCCKipGQ4qSArBVP9MkJAqY0u 9LCh3p4q2I98VXqntgVcExS26fB9OQkmK0JkGS9UxVUVcVVFU4qqBcUKgGKr1GKvi/XNa8taR+a/ nG48w6GPMFnJeXsUViZ3teMpvAwk9WMMwoqsKe+dDGMjjjwnh2Hn0dGZRE5cQvc/erDz/wDlCTQf lihJ6D9M3f8A1TyPhZf5/wDsQnxMX8z/AGRZX+SwA/5yF1wCE2wEmqUtySTH+/8AsEnf4emU6r+4 Hwb9N/fH4vqTNM7RbMKxOPFT+rCFSr0xllsXemMbVj/njVtU0bQnv9OWIvE4a5lmjaYQ24BMs3op JC8vpgcmVWrxqRUihbVjmtfmNNpun3WrjTEn01JtTtrYi5KzvPpcVzK4ki9JljR/qMlGDsR8JKj4 uNZZBXXzj5okvbW0h0K1klvNOudSt1+u3EbEWrRIYmSWyR1dnuFAqPGvhgZWk3/K9LA2cl1BprSR JbfXIvUmEXqwuEhhaMslP3l85t/ipQKX3+zkgSxKdf8AKzUl8z2ekWdjHPZ6hZ297aag07JyW6tr m4iBT0WQV+p0/vOXxVVTxakuJjTf+OdXvfy6sPNNlbQWN3qM2npFBOJriNI7+7ht6tVbJmKrPX4f hJGzEb42tK0HnDzBD5mn8qzW1pf6stJra7RpLG1eExc3RwfrrrMhI+EcuSnl8ONqqeXfPeo+YYry fTdKhEGmXJsdQFxdmOVblIld/RVYJFkirIoR+alhUhelW0oEfm5bR2mlXuoaeLWx1SPSZPXSb1PR /SttPcMZQY0AS3+rfE1fsnkeNKGJUL9N/NAanqOm29lpoa31Bb+RppJJVeNLC5SAExx28oHrJMkg 5sqivEmtKhNoSf8AN+5OkTX9no0bT2OlSatqmnXd21vcQLEEbgoS3nWRJVkDRScgrb9CCAqj9U/N J7G58waemnwT6t5b006pfW4vCsbrFGZbiOKT0GcmNJIaFo1DF6bcdwqLXz/rCa2mg3OkW0erTi0N rwvXa2Y3cd7NSSVrZHTjHpzU4xtVmA2ALYqhbz834rCC4kvNKeIW1vdetcerytUvbW5uLQW8kwjq kc0towjmKU3AZVYhSoeh2kjy20MsihHkRWZFPIAkVIDELWnjQYqrgYpfFuu6R5W1T82POMPmTWjo NlHe3ssV6LeS6rMLwKI/Sj+LdWY19s6GMpDHHhHFsPLo6MxiZys1ufvVh5K/JYEEfmU4I6EaNe/1 yPjZf5n+yCfCx/z/APYlPf8AnHmCxt/zqvLewuTeWMMV9HaXZBUzQrIBHJQ7jmoByvWknDvz2bNG AMm3J9ZZpHbuIqCPHFUBwyxi7hiqE1HRtK1OJItSsoL2KJ/UjjuYklVXAK8lDhgGoxFffFUFL5Z8 vyXV3PJpdo816jxXkrQRF5o5F4ukrFaurLsQ3UZAsgik0nTFuYrtbSFbqCI28NwI0EiQkgmJXpyV KqPhG22BkpHy7oRa3c6dbFrQobVvRjrEY+RQxnj8PHm1KdKnxxQox+T/ACpGjxpotiqScC6C2hAb 03MiVAXfjI7MvgST1xUrx5V8tDSjpH6Isv0SxDNp/wBXi+rllIIJi48KgqKbdskxX/4U8sGxGnnS LL6gJPXFobeL0RLSnqenx48qbcqVwgoVV8s+XReQXo0u0F7aosdtciCL1YkQFUWN+PJVVTQAHbFK z/CXldYTCuj2SxF5HMYtoQpeaMwytQLSrxMUY91NDtkSkKb+T/KstybqXRbGS6Z3kadraEyF5Kc3 LFa8m4ip70GBKKfy35fktBZy6ZaSWi24s1t2giMYtlpSAIV4+mOI+DptihbJ5U8sTIUl0eykRmmd la2hYFrpeFwxBXrKuzn9odcULpfKvliZXWbR7KRJEiikD28TBo7f+5Q1XdYq/AP2e2Kqy+XtAUMF 021Aa2+osBBGK2lSfq5+H+6qx+D7O/TClMEUABVACjYAbADAhdil8UeY7TRpfzZ823WtpLLpGnX9 9d3lvAQskwF16ccSsfsh5ZUVm7LUjOigT4ca50PudFIDjlfIE/es1D8xfKuqQjTrnyTpdjpgqsU+ niSLUIg3R/rBYiZl6/vEIPtjHDIb8Rvz5JOUHbhFeXNkv/OOFlJY/nDPYyGslrb3kLmhFTGyqdj8 sp1xvFfubdGKyU+t80bt3YqhuGTtFO4Y2tO442tKMvFWJO2RKhqFuYJpQA7YGQVOOKsT1bzpfaf5 hn086bHLp9q2mLPeC4YTf7lrl7SIpb+iVbhKnxfvfs9KnbFUPoP5n2Wu2wn0/Q9UcCKG5mjkS1ie OG5d0hkYSXC8lf0XI4cthXuKlBULH86PJ89tbSXEV7p8t7b293aWt3CEmlgurhrdXRVdwQhXm++y fFihdYfnDoV9qa6ZbaXqb3n1q8tJI/Sg/d/UCiyTP++2hd5OMcnQsCNiMVRNn+ZVpq/kSfzdodk0 0EPIi1u5UhZ+ChuCPB9bVnYsEVVqefwmhriqjD+Zsj3MyDSf9HjvrWzSZbgMxiutRuNNMrII/hZJ rQn0wTVWHxVDABU68jebX8z6bNePZiyaNoeMayidWjubSC8jbmFQBuFyFZexGxIoSqyPClvFWwMC G8Vdil8Pec72wtfzW8z/AKRge502bU72K9hiYJKYjcMaxuQwV1ZQy1FKjfaudHiB8ONc+Efc6GZH Gb/nH700tbT8i9JjTVzqupa/cJV7fQHtRbAyLui3UxLIYyftem1f1ZAnKdqA87+5srEN7J8v1pt/ zjXdz3n5uyXk55T3NrdzSt4vIysx+85XrhWL5M9GbyPrnNG7d2KqJBrkkOocVdQ4qskgV+vXscCq SwvEa9V70wJVhQioxVASeXdAl1NdVl0y1k1ROIW/aCM3A4VC0lK8/h5Gm+KUGvkXySkcUaeXtNWO 3NYEFnABGahqoOHw7qDt4Yquj8k+TI4TAmgacsBT0zELSAJwAYcePClKSMKe58cULl8k+TFlWZdB 04So7ypILSAMJJaeo4PCoZ6Dke/fFC+Tyd5RksnsZNDsHsZfSElq1rCYmFuoSHkhXifTUcU2+EdM Kqn+FvLPxf7iLKrTpdN/o8W9xESY5j8P94lfhbqMUorT9L03TYDBp1pDZwMxkaK3jWJC7dWKoAKm nXFUXQYq3ih2BIdirYxV8P8AnLX7rRPzP84T21va3D3F/ewFb23hu41Bu/U5COdZE5fu6Vp3OdFj gJY4+4eXR0M5ETl7z97L7XU/8MeUl8x+cNI0W51HVoj/AIc8vHSNOiZkP/H7cmOBXWJf2FBBf5ZS Y8cuGJNDmbPy5twPBHilRJ5Ch8+SF/5xklaX81vVYKGks7pmCKqKCSp+FVAVR7AUw6/+6Tov7x9e ZonbuxVaRvhQ1QYq6gxV1BirqDFWuI+WKu44Eu44q7jirYGFW6YFdTFXYq6mKupirsVtumFDeBL4 k8xavouj/nP5g1LWNJ/TdpbateuNOab0EeQTtwMjenLyVTvxpv32qD0MIk4gAa9I+50RIGQki/Uf vUPMnnTyf5m1y51nWtL1ma8um5Mw1a2KqP2Y0U6d8KKNgK4YYpRFAivd/wAeTPJGRsg/P9jK/wDn G97KT84Z5LGN4bJ7e8a1hkYO6RFlKKzAKGIWgJoMp11+Fv5NujrxNn1vmjdu7FXEYq1TChBa3Dqs 2jX8OkTpbarJbypp9zKvKOO4ZCIndaNVVehOx+RxVgV3of55PoNhBba/Yx6zHDML+7Pp8JJWuQ0N FNgw+C3qrOFUE/sftYpR3k/R/wA4LWeRvMuu2F5EYIliCQiWkwuGaViI4bA/Fb0RTyorb8W7qEN+ g/zsa6vXGv2UNvJGfqMZWOYxyfXlkHMiyh5D6mGjJ8T0r8eKp5PpXn2byTFZJrEdr5rHp+pqaJFJ HtKC4Ie34N+52qIUq24CjYKWEP5R/wCchhDcyQ+Z7EX0knqQmSXnGo4tGo4jT0TZOJYcOLNuFRhy YKnuoaL+dTWdstjrtgl4olFxJKF4MTfrLEeIsydrINEaFfiNdz8WKpJHov8AzkbJdTxrrtnDBbxS xJNcpa0uJmtuMU8QhtXKJHOQWWQVah2CkKpVlPkjQ/zLsdXvLrzZrkWqWs8XG2toAiRwsH5CirbQ s3wsRUvXbfl1VVL7jy/+cFz5pu79tWsbbSYTe/oi2hlmJ4zW7RWv1iL0Fjb05Qkp5F6EtQkBRirH bzy1/wA5DSaimnpryC3aOKd9Zje2SETwkAqYDbGYGX0wxVR6QBKnkTUKp9D5b/O2PTYbZPM9oLmG 9t3N1Mkc7S2UcPGeJx9Vio0kvxg7kDbn4qoFfLP/ADkW1qkcnm7TEn4ESTx28ZPLjBxIDWpX7STV 2/a+QQKmWj+XfzmXzDpdxrnmGyutFtZjJeW1svoPIv1RYgCFgHqD6xzfiXUd99lVV6NirsVfBf5o f+TI80/9tW8/5PvnS4P7uPuH3PP5frl7z97GMsYPXP8AnF7/AMmin/MDcf8AGuYev/unL0X94//Z + + + + + + xmp.did:F87F11740720681197A58258B7E98B65 + uuid:2c556ffd-8091-114a-9688-38fb015a2185 + proof:pdf + uuid:EA753E0DB68FDD11B321F71FCED894E8 + + xmp.iid:F77F11740720681197A58258B7E98B65 + xmp.did:F77F11740720681197A58258B7E98B65 + uuid:EA753E0DB68FDD11B321F71FCED894E8 + proof:pdf + + + + + saved + xmp.iid:F77F11740720681197A58258B7E98B65 + 2010-12-21T23:38:21+11:00 + Adobe Illustrator CS4 + / + + + saved + xmp.iid:F87F11740720681197A58258B7E98B65 + 2010-12-21T23:39:05+11:00 + Adobe Illustrator CS4 + / + + + + + + Print + + + 1 + False + False + + 209.999929 + 297.000132 + Millimeters + + + + + FrutigerLTStd-Roman + Frutiger LT Std + 55 Roman + Open Type + OTF 1.029;PS 001.002;Core 1.0.33;makeotf.lib1.4.1585 + False + FrutigerLTStd-Roman.otf + + + TrajanPro-Bold + Trajan Pro + Bold + Open Type + OTF 1.004;PS 001.000;Core 1.0.27;makeotf.lib1.3.1 + False + TrajanPro-Bold.otf + + + TrajanPro-Regular + Trajan Pro + Regular + Open Type + OTF 1.004;PS 001.000;Core 1.0.27;makeotf.lib1.3.1 + False + TrajanPro-Regular.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + + + Adobe PDF library 9.00 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 5 0 obj <>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>>>/XObject<>>>/TrimBox[0.0 0.0 595.275 841.89]/Type/Page>> endobj 6 0 obj <>stream +HlMo0 <($}\bإJN0'?J H+/Z|~K V  \_#NM0:rB3k9͉r9xC:6#@soeCTsg_cq--}A h"+A!+^C7UArc3y6G3/Iߔy5ʳ"b¨zU2Jl_pjX||U~FqT Q {Ũ!yϖe#b+yr~w'Xw.u{~|tJKz9ٙ3WgوΈt#j;9m/ ՟uHq"6aoS`᪕_R-7`]JT6& SW`6Wɍ?Voቸ endstream endobj 11 0 obj <>/Filter/FlateDecode/Height 4044/Intent/RelativeColorimetric/Length 3169939/Name/X/Subtype/Image/Type/XObject/Width 2481>>stream +H +ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUإu4$_ezv,C4m2; , ^`ϜJJsr?5Ͻ H+MGov|k&>^;J1!qe{0v]'SSS>iu^zuYc[޻Gηqi{%{1+=Ss X^ޱ~k[mQ7So^+| ǔKeec%ecKݾژ6~x>5()GK~&>m^zƥnq˵wu<6V=w)a QR +ߧ9H)z>y}I92/qzbm޶ic,C Oe[>:ͽm^b_ָ-_>XDZQ[K{ϭ|_>,~Ի12ĐK#G꥔W)84M1skKzm/zvzyqgkZ8K}9~RWy ec%ecqۧs٥~_Su61RJGQ靕cȥ7!46/}Y{Z]zhyVRV_vE=m\ ][M_HB&nNJf `|٪huFgoÇfΘ;1Zƈ5sDSURoZtoak٥-H:%|S$?~qio Kl;rrL3MYJViRmhU.lEgt=Ri߶ZVz^?% )zIvfKƘ{xjfVRRJ+Uڤj׶.R-[kѭElw8k9=KY,:Ƕ8 !ly97}cv3 2# Jr^4DiYe-U~EY8V-}-ǩZiʒc(0 }u3l~?<|%l;ZKZZ֭V˩7Eky~:2z<˚Dg-Zg>9Yag윹~x1ƈv望Y1?eX K +Q4e)YjMfutOZN_~~K:>ƣWKogc\>c8plY+{!H +QrLRJ"TYjMfutOZN_~~K:>ƣWKog1F }>GϪsNl[3k +OZ1q QJLRSEZ\jhl-hKo|?5~fõUl{-yyfٯ\}c]%% %&iYe"krE3}s_oiT 4e}Sg<8/޺1U{cx% 5Z٢euvʷn-}i{OlDCef޺-gL_3Gx朓EU"d-uh[ՔZN[Tuz>oKuTbJ!΢[-hGe{/!1JJITUJ)Z]jԛ-]tS-]緞ٲ>}|\Mqv}jH~g}=Ke\KOS1ݼ%0 r(cXkgιv Jr^4D)K*YK}W;ʿ\[>3$u}ok59VWggts ΜsChRSURRl~O_tx>XrLžק3gcݎ;X3kgX135>}hRʢERg?D;q\ <_$v'QϮuI.[כ+4kWwvds/m<o osnYmhRGZ K +QJRsTyֵݿIK[{x]d_~y`чQߗk]wm=wNlƘn\)q>~K)^(-VqƊNR[9&))j.kK[ڱ_nx]NUlG}5ֽ}m*n֟9Rn1䘤,KRs[nyksiIx9Ga=Ȳ~W휾{}߯Ŷn(cFsc?KpNQZd$Kr-C\>{ͮ\_B|ھ\gZ!yק~nң,)o]r]K[h=lw_wŃf}ds/!>l%GGω֍o3Z:W~:zRcHjn8c%8/)D1IIY.soF: Oݤ#9Ip^Rc,.3H QjL,\FRGouZ=K]뿉s&~߇\}Y5WkZ-c36NQVRB%e"R.[mgAv5&~ߏ\}>NƈiL+%Ͷ^-{J-cZ+9)!n՘dIytet-u_x]Ulѯ/pR;7y֍b􇴨-gc̘}vR#iђ%:z˨?۟S3]rAv5&~ U?_=L(0zl=w)IQBkc8#h3{_qJF,)%:=S]10~GyFb+?}Yj(FZk1ƌd$KrETsŃf\_B%gG'k,^[ߜL6/ТFݾW?j#:>HIJRBv.ͮڭ&QDzwy(uok?sOP#X K +QJʲ:.֋ZJ@=kgfzr#4[*$Lbl үTAw5&;~No~=2oݖfdr=?@oM)IFiڈ3VuBF%elX֡=זv}]=ds/o^V~+wwfl%FHR[FkqJp^Rc,n\ޱ=ڡmsKfSͮWav/W*{[ nygFL~ofGԓy(-:IKAJRcC.c7[uKʓͮ +ezg +ggXmF}6NErtt3JXhIu٪1}.h[fm__Bz?}uFM{v> ΋n΋ymJsZk1ƌEm/sƎ}e)utȅ_۩fj{0K9gGmyvkfݚiyr{QJ>~n#Qp~}"KC]߹fjL;+L6wgi}N|:Ku[͚5fڣ.Jl7gEFRB,)o_lK={L^4{*L6w~/W濹>|X-kѺeLu}εZkQJmӷG5ђG]nk[][)L6wBOf';?Òj,}Nmn;ڈQzM«DzJb%<:ue<1m܏߻Wad}x^sCksn{,gI}"^C)%Zk1ƌ%,W\:ݾV'枻uݟ+>hvƴds/!KSh<ç=/ǽ[w3vduJ5R}V~cXk9'ZUKrc[5uc߻> +H/O|_Zn+9?:ݞ1b߿>kc^hQCF5d\^R#d$Kr,utXrn]Sٻ5ꣶ.Ffz㫼&\UJb%G)!ʒrc]ْ"]Sٻ{;rΌ5lisv9/^ R_G+5m[/Zo=ͶZ+{1JYJ)Rc-)tՒow3],?vSٻ*(7 +ފze~gnkڋo|E}@kV.cZ+9 !HJIJ),9ueg51޻3 ~hOeޫRWocn +ho|jZc $Z>t>}l-'d.Z+Ƙ{~)+j$$ )\zR{:ކ,J>jOXwlHQܵc*?/}9Ԟk̅έj̒}M{0VJI\dWk[֐roW7m=]oq~.-R1>w膩nFzJPTb>_טZ֊]RC1f٥"\jÆ{cN/ٮMۿvӮ>wO7JuS5+U44hZ:\w^F]R9w[o>?=?{}knO+sۥ<K}j.gt|X3^HV48%'ԒdYv)цƼx߶چswzwCWNuS5+U4TyFhipm;35ּgŶ9=aY:Zۻܼg/$'ԒdH1vtz>c|NjWh;o9]/:Ӱ1;=cL3:6-^NzI$C2E_Ɯvtx.ҳچswzIvo]/c\zCyico-ps )}?MHTT/}69)sm~S=k1s3VuA:R{5))rL2(4ަN]]֗n̉V4H_?Fz*mm|r}Qb^f6uZmk1OllGd]//5 )ʮds遪1xzOHXZYiUQ_׳%..{=; mofwl c6YκZqΉWʐ9ɮ^{M\S )Uczƭ۟~Yzֿ}qlɇx=o]i+f[ јm}1mN1IIYj.R6D]S uIS޸uS4/VV4|ZUwW߾(9R.,{kasK%cL~?s~(8/1䘤"C?PTϣb +7c^3;$jלu*:850U.Ҟolܺd cqeYÊYK/EqԿ#]1EVST +qVWR:4uJQ 1J^FG.zq*ƭ;Ouگ,aE쬥W:/*:w([}y琉1Jk=^3Yy%*)!YZR 1LPI:N%7O6nyr{nŕe+bg-߾:O[;Ja~"0}97e6f;'3cj[K^T+!!&uJwex}x_1jϔN6nyg=S\Y"v }UtQ +ߜBS׽}q6׵ڌ74ԏVS +^T~wΥwJY 1J]l?:4zVQ. yd֝'g>W\Y"v *YV֎Rظ6kZ-ԋ1BS}o];4=Z)cLoq{ԏc +^TR\ԩ <ԩ~MSbU3筓[w\hʲo_+|qXg{kG)zJygz_WgY?ֺww"S9kN(BT9&UR Sԩ~NS=Nǩ{'<~ŕe+bg-߾:[xYǽ^=qO%3SjeLLsYSϼ6*XUBTCLr]'ݺjϢN6nyڱ,aE쬥qݵ^SEg5S}䬞ofGm=cTpWY*!!&uJYs鯗z蕻kϘN6ny{W\Y"v *yYI%.:GAogyg.v(k6Y[Oju*xQ))YCLιKr^9ƭ;O@;W?JmQtQ +/^nu٩ [Qje:jg1.8}zxy%rQ2IszدuWަ=;ٸuv+,X;ki,yQ +/^Ky>*k:6^|>g~lYm3VyzK/JP)DcR%e5;/t{U'ڳT3뽓[w\Ghʲo_K|rݵ^ݷ潟Yk{Ƙ)uqLhQ:%ΫEE je1MP_[v~AN˵glۉ@;|zd֝'گ,aE쬥Tʭbc%/:ۻ=k} !D罟r)cֺ̔dck-I^zY*!S꜋U^ki{מilܺگPi.:w(/yeof->3g:/fb5/WSk9z%D5;ιD\㿡_l]{wq3>Ņ/fkG)xɻo-{3kiu=gljQMl&M~(kmK[P 1_֚ɍvrm{oB&hTM)ŴrK[ʝgk~`Ą' %ʛK&KH沄Cq [=2'>,x DDDDDDDDDDDDDrU{cRJFUM4MSmkN1].Vs$cg)wzzm^n[O OJ7LxY{e *柯ί~ ?x&DDDDDDDDDDDDDx`D1tM[4LNzj:m0~}`8$rn[O~?itC/yhmU7%[ؚ|='>Txl>7<sZ7!#"4IMl\4 0?w_s:=5gwvzJ{ +ϣJ7?HH沄Cq [o/kbF$8?U ѻf59B0"bRJU״U[&'40>Nw ^k>߾[|SGxPFEduU7%[ؚ9z˥S|+o݄Yk+dkV9Uh4겾v9jzk?IqmkqrGuGoYE>C5?IU'Wyo0ƳoDDDDDDDDDDDDYknysxMQ&4)E'MM|IuVKhRu}\u(u<^41|"nak~(.ON@ֳ}ov]ogR &k4%' +}ǚ'[sny/>nxJu<^41|"nak~(~óh8 ο,k7pV޹IRi5iɦkK~n+j?DiNzZ_A.[ߏϣ.+9z}{.WI⮢Hp?l\15$DDDDDDDDDDDDyx`D1yrR]R7snU].hpwXK_IN7?/N9(Q.&ks8;z}{9 ~u [ؚ$jcr]iN?xrn:""""""""""""L0DMhT5IVsRTMBd;{V'|*{Iqn5_oֻϋos5(ks?M=ﱑ:P-lOw5#~ CV p>uv?Oֈu&`4)1UӴթ4ŴM*!THh^Z=Zjxt2&~|Yϋ5';nx/QVe ?\i>hc E$qWzW&0?F׆ :_2GDDDDDDDDDDDDgnۄ +^ "%iSn93_R$03.#"c/lYeއEav\8V'aU +~s!;?΍?3F3U̐-ƙ{J_\ǴNi z֋l]Eq>l3fuLc֤73yf虷n="""""""""""Av?4^fq#DB0*7)飚!EsR5V:Zqz5hٜ^\YeR&:5)9,nf(z򌽳-ǣwUp~bk{4"""""""""""N*jn][N1iY=֣gU5*ʦ-ڗ m_:ݍ?C3{BNn1Vv塯]ຆtzUU<8Gy6k}>c +*9EU1|yI|+oܸs>l3مEnlʴ_F2NFL'dsT'mel顯]ຆtz5Y/9w})\C1U[ߜ{fΏ*O[7?l7> /&ĹI ʛbfHSe~mC_ۻuLkR/9w}snS&:: ߄[sxYQPi־W3޺I?.N"֙AM/ =}8T'm랯{Op=C:Wzٜ>lYeR&0;c +*9EU1|y){X^ZWDDDDDDDDDDDv❫o&1Dsl]o~\=2ƹhݟ~ۊ:VG3wJʹ]J{3=wc{3}j3{5}֘N#2n3ൊUY} 㻵+uct!ѻ#nӭC{DDDDDDDDDDDy ykbYuJiWt;q̟T}d߿{<5lL7߻іiƶt9c6w~oDT 0:[v:+Bؓ+LJj.[N :sH6x{5cywj PT4c1lڵĖUk4n ״v-0ΏxFhD IFqIm-ŝRLc:xz{c(*s?]Ndl[85}mD=ׯq玉>G1="""""""""""z< +c'43QԪ1EN ^-ߓC2;soފJfVl][O_tڵƖ^=37BzqnK_B>x[#""""""""""ּ@EFq&Z%5-rr1EN ^-ߋC2;toJfVl][O)|3Lwc+K̍aPvܳ|/!F#׶}CA}>8LJj1r*:4rHVMO 1NݛҲ%[*0=tE uOcT bU"""""""""""NBt&꒚+)Wu¡}]T!Y5>uJj{5X_7{s_r`Eֵ,J1 m2ݹv=v~ư_H욄xt7JU+bUa཯+SчkHFq%ePpݡ^Xq߿n)j7oL6Vv9ߟ-KE \km}~k֘x^as{ѭB*NBtřhUR\F5g -ᚢvszVʄaCieٲ ]İ|緶nIChBسeѪRuCWu[g -οq2aPZ|,qB1,r9Mu'^GB>\+($J6h,Cʃc.BK?yN=VʄaCieٲ ]İ|緶n 5GB*""""""""""gc'43QԪCʃc.?Yh1K7=Z5~=}+Ee°lY.bXr>^k[[{kB{_=?w1JbTigURsْ+)W\6,C{i÷=Z5=}+Ee°lY.bXr>^k[[6^_/ʉ@E%uȘW1v:H6NBy+DDDDDDDDDDD Wj.Yt9&WRtTwJ7~k7sv{T׿?_[{\lwÜ(t"bA.mYešD4k-yKOu$"7ѵ?A\Ts9&WRv].nW]ɡswZ?>ƒ\׿O_[{\lwÜbNӉ7e kr{7E r}̭FDDDDDDDDDD~|B#s!6Py]ʮ1 kmb_ÜbN'E,(5z~U&IDyLtՒdjmQ ćAp~QDDDDDDDDDDo?7 Tu6Py]ʮ1 kmb_ÜbN'E,(5z~U&IDyLtՒdjmQćQ~,@""""""""""zc~?|:0Aѥ9g6Pg{֞]ʣr&TLlsS,^]É}bF{ݲʄ5hr9ZZP1W-}Vs3 W}󍈈ޘhotvK]K)2nCvk.Q9c~&6j}9)>J1}RĂRnYešD4k-DW-INL֖>k3 ks>*󍈈6B惋A\uYiJWv:l.;q޸u%G-~.ڟv5(9 b۲KECWb>-3 vGZoͽH%PuoIbq4إCr [q||\\>srEnt9Ǚa=Rl[Vyhhy\GmLê%]֦[soCD*!*"""""""""xBU|pIeA1r78|_%؄]O;rzmmz s3zfRO9qLê%]֦[1^u_ɚ B#hS;^t;i\v)1;K&wt.?/χgHmY奢ūq1▙UKR#ZQMn:_ 2Ƭ2}}b7t]D!~@DDDDDDDDD^ ۭS˭G+Q,jO3lVzum+-)fe!QmӒM1֦x-ax}3w{lH]% . v)V)Yզf8٬NVt[RL:}6-I ъjm #aDDDDDDDDDDWa IdWL]vfn#:?b韵ogse]ĖGT۴$aSL'D+:KTBMDDDDDDDDDD',bD]VQmK#VaK|o'|lf:իk[qm8{ ؚ?$1,I ъjmך;_!\t޵30A\uEu?68:4:}_xBE}ڣ^&6eVgVthd>)`՞e EMP8-Fa")aO Gӊ'3 3sqW|ՎL,MWDDDDDDDDDDNDT5٧b:(.woc|xcя(Pk]#f^CooRmzrn҇_IԮϭs[ɓ2惡v9pwcٶLjUɱV -Áfunx!٣iŴia s_e3&"gzM?^ V䓘Izj3w7m{X5kŐђ>hV=VL0WU&:s)g xtkMRj՛#.gn,V8-2Z҇BGӊijDT/ p!I4kaU^ iv9˶=~gjhyhQ=VL0W{(TUDDDDDDDDDn5unOCj}'qi,Vjp?9֊s#{46-̱aPg4IEDDDDDDDDDOD~2ͪpM9*ӐKvyn9h9=C[Ujp?9֊ЇBGӊijo_ - N_M4Z*H}j1y>֝:[e#V 'Z|~sÁfunx!yzmY1mZc\WMّV"rDDDDDDDDDwXN&rTc.VJ9϶1b~r< s M+M slKMrWv8ѣO!ZeTSoiRry+ep|/ܵfk#V 'Z1dչdӦ96*Ͽ1ѳTjfU1J\(󛶠ƁV:|2X:,9E9]ƿTͽis4ώŐ8>8 $=Z㎹ڦrcTH """"""""ND3+a^ң͐9ūxss,=֩~XV#& cG1$sICc\iOUHCDDDDDDDDۉHQ%=JjW]TsxYϱly5Kuh+mq=;!q$}8pXHzZ5=0sMJk.h)iT)R]G1'UJ5-[sM8]صjkas5 mȕ ')ZbMRMKV xNǎm}lT1ip;!q$})pD/{kt;j&h2""""""""z䏗V4tn^NWLs:vlgk6đa]^ǮU] s옫N""""""""zdRDiqa%G5jhΙS> SVCĤ}v(.CV\ǮU] s옫᎘Zd2""""""""I%JW Tꜯj}8vܣ"& cGqaun8[?]{ٱG҇չ@2Vصjkas51]LDѿO@ǟ&Z¼G鲖verWQ8GwVQ{z>ep;!q$}8pX$c%]1WÎ"YDDDDDDDDD'?Dǟ&Z\yIݢs*5` k6d3^9{͌ν^'S긏ȝg'jx &Zd#$TjjZLZ F6}3W9[Xmm}!띉}քn܇͍ν^'S긗ȝg'jx &Zd#dWZx9՚jtMYW-:g mk}^\S.1Ksyݻwǿ;׹=O!@L7""""""""GH!cHj%Kz45 YSs7sΙ|¶~~e^Ս{1߹dJscsCw\ DqC,YFDDDDDDDt&Z\ +w]gqߵQMb\GNƽ~u21ܹ}v~b 3u?@L "!Y"%=tYK_Ӎspzw{7N_#e5l.Vz}ٔnܷ͍ν^'S~F\>;?1~:[jx &oP]&"?E+q% tvxޫ?-YR*DDDD]MCJ4Yf]V ty|-͕rW}ڂvo'K^~Gٹ6}r\C[Ϋ_?-q"'թjr3 wI)ҖF緺4,s4~?=i|\կ,q?wo %vc,i{{ceS{q mY:~80lj`V1o TӷӚI>{+NihjcMsnd^_v.Ժi5nwȪi aVLj"""""""}<nmfb*s>b6d)nh-v쭔E[gsV]c\Jdմ] +Uaq5lV6OM$\gIk&!N/uCShcosrKgΪK`6||pg K+=aŴ*q 1*:"""""""Fzc ~x"U3p .M C!C쭔Onh-vg?͋86|Q3KR"5JlX1 +saCLJ6>~&a҆K!}ِx+E[q]ا3s65{%1.%jZCخӪ0ǁD"X$?eLLJ4%ːlhkkC&.ZsC65bIvw K+=aŴ*q 2̈_JXy:'&a..% =y@VwSX _ԸR"5JlX1 +s@nSȌ􁕧sYKzH)]K3r孌_3xs`ҵ`Ϫ7{ \#^K`6|Qvw K+=aŴ*q y}5љ|P"""""""_Ow;D᳾!uϞbw"NK`˽ƭ!V"5JlX1 +sLW*DDDDDDDI換H%\q6\Y_ʐygv;v'?5o,܋XV"5JlX1 +sLW*DDDDDDDIoTm|QI15np2fC&E_v..E০%{Jdմ] +Uaq5*Y4;æ*&\i#2O}y+L_usVĩ}??ц/jp)Uv6V9p`&Td""""""3WK!QdVʧ]c㿣/מ=uس WNĩu ӆ/jp)fZCخӪ0ǁv$WT눈]3wǬ.QdfVQ2g2]}p5Ǟm`~`w"NK`6|Qvw K5v6V9հ#b/ZGDDDDDDtlR""ݨ/ͧ!?ǵ!=חy]_^~趍'pܕ: % 61E‚S{O=Yӝ lӇ/VX3!+=аbZ8WÎB0:""""""!)]K'Q~e/>=]7ȪwYG_[{O=Ywww4$Ms[]R;`|Ю@ÊiU@\ ;/ +T눈n}wڔ5*U_Σ{V>IN_f2)`ƲsomH`>|Q綺DVgJ4V9p`&z(* Nf됸[S7.2!L]Mww6$Ms[]R"3vVLj80=S*""""""OSs;E|zm^N4!mn3γnȪ ]遆Ӫ0ǁDߊT~zUp:tS 70)ҕSW2a,;ֆu,DVgJ4V9p`&VTx-]¦DU2Lp2d,yqR.~esSힳ[om[3ϒmu KڕhX1 +sLwT눈}͂6q3 0)ҕ!CƒGyt|pJ}uv+U`~tnk\Jd|Ю@ÊiU@\ fZGDDDDDD _:WsI#er1nNhϞhgw~Ր6}mu KڕhX1 +sLwT눈 _!%R,2NN][yQ3? ;f=_,e"ڐ6}mu KڕhX1 +sLP{U!"""""Hvt}%5{}?mힴomH`y^Zr,+UB +Uaq5/R*""""""zLUl҇ː!cE|9^}O['F[̴s[]R"3vVLj80_"UDDDDDDB_ UKLTb~CƧS&e"/g{Y5!+=аbZ8WÁ("""""""b}ljR̥>R,rƒN %݉xkC:5.%j>ChWzaŴ*q 3QE*REDDDDDD=+>b*.c2/]wQʧڽs,[zf,^Ӟ33ِ6}yZ[R"3vVLj80ECT눈O4UU>1eȐ1BNm9=f,^Ӟ3;1<[-]Ȫ ]遆Ӫ0ǁD:""""""ٕJII 2tʫs<#>ݞ=]U߽4{2Es[]R"3vVLj80ECT눈OzaҕK9uGEΑOc)b~%g{f!mE8PT%@?Z00J c]&="K٣|^a*U 1Ql&,CDDDDDJ?=9=5y=QU`h? ,ӻ=ՙΎ=whҮ9V,T6Da"Rd!"""""z6Ҝ{gc)ƟY% fh?ܸܳ!ez:1GU[ڵ0NJe*WÆ(6L`CDi,DDDDDD/5=UWy96ngY:#!= ,s=Muann QUCv-̱bYհ!& $e' KMOUao^"4ka~vEV? ,ӻ=Ս繹1GU[ڵ0NJe*WÆ(6L`CDi,DDDDDDe]nRMgn5niOug1c>ZkK33K٣|^a*U 1Ql&EDDDDDt#SMvg9˞9Ύ]>;G_w> ,ӻ=ՙΎ=wXRjņilH[DDDDDa7j)Sg܍)گS;Mo^ ,ӻ=ՙΎ=wXRjņilH[DDDDDa7yiKǮ?;ͱsfg=N{_9xCp6LTg:;R*!WcŲJaCLI!"uZCDDDDDʖj&FLStW`Sγcmݧ){%5޳Vy{V[δn٣Cko׿0_Rj(k87flN{jkI>X}!""""ɌtOg]wKCx:xWƽPz{>E٫.q{tyLZ=Z[o-W-T*΍h=ښjϧ|&Cd_q2Q.gϑy<y!ͱg_]wvؼM?[ٿ.qhnLoZ=5 +߷ZZVr5T53Wm]5[R>"/DDDDD8VWxS=w;?h=_}g^b0y6%KwÝA`ݲG~Z}ke*WCEYù1m>2k_X/}!""""uUEEVI`xQsu}d]jGwxw^kaۛ?n(:S%a^z~KuYe\m>}{|nDqIs"2M"""""׺ߟgSw;;#?\]?5ģW_;\NbZgLc{O[r={֙/ [:*josc&ڜ&i=-]-;>/^ٗiꅙ$wM9,u9nqN77}hwkzXz?ޒށ}LKWo]V5W[Ok34Ƀٚuo3}6?_EDDDDDe&g",uSE:vwyN7Y:<\_;5̽Mk7ڪӶjz^VWg:+Tǁ0j=ߺ3W[Ok34Ƀٚuo3}6?_EDDDD~Os~OQU?DMf pml&+ ]H_ӍT!S))CIfߙh[綩-(-xf10Ր"^CW!""""}=Cu~o٪:7WcLW %?>unЂg <\ (QunOU5#,y3Q$unOU5#,y3Q$~вWx_w7ǀunOU5#,y3Q$l;/7orn-ܞk@ Gj;YL3 p5$fHD5y47MsՍMPBr7W <в<.vn@:Ђg <\ (Qmw"MDDDD͈ծ:EjX}~s)ee_5G}un~wwܞk@ Gj;YL3 p5$fHD5y47e6#vn҇ %Rƈ=׶→|@F_yG9rns{-(xf10Ր"v!8ODDDG搱nzq;-:7ep1@|y4w2۞Кjzx6㙅96?Zs5$cHD5yBDDD+}sm7C~I [tn҇.c %hd=5Sp hAHm~3 s$jHDjnIW1L$\%l~7FhPrW=mhMT5=\ZP|1QCv{ڞКjzx6㙅9q5$fHD5yBDDD+!uYv W)aZ\2ֲtU1B>|m @@&}'yܞk@ 5,^_B `HD5yB?F;Q +pO@Z/7sgmWr>҇/!]T{֋"'mvJ]دaEvM8l:+,G&Ux\ *GfD f?B +GKj<4{mL5+' f>8tt?ɦpnRհr?{lJO Hn#}_ olѼ<ژ)k3 j96oXەnt?ɦpnRհr7So(APGU!"""H3rxz-9gٯ7KQ7?V~GMg%5ܤjaCbKU Hn#}'/˴"E [h/:sv߳_uo8n~kn&J*kIպ3^3WÆĖDAPGU!"""?AT~t3W*cE=5Q,eup4tVRY\M֝6T $Z f?B +pU~2pEи6zb˚sy7mdYIeq 87ZwkjP9ؒhU4*"R*DDDD~Z~{e.Vq 'cRh.%gw=sxf|U~GMg%5ǿjaCbKU Hn#V;^xR=۷J=WϏman&J*kպ3^3WÆĖDAPGU!"""W!ۏ-{_1NWZ+ݷxk瀣fU~GMg%5ǿjaCbKU Hn#Fjq{WN᜾};Z+/kt_r7<<cpޕ %`3f4ȱLv>~kM.kȦq[ڵ/ozث{PuVY\ۋl0/q5`5^ADe-DDDӞ|kGuLL~DאMC㶨k_zWf%<u(Q =NdLתzږR$|I9um,@ rZ 5*x {Jn6wյguVvyd:vn 9Mf hfv-e]k|Zkq}6wյgQ֤6vn 9Mf hfv-e]=B𧩏^5~Y/࿢<=yEKi>箍ErdaB4s:]Ka""Ee]ۻ'ܲ&=~#ϡTV"9 20! L̮̰ .{׼u.=Ed5s8ukY$A&@373ٵv!"".;uɿpg=JUlu,@ rZ }l{ǝGha}!7u7s(U%ձHu 8Lȁfn6Sg@3k)3BDD"YY_Wц>Z*?c PJfcgpl΀ffRf؅cEܷHL8Z*?c PJfcgpl΀ffRf؅cNjk8}&_Ed;j~Fy~{JUlu,@ rZ }lx|{ޣ! )&6J-"W~Vy~{:떒Y$A&@373ٵv!""K~jnYl#{^g~`|9Y$A&@373ٵv!""\5C= =Gx>6s(U%ձHu 8Lȁfn6Sg@3k)3BDDDߕkki=«1irnp~g>/ϡTV"9 20! L̮̰ }W}ha _H>w +8܇9Y$A&@373ٵv!""n&Fa _E,LMk|wlS`h}4 0M;5TEm[ZN>4ϯYQcGFM4 xͤϲN؅,]fHna~3q= ٽh^|`}ݷ=WM~zNC:%:vl4DsˀYL,]5hkEr[Lp`<,shVQ$tANĂfgY'BDDA[J, h +)yzk94+JRu(@hɏ Џ 'bA@3鳬v!""zk?=M7)MC ;gJ2fEIEr(M@7D,h&}u.DDD/׸f vH toyav`S\v%:vl4GG Y ܋Ka~~?`=m[K<̡YQcGFM~~d8 Ie ˽n1rC~4IS<Ģxl:_e͊T;P6n##ÉXL,]^E]-#yp3b:a""W,O:|7E/~jUYЬ(IձHe &?@?2ͤϲN؅][ӚB{Sv^Ee͊T;P6n##ÉXL,]^mkh4ݤ|7E̡YQcGFM~~d8 Ie ozX5&ʽ)zwgQ̡YQcGFM~~d8 Ie Qk5.ʠ?f_1>/׭}[} +^̡YQcGFM~~d8 Ie QKk-1JhXʞ2E̡YQcGFM~~d8 Ie QKun;WzS%:vl4GG Y t]fvq= 7ױo{{_龵2fEIEr(M@7D,h&}u.DDrx'ƽ)Gcul2Æ[ͱà\3Z +Bmwb3\ wۃ)G6Ar FsaP.YЕf!UDDԱƗ5<6n[fvQMfhxBz9vˀ|Fkct%Y@uew6Lock;&3Br FsaP.YЕf!UgADԵ_ε{c{޵1~('D>S{@0W}&@1X:MS|ٻ_'P]U1اd +p5`55:uDR]0ioݹFf{%_.~[ y=z +vI~e|UL38w:>Uu`ꪊ>%s,Uiѩc& +DI{0>ݯ~x(B="'UtVH1: +ؾ_'P]U1اd +p5`55:uDR]0iO ׄ0/q;(qQKN1Uݮ7>[U=%s,U/cfL.jfsΐOdT>a=uXǎz_y U}JX `W^DP]0i{Z}ޗ.fT>s9֝ۗwQbiTYSWbO d,j˘(+&mx rJtl*SDDKয়W|/gt;FMiHq0dXcbrxCiG b̵4ᅵswnՁ*̱@V2`E-9*Z ɒiT+""JE~I|xclN1Sޡɯ8U~}gGJi4.'f@?fXKu`ꪊ>%s,U/cfLm>3SRZK*9kTS,y˟vM)"-Y˯N|$mw7kM_o/v]uo$3i EXP+ J"AQZDAbZLI2P\Ĉؿ>sNrrNq΅a=^6Wfe͋ՒaU_;8aj_x~qDDDDDDD(و&YDDSPDDF!DȂDGUkjc .&Oι'$L1512/d5xdTSo>9k +Xk+A>=LIhIM PIF3-B 3ҏcfR +}qȣ,AljQMY#bfvOU`-Zu-_ 8<$?{¤TQ}iX}ђd#@dNAf4%Z" 5gYO9 i'x]2GF5easH +/'y㩀_|K'pԻJ_$UB'YQۮ#GOJ9ǀ| YOv:)eE@hIM PI'_biQh&J4 +yoN|PQT>LY !S)W%VU\U~Vי$\5xdTSa= /{/w_| o|XaGƱ|IrO +UhE.tc9y9fzuU1St`H~v +P)-I6 D*)K, +DF!4O މA + jjWg1ZH1Ɯb*9R+GqZ VGF5e9 ha]?-|xa;v&ܽ(u cx}xe:ZnV~\~Â#aA?SC>Sr2ix[}^E%""""""%F4B%%":|DY((ɿa;=BDŠ3!sJ0RkN|Mm<2)G0M}/*?~M%݋[]<ܾ N9&+skXUt}Z8VPB_7SNR !} ]+:91} JDDDDDDDKhJJDt8K3B0QQ͓ôw{=KDLUB)S9Wνn5. ?Rן$=ljQM<"apꍜ ^~sy[Knn]tW{v{Ϳ~𭗁/|Y^IpXmEU;9`QT߷&" p%ffaDK'i 5yA5:BH1ƜR*9WVU+mSa~>$fSj1 s[m`:{灝gnǏTعk ]n^,}9/ϼ+=?6~xX9n"CkAـ:9 %v2է1=MDDDDDDD47و&YDD/4(4 %Z<7L{'Y(Ѡ 2h0R 1R-]UUU rOAMm<2)G0N*Wpww`og{09 | Y&2p _͂Gpm$ׁOˏGo{f +$! !q !$"8>;vl1Nbng&3Y3U~T\ш; ̤DDDDDDDb-JyMDt>KKpa&:5Nt|J +TJ[cwCCLY&ٔrosRI81̑FM+bI6"N^v 6.`pp36.W;m {6= 2|t㣞5>[ >G_;ۿoK/}E2 Ⱦ29h/3PY.5X0D (R^O2eN$0=JDs5e2)ȳS$)SgR)_zd XmMlԴyi"a8XY͌~]hg }Am{0&w xtwOo?&xWdP2X2ʟC.vNiX9\)y&+= +QwP=GsZu$[5=EFV ֒\Mߏ, +hVk"IXZS 4ѩPtSY)aLU*^c3֪?_$F'D !3| P%'ESoY\qv)#6/G yce4Tׁw>A}Am{0&2Iy헰'֯7^/}|ꋸ5rbZú _9Sxy +䅔]dr#%df E"+y$I'Dmkz|,U,Bkf,Wc#"""""":!Z@|)-(Mtj4$yAV +gaq#ۦS.c1Z{_$F'D !3| P%W޿ڬMƶ̑FM# 2 ]CB/V@]QH= + ^Ws_PX4'mDE˘S٘8 JDDLhFiS$;LǧdRavybW/|e2Z)bSHIdO>eBgKe_Mfsm2Edl6jڼ3 Y{e`gpF[60<\|8`8x_/vojGmvn~?o֟_k_Õtbе.j /ϓϔhB1 +X4'|2=ec~LecǞ'"""""":!Z@|)-(Mtj4$yAV +3;o^]DKzg} >,KEn_$F'D !3侍P%'ESoɸ\qv)#6/| <i^tM5xoAO k WRSʞC{Gܿ<+m`Wߓޗcv H:Gg^b\va.K2!|Z8x`}JsጭZBWsJTrU^Ju_ :V*Qk""""""3/Z)'bi N2DFCIwOd:]7/Zb$;W)%,䩔b/RY>Q^7!KNnkk0.b5%sdQ启a ͋n峜{s ޾ݞ“_/ukCr!H<׈pᄸEH"rA]cxl'홱'c,>ruuwugqpF]` Q۔,eFOg7ܐ8`ݤ6*{ +[}m:g۽?ݿO7nP G9*OڗH(]r&D}h/HrЌFy%[rҗ )4c1csX)+czW,[lJH.`0;;A{%NY͆>k()YB(h6(kIpy"2oHV%S2?zWq5NZE#f\;,4[c Uiz MiHߚz{t~]MM?aMci]cƸM>a7W M6};Α%hhJӉҖʾ5^Ms=͘ Oc1c]vN1+e%c]OeK0-C ؅<fg'hRԌӞWE#㬵9y5"4 7Jcۦ=aF}MAA|W_^|_{O4N j'N'JOH[*x5U4c&1c1إc RV2DX#2] avv +KL8yU|Ȳ(C|Y(*l q<[(|!2?zWq UV1uE*R61L5ùI+]=Tk.pqJ# Q[aؒv$$w'FmҸe_u̸GK'w |F_B翓ʛ(pG| MEmXQ(B8X_cmy@f$<9 d$AOc1c]vN1+e%c]OeK0-C ؅<fg'hRZ-{ΛTJkg5y8YS 9ֻKld:mSF/V:Y'\h˕WR7_[}OZG +.ɨJĨ3--TlOT>vWbh]}7{o/?K/ 4/M O1Ee,Q4aҗM#}(5+LJKǽ]kd1c1.=[@1Ʈ'zŲ%dHvh Y)]qA>>C)PCqy("EQ<\Pgp)ކl]%62TTz[)RH|Ĭ>s,Wz\oy<a[^$( ;XʠuTb ;t/C cñZ4ZGi\iMZ;=m:1 o_}& 5=)=qGP9 +@ì +} NYweߠ +KA[xtc1csX)+czW,[lJH.`0;;A{?^ %.˃E"F޸,",Fu*.mȦϱU\b#CEUikL2z-ԩG:)#p8W9ixQm]þڣQ[,eOu:*1SWCԋcR}:= c*-%Qc~8̙' +HP/< EHP< *!@♊>('A7vvחwfguvcco̙` vzۃ[I |&7w?7_y-Prcc(sLʲh)mELg& 3ԴMP)c1c )ƖLYc'Zb +`PB2vn$;M rl=꩙M\ Yu"Q^!OB+5*jS)]Z+#X /5 -鷗1c1bl !Δ1|% +%$cFBD0;9A g +`~"hm.>4 YEI(-(V`[s#!igw3gK̓41JJ?TK4(L<*$QCJf<"HfC%iP_i2%P}m۔hJw\GC[rpp\PSRzsp`;GxPN{xtq-[]m:K`dC`D'pT&ҹ?kS{G9؎xƻ0𧷀׿x\IrI(lj }'R2c1cS-!ę1ƞOIJVdHvf''LHM+Z*eQ:m$\>dYEL<2/B4Ɯ-͆JҠ6O6%]ldh6miSF/V:!-z888.s)_HQ7R]Î^CA'*V23/55FY-t?/&Rx8<[wtM&1mMT{#pؕاɺ۔w]U|-_WkcEzc1c]|N1gJ{>V`[s#!igw3g(>#5HZmΤ>1YY"΢tm*)!Y6'msY:ÆJҠ6odKֻP}mӦ^FK"ulGC[qpp\0JO M巾"$7'}@`wS{S(=Ѱ?y K prS?'(v@JaiRxX hƩh]Rq*#'_FWTMwy)+]cj=YI%E:c1c1.6[Jy1vYV`[s#!igwU->Jl'WcNGt"0ݢqe6XU8bUuѨr0<W&8>-CB&B&3x<ڀwO]({z& X_R$.*Ee4n!2T=YQ)F5X:c1ccY)Vrb=cml Fu(!{m${f/O7:.ZZl\ݼ5Csް +Q,ĒwG8␄8K$ϲ+ŽlN9Bg-|H%JQrmقCSnڴ5MZԥ-Z/xqpp\({Y{;`qG_P:IӉt 8Tfcܔ]=!^Y=M(< $Uxr;1co`wwЧ|SZeLi(ӆh_r- ߷R{S$B%'dh|CcU:uZ}=gc1cɜbl9+JNc캢-%$c`= YECC\k?G;#*tJikLY-''<#i˲(OsB[!$qK96ڼ9. w WCεsԦ^EӼԥ-ZKn1kC~w+:rm ըr:%p2bΔ^-b/f`k,Gvaa8C/φݭɝ?wwѠeA" Kr9HZ0mz9kTQ.DdG.yKN6l(e KQ_s֞1c1؛)ƖRz.1Ʈ+b`PB2H*3^ou\>4ĵ֍0((Z>U- +0֘(ilk^!OyV{ٜ(OsB[!$qK96ڼ9. w WCεi6e*ZjUPkY,888Q>N:y4N?Nǵl,1LIe6s#\1b/d:sii *{9lXQ,a7p%w6 vĢkE9.l))7Bsi+ʗ<0"eMlM2c1bl9+JNc캢-%$c`= YECCTG~! EJjIYm{~!ei#煬(Ey#4|ڒ( !\ϱ5(mq_`k-:4vM[cڔѫhUA]be>QO7ݝ>>ټ;ħ˝p?Zb#f]s+RRoJUSIR隭Ic1cWS-gXɉ\?c]WŲ5֡d쵑Ug868t2N +(+3ʟg:!u<ĥL,ҘtTme.vw=j4xEmU78s0Qwuu˞}p@\8 "!!ȁ SCQ BP% 0;^bI؇gv3ׯrgfY?wW]~h߽ix +/G79@) ye ϡ%YZXރ(ddK-[O!B!t\G٥ 'S,u p`ӄa1|?b>n. 9cJ +n]d%"<,uyD,C)ʾsl,IM}(Cq mQ: Y-&;5BR+J^Fr)*(Kb|Z,$:|d8[2ج*P;[VN"^hK[v\lY46,$9VGxu+ }uEY8GpdKO*cj{8Wpݹ߁GϿz68) yeu \f>d6kby.-\g5[ӟB!B Kv=WO!cXr ȧ c rW~Ĩ+|]<KkMd}kQs!]DvcZpӕ\HjBBH.EE<`}E)PPP0:W5bK OJ-lV.Ζ6+/Ŏf3獙 eh>qB`w!_DžҾu0E[LdwhkeʅV*$RT3 wQsUS!?ْfBl8]]]jc,qe3];}ccg&j'3x#wG.5[N_? |p8ϱ28$5+ڀ`9+vB,#aH\a'B!2nO !σb0HpB@0Nhp` +H U!hS0;%޻4I"˒i{EyvhCl&.OP%߱ Y=.d7E̅veʅV*$RT3 wQKbq~%'%ΖF_9]]Ϧ8Y ([9ޘ[遀pecizKKJS;\skww>aRH_o|7 WAc +Q +rX2Znp1>CE,y15B!B!y<($ !d ㄌFȨiׇB0p, |~A s\()5&J|,˦I\d)$ϓi{ 73F{y6E,uy4eI2wlC1~W>{\n.b"C1CJp.#q*(Mu$y “jgK +nگgS~08Yu㍹n쎪8ay z\6xxX~dT4۲ƾFض^ai1Gk7_߁~6민/y9.zE8H!9fR:p/%Xpj#&k$KSU]U]=**pD_U((WD(" + >e|l~$I&\TwOR3w{~Lͩ՝ԙ$ +Rc숆¿9Zи!B!:HB  A4(ass.adEuU9YUIIU<<̔Yڨqլz"KGkmB5ڄ[Tu%O.#m;ئMPPP 7[Y{x Wp<~ v4(] 9<-t`SŠp͋ |B!B> !d+:QUL@9q9ULvS J}&Kv%L/6ȧh 9_"Fp +#R}9_CݞBvM/Vbො U@R,0rA⨵^Mr7u\kX\Վѡ#`4l\& NqDvDu;xI([ckDL Gkx1~ Ï?| R!(ْ8tX7-QC!B!d'NA2qB#dP6M271g:*Nll,Kw*٩ʴ. [9ʒsqcwrWg!<`^DAA1h n 2HwOcrA⨵^t9i-&[8ߘݺv&N&Q'3̝aEgrqdc\öqrN;s\57c|_|a{=X}% **H YL*Lp 5B!BOqB$ +?O!C 'd080Bo-q^ θLM"wUŧGuSaLSE[W̋2yVE^WE:uǤlY>%IZ_hxCqFنY/t36jGjr@I2K{eR s ,\O9\Ϡq `qZX sw>bw'Xc1Q3Y7s\ϹXZ!>d㲹r1asx?~^O~OG|w$1p-|B!B> !d+,gzyk ^ u ~l^o1{>/sq&w;ht=a^{ W?|K<J +A1K! +g 1gdVM{hA +qpF+-0͎^u7Vo{f-*EB<`%< -!%m2|Q +]iLVT8;3$QdtN򋯏؎}zL̥yMWC%!B!;_B&Šggl4AZ/Q8 Fr> %\`΋K8mjQU +pƻ/߃- dfë-ݑ-X s 0g8k޶b09b\밐 9} +j߇{/>|׃,PUz8pP)t.atbDqpdqk01 qLԘK#bPI!B!bWI1h%=O!@0Nȭ%880B>(VCT!mQXsSZ0 +Cı+,E+'VyuvFkqgyFA+ yBYqBn-Eq`, |L +kQmǷ WaJ +c0)u;;+^q׋{es+k2|Q"Km&m,Q 8nA|6)ja@G3t`LenV'Gr)*fM;/XEU(0m߅ᶅW[o6G^8sBdkAlpl\!>L8Xb7%Gz=ºAp3\Wx= k%< ߇՟O|X8#JYuh0A)HMq`!*H%~;K,jD N1ܩa} !B!\}rV , irC3W>10f \NVJGa9I)Ν^;+2_vnYĽInU^"w"yZ\/*tWdӤM%1J|a-\#Hφggl4AZ/< Fr>7'Gr)*fM;/FAAWU U,W`0y7>rÛ^8l-h]1{lcsJÍ/hMËVb 6]\Vuy?rm?{Z-pu|[_8(ꌑ1O i"2RR +ΘpBR`EѲ|i~SWęy PJkJB!B!ӜrV 8!g\5$7`= +LGs Huq%yS+Xu;YSݲH:E^{es+k2|Q"Km&m,Q 8nA|6)hv9_P]k :02Z|R+J#qi㊣X澪j( ~L_^nqx3W~mK;6`&y]>:Xb)x*`okYw!Oxp}K_}v|b' <*k߆'5Ï>x~>ZC3_'qW_TːCA)9&'_|I\t4%q(rȁŝ2?=tLsD)#>Vb5Y&iMVռE !@J NIKpIwx龘7ķ|>yȢeB!By5 !I1$a8O!B +$o.B&q <ʋQݨ_e'Ee&U5&2eGFX癭,,N[. +4YY 8BOhxu~d˳a8'p0Ѷw0t[=c(P%R.2K׶lU1+Q + +!G}k0(ރ}w9;{S;74aK]6Nu<:޺͛făMGc\s1M\sp>VpP G <55q#bgw] W*VHH̀a KZL;lyUB!By!?$`/k[ΦAB!B!9!6)$ !dpByW{eD0ήy`|.PR0qe(]Frg*ZzGe1$.;*Y#VyY'uRWP26O0K!AG(vI /Џuy6 .|{m̹<=hϘ!h=sI k`ɥhk[ 6滛U&;}⛷b'w^n `r;}glllvn}Nlz79ِ1¹nAzμñhUfG3ٿ |~ϡRb`c=50`:>-&w-/{~T1If-?6*c1ٯH2_~,rʁJ.8p !@AHÑD ~I!MϵWw|3LؑY?WW_WBzBnb0JxBnN!*`/=\&pnLp=$Ȝ~/.YJTdiɘ Kb4GD/\GˋpA2a0GG=9 gX%R.*KaKlѲ<E^Ҿ9 GSg3{|zuܳaX!7t Wr6ڽV_*6{`8(x!g|O& ~?~{ @%ǽTZ 6D2,iSǹ#ĜB! +E:m:_5ܞSbX@ӸR@q>^E0' +B!B!f($ !6eZW 1c y$*uzm~otmJךz軹^ÕvضU9&n +Wr+l<w~~z~ddJX)ipiwj9ر{?Ƕqc!`s4Ĕ!\|Bj hzB!B!f($ !6eZW 9W18ļVJǔR0-(n4]kΤ-M𸉻76[oLmaM=܂ʕL9im[cb\*VyTyX2\ADEy $FOxD4q( .stsy:߻@{ƌQF뱜K J"-kbg ?J 珠w6sz7_ֳo[tEǻW^8چkwu}6m;/C(<Oɦ.᷿[߯ +SJA)AII(OiaƜT5oaǷW z14 +$ZZL  LS_ !B!d5rsQrpByU{2_yB1.B0Lpn|O4O벩^[o{-?)MK&uwUKS,U* g_؃}?;|#^ϋzޘ]ZP݈^61LJUZRѨSy-yss2;#-_ J$:U6W$ʓN~G:7ET^}(QsB:vt+quΐt0k-iIٗ i:nE!x`( + +{3yl|b6N} pھkl1,-z،MXebp W qnf?}{_</ہo.VY) ٧qCb}& <3Mp6eb_ 0S8X\S9XrBv56$5&lH޲Ytm _ Z!eB!B!. z B}`Bȇ +{w])ø:̰l?H4)2/UEhڰV%ZىW2b*"znN ¶>~&(Tوk^*Ob/;oi4 +QIzqqG }؁yV7Y;CΖ3r+mY}LKʾNHqS," kƮw]|GPPP܃x&ǧ)~8p>14'fϗlrپkl1,֬wfoRm,)us9%n[M[7ul}C<x~uMvbW{_@ U |7S,LK֧}pceæpo|ndո0g~&(Tوk^*Ob/;oi4 +QIzqqG }؁yV7ᵜ!U`NgKיa9Ҷ>%e_N'i)5~cWͻ.і:e d(;O 8}x;ecpov]c alwŮ8ބ9X6^oim578xz ~vs_Z[q} {`jo9 +pX!֣̀ .Z$@9X5wʛ# sw,kвUB!Bnbw!dK@BB>T{xu㯄ip%s-K8ea`u}4ATe4*Btm5S՟â yэ*ɻpam}"MP:'ѩ׼"U;oi4 +uqYŵn 9)@N9:'r@%7 ر]d ebSSd=mȳi{jE5eG~M8 Ps h KN(uHsx:*,%s+lיb9i lj%|np3gm:X][- + +)@ar7m8Lgzg=Pnk1.`algp's0wqmku wrq7盬Ɣujўmpda#&||8Y8dǯjŖք5Oq1ֿ/Zaӏ/ >\lzc ,XsqE b¬(/(.+xPA!B!?gB^//̪Y/ +tD_aV؞lpW ~ցGp+>CɣG60 \X #W`C 9 9&8 }yڶ|x@(v>7!B!!!9A#yB By_{a^via3 97&.Ϻ; \gid5)֒ax<þ.ģ~I6j:pح;Y(Iu$9&&~')Z_ $yY"8(laBAYrB@J#}پWaI-aNX[a˱&¶[BLg7sܦյڡa&+y?(=Ct-.zevn=]ܚηlƴmѢ +p +˞rb!V8֐6¿mvp-zp7 ~} mn$rkZ>~cY +X8ő-|)P&lF!B!џ-!`ЈCsBBWzxVya20TO/X $=\̖FY dq(ⰯKƃ)k-M.v+N5EYM}%44;I)J%hƑDa/(^CR5 +K*n s: +uXm7e5tBg +> 736-%FAAqo(LV \)_p]05T0ރ.?uFrWlI9I>9˜I aN0%@⁵Q,/^$Q"_&)-(^OUUwEvN^ ͙)󼅵/o mYw2u Al9lig,wuuA[g[.n:8~zo +o}0Dp5Vpm+PUР:|PCMraPK5s6F1S0c1b-co.PHCq1n1>V=:+EQ +ݘoqJ^ը֖CեzeYMVuImZLãzUK,jfjZ$hڔTLj夈&1I24J(J팟DI`/7 +JE䓒|J̵}ϓYNqdL02{i[3 4ad2U=.l6ĴbjqppPF+^@`{>Wǔ\V=:+ rAJkK R2VmʰVOVZ.^ndk$jՆ*ڌYMRTR Ar$&ɔXU3ѐ(J팟DI`/7 +JE䓒|J̵6,u82u&^QMf=eEt0j2ukh 1ȗMed ƾ8u(jH# +.-8/f"fv7twJ潶s]۸m,n˔h#y_[&pD5ijadumui yӼAg~s۹^^qn+ez[zxl9|5fe(n%=jɀu6 n(#/uٽQ{xܓJ_R5Klb׀ 0^BI =*0c1" 1.4c&PccޣӼq]U528z굵fԪZaˍZ~\rV֬ViemQ^mJsМ\T/j\QmFجEFZ)M)JʄFZNidJ,hMȫđ[rIʜ$ QP*%dvUd{\w#3]gedLۚaXYD7 & ]6hꐺ.RѡW/Nfg.<>pt/KD|?ŞRgxW(K}M>9:n_ɎOdzۘ82-=smdz;u6r ?Eeg@mmaz(k[z魇@lgd-;@2D2{C7 eq4>NM}!>Z>O9 N6p<њw9<`毓=Za ?Xací]9l~{??SͯG, iɠa[B!BY!'A-rHi8EIw4IGl02LoQiTgyG[J{RsGid z?Ai4rI? +IDg׏uv+^'Q |D/2#kcg[]"svIwme8-m˚a4ˬv(aNsӨ }5q^)\UEQ$E 6)5 + +gO:BF{62QcZcVqͩ'x_|c|(x +)Mp$&qk.`(&P0dsP0p,.lJs[EB3p*6sTCKRI.h!B!\.BO*Z + !&!}읇l4m}koL3*!)g kT Ed(hnwyŷʰV먿hhK d`$0U :~O^,kFG +/׉8qhF({ ga`w%_8.8QwءY1}A]][dmt۲f"2+]0J4*4CuMjD +WU~(" KM'd_Ll}Wc^(p1{Р(/vA[mQx;64h-hs jbt_6A[MlUO0ߜz5/ܿkh0#G , B \V34I^iŊ"/ + 7,^UŦpiR y/I% !B!c'|_TBM B +;h6^0PVc2%AYB1%sq7 aÕQ|k) kuQFa. R4v]AôW1H=Qzv+^'Q |D/2#kcg[]"svIwme8-m˚a4ˬv(aNsӨ }5q^)\UEQ$E 6) + +gO:ob|L$|˅_|pzq/֋뗿/oe|}m_o•zq9֯k5Y9?N.L4a"}chs/m9p|'?9H1n]\V3:(&`XT0U WIU栩z+*d_Hc)ʬq ,͏K!B*|BRR>O!7D!+`<楑g"ɕ9*yij黎Ɲ02BK񭥬x 6WlX'>.+6./.rZc*VŐ-%TATT!*a0crt4dUTB!BhOO$d$hBu Bȗ +gy"0A`LħkNF~޽5;ht~hPaюf{Ho F~^jO+uWdA7Okae9Rd#~~%cILJ +2FA0.ct\tACVEŭ!B!jOBfHhT=>&0jti>w{7f͙^~cm:YϳhPaFHZԞV +{EtX#E6iY2&O#y$89Y4MLZa;NxVRKfVf˯y\b3B=xNslt׶X5ͱxn[OLsSMcbUxbcT];FT*JS')e4 %qjǃM:)[ + +k@8:G2g|r#w/fV?YWRݟ޻;Kbgcv7+ϣ9I +{lCwD[=^-)(c]E^/0~[k%s|mxނ᏿O P8 `Ñ"J td s +0$TpV]+PEnu!B!W`NTd$hBu Bȗ +gy"CzQl|BA@Wt' Ȓd;7έ~:yYܚp[n +,`<4v;Ѡhc +{,YZX`wو)1Mv‹NvMhyqS,VĎTkWءsOck9<ݵVMs,ۖ,Ӝ`TX9U~ȍV]U^\Z: 1B#!\i4$\@b,71"3I&ݩ^K2W.]t%S$'ٯES,(YcB.[|EeU3u})`wEm]xl.~>~*TӣNDJHG*NO +.45I!]8S1ŵ*r!B!ߌouBȬ 2I=N!B_Kt#O&DaEYjb^ sBӼ sc\'绝ڽNh^a~qzA=)nr:A3ᆘ5dͦ#foߜ7<^SjJ>ܨYʞ 7ᙍ1<6mmʮmt*d:Vհ,U) +T-3 bR4yi):O5+%p)ziZ(fUEI,DY*" '6,-/R2{~psO߆@W{/N~$tSr.o'lm;ۺtN7'Zjq}7V 8OWQQ'+7 Rꨯ1;vd8XR'*'8pF")`5PNSY`Vq$ 8oɸ-蠉*UkfL +:B!w"BJf@Q $%|B +X! 5?k5I1VhEL$LD2( uҨ^jBZnDj Noxs3zA=V(l9 tĆ +[CvlakT46j7xuoxj۫xV}Dk:Mqxf#fG ϱͺc5;aq۱k[<ݵҪ<ӱ]dѭJUxjLhgʦLHyPX)c +[N'H4s7֐4v ^)5^UQmbn,euF̎cu6jvce׶xkUycU Zɢ[2Jr9*&(MTCRxF%mjYU12O" qb汦x#N&Pѧr?zpsM{.wo3klbުq϶sny'oڛdŎ! ׎`Y稱87F&Y(xMW0KxU/]}3; +@U2Qق _:l4t@ uϛ~ " "nGabP_/m#g[|DJ(y(P[EQ衇qll˯رvm='_GJTk9f #N\KrFHQЬFP-ifcհ }x. +\^uw26OcT.hk[ceT4IXQB(N*] +T9d0GS2M($Eˈ$h$4^#pol2HU1:Y`GD߿tO7wv}Er.jn]<Y#9;p=ӝy=MN`7`pX3C1._S)Pj2X;ɬTk?&ppDoݖkva8Xl?}'Z-094\T8(O5*@yP0 0 0 s?H0?Ha9f`f /A T@1?k1^xp!phawmk2@=}>nN +KY˘,0HF0 0 0Ha9f`f#a+r O{/7Lxs"'>D +o-pը՗B;znW{w{pw3;ݹFd xs 6`jzcDK PMA~Xw#H]y<~&&8Hkp*⾇a& .~GXG;= >QE86'_|ˮ /`p\JyбU6G%aaaA$ 0 s3K0đ[0x]9Ͻd,x>Y'&r,IUF귣Zm7.Ǐ-|Ԋ.jZV<ת.[bZnnm"ZЊp?fq׎P\w[L͋mF>4k#5gFHQЬFP-ifcoW<y.MSNB \G; ϱigY4ݵ-ͱ2mȤU,(gSiCii*MIOU2)Zɑ+I2"#e9 "' RtU,X|&;ɂAڕ0jpo}p[TRCxw.R;pΞ q5Ǜwc1Y쟬tx8^YS>q:] 2wD$֔ :"p:?u_ +;>@xllq +qqqL88]{$ 5XU(K26+ +n[V&xeQoc%OY<3taw'#ܓc>yf)+Z͇xU qZ+ zTPa8ci7&^1h(?/>OX;HbӏEs.IԱGAϲGYWry +*eE~ kWL)X[r(:۱Q;]*iee44+ js0C)udUQr,Ie(Km$|d)qaT5ūZ<ޟ(#}"|[ܾ }9Wo/0fxN߯V[xv,gРxr cb^%v@ڢ< ؚЀehVc jMػt?v[~Y>#(R4PE#b-8ҟTqTE()`!S :^EGfSWfrJѫ}'Du\qqq~qqgipg[[ b",DLԕ ~֏<M'ihc5W` s3Vv"4ZdÊ+dh +GC䃂K݀i[v\VTYN?*:QNIԱGA_ã/Wr*\9,ZqOvlamװJZbmY,2 +*%̱4稺vjYUKRd%RIDJ\ UgNzF${%{ؙ9r)r2@K$cdɖ5}mxWTMQV+j m=cU=P<)N+ANkõx8 ?.x#û]ٹ|.6;z ګ{u=y=[XOf!%{`3{shعܻp5S vW%΄?| /y|ia= :X%y6pkLdgE4kA\,&%BfifJ\9{ahVGWAznNk7Q'yv G~kpfnHNPwTV͠ʕzboJBRx|ynBY1UKi2^J q\~($EN1}]eXleEf.IČ#͌ Ƕ,n[S4'b0'24˜1iT]r"ESU*H3;,8*zkF _U ~evGۅK\[lMy M["/07Oob,<[ BJ1x +g +գsZbpU*_S{xPF~ [K뿇ۯ~9l:2Ya_AlKF4q+Vf +( +,cH~6;Mg13#,Jc B!!#Yd0BȜ`[( N;NbL%IeYl*R5l6~\wn+Q2근A7p&o9 Qg7l"~oqMά  u njpTRXZRmZIShT\ +/"71r5M(U7r +r)M+Q)9n1b |T($EN1p_B.g3(+2sL +'fdmfGd8`tE1ceC7c4CӨD"YU>Dgv"|mL!,,4"BKޥO|Ya$O\$MU%ajjV}mNeiv~uԭ^a/G0}a;9yt{ݠPyPmU#Šx۬V?-‹r "|mL!,,4"BKޥO|c`XUQ,2bޭVUbb ,ms[@nL!C~!{N$o0 +kc[IryDMM3Q-kaTCcr4EύMsZF(J4YU$"I9(KM,"/ +0ťE|)a7;PaG g<~s=]a +++]_0qZC&'%ɠ2c%pW!c! ]ͧXB%aak?fai3SMf1 sKp"wҹ$puV\4[v/Z]OtHKrnӟ4fh n2kFslA+|[D5u*-4~kՈʄ۬ +J䒶^.%qjbR.AW4?vؕYe?v ۢ&ϻܘB0BHHt'&OB> ;$Ld442hfM5t=&GSiT9(JUEI")$I"@c\\ZD ,|C.AcWw;<|cf}.ƅ^2ځjK ]ndp8M\L|2]lB09dJÅNWLgk|f}9Y75N!>̟Hg xE-p5 [K<]) G)pdӅ>[;Ͽ=W灉멊KTܤ%7J2OH.t}=1 0 0 53 04&3x%}BL;`-#ﻎߨ3fstsfq]/=vN4of{M6JNmׂNZ4ilAk\ -cZLtU]OjDe emVCF%RrI[/8R1) E;JWcG<.a[$fSH_ɛiWQ90 +kc[IryDMM3Q-kaTCcr4EύMsZ)J4YU$"I9(KM,"/ +0ťE`[;;H!k.m0vExvFO a_x<&oo0c_8|)qRaajH0 Lj"0ӌa[Kޝ8D^>ƾ9%$I(99U19ozҽn8kт{ݘ~˟5KCj^Q4ilA+|[D5uD-E54j~^Mj1 Y H%m\JJŤ\ i~8+*.a[$?P@nL!C~!{N$oNLfy:4;V\2ElL`DTˠi4Ms#d#E0GS圦MUdUQH,'h,I4A(nW+ + ,aS1%D[ŶvE߁8x vS8x)jGmȪېk`]nM 3ȪcҝÄ88[Y!r>=j +}$˪eHUӂ}EE2aWpmP" +' +!3<=Ӧk<+ +^ nsXW^\y["2gXLUMAy/2υHK"e\HD1tЙ!BlȌB=iY&#L REA1{WJ$ŗIQDfZw%/ 2#Bf@fd !S-oѤd ɢɆ[+/BsbGQ kQG(BX9~z5$ &{v$a_wyG. ཝj{܂ /Ǵx l6c>tukBW Bpr&>G&ApǎWxۯ rpBj=|od8]h]Wt[`oqo  ٗE +@V!o`m l7r]P@$ǹK+Up@"5aaDaaL5ibfBp˛('!$<.~jnu&W4֫w[F~Y/̷jmJ2 T1U?cZ0[yoU/Z浫%zkVQlD(xRߓBlNJJ>&G8B.#CL.H)~R- +>͍{玒ʹYZ::ILϱ1'N! L2L&JbV$gҩ$2MMf# AS ]h]"!5k4ET&')D%)F$Q0 <_@qbЅX`9B?L6{&a_wGoOoN +Jۃ:03^mߌ[}/Ǵ=߄xC|`xm5Jt +7dFV"ڻt5_?^!!~>Y#+!t΅8Zx|k' 5 ?_r `^7l'֩) 0 0 |*D0 0Ӈc41 3!M8AxN9 '`jj53Z^/nwnu +wf|tUV#EoF%ۮf5%WFefo7qɭz4]-{^B̸e%8Dߗ[)$VyH) crS.R>8$$b'xؾ{(sbp퐞D,db8öh8=N%Ѭhj4%et4 bzFu\)4YU8I$,II5 "QN ڮQ;bgHQD,^}%VC|n`wߡ!c(!#g4Tons]5P|ګ!c(o6/P7aQsg0@uQyk0ug4*e(trrYut銆JQ[d"m"-Ipbc'"<[5`_ކ ak+X[3폿K:2)wt7wxL"aadaaL5ibfBp˛($Krڱ-TksVe,ϵVnjYՃf[Uƅ%WFefo7qɭz4]-{^B̸e%8Dnu$[)"0NKH< dTKEOsc^:﹣rnpNsl̉dõCz6RY;c ۊKGL:ʩ$2MMf# AS ]h]"!5k4ET&')D%)F$Q0 <_@qbЎX`9Džx; wp}= z GopA^w`u ?뭷 +]~D,m>/ +E@Ч)SE-qZ$n[.Ii]R!0,ϙ3 hfnx}Fѳq$I{Mg7/zx->ܟfRo=[d&Mt\^wmh|_ +7g/~\(_ĝ-&DtILot?stLFW$aTNtaLx8.©: 9y+(( I'(x(Q%!gN5J4|r53 |w;5BQm Bxf>˴k^ᅕJ[TXDVi#j-M!*{Fay.k^.-7k|DpUKE%LUdղLQ)O)H^vSұ;Vd$r#r^}KlX1 83ih.BiM%eL2ˤh:9_Nc2D,b"+J8#fVqDc>aGpc`Nde 4i2,'b\E046AbmP}J=^Dw @dw~~k:w> 6-e^ށa)&-'OtwOpnL]x| 5N M52L`fD* m7!@Xd mh>>}_eK8Ͽ{?_z`2^tq Mw[9lX^UِoνZeon]ܠ&,Nr"pޚ 9y+(( I'(x(Q%!gP°᳌Nb3 b&ӝ䫅\ee\yq[Y[n-5Jk+mQaw[Վ9h ++1^QX^Zתr͚(=4\R}jv&תUjY&ӨP٧$]/ZXłLRrrD9*^eĊٌ(^1IDsJl*)cgX&EɄI%~v2$bQYhT1cȶ#2 ;2;ks"G,KdXMÐ e9.tQ-J +sĥ>4 w +L/~п[WwMxsO7`~^{ޝwނ؋[|g;'dIINɎ<1+ruޮst;"s߄;܀3;pxFs/w_y|ý- }Ʉ;\|jdd/G@Zc)0y[7 pgNdg9װ2dF<Nsb'>EQEQEtTEQUeQ ny]5JQ3,ӴQ;(fk/BӋܱJ|*E^KY툚#sKh ++1^QX^Zתr͚cNU.էi*arZ%۬e2J }JAݱZ,$+, J\6L͈L4NOɦ2v&eRIQ4LT/g'1H"E1MD%3l+8"ӱmȰ#cF0'2yIJD߭7 CF78DHYFҦv:_P w+*TAG}m}͂/6"ppف+ M'w寰O-| 9] &AGƐm`ry8>?t|ƴ7ht!:?ΉaSEQEQYRQEQOTYh EF(2'%jTeb0Zd3zQj,[?:ܼک_XiU/7~4aF H$U2+Tr),TnSc${lKlK^Med&ߖ) J]66)Vm˽v8ߍps(Xl#,8ix8Q v!kz4k32Q-)gXrd+i%?Ql +XיF+96NQVյL04ȶQlQ)f1Kϒ ]S(j*$]Us(#dIUrF'ȅ^FPy$QEA 3 If}j=|yލNԃV~/nCF#,8ix8Q v!kz4k32Q-)gXrd+i%?QlbKLl+Z&beYcyd(jiT(gɆ)5p9QSp* +NTd9B + H#(É|Ap$Y(y82siXe5K)RtaN ӑ<Ѐw<1?nR=O獂pj>;m s:mPn5t7Wh܁[B˛weQ$z~}(ؽ[ +uUФǗ\FVV'*߰-YؽZÓ2]m _ P(-bD'+0 , Ͱ=\G>$~z3Lxs/hqq܃+yA\^ݑwFv{f[ÑHǷ!en[!u.~ +8$>t k:x8\]G+` v =ι q`~6Q#+ì@ +u[Mm˄$!~"-"?s0āsrH ] 0 0gh^0 0cf,0 B}o<>&_&prL/4v{i=/ ney[^u~S\굋暥b]wXkG8YX`4߰ڴ0ߚFkN(ڵ|U 4+^JvZN]s3J)JQ)ebtd&U-: +Vžrr,sA}>}bLIy̹t*MY(c+DK'fJҌT2Aӭ_OK i #QL]|b4YMt>"T&')D%)&HHE! A{ı` nDx6p6pWp6cOl3$gϏɿ>9l{s?4^]ɽp/Fקŝ7&45݊H#J܃THU|%F le:!<+v;~c`üG?FUغ \ gwUxW?EV#爅2< T\%}C1$D$cx-,bƶDFYseCLxaa32 0̬ᘙ&38 Ä/[2wqvN'CȋI#fULy]m./QrFiy(^OrkKfm&-5hN9a/]w>-?לPknQ:JרҲzԫɕlʴeJ)JQ)ebtd&U-: +rr,sA}Q\6JfLcΥSAlB)OX Z:0Vf n%~Z2n%L45ntb4M5tZlT)4YU?I ,IA}4AE/ +QN ,F'KemY n6xi8ۄQd >2rj槇>f7!DTm:j=Uw!DTݘw DTmZoC=&ѭ%CڔȥV!DTݘ+z:]χ`.L]xŽpͽUg]D?F"lHd];<a.lV'w~ `yb +&i @!;m !$k)sy&I{n9$61ArIxaa32 0̬ᘙ&38 ÄPA@D82B8qv/ T5|l[reSo,ͷ[;Nk;xmľ>ɭ-A~a皴|נq;䆽v[j\sB׮-G/iVrF+\\ɶkL)_&ݬdR^.IJ6*aRբ`U )' R>%Qel&YȤi<\:Ȧ, 3m%iF*V/%fX4IS@(NTCii>1&HK`M>ɪI,eI + (xQ"p~?Y`%7"\|7>\v އWق['MkW,K<ʳe MwxE*T"E"ɢ_ =Is-ՑRt6^|ټ>7v=_PG&㸞OJڮ%+*%? <ϸa׿HbcAa`/ +oڣA йhM*WMI%"gm0 0 0HaM&0 sI(D xԬsti,k5JwgV]SffǜMi5*ln!;W̙#3]+_@nZC2Z)=URujT$Z^qN.$k%GZ˟'nr$+\r&zgL`ϤDr_mp6%d&38-ƜX<^z"#`<HG^!/- +  +ԐaNTCiiHCMJUEY#ʒW (xQE_ ^gx6,X|{$)X+-66D\D\/6!p &㸞!"1UB>K"#yDp&k\A@`C^w$ +kzuzıĻN"~=uy<,l{I:oѳ8dȇ'p?ϻիe<:\er)]~ge~wA5w]]αou\^mޱӖ[?l?Yu{wߏ]]Y{|6xs6_Ί +PO WP;4 Jv*e 0 0̍$ay8F8 ÜA%;/ӀT,.L*g{zvaTU; +;߬Zt}N:=Ǟ^73״l+jThVBv35GfW-ݴdbzj+yV)ըiɩr΅dHT}ĭBndKY?RDY,b֖́󙴟H.Φdb`&ҘS#GKOD#~x$G#4# h+EBA?p@A2 zij:M5#@Iw}X)R@Ui(^"~poj4AEE ;,Xs s]N6]_ pC>ۆ3zJNa ޭ"\C0+090x;k9\ qzyN[rtx$<,8_rr`w^>`gm `cN6-xqoo(""uKiYrM>X +4@>} P(vvI_OgXgH3$퍜'q~$`#_ _2%Yht59xH_ xÒ#Z<&A0 0 0Scai1Sfq xd?@BjLUr\ܨьUusnLv~UbhgA`=[:oe ;Ҩg),釜o {MœunV se3~ +5Z<趪EԼf-mTiNB˷UJUe|LR +kTJz'S+X  #U1I.?R!7&Q\6LfhLڏKGK˦~L2ˤ4=LдT+&1?DLb4%>4hkMT#J1fS\x&QEI,{$$Q ( "rj + +Ȃ:8:#gcx-^x w?kxpg?iz~6^Lj z +ճyzzrPxt [lcѶ7VY`ge`kűmwѱ;=xo-8=w<bc"xQ={{+N|xec) QXZ 7e+R}P&!;N 0 0̧D@ 0 3}8fL30^ij˘ztn4V°U]ɰS0+1&qt~[:zm2G&>"*u~aa {MœunV se3~ +5Z<趪EԼf=mTiNB˷UJUe|LR +kTJz'S+X  #U1I.?R!7&Q\6LfhLڏKGK˦~L2ˤ4=LдT+&1?DLb4%>4TE4G&cDͦMBYeI#H7GEAE> "rj + +p,XsG/>l^@Se݋{sۄ{(lwrqpupԐͽ·_ߚnonZu^@Wa"=Mٞހ@'h"A5*Lfz| /C5ȶ8X퍕cv%Ya{Zqslmo"8Ǝ}-\{m/s8cc[ /."x8`<_m$^^8/G8E"p Mn 8naI!AiQ OG9? ( .O$7= MY]uCz zؐ sWS*+#/sL6hӜq;-<hR#K#+ 4J=sz:mF*t5"իʵk8VoV]\Rܐrl%L<%c)+"+' qB>sd \*d3X6$f3i#NٹLfe)I%ÌtfIl izҲ̀f4CLFbb4%4U״0ESUr4Ie(Kq$A qfEE3${.L@~M^ msoBڼ xw"!6a6Bߋ8888nB[d [XRHGhZ +u,G\$ +G4Cӳ|m׼ձW]uCz zؐ sWS*+#/sL6hӜq;-<hR#K#+ 4J=sz:mF*t5"իʵk8VoV]\Rܐrl%L<%c)+"+' qB>s$b.b, 34K\&M̤’aF:i$R4=iY f@M[ILIT#1E1}zhukZ** ++GbEe)$H"!lgH{(.L-Y Djx{m~&߄#Q@oܱmX7aWIߋ{~re~](K07O.~Z/Σasp(փ07νӇs~ϤI nPκ Ox|Cv ?{&@FH6nuq;dpL0qME!P@;=Oó]8CA `qq_&枋8㎘-4 E&⸅kCJ A$ 깔UlJͥA}2~2z!ݐ\ؐ sWS*+#/sL6hӜq;-<hR#K#+ 4J=sz:mF*t5"իʵk8VoV]\Rܐrl%L<%c)+"+' qB>sd \*d3X6$f3i#NٹLfe)I%ÌtfIl izҲ̀f4CLFbb4%4U״0ESUYUV&)Le)$H"!l]Ey9|=gBdw}Y DlmD˶ ?o|FS߄# ?CS^bk0[(MXphʫ  +S^l| +e8 %#O.'8O9,g; ) n)n&~M%n^5?1=2i?j>EsH&@INĽSJid-|"~؄/F[ڈ_oVȃWB=jjװ׋{z~ճ;py4O>m2%c[p +`-똯]\sz {vq}>;KX2o- `(qwQ{1p2a!*F;D.!p<<)#uHЛRqHx<5aa"aa1cMfq@fl2hX#8@x;'$ +IjZɺ2Ө_+svR6g',T/\99Qf Ԍ:ffLOYӧI5|1@o[Cw[2ܵ\ZRήyZcWU*S/tX8T4d*.t/!E&YK:yW~/3~Z&GͧShs6$(pS҉p*SS8-hJ"u ǣPL F">YUh`DQhhphtFP0H eM/b@j4AE/ +~N 6,L`Dp\CFC +JSo?mKq~؄/ y6כUs+p=cV_9#\ 0On.qǼ܂S_p߄[x<o] vbm6-̫&wcEoʂk l.n?~}* 8d\ (*H"$ϸ%uHЛRqHx<5aa"aa1cMfq@fl2hXD;pz +i*OkvҪM*mziҮ]V|yQ44f[Iaε,ܣ1އVGvO4>cz͚>&UZ-GšM;Z_^JZY-z)gajǒN.s^F.Uӳ?Q-)Z49Jzd tI)DK8DIc4%sQK(FJ F#J*p0(4Y ]B@84@R:}XR(&Ɂ1 I^5 "?'NqxVu`kp_~<AŮqm>n|"~؄/B<[ k0כUsPG^;ZybwVp!ݹXˣytFH'"\[= .ȰM wMz-pp#{%8aA;=x&_>-#Q*"d%}5߅saa[1aa$k00cK\t9's |2/ +IUIV +9sQM6kW[f^5$&XE/*[{K$D 4+ǘKD$Jy$L2L't2q{żD,'FPE">,Xf(bY,2M0K7c4raehP K3tݏk_h»>Pb!Ɨ<$ɡ!|Wwo uG_ vHQqknKI7jsLu^ݐ0@/T gx8o?pN; Qk&;kYSy˰{5YWags[< a\+/?"ZHA0Ȑ桺r  +!wAAZ= $ GQ&#KQ<:!CfCd""S՞k \vZYUBY_YGleySZkWHr|@K}5;JfY-ar5\ ;o9 +MW~j\ר +V-iʵ3Se@VBeҍJ';S)eeOV*"ۣ$UBRܗ\I9Oeybl'ZȤY<\:'M%Q#ee ?f: V$d+e&bQ?x4P,a2CbizYY s,C B,=d^~T]r,ESU*< +(yb +@!_$xx, |산Iew;v;؛-~S1&!Ga/{q_5y~_3WI<O.{|_]#ȣ~}t 든kL0{gϺί=Aug Wg:hUe٥p[vncl᚛k'H#Y 2 41K^UF@DŽK []S۰fʐFQ^A+CAᨑ#M(gCFAH" +Fs2"viՉLT ɲL?X$cӥ~>Ы-wYՕq>{e*.:K6O,kJ }^Ӟ*uP* cAQffuF?5o.kXn4}әr +mfUfܾtbE8L$P$TEMU eбYΐB'+B⩸UkLsy=4xh2']+Q T!Y)KX.$J_'no=¾}X=|9nyoo1,ެH{|^z|^Q ;]V:iR<>9wݠ;QvݛUPFw'Bnxd} mj4kתDkce85^ecqʾLڗW%Ovrq~/c%/[-Q؋S|y\m)*qA^63UȤ1ifͺN#ȉMK472];pRIn'(-eqԤi XCȦNCii*MQSɢ(4I(Q8$q9/G~>s>n> Wl/,X$Dw0< pos߻~A#/EuVIța^/ázB#sϸq_CFB]!xz'WP=^e2G0 qޢwdX\X;Ё+g`Oϟgm`Y80r*H%+q2`ZR/!K@ 0 00 0I0#f%0C/^2p\B#INӪLΞj>ޫLw*z҉Npj7ӝNM)UZU>oR<>9wݠ;QvݛUPFw'BnV4'c(hT\V'\+9 +-Seվt(Q}:í{kx+yqj^oK\T1 AB&=O4+muFNmZ*!Jt;eEi)ˌ&M42z@6uNuMPizMUEI,G$pxQh'xۧA% rD[q蠖 ޯ}}X-|YnYooUfFj%zq3n뇍<Cyzh=r/ 2ʣE{AKp ]Զ)H9wsy"߷qA ٤l%Y;q|6.c>{|`mAߖ ?*:@Fq] I[i+Vyq 0 00 0I0#f%0WKp$|$ *|XuYrKډ^olvz:3թNu3IoۇVt* +4);nЊӝzXMM*Z]!^Y+tq1q\]jUmxm)2j_^ >{)2bzq" +{q*/o ;-sqR\6.7Hf + f>ҬY׉cd9viRkN*Id,34 d0bib:M5-BI"}Js4YT&)7 +=ӓsΉ3$Qabb>ZX >WQY"HQIU8nfM!ŁTj^)v7ESUYUV&)Leɍ$HIܳA&7uˋUbyD)˓kqS +#0.""t 9ٱ |"y; :wnYصhچU'K{sJM& *^ +c<}|ky4sZa,ܚ\9{_N|=i6!@If"FtH>(>P(l88Ȅ8㆏ 5 a&C#"H",f $ b2nԦ[e4=VCn&FJGqS0;QQZÖ4SrĈLUeN^jfɔmV4{d:J]+F%dglUTVL6L:4Z^bɛⵢ%V-rԘVdMr>+2,b62~")ΧwD̜K%YBdUs$nx̍?ỈhQ!d´ p_$S +YX굾y` +O)p猂5ؚWasN/`lk=w +g5\^MxV! + + +Ѳ aV88"8>7$,J +f +I(骦hSZX-tgF[VvS9>.63c T7se۬hfǚ,س0=JkS]rĈLUeN^jfɔmV4{d:J]+F%dglUTVL6L:4Z^bɛⵢ%V-rԘVycȚ|6VeXleD +S*O9J&I*/ CɈi!7 +H(H3A7x~`4A>àiࡩ^OŰ64ţ4U4'ESUYUV&)Leɍ$HIܳA_r/1a9Gk:o5oo!7kp^:X3b˫p7` n:*@,W`03\o7by=!\WO!_@\0_W{%H5Eȃ :Or ^O;IJ̤Ep(srk={e{6Re^O)p^ݳ*l 6p~ X3=ZPa39pn,D`uWNNNGG @X#Y$<88Ȅ8㆏ 5 a&C[Dǣh,OMLL +'F +ǺNN۩Nhhw,?32G[ř1Hiv]G&:ٱ& Tgd&;1*mhSWk2GU:Nn,j ٙ%["-լ*S=rXxhU 5k;|C/糱R.-f('RȘR|zG̹T%M&X57L"&S(-ĜFX|HENF,L ټP EBA:|>æ WM3^M57 bXthuk** +Fs4o۲l6ƆT*yڗ$/%<*O,09m ƀܰ򍤑ZCϬ)@O}ߴeՌz$DYr# hF+7xFD|{K >a~6ɼ{S0߃7a[i0[0p&٫rًhs2o8{v=oל=w:g_q=qP]G.:'/'λ'9瞷jܟн5gwϺMgv +sl i w(=HEz~@_ +Ѭ $@ƩaMz˃|0F!XD>^UL^|7&F\u=ڐ##88"8;zH; WH mQHHPql^а` IVpq  Xk +&bxlsRvry'Z.SqcqS8>om;LcRA-β-مf׍Lk,j1[*3רefketZzLȊZ1ը2%X(hz%oJԊ=jtl(Veir>/ X1AMI`ґ|f(jt%M%Y17!#p$nxLaEYhEm"vzlΩ7xFD|{ ' e;0!ܧB-ln"68pM nAx0w>3&L p@Lx~gϮÄ<rlONW[`/[N%p<r[nT<8p5 r}gv +p,ݵl`/"=/?௧N'OB%ǝcAd%wn#ro_%jbs^!}f֢""cD 4A5&/n`:mHA88Ȅ8;$29!}vC[uy hD*^S4Q" 2<HgD\[RylkN.+Kb|bUZ2W:7vqf~Ô;6/,Kݒ]hjyhnҪc2s +-ݮ1PfVfI%gIT-ݬS*S5rXD,9jLdžb](R`ddD )gfKXTs2 7L"&hXşFP&b# 4鑐]XhϠ[NyNtKS}1`)^z4NTEVI,DYr# hF~x㍷/ o@U='J {;)6ߙzeozӭzF\ڄy Co=>=OMǓD_ۿu]<8&?7)2to >YadKyxE^##?(u  3kh `u V=ݏx4{wA>O$d8LEEQzaxk4l>|8Ʉ8;$2#lNىD Z22FAIA=|iWǗoV:߬tQ\au;mO,J]J4p|ޮ9/wrv[e[ -Z6ݙ-mײYZb̷PUfQ1,Vd,JbQeJֱQ.ВKޔ{Ղ%GP|6^,b6 h0#PsK8JbnBF2&I->Dxbp ㏆C4= 7u6r56$}HJ(3璪Tܦ&ש!Ėdy%K5qi݀,H[_W)RtPMG%dq.dɩ($"vpЈIH$$^8d Q1x` F68yC➻ą.80Ba!xt!ww!x _7;`u紡^o!x/',^܆z9M݂)@&L xru5M= +@ +L a',[>1xCu{kV_ua8X 6E7W.;+헟O=R{sa~d gfI$K\`0 6A6p">V_F 0 0 i0Ĝa낍}y歎tqPD!ZӮ\y圡pWC~S-6NfiޮjծϵRjzY!4eSS'l֮Hvl5HE6_Ǫc%*RYаD׋93j,FWKXH-1|-hҺH)k3&kCB.Ip.ф$F f4]lps0.sAAhUC,{7m]8Uow7;6wN6Lի-B/nT=ߜgMduI!'7x|}kzt&dlL:^8Z/z߽uCW^v/*5q_;ƿ1}q9;8KnX~3@Z +q@;c@o;>/ j: 9JQ9NgdH' 0 00"ba13Mfq3̼3p=7#9x0$ QWz^mX#TuvE쵫镅zb3{;_smlYZ;עJ?7جR )٩J~YkJTYJIcձs),[hXQŜibBV#ūlRJ>Cs4i]5ShP!m$Ed8hBdl3.H'zNc4d,JӢqHxO<"yc8GCAw$6;5 M ,A|v^;q=\?2 {5{&N3 {."ow+Bf>sXaڂB' S|s<Mo]zsR'7+@:t }s<@`&eInBpO[opptu. p!ڷ׺^Saw#ۗ4ؼ'_ן?|U%LKɸqIQ뎄O#}0 0 #"a=3`f9>.`/د`|d<`8mbS),zvNqt[n3,/ӽN-ܩWZSh6NfiޮjծϵRjzY!4eSS'l֮Hvl5HE6_Ǫc%*RYаD׋93j,FWKXH-1|-hҺH)k3&kCB.Ip.ф$F f4]M)k᡹fPM)GUinUQdfܲ̊DYh~DDub/be:|^ B>#j\ @$tg~vE>bBozwtwֈ7p*^m{ѧ*^>őۤ5fp*\X'g5ˣ9ҟk_jӃ8^9vWm=YUhIpI+Mﷻܶ>wE5 p_}`#)~ b +[h4y#? hZh*` ,ijcL_yU^OY3&٣4(VvHnYfh,I4$:ѥsX-t|^ B+ -6/>B_~p'>6㎀;~ N w/==8S6Go6/o1~]bptV682[U=nNNc5pd_C #b8k82B_܉+pqN0^qcvW,l/b5kD8Zh=힮;ۇm{﷜'8KMIg͆sOo=f>,םuҗ֣9ݙZV:{kCp[=vضo@eޢt9Ҷ&,~,@6? @! +NNAd +"F1QzI{)""tr.Ik@%;98vH8;D3w<>HyeEQ$K95-(ϤFGíj0?1V~UaYXd-t=wikMh*-??^͵, 4*Zt)=ըd&eZzR2ƫތkfhJ6BQq+izG^IԊyxƵEVZzsCee/uFrUod/}_DR"%j8%@SNLr!@}-Y=޷*qnbؒLObAHV}"MZ.e bƔ"ZOJg(J8$t1:s*%Z͎7 !;X(HDq4p,VZOԠ>/I{glmW]wT-ۄzGt0]oA5Af{zEUt5۪[BqY,*oNNfOLӋ͉ɹFlO_j7 +:ЮKbF]hN&3?eUתT٩jݨR3u)9]#,k_ӬLڊOV +X'%]*V+2N)V-墕b&R.d|H9GօKYC1k,p> R `6A.O{zNŢ4d4B&"a;x8d I(Α`J I>AW%i~Jy4$rQh&[#KHNMU-CUHA6))LrNt8hD$j$AE/ +vNu d5(,X|wɯpN@F//Ԅ>|LJ_/gp :o6Fe^ݢ97z^\{~m83]<^<<#<7ɥ.b$sI.݈i!; .$MI,I:V YʢI I/ +F5Ǜ$™8V` 4NpmBKkS$gޭ+X nq}|Xޯ~YVe07KŽ(=Gjh^.ϋ{b< ٝdpDLGH{ПlfAL)6.3Y=mVT5f,icc +¼SgT[װ {\/>4o`y\?~s`$xv%d0Es +  ewQx0(({cf((j𘨁5LP'C),lϲ*n|j|] y1nf a:,A׋v0F;WKGKߟ.gw>Ondpáp?;ٞ٧ͺكT CUoSj3Q3c)vl$H9ݻVUÞZ9TKlZ)<\ȐB| +sFҡR69Y e%Ib.,dFL"XHڒ@>H\R&41♬ux3q(ɟG}XĈ7 Nx?DDr%BA#h0`T {q^!bx=Fl~ytzMri$e<.'Iv;za7bumN8l6F$be(KR/dV+hFyB,Nj`,Qf3 ^™8V` PРA o6I,͏%?& 6Ԁ`e_:ޭMxx׋-Qiyyv?/1.gw>m?'&Y<zt堾 ٙ\o>mmi:@74s-z4goڢF9 ֦ZӸ6v<`{T[&^`a[ +>gwL:'ݟy~=@: +V;D%qQXPEQ13EQ5xL@d&`Ƶku6r#ERD-:Ӷ|;׶@b(}h}S6Nd7N|lֻpN %C+Uk> F##l]Յvrsr_[3A~+=bslO99"-O :vqe]Xviup2QI噖W{MEPGB׬ao{n0׮-+5]nF%UMcvZU]*n*ө+tfE2Z),RMEPDJ7r^)YI֔b^ &cE4JQ'XL)Hr!Y+R.dM2v,2cQ锕p.фM0)B9Z'$j1CHa/b4"IYxC? y~I'$$(|4n@^ģC5(x=#fv[݂`U#qϓ\a7B fŚo*ݕm-tvmuO/t'ڹ]ՙV䠭YT>[ksArjS=A׸D6.WP^Z&*<ӒbHSW\5|R~muR~eͨiК^vUR%mPe:utfE2b%V((ce%TQo Jt*ꕒdM)ej2V4)`jIuy⚬ŔY(rq9+2H$c'ZbH!39NY RIM(L38M )"A&3)!uX8E p$EBfA3_8 H $H>_HѸ}^AzHxHn( mw U `N8ħgؑaA-?_w{ow[Fo^^ݥ?w3L_xOۋ[ߤ'lJOo{rޟk>Σ$v~K1T mD.3T[?}m#? 4~had۰z=xa^O93C^Mj?Wh/wr@= " L3 +n "9 Ն\jhGHAwqkw40;dp8#gcq#pGp1,0<Òuv\#D=Vd9<.g2.~<CboO/turrS>1(#7&W *2T^ZGfbF3MװR s)?۪f{鵪lW5XE(NBʶkYU=˺t6cje,TpIfnTTR)T\"%krNZ +J&O))Q.drR-ftOsU&M&hD&HT<H,Q+3)!uX8E p$EBfA3_8 H $H>_HѸ}^/I4DQ4D +x9\kb1 M9rCaG63x vx{5f3~h]0%^fq[`֛̳id AM'w05AMGWG/uܶu\ "%Q,k2ii}L'dkǶo&$ h) q4ٛ^_ ztM +Lyy&pϋK|َotΙ[\3٣m{| !/{[0[o^\dyxx'ހO|$ɯSH* +ITdٍ {$^LFy$IxQp;HHwލv> d7)w4h]xk  +1{0~y8K{'  -A8R?md-8F p|r:!Ѻ8//Ñzqp:AlcO-<{z|G`do ԣsfŮw$ػ|p%q^p n\( \O?lC1(2A RL\<12&9f0>/w2?@;>D((Ff(! 5<@25ü x2~hz&bð /+WKhJuYm./67Vήu+ ZoųmSL]KcVdoE*,J~zQqkhNS8ɯtXjnkO1_-ujNv5mHfMzQ9NLJNP2zrZ"Z.,5ES^FiDF.p"Q+j)$^sZ'+$rސrn2Kbl:Z8ӆMrp.eHɑ3 I0ŝjnx̍?%_9q†MNHA }HJ(`緓~ob>WUI)$YR$*?뫩, 𹝕Q%PVZ$ qMyl־VԾÎs6qou}s~K7uq_o{ufo^׻:zq >2zrWHxʮ BG` Y_;6ue{jgkbW{6G <<,3pu6VU ýsŅyq33oKq [eD876m#lM"aH`ܘOOQEQTWxDQEQCkPB@s ,ρ "N"phhn+OO*/T'j\;5===[4S┪QNMx* <_+}u2ngR"N L>QjIL%+y`47kXUƪildtJ&EՂA(-Q@ +)ZfbzO!j 3VPByYIsd($3ro6xH?q[Ca㾿A^FMW7`]@}U+k.C<}bPu>^.#{;v8ۃ}uw q_2H{Fujst%2_` 0(f1.`E@лx`,q}6g5Q@{$haIܘOOQEQTWxDQEQCkPB@: qV$ϛ-et~Z.MMNxT^<1_('bzqR<3_M-NԔ*/Ue^k\<7egR"N L>QjIL%+y`47kXUƪildtJ&EՂA(-Q@ +)ZfbzO!j 3VPByYIsd($3rohLJ8~鏷,fo^׏ +u }r}g'O/ǓBס+xxPGa` t; qZwVW^XBue,Vx|'<<^{?a>g -| `>M\{ǷVXᗿy 1 ;pM 74a8q#8&бxm׬`EQEu~(〡5D B Gݟ3уeX/(F/ZsWScP)ҙjOũrhTPjfqZ͞U3?TpXX9y^cURemz9=W+gN6sSF5)un`򉚥lUS^Īj6V-Hcl'LW*4) "FirUHRF6{ +TK8i綂r ,{/bHuKeYp_$ OyL)"WYVܯ{͗̒K ;#Rᇙ=CZ9uWKX5-2J>KsH)K O-THh|: +eSD $x /3OŢf5_2&"aO<ycxL#A"h0R_ +P;Ԁk{=f>^ۄ{TVU]uxIUCk4t8hn7bFRd٬FeI #DہX a kwxMF[Bl5)¯ߞ lu@ϛ-6Ze 12A\ס'=#q_ca 12y +=yӣ6x1=a4i~ =a4/!PO^.v<_B\/VlMb Г'{<^ﲏfq-4h[knHȷd[ ГK +/ʰ ƕ[@ ;%L +l- +>?en9^X9˿?鏐v`gm:5FkS3]d#X,߯b6˩&4 Z/,DBUb6QkFf_NO /7fnf|xir,/M UwYl/N4HY7třF_,,k)6=f4@˟R +gLF&G:g5meqZfY5mTңUZH'5\/flԻ$UK6"-9P.%Kꕼ.^+wz#V+9Gõ.j)fB&Vgir.)et飅 +i-Os}B4H3I"H':dSYǗFxHhX8쉆L#A"h0R_ +P;Ԁk{=f>^ۄ{TVU]uxIUCk4t8hn7bFRd٬FeI #DہXkX?h?: ٴ~M&;v[_l}X>m@^:??5X><X!T{?? +}U^_=_s$6?? +~<5PO7s\g{k\a[ؽ֛%E~l-sesWsB~o- 涯xܰʘ 6Zزв6pemY/|Ckp |Rp͉Bv$ʠ`%PH6"%/*㵌k҂bX,b9}lSMifd9A3%@!PאMB6DֲM@x#`ɝ7?;;Q.fjS#fϜmgSܥfvvtFSm_hЊ3…F<}t~Q>ӥ0=6h6@ύ"^ΎO&G(C3MZ0Q&5Zva0Tˌ5fңJztJtRuZP"-٨wI46ƵiɁr/:ꕎxsbGV sk]R.V)fD˅LҢ\%Rp1G F)Z$Ns}B4H3I"H':D,7OjQ_2&"aO<ycxL#A"h0R_ +P;Ԁk{=f>^QUͮ\<ɪơ5]v:4avE1#)lV$Im@G@F5ayt| +:"?}< wu_l/   蘭!CnxѼ}} x33Go a.;ˎ +z/kz&02 'ׁ<^^vг 7vl//;Z^ֲ{U90'5-gΞ68II@%Q3Iߚ[;}h;y}J[|%N|Ȳc>; (+mNfWw 0Opб^e `cc{ᕁݭ!1Ƕܰ݀oށ7[or1@ xg`0H'#\Ap?*s~ a9+1 0ᘉ&38@K$<ݘ! <7H/H(Ax"TnUE/,h}Vڢ.?SX 7(ڼFSW5eeNSՖ^待<۵ic!PP\Yu$/)Zʔ|f?M4*zVlY^A+̴6Z~EJoWi9eC*,lrbfUԪ2͚S&ijtS!YEQjIuLK*$ePKhqh%b>Q)8D&{X)GdŬ)FqɧIi%K%G eQDJL1"f'Ȑ/Q@,a/ +:,HQA X>(.Kܒ㡹=¯~9D>V?=|=x%~x0FhÄCv`{޷w);/{w/2}~|ݧ7g!>8!'< Y]s@p g,<-a=w5[C>|=%07>{<<*u>f_{;|pw67WxmXiB^JErHW + 3D!^9aaHD 0 3y8f L2qS!ps8DDKZSemvSo+=m}yv^i.u+zmuq+&RY[卾ڼFU+sYM][ZצC/ u ϕYGbhUYL}tV-sT47{Z4hvROhS*-,zcH%rU[ujmWSn4k2NMdkFe'RJ2-UNbB-Rŕ]D(^9IbBQ$&Zjp.%M&F fqZ(3wHƈMΟ"Cx$G-H揆~=dIWl ^owX fmB{:K:K;>3ޙ&ffs=Kda 6'sIGzN=0bq1It6IkmVk+b!]b̼EIh6fA0 +=\?M 0w8 p061,S{)(CEQ}f )',8מּ@4KKhMM.LfN s#R1όOqm"~|V Rju%^j+N+\ʪb8 \V.5BndݰJƤٜ̄*8a!WTi1U.2h':PNI Nd$ih<;$dblZ#$u״# 40t@&&5 T9#I`_dȐ'< 74򻃁^5 }jpJπgCrpz {U:n=[䪳z\.ǭaul=t8옃$:V$ڵ6jx.Hf"$A4x koT#x#cbU5+j 4tv{WBVY{V6tC!+BMmBw޷mZz]5yGUhrnu7c4OC&O~6 x| *GWc^4V _6 w 5sڀ`g5^/j,-[ Ux|g;Zw5競qg6K;K l [5<~s6VX`!K.pP=oa`, *c((Ե( Cu5P݌D!<e$9#I`_dȐ'< 74򻃁^5 }jpJπgCrpz {U:n=[䪳z\.ǭaul=t8옃$:V$ڵ6jx.Hf"$A4x `T#x#5cbU5+ѠA{LgJ_I/V?*̸5_~{O;E>nw dC[_ 2n:bhmқur58V^}5xzS'B[_;H<xҞsbݶ!Cw.@[v +^,kwORcjLZ][ʢω|l/3ޗz~6U[p 9`<56pm 5|Oױg~6~P q=۸EQE((0TW3@2ˊۊqXx$IcKɅ|~L>932ac"POX*(9%vbn H*ҌI?K|^TV(~/LfbT)Mf\V.5BnDGSM dLL2L~57e>Weyݖ%}% tC3S56[ռ< E , $!!w?7ʖM$t tR]eZ!:F)MLLF e4kƻ-ZqlibF;4yGPu rJK Ǹf 熛-ߕ&RnQul[\#Yבtv* F5Ӕ*Vri*4w_jTRR*izɬ@KJdh)Q)yx9Odc.Nr1k)ZȐZ%OX¹T%M&h 鄥`*NMbfdh(3ƣZ 1 _$B4o8dC4~?фʫ5(^+fXq{F7Yxw]8]N|1߾`pBAm7E6=zw~S9[p쯁TonÁzlބ=iޫ=^á3b Ugkl=XMؓgv3 `y| H{ؓ9]E{?L;2Ƀ+v3o~ Rx aO]pF^&5H}^pFy#~\߽dpd,pѲwcpR_7X? $p}6qo?_;޲6[]:vmzSp3SPI!8ݔp8㓹p88xpf "( 䶜UcǎLtfgۋc#ݓí-to7scJt1ڱљnplytNf@{Œ8:m4# =i>P]U'z´A}abؤ7'5]BsjN3c]eZ!:F)MLLF e4kƻ-ZqlibF;4yGʐA1)-iA{: 7%Z+MP4uٶ\ùF#2:Ud[j)Uz9ӬUhiZjTRR*izɬ@KJdh)Q)yx9Odc.^bŬh!CrkiH>b RIP638871ZTODD FhX,l揆CV|P Ѽ`E 4oH ,G*hzi( cnͳ"\q 3 'Cnd9> 8?>pC|=[@Λ~ -޴j庽k@Uv71<]eUMؓ'7=ƣOa~?w~b"3r;G9PWў<{ӷF?_4~kkܿkkܻ?\DLw ;{;wV}ms~}mkgYfH"u:M}N9?L@ox_{[>D_y$ \n `n]xsơ>K߹YjCϹ> W`<9C2z88ñ['pPqqhD#ddv!NWx7]Z 9.xA)KOK##K85W'zQZYW#4GGg Ť'-uiiGk8´~dp&Yj]&,fǭ Ug(#ʴBrV5N)mZeg2.O(-+^4mъcCVh&εʐAirJ 3 7%Z+$7Ԩ:M]-״HL^ـhViJ&-qjNQ!JIkzHKJdh)Q)yx9Odc.Nr1k)ZȐZ%OX¹T%M&h 鄥`*NMbfdh(3ƣZ 1 _$B4o8dC4~?фʫ5(^+fXq{Fr,<ǻ׮}.ns 'о+o Qap3Î]i݇Yi_fL|gb;Ndf2_UMM6PW!=B6t`v2nֽ4%<]c ju5ԓW'O/=4%Z-~V|RLnfR3>U+RK:YZz&D|"lee)qf^7Ws++jR̴Qlq2](EJ:-Z-NMVY3r!)糴i3R6NKBŬN$i|Mh:heSx#6McS:$G fSLm8ud'T&'O,q؄86u Ao$#q"h3>F VԊ;8:B10b>sK48F<W Ӝa!#gm>van2rYN'MqNÊa$Ji9,fSdHm63Mr4AE/ +VN 24>6`= +jk˵iк^O1'C@G_}> owo׷wN {t Uɳ+@MO.AOؽщ==yכwsmk珱i[C$|@uv.7pSK?ZxN05q`"$|ِ2'‹*p FF29(ȉ;;ʎO5IPɸ#$ y +Md @:m'940 0]0 h0&xA8ii@Dr.DZPR`*/V +3﷪7VR|mX_*6˙V[-XkmRkKD(h/R$,4%jn2c%\ӒXV1_*6-Qf EsBI'6_E٩J1k&R.d"|617m&0^҆y#R r)Z B3$-O MMLSp*oĦ\il*Qhl*6IҢ tǸN ğ4<2n405'N|a"荄|$NMyH\p82ZqGGhCc8FL>g5rziLj|a;l4d ؇.MS\.+).=pX9vT) 8G%l,IfFIY&HHE C(?&?_ga::c ́{0td D|N xPxdNP%*alr +& J&4J^4P'"N'MzC 0 51 0ᘁ&38@i1l}j3Ao^M|~3?O̝RõjzL>T.bsɍZʩ +j%ZjsI'>RnH'$ $ޓndKB֓W:'Rl%Z-"2P]Q+ *bF p)OJBYP1J%Ԏr)MƵ.:.iDKDo2=則&,d g$'¸Aȧղ$x~q^Kq9XN$ .IClF,6% g$ +"[,zX e$cY= +?0zǺ imU'Yf3<RCJh + \DF^e@:`m˗y`}Z!+>,+jw.27K I^߆.{v[^ ԓסGHtyz;ێgwʓ+Г hГfq+$Y/iy +<g4Cp,H6=v +9|-^ÿ;륋 , p,wS4@en<9au4bNs`hitX8|_׵1 McNPk9|/RHFIhHXhˈ{r&d2sd2LA~51 +O !59g:KQ4MxAŃdk81ӪenxoӣctRm^>>(lM*'g[8ǵj׉!RJdTЪfE F"?3Z#>=ijLeTCF#<֕oje7 Ez. +)=6#5@j^֓lJo[&%U=%Y|B*jr^U*R^VԢJyRl%Z-"2P]Q+ *bF p)OJBYP1J%Ԏr)MƵ.:.iDKDo2=則&,d g$'¸Aȧղ$x~q^Kq9XN$ .IClF,6% g$ +"[,zX e$cY2FEuڪ:OC2'.C;a>( XCeOO*- } 74|Z.W! w8߱;Y}oʫEʶ};v-7/n#xv T^l{Hڷs˓+`-]{xzܿ `mǴ l\da 8a YX@*37N\`oX`B+pI_;`T f"'MYnq}M8Lls҇_=9:Ј&L&dڃd2L25 +kcBjrt^vQx3Y8{mr!^kU͌M4G&SґfbY̍6f'::6pbfpt?21T>>=T99PTpt\tdA*Mh 㢆V~psN +b452ZK!#ɑARM ʎT2"=V{RɌH鑚Fc 5\/IjdkLJ4zJPTԬlSU +hE`KZ)*%EdWrUČ)2R9ܳ*b&`!-J R R0k2 ]t\ӈnŗ"dT{"=LYȈ; +qE#HOrqu9>OëexI8^&ٽn-r걺I\ioٌXlV+KH='1Ȏ a8ۉ8?403&\}w3ҁܻԙop|s +/ ؋9imp:{z@1^yanoYֱ9v?&kn+ +8A'@7FP`8!El9%"+r&kD9d2ނ@L&d:}8ө_uMf!-Abΰ-0oBgn<y|xx F4#TH%'m=4 h \P_75܁G[ɜ~VpX.5hqtyò{n#6Ųl.ӈpD.&:vn6U`E" +,F,c;:es#nx@/If Nޝ2z#/^zz~3v=K;w^Cϋmqz{I^|E$Ϸ@ӗMm}xmu]}O7zKOq]^[=TïS#'ǏAJxY <6yzfbuomQ8#+0o^2Ҽxqg0o<b`~6On{<0y+;,m\Ẅ4a /܃Hs_^7:mgYBi3w9scx}46y``n-\><1/D9 G8p`A$Lsﴂj"6f l6ml fFt{p +.Ȟw )<mhjHat*e( +S#zƪk<<},cv_g na _xdGv68 336Ӂe 7:#=̊&#3*OQEQ@((0TWf KN:0qy7Ψbh(M +d*Xɧ//bFΈ+9RtQI\(g%#|Im,27I-8 N)RtܔpeRiRRPXOՕ&B3Qr-JyQR8BT.%Uj,!SHK1NO) +?RDGiMùT&58)Zro +T\ yQoJ3*Id'!b`,źxn  +Z4bX;ψA? %%Hܡ!+8Ss4}oFIgOC)pLjq9 :I>IJKrԘ[CMfl$jm`XHFb677L$"3Fh0^ ~Z9t$V51+a[8q1Kt*,Am <~AނrmЕ~kv=HA~[ 5o7&R)夺/w拍ӆ>gzk8Cȫyy3/}$;nN!gw-'> jHatdo=l $0}U}#^w3X'šAM߀H8nv5c$~MVWOW%9jW!Yz{jfݦcb6n6cY,$U`1ћM&okpdMF#Io4x^Eyu:-kHQ{A填bf90xtCȳ~=d;*h_?CB( u??B6هn No7m_?TՓӆ_l)B >guPxz^? x:}ew;<-;IPSlD o@BvW*\W'Zadx.[9_ _{ ɶ׸.vzZ5vsWp~{,s7VMƭ?ʿç89 @%4[V̄q(1.RKp*(EQEujP݌Qccr 001SQG\9/g.O,b^\).'U&K\pa:]H1B9K͕R627I-8=Ff )r~pnJS2)4)\)(R,Ju(s()XWc|RKp** dO''tOdb#\ +KFICلm .xI(ɺm벝6>u:ӧ['%NıuKv'8szG"%ͧ!UDTcQX* 9R"+mB[OȹkeX|:Ri + IB:'Oa\cl&ԂMTwʟ0_o,*MDpP-lcW4 #(!?W9>WfxOzHGͭf]Zlqxis9$ީ9v#VFb"^j$R h=8;n {y%y)5zQ^SP'yڥ{Pӳ#Nw~5=*{=-ytK<]<ٝntMp[Pk#۽hh +8\Еe+yUXo[.%dR%6Q./4޸j_"zvTpjk-` + vў[QCK-ǿ>o` @< mDΊ[ ׀d2L@d2ttQєb~Qkem쩨?{QNWg&Ftss' + xCX,jNf땹A-yIinj+K +s{3(5HQ:I85G䨦 kB穡jH[vbɦZ?)3>Cc͊`'H )5PHHJ/٬i""g K4J$A5k +j)OՊ +R#+r>V*EJH_6M)Z̧#z +),zB%;&{HLoB-H%xx Ƣ2?=QMD F "+:},Rt΢we0C܇:sP~) wwHͦDԻm +eKaѿ]^#^S +/WAWsP܍x~zvگ.ԙw!(;Еw('߂y|[-xܦ } @я_C=P&0E?>׻Pk~WݿFڹtP +0E[@iEio4^bh+Xo[X2 ֖eJ>U} 6QmEh%)1%Z͋w}6DP"Zׯupe/`??|0 Dp㳢[ ׀d2L@d2ttQ1XaN=Gf&FjSav^:35MFTC87,|2=RR⼤070;)?3 gF +$r'pr +ym#mى~kdSR!ٱfEKftTTjz[jKBzV"*dwT,(X}T++ī<)V+*īJB{l[2rn+"}49kh1r)dRN SXo0X8!2 `GS '18D5y#$T !#X(h H&gȏU|j^+SpQsٽnD\$t\w*q݈nXcm{K?i,[>cnk:֘jWk[Ϋ5f6&\m׷VX4чG/:1 pSɁ_bRȒk9Vʒ"X>7T14XI9#)U)KJj R嵂#8)4!KL2Gr R/z3/I\IddHI!`+':د KB5 +J|>U4Js/ V:C7 {$]:>=G^ۧv\N=cqcv[<.Itk . +t8HNTIHEArF1ñ,f+ zvg6'=a?PyA~i NoҢ~}D``~y֧j~ppw1p=nퟷ7wұsc8^]߃kh߼ +{^\<ҳuh7=iх<<p3pvϴgk=Wsoe2تlsMF_\eX +B g< ܁c&G4"nBVP<#֏)qC`h`F95l6AR6f&PïCdQi7C#Z q H8*Cȟ DG&<=UrirJL1{ZQef+suj]vʲbYZJ%xb3h#'R9 +;:gLZ/+=}t:N*ɿ:N&PϓÉ}ƭ׀z}a)˲LoREHD|x}XqjUZoUOvŭfak!)6Iœ + nOnNl4' +o-W;J</=M$u^rn'Av5f݆I&ͦE[$MIZ,ZddG fd4  jx#q'gX {`^i,C=`z8V4"x_RRaR0g^/O.Ofkܾw_Gwfl)V~=[ܚϷ'-=[?|zP̀oLg>}2[^54S| B +_SI!MT)=<L ܻ}oZҞ +'tv/LS݁s}}~;=¯{m:]^d+o_@%8pITL-R<3+>iŨZ!  xN61Lp~`}+0 bqp'%8r;b \bNvftzQ:]VSܙn;v}76œCt]<)iH +'6]MHQ%]yy$(7Wr˲9Q.INv +Z#5YHFֽjV%WZ +Y,ܬIwe2Nji<27\Ⱥߛ/RBU+ͪx")OM^/rT-FeH$B泤H%O,fJP1\")*eӤ`1" +b*Ϫ +|:I +R ʰ=lB'IHtx]ъ:/4BySdǟ>h܂-&|T HуEPwMݫj+ e9_Bl]l΁ +6f(wɛ1ܟ)۹l ܿw`"^as\6/+_5mn2ב$"TsMVS'5v IRTr%锈=!q-&[e|HKQ2VMDCPQ*B +zɓh H rGX(@rG\}$sMq47CM R`,gV]ǩmyu\lr4x!['9|bvoKI唲u:Z)Y+bsIZTQcc۬dZl h3Xf%zDb-<Hd4FA5r=H40$C+)ZU!J{L=5[/oTAm3:t4~!1T_vZ9>|~>>~uowdz_7k_Zޗʶ˶ȴNw$ΌtOwp>~vt015֟<7ރe;cSّl䙑2SX&19(~r;1T&z|PVdbRdO$6>ЉucchH/ӤHH]%C=킖v熲Rm@Hk϶ eRX~cEtsIR;-jOH5gd5eZ9qRcgJNLБ$E%}!WNۓ/ba5ZƗ%cED4T8"7< =,wω$w4,QG +6r8j5}&WPF,Gιz'fֻx\N))Z_ǩjIp؜":dKH569&͊HUfV1lV7L$3 +pd`MF#Io4X^/ѳ\ IJhqtU+oHROkִpv13,pOu=C"OH~@ Qa >ΣP}ܩt!HJo}YrUoRnUv8(<^Wk^crTyqO+= <~VTa eH(7Aѓe +GTѣ%PTy=-Q,JHI~kwMݫ]xWo +"k!ePPiAQ9u Uxs7 4۞axF؛۝5@ni;sx ky :<7g,zK6|a+X6 ! :ޔc,DCh@C#őh4P7k4FsP#QFRHP] 4cRtnoJDّg~=q}$tFB .!+UI9/_l6`^{{{y]޿-ݒF&dk}N7*j +F^:]6|k2\Ej Fb{Z7Zu&k5TζɟY۵z)wzi$Z"ErB*,euD4#Jh{A!&2 R0 +&t%DZذXţ׉.x0 B,P䍪Fp`L1O +Q75x8F=nC,6El.t8HW]z$avMbZ^?IbL<ZeRNC:PP<_b/xO93t'y{.X^O]w{w\8X{}yg ˷{t_e{|u+34_f{|qwA&q|1|(7!곏9C|xxz]ouyd0w{WȄghCφmGع2C{+34;Wع2CαMT/C&Bm_څ{v4D́,`| g~ +d:z9ՍΫ.TGн qtN'vt3م؁QC=S:LІμ :`0 fh0 N40dL)}S!ҹ~ł|i.P94fo6ڹƩYl{ W̹v&fY}V;"ZԚt Mզ2_%m4!,7ue[: +Iu18SVd}X* |J7kCIN&3GL5Dy>Q/׊D*hL5U +")VU&(bel$ĊJ `>Y4jA%"gUL ьNBb*($X +ILV 5k,9ņOĢ/(NDtyøIb$oTm4 cZИ.wЏ5|ZU8Ǽ^ϘO\Q-wģ1q#}fy\.ݭfs9,VA: +#,dlZժlXz$l&f3? j_eRNӂ&PP.^Ձ_܃S ]~6rh?=G2~|(X ~PaA6@CpA`e ݷhXC=@ʆw+|uPaAm@/nc+Mx7+|`eyzO3OX9CwQ P (Xِށۀ f]l0{P@ʺxulovv-\½M\TwmT]{[^pw+nm.__p9 ~?p3+BG]'iV > Q 0AG `0 }fh0 N40dL)}S qy`apNdޯwGfIB*gZ`' keZ/,$d=֔6.<|o~3;nM:7Ÿd*V6̊f̘Ł ,85w2$]0rLtGG:N?X+<'&r +c"gȓDñ߀_ˀԴ4U7w wj~4XjVU$k U'UŋӒBɸBA)%B)`"Rhu +B V7ג Z,sbu5$_v_HM:(_}u%[WUAVrTBeΪ`%ʀ*G_~|Z!*^Y}nUK8if(0۩`q9$NLUn`Vfhf3`Q&d4sg$I0 $ I4AE5(jx/2>/Dۯ@^Ko +>(Z{tP/=mPBlW!:JVR:[HLҗIԟLl֗5z +tS}OJU]wǁv'>iSi\WH'X|T&Y=%V/NK"J +% +Y TcB8Rhu +B V7ג Z,sbu5$_v_HM:(_}u%[WUAVrTBeΪ`%ʀ*G_~|Z!*^Y}nUK8if(0۩`q9$NLUn`Vfhf3`Q&d4sg$I0 $ I4AE5(jxX{`Wxa饗^p}+,> +Sv׍Y۫/WֻzDY^(WG +/P2GSg4= eNFEy| Jfy=Q*u>۵3b!MW֯PQ.Cy]B +3PB +PSY477:jJ]Y 6;ml/x6;d!3g<̼NGIAV!i'wvl[#c|$$©4WDr77Jյ5ɲ6rܕmq85ͮZ.75Ȳ5skrndsYuXRf]Q˩2Րlf׈jmV*e2,f9zلI:Tl4t&1`(GcI1OWk$-HV+h59j H4VTjUU*ߝJ)@Oɰ =?P_Nt@>eЋc@/OHixǪ3^Q$8 U!>WwpjO|sQ茯 +!jNmIl +/7 +!bcd>{Ctn~C4<(T >I}t/1iiai:Sxx2Le{g}C[ N׭DXz6D8)0 N LMDK2QHQĐT&biS$6e"ޑT;JakSxlkѲ1O:ݑjOF8]Җ )j6_8:9-nY͑.,7PH8%CWa !w))|YAV!i'wvl[#c|$$©4WDr77Jյ5ɲ6rܕmq85ͮZ.75Ȳ5skrndsYuXRf]Q˩2Րlf׈jmV*e2,f9zلI:Tl4t&1`(GcI1OWk$-HV+h59j H4VTjUU*+8} +nx$ dx&L=?`/':>_21'c$P4cGT@ +au:a}j}+c梶J})*a/7Be}g.ɇ7g/'.C +gT>.NW +u\w or\{H]J!Y{p!/# -yBD,y[+l{Cm`zk4V|-.`gA8\4<{ݡxn Zؙa-y'xMC T?.&Q( +B +B>Ѡf5/f0FhRsS_'X2p{"5Mrs㉮ɡj8vdgqR`&#+kzH a,OuN IEHk"A>,69KbI_&-IHIYL-&\;5칉 xH3mKn[-Yu'6XC*oJUJlc_.<KHczm`JMW7c43DUZ"LVUEJXn7bmB\cry%xw{!v>qv)T\XCtK吱u;HVGRަfCHvfL69ba1Xf`$(F2 +fd0J`PA-F [~]e1@o7zP@`7^=V{HM-/^<~A +0@u>r~ hxQg| z]GonZ[h͙gڳZ5=`/>nGm<h͙'xkZosf26ghaG*<zN! D s`ۜ{ zm7rpls.}އ?/t63a#EpCEn>Ox &"ǵXl v|ά` ` 2s܆v&LL"ma{ld2 L&t0C^۰y6(yhSyQ~ |D@ ~_e(O/.^O,g'+sK͏G'f4xjad'aRJiyV<-k'4#kT<>-gE8%i4HcGU GOd&j:M~vF͌oLVfRvj9ڬtHOUEh' t5]coN#2ԤzYHIŔTQkԊzl Iz@JR~'r*idY`>K 24=|U2H1G}|FW8gpP(ۛ3dTOƵ} ]޸,-*#%{ +&FH8 pd!'y{[~]y^fUFt v^>ڤmޅ +}D=8POwaxwQ}{ 77ɳp 훯Ž=|/>ݛW'[Xdn;чK;rqo\عƽs{sέ\ps/nen^E_< PxX7~fvb>̋8p`ZlXmcYxxpm S&o!4_/}-x^dj7&j&d2LÇ1j{iY4D`1H~ofW~6Ε3#02zzyyfyqziDQcSsaJ_l ZىIs*Y2.i@*jҌdRiqV*Q4SFT8vT%pdd]Ovng'j鱪hek6\!eJǑ^U䌦9H`qIWX 5FjY;R)YMMZU4XLIFW @ dM-Q-w"^)HFA5泤@.CSʧYh)O}h!gtsx&K + )Y0Jv+N%Hd\+ؗbb=2_'k"k0 gaMRxbᐷG iܑ`@r2O +{u|*NCrTZf$@ Pk3+w@X]";Bx;u{zuW95^gj݆2Bxz E܄ <`Y=4c9`Z"Ek/:8P 8/)'p?K* 'h޸`Oga3qμ}ELIKW;OeDLY*ܓģ9MݝQ~;KAW\#ϗnҝbD؛yS0͓Ѽ 1O<R35tD$x"!+ZE"u 6Lk 4׆A2jiEM>^ZVj6J4{d9y _PϫTS'XZ4%+rԋUֹjT8n,W-Q%e9r,NU;*i֪J +).\ivfS٭V&Y-%FL3X8dM'eF9`hzt^x/SX(UvN ZiVEk8nՋiK \apsō5|r ZE*[ˌ| Pk3W%6w[|GEo"砬^UrNwlVPѳPVOo< %y|C,GA%TՃYRb%CKPjH쪥sʲQPl}liΔf~Zٗ.{J3wR[#̝`H/3ɞp2sn6 +8l: j;a !X0 ,2@" I0tdJcƑ;; . wh4]ƢFh4{)E;q[ߕ!͍,b2#lf,第t#dh:ut"dODO3#p_hoXOxw{c#sjfhѩ"t.ZdbÇґtxl8'ED6_$tp@pt_RN@"8ڗTOЂ}Cq9,I f]yy2𙒖vhKjMT'IGs;vK'#DG/;R7oba'mybx$Fcg4HkHECZC,WR *D"ZmVh ed&Dsr|ܭ>mir65VW孯˩滧N4i$sK2WNes(qJNY6W5ZJZSEsXY%bvTҬURRG]n#4Sͦ[4MZ,Jf +L9$qD38NrX X=t9_*PXO+Ҫh[,~Ze?YO+ nYNy[(Smku6aK!l,.;Bx;s{x=eꮲsj! ϕͬ;*zv -(#,& z3Xv +5(3WWk!odX`a"`,S=yrgKp4?cN8[څHbh@0f`'\*sij.sCO>X(CH>|q4b`;1P~T͓Iz$Gp^UpH+p$[Vry|D=xPHѳE8.$ʓ47'p,S/oWe;UCoAU>?($i&u6nϐ~:UgͯluVffs4 X=+?UO.:~o{[|%l? xLk?6;]`2|Ѓ2$ 1hD PezeUrTT?T*J:y(ՉU5# 29? nA359;=&r gz](DLJ]dM\?).s8b +ዣ]y׻Ç=W̒"CAx?'##ːg93`:42P +ERip>⩤PO_,${$@a_w\/_Hl{:ӛq*ۅWSޓ$yBZR{w +KD|Tb\Ka^&.ҵǝ 1T"JƃT4DjMF$WB5FK,'5wE oKgGjJE@cNjuxHA!@{r:(ghw=Z8UnnԺ+(9If$dmtؕ4,zIfGNVd%*6V\gLV1"`1 I_c6+YL&,3JFĚx +\#X^Ou:1VJa,+U#iX!ьF}A$&΁j!W[azG~١o[vBo3{ Jmev4[>B͓8#Yo6X_^ñzAd"^AuVJpZpF_*!E/Jr3brX !(zD)zUyʳE +g$P$?xOyT)7=yJPntg۠H~v63}  h3yx Pׯ+۸=֯#EkWAx:WHxYP$?x+3,x +y}PV~oYb, +޿gJL .lܼ _x<hAEB.Q`ܥX`8_ٯ׮5[r$ IT. *Tߜ +=Λ㭢UZ[* xlmmj==d=AAŞo͞?lZ{1W!wt:; "NN |@H{74=H ?P$ FܑHv\̾W.ƏM:-$ޟ)bR66;*@r!:W*Df 2SCbd;vX!ztB!vtiFhљzD<&L4U)MH<< +MgX#)Zh|Fp'0ZHh>8Kl98@~ +dw$l] ` Ҕd{(^J)V*[HW6IEd?3uc4J3 D,D FU@G<Bh)ThziZ[55n7ԣ"܁.Ny:i^·S]vooj&sg[]ΎV2𞗆=O8ەm7ݢfe4*.5EsV[N[Kt,.]irجf[,FB3Y`njI +Sޣ&f0j`G4HR= "xHMkBЇ>4 _T-ǫrC/V{"zs9D*Bųuu~W^^Z~_Tuwhz3hyyǻmOo@&-%uړ%v- =~FO_xxuǯx1Z~R;R!g - 7 ﯳqR?9qMg\H-w?-kjի|/\a[m`ݹJ\Kl~j7*y٭ZKe[RC\@t^sFX>kp 8dg83a,^`I^`?_?p 6OM nv<"f#'#pq ⳸D6x3BĹѸptt:N8ݾ^Ohiy?#(p<Єo^n-çsbjOUbeSBr\H,⳵NNo|O)qBF'8>W;EN(Ďh# +љqMX.ZFǷFiᩃ +Mil8IB5cd=Bv/$\b-}XBePE;XpbK2=4%{(A{(MG+rI-]8(dRtߟ:ӱ~?`X֙*t$b +J?與4@( 1ł +m@/5CkuyC&Mz4y];)o_W'PstAvNmUdlJV\Ox>gMsy5.hVqY.tZ\ +ffq9jfVOfl4je1,ɪd,sSMT(5L4hTC=AIi(*APRv 5?1}Cv|y1n8_ErC =9k:xac%^ V x +X^ALV Co֯JRRoy?s}lg-5 lg~5 xx42ǯ@+{e 5-]ypvhw_V]ssdp5@+ۮ)h`e5kV7V"+He%u^[ITS]/W!u^kCyV6| x>/9#,5cvg&L ,37qK=nGpW[`J+,\•}oP!@ &aV`$LޓDF x/8(gd)q?3 + t:Nt]FF _ {D4g EQ6kp&Z$˥#rEu\B:;r8?tbz8up!3[*戙੊BL!z\-'Kgޞ8N.BȽӹ߁*EpGkvj_qaDggHDEԹ8qv=ݹpӉ@2C>u_wB΅g*"Ģ E<0:9d>e܉cRp~RJc"t0?bg&v +̌&IZ2⾩D=871T;>EGъlL\DHG+s IaJr &xdh *(?r$g6.JD?ƢH2:#bI} .@r9 EQG%+I27?.&Ds5`~2LʏM#$OI*X.ZeD8Vd+e"$B=B_k8M +{0PJk0C%C!VF#9qT"(H$"0eEq֑dH/H8bR}=HDcސSOOﮋt=.R u]~,]N7PS;#uv>YN;w{{xVGOwY?u˲ػKV u*,=bݝRv)]&a2vXI2Cbn,$UE`i1ѷMk1њF$5 0D2^#1:V2 Cr5ZCC(JLZBR +?]RJ)jV ~y|;^>7O(wH^PWmd/vmu+ e 0/‘aB}8T?m~,Aߕj $ᬙ;T?o&_߆}B-s|4MԐ/n@C]o&O>!'¾ x ڗ> غGoa}.7%96@ wP.6fs  +p6V@jɊZpS+8_QajQae + +ИN~{]E +6kl^1Ý4׸LVv>W-ұqvj`R@ѠSQÀ^3u #(@()4 +~/4( +ŻA +BP=*őF"Ty3 ~=qrJj⢜{xv<?q,]ɝ=16lt>\ /LgNNe2ǥ$Hpn&vv<Oؙ]3IzP]871T;>EGъlL\DHG+s IaJr &xdh *(?r$g6.JD?ƢH2:1֑ %X,칉+e}ex[jyj&3 k x//@H`ɟ6%Kn ǩSt]Iz&"l L$GbBMHHةHxF$k,#٢!5d L%Y¾!f +z{e x\$d3\^'ͱWNӻ:]6N:VK38O3kIk3HȦ9EϦ4I:QS *NKRl6NңU05IQZJ\$S*H==$J^g$G.'I2D&rK%I$IBaH.Bl +4_|(~&s1my}]-[@G6?ƕu+|ڽKݱ~}ؙެ Y^`ZZBsu漠z3,;uxpoA UUBX:\-mYl^ϩ?T?LF!ᵰ*0@R%ϡAx1x<4Y>DR@iD D"H"#Xl$.SΆSc;'F9>X8}:U)%gۓS}GiSM'&KlMff1%f+DCb&ur>.Gz9fy] C|jHf6)RBlb7ᖢCyRd[n׵|H9Jdl K +w gKݳ^݇C} y#E™j?P$%X\cDk#d}iI޾,S!GU3,C>KsʝOH\Q^n`Br _l[VbK!s]/p!>7?þy'+2t͏+l~n~ۅ໻5~mm@m6tWvȗ7#_6C._={ ԶO6? ظW{EhڇYZ. а @ͅ,j jk%5z9 X9+32XV/a^3p%9\;/Kp9 gxّ(`@j V")>D; @2 +Ux߃x<wxxه!@(#o+Ѕ-}D*؊#`qR.xPnz(cCS\7qRH=YF⧏WMV%&KlMff3LJ)>3ѐI-ybK^Cý$jj!>5V$Ŏ 3PGGMX!61pKщ<)2~-Z>|k%26%G˻F3\åY/CCtá`o<ߑ"L5W(A,P.pl|W2 ޾4$o_T]SHbi!ܹ 'b$W.%m"P tXa,DЙHD8؊ZlTO>-Y#AN0D^%kzhǽWE2N6u{e84n3esZne44aiٙ63ljlXlJSu:QϠ2$^˦aS4j.=Z +SZ$UL2sG_F[|ɇ,_GlK >0 }Ӿfq YB8B0_,G mHrz3c୚oGoGzPLJt&Ęy"\#@z1FIFFJMM CmKF51_/z| Л@ZFq.c+vkFDHkjyo{7iv|q- g׹˼s;-8?OfvǏ7 }CIpJ*ɣPvǃۅ$ݿrOڷۅ>e(7YXVvκs,Nfajw,N#y(sy EonB7!N͌3y4|y3~ [_&7Y-W|)Xϵ{>Λ*yAp0Z `,l_c(Y_ܨ e3e JR} +ZRT*C47GU Ci(WʤD']ɓ#'Щ\gOCݜtt4?};PwT.ÞLGiv4 z0%%tdC& ء^vRp@P@=o .ۣ??I'(kt&$o_&LL'\p}  B=|_QKW;)Z;$dX<,jN' M(7T\-D"Eƶ0 +$AW"ƺ!I82|b 3 +G"~/v}R}VR*b=Aw &L{k|nI/4fY՞FNѵ]Ru)V ɩ߮:Nj%ٝ5X#␃9նz{ZTVSU)fuTJTWp*DU${nV X*6&V&fYmV f%,%zL2XfId43Pk$=c4H:^/u:)ZHH4Ւ4ZZ ])i!qAbr8QFL,˅ЫǍ} zF>@2 qޭ`4zЛ{g⭯jJ﷾d^P +sZOJ>r^܅]rIn狻l <=E9( ^f-Vt!ODHѓP$߃x?ބ- EOf( (wHGסDHkH\EQxD_E=} [@]W/"[ %eHנŝu‡BAZFA”\-LBD8ś'!ox3L<<_t{Oiaqn!yV 3c ̞/L`<ק8o,o\Wycx,[_R0OE#\]3•I7\c_߿+1`YJӠ}=h_ 3RTT*JP=U): &nbaoW@gd{t3PWgٌot 9j?s3qpWxt +ebgұϏtFOw '2?KsڎɣtD.n'ecу))#5v@)8/{drl[`wEp-Q %8׹7IG7:<ܸ=a_jCkwGij!!vcmZ2I,d9 64ȒRqDX4(Du%CRC\q6eĵXPe}HP<2ΰCyJꂾVEG6n!ZI~Os-=&,ȩr7@nq9Ū$U699UX_)wUpcC$kDrp?V`s8Hj*RYMUQ)R])3WEJZY.`HrX^fbY-d(Xf3`қM&%:Hbxb:6Xl&Ȃ͠hQ0!FJg1]0g ++~INPGBe  ]M=QԤ`I +! >Ub,(~RL3 ;'(7[E9<1χCLaT'>3կ^ڏOSMrf&&BGSGӴN:/'xpoDgF 7!OHǿ25J L#єa!o`7mw@olF~]ž~{8Bu{v͵:Kr E(-7 t%w;"h8@rF:)ͽLzB6RCWԅ睁V= aOoFP^ZTQ^7O +x(5~w $մz>.w|-$TinRTp55Z* *u*oU5֨ʕFZ٫5,*s$ki5UZ +bGrEFVaeɮ*ۋ+(ERRaYVVDXQLKxŅ$f-,(l$0FV*ddV-j1[$IoF%9YT &7_KH_He,c1dOG]~Co W2bB ZFֺyʹc> +}`e_ +˾K(˶ we {afw+;i<J'e [Rg?/s˲&ͯ7:MCiT5`e΃m\ e`e%`edm"O//Ku~^, ,չ=0Ty`eY?  gdrw)j>wsƷ%0m#̞k+hl dI(f@SdJp'Vd(`Ɖ b1F_3& j36 io0.m0 .#v5G&Sʂ')hBbnN&$IABb7;Z᳕)ALgEJ*+੉GO<413 LNqxWUǧ)&{&BGSGӴN:/'xpoDgF c"0=LRHbm|4ebu|7M;$yG(w_竾gP*8RJRT :8cH}sx tD:r~;|n$9?=½]Q"'QƇENu"c[§ +,9q,)'|hB&G s$A +$EބH2G C恾-iEM(cmE@w+ߗzS1KpgE_V4ۓ$H\^AbȖx5Ehma)wgkHFÞd,Dr'Z) -#¢fR](o*E>BdhKo"?.|?/ws!_@](o>=(_žjfwо6@ŧ!_ֹ׃-(G7a xx26J(ס>"!E>u Q%@p* QV@ \"!%SKw0-NAI&O3 lOMfMe7wE pz7>0-0;e5037/7)HG"hAL pYs MBeX-hWċ3R9Lǟf*#I s*M JRFuqǦ4:s@#FjCLY/7M:FƼEyAg@~CWz,K,]O'KHO~\X<׷wKg{ Q=7۰'4o<2o(_}R,ǰ!$ QV@IV. Q/Zihq +J0l~ +eLTi< o4x?{W޷{fOh`uZ˗Yk?<6=Ȯ2Wpb0 +tBGrG >&Q#P|>Q7J V@_KcwFJ4ӺG%(8xc:"XnӚDvRH263Jqah3 `AZs@%ڛhPZC[jF-أ8>\FiSC>AM z)+*>/Rs9IReQuɲzpYGz*wvvY[#eqdlj*EfaU2Tcu3_P^Zm2VJ+˥, +KTL,0K(ҕe&l,%MR%R:cbA1I[b0)IZMQ늊H>E+Ii$V5jNr9n+**OIbr ImV+RJ)\cjz b<2o1oXsެlk* `A9Ƌ{ x~gw`!xֳ&20-B֯KZDY,@mE~@MA(Ž5_ xt +e6_$wRPoVwzpvW( P;@9~ @p x(cma4Y<zgYUm9 Lz\K]=w,M YXe`q, U\<{fOxl h@LZ `4ĥPclQo.&E㳟lyP({C +BP?b_GBi$\ P-ǩ! +Z5[oЁ`hwl`ib(4O&]Xp,<$2:D`j8<LP BC1`^X`| +xtC`_A +=.'p`LF|B%Dm'/pw+e'{Z}}-jx%i]yyƣxOoG<1YwO,LruQiM"WW;)$YV}gřhxKpC4 9 YuMg{OrE(u!V-AYA#SQG rlaW.#4)! &ǕO[MzdY=#Y=M^]zT8ljeWW LU"0*ek*Bº/(/fhRRILZ&Pn%LRzdʌ2`6R)DVQi-1$tuEE$^ጤዴZZHZyNJ $i16RJ)!x¢Wgeb^g^?0oxvPTYge^S}VBUx//Ha_xqo!Yžzvgw=]X[VeD} voi.hQ~Yӭxs Y?| ;[>'`GO{[3,\g8nh-\>@ ^`ć (5>[0=ApLbdx >0 +b +B{b_c㆏")pPgUXNYFOAܡS6$S#щDX2|r3zj,?1x" =__M\{$=@6@ +<;N+ZUBY\jj[r{' ^Ş3_~sp3@6|l3zb$9~p_x_3ғ@l`H^t"/>> ź(21&3ӡmobRwG'jOڑ(0#Jb.`.A&%]@_O[so[}9@۟{_w|"+o^әbm[cG&1~+͝05$jKD5ZBT4(J H`'maEu!Y6$Q=lRR jR5-ABu$#5yj~Bua +^Be㖪hntIU6y]~" RNPyvX_+U+s**mw +sUUJpTdBIj6{\LT,Ud-/Jdr2]d.m^,eqəEL6&e,ZY 6Eh%,f3l2IQjRd4Jo.3$RX9XF#:!-PSģR}PT{ݿJRi:y<l[2ޙwtL$'SLJ;͵;  ~::9NOf'e'FҨL'dž2OGs(gQ-r$/:b]HX߶Bzv#RJB +5B'[T`GĂC]LiN]@_O[so[}9@۟{_w|"+o^әbm[cG&1~+͝05$jKD5ZBT4(J H`'maEu!Y6$Q=lRR jR5-ABu$#5yj~Bua +^Be㖪hntIU6y]~" RNPyvX_+U+s**mw +sk+k*pqҠyڹ^E*,+*(+9KYK!eKv[`-KYrErf{"S IVb2ZI̢7LRE`7Rz z%:=+դNN+n`JZn@9Zl=٨jPlY}6{Ш\E5nANx,W5TV8fπA QtK^t/.;n<_u< 3 l鞢</|Ho-xG3` @uzO:C/| ^| : +| C>*u˩e<<~ WXU4x>(\u8׹Sqd2܎ZU[-TUZWͨ+aX\S!\]r=ˆ$CidNRCAj8|nQ6/9I6c^ƫwۊkF$E*jMƢZ>64`#X x>Vd4ѪB:!NZ˫2א,E:\WC1ZIƚj*!J3tU&h$L4`1$1GWk$Zӑ4:VHhĨ4jXTTQE W(`v+"9CЩ=Za6cbkClm"!y,_}F{@.@ށ7-@- x^I~]^ +?g(i\2T+ 5B*o!ʓ+P/CI\apF<P*Ͻ/$w@p3(۟BʀxJsQ$,@xk y EB3W2Y0X柛˻[yJ>V>X:x?V..͙jL}F&Q؉LHIbǓtTD:#I^RGv; Jǻ2 7|)1Q'}!G=*k/Hr&"w"p{ ۜ?;B$ I0Gj=p7 b9ui >4Y/CRK!5n)M%PYr;<[͋g|vi/⚬l.{+lkwko5Z{sϭ,- |n l|NujiU7ZIU uBf[(W+P#d!Y ubT5BUBK(}g&L&)ZHҙhZ EcIjcHZ^#itZZшQijI7QE߸(-I@B{Ea$rȱg?+o{zfkC<{c^<*6&!C[ꜗʒx^g`?P׳;{fqn"7zeV_Kjy~Z) R(<ey|THңKPm_Wu Ks<>) ׍KtQ$kV{VΩ +y(g`yra}1٫x,}pgُ +Ϯ5| ]\E\^TYl +`UXUb,lhЫrP^NSnC{e2kB2L&<@2_ +P0 +PノF^G˵Std*trt02;=h<X_GC]Mg٩A?tf*uz2.:5-4B&r3;B']3xkR(GcR'Fc#vfw  E(y_Cv"G&R$m,!qv4aG2lzHRԑ'zhn)LM$_ +dLg?I(d_pFJ:}jzt$@:@$ 'Ĥvj~I6`_+mcm#iP0 ‚Wͫ{ݚiJf?p8&Bx=b^%üYAm$[s&FM>A5^Fk]/:q HUqqՋ򹝤J!E;9=;F*wA^ג,.fg-˚Q(uXk1#Y$V-QbkeTSQ*fru cUX5^RTia\EfRRaYi R"Ho.ft&-1 %&}3i + IS׋Qt:FϥibTڂRaI,hH*ZͧTTB*RG+r#c}\;jxf~{pp~_VW g?-燥| Ń8DB뛰h7 > QOC^\YHp~j~}_]/ !y@p2Kpr7vX̲,zV.R(M[<ȐMӐۓ8_H[ $7K +X`~_Xk>N[Ap kS*9cz: ;^\`VA+Ix@IQT9eH$J$DrP#y1. Лs`|$H[dpWlTGx9p'sKl cXgD?Fۃ!жHzO d#\Vx=ӽ1131mSY'[|CIQwXxL<} M&#HCwgVOT>oj:s:[C$wDL%L8 hO#f>F[K +h{4%ٚC46ߍem i2X8z!A[G +~^T$Uz]1w(QqIe u6RyVvdqv0;kY֌FZÎRg&5U|jA%U\[++rV1ʘ\ O) +r3_)`)73yL|RҖXDҙ +BAE)Ũ :IRZ1*mAIKѰpVh4$FSU*! +R)#ɕ +^d +9K!cP8qI3n<RH!H0 +@h:jMKmmP/kͧ*ֺ'Tֺؐ벷#*obѰ׾^M/{.x'z8~^OoǕ/$p [<.ost oB7 /r=A<yyrM_ϯ_ϣ˷cJoY~]KΧ9EVg '+\32-OHev~b"-N+0,N´.e!뗦Q$2 \Si&)X2U=/Ppc 23HYO(? +X4M9ڌ +҄/% v *@%CT(ZmQ D"HJr*)dN1;@Wp3C]ȉpGg|'cPp}? 2cC1߹6h_?RBYxq4Mc}H/_;֊{'NƼ{Neywn 'EYcQf{$z=OW3O%NtFH4ӛxz" ݝY= &R}wx]XkX+l I1AΎ3p$$'=؏f?p8&Bx=b9l-a7+HѠdkѤڈߋ<,kOPM 9D zB=RU?F{4(BI&ه:t߮kN& ^3r]HczejZ{)O%|)p<r[(rPo-`#*KIy%ErŊrʊr`ȉb"{Q>wz%ʳHyr,W"ks8,]dα۳rVF8lrrf{"- "VCB2Z Eo6H:(B{$d4FANgh:ihy84hInraP:A:KYwf?{Fn^k6 9ƪLn*dP>+{˟ +dPȈ<}zsR2(x2z!E{1 A9KA_J +R~ue9]-{|_QFrʷJJ\OixM\Ť"bE9eEXN9K 0GI[s[(;PV l<\Rv~n\+G5ω9er\.2Y9 n#Y6l9=[ɖeV+!b!R̢7L$E`=Ag2Iz 3JzNihO`x$u@9@_0uC ;_?ȃE }a4^~O'sפqi0 Aww9fAy +,+_7w.Zgm2g|J^.=h^, b;^.@yl|f>wy:ߦN'VIc=Ih$dz zx54ŚO5֮ѭ^e) +R+^LzOl/ݹعXCt54عXCpA3g gd 2!l㜢ԇ4=&%NKMJ͌AnJ/')yՠ=8@@ :8 FC @oD=:p4kZPe@tD+u z<" R [?@jU*J8 }uh xReP p(9t.4x чe:V=P q#PN,r;|pYȱVQȑrŎ JDHĐ~E{$-jHo\{{׭(4m,W3GQh`DG)Q 5Jv4@l&WOjIJTQoXTL!1#AQ_[\wWs$mkHj6~ oK'LbTģد&,vZlMl-6%b66$,/S3/04$^ {BB @2-{[mƒtsJR$iYJko^H [z R[r1Z*L*gv- ^xt,#5v) X֦1  EI%aJ],BIum/RhK3 % +}f5 DKMJj֣&P/r$5TW_pWTH:Ts9QKvkuQ5jU-W%guV)T;Dnbrl$fYZV#xL2M&9d4*1y^)Gxa-p?ޒS£z衇j3={A..Yw9G6#`D/\ދe>%-` +d{E7SmHӋ6AV\Hӳ{rThʅPkaC<Ъ'O+LV.?́ +ZYPU+w3ooRHCuPU+5 +Z+BF2Th i,}*jdKPh њi +Z'BV1Ъ{ZbϝsBV.ς +\hmg@Vs4@p@N39S4y]nĊٓ(sPgN qܫYSڇr ?Nvq(E"v!y0`-`eLɇ`j2YlrX6<'k73oo&y&q7XPoB{t:Mbt[Vbo~,gă@+8!.g6j5kıl 5ZOv/66=ٳcplPD8R><5@E$)J &T>8!$+q`)'I;Ge%W7֗.+ک(wb29COV3M=EbpѢaNR%Ҿ#/"#߷mωIt[H"9 >E^!2C w)C`Oz)\kY',7/Q$-=)-I]i- t& Q@BMIS:Uʑ;┆T,BkԘI HHǢ0.j![p )FpOKx͒@_P3k"yZ%F%͍ QhuqmSl􉫯\+nz$zZuGMkZEvOF%gsHNtԺ(g5檖:Y"\ek19l6N3٬V-FBmyf ΑLl&&o2<#qIV[<@rjQxC=P\=z%3Dzyqlc_=F"_X~[XAj}^.0P_lo=zzG6*t|nU?ބM\e})": i"Ϫ775TBE}y22a@/AE.zxh"*ykZSO61T@MuP@En.uv3fO)թޓN̉q&`n`v p w3,Xf⌄xV<w!.?K"^VÌ=Oʫ1e@:Nm=nK3+P`}oWp-> 9,3OVe,p"V#* ӃgM&GzrpX8o(}tzP")J %^Jß(}pB\I8WRNzwwK9]kK3(o/5]W.9SQberQӭ$g{'vtƷuu(ѝyYm{N"XF͑HN ) + +Jx;Mꥄ{:#Ae)y"oI'Hn!NjJhX3ȟMڵ2xmJұR4bد&4۝t:' $@$@G\ +::;mV"\ꌎ'(:!-i1aO=yA* ܉pPcRHT{g!Ox]q_՜A|eBCʄ(7?M@;ʲx* \;)J;PA-!Yx5pL fy<g<N3Ù\=cM= jj0k`Pc<δYP Z, )P 5`ޣBR#BP(F*Xo +c5w57!eU2i4j- + \^ћH՟Nm;?>;ڟ98ԑmԡ5ə9grIJ JK|sL$iۿە%bFٻs#=-{Fe%GzZtKLJL(]z:vv fHqBl@&6:i\H4k_GZEgӤPo;Td + +u]PgM nj+G(I fZBOJBkkR+ :Sq7ZcYM As)4xTNc2H mq5EKjhHD8(Ae)P$bA?\ѐ rKr}E!S$=MΠxIvSA.G]/mweip +zvEzej6ae $j ZEZ,&k-Xg1 f)FlHd0FoKu:gӊpF9VKhy^rH*NVTM$i1Ņ+(%PJ)Z +(Ю@6K:yv_wc>FGyٲj#Oؿ2^œ{[oww mSrks=)qbuX5T/TWJ +Tח*W"_^/>YX>W.TgP?]*˽P]giȝOʅ(?\rCT7>8ʲx*rI)rN0 +|+CyǡLnM9]7~uV {Ϟ[g$(k"~/"OA49~}eqO +`\`\ t6&(!e&ΜݟLRf2-TZzr)V-xOc!Ϲ~w%GnZ\.%,tLuZ$wFqVi$F̂Y*Ւ*j!l!ª;oOl~-<l!?B 4[aPA?܂2CM(h] 7ӥyr4y,]"/C xH@E{t KP>"qGhP(&RY48 ˩`24G %bѬd/d2vBɶ5{CkHPP*F=@Wg<>;841y0<Зxo"69IF&G-۟}"@_Ãx2v|O[;:ڋyc8(!!a')vx/{p\\B=;0k=ݑÒCѱ<]bѝ#a_/֑#ܓ NB@{PzpJ 4K!4f!.Κv$^\O'pl?Sݒ|.I:bdR _okLa+<,/Bj%4veW35t!\}{L,HmIua^s!8PX0 \-!3 +rE>3#5 ׃576M[+fzߐW/p,^w[O6jq5Ƞ)%aMvlgGġhKK~p`dxۇӱɖcݜ^NOƎ cbGG{5/~t%!9;${ڃKw'&v;XRx|;:K,2SRxdP2#KwB{:r{Rv\hoJNᚆz =5Yӎ!0Ë  'X[/; TG"x:[ x{ڣb6L|EHƮ*t¸6oIѠ-"5k.:jR 2%DpF~RSAHs^"sX`fB2M&)/ǛEF |ш 9t6+iiZ}y|_/3x#ze_.CFzQf=_։^-e`e e~PٞAoJP:ԟEOEOGUws`M$P-1,T +ȉP`P@`]~y )=IK$C߻g JSs#Hu"iN"ͩ>6E,?ƃ ANXV0{L2o8p `jBڃ)C,:ʃ<8Sh8 L{?ׁ~૮x@ˤd/!H 2CNbKm:ByMn6Ci%%u5kQlVUJuC"kMV/VIU2R\AEi\~y"KYXH\ZJL%Vk~IRl-ę + +LEy|b18d0L4zS^7T<7 rAWy^ $4VD8y0"uB -/R-"6ϼcaWS,w1O6'z^- +dqW/n1/@tYw{v#JxAxP*O?m9Kƣ+Y=U0Gf1M@pzSj{mޗfܻD.ܻTzA{_HwΓl}iFYf[g}iFiz_Qsgz}{NI4X?_ a5squ}cxߋ=|F#hb;:a&$Chr" ]</NE R1:p'+O*+@B3 @z,Lѡ\3"NǠk K^TFFh4FQiR".M8cʦSX# &ˡsx#PN[?18}_2Ѻ?hCkd\?어 Bm{{ȮdsgJp<sAh7) `; !$cHQ`VXZc-_nE_l&m۔olP79mIFpNƈpXF <[{Ľ%AK`ܛz:܃}+m4M]?C+MgQ/9{WZA%x$ R<"Ia\,j+br~h&NCg_ xI!BcG +#Hkd|n%ll!=MJ6.UNRUU{4*KШ T z\eeWTD3:\>CNbKm:ByMn6Cد6,vZ@E H,%6^ˎwcDZs^?cɐbYryZ t/)P.[2=JFA}m \~ 22A~ @RVHяxGAn:!&Pȝ`!vd(eB Pʊ;OARVpARF}u 6ԗW"$K)eŝ # C)+,^JYqg C)̃OE.O@RFȻ1ݏ +ARV./ jScs4z7gXKӔ(nÙ;MP<0l3CLtˡɡS2'3'ҽStl߲)Na^׉'>596=M ΦŎgSc{yE#{3'~D(vv ı]L% r:ܿChUuLKjώ%ヤνc%:l *9ؕ'E&F$3'##!G{2EiEcC=ж@JZ$B8)IFpOƤRHH r{|n_yb[ʁ*vXW6{FiCagliia1]}̩9ɢgi?Kg/hY ?QV`1 3k@w0C:SzzR:BP4hFaJA*JRm>jSCYy|U=(*gk_qNX-& 2iutUJG'F{M;I?}|o*v!}/<>6)O+j!%ڶVҺ%!MILB 4{z0&%Gc@O(5I]3?+Ju$z̓1NP@ˀXL?Nj 4F#:#"VhXrFvEB$Og8(Ԫ +zRmsCzG׳vSPٹ^, }UI {Y[XAEv|Ϝ\Q[mWQqn]mǿl^Uy( +c9u}*|g۸l{[xWRhM1B\[A0_T± f)Eo2͔b0 +MtyFɑ1 $mMc륨:IeiSpQZZ4jZ*r3RHb9 N +\$Q$wjr!JSqzЊ^? ze^?Q2+ j[]a)2şwُ2#t!!|`Mxv:5%Ȫ3ل +~,C BzfPV= iB]xxQ 'sy=@ Qo!t uw\?k'!='eiҲx*ICY8@pЎJ?"m. +ca?3{laSܔ7 .JBA0?i%\>_1pW)\G+prj?|0:F#hKHzFZF{ +PK4`JZÂF˂;d(%d2lad[JJJHP')R5Rx0 ?,Y3xs͍߬f5y: ƻG{>w1vpOwd|3?VHcC1NdBdrya^CI#Ё56i}xgDGŴ +Pޝ۳6}S}jzRuj4jzz]M$<-FʎNou5x{;$yz"$Vgz)(&:wXKH97HX#Kq7U5hmF7ZBZZ=Y(Dj +֐*C_Z/75F()eA]~}o +QgN T,kwn\.ŵ^|fMV~5iH/a啗'hy\E\CQ!Uϥ)'ԅz0-S4yy\j}.<KGRjB:ҔZBCkT xFRsT*BTrɕ +B.监rl-4A'a18%qI-ĵZ_e,K+tZbz9%``KwO$Q,h,I>%YR^?x !I|=> fRzs= =?&R> Y]aήlC|bIz>R2YI" g㐾;(ކ=$=Rx 7! |2`:$-f x| 2`;Xb[Țz!Y𲰹+(Ww i{ eldyXqN5 0q=G%071 p 3+YwnUͳ=ߜ,˧_0p,j9hcSc9SaJT2($ +4J"ѧJD"H$|'A +18E$Q ^dT*m 4lڢ{ .E,%ʘUo&x=FZCVmW77T590{АPVmV6IT[HNfTh1f!2U*Rj3֑ R`1*1K] \TPW*2VW5jJRq]U +>5QP]^ʯ*+M(`!]xW^R/sr E\B^VG>(OP|@Oqrrt,I +Q4JKSjj! +uNIR%I)QH +R%W*|d +oFeHdi-&j_lb%XWNI ZףE`=%EԻ'L? 7KLԻ%9,͢4cIT{R=>&2k{~C^=܇x6ԟ>=g!+~+nx>3 42lA~<O!ކ?ќ9کuOM`s$Q%\=]^#!Ph3Sb*LqD*D"haD)qL2tyņro$j;2#}MÑ6pi/;/`st0=7tb 8w5&ed06;<hh:< \#1{+sx{(I,s(Bqxvz>}`w:\wX'ùo'˟4cM=~WO;ם1w[N +; Hݡu +Rv)vmGֳ;'(Ll4lK$ĺOla?l1C2[i^Gr}}g+UђdL7IuV#RRmR sګm| `kHyUmVvFp-rL +hHcª_D)HZRTky񎥮TbMQlIb Jٯ&,ݣmK/ɇ,KF// _nHb3֘tD@>#9*<A1\Dpa.KAp4VX`Ai0 ek%@NeQ?)v}-14'赕tcu0F~^sˎeV0r &yp7'@_fͣlF`h4#22E(3'Xo +QfZ!"\X9Nt:> +TQ&W +=SJU}he Q@x )|@Oi{*HFc޲Wצ]}CMu=0 fe^ÝEvOf_wW=E +vlPx~lǒ~gO'PvM]*ڹW}[H="Wtk*jWu7*wRي);Z|X#lo&mݨVODpm y [ e&}c]i[!FBqkPWO(޸, +jd;ꢦPpnT?uD:N$ H x]V펻:\ㅠ3}\:㟶;佦Ht|S^JQ#]AT&Ex%"$ooRRS_ָ!FS0G)Fi쎆H ]1J}g4-ԵZB+k,HjF-^Αj"fRu[OkUnC~=ު@ISG x)-M+T476Ȫiz\ᚨ *ՋGR'p{=uZRyGWYc +55YxEuUaT㪩kpY]^&sUќeJnRQTQ^^V"(Q(VI.rS%.T(RTYd.dxժdXT5l&<&qj9cL Qf ^xKR2VƹBOF;Ewye|dd^,D/Yѳ' c)zf|јh-~hx~[`r2X> z/A^]РWR?ΧtI`A˿Jzj[Hw7!Gj:2@5РW#{}u4}y%.<9b|~4=σZhЫ,L ztYЀSРWˏd{(u g@~4OZ{SRW;A6hЫ\=Irv$ҥ_㆔rd1 eq.epX\xkoE E>glN0p`,c18`#&\0Z4 /1=qnHb2J ) ~FL"" ~/'1e$q#A_ + + + + + +`U#$ *}FfE6 +&<2PLX~>|W?Ӿ_[Hw7!o\ϟWW!/GQN\|q1>hGs8dkw >w07wdt}UFY?9J7O[wѲ@NzWOtDZ]wMRN ]?cmLp0S\8턓4@{+@mgx@`3 68#03`bx08K8H)0R +p5?NWWX}((((((Xg]x{GD2/!3E, s1`90M,2rx3,3ΦZwhco(9c`pљ3ÝG&LJ"'G;"% |ǑӲCI=w (S~AlZtv ⳴ؾ Jt8%w/gmEfH žmVD&BS#R +ͤYh|SsCذR7e %0:}j"~ng,$l –%HXDE>O^* u}Qgtqʚ۝4 m2 SC9vөJCܛCֆe\g_Ұ1 @rmS]Nh9w:|  Ѣd #bbu G^T.ԶyI5!Ic 6S +46`n͏Cr *nY =REI64WZMN;HԭcXW]FPXfTޒ2G ^l Uz[RVg$V%)HºJ"g*X\ib0q^5c +4TTh.)ӗTPZ)1JL$@[l4M"#Eg2D +Ŵ”4=GORu:tTZ& +XVVTjS*U* +RG"B.'8 Nr\$[)G>?fC_oD??^꘷ S6ݢ-yo*$mQ $՛'5# ;^?u /`@C xO\? .$$wPZކB-ȩonDH/C xy r*ʋ+/./D"d $ɓ @I3XSfp&f? J'COc$w6-LI!9GAGRApmxח ی,n%g2+peKY_5~+'upfN+z}t}tyn->iYOX3ZPJ9X +d8B51 q &P&(8k +|(~)X/!/////oaҒCP#<"}a?4at_#cXd2nU|ΠW:Zg}xbhvWPFjqLwZHVfp_Rx/DkQjۼRܩT0H!^$Y+&dmtS_vrVS,Z.Y[#(w,kqWIRj^ *NI\_M)UJkTVR\]a]rN3U ,E\XR1V8_1XJrR*VB*4ˊS*(-t%&Q-6&JA3 "bZcaJ' +a:I]@cuZm:*Fz,QI*5ˊ)Y*JL#ɕ +E&2\ Oq$I$R]>|dBby΢T3ogqx^݂B幀VٚuRˣ1⭴õ8I~qKӾ+ַ![_̭nH$:H龗ײtesKR!󋐕gY$yrpN I3XSfp&f? J'S'E>F=Ysvʩ[CsGBG\Ҍ|,JZ~9%Ɯwwu&9ν簋qŇfaX3`VO|,Thd8+D4 Kxqd3'GI'@[glyxm4†yzgFQ9{\ky1zn~ k O7`x}!aҀ5HYu](#Of #o (7W &!e'Q' Jۃ˰a_J}ggɠn +k 'c n]n}S!qdyHvvlHE1Sgq>NIyWN`. `WN9fN#&pi\ +a|n7qػjFkwAu,Zk$9Ώ2#WNixe5LYbEVVVVV{J G'*;r;E V"Wwho0th+8>1><dOoўccc{!nёn!ױ##8MyCCCDv#v%prt2ɳ;@qxvtGڳ-U~AvQ06=]q 7vŨ% +vlj%B=Dqnkl Röv[BQNcsn -$dzM$${O; V-[@X7LijwS᭫"$gdv/HFT mRY5sƩYB18{M[uԺ`,&Wd"*8fSER\c+'UW(*7ƣ4S`*W + \.7KJpN_++.Jiy"BRnI^,XS /)'jNϧh tM~^HZ*/CRj9 I:ZCU)$eBL!ǫr,L*FH8 NR% $RD}F6B B ~[8LjQ^, Kr#ļYbxoH*JJբcI$ǟ{7OאָgwxzE>„F|u>_Rt %MX?X?^_?̦ + %}w5C_<<^N +djNUY,|%@2l2{_d癹Y2(۟º$c*sAFn] Z7)udd|9HճvZʻzFvEǧO̜gf+>yJI) :\o}YgS30uZ'0un^/MAbZL)19##da< x5$hrF01s 7^{dY-YYYYYY&+!$"1%@<5b +L +M$X|TႎU:N=;{=wu76 zt{ xmQ?nwbAP_q-5)3xCCCDv AN}` (2׾N)}4kl3==__Mkg@J’!AB]VګVoso[kkmT6AZ[nu9?o2ܛ9|fX}FaFaRHM& $\P/ y<+HMכ[jnjQlﱬ ! dr22(yq|Pg{vuy=<< ˂%("L:"@QC9,'+Q5;`W/CDwLHg0@D~ւ/5~%8y@NoWy/`4.0WD=CQ% (U%@uT@"$KF'DjGkAAAAA }1'F%Dh%H5Q$7kH`ۇ{m북=H=߶k@pG{#Ѿ{6@wHҾkhM}xh爨 ~:؋w, l͔߰vZ ж=2 +lYRTn^M]MepF#CѶnRơ4-V"X{u M\em chF5a;~oU_74X2P<+cXG$@_єē}]Aw;DzQ\07" +`]67IpksD;w:BrD䂔Ʈ@3!;~VŗI}{si"BhI^.kGm{H5>7Uqj +0 +0Pk@%d/n[u(^7gw*ydz8 B'lu >˳}xzO||z?|v&g'=<ۣ <bs|~~uw{q a~.wbOH׶Q#$Gۚ?="k#m y:\{:.)$<.C뤘RlMn'CN1mWGFg{[F#do68 +[-BlFBj谴[Ե4 6ĪS[2L5lo1q/o`U3M*S=_XW˧oTY_ê)DWWQfdikF}m5HUWUF*=KO*+:ISISZ)*mEB!4j5RR QJ=\P"S3i2/Ib U(Yr\JܫhУ;dI>GÿM#ZPSRB)ZTH/HQ1Z+ׁ4(񎒽@|7Qd1%;S@eeeeeeL8qʜ*bϫ*JV.9{;.h1W]&[}SC3}gg6HL>3zg6A +"9ރ;:5?zKZpvJ` ɿojзw2fofLoLP|QVA-"Y=3%uMoy LQ'Gxbމ>!]6Fq{ gsRH$k0)[G03xvoǒDFoؐ$h?9:7kC,Hr&)D,8> 8x`$P6">=tB9>\s{A/#秴G|]byu-!`_g+~Oۅ;#5x$sr7{sCdu)&lohrmGavEHhZH VR}{kf!fsX5sJukS-&csc#E *sC}Ve#j *kX53ӌ,mѨT)*hTQgICe^#i*ijV+EVWh4$FSU*! +R)G+Bd +yYʋeٲTޕKL@eq^;o5-Xwnn_j+kK~a-a};WEWyei/ͽsK~%Yei(ehnw|%g :$];vT!h?\z_{[x4'Wn|2w"Cgο:8?s'$da [X$d#,IPA\7D Z(}Wk+۽s2s$Ās>f/3s Ñ059gN\\g1p#T8p?0F402P T T2|d$ +#B 7)%nr1jl&K;&osDd읱$};SS8S('a':̈sSۓKJtu^ho~{P#^5fLJ{H!fJ $?սD]mm]n6p'O;SH1Gٔx6 ۘ$Ex{0!ySQO&#Ɉ{/Oe]Ǻɵ85ӕfOŃ4hО +z\dKDh1''yl+^Hk< k xq% P~O~>%"8Y <.! ~'=Rda:(um|nuQ춶P 8Zj9f[sS*[EHXcm[-< *T4-Q-dK36fMl6B 558 f몫 4T^SY2LUKSa0*@)3<|C ^ґTZm>J]YI)4|ZjJZ")TJ%\P)rI* +ȤYR!_B|IQ,kbr6ţ5:fy3fuiIe/[V/IKJ{),E@Xe۰<叛Z~uB:Юi ^/3rBeXA~%@EXfXVߝ/ZQO2B POA <8 {%C'fC; r+!n4yz-) %Q!}iKEAyBPQ.J@.J§P]8ć(秳;sHxܚ霳iy}*ʼnG'>ƽC283-S'#p1094=>4 WKD*dDJ⮝r8Ir +$*gM3)D"jG42!,3 $Wȑ\.g>TWn{mZo?9/w[O|rGM/X2Dhߎ^,?ؕM s%‰Ne&3R&omڛ_Ǟ-H/)g?1DYR`lߵ;7 nd; j߱!/A|q>Am#o'Z)mN +ۣlJQ<DmL"q=<'d=q®DswSB$8;HNW=fl&A{+h덳s-(֞duG(֮p{!/'83%Ǚ^ PZ6Rs$@i +=ܖWPcGĽ%v⤰=R}Ay,"l^͞`.cuGKsV=lknVekZkMRuTҸ@esC%e,ui,Y,}]uU7WUk*+tU&Jcc`i* ]5(eFOc(X:\G++#4eFBV P-BTT$J+ +!2>e HRLVD&͒r$,Ib[q%Xbx1*? (3- 籞ߓ2`^<̘է={b=flY']U=+ye^@Q ʟaUyvk!7BO K~'ڛ(*헙|eytyex4?\\nXVߝ/ZQO²z|4N<8IW2D{J2{8wO0iǑ;Qn W +QnX(QX׾(kW[G;O$h@B"$S FI k|/nLsbgwMlc MsvޓyzM=q߽3vttfBZNLІ8Ystv.lΕdؼqIhr ?g!n>,ƬD,yk.,fNa}*/} +V#ݓJ9r PNNNNN䤅?\: +~waId/-dN-@m6zH(pbMz'Fv?=x|{tGB''ƻ;ONDcoj㝦}?mpzyb[?< ϱ.{rul(}tkbYN{|O`}\#{A½Za|xvpPHy_Tp_e<9{bp=ʾű'*Ɵ~@Gr DXwwQ_c_ :(v/gcvZIhg\; ybk8(t17ѺsE +X:|s{[K&!oOB]$XI)u~WԴ2hvNQխM,FɃkQLހ3*[6RE]eMRQ*6V}J h7Qꓔjy5FKmM5KILT]f1JMU$ŵUbj*+֩UhTl2*p^7<(-izcP1IWV\$_Z$*UWg`i J^-tBNZ'tyy(Z*j4(4jU +JZ")TJ\P)rI*2ȤmO[m֛ǒw2Y#APaXyP_{{@yqzCyo(Oa!$vv{s! F}_` $ +[W2ߗ`!x~ o! -Bpd %y|`L9CI6oaP@ lJgrw(g![_wl&hn, r\; Y@pu6y\y9\~&K:9.kJ"8\Rܵ)/)\ RL?N癑IR8wJft\,of`09:PDj@# *L#3'9[&C999999;pY +kd!a<&I@('>i;9|2Nx w`Xxi|k:ܽ^X&x?HuslrJp]jgbS<{t(^vO^BBB-桾@9Ӵ'3QE(=Q1$">c wIJϾg"?Gh5uPl^Rc4 +lθv5866w=pPc +cn%u(Ndt(LC5Iֱ^TrS&RMise0y[XtLݎF1U.{GlqHv5KFhc.X)9,\GiORf[-5J,5&1fSuD*7U TJꪓVU)XrVSP]3hc,+yRg(%B$]YqP~iBVa&^A)2 +(y@ i :Qj}>+奣jIKfeY_ Qu!Q>t'Vݾ$yuAok6|fVfED48<-0Tr"JDdpu8s$,Vn8 rF_MWϧ)5,Xp79\]an2cc +YIQ4 d4 (N"(9jS#+S?*NTo:RP)H@@%kfwh99jqnnxHpOn ?jxoN1=s2}Az| 99xN 0Ѿwtᣏs\a1ycrΣݛ\G9wÝ |Ý MC[lCDr u f/vp_{ܗTW+TJ+vlt;}~k{OLՁF/N#gϦ}A>ZP{̭ gieC&5x z(` ZwM4~WǦ2ʯ=+d'ylU|PEQmѹU,R)fI`{|5,P2J0ZMmQlbKPQ|SYiDqPZg.PKt|yb"ܲW.)nS+KdDh,hd6as^KfeQk)xz ^_% +'t3%=8w?('Vݾ$ywɺg!Y7/P?Y3s#u ⬜Y3|d 疦–"aJT06șLyܿ:Ia 9KR&T3/Sp:8S,q xn4{&cs)7Ma|K*at* >0?PO9mPiJ +)+ (N"(9jS#+S?*NTo:RP(%H~wvhq|nO\'{xϞ`(8~|`=p޿ A>EXѾHW;:90pgpgmcP;QC|vm;sl_.VԽW/djUl!Tw4&^i?峴x6 тcneh>K+㱄6 ]D+[z;`juU6=~')Tcd0/f0|Cݳ4K{l|FCM׺k)86V~9|^!;c+-jeUb8J1E6sN+f +Qj"hrf\@ИeWJ# +[4Ғ :;9?;439;3@=,^bLER:9k@NY[;>zsOGS FխoLigzi}[5BXpC=F]Zm;7h;{C7>fezmzLuhHÝ5-&&*D^˵̓>E`}^UG*Fp/[g38D,Nę1dz "G$P GQBHaJ҄dEd ÿ,5vcf:gg("EK {{AZ/]< o#mi7t4m^ݺ/ƔFpfطU#n13iTi=إնssֺc1tcZGۦ4Z&Oti:iP2ة1)ob(ar NG\77HF1H$@FP)Z}t=PmuZ*8 +;&!\!jM~gsW@Ω)bȭrJR]FV)91)Y%+YV\$j/*̶J +E +H֒|)<,_$OB.\'0Fq6lSAΊxc.͐)f%ed[-b,$]g^j0yѨ(:5 "bc$AӓT:]<^%t4NģԨTK8JER8NL)RJBGbrrdr6 X\[*t#KO>j{={lf^Rj +xO20VƉ@\l5ЊMN@RK8r~,drpח&X8 g¸N̰{ [2@!,x%+ ^)W)g]|e1JqKi90FYQ`LXt^}iiiiiioCňcFͲH{ /L 6Px$?__ڴmЮC;GۃǺwh'!0sp;Dû$!ոgaߵ9*BcCnu}4HqI޾Qk[T/OHŵVeTy}/+fnR;9,f`]D3Q#kRUoZFb-'Hrt)낼%ԋ{]z3wxB>jeVnրi@,PT82}"9"1s46L)~iiiiiioND0ѵoXk]ƺ|F:jwvR>A 3:xM߁m1GҸok{<޽Q{vo^]Hí"T=6D +VG`1@`%KԍQ\[iu[6I0ZxMj{Z{)C=1Rj5Ih;(]1:}U}m>z:(!^^v[h$֒*z$GR.kXBW'9:a~AyG'IsS,ڼxAT.RRƺ唶4FyٚN)MgTc?udO ka$ Eqcb-ZV\ZW oIM@LRinw{3󹜤|q T85NcAn+Gb) *쥡1#Y*6.P)YBiKdmB"8IeE0|1%y+^gVd,ʳ2 +90i91<EdsV3ϐeb2 9Y+dfpt}6M.FJL3 dDiӍr4iC6)&EkS4N UHOҥpRHT6EFCRji +Z\RP.AP)$R)r1RLt9)I8 N,.I` -mh2d,_ +>Ū@ϟ0/d̫Y)笌zV +cyu !M?/3K@4^[]{?.I߮nMDuQ~gh?H +Q]J|}7XOtշ%Dy21Γ 77D=^a\bs9ѹulnͭӱUb͜җw$'QB]"EtDh!gcBQ|b2yD0hD4}@S:<>\ \OG8,|_%oAo- @ϵx4 +SbrLRԋgYF Dw_/ahRDo `1\s=N!{39d<1LJJJJJZ Uo%(фY) L# ËVdMA+ܛ;CmC#kkw>c-C-=~ހ=C<sW7E N+'ywl热-x/򼿅W~wS3Ꝿ&HjM 5Kmtrw"EqmUnY_Oؼ_BǹSTy_G]e_'bcG熵kĔ׊h=ZJw[GW_G|orZ&oYgc*hlk)e퍜%T {m $[kcP=_WP˳qWUҼF._uGRsJzOr +j*U-(XvuWM)9I>u<. +Ip,ȭcHU8!eA44&{$KF2WJ9%K(8msylTHG1 UZ&V/&$?o%ҋbҊEyVRF5W ^&-?"Ɣg1cljrC8YL!'k ΜϦ҅Hi& (mc\&bs&>dhzƠ +TN +IFHhHJ-MQ#U*%(*$W*B2\.F*z$V&.G"eC %ILx ۊB2dD/R"-#A~@/1O#sV{=?V̱<#iBzzS$oXD{j,\]m~!MFl~B'EcõX0ϮB|%|7 ewNBP'sbO&s(1F 7/`h!53NC  +)X/т'!jOD9 +! +(gS +(jB LEQD 0Oư;ps<*e` a?pzONԧZ8/ N஝eeRuUA\Z RH9H$#ap )@bzxBwkń3)))))i5`V9 EӰ,L$*X֔mUU:;ww сFf_{ݷwxݳwfP+QA^h'VN-a?O[["n_y +VfR;}MT=(\(!kR55DRJܲTy]V:sS򾎺ʾNJƎ0 k׈)mz0E-{Wz?׵`M޲1U!~x5qndFX[ ,I ;Eֶ.KD^-ֺTmeqpZhf7$2Ï;sof!gQ̨Qïv4Ր<1,w!U0-p4\- K֐_JIsGrB%Dj+hUO( +*I! 9k+ 5XEgg7,+/o5!٫yJn.G^R[!9"喕p/)*.,HUY.)p)ϥ\~e]8cQx%Gъ:{}MXSaY&M4qd?,,c@HHZݧAL!%ck䛨Q<)[VVVR`NͿCR3o׳#гٿ}AMkjMR7mFRǫF ʏU_PUKT~U/b]g@Hڎ%km Ǖi l7*(_݆ʺĶ $y9:"jҎ94X&zƀaIK)iHnWS1XHqCmբz%pױ*IEa_%0 }gm% ( ƕŔ2|mFrT{=${U9O)-p+BJr=b"Gy]ܲ%=EB܅ɰ +B2K%NRV3'd+_"0!Zc\igsr,8[YH9/'i&Gvhϲřr96LRFv/=*`0,e1&j2[#l4dMttF:Ia0HѤ.M^/EhEh4:j4|*Z-DVj$ZT&PqtAᄟ9A- ')T"A)K+}mZ7G%lNAհ^h_sjWzqS)K5A'D9$ϯ+ިg()ϯ#b[ſ.~o !+ 2(s K ˓KjT C(`l?x~x_xǰ|/ ӌoN p|N éN8Uݺz֬wr4Xz +@Tx[ (8=TlJ%a;4S(pV>]O +m}][;vl g-ݵ_vi"=}֎s۰vFxWLد禎-໺ꒋdMbY*.rlIB+GKFB C @ZWwW<OmY4)' %lņTH-)E=ŕ=5()͍Ea5/C";דҲsx:Jd;-m-%mm:u YOqJxֹiu/)qUЃ7) +LtNQBG׭VX"0JQ&FLJs&@R=y(Cy=z1o0"=czvWzqO$_6?器ˀmE<mѓ["\I&7ˀU:oy1,=e +?g=Cevi~%~^ |ϱSGDg=s0KȘoo@ Bep/`rPؠ؍1hf@4j`JSA:h5ШU-hhW0ԡ'5 ,)))))Y~T˜V%@!:ց{J, ~R fcUNFl޻k,{PzΑvtsH_ؿwD#{Oٷ##wHr߂aRbﶌ?DY>'%l]"$݂ l^SSQ阨73ԓ>zez|H(H\$)AKIx(S&j"DvG8QR)К I-H˄rή )C>gCIc׮4#5t$G'ӎy A/(qI}^RE~7EkoSmmQRiiFZdN%v$մ9dIխMy- Jl Aơr:2M*ԫĮXW4KCm V騩XiuJ쒊Z;ɆUWaUV5˂lKJ)PJ +9B+'*xf3l3LF^o4H:^/tJ4:ViFRk5BZ0jjt$K_PUWRTb~&Thυf>R=~R=g7(ѼtL/i^wՋٜZyG<m On o^rqU뀁 ߮]f/S/Kt/^V.~|0^V.@翿^Vsg/< a X)74yr[_Y@$ݑ+n ,sKr;7 ,ssr;> X\0xa@p*K6sd\:|\? ,sCr;? X;xYnaDB>L>lG,!czIтٯ64הּ@H@5$!@4 .b q9'qKrw}'qT;OY5fWH8}>whB?u*'aD ¿$C"ĈT&T"!˲ &'ŕJgU;y큉5wt;>8?nyk<x0PT[Q="'GÁ $\'$4{qH[ķkKJy9MonJwᅴsRrq򹶯`!׶6Z/A>5<ZOeku7%q%z*'!"L,PtP|q ˘nf]px۳-<9n;cD_]Xg;{0`G _hxBXDpdB79?=d# ̈́m.%ڒbofNgӛݱycx!\cyܣ|x<{dmƵmKŹuǵϹy O㦁86SهZ- }I{I8 9xv5  u&X; kxl^h7VKk 5ԇۼ;j0w4GX xAVO]{[دӸLeIkHVsgmKPtsH zyj#${M Uvh [B׊٭<8ݶJ#U8m*P1/a4rTKdTS`)MRjљXQh)6JMFIWk$T%)+X1#UqehҔ+Ҧ(q8U9_QY Mq\ai1IQT%f18uЪTJ@W  +)TT"%GI+,(HEW)R*rd<4O&ȤRV*z$e#bq!SBB U\*WJ$ Ay2KD/g1 + y9"Rk{ _+ΫmXA~|7_'~YÍ ]G<_* W }rPJ^,BEȮ hI>@9Ȫ/33w63h|uTYgg]ϽO!~Kx?ƕFD@I&:.aB6vN6-8NuLq;fImFF#V'G}73f@ܿiB{_*Bp<ЦPZt 2rt dW +C+!NAZ.>ApOFN +|6s" ]91w Eǔp}B '0=pS ʼn}s%|q `D|sO= Ԡ9&rT 1HrĂH;B b&f#F/7T!G@x' I2l7 +m8=!Gv`c!0ZñѰC;Cq]>JCu #Nwx>ؚw"-=qv{p*m)9G7P\;i)n̵}]PsdUJöAs+a~sR6 r 4 57&C +8wqGY  u۹l;֏ۼ}embivԄZzkW1%rs[<-ns[7{b>ӂdn:I-$Q UMw\ee=2H-r>gu9H'OTGǕ70-^+i v+I_oX0":f%Ua7*Kk)%5U &!ESf+4WTˋ+*c9OO2slfYir4ddTzfN$aӓl i1)Bas'"OTɈɈ3s#f+x/n|7¥cR8=&r S|`@`@.,R$r,(R+HύEYYYYYYkƉd@̈+F ` ?`(E,FCHc[{#}#cwubxz=#{;?}; $5h(h?3"ރ߁:S|5%E[8M{6/[M$\c9m8G7P\;i)n̵}]PsdUJöAs+a~sR6 r 4 57&C +8wqGY  u۹l;֏ۼ}embivԄZzkW1%rs[<-ns[7{b>ӂdn:I-dbʀzReR["9*}:r*L[^SébmYɲi E<}QaWR( &Q R8( 1( GѨNCQjxr\A9yj$URJRHE OB&ˑIRL'IBXD"#%,G8 1$KVxVŽH,%H_mf^7/A\&ZW`(E1wei{;/{7ϮKQ<~¤ =^^?Zkzͯ7:J8*( +211FMLF3XmƤ9<m:;x(jWً߳9.~B!zw1 ϮQ63('WaP_A<6xxa4ڰ F!B1s `9B|Qn]( )DO PC\-OH Z0@7@>+~y)I q K8Ff\97 I003BJYN2x9\:#0w4[! rb D,&BH ?m?m xD@3j,ef0֝ԟ:uyk?:f=5li2m9=:sc9X@Dqc8Y>& a=d'> a=1ˑ}aY?Xe9P3'bՇvד2 q1d01t11SZ.ƞN7, }LU{*cʩU$Uj aLr*g ; U Az*m$]{#kmuڈ-,.ew5njmt}JlibK\L4Md$FeYKYC0&*+IjG5CǰDPیRTARY,z6e*apf&}9kFRTKI:2v % +C)C~+%/!5 e!rJE\"VĢb.Q)di9$/VՅ! +\2U|L!"SH h22rɑFLȑS24ISFn6,ZzN)&䔚-֓%I$qD)eHIR,lbI:4J))=55QZJ +CMP!i "QrRI$%B.ab"׌(/H%)< %Zmd)Wvb# ޸u-޿xZ x-ڔ_ }x%RLX6"@>yӿ_G[ÀO܏̻s!N?݅-vl|+Z(n–F\Gvrl|7yraPX/!*g<{v~f3'W#8= +H!Nzp9`mKsozs^ܛ1;_~-?ۜ[s$VCTV.D:y,O&>SL < pm\B|Vg?/?̝FE03*Q>̌<\SR1 A'퇷^͇$*SX# C}'zGMӽ=сPOu<3q=u~}`:`>D³cAvÞ֣ñU{) 5{"V}hw=|;,.R'xzwr1tfT`0cP͵VN-V'rWKfVu==chgw4luSi#]oFm G\g)p)9f M~.m3SJeͬw%uN{^Robijm$'m54. 3r;k De%If(VHj@**H*RϦ1A:BҌӤ/R`ԕqH*}))RRFѮDa(eȯrtb"%$u^!8DN\[ŠXTl%*%,0GRBR0DVQKJ)X9Qd|ia-WSO.9҂܈I9rJF<&cEK"eR䙜RezR4i"ΔH2 2 C4#%M,I甜FI#%#JKIaH:j"~A@AVٓ .#:.qgqW@q\gt9罿UwDKq>{v~Jb + +a0,b6k&h;# F (/^"-I iі + +,eb1ߌ03{OM V/D"3Ԥ3a#Ӈ/6G,;0W8 G*oG?(dH.|U^E I^g ˛M{u`Rh//E=y@ IӓA`z:1=~y2(>GL8f=HU`Rh^L^τK 1_szdݲ41se5hw=Hr0ݻከ&z>Lws"[g/Hr4ۭ33> L#gh=HrW $) ){_خD IOI&z ~vQ&zLbӎ*vrڥNR9bvY133= pAYϏ 0#uX@pv8\u:(v8 &< `p`f@sp<P)5#ugUsέkllo,RRS\hkm>~hKœ߶5m<}UEոP[*qhǵɓɓwǵ[KrlTqj ;6M'orW8/Wm]'*m];k9-kJI- Ze޼TekZb߬fk\Vm/;cPb[nJB_2h.nqVWϐTXYY@3*O˦ՕEJ[^NHym3x֖U層UVY)9SI(ΑJ^ɥ]{TcW$Hd\IIEN)0e%s ivf rT%I.[&iӞA˳idkfҧ-I2XbS,-;#d4)b2ST3$**KO"/JMTY,a)KO^-ՈӚ'*1vɂĸX%Itqȸh,F#Z"QDl$|"\#gAⅳ`hnyEjs ) +:/BKHT"+LbS ;WcVp]AsCE$b + +a0,b6k&h;# F (/^"-I i++Gc!Z&phzȿ{&/ ~jʿLM򒏓FG >N8 b3ލqKAv +כ{loGY/4a_ҫjsi^b?Gf!`y1| \:!v$38 +Z k|6~Pg~G\ҏ~JWlL^fz%^3K7Εnvb!Π{W^ssgDɔ=ҧYv*=>IڽyZ.5UܱIW. h5Dy߭/gqn$o:QYnYiYSJrli`kZRyXa{qoZQǶH){C]ɶ^-{rn +3h.nQZ]Vug!T(2VV5BmEZG%B)myNH/uĵ=3dB@Bk []U[]kmum vyڿ잙d3@r>s{x8iɚHR5vD u5%U5.T"xʀ(<ҟ+u8/c~hA >+XPoF0'1RhVj7w +pj#2 JVR !Sk!۔|]A57I_GuGmo5 }WTpժzZɑTi +*cLهӕ'3^գ[9{<]GS\P>oO7 +(Ń(xܿh|AU@oW~,g3wq~ 0?_i2?9u8;EBphej y ΀ZVN|,;rѲhߞ ,;s8he@0s4в̭A)\@˲37Z~4вB!v4~@RH+$.EѲ̥/A-+{A-Kۃ`r7he)󸪣e ݹ]eg 8TgQy 8 42r码egN|pi~ǷZ9 h@pt PقD?ѡ7C}l,}MŰmj`ZX14-T2f2:(c p`$3?2 ÀQ=Dz&̀qC,Ma2H1y#< F}^AWRRRRR b!EB,ܿ:Hݏ4 "NDZza8|w"n|cp@S=|{U譥(c,ϋB\oX{֊YoWgkWTukhBUZFT wdu` Vҭ]A3_ )=d:+˓j:V/TQZ:HxY%2m/.ȧ U-+WNȴ[aQ幱>r-YPyܲa蒑]+XPoF0'1RhVj7w +pj#2 JVR !Sk!۔|]A57I_GuGmo5 }WTpժzZɑTcghqn}kh((ʍs2յ*S;we\8{];{Pn { Ts(gwAw|PSPV(ʱOrBwd ̡Y7mfYO'Vap!lVlXk$c^@ 06̌ +,[Gwh%j !T@PQD7 lpvKs.WǗ/ޜn;+ɵܝ$ͮbf"gWgߙ̬Ӯ@ux $<wi'< ,<̓'}C ᱮiGKaǣ/i`c^Vz2KRzٳТ~gxq69|zy|r.̑I]HY%Y<[/u& z%*!_?u0 +S/æ{ ޅʼ6խBǷ`S}fBp2T?zPW_ +!W@%x4G! O_O~ (W^||#UU P{7AekwByPoh?Gyy7ϕs^? +^)W><>጑ p ey^مsu9#~p~.?V`2f `@2eA64Kx@`8, @ߠ)$:<3 {DRqJpK67ZV`v,I +3t.35f:[VP@DVUjF粱Ao,S>FQ`;*sHϊ=R4*da_6!yag0B]*w:@?ɝQRJ>;t&"$W_)SHhHG"8ÁnrMԎ3#no^GG$k^` %.dAĒx(SMӅu*^Sx\NR[Cdvw0u;Դv̡`'lV]aYn}`FMdo3ˌ6Zլd"5ZLd--J&՛eFhdFonjRhTU55HFmC}=Ig('iA_WBN# :VI5Ѩe$NayN"7OIbJ )W`UjU2"FzXO аKN7:-aeE_ײWMaݽWju^窅*qHݾ~k*YI!P:HBI#=BBbCn }V޿9)̜2y>ϜOB(?w q~į.XiHnqZWyn%7Co,¾hjl6G+( !ח X/.yӸ!ʓsgBGgz8sZ4Nq!HrքTHG!.7BD] $TH+@\.sIr0!څwf?Lù +\1C9rr7)|~$Oc,LQt04d0# [08SA25(%*2ϑa 1b;C!GgwD ')!y^L3ARRRRR҂A`vARɀ\ +} yib}oG}֖nێۮ6ׁap29޳߲w(кo3۾s2:{ص,l;h)э$EG7pl DGhmRd^XyÄj>5^1-3,f5o^5oM+[I>qV2,gDy f\#İ-үv kh]U4 +j }AJӊl\$t8"zr|e^;Ruymzͦ uGTm-Jb{նٹ3Jcqq^gS㵛m6a-NDnR^<ZQUAInTif}$assaT +Rn56,M||FA1*5E4]-Yc-D__C*nԲ.iђդ"] 822EWs +B*(1 +j*ʅk˰r22*MiAU_)YJʫ([DHNYI1VSL )bh9KJ" +YH⥅]R*ϋ.e2 r) +ss3 +rr"[/3f鹋#e9ّg2#/Sgg +JZZDJZNJ͈&ՔuZYTiTOJIH*2\PEGd,Or$;l f%Gr$Gr:䌌`- U)^_.z*M)=X}L-ο^(gü+g<^Hޫ?3xS08 18$t!pPsa8g}uz/9^3pr .fv~Ύ{p>0Gpb?GXL\ám]0ܿV`khMNd)T, H9@U.S,B2@\W{ +K}ܙi!*E&aÔ {RxZ_Q{&V;e#}c#C~P6k|Ka{װsk߿5޳%ص˾s۹{skk;|G:s q9o8G7pe}4eٶK~^excZ ,[xX̰|ּyռ7l%mX!9zavNnҶLV2W8gJa{ljGUylf$UR§N +M +Ri36*lJ@*4iX:X_QFtdg}} IS΢[eaeKGPz +ؒʵ%W@D5 +hl&<3;pf9D?y,a٤Y4LWf~I}L#IPONKJ b*A`@+#h@J2-1-e +Wjr`KR\(!'d^*k'{͙qDӧMTsb=.$$I1sźĚ/ql NLh8X53V5!r,11,fNLa6j`a6[-b6&hԪodB/pnj 5߈D#ш#Bp/r-VQ3ǭ1'f\ ^5p3j0-"jTwm."}c4u>?o[xv=9x/=߆C.ώ_/M"x4~<pF^|~W~XѬ i,̎#3d4bHӝS' i5fH荌|3s\qv]9>M=H1mMKG!"C?a<bxfӅfws!ь"rl'k;u5ѿ&vJy'"R2@;_== pf?美Ix~`{zp.(l 8s `#Ą0,8 4# f&\ | IT #j 0BcK- Tl\]޶kƽm- [km[XݾuI鮍-e7-Ұw{k]Gš/wo s#?7\⫍KyMj_)UިPkc3 &T@T\?rRu睊_h*k[TRs^sYʷL*SтͫhśVmXT~Bu(cE_,RvYF󥵴ϔ +>]fqM8Wj`UBʖjWRU}>K&单 +˚6)-[G]"|nK:ZEesiis) J$5DVcuH%XY8D$?2]&WNȨ(̪(e֖2j +J +ҫ5U\OK*QHT+OK(TH-/G JkJ)'ʥJ)ʛ+ R9tOkl??W%G#3i~v?/+dC|ل_.g,/H|s39SxRRXJP-13x2;=LKLK•%!ǒT4'J9)>Z.N%Vds4KlL a,1ShfMdZ5XtVfjFɤ`2j4h0‹8|HM/cQ4h|N@E=7-?/z;f_[cN͸@k0^Λ{&fոz5*X; +/nC8!o63MU?o,C +ϯ{'"]<1q>jϮ?#D0ۓg!'zw Kޛ!DDD<<Gxx$Y]QD^yg뗳!t 0 i`ҟAHםS?')gDDD[z3 Dޓ~F/!O??BD@ĕt8Wzcvph@e<Æ{8fQ`ҟA`<6tcx#".|a 8fw?swsoIJ ]z;xF;s>ӎhu{y:ׁjA_n w ݑ{+m i@Ă b0+fO&q $W‚O"^8yD툃d3$iƕ;V,ӶaEu75׷o?đ|v]%۲,ɲ%ْ$[1)Ɔ1-Wr%!ɑH^K.R0<:#7߂0ˡ\? 7$<@'$mޜ-މ9=+}cȮHtt?DקiS";!ݓk-}M?.mnj*BpbU.yVJ lQumXу 'u!t^HcM^Rx.5't%IɎUyL6!hB5kːVAE4:@Ip~ox gm|/Ukʗ틴 JjA{o7Kq7Ƃ8wO4kIEĺHdH+J q` v3)stwH*fN#k3p.g"n[׃{83Z`y9V^P-c,m-sks$䄚DbnCa78f]W165ڤ9mV&bya-3Vj͋f^`z1#d$TJS]a^e}mXzAM)39U"bjIe* +VUTtEqڊrLNV[4:VLh4jTTT QeaaQ%N< )(Ҡ tUGߙg_+~9"˹|%|OX/p~NI$tNj3y|Jy Cg9_r<_> Y{˻=ȹs#Ȼ/zcrn|({\U +s}eAϠݕw:.K]< I@օI/ߖ T?䳹=蹰_I\_H3O|y ,g|>#ٷ?p3}H?c$㱜hG +H%msN{읂 xM=8qT[ lb~.e3͵0pa_ +x>5Q5 *.{]_Q,|7<,|2J* ^eJҠSL$sh*?92KŏMb FNgcPt653;488?0MLu6ܐhM6KJH#Y|d0wbN|D&{BolB2"Ȯخ\t^N͋X\K3 o_mG0oj\hXE6BzকQ\_N׆zR׺\ᅤ:%R]yB\4Xd紏 kIVIRsVq1@Iptטox gbm ږjEpl_mWR`q{o&8t2̋sžH*Ky0DѠ/l wOВ, hNd7bA+5Eg]/dC~$9B G׊gH#l]~/iE<2ܶgmqf^rfZ~7sYZ"&IJ 58Ncnjq:p H#e/bljIsڬMĊ3,Hʩ[fJ14`35 zkC`i0zjPe6+MuuybFUk5`xWQ׋T%髐*F[UQU)i+ 2 :ZmNZ1VҨR=RR-DR + +E 8`#&7 +?K4J4dG`jP{m<}|KFF1{WyzOyrW؅Qzr{R R^^(z 3/@R=s<2D!#g=QHf\(Т<QHVƣ1 IA\E1gbA9 qBpoOANA YqhE> QHN uqnqO;¹q GP;d\HK1\B(ja&"g\9p8w'f&8'QQf&FeB\Q1\qqrLX N|8rm}pX@2$@LTbYIiQA $BJ hrPS() +ˁ}<5> +>(r%w"={L Z%ST[ۧKd RWoiAO^Ȑ4 C>Đ 嵌{i>:uΑa׵k్ +z`.Ƚ$g=6maO{ch2woi%Yv-yxGehy&VӎR$q$5$ w1 +{x{ -]Ll!ᚤx 6u67vUs4y|u~7sVOM5C]n+IINUEZuV [$U$iioU,Vk +ju`-AVnXYULtӦJMa:̾MGcԺ,Fjh* + d(76)M_F^P6)=7'-/;;5wꐴ5 RsVJcj)Y!YAՙ=Y#ded %gJHc4驩Ri))$Mjd:%G$BZѐTZHtQJIT(b)! ASpQ E[ډXXQEOȒC2*RoUcT~륂 e[E??<-Oe +럏?lxa=x~nz/+o<o";mwzϏ`ps9Тqy5\G^Qga|wm弼(Xg-K'ŠE{|޻Gc\|3ʹ7-b +-)pwjV퓰t'Pحd7EqtX?ڬPDmJB K6]B(ja&"6Zp +9pP΍+9rq:7Ύqf.83Q<;9{S8?St@Gh&LgрQN9lX +2e@2$=p +RSA~CJd*LT?qg2(!!!!!ÃB ,帀C%rF\pd幙~GuO56k<W`pĐ Z&vzamc10vF|dn=0@j^vyȞuvF0'1Yle +woi,<#2siF)nip8 r5W$ w1 +{x{ hZH-]>1lkLn_Tm_u ްڞv^Zm<61ְnw$]&;=V=i]['RoTk2t^ETu[XQj JıM.äuڙ}#ƨuYZXBU +h-<APnolSf3֗ۛxl&r6ԑJ-Fs}^NT#7F*2kBJe8?ޛI$@{2TZZqtUVQQ@{@[;vXG/ޛ|'yZ/qWl4\/+3DD]!|yq 7߯g%~z:CDx:(įc :<,DLHW +~ u E2#pb `<Ȅ@,B;$0hdGsk8:7OF`bHǑ,ǀpƄϐPL]9׾Y H .A]:ŃV.|ůPؽ_: s"!NvjFyg>р3=~^lߩ~N3pLȿ 0oW*o~ cC=y0ㅾ`mZj!fNJ`@@e!gF Z-Ω|;<㇄?}xx`GVqd!g9Ug}e{esך-m/mZT=m^ ߯n;v`sO}W=]NB}&l-Vwo x>#{u-ttZ;ͪvZZͶO)[Re5V5f*Ώ#iUmZIܸBf?5RsSէ u5*. g>,!&j+xlJVI*^m([F(!-,oôN+^قzRB)uӖEu7݅݅m ޖڂ{jp5K_8/dT4Ϲ-*:<7r) U9q]IhvT[XW==-3PSYUyLJf}Ei SY_EȪU2% +RDsVHJ*✕+ +\gya>'J2(g/-rqŹ98_= 0AE9>VԂ,L-?+5/3CJJnKAqђs\N)lg5ĥd9)i4a8(v/Udv}SlXbML5Ú"2SL$-ff$X }ʌ$B3%1(1$ҚMpDbiMI^ǩ :NBSVCҨ8Z*R +y 7 +#4Vqt1h*:^W–p'N/\ +VX=3=5~~=om`S0D,sŚlhѴwےۛjulm6Ӌk,lwoynح󷦮4f%, HHBVHld'@,KwVgt:3uZ}EuyͽIn8 >Ow֊I-0"-ѐ'!gejcis[ݘ>-6E.`naLa33r;fcŁ2=(c&Tυ{ vȰttZG蜶zƨw(nEmzefMՂR7Z̨:fS'ZòT U]o4TVCNO#IUf¤ӪLzJii *6VåRQ45JPèԩ*5jrQVϚ\R2djeK^UW2SZP*+Yi%U2+YIrR.g{t*.e$SQd".-.FIJHQb)F$-* X\$D$D\"k l(O<EH)ɯ܅RH!?Ay_(RǔzT@1=0WzDvry8Q !0?z>`v,ﱸ[lr,,n@-7/o M7@A:vp=3 ++ |s%gANo<= +dsY8gYީ=;7nӎ9u <>Wܠo̻G}\L/)Hq=ѥ={HaV8{vg4g0_fFSN%=bpz4INS)pj3p|i{qz>Fb+'&t/G'x}l_§ph aG&bU`lh;Tr +)($>!bfpD4~x;@1h'y[#C ڿථXdφX뾍ݡm2>ή}=~Ɣо {{B{ƻQI=CuswhX*#LhvcM l̿mM61wh̿eۼjNVƒ:Qo4q-3@y/øF[j#va\3qlc qost #Ǫ%JcE+yy_6eGzŽ^LҞ/4܋NiĮ3b\)Q>@~?'vz,_Co$Ven6tE8Za "I yqVv= !1ލsnSp1,sc +{yƐt5C-$0YɅ1M: 67$]K'aC.{K9mQKP݊R7 ̚&nQ &uRN0e7ǩ 5 &SQ]odP*R*^EaiU&4괄ZTAFQWRרiHaTqV5RkgMQ)2%ɪH +TJ)V(JTR崒 +R$9CZ)=Cd2T^ƩHV(EIJJ2$%i(q#q@,.HP"XLE".PȵCA6'Q ]"K$+v!RȌ >=OJODSSii3N sś7Oqo'of |!srwq|gat[6nM-^7xq= g㾻ķWg + '\ΓKp^_=rlANS_YsYgXp^|k"[IBEEiC -dHOAņEB@Qب* {[ݻ޽m}/gf20,%|d/_ኼgt>>Oxvm< FLS<&]?"|>|E9_qZ>uKk1|bZ: nn,b-vm"NIz#c\,|LRI@0gv q*L0Y`z4 ̻{WƘO&I%̎? +M̏QӸ75asx>t o@ HR8G*)TXyBBBBB'?T ErR# P)ɪTEM~NI5r8= YzC>6[-Kp `z&y0kpmx/0Opalj$8GnO0a5"zw {:8#$9Dp`ND۽]@wo_5]mjf'5nVER]g"а3`jh!#5X:B^)7mwI67MmskHkZ]C,P+u$+VxN]M%doUk7~}E!3CR~}Eሢ7 %3XQf 9)h92C=D'#YxT߀X[ wd=@?>z)=C\ҽXeK;w!$eJv}ts )nB\]w7Qb]pDQ8X)E}&"%;kUy/"Y.C ɜHY˓hw ֣iyg(ip&bݟσiJv~Ⱥ{QT`U_ yĺsX5{9J֭/Ax~>G1-I7άt |}(k ]= $51LpHx>`]$ xX3;8Ak. +3dQ +3ِ:p(!'pIpo<3 TM AhƇ,0rd7 tDTRh󄄄O@AR*SuZj*US]wLm<+wO +4XB~:볎lMjlQ'x y fqc?>?2+ kH'=>ga!rf>DG1xLG3">`L^/>0a5"zw {:8#$9Dp`ND۽]@9)$mW}{I [cjT5v4 XZ;Z>A<PW9Mk]fMjZ.ҚVi57T,:`34~,kD^īt[ql 3.P鴈 j.ZjIv4OW#Im7 T،ZymU(̢k(6i g`4b:2Z[O*5J u"bM uLԐJ B:MWB(jnEqlq=+ 0 &$fS=QcLh1K0i骆9S]{3deK5RVei)XQQ2Dʋ +Iɯc%E@҈̧, + ,+-˕ijeFrCz

x/#kGxwl<%~|~>xyR=8 \?\a?IS3z ~=,;Gnح4|g.I7jˍC\!]?Hsumh~#zbdPYF ;#{X.}-.}v?W{X.|ϱ8wf^}S{i';yqvgutgܑqj6Avh +s2<(C2<ڢ7clrnJHR%)4LT3ɻtFfl gLf$ς BfYDUv3-m6M 4/FP$&X=JHHHH;1U5ԺM$g$Ő{xTc7ZIUkZ*}TkFTk&Uի!YGiVLZWNKFe];4`%u4u4ZŪޖI$mzZ-+^2S:RQ@koҪt40Ek"mֆi):JxImJ=MᦺJRAcm_5%W_M]\QQ+וS[V[[^B +Ք͐S]HOvUI^UYZD +Vhc @yQ!_VJdAETOX. |Eyzy<\HnH'sC$oA(G#3'/;KOFnVP$y,#T~bKφsgdWx$?3$<Ү+8O/#CƥdkzhISŸ1Gۭ>5Rr˥pJr9SN')əcOIN6 ْ#)IfKIVͦeYzVEF2Yf#٤2ň m&H.aBZ%FXXY%!o +G 9Lzu SiԘSK|6!y`VܷS&'h>nHѥ񒱺6|b?e4r|_Mc{s[, -̖ZS%|d7K#px*@ *pp:As3t7%C{ ,B +ۓJ . & ﮉ$:kc kyf,ӣ|bT.-b|u1Dt 3\t 2ܓ#(>2̔ NTFSs1\$#b5ٳѐ}$ebe0=aFɐ%? Xb!@4by9<\cQJ3ȧ/vP~e9\G vÐӁ{v6c,2ҬL60<"bYQz¥sZhfh̥M|6Sf6VS?GJc鯢c5BFfE|t]}fh)^]QQШ Z-Sp(u"^zz +m\ͥTQuDET::;9\2S) +T!#wt4 C;d,"TCRX,HP"X%D|HPWCBl' QS0OjnSҎv5HVB`"xv;J={""Ѧ,~? m~O{)lDc|@*gS>} +Uş-h;?FX??:rae| ּ{zyg}c{*?mWh] ~iZǪjwsc䥋 YYEx (?"}-U1V7 S +Eb` 2Ń~[ B$ur.[X?==}\jmq2wΑFfc(~bm.OR>rWb>r%qV.%/,$hVDD̑Ӈ:+|2.`յ8״)j +ۛCEGg`Oha ֲ*#YûFPvfP;Fй *ɠ(߾-[`R(ߞ}{(8jK ngfehà͊һ.2G0Cf.l⣶u6 9PK@_/s04d,70H7CKQ:ZFejQzCͥԩzZa(rMw7RF:]E֣R1cPrTJ^NRT(PR\^Dр %dR)I bT"A$b1P,!EB!_ EI$D ND)j?юvfQJL Ϗ3Jحϯ&.̤A:*H  BB*HWخ޻bW@nU/3I3Lq쵞u=; H 9Y9=?4'ux?t+Ìl)mgV!lF*h~vtOK@b{C_SzD%|Vx簦~{HOk"??OSh%!!"?|wV"|{V7wpo +B-M @ \ +>B^]q^^("<" xv|tR' ||!+²*xdE gV݌tM޽߯On^}nϗYjCߟÚ)ϓ"2Ǥ8_i=XQ] +[ qfEC7@W}* +ˈ|{~A8'! +9y<#ƃ3<}s8ݓ qn_1p(,rs 1kcw ƨӕaxvaKžcлADC^ LHg f?0tgf3T?I w`c ԐB{#@ i@B@ HA A J ɥL.qa2$-I( qhʁ&sB ;Cnleh.A#I  @BN4WUT޽Z:HWahE3^[e)gט;;H>.6oϰ 2w }[/}$Co+Ahut=-V}wUwpG]K)H۵cMvNŲtl[[Y-ۚqŭ$&Sڴ8E-wo&j0㊖PPNH)'{-TƄRf;!n5x*'jάBOxWWyͮj,Brm\m+hT2-.^pT6dUq%*$tAMUiZb,eT-:5WWNvd$d$@j[} ( +ZP+nmw&Ʉ;IBAy}r0'[s-T7V{l 0GC%V+Z-bj*pj_ilWPa0WY\lNFeL^wU%+s9qbB# +;!D_ 0Y骧 f +6RE(0 +XljEe36 ,8AU%לg p =%d1i:rfBCQi ZhpY:EEShU:*SKkesr*&'SeӲCiRINŢ`*2 +B.e33cddqHqbA$ B,ΐHp"X&D\" xx>£d[;Dd[otI' !>O|6y>v&vVzVL4' ׳b0۫YqlOR@4oټ" A~cxo(P?²rC}w]C~B]e29?Yj~ )[?܄%"|w㸆RUXbI@2$%Hً64az`jlzG\:"<>Y`xx"zPjn<8 @a`irrw8;#(aɹCp$J' nMj];G8® KG.2M $apX냀Rolcat?$Tb=y{}(%??a~'> +Ǩu/N1~lޥn7 vo-Q)42Hybrf L d +DH0 Dy- ›GIKKKKK=xLt"yx\2( <0KZִݾfc {wvU[}_7\[uga֦CښIl5X{wՑ߇KmdEk"zj1|BUٺfUջDURx;7s4BՎOh+d VM/7Ff\6&3m^ͻu}ߖ<,}Јټӵ\he՗WWquBJ>jg(^+]ƲvLk-Z|쭨aXڕ(5+:Z)ūfVU70Shŭ¶JgkCXѪy+#U+->TehGeo=^_`cqxJm5e8k46_^+0+K,.6SE '2Jq&;*_^\啹8Ci1K!]_ttn/vt\mE_dtV i)qI,f6l⢲ZلXMF|b*k3X 8Uk24Vhu (Y Mk4,Z͢(*NrJͥ5299l +Փi!J4Wx'bQI +NYrT!2䙙H2e88L fdpD!gH$8D,fE".PA<<Q-"2-ZB餓N:Q B!ώ@/f3ټf$Q9Y9A9ILox=+&TN;_ +h-SD2,OӋ^Q!N>eǃw!5IH_2OS[RAKq\C)*ķWrr.%gbL HLO SHs 쳏=<DCzpz1XRF8bECLwFТ&gqd<7uXrQAaW!@Х#L&3~xޅCvoكTEL/00r1tSOЩA{PH9==<MPN2. ICG"Ar=/c}2^[GU zBapرG$NSt;-qr%wrrv+f_4yޝw3+2Z@Z*@ŚJb\C$dQ{h~H APVVVVAlPAE +)y+b:@^JqsС ùBf~'4ٛŻGtox!4YH,O+3L>4O_*cyFba?anLPlTNHh.v4\ILdDvgF0٭ +Og#S1^QўRG8Sk5zѽ%nY+CL iTp8>#3ud/$pl=7;=K9ԏ{'P8=Xׁ<3s,k_e8f`dyaL_Kb/C|:ȥ]|*'0\Ű&Q\ڛXב`oQn%l(ƒ1/soN}Dh%щ1ǃS,-{">)[cy].Fv8tAӡ(߹IkqP-uYl e3vniL0fȠ0Q6Mm5sQYv=[Y4&2XZQMM-\-ZR ,PuZڮ6 \ [ԷiuZ^RꚛXj%fZȨQmnڵVzUFÚzJec}=PU uu,l*jj+kkjP5BUU%TUYeEB@r9T.qȤRJ,HJI  ؃<  Sʣ<ʣО=UzmSztS|-y 'RDk>H(X<~} y ॢ!__X?= +yKAA?~v H=Rx +`Gπ;r +g@zm ?i B^ȟ>.#RC ?i}g =g M#_" +y=g u :<^G=U ݢ/)b|\% +y1@o [a>_r2}l +{\C!?i/Aw@ڧAH5P`J~O>\[+˸Kn.Cl~†k Qҕ;C:Hrlz]>S:SteV':%oHhg`uZޜ"HdoWǤҸ\Urk,SEege`i,с3!0S4mTTN& +YJ H*b Ш ^#-7")ظh35R:& +L u8Z/3&Oscʼnd>sq:ZɑSc+Ӆʼn\h~/'|ra"I.QZ|1asΏbNsΞEϝDfOnG,.zf9^JFc,=Ǐp +dC-9unF+CL iTp8>#3ud/理Qc0cR(ѽIߑ=\ ϡ~T{? QB) @Q9B̵/2{Qt^uG0{2vPrR.[>Bu[.Nb{N[.iMn7Ă(k7Β P.XR?&eNuɰϔ$:1xc~C6E1p a ! ;N.p:;7i9:z6㰢n;baָTb`Үح4mLS4&#f4v.*K΢gk2u\&]ڤסTF]K+жKEKjaѢEJNKզa4#y+T5Nb4kT*Tح(7^QޤNM4hb +,I ] vEbb4Q̶ugArz4/cbH8whb-ĚRDhO]539|Cv$b0$ӡaqlVf#YlVj,fQě!xI[~poGvQdDFdDu +xS!@36"y5㐨{9{δC8 +rʱ;koSI<01sF&ߠzqc{}Ho= gwB_lwy 7hd|!}|6;h\sO_\2;=$Od~{xφx \r@=#{h~=43gٹC3}=1ƃ ٹh gDN\/wO90}=4sv8gC49jMkch^o\{F.sҷ\ ;W{h.|eI!ztsCgҚd;_k +O!89pbL\Ժc$!k#hFz{H}< +d;:tAXÝXZ`vXP + E.pc)m`/x80qYA&\{A쉈35b搉O1~ tGÏ3IO4~1O)Q+Z +wnnm׹ۖv:5}Ɓ2qۿ#Phܷ=a`~֐=^n]:QePMfIu nmuI=4jh ]Usc{Mƶ T:5;>oU,iS,zCU׽rڷRum+rgT_}*j)ko4J7i.bMsƏh65J6nƚTş"5QCu0]@*L, hMTQB{*U[-kZkHh}%oe֊#UU檼&UeN4РQ_ImohnoP-m YV_Uhid֕Z5eeA͵Ҭ2R`-44JUPY_QWVF(T#DQSN*L.TVUZYRQNryAܔ7$-587ǨFZ\MJ,e +I}V|~VDEBn$Q LI,-aiF:)>'=M/.;-HlVj +lğLMONYBIKz?ub#):$,A(Y'f#qQKg#V['&ƪb| $o|L ~W\tYHkN*J9}>uMH(Wǣy ٽnvnr:pNaQXvdYzfbDF5opL&-I?7ң ȈȠ^ oq;$ @~FzMglEj!QrF* iy9mew|(77 ?L7/sa@ +x; +VP}(XBAPBm`e +?o+ +VP0/;~ó1V6[~8a 'War(XLLSa!x0L&'Z)r?7'g' w+ >,s(PP#@faq-}w}T69V3u+S|PPa`eK+ \(Xvk`eC? 8{̐ ZPp}j :Di!8(=v+v!8pt7# +:{~x$=X FwZuxY7 +邰;.->PxNޞjͫ`]Z+*`ib"f`8>> +Lx% q! ϛIkG`xYI7G_Y+WSY)@ + $T !)(8Ԡ]t>}tz[挫g{_g/ >^B[}'.=3EO1"UWgJB+UbT_6[6>H^gAL:e~5|UkM}TKSY%AXb~9soE2E=.s؏0|$'UUxPΞ`~&zsb ^zO/.witP>;J:m( v8f]V+3QYK鷔hzfnzFH Lf^c6PjAOӅR7Pvwu2i7vNJY%t%mz-L4][&):5%rRhjCB4Je=EN׵dJ9([) +]jt42:BH$2%#lH6!F $b _,1 B_(|>.c3w3l.©`X0q`kctьf4fp* X$xʁ&>Geܦ!w)u\"d%d',q8 ȅ 2*-6=7XJ_^I^=><4:?◖'FCk˅b!E/ B\0tXȜY"s |B>r)s%ssuwYL|.zjQdu69u*:SZ.AY:x`"'1G,tH6|d8T)B^:ؓ)DyD6Bq Gо<`c0ʱ; +?J3 +# +璔= zq= =زAJ:P bQ-VJEP^k2ä^̒ x-R< cQ{.)edQp!3ȃrݘcplw3}Fc:6{{tL3T߆ IViCYha00*}]ZJDS֣5PvSDm6B4F:h`4рR z.GISuP2-ݠ+ik)Hfi +5Iѩ)BV*JQ*v(-vTEF'SșDJiP +U3U.щ2F"T&I(aD 1J cb@$B'p< qas9NĂ[=XkԌf45 W_I7tt) +HH(EP $J+z^/ޝwβ n'7oޛ7|GJr<1 +TzR}E5~Qb挿kKprB +{/ջ2)To՟Ϩu! ?' Oc@~{!>z9i~Bm?=i~+"|Dރ۰|{ 6on87G}}DB^} "!U+YExg#^< b x|$@HY3Q iiM#;L" q n (7FA +#A׆we4;~.9\Az|7jXg tӝ hkGnM3qDi6S\Ș]&l2֤fM[N70HH#0jG0 Ϭ[}ak KtB˱jhڿrSS!!,epA4 %٨'Br hJpe#(%B4JEkMAISe,%{z暁Vy4h3 Yˌ͕d慃*l~n z8`3̦^f.2*,Žʢ>œbr&VAO*-n/fn t5U;:* '^K^Wnl'5}Kmyvv%Oh 雏YtH]R.<(9%m焜MuLLٵ=+^S#2*^G֑݄5nWRMޝRRU#lҥWtiNy):핅<"BJEQ^rya]R +r\B\jJ*+L|-Y%e' +uNYIY96s;lA 9xvŕ$l"H_OLNFhmzj6FtVv![3SSj\Q;Ӓ"w0"2yyRxzReɬHxgpJKd9ElO +O K&$4i[,'/$16FHpBLtXBl Wh|L4V5m%6* +v`ldmp +D!a0V`dSHPDh(W`xHW@Xp;~a[8 ټ/ |79mZsk\y|i|4~~|}å!(}4jT*ZͥTT| +R)DT(j\2\Z.s-2rv >W3;;\ 2|cPxQ ЛE3zK{^)լԬ–\`d_T_xuJK^R0gzPo՟Ϩuz@?~~i{xcC{9i~'4~sOJg}{kc}sSȣ"!W@W_WB糞4O/}\O.\yiYi? bMM#)$"ܙInN$7BqF(>]:ޕ!{I/!^ \C /HgA38vPvt4>c +Nwf0ŢaUТbMիZ0i=-b0nìxN5 =0q q89"k` ˈ0½qj 6Q~8`j&8S#P!)8(JR&9.(/M!BOۜ,R{}ohVelk0G0Rcm)i6 zqpn.7,JF*i\mqۋ]MFA +C5;We }{]`h#-]z1 <֣9雏YtH]R.<(9%m?[Sd Y@YY@d):Wnm^@Kis\8&k'|w}wC83 {vOȻcƽ;#\ג=8'HrmJz˚ɵVi5jcgC*{:uzsmk=Gg-Jgw3kU]2kZ|ΰW7jK;W-yTXh հZ畮ja5 #;'\O؛꼔175zl5gsAoRzk~uj%eT8TYwQksMs!&_e"쭤<8E2>RA2Vs2,Cdvna5( +[.Pf.^lƊ9\6j*Y&b*($3#Ie`䙌E|t92l6hl}~>Ihk4bD7#$bBbK#dp A| DHG:ґ0HCH$#ghz2C8=%LI&LHcf`dNJLHmvBs&`z>`"_)OEqܻ zDXX, k 5~E~.8gr'5?s! Woü[yv3U(7`|}! ^Ż7a P/A +L} KL~f.'a<,5>}<}T|)@pCH{@ +}V`.9w9q:ME;xRXiH%@Kv,I\>x]:ʼn>?N8g GќO\(G`>x o{ׅGs.@owûGh@|8\"/Cxg?yw>lab83 p?N)ܐ?S1'qƳ1sdQ|vlPcCV86;z` +A^ *D"arAZZZZK +$ķ"DA#*rX6wm>6fwwik ۻ_8lh u6׉gMGcF:3:HѽH_D'GbC{( oU? ͧ-p-x`7^JE V75oGBuY + lo˒ni!ٜP͛;76&ݽNzžXGqG5\ג=8'HrmJz˚ɵVi5jcgC*{:uzsmk=Gg-Jgw3kU]2kZ|ΰW7jK;W-yTXh հZ畮ja5 #;'\O؛꼔175zl5goak1,kЛb_d xTs*K.Jqbr.䫬Su]QƧU^7#TW8HƪrRetlޮwm<C#eaUaEʬR¥sڋX1+f6XME:DZLE8>y#Va$i <1".PZ@mԲ'tM2Yz&SRih,CʉQ3yj5[3RFNv6KVRdg,"+33yfF$Y"U*< d +$d\TG,Hf$D,^P,bb N"ܒ!ĕ(>#HG:&$L~1 b)4~э)p 2;IᘞNJyLHevBD ^L('.z8b({zDJXHD/G?x~2x: I~~s+5n +"HWЊ2,%Hԗn~5e@@԰ (,J6B $$qk[\ ,,6 $ hOtL,:vi%UEU=~;wnw}ʉWOtEګrt^]AċK?g"lt/F§p~}Sp-{0 3a^̽YIųd 3 Q}z[Sk>ʍM$Հ+\.0 +Gs [-d As8?$Aj"fX`!E/πX>oجg|0܃xiL{ĤG !A raʥw<`_%w)r&X'=r"'%LA uNܷ`0LGyn(P'$R* +YBNŃ*Jϣ;b,ZÂ4C+4nfk>(j׉i-]_f)fYmǁk}!~0>ZV}hF\U_;8v~eoFmm_ZQ~ua^nFa~[zA^.V+m%?'fSeѶes($c̵HdiYl3R2j)əjuRƖ-6oKQsgԛ"Ri[RSoۆM7%Jؘ̖$%>iÆU$6$r%&$R%dzūT|JU\ER)t&W*) yF [6V.'?~ZlVlŖRF@QrDK]G$޽ck+7 _O!*=g S#$᳒z : xD|$rI](6D;b=-xDp@Q&%u +G$k IoI_pD^_IRwiKW@ҫU|w2 sDO%$Cij D<=k,HAE$^G z8>)"qLsoE%  + QwAx "nIw)[S I7'aHҭ)J2#҂\ A&]vil5DžQ8?ua:7 a߀D,D0?d E bE +qrXR /zq' =_،FWALzr+ AĹ ?nrQT/.!;OB'l}&@ &,f\LyA 90;]Ҁ bAMP +YN:SRuhi9s1t4t5~]t;LS11]؍~e·mwa +lQu0܎10vfǝq,4tʵ8C48?vIcbnƓ=m! `w~k56`g@0ɡzYuc(=5qZ}]4v3[C_M[gWnKmuYm5[fK%[bj(B8  zCxB;''؛]iH`r;sOcIj۴՛ظ\R|2Lb dyɉl|D6n%hN/f1;3IEݨqUcTd%u(eH)i։.T!a`'/xj}@hQ/n$8֗ŒIGp6{P;= + u3m@:az0כss#&cs5oO{۝y2I^ԗi#btyD 1,ӑhE5bZ +pC2obm-R\pP3jvW,T 64j(GkЏ4 X>-Gy{5l~=6^˱4ؚ<(kAocջzv1z\NB]N:YX_Sv!e̱j]vNƳ"YZ3pf`3QUV $:Xi!*ռ<K[k0k i zQ*^P]e%-JU(JVjJHR*ȕ +X (RdrX4L ܢA%$b!b!Α#SvڱC>}{936_wi~|[)V@=Q3B[37|=< J 8n$q&3kuzwz㽿kS'_=NL"5Ա]vNj[;k#ۤ*^C"fAKF(0TtTV5*F2h8'cԀ= +EQ\ pspɑ1?P"= 9 +*H .:܂ oP~ȣpJ +>kfirZ0r9#h>p=8'iXPO/PC&Cީ}{ d5=25=65}txα΃Ǻ%9}7ʼUh8o׽Hf߶[mf0*w+nfLޗ1g6JxuP`+^JZ7رs@jZT?ScS^ܺz.i߲U}W +M+8y%M.#o(MNOdcJ]"[3.l *j\Y9!i]1iY>BYIKjƴ,J v -PExG{SRGdp"$CiL`w[@FT?ԇ v:(o +|=lXv(e/CyӉ(dD+1REL}{jo mD;8g[8X5 qFMb"-͘C>X el~=6^˱4ؚ<(kAocջzv1z\NB]N:YX_Sv!e̱j]vNƳ"Yj0  n 6Ue5PzHZ\PiqlXͫ3Fk*֠zUV++*JТTZRшPKP4j5JV*R\PPB./E&gxLE-JtqPBR*b!b!$C@ \Ддa\=Jݜi篻 +?nfZ%ivZQ.Ẓ;vf|-{bݔ=Wܠ'"x(U +E/R\{ Oq~1L~3@T _Om$Y_H@2E& 90"6&8q9t׻aoϾzFg4AFx[Ez=/z~2jxBmT-MT|d(\\C2x}U_)_WQ^^J5!xq)S2K!{:;%tfi!N:C<$Aoq )8><A ptD d, ̏U.Vcb`VFa P@sB@4 +]0 <@E8ot Z0h = ;܀tM(ZEk͚5Uv{Ѯ>vqY aZ #ɳӍ_xvS4 +i g{86Ƙ]:ӺuaaPi92\D}iͶ8V0Z5znEMa$af&^H9L 9*g 8= :դr_yrhjY&43j>%w.d~ƅ̭Ѭ +/VK[|3k@ ~5}u剄߶??^Ru99!Xuz~> RX5? +n!} Ɨp__=@!E@@^]V|U/.bP"+<<=p +2I_Q@;q;g!۝c}tZRHy\@ñG؈\˯ MՖ5wM&yG(qD+.X셾|-'d yi,~ |$?Gw!͐{0r H7?n? i8~I0"pkV/ +zq!.<)@$ !-FϥT!Q@JN%)B$' Ip8c$DuGt%eA `T\gHŵ!H+!.e{%{$v]lG6:7Dwv'!9ͬql61#f08D?:9 hّo͈ph:G*΁ h׾^1Q{׉Ag-VeFZ C=*_-똾[{ ou/f`1@ $)(.9GΤJ=Pl#EH9FCQ,FcڴiMoyN#$<*T"C. +Z&e~˞0r+u,-۱do53sϖ=v͎ݸ;y=f1[LPoW";{5j虰cbf̊# !4AlgT [W:߲n+ Vt:7,Y~i\ '2T>45k$T^bzEV|"j ۪/l\ *?#0OgsqK*_4 +x7vY}7Βv yIL\'M`88Svp]v 4֬\MJaaVN3 .f6 VIf2eXsrxz˄ svDb3)cdisF~g8]VfAHk4Pi2Aib:]ZJ%( :JVjJHR*iJd +<w,Fʒ0Mƌ8aI&W_5]5]K%c )IƼѫrGF͜*8oFŻFgi޿zWJ??H CĉDq>*M7$;^z{jrK#0Ǒ #7 ^]KWSDi4"مzz>5R8$$#N'rL{'ߖ$H"9)},Yp(LG $8Rr#׾J<I?5uipqn:fB83Ɲffީ(|fwێ8ǷQ#g:8y*6]* +UB86$lzvznlٳgӓep>wFEssgQn/[ (~>s>fk!a;AaS1q K8'1|ˣ˸LX/Bh<jlcb" N)@d` NLʈ@$! 1@xnQ1Q 8L0 #G֌_Hƴ/zk-L_{uZ [sLRu죬LR˗(Ϋ8L/]db<˺8XX=1Gf͎t[g.$eMOz%x.S)Y&iKg;9031ޔN 23 zȩNr t 'pAmg]BZii;c9p9I-zNn;N +#h@--kMF,}WZTNmnvRu9͝vuL$Jعc: ,یY M.Kn 5:MzRFj kZIV#}zF5) +sUN514 +]2ix0hT5|*U$[ԔRl#65H +2LQˊMcXYD]EsC=\U_UST[rp4(7(jzE5G:AqmU%J9V!'GT1D);VU^QƣUXYV /))(-%ˊ-9~+r*deƞ)XAG>Wva>C߽p8}'4?O}wP݆@p}q丑 + M݃@."$&[ۈzcM^: +^^KK+!(+]Gvg%Iݚ\@q7pM>s\Ea{3kw:BN0S3!I1셤vPxoo21 צ:&ayG40?АNz`lP@E % G  0 @0bL b,KO`I Y"_ȑ#OT\>a(%waP& &!FW8C 9-VPB`}&ߞٞޚ9ѳ7?qRڢϹ9ػ<] qwmN0gsݚwotlLRqxւ)WY [sL鏊Icy ^TlyYz6?s#=ّn̅)YCϱمyj8%pwetICagb)dgG=SI/ 8N;7&vr&hsE9Y-zYSwG{ێH6eKK'EZQ<,Ks_Uq]T]Nss:h6IV)jd&`2Y-afb6P9А L$}Gg2E$F3BZN'Fjj$V FQs>*oI  I@[XŐa7jZjR\22Lj& bꙞV jjB}FS͜6'j%l}W-S3 8?UұVL/Do)mSҶu˪*jټxE͛$7TQE6D8*ؽ1]WVVMwNUP[mZ U[6,MVr~X'淋\ʲkieJnX]N([] P~Uu+Kpk|+ʚj")ii+ _%'}UEArQ+ +ҪIU|y"%Bb<ZJEV\^N.!%eKsJ%-%%Y2-_' S$˛gee''3@lvFeb5RҌRԒt%)Y)b2j$+1ǝˆb%pHb8Y+5!^ș'ƑB$G-LzHO@ -&E Dl,7-ňus\D q"4kحnI&BcZ="Bbk!pNfZ5Y# XLV(cb$94T!4$$IbљF z` zVӉZIhQiF[0@BRAB@҂KЇzz՗ ԤeR'eF`}F%Cw?Uw +d}G@5~ g@wAczI x{)~wD1RmPȒ>oBH֫ MJȫH^e"Y/Q# K b<_{39 L\V0bR avXk$'`^EQI"!-/EϡI;^<ؐtl3\K0t}OOJKѧ&-L.vNW'z[/υ}WCɠgs #}ޗfz<\ӝSy fþGk3~t~*ܤ"ى|+SAdr!Bг4uoYPKc"FΌ`]8O+ru)!svsNv:gNv8O:I.D'͊lGGtmc6ֺe:rPHhh2gX['{d4,BK@p7w{ ]1upk$S/(uCMmt ^GvRuRtxU{l5mRuMksZIU%g!UV;/2cU>0WzJoT6&Rim$9,JI}&JRlkJZhָJ+j1ZkQF)6?FIaSmRTXWEo6TW*WV(HQ1yU2iΓUrՔrT+U]YZʔ()VU^\S^RL.+.)$W%%HL>)+*,)ʓ\Qz~dlRz޽,ܬLIjv\={Ҳh++C3f-=5Үt494EiƴTRrjJ +KRʮ] I]Fޘ ID' r:^Dj$NMDj$ѤAK|ONNmHN쌝3vѯ^ -8A9 xQ۷F?& E>`IX~}C3ߖ:UOh9W=yhUk 38_yg>f_r?s<;) <'|o='B]uηl~HnsG͏v=!;ߎ?`gf=U߾=jyoǣw,wH?Q:7Wi_MIbR/dہ_W{|vK=j>}K=jΥ5ηUv.v}v1=ܾ=KQ.>_/[9ч/(iFSr;gDx1uP*ѷaO99ۨ&ٸ7WXGL/rk @ymi+gdNpuSYsu/M\:Skls +d~ND6&TSb4Qc:F ZD# :?J;;,2Y̠Saa(&hh %&9F p <V%z58C= Z/TE%xԯ@n-n,[Ku\2Ω 9&)Obe6~DQKpml[ڰC"AIxX떡e8< O I}2lG{}#=r~rt8L־C!/K i@Qnt=VR%p qJLn%i'9 +QB\mUQM>JMR屑j;}vVpPڜ+VpHZD. KIkSqU>0WzRsNJ5I\f3\P\rT(ik&ٛHfPJq%S]Vb+n|gweɲ.[r; zŀ)wBWH /{gwjv9<9*/řLp#>Qhdpqy꡸wheMP#VHA ʒ5m? &9U!Ϯ +,6eP% @V/ O/ +,<'@V,ʒ J@0tTheG߂ +:O;)㡸31ZYl P% w |QPfnZYlaPfnZY\?* +Lt W:veDF .푻<4)3K{n@pa{5V 2#>sL) Ή1{HH8ݜ&#A&C܀"@n=!kѶw-4=*2߽V\.=k$HH[b DE`B$Zw!@bAŢΖrгPag6 ªY%n,;e"tUWC . Xl6lz=9p1 H{ 8NL8>zN_ШQ>Uz+_eF.b=XzdzٌN0``u`љ6Õayǜg]=cr v\5}ך{bDVMt*.b>c;VVjؾBirTm[(L&ܶeyLҨ-Kd{yܖ%ݤ͋eZ7u" ynZ`M[-Dj^;_i7i\=/iULʯ4+4;!lo6B7,~ 6~,A/tEtFKK킘3jY3sU_0T3w msT5]R5{*Mo3kJ/'T}!hU2ffw+Iq*>BS>cB&I -X|xRSBSɔMjT*IU݁vZ'6J'7Lh*P2N^f\S-V' w5JuZ:je:wĄƚzRuakJ\SSR[kTT7XKSSMIm *yzܺPmEYN.,g289e%4UŴ)0,LWdW"yQ!G +Ұ/ʗVPJ +I<%O8/]rBA0D$w~0G+/'[ə +X@Or|_xƓ*x(n7P_'E2)5m? &5p/{åb<0 Q<9À; )L G{0BOŻw2!%E=՝ر}tdnGơa8ÿv@Ávek* \ﵐ4"aX.J;;\;@L/NmG2'Չ=ڎj~ߌ +DM^UP/5q7FTфL M'qz⵽]g{&_oFF#k9ݙ/zh.yD3[sq\`#Dݘzp3H4um +ϯNku"q+㛮EHKQ<0j l`iY~%keDaƒxޫy_EW C@SP FX(0)4s5@D"?*LA3! ) Qro߾W0ZF#=(drPʙ#y +*5EIJ90se5} ]^Twzm95\5} ˵϶9W+A;}e-2"8"!=80ٿI8q#YQ3Ӣt#ϭM7|:wJ nk95}b +tZu H;Mh>%i: +z[IUJ 8mk8ڡ,$LLȨ0c&N]W;1._4xv\mjUJˢ;-6RӬ#|NGrRڍPeVicV_Ĩ0kZfI#¨m;lЈiW_Wo+71Ju2RM}mT-=BIK͵bj2JBQCUea}Q1uGe|y* +T +6j>+wSy~uaBebrbe"J8GJs+JKrK./.*+*s+(ڔ8TR:XU1rE02 sY9lܬ,)iyYYC8i9 +g,5LFʡL3?K=!..*9#-=%=-/9MRƑ—BP$'PŐR)UIIB$R\Pe|2\-qd[h |E\H(<Ԣ09,d,|f' K ُOԲgSd??RzAwO' jO={$0i(K1KKχB[PH߿ Q勗 ?O|{HD ^BG Dxz^ o>K~>$= B_ {;{ a<ҷoA͛ߏC߀W. ./. 6n ӛ Dxpq!! 1|x X}l\,(\\WaO"+  ܋, Y^[Ke%/BL-"6wp{tkts6 l3 `=Qק1IYצA] $deJb1!K<́-ҠWdae bq+6;فt(~LiV(,T@o#$PCL J:8OaQ:@ ȁdEr{۷$([d8EeTp!TkZK#C=ȴ˵Zg[ +A_ǕԾ2em +=80ٿ7 'uc?+5pCt_?vZnT~O1C'8 4Z}N@4vs]=tOwqNxkpCh:β`ns[v40e|fĩj3k#zCTێPJrY|56}uUTUE_Fru6iXVد&6ϝl kXþ7\*jQW\}EqGj[m2 s>{_rO^WQD/dyjK2B %ZUTH*J(#r򽤤҂\ԛsВEٮbZbInvBqN^ +s$dgIʐHμl͢$x3<\OGNz\FMHuس<DŽEid{fj +ɖ,e$'ɱ'$ Ȝ&%ZS.%ŕ991Aʔv:0d`ŻDFt9M*3:"2 `3Izf2XE:_9.NJoY)VciFHѱ^Jkˊ2ZNGRTڨ()Q IQjJBTe$NPLq>,#IZL`!Wdkkb5'c_b#:nq {\~S*v|,*$F5%|‡'ʐL>^az  +GCF>?:$> ܐ]j80 Hz=^A s1Vp[7#B_ìzq-_gWBtEϗ D"D؅='? xx6T ̪sTx 9>n <*G\?s(4Nu@! >~]C;G;ׇ(g)Cw;T/QNnʉۥ`pAv;uh C9QفM@8s7׿Kbc$YKXX'>ש.g:U0Х *ط3+v?ovS5JرF =+ݩXشX:-c 4xVcJLq> `"`7o+V q X]pԠBe K^ܼ[;ju/^uDoKݱeTΫio޴}ޞ[H&Fj{vw)=R?lU&Jݵf]'U\GBE۹TջRkdU~zF*u6)YTٽR)߲rRfM+W3R S?ʺ$*]uKJ\ɚoūnFäU_UWjICwK W~9%Q +wH|QԲEo;Ԋ򗶓j$sm7m5xn%BUޒjVbAL&E JQNGbZ퍔춆rzY-uR2[jʂh.%e--\P#+4PUBixEłʠ*(e:?Om)V^^SF(U +YZUO .8R^$W@M.J rIRo]BK*sfi% 9Yx* X)'!?+C.#9=$78s=r9ir6!cRne 황)$[FJՓ$ǒƒ$2\"shMuHWb0)SRSNir"Xcl6 + l[,$l&&S0:c,~18)gѦXQ7g2#E z)Q/+ʠk:)J&&:zZ:ZKQidhVGi4$FRU*9 +R)8B1V8$-&Tkk._ Yp,{}xjD}qorQqL͎Eè&b!rG&Ȭ1HGͻ\P>bUo2T0<Ф{I0dC{#030ǡ AļCB>7f!:"/A<i]"KE `<`㰡IA xxB<8GOC;a@p$ ;a!} fn: +3vkP +M +ٍ# \? pPh ++AhҾ__m\YFH4SL`cz* 66)7jkl%ʼn8q$7:{7# B&p}oet$! +x -ay +sgDPp{ 5ManNI +sc0'q&MW1 .h}\abֆ-V(Q+`/Ap<}~>? g XfQ0߉r!%O=(w:ѽJ`u钢kܞ. 3cCfz`;F:Xq0C:ϜJ(Ɂ0ȑP0BB$ R RQxС' pP)h4 +.g@Hsӏ[,%m#g3#VԐ;4qJ4ؤZp]͆SĦ^T,;K\vӢnv҈LhAgݣ:z/0uITn~PȪ lV>̠U7=0ӷI;݋\6Տiz0I']AQu6(]NȧubT#(/nR (/]0;8LG5ްysbL~6޳&EOjpNAq2 t:Z+/VՅIN9DW~Χ36VL)vVd%-f IqsaJ_qO#Sd3( +D:VL~VWh+ +tD&7hj0F&ϠԫESUak1uyz;=$.+-IHJaerf%:IRlzr@A"+&-/Hr||dR\ߑĀȄGql +_Dlt@PxLQX#GŽDF A8<"#  #݆\' ˅B2T~2>&D*݉D1>F>a[ڮпaa%A_4epJ +rͳ?/bc~Z|f~*Pɛa}慌_P|? !K/v}N^N췎¼~ :OS/W=1~LaQDoχ"#8P߼? C?< QDxy`7_ŞQwa_|~'Xg@=7ܛOn{ mPDO!(7>\+\]ytg-8"zFs[]ywyQwpG{8޼y +sgDݞ65[ܚ07@$1듸k4Ԧ:FÆ"Zٙue02JZV,/4ؿ- A$`^? ǃγi sytsszՁ\aG +]RA'}uϝE{3N(2'w  9ihct# ; V +I2Pf)H@rQa СCWF϶آPZ"KH4WXZV&ֵ qeIwe¡:iW[LkcfXոM +jDr5F>0D9|qj(@yY=ܱ4}T ;Q'?2OFT{֤ ^MNui?㎜ b:*ʋ'UuElohu΁hk"M'S~݆բ+=ٸEIYCRܠ&dGWdSn JBk=Qu=ߨUQI(0n>,[lY%Mrd$@(۴ۡTN I6!K]g{%^vΝΌXT\&TGxM5TՕ*BAc!D+0aB^]KVrjrCh`\9.]U"',x$_([(HY@;TRzOEYŅreEr5؏s`qpA3&s +rĜ)*ٙ98GANݟcyWGd^Ζɢfg,>KND\NE8yY"]cvyNjδpg[,4FŒbmq)t)Ւ-i3ǐa6kKNKM0I&YIFd4⒌))4 8]5$%+zVIitZVXZJ͊AE[4`%Vb%V*5?qPjE~tS}1wv:7,bA^b1|A,/u*Y=z1aHg-H7nNɳy{l"A?zA" ;H6R~~ި_o3_nA_q[w O|&Cx|t= t ,ˣt?^{>|~ǫJw@/0(CE_ˢ|}%X&HE@<y/pYPߜT3(CE΂eT_*[R{egkQ>y_aP| +EO ǀJyn}g  < g ),w@I\?];NBpyW z/ј#G!՗ApCxPqg{w  wvff! _2 ~gӀ }^S|4ApNONNO0SwrcQ(g=ذ2U.@uh79θKn'DfUDf0f@0; +KND\NE8yY"]cvyNjδpg[,4FŒbmq)t)Ւ-i3ǐa6kKNKM0I&YIFd4⒌))4 8]5$%+zVIitZVXZJ͊AE[4IVb%Vb%( [2\rP4od-xhf_IoUI,RPzu>?\g Պ̳̳y]%~}Elq?ݓ@HΒa@2 Hf$(AsNuwwonuO՟ G1bV zGSͯrAvg|/ӽ==ûv.Y@ww`Y}w[T TܠgNI܃uz&y}{ZWaQqL;м=4/sѳ)ރyz&y|NC,=ԣ3yxzp;O}uw1<CLwj(=ܙWn}hn3G,v.1M,)6ӲkG\]$]<pi⸺ c$FgG8əa$L;uPtrt|tln0^%c7 0Cb:vd?>Ncn!=nu#HbMN 36ܡn*HF8n8k<[ZN 頽`C>@z@ b$1ZGu5I oq GV^uH΀lċ-~q\D{xg+kpNys+܇|ljgSGx%G&nݐU3]vPyP\]Ɗ}nmPS6|x\>BBJu-JwՕ _;jJ:H=L%u6Z;SWk^Tkr%tgi}*ܳh +; vm\*Ny[۷Tmod&ɜFQBE-yT~֬.gG\yΎ +u r)4RO\"kSz5ƍJUjJR_F`Tl26U2J2&5zI8RTTnŠ2j2j+7J)+J&U/$TRLs)SZeI\*(?”R^,SHH.+PʕKZOH.PK*) $d;e-ɖK(͒+6 I NYq¬̘c3HYjbri19 +irS墲1XtVj(cJ^Ef&;e&GS2$✑Is]f$jmdzR\DZZԵ jRxdI]xR\>.,1.%tmlRHBL5QXB\̚(QdplREꘈpapI`T]hPdX\`Dh\@xHDH_5vaN~J!L׬V TP +P/b[ _9*_GB1t^IhtZZMNj4NE|+@Ja2VX'X_9]:6TO륟' +y ~kG/q~iXx+^j9w| +ʜS A1POo-> +V\(X|+x񬎕, »;|w(Xg)ۛ@=l +Vys(XEy} 1}}e`eΞ9{^\ +Vf P2gϓ@<P2EL΀iʃS޹ {ǁgܻ;ٳp(ܙm:Vf3,P2V7g ,ʍiO-k͵#N*L 2.M\WwaC4('93d{XN*!868'ah/Q!MwM`;nr^1pqhN]Vv wj[Hmq͂gK+@}'}zk t\ݛT E)׃ t1  \D:^A'q LJCوZ+l Ntd? X/(ge\ۜt3ΟH<Vi4V <ZA IyIMO nN6M44Nvm4f%FazPR55lD#zI}.~}g>@i"lHWT 5iD%5&LLLL2ٝ=ٙݳؾ"dvr>\_w9Eߔߘ[%{slIx}<\k3tQS$.: EVIDh }4DOhag/'ϏG΍&#s#YSpM =X`d1]'h;ugr{tG)#;giFm#N PE NDqQXHcv '#֣)H* sN`!&C=D@w;ۡ MLϰu16?YSG ΃wԹVحZB`6b9f:ZͤuXLj6-&mNTVChPښYVSc#)UYVC"Aenj)M 8T) i,ESLzy^ǤA:5u5IQd֩pUZ!H5Jؓ K/۷vM'w}ؓ!Jk`J0'77)`牒ݻ [>M웏Mbۇ7}p}oܹ{* + +ݠ:x(5W/+Ub `Jq/-Cr,ž_q@>C֍9c9 +6칳]ι2^< \:Co\1Qr>ڶ:hH(Ҹ,MHɺ#"05ÃD|ȅ<OrH(<6)*#ϖDy  Amf~fy}Wx,Gb]#}m6.Z8nzAepT1gcDdbЍCÉͅ[Kšͥ>čŴzk -صsDߘ[%{slIx}<\Jk3tQS$.: EVIDh }4DOhag/'ϏG΍&#s#YSpM =X`d1]'h;ugr{tG)#;giFm#N PE NDqѶ(>:,p/,NF`GST8$CLZz-ןaLclk#y,ŏ3DgMDa?ɗee y(S݃ q 22E.XsW!u#ABnBiZnDE% 7-z{[l:ޝS[ncj6 5lTE紛h6a1cL0MSZnl5:ݣ Ѡ574 -FR:4EFSp +cC=ys}SSY:FImNk5tj4j 5z5EUS(J%FACNjijyVT%*0B&c"Vd"EMMX#Id5Ui!j)BXUYR JD ab _$!Dχy<W^NWf&!.Ho*= tDU,DŎk/vuwݢ?}3I`d2aHw=s%//s(\JT(lcB(\ $d- +p3 @adzr8i@x,qgڃԛYZ״bZX\P^*|^PRr|W>X_`bm9|F|`<1?!>u 3Pg=Y Q?߇CxW.J?C 6[X7њ#!xȄ Ai$`ϮepKHғ`}Nق$}Y AL<8 Hw2wA;c=nf7OYqR"\µ88WA$R?b@҅^t8M:%N C nD7 gDH;uT +`8CGD8~, 6h A! 5ՋԊ:=gVk-@'νMj@^4@>on&:hk,ݥP IP%`J +J\qGm}MM(#%Q ALiU''Ws[)F4.FCopunoo}>vbyGAC3#XUTyDwaS8fTQ͵-^QlhZoYiv^7ERRV*JUrpUj +I6*JW]RKJ[%&,iO%>iOy>o+ɻ+|Iߔ +IٺBBMIݎ9"=nHW 6UgWY+/4-+ҕK 2Izgŕeĕgn׋ٖ[L)M'g9b +S +3,HJg"҄"s8IVlݒF؜*&qE2_¦̤DD+<"<5!>,cg|a)8Rb\hrB$]LHR\@ _hB%&H) L Em 29.z3@HѦ-b6o!/*" 䄙o a~Bl",'<8  bn  +;$ @_+؟g+Ϗ3`F>__)n>>f~+6n +Ǜe/CCΧqwsvsuA˧r\*FsQTBJR)c +-1cLhK>aPp3m'Fi@ez0rg漙/1k%O9Ljcm/-f,݌vR柼2yhgiTm%+ 5e;&*:j ZFBBBHB+ @ln0ر$$iMF Ms|7ӓQK喆K-+sAlb+^oڞmE[}N[Qw3mxd6qo|\ř{-ɵ:tNua\ovLa˓8ƹ4T8ɱ0?>0nv=2g [xiMq=9N5=ֱ[FpNyW=ؑy݋ SFBސe:0\ƞf7;1,.>UMN#GB5:826}.hmY]hRoG邾8f/i؈&/FPjU(j] N`J͂:x=v3JMH鱚+ݶjQQ:-l&TEtЌ TU-ra /5P +IY E^SXẑu v(Y5R^Eb$VâF4(AJRrJ*gs 1tjrK:%xGYU./c+,Sp)R)$Ur5ˊeR>eR [B"/Hb/QJl% JJJX9QΈi9"FҢ"TNIa!*OVIA|FVўӅyylrs)g9ws*7'%-L6,TF|O:LTکLLjfF2Qiil)i\SSR20%9y?IBpWE@6!9%/Ȗ0:: !Ae&R}'6KQz/4'I/&tI=?iGa={㣟޳/ ߿JK!Dˁ_as3ϟ} ?786?a &?3,`w6@ۗ::Czsbn[s{M@C7/ +uky/!\"@p}왃kQF,!ݹ\!El lfs+Sc'> 86mu0QF@\: +<<+ܖ1ci`qH"6?A=#>D``f@&~:To  <7d2AP!#%`w$ h9FJX?^23yi&g$@(I<@~ ;92KG ]ˑvc)軹:vBkJs.nk2|kc%n\]y ]s4VtzgUv$dhBhTQl7Aεrq3=-(ٍbLgqƮKOUgeѷmA ZhzEAQ/Ŧi؈&/F( ߉jnIjqj_] ގ,c7TڄmVj5fBUԙ1J͘@U݂)PZ(@P58eܬ,8i^'ZjUZA+55\$FB-1j5,jJS ITq*%GDJUSTV^)i;J5uy[qeKJ!')X%M(YVT.),J +1|XDP|R'-El%KPr,iAwzb  'E@=w)þ3 L3 +}x[޼j2LfI{qr3M$3xz< ^6rW77Q`t1 B:^Oջ"qu]t: ZNRk51FTTR9!ZTڣP?@qݽǝO}oH{3昷cmy} ū↣ВL_6\CD#F\> NyvuyEs{35Z̩d'-N{~X}:[GwVIk\8m: 8@1ffJejDY 4줡J Ujߥ#JFCF23@t4̞IYU@1T5KS$%5 q_w%W4)8 +þ 1-cv.jK$;4*/Жҋ-M־bKWMiA_cEnW]1cC~wckOcvL]yҼ& 'U0+t}tΩFI]uSu cQj09%$Øc5B%;kRcM23H>?U3ey|OOBB ee{Rǔ@1 8!ևGC?b=XV@?S9r[^o{w1p3-3o!z0on#[js^"bv 7)b}: o#khzˆχgW)χf _UY+@$߃XC@dM\@$߃X/SKǗ(ED<8sG25ĺGv,E|br>X[=v#Y7i.9EFvrk'(>d]90)rD R۩9|Qs|}M5659bz#rpzj^L waWW;F`;#@tTj`LB` 62؉Nٱ'l&M;9Fw‡/\ÝyGf{ٜ\lL[br1Mcmpkm8 8ơY=A`D֝ +1.8e; uK`Zu , LhBh (I*P!%R2d<P~nGG 'N9qd4}(@FS HNO6wWl#C}Ay۾Sqk1X j8=:}=]x}Z{>iggsvVY;;k˳ؘqW<//CLnX[Vx ޳FYya}.~m*F`tiMjY輓/ueK-]]MKc!͋c&=3Z` ռ0IGƹ#iU?30=~TS`&NՎ>syIZg 爠X;0 kFaU3dcim(fb@bjq ]=ɹn|!Ub=-"5QYUjJGmkTZ͇TXLbʻMn(g4*:uNCCy^TY WfnǴ5cJMuS QY*15J*66hK M%FD=XW'T*jb[X 犚0gbjPUjTACM*Zȯԅk*pU9u +&Cժ+p5Ubr4ME@*\y)* eWRԋQP(WYfҳg*Y򢳨B饅bJ +|TF1+^咤d9e dRgs32$'ddHcYxIiiS3gx iaO %%'If$I?K>uJ Q(6)QT̩ĄTLB|Qe_%~ !g*ϕP4S>s%2|?a~b 'HD=G|)[ci|D Ap}P?'G̐ۃ{.9? +fq3La2vĉ T S15g;3!Ye&^Sh(avQ5Cv1fІk-Թ+vf"~dq.!  hYM̞h4j4wғot̾Of:lT=̘b9U~+~9ÌQmiB`p86 5ףDX@ Q9LMiIz8tǗN J@E'A >b/?b/_5e/߾B%! ɾ3eϟbf⏟?|IJǤ}DblC 3~{ROރ5!y1TMXVy6 +31 x +3߾ IJ̃ @,{9 ^;(׷AX/oxP|'y?/nr|~`殃,3OXψ +3_LvJ@e f>IJAzz<"{G9{LN{4";#!7OAݓ:s$2T +ǡ`P ^х#{lk(a1鞣9!f'D.rdg)=w +ھ*:u{J׵oKVhk6 +KuNM'R6 I'7Iq;71>uljߚڶ:d:^ŤÌQmiB`p86 5ףDY@xs|;*:pH"c &'3d2d0&d0d9㜀ڛ޵wWu׵Fizf4B ^MjQ(imУpqJRb+b+,鏂] \i1ZH}V{щHzR|]rWI!fˋjĞiɗ{E5i_*77h-~e"6}z-B&o72lO7oOD\9# }o&6{n `}׊;hC |wKh香X!u7!@WWey_ <6{zAy3k,2=5Y jAS"&W<;& (6ps@&D`zCA02 .K}w!@AԬgŘ=3] iZKpFN0Ԓ&:E!XٓBfV @δq.D8N9bld{Ġk J诧M)FOڠ^Q$ku +ځƉS 讣LNt8ukpP(LtpPNUIaX;) + 0P4[Z(=[R.*sT VQHVJWx:FdTWW^:Xv}pΜVjuU͛W4SU8]ɕ?3cL z*& +ǻ ]141-iR3` wkF:*ʹr*X3yrZ=}\LNKYnr2ܾBNq{>Z;ZjSGdu50:JdjJ3:KXf {p&dWf[5'D֮JډQ-ӎ z1RdZ|@RM Yܰ1ʗ7?ZTb]U~Rm+Ғ<><"n~^,Ow_//.7OO.Wo).>;v\̜=ose6=wK9rpsqutuqrpqvvvr‘ɑ` BmZeSىQکTb=.ZTZ"FB‰%?(a >Kxb+b+,鏂] \:ZH//){w߻џߪ_h(Vl&5_I*k() ҾUnoh9~+aiZ`o# 1 |!`S}|HiwІzwdK7!>~nm,,\5`#Dxy6Ջ<$"<6yzA '!>7c.3" ,9ܳ i) M q1Ap,= ­a Epc8uG/2A12`գZ-^b$qYR%qqN.!YWO\FnԢh fM͠:LEKRjL)LyVh6h4ƨP*U٬Rʛ +RSQʵ2BV70grȐ2TR%)U6H TIU(aIX%zT-gjeGTkKVVQU$FJHU\*+2Ta-6 +kX|(ge*@{30ȧ/{G;7:|K9o{<8}ڤ0om̛)&@PQsk(L8[yu-U^^I^:pPqNAyQT9ioD%gP7f(UߞmMCynDbԡ\֮PQra4,"cC<0HEY ]Pg!a +<3ǖ`O``?,d'`̘ }싘M"ᢀI@]9<pdBbH& ADBRY!0!EfN:( +W,q3ޢsk͵n[@~˭%~i]Na]ط%5{w)r-m^c/\; F؞m#Y9?;9g96fi}sƏmL|u} +cMsNm$֕q׺T?MD_fb/Q>{anFGs^4-w.榥O/% ?h}"vHr3nt!=e~b!18=֐?a !x~1C,Y?@=#◻7?6ZRo xu ϐW" |.#g?Kxr`,K9FaX#\|Т=  3wO9^NN ǁIO9\#ϹC,t6th?#GGCprqxtk72rц..$hD, 3#tr8{=v; \݉Xw#9A۝ڀw+oFg4rg UBR@O"3y.nrrp^o нD^ =C[phKv3ROĜ(oIRM||!X=- y_)ʿ g]RCzķy5qXR>cK̓so{xr;FK-W7coff !^ϯO,59 +bjO@{zɎa漇x=^8/ AƇaA^(Cg z=;nn?ƕV* SM7$:*41ؘ.$(6 wNlj/rwKsJ+v5_x3}߷#F3VϽe{@nq_"ajK{n.n؜Eh gyĸ6+}Äq"-#9#<2Ru<õ6x֧)7g˓mu|rioyl(#9 Z&mP4$,0Y`n@D?"qq>`{fq4̓A) AS +h +3]q4E`/&0 M)Ap"9)ǹ Qfy?K&DGv7j[smzTQ.kwl:êQoX4֍Kf}Q߰2o޴j[6zs^ژPm[ YX&FÚI4ǨwQu'e#ߪL0Zhh+3zyM4٪\p.O +r ">c6zYIu:Umk᪱TϟߧjG摖jH/f*gH*f˧XS{'qlh5*&*lMJFJS/க30GXu^$*Sxhp*hЩTz +t^CUУ)wkj[xZy + ڂVV~gBt'Z(olMs3rruN9 +V>Y-*rVf4W gknNxN)lee1c3SSb2RO''ytS+&/:T"ITJI'"=8 qErD$b},!&F ڃ(Zx|4#,.u"<6*+, HHEtD+$jBDB"(  + +(0,$4(4$+0D P{A.!'2?SK*ɼȤ,F )pQ[huD~(K8QLTe{o? z!#$xA3HwH]؜rA4YR$^_ˉ%FB!_})9T"@%!Ưტïϑ_//(~ 9'Agp w Ox}t0?=F"=!=!2O@~x@D} 1}՛=߼Dz] AwH|1 # Ƌ@#7(]xv_88D#u +G$kϯ +=> DO)x@>mb<3d豃"n b^E%El[Yvn-"梋momwXȮ[6x́g 9Lx,mEn[FgsFl)u<õ6x֧)7g˓mu|rioyl(#9 Z&1lr I2`9 0?2gO18Jܹ987c,q}`0BLua3fBh9ܛdz {18Ia_ va#0lP!;ˠ3!=%"O* ()2P#ﯠ Iߣ/ϴl.6,m U޵w,kmW5uMWu-^ikokfݪl۵[ ˳4j۪Q:,:.漖V2]tuaͤu]TkfrI}٨Y5 N}xGqq+j rz:]꺮\QA QTP !)a\0؀!N8q섔aݻ۝ 潼ǼݧS +j:EN/eO-&BgӋDS I[ έDلL<9ac3t d<6E8:&N{I+1X/ϻYa׷8y?(=w՝O~A]L55qNEDÜ(>1uEc{xct&  G a>V#IXu$hN N۾$Y2DC1D۞2~xׄXS}]KeƘSɨfJDrag( \#9A2߿=} {&$(qw>M̟QD?,KxO_ / b~K_`?~ϟ}?%'t7#|;3|3a>H&b=b>N1^#|Os}ɝ3oijLEq/sG9Cr^9;G[Qa}Fٙ֩'=_C@zIq3fv p^Hb][W(- +qy*+@2 .,QYEYR^OxwvNܙNR tb:;󶦲O2y|os"86P1 +6 +GQq`[ُZ -`fD` KERiReH(H94XM33<T4MS(Y#ɐ"d7q$F%$}_kE)C ʙ{JT.XjA3hPXX(ˁyACSQ\ק70k[]WsW63lG/ \Zc>S#.` GsG>>:#tf)ɋ +ZLDN<%DB2tb^P֜,p|6gyLؘMƃkSI"1jyĻ2Y.eyG=`ޅC=x +rٟrOtwLuExΉrqc{2`J c")aAam_:ÉNm.D%ֽqACm{zAfʰ D=Wc K|BLɨה0^{b!9vL!Lf `:݆ }Wm:`"~Wk y Ӆ1-GkǮ !.DK~DZhzVX.-4mj314sbR0n6XVXHgCiҋtiVr* PwO콃WWԻMfva[v{"La[Y$A '$(g td 7Ί)Oߗl1LF3`f{{yYt^Fh0Pttr-kvG%J$x!Ƀs $h1c1C9o`d Ÿ3ܻWF՟f&CO?^+#ӧwvRpܭSI\'usaJ#9?\L)H`nz Ǡ[~~Hg?= G=P-]o՛)B60fbsޒ &ϕ:V 렀՛H$yUP9g^} +X=+sL]ιK/.9saΝg9t s@7<: +X=Ӡs<8 +X=՛{'tw3ǑnQ7V9sc z6G3l{ŵd5q"]\>Hws\܏C°>!9#@Vg>rS=l'{P樎w!@Y@LG;W^D5hd6<k$ZA-.\%CM8F`v,w@'6#B toG2еͦn:ڷԲ\CkZ}$4ԤCXQQg/=ǁQF*U* +32a@`PA/"0pjʁ'U`Gp$¹E6:;ҼHg#}NR]:ϤqF^ͩ'-\i}ć˃xF5n!|Gx{%<:ଗ7 5WU&nk+<_]5ֻa婁25C'*8T﫩*?C1e"vVF%Uv|HP҃{EUNekAUᵪὄUڨV ҬÕ[JH}]kq}.z +{ז4\Rعްau~{C^=;\T(pr'mU^k+vmuovkڲry{M49+r\+b6Y-#cC9TPFQnlTYjʖՑVdnYKȨ]YnM i]Ik26qqu1.c_崡!m}[k5+dZju%^+I(HYW^(S S&iMi~2BR<\byI+K+*ˋHLEK +shJ K rp eyJKg/],$K/Αe 2ddb3(ҝpi1y%˳pѹ)T4Ԩ\ԲdR(If*I JNEd&'3K)ć-MDž ԄĸdaO [Ą&Bcc䂗,$,MYk,qQ,بH%4ap0\ & *L* /"$D&"  H|C-OHP@o?SW/Lc1f͢ ш  +ΠzNNVs{M5j;*5/T"}W%S +b,b,r +ҏNO{zkҢekE22}zipGMa>NfÔF 9 ߞܯO97@ɿ>?W|Ï?燻ۻww(n\jޚOᛛ0/y>^_s5=D&м +s^}yye.e5uf%4c.¼xza<9p8;sxi<8'߽;h:w9<16{Gn!Ys60qؽHW]:@E]G:?$ gL?ةpB9.h\@LG;tv"=Xq#nSv-wվfr/j" 7Is6;gWOmG@ގdkSgtluվS˶{ Fjj|IOfl:;H Do6`Ӌi.`88qӛ[}gwa;Oì74s370}HTpN*8J-( B=rT\\棔ɁG G|d(S M(/Gza3x>@Bd~9A5%bRvU %0슢BRfggg9DfPYO_^fI RF<,iǏe' cRNw4G,xN6ˑcYXH)p$7KyhXF9" iC>IYiA2HI$9zpbʾ$'I$!J\rR^ԇYbԉ؄x)1qqSIJul,CL*UlL IR)TJ2W*d$"AÃ$qq"O +zQ/EI K6S$8痩eO AՒ~x>B.Ӈ1"OR$n߾䟫!>=W}H~I,[?_oqAoCoށ(~_݇'oz& o{poހ}B Q@u'Dy 3.ڗ_;p >}yBm>Q@/ +> Q@7{w\E@߂}y벴[Hq!on" ޸D{{" !;"W*p + +skH9ڕYp5.OAh!< L/MJApi(ǥGqQJ [F20my4,2(p  = = `z)|f`G0ޛSI ʅn=0頾RZ J%r82 <*(<ޫT(/"Q@" +q`9=a  R&G1 CJb^T⻎S(R!|rJrlAEQwzwmٿٳ龺r\;lYsn_n.쬅8nطWB%&۵Ef&ʒ$YG6.)1F@kz)?uN)jBJFbWU Ũ7?~?~7? +ށvd57&n~(aBW'…cW!^{1 +%Ծgy:<\ytyp6Fps{C(D;'ǹBn"0/ ׍O`C Pu1xR@)RB@̦ʬڽ -[ .>֪K-)u4_WsfWi54W1:cuU]c=iGw54Yh7pWC;Ujpn\գkU$7VhN&Kpt:HH{:I{5maTPѻPUٮlJ{66J7wmVsFDQJp%-xZFEkw-ںzZq-j C+زI~ۊ¶5+<7-5V ˦ӸַTqOiq[ȹٝ\TƱr"s]}iIcy9q-Ժt񌖚iD5ז=[S +eX].aU_Ylw*i*p4j+Yjʋ q2RuILwi>seRY3\* ]E<Ή(sL^ r3JbW.NX:Ԃ`l~)l&.5eƥ٬,d+a,\jrI9L L{Ƅx6Im1鬙zR/䥝bee-F:m1Ɯ3pmFj +MzJ219.!-DjS 4z\F'%%&hhT"U(Ȕ11rIFI\e2 $TK%:D "1^z"@$ +>|G/0.X/* YBCBi_%3N>;~||@O>˸ⳡ1tN}d0R2kDf;{B s{Ο7?AS! |o!rWCa5vۙ7q[ܼ;ڙζ>$pu]p'Api8.#XQa:>,B2Y-<^|gCL0 +00kB`dFFZcM +#2l1GLeX[5Шʬ,NI( %9)@& ,%$ Hh]F(ѫMO@zBT 0EH +BݣF](S3REUgΚfmf_,j w7;Njpc!`:Xqwc]w z ~$Za}"=^*QG*zFQ؉zoC?b$AVRE@Gﯥ=bկ?u}rSDJ>h~1"Çp(ӻD|"7p,>,D-8oo#.J}Wo_u4_q<Dk䌵:Be˃- q~Y|/kv?w!nCpQܝr1 7]0]^S|yLIJ`%Z)P v Z"(D +HrTJ&{H%8!~uʇ+$H"AJ@_@$uyqad2U9ޥt^[9vWZ=6U[í֚u[MFaa^l1m/; 7ve[aw9EqCd^ fyDa Wf>6ּAa:wG91l_64ʄ|~}ʪ[$_ iqIni S8*di-u #aQ5sCf1AkcibiMjW?G3s@=݇iZ*L6!RMtQiPuqԣT# գUtHF zQ5QrQQ +T9 8; z/ATcWtʻl:1eV ]\k+k4:ׇS[G]u" PA&PGB!QT 0%ظQp؉BIv%q.xn}']t>݌w3i`F3Z6Ա7"llwO*K(QJݛqě= ;Ni]5J6R*(*X8ѐ3 HH=konpE0{kն+ 6jC<˂8-㪛>\Uߏxx3*>]yp ^7p1*>Vy.\yY]rCsP8 ٗy2nqZN%cg,\F3٪Udb̵UbL5brʧZX)e8a)JKK)f&jfLFdJFl0Rh*)S`,.֛ KtP,RP'tZ>]aa),(.<2ORijRR*%N!W*8B.E*e8R:%^&gzެ7KlqY_\DeH^VVGF?W~V*{8oE~)R1PJ`ރT=TI.{|EreHEz0o \~z ?_~z˗~d|/%/|^+g`eBYOJY?/駐M"?ݒ +p5'+ (Ѓ'?w_5"OKD~D}wM*C Jx}D=P**x)Q__*5ܽjݻ zug d}u//Q3u<%<Y_+E}~: W3S@ԭSp$t%<Y Kpǘ +ٚ Mzߕ#Lfeg|2Gttyr{k@{% {ŝ[Ygg=֙ݐpv= +8p ?4sr@ ww 30i96LMldDoVknKv2mFل-8iف'@;N a:H {k]k^դc9V1UllFϏJ43#hn"hfIԟBidPmTİl2`ӰI@_{ Pm2|P/q$,9\H%$t,ЀE5C +9 @_W7s'O0?0pan̾tˇ s '憻 Ow94y-M8f8gRg,aޕ:W,Sq( 'qwwwsX9Bf8Z:~tf #ydYb~?yde43!$O&yΧ07׆jo;0Iڷ+uZoͼbm {&D#&k#ix/ӝ9ݼcÒ̲ęC.:+ɵ"diޖ3u-"lڒ[>#ibոitIxH?f5lX$L J)NX4hX7+6hXC + O%ԏィ6R_[`WpOV\]ˆ:Sęҝ-"tb\OE=}%J{Q>x'y㔶fqurvF\&3BJEE%[0G<rƣa# ǛBu `o ӂږcF\MsYE~\uSЇj9>72yU!Wu "cNk•NE(;x8ح:Ŏ˼{i~Q-ƒᱳ̋lWm Ycl|L*Vc21ڪJ1 +1F[E9P]nSRe-C2SRYưWXhE奥3Co5te b2tF#Nk6r)4)0M%:c Kk(RTXR )(t\Z-0OKQS +Ĩp=sMT +,ԇ9=Y9-TߣbϠzD0?| DG*f5pϠy1sۇtͰ7<{}ۂ{wٹ-;h^lXg¦[/nq`aJ; &W+@5=K lO.)ףJs@9Kk ݃Cs;7ܛdCsgۂfz cizn`clS[#Qd}R7O*8vc;'!smq8˯ .K\:v(ۅ~^ҹ[!ޙn@pus `CA`S0!kXaͤU`3GZ'-tFfCM4بltt!:ԇ{z +zj%jH^Αt)ڋ,: @n1dV ĚӺKвSV,5).7V5W4Tx&McT^>[͕$Ʃ0)@r5oSBVx:\@Nxˠp4'A- +@7\Ԫ5m!.!&#"?&,T"Dׄ[EEF|͢Bx>@߈ A}ey_Hu,>ֲx]&@j901~~bk|}eYz o + +_oo1^^bn>V)qIp[s%g +Jww%N+8:]]\X .ΟC$(@; b^Jws0:{SM'iJZDQIbҡZ:m.<}>)e¿UOZ<'hN?snYWͧyzqIcOǧoÜV*9Eg>jO4_ +}wߏTv`C!P +bk3o+bz}1 +Vf+ +݁ګi 6P P2ۼ/n+/7 +C5`e6=3P2y..E?vyt^ bzx3gIE0s(Xi`e֞Y{M+ܝ +Vf+wƁgcʦG1`%!M;!o)t(@pc(XC6hu 2ͮ .K\:v(ۅ~^ҹ[!#t dq0:Յu"IÙw!k\׆@m3i3''[{y7hFCM@`  + +EAAOUD_ I9r@ +A~@px0uN<[E= h-,ڪXsZw!hՐF*J@P54U +^sU"֕J1 fU**b:^M 6vbiNqw5[S6;}*O>=xgsϹGwFh?AyF,C%^&-@YN6H) "@ MXH`F$2Y A@,5I +h +gH@xbE"*A&# ߛJ!K$DR\'!i({[cpŽn>Xv:;w=(5ph<5{+>euwmYe2ݘg]AZ3,[sfڜw\sm:Ricq} +cZh6_FTǵ2քY-yqWF10aK0d[v Csv!t L]3N5i&/75C{(D/F3 vAfixGXpv$+PvÊlǨڸ,Goka8/{8WsUevP.):QNM8;GSS``yrE־˦R6[P&.I˧nԔMZTiQÔ4ԸzuWՠ.jQEf=΢d֫ +M:^FW]`R3|cmuaY5|KWcu>#TiU +%Mu%%*=9gg套e.]B/ˑV+ '' {] $҅l!)Y\r2$_̀2QI22PI<!li A)驩))3iE'.%))!%s\gGKJĞMH$&>38y|\Y\l!AIbr#Hr %I\b% I(Z,EB :b0ѰDq {/E#K0Q0fYF7RǧrOEyKDJTN$hDKiql=}}D9~=ɳ@G_>۟?=LJQz@p߿zyha~x& EoQk^AQHA<w!Xn|r$LJ *pwxlqs=ypo^ y㵫$յpߝ|p +u- +;3avBv3 07gBn̆lۚ1EO0^vru,!h}FBV68ևp-/li d֋}f2 9EvFtAkMtMvMtx;iXm>m~f7C < +1mV}1RL g)I A H_ÓIQb IX,4 ("L y@-&cHʷ+2@$ÝALǨ +Vymۻ1/5n:]m^0l|Cܨ롟`Y*˺c]fYwܖE^ =.Ӎyy{dZp5ò51_u"\yS|3sm:Ricq} +cZh6_FTǵ2քY-yqWF10aK0[Bt~Aڙ~fk L^nDkPډ^fAۍьi=>lSv4#!N[Hd5V>vKPU3؎Q qYRSRqT_q<^7/e\2]N#St6#7*ۛqv:EWe=LEK#XYn}=M/i *mMf]$%Oݨ)FW)i0qb["A]l1ԢzE[?&#!@BN*oAOOuu=߽oE]X_z'Cɰ1*Uyte懩^z-PIkU፲=T, ^67\!X8*̵^S|4\8cۉ+*g+c+:KxEg)A**)p;Aw98CE !n`bpڬ,."<֗Y-RY簙b]TeҕqybQk3qXFD{E|B>>|cKvAO3ԅz=.E]qȋCǢ 4hzMTnNeTڜk(sl*G'+=;+,3:EJEPJ%2--4'QdqHr 'Ilb'I|qX$ZPDEQ0](zcG0?-^诰,f1țb!%pgV+$g3R*˩4崌7rJM%L7)q"l y:%!<OS%=?ϻ}oMv R &A~ׁtTB <+eH./BJ}uo7_Bj}! f)`3H&'B} IB;/{=yH[ Ap,$3 D~^#Ni%I \w$N#c0Ox.>˅}8 s{q3clN#Mw ;.t/>vi;" G7 @؊x ~,7{p6Aw#l7`l=itXFP5scW01մUc%Hëgm[5kx%P/0WFR=1Yۺ1^0@ +l2ԥ,X!_J +@ERJ 2J$! WD_!f6zHQ!xA4B!{^G2%bB$(@+Kkhq޶̡ξӇzNtw\~a"z~WxwɑZZrmN'nIDYg;?>Fޘc'F9{lFbBQc!||l7!5E 19mt2p;!ppx jd۷uai|g a|`lu6F6߽Oݮx^c}LmQ5ֵ:^KZöoPuV=nmYS30׿z`aU+[x76Wo^قKnakdzQ~Eų+H +-+X{M(X +ܫ;,Dϵj9ɵjDݽ˚H,]=K9UtSPE% 1]-1z|B|:ZE.oՖ. -ı4P˥_SŕkHǒW+i&Tۃ*^z-PYeW{lM5krNesኣ\uk<qNU3Vr2BKQq ++$,Ucp;.g(!mqX NłE2E_j76T*0Ls1.^lb1jm&NѨt\TGS\X'Tϖc7p.2iPe t:yqhX4a-#Ci4\JtMv6eZMPdggeƣTgҲ22T3*<]#S%BP$ +,T.$2M,$Q"X#=1D (*B& EOqK ,/7 C2K !]t2zXdFBoF%z9^N+3JJM%L7)Dg$锄lJ>*ЫzrO AλonMx~z=r +$]A/CJp)Zg>ڸ7t c07S I40*,Ftpq%.n6~kGm7Gfs|u~3g4}.bmoyM7wp6{7Wyu/eŎ+h_o籅06B'5w!̣U0[,i-;x{ xE%G7Yl]vF9 gmq3L6i۪Kbe8-qȰ4mqaa. fapw4ׇ3! @9ۃ3v ]n4NtNd;L`$9,jԊ0#-jÍ[m[hiD bHg5C 2hlB?9'Ccz,VE $  Dp@$/_H2K䷈<JjC! + @@>!ȏ^eW8t^=:IL Jw +S +z(={ +[+Vݢfլ:բ?݌lbR9h@c=S])sNjYeW/nS0`Z+5ejMYVS ft U:2k+K(:5%C*ז^}E1:5"Z&$S|q.&(7xy^ݑܣ,2dede>AɔPnzjlnF]LNz*.r(;":+=.*;Lu4"щD92=1!2-9>"5)>w$.-"*."%]x88V"ӑX.a1\Bw((6Q(H`C,;",0*" 2.$0"4. <$?AWBcq9|,ߠ@ρWxy|}|}|!x{y9!zdtT$J$v"XBm=1P," 63LBcY~/%)^+,d +"Bo뵷[i|?~JJ+"kOEr/,_ ?Tx) sg5 +8}~e>#y{!}O?!x<.?7|} <&rwavlysWWB^^^^츂6xrlx@t܀ELqp<KF. eap|?s}@1}1 =@1v ]n+f:2mvD8 I:D9sX cǁh9iPn7b5HA0 DM#lmC:fn>zE$j F tt5pk:tp0kШ.ENd@T` KD  @"B@6ZH";" }P ־~Ӽgsiyfy^i\שvε(MmNsjgV5W[fV6TttUkzL^kl*fR+z i6MiU˓e>ڸ8) I5$$PEHI4ac7ケI؉^uno)wrZI9 +#3IfWژ:ZG",#tnpδ4-a +in538;2SQsb"2qa8K"a3h/0rH?hi 40d v;=NXP7B7EE;Ihv7Hsk?48 m0:Q>XQ.UfT +i:Zu~bX(~'Es̼f6v'S3=vS<2Ȥօ.&o &ŢGYMNa1Dzni876Hq&cA+ij@-:V"!6i5u u"N 6hi`J^U5jB3)*dZVQTrTVԆjd2L ++E5 $1K51LKq\*jD%jA\L* + +jEհbiFȨPR%HU0"dS$`SX]QΦ@X^FwI~ei WQR˧+PtAaHni)0 WPX).(e>OVa~>̂|D<6Oƒ8Oznv6lTZVf&̌㧧1H!%%-5OMIKNQ<~2#Y2K ƓFq#B8%F8F7W^իb/,?0DCHa2{4)GJ!(9C>LJD`~Q9"_6_`)E#>ua|?|^p2r ɍ}NG#vcyp リa *HȽsw'r ;`/ʝ^ !y[.}ݛi61:[kV0\&,ۋra/V ksyt\e3114Hۓ.MaD8caǰ#CQA0jmhVV- pHKi(g!3l/!1n.b 5ׅf"&i!Mvb.h0h'1׎XLw/ LxT01{uN4(@^@n2<0x xD[᠒hx|.9 K4?[r$Cxzsm;i6:,7V}J֦}{ڿ鼾h]mvn5cr3uc k&>:y}]8w}kKW3:ە7ʶ<~i%m/m϶#f_/"Yims ߘ`d]nm̃X@-VF:yi8CgZ 5-a +in538;2SQsb"2qa8K† cg(^a~88haDv4{nnvTAh(o~{}^kizq$S`Vu}\\4ͨSu"kPN03ylN&(yf{xdnI 7(\6#LފPMYEkI}bvsH#adg77L$Au0MoX ZIPBlѱI!cujXA[@uHS +jQU6t:IV!*尊z k2"T#CeRXi]-L%a A\ЈaP_KR@V#*AU bRQPP+KtE5BF*@"Y%"Qe__MdmLz$*KNi!bEAEڻ"Ŷ~ꝙp0so]sx{2N9!1F- b a!!(>b,c`b91b2tF#d03:' YbMN:_Jժq*O +ZU*J +JDɕ +L!Gݤrj2-JHi7zE1 ͤ(~P oAX>rfÐ j Of%74cI%8|QӾAΛ rẅ́;@Ϋ;'RD/o(҃?n9/n$: ]kPԯW ѳ+H|r^>yr7O/S' E3 ؟@π='6?ϐh9H, ry{A@t \bx1΅}.\1O#s{ 1w̩Ao 89@Ή0Ǚ h 21B`]:)pڷ9|oHv g86jn 6ႚ hdLF0<PУg-XwY A k5@W#@czy(]A眎\.gkA FC +ژ{ZJz)Z%m5pVSFjSjobmTgk$,+ּ,:PJ$@Ŭ4BpOe,CEmE榁CuGώ*;=\gtVO 9c4TrJ]Ϊ#3kkNuT ;*nO :JjYc.wp,?Itl֭ttGhvA}5Zۡ^7ہ>J`k1zD1}]5{:>||U>L)S*̧iܬ t3|z8˹oϻi +Q&>gfQd(P8C4z?who/ޗE bL@f_L^ſ6-q}_~q޼!}G1]#3x~k]eV="er=#%rKgy|.w=GOf~}Eqk E@ (9K$+A% +ȸsE\r=ݻ?쪻骞垻zv߷jf~[MQ=ݱᄀݠsyҷ+oole7+lfԼ\dPbW /=c⌚g\Q:;g<=ݡUv\Qhs2 @4#ҹg%Q|^Ff0:xK/ 4%'>$)jnn_oؿ0,tT,W-s1^¨Q5?d*fs"ovXfy'K yWDv]9GJg3xP6= (:KJ.{WAkg)6K+Ԋ{Hc22t^2zRN̗;}{(%?TA8&}m4@8X.ji,rd#%c'pߐuy)cg:gsJHdj(釪iL5E,ikR77HTq +)J7 +@(+ $>{?iK/__%6?/_[Yhl"l6 Vfb&EFL]=`?4Eb[|S[/ί.Յ <F=>\!zӻÿ~Z|yO,w4y6U_>ӈY={6qN>e>Ӹާ5 L5g>OnǷBZFkx +~e __"C+s6 +V桧T_ +x *X9w -SI~T2iA+_3E@w@+s6[I3o +Vy mMCng$oVЀ2`e̫%P<"h@bT2i`e̳YPʤA+'@+sP*ce䌺3@?Mr)m.K^"!ݝۓnM(9VGi7$+Ȇ, +id< f$ KĞRY3 +3mTr7R]:)P]&:A1\G;sQpVmN +[{&?6v 9FB|={Tٙ&Q{琠0ƙSu5rU@BzwNIXNC0C[ڜ~ꈆh-HgL.Fՠ#& ,MܔG3yr=:׽fD:C z=x Љzߗ۰- 2Ϊ Jk'j^jpLU-VUԮN:1:+x _Om$Y{69 P%PNH0&18ƻ{{9;Uݿu3F载*O{SJ~ϭka7WQtvn.#\Wp|έE{܇./3,`>G2?yaw fa펳36L;̹90ˀS4±>n_zXYWSue +,#qKX!uqfYbe?471NZ >qqwOͰƱq =X #&&p'M  C] B7عkځcW}GA`9N^?Vqig"4ݭvTF嵩Q1ŊQcn MwY{5av7BI6VI1qjZm&؍ +QboDY5f7YdnABɜȤG8zÄ%sQ8 UR[Vb5+Y[6hP: QFձ4*XeZ UL +XNjյ8VY WԠTQuJL0`j9L%2Hؔ*L0~u($ՂZ_# PU|Zmu/Lė`%*O**TQ%̄lxba⪊r6E2ʲRaPXZ ++% JJxŔR^HV/.y;*.(9ZST.ɣer#y99;Fed=ʀdG$Hf&,53#c鰴tDjzZSJZ*, +#Y +d.D!%q+Y"^z] jt ^.< O +vfOO^&Dsq~zrM={bi/!/G|g <g17"(-0h={y-7ISv ?u9'?<ܽ? ~R}x84߽z68to7=z#7O~}s|}o?W;w[̓|z>\%^{jW`<.֥bw{,gHڈyc3F̽08 k=>vkeon,\_gpy"5" 4sq`ua*$سs1gm6GN imVNV-[Y'[87߻;sf{0 T7dDDuwXh lď7HO!m +@ SY:= |)#ҁߝ :dIAsS#@H RHI$R @2',FpH)fzI9pNJ]GHTJB)id,.k[u^?s|ޙN`Ζ{MRsL)@i|{"Yܤ4X vtm%}uẲZV ~8s^ȹYX :3snN32s¾>pO&lǩ#3V1k]Fײ<Ǽ4eZZ[a!VLst?`C'O 'z8 k;0ڃ0ҍlbwB4P0ԅП "t8FqwD}DcQv/BjG zml]^*QP@K9&Д~J_hw#Tosazqirݨ8-FQl1lyK.in@LzӬ:LX;9u0ÐPA+5j%VC}QmѱujS&بjT+AU60^ŤU4 +V]SQjzE JU^4 +H V#T2)MRT GPgBR-5RUŧVD| +V"1"bI/ULȆ'V)(gS$*/c*,+) + + +M~9Q/Wi$NI(+7Dzf"6"6`b/ X }띙0<$ 9ܓϹ>w +a}Y8w_oo[|==F/=\= ^o.DwsӹnZ0ogQ˔ YZ3¬BůrW/e< Hۋ_ |Q~I~~~z2 8}?#g A"D!_zǙ BN&HonS_w5!fKszuř!/iR +&^ xr8!@QDI<3i !` ߯`9>KuAa7N 8W t`tSp>'9&npO2cfL&f81D9 +#Cuc$!vA6 [0SͶ4'u׵O܉8`navNaGv؎Mۄl`:b1g3m +k 8` 5ZjZG]j2a_V*\JYC3iaG+l4BCy,Ԗ@mI1ćBtr9hi. +}VTr (et"R+239hJdJ@LF;J-͠R|F*d(;EQЗ< ,XXrdd}Be}k‰격ӵFVd?T6_#UrRW[XQ4E(9!`T4M(4\8?V˙ WphC!& tϭ?D W{8:J=InuB։fAM9Myt2=,cJ352w%IFۮ֝[vr`bz̶"NjSCіmŘ }vK[(ܼvE*OJc Ou5)L6f6 $o/#UP+&i[EnbCUIueBMDSɪlN0YBBuq.BAqLR\L~',/#,WC-N'.N)$Edm!f +Ң3Eyt"DnMI߼***<+e."lERxFj2.lkJiD\Ȗ\pZ"_<.$59>8%)N͉) qcI+6lJ`%cbqbAQW*>}I-v>щZrOZ’ er{-|HQY4sJ!jq.maV!WYxM9 +I+2+^C__Yfk//'N~z2 8}?#wy8׷Bos\nKt 9ۛ "N599Uk\/BS_晔لc^r̓y<I43# Q҃]C Y{=9>KuAa7N4bA蝫7ut~'WMtbת:ō9#G0|b0.t:߁D;D:9Hl# [0S?֕\5$0fA]BEA8NT'Y;zfK6Y;׾T$ݝsϽOњ~du ",S=>K~_ }{D虹nхf:6ay{W3f=ި#f5l92bEb{I(RaÐQH{~JR{3Iv hj =H4 - F)KET0b$`!bꖔvzJ>Q/JO- +&;kj`KEwFiX-MN'Ţ?ܲR6}Yi`ho쭑<} Xa/1&յ%3rwѢ]1TWY+ 8 ߻{fҜ?&^; ")7Y{\"7 I|}Sq:pTWeԼ2J3iyG0Eyq״`3l!̠b~zk0կO&zR?ޫՍT3at=6uSԸUTV*~ IɧϢ5s1n#P*'*ZvZJl^eGJfEĬ=bQ7yUMaMBQM(6T + JZI +BN^Gj&hjI-fNy|)OXCPճUչN9r\^_Q+[^SRW\[qT+(;FiV}UB]e)WfmY .^]V˨*+J,-r wTuVV)`Ý+'#87%FSrS + rRH= +.YpIy2s39%dd&df^:Ĭ|.?'>\[\FZ*ԔT\>1璓9$#lZRK"Ztj"#*%#>:9!L'"!6Kx|LLT|,!2.YسhlxLt4٨(¢##FEDEB#Y, ?3aaP?d8i"J$\8D= N$E"7!M@.o!G{SoM B\R>|4N߉~+La^/ zNj ËgTgO~>F~NN_ {Nw@oӂ}8O諻 w ǓCx|qGp>ۃ@-8܄7 pב `]gC! +p޿ +GW +GޥᎯw=آr y=hQkwp; 8^k@ ++c nn.n,2|\Y`\>ry4Iqڤ8Ǹm҉tm}` XsُqAegieb?҉x3s=f=b]k`˿Nn6:;^͘Qˈx [\nj4 cz1g\i7Ia +~C8#GCe]Y r+ʇp T( ܤ" B$b$-Q"K@P15<Ҹڶqwjc5;mڛ`MweoCujm4wL UslnnY)`wz>= ֺpo47V4Iumb)w-3NuueѬ3y(.ϛg)/c3KPlT[3Frsefr6 +A1MPlLZ.نz-Q6iyG0Eyq״`3l!̠b~zkhui:>BDoP{ݜjF84lNGæqtj4jX`;MU1`b췰|,__idY_ .. (]&Ŭ&j}$t-1tO39_MUA{eQ`s9}5gT1Fj7tDNUm1;89z#6Dc {<(jV'[a!lݡkW% 4|K;b<ֈa5puՄZݦ &҈zj3#?yaF;*_25 ZYZ\f3 SU6ZVzht`;VQ\ :YY`uV3ʾF0:3] aBkVmiRgX4jUXH$dTzF*c^cW𙎍ڠ+g,/cԗU0QJE\eSX0(NC-/-.Q3Pd%jT(e +&-V*aꢢLU +5f^LzvLަiNV^WODy*`w; ^>g+;JarSVd^|H2ۨ_kWg?} +O`?> AV]`la9,;&=8p^tTfN>:9fwf:!EfnO8t\;̮@.Lt S.ه1:[pvL,:=21:`@VNa1@evl'Q11avt8 lO:- q9f F lQ1Vލl >Cgirvfkx?Q11-h lH0 '`[whp'{l?wv]l +;dݎ7"~7JHx9",I$@R.+ a\/8@@.`Nnc?}܆[ӽ3ݓXS{g{pO#7;t"7f{p ޓ׎S⑫l:P—AQǒ.ZCЅ8.<OIPzBai3a1ܧfqXLbNA&nX`ffOg1|7wl?7={t]0|ƪ({vh']zpdÌvDۦ;awEa-ušnCMndx&:Z&tB"ͻ7:(]MC +ÚF7.޹Q v>@R?Ըc ioOQe͵ҳƵ9A ߔ6~Xn(9Cuz8^{g"GoІHt,a%B[< +xa#!;b +2Dfo sPL#,&TnunS{PDZA]"Pofd>O=wUktU{\6wݢDUk=+CVLr0xꝰ&UJvaL`*VaaR^g7\6 jFRb9LR{Mrت4U0M +\mТ*5KIט J=ZHek +>ӱQtlTelR& +]HWRSkl +4i4j*DMjULRJ%@]TIJ`,,*B&rJBzy^L˕KHdL|IJGrrar%P"gsN „P L L|%p[=#g=YO`<ppDGbcC|Ϋ __/pYs93 +y.μ՛y1M2fد(-flD@@E$(a03(`$%IE$H1qW]y{]=3PtϹ]{9{-p}5˿,X-ZJ0Bc`y>?V4wpO) +N|}|}G?zz!!wwwB9}7s|ofy3ځD׷BELw ѫ`&pg M#QpWŴBxemN"FD'L8pgp=W1͏Y;p_f ab ѽ!b Ab ѝK`$=\wp1] n 3|hMnHѫw n"|gٵ͜Mwt.v!T'Pt-`k==$\șeͦ .5 41Ձ hIo-.,5ALO:wL@}y Z^{{RmZ+LkD"ޙ2Diz|KaY 4?,!\9uP^zHT[Ŧ(w +-=c׮vlU:R $*L :% 3G5ezUy +/D9l| ThKe{Jϵ|'8sP^^`lYX(@TD*),ݎTI**,) uj5ڔn]̅BT.ml"DW~xV=ڱ*ș..;[=U aY;E#FO֐Q(sMoŨ@4&.ld^:S U1,Jo2 +4ꋍ@gPP׬%{$iIԞliIjΟpuQRR]:-A#4dq^CIm?Ii;.+y$ǕRMI>CKj%%6UX!+<7"X_.KJ8}+T4ۄWSBJ)!dǟ$7Nf#rr MKK./7_]$e<^;KmݵCVONww-;dlcpuܾm UdbBLu)\lt޲ىy9FI- 9l,~&4M7JP=HL`gG5dmkC"YYXYZgCϒ0Ei2R(1PT‘$}+$za?H!R +z34?C`)&Gó0շgU}YST\2ӷL_mT u +aG˂PyxweRa L_XϏUL)?}|LٙSL>XϿ|{{w oslogjx=K+oz ~nYOb3,ϧL#W;#gI+8ò0ϱl;X3re~WągX\fg`?Vs?_ e_k"0 n]dه+2 r-\X=kfAnXrTײ]2 +]NxD;Z20J=h+\nFnQp4$lwq 4,믧rO#W'(@PG5A';!D*J +ЊrQZs LS_Om]Y؀#uwL36nlN68&ٚ$N}O{/]>39yjF"zBommމ +fGf٥+0 &:w$Da]hȾ Fm@%0lGR,<ݜfm )(ׇ" - 6 +bx2` C<*V+Ow.Y&g<wl66ᖋល Nwwpg$Vuޚ*wuMtWh6ew٥֒U{scili/QMEivY-?i{aQj4&t3,ZřWF8a4, =,&\A0d5L~#vfMydSS燾f[TC_;Mut#];E[hC v*e{s}mmEGʤtrMn +G@+PLN#LS&ScS~ h pz +W570YqB7kEu$1MWA][d +jwQ@i.hQon.>j^MNTյJ\ZBR5(rU^J.AY](ԹI(ͮU.(JILYe%̪b\Fe ,+P:_Qbsł"EZ>\i!$?$Ҋr)98N-I-ϖ_N .9.)9YyA Y,QɹYܬL`I8ϒ|9s3ib3Rdϧ$Er:YJdA|ZK\jWR<9w6) r?$%$%%b$9u*4.O$O+&2ԩXRhAt£paQ' ¼BBٳ BCB y<A|#hR-W^t `ςPYWA?+=*HOOe|߯eLϢ~~ )yFHz@e8PI?~sً@9? ? _V G ,!H`e?}wH`e '$:?  ,PH`e? /oV߰}&H`eG7|$1H`eg!!H`eG7O_  7l C=t> 'ѝBLÉ|wRp$@!x$-޻ <~ x^wnVykͫ Won#WEze`f8Dͼ TNpܱ t7WlۢZ/[.{nw/l +8 I6~s[w{u@tWh6ew٥֒U{scili/QMEivY-?i{aQj4&t3,ZřWF83y5, =,f\A0d52 0 }4~ǻapU=׎ujF4]HNZP;G9;A(E_@[kQieR:&EUTUwY(&BYbqvSin)k?RfWZI`V)*"Śj4=&&^6ŘMvgkvc4 "s|PP2[Ǫ¹"rOV*Q JO'QFHM+0I4)~i)dbNIHMNFŧȒhDYN%!.!)ILˤhHqq(qDBI(P,NpB`cQdxP3't χϴSW'"v}IdL|y/yT.c2N14Fd2r|(| 2hpËԧ Χo)v3ٿ_O?|_<?;=ABW;> p̪Owbo#o΂0bo;o~0`*++Fe0#/=b<ړsрQ{t&0zx$؃ w jwFnv bn|umd`>0\ 8]1@b+İ;Yƙtw= +907 &9wd;b}ki`dp 3)U}$żGcec }9l[ٺlYF/lX Z1z@H #bv̚.՝jkJ'26! +d+:MY6e[ٞgW +Ao,j+h鶁N{鑦{. v;zewƫGN"JfngJqY:wP[i׻~zW)+RPm/A|l!X e6T~݊+u, +[n!Pye\*T3&TdY, QD*De[,K!fCƤi E |TLFa2h|B|L;E|x |{;߁j!|Dlk NybZ%g hHzE&|_ܛ3KݞܚrI)n\ ƁB% pe1\ds B`݈ $AVʀ~> w%b^|6#06M$v2"t SdvͱVq-b2 #M G Ճ:a{W#V σٖJ UːrRAZJ@bv M@iֽAfu:F պawQmTs} -*.ϫ* +ʕnPT@2 Eq}ICņewL1CJpc@ߜ4M  sڵ 4nЮ2L 1jru/X٢Za)FfFA f fFrqPO+X`~A\.wW/%o˝cr.RLvv\F.VNDqrF |iҲتn5̧u,-g6YMZf#Km!} 4-k{̞z5-bZIgj +jY*lIi畎i\LkD4U +REn(QJ/nIJ$8orOU$;tHRy}NRNԩ"v\P#e +vD-)T_R%s*^&WJeH9Q/6/vOMcY,F\aEfN;R ǔٌ3 FVjl~\,&'49mG +&%ZqVTT6wLRIEfN:ju**3%|JJDzIZYA iɉg&N8A OgNN< *T<'S-NL)֎7>/[37ю__a̽;޿/v||iƾw^y!9]??.9+#?+Ǔm?=m#"w__=}?Lw ;UkkS~_uF*ԛ+;g&8Sy"NybZ%$G-;B$=\I=Xt /Wu1Grosι3".u{3M$ݚ椴,b8lz1F+la֍D00 :6V-I-q- D02M$v2"t SdvͱVq-b2 H F5`kO":a{W#Z"Ht<ٶJAW+!i+I,bH :AvAV&+2-@jZ بSͥw<7. *TnC^ P=o+jLWU=Qrtߐ6Q؜_,ݞ)SoxsN4 PO +ƷhLZ>WoL#՚Beۢ\ VFK473 + +͖1so(P.i ,?/țQgq3HtL]S-]"I㝈R;匶3:^1ҦeU="*kYl4FI} {̞z5-bZIg|eqWQ(*" (M`,{K4Ĩ1ɤLzLL/3;_!ཏC|>_ιs)$މ@K==v9F{ c(SsQ.&b8>Kg1(>=ԹUAZu2d6>n YGi~THCcde򡚢!VP)L m2h^L)acbelEAj|)m;A ?u= m.}Hq;NQ!ѿnx<{͞?'H&YYG5@C}>Y{>6n7S<pdf[5@MYvl7L__*`+ ].¬}.Hb nv^[w||6>z$}x }pA)i b;k'3XV eY?AK d׎b ur(# RنK\<Y{`.gsn?"Cvz7 Ĝ\ L @`N:,!fci#S|*I'C0+6d#9}#0 =L; +2`a71ˉ0ӟb/A0 R=D>`. +rbCy1A&LRLѷ0h@D_G.Eww>}j`ZubL7%x|$~<&tL$xtR>ߠMX_ X_Kq!鹺ް}ey%ܕn%R}8S$1w]:yh2]8pM1`guz?jӱ8o?a?CVa+{|˻N,3<*v|=NVG0s!,փ3ZL1SLt&\{'bZ2pĵ{ȹ0^øGFw v19IYj?;qD1έM :${~Vpml:OFBˎ C/ 2L`ehy0@b=LNc+C_g+HP;KlC m1=> ahs黼DNKqt79 ui}綣~'5\6י`z6cQښPKfnAչlf\+bB6(d@-LTcnlFTЀ3%U7i*CU*> +cAѳܠujYCZFg1iLCUTLzD[iU(*S5l$u5lĪ**HW( +F.gS^-T!-dHhB4F $2%QҊLJ$"I\ aJ+IJDe(!]V\.L +$|AIIa)_R̦VUB_PxL<.xev+ x, " "$A@Ar]A $ "I I%Qdto7 ޣuuWt"NHp H h+b+V sa@*[p'Y ~aΒN֊9+s2cIwc8$]}iA9F+( 3l)sdc[I iʄSLT" ;~ZVɠ߀m_Z^Z^B|s1eylBIM09~{Zp]?F{Au61}g*2 \C(ouຼ6dzu 0y0gln.c7{}ЁqXN4 ypeoȽVH#9d "^4+:pp벴bI뭕A`Pw5dQ]4HJR{zEy.Hk;/ZʀR(@𽨱DJFc i EB4HfJ-pHԜtKkS*s 'ipX2ABΩ L%,Rk E72f,+NJ@Q*J !|s&CHB-dy(,4ȯ,=<ܙ2u*m]5ԑ~L2ԫNuF:$5uHP$k]U SFB@^*V^MD-'Yф$5j7B҄5pɽij>IҺUBg({Y*㒤j1g$WWѲ* qW+ ٸ,R%5_6.d6tJdMBNLC). \L9Z:Gו0-&/1.d:\u6PQ@KU~xZQS <'),7%,YKK8#P) 'h1'Š~IBx B㉫ZpLrFf@,|U|h^,Q`N&%|*A<t2h4˂b@Ub4K@Vf\3$H&Ů?(&.J/56?5p %۟M9#71:/!:%:$#\ ;,;VF"b yEx =: + "d=sI"̄ O +}0@+Gn>/wr=u>XCx!^.~p;}yМ}<$9yp؋j,Ξ{X{m]nR\wl"a g];wR%8ܜ[W'G;''NGGlsrpb}fv):qvzK;)۶Yڐ,YX[[Vgjiaf8Ss33)TGijb5oTP:B 8:irmVlV0Cªa.h@x`}",? Z4g~Rf, N~G|sqRo̴ +JL+( 3$ML/M~LVG$͌4e“x Dz8m/L(7$wZAp?oj'd(7o kKDJ |{ 60>\}}ez} 8|P֧'(w@cac; #`d01&=ƹ?{3wQf;i.'d(kj0M +3B^ "ibc&d{;1Q pLn׷!idz ?c{ z "Dƻٞpn4#7'7cwN4IAƒkeoȽVH#҈ Qk$ 5Ad Wt vXei7 b /諓[+!Uz=5jt +*iY +r]v^ +$ +ZʀŁRhP94h\)h,=HVHP/ԝV[>$4 ԞKl59\**r9Pe"I=D@@E$g s!!HP JP7nr {y}qu7MUMw ~=V2ڂ"!#Dvd { QdMBdu` c;"P$ߡ$ >~[UB,$KGHoz$BVnKc&z18Ots\o"3Uo.Lk-uýa6Kд[wmJ$pW'!.X+~ [w&pA4 ¨CseD`MsCvjv)gHqS> jk)&X@Mzxnl|3lCPpY> LmZ4Q^@ GH}_3k8*ixGĪt.ANT@ խV4۰Zlf+{c 6TJAS4b; +Pl:FLԪhF^nBJ*5)jYQ%ؠ蕍b3D=E&A:@F!RFAZI UBUTWHk@MjUjy +VX] :PUʭDUJ{e奰Jޙ +Fr@)tr8r* +]^X]VUZ}< +XeSPEy2 +eѵ\ܳ8ϞI;su!i9'ssr@igqNpJDfS2)9 NzJVF(Tz:()P3҄$8I:yBH*'1-SNSCKIJMLIIgUt|\(*.68ccb@Q1Ѩ(P'"*2 +jȈP"9a W$D- ֻn[+gqDODF䃭2I>5g pa8Ob!h~\g_?a&Byl(i '~ڏl x a  dz*ǧ(ȫ0Em6"L7,7U'G`kq| _o_m`k~c?<OQ03!ћ7O}1>??|cfQ03|_Ջyv}<ۧ{3=bsGA|f6>z|}s=boWo}jx~ /PC즸G!x\}tx>X=W=X>t=?md-إY,{ܹB%$"\ 8:J2BBlq0|?j$da!a]'D}z5KBf{Q3ݴ^.qS5PHb4H3l{8_sYwW)Uug2x6:cvX%uwmYdPyl8;K<"rp̷/dڜdܘӭ97e9p#( e11\uk3ڴpmJPҿ7 ѭNʤh/\%[9{Esr4 2"H}yXkvzj~ȡ A3;jPM1*/@^tenlc΂䣝e#lejl00š!^xWk64ZfH]e@5iPO8zT}LĪt.vhk @[ Mm]Ѐjm!U{j!UU͐Jʬx.Htw +NӨ)yH(yCVԦk4AJj^E+甙5r`*ԤDe%F@+64J MR7` eʶ8CHQD wEӛeR&1יLb{ޣFgϹ{Kf~pYgo8*|LgmY<$GM)^ =%ă+*}Ũ +oEKܨr e{M*Be +Q_]*]`ezoa>*S&8kvqqL\@c0:49(C 9|͐i a9}!זJwf[+4{`ff䒖Y-tf\95lb 4h2 ,jsz:1QHj2鐞ӡXiZ-NIi1T uBFhZQPꔔXd*4E)qR[`~7̋rCP7C11c !ѓApH.bv Ĝ>'n9Ed'w#vމĜX(ǷCpl`)C[gG X@0p: ns;om,]YU]}ඣfzb + ߉/^v ح"VF{;n9s@ӽv"#5t:Ei9J!zCZnpiTDۍqk~,kCZa t7]> xi tqKㅣ{bp ӾØ3s`OºI "H''nxo7+TgnF5v1PĮx;{RΚ;:C]GvLnՇammvQmUQе*>̦տo|Ƹl|zFeֵwǔ\lZFאqVcJ|0%[i";FdS ηũdCOw}w=Ϻ:B=xm'QQk:Pu4U1jz[݁STGt7&ReXaWS5*UI*h(jWV_^_oVQZosx.G5WԔ6U#*#幍e*_ʩQWcb8k%9jJ)j_)9U%\)V+FTx \6]ul~3IERW!++@e ,^Lq-Gez +dr<.Nɕ19(s B&e!{c=ǘ6#!,?1ڲQl+aefϲ,p,\Ҳ33P:Ό0fML1b2F#M ^mNOѣ4&JImST0SRu:R"Me"i4):-FaSh(mV5**YLT2(2%Ns'ɓI$d(L*MD'I$t"%EbtD(H(/ B$E/^tA:VjVjXA0@x|  ~ƛT +~MEM*DsoBNʢ|F0剘{ 3 bgƓ"fpha15c00&b43#M3{?.LI"FӣBF3| +[SokG+Bf n7:=_n0gi0G`Y0KK{KN}5uq?.*"("""N $!$$a齫,*Qu׶3#\&Aw<|ϙat݆kzsz}缺✗k0[{4$x +Ny%e/;ђs.:s{s_` ΀n=%nMnNZ1a㎹6FwuҕQk& 0x6]@2.\BOGя`}q t=u[duXhI&#ImVD0H+e?g0`$ Գ"X뭕SU`SW +ie h/sZHk*hd +m7Iu:1^5@b1fcn}Ҡ13b^+h'<ӭxg6+##E{$,vS/ ڔ8@Zg B1\ eT3R}T/A5]RLtrNC7!w1cz|`0 ܑ ,EpN'g ReP3- 4 p&Sm$dHu7"DYduiqk4 5O?_Kk[z[- +ԖruzK!JjSUJc)'TUrC1!\WBH-SYbM2TX(ĒHUzII +C.MB^t9rLWZI8W ŗhm+dl\lp<\լWYdrU2V@erb +-g4hmӚlAL<"Zϖ$KÝN;a2QʌSʌT"HO)HIOIG"'2;!KHzɬR +!<39w2#"&<=p"-1Taq)gpgbpǓbBc%7gqbNoh|4ԑRp!g"qGl9!rc"NGG  > t*pԉ00CÂ"Ž,TJ`x1)N;  ;B:z#!4BC 4(6>,zܾm9t߀}i,|fڲ{}4޾>>}Jٻk{yٽ^޻vnu! +8{}m\3u; O` o|}<8qǸ9T_y7{$Ab_Fq>||id>l+vw6>!pIKo /»/ܩ>pmR99gͤboU0z\:'B:m0ہJF;VXm +rXa\1*pg2X22Bi J +s ,/DS L!fmX[f6j,%F-RVLROє`"(ThИ 0<ӳQlr +a=]*?/0ODi:LUղQk4 rgVҨaJ)ЪIJ640:++iJ$#[gT,KDALڮPffry5ͮGgtC<< daIw +$$F{0scnE<2_1@6H瀫`WC냀tK']va/t?K8w=Netgv3;݋^tz`tj'qߎ: newd # i}27V6`k_CDjԾ5{VVW]n2``h6/JΦl0[ߕuS:mGIbM:E +I܃Y w_?:~tQ@ڑnBGh:Ij:H + v^`rJM`TbZ.FMGZ@4Ei:Ǥ̾O!'!Nj,۠Ce阨:m^ +Z6|A Ԋ\5L#Z5)SCɆf<7;&Sge#Qdd+l +&R*((RILXB.G)1˥R %fHH''J.8"qZL& DB +> `<ϣp F/Nlat3P P 5cqD\$l$cخ2qT*oL&wLʟ/1QF%nSqěOb|Xȝ ޏߠoDb ?yK߯s*޷zT`H| X?/㷧`da`ڣ C00pa{``໻Ň,7yw+؜R2z}k"<D"" =@@HBHHޫJh! HoA콻ֽսcwf 3̄|>_9׀ x <k+px1/@'Ϸl3O7êtja;;M%I, 3\I^.X,F+Ͳf(B-D%r* :y/`JGJdu:ɽ:ʩ4T.)󘘌dT I Pvt.&-%1:591!ve}>,dV'$D'%AY<\N=} +;q&.Mx|lLD|l,*tL S,Nw$C*,rE9}̔ਈ>A' 'GBiAᡨ=X㨣!!|  + + rQQw D_?ϏKEw{sۋew$ %p.oշrYGB 쬋!Ӈ `(w_Oo#k?_ſ_y}O/*B odg7Od'㯏~m_C6z?;y0 ~>7y܀uw{5ϼk+AV/wG^l zgy'yGኛ!K-[rU.,@̝y}ۭ9n7gq7f]@iv-}'wV͎LA$lM (W'!ek`&c#AaQyG;͘-nAY6J?t\6Ӄt{ mLuN4h[ٍl3m n /񁠯ȯ]}0]zn:u:46jz! +I@iVA&%MD!3mblPkYfoZ3WH*Ta]w,R]3M20)͆mA9M0M1b}|mLXT N-AC+E%daU:Mv50D%[xtMLUL7p;dMŀeVdU*haR.7$o5*z( +{Yt)D®:'XwԒ*p54{4EY>fT|j[4/5AU5Q֠^^&͍ ס̍nZTeUnu.T)Քy$ct;2:eHkcrX Na`4C +Uꨲp^%JfDQ33j )(G,f2\yGc6f 0IRzUYi)61Jh*Ql(a鐚QTӡ +ZeFç@V4ZP9T,F*uq1*_UT$FQ\X'HT$%W(P2E^އdr9W\ڧg9TL4EP)jQܐ,%JJ`d 3pdp^^#*ɛE^+yœ?_)iR1T,+}'FJe"* y"q3y+A\{&]Vw M,.՛YK"ߞHH;@)AƯ_~} ,+һi,_I ,,BdKt_Be(_%~dHK/ǻP`?K>=o_c{!?܁;`Pw"gioz)X"H& o?D7 oHKR;ZiF4#17==;du]:2"S]'0p v88K~f<>8}`~^c|~TLs| G46'urw?; J;yEs/aY?i}i'2'zx{/*2 {ÇF1у=$[1[,46J$QZ>'A h޽-&kx5XܱӼ}-WwӶ5i]aLӶUt\ز +82i<Α7 7R6XqJq#o#jX?o[JiCyieyVbU=1w8)3xR1T@ƝR"0:0u'N.Kɶ+[ęfvYX.Ҍrv95D(\҄1x0@ +[[bG}iha4|Hͨ7p5EU=i^l𠪚(kGe//KFUPF7W-SkQ7:WRujZ{w4os[CO|=xonïٹ-3h^ +~AGv.мmA;U6LWѪ,^?3|fa34fٹ8C3o`wVOfOsqev.^{pV<@w34&ٹ8Csw34wγs[gq[c֠o(YXkIFW(07D f S0p.a$PMvnt4х~hhڀ v` r=HљqdA:#:6| @Ll" 4J! 2?`^:`H[jnku<*8l~! D@k%x"Bci*ר2IZ4.ӑRPǽR[L)B&˜TEHR܈hn\3;˟ <èhF/(4 ʟX7)8((0Ӳ_Y͛ꕕ;٣-+͟5ɛ1=wrǺKYrΝ$dvrG;9g;Jd2̙\b4k9J֓OXSh!dj&d&j8E⬰i"MzOc.dSjw=!^ÒYGH +SjԸ,ɭUzWt 刨[=';$kSe~Rӡ<\bcT +Y e $ԒksqqeVr9qGl##LqKcD1Udz胚̘lVdD%Ңtiڂt\Ti>!R+H3)åJiŹŹ QloaVr pE&I^ay=iМ=9 TBhv[VJx9!Iqm۝ I`kApj\ )+%~.89iWR\4ngbli!hT$nGB^\`|TnG\tD`l1Lp0my{F, jO(?2t7n{wH?"$?<4/[ƒډ3Hww!;Bv^ ,wn߆ +JiVYށ$xm󓱅s-8fo[ 6nmݴr|6x{6l)ryHn^8WύqذAFww $gw77'7W]]\p.+sprtwt9rFi)y +-N(,$E{|?G\ +n* wVѮ/ݕT[Zpng#?w,-83}-3'UbmC2|c^ +.V xp(XyP2̽I`e晻@ls1nnv dsWE %=" f@03C)$2ܥ~D^. I@&0E:IBq?!B0vDks'$6$8i19|EB@U`iQ +IKrՙ<,E Tu[SHV0UQaUrwB +Z@X9XT&Qe +A  AC)@TB:b)5EA@ְUEHR܈hn\3;˟ <èhF/(4 ʟX~K+K~/ED@E.EEDQc7&jlӌ);-KlIfǖ{%\Lv~<~ ĭMR`oa[鸱]wW!W|זx.A|Wzx//C<;K0^ZA\'\X Cڞ\ -{T* ,Ĺ>qi$qv%A쫓q}ymi83ľ8-H&DΏBlaS#LaBςI!J,~7^n85G('`nn0 rS Eti0k 9S h?%BDž;@6loA}6H7c^i-ʐ +R A@flQf찙`S)S +m56,ӬW8ӡ#4:$@=IfkaFHYtz ޤkAP$1ЩAuzZkEvt*PVLMEhki6)@E#HQN# b`2J!(cK E%# AՊz)QT% +:P,07HjTրxR V##q%"qD$qkB&: >[\]MqD*['U(<'Wx2~ee*U\.J )qJM)A]©S)(+C),/--*0))()&+WTXx|{ >Aן>9<|>y~1Goлy3q +ȓ?>v(K߷|}}u}od|z=f+kK؁!΃pm s1[8A,{ '’ݍ;g1uv,w{ !% rLk\?C3`\91|f!b9I]83LLE7cS$ Ύ3NΩVF-2Ǒ0',KGH`s4'pQ,#RE{YTLF(lqi$qv!b$dcf_`d[8Όw2/Al ' ien2$%`g9iz}j `L 'G:Ǝ@'`>H?қ/A7b#Г C0PXG7)ځm]DhvGhz]k4D`=~HKd wl4wl.ouJi t[! +9Q,eaQ\ 3mN3QvL0gX^kixlld]i+Fnh$0#jh,:F fToҵ v ] ZԠ:F-ѵ"jc;fVV&SӦ"45ʴZ a$NA(L rP M jE(EIri(I$Lkk@]ة&(MBGEDA@J ^H Aa/]pHxo2'9s>y~{0r\K&FfZdHdR- )=E2Tةک2XdR:QlN(ÎZy(YYNe˲R}&Y{cV&aheъ*yz AI}󂥰ײmT $Ǘm 8z1>Oߟo!¯]M~yf<::?o{`&.;p-n"Z&B7AKs`"DX3@0_Iz~m;!x6 S x:" x2" x< +" x4f5?,΃!q-uot +vq.f/@pCz7\bj@:Ět'"LuZ'Ś@k퀡64ъc-@p~FX׀ E +ꑞ+ 諥\4\U] <tUl,z%1WGR|F,&VBj-lL#^M!h< 3AiЩ-BS AI TWϯBMSPFz*T*WT\P.APb"\ +r5sutor_=[Qg3]V51ե4B1ɚfewTB2Fx2FtGZu҆[x5^m! 4TW7ӝk%_n4&ېK#hH%u; IQ+Y9g3*tZI- ʔBJ q(bJq؋łbꊲ8tYtyVT9L3FEUutft \Ti=' yEQ.$$!) ^5RaEZyV +ֳ"Α ?v&z:GlOrJv*['RE1!Y`ufBARurqq9>('p,'-'Pt,+9"9H1Ѥx(RBԑxLjLԑԘ8JtI1|OD` cNdGhb=7.<I8q&Ptx`TX08DW@d1wDW @xHwX0cG w?2a?_;o~G~!-w_#r;kw?8:v{=ùxsyy>k'e}<w/ٓrtߣ]{]]qnwcŅ.WnggNZ.N8Gd舳uڵG>ֻmHvBl_'6Nneiea)ɵdr 9>od8LfD&Ւn0(z#[~!.Cک){QH6 )!3 Yt퍍쟷v_e@$n%kA_e5CC6_Y"@2t<@,C? Q~~m^oot 0",͙ +g$-{e⼘2׶׳I <ɘ8Gy4b^< RHwI#>s2f/nhnҬ3=u;T=Z'EjdVDkDm^# 7 j@zt"i RGk:ZLͦp=54J`uU rf&1WGRLH[ XX1E\:x5Y!Ƞ3@C-BS $|~jzU#A\ J@Ѕa%وJaE +%j4<\:{@9ۣΘe)fX3i +k+cKibR5jƨx2FX#:i-5^mɥN}?dq`  P@9PB ƀ0hc^va|nש{4>fDsm$\}~kc&.sn<;BD߯τPik\9OXؗ&1<3vz<>ɺ8pS,#?02{yfYN9Hml=LEwiWڜZӌRlL4ׁ22fnY1-fXdq1. F299jIǦn*:- ڦTYu&-&Si5& JV0hpYUoCIuL*TVjX5;:%IUKiT#QZIC%WT$qUW1Q""bU\TED&)QMeXQ!cVXUDUrI+e\*JQ2)W*)(HK$ҒL,/X ̗3QJ)_,䉊hHO-.,D +.d*gOs~?/u0?77̼6ٙ9,.YVLTZfF^g8J;ΔJNJNMI')%##dbD1])VHom"I;`2Ld)Ή +y)OIOg$?rR_򚒷ܳ3{rz0#%IbCcxkY Gz 3(OHy~>y?wIo̿b}~ 7|0De{w `|>Lªr7ߍՈ+]kv:pEV+ + ϥS1 +iyRٜ ϶qm̄bEvaggB;ڝ3!cmZ9WD90Iɺ8F +l 8QN䈟unc=<3D,'pボLlHcG(~,8y8.D^qe$nj 1XXٰP[ _FNHcب4hQ;1⠱zbnFƇM!#ĠQC{$~GE;&a}16!Nڀ2Rƀ"z1|4R~̋/ԳԷ83˓קz?$3 !Lx\>=|~H֟"6{B{~w `zQ?nH[$77&w u?1^d}s>r^r|F{I~aC4&l/B23=&=&aOk0uȽaOӫr;{L;{tw wlr6w/kALw.έʹ[q&7 ׀讣uNzj&uWYs ZG8QVJUrg9ʁRJk-CK%tQ.pS*|5DXc!`ME|>)5KCX٩(33^PGI!ԻI{/^VzEZ"$0m0$q98923w4sw'<{޹e3?CVG42N4;- p[r'i h/7`އ6N9MwΩc @dǁv r b^NirxAr4@~7pVOu`b`m.T~egm㸿l[heiwӬ3+Kek9bpN[ւts>xc.İ9KAhs 7E>Ky(ipmEuŗfLCtЭM@Ջ[ .A4F!Zj_^͂\AyjaPTsHzf(`ٔ0ŸI~"MkbX3 vcm8n wX@MCl6NҁV&I D6Ab7cCO2$]0QS"tE.!lwpVV :h{HC-uJѰh<m=aQfH-ASL %V:Q qZہN^i)AU6 ڮUA=U[rPY# &eLTaT!yS^ )ˤH:L+p)F)@$fQRZJgZR,I! +ID.B*ADuHQc=[-蜴T(eW83*Yau%*JřʈUj@gȯ)+e)咽9$$<3rU%܊rʊ8*=W[ZtD +Qr Ϣ:]TvVPpNY' AYgP2 rs9摓qiPf>%#/{ iiA9'Or*+ˉ̴,PL P:8JHK ')=5KbZJJR*,1ʉɔH''%">1!cƁu '*&E[4YKpxl| 0~_bШ MXDJ '?Kzmz/c:-柯S~~hQ,$^x" Ȝyuo_$˛C38 Џlc o,P~Toy, +p"]820tK 4;QUS0߃_D!ԝ?OHPw3r?OѾ{zH} :uqc~Gxpo~S?!:Cog 93:gfwӞ`?GzrΙ>@瑠x7q0vh= O:ځr!^x=\`z\e-rp؝y93[36ۘmN8O]GreQfz~=K- fz›&`3=,8d Cd!d6v4cF[3e9`~<86D`ؠn:0Fgck^G`Ul]X\%l{^Rmg y\4:Ͷxk^xh;+ ²LB= ]?YYY򠘷n_"L8o.96Ȱ9K7`3 7Ÿ>MyڔHL@Sln$Dza#.9AK6 '0M0(zf(ĦQH~ Ri.8svQ#pv[`bR̰fEׂ$m}^# P n"bNMd)nW@[/pq;)ZPCMVihiVNuչjZIsZMqؔv=*iV-HVmAUf T*ZViP5!y# W62)JN!%\52qQ" R!δXBP\T,j"~_ + BB +$z't R{ v{At{]ڙ Iޛ̼?p3%YvR=0KPL=3q̌`Ier킢s܌4\tNz*kƱf:xc$"3pV/,ILOLLKNHM@JÙbLI118sBo1EG 6>+)cY6EED00,f3.j6 01,dF ؝j6pSދ^/$ؠӅz&\iy}XNzj4BT!!j IL +2H)*t(U8ERTNrEf8Y\T.sM$!cZ$ +X5_5_s 8 BAE RfGʹwx+߷Z7/!W]Vg?qSJꏉ@|#I|t!M +DȇQ'vӈebg3qX6L}x)y!Z`x+F|=?Z+<Lk?@^~"y/@-w; B`!xsD2@^"h{uA;c@-wč_32$ "E?`̰ϠCTϮU4f7.Zyz D2Γ w_̽%nDpnu u9 v9gBvOW r#t]=AgֽԹ AV o&4=G7\G;!8} +Cp\dza* ]Iڳbzv@s9pg;9l_`[;iiEH`K3-nm64 XDDІ)Z ׻V^?R?XV?j vqzYNFjW+[NNT/xBZk!T;LUuP Mu`٩́)SZpU7OeQ>BE&\eiQiو+?ԾGhGc8eG,YPW[䰺2wUE Trr-!d/+jdo-j!ٛ/l)y2Jq UҗT +J_*! )vJV5EUe \K\R  ʢE%)Bˋ y䲒pr;'4/T@/%ReI,A1v13-?3'n˵ avr3p9gN3% +2&F$ 16S-3(kxUf,>:2F!,¤͸0$ZLưHQat2`wN`iLބz!.Ԡ4:0}NÂuZ-.(,4V + QkH` VAj5NVC + )Jp+x?5 rorl%a%,'Vcp@ 8RfGă }F+2$Vxd3uw?]&>d| ̉wӹ<?ϭ? x}_>r̺Ξ̾o yx{ ěs3vmgx?#CD0k^{_u< ~yzi&˓f<:s9gՃ>pM(rnww`N>%n'C66𹘁vOWcں8K1SL1`jHH!@Hw\(pvzb%[}؛?=Yp +$?|gތ~<9٣mϰݙ"ݞ&mM֤ w6l(Q#_ ]:g+%b}z{<" Y7f;f:Mw:Da &ZacF +fn`4A zm@t[z=e9Y}~V+zriyEAa_v[uT삽f [,wU, ۋv*\W^2m+f [3Liid\Lk8hoNy$pm+ʈgX&/zE8\]"- YEh7Te\YvE3K(bNT4L.f`QvTgHATS_i\Lj5>BULJxbF +\IUOu:L, +3m&m3dV:JU\+5xII ՄzNQE%u6ZID +jMbjU&hT.Uz2߬W*uJ[!ʔFm@QU)%4%lR[VUrlR+(2 S+w)fAFVLR"\Jʔ.J%"IZI!UBREqb1w#X+r]($x$%dg=Hy\ysҏAIKȾ&Fv>3-r% شd҅sT1)IRp1Y/?Op褄\TrB.*1>.|K,6 &"ϝ$<.&Lltؘ\Ĺh((\h:;u'a4g"HgX΄9;}\pAa  + +)\@O\^q-[qs/$vTm(1 ?pAp`(sv{_{#[8MyW#= ʫgx4'?>s:o87~x?= |Oʏ||7|%C7 \Gn%!p?>_o} +O~$!!GÉG' ?|~>{Nֻ+/~>@wD=yrߏ7{p"1}uެ%DgKA>Mh(<\(o}هk>A_ ӻwVp/k۝eomwݽysGA3 T3lwHI[S,nMas86ǹy Gn!> L׆Xi`Wh,80 .d]$!G0 f:0IiG6`hC 5 mcB@0npH0XT/ۀ׆=\愠ʽ{]UCY jQ[ԮtjMv6jYwkeioQ³ {poَ=T$0o/Yp`blw+n/P[ӭ&洍ŴA2Oս6$.mƛu^>I0\J8A2bIK^/tWH bV U@;laLʦش=8D7z#G;-,Ʃ.P J9jfQ r}5*Ew tXygێMV+fڭNuiW+jD6 E1XJb7 +m$I]eKBԚ45F7.*COބϽ򷋬pʇ=W5φ+]Q>Z?S?9 m9us"ޛY$G{|ӌ!w~^k^Mx/o[f7SvtirKm8`  ]lept0۹Cl}-lI=4;?ܷt9FJ:?@:YO:@ꨧE=t|7 Am;`;B9th Z`jAԊY3plMUlI %5n=EPPP;yvkD_m䅚u&*j9cݜ~^Lgz9u +}+*GlU w/骣6 w]=S[~KPPgm)BLN԰ J:eLoqvBɹNYwP{Wr)݇ EgZ(ܦuyX;E*<3Kfº}pǛ5 +H J[ +>?wxY =%TNeÚ;8 5mLٍ[ Y ue,9ZNi'TJ8{xYdc=Ÿm[+iERk+jH[6cI./ĥRRhͥV6J\' 3KXM(%n(% erJ Z[ė1YK()X+aIX_-$(7+hM6%K@&'v]/0,yYBT~v:.:/)*7+ 63&MPxN*WSpLI…g%3Sed&'2(]hz"ϐ`o>5>3ءOqTHRLtHb\tpBlMѤH..2 Í,(c&2,aHp Qo48uXH*48XJ : _h5 邂p@{ZOJV|U*fJuΟ|T8??{}}(J/_Bv 'R(!Wxzdr9C.̤2>y$R=bL#2iYl8YjVÈga |DG052(S+E_) 8ӢϽp؇=Wᅮc$^`Dx7XkFOsYp3mi$ҕ{\n.k V6lR 8l:w}-`SAR,]`sN7)MT z8@ꨧE=v#<mzH QHjH )t0 6؀&;N'M6I6l{ y1';GMtpQvp +}F[C0E!|1=$T9:s64pQi:xqYٶW؎U5І8j+[.M_ *94DBh .ê:>ld:,vVE[#VlAU4#}N.[%8L +7JT[MRarFV`ݧނ%s0(OZgiKfLVkҢ݀٪R*(*iU&h5$جSHLZTPa(EVQWͬA(_RrT { X䉨`"""D0xtWx:"T$A]C0HKO=m W}3Q~Oļ Cd0'ceԱGzS~s^x¢w'G* +5p>&u(oCytd\*kP.㽻ځ̠%pEݽt +dY ٝ)iThnMݜ1u}1kdW/pXWFЬ -0G!.1(0w.z8z9^5 8(L`Mw8RN@4E!Xj>k(H 5A xhh?sSst"m$iMOCΒ϶q\u;/{iέ\`ٷWY]nsem-86|4/ޒZ"˱Ƽ]#sc=e[f[3D֛n g3mDkMreaتU!,JĢՐHkbN#1iUSCdUkXF_4 + +W +tJ|J˫RQJX#gz"uY)G LRr +T˩(rrK#K`Ye"0AiQaJ + dLiQd<_˕Q^(,bIF($=/'+b!VH L ,L 2|>,IHg$"^Փ``fȠ(Hɘ$QPI̊ꮺynhjᵞwϹU]5Eyn({UlLNjF9f;# h2I18M8Ζc\6F#Jg4VƠףtz1htZ?ӢZFJ8 %.fiA1R8ZZR0<~p]VvuZ5_Wfͷ)[͏i{9ZJǴ-FYޘ2P}2:fwNV1_&MnS"rwD-GEɠ jyBKɽcF4' !O1߄8Qo (P0 +1< !P|使 ջ@EZF$zs(2oBBynE^Rmļ !y372!Ջ 53|Pg o*H&"OC fb(_`x~z>B@En@5ð=T{ u1lD:"; VRegh˻݆)p@80[pÈ`#@]٥:pgӸSt]:\G-.9yWN\ګhX% `qippk)2\S9l_ +l)Àw,ΊEJp%sӇb3TAsr?'1'=t{ 8Esl'Tb0ESVrG XKcPysAi.]I;Pgl4/n*Jl)5\ڙ5Ro8ElV) 4 +28TV/{ϼ̞F^FwâEyt] +;JJ/L8IrJz.&.v2&bMފ R׈lk9InE45VHrC&1\qNX_K8stAi\©#4uwkJNcqqUIJP1s29qb+ 2cbeĔ해3Gvs2D2JwqQ"Q%;"0 +h 8-`/@ ?//%|o=9Klٝ-M$ sfKQXXha|\HD͹ D4ԦT)qpIRbɨXT\&0=uAZ܂ѬhT@JLMමɱRb"#E"$s6$F"aȚ¬܂ ZZ5<%7:TOT73wM"(`IkؙMAa" gkBxl @yl؀iryynXO۸~-`_I.>>(7?oki\֭]r­rdrDYzxXָKp#px^n\8.fWGw399;LNr]V)vՊ29Y,{(ڛ,([$`oo4 v4vz;[r(`X ^mlĴ6:Niu~LRk59*Z0lS[HjjQ 0 fH2@h|?̬S}1X%{HfQ9jFoSj3po|Ssd< /lTNCLK婆#eRP=DM P*?3g 4O>}hoH)Ž+zo$=fx;BlWW0C=_7rpw(1sl:=]L_Dχ:C2u/w&h>ɠ2&hߎ͐ anG]\!yIυ\!/wez\"N9wei'&qv(Vi7/vEךn]m&  6%dK9{@} +AL):뀤Zyk.`UWVMvBb_p.h`J۷V@p-s3n/˛ȚXk/;VrۘbT!@ @"z0 zs`^oz[6=$$ʽWmH 9w}UcQ",i2Lϗ I~` {A0#͟{j7fH3tW:ISv1020";8p:8.҈yفjML0lG!nz PHڏZe`и7ݦmW ɖo{-`ӋZ7~Ǜˣ Azj8ΦINUpɅ3[d28YLw<.pkioɷ{>{u1\sfE ƭ4g޸11 [$&, 1Mʸ@<аD.YqaM;?k ,o'P_Y48̀X N5OL[Wx-ވMt '{DOsx.ɝXh$HLrjGM8PfMP pJnNSMKs{L>;f)zn.Wi3HF\U{W4rBP$;XfBHͤel5jJ[ F~qrNʯE/m֫p&Wb䦆.(6j9uWXd)iT+)EzEFD!Wؠhk _")*qjEeZҥ*wTYW[!)WY2#Ԕ])**Js%]:՗ UT+%슒He2ˊ +qad].,TfiA~(\I%*y>E\F<8\lbǎbbbo.XLL8Q1~>Q<7'N|d^yyG&a .â(-b9�q1.)$տ>}'W/O_x_?>) ַc~ glBϢ +O^}"cp 1cE#C`eǟ?!@"? +;t0i8~q;pD~6P`绷E + +Vo8*߼5td_ +,(XYd|h=Aa@8 +q(>Ga@> +V|(XY|(l@P`烇@ʂ+ v޻,R޽.wyoEhM7o 7K{ZpCpM+[(ēM XC!VA"uekA=Ɓ7qcbF"4[Aa!a!`ҀDp;B?/,!|/ t]bf:n:Lp61x<7CQ7@e`l` +05hE>@wQ^ l[tj>%lzqYVF@3x`yԲ!hY] մ"pe~J_rLw=N g3ܚw8ƛsfnopa ,Yiqk&9͙7nDL>EЭMaV'l4 +X@I8*fi<#60U37ij`@}ug3bjZTSn L4׏wK܉ՎvJRtHnBrR3&(L8%Sz%P9 ս6N0Tw%UuBTvZ4R;V=mi)tm-rW3I*w45̈́r2IrjԈ$-TWҢ'6M:m=Ĭ!M %Fm]IPlTrM-_v+ͤQ@ bEwӋ5ј5Q7=1e=ݔ}y&{s>gs)I,V -< Rf1bMr%d-9Ef\%X`6rL Tz=p̌-:*>1gs3\IOciR=1qY MfStcrLZJKɤԤDژJIR 1=NQ%( 8-)NR)tmN)ccbb(.'ӪUJVFŪ1JhPGG㤪((pBA-GD+8i\N! Wp^&EPDJ.H a|‚BY + IBrJp;$@(@,vG(ىf Y1-sk)KYRx"Y FAw3&`$yyLWE/07{Ç3͏^~&¯' +p|o.,/{׻~<| n‚zs^_W*< IW|3}O8{棧dl>K]<}sº{v n!['88vYW&9 #."L AtKYfB?}@u׽Fɩ9'hÉN:9v#;I; q nB[[ mF$fv`3cM4̸z7( o=xgս]k\\lUZBNvՎlVҶ䰵`K3"lnFlj u4 +4mp{đW0Ǐ`5 N8s|lxCaB9GlFӶl UmO9ϫL_+}mSvU'̪>cSky eӂi9apKt:\9鱊݄CnjrJq5Jzۂk(lW?5wwK:pŝqE{7J0{6^];;XKU} uƕm5u*2R;!úye-ve +Y5yl,Zk&7U,Zkr49YHSByUc%.weC.QByS[!djYV'`j)X]•PE^_ɞŸrWXi+ueBzMYaZuiCMCjuQ>PU3VZU[S+hcy~J)Jr&ĒKr Ŗ"3URa.ÒK,0H9l*ĞY8fFeerd D3q.大iҘR,c +N&3 Crl19&-%ɥdRjR"NmLLR$P) CNt|]k:6J|q11jTrZi* +%+RRbU]4VDqRUWWR # +4J.م+dHN/ GFrD"B"vRC0>aAaPO$!  +I%8X YN #D,sǍ9U,e)<? @k P9Bn$&BT+؟> RfB/}!Շ G7%|!gE37?~U=p;?x-A!,,&ޅDe +;~7-"p77^_'w"zx f&^\eB||tܟ</!K<Qo x8>@Bp,x "Lv n^7Oqq\?Fw(Yp2x]>L +@w9KYp@04>DЏ|Pu>3=@F]@8ՍCpD'jJ~ۘb:!$zf@6Nӛqfk%k{/ۧw(`'{ϙcQ>#}ÈΤ!܃X!,(r?G :[wY:G.Ę⡙Nt:vd&ZPhf.n7ԈX 6BNP=TCvOObl] l!չ5&Κz@kn5xط >f}h{ŧ`?T¨X>tg"+˽;'ӭYY'tcƁ3_,,z +}1O11&솕c/À!R] €O<'p>rvL@tᬚ W-N=MTc]QtrfZ9ƪb5#R5{TA@9AdRj $3NAgn.r2/6{wuqzJZ秴^l3Mz\i@4bg5 q@J.%v &ԙ\m& ITkd%L-긨5z@T t'hR)0i+|j"V58Q"0EzUN)r2J@[%fFF.R\Z^SJir .B&J9V + *+)&pr(K&f)odB\TХR#C"(:tqV/e!DiB~~0/ a>TK搒 sX%ddR򳳸$eerIs.2K3X%dg\JO%dq"%\\FJ2$䤸$Dlf\HIL$_$]$OJH`s.1>BbB.b|<8 qXb;Kp6GǜΟr̹g+lt4.":**Qg"DF##p^a~BŽz ăGPző/BoM7~ + +x?=B#<, +Ep$Aԏ{?\{}L ;M|Ά7ѿϢNC/| {{{<_#r׿te{~*`eȯ__/o?}ǧ# +  :U~OODŽNz~ݣ MoDS쭓{x@_Зۧ닭`Q+}fp>8OwO;ևtDAy|7){׸{" vG5%8=\%! +eeb`у/#<1Y +7G՝ݞnM&)nLB'Hpm:|c<"#!>nmȟ{Z!,(r?G :[w9׾YL'u,Ti [QH3&P#b5gҀ=P=k87Cݵpf8-a:wƹdYk޽>t7Қk ee:ú~r^W;q}TE &qu6a7~y]G- \dh|*!\?'lP9g㢝4S=']8fUSw8XG;=jT#'ng>ƪbӫqt槼٣ +j & 2W# n q +:SwsY!tx0v@Qg덲6;+ikCzỲ6qVMNPՀ*-PRgr)4$Qj`tj.KT t'hR)0i+|j"V58QI`P+26|Rו,d +FK͌|\ +)H4_%c\nL s%bO/ QL*SZBb!.S* +RP!WK+2^\Xp\i4!??UP0*ťssHɅcJ0 +RH J"HbW@Qi v (k{Ųnݵ! 3Mbu=7;_o21>gJb#0'XHі8 .l5q(!H Fdi, (Aicgp^S#h4Ac kzj4vJvMVj™jB$(ÄB=P䊐oAA4Y'er|u2D&#J$6bn9\xlf:/!17$|#G%v"WBkW*RP>P|SSCA&'>?656Ӧ&N&<6tN4D+G" xއ{_w 'onr8o:-pso^/ '?_B5WWs߽y~7 Qpx#0x9yx0㜷? >@p wNA!}<7n 98.]?&QDzaC\7!\@nAdr9 yp~!"R7"ApNqd P'@ND qkݘ]Nr&z8vh pm!'K͈+5agm`A=mf䱮M@C:6};ց.εu ":|G:dQkHV#'వ jLCXX9a;\cXRU cה+;Z[qqbPzϪlUi#{'*XyߪlߌsԮ8̾ڲӽ5ZJéғ=JkvJN1b*9ޑ.BNj!E݄6⃻9> +}G"x_O:m'wӛ?~햰_ǿ/lnBL?_x50^]e/!c/fb`<GGѰ Pۜ2=;I !Aȭ!a7ӍtkG+Yr|`ri!xa4G9 ӅM~1ʬ4#]\fl@Ov0eC;&< еW]qPtoV^Ro rH$57F2tO꫆N'Kӌņ[u( Nf%:nݦG+@#nhQ& m4UFLӄr* * +SQa5(IY +&2JS3BJ5(Y W֠P֣J +LAU_W%zY-SԢuDZD#Skk8$<Č"U!{VB"IQrIuLh&BW+kxV2Eqc$UyJ^Dt=V:$*t[UZS9%Ũ"Tn9NJ +w* @iQAeGPYG2ye?PUp8$h!#0y9rqs啖?/'v(;$<ddeRr2yd0s23R33d#{־tTR~\ii|SSHKLKA%s) SKNKٛ@'!Sqq{ؽ{brEƠbbcV/JDT_EH.j\B >^[ +-Eohbh5Oz:)WIQ}M !>W ovU7޽Ja +y̻?8~{{2hwϣ#i~9 [ yԮP"B$g*U$S7Uo@֯O(07AX~yL77(BA|H2~~|@} ~}; (BAE.O](0Wwmw(ۏѫ]o6AX^~.H @W L: @֗k:EW(M; d=YD @㫀H8YY/G)" ) +ܻ}v`>=Ov &GKLqz"l,9Nm 1B071צ!:x] .OgƠ\< +BAG878 g +d [`*dk,|n+t`漐0Ӎ1AMv@T'?h~h `FඞdlVQf܀W s4}N7 pKgP^A^;cyhtcjXp~p-.u)͆ei|kb^_v1lk, +˼CזLt~ ,|Vgy͸W[[\[ܬ+(i")0@yV&xϏvv;3e',r cK#aڨM0c!;J}z9=h#Q pYfYʙ)rH1Ũ&DF1ͧO>A&|H6܉Q w';c|`ƫ8SM(Mmo+/Su7F#rqPR'UCM%p$6ݪCINu6/q+CnphZqE57iPnr5b*&LWioPT،J +AIr̢Wp7xLU"螚!G`F JVn•59RSfP՗uy@^VK_FPV.-j% 1H%e*kDȞUpRjT\R] :Z/IN}~5tqNR I {ҫ]QQ(6劽+ ko$3!fg緳O>XlQn&*;[%) 0ICeyr3%Ed5=Fqg$˕sf$%ܳp'&˙LMLI#JG%I^=+ɖL1{'z0nT;<-q=.tX"#%83v 6ev)&ya lV%,j- fjj10azs$(2tFBk su:Z~ 6$hp*)*5T0J\)|[l ÏHY8 g,ad@rȁL@OЫ3}BVŻ) r>}1}xJ}9N5>|i-j2J& +!z7,޲;h}9픊ͤ33zTxDs }ayNesN NNx8 Fwَa,2[աͨP#~ "o!ۿ [Gw-[1{AFfv+V|ۗwۖ +.Yƀ-l/e3o"픾؁`xoCէm b] fiMFvѾ񃝍ㇻΏ,k4m|nlzaraqla`OG~5F4k87ȫ?;:=->5ԝ=Qw9ۯX@~X{( ^{dw.#;qxN\MT5G񪆷BعV-m͸VMTy-}E{7g^ ;QE=4#vCuZXt{wSiZfae|K4lYũi4J7J6Lq +IEKa 7,Tг3=]i-A`v;q5mVW ]Ն[VSY©e/kREP + X l@dw4TdKl[YD#5Z痉h-Io)å5UKJm*hF6VҤWФ.#RʊaSjʋjKkJ +YEB0T]\K*-H,ɗTQTQɓI\TK(ėbr` l-eJKp,XlQ.&;[)% 3Le;nB;׫]<[ZT/ܧ`Lpn6 +s bH+U6A9Æ:!eC6B @+֡__[bj%{SG^L49H9 tn(2Tys"-hohpQ`)l'$\M׫y-*NJBnMiRroTe_WT!ո:.U<*sp,4(RN*+܅)J #%]!.rNTʖV[)U^U.&+JI+TR$ETqyQ!.a$ BBui~H.ǥT'WqI(M(csM  &/LH to`@'0|p>~l|}p>>|~v +u ޞ^^<)(PckA6PԗR_ ` yo;i?}c)޿?O>z cD|C(>c~wh;GSnw{o=\{( }W7GQoǿ^'y{ק?cpÓGXwB}뽏_ond|~Bf t-ۄWX^:W(!:8kG_l2t%j x渇6sB@;cwgteowJΤm b5 f6&[>B:2$l], ƢɕmB?i0vfcES(vv3b 3w8 \ aoJ m!IPP5xӕ7:{J_So#=(tדt3jujHF j@P9ԤvЦj㦯ELeʽtoN'ڲ6o[T{fdצ('imVkvgtҝilgH')Z|Jښd6-4}uY34ޅduL$¨C$ZFFqjڧ/8نA*5807D<~ѴSV5Ջ)1 +d +WifS +0w `(*ƍN^eCAQ>lR6N(l#PjJ%Vgn0}-\䔒fZqO #gwnRqME +;sX . + !m|Vײqz8E)YRCmVp9M*B٩林5KG EAP@EKz41'&1M3^m{-ɦr8zbLfg|9v0BMYå9=8H73Մ$xog;P}V-Mq6쉄h-]!WW hlSm:Oq=PTVSd8L:X*DLIGGDK`-g9YN Fbfb%VH$g~IdƹR$eojBIRT +b=P-C H /~ZZK8~O0gAvW$@_ 6|@#|@,!ޫ}g;5,! +aK#x%,B9,)' 3 K[ "< r r,ׁs ޭp +,?An_1p/@𗋰|wH ߞy +uY"|}W̞3s)~ DO!$ܢܜ`(@pc +x > FNbD.~.1MBpq?D]n: 3ӻHvc"Nl#ߺ0XnYh9G]$;o1q  @#7t`o-@w ^ݫbvC1vLs6BCuxmye QC 0nyn=gnyr(rmzd֑7'f OE^ꚙ9>0̾l"N#+H]|"Lj>Gޏk:'>^R[Bʷd, V%j6 yyȥsM\tQo6p.hs9)eqc-1ddNsũ :uzdt1ZM*av.JQ|2*jt<=-MER+ +L!rgw2D&T,IfY"$̈#J +,'eH_ Ě!H +H$=Ja3ٛmIyq:WGi&^WX<P&)O{귻" d?;T9"ElHP ] JBHgݵ-/{ $9$wdvg3y3+o'ӯO/Ϗ>~p}DKRsw;b!Q .yn"Qz{Y ^K^rb\|DyO%Oσ(_]-p2Dy0Y +u$l,nYݰNYa[f[b[6- "¢ >Gl}`2ugq@a2ۍd[TiS+0LmZmȔcq؂&AKCK4Hi ׳]$IutHUyګ@P[V [bR.)P Bc98 V_2@i]r}J6.V֍U5huJS,mXWF4%cj3ʨdeBsԸҐEɢD`p޼QQ_3*F~tW4ۧfw$z 錕dG(2Qᤓz ɤ8ɕ^aP8`S"*lR0܁jWm4K)*o$ܞ&Pfזj,9=ٺFBN7׻pefYeY ޲ɾ|VjQg^Rj#e^r^Pzs`F5U JVHjY+ M.^MRUҔJAu +WT4 .VIH,L:Ih5B\B\HIU\be!ASW* S=Y>/7VQdG-氜Ki1eK cK ѥyY,1L}yݳG =wv{{vy{vzlsNGviiσk܈ö^s}O6:gl@PgǷ>}{ߝڟ]0v/.|ng!׻?Wvcs.~{ןo/=繇`π`m?d''?>Uᅣ-{6oHon s/ ux.@jrb\2`hϖ} O<5*l!j`f)34De,w'Iwݞ`5(Aps LnnX8`u }Fki AN?bM@ѳ8F6ft t7ؘ"Mvs&ځic@mllvq؂&k`@gHדzSO-8@w,;fCg:WJ!Z5`WbR.)P Bc98 V_ƽWν!Gi]r}Z6.jTJ嚡huJS,mXWF4%cj3(O+Yq5tq4dQh4-7opf +jQt_?s} +>5 #[Hg$ӽ>Bє tRo5c!'ҫ"L +uu*Y$V#M +;0lC|cMgheh1o k"efzmynVΒsk$tsWfY_@-;ifYu&,%6Rf-7fYZSTm4%JIi4).^%M\z!NEj ¤ +XvlB HHB -4H$vQ + +k}W*mq]{3&;Lw3o9OI<;4/_#<}m0wsO #Ww3뒅j]Mq.ggc Hfdok9{[]ak +U썵UHMe\c0*Pۉ0[Co1UUX> +6~RIP‹ +xC~RyEU^76.&~3\e +v䗻yx.V`r۬2iAbJYJfpbZȱB3(Sb. d!4&T)Ho4e0m@&7GDm4FFب:ڠVdR곲`LLl"KQfiLUTZШT0F$c RR5)]+(4BZ$ir9L,C"JabDB'abP,LOBE0OI0zFR,R,k`@@50@O#IjCT{9%L?Ud?wJ~#9)b=wJ7e4)S@z(-Bҫ?-~=G./I H= cƇO]{?~I~M uo_' [)y{ ?)yt,+= RRr_$H݋lA\ys %>K9Y 7$ cç`Q]?=c[k@)'0ķxw07cܾ:# @|qxBs`r.68F8]؇!Ώa>賽=sDqgGb1(F:= 3#M.ԉ;v qttd+6 o99gaM0,n|#`56H6]?cjѵ5 )CbvL1;'Fn_m1嶩^46t'Ѕ!wu0hÑΫGV4_9Lv_\ B_1uLkt8Ji\|f KhtO$xzKir!v"#qfENƍ"Nx|d։!""v #Gn.C?!5m6DV..uc[8Uw3v&J']FS=fx"4Q ;)]< }ܾTm5}FM+,UeUW2ܴGظpf.~ߺ&X@ifT Ͻ5=tXnDŪp.Bλyw0i`Q_oGxah+ӋFf"% ':\4.e=r GK}5{sM klʸ`5RU"¡"g WaZ_cb|4lJk0(Wӕ#nXae9m]L +.'Df`N/w1:\fyr=vYetY-0ӂ0Ŕ(1&()6-[ic-*-f:]QvI9\sq.CdsiL\Sf6h7a~7^'$h"Sb w ^/*N;1ݎ]e\,w`?oE~F&H  6_j~`F5_3pأ(,UCQ$I$̐A(y C sB†v=5pF_\ޮd;XMd;0m'w=oYm,aO7-5w0 d 5ߺD*[פUSWkJzs^"竘Ś?3 *yB OU.Г%,"GWx(. * s# 2bIU{z2j~Wδn33 nM"݆86tlE&v\Eh]`mZf3#l:D`1,c`i~$eFZvE8 F=z-ft8N t!`&f VD5Z1ǚF~F6L 4@ 63œ諣Ӟz렞ZL}b3#SfS&.H%ǻT4yc4v%/'o -B49T͕ V\nk ek/b3^VoCɞ2 @Vy R^f{]ifg=@;eKJxmҌֳbRf |LziQ'kDgEiE62֠)9q +HHB +RjRrRTrmSU@r*l%|2?tK.H)gIM:UGJ*4%xu1*΋W,c\f/NV Ė+iɳbJEEeŖ%941E4х9@TAV:)Zq2=J}Di)HcID~z*)*/3527#ELDNzrDNZ@ivd*'<;BİTRhfJBXPp4=1tD@B|hZ|ԸXw'ʼn:ѤÉ1%DG"w+0.2xخĄFGD;*%(2 8y?H߱PQCBBi9p0?4@t(h_H(}$9t_wO?I +;u$OI~ s/co7K{xy}<=YF.^WONwwݍ͕[..$gptvr"989: +;:xvd='Ybgcg˳fÒ1ŖiI#3?XH X?Ώ8#m"[2LiGo[nv} wז/oܨ9V %|y eOџ$l$Ș;lh>r饣͟L~/>DF%ws[I~fC Xd=Q1Uhw[|~"ퟏ R CC#Vw=7Cރ~?_`&.;lZmio& wﷄC>߰*[7zU:ڷ,HyJ)/ =_3+ߑd;R/"ݣ+փy tuJ3B3S5 ts|C'n#>*MFEÐaȂA `Hҕˌ>LET3c4m2%CNft'4MC SZ0"mhi?XCh@EhS_@T롾::9NLO-}YyZZG B]g`MؼЬZ0ϛF*#Ҩv.0;@:_ԗ+5@HcҔ_U)Vԅ~%CS:fU - #bfUdՐ T%K#I hqF , xmj>O1&}VbW쫙=fɧ{Z`ʌR1ٻc[œOvȞM@JRx&oJ>#'o.T ~k*K~HH!@Bz@$P4+Rb3:8f79{/A~߇1ϐBylt%9391C&rfƉAZ'>~։jti:2lcu/>ns}>?:+2CYSP`ֆ2 vsi @ <(cc xiNAIuOkч }Or}$6PNmCst]^W,c4Zt^I!1fTs'qu>3Ys`4mvT}^uظh)Wy{!E<>/=> ~ _ CKOԍ0(]B]r~?xuɂ{Pw?˂tTp`|7B]]塀;| xuoB]ۀP7(˷|&nA5Cqb>Ǘb>\.{rb̻9   i6!^[k\< x6Vɹum:HXHW!Bݠ..]ýq<!cPЅY9?t٩6h 60`ơգ@Щ1Qa+#QHKÐaq'07( HhM Cw}]/85qsPБbhWpF$΅s/ R"w/1w6ntoctn6O +:輹&zqc~d +wu9]]俲XKL-z.-|НX]XE_ؑss|gg>#`6f1MxW<-''yW&B;YƵ,ǹҺQ#<5Orcd9FP#džiAPҜ3C1} 4O4y3#5N :INTxCHӑ``B죽dScd񡬇y(|0DkCrZ-] S$/۹dQ}=@Ї$7Gr8i.} =4Ku2FC5NuSjFi-M>wWs`;1>FlGշ:u^lxm+;R 1]vLfBU;HLUوlLFunSCg(Ѐ ŠRnkULYǫ̤)uR4(^QFQ4&MVh5*>ʺjLi]U%JTjN%5uJV]"`J*'Tcժ2W,Pr"BA$rT)K\VNR&+d2)TH"W/-"J$.bqAD/9XyEBT#.g|~һ + +(JR,KX( ]z"M슽 &&(ceΝفu(: +aXle+Fc +rU?jfsf8oQ[77vr(kkY|WV_VL̂ >XI|,4_B9O߫6/ros 3 V#bpbF"= >l:b~/~移kݝí@ =7ɺzs dy=v^]/$54]˒:$vTr*$$RZ_(m.3*\) z|ugeKbj Kgg~WdTLu!+=TN㋮8$HIQNvC +XJu)R9DQ"KtHDqVJTq6(L(f<$0WR _)f=-*D+/ ӘD1Ǘ@Bu4$4oQHn1:5e%35؀$Q鉱AI|1zѬX^hMO!~#|Gi%juIM4t$/1&7!:ROCcb쏉 󎦅#;N :,foTp"lȷ7" fOXgx ',ݡ~,?rx,:h+.FvϋzKԎ{vד:|{h;A{yx`=ݝgN=;'7Wgw77>3iǝ;rp۾umn]\9;pҳsqsf'[gGG>+g"kG{btbkikòY- kk>),,-Ԗ4s 5ZO6WΜOihf*rK,Jf䣣ЌX[Vb4f([Pq :3sf +m_9} yMJ7Zxeb3ڂ>DdG4g!JR>ωjSB)1_6ԟrǧ?C?&!o`Cp}}x ~_9߇\vm-,;]^.-vų9wawT,fuŽ6Υnud@홉\+m^U4Z<Ԋs.yyzpCւs SC9f~@8TGs VY7Rxd;jKh/`#XGzpwpgu#gl vr2tp~O2ocxq}\<$mޖ0=~F Tvm3v6E⎖Qoo1m$GrZ~SZہӵԁkMp Ul^gjo Wq4uv+ƢvWY Hjm sń+qڀbWb'WTm&TUUFBAO7l8P+ +٠cS`k +(R[P5ђ4jL"(WEM+-k%H OS\T$IUni*TU* `+qܢ G'(|EvX)Wd+r$.Dy*\*1[$D"IryeIsrplR6)#W,f#eŸl0(C, [.p),Fp[ 3 - Ȥ7 YdsIONOcE+)-5OMIُd?9)|qR)>ψG82qHb(G9J@-P(!HN*Lޫ vۿbיՋ/^}__^1ߦE|C >><x#{%q{8./~z&*ZB?}oǧ?=X߿s{`}AoD7E W֗bal=|~{EE۱|Zl>no:354dj/Z[2E$duɜhW>{f>>&! @?8><׃uo!?`!xh/cCm0 `D 0WuGj09cCb `i `qh 8M*8|rQï4]ٔR=[(閥e϶ҙ~JRmB%ϙ"Lv3U̩NLָ +7ewP2Bd>CBC˂҇>K:"$C-4"+А 4Z1i2i_F&kf*ҌmgJiܔzA :z<Q)I B7$USN\*f$h$6gaJh,$6p%\*7o{}i6SΑj_pV#S# Uy3cELS ct! 11,erLT,MHLi~ZtIiԹ\itI&\< SYq$))(G_)lAd0Y&.?^ɋxKWh^:DHn-%䤔-)8G+0+%1$+5)0+ LxZPFr!a9'6$bb'b$4Iُ3&H0~1L)1q|bEDisD )Hb&߄p&8H؈0C#Y| !:̘|CBX‚"C @x`3,__~L!~OZ>7#~Gk!6ף>Ǜۋ\{1dw fO=ޞ\<WF/h!\|7nCDB0ӝRt ̤037jm"AZAhf~&~C, /!@r:)ѡ]UOU0"PV!ZG%PHPyV0me\k-8!^MŠSY6Di8o5Dtt+BSag5jj +Z +|Tp <"A',_i6@ ы)<{P2-K-ʞm'ȥ3IڄJ3EgNseM0SqnBId)0W; + rQLi#}tE&nIZhDV!h&b9dҾ MLeWqML=]/Hҵ!UuYPϖQb;j6%Iq!WHrٟ6< 3"@Tj@ *alSM1nTۀ`DZ'؉KrKr.R_ 13|wfM1Or,Ntmway~<3ԉrώa<3܇F\QÜ\h!-sM)1.VM;Y;BG-HQ:Pv>Mc;6XG"m|#mV֡mce񣬻ʼC5 tnGkC40YQT}$`471GB̻UvZ-D0vHӿI]JjC>7Jb-tb ָ'ōp۽4FvfpiN:PZwb4>kuٵ-Naxm+f;R1n;ek@$ aGU5Y zdCw(d@)FBAa1ձ4 +SiTѠ:VLZ Jj`kj9 [&QTW[EUcʵU(JEתX(U5*%JV*X'V*IeUR UKrV"L^RR*VR¦X. e bSU .!D"6yBaaH*( +Y䋊QEľ8OXTr0r 1T*fcer*37'YYLRzf*#&-#=ݯw4R)%-5&u] +M@E*EKyAެ7z8W:  A*iTJ5) ھ|%iBo ^DozH:,5ߟ1~{x4ٌ؞˯ Dl:4Y/ PoyӓD|~y队H{SId8%)  1A?{P V=P 9SZ}{{O\P 9$|H72!H] d|HwTBN/B6Lʋ;^I@Ɨ^g M d|~$勛*!ǫxtz*rzx V{x$ӷsRr_3"؞ pyg?8 ;' {'!Eq80+e0׎Bܲ\]zg<\18, f=1fA8}`~-p'&׼50V&!cy0c {192 +0Gpø°`!jnln2 `ܡ otQv3F`rpݐXdHa*{#+S'"mN =Knu__Ysx* Fq\= ]=踲'y{]~y)&mG_<i*p~!_Xy"& gbgf=ӝǝNΒz8cI=}iR/n>-G7xL1Or,Ntmway~<3'=;cyvOgfkf>s 9B}[ Cνc1]&wvƉZuǣ|1vm4DxGzm=mlCp:2GYwSyg͇j$Yֆhȇ21T׊q-  1wL=fcw[` +<(C>1|n>ԅ[tqu-Nҷ{i @߳!t6>w#h|;Jk[66ê6V.vccFvLրR;IL\jU&6JH%P*ɀRZzbcSi6\ǩAuڭԨrjLZW5j\ƔkPM$U*QkTJDTN\@Uʪ*1*EA(D +T)L*c屔)KBD;.E2X*.+*/T()-EKH%2M^PXX* +JB1bT/"|'C + +(J$@A,Aʚ怠+5?vuOT5]5$ usnݮArrwǜ=ef7;MQ=%f7W 3<]f3dvr 'GGA`"D-=#Io4tBo#I `kq-^:LA!`7HK`փᕿ;_oݍ"INr}{6'}BϠ:2nfډ4N&w̑+n>/ ^43fd/ ?/L?qsbN&`~0?/X~oo ݿ>\7HGi|>>`p7ͧ_8߳'x+w&1ym~>ogAay{M ~>\ќe⧙QOz}+3,cW2j+3,/9bq=`y6W9뛅dqXxt̨'=ϕ \!=8OS3O~߽sCSN*n[=bf7ۍ.vpWpL96VqMV$lɕf&Y3m.RixV\8wW$U-gz(=LHSQSKc):كt h8fGK5[~25Uɔvj/[{i 91$ @߉34űLmHӑ`ס +r힤 Mˁ-T]"*E_k*Qih{ .FPtdLe`gyp2Qe``MR2(籂NEdCQW +L%ݪ*r 夼mK܋-3sܢL{"\S>qF66p^}dUoU֙R,zNк,$]zZg$u%4K~*H )Cj%*暒ͧ*$gRhJ9Y]rdEj*PzXTH9T:OZR)nIґ]<ôC;TWxp{/p`6TWhU$VUrWQohY4[ǓkKiN(ˌZhn[qf"MZ2Hq Ely>)=,?Cΐ[gOْ+.QlQ.ΦJ%QEYVk EZd,*?M6/]D%iITJDN&R$ɚ³6Edn$gld%Q27%"2ӓ43i֫cY9KX'HY>@Y)>rcJ\lȆ-1b)d}L)x]JlTPBZ-+#(+jEJc#ĞYĄEQekVD +\k:4 2,tYĚUlVV :8d`h0Oߪ l l9CO%,S^T|Rxyp#sR_&w%jZ\|}InK4x*\=Is=$7Gq\)N.<..Θt98$i&I&G5dRLFy$ѠfP +Ģ$.Z-ŵ{d:0I? ӃR`$>{{n0Ʒ7n lחqtf13fӘQ!Kw |@s3P )0𲅂'0G~{ l~qgl~Ŀje oe&ۅ`0B60[˦ ۛ˦ d]Gs2>̐펩xm5`el3^3<^fy6 L+ `~ztI2B;eF/Rߧv9 +pVA<V f@ѥWv,=6`h`I[@rC0,hA@QrM.Fœ.IUoMgz(=LHSOQZt:LU +2SPwW;+a^ٽl ݭ%;yX vނٝh{n lg\^ )7gl0+ƴUMRO(g[l)V'"_g1|iҺ80C=Mnd #XyY:7JkGXa&kbdȮI&tvfdd3Ft +'T?M<&@{Plͣm,@H٩ovv\tѐ5lG4+E~sŦijpY0¾v5=n3DQ :> ]fӄU0(auI0EM$)8ֶPL_ۮ-ZFk- ߬At2YC1>FI2hdUzoPIQ + F/')%m +iU:%CTj-*j$XjqKZ PIj1\"U*% +\NțY(RYc0Q,iلzrNP$)Ɋ2XQcm ")V\Wkq*)hJFÙO^mE9Qơ4,jҒ eJ+/r/a+-,:_ZT-) r˹˗E.-*?[r-yFLͅQ 9ϟ㔖 K9v-\VΙ̴,XL FJV,5gLO%fQ3d"twV¢Clݭ%;yX vނ Sl=zׅt3vT[.YÅtӔ36ڌjcڪ&֧|3MaYX|YE4fi]eX@Q7,:7GXa&kaȮI&tvfdd3Ft +'T?M<&@{Plͣ،i K7;`M.:hȁ#lрM"b4[5,a_K V}Qe(N#ˬvF%à")$ku4Ehe5(NF3kh5&ҧڨ PJ *)J#$MC=J'dJVEUB-nT˚a*iB-FZDJDTcyS#KVEX*k V"!%u1QR/]n 8Z>YeJ8?JBIHBH zHZ7X^WVwu?{ᆙB Fs9<߹Ιˠd;r3Xs2R4^Tv"JxbLNEf$=H'JM&R#S<'D$IN%Hp1R8/ړhEy`7;a1v&fslH):!2FEb[-FՊ;OBm!j6t0Z-$db 6zɄӅ Qɀ vC145 äP HOqAcBڐ`) ^lԁZ7 N 8HV}S*%MI+"9O ܃hg>$9(‚{ש@- OT͕ ?aPJ(K_" +wA^y_}|W&4~iWPd^NW>Qc_H6ob~{____|; `{" t ԏy~RPfMoA+ܻ1|f w^_k0^^߂(%D>@tdy0!^/ @:/Yg+wN } +'<)A460> #'`Z?q)RQ+\/\>2=!4+pFzd0| u.\vKڹ8g3N;$t$:d 7`$ !@ځHҎn#m #[fڄC';$LKAp`yiZ$sб(͞UA.W윑 v@LۗÌl]RZ̀Ai)ڹn#7Y64;B#i}i]=.nk=V;Z?rlѮN[qAHihR5=nOL0rP?ۆ.uԞ&vޒs=5gR}WskYɃ,UZ&S-VZՉ}N.tN9)81eyRSP޷WydW'w6Wr*zwֳ})6vo5Q\-M4->YԈeI7%71ko\w3se#cCdφFNxz\=)ٵW_vn_#WTuE[Vji 7dvV0/]ؾb nA2)5H[ Zi$7-,ykX5K+qy)ge rYq*8墬Z\YvKm9̃Ҭ%eRWFT-ZIh"5Ԕ S]8ʒbRK/S^LT5BJu"\*?+ T,%W/ T*Rʋ + +JoJS|Lh#5bwJb.Oܯx$__/~&wmtknxs2w7=Λ%B^ͭW}t͉߂;Deo!%<A^y< >y4䝙=_.PseR7{9ev e8I׏KvGz +׋F1 ¥@6C;T=ѻ$!tBo I"#Su3;N۝gvg&r stfhI6pt'Ic;Hx鶇[k#VIkC4DXCKH L!tݡ T'&oțh'hm?odp`H +hDL R[/Iq Yv tՑv\g鰱3tBj7j"Sw1Umգ;0JoPYDʑ+"3S{P;j9ʁ6AETB34L&v52eZ\^VIW#tu8%vݹ0LNQkWfSaE[h7ZE BE+7i9QӈS8:UVMQQ,Fk3(V=RXO#69ZI2ꔹ&mIR18ZY5 +i*e]_ɔ()pڪR-/ej*K2L*8%+kr +qJ*.WЊ qˊ(iy,JrN3\ڵ܅\J~NjQ^6ܬԢlL޹,AJ~(L;NHZrUBJ+/ͼz)˄3./1r!̕ &^JSisAJ;rB +SBjrdYZ3sgĞ`N$'&ƝM<}bNO~pQ9Gbv+2&:w8ȑ<;I<;, +?qY.,"N;& +;Sp-[qt) т^z]+x)|A@Xįr} !8s.6"?{|b_G:_Q'ܵ=F+?p"e@AO௟+/4Cx>@+xe_x!{&{Pv {o{' B`~t7/wK/-|&ކ, +?_==@/[k_l=m®Ãcc|C@> .g[Oo!'kO'H +];Kc" [\.<ɂoak.fa +9 3"1$eq c;ʑ@p L={fk#0im˃6||_bi77{i`6.i7@N LD;Hh 򶂟OxZ$# @CR@#bo\4T@@AU7wrV ͊xe^q7步)e\fMwgzPl̛sӃzqcNbژקW>K?C7'jLnO:Y&Τ[wV~`+c;V"n;N8 +HAAE) +* +"[ztMdMϦqlz/%&fהޙsƙAEc>\}=3g4P5*G(j +j}AZ /ʏWWD1Uf UW ^5Tk}[*ix|9Rڃ,^:7"[))6W<.'D3`2'Mq*dStEB&vBvd(Slb." ,]6 +b |ad Y\Κke̙fLg1q1j69HfaИ &#QoH74Yt,X&EIuAUu:QZe6C*Mtt IFJӨ0yJ@IIU+a +ڬLQ)0*- SF$+$YBg,OEHSSHRdT%ɒadt: L,IJ%abP,s4"!/PQ|o|ы70:jj+'r! EF/D|~!,TL?|X?NY8/y$ L"~p3{_?ΏwǛ۳MU]ܘ:͵Jb~<^4;^\JЏXB^^!jf1 +c{cSh ABNM7?:9 s:z~n['ǹ]?lǠt(sW.#tD.xN tqG@ퟚQCa |7b8wjٍN1v2;{/F'pD6Ա~6V0-6s; 51 |0:8exbϚٽ:b4Xc4 "c5ݶl]ݖ%l͋A\z0nhCNoQDov цZӊZmhp⑞ёCK/&5 G##Q=-{`t5|v(>d&4FB47-'wsjvow=]LvFcuq;sN#‡wF$Dm@ jGo;؄lB6y,8iZ6ҵIJ{6^Oi֤.wM^j"kVJ5<uz*B ߖ$\aM(tMU*/m$}Kyz7U.iUvs5xu!v"<;Q3:뙔cʸW, +ʖ}Y;ҥmLB%m!VF=-Lja%!\- ,lY;k!$65'ՑZQ1-A\\w4P5*G(j +j}AZ /ʏWWD1Uf UW ^5Tk}[*ix|9Rڃ,^:7"[))6W<.'D3`2'Mq*dStEB&vBvd(Slb." ,]b& +b |ad Y\Κke̙fLg1q1j69HfaИ &#QoH74Yt,X&EIuAUu:QZe6C*Mtt IFJӨ0yJ@IIU+a +ڬLQ)0*- SF$+$YBg,OEHSSHRdT%ɒadt: L,IJ%abP,s4"!/PQ|o|ы70:jj+'r!`"x +#NY^q"D}~!OH;>=OGı'\ϒԇx{xwp?̩{fq8> ^\? cwHc9^Xx?X0һ`^Fg?߁_ԛ۳mxs c&Wy}cHl:5nc,{鷫 !w`_Ng0/AB?;ƕ=ы` S 6H czK"z1-;%=ٖMc;F37;~Oȧ` [m˧[*D?|[*@&`z*z;y^C*fr 0w +7[/A*`z~"btEdY 4V!%x }"9IIdZR"W u.)y6Q&9!"5鴒c) c)񎞉G“D3>%$(NM=/,$a1GN&=qs0ρ7ϙ‰!~E;Of9ߠ[fn>voܩ~z[WG( wՏ;^O~|102?_琯 0Gt{AsAG4?ϟ{}?c؏o}s;O>b >|o3|&;whns~ޛu^$\{º_MzJt;4OٹCx;4ٹCuvt8 "2 Y̎;J  ܚ`0Jd@`Z0 !& T>b@su3݂c&͛ $=;f.f0݅鄒&IS ' o,-24;f %C^3X _ }l/zB`SqFs +]ՂNnY)L睕~GnTeh3(k`(HK`j.W!Mei@4I}Ɏb֖BPi1fZDETeP9XbFt룈*(y aac D:"Ѯ Հ+Z%- +`q`aW!ʟ*  +f+v?ӷc,̘ͦ{ 6SfD=i L"!0#]UujJ~/7 @I4Tu$Bn  LMO^$&kH#; d9w>{QޞgښKTܜ φ3.Mq׹0qF䫇9VD7ՅNb+8AN> ʾtM'ɶ8N.-rrs̎j&gGDd@iz%yea|S{X36i8J̑1w|(i0H1tZ740>?2tM]Gsꉉu91 zZ)nGhdZjpӬțiwYqgoAifcZ[^G3J7aVbA[mJ"n\MfF:e:lSm37jL&Luрj614M=E#&P +^7 ZI_ϦҨLZLTѠH j +yYDRuJ4C-D[I45\]WͥLUT+L:ZV!Gk|djKiU%D!WQQ,JeIaLrTMPQFN11YIbGd".\TZXVʩ@\R33 +lrK_,( P(WPXr" )9|"dQ0Yy|r3ssH9FggeGFVf&*=3#)-#NKMOKGhJIKeJeJNMD%B(tL\{^~_"P蝖RAZr:$Id `A/HYm-HT_!u WY'|"O3O IiJb$H?|/SO/R~yo% 맀_1@.Q#@.Q_߿2{ oɎK{]K߽ 8u _NoDA KH +p7_?W.z '|88)8&}pW}>8u|];_6o>8uy|ow`޽A޹"5ո7KLNG 19lC y=p՝u@}Af8^Y ILԍU&kgPD x]M%"  8 X3 b`{i+1SIxӀ!SQhqY`ep` H0a(ba0bqF]|o@腔k7nd ;qbNQLt8A@^_GJ%#I{"Ct`wۉ ێvR ;[⻵~>ZۍDӼ}v\ܵUl+g{1.QT/֌ e4s$D2</!d RVf1 Ϗi襸9 =w.}w;Eќzbt]mNL="kިV#‹Qtfc#i.BM"oe90j!gkmQ{(ބZ1JOnYTn++q5V01jL܀20-F`P4l2C)z-Jިc0he&}=JN#3i1z6jRE"5i*f1J*)1҈:LmFZ'H4ʚru]52U5SJR0Jk劲Z%󑉪eJ.U_EE\*e#I$Ň3 +Qe4AEYl)Ed".\TZXVʩ@\R33 +lrK__v, +鍖6APE:H;қ4"Zޱmwnvf L>>/gΛ3Aypv1tz#CNp:Zpպ4.ָ]t4T:j4PijRRq)TJ%W*n8B%e,&ZqHA\le+[?$ vg!R S2Hס߻K.?wuAǒsHEYU>R*%Je/<^ʝ HߟK7o$^>݌/O`Sz@f?= ၀bd{귾Vٷtܵa;m[\7~ Y[2{p 27 <+3i.D;bYpkQpkaPYPum92$(yI } II]N꽎:A5jBb;)\U#* g-ɍo`57x5t4=qT1>RwJPl죵pGjK.%b2q\⌘EW +vq'˨yu:ߦçiy\V*wfJrلCE # R@%Gdd" ?D42ay&DtRn#<'-"$LI?ŠÞqDBHF1\(= +N;xpGJ; I NL$8u )ڟ#$ +/!7>n_W4aﱨHܞ"DF &p1aa +#:($P(/2=㝙oDpngx| ݿ74hΐ{- ˵'@}Xןے{vn׮m~~B<}}ܽ21O!z?o7,"wqn^۸q`psf0г\=8ήw1xx4wwNopc nTGPZ7WJZ*ZSU*.JSJM'Sȹ\R%3$ԐQ+ ?Rle+c,2KUP$rC! ;o]mdbF|qTU(8+iU +C>T>;21X?nߞI`?>M lB~~ N?= LJ|xbd4QN.S}s׆e[w _X#ns@y%"8~#XNbA,$5pg ^úςeK Dxp "ܛ iy NϝIĚB(nq!A%/"#]DX " E<{A..D3\1&&ρM؄[1-B3@& 6r!iAC 87Xg@-_5A=UMu:CY&:ʨYaR.Y pZ1ZNM'5 +A%m/Hا1AUU҂ђ܅ )'c>J0c TDT(EQT +j,1{75]3$ӓLL223;rp|h6~>7n'vAY\۝mx h>l|X7u` 씦 ֺxs-$5^_uZ^ WD8W%G0 {'9Bqyfڙ󸈙i3tisQ9d0m Vԭ +cQKaq[ ͍C( t/B?3oh&&l(xڱV5稴\Z=J=enBU;RvBCjhY |vӀRS̸sAUvLUW ٫yi+PA3aP7_ugP5vW•(ykCe-fz/j62RdVKA޴FRUJeĬ5(IW 5TFIjQJlp0:5JUbS*ҩBmU9HSJTA +SU+l ++C2T~ U26yRJURrKi9JyCQr1VG1N +rNJliI?|I!%.x%"V"~(UW(Yd +t_8n^63&-'de\ϟTLgJqI\. '%E%s8,ҼiTlOK䤦8))4dZB +4ZR|rHblb%E$ǣBED"E""qpJ+"\+ +0!q y;o0Zs{PFDS}k"_kCˈ|YyIA$xY.׷q +?gM ,e1 O_FDe_ B77~zLۗ_5k^?|fӣ~|C?<:#I3x rۏo><-z{ zvtӻa'$Q0d@!^$!q*_>Eg7CE 'HUxx zpG_!||;.!.C{>%;E`Hx: ;5p52 Z"0$psn,H<\\Ñ+c vS$$n$cg=#KcQ6FֆQ$cu5HX@Z $Bp|}> @3{ܦ}Mv$N6$ Ɲ6N4Ff'B@3AD˽N.ѶrOUKWn'vAY\۝mx h>l|X7u` 씦 ֺxs-$5^_uZ^ WD8W%G0 {'9Bqyfڙ󸈙i3tisQ9d0m VԭVG P0 ]ߛaZQA@? .^h ~fMK;OL5賡4>jzXՌc<^#ݬ]֚&T3 `'4;QvrXwog0 (U_PfV) ss 4EBlGh(w +wЌ~M@m4Up%JP4yvY٣Kf-4ͤlR-k2zi7ѠԢER٠e%1kjf} JbUf 6ժQzZb԰\7*L%NRyTtjP[U*T@amUP”+EJ|BJP* _)(eBM^TyelRZR%Ah($bT\ 丕QJ"A([ZR_R+@e D8^Ufq_,Ge" +)yd"an`99lB W6{qrLIsYY(W'Ue2S~dedyt\R&&1I~B_T@P(ET Mzǂ&HoA"%VR5Dc{;?pݙsq9oh9\QSi\\XnZjWg J7ىrr4QrX+ZU*K(TJ%NT(h2'דer|e2D&IibDO#f&aF]"B4cڪ*%ushsDb1 B}@ٿ]%?7u2Qo^,!Ɋ&Z+ŪDW +}^,Kx)PY2>-¦|"2sd )l ??ucXhs`y ~b~\yd91G1wno+d=XG,7`gnVm4eioi +xylbd-X_7``On! #͍0`3D½Aw7#g-#t/PaLݍ]@ME4mҎ7ڀ[p \meW3rI +4C7Xg8!@-诡!AU=4\Ҽ +u2d"B+YA*F|VSΓ4^9!Wt\,B]jR[ QjUWcZE2<LBLfh*D1[5;\:ٟ>5xlg>(cr6u5nb^Bd!fԉ^D7/uY/ntRwY$ZI)W;:pyzI|%^iOi3'iuH3/ql%03IhҹՔzoo $[[swudw +몱츎U,!mJɖ +B\3\SƊL\LS!s4 % FE_,D՝gӘ;CpQ5 >+xL'UXeȊEq*M,+ "rSp%9dR^rą\AGs3J.|6Y$ڑ3DSqX#z3R s9Fą圎_v/.4;w2鸐̤-sJ/V+ IK! f1NE:9SHlOu"(18.0!!1p"t*:20>JP@w,rvd$.\ol#}1qhᄽ'?*/246GP‚}C }$ox0aCBXbglDbj:h:Fn2XXU. i&T4ԕ-M7@ͩ+&Zh@Wlh$L>}Me|$Vn)I> +JYh4 9JMj9IE(1*pT4(x %zU=X#"] WUȊ5r^Ej4*lᤌU-j\RFSV\RB^Cu%T2OEUVrj9*˲./͖NVSB9QUJ˪,ac9^ceV᎗| +peN,-,-?^R'$8.T.WZa.c991iyٔB:I8}B܉Grfgf98W Fʉ 6IJHLOǡZ̴iǒ2 JL?zvWT>qGSRHfħ&8且$\tJb"%6'&)HH@5BT2->&!'&.*."ccbp1ч +E0"#  + + eP$(-$Zʻn[ +Ѐ_ FB6a MR*?_'$\@X oު}@l8& 4^ʼne[_$D Cԯ/K7~HHO瑢3ExHH< +ߟI$s(Ѓ BOJ oD"~ #!? +P?},=}Ǐx 8 i9!_} P@PW@pއ^ߓz/(H.8s;yH/v!m ;lE=ުg$M(6%<inQO%(BAoQ3u P\GPM@xpE}tp5>@2`a^=#% @yHؙ[s\P MC)@ؚOµ I PЦxH^ u"`m\@QȸXÌBIh5aky K(?A@sndz3C$&x.nL YQcgmgϹ@\ s@B4cf:o +`w3Kmvβ˺ٴ7B:l;km;cDv.a;ͥۋ,<˼5Gv\Ƽ g>w(kӢLWg]a2F<2nL91ObO&Z +~^nw0|eͰL_gZKc-Qvq\H 0/ЛhaAzf8=siH~Bㄛ29O?/E]k)=EyGx ;n|a"S wYp4 v8CE[33;xzwG%m#9 &Hrkϵnqp.C/S 3"mѪ۬ -5VBt U4ueK6 Bͩ+&Zh@Wlh$L>}M痢7T>cqhRfV#Z& CRZNRJ\) +^zyC^U+)z9H ÕhbWͨj9j +e8)@U˧U|9P];U/娪/;|v7+"H/"Ղ]+6K콷4{&111&`}gnfv yx劲 2a=TlAVʝIΈJM*IEfJRgJIFEd&c"=(I$Ld+-1OOC9bIXYaX7ʙfqi11QlQQ!H9+$P +آ…,k3r:Q砱k#F E!RP.j(s&* [Ql Jo Yd Ƙa >bҙLiJc?Vӡ4:jPJ֠F)*P)%J/I K|`p$Zs1s1Db +sf75,mO_X,<,=(A55Ĝ +1lF1Qè35#ߙg ށa#7*P0S8*OLg̒K9/űXA#9;h<`,o>OAs.ݫ;LM-k |#ͯ7sD;7<-_n e~siL<')gҍ_gE׹YƮg\/\fc"O.㋳<ۣ lwg? 4w=vhbϥ;'si /}c~\?| /\_0ă{8 p3rvfէv~q8qt# #[$\Û^tdBtx/: ;Cp7}:}}z=z! !q UvV\+m_.[a{-|Y%lYzM6.OѬdmڅtkZXjŭlro2 5_:-t . Z]> ZpiW}/j:? uQt7xv߹=]]h- Nԟ$$t;1'Huw4?Ku%κ#:Hw9 ޡouපLUohލ>ՁP6LjzYڪ-}yziZH*wmE۾Sղ*j_݂ٺ5oJL-,eW`J7-PqOtCV 7,kFij[*ij*["wqSq_A%ݒ]Eka +.i,Xx"TCњNAD|XSj@g,oGu]AO&Y[-*g!&ڼ%-r7C jXusg, +шioϒPŒQ)^X/jCE j P-1Y5 +̦ +\U2AFc%4,JR<+ ԺTkdԔTRˋ05BT”RYɕp40% c$ +rP 8!ǡ`/#)6VNXq&Yb1hD*,.5PwdKF +آ}Y5ns9(sX\5f  +v̎R)(nc +قCv9fa٭( Q[M6 V,2c̰YEAsFdb1LFqF1CPVKRk5(DQkSjIERBä% >08- jpT"1xXyNahaeP~nty<3353ay r:c1?1Fg}F]QnL(rbX+z?M&Ff E&=BK@KHGT{@,׫^aofB&̜ݷ{[;I'掎1? r;wA>o}6CHmHYo6~#*8d}6 X[ ^3r6 xvBH`v`gs Angy: v֛'3 Angy|$GSHi<2?i>cG@w + L7SpV 03)`F,][9= gvLͮv!MS kNx0ՄNow⌵)xځ0&܌Ĺ ̻&FF`2S_X'} [Cgfz5CH@tWuURHD_ +^%DQn6\^kU֬Yceɤ4ڂ$0bRC / j5jR +P%VM#%e#e٫}Z¸laji*qr jsk,r|9i=c-А>^^ΤU2' T=Y"%BcVz^X'1shiD_KYBꐕ9Qj>Ih奋L-67S)ME}MR6rR Rԛ +,j\JWAgzg-UF- jdtTlHlR*E[/1 -JjKleY$4]ߔx*"BD8sL'.0&< w<@Dر4G#ϝ9F8y&uPL  4aN`3VgN >u(I Iށl?c2Ӂ4?H8p긜c'J()[?|fﱀCB~GZ9w8c2)>{/iρ}p +ڵϏf>_=pRXy f8={X^>f޻9^{{cN9;wzs +7ww+b+>of.8gB;v8[8orb)̌8a)ą +X{}%YHę>E@.z(@qs1?]{p/vs_GۓyS7f_6hoXޒzNwx8Q(>nXwN?S}^3}>mݺ&՚Χ5'J?_9O㥂lGoߞvٷΟ +#ޟ!C2ڻ?<Ϗp݇;ϻ[_&6ooW@ެ:f}e-vЫ%Ǽ\tX_k{6瘧y2Wp&@q1;bGlQpn]A@.:$ ,Ւ&oZ4oɚgnț3 b鶺Eӌ)=&;3nBG`!„NAfN0֦jh@+⍴+tMtCbFF[דuBW "5tjc Ub=L]EUI.#I +P@%D6k-jZ5k~%ňP jFMVdrժ\}c$wq,y,{WsOZװM 2Q- /wbZ޵Amյ~EμQ\6g"g0'5˙ʞ0pY椁*c4k\D(sj\$f."qW:KH2;qC8it"\Ŧf*(^FNASRv׫q)]u靵Tɺu_v-, l"E U)v,wcILLoi3&^ι.:{4\�D8Ĺ<xZ {b[BQ,HȾ0FC:c~(&h[Ѡuv$hu(D23gH]0 69`cIX'ٍ!,}0X/²<2I~6P3Ef Aqb =1Й`š#}Oօ|TEizI'ti^t;`Z*;\Xjӡ{0݂;*Ӵl6'KXa6 jDfջFXɌw :hm1qjlzZͰ\m7Ttjs3ԄT4A"A ԫU(tFysLM rAU5Tha2R'UQY#$ZreMLY6԰WSR)BVVSVPVL +,FT)'P!R)$BR.T"-+KJJb2L,D˜"&`B@JJ(M|A1QLv|!_\)/,lχyLpy|.)ˋ̓.ÔÔ%!#\a$j7f̛I9DlGT>KEpn_iL69;ůիgEX/R}O(˧|OO6zǼ*ս{£zL|yBwh^>z[r)$)h/"ZtRdOkH_e˗$]?|?!>ۇ o7v~!`WvdbW={d@<}vՓ;n"}sggS[gD/oԍL`5*|zdK>R h^Xg8#o{g=CĽs=``ud'֝ 278; V:H6׈kG@fp•C82*` ŃF3ӅL8ueέp6Vˀ,$N-$;1p|g9,86["AI8B'M`q`{ v{aX[Ў%AX~1X` f24݃b#7Fz>;}z8|ph׃cC[磔 ZϭC{i;''[;ɡ 7GcnGoG3d%t4bBu\\_82y>Sǹ W";ݽuuv;spU0})NO%냵o,v| ˻vlwGhklz`sC*g<{<3݈ӬZO!iMF`Ε$q.sy )0̵49Ą X}at$PL> #lsAH>;honf(6 `֩Amr ƂNCX:`^eOwy4e l, g8jc?;C_W&/{:cZ3Mk5GI <67]M]m1NL 'LvTv~Cajw"T> iwmN,m[m6J՜wY'Q0`uv3Pb:2Ta5ڬo©2fD GC4ji +&F]E&VWQT8F%)Ze\j4dj%>NFvI$8ʚ!maS-TR^WLF)1*U0YROB*ɥRIR%a\ +ODZV+228e"QIX +.01Eb!L؅"P +bZA BZ+*dS_X@).nxay\.S.7v+j {3*]"Et2HHU@`+a_̽IL=>OkR[ySjOR)(t[o5[5[ctG؇l7X1'Pa:)Tk/+ WV겵bSl-iuYMxjS\i.$__ԟO)0lOn?hsps# "t,;~+wxn[wBoogЛLWE2!%YlY fz6osB'Y=3#ϣi<2σA{Hҝ 0q=D5<#Iׇ8!!`-,E.YQ:z(|?"> "I3 i.v\ ϟ d; č + 4+X#@8ӈ \P1"R5z*uӛ :ψ(N#ICA)$$g&44hאꊤ BM>H>A"T su%yW 憊s3{4KQ #{Aʛ2/r99sٳZKڬK̙> nZG'd\)ѐ=qnK:U>*Pȗ6i0Ii#2۝ RεZ$ R6+eul";k0*^TR_]~ro S%ԲkK&$vTV)*"/8BRbK9!ވ3ئ2Ӝ8LlC) spqغSzz1'E)>Z[":ZLsZ]]L>YE[U*bd9Rˉd2qE3R"x" +*'DOÅ D:~2WTXIxbpm.#%LcТc,Bhd)$1BNd34D\P1BpN*#aGSH"AYIcq3b3+0#'! dvZ(ؘԄ8hBj,/%& +p,.?9V_MRt$PbT߄p9GEĄ ,foTz/287OHОb|Ž " 7?nw1G +:Kox +;+/o?Nо}bv黏qp=0|ֳsi-f//|v<\w{r[}u9y؁stηam;\]vpsps96Wgg;gG6.,;G6)l3MemoggecmͧY马Vx^8ZŧSz5 +E/%q`llQ(!JIE~C}WQp⿷j}d +Far}xih3dI +>`ޯV̶w&[Qb-[KZ]V Fi~4g/ϧxuo`p!X}$=?~ i?ܕ ۖ[ &|› b,"{ud@/b^,g岥!X^s3=79s!'!x| fBh̀`/M Iw&Dn n(s}pb]YdA![G #X7^$iPnę?_4Ёg 30a6qcb(mA5+X#@8ӈ@s@wψ]P-"Uz+AB\w9tNuQ&ҝFFSHTId\K @I4 Z5A]H@P[PF >J*H幀>wQWwe0kn8ga8cGԫ͝0tA-#+w~37 *{KڬK̙> nZG'd\)ѐ=qnK:U>*Pȗ6i0{F|{" +* +4AiR-{-ӓM3u&[޶fgw srs^Zf + _-r-vNG]wH] \LY$Lkc3^iJTܜg&;@ +Hx;diS(Hd]`bֹAh&@AuOL 5L)PGL Ad<97Mw'ZA[2[!y,LhF{!摞f.u,nZ`n2vBN$C˥1 y {njqqч9If)>O#&hۼ$GZslV'mnqѬiv8 uҐ!Vh^}<:n7NWp0'q +*y +y2%7/q!^@Fhr;d HC-n^i軹Z\\aNh5{Jm !6/q\vIp۪[\4+h,+Hd4dlH*բ:@*B<3HU.+R7*u\(*ff҃*lFHŠ5Y:EN"7kkHaրu,RP)5@J (jR^C4U ,*PVUEZS$Bv Y!FY!TU+AP(*# Dtĕ +JR.( +9Rqy)$8|LW*"J@X$@V(J AD'/E |P8--@$B +sE"PNP e >kd |P07)P2s!9DIP3r!Y\Ҳ2IJdEjzZ(%[T9LwEi"+Tt!E{ꮺz gHΜdGw@Is@3t>O4^S24 &EGrI *[skn- hMHCB%XAϓħvFxo(k f>OO\l"p_k-AA,]`4M>{Pynr2H ~7~!'&onJ uK{}CBr~ XE@5W /ʻ]B/HB&{]2zzH>/db&O$aP\!ѷأ`#(4yg qސA toHBrM ĝ~ 4q7gN! $nBH8 U]k' C_酌=1ͺ xP@R<#cd +#e8&j`UP @94[$u<5Cb 4ʠ~ 5H&g!q(0QO8y 1ӃĉZ@)z9+$՜Dt@ܗu: +HWVx y{4Z+Z9*%F>hګeLuQTA(ו;K2J!Se;8fm(l5:`%FߧȨpFUd3 QU^j=#HmVٓڝ.iٚcK`[IpGIHCQ⼁",g8Vek#r[KxrZbNJ[gm.e7g;:<դPPj*dhT*k0ꝑS{zft٢U7$0s&#ʹ[X5"m5iir;@lhojڢUR* 7Vn +b]}˧;R2Uɇ'זpf7#fwHU7+Ct˃"pKE> @N 녜y7^U?H40S&dI7N1;6F;!ՈP Y =k`3M<ݖ'6Vxxpw,C|orLGDC gzϰ@w.[]&Yb*ʮ²![ ٵ{KDkvݎ8E[|\'3;l{eܘ亂fT6 Fs}SzcZ PPy&bZƉcnj*G-$-K#fF8iYpcnsbvЬbw>J&k萋McS}&>do !pa;K>ێ0ұ|FhQHy2d<06 wa{ nՆvjrۚA;ߦisYu^UzLTj_R:CVc7bmm*TM']JSY*NPeG݂00UBҨVZ2VE]1IϜrG!ET9;2RTRQ4JrFڄ*QKQe*YciD(P[yXрsIX(kA]a.JjQxjH +*a3TQCU +I~meyA]& +I|M9'̯4N旔Ji驩VBW|j2'!d4NR|r&.)&161xTt|\iƢccbbQ~QˢPQ||~>0fD0+N>'W{^= a3"- +3 aD3ՔUjO/SN#~x$1>$?|IďO[?3@N??>"/ кккPAwZ*H_sW@ ߠt@Z*~@~e7Z y:ߟO|'օ k@#g8%h3擇@Co}|0=|xк@>@7h]{@ ޼{ub 7w0;Oxk=m7 ߽q׷݋ͼ ɍ03Y7uO<`gW 8X`Er]']1ۛڝ ڙڝ>~g9 8SIHucPm6G 5fGyF9 V -- @L2B/ w1{nE6wtS@"prۍ;ڼ`F;!ՈP YZ5`Gn˓mhtex`8M;C|orLGDC gzϰ@w.[]&Yb*ʮ²![ ٵ{KDkvݎ8E39\g`2YzkH9mn`4ק;78g*umH:fm]X|ryBҲ4bfXhØ7F96 )f͊!!w>t?F:gL (ٸ #g5tG],cHFcpqfn]ma&iihtjcmzzN:UjQu. DUݡ +sXZG{jFLM餫Zij=KYe [P&]RW +\\MPɮZ< +)L'٩j2U4&TZ_v-,9"+.fVcefZieb̴X<ϴX3{G.\ԧ}sQUTuQXJs`e&̞J*-E%p0IyVTb#j.$s\Jfl9$Ƽ - c$If0 t4#iTo ٩)$ C2]d}Fjr\zJJfA$t&΍&l&$$,f69I2h4b$ $&Q8y::^&ʠթZ-4(*NzĠ"5\\QQ$ZV TNQ*jV(h2HL:DňFF`#|&UL*E HPbIXWh%vC>߅".@$tBR+;!< 2+2+3B!`)"%dx1wW%߷`W<> y#yVͽ>h_>,߅>xBB͈ݼ-wυ` A_OA B냥7_u~w;텀nfo=A (^]S׀fϯ.lyzŅt ːȣ Y/<8|ߞwnDw)'}wg7p7T?=Q:ݧAֵ\=~Wq\9 0C.9.B 1gg^\УNvklnt+#0<1#Tý4Enp`ˁM@o.fnޯ fzٵvD;ȶw YNlkwk!V4ʦu-7N5Nu5];p}41h:h8ʨ6h<ڹƉ.\uK;Н.. {1QQݹA*9;spڥ ݵמ$9unܻړhm}{N짵S=mcFwՎ۵֓;UGvM6"᭭CDVǡfJ ǁ>L^c_os-D{67ۂ;{oc5N{֔yQkd&XN+۾a5t[7dW\뉊5 t3R*h,7Rw{Va:<*m_Uãv}S[=|ku֡7֢l-M֭blUuYn{#ڶ +O.ROs4yTY]C+,WYAi*4ңzGy *Agm)QZMIqzMy* WSRJ.ҫJi%DꎣRa:KyMr=TZJ.a"G\h!IdS; ' a2r2Iy&[ƘIN`NiF*9P9iSSHY)*1t2d3,$.͂HbiSLDQMLkIHYmrIdB9)6hĘ㽉I0HMz/qNqt4uMASZi GO^H +EpQw3bѢz\(?,)ןO$,#~=_%7_~O1? ;`@6 `&`=q /A@:S׀_f0< +y=<sO\\_L 1/@"< =볐u i)@tgrһ' uݠOSd\SIn&lc PB!J`%r!#]oۼλ^v3ݣ*um꩷A>賷zv!ؙ,lc+pn?7]k,W'6' QXA C^+C niB?Y<}T:ќ1^3s8Wn4աT 0,ve6ovi~mdCV:!-d[!>#0BL[`'6Unw٦[i-~{al/24{K igH qkyvkN+¢ݜmi1Krwmfhh75lάt6f̚k^&jmnuʌY:^&biԤ^èrQ.0 >!c A"܀Qc`1f $lډr`d^"xOtGwxOWXw$hF4ҩgw!;6$CM(#̦ >uNi5bNscmU+p6c]>,5F èFU v=ʶfjۡ*4YY)75*PʍZQnhZ4J,zT^)kRѤ$:'p)iKKZ9T*Hb:bBHX֡ +JT*P +"XP(ȨYm b5@.H +[漰u<$WPVJ%Py5e%R򒜪K$ٕ9U%K$EŌ"l*Y +Qg + *-HYr1J ݡ.,οY\pL|ystCQyy$ss30rIr砲Yss٘gI"9y)gȠ%%IRVzFrfz:Ҹ$f%I;qSBzj**>)))$'SRSRP񧒓 RP9drb"*:9!/&1:LT#.&>wɨأAEDG#2:* +v"2q"lla^aBi!TQ#}Bd:? w#B( 07H]¨{Iq*ߏ'H`8@zgq,GFyl=_~ۿz8{+/c/G0zߣH'HB^> +cxF`^< U}|JY \x ߂_w_[/? Oꏟ'wxp~8XH~0(>A {]=bo;G.8| mz n b 7>݄~>D֩\kǫ}pw`н%w"nogeߖ;pn?7]k,W'A@6@Nk:VA~~ t0>=Ifq.L7n+T'Lvq f`F!f  Yc oB^}Fa^JN*w=m&Mjs[(V:Cwh^dhEknEk¡/VǂIuܖD.*p43¢:<԰;zEژ1kSMZh ~Z­P{M1"ҨI4Q]m\a(}(8ΈiLڽU{GT3^+ Ѧ^+BnD35"j޽`y)8@>{}w1 @0zg`AS0 C|5>@C6?O{ hB~nB6&o C6qMp`^~?臾?B2^\A\~_@'g6;ixx +xA$ q0Շcs稰Gpn!!= +\=]9<~>~ ~^~wC)'wN3 68:: wh#}6>3꽀Ӿ|@zX|ρ ]K`Zٽ`v"tv~G+fJg +ms'ݡ:GmනЇQ}m׆VYTo6Ѷˇj>Al8h2Xv !F僝K.tqH؅ua>wyѻsCTkcљN wjO麟moVlϬ]c;uGwPxh=S͡mmc߶<ڃ[5 +,z&N}[yZToXFiӋ݃YVs=UZ3gǺkV(߶Suu3t*rDnlUl^US;?}+9lXF *cn)h*l*t-vTӾx}gcѺ +׶cִ-S@(\_wk`݂[\':>]ܝʹ%Ako¸נs6z YyW"ǹ!ܥ*TNs ƹV@EnSm%"JMEvc5K" PQʢ{}9̺TFm^[Zʬ)/ʨ.x QiUE,sTBR+Q)y2RB% ybKb3:C%:sPWNۙŞdqLV T3#]H\nz[N:Ceϲe9RmY驱i)(kcIO{2Ӓ8$%5K˜sBLݎI%*f ˊҌV_bX6Ee@6k[cDGt(RIc2q6#M&.h``iM F2FF4j 40jFPFhh`)4j5JVBP)(R r%d(LJR K%&FY"@-B-BtC h"A" fN,"j[l.&%'iR7>Nh4Bd,Ӧ'548|G@x?=7=b| |GOq~TQ^+2%z,F䌩霢~36{%aR`gN cANGߦ__}0~{?ܝo m&,7@P_27 6]1zu;9J`H^^a ~SoQ$i$(AEd y$ 3"i9 HIDL`Ywv& fƛzַ~~kPԓU`+E=ZVyxvpoy 3 DmϠ,vf4nOr&i7'h'%L@lkk@9d]mٮHm@l؆82E- Kl} a\Ͼ]3]rNMu!d`h6[8lb&Ta=7٠gCz`~2TG A퉪ᰁZPz/IsQR +f:qmZBQIF\Kϡghx=吩 0ˠRp u*kPU]3VޘRmLTS-ѪgFd} Tc+֍ƴF4&|+Fl͘ !Qy  +ܹAQفyfz͔=jTl6٫fVLtTwQ;˥u`٣f92mrʲFZE)[ʲ Cͥb2JRE#%OOQK2{Detחd6ۣ访`Uw!]FZg-%F%~,VMKŤjJjE )U7Uo.C3,IkvQSܨ$5V%QV+4j$%+ +IIuZu>9Ěr<ҹKRZ*%n_VˉX\E%V]M+g-+!d2#Ė1%y/ +dTٔb%/CBztQN-+]JTN?[e&H%E䥧"&*\8O +I)SIa9)I촤TQa +Q$'d&f9ӓIHS(RcI''ņ$ƈ NFH!1QsQA 1gGG%DQϊĎF*N:&xt1QgBQ3"COD>q?

_cEI??V>b?>V1#OH}#xXt(=|J`3 `'v:@=}sȀ-Y߁:7 Ӈsu$ew!f\zsvCJ2#ʼD^\2gy>;{vlOנ'I:+**h0Ig p X"}½w灤;s,=3iݞ= nMnNЮOJ8.`s Ⱥ:J0]0kcRV m+P϶iX@U|/8z6۽kK0 B;dlLfX zc Gk`֣| 6ȡb 󳔡:`@=hRQ4PkCKw\*@ȁ*(v6-@zLF\Kj x=吩 05s@_%5:5+KoL6&t)]AhU3:^U#V>mc1mQQEFykc}k#aڂ#OcfLMҐATi  yCfsgYEܠ(@Eތ,MtLrGMx6G('ь[3%*{S;EQ^,3ցe6)in)2S 5l*AJY>=Eѫ/i]_PJ鮧J3KbAA)* XP@"wEcQcSvzIO&3;[f'$3ٳg}/{{%rÅފVF8-/3ُ@3̻غJxʱ-͕M}HSh/=wGzN#ݍ= 'n{[W=I95IQ+@9Q}-$e[Z{[ gO *4Yiwv9:BF)^mulP5D؛Àj|Xgm Ђg`W2=U氿f +PaO8T写^ê8@*\jw9~O]+JaQPUW:1 +mщ,e 6êwKlӊЕ1(0Ę`vSqEg_M|-\~AEǛqؘ?|-ܞ|Dxs y>ac\vypwn ?}d{gVGڵ.ٷlwd2nlX'w7N >C]]lӝ`#l:Ψ)FGN$:Dws;` f&ڃac@I`(z"wz0ІijnžKhջ3Zpކ\;53 Gx&R5Ǫrl K׃4!FzqkU1T*w{[W=k@;p[Y9h-$彭8jW=-@, W1!DW1\ hqP!%X 7?)GX>{`:_TJ)CfUQJVŁ ++v.V>w*zpNDAU_Ĕ:*v6F't< +30i/a+YN+BWV0,3RKafpk7ǣXhK +H+.11 +@MƂ7 +bTt"@S6 jcBUh`g( 0vgtx Z-LF +]#gcFU +FwJ.RR)QfKٜ2TYYte&.'V(؈,)1$ +LebT +32424=*-Nw,J"J 1X N*5M$H +Aj*/{օx@&1*JQ@( ADARv(rf23$^Y{~ߵJGjEY\R.  ^ .ll̚W.ү.?3)n gdV33<%Mʨ4N;eRS|t\wVJ,LحO㶫/0{̆0*29fqքOH!1scdvTbs7r5Śd5?0@X^ek @,330S$' /# @,3?qHԏLf8 }  = k;hM f\ol36 IJ@Afe˝ @,[ 2c!Q/$E/yyu{eؓHH'{SaWoHu Nina4o- rfqM Zh jKXuHX=z.kI]5Bpx]i*dJJhGZV#]. 9-e[etx504 "y},@KbZ@5&_\)\<ɅB:PyR|VJAk17s @?+BP , AI&*V.)DK A>fV*i@:ܦjV 7o)ͪ4>HhQyWj()}-D%6z hP&urur \y%tֱ{Y-+&7&p풞ˮU^$ޚ[{ ʅ\Zlf۪ĵVf%Ve/W +ɒkĵT5seM.S'/quLK% b±"BL5/22/GWS`ڱ:7~cEW!Ds4#+TZTiQGϝ:,;'4ב<7%!DJ(>A8RJ1BFxA.)F&~&;I̡,BiҡS\O*xeDT')>LƐ=GS RLۏ U$id$ + +NO! Aiqp!SѤ(!A)1c&pDG"pN8?>2" >_EGgEcsqX~чa~{~H0oāPܮ#aC} 7|syy 8+,y`[+?P34@o!{ w=~اGۻ{{_fo]ںw.zl-~|[w{ґz<9o-<= >;wc^pܮ}6mc6W[qM&C&s.m 8Gf\[ػ:7pqps9s.8[W''&-;gGMNGFqpst :؋d,Mvv8+;[[SXl(k+ԊK7 +gII\RK% ,';A\B٘٘5۶҅q۴#uʁgʕޙ2F}vZmJF}QNi|v6ڗ)b9,Wban|5 -|ĭ0J3ܼqPo~ԚקwZ!1scfG&{zfZo,_%~`?_}돗]zBaLO_w~5c}?Gg`L_ 5uV]Akm0gyƆ3: J ֫^EyY]=X#@|3w #{!Ua wxm#i5 jE`&LFDkR[V_W)ܨ^/tpxW+@ +0r ωk)[.CR +KT <$"B}LG]_@; Pwx䋫>e'\^U'*< }P +W +;kXYlYJ2W(tOAM ? fV*i@:ܦjQ 7% _S1Zi:7/JW$E$*d@2WZཌྷb `QA@ ԨI5XcDMbڤLoLO>3kuA\Ln~ȷֳC}lsE܂vvzfΟ;f,3nL;f.ֵ~)lvgpsSh|jĴ:ᲮN,''qWƽL'AGI>%j_A9} 40?D燝!"AavS7ӏ1LS9Gke;ڪ轁R7yħy~0F7޻KXT3m׍nF ڥzjy0Ճ&@'q*<^ڣn*\Cvmhנ=VϦׅ*6C"MW+Ϊźc*s73 Sj4Bl`2JjGj1 +jMf=Ψ DhjK ̦F[je}ج5 ZSl"*2T*PuZ6R}MW:mJR[Q*a`$ejT~TWV*%CU(qAiT%$2\Q`e%MT*e>rUE( +I`rJ +hr) KV#SP,0/$S* y~DÓPB. +1ydsrHE{&&qs$I |>xdxYAf@ T/))13-$!MHKC%s>iƞMIAqiSħ$yL$Q&6+1>)&!6 ^GEŅ"&.6ĉFEDEs}"9QLQL"}"EPI(Dhvyeszy//8?r~^:Ì8[R8/~N|vσx_ɡ_^b8"CnkN\80=G{v[8_4wpފ!zӖ8DyrVTHp@b-x@ok1 ^~ | pO_o'}ϟ'~<CJ ;0@p:̏a0@"]Z}{)<\ <6,q`- 9ա>`>9  @)&>\~V +`u W ,-./B̥\ypw~GDg8d( X c:(``e0ZChy1K!>; +s1n;4S 8&;nƻ4:Ѩ #nj Cm` ;#9Jq@낰rSWVڛleA_]j~eI+'K...,??r6 T7<̜?wY6fܶv]k;֧,kSN9榴Fdiue]lCYNNd^wL'AGY\A9} 40?D燝!"A:>ԾavS7ӏ1LS9Gke;ڪ轁R7yħy~0F7޻KXU3m׍nF ڥzjy0Ճ&@'q*<^ڣn*# lT0\ET~AjYwXBx^efyik”MP;RQjlpfnC-4}:eY3Q4(ڒc@z%Qr:DŖjE_*60rsM%Jf2 +TaMT_AUN[V +j4Iu_a(UUU$bJI%Py*J\dP+DU L)iaY FEFʽjO1F;\UqQ09ʢBlE4Z\J)*ȒHK%;$~|*1t+#ɔi_ &$"2BL^nn0tQv^ | h\?IRsn6:^ )<^j/3EP2?#KgJgJLK#Ir}?5vq?$H( E(ޤ +"V~A)ۯ^}ww!y6d2ov8y8i88TY8;:2윖٪,;G +'ҁ``/^aoǰ3'1Fr9%dR%I()Z*ѐfX!Owtq`KLڕ8@}]TQԷE7˒b}Zr.RY_TFh,;Y>(?4>?5D>Xo?]!›XS~1ͫyi^K7 Q[&*ZSW$/׳K6$EMi][=CZ3to;uqF<)0C 3OlׇML" գ&A. ݈pVs δot k8%b8'n\рNZ'jWo5zÊ]8UAb#:u k-r8ͥ\bbRCPX]|a5ysW2GWI&45<&{.OgL'sKRG}e/ʸ((rBzIg{Dthw.ĥ*JzCڴRF[ F[ #:ROiJ9Ll7J:^@#<>IrSp)Jkd%hH[/(:\FbW-#YKMap%W$0.R?~TR[y }MG4⏕tm8̕Ɉ?WX޺Cq:bjJxEWt BU1!耡ThEs9دOTy^Ȳ\BaR䡜4ݥj^%ٴLAREhDfvL =d\pu:+,;MЬR2!$3i.` +#^ЌxRb>!hI{wO+8=#> f2u/ؘh\`r!89vFPR #+01=Hܶ}QBvG2" 5.joNX̮pܖ~{FI`:_dXww(GxOD>޻B}"B޻v|1|vÃ46n)t6>^!l +mߺ1h?n[ ~7qݴ//Cxoظ“S|6yx:{yx]Fw7^8 \n..|]]]\p <4\p*dRlvNlUJ#AIwV@qbcJngkCnPd +p2 JG$Ke-hHVX3';V 0g}g}l.koܨ*ƒ&>dX\ E{֗%>/:C*>-?-(-㼃9H ṭŽfcֆ`jV.c%ݜR>2?O-VHz?χ`1bǃt~,淟Lt .73Z̘msC͋`ұx &5Wњ&y~<&@07 &@0;ZOMt< x<F@:]yx4Ιٵuo\Ә15s5(bݦwܭQa7OApc0k ]!¥U}@:$bnL5 ]<:t@:p]g@x[X3)#MBp@00܀ +A_EpxV3*X+p "<<t \XkCi.Bpx54pHb^b\9JM@PIw +5M>GijyMg],NϘ*VOvLuN12'XYgoڸ0 z T$@!$$:̀m6c0v:'nf?kgFppU<^<wU+=WK^^[F]]c]sebX\[nX<fXius1{e}f˼>twau⅓Jӹ 'qmaYp̫^VNӌg((aZ"Q0Lq Cvi~abaճ6F,gfUTsdƥ?kO5lLo6&N1Xtc]8.*G:`c a:7|]hCMXeZjag/nBۅtڭ\%6,u{3ѧ&fH+v5bB8E:PkaElzUd1LFcL`֛j7u2+EC_[u0J,\n֗d&Ba(ȍ - +PJrH:P9:m1,RS˩R#ˋU25GJRR∵B2Th0qI!@V "uBX{)"M3d wL,ϟ¼\\?JBJI2LIeyYYd"+HT!lLE)YB!BO8#(==I4FڞTJbf*8 tFv|o4~J|jWqdX,$I$ĸ$XDFLR,'D'"(Q 񱴨8D,!h11h_ã(Q +FFDpXhxX/, ^ǃBBN3L0 :x.o@y{ޞ9>B?^ ={{4Q4OB_>=%q2X'ʋq +{G_9 +<x (?u/?A|{!oϿ9nQ?ʿ x#?3;G`p|;O' ~<|xqw.zFuO7"M>Ż<} +ؙVĻkA*hg=n2jw9X"X;q}A!; ĵ9c ve5.OK\ccuq@gʅ1v~|[[#A+#8;abip ^/q)m۷3E3k mm F݁q fȹAA;$}6~;\¶tB[jKmK-F+igѸp7lb__AZ^]_ªǂ<Űn͹jݰ ..y,96Ͱ̛.t bc̾)y}4 'sNڸò6ᄙWǽ2ώ1&?ˣ\NiG`vF03aaqnU{1=03G&(6.^~fcf}T5qpҏ tªlԍvT98|l ӹz@.P}n*(=U 8k|t;.n*aۛI>6Y03FZbc0!"Gu\հ"VCS6[*lP&DA +l0S^ +MzTΛ:X_[핢ɭrJK%\Q.7`20Uʍ0- +PJrH:P9:m1,RS˩R#ˋU25GJRR∵B2Th0qI!@V "uBX{)"M3d wL,ϟ¼\\?JBJI2LIeyYYd"+HT!lLE)YB!BO8#(==I4FڞTJbf*8 tFv|o4~J|jWgH8WMa DQ@%( 9P`N` *#UCV5]ո#puw{|I@?)?)s!nw8H?]MdvHVcZI/bK3 3-fcBLe2Iz3 $KOҋz3s7')TDկW}1}x3x%jNUO(w{Rd#22*@7`B)χMJ#gA U梅~<¾b/g߄<6 w pdd<2tS%t_SpzyM5pxe \ b{b}#O:UBL{b.ދ*C#zxxu爐'dNPgnpw@Q8waJ3p?gMrE]jXg:t6A8gHhTa v p9wPŒիdNS=@+h(#[vx;jvH-oIҼifY5CkM` +;X ) P:?6@Ye:U|u9WKAYJڎJHV([hᘙ ĶږR8f"j +MB/ئ"Ul,p.g T yet4U]:Z{dE瑊 %s:Zˑ MUZDe+7Zq 3r|#erҲ3 e|rOՓJE9'.;y{@TzYQ/:a[V[]YN[] uTiiul7%u#J% ŨgY,'eGQvbRV9i;qh(SAFVbRf0;T(J?)"27gEF*HWS "1ni{7QUST/ݽ)(Lݵ0u|.@|Kw-uG%e:%YuͪkxlYx1VJQזTR˗eX҆RdKsy+$-XS#5u|\y9 +Dey+IYE3~FB2t\BBA.FˤĮXJ_2ĭL.Od,,ivnDbRLN"lԳȊZ(&+5BXP"Ir" H&̏L]$̔y% f.JD,@(17a„x9IqBiXR8ذ9rBKΛC wABbD39sdj\,9!"LDBfG +fN%@=8:2/nAQ3ffRO943\N(0"*9 L6MԩrBB:E4eT0brlS!AA$ab M 0,~R~RCp,~v 찑n v__ds1Z-ɗbfof6ZهDŽd4FgxIzo//)i:=yHVJ+jDQjD%4p$IK5dMdMքՎ2lӏ8 C&gvdЦ 8;}-aߞ[&3ӗg>ܜaP0ix<32}7p_狋A%y>y3}|,tOǞ>>rsӇ 'syPk92N `zHmۛn~O@C~O@0x>?^CWw~ X~%Nj|o/sq;,O;9򸃭"?w\Gs;,Azx֭igxJ{'s8؝v@-j'A6g׍rvq]inpru6"~Qd%Dcn49CSC#A@E$NΣ :l8ٳVT{U-/s>~o7i noAܮND؝ϝ9/9| ܞ!m"^8ݜl1!Ƹwp6 +:38+#< %!08 qg`ߏЙGNTMS&@D+"ai\(C& ح~ȀP2>73R̤^( ]Qj~Vj-Lw盵E~oa]]Y5?$pU{!H5km7h6MB3QݘjϸQMOrTkdSXpʕ1zZ\a( s8sBS, ܽnR,ܠceD|M)&VT/(DQHxwCdE2JXתG;qU#n*U|\Pb|EPYM zBPی=pyiQҕQWȧÕtZhYfTf"ո–FJA+jUh5TMu޳蕸|s-BJI" K}3r2mPrTRrJyZEQyU'TW25U,z+˅d*2UՄ e!SQ^S—!/tEVJ+])R^]L+֥\Ze1R#ߥV^@XVȓZ+$$7:åfRrx s +I*J.&$\%ɤ%g12Y7q.f\|ΕB/{r*-1+rҹˬ4z&dq\HM]NM" Kɱ.xr6y!gtuX-B7DONQYĸsq "ϞŅǝ;#舳113Xa1QHu::2A : S!(F;-tPZNCũ \`ЩS|q,@|?p~||~,c4jQ+|{@{^W{io{C>> | *> +8|wG00qÈ? ~" 觯C~5O +'^A'I꿏??p|NK_ox,8DHu"_Ɵl ^?~<?|"_ +":)L߿ ":o!!չn ":o!x \y׿R@Typ"#_R7_\7u]!սwH{poy 6|| G[ 1> "n1>mdw@۫u +r2p^_Dז,AuN<vxyv i{2Ĺ5 [S II٘vc;c8Y +pF0 Xnqgq c|/ \4GNt'hDP];i $M!x Fe܏2Dj݊ n`BgHt?`Fo@5!1&_ꎊ5VkڽUeof;߬_g.{ rs%AgV㔤^n;=jo9ifyͦħޘ4GucI÷>F6>QM;N5?AsbL*UEl악)%{E1& !^*4JZK$ +TbqnZI,dNqւ,LB!is:ؘsDc eq tˑƘjrcYi)3btّot;e$'1'K$ 6BrblJlfbƐ6bac36K4YܴVȸM1 F#O9.M`;IORfElZoVQcR袣QrmS,FaV+5CAMm[=ÍW׏AV׺j'\9Nܥ#,AŃsŹ;ag>NS= BNvww; +zLV9׵0@WfMvd#(H9P@oo nOvf +bv>\1;6⟭mS1-PlZ +hq 64q뚘 xXVG4^9|ѕuzj[nkppVZEպQVu;V{O5g`@YURs fO'-cG=㻗U3PճgJ.ZeN즶K1?Jű혪KPGyUѹR~d S3p6:nvkFtFL>ZSnpk YLhr[{t;ٔdW;ؽ"/%,ؾ6`%,Fo]h*V+wbGm^)ܴbS7l- -umuZD$zko̭&hTڥL55KYHY݌]Yل^Xr-o`) +ݺ+WK=2k٢-@e62lA!JIN(#9R n7%cqU)^_XTYKF]CY7鵥򢴚2R2R1dWWT`Ř<\&{Y>)sM +'#N3aL g>Ϭ ?<> i)_VQȄQ:~Կ/e\s 9PCR=e!0AQP%]?7 ׷`F5˫#yW@ f23 O/ <@"G@H g9@cL!)'OpwOpi7nnvCV7~u G|5mq?W^E)ґB tH$K MN s)޽7$}rsIy^볾g^6QV4Av4K3D!קbo38"Phc WF]p[vZD +-CKb?"P2z)`Xsk L'kT;6h)kEP 6#^#M$ +nD }3Ј1QQ׀XI=u4-tkХ:5$ +P#UZ;Bշn-W*vu;s֌bgUe1+wYۋN&Ul*>bZWvuSƤ|c(2mEN>iVʵR Q+ny4Z)RX~+--N>gb5j3}dӽ6S=|F6ѭIǻ4EX'N-sCE2|V2н]̽V20`[ xFQ BcsMT+k +{H=Nt*. ԓ*.C]l(Ӊo'Dmu|ʄZ@ 5@^'h%TjU<}]]5CP帺J.G[A֔d1,[]ʪ-boVfJ +)jy .J)Y ȊɨEevI B\Zi1ΤKPb M^ORebN)|\"ⓗ$2J,@b!+P  9Y\DYtLfe2  \br3c@L ,ΊNHxgu.+50g3SDg$'V"#:=x&-"ɨԤ V) 0)"9>KxR\\TR|<.21.CEDB,.c&,Y.ю9cqf_#\5 +]=Ag" + GBI~!!\|ÂBBp,Bp +`y|Co=^C|>:nCt$O>xwDw#yx<:E{7S#|,)#zhrӎ~>ϮR׽+C\FuenpeeםE,b6Q[ nykg0K3ؚ5ۜvc1קMR6M euuL[6!e2l,S؏`DL}^|> e5ۅf:Mwj7;iB͈H0H 4b p7w|gkBGzhZ + K ujHСF@5wo.7V\]3TM朞~js9}安UZTirZ,s:!ueW8nL7f+6J/OIkR5V'lVZ)WFvca(PN0h4[)li \7u9#K1kg8ɦ{mHz$'=nB:ޥi,J:qj(#j.ድQ:1w̽V20`[ xFQ BcsMT+k +{H=N S_ɡc;t,r1zR9NVKتeYZ akRj^BC +Kf(sWW h+H +>ٚr9ES.ceՖZH7+F%@FUY@b{2*4yхr]eRVZ 3**,)%@HDTS4!%%I E"!X9 e'BNv|~v8QV&YcWߚJ0τHo$R ҋHQbY{Ht!յ썎e&${sH@~{9s9q(x8SJB,cr|)%cLŘmI+cb]F;HW##"] +#b avGuECvTI@٬XP0NjB)) hX]ј wv$U1(tzACAUj:%SSIj&J%ר(J@i'U+Q +ʮ +P%JBf%cdDSZIE2)F(I$|"J  +gWR}(OtGq<*kǝCK(j8@*g,eޒ>;.aX"2||7}*$6m#ƔL_FssaقzF*½ق]Ef<`=2tx <50  /{,Y{ <.u*'+m.C ._^ +:=֮wpp,3<YhX]oVZ6zN n3!`: v$u \:.ewvi=pv?t8swz?4-S{)@VM ӸX5`VmǶ!h-`ud053W㻭`fo%Hg`{=*;+p;ʩ 2P[jݸuCq5ݭUk*:UiҮ&fk;[w4ښFVEMU+.W|Q᥺K i +/dRYVWi3;?VYHzGvkwχg%!LCQ-k>`{jC]ܦ}VylkWʩC}r7&Ωr&9'va eہ*>J#˘d4(1 wv}6!6eܺq` ͪW.cfԪ{6Z{#]5 ]fLb7!-^eS]Q:1Q˷m*Bm]*uKjRf\jm9f٦BTRV5eJ*!'WubLR<6EllrHeJ Ul\&$7 6U|q^&.'Ù5لUE9NŬΦ\.Đ` +&Q+ӣ31Qy)ҨrEf/'", L%+,#-**iF +*1tE2&$=")Ѳ<19-!CYRPeqX&SJƘ1DLI1Vh(v QGF01EkF2Ą"#Bɩ +ꠋ !&쨴 pYntaf36Ԅ2RvS@ш117 PI`c2Q*N":3 +V (Nu JL$JQQ2NV])Q)(J.'6"J,Ȉ㧴dRP*a#IbwE"@$Ά% +P;/@鎏yT<*׎;͇!XQpT -e)KYʼ%1LfrE?I;oT>U?Il7fTocJ ˈ~!7ps29(ZBVSŧAv~? pFnϊ+%\}x yqsßO~?/ͳo}`Qwcw½ys[ ;#-#Cׁ _G 2nyw9y <3:W=ie%"'Py|v; sgyq v͸S-M!`:q ^i?֑|Fޫ)؀ +I0.z/6CsIĉ^6ήٍ/Gܑ%fas<}ѽ0Dm[c; +[qymVA 2AM@B?OdN\7766Nz RƌiRFZeu[=zz ڳ2,b fI0mB4PP`Z +lQa++-u͵kN`hޜn1^5o؞׫v~wSm/n.9&y3 ӂ6tʍYJ;UUOiQj3aXV'TN1(VGVƛ)gGދ|yR4DR,/ b36r{@O6os(gI>;^lIW1CNtkUxQ:rQH醲1^ח"N+j'S2&d/5H%FJq_k_QoNG)6P +NtZ+e!JRAG3ĔwJCoՔ*RNK)PI׋ѩ8lmj)Y>9KZ)cɲd6Vc UVRK4Q`J*JŤHYIej)OY1)eeIdEqa,/Ȋ +x+ +pHYr89:VMJ,ɣ+Ʋ2)G sx2 +23gp;RB^F)>7'3-.'㤐Ը4JlIJE +'.+LJ&ɝ͑N?q\HL$GĎqbRJ2:9)qOMԉGQR_!II c"H9.hl,%GCVމQ!1QQ$|(2"(:BT`Tx8) 2/?"4T_xHH`xh() ,$D@h0)7C9>Ao %(^O?ߏϗ,O_"yxyz{z<<=Νj G$'vp>;n盙u4??p{?_>vς{F> +x/|LQ#;7G< 8P#;|L= ; ؗUx|^_L0ݿ"A Eݽ m .p2ݾ,aL ;~ _%$ށطpdfs[|kwf HvP>]kg%|uQb/]^vh۳5Gۜ}4~.MA;'\c>*lm9aYP!eiPQgiZ4B?OdLgzu.{3llSكxmF[ ePPg`3gR,{΢_+̤P5AM($WEukKMHPBQF 0vE]67jv:ys^_mԛKzּa{^ALdZTѿ9&y3 ӂ6tʍYJ>}9P>Erτbm\[gS:ߓ͛0~ƪbώt"mB4"|=DQ[wc(G;n(CI5Xq})R>ᴲzR);%mMRSTo*1t"nK_NA?R$t4)IM|5wJCo(IyF5%b34Trrt*"[[缦ZJOΒVX,*8XFCx+49%M%+'e)keR1i5RDVrRY!*WS BB PJB BJ{Tjus4 PWƱ02>gO/zp9{n^{rOJaBD2yl"*a29}JrlXbKVBQ6BoQϧ˄yyLt=fcȎ;=۝ +e1xR6dkf*’kz2qќĺIĤ%%1&&B hW"ə0&ővLQv;CfJax,jX`"m11l"fs(hZ5:mѤ30r1GEi Km""MxNakaƬ i40N´~ +FB(*%B . B% S(`\RLȤR&TDvbP,b1 DBpMH0f WAZZ+Vb1A͸@㣘"b/!< #o`vϙ /M]_p8;Oy(7p#w17pw + ߓqzqX_{~t{y{-wNYIM}͝wVғɝ|M䭨G%wp&;87soc:e Uᱺ{cGKtsOsGcq"i_Gv/pq8# !yWHC˃Kxw F>xs }sPgq;ݻЩN;؉Ac]q t;5od:S3N` n<~7@s۷$}j¾hBlfw7mk$k4:oh~ډkMW;j_=^;F!uW̻:P{em vZͥX[-a5m@!DaJ@kQTCB ,PyUřC=́}@Vʓ *NCfQ~KfR Fkѽ-#{&H nJHϼf.#ˇ{X u7`(.DYBvk؎(ۆ(ٿmm񾭬z5%[({73=76 +z6!5 +tg wc*wGG]vDގ6NkC ni Z ܂L){}c,k 2;+dtUdwAd70U̶zJFkV}6)C%\GawK2Qߘ/̤\o'dzg@<`z;z3!y5!GPc|3_cT >wy w S!0OWSwӛtDPD.E@BUBHt) +!ޫ3^;uG7s9'8kֳk#6l[ @,~ :[!0v C~vBU]:WN^^bF؋`'/V[ ֙<u7ςߣB_b{˟ +&*w@Xg~s{u&ݜ d\!:+\.O@(uadf ^熀pvPڀuV }`!X2pz. q f@B`aFhӝT4!n~cDjmH njl1h! ߴ1FDkAz:NN[mys\\1Dh i hUˮEŅXvFISZ$MI¤(sSrG +._*],^*ZU+WU%F:-J4a.Y4[g/-0T4N]ЏSW4o f*\x@+UTYlN.QU8tٔWdd'X -EwWrƺ0b6vٰJJ%"4EQ2mVBL&kV$I)Tg)oWj r;Q+ʣb$fGrki,IBv[uǑeB)g.i&e5/e:UrWF$IM8Ԩ"5hDeԫm^V28k\j+vB!*xwQ+)U2>ɚTAuJiɕ%|k +(X^'& xTN$ /+%I qyq %⋥9$I\A9XY6a?YgfbلXIN:-/+F#$fEJM';&ޜTJd%㢲R {2S(I%vg$YLOLϷE&"s$ƅ$?<%|aK OO Ke`w|ڕm}|vk=EEeh((VH!Q$jg)r۾HZ^=x3E8sx0B]lعOP ؾ.+M>;CBvpl߾  u+g[Wwp` -[||x3q~K#חoC%ww7{-[(^rĹzzxl;͍pvuq ř˙ىΑ` '˃Pz>qsx?\o"]>> v>_О>7v~_Կ^xm+O'/;=ذ=]~l"ԿǼ{zÅ׻\ȃ-SQsq~k[Et_54_暝"+^]]%t +F;ٴGڕbdü*Cg :%C:FoeI[+,IZXf.OO"HuzxIvܮam=!Әurk<*Fv+3{U@Q@paPEYQpĨF5v{ҽM4Mt433g^}_.,&>|}~}x< ;˜ڱ9E̠\3B0QFXs:hX9F{3ezl# }|MmJ RcCAVMAX iPIKGFøDB>Zg:Pkae` 1o|@JpGB0S_'+c߃S1x:\Mݾ^ ܈Fvژ:}zNpat>Msnez툆vzdTӸ:ԜYւu4'Q&&*ȴVj5bDblTZ EKBLOR67Rf=M-ƤӦSm6024ԧSD#U5i* 4 yzKVנ-AM#TXWT*JZF S`]Y^P 55锩*2!UT*WIy2W* SWVi%$Ų2WKLeIqT +J$ 4T +X ))%Ť"!o1EX("BATB_|~AW`<}eɣ%O^$ +g=,\7.s_<n9*⑘KyXNyD'xߏJި=,^ N'z~y \z˷,%}<{YTߟaͧ4o5D?ngxXS-= +wz{|;ܻ ĝ"__k_]*@]!P X.Bzg9M9Kg@­ć⃓O{ ex8wG<ލ̮/pm B]YK ~/p~Hrn/G\SE^An;Af3۱,G{*Wgi@X`q+XAPNV 80Ooߖ͏-ۻݞbn;l fFè!vo(6u0 c`||#7N\?8:xu!q*J +_;B ];#^?N}WtpB%Sە#{.Ezsi x(B^\\8> ^H]D/F`s.0:s#w*o\ۗRcЋ8aH.W]ӡ t~7B).L[|NmӶZncZﱒ,sZ`Q紐S0kZ$jDe36j2TF٠(ZJhiBIF¬7%Ԙtt&UH=RGjUhu4 2mmLA[2uE"GթT +V@kj)SUW3)UVUeBU$5e"%U2'JIeee0QE)',J$2&*HiBVu@RRKIEe%"JQ1BbP$D6A(SE0^! ?x4˃ƅq98.G[KʉxIKi=Yz^Y[YB"tHMJK) +Rkt @\ª{~|73!93$!s]>=sfӂ7\[Gy[їy'3kWʢ=˂Gڧy_DcL7jݖZ~i&ZyiMX~asK||ni9Mei֜aiV؇9c\3-SC@mc#3'~{__"llLo7$ԏSzD{`PoÚ/Dx} 6ի,7Жz=u+V)Q9͆E9 +5{ s3?} mS7T3Kƻe6Zh>A#׌2GZ*҇OjIӕKl!biͫ +d&S_SRdMRj#O+I5IoCS!gwa.1R:k]T wR//_b]^R[-ĕKnY\\NHl"%4%)x%ԗuٸ±sKʬ)W}B0gi.V܅3ت,8dYq夘S'9*gF2pGKstmEK)igQ,Eyllgr9ʖ^A|Hp pKHgx!>aA= a^*Ѓ45w4t@?_%?_ܞC}Cہ}|HTMVi^8^^<޽xsnmإk;i;|;vsck'Uݕgә͙u>6.NN.;v윝x8p9vG'=QfmOSv G-F5Z[VV8.--,p" ss63sNf*2jg313e3e365Q3YeL1RrűLj;mʷ6lژ@W,:9O/Nf׮E{ڗ O_s:CAn,(mX~aZXKs#YsgfYaFYsA;LğOM mOg 3A=_!_~mtLo7$'vJOc̛`m}!׷`!xu@[/<܄~ q<ixTW03zϵA07}!Sd^/;]N(7;F;k0Ѧx+F1LnbCCAKVB- SS}_*pUT"R:+q.+{J[92ݴ"Bs h1AAYU_Y\:9%$"TNl*e +&a]փ,9rf䨜fC"廅PT=Q9љ>U6)k*Q%2Jh-s]NIQ猑kF[#-TJdjm9 ĥ RWU~T2Yj'!SJm`RM[rH]uKbWu+yBgoN:0pMYADLbD㒘hܢٗfO;ݓӦ4iҤLg̤K:0_΁{xYcyws'!;~p=v %,ɽ6Y (ޣ1i$Ľs-y'\G&P]ȹ6<CH1"{qscl8gGi1ݔ S֩]Am$-H։H6L EҲ wfy|a %XiGXve5͠;`Q.9 q$cͤqbx@i4 KOIs<mwyuz0=m3J>q@ROEY5^DC4.G3JӒvY-j [TmflӤp l-F )-FH1٠GZ:TZIGcJLQW/1i!bcD!HIbvKѫUTTJ*RSR^()r"Ej|y zPBbuo;(Y=_B|e-l[f̣[[tG[#}R%_5wNؚ/o5,+I`2%lK>||G>| ѝnðaÑ?;w:wO$aPGy'u̮];`++t8ҥe "㤍tal, >;ٹdg>@$!:Щ fp4tb +ÎMoZJ6tN}SYOoi0#-H݀]ډC憱2A Meg*6¡{r f?q>`}7N o +u^?=qTxpH0:)xxyػtu-Q"„p<ÔKkh:.EvzGX[jl/} +CkI痐|I [HO8s$D?8;uc<{rn0 R( )ygIL07@tJ){Z,%s/N"L>sam~/y8ƑscD8HmG)=8gGi1cM31kL29dm.Pl_$-pgLJPyt=ewZ]}P #=)Mi(H2(L!ߑݝN# =t>'m }7-]sSv8ܭ N !DZ[P^Uu@;Dr4ܭ4- jբv`NEjV9!6K:M +`Vb[͐:ИAbZȚ zECu YIt4Ĥo@u"66@1$6h(j`ZIND*Q*2NAn QJ"'RV7ZF#:@RFEwRrSJ.)d2N*EP*vKkb&2iu5J*q%2ND׈«UB!MTN)')*JJJa_\&J|+Jh7_Rb NIR <Są +*p@L4X|3Ţc &%`wcrytygL8wO$gP%IP0 +  I׀b몈WwuԽμC;o;HyWS=R k*n´r-r-גJR7i{f]{S퍋znA}]u}v{{ƅmڙuʉ'엊po0{ˤ #S^5?iGe–iBro̍ۨY>(Y7>^Rswps#S||nń>>SPrwT%GȠ frI~ 򸵂 O %cCwOE C`w\T?KvX~佽 ~2`[[x= +fo&ַȫ["iw@`LQpRMy/- +f> `~Ư&w0tXٰ `;xyc`I=WːQ`"{v"!9Fw:"$v)F:y4q!Y]k2[ HlFݨ iR됪 6ʺTSxݵbS tqBG ^%s@rNmLłrS-e|E9u @R}=wr?f[^H.r" *uPQHA±|Ry =zGQ$"p W JJW-n/:_9خ<]X>ԡCrZymEHYZ?`(BuȠu̾\aq$xdpJݨK!]jԥ4et.ĥ_Qa|C >Q ~z!oOD [35ArVJ \ [xoX Z*$PWFAkz 2ּUzAz:?? 8wZ5rKcp$$TPA!@6t0W6ئ]wr鹳/KhYvő{Ny} 8PvTO+N 푠3;~9,^ޚ۱7mݙ7(%uwb[#r$%3Yt, gڞhnӭq e؞q뷦}xs4ܘoN ƍ Iژ (fXuѯ8`AKX!7aZ_- i4smyԳL+fK=Ջ`ɞXD7B5mo-05D5Eid S^@(qlaVnS0Y }^,i*s#z]OiB\qQ])af0mI{Y|f.Mό-lFjx"OVIB"p6t&o3´uf.jnBMHR !*Qc4xM:VVRcVh&uHUF* +D9 +LZS"* +DZ)h jB-CF\%A5qiJLȥD!"DLH _ @\)y8b^-.x5Z~MW/* ՈC*J>V,<˹25e>e sՔ٪R3ebrU)-p!EfhgyEEܒBX>c/ȹ(:˩sp Ξ GVv*+ AKʀ3tXBfZ))Pbz*%) DBJ2$RRa cҢccbݟb"hQ~߈0>S O_4[.?2| Ӈ }\{ȓF0.<"8&8!<|N؃@lћ:Mh_N䫃Orp X}NpXħwQouw|ro6|E#x@D:Z#'4kGX +U,` @PA<]83(w`;L=M`mOek&A9 1j*@ 3 k2ZD- 0AB/4I.p,SɎM %]$Xzֈ0 ]p;zVT@#Aggv`k=XsZ׽5coۺ31oPlK +ŲJ!M;Gv,; tiK?fY̷&=O1ofݦ[3nʰ=oM9欋pcK94dDT$yh<@6Bwm3:WF0 ڥa,C0/ڴX6<`~vI3݇f0d8эP,h.o!.JH'fjB12xr%d/ibI{=VYBxHݖpI(.gA0w!$yf.Mό-lFjx"OVIB"p6t&o3´uf.nBA-Fl֦Wkұh("G6C2( ViP ȩ7TdJQU *J E#ghPKjJ7E* QSO+U`B.% +V,!JdBR]₴.H)jqHī2k +j|AmU/Fj"k~oH%! Лt)R7QA  +4 "(4]{""躺}qwLLB";};sMb)8ZpRY rF;FPbL4(H(HT +Z% .(:?6,~1 }tX>6GuB0!~(}DH7܀ +f`LhP@! `3~M3Iԁz?M^Rrƨ|u,:6VKxzk(NAMQj՜<4^^(w'E6{h +OadjRRbܕ\[sM[f'Í@ 3f^8fBB63m9|r¾}.r9һ>.tOݾߟ;~}å/d Apopstd\n5uu^]]+e&//cIOGdQxXytтtX軌 {x~1 x00lw~CA^7̍^ik{,SWO]9aqǥ1 8v逘Nn9]8 VH4xh8loF;;įt `1̉pݍ,{=s7wR !GZٯyɑ-|Û QS :T;#۷>d{k5V`lW*ZoTl멭=P>S_3P=P:[OY;M>A9Ik[ w1*:Y؍j`P,;1e }V>`v\[]dxx׎)={l#[IQq_+3JZ%gRrRkrQsM]3TIYɦZ.'ՠR}kMq +sŽ}D;pT?SضuQײ +y'&q(i_G5>:Tm[mYK۷Sn#.qs%*k&+4eSY{#nW.;*FZZF&Kr.6`2jTY2t_JQ+7籶4$~MqZʺ$Ŕԍ5fE5eFEfIJQ| +PIUedDRJ~ +1Qk8%Tsl/3*YQoS\i^6.7 [fq*آ\LLa&6?7VͲI^ZN,27 '"'=J$ې*l%4#)$$=1ԡBQ!+X +HS X!9kю'0!:$ >*(%A 42 _LdE8C QP3(L_dh(JB`0 7Y',8;$0Dg6ELuOף\||x1*_7MՒxxk4Z-JhlPSZ5']IQM^*2vwT!$rwwGHe2D&L$K}bM$4.pCh\Ql@Yr/Q^mfZ'PJ3ϿHިZ魂fi{kʓY^ܤF/4Q8K9fIN;[2N<ŜfXRNV?7|&\ ?}U?>q|~}_/RA1.o8`n9MgAYS\ WWc@8b^^.5q9/Ɯ3>홓8ɰ  E@#/]G@y@p&zQLvI[ r.tbƺF u\lFӅc[oDG欱oF;&= gg>80;b ."QT$ ${mMKvzN6j%V3bwGF`'{9y}  \ AhiZg#,X=ҫnkBrw j&ێni0DX#V:A @7sw1u9uHKśWlՆʽ5awjޝm۶t{VJ"͸L]Q{ҡy*-ݍEu[ ,Jõy@uo ݢۄ[vfsl]id^ci6]mLh/MѭOѮM2k.1p; @}qvfyeV/ Q-a)jGTW `)gsա3}WǦRL`;|ۄĒvZ!UsAɆP+j@ 'Y?TlD5)aXeVq)TUqg#MRRn6pŭlCE&=zt:TaSպQ#Vi5ZTGC)h4 U 5Ȭ8zJ%3xD Mz@( +A֣jRyFeJP_A +'yRWxC2_+rԔe%| ੤_!+)YJ]x OQɥly1U!)ddʊPȐJĨ" "@^*JDnR סRy|a^r 'I\$s'>%YCKs.!}.D%"ĝfc ?u:6!:"6Sx̩S(JXSHZXhZDhd%<8<vTAaА + F}|~|)>s(i7f̯6"~g_< /?>>q'9DC%i.XoꗇQG~67Añ=w/^<|_ӻqzvwO9=t7X0~n }~~/|Yo m?}/g_>=agHϷcݟnr&G'}H$=zD=x8&6qj;{ܾ~Ew_W;Eb}M_`~<_;϶} }rǗI 6HN^"_=Ceno-"io -;ܘ%9]!}k$$tu.O mri"9  \ AhiZg#,X=ҫnkBrwBvh&Z[cMQ5b%# 4M^ٻ:ĭt4Dɗho7، {k6ռ;Tm֭EqgVBC; .঻ ,Jõy@uo ݢۄ[vfsl]id^ci6]mLh/MѭOѮM") Xv,c+4#zi̦ZR. ՎDJ=?XR+ C)fM9݋v(d U19։%(B>AiR ҡVn-jOdPyU䦴׆Uc5ZҞFZťRyTŝ4IGK KqEV:g5}PM^T +lF-Z)hQj H7T1Ȏv."^fu(%4BX(5Z5rH(AS~J)Ji^QN^P|ȡRS^S2|,g)u)J$%YCK ;&,+:4 %E xE{F2 d E60<#>`3k~67_ޙ<\({0cYg-{kB`{hf6X0C3㘁nn嘗-zo97 gׁ͞^*GmweNo0rzppM_DZܽ0y4C:>Yhp XqM +a/ :9ã&vNĝaoClgv  VpVڦ@u5qʸMvAvtu/9⮖3[6vo.TMYL+ɭ?-~*2Ԛ=](.R:N.QGv`2ovpcIf .fk)*3o&JW] +z_%noZ.{Jl$%egy10) {FT#ikY]!jՖ V+L\Z@P6?z}jU:|Jbe)-b-#9I|yQA#nS!*7~c59"L<"nC!%;v}E1pҜ5صybJr3qDgdDe[YLCEd`"$YH ,&@qM͠;91l.LiΏQZFG%ְQ}nT-vbi`T>]b~,GyֶjnpꩊQx|rOO5 %=j|[PxWu UQr*CuUG;tTFqt [0rx]lM0C V +m-~Z5 (QHrUӀ'Ct:ju\yAm&]nfJI[ڽj602lj IfC&u(5+Bۙ +n.wLVS +I5*2Ltc-͠cKY%8)j\BS*5+ԘDr&K:X(1 BTRi QV^IQOeNpxe>$]y9BJrK +0q|L QǓÉegrqEyEYL! T%挨TTd^&*7""92's";e$!IB*"#)ȓtJHhjɰLh)LxZXIFhr<+٣xR\#ccMDbDюFaEp\tHNH!Q:q#1paCaP^|"4q#Ïv^avp0W 9p4$!IBb|  }0 `` 7( 'p#Ϗ/KewǛۋWn^(WO?re9vrrqs:;Ii8Q-$[ڇa}X{[RJ G~n}c߿p}A7ϼ< +?ۧxA3." <}7.8/'7{k7HW<,;]K_^w˫[^qa-⎓Eboz zCBmw/89"%̠#ԛ[? -PTۿ&AƏ7K^xC x~%5(/kBQ + +ٳdQw + `_] 'ma{1^Pb K>" ˣ?O$T H}~Ao6m ɭu/_UPUN _D7/+e܍0Α}1WqW<$, Y˥qq #$$ڜQp cup.@À.+CP X 6Dy+6`y+gcp{4A邘33ՅMtX.@X :4 + pco& j7аw-uZ2[QV3}5@P =2 +4M^ڱJbKri(Cf^1k֬ϘG̕ƜV6ЭM1 z_:cm]k J{aD9?nDiy4+cʘ٦^ehXF9QS.ۍ!j6Q-x ] T8ʳ]Ts|F,uQXT(flJ9ݧ'QLZ5J>-x(9Jƺ䣝G:d8:CɆ-RW<.H6&Z1LQKEYPA_P^!$Q= zrCt:ju\yAm&]nfJI[hYYFf͓XѢ20YU̺JQ[FLJ7;PJ)JJTLfV XBET@PPDc7w5SgLIDM^7)3-\G*U{K0P *'T=lurR ɯ.[Zqs.Zv,.\.bJN[ +ЊISp.!(ZL%i/$Y +ARNI! ΰ(ͳ% Ŷ0+# Vb`fd k6gLk^b2,\99ЛqF.Ϙ\.`iPҌ(CDΦ빤ft NXJiRuii N!)4E@"RT + +"WR$eJ+e2.J$R3ĸNIlb!K! &"F KWVjVjZ&|IhF#f/qʫ3m6u_=PQ#Ix4^/f5M 37fsi B޹߃?FIX4xϝy2oߞ-vO~ibH(޺BvyYn^EtΜA}.g߼YW}yn/n}~q +I''`d9!\?A>8&X}1ydkѮ];$\(Wh.%AڅQh_8 )g30Ksjlb7ɝЎlG;vt64f X0n㛹6aF 0ox=o XG HHC1eYo~ 3=7og/<3;Ўm]IX-vbt`lSm'Z&O]vxxḣ)W Z.e9]:i.zE/wm|~ ;?=7c45Y0D&z@'zAM'DD~tw7#8vC;! ; C;@iG*U{K0P *g.lurRWyU7ځn'Rb8R.&\,% d.+<  "r]Ev.9N{!R-rJ +) ٍ(?kʶS<,Bd(X8Y63Ě͙&Ě Kn.tsNN2lFv3&:m1@,4cf&ƐQgg2z.:&Cu:^EIե:ijRQ;LKQ)*\*KUɒ* +˗B*@L*eHq; H$R"(.$$A.,_aFZZzkBbF4?8e6 9xS^͘i|}CT4 wutetyL`@0Z48OZGZ jКCp`|zuf{0lfLwLw Bk&ۀ0Ѻ>-$M3X#im1 sot wZ$_C'NDVUY~"q&Bk 3.,s}@G@[ +A[)@ТBs&%(pHph,!5 +P6j*,;i\Qd-5yR). YʞVpUUx̺8$0L H +5`@˜'U >|$sГMu)2M&dwQI5 H58X{ .cME:JHn!H9+JlfFB o(qAWOH5S+tR3\JW !ҡ^/v6q\`R}NrkْZ*NH,rrq*RZ%5հV+usX[s01&M8;!""8.p S41a  <&~?2X@Tqc@Ǵ#`xfxS9L7!aC}ǵ;A`~9p +w(({00"@'8/x'oW}4{ޞU~<~km^__~,^O/O!go]^^8Owwg77]w]]yNn:]\ .\Fwrvtq&88beˉd.;'GGz9lllqzֶ6}5YX Y YZ[YYpÊ !|>m;>VzVFu)N=pDA6PU{/܂c 5:X F[[tZ|0sgs`eiodaS'UmDzo}\1hpaj *:Zs#C}v (U!ʛ\81e^'c]\e& ގ(q$0٬8zՂ` ZlfZ[ts5Lk*)*VcpWl5U,RQSh./#3iª2ZAeiш()ur! `Kz ]LQ2v]^V0/E/*B-)X(5#/Rkj5L^&GFV!*\&IR#V)2R *l$JX(d2H%̑D2|9M"J/QD 0P HGχLl}8,,,N gA&%r1)Ye-kyg$qȸs[y$G +甼_yx/iofrIrc>9\ΪzH&kgCI8l^<2%w_gt=gxv_wFF{ܴt7 O?pHǿ\U&w%`oW hJM AW%ӗ`E=]/ē;D?~ows4}Vf?+DZ~~Vs^4'=﯁D;Wﮀ!2XQ\Z~/|uD񾸐-,nX;'QB}ty0 nX׏%viԵi\ r. ڥ."pa?`u~@0pv/Hə=8 NDv'v26ut+̎ ;MFj4E@aҡ=&zLX c&F ľ3=†`֟>lX[zXߓ 6~fP3ck3#׎^n>3BztqZՓ+'`B3@/C3?B.M;Ym˽u귰soHUݦAJkc$)HVa5 bc!xv݈ў6v]N,pGsQ;ԅ8;iHGL BV큚p 7Ԍ`5[OonMdh̝M0kGŋ{1}fOuȟTUi@Tq8S $Ń{h͍ q&e7|WESW(orƔy0cuqflt"J$lz;]Pg]V V3L_kauk5n90 +jhZ[e :]\T"KE9NTP+R +h1FjjLF# +i$2.1t1FLuy%Z-P\'WWX + `('HQ0yA~>M^Zr$yJ%XPTJ%LP(r6bENL("y0GJRC4P*A$b6bXD*[$xB >gg3qy0^L˃ p281 rpLFbdPֲ% M!"<ʯs*\'Bڛ({C?^?VpS'GYU/RgCI8l^ΊiEX/Y=_ /3U%j"k^:JG  $ KHSWŶun? LwfHx9;3 =S=2ǖwۇL}3 {___?<~yean 밭9US!/. loI_Myvqk=YH|G<MD=X-ulpwԝ=C6{Ÿ9MwcJ$ҹ6L#XZz2Ji1ݹv73.n֬t-k6FHÍMT@A<}tUz+MUe$_9혶RbqmEZ"RSFRj#6j@UPcenű%:}qX-[/RjdBV|Aad ipyB:\/K_#(fzbgz b[-ꢒMvӘ Ltƻ:& Rm +'m+H[C)M||wBro=AWc:rZ(/%xK&$vT*\8nNIjIl)7ZBsY6.Ho(1F'[WėS[H]vjqU cEU#+TERpIy"8]IQjM/ʑ˒fRj2d4\:F ++ UepRT +|ySwL( Ē#&EM"I Nv;  c2 $ &p0TH0_dpG >At7 O8UXbg;xt#>y0a:X;vW`@уin<Qr|xAqۿ>8x\xy'y޽b<<8zusqJ"f''.GG*;=:=LGumg7an1,{cv2.[[ 5Κcimekʒϒ҂cƜeƄc&ghu:6 +3`_/lw돯ܭ?{ՊkGr188/a޿سyb>p{^gv$72_o =S<2ǖzm-6 ;f&C . |;w3@ml &l6x}& x U02+@xqƐ- 2K ]-f!'K`G.  ܟ 2ٽ9:Y2wn ݷgDzwqsƔI>wmL#XZz2J;f:Mu j&8h> +-B0 &hiQ`a5֛1=a +6X]嫺H\A's1m<%<ڊ@k!5 +7AШ +H <#"QUu@Y9Ty(NJ2űbł0oH9׫-j YYku2燍17"(fbG-F~ !(5.'T1ܙ. w uRIL6N6VKiSR R6hSı[Oᘎ #Jɕt䲉c;\Rg5!Vd%W1wspLRkNbK˲qMFR|CIꋳpuE|1T5j]0VTe+=BeP4OTyPG*Q)"ו9J9vل,YXa&U&CNÅhS_m\Yg$$!(*"@$ͽ[ n1%$vlǽ`o6⎍ghތasϹso􋺛)&pqw:EzW[ \`ٛj@&?'Gc}5ec꼅!`u[ LﯮTED2{I|_u"+/*aҼ2HnM)J1-at-uU%JZdMc)s9Q̥N*YJvಛ/+ r)fCg&Z22fSJdfF3gd$c5ҦHLC3M^RrI2pQuej!Iբ$4N)5. +Z%QjT*\=IU%A$jBT@D.D9I+\&dRL H$bHD"pʄ P$`Ji) $bozLlaijjΊc>)SpbT)85M<։Ɵ((zd\Md*ʇ.Hǒ*Or^}DȻr2Noz}iL^sK $1ys]qHH#C!ݐЉaH./ c c;{CGwzh#{ +11MHmD + vA oaؿ߷  ލH{6tBfoxDd߮uϦ۹ɷcM;!dݾRmlpevv&߶Doﶂ|-+(5ǬzӲE ƥ 0%3R5TbmR^dXͭ|UOSVvKWt*g([,- +.%!Z8Of An-AO_3)XһTӂ y)&pqw:EzW[ \`ٛj@&?'Gc}5ec꼅!`u[ LﯮTEDT꽤rZRWPa|Zoi^MUI^m$S]0f:A֪HvTepCʋ(R,%N;\`pMg!(0y dO2P| xL-/ G^.J=7ː(d r(i4+ 6E@i !bf-j)%hX23љ32PMhiS $M!Qz&]RS$RR:25Yǐ̤HjQuJՂ V撨IJI5*I$KRR* 5E!S* RE"DI$X.D2t&R$LB$ DB8OeB_(`0%4h|b17p&0P P 5gE1w`H,[81}SӉ>>I?QP&FĹT5b0'dWz?4%~JB qG9mۇ?J=C>qzh;ܗrz}_*x=Q!v$z}OU}w9x/ 9/~`^͏By筄9m7yQ`< l^ulN)ϯagWgk8NyzU_/{rS~8ٝ64 "` md!MPL$a$@ؘ9g{w{MW͌{4+OS~|\DVSw@[9+); M H"7u L9=5Hڿ +; +pzylb^,/3fڃK`)Oyr/=YPG)%%HpP~zp͊;Na3iqkSV'qkS$ܚq[Q7(uep. gypwA{t Fn1s)tt3zirfn7~ˌuVpR Ƥ`f +`lgh@T_=`z ،?pA/]>)P 誅DӮu0;XAN`ZU8r3Qj<.аʥetiNhV/V4%U0aS0̫@;mټ SziHA)1L#F1ۯ)1`tdJR䓽NO0z;cdfvcd.%J>ڥBt +)id0Eԡ*jW)la&0VLAu(&H[05Wꛪa3T~o#&uP4VJ{%EwsΝqXn㨜S6\N/@e +g6kEe4iD3Tf#]Fz3ecgUz%Q35 +̩jI"dU /=[㘣'tTmM* XVDPZ+9GJD٘,,ΡL+YU\QV3q9 !i1NA@U4#=NI?v0@^iTϬ大b0RYI)ɨBI1ǒD'&exT#b"SGAE98ĊJ>̉L:ċCjObfN8x@̮vc:>^,;#bcńܻW,C +|}J@T\~xOAy&a?.6i=`GN˻@P~7~ sѿ_Q~+_jp%pt|y?& /t Dž?{LgA]gnD? +7Hr;Bonoۧ5ztXkW->8-zgIw{ɛ!y}s-*R8e!yDg<]rΓE !y4O#;h\t 6f-ܛcݞ&[`ufIHukfe pnmLc%>5f(bZ]"$&h<8K6M&Vh8`o-p 3\,jy|٬V,ښڪFdֲ*6 qR6oBiJ/ 6&-J17A jQ nSrQiJf *'Gi})Z|WULDn\P1{c*܅G:4s"SFfP +Ոec+Hja- +EIMB1&_+ 9^$(袨"!P^D31vرvě8{9G^y~a G9wb\a}4)$dہNzX>J/˶C1zP{GI-{F8YC:Mq +Һռsi +P*C5O1<65>c}z1M}q[)ێj +2wӼ@W1dy v.~+C}}xu} mo;Ex '@ii:=vwRܶeEv+֊:bԵ["u[ݙc\fJhP,f紙kVS U0L^m7fU6Ui5aZ4=]eAufʬP ܤm@4]Ҩm0hPRєzBWR#hQUjI.%5ՔB5QE+fU*)WWVrVTpeF9%R8(YEJؕ +S^VBUi)eII<$bV9M\&L.R\\"!DE4)B1R'+ +H9R MBgy *@,#dQ<

ub Q.B \sp: }t&ӀZqua;o NO 0 us5`];k}wh1`ޢ2V#PХ%..\X,GA,̓4.-c +]8Du? +|hAR`;5Q17oƝY&O/s +^Fy1oO$xOasm'f\<+3C\fy?}lƵDyrɵ4Ma1C0΅M;1>)ds;P Z>3Gez=uXuh=#,!zv i'ˮ +^;i e2T31cCQ>i߇4G@GB`/p7ktE~A!_6Esse(}ϣOmgH/D5v(mW MǎsqNs7nŴZ1^G6{Knk;ylTp[ -jŬv6sju6cjf.Mj e$v6 J Sjy*[ zTE#7\Tf#`LFIC5*. +^ill@) (UXMg(tu,5feZ5TRXSM!TJ"JuU+C0y(YJA*TĮV(JK(KJ!Q7i2ydr Q$*.I/FKd NeINf% +ڟGJK LJݝHubiфx)q1 (ֵ(b^} ĨHhRBl] { ;#툋n1FDGSBm_X(nkThۖ!\|#8z!"8'%$'|pެc7aqݴ:潁l.M^ʍ iX[`st'8_βÍtsqw#8S*8)|8{ A'wuqp!8kAq;;8(:8R{ 'IlvR NBK$mhv8M&h"!E]"ctRYYh('g͹Hg/3Ju:κM+u(tg3?3jaRbKyU"[峅_>[F6oOS2¼c8)7eO?WՇ"k K&|* |gǰ1D!7l>|qXA8 :wm ;`Sm -1D V@ "^]xy͖ +V@05V@09 +VCg#`OB +|S=E`Q 7A@0>{Gn4zT#!3@}iĸ =0 F@gh#KA0z.#P҂x]l& 6B3i[AoƝcCw +x@SM:]CBO+1U:eX8D6-%@h=CЬ$Mǀр? +иqShj`[u! AU21*wGP~r,%b(-+fhy]EQ=?;sVp^S4$DI=Dw+N *TƥHewgw۵?ksnxϛ˅ L;?<94)@;یҍ4Ӵ#=&nB udRM݀o{z( UsMWP (jNw8vTuwisДݭfgG):Y)([i_ +w#*w5)\NVU{E43:LL %kuem$6'nbTUI4XX:DKr|LJA~vi>DEWd,uj7V*7jLLmȨVuA*keTbRM+)Q +[PV%Gi@q"ۇV.CeR\ATDPJPj1FZ%PH* +ŗWV/-7ڂ%"\.O\V$ħSʫܓ[QRL)/x"&eL SW!],2в(>v 2 | ? ¼<&sh9xN>/e8٨, hLT&.%;HJ2..1M$nZDNj**B9w2H5 ./)!9 OJdxrbO&$bEƠbhQ11ۢQQ(܉HZߊ(|"B7AP^ͫy5H +i%N|Hc?Tn<>< +x$?OqKQJo_|t"#)LϾ~yNОLJq#ÃXvzeq o_x<8{_˧KO^4 ǏC> ~H_wC4}x=}x=yx=~#0Aɣ7#đ|<{4@_ |q8wE"^O}r $u"k8*|#޿Bx2dw)x"&  u dkȠpo-·ɠ;+DefD,!n-E567aIVkpuښߕSwi2 v6FI>Jk#[F A+xD`}yFKx0#s$1{FLP=> HF1M]DXPH7q(. 2FEefݽxw㼽qgmgkEiY޵׸Ndpk JU҉rXBˀ༶quуڷּqe/zlr`桋snǶ9fbݘq6=(ƔeOź>BYڸ۲:bb^`j`ZKPv\( #cCfPa:<3(#0租8rXSvLӍ4Ӵ#=&nB udRM݀o{z( UsMWP (jNw8vTuwisДݭfgX)@ɶb.'+yª"ksH[&:̲6I[~f͈7Y1fѤGI,fddT9 >&mH o +NشuUܢ jD:5zYFu5~& 6HdTD:ȠU52C PW1(v-X4JNACZT+ +2)F*a"TI ] (%U(a#($Lrq@QU++P€r@VǗDmA '.+e[UZS)AUɭ()/.FDEEL + *ԯ`B^IA*X(d e P|d@A~A2yyLrv(|^p3IqrQi9Y,SyL\JvIp2t\b'=%E%s8liigoȢ87$"VPH" *J4{.XW+vfߛL&|ν$R8ɉa碣qvd9鎠ra9hj{)*{;v NQCVp +R)dTV' Ʌl2LφACF8a( !cJV,bd  6BsTwZi[O7zg̽qU|i g2oq^V_C>__;._9X,/5/ԼO gØ]IoB3&|PJ523aOes5 sf}xJYB:LdTe +nEBJ DE3szy<\;2vG"hvAҡes‹㷮GQ_())<fOۑH!)4;=Y!YIb'uI!?/ " ؛ ړ,)pwR,)AL # #==miфԘ(BJɱx)(]wh68p:[>!X[9؎wuAB~Bk +زE`3nVmfٺq :ܚ-Fzn^WgFqMXn)|׮eW55z :O~qYY-f5.䱊m+M~i+M"^Skv.:gG*сvbcؙKiz>j +P)BJN+llq2[\F.l=d2 2`d%+Y"F@a~`u|R1N:U|y֙5Gw/z_-cueA{㼬L9K_;._9X̤|Zj'.̤5k>N(MښBI')?YR‚GD +CXT,sIu~pH/cy70u~8ޱۋ-kAnE^0udAXb2#yn1$X頹'W`I<)"\!~ 1֧3Os$,ŻӋXπQzui)Ļ "(Fkx]=oxC@\n` [uEr+" НKMHFqHkv^=SZzkĝ6bT"֩*qݕ0Sx( B G#"4(r4^=:L-)BB`UHȗVx`WXe`mi[TWs.e.{F*`S45&fl6f7_p}fyy>{>< ՙXjXpZiDz°lCVϲbjojqlf=k^ꔇ4C^&.O^r<,$2.\s V˅ Ҹm^s1-:͋#۴0p,IsCtvЉ3L.\at3_F#z iҮ&n^n r4' IMfh:`Az8ANPFY6mOR0NLu7]<'݌WUyŨw:q8*;m&R&om氲*Zx[,$ +}K0)s1LZ2MTi(X7Z|j(٪ RTof +&WPj +k jQ`|ľ*y).]YAȨ.c(N*-Ss,.&/* EBԲ|>)ye<\ږ\FjIRHQW6,>Y,Lyȡ V#)'=Obc|PrT@ZRѣČ4驸Np,%p)i9*RmKbIU>1bq19ȊNJ%pE%"88?>6>*>.y 6VLD\LѸب(Fx̖}ёHx!1HľBX~1C3_UH}8پpp2V,XY0.08++ (-A%nqC>KoΛ9{x(x,y2^>d6?"/7o !"ߟň˧{JߞDI C!:=%Ư"%}/p¤~@!0/?Kq%Pb~y(~2XO_)7yダ=%ƋJd^~|fS1=(~"? +ŽB#.EW(/oo @y?~fټ6@D6EW(ɻ@DĽ ?[yt + M Jx"7(|EW(%@ԃ5Pн/bw*}>/ %@F!@e]|,A""EW(mzy9Yts"s |fѳn}B֦!:A5:s @+PХq@X#]w~ytw* CLA@X - B2(p +z1loe tCt L. +LUșN@3xcǁf93ھem[ + @^C^[@ @"</$nuBT3zF@t΄RKƂ۶J6϶8V=}ufRzS{cPs}c`6\lW<4vy+ziʃL⼶ uyrqm^'X9,&HK.yqǴ04/x0n0Ų' A'8?@0sN>|a%{8:#&O5 gvOҍwf8X=IЎHj84',jv vTik9.V;T W}UTno]U⤛Q*O5N'3\eGDjs;VVEkﷲzByKdUa)wf>e:YS洉*mk18l>ōV=_+iJ՛Y:Bà5Zbش4*ߪc)o$ϢV̪jIKQ]cRx2Jթ+'GIZ<[VqY9Wqz6PKq +BFuD@qzUi [SWsC$I @`0ي -˽[xlmk[Z[Wބs$L}~ߜ{J\^ gr +:܉Irkv:ƕfr +1g;,Yi0sffHX2nfW +/zg^d\ΔdfOd10Szb#-:%JbLn6kT3&X,x ̌-qf3j2 BoEb]d0mtH&*S UdчE9CAgPz*\ k4:S9JBrS*vֺ)TaPP%G(R!!c! ɂrT.xTGfRX*IpA1O<"#b=.G*gfjfjʊPHhxA2g~}c}Tʾ )eC= ~G:T FףF_j?T"!S27Sӫ0/C9DLRLËj D dDoJ?'= oq0oxOH~Eb=M!?oNA2p;$WCA=9 wǷ2ݫ+t߾~n"=wHs~Y7=Vuv_+D݈{Y-=֪]-4v#*NBTlMEMT#6Vf-i@-nmoZ\^W =JXnk-*ݼp,gOvdMUJTC\\F}!2"⪭(sՖ9k斒/,)-(+9ϥJ.- +@!'-WZYZsT F#RN./祔x%ϝ99yҢYne|Ҽ٨ܤₜY0{qnl^bQ,^ɂ%ff`2Y X\^K6˅:9q.'&fq"i(W%˙*Ĝf̙ ÒH1Rhad\ΔdfOd10SO#JbLn6kT3&X,x ̌-qf3j2 BoEb]d0mt$M&*A6p&jЅ z=LфZPF ѩUV(4*7Z="XP!BBiBCeJ&S<$8& qR &IdR|Iab'I< mbK4)+OFBDj$}&7FzFReH)<`Ҹ3ePOkDI-_L_ ?TSӫ KŔ!T|#{ r\>n{" s3ɔ~* x$À_Z6]! eS?lrtL]hta- o.fCwZhCв}m`ˀv^\̷{2@@<;<̷ eG-2@vywOpN}~qaMM/Hu*:W^L $N7Ncg{nl6gՀ,{癣چl<ڤp `[d+.ڝ+G#%Z8 0vc`F0ngDz; ;SMMݶa9Dqvl}am;x+CQKnnoܽwLb &;Nt `mqzk&Zx ƚK#&xF@A 1`BCkst=zukh[`Ѥ_n"Y7 溽FzoN~jU(gT{}؝Gv0Μ;PL#TWg0aF5oN!6bÊ%_՚ !_2jVưdˣ &2Y0B0dtZjNyjI`z8kƻ$xIH hBS46'5IP+B0؂joan v7u]fNMEGxՀ(kѣ*^AIkѸMZ|;2ƳhzV\Qjq\Juv%ZόJؠ@ULE:eGb2DK9P]-^P%IEjV*|.O!r)$X\G*2"FT-V8rV a9aPA˖%(%selLR%30fLNJ8w:L|<,t\X6q11и(RtxCXL]xtT!EfXȰHDhdpJqBC + f + 9a ` +`:ŏ\ cL@y7ݼ6ԟLa'ʀ%lǓb~yˈ8 _ijq +d}(-)UrXDXf'3Tв%lI%J,e,q)qN}~5a/)%P (RT`c(Vbmo6ƽɄ11s~3w0s2Zp)%<\8?\dɥd{`N*%dd%,03L7gd,Y 9Ceb4L8]I\Ѩ6lpqYitt)Lb2R V)4\iF@INO&D%%1Ѧ&&2u 8mr|<SdDMx|l,0}LlhtNQu\k2Qj1Z-N&RAD '#idF0EFldMZI +%De'UmBru[;Xe#e,M842['J$\$b1N("!N +8Oǧ x YW=AAtg>lgRߌi'#kNO +?L +ߏ즔6'>LjX5Acq_9?^+/xB8~)w^LzK +j}"N~y<=Po||I 1a~zsʏ  CF`C07#8_[;.L?C[7# _^]">@*pCgO< " yfɳ{}0l7cgp7nFN1t'!'!nZڍC.C]@ vGh"V `>6dszxuj7$w=;{;ƬsunE-f:D8 6"‘MA~h`shtX a`* YCڑaJ`` + v/n[+lmqFut[1Mes#f>rઆځV+n_zg%1S6ˮt \^AEItPsv\mp;#s ל`T}5X?T'1O][||7=]wQZ)v~;HG*ldᡭt4-43Бoj•E +FJ6eQipJv! l_]EUpE[W6`UM +6Q)ܰP՛:‚5ͤխuZj]V7XV5໽h&-cei'-[,׺&egURs"څL̍5 !cn47TUf/$sYr\2\֒E2*Jɨ-/q2ՔM5%8cui1aqI()%mQQS K +p l*i +]* +*H%eŖ| <'CZRb 9" M.%sRaN6. +aIfb9&`"ef,]N1>drLFOⲍF}1]gNgJKLMabJ1bM3bJrtz2!*-)651E$xeHHi"8mG$t8occcbfCvv\*VjqH6ʨJ' +m8ANF'0 + W)5]0sYϺ rg>gKh$4rf,ZaR#g\-wR!{B.0%R|PPwe#;(1?gzJ!L;/_HXe<[4oGŜ#=qۨ)|7x>կO'A^T??~z40~xX!w#0};_ߌ^f!-M'c7^zuWUat||g'W|r`=Hzx݃ͽ>#=KsO[nˍ_9znrr߇`'08;Fv^ fSmSi6 ( + @@;.6)[w6Yo$TfFhth4B%yܫ(t( @ fu`V|-[ ,N}L>#=6M0:&ft6m 7č1Ah+4`mZ| Z ,;@uLfD35igozf:\ם֦õV~od[6( {*ޣފ12vp.~gc^#;.yN;J91lgXnM&{ncƆޘd]`PW&ZPkYhWF=5#ϭzi4 A`23X4f6꙾f7ՋQMx4?D7F=(:4H;F19M 5Y?7IQ/鵳Hu\$-q5#Âj7Vb9i¶&=ݝI9tNB SikE [* +KVUnfC5A^aFFШՔj4hUzUZWéĨVp)6Hr"VSȊj90rV)UJZģ@+kb4 +bTZQE$4Z,⫥8\ UU"TR$dQ鑫*JT\XʕQץB +Rk2TLʮJ3q+Ae K1Y%8AqfEi¬"TFyQ?W + 3 + 2\||<6Wr y "+i1kؤus\1(^tTT0""#QȈ G11 =rBP";H/弜MtD7a=L I?y}XOOcy?>Nw{OD +?7'-ӏ?uxwŽƞpBbSCϾDN_F_B˰3>|~?@O ?~^A݇?/0~>85<}/ww)> NGo =|o'}|8zxpN/}q>8>'d G> ѹ}܈Ėl x6{+޹ X: +|7֙ xikk + +Et@X@<9ٞ%p +`sw{8 8hcݍQ_#5:  XAvK>_}L><isxv !z`L';_S8!lq'cD1 FˎP Z ,;@~347=qj3 NBkZiQJ2-RteqyQwoŁ]wox9 ;K]F1n/ڏgᎋa~kmc vV[q98b'6fH6)[IV {eU61veR4C6րbd$N>GJc#qt`]@ ݌sZ6l ۚhvw&=Jhd8 &L%lS*,uY ZTE3kʚ lMz K)CuAVSjQSҠeV5JTi] Zؠ"IEz%P Ɋj90rV)UJZģ@+kb4 +bTZQE$4Z,⫥8\ UU"TR$dQ鑫*ʪJRBQ'reruT #.R̦$GDN}EqEqoپ hݥқHQTaDc;Xb{ h`]޼|Ν&l) $x=96eMu Nr8lIkb M4*8!//(>*$0.2 +`Ąc,aa$PR +["BBPpfCYyg_Պ k +"5)`e +:1l1(c?7bt><>|^~D&7Jc2xy4&69Z0Auz0*#K¨I:ƒ%a9%[Oٚٚi+i4Hε$? nR3hR| {a|cơ+&9Kô\?db>fPTj'cfJ ح@!检]qy&{)]O2!Oe3'ҩ'cGL֟lo?3^>^ݝf;Ƌ["nN_/8)ϯ).Hs xAgN -λG;EvAV:Nu$s<.XZPa]><$t\<.p6}^͐\31gv ?;SM#vѵ +hk;9U-dG6ղ wh 9@΁ ez}똾kD{ALk`{5 +pQ ӴlO$s ڱ\Dl d[ f20.F6نWCAuUfN +v ˫`mkۏ60-h/pnX3V 1}aǔe@W9ی)9Svjo-Ωg7UIZTݘғM%'vcMu⣻X5v?e1C޶5։9eiс.ov}qP{OܟUT65VZ[Ap;T1*vm0V-qߺ'Vň%tTjBNJaեE\e<ҹ$KJ + & 0qqQa¢yBˋx̣/+ȥ+gbK8\ؒa01󲢋r3b]eegcnN* w0'% #= ?'FJΛJIsNOFg񤰒$e&'B3Q!sY ~|h:3ţB08\b-%!Ě'Ƣɱ!I-cMF'DEGEEF0"y"PAp%:,JPvKDHn؜l(+l Z1!b|AA$>8LW'1-@e 7XX~Bf_ǗLJϛF|L&/od0&ai :V#tLQ9^FIԲj4(FZB)TJ%\@)d +=drT.yȤN, Ӥ/؂|B`llM[1 Oe~G8doL L7)4) X0p17nM!aKQ-_w|~db>馕;z)3PS'uGO;(>v>te;s]*n{gJw]r> }SٴzLND*ƃ2bwPo{E=ļ} fC0r<3(04T+:% m_Ƃ̎{ Ջ-⦄Pu@%9׀H5p]B? + z/+CA=t_T=$L:#|H}eSBI'zRDlS/tN$F ;g}pnwVtW2ª' +Ԑ&*i v7H]VӪPtX͢L*z Ÿ l"6F&vhs5Ԫȳ=өH9!%u@I[I6Vs UҌj)Ӡ +:uZUHdke54]ETBtLNJJՔӜSX)*9'YY+LQ ,r R^(%) ++ +3+(TZ)+wH,I,-Jr䅲Rv:* +=uj/a1'O9}~F +9 9A +>NyuLJ`D~4LਐPQ~a!GBCIGCBhCiBH>!#A,ߠΑ@Bߏ~y%y7K˓s$;]]ݍÕln̑$\. I-zޭw-.恼.1P/2=E//E(ח!~yLw x@TQ1Cy,p?%Q:ο +%O8IpJ8??KjF z 0+ͫ7ꐄ K_xc?\$`zPMR{(|B߄`*{ R = ۏ~wHGM`!/!oן O{^~@ҞGyݕzRަrS=$=)ݑ3RA){~Fʣmz/!}%MzHyp3oӧU}fǟws |w_g{{.н"-C- aY60yܘTg>0 SʘQ.I[uviZN S-#`e@yԇЂ "`n[ i`a֎h SM +!`mc&F;ƽp0ߊ8};2ft&5a6bNq:uء&'JN0lL4ZiP߸hUnX[ V"jf8l

#)ʅA]b~^1T1J0^Mu h*&.'e$=tHLI%mUGCR^W2‘IG#k6qzvhy 5 JvwZ +:\-&TŨ&cTrPQ`P;49jUٞ\kc*idf2ۤe)xzf^[6Vs U<lgT+HTgj>:PBM*DQAm{%q9y/%qlBbfȱ93~m:YytP>kF{c&TUO3JpΦH=tuDC(zi bF#5$TƂzopQp9HhHrDh#)G~{S]e,j9ÁZ-AUF5-kJ}^znT߃ֺp*K\vZ].Rs:->g[ǁ*8HvmEU6P2f9+h兕Mm*1J8X%%r%!̂2%lƔӊ VRThN#}ј +ڢ0O~1E]`ӱ1hjNRZ>JF'Gi &NRjaRRbd>9M.B.G2lHdR)J,HH"%Nh?=lR6I- +BDe$q6_5_V +E@B֌Ç?E%+~qW)zy ~>e?Gi/t26D4TnFNW\~[CE~}͜΍B!<.Őy `6_bd|ͣkNҕņzßļ? +_8WA8 +;/{S 緀_@7_.5.* _KA^?2Fdzg_p)S|np,MWupfvn8e3;7.|ݵK3lf _p<ȷgͻq_IizbN I w쓣$>>!@\9L9y`.OI]ܛ=q~M.!5{w'agSԝ'̉-[a,fut`zZ~VW7 X]E=+f*ܮ$ٱ mI`$.N`"2۴U' c81@pt~ߺڅu# äCtg8&Y<$s;_96yxcM]:Lt3.\u?09?a5cyvܞQXBݨ3{Pv8~r(юYƙ%~l;ah-ؑ#hm"-d;1L\ѲonZL5!>p-;Wh1Ln_5fJLӖ5l^n^>M1"&,x%|"g-f.77!fҗиz09ƫquaSb҃[@_6L&-JX2ԅ[<[4LZ4XЁYn|A*0OmCՎb 6Zpf;!;c`W+7ʻu!X5#4z1VZCTu6puDBlᠫ#B3L[40!2D}%TABC#ZpDqM=ۛ([$gQˡԢl! "7q54oYCUZrpU`*Rq1Wj ev9NYiVq=dri6RQb#TLE +Zyae9(+cS`/-e +mVcEI jeaI/Do+51%&J1 bdbCg.,d-6Hl4)瓟ḳqQ0|')tr ZڠӡTzRdZ5C4f2O4GASKQbL6TK%H"F"1OD((Md l(QYI\||%ȩͪr"_=P_L)D/ϧg g\Ƌ))\ix=܌qG*oIll}}sHzzSݐxr]Ėc7dz|]$CgѵS_M-k %4颠R Io ]j +H%AJc{XTu1afCLwzyfɷXir\7x(ᡅɼ`n d?}s| [ݝizv_no-[~]fHH50WWMgilJH_+h˞]<`'yd7=0Ҹ[y0ʝYn!5:ݜFLv}1omV'@8qu 2aD4`\b "^"~R 4{7){f4ECi̴iŦvmmV-Agx +5z iNZa(kW_ [z*U]sWG9 34Dh+#"'5#F9"4@θz)C¯T[D+FT'BBunU'9ti)vJ$mW:\gu hEԁM z] +"]KHꪡI$%wTkIRT+s77v^BYV|5WWʊ-%S#e䨝cEWIydv$KԹLF.͈:[Ig!%26R[qngO܄^0X>2ʒ3O/dp4܁?ٳtoPo szb,]ؘ}Y飁><"||diyB^Z@7=ׂ `݅~;_n!ϷoMF~;ۏk*ެi^_zuՔ_@2"VA]# xz2%0hp_ F@po xݝܙybݚN7mBp} +xM"`\ +"\^WF M5{)U0-cz[ G4ikB4ڻ[ٺBu4: ֎K$hU7@&E-l_ZP";Hׂ*u1y󀌁:7x\ZXe{z Tw9T2ԹA>g낔:*a{6VF.*rZ!ՖJR_e539,B 9&6vIo7u6# +Pe@[ rT^e92P*1Iᥦ"IY HkYZ +'3|LH*9LcG2|!i~N-bVM}nu=U%fF30?U +)(3$e$iJC_JO +yCkl}I*?(o'I~Ny`%Rhop[!_寪|ukW)KIYraϗoߟ6ϰ??} 7ﭮ݅=8Gتf?Lv?Ap+UvOȃwNrJ7sNaFpSXR(ӗװ|qopg1ȧp'D"{ps(r,>8C;cOa=Ix _wN` R 㐛`q6u۵ð(r탈 ry\]gv"a%(gv/vz9qj29Zgtbgt|;V|IG0FGpdr &Ql| ;[u}ð=#vK519Hඣo))mdkX7}6Cώn]nqn(H &7DhȽ6ƍt9B: .k qqt#f/B gsuo;*sLok䈆`=mM({w+#[W Ζ[g`c5D򳨳 C~SK +@diZRC#ހ<Ơdjy@@EU<@-2NC* YT\ՠr +TuAJkXVR㰃=vºc\6+*rZ!ՖJR_e539,B 9&6vIo7u6# +Pe@[ $*T(_3JsmEI Cq1S-(ԖrJ i%zY:M-0?Fj]n.UVKL-9(s27Kv6F gk2,K(=SQd F"S+\U JA*c2 +TD2D%].%IK$MK $D$b1H(P$!/tOGQ|I +/5$I(`FZZֲW>&$εFJdZ*\#t4??ʈ{1>ϪoFY2?LRFR~V?Q>v"[^wI +D$i$' A3H@q `Θ]䮺o{{ `9u[u2][|51%k17o[:|xdzIXozBԇfӍ&_ͯ$H0{A.l!H/w` Cm@HO_Ǜp]h,FZ@:^_ FC +{ڿl,w<gӋ`O.,́OC[@97dGADX +kCA:^W >u|Av\"vLhiM&[iHD uF:ƛ@kLMC0iD:@P= j_vu!}=:^U@zuU +dPG9j/c!B ZN#Qͥ4 O郠$0ֹ0AE+WB(AP!WUD,4DB8[|$PPiCoTkɱb܈*mfHWe5.e#dOwr24݄iRTb3IȠOt69CM +\XEl iGrp 9;A5A:Di7x}Eg8i/)VJUCH&{L!$wT* IgibRZH:<^bSY> !ZK y=7'$8#osjJrWWu[Yj1gUcJ\vLreL?#u(,-$D3NɌ,A/vdw}2N^==݋s?-cΓ$ݣB\vZ ϝ;8`ۅ8vpsڹC̎mYqtw#8pu췻ssvutsq9:;wqrcmّcf#֑d+'=N-v,mmlp6kaime[Z,xfLhf43SS!SSL+`}o&?c+5z+;˿8Z=-Xvf8hW./W煫%B륳 +eN$GŸ/(yh WS{cf+3Ӓdm"A汕Q>ӇG̍!a~C><4n^7*~'1DBVroo$[Ɗ[faFZ@^_ xyeu^]Ezⲱzvịuyzqxvu?1t_F7ZH)0ʝ q΄sk7،q}- 06C+H8R?>tуB0ׅ$r/4H4$ho&i3섌4" h e5jMсDuWBg2 ZH-RԧH >7Ds% k<X\ + +pwU+rqUEBC$" T'"Nq*m;>^5?\,U 25^UW=ӥtp3NN5MʜR0Z JDN>&g(xV2c]Kk#-r\Z.n$:w5&H(\/ '% +Sk!tV=!$wT* IgibRZH:<^bSY> !v,9$$T  $@BIAtWTUG8gvݝٙYwjpý||䗬](?;/uZ^#@sN^Wp[Vͳ95mEE܊1w|"M]~L}g2Ɛ+lC~/0^\ׄwp'pAVA^>+;dBNnV^.&37&'#'ZYYבJHO'x)iiy1KE%RHI)B$IID%%Y^$VֻzW]JagR@nr2pi/~Oߏi/椾|Lcx&e-b%3u'RDzEi'E) +Sq)ՋDž+(Hȿ$2Ky]<{~.w%YJxlQ}FNA&)2h;0vHȯ+`|dLUJB@$Qfp%/ު}! _CsV1P{@Bߓ0r~$D]V1HOw93ω|6}Hȳb'7'OyrSt(ч !7@bCG7$w*}@%9**JEݟT;e@u^B%{st]ݛ`>=0 |K u,94ISPԭs8 Hd̍\?}pqK0AՃ8|8W2>ŽK$L̅ݸpau~7vĜ 0gveNoNͲજ o[pb.=m2ݡ-sp\сI hF0{7T'Hk;B{@?X0㸙18̌I0lm:mJlM1gQ f,'[t} ^;\9?_=\94;r|5tw *޵`9w5yq0cۋ:ynaU^L̞aT]á;O; ;;oG f3GqGf0Ӄbm n0`v0mp`Zn&hvoZu$*%f1&El_Q v"_-38鵼>F櫳u<2jqVi(*♤sOP5mdnFĸ'#ua!εnӍǺP5Q@#\2ֿ 煬8Fz }'j`샜V@-EINAPL",VKocm-p+h6u1-C>Cc (6txq_JqKQ6 7;9{rMCص-NJs4h6;QUq`j6\*RYQ.`^DVb&PUv3FhYU fdPیFf4 *AitJ%h*LZ+װ4:TrCL_QjjȵBLéVUUjFRgUIRT-R*y +!2Uyj)ʄH+ ++.B²RE DLW*+&H%Er"TL*-*,ɑN}Elq`0$%)A2"(&\"JRtM`D`@ 9罿ucUU3<{ܩ]?bVzg0a 5 FgىId1(^ +NE IQ"ZF3JR$R"S +D&$ +Rs]}n7k/ /Mj˨Iϰ`Q׈B#T/*\|jb4J +#pwP;3oalȉg`S})> 1C88|*tA'Cq39&f} ;*22~%|:;RF&xPNO̿?h<\xo~=rmv׽tz-SA>΅F_l#7X>f~{ .<'Wox+\pp7LK\ܡbl`{e%vX[mM&/V♜z [ -P{znu&qغ鯮W WٺO]u7@Ku<j謱R +j!Yl.VAI*CGT@r`׹2RΖ5qyS ݙ*k,dH&h(2A}!TSWs:b ~ bd{qLVw$wtH&8 sK)p +;L~ɖ;Ѐ`꼴ɝ )sw妶Wt6R; iU\L[]*b-Ӗ 5ٸ9U-՘lsUJLrsŮQ33儲S7dq)&(4+QjWWW[%2 ~lMa&aLLU)% {'RFL!If;͈QGDvTdq&.po[TSfӡT[H ?KR؁,VTpBؾ̔)؂ +ݓ>IRs'ޖ +MÄlDŽdoK¥2JlJMDjCV^xTPF.}$;lO:cmK'FlO%6.9fߤͨObtz"7a"pQQ p +CyDŽBIk7H IQ! ^fSf z^ E@ʰԪP!?Ԋ`uuQ" ?_ _[@@ookI^e~^ZIXCg o՘kWkJj`5+V.ZFtsìXNZNlyK:m)]y٢E8, ]/-1-1.70U|<|WWqj68Y\\P:I`0[]&1r3,pP:g'3Id1(^ +NE IQ"ZF3JR$R"S +D&$ +sPArߣvm/ :kd|j'h;Yl.VAI*CGT@r`W1Ε +,[BT( 8s0>b@I[ EB&/)9V1USypu|?To$ +N}qaQ7@ &$$DGT -Yݲ,ren;Nxlۉ? 2p2j99y{~Lv<[ƻɗ"<$Q75"-#.%EÝDϐtĀ^_ǖ~;qi)B yscnn,x,+nusǰcۘi8@./AKK/.`n|n1c:;1B3.әi,Tv:51M#\]8ՉNo2A +N dnٻ/:wC4@8Aad~=6B3ӏ4݇ SG:@67ƉC&zO؁۵F{!#5 PZUC;V?豁ܐ~zu}.vG;)- !'DPtXv tuS(͛ 2W f%Aj;FThjf=Hb7:C:QIMՁQQ#jk6]S8UBGЬm@U5!&ʏgT}kT0}ckQyo@ +^ iU +WDQUM +G-zRQVS 4jAlTY/TI%8 QR")"P^L$D@R!U+5Bߏ!Y>!)xL1qTJU(X*fsl62"^%[)*/甕:P!ۧ4 VAei)(`3A dg1T *U\,*ډ,Fa!NfIA?q23`yt r)@Rs٨,촜,Pjvf& :ə頄4-i4Hg$@R$''Qv*.)1q 8TL\,(/:6&_v1hT4*2:* +'"*22 +Hd"BD (o&?EDM~ӷyqdľ&_Oޘ܏_OD׏S߸R"*(i~{[^}Cy`K8Kyo"qwvx~'Wo? rEo#0[ǟ?{'d?"~s|scܹ?p|_d7xK2{@ؗ{u*/w6}v_\yunoϭn_ n]"!_$>9m#A7l 2SLy q{ﮆwwîkD;hsJҗ+ A $< .͑Xgp 0C&uh٩PGLaLujXP'+#$("`y(,[#!s}D#䶎"f>PS=&Ʒ0!Fֈk;qHbI` :bINm#z+ '<ڪǺl)e暏mcΧe8Y.-jHqͻA s yĬĸ> 1ϸLgRE ĸ6rNNvW':I˸:Ąae1٩?>1٩[s7tK# .; Cf ~>l:ROhi5N4}ޮ 0 i aҪޱA T7ӫsY<҅8Ii9!Jò+f#bFI=mlH=6ZM0+-i Ri5ΠZG Pc0A BnLZoB$ZQ^#XEZt8fmڬ 75T~ ׁ +>a +*KKA,/ b ;3JP9blfQNd1 + q2K + +QY(̣^K '-?Ffa%~*~z2 0dIJR dF1,9du%(ͮ(WzӛstV}9}Uv8+;VbJ5J3#) +`bifieT2 '!373Id2D&I)/$8DLӄb@$hZkYZֲbj k9 'ɇW>~~|za+5 cgS)$||b]}"6Vj[t,xy7#'֙aG/{cސ)w4;B6oft /2[Qo)s2^LIp&IoW_D + _o&܂u~*/'///U;h4GowVv;zQsֶvlf-l3F7f\7l߼~+ E[]pTn3a͉feӦu޸iÆF~jIс͆uZ ^oOrlYYګmmqVv*RRec3WY3,:r+k- kfF0S2r+\aBbdr9N*77Cfnfd4L.K%R_Ip"& "H(QR ֲe"57%N({e+NxRy֑3Uj9HRwaz)cU5Had{ fy#}S6'3B#4ܔيzKfJFTs7z [~WPz1 qowVׯW/MD ƫ51oxq(WM슩eXVO~ZY<]@83$c|!NS`nL4q4M8vwwiqX׹٧FFkgzrZ_tkA'K]:;] s;JoCD?ւ6&a(G`IOaj}5`To5]M:[E$ .UF,%SJbX\OS|Dh(ЩVuǑQڣjpcWu]a(?z* \`UCiٚJ)΢!(V'3@tГ.sy)ꄑ6uXGnh:yQ5GZ#]z\0ԒKl8Di $ .=:BB٩ϯ64 w@H MMBj* Di .^c;vY;)le8g/@WW#)`'{s~w [&=,̻Yn98D9'~6utfqx\J{u:?seyy!{=fc~w0+z`q}6::=@qi]pg,}CD~F̴gaw'dakG{q>!Cn!Ѕ0 ݭNV.D 3 >0hon[Q}mt>7EOtmש85]hԝFqhvuˆ9#Zaaքhox'E-AYAO}~R Կd#p! Nc >I {}'y;O}~ xtsIǣ{cʎ~_뻻ɿ|6ݥHoP/=o]sޡ"m +-x&bOo%_=_]T/_;?<[^i;Ԏ6Hӗ6P[ 7ܻm|t}(V^ex2 +{ +Cﰷ/.{\loQaAPxmcivnPz9}cI)cخLF]Yq|B]Z1]<%v >lG <8 +a'1'f)Vgj P`}JIvG&(ɧ&@սTLݑwB Kc 6? +Lp @!F0S63Dc&b~>_6^:2udwD֩GN뼱rc#ZP#1VmW2O.!.A.Ƭi_Eί [&=,̻Yn98D9=h91Y{/D2A4¹6T?uh$QC,9"1w0zC!A¬l3cnhܚ]#IvÝX 0ӞAc=О-si3 qat!L#=pw+a O5 t0Zۣy`VT_[]Miut0Duj=NM9urvxvD|f5DuX}5!Z(h w`fSfipf#a2ЌNf76 r&a5MFDuAgVY:XYUUVa :NRBzJW!z2rR))bM-\Sr:L%aj)U0KՈڪ*"ye%Ȃ*TTRIHa&vIAX(Ǖee$yxKJHDšI",+*%l +s d# +1y8AA.Qf(/;?7' +l2E994QvPpSzNV6##EwTa =KHdL`dċ㥧% +8.ㅤ)hdR +cc0(_Rd@aw~m<5}xsiCA e Lm./})Y۳nMcAAc7O1z}q8F +\(z zQv=^'=KYG 2a; < {̜Nn [!rHuW!ڛs*\Su,CHtz:MS%4'%S:r<`󵉸]4ytr3!htV1> <4~񑡾q{÷56Lw>\Wths= Q!ȽpQH3;̷o˾AB{SS! C.B&ӐR6T!SH90oPJ(!15»GK!XR}D>F>XToQܓPԫ_ ;b;$_[HM@5~KƜP `$H5zˏ׌3z 2r]FyqUF?T#Wd E _T3y /˨z n0/O; ^2@= tE>HH̲8w[g] B 9s,ۗtn43]k&]=CrDwQAO=}R_O=$tՁYz:jXPO{50*8 + "y&99[$@\ 0T +u@q Rd]].$jr(tTuX_!RaW@"ʳIe9,J9%Y)r~diL [cdp2!(dN})Hx +44r,"y)MhRT 2#R]Nb_66&AUcsFBw݌$v ]-AƑ|{oI Dl08n;Nϥ:N;nIs\yyok ;|'?xwΫ5" l9_ϭ@lg~%ekbZXO :V?rb17 1mxgymb>66fי|㰇Ĵ>1Mzau YPd8z/ +a`sA;.@vf覇8 ^/cjrj> +@GN}ZxY Ҋhrw=AW7KetB^j Q{ @/DwZa"uX@JSnՅ継@.+߾f" +a{ @N^cipۤuBTM $6ax1|g8"<)كLLk<7Ȱ:[<7qq2=rFA.^ <=6s~Ι~SAZ c馇8yz!N^`/H;1ԌzHǂCHFZx^H={irvAWH@]2kS 82òԁ^;S Rz ^Qj`*!zia#sNAG"6d]FUo"v4jWݧ5nM=mk +rB>>WX ̊GwMȮxMYO,L%D.ͤIzXb.(G5Rg,~ݯ10Cp 6h4@_LvWl-$a( +n:1 IMDFD ό=)1pp0.{Bv'D@xŅw, ʛ+&39 +ُ f b=<(g+4`{h -$`/j@4?;Pvmaكٺonn׽>\דζe;ͻܷxkm&ϝ;vpqr߾kc]۶vnÕa+v6g-lYe&. '''fz vi|l0 ,(AE5V&١[ZNeKŨRPZ*Bi$YJnmeY)BD,r6 %3,d}afXH٤lbDE$%Y@[zֳ "/z,HO{ɿr~>9u}Q3_3̑}~7f4ˠ60K5-\PϕHLᙕYOF>@vz7e>0Lʌ7%悦x E<~^~|67W+sjyfWM_+Up E`g+y.gxl9 ѣQb| ?8A~3ݏuf8X sJ/rR7S,]LtN4Ht`FZɆ[ 5l7Hiz`ud稝:ngk)'NFE=Ut蝪 + ^FVJZ1-;&Zti, h(+ƝPS@V<\\E2WDS 1SEA)]񣝺n]x.m]4H`Ď2RG#d|6*SgwUI"$PI^A40L7 ⊻MK4\/ɝsnYje ƹ3y3핕As}iaJrn.Si%"+c!׹%bqǰe4A|Ep\о>K 0fC?۩iZg0[ONV' ʄ?z.qG3/NgQPo>+9[272dg0|€5t B:Pz CO}" Ĵ6bz8HFr(.um-#PgL>@.>m׭nm{=$7M\6؍ixֿyhuF7C o#Y綱QdPfz$Em赛qVUݤ4zL n. +2NYG;`ۍḿ; ގ[ -ʤg7HMz-IǠeuP3C,a$mT׮Զi5&: +UMF UUP[NdhJLescNPѤd%֐khryZ.d\re=QʪA"-SH$ uє(%ZLq}M "iu5[H",j++Tp*1UʲreQU$ӝHXr)-.DS3A| \x"K07Dd es(Y9>aL>eyӳ(YO+-+3JȈGZFz:Ɣ +ҒSSRs%$3%3%&'%IHJLLbT"vB^ԋڿ"P~9I:؃S8{´ǿR~|X/xm^?r0N(eE.{1dŒG_fb~yW"(}^n4ݔx$yZ\N"O3O^xm !`/;}^~D߽=';v&0B@D{@o}D{Bq"8}:zkzW= З3ŭ-'ӧ73DOn||=k*b +2¼eܻD`޾Dpz¼qgqz+/1l Z)tmvltm̅@WpKǸ]$o6@vn.ęNm{iFi}cxb} +Ŵ6;58cfu2p0ˇQFŃ-anl "N! n*&eҏ"2@`}3 For\w::ڈnE8FtX躱کA.'VÐ |㾴ʰuq%97!Suayv1[8c2Ѡcc>볔mm& ;d_s~3nurLa[ǏbY|4tY8泒e+~!#Af47G1|@fP08]Jar詵O#BZi(Z~=edi؇E7a uC=HvC^MӅz . vc^'h8| {"jVmlT.+1TY('nQvhf0G4zfEe7);mF6kS۲e 4dv)vc$sC+$cVC $2-:6R^K1h$FL6K;tAյ0mZ BUӪQC-jTVS)*S؀S5T4)Y5FXuSeEPӢ낛kWʗEgV_9mO Fr`"Xyov_sҬ !<64V%=>ΨnVM3$|ciZV-"Ҵ`-8ZEFy3%$⯫7xB)w!ŸO`x}o7֯6/}y6DX -,\_7Xf5w̮"^4 L_63`VOƌxԀ!Dx0CIC;}@݋XR77:wuvΕ+:I9P&ڑ6rt$DQ1e4 hP=Vj (wk(U뭢CJ +*Ejej] iK vZTsBYDh8 /Fu - ՜"UPϮBy,FJ*͡CJ;lg!Bq&-QaCOxKAdG~\<);9!+dɊJ覤5QRF #my42\p+M3A2ԔKl!H.54Jh%7$tt}uzks{ uRR !i;59j*R]9byQ&Jpl\\[F6RR,\LSI1Kp u252Yj铡S}Qtՙ(;pјB'5"hVeERIjJdiNJ ;Z(T#U#gsRqagSpgS'Ha.٠LBة 'NHBӓp!4FXމ$%Fhn:.147U4p8'5Y)*2˒Ye&S3NJHUU RQ LOPiDcwTq4)6M`8* 98It$1:q~ Q"iǏ|I~8_1_loL8]OP&Qa!J4!t^Cq5G %xE?Jw4$tH%HA=Gq{ 9 >|)ǡF8`?}vy +yЛю^;hoʾ|egSEc8}wٺCC=];w1ةg9oq׶mN77$[l⪏ v 3Չё-8KG;V,(6V68K-6,XlV^-Nheii Nh! DBP/yx>px\..- :}lf3Y 3yiS`9їNBOn¯ nl(˯])_Y}~>-8AZ-S[ Z}fm0ֆؼSû/8ŻY5{?cAi5|V-L ֊Cy.2ڛ))zg*dr70X?/6̯6_7~ fTw۰&@p`u03s|"^ x1 f33a˦ҁX=3Cd V# C*`H? O݋nu 7:wuv+t &āvD;ޑ-c!f1Dn4CVj (wk(U뭢CJ +*!T:ҒAHm%Zٵ!Bs1H8:"3`B`TwڰR)R*dHGyUK#%!V%68ٖ!'c u#?q\.K蔝mdE%UNWtSƚ()crv䑶<.i j% $iY%4P z\ľ:F =:)UM`4ĝU5eǨ2G,P:ʤ3oM]iBB- I $!== +"" +(Kݭ;EN:Zmξvt:?5^x<=Ƣ(8A 1non42 }hޙ.p;^6$?wp#N1AnyA{r7Dv{kl͹Fc}}j{9Fia-5{z PR3 jk bչ55Vz@0'kRnY#/Tw꫺u)Φ5POLف̫|$S[!3h^L 0%16L*.TEȷ r 'v:kAzuY(;[ccحŠҸmjZZu  +TVgZ-*a1k&P[dDTFHaueTQPedlz}YSt\ArWe[4D\}4GW +./)a3u EavYQHUZX%V$XC2 +M/ȍKaΦ'yJȅsdeg2٤2 D:H䔚Td +R.璢HKId4Y*)9"#:H"MIe 4E!%1%Q$(I"ybIb"H("&%y$QB_(0 |>(`FNv pueſ<?RDzH%S(Oˤ(ӿ*_g$環YOM{MF7=s<N=m76 +ͻض+rߔ{oc[WfF᜾m/l㸄c]}zC>9A>yG}x FaNn N'5(_I;'`7qȍ7xkK][)o-`kg][_r \=ʆlGx37q;G9{ٙiAnpȩ) ;9 לS7&#_pli kq?la۱nGqln1݃S aqA w1m23"h<ʣo!#]?";__okvaz A~g Hsrocl+J㶁ie.keh*PY RZkHf *1@%vn6Q *!Օ0SEAB[ bг7fNmq)QZT^QnFghelre])$J[\ԁr4"eEE Uia!P*XC2 +M/ȍKaΦ'yJȅsdeg2٤2 D:H䔚Td +R.璢HKId4Y*)9"#:H"MIe 4E!%1%Q$(I"ybIb"H("&%y$QB_(0 |>(`FNv puQ ?N}?Ulq.pYD0\D1U@TT@&Tâkz3 sn{pWeW}L﹧a7 g3Gq +d3'S J/*"S5_'Ԙ݂R{Q[S q7fAiR㨕cK93CÆޜЛ33dN4H0dn,0擃fQ~D \~PG|}h= +<jNԼ?uddX` yyK/~w{y22< @n M"7{"ׁA; 2v  +3y|r^eŞp70P %5 u.<*Av. D*.@pW^Z2.tw!v&HBsvJe!;p !)\Y 2Sq6oĭOKfKOmHBd$(5I/pWb b%H=\(IxQlY$Fl/):.1j߄H\'~k~oR|b#6H>qapޱ[>aqQhCxm Pi! 5CaqkVo"2[10*oeH?"؟o)ozEA~~A8 _@>}~O?Azg`yyΟ6zW{~M~>[?MJa&n_B6zχ~.ϰsBT!( ٙlvDHKޣd?gX:<N<`{|/;/j#m3wڔnUpng +QU{z76]>κ pYcڏ]*DUɅ*;_5=1 Z+ r g˦w/k)'9J:}D YM%])EPd!EluS[!Af,W*J~AQ>Ti Y* RTVv4P9JrdC8 e5[̜ A *:@^/;Udt@n PQ2$F'890utwgwUE?x[~osTYظ<鼱賮.z-+ ꬷǾ9VK~)׶2cx7\Gyls^ ƲL2-zg4fx8($Cp,&<(@$ӹ1*Q θ41sqLQmS.qq eXrR??HpPs(LF7ۂN`=(D7Z[h4cǚaw.A&Q*͉#{ 4"otù]5}~^!/8VuMUyتQGZil-(k@͘-TF 4| {f@ R&TY݈Rn*k & ل)m1ף-f=i1(,iQ+kJzy Jf"jki$MĢÔTRs5jt^U U"C-fK^_]"m%TPшʕ AI*U852Q +SVU*W*[Tera9* Ae+2I NVY*P0(IřrqQh$BV#b1 3Ҋ X|>|V^JQ&07&ICۡR +yd%gg򲲄r0'#9N#5135JJHIOONNLgi4IICB&dt}(!{PX́Ttb| qqBƢ`bc(y쏊ڳ~"eݮQQ={^FĞHTxdD),"  G]*$,J + + !*I|`7k`hckOF@o"X!*0'rw^_ƿ +atqA, q7o EOUىwv=`=^޲~zzWwyۑ޲F?[ܳ[a yz;,ɭ{=&d7 O_ v| xe- C({U 瀇P@lg+ c?<7~`n^7 ><2.AwP]6o{x@pmC([}g7:\ȼSkߡ6onxe7Va@ +!ꚰ/_.eO.Q\/@y<><gޒwNx{ Y``4Cw<xe3Ppt릘ٯ+j(8A0~x؝N چA/ n1} ]n kmRu7;GS>ײqz{+ ceϸ\bym+>wõyǶ2&b#6aaH ~nelC cO3}to+J;ՃO&(Bvx fX313%H7դ>J9q#4sﺡ~F6w8O{ =^SqTꘛűUm**f+i B:*_:0r7삔. Uf7Zl,Ci_TR4Y742It в F^+u9'4(MWԪX45Sbb$溚S-J)6֨y}W-DlPW -y}u%JSWrRBE#+W2T%V*(D5*LZYʯVa +\JS!r˅dRb$%8YIf*CbTX'].gEmK +ӥ(HDDV\* IR0Ʌ4Iv, {CB!@B *JS; +XA XA\ׂѤضSw=?@½7w&Ā߹}8!z<8B܃|> <4~^/ӓGfoÃ.]uqp%(5 N&U)5..BB.*ى W)<JG%Q(@ap8,A.Iv2V&I $R[)~Ķf#YDb1*" _,g9KHt?1R*@a8M2>^ciSBΘާQ?o4Rk=^RG]a`L g8`כssHʯjf1=(,~3=`o4O;< 1SvF}$M =7'cz5ky}MZSu00tΛٝͅ-tr:RZr;8Yt +7 +: +q2Im +y,k闪KKx)B޴JB9=')U3f%7W0%5ߓ\t\PrBr#)X,PwTkĚVQVrtݬ0}J&5!J0` ++UAA,+Y;g^mp@c ??!n7/7ŋdqj5>[eq9{ qWi8n|<\ Jw+ES srUqJGJspv"UJ'%GQwT8 +P)8 %sqR%dvv8LFIqRVv8&HbFLņ4,g9YΒeWlhydR{ݧO߷ +w:czFz{L>X֔EQճFyx(l;YJb?^+!Gk-5=(,~2=`7O2iS$A)Svz}$Þ6c|diլ>[sDB&I}LZ\/ŖB<`_ /" +XgA_W'!O @#X{a !xwo{?7w-&cwBHXDF~%`6X:" +Eo ݰ + V@VC`ׅ=׀6uQ;6+2`^ +w<09G*YzΰuDn JWe:q7AG=0]#YJ52Cm+Uttt$w '` +ugH-2 43QRYGDC ԕPE&j#5`"T٩6,3bӛH&P& H1L/ٸ Ɖ4;ͱ]nS;##x4 N9swa4 moGa]c$1"Cތt ;E 9H.u&}Ӓͅ>uy{gZڷ}7W֭}kOg\y-[>w׍UDz/ALkWa+K61]/ΆF.`O `),e83ק X1nu]cYhO4K#Zh#t rd!tgTMR:]m☟b/lh=\?ٰ/!/Vˠ:i` r +j>dbi:Loӹa‘xFfIFm+#jA20 qiQQ#T&UBV%h(Od)AB-YᛔrI*&3(@Z\;Y+N) fO-kըQjeQB"$JP!4TɥJT*HİzFebI$52+ +>D"7`ºzWLŵ  Gx5\aM8jD*JZ%"^<®.+aU2P~_I슒I^YQR.Rr0 +(.*(D86;Cͅl6NfcΥʁe Ar@ٙLR22LOH$a +JJ9h##J8 ONJDBRb"(>1!,EEDDG T"Q z]u"w2142)w)wi ?=JCVS,eq6NW!nOFD0`MZb#SQ?~rbWGij/"/:\O$Fu?!P؈E}'Qe//ڐ?#~QFB!qB}$%~Hԓ`a =\nGd;ġzW뛷[dvWo"}y8T_<omgFB>"Ǜwq텏}H>$%r"$޻@`{_ !w`֙\ǻF5rk^i؍%Il.X!fIFWf]& `a&aOB:7A;; YЖNR} Y: "w-@v͟ C;=F0M6Ճ7#0{A1=`Եfo(bAb vD3웖Twl.o}5}{ysgZڷV~ײxwXy,+>Ĵ\[dd +3]Yˋy/Ҝd8e0??67 Ƴ0ÙIkt7_ +ptkPX1nu]cYhO4K#Z} ~hNw rd!tg&O`)O{'P]m☟b/lh=\?ٰ/!/Vˠ:R{I7Vs+D|ɨ阃f [oӹa‘xFfIFm+#jA20 qiQQ#T&UBV%h(Od)AB-YᛔrIUr&3(@Z\;Y+N) fO-kըQjeQB"$JP!4TɥJT*HİzFebI$52+ +>D"7`ºzWLŵ  Gx5\aM$U4ڏ˧z]Vam%QLV_SaWᰪJKq(ү$bvEI U^\$In) )@r 9Ad" +PY|L͡B6'Be1KgrIc@Rs٠\fi9YYL&)YLfdAN}v5Ea'$$ TT7` P{QREDZa!GGYސsnNMH2wg}W>FN0MpS\x:\%sqR%dNN8L(zu#N(p9HbẢ'" .Sr-_%f!D.H^z>rwO4.1ϜySK]}xe <-~)zn |=q9#g5 oge1zZb7BDX*Xއ2=|GOwf~Vx0_9dM#/o^N!}!@_C0-gW +~KwIc|{r ,x=C"X 0xh5d81K!7 +!; F0t(ap y0n ~|Gz?"\3+.vn݈0 oBp 0Zj!minhD \l=iJ"ՀVo5ݙ*"8] +uUAg2Rf"#%@h;C%Ƞ O AMIǀWCPX]] j2RcU `8JWk l\9*vx(k uGdMtإI.`h2;&zZX Cmp JRGʱ65aW0I9ԦaVfFyIK9($+y*>?[GH9CJ>](#O/w&OHbW5UBgUޡ꣸*^ vRB[!<RFo*Mh.#$po9q%94 'I`;B]1xF\ Syt\cZ1Ez7}VYer%2XKUYJT2̧WnBGq{,G/,٩=GDj+i"Y)L%.BAأJEgrH>lwNЮTrRqGF$Єf%3vq̤ĸX~(PHHj\ M26:XP'3%r0zgr .JoGRt|Em?C0'؇ ڋk׶ؽ4[`DrDpm{kt$aKT.M#Ixm۰7,q !!uwBwBw2% ,(hmXƱM+0;Rٱc)66ھmF6:ܪ-ZMXyzߦuܸv- P1ak8VsyZEx\J_)~+>+8|pWx{>^^|ܼ==zyx\< r;7Msvsur1E.IΖ9;9N2LIR|u8K iDb1'LXYrcDd"] {-Y_㼷K _漵>.svṗ-8~x$g=t<x_%Y?*wOlA,dܮޙ,o9Y0팓YִL73t%fy}~(^*d8|}'kRzk~_w/;`Bm+B~zuE/n{9E5s!^ϯ]~k_ϮX7V Q=,z< vuf.XgzbC!`ǖި05D1SY=7z?Ck}@zt.Mv3&pc2th i66dB#jDni \l=iJ"ՀAo3U*EZ+Vw%]Whu (k/ef)j/8dZ"h-A-"h~ttV1PD/VW@W1CAjqN2 yGsSBFJ +s娨>b᱖ɞԉr[5QpbWAx7K1ީ4ѫ5Rwhj]8UX:FP #RIʡ6C2ѬQShTBHSoM]i [M$[ - YI’pAvdSܵjj[mvڙNu0zu{Y=gz782 ބv ~]X}>NƚM}DU{az`=A7Rbo`HB.bU CF#ŽhKpQE + H) +FAݰ-R FBȀRg;R 믟-m ])ADo?-蛛ڷ$t#;(s'&?Rzz=!!z@F D}@$|b=;WMytMBDPW%0w3u]@$|bݻ P/|qYBWJ5V\2u@|z =<ޭsg 7 i +|x +`8Q'WȮe+Kt]W2ϥ74Ob],zǧsHLSXuqv + LNONMN$;5!+8ذ2(jeBg#,PAt>(Qf5Of$#W3=s(^@thjWdDMơ%lafM0܉7Ա9 *@Ԟ)]Q垆KR{iŞ%FymUi]at7h.. X;s\7,Qyuvp=_d~.>CX''P+I?<69Mucz_2+~ci'ƾ8e[9:aQ"~t #C0 zxa;2Ȳ ,nΡ϶tXq̇}DVeb?>_׍epZ6,p0vü\s iX VWm5z`=A7%Q: 5b kaJ +Vl+2Wq +*u4=Up򍺊BQ`ЕkU^N[-Ti`d9zG֩YR4\ҹЖ(˔2eBSi"s +ruKki!VFI'_H2VfV,Y~v6,5/+dwnf&IJBȖ#2ғ23xii8 r,IN2NBzj*ة﷦.g!@ +*)M,TNT@z" P[캺{I3  y>=wnc/߇CMEL8Nody,A:^ǹu .n<7giܴZZ:WESi8RRgsOSbJ1R"S +QE%/$F+LLM[ɕߩA\@@Z_QߨIuG$wKϨs3*F&{̋QOf ocTM/ "F՟OL)qw(OuT3sB鱛#-ՇW'nea=os29awCnC*»J8V!#j )o*; +7( ^;"ɀzu{wT#v[|*N/orw;w ع3;]Ν߁{v$^dyr[fy4)9hp>v{GwCL4gm1;tnupY8N1zxtY]nԉbHCL\븁L3&f>!G*SOwN;UK}l5NT!;vt"t!h V9rYU hdk 52i \^&4"A=r~nP Dpxmv& i`o* *ʷHX6[ |7ٶмm[ZKz[JrKJr=o}o Sw^TLUv4O!dN̬nBIV &dH-S։E&0AIGk +3:I"NEF\AF&ֲ/߬@Ь JRJނ|\j^\Jce>.rB <_JR]ٖԺr2BR;Ilxp&n%=B.dNҁmYo j+$Tgyq%N[SVWZa͞"IwrV*`òzg>aՎ-L+o^7!?m"غ1[,$eSYϴ(7[A$'%`}ny~N:.fKNҥ,۔ƭe3RqDeHHVߓċؐ!5)b}E"D%"%u$";)AJxVb|xVrnifR<.l^^8ӓEe4{ 87Ak{HSzsIppqwùΖMũquq]41FS[(*5~6T8J)+ +)2\\T2BbLLF-d5/MF=57j||y3 |}nrza# bt@9z)#ΒK.Tn U2#jvHiBƽcڽ} +h2^o˧ "ɂAPwMf~ ljzkDP/ׁ9g*95:` +P2^&=D36Y^ +V=9sM #gf{< +Vϰ +V6n bLwO! ns-n/ nvIDq1W";W:.u".6::n\ f@p4$kI3G}vN Z@`t +df띬wx s^GA^ hf2 +-lrX&dR$hfv+lvWDP +қXk4kmiIdj23yS˫ջs9@MV~^́xfy, `g _|?@s}1{TtuLnH]d$Nҭ;#۶{w6zL{.˺Lk]uov{ݕC;k^m` 1n{uZbwMxz0\_bX2^΅ʩ23`{hV+hMXґnKpR㐓fz4 :<,ZqfPC'V}_GKHδCzLL dw[n@%vAv$4k;Zt(5&-!5& fPz!t -:ȢQ +[ +`v2k Q9I)G4*dFTaP@fY^zdRp?ȚpZi#C|@% LuLez:AT"j=eRR"׀$Fq5 +ī +x@,VVDy5B$n5u./qp*+⇢ T(E-/0ӊrEVYa!Jv)@9%Vq$(?'0/'B +8\B=)1}̿[_^~@J Qzm2 %o"!{淯#->h~PoBTQ~ c}rL|oGzgF('H/7^>8(isF'Q_n_?|=wڏO}=y7wm_߾uu|<|N坓赣 !QAt';$G}x$5"0WIwX\&E.HKi$뛄ݍCw֟NzY#|~h $V ek{"uk9l + g~'2^K͍e"O#r#l ?1 ߇ _`A|B̫?nϱ[f0z=Ciׅ@0v o| +zs ϯU=,%dUO/¬Z "  @H} ȃ^tun\g[gICg)0Ittub` +VnmE \h!:fidm@z`:_GCZ`@Usտlդ3NWNc;y@ ;N=|W&2j/EZRJj.MyBP|0jtA!u AuU̧2GsB L9lGIeYdfS~tR^(*'./u-7Mkզ7iI^'Y/~S/^/YiZoQb7$o hz9zZ6~N"h5g0 g)L35Džʊ?U+dUV|')p2e~ =k$ĶVd5%3WtXnpKtSY.PJˌ/YW?)USd"xA:. #TcD;+!n9+ꅗi*4W'5Dv0*浳 K'#? eJ2I3m?Gr&Bi8ApN*0mNMdP3q[3pⷦe_b,'bpA{5&GQ]mb#p{v[O槉 +mN % 5],;q>y̮8ߨ8mymؽM'L[j.,x놰-uBkw0[;$eunVͤ+ +A6ἂ62+G8Op^~ܺy/MuS֙Ng +kYۛíXzmjV,[r%Ro//jO’U<Œ.^8Y3%oק f+ȗQȤ2b0 >qd? + d>#>>=ahVKՇGk@B(6#׻00S_yw~3=n!›!X~i]HnZ 3vڐ*^\[ϯX׳]BV"u\ +@ǔGB!A z`MEMv,"  DF7O#Zj'+ dѥv0FiE \h% 7&N#[o":"tSW \;[5LUSN!Bg讣8qKKDS1"n-BL@h(@BR]T|a5^:oZGwWK:Z`*a;M*˲ TV8a+ʫ +IKlMojZMڴfmIk֋KKokb(JwN&?'vs g_ʶ8bł*bMFFc陴IfR&M^I7m]Ћ=Jdk},aSs.NYO̸l3NV7z|r؎9mGiD'rxvu0 ԮLt,P8yiĴ8iY]EG|qn١n3`;e:x`/)kS35a߹=;skэXhnzET5riډ}]ʽT ~ӎ(ki{[aT;L݌i8lF+Lh+hױQaY`%mV{-f&e&7eդjM#4{0Uf;za;XݤkE6L)uU(tU:n)̺ +XW7VՔi1\A +5eyz-"W)TkUT)UVeYV2*%MFY K/+.BJD^RX*4@*G>,U((0-'Y㖝Tge$ef2XR.,'#NF)#2Rq)){1KvE ]knnw^?sO=J&'wPg<{z=6oOn o^7w㯟n ~.^5 cuc??>>c| cOcm|/<".`+Ā{]{~zUwʝ~`|ܺv yۍK`Ǯ_d:cq y0^Nmb<>9 >>Э Gq@17fG= +61#`aW| .K+Ctq ٝ;3S3N1) 8> [&^G6Awx:|aCuh 0jqP, -0 ;0uAL.D68w^ct0Ab#}:.\^mnMV=lW=Z/.y4^^ma S2qs~ӳ==0%|&c?5,Č˶>dusǧ\1nAvFԭMqr,'jW;MDrUwKu%LaU +Lr\(Mr ZX'G)k:M),ZȮҔJ*K԰ + +UNU)i24bXzYqJUV$BP'UPrU?aɊ줂l,?+$1/3rd9t4LKOI%HIȓH2Yl*;d$D\tRMD'*1Icbb`R)MDLt4MT"EG!Ē(HȈHXhDxA8'$< \% +aBqh?D!!0aH  aBN0XY٩Ϯ(.U=3$#bDP 9"Y 9 bBV1 (Y` *]]v?v7 SU]M\ܺaӠ: +$SBL&'BF$FlFll'G(>X3͍کޛLyYr~+3`*EǨ 9B6Ǎ?WJ߆~Aõ 4X}޷~n05HGaf}4arN7է˛&̼#>%fβL0+1կMQoaK7S+5`@̗n`~o/O/gPЇ?SaOX+3h@̻_y+t`U:G:۾TpEztB-Uh&Asv&&{v^̓kpQW*kdx a#W8p:D-YxwjuԨA^ U*Z+r v +j.T.ϻYXڍy 5.]H 4Cp%h2s ͥUg-UY*3ٜ Ug1 H \YKJ4..h+9S!VsSӜE>0Yb2$D\n8a9²eRb "薲κڤH9V hE"۫NUi,hagBs9*y0I7+Qa7 T/'!îp#XPբƢ񜐆DbؕVZh%T\h=;DH]!& / N-&_P`u^\0QAl&*7T !g +/:TMX ſ$C_qz 1\Sv&)U Bb,]IDyg'-ٱD*S2MD-dޑ8Kq456uYcN,˹3$ϤhTGbOQy%Dr*drF\N+))<u0v`/[@7Z/8{E9bAǎH ?$xzxxby{B=s wj7WԮî.^t<]ivz8;ܝ\8,֍8u;(qrG8G:qvٳajB%CmGgwN=vv4[vAcn"-vXo'XmmbfceeaÞ[Y 1޺dm +K㭛I (K *(# 33CsSSMf&&(Sc#FF(=M6n2@HeR-JOWUH:*%JP(z(H +L! a2v@X8 +@Wgڼeʹ3Q͍کޛט]L)en|3uc|ULJ͏Q 9s0l1Y7 /Amh]q@Jѡ䳃T߆6 aj7=d!iQ5/&LojrO3ܟ"L:2'AM+1oF|W.EFA){>9>>><?7@'`ueyjuIxL7Ef7ļ,o o!X; oRV\ ]JjP@^@5ɰToٝ7ly@zP=mRnt!x @Kv5緀M:zvCffѓkpQW*t51xH(!gQ>%1|xl11."@=rsH\XЁÐؘ,b89:tȃ@3mEDGE *2)FXDxxg0T*$,4 ?4$$Y!/kAyޯzg+ ‰("IL~WQoy+KI/7o' "a?Dpt_g~?P4¶c4vO{qt?>Ǔw +rto}o=}g~~E0P?>grF<@~&2 > ?t&lO~<׻|lrE #߁6omn0-}?~ ../$ow_p ͽyq=3gܞ~﹞O}~'_{rN=|{ =3w<.6=3{to*zUĕ[+3伳p `_ąOܼۚl@lMƍ/SXQ=so3c2~GK,yk և<1l}0۲6Ekd:pu*$|fXA.K.?#ojb@YL R#Կo̢)x̙MoCF eT8ېaNZ?SrG|tJC2G|ʾ8Og #ž81֯r8~?>j7֧) ɧ~5> ++njJ1_\:s#)@z$C7DHyg@Xcy'Gs~y u3G@=s z8 ]@o;N1zFwl莫Ag @W[k&o8bwg: qw;iPTwiS(>gsE-'Wl=n= K@b"$jͺt&,G4rϓܦ[n%h@::jl]FTAJ鬭Z3W+R1W2]7x`.tB|X0Ea{V1\}, +%ND>#<T9IW! +?AYA)}T'\nN Ӂlt*뜃Zɡ҈g9;:kr:s^kȱ訳Hl~*Agj2kr3jrP՘6UxrP-+ٴUIĤ_:IXnfz_(#Jm:lz[/HnD)YrB2JrD"JeFb;OhY  `>@ .X1>lVOxS꿷j{hİ?t1gs>=lmhEqF3 _3%wWˠ#d:Rc?5IYWIB8b4֧) ɧ~}YhWj!; 3>=p{$3I=B!B:1S[>z@+sdz#s z.[o8 Z.1rov u;^ \i܂j& A爁t΋Yn6aZiWq=Sē+]V/ xpu5qYBoHt X=h9'3MgΑ&݈-G=Mw  ČvaC6"zrt)cnܘ8g=uknòL40X'_8V(Ym F/lg;Q 3,t)V}vȲ|bx1 uɋØOyq;2#2.һEe #0;܆2"2 3zaz?>nv)kx}ͺDG{vwnDiG0-OfTyiqN~QՑm*IyUnGUq`YEO ʱUw3FՄQyv݈) v a\NJA:Az ͎Qл28h&nbͬeD50rz7Z $Nd>:5uzuZa1r7I:n0i%6FbkQ%V%hJ,ZUl֨7qTL*QņJT^]*T\D5*CUYyEyFW+0yJ9*JQoSY*EeWP9*aJTHB*AeKJp (ˊwQZ*zNLKf4ia*]B|Z>G^1S察@ǀA1#AC|s`K!`@=@] x#՟_o^   d> 0(7/m>|pp >l@mH2`{ۗATi7O,B̵@ 1m6 +T.MAI0<1Y<.,∰$, zsR0꛹D#$1|!8A$T?}bAS=B /Ot#nks'3F:]6i`oWD@W.v^v^;ql0܍snmX_`X6=ykDse2r\d]DY/̰>ӝBlcb[I"1f>ƴ4.y1c)/nq|GcDƅQzLa~cfPCDa_2LMN!e-o Y7qh/1S3Dӎun5ݍ(HF3E=i {!7/ N=U":ұMe_;I=m:,iA9oj¨< ;KnDٔ; r91ʎ+Nނ*ocn-&o{3krQeM6ލVIӢ'e(&m0d FEnFi%sk|MRN+8LZͨZTUAI5f5jfը" +c8}UWWĺJ.WamQAPpkrVFQ^Qb +L^RʭR䘜2RTvE Id)Tf'+ɐK˨x'EĴtXhQJ%.) J-ΧsI)ʣ&s1I99$٤ /,)/+ )$!'#CȡtLV&>35[Ys + vE,PzS: ]P RE] XAW nuڙI $Γ9Δ|=x<hK|}N t~B^,/[4>`i<=1xxԞzN']Fj6\*5NrWQs\pnn8Ri'wQ(d +9NΑer|pO'J$4"X,ᕘW"B| +XXXsV"1) @&V]rj[15U|}22o45`v_' tQ_=?oɜkR{}~iLE!|17§vYJ|U00eN}L#s3ـuDi #X`1/h =[?繷А`V$M9i&]ozs>w[BWzys7мŀsF9y}F!#[}sIHnz&Uck:I/#½K#jf &"#;`t<ŭl&8Kw΀k- 6bYO=@OEwEW=:t"• \%]vtJX{|pmߴY;SvdĞUs1 ci*œh&(ؓGvUR3[vVT#rҼ\\&.Ut8g/ߎ9Tۏg[v,f =n"ZpΛ,2?!>BdQ'"77"AޛB-(+."(H@²%Ҁ%6{yrF'xk}X^h| zyzCc=z!*N^%h57ZsmPUjR客p縸x3)\]qrW + NPr#-$2)O,HhDX+1Dօlkk$""<ʠVLMj_ߪLM3I'<%wԗqt2gZzq^_ TVϽAFE| G%*hj>C7EB*III^!:H`(`ܰdNM;&nv_̈F`L|{Μm\;+4cgմjdl/h5c͠ۋXWdۘX74 ݄Y!nV'˵C^,tT*̼2 .M'2^2,ѽDeL??2 D?7ҝ9Z!StS-3XuNc3_j'^ZAԎ:@zljPTNvT@VN/U8>4TioUnk@@Ye_+Ҹ t1l,*veW[` fPE "{ehi-6#;eTla6u $ҤvVf7hzV03Ju YicJmZԦG5A-4V Xj%f H*6UfPQU 1h`ȽX_S*ҩ*A*UPW_)rTF`j$O%(A92X9#̗RPVe 䖥IdʥPF&+I/b˨{Yq?E]4 QJcr s l,\J&%ddpINO璐%C2 i>ĥ"RPdaHvԤ$a +,&9K@@K%:)$Ft|l,'rp +A4$2 0>"<>(ÈbE"; FFXSSaaPP(+84$wPPH0*T RE|A7ԛ: +"èM0I4N{Q!="1qa})dRT?ԻG~~{"bB__ N?>`o@Ow;(ȟFbeā㨞`OP߀8u~vE?ς^U}iGA|#믏] # n$֟>"N?<^`'ı=@݃y~9*ųxU=G_='w拝yr϶I|zxѦO$[1}>ZMn{^^\PĺF0޽ X +{26w2 {tg,ݞ=[bk޷qۭù9KBgȍY3ܮM{\]9mmq Y# +TvQ#ˣ$AKxCA- ͟wOFB$qzgr:;^)j;wOFp^ƻ!!c]h?Hbz611ض? 虮,o{﮺lwVhΦ%}{e^vR\ K ñfYE,ւ~s mC[n ݄Y]'rd~b6{(֫T2e^6NvL,0d'lb4[xq˰4Fq/B 0H;4?ntx1\>PHw~Ћvvn,.kLsMh'`՝;|ch{YԎ:@zljPTNvT@VN/U8>4TioUnk@@Ye_+si(] Kt +Ed):X'yGTnfe*ZiFZy{Ye5[!twX8Mf.<4ݤ ZiǓcHVoe@XRV#FjPK: ĢU$ZuYRMjTdTUC r/TtJP +DUb*i +Q*XjyEZS!5rPN V^]UƥUY*e+e)dR.rQ!)J˥X2^V\OzihW!M,+,dg0CҤ %Xy +E0N}E`Of+#b^ ` 6DA J g +6;^N0ldEy~O$.8gjdNN8hp&f4p&d4̈ 4MgzNO 5i1>O04t: v8?=}}mKu_" \o58p:o_cQbGvѺCw-&NgЂ~D|&*Q?~w8N~gI>GQǃ {?{4kԢt›f. ϛ;hmZ \ SVoL/on74C?¾J_Ջ׳n`W An ^L'3p 2:(y|p)X !sN_ 7Pr4b.>%:ruv}tB[]&Stn!BBIX\ouU_=U]9@1q(@`).5fb#\8i:_O @zugӇWW-$tj[0pX{W劶J +['GR'J +88:g JB>ƽ|G Q&:֢"١BY]$(9v]u|^ 2 +tNMyP2BvRY.dPRs0۬eP ۛl٪(*(g-ΐ,+d]ltXZz!U/ZYQm験$u6J+ElͩU5mY8Kk!r2RrecrMU%5ؚа?x@J߿t xTwC{Tse\q5EjR\Uf\bU$_[Wk.FLiwe %y\%ybPz_jF٨W.ޓXeUqN:.h!*(;=0{],\:.j)`:Jme~;X&aSqs7ٲqkT K"r6·'DdK,t\JxV'"s] +.|KZ2i-WXFjnf !L7(n\#J-`IPdZ*8%609& +*jaR4.R !r!>DAq+F.,E^jުQ8%67:T1'*l鼨00œKpW-ZiEPܬ!<3Bqӗ/$.$DUb/4mł!@eg!Ѽp)AsEs)sX&/#=)p6Yj&Λ9S-M?g ӧ͚6g̀ŒS0g)4IxMWf5S&NL?A4}/1g4}qn>^^<ޞ<.^w;CstuqUppq9S{%fvvr™G394ل3) & eFhh:^Ftzj!Hc h|1>~C + eMfAfѷA_"? o|h@w0}yǂGh#I>?`Нۏ* zN'Aw2}wcA|c z9r "h7i]#ӛ;nf뎁zn?,q{ dN`z+p r{:}z[Y~/9 0?3,}]^9r .()r[íS|V=mVP2ܝhPn`73$\C9j3 HrH.u%W\j.6aףX3(9wHֳQAC@ 骅 1*! +*IR +  @q;vD~}jƽ`pdTP a uEpjw$f(|^ 2ߪav@BY.*N*˅6[W{lQ$QTPE.M3 -NOd;Y'Nu%͖jgFq032^3}4ߦ1m0aԇxa +ύP+5袸Iq^Wשݎe}kMmPǾn.2jV *;6x5y|;,&nQ7g9fbl7 S+c6eYN2jLXVbl8c 7dY'-2_ 2-2. L$ <;Lv8hNmS=.xw~WNތK7K;Η5AFH;F oS5FOևPUCݭA]Fy3$zV)ۚ*?R!Wo4 Jh\v-6頙iv3ʜV.Td#ҳj#o1P%:#TZs5$sXL,]!Djkv#Y+4A [HbikUdѨfUPY]I0iIXU4@_QΡʯ.畧Sє +\*chey%!W T)KRiIvE r9=ɠl\N f)e)l$+,(p2公 Z}G>tFeHYtQ.-#Gȩ 'll,d9Aϟ=+XvfYsggOqZ)nv$)'OI;s;>~<)11RN| %IKspji))dBbrR2Hp(!P!yρP\bBq@bbXVtlL,܃Y '"*22s"9'b\B!D{u^Wyi'P("A?:QaHXEc0$@{6{`aO{Fbï0P}> |w?RQ{hO}w|[/F_uAo=u$@۾ m5$@ xr/g[(Ǜχ1ɆG||wۣuuwX=M|HM#*>%&&|p1_ga z*+(V8eޤq ٽ .0"-b +hs,&!,Eҝݹ= &iS׍IF'̸6Aq0( +#`^+-4 FHF}ЏP@߾0gGhf{]An ;t'ޑ&h!m]F}Hfx $΍P+5袸I~u%y]e֢ױoz(}sO\dl0gtXe_;Hs>ȶ6B̲A0ol֛3^1)'2.ڔe:ɨ2bYNx+j.Q&qҨ{/̗FZ!(4O2 ̳.tq`W3Pa\>Փ=N4cn֏uɛqF;xiG&H7im!fߨ }ކpz=*{ܴz5:R(pR7; e[AgYJ_#dSbTt[Iu5PNPгƲ943nfCeJlRz6Z| 5%:#TZs5$sXL,]!Djkv#Y+4A [HbikUdѨfUPY]I0iIXU4@_QΡʯ.畧Sє +\*chey%!W T)KRiIvE r9=ɠl\N f)e)l$+,(p2公 Z}G>tFeH_v++ w.[aiK(`^l(E( vƆ bS5&1*3r0;.=owf':j.*By㻡 yq + ypG%h||Ycvn:7qQxzjt$;jq*w77[(8FEVsqѨT S*8JOa\+pr9E&0pTKm!qvr‰$&D "1:N 2 B O 3[d.@[Zֲ '|GLWOs9<嵛ާv:c+U᥆Z"{B\i-|?[KNf?fc'N,<6H8~+\Q=ׇU4oԗ7Y?_wzqc aq>n =ze< א< +ˀLf.Ol7;Σ&"<ȂܦM .X0=~j0L]x"ܧ:ܽK\Dp&9 >r #G7zu3kD x0օjò6Dj`i+`hKMf`ut$sΞ!™z:"Bw ulΣRͭ +ڪ#-Ss墖CqM+5P{n'*ԗs;^FCRA>`USBO:t[Y 3w(=?_N1uxHwYHOmH^h^pmdU8QmT8^+dfTaw兗I Z˸\h!of*gJ 569iXʥdi~_#IBFRO~{t߇YK erjJp٧$(nofWF%{lm*fHGd6ٓpX;-ҏdv,¥ -J(J(J=VnVQRWe,\]jS~N#,فtd㡽&*~;ܢ{&T% +wrI)UK޿3SҾy%$z-0]_C[0xoq Y&aW^&[Gߙ dGn+cH؞- h˂LŒ,؂؂t\L~F.6KZL^:.(:7-ߍf\TN&Bv:<:kF̆TZd )L[7 +ߒBKfHb +KOƭ7 +MKZLKM"nN^ ٔHZ1UІz&.@7#.(9S`R\,.`}l )>]+Dybt% QFQ4H=1D|"q~Ԍ gF c5GJ !xEろ<Ãøy,|1;7ۛ8٨}<=5:ۃ˝nSKP{h8-ZWWM"wUhT*JI)JT0C.U8gGuta"Q\d8L*ʼnζ8;9N H"Ɖb ' L|@'- b2e-kY +?|>8SjAMӜqN'0Oyiny]X&ruU}xaPBd_>+m!ןr[YzV|{}Έc}Fi +Wo@!U2ͳ<_&OyEG7 +p"|(' ww&@0G}CmW/oC<Vg6אC= +6Bq'c`q5G!fF=0!A0@09(Ho +M< pp.Yp `< s@}YXЏf0}<H:-Bp8]Anc]hN``Lہ]" QHޕVfR,hApX]hbBp$p@p8 8{t,AqĪ=]tBQ[ NUVM:UH0CAs%LM+q[G]!zo#(@DM7 8I.;g;ݹJrq$nWhaf"Cx~gя:&$\ M8 v]$1 .ب6bgrDsWڶ^Gny7iwôaY[*qfY7n/7`%b7<ʅi 25/2]fl,[N 4ebܘ: _`[W`1aiҟ nq]8Ӊk;q:0 63F;3خj8ۏm>,d/' 6xD5qD96'Ly՟a'VPT3T;`wBKAn+C,rWjɻZ̰&V2G TeBd0U4j`Ì҃mH%=mfդEvO[C:Pk$MgY5jU0JhѪAf +$4׫*LjQnT)i:PAY ѫa{TUVJ55(^A#d"T(TɪUrHR)W +jeRXTP#ʯS$PH$|UL$V +`⊜J_JKɑ1ʼJi|qi)s-*)Ԭ(*/! +},+d@K #8_ޖ(b^J+e*aC!ܬl,2іJgd$f3'!+--1&5>=K\SKJ&'&IJH`DƁ"=b}EDǀFh(J4" + +DXDx8(4<,  + +e!`TP0qC| hΫ:Ro8aԵJpueOOSh?>{UO_2x'{z ď_$T?|Hx!ߟſ4~E cHT@(z$"PA'pV?:1ɁgC!= + ȳG\s[E}!4뛇A/p\/3_~X_{]w_? ̗I"Ng9雧7:y>~ q"OEzGȣ]vpǿ|-&yG5лٽs+$e%g{ nom>p oP v'!w VkϲJxYwO["!o@Kx1HE|5K3}vg$LMv '$֘uF\hQzgϺǼӸۼniMkM΢ݨoW܍0eȲ\bp7`%"+'a2p}p/uLgfhN6Yysta2 1nOua}_@9@q~[ рG څ3N]3?܉07ԁiAVڙV~zvLTz@0x 8wTcnrjϔzy6/~J˴)_͇'RNcy59h =ލ:z?2erN7cS&G5ӼQ[mrDɣ-QGpG՜zH9LV̫?҄@5l2m W__칋|3^ 6? 9[i/4͋0ko/BfzЬ{rly<v@06@F.#Y0c CWnv KA{l{Qޝ!N @6>FH`َt" df`!m^O#wp R\> ,Dyu٥Z4:j| s'@Z5*@qdv,`QT"ZJAs1`Z\$5CBy' HV]>P \<\U9 l@E2+yҁ4A*I'3fQAKb|3)mنܔ}}Ӽ-ľ6^jO=ػTW)ݤˍ8Cw ȦID2\l$$]he8_$ddIL$=a^-Ȕch?VMxupt2rt\ls!XJo(Mŝ,Il}1!h#4{jtY1R9ϭpl7<\Zw3* +"˿(3FS#J%E"X0j ~܎tKvMhG[-P +.< a,N³'ٖy ؟D++,}_"nkZ2![ [p9[% {sw8IVAaAC\hjR,Mȁl ޟ m/Gt`'=%,(9:*(9V$>*h$EGvG$F""#ЉG$EDͱvc"wl&qv qEG +EmNXFX+| nΰPҖPTkpkq~BBXքZ[50rKo(;ݼْ!MM=މlĭڸȮo^Y/N2uK7%,,ް?5-Yz5nU\)g__UWP,Ly\LwRK+ŋ=ܗq[Hbo7m-\==q.^rr=n+ɍ"Aw98Vgg,iuNN8-8V+jpJgS)*1BT0JB)BfzT,d!s/d-kg (ߏh>Oh9W>}~)˿^8皙49>0qzyUgL*>,Oy>[}ߧ9F ~i83z´j:?E9)s,/YqzcyjFs"|&8>ƲaQˆ1?~t2 u23Ղ2Xq>ue9A15cM|*G5d."pWqh/ʃtm@Q{xtejfUfV}n}ϭ +zĔw{xkբJZԠ6*lUZ +ih} KuoDs4\5Ǝ*nvatmrlōU4+eeAwba棬5@Qk3+5fT%lTV[+Q*U w rj9-zd@:zQ/P:VMClQʷ0/0M:LC˕[Y+BKp T1+K.k0:5&\S,SpER%](*S2J%E!@QVebY!NQZ$畢1|V_-Eь#KJQ0΂lZ6G,Z掼L Tk[Nzzgd۳vFmLK#ٚJ%=%{&)m.;$sͩ\RvkvIعm[b2.aV۷жۖIؚ߲yKڴ 91$fSBItb|<&>g +EEDǠ|£(QHThdDćGqBY!ٟ!\\AR)4(HYA%Y >6pI08JH@W/޽Hc}" 98BI;w/6m(7&AL"݋Db7=c4ACٌGNbzcC$FL'IO#7oEWɯÉ>yQ5*!DoH /A ߂E쎟 " b %?I9$`^߇` 2~ RwW/]oWw{/Ώ_nWw@2~ -(_sHx2Iu?2^^^\D/K +}9X短}>]Ad< +ȮuyvUB?="*x @ƣ@<^`^`k/y. [`9Ud9}`n!ߩNC͓'qHt;_[Xbb +pA/@H0@ +A LipA"_k 蚱 ުZ':W]<쭹4ZcT/0 *Q\}U8)/ʹ8cdy:s@8NOrL9O{hc^?oqmcُ0l sae?:DDqG[Is0p?23Oa}(ˡb؏1anS9'GL]ơ*vҵEekT e8գ*UvX}>+HiSWUV*jS*,Oɞj1ڎ*1\,׍rj.ΉҴ:pD;مQӵɲ7VѬFމ)wZTnnEĒXMrڌ5fT%lTV[+Q*U w rj9-zd@:zQ/P:VMClQʷ0/0M:LC˕[Y+BKp T1+K.k0:5&\S,SpER%](*S2J%E!@QVebY!NQZ$畢1|V_-Eь#KJQ0΂lZ6G,Z٩ϯ03!J IQFS@`j +"*"*`CwXvW]{O{o 37w&$Z 5P:[hM(`Q{4^b<-JURz Qzyz2xBsr={2D&D,J+cA>RX35S35SW̿HnD̞RzH R~~gLoDcIuԢ"Pi,@u455MdNi7՟ D_9BF dV_>?R} H(sa557H>\VH :3q}p͸'N7NwtQXw@>:qY'X-c/ܑ$"Q]@{*Z@vA-;Aw`;6\V\6-<ᄆMoٷud{+S])'.cfJqlSUhbg #۹V*0 +rל9uSa_¾ÕEg+ ׳V4ZZO,9$hLfPSpD3&XAYOU0X=<>#u:j˗-o%*+0gV I=%v&P &{Ъs +w.nޅmɷ&q&am}[ʬend12n^#$cϦB=%7 +Jٰ:f#fIUIUvULYAomem-e-gl)ᬰ+YyR6e%o\3!e]՘Uh+VS%(@%.)b,M(),\WI`׵krY Vrޚ| +rP ue~y+f1Qse3if.˳,ɚ__͓WWHdr.MO2'/-Y1lg1jvn"LN:^LIIH$)):=)' $25iaTZ"&253kE <]硘&)X*Ib ļ9#5S35S35}@1DH0? z7|˾~nM@@\ɮ/Zΐ13! +@@\e@@&gZ*] !{z 'tj< e3Zΐ=: 2t:Ap8fzpwO)Inw u@p~F:ᄫ|QH tpfŎI6&3߰ε2k+$[mN̙f\p;:(AWq sb]W8vwtGv"ڪhu?;ƕ|*LG*(hj u4B轙j 7q6^N'nv7ov齧7C3Ns~gZ4oq[Hb!yvfvLwTIL $1A'hEcm{I.mYBP=Z,:mnj}q{Mmu0796W9܎˴Eױn5~Յvf[FOAv{WչӜg'`-V .ò21/B,K- /023B51 B> 3&~oO)~bN4'pr K7٠TvAvK34C휴0@U*ke8i5,uo vW f~UWtWQa5Z +hA86U'3De nawOhUROALL8ŵUF TTc5d(aу̬FݠMNJRʨh%6CÒ*u*Ъ a:D)u0^hP +HAB(QyzR)9LkUr\LU@r5rHNEY)(.,$KL()12)H"3T"(),܏V|FZQ~>"*ҤtJX)\DFvR~6$1/ +A,b2 Dw"PR.ĜLPBvFt>q4Hf**%HIMONu$D6qRaQI|#q\"x{˜Pxlt4(>##!ЈPHpa!a0Sa8 +vCNpBp$@ +YA{ Q8~#;$k`r^/YH a(# }% X(Iٗ~~*|a$0c^}A#QE <> E000OC#0~|ā/ h>〣"/!,07z8x}6[?}yw{.MX=~hxx} y=zxn>s ^%+đ|G&7`ܿoЮ{޽k޺+$w{ ޼"}qz}u;k;^=ugތWVI^B@n-}m.xm<_b6K@N2Lw.NN.LHㄏ1r6wn V}>V !_K>|?L^Zk45ݹ?S^n_vncm&\x+AaHpކ`D +ei\nsnv۷V;[gݎknjkQ1ͱvl`U\-B7 E]wۯ.lWs˳염36ۅiH),dm Z{sU;zv:Ͳ21/B,K- /023B51 B> 3&~oO)~bN4'pr K7٠TvAvK34C휴0@U*keԀԽ-]5|{nb8T]N~]_G^gRj)`8T[f;DdŲ5V3,=]WI=e2Yg3Vi&PQ&bE*2*w=dvNf7!,:)eJ) , CjItZBVC'b{B *0j  +DUXJ2OT 0BUqr52V!9eTK*fDw,"2W\Ɛ2ʤ R'p?ҋ XiEv)d +\H*h$2T&Tmg:әt&/0oT]$$Di*52 ǩ>U﹇a7|T_R}|6˰ϔ[,#Rx:B!c#7><~W5bX> Ey w-&{N)қ*B ^ߕ#o~\ED$^vGB0~6 ++]/!|&Գ3$0O` L"σH9@u2x@)PO:^c%`Ս&!p lWNh%V."6. -&Fs-cGisH}ӇaDa:(:@(zhԂYWt`luTӵWQJUVv;nZ鎕Ď +H -+EtͅM6jȷUn@VarYTc *s`1,>e@JJ2YgRNt` PH>n`߅ezCN.&>+!#i)[{ؐxh8)f=MfIc ݍT ] &uuCBGƆ6/D@5xuX%'#hw*,#hKRN5|ЮåXSI콛4# EHL=') f>DVQǷ"""ʱ𲟐HRiKuBJrŠw ۊR +Т1!ÎLB`!3 mKڒI iQ,[Nཻ8A9VlAY;@CJz,)0}osZ@"'ގ=IȦz$tR81;1KgڐQ4EDKJ`Yη.!vTŶV0}@LZ]tZ]dߚPąҬ 1M قDaQ[VE ~AB+ÃVl beX ' ޼"4(fyH!Ȳ6-ݲqВ Tss=CuL9k-nZ˷fi.ڸf Wǂ,V_g9;|W4׬z9g2{ZY:o)2k*-曽mֲE|.\2sɂ,3ϟ,'4Ogܹ4 ̡uB^gϦ7kexy̞2} {|}>>|3pz{zh<)d +\H*h$2T&Tmg:әt&-Mc3}m  JLV}x9Caz<4<˰ϔl{kJ}z9m4ʪR^Z UY+Vҝ]Q\LU^T̲BV +5#Tfox5*XF *|F>&Kja#7EH.!JR)΁ћ/9/;'1'3O2#K)H3SSI..#%$6=9myZRRl*J'QH@ +,!>~=bqq0i|l,8OTL "c1Ct4Z&bGGEE"$0qD8I80IxB&B%b"+[(L CD"H(abqv;C %R"  Pwo%H<.Ne +%OS}~g_gCOĽtOn1yQRދ^"z7"h6? /܄xD˝d՝%xQ?}_O6Z~&|`l(׏K헍?|z 6ͷ7ɖo{b&{` Q`(pB_6ϛԺ{l6͗7εU*gWO/>/.y>}}x~ >?[)4$7^nwҪ?ཱHAQ# B@ .ͣ. ta,a;@f~~ggPg ٩}8*=oiZ'ɎM +pt tx7C0(v +0Q`_?[ ztd4AfMtX/ گhrk ׏{`^iӸQKGhދ \oxȧ‚B/>;_5sf*ϩ^3DKzWyfx^NMpyd:r`u8ycn7>+(e?& ʺo'NNbn#m8˞!"`ujaĵ*Di8ɴeՋkՌUt0b5zGgc Pa~ oSE54{`UMCQEhj+.FEͫU0v5iXiS5:l|\VXi} +'O㵙5^e.8M%V!JsqDRTk2ҍ`6L eF8(}+jA +z"E+j-0 *I%7*U*DQȫVWr DJ}e0zC|J9hUF +V;$(ejFFZ)k +TUDiE|Lqr9X !ADHc`2)iM dEB7I"#"`ppa08L"J01+D*WP(4D$P("" +lg;[$|@@g}ܸ?Q!yB | y; +KOĽOnеɉ~;D|& AFS:*RC@%"(}-vn +;h{s<3g<>>=a- ewݬF.ZX{]+`ƛ{VkuG]y[d%@qӫ]>^^Wux>OlAUdKlD~H1BDSj4}R3Ղw {yuסjBkH;ki;*-+E[jP\y$)-gͧ-$5$6 JRN!)I'spJ2X5%kN K⫊q+bTqcEΠbO+r./:TV@;fS&Gqd^bJsi'rbJȢ#T$E#DQGlG82i2Yy +D]s&is2hRځ +iordDlzLhz2%mdp$}DiF& fኤpE +4>L&Og %!d q8{b3l!Cx'p [Hr,"8)&#kwb4VPBTTHbLIpB4-bw|KLdP\tήبAq]`q~1u!G1K-"f`[h U ٺklbbLۼ78شgg6bF {vvq!d'muc +v6* d[lmغd-[H7oFlĵƍ8~[6le\7_i:Sٸv5$kxGg^Wyx!YB{yzy3.pߍ轍f_r%zPqBb^] +goH=KN;]HB #+ " +qG~ d v؄ xy ؄ xq^^Fuy>-=_g&o@Ɠ9@2.E`7 HpFD/Dw 9@dgi-Nܛם =5fn 9aFeDC"q,0|?@}1 =׬szȘƥ3: =ftqtAbpSĘ,1N6نגiPFZ1YD5P#٠ux zT_K_ tx=UtY:+VG3dm9Q2ZҔC4;%BREK@.Q"T +ZdQBhVT]̪ 2*"UPNtʥ9SYʬRdWb[9S'uŴFD#k*s+c҆PjD>Qedha|H4*5*b"f3yM)kD JHWc)z4 +{yuסjF֐v R;BJIj[[>W!ՠR[+HRZ O[Hj*g5Il,F%6B$SO$֕e\e>ڸ0Ϩh@E$PDn.8qvq6qc']ov7kg׉'4˝~=w޹#i<&3}3G9z][z[FE6qMG7 =ٱ~HMӸn3V@}?1AgCziF{¨.*Hw0܅":uaD=!Ak];j9jzC~X-=AIuwUuzaN_ MuGVxx*-ʰpW [AvF &u"-;Ɔ+k<6 0{@}q4\zRj@:%Mu\he"JDUFnZ$5ȯ,f l S˭,3*m5唗1ٖ`.Fde`3e2 +h2iҍyy\\.N_CMpy.7+K$ڜL]6JkȠdbR2m^Ӥ}j*,9MIJjiu BHHIN5dIdLA"ȋKL$@pJPaJu?9賳$,S.:#y}ru$~HgcP,ã y{GQA]{Q٨ A uq {wE,8;HȢn5̮專S\;9:u|;6b"~~fG0%menE7g..fzIԞu,3{cq1m>"G)m`1=pK':/ord4|d壼ދ{x\t.xA~D>8ϡg"Bg!bPOY CO΍N& +k;6  ϮUN`ZlG޶a!ΰp685 O E F |{Qߞ̓0ܦ%Zvo$j޵"f7 wGx9-;4o_GȖl#qL6L <ma'ꢲt` ] (~Q7Fԃ=Zym_VXm0@Sj Hۼ uZh;ͰUnwE"DE㶶'PUp-~7 +dr_f:cÕ5ۉL76 #RSOUTW +n9jja\(DT +++`u#j%))/E~E`0yUf g2Xne Wm((Ŕ`Yg0 "L"m*2JDY%@!,&(?&ݘ(br9Di٤,g0rMe MV:.&%Sf0MzZګHѧ’t:L+HJ.hDBJr +L%HR''%cD^\b z(UZ SIEĩ8 +P)aJ\PHr'd$T*Fd8aXYyc#e܇F0})QsաYSׇ y/xy;^>L[ SoMdm +]*XQ ;A,bY.[,ꝙdsΜ|w=s\^+ì?OݬakO\]!'*,qI'|ճh/9r,C@,{fg~{(0U}`)?ý#/ +~TR !խ~,@Tg[PқnRe^b!tׁ xq ;_V7@TgWpO.^ +1 .A=DHuGs`E-^-^ +1@LS((po ;LQdFeFF 0ucbA>1N1WwwWyh0|/ \ 6Ӂ`` Hh5ꍵkh93dF`=n_7P b{}YP*(] * ,GA,Q&M +2#m ®hi4z`u|SH9UfUdxe|lgjP5S:ۛ-R +3})-'Y*DT7Udh7GJ)0vLHA+I9G)[0!f6S 4qYy$]Zk̳TJ_K|^TRo*5jiJAd3rQ96\BkŒk˳Qq-b˨bJ, Ө4 pLj/ɤ+ΠdѵE RTMaFLMQtu!'ϐ.YmQIԤGT䋊,?8G:M:Y:Q+~6ՉSA˜gqŠ2yi +20T)(q$O+PsOX)"0GcR8 eP!)R+P!>Ostr#uTR I+pZb PjA/Z/2ϋK:H`abDGOED"#g1I^PbDPB'QAq0B(i_LU@thh`tqԾPB01c<}"?_avF1?sHA$:vj?Ʈiv ĎA @@P @`m{Y{ {lkΖݼݬ|OCm ۲׏j]](;wJc~]I ۼwnڰc+-JݲseM76qxlFoܰa)ܼP<=`xyPtwǸaֹ9"\]]\ .YN.9!hfeD$c@sGlѳ!ClI$&cCL8$6:_ȡgc p<6̩"/;ooʇW^_pzѿ_y_nkUvtm9l-5cS h#g|ZN,gCq >,8E{ȊS2>|o;5Cr@k後X +,5_4BZZF?~ V۫&F?Kf^O=^S\_9/-*X1ϾYyO=lBŠY\1/eY 0kBŠY ȃi?E{@ 8 bn3Qѭȹ9 DA@a@kD1Www鼴f@0 .t vJM#څ&ۤMkMZЌ˛!`F́a&C 5ZՈz@w%`7Ϭ(&ZKYbZYEKX Q7N 15yT*RytY5ޠG9Y*TM+gzTsL'}JIcz +6M:('ѠRqʱ6b2FJRhyR8󙵈Ș%JN;ϟYjYoY?L@5SoOlULGx갼S(% ob%!sS1-FUxĸazq=rfݐ z~=b"^4/~D=A:]_߫_0  \O/P%"߿O_s?_{0(YQ} (΃<:71gпf&Q L{_D_u  +7iQ3֧ Lͳ`F~&ijRAr@(@.p :* +0u8w`DoPD_cF(WP}$ӽC';SS +' CoA8@16S(Mvh#z +X& F}Q{1{VQ^ v`&b1عLڎe¶CRQ8[C8(l=mkYVz&lE}:0/|3Z(I1}@4V"~T'H'A2Q-Q Fus ?kg43!uXUͩwᒆqs[S%iy7Fy#g #K$ŏ?HԳkOU{LU%0~QSoMei ]T(bґRBI#%t$ґ&cw:ni;J.[0q||=z]6o|z&սLg`n֛΂^_.+WWK RׁS^lH!gk%^v'yh.@̃E < bR9 ,dܞnMC)@1 y]MU+ 26.qA6 +x]Z2[&, Կe"nf:t7 2:Ypf8ar^#tB 79fQo[%,KzkS U@'&~F: F2 8`ZIk.@o +c*nuNSq$>&fS4p\tv(ԡبH3TuII 9>ns?*Whd8pԁȈ8F; +=~}G~0!!Rу9@A  th~[ <tO̾{i{` `ߞ !ibv`1;Q ?}vvE۱{gNX;}}Q^;MByxxyzfr y@=$ tmr|ݡR7!?}03.{9.=]|Iu+x~负^|V gg绷i|ᇧ;X?nm<ϟK"q}[ /%]9| +A?~A \6_p'Խ;{΁w Pk xp!zy/m@{bCz9e1}b..󽸟2l.{}yZgU{( er}:<4!4`pGM)? >HUa  {u֫ܽ~XQTN{7>㎂2s}:ۯwToc%'04Uߔ*wo#wG$w@?n˼-[2c-Pҋ߀߯zqa;0!w@޳k`bBW7UPғˀi8לq߈KNA{D Iy%jPby~1σ1Ez̠"3L$ a"9eHDA̮kݽjN\|޷a8WE擼XPgˀE 2yԓ tE@`z(ͽ9ܝlܞsͨ$6ߜc87' 8 H1ܕd.Y$s,,okޅ{t }~̳Ù6 1|5:f}= fPmV30d>ּjIX34Hn0Tjy _*;JBbUئ2(, pLj\>75ע` A0 -@geCtbf~2 ʅR͒ŤXuqli֘sT>rd"Q8tF1Ջ!tQ)D1{F9iPwC6@0fYZ +K~#.lfPSd6P (}fC *^G(A2{pݵUSJ묶Q%(Ri,DV`X-Z!)e0T+$\XJ`$՛Q kuZC*ZO%WU؉(#BW^&ScJ͋1`*(CCUJrjH.";X(Rb"Y5ZU6/@ g*\+Ϥ9@Ù'OJGJC"iSiԙ)Ӫ, ^4STV:/iUfIE+ sB9)ON:KJg%&=<Êf&B3p0COE%`BRccѤc)1CcPǒ Q1HhB4+H|D8p\RPA1ap 9-T`iCNF8!7@X(/*:$F31ԾSǂQODǏBG GlON@aaXpQ{ +?r:}A]A ܿshi^Af{H;O!{wكE'Sn?.??N_۱rMmF rxpwp olۆ<677UgWٙ,Cx2'fN(#ɑ( +Hr ~1$>ߒrRȀԅ E +@X _v.yu˯;_^y:I[?/o|EjptQŜ6o/D“ox>VR#񙻨OS{Tgۤ4aC~s BBV=v#gjϝD0x؉Y#G~@@8?ޓPֻw=~+;?|+[~+;>o=:߈o{u5I^_ +߈4w_\Z//3TbwwE2.}'=^G {s{s]ƻ3s<ܞ^Ԫ["$6ߜclnN >kc®ڻb]fKa+#B04wanNB%Q3kS.ε)dNw 7يhÍlnIil=anVD_͈pS0*f4]β0j7lbh2{ iԓРK+ S+LlH]. jFLQWY4+,SG=7,@f€Y5o[L( Q(iF63Y!T<׵)InA1!X';;,O>֎Ù=&(jPX49^>Ҫ>ۂa1YCM J8:TfUF_} *&]mQl)]UJQ]R3"rFkUV +mjK2m2;Q0#%7ڤ4In0Y@To"lYbPk%iyȍ ,M W +I9"5q&֬ݰSmW,ʐRFru +TTIA EdGk0EJL$5ZU/WYEQEBDUD 6i^rkQwVh0tyfw΢O,n  /jDs6Q GΏwWP-!3@PmAxGM_kaZgrC5ըeUE=jL߃UVܤ +L۝(Geպ Q5e tTTZUbgEQL ۡ\B|!e|J-ˣI)͝GQ''"e/hGB +2Q|yT VDYrY4%5I2g8S!W*ʘ8.f]V{fHEE:df+Őbe9"سw,DŢ4:[r24ZɤQZsI@&2Q miy=FӑZh{`4jLZPHU% ,eB|">.J*i<r#S$\q$2 G:)J,$$D,DbbDČ7Ϭ #fb1)e ?+zlPq#SO!#IFߞu>J zPy,hk>W!L˻YNL C'a$ E4lTL,)y~S3ݐ`_}" TgќI05 On0WLaG0Y} x + M0v0} ֗/` gḩGpw! ]>."} 0x;M&t#v +;wj;&f n; & zbexV}X`NȞU+À]mClz3n6ul܆e>5Xq~#+ۆ,o:rimW7]>jp0uxXۥ~V륃-DjՇj=c4Gtnfˁ]_D?^T=r +rzNauO솹4؉fB(ي 2Q]PoD + ](MJ5eݫYK9vwž·!o8uWq۶n능m+`7wͣ\,vcj6ypլiY۽h tQU\!T ,%-@U\&zŨKYmK&oq+BE] P F eme͘266Z,n  /jDs6Q GΏwWP-!3@PmAxGM_kaZgrC5ըeUE=jL߃UVܤ +L۝(Geպ Q5e tTTZUbgEQL ۡ\BBAe|J-ˣI)͝GQ''"e/hGB +2Q|yT VDYrY4%5I2g8S!W*ʘ8.f]V{fH9(lf=bHي;lTbf-9KdYL(9$ IldM6`@i4LljCh%Eb4J +R)rT.C8T#%JHH"ĈE"11"bbCk~g~gFHQ``1rz9/Yo')=0*?2)x̡xDx(!h̟C6]oܛN6}z*$jμ0b8A÷c2w'-7oM%kgQJF{ @+bY-{wzDN23$$o;lgħU~ԊE>:ؘÊ7χv}M=3Oww6ϻ6a%i}^܀j^\Wٕ&{zXœKVtZ"ȣ Vs{@?!Apw;jy9LhݚZK,7ƍ>(j+~Y8 tX B ~6,V:݀L;s)m&[q-f6n`7R0P˭[_54S 8uWALquA{)`զ2Ѥ(jdoHA} `UWl"\m!D +i CRPT3ϫ2J0kI44t[K2߯H4z^%oD3=J6n(CS] +h, grx'C& 9C0ֆљ5*S"[e\w:{`E5lP&sT%0}{ IwhQ"aһuA;"~[U!CwTJKƧΩR +QTNrcNJ^r\ꔤTa*c^^SDnL8!7DhX@Dh(ߞO)Hw`LxWkO oW>!`ߐ 5A4JК@]5HQ^Al=ܦeTo|ٚ3*,Zj"Wl6Ê7ׇv{6&(`~ 0~\[; w߁M-y0Vz +3 u`EUk`&h@"E]&fY]2-LZri@9uۘ)giƸq]5ju/]a1! >j9#4=3 ֙b7IvPۑujqlMζƛ3hH= :3T `n[ jh-pꮂ.Y(3RMe\3&XA WtǥAF+6AWterfTQ +Botq@%\Tf$QM:߭%Wt$=l/M7%tJӡT.J4i]:N9C0Ae;յ6άVVP݊w:{`E5lP&sT%0}{ %ⴞZR]Iy.DW۪ +٤VCߠRZ*4>uNm.gTV\uKuRUt&QNRGu +9#7FH<#_'ZkDN|U B|E+/_WZ@ƪM<-AE+DQl1BD. wRCIIH!=DLug>:s4{wVmYOwo䐽71ㇼkxQTwa10{&-h-hoF&TYO)@*nE5rJD(GΏwWt65;}yvHh=Շ)l +Z!OjQyM\ kk1y~&W]EprnwS&TeUU@Yw +^2TfMYRgUI H P(żE({y! 8 + +hqBr!kqn.wF;BR,Ȧ2gAY2\173cΈ%$Tit9!DiCZ˴0B6ltη 0&+`6Ekכ8k3{n6VIjńJLjH \(zʤ7F.͠(RѠҴ4Q5FRdj%JIU)=ԥa\A!B, 2T(IĦpR3څISQ$(XiR))Q*AI8bIC]"J(&IBHD  +EI)0 ܼ H>Ō Aܥ6GVz=w;W3⦂}}W;yH}ͬzu/}&H돻Y*iHRo)KL!҇=)UOofhRJ\&'L3q-:a&OSsEῗ%s51kw.g~A;)!a>mv{Azp w}+ufFzfjfrSr fJb}3;qy'?Y>YWϿueFwj+͸p7m#c;Z xt`5_۷UI{kyˀپ mI,fbjhl6 [?o"Y;PϤ p# +fƅ,;kHt]7v~sv/49v$k|gPюs{:&u :3FhNtS;0'tq|GX۱ztȭ`:i=fˑT͇7 LZ"4rp#jL П]7jڳW` aq;Wv|iؾ4n]߲ƷyyogLæe^6.jذ׻qB"x/kX7ɻv۹UfdVyV qW >xV.v Une^^K&,GƭjdA'=AʡnT{мB;=8 U90 FR߅)kTmSCPe=m)x^:?|F_iWSԀ*h ?䅊}@#[VՋ+h%wU J)/W!\+m*ϡ4ea;RN6CHKꊳKp(3_[dP$ШRsNd#+R9Qg2V RUs"\}F6ڻ&s'\(\MpYB䲞ޙy:x N'؉xq"{;>;>[;Fdk+[ޱ1>0~VilQۊЧKdc v㢳ç{鱏ׁ_8בa9_ϽOUUEU<R %fdh2jnP>Y1S(U#,vkg)t݅.v|)HNTF6ٮBP6Bx+J| 1f i5HnA 7 +:H2ؠ 60J?mA_+ Rzkף͔)5jAIUyĮL^Gک!H:* \!S +BbsEB-%=VFu#Zp]^67[Ųh[ՅNFyYt*-M +BP3(!Wq<\ciTIkWb#HCT W_l%lbf+jp*t&Wd7G6ZjfI gh^F__UEg2LQ-/ij:H[]ZESURbFq QULXpE8U%HJ)FDn2"aBE&/q3ju +Zȍa2Fò:BA\CZU\GSe:+OLQUT*">_"QS?MXvšzqG|KZnŭJ( ( nQ<3w  w`M=Es]_[_gQ= o9-<#cJ7Uῃ=%@ JУDAumޥ=&*X΃ό{E{,ݾ"ea_,Pܼ8ݸ] ݼH}~!r漈9*ӳ OP>> G}xU2{ܮB-q +;&WR98PS!iqˇ"P` (Npq? S"3ov~[ع];IgvNϾS;(A'0?6" EcS&vxRء[2N"3!6B=cv-;m bAiz <Ϡ f# +6N}WƃWzu]:L , cãˇ K\" ]<8{08| o=/sj/{sj7nն8 yw cBC yω >`; Zm䞛5 F 0\sSId}[{vo57G}_M^ٍv9f7`cXTǶe=butDƩam2tLt1ôƭ(ۖX:95L t&:pM,l}Kz`hϊYF8pB8_]=G/n%xx 5}>B-%=VFu#Zp]^67[Ųh[ՅNFyYt*-M +BP3(!Wq<\ciTIkWb#HCT W_l%lbf+jp*t&Wd7G6ZjfI gh^F__UEg2LQ-/ij:H[]ZESURbFq QULXpE8U%HJ)FDn2"aBE&/q3ju +Zȍa2Fò:BA\CZU\GSe:KTeBi2U %+R<ʃ*[T@JHT|&=IH**`AnWwmXQEb-]ׂQ$ w&Y y>=߹3etQn 1Y.Dj+Jo 0fFk1a!&JgLaԚM@R([AG]3Fj5Z +uF!T 'eP[ Fg<@%DETR rM*wLȤ$)I,H$b(1QIjj&.H]$@=NG)> ZBT_^)? P0iRHN!cdN><506  wtLh'BȜ|f/= zBȜ= z@'Jw?ˢU"R*be.jQyCbaY!fAi$W6M^6eaV2IVro9*(;-357 k*!?%IC-"Hf3++[⑕Z<{y2fVF +&6}q73%% +(6- 335cҤ) ,dI^0d8ϛ'$*i\cjZSE|ԢB<*ra|*bA&9!fc,Y.Xfg@q} A>+&gv f1m!d%evDl1DGD19&NsiEP[d7i}@hNƑjjH{ Obvt0N8n 88:2:`n ل¬VwX vXBtV3L0 3 0jMF&` z-Ƞӣﮙb :@x*u2(-Y3E`@JP*TJ\Pd +9J&k&CIdR$J$BDXB($ZxS5US5U^b. ]@~8B1:<8bS*G_FL> }_A>>3~7AWүcͤz"HNÀWb!o}澒ꭟXgzsO+ WwLJd"mw-0[}/C/ xq P/W+?_\v|g|L0F. +={vGސ? +V6g<`e9@|gztO +V6I@uNv/ۭ8n@cq0רUqDQt`wQp ssbδm~N +( ^n=>={tnMl 8PpY#k @v#%~>UZan^FAv.^Ԃ$% N)˃S ^^̴<('5/=JINKIJȎ̌ 2c3r38e$dfA:2q2pIYlΥu6񙩩 iƥ )Ħ&&'R$yHIJHE'⏜IggG%DIJ":2&: }!Lԑ(g.aQ6^EBh!a#!BpA!`Z`pP  +,z^yz:&g A = و&E(5ÐH|u?O!+_*I㋘gG#Dg_y|ᱟ滏<|q?8}Q(> +~j0A3|_#O_?1.x}~7i7<=矯_57WWSx9U;'!h `x{ûs,`Mu5'o\_1vU+۞^ޢ167Nw/;v6:p`w_mwen-yE Ƽ06c\+3 i@؞b&2fca12|ƭakÀ:DZf0;A`~jƞ`6kXf,6f,Gvdʄ0.Fp EOבX0!jlh7-{[mpͪkWnؐ]zoǡ`A}`]{n5ĊS&Ly{ +kS\&(o,̵e NquH_Y;viD=gQlϛY5g؜ A1mwI/Md)#N>I3Cg7AڄB(_Gt2@!led NzK!Ā##'xah~6w D63ŽY̦q'Z'i =4uBh5#&Z7?ldOFEb5lĉ0NZn6&dYMfg1`&Ag04X6A=Aєz-Nh4jBRP*E C(؎w$ +'ȂJdRX*D1N ߉p&PS  1Ld"cO@#%}'{;`'gkoA2̀Ӈ~g/v4đz׫Wo"EǑD#u8j\@ A,|ګ0+%}H^ܑ^GCwpz~[maT=%ԟ7p@ :@oן$r|F<O/ҥ " \;sHޏ." UpL=DO@pݓnA GanWGoˇp@x~} Ygi.黝@D6 Xo7H8p:@aA׀ՐU Wv.'X(Чg)aN۾bHض.$mY QMݐ P ذZ֢nM'cvrUm`}ƭπJ3i*v_Chؾh/߶iFZ͋EVݯPe cj&i3cf<\E ~\ afſUn!aگeHnFmꮦ4qK! pynɊNB\#ipEK-i#-OC+\j–9E¯g8M7Kaא 3t YAGc=.9YZ\~YzFuUy31Uj yܹu\&5Vjh崜9լgW1ffUq+/$eWLeUSe֖dΠTdԔgԔҫK %iUŌPUN+ĥVʋSUᦤ($RJ$yzA>)%|ʔAI +EC8y s'N&~JNOAv6d陜EĹ23p qOJOgIK 3;5 /JI xGI3p 4ӓXz KJBB-5)>Y=^uf?SE:<ۜpBvA R3Vhw6okaSӦq[>OFEb5lĉ0NZn6&dYMfg1`&Ag04X6A=Aєz-Nh4jBRP*E C(؎w$ +'ȂJdRX*D1N ߉p&PS  1Ld"cB!EHVvћdmQIicQ8ɿ&(H C0X>\~cģW?>EH+?#țGqe4B /_dxwWɋ;;;8=-0D?o7x~K ]__kUY=2^\]<Y|DR]>}~zcd6HxtD٩&,қt; PTztѵwuʶgwggvgo& ޼3?x9{}>^ {<_۞gž=Y1A@y=\2x0_7w=>wYD}(fnNٍ)D> k[\AGY: =my4h~ >a3zev.lCf]`D&;D; Qۀr1ڊxb> 5e6Ќ(8ێD9zգH:ui *˽S :`@άvQ@Pk-"թ=A;*Ui˗TeKZʄtuH-[k%NŢ@4iP2` [kf ! ]. p]ME:O)۞~I2UqJiSt a'񤨔h,*1>'xQ,'6vvL2ecYYc}{1W_F:o\~忯67;dj~lorܩ`~gvߟ׮N[_<>t vqs9KvO}S6 A=uS=vm?=) l>?d/7d{;B]x|}6}}sW`!x{ڥ ضy}!O >{Y*Wl +z^^=:k`gž!x<^ʣ%a=K淂.6,ܾffжܜS&r}(, :l(W@Q$h}@@VlEBsAk!X t6"\ll7]L7A̦ +60ՉxMv@@6\`H `?o,32 &@3l;Z ^=YЩ.5o:`@άvYhM2jh-rZbQژ|yLU4LKW4uV:T, dKe+Fp?Ըj7ƙaaz(aS!+<Od?D^BU;C5#AWKu uT= H>RU jGUvz󵡪zpVTEwg* -΀bmT yUFtxpf1Ãj(mwcJLq[CRZ]4-zLQUT_ 9ǤdN4hzmJƑ@XZ5FV*:#Seg9JP{$S`rL\& ͐Ie)E.H2yȌfQ̌ (#&=8]IbP,BxPLJ +HR -&%-55TR,^zY/kŊI`4HA.eB>F?Ѥ@*͕vW o4q~.뮚ߗygDosGd'I)L?N")J Rg!miT|||ԟIzL?}"d~Jcyqzp#us"]}$]e1weRg-%/^gVW|z)ۄ/.0[ل

8gi,εSzzb9`~yC +CL\drc.g8.9wv7̮Ĝ~%b'9Y99p^ىyu|;6V&#[x,fR87T6faqc92kp{ֲ {VT2,s1MPs >Z-36j$4[& j8Ci083×^84sl#SKCWfNC8G9=pB/ +_}n4L`<*pfS(aOOz:'vQ;)؎p$|\8pd~2p/ +ܟ:=Wa:n܉yq`D–ID8栏C}ƀpލwwk*Ϋm WU@ P>禛f n7? PwZh1|jwnpUuh 8Clg[fP>ԲyӼij11jlh4xMITk=>p?ոj7ƙaaz(aS!+<Od?D^BU;@kFP4jGSUuANo|6TU2ъQ`;5;^L ʺ!OJ;ܨ 5FuxP nL׃)nk_JQkUWR)jv +k!U6wM5* *[}e%.NE 嶺 +B9Z[DYj`.+T&\Y+(Lf"er^VHe(u@DK + + ]q~>Pn'H:*j8 +PX,P^>d!?`jUFKn٬L*ըZ +(b@ Yb@V}XR4Y Ы-`l QRNGm;Ҡfy(.WG"OibkeZRhT4rLM(QJ^VBLQ1rB4C&YP4#e"3E332Pt$t F$IBv+dp!ATrdPQD1쪠^#".1"b@AP599[LUMW5r?vꪞ/EZNOM3IJiZFJVk$jjA)V+@ cءHW!o Gݭޏ9[}xbƯcJ8#w{17QWIs#'+AwpO]fgNJt<-ȥtJLkw-t!;%:NQ-6LoYϨ +ܵ"_ +=wys[DTn^^ j-"|'yKDɠt71Qo8x~p +Yó~e"OoPL\3}< +,> +/Y䊊2~Rπ1lK2z|^EȠ`t4~iv4;$m(@y~ +=hC.4.kU`Fv7H-hP?iKd6s\ +uT (VIT6VҪ@c[a~e'vXPܻTkcQo[x`inAiOkCɉ}fݓJVJ ExV|lq'kߧsWN &Xu&&uh/VǃՊ_Zj ڷBo\Ã05͵}MXVsnZ/ٳ&gR$3wkC$$ւ8BIIbFSu\em-uqhcX$IB$I޶.GҜː +dRTw*IY-k)9-k+*%4Vefy5id]@T_A(7YI(OXRNچ(?R~*J]_-kUeik*$Jm\&Z[P>m+KIIu+Jxk$IW-( + + ++QbUIAfJ<ʊ"\زBY1 %e9|٤إҼ,RtIIDYTqvfTȢ܌ȢʢlJda&)}QAFHYJZF契R.I,IDd$+ JN3?3)1"3$b6?=9 KKG8nX911S$f +N"%DE#)HPܢErc.&tDL$I~QI//wa6]> BC1yD|>CB$Âeyaa!@kip}]}mCNk5Ϻ Lc'G![?g?ėCr q%v9N>^$'oOG/w̝ӍFrtwBwuvsq"9lȵiHqt8;ȰgaY +6"♜lIzk+9V F7 R:i:=6t$N+Rk59*ZZRXjjfLi OψLH)oQ6_F|_x=3~|b#O#˧1f&309˘QWn#|z…38qęNܜc~q|vdzso@ N&@g0?c4 C67kywךM!|wDm t̺m`z5ž;:L9m-ӋA 7^ 򽼥az18gue ?: bg'N/{izh'nvOv9Ǖ]?"54]=2JNKI3R_'4?_<C;َ ZL;8]Ω>@3YOةϯ4 3t0w$(ޱijH Jƀ#Q ` 8vz48vm&9{w$]irIs~yr i]Ϲ0;;sߚE 6,icZթ$qak6ǥ1i +(#nqypz~`~4;x͜p-05@@b4{Mȝp,64fg5xջ24#^}{>^T,=7ݮtjg&βYwcŢY1!sfD4hwL\8 ey5/L9bh6fM86/im}gj[B(jmgDSyibն:30\rIyqaP\V=X3 t愽70A3os[ *ՠd ȰS9>ԫX8ߧ\T!|vP:1PddT!qUl5dWZBZFi<*[تp1i6JGU&rtN1q' .n]1Swz&ǭۭ]hn#]7&Frbuݺp 獝stvсԟ5r4t4 :՟^#:s50w 1uipT'߫8uQaQm~QPViT^RHEOЭ!w66Vڡ(PxˑV\Nق+mWY3Tk329Dhrxխ,mmMF.'EʓdyIv7j [ - a5yMu\rkky'YjJ$DSNC5"w]WGVmY̚2BVu)řU%%,Ÿ8iqB&-VRȖ^Z(pG$%Xpiyqzr#*eClq~SZ$O$ufed$cԜlcqzZ8S%NLɐd$84>*S-qJF2$QiZd.]H$G'JS%4Q4UBKE4.DqT\*#6-)\bɱ\LjR2$FtJ".'E%'$bpщ\yE%"ccY"bb'΢ Q(<"DFDDE=%hx8W ?r|$KАPBphH[PH0.,/?uYol|<;γq`t㪐<) +QZ8/~"6RB~o>Id/ϟ?ףC' n1>qGQO+p~0|0ip >$o6a C}!ͽ ~}A}o_{ջ a.!9_̀~7n xuOu>xu> }>@5Csy|>qW|ܞ!y< xu~ {o wwW6}{{&tzk@&3z}÷;W }=q/A%@U| ^~ Z&s 7cwtڱye85@pm ؜`s1-osetyB5jE Xi0;YlcFY 81weh2Fqpo5 J%ݢuN,sѤY6nX;+&s{I4hw̚vc@sݎq-[k^9bsl̚p3l _pm3 BTk{(/MpR^V'pF7ƓV.8)/3 *z6|ѪW,t愽7=֠حjPG dة>8;(Q1wutssU*S8Ȩb ^JFة64 3;!(Bސ@7$1 %cqMuIqbnvn6ɞ7I3] l\;9}ߙO ȍs Y +& C H) %A و\ez?Bƅ17,$B~ql$I ѡΧ sī '!/7ziiF=4 {R"hv"LfŭEqiWx0HҌܤ舋)TL8I!C1r28`ʠS\ [ +Vňtd>fI#:4; &C6dB#L`b rY &=I8h9ޙiDNK@::`uM}B{?MMKLvW4kL}Y S NWӨ:{(:St)9WӦUdmZAkȤ0^4IZ"AbJBӢRr",v8n.,BHA$$u& lOᎡ(awގ hk[_Gl%|ύicwpb8q.Comoq!1MF^ĭa7זq8Ne]m*Zr˜fv 8PDJ!][Zͩmng*N=h4FŊK`*zRycPjkYuZRi]5kJjae5UUJ*J*h+**QMR’ +nEZX`|rhrrsss`98'lXfvSSFVf&ʖ̌Ld0fKL0‹y1/Ur7o_ܨ݊7#le3/J6*k~{xh2 +7 t+m43wR]GV،7!>}d?&m٬?zd?|qf껏 `6/}g?z)x'޵G;s)_=q_|5s{ 8wʚ}%&*E/l9g1{ּ{v}7^ZsL N]?SwNa[p͓aoXqkǰdG`WHưG.++Q.cVa4vaA:?@Wcs@wv_:8^l^Cwfwz;'99!#غ)1)yyO, <%pD4Ʊ${iyOt=la!(\Sfk=q&蒺5~ #ʑqץ +؇#Gǣťǥ GVeŘ1!B6pRq[e 2pn&8/g +C9O'D% S{XOF v|W")df=@c92" #̇BCq8lie:Ʋ27/OG,&LK^m1qWTnXLa9̼0JPL5A98if29ezEA"HSɠD3$ +Ԁ&f6l܀W7|tё?Kxk0I7$x„azwz`ɰ0DE i'4# >;f[ qH nf 舋)TL8I!C1r28`ʠS\ [ +Vňtd>fI#:4; &C6dB#L`b rY &=I8h9ޙiDNK@::`uM}B{?MMKLvW4kL}Y S NWӨ:{(:St)9WӦUdmZAkȤ0^4IZ"AbJBӢRr",v8n.,BHA$$u& lOᎡ(awގ hkVg+WS}Ȝ@ Id0IdFZ*(ul*jxXyBmU:{O9v-޵>g]D%cHp:Qxe\8r0̱pw\XY=;l1:îBU% +/E*@XEGR/WzfB&hlY 3f2L&Ո22T3 lf^ePJcE4CaСt-ku(eVR4l4!Z5FQjZbR(NQ1r,D&$4*(*2C #%@"f#A$0PH (' Q\>#qx\..%!*\24x>Q|@=-}?YEQ{ZѫG:J>,oGu(tUj!Ww_U ˟My8xlV=. 7XdX&;>cOCyvU.t]Wcayz'yayz)GdsB~! +z +r|xx̬SIrLO ,Nw3Mϝ̨[$ +G-7Ԍ~\̨Pr`..!Q # zpgP~pS'w NN죐?~7BϤvM۝nG8b6](dži8: Ob#[VqPN}l&& +BqMl^ XZE0;>m0zA $; + e5Axg6/M>0{ +lX +3m}u]tšΉP`uEه} нe\:g#C]FU;nZA/ϑ~ۗj w׌ Zʨ9֍=;-5_vZ.Tϗ³os'z.Tg՞A*wcUkmguBڹ֫F{k0WogʷjS5S>U6U|lpYkƞ̒.7]6F&nfKWM5LhfT_&hykY5he[: +@PRao{*CY۞G[@zj@-%hs=Eu¾fh1)œhB-Xш*X5@_jeO[Q!VZGpv, +^<ܮZTNg#FvGʓQWCrQ٭uZZU-5U(OD+0k0MrLc5 7Td4TחJQu%ʒ +DY1#uQi1rLZMB2BI@(SJ(/J.+L^I*b\Y* v HXW^++(/@%c`r'p~Ģ\LBa!/+ad݄,Tl~V&5?33/##7=ݕq椳I !ՑFHEŸSSPLNfcHJ I$[<xCӉ2;(s|L)sҌ6es.RY)$4]#JHsY^NT1v4^\UhLZ +4v @fd1Ljed,f(zʤ7h=h C=ZPhihBP˵jLRRR&JP‰c"29 YRL*#HIbiTQTd$[FJ$(DFH(a" +PO㣸|G\6\KC$"8)Te.sy <(RZI1 ;jFAVzT:6©zsO;^L`^QPV8eXU/oʧ7U/nfҩ $ O׳pqczF, +|6S2/,O/EL 0Yq̚콿]OϰSIv,9"w'QD'E:J wgfwjMrsnnnFg}<~I~wmlu/ϫk ^^v}=a=dЮnA“ om2E%F$"q!HPl\[Ll[\^|t;놋q킋8[ńE!с1H$A 5 +Å#C/"$?<$/>oh0.|Z@g +gm| >=>>,-fbڻ={:OO < nnL.n8W+ řəɉc`>(|g` /w +UC\x7!?wf~}c m~{:p\wW_ۃsrޭ=h~z[Nz{lO᱇-?X|ێ}K}dpyO{`  > _vcA[~nB3> ٶx?/hU`7//g]vt yrM&m ֙Z@ui]"nn-\9& ܮ;spepǶ$[-ɪV%uٲd[r NK Ր@6@BB`mi솔g}#idȞ=swGƄ%cwI1[i]mZ@#93tiZc:f93TйfG 6 D:71 ޽51yI97'( ^>;:D3P3#XM4ʶ1o ' $;m +>m";@/̒h,h X0HfRf}^`azt?C2tJutnm qw4}=]<mۙffh].MRNMp:hm>'錡vÔ̦iG(E͚]Ui\6eEȝDuX (uL,FXk mz=ȪIzآfZ ŤQÚjh14U*E&)i4EU(3a|!P&4T)_)FejpO!E4SVq8Q&Qd-)R"h&@j[&h5Ҋ)"(`-l0aS9%?Є66pk<VҝS4rj^VŭճJN]=VUg}u55,58jAG +QU(ĨȠ|:uee VTVZ ++,-)ɠQX\TVPT+s:+*U9 dTAP^ԋzQ/j*!$^Gww@ZC^qCoJSc.֯8Kl뷇uį__郚PAe3/*W"y3~J=_,?}Vd??-Yܕ^1>)Zd\}$<[ rNs9ibGl۟zku,~||*yMkyxcy꽕"K/Y_>k$kXAO_ǻw5cWH;se.-E}`:Ṕ[IL-x7Φd~& =M">NHěkǁcoMA,׏PHaqHvs&.$,&qd;2xm/ի{PgwgwfWvw A`N!Nl#^ي::`ٌwx$!SfS{̜vhtpFb;(2i?xo#2;I0L=tŲ32i> +#FwD2m-1'87zTc;>zb*84/wXʕ#IZyK(ދ(* ^<]<) _6ޟݟi3X"ߩXޓ/%'w/$+h~a; Kr`=stB$]@ݕ0΄3`yv-1:oۈֳuԳ}$mFі8Eum1gfkS̘ftb) 1Ч(Ω! `g)ع1ntNǵ0&4l@O !"@5;~ ҹy46 ;Da AҾi>= "l8!Xb;6`6u|fIDqB4X4C,Ae?3Yz) |x3łlC/b00 =h x~fa~_6셸h.xNe6Lqt34.&qn&ЉP]86`tPy;aJvR fS#fͮ*[pd.Y"N b:IRf:L&#hI6Gd$V=Blh3ЈZ-bҨaF5Bp*Ƣb4e"*X0FAopTRbJTKʤFe+ESJJ"xr9+)&Y"lPgP$ZĜږSMmTO^.7pQqŽq :p(&tH  BdžMKd2ݓtnŌ!?s|vK4k eD'ydV)S=!:գgS:^wX[42ǩfHHln⵺,rv71y91#pvepnwZՆ<X:eVO0Q:IQk6b4&è6 | :=8atZLVVi5RG7Cq*JRQ +PJFi.-GYRL#3J"rIRH"K8%hfQ\B`||]E4Rq$vIG6)ۇvś)דV%@T1^oR@y, bqNź]C,4!'zu{VHcgg4sꏛXdL8g{~R=%RXijGŜz'iI Q,OnȉoץD_#{r]FAQ;Ws*b$^2*e~z|Ȩ_.YnnrȨG|Q}K z D{ɯу&rK0+./ESDwwrTA:Rr<nN 3@Dz7>n| +xP!NkESp'cz +r\:ѰKǨ3i}G('v`#0&œ?D/^x8@pfGH`fB>à5l|7nbœ0'w"3ԱdG?0GOo%&;&F`0Ǎn})A{g-5>_#­BFVSv ܳ0;VJAA j[}96(ΌlZrfZ5ݣ: +Fl۷x|}-61h6?by|$Դ擻~T 3k:+c;5PG?C5ρ?4@7mgmC2nUw`KoねbaY= G7c7mUwL#BwUB|n~K_~s + j7@0fSϴ V@ IՆAj]gÏ\dUYQW1gU~TN0*#|?}~VteѪQ6ԙπY 1 TC%kFjX۳j:Nh +iCY X(WPԃ)ZgIrT+A+;0ňA*h_*'+[)mjYKQMM%`W+G A@}h'/oô7c|˚j1m\5|(oiCTҺ%j +*QSY\]óZLns]EX GUTNSeyNS5Gmƚ +†r>X P5;ʮ[Tʪ-Ք1jKQE%RLfeQ!YIaFEq`fy!&`/* I+-`J?*CfH.TRI.+ ')ˑJ ,Dy 1IPo>lhG6'/pff#¾ =3;--OVJ;39͕JeسSSlY))4=#cHNf8ÜI O*N򤸜T[BbU)rD'yMqI^:٫UATF>OqhTK/gxan-P! :xnaݐu: x0[atQveciVJoOH`lNZ>lF,&>&Fوј ڨ77cLi1qZFZQk8\Ju|<E|\ EǩT(JG)@A+d%gI29d(L%K%>"X,ᔘSEq 1_5_5gEEIBMᣚ`b'q⯇՟ J~1eWzTI˻ YțfA?Cȫ{Fb!'gW/'aL;I!HU%7"LE eB(~aJ %LWQBB=1B\mi[U&4RB kZt;ZhJ/g@/%#GI pS0 oq檷?//W_/oV/[9ޞ(OA.]u7+˅م̜1N{'G'llc^lR١lJQ`m +!+5ʚcime +%r|;ηiz C꧂2;]W6{}|bg?^f_Կ>ut

Ak~׻6wwa)ܵ2LQoo[KzwrS%74M/u DoC#&@)<~ xuH e@e++@)Cw=vrgRf*~$2Γ@)3 `L<<$2F=8$2@)c;Ev{[@ȸ`B\(֨15, K\ Ӑwa +$d sΎcBqs;5L`e2! 8<D@ j5O6wbF@p=h^gf3+n`2d`H`ø7=C`Ym":WV`78 DCWg:F_dL݀iz\Uyutg8:jA +pjK/6^LoBmQp&`cƱq9=I.Nlj/W]uo%j%䒛o3~{awvbé^݋~ژewg޹0lA42t+Gzs0#M7ҌחH>" Ȱ]>4Oڋ4>ѬͲRΐ[:֬x5NxTK t@ IS͏s^Lg֡2$e0qR*+dbX\,M*jim"Dk_$$􊂚e=AL(d>Q q"fs Xt!N6uNik#tQp +"jliaSTބik 5UT5C*ښ) A- U-M- @]MSu%PRX_X[P]w8>0\WT[TCl2kB Iu5!5y4XmU)5Һڊ-*DmeeHyXeeQMRX]Nr6Ueee専#e,PKa|$Vp_Z̦8"DnqaJaXpa~ u<ġ<Qd20e>&Cl,Pv6,=;MVY̌ tX:%5=-. ʔʔ&)%991ɌI)`Fz6<68-%Sd K{i#凯2$?gAnƏ36 xe$ +Y~PO??ϋ%5Q,}9}G0v~P>JW3K} %Qx~SIa{n}~Γۏx7N{D1} +|cO_ Ƿc68m,[{یݛwo0wc7Pw{cϛ8̯]i>fr)#t1/İ#^XhWHxy,hg%mYխ% z؍خ?#-`g0V6shu8|RD,IB\Z"MqY=1uC,csn"IDt@ja8`gbAzQs#8Kf<8CLG7\(HɫVak9`>j^; $by{%l9ȴ2j>O3m1n.3Mh>noq6x}-qo + 3L#/nɫ8OC{an?,+G:MrO kOzuK (5s~a`R^9祩!Y +ȄzČi/0L)PqJ~bCw)\CAA4}pJď# #$> _R hcN! dXqP3+ Kf +p(qM +0簄{FfYoL,k` [0ma0tQh Qӈ; (^͠MG44UMRƵj D%pJ9Cm 4A1(]zUG?tj`2F:ZW +kWP>J֮amr(6u@æ_L}= bwW;VlUKzlȒ%Wq6.l({NPLHMB6&ɶdw g77흑Fj$#8{s}J3?VV¾h$Bu +"&=ա!HrW˹*P9!rFe(G ゜\PBYq~gw#" B.d.b~ ߃.wh"V@^R]^1\ +s d4K's;2S94kWJ ˦Vcq["Ӫ)1B[4A +|͠; Vd:ٵBl1ƙ6X4rQ[ `DM,QwҠӣ:JrѦcZMyS4*5# +Rbr +%E +rB IRy^I^n.Wd(LED,`D$P"@$wBI@ |.9|OG$'9)Ud%+yf @K"8' ~/ zٿo˥?XH}my^qXΑ(̇C]9gһBӋ?M1;N{$vOq.xHo0 +\>C\:]<xuߢsߏ;7ٽ=` 8p:d]trc95^r0';rd;m C[) sp+a 6-}ӡTӞ zRCOov,]0G8ٹ! +Q`6u||{dϥc/Mv ^c;tx>}qQׅI_=8 лXcW3r>85G؃i?1/>㿣Mh_BK3Ki=Sˑ#mGv1z`P-ͻ7U7ώf*Zg#ٍ\фD{zyEw,iHaN qv3sj­a:̚Ct7 bVO DFU „v7n/I@$}jk:Z于.nrP?b :5@n^m.vj]cbh[[3>KU 6wsbUEuVv:QU:P{ ݴ*Qum鄇:Z1]N\G kBk[}-&TEo[#*Xۊhn`z;ֵ`ʻZ4 &BK}YG@LY{=UҶը(q]BI:TqK׼VEՔ4բ5(CMuzuEkjT1E5pU5b}HFy(OmEwM(U zC!B +sqUrBPp9+JK8B%%P)d4[hG(BYE[\,%>\X /&1]iܐZB>[ag1ANY] 2(N0|4F%ڕR!;DzibUbV洪clJê9Mh3Uo7 aAvbc7cqfs̈́24V#;\Ac6QjSCKeԣ]4(uNR\)+uVDfiԴKIEJm%+YJYx 9Ƈ<*yMo.(U,$%˂Iԣe6Sl<\|K!5ᓺS~|'S_MekB.HE顃@BH PDz + >:(683:{ǹ_K'ZoqU97c-:qV7ׇUۭ`aVc݊5zwo.hZ_y&4ӭ{,o1/yvuk=b.hГ`K=.B<iV [wo bj-/<=177N1>\Sq)'K R.NXF#4 1!H = \ ~@9sjqjB̙`MX3ՎgmMrlMh3ܰ)MP#ĝF@=Wozj 1dǥZ_ +#ګpmJcxJi9fXs\etHUɅzHMdB3VS8^MnfTK) R5rCF>?GqRMՌeA~BTΨM3ӧBI,=n*C]V0IRJ;FHڍm$iUʆ[C*iSD(:&K(j!)"J&Qw!F*skPrlM+%J&垬t3ЉrJn#\N̡D$T2dF%f֖ā~@ʨ)GĥWu:IDbDJWDL#)" 4XN($kh%:YE̚2R!*Z!OQ.D%W*8iBe J&TYdc"PB^J:"X.ǔ1 eRE'ĕ0KqbR*H+#D9¼4k;1&VHKĒˈdX!l.,T+#:?3%Hi q*5:/= IM1,=%PZ2Tadv +&"+%D +Le$2XQ =\RBRY؂b cc,1I1Q1A p &`f EDc##X"P~1>7:,'*N + "EB#Aa~GCh=N r  tlhZ3 dM + sB:,t'z-/7o7ϋ^\\|==]} oagkx|um,<'yikG>ol~ckgr^{忯<6KYtU_59|.ڬ?uUzao ߐvw|X +͎x_f(&{bxb 귻e +;_?|i 61?i ?~ue^; x-0Ϯ-􊹠AO.-K`\&{t. bjF`y0<=1 Iu33Pϵi:WNpqy`.MRYd\z.BNG, C00l240kx\̩ͪ ; 1gzf6mcT;4ɩ6f5$#'F;0, l Fވ?Gqs(}f)}l**ΨM3ӧBI,=n*C]V0IRJ;FHڍm$iUJ+%MG%F>]Y(MoN%$Kڪ*H+9Sە 1BVIn!BqkPrl٩ӯ63 3b_n0 $hhh_@bXlc/xk$&6'qI'n86ݒI$_ꝑf2 vH{y}tK,4{yu=DuM!:w0fgL>9 xOepg9ޫ`̙fi@oKtT ¾`iqܶ>?B@}0˲ taYGT_7J¢T2Dam 5eXf1 FEE?{CoOh>1WB],m .łi~vyQ&H'#b0'َ 0uivN i|;Lu`.5;UiQxlcE(f)\ViaNc&#Lj7.f3Zz`qmO+:bv$D+blo#1h4@;Fk֫Y MS3a0VwݮPi8ZhT+h2aFJJMlVo6i])I)E@DR͑KYVI ֜h2Q%BTQ@kQQy>q}e^T(F1мY$D@Y(Lk +kčFV |뫅 -<*`uXRQ_[R[ g2j*jk囫(bUgT6UWVgDTV J++x/S+.۴OѦRVXZR+()S"DAQa!.V+/sˇp9y|99`#X:$n!lͳy6Omr   G @o_6QeVLJ5˿֭GZvC*X>z_|Zb5ۏ2JW7QlJbb=i+~r>,Y|´C~cM[nSE_P#X%Gmp/K$e>yܺ@rxluA6yAu9X3͏r.6<[Dt=|\2q4A8Q~7 8a6aNLef*;> +Ryۂ4ʐ;-,i6cL0dI%lV^/ =͢itZ@ZԁhZ|$hhpz5Ku*{;&* +>M'TjM֨V&%HJBI["1P/ rLX*חN?Eu7}p 3 ܗ@a=#D0&lbMbvxWe?~o ;6TUX]$BF2miVha;M +$U$`d JTFЄ  +Toy(1!/ɓق^e xbVۃx]n.D9er;(@v.v6Æ1ڭ3l5B[ 3M< ZH04ZqP*VRj5\4<*TT$JRJS=J$\&"I2"DHfE m>c>cB@/$0GZZl=TIǔQl*~q?{N1J̫.)ǜ{]xgwlsVUpd<}¤Spg6](^wfqS bܾf4y}Q"h0+(Ÿu9Jy@Ÿtkg)퇀 8pͮM+˧p_J`Ҿ}w|~R I +|v]M1F݃;5,]潝@NNlάCӎ uG :>$݆;2@az[*fؿm}q7QϨo^~}t0tEw&m_4$b[`30[(Iax+k?Co;2n?m.}3#}Ʀ7CT7mt/j[NIk}wZ{X}D=ӉPLJ ;1Mv``GБwFn<<$Р8nѰkCUŵCцT4o5n3{uCn]v#u9΂u~+^uxnT9fK8vKgf󛜖Z9)]ozSWW6zÚ2Œl긘Vx#b)e%+I:N"><DQpUJSRbPX\1DYQʊwE!:Ǡxyg[TnZCЊĺUQ=+8+P-Z -xg;j [(VLzB* +hJhH+騧բJkP%5 e:٫6,M#Ԥ,.j%W/l*j^YTe kAc^ZaÒŨJ\]mQZ}%v"TAMe*YEBDE\r+ L^U9.I0r*Ye9 Y\V^T:CVE4%3QRF %b."Pʈ-Db2 B!)TR*Hɧ3#EyBr| &g3yP~8; +rp"^ -;۫ώL9YV=&iBHY mvae-pNSB6F$I 14ahr2Omvg|7a +@~LK|eY6{Xn,^e8QNv'r8Pfav eMV=#=3lLF#h0 $At\=JբZ  J(*IR,RDTO)$9I*ɸHdR)A@HL($0ITg4zrǥyuתSͫ{5SnqWw]ـwׁ~ϳ;69BC!0c70Oo[1"C= +- +!O&ͼ~0)LpwF|2Y)xnG7cL8$HoҤHt`]M](ذlXb{ustg޼owѻϙy̛ps&;4<G\)FiS1ޏ(v|vLYdbbj59+vL M{?jO2Gh!$41R}!E524w6l$t{*EoB{ݿ_~׷׀ߡP㜗P&?ǫ^^W5=W?ӫʞiPS)Px|E٣/𝟃=OW5rNYi ~u=%ONui$r͂r0Hz4H|P.dA.@iC:ڦmgA4COݧg/!X;j]J 8Ӳp{h;m#ʹC-|i][! P~GE f9>m8 -3I[d޶ ؃v9Ѿ^%h]vH;m&Y[@V*灍=W_|cmUs/k7uiC]*0u +̽dz7OU{S'!Ӊ=|kUսC1m2UWux,X*nTtXUvښ*;,v6הuYvnCj;j:k5aWۚoo&d z,]\el )Zg(m34֒ Y[IՊ62MEW + +7|ĀDȥblS~u'%ٴ`RHȔ߰DOe/䉤9έ[V ,zV9L\+2d0b4$=b%H)RTwR,Yc*lw4cY& +1* +C"#_S]%2!UJ~JʈTf|g*0\=rBR*JRc9VQdX)DT,XT^^]&)cibRM%ETI6 +Iɕ2H* +HL-.#% +\|RNbi^.)$?[$yYqE$0_M+b`z,vA &?K32Iy$]n%*'K)iLz$<*g!5Ie")dȌ$9鉉H# ',5>><-+KSIqHQXr\ܼX911! ѱu\t(]xEd\.2>,Z䮋wa Qn^n=b搢t>$ITYv~%2Ӊ'b#)<sP + +G!~!<$b$ + &K|I{@ w@s%^A@O +ߗ3G䍹xyKDϋI)CÝ&mI;Օ"EřղN$'Y=GсR;h4rTZ,5T3d)-m}[ַ[? +mj Ǹy*受.yu\2A+o/ix@^آ);~ N񯧾>lwΒ0k_f2@w~w@g}- ׷"PS<;}Ǐ@/MuE?zf x2;]UB@@i^+@/K.CLzLLt~ @/yF3᳴Aƃ3p}@ֽ^ =@%sz$:A8w88w (\=lque4H|P.dA.@iC:ڦmgA4CςwPg f8GީVN. :pum-rv`3kc+t6 +h@о-p$am-lN}?GqdqQ('s&]mN Jڕʠ"J 8lۄ%/pu7]̨{7 ?>T/KAPponnǘӽE)f'sMڄ(pAq+c@4 +tN̶ 0ntL\Z58N͗Z7lmeɱ˸:f&*X6 v<6L0Ƴ; g k,Fj7T$Wcڣ<ƥq GY:)W:!zu֥]h{ CmC-vBʒT6)L9Cz2fS7#Ͱ%CHC e[rK~S=(:;hip7r }|G9M}{&a D&kbl{ ,zqfQCg<.2:: nIլEޥ{2je]F42@&iq7Mf1!2qfBD]&, i\aD KN~#gԠD{ 6Z@ӪjZ5D{4%V+k*N KA6)PU7E3I^T7*tM8&Te2ͮTjԍ2eC=UR'(prN^Z,BufI*PGӊvRQ, +DZL^] /T 50C;y*\IU%T%PWbE\QEENmy9IvMYT.P&U]ZJYURU]I.bdViY%bF+8$*J+-@BPUYWUW +dfeDD$Fb#Kb#b"Jr# +v +rÅsPaXN!Y1`O3PY鑴@7R2c3R3L(+!;= ʀ1YiiN)TT*'.#)$qi)ԝ;91)I$}gtrb*vgb"*&)$xLTBXN+˝,MFdxTd@PXdDIhĎ #<FFhHX(&84$D(($  +Fl + + +  \rWڻzW]cl;ѱ?!_=|GɴİO.GjylmuٻpHޠQց[_^pg];gg(̧GWׄ(̕SI! + @a>:00WXx-M(Er,1OBa瀋 dg;;ML +szxvwjM'<;6;:&0JaVG <[!Ń- nZ ?fa'釽Q^xSvդͽ#=ƭP`F}A.@4 ٖ׭I۞K+ Z_ƒͱl39VzV XeKv"q}ny}d6yxvfG<1 amO<21$?BJw0C{t°SZn !U1$C].:⠓|<1~}|G9M}{&a}ho 4xT߳&j:[q{n]iSћZBڮ敬*U)%JC2jtjTAz 4FG +,g -KǑt9ZqdhahSۦW pZUMwW7Ud[F[%X-wSBq8@衘nz7 @fM#Ӿi{3R C~9ﻚ5?@$ FToH0 nF3?ϧ/7c(wOGݎ;e9ZQTΈd5r$a51 #i c-@X alAB`XB,K4[2QH31|S%vf(zZDX@M;]%d5գk*P!J%U~ܿ&. +̣i# 97Cƒ嬇p\N/Ke\LwDHӸ{xV]|6w*/ YBio??|Q@fQ# +SQO@n +p10>r#'Gas:?fN}ͿgDy( \ySs( +\9r|wj//N3(NfǁO.# ICAy Pw;o(歩<&7ֹ=OK0g jzW.8(̩`6 +st+ P#[@N7mCk؈۷Llj&^{&RN=W(k`^畀W۱a31xxaȠ0[GAN[Fraٸ" +lXx_GP`ˀ!G4`թC[F柝>06x{FNc[0=b N8W]'s<OA ߁?}0Q؏L; ڎ=41ۚS}ݿ"7^gu۔ՓGލ=iSi]u]/\?^;ڱ::o ^ M#|B\VJǺYɵ˘HkZ0$ּ6@Z:Cl^-H9ye;"i奼dL:2?ͨ>LpIogp/۲Cu711=~(@!(Bm8P'_1C>Bei?E@]RyaoЉ-坟bty`''`x:܌f(O2OS_"ooPX;6%v.rv(JEQagGkHF(k2b8G"A[g̱p= +"ZlAB`XB,K4[2QH31|S%vf(zZ2*? R} V>Gb|F3 r~;-z IA>< ._ϧ:BD;~*ɔ@u1{SN2NLy1q~׏B̵#W7 bTWq\r1̅$9`u v3Nw 3˯w bzڀt'Z\;b9AoT\ߌ۷b ͸F7!ػPYZZec-䵻Yo\jW Z rM+U +օ=ׯYtgCUg-m_Q_`uְŪja_{}MT={kN +S}bOx[] X+qwH UUnF+p.^Շv:,ؿݪb6.Tt5ײ \_Ts˪k+6UސY}mZqs YNmu45/Ru]IS-ͫ0ō2QEWbLRP/ذܪ Q[j_fNoY|7,1d`˫_a˭[DʴدfrjZeAeZYd}Wea-+YiTyiE#HFd1,LHe,HA"XU6* #ȵ,η)d1J2F9c2sYʦP2/d|[UJ_RYF(U-.J]T*(F|S))b%/,)R]\JrUQMRea~rea*iAA>|NbE>*s]B\T|Y4cWN(AebXqEBNnV\A%gbDdgdYPL\6̊eeʳp2Lyf3!NƉƤJKCRQL:גB3'3%BHFE1I9IIQ鉉4i DB)"5>&<%..2%>vIX0ऄDNUDBLLxocaEFrLQq11acxsbMFmLt.&:@c築0Ps|դyQ>(gntB1'B +DieP K + gG3""CCaPLDHMHox0*fV#!4('$Ȉ2QrT (}:_ǁ1}(NhZ!44Jo//ZRx(ZErBP)1rBA)(9G*ѽ$2)IJK%D,9lf3t[K$ B$HտÁ㣁OϣJҧG|4Baϐ'ȅ빏'&L0?ꄐ +f$=R +?Tٍ9;(*ۗznP&A)DB} uۻd* v7w;"* onAw~ foDܙ@jxu5o_({sm sg xv x{z`\kzm=>%s\O\ l:>t bN13@л 88JwŵcbwCۀ.oJ1]M@F\fW h( ?;ƕ b@t $P0զP׀Ř+vzb:N4;Mv7[n0# L`|{wy?0nAÎ3zM`{dFH'M<0;4\{nl,yZ}oK-x[|so[87Nc9=s\;ErW(-<}fnǥ9,,4b8b qae??e;7Er\^Īeud`rXeym]OحYl@Oc(x< ,ϳ<?VD0PᣰE{Oo|`lbC`1;(߽}o=7os֓;`O<أ;=Wog{`_Als> Xw׶u{5w.,o_Y"Xn_, 6k˫gWWy~/-ʭ-7 ʷS e}ls}+ (A@kS;$('9gΜ#XVGAP+#eew0֩~ gGPfFxִArx/Xc hɝ{:}Ӟ+}vyoӭ%Oox)7ooR|Ki,y=xkHn?&qeŹuqi˾6 ͳ.ιfr\qOcM&űXLYyό̫+cXHmn<=PoW&4IomOcj1Mzn-q왆#8g3&7|ӯa[c8ťT臎$1!,]#T6::oYEESTw3K먚TӻլBoAmh{~UNe .N+Pc6.5B;$%In4D(ruOfUAJբ䐌jH9d79$eY;5@FȤnI6s;PLF|Qbƒ5H|G$ij403=ݠé%6Uic1*,Zd~٩&4w\eٖeuɒUFUj WٸM7J:j0@HB$$B id7!ݳg3c|v?p{;b_Gi4uQ){cזNJي +V!k^PzqfgQq!\9W-Ev?ߙ%OEMe|`};uR!<~O;xFL;;*1Yɯw~+(${ol,B_Wbw<)P A(9z|Bx G7ŏK7sx=^&~."B!o +Xϟ=[?}ZL3 0?^+Wbwp)1?^#hL'Y8W~Z+A#0 h^sA2o/͇7|trE0'.3 {33v]0'gyvA}y>ssĜ:_ 86#|@ngp|z4tU `%}r}|bGgr wKGA{ ]s`οF`" hg8{Pӻpw,vj'0˛NL;>AcDp::rڑm@<C怈7od@`=WX`ijq;`V.cmrUʶ4>0ۆq#+#0Vظpڰi` n-`ɕMo?353}ptëNY2wozjvzct`z7hzHߩݜzO{I9#TI({>#zo&1݇&pz9Saoٿis_VZݻwm_ۖ2lwlKtovnM +2l$Y훆sdm\@``>Y?h_luy6l}eY,̬eˌ8yRZ뚥 /qj^b"b(q! Fr, :O r91Tp?ahqҸ2+=CSK\DKK-I{XڍY3L.FGգD, "BPPwĠ(TQ} +AAJ +愠T0ALЛAtėP: +~k~'p]LhqіJ .joe mkimRniFu57qX,lBY=;4|i\ҐבF (_[:򴥒ka4&憄\ͩ8ٜL"ަ%>#EQ< 4w:ӱKj֣jD&\DPd$Yؙ8 b jbA=ZqDj.Xl"IG0C45觐P)Lz1A/R~9@l~NU9It64)\dOo=p#gx S<F:c2N;I]*t !sq ns$ɭ|7]v:Bϥd# xO^`<}>e ϩ]@8x9/Pd +27d7TWBɟSmnPkBJ`n bsJsr6NNS%bd7Vs64cϮq*rVN͆)Ϯ-Gfsjp=Ȭ]VdTrJYأWYYR˨(-¥VYt;_SbM//PJy9jY|EH!:2Z8&cia Rbw+@ 8&7I)K<%Yr2@9Sv6nX%&!?3>+'+IuLGb`9>#ѹF$-&;jR2SҐ$ĘlLO03b iiq=CY)AP639HJK Ѧ&&)IaƤY~BɉA8 ')Qf$4 :.>F dqa aQqPthBT B1<.nqQ(NPl$F1DDEGD Q8CkȰ0( CCqa!bB< /`'̀5{|zN/BGiuZ!6 @:_S~1JƩjĨ*J\P•8B.$e21T*TPbH@fjfj$,)+e2呹ڰ!"-;-;8Qfl8DIhڗ#nhHd(Tn8t0d*('FxAcC^@ +ߎ!'~N8~Tث['j~&z5I7% 95T`&U4cgW-&O/Z0KM =O.r|?]\eP=>YG7x-x0\2|@w< 2YoĀS3tNZi @@8vû{ -r/*qmYawqQ;زPBY:ln6dC7cf49s>{i=Dc'l'yt=3[lZ@ps n |r\_rm.ڕo0ٛ丌\Zqqp\烂YhfЛi`Sf[7I2O!rflcd  ku@2;S<~],N|/qsݐh {@0} +4uR &vvC 1vr 7ܺk Z]6l6@ dkz^=fCAZW l@kF`kLڼhԞ]65lM[5m{ +35Gh,MkF$QI9iiL0L<ƺqz}τuk8fzyX^5jFxzCz va#jV3hQyt8B_s|oKlWt(UCJfUHU&9RXg*B +rNg`t-2!=r!J&Tld)'7WqL+?CnfeJ>I 9d:"Cc*2Գ +zJ0 !R贶s4kMu4|5Ǹd ~+&h5GQMzDC)hV_͗?\őUf *3-9;GS"y&GrܼUyH>R@ɩP"UJ߫Q^Sùei+캊2!YC|eڲ2LiRsQS+LJ>T1$UŌb)dUE8IERSʹ$e"yZi,K$*ir.D&RP +()4q/..(%"yY*N%ѢԴ$%ܟ)fe$!~IA~Zjr_JRoJR(M:|0G|0#91؛/)!8/bxȑ.$> Gq%"6<0,><&,.2 +EB⣣$#.*jWETTpl$.QtxxPTxNy _`D%Ya8сP\`XI !AVE 7(Px  ϟǏחLJ<|q^$^6xzxy<==(O7wWw7w9Psqsssvuq!qrqvv3 *c}c9ќѯ3C'&Έ/j/3<^?KϷ^??|]ǿ_Dzꅰ/va#jV3Ryt8\jǠvjLVc'j[E@To! +)zUQQ) 9"A^̣PvonƽJ.d[u-iԬ"70tӛ`z RH$lzd&[d}o<<9s>~瞑~Ҏ1'nb3HFۆE$uDxz-ټ`Č oZ m\s0ĥ>ڝGYrLO&`_w]EhqKxF :=IܺTkCkMwR=Epyq;Vul8NB@5bØfEd7iE}#((:vQ'b "c"g!7L !!AJ]L]~xA?K ༦߇c/NzcĆE~1 a҆nc AM".Dȩ \'Nw46SfH%588[9MJfl+e% jn3&dh*;JijET:De]dEc@lѳzj *e P[ue\d)JYt +%ϠUE^SaEۢ(i+qEVu0U9,?u<j!I6ՔWkUuMP} R) P#@P/+puZJhUԭW^[-f^YMU5bEUZ)EJA++)*D +BP^V+)I'!+HVZ*D*򋋤%QXPT+/, + + NY.'/KɑCU6UYK%+z^Ox3[ܙ,1`7{ASBCѣ +X*i0fDž- Au +ǯ~\'*;~1UoS*Ҡ{eo|OeˑTIjS"wɦ=_.>ڷw++&G7,?1zcϔw2_~6x~;O&x1+=I_L0_m' |{e`g +ҽ[Y/K}"ݽ xQ>< IkTΕ}K;cyCx<09ncS^;Kz :McRzH$Cx \YqcLQ# a ]E! w`: tH1>wKa.;+ d$$dNnGpb$u|[jǶR0f Ȧof`ݘLI?)0`s>#1`}FV#FnwuF{9y!۹w*=8RF)؎1Db3HFۆE$uDxzټCA޴ڸFN#q0DjweM`j0?}|%q(Epv|cˉxG >T&{$n]O[*qZ-Ρ8Ͻgw vKr \h6se'mÚ?&2#- +b닚1kof!yvA +AaAq tD1LHD)1"PX֞pgE .@b`j΀(!_Bg5> xq׃#$6,{!gt6uCgrnq!vODN]8qZ 񵉜4;DZ/88amRZ6+dXq.+AXp-Ps,E0 3DSYVJhT,7AFUZDhXȬe[F67BVUɍF5ԗ#&C-RfU#rE(fBn)dRjl,&l$hLjc3" :=;NÅk5Z +uFQ4ʈpZSa*B$ȕ +R+hrpO'J$4"X,E̋7O(hF3|LjXb+f(j'$* $(՗Q>2_zmcۗH^˷RPzOO#S(ȿՇ#Czi=:=]ӣ Ln͈R;5%3]/xCE5N❋9o$qv%ፀHBp{..Q0^>^Y/IBw$B|l<9}dq;Y׀PFzz5\ rp_? .zx!X0(=t pX:OM)$? N@ЯoD!յ z]$\买t~ uv7`t+Z[!N@8vr'zvն t|+$|LwdBm Ձ3g:}kI{yწ_WU"{%ڵP;!\X%)M`񱆅ϟzuA])L;yzm-;--6vvǶL9RtGoiւϓm5DMM4u76܄ݷgM#go4jc4XZ֤kj|5&ZU V5մlݾ|-Kj'[PZf-˅2&kq!5&m.g&Ս~UjTrzj\B2sX˂St6Q$ ;W,PErU.EX8`8L(?#(-J jU)X*Ј$b1/"@>hF#bѯ* +ҏYU{T5)??w(ٕkE>n_"}||+>=5OL VG̿ ȆF1ؽznG ?y^wݚ7Х Mw8kK@gջÃzCE5N3xI^+x$t﵀ne% +RWG{PC]w}B|?0~n4?n|gסW5@ +|d+TzAJK`eK@£ xx<ρ9 PAq + p$ ;|Eqr$$% 0aV(H"9Ar1S`ޠw{w{G]utSS3<~tUh + Z"/CF&7!"mAĻ>-\vXWg! IHdA.NCޅ)@8BtnApvP7@ gﴁ!;o#aHX-09g\0lƘ&M[` ` D'!j Xi ƏZl=& HngθAA0}}:^->CvBBԩP7@vPP+Zco5C8>=Y3׫=21T V嫣TU+#Qs֫GZf):>=>W- ⴪y4~rvPFè:٧QN2BS= j3D7b&uh*&vuXъU@SAYOC^iw}[/AdseݺsaB]Zk$4% +IqJ^*i#%GO~r 1$qQaB CtPxP +k +t54{yψ3;ױ.USIpB#&**AJrXiA|2wPA09ClٹxY儜 +B +VnME&MrV:g?+{7եtN$ YU.diJ9+[YȪ2Et$,Ռߣw$c9ՌF +6g YH#/])"2|l7#HCWY(I؃+\K)MH.+J0d4$_K..vK%$9)/I*wBi^RD۵GG2r;wKXbNNbAn@.!?/dc8 RBf$+ (ġ,3NAdvbrpȎT$U E(:39&*#)dEg$$ bԸ$$.>%. MIF|RwE"~Ia} oNjb0/%!+amxqB B;q?ѾQ>.Dz;#NV8FDŽDGE!A1aQHt`LD8DMBpaPE¶Pl f>!A8AA8@@+|ށ8f~m~>8Oo +o+<ܽmqIp8ww+\.n]]\i\]P'$$H#rtppD>էTD,t"G?^?vQp$폟"\|ox#매7OS8m fW33W[~>x]Vp٬|Aq;lqGam9قE}Q_>$/pσ]/ޏw^ݱMp{q~z)׶ ,.%ڌ_;^|q=>W- ⴪y4~rvPESuOTN04v4ݬ.VW9ѡQՊeCTMe}zqy>_ѭ"L/@de:qI."h Hq]Z[$B%-j I+kx%mV5 ?~DHJZj9b]\Qa1{GYɽ۸nV/^- 6`ńMϑ %nf3U8Ǘ_}gfmߒߋw|>3G,4H +s ύry/R,E= if}Kpda0, 8v h™y~c9/H0 ^;Ǚ}VE1tL~}1v4s Ar6B'@JHF`i^=d0B&0'kk |DcX&4] ̓ƴO>H}XqY<){TJxKyһ'%oGEgyD +KyhF0T^J< / ~WGJ/sឃ!KS@;-7L # 3ϷgT7^ʊ'Yv-ϔ7I?LiWc$gj>%Mҋ[ęy=g7H/nHz~=9xd{7]M'AL?0-ϮΈw D1](`8?^W~ fԏ`8?L ᒌkyUDb8}C8#"ùkA_p]"~ù'#d@ ù}L99/#: $ 7nt9UR7Fx]7B݇~pSHH灍Ý6p7Q&F}νuY?~ؽ !AXSp;Wo]׺ymb l'u69!{ۺkz 9(vPƳZ ۥWpͫ -+|1Ӆ4[>ȳ"͟ >oـ_6`5/}Kؤ|;>YG,4H +s ύr͉r-zn!f}KmSr!g0, 8`F)c`g̽#N3LshzI=cw3u6B]-zӯC͈g-_G A_>R48m[tD i 5uY i -jw ߢ8i mfM̪-ػ`L_c&u7.clb'ўs;sb<=7A'sqGJJrrEJ w `yF@_%f-I,\dѡB>/!Mq0j_SgRQJFPjyqϡrN⮍؈VfBN hy=kw?mzI2)OGw~ۿOnxogNǓ7y:Gײx{@]S=_xGDB6vEAr>;/M(4B/WBp$K" D$;(^@v<&o owW?]Խoq~C~9@H@:?nkgss;g'{ԭLwgΐ|LwL0}B]=Ýԕ˧'\@v48p +w$Iu?8cop0< |}t E}uPb?(곽>$#ln ǻ(]4;)jxvک 'O8!dcdGU@\l=-8xn6s%ۿ ~3"h=p>n{lԤwmlM :)H}J=3jj(#֝^jk=={[ԎC;ۇ1Khw8Kɝ=@wNڏuB vl;Dۑ9ɕrh+3m%ZlԲ 8@_ky&ZӾx>DD˾Vp%:v|>nIKM[{j6wA[c@eSm=a+<4lcuVK0bƾNLæwj82ڢwzb6&8-;i 7-ذ+j^VU1潿 }oEʼ5+ ԯyz*|?\Nu=R+c-X&Uj+QɨYݎjc+SS U{ sreKYŊfN˛Zʗ5c*5b*j(%W-nTڱ(RRھ0Y1m DZ[MJynOqNjpd~FpQPS5 c! Dh.@0 Ps}-P]R-|C]RmRMR, +,5@mRTss%ay>9}5[^gEG܂fy7}Om{67Y +` ~BVAwJ~ 9-`^n'=%uܝƈN5HNOљItV +&*31-:##1JđH@KgJgDHhbd`8I"ّKFgDY\x4.4Q*a߻'Hbs''ĉ1;%hY8V' I%^]A^񱁞$\w>h?[\Ql(m$1ޮ1lb/'មaBġlhv.sR+-5>[Ͻeo?r?-nְWwWX>,X^gEG;_ZY=-] ,2l6dmr?2 (n|nDBk^]˫΋6+yvy3 {rq Цz|[Y.xpzדݛ1ww7?ennd~7w{ wkwsߍQʈ̵! :pea.K. krgmvlGgf:M[fmd8X3 & iz3@6TO ֙ Ԛ3%AjuIY%$´VºhQT!QkP өDrĨ-5|CV]jX%)M剙抒nmG<<ծ)(gz0%m qhKS<ɥ)';hKMk)6^cmlT)k(GspfS 5*$EMF"E +3SSSU_Uh=ԻLW_J)+W+ztgkK [N(+ N}qeqCI`$FuiH 6!e];q%N/NudwSlI}ه<#d٬|> _ +@wύB1"BGQ?-Y$4)~p9Hwj9 tێ! m [8>D޲e0y@B`Z'5Mn=Vp?9Msgjy1< c7p܆σbG n.piÙCw:BZkg(>Bh6CyDZ.Tq$d jY fl,z 5z5r3Y+*Zj9$[*98s2)86cePQ /gH,:EIue8ȠU eB:9_GqȫWKu\1ڒ>* #;*RZQVUPMZU5P- +yUSSk^#[TkU|JTY^d| +"2DBLƑdbT !-b$!),H +$8EE/PAyErr9y\FvnN.7ll,,Ae +*cqB +x^y=VDBn\"q +dp/\ʢ_nvuS~:?םv75Q"~STv|E"囲ϯi_I/eN߾(YQ?.IGVpE=UtݿDtdo=9fA_n]ƺ=3.qiV:tIT@ +5!Q. y8X]3Ϣ;#$yz8o'o"Qx툸W_#+ @ˇ<èˇ.~Iۋ: =@֩Y8=bnN؍1:>Gc^b'XDEK߆:U-7 } %{ Ğ57&n67=75B$@v Dߨlglݗ{\s@lŃK ^[}q>w8AFlzAg'wf=g!zO~j/V=(_ܘPhYQı(ѮSqGvv8\b&Fhda:Hx~С= 򲽡knj왤slC33QDh(c:g8Ԧ88p9Hwj9 tێ! mÈ֭CX-[͛Z'DL jX4g&غŢk1TCtͲFW{H_2 "!`77Xn13Ѕ ]oYr½&Xݵ:밻GO({wM iI* +7|P#Y8֎ 3edX$cAzb~c̻ Y!D1ni x!Pj`5xnn >)Y~anF|^ 3=!} 8\|zp&NvOP{QV Ui$ YHa!!3dd1Ue7S:P5Fh+XBf#UrZN-8s2)86cePQ /gH,:EIue8ȠU eB:9_GqȫWKu\1ڒ>* #;*RZQVUPMة﷦?d/@ gTTRU[P8Pe"hjp{&លD<}s-a$TlF P`6kCLL&f^$`Ac6Ԧ D4I:HgRHtnhz-FӸk4QaTJLP(ܐKrM" dI"JR Fh'qC,1Bȅ@$P gF'` l|6.#\+\V8lg>Ϝd86ԟqK1aҏOMgqZ>LLqx/DSޯޏfWkGR fχ9;Fnٍ~Wؠ͵^@vѕWqzp#ݞ]<b0 N9wxt Nǝdgms7ZߊkIۋanbm@,]8̑z{pC55,!;aw?µYN\Ͼ5eo54U+=k՗{VWqjmv3-6Jު*۫W tT ؾ~PlS2fVTr{JT>RU4U\Ʉ:}.KHpTTVw6V:@T|s򢃵6jʋl+ؽ;j*vWZ_в0yGn~CbJAcuvaW9$YX ;dWT`cVUXݠ *m +j+s6PBBR1jLMD1/¥3τǍSabޏ>J4n6}oz!`&|S޾S}߽' oܑ׷~A+Qg~Mlzu7?_ +؁i5.^\Wte @I?g#A0pnƇӓNc3s`A΂Ys᜺w +@p$p >lFnٍ~Wؠӵ^8W+=.w.FQb0 N9wxكNgTpd70Nh`Q3V26Ȏ 0@6}zuH==u;_m\igbM/jYt$Tc:j`$L35mJHq8SRvv'gw#yplŃ-{p,Fq qSI~ '``3\8 ɴ 0ĂtmlaNc4I6Džc#V 9=SEiseZv:眖 pgi_Y6h NO6CjC$.Q?FԠN?ꎢuuPIeq!v{ul*>~+izadKɇ6)]Ɛ.ZyQt =DyT'M_YuInmUs-MR*sL >Rc}H$:1V&@]%Cܬ4lBQ)T6E"lPW@P +`W>7A=QSSސB@ +z T֓ +%"#.Ad t*%FE+*rZ 'ʎ( j2"9JUH*E!e+QJiE>J+_!3 +r(_.Q!, Ųr DV&ʁbiiP\#d@H*IŇӁ (7HMeJO*E*NATLg%#*ˤ$Vf 2+J%d@ʊJ% b R E| +'EJDU}8 7, +2 +Cm9>yyl9L栤NaK=͕u%9;3 ձdK@"=93 1=J9ʜ$%9-!9)!)$DPb$$:x8H bcb!ѱ1b1>єh"""##"P"#8Ι ar^ه @$8%aaXb?OxcN_ˍ݋yo}<ᴇ7mo̓a߽w1mcb^}goyY~ {&zso՝1/_Cb |*w{>&'nsᐏ05*@޿8Kҍx0wc;q+خunۛ8k^]D\xmo[ : .ObH&8zsqi1y/N[`e/Y(Y +X?i7L ύ8a͸z%aZ1̟2gO7Oirk#e0vM؏;40;Dw5I6'e{($c:oEj!GiԙT?tD/]p~8?a˯I;~VdԺ;iMꠒWRzN +EjV,[\U]$|H ub>R}M JY h &"dj z5!S| dPΔ +PPHXaQ*Щ )T۳QRQk ٩&4KZ[.Y͖-٦ظRCwBRH '$@r#\./Oٕ̬vW|>|gά(TQsZ!U +j(i)6fIS꒔$KUIмuyL<殭fxj*!o:syqQ|I(/H(^ܐ#cfȒ[![:FR2.%uY(I1ǣ2$#NS"0r lAO,`~p -Z.AYY1*_iF>䡨1n\B/Cyu)0ڽ +H?cs v"Ŀ}>{E|LwKxv_\ڝ9ܝ"؉I &> rۭ3nf#07NI\?8](vuwe8g GQȥ#ӇxpeyC=Hwڅs~~(]@ЙScϝYAN㣀ӱmߊa6y1&܁7ks^5ܞ v2\^̐$xm~ap[{`^mZb5vi5@^/pj`37y`53^{{N}r4Gu5uOG 5}|@ױ:n: +9h_[8uʥe2k?8qpKok;o^۹oӒ=64߱ythn`v\u j \H_CpocFH?}֑ނ~KCmp?mKxd[߼S˦7VШ5jr5Wsj~m%+cg9WWj_NڜeYCP9lf(.ճوYK-4-ʡeQpO=fB:> kzhݓVr+2B+:1;jQ0WVtd̲Pvi;nI6LfIkE.jKY)3?YÒnIR]ͼ󸲸DoS-$6;pdQF&kP0 B!DӜ Bpl^6E%2.Z)S³3!JhN} R.fl +!8 f0#2',A(ա`VBe +<l0jM=hR5@giKWTU$YLdq6wmu5SW yӱ;΋ӨKBP̟ Uh0 @P%0cJ"ϚSQ&#2ţ'#NS"0r lAO,`~p -Z.AYY1*_iF>䡨1n\B/Cyu)0ڽ +H<З">\paPp2377 +^ +?{2]%7rA; w\v'掻mo)=n:ssd 7wҫAHy=Td?M^^gg~n5~,ϯs{<6z$S%~ne"2F.|[ϳ=:ϱ Ќ OGʃ3xi~nvr 2 ;1q\!H ,n A1@vG5WE@ʕÀrRt ]N|'9w؜=^MvSǪ>hsr/ 3qh6&f4of}-ǚ-^<ˡhAo#= ng;:û8T'kvLg [frtOJNd(R3mֶ>{6Kk݄l4#5o6IH4T ܢna&a"5eh(;׍c- l_@IljmNtl,kZ9VUԿTlV4fIEG[TT#E=ͤ +Rq7 ɼTYtpC X)~B +; Nֲ]:d5RQS׬Eʊk +XeSIncuNNC \ڸ!{YKIyUU-UAXoeHVlR^M9fb–\o&g:TnZi2$پui5m^-'"eUH 2 6d6Ï6Y dέZi30rE܊ ҼLRvy ir)4dZW"!1MkIY )hfDURc|c4kfiЧ8HXibme^bW,!L\}ZI^%Ź)T(''p'`X2IpB-Ӓty)KqisjHlmrICHhg%,L %-̠H Q͢$.L`IK#ēxbbIq9qH|l!IDM|Qoe@ҬHE)#an:)@;(z̔f$rg i>6=ELǑm0uE19YYޘ ",2/DHTz +@fQT*0+*02.jY0P1R|CCf$$ )A qV،?ᙜQ|H^>2|H>bb3fHQ򒚑<<=IJOCIqS&pr\\݄gbJR9(R +q~$Έz= d} V?d|xG/E;}.i~^ +i^9 +x{WNݜqu')osv~p8Yt6(! x5xƿ /^f/~02G5tW/AIyMÀD,]w9nFf~br 'NW1m-:o ۶N{6Fk:˻f@w~$*ꊻp\YԾ f\)ˠ_Zj@qlw~~vnvv6,ƌ Ŷ1vfj8֧m&<&uqd]5. #,D\e2 1fvi&eI3rib'; ;cj>~4֏xbw,g G{1,HaCz +8p5Fݭqu`.= dzsnjC`fw }v4c{4>n~;r|4 pW +9 +T]6mcQ*8.RiQhR*Y$ E&l "ֳI`2KBR\#&(T$MQ8FVݠC`2MT݀\u*JUV j4P*MJTTUO2! ~mZ9D2ʤ" +AfQ*J=WAʴPRVJY|YZ*KU2D HJR .UHe\.+DRayX 8 <0G$.̦T s\e+Y48 +|~E**3d¼ti46 72R]VfTUdg& ʳeYIlDZyI-C|Yq:(JIaj@ +%CL~Q^znI^anqA))(KBߖg +ht8ˇecKݏ`sr`8rٙAR2h~}iԴ0RaI)l)l)$KNe$XBR"-CB|b$.GQbyq< eqXXؘVE**H6"^ԋzQ{X1ۘ6Hc|O<,J~/w(o ~u?=ʏ/3~&7a3ϯw|\A&FN=}/ 0b#S|S1x;O>I|ёxqBH?=䣸HDc??}?*{$D8N=oݻ{뷿y{g%!~;~C"&"͝ocތxkw_7xmo}Sx 鳗0HO_"|>F">I >|p#-n0q:F2޻JyJhqw2s@ܾHyyxBI!vvw^x $S9nXۥ$J +ܮ/+$sD!D_gsB2.A6.f vF"N93 LA ;}B2N'wQXly kiZ<$bMʼ+`0; 625@#01O2bZpu\m8nmvyW==7<}δ6Gwئbiu=6LmEXԀn)A:ˬTwZ:ZfEh7B5Ia2[îHlRDRXba&(T$MQ8FA`MT݀\u*JU" j4JRIQde@9ϿBD O1*T5`z"ga2&d~RJF&:}k> ,d,'H@\ApmݕV/U}Vۺjw}z;'ɉ3''!><$y{IQ2(pOq&< +zB>%P/5.6oQ~B-JϤ3~ N1',* +&PQɆ2(^~.+7(ϮIӫbqJ(~/+)( +"C"k4\} ̕s=ߝiDҷg \ii;E`9 0_.g8F`ο 0_%|q0)K0; 磃(|xd`?bP)n0:=I {ڑr 8c6< +0G_-/ބS9=66BV׃$tʹm +ٻ`-lvނC & +ڱ +zL_e{7V4l]} +ա63lZe6,E0 Z|{=gtwp]= :3op : }z7S$r<31:18u:Hn?YG(ݨ#ۋyxYlcqhzn醖ظb mH@;k{ʹކ־ƶDs{Ϥ&m/mM4oI4ܝѺ%K#esĦmJT#֍+2Z6,Ϙ~ 8jnJcM3-mv ikS (x/bޟ֢ϡ1fꅘɫޤl{($6gAdDsb~lR4jk^{Zʹy5iZ>ոln>Yta;1UlѬbK:3g:25,ֿΪцTv܂(oEa&輖ptn[m!9³[j# 5vNS3k +uL- +>) +MfE6[&%ZO N + LUOmHBi>oJ=qoJ: h^6(C6F'G(.hnw,ꦹ"P-Cs޴xM5Ip +PI0 ާEhP RY +u$rDSQ2X WMxB( n% x K;UM۴>&~LZ9#7jhsRϢ>k| +Ul*)s xt߭ͨheUnM9K-S#arWQbˡr:JLM!aQ +d3*Uo7 aAvY +bI1Y,e&zب*FhB#Ҥ7Quz2t(^FF`ZuFES(j^FP +9J"1ɘIJr6rC J$c)DB# 0M@ zt|c1qx\.2.eHYv\P&2LdK))>]p)) tGF鿇E/Z~`^C2`_H=SՎ`WV3F_o)o7#_o/e#}IZg$Uq8xrE׳)Oe>:0{#@$A%16F5L4 +pฃ{wDž$%G9*3G# Q?x==Z1l>-}Xra8n6\įw[u]|kszws-@ye-X}1onuy={ucsrm}^\]/y~lg7KE]=>GY#Ygν@tW 1wn +bnO̭ nZ021g(4q}]0]> . € }vkPlmf-v;q.ݧ: fhD +Čx+n7 +# M+Ow}1CM =FtYbN0uԒu Ӆ2jhUG jDQAЦ +ZXN[xTQ&H/D#3e\o|O8;X]VU+f1N5Ck{=Dn9E]bD1iV8eJUxF1vQ E$iIp[EV"Pj(ueMJI_}LsB*!ɓvEvPѓHDS)ƴ1X֬Kf"&،HɰCu 7OYQARsqEE1yJsGKV#HTaP:QY9G +rˊبZrLw2C̜rLau)2K32K$Ve/ J/O`IWK$h%)pI Ʒ/Ŗ”*HvZ/a$xF){IHIޓkowSQҮlԅ]$Iؑ`h@YSE!q +10fq$ܜ ."-6&;m]Gp~A<$"I@~3%YT Ewe&b2)n:bRdAARJ%E Adn@/#a)I"NjR? a䐀Ѐt^?%n'H %'yHrhqOxG< pgfč3r5%&=ْo'm^G3B#C|C""H$-@aB "،#B=o[HxH(_XpohP0OH`)c  d p xsMxQ<}gfe›ۋ͋ӓÃ1y3apuqs8prq6r1p8:;9ό̉ɑ͑ށU3-foշrԳz;;pAIe| +s0rG\~fކQ\7ŸoB7&z\W_^ry"`K?Z9|{>T]V^!eO/1OCƜ".Rw\ +M()p1rz|AdɓHF{D2W;( %b;r ;K XgEH~b x_,u@t' .`D8 ƅ?8-vź=wE4- zJ;u$AaO% 0̅ +s(\8*翦Dzp0ϗ/CTAg@hAYT/ +| (̩|:A'wG +;s|IamRdRHtx eSl}@mn@z=<0{)wdk{A?c vJTj i*a;VB(v8Cm[AIں[(̖0NTn%nR\oWҰ[kbf3Ƕt>ѿP7Vt=j?gs`x?k@NA_#=Pm0wVTKؿ4F7qi;k()zv߆=ͻklFAo4yk/Th멁ʛ Ѹ9jhֺ1Tݲո!F0,jA5gU2q]wTڮ5K- +P3yڅ5 Ս? 6Z"~bWA1uQ3V-䫂"WL[9/H2}cڊOXS2j$TՄFME̩vu0gP]105K:1Ջg Q\Ԏ ,lY9삪,\8jQv9˨XUIkYUPʹ9-MRNFT,lvSYJ:JJ;JIyQ3gQ|>_4"Tq34X[7TꃅNQ] _Ja} UPW#F%*7"`z? 7[[W˭.% dJsQYU%y\D#'X(3VfVFEqQ˄2tFz?''|i"F sw6ByP~fߏ(P>?˚RTdg 'ӎΰҭ(-'3шPg1)&IZQJM20"ٙJvzR #͓ӒP2Iz^-ŃpnX\.FY<.>ۙ(r8f(KÁ2;B"l& c[cl5H-3:ØMfd4I0tFOkHHIf(^CitZ*L+Bj0*:R#T J➑%W*|B."ӴW4dE1Y5Y5q% S9 ЀABf;w#nݿztqhq׫]C#Qe#dc]Dp;."#"Tcwjw޲!M1P;>7^]sR^]7㚉1/g9!c;D6فz~%g\щz>%xbF5Ĝ=3yd<tf="gaG!9dXN?ְ GgG/gz٩&50 %C {At(Q*vEe˽w{?gf2afd}|7=%%JjvRIL)I77nK͏RFl6mkKXsG-ʗ .0%#+@!f!YH }W\)3Ž'[Jtn 1ӷQM{uK:;{9 +ESir97dYo6iEMC :v[@=ϛEr"WUQf I0}bR%r4񌐔8|hBh( NЌOIpY)M2CG#5]CH&YNֆ"5HXX6 OFDFB#B|B޴HGJ KUk"՞AL{Exh՞hUy$|M|9 *1t8+I"$&ۙ/:ILT'Qa $\ xBBp +FʱaBtp;"d@/OWo D<~HOc}qWUB\}||T8W_o>gO/!C;mGwW+ŕ..8R;9:8)9(B3BioWlX +v +;"ֶ6[#چͬq2k9dBd%-/'~oX@`p@qh;ifTk?rO/k{Z_ToY//},e+蕗Y\Qz6sognjϧ.+O-!Z;OS~.@&Ri}\& W0xx98Ř3c|>˩ ˨);`هq;a%0Ǖ܄TR3S̤zޛlO#֖2P̏[mDTp憩2 en2~!_+ @Tf)(=A.!Y +w9Lث[Ct 72f3 xv,:4!}5L< +DHeFW D,&/ dp `lQ AE@x+Q$g=A7{HIw/. q4p{h:qpn ]kFV"֕..TaK-i &.6(zi ujiKlx<. wRPT8u-pr 8yYLJSОraue S[޼bRuWY +¾5!,!IHH $$KV!@B .- եֶg{f~h^URJ%l.x{zRPՑT{BJo]xf]ͫmqWIwDf9,.yag쎏Ǹ8l:9 f67.F0=օ>`{05L+m[T50FӘe4G58bq؁pt ^NwG0 ІnPκ.Cv@jvjtnK}ZVҠT^\3C;EUҵdk#zg+F!w v' N64hO+Fv<$IkѮഝ`vf./uT3TFâkfj7aa{m2i[[P570ReSԒ| mEF 2 dL'3V1) FXT` RYHi$Z-#i@0I?q$¿*M1R]L?c "hUE(@) +eۑQ +@\ui dt{yy*9FD˼T\+L"* E\@d* +9eEArv,': 7K0nF:.$Ɣ驩Ĵ&)$'&Sħ$K|ؤD.1EbB",&!>a;ibcD0ehXdt+*ȈH +Nd!‡ saatatP&!lv(ش +/]B^z]/B‘PFp +e{8ӟJ8GG~F j7݌mם +]o"N۲nR>e'8_&FpI&`vW/q~mĒ4<CzmvzԶfaړey]G\s؏ `=^K={ۈa߻ɾ~x# pO8>kQWc;Z"[O|-p ^k;ډWٯOWBvAo__?C^>}~?;ۗuy.Hc'i bsAcٹcX٣|~ QԧG*OLJ3Y8}~ PU:y {v ;8*'w +;1p;60ȶoa-8480pp3u`1^*Qk0A{^c_nz/^621!;m[Ό~ l]ٖ>jUMq%6zH`ڞS#zm'GN^3:X0.^]vRFΣ;)]G>5]oP6^n-q`Ks?[}PC}m*JZͫiԝU{^Zڱk}WȺÃ9)mi 0Ҿe yC}to:WS4 J_9-98i5ڸ +q5^X goa9j}/+W|y˹rUd K9>mK9>^x^PŌieak8Wس4^HkͭZ@kba5fW,llzte{s˅eu6ikZίq|FR/g5omKք=TiKЩչq9Y% @g2pTۤ~[ dȕIk$ƣ! -k2JZ,L@0jv1#uQvc*B$6=W"dՕZhX/qm8` MG}fWk)Y~R!y [/BtRZK! $\VMqZHj'EFx<{iv;`eg LN3:ln+_3,0-f7К,S1 gSuJtZKh(4j5_SU*BDe(JBe,y&Ie eRX*p^}5q7BTR({VTe-kuwWAd)b[ i$ ]EtL +s'!!s9Osg~Kx\.ø`pl@XR/H 1b!^GgA4jF+>>5ęk>)3#EY|WL-ϥ8 3E55|/Ay7(BL2"{9Y|L lz` >;4ݭ>^>6g2aw 7&{q8zk@-'ܹ`fΡ39N`>~u呻AV52ާ2z9{d|Uw mV/~vMWAV7[ ]w5Aw0zIKYm"6h +6VԃιBs6;gg Өz`u$Q]' 2_iFR:1k'*$=:\=b}-.;_\5!vgBD3j:pN'(8C95~i?cUtQ?sY]\WI{)GՔw.ԏ;\WYSrCUqOUnꨯٰ҉J$|O*w'*Jۏ3*ik58XE)b]-(|(^1*:Wkr!tUYkk>겢 +\%Β۟WXoE~]Uٲ{;gSX[[pQ~M2YWfr{r̲)}ΚCeTf]Tk$XqU.ma;b;r؁XvV딕eAػ5,g>\ayI+*7W|cEl&,)&3{z'hsCfaRj&s{1oҙdnCel-JRi8-}KͅTo + +R6;%uú乤_(tMrʬ$-NfO 뵱!eD$zHP*1+ Vr|d@O%B VL#{FD8Tl*:&Lʨ E\NVI18%ǩ*%hHjL-IR1P W|bVQr07T#CeB)^' =|<; R +TkpZN @\"X5Qi BT5IJ%ժTOgR(vTO)g"C櫐!r Bj&!xK$CQ|ž}4>t^>L"ӎK$R ^O//ɷ4x|<<:rpƥcHg/R|pL<0@A1| `H1HFQ-ۨr1[Jjf5FTIzẗbQ}|)w/d s;x8Fb3E55|/Ay7(19 t؄?Q6=@t#Ʀ{TɄb8d ~6TDzk!M읁M S8֛>ނ FtG/~qk_7^?  x̺_]0y W݁6^ngw-6n + qנ.`UT:0.FO: { Й[xԆz؊zpYo.@{9@A|gr,`t Dܲ7OCz`u]']WN@4BFR:1k'*"zڎRkuξZ?;uD* KXa $= *[V6A!$Af,nMwv*jon==δO^%WT@t9{{lNs[B-r[ vߒx3pt/Qԉ#&{P&19؍ڙ\kPCA?;ra{IimV᤽imܶdy}2K92~mf97ʼ:LnόdYAδ20/~zqŰ8b3/:YFHfO { ֺSC]@a~`59 smuƉ#:ኺQGeY!@s9Q Q; Bii3Q=EsdUtښT;Q׆>֡u#T{wͧGnɞ,JeOA8- I +[3̍˻8鬍~] P/zH]CͤCe ΠH!5MQFsn5T-zE_ +[M#YP5J붤ȟVEbT!S +QhWƽJ oPhIɔWWge~mRYSK~G.U^ EF=egJM%Bʹiwy bGQnBS'C]*]UHz ,4..H/QzKP4(0'#8O^(Sd禧fSw$e&EKEhA,BĘ(9'I#1(FAᮟ+? +zXG~$=d;~{գH?r큌ӯ}vzZ~/Q!v1;߄@X[7^܋?mˋa~)&ٔ[l#r#=Kz/n _%wln^ +x~F!BwInnϟbfӯxro0`NӗOśsslGe՝KL8%o^X}}71=j ±/aNZ=Ű/VQE];z\[aWq+1gK.t؇N|8q`uIvg]F]=\8{8O68<'Zs9; +Όply۴GpX0#AF77d\9{#Iӽ'Q qԄ G;cvv̆{8-PCA?;5Gu”ð>c3_7ۚOgtMk$ 4+0i6 `>3en:¼ QV%∕β4j5/:FHfO [, CP7;MCVܠ0Q;uDoqG (s+ +X8~uՌ NG9|ǦnFu vq9n-t,7-m&tnjN[3v:c':n ]U/xb6V{ܒ=hʞV-тq*IfRywSP9\gm hʘti`8H"`ht7vJfV\4m&n*ԭUEOWn5ZJf=Bդ/+mےSMig$ٲzf[-Uw%7\p9JCB/$B)p$pBr?hgf?y>;}ߝٟn,yb}m颸Xo+!H+w5G0Q6l;ØPn#B `K8-AZ `sTsMZ\*Bi}ei~B2V'(J)DJ|h62ouWUH*zbboe {oAv{bqt# @mKThmB 40/_ =P9 1@iJV$Ϡjǭ ~Rۨ/ +Z͗j +P) ERA+͓y<Dz\,7+K#ȤRgI9K2}A.`^z%I2H&]`gDO_} $ȑ[][}і75Y<5BS7\`F:!}r$_\T.?.h$yQ~qIG|^у'WCF!I{4<Kh!=|XC<VHP?ȓ+ Rϐ.Tt6<(EC ztyv0?;q?f7~CcA!d|,Fvאּ3s;g> 8>%֗s'cA!8 1~3bLǓ !҆pve]:"0 CwHp|{0~Hz?'} ٽ("zNb3{Hpc Ks_Lb5|:Qp'L;ǶƑ1%3:́ox~|̾u@qYϬ%$fZvk@jhUِQV-+2mi9{0z6.OГ4K3&&=ΤuI잛vofX`kbu@G=؎V@m{P02f~h[]PTM=6uHkt#](xteoVm{֏ף:E2ֲ{]' ꀺZvuvnݺ}W6O۸eCojzԌ 1wY\Ø;m]\uik;ހakVLӚ%W/mѴjo`I6)u.fҚV+6彅t3wArԥ`y)wk4tS ՊW뜋-S-v*TͲ~^Y함m[REeY<,\Z^1WޙY&bRTq3Vٜ #*=-D{3&''O5K`o:ų*9OWጆ i*n(GAacuOljUmbM>:U0*X*3W0R OakH0G$\SBUlʒx0X ՉP^UIRE[^eE:PE<7X^++ +u $b~:`G^go22ԔNhV222Ԯ$eg31vx3a2f,Gx#ۣQ-Vc+zEQ8(Kx#E^[a +skIQ%Q쵔Dݘx˜Iq'Q&>EN#Waa ihȖ6)l燬:>E 0<+kAY0>BLk9zLLu>c}@^(x\)FY.>x(vR\&H|Q&Mhb 6K̲i:̮ c2PZ&4Cϥt|T:/C JQcIj*ZQJKrF29J*qɸ$2)Hp,KR4r e `pMfH8g )H'R +eW}D +eu +;JGA HqY73LL&Ϲ{ y׉E{#닔} N<׵{\>znG?kS&>uud獟'$,bc17KVͫ^΄h>+xB>I'gUuY*KvAU&;0] y+V*ue)mw̚,nv!+6l3ܿO]n3mC+E݃_~[?v9?o!qgYL\ #_kCnGB&Y|K6fҙ70dd2X'ktVyzNY[)Eit[ =iS7IMۼvINK~',擺q Ò l".ׯJ-bI[.ϥ s%i튤ܤdsI*XN kqI`_.qxJB^SWf( f\&[[ .&tS,qt,K]n41if.dZm^ESY)ю,d-*#12-< (K#'D8!*|Q1,GxD M8c"0*T'1T&gLS\KꭼuJ^R5I!)HD@RΠ +ʍFd + LN M c4q1m|\6MIצ$jB m|NKի 6zubN%aa/[|tџ1)Fi}DGjё~ -*\C'D)NxEC|%|‚b + >D + aA!P\0nC`1!AtAMz.:Ơөul*}@ _WFSqsBePi(jFMѨԛ1|Utr_LȔ +%M#setRLF-2HNx{I$^^ %ԛbM  +`B@*0Bl +{} +"V 0 IH/F/F6*3xsۼ rwLglߧ.W5?y7bNW3ѡ񄘛mVͫ^K4ڕjM1B>wVVGf`E`}.Crl5]]9bԫkMvޮydu١V](>NHANY#h`J`\4 a]mHZF}hD}x0Hlniø7nA)4SC/  fc[üzl> E=#^zœ~v|h>l^o.o. ϋS.#{(~y}Qz7wEy7w0o=z=C;!~n}%PLJ~4Tc_O <>g /Yrn6?w/^Rf/f}^fxsH.xQxoPϷM2'y}GI~qQw\rob O^\C ?^*|F_u!Ӌ\pEO zs~)!xa3^nBn; ,jv +ܝ5q1 1\>6n]fC+C.!ƅ^xV{9꙳Խu80}:} r!8uNvt!) XgcҌ`` 6f\Bn׆`lAfpɽC,hnp3@+GZ*շ:)80%!k!JIsUL#*n]U54Z4hU+V;*)TTdE u(q*e$SU)q*&ڨ RLYQY^+0BA,DE+.@.3drQI52A'],L5\uzM../T 599gi9bE'a&glH (Sĥ9D $8>IilDSPb1E|4>` y%`&!&X\&`/LK8ܴ R-TeUʬ"E&FPTʌT*SgtOS(撩 D*46Y\R&$+A|)?<(Kr,2ia$fq 9kH3S≲21qaĊ׈8lQ0+} J"N_Jΐ2Q,O פxb?Dp @O!s{g4 ٍf?$C 3rrr |b9>(ۅ@e >GF@;2h :4( ?DB|<dȦ.JûOd/@;by]nw톍t0 (ؼhWp<3}ޖqOOzs{M'ͳ{z֝i<ۧԞƙiJ 'w<=NL4@y|"c08ude5baнy`vqqhOWMxM 9kvMzqsz}`Q?۲ k~˺]T̵ÝHj6a%l6mV4Uo2*6bi{Iw9 =-A#½h7Ebq3B,]kMn4w6S1mn"3;!v2"CGae+) ot,oBIŁ)D^BT芩4P$:ek(ilxjh\)iU2jG%%T`5%Ne3d +rHYe@QTDJ :+* q,hb + +eD|>"Bd|1HLt+W%briA kHrqoregߚ8BfI2d2YH k ; +.Tť +hժݴBݗ{ +?ݙ$3ΙLy>s$+((8[~/m9q pX u:$R$$sb 2( G-SNSA;}g"1*`F h 8 Res1:N~¢9s .E07 Fr +ø9?1 dY Ry>Ĉ 33dz)m׌H7R4J y=$OEJۈHsԱxRbn'QEdFänx.q:X,'p.fQ6NM[)10Z.#61Ga2XL@HFrtgq0bZސ\O%)htZ\&iq\Lcu& Ԛ)j^JR'Y%)UR*$R)GLJRJ*IRȂR +y[omWWd wTAP|_TOgwsɻiӻ=mh8wm۔=5u7 fOJ&nZި'7/J^7v]Cr?ߨW bjGG?ߨ?ƉD(_R~/c_\*S% ɟG=3{'=:;q։+'M?k=>:d܁sGo9u~_W̟q` S=Hz|I`%1P[h+X~LŐ.EPp;~ =zm|Y0w>w +T:o 5~B +L/aLwp0`< _ 럁΁Wgr4i@B.xB!8(@|7c;o0.H +Y>0# DOvApbwlwFwF @@~ v8 b] +m2-,nMFc۽>vv0쁈kbh5D  +FX ]P,}mP[VAy%ջb* dml``kV}ÎzgjWW*iXSi_]i܎j i묎Fz~uT-+cyEUR킹URs6EUq9mhCԯo[Sř=N%gVϻ=*N,kUEQ)gw"v/Tv.ZRKu +EU*E*V.r26֙be-eq̜6/o^SP黍4\&Y%K9%.n!Vh>"˙p^XHxܸZ*l{溂"nnU4SG~~,YZ95y5yjTy*VTT^]9/]JDn]Esgrj˸v^XvLҘ2J,K,rFVf"SNFy _Yєxg +żlH+=`w3iyit6mU0z IA"8Dp9{eY eí2FiTNS @ca?93NAZJЛ%Vk5fg;@ \Tn)x́\϶~;) )ȱ0nfrYVT^&Ɵa> ;LdL:9^J5#2M/x^D6"\u,T}IpTQ(m.H{Tmwr=N+D[ar<*w0v+#eV9Bebb3f9(L 7SɣH2,FQLk !:N0-ip ?DLzQ)(Tۮ *"uUl*@r-H $;g2 Ȳ?=|5sb&C,!BȆ@$,P jL@Lc0m L@XXX@Gz$!r$ބJ|% e:4zĦ1?[naw4h)]VܐvbvP*f߃`f@$_^)WKE `/~s^,Rozi&_HH}('fVzN?m9=f@+۸f\{m\WN\G顮g?>{o['u +~0L }`Gut" !sn@17l>t Ⴟa=V`9#VoU +`E?N@8=rm ݳ}e ],@XQ|/oNS-;QRo`@I/n"ogi ʄsխ_Xfgy72+C R_@ !՗$-V5EUu!SŠ +2VyU@\!+i;zdYMei +vՕPvnζgsZYe5#8(Z]9Wa}ZH¬52/U;˺XEWT˼P+8WkޔԆe#ƬҤ̺̚Dq{}i"!,A.I$dUeWҫ +$2fU8#%2.aF.''8`dRK^&!V)~u`A~:D1RAJ#Br~TψK`aj\򣍤 E +'5p1K( 16%b8s C]|.=9tqqrr8Z"̌=?ÚDKݗc&2\bo޽bmbyWF&tvnwhcN**GJt ""#UxzpViaFkDC)) xm[Bلnó->.4![)IqD3]0eCb c. Y%9(0F SM6,_l+ߘHX+?>DGw~MaAz ./: *T^$:ky{i t1?̉A"W X $ZZC9*Q;#b)e@nn2Fz"¼5ᡞ`uDYTYdNE J6An +@W=.ՆsƉMZ觅jL>j: o"C뭄x)\֯ = |;x:/wzu^8z/v tz˃΃^]wѩ<ܙ:W76 +wWŅNeCp@Z gPJUgBI'SB*w383I؈d2D&҉LbX$Cb HHY |@Hմ'30>a#P@kkr DI(&B!Ͽ |}&5Ju={icYqZM!7iU ¨~~eE9zcnHfY}cf@툈c'PqJ1R!d0(GoL9/&dW,q߼8a#|L<ػ^w|ɍ +SOsLFSoGݗ3p]'Lwpm󣄮ʹ7pwg_^;3U']W>߻15Qwћ}y#Q}g" @dB\i[a=c|.D;{>tWge3Ȼ؊;Egf` + *Fa]ElQ1I""**9s[C.TD뜇S՟썗dJ&^}U(=0߀`Z=Ǡ +%=D mMmF(I+V! d=dE`P]S"}d_S^S z/B_3CAE.@&q~$72dChC=9{:> &u$$<\N-AF~s^1.p߁a]9 A|tPw0NAдtC8UC$:΢9Ιjt +8U :YY'=:"rNˀC; i' !qCCowHo $mRHA=- f3ե:UgG#(=H ص*9 عڱ5ۣKm[TS{~oI~s +5֔h+-h߬`_9UGfcXz| KOœ`20xzp<0݃{w;d4} `0i z^itZ-Z!(4*T\%P)='wS)d +\ #%,uA!~m90%GlsQy5hWwĦϰ |zKzGgPs|*?I8g6%)9iȪo|]}|%À'5QJpd,k;%c.鯇&j-73R +tj-7Ss^f쁆Mvjƺtu[W׾l*4ri(T6>T>rvH3k\rx]qZŇ'OC{}蹾}ۭZ|\q`bᱳ~_e| +GzW]N]|>t]V5کQR_ti)¼nW)F;r3]nnbxȰn:UH=Q^wiYFv5ݍ1>wLF=FTɭwtf7Jvt۫OUF͆}HWUPlEid(nAv!r7J=N; +5Yǩτ0ަFVE== +=HBc,>nD*(+j*JtmYQȼ?h*2Ur)46VM6:jεjlh;R +rsY_a2".ɯݛMY_SNZwxfmYshftXېJށt(sU͗oK*ӗa. &\ݖMHNfJ:rϤt{ލR=22wod*eJK߭̀)0i;1;%P%}.eڶbTJ")0Y"+mIݼy)+7IK*Y)t}"kI5Քe#(b6a +r)qPd.ʎ6ˁ5t1qѫҢ]T^*]ddn +&"g%"`d'[FC Jh"4 ᙉE8FIO + OK Hd\yEhZbHHjBCR¡ДxMʸ+BSbaƆEf&E/:T I=yb_%pWIxqQ`y0Bt7OV*5Y)# +)K%E!b(T.ШilB<6.H '˓b ʘ0*fRZ( jY|,6\)"DΉ@,#VQODD)hBbM +1P )r!A2̊@Kp ]q-S{|!?`@(H@ ?9>~~@_:_"LVroN$Q{z{vtr/OO:ZFeRxHrB+drj02N,.C aJٸl;:X$s psan +(Y"f΅8`wȏ8?β?/+K'xvK_On=/g~q~ !:3SދyJ=UKAX)rYeՇү_={g'hYM#\DW<.v0LJ?Fjg@Fg'G3ƙGYc \g?23y>=A.6><3y݋o\npZccW^~<ഩ 瓾j n\ +o bx;.'Մ95N⿿-A2!ooyo'; 3mӻqW'-ҋ{.<]W-;7%7Ыq!Lz3_ +b^ +vpu +^ +Nj5^! c:K`E`We&Zxxp{p͹΁1s,=m}(4u<`_pr +kw$j/A?Pp\ҡKq\&,9׉;l}gڡ6F[mFڸnulf<ߠ@߈kt6ɣL9 H'M gv19LXuTk0i;ZioCغ9h6`6N& zv:[Cޅ+'@`1On^U~J_6j6tF +: e#-MC&Cp~N;igR:s 3iZuځfB280~\q_F UQOXI=HBFªVtU@ΚE MUF"\ +gX8oz URhIH&`CJ PzA{zU#9wtwCvwY sg|f>y>_2fGQ S3ۉn]N@Qk!^ (ZP~a#koֈ!5`7׻mZA37D:lX ^ +պJir hų#ݾhf_[mj!;ݬUViʂBq{&PY_2eU.Ąg+3{ ɼdZUj\U0,7y Ѵ̋qy)^*dkTieEnUKEUIKKJy,װP/F Gv8 OG%-rڴ+ͷ ] wRy0k2\Ix9DlPb1xtƖ3 IXQTڒ!PhTCP*9U6(=ul^Di5iZ2C2b85qشHJ+ErEQ!p!# x&&%*B~+D^WD# t\Ƒ!4I@4D̑ y(Qb.1JM %dLbHPҵBZ&kbF!B&XՄIs5BDGFIP#UrF) $UL@QqnR1 &JġD[` ++C(G"ã`Kё%H҈9apptIH"CåaxP"q"(4XAIB +92Q K$((K"1^H(@$$"ex'y堸3.c1,"d3 &{WAUWV b1OsX\:I IB_D~ϳH>ozA94}_]c_O_f~^ {]bIO5}'k0P|W8S|+`䳧Fn+ovw}}qmOf w?;TӈOg qs9Ι'߻g_蚹_pk_:g7~{;rૣǟo:d,ֽ0jzsz;d͢O 0$9=Ɂ&{}?a16=ʠM3GFČ7b1!帀rnKGO= DEwae0x=a^ݤ/ֿg{yO.}{/{ti.Ҽ<}~v[ {'݆oN=:96搷ctHqr!jCCvy?Wvi pq/Dйv7"tz'ө 9}vgۼ>oG{v + p۾-vA;j'Cڹg cc#0"Cg̶ZP_3޵4@uu9aM:A[^?m `sXRUstxdxWKЎ~gPos9nˆzp>V1Qّm~)?tPvTzPvIrVn+ۅph*ӉhDUh*Tsӊҁ kQڜ;^1Q_ׅ)Wv.'ӵ{/liZP~G#Fk5"LzMk0hFX痜 Wyj]g~9†rٳ}m-BdwVcUViC&|瓥Y_2eU~ TWf@fy#`e)Ae^K2%X'^SHb.NCe,+rK*wTDZe/)Ԋ|r n 9nl`zdG芳tTEJBNW`ӢI˄Y$Z`NK1%%e @{0;)58jʒV[R4j*ӀR{J^1*qTJS +qF:6CIiӴjWSs{!!$*4 67mptfQc}`Msnn˼k}$ٗR8֏3SrIq>#HQB :8dNn"ٙ0Z4V*b 2RaZI6R(@cT-ՠt)urLs1iq&㦲=B7ӹb2S ¢7q[~ ǐ3ɬ^?ɤ' DV+`ixI^@O<2ۨ8dznkӃ,^7{\#Ļ\C\.9y&caN1N]vXmb(*łf1XfSLCD3gq:HBk4 B^/F2FZMjFMPUa*%O5Dɑ+J~2N ɅrLD&%$PpԗR_dЧ,q$rB"E{HNUsߡE܏p]<iԼ7;?^ݵ]}c,^6r^b?7MC;0KVݠb%ş׍UoѐEGQ < uyNW{seΣ[a[mk_u˻]:ԓG5轗Qu疛}k?(@_:5ҐY uK@_ver ;Fߡuҧ5QVGשv$O³.<* <R* 'OAg/+3eI ~vwPP #yADr 逸Kõ%]ò ATv̎No!Q'F` iCs46F̆;ݡb "}w]4D5s-(#A ̶Up{0| ar`20KeAa1 6Dײ֣L^\SR]c iݢجY` +l .{mkKʏlm۶n֑G72eCGP?S/T}h!&EP}T=z{EMT7cOs-zwSۉȩڳnь]kN߾r K [W,Njm(hV:⍔V6*GR)-_WGC툦&Y&)A nE!SV-$L^ $RΛb~L&~aoE_ 8_qJxeJ/E}\Q甌oWBEҺ9YŜټ"1S(ha g*Ο9 0߅#|S%0=uuΛw1VrE7r,'wvaܬ|;sj4ٜSrF˞>T=)k7YUC2Me +L^Fx^F4eQeddL-ƥҧ w1c&"cIT44\pb~6*@deq%cC@]8gc<_Q_ |Y/ (I;l!R^?177$ IDYyJŹ±I2| J6Z3uI NSD:;#Jk߉JR[di=T J:6iJ ,=FM0aL0Y6=bNRQb7d 2SLVɦlnjo-CL$z1$Οd&YPr %y:UbYan+:g'L߅ V½b}\ل{`YA,'gPj*yQn}Y9i|5VY{˭=-gɑ-U]/.5w~~]ơVc..䢣eOmZxLhMlXXN>th` 7dA\t5~^ !>~|͂PXgQ}|d~og-m޷o{ײ޷"g/k5eɻLTM15FSUOw>⑞#nG(:;u܅^!;v{^-C0ZnԺz~ٳGv[,-A7 QM1BqP\+ty׮եtůgI~AOQg;$AT .pkG +\+=PΐϬ8uUaϜ=Du BqjPw +w_:~`o}Eۥ;*gU +)#;vU~έJ\] Py'rjh)jJ)oeՔPd_юy;rq93>7rH=L~vթ}'2KeeǓL!K/,+H(ͷ,aȣ<p)6ERluk۹#tɸgӥl9sȝdmJ!A-LO6Ki'~H=$~NJ18cR}rڼ$9>5S)y{$~GH:&,0C%ip d v%a:?CMCMElFp6|d~o&n+pkt:uev6w֐Je!VVgm&dK=!&3͝\tFU)111ۓȢm%sVmM\Z%эdQVnJ۸ҭH@iޙuIkDoFO\A OX(,>V6,,nqu$](OXGį +DH˵,qu*i_@H`B`2 W:)j  R3OWp$b/L)B1A%O< B UJxPN^bV+WɣW ytN)#42\LWIɢ"|V8IdEDJDC}(—ta˔dMhFybYJHK q`}C}AN }BtP @өdZe}2Qi:?2VG'0}:2F&0qB%S(>JF9G+ +N(29H&yB(Hi$tD,f"DL& +B 愀 (x.gßqx\m'u\26Cǡcql&(b¢u B,R|?4M`_p`F?VY'S6fP-gT'{$s寷fFtZS.xԐ݌!ec5-شɗ̐Ǝ|jP>R~׸ܧR܅Q8S<ԄQMwK=K.W5lƌBLtxN%fXpz=g'L߅ V½b}\ل{`YA,'E8XnmUNqƦ22\jy^jm.{z2쒹DK{w|1uǴH>0lGȻN9C|jӲ[`Wi !B( `%Rұ4]]]QĊ"# +E@$4A]p-= 8dR`)xpޜ'?\W!¿vg>X?Nc"lKl w ʇnQƻ܇NBx߁/ws@V x }4K W`ɼ|ƚm m f a"Hf4j G`x hsV܃{DzggpMGuֱA[A{-k#fȉd*S榩"W^F WA\@p2 @Ľ2[jE DꊬUPCm3EFD!:')ɴpRtV5LQɴpK'ړ%lL]Y3=hO1k™vOD:wԚ0g0kǙ-<%#bsF9 +5aeH9)< PBBŽ +=`|4x )~`{Pb,HiӺ-\6s҅n2v+dNћEڠ@W&/7t[ukmfN!g"&nnk=W9)VkR5kUptY*] %Zk$uS"$ +.rM2#,"RI@BLbG!IHB $2>T]r:FUqWz(|=>r?|:7#)[MשdLF>:5a{JEF)ѭqBxV֮R2hkV*hB3W<-Y!3pw ٙst;tp^$h+5N+ݵ;bV;@Uyj44sQjZW7&ŕMU̕1)\j&'3TjB4RД +T)W33CLG\e26TE(H2&D,fE\Df"!^(0$;{==32>ofdžx\0X +3-f~Z21' l6$">.6,w_,k_܍Ri(>_̷X3n#MA`Q>3^CN ~U ڻ/:eVvlY}sXO}/Of#s1''UEISu߇3dLΘ3M==r;9FOz=5ؐ=0k({fД3=Hhȝ!=2Q@K@+A_07Bmi 닧K<.wcoODO[xgc`aP_!A`=+tHG{7="|Ke$Ƨ6 Q>]6)wK bMG5e,>t},޵c6zg{Ӷ4!}tyj]/,Ѧ1m6#Mb1D 5E1hax8lV܃{DzggpMGu֡1CJ-@i!w!'vڲV“ZL5_MuHiD=5^E=ëШ +<(!^@-"ꋁEuE*d(6TMe7sQչq# z@\˴M%32 "\V~9]Cs> (%g 4 @PtUxʊ4H)?;uDv%C Adqe ) Iٲ": 2:2 KvľM{_U_=tUj@rY91f63TŮiri*-{bdmEwZn);Yn-k18%mvҮ.'/9f)FҙηV7[e 9ˁ0Qa\in6#xrSg#tc.(| ȵ?eAD^1\ rQ.kVU"nFrLeopɢk4Ss*9`SWSWI0zl?Zj[my&Վ +.F#rɤvhSHYw{yT<6ej}Ɏ RRsPE2!h)pG$) |&FuY<#))/3)17#bǺ 0&IBNjtkmZ9emZCƸ.66s#Czo0xĤ )4dFS PEWoII]KyLDڨNFj$8L Dz㒰` IbK[$CH+_FKB5* +2')!QKX)"B @\d|@)E*K)2H]"ԇQBb UڸpyPٺX=%ԲDJ@Ax 51jDjUCRlV#bQVRR =D"dl¥Ta~!rMTH&R郣tP:*LCaH~A^Qg~~@3OSf}&dFBO\G)̦w5T3>N4? +>OkT,xEq혟Ts ղp͛WrMQӇŵ?8tEqxX%xY|$Zw}sTc!Cr^=-s='/7~sTq}t6?u}NFnao'ݴ'8>>i혝k-!^;Ѐkt>764ϏBCmscCgu̍v~pfvbÓ#/#/>94:dR(_43*y(1,f " cPo7rH$g_ۨD 7#߇XzWx+koC8C˫Fu|FVg}/ZY31=X_^V=0GZ pY+g5pf5C5V.M}%*tU vNVtX.E}¾5y=ֲsiZNuEr%=,VjVٲ.3D9TE]RtΨf)鴛 n6,H2j +XPڿ 2gdBndYc$6 +\֬|ūELljf27eSF31K֎ +#̜J٩(6= H^@TX$M,9.A1svI*( L(;O}3Oov3]3U[ 8'Tmw} uqׯ`[`]FsY{;3dzմT-Kȃrٽl;%4-XǾaCl4Gc1 8+V_EUk,8k]5ά,yK}0lekҲ +Zre|nYe6#{ j֒ +\#sqrɨ-C2d.,͘NFM .^]%-( ZYHr@ +ROK.c$CXϖT+IBX-(ɡ%8HWׂ"rYPh +lӰ$q yܬ,l37m^N[\#ٞ3#֖j6RXlN1ds5-7גjdΎŘqE'F&FTQ@HSGј^na: V"E F +R8g8Eȃ4$c/A-HWA%QbVN42=@nPQ:9 $׫Ҩ +_7(Ea9yQya861.DD &IzZ|\|s0/6cTs15s sJ17Zϐ͙#̎JDGjq"?P]pthd( +0APa4)d2F0TMrG 0><$ME5Cp@.< #Ah"gڠ3{|Fiu8VJM%MVsU*NR*qr\r2)C%ERfq?6?6DE$%%f-E-cX?֏ݖh O"?@"@[?"B_O}zjI`-wȿƧ0^ +ȇ&By? +12ҏc2!}xU5N~/)`-w|wuW/xH2ڛ;^sX QcX! /n$FwC*Q5qhǷNyܽ3L;9E{t$†puoP?<ͣR4#>s0 zN)ppz+^>R 5@7"@7E8.'G :3tf/{Fir*N&{zE:wq; ;IhcG;?BipmP+w۹uo`V- na?g~ڄH@3azBtwg~9f-f~n"9[ Zoʩ7fm lm+&-ݐл]{=-;5}-UǺ'-kUMH']PKTv5z C&FEO:8ʩnmB*\=ֺށmorR奻:@NFEN^%iŝ: 67D(mm&xܹ88e͜Mm9+ 윭hJ6':+H+pontmjan)P{.̌_A[\v/皥>9[886/F 8ݵ8ӴcB4XcBlU,5!ֺj+[+qֺ),.,* &{KP֒,\d2jY22rʨ)aiŌ4l|ghiUEilTW|f€3\rRYn +K2.ީ"4oJ!OIGMb䒼%^♘Θ]Kw;h8c'ZaZLgeպSzgqZ+٤v%[($+e Ic QD OJ4P&eBHqZ4IlB6&&ޖhO1,2&΁cqDc@laN!c79bbIF{t !Gce$cJ2,|,V3Eg1њ! #Cc2Co2Z Nr) FHJJER|(JEBA2T% ,$rIRH"K8%(WƷV[}/N$,X~3Љ}=MP$N)Xs]1>+ĎػC&cod#mjzF5o7w#%׷u]OA22jn+$/o)Eo;b 2b[7? 9 f ?Ψcg=[SAb;@_9|!Bc}ƥ.cW )h}8vs礰n@A@;DXBnΣ:~AG; q\?"v zܙG+}p߅Vl/ +s~:t\ QPNBN +_Hh2ABh3vf~:6hDB@@a4ze@{6k@{#|WvnB_C֢A;@&@' W`* غ"5-BX  hXN9W] @5 [e_i1!X!ֺ`k2_Q3HcmE+KX>}k gn5`ṽhUٶ kU6P*5T*ZCj{qSǫ%P3QT;@kټjϖڙ-[T޼M+*~ٰlǚՓ+VI+CJHA+Xӛ5I Z2R)!ᬄCoOߴRy)gL۸4?S7,aMYx?-4uD!S,?-`MZbU?D_9U"2yœx~1\Ul(Φ/-U pLB +* q( i *)?"*7RP\҄ˇ24~n%5~v)93klngNʪJɮU9Wfdrd2|8^3LHgk\iqz"RZH4HZ@(q|S +||J(HmॴY*+?EKaR&͈ȌjҠ,^E2hXR#)r$@J#Ai\EhV5>]v}NbbӜf-v-  viK("EITŨ4D(ĮH 5W {fYΔ]}~s{!cH6 wU\A ig;ZtGb +H=JNvh(!2B# Iaњ]pM.[4v(r08 V/aChpo9,6bEla6Gc1:.dBiF>F? Ams :KG"Z}F;FRjԚPUj\E|pBPrBr>r?pg2LJyIIbDJNIlb6X$# "V@lf3!Q)E,`.Q ngşF8<}! &5dh)d<ݠ!>I' ؀6S9ğM:d^?PCy>!)|-C% m5*+=^硎Aҥjrok<}?j3BS` Lhow~fVG8^k8U1Va 'g:V cypd/eģi7s,'W.a~'uxm󯮂vP;r~Uepa>U[-\J'w웒݄1|6^* +ۛW7okڶpڶm%*&4QֵR6RJVE)5jL(*5M">8Tu(R@ +9L3HqD&ɼ$T"H'A$b61P,B+BV`l f6W(x "1r@$QQ<3! 3"24RG`HnRo?vl 4zPDEi6e; +(:* PQDH !(޿gT]2 =ՙ}-R"L'Jۧȳ9U P=Ӏ4*ucwMy*mVhZ4-֒[]e#Zx\FY{T'hBY:,7]=x8Xlq8]r$e,vW]T_̽_+C"CUs\t;68S,0f  e3氚ðK;۪>V֧VU}la,X,ހ_ ļo? Vo&޽ 4zkXk szс@?_IJKx1tQkEY kڪ Ĵ> *8}A\ h +Mw齼C݆ 4VZ D20 S_,zv Z,q {O&<,+PS@: x,*w9=* ,"^5*2f&4 +bJWIyEcP +Y\%@,i@ +09#S*;2e2(t :y@ƒ 4\)`tǤ )ksSkRjJӢr*T"cU9F +W_@+^>G\`$Q%FYM+\XLP4)2:|ݩX3l\KQ1#o] M(6QtIln*&.J(11٩d MavzrDtеsr09qlzѡ3F&Erz˧KFQ#`}ſ0QiE^8iqļ}NG?A+2 +H9?h;FjvQzaIGB, =}x%:bL> 9 ;W0lT^dfE6x0=\KֹK8dn6"XN2uN.:n+⎸a<]]M縺z)ܝ瓎EL&wqt9;8ґ:;udrG{{2EJm1;6r39A;Ȥ22T"]FBaC%"]G& d|`|y px\3.p;㐱8l*6baLea,Hӆ F0a @LeCkzAW!7av7zժs[ , oEx,鳷*CZԴ֪z$ƤVS-=ҕ`.Uuڬ֏aF;V53Py[)}̋*lGuA[i1"uJCrFP9}DȚ+M({"ϲN/L4 FS/f M-MyW%]ͷFu7e#-㽭)]ʠ%+>4_[o (.S}HwM+wL kK'G#/>w?lȋiIQuƀu md[`P5-f1Vs|ig[6Z+iU[+ͯb7_ b_j*[4B ]BA)a*%HbC R8"޿sHl*0wzW}yqA]e9j* ,!LE&p  k|Wq\s= x\Ff}p"P䟇9坳,7ղ>a+KKK2atg12OÜ2N]KHGZ"@ڄƜ؆BmLC yõԃY#zF|]`-7 Dq5\.%9U1qUdmle6&,26L<+WU8X_q&8tL儘Qg#sSwS£G͊9G5b2bH%cR0uZ 0ٗ?ޫiA'=1 d_)W7F{.'2v_:1 ~ Fԅ$ y& ȳvRREjG:lZ[x/D;,&“Z3Qh5b'aOƅ[ؐc\lG,[v_cĶ-f/Dm;`+ ڷd[6l3n7Q`.:7Q-dSLf9lx hCt{H<ܸq_m׆~05YO Y- r;-ૐuk#i\֒jO ۂ!u&>}wlGŗ͇G~M&A<46ʕ."i0lA4RQ;nMmfŖȝ &sk9xJ" Cjp@ifmk"gU2"Rʐ(ԽBr@$Z A *;YzKm!U~ c*IWc0Rq!]m]Y ZҞMfD:*/5f%+Tb6/%M4e']Irpx`g;xدp5'+ əED56#l5=Ȏfc3FmfSتl\Tq(dJBAd +M* ȤkG,6YDbkәՉلbJ$VVBXqF5sl@?`!so L}yRi]ed3"Iė1ϣ 63G]>|7 cɢͲv\ òAva@mh!_ \ϻeL@x[*%Wji!}zD#I7=ڤhe nf}K5Ÿ35Dk1z0JyȘm֞=c={Rn0ƻᎢ uN ueOк+ T*3Se_ɻߏ=/.1LwuR = zMl~?gHcO_ML\=<2mA:#ރs$`&[,Mhٽ.xfl!^0 WO_5^>^jg,` zOCCȳ~G==Mylt/Nm.tH5o +4=*i')Tjc).EeRe2 S%aIIpTsI۶A_H.ao.)7*aޭJew'[6dlݕeKjLf`0qyqLrhoژ&*#mln!6K^QL2Sbc3I֧'91ҶQ$=jDmB Uf+)V@RmeZ˴&%**29֑V'mƝU W'EIڼ2*yK$*]Gb>*">z"vuodX)}FCaYx$@I~8I*4(Xf'D(R( WY\Ǖ8o Gw8DKO"`%<6K, "N*а +y@1&&*HnmM)DY'FS%LJ_QJ+LR H+.VDi˸, zSEJ0Bƒ˂#(e2E8*Y +P* !vJ_JA q$OhWB +fȂaOP@<?Y׉χk}5T"TJ%R @""B*P#pi|oijb8\o.tT^&bf y&W{~ϒ ppa@c6. .Hη +o3M_}iO噂ߦN, }Xޗ@'~q>F}{1fGK}-ǓC_bfP#xy&z? 9 +3B'\ׇlkV΍VM>?hhTe2ؗq̕IU˧?Q׬1>\'ߨ8vnvƏ0w;ݭ4yq̃H_>Sy0Sg? 6 {?ThG>?vdL*$t=@DzUK@tuB"kY{W*Xֽ,X޿9ęsN܇y>o{2ȃS[%$US)Z[EY]ɰ+4WZpukK,k8RA?dW{K[YDXQ^U)& 'åVrI)_–\GHf2NI%Lơ XHfIbIL(s/'&Xo3gų)qykK<.vY[B5bX\=c.q1 .KqKS )8E3ƢřK,H^dIY$+mQ5z?n~z҈y%*B\( 'DF? P6,P|)]t4@SMW_DIJKf_K|j^r eS|J\+'iT|jЩ EGTR QT) +H맑0r~Nx&fI.6:XGE:i.YzEUl ᔌQH=a^\HTN R<$!Hcb +2F Qa&$ #DL.3L&# uO.)$g0Cqe8Cp` N%o?AAo`0P4~z3WS| NcѲ) FpJJS\<>JA 3|f)RLLȤlR6T""sA6X?֏cB#r %T9q闧'OÔ/OH$}4ͩOFl=aR|ylyܗC/6't}<˽mӓ.@N6Ol8rjǧӔF)gv|m~r$B EKގ\ѕW;NPZo;n6ORnІn=Ss^kA;=n`p6#TcGl'y8D0!8Gd +V97~A×4_Xh{yct̓y~v̂Ind=B=;pZ\ᾌ/#>=2܌8Hy:oNyc$<㰉Ӈ!#o; x{ALhtFAW5=[1O{߯4էݱDS}*wJN= +%T/}t$7rdL<<[~~hGmU>^P"tzv \q +RyJVq:tp0;Vmna~ӇÖܣAAߦn“#COC=P/~4xeaٙ)wQh z2n`}54>xzmg]v}WX{+M<^xæTD4-^v2ѥ o;U.5R$x%poq oPIoĸNA{׉M>7]8G~1zz W!-o-o2~_tŀe.cw _g@wpM.Ef:bƯ*Ues%nݨt_stx܎2uvcQugZ]sw9Ny>I߻2׭ ݄nX]?u#.W{[\>An[3> Mttm kpM;SqN`4N'8tWvG` 8޹_\~^̝1n-k`(h/+M.؜TaGv6۾ml-n(Xpic:]j.)h(~PiCp~+C +[J ښY66̣\#M3 4EOx䞮s;{$؁5 +OʋNT?PRp8Ⱦu-N$ܥ́59rJ-{9͕$GnceOvNCNzx?;߯+u N%*jMnNcͯe}uu)E 'jYogNbq.YY޷Njy3leSܳv*2pfpo6enYgq,٘(Bc߽9ʁ]XeȖePegJ瓱&}4txS!)5ekAC*C +-\79 +eTIrH1I&%oIJakIYBњ>+ +W/X$_Hn0[KX]q8ظuqTkL|ZN:f WePEL&DS(R3G6HH{՚*"33oȈ.K K[cˈApnM_nHg"c#px.)1’C3ˣ&DbBxt!f*=h07h,?#'F飧Q:^ +/-/IC#3y t2[Y;!BS,HuuFUP]DE)]{'303 /'/Q {4 _O}z>Q +wP|Oڧ^M>Y{͇ǖMnw5,&𶓥iOOd^?}7#%׫vFڙwH +ˇ:b^}-U6U~8YO'k>NW}CԼ;TFQW]\}ߍA\ +trmn:Ǝw7[ oIv"wvzyj>MGOם#JW'P3lz>7| i~0VnB"ˀl]dMhƭ¿㼰GX4<83SI0ݖQ8f+i"HOnciq1|G0G]9ļ2B僀""]. 8]u~ߨs{}Eg\3navNc쬥AXs=L'X#pOD:ZMl#8 -@hfn,gF]`2&4ߵ;+4Ae,Î njGL5ĘmBkl*C0,Lm,+^}b{ɲ=Ź-nSt}QAs]鲦EPOM ZvԑU45矨׸ Pp)hÒ#uE#ܣrs(u ARwӪ=swVx7{K}J:mh0oԄhg;#bM :лlZ4!&^jq Mn +40mL*^Ң0kǐ4F&A-HW1(tLrAQLT-$QH*(2PKF*R[^qcCtq1vmLU뎴h#H6.s4AUt/ + 7A2+#]FDC40eB\:)E$!CQ6!ß&ROOڟI/N@[[*m6lKR>.[=gڏ}@}?Λm'>h)MxҲАy4gk>rl&xbf?ԌCO00ю#?%5s>4$ݻf¡I@;4Jcmz.D#oz|pxWW4;uwLM]wWm{ywl7%ܩ&n|;׽kpw +1W\/4akjkqFqzR]`8a!@T}$/Hުr5C9Օy+Xp0/g9G}f\Ԫ3evYg]2ϔ:evɬ*ͩ*lͩڟ}j߶{so:+;C;Ҡ´5".r%b;d2PFy&l{*,/)*,4qapH‚9ư6,T1US fl#&:4I3ld>IĨr#5HJ:G"P#Jv^ 7"P.v#&/zEHN)_B0@ZȠ v)$3ql~&R&&e(Mz#:6(AFV(t7r!!Fz4Q)U(R B`32L*ePbDIlb@$t +(B"|#Lpx\.Q\Fq gTA35S35SX;.0症gG. pFc_{SwØ_^:*g=D#f:*g}2./I4S5R]}M`>۴?PfJ`Zة&.ϓB*T.U@TYWb& v@*v,HoI(@舻?Lf3aPws|r͜W5e╚&:TK!\vdD;7=nS!ze#1$o18 I57j2?VeTe|ΘΞkAg g Y ZʣYc iάĈ Tw! +S F2 㝣MOFۆ^ 7{=ja|ڰ~`wwbA!FKc@bj`F(FLL +%|M$AcbH+0kƚ iEl,͚fNߡw44F75 X X:޽a Ճ0߀_A+e : AAs_sȑC`x +Ƞt_g-Ch@R}@j}e 5pjAX ,{c"rP_r eA +=R`Sɋ;ݜA^o-MG7p^^nFdEj . +U\ac*]\YZ.KiUr ` (\w yۍL.Ŝ_ϠAp< 2|'$Hv2 g姳A+WgIA u)4hOAp`pAqcL3\O+K=Ty-%fki''V(L!TQXU_KJ*JH(HI(_v%%q1$eJ(e8X/!ŕ~[mWI읬䤒sN&޹bZ1Eb +F(8AtBlA:)&?%䟡E 1itI]BSpѬ=jV2-;|ZΥ-mdZ$ŒpL}?ɀ2-nO iᡨoK]]@FdúMwl3g}jM.>^RliB!*M顶pwuX(] Rrt1S8;q9H5M6:(yIdvfRV$6J)/B +X.6 +1!I T\榒(|6}\U?XٸN0sذV֯Qd v`X^g SE/@ejăk<=/Ar^F"f4;Af\ԞW7}+ nyS NiΎ vN+*G5MCQl5jz3{~)v*;\ekEfTre8Rr.ȤrD&b#Ф A,3D6b61P,qBXd[% 'XyD$z&"!"0xil6HV5)_?{,ƕaoN}}u[}LsK2E\zn,׬_5, 75ib./d75ѡZ'%oW0L,}6)[V;f:cUƼ2CO9}u\K r?sHx=k|=0냁PKy5<<͙5QN_ uy3++37H}4mPhxuJׄ4SZO[ 7mH;֤p{ 1O Hw{wԇ2rn4uwX}P~xy_>c0UN5UM7O6ON4=k~yXgh)?vMnz M:{Â"`Y˻k鮂&BSE M))*Kν;777Es|d39/ܙo}yZ|ٺM):Iqw;)k/$R0"% "2@c$1D$1" 8yolVfZPx.\k}S ;=`6~lolo-uW*5S{U9OףC0+u>qTAL[%V娀r`SSKݛS!0 %wpuv<{Rd`ZM>7gPPu<#[׃` Lw]XU.2GXE6^s ǃ, hSb ٳ<s ?{tZt7l'ۮSϖ͔M{6mA6m܍ȱaF&3G7Lf>Tn& e=vv.̚=;ײgŚ,Xʰk~ʠV +Zm_sкfꑕ+wm^şJjyzdmkW.v2/+Tz }ׅ@D.P*/Ԋ9u[Q(iR9Ҕ.+2'iUJAM'UgM "R^bR Q@$5U%q/]H|mR'Ų%:_l +Enl󋯣Tb B u׺-vqEuxy\}=hTi8xL|tN^l:E\Z7E{&sc-rueӺqdE㬳pb(j'ҳ3Q˦rtp ƁCåШ|j/cSJ6RGa\crLj!cH)T"L&\$bH)\ + ~Z"h"IS/&Fg$ ћDg"k2׾~a|w{;?yR3Wؗykc}qE6W^~3]J:W&X G&:犜vofM3Wb3լTNcԎvhؤB:I뻣9Ƥ/剟J?*TR*cwU.=Cƣ]njIS RxQw}3>s֐9Iye֘=ل43ZOZ)7&L/[vJXGҙof*Bh=GiH_lds(x-mDޕFFC#CƑAX۠qq-miy1^sgZ_;vc%t$m$h%C-$1( }L6PI6p3I HiC-"a[ 1Ф&&\z۷2fm=AX@O? W 5zk槧 W(_8tWi|A+`|0?㨂J1(ArLr 2R@cfĔFJm.Lm!K||oΠTHZ̋b1J4j`gNIyrӂ$7ɥJrQ,O,ΡH(͎%ƗfW!K8.ZMܑC=}[;#mAMlNy?aivF|5!Ӣ=w91ed1{DΠ$ˢvڅyENV;vHwkd.t3u۶MauO28J%#͖͆D,RLOIIgZ̦TMɦH],!"EbSׅ5i7M4/1 ѿmbN1vF%۠I,L.ll#-ak7ٹiO"֯\>f:( +_9fGY}cHUުj, *JB`+o)eA* ><`/@L$ +L+%S$>rVboO˃P%ø2B@.!<] =ċ&XBF sE<P&"! r9#+%?񗆭 ZE'iLfRnVPR +U٬ V{nBJPW B`2A :{:Q^!Dg +VzTj:eBO>חL o7˅ Byx)UΙQ(J2BX SNI'`"ɘ22L*%K%L$nE1P,r! D8!/3)|:>1\B~ԏp/ +<ΜNA8p'pe,s@x>=c:,Ϙ}S/ȗ1?6}]|~¥[}Z*(_!w15AْL>b19"İT8L>n?щv}}z˓3(^8efyrswrftwjf'*ZQu܍O7[۶è;uw? @pO|y:a!7<=2jz>0:=< +=i~h}bd{19}bdszt#{2λ1N;b8!]o9zs]ÙpK?ۿnmz~h*]eʷ2ϥyz^˄0dwyvCh s0`~wAws8;h.intZm$sBp@q .~qq ,B8`Νplzfgkij"C-tдW:!*;:ήj*cv BCݟ(X9QsQ +aTW0Bv4E.Ri2ʒdN9g;d# $ +Tgw͙FSZoSA1?h[3P fCO9NJUoBm&}W-a) Tv+EFՈ3& +ͭ-ƌ\Csy@Z}qvTiuuET[QCS,JW 1Ng')ĤV;$*|p9bb\iԒLKϜ*nhbrPTr) $9XZ6qYc/;|6'B> 66Ufy +>i]&wA 4<*fy_s>w3?EJ>dУ ɔxp+"2(B_^H# +JIYYeK +1JO}ngţt{e`bwZ̉ceT&0UTAf*2?cI mȭ鬴yihT-- ,Mv +E ²1$"5d1Lhn3795)oڢlL߄ڐicn#jCbnzT.!Z]tZ2&dMB4I[aM6dUf금5kuk%h׭E_"r@MܽCބH|*e'+!UQO \܀TP=5$oXȽ4?z*12]I:Vl}J)e +)F9KL(sDve0JDxb>( +P&"N@($RO=<B_W+P2Z +JJYRJW);+TJB Vy{xB~@( ?G}-|)>FRzy3| RRQa>Imbt97߿87dKr|Y/o}<먧!v[/#gqrƧAץ0q FO5?tD8+}.9z>9~g72N3|;Me7.`G{6l_j\mjΪ/CW)5]еʯc55nݬ^6S8Dkvna>a!#'> =6.О5.)ϛL^7^>=?C93? 1;77O9?;0/ ^3A-~#-4LMǠwtL?eԛл}3CsC s#mSsC\qڴqT'_ywɖo&Z8T<ڻ!pNj7JΛz}| hSfzL>&L^yS0NLʇ|G8z#M?/~瀉#h_7wO/eOؿM<?7#,x`!aKq}}\~¦fq|/ :"h` +6*wT㽧l[Gsifيk %9uڛh[Ot*ꬣ嵝,7f5j=QźRTzL2TvK&R] 洬K:Xc}$Kr/>{,?2-C$44$3NJl:xHd24ChpPW8@˨3CmYRה&rI.ѣ5V'_ϐh>>ږ^彩ؑGĖ#{Q){0Gw$)&Q)$ډI>dУ ɔxp+"2(B_^H# +JIYY9Ϥ/)Đ t(=Jػc;a+S< WGݕkh*fg911EvEfE +2PD mȭ鬴yi(sde"rS\sD`-YCh5)ᨰd!,3IcGrMhfj $&,=̍l?;Eggs%g %Ի3^# Ez"A⢢(iU=L^VU~OOD^W,kmBiQYLQ>:23- +'œW)%2̼""4#J/IKpSbdprL_\gTV4"m t'AV +D2OD'4. !(Rzʙ`΢1oTAJ9ʘTlJ7U"wѰȌj܁A"ӫ:%\&(E dXb HlBHHbʁLI BR29r!R(EduH+ͨiI!z # 4, puR@?-" 2xy{@ sR)pCA\+7ӋI{{2{{dtwg2xqwweѹ8кi.vFDb0{fbz~1T:C˥j4|/cRU*&JG)@!W*Xd +\FL*L$J$\D,#H9.Kh~q)$79h"D__C_^|~鋪[/|}QMpo@ +>{?Q}K 7և^X }z!]Їn`z?3ٷoPIPBgfȈ3HHfF)̐A;B D3;0էv;i'ƙS Um$JrOMNu%$W+ZЇgHltգ!)]xoݴU~mwjzgwzvy`^3;zT7C騛B<6=u>ANM[{>3Y 4tnai6<85@/ȫ)H54<9iK)/'ZG&['NM NMٮMڮMu>I95A޷|?GO'_:>>rw~~G=3 v.ց^ `orSL` ANtNغ[')u)wD<#!X򶓤нQ<azCh`1F;~W@w^>>~5BF?xo݆~ Ͽ&z ;8w^xΑ+ mKw+j!u6H7 pq,h$=F/{pѹ l;#w.}[0y8 Bz䏓 vsWcZ*nAs-T-rf3C+BNU%XG G}C>s0۹Clg:e!#(' +:DBNN`8D^W#uԖϩ)c-#Ԕ^J;Zbbv`; oVex喭K74m;]Diڒ MMKZTQ]>F)j^UXc)rR"[aCK]ܗ *i-)8[a)8sdGي-+wPo}c{s5{5l=9l0/,R;'QUY6r_ô4iQ WӪwdW#%Lb;3 gXL6=[V"tƘeؿ;#gg&(kϯHf_m6dSgxK79Ȱl43elf1ĕs#ɼs)cyiۊә=gIۺ+uKqSol.Ɗ_ +W8W))? Jްd&$_D2up$LH`/Mg+I`Y;ʌ7AvhsX$!?36~W dS*eY^F,GYibZ -DN6!Ѵt((EfDS(>+P  #a$IK +MOH0yrLhRƒSB`􄘥)˂ n"M'PmR-Gk:_x(Hmj/=/j"]M$B*"!)U(bkcY{ZֆRU:"?03L@{=[g(t4 +vAÊT2^NJU2F QYIU+(e +4\.%&p: )NB;LKtj@XlR"A +XhTA:YU+ aVZ%s8Hg`Hq* +sy[LZh5[ G}} ?ȗC2XI[N>fە|Mf7ebz4&w̌T:/JkdA1iԞs:'5uFhf!jADJ62B6"r9LN!8ȤF"΁K%NR "gMT"\$fE"6P(b1q?g""㜋D$`B\IE-to[?7|o}{^3"csN^y6{L%etI3եaYHo=|d^w pv:&:?xf>_}kU" +!g5Ri̍TG↮ '?u<ćRdk t>vZ$Ýλ=S]?&:BOv!OJ&B&HeHg;f;#;_@/Z/lC.Cgt^yu_#\kC^]@z>u yS9w@u4? _TګGGkFGk/j/jG߱4M@[ihI$4]7nơ;_:ik ~\+o @6ЂIZ6 5bH-"0\ ƚq0$13FF>$#-nD.BZw~7`!{aSo7_7u;'n0pGZC ^=0o |G?n~cn70ypO]~w6h^zH-jqj4Tb*\i9u7=kt#`Y.Qa>ݻ"^0;│0P{p- ӳf*@e1= 9gEN(/3 1"3r#z3;WN]>Awpchfg_GgnЌϹ?1^g8scuHA' Pr`Fi6\%UqE+Ȟ+Ba>^;͎y9+sWI\[ٙUE+OUͼy67fikRfeYNFE)܅ȸQCy.Z͖EYP6IW r8EwW +2.de\φr2/=ፐ JL=}l.;>` +dd6T'9l.cWtF*<8JJ-̵Qm*1?)͆SYMmTOfl8?xHRʱ{Hv(D>?w'I>;ITÿsJ:xYvJI9G|Ύ]4 Y;G{\m.q{:K3m41cK UtѿeF/ĺ_3ֹ+ڝiQvEEZSil۴ƍTn\gՖ \aGf0ERE'D9͆D%VlNp@!Y*bS<;z L~8KSbW@9,C“cX-E/[jC:'R3Kc‘h.K8;и0h1C`^jYpE0.]8~򰄨и5QAFVBdLBO(|=HJ +Ief֒& +(ZAÊTUSj$9If'U$JWR .823db\*dEHP :5.6NdeU C Dh Z"Ъ&u4Ъ h$|8W9-&g-#[ >Ki!,$T-f[_Md $3I&$4]@bX+>D+`TT,AQz/{INiQws>sޙ;/1;F.ZoEe2Si-&&Hi6?R:@xJz:\_ 7^^AH3oHřC owY6.N)4PW +ʯW WBU5}Pݭ)>B:B +4z;=O=mھ@]tt?))*}Egu_v3aeg`aWPakOu#pQg/5/jG z z*& +zK'zW *W4VJ.pٿ* 4WD2?PjJ +tT ET _Sr R . 0/@DSu~|\=:ξj}տ[KM/kx~uj Tc!4OU}B#M>TI>6`@Xrw98ۛ3{pn֔7î&p8\g׀ӫܞ\a{|#%n.YϜp/8gr`wiuv*p[t7g];C#^{\=_t +t$pu8\8p aɴNI[gQGzN)8{~Ms'%˰ɿmW;]8nݓwfwekָ6]IJwS\nfRBn9IT wәRIK"Y ӎ@n?3dsqRbc/ EAY'-P )"z hbiҏEfڞfv>ԣLL18l;$mMIbIrQp$Dn>s&{؋p"2꿉4J3:S'#DDuڱ";'ܺeSpicgLaTm:!P;Ck{G&$q +no ] 3X~ubo;mvpYGnv:5zg>V;)bUP\4M(;"IA+E8rk81-aT+6V8H|T"*?o%s54y&"G?fEmLf*Ĥ1<&'uMvF*@1P2:46 G1 2^lT/4 = ok17Oiӷj^Cu5F8; +Mǰf` tۃ.NR/D+M=Qzq5=*JY8u< 8󖴕` yvWJ,yz'cdeE%ocE`I#n/ ĒT{\kܪʫ* +ق+ϣ#@Y.4;`~HIP HhĒ`EE;iBev7SwH7S +ܸkz`Up,Ry@r!X&/Ul$g RqJ?Ӹԓ. 0G/m:UzNu~n몸[_OIP|tZrƒkrH_%%޿*4OPJpsf[w2UqEYlUUbQvJ|aFR܍#Rc +.FDȿ<&ýd\9\NJ4C hY*N2fπoBU;\>&joڙh;)IugP$Gf'"J/fSԅ_󿼗rS9g"-:AtqS83GvE9+%N + +;F߭0&!N;O ׄ㗃;V}xV!8L!t!Gb1߶msޭ\~Jc3-w3Dق| EbFaG2mۼ/ӦL=h.M6ClB6Ƅ3(0: n#chˏۑ Vwm ІCm]wf0Cضu!? \'_%(< (|]rיAD^N希#(=H +wGVr7՞nuA$v2NbVbH.$X R!IB("B'HH.R(K W9BE8 #;?15":_;Dh=sCu_h KCr"ʇ8Zl|=}<蜼=<<<<;9y9qc꼌3 Q:;:YgzqtpS8;ΞIfT* +Nr RLK%ˈ$b+ E"ue":H$d 6</`QE0*շVa H|XB $/z3$3zėIըoٽco|0-lcgFVC-gټzia,x~ ɒ0U~,ӹ|Qfh\-\ <8~U3}B_n#ǘl Lj[& 5Ԝe ʴ +$gV[ U- !Y $sAR2P1{N4Q-Cʣ\yLi3@OgIg5H[EMI1}ܜvC=im4w,E_l" ȋf.5萑2c(Rn xŔv1MB^H;U?6l ƉH3ݠꝁf*kbح&.τH转TElTUw],k vD CLH!4i7Ld2D9O*0Y4jJhR˘ruBweRvK'G`Fr 'i30DH:d'\ChJƇa +9{<Bgro$!zؼ/%Q{'D?F/1=q{ODFipKvDŽ톂ٮcGvE`*00ɡ]Aè Cx9( ` _Cv U/@/pg؁ h*0Ⱦ]yn8nB|]|OG vv@ +Đ=mS l}0!rvDb3Bw%EdlOdghK` iqD3<{ǖg5K%`lZL Cp9.O6 L` bٶ͓ނlwP< 8t}x~v(L_w/?\  A{'_O/=ON&ps3g}'vulʼnьQ`X$EٓؑlmlB /x><.GqWbqCxL6Efb2066LRِa^~Y?;?70a`K[l$G +_vW}dCx|:K:%V-Y* ~- Ym׋ѺZmq^ηW;m9S::wjW5X54r5¤3gSFt>8if^gvq0fĭewԕwU>^CwPU j5wP^m^>jk̞Ss-PkgL[g%=Oᬲ~2A=Uɠz3**RQ(ՐpW8@it`ɤ5T6FOj>B#*h'z}x3.Tލ NBS5:ӵc}rfB>|\9%TN(Śq*aL}i,i[ƔM#ƑQrxJdJlI0'W5Զӎ>_Ҏ\>);اwȜT8=fb1w2 Yjau FTcVi7wF`Ұo4hQ_7Chރ hPՀM:jd Bd&=U]!:_!] ) 2@i+&%Qk1-%4Sk* h|4 ~SS [_Ml[IO !z{wWWPC)QyՋ $ ( EĂ]D!(^zS? IL&{|^&k]n@Z\EW]:Z`qY^MA-kDWN 0$-4eŀB8_:W@v6ϣWw.g`;Ds՞j +>iU4 Ie0Т\,NR}%jzY;ř0 @  SA`#]:>'^WBҕfh4FZRSi+5-5Jn*Sɒ/2J:_bQeg%)L+HM͋MʍUy2.X4b=DLh]9qLt2H4Ii" jW$XM$YE+0,ؼ(fDJh%U̩tL *:#4,DZ$FADFQ~FQGlDhY WFEf'G$p*UQᔰa{BBz(Hhw8HjJl#y[O/qTk[`KHH.-{CVb[;n3͛TL~N!D%E'Z J@{` 1!$xײH[6`qC\8$ #ڰ.&t#*_܁Yg(z_Z̚F~C֬hk5!VnZ9c*}4%U}\ 3J|H@f8 8SF!DMfA!"rub$Kh \Č2GF|-2DĈ/~ +ׁoq\ D3 Db '`xq/,B V S*7U"Dhɿ|&N<" kCx"E|\q +?Ovyyxa\|=-'ӍLp'MBA$ssj\8Xȝ\L1bLHdRIN' + H"2"ADGdP +=21\>o>2ǥRPM)uA*[^}Y?g}gaaq7B}>;xGֈލ:yL(u;{Fqo-=gF7?潷O0¥gd7O<->2KF/!XzYJ?-ܫ!w`p4zW2`pRPjnP)kv雘y, 9~䀛'zg>_xs|Np(s· myC;ґ8XS8dUpbrI7zuͲ!- Cw{ze=sHI9CLݜyda09338.3!fp 3'˞6NGgSCQnjR7e6iôL?G&ӃڙGٞ)dm314^u& W&0?^@^#KțkKGkcA~ͭKw_?M w?p}͉wwzdž9^?:4ܷmF}D/Egs>Lz uޏo٭kɍ_Ǔe_/~+` tB;X!FZ!Iob9cP@+ZGnwDV<In, +ُp+g]n@Һ\LEW]:m_g5:jzmUthvil8]9 R +HK Iha3 Et 8_:W@v6ϣWw.g8lt.Qq@ UcseȆr TejJ5gd0 @  SA`#]&>'^WBҕfh4FZRSi+5-5Jn*S"^=92r]w*pL ] +C]"#*HQ1$dAѷgW@WOwyx[^8_+ˣPsmq]M+I|BVT0sq +-J1B᱅i)8]O2Bx4-.L5-J7EU`1٘ ,FxOYl1s-sItȜD;gONFDdYIzNY TAo| R 3LJ*0ָ*(&4pAP !bSm 6FRmӄA6#B6-Rmh +mf `ha]6T<`C6ևn'_zmӏ[~nkqG?(|\ J_k݁_)}r/ 05W]F)]AN^̔CJbp :ʼnYIQ$VYIUr qq+3BP&$ +BF]}DL'H +0ŘP?~~))o  PJNhe; bZeJDxyhx{Ad׭|!*Woϓ.~^6$/Rdrz{i<ݨm:wꝬQiu:*+W.j BlEkL-JVWBrR8ɜJ&RBT)r*\DB*Ib;8X$唚J  B O hO;<ѱvogb:<< 0 eXQ ZxYyO0ӀA?ȝ>1?>ЇLwʩwڼt 1׏uz=9pDѓ̿qם?ףJ'u@pbeU;3VgnHfZ5bifNͪrcC-D,78SdND#2ѡ+ʹS-f1MƟmĂ`?R~j83Yz ͞>7z3ׅK˙ރv7COHOgpg3] E;q/5LwH/N[q-P+ʔW:u^]d6uMz&qoOtA]A\xz܊UN@UUcUSDDnvsvgHnn}h׸#m3Gc'cmі nM_ Sm_'Z><y6PBu:w? W/L0=erhoX@6sjIȣ{-B8awUhKӻF P/0Fl_g`U 6૰8Sc}#ky=0VW8u=g0>XUu+~Ctj +.CXi3|`|fғ#۠{,rᥛ`|\st2!6A~гOR!sμftJ@wR{ @FG#tn`N-CL0-L)ES=jd^<ihFQ͒ű;#e ]Me }'K? 8a&R8".]݁y>A!b~yBzZ9? z^=GhG^صoIgfmY[Ms֋_]^^~OxE2M:цir54Nzs}6Ax7 m"LAo oM"3f9h½">ӣ^3UOtM}y1i}c6icMuh ;׻;3ݥ-^֥C}RX.f:6ӎ0|cP (Ds- +s9]AoS&[9 w!b| 'vڽ}Zlñqxu;MX+M~7/p^-[x=WS|%?h?]᜚G8Bzo-&&pn֎f~]MLMhjz8cPa9hAv^{rŎ:t/s{t Kã@ lxpp'w39t,[g< ZaͧH5K5U8cjnת8zLL lؒJI \1\<./vKsǾ:[bw,G0`SEjP]į +UUX8c ' g:tbcl]IŹv%,9L;s +5.4;x5jZC5PkMi&7O5TWqJ\{.je%J[Y\ڥ}K-gJPvKrmq|J# Ef`)2Af>p&Tu`b$KgfM%y \#g"=F>lv$p8_$lX h"YlH1Xwә c.8!q2bg3DMcRcvDG;D9DIe^ B]JiqT.w2&$4=Q洭a8I@A XXWIRPE]!**X@u +##4 E,?{dgɀ={|<=BAE2B3La!閰PlLP6i8:YHJ,EpZɘdH q'G4`1&EɌ5e5#9UP*!P0 +DP!ÊЕ+‚à + _ z(W1>Bo _<5.S)dZp P#IA7dL=2F ~$@棜t#;$^nĞ/&RɁXC]J!p+L=\Dr1DR%F<1NB_[JRn|N-\O'Yd$@)ʅ+}D˗D¥ "XuR-ֹ 4bHiԋb-:HK!4Z/燨tt~ dJE>l<|qQ{)d^L\tW{RyfQx*T%"Wy(5GA&swsR7N˙2SL"JR  bDL!f" BGM x>px\.vÙ}0:W_m]/MN1&wJrh7kܐ[4`Eא֚c=y7R8Ӄ ,&܁]½ÒqT|| k8>5OMt '[6B_o;o:;svv@..=J/+k#WX8nz>{scy{s 7MBSvfv"v p dSHGaخq4lFpj|i7>vawEF]-}=Kz;x}|x̀? o6N5b:1=-VhN$p[H4$6"ߊ8`X5 6^Ϛ1l `C\F# p=/5^>_:['ٷ1n1FllyzQ?g0>pmFq`{.x]@\`} \`O-v77ƪ:pjfsk5T5hO& W*{Ri]"PEf.Q<8X?G{gp,խ3tyn.` 0  F9r]-gvWJUUlW] ܡ<%"v 1GQ(ssٝ=DS̡N؝wAʼn`y*A1Pkf( X@ @qpŹ 8îh7vGvaʱO~+؎` LTnRU}dNz͙WNڲkvgW6T>a˼z–q]uܮ<7Qfe{YKs2/̒ubݥbqd7|f\,e/\zldֵJVCd5ڱ\ԢB,h.I9㊅,nClﴐ%`%{ĂX!fwI<ՌXoadlA`MmA},{L 8MFy`%1lHؽ1M?@Ks=E̎l8=z{YLbbwޚj͖h~_9n MqU(rڨߩVMTV)l³"؄e&хӅf$:YB-a0٘-lB)Lqt&X815ɐOFi"8z$FcRt0!qhiYHoBi&Az((d@ PZ=$(>\2.lѲ* !0RXk\N\q PKr' תEQN}5nq'$ZPaA!AۊE@.6zQAĽ?ܿ3I0`Yy<9}g[5+YE4jV 5IJNbʧE2N"P)$PcP*D + EqЯ +(@OVN3M`$Ъm2,Įf:/ +nCF{ RH &Ljn 8 ! A6쐍a2{YmzǪs,8L6Ak5TKl 2TJmԳOB2hzNZSw4jJR>TP2($ +X.$2J,LBI4"1G|0/N |=e'B&_lx(2(!L~Y\񼀈@x8E,ڿxMBLvN ݧn+cw#`;ÍwE}4]ƞX}4sKHy߮Bvi{צ[U\_kECmV| siDV :, +uw޲=%Fodo/?5gG;ur6t=@^swy=}zP W]Qszswvjj>?ނj~izv-WgB {iz}} 1H^Co*^l zEAxu|F[q+-q_>h"IE9~/g$eCl7Rt*=J־'/OM0s]baf. Z0r&>m?@#$ AmM9\Lq9i 9HqNJ#ŝp2ŞHrQ?dZwl/iTNY{t7Eᤊ9kR̝hNT?vDSmgrr9HqFpŘm%Del!DEDeN儢Dmڻe 51zfH=ڝB1Gܕ*r&ª +wpZ=[-i˧%ղj -ҍ_eq:%\%eZC +Kp-Y\KX3KxLaT G,[I~ByV鷃\j^t}7'j=@TZ;VGjPh5\RqJNT(d +9 2\ I$$b ub:L,b EE +BV΁l-d! Y Ht*(\(*I;hV.H gp3])뜒Mv3LX=e Ouend/)d+o15<%V95j1ؙ̆-#-y5ܬ#&ͼlT  *A",Բz5fm^ 9cݥңuwp9c9gowr/V}҃c#3c'#gHyh+eh+upWUdW}v%՝. [ KC&f劝PK+v}N1@Dk]wـ-VCzFoE?> >M}ad}d7i M>mMU6ᦩ@xH7Se{3~oWcվk 59~5ڪfkm}[O}fn~-4h;1=.5521,ZmLQ&v8F_QO5=`"+1BA5RCv]og}w{WBP%F@[%jz_%`_޽~9 sȩ w_3w@І^{1pd<UC~C}/ȫM;'oʙ! APs8 9U_TUAe)AU /oN/n8{~[54A׳+l< 8=L/ýbw@p*/ wPwۭ.,K (Jp39i;pu$< |wgٝvQ?!CanE#t xfAp&_~s">HCp|/@ 8A.@-{Y;Kie%_<9nAfZYyki1!؜r؜|;Vz֮0+SJIKII$Z.C >tOcNz*+҉=oO*ΎEIgƤC6'CIg(Ecq[ +9%RL-Y2 [0$䚙dq$$6ğʢ6̤3rtbW`;b=){7.qf<6ӑtF> 18ӡƃY m;J:#'&s;Cml;[lt6MD6Daw]i.ۙJYObtkw=y헬ٖi\&U[Y_VYkeU|Vnb[gyJ +eɱI唥h\gYF(#~Itۼa)eɦtHbQq&4k9-Y0:1g4qKp?Gƅ!%+pa1S/KBBW_@"bjOQy0I@)N:A1Ƚ +/;CIjP?ꔼ$ZKbH-*J Q2bL&rXO$f yIw +J$R B}$C=$Ґ@tQR8P%GF qABH'r!A!HW0ցAH CpɏO & A~Iyzy}tޞ\<]zy0h< Nzǩ :=w :NhݡШ5,j6Z"S)\\Pr.rdRA":K%)IIjMtX&b0 +1V\^B1;t=@drqfe;"3e S]8ךtT[&:Md.H15<%V95j1|niͫS_MkgB Bo{VqUTPHuUE*AI zKBX$LԫO9Nql6BU\|\;qk]y3* ]rqvo4Ha8ey8yJ7`@e@e@U3(mEUjҖ@-EƒzI\RcA5^e4@K"5gj%-w{ X7 +*S|( ↁ`0V2C30I*ƴWL㦁`JVA5zj K/te`^4TЪ1f]6m*>Ev:$I;H=Ivx?յ|x?8u|kZN}Ѝ}ܼꎳ6;IsbDHPXDyX7bl,ۤ(Йv:ӁF@mVoQ6%:Bmx ȧ@6jhA ōB̌6w KkFQV# J3\|QCu7g嗥yY( V|QϹkT uU!& ]t=t]Ig9bQF,DY"j+AbUK4S' 5<ixpȄ"u}n5ܪ=˭]e.#WvYlv%Y3ax)O3 O?*LebQ*Lw.o+~G7n2_(͝krPSݾ-]VD#d$pKHwzUvN9p݈GXv%jܤQ/GMWtXɝ;Ie>{}xp`?=|pQ.osD% +{#6[Q6'wT29,+7[՜EƌIaGs֬,rNb;(̈l֒u 8JcDBȌ@"0`ӄbn_hx$"8ABf+tWzډ{*!1nBjLH +Yx8nqz[pt#=\ܔ8WŔFJܜ!*[W'g. +G'.6TNT +G{6kP8(iȕFv$[Hf5ԎFa ܚA$dl,eVVlJ*JH`)X҈,fb$"ȸS:!_(`0Y|6<1ʴ }}oL_Ã? %*Dxvrbr8D~㳬SI6y3սq,7bux l0׃܆%,ě2M-os,i_M[W|S j|y75' >>^1V-pKWmFG/,$vCXL[J]zhjRM%X@/IuX=@j2h&ҫlhYĵ,Cmuo`SAsj5=sAГY00Jfqt&ISӘ7i40Vqs*hF[C-aN ^Л +Z5f׬zۦYڧP2|' ךA=ѱx?vl9wUTPzU@]WBbIѵn @ -) +}LL&+|}'st딳Z]linͧO'dž;˜' wmJ`VJ EhjUWBFAFgAʙR28ȁMp;!hCm3Vj~u + \`)uL=XCՁ +m-0V]-H[Vo4SVMw%/A'zjЌ%X5/qmuXPDUphnA\JZB\)Td,5>RBP?noP>6WYCBU}:*FՋ;_Q-ve4yJrHWfn2dٖ@P( +2iE ʞd@8y!=(\:4v wݝ+ lpeh.B Lyf L:#<. Y$dvIT׍ vP\=3v\9 F.'>=r 75VJlɝQnI(Pz w0?5(?@Q&. Ϡ0'5&٘6wIv2)qe&!) qꡘ[ӂcr/F`]"0$easFo c}ULs)fb2Dg$1H %E'/*FENB~$'z)ѢiaS^8*<.8Q\?M3Gh!?M AlP%;ӿea@ӇO$p2. ġ@Sq{'0 },ծq=KrEc?buF;FPNS;F4kB6Gf{\8/t~Œ|n'm :?6~QAtEwKTOd6=Lw23%?ڂlٌ qyntw vbO; l;l9koG8;#O{3VvFT279#+W[FRHm9ژ;X˖NnE!Hŷ eV"#rNHe)BӼ"]>I;ǡ҉Fſ9}@'_l\{={ˏp^6G1|b;sԏ=}򰯐]'"un3vy?"*}|~'<ÇmǑPlۣ\ۅl PmۼQ-;,Ŷ>–^C<nelڿg+g2/l[6n kSna?6ل_~yÎڍ딖@fYzG`VpvnNH@fKp,]HjgIN&5f)֦[vQ5ZEPX1J"KA&I-U%3I%VHT.L" KE"%J !@"@*JH R!4*Vk%vusswJ7xXֻ[Ii? 42nJXIk׹x ]X$s rZ{p~i B9TId@b^W}v_On\oy۠; CkLsW.> +[|*8_paP?h +AG~5e}%[^U1wƜL:4+lfM] 1!8ZSxrUb6^w(e3]j +vPK+q<[T T&JQҼ1Rm$eYꬮ5K=7x>[4db=,w=-HAۭwvZ;]iΌ鹫˟E  +`+dXonVZ7ߟM`'ily>њZ&iz]Ficz_ ZמE促#_/í[i::ZKTbtۗѱ'rgtdY]V5&:(lYFl@ڛ&)jRé;8Ѥ7ڢc +8X&& lpY&[Ă&`%057QBF2}Fmz s=^3Ic^)P$jCuФ H]3 F:`U:bO$]5X@Gz*:^QAj@[4jZJ +y53FS)%WC1 %.Ww_mPYyǷIw '<< &0\6*"te2xtRyĘ4M$U4 \)CS +v/ K$&S$,?A ܔ7Hyn__v뫩e{"9Q@HHcCjJV@kPTއݙž/~}'3ya[U;w$1*sUdz*r VeY`( R`znΦ2)H:sʾ1 +0B}Sr G+ )M w5L^`*$hWævSYUPld0&]f -6lCy9sAm޸$_QWO)BzZ)xN~.< (y8#2НPМU\H +_+RsyXI=@掓)8I\3#Jrb$U:BDJvBqF%DΒ5:P&Z@*dŗ8sD(|MdOȃp CX`x_] j}R/'msF+zo57XX{gckHE\|7CEEIAtgMQpssqAj{Oa*5JNJFA'SLrggɉJ$c"c!ȤTH"؈X$J  B OhO[c[~/mAw9#$p,dDӷ2X "c8 ]HF}9}& #a |Cʅ;X}̑#> {8ۈW!w> z?ƙSY82|;+g6.:"b!HjVs}*{@oy۫m\޼Ppz9gN!``W.@IpLd\KpאCw׋> |YݴU|csrϦ8onm@<,}7z\>OzR>ߏtTXuVwAOmU͙#P͋oͽȥ7}}Pe+shҐפhoxm@g͓ДWf ioz +^$y{%iݱzwSL}YңTsڪ|y:mct 雲7/ N , N, N=[z44`id}iritd zerᗩv{_,cr,S] fKbޒO }mmU/gS޼Np@8ӥA.2h0! aPs<K';' _7XM>;xĝ 6fwNd}qmní ھ=vw@w1gVބnkRfB}7*) FÁzioɐd2$6I)V 2FIu={H=BO5#1cOM>X_vt;!RI{]WWE@ uwQ@zEE,(J w&83L@es>̜pi(Om'5UX{$5\Q|L]atTm.:OVB#kO"jruչZ4*%^myfFQ2 gbOC+ҩ4aeh39 %;RFZJU4,PKt2mI +CaIt"j.KPN'y AO%`4dhj&EHqx.!iq +N3؂?N>F8"pѠ8Ä$ $'$Q'Z@vD h8}(2?#1~dؔ ;Hwh#i_dݿ7 +H>2/OxwX^.{ +]:=@h7f+h߯~>;@Xo& ܹ;/_}40}~ ؿwӿwH;܀l#Ne$t`0{S +H)we&sQQHqqVRȜaIX;(Id"VDd'5%vFbt (˭D$;dBFD!@`-$ 8$;η (< +D23| N(0tWʊO++ZBV̏Q?Gmy LyB?Ob+'Y}a->O{Y6剱fi}K}rRn֟&\1&&=Gq嫽qYa[7ݨ ZoG_keXZK^*Q~WRL!C¾׊?_w S2 +]/{3~x[&JnC&wގ`tA&oF0L*ތ<UW cT/@&O.a }P׆AL!hhnd%n.M4<\yafM-q/%zٶ{usi"nZ޴0zoc qV>a?[ afF kGFgFg>^{61׹69mrg4=yf\Sg{V ko:unXijZ)nqzLP~ [uK7Ċ7^,>Vda>H 0+sO%@G{Zlu0]0}/x}/,fc_3֘D,0L,f3a4e6w F!``5#3s ,@-h&tٰ6n]_+Vၞ'We@%f:AHӀPt^L=½ tFwpq#z[ur e^ +Ket4Vzp($(E]aL[pPfh~9!`{$j2$6/1A1L{́}Sg~jbk~6AI$;w $^ * +*(P""*bltEE@ߙ/z&ufوd><{$UlDL~6],]YcGttFFQ孏͢"wd"۞Beڣؚߒ[iT:BئT\Up6a'ӅхO +%Zg#$3UpFZ&Af4Ai6kR TLauJ\]`r," )fA4Ⱦv]$?Q_.J7}.`2_l. (~8?u!~5~VI4Jz +73THf%qAJ3 X@HQ/!Tybwf"7g3'W#G)+RJkGr QJX $߅/('>+#_}x;,x\ɲZy2 Uy\OwO~(qj9_-kTZM-#[-z9Wx!w_o r_@+}BFhTV^V*7A1)}NpQTy⼨l^l=ܩnnTrwW& pqvsA\6. +J( +bfJ,s^ L*9I%8 D̔"ȉN_( 8/ fJƧyt<:{2prǶ0 +UWe,V1q&^^&-rؘP/~ղ#9zۘctg!ӯmti.+Kץ,g˲ԣ +&?x}NOC\F/DX?!@o9O{#KǺj̼z`:Dt'_꾉+4nY.ݱ[لguljzPɄ{hⓩj0k=h;>=zzrxsUǙNُ]]P9c&ŏf^_5ўA=Cа՛{ޚ}ս7{}Fߙ}7v84}cHhjq 74҉!/̚G:f}>k{c,V'saGs}M!湁yPmP@l|]US]xd~ܛ{^ϋ#3OJ+lXUS`J>46-prSGv1*-blUmV0v.po8k_Fc`[ \?o5m^-}XV?^v `6`y }zYžסa' ~ vz\!ZD Ms e: " t 2B99;g-NhF} +ɯnٍ茫**tt W+j0ҕ2`uct(0X-ʅ#sh1"`tW,Nv'cvUPcUc{T^Q`<qeٕZ#;Qrxv Q=rj + /+̸ZzLAJ73k7\6˪OVv,q+Tv`wexR9ɺ.HXVztw<\ƅ|0ԡEӪ'A Pz|)U{,,r/)##UJxBry]IeFVm; +d.dyop(@_FIƢ`?oGH8=.@@ao "݂ۓ͘QlAgŲݵUM1vDGmd*Q,(~G&)" ,n[=z-ňNߜF#mJEPnL gw2]]$Pڬu6B2Yg$Э J'CجI5S1e)qAtɱ5v uDj6~ @*m|$ߨtt.j ~qƅ@k^@Z\'q" ]1 H56dR҆X IQ/9$TymQ"7gة(4;ӓ0n fPQP<]3qkN(AEJF0 *(Wuѽt4 #rUT}?MҢ0kEM?IKS5zuN%JU~R%SHQR&TO&'T&@"@2mP&%fVjJDz)6YDҜǩ-"̈mE:=H-ҍv q2 +`9-bvɲ>3;(v.#4Ln cڸLV+"$dՂч,&ahFs;``:=OR|JFp4j5RRRbJER!g)rLNٝӑ\)"!R7RH6P>LHh  @ %HHѦ& x"Nz";ƒ u&`sR}l(Zme[C1ZlR|ϬğOC&B>Q-m9H&.rT!X`S}u uvTSګ;j]ý]{ˆZK=_3\_ۘv2K v![JIᡚeYJsJJ{+*{|2;bkhlIZꥠxQEJ^W*j)A_%}EVACS%`rA`"@] A|CtVo~'E[ZWlJ!i D4_UmqcT)VW@m GW{:\<LUD= 1OE |s<s`S~`:V +S93i)O?$u + 8|Pw- ]; +iWr9|s)`..dAA˄aC@ԙ< ~9yGoc* @n(*/wt'e27=PG@F#8m  +0lf9͗vorX|IN姧^T@K\KZKM[s؈y՗ +Jti\YK[}!7-|:L>M͢%9H.ؗ$ERM@!7`Oªcd$?߅Iˠ::xܝ1ŋJ,?#vkYvayy⃑xpWH-4ǣ߿ǃz+qfoM\=Q\ݿbwZʵt熥BW\F81q;~d%cXxςm]Ƿ(cr-blYOXVձ1R1ѿK _WclL ) ͚~e!׼W-3I|]557uy9k:o.׬lYs;Kc\t_TRfƊ%?av}X̴e13LM⚞3k7& +4kFM[`jTB̏3c15n ?5H0Dn!> +(:O =CҺӄ9>ڍ4MI:(HcLm5P1JN¬%7i0 +c A:(VEHBL-"EJ(RR:.Rd('H25Bbh.X)!dLzz%]v5vhp䶈0#ⶅ;< H7nk˅8vvA1dY\a;&h1Ym\Ph 2 +jCt0Qfݹh0ri zC0zGǧiYZ.V4\*حϯ&=$NB +s_vQ@r]ݵK.ŵ +(M +H $B{tg23I +r9|s>ỷLF'IHDlA(Q$" ELtP&`΅8+|Vxجg=Y*GN<8<><+{R> +Ⱦ|]L2M^jl4H(S]&Mf1m`!{d'.N7)Ķ$X۟|MMt8ї781Nj./5ڮZS#mJ{ 1s\SCS`E!I@;h1>0mP|u>j*JǻKORuHڤyJHWBUqT9Ւ^dWc:u(Mh;6׬>oj$cD߄7C-;zrw jg?n: ޓ?:.T`]Y߃ƹ:{z͙zLH|oO|o*κ] g N4Z^$M&yX<]W3$y:e*uzκ+捥ㆪ̡ʛU9{n.5~oc}M"Q *y*C@`΃N|lua oJ_knmuL/WWW+XkcxVzelk\ +*'S[2h*] X Xx O0EÛB𚥮#6ˇӋ?1<`.UF  [Pq ,Y^暕`WK-x-g,600d1=z A,2ݿlr c n_[t+쏫w3[R~w̦xq)8EY1ה2.'" KRkXb gé%ƞ.ȉ.ʋ,sVܸ̉㏳bND?ɏzI8VgVsl2 Yl3v6NܤPѼPH{,?)FL +£Î%/̍rF<%[BXdppV<Cq"2b cC)i1qH/iiBwrުk&RWhˁC~6, %.4wDKM! +\O !qB{c8{:n)M/ ]'ٻ‰}{K}J|g3~l)~;ʰtt=NE5.#H]ϑlll;O t<I㱃lt;DfamvDl ζCZ"Bضmðl B9iShPfm()d14pփ"wh۵{H@WwJ? ljBॶ PYppW.99l(:;r8)lk6ĪE"̂qX!I$AI($ +lO _/qap!@$$c q$Rt4 +Zx^Z{*r n7ɃIr%x"HxЩ=mQy٢twqS1\\ g+.N  +'5ECR#rJMAT9(9*YlRMHrjutRN"rZ!K% "؂P,I"ELtP&`΅8+|Vxج[g=YϪGN<6oF4gTMǂi\si)4k-2(ڠvB}y`PvA݄GSJxR.O̔O*$b )WC#mŘR14MT&ߎɐw84 Te9¼T/G2d2uݸ&}Rki՚:vY7AfnD#fvcpQ=F10wLf4i5 7Fu&7nZhC?eR{>uf}][iRf5Gk:%4{QI=$ouC|}'E3CcuTT:X?_ܡTx (]Xn>k`sX6е6fC>i00|C4oCfac Z +: =Yo-lb6z? U jW;`-[*YJJ8h{YF-eEs)HTB[Q `FQP,O >v}x@2 T?2{k37VWUl"zׅWY@w* +0W]<Pa6JsUIыl,lMݡzz0zr&&zM75lUt +30Fiei䧒,KS0Cr˹e\}y5ŭD@y"Fq8)K +RWL|d>T"7O7oO +W/.wD!rMD%.4.tN.B{|M2999 d|=N+;:)x|G\G#px\eMdl.C=lM `t+||l`8 Qp|biThJmQkp&coń h:LÝ6lW.M1m6:j"|ogg kU6꨸" ::K *˸;ʪٔ5aADzлIcwQ1{Uνܜ?$]kP23g&Rf6滫CG@̅CKTf sڔW޷T&}hiӡ|}8XsڼvW + * 0mcM")"Fm+|4}AV[_kkf_W쪷S#u,:䞓2i c%@j{TZ@s/˹5?{4Uc)$4^ŐTE8\oQ-*0>һHA; Gs?KO>v4KBBNф&9j‰,5}'SU`g߅?x=^9wc}]qGvv=)vvݵe'UX'cv|18Dh\0[6G#~=FTcÙ~i3æC[Fxp& Q"Cx պ]4k_;6P [j]Hd=qkv[~RK* p8 %p \՞@jw *z8( r8ܖY8|h\y9z*X9xp)弤μ$nNˈ]Tn!sq\Zs8˾F(%rLK,M$~5X"F !P19 %B ( (PH1oor+*P+zqEjU : +O/*7o:W/&OăRᩤqp_Ft#[]5FprR(܅A wf%svrF՜dl8Ȥ2LX*!I$8D,!הJ(1oB +BF-_?G3HӋ!Q /& @g@J,z?ʉ0]Vdܫr -f{hf{3xt1н륛xsZ4CJj43]vewxz[irElxktMH8m6:\ +[D| 6uD1OOY4"N"l9c4}T<^˘<ʘ6]:VK1[=I6>E*&J5e4 UVoMg9oM)B]T>Ϣ!izq}wc،XzclݞhoG:X0!O& H_Ekq.7^"c +uax͓1$2֎Cff 6yӀfL=R9ggηS-f}NU~U~Wle uw'+j k9"RDF! "Hh#24\lxztGw 00P H)r.W5[+gX4׍f z rϥۀ.=ԩ+=LZ<Ť_vNzB'={[Vwյ`]]"UHQwWAT GI&2<=eCIS]U'H%\ +*hVk)2i)Jpj|xK T 0Xp/A^}+g=Z=5wSտ#hO(s;z)ӤPSc)chPg&8複9pA'9pg^9߅}9O޽ G9i/mÎʰlg`v>nS'v}q!;eEq*ۏŰhlۏF1mm;IL[1[¶qkܶU-l>Y}-lEE~L#`=ic[c&MF a~R7>@'P{U'D2P<`O+/B4A@ +=0w_QtNt@ + '(uSqPsxIJ^X+ NvHUI2^b% X.%rc2/TK,Ib D'!#,Bb@ @m +  +l"HO _+rxm"^A~+yy@LG3RH_G7|t~>|^|4>^L:o˃tǨ=u4kuh5Z&FrJ͢bQ*gdJU )r9LMȤNBIz艙bM  +!5Ak@/2>,A0} ?#/ WhvA@j.Z >aα9`?͙? 2<>Nxs;dk|-3y޿Z ) OFYzpq$<Eϛ?w 5ߣsZl2ֱhY,GL7tӛv%oNiSgULR>ݡOw\"}EUҴ2RrqkRE|o%B]ySR]M֜{To2mO*wbʝ&lgf۳VҝYKntw gc)Azٽ~ҏ E6C%o,äGS+2b7Z6iLu#哔Id +yS1A~2I"sg6;! vkǻH֍wb0dk[$54.Gm:I]#6݈eewgo5/4.XM+ᆕ!+22bZ6PFk?[;9ܴ41ԲTz{.}:Com+`-b͍ޚjuXhzWs?wlxƦҡ/!jV&N5B0(@069FuU +`QLB$ @7d`YMΰU4(f48̘lf6&2'L5h46f!e&݄ݨ #&nW_|. _|i%zs=x|;տY-5ZgpFjקz}zs<ע)*=>OX*CGmVpkkai.õCVph*4>Z\LrWY{IHB{zE(M Ųko +DP REAzAw&dмs|};7drBrf 9C{`X Ԗ)z]Jspշ7{y ZUU T4Ok4E\%& GT Ey>aW y`C]fV6WCu'׈)neK,3%BPr X_n^`)ndTE-#+Lug2,g֧>S$'I Pg^QVY,=II eIyZI(ƥ=)RDܺħV4I.3(b\͋HQҍ d*2z$kY*% eTIxҒ ebaʚt%Y|9:YܕuĒU!J&q2PĒ)/VbTj\b.ʜSK'q qUAl.&&&XKb/:SbǐEg*QhȌ#QDQQ釭pB~cK2I6dM [p+C^!Zuǭ +L1L2-Zm; *ʀms{-8c>6rY#2.|U#FJC>\ }N1)f:$m]̛ avf:93R0!P/4<[}0TQ{TSUQ8ZUxȽ<őDD{SYHIW(,C +kbE|+[q$l آ($,8%*G$JQt刘k#諗G.2K ?dYBnM*1,2,"| +ȢйX80p2yfB3J(e^9BdYBDB0y^X^h:Mi +aOYv$AjbzT(YHI ! R@`&xܪ nj&\A8{4 Ђߍ!7 8`%?y;``=D}b4{9Mo-v;f߮Q^:#7>b{vbw(MA76l5>1~dbB1_:߃Af|)vFv0ю S&1SõoS@9g<`'pD;""}z/~9x϶a߻-hO>[9coveorL6l]Itb$9RJ$bw{F v#=GfbG!t] td&p[ŷ1XŵRlmLX`ψk#Xq\Vs*\κp8ֱux=, Pb1sq8{{zynٴ{Ͳ6zʜ==RFqFz<]F2N^3IA(nk]7P92pՙ/3ΎFNX{db{;J$FBXB^zb2HD&0@(R3<H`Ǹ|Xz<2KǥC fsh< @?G-없 Xx G +u#[E:&ѧMg^zC", -l-jDR~3-LX2Y\38$[0(~- ~w3VK%\._nNN?\)G XjЃ<̚W?B8A!{q>{.C\{:m]ڒ6Pu ƌm/r暫kKnhoN'wy(x挴0 lS̀G[pl\N&&ȞlBLFcm9iGP=Ά8Ƈ#2f#Ab̡@3瓍h^g*4VsƊg9god|SuקS?ʺZYKtj,{SMNVE~z,{-+ȠIS9/Wxs e̞sH݂&nU`K!P<)z\B74yt<:ЪB&W+X|I^r$2& LyYFʔV?vmiB ҕ7(͊ +($ rv HM)^Q)(J;48?z{99 2Zל$L.МsШTg֨jSbʓ"Jk WV9$/TK,Hb%FWhc+4 ȥ;cn眏Z,3BU@p.KW r4(%W)Qũ +DAuY3:ee.4pcrs"5IltrpENF "s#kh,Y"."2/_W2fQs i_]=K O r(&;r٣lGRΘ'#!tESpI' +IGb#ao@bccp裔l9P,`H``T(]A# ~QG|rBulgD=C| ?r͇|](|~ {.X+Ȁۉ`ÅA]`l$[=9I<(lH\팈I){#b+vRl ʁ^b$,K[k'<b*7X hWh!4-["N($f Dg|%A;wx{mvrrxvxzɼn`qܾvO&6Ws\c*ssd,l̉Ah8;fz`ogO'mXj+eeC/Ć~&3 D,[s6ڊ҈d -D"! }\x>_*>xLUWWF4<#<x|}, N_6xMCey=ƼFIX[ğ& FFCX^ܔѭa?Ǧlͧwiy8ie3,7kyPS}p +Zw>9nȜ~G|^I{$Sz6Khd0-l7ep-uIxs]R#|h4P4Ve}|2A"F=! ٺwnl;|h[z:Y&}N`Owc+b-ynu +6>z{Kta=zHdD;a4k]h[ѵccW:dbe}RLծO;ߍ?*]~ݔݘe@6<˰6(!weX:6Јe>ۊqmƪN2,suI`}jWϯ/76T->hx2[i*c<*{`מnguBR-8L|] bm?t;|i[̴h0Ձ]]'N>봄pݒk;'>6j#LZ =BO7)LȠ{Vƛ&^xLo`g``z`0 jfAS]5AؼzGUG3CNZ(5 mZ >6\򞱦 +n/{@rHi(O˙n$Hx\̪/f=*luZNoR]R`*R#{P Xxnt'|׸gt3,Uc(I]8pq d~002@P WA^` Dd'pvicY7y^[|%@_OPՔńd,H͒LsPmJ/) IШIHB휋'U7"ea49](9)0eUJTqBy#5Qj"k>J;(HFE@{SIJ@Q( RC eݿ;Ĺa>|sLnə +d\2[VE%% ʄUfȘTK(Ӵdx./Kݔ4TQ +td)EWd Y*?@CR\ |$/'Ր$ ie%0 +<( #>A5@&idTxJ?|2ğq-߳18hߤh?C|ONH|i;I+>;[u*&;Ful+~ ";r2Dˋ3FGhߢGyDJ!#L!Gƒ<=<=r8,Ph !N߃8\H}? y`>㡟-mA E+͖%g#rX1sed9Li؋!B;39Dh#6LJ)FWF&bxfƌ"-> 1Qpl Ql.g[8}l6{PcX,Q632 +EVb';}n{~g{7W..6{89a@wfڸb+tqڝaw8Z;;Z:;Y831wc"%Zаހ +bfmʹ, vM bs2x+f"3 +ȔTK`jbJ̄{&Bc: |_ˈ|_&e<2Kťfs(ŦKP +;]^Q,GG'P첑36pM1$\r$8iLV'V܄+jn}ŀ=V\ +΀fMlu/N[:=;Ә?=0ڬOmvV*]& v,b> [, D[Ҕ0 b- b {a4h#(Yn/l*^hJU0?M#O*!lYقyDhXV O*mgUK*zIՁ鼰뺰8 th\0܋#_|\| }A9\{?4P^_VaFnǽ&|Ìc&nkLֿSN oj4aq^9{;4yso7yy Yz:7mntnXgWdݳ/W@ߌaPo (gF{q c鞵qu:01ձ>\Wcg鉶9u_7>y?w祫m#m%cmEcmjJFpūoGqH+쵔|i)\W5w9ﱇ@-yZ><-_iz~jIzlS]U'~e 2)Bfm/C>DEf{PB}߉gLPu`{T7ѯ1aC}(:  _![2oBԝȿT|I,޿5 +kCQO`۶gR,#p ff):yѴ~FX=tzӠ 麃 t܆=&g7u@u^G6VϽsd&IQazw"KȮ-HNY)BMTPu.4dSpQSRiScCT)1jhUJVcMbiЌy?!.RD!A\6\S"~R"qԿ6{yB}]J l6ۑaY +T=Ydv4 +w#Y2WElK:٘edrPpq\3[FjHiM(Vfd׌J(%Z,& +_" Ŗߍ/@*_S@#a yRBrrqtr7pƹcܾU79n.ظ:9Sٹ:;:qp\ўE`gbOCv5uFckcK%Q|R2(r*\&LFe-J\a%[IXD FbشDTIȄg.</`ȴ\g~g~f#(`H_`߷A8Qh6~5xHF1FþM_ [ZY #^,Þ%V_<,0:sVkmvoߕ4$sZw{ׂG8OzUtJl.%^Sur墩S2TRI?SwhN0of)鹏y7ۏ>D +g{GDŽ iɴO= i\St7|VLr5ꔾՅf>݃G7 1|A QX~k$n-ãNd-#fLDg,a~ l77T 瑖1W HۘQԶtucc틽>€yqpeqд 4,  Ѧ1Cnt~qIC׷í=}W  z, |5*/FtO={uys=u9%{[ԟYĞ/*ޚ}Y|HM!{ ,6{x M78]^IxbUTpI -54H7n4&a6nm[0 Q9 c47_Yr֌ goe  +H}dAS֌1eu՚!$C^,];C[5]}ȘH дT5WRAR]Wpm=!}v]_WwqUhVe`֣rh2_4Wu[Y*H[X.4,n\v-"˹pE9gpy!(.i.4tY 8w,lJ (9( K1@*deyWvAH=┠}UyUgWe\;Py)cWu٩e:{Iw \UK,@vTv|)A2Sog,:vh})y IىK)ٚ9+1:$,KRv"4Y҅S&$I.$d0%=AJZAbI)YcHLg5 lHۈ#qbN ŞoVL>.u?X"}|O9QvG/# +<';DEMЮD2܉v ~ =b%0Nu_9&arڲ7%|map[2*tOjw'J%xnBTPu.4dSpQSRiScCԪhDmJX`*lƄpO"+AE始Thi5Q $@dZ3o D#~[ټAmxO uEYa"@Rx;r{9iIaGpr7[d6,Rح&53}!dkZ7@KE@Ymź(QCi﹧Ϲ;$A|}{䇙iFFK$bD."ʄ^qW#rc 8KWcK0fZkta0bBQN `2C \|@i5ɠ~L&mѤ 0@FHm;TP;Ne\4 "O_L)ZL"n$*J¹&f$rH$>P*RH1؉/3"/x > sqx8.r5!8l*6xXtdQI){T +qQ_K}/ co:_D1X6gZ8gea73; +gm&°/^͍h!/C+ޙ!Ò ̻A=cx;QakW>gWw.tꓘ*WHY%uGK\1),&:$KT›lr&Nc]R1Vft_%p;]/T{jw:݂~kk=Ѐ{P4==:344,Zοn.>.>qMZ;K]]@wdw{eӇ3 C_ZGV`ǍV[a^tocƁ˪瘉Nh9s;x{W?4uBY;qh,2xԡx;tѶ^{+7`[m H°i ?\ݛ51n>meO +f;zsgO |0C5@9s}V"kvϞϞ;5[ e Y35}'og{+ϾZk_wM_5y齓NLceR{qܕㆪHszmjkQ!6ediaF-tD_XtAp`}7ss#tMyyf!00v 3҂AF-Ȳ؛)PZ&a~i =<>7@=Qw_{Gݿ^z]uPT.UATy~q%Y-1\ZoBRRN4@&=Uz}4\FAR_ܿ w.QzU{Rn#ub*RqW^D(D\/ V\G(ȕ<Ȓ\>M,ݥl_O]vB`JO"%tPs'4IW4N(&cèK!S@ENO)I%i UeKSvWy&eWEQWQI*/LˋTOnM&zQ*p0yՂī'O5;&b9Is\i&.d/fG~SlIFL|I&dv;AMͱ҉Ξ2{{&*ΎTL; +SH${<ʇhybŗQESst(\$d>Eu|9GfDR樨H"EfDd*2P$Qĉ^mK;@E3AVhۼ ;'܋c{?֣{ˆM(û0%l>՗M8mdW(Z#u;#)`)hm\xQP|$"!vۺ5;ƒ@F~{9 Zm'wt5еGo:jk6}]`𿌚メH3ZDW!ү$ +(PPi$j&G؍JDFw˽dn~RDZ9"<n*G<.#0\+T@'!^qDQpr\fG"ZHRX*ZǔJ$3{&b:~i!d> W[/$" X,%?W>@hZMآ1, K#A:(.[0F UG0^qtƧa?^!|;=oàS# +̑ߔ3;"IAgܾ9#2~:JҼ9LlvTh^3ݚo +t+bS#D +8өܹ]s* Gqyr?Hչ'H 6WGzZP4ន^5"M/ŵ[^mCIf /qWH'C7tO[fa1ۇߚ& ^~KD#FqS#b"UL S=țId +y[0]5ٍ~CE!s5=O ݸk~6Ih2ZY4,:I6틸E/bX7HƖ!S␱y 7<ڸ4blZ2"&S/' _&-oFz:1U6)!_>ˌ, ^7..uNYdM5YZT{_y<ܐy +ytK}i_jN}E.we.u?YtÝʺm)W6\`l"cC pUKkQ!jp&R#<$R8ފAc;;,ޠl[lxkL-"h+^㭐 f] eo9z0|cs= a|W(CN){@;9O!Gj 0Tbx m*x:u0Wu<DMkTЦM4ޥ{q^ mn,/6OP[FWsOȫf9Un^({p_%"{ ͽ`n>ݝ|Hs;0\f*7.+˶w=,L+H#K`z;AY64pK(ۃt@SFWj$S)rIDzO8u"d&p(?a_Ӓ*J2+Rc_M;XQrWq%it.0IKSv~~$V^J$@ OG_Zyu;'U/+PPlԾ*^Jo- TCI᮱#wS󒹪TR-IQ@VHUr^BI$֜!hD?& j ?SD B@ )Db1Bޔ9F ZK,">UJLkHuEt>lJuzyqyѹx{ppѸQ\I:EgSk4.Z*V] L0j +MU9YSR)F%l2F*ّȤV2'J1&ILb&tEl]!d> W=F`&+M創ʅQҘӠX pu H fF_٧&5gRH%sX!ĺڕb)A,EA#JGi4$s&83L><{Ι8Ygc؀Hàt-L܌zoV~WIh^b<Yq$b" K+gu baǑ]X9fˉ3'i쨜8Mw:r;VBB:|;fOP>+哝2ާ)L0(̙*=(sLWL_A^e}ydw#2 Tfu#U] PFvAy3.Yӭfz{Z3M:ϝP}3݃ng\/$CO&uCOah0ZQ79M|}>A&pK?v Seih0j;o;׎Ɍc HӨY{#2jFj1!#f]n3Ҍ%7#M&p"20T88\8 4,űڥq}ҧ鶅s du9Lc_Me=5::WCRnEV*[s5RV,U-vUz+ HƂY׮lC[Ew3H6RW5ir KoqZc]Y;w'QD`UAG8 j`-2f17 uiVg2%F!+ʥzΠHKY=6='YGA^I^*pNƨ ʿ +]aw2 cu0 nPn6,',7 PMr0\E˺`vCy13I? fvߵ^d$/J)Ќ6#}^]' q{v8bqcvejl?v`' eh4Y0AGȂ-k vXM"P3 t*0nv.a46At[cc%: m + ߬ ou"Cs[BDC-a‚ۿ-*)x&O~+XlpPpq$vP##Pxµ#UH⢰IL%q$vSH@1+Dd/v&vr1g{d"FBݚ $BNvv5 y5x? x"XttppqWy;{{z@^W獨6znQA>.~޾.Tξ^>N>ސ8g͝ɃՍ+ 7 +2 +' gbdYgdrjȔ +%N'LN&ddD,Pe" 1AEv"˚4# t|@'ӊ0:Y?gų$ RH4IngOnT. m-Ɍ6 C~8Mݶ6 R&A51 f{:I*21 =4ﵮ{H׃5ROOMemI%BygwޝJ'RBPҔޔ!tiěK_|&yy$3Z[%umj[ͪ,32R|C~T;d)=)μq;)31 E̛ŞbLnL )C  ݘJBUʜ!*1o R9\C\1ClW3Bh͞Uaͪ#턎u'&wZBhtu#=ϧqS~d|57OG az 7G&>> ԛ tɇNLnC˵*;qSx'fYkqud+c1MZcm+QvB^*FBԣ=f\/qu@Ӵ:0Ұ[_A4Q4ռ]]Z[jYm_zZ&iE]WW_IZFVzԸ>^L>7Wue֊2LR9&SWyr{yr+.3W7[YSW\(U.6dI_o,^.+{UY<]n,Q˰׹~kl@icq4,PZVдxN4Tԋ;>w`hD3y&Pg!Č4pRA}/:`Sf.oL C߱uzL &lJw7UFOUjĐ:^{ ZI-aH 4֘Ы@Kf _f4Pl@ZUT>'WAY@yU0,+Ɇ@םziƼЁ(LZh!KOZؚ"OI^ La!Ia牐ֳvF4ޓx qd1yGieBL@=2wIAz4K3S--e) f\¥DB\M@ ?@%\a❞6 +ԋOe <)ʉ ˊ +/̼^ )g3 +}D#wn"QRoTF}|̳+! a9AAcqG3٨g(Bct2b{wȂ2((ȂnS)LhF̈́ LR$~ɑ?:7 2v =kAV_#/ Θ|3Z"p>~tb|]6s;|n_e}׭}<.:W xy{PT>CŐ/;Wd39r!f>q?h`쨎ǹ:GvDY_}sC!އ2 u?ț^=ګ87ؾ@OwWxǾܷ +Ow~vqN俸{ݎdNC8͆$܈Ɋ'q'1IqB[-,BkC$ +LDB*dėrO+}ςaᱷbpfo nX}gB(HdR\f~.7'ԝlݜ䮎N;]nN8+WG4w2k7'GILX:ٓ YѰ5ƀڈFcMc$Vrݚ<3`eiE&YnH&QHR DG K{b&&E"2HHGhFx| 5i#T\*aqlؔb2U@Y?gm, fջ}{Dc4%^r}ָ ׇwֆvVt;7hmh;,nV\|vg f}wf>;-oV}{lߪnj^m5x6bfU~N]tA~T3!ODN!MYEւ9ua₺0iAU`Q:~[3)-">{w]V(MEw]R. "M7h$$P_tϙLL2 ݽ<={93?$CHM %zИ"EЖ,E oPg+giSB}BT)y%HɂX >Ӑ.J ahtH_Gֺee 5h=iI7XOO\ghJ\o0QoQ^~}՘Q}Ubz+10p]secK-m/4?(ZK6FR 4> %[KU_U[7jN^-r2PTd2TI*`?1Z//R1ZϟL_i +gT%IP"U1̋=MQ&xqN~,Vc̨Gp91YTQ[1ʞ,#uECJ $%$#*SbE]̋ .X^QQu"3 ,T㮔g.*EBu,+ˌ{%)E !HhQ⥰⤀Daq°Xaha|VHA08?XH#H+$\pVQ2@.fD =::´R +|rO# @% LCq!Ѩ@ Oօ[X oMS4/w}Q7h/m>9 ~%5|F L9{*+ƙ[7%;{7BϞsP_CΘrz8~rhPI蕠ǯOt8z)GB#nj%?Z?]E(}? +w:;YϏ.=B}N:96߹xbuqsG`EAKk-$+{,(nV,]lqNFYoYenkIk3`η0c5\10˰lMcsX&̘fbd wr=̀ϲu \]]==<zpxڹ9;yٺ;ڸ9!.\\]](3.غ:9bDfLeH_`eOCmkrFakcKficm Ҋ'2K2 K˳ca܂K03h8cѮIˌf0XL&Kz0,LBZZ —=]1_U)~}RT{X8cnyTch(< ^4isk7,ԣ(6qw;ϋPf͋y ;{\XTHVOVů׆UG)RKP1}E4}-P+-sYf-K;Μ%\W ҝѓJ;R>/J|!)]BC/py$F4% +bN2M&f%S944S=BX7SBe>8Mޤs| +HoRD:JS\E@B H hH-B&D};`v$zog~=gwvBsb|^7[l+PKlm2Lߚ{2GN2zu8|E 8bF5FǨtPcӸӤ.f:miBAn1UגehiD<"1b + q 0bّhA\4 4d9FYSYSQ!2 3 Ø8Ӡ!(_+ ݍy&YcǑkF>6WՐn0)P C + 1\ijjx`({x~|DsR)e>lu/Lu 0vK@`0hNF=l)RC/1'2)xuh%vB!@#?Ն$F[71"a}?jD끀&Eb)l4 3@GV[K[!A @tWu>vu<!!Z hB(> ptwJwC(s_Q`2ԕJQA-@𴄤Vu5dœBB(@40 PfdoR!Cl@pwnP̦Td+(DAu`W5ĮJ !(`g«h(0yȽ Hps!XFvゕȊs*J>[s3du~ʑҴĺWcSז]?^[riQ** ss]OJ tbi'}Xp)*T\evBlEFl\ef|{9Qwc*l$Wd$_I$H(X_2J[Do_'$}--(EYُ-L)Da +_r/Qλ 9DF޸s B>O% +,?qaB{0ֶY;-Qlܷm5@=~[@?]/7zDҜ67zbDA=> rLjr +pKFIj} |1Boj/ѪN6x"Ӛp\W!%ۙ+"8b v{{>c}S ..>&aEL] BѾ+GEgh,99x{yl +D{ynvv|ύ5 >zye՛Ó*ܝ= Dn6]-\QB7Wl8X8޻ĉ$& +B9X |k\> +o\Krl8l dؖ*cYcdL2:Bc RIE-lY?gR4cs?L-%&xP>7q`LA:7 ZE*0})X g!nQbĔ[kRoIEdERuFrU^NHݐ䊜ϒT~Vձl⫟#*QOHɷpF//J, @EN^D̬{~E~\>?+6|\|9P|؜ 19}PտbWT٘G\>|iч/9B$h[d"rPzObx2 'qqg!KuW +}&<|Ⱦ3I cV{O%'-icD'#Hs<^D*mٝ/"%w[%+)#<)ljnXcG"vƵ#02w^8ⷄvDfĨ=}Эy^ a~@Knp:`oAq;k7!fF'`: sL?/ہg;"t@2sh,wt4&1hnFqn +FJ( +!2)$髂 5=` "Faq O?OHPp@0XhH ޖ`--ph+?g?n-/,|q808>w+0=3J5l{b;0L yl6ZN5Q&,toUl--l4}ći,l6/5[h[,M)ĒuvL:Z[Btz&_/#:~5r#B1atbx˨6j_#cq+tMXiJ|ufC|og]j5BhLhP#F%8dՆ ZmȈ䬘2w%KpQ+a-RtKT8.-X KsÒ9IƧyIΊN"XrԅtKJVMOcMJMMC zesDiB@9wW V@ ^ " JSKSBE@&.FA3aa26,cYtkX$-G_`E I]` ߁cE T߆n4T,u:OiA'Ze(HRzJg-%q&Q& <̀ Oڌn +;4 (JVt Iu@AAXɏ+ʻIXrcEU(;Z((- +P@z@r JHC,'J@pZ$tVҔSWņߎ*.,ˏ,ˉ9Q +-cgb߰&:qN +"6Q6*unԈ[ʐ„`+Y~;)$VbPq< y, ^iDм8kn\#R2 ͉%RBgŠ + +2(QFt :+Q挒((. L JP&]4 $R$^T\&_dt?|$t +H8 '?@' 3@s$Gc3zo_G|IHG}OYuurӌ\:KtIk|]\'H_<:tsWrc$hF +־?yvɾӡ`T=' 2:4&r5xGq 9z?Cp\ j;f%<ĖGfO2G@gڮ[Md?}S=2k-u=f1;Mى⬙ٞw=O? GU➥ͩո~T-.sF]h5fpϳg-7f07fPm&yo:o/Q7ߪݸjMo/t_?b nk0B>2)~֡Jԣ=nz3;,yB~:ySJ~6yAVL!>O&Tso4O-w-L:_.:Lq*NWo҇P0 ;06FnЌQZ]qd8[cH6o25Guu Mӗ)]exEsλyu}ƌE~Lb"GΠj$.1ITTCW*mQ¤T绪P ުEPUʢN6V'}'|?M+_q׿U!jґ=DuњϺʄơx`u@E'muqiBwE\s]tEy]4pDruك];Y`VQm&c8dY6s5,mwii>5qrs(>:#$(:3xr*w}"p*$ٿh,;oyV4^#Mk3mi} 6R 5Bv^αZn:&z-խ2VnJ +#3xQu2G0O'_c CCNϭ$@] T{|;+tIb}V]ġEB2 쬬TOIipIBNrِoY3c{~tH%(NH +8_@NEɀS5Pّn%AWDn+}+8)?#d_.@ypʸC޳I9p:?v̤S9 +K"K**n$('DʊKJo:\}zw5IA\~&$=:nڑ;#CFSW'oqQ)8 .(%4Q|"o^cD>ZpH~EMaȼ5 !JEMɹLˑ:G58@Y%""!2Z~.FμhqACИz.uRD +IC9|PS"avPp!aW +M_8+=x$]́Kqa/tPN~}q=a|}O;맳ӡ̎9k ݿD 9zݧIȏ2:ydqt!|BCb:d#!;E G.;bԻcH#:lE2uG0;h8GÂ?i{A|܉\9=b ]w$.V_pmܶF`[|dه&oK'/FOA  @w*`uq!ȽU<\˅S%H$uW2H8d + u d:䬐r;25qD,$r֕X,$ðu0 BZ4"1(tcP)=<\||6l +$#_O/o^n>^ ޞxyxR9Za$`MM?^} 3| $;֕3H)gg͙Ƀœߛa}]wzu>oUF&}cPfr0#S,)O*r**Ue|Ug> tEc-RG]5PMH3%aJyV0І<9Oh9ߏE,B^Po_{^J_;w'@% Q! &d iqW6k@&)SӄY 552~Ex{ǽyEC摅:b=iƀ[jmct/m1ݳ"uM4^Lz)zaԏ-]!D4i1M[qmֱ dr:VTub:cjxקz?=\n񾧹`ؔa5wi%L] [ f&H $myn6!(3,=YlsoaY_Z,ryfCmHZ4"u։hmeTd.souO^4. dˈ6:i:ͲYuKwsG]ͣJm݊сc^OK0uXxMwBL'i2%"u!h/$L? a9S c?F[b`25?4s$ 5k$ 6ACfsf5ɠÀ^ zu+z U2L^T`v]倡?WY[ՙ(ꨳ{惻3 B7HPQgLJ +$g $%'m$@hHP$Ϟ=UMݢuv<{} CbQG!Bg_L}jPO`2Uqls,VMcfUEbd$* 慷h4FxIb9G$dzĮ3E)' +n)ʌ+ɋ .Ȏ,J,{0= +ʦfQQdĮ6r)aiXhCP0v7Q;r8,*gW(9³%f_A Hx6̲B32.s8,v<8LHz9 l!i1A7/!zn\ +B+7 sܺ*z4%89ZoH:dO +ҧDقsY&EJ + +H:Y=xtf g gAOc]>ӢbOpय़._lV/D^8 ` 0Qa~:pe٣l~8sG60فOG`|Nsֵ_̾?a!s`ٞ`6w3X:{4gϑ`}V# gW~vP?̷7a=?^_u>5ܽ3gvC v7N@v| +~ x;/3-. 5Xsv(Fɑi<xi=ҸۋR逝VE)R9ᔎAa:a +J\ +rBN.Jmhǐ)r(CIRQ䣐$?HAw}ZsX-@3:}@F%kTW'GG/w^ޮ[6mFӋitO7w6'W.n.{W5t.NV 'Dd]3#Cu:.;Mkjg&Ӱij6ڎNQkȕ ++%CrulRK%bT"rJ)rm\B~"k~4s} Uiz=ߣ;ՋC_i,_ٽP#+fw,^š/- nӶ|6;Vy7sl?̼[&98q; ^JB>/Qd3׻!J>wnf{\E翇w.gP1 CP|x[.'9\LdFr4 :=wMuc\&@*2;M҉7bM>B6e/7wyK+-Cォ(:;LI-$!Oov"ﻑ2Fy;STɨfԤ͘j:F}nF!c"c iCkʜjZ9Ӧ6$wjgʛ2u &;;|TW7$ ̏hoLCHi0F_F)cxkkhzt2Y*LC3JڻY=cv@~b{Ŷ8ri5-"-#vFMiuA֥K3?ܸ4`iZ~˃ ÐbydHyb[77,jsR֖muKIKH\M<]]S+&yZHB4\C\G[F*F%*GM12+),&ivmGb.eV-5}1~k)m ڶ-`I,Ma2j) Jr(Ll #tQ&iɆҁfdE*ofid#~h#z.׍aci quumnfOېQsF;Hg_'F\8P]%>S + G`:eY^) ZK^-\p +Ie, Hg66WwߊjPCUuj#l*PCw^+4kcdYU>}>Emw"3Crr]׭#qW3dLY"FQ C2P[[jw{oOO_{ιVOW.U@*e,hѝks; bn]nfΒAy*T@i$Tq +dc6 '  )%%^$X-;8aٮ]eeX RY_s|OU'[$.0hyGr."IR zѸ9#+rb{*rξxVֹeWĖfE1ŔQ}roTqrxLqJDtQr8W:" ԬDDeLx~"&%k"DҲL9* +Ve_Yq*>45!,+FkK(AuHʼ)yUh9BrL!zgRϨRNB +%$XB΄X|4ZP)`Vxd0 H)P`>q'.Ѕ_<˹c|~>{gĜ>d/LO;C{FӞQ\[$~H̞l}G˜}{vņC7Z7&m7Ot ;*kWdn H#@?&<WCD +/"@?o!o_uxf;`醱ΕdC[۝9|dl99^$[O=%#ø*1 +{"-'+GC6G怲,$fe+Hmd$V)D!phbd$Vb^R=b"DȋoP,H$mP(g![c~*лrRwEb; +x+<=]=G/w@JA:a`JoLOuF(cq]A;ٺ1k!SSӺVMisN۶8܋G=Y+MiC̈́#+PsPspVu Q!RGMR3YLڦ^0e}!vWԔ/U/%mMz>/oA6#|H8#B\L!Xj` @,A0.3"0!0ޅt&zH Lwt'0A0T;u YTZZ gtnmcz}[yл DCA^-o0o ofYGk } +̀`t` 5@f fl5^އr:tTBЎzv`Z+k·ktRE`xi@iO˙ ՗ARjKJ!`9q1\=,d(0z@u~>hUyH.9 H 8HYםks; bn]nfΒAy*T@i$Tq +dc6 '  )%% Ƚإ&6w BgR kPCR (RJ =(t^dLϹ;w&$W5M<8crZd$˼A%L}`ҮY\(.kՉ+2TDEuiP-JGWjPŘLTy..0 /U)Ut&!aYQw3”jNBF!(M1(EI\YQ,(-8&QəܒIdy RTXn5ZKe9 &24;ND/Tg8KhJbtIMZ7$P^BBoI)BlAB| +U(.u62K!8?tEFAqqsgq-4߯FS"RI-_Rba?J+LNu|Ip*qh(121H#J)-I,MFa+Θ=v7pX*DL&?,H!C'}{EHNLzP(i1FHҲĞn3##3i[l=1"w [7]81;0Gz|- 췇ogÈ')xm +y±2 vl 6-gOlb(Alu?Ml0z.e^N<=&N>(wX{xyxB^f(G/2;ɃՍ + 3 ed3G#H [{ +{*Ȏ3PdkKdc+#܄@hC·X &0qx\*.aql%lJXA6 ==pNhpuncy'c."ZU8e/Ǭ؅FkE>!=of;:ܽ}q}nos=\>>wρ7M\ PSעԟԥaԓOOQܳ]-T^@5&\eǁ5Ӗ?ߏj/0(p%sW9k ]/>h{n,fʌqT;Mj0;h }^ԇg39hXgP? Z-5N{Q+y eh} +cҨs*k ׬k 7a&':1CCDڨm56޲7IC f|Ƙicfu}vsLW洵LҐY22Ь^hN_lh$n0QYI[  cVp(N<#AoĨu$i&aLS1LDmᢡZ<8k]UZ^6ߡXz^8_UۂjCp^{::i@8|UߪyeHH Ւ&BsIyN"FJ )[dt2cRiU#g^g\ ]P9N$ L"A)1:H t=v#R`Jtb4He~ 0YǝvճLlN\99~cN9{&&]tq# GG]׃cs>̜x e:99x:sIs>)gu0Jv#RnρI^R&o3zyz{?9HK) :_dR{ v8Ё>b2+:%"Fh!2" uD! +1-|&>(.8E0+xձ{~ԏQ[y pWvKֆwY~keX-S0n#2AZYyloZyvME1u(OYP+2WNhJkx<@YBj;e] Տ[i{4j ZNUkDR(AM24\4iƵQM=ixn}HS>1԰65k˩՞:$gEڌ ҼXä 2SV{t^V*W[TIXSauzIZC١RH08L]*M[X(\(\W=}taedrY:*'vǁc-\0Bu3 0 M@8UBF>kM I8-`U-إSlƞd:byECIp|Wi:4 "(άsfvW *; ƜA y %494 In*uA 9Ϲ[u>\i21 tH@4A~#A>2zF{tۈ qzୱ:Z1`p :[b6~P)"h1_t"o36"YӅ"ȠFi->| QP͓ŋ+ߠd2_w;z+:5-ە@F"]KE![c%T:x$( + +N*sE_%(b +L,|O"exNxppxl,p8a+bR1Yr?1f1Br7Wڵo//5Fyh\<07OvGS(7\jW7<;d* +!uQl=~FT($ +bLN"#ɤxRT"_c3 H" ":"/P|y|[8<.p8l66),j 2G?#?#Y~hz[:!O%_S_SQB{s +}K^NZ򾩮5rt2d==)_63߁rt>MM]VoT-f3_kIZԜFX#54K-זO>/HܝHl-|@<Qy6i~ {y}mS>n.a3&Zo1'Z+aUDMUmXK>g܀=f~i;jnB koe~0 +kh u?1"}0 ?<n},B a#?>5!F_|Da&_6}}L6#3Z>U9؈7[3~QoU70xodnlj,uvLg_\vz[9W5X*Qۅ޲᮪ў7l\(oHjHmz<׊Jj)On/OiSf2kue/e "iɳ]6)m/ b"3*y Ё,Bw1E ]+42i09?ss~D3XnxݓlSA :B@EFVS K  Tب*! UP VX `YbzX[#DW J!`JF0= {k!Ѝ>TC*Ue+1ߕ1TۿVW9ItuuP DDWZ^A/ES855@}D]>WgEmaB 3c>Z(TA} |^=7w ٽ=ًT9̊n=lEg=$ς(3Ddt@1U@4a*` +)$wкdۗrݺX.Bv7/BO'IF|qyf{%t'lb\֓bn'щ6\Iu@tf3f_@q L 7׭  haCFO~@w,#Cz<h1tg:3(cZmi;]"S^TI2- =-"*8*1TEz;%1(ģH,F 61 +;{(/AFOAdש;Oe}KfGvm?k ;|Ȅ!xAd;D7#3 ګGlw$pn NO5VG?F $ bg 9: H+`>/)5:.CW rإ(6wf{,Fs5KXcGP H /tE1{gvvS@s>>wʙB@ U}V3 !L!itZl2VKP`lZ@. +0C&Fif }b2s0M¨5M(`dR>2:R΄B0jJ#S)U)QrB|2\F#IYR"!$bFzbP,b1% !#Fpv0B;|%@0a u,T 6ZZi]oA5^l$%'-VF݋YFZľkbSj `sA6My 4CŹ`XRRe̟̻zlIgq?>a.GVYhgBTkNY]eVF%l ?)?^ܻlBb]0H;64PG(Ow>R% +)S:bʓԾ:Sʳs}u%Pi[#m-,ݫBomR|A| T]}&\{]Sfz9o&5Pof嶗ntCJ[v]utn'~'z =Q u; þI+RIGj0ͫy+JQBǫrU{*H &wh|#ܥcnqKHӱұ75U=/S_$T?# 6~ Ec/sj0a45KuWlUyt/*s^2<j/Thʳ+=D@Sr{rzzkLbY21BE_4W'<=ž_f+Ș +/S˽H@v:ݽ4t:cTXI͍D~ vpx˧2]:51.`ϙ.b41&-߹詥rc<(|,gMK8H&l_vBλ[b"s/e]ޑ}ĎǶg'D޻D msFzӱ[ё7yy%!mٷ\9mc3E]#3Ef +ߒK\"/AvTą>6Oxz eOe;<~˞M +DdƄl)i’C(k-,RBC%N=sƴ9 *)!zkө'm:lϴ[>MZoGHXwl7 GwZdu`g4kϯvLkiowʽ[Na/{8+ը]Lhv,=b5j&*TvJ.˷Bggy [8- +61q2)!?E?yy}Ê+!b7Y~Z&H,]`( .h +KBb X8IԋL,FNjj2XOѨٔV*@Ϣ&0ki& 'Q=-rL$)i$Z/FN#Ud,bH!s~\=P&tzD!'X0'"B^`VpaT{s*p`mF E`nĈJ%F5XV@V(PH,(lYLfIf 1Lj@TW=VRj5ڙJàfU(LTsDɕ +JsOB&h$2)X*R$D,HOEL"&xƄ\p@ dD4Y|3|I PϵM6ҹD5$۵HeՐ;P[0[IɑOn{uװ̮늁 APQuUHT aHHizTL?>穪[]W^Baq2Y-S !/ak;\Ν\9I[0q;;}}kb&l2n ,^YJLwPN1f2P}#F튏(jU G1P4lz:4JDZo9v4BEqR|镹IǕ:Me#ByӌT*GMUP5&č<&<3BuY!ۥHSМ3bz\1@ܗv$ut10C/pV0uB]w]z!%MqC~hp7 Aˇh{,o&du;2kjȦL!}.O?F\Z fcKdk>Y vGLgoL~꩝v:>GKYGOܰnvimt%}Ymt{m >aE#֚)3.8c"ԻT$O[]f;] UhJLsY[$i^*JzUWg1ʒ^[:ʠ'{vC_o1m%'EiCX׽1/:bN>M.;4xoSv|ie 0Y-ckXg$ 4(`u< @Ot7pq}\oG=8ݍT(CY}pw]4רcXu?_DOPuW}Jk"Ub,033=bQFQoxj+zF\D 1FMn2pEc kzQ'<~jnC0\u>Utq9U71\쑹<0"Gؼq<2uf9KUdU!A! +.CganO;TV +`M=M2.FLu̮%%b󮞣ٕEv:,ˌ^e2K?-pitIoyK>֯k~7OgJ.~FWp%깃˱ +2pQ92 YHL$vϭ).Gu7QPľd<}t44{g7ί%E0"Ȣ#""X.kL8\$!*3^GEtn6팖MDzZ4Z:Z/SOkS<_O&rLR*4j@M_& +Rk %H S(4l2^2_MP|='g*LT(߇TᣠnbLN^L"JR "B(yn" B x>px\.V\Zq< [Hoշ*ˇ8CH*LWu25X6Ot߿}Kqsݫqq0 8B4ݳ‹es4";'\x|DVSvv`Vvv< o$,=фMj|Q,j:1 9I>ZDw-Gàe!ګ+hkYi2ϡ-3Dsk%v1ibSLh?S0SN0в'I:+:T{/OL|v;J{|>;OfMs =yp +v}s|ϰj8hijX;uT2m;ja=챜NA-4P vm hd!nmwu[R6eN7ԕBq0@1r}!.AeT GYG"BEt*yO "LM#Uq,# VHyII +৒s8I2/$!1sBK$3d&V$y%"^"?!'Xj bsD(8/ hV~ާu[`{z  p& (,4 +  "ԑaH`T8T0>!T0B`UhpU@HP028'}kjFVՇ(L2?_OݓJ˩rD&JK|$$?D')J(1" .0 +_^WO>է˖\)ʹwkk}3F¬k=aǹ7>*s2>_C3;:lQl_d?Jol^E C$xf7PN{Cx .Ӗ`9I?>Ք9Ӥ)wN! 2LԜFπe'q NJ9. +E)x(ڍ:-ꔹʘEXj(jI͏Ǥ'צ-SR]ΤzFz;eAH/,PS$9҄xMmP;mDPd܃|{dzc ,3ۑQr\+¨q;uD']uϪzK_U𾅄Ke]WTN9uDD #A $Dp/zg&q&L}|O}y{AW7 cnlolM)lÝQ5G5}@H&{8t^瀥g UNi4wHk2CKjnǙG,fnR96ɮ6;m>ESHAY+b^ɤT0oh-tzPZ/=aB0$315ûAOR#7~t Ow | ]t Fp]u$p;?ΚQVeUde(ϤtMKէѝɚ{tz3Ն,B@ +C8`Kc7"n? FnlF0AU`v`8KNثt}i3wyO5ƾ)C߰lw·V ,@of?ck>h+u7м[Gzczjݏ0jj̣tUCim8=b;|r|Y-MzϤi4W2+t1G]QSpeyX +pU%H%}8zP…+pwS Q:v;|y]Hvy\@s%cUXUd+ZL$^q:< +N\~{ʒ6Q[phuQܤge5WSkVd)F]%\~XK*NyX֙G+2RHUY{%R$*L nLo\DI^N!)a^(yr*8IEEp9,2GNXqNFg 0%gÄ0C27Yi\JV2X/d@~U\|鸸4Oyp 8S>9e߹?g >A߫?vgmծK33ٕ~f_ّj#{L< &9qf뉔]^vRm=yߒ>vT۠m nۑͿ&ŦlMmep-T1u% Uژ3 OڷeCޘ=10cgz ]{=@1py| +)IX+H 6O*4๵ Iք{HIohI~u(#*$:F*A`BAsBH)LxGdORV0F@`~A"Fi(\OH $~`QlxB>-ߏGp?-]1r>gp8 +ðj_, YJvnkE_և}vSOA,dQ/jB!/xqu8o/ oDo9iC-riJ+@gO(HӺPYɴi&NZ!IY6GʧPG$rR.LhR Ƅ%&ݲo4H'AwǮC qC2U_FqcQܸz<ơpo{+4 M5B3VS;j\j^5ҁtY ݣ/+AMq" A 鬽K7@2FKht!vװe,N܎3(YJݤrM=kmjW]m*w +}|j+5 ϑ9ȡG0ʂyCksУ5ԚԶxi& W_Md{!!svy׆JoH"`(w  I (M $EޙI9;si.koz%3rͣkPQYEQHjx5aw٬!٦1\IERT̊ԅĤ) mI = 񋊘yl\]cr^4:=]&OՀPxu|un>GӍ]=zwNay poIX;1@I/kJ0z+54/U x;mo00 +`u mz>U3`lY F9^`hd'oghZ&U5` 8 +@]Yu\WF(|0Eڵ=f-0[`lp[;T\Y)] Ry `wpk<+( +@O` 3=+T -sݕɱ­l1V7͍LUI&`u=]q`4ɫjm +M8ig\8_UY.\q#=fVtsH[۸Ϯ"]O*/I4(⌳eE Qxq// Ņ͡' cSĝ+T0ʶ)e=Y !L6dd҄]f%Z:)3ؖ RMpQET)A l& +K ZE0U@n=Ai(r෰cQC4GE<|́ALP +ž{#ΰ~ӻ<=N)8'}<p:;ȷ~ۏۀ9mɷ~wy$X.; t^4x' ZoI7 sD'sqHHn6 ]q^vb.8[={D+8 +mr88 Pv(rAȊ!<!|G޺sXxų [aE7`[<E(zxynxcM#s/;<]=$^LbOw ;nYS{4nnT"Wz%b YBb!pPk'r T-v4{‰mYSzT<>l+.\FpVd/5_0D𯶡`^ؤ!2tEF.G˺BNܢ`Ҳ3v-O7ʨ[b41Y՛WX,7ےݢҏi_QF+<1srp}fGܾaW6߰Ԡof˟;N y!O~3eUJp$]E 5:xj 5+&RsѬj%)vҋksdU2;tzňB}3Ό%4HzuoZ>7< < N(pJ[Ɵ4oHŔ\ H7rnjxz]Vƽ}3L׽@\aqr=@ZlFZ'%q /HkXFAҐU F 4)IjmiLcvFiB:]Y hZ?&̳ݦٱOràx<6I(ZT"K|-ߨ. eeKIeKgV M4J +i5$-.פn# +i s}yt5uy-Q?'jO55U5ɨ,1YV&]2ȲSi\I#YTRqsKGSc _&d%ev%ft&@I}q_E/㡄8x&ubkxT+>o0!:u']/m/;uD‘8[3?^ܠ(̨ " #p @8B!%E ݝ!T{ۯ_uu3wL 8PkpP D +i=:cl -_Qo|F>Fh3͐|ttʍgPǮ^K2H EOTPu)82(v_5S?VQ`IK b`lUӍi|" +#c+\| A#|`*o*8FCUKU)^dvM={J2Eqƪg]@,FI:VmvP^[ޭUpzpP&AVIDvY)2uݍc @ںMj \Yu!+bϥI,˾O)M*{p#~ҬDLċ<ܙ{p%">͌,{; +"" RN~A@]8Z3:*&t&3xp# Ͻ ,,'QhЈ$׭BH%$Ѕf]'Iɼ +EkxL0IW[3 I@Ԙ[\ N }&VtU@eL !IMt!F4 I~i-/:ձk29QG8rű ?9{H99Fb29Jq />JsoX5cNwBء}qV~#V( +w6sp-~g72~T='Y==^~c~=@T_d!~<~?e ;<߷@> s g]#nhM'iuFJ]J6 ׭$v[l$>Rw +/7 +\ՎĆc.f$ts#l\9$Όb';!+H)2_/DM&{{kydRUaIH<=srGN&v9W:Lb,Kk..d."&58;)NviDbB:'u2Oǧy<&ˣK >nXoo7.≟ONqdyhdѲq .pcfNOl'+;fG?pK#c=gMC[)?!_, [ma7MY :/݀Q͘}VsZpl5qc߬^c4>n9o˛ 5.ܱ^AާxYy sw^S(R0 $Uj%RC͘3gJИ5׏i"4ߛW!-ٳ>:Ǣ-w th03WH7`ZۋyVA[h 'oq:7!d)?ŔNi 0VZ;L q)M$m^t$nEj,k'z! E0ы1YnjlY=ʄihZtYtzm:Ѣюu8aȠ6ÆȨjEohY1 FcʘAeox?>ڸ2;6w~_[حJ34UHskc7b2M˺42$meHήX-Lz .RV*77O^Tn^O:J=,=upSě&r DB*UH]3W* g'3ixN$GwwX] R(RҋD˵+7 =bI$̙Lzy|s?y^j sAFǙ+,1C<cs88sH~އgO$;S#qnn8h;/\ǿ8`?fb8sces{\w;DX'v:[7{s36.&"gM:Y m͈ mX DfBV +k[++kV|ն|3VkV|k X񬸌|mτn þ)xj8q8|.8\ೃH(؈]\%7Wwg7N n&qe EBe/qvsq2r&9ΎN95C8:8R:;l 4vt";1H(SdfKTBBPY fwH@qNɬxV|:>1\Fg ^{yK?+im-TGϟ5 fiBKZdVk'{q u=EX?&4MvS-Nt- ':po Ԥ7˸1 Xk' cmhӊN߼ZVMշ7NWk>uEF\!wa@jWO{s볗p*Z\PmkWIø5dF> ^h jv#Ѫ UW Tj*3WՕ+-kkgKUs]) - Is-8&>rVFΎDffӍ13MOW;bg92j\Jo9U,z_rXZ̋`y~dMh=]t9.]mlM|0(cMPZ` Fk0}3@6#6 4/33\`fj3@Vag]_F0K`FC>t :i:*P cimh} +Hh)3i~`~$ 4 +L{T} @〗`wn,AUʋ0B&fRV$ݯ @1(c:@<p? 3 LfdnCtUI@b +SID`Q^ȍqYNLT\|8\rzrXyaZpŝ$iYqrxyIZẍ́eɸ৷ۄsO +aOB(愄ܿ|/[zGI&хܹ [KQA38J@&/Je$+L)n$ˍ@P\,?ł$) ˤyJ*Mؒi*0;!UU, ʂ{2&b3k)!]DCHmٔ(3ɑF$$;tΏxO%?*Ոl|.R)eb|Ec8CMuJ٩&5gިݱ& HHGP)"EUDE +!=ٍߜ9E51qo 6t4;ta;Qz.FGLݲ?De1؟BG%mgo~=ضrz?S!xF Q8Z@ғ +>jY3)m;O5CE#uW΋MJ*g%RX)E5H!&DvE*\ąP,"AI ;`_(-)k +sx:4\ 5&\jY5/-ޢM.&>6ar6KxMnтESMc$s ${)E)Y92gP;f.*yVkBU)Cj Zpul\my #_57ஏC#fܭa jmc.ii#턎{N ͦgs/蓹' 4"LCЇ'pfȳ(4Y^،j& SC&ܗf4V6"CMT3uqol6 4Yq~vvڦ뇞YKW߭_ˆ{/M5dM7UeX[ܩv$K{̙V$w.{̞̲"6帬򌙎2W:H<̶1mg&ɲlfҌ8ӳw<=I!វ"%?'[{J&[Rc&$O%$&%CIc xKc쩉qP|)m:; 5L6Lj:;a[YFkRG+cG’*#5u-Zuiy hit: Z a-@k@ 6dF>S4_' +cY2n VFxŭ\0 @1=K0'coasӼ)@#`WCj'0Ho^VywnwBGxUHW~C* +yH-@yq7]4׸=Kt/_hn1|<̛a{oNw1;R5O<r+Ƞ>Y@wt% \N8NS/?$Tn"Ft!]vYs2cqy'3Ozx>% Xr=Y_t9%JZtĨUPt 9 xhsp';*|V>F cp"n#FBo=@k0z|5PrS8CXTVaÌm p* gp6PIDƠI}68DɎ3ci昇cNCmŐBΞ W}6gN J!ٗzկO0SM9NĨI>İ6ߓt#v%W.=SѿG`Ln 8a;jI=b +~8|'0R@.f.:,J!`P3"CH[#[l6@:+tv^6h6mnX|ju>@ ć(xQhjvU^ʕT +rwNenF@c7r9O5"P+$qS8%v;ev#RjǬD + +1A$;Dv̚WI}Due!("r'"(* 7!$3qvtI:{o]k%b'H_c +>XgnY"$x@ }6DxB@@wV(SjF1t#h^7Щ :=RQ$Nc NV?LT(٤JG+}jLN'dtiT @""צ B'!<YvTLue%^OuM5'O6w5KhJ@&NL$ړ:Ĵ.RBDgBӒlO>jO9겠lIJruaΤɎtWsBTcbT}ɧMu6Nm 78FM li"0^ { +L&@N:$s$׀ZeP_5ĵ p֋_XS$` ]!Q, +hj- ܃A!t`w!p ?x~[j~CJRRϮyO U W] =EL/0 ngἲ-^;ELw!LbQn@+_*:?JagR+H ?(8//`I*hy^wOg+?[q%Tv!#bV|cʊ3H.a1ewJEi146E7\ۻj~܁kyWsc^b)Ƣ_qWN,1t{/|)ۯ؋'\b3ϟ+\9lf4)b.0/l9$](tSq:s4tc&h.Qg0S)&)?TKfM>h.ʔu*q*qޞ2Gl$.Q{}"!̣Dqn+=,YuN;nG!Reg ;e{R.:c4?'`J>GdA׸Av8g/1t2lF{ŠvLOX<öpL8l~iK Et7Eq.6b+e %).j?"wsmUmPOjf%P +( /|7+PYrm&#?W!\cKEt+r"T _^2*N%UIuʠ$ZE@b|Z Q1E)$)"A(-@*ė5'b'Hȉ/}(r N< AAA9-u}>| +F@L E|x hE1_*t#h^7Щ :=RQ$Nc NVp"K&@úVꞀ9!y]uu &Pל$]?^O^bVmU}_n0~ Ao`ѳ:iuiqjp*JVsY04_1Vr R.bHY!axa6.R,Ru$:&w]׶V՚OkO`-ź2pk]Z}34B>YIs6ҬuamWಮ&Z5cں q,"Xl3C+TӃ˔|ł{z_U| +} t >,}\G5e/ڃd`#!Q&{xMt.ʲ5R/H:Uxc>2GQ4OupZQ@ 1TzaryR)U3WBUy,3Zu] SF$dryD vm܎\0w@7]ͱn疛x;F{KnGo69h%ͯ(oGǯ)7']x(e=z}M׌t#3#],^uRG^>Exivuy:n[dns:^PhsBl.efװbuX 9^{EgGmL_ù+ml_CG %omƂϝy|8{ki5HWuZa2fՔY+mTk .3 3Wye<; +h崲O2]*r<AN#YseHZZitOvTgRT;D$ym84vvQtOb>HJ:ԓH7~([#hx򃢿|*#O5zQ#۔&=hj[ Z(N %`Q4x x#c pmfyxYlMRHR`mPlշ8sdnzY$[#?+) W߾䜵^CAkggNhAm5[-X3WqׄTeټ28d^[XDh/{[KE1ϋZKp--cfϫǯ.wHF#[Ao?mcxy/}|qF__Ç5^8H%4EϦp:Jkũ Kj*ZEP ȕ +@d +9jr|l26L*"J$RVH"bKKcN 9I© ^;^#2"gc9T@P.EQ<@TAp瀠"H5tYj~_1| KY-{Bn$HnpRH 3捁yZjvr .¼a321n5nܭ [:q-kfp*U%LB {qE!xtvj)DZK&{pmK'zCOO/L;p'3K]P'=Pq0p2 A7 _鍸zd&TЏ"/-؝ %z }х{]7L@=7[Lg}h͒qlyN569kqz<1{2Ć6;@>c0hj mCV;nl7Z&ln#ڻ1s r>SY[gc)j 57"3N^GH#)gp96>@ ag5#m]xΩ.^\]COɳA$88SZ&1d:Wk'm'fzrӦLuB)ӝg eR1*0 gRȇR rs<7kʒ ]̘Ҍ;eIUғne*/>Xq(#BV=7 +~f_<]•\R|e$p)ʣOӑ~QT rpr?4&4)*|MlX*l⬸+ʦ-"d2+:NSx,!vu& ^(U@t>y)1; Rc"SbKFNR<Ck죬vdEsN{i쉠ښL~tOrmT[NkCI 2#&RHlHyBx/:}.!{C&Idiw-T !?~iWf]46& >!*l.6 +[ +mZmܠ ]ThhbTHHΰ[zAk$#Pe-) Ö5Y'</Hd +BQk>޾Z?_o/_o[Z4??֛JRpN&ijBVh4rʋJR>TP2(hFPUGS{X%b=M@Q44U!jFy׎tFG:-Ø֑D0 4k3!T z ^\oh1C E=d04-PC0 &h ɴtSgm\oC`=>i>aAJaduf$T~3ǘz "fՉaS!!PHTgxtCq!v 4ݡscਙݷ&BQ7O M[pʌyTfyNY +TfP-l ox@c5r0V+k`Mz;Š[`L߄kfJiČ6aC+f-Ff80C8}#A`s054Z 1 zYϻei*lS3(TeLY,a :1E(dPt1j_VA%|߬]kL^Y} P hU?ŲwxF0ʁ0ȱ7@QҧJV =We Ӷ=1oMmSIRf+/6H{@/'8V>X`SV4U&2=?A/- 2F޳-%leC%$.!zZ &E^ψ +(ʎˊX8bKPxPDZoz~E˹I~AA9f~D?oA 8 #mzg(#eZ͈%YO^//5ƊoJ4I$pZ>)‡pa_PZBKs:>ͼB|=!Mwi8oWѷDjv:e;GPE3/ˌp2ƪN߻u*Ykf\=s"MCR rD0OΥdn__  +77sMn292nP(fH&r29D.eR 'ER\J!RJ\I"-,9dB_(x& s]8σϛY`s9\bL8d,Yt,''E9YӢV[}?w س#5UYU]#[~@vQ&6G|, [Jk0CҚLLD mFLq+GWo\W3}s:XoZaY;3j\GMijR#s~R WeTIŶǸRLaTǺNcRd\ܧhL-BEim I),yJSU*Sw M5TM"p1cՔ1F4gbZV Ԩ@d5PٸFS s&w\z^zqWP}aH8BHH.Zgm`CWDZFHQYRCBPXϹ}ߙI {9|M2 P+1)՚ 3R<čj4 +>a4 MU3,ivHXԈ;qʡ.b!#mB'IfG4fB7|[qzRn0 ߨ\0Lܴ`1)qFӈ-LgV߷wgZ @#Иa7pYs&ӦkʰnZvC5ef30%H%{StgAWpw)JT@Ӑn/R~/E e)v}v$.~#1ax +xEG2!tW]%)!I3nLu&^M_2>utp} 'h^> +ש"P|PST=T@m.+h)%rULM\`jpF%Qa Y8`0B04@FMR#kUp 878V7*1:Xr0F :t]6 zI uK0W 6 멦€fh+uh4j70U{ƪ ,iǡ=pBڊ9cZ^)_[JUb1P 0} +TaN5OY1B6(h+=`VRTq>yl0PxV:+8[6EXE&yyi̞܅0T+C( t0)UA2]>t0YN"0},++   Vitr"w_yv3onF+L-*SfLInْPRtÔȢWs/y~:IZhȨiNO"߅iNDǮE"X=&Ri" +n/' Ͽ(,/% $"'y%aHxv +dRDFYW+9u/!l%!NfюJKrAq256 +fLkNܺbr5Dn^v:tvN:Igh% +fCP~1X…A睎ƝHyV8ՑX[g]9F㮙˧ G^:JL*b NG8?{쑌Ձtτd/&,j)C\>Ǩ! + /&"thިS{"CD}*hC{vn[d& NPm3Nk@PIɿmet$z9ɶ|&,&+b _9+I-]5w/B%rVB]*b%bwVnF|ۺ7_Cxn594<oCq5p8_a_|k81\x xP$xx9x~xyI==%^ +$^Tro/oz*<:TpM:\A%k!\H]I%qJ9Db*hBwF t_]N |qLܨxn|W|W\>DŽry.]ZVSk} ּMɼ]o.;6'V1θ g5-M{Ǣݼq +6V9Tղ[-9fDmz3k2z߿LFQ:/jJVϓf[׊jͤFq':9Sj_Zηhn}7SguŷМz3i@J3gue夊i{T5CI5ٓZT3CHtJH7kʛF -ݭPã m;R8:I]ǵjG~J>A=/>ޗc>" Q 2,#Aܨf.@X0cM@T%ajH=͒j4nH~ꢚo!-B`"tfx|GCUʰ4 6}cڼ5Kh2mSOMy x0ΖV$3 +IA" rʝ DggvwVVwV}v%U^ֶ`fM,v txzz+=Zt:cUe@ՙxku*u}jm+mPlѕ',iU>b[)8|/JW=vdb=1$JS׃ JA>~q7e *:D} o GZa(x TP @Ԍ\P{* +8Z54Am&|\0T#F!k1D;qQVj Ncc`hB:S;L+cMNXA&2j>/i_ 7m-6Ԁ6XKs2P hzCw*6PN鮠/t=,3jOi'Ic5ƞ?$Y}i txHGsh,߰+PLépjUƫEIBj + +iui>S5'y=0ri'rhg{Yw7\I $*"FV*A + f2t# vI't ɩ㐤9 krUԮ) 2c_e=N-+HW%HP^xL^ +{N -"R'x=":BI|qZH,yL R3RCP!N*( !t &ÒLÑHȨ& "CIIvB%SS ʋ ̽ 2箩>* GIl"( XY9Y1ΤD#QO8p:_B$nms eH@S +?cwJ铪0J'p+.a;Dy +x_,;cWΟ:&ɜг8  %W1ρ%Rb ɹ +8X|6u,+%.kK.ŕIbl9 2 ctgh_ߐ?i{1i~dM㉄BT"xzxH<=yH XbwRFJ$Bw ' /7~w+` o`׶Ņnrp\9l',r_c:BBpa2Й 0 f)ͷ6xп~1獻MOO/n7~GZd_ۍ}1j+c{>ϲ:v.,PEKY<{}E{t_Vpo_ԜFXFdvofMf.}\L;sߓ=/fYÚS|bڂ,e ZԕCY2gA[QmScBu6f-1oV5۴紈6s6`Q0;xQhycf ziQ4zm5w]+ͽA-4Jg5 VOjo4Fd3^6@^O7רwSרh2OC 6M~IJ=[&zQm}X+/&zV]+V6/- e2ut6b0v"FVGFdX7`S 5}pyΒ={iКk\ѢrVKZeem CNaՃKk@4">:pLHU.*ʬaXr2mP"]E;(fr L/Lvs 2d2 06`t-*W*aA +fO0Z`A;bZJg%@h~blQOMGh_*dV_9= +s> j^@Q};T-Ww1"9i*QVFd7A p*άy|^qfTE9ea +2=LgO'IÜw;)@IQOĜM7,a^!0󒛀825 uzj&.0wuj?Hj$)#';e X~hew)ȡc;9G9;Lf(\crQ9 v)"}QFQF:H/joد>J/|CN CAaG'>w'RoY gP?38iGuA +KW0~7QOq_ڦ4G8x{?6ٶqݏSɶ/k0[Wxopn<6W'۴'H%cc'-Z-%c5tbQrFyrZ"/#Ab&TJ) + #\L g2D,&EtD  +DB +P';8.w2uur8tX6Rlb!_k}\&bqsJcMɁ߭$f{zŒus0lXĺ2ku~ʼL>f[E].U㸏+?Ȼnvz-7y.7FR-NIkCE?SnF;$6{}vO69&[.%N]~gBiozq%R\M]y RaW6nUinj:ڮ& Wk|c2 uc\CMchGԮƨ樱ynz뵱 7ގtܶ10!wG]v^z^т{4l"vE/!EKKdyU0R aCT،WE&qCm)G|N0 M7 LlMY<Yv9\bPhMmgw1h{ȇb +`P0R +,:%Xe`V,u\0VǦeTp@B0*=j03W_ϩG4Yg=ثﯦ<'$! ;m]vI+"]EB*JQ[ ` bEZ(?^^^g'$'禑]=R_kIjV=5YU *F]e*w:KGc(ZC6(}\k1N_"ޝTqh.w65Pu6jsr/ٮT;Ϝ~:}#~8_~:uןغ^lvlmjD/Px~#Gxm="ÑQ`1Vlg͇BI"ߢv،mr"ݤT J +/^*XyQ8x{/vb #RJY V"9P&f%(4!+DE D5 y<9.x5r|Q_w zp9(| "@,zUJ[~:ڛKMP쥲"Pp\y) +%TrO9D.#*#ωL" {HH\$b +X~v" +1& t|:.cqjɺ6ع{~ql˚,ncHF7IYayȦ +,}5qͲaM=64ke5oY'bcZڟܝ1;페'tڟ1&/wD,=;3f4\z߯ܝ1էg`OKyoshO-ygTq?b٣H7CPU0:y\JRgLP1}ƌj"4g7@}FhϚ6Μǹn )3T%~ѳuxz2%,qix7f0d}4<޵4l\FGVh|syjXG c_[Kʤa1ӞjLSۓ͘y fH]Jd\K%/ 4ZnOZ-X0EK3nդ[E5:5\#P8Xd!-%-P0s5*qe2P`n XTL1訙TTl՘QdFA w!,r(1,16klӇ^~ώs͗B?v¯븘hrg?*O?j R,@YM @%uД,h}m3ḧ́L 1MYLc64А Ap,g8 c`iQ=n11CTnӌw".zfhv. y*3Vmkz3ľ+í/mD="&AfM0 s#05G\c-I ª=5YU *F]^y\FY`:gkWJʼ!¨ZqbxF-}4uv}RFLC{E]@QOUSۓg.((iպUtU( d !aa@RI}ѻg;Y=驞!\r6`T =^MRfU%RwS,bc󨐦px\<#mw.pB0l*`"0L\u%gCnen^q0W^qx>p{E)pF* (gW WLlRhLNd㢋"SUYUQS,KP]]UUYpGEQ{Ya2~NXlUw`D; +/DB+l ta730eœ2Q+KŠBנ Q]ݐقP'J'!tgB)J'!DN&(fd; +PTfY'!k8{+nȈC09y-Xi1R/c{):؃9zϓtTέ#)L%_:y4vG~O:~8)ѡ(]ptC;{(syGҁtӢ;%s5:(%`tkwz1wq{ΝyzވSFp'{Ïut-?!# |fd`Iwٿd&8؏#$xL6sP/"JɅtIFnuK d + ‰}H-6nI`rF^2&9F'c$|$br/F +o?_?:—N NAA>>R_D{7K&9:I%t;D,臭N$zy {I +\|;p<ܤFфZXpp&bJ+Ok|SjcHSlb:sVWi@ +ɳ4C=Li)ҵBmi=AQݘwB]%S)-SjlRzEy}{R)Խz)}w'tjFiOhP!{lc3!O̐2\=!׌Bc5q=v~\L4&)hfiT Rf[G5\ۨ^RhByŰˑ7 ȫa^"h!~KeܳhX4w%k Y,KNҨ{yص4fl]7-Y;4bt+_U0kTUysU€*kQO*T[TszL޼[44md/8B-v4M f2@Z0s3؄Y04]_04x8Аm^կҐa\֡d萺~aP4,uNW4ӗ86JIԛlKIP ӯ~xxWW.w!qW=qpf\Tͤ:.qZg!zbc_&OwƤLtd| 1B FED|7B< +(!db7 i?ʬc- IA}14p@SM:v b +a:nXq`dfT_U0"3[༖P9gֲP[EncQ )|`A`jg;X:9$p0uKpAf9fgTch_eftq]2; }z_^"Cm8W6` s}= OVfti.4 -u=}8uy[0oj!US$0]OǫTVu<6 NY= C8Tg+<];|Um|N-j᳼g7ݫ)Cح(4OOV״[YWuu*+qhVPJ 5TL! 1$^toMӨ,[yL}~GGFsx w`p; 8`[t3Fg71i@Sơ4OH6W/#0N%8C^2]%=$J<@f2dc>愯*i\_Y^)'%GN? hs‘iY2?~=ɌNu##,z:kiaeОpTε h^Ri/2i(*,"MXaJ[p!e +k5IBdmhy*CHnFrBr$jG*$;A ,4! 44d/MPZ\Tsl. A'×bq\.NqCɧi5) +YJ' DPɀ 'X8xc;Ձc?wi#bQkwj_LȥpR=jϩpN'IpkP%+c?4xjP_*落 TQ{vDy#{vF:A];#wy;:H7="!|c\_[m@ [VTԿ_ւj'- -Ay+&/PmZE赀gOPrPlzvj';:k@f!j3V)O%+™l$j94Rw9MF#VH$ +\J#a$4l=ؙl.'@$d#W_$sx˂a'?:NTn*77ZIpCMDkh{8=e*]M%WӠ5T(L. +9A*ɩ5ٓQ\].l\!HiR"ABb1DTI +lx>_|1~1b oX2o)&'/VO֍9f٬uӗpn֟]g,V̜y6ǹ6I:rLNf}KػfQ=_Lªw VFf̠^&wջ1/FT!dP}FJXdS-|ߡw)VḴICy1gX/"sX˶"Ug OIrƍRm'5q1i.%qEvm# +\و5NЉ ߴ37"wzHw{`Ela m0ayxCx_5܉P0"cOƟ u~D&HuC]Nܴ# Ӹ烯fp/IN/fq]6;=bx9m{N!Y[gMYeo͙sVfkCAss~?}mEsW&uS)sS)c)}Hș쵛2dOjhʚ6ֳɘq#нk2f FR!}TK65tg43Ti3'H5ٞY}uƜ.B+EyuMw<0\[t"l`Q&`i3G`_`kQ3ZɌY9XthgBgYtKXkKaJ? *`0諃Ep}) zka=\ka`@ v OwMg@G]g%u%м1E9<qjyV4M}X@wﳦ?0F5 kEU c4:3= (Jn@0JI"  2lTb7n@Pw>߳q߹wUs^u!5sudPbx>Vx8dmJ %0~Yq. +F< !< ߲e!O7I&կ[C4&( X Pb ȿ(`>̽$uN"ȽJl9NC@VO8/nM%rDw+P~(l⨿"u:m;PDF+F| Fӕ@QlsPQ)j1r7tآq ߬(6QɿQ*YI]IJc$ZA;eBB|\L!DE KOg%1 yxgs6rp6AV|V+fG;y|X$+JIqqvQ9i +Z Zh '8wơc phZBRTJէQIr2X.xMF&Idbd bDLtNB>&d<O! h'_k|@l Z\?~g'ٜM&C{x7jlEw+턥mЎulX,}9 [-X_з}~4>WVs._nԬ鋛1j7H#Tj?T3ٽs'JLhS+쐉':eTI|O)*m΄*Õ+J\U Uɘ6Bu"kd1MݨܩV%ս)k)cԎx0iDꂺ l'MPϣw^\㷘~h|b3T8mh,QDx3M@oK`ޕw&`ihfj=4B-ԍu~c [jm[Dش^Biu^ZQ]n8ciKuܴ6,͐ҴNJoUjo-+l{ý yh.BxHzyE`V, R0֨*0Ѣ# m)̍ip͐aU&.!5lXB}i zGuB-K8eSTX +AW9`Y"JvV/ggUSB02<# l*_v$xU28{3OqDc{Tp8ȍ!Ǩ  !&F:Vu:48OVuWչY=-.NUheD(Sy>tzLr=i~CgC{YLvek+M_q'mT;5@SRW+Se@Sp.Kkqqul $D6d'VY:2(]e 8ә)Ig$E>O(5j3Ϟ,MB""fceHҫHxTYFDdiiNRHB45D0߼,!SXeN"P9ݸN +cz#UŰcד! I + uNSHvѬZQd&Acļ`$(S"$ g8sǘ;3)*(%ZC5~xKzs8r@spP/l& Zijΰ:;x Yםbs* ԑq'Ǟ8/aj!9.D?up $j"YKS™HÞaL~Bv_{EH˕*wJ֨ +zyz< +J+sWj0]ԨըVzhT +ZCVй@3(ܔ +*T!WPk'rdTRUH%nRTEb1'LB&P `Fc\g5?hWIC;]oN؟ ͊# 6G²uͲl>pYYY-oYf*7w4_oA_F,нf]g߇fo]$.9y}Qs!ިY5cnFߘQ4^)j`o +]4cNnۄA.:ɘ,O7,*'3XeBo9oƪI5H-.{֌ՓrMHk!ΘH[4=o{oQ0yAzY4ezO:.RIhDzؙJ'{Hw>Rdz`7i{4a Vha8xCxL o+_U1`5 S42Sk7[7nCI F}Ӹ[t.~jX"1j|bԮdpzaÌV4k}N# XAK264_-[}yԢ'n[jv7mY #}>֯O[~%sZ()2Җ̍ hmz  K vv ukk+Rl}5jҖ{WH=Uv&RoU+ߛ +fu:$9a+1q[r{8,nun@H"$Mw9fbcbbbg L7i;a<<a5/>D DL}<|7JR" +܁Shx| xa<ʖ|>hy4dP@s7DD4BIy|!IDh.A,x6"hvy+ukzVS1z K0,& M 8Y!aيZW 1Fx!4>#gA>.@}H%# 6`  @#Ahs3QA`zBPTANUU%Ӌr@1 ι?4mho`A}hA{Hi*4 et; }w.nAVOK W~"HSvJI!! 1SAhgzv< }"]ճ{v3;c^uf 8V 1DF/g~_^BCq9Krp"_(;Gy(Law +Qp+ P6P@apGuT#Qpʻ\8]=s(F5.Y\(L!,p =pJt$b>lב`,c3i-o>|Ow-h577,Tx(jc|d*G +{:ݶu5mڶ`r)݇^v{Uޕ2i]N՟YjƲ֡g%madN=&z|?ׄeW5n^&]W y{5?xgsF} 5U  q|:J;/%d])`T 6=U&y&ۺ6-RF&>4>2 b,e+a eN)"}XT13;FmpgR=Dksv4!/%c`,щtu3Lw^!frס;c/vъ1޶# owE%oڰAd.s)oEDU6}/iuZ&g^La_;dFSvTXcTxyܡc3M1 qIOU?~B4ˁJ zJǗ4)(RrpE*4F: @ U21lߠPh'}7VA55*IgAAi&eY%$2l!"b]*|͓jJ:W U9", 4'W^C#)JU`.ӀV :Xk TR- 4ɠ%`N=5<\5RMѵYu|~ G3WPF^UTA[g9Xƭ 好X\£S^ZZI/5?8=g=PTwwVP^jB6E*Bmg([@(p ]x^ORr"y|ݣ\)y/uD۹8:3ˌxrq%@QqPpH 7*"7םNDV}~߫J 30`{XA'z7=Jc#cx ,<znVDK`a w!Ot' [)&9}3e`ʸkDza iW6 RS % +Sc0JB +/ /L -Ȉ}8rH>L~B`= 9$|:fz?)8$?q݄uHb( 郭B$MEpPN#A[LY79dYPy`RP6үmOFl`+үQb?7~^P|kk. O;E:-|b 8ep:y+3܌sF˔]+}} cOq9zO9sXyNG>Gb{=ݑ+N:KwN w*> ow5`Gkhaix ՐIf;}08c<K8-AX1op -ccmB6ۻv3=[(sݟMBqwh{ӆroN 3eҬȑN >ٱ^5{l +I%jwI&dFxkB~0aP7T7kz2Ճ+JzvI%iS)RF*OU*S'MUH5&mWKKG \cESf%%{S+ɈgaʟD#tzz>@ii&1޶!!A"E q% Idb|8̒qcF܂u}Ek[lm]5X4\ĽxE2R^qi5L&5}C K!2<ܰ42TOlX~oXZ~_fC!yː:?h/  zN?߃/9yjI58)hB[U+ztl} >\9[TJ*K=,,-[u1WStmޔ=vU;ݪEbg^̶i2Z;݂Z]abb2D⢧#fZ"/϶F^1") 1ݏԌDD6F/{qRnx9虳߉4_B3(*pjXደ- +RTlT"7Pa@ݠ>o\w `[=}*j Y +E*\e82yP',D221""BE:PƣbkcU#l1*K=-Jufr3+FgL9TcfzL&AϤ= v# ;0Gܾ +409ܸ_F.a%ME$& Q)/Dh2`dq*M:)Sb1sQ׏zO<8=I{?a^L؃ccɡwHؑiC8v42NQ Oq GR#~c2hq7SYio{']. ,4 +]yBr.QYpv[$-EKHEBpPQf'\Ku-83ѽ!e g nAniqޕQ:(tҜSR؄Nֱ uWc]B_9\99աKѸ O]{ծ3 uwgvaQaG2r"SQ~m7AH OA~Q<]~Vs 𼶭wk@՗H.뻵޲߬p;u h]7Iq%b|AN~f%_QS񢑯V +_5AJJRI#Qx$Y!gP +D9+JJ~H!lBxL&d! +26|`QxbDN|!#(\>r|Qy8 +=Wˀ&xP$Je*ZQ^5ԫ^*FEV9?CT(LJ"ԞdTݨR 'E1P,G HB_()'3| eQ؟,Z_k}`BrDd[Aj&u nM['}m}nqmbem;ìC/ݶՌL0 4Mt~4ݲ'1)e1ٳF̫?D⌛} ]K"4ho1nZW.X5jKX9X* OCT +FڽymPDL[x͖`DSaDK~~G4y g cH 4}WF*1V N\5&k!gtr^w4"MƗ{cP{;qɘ1"trߩ;ц^ o7O [767ad-q+hG&Hʁ6ܴkEhioƽxrͭɎks@FB`{a;pkV!}}׶Z€~bvRu{kCڤ>cZo֥M[Rd Wc2 ӝ5lҧ>CJJ*gW 2O31R]ːRR 9Rt'EnX2 _L4W>]r2ō&ZtHb82$ƚq:r?U,չQ{bpgL1':bNNBcNO5ĜwJ#c[LcICmtÍ6F]wug҆o@$ 0j |@.LB @^2yb+r>oB!\ WBN7ɥ+ϙCdhӹP#f,G(T#l> (PPT"ǩ շ )X*`RK򠯎Ob ;T/*ʿƪ(sSWg2:K0Xuw6-̣SOM%y/NcPgwvGgsTHHtDckVEFE9C!Ak_?oէJW_*xU~p_$!{PD\c+-d"\b{<ܝs,<[ˍL2t\pjW.[/ Ni):+Lc#(Υ&KOD@N2eLZd&;.S׎fNhzu)-D_rtFtW2Q L:.(L<9,Hh/]бDiϻDii5j.j5gCsh!-)"\D榺D䤸sIv`Bs(Y)d6AC[IڰD& ]C"I:p>%4-.Xvw61o9s2̝'z/D/ڛt,tO+)ƝL{cN8+>q1~],;c9#8/^)[?yw|;~۶5|!;vM +ւ,$AuϦU*dnBjPo\E"H<`6|C6vK߬T)jպ%k1`j[ %}@AוXW8A$Wz$Q,!U=dEbD + F"1؄2& +E$P,$0e( 8 ޟ +ex'[ {sW@Ra=C*UdϘ#R5&wT{H '=HS`RhJ{~etuԆ:~{k$]BKL7v [^Z7~da0޸ɂFK_^RƻƐW^S^#țWם(2]0S5Վu:IVX8Jz:RC;ӥFqFLmg^Z606`iC&iZ)c͋oj'-M|e[Gqܜg4g[L[_n&=1ZI ֞'̻42rRCE˴IuNZK5j*t[_5+ii [_L3g.<"Gs@y{_ySqLGjL[r&]{JlG2^0%LL K%0%McgfO̷#Oͷ5%sHi$kKm;=AIMOj;7y2n{x)-.kY̍3ʒ[~*@%Z") + \ A&B$DjTB % @-F$>Կ`F0[ir*B<4!Eu8TWL`jj +P,GʠP +$|T2}[ t(xPW$@BS*tDѝѽj.#Wj |@C +j: 7,4h , ޤS Գo Hx_ yҋr.jocLcb.f,'3UΣt>"(e@i{{QSk)`'=Q@iGK`n?5s'wvvjg9¥( +:r ct<&-W8!x\ 3UuwBw4O}}IwG$ 5ݚg @#4\xD WH\t+=2VU*r.%GW=D%W`__ٽ" [G{؝|i/![yB7s &Do^gYKAg"FYO:!Pz \ tr@%? ._ IiH(Uz +!?@_Y!9bAE0 O9L$QN"BIʂ8X 3n*=~G ->z=?*FADTiVXlEVtlYz8S]s(";ǔECYQ.QQX4y-d +D_͌⋺UdI".gEG\.B肀0K_dxs>奅s9pc9n.H 7] ,jE^J0COإd$ܕ3g f\u8'bD0'(W($ D'A a!.7suat!ΣOcR r۾'p  惞=s<ؓ=)ܝ|,Xʾ&hOblؕģ۝pt#n;b8}x<}N62v:$dE]ĞNDyͷ-6|7G#v{pdp]v~cfl ym |Ut?ݶq_5_A-)n?߲ +"?&|@ȸ%Űy/3lXIׯ@ƍ ׯB+п>ѯЭȰW$}Uf+ +$R$&-RT$^-@Tˢ*h^2Z!Rɗ#E$i(LLN.G +I;_&I"I I2;wDw$ ûIQ㊋ ZVc3L|:_чOk4CcDbjOiu9 JDJV * +%ИVЮc^NG)br1%QzV sMڹuo;j_Zǘpmױ DmI` fK֗O|Nez`ާ5*~_ 9Dk`M)j 9DbSJO}U|ptO twrMx5ѽJ}ǔ^5TJɮrq]wӏ!^ Dkx5n;u$fRHn]Z xvemU޷ö[/Lr9؃ɎN0{Tqs':N1[4wbkxgh1[:'E;%m/+m@ [V::X(s=-V; ⼾6x>{x ށ0F+߶aa|c`5Q=6 8Fڱ6l[M#|O_`O_ Şfpܞ;!V~z>q =u >vb&g`s =vlb؟́_k#CuwCMsoݜ|Ֆ;ٔ73s]9^FL՛.kt$Xk̞qkX. gWK\w]Թvײz.z1VéT1"U|<T2溰/:; @/GSg+L$L&'O$M$dND+#{'^%$L9yq:b<=9ur7vċcs݉i%3o(ШBJ9RMȨ}A4+A t4TJReHN^A!#2q\sF&ZLJM2k:%aفn}oF}QeU!Tw5+@jނP}!/#d-A +%q5 dİB +'Q}Ũ΃Y>j]V =5 +UYQS@3yz X5skkErlըkh΄ Znr$c*c5h5\![ A7pOv), ד&""n]UYJ2ત!$(IPJ03ݪݽ}~ 8D, ׋ \5&dss5ؙ+Qø +mg '|g>'1;x$AZϱb9} FF`lߙe&,`wtQ!~hhKp2!vەA 4;6noLN}I󝗝o^v#/6O{vDuw;79ֱn:8بfQzjAA㐋Ebqqc\i,.% +^2=AJ/Bǜ=DrSڈ"DH$żD"N(h`UB9f@v"@" FOOW7Bɴ*FiUZ@5nnj7Nj]RfAORs\TL4ҕjJ&…IF\,RlLJQ}~YcI1@!_Nk _k|/)1pD}کm;G4E8~VuU-m??+ B'Evcb }lyM2sl??-l&xg'M=Xf=X<{}}NH 4HSf8sjҤKM5NMvSbܤ qtӓh:y5==˚1eva)*R=݅Rr&Ґ;Յ5RnLu5#-Ieh+0!픎ONlhDLmL]HqRr#Cx<=`B)#ߛGIcȻ'IgHwb*ߑ&Idffs|3bsNl mWo#6N׋qƄG,v"Pz^, \jbց22WHJ(BPL*IBNT*4"+ )h +pZ"_X!ph{KR@e0H4r$Д'B4TeT"B0DhPL@- DTeВO <4/&#uy"- 5MuhOB| gjEPS ɗjd y6\Cgԣ3nTήC5z%Js@W5>$0v),''&Du]Oww b$(&P(A@QtͺQA` Hܭ?{t ]W0X诣)@ZO-m^JI>܍3 6J K>}? P(jw=Id<=O(rNqsI{3p?K1JZnЀZ!D}˸P8RB9hX/sQg(h>3nf# 84(%C}`a6azDXa + =씹0%,ZSaW/ y®B + +;{+ԕKCBAB킲nMTvR]PV" +d%PbB?=Js&!+05^(xJW+c^ +y\vϝXԮghNGk{NEڝt|_(SL:ڕ >ģ{#G/0λQ)f׎#bs ;}hω l2 pֶc  rԼS_hpvP6Erm;zpHOa۷ +߂lc ́[x[_{7?~]Z7oЯ[VJ=[߮d֯`Lk2~a2X՞ "ꋿEf&E#TBe2D.S)U*Vs7< ˽ޞ^ZOIeLF+:К0 z!ލNs>35KՈ8Viq{\s=l gT2Ks֟^0ӵ5˘L |C\`Ë%_ +wp_皴z&,KᚻK6K V|]ATmVox~}TC>ũ_i+V(͘!匊I+VɨT#5 +4gZ XcYX{`:fiFZ +[ZmmH }9Jt2n#6;K?ved =xc&޶ ! ow_%oZ1d(MVN!ӌ#mLH+6kϵ-D+Yi|he=amv21Dt2m=l= Xo|@280?4PG6b T͏ V|;Xuïw۲>XSlD>u-c.}Aƌk3V"cQ/l:VͲu v)sU)s].vU!=Dʜr乞2F)aJmy+h(GGgfۊ[^%$L$O!8'0WDϋlb'^1"NYpB %Ӓƈ(ԏm>%xƨɎ'VˀR)^ZJRУ +@34L:z06ILnbOGO/ nBi(* +J/K@Դ+*W@csPPP 4.rU<TKTjs)$%dk&H$2W'$r% ౿a%9eh^W@mحﯦ,"v2;[f2"B (6P銅KQp,cjB ,HJ{/љ=g9~HrR+sE`iH-JMۥ =F6`0k+0!$<v sm{ߧ~ a>w m_EZ̍lz&Sq =Gݿ^$[Md1RS}hal7JW@g#vc[z+ xF=Gvorڵ+ @PzȠNRn `PlJ+fOMJςT Jā +7_OX)u#RH|.5e"7%}>_'w~\.p8pwakrsa\#PJ%bJ(WKT +T.rTPTJ%eNxM'cQ*, +6BN'w5ՓIdR)X*DX$3"7IDB9xOK=8%ėÁQ"oz8Xo?++mRVcb b ɶIX^._5u²v+dit;aJr֟jy~qd(fAuV/ #$oKCL-%gZbl^tZ h~`vu~9sj4_5mT4ӫS +)"2p6bo=@x<Ο=ɟ`RLH`Όk gL͈R4k=Ϛېv C7ӏ,%=+tQ^TL^nLJo;S֔ш&) r-aFFF5Yqޘekqy55yau]+426'I#n0ه[r斉Bd/s{ l|5Nt9pF1p ؞)Cca3X2nڶ<:־I8v,Zx#+,?%LLhrpOrC$N= e8dsC`ٛ {EN=>lvw +>s|ێZcyG:uoOG܂ J<{{]ٖxe'[`Aw.( >FL0dLp`\AyppbK0(,c.?-hߑ|oz8'vOy(Ʒ`6ߘ@-1aa[yCw,PoL!A?D燿?6HצuMJLZC] ṋUVzdzsp_Ln7.H$HڸfAzM^nHL/KҤ0jT.^-JSq(*9Œ+?LA"ҏ"8HCH"HDJAC)ߏ$ :\&iT +^Ә ^:o +AG Z3Mz/ w}|T|kB9cmO +L%yӿRrfV|3?cM[}S&{s8/Q=j(j@NuW=Z5"6]W]+5Ϭ>!/L۰Y=iVQ5mDVaΙ"u)+h8emB')-=Xkph+#Ϋ-]صWHuu2ؐ[;/-;2-{nG{Ny@^>xFyU {]2L"SUdv{[7ޅ9\~4lkw`mGcOQZ=BA,OzGQ9Hۜ2 7ٛH26ԊGj}9Pog{rX[iYNF[-"VL-isɘuKj]Ҝ}f4gtMT*Y*R}ykKگ! +eS7g;f:;f:9;D^/~;9=?AX8a'\bgh SǓ'ڏB XGבɶg9=1NSe~k[\KA.]2r5 J)&SAVM.%IBJRTjKh%R)g/[v~ +NGo!>PV(s U9 Z V d`.$%~!YiF>@B˗Ts)&p3K8j X4\C%>T_U*9(@FX?e+%m7% Onˠ@6Rl5A2֢4ި['NMdiNҹC@<Ǚq׭*QTpDx\(xrI8'@ڿgNlUtw^@= u֊F2AjZ +5ZX|n=jg*y,|LOh\]nKj{]{2ACWrv;{e~"8n34ӵ [ⴥݼS*|]]t@pG6!/yw&]]MG@Vt% -ρKig*hnKLϪ?t})ןb1a28\ +30T]:AZdN֤#.=9-{|itiwypeʊ=̜1=Yr)Q5eQ3i W'-HS9o„Ӟ!/ͭqs܉|Յiߙ,Hw[JJbE yc6!ÌWQ1WWk×:w_RƑ d6U990׌uac؜=׍S:[F氧#gZ;  [3Jof~j5/` CM CpP#etņ|^pWoO[ZlMy>F]]\O]sz,cRǖ6OKuSlX]|O5KU|9yVwy~fŞ8zzh (73$u&δ'LwO'M! H9z}${H: +Pp/"4PPC@] +POBuT}B;fQUGgѪEX[[ Λȧ7>xtp_=> VWU+RU@!(Wr!+//eWb.vs.dys3`w= ΧwF{bÎ?Px}L}XG(f _4w@/n![7nzv7kGyk/զCq /W$O^*_[>E^uj^*EVlj΃TtIQ`r.IUr~(D|\X*Z5DP,ŘH$ BpB_|FU p&F!"B,xUjVzt5k45\RGѨ5j.IP1sP*J22E*-!Id)"J9$%b&ejpXe/%ė_j: +ߏMmؠcbbab6yg%n[nY bX}mx#X!זW+btu2׃ qˁE^o} }Vu+՚[Y871jֲkƼĜ <]WMuk]JtINukd//̾2,w/#}9He|TgϚkZJ]1PyfTOiȟ ) +f,PS4\4݃ZKzڠǔ'O+Sv+srew7SF2@/>JIl~# ߚ4 _(es8{zv9zMV>^V=B^U?æih4[75S^&7]96w`Lv:FjjG:(]{Ǟ8zG۰>ʀ186/ C# ֦+4:ڼ0fmƇ[лqqabvrߚm7翶dڇHMަl; P(ևeqfzАT=ag,` G?n32ʰ .c؈ۆ l:4p-` s3U9HBi sَĹD(JbĒH'1a)fN9qʅ\Oε'δ`y7.MG_&>9@|Tk‰q폣m=CT&JbHXkPh   p\H*A}U2 Jx? \T|Z-uAb_@Yꏠx/G)xRPBj(pBJ3J1d*&0#<I + 6_| PL3Ib)P"5P }"T,Lp3x&_M:gTccm7+*%Ӏ! + (&9W%6P&akQss 6A\➗{ӧgZk$Y ^KbTܴ^PD7sl ݂t*XA]+@HS@B'+sν7nnD7oyf>m'9 9\^?#=.˵<1>a(|H`!W# 8.c|y.weȥ6UϪ'7i7^ϯ/RqDk\\Or=.>sו{ณ)W" ΤN`7v=Z;^ŗ K!x] +/.5_=%IוDwx2XLqGKS'ef̷#"K/G޹a.͉0esYFq;oe +2̈"ẌF 1H71]OÌRݙ\b3/¯04+ /ܠ1p6?;lD`f02a=Gr+I.!93Kv/(431-$#p$8=gZ74\KgBRbt !/B=ɧ\L +=)O/؟x׾a<"|?zh_\$[#06"hl!(lA1p [t=3l{y6=$ x`)nWT8>av0lq_F   <7XȞ_wmܽ-R6_hعh~Z+V|/[zX}XcXOٺ=z{um~趬}mZfeth,7|:=n E)Vk|ˠ^ԫtJNZ RL-J"T)&TD&$8J=$&WD$qVBL" ;F0sj0X*$TTV3 VZBT5nZ Ш5н*% +RA*!LIdR)Z >{|=-b X?֏c/1P]څ G7+giGv;(06lыO#NV @-dqp czaho팹 ߂ og_@fS{Phwhw^?%@R3=k+}QHo)I*lc#2e?ީZ0rH4iw:};:c(uy =əGʳgR3ZE9TIvSmY{s@!ݐ@5u/eGؼzRR9g͂Ŋd,ح>֌E&ً/XX*J/j7 67P5TŖ:?T.{RSe1')gfbN$LEEYbש>4FGM>3z:v#tC̉٦7%o⯷Xvj*AzJe@E.A5B$UpJs9Pʤ@\ sSIUӪ +(5f)4VO`E$f-a5$Xu2̒/@ُT\|YPU{W XUYu17xq<J)!` Xe\FP::J-f{Ax׊Hb{uD۹/fVfq<q +r{"*"}Bq}u'vw :[[O}߼Iuuyj$(R#<8zI8gH8ާ'@tݣNt/b]:+)/(qh Ўb‘"E4߄5Ux=/$N *++G aWU)׃K\/,8g,";n,)"Ϸ.AsJqC+zYgQWςObu)3gJNQŧ%ϊN): dw!G OQGT)? wA$OI}7=ۼF9|8fǦ#1|8mCQ>d޶`CQ{9~-"6ȰJIt@L-a 0} %o$Z/8 lٷ aZrQ_~ +0W/L3-Я 4q4rh 4z + r:q8&(Qá2Sբ:(*5?\)[B*J*p,/IuwRH$E(j)+_{P0(}L3%@*z2\jz`0M E1Zclz7^gMrk"jF͡T(TJ7Cɕ +{αM#gC&0H+ޠ8:zz{a۠` ;:D1>Cti͏GC#csHmQkE5\5B> k~D,1Dτ@Ծ|R}}ᥙr|ZJA/af`(| <ʥ@{, !SD4ܳL!@.R#MD_dxӯ%zљ۾YݬHUHu<:bPcQ{~fcLYFFSh0=ЊOSXG d+KO~1כ6ד<ݝ:<I!hL>U@J3dOB1$&юP.Cs8P~'0ud[qWObg$NUY l &F@@D-W` +D +F47ՔQ R5`z2)uR\N"JVI RF +E)Lt>` +NܵP] +/bxP%J/A%Z +@EBT5(b/AShf4 +>2Z}b!ݷTL_xz{rT)X zk0H Fg-2mz4Q|S, {m1$!珵2b󽮓g"d_SYo&wawڣv.Ap!On/0 +x @ "*gJOND?nuU}ߣ_ҋUH0UsP^Ij{,y=<-92`1'eC 1#CӝiZ*&-J4AKR]\#xT{ () F +(+k:_}9^޼̜B0>wrn E \s#r=S@[N)yW짉<99g9Y;Âf|.\:. 奀d!' ,JNi1Gd2ƖM19Ƙ۹ѥF-s4be2fbndLͦؒnGQ])LNkJ>!ۓe K:)4G K%4>fW)NГ&'cwv2v6*BN\ic;|B 3~#aGcvn3<!??Ć;f֟p$bnC‚G3l5}.A$mY ڿ߾|ذeQ𗵠߼aW A  f5/U u ZT_cJKUrưJa1z5TZ%ooQhՊ%䜤Jٲ%% \5LlbHT*DI,s֖B$ +BĊ!,FDD$S(jFHƠWuDPiU:^4jBRc(נ:QԢNޚNS)U<J?l rer5F'Ie,R:$< Ob}XXZ_Y+ke^ЯL8k< :zʹkunRϺ6pRܮ$kӲ?232lg Q.{`q3_0Ÿ1ݷ_}>kM-ͤc OZTo3ٳzK5amGƺ _hƦ&uUQMWC6D\^el/HFHț:wU/I2^MD׍taG:i_h'5tʹhƞ SZ_<Sڽ:cc-q';G;]zR㎭)dr bZ2%*UT +?*BMEj5*IjH~ +1I%2I'Q R9лu )D uJ66B7FH3@UaTCu**/XE\"k4X $Ј47%XrY5y"䊡.Ou(f`͗"ԡꮠ(W)|D,B{_x[MbAyh]A@#1 X*ՠ: 0``lp>`Eh{-Fٜ){a p|K\óXoz/+za?G"zj b٭󧦮=ߓ}Kitf޴OVABP7dwg , +Z+ ȞܑUԾss,m}~BI8X,8/@N=8,C:JQYbfN+F,mE!biş+"Ҍk,djz2Rn J}DNwHe>>[ |ǐx3/9/"56=ۯlin R)vw$![I f"rʻ ++51jr/#^7.\ȾĄ.svqȼ`w<D2Kz,8RcD(c^W"K17 +Cg -H3 MF"0h,H6M3G;)BY LFWaLn}1C M %ܸJBptHrY\e]2]d9y! Bpd20]K ~ޅc=9spFi{ʰo)? !vE u3eiždMRfMv-9XYބ9a:i]ߙ^ W0N  bCoͣooVlMKUkk +xn]+6MUMWfik_^vsXiEܮE<ܮԶ@bZ)AkXmXجSskelw֚-6}i^(ޘk04b}N FӇ~^Ms&^Hu&yaF5ILsC;k5)q~č!չ +ʙl6KY+6KiLG|TGBlwllWBT{BLg<-2E93|b;bxDGY+z gxxS賶'f[#gZDuDſkF|MܻKR.j9 *a^MS:6e0 rG00TL1j^CubZ qpֻs8[%U/TA,J`TX9 (폁YbV"GRXq!by+hz|SC!/pUso)"[oQ$y5y +]]{;u̫(0(LCNa5sTD!ۿ誺{\׻|VUPT1ERWR[ljg ]Qc9,+P8,e.p4C|ymSWv&#$p8Q5*_Qhr qŁXdslch쌝c$} ʺ p@M6dqۧX+\\9qFX\m0/+s3n ]q͏8~݆=vΦ]b]۾kMIb]H3N'EKa;ce;#ث|N8s87߉[9Ь7Cr\vϵg؎Fpi#Q :/Ab @;| +O8|9︘v%.G ?1j^|y3?.!=1ySG]8}#^}2^wq]I]ܦ&y/o(.{wopa8av(͂t;7qv]mt.6mt8n5p8hl2MznU*-dG׬ESRjUvNukk&SE)Tk'WD~1RDL&#Jmk%HDIц!e >W2|NH*q2RLP)*Vlpֻ\] zg^ $5aIƢR:vɴllj'jF͡TJPrBim36B"sPȾ e"b7F( =U{t#mNݩ[MK|E4ѐ2enĚͩ}D 5m {1Ey1KgҞܙ2LN"(z i}Xe1X2 c#F7$3[1x[+ʻ؛;}DnC$6Mf^wbs{Ăn~Ei{mUd"tyDz1cҾ4 T,UFvFGLw^뎈{}uytlWKd J$VDt;pU@_k:/Dh=x%"lYřOB矅,<|GsdDc{}t +ᤓ B&WH0آvjB'e*)Vz9I&s@AѪԠAi@2AmW6TU79`Iܠ=o34I.9^#l\we2$ u &Fy +hɕCS6W<ϩN_kgx>~x Z:K+d0ܨf5lU`PiʹDęPx$&)f & 5lxt h ֤.h)Hl-`G653U!JWd(debeg2|ޅf!x!ҹmJ~q %Ɉ$ D /D;=lUswؗk6`@ + R:biaf2@}s>{$93IJD=aP L)c +0 @ ?9 1 <9+.cβsvA`,R++f \d/S aGtIj[%"s4+<֥0cو(0KLřcQ&4#8/O4&Bo aip F!ah-N;M,-PO@5М|XX@?A +Z4]VhjZ޾/œ}e}ȗKm 8GMw R !y squ:!~3$oŚ$s A~C$Z>kMs[C(W/tߪjwBo}RLZWOMXȗC>3_0ѥueSOo],7Mw7MYogN!U2^ф׭'޴ŝF%M:c"gDGͶjM~G +" + h402R$2_|2XRbDB8~$zD : +42hho ZN- +@hJ9QC)R,#UjT P ]f?-Z0ngnܝ Gj<_C %<.Bc>@U@c%Ԑ+9I1>Reo0^Oe1, T]Frբ|mU6:TK#U9~-W_tDmb/2 +X$W#: aAGjyF<{Co 𜩿cl8} epa,j`Vr^O֍r +LP{9<+}pXZ'0Tc<4 n {ta c"X 1k޻q +=G5ӽ\z6ҝlo0Aӭ,40[+`+2qc,a"(L +.TTح&-gWk Wf2)Z!`;`-YZlSq/%S݋ +a-w+ <7w9w]v,]x&ܼȄyd_e4+ʂ2Iq/S,pa`^(]~̞IaưBVwפh Ӵ"O0굅^ ɠ5}1шc}wad=G#4?t^2)?=νH:}KGcOe]$'3/FBy LK9\^b9tpҋ\E$JuJ /g:+ˡx6;t >g_ǝ?ʵ/1?#r&tKg2 ;qvGOrsQHn/h=J:H1Eʌ4kyfZBi\T*oL[UIs RK˘i3, Hc$Ed)DO3Bk͟0 +&HpgK1 c>Z{2 ݧ ?|o!WG)S3`i{[k 1p,ͿKʱx7{b2I1tZaIbf1N= L 0"D_ &F, ̊c3yb:qeQnz@1\|5^'ҢFy`9FdR%RĈ!?'sf;9J9\G`_ :r$ۡN9l~?1}y8G9*d97̑}g 1{q{6qKx b`?:PkB3'wtv}ۦEVh'o!v~E@"߱B> s75;7yvgl跭趮~Ffjz*֟K R Rb Z /5/jmƇO ^Qhrh>dj JlX!,xR_n9DbD$-I7"brX0@_$j AZ!%\)W4ZQZVzZjEӰLNͦ)TJ)BC*y2D&yX*rHب/]&˱X_XSCk@Vi}A߷ծ*H y?|o]!}R(ΡKq܃9-J!C8k^ٿ yuSsU#dw>a>s{6~\O2۳^w^)mkTSKJSMv}`JΦA:dN:ޡOL12^bOZlY[ T(KCiQ6ijuS6J=攭z9<˜4eўgOt5C//&- k+h=n섺 +i;]6-~A/oC_X0գ1szx @oFޕuP^#$4UA혁fs5֍!lΦV+ZHEuAW/]H~?sS݃n;4<ވ؇jpkb@ɶܙ)>CRhd4Pnu7$;l idԳԥ#w7f޾ItTTY6ItW#A*R`TrTQ}tR($Jܶ28$z5&r56f#2j=6|%6r-3ݎDѢ`NHdt+WG0apg[C(3!IZ̄W0`8$z/\g/F;b] 1N빈8;ε_ o;4Pu=U_ `RR*O:J": 4I@+R5sPVEbhd +D%Q%^#W#jX PC"o &ՙAETPe~TK Au!aq$E4b^5Y =9,k?PUʛ|9Ґ'Cs.[jHCQ!uJ!dJЙ2Z4V@9WP{SȦURMw%t>րR?[T* 論 2P'_+b ,}5gUlZ0rؖ}UNxu1W[)!`Zk-!c 1#s{ꋅѪ.C `Y* +x&@9|&o/,_i~[>e{EykOGKrS(R Lq +XdsN*p$[`W~ŃH{s d]c#2ck܌eK^ I"0ɑs#Iဗ% c^ĞEqg%EIFcaXj4K;k(J1M$b6M1tZaIbf hb32n% L`^ MXrlYq\ܵ[OQdyzB *w[wuuU[9G5 9APq]ӊdTD 1a†^ zz9oԧ{: 0s' γ}!Pf:b#:v%9$ǘ67ǑKndz0̉f%H9/tpFPz,Dž`E\:BqƁnWj1})0q(woor){ڝxFԮӌCRğ=;]>q~9s;2>ܼ#B}aZoEm?g=srwgCvv7#{vtm{r2|t ö 2_E ~:@d刂e !`l]Ye-~˰-`jQUæ>WHmX.Zү[CM&@ IJ/fڕ:4+hytU - +ЊRk}:5UZj_r((ȕ2Xn1d +rd$(d1H 4 ?w`jo`'s?$!RFzUP*Zu:A z@y>ZGc.Gih-FhEhP4j UHis$I_XYDM5ۻZ\LϪj%!YS-ǤeB%]*t VkCϚh7(: ʼigڟ-r#Y2gZzzG><~]c-k@&ܦG;lh'c~aOߴFoZ팦WoZ6NW9օXF^;_z8}Fgpjp ^lK׈ej#a[ps|Ᏹ'ޖLw7ȵq!^fg++)׎ڹsƥ9vP3XfW7ΏZorԘV7{/+яͲzԸՙ*N@ #;{JN#$e0S'O$Nt$%ʹO&N ^S$$.GbTPx?PnFfZcӭ1 qhtѨJ|*"Csَ鶸ӣ#cǛ"bƚ응iͱQsgbi`hTA rqz[p + +{ez 5Ф) U(ZK@3h4xA: +h}V zhj ǿ0fXO ΫgP[@q9QZF.X$*!;8ŝ#9k +\ S}rSj9kZ_b+T+F{].VS:[wZttW_/Xӳt5 `Yq*X+Q[1Dc'VtZZ _4? +=/0K?ᧅ7gw@@z&X]]"nP~\  Xd/؍"בOŇuI/Ç P.|~:kfyY_yڸ5uPxȑCt߿|BȱndzdcILǓ޲7Ҧ;+gRgAe)KTɨJF5ZQ1ٍ403' 3ҒC{;n~ 2^!vGK'R 2,EP^{JdAJY!㷖ʻQh[[tm'|2M@ih1[;څՍv"l4ZhiG^ ^- ôFV;5D3CW^F`6nl^D4- >_huo4|8ho4:}&~hn͚hI7$-"Мyl'ƼUyꂕhDR{S( pH}@$Q$.:+VÂJZ0WʼaVl֕ Py‚ Is⧻.MuMꈇb 3HLt_4Wh^-5H.r#"V:9g9ّ3m>5FCV@&l Z .*5jTI48rFH%@BJeY&zR4 +P)ih"%)NrhI(4|}4r9)T +V6-a?܃幁'P@C69xoДg\]Q1V#H9כ\ Ag[f0PX*d\.]Uf F^vXk+Ti{*t<'Wpm$< ±ٽ/ @=P].V]K(ET* x@Pyn/{O+q4'GܣSœ{{G`\:8n,Y)ˊQj~q +AAk0VH"N¡[ +7*ɻ0Q9W Ɋ.2p1ؕbIZ4)|Q#q!^{ SSMT0-Ta ++-̄E)'Ct v'{&caCUͅI4$rn'\!C` LXw=4xUW\AW09dǣkˡ9F: ʂf^2@(XqX`CeChC` +?5//%&H@r#?) K +::~=S_Mk$m]]sg"(*co `JGEAtI *`C_tw +̄I\|}f朙LXs+ |6؉.2% +r"&;{~;lOQ#Dlt=:lT L$_/,>v2tQN$'l{N=;?}nQު<]s6:5;4Sae5۳yI{6_.4L7`Jl=n3%4gS_l˽q:&mk8/5ѹX|u@ZԈ0yXfjȺz8T=Z8iIxgiXާ̉'U>fy*2ƬX%*sbDY5YVU=jGrGh#f)<yzyV҂nw툹alE:ulwҺ;}୥{҇[^޴"C ӆ7ۧCw&}23*Mk8؎MUiּn4nƞ0_^ 0ZY9/X{?ÌX^::i&8u5!}~zSxk8W G͇#w56L6ORf:Idܐ5i]jHqYuXtg]bR6N UgpƗʨkVT̘+NNmƲ;U0t򤙞gHYҌ+MqtKS֒ cѶ$gC38'|qmN9ι11.D/⬘豖3NNpj'Š{yy:9`LԿ@PjjX%W$2)BHFtR|"o<(F{Jü$M/@CQP0tQdS(@TU{i)|4llص PtE +J0ʡ"*aEY]>A}M.6gj4kFyt._<|Z\،GՈǐZܷUBr/W-eI9 hٌJ|/\ƨpw-K:%U%j +FF +=2譓B_=Eou U]a3,:Ċ-h\ TVʰV`A9fF{hτJ !`y&sdN{Mw1AbpG*oN@H-bg7 +қJ +Oo\zrI{r9Nd vFC3|gBnyw+8@ͻ`NJR8&&Bn&PDq~ykA ?VErќPvPf#<1'# 9RcB wEM]Vifw`$}\v?lIw+I^=N$*ϟ%n+H|366{^ʭv$-/tҚ)5Vj^2{/\Ki6I?E(6 !X*I$nX`PHDVb1grMG@lbc's.JR!WJVF4 +ZˢU*D)hvj\%ӨT$X\sH2+!I1T"ejM$K,pV '䛱C`_z7c36c36 B +<^}ϣW~;8_yG›ݪ]CH#VK?0ߊ [h)ϑգuX5!G=#o U[!V5HU@e&@U'rWy6x?݀-1ݖ˻2踯G +0m\ףCo&Z+ . +)=TРiAe)XHȍ4,8$388# ֕ +,I*f F$kE):F@ar%4If~WtڥU̻&DkN%Pᗓ;̊'eRPȢ͌u2{5 N q |b-rH `|/0-OfsJ=o'x]6y^^'Qy$G)sGs~aw1VC;1 S?;/^u]m+hv;hhv9R;nׯqs᫱]*6 + +gYGQ:iy)5rzU2 + +rRLj *MCʥ&IIHKEbD"d[m?"bWDk`C$KRJV!jDh +F *J\BTpHJΐaR)vl8$zj [[^kԏJGwf-1OտS9r2ޝ!޿ȷle7byx, R~MCji +~!.kE}}޲c]Z lqeo\_joz6b6;mLjۑ6C49z +2u'?K.K}׎`u؂uIib[l}۱zzku2mږQ 1/3FZG_. ,cCoGGі屑&p# L7.N ֣imq}d9sgkʂ5ykIL韻)w,–S-lMVh?^Ғd-y%jN\4ivj( ; 6U',2:~q6X%. U[q= gcbGt!1H,KDvF" +늲v]ػ:qyx\\C+’’&^_knS(DGLҦa59bZ"6] _hW:$P)EHJ]jdP+cО/2*FUM. +u-h,h*x]F@cb$a:% ׫bQjH`2TGRz`WCEjJ่!Te_yEw7<'l:М5 iJp=8^="(/ˀG_Z&hF\4=k!>/EJ@a8*Njawx^@+gzk'[>zez[=!a{JpOeEi +7P 6s{Ix$D xWmXy[GMA@ `Qo\ʈJY[Z4aF@5IZc{xhi|)!%)0CqF0C C %!XȽdJhQZpHaj0Z *NXn A ,n< , ?qy6~ ksSo A>Yq\97 Pq=c7=FCy öcc܉iq>%&޹a>IhQXK KkBG +U3^avȅŗKN޸hԼ"8~NW̿zF_3GTg/"Cx^ qŀlqJ/s:u+"E G#yc?x:y,<#a>^?rǐIQT;v;y"Np]+s>z,!7>t{]^&zejǘz3[s3޵dNbhkw]zXgG58x1޺0'y5$xv޶;!wyycMF;oL}Z9V5^1 xf Gy5쪄{<~F{أc vI45Ҹcx {Mx0& 64j +o2@8$ + D($`h%TCcGܛq`Yx4,fqP0 X;18 x6 l?`)$A`SP7pZp"ȁK,(y|jUD +TQc3Y kWzT`JМg/rf&*rL^YP'rfa"+r1R/˅|zU{Eh(6(A +b@m pݵw rE]ɂ +f*3Rq9)peꋀL[s|Ja+VzWԬm\o[FMT +75_7pPwU j)U_ ]5WWd +JK*1Ce+-0VrnysJϪ)܄Ϥ*9J׳~Q9rW31,dʜ)30A) jgv)؅T`Ο\Ϲ*1]g]gba (Е{:/;I++`^8$H:~@ٗjrQ%$lPSW_-0'屗O a.(̊)늾6q-S5/HbOu.%.HS׽"Ϟq3 E5wDSQ=s8:<;99!#̏U Jڜ(:)# '<=QlN;dhSAd?@وtb_L"Gw.$|֒wn6!i&#6ly?ߟ+l_ߺ?!?JTE~|;fF슖l-ȆwDj{xؗ6j_o ߰nGa;6~y÷[+r},A-r,e89.ꒀ5K.Ѱu/4Wj +Ѱ ůҰ- .qh}솸P%Įt1AX5hA-3"mQV%CZ(Cf3c6DҳgLL$1gfِd f-3°5ψA;I`1 F;7FH#(2VdD+}Cz#Ɋa}ku،j#5 ;6^ R^b-6ήe`lKR<3b47@ܠW3?l׻zXOyhl6ȞjkN7_šҦ1}c:c6ݘb5BջP%ϚjhgM\)U6ZkW +XɮiJK*fX%ZmzH^ricYC?hOlĹbі6G1bю.Nvvλq;tNT>TkiKK9K3o~n83}(?8p6 BPJ% AbD#B(D/śOuJp(hn2}+rPJTxuy\)_ RBB +JB^B9I/W +O 'pk|eP+ƒ<41)9<'@a57\yirmR5͕X%aX *2 _&3)JRJS(OG2L>"_SJ3ʲ*=D@m .@=^h{^DR˅Y!J1$WZ9JT-J42d(р/c)eJQɀQbk'<1>#\CS'*Wz ͏*/D@CuhCUR] LNn̦4[폊(Edz$3^Þh[Wg9dz[3!: Osѽf~*rB&v V*mW\!\ʽ ܸDpʹL@%`3eƹB@F,0|,?"ҢRcmHA)\ `;>_N%Ӝ'D]SG3aG?Ĝ;_~;?jH\alAlτ3|w:̝ +utfϩc9dvۓ;S!EuOk`~>fF|I3PXsM+NJ ?vn'd;''= 0x/˸^:_ҨSigzz2bZLkҺv]u k b@D]ap2@s0$Q23$˫}{]>}wn1ի!3/h"/m ~Xk+Z&؆mbT`.Jie:UfV4ojiu3ROkHyRsڼiIf۠vZǓ9{${ uѺsfM=H(gF3|G1M(CӦap4NISD$i'H3=li,k@Tр,~A}xc7rx:FiQh=+abLc+m>HhH*aquhium^i$ ׮jX21epsLtsG%iآ[C$cSb)q_@n>A@=WkWk$P}U es>~g)HU22~iWܲ`]@h.Y{bb,ݱQ֮P3p}ݱvq[@ "׻qCu"L4^n~>=Rg՞Wᖖ5@.R=A@#!`Cmy8pR`}#< +$dR^7PM2P9(1Z@xw N)@AQPxTr:Y"P eZZ}&!ҔNKa&&:RI(WR|Ӿ 'ח2% bVDjbRmU +dG&Nt$ʒ))k9:ti%_ ^Ak 0Sd.L2Lc9F2R4ff]XX;6n^Di{Kih{Z )-װ/W; Կ{Du>g**r9rRʲ>]SM)~.#]X|w y{g +S9R +^pa,z / kT9?ϳcx@ֲl'5(c!&(`ɸ JWj,t-%%GS(1s@$FSt;kcfy˗u!Ay༔4~848_KAc(4/)4$WOxjFH@NSO㘂!AO⃙Bܺ_`e<*y]Je . ߔ{c__=8.kHc_4]J^sic h>|.%D1]x!qy(ΟƗ9}xӗ懜?C=; +Wl%b]~ +g:u_o۩+N +1rfٓ'n"藈3ǯ;?]=wc{qû0;{y4w "C;<C<P4x3yn#ilu)-$];=QpwpN5(1[5NɽܜT#P#uW~B Ir& T2UGR*H 4\.D\HqA8!$ ǿX,^G$0A6wo]uh\E kBspqBR*jJɡrSJb+J +'2E*CȤv2H }̘pBBpHPÝ43R̗1Ӱ?ؾ lmmoDbA ^* Y9aa>#ɽ">2O Pn<n}yx( M[)04B}5iæD$6 MAo&&dlrbܴ-Җr͸ ;cX'0h#G)-cuI3 |izh}+#WVahdiutYcf~ePç?>-N7ud-t6.[{Ҙl’V=HTϣպc_@rwT2T;+{TQ8Vgc+Uh̓ )&z^b{;:E1E-vEn;ݲup&HF^8<3"k7:n;"#o,_ +[l >ݨu]3tO;+]J6@D'&VJ5ɆrMI$0'*7ËTӔ}I$ŘF)jhe:RETgSr(jYBj>U&Tm$6HH_SA`UyM&K–-9$M*2 JxfEV)Ġ#gx#RTXE>[y'KEh],*}m.#nJD.s5 7lEil#X +aӋ >S2Nwh6*O^ݡFQs +rhɰ/ ֓`.%ڜcF,I/$S.d^5䧇ib Ph~jhH^ +8o(I\DZ!l܇Q)0'6)87޽!LYYrL L291ҢEZ@z =z \PLFRI18OF0x Lo :w+ rAL y/#iAn<H @H Byo:uE7wØ.lTLy!?7rǨL;y +ˏ7/o/'#p:q+DD( =t<< oX~"_a!g~f8kA0|Fzvo_oܻSԿK!o-c^K=;};7ew?:M.kჯ`K@gudt }x>~h2X4mBmդu 2C%$4M>N l)qH[7#5&cXxyÎ;n}5/'qYwgVgQE Em($D $IDi 3w{ὐ|{7%N+wz-$dlea3Y^Lv;ax>b͐nېё&Һ25뤩eeܬ O薵SGݷ; ًH.b]#9KL--{ٳ6KBb[)-ilq̔al4f,05җKKp?bBҗM )mfBI i Ƃٞ+s)kp$`!%Cw*F IL纜]%ξn$ϔV\u#|W,4KJ!D/.Fٻb.tG,R{eSLɹn?py@&8/+8#pH><< ||*y.C6#>Wj) ^ۓGk`,[`ٽḽ,gf!ei \['jL%7n(\*F<\@s*t ճdgCn9)lIke]^*#dG/VF(PGD ʊeEV"TE՜Q NSb ++ eTz=Vrf!䦚r$ݠ+\s +g:^Q+l*30G`mՙUJZHn2$'5tv + t::d:,)82KHFRaJK ˜o&:9; ur.FÉ_g8{2sIGO{SJ hIQpL!M;M8{= LrHyz~kLA pp1ND*H䏗T.Qa'E+G"U?vЅc =׽ٹO_ wwߒk~Hlwz~W[YIto=,ݛ_Ow+\|%u8o 6\x<\. abp>\/0p>_  +RD*d + +L*IX$&0׉:$vCYkBMH\f+ wg"& S`߈؈oQYD6鿬d+}R=/!Kc_gvWѽͼɗۋ=4klnihAʂ3w5?>C[E [CԇA6}QFujf{7!}~D!ިZNi*stY s#Ïzkr>g)5sZR;Gh4fJKl`  E3BxJoe.{pg2%{Se$2ᇤǓQ“ Pƍo1]82M@Uq=};dfHsc6T`ךIӝ)I]jrQ}Ĺ.VIv%vr%8y;q\s#։BbiJ -n#&zjn2ó&G_N.uv"$@P NHI|j#D|E4O=ۃ$LJk$e09I0p )+i"5$h +{Q$xiG$G6H~ 'ҢN K]ck E ̵b'zqiV@ +")|'yx1iU+hZGX%5ejjZOt?A#?uV1@:ўWh>PAk{@k aU*Dpolu|ẅ́4ނקOo՗VwõkGyr T_]QUF{\QD*!<ץy +x=]NٮaNHyp"CBei@K/]D+]rt%*H\*J@!R]׺lIɆ=\DGY +20ZY~9*.2\q='2f[E" "4"ofEjnfDʳ,.]ppZSaW"hNGpeNr x rə{NjScE\eG Sx9A<&­q&#GWSBrhZ#dX 14YI#YI\¸g$d$IO#菸vB?tܲ~x{x~K9QgB8, t0?YѬ#xaAX? Ǔ89t\DX}gÃF;w8 Lx?hFĝ +?E=cDŽ:9C߇m/J?Aߎ{| xKC۰{ⵗ潇{+][7wѨcOM;7"v;|x|%W>w`nn`&.bKHR*d +\T(*5P)U0WºBQ\ڋK": !"6gkH;b.*'P">2>?|=c=sIJ  ?G(?LU-M)&v b )].-}󧲍v2%rXM& os`rMh3C[e C>t7|BV(xȵh ț~òU!ЌQEVg}`̞ΘJ7|5[{﯂5YQ3Og<͝16@y~J9 ™>V<=gtN_PʦP{c^Xd ~ C&]W7Qh1p8靄^WN!SȻ44kiu=sͶt >G\=1h-2(V@W F +ZGܤ 2 LU Ќ}j ]OE].5? XDk},%"Z[i)ft Ci|}sBt} +ܳT]`]Umb,[sW=a<渻,̤ 7sY"(ANc's17\EI&bVC{Ψ ~}lˍ]|w1s p&ʺAlʼA\e]ju)' s% KcćiCWx'/^eLtma0W[]-HHa%xgե_c-xؔs);֦wc.S.Ck[B|\Ⱥir> Z +i2y.G{A{>sQ}s)&GJ9#4ҞNОI:n΋T\ٸp3aKNDŽZ8u;rq< qQ[A&'oLNܸjx~[gpxdɱ+p^q0:C9jm;/-؏1_^69atDp < +:r'/_j<܂t@Ny ?vM^ y4qǑ+=|\OGWITvTv]b;1 9b8pAs@Anol"[gm{lRv`aoNG鬶JMeAQ8T )HQ$S+lS-HIMRjbmH 6K6L,M$RK8!^7A&s8.2bD"1-Ee}Ili~"B \@!ET*U$IЫ JR)rҹrK*Y dR#KJH 17pBB!HƸ!2 lſ؊؊/w$&f2Xt/ɕw{iH3Db|=`(oװglo˥Z|kS6Dnxga6,9oYw(F9>޶͚ufElLv;&zb[ECf*d$Kcgߖ&|HZЗ%>EYsgH%*yRͪI"Yuz֋1c֔1CiddM"/YmWi};7ݍ3zzׅS>V$ 2}|4O臑hɸm{ y_:NG&'iS]i 2[ɘ̳jǺ)Ǻ(c[0ɵ@ie{Dy9`u\t0zhVZpHp +Pp022Ҵ2:@42R4@pO͓m M9ͩ =ɋ}o%5q4&.mL+qG:+SkmA55qK}\Fܾ :6@]T, b1n.3f;#oDuDFwE:GaEv0BXkT>5:*0btTSPJdK@ҿrM>ޑ?]1"R5"UKK4q" Y_M4;4Gi`a@FUy? D;M>]h$7)&)@Z9Ǡ:Y9v), z"su]κۺ[W] +CRE ]@2 (I%眳DEP^Yu}fiXnW_uWC{ShOS2UGkڐd V5)*IHmL>D@T$~iV/$ZY,0 O#)*q2$(0 (QJ ϯϵ]%tFc&l >A{  +SBgU cJYQ: Z{-_^ i#xZr9WBk!š5<l i6V){HWX4Rp}RQt#us*H@>wBp # !-AS+ϓxyKʎMʌAwLLz.j.a%JM!DuBoBHAb H x?’ׅpoEs!'߱6;t=qun +:F^ܦLγŅ 9#cܢBtgB<[rs62L \n׭dra-Nz͝ua^5NϷx}tuܚ]ř\B.ss 9| %Ut욯e4x`mUS&Gu]:SN8%_+n?\^cp@ףt']W<y䡟8j#O{j9e.:y8MsC֡4*Gqf'[?MfvXlf(nG3] ;hۙi}j"Ag;3LmoMeY3ZGU"5 +&r5!2|]J\'#"L& 3JV$()MEy} H8p$ICQk46ZƆjZsj*϶BTJGRZ! +%KA+HwےSH r.*d+~_B9nH,Xg|9#gT #Ɨm>N|]K8{dëE-~4rTpU ?E--j~!aKLy] nZ, {1 Ϸn[/z lz߿sP^}_Ԍit8&ɉ~;rGc6ӫ! G,};X3_94bf }OI̼(zJg eU;GdUMQ 6~RǪOk@IӴ^Jђ<ۊX SNzpMy3 }?m5 O9o /)4z?nxMCo +ih-zC{W2M,}CBh1[1ͱz( 5c}Ek{ƵHiyh}ݱHi{bu-QzF}6z>Ҽ44ڲ44ҴLyayxqy6-i W[|ۡƏ#jhoIjNm]0Ђ9x#8@i01ŲbuhB"D,3*rq$_ 2hCU4I%Wpc2|iμA6vT睐ٮа[u]BB"rc  * P@I#pӝW¦NG'Bf;.GIk˓Ck Zr)%xD1+{wu?LP( +HQIKX2(Y$%,A%*A`]?;;ΊwUS=o<R UX:o|RSNEhMqk,PVϯܒyl&oSul+2!K Jt*5't&r 0Sd)E9L%ɐ 8Sq"5~rc}rҲbrɼA^1<.iѨDmIŖ/%$1&uea$Br¿0Z@a_au|OQOߧ8]HPYxy=7 +/_nB\)O|l(E!sCX޻u3yRL;D;u'9x|q2Kn\v":x5`9`t;zױ0sGCr:95:r[~g9{h#g~x#7}=;GI-SG.ە~:۞eNv{a7ο{/vy'] i?p8͕L߷n/=v9pioFjgF֌*P8ٚ;p9(7fd㒏FK UxIO&FB$1BȌXI$nXO$ +!M$B?"o/[@hR3(bDBR6*JT(rB"HdR#EDĄ BQp1C`pmv{|=>3B&C +TU7m>Tm'5WB?ϸ;@|:7qV&,QVZ0tmۺ ==[݀317(,(iJI.pڲʤűJ`uҊzyԪO:J}@iLY6!(ͩCX U8Ԇ/ XgAWs;g^ۃk{>w`2\%^!cxD[k|NC&)Sibn`yS9K"s'ow57<,,@)+M3곙~LolLkӽzktbʠO{ L "ک啮s}lk}LױnۘеoɎ)]11ф-[vycVnc\َžδՑ.J'Cmm}#44G+dJ~%al*~}K܆i_aj0701"nmOjb׈ص1! 1+̨ŗ11K}QQ Ea,aE8fA(S!ldA ll5#z{obn ~:so^_1pjo@R=o?q8P!R$[؊%ۢ([ȼ"D $fGQP}PIEhPUB.F +Iv]#t."[*]R!pE5w3>@w}2P@c=deCЖ%B$DkܖL-Y )c{e +hMLs1,Mī:qH4kѐ 4BTERfj| Au=QJDM21s0=cSTC + *3U)h z[ڳTfrQ A_T*%譒z*DwtW +c!]倥\QGpj.BXlLC[}>pKբ=aTk$!ۊLh +;Jt*PsyŴo rTcLe<Ҙ,(TLIy؊+?_^)rcE9- w!-+-;hFCZm`FŖiD@ZcR 1 !?S[ۓCP1>Wjd&"HqaA>A%H%r U=cw {S{=}Ώ:/5\ k +їt"sĢӖf32^]fҫSe&4U.I'ҨS8LAw +`d&-U`N 2bX IPgDL3n$h- Z/=^FZ.AMkaˑT>qk\Ie +l5$ǰ bS]E끛DxVŤ 71`8X@kL~|9j{Us!p 9jw{UNgcDXҲH޸sQ:׵g"5NG/xP:>9-L}5ͅːp3Txۑ<\n'G~'vp;x8y—8 vZ<܏e؇m=nwr=IypʠIz`+~N.޵\9(v{*Yv8%ݩpPH=\h$ +Vb79"ue'/!vr + '\aBhRwX )BZo]|>F# iGm?ض?}_V`3W  ! D,Ȥ2B.RL!4bd NBbSP CNac؎؎-H+-Iǎ+Lybu 2z +9MVw }J{5SWWRF]]MG F6ʦX[5V s>7}`.!SxqNb_pfEu'""8sXxuM=2jjJ_nxLWT\WwzTK_B>t̳ρ;<\$JD/a_"MP +E[$A\v2A!$H_IH +F) +"bx R"|x@!)qJ\nx?K /@M)И<)y\HymIKؒg[$[S3'gxŭq]<)`s5231,Ru<؂ta @ 4xH :!J假F* Wf̄GWS`.8g~N2Ϗ_~syHK9偶{|q:+ytT +M}̡T=gw+u]c)]C ]}1;7y\HW Cj +. TS9zcx!J5R9T5o!܃5Tw|Ӹu-JRlV̮.6]m$PL97q$ d:6pLh2o:K3<$=C`-5sH@S}^_jz/14E]E- +Uge̤W9*M%4NEF&-;HpIG*= Ay;i"9w3p8}}{؞:ȷ`٣<3GPa!VTg ߐN0c{‰~`ˠ8G3lMlؚ9)H|>9QHlXfDv29BD6Vb +\ >P@"5X`P$_ ++>c% >&`Ϥ1?؞! x` V h|@("\,KdR$@"JhDHl@Bk8`Ql^^ >_$3g6,o/C+?+-{qԮl~U19l>kװ.Y돾5nW9u4s}kNϰ=uTF=fK6&ӬO&='wE7yH9qТֈcN_k|ocMd Ⱦ]cUhY[6ȹ2lm YqGmA>$Wext򥆺GykSGEcHxbРY> F-WV3BՑl*[&t_%\[~]_־$T.kW7k 7[$mh2f0^&{wׄh`vYZ<|wo'o  +HZkZl. 6- tƱm~XxE=߯#̑^̿"Α MzY0ӏξ@ &f=əmhvk{nnζ\j׻ɶ;?ξY烷]CUݥ]Ic=]&[\ +': u iڨTt[-y񖼭1f\h3n7Dr&[4-)gkPs~9kC[*;u?;um -}}0P#|Ȁ-HcJ*KJ^'$["*\,,fct긍بބ+K}щ/B7{ax@bro1MA|8a$G(pKH +!KbV`$5ȅ$(FB Bb><\lB  X lD" Aq88A_*x^!"#Ť5U|N!7hr4U9*5UhU>R_E*rTf$|bPʳT Jfެ.ZIՋ&eʠRRe 3~*ߒtU@1J!,_JԤ95Ke|=kqf[3dJK#6¨m#HHa^sC6b= +Y@gl01ѦA5*܀23(C)ӃOqh莻_[7f.ϙ_7?, !4sFSh)ѵBm!Y4;g(3H ZoPYgsrZ׏40 VtӃCp'1R2 +Ai uo:4;{K0ze +}T?2=34>5럇w2߾h߽Zyb靤=}|雤d"AH7lux)E5Mאokㆮ541ѽ6iR&&:V /Scm_?е`x۵>7YyѣY)Xc4˃!JNL]Ҭ 嬚9+]H'WIނC2nM*iZFٰd蛿UC[a2Zhfʒz6JNJLkJ< qACA$F N09sCI1a>vcNÏv><๰O?c 9nn ۂz46O'VpFQ3T~.MdAhSyoL! vݺvꂬLD e]aMHN!ѽwz̀ UW{CS i=lx8BQ4V0fBpq x\΋4QMdxa8-o$Ky&S!N`*XUdkإ@̚/aVjP@g!+@h 1jhZ^aAcalRq,'JP %4`~b-b-V3XB pR@1NS[? mwG㷎9} '> ;>2۷}6^m.2۷U;j YcfwslROwo\ɞMtok{R^FާLvy&:=VR_͘m8F]o3mw0wbݓi5o/yVzunT1C~$y,i~>x z7<eX"eP DթcX6mԧ X '7߷7fӬ,x.z3bhrߵ<CH{,|Gt=,6yu筡E%ÆAMx]:L 7Ļí{0 +LNITP6]5Ԋ͘ssnlɀI`,<`\j<ӹ&Kcl2kl^Ϳ2Aﯙ3?V%dcqf~Y~1ei'R:i~$qvc s2=ގ:t7V%O5j9@UCT\?El6- ^ +/Otߊm;="6zɶQ/cv#-ǔE.2g"NqR&\*] qv%<|%D*0?I8v o@N +6;Y\?3>XHƵ`y Y!`K .He7(xɬEБ,/Z~!?%`A0z|!HpLy,?k_R\!}L%FM(I=?];wt1FH\)?xŁK-_yUu*"GFFh#5[#s0~÷le#`83 @ +Ҵ⤏۽OΤ?t{R&}feZkf㰕1onvH >[YF7.z̖0v;-,n_ +q€禙Xb6ݬKf5YQ">%>1z/k(أf:~a6eQ[9QYϞS/hBuzzD{3%5Қrf֚7%gPg*S~{ +==/yAAzE{]^C5 Q4P 2@Fah6eftfj4Ȼ7)d +zM?xM׿E>@zheyhd07ٌݓ/ ':F3l;A4OxēXx841ѵ@&&`pʻOS㝆O9>{6Vzs8Ԇ>$wQ,q .؏d.wr8Ԗ:H. 9mr2=='b~aO5;rKHf|xyΘa;vUDHO>8R&}jeZkf㐕1onvI >YYF7.z0W#:, xn~ kNmSjܿNQ:D1ףD}J|Fc=^xPf:naEm]欦F=/gaa|zA_vĩ$ x/!xά[[[[5x r;*" *%Ǡé9M NqK˅(U|U|_wٝKU-ԀZV]g5ȍFRdif9k{hϝUwN֛Y[pVY=E3^xZtF}eD?k|C` crJ{:=|B3JL bLqbD/6S=N#e׍.ER +[nV,Y1M(zlFVvc 40YVfLgܧ Y6)[*A14$4!F4|40||›@_ 'EB/)!H(H$E0/G)}#BYW<5 Edjrj|H^?⣖>j-Q[R>CF-yb/#Sg7#36"dp';3 +]'NˮdũDw·O ,5h[1K?܋?g+.׏wnTN\:q2:k ;cKGrǮXOBcQ'.Hw +;sصqZ LHUv*Ğ W\xȑDK j_qh|T sa߆n}{P."/{G`0 m ov"|Á#9ٻ)=|v8Nuyھ3ǁG7t@o+i'׃U:- "/SbS!=Z,M@ T|eKoO[J'ʲ2Znjfᆥ#OSƖ%x˟p kdgծ, ڵ!][Hnd. p,lM4lp-D`TOS[k]p22VGӭ J̯'Lw%'v_MIN91FD.pM'4]ƍ8\bW8qC9Dq#ř_ )ܩ6wz/ϴ4ɦKc-0yρ`<rG%PO"EZ%D(S +EOB" KL(ް1|H0) +,xr`C{ !|(߃}@_4@]VТ[Zr݌!h.@Bm/H:\#b +#M0B+k5[ڛK5y)P1<,{ +3'~nD̓cȂxSNj"O"CCgXUr1A0;q$b~r!uѿC=*+gƜ:ic>v`ۀw wہ@m||v +1Bݻ͜||w3 +psŇ{F6PW(|o^d)R#?"Y!Z5R*bH.!y=&<&WM(xL ; y@wI[[|nS<0lmuax#_(E"ÒJ$T*gHH" BHZ4Ica^^뵖'`p \:L4~a|7OAg@9qlϚ[6Z2Z 뛝<ݍ.Ylw`݆Vcip8, o~ kGC[Vm6S^QxV[R fc|nR;?X=7 =yC65~֦.gP5sHMSjɟ!!mH}P ݴ%R0biAyml[6/ [7ˣƖe#d2. &S#ߎ?O[pZKWӑ0Nӆ[~N)kE+[KC-\pSYA&F:CCS=[u֕ g,C,luz&:>?Pd~u#aZlդd:]u#C"\.Ct'GJ4fsi%"ڲ0Śfu# k`~u-RVj(tX:eSuU)2ɀ(Zި"SsKpDGq2 F<_R-箆DI8SO/SGJ(D$p+F܌*V7ouZן'J<UxNqs̗@C PBߔ dDm)U[*lnV'T1ʪ{xly)3dL1|)I8MԕP3wknmtr9ʤXA53wkW\tqږ}mmb(ȼQ8gh(Kk)FArhE4ᔀN¸೷g +o$ ,H (LO /J /Lhx)ĩBP6МApdr*WkjEX'u9%ȉ\q ]5,cXVrWXdz;cr<ɱQi^%bM mK0rLNMS9/{CNwo +]zo%ho}< [)o}z'iE/7YChE^n9lspbldbIHhEJ7GEHP:Lhjr2Dn̎ B*2HDF I$EJ/ Eo` Ԇψz\M2c(JBad[+X29#_-)#cDdؐZ .yТ7b#6b#3$~q1ow/vލ8Ͻ9G;'8O0j>g;Ve +v4"m,,<8֝{gvhc-\33x;ik1s_5YL]Wͻ0bGMLuozxz5a̷IƓK ݥo%SRL_Yl{WW*^ut/W2Cԩ^V#)mO= N{D}0gBwN7.֍ݨ'/xӋ^A4<x\?Fxw^/ݗK4^_vThMUq_t͠Yۺݬ],mxI4xlny>ʹ<(e`=Aч }#~pHp"ɳŧ-hduqti\nx7>XPg-іc  ]SymZC8RG򯯽M79ˤRD ThƝVTJCg)Q''|`&IT|Pa9Qଔ Cr3&㌟=xHdAMCaȈ~ZP PDNflr4tNKţL8@&2MX)5gRDSPc&[Qa)6jQUe4QBYT |e2ET,)Ǽؽ$+QDse0)&w5UwJ~}E YL˪{_޺{kbED$!$IJd8D%**Qҹ[=c0s>[]UḶ*E$^0FrT'#*4O(:ITIh>} +"*Z=Jae:XއGYr!W35)PK +*|)|-K{'VwO>GD]_ëdI4yҬDJSH )N3oV4Q"#pN2*m0Qζ_ɏ%PFY+-;f) 3s6/EdsDڦPNjE@NHK +DsN괗Sh ӴE>>||$T7*i| +dKp? D!? ~9Z) yj 5a^91WvV3+V++(#H#;}=2._SwBGbi鷵G! p B}Et.[!s>)̇w#t.19gB.s\伅]4LL^?G4G "qr{Ex_lawxr81C"n;W-l:"qC6^쌵5V_a#j'Tkc2& !Yݷ]JձVF.֨$j +k` О +eiY8y7;|f.a@u{}Y⢾F<\2W[?!הo-ִ!8}qtd,O2λn,g^˝^^_;}?v` pob %eoX~L+_gY5́75wuy9K `yv[m mL/>'9ӳuMsgcO9~g觟m Ou#΍񩮍'؋͗`jd;15ն19X7&:V;>j{EZOwZwש[$RV$%tkCp>ܙ1!%ycn}âՑv8i<ӆ\B -&G$X6ko5k-zeAb_l|OTRoDJdr/v>,GXn-!TPJnC- Y !$U7-!h͹n5^r-pՕWgͥ}So;.>}m[`3vOqfr9raԌ3WJd(J6 +ñc4U1FI! +!!;{ileF9:B%aV 5 .4m9 A=9{ig7#A!ke\'%ڳiPGʴ:wksC%Ǯf9pF9ʪ*ϤǼ,VN+ɠaYSR2E½$/ +EG&r$pW''BXqG60#SGqDіEjZ pդ +ϋP儩+LZuA!噄j$s2MmKB<MlО5 +.N8kIհAp͟1d3EiT3a *t&/)(r+nW$aA&ɜ촉B9N e;a_Pdf`' ]ñi;v"-&xj4c).(_\t%gbW|rNs$D.q$ϱNGtub#N9ѝ;u8&⤐tءXAÑ;CG8vKaFO|`TúSC9Ӟw`H.-(h)߯ܦ?(S~lT"Ni~_oPwf'h=8|wotK K $T;h;|/ՏBsڢ,c} M>F~)"P~^ny`]_USxpȽ"?6 | I=d1RlL!$Y>I$/bA"HD$^SbJn/QZA"s"D"衐+J)0\& lTBʆgC2U5c}C$7PJ^3 ;?}~ka+lZ3zcٓ@mE`fv i;- 4߿ pgorv`Ǘ6׷m3PS*1(n5ݳE "ӽxMl(xj ?VHC&P#&yka_и}Y2a'Ƹ]ELvm}d5oΚ̉{q{5ĚjTpq0a0j':g4ƻnjƜ&М7Fua' |FgGsËf~/+>=+_c7c֨ x[=Jw}[{oO` ?MԎ<SG#/ج#6 F:ZߴbOiO f<ț31_iؼb5`JJ8ŦfJ?'?yxBP 8 =sjDžz?s:9;)Dl`qa0͏cxxhǿSz<8HlpnǷ!ظmrdr?}.; 7Z|pocezλl#]tAv8 rڮ"yG5.H 0prRnsH!cȝH m;$u9$W~Ba/ΐoS6L!J eś"oS-[!j_>ݨ/dԉDkp)@r9&˸ &Ieđ/jfl,?; ::~xC+c0'!K>ƖG۵8Zݧtdidc{4# û>ǘ{`kvp3c܀Fdyh3f7bnx-jG +O2/ɎD{f{;y;oǹ q' 3DZ=11 =s=3DtWvn+*f+Jh9y.nqDNEO^nN*)Q= +3S*]*S.R&rr(EDlKh2B%U.gUl&Vy4 (tPB_? !cBdz)j"ӯ׀j1jP"Su(QG=,PQ uɀPg9*ŨZDW!d@TIq<9įd*AUK3_C2dϳsBZRe}=^mU8!ȍB9q=9tMGMyH扉+"APVlh ]F<q) Pc&<[CLz7.v)ߪ@b  +ueb ݍJD4óuV^2 G +[ݫCN*:1[5<]+ɀ5Z+*G׵ +bdxsد. d=Łcl7KeXȝ[c"؟6ʦNa.q=^0 +UUýk8<2Tdpsep(T +%6lQ절ddEA&AdڄauYgtƢHmAZW k0FjuچQOcgB |V \(r絅DhM55zA!y1M &TpW8uLMEFDH9,-ď`1MY&ژq bᚒtAp4245: +S +a៟eK'A-H(:s ;#v#lӰy4vR^)SQvy%FD3Jw0-8St'#}a{<ׇSiglz*ED=QfwnF/1/ ၿ%;%O OtGy-Hl.?!n?c.{|u7lw&ebYɷob%I{[D&Zd.@ꥴ"٬ I71I °zƧAnkvѻB]n)=4ꥤ>9k|Sys ڹ[y÷? &ZsnZ==, < AKI2ʓN)YՔP=zh/~_k>@/>iCIKh2e{+µw1h6q~5--z Ýwߐih2wDoyGXx𺗰hlN^?7g^$~y; +kc: ﺆt:C_g'E=pac= +i1, e2zd桑vi}3if"5VYiݙ)3ϲS2)=gFiZ ,ҌlRYBfivI,N 'X$%,P$OԄnuL\:q+`-A3MIR%?Wkz߷>ts>D(  q)_1pE@!bI17s4 2.O@ʣa|5(0($)WI;O\1!PpC. S %??JoX%(hG}ZKtTZ@{9czj*ؿW +@[U1Lk۷{XFϖfJk.^&T(fB`rWg a!.pP>nn֠et]t]=gەY\VFjuٔKgVdZPo^͇ޓ(];e\̊ B{RsXJTw9j.|fgt>w \[&Ǥ +Ĥ}[nQw"vWtD05sq"&>UX?bR 粹]2]"&ܴT}ξʳkSTTTi[ %ALҀK.n$# `LmN>O/TGjt1Q%uQuE|Ud}.ܮ̓tq!,gKHi)$68c)茩5 +խ)` sLiFю3/5) ǴBEil"q$Xi+Ags4#Y'WfyM3aPBeCC%t8%ނ(!MŸr22阠RT`krl}S< %&0)i^ (7(>A͓$d~$7V +_Ǖۅ$Rۤ"$%r2I]&F3+2]|!D`gp0!.\8+x}\ C_ E8NN6q! ZGi8gds8 +a\>^ g00l5p,1|qg66E~85$pSPy}okv< T@!r<;YT# ! {f2L֫UO=әiLpLwz_wZ#|>N&}KL6S|ie2vY^iK+aX]{,c!4Õe{̣8co0]K#ApQM-hW¥@ҜFdzG7yyEm}qN8R_`7(tH#Ii>ОuH3j^j/6Z{ɂNuI!EP7S1E*}P?Ur 4t0'Fkߑ4~2q5`Vk&iSjI3Л,Ʒȇ79hZxB1>Xh3efY$+6ˋek=kA^NQiVdp2izÓݤ:6e3t 5+49ٹ2eА [,֏,&?|2? ˝Z2]bP-k"z.vt)-;v,lm| +h+M9=ɳN\B.9wс ݁d'3b_sԅċ ɋIxs )K=IMbP.sBhF{]_Hb!/= % G +B h2FP4o_!"s4FM@bqxI1A<B)y?L 'Q0. +!)G)  &PR-U@SJ@@Wt 4jZ)Yϻ%"V!r@u5ڮf]ܾ1@kp-pH5b%`UOTW1IŇq4s(GC!pL0P@0a0xsw3f.d`,T_ePjNdd6l +45 pL1cu} X&Mp#VMxR%$5wg6W_` +X."5IGz_e6pwAŎS@9Xڵ-֩%ƨ΅j86Sتe '[ek9\u=,K +JӁ (k (k#P]@3RpFe z\MN@.-J<[S[)M8{G}>N1<S1)FE\/ Vcn+ob +17ҡ~.xkv"tshE3|ɺ#r8#ٙ(еS,QDLO[eNy$&^?dO%sM>-%'cm1 H$#vDCB\$M°с}euNsN?;þhGDHC"$,b"$BBDP;p^`nƆOflflF@(@;4&; nMzXc8NG4F3ez7ǩ>2]Y kNV&b߉x,Ou=eʲ=mK1rF7]K#Avo|2*VC2 s:&ބyPJ4*|@biQQ[X/0K:֤4jCOhO:L5}ZtHdA:Nٯ&4owNHOUwvڪYGQ!" >[9GSBt}N$VT}}ۄ@:TN]l { 1>-yxB#4`&Q<(BH0D 1N\ CIu31-׉x <. 8 9o4/ uT*x[%BZ VmB^&sh߇i+Ĝj-rLl2.*1<60ДjTbV,y.fll5828z\^]g,rZm~KuԤJURQ}e2FH' '"(CTgi.ߔhĬV`U=6TaYjgny"[|Flq)IWf(ug +$YS%[OrQsy0+qfE[<-c0XVQY +̻+-WFJ+Eݬ̏VEJ#C2)J!e(YdhEV<;""qiYR,,FqS!%3StocQq85ZQ +#)<0V*-<$?rCzz~ +,XΈ@pk%_˥b V&ZFk,9 V=rf6خd[SqȯYR˙ 4"hںÙAR1l=@Bl]Jvb=9sBl瓢m]xK⣃q(He埱QW9\1Yv˯fn__aܼ]8'u!(6؈? P_C/=: |!>8@33Gx#{k}0 +"cb9C|B# M !aY† A`qem +a߯گB/j>pL<{[Qig}e, wv>Obsk [1M2HcgV9O?cc1bؕ3[}[kG]1ՑY9dgm^++~vN9;|$Z H?axKWbt%}z|EZ|UN:zLH$oѵuuR~?5q;G'p":3L/[[35̎rB!tTPKDG#;nOէ~ISMlS~۔׎Lvg =vd4 lhxjzL0`}14 hc,PjmS =ڢB)j[TNJjm̞:ѦNnGYׂFxVYה:aUيա!})-4JL.xL .(\I[Fxr]d )8#+ysKPjJJYJJ^%m/ E2MOS+,),cqIkCiф }1ʅᔌzOH@2K?'W$"B) xBxr\J@21"%~"o * +JA<WAi\B@59h @K0P'OjqW#0宅=Io ƋomW-=~aUC%arc٘}|p`,0R@tlCS!`N h -AI3p39蹆\  zt֐OèQD1ABHjsZ 笅Nᦚt ^޹$w+eܯWpj Nh(Z\ X>;.wvߟ4b,(c 0XL@ s/v=|ޫH +85x_r]3 ZJeVVl \n`<0`N2ƢI@)$cʳ 74gcʓckc/%6V&4Q'F7%4)e3%G~$!NU[s+1WTM1O@`NWUJpJ*T88(NU"Qr#+QLqSyhE۔<$3E^J(ω,sEh#-!4#'at$M>Njc(Ra9JcdLFy#p 1E$Bѿ_BF茛-)לdW"³ϹA:p4+9"<39h9I,GғNpEq$ ȑ?WJTOc=<3oOŝ|ԑ"e?^{A_GP{h7ow85ڟ>$]/wb^~{ ^~} ޻^!|X<ݒyxRdr^N ~r'3Á/#/`|pO[b-Tn% /@K CW`a c \(|抄'f D|`~',|e?(Eva?=i7siOn |ui&qe~Dfb[l[cK0OZS{<ܱ<JXoYk}r <_&> "VqǝϳEZ~&m&7 K:_ܤZ9n#>\(T)Z}Zk*\UN-^7tfRCZ)imP;̤C:)]&]7SLXG*I'%RF(O֎"Ơ:qa2雤[/Zd5-j /w WG K2dzLZiY](m c}ac{)o~؂ϑ懬ȓ9e 3!ܠq0AlS~۔׎Lvg =vd4 lhxj뙮w303t+ Y'Y4Ԭu'|ZF]/{)S&;)vJRd׷\։6uX +̺c*ͺ `4uD: 723μܟvߺ訜B#RcAA ( $8C[U݉Mŝ}{WUoUW'N6SF0># ^+(MÂddX+#]u3Qӝ~A9?bNɞd[RN:,)N ʘ.9 #pΉ)is'2\iKIšiΨ@G"rJFbj󕸑R>bQH 0Ip q#I +6(nܨwVE`կU/ܵ].K`"~.R ,p-rrVQ@i󢽐QH1h'AYΛМ @c6)[5RΛXк<1kmS?V˯f(}"F NV~˧IO.xƅ0 3ץ.VPZ:*J£=r"Z˙xN渥9CK1530HCقs&.ּxSL q#xUó54вDHh2D%uU֚jTJB[]愶*C1mk5Vi[)+rX6a +sb*9!In1b48Ƣϖ0%3X +uInQggLquILHL]Abtm>jPYh(yD1'E颪nID$iݢh1*3+s=U6 ʳs-3j9*5x)Һ.œ`=X~*sx)@b!-ݏ;\AИyL?!чz!QLMB"<##dzuА1c0" hGģO;W}I>~([󷴘8"}&4{wH.q7ɠ=_a;@P* rHWہWP%"==y +vS|wm糠54;|xhBPo6Oz/#HB-|FJ~jLbQ(Yr/%S˽d$JH咏"LRHH/RL!8G$^C"&12y6mFM >u0s~^G:PH L)\ +Lnp̢TB-rIȕR L*o"ȤlR9 )H9$L(H/!cG'oflf|ʠ+!O`)A\<!w|qM΄k3aow3_h~ǫӟ7^C:_+Hjp8>:Kۧukr熬<:`}Ɏ?kbB q=ަXj(j=0xa| |)~ܺ{ +l=pG*dL 6iUK(#WgK:JG,]*vXJ]elWkuڍJ IꍵE]=oCzjm7X_H m~:4Y-~uiz=6=hX>A[_cGm 12y)rMѦ;_Xa/f]/K/Fkϱ9 413h3cҭQno?zg3-?{Ӕg4e61MQ@顕S8m޿xc{*i[b\S|λɞw/&{W ^^v ,>rD\Vr1yq])wS4!\X/Wʣ; [ntu*^.Yql,EK(up֙g +9 d2:PnE.&xMlF/ ƅ"+adX+G'-4z9 +}Ӣ/XR4S3Ss)ٳfN|>9[g<'ldQTA[gtܞ|Ӟ6Ҟ2ڞ08%q- r ϓdi +/9m՚:fMmIIԧ8?mھ]槅wZMr Z0jUZp1!*U9Ls>a8poLKpoFLsgj6g!5AEfEFi +\4R ۀPuBj2Zj>ɠ*T5DS wB5U>5VRDC򂇕ȧ'|zpTвUPrD9ι]&V)I-UBt"F_<;%b$!P<]/u&P8إ"R +)~Nɺ< :g:L&B6ˢѹla\5 Ǧ( S(8 O :*T1Nj: ig9Wl]3.vR^r\J]tHI;)f9k.G{dfs* pfkag +\;]DSps(VϩΓWe*NdIUdKgIUdS)oEhTvRTPs8*ӳ):#&l^b=ğ+K41 +k\]YRy(&bV,\)Αp5kD;}(Q,Ë{DVL;9".)8Qk"P*]](QUkDVe͊%VYbs܄g\"Dl",*uiK"6-gEKl(G%ƙE^$8Fk,Q,^~o{y2]qO 9^걸.S;;Nj) cN 9_}>+՗H( b@`G&Kq4E,BlgF#Vl|=+~L}Lٵ==~ǬQf߃u[V҆mimk(:ut7mPֵ(liVB6FA[V`_i9N|*LoC(~.u!ȼY5AdW/ôjRyE)<@OBg C`"}'r]nzY Kך$᜘ k}6IcK,U5F`hYE P;Nz^ ^pE}|Cܠ@Y`Ek|9dw7`Jx-g=\᳎M\{*= {4h;T79X֗`Eσ|3hh|Ԉd3g4cO +G +.,D+SvmPw3rDaPێ_ MWpwd ûvy.a4MÝXsщZ=jj\ 驏g U _} u 7o;7ćoao!0|6 +x;ϰI!1cKJS$oN=:ٙNZQ!]6gUFL:Q:鞛A@LF$yټ/MLtQPQCE&+hL!* ~{}[ߪfMAB F`7[s<j5P +]‹0KvHTǦjd;;h[+R.6 Y*}s쐿m|}#*}u-֧S}7hئ _eI&a%lJ}[C[#zMΨqQR7cER5qQkl<)n㧇6}+&yϦX.>*jؘm5[G|D| 6DEm oՋR }YVJEؗG*/[!oGd[K#$c>~O"]x7pƇ߷L.ǻͻ|`mzpo*su`e0V??L{CMx{_ۯmR%˘zwۯb*&n7~󭠞ޚ75={aƀn.Ӿ?XexU=O+{Œt-{ {E㞅PJژgwj2s>>={!i=?$?gz.ssIFzIcHOj.fZ +)wIwjt>\\O[6{T/~ }d~B=`_G?=A=> ڡcٕ.jn5!טJ u@6xuj]in1}[֩-ԝ{Mw2=ms?oo;χnv<ʞږ=isbr&dosK4ۖ;#k쉞&ԨA@eOެW:>SGe͸Ba>+ڣ=i72F:G&]4 sHѐ'I)a'q z:<);4rp~ CcnF* +v~OvN?ܱ ۴}Cb4-&lj4#K -jLΟ"" *0 Jjs>O~ +YI^,~V0{qr+SW292l2y:*am^JS*~=e \JgJ"ּBT5)W$F5%ߍ\>f)p~w>^ܹXW<PX/J) k4:XZ#gBR@aEa%wS%R;/L.W* OO^ߟg妺9/$;9K^Ht*]8||`=9sqT@v?+Q{2{D +Оt*( -wh(@) F(ޡJtw[w}2v&~-H մiwpJar;~;r{S =cQU[#l:Fmm,xT%SxYgc/Xi X:H۬UXE﮽_k}G-!4,m9x]ϳ1ޣnA}qnAQx%hF']TegD{ףI^W5vZQ;ӛ}]}SwWěOzlOmzK*e ǛcіG2u726{.y< I/Q]m;s2z;gIm36,6|!&byX1*g5HNaC | N8ˉiWqlGN58Gܝx*&lhڣ?}5qccͧN>8X >xYY_~ޘ7=0zfU4=?6/PV3Yo0&0,D:,5XaXMpx* .gn[CUwpn_P]jrQLg&þg.zdq +Pkx5P(AQw𜶪lu]~ Q ;<ӁR_dVnv*S]Tu-$W\*+8GrKYX@h~Z D4.V?8 D(TF;) +%HqHJnܯOAO Ba\{ɋ{wS($$P"2;G gvt +,K/S `cab:j"}!!3::UU[eV3A 77HV0"ֲ._LRWK9_.ZXE!" t4c"Y!+Y!$ +E|ΡdG%! >AshCdi :Yj_'XI^JSKiՠը|4jZQ)RQY*OEI 3"d>@cKj@uJbkH1DId *? + '8X!frA*5 NQ!VQjK+EQ1TFDGC'R9~(DA7|!b!3v@)ڨg ߞ!ׇ\ݳa`m@-fCW4YJmj*1iM O#Z/hiT@&țY!ݓ,ny׽ZC#2adGiQRPgcs,~-v_q6u]Uۻ +mƩvR97d͹S:وʆerֽ-sz~q ۨ7>5щμatszξfyO'j44ܱMJ-ΝmǫPt-<7 +m=md{L?%#WBT@<2Ŏ>H] F=i۾&_jUk^fnZ` Z4:0µ8NF +"pDekMQ!u_ ` PeQ*j;JwZ+Rm5aeVZFk +]hu95n4qǥ2F'S s4U< p\ڍ2@$P_ +~6w|p@ +v!>AK6`\K'C|.~_E9 +A1"p8wd8ky8ciįC @M:fdWd9p2@̢0MkQX'2g*^Uk[X5j>*d/V2~t(%B +~>fu:} ⏙XTރųgПB9ÅσaUHÚ*{Q>KxNfr<|e;+4G#k>DgtΑΗrv.Oi4өbHyM5NOr:.)ȟ4)Bf9IN+e*-B.9i+ +8V2@\5mk@I~*_H#,#u=;lْbOdIxϔb般brv`_U(r Ql[~I/ĕJZnLi%77P67W\FqŦ$Հm c[`Q{[iM!|WvGiøv'i{Jlضx)qȶd>I<)1 +gknKa7̡?$ PC@ᅥ`A@7Wq-!_ yJk_62LW7>Pq]:C1ϰWDU@/[ţ 2#b@[AD㫗I0 *o4NDiҲF1A#ԫ? +S(JH VTJER||?Rr@2Be 80|2p-0} = Wep󰖀ncr #  +LTbj +ө^CS -2ꔘNG"Z-h4rDpFcKy5)p"PP +)$)G$A +\t] T 0/|9c93~=okG09+ZCk ׾ FeۈY둷,4 K?КYxC+?ςT,~ys+<0iҔj߽f=33Q(VGfz}>XS^I#]:d3PJW&'MxjEY3ײgn,=ojlmL -˔6tǮpv^}ήx`dzx tM DW+qV1a}=zm{ uU35 ^/~hKsڕ!f7|u:Ʈ# 1[cØ혆ffvF;h\?Ҏ4>Zhy2Okf- 3:Xi6Fd~ckEzl-CMKKφ. A6[P#cȳcmloG.=YZ-~`Zi-ZduZ8?QCFByEY\ 4B_C"˨½^n.އ׸{r6}#+qIfT{F,32\HR$N'KHzD' B'&۸ K8p\Gq0 ҎM%:i32y+#C 3O^Q_6h= k )Z$eA#:(r()ѐ =0ȝzD`PpBpYd;U3t@H51 #7 F *}2;1@MηzנtWԠB +e2ZxT jڠfX7&e$D! Xhdv>_cx\ebuNRg\?%0'tE]bW*n(p\-]w[.CX\Nb NI(۵_0.fy(G.d`"ԤaΥTUTd*(O,QzXU)rV]9 &1$%0&29zc_u&d|\8I9JR +\RRQr\)Q!t@;8\Ϩ'[jsy*3U,i:u6Ü#i:^I{%a<ኼTuQ,B!-u)@@E(Z;uYŰTè;B_-Q#"ZS#eYL$lF4Ry纬h}g2 8>BcVة#%|va|Gsxoa*+{ +RdItp=#!4/QJ;sڕsB;;Oّ}l?׮,?G8cz0i0Iڞ+-9gkJ>&Gؚ{³JwƆoO8DŽ]ɇþݺmkK0nܼ pc*hMA 'Ai}Kuym0!~1ɰW~0Vy#zJ/I 3ЯDF4IQDTZ$Q&2hDz$JB_)+{ϹOXcbOM4F]3 +) +2x%1n4^ rܷVjׯ{4kR|>nhZ煗ጼ&ya|, q"R&L шP{ X@>HHyseD<^GCf3 -Z$ᔊOu>!Sȓ1h'}8!8qpSh]91XK~s|Ѿq_&R5VurId`udRgڣEwۼaj9H3Łż +9r<AFVdaDVz8s:kCe=Eg ؐ ؀0t`@l @F۴\I b(s@:(Pc +5vj耠΀Z%)P[b= OAW%&3K^/rs׳߃\2W>ws1+s'2=ϢbttŁK{*҆TuRdy +$.$ i~3<;lxm9πosmge,\$Gaq$Wt&J2^GK`=݋kͽǑe=T"B +VVsמٽrS"&5騚0mx<˄#^TgBn- +>ûF">jgָH¶fq&*^yMSŨ3wY,M0 EhD}P(|BG,w &*Ȗ( 0PРC=X:Cf3f12fdш +"MGt`Yc9 Ǻpj𻉠Y A +ZM#C%RcN߷e_ȢR[m;39ǎ8VE-DDd%DeQ[uFpA0$,A KH Aw_ sNsἜws%}t~tMM1key9`C9FB؟_yA#]$|+pĒM+㫯N3?onp-/!C:^ rYACIC82e蜊F=3F LgN\2s:x6ԤBMN:tFHtdpjqj-18ۡHGtqrOwzP3eNBN& =P_8gϿ@/xJ+p 8ot|m֩9lK6ma^;7cxqҏ,f3xn}F..u! '1O)݉p.{㷂!@)JBH*p +b !) 3D" +HPJT$CM0\V*<QIмLHBp$rP $Fur %)j8"XJxԞbhV=ReA.0G;ů,_itcOq?$z:r䨷nGk\Ok7X9/ N\9͑z"Z\}(YCj 5\yw]6ϡm|lur*p2_p:7ham\osÞN^f$-΢}˾ә޾.ޢѯ´#*Hesq|` =)}.m!O{v+'AǸ$9“Vu\Q"LV"y*F9$c80ȼִd] +uZE'a:BZB*Z Z#2H#-R#E9#ɼ4@[5jdϙ6-B+Poͨ=-PMB7j(2Fk)ZKU R"ȩU&ؓAQWP?̇}=tx'2~'3AF^ṅ~a|ivk6'ޭ {8Y>W6w#q6lvrpU'e3JgeΩnV)Gs?%Ul|Rbg<{wvuTe.^Q嬏`[+sumBrpem- ˇLNavE@aNK.nႀ4R/AB. -Z?vq5,΄er() @$D@,o~a29P$RLRp-D禔P",Hcޟ#K!.!x~sUJxƊ "󳗛]g\EbǍ|! +A-p-KbԜCx4e_Yu0gu"Z:WW[eԌjTCksfњUbPZ(V,7JdX{S7$X[أi."&#-eKiM%6414^Ex\/VW!ОuP R r ֑yܭIŇj|:JUsS* 9^t*L[%+R5rLMe)Xs;9T̓X +ƓayB,'o(JW0Rغd$N@l*9ؾ}L495tOދYv>D.Yڃ.)7Œ^]WkC>ܪ>ܧq%J{¥V}b|du7ST݅O=(M߫X=`<AOSFzE u1W'g5 +{metu~@k Z? 3F_Gccx+Mj|lS71#4 ܢC~}7Af%b-Y–E僥QE5>YXFנuƛNb벌"v6w/ cC0dGt󴾅A?Ofz;13m8'}a4ifsBf4YSͽy[պ-s:ƽhr[33 +@gC~ͨS'c}5q-lm6h{~/G W}_6OaxVBR2έ8 OyGpηÅk#QʰUC|ÕIY[a_)k wn^("'oe<_X E +ҕRD &cW,4X:DޓyAs.[.$$y7s}3{Ϻ%'jY g^A DN4 L.91@DNZpN4V;dJ{M_5[<4&Vndx4Ky+Ք) 5e`89}XD9 oBϨDu+k !@7M/_ *Z! UV"R#K9h*&c-חRXJQ_RKD-KV )9j=,X-<ݿ\C;w$Hѭlp@^"~q9MgLKO"|yxy~Ċr9*A6>,njɅWÂ+. +aə,ʳL.g *#VXi攗+!DQr(PĿ|H@qE()Lb" +S +]j+ CS@Q$B=g嗓huv0¹SdŝqȌ=i뫌pcNr\*OIvpYl{F D_& :t(錭c?m+ї"lI9gc~E) w\?OG̩_$|zHJB?ݥڿޟl#6|Kx*-vwGAt׭ٞY7[Y;]ɽv}ɃqsP(w]X$o'juDcmOIcIP2f~5K1.bm"sśvrt]}Mtc=X﷢^_2cFCīab{5"xs%1cwE[iLp`p`2>j&ۚz6'=j4 %-V Qfl\xJtJzzk/kjbne_H_ȋK׽KKYU͵ݍӜܹƼ6aϞm[%Z593"a.vD5l9Y]39\~UJ;u90zxJt,=~,x5RU#pL!b^:FKh5D};LO+%MذJVRr\7U48k*֣ +d $c58_s rzR .}.wxB$ \sU+^.TPnHv@ԝKw8c!Vxt3CYRZ\MEWR"@U7E%Aْ5D g5UI*YYgı/*] U$EUpsd|_K>b:u(KF-]IUfL DUf2NU3JTfyv%_VE,rF< U*)M@ ܡ(ٻ$i8' *_ggGz5/2J^dhu._̝q:i͎dr[k&_< +.Ks;aI-x TE9eD:(M  )J .L;# +RN_t&/|8#θs<78-XN"riS̎w"?"B=9uaՎd'g8MHy[w#B:%H> 䫤 D AXCop~ a?y$A :vl`Nu݌]N'; 60\J>"W~Ӟ@ʸ{c `Ov~2ngoi&I>Fi&:[ZAO/Ikq1'jօGx*(u*^5JJT*B!JːL_/9#M!f@~Ayr!c wYA! J tj2נAf&Ci(_5c63L1e8)^& 1ȜZFPL#QZcJ|R +PT)RQ&wdIeƈZc6F7r7#t?8_/O5v5O+{TG>UXç-Z%/]Y.0?>yY&q`}|g{xȧ^MW=kZn_Դ,0c7Q[f:jkfO2k2?)K\뫹`S#cx'1_7A,8T+gc/QVX"6zpj[":GX]}RH+~40Ҳ40ܼL 5.nZFFGg+o^Ln\[fl^|6w\0߆ =m 텋]mxܺy-J%AfT"BN r=#7 +z-jWހdfpdF0qsPhmއ^T` ZD2xn^=n꡽Z-64YdXTR@k@s +CS%@ ihʠRV kٗCI]t <)##/ I9^.TPnHv@Nw. u; Qጅ[Y :?Aav-&"+)AP{ϐʋ@dlIɚ"H3šĪH$'=APj2(] E1_+}e!Z-tzfZ_f3E`*Id_vg:Z) ;3sDLs=s}ܓKb4ɤ0gh9^^E**,{&Vp_kZl,7#4h+cR p 1>4&؋"5aW!s Zõ%u8,$OI'VEHrWP%TE˂:RʳxžL %lf$j‹mx9eE,3FHR9BQ{S︘yߋkU8V!kHF-N +HYx$SpFƚq, |]O(HMDܡ|K E~4u`.?w + h;a6G'E>vsF~K3t;ihtM2(õ~a@RտB(ʠL-'ӗT.2K"1H4$0&SPJB3) Eo -" +H(`>q$W.QJҨՔVt +׫FRb"4eTёJ:"LA r& ƈC5z=tVi A)_xa*M\RC +Lre<߆IdR74$X{>z[xpR + +P +>t?O~y*FO{sM}Κ!4[ uGb4o +> Tߘ^O_Y{ޫǻUb}"煲:Q;F!2FQRKQիGoK."~U #ac^xv`/ܲGRL~l^<8.]ZB.r.U-z.CW8WC5uǼp. !79juXw Smx9x˹Ӈ4܇p_x`ssl3r6 +AgYgLLcOfsz>=8׏4桅+ū3%r9ӏXCok=W)֝5_pwd B{&`Üщ dIdD63޳9wsqܓ ֳ6uVyzjGAꣻՁ0c_oOێeu%j2,rUpjmf:R1z|}GGֆyװG׆/WlyZpqPl5_"B(Q & ?<!qwB\HHBba(0!0G_X2.?m*XK.^z'PG=ئQ$a*0THdJ5%@'\ +FB2T$< * )jX2K%%0` +S^9t{ʆ.3,iui8;P8S\vut|Ǻ_>Ӄ=`=4}4?BY+{&֓fiGZKnb {6`ur-c]#n<|H;?ܺ<0Ҷ<0ܲ i^~27[W'V'W'4N 3 X-]zl^9i3-_W,v=\nN#q"/ D՛XeNTĉ/';QwV e3_Exu^Qϊcbaa xp/s"ί ʳq\n+^Lx%ᄙpg j$9uThiv;ZX)8iGEюEGXPA*-$ƉG"r IZa ?t&1.< ̊ ʌ= Έ8bL8~*?mAvVwm>?ͤW hm _.?na>` Nv~;C%Juđ{f43Gec`C٢%岹m/l-'d!!>o ؖo|ni466l~U׭‚FYbȼ>@*gZgUd\k!L!r5!,2)ٌ&@"]IFk5"N:@hzEI8֍WxUsu8-5M0W4 FgO(PqPnPGԪU~QhDQ@[mFyZ:Z#e ŢCժ#DP J0QLV!,7Bˡ~9l&122F#-(CNG$eh0Ya9Nc8X!Vzx R3(`5Vc5V8\60  &=41jAf n{>Fz! &3 Acx+CghBϱ%p@@`VVX@0<Hh5V`bmP:)3(J~ nV @%+hтJZhAc PP-2h=>j+=*_$(S,]$nEE n8 q,A}8 DE'RwNٵPO@BI1g3Kdۮ%!gg|}r| ˙ۥ v1E\HΧQn5P: T%d(SDU^D2IT )Dix䒢SЇP$qr+8 1bDgĈ\uǗ޳$7J7b۔4 X9Z XE&$\moeRƔuZNQ܏>Z[.89E)/\v9t~C]b]tĩ9x@25\592R.@"*A%1X8UJb*b=ȴc]ʳceQr%23%"2bsv[&kKh5{SyQ۝re#^K\m\sgcO&VMN!5{;雬S`2O}qŸHlgqQZ\ +Tcq:*-&jGjLW)N޳3 GqpÿlBe5 NYAa uk?뿈[?l#X?Y"'!̛MK`BXi0{0ma^*2e\ke5a6+|lF7M@_NY JxpF 3X='8-+BG K4:w`:hʍ!`Qy_e + U\'rD{%FQM,*A[1@[4/uE<u6f9VGAE9KnPK]woGEKED=Pcܝ?h_fU7UEuF |$2[4^eb"T"\vr9XHMKK9H#gR6cV-e6 #0sfcF, lMszNAC0:^'oMʜhx4yg;g'sqwvpsb [5Y9X^dyD8Y4 Z=2j9DadJޫ88Lrp,eaԓ~&-K1"cc~8*pD_+rΓStI}HSvNɓS;R1UGyD"dN"SEG핹RV$;DGv31QL&Zh` #I G'%9(!Z2a(bhFCA8HY`=c=# + p>pXIMKޝpHֻ [~{ovƻ]7CɢSĨN}Ps[jX7}RRpY5Y|Mbo̳M^0&۬_ ?'aZ`3a{BdoDOiTOn͡f+o02ĸ&cubd=ƌwjOlZ8-?݉^4Յ\]-\n&[%c]xRk(jÚNu"ͧ9-壝}ރ3Hը{\ӎԼ:k9ם]PWXK z#痞~h3F~}=^@//`e:#%>i9)cF<'56ٛv8jƑRc𾯷~W{W][1W[0L_%l;7`bPfݾ~P`TY`ٺa@eKD'vp;lR&ahCB,% U 8̪tV6(aH :Y/I7* zƇ9>F-=1Kh) ƐğEjT4n* +< +/Z1F$#j /2AõFh (҈Bx*f3EZZn7BdH0`AHYiҊj +O@Mibޙɤ0IB` D4>z=)qMGIh44a -u2,0ZQ b((Pc=c=>c E 3FϽִiZ7-ao%vhǪx?uDu'9 98;S3SGU A +9c 9GV9 Nם;uo'^Kzl纬PnOjix{ x7ķ[t,:`,P {h7`E#7?]6& d/r!Bzt7dCgOdʮB\=zdWKY{MYr`ފzBMN!KyxR2ck2-&Fslo Z>X)*hsӶi['xY;eԽ遬i+S^~-^A7hC7_ۆO1u84qk^CoL oMvSO 4|4 =mBZ_r->tSGic/)Gi]n%J +F^t }gKFڗ^ -S-CíHp 2<ܼ22Ҳ2hB&苕;:*z:, bw?O۾^\gZhx-.L-EB_3ًw=&F\xJ)XoX˅eZb_<8Sk3:_^vu6K.%{vv#rf'qΏl/qFH%$ke&lN{vv +#]HS~yI@ɧf_p%p2\ncێe-ZW']m׷1Wp@h\Hŀ )%b BBS$PIѨ>hTӧLb4>OD-_z*<4^:JAsKh:Z/mP{-laJ t\"@<~ +4zs  X) " MU$Ӫq\͕*ap=Ӌ8CLr(/5?0.lՃR} TB{X#,g`n1,j b1ZۅV`oh/`@n@Zj.|ԟk]"slaF?bȥ3@M@3`HiS sa X@H)4 XThũ|fSbJ^') )LR`Ҋ5NdJ^]U\$f= +gXF Y='X:'ʌpQJޡXPDHI0uڱkeȑz ÌR$!zJR֑:K +d87+r!rJH{$-Bhj/Jd$$SjS9X'@Un|J(IuD@YΚ<`9$l'⋲y9LcUG>}2 qy)Ri =yi sS#sF!giȿ{Υ%Lˊߛs:nԡf$##7<Kϱ@6Bu 3BFr+K?E#g;#x;4z{P>[BG~EjXZPZ2,a)B>`A" i|H5J +59"a.'' D!(RHD8B0|&p |y!xHBv$93c34 brR)0J)1Ft2LWaaAxx +TVDBCɚ:'DKx!qU}}`ר\$`AA"Ǽ)%>$>~7! 9O.;p[Xx] T @[*x]+eXGtTU,q%U%Z*%X3̚+ "-.>\51GWS9׻2)quSC1Jbk(ث`|gqs=ێmi.p=Q6ak2vd[ t­4QSMNUI&p )n%Jx؅8B9:8_3Gd@UkѴZnS^SIIKRXy+Mbe"_ >qyP + 8}<ǡu됏Kޘ.y3PޘG_!rI}$ޞdJ'-lWRRd4CS!$2XJaH"  BF }H "$$| +Mχ+VU?@ABp+&6MxyE? | ;tbA,(@Oa~$-_χ܆z|;P +)"JBOO"t1Τ"#)g#I(EH1%(J"19$DImC(!,]mE~~q/$(tF!}FDuW`W)u~1}5G2}[RcLҶ6! 5qMNf٭a>$]?'ֱY=Z=ky$s5o6(ًՑOje.P Wزw9-(?i}ϵY4sV?C/s4/UK!Yjd)\!oMP3آCZm% +j/[:ʖ4Hg9bQ 0z}H` ,hyѴ 4`a>Ơqh1mɜV< #lF;ͪl^LcfilZ,7hdV#!j-S<ȶ9oEL D` 9l"j#MiMnl1f7vm:lȄ^e4 a3Tж/,{t'B8ЙwvjgcvPpBCqtE1\&P9Bp?_Cw 2n ߪO}~&&̫3c-#[@ O̅ & S*_֑( +ү#~q =cg;ci]qӭ Ċ'mˮFSrTȀ +vptXPPK*Q^9oǡ&EZM+0 ) +Bk(`gD X@ kBpF +6A%hDs!Ly%lPvnZ@WO`ꤌz +A}4Ckè\`QK3dV \/27YG_>@/u*!R__# .LiN,^-xߚۼ~4K'kyuSGƃzWN-j[ eD *0 EM"iBԂ*/5AJ/@F&(tGe B:Kx2 P%%)1%"$"E@77nHN$"Hlz/^kE"1$"HbHY~P,"ИVZjPZ9 )aD"hDDЅJEhCH"X+&t +iI_!6@ ؋ VD$4J{S*E< +=C&>y2푤"E{dP 11ERH.:>BB #lVlV4 @RWro>Wޭ|7:nr> ur/ԧ:Ň2Z߽f4,/BdŧWol/,D|P Hof$T úa $1?b 711@(foג/Kn J 0. Dn6[ w]h]TY.*CU!3Z3 2:v"Yk7aڃ5Ӛ^ ֋Wذȕ(yُ/c^XǑ ɟgS؋ily9L?,22M;7Ň4'Mb>'c9սDL2z],˴ bZMtb.O&:ОW#m+flb*ʫ3c-d be8e2vtR0, ih)n_dqžĥS1wCI>vfد種+MJB`a1d&d&3CLPbzC+DcBu P +?{o!3|s9o[YMzT`Yp= G}@,j5+(1 @}%h9h +豨AE\B* JM & +̐}nZ@S4@s=@{-@GbDjp۪: YM hFU$tXXs )`*9ϢZ09V2j!֪ M5G`*DCHU؍rp]/%DJ H +ZK?O;ϩMmᴳN.J]ȑ:-媇ep.3A63k4£Tp@@u +89,Het&CxTeqVJEV q`Nb0@NRW\$bC3̸㜃Ci8_%H8v8#ȷ9Gd2&'}n ?͠Lz}8cr{N'pbHωn3nH>2eN)]Mi Z?}Nf> &He9Qzk(4 jdz5VL{r2\B\)92˓1,z#0 4MEI0g,I$Bmn@;jK`P<ݡ4wgBANԤYK~_>4f4QLd6#J,m`\NNXNǐ-C5[h( $TJTLA%Mo&Y9d+d#c4F 뀱&(zA:ŀ؎؎_q !#Ǚzf~ݚ7Ӂثϰ7jL^gx5ow>6:{3w>X&vG-?0m,n҈{8aao^[8A- ~.ٻ4J x;ja\gFg{(YCI\Gk/ ?.*V8?p!h(*hDͥsAk`^1uTs:*go#wggrg!=}}HoE 2t96, E /}l`ӁqdB0㓁)i4 yv1^΋kdo]@/8KMӽe[nڦ[霺ݞ¹3r&xdmlX0:޹`kxXڣqdbcmr k]GyXX3wV-t[KGpJDCߣANAhe.Zm/\fSJIJ@R/j% BP+FUAaP$?ŐLA$#gA2Yr" ^=.+X㗕&s-sE1b"6Tdʨ𳂰9V_kw& -b%TX=އ* +uR[ |=ߏ ++ +Tܘ=HevLHE.}T(l"Jɬ(5GlYeJ3$Je(҉Hg8hM|S_&Y1$U?a_%M 9ANlR'~pVU@FbO Έ?z =Wi1B$GDrރ}ןvaf['l=6e{$^ߤsFke;dL;6xn3o1m"_>2 i"^2zJ fʸAoR!cRPeT4hxr3yUinΉ֠/uJVe0@iϠu8"fݺ1~[3kM\8aÂBgYFٌ_/3cd &fS +5+ $p̳HZf2_8Ъe|4NxS̹0%&0f#ьFV``3ww䀕=7NFcc:| ZDEމ n`q(q +ƀXXpp!ґÙn͎5|m0˄=/O|D?L,w1|_ո#FbgYzU 5_ܓM_Ļ rCkn_)}QJx/Y=CMySSQoM۞@JXLxX;/>]]~ĮYgc7D7KfDJۢ;eDmk-ʧz{ozcUo:7}.ѣ}DNWhxE _Rcy!.DMP/z&gSϱ+ϨWWw=`S Y]d1w{;]T#G & DǸK-X$zXŁԠhxǣmKēKXh 56r=4L|8Y5yz67t~X6ps u\{uj+^ Z%íօ!G-vE-ֹf'wEEEMv MpSٞG8:!2x(mQVʌLHw"5yVUJG)$;HKy$ ;SDtJVaqdyue%uG$-S-Yz-Ϛ#-K KKLGḌ脮!@8ܴ:0:0q:bx0ixMǃNDƤgu_">+0q0k`f `bAy~4BXSOx?`w3-2w[rj3ܨM۠3|N#@Y@[5@Ukb1ZN#VhtJPVVb৓ievHэ 1.!)]+jǹb\\*ZvB{'h̑kȖSٝR>C!QtPT!D254L*|$DULU\%U\ GHQy":`([}ߣSTw1]J76WXpQe19*Ҹ'28Jpc#<28hqłx(a/l%R:P  S}HظR]v2\^0{Sd5+4FѾ.ƳeѶ XYx~:aMĞȱ Z E򳰿k?#a//?GaG:)ý,9)/3>ytP>=Ch Dt{h"?:\ +zQh(բz?A2 U5&(E +UcNQ@!2F"Jh &=QuMXbs.]`]>`kF" +9|0x+ $ip<ПCxXJ?W<"UIB$4=<<@B dH HpC&*( z TBiR\:5j yR0RrTS<2>KIHNʥ +LLtH cIqm.v]"Po@Nww3 ~?LT2Ey/NNq6_cVǢwG_E3~"+W^Eu1/gPKVFĭ/k8̓Rp\Hhq(75\A%x yg@ ižp5t +נݭkЭŁЏ[e Οی; {sê#6f騙t^= +u1:) PE{g/o9@-!p[d^@{us7qh1ym9集^_Af7w7gz)oFf9h6mt Zd,ݟ,?T6ks +$T*kuZM!䳵cdsmtx:Xqhbc}r {#'cs]Kg+ÔMOwjOrW#w(wEIcBJݕl{ʐB) +r%_"VJ: rԞFKP jhI5Q9TRE9@+ +ȁ^gp[ p$@L +{k8 HM6jAU<;ڮ@t8tԓ4Xk@8hq:y\+]#ጠMj W>^;`S tU~[YqnR \saZ)m%@\Y ~8υBb֜ג!y\ ȑGkxaOP&90!gZ-Vo3_Y3`[02TF+Vg߆ZITbO!Jn%f\=C Ip>E Ө M6FA"͖fZ| DZAf'#)Z1V[Ҹ` IhDLWҍ͕i&sTYL4.csfo*eQ AlelC-XP<3 E[]*[g], +xa+#rBAUn*ܾ c̞-)ƞ,b%Rb>BNXŜ(4mF"Xa1u5-ӽuŕ1 sp ^O[TQIF9PQNE#hHDQ.;ٿh{=t#ٸ +_Sޓb=Y({2C,"CiZBi{( +'l;€P`NBu{Hau:̲E#0fqS(@`EC]0ЯJ xB`_I.(Z7hz |D"4VXjʤ4j}R4+j3~j:V(R*LF#E9I+)`)Ll& ׬D܊'X`!BdVحz"#`jיD5XPBuTp + C2*$5 +h8Gv QlVDf)YrIEN2Q&a^/#~2ҠWMZ:C|_/j/}>B%ͽ _7a>3 *ާy$=UlO}d׷IPxQc3=vlۆMuY1;GdgG!A3$M>|czl=t`ݬMu.,h[4#[Pmt.^Ѥg>dt]=d՗Mt" GqIx,XG3zV9nEϡ6֋K/PeʇN=^Ao0|݇ uaoۇ[(zKýl &3&k_NAӬvdKdCmX C琦AFP<2hchY@{B@3jiUEu_NjFlK} #oZnLvUMhh93Z6jJzZfA-Kg:4{?EJf}+cv?.U2hi4\gG#CV\׃…:ҫڼY/r3'_KC ^J91ٖ H"2$<>ՖpBq9i:M bRE|D$ ^:'e>*!1zJHu8:4nF]l@j S) +PB(R6JؕB/"m:?L'5G !JO2Pj 2 + S0JirJ*af S|wgM}ae;꿃@m 4TJ<@E hԀJxv^,Ǖ$PIzC6= {:/*~9#T[._F`e$vs+ݒչޅAar prvCb\O7 㴸]g\w5g嬔 +YLkY nr6:KڥL bU.5brҙ̇j Φq $ؙT P%@$J5;GQ"r% +8P&XVx]N'U;,؏˄:XHMaRG5ױ諮%7Sb&\+O)KB\e\)fb.q,+b'E_.v9$ 1\IW;|CL4+ fEU#)/I:t>}#\>_"ټU9T+39bcg(d̄p@If -:%pq;0{|]x# =}]:y:MԾSNO7?5f_~z޼=DZң9sӢ#Oݝ<;3WYɱ"sRbJ"sq{R"3SM>~ ++k-i;.T.~|ֈdEeWۛ}/k^]/i90tnjkBewh+{~_/i;~;hxNuʺ>qںE~փze}"Ny$%&\27kp8Y!i@L+XXx/ +<^?+| !~ kʲNh>f:h1CK #|W`~ܬC 4TԕZj.b\@^Z~{\E`uWWKUl%#rB*oTCfub; NJ-bP\C~ 2G1'9Od@׈wkcF~A\jp~cb~% 4g9LШުI*k2c."B +2jZF9=[EfPN7+m(NR# +7I +'\%ܽ("ka8qŇp. { b tG ]`: YBe{+f5(â0n,6+e:Y 98XUp,1$0sHX̛2F62眂9Dk"8B(aH`Y#8$ ; Zد(< dn~_n 2H(IA,`@]]sQG( d EuO虞A]ZU~ +x4n6DYCjPRYM21I Ј #x +$$X1N=QnHPu-Evh(\p-K~4%wPpw'K!'EiA>;DL{qAx~R5=[aXX8t2&L]W"a87 YdF7FxKC[VgxMjqpg0ዚp#wZo\_'л/Y77*LIZp_bv2tǛ2z\̟LAd3ЯZA@dSL!`;Yؕ҉ƫSנ͢MImnd;~PPW6Ω<*hoW#O*8ScmOf3c6+jj~g{ɩy +οkk:.E:]onzu{卭k[?4 :jB^C#FQ5Kλ[#4MM~9M f rfni~nq蹝4{:d4Z/966lc))ohyװxx0߀ =ZyMoHobuqkG3m'ֲP3Tjj.x5tS2ݕW4SlT4)w>r?:z).uny9n;1UWS_0u?o[ċ ­GdN8pDB2%1C )%I9rȇT )HDR'%KI'NYqq9fd㥏[ca=c\L֘c^O 9*\GɁ`WM(05N|Pd@Mk @Ԕ Q4!C S$ϹG\(L<_<JEа5|&i + 91fTAaP[\?ܨ uYpVԨsJP̀8@}5wO +G5ڽܮphO=vIowyR=9_.Ün/7Kf0'_H1naN/׊`+ +0ǀȥ|<&|G].wo8`S IJY`Nr9)!9L.)JW$W(V0ALp .>c.1__3;b.$\}0!BQRDS_*M!qP@*J +"3 C90 wxD и &g'@`5>P"OGW>2kLƁLT2Xh,$HxI!fp52d"&##fsdw ѠDB` ѫxAO#A/} -@y@%)@Kzz4 +ש)\˒e T*I$RIG1rZ+@4cPN+ h;.HA +ZZ|!8sNCh> G6di$]~- mY"6}N/j?“WYo\_'л/y75*TL_-SwvVSyםtwp%ܨX53mΎ:3$ "A-]/n9\ ENngYqjuWI\فp9Ǫ)BOb߰z9!k̘r2\ ԄˡdiY4k!w.=N]vyyXq[mHdNk4[iƓ>Z9V{T_yZ9eҪlϐ.Nwvmo/Wò]#W2kosE-kK׶ad3zmw +y3x{Umn1L#3X·=3W?Ko-sXeom}1f]u8=KVb}?ppۖ/=~L{eyhuyy<:yټʛ&ikYఖ,>C:Ӓ~Z9X*+w|!#}84 0KHK,viM6ZS\$Yk'&NL2ѺsބãM +FEBse,F(B+7\TB$UJOH/W1t!I%8Cѓ,)gyfXr{l#e, +$"uRhADE` *=kP@Cz4 EwF P +h* +/tJZ/+Zj0hƠGu94\A#n|DМ +h<x\>G9xT<<,QƟeR`^,Cw}[ $`pV1n_70gYgϹygpk90 )J)i5YnA.jTp&p ; t> JQVƲpS,i1[HAT-$3B`=ue<;j~ڡԄ W +жzs|maZ9--ZijIZb5Z"rH@|MRG\u~ͨΚEZj<˼*ωK]g+r%ŝˡlI,;-YrW%%yoɩdw%3i[cI~(<$}_pLQؓcw^F(ۓ!v@$a٣v9w]r"Έw]GL;id={2'LI!+5Oݟz-c䆯s3 ;7Aȗ1`e| ?x|S(FHEx %`KfG~.&ċ6:Q"@ME 6<4AEM0KPi}Rj$)5QTVp>N jT+@@ iAxr/%eB2L00|p~WY^:*+t= L&38W@ `-÷D۶F|sT)RDj5E) +YTү@D8%ihdUn2Zxj e/ii~Xy]:V뗱3M>ѭ4Dz<I- oE-e㫿Rڻ!&ŗ1k0_,iE,kP4M[QpG?1Plfor]^QL:7s+RHA9|" oπ&u/q)<}"c>p)M \[—) d$|x$ +@PQwT x|_AZ5] +jt*,[7D0k=vF`ϪKn;z{*HԊރr8<.٣R`xO%=(F"A w Cs{MyCs>`sNƜ؝l1 lnYLڈ}\wp2g1;j.3dD0\;Fz:(LTWjh:JSVRU+:@ 0у$OP֥'2YNkT5%7&4.I;w\pB]:ne\TXw25,Ir9W_5Snc +Ա%JR ԇ*v+J+NA+Ps")RkMq]rFz] שC5q2k.T\Eγd;2}yVҙleY*gߗ^$J.sIOg:|[tdaF)Y}[圳9ȿr<ǝˈ;{X΅XtZz챬3]R΅盝}:G%Cua>e$=_# h$?(IWy01$"+Ca+Cʃ0\)? q9B?"*Ud Np?s;(1y+.dny $^~L2 #Bkbo+A&2$@*cE ՈO ^ʎOxp%u;!yܙ`C߹={!^a& ebB _'C'Qr@?BFFK0 /"TlG"D/,D 0TIX!4X$a$(B$$h'r +b' },BGWwt!tP(TL. ˋtFdI%|E | !ppBE M`p՜d{{7$)@^Ǽ#lswC_MlO˶ʪm5f:M#]lD|0> s7=6u\s:6~sk7&C%2js|[ؽ]6ƃ;Y íD])냑ت.$|||UKlu'Q:ZzB{ +{_hʗuϡ^2Z:jJwsIEjt~@ rkqh @m6MBS͔{ NhƖ9 2C9hZx8->D޴bK2<6Ab/MXyV6RzL-H :Z!el6Nmdjc{Zj[ F}fi6nޠ_֎Ԯ\i5[P_eW9~jv{7cp{Ηر/Nl1 +&pĦwF 1 E$ѽv%.+ 9sw棷߲;hgAemׇu_lyUc r1m:8~c m 4{Po+۴oO6폋֬/9MP)TPg0]A!yyyp^(GH SHg<}0HC*$}yH&LN]LN^&V`= rĬ1ɧVzmk8szR0F&~2H/D "1hDBsՕb){ӈ1E"ĸsZӔ2!PHIcHT@#J:h"@- $N@@ ERDw% +@n<Mf)xpY4,-Zݬ R~A:봠^.$KE[0 $x\G`jDk; zgXTn-\W +`{X~4^?#2k7L7JKVLЀWWnοu5\9<\ g\Pky$hvr9v,-<9vmL +tCԥTKRO](2 !ޜǩ-mMk;|S},ɪ|JKfڒ%de^|Itmۜ˕ %(q;^)+\9|4ױ +1"Gcg-t0#9-H,L9o2'5D!iHHBw$ +h~E +D4#$CuF? gb s~(.:EĢKi8YT~,p:LKJQx, TNEdQQzEbk>4w&Udn$SHT.qHD>KcZ]`Aa>S3I$w|2湷g  :&!bDN&tZ"OMP%&4h-y` +ڧ쏐 I!bAXH$D˼x"e DXBXHD]$nAb,_ *OqI?^+AMAԪR TLB!J.H("L,Ha&ju]Eb +1b/b/!"Ht߆s X + +:ׅC*`/(|?e?Dgٚ6+l擜Ki$>??rθ{ma# :H&[)$\=iYS2z[o^ ݣ7; 3ejU-!Nv ]Ez(}P?mҢuiX>hÍo#OBMk1hkF_}M@г딩ϑ[/ m < zug{}-A)GVUztmsCX0F';K@g)CM ela6tLtyt443ӽ5;݉=؞~5β0ջ==3}kipauxh91 @U߃>X?]*=1u)]He`3m::{ߡ1;6Z+{Po-۴oO6폊֬򗇋åP b`pȋǐ7<ϑŹryd9dy]ti^|H呂/"9gD\uŕuOwO=MmݭnM 0p r#7*LgD998T4n6Z^Շ{ߚv :'+:=ՙit潱KbV:⣦-oz-m׿=k XdPz/3Sn<)ifL#DSA&Jg1AJnKx ,=/@HKr`ϠB!@fB\a#ieH0j8G {Ԭ + pN {UլA ס˗6Ngz+j8eDj:PYJH4!}Hѽ*!6d ׹UN`7 [0/qFYz + t8(t튒B2r_s)O\;tl]".f"BXm ,y2jyqj๚c:㥯9tSiG d*r*E !dJHLv Ye 胔;ĊPD1CaqR$*NEq*1 -=8B,*K:E#= I˥1.'E])KZrryB$xB%S[T$>_,>)=nw8A(DzZ!s"dgEqv%EKڝMNrîȯ#aU|?BPE8< v/~"ON?@/}Gi0 A\ mg ]}8Imb[1mEnb0YPu!^$a eLk1e鼍h N<7cz5:w75ߋƤ`Q̠4:Zx0b}ix/X!T. פkP;"MCPD5*D>,Ò!F2~ zj_ /~ O솯=\}nkl`g3>$6m;s`cBD7gwb]BK;9-cvK1N^S2]=Zmy#F[FW8O6 4敱FliH"-#W{wuTU,wX@[@{B#Цuo{kx(tA^>vMŁ⥁fP(> +|E>^_W, +i_Q$Wl^帊G8g>\*sG(,AB9gt @@qw2Yqp.Uu{ӽ[ZՁӁ׃1gE,zVϡ^xL׃?L?ty>h<\M` 44VQ +hyJT𸂂GP ~!J}T{u(cý[ %(Uw +\v>m%~Bkr4<1[9r]ϧ\ɵ,py/tv"Q*W&*WNs"j_Bc5躚\<#%.TVwB}QyGp"Y2l S$( *)(?((I\q"8%QPP$Қ]qT?NNXV&AQ*hX +a 3vȎ\:DFuyEI# +l7"˒(IYn"oT"Wآʓ2X]-JQ]tmL̕D,'"js d"k eОH':qR>q&/1&?CsHMND,Bt:7B·DvGϒJ;TŻr"3pyCeJk'}_zNw%i,gw854RcLt3RqH́N9M9h)ڗ8C.JͲEJܗm鶈oN[ؾݡ0/{O8)Rh_SC)cWS}gKn;,m ?=\곁9ě^LA 0˘T}-`1M +^FaѻU,xMJkxz8`3ca(FR8p4OAg(- ?a(zU4P+]kֱ}ܨ0=̇KM`G8 0 FkB8:h`+r5e5DPBGX2~LN}Zχw/Vwۓ`p;Mfv3i>0mg4R3qI"x"dTi rNX)`P(Iv +lVlVy ^/4mJaoL? $>ف2<3{K+'vu{KNmK/jUk fu4eP2jT]> :CpXYs<F>YsLڋɭm¹i*tX +1AM8/J-\Aר- *x5s~./U}.-*|sQ#f{<.+GvSͣߘu`~܅ًȽ݂{}у^QLcAd{*zV:ۈ43XKyH‡vCOR}O'vi ,}݋M 2t]0|]Vgߚ vM"o~"Ȼw:wd`d< Z|<م-5Lvbd%8Jjec{>.x1Ѿ ^:ZW1A73޶7mY{:8ڼ 4 6"cck㣍ȳPnq}bӷm;ZKW +W: +ڐ׭/KVѸ]V܇,J[2/>WS"U$(XKkBﻩIj_SZSR35}5;6;y}'s3'm##u=7uU6vf^Y +2UdwsDTg%YNopJ*eKQ<۞,UT`:QD $^ )lLLq)ũd%1OO,G. fZ/uD|<R״+8 o '_>X-mְ`f90<ƌFq2_s}-#8 = 1em2SIE(<VxzL𸊅g5|Q%juDuwҹHS)qvjܪeCGQD0)7PQk@CND֭gNI'.;[|>{mn4_㔑Z2 ԕ*+4^# 2@3YhVm)YBK UPXUc&kar +W Y8f̴uO + I<Η(ϑpY lgsX2dI-f]e:"ͽ ))%Vy2RUw%D@:Ur$$%l9gg EvVa]Ak"Qvy='r ),OsYVS'&13+"ʼnKcoĝUl~2ŞYű +E3 1T=a&֍B8VU<#CN*aĸ~=/\SWmN_ +sJV,'F$˙̕,؊(_lI9YNSE)1Sr Syㅩ\)YyIs/d'Eͼ(hs$3!g؈Ǣ}Y$q'Eq?I<ph9㟌?C  !"|g +1| r.L?cgc=~o?|#4y@ٜژ_>w+4eml϶|*!6Y}P3V\Y +m! Y~6"~y$Hŷ4*$>wf.I+_8Ŗ_bio-'(€`?y+憵Jo6/yịÏr_d/?D, 8ц qތLZo`5moG&&Z6&Ǜͱln{?ڴ95Ѷ01}gݲQ6U:܁t޴[GkC(t2+XeuQ\=b^x%hyϴ*XHn.[lj.Zn4 }14S5R^{ԓЕ2ߙ:qi, Τ.X  "inJHq#Y%|In$H wQX7b$DDw +}8χrV0:yci\an^cfZg#K["S9/JҁHO!I9kuj 9iquT ZƲ5 +r +r*H8 p7r_h0@U9\Qx7=זԕ4L= WTX@PF>!*czQ_M 5 +xi +)ȰZZ-fq-5f4^18d.[I6%Fx+BPt]αL+f]lc696UeķTkb[,ژ*fa4X090`q-FZG{&E#+!p/G̥2Gp3 %^(Ĝ/9[_L^Skʅ֢kT)"hKa6%#QU<+=y!09$ߥp+ Vy;+LŐ*|ċC?RLE"3V_-"v|E>7$!+"4zܞA <$`)bJI1u 7Ds뚵P_c] 4< FZb/Qh +շȵ7$k4oz}c@o|ݜEz桅;Ż3K2kuY}0ӋYm5t:1atl }~h`sch96z9tctēMdlmD49dsj 53Ѷ5>{kۚ|xs懥NPqm\{Q>c^XkCHyQ6U:1 "τT0ZV5a^n?g_;vp;|/mVmm𑃇|mѯ.Z-[.]*]|GX@^QBOabO|zB,%A22Iw!M*MVƃTR$[h;VpnA 琌yXKH]JPv?0.y$)w#8ۣpT#2@ J$@Jh@) $|KbOݷWrH4RN_pУ% A Nj5av}hmKR~Aj)BJ1hAG=Z+ḽJUpj5$_ :ƽjvvٮ;fr|*n<$H8(X2?JVxY|Wvi.6Mv.N.A vr 9[겁MmǩDSx,iU:w[=ؙR)cH+d2{I6%xGOT}1V}Ŭo,&!]lSUF|K&٢cf3k2ibv#f4FQWnC5\14ysq|)v;+LIEbjl ףk=)≶lS2UUs2_V4a*r~}?Eqy*zۺIA] +Hòf]UqW%)Iϫ~geջ+3~nfze -p$.rzV#bgh1M;lYw('.s8|d%QKr }.64+) +'䜏K9~:ذ݇?>OtpczПp;9K03|}70sM?!x2s3yr +t8Nn ɗe12x;S^&ps7RnMi\ Kg։:k Y *gF&qZ6jT jΤ->ZԄ?2r)dc2)" *~R-($h'F$;~Gco2 +N8rW;|fO2~g~R R4dM#H|(_ ݻ0dWAA`?O SS}U4Rj>*9OwMi8R[x`.rn9 լ8I. +6p@ag4%&\⤗jzIĠu2>jOQjCiw +LER)$/|2\! cJ栤2~IYS;S;?]2{` %bi2~_=~/#!Ŀn>qv^`~m$XH1W nF-|TkU)׾ ͖ [p4'f˅ŭ8[V`9:W^ž#\,k?jC(?l eÇ`^rH,vx3Wơo'n߱7WcY軋ݳwkg,֧/|FۖGXMˌ N] +cՉu 7WCV52W_5aÍ#C`PH-19x;P6:ܴV72\[srgKrO[R_ VlErojS(Yif.(YyWhe]gkwUDJo~/|:Z~ZO`1IJY=ߞ1ۖ>Ӛ>¸0DzBs}_̋B-@*#eΡɳm9/Is%HYg8Hi8=_bE0i8>;=;?45hϢ՜8t䐿lLN :VJ@'Q8: v(d,{hTj˥WU&SQ#PF JW@]'fwE5OPW) + 4)\ 8oCe4_BCRh@]TqS*\S5bkݣrGBU +ۀxC}!!>N xP f~,P"V@pQχM .v'8eAp;nYgCY!E@p56]DdӁR^Цp]U*l2y+Jy@P~@P4-+BqAPxd=ˇ4P7DɍdgDrxu[EJ$F,9%^u"ԍDܯQB^pZamF8u kEDU!M#/j5!J[Ċ&.:7!-gU,'pH~*gS+)'ʳle)_f:ϱgJ2vNJ2-eQX/P +RcĄayxd1D$gJ +>}ԒE> +g;~4䫿!>0\ n%5zv!~zp9gg4>;xq70s!)} ~.fΟ>af4jݪ! +(""=ܞQQ]sAn<8e׭4}1Qkoէ{ﷻz^C,2`?E \IFg7*2:NF맕a4:6jihаɣJ#Uj "IG6<')~wmyw|=?÷G( &xGmp(8H3 ؋iT*̠bV [0+icx\ Ś(#5Dd11:"*B-HhD"""ᡌX̰BTȈD 3"*\m4٭fUfE~[̔"?)cyF# nғ":[C +4jR# E#fJ!h JN0r%m2VlVluhw lhHػr=nx4T8TCN&omoտ'bNjhd-uzl?vMBn9~~v ԕ!pV +s*FNS\_3tfufypٙva8ur]zۅ\~ \q}_{ ^z A7ܞYri(4nw{~5 =ݚb=i yq{5Bsw&E_'.&:Y͓Ltn-H['׺t@m+c-+CcWF"#ͫOFפֿBccWGY#M&G_7fYφ_MjnBGkQ`GqkPg@[ohrk|(_{ t{e<@2נG3\hh\}B +6W5.U7ߑ;^;^xTT||sə<5;u)!GA uʜ@2}8ck2PCTo2ڏ#E=RplnY3퇏\lKb\##S-vuGxS§E]*`ai1803aj=0 ЪhpCk@}I F1 Hy#qTP @i1@Hi)33,Xv(L7w 1r4hn ݳ`w)x/POC nןAjjR*uZ LN5\ũX]|X?¹ЭP}w%hDP;|[)Yb@ \2WOcSwYWNb뺜xr%r0.]glF᜵ܙ&Ss 3<0EU R*-vs=X_O$75铬/N:gW=MlXHa8aol! ]pfʲXc Do{0˲ qA'n=G~- X#zc;?nC]` ǻ}=&l[d_k\Z0u=oZtONg7[N&;_긋s.jjK':$_c+! NUMfٗعmmHy /;K/$N=$O^gߍua?Gߺ#eywDcy/W4ɗ_VP21~83E=h" %QKnKz&hI{^)I}!ߞp BYZ¥]S/5fuĩĩH@yKyXAŮf +)qU8{"e<'hFC<Ɏ.)X[wUd~mˏ$Yn[}2$Mqdk.[/Mavgd(q:?]EW'2Dy鄿? <zs.9i _|9iq_'žkm_ 'ZgѴ60ϢhiO#iM`M6Fa ~C BHn>k`U OTGH+@ +WeYT_U`U 3jR 0J +:GZ5}:7Y/јtp1jA׀F'JD Jhqi(Jg9(#0,4Q+ijGU'x=hà#@,K*_3y dh#G jX9JNa DD3~?Eqqvfoo7QX@POSI!7r/+ȵy{zfqfvvZR|vvWQ[*A("D(%ĆtF& . [VN$E +Cw |0ٟt07 3iD-Oy1F6l*AO9ކؿԪ5f3oD6heBcp{P=?j56C-uϑuY3sP@@7{t@/Ӿ>3pY 4t)2̳|Fo9=`}?;`&ySg> 2BO~|p{f#nm>ݵz7t&9Td;2NZ&ƭ-kVhrڔhZY'ӱNw jPwGKw}1Sk:- U-I*}u-UW-Ck*=Ǡ;TB{EK ݧ +N,/DΩܿƀ1p%@4jczV@S T*ux{_8wyu;u|vS k^6r +(ƏnVp6e2 q=]PȺvjs)d]9 x5HqL0p  dcn=:Ͻ3GyGSHm&Rc"՛,TfR:v!rSi>PawW)Q.տRͩB]ʁ_p2T2k +Y{.g\(3+sT$B |yϹӬ,LVbd+YB)_bLgDRNz!PB_V*UuЗE(<,_cRiBIA%y">*II.iNgE9E潟:ɑogb?b|ߏ0$$m{є!)4& Q<) 9~=r|?xoBm!P 3!@LvG90_P`s.$肌.iuԾz\kҹ6jElN:Fj- h +L"'`_MBzu=7J-Ep/9#!%`&f p"6CcB,E&ū-)X Xp5hF$&J,:R-7D1HD(i!HX0-,$ ଠ SNX D}) C5.L.TF +1PIOn^OtRh&Q"Nb -;™ +bPi) +*J%A !݄ KfVӁw?#ػ7I`B:fw_^bd4ݖ/yxeS ^ض:֧tހ{(&c*OgZc hG*ZFV&"nhVǼ XQxy4LQ[B4֢%DѲ%H`4O{,xVў3gH8[+M^|Lf2!3ݹcz1` .l9)0 QMc@rI&'ᄏ]iw㻙gy}5fW8#[9QnO1po|e1x1zlvGFzxj(+/&eRlkjW5KZZG@'x}yMhzoQ/C7h֛l`2F߿S['I942?>Cy£>YdZOgV cL?4Gqm^u Zt1E^tMz}ۺ):z}pbLNvNڠnhۘ&'_mLM"-3SX0ֺ9;ѹ6z{{OWsus9 s9Ur u5D:*Vmn)'Ⱥ +`['PemUk2ZfP(jrMԺ2j-v83{Ο^p9Bb+\Cɧ`lÙ(p| +xb[ϖxCe\{O+$O<dOt1i ~q%rCa!>& } 1D|祧2σ6ч4F^#Q0 '8$Al=H5?'Nc~F;}4w/ 0r{ýʤ `Q!!XBT8m=m㣴xl WA +".RE$DkX%$-%bdH)N 1p}8D"R8'#"ar7Jp0Gx+D-,Xɼbs8LLr@'_,Y}R_č7Hx6Nh%^CzM!8jT*cS*HBJC**H +ь\&s'/lT"u#a(p>nnra4{VIɀ^T_6fkLiIL;tD؜t(k7&TQ HO:CxX%@) +q\wr{OyeQhhvGFzxj(+/&_OQ\[otO3þ(Fc=SI}{%j5. 0l**E|DͰ*΀[wԲ^S>s֭y+Vͫɟւ9pk(4v7f^Kɬ1kiK'V6oq,3VS9MnO` Ἶ;eyS:PI2(WP/hOk6*H( uהrK\ ;7 +!c4 t0=)G˵!T T n T_#5./09z^(C +(Tг"BW(i=8QfoWWK%4ҝTg?Q"qBSy)dDT\(U$ +*QPynA-T$v 9wbgW됥(@Hq<)Pa," +̛Гm(0Sc` || Fs׎}Wr("z"'udGE2"K{H G[J :K9Щ3s+6UFVϖă<^q2qe>]s,'8]%ΔMB1?eFb8vf 9}+gexTiVɛf!}48yֿAO-tYShBQ' SvDAk\./)]|t^ )]eIf_rro>ȋ0{=x C4mptFIz?]Dk >^҉="*7PUAcmP|fT +j540F c:d0=F߭jX3 +b}i$Eh=}:?#S]GLh_+aRPp +A,@ +B Dp"8GaeX`!ɼ}i١`#-bokdC$y58ٿW-&G@%oX7J {DcJVwkJ/V T|cGy/!iRx +ɝd4N NzFcd-cZ\DI6BHSB*7Zu%)BbP,*X#D+F"yD.!w ?5OֆPCvB {z{Jj]?Vk;-mi{ }.1>m-zazB?/e3bw 3Nsx.ulB{V1tOX',~Z;7-z6ձ9coZd+1?ߜ6 oojFMUniTc7լxNkc.|ǩzl0Ԭ{SAz+>unu6yW@ (^zV4+{%(Գ0އ]7|(F\:y_r&,ׇ7Bٞ>dmgdn#CH딾4o2zSL笣7e+7y LJϙsIiSi )}IŦEPDIQHH2Eo/ R)i\"B*(W9zQՌx hkMFF +5zU34W"t !c4?`Y9=Ph݉tZJbU#h*n5<Asjhhk jZ@-#H4^κp!HOj>;>Kx"7q X}C G=*p$x蝀48 hAFĆjxPh1 B**'u$#)tQ{y*\/@^ǨJA(La2R0 H$(B4%&%rv{N_=_ JѾǰ.4-E~KEhC˃>!2LFCZ C0*.!Dp0H" 梔'$N'Y7r`B~?XHB̍B$nXl\dLl%&JFDG;/B&ΊDFl-"L&zCaa!R* f`X IE7R*(*PC{x b(1R"Oyߡ +)+!!rPβyţ>h)#u}zx r b/b/F$ M\,Nܧ5sHvˏQ~D!Ox܍m?t7ʆ5j_T.liŎ)'=yembɟ[OQmu|k+c[Z9Xy5cKqsN4L8h;?L FCJܸZe=%0w~;Cc xufޓJp k^y5#zyUnX2 F^Op/vma؄on"C8MFyb7v1L r^5<}n؂Xy^ۈdK%2~r{xX@ [nVZgUf#3Bk]6*=1z047b\!dxgl5qK{}ҹMN7^XoXscڢ'lS3N,LYaӸ0\W[԰:_5ͦ1SW:jb5ڵ18UsbtZ1t#]fΟJrqKc]g٪߶jkkWD #>r:3["KP.A$Hf{x#;ߪOGzeӞymvT:C *+8G%}UEnKZ^h-CmQ*D +\LGi dzQ !%!)OB{l Y.YL22Ȑ.#leJ)X PΒ5%fM1٭$AKX)Ni7;f:e5$,09< ąhF Bd*@T +J$ mnRȣIihR<#@K T48܏p*tpj 4p?Mk,E7;u%-xx%<^6ܭA#-xtFt\ds` `>-N1̧;"D*t,9V9)(n)ܚK۵3f91pHZbi8 +e`~i +8/< (ߘe 5d}PoF9Ր͘S T]uPUH&PDp'*ҀYTͳd E14Wd5V$_MOn>g>yޜtkj:^9CKĵ*t̩8~$T]ИW*cΚ6]`{pmޱ e&8y IW.ȑ u$9\wI{I۬5E<4/ %*TO+Ĺgs ATAO"_$*}Y\td8lJ;XdLih?>KBc㰰OcI AuW;DI +޳] h6V.NHIHVP|p0IPIQzݎI"$i":I:L+IaՒ!* : TOai?@Q + }a(@Q$I@8 0s#qB3ߠϖ_P8F {|#! +&L(IspӔ4 $1}0D85{Wwo Bޣ$)26'$hV;A!+r!9JB N%3V-#HVF+bB;nm̦Tl`EcHx(G@z yazZ@LxH% 7t: +Rx4Pq)'xf 0Op{b4M+(D)i:8_~*QNoigj ڥ}?ͿӉTcZZEs{*O>KxO#^Oλ+?x=oǶ·m>-c4R_ey$?1_CzcX,J6m@Cͽ);&+nΝVJ-ߡ;{}ރjGP qmyk A K KH9γŁN8 z/- !+ Cp{hYiCtmӻn'l9m}tMqzx}n]H$gz:<὘X|:6t նr}m|65ƚ~պ>3Ѷ>98šo[=ѹ޵ǵks1]g><]o[vwX=wqwy]~uԼ zeӞymvT:X9= ,Uٻ-6ky wp\m"TB\ә<{i/%(PE>*OB{XYHwf &2HmVOFb $Yd۬)&;ː ڻɋF[Wwqa͐nwtg=0`8X;LHxWR04 T ͡($RE[~>b1bΟF8?II馡Eqٚqk@DAEFP(^n!V.n[9 !@hqTH5 NOYd*TN+'@B2TMw":J,˅4; +p6M[Y#NŇ@Bs)+:H,@hU+H/OMypI*L~P!1gAS k/`v?)ʙW ]wdoeAR\e=ɱEx%ƸX<0/ǿiD{<x6I!h/j7l)Le h{m^ŕϾ]3L6Ճԧ4g1So}zԧ2+q۽.了Vy5fy]AO +# +XN0,dg3 w:S-̽Xz5N*}G0λ+ʙhTKMH揵=BKj +yO$O kgcc%u+smm HH[3pK zYV>ڎt\tJ*? + ۟D}lj|hD ! 5F F1dZ4qىLJ>=lM=lM֚FA`̋i~Q@ UQ,{5k"mg;7/f^v>{l{>[+|t}O|_XchwPO/jK  eή©BQt++OuMЂf66t$pKehHjeu IR= ZL? +FEiJ@`Ё@`4,N3HXF^,i`X3c kFױ>;pC`'`  ܣsp!7/ppbeO.Y9 5hWDػE.>P׻W@,KU>xuGvد&+43cm6mr|Pbn\p;nJK⊻1`pGn!h$${M9:?ͼ{ё!`wDQ2 :I]+rj!JP9NR.(9|kWqtS +2MVMWv2ɨjR$ZdPTqVD3%PJRZq;R scU%֕TSWs6d,RW%8rB`[\.2 ו8'Siu)6ϗSHO"U$lILQ"dBA)+ڙ +(jc6k +Vj_urD%eR`\/VnHN՝[AFskq(ja0l% ([W$#-@船~e>Eim/N~>,v%޺f rii63K+1-'{}S?oiLuuc}FW+f^)g黋1v;aEʧG'S]3󪩮zEͤedډQtfak97Fގu\8хu_$}wW 29 o|bo~|ư >F}/&VFfYǣh1g;>iԏ52Gji'ZEmv DU9ܴ= |7zo"n~ 64rqx^0|@3dD_҇񶥺WOjZjz[gzZ[NnBTY)fjhnh=MXM;單WJ 2/p;ez.a=֥s]gmU9-SEoYR|t9JP ׉7˘d)t"Ù"]A\*-UAnSF\TsnYVqiSͱDQ󭇒tFHͱSout/ іC#iS c=w85 +tZ:JDZ`Ղeyˁg嬾B##BWG#ZeEZhIF-2:AzЫLm փVAx^8cYXc"|P3Z}t<N<xxGjx|DՀ V}ՈhrY^ܭnS*rFp ~4f3rdu#VN]-]) .\Es\ dwr.{uNg); dtgLC"&T A*T&c$Y.J (AXEPv])KK'uՑ9}\$dvڍQCNcFP5oEKTnތ=3ߪofsƜXeIhZ͜vHj 4VckhuKi*J+b[-b.f$bE 1Kn}ӢpmJ:_3 %Ε +8[%q,+X$0^Q5EؾBB +>>kAY{N{*eJd }]~T7e{JdT﯄+?8/9i_$i_UҴ+%D/b@ЗH|M ? +9wW(s07L[8q!bۂE1A!:3I#"0a>On/fӇBLFLdi:LhdMjLFTFZha_V4 @Q Iҍ"H@`!EcJ XCО +,FJApX4B{Ħߐ9ߪ)f$(BͲA&|dD/@džPwQ_Swqm&zGq&>]>LN]2;h%`cT%bT.(:R-PD+%"["U"[(TnJlKb‚"A +`ς"A +9$ϒAPB¼@/+Hc0 i3QGoNGh=Zh4!V" +˲JQB* pP0 +VF! ++ Pr9a >0flflr0yM R¾΃GM&x_'v92ku2Rz x<#%!ߘձh`hycFW-Dn淲4!#"Kb+Cb^_mAԋCb ÞIB+^ðWbCI],KH ET,lEGs/?E06?I/?@S(|f_1=-<f{ժ/Dk{s1xjݬpݮr!wxw3>!Ql_3>= -g8zڠv^ǹwOz;.޳ ӽŷϟC=8=}P[l ^] ]};|w0;~>M8MA7MSI48nOt;9nd5>š' -w."cKH־<@cmHhȓphtH361huryut!63x{7ؼ:5ܶ1ݽre~nE9Ys<3et^wqV/ %u] t@.6ijE,Xꑀ+@/݁,<,)pt}Zr 9y%;eut!2NI2 ;8&qԃqt"Gd YֲH=Ⰼ/ gf{E!H7+Ϥ8gq޴<9דJΚiˀLG7SߴM{ۑquA(dL[bm!84HG(hjBRP M%M!e'zf|!jfyJ@0=mtZaT@* +$*@@#5C3*Y\ rQ (Q=Q@ h(ό׬Ƃ;猠@{g=SB`aN݂r~rFOsށsU$h$kX pĮ¹r9rPXc: Y NA'ת/c!V.xvć91yuG='8|m>7$v&[H3Q!iޖ DŪr*yVMHYenfY%i ӯTϺZcIl6Zl]Om[RyB<+O4T`>kAY{NmT˔_S}&[l%( +. pxmӉ.8:AW +4>mZ/f0PZO#w1N$Mw.$N #D5qT802vpQH\tƱmǯ +0Bߨ_'aCGG]Qze ctI}EO4R{wkx`ɸJP{T| Ū&p'vi(52Ek(4EH-OOvEEGD" HtJB#. U 潅D@e*?F߇ra^Gכ$hۓA:pBo3)p=zBD`B@%0!a4M( +Rû I6 +QEYh JA!\2`g쌝3A]e(p`~J>e2ADs{ ב_b69'e+y:^ITDO{[iy:% xGczHX_P6&>*9"%hNkFBEVGI7^mJg!"+#ʤb=j{+V_)Z~}b}(BM_G4ZƸ2,z/37#6 3JǴnil]jY>|Unk`s!Dx2{5bcxucxezysd4>޲91֌L<ۚm, ?F懛fF۶:z7ͼx\o8qi>uveVC R_buԭskmjw 8Ԯphx.TlS$m==eUL{"W X7 _ԟ8)r8C|a->Fơ"YI5NVH:PU +TZ +K|rϢ} <c^c#DQ_b8I!uDu$!$A@懭aQUC <]Q<}#^L;~݁~I:25kߪOuҩn16;ƘK CbFhE ["aA }gb͈^1IFD!:;Ok3JDzDS[tYҤATjʨ( Jo]Y:9`4 I)CIBF"$|( +a(e2%`:aC$v\0 AD`Hb'FMGH;=6,LKحFg&SmdZLI2S)aTjJI) jzCp Щ,*aVN0Ir02INP![)dbI%ī)NbJq!9X֏㈖Qbbp +LLgWɑHvV9b"Y-rL XL YiE8S 7~2@eS5:M4P0j5 *S*( `FNs䐂8fYeX.Cbh-%2A+lflf|sC`y2Hn^`vu,mNmSmnu"NCT7RdFʇDF}L:YHYT!j<屸O3eچ,JZ Yߘ_eq$ʟSZK)G!ܲP_cȦ;),߳8[3o ia 2o2?`%!j,i!e6^u[Yo~=nȾ0=VbW564*;]No]}jwyz9?UθBM^#I Z;yzVz&x~{KC;wmw7s \} BCuȍ7Q1h\0{y=5LC7?Bޙ⼻ +y@<9+8Yh,rd2)t"m>bl!Zl=ϗۑ~塱hؓ1h|uebi^}5hH2:޺::huziXjʹUs#3/z/<9^ͺ*`aƋi{pBx b1p'|rzA-> }-njrS1nr-69yg{}K}.oca|_tރNԟ*-(+y:K9p"(pJ9Y8ϱ'z:XB(S19䨄Q&?_O<\Gry9YAdJ82"ʐp(b9 k D9􌕮ӓ DhU@LK R4PYW LFF>:Z*'S x\/MW)d2Ӱ,Pߨ$V.vlu8@I~/7Sp9 +46p|pR #O*iV#?T*p<':jx2^%%`js<!n܆Ͽv ^nB ߕrܭ32,]mٺp~\ ]k%]=O.ظKň"܅5D c +H]>t6|"@ %T!@u.qc?U9u!0l "K<'nM̙-ɔB );DTz`^ǫE\_T@]u +/\)]@]r"_5A \K8y}ˑ](A>/8#B4sr[_;哽Iu{jNp9K${o a9>D2,)8C'KU{tf8) /*x_֔:0 : Qq,s쿖(/8Yx]v4kgIޡdzwgsTD=X5-!Ǯ1 m1 + qX$] hÁ>*8fۿٯ󧨎<~plj+Uz$A ]W[@`@$ڭw0ތѢX|>t/<$[+c +efRf%ƮoPfdL6<fZbwvvB4o ^p +,ңM<҆ ayIE dI/<xO@JqId3 +J[f䈕M +f}cV,5hLR13<ԲdIaiJI2بTrbTXPiQAaI)/Q 7+)Lj +qFK +1QH^WJdU&tF:"^{Hx\=RtN!x)N&[RޮūÙ#-t.rt|{rvQvN\q]FۉkգM؍fHqkmw{_^`ͲG^Z筭XQ/ױmXTщgT{rʫgۧ^Oz5@=mĆ SSٹ!-ċCKl42ydW[-Ĥlhzuk$qW~fY)ϫ sߛCuʺzoM==kIO{{類kCݷ=צ{N?m5}q +wCX罪fIֻݮujǼjf#:2T +=˗:a밵֌=7u+Ck;~ DDj1fI"Ƃ_q"8g9D/Iay_&U*I`3h]b0,؍F$G|@%"|wHp(s?4!hA\." jW\eK5u^Ռ…*$cN\V"]Y'Jiwgu TuΔw%!oJg|MN]'wbwpڥNS2T)ø}vTA]P39W:^t2TTj+RpnAP :" ʳeY>6Df +P(|q:ϫtFajSZ2 ϗ)/UpXh?66+lj( hi"Xp4X0\ϥSd>{>?0V[f.ud^W⳦z8+fUۗ[ԕ%ۼh*lUn^SKauyq&]9(+X[;cuΌOK27'pngZgʶe*)ZWQ0[ϋ>N>^aS (fb&6= EaL_蕖HEX)<5Aϱ +`p5yHլf5q(?`#KRA5{3뵺GS5K?>8WJ\G _84+5?l, ?w1@GSG,1= I|PN/xx$3=a+o'ԯRn˯j+u< f]]&vľ vr1Pދ񾺒Kt_/su](t܄nI+&;y%w㎻=ICD'ADg#z\T={t\mG3D[G *yGvqMG'u[sᕠ/.r t AÒ/NhzumL6ޛc84qK4Yl\v=go}lm4:˽{42{<"j}dD*ix2ku@s]͂nIУs}CMCpP9а06xal`piap«{ zՏ57OڧTN '[N7N:VOuR~ʳOL …h=b k[1݉(k4V%+fDӎ{N^[k7xTCmŅp,G0pȇnnMbaPC>~SC[d[n9d,CFf1vdO:_TOxƼ>^£&,q|<ӱ\(&ʁHPg @nQet/( d%%:<_U /ClP%{)lsny<:am{kϕ#-v+']lI.ob%X[ON!*ڣK@l>qu!LMfn^bD<:rTU˔ٽml]l0{v}e/{EE w}Yt_W+ +ˁMGrvuԍJ| !.Xۀe],XҺ6H˺ ^-(H9%B,2D +Lp3'LcB/2Ņ"Ibbb,}t0Gp>̄ 7mq MA 4V,ĺ?kw[Uqry>txYf2b{j]n[jYBᖥ&@`@cpeypq@`rxbi7:^3JeC1έxqb=6?Z1AӌqY1%N&7i h2rs9k#R4 EsuE:0Wvt;Yp~s_.8@s|g;">@>|80͗mp +d'QG<}wX!">~OG>ە3ٶ;o@@Ӂ ӡ[H)jP""τ "hX +_uh% yΧچ.E}R2@E 4G D+ Z&4: +(1H k7 +CA]U8x\Ie<Fh@sZ j,'@])#΃ +#X1R*#*5Fg$Ԗ+œ̿dg?Nܱ?db_bJO1@Y"6*~G mZ<OK@t1biSY)p"dsuh$FzE.(8>̋:V"8&ԋ:zUpK.)uj"2cx_0Ppd +\d(CY`RkC`dR Ҁ=XBwHmPP_GhmXqkD Uubp<w1N?=|U(GÛ(tVHB% mҐɉX2=-Lߦot8}JߪR!XHV%ͷm")|ںY)ũ +_)IR̖DZė(+i +)NAKacيh)#6~k1:)&:DEH1OaQdR>{ `ʃ ib2njݓ&XBQ*`OaJRJ +'1e DB{s0xP}DB9~A1FlFlį8Db$5JBY _T?oU2E߉Ԡ'RPOcZGSޯ͘Fey$m(pG辋C(>,ίšxX4& }zhD{E?M!D=។;lm:qZ kg{5oMqґϤfl{EE{zy[B8KV aRsVt50ZfHeV[zyQ9my\t@Wצ,]HդYSf+]3?,AD.a~c]QPT +veDJ8$ IHcڿg{ I'8߮O}}uWS0#m4fFчӺqɔ Yho'uٟؔNb4df^L"v=4Ϳ8ZlNEsiV 涉i{߃X)ꉾEDc }4KBt%Ei&s҈giܵw,;͐ҵl5w`x;ԅ[ kXxۊ޽bWwV9NZvmcY`SE= M\5B7cb4 .CQֿ\TumHªJ^jr`mWCKJߕyY?q5\p97?rs!JPbYgP̡)rsz \ +Nq8 8zq98ScA5:;xk{s\Sg:,l">$)+@XKns.GN…(*o KĔ02PBϚ$|^QVD B* SP!R 2x$RE' ;c_$UpW9xP;\'-"Q +^7H$uhW~Z(/k5x@/bks^k Njs%k"|U^'f/J \G>lգyp%\X/vGXEU(yBI HBR,BH>o&>J_C1j~Fk5OZX /͘HEB: hG@"L4)LgyY +>#KΒ vm +veIR]rga½{…;.h^ag& jG e Y2SE|TIHiۤ,)Ғ~,۶$KXn%I|ؖ͢uKJ$nlN-!^̲)NT|,KcA&Yb~H^tST 3S1E0!ƤPYrb d|I*$b1)A?"E@ +I?B& Uc/ ?%CY,0݊lal?Le}odabOǖdŚkْYKm~.)?䐖[}=c[Ѥu[ cID$10L9Br#\Ƹ_~AX(F4oSfV7ܚjݝ!=d7i14>=֍#OtfB~;6t&;6brmc9h%btB.M,7M `wLJQO-"+e6YB.,jH3F,=K#edtcyܹl,eۡ.lYWZWfVLʡv5*H4P?48t},UCoǠkXà@zBfqvQLܜFSSO2Tֿ\TuHUcPk{~?Es\*"(ʡ_TYJjɢxr(p뽺( Í"8X[{ޛ{!ԧ}{^wu6{wSUYY;\|.9"a8{ +UPF`EQ+twRF~|wW^*rV'X^(Tdu+T#alJ==e^t=ގyMYmn +.ĥJ)C@\XoRKΕ B"ΔR8Y +A(8QE, iV!3I"8L[AGS`hƔu%*$5JkR*[U֕1J Ѫ,Q+",#̱vMe6R<%wͪQ&C}0GHm0XEG",@P ( +fcXG@))a4Wjw,KШ'jC~!};wx`4aP˗I qtjr"!5NYkaRYƦ6t+!̦ӳ)"ơ[j6uFVMZC@j^UJҺzȮM24%$ +\RNӪzU+ zJ +t +qr]X[&,BAaRmKcD%BH1Q<$c"DE +v.OG8Uv+KQ3s&V&g21 +F#z:VAЉ"/ +,xx 6D0(j򠃂c1c1ޘ(\ߥ7Ʒ-zby"v;;E2x91$1 .<vi(2&~1wy$1sYc) x!㝯CѶ#cGF[n=37΍Xģo|3@=7߼xݹmn;Yq:ҹCPKǭeAwVEe\T.o< $sE-"kƝIeߪO}}%k%Ft, Z (⃍ `+\1w&Pqh>)xT +Pk/(xde<63DUSDU R]ʸsPS̼&y +xw xyα掉{4>CNr~SSKA΁zz\ F-G: +4ZT( +`ўa(``(zM8%1%Wahj7zh_$F0/^IQ7aq@T@T:.ڇ^c2I즄@vsb$wzvSؘe4DRZmװ6%hulrMڠ[&q%!N#)~ZhZ cjԲbT"뢕PlZVHtZVLʍFdMXTZ$2\%ZJE)?PȪHX`HHң@ GAn9?UH3;fDu'?T7($dMHgDt:Z + +Z-C iԬRv:*R)CDXNQ`=B& -/ XX46ShEߪ.:#F~{du,qd7 z=e8Z~mP{]C8My[oa`yZh !ka RĽ?W˚|V[%k| m}{Oٞ` @͇Lw7m {W %6PN;UTC}tMM*4ӉU9Tm5N,HC]T'V:ـ<-$Lv`e;fZ m/W&lmOۑ<ەN;ۡ8ы!oo`omȠ10}7F!oQ]X6Q=JG&隑6;20xP;҆9s+aUhq|425^94/`탼6bkvh\|7l{a28lqՆG<^]FRuDRHbFTky2jNuY=(~Y溚f& {.Qd,{B{S'y'nppgGKiXm,Zo=  +L?:*rd XഄSd)yGmy8 ʝ~cd)G$ʱ<d)9398 d eOtEP&$"CBiZґ4I+t`zK,%5ޒ9߾gD{R̽ܵoqסmYSrG_d4Na1r0Z +XGhYi?ÏuϠXGU( ChXVTcSPht*ɽᔠF[ê<+Yg(P4> +5JT tpq?|`a,@5RS<.YY +(ga +4,.eg9ߩJUڕTZ3Rpgн|;g>/V^n8p E: 7OW7NRn(uUr57 7(7&eTeDPfCEC]]] [Td7{_?4f+-U~8@aG@Q b 9k-dВBPj +)P]$LK`JҹӄdܯΜb9kNK&}Uu<`;F_e9}i;)!,lټ,L kq"IU(CCT {"?p: 1 q!'6wn#!!)]a4 fAJW;&h>:pwF(#G8x<|%y͸G +qp<{^G^-@h<0/IktfpsI# 1tޡRw vdL * +1>{)VRҜ-M(hj/ho ?O(M`(V'7'Ib#k лkAћ + vńѿߵN60;cx?vO?~ܞ_nOQ;KcE]b5Lbٓ1dbwpX7I⣵4b#=HFo +]P"ÕpKaB6K!* !,-DM VBUXp~JBk*Q)נ` +ׇe1x+>zNDA{{q,s'/CX6++ad7\4hd5by(ȥYKZہPggZW/ |~K)y*W . rz}`|mT.rC{SgWz/ ~o^Enn?@x+zyw,3fw:ۋݷ>V`U3=ȣj5oz@mۑ7´ sOB}^c˯Ahz0+K(4n>임^\¦Ы/7/7 4{ad<[lF޶Lv!K|w{0LhDxD26Z׶t9@+}cO~裕+CãWGq:1Ҽ69ڲ65܊쯽y޼63ܲ62'ݕ =.Hʹ{mݥrS'R_1e.7hh`x*wҢAVa==hJ ,Gi@XNyܖ2-i8B 1Js)ןSU 3 +`dY(p@"h,Q\תZ5759 Z;g` +lܴ\Łm v-5,hf-8 URFnkj}WWHߚLƾF+h< 6h*A(iR)@*> zBR=\8;Ja狁KEN&h(p0L!j +I@U(Be>ey4f˥@d +Ly4s΢9`eBp )̈́5UIJk̇LiMV +eI(5O(Z_nr%Μ3$_,+H/GR`o_'NMdi_wI !7B٭ڪʓCQ J8^8 (}xqfݪ{K'tw:85|U?@HW"]p087UC'n~*Q* +3U"gO8A,nH9SǕx3sy.>sY') psmv̀=d8cUSTQnSg{kK)5EY; 3wY)L(#T^s4'9bi~G"(L-'GmR4.1?1GC݋̣SiyQz jT: EavP?Dl S@qBZ>ZA|aJ>XARN>#(cI~מc` N#L\ 8CaDQ I9r@R!3h@K %H{"$%a̎P(e eDRf;ħ[uĎO4vؚR rΙ-ra')A^<[6)\ls(b=9xcw1$l~tt0/b煉?{2y7|~ x3ODcXMEyG#@Ͽ4 AV={;Q-ʗC21C;@[8Fr`/Zy b:d;^SC =Y5&[/{-Ӽ6N|/.ǺYk tZ?˸z`}=jEg{O=9`==ja4>:Y/v1> \^~ ]yD!hn䫗Q/c8k${ +>@/7Wt1^ߚF@m;S] 2x{oX[';SϹO>[bF @y 6p 7QFoja^F@ c vZ +n1N71;:`N ֪7&.,|#5 + +GOb"3kU@UؿR!_"0AGp 2 p xTy0p(s%bV);]F#梡9#7LEWjq\e4;ǜv]d3`d< }E9;%[Bj9'G!l!Iah,IaN;]bvKO*/!_)؅&n:6ȅ_:Mt UdPEx4e>M4H\q/7'__vϞ CbӋ1dmƸ7p6^wAHǒ)>IXs~zfFxf c` ^0!EL xO9+c 3ynL^̘ƒA0l1@iqhF +KAypVOFG,$D8`ip&s:1hPz`I?oxNgRBA0p,xY-DP?J&F)d\Jxh%y oFLXj/I48Gc)F,9Π0$* 17mP[k\$6ʠ;DPM guJz" *z"9`JHw +^aAs*kX}9?vIތKӤb.JkY(ҊZ% )iMYS2t*X1S_:P1X_5| =.j=#GtUPbJ&DdvQݲMwwEG`mxãEGE) +Q +<89_{᠆_> {5Ѱۃ|-ycO4Ґ%wA5dyA9В=V>`][Ey#ݯtt/f,XXo90 h(xV`ǀeBILV1#ͺЫ(J:|ց@I3aD'ᐷop$.Uzy7Np+U7P^][,ܨ ޛj륒k%ھ+\w(BW*WxW +(r + (h/? XS8sK:ѩ=ܭv‰<*e9 ^P|%h~q ;E +XrEhJo*KeYRQmPl9W*+s'犔Eig9l9m9+c +E\sNҐQM,PsPxRK_aMU7VZZAQgPqQ[_?jr=édߎ-' +g}Z's/ݾ$#tOœ?&y?ߏ)!>, P/%\~Ia +~oBZ|4yb`^j*v5JbWEH~|1Kb V5 ^lߺ$e1_}̘[bT,VhF`8h h6(t:#њՑn1c mU+!U+ +M@GrhWCafDsC:y%<:~i"П!CY2&D& ?Dh])5D&=ϡ\m]"ovJ3a)E4 (!^QI˂-2`)KYR>`"C).t2gٺ i1y02Ef I+|m C-ԛ؅X(|P}Rm7O5cy=p)2TwG5Ӆ`;C]3|?v^bo 1 Z#vfL7Yf+ߵϋG\)kZ4qxjD5 .kKjFttsWKh=bwbRpsT/ztbS5z"zzj&Ps+v5]qꂺ/ +]~˖W`K?eA zuFЍah%=8M&8S5iW{ S9u 3>Q[,W =m㵋:{v>?~~oYO\{z?詙|vsof~z~fy͏ʦ;g{Lu?.hlj~\6ްJ\9VKqJ&[*k Upc92|hcѾѧyP1s`ߛ<G89QcO\(>{j\?rc^d+ȒBe*E~T#sryU?6e6|qr6n9tɆ-S2^?L\0Ѻ.X;aAzAZ-,0 R Y00=LC4!iv!:>H( aS2 7XL o+m@pܬ*\q>NBUNeQ"^]+2 (xWJH`+E@Pc| .`nKy<ebL % p}Qt@)*|@6|_t[Ɠ.YUG6Vg8eSOdI}8a,ecT +6TTVv%U~.?}YYWrա[,޻c}ў (}ܝ_;H-?Us#Y៯ 3-7hOtcCeI$)< 1CeE(Ƈa0 g[ +l\۫f{0- 1Ɠ!:<#n&1f`rc z0ZK$Ȥ!?[c&֦$=%XbuJ[HVVx+Dl0V Z8͢U#kE;5"2`a *us0`zBDH - mWJ٭W6+KX(LPD*2 [)#I nғ:B&өZ-hT%4˰C04CQ-IS")R %*4,",&'R`*t7tp8Ԟ};}(Fua/@׾dٯ&<௓NN[tfv~aڲfQg=QCGAqtT@# G@ + #at}}$v' +-ggV}tuygJrv:r7]cgxgڶ!O'|PkS|d}2M"V_I_#y/rSc4cie3V+$Òu^#aY ,b#AP װf06u~vҢ4UZGTX &ƣ/c͂+7Y 0VY gC+VkךuiuPn^CB}+s7M}Ngn 3FnBFhm{ h1u~2;hf~~EyBP4 =Cf4YKͦAriO(~ӽ+)Zt*kp겑'i:H?m 3F'^،6D4>>f&'S65>y4ѲjbhfceembmLgf쯲wkV˃=UC:uW軫)]N+]UCl%Ã|4V};m]nF:,:x#!_.>p܃clQ8Xp8!| uknr,݇/x]>"K..zW[5U"\yR8 ¡~yW~Ի G[SDXtN-BZk(q*ܪt-r8pQUtຖЛ\^dݨ( ZuphOpʮ+Ϯ/c+my<˥ysnԾKg)Yמq8A.WjJruU1lhi9*+844Ǡ+O@Y?~k (3}Df/-J84,3Ak;,Dub009 E 05+9"i~I0o +]SƇu*6CM 'etET*ҝ2Ÿ"]I,XI)(@.er'ZFEÄE"0c }@^ႍA]l7![>"_F F= (@ 18 +oPqEDN$$r`W ;T;_کBi +!3MebiL%+]f씢iPCwGI;dLTKU:e(TYNҒe;(H.uM"sJJpI`M̑Opl ^J8b^G.$\1QbH+BNP"DJp8B &8BD(8((~ \xPf6)qZRQ\.>RaQȁ(T8.r Ls8@=_@6`+b+O8 PD׉ %fl3) +)Jv&Bi Q3e 3Δv:ѭrQcgxgڶaO'|0kS>d'eE1!j2퉄)1̓^K4Oi,+$1i:Fsۈ0',oQOjq(aa&#mPu~b1mvҢ4UZG+PQł1f@֬oZO,3jj5Sk:ҋKN]7!{>F9AHwSY3&C("~e]peW%JFw͉5 C` +CA랹~ÄokV}:T7G]_?4p-2? Ch3pR?z47B&MoA&zb&gֻqd +/93=oZ]kK`Zjt.Z̜VK9X&N7;L o0Zc5256:4Úi[m ؀iCݲ}~hi|_?U=V0tW8G˖ Kʥ_bQΪ\зa*\ZZ}ilN - 6~cK_ukدgs _{p~씽,p s^}y/y:>9*:NyqS,}( +U0)TEyBB: ) @A*Nޑ_ctW9x^ܞUY%i9 `ӣ"K[M1@H`j.\1\^ݿp,9mxnu!MXy80Oz"vx-]pп@|Se.<T{X  JzWrċo|!寁V8}UJ5ȡUB +"N])̾_꡼%s(N@i?wW:xݒV֭b7.,N~k3rEV@w\}WyVj}~\+gB [M" V`=c=wv i}_ ${[d-R8Sq|_`?fĕ<-&uӚlX6'TNӆߔØ״4@'8d19sxX̏y+7+ Pc4T=ji: +گM;XקP;}^6G]_?4p-2? Ch3pR?z47B&MoA&zb&gֻqd +/93=oZ]kK`Zjt.Z̜VK9X&N7;L o0Zc5256:4Úi[m ؀rSW7ccz'Owq ` ml_Ύ}`zܐKrs7ۧ]&s Go=E붏6'ZM6P=nZ2;:,%+:*lux^Sj|ZYaA`J9b\jREc^rcrxOD9Txg*Vz=#>CG \q(nR%(QT7gn ŕqF@^]*mGh4PYalP^5T:PjP4>*e*DDZ9kd@$$-8 pCI"^RH0 RHG>#B/Wob)@UaE*iI3=/v2dxF*gʐ]irIɰ@vju]z +IKVPd HCuHZH'DII$%y$T$+>I9Kv; JXd,;b,ۣ%bh(9KtLPLC.c|CHX䣅IYB%,A‚ Rɺ Hq d +"m$ޏ E:`ˤ5&? )ҩ ^Z[cR,Jh8B!Ƙ2E"HK* (Hp,8I:!Wc'؊؊?hKgQHO=ʕmqأ5i:]lٝ x?#?M@}1vP5&8A?nt즸bԐjZ_S YRlCx7Ix~XRC X8 +s4eq;VF#r%6Hc5,Ch1)@AC.9TCp1h ۠YBAt~H/]ӑ+~q?̷?4,jmCM Gvߠ'Mv+ﴧ5gPyJyA{iYWHK|?mP;K'KMKa + ~ ҆Ehc[84I~2雁f:Aogwz)"yL->8fz).o|iaZjrQ^OyMw.Qڧ˔I~2ձ<0ن ҆'ZG&_/LPFǛW&^L@-+S65bez{f=7֌L4m>䞘ju7Ͷv;zCfxiiѰl4/syJCWb5^j,Z2պ,5~fsŸ8,ƨxS95Qux6;,}{oeSI93T/uD;!Sr"[5?͏#rx\A71ޣ:s(^@PQ {vfٷtbwZ[;SY5'iH(p-Ki"-W%N9^\@Ӏ hr"U@G8p5 @.VV~ @~h^gb\{1 ^=\.w]0 |W2aȝ:kZ rCnȭjf;oULb(78!+ϵN ®p4ߥ +V9|Sx.P +/\1nZ|QHbdd\>[u$y󃋦BFy:kɌNsU !& B:w)_@^Pk%W-*4{r" o,u$Ǡ/OǤK%h@&G'! OB8!~7.H]Bˀx#XVo.WT ۵o.ҟG ф"Z&ćGm &#@/D(4<*W*V ဓIHE.Rwq BI0;)^G$^ x5.xIAZ!ƥR1{@Jp.ph!fe$I<ܒa'Yfȅ, zNCf9Ȝ=n-[z(jq0ca«QA+Лr}tH}zJADC!qs;ujGV/ =0٭?@YL6?Y?۬Y4YBXmVF;qӼlC3:QJJZ[R]vO(S\UHHڍ%TKO؅%LOv(JRe%Wbo6tGO_[uQ6oikњHZr񖴵E9? xy4%CW@pW.s +\AHeZXR-p/[oga0f,Q;>pY5a@I(iI|u|oF% `"?(}@d޻XdsC$'!x e\fbGE4>: (7#pho]Ht3YBzZAjC9PJ/_1(b1kVhgzfVi}fV',V%LV$x|Q#ы8Ʋ%F *YKcc4V,ԨQ2Zƈ-4Pj1œF:9EG +QV0+2"BWk-4BCk,< +dHpQPC~K2nФ/j>geI_ 㖏vS3) 2HF"@POӜ ,)xp,X eXFM C$宧Rk|||AH(tbrknz8qZdEx?M{;}gf)L 6koS= b߅72 LvG#D71v&A4~?3L:`o1v7=G;`Y ?ݕLE +H[q+jiِxXgmxɂѮ:XVVgqEΗ.~+r^De eKˎFJvbMtRrY g&ѾgfEvVс'w m?Kzu"Ƀݢc=HCg?2x!y<>==}*zZ7=CsȘlD@蹒[ƁjIn7MnIZdnNJg߭]Ygϵק\uu7N?2݃^i4<4sn쩟y}aIo3h+ecw[c]M&DǭMt|7tJ&f]{MWnDxpU΍*lm *ۄ6ޡfk\<\BZOin.>|ۦSmE^{['ϋ]z[[D;Ã:ۼwrFgz=ҬAd4l"̓M1ܤ{/YyQgղTTJީ[6W1i}8.BR PDFBK_"x`3-$&Vba}̌ bf6ߛ@@hK'SP{4U8l gmh3 V[B]0Xm9g$9 YW +pZQ T16;#XΉRB8ZКG#65EF"j5)4==y0HDQA1]][*A {& 3 I 9A` FrM;3zVOէtMtp ^(ī/`|pp.Rl&u&Ԟ 8sj'2@+yYyL f^% 4ع<[D C@"Bd> 0ށmY Vľ XRLWJ{;ũ/A$gJ9kF$1!kM{N`F$՘PՅ t4<=TUXyJ( +R*Nr*)|N-?%lj/MI(`;$ +$XO#~c=1w,4cG9WvDŽ9Nm c€Ol8E![cL8)ņ!cx~C9BBE>CD"}R`o6 hF.y}!xy'{K:J*ah@ Cv%1bD!'+~/!As(R#T(9 WA^EA :s\r93*xNBAxiDh]ܶ9XcK6{;m5̖XÎwlIQqZjgNƀGldXbkkK z :ѦnGFk1nl\AlX]b}FB'^#?.RCC`mZJ&BMỀrY5 +pKT2CՈ*X- + RqBV)?Zp +dT"VBN1 +#K;KR~> כaH/ۓ"`򄙔Czh,O=ͤzB#QZjVCFMVUTԌJ)P)QʋV2Z-IgI}@JJ^)N +y[ pǿ yz7|.^◡u3%Кna0RDrI%f—e7tYfDސO6׳<=`Ug3rUlǛxԋwTj7Ǚ2&;gwƺTݼY{j}r#X;i}cES} 'zn';An7[K;Y?9)߅94Z:Y~.lXG9CQŇX5-P6֙wPYNE[K፽p>y> \~y ^Ἳ4 +n& f8i~.5pehx, աMd>Os^?{5hUjiM>vrʦX=)1|,Hd'jx =pY2nrY<(sɺ 5rMS]d):'.玷O=7a c(tnaf.5.:Dq71dNdc6ޒqԍ#8$H{&8N2.:~}n8ijC`͒9*`qio} әĞrYRpH/?kF$1!k9]aF$՘PՅ t4<=TUXyJ( +Ғ*N*HaWsm) 2cJfp҇Zt!`fI Fc&Mh=PO V 2Eh8ߚv(u*Phךp C,`I(Ԋux7|BoyAz1$"# ŢH |g ', g +KGAp @FuIV vd+6QG#_ik5n0g7Q3Ub˺$%!IAYƬM,&A-)yJӸ%ūq*xbq 1J*(" +[L61 +]bT*(BeK +1A2Mf!Afa8L2jf)?jbRld1&%zFAGz؊`M̠eISӒ51¨T$N +TWJ%E( )4PJ.iN.2Eq +e9`8C  8H `%Vb%VC碑Du~]Ḭ]ːMz L?JyX鷁7^_@$j/\L2koke'ԓ]y#s]72ӍQLw-l盙.ߊ駸'2tyƟc&X}/&[$fdh7F;̲ǂM6v[ȣ&^.>_4yttJ'ӵvN+F7Nu[NF;5#HCHQ_;y'MPӣ-S/[[o^C_"y +Wj?YMJp +Ȁb.f&fŇL0W4|Ez&F! e=E{O\>ɀs8Sb\)g*\"%XTMǕR @.T .)rppQ +ͅ)ǝc~5)?Rb-8[]3t|/<%0|MTS N"*p;qȱCl.BYP/ ,O`2Tf«t p+@4%dlMHbUb;\gg*\ĵ1ۿ-$IR̶S%'qۿ*PveoHHGx!f̭ǎ2x[j6-V{r I`oKM>*\U.ϭI)2/ݕ>/mSU0ߵ"wœq;QL&D ~c8_IXÀ5!XV qD;cLqA116f +d@ tӇI " lzY.ȴ:Ȉڌ@hXDGT:DEp^3f=1q:Ph@VŐ @Ph '`NGVGeŻo>Xx WggI&! \*D,sv_VEۭ. +^)5\Zڪ֊"(EQ!\L&aa豮=g|x<3AD-PQ&F|$a '/g(!["eib2⛣|kz"E۬d5ʱkɳeh(kmVUO}HggiL\Cfgp2:-CJ*)f(GFVyJM F$kIڬ<sjX5n1T@F MOQڧM,"*Aa "TCDE - ,*A4a&ʫ`K@Ȩ'q02иAG)kILJ%4 GzFM%y!I˰4rcT*P4MEhIS %XJpYaoX`6j6\=qЕÃޏRxtߓL%^A/'L^M$ ogb3x;:+Ž++1H7j/{1i(\je(F- Eԯky,S)Yaoei(G!Gf_,o߱ ~`?H0#Y e`d}j Ms׫x?~r:,UtvtSlݮk4Zfzym.wO=; u{~TPҴ`z ^vn1̻1ƮM9Oz&ɦ)aRǩn޳&ϡhg/sмh͉᷉nޒ{lLJ*=~|Eo\GyO;v]hLgmvU>&{EĒ8e =L)04h d%}[%eVZL :7ǀ *Sՠ(/3Zgthj; !ZVGcz\Z@Si#V!u\^]oOJ\ \٥b)_Pv8?b>:bs0?w ˣG05nC%*a" C5"pM]a/|- +0|Sh?U> \n(QpxM]'؋eJDBw֧ky_+*q}ڭXjWUnrW"vCB +{E9DD/y {p铼"ގSBSOv4vֻ|T_^_/PV~"#v؏˫/ݷ,skVIT-gĂ<ʘClsɂs 8-7GaX<2MZǴ%#(Ŕ!L +1>L`*CB5:h c +0Dy#\ ua F@* +1 5G$0õ&=0_U5&=(O%DyxVDnp/82 F#`"`b-e[0@bS9ޖYZmk&'eh(kJc\Dudv'C2knT-bydhɜGZID b) jDrfj #1N>HUSJqp%6ZMHlb}bd>mdQ * c ,*Dho!fa Vye d/uŕgzfCEEA-k+Uú#rĸFM41P @.?{=c U˷)~tA lP}PV4*YPdhjXNdbF#M2p#PLг%!ױ,9yxu Xr*P ESVzǀ,d! CIԣ{EOSGrF Ř=`ϓ旎8?LoU_8/v^L(TO5AE~ETgĜLt4 occnaJYU9o(䭍Gnc䦵-`KZ$i I&a)D?stD_*mrd+-UOk_[%_*YuP vSvl]1(lTJ}|/{p;^4znoN?kjBHg7 >{*jG#%ڻػY{I< @ O=:Ј=_DIq4 _MшQĝqn^_vW kt?5H{֞{6Y{=w'wNa]5SݷکQg@ZQWtwӮϺoLp>A߆юq{]ZJkCJZa%oU;ZmY z-[Xx3vj*Bg[uX 7ޮ*po6^?Po`B=Ä#{! p@-wۏe{O^/h =QjYJYvyEIWvxXP'j;oyUC:c.} ( &-Y5V; PÖ[ڮo:V>A~V2ֈuryf >fٙUQϣA@iY`}dV>z2!|]qBgdnA\; ~>axp,Tr +XNkZJvub8Nt"\DyF]8?+q9wutwRw؉Ro怶Hpt +Opjɽ@Rg8r;(P@8Ki%: dr7gQ]@R [)2P̂E;fW%Ѣm+rTrIe.9.[+VQs%J9Jiҿ)VQJ;[}~PiҖS3}~B!aˉ|,KaBjkC-ǎdn0 t4mc%:2Oh^V6U6K6evFNm \~pJen7 3Ar Y +P螒% C KqEzˈx)8Y^' 懷ˠLAX "OF?H-tPn܌y>oS y A6;?> l4OO'qwfz@TrH0 ;njZ@^. AM #CgGcC ? >Y~1Vnoo{ZktwY-NkmRzi2+t[,n{+ +O@ͼ&KN#\yGDY٬Ozl t.hlW/kqǛ2Rc%Ήq&NP"rRQG;R\uBQtdFV#|V"28T^9(#W!G?p/ٶ_> 9;:}pcܛyiݳђtYwj>xßKFPIiq3Q@ P1p'Fғ˾d#ET@ I ЄijA@)&qh1j֧R``)IRFܮ ܭJRТ*G-WqgU;`~.s>+ N#7HqZ\?RWse|O~bL  ?20ǀX*|?u| +F T@e{3>!QTYrc"$VQ}k98{oVz0"+\(\eR.rY!߮+eGv^.}Iڮqv^,p9S/8Z`s;~8 l=}xGmI/mCլԔ#T3m.FW--^~,o8v*?[S9lJuI lM "' ,3%zsV"#0eQ>53ey00fW13ba14%Rc|BSaQB̒ +"YBLBY8#+&\>&L $Q a`!LB , +hJ@8$0@ +3L 6*Ϳ4/ozh8|fत%w=4):|!PT0W n@C n؊8_Jo`"n$67Y!l=eF +l֐_mBj4eiڼAGud @sYbsVD/1K'VĆLk'kng225kXXY"#EͣI_)aF %IJMI4!$P|I *xZ !N%KǨqO1+EEJ"Mn"_F3S0RCIIa #f|a!'%tdƧZ-&XZ/Wh$@4(4*P*R)TJ%)"AɇS8,_aZZ/0H|2\ +63&g&S4 #>SXD`cblXz !2=] x~],=8̧ \S0Y +GpM0=`"cv 0`@ZFf=Xz7/OO,Wk 4-Z-+HʰZWl>\yj4bvKHթ_VvWtTuw\XkG*YmV)Bp@|o _|o&9hyig /%4r EVR_||h-Bh\W`~^:EyA(>23DxӇ.CXM F-U@f\!: #Yh E| +hŐO!ek>!j2,hQ^{{?$)$yR{ÃAB :aI #-Y(H2Cٕfbv13vh]AٽK|a`vQj;4;:KOj%-EMLz h'|U+*uF&sK٬ŶmҸ%oc$?6oP lJT{ٸ^ţqKJ`M)!^ECKbO=P|*_\ҧhO1QJu +H[T[.oa +P@xoa&@h\)B ZRHM2AFCТ k|F=ChQ-%Zje )fXJZ-#* *%*%-S*(JT(E!c8{-g(f<|(( kk{H\51Τ`9YmZ7=Ց}k_cGw{_G7h%h|0x Iom>9hj]M xGp+85o?gHZ5,ĸj *!iq82P44\^C- FJZP- E~TJ_pIaʹ2$i?gG!Ak69p`-pPjq\o-3!Q71IyTǩEs^\m^V M5=-P+2m:9NkPuTO/ws缾5 @ ӸY91(6mǰ1hx&u!S4yr>wBsgndޅ,rh'`ŷ4ڱ4X-KHrk]Flk[`KyyҸ 4 [^X qfiaNȲߪTUﲊ3g|[ťUEAKk=j"""E-@Ԟ/̫J%VŪF=9}*9u*A@Xx_Dӷ#ˬjLhi5Lv6[Z{dt4 .Fau7gitGsVwp_ +Ou93C\p::j ujU͛k +gtS&mtj:|/⨀#dZʌݱ9S's6@j(R Qk@P\20\АԚ?0%I_Qi\x_9)$I"@"H)RRrB *\ j\l??㠲"*^p 8A9$"/ F HC-*,=VP]}@htq0ƝbqԅpX~ͳθQ"0~Vi\͇\s +p|q .9r1๐-"=c&@yLQ"p0c@ +4 @wO\K9ZY;ZYwNC.+vG3 9t[|q:C)M7t9<׵\oh3\/9t]|U66E V:+ks|yPijSA=Og g 3^DOL0xG pK2 +sR&I dxW0 @u?/Pj3HT2q%Vz%k" +|A&J(GQ@J(9FC0aP R4aR\a@`* q92.0  ::6$`J$DJ8oO;BɿaP~@x{?Vv}nN jo\)T.4]$$ jGZ`OClۢ5^ElMPI[TDfOb'-<ټAru]Sgz9O8"qs,g-:RƅGG*$DEy"e|Na2Fxtօx‚Rq +SRv*BR)BN`(hr\&dROiL}U!(rArAPK`3`-b-:m;9j J`smQ:?^}y?Int_AZ7=mtZܠ~;4CijC2_jq z%_Bd/ʣHB|_'Ylg([5&wg3[WOcu}՘ <:BYh [hbYBaTd>yfZ1RVŪOkZôVzZ6mG Ʃv + /&˓fʤia^0Ѯz߰3ߜh oH{Ǯs?k2?ff~54C^#o2&~eL"Sc;#m3,kfV;Fw'-V!æZӐ] ͩijЮ1\|du<_l\hX/ <[@#}OG떇#c}UˣOv4+3/֞d|Ҍޣ&aQ6Tnn2غܛ49l֯S!6FnL{Pb3h-\ZBgkE6]I?ꪄ+"=(qY +=8Õmmq8-Ey"rd8v*̕)"Ãt!S.<8)"Ճ'~}?Ev qAE ݽʻ*#$#kX[pf C0d={gz<Ӫ[o7535=Gj~pb$^'8Hta NHW iCU;Rl+ښVQ F7 +q M:eU0 K\ZS38pտp*-#R8Q}@ FłGkAGjAOj$@0=@q&&YvFc +n#~7 nr>7 H/^D?<ᱰ_z+]˗@z +D]E]%esTO\B" RDcQMY0LBMbg'4' t|gtp@@ap JPVJRD@!P@&?;v2NdZrM(J=+I\@I$KxQBR.I<+z*)y6WITQ!qʎNȝΑ^~RfG1l[-=p&' IFiJ(9x)[^3ˎ,Nۉ'~=Lk>2!ނ`yi!ALpZ. Wc~ UU2~Q˘UNxdvR01h҄IYd`iŚ^OthZ +@( Gh8tSӜSsZeV0,˪Q24˰)>h'۔RMCKK%!Ϫ^/ij'jgﻣ4nx߷߽_?zV~4ugbl׳ltLWg5:6 hQfCJ3ݭz>lFFw{G1׼I[~ +쭓zS;{-꩙Uw ^y tSW,z|tk^[GL{әNLwg%hlw3r{g;̴[k6W֖ 6,h|Y8RW]lmJМMX]xKQ*^X ^ +ϑg 4_oGz2W1 QÂƇy6 l,{b/5?9iypl>?k&/kNIMU)9.tℂ.sa+#Nd+r!SAQt'+HSjIU!% +\8 &y$Y:GA R 6Xpm_# -@kdXIё_RQ`ooڏf7Rl70۶h5^S`֖۬MR.}AǢ;3Hl^g6hgemXI֭:YkWiXڕZ5HB#sXܹA5DLF"zZbQJlYE;TdJ PD,UKG[ RJ +P诠@?ƥ' +Rχq }Y>^4鍲奧ekbz=%ӑRZGGR0Bi4F͐jVUjJ)P)BtF #"(r5qNA3`1c1KNeH^P:ewy{(w3u.xblEw'Z&-ESۖE[cEy#gr.qԃG\8AXYbep!σ\92Idr!SNI!#݃4giTRGG=^ Z0_ !虡*U;0ghRE\3%W*pJy VN +\pK(l&qM~F{8v8&PN!$>̑su(j%8}$Nj P}dUw'A3y,B8!l,pL;R%4pBHSA8p("i/`Ys>_r +IvYK$1g-`krk9I%k]NMYy ՅXR){gU K,1Ĕ)pP@,Ã['NQ\i>>PL6J*Q"ొʍ;Qq] (r0\q==㼦WkW_zS3X>VI=z&ۣ2ܟm*g;ue}Sgszl27lWQ_2P˜ b +@5kB²,̉Q`M"ƺ$8p9>+S\(q b0~ ydJtf7@fiC1'-h<# 66*Fz9PH5 n$Mеh2"rbIjGDļl\ڷ^BQE<^gtߦ~`%I~AT*2l&CIIk/?\|*YlaR&YON1kQ]ˬI11Xm`׮2kW*9o +NVjenrW)ԴbZLrDK-OHZtbFjzi^XE/Uc0>(1f]v[-)QMRbF*0>DE()O +Z&DF))oC9.X$Zpda 1VlVKY?3+Ȓ4I~z4Ijt,i2ZI0j5SNjzV**%C RA( +B`2LeY8Yaz4vjnAZ x{#O;u\|nޅt z~=C/ g_y8CWy/ad䪓㷾Ȩ`F#Ϋ&θ+}ȫk4qasǩ~SPV7yԌ{LvOMwߟl;yY3ug ;U9yk.fzzzP遮ۓ{*Gm!Zʆk+*_Un-=yuϥt;3 Eh[%cvW-E.78G&P(hׄ7'Z۫6/;R$e,K(@B|8(%w{$vRR\vqr b9ve>dbLI-.YI%la̗N9s!=Iim{5qqK`]֡GnxU} _0kA%cAQ+ ;b+;=OKjAK07@ +ipJJ)PdhNCP*зA}PЁր +Ǖ:Up4.ڂMi8U +pǣWl2Ke$T ps)T|K qc=]< ngsD̹#:s0zwL'K;}^t|Bұ=ഛ*;[2׻S*!F`JS5S7f2 =t%eXR(!\ f~Yg2Nq6)l8]$)TQ^#b '#E?;^KBlRTb +0WICsyrИԣ3W؊4[~NƱ۫{sꢯVEoY$a\Pʴ48nJc\LJ%!$܍Lq<׻yq(3(0gX 規(!GXx]rMч.覶@cEgP AF0? P XìGQ:S2+h`X1$~@ @F GgG'9)M<i޿ٯ(3ϙ@nuʦ6뺂BDtWEQuq㪨(})$*Ni~Mό[ _կ~{5v%U}Y["Ho[ +xkpuxإL$ғԦt_ ?zSޔfd63.Lzِgz;^41]Am$3EXɡkDj".%APzK(^bX IzLbVJիZ#p:>Zj]@qт()`b#t'yLTnȵ`aÄ`Dd N #́D؜;9 aN p@P؜ܷ\E.p{ L CJwBfVᒝ&ʉ5ۯV¾ +U۾)e5_-uc?+KK],QȺde/:_(_fsǡbggpg +^>dHͩcO +1U}zJ]6o>8ἜsE]i޲7)f oF40&PZz@#603DxQmWlst2(#g# q[5[b-r50n(m\0Oy\}܁F=s(-)YBĠ %AZ&iᚥHpD-%)`Z@w=1Kk}1EV)4u,s&ބAOLdH?LgA1MlJe6eW&=d$)T=1E`ӓLf*lLxg<^r: J&Rx%Y$hX1j gE =-q&6Bq":D閉\6>8Lx 0NyJ N #́$4,F;!=~M_Obz?W z?%u^tN^b>跡.mQ)oz/c-n5|JZhs22Cu<~?ÏB~4G`q7MKn 8`ƺYz qÍ6]KSgjjj$9ZAzT&Y4 %}tS<-;.___UJ;'CI>g̳:yj i<)jZ.Z/?u Š­ ̂I`+l pzPp[|ý-Kx1$ 0"D8G=bj(RTםn4NH?h1?4EHu,Q9+IbK3P.KYjM +|"zb^BS+<=rJ[jDVD)%feKx>H1hZWH]d,4 BBK$T[4ߨiPtpw[ ^C{kG^,FGj?>]{8rsSidwsXjT>xi]g[FNaU>- _ٴ2P%煌|vFmÊL>c5϶p3ڞ:j`Y=/kvnZsZZ4a))lqg+/Q,₄.月4_qJI'<(Q( o*p\D>_%mw8&!=8$ 9;|<;2ia연ݲ'a=p4,NN-|Y{'vi3Q޸9dvdٙy\dެ{i$z\;!+:\ލpޟ'h5QDuIҫT@AWAJ@ (4QEI#2%@U7OC + ?+eزC.aD}_ 8 +D8K{ G9 ,`n"0g7O=%t㤸'x?E@છkp K\-V\eq sÐKUc~F*a.KQaʎ Jqb2ܯ(ȹwQ.&NYK +.sfqF'VI_M@¬ŌqN~ Y`׵bxEc;e\>/M9]Ugo.s~s}}>7368$޴hXqGuʀ/) $Lɑ p}pĸŬe0c/> ,{lY(cr=fD"o7^FDs^!DB qT)%p]0`@L@hxsR s?bVzύT(WpH3J +(1>+3غirdezeFZ8p bGHO1;ҵėi"m;MPd6֎خf:j+glQkɌ4#UK~]Ch dIl+Y/k?l lݨJ΂Y$c)Y۸N'$LHoX>QOk%jx@k%֨y.1hh@l-AtZ *#t j0Z < +]‚)$4Hl!@I%(/00$I +#$1H/T|Q޸v>o8">zBtJV!!YZ\F5AJ5cPӄpZES4I( +AEʽ)c +(%,nVkVk~ϥ`a@łO-rΙ:٨P/kuz5|ܬH^?%_  <: Z {H4+#kd-F4#K܅(k<ʁא4)=E852ٲ=$欰 eR|=$Mw挹ah1 J*s7Ś 5+!k3PDOw.%A5O 8Mn\lq?e4 u36j@uy=e':bt5gs=<=1;lj#3nuDNw9 F@uf]gkv؝QCE{PWet=@ I 7ݝo};:eܪԷ}M"] d8JFaC SƊ)t\i7@kvn;NNI5n;#[5g @}p8y0F 3F0z#A5'nd(MAg,sk44Ù sundޝF:zkBH>W:N-R4K!///sg{.NwU^pve;;./UE>/\:ʇ.y'"WDy)BUd✈^ᥘ22HtG{:wiN&'x)k;hHj!_yqb9WH]QGH99ӑrb/kgʔd8:p+{,_Zj]s*$#5W +J +&dJ*r-%CTI&@sgyྖ`$B7S䯊MaP T:PYܩʔF1UeTC)b<+Qj<.1J?1P83<(g)&0Pyj8w߻̪*@¸_qI¸s]x&*;k9Ev˽yu㼇lu'g\|wWϼMʬd +0E*2X L |)=-TrQ|:rߕe{ΦV3שYG2R¬*9w[R, rv[ ߑ[)7d%߸,pz7n28P/pe/ \/埀Ҿ;$_HQyF~yǯI)'F[/NÒ} dfݱvň +%-R!% +$Dz}C66`/0!mژ LL@* 3: +"B@`piZr Ȥ $~IR\"V!ű_必 '92F1dASda8FJLJJ0JF25I ~0>EH"zOp䦥,L @$b8t@K~~PGPZFg:͚5߲~!P{w>Iثy'V$RwF`. {ZG;T)fv%+qTNbvlU@*[+lKPJ)l!.V!->ZΈFS$K#)p&[PJ kz~<McyhGc=VhaƠQ[72ta 3{Z{:k72W# oiciZFV ӽu1 mi[508As⠩q z_65, q{sT벘\ ѻl_OQ\y_5'p +rx 1n֦MD4F@oxkPip58)n1p/wT<W@B{$\n܂ko.lEl@Mw ^\pJs#ɕqKc\*JTrJbxv:_ v..!Y0ωK:Xz27x(9*ٜx:/몜g9U$}SעEi n t;B1 pz=g[ȵ1`A7jc {Cgպ5H$Pw?mXfO8 +B윐2F`GVJP{"ܖ3+~;.[(]s٦"vkV m)rʑQ"6+M*"H[6( 6S m #kB"Cn; Q[.[^g6 wiƉ,}~ L.ԧ zO}1>o6m1O~-͚'{&X_ނZ?By? ~.6YjK& uP=aj5MУINsdMkDO^=aгO:N^ׅq7P%#N/kN? z~׆[  oΘa{;^AkF9o=a4ʙ&!#O,7U7͚yšÝ.-3!a[!NdzA0>th}6:lye܋Gs` 6  Ϗh G~3P;?ݫ+M]e^}O_a1z:͆(ږjl*24dG׸hSF術ziC]ጱbsm6]UyYa*ʴ)P`^ +樄鮨c-eN}wn r(}5{T35("7$x Ό"" ʍ"fwjw}}M@[%_/{U^wMqIRbS۫vFEaAς^@P?#o|Z0T"BM1`h-=M<]P'EGi RBM~\ FȠi\DldaF] +eh ,jGAiikW׬׭8B| +nYC@EtԓM ^yʹHe$\T*24L*H ,ALY(BҌ.݅4; +xB sιT7NbgO[ߝq)dp*Nvt qSN+=o:/-TIz|MAyOʲlOO sF9B{jA lƄׇ̍[,kmb@0DJӯxFU x t+} m@чXy +/.=Gg'(  *T4t1#$0H;GnNF~G4N,{H7hC[L>anX?{~}БU GH*)RVRTC(-c1 +10uj9n)-E? &? SvQnSq:rVrvN=ڳÓڽÃhڳST"{P8ԿnS|U#A+3Cd͒lQlZ&͒l٨٠"]vi:h aZ*a$ׯQTJZZD" Y.[X)w)AXBdUMxB!C䄽X\pV-Џ Èz˜ _@D b^zgи^GIԒ(gӃuJVMJՄJh4TbJ%TPBNr 9I"Licd24M"$M({lN^R9[br,r,sV:'[8 ˼45;?Ck4Uwx(_y=.^U.N9RK+߫P^޾ Ywj +bf6M=\~&䋅z8SnIӼK3'2Wa>"}%Y.of걞yTˢǺe'+ɛu#7O;rt5w?y?,]yG7F͊.-ʱ;QNSh'q5#fÓ#V݈i㵟~c~: y|5 ~ybgEƾ0hM`M5qgnK2MݹJ٤4utql|h16fk䌵r+zJ$s&"HBoc乑FȴȰnieqDByN$t%uK'p6-}n8,!櫉֤C-DG-)S 'I{-wlޛci@J*!p-# eJЩ5TJ , e%c 29 vo4%EI4տk*Q>02\*LB +P_<0@3=f=Qp<3NA).Uh0頡A#\(X M)&4rr /5@rUT_A])$Q"s\/;\{g08L>,p:A.rr];-ɉl 65y3silMu.J8G`*0SLA$rUKd컄z.V +*8)hP.w^m/\L^+lHeR2yFS"u%" 'K2X'-$֔dVŜ"ΧUGPSeؾVd"gK,:=xOcCh7!&ܴ\ cN};MPu٭ݪQu@@Fc<[wufgF@!(^S"[;>ҡ Sn|Uu:{a186^p*.KmEQ2zha}\s # lF!qJ$| +~Oڗ(tH +QŠs$gDM:m@,JT+5Vb:$LmHS ސ>]@qхBcjj*5kEjYQm YVigd'An[X"HbuvV>YX̿KXDMlƯEY) Vdk1~S&(D4IJYqlSBRbA WhDͷ(ɸEGp[$Kx`Y0F",X!_(|i")F$e6&ƍzJAGzzҡ'C뵔,yh ЪhST*tϨ"p",JF2,^EBユiwP +Z) GB.W` \@c4#,lé $iNVUjп~K~M _Ǟ뇞97I=&1PV޽BQ翎{=w~}agջqRcE#Ogmg_uZsyy<y0c̛:=iaOb=EO޾vx zH k7NoEߕ;;8ߋnV o!ە;U!v΃Qtb99hZO?~ֆϾi@{{"<y<(xq%ʀ q{xmH?yz8o "Cw"#[mGqW{wӻ=9݂wnA[{NCЎػ?v4𞈞v=xQY &^tMt!nvܙptݚvNDMw}?999'5=6tdIsmG}p#N{F f;Q:7nb rǥ|mFcwK;j[cFjm=R^8+W SCq9N(qЇ:[< 0> V"WF=·=dm.;}2k2ö@Lpv+^dNj?;v0/T#={ˊ^nH[@ǃeeϴ<7+L`^e`Nƌ)NAdG FNcJp3&2$ S B!P ]\>&XBm2f*aD3B փZXwC}$cpK<%Xxh6hxF 5?f@{DP~V!bHR6,8NC`pŗ$'RUiqDHr:د&4/NwI8CCʡ#gmΌ(x9;3b<8[םL:t:0V-_/{{T~4m<7ۗ6yF27Er(diM7 #b,atNZ +f/ŬC"NA"=M/$)Ģdei YI]Jgp%VDNb'1,ǒÓE(1N'k^b$btGkeEѲ5gZZQpDt{Q4B9"j7Z,4 +B)$جJ"Ф0( $L~}I !~孑&%|$m$dyp39ғ#dX\e Ip:R# #ө鴄ZKUp44ESDi4 +$5AhH $H3>p7js`.e4B-s7{эr+mmD7ۢ;m{5mu!AScOFѣS&Ak3"z| V9mгovQǥ7s7N޵k-ڋ A#毯?ύ@[}>ﱳx=ަq^cEġq-x +Y{Mj>r(jpAlԎuR=Ջ;ܯm{NTZzp {nC*Ƭ7u<>R{1R& +ʝk(8R2د`{Kl-xۃ2 +vyxdrvؚy;<.cmmuE|%K%[6ؤOlbfE. +zyW#M}i{nXK~T6{Xy7 5֏կ[ykց+7_dYA:€NqW x ).98GQ#+,siQZb#X@@Imh 1p mL!0 =(9N+RcPa5RAZ]9\+\=,B..=$: _\5 ܹ}g-82;'KÉ]N_++Q#rt +dǧdUoS0PUTn|lõZG+53Q +ơj +/VvR&*pAPtڃʝ]sJןlݙ +%;E%vk)(8}Db#ŢvZs` @Tt|GA큲?V.[S$fϮoMRm hr@*l/%i10 +NU/)I 30-~IZB_w^,/J9.;VcFmF QWb M@cthhi 4 5_y<@ H4P |GapJ@1}9 9F3@W`H#PQ"-Q➤G"A*f(Bs!z|y_kWy0F,b ˳9beXVzby&K,` =,@,2+U9>\_"7-M7Kf$s1DaHOK,Ifeq ++(YYBnVR)\IU0X`y#˱$xFJɚ4ZYqQlYlV"&V"2\+^T(DPᡈ ,,V; h@ + 6kf,(4i$eΟ88}wt 3 r(Fc㭵qwEQ%5ƛAca}fzz\+V}}yy dUBO`AkvFlUl[)M6 [d5%ƭ&JE 5kJ@9")e8ᫌei;C4E{Đ>BhՔe@ 9GB`Q,DL~dk6o[Og ϧq=Y'{Y]LtEw|11Cx +m#❌uD:}ë'{^P :=vͩ ~,ZPq#C#v%{h1m:} TCm?@W Z}'QSE엒W%t]vtEtSv`mNrlྨ긤DVVwU/:jeM\Dg^47CJ\}[_ ϑ#Eɓ]+\Pjy=֋BϠ>E^|{OS W4Fot7"{F^$5.IG혨SrruՍ=AZe;uV=;.z~{Iǝxuu쨜>i:nO3XV `a L0OK̔BJ&M2ノ +c+5 U `4~6Xh +$8wa@ x<` #1+0v Þ ΂`'uPQ`ʃRTa\*" \-ɕB TdrΕ.z:_vXr1̑CyXt;{ൊ=!g>WyS~̝i:|/-9L6̣<xQc{0@d:\SnL]Rxd|s`1 x.GhbʼnĚq51ՑԪaeԚfdr&z +3;~ZV,YjG&'}l"WBKUKym)FdR |YȲł#CZbUYȬd,@PpEMoe9i"rQGZV Q^hn4,$n֔lf(MԬ) HHՌFp" sH +bh*cAi*$M^(%10Z5ep`oH G.GgYD £4XׇsVZI+m{l.]wJͺ $GBB/`{ڀNܟsOOZZ$ϓo齝F INŖ7 >0;@ 20(wm_<!M"[Gܜ鋕5șz:5؟̙t2 +Y芔5s dPYm!;̅-e5mgCnV"W["wAF[9^P24WKlG\͡Ȅ=Sm8qpܸnZmcƬlNmO%&Ϝ;C=&GCȓC'Y^7VA՜:A{=W P7,&+z%CWY_ڻ7^ػN{; @/#n 3G^CCm'Gu409| yx.4nQ˪ꫝ`Tqݪ' =F[3SpںNTNw?btt=~< <ꅵޞS}]w:+GheӯLvޟz3gPa{)gSqJA!گeZ6$W>D8G3ya98K\9)mz^m.cHCuK8.&:&H9A2J(+ Gdv>;5\wfOȗ'#WBPt12=~ dS앰NjBk_Bc)a{Gjw@el=\kaj3j{Ui_nbrgꭒuh0b3AZ50`Pq3N~U8\N1$IbJt3Jӫq-Skp +y Ф +, Ehc(`T +3: [#)bpx^DL+Ӏ65Zc\pu~ Z.Q\ǬQb"G.bWy_US:wH +TdSca r6r;Nrr8dU"LMDY3YJy&t@&RBJdk׍׏Vyc +B;!/0x/@p-+C.Ddۅ<_xm;_9sᜫe=– eqӅ9P^ڙ\X٣(قPfzEaֶsE rڽ|ɑcyYkmݲj]z ^f]DXS<'G%0/'BE,s'>,b#+@` f|ag}gFKD"A@/<њ2g8MLFB H$! +gj1 +01EAb! c q@ORQi0JEi|J!8PB4#p"T`wfuPFxR3a] Ħ-Ħ f@lڨ(d yc̈y ٲΌl^kB61":ަuk>_k&$iYlAnQYdJȚOUV.7J5x?YfYT+J1&D/1,K6K$,ֻ$W -IIZ"ItHJJ%kB1ZEn1QA#1[Tƈ BaX(B!aY R"!A`2k %O@?bF$Oߗ,fY kB If.Y2"z=&bԑt:5KK`ZWZPZE8 i54EGi4 +$5AhH$HLaHՄyWXX=Ƃpk|a$ՕH_lLyle 1~w}G2xϑ爛7}s2351%G7_&"ϻ0%ڹn=TX(o aRFgGzW[#-V7Wsh%5+WKlG\͡ȄׇW;}fF[d5FXP^=gb) D=1Q!>Ke)Rw:̲%s޽HO p'c` +:CrzfԜgoo5sLV!H8j<=Ͱ3Qa3E氹zeeY8%CuP[b+*QAse*` ֙Q~^ m;}l;!vj_zyP7𠷆3,#qw4*?ἲ傮*^awDqW+NIbS)ؕMrj;uY>YQk5O6wL6MqZ +Z_NCES|-tok j/o{2=tz`ʊ֚LK}Tva-˶[2Q%"gD*c->7f*/^C/·j]y)_ +Gy3?i.?m}jze·bL;>\I:T[g]8$ji\8 % #'Y8)N| N$9 A*~dc.;Vr\8䈵Nr;'upЅJ9?V|` ث=N>h-%LՇ,廎XwrZKw-ݹٞ&*?KTٶ;C#bgZjx'N!: @Ex`$0 -`6nguM2*wpw!P[16Ei00xzi?~MT<O}wPp7?GqNY F@$c"\8=kp$RӘ݀s\?%v] P#J + +E9ǁK6$`C('.9|W0v>^YftTq~Cws垟aL.'K۰+nOl﹙qaN{c$Ξp\,=Qj$WWҥ&`GSփ]:%@q;/9U_d[fJ<9d)Ǿ9+'5p"~Ԕ6cp:`Xݣ0Pj0 -1y^<r^20-=\&p_'Xjy._Zgj^"o'֞!#x3Їgށ tFP 4*@i@Hu0A`$q@rqɩTF(L@l > pHSÀ;q{2kBQpoFg,u~}"p> >j)֐" b"51+k#M؎!KMĶ->Df"v[ u Elߤi>vomŮ>ݨٺA=Ħ:EE;'H6*lX'~H#v>^YZ'8fF5>h(̪H(-QBmJ"p07E+ L2—2=!*3v!A4Y\@- &ğ[<#5g}iEwv>"唏7-|<)')Ar$N(;RzؓБP=)QQ)yj&PFwCh'!o)Ic)逐w 4P@1B,B,9C( +#p+nF'7=aFD=g{4skLKߛutgl50Ch T_j>&[ny -4̫&F[cs3&ps7e| ZQϜ4hk7=jMFzl<Hem00#1{<Ө>@gGV3i͇ + 9E/2ͅ, (R) (+D嗆 +N[ U/5+PU{m 5of喠5mcۡQ^W {=5dnx5uy{vUQD6U[\3s:ŵں"pPu3UYYHP$T$ ks}K»ȠӞSs~~{ݼrsyG6VYc6krjmmb-+yZ$뀌֦NK#繠\?mi6׹X=}^3X\VZl2N O UN ָ^Կ\04 wBvta{iFţ&::u>OO5E#y.tvTq M[9]*tˑV=-ߏ RN9<'Jtz9hrZBN%!SI?NH8~2cR:ZJ8"[?ᰄC~|vvЏ|hR?K'c{9v{;:;sF2z/Fjwġ@cΊ kP)@ZT*,f@ɀ0Zʕ-:JOC.$W4^տo*@(_(B̏H9P D@SoXN(9 +Ỉˀc @<'6As2eoEM]2nk<n^n!t|϶p|,̝~>n@Ep|+;9d_R~~};`f~XAǿmz./Cْޫ'˔5a6rY&LKQ~h}^b{c)cgn&!zz~ǻ#=w3ya1"j f1r&Q̄)waJGgƒ?p~X0=<*rXacT-)XOOKZ٥aNݥVe^Õ7^T̺ +ڮ PGxcuzy.xq zz24! c3^sAkh?9 NhD0ZekgU qw[ʩM k\;5h~<5W95[zQ;{KsT2 +/ۍ+SEQ/h1J: ֹբڥ<=)1 [GU+uq0)O 7X.@9JGwGrՕ@ZpPMQ D.-lxdZ(GlJ~seJR#ϔ"N8sJ=U&/(O-SJ=Yġ}s0iy[O +O䦜9iŁԊ})';{sLЀx<8gI4\%-Cb |I M%.A \N8b +E.~qaSņ̙.:D,2 D#]B_D0 }a~L G"E (pIp T z#P,#E^/'fAnp$gQ"nha>3[qu $y 3q,I$+'%m!?AnXJYO}ɇܸD]'W'sU:rZ&juH2˗h1k9sw 0"1`YDPQ?MA~$_~>q_ L*acqRe6@ xGksk)-z=+ꅞC}W^\mL4 B_$_{АlfO`VO`nUWzY0*t׿vIeM.cNI d{Y#z(k{Y=޸I{ӎPg.uun9qki虠rċOo?FZ{ZwnUFE5OjC֪V{N# +N%Qo(.ȑ֛2{ x}tVhBGR~51E*k8oWuPE|+<jQ/4x_E}jr.yzcohvʚA=vإaL[5|a[U;rJS*iCd ԋvSvS2$u՛m͛k?O%=Ok?N:#@jzc"բC켢f\8#*`%Dxx^al Z;YFYn=oԇt5+Sz1:z̪=rNVr=ˉP˴N +jd-R#ZL,"ղ.VĢ".- W-c5&2Ա!*^D0k*`B,$X^"?%fs,G鐯7C|Jۓxy$!=iYtGỲjbn 鮧etlMLS`Z04&*PU X jU1҆U*y|0 d0C3P   \E:$hTuGˇ{5^v0rۗn;/W[:_wkoԌݿztO\hWSWϝ +sD3T$yz>&7O&͏xzQqƞƟ:gg߱h^&87߅1~Ç7(kfߘ?vÓFر>jTN_R@"*W ;97^nA7^>ŷ~%2WpxB,?"c;}k[̻PMMokNmU]oN}UŮ~mՆ{&u :j&vN>z0yyy/S]HwT7ygzy-@W]ߝ|RkHKCf܈bwNSB1sMxģhq4*=\8f;cզQsu?^VhKEH){a>'(;+z8iNš\9.qҁ,͜2-#ˁLRtdJ4qpswXr+]8 H~sȂn)$s:$#s`wxHc~Kcž1} ;;ݕ5Ѷ+uiס/}6ټqs / %u @)pcJ Z+P _rN/UP5~iI j i!p9Bce'y*x:52 fтNF wрFIsU `Ct"l0QU*L,$TjxsYQ@)*r*s$Vs ]cr8$I 8TzW2 @\.eI!H"|sCREhXaa(Gxxp#<>G+aIj[D;}A(Mz0Xؗ:" QrQj +ZL^O,qK3LvY|¬6CFl-rY1˲hf2YaV2똜gfp +`rf&f Qf|[W^w @aY #U /dBLT2(?RKSZns>-H5(̟WH}J1(%R + $9:Ϩ&9QK$|JfkU͉@:8 Uc՜\|Ư(#F&CDX,SZM,Y<½`^!)lVnZ C6 @NjQ + +d,fTb@lI0'g`IQeӪ99RHИNR" Cj4'hp/u!>qC{]ؓnz=1SOc.w7 AÒݍd=^ﺃUtߕ{VU?Twnw=Cj:Ew$ 5Hc rv֎tIWvTWN *&ߚh::*':aDWk=H[Ӷ+N<>w귋 -wcΚڣ.tj$9r[RK\鰳H\[hK%\+jR(j)J_eC=r5]WKG5_>jf@}鞁 +%rES{}C\>Tq^w琺;(R.rۇ/ls#غe-^6ɏ*>3̓uaS?{YCC>E>sb (7XidKh@{+sUmh\a~G}yko[{oGn{r#򊨍+g- =z& FdEዖa)z7t.F/H1=b:X@@o>+AM0{8ltp`uV ؽ-+p\*у8ppt#\H>^ug(ƩdDt]Nuw +ǶrxʶA[};ōP(Jb.-B[>ŧCnU]8WZw̭]BS/Ev}s"u% +- ;S{\' PNy;u(tIњ}3n(mk~f8"rQ"0 I@hz,u{z Q4 Hh4a,&D`D%Kb8`-2DžLa ̰( (;fXvi b:Zy@P$F`=ca8iXN{DK2=б"zМ#(څa/fI,Ixh?XxqBI(: ~}Ee~:Uh +(*b# 9FQt cB YuϮ8c,AQ2uf}5zXw{?t{}}9gC-_M'R2^tFNK60ӵ52;QZ33XMɅpA 2#@ɂ9L +/Qka)?כKYX!q,eb4iYkrfKxFQO+z +ӑ^JhDiHÐ5M54iҨԜT|*`T,f #'"(J5yNA|f阎阎 Dp'a9P!֎tF>^`~'yFqS3w3?OonsӚn7q?_}^ᆭ`C͙Pu٠Z |jIRI\ZQ2,ġ]$W4Ԅ)jUS٭ⴽc}Xbk7/i[`kvd@}q H.SryBNʲ\[I +ขc.ͱ7;4Tԅ#mO _A +r䲇&9Az!gp.:}Sׅ=[=%wVӅ=I{MA [wfA[]ne2E;=ETn1Puf˶wh}涑0gz!wbc뎟>43i32̟vwi1e'1$“4'YDGqZh5*,V1@fh< %U{2@óp00ąxNiB' \\} pWr(\>(.<\< $r!u>w! \0\98w( qes6ep+gp:[Yh{%t?ɺq`3-Cu["[K)9"g:Kra]'K=~5Qâ|̫䲮}m\y\担9N\&y0w_;x^raE{3W$a pi8!3KT- |iY9*H@Yg%3!p!yY"Wd"0 )c gLC}h:#X& 9r*Xf@ÙHQQ-PS %Nb8{BA ri_KR@,IH "T&C%ɵKԔh*55NJ +)F&-&lJMש !=AOg$Ⱥ$B-=NKj`aٔ83k0iq^LjYQJIJ`qjIKHbgAb5Ljމ[ePuŕ9=W !}+ٸA7r(pŕ]&jP9T`@Qnf@fڿf_3,ejogꮚz$% XFĺU;YG֤KYĪ$="5QG"R8ϒqzY :G%u.CqQZYH.IEjv f "| 5/4qb TRA _|UK U_|J&!/j +27 +GѸ +JW,e5)7`)YF=)[ N#X--"y:J% +רIL!&0FMҐFf lǨT<>hV9<'#vBIqA*@LiJl/Mjɛ2,toFuZʹ]{9ϛzdzy~}r&{|>^?U4؇t{ᄑz=al=Tg{ś&a~ {ܻ=rBwE/|/jtKtQy3T'/-jU+;9MU_u6C-sc6NP敥seGyA` X ^zvU{s㹥  w C#ߎFЋ^~?yo &n mФhvδ==5 ?z4`sP<2(x(jwht :!`L@3ﱨig} f^ݹѾ;:ދ޺}s soFۆ=_oTLv6WzZǻ۪&, ++a)gMuޗh5Mu:6lܳ+v7H-nJܑwj/P:}W⎨ޮR>o]dTW]S?oZ?*yJe(VpF]"[(qR ISpl⡳|sUp\qT*۶@lYYΎh;"m/aAd_>_){h+h=2vK.KN,'CﳶrTc3宩;ǚvgڞrs@O@ /0w'U@UoJ * +j040*`inIhU4tߦ+z5bk:DheKXoύS=ݡ(\ ߔ +`@m).+nfpSQ+'pNJ! nHPSpKO΃c.IC'0A<'UsUmW[XdA鬃}.|K LA7%LeZ8PAr?H\/ e ;x8/1x"EcWt~+xS7/,O_`pz 4:-. 0.e> r1#U<50VavxOGW?u y~H.8_Ca58@ gG'U@3`xRF|@lE|)OxX%-+>Fa#Xlue`͕O7N܈-Qm`QuYֲ5z65l!]#~AֺU֦,nM^VZJK1 V'Ug$"IO&%)z%ǒ=/)'bu9 sLٕx(tYQajٚTdƥp(,D-+4!~}EqNݙ,ҫQ΋O4XsgG"ɥ\LD) KS/?sfY =w||>;ϔ7B;m1$:s ZDOɅr$&JIB4.*$[5@+ pkq ~Lb̾K0_&|PkbI#J0ЪmrINOKn~%EߜI yMw} J^!= Ȑ=Ѩ+Wv?T˽`TtˡS[QcCbFȩ'<3&z^=q{3Q-k%7>_1PAYr8@}i/Nɥ'9 /{6P.S} yAQÃr8{Oa{<u.sr`;<خMi}=vy9^-{GnAIgV}f_D',AX +mY04p< 4eX02,,s4^a;cQ_1Zz֌ z0Xqd8{ B6\rHts94j 4p#G_ByWY(E9<J\De1PI;0 +:%7!rp՝JOJI3)A FR_1bZ.;OQ4à@@Q* C(kTx (/Rw{I9A?xOyQ&./\/uP)qWjKҮ+y;/N1юKg1.a\ m[Ingr2?s9rLtҜۯBs`*NK9Osl_o뒈EFsRF@ҹTزXHI(IRK@B*0>A X0?|cg^sA)BTeh+Xb:'X870Z`4V0sw<2O9H~HrJjĒԬH%!\'Bsr?8h +$,C MSO"thB( +AxР 8zE/~  QQDr%'kMfzj#y/#z?uf'#Y+(1rOlZ]ٴTml6 +fJ&ynJ#nȤiUT\fYԤ^-_݇ %eMhL^P?!xA-J0rQ3I 8\|cut"SY$qji=&nnsbcx6y)AbxUё='B;m1$:s ZDOɅr.$JIB4.*$[5@+ pkq ~Lb̾K0_&|PkbI#J0Ъmrد(<࿾a8PahnLMic9{iy;v_Z )QZ nO04 ,C@O` t)`8Z:p'Zrv:74)"-EX@.0J+<'"u[|!3eٱPQեp7T\8 Pu + 8@e>WߔPjVu wjP=ߢ*c4&q +UhE}(~нsHPHDaCkL<h_MlZ@|HNiܵ= vn͗ڱMO}U'-z{:Zf%}m2ȼ6m}WOm[ߣl׹1ȼN/iu:w Ԇ]~^Ѻպ90P+z-GkS<[UzZYy+IY%yi%eGI%'He|2KRK+iȤr+P&Wv6ˑDteq*D#4V=MN&$&SɒK9Kd!ʅr$·Dx+ fpI_Qh+ dX@ GH/#+CzSnhNj•xH R)㭧q/Ƞ%kRZ-!2j )и JM8Zsr f8YƉeP -C톒C>'jnXbtHL)0N߻JFQ'~J4onLꟂ&Asᄾ9 +ڊmd)=3nSj{gL߇噾 Fyoh 6qo7 }3>nʇ[\1īn{Q39V;hV74k,Zڀ~ac)0wwW/`=}U O@`rq`jq1o7[8W8[88PKhPٳڊlcC}L[]P;ј7 a쐕k5p[R7rfjԘ[TۓmTaYF^%\UJ˕5Q Te1;ùr0mUSW٩S9X4/[F 22f-i9݆4bFȸ%b,R Fe$9( _aM6]q^9sƧg8i)'m82vzQO2p ;esGHoC ľ4JvrָS Ǟ=?1QwbȩMܿ7~ZP(I / +4bh) +94r4T cY30 eww{VIJBEZ J8%BJ + !W''UHH nD(}[J<з,*PQB%*fѝ*bЭt +/#5 +ШJIT@W }%-C]2+DH($R- y7\0? tD2@ד@a׷Ȋ}s®/ + +^y$CIE<΁s/jXȧ;0 O( =姊}^"vN~*vN%.9z;ϖd,$ׁl[Y$gJK(2e}v==903)VN"_W˃vѢ גn'#)v'7Xu%l `-2 "}bBH $,xlA V`N@ =1/WAl#>(@80@l il}2I/shs(֝9υ9ab9 \>2bH|G{u=:Yw;q=vi$>,w;R=:ڽC :z;βvn.~owjڱűwb4G[%h%F9[$5/Ejl٬hMZJlF3qF /jKTNT$d{6M0N*PulMl}ʮPn-'+$BT˶.ㅬa#X)8kX^҂e~J _+ޜ+YQ.`HoN䦔tpc$]i+ Br\uNGI:3P51P '5S/w"y*'TS;'O Q'%r `JZHP XpP6 +kZXB B3ACffnD#F1 hG"6{/aRCVdq0D0vi%{Y yomEX7qz|%f +3J ?b.ddg f]^w/cGpWp/è <2c?gOrAEt;XP;^Oڰگ'@1 +ͅxk+h+2Oq^AOY1}o3ɜKAQT=z(vC,vZj+hp +9 Bw?7o&1K[}}=2oμ35C΄ C͘~[w4zr +"U-Ȥ#W1mSWS'HѮ44y-N H ; X'[_;c 33z`1굘^f0hm澇؀ +ꭲ U̽ZPdkPfmhn(h*lSb+v6!%z̪ +ٵ-owhy\dpкx$rp. +^Sꂵݣ֪bKX]sXkYyŹ#OQ" Y"_iӗ8+"ϋ3"rSYdⴈSb2N'g)"C l{qL1˓"qċgqX_6Lħb8E^ߋ}ȑFÖƽ"85qxf7{thOGҧ??^vhak힓M{?< i$%"HZJIT$4 8,0CmjRT6?Qx[SHI`>X  (%=/A,e@Mi`yc?8 [ O/5 +(<נ/l7XzI5؆ʫA$WCA 17.r$e8qG$N_ɹ*A"p1p` 3$`P1( PRp@aoXzeiC7r[;x!g_e v;XQn\+mlW^@TeP9ky {+ +OC'N (K>Rp:LƦ͋SjԫcjU{'[Bā`x&/kbAhb42FThQP4K_n4G (>/Bb#0 +"C@`x0 2p*``h@p_E{ǰ@r*mj#]6Z֐H=ŽqH0om>4!P}J' e % +R @h)6IClZHlBn vP;P])rj6JRѻi)'>XZޝ"w}$cvp۵MSԴV[4}Rm߬H>ԈJ٨RPvdj6W }>|_-j{9PUZN5ꃵjQQy^wVZ%֮V IT#;WVW**Ur8)A%xeUL\. x9 +fOVB+`?1 KeB`kDru.y.D-aɸhٜFqH)&ʳHQs cPƁp) +a‚7@H+ȹahi0O ZCb|5fW )૦ %J$E\)R prkK1r2R ˑ|f 9ñ2,`8hf܃bhh7+,!!V[H0B,B,ğ:p8-&~IP{ ^2Ϳտe`laZzi\)v^lųQf ުi}7y6EF{4JGxT}xOd +u랟od.^k`kWkdǻ}0t&vQջi; û[`ǻ_hiG~\4{UGۑG%ZqVS6҆^E[=kBׄ\~{5^ykAʇ[[ +;mPǵau}zg!uz3`֙~h3CЏs FYX1VdtjS3jd3՛]3ũai5صA:ctuk{ u=YvWxF 53F WaCUjWk3_֚Lupʬe>HW0"5gP1"y% {kX޺简$d  ݻzzg]n |WutK]|lhPRnw1;:En:*h(muȴ=فGLvF䞬!w?DSZ +)qUbV-|+oSl*7Shk*+i&0)(UPY? R(˱KRPE' 'lMv|y^1q^Sp9jMG␂~^/~5z[;dد`{TǏ 䠭〽a>~;mypi7 ;2_ed:ʰ} ۾xt{}@#(`d8@15Ee oCp040 +t65%}!H 9e2hxM)x)i*F t9-488H%ahI",`JSb)W`ນ7L$quX .E4ZER"_:`|w\(8"ܧr1?O &Qq `Qa,CcLGqPq~1Y8sY00y7ͼ&ȼfsܯ+ |Y*'q-ɼdsTbUsNeS gsv],9q1Ĕ)|~.28&?h /x#ÂyR-Rmi M捑QTzZ5u%5ںIKy4-aδz&#QKoݠ7izf--\ԼV%6Jl])e]Ri$65RWTE6/Wd$6K[%vNjEf^e@DhRV,+ZXײ>YU4YC-MK,YX@/GJ$kE 4y"$)"%'jIOԐ J%'&<( S4s'HR)bT>͆bgqbfhx1(ߢ#9"ܢ"X!"3nhF+HL $BX`NFPHf% M)\!a  % zQbML i4ZC4jRS"1N99g8 r4˸ ユiFCK4EPb(H/APLTLT7&]] `źw/upCs'Csi¯⯃$7E2;)1h&koGw?MO29կՓ>o;py^=svNhG?*W,b c]h#=a ɓ̏C'ˊ==y묳;v럡ۂJmȏ;k%T%.!wmm5s#F, +/-uP᳗FGP k ryk+db_y<:넺']o[{Y{>AC޳A7C!4緆Z?彄F m-)lE^U ݹzW3,HmK@ߥIQis@}uAg÷]}oz!Ozjƺ{B}}{kxjƇz +xU{LJk=jZ]7ԟsX*#fA!evZuH٨VloCXAgv"enྛi'knw)uU JmlevK%_WI<9EY֌DQYVװ{=wH (dQaf{kqwއoQߪꡇ|9N#!ɶ5A&_1CFcIq$cAa m3A$c#fV͜ #>^w{K,{S|y_}s|ʄ95i@f9}UoZ2_3xq^T*ah`PIORAF)4_MC*rl(sNcE0l8PR^3jU@EYt7P 3$bw@cu +e9ip\/fͳ ]N[H!/BWb.qc]- 8q +wXor:I p ƺ$Uf;]Tfc>#< \"3~˳p6%YJP=/vE>;rnWLKUօӒGnRIK\;ϗ+=/\kpgO%\*>r|~+No-:`s1xC$v , +#@E|~1 Ua7*"?:Zd(oodM0x/Z6ɴwQ?oA d&_cpppp$| h?GhD#4N +d) ڮq +8p\zt\gs>  `B`Nuh0$N㜟7f%8`ƴ4_ +uQZbzy`/oM4 47H2PbuޝZ]z*qJwh>Tg*jv{T;qsv]hF/(=[ jؽm6HBOŢ̳ٱI'bؾQ/uЖ: jz/>}i^Ƶ`6KZZ1[6ZC YXR/F +DkVj>MYE(U:/fevZr rPR(嬀"8) EF$- WJ-^/PJZ #BU- 9hA'/(A&_SypTBG2FҠ#np/6Cnd I|$Q_"_͌$dMHqǥ5NI6'd?hO}h)и9)}܀@q޻k ^F\Vc?ح(<gCA@A<>o\F" nt5C7"x 7 +d?g{{&o}޷jxTGq# 7@`{,f/HIJ+cAF4}osbFQ8߷a +9p DXg88sSAv$ghə<$sYS ˓9Nj<~~Pp"0JחA@^/jȱ='y7@n +d7Jp? x\;0'$jŒ-Jsն~s,O=xdȆ 9[.%6]*t$xXǹn¦ GJ5#"Sǁ=i XGRO%jg"dJ̐!c$ad Q !1a` sX|6 ϫia8~9낊ܩ}bZʤ]h: rp43WFGq|?%S(Vk 6BCSURuh}Z.-M_beW/֥r܆5|ƪP~`Ú C`v}znU6Md,k>݆p ZkLh +\_)UV2$-˼iZbcV.H_bM#}-J[`eHVYk,/i,gX<_k* +jYYPe%ڲ;X(~!+wce~)8o[*7|{7 p-\WrV䮿Y[w ]W_~8W{98>QtWW|#ߏ8gY:wsX!?<j{5rV{Ve=uS7g:GkYjY~8Ov#SMo;lձŏͪg#ؠԳnƦL,c*c*3ϝ%[O|KT'Ytkm1 ``xpGE q`6 C4f 6XY7IJ+cAF4}adiZ.pd6f_+, UH@QTcd`\̎Ψt8IwƬ i HQ߳B7UE5=zv{w{ުߩ0΂ rY bvTRJ2uPEClA 42p(K"Cm~͗d)R1K&ZY0Ug3@Τi 8Mr*x'S&'WtͧNPʡxh_+$4ĩd +pyI,"m iYK.;*OvUgXdSB)ddnȷVg|>''XڧYi[ˎ"[.q2*ly;r{JrUv4߶єu6޸2wLgqC/EQ. #e\KpIfKl(f"x>s{Nc` +1P +Q @_0XLX 0 hR#r:܉a 98!81"=!01J` CW¬4:p%w+ ^"<8XXBl7[ E'|iƛ ::aF D'7R L"/-kFi iY֛/DZ/KfgfR3=)ukLSZڨ`bIr2ʭ4S0ZܨZ3S?6Z̨ZZъ%FU勌}Рj=lIfB̒8q .&Y8HJ-8 b ɸ9r f#wG߇7<н񎩽}ç=Iyd(^yq0U3Ff/y60p +!<@ǎ>< uhz_m+4ǎ?碌\]u 1ʹ*?h,j>1z[4ȫ*lT |R՞ya}aGDۛ8>knFZJ-ȃgGH䢠ҀS{'%cS?y r> dAi^m漼y7{xwz^WԿԽ4\4w Z{w]5ǝoںi<3yw=@-^ @g7:~4V[uh`H[mֺ +5{ +Ղz^+nT p +G8w,R)ujTq7~-ݒ C_uk# -򇚯rkZf7]?ale 5q7rդO8Q4$n ˍLTp- eu#Ãt7K%OFj9)$ypPnWƃ=اt`׃wQ.vCaۤ۶Q٪fǨ`Hm^Gm"%M<8!!NMatmNK[ch ,I:M_A\e0-=NVF+rjFO7=AhiBOb2Z +(g:Kc"p5<π |iXʌ`,$@  2`*k"4TzCQ-|P<.Pp)Wg(VJPL#?W#KY6Yd+;٤08X1Ug3@07tLtcJ)W *5h?G@a*}1wdl|!_̒Ldeq֪*AYԺ#kD@+h>V A-TEvQB{ޝ%a& ={ΙL>p' AlIVn`1L,}2ړƴ+F3֔UjJ6\bH-ˁ,}UQގI +I(oSRMIގ}uIVr9~̔Œnj+ '%X&w_ +V5`6.ϡexQf)1h6.&|r7EE]tF{F%@gtn@& +>eb;Q" `%Fp:x8#B|N8A]A4f 0 !3 +y0 +d| S39GB32 H'PH ]8Tf2+ 4i[0#ߞœ OTDU뷉%)FhJ\E7+jضoi*ZMji60.7čjT6(e +wfzƶKS T*96j ~ח5.nڕ ++.Yz[piR9q2lecRXsqrlYlF.>Z>(I"ب1246+.0)3PD8"Kg [X$XT(D +y '(~b@_1"|_oH'ъ8uK̡$!Ͻg>wIa=Cċ9?P<#tqj;k&yrc) e;9qzP>L/n'=5z=b4}kyL:jfT. AU47/(OϪ_SCЋ+-ݤk,=P/AK?UoA냭77^RBO4c@]@+i–7SM>2Aj5?$=53Z'!K__z)O{mxS?Ez}T[?s}o]w)uuoLqPT@g:v4m}V>Fis6 leFRhG!T?R6_{=t!T?汶Y1:qd~Xn*]jmkiI':n^7 ?)3$却̣ą<(C!69V^qą6gA\>y^>#݅9HqaQMiJڔwF&=w5%횠5%o- mqK\Ԅ0(u9Р" xP >?M +Os +?6rHBh%$r!Pa` &8 Pb@"BȁX(P-6Ҁ=!sPy\ +.b5b6bp*3Jb\< &rɈP*kx7f95_gse ,`w*_QәSPEB(pM=AE=Ga?Ň` kȘ> ̻k(iWNiWM MjM3&RSeOʥޫyp&;BQ k5'a-k9;K.W@)Us\}I]6-S{X cw\0] F<#w|E4Nt4-+:=ܣ&җ++ 𭽪whVieEpO\$T@ɠlj׌ƙ9NEE.@0;sF=pݺuU/ޫ' PG 09Q3lQx&? f=p 7 @2s&qmei)N0a&u6>$5='7O gu`x0rxo|Ă@ g8GljkOrn rv4M.Jғ)| ~TzjNK2}d_&#faYl\g֨8H2֚I_cb6֘$uEĦuSIYiU[eV[飒QUYڏ-j+,'kVXZfraQYԬ2>0+>0kZĤYS05-]dҬ)} L72K晼ZdԴ(,gVYdRY0Y?Zi̼9qfhyxd Yjql=f8-1:dPw+.JUl( +E4Ep݄EN$a= Tj6ADBxI4n5قy NeZ A%8W +\pcY*1Y9?5+˸`IB>*YkfIb5kJF* @K c\DgAGxf8 xH, Ǫ,ú`ĠUS$b*b*~A8Я _H"Y̌x0H1&X~ +7Lߞƛ5m3M?ĽW}#tF#iP2mm3W^p#-l {=jUҍz&Qޅ^6M0(Dex4mR^4N`Gcx( 6H^4t2/Hxܼ+}?XsؠJ@_UkЏN?w4~v^kJn5n9.k(CwJz%%'{+=ozEثQӃ3uu~y}BS$Pz|Q3{S{+jsjsC=K =EϮ@SUqOC{J%j*EwԊJ% B2P[.*-VGT8PݸS0PW}mܸt|bJn(\/h^訿YW_0p=k9ٽD$ +81 AWn䉲npċ\ 9ndwԌ:5d) jz{-ڭ]n|^|a}=jnlװً͋MU6~R+jNGUƎ~c-cwoUӷToJeN7\@weF~{e׍ɟ[Y$` zp'hBt` gbizb=36m3P&+#HF#E&8:Ѭhy$,%$48NZx]3G<@l(@ +;Nt.8p>b 3YStsGY8{B$"8#;MI`>t6(k?D|s5~LBr8pr?h >sjLQ8>KAn + +Da-KEd9rv_*b({Œ-,&Gi9[.dk|a< kp|.:yXr({ٯO>q&/sۅcEY[v\@YF߂(XMϏB"i27l8S0c9XmY2oMDžA`|8ņtX#m`j֬R@B:Ѭ1I P4 hiX'o9|F񄣦O,IMy c$,` \9iUq #pg?QȒQC5+i뒨*#%J]o!ُIKGVVi?9-EUXU Q*A@#ift (+ +`&')*%(QU^[=.θg{;{oUݯ6&;J6*ּ(+{GfKH4I%1yZM6ġL-y +HhB$oQxڙu_E3/1dL,0X3%ޛ?pM;zg^է)y0#sES;lWY^u̝g@k5a?}/6;"S?噗v⩧DO^Я


 C#McиlNUe`:kU7*~W?)x+yWZP+i5Լ4HZ so'=EmgߴF78ƃz׎⠢'V$8&V%ZJPE`..ࢋCy;(a/p.5l.WK}(`n~;)/T +;*_*ɶ,*P(S*-v@맏d_+>Sq(KEig\>ׇv]>yd3Vgssp0׊`'2 + &G?Gg eKa.,fNc? K|dEp }'`91j3$N0qr hhPZ!AF聄L8#9>g}<+&4F!H'Q|xא>x& 4a6lZl%->DN-ݛIu'6Ȍ=YGl[S tޞR9&;e2 Lҙ)dIFIO$iF23$&ͩN e#O)M$DY%ohAzSIxJ)q-Ԧ5!6AgQyj*N8V55+9UjNiu ҪhVU +#ź2Ҩ*6@FqHo+$ xM!gٸ"b3 EALyݹIA (E=W ]Cό޻{W=Uksz:-I7/`_ %@)IqzQR8K9ZK%Lש &v֩H.8 EC9*2Dxa(< v.$r! N!cUb|y1{vX/4C><`0pU(͍&L& +nd7ʤTkJz=VGt6v}-)(h)YFeEb0 2; +A0j Bb)b)CcC + FC u:fp'6 /1o?Ej"?ⵘ WP^,h?֙2Gnu?wIwLW0WW{ x%;^#G&:#6M*y#~⡷DO d7|grb0oDg'Zn!jA9kfɈT!,mCnm^U_iEj.J]zz}R|5ʚ[kO[Zrpk೧vϟAP痒Xo,=P﯃~PA 4=cwEϠhǁ1h\6qkhFrejIyMrOr9R'i5N#-VW7]ftGO ]5swvߙyIm`wigpWpw/p_ T߸4X[6TeY[ݥJGXD+ŕY-^XS ra)h7Ϲ+iN@-oR$h̹qm; +[ +7nZ[+KF[~B}x[SmΌ5_8p`FZKjE<3Zɱ@+p@xGxa 4`i4p' n@f`}";pbz6Azf\+*T~FrH HkUW ?, 68t8Ӏ Dh\pb.%ArBwo.ʊ~)Ly/`ypg%jv}zt*./.qyl/ +CgNۿme4}2`L 'R€GZN '|`\Wŀ˨pڜDxonWrwb'NΜ* A"``/` , 9 +ZL>|hAsw8<`o)bcxz-3,MB7rH9q>_"hh9V1#O~~dZB4S}uQhʠF޶كWs? W]1p {AnzOMiMSdDb\E쮸xU/Ϊ#<~8.{Qu(Ʈz\;Y}AuTb7:^Y{>^u;^Uz|RUz\QTv:{1Qq\qy~Vm[U=]kU-UMDkE3iEx|{rюt ܜ?4w!.+rg-h*%7=T҃zVtVЭԣܫhtDXDxoV>z_]ÍauZ?j-'uO nB<.Ѯ܎;\s>^U~HX-y(U\yX+qD +svU\ѺkruRUU0 *WT~uU_qVdwV\WT_U~)HfGa,SWl?i.߾Aka{tdm$,ۇ ?vةk}--~|Yهulcilyl69YƇ~ұҏjuI׳yc' !kl輳Tm$m}gq嫻Wp!w8=pq߳xrv#0" 0(eFy,LO1#^:n axVAK 10,YDQfhCsݍ[(dDסCJ`\lرX{V@ pjw(8/ox&yu;Lmu*$ZÍ%w1C:_@vtC| #ېd9o14ʃ9Ebraۣ[oPunրke:;!j^kd[vUgF{d<}0+Yx|.w3fll^|Y 8iÄN¦O3&I1 lj,>m,48A@\ND6`J4Q#a 4 >BиH2!8Ǝ`` w[ ( + )8љгσ0w0YH@{X ,r{pᑆ!}j? $r#%=#e& }?3<c~+I&n" \j%+pY/ S- Ќ +,/|X)0-",+ )va4Eq[hJK1{-z(va|\:/otHKV`!$< Dj씔Ol+Me\SBtG-8wUׇ3-5o5{Et_Yt͜j3Xz?ɬkd1JdLK6 &^JxMyEZ:7<'5(A۔M+ZCk[0gm@zO qDlhe{O^#{ek P,H` h)/iU;=2T U n]nׇx߾jlJo 5@oBZm^"P]^4wC=O z`o2 @l]07^p岾:IdE_YSe_$שN0kqj{{*VA{w癣|dt)~t=y2U,Muj_58n߹b*jo*j2JhMW +gz^P^hE +l.bV^yXy'zXc%] NeT/֦|=oʼnm rGjBG%K಄K2.3K߉傄2ΉrNrrĎYxgde)$;j{ ee)G=J%ľy}GkCd|ye)% S젽6&CC#΃Vd>7Gk Ul}vhؾon.[EZu$@p:tjf#1()h̀GO5߫Y7Ssxf5c~iwcPl$s.Xt\PĨ}H4}8'I܋%BDZDhpL5-I+Ȕ825%Cv{#i^ ͈dhUOgbv23ɗܱLflRݩTVo*#ً޹L'flOϮ o1 +L/:m6{Fj%Lb؀m 4H&# 3&s$n&ڲD ^3dg&J,SM nL/163>1Q}lZD(i]ArM5F>^mvZG+tTJ#f +fuQYZgr-+HNyB_6+.VG/%,yYrh'%6F0Ki1RkbKj09LLFB(: 5,:C3"”/0a,.y Y$4q!DcI!,&8 0,&s5˛|iV{)I^&Rm6SDb4a6PLzRrMLWct:?Vynuh)! NCYf!XȉeMӌ{P !ivCAʄԚ8P11͡rR )M~QÌPiQj?c̐/bJ6T_(ߑ^ akbŸ!M_b]D/CPC^.R]ts߻3N2|9!g+5( 3=y%IXA& 1ܪ"A $(*^UAd03 HAB9^Ot=3V-_կ{.qͧ:GG3ds(uE)w83a`Ҍ*nCw8w fWνsV}fFj9m:QU_b5" NePpqԌT@-1Sh{;dd2f4CUNV =s}ԋs,?Xȍ!6dkB;Nm$qz0؆p嚁V`+ˆ'/FHũ6iiw2B&a108W?<뭛{4XX}5١:FzjgG{Ύ<{:T`]ͅ 4lfP*r>1Rnʆ-Ep,v΋B g(e)g_wڋS^˲NR$eZ)'Ǐ[rndK"/}1W>"-=uGڟ;t؍xY! 8 {7Yl!a?^Cv7xYn vrfH9`mvwR`? O8 ɩS3ɻM&we>,@- +Tq @(q0ƕ2 IG,M \k9}\EIQ*j3wME +rj[G׃5,7|5&. 1! ty8a (*.~sMKN=r}nȈlC1 BD>A <FD9-| h.'`742nHL`rB&PFJ0(qрHپNK4tgOÇ޽]GnӡLkQO/7kxt$2eF f-&FOk$kB:j:Mk55koduI*Iu5$5vΚUU8QJ5:Q5/A3')^U+4$_Rk2NM +8p-aLY sL,ZL(6ZQL#,RQ4!'^Ȩ0PYx(#"Zr>%$HՒ@@pL ((_.X"y2~B|i?J&|$IΧӑ>Zk(I:5)YS  +PH `)(Had\N2f 3\"XlаM iPn!U. + ,B,Bs਀ G߬g(FqZo5}҈E41._ ,{g^Y>X*%$YK$]_AMEeooeGhF ATg>gB3^3-⯽`mMv5Lv0Og3Q@r9Aƺ]NnR0iFnrnM;v3+9>SSd3#6sʪ/RƲqcc8njF*MONk嘩 q2^v2]3QV'i ꆞ]s>bE~zn9M__Mk̚PvEwŵjZq\U (^7=]e + A! a' an?$,(ǞSs>;OށdΛL +C~h^d~5F #UFyΧVkҪgƪfDgmy1ΪpzO-fޭqe0sZ!iiu&;)nTٔ 2k,&b6UM[ӽ:f@W`wPWpMKCl̮of?˶)Ph76XW^Ubo72^'PlC +FBxQV_P5џKVOOE'G['˧ ևy0{0rU _Pe.p7{ e!C [37v,x C(?siN tJ䌓|wNgB8nH!C|9akb渽逇^'s4%v6%%5%pO>DWՁA_6'&D` +9E@&J--|hԪ5$0.(W'<:|IEICSG7rO q1Ierp=eܼp#;Py$D;P~׳aoӠ"_ssCPPϕr FY6\,gI9  ebF]3Hi JgZϠ N,V)I 8Rp- HJO/EitW#wKr9S1+SE9G+R+ +ENKֱYɷ sS(ɂ@gSZusG*:|_=^^wŬc7Ο=Xt&c{]ѻ7h@x7 #g` !$2 p%Ab< Xf__v#݆9_q (T-H1(FWH Q $[۱9߳+?g@B7JT$5MW+D$ѐ¹+Q C_kEy'I߶K|Fd.;"_ԐbA.ϵ"?Ӽ/whOȮ*mj*l6V WnQy4jmRÿ́nTO6D6'*-땜D*rSR@qJ4weB֨[$ׯQXrK\|˺*B(q5_BYxnr8veV&ȽZT)D/,^WB#4VW<*6FJ/ ^.1-ZȈD/E1H (*\*FD1~JEBhBSx:LL "=Px*HCZ- i4H´*+ | )BA.1 MHE3hFPREJ* +yIS"ERH! (;=#q*>ha 73 >QWh!W- */߽>Yއ}gƲdFb^w^w뢘 Sդ)l^2řA+Z6-&<'4ڻ)D|d>юz?a|8xcpg :ۢ1ꈓwXW:o3-a6}ރvCe{'#ƧP%ꊭUͫjkAϊFڢVV]1dj5]6>g]6y-7zAj1jm^"WH uwha/sJw`PQ=)[WmXE˷+].N07ppC2.p N (PʱPģClk;2m.yDŽƄE`fXWe`њPG|eHƒb?NH~Ϣ\"b  dާD/ĹD<1:")B1 +D(!JRp%ڛ:o%BkZ/ UKaDb\B "{db%%"I}CHV^gk5s;=&~nN[ d.f7Zv1ԑ8ݜJGv}E٦qsٹUˢޢAvlӒoȯ6k9}IYm_h9mݨᬹvN6o`6Wb4/kȍ1j7Zi>[saֻjrլhKj;֭blmY EPёޭVE(9EP@*ϔ^E.Wx.ǬSx +s +[&#(JNa +bRB嘥Kdr"8HNZ(x  ȽZ/,$rpϗ,!=P_=GGHzRN#0>ZJאtjN`T*1F"R(X r(J*B*)%JIy AW=!c?r"WJ"(!X]CYϋHG~=_ix?G"? GЊgPpnwD0< T@'5տ/C{eLxݻñuOSϸM{yg^X&?$GO fq N'E&$b^*^K}f7ӯe6o-gl+PSj59ݭZ{HKZø_;fz93w.BN]uFڥntad0*z5ށ3MG +rL@1)h t$zÀ'˂Fy,^$'kb((#T!Y8@%R9$TPKCu sNAY:h&*TʓTʠH.T3$LDeD&!*eV]g?J3H(G± +)cY;:a/v5%i王VV]zN8_~8\Y!$W;g](׊v6>{:VE`+#`N\(̉^!X`\8 +PILȤ˃D)x/]2_$ox 6q866 .`͐r>5,άY''>l4YÜPgA0>#"QMRD4c9FbC9mpdGdhc + drr*91ڞI& `:-i>-ޑ|ä&iAZRz(-޾$G٥n6R-G+y(l2)lh %7MK:–/ 5)lZk+ ++cyaҊbl-3bDb_| ODJHhTZZыP#YUAt +j]Zq)"SѸsBdX :_*$PC.ZP 0?U@?V eDZ#yù4ϛU8=&|o/j'0Ki'A9 OH&M<ʨ'Usrz= +Z)9"=u5$q ɲ4p4hhcF$9 +$M(9!H'APwl11r`lK5L_Iѣ XlǑw_^/b&W w^ֳеPF?H7ƻ߫oB rV;\s#@yScގF_q3i胷cm>YxF {"_5}q:~*v],n;r"WߎXl.}n\vlMPcsdQ\TWUpV`mMA]AshT,~҂.ȵHr%*qԉ#*(˞r؍8&B7 +T;'wpQkiQ"ۍ,'8au)sMƔ 5- v|kiا[7Q׍أb]o:Ӎݡ"ݍ4۝HUCdݖIloE92ڔF⮱-;GQn[JMRHqԸO%#(/Ba`$)QCº&?3*ַߘɪeF_|[jRXȠyw_]b|'|adֲ ׋E+Y0fb#"QiAwL D՜Y<ߠjYӴXOSc)b(AUt$ONc"5tdo0^*^6ќ5Wp +CBy Ϋ`3K 79 J@VaBづM#ML )g4 +4*VNG*hu4B0! M +GOj6GdHoj{^I4ocQ;sf"|h&~[]`H`a^(j%Cv{DiZw8g/Ong8?#l EKZ$ݮ"W˞cʞ7KU6@n:k-9kԻ57J>kjB؏4 wO>?{"]N??݁uylĞ4u!z=F O܍=ql7֋Ǘlvힶ9mN?U?WًM*6Jf=mq"Ïti*RX}$k% +)]6gTƖhnN<ܸ&69cV=נ+7=[SR츲QzÞx, @h=@cȸ# 󻢧}=tq<,GP + pq"%4t` :Ѓ:Qoeq`b"bJ`ŀH K8;h8Vp"Ī;UrբQz[|9#Cy[.y.[`9$VCcz_6mضeCgS7(-2[2OW8\MQzuYQzMe*նU%%' +ן(Tsx뙣?n:ybeD^dÁqn 9qaXNsb$a-ITxR &D5aD͙L͎lVj .̌kb #ք(Qo+# xs\"%ʡ6jLTf$xDED1vcb5 +"( ` kކU}_ƯC>Ā&z5 4pϚ4p\CLzhe06.8gdY~½$a$8ܞp&l6<5!__I83 b+,tđp*/FѮ|;]gfF :l+*p<)50=h$NJe!,+FnJQYJqXS8[e!䭳 F|b-2֘}dY̺V,o-x}ŒYIXh5)8%fU+s59 |YղjMj淲d&jq&7fQZ4f$c>dy& ݬmn\nLf s8R*s6G@c&>G榚ty)M6sSAs f'!L,zMɉ:zM3,93NL5'cdbr:2f+ELb8(ё̴F&*B)2FP'vFf0;-3F)ЄJYHjp)iQ,&R&e22F#.c01@ +I\cHiFG =cu4 4eP -C@IA ZM" 01kL9p Iң}Y8'?ǿzS' +7WI%~w'K^w'j뚥;S@` HGx&Gqw2ڮ-y/ڧ<|7^wai0 ?x7m@> G"YpKb[cm=I_[th᥃C-]:~}/|Ac +tUt툯w]tnV Օͼc[Uͷ;ړ޻S:^p晷w j>'}r_OV zxA~'S^o7z^z=cF޳K~h}/_iDϯ44^kAeMw ޭ./yw1wFxMfU;r6r_Q3ykzghY=A:;݃t_ƫg7Fy^7_2_Q~_Bők87}—!oB(S]z~M{T[a5P]_T"s m!lUآaMO}w)a6" \* + +48o!~.j̙e1R@$`"g Qsaf#)qHLJ<6 ΋(;0ٌכ>b p>'㈎ TIGaI 7n@:F)0A(1J\1)@sgx[ )0g)X xt$W/aud~ܘEn*&s]kV(*0)η1\3bXhN=]`iW.9 <5E9f(!,+FnJQY@ll2VGy,2kC/uDuѝN@TD@O V Ǯ'**8(x[N8r_Q@.Agg_bKߣbo| ̶fm,2[ֱ8DgEfS*I6aa>`9;)f\j*Fn%YaVz9ZcefU՚$'YQ֖'ӂDON%ӒUZkG㉱bi L*!A9q\$sbxDl$DXB\8a&,&\[4fTd"54e4B!(,thTj[@/8PR|Ӥuy~L/)C%C7)3[n!m˂j:)dfBgapU,֤h1t2F3a4< N'1"RO!EP$ダmIB#pBs( 4t@>1llo9? (_rAA[ٿh<Ҭ?/45kc&g៕=1Yc9M h_PIl TߢA4dr8Sp7OT@&g>]kh?K2~˛x,8&~h [: ~ Itɹ#]Jth'Ahg5TS6«-<,U wC a{ⰽj^zeo\~u\د]{Y/xO. S^O!y !z38~|FџۃmNhL`;gj3ZxՃRo4OpMo8 Q۴IN{7N>,zpnvzf뫝{wPO5oWۗO}`rign V߻h[K1|GT8xu- +1=ՊjFjQ5S5ν+uVK<P{Pw::ʌ?*? 3wVk[ #_B0/\@yR5A |8zcDQ`:&3Fq +.Ã=Rzxכ)J$:6 BDbH7}r"&C(0~`Mz0 BRSuYtWm<!!3aΜCڼ +E#vfY"Fg 1m4K7i^^VAnf]b5)2{ھ"m3+IζB,aU"m`e7k[gٲUJRROq  ͼ)Kh SS̸UJ_¬jrF&)̪V%35IOb)#/O, @K%3&4֬-cM0G1TB$r\HF/b"h,V!.0- +3Օm*m[Pc,AEcYDD%EMb{)VDEH À"͞w2ClYs~;s{g9H@$c9C 1,">3 D#"6@Ą8"2XDeP!,̨A4u@ANP`pӺ( /_u^(Njrn'15@8flfBf6A@HY_?qNrW[3W;{kR}zd/wkZ2p`oPOdWjIύG]קk;L^i:;\s봫]ݩp5U4Պ*06MR>&;nQzSxx-IwMEuHCuh Yi#Ęjhuk^s56Qձ+գO/m\4|AWK9Tv`Dߍ8o[GT=WpLQURR#3(P^wstX! gp`jy&~TYKu=ڔёa\wc._tRe-;5v ئZrv4xV[v%[tlVe-Y6`LP Gd3{${~G[M5~;c Yc韏7N|_ʚ5?q4c@ MHfog 'D(`X0&ʊȢ(O,'+f˜L6zfi 1K"ޓ/xcAio 5 V%dp|o48/, A~ ,dC88Sd8 +pv^}YpjpTi t*$${ X&q3y{@i r-+{9p7e玗@Ep,)}e3Ηɼphw'fp(beIօ⬯KrΕo Cϝ(]Wc^)&N- Ax(/#$~)ܙ"ADR AACx%`(@y_^O#a!DПPJDJp@84 bpZ +DјOc +^4|{/ hq3&&3 0BlGFeuR9C훂m} *'Jd ^APXd6]uC+ْn5al^@lZg׵qMr 2fچX)*}ݫ昖>u+>Ć>O[F]iG؁X>O?iZ*^ V}(#o%Ֆ/޳]+⃥Keb woE҅% Y`A[Q)f2u<˴sވs,"ca2\$%,?G{`~$œ  6kJ J %İhP,jdnk㈨ 4E/ eP!,ZBhfLM2`'rӟGN(|F|(B>vRFv;la0d355GB"y\$rβ40eNܚ88Ods܇\ HmZ""Xm"DV}޶}"r5Tr!U3̮9af~;;dP4R,YډihyH (!]øE?u0Yp`p?7r +) ,_ ^X4'_Q$}'͞R/ Az;k7n=p53߆jrD?4# wD Jw:Ӻ?2a+)q%?.7dz αz v3r-8)4ό?fQG+ߎڌ~]=nkCo@7E6Rt뤵 +]bUXZRZNt|X06@sOZZㅧmнOxE~x3AP%AƇȿ]P}^^zsJ_3GYخC4x܂5wUuV]'O;o>n׌i:;PS]ni;c_{eWw2l|ʜ Jm-5;2"y]Tó5T#pH +qKP/l8U7UxR97=qފTwC7 \;lkVdi<[hi.AZO!7omrU p̝}֦2G|87쵍)L}8*T~ ߝ1{<ȓ.[.W__yNvx=Z*LJmvdՃ,->dzٝN<؈ +vZf8:/KGrm5G톝 ԭZ{x}ŖuiWF:VA*i1,` B t44$q$В`=Q:h*Z!'$ 42O4'$$&R +qDI0 0 it@c +J s;pH 58SDSyp> 8 ?%@ 8!A> qZ<_mWNP}BQ3y/{j瑠dRQ|P}HL֟J . +P: 㢬JC[~EfS -PSY&/g#'\- zIۺ @mYkku2k}XH_%Z/lXi:֭о\?fg:j +Ě՟}ZLOOtR-BXAhf-ӏ5Ru^}H+#Ϋ%j%>^Xv\i$>JpTWH$iRyks5cRr9wJM $y౹}@Rf6#pN24'AV,%I$Ty5;^UB+1+VU<ú3>pD\ʭH%3CEDG)ݚɾ!* +g0p'"aPG5W!DX0-zHM`((|m- 5}%` e(|tˠ#p\tAKaz NMRq $T&?6DbH0 +Qb&))Br ) "~CM!P((De +$" $($V+x^oY'vn`)CI`|B #ҒCadzJ0yto !%#Xry8Y͓bJsiI@q{T| .)jnCϾo<~$$~͗K pٳSW_nWOJK {盯xv}/4v~&wn׎$mV}勭j[T|5>mۤlʃƧ<[֫x6Mx6mXǷ>^ӧkU|k4<ĩ(uqiU.񫔞+UN->Xdĭ@Nikb]W +\.L<+}Y"iygY̧% zTP" $R^(@/E.%|RbA2? s"B%ػ=XwWMFchkӽΖ +{GcXkc4lNCP4a]RGk)sX{yKHh)`BP8)rj|Tͫ9jj-U0?BNs-c䚃Wu9WUB0 nK/׉)FCKV_WCȓp%\C _䢋#R|z9;9 g!K™NK8묣d'l'x$dp4#;lu_XA$!5)gs/Cύ Ώ +M6jN;>ْv՜vz1XSis}ٽUG(fg@ϜzFErԜhg外fH/ -Ps_STp?ƿi*(yej}^hRrD `(nR +N 8N4$ 4hgD@%a4c4(Հ(JPqU|2X+Q^Q"݃2^y.)!@9_92i, ^AIBVxM}aM?7:U_Wޝ/Kp;N>,];FXr̃w.fڟ%1l]CDo] "Sas,*5I]%ޒ"R AD lYb6&Ek!y)0$,Q@` 8 hd0),CF9A%AT"L4Nи@C%s K{xL E,%h! P2`H6Q g "P1кAY^A$\Fn߾8c>W4-VЃ|(#h>5 (5[^zFh_O2ë4k(`⛠1D, N/O&mqoՌuO|s`b_ɔU,F^S&p˗[q{bފhMuEKqQPw+7L10ݱP88uq7w; +}+7{䑨`R=U::ѓ"GG-TW23#FI|o҂x낺/[F,V&Ӱe76 y7 @2{7 f4.lC&)oh|Mػ=ξ:OHrho7W6ݷw-c2G҈:甹aU•:, LP +RW0 +6++rV@+BsPjjXY0Gw]UmcSu9׉WG{XP<Ƙs r^ -65ɪ 3 H6V=W{UUuϛ_!RJ%(qť`e$\q%!꼈s2(h;#Pibm`ɓq*gr\1SszR EqTB,"2c)b:ZDH,#IBLC1G\Nd\c8gaB:S).s5%t{щ&<֜5fNl>doO+t.H!,PJ@HêJQ3i`DI'!X&?-Anps?,Gh +S<؇e 4 +)(# +p4ڗ +h)5*}L|(6p`JW +ׁP0^*|AYF8Àk +p+pW<zs-\σ`F.PT)]<\ӊ"cPιKj/$^~9KIz>g38͋J+s\/J<#+.6do,k Voc#@pŚpeHEЦP7- dK$'(f>kH5($J *hE +S:kEq{ jޠwTzƊׇǏA`9R j.`` ae0J`ic"bB_LMғ|DHѐYi,%3438%uTfJg4Dz2#@f%c8i6 + xTu2= + 8ɤ$6 +$2xxP(p /ü_/`Xȼ3.gu#C{uK>4,:< pC >~_/j{:r=!t]gn֍ޫww +j.o^ީxMVk;+V7ތyc+U/}NhxcffvQ&26Ű<5Fٲ6oٺ|z E``1Z-*&Ji6EHW@TʫH("#תdhPV UZ, +f f5QC97@s@ ` +VQH,%P||H_#| ( BN:Ri` Qz-.sbR@9 j5Q %1p&)!HM14CҔ MQ.Hrޯ"9t9'훢sH$z7 +&>uSֵeC4ĿFԂLȚH&<>Xr1 AXb @Pta@ У UEɸHDcS` H4TN/G:7yH7g췍P(`13Xk:Ԧqdڼ>%lғPRV)Ah03LM=LCx,M&fD#60cI0*”]a"(Kբ᯲Œ%1ʬ,ee}sJ)jXT>5$`KU̚eڞfvo}ڵ4cyΏEsYӭ>}EhG&CN ۶FjfjD>hR`QCjsIFML/e{F kת_cjݻF8Q&8v~FqښUYލ1Y)ڏ[iV(\ +4Π%qh\cZZƘ:V.ʊwt^EG ^-U-B"#x.łz:2\EXG/ ym/6}_df/6 #ezGQ=Mgwz%cScY1.YuwsIM쁢qZ͸S֌ػjvVc?+Z:wQ9!imh7сtvVNtuT`e=}mXol|r`K/{[ W*kJv| vwՒ.{u +]MSkT)y+9$Uy9*$\͕#=%6ay weMSݔͰO)WkE9t ]W9yOw[h23ÍN;U.fɗ8rI#ϋ>|qr >]^sp])/r}ऻ,lOМ$ˇGft9ڠr}?Q>5yqЇ H8.͋T{>d/2\=0[Svx&A6?%a}5Ol'm\VTgMwXӆ>\hVdWDs:k̈́u[Xc z6 +rF.S*J?/;ŅY_^9Ҕ%*ɸQRIJB8V6ֆXe:Stx2)EAd0dM8 >VpmphPpI$Gy {f=pXHψ\3й.3LsCOh {$ ha"a^/.P3ƛ6bvL=h%Q!*7şKd҅YtAfK&Y6 Ci~tAr(gy>PId39V:;B'Ie'D6ɂc!6$f"6,ᑹ~iT8GVMi-R*V$/l{xJ=U,^jN;,(aUūyM]}3sIhV3%mI=ޣ6O0mdVزѤ[ټޤixG֚xkJqFjMů2γvI!>V4wkD֬ q00 4DɐB +\\b=yb)kThBi$aPϓ +V3[L&Hj+= @tz +t$q ɲ4p4h2 iFC+4EPrBn&\د    +6+hύ8 ڪvH_wBucH}Xᒨh{,iu<\u<IZo8ۡ?iwB?F~<=:on?st |z%}_9h!dz += 2P` 2 +A߉\M@Um\h{pJ'jR'z$i{yZ`Cz%= Oz:kgzfzZzvfv w̎tݟ~ꮛu>m;Xv}ÖaÊa9^w5 .MΦ HK%}NJDݮ4 9g=|^ǨN uԖ>#ee952o8(ٽrg.]88{eϝU]x\u~܄cm9._-v@qV/N{qJHpҍ帆crEH dYтy + +'[`[ǮO8"Z>֐Ene-G& +Y&G.Z\ r#SdhH"MC)T(ōEyc `-{ŖŖ2$ 5' rF.k'oUKY~6ϗ쯮^&_ * x&zv7ZҍL៵[ɡ; މ1zǚ?wbOZ(i3\UrrQR]i.I.WzZj+DW4c׎V7!%77ɭݍ7o}'7 O>ݑ=PԊ!N݁t=hE!g׈=龨@u>_jB-٫aARSC6oNLCAخsYVq>꽉mUscޢaMr+VQC,)Txא'jr"KC,(r -tzL_@]J E/iΆ3MK$   9:0 Dm@F$, L#`-,VJPdAx&ca^ai}ֿm&V0&2&"x`088Ls@b Pg*wwpe<8ߔ|(.nA1Ԥ`c"@hd V, MdOQ8T&HRKM4@t"|HJ(a  Ψn, G"ŐI-$4r e ytgGb<ɣ=8D<$*id@hl c:`Qpc-;,TfT2 +. &OAryh^W]!7U }TAC!XoW7uŕվtWŽNXEw 7\@KQ3nl1s&f$EQQF1 +:IfkUuөWTwY{>85B+A>E͆YG4Z KD%s:68؏5#3񱜩f̼hn,*#gfF2f5B/*Eg\@a,"<$,6L"BDHV()SDLzD"eeJHӚ G3mer+ûpcϞű_B_y}}3շ^ߝq{5T:T.ָ:Ku#u#+Mn +]~j٬zyj#g꣇mmP=jn~uN {3=;{>χmн/4C}i~5Ԫz=04pl{}nM`Dnh42p㩪@ZGWϵqU[G;>~Wg񮾦Tw{u^z ]~ۨnx~F iz?]qq|iNGjZGZj\wkk^W_E:F;4Yj\`MuɫQfMׅpBwfy~hwnPGG>=2R_t{TZk j[kqԫp`Z?i Y8wg+3>G8l*?tL8;,cm4k}C[~6إ{~ۍvQnNwV-6B + ,ow]+0a7׮{p`GwCቮ}ghEw`2EQz)'Hdc&_VivDi+0 M@ @yTl +@a:J=ߋV6蜂`~uJ籺*%tՇ6}Rsh~VWLPsUםvU˪6,ID(NA¼ "S(GF3Nm6 g:9™5m +?@bZ`9 ykp‹Bp0`4߁k%pFiQ1 9h <(l@bL iFqX\x8p,0UVJ'%rז0꭭a- +sD(% +&TEdZC(eK"gW)d ޲^Q|6M!JkdKŅV|V+ h >OA˗yf=5zD'g˦ +I/@ϕ5yK%X#Rz+H9ZYXrIXPD,p _lԢ,baX%4#ysltʚ%@"bn#9邁&LSj֙j'2Rlfd#ް&$r>$(1ӱ$~LŰ0`MFsdQQ=5531zQ,bF8 c$a!` +f BhDBDLR$e +ד$4.;(S@@8f'5vgo)yqpq ˲4p,j0-hfA1?ٯ<5{E]\XZj[m *`թZ+,X7PU aan3ܷ$^Ivf=ýށܓ+CP$凔B@դ3 p /L$L0x$8cc4`p]>H/\st^O{'꾿^;{lKLkkƄw +]fx}GTU-qkJC( һY豔׎yס7/㮏z/~;Kp \"BnS~}}κ:±Q}eGP}0¡qy`?¾"|Qv{ Fص}/؉-aGF؆Bwf6!l aJf=ºJ a6W^YΪUVV1,xVjc bQJ$1@c@VH0 A J#X%*f)Q!':חRS$h~Blj!${Thhߏ O@Cp0[';烣U dC,8uH ^ps j?1WT^Qj]l֏A[/d/2E;.:#w|wW-,J3Al,vdljzH3Jq@Ḱމ>xP",8:4јGMh +G +M'|07H9t; ,`^ P` px>>#(ŲEimIDnvEl^%weG;"L}cI}5 HȚz̶u} `]j (yOJ/aٴҀ!Zi +CHk#o CPeV~>]0P/jF|'>~W>-5-Khe>\#>xG/bWxm%-=9Kd/ʼnB^ VVf ]Po o5rHs5N9ڠkh4HRAFj +ةLL4-3- jF&:~Ɣ(HLT$-Z%i$Pd +ĥzBƨpDkdMJQȨոJM>ޞpR +W(s4˰Í)bhLJ(?$MI!Aդ3 p /L$LA1q*n1;?]'E/MGӞI螿^x=N}%R&f<u͞\2u͘'jc+5ڞEiKd2O2 +^#VQ?ݏZuh#hЃx#`:7<n 5&(=M )uē%K ѕ|W1wq&T**+p5pnnʡ;NbSqBPyaE5gZYT'b|W_X77@D!+rACsu:[x=6g;@tJ&NnrB5 o9C6g;u:jJ~gO7PqVZ[jk}D@,ݝ陎9%P!($vf̽/=ojg:;{ޗwr\&4Y?i7O"C^>SHǠW'djzzuH߀e^;m릇zfdΌƒ5sjf^ L9f69>s5Vښ̮ޖrw_sQ:wޯ#R'evw|yl!\Í=3 ñ,O:ᬊ%%Heh(1魣u! BQSo M'!e]HEΛE(W*Ci 0ط UDصW(/A)>-T%jU1g))WN/L|.ڕo?)땲#׮\.|^Rx;lbVmҘĂMIEWR +K%CbJxD QϦPs?caϚ +)!1ļ@}$`4Qg0bDR&FY Ho`KCg}@ܧ0kޚIXߛ>x0 yvt{oDݥC5wB{v^do_[1b;Dތ1خm~Vl٢ھY Em҅FںAeڂF5Ԧuj!oZ eUHVs"kWBZ^ VRge4b9 G5UX˸,_ʊEqHkW#"%/dE-`0ZNYΈD"&J&Œ@F#2HVuAKbkBZ-!(E ys" JM+888eYZp,h0<>hfA1IS%  \MJI(`>c>8ggydso_Կ^lsd+%9?:ֽ(\0ry: 5=jʾb6ԯ@KlN/REdߣH'==]uoo_G{[y {)n]yzîC}n}s sV UT;>5fw]vu"^ B>Mۚm-POcvPW^c]P>ڨ } F;ߜ<'4 +nຳ1\{/MGQy\hGV&4Y?i7O"C^>SHǠW'djzzuH߀e^;m릇@͌nq{9P53jj:,ӎ}=֑/\/5]=-;nİ +jHRUPVQ+N0Q#pg%dSiUy:o^݆мߔZ+Ϲ\*vy mYՊ2K2.b\qVqN~=X%8D1V"BA8%_D <-Hp=s4\#2r0ed!GR2ze +" #UF_/YFRr܍ ~.k(G{P^8QEPAjQr}CV>anu9#W$IhE(fQA3$C}Sp( +q$U6Z P~8Y3 "/gti пhC5"OQ@$tFnHAAO@"#003d^f8UGq2\R`EX"rZǘSY*ʒ0qiؕ'p25R#4%YL1j )éQK ӑp~ )i\FNsJLe T.8tҷ:5vnqVEԬ9甤l~;ޓ mWgжMb;]GزmN5hɢƻo;46mxgCc[v1u^a]cQՎ֭vMkYnh2phJrMάXb3|Y.*[iE ҅j,eqҢ^caR"HXX8=\ 74FP\,y1V4OFqbF9J-zGEEs#y*9Fl% pVcVw2: +CN$!Dp:0)C6̩lJjX4q̿ H MOQfE6]-|}_򗾄W2?Xς<{b5n=|5F|%uFݎUwM'Z܄}3{|+Jmx苣Mgu| +3&LCv6#s|wk Eɑvz+ۛ@s_{~3Zn>zxCŭx:O}%qӧ4/l }=#L(x\VӉB_ڳ}ןʮ5]{&kk h j~.kkޫo4)n1ݮ{ݗƺAOOXowxw=?)Ώ.6w5~N'o\}{:|͓h +0]PLeFYsɄ\Xm] +hmn.PjG=OԌy~A^mHK!˪|-'ejuzUֺjI7QcjG'K&u/L6pheZ&SeMbd{F57GolJzZnp(3PjD^S+DBYODIȑe2iۜkBHSzPsFT>ﻜUzZţk4ehJ9U[ϡ$`r(d μ`~kQd, Ff1ݬ!3fZY bh bx֪vd6dH,JZ"Ip0=L@6c!! -!v!B):RA{;BfB*cTGG>;u驚}swDM^W&Qxb vP)7(FIa7I#C SOTXIʐ\SAϚdH,5#4cVOkpp'(F G0s10C, >p5,a!'$JJL$'SYi)TEQ +.ZO +҂(p*\隅݅6.qEE,*`ؒ\-!=e6Ԋv\^dî.˷<'vaWh‰r%C9aN#۩Q%MKNaZS`#tQE|8Âr@vPVd*3LXPbvIš#թsӶ:T-f9$e/)3xOo3%7 +r +EM[n5╨j[nn&FQAE`@Aj}aoH%;ߪO?0][.n+pYT,St$:_fV))Ke% +3˘Eb)olii.nIY`ȖΗ,-͕lT$cgIe: $fnTvd3']c*@"&c"XJK1K)PL^0+ 'gf"o*)`*1 !t| g*.5Qz38Z/&DG&* 2c`0a,& 0a.Pn'cʥДɐzBc\2 cJqЦ==ˆ"J _v R<|98 z^գ//{U=i=ӌ<ӄ<ݍ[zo>CuiogCamM$ &'A'Ԋ6MW&0w$0e3E.fw T`O94<,TK"pۦS$ v`gTl-(;b7]v)ANS;yf=VbsR J7+60%n'(ޠ +Z? ۠] j6s6uNK +\5 +X_ 8Y`s¬/pO!orjru+֮P^+`r`#(2*O̗&OX*c/QXX/ Ky eKKsqKr$\(Gpdi<nfKr8 3?K4/a 1s3E&U9"mfgd +ɘmҒyL,R +<ױJF"홙țJJ`*J'Hp<Ùfz^ ֋b1Q^t9'@A'A!/Zl'A'2Tl@'bIS#~^UR bGnh$hV*G[cH[GXl |1x6y:ǻ%Xt,Qk[KUv0Xs#TwSUT)ʘ[U&ʯE\[Áy9=Hjɹ|: %IJx5*z4/A/y!RwC|Sx! w]|'zk΅&WU\E%1Kbx_\|qs𙊋 +\Ph +>㜂UE%gNzO8y2Z{ +TQ _,ey +N8.J)+˕厊E#9*їdőఊ QTr(7Z#w029'wBN*=&=wv/=e2;2w/O?-ؙ۟,=WZz ,s1CpR FxzͱR4@,o&NcXik1Q *U360=ahX8Fš"Qa"yxAs=epHSc n̤ܛ8q@`DÖ`MVa/s2߶f4C1Ɛΐ8cHR6geN e{& qk5(<:5iE0Z@r&455pH)-C FxK$nEZn[=6y TABdN*}2'.ș/Ie9#6Dmҟ2dz(:0AC #>@ɞI9@vY,i4'OdvX&Kf9q8cЧ$88z>)Gd9$edtf:+9Gg@>!8ۡ.{\wƓ#gMƮ)}Cbχ,{MVs8mvG[vlaUkq|>+ba%>dĶmd%nY-$6R;6M2o4^uVwֳ4֪7-RklVEްUVMoX5+,V/7SQycV-3)ZH\jV,1Z/6jZ tQb( bY +rf ԓ(u>ѨhlKmjef#m^|=iA]c_}tw7z|Nv uEՆB ;~kꀳJJACUU߬%xeX;Q2Ky(k$nCGoQzfʔ/I4PBE*Ҙ`R{!dh%"xZBhheigh0M}&\pAf3+(̚-ɕf&s%Y\qf()̚&/+Vڟm gZ%y  \~+/݆r~}iv'Ma$ظ=)V}B."2v5aJavoWJaSIu;V6b+e]a6dV&bU_q̦k;SX5%;cV- +ڲlg(Mf%XC|EؼUazי6*|kqjI= ~kݻ&vYWZVV/7aD jjV.FD#X%z&etg x0LXW3*kA4ǚ?Wd^i̝c͙PyYI:53I+ydt+q "8M0=SfgU8:b٭ me2n(Ųl e2 +F#`.8!: z(#^'ȁ2^H8:NXNEhFjSmMF&:2pjUiX5 ʟ̿W)W}r.SPiQOW׻D?_zpϢ hn|3~RjikKV>;Vxz> 8iLx8O'Km?H?!|7uVXO ];+z\8/ރnn]xk"xݾ/$ PceDSp{3"su~3 ھzuCx#{~!I%G@#3킾nYϟ~ɀs'wCOI!uOejz=sGZۆkz"1'U2y#oϝ͒C_G =Շ|@wwCn{}p_WI_mx.⸿.Ʈ8ۚ4T:\Uͯ2(j5kr#.ZL9.=mw9Bt5 AOD=}p jgF<'UAI%L(.㔉K*QǂmQ.p^圆4q©Ne 8F&je*4ሆ8#Tj(U+B%qĻE*b(԰?| yAWTBѵOe=1dk)qewP_RZ^%j, 4#r)(P(s +AԐ24=@lPCڿ[ )}{GvD{w(N{Die YN9][vpf#Elߢp3mI +`ng$%%Ʌٜ`6%!m +N:KNt%uB2fT3_\ܺUNĕ.elMh + rX޲grĆLĬX*Z/Z.`̿د&<ҖJZw80B \B ` B;G.J L$I&b Xld˖$n{oWxpCߙ~ەG^hў4(=(-ExBj2$0)'R|nNً7 T>}୿p7|q섯A\OB8绫v&B8ȱ>"W~ >Op"ؑ!  pׅs ػwCO/!Dժ`w}ڼr#!Ȏ`W¡ڝj;;"jԶVo7 +޲[z֞ ۛ *ѾMޚyUy+oޚڋ7eM/k1]/DcG8P,Ѕcd+&&y":D/։}=ZagwqoPzTғ\ܽpOS=JM$txF]&YBtE2ۓ 3i=mK&zؖD]+ԾV pK""Fn?9iOY}ޖp5m@CȠq |͑a62(:C УM 6E'脯1:G޶;uloQǹH%z#/1!#I@#b cO@v۹=~-3oVGACf/u]jynV5 FLu0:9ᚈWD\F9;璀TA k_!TNhn1jEQSQ.4 8S2D@1BB6b#!ODnLQ0.GDY"N2![]Hbt3xilSNkni͡h@-55w95oRH:ӳ5М +X',Yc);ؿ݌Ԩa IrS)\d2ZI!Ab QlabogdLT2MR*ۏh +2 $0LIbkWpL+1Ԁ)$Vǩ zNg$)-J$Ǘ,L&OH0J5b1>Xs#]'^{t<5|G?-hn-zb.Ҟ烝:T/f-#߮EڵMC%ڹUc +lq\6d pz&e m٨-d3iCq=.lXDZVR Rnr|5+HWȑ=U*xV.\++; +yI" <<#qm &2JsAҦ@g]!`^.h&#]4kesjf8G:faF>Fn?9iOY}ޖp5m@CȠq |͑a62(:C УM 6E'脯8HQoƺTx(OM\4Wۗڐ$1ק] cCBC AfPܿr!u:u\Bn@AQݵpEDg.!\-T _#|%vUC.j +Q x*D#%* vB"@%|%D"%*:ȅ<9"N q +*dB` b6(# 8ӊ'V6h@S +Yc4hcډ&e5j9RT9-ڎ)1J7uŕ9{Q1xDQCfPc7٘xVvkxD90 +${1cU>}oziRQ$aa@8p,IS'?)ڜS'fhzv-CfeJYjpL>m!8@$ѐ(gi`)`IDBEH<G)8YqIb8s4} `A@JYKI{pcYHKJ.IMnXܲq=Ϧt7ϥn mG3JHC3#< s낕%NXQr dU*Pya"Ve`Y8mȟ sCoh$W0̴f?-F uXkQ{ldnL^SnPN!`yݨgJ>4ɫDLfٽC4]+m][y '[Ciy])ڑ*nc:qRf ##H"|yS="Y$үvߕ4i=}V񩤡KqW0.iT"_utykaǍ Iۣ/':]uG'{:&{)P&h69Q;9y~{jh?ǡs= +6 +-#gBuS"]S +uYqr:rmW ֒ڈScͨ7j3EDV~ԪwGvYux +rpEDWȅF[>{o٣eg͜>֡PI'b8n>Ԫ&~U6b/Lkm:r |Wp tjLTPU9:TߑTP*Sf4_ ^PcJSxb()0~$RjQeKG곋FJ +P;܀}wbTF2EeሰXeXZEv Eyاݳ^!4Pqi(ȝ-@  #yn%Ao%(OO&EIt#PO5PAO"8R&£7.zae+ +xX`eV`Mi2oyk3P{3s߮j)coNXk5t@f-v~fsVUJnnނn|oIy ];5ǣM>kw/x- \8ևf9g5s>:>iS>9o>}bWK o:9X/Mz'㸁cĩ826ʵǛK[=5ox x}^wDxlBCVg^rXoҊ6 pͱ"f f"6,ⴕ8b{z=ZK#ȵIu|W8j(ߠt5b7"Nt/'_mCII%ѶʏBbW"X97.OL 7`Ҥ֤뗤]Cˉ,媄J(I/,ϗ4>‡, +ICWEZ.KE^rAi;;M̙HYpFpibqTBq +'xYJB S(8n: +R8&(_qd#S8RIxDQ`RQ~0҈H!HyHP/bdžl{ؑGlAA}_ZO_%29aTɴZ-1O2ZnP+ VErl>J(#ejB&ӓ(BM #^dϚVA +9s$9! ͚3򴔊EoH)RO8LNgfR{p:Q2\FҔf2JI) +EAejFE=Q^X a%Z/U g%ANZ%A M22w AnFPtԙ ||Bq&}D],4| I(sMtzIg LؙcIa֩#FI' #f|@!}1 fIEgLY&PAcySotdIN^sZdm~*vvy;M"̒k2F0Nڷ#C`vޞ!sZ;ozLIһo%kBfz6o%k|nJmkFIoj`%'0/EdHE[ l lbxy!^Ч: Ԗ\͛t^بǞߠSϭI]rQ5k56QiZZ-XJ#fLgJ-jF5j*-4gEJRrZR2˳*rFRbdo"F`B*D|FprhI3)ȌL Z LЊ %l$&%3IVГ`ԑ2Nj"^#QS54RSJFb*FEq5/8&@2E( jB?1s1s! g]{Up}](=\PTYjw0iRW7 A}g~:]{`%&kf&ZլY qߊ_Ư#0f63w/'KQwu =F\K'!֙v"՘+vf3#]9 rT%PW?Dۑ{%'pSy5Ҏ<<b@5z<* ׁf) ![P[s?bOfi|u _ 8`[;z{&u6};zY/qzcX3za}9{He1 yRp \o|cV(bIh7!c=8} miuǜ.5b.%t{no} |>K[=5ox x}^wDxlBCVg^rX+"ͶtnF[NJGKEZflXĻ hOΕ9\J ImlO·986̣/iykCcm۲lJ3]yw=+^駙f4OI3l*&(W1t]*'lwr^uv7rK&ROu\t];T˝rW5\Q,w 瑫y;JpfUjP\Cy{T0.ʕ渠|4-vȝ+Q4 *Ea +"N䅑+7+'l Y* 8; *ir99R5qJIjvd9/8i;8&[J2[I@~ӱοoy"xcdnZǣ?lx|xYᵯܳ8i! YMillK[R^t7г|O+OB=˸=z7C,&z790ō{( +}'CnnUzܵP ]5]xՀVM~}}դ.!b݅|9rAݿpftqP¹䪐2o%TlV +1 çqQRúq>sJ3BVFi%1( +9F$oVN08; iV*FJ48m$K8pLP1z%iHKlAH2i- H)Hm:^4qgI_á n+J] xp0$(# k")`It#LfQ 7UCp$߬D!Oa  0" Xva%C203t<tV= L4  `]][ 22/c YGfJrbTI"8JfA&&(F˕8x"]Qa 3mLh ?iRy+jWI)d:qj:.iO1 +6ceccl.wki:ɴ& $H! 8VO+(>ӊ`)e]]TUUCtRv?{Jdb ]$*+#J iٱM +@Fl*i-2VfxRQ(η#dDa<;b&Yw%F޲Aڼ^v(_'aڦ5"Un%"NYBf#V/-r"WD,t-[Z؆Z$P3ӽ4ϽsQ?f6S/]NAJS/zԬsm;w&`u+*טYyx<~OۣC]^(?#caGh{ z疁4[k_>zf_>_8 \v}!um-oj C CPEK;>w :AtQ|_v^;Nۧ MΆ nY?&zu +Wnu +ӫƋ'`myk~pwWO_j{_sK#nM5zkB墧q&. ;Z\GG=T;2:7uvyov&ƍڑn7kS4k~tvϵ3N5_~xʥI<^q!<-ΥU{r'Q0{3AN  NC= xOI#Nb8Ʊq:<8ġCZ8~j_5TaTjV7=>O@(NồJ*b؃]bZ1FIPEŞ'MPAFEE_C>W}IgݶZݢm%1>7h76ך F $a`hj`#5 82$$d B", +Lu#izC+(\iRS"h ,kTP3nW XX} ֬4mL#KȪB`FHM6u::XDUFjc5U2uW+}j?Ow@OTK*<ϋ`TJ>y +Iqh8mHA(2bn QS&AA'cUJeCUnS"cKN"YWYQZ OˎmR2bVINl7KoGɈ|}yvĶMJ2eyP2N[+b;Mk$] EJkJ^EvgrQG^&[*"V +9FRA֌FH Fv?m5n~B eͱ7c37Gw\MKWS?ԋ$\N|+;Jc]2;+c]^;c8YG479dcvkNOۣ_OM]{{ UVvZw "RR!mN}vZ7d1$aɎ kro@xy{ '>= 3f/{%Qma6eEȠ\9 ++KH˂k&_a+j77kI-6N2m@;:~=L3n{9샮f°^tڠ&v#Ӥmq  :tC9=1|}飌Q` c2qcM @ܦwf EﷲM})4LMC=4 3ٽ4<`<ƙifc@n}d^!2S|Ysvĭ= ЛtF۞~ɵr{pŒ#i-!)]LZCGp5-CdL[}nYz=1dQt);[[ic@:BxaGŠ1**S8RE(K4CgR(A)!E)F(LTT1чRDƜLBn +t( {"gGX{b݇"&SNNP㓆 TeeEO +oAŘP- +TS, +S 0B8 2NM.rH , ^!b%JKKJ$x8^SD|&L#xB."û p0OΗ$>P +oJu]u%LJ晴{[v۔mWsM;o)z{M}ifzfolݤ`QbonT m Ƕ̲⽱^isl\+Kji92ud֬ W!Z93+s$H+A,Ey]2l12,1RRƶl#kcb $H mkbL-‘230"E8G 5V-h@fSV 4J, E5B!r(e\2)Ҥ2\(b"T"I80" +Ep<.0DƎ?gb!b!^0xi "``,ϓBuO2K|H?6ϣMy}dY<{15sշzJD>"ޕ +4y!_ȴl6eR|17 dA<̦Lh+GX!reI#ripp+\t}ʍp Zy ͸SGCAgh NƽF_t5)26La^8+0W'6 pHs4_<`Vi 0.)(ؽ-+H9~iK3M+HHΛnD&rݍIӮDA䬩d>vWM>+9sw-Z] +c R7<TzP)0 (=$ܫLk@Dx~94"5z(#iF +)x &3Z}RndfQPFדד{bib)kf"UZHW+ۘ( 8AUT@YT Z< ʬԠ® tb.E 1K*,)Jm\|@籯̙Ub9# +9DA X`ʿāLKP ˖a25fY&7Iᰙd^QV+JȉV8 Hcs+s,X,1ւxW:ǃ g93,6C 4{fROrAgOXgqLleNaeLeG#͊cRF3sh >#d~ee(ab1bm` >ɽKw2 Dhk3FG+cocDVeœm[X[4pQuv-4Zzsk56ڸ^T#6Dj +J*rzp..LD1XuU6x6(}E#\/J,>$zohwv/ZwY&?Z=~};Mz>>I47򧉞Qѓ1h ˸D`q44y~59 =}0%fSlimՍuH=w=44>4u4 }oDz\}Í}C !hxaadN4:X86pq|N4639P膽 OlXh|qoWӮO==w;?5(mG|Ipw](vv zxZE=u2Rf;Dsm=E`vB5/uI=Սuc6sߟg*.Wr5omY+3_tRp30nL ~Z܇A| U]}jׂqEPiz2 + ʤJfK&(pQ$Ums(( #_Ʈ*bIzɕQDƥ 2ے ɐHK[biJU"7ݘ,eu7& l(ە3J̚jHʞkNHu&eͺ&kħOK{;"P KaCod8&̔a}̏}$lZ3P4BG,RTDY!I*RSFӈ$K>\E@doVФ(p^x@#CFJEU0#>!3<_kAFy`A%Qg ]]CW9@#;XPQdUP)wL`*s8͠amPiUFEakpp ~/86.>ʉW*af ,c_@~%({eK0ʚK,cpLIv2(+ɂH_D^&<>"HKd, ϭ ̉ cyDRX y^Q{.ϰ ŃV)I?):=b9naN3I9y1!N{y|unnPbD58H&*HB8! 8N2d'cc$,T@]rN5;ywozwF(d;w?H[glΰ@6!3 ]ךu[,dF)=,olmY&W0ihlsT/l^ ="Tg^VZ+ju\ίt!ݿlQt}GT=YJ&QwjS{; L߹V8$; oAt@~}Jy#Ѻ8sUuy?nOP8noн]yw2+j\\Hgq3`q č*,8q 7#e{i1xp^^^ Xz0o +2tb|X# a$BYI$wEAg`b۷wswJűP ,?D}SD/aɊRp#/K'Lœ&RO}\.6S&,;!P ,Թ<:kةsTY?U^H ++R2ZtF) AT>ǂS9"PEmȉ%vdžTxD +=*ȶ!=X^6,}6dOϱ}6]G!{l$an.ANiCڿCМ-ɲCe {ɴCvo+ڹM@ك٨̭VdOiAHmC~ɬ`]ue-*f-Y!3,Mf +dCEf]4 jFJOIdZ"`"SŪzjF80Acb8$>=1Q&":҈F]p)"*.Y"4A + =OCY%V|IP/ Ye 6Rd J@l +̤>qdP! f#ȑ`r$p,C K5:2%R(!i +BB"BhA1o2 h ~H郉 `ƭt8Sx=fj$ET5/)$y_ %jy0Awx=wECˋ8ݹ3<;ߊ}yEL(sFٛghuD-3= kNgF@ ]p]]a"e3Vҳ[OM]m{AVEq}jW[۾j+ +.}Kdi-ӎN;U@Bc dE%$-AH]ڿ=79Ii'<{L5ZqiDh"dEt!QW!3՗/$S./n߭n1nD?wwk#P+Jhp/>ܫ5CCibttkAg`aX[N՘8Ӝ_oƐߎ"} pߠ7qz/ðsa`i5l wh~8eL#M&R7hA~+۔qg2h)G0l3bKsN_w쾷yc.){@܋{yףy;Csk:$880`a%dh !kWN9eb-5F$hv)cȤ1lֳG]Ģ=)NX f6cܪsEl:@h86Jʬjg&DC//m@ ꈭhb41v!lqB:f],>èI*Utl#).c=OXs "۹%YupOb}!*V8Ύ#8J3g"=NgQVIH+q1ʲ(8P6`%S%8Jb#Yf+tg*w'dB]N:8ǃ}z_eS8NJƢAcёpа*Et*>v^Iy'(' !SbT+LHe$Kd&O#$8Ĝ9s$B᜿1Ϛ3D9D$'-LJ {HRw8B||1cQ|@NT. ϟ'/Uj +dP\QuE$!Օbb)5u\P>.0hHU|RuFNPs=Jq%rD1q5UcJ +☚Q3Pj#*&CNTaf\'q?IQ_ul +;^uZ{T:RqlYuCU k{3gvj8Psٙ<Műg$jj6֎wUU[ +܌LBl{SN> +倒b%Q`r[[),xc͊^{Eѫ/rmR[6ʱ6oO핗sYuXald/a_-r8֭ev4Iǚ2˥B++ɰJU2K̲%b2R%),sH X3|qF /JS'J1 ++o Ȓ7O☧&PBR+ +$ +Je.8rs99$\%B/QBH"4PbQX$BPQ%J.RDqPIEbHSBPI\\` o!OR<m[xh&e&mg,6dMl3Oo!x[kp?lڷʙ-q?US4dej`ixҬb%gѬ{.5 #ܴ)|$*|) rk +(XrsNM&pq&ø[ZmWBv@Յ{/^=p!BH35@ ] :{ pڠvq:3<`a^pcFsyM1x^xϣGݴ1=4Gژ[;!ǁC6>6Y[B|- ~+I'21 ,l'HS'ưYP;K2nrٓ"6-.uքr奰s ꈭhbz)$ Y\eϸz!l골KJ,>KOuu\k5l}&@ N]7!)Iip7> @vO+w~:f#SO*a*Xu2bӝe*TT(+)SQ +So/)VQ$V4ϩ¡PƮ¦)ɇqdrV%"CoZ8voKZ%-I Eq9S W ҕ;J2DNT[ɉOd:Vp%f$&h4 "fBYaI +18b`$ֈ_#IFu3`3+jhDZlqGk)! 0 X'HD|+[6| =Bh!$84 f%x0t+::`եڊ xMz,+EfB 0jk-I^WSDju-d8du!KVحAK +WUJEFTV`%JE%y^q9$(eXfҙJ8Wd% X({&C3lOKMerRh-SdIlHKWq:Q*$#c%SOP)ŵP1ĩD151IGGX1RوNb$hac,Кؑ[>gD,^ ]sXˆc ٷ&{,6Gۦy(Liڽ&[ی"&bV#-b'75P6֍l$6KlJa uzx1^/!N'R`ԃQv5%׬Vj5U+Vai˨0˗j,[BB-!HI,J,1,!CbVb-8ƀQjbXR01 %Lz)NOb)EpsJ!IR+%%HYHp` 8,W M4Dr?4{xqD`$Q +"{w"˙,ǩ]H~яPa|*[i=g?rdkbxcp¢ZD؞ AI-nmV<_by/==_'zt7&.\?7so >fЭ A]o].{{8OO3[Oo;Tonw|IރqΟ{k{Gxݣ__xwqn<}vk nΓ;]0k{iq4= turzyfܳ}MsƹGF`᡻ywO=jy 4͍^|uw}q /f%W}n߮Sx^_gS$ގ{A2q.r>4] +si]p[[k]/{8OK䜛yes>*UJpsEA=eo|&uE Ϋ59yR)'J?YUQPQ+(W@TRP Q\P:R^QHP4ϩ¡®Q p`a<\ + 2Udlֈ@OzUpZ$mI+{#Iyܧrd'&Ʌ.N`•;5/g79Ґ # D֔k|Q51$L"fTb`Eb#3ɨn QQQâ xfE-"H-.C0p NiCĤub FpTCL24"hN]ⱚ88.jXRVxMW!DE Bq.!12:u$XɈC*zd&+!*;f )0*X|FQI%8+c%s0E9(gtlY,ʞɐ YUӥҬarSYZ$(+$b_v9rewOIP@w# $ы(jD81IdqI&11H +E$AN(؆'w'7Hwsϻ;ؒڼ^q1)Xdý\bC( &QBU?QkSVˈU䮔rVH؞岩5e֪N\[ġ!A b|hhB +tYilg%Yl (ij|L'ʚkomj^]Agٱ2RmtsAOoN>[lYdAdžHIܣmTR/PEDr3 q꺽{պ0|@_WsӪi1spSusjpCO܅i\U=ij֫n'iKEaE߱E C'^cOsG=fb1p:b;7~ 61Ư8qqTp1A8lP' * =``} 0J Qׯsg^vacAlo3[K=omAl7=Tm+rB`]X xgM"0Œy ˲ +p?bVB[-<0cj8+GQVv$"6bԦԾ]9eԡLPy +}"X +]QIU:R:#}>vOG'" KwTfOK2>9R.k8$>tD6uX1UWBATM-($NHACbJw(X%ed+$[S{lE +kUQܠQBlZdK>jzYlZ`m̓ gr] 9 +07DA VAHFQL[-#VI: +RY!a{Zk˦IX:q=ZoX |D:}^ҸKbQS QN:;Á589ռtLce X5悞ޜ+}iDSɂ $"f' +G''ڨ+1^fŋ8gx"V\,` 5bqX3bXlOkz4gjZ@DXSQSS#)4bJt1aHLc)EʠjI8Rvdn'6C!"Jh +"Cs/<^p3ǁoAH 0>4 ]hL( 6.c 'pCGTDV ,p +'Y(b&4z ԛ G24?q2|QDs⧾ޔ`ի^vs=IEw"d,c] hg'8w20.$eο8,} +XAw+ŶvS.kE@=鱧=T@AJIa$ oޙp)={'ϝgirH4=-[`Kg}Ȕ5"OYr@&K?E8mMY{ #'{3} +_/ &E6͌[^VU,fX:Nƣ:{nar4AwfrF~5n=1~f[Qrn{79]n ?#c&ha}@=t&IƓ&jv`mA.cP4dp:fN'a +CfGǎoj ۠60`oCpڵ2tj6fkh֧A]`ئ~2x mt~AY:=F:hj==)׭c3TyM[fR%Zմ*@inHTNi0Fa~}gi©4F*4^LwxM@ +jx9F F5U* +HÕQF7[7㨈An`\ǹ ,k*!e9_ORq\¸=1q6茯;L%8žb8 +1 +)Ƀ:"oΩB_(r1NqXGq'rb{r +9Ou><I!h?t1þQ=i w !nPnGnQݞ^#>nWmw}υ.$9QJ8B.G&p"B MH- +xAD%rc*:$NhX +)(8?&s%&ӇNa;y(q܃^,kH"K ɉpdf^a;[!8KuSu{=;YаO,{kXvfXӮ,~!v~ڱM:Sa}D`"`*d;J UaTsoBݢcf;[T,ooV|]ζI)ؒڼQ(_)7(˱ٰz^[+ڰFX֯ƴn$eJ)˚,I4|hUr++S_)eY!a{Vd2@*Hϱ/.x+&!GFpC7bm,;GaTX~]G(E_ [=w]z6sދBV.Yg${Y+=EH_0J` cHMٖ-ȳtdʚR', XߟBL[S^^ޟr3 hIM@3喷jeUz{@{( j<CvAa'MН1ܥ_[z_!}_E+`6po!퀃M!#f0q#} oF<x|] `e]&h:X[znF?= IaB:Ac~u6 vv-ⰷ:ÃZeٚgZ ggP7;l?Gw<6L:ϳc0QZO>j +u،,U^g+4_QU{I0 -AmBYJoH+tgF*'hqͷ|HHcIK5tT|@]T 0}HW)*Ћt;Reĕ\5ؘbL/@H#@l \d1Ŕ# 7LnR8%le8-Wl咿[vW]``2|{~*3Z(.p8AT9lg| g9EP+C5[#y>@0ײx>ӡO={ ^>rH ~ڐO?p 0Ya>٣y}mǻ5a>ڥfp]^{Szi۝k +м);h؎-*NcTXi۶MJN[7*-6W0lZdؘ֧Ġ*9Q('+d95I2P*8%'$1+eVrV%xLP+9% ny4L2S\,!.VʰL3Ē ET:-ё!ԘV9z *#aAJ&CB#r&)J\&ZˤA2Bq);gY8FգGŠxEM4ѼA%AI7/P pR.s%&=:CT^Τ,Z _f63Moež9'7UumzTB{1?Ml<@ *ވg)P̛8Z]2oӑW8, %A'ëߊC^C 'R& 'P h`Zxʁ#Sg5<mw >7/ܺq4]@-ށV+jo:~vvB_]@w@ϟ眽З}}@ ?_{W3 078GX7S t e +f9Ivn<?MW<0mWzMݔVWӶ'cܯ})1ұ )- 9GH菋ؘ}q|26l|H+57;tpi~?jkƜ|_۾p8讻\uzX(&tmQf_s/\ރNjoFoPeq54]|Gi'I ]VFOWzh}.8\\<=P.Pz30gYx +PMW> +*uU pFireJK|]l%t_YQ:]LztEfo'G<3w3Fݠ9ӑSC +ݎc4G M 8Hy>D4d:<4C*ɁŠ ^ +8,ae '%Ieg% D1dsx&L !'R vu I;HpD)e?Ďcee&Ө:"bM#ؾ]eN̢$˞D +;JeNڱMKx +)1Nп`'l#x>E@'ueA6ǐb:Ȧ $dcp6'"XL$ B3#4Hj$H-R:j nim +ى UZViBC<ت` )؈TC*H9\PXc0% RGJ( Dt^ "aWZPjFՐ*Z5ZV" dp`>F ՉG!%Nʬʬx07a)xJB $P: y{)T,#Zο&ba[$$%aNlsl;Aw=~-!\4Qf(FE7姑hJf[Z1o[N`@.e0k_}wطfYH߇ ^E ~|o72=tWc.e+ko8{xߺݻ:m[nv>,XLYz|_&/^.MXx[cax010L}T0XoL]ߌtn?`ʓ;#b[ ?{{2ֵbCO^߹l뵵6[`6pahatY022`a!o>}eamOښ#{gDm{Gg-.].Ӗǰf1𬵈n:^X4p W*UD E >| Jz:ftՊsvj|%J~'vvFpއsD9{\b.>ERPIrW:Y)PCqKBDG8)1̳<9L^G[4$4$ۇl ˣvR$pEP2&0MfxOfN[NLcS&[ҊSKlM摖39LzyǙ9c#ߦ͸ߜ}e[|a$?c( tJ VXQ*Wo֊wHR.x՘R1qy)ʳʚXXL^SW!xCe 4~B7ĥ + QW/K73Q3՗QoZTWnk˂Q՚EDmCԚ9LՕ4@.T +#Qe629eH]-HPeb!e|s%l1$g8He!륢A2ӄKd NsHS,a3*;eݗrXq.(0C*8";9FH^{[tXqV@dN>wgR r"I?Aa!G b!i H="g} dā=hnZ0۷`IYD{ٓHAv'1])Y;a 4O!%7۾lۢzXϧH褶n"l:RVlVBٴlnƋa֓HQZ,&DGh!p5H)bKZ5l[Z6Lքeba4H!jRlUKHlA!F$@@.A( ,1)ƀN %K +F":^t + BWMiv%cL7-BWSl);rdȐ9 ld[2ے,YnLr=Z) ;%qz +gXѱft:2{f(ihyHd!B(dA_2H2$̛T`(") 1atztQs^`,0ˬȳ< dc%TUw wi{ +ƎwnhMNP$U P5;ӣzMsm_/_{©ls#N7 \5Uo@|.l z[>)y%CC6NOPip()*[ꯆjE.:*A] Ֆ}+ "KyAGTLLt=_ '-Ey}RE䅝2EbŚB pn}λy:.˧ WS/O@*.)G/TWrבwWqNJql4bygTS +N 98' ?vUSIGQqP8␂\pAT}FGl{j%5vűSl_blW-r{C5Q[99M*6fVmTnY/b]]kvvbWYi]8ˈ؍H(2I +7$f(@E#M%Q>FOKEp#!t^}r&x_7NHDRRRIoFr%?4OO Ǹ00AHˠ IՊǠ4 I3R7܅SbP8ppF ~/Y1hgm4 infOfR!ę\\|栕;uBIY5<`o9;9c9Vř;HM+Om'ġ֗spw 3YjMb=mrYvRۻ-%&:bZv];7YH@lѲw*k]*c-ؖ6;eĦVl6gV%/IHVH]nXwY4ZjY[jf6E+[GXEbږ}dU-YdI,Yd1S?0Xb>^hV`%>zߢ=+h`[8$cxY{ޱH,kayޝe3(b"f͙a ̔=cY"Ƙ #dNK(͢fLaAbdĴI,HĔI|rP2i"KN'ĦpHgMCӘ&6N'ƌ+`FKi7%ƾ(3ZE0-JѨZ'1*xNIH +[IE6 [,0)j"1%#*$F\`d ^Jϒ8Òь, MNA t4CQ-IS,B8,KI&dy +,E$1!P`D17̵$]sasv3,`R{njo鯃U=M{u)}6>I!QތԀg_`[ZBi'm9hM [S_Y;b97ܜ? +Z`hƀ7yg=jn +n ~w·8^ +A8/Ĺ'(5 T\Ղ+Z^Wpq5pnlo"\8ywCD۵.c?x[Mie[N)Pچ +-G, Hp4@BvPXr8c; P؎d +vwξ, Iym5N;;yf>JXƀGnh(c +^k +AϚn9NF[%4}utPHuG>_L?00yb־J !m +Nz{Ѣe60&aJ\Z̀Ac&j̠!0`:R% +#N`=A`:2C\ 4ꗸE{RF - o2X h)1ZuMeU<}w6N= pu:@zPI=ZXU6:İWک.05z'D_?L?}5xO' 0ῌx xkVp  20(cv MeL!C SwM>Ys =h ;ϡΑ.cqܼFz"|]Ǭ'ގȠ32G!O[t>=:mc<3 g1ō9:iQ`@7USڰrw7\B])g"PC.TGkheP;/lcmRՔ%PeX)Ɓ\I;UaW}1 +~޵p!W唳CF"宻r5gQP#ᦌ*p?QJ2#\QRJ@*㊌˜s48."\@8rRB(E8',0$b"N݋RP #Cȕ-#+rd"dHѼ48pR \s\XN[(JT5yXPDtՉsZ]5$@8!6>$M鴓Nm0O,i moW+e0a2z3キfG҆;V/IKV$IGjd H p6g|ue3.ƎY4&Vʊ&M8$L&DI +P>,}; ϮaY ~fx?74}keτieR2+Lap#!)tgN}8XIi&f0b8bxtZ0 !!KJ> Žڹ vn4t6 +cC@}=z3k&m3j&ز{QA6ڸ9ۻoeוּة kl֯Rע֭*-`Jk5+,dEZfA\|\ĢEI.-w%1f]0-09]1o,Z7Y.`|팅= hYW '{b}kءޭ?7V|so7?qw݂n+ܗUԜܯ.eܝ>&:fŽ]-k]Pw\ߏwt@q}/e+iL٧/c]vA/GeCFd#(4a#.oe\rMB?(ykC!? jզ[H|[$>m +W@󴤣ߧ7]{þɣڙ>~fV[ӑ޻OGn?=5{kfY`OM#ͣ_]??|itjnkRi2JUwkeOkEݯZu2w[@ >-ޖےs[&)Zyd'Cd缮>Mv񑁳ZG qALL%"Em2j# ͌'"HBanQ <mxXj5D2F 10MbC!͌bg f0]ҩQ +КFsh,Og_uOů]W9e/홿12ޫZ elGezޜffH}ד&gM wgNp*Gn?<#8]kp8C$>Hp "k_ڣ+!MPÇ"(|DTBdG-ݎlX1l`3Hb("S0ukcXt}5+tV-][fTF$KTE1;*Wֵ]#Y[j_mW>(\ZP깶xTQ@JxY씕bm%rr@# N ~HDXFcxzРA:f?Eg:,`Ek+C RO9C MQl  +R!,ѳ1h4,!)t>Rx E9Z~V"s%-L,[&Ze[G{}`.;pTJ./a9[`x.-'0:S*5%v}F@: }%9$\fV\plLnR46뺒ٹAER!;2ѶB *dLqa\T[׹ +52ܲ& ޼ڥٴJ وl@{V0E+\hTe"c-Ubì^¬ZZHX(0(l t/Lח-,@,D`RȂ9. +ry$ܙrLsfHDN + _6qE)d4' fN"3$@spzMM$ΨLq%Lghx|cE,&d:r2 ' 7>#\85&s!tU'?ՉSS} ZjqK.Vk  (*tv*"h!$dOH  +$^_wν7MBv/9L̝d,oʐ+gd5ڠs$9:f.ZL)mɞ#'C^w$Z.zvm~pq:f1_uA#&=b/ECm\B-Whƫak+`bڡacY:;4ۗ!k>SƳ{)݀p|Ks~ksAmn(N?s;@ AJߝ +-sƋ'4@g4;؆Z|!kL^aaCyOwc0p_z|_L=mrt-f1ތZL7"P+Øt=lk``1j%BG\X ?ƬD)Glb퍴6y`->KQ&doNEͷS?'k'"^O \PT.AǢ5\p!TCGep6*XǙNgpJI'Dq<1G3p$ +pJ (MP%!  +(J@*%vh}+I0veSh*)l[9[[lגΦ{ l|hw> B{k*um5߬jIJD,B9 C11")&BQb49N4+9OW1Ͻ.SQd)PC7.IB$7E"D,1"H%!Ḙ#8!B /D9ԙWrDJ"B""D"I*_UYRVێVCOW,Žb*Jr\('xu|j"qBETUȈ2 q %JQø|.X)Wq35UjVqO1g$tTCu␆Db2qV"RpVq@K9R\O*Oh9# DRСB QR(MrfU[GܥT$<8/ڡ(Ўt=l{)t{j -:cfm;68 +6jytimߠؖOFٺ^;f[86rp7ڸFDZZ\iZ)XZ+h'(kVi8>[IfAWAr^AO>RhFP-V~I}8OЊj<5reOŵTÑD=*A)PEY@ɢ—W +Z+hRo +nIHr1KU*\UpE8P +|=\TQ.LTJ!͸ST"XEHEr}rErd"C$]A,H"Y(JR"Aybt/sd*86Ik?#pZ,e-FILkPtIĩf&I =Uk n:ѡC;- b&Z0=bCqY ḠY1?~03XEοjf E^#z[fB?eQ#paG,@uI f5y$hlʈhC a +- +E/l b5Ć_.e^B ,,aF"׌W摸3y!2AT Br><;}r٥\u1˵aC;#faY +QAI*N'%{Bi0(#dyJPM$RRvJ $$+1DQf8OIJ'= 88_qV9jY*X+IgcI)eg3!x!BBb(!h)Jġ($9E8$~HL8DSQOHǔ +q%)#2@Q;IU?K:v;B؈޷ +ؗ=l@BgW.}p9AC6\A;6EmCo[:"`X$m;о]&˲;0Azۍk spfl.ef#c j3ؖP͛ M B7lZhz {zA֯+zs[A5z*j]5ICpzdP:H\eP(V\+n4=łBf`0` @3 &@r:- tu.QLzҊJ V׹4{I###h5ku),:{1f_w6L֋+eS+bf]a +fX_ڌMRcSس39SvEǷ=m5_ڌEf `aZ)0CqH+d~:$dxšQxhBc= Z3lM>w85[;ݫFhܫ9M@3Rexm7ou.ƧnNϝ~7^~,!?ͰП2?tm5;L~9ŚOfr3澙d^ww½GD/qㄛ{ݬm0:]Oc~EF_?ֵh!瑧mqp}qӺi^,y֥1O3ktgS"#M{͍4>nx>iz>>Sd-^su>ݝ=6O)@ xxoh&tn44nb.V /4Tx]BU ] "0]%մQ,Ux{(g^vUaQ+㖄*nHq˦GJ5 We\gqJ*. Xd\r eB n&Ke\udH(VQ$PFABw!P #_BPXق(SEti9 lH͢]b)*2}$ Ἂx 9HvbeMRKmQ<-4r +8KjJl: D@$xqSM&"O@Hhj/IU2++$r7AVdD^*Mw1<糠nXyRWhL +AY+(gB +(xgic4Ѹ\Vәf,fyŞ;x8LQSf02,ƕμ4z,Oe07$3dffeB8(DPx٧0,+d&h%JK`(L<'eL=B I>ÉI(c $e1GLQ'JNì!KdXܱC{,Awt]f|VQӘYM1ݷhEud1ed7t= u|k7"(rPov=24^Վ{cW]k;l㹽.xeMvn)b1p;̵}Emu-^ؖ fĊټނٴ ܰ +֯(Z 7Rt\mRfYQ*W̵jQr|fD= +bQfr<Ԓ(jŋ('@iD9)"b,X40(hԓb؁^ m#u +=fXzc,f7H bLFb(IHQ 1PV@H2RIK/+ P P k. q~ iB[R 'gl'2~XFw?< +#jު:{*lb_fUlҜl/=C75㛁figitU}k4?jFfsAPg5U/eGVEdu0=Yi~)BPreCf{BtG[x3݋͈ɣeToNw8Z#>苪n\tDjD.jEuˁN^ÕW':{]ͼ'ZVQoǻy@:ȃ? }QCy琞v:ՇEw F: d!اφH ~2`ޓvphI=khyʻ8w?UqoD_5LwNwݙ=ꭟ=Ӈwf}}u~pLoH_xoͷࣚgO>}tmih4{mA[)NFtJ4R+u) tw9̫ݼ2"juݸ8.q!q:~fΈʩΛ偶J'ۮ#Wگ|k*>PpuWqY%KHo"J +TTJRIw(WSQV4CTJR9gQ"j+)l=l)* +xT]SĭPKKdK|yT7W<dȔ`\zXN)]IL +RUHRI/Tv),I +S 9ȋ{R\Xq-iwRGnC K yNɱ~6X~1SШ焥ERXZB#GhQF30|O\K~/% <SbiMgr8"oؓdq +3ML.0ҙ aa~*(/y&7qbr9Li T 2و גQ"JK`~EdyP*gK>J|N!Iq K<_)x35 "+x((Woa]wsTR$7Qk%UJ'w&gg2Tv xrCGY7!D,S0å<[0H^PY@ 2F #aj<;¿v?n*=SqRt>ɶw2w6JIbul98Lr"TR JL%Ƴ`v${(Kpz/ 8DOxw>]qAľΐlf(8 üzзѪ'qOˎ8a':"iY4ꎅ#iͫOuA|uHW͍sc7ͭGZMףz1՝Kcm=]mk@k\moT|6ބ<4|EVi{Pk?2A 2<Ӏj`b(2pFV˚+oPU߬n_+Ž^׊5->=mH{= 5Ow3xU?}{3]驟4誝ꮙnvYxƁ/]҈4\k4pчwk΄r^n!mzumջ8f⒫QQs5V-:m>\7.ZTf3/nT5||vrÅs>1.p1w +WB p63f]ͧ >:*3G>B 땾h>~Pq̨դWPnp423%/|J8bPL8!)r728/\z{BحwS® + ~vp=ڡٮ?v6} ^{Gm1جg`v?QpzŮ@u-uhnwڽ=ڼyn/zN[9W6HXBY CDy"b VYJ#  {[5ଦhÅ(Z$(YHDQ:q L2$"a{G&N= P⸚ LR5#+sǝ#fDcsγ`'lxn~#w51&m(:j4 +ţ}]iSdN8[4αV"9S9iz]}=ri(@vL*и\+?h ʻV \( @@` Tɫ:ln85T{!bhݾc]7M AM`w w9  EH ;¶=ۂ"[r (v 6A6l骅DzZ'qk-o e5JbKG*hjJ.Oeևʬmk|el]]!fuN &`Y`Fa$V* 1`p`0F% Ӓ$P M$$4DRR@T&@T3PcԔg#x R &8 0Lc0JwCbN"Մ)d`IEVdx*q$haS%1>g$RXRl$0k& )=zN!$ Z)4jPkH5* "*5ଦhÅ(Z$(YHDQ:q L2$"a{\O'0%NJSJ nόyԕ)sT͓x1?Y0֟O~4~z|3%3d-]Nk4 +ţ}]i2SdN|n"@c#H;&K9S9iz]}=rH@vLԂ^tf.-?Wy׊C%^ـ<l*yU-4`j/D] ۗzw=Fgn>jnl_Dؿ춵wu'>Zp~iwAu݀t4?t^it][k Gn^_g +󦷉Sz^5qݹI:xxΎ8s}  ̎:$JHAktٝg[VKU +0 w:\=4KP 6WLDyB{hp 8ZРrw90tgGxͳcI{l~5:zdc7wncL!ߙi +sfh}<<-4#!ssxݔzoc&Fݴ-<_#p/l4y-ZT=mm,a-X^=6rvPpQW5ՆpF@5_\5|>B(pʟ6_0Jr%^1BQ|y!䆓A, /םB tilY.Fd(Ǒ$ !!K t1Ht\@8ϖ6ebR'ۡ,ql)m3(㭌PX)pbF  1P2Ĥ;O@O84m=x{nd#jwcrS6jZ$E"HbbiD"5R\p +Er%K V8 (ZJya$$+Q{,e$"Os湚C:8`,\RJWHL=QA"=t}Xi}P^*IM-I$RvNsd%H! $ǧt<#YA phuGHkhp#ya4erq~D3gcsk\GvWޱԋzxrox5̺S3M Gl|#řbhMg,ˁχRfF`_ +PVWEUӾ<=A{l&ZoL3y@KZBm7oMYM@aݝu=46 ^'}@&(Oh8)0 %`6;1p\_چ)cn`Q(0}2qM~;BXAY.ꉕɱ {Zޓ$Ng%YL(d2ŞXa5 Tf!H 7QDdN";Hd%rrD 9OF~ۺh=_[^id?7-&B8q bh+\a1:_8V | Bd+_g+W`{W/rãdMΣf>xn~t$d7rѭDwtΕՉ{PGǗ{:ߎwuAݿsЃ?BPWnz3y9=23FBcУƿD_M@Էn;'Oow!? w"ϼ~4!e3uЭms[G tzqYA\ +⢂ ~GJ\:s +j:*&eRg~T E.ʃ(SP9tW{%(QȏB$/'XD#DL?2HWdO'U.u7ŏ $*8L$A$ɘɜKhH{DxK S5K$:&4uTIHW4>2aޑSIdgÑSoL쭍mLu vPPñM_; #!HIc1 $l~4Z JhB $f_h1`*JLj +SEvccԥ4C2Mqn^ۖBḽël \X8[L 4T΂Kg,|1 `30" YL6(B6tѠjdXgrϠY}f\QO# +r =PO4O If%J 8P*e0= . k:'(HcyBB#` rE9I4I$XDV"'G`ds8V@RX"̼XNâ ` YdXA҉SOQw~E9UۑpGW`ܬ )Yw_!ٷlv8cT(SQ1͆ɞȟՄ#b&?ᒰ2a&/6 ^u-?|y*;D4,^>aHegM'O &;QCu]~7ɭCJn;IT߅j$*]*WGzLT_=&hh[Phc'Pˑv7íPo=7}aS?0$zuBnP/}V'4 }/f./ ׷N8B]ge.x{}͢:g놾'M}_ z4K>'=mP{{DO% =I.ǃIS?9S==uS]SI@gT_ӛɯk?o,C {ϔ|[.oNnRn\FNtO[+)Y3뻝y#Y5;;rSRszrPz[i)K0JGu& d@'q{cQt~ ̙E s~AHf3tNDtA6NoXӧo.2xёl0P6GJϾl +O^LNxdžȁpkڿ Ues3i<"3C1(4TϮiJʉҶ3ClٶQ5 +ClMf gz +mZieID+! +'Z½֭zXA$ILZ YgxhuYV0J58Xˍ2febQC˘ˣeQ(4#p! 05KHCd6*<$_"RYPG !5- + (U!I? y`M"mb#lP5,@0 b̘6BəɤW#HMaE +2IC$H +# +)$ e?vĩx ȡGzx ^xU@ŋ[ēljNyZ((5 rEP:gg7n;N3v'ϓ,B0GM4#Q H"h"o0!Dkx +SֹX=#.~oK8RAyfՈ#ӛ E)K7e_* pmꛯxiO6W5ýsU3,q +@A6Q s 0{rgY҉?1O# = 0Δ>)gMx FHIb^3%lue H+|ݸҍJ&HU&5U{;ZRzέoIn=y>I^ptή.@)K JGp{-wݮܴw6ugzIhk?õ=ǵtt!C.k0v =YZ!cn,wj4,ayo"oX=FrolچM:zh[R ş uEkh+JS&ݪqՃp|wtWިp)7hsҧNxtq^w7~][߄q.:jvՖt5yLU,*9TP*8 E>4S$aR jK}y%(fQġ0o(P"*r}qR*#GF;!9P*G;b?a=}T|lY&^9Cڍv1:n jAٲO6;[-AT)*=Lȶ6e6p_ۛҲ- Yj]vkcƽiv7eذkZaOCZu˗/]|P% RNJp_.Jp?49WPDDDD(w? +fĠeQrs2KӣNVX,>U +WbpE*#H]JtZT^ATS"Jp] +apUc2*PE *@UE"Bm)U!2Be(EJBYp9[0ID(*rHՄ򼘀)*eBNBNEEz4'r0^;4G44cRrH;*AY{T9 )8^~1(7[CÐY(#jHp&Csh "{FAB{>vabSN UVF 4m.J[5THЮ-s3F #]*cڣھQCmF= cߺٲA3u(kӗh/0ѐ`˺t_AGrTb4_BT+ꐵX0՚jhrYLjRr +lA-"!XDP-[b*Y}TcI$IA/RJMéIt)%/Q(Be|!1AJ!Y8OF`W\9>3~yWꆾu7]=ؠ]?'h<=١gU>4 d1Pok BM8+ϖ4qizn<=vY: Cmub.y\fvmN*S1vtVnsykp[#F +Y^UY Ջ9e(KIQ/?wbL:̼Z84jՔD8 %[`~{5Pū,ڠ +J'磭G۾΅mo +#aM~~3HJ]ad룸&,R %p&?d-F]p%"$|%2Lܥ$.")hEB%E$OD@~g%i 8G8ʋByREZcIputr8DZ $")e9-iF +7_4wY ˶TomADB9ޚ9~ݾ] "ٞ{k7ToޚŹUK!T +#)dd&M(r V%H"BO3bTUQ:C k !d8 Eat"״ +&nj#1qT+xGSwv\|Ps(RHMb + $dq2p_#PɴF#+_K5 4``dB\FXpm̘HWd ճZ +*O8zNIaTgN+ _6˧0i3"K' `1OIJ$ӏ籘syFvcFIG tQSJGXLa#l.+F`g1R:ypt'(Jp|&=&oKG#{XlS"h$fC&1+(,u ep&,.+zaJػInOl3A4)s=1-&1N$)k3 Q|Ja63;6P`FFBml݀۲>΄ٴ֘`V/s~ŬYe|JԐGX zҪ }d?]n2=r9n2fr#H|ZTOTGK زE:)pa^t%ixAE"QK9WZpV#y43)͞fH9]M͙Pc*)ZR41UyjiHPS&)S3јt°,Ha  i =TZEHIZ~?VJ54  >A` ኦiF\CchQQE&)(ZrQ^V>-?cdd\W +`oepEx>e` ŜS`{ٗOޅ)d^,xWtoGyoKKK޹y$Z=3Ѿ 1)Coa;5M{+Ý30 @T5YdxM<4`o:ځ p~S1t9/}n^ p<8^z~NN +sB@܏lJzVABV{ 5h@ Fo 䉳l MC桇F#ce0᪏AX.ej =Ñ`G@gU,7-w,- 7m!+dyUeAg휲CLI!?w:Z# 9jKN[MIZ GZJ"*;8%jWYA kEOl.<ӶL3W6bcJ$ $!$''9cLSAVb@+iWH"BI3y3;A6vrrt|s߻s0neYrY +yZasVK(~\q^9j_7+wKqFA +rN+8R9)LℂR%(yXFD +N8$rr]ddKdeO)#CA4T,XdI(DG2bGv#IbmaRZ<|2Ҵ_,ӸO*}'FdXv-pXX@gkwLmuͼ{cg5G.M1F=a XTn'5AcI5j"p=E-fԘﵪīӘ1Ec4McT =IBDx& ̀1c g(RÃD Ӄu0 gkp 3X#HJQlW~j>cTm[VG.ه>(^-2UƐ\S]lQTUdF:[hX3Ab>embwZ߀-d' 'c۽ +aIduYvl5ְ>b +f MfjfM&ȶV-b`fr{(-̤Ԧ&H#`&{Lk"&r#r=E"A f"׭2"]i5+u"Ȫezʥ/5˖葖.֑+!#tgIV,^Y)]-PY@;Ż5H Ț؂"͝ߙM"ĜY2Nb4d0TXV+ Xc=&RL- x.ČFb0%$=O+z glihEQ4HP AUZi6313M_,b~[0iw_#[-эW㑖|96r1j~l 1+Q$ڟw#kӏҳ[>gЊMۋ(erp/@4x30Å:'9r'(ыX'UbU]nݻy{*rݮ u~V}UPNh:4Z.^o_'벷 p𺯌9Yzf1=_7<}?  47y<ѿx8cF</77 1o֓:TN[YpSVPPp3VP i :l}jy~}W$@CWӤ lr5rp_xرU ~}6~˱uc-/<\ܺkmu^:-oxOyoH낷_RXO8B&]i}ׯ$FϾ¨ H2uUֿWW=ZkYf?"SKp̯d O)^ǽ/i2սX2ga|_awx0&SV9)*o 5λkݢo.U;.CU;+Wչ4@8%g9:o@7Z9n>qt݆Z>j}>u~xߏIzQ==~W5瑮A!h/#>4a#\<'^ +,~ԉJmX%ZQ͟ 0NQ)*B ZQQ 0JܭJ%~QQDZDkvv 0rDFi8ٮ[T ղܷH ,Ղ + !KLkQJkE㤌6ʢ$#+%7DQGPٯ0xEOp >2>}cz.ﹰ'҇Wh⫺Uh,h)@zBMj #8&3&BXtk=LJĪlf&u.$$Df ɐ׉"t2w^FyD 4EH 灈"hBO Lxd^VxfXI; R&p۵Yڊ|/YYX91U]Ɗ@M)jxPWjN1>u%lP VMb+T*VY(U0lK`y"l1 QImD&F).bc% 8DbKi-a-B-o-بyV*^J8ءl9Vٖ2/,ͨXsf,ԬfH4##gfITD04d"Ȉi bTӧMpc@Sr$VxqIA P; 1B4"D@!H=6JMତ^}tjVa5H,cced(d2J<4Iei<Z; @3fH?cԣ׌=?KYs'W<'g0ՙ:қ?{;˽qzX e Avy biFGo`z~X1,uUW {V@{eGp,?Co}seG$Cא[ȓ?~x|@}=_%_dցFTdbAm۾A-ulE$ڨawOb$:?%;{R3{kjL̎괝}i۟VetdcGy Y _2VAhB4"F# F #MN#+I"wxJiY $!'L0 ~C}dPP2#i@P$=(^DXB06fd י   AXh` HBf[ OqK WO"KE(BKx4LPYpWA£fPky%gOXElIx'},R ~Wܣv8OV~;gsx a#Y[)Z{! Adf;6Ze7X6ZXvzzQ (\6tԦ4;jذV,UXV di+qKMkVY_CZƏ2JIb!>K`y"l1 QImD&F).bdHL`) rqK6قXJgŊkTF͟cŊmy/b̲ь1g1; (:B͚iƊdH3":AH{fFHE #L3L+b fL51}kd۩M 74%!'O2aǘJK *dX0)}XѠj!"@ +! eΟH80ȕ$U_};o`)cTO?V/n|r?JN@hrLրvaT*@C-U+GI,6A$ EDǏ\,p w ++WnGb(߁xj±~GM Pc. *֯87\9eA3VLTһٱ} hEzQiʶ bImQ0ک,y5/BN;$蜫=3eyϚ~~=p(uzK C>9UEjͪ-vAu}oFNm*qY-ofbc@[;_ǜ xtͧ.O@>zw{Y{}fh^ p>Ryxw=pZioaU;Z^m> Pͧch,=>m4CO1'=COknv]ͲwU8Gz|ྣk+txR:qԽ5ﭫ骯jnnm4@\-P=O4s-O͍I. Twe`5P%!TgU]Z*~,_4(f2\(+\l3h(dy,% np npC E\rZ$A("?<B֫A\ k(T!d +tE!dHB硳s" +yAi!qZ4ꔈA!UDJǡSfcA !:E !I OaTw#twJq5 4$r;欓h-fj];8PR/a!{eaGծ#}5[mUvm=ABRwD{E[َ}{+'x/?圏G$N(Ldijdx\0\fP2S׃3 =)zP7C0?BIJᇳccj0篍`0t2anLPpPe, ʏܯJOQ\ڭZ(ʞ_2b&(ۈ߼:kċ.J$oL5 .4q#D̎$ep)E +3 +2u3 i,妳2+hCsu90 hf3K)"QҥS IZy!2RiąT)!3 =F}~eDe3dpqgȷq2(ao_C=vی=QP[[i[ĎQ )0lİ}IOٖ /hFJ09OOJ:Jg4ZJTa-j=bZT[ڀ4* +6΀ `kVqZ T}*FǣVD\W z(=2ڷbo|%Pբ橰j9I}5w6)3K)YjlG*Qf*'h9HB!f όT*fHD@0$!X~=>Nj( GJU[@ ` +V$Yl IA X oY88Wс-qo<=抣_c)?jܾGb&Yi1\9% ?LI/?ޕAph9:1m}QG4B8- !,HѼ+p p+*yd3Jҋιyǜ))l7t7<^{>P붖{K8eK9PQn* ="O{5PSf۠>7\m @# ٯ&=!gW}Uh֪#j}?EDP<k:W(2$`ށ<*Z;s{f,;\w|=={d&I6jnzJp|}ܧ=nOxà 8pn秀KJ)O  z#! i6=embu=x>< ޮgP'Jnܧ=tYm}iyjqnwexq;2@}+u65M2Rnkw7D;XV"!dm@hA u3Zk֚LkfԆ{)vQiݡf1U|5C=&jȎQ |Э1mTc1k!ճC+3Q{p,s4jR]АB}i4I] +8jr:]v*"Gy\`+ve +b8BG'bV!%%ǫ +xMd:^W:.U5V]jX \+ŪKJt)]K'%G٩$VGM ;qp8~P/cQpَGs,Qaπ蚑`q漎dxGp,oi#w7)g${A qw]FإNè$8[#lvDpeo#AfDjQF|^ blFbfرs2 +ھрؖںш`@l@ +[o7#ym\ ֒5$bݧz-bj}VxY>X'#= +˵5U+ 0ǙZl|,-!V,b%j"s{S~,[f`Kye,Ta0,5`eJy +b\%bysTJ^sf)g)fvMʘ d% +^ʥ3fȓom4w)ӧyM"K2u2d$\gO$M6Ia$1Iz I`lbN-LM T*1PL%^W0dAq#pN`< ޮgP'Jnܧ=tYm}iyjqnwexq;2@}+u65M#ag3~oi 5ׇ, jciY[~>7qq=dZɀ$ + $\`l`0 N;vڡ`|I&4i_o鳫yVzve&/:|}hXHN 0Ι샰.V1O5`hnV3F8jVwA{P.zimXK=滥kpe -v6lMN6F(Qn\nр`aDwZ`5:1,y, 范B\Hꈁ^_4,EWɶ#-#m1:'|xK m[guLjJw},.VQ2X$ƥ(L&a!"X,RH#Ɨ(1\."% s(0aJ?[bOXh!Y)LƐoa"`xT3SM2GQƏg,%Q UÑt#%(<:E#X$KsM# ȾJ, 3Y.ɸBiqӑ, &)-"ӓK:)]MмuA$9%IH(8.#tDb)!$ :-xq :Jq4S:ZhaQZ +)fKNj-qK GQ5_9} p!gjaj/>?":t@q|_>5;WQp"V*|>٥d۩(;H{=tBvߵMsXؾE +sl,غI*h&9y i)ǖH)gcd  )0,rua>\+AZEHb CX- f`u8JWKBat$GQ8E4C8(أabs_Prb?%D2^Aɒ$) HI+QOBU;hVjVRDO&w~pSإy3]QqߠO{3O*eQPySǙkoE30]pfJm >On\(x5'7Z$59ڲ̏m0z=Ɂ HѤ<^ +eݝ5ָո,\C_*]ϾZ;+XDQBe^V̞+ΓJ<lV'm*ru#Bgw:GZ 4VT'WPddV- ޺~X$$ȶaND#5fJHv0SQS|k5变cQϱbQSlpSRNn[*) JLOPR@ d@MT@.'ˀHJɔ8Xhpo<Rd.P$(b2 + pL"$R)$.Q*B"`"GC%\Eh YHpYe );{ k8]:5፵j$_FŸRe\20.UE'hjbQ_sVs+ UkE UwLE?9{3G̎ >ӕ:?q갞fuBTmv橭)!e4A'ʌdUA!B9Zb$DUB "* + <4u0OCK\Js Ji4;*2 +\ř,Lt= I72 +3h0 y4/fyrDаGy2 o ĤdZ`&73#ρx'GOg߾XoH{ln]zZ>|~=;uvBvmׅMO|U'-Zbp;?ڶM:l٠z5@;8yimZ߸Fͳa9_J-jJ,5*WP*U˕<+Q!X—/UZ?]YC񠝥1 +.9J)Q1+')BCyH? y>Z$EBE ,&YEDq(+HD#4^t;Kҩ1)73.ZƣRI0QJ?JF)BH\Q'$,9I2"NT5׻Szs jop3:܃HgO%`7gEB}~םC۩hW>Cvރfﯿd<A3ɡCV71Ār|7&?[ !M-ez;v >FYݧHרOX3gԧ3 |Q}[7Ck#[#k,xmv>klQkclunmsg_iga4:ڸ,HEOkw !"-zB&.V&Ϸro}NN[CzAk(׸-0X. |ƥ h~ 8/p.\;i1G8)PFMbjϲrrQSlW枪{ֶ}WҞE@& +,(P5%rR)(ĨTJ"]Pcim*Ca,L1N8EqqcPc4xoM } }r $[[DSNFaU`7YcU}gz79u5G?E^x Czßp>6,G֡z '{9b8߭8˿};9voz*Ϟ]t[rV[ nPzf(mkF v-E7^4MՈX6Pת֭aרBXܳ6D協@ T+d Y">x_JV _k +|o +k2˃ +`#%_Tx 62 Fy +_8M.ᴤܻf޴ZB nRXV 1* +PJ+]%Ji '&"QfޑD&,b)KYRspAN&?3hۭٹbj'S;mPmrzPO;~s/B={.=6[Y&8L&~alоn|;c<=W7?Nyf~~* &f +G]qVG7%o  n9 .u@5XP[Sc[n +J[_;YeUn~+To/K8%OODGvy'_'aM&{ǀO&I㢩LXoE68n8kǬ3S֍BBϤ0-ju6>z91f蘅z]Eݾj}86pez4䣱rܭ*m֦ +; Pॾ[=Pv*uT)mqZZ詵};ofތ2{1;n56ۭTĨ|e,GdEJ2 +0d8=ÄjJr|:l212HINH #9U+ή+1H\DF|q.;읱Ir޻K$::({"$v(n̨KDӑ{{X[ m"6-g %JNUg2Ai 9"e*%-SJoZ?@m`%KHT +ŒߐQ -'hJAPDsԄր!41zBK5!Tr`jq^ᢕNNȂԄl2B}=!9&p`yI(6BLaɧ%YST@7 UdU>KV(lQ&D@ŤjrXQY*r)<UPje1,92ޯRXX%:P9DI&i Gq:GfW#]Àu-sO5,*/ ,G䦠PWr.8+F&;IJ!ڟD# `xKRb zة(3su0g*"" x! r߇ +rSIMjkE9EXwQnDw5ygz췧GR|>wQKA +sHlhk3Y +2)A$V O7:FAN`$,Kd]N +V2吝DB38Je&`zB2 tx +ԓFK#߁K>AqXl1@)1XB Dm@!QqX\ ;F'br9L2X$ 9zEaG '"#!^\\8գ!"Bq=zq8$lIhNО@-Gp 1,E?ݻx4<:$`VFse5GšܮzDxkԂ[-*}f.kgJ0`mزISQ7*EmڀA>]qJA)|9Yʅx:OˀA<)b IB%cZV+h42 J=T +TBT4C(*1}`(D +uxJB\Ee-9$yh"~H4Gżc +`6M!p/ Av?ϭY3U +|O~ݵZ^G]|ϴjeқK-OlƷ5Z~EԋT[oZ:j-=_UY :\iy t]Ӎő{7hfv!][zi7J2uRiy s%qui:rfg:ۡ$G\,-s1Ɗ{,=ĤO䍵1&ڢӧڢZiS&m2ml2ZR'Zl;:eT.wn5_6YԪ$RDzy8IPѽND¥U;i +Jf\Ce KL%rL [X)jZa:T+ :4{4p(7Iv8YVU'. WWx+jmR^RW⊺J%¸ ! +ZUTq\UBuHc{ ]B1\J6DŨ/Sy RWr5RSR]. lcԖE\ݪTuI&G! HE\K fP.4T|Z|t P|AqXl1@)W0ZB Dm@!QqX\ ;F'bN3!0Ɉ>Dc$A9C'ڇ {qqz ?T sp{"Bą㐰z'A:A{qq&$@ײCv + + 萀ZAΕ]; ?s4xttEs{<QP@ZugkvkUAVgP+;+vұM"#{ߪO}S-$ZŒˢ4,މT˩$Q,V"*r!Xh&iDD8ЂpV5+<1/f8&Rffr&a6R@" +` PhHӞ;Pa|v%1ܸ5Ҭ$ٜ-u.p_v@ĽV6RkeX\D[S,.{[߼ZeǓ&&oMnz܌YMNPjB քEQ" I"t^ݟmZ +̙#Q+s B˨ f!  i"!E&pL!PG."B2LBq^Q\`V%FeiQYq!TYϩ<- ȊZđUy,*r<YUJ^+ se7YYX"+HQEVT^s M%K5P9>֕3zмu 5 .]<# .EO܌ NPnjh_&\l +$7D>b:uXr4C։L;0aF0nJ43"+Б#p*PJ͢&lxk^];/X{fD"Kn#2Qw%\NP&z%ٛ$PY!_&r{v'(V#b6έjڱYJ€ݡ?DٖOO O9/>dه<֧8'm4Po>ZQni=/`im` zuuGṳ6N/ZVHhM+|[REOƭa.bwZ\h+hc؀h%(\A,dNtZN%Z̀րf"U Yu@0-O#"™Xay03 503 5B!T@yB=):B>K;9Nj^TX7VC*լbXh5C04-CQWHLT~Qx%$$_e.s%L)haj4A´m}-7=Cӎx~ھm(zcіTE?cz$vV'7_ MfΟ:8$$dIjں*ln;DbN;v$YȆ-k{s''xpBw;gC$֯+k\Uce圙\h.LgL#ƍQ +Ne2fZB +4b4MXmLN.Knr/uw+u{zk<>G{%.C=.w4Xi\fKTxV:m@;ix t:.Jwàntkxa3kaa`̔ iHglw$;0 d#ܵk!= /OU; +<\oAZhW5.Rn9zYC^] Hg'6R/噩e:gjMG&ln45,)ifgI=eSc g_턫O|jxUom}Rhlvu7]PO󱗣˧3G^ZF`xc@@ΆJWWCTOwCS4T854 +ΟND;uRk<]u]5Zv[PnQwDK u#nPŠ2T 帻PzQP]% e=^frߕrdp9,(R\w tu2C`i&g܏}Ne:`= (Ӄ8 - w]*%%t%ⴳ-%ѫqr(#''?vs0x~9foRmkO.٢I8mC͚AM1f%Z{=i&WIJjݛjؕޯޑ.]j5H"Ņbqc 1 !'j8\;o8T-E]#˲Q3wD%(KNQ +///C* <ȿ;\99"g3%JQN+ %`t4(|x\VhDؕBĪbVBF+  1Q܉ +,TeܨKƒZ?y%AH]0ѢFfXsD*1>.RCD(p%c `Gѱ}db.~bB$b2RB.|&xp+ Hdp/CaKXX@ag>slKtrh|jx?o$^;b?\qwA]qͲGpl ˵ Hz=UO0߆1z=-%wo?[2նze P^ZV͎5 915"lM)o0-'H,;ʘi >9F , FDTkU;*wsmAKbwOmAѧ@]heN5P=M#Ԭr顖 +J htT; NC'EqЭ2|O!R~;Lzy |?l0B? L2`! 鬀펝dlv-g#9~;uDj Hj8HHu '<ݛ1fNLwZ;_۔[r4H|]uh /V,i<򢣗DEytr!@$ȼy(b>RPO㉣y<)*yQ=Q F,RQE{(%EK'& '#nIIm.n"*du?W21W (s587nUQ.,|ܹ"]WiBh ܾU +] W`]R.j8ݺs +ofkXˆ,\԰vrrN=ݎr9] +%]=f||?G]PWO$(^ߦ|;I"ToUovL;֛@ųfl3:{nD1#~9ޗA9ٽ+׺H39Ӭsy^#uߜ>J cvLٗ&H~L>Ȅ} 9̼X;2%K9M0ڴ2_|g%g%žOOP <+NwR/4$cEhʽ]@[Nx,A՞n+fft?t=z#QRmF ?w;I#60iFIc<u׺ˠ]6Oz0AdpuM8;&Vg$m(d i"]@yJ 곷L;LSv4Šaz[5Pov3liWݒV2nzSHB{"^!dn +dBqBhn5B{ww?3<ϫW&Wp3Oxԛ @=:K5<ĩĨe;-\e_E~O/Z)!EkJa7XPH,Y’KHH$t2(hr~OGהW'* +ՅkQ{]MԖʉR|JBReRJjՒ"F/PF9QMUFR\/7)@J9,(QcU9%QW!JD])U2FE +y:@-cT5&j6i@UJFx[Hy֧l ViVH- +eYY[P*"Pyq&(L22tzFqQN! +t\EPT)EuU/(7 +&9IzDNRHfHcS Rx4-JwD޵ +b8g`"9SR+ +%M(%Fp=">wh @Fl-Ƅ]/D!gw%+2y?'Qi9=VYJFYPb^>K)>=)bKpJ/1zĹ'(q=yus3gERt +qSřqck:A~A_t 2>گYph{5^ ڿ[ hA۷+S͒ݡ&h;vi{ {#صMs +c}BlۤDlݨyشAqز^@;0 k:H%HVZ$hn\U2AkVJWZ@bˤ^beyL [f"$@"tB ( `,ZL#T* C$r)M*L$K&2"IR-BJ"HN?pJTKTK\2Hد8mͶKڹmMsLE:=șنzm3vGx=fr~.8Gj!>;{_7ut1~"ABw筛?n؄ 1?™nP ^WCA췒B`N^?2?x9`0rLwiQs.8\|z^2o'we3ݴ{G'GsQ htڪګ@GW}Vo^> /mレflu|enp0`΍ 0Cm#cn`MY[~Yѡޡg3 +GWW hgzڄͰVZLw=`U;5ΞU.n̨[hM^.h>^^(sNBip73P4 @=h@ևɨQ%N%FYKyQƣJ%>c(N|XK& # +Is1xdBK񒆑#%Փ +\sv_uՇdU$P$`cMvvu*; `Q'3q'28xO c$R)ٱ0hSՑTGHS8dǤ0١D `p2xN&fPAGaNL~G@ɱaX'&Q!aCuéPw;ɁAkGcv9Yh&vWp jo#=nٽSݮ9]8UDna"1;ZqؾنχTmdAmh jFV exﭳ6 nfj,֭4_mm׬0VG)-bD,jF\fRKͪV,%fLbH/6-2 L % A-#zqh DϟgTAʔys9 #}Gٺb15{54C/9]g4KMcH5ӜvzDMs0qr8ΏcF i2Bk%v3Ìl&1&6 +c41<: YE`aV4`E*AZ "4@ALTLT?EDm^%_r{`goz`Ho9ZO5_<# s(8tyrU8dfU>O\){1?~t/_07޷wq`},Ł 2 5o˳yA}#ϻp +pi'M(|=|5ow/>.=?TyX +-}_ +|[8]<,*.x*ѽ+"/ J<@񆧣 x4ZntB  +:>i|a#O? +4 ypz /x 0U?oVhN?x]hu 6 +w+Tʕ}ͼjw Ym߃P]+hơ6mU{$zS;U7f쮞?\5=m$Y6oۢ[j&i !\Cd%!Pp7vUѻ"9mr'+ >RBALӣ~C 7s|ͨ~N)Ds"} ‘LPY +d9kzטHdy$\C"*S%H2FQY@p1T+9(I9 Cռ=,'ګb(NBHz+%ѨDW$ +J)Ļ,2<2lg\1IڿْgUEk*ݜx6sq6g4iI(Єi E2j 3E1=4͓fVR` +8TKs %P{~0&€:e$S t) ESOQi{g31$@DD[Dn5TjxD@4& + 7 dfרI/=M3xjyg~hZdԲ"-%ъ5Di"40ޅ,6{Di4&Zlj"i֯Ѥe%is3RWsm Yf(@rN`Yv>QF)(3`B"Y0Z(x0*Hi"?Պ;ͽ)M.̜MJ٧8LU^BPgגu!3'lLFJl4e8+j)~NIũbQYPv򰿄C8P﷋):Xqm!'kǡ8`̑hQmz({Pv9wa ػݎjÊ"`3ݵ٦s Eڎ 6m`gԶ%R@1?6l\#`mX\ZJ@D~#>_eELeb'+9U+gs}3.>2++VDpY+ƒh)X'bk"3`}e -tYdhFBiEL>,¹fs@p gdgEfTL39af3gUzt#b4"l1͈5CR8ӦiSN5e`.ɓtԤ z:?}xC⌳6"6aPiQ(+CZ!Xh7SZ*fa2iF#YH3Mܱ _"a}fS4EeF TXXsQZH㯞a¿¹t/{o}W8[bgeR Q/(~E{jP.zʬ8_z,xou,_]~W6o93hcd&3^wj9w56=uԷ25jeV6oXr7+Sr-zk7r]ns<zPrnKyw ܢwtЫTTKj.k@Rsth|D%+x<ګ叽ͭПzN/ݢn[Z t6B?v6@O䵬NTY^'PeWUGSݫNҠ^M@s{w*Cm9+U C[ˇ[Ngp{[zorqͫb^gϮ`HSKEk`ݝwMwZRvUw5T}EnQ;xۅZQ}EFRr׉ +\˼%R(]_BDZA7P'ʅ`=Xnf宿橻n$h>t1xI]||ŲT( +0e{ϒ<(]Qp.!dcI@&FVzi=uӲdNqRvb+DqcąpL7*68q瘧Vv0eXT@${eG@T5#;쪒ECvUBQSة`+U=m*[}luyom_=ej%bPt[ bkǴފi)~|k]Tמ;kEF?lSbˁub1ޤ%0`$K: 1`!$M)00^F |3j̘12=IWFRC)"0RҒAJh^Z=3,ZOab^DH#3B% 0 ^{V!xAp42n$4xBFm& G ;y`yN^7gu]g(x0*Hi"?Պ;ͽ F\9l+OqBPgגu!3'lLF}_vܮHa8PrtM_v)3\=LQA@@AC]]hZp'ނjӈ\2-jpr!c.Or=phwO#e݃!WÜa`3oqlp|4Q71 NCa8.{N̓_Z\:x-SNS=:y}ݩ{SOY=}ӽwizc;3of&giif̀WW`z&ɶ[Kf{6I5"ܮ:9nN<8Z]mjۃvNM*{/7Pʉ6wvpvUL_+_-v}YlʙdJ1+t٭%/.pUPPE *w/RYho<倜w8CBIXBgX'&*P踣4WNpXG&:pćb^ʃE&BXP:B R\Rì,{ zʴ5%29ݲ̱{nBwGX n N^Nx/ K-{xʞC B1n֛B!N@w#*>*Ʈ^_%YVlJOGuO#>i,q֐H? dBVa2SXjJ4)dZI99}gw>RѪ̙Q*?*R.өd)N +%D(]0FF8)40BbWeB- 2Ai:3L׃wϐo +Q1"F\jy~;/JADO7b͈#">ڀ;h 60 G1( rNBRzDTn§b%q¦4aA:IhDɡ bRVP-Œ a`; Q`V#dcv+(ޏq(3Lo"H9X%,'e4j:7tZVg_LW/0ibh-  \O,* +'Pg<-GKčk o3_<{Z^:g\ O}#8?Q9[~ԛYuMxz3;c3>Uk`1ՏѨHeQ~.~UCmc*s6Ϻew^p7]|WTYQupxl^uzG& ^#-ml{u|)[ y,kw'E'^?vCU=kYCPU+)TqU`oh;}~_mCګU Cͭ-mۀᎶrA{k󎶪-]m-{ x^>l+jҠ,ꊫNGLTHSr()܁ +q9DeuRn$bQ]. 8 |)tWt;@u\5p-]_qM.U'u(.d.a\EF>9O.Uw]{#w1΍lg0N`d952120ҡnN`18}pP jFg@>Qn]}j8i>;~(.mPb~D~-`w_fhWoܦ=m7@;C%ɬuZ#ZnkGJb +(6"Z.![K.Kn.I6$Tjm˭kK6u&Ϲ$dѺگ6.OkdvޑX"rKjB:&0e"5^aֈ}SZ&0qGd$ߍAC"Xrܸq"F2J jJMXZʋTyi(4x$$T,&,f^ `5a FUaϵ1#TgIx. VN\=rڪrƢtH]QO4u-Zp팙 +Zyf~6QXJQm__6bQ8 Ân3- 3*StE=9{<8s9{>rȵ{9G,2|@ه9:>uΥd2_'cVF*c#LO+h)Гc{#e{'R~igڰﰾ;bv:bgol=ɨ)v%[ڹGm)JdGhS}UƎضކHI^g1[Z6= iW"F҆ذŠXRٺ6Zjr5xT^ZPVzbk"ίl1HZ#}!.4`ObEY7/>(?gZ0L6o4s>}2ۂ7gn kL#`xD͞ao$)?݈5#ch(V€GDi: OD8KEQaDD +ʊ ӄMUb$)&2I!ZECdh3b'$XgBN!'FZTAح4ƣx?ZQB̴3Q>R8#`ѨA H@ t:iY'1ZLW/0ibh-  \O,* +'Pg<-TDvf/{r%ݳG'p/qs7}:j$9}h(ފ"(( DԎӎZ  H\yc}֙w|5X׽1]>t,^">߭sޱFer3b I>aˌj>`gʹ2fc*$vnΔE򟯸M.4., *z UL@UPMzHy1܄CBj֦'Sss K s0Y3a~]iF˭K4OsIGzZƅkCv5%6RBG=l$8F9䨍f ~sk't쏼y=JZ maL,UXs&hD +!y>;^RǍ%U 1)XD BC0N8JQC;! !OD"$䁻 AŠ xdS7\GHVJBHAf^ѕy9xjL-$Jl%v3Gc%B]7s ++T`2䈢2𒔉]FSpd]nWӤ SRX^*G(9Wxlq;$+}2*FgU>({N+T~R'*Vpt! э&ZjAjD"fjD٣ =&p8F>Vp*A3f'㵜N +kX%TZıA~;>G3EFګBp"t`FؿScݡfnWڳMCij:^ޢ>5]jvDkpԜmT *V[+Y{(5yUZrNٴ^o\ZBl\DlX#GU +ĺoFjJ9k +V.߬Dr2ʥܾZ@X,e"e |̖.AؒHRˢRn< [0W*2#s$5N(al11wV("bl` Mp16'<1;L.f +.f>i"^TiOqĔIBN_N'OgD(_L18 2Q+MZ5ШPQC|)eJx)%4 +УJy$>"TD"$E> @(BO +q\ L#pF`,<l=z0"88>;s|h9OsPqE,Tg)gޥk {ٽY<&~ !OGg{"'YE|[lys7b I>aˌj>`genc*$d[#yq\,Sz(ve}Ϡ̗:"e2=lCʣx&۠|RUW[Hi*t"QZ{zz7zL[=g; ρ@mRNc'h,n0؁݄n8uzw_. xJI}ev}?kVeC\mjtuJj5BVi R`6 =4R:j"M&}$!!-::*"x-(uګf!@!sHHH 3G+N|R[2q3^İ:1g}q55{qX+2olSᵡZX,5F֣hh[(ױ̈UJ5۠)yQS

T㜈( +H9#9_SNaNяmRs()SɥiJC.   !q9bo<@ʀg0Vg$b46]ac04P/_n+WU&S 0PWI8^UHR* SxU.#'W +TDeWAV`gPMܻ}>#bCn^,"۹sT +uHs\>q\FI*䖀QnJ,[S$Y:b:,)470m{`.TCHvgsҰ{.Er/lo!~?e͈;;c6=~y Plٮ)Ge9=\Ye<ٳݹ0PNEHda\@ez8)"#c&E;JuI$NF"FGg/"##ADsQs6(?O0?r78q3ֈ +e8ɉm@@Q#P'89H[]0ĉ֢Æ]mg"k"skB (jXPhc`@ͱ|UYݼuZeiR2r!RQLAeiKj9",YQS>^jC iKʔL27Ph] xEÂ;>20l2>?YBX,7=ZVt_^~uvDeQVEV$yMTRĝbQULwKG*FU%qPE/h?O + QY騪b=ꓷ L +B`?8P/R*47'+ruX嗴dy,WwI/E%.QR+z,010^  Y< nz*?H]I7NA m +5D +D2 +F!l~ ҄Pa'$ 3 4K6ѨAF`iLdQRHH8f:~T#î9#z7C<i`qϑ:tP ȇuXR_>{nH;[dzþX{whk ոjv ڱM-Km`̷hx6y>mT5֍><[6$m6W"|6SlZٰNM_냵5J RJZB4Ϫ +IoT+WЯt[\eJXn8LrBZfyFd3xP$AGi)ޗt3D@yjob(4Tjh@I+T*@d!)ha4C !RrPZނ+R-R-sɽd}M~@Ҷwi~juzK{uz7efNӻDکejz?cr;$.~Z)?ox#RضEM"4_1?n^b~"9GhD%f p os{$l|# bmEg C̜ubh-CkD=\-9VC*;4vוvE}__؟5@M3 lI-PWKOGk'@S\nZ*\Z+gzۀvV͙NL_`a=3 UMw]M>?xIw@?0GO'?OYk/}#Q`q80L~>Ƙrj1gh,n9#FcԋPKH }vkzl.@p76Sw֖~[\yj6[y~Ȱ,ج uQ@`P󩡆C O414?h밗O~qc1&UƌEY +8 ȹ>PaH*w*Ǩpv1E40i@:V5gGQ#^SQ Yul'hBꊽuX9{U`q+}%& Tq]D%8(C8CpRv]*xE"fv%NF>* +eyHb\Be:-B9.n#"I, Y12Ed ;Pi4GgJEHF' #q G'*Idgg"b1D{{4'a-*!~NOEpZA&ĉl9 @XD3t&v(;-!4f:%p=ڀ +FN:LLst 51(r (**Q@Enm %&3]6Ƥ-=M0CTmT}OMJf䉈wVEB8/D5 +uZcvkX2,q0gV|Rc8=f UD٭h[EHBOEH򐌎&^ VPJhjT`Dq4cP8)Uj$q0(<(ϗV  T +{ 1T"@&< ΰ+d$!)0SdZ\4hdjV2ߵ}rM}# r : ۱(8+Jo-ʊa7c%FMVZ@cey3rr XiY>,_ijAs?OK`ruUrC 9w{Bwrt^3b|6g.DE9F + gܝYF>fܺbnf \D_2B4w⠙6O8ͤH/.qćs䜣%];Y}DAsY ys$?J71.[N0!3>E@ɇyTsᔙLDگϩ9YJ~Z 3J tAe(">ekNwW gN#㓏 =;nص0έz>ޢ #XؾY,m&-|Ėz"xgz-e=|'xVlZal\ +lXXJ%ij5Yj|JZU+4V.W׊T؊ej$}RҲK>XĖ.!g-Vq,Rα8HY>+Ȍî2!`9 FL@((=Ρy(&8C:LΧ)ZL@%*CJZJRL(I$LANO~ +),>%+P P \\&bǷSv~Fl~3vPϣ?vџ{3MԏoGj7ַl͆ mzb^?ּRokڹW5X9wcwfT2DK̍eLvߘ~|zV }?[U|׎T?BUnRY-TWbb;]MPW˽Vxwty0 u=.z=(o?z?xؾ#v@N? u0;b A_^0F u c}\D`$߬߫;lhg>{0ihh}4{{upNG2ƫ0luO#}in9Z0t4ΌتQ[̘ըn{ȷ寇u6gh{HF_%wPek{RjTj)vQ<Ɯvګz{US!\Q;O9 '[ɖ/ZlwÜR5"~Ou_=%|n(Q@!_DGSvD|f"<+OD|&.Z9"}\˜|zD;_+\qEsdyMe2ܭ,YgHqGZ"N!gܭbRIhM䴻$+՜$Ԓ(Ԝ+u)uj)/ JmDb}i@=ȉz$Ifyq NE8$ >u$q0+u'/YŊ@VX5=0eafޑ&Q~3>(R +v11#6f2wda̔&QLzVvAD(kǗGlD~!B$~"VVft#"x3XԧFVgjF8 ,ozF9ȷOױkd_) +4֭ҋfZB' Tr=)g2z8#T{D+jy+h$t勵e4>-/TKhEhȥ %uE tZ_4Uh>Q4wʧ9h'3U>͞"fͤ'}Hj74Q% fIUf`f#A8ad Cᜁ%8=APJ8BSzA :V$RiZ@GUj@E4ΔhEQ{4܊)K2i)JPVtMtMs +LH[/o^_4}/oN#E=M]^4C(i^ +AwQUewK˩T$;-]c?tV+eD{whVwuyڋ*w PD/ %ׇdedkf;R/2AHTKDOlA@hX:RPp^Wxp(Lv4^˸)'$E\ACtݏ/ed)He\r45i~ʰʹ8EYWd$E˂΍4d\2.Ύ:/g8sfi责Ԥ~y+#Ə2 N:7Rwt*bP6 +Uvwb::>T!肃б +(LѾ/G ynOTCw]v씊,"l;K;JB#JBZKB,s~^-8$8P{q~[YȾҐҭPxk1`[ְ֢F{b0=aZRaPi0@cR*zV( +(S`ZRa H%)Y'ގ'bڴi5OjRF OjTTc*QU<AĴk %1uHL4oDuw2XV/HWhxwTTmUZ;)"A r)%oZ#oXX R܅^D^ +Ƚl$1R ;Ȭ$VVf"uMsR0SY*>%R/r^YYȳ\x잿e>H80&װuuWE +%)I0nmYwzGRDHs=Wo_ݟrOC?MOmߪO>b%!>&b|1$,l y19D @z|aB4$؟Z ?Z҉4G +%:~r p/R`4= P)qNaxo/w=x<6@<8| L~(雯 / bt8 ÁҾc߭c./vjݡcٮuؽCڮmZoV wlbbo֠;73<;6i mԬU<Ȗ j*I BOiojҲV[ yۻꓚYdJțiCnYZO˙h3yI9܉r"u+pIPgdܿl{x0aI ʪ->f՗=ng4u63u3ڮv3nttou~; ٌ ^]@v=? w2PU kx %kP;cK`l/l6u`vnhe hyèkh~hk8{ t7M>k`=R7W?ebtLXMYک~K [7gf Z솻kGzG{FzNܟyVHϣ鞁\fmi*5 N&tNV#8Εі%VQ3Mms1sEt#WsƛfTTH6V۠QN4my-?Zo\6߼`m̲upẈkBv"ʜ(ed W\(QD qH9[".9B\N\dwꂈ,2Ed8qqjvr. gEq4#m©S"N&"5uELJ9N$3aI.$Hp"ޅ8$[H5Eq⭍"`p]9v!čsBb&_0#U-#H(z焘5<# +x ?>Q?7R%*H:[]Uқ3#EwDW++R[ `wWxu{=7Gv{9ټQAieF(hdr1 @(3F7;nѢ ħB-ZQS(|0A9h:D@p&`<W=ݴ2-t"[n$?"L] +KVJ.#ؕVz@f+jZ%5z+_(z;_#[Jw9j*:8`0]nAʲWzQ)CJ/d\0J28k fĊ2 +3N7 +BQtXY3Ə}$Di&Xϑ5d$SmL$ +r>H& $Є $8GN.E$JYQoIKXI fnt&03K 1$,l y1A"iY ,_c $ȏt(MQ|I?B:C¼)ߋ#8G=`y|t>F; r~"Mt<3F JӊP1gP +*]nI0Aד0w +'vto;3pkV]Oq`L"i Yq"iYTdY"҅4lC.IE 0xpQ݂Xctm@ciӋb"'"t$@F(uxT8xG"2L7aZNl2gj60+D-k`-dv 35HA3xP2sګT^N ӧ6UOB}6Y-2IfrZ'RJAU P3 `&7*Ì1"ǡ +)^ TQjPQ* K(Å$IJ"!,"(AP3ix +6Ld"Qb_$?DSa8@<=i %qB ~}Ä/1_~yOsH7^!wo/#T%W?S zg!.hݡr/i+O5l  3sƸ>]]U#Gkghfoy7pq;Y]lo/?j=TU[SK;#ƇV͓ .;Q2=A!ҥbuEzV9Y_q4-r6޽4,]9{ p=rݥԃk_ 2(%(gWpȇBKROX}(@!σ\Il ('C!,ʱ!QgiS>D8rdHt܃cG}8"u:,w t6D~jJgg Gg%gɫvm:> }Fn;ko`V=[XlzhFYzZ'Vb +$ZZ-K\bk͠nXJk|Q+ONm/ON(OY nWl(_񂓴ͱt^OGv{uxgv[8wE;MP/@ ̰THOKPM1Cl7Yڽvmpvn6KIdʤl4Xھ ٶ$cl]g-k,^m^k61#m\m՟dm\mAڰ YK6V$8`&c&,7!q\@ +2ˌ0v&,_̸j, ,jB!$H_Qb1>1Wq |S~9?2V3n glRǘI>WF(%&#F0 0pT0:hqdOU 4֐"V)ՀRJh=IS^4Eq$I CP$ .، 2LTьf4+? p.7^d`[옡{<;[ζy߻y߻c͏.Ƕ^qMm ?󗮹?sǠt9%LKlƧڦSCqL2q^ZݤPHl*:k]̾> XxVt5(H}Qfڟ2Pq)%qShʲs @GUfoj=ܰ5Ay@M[wz9<~4-wZi@t7Z6u5vp;t@Ϸ9 ?spwsw/`&Q"`fV3p#b*6\35+ +?_|n\ hgԧ rAԊze0>˗8-,_ا e ~D-Yöxhgj L.Бgk 1fi;S͙3CţA̞F̚ +h0}G3m9E1Y6jĔI*Q'*ɡ*o'ʀ&N +O!>G4a<G 736D)@c$+DJ#BL̒eC#@ 8JO*ca8 Z\ΧB4֐"V)ՀRJh=IS^4Eq$I CP$ .، 2LTьf4+G!0䃽uֳƾ;uŕa{&*xa[TToTCE2)"7b0p΍+JDѪ?e_LO4=(kRŷS2m R}&G-Ĩ%hZN>\@F-{+l&{gYL{o}0 3a¸sq +Q ]Ţ ۞?j,w/K w_P~7i<9#;Y ŗ0h K C>q3yj1.w> y MmK"ˣ;}H{ϴ,[ |(MDm}Zϲ7SʳO)\؟Vl<JUS֥ROlmi]YZ(WN-,O0ӞvD{mM-픟z[ ѥo=-.=0M3iX~Y`(j^~W坍l:)N5(N.MnfnWc sC@zP9Hik rPA3W  C&}ZV9dW Y}kז7ƎSϗuǵ@YRuHtyzfjJaEKC|+[=v0׳g)q@e.+V r+;=.p4ikz4_O5_K?\M7s](PbkrG{%#ߋ$P)V_~/bm{ Qz6(}ivCi6ѭ%wzz^.淒Kihe]\OM;c6D&)uJ}JAED1DaD!b)""C'MĐD*('5 @OL$sַ0}\FFt#_!+#䢢,(CBAgЛ +zVPDo)Ib7s\V>iJJ-ѢhaV-wR2 斮]`܊ҕXal^iΩhL]LU S5.%T5# 31ggB^NW)5 8IxABOh!ilj!f?3!0N!uRb:3Hv%Ӊ:HrIcSnɇP3١8t<Or<#Y܎yud8OG;K%Ҙ١Pgػ}==$l1:?h8.F؁ho߸n'YlA:AZd& ھQ'IgllޠZ1*lAk" k Hj-ddj5걬^Y; + k!W~X-'ixZƿ[ r[0a˗h =, UvP[Xdmq`%E *c21WN%գ۾|똣KZBQKѴ6b }4,cѼFlw07/|0 Zao4{s7zE|1 (LPQy,w/15L Cps`A9Mc꘥1vǀ!P ( Ac3}~;Æ8^Tkξ_?Vӓ m)[_)4LOOk\#T#Y$( Q2֝Wd$aICIpkSowO{n~Էyk')ӭRL%FT)P:A(OuUFP"TS;jL;.Iriȶu6M\g3mP8i2E.bkg$ R yӸ R0f&F?ƀq`O?uOGI68J\#S4/#&ϕ#WtV jFa[_\[^\(nMoAN<`#c;R7PR ֽԐ,- &+I#w}&_9Ov28!wI%4hPck#:=w9{`m}T3ɲњ-8TBPʴ7l&2ͥ$GKI$cTl`(gkL$GW!P0y*dP"?Qc KprX=,d vs#T;.캳Ln36&,C᪳vh +8+,bdr/Mi`uDQ,.^vrj%풣<-t., # -I6FX#'"DMԟSu c'98?ZCpvn9p5(P$9X +", |Ep@yo,.}.eNXQ"E<[%4(eA^|lOePha/KN,}b|\?t<_X$KTSb$%Oa<p +1 _̙3"DĽBx +Xg/L(/;o>ҷ[/4,4a[!gH2Q=4H*F} ؠw) +RX^AA,7yzLP.|&u19pA!rR$,+0ZAOUby)[}9{䔓<;ىJ!A +&YIJ 2U2;j!,3AÉYzQ%dGo@HATCQ)ݻa:NI״xUgq:+Zܻb:De-s[t0G߼쇊zy]!=k]Yy[9 3;Yyg3~^.E ~n1:<:[Tqtߌ?#;q !"k=8>Ex!N"P^g&6#~ױM^{JOl>g 6FqgAB~3p'#kItB5{Br"`~h5~& DaoW) GozcYιO `z`,e!իYUbO}$=Ç%$O\+2l鶶2t[)Pi%yn;Ui.Ք鎮6N˴w\m@9fn!̭@j NL@gx4Iꦼn_sgEtB-@ ӻfLfcN Lmp/rjɶ$\G?ww%wHn|3>z mst]8y{^k,/:`umt@qzy{W=M%Fu(KVVW U8>űj&'j_8Y-VgUbj ;Y1r핃{`WAm/;e>Go/]_}wV]붊ꏨu9#=jW3JwS azX!`*)rS-EC\ +< yS+.jxpzlvN0t3;\x^|Ql܈k$\4 +]**=Ⱥe$q)3K@~knZAb DbΦC6TY"2Oʀk@F"ΠNi1'i{REd 'PzY#8&(hO)FRLrPb8(@$j +IDxz/ꐿfO(uj;P@l$y˷E5 "9djq)jSnW)؀XX,Y (F`/fWP;[XZ$ +Ϊx;\p.y&1w`$0YBb"H(I$Ii(IJMr((h$K/(#B4%`NJzNxΠ +$`PJ! \8H0RBFp! |Fȥ +ELB$RNAUiBTz!S +Bp!ݼJ Ӕ[r4۹J) uQ@$CUo/&W)<dT,7i":a9ڰY~k9:QWԵl=jND+Z}%Se1*t#.CO(V1<u錐wZ3rP1pS Ν2bΞ4(9a7CtH1:n3SU9Ĵ) +*ld%5c +3}3u2n$?R4QAM$QWD5q< c1ƍc0V%bt3&!G[h,d1qfc1Fc`0F=Ӂ=Z*̈0hHl kH)J0j5) sf)+,F!W@ϴ 3 -aQ EdfhI%HD*bFjFdMҖ5EV\ױƻT4{ +?=wEJg{y u\Š7O7wX_Њg:fꙅ~翠z B-E=s ~qOBgDP ׇpNK;&pOFcz>Dtrf=pZ\Ͽ>[!8/>Js9Oyˀ"? Up.^5V^Ín[#t h.ؾn~jv'% +}iiCw}6ymnt~ Xyi^~*4A?xס,u[YeT_5TTk 釚ff^:*[U^6(pNgŀQrWzUa>8W1889挨 - gwH&*e_{Eu=}{K]m~d:*}~gp_GnG O{KW{٫;WmM@,wH\DsUd@7nc@UB-cJXE/j´B۳g{Iƻ{^)iγz'zYM|\#n%$ӘÓ-"+tSDfʽa쩀v ~HW9pgα됳4`+tq8~&\ZGo=׶]釵 +rYE!bN[x%($"K',.jF\ve\%la PG")(q#,DEul="1sXyDet` 0#0Pev3bVJԞ-fA7[׮-&f vl2,}Apm[o1[יm8*۴Έ iA5&ĺF=W:C׫Hdư֮4V5 V/_-c Z@[TV,1 /ֿe !}@G[2_x.E󴈅s5<:|5ZĂY 7KM;SšA̙F9]5ʌiJu*|T5b bTԴ)QNV 2I%2/>S5i"|"&*'#+&S2>BA[.Y8 +(Q@D8d`F8Z9r)V#49j AS*IP)iR  I]AIA +(\*L&!%D"c0ImDxV^.7e˽Xl|c^ p݌PFֿ(m [oGwǤ;*g'{ȴ/]?]3>t!j}AiPpۋ)cR*s/1?a߭@ wKP|"8 +yI4*Kcؼ+t* Ug0j2GlwKnX-P hc4?q~bn?) +}p|p:tzi@Fh<+n~.nY=e] n;׋PM'aW Q'hjr2ڡ'·XO;Z5CUP[{Űrp:;;*h]jw{Vw9JNF^wV uyE 8^;xjjr#2=AU"U9pחC:Zc qe@_WZUdcڞR R%y&zy <)iOk!#n%$Ә# [DV@7覈2 !vcמ& UDdׅxIEX.e80ݽO4^M1,@ :HBqƄIvN] Ŏ$+yw޻(q&g3}}wEȡM\=! t[T^%E!)YI7BAV0P2&ĈluUw d g0BYŽx#zHaVNCN4 +:G:_G?'A3GuL:thEOܣC:h!Awk! }P3CN\HӃ~S|l~`Kfi7(Ͽ;p/!PybK?WU%^#WZ{j.؞Qj۞ %VZcT\f~Fl=v)8Y[(6b;QjJg*T9UR-Z+_ +_t<8~y'q3y3u+}+CܠƖm +rJ rGB)K< \)1d#dq8p6IC dr#2IEHLIq9#-ޖ!GB,D[+[7sr$X["-O#8B3? gN62L410D7dkp99ZpXc‡j)G3r a::P @ 5U9죄r +Ve +zv7%T tLiVն+LH` L.e` +1 b}~n|]JZIB-^mދ-ˀKl0a0F3.Uc M&˻{W+dygsϹt(F<`('$I{P^>Ai,f3^yL?Ĥ྘1)p1x pP: eٍDa:XOc âG`gNxFj8yq D\rai #f<+sX<7و_qpUsPj߁rRP,*S#xDfr<'ɈȌx^'=ΤR,OǚbLA]y@eω}6~k:!ﲪi: +sXPwvP>(;bY˞H_g[{]Ӯ-7ۃڵOFsޱѪ`GDDnmUudElY+>5VĦU6jڰB7RJW +u+2ZvĬY*!PJ#,*VjAp_o bb|4bɗW0,oBjOԢyf\ pYӗMԂ9X|6K2"3͈93Ldt3b4S@_L%3p>3AM!MbUxrDNӔ ,9m:Eod%XıFxqc ~Ǝ+}ƌ2GF1PGܠi=9rP3}P#1A J#>5l(C B238LF.d#Avfv+&P!DfeoxGPpr'2sq$e  YJcKh=BCHAQ*H BCSN(@ @ s`@H]g߽\"1GBEwݓ,w,s4[?gI֎z6c0x:/ɟ_|1y}_&|\$omF 4[ԏ_uȏlD(TmoK~-t v>(s-{Zt;Uu*HtKywBENy^|=zYXY*zQU.j*=r:*A?K{& jz~VU'ZU5x5~R$ih^\o@Pۍo[E߽tB.ȝuz +? +E|LRTuIӓWFM_6zy<U4xTBUz~hx yS}IOuCiOu}QM]7PCCBISmIos]io{ͽ; -uEm =jߺkoQ{mIQF^*%Kk(/* =Q[niwGv9RO~,qL~fRw+q'1XӜXwEN\WewWdi 윫\BK.pACZN q=9d>)!$!1>!ąt'FcY9 g8t]&:-;ڥ锆!Ḗ#e4pD'p0}/rX.e^;E]|u>ܡ|.(=jDJԶ*lj-mEi$pE땶7SjVejQdCb[*YYw{m߯PXek2-[D *n,p?|kͭ%W|xSsAe;~r{ᕙ E8 @d$0pp J4E., Г%}yfqу`<$o᜞p qOp1Ĭ`6`1<#iY0_2I:02 ȫtt0᢫fg#\ᓗJʈ<#8"/ՔlrRP,*S"ղxDfr<'ɈȌx^'=_)3xGwxE}xD}}ȭ Qf+\ +r+rfI9췧gSTmvO-(MGEzO+):Da2 .RT HxD $"(/{K4 ύu``<OK`(8KbXtHfR/̈HVԥpJ7cyLNq `$_]Tcgr:SLdQd qE3p" t ńL5 +:J +[БWkE[Wi +5piJ5g +zR`2Kh|>\Ӽ9 +sJ<35|r9,!cR ,01(&@wtcd^|Z-hp/;WkHRI Jɡ +%l8`M*(Eq!IAR08.č\.Dž#`d2w?&p٘zڲmlm,7[ L1Bgl jئ{lh~uvdÇYu t3fpGI~_ p9boK7974ޥ%3^-ẗ] &VUp72zw;L+^1t\6S?4?5u4A%cfVh[~ݦxR6yj3x~Ӧ둎n/=@]_:9m!0 m3V g U6  A; +tfN@ ߫G/>M}6vN^vqISg=S S=u5zj_uzj8] ӣOvݙꪙ魙󪟬]o,]^vw\f}P2X[li~`WP4&V;5SC}*.w q{'*`*.ES%2kVDsEQix4kKi4}KB)ֶkn\FaDy/74xi&%ndܢ8ϲSŒhޢ"(*A* HPk|< +H1zE"{r7;Hby>;oIe%Ř$%GKhE 񑴬J-$ĆlaPJTdEQ(_D( Ba|$(9D6O +#\f h# %26[g66#$Akt7.j]-p9kW|~XW?a"7p>-".v]Ϣ}BNo{sƺqd9~/B9Evz| +uǜd7>?qRF'匛y'7sdl(5XZ2*{Ve 'UNuUS`S[hn~xhR:gng4=0Ⱥ8hdry +CvJ9?2Zme6[:Xhdtu3g 0g̰0lFn6>g{ySEo#땣V4pzŪySۦ(˦hv?v֌vՎvVauTiU^3Q;6volXwM{@ΪѡΊ[GnW^R࣪ C jjNeHTBK=1V;KrytU𼎓gs3͙7O=Peaii}|9t9kҭM%\qQ蜌b4kc2 +EKțqcVQgNK8%dlY22<ΐ.ㄈ4b[XH:*"U$ JUv+%msb=w@^)c{(,5t4DŽM?;vhI4S);0w?ٗDsB{)KڛhlA'eO b4wϝܱ[MciYI1&I㒢h,1ƶGQ<&@@|$-+.u ɠ=)1)@t-+*BbaJP*;L(IIoS!@aP?eO6`_(#` _OQuim3BZ@7x{ur'/vSښU8S-bG ((v"T +4W JMBYz]D$7jfܿlw}7ܙ;<3<Ͼ UMʥj̊%*(e +`%Ar%H+8*$@;dP!,Z(pI,\ A|T #ȜΗP>$j\ 9bAf3Ăg1͔8̚!v2KŐ3 4Jd7COf/=1pz-ѺPĩr"4 + +PP29 I$%J F"@3-f iSO$K$qʓS|\1]5]\7= >+woL}٧o_w|"oAr(lӻVQ5x>"sn +nіW-9.VEP YUٖ6?XWOPMUoUW`j{ +h3 Cw-ѻ 0Vc[Ɓ6~oajϪ&WV]Ӿ׬gVM6-&X=Vm@{oċЏ6?k':z&:5oXoO7jvnrHףɡ'coo:5wUby[nn2\_}uiѨCM-WɡB;.z|-6&V #?;p{Y w2ǚ3,i榒tKsi66JPV\$+)b7PЅH)#υܔV.䜷4se s!Yn΍Ai."'G2*a$O5%.97΢NCg\8X#I'\8$Ύqo¡xK s81s}zf5=:2m+uxn/Cõ{{F:8T90dqլ1v@E1+&f[lo+ʖv{{*#v{P[bzGjw]7pc*| ? ~λk#:.frCt5[\QuguToJ$%"{|R)Mb'%IB!" {6E)HD;%C6R+RIH) Ŏ] AH)=1!I { EK 9IH 44gHxȳ8VY슏@D^)"oJ(f$K,YCQeunJ[bf ohDsuPY,ϕ7| 2ٔMt#WɢsdY,Hl$K)RRk唐K*J^PPW2e(TqC(Cū0]I1i*.u9Ub +RT4r*L@EZ MOPB򒵸5IBrp9j(7Icc%렜D &;Atw1Aát<3ęgu *wZϢOPTi-L/F1(' z/Lq[Iz^tLB<|&ᘁ9wT08=3 N҃aN3AtB\t 3`qXssxо/nnitpG뙸zfv€wkO(-ڦOHf[7xl21[t4*zI'Fm2:A4jkCGoYyƩ^VFWZ5nvz +[{AkT_yYWqXR }Bj/1a* wεr)nKCв`ChR +̒ 9Y + + ǀ2(_c-a8N. d~R*Wc|q |dN|KyxK(yR5D٧(4===1xQ ""áxM*[(( 0\ ̠Fk?f9|ߦǔnOgHF5t3)c.+Vϝ*QQAe' JѢ׭1@oPWٽ EZFF~9>Wq2wz9?Օ7loc)Pv =**{yAe_iO}AOcp6 .끆~z?\qXLh|UMOcmwc xnQ7v': rN#OFC\ GN)-㔂,(L,322?WWc2qHJ발CC +dq@A@a)/jE~__>^_(Cأ`vSFPپW- gۂvyn@9(&F(E;UD(E۟U&@6$ClXb֧債A[MWX Kl+|)'֊Mm ('\*Hh.k)\"Xx$nE@Q`xꖒ0Ƃ7&__xqX+f1bƴabЄ 3hCP RO '0^Cb#Ch(AK8qLOj0u8f5M` AH:'ucֈ4f0Fo3iL1h1 4-0bک1vMMKvJZ_1j0k\uZk9fJ(e0pq6!NVV Gd٤H?y'2'R9T +DITOI6Ua8GC wC{xD9$`/@#Rs2wU43KfO"fM%3ZM(1,>2mYԉ&Ĕ F 35yI֤q`?D&50 @ +&5&ꃈ F6SbD}FDl1f4 GeŌԑ1#Qur.4bxjX4CDGDB"A":D&"픬$" 8nC`YY 1!5N`5aΟ88L3=GQ#Q#*'x'pH*]PPA@A`CEM}gz1]R|>>ott:0DB_&5;*yu6ʧ:λ䨩j.E +g +2x?ny^y3Suv%Uu%]\=_Ju\ɗ:Υxeyns!pV&'سyXe28BdwiN/%91g=Ur6i}$dRr_R2W v@]y@Z`}[;]Jܕ;evHy/^]fCV-lr+$]Q"nGH|g oZ[`-o[[#Z.oJͭ+7V(R\b;"۱n-4 +I{ᇂ 1 bV<8V=nA\y1G܏Mv-gFt1Q@( GFij#5p*1Q4i 4M" A 4 A40dȐFE Z5.Q +pF +EP# M z-4 = U!" E"4F!1Ba0L"ZA$A Z5aܙ {iwsS623n +*+ge!d$㨙8sĤ(=+IO6uIDzqA2CN%`P&qTJYl֓ݳ>W]3?͇sgchӼ>eT& Q},C>-Q-`¨t[e]{Un[I6sv7LM5% +썴B{"8(I5Jҭ @Se\E`5W5N}:ڥzᲃJ_C#pj/ì# xCz-_թF]t߻h};Vسs:'NO:i﨣=ckA{ yi{3ZYCy{sZECSK ա0Uo-gNXNqYQЎEګ7"Apr0B$Hv"P" `^WFg,VIۅZAWFmOovm[ûK a]Ŵ-nlYij; iֳB +hֲBZYk[Fie,YۛbmkBZ8){9W}mzlcӳrW>Y%.M[R}}”i$0Z()̀I1=c:L"ĤD)H()LJIc_|Q!a࿈P Sa$1=()Ej l`*@+Qc:4ӈ5W9ӊ1RrLdPa"hL&b˘,L|-a߼hIg_Ή$c0u)2F} &iV +Jp-%w>C_MQYI +Jr-Y haI:M~ A\IHy+)5Y ZP5Hgҋ*\8)Nr>VrzB%(=V%Mճp'v"N`#^Pq>O>Fb DR%H#@5BF91@NGa,%.Hr6!" N4z9apr~aD}F'#{<>=&|9nt0Q.ҁF5A^PQ3vm·¶m26ɝ &H(OFG7LuF-k F66ɍ z d*=lAzkr@^G +^JѕZ"VZBAV,"]ZKi8t.?.Bgnj{lECZ<_K, +rY8_~easu@WA}u+`1wFМjw3T<bt5Ҭi~Z5{ +BtΜdS~*))JT +T?_dD$_U NK}Q@Z&|%7Id/Ǐ#+w7F6X9d5HcR|I1.f%u8L v4R=ơ;Nj)DyNT Td +9 p`,I2A#% ǹ\H$8?^ļD"wKK#D"[: Y/k{6ֹҍƛ>Ao{y9^ͥuOȔI?;g|V/;/ڧy+OBTPOݷ-Q-^0*ݖ@yYWĎ4{տnl\ 'inhkK;$iNE@qQjk9[ʁ +S_Mk'd&=,Z}u-]ػBGAʂU^PB $@: +{]{;);L9s92zUni^jYO4227kO{zl粻rV-,i~mfvU@t3m*CĚ3t<\ǰ` 5մRUPTk 'Gԋ[_Ϡ̖>/nϑQ#<mwm/__{gy̹ !_!c)6`"Ä81&cb'qlԨ/E ^J$ ŤB1&arBR& +WajxLă3(!(ϛN ;sbZQ^a6~+b~N./(E*i +~aXp=ܼJ 988W0,LP"8MP08Y',ʐE",1 {OSrzT!RRU87GQ*cQ +S䈂T?! E!dO#.˂OV{I>E%"碂ET% +q +*뜊E-d!2hPg)DiuP(tD55-%IC$'9]N@".'htRMA]~X߸1aƆH|4F+D0-)`iPZ5P@QBZ`G!S3PrA*9g˅ g{{H*#hb1)D14p3!"}D$ICɎ$+B8@ gq l4hCb͟CiR^зHε޻#?_9;ܑR}9Ai`wGhe FOwP|u~L\/-kbhXbn5lJZuybp=m^k)yRUkᠧMgk`骣垆Z*7J +%FVnO1,ZRGTQQ0ERf 2< tFa+sAj_sƛg])gk`s| jW.SNrݘDBvY~d"\d%{`&JBiA\`%}t>s(ggH9 4© N38iKr'kI~C8:ԇtpPzY8}A$7=cOtrš$8kvr[͊ESE]CQ:[y"vv>,Hw%l^\x/S͐̿(cdY8nJ}q'SQv;7v#oex>J?LBn) B!R]KUtS甐KByTUΨ0NQh("+vZ < >5ꎆHV3k!iZ"BLB61 .sGG4:‡D9srXˣ> ]j~-~ȉ}:K # :HRr,AG {u<ȑ=z-|~hrp>:CPHv}; Ò$n/({btĮ(R6-h֏#udV3RˡDھEYhГQtH6j "k"iȈ ZȖuZȦm@WkVy䆕+ԟtkW 55"`Q")U4ʥj%bI(jJht~\&-T!-]$, F=dm|a +prXVAkެPpŐ9͞|?CJ̚@ +Χ)p@Ě5U"(@D9UF1EgLOAL$ B:A2^46q"'V +ngF%oǐ}3FM~4J2dt hHa:C :Rȥt BA4*wBEC4jQT +\P r9#I$"JhD, 1$A$?"qk(BGȋkkCb"\Mqڷ3U[;"5'\sk>_yspF}>81{f3fUB?_?:bۧ})}x>s A&~Q *-a܈8 duٮ_= =GtWM'. (8m.)Mw?y:%gs=cHc6M{o^zA{ ms4[(w~m:wѺn󰫑\)h^Va^H 4cue{*;5hiRO1M@祵VbZm+`U حFR[2RV{-%޾WpmUG]垆Z*7@.9M`)=ƜjJ}J&ZNS)O \<]&JPdxWOQif` 5(^x3Q +*r+p)(x&eEƋr 6uY+=6=F+kߪO=>oVuvT?fssl*a:;+AJr*aepv/Tc,JhPKwΔ0 +i".vE8#,uZ!ELTcI:鉎tF#Fpc>%HbHuNvFxXX1>aq):q'dnQ6T1'XwszQS#$ѯ!i%wr w$<> ;v rj?ձ}TGq?"뽏n#]v],vv55^N Y +;ۣC?n6@O֝]wCvk)x׽'nKّp=$R~UqHG"px|P.A8f}.'Q.S Pp_EǏ@@\1U`/HmZw:l?7=.ωUxWK*KԼr1UWUU%UEUZ!F[ԣ[v?Wk|Y D~ԉ\t~.zpKGnJ׋@Iau=Gy]+ nRĬ D$HV R 0J bHE|)Z/g/I!y +\ʤ4[BΨ8[F`BiYr.C<-*L@BSHѐ-׶Rhm$monݲkzaӷRm\+lX#S֯A]%iJ amkMbȪ" + rVRTKD8K˃=A"ٲ%AY K@ ¾Y0¯i-/,B:/5< \?F_CŦz aF9jVJ 'S+a* +Q ID h'#<2X +PPL'$<~(Q#PJ&yj(rt|3f6r(&-Qʷoؠx"ǽsۃVo ۾n[du 0[:}ϲd"WoGV$l5z3S??~şdj`чgA|O-dWyݻ$'ç;Z8;_pjvs.Nܽ|{/^0558\x4섇:{'EZl|+ yZ9OH}_7}g7][%'=3y3)I %RLIr͝ iWd2$(LJH15)q SS6ܼanwanJr +CIn$wr% +9IA +/T + M?ȦKx%^hT࿤/y)o +%~'m[$EwsDJz;Β6 + +);FS%! +$ 'LAXj;fPةx} e3eFNB\MWvRAijD^ +qRT^Zsųj$&EKIָ@N%1z$a<y,#AHKԓ :Ai |^puqu!(c K>aIGNb\@:D N1M* 5 N0=I q`f@fx<Ǣ !4S6 9bE0<)i!< +(FG"t.д( QK' @f,T*)B$x$nY +%"rʝ%ss(L82AFQH%H+@, ~ἒM¦kk15I_k>ZM^Ock4C޺wu4E2/?V-k8XVh]%:`^sA+C{rQQFPwfSAva) h|Yaә y .RZKs`qR?@:z;@ty\LU*'w 7=W?=G(P|)M.|EWk"d[ +GKύ-mŬW.֣4K{IԮ,*{am*UeSmnjrmѮ鲩uehͳijjm^<09t޲y?ź3 l ?r!`g`3 Xkhqo%-WͬYȩokUkSWUkh1ڔ$;$ `ƚNm<)䈵!~Nt"A@N?2x81G}tvxﰀCN<8U bRHH8k}$$!R. ce:DjB PrFaAvU'J.}?Eq=0f1y I#DTVWS %3L@ ޹yu===3k^mOէ;~r]2NЮR_OpCW}"^L7o|y+Y|[t˃-%BRw7v>W7r'ysWBPKZDDJD! <0lƌ? T%& +"@A\$Ҋ~B0?ZxFQA,Qa).nx^Q(EŹJ-\|7W#VU{*qIL\I`X+Q`Źr/&EF8yR$n\\R#c1I4*&V#DX dXQ2LRekA()e0l9C3vzY*L%0KH*ĵ/\PqtT,DA֩O\:vCR^*Iyݴs$"a:sxMµ3-;E?=b.jޥ=:Gˢ'v8uڡa;$ ڦ%R/88V۱EˢجhlߤF֥m5 N[֫Nٴ^Czʦu}VذFE֯ VZJE[R9eJKW(,*|2%K|cH((pAv e9mblb[9b En(K(Y wkN I@|=Osj&fݱsļRΑbsffɦ:)C$Y) R'Ia=Z`(5QI Z%(%&)BvS=1E1LFxP2!hBg\J8H F$Y%( `S%1vY%bP(W +Dƻ)vy?c5foge4g:?y-q9w,k5,jilK7/y}v9y~]qdljor >v=6@}R{CCw:-ɁE.@Cb|wK7~7+C}6)J2׭&ZL6J(}̴Sljl[G dՂg)u9vOs-m@Y9岥hb4_1Pm m㴗W7h@}ӮX{/h{H mu3BFa0X[DPk CTP:jV3 {W7t~;JÀ]eJ{Jk]>zKFg_j?P{k>=~諡 TMVOzz'*'Gz+~믚~;SahOûǣT75@O!;.jwboF]oJ2yO4R璔1gM̄9A{0Y'Lq#-`d$G$ůV13&zrآ( ssŧpQh3+z0ٙ6YN$u|._Gw:0m~19u`]69ڿowkQ0sڻl!vwkkW3cݯ6(^31[c0r`b#M66[ p;&fuklW[eZ+rW +V ;f2fR+fˈ P-XjcVZ!Y˂P$ČPo[%aAf1ZY(|cc&Z@#GJ1ʹX&3hI|3H-o3ӁLkT` 3qD0sg}j7gk _YtzTSt%>Y˛6I#Ŧ~&KLLLLL0N_hd}|1OYҟpY Sh'ѣXrhO촬Q6eg1[q6 (0)D⌰@yYDz{$!SLGR5a5 XNf0,YVݘ&D6b{D6ExErr,$704{β wL:P,qFeԀTD04ֱ*#E3HS^Q]i>C,-[ Ŋ];䬱RDd@H3Mq7gwyûÝ f=|νw@1@G3@2%f@9F·Va4^BkyCI{9@sSf4g">|O8h5`5`8a8Qz1sz̊;nƤ`fJ>b * sCl,NOΟg+n`'б!1DŽvi'p!F۽찉GYbCa-h=w{=vm6vm1[ MvL4NJhmlIdxfz{/[l~m lZgl\܆56V{@BZҎ [a hJVv̚6eV̷K-}jSZ,%V~" f~btae,,oVd f\-đ,cd 5/1sJgpܼ&v #L#3D4+cP03dFO2M{Mhh=fx7ihX惕MQqJԲJc|5R3B=\57r4DÿP?` U jA f435ѠPcPgv(2vbi%gpKf31^zIPJz= H{P:-g4ZWkX "hxԾ8 a%o4OT*b b ͩ@Y:]k29/do٘\Ep|xsZ5D`T {MΏk۔0|hkad?k/QC\Psr|U\T^tV^^nJ5T&ZYll)RwģXቂo8Åt2J"85 +}҇PGG2%yH)&U*JsRH~y>rq?=x6rItOtU\otvq|]~)ArBI=ΒedAr< -T^~j.K +4AbH q28~'8Q#$:d8Dp0XA'l^={:JG .Y vϮgvHNSdVYDiglMHT6"[oPl)P 'Xlm* S@iٖ6呬m])X`lC刢ijn枯A"^]^Y&;d_+Ru/n-X|/G7=(),^UjRAa`5@q=P( ZC#0F%aAo %깃,9X0H ZNS0@4,Fx͐B8¾ f`4@e 96L]tv*;F4PٙZ*'K#O#9jI29iQv('C+ij_MdwWui%LB9z;G36Հl4; c8 M Ɂ}$9$K[iž8d&o3O}i4Ky:T cReUmbqbAIVIYrB?i&0 +4ߙT#`fXiJ%[)JhDa!H$ UVy䞲ʉhl~œg:iSqҁHKJpQv> `(ve_RcHy"P 1:qጬ*&)*#ڡB~쬨"1R'%w0ـ6Ɉ:5eaɟEMLGLT&jq9N!>#&D;Q10ZAi;a#64M lVeט ?m‘=j|&0?|SU6H 2)\o )CZ=ŢtZ8ZbC$%"`q?F0jT*1R}q>90SWfpboKp-GGu/EWZ8&q/JH{ ,x/o]caz?kߜ13O}{g(ǟzfW{7]3XRL*p= KHT>61ud%Wm˶Y_^~H<:r=EդٞlcvУ2<Ud >*}d>f{X^^\ws P*t> EF@S\rx|~ @+6軾vçroK{XW{!׵7nv7^ Cyw#3Vtճ^UTUWjjZ:~Qz֎[۫gmUÝU#=m@ӫy@{H[/aW{p߳gozjGt*?=P_#p_@w +\:\sJNTPwՖCyw+S4< ,w+T.PjsGn97<%yJ=QxNb{(P/7ؘ'!WAl!DLNti +REHHQI +D$HW'PP=_ +DP)tE}"sTD0(\"+8$&l!t':y +u"jshྔ{P0':@].@hOqbW%vm}[%| (^owM63Q^l=ɷ>o&uĮ>_P k~rc +hKåu[\\+˓jI)tUO)Tfґ 0J,Z-00UP$;0q3ރF/` bF {*/ W=eBbHy>$K,x`f<(ӂ^afl 8Jh0|G(lI^0CozUjT|^RQ9UW +.fNT%Ӫ44V_9cS_.4Ksq3V\<ՉzY91)2*6|1 $$,w!È4rfPfVDq q&Ռ)ڥX-%40يuPA*HDzLrOdQ 4gX^v6E'XCAv> `(QyH@$F;J8nwԉ gdņP1aNQG Nvj">dfғI2A݆Et+ +Qw("J5w޲sL2q={=>9}y)4?Z0(J$+%%#-I gsE*)=A}1N(tRRb-+$9IRHJ@# $6ܻufFRj0j> ja VY kW!kBL>YD +LV`$$&V,3Q,_J %F ZLSb$ʲQ0Z&7ɅH F~k1dl#d,G?sй͙4{2kVDOΜC1EDδIj-)4{ !4YdD5d-dx d2qJgZokz8N÷^?RKEw5Vv5pvտftzөéu>yQyvE5oYmo_{ttԼlt|VTs:Z Uo+?Q92^}k =xtou:zVm@}PY(=8s`vuhU%^)q4pM"{c%B(vGDf7rtgLP˩\G=9`u9 ^etԋ#,{Q=vȋx;"v 5zR^#C>ԘE/ki/B{<؍9܀a=BV^+L2 ׳x!%M^l !ՋMCxIQX "B)Yq&bXI}5hVb=(Ȅj^+I$.k=/J(eoCg%o-J|GoxmwBx1/oV[o ļ~~+-(uNēkh۵ 0S'Wyq{IHӹšlw$4_Yr#0y&Q`H SHR2@W0T`2TN$ثfĝԊ/>8j +1\e:Qu)N z",BCK ݫSPFF`jL0a\p9)0+  1|T O =~|B_rԗD2ƈ6`Q1 f)h0=NB3RR6T($S U)qPTℂH@N B!WprIN &8`9x(+2 FƉD]oo뀿9)28?R?iE?RKk-:uwۗq% +<6E>Z<@נ>O巾,{bks;áFMa m,w{V6xn~w˺_zFewۻꮺ_ǝv5]'v.Ofsï:jZ*G^?iutTtW2_iU2:Z+[~tW|k-Z5`^{Ry)bd7smCSDd-vK e۶Nl$U'>cS$q$v?tZl`[isg9Mely6tV3,^?ŷwZ +@+Xq/>}~w!ӂx]\]un_neˍ?ݭ%kk.J6oku?;T{wA>1GHD"SIe=I""R9 +;^+0$v$͗Pa8z9BHiZB%0Pw8I$pNp\==kP`۠P\E($B%˗J2R%Ź%w.$Kn#)e޹D0nҫ92o槱2~YhQAf V3CYL(F0(QOt14$RƧPDU4 TьBI)!a1 +B3^raibh-%$|!D&bz +6 d |&<5KßYO9,A\3OOo}tM揮i_cQtLwPj[z^W6o[/I~;-u-cwͣmӨ՛Ƒ^7藟j Ӈǿ tۡlyѯjOD3nia|(eO{l)p?*KrBɜ) +ǣt1WUY{ tfjqَ'@݅.Sg;Yρze˫Zhh갵m7Y@Й^9XNp[k^?y\j~)j~*Vik5_͜ǯ͜*o [7?zSTzM}Ӄ7eo o_645mn,e,~P9]/J9u6w4v6|/U_*J 2P!+O,d~Vg{;JӜUR%=(H\%+Uqְլ$gu1V$PȩF@w= +gqڼOj +O9k/ǹk/ĺlWB<% YdB]5^H;@@#ݒΈH{ pZ©N;䮎@nI"Np\q8C%`+?DvWBoOvIh1vݮG"r>ۺQm̷&y6w!_/Ʒ4g]{|kXX(osS6566]K7, -PZxRg.&ZJJvuZqF@Igz8uR/)3@zk*#NO0cXg3b >1zVZc蓔h&D=$3|5Bf#^9ua{0C>0͢p{/~"*v_Z>ԉ(B"NDZZ",D1XEmPVIwYb촊ڿ%ɾp+#%jgmf LɡH%g{ tbvͨ V> "Zze:3k:+bZ b66Zba*)tnYڕ5+LfD2⇥>YHbQ`ltwƀ,4^#x-o7:sxN@-G5P !ڃ?['vf5o^sgsd4=bT]fNѲfLL4m1uZ@KO5yZɤq*ıJ5b7N`h%b(5bHb5bHԨ*?#+EZAD WrRʰ! +r%+` Arr`+gd a53ń2i1B$Jh)#AC";H!e| PF>`2 +W*5C*U4PRJHdXB北aXlhfA B$I>_ ! 㸘 d ?:8QT]3 cȲ8wWWHftfYQ1b1H*93HAT2(9u7̘gGqg쿲UW{EUr8g9wz?OonO _Ӎ_S6{PoXno6a(7$}* !5{+FsT)Twu:&bݤ;$翷O6a3&PZqmޢ޷<,Zƺ:z<ڛњ׍^Ksp7U =uw3^\O}~\omA*暑8pxdg$kd)2q a-*8Y*twu5PsơxzUyvh^\rxyY4sZwԶ:ۀV tlguꨂ,`z8m^q~o~-h~sfak7aCYУ +NՀGofez7 44^4}m\򶥩]{cPjlq~QX1𵭱cWCם/^^f^]Ѕ2YiZwy *!4k>X*&DWA"ґvgTR$H:[ $Hj"Z--|Q VtԔml?C!/Xpwi;K,;= +~v{1' >Z-hC.++6.g9 W^۔77ϲ׽]ܐT㿡Kd/:\=/<1Sd +B2t*H +!5phi堦9b(Y*Z!AԄgځ'@r,\ 2?Q5evme]HK/?9R~Y~%D\472DvC\K2d,{VFdɈLq4IfRd%"n%č,RegP9Rds*B3Caӵi̵T5jg]IU5jb.'k$]Ivc]Na.%jY4,ɹw1AڥD7Hң8x-}>QOI9Ýrs9sRǣ bT 8#ɁTF01gsNX+#J6Ң1I!I2IJ>q5&#&s;F:yC:qН3wCP~ ;0̢yHڋ;ϣ"-f̱=!9ۓ9"N`gt`Ofv}fJ }<),"̬="<]=vo5X[<)6[0;7q`gvP=p!̶ ! `Bjz f:3fZBxڰ]YRJ@3f +IqkW1k{`V/sǬZjqF20Y$hB#,YȈYb#v +oL j<#J s\-d=AJ`F6f3 a8y3ʹ34#=gA鎹wkɌizQ~SXu|&I6I:QFO4yV'f8 kLYCxUcbƍ`qc4I-kQQ+I)?Ta~QcF~4SIaaL HOc`(;DcL.d qzF 0!:AIt: +Q'Z _ h ЌJM!a1*V2NJaE4/14("I5P +䗂Wr}ouYɢ"ft;u}s4Vm&Ot$}d1[}zpǿا(=೻S5a/Q"+ +X(VAE@@QID1AD . 5Fc;y9n3笨)O!]$H/Bm8@}GQoZK?N +C-$C汒sVFbz( IR{_6ѾjQ^64BzGf +!aSwyQSͣ܁y^7W?Z]7>] qۯOWtW槸kkG;Bדݵ]7R]v0*<~P JdN묂J=sUqgK2SqY] t@)Ϊ@Y\xrޣbGu=^4r~nnf[Km6rUBΫ, orءnTBϽY\*n@(i.{i\QΩs7zTM{jj9Jz7ypzR_[phlPj+|Z_<O^:o@=7.xɽ;J]gZ~v(2e%ellfs=(Y~ ,979E@1Gi!L Nu(էs*9ʯ,'gҝP`k;+󏸪r;$:+ρlEm*ws"6oolClrCym+ uyZ˳kj5Uۘ["[W"VĂ$+&*|mS + +h9" Ei"Bː\Z$,Uwm1bWQq~k_P#5 ɛ? rPxm^PH핹|kr=4'+sB.̉.4{}qa Z!S3JҦu +PJhBE_|\Q7䀌P܏"" TЪ(Ч@_N(i? Ҕ}`RAjp^)gH_!c@kk,$!&d`B_<"9 O<.N~:ɁlF~%KǺ+,O*OQ KPgS}ձNhx{}#xzC:\ω$=u␁De'8d4b $#y (#QoόIkdLC,,W^&esdBR&".V&yEP`*\v 6fL+f_&)a{J~oF+M VmT@-HgcZX@RclJh+n?Ĉ72: klVYXqQf/(Hl *)zf :cìZn'*"(2Dx,P+&bMʥVLbI˗X1a-EfLBӀ,[[:cf-gd7a1?|Z0(h`67 +ɠ@H (fFfL334#5ky~0N3`fNȌ)zQLұM:Q'i-fx 4N+hX`Ō@5kB7ZMyƌRa`G1c4Q#p#0L>ԏF߿J" Qa 4_Ilcd[(ߪ, jf(Ƙ|0)@`cB$6 j)9J!ȸ$*J*5T~*T1,OG+M Q ͠h^QE$ +/伒dBĊR_K}뒱Jˆo0acotYƿ:gzs:/yOz`! 9~6oS$o'd|GۄΗ7?[} +USe(HOmY4Q>n8~?WW6-.jL콋i]Q6^!(ҥHQP"] yǼήs]ɛss<~;gG;oX?=6EVY8zX`Cq&QY`k/ڟ_ Yn=5PC3RM U)iC-{WХ*MP9RF)e()0sgP١.Ѭ4n("HBIJ25сo(zXtfCNpYe"-aDlZ nb47R\RݸDK#N$0]629F7.Lt݉klGdFW؜]97]f:;]b'8h9na:=Rv#'Nq܉cNu焵Mq (!QS tAp5vaCUB+B*X/G^(9PO)pon:pv`N@W1俿wmj^5p ]˧6A^>AR`ۜ!`{l ~6y~{|-y/\߀GM67f5= zQdti_M\L$10)Gd+H0)'LcL$ +x9Xpσ."BL0LȄ| 3pn#=f˧{aۼWs.\< <Ϙɽ!dbܜ, Q榉l@Fʠ-Az,'呤d17?xKjh5Ydq)p֥}j{MصsjJvlBoT2x7Xm[$nT!lP"6dGW2SV;A2%NŽ }$|)X}-'[']S +V,o f2׫uSRXBԚdyr b_Xj")k҅Ғb)b|n!Âyb"R9ĂRļ9%̙%f5+`bĬ"& !"B1 `4^B ZbiZZ5x<: +GP*3RGfdt2K'pΗ<Kp $ " B;qNϧs3(.8g}>uqsq[V]ôFah?&ѥo{Z&O޲f~7iliܯ+]mh|~\6+ܘ]Xw_-?EzN;"}3o{?jk 1 |^wΞU,s%c1cu1'V}4jL_9{3\Y[g֖cIYY2xkS9Ph!U&Z PUMMH54h4:(cX 6, h3Lj"ڀlCN(gtSz}x5qI&wV{ڱ A)mu) +iR"*B(Ix1$;wI{{;9snrm6k9 ڌ:}"aa^;P/KZjiG[_yKM/Tal^ _U?dyf[%9㥵Vh-,f+` حdR +hte):XJ_/ o;TWwr0}vضrUl +tVQ-,-  jȖ P1b{Kz:l%PV[Z e j#hfC5?V06-k,Z>ϦFƗ^|^賄 mh(yQZPx`q\hE66E^n)jE %ribar B'`T|g/"Eh/Ѥ|y|"dd8i2r +# BaD8A2J^Bz%I1AA˗уyYLܹ*˽N !^!x7H^>H ("irlCfhyb e( !CĿIfHh] s)!}~u'eԝ pIZ,iR/JYPXRi +~Se4vG)(9dE@9䂜$%$C}^:Bd%*QUsJDgѢ8K5Sj +;|gjDI-": +$Vq5 1M:* Cu*q; !qzqjq|GĂq:[BudNLT0w :ZA׋mסE@T½[T0{= ڢڹY#Sl;buCIߨ j-b=bzy=qkX1 ]PVڸJذRU[C]E, ,SꥨUKTjekb|,Zn:Q*%J@^.^Z&:-j橨ȹJsԂ +ap*s8 +ۃ1o1wbHLW"fOS4k6soyP'&I9©eXS&H] KhƉYc%ƈFKGIFJcFFg1o##F|%dRFr}=<0%0pa"r80=/tBЉz-i(>V-DCPD)O͢RM&ؤR'IR"B,qX@). +(EE(R3$3̐$>Orgp y><Iqx)w]lퟮY +@/W;R{dڻ9?]iYC{&א(;7׌_Ӄc*C>M C϶ɟ|(:o1cȆM˄O}OCIdLC ΀LqPPPP*j s V\ [ʥL'lU ֒$Kkqx-j +[ s((t-jpمB;t֦9Dq΅3#pg]8qٙSl'm'9p81>0[AaBc懈82e?txG {ٰ)t>-%:4PPh {v3쭥Czjv 2bwWSuUgJh;6(b[Bݥm#6=r&P`{F~P@{_rc͗Vv-O`mMw}Kmi6K}^]smPy@"d2( ؝GR %h.|D ~Bʓe<9x<1Ǔx<%I<@[)ATBM›S, gSբĕYDa'$JB!q@@ \>q2//(e|Dyr3׃r+A#ΖJ.G ve7˒elB,S%٨P%Y2V&w=S6a ݥkreS=Dc]INdA) +򓔈%ēD]P!rD8++A&Rڹ8 όDdĨINCgZy5" :VJt(ɑ.hɤsOl:u!Ağŋ;Iֺ=CĜ"N$,>EԹcZȈ:#Z%L C ӑΜ9#OiNj@rTNtu "9OБwc`r:O#AՑLCCi:A!hYt}{ݭ +:KTN-"pƩ١EޮAoD|U=)6vnRx;6mԈU-j66mPjoTlbJ,u +I&L>_+IZa +r9xj%*AXBX\1))*8\AY}N-[X-g/Y莵xqY4_F'e#Ε̛#E,`-G̟%C̛)G̙=S6R_f~)E̘&f_M0 SӧHXi/ܰxISY Њ4"ViH֓0ibJP+(S3܅R]g˅8 eRIeb u()I!$nlb )GbdΐLbV0% +K %`UAps}χ1xxOYJ2ſGV+eS}ޏxS~lye夼7@j(i;&9R +3cybK9,s?}jO ?]߂OoQ}s?s eg_j{ٟML./fF֖[WƊCEL>-ֶ s Tf}9ܻh}RϰP2,Pc]%sãsc( Z. PصZÔW(π@57ںm@Cwm}~` ex   S X];[EaxCu{mR5ka0(dkz}~EaX4t`v}}p )B,}IC9Z̹Z @@ɺ :a2jquD1-@7!g;lѓ3\(+9@0R2Ht$sf;O&9π9UE&1p:a)%&X(ڑ݆r89ӈ9OaǻlvIѡ=q7ERSb ١vGIGvEɄ(Hn4*PnD vIGw8Cajx/H +2b")" #&l+bĄS3p +ʁr(P& +Mo0~ -> ]۴VJns#}1^:5zAKPatf̚a̞挙5U1 7}MQr|J̔tKJ_Ov`Qb&iB6e Q +@b(WR2 ^N'2q#tjviARJ%"OR.DJgB +(rBIH'  | !9I(9Gd2jpȳã'GZT֖4sTj};e}TTYhUifMYss-pA!enΙZ&9צ弩zqɥ!Zt`PK'tm 1KloA`V?m@#d*觙 `-)kx z^`fYo=TcS%tǦޮq1ۦhy0]K{lU=]3U +xU]Yugfz3QrONеUvE>!BLP{zT`:( k>}xEqqݝlew5ػQ bA@@ X Dv0Q$/{ݙ-ƙ9;s~w3%' z.0xGK#iabb"&0Sg3#>cKCG`sS\OcGX[Z5U>+: *h:U"HD E'|md6" QQ@(hC-8?M&5K'J>_t#5N"@t=[%ʻBs0qa.. .JqQN\zM\B+ΖglLd'6YRZ%*.y K).T +H%2,\R9x ߷@ 9kmz.R." G 7@Buȶ=5X?NdSD+=0=$O+ğ_Y +ٲQQ}IWGi7IlB6 ^ZA=IN@ YGVk5g#q;j&S7@a/mb.Y+0tfaxiݽF{(AwW]6U5)ϺlR;mzbhk֎cʱ:c]oz:*Wڻl*ޘSxP{[Goڪ,TH %bi{Lf{DkZJ%Ю{`r C9\M`fw {o!,\Kѡϗ#͓1 Y-#cy26o"CVf3̚)Aa!C̞.E!fNGN0 +ibb&6E:YL}=I AL&%f5O$0IGN`~ZB!Z_RӨ +GB\(JЃ8ɄlJ%I%8M$!iX$f"Dȍ$? )8I0Q8K Bx !x*ޗR_K_/G9'}H4ۗ*-Q-X빴崿mNm>ɟ8wxٱ.F1San]Y6 UCT<E ( ?*. }>+oow7 +S/=~w|8沱Yy{cs:sz}1g}*>!d0R,F)OV$9,6*RrI Pj=HPҜZG. Y6cfi\L9VbjnZr,y֖'!Z˳k@~AK` tt{;~`G*7SE}4`%Nå+͔+{͔7i`ozPv;<~KybhXFvZ]w֍u=i|0Ji}Y; tu=tTvVu:ګǬwo;stT>s744VW[=!P%aK7eڜM`C([S-ܡeM k}HK&J%8`fm]hfkPFwRhiVST[[y\lkuޒhk)|g7_y!Ud;Xp /ـރ 2`Aas:A*+3e)$C$.H ԰)H E,.xp+/Mn:gXlN{9 /Î2QỹGG=8rx^bqЃC!=ES0v7 J1Q,"D@c@8{QgʞP*vpF6خJJd+d YAٲm3l6Qld[d{醨6T6:Űϊ׆=-Y hM)(A +lm- jcqlvL^vL0̑L|«K8Trڷ.CtpjppvY@jvow`bq[C N2BDoq6Q +΍c}H";0#쪶0[av f: dmX,w`6c֯vXeU6UV1kW0kc~\fKqX$V,p˗X1[0?,tE֒fY<2ȢfY 7p̂(~ 7YּY&nl? qw3M,L0cfO7 ɬif̩&EN ̘l0}ri A FYd{J& &! 8ctR q̘QѡAF} R ɣhE0_By f$0bV!1 2 +1t8lQ(XXLL`O3ilAe42$`hĤ:Vx'഼V9ޏ>`YCñ#S4M(ZZHIi49JE|>si(C$ ~If~j{IxfA?3K^L31vKy4=3:f&OtEOS {z>8C]SU"&uMuNώ HL1AJ>AqWg(maT`P ޶S {ھocP5Zq39G + %[Bz:Gyy\SLmY=/y(Bd(n=m=os GPzq7VLwS5njEu9=MPnwCx֧\Oc3B跋'>~y]jr.QΦ6AWC;qS t:PK7@^gq[TSVl\>@SkUCW豳 37N*},8.׽A3Uiۗ-w_l/QwUTi(3=u@e +Ygq26Rp&݇{j{@ijUO5tGt;]4"/])iw5P䩽tSw>[w)p9Sԅ8,rr##[AO}6%'] R*#tTWpFArNH u[%+8$'8!㸂cAD  x{kyjJqP$엱/=/{bV)O] + # +/Sc`hw%j{TOoVr$Q6#6*|zp-(YmoE?C^8LD߶{:*lq݅~l~vorVBVm|R-Gmx\L~Z*$Mh0o./ +kZ跮)oaD Axc h]5S0wb\d(1v0l%͌24aQCixl2R:-CF# K#}H( +9MhX r>:ƏY -O rsQF>zNO F9) AOP,1> : -< \0p4a +&4_MjL%Ȃl3Yː#u6a9F;q|3ya0 C]֓Vt9K24b.fU]4nu! aLΧfO5cΥ$,gO3\ +)8aVuEq-?$RT~H%̩$uVumrYUe'Teb VZ\c2Y?ΏEdqnG1C!LA 0"!ؓ'mh.2TbOLr]!Hc  :0I9% *a,n'F!kGv9db:U ` )+.1.mwP{BYmN)fV+'v۵5TU'&f)b0;7:Y5;}h0C#(NՆP6jSֶuu2-kjj'p`6IDF81V90Wu+.wb,-sZԉXfWjr["kBf`7<†Y x dx H¹VY lg}mpVܙթNgtӡ 0lNP&1:jR㴳GEm Jcl<{t a5Qă e2$h4 zFz=:Pz:N'p,'b~ ð ,âI2EQ*PZVR4">XߜF!$L$Ev6O87D߽S{B/bo7 A zgwp='EͻIAL0˿ .1IBz"u>~iǨmRc7-# k8 +-+:эï{tJz *Nu7C%'M]{)ަR~GPi/n׽^v{=:KjUUUT]> @ckGrc'-o jϋ"N>AA~[ɮ.1ADDGtj;"J㩌&@m[m y(gh{HTTWԶQ ցk֎ҵ-"d!vZZRŊ;wM-76D>/L n? -F{r[?\ZX5~1]+t5Opޚƫ V]}l9qg i5̄Aiy M -S א ,C +$AXt:dȨ|Hgֈ:E) +st AXp?/DX MX~a =: f=:!8&%(&X =Fx6:5+ڬ>)ʙE"oi YV~I&OKD9.7Ѫ?χW-3IwJAi=((Hq&{*&yyϘ;Ɛwr;}wfwD4I2:{€ &Ǘg%i/ƋL0!-(NqoD̋>XqF~./9HĚI3Rb-0Mó( dU'E;qĊ`!]bÆH@c6VgcìX11>dŊ +`3!6A0,8L~3y&*bςkh?{0p +fPFbi +bv۳J'{kdcь췯 "7ڲ΂ؼ֌ش:LXV u+8?w }s?GyW?C'/f0sdz{=30f1 6uO[5m$4#sԏ5YO2:&* bT ;.LmY繤/%zRJh<ZKf,Q90Ūp@UYΖjƫ6Z:[MЅf%ϣb#>mk>j^7zZ;Y/=[+iow py w5^ygiWe F7κ7PMGWO[vԾ}f=zj|zf=/l?G`es8i/Gt?Q~^=/}]w{ɯ'=wK:**q5W oTz(Av=}2Lw],.PvְsQ8U_|Pjzx)x5| +.a\ '|<ƹr\M89gwdGFzg8qFNZHH N쐓~$a `%q܏xNsst+#6?189H8 #4] +ᄻjC\1pB5|WsAaCB}UV󅼨w!2kǁrmo+g_}h ގ2h8J9v {cgwrvCkv>-VcvxGh%O'9+< = -R|[Bˠ-˶Zۭ|K.?XWQpl1z!UЄQJ tR9a* 4%M P$K!RpZE<$J]I`&TE(I#`c^JJh)i I&0*1FJOH>VCa0+ rܲ #C%#y튞᪑̿%o^RyR9BC.!)QQ'@%/PXs4V.! "d; `Cg%Lg&Y|'㸉J7ًś}N3Y\xĚR̬X +9 NF Y}RG6;j%FZ0l+É aB8_)lxG`qu׈ LdP`P]е\E$(+ I`f o{_Ѿ͝n)ڪWO{ԭLea>r0R8,6ڒ젅6'qlJd(#CRFH; :jc(kXIQ8j;J4 c"<.i](XҎX\e6UKK̼!VĊEV2 -X! ̀de?`f( b<3b< ={3֏sM9F!*`lfļ&~;4(sfn7kკSfL1 O֋i XS' &!&өƏ"&K0Z?J;Z3J7ZQjԣ"F~WoFhTB_gD4XjpF0;* 8;`mRnVa5P&cT`T 2L`P+JHH@2a4bC34EQiDƔJPJR%."I'X_K}/] +$Ԅ"f|b̀/+wdy^73XnHt5(`7{f{f{3$?ϧ˘:4ݓ}wMt?$;'1i( C}t[Ϫmszz-Ejx\S e'O_qɮ_6BZ}?w7=.>or.K]M @/].9}s--+ǭ蟷;W^^+x(tͧkͧί7P˧hjyUk{|Yzm['rUmsβ~NWk9讲z[J߽hlmsWewrW*a {::90 Q&}p[Q!qJy{I4S[z]w%SW[&(p\ge8-Pl S'e;O2A;21'0}(tHA ؏O, #'=Pf_Pe؉Ch.`;/l,ۂ*c bMj2HJGHofx@)P&9SD"FV%lHCOL<] $?J,J,ljL踋YB@ַʼnw^#zgVAq7 }zChe@LK)B(IIreQ^[*\"$:"qqbk]YʢȦ"-.,/Y{inbn{iAV~X AAPfREZZaPV ZI4H! O#M> +oWEz5Ah)(BZ +p>=JoG (kXIQ8j;J4 c"<.i](XҎX\e6UKXDlVX+[+YcN8wNwҹooAD.EE/D9-GAQNݝAVЙf_wҡ_ҁժ[/,CXCzȒ(j- ;DGꨨZ4`DFB"#4Zo^fLi!愨YUnjQaT B +T";mVh $`B?NS +S@}it?%db4w2 :I.jDߤ220N4"#&7S0g!Y a1 f#1(>iMϣSЎJ%)> M e$ 2ډBq(jI!HDA|"qO{{C`8 UEC3pD>ۣa,Љ}Wo|GҎ7|LuF6l4bE7Y!^Ϗړv>uTc/3Bom_j7o wYI} Ok):(}CA@[10uQfo) 41rvVe{3*ݩ:uyz#wikid65yN-}ͭk.^z n: NOn`4u]?wmAww{v617:Y |Wuƨnwx;ݩޥѭvdsjZڟ>հ^V ٪۬T|xm} +lڭ,lV>Ʃ +lZ2VA`U.pwWbkIOU@5P^7=l@_/T5FOx*\gqʽ(d؟=@*)*OŜZAzKKT{dGs7:n7x{q̓^q !ۓFF/~B9hD"P;."yq!ՋsC8rtG/xpIG=Ѐ #(/|W'؏n^/9$3 {FIeɷf_bo5c{Vq1z*9[m̳1c#tη e-'h v՜7mKVydzr뫇|+8[ڊ36| ߦ_r6 +,alx~_p_ֵ,\H o}ӽh(Ϊ{ VD9swbeVG0Q&S*0T|$pLCRIr8KIHXj 2Mbä8 hhE!@p;8)04f,D q1o+al /.oxq>b|\R\I +ncyV&fULR/ s1ATaS Jr?D*̑sdlJ R#s/K.+2Ƚ,+4\@!.S BEP"JwE\Vt$ %5k.j!W4^_P#奪vT Kѹ&kɜq:qcuNrVU29P2E6@2Θ4˧ BPIN܄|fDJ9f`%5R=a!?{X܏;d۝9`B@N'dB'N gfP,Աf&!Hّ=f &dw(Bm.GƗETN3dlAy@7Sbsͬ=LB%l1#lj&3dFEL!m=l:ӘlYkl^ci7ƙ V!㌢֭4A֮0BeUKHq:UKX+屰ueKctHZ@YaB-ҢdAb"H5_pfTUZ>*2B?[K ׌0-$"Tќ5kv-cJwdpG_Ov|>>M1w8 2Y!e_]/Ag4G[ӈ/qKvKm8Gk58q.7u @:iYA|ԕݼZ4Q (yr<\ +ҧ*Q ej3:j뀧_|^\zy +ns4N뭎&^[M3ВkڀjV OWgAsuE5?6WCW\%kiS/УF'B^>~oW-h|yCz磷 J_6q!P Hq|}~𬻢଻)OՕxOWyj%.ɸQTFzsWCi2IT,# #QY3q +㤌N@8&u񓌣q8 TD8@e쓊@L {:+=2vKNQ#*D,'bqN(W`;Qm(*` Nd{if(ئ6JlYmo)Alk/XZP6ݓZ8UP.R +A"w2,Pl`c} ~[m"кgn_D5u7V;r筭͝+1GlM͍̂We]Zs}jGu3ˮ;RW( kZxld)Ԥ$(dIs%(̩( %%bHx!+@r<5OIBPh$Խ9{ /pxWzZMhoj]"taKĸ2;s/y#k}~y벉R9IYUtIId(TʹBP/z򮪨;5*Hy + WRK`ҕ}"<+!r9E07TAݔM74:'Us* Mp)ZDvFź gu# aP^>xVuZ/©̓:GI=~&=!NJ7ijFcҎpcF%2Cl G-A%řGZA3#YqE֩CfMʂkbX^pbq|MO16?k%cŰ#mp n;]6 aqxvn k_;agbvس +qR,ڃfCjEmCl̮pN *ƋlMv6b kmmvN,| f5Md* bJkPP+,(~2+bRb2KPZX+bkBS?X-0#73"5!a,cZ0gkz eD̙i@̞idg0`0]/O c3@5XhT=b#6}Ld@L !)u~LJ5i1qV"0F5~;C h bRlp5b0mP4CՈaZİ>¾Uc RFkUPCf:P#Ra9zDEYU e7!la5 +1AdJ@L$b2NĴZZUQ3$@@bUJXNa=dVD Mb( +Z$$$I +1 d 2sM[UWf| +Nkfs(="GGwttztb:FuwDudWiQ|>Bİ⏖E M$޹/[ou+ +_śAoѷ+xR5?.>K{AK[Pk(R0S=n%>;4QpA9p;˺gTLWwOz{ p?6m1?iw6֣_ε \[3r4_iaρkͬ}e{ [0K]\*j~cT6U5{Ÿw?r5W_?tVZGr"cG cFh#=\Ê5L4r2bGC4lJӄ f RE4x2pR_O4GWG +A}~|4w=i7Ы\PO+Mi`f9D )j!1))@B "zĠ#`ZpF# 1p4c@K\*' TW(hR0h%|$MAIwϐQ$EJ&PApJ* +D"oշ.q Paw/b/X#`A-y;}tG#uzxЁ{"l=bo|h)F"uˇ-E C4 oU5X1So o!k{ӀnyҀMcUw;;oMdk'LI/v^׮.6E4eU:k%IIm_sLd>C j@%@lS;Sv^/ϋyRx(US Pl+J[.eN+q%gk0zhaT^qJhjjSuk=֘ombd57-.֬VqNۏzYO6u7{[/6qzta/nV_~O58g`qWKO]͌˺xU{]Y å5åiDX;j۫YOܞ*UCmGÌgmmhVty^nw鲁m/{Zgomﺺ*_wWVj/KoRTGs-Pl@Hn匤rN\E;\ >p> +d+8;11<84Sc \'yD }}:&Wl +8rd+‡ð.C' pօAzv6Pw# +J/!ʏwȊ2!,| {aa"PGw49baA0""F'[xE23I>dͼN0 }Wov쀅o梏35ʏb"B͈{M=%<bĄ=B̬Mo:kɧ};4,4aA)؞ "cv3b6'ٹՈb#قdBn4#o2ڶфغزηkx1yڴڏq~5jJ=b +b-5V/Īz/+ZDCuezjbi?ʒ@ RGhay:h,C,4[ k,4T#fPqhoy͚4#fNUfLQ >Y:YILR MT:A2^4A8^e7 +^㿖R 'XZWc2ظ413JkmP&led0)ɏŒaA' w4D!3`j5T*ĝRRAJ\I@J.s4E{P$IRAP$#9EL&T*qK)SPa_K}/]8 HHLi0;IPެ۱BŬoswbr~`c0;Qt`N̟s7GogyCウuEˡbV=3g[ 'Ps{_ z9Mt.@)vLUYtLs(oTvM'0oy>_·WYW*tΨ9 f8f0"E,$i͒ܘAnqI{Um99gV&5~6p==2ȫƛG_7]O|]W bDo Rn)ʏ{HEŹmzXUfnOuTùE:ӐlDr<g~Os %1zzم.g+]t:;YP VF @"WkΛ&O|hgUv4^Rs-RSiy4|!gw\X9[{~yY띾Vkkd?hү*\=OJ>*~ZsG[{Ӟ;PT ݃j8\鮿ħܑ;J$v0i=R2ui*DPV);H /]SNyOy6O6&6OmF +yΊz 3@.%@AHȖuӘ e8-!S萗!#]ХIH ~o"%S̝ep"d$R$;Q Gdt)$;; 9%'RJ#+NnA ['ˋ +gN>;d]`o֘mwEo빇lňlﮎݍPU_# +DE6wjxk`g3" *g3g5̐UMm|^TlвOK=)`%D>bEo ? pcКk yaΫ"7_'oMӕߥYa٫.^tl n QvVC؍DYADi +|(A&8HE9EQO* B(9Sb)YŹ +\f>j#q7rIYs$94!Ds%\b|]Jss)#w1C b#ޟO+! u0N:je&ߙ.و)H1a`Tl"1'|r0IF9$+h`p`ԧY$e53,P1k@Gl[Y,~imrȎI>hÜ<`ubE2قpP풒0{T;gK 9L%uN Q# ct cvHڿÁ:%3L|Pph}혽lGPx8h]vLffWtF jsS۱с~9 m9moz[`T䖵vJJttmm~ё`)"m w %a n}OYچYP +n 'G,c—90k +[fǬ^jì1V,|Vֲ% qK1KY0%,,i\d,c`lyΌa 3w3$itd&6kAP=&P#fT"yӧ(8穧M6B|? i=9e!It"rX ct7~5nNؑZZG!92f2TF `F a0;2ha}'ńx a0_U8 +h FZ5Dd  6 +cRJ!X0I3;EWa;3!^T.SrB) hZC14#FͣH3HJZT*JJ\JQ)DE_K}/] +?(n >.5ejg{xfyC}3,>=S?Io~"ݼ_'ePFn aRW0|/1Igo#cg}gos޵/;E{0LN9fL("`dQs$"9eApW`ݽ]?z'zs3[;K^ =+䗎eҺrUl*S-u>S9(Rzj8d.{kĔ$YkY%=7_ b*'Yj .BYZrE5A`t%ȗB]sژ)BĜm\t M .Ņd]w k=tޅ Ļ@#b;7Jg]8iS|GO; ṕGv}|pkM8 + qЁPg;xB8a!Tl9f"}Dh#;u HC&F`;ˋbЙp̩podM| C5ChwQ:brۑF^$ߡ}&%&"؈kbD{M#9LvŢPpsP.0nCo3&Fƞ]6oy"9AQGj$; [NmdBm6 &FS[7~ -?y^Ԧ5:76V֯"֭!֊XB+w!VhGYL#jRh"V, /ђ>5-RfBKD-Y]X@X<_C-<s5߂9Q~57KܙJĜ +1{RԬi + 9Uɘ1Eɞ=3e`д +9 :2^4A8s O'-ʎ 8ߍߎ(9`7-j%+0D4@!(DAG t.h2N#EJf*R))RypO9"iiZQrh!")I !I|d"%J!$q\¾Z_$ 濝ڂ7k?ZV,۲e)_6 zK#}c_##w号.EFVs~02ΙM*wf׎_s|h6Zǔ_p$1/e7(n./(k,-@I*M~"Iޓ{r`fPw]1簺T@׬3 (Hh\9I`@d03.pކnKGdC[낟mm%}]U=[CP T5,Pj*9&:_A+Ol^ܫ+DS `/fחVBsEހ +I(Z'X +n۠[QCLX1"-d 5{KtxsHu!G2)ɃDx{pqi)ɝXnA h>p!G$ +\s}R ? na]uZ?+lhDZm_o oup9ⷁ?{' ,C5/}'i?z7&瞅|*Ǯ߻|R҈e_jc;H (̿1/CS^7 ›CPQ(X{+TF{go-*mx JpNjZZ]\Z @#)m  s栩x=@yE{}hwho~=3w7^Md{'m2FR]w6tJ7@wA@ *%TJH)w$v=yߜwfr{MV3НCzGݔhbn0 ~(5B?[t(f5PmCˡɩjthڻꇞ(/^u uk::o+tV wFcpWg%|mHϛJsgX9e*5|Fu _~v j>oTwU߲6VU@ P 9uMi<*J(yzPY}9-P~J)%JhI(^X@ŴdSd,V9~^%'1EZiwEe[ki^rvt-7R6D79$ pu܈"C,YU1nDCgn]pًK.q:5:io^pڍSЉAI/Np8~%*Ӎc1QoD@ 1k}xSD@!,,hۑjh/tin]l+0 ؇00U 9\v0lɾжoJa\60Um#߱l` +}Q!(E!"ymC~\ ~ZK m6a5mۦ! i ې>70!7 )7 hƜMM77?8(0$k+0< 0TiDD*2(($!Hp*arä< #1HI0b(MDR +E^ig)Qw$IфLoKy$EY } +AE>.o9r6Y Kqɺ(ϸd\S(qOTx8%;*Rc};W՜nǨ8;W՜R)9ף5%]exxףZ (ENwV)f3:ŜF1S4xǣz讜|rBr'3t'&9;)fl dwg",zpݘ:<38#<9~Hˢ(γcLb}:& ޡE +߫#ubo2Ca@8E +R?T/ эreo0jNޡAڮ(lMbn"B6[4ܬEؤAlλm|9m]˖ _ujAMkUkԈ ֯Vq +ZԈuQ(9Y١TJ*8pSrΎm29H%b%δ|ogZg ̗+U6E:o%|CL Dpuo"F <& kTG%Ǥr-sca]XW(i[緁ňⷾ1kqZ z9qIavLtGl3^>Ni6L5r &O{pχlʥ1Y>dzpr҈r6kc:B)>B9gkIw@uk>${pr +B"iK.pazOypN?p‡t:B<1k-}>gC8:^Gw(41q#cĚ є(#cb+g:_NWFKf7STy5 %d;fIřR~gbAsAyu"Ç";BK?ȳ"Đ~41I:qdBa)t<$>HM@˽!uɹpCս ɾOϾ&*+IH2HI +^Q I#3XOHDNU%O)h_yWx|VA'Q!]=twJ_9sZ-K<Ť$;^@vrq˥xt5^?(8A:{TMtd 9QCNǪ4S1jrV{$Gi;` ݯ&9PbL٧{Ը/ѻU]TP9r ]r BSR9Ȱ/wjBPBvoWyU ۦ1a*Ȯ-jHxҫ[T}۶!iz8(]UlZۼFٴZـ~iJ Y i +)2!Bd!rN <C˥s2(6X,¾Z_8l r0Dl6<b-d,Ql~vF|x5IIHH!]w]ԵU*6DED* (]P) C6!EwW`wߖǼ{'Ź$==s~jrW56*_$+*haJ(iDoWPZ#]Yꮩhn*K07%+,K26h!D^oM--1֜hKhK{.4ω29"ˉL72t7X:]3:s=d'ܸ"э˖xKYr#E1Ps7YD3] XpX\e:q4;s%'"ݸӹ7睈p]EoNwΘe +Ü837NwNلCON226؅@# Ө㧆똎х9` %d:0!lNWQUÁcLLG{CG e>e{펼.*6w2+}PDB-OP`Ǔmȕ ЮN}o j Q7k[!wo#Ery!["j3לO;sL9&xbL#1>IEXH.Xc H8!c^#b[}|XJT$=:i9L 8ksd.^U=%!ep]2pSLk.+ xi629]&RpcKQPr6M)ND S(Vt4 &(LHJB\g +RPSH!"|c" 1"/$F>ɃA2%wŨDO;> 7 sH\ʼ-[v+KrDj'gp-KrS~ur^U 9ZA%EytrJ};WUWnݺT% 5bsQ95E5I}I:"\РFsj= ƛqvVҕ0 Kg0t`0<\. .#8qė_: +a$hi0H_WjʼʸĴN޼a%sooӷ#+?/sdOccx9ϡ)cp$-ga`->j` Dݿ#~[4YR^1~]h7;k' sQݳ'Ý=F 3սqKGE74FǼi,}Tg~tqN䶱(5So[UT1wV &JMMkll;=lӒ: + V#Ӭa3CKիܡ݀'o2PA`q?e`)`.hZom~,k~*k~fJU_ ݻ^P]U}o;Ǫ٦աaj3X=O g6/kG_F_v׌A]^uWuCXOwUx*Jq07@n؈tǮ_,ϵߍԍjk|ljuc-&hHI#z‰rewMMe(aR(qo@:$cCʼnF6ޤśZ +n[rc̭9іhKٝ&53̤B +k_*{]iқ]A J!4{[c9œd|=}Ϝ[ +` O>C\91yd1drȸ4`&E%C*<;-7؜s4A<#!ճܮ;pC K,.ҝqv6s<ΰ8Mwrh'(g] G}}v8c|G;tG<>{-ϠGgGwz/C謁Tv1tk #A$E8攽tV-{Loj.cK62lOG,֍zxQUĴ +Zi}:!*+yכ[_z WY,pixݐ(Bִ]Ϊݖ+w͝y TJ$02 H@-abXe {#LwP=Ű| 3'0\bxy.W)^/ǫdxM^l7JY7"ܘK9n.T%yr8GI"-0sQfw8x@Q>P/rSJrHJi9/,g!c/(@=!EOE\;*ᜆACOğձzFq^FBqtS:SzNb7`2&u鄞ӅVat`l#1X>{D2qS"8:`د}:=$q#x{nݘک'ܡ#خ<cO>]tdV-bZcCDaZNBu-?ۼ>զu1z xmXڸZذJXbJ5+Tfe*V*Y{(5be +"DM,_bG%ki@V! UEJĒ*1@x@Fh|n<Z8G!^0' +ļYr@ܙ +VsP^g((9M1MFxT))rHpdn$)bd9b$IYMV"4Q V~C8^0oV p<8=IZaСZ "tZVgE^B ):\=ܽI8 JIDB(".0I Qb!!&ČP(@ 2KF8_a_k}\PaL`$؏c=T:6j\}۾1ž @3j1/"lgF9gẛ! Lg|sopt9ׯc><\*Y x{tE[L>J\9G/iΌtL#ۦ|Q|o OVr?d|;&ʆl$ 3/Ǿo0^+__xeJϡ&_wy4LT% @.5)g@[MJ[F~knZ]9-ρy}n{)7@k۽6;k;`sckPzw@nJ_Q/؁Q4vYn?_]';)]Mt;>@5.:?B.n!X;^؞Q^nzcz^5 U mnl +J'#@vY{p4sW+5Ýڟ <{ +TU@5P:ʝiz?+9T+SW%<̔l3 ԛ@Y`fb( #^kPITttR܎s@W +bL,ȥ%_}{䧜 7XD:k.\aO6Q,  ds7N 5α8Blΰ8 ;9D9B8lN`aP[mv;;@NXk ;f9:D a8_u!Ѿ@AУ[t~>^JZPw ,c=b".Z`{/`@k!̗o1.c [`/~E.iyaO6B6@ok~ZN6k6ؑ;sl3lz +_U;j]`;+dYW`Նe^RheаԓD8 Daj7 [4s9=RB,o,?k +VpO ++c,!VxÌ(e +y^iW"敧HxR^i2ƯHq~I_.WfI%??7NUe5E%_wyAq^`Ϲ#0hǡǯEX]=uF/]9'P:D))zõ_;] +Khx<.9$Ν`uLz G9CDxjG0 cM('xR‚<(_'q"ӎԓ$ ,k:'J>=>^$(@Op${8{ഃ~11؃ڿ[ۥEq +ءGԢs:6=bv-t][ߟƷs;4_A};eӖՈ-4,6UڸFhVXJjJ%kFQ!+TV-WV.ST!|KT^JH eUb"K*X-Y {-PpZ<_X4OƠ/+g`R8͟-̛%siL7n8l 6g$rA8{6k1c 1}~ +M"׏%~D1e1y!DIV<D z <Ckq1B3ZШ(%أ9i jTE|L&D, M*BH$|HI&14B,$8L(K BYFظ*{}KB0K`8ĘDZ#eG?-!}t?j,C|>٩il'GR>X3`ຟ~/%*8݊b.޻sQw(]g!o= +3ʿ}Sv\wq]l pe#eQlݮR2:Z +F-m%?Kva6h3 ܱāj2qLꯩ*k)͔;J +rX]C ءP`ݲXln 1{ZT@Ъu]~0ڐmkȾnm̈5fFٚ22`WMLHKة﷦4!&RH]NJ ԱbC.M@A 8#D@J`$tRtWQgvǙ[ܛpu>>{ν-zp BIF)+4Pҹj5Pq(@I'F\9I\ NU 8% 4]&4.0H.y` vBT(8 驒Xz\D 9>'1NL*FH(Dm대vvNFLDž9tNI85z rJBh ɑ{PH$ 7N5 =L焹!aGM Nnj#uNg }V fѧ#OjwBUTv=tww{;?*w`/I[qt6lo- 6 ptW+7tD\@ :*[w_Pyv0xL(WՕxm7<^m W]5VH*.kn.ΎI]Gr#IV{UH!bWk@ҩ.R* LVU*rErD ݩ$r I"w![E2vra%o.q3Q "6_)讄a\Lx-O!|,]V"ʲ8,G(VTd*!j.Ygӕ"c .LM.0*H~w5\pMYv9)Gg%ke&iՄ$oJ.&jP : .kQ:IFsI4İq:*B;A)QBjfHiI3)fhHXiZ,y0Z)BB&Pzh)B&2ijC"e&JTD,q`&wHaeD4# +aB(ç}Oi><s<><1NaSxaކ`u-_&!>X?V#ؾ{oYqb55&PE=z?rlɻѕ,V6kuxCK+9ޚ3\yCk6-1iă+Bͼ@_T5ZxYaT*‹ޚ罵ٶ,z!҃k̶=54򬄖19}ɇG'ɧɧƖ׸gͯ^L01 FϚLo,M/LMߏ0ߚj'j, @KDg;ZE\:vCn 8% 4]& .Ar1A:v +?΁w >a-v搊qqRp*^5 ~"qձ*5}*;GQa;85P #ƨ*V_d +tc'\ SQ4JĊ qS QA*IԈ@"<@I#,lU|X.%BvM +D~|n]mnܪ(~!G(V}P;67[1laru2bZ9kd6"֯׭bvSMSjkjOWNu+eU+2WZ&<=\ K]V,+˗`-[,cl @tXPX@bxGM pFgqAX0536oA;y9ߋf'͝%BfL!YBެffM"fNpQ" `kZ0MGRJG(|'@Pxr%d.<,` !s90W1ř:;D @" +L/wOa#8~C=,vC]ʹwg&ʆHRp5"v*""M`%);P_A +f+oW ԕIQZ]%b6;»|Ia]]Eg;h!Ih`g[XG>i+SǤ-'H>4@͐MaIAmy 6p"K>'aA1Ws:ŜIqədf!3[oְ{u5oz{fB +hwV2BZ +Ƽ-ۋm3d7-?Б1֯@#Ae@PCu]@X+)9b"l!!eKxgIDb&*˔HeaRQJ2$Wi:) D4KQ*xKHU@ +Sl%Ա@)HRKTIR"'($J\n>InrTq*o46cTIR2c4l##zv]zM;U^)W|g$^4vvq`[ò}xg_Dswxo]βb V=`~oO~X1ON^kߜ_zg.xg֟mLX72=s1O4 E4C<oۯ-Hdm.jTusϊ(,(a{TAUT;Rl8[`whHv4R'Y;dkԚjl҆)YCGNiO(O)rvvy&٩NgmWO P hC?>bKK{^P^:T 骞Zmo++Cgۡh7;tP:~hn=rzb2~jnxTxU湩b6׿6LvUMzV=by^Cu%Uo]կտ +FzL#]$kc%ŐbmlJPGiH }ZadYx +ҍ + Voo0lne8}2X~Zrޚv-犽#)Ǎ(mlA&B`p%A"pABq793L=moau8u!\=E0ιq夽q81 9)Nz s6s(7XGln[ ,X- +^C l{`!v9dNT_-#[Sc]kwwU([2%xiTdW6`r>[9|ViiPӲ]OJd3)q1AٸQ1c["`=[j[|;}뼷cBHh]!m;J l_|1/p}]ƪ-MaŁM9KC ɁU&et4U (&[ 4䊄5raU!C*n'[«}TV<"ʙ0IQB ++L)JC +P +TJd%,RDՌ\Jp#a9 ?'BdʊS#2c K;5@)g5hVr4e1ޅ( *FEid +E#)ma9$,>#xPBaq1!Z`ZPtC +Dhe4V?`~4"̗!-"ԇFxSO3E!A OA( E|Oj|ՠwjJ'4M9NyYQϣ># ;yXeCjK) 7  +qMđj}.j @4fw1TSrۥ\;UfvP"mW!`ަڵU;(y\;6mߤU$lT`mtj +M>s]lNظVaǙClX aW9|V:a]H]LYᄵzUKUKV.+:"V,8-_Z|JKs@,~=d!j)l{9b| ǚ?Np=boI͵Ν#3 jl;ĜY2  0[k5If̢HC JM"4.-L"*.J)B [K(f0GG)B.R['lͰw lAf''儽=2R! !% FJ)D3_ᕵ5TeZE6VO^beSyÇ7TרdpU}|0O'f3~wzA?n-ocBx7kck#U<+-o~Xg9/K}QdߢQzW}wg-_'}Y/&?}{I;˒_uO59`2]yY=9 +F_TNz뮞u`_@w/=.+\]mZ!OWԳruF njrF[xjcF9VX ةƨd*PQnfx((kb>'C(cd8M&Ro)O׷n$ۯ&ڋ LJLE\e$;"BW0 +D:.c9D\9gh9 i ((K< IE$ljo;'"㜈F>z##JDW oN!#XD, 7qtM ?NX/ d>y3FsN 18C dAԸ?;>q8t_ǫ(tOWw|q38'sztǓ{|{'߅f? avAvrNta9#6Go4;jqf& W-nM7\=xsSޭW6y7$-*[\#KY[וXY[YW^%e֕Ŷ*L_DPyFHEz@ܿ"E t @*!J d6.͓ۙ1V;`'Ε#~ qFn8Jnf˱nd9HnE8!g;"@&e3ֵLR J2aDI>+` V63WR4+HS"SJY$A#.&j$SAYqjDf8ai4Ӗ(2ƌьhC@g29Jˑ1.DiI*%FR,!M  ĐxPzZbC(VLq6DЂ)ZYdOa3XfH!ޔ3ZAiD,dB=iǿ٩&,,IU%$$UI*hkK7 "(" +/+m +pIОqf3gyUI* +L3|}n~+iACRHcuC![I@Q:6 $eZ{HHlFBE P lk:¡Рak Vhl.J A8&z%.*8@ YAjA+T0?NoB +l9_XTD-_)h"%l +YSB% ȒyJAJȢy +OBo%m +aG7=C5wG3f}+Ι) ۙ2o`3 3a >0Yn1fYM'2;;j1YBG~Q}OP9% ,R<' >Sy_ԯ=z=s'C7qޱَxPuV5 GgFTїgvgxiyB8g~V Te) <̲<r̴s!ת14<`|LhlZm +F: @‘'Ӣa3׆h/b7:(;M^`{g6 CwiåȽ~ 02>ϕ}?W(0VJcUSwVyn:{=56ўټn{il{]?NyU;n0{kiƮAg3UCz]~ ~y]=6d0d~S5UsCpT Ph,06 #u< K&F!F[l9ΏXZjN\SK5G4cQyv;9GrJl-e斊ls[9K[Ip=b(NtܴQuis;딥EN\P8qrlcC+ ǁlG۲[ڲd2l9!g(it'N;qhIN8q\1'RZZYF[8pX@8ȷM8~ʾ}:lj݌\lv1?N5DIe,t!;jfUzF%un OMM"7K鯅ƥ>Sס֞jF4%XEbld$uUҶD8gSp[^@_m{~lC³B?Ƿ.I)pvDYq#|Q;(mYQȖJJ 67E4'<.OnڜK} tuZSZ}(\JU*&UQ$uSy a ߣ"tARV(QW0HY!v +:᲌u8RzY!RrC)>T!)W8iy% R"5FXKҎ٣ux7ɣt ;S/R0:]ٟJNd_7KԞz$ d\;A&fG=Dm0+/K Jӂđ%=-d%CD2tl"I+>Bq6p$&D +A"7j!5:֦uZC!8A58$t5Y/`]0.(d kp dM !jJ\Tp*GՂW@'`~@_5k߄_4rL YQ!6?5w +{DH$dPi *v]Qdmki"MlHIPw[W~3L&dֻ7'ޙ +S aJtZWDIT@à 4,X "8!r)ĸ' S&I9HP,_Mr?R^~$G +0[HowK9 RQӀ8QWf*),{f yk*>0Rj}Q +Y͔rQ*m*ǙVZUR5漥ccnK]mv K΁\;lWŖ&xΜS϶2.t Zm]bG%ns{ZĶRڦ5PWސQ +* *GD >(s(Gi"c\ :+bT| ]=\\8é.&t@d{!3 %Xsd.? rl2 +^74pF@L*wJ +:FA=0C&.T!ljkdh+j4,UҥsjCY3ZA)ϒsZKs1E/iS$z^O YDže~L$zD@lG =?wCsgMlgdrd18L83'Fȉ}_F9kctx7atiupɛnF~&#d_w+)lQОD dl;A&dG=|ķmJӁn$őںA-ID'Ȧu$ʠXBgpf'kIm=/[slX_AB֭BY\YL [szEjf\+-ba"jȲy-4sZȂՂE s؜Y*^13k`3Nbf=] t̊TAfNSs(Qئ+Q0P9D*xEȝO%  +4Q gs ۶@b }3Z_NĀ5{Qhlܱl_hĀgb=+O}Vdv&fGoyWb;?N&G돢>Mݿo 7O^_$5kkxuM^EVgBNJqYdۧYWzٱPNU.k *`=(k-Trաʓ,u K]%PŪN3C55@mC͞n+]7@=6á^W]#t hf6VGc}7uj1ϮΦܿrISPl1ɖb4 eb$;tW"L\ݕ%bV(r몥2#;e0lهvJCYUSWf[+sՙ1W;Q6sF.G +38;趀tiR'9jF꜍(:R\qGH{ SĝUsźDG %7.NG*HPsY {tFinr$x/oN cJc< +8T>a=j88tZ~aKj ` st/ଌ]%{YڵډCrPԾCm)ؾ .`|]yMЮ\ΆM<6rl{ZZ~ܮuo2"ք~v +{&ճ|v|+œ(0C_9m}ZeRKP[̏ślzϋ6W>Y וemQx[ݠaE*bgQJ2 I}))KHro[܉ɽ!*LTNL\rIF- g'&ҸhLMZ,*wyBc=?'i*./)J@M.ċA/1pEŃ;" ]b*3Fir4K]Ө\:e@].1{_vNFEhE.7pb3bG G}1gE>l08dp×>u ubs|a|1rt#û C`:fb1C (9ۡbw0R{\vٹ@ +ۢYr-&tBؤ͜B6 پ^ٶ΀ٺ^ܖuz>Mkq}ظwٰ҇NZZ\fn2-fRfKV,:EZo̲` i0Ԣ4xjи, l`ËdQ48WCx\g{&g{fy;S=Ĝ*\?Ort5Tl?5ftijƌ*A~?*18NQp(ɸi2ԔI +fD&(xM/ML1a\6~\6n,2ܸ1r4h1Wk&p6P_cӢ >Fё0: "ZO/jF"ϓSBA`O5 +}oWwcXx(?;R;P`sJ +ق/ᏎYo9E1P493r1lMi`uaw|V@㝈 1/ +b‹GE@q*=v/ `'XDK*VlnRuV56M6͙MW(hROg6ϯ6@=ͭ@Fwst=@.J߭v X]ΆKoE;WLt(euvPu`Wjlikn1łd!$D5"y;1P $Ό4*Zb0N"%ÉQGqI.aG_ևDar!ad`4Wy;_K Ugs0C3b7 + Cb}',Y=^ =;J%?mۮb2v>/=K; xt{ÎweZ= +huQ~ y*ƶ_P+\ + /?Ӎ +ouXm5]]S,^TlwUgCiCi8l PN**rF*"U%I)AYLq.?Ct'ĥKnI;7#VLktXTوTg>gy^E{ +Np~# wY}3bu+om/E1t:g(~ OcȿS_Mk$3@R]{! ""]]a]tHHAlu^{_N&N&yyo3o52J]E]W2lUQ xG#TtT P)Ae r"NL[$6K P˨KYT }Vk6L'kVxtx|x +gMWN;9.{E,HGC G~qGը{P`++m֟l]lʣm1LR܃46sKC wEwr-e\^`wM̔l?lO-_a>巜J)ܡJnjT|S+D!(.@ +*Nf gQ 'y ˔ʐJcMwSXswA R`\Rd\5&7eНkrZN$\ `HP9 +LvBr;MNB@ى*z.BHRIP7n$(ŀA0H'5!$+AɌWbj>dFd*1(=-VQzL --Z=$rQM^ +tDk]vQI$WpI5+Qi)+c]>zLϡĝֹP"0ZV) sRGEвb"SK'u:D. pLUQ=Gtԙz#Anw\NzAu^Qyܯ㝡S<Ђ9td;H]zA9Sfv=f_#CG ՀD٦EI[u.PQ;(hff' ёCIK xQٶAٺ^ٲAZ +NCרMkBji:em\hJH_f][\YLYcRKb|ƬX-Ta.Pb,P+y-7Wf%kA `==̛̟4wE̙Ii(eT1kZ1s?SnOcfL'OT6ANLL(gMM/h~ 8䘉cqIP8䘱܌NkRQ2hߍJ%I7j3r8!FIy Su$&H'赔 hI vѨ HEJQ+ŸB R!(\.E%"?@H(%#L*CRJEP$B "8D,؈D"17"N|9)þkk#9s>IDhM%>\17?jcӫ)ۗ' c՟}?ls>fO+~|淞! 7{Ϯ)n~{W}q;&}.GϧcPXXo*w4]7%v3T +fPaH**ɩR2Rlz(f5FFCzè%ɚgi51=n9=cmr-@+-N/;uD* $! j6((.* j(IKH +t=s{+nR|s~soN)z3[G^a|K6^0Tbֽ^9.7_+: 9+{mmOPj09htaHothLONcpfzѭ2<1Fc͈ɠ!G{54U>P TF-ݕ`wo K{P54fƬ.O Տ2́Z7jtVK`'SSS%CŧH6en^i˝ؤKT+$P2X4;4=J6&[ʼn6maMo݉n%t˃n`A.)nLnd1]2= S=Hs:TRH7C36I,H +X{Kx.qn\`qރsCZYθH_RNzp͉W-d:jv(#\ڛCGl8氵`~1s4AK5}N{ ԲaMt$Ř5;{}=l*NۢVØrR8iwWif]/J0ΒKBYl"|^L1BYqHdcgOA"BI[OѬ֢5tI=XUW oG٪ +X| +" +m. 5/h l^>aNYWe>ϫ궷WUw^Ioa&ƩΩ4B>PI8o\q8=dRD.{Qp?ӗ0֋{Qґ +3ļ{ic +%.e.0fW&AIcUpݟz'0R~?cdt_Re|[P7t~3YqKMRܫr&I@ɾ"w[ x'8)rx!#^)%"\C^P qK>0LI4*ճJdwtj%" +$VN'X5"4') # ]:t!УcjVg);sX9Ry(8}PkGwbrrd|\Cc#HM/g/HW p &p@Ȅ p `wc8%<Fb.}˷|˷? x(%XG+`C%fKr¬ސGKИ[4L=MoIGiFV8XOpzn4 wjFݚ.Ó`4֌ z[CSE @;`]9vWٺ*SoMdkHf@ ֵwl.bC RBQtUz$Vܢuu垙d9̲>;'rV2,uAHM6A ݍ'}Jfj5ª .#b3d{=#V_LKъ{I$(n*c1|\]tX`b\ G@6-% CsnN;@ HŸAdxkəFiG#W ⸢q₀hpvb;#4FV 7s؀Q#u4f a쐵n?$ttD?t'@_-Ξ5\a=vAvrEtWi];":Xa}a{;۹tTжvouBӆJZ x㮧!lxZZO {r(8}7Z@=amo5l[ӝհ۰U;(ܐlo]|_|WeWe^yN V3"eD)sJ89H^W%%9$D*ΖgIGHnL]tH ٝ2v/qG7cEi +^Q7~,1 +R)~XWß) X~?CT0v2*7I"0$5''Id$ jʊWI pˌS(36Q!a1FzW% "vDDRk%J8HijpFNǡEğ$qQZDI +CĜw$E" .p}Lu(%9{4PЙ#:Ӈ)@+% Pr +N!GR\:8ut!8wSةC89(I-VDF o#Y{Qtخ[C)ڱYۤl#El@!۲A+אo4`->oZѺm\P{FVA_BR#a]ZB _/WqZj +rb\DH5LB۲EC.Gv[B,D,hp?A.#Xg)yT 3g1w1gkT91{1kmTcGӿEL2Y!GL:W >>"pƛ3^^^8y>/1y4_αR2+2~`|X,οmN \20 m ~.fp{b` QR?ECF;o񯞙tM_Po0sڟ5Ojc2Sy>o}bm] Y^x>P8$q\h)M?.Zh.UIjAQloզ8=bk .Z\3fZV4e;5XZG.O1πyN7_ +zۀv[=͝^K]z;݌=f^7G@q%e]ڏ]fOlVt]WƟh;:^ N&54wԿ~^xռ=Q6MG[5jE5ҭj-0hme9[ʀZ}_K`< FZmzOK6"z}ZHMƨrJVXQ>;ʀRJ0;"^_LK"'}{I$(n*c1$_@E:5WD;,Y2Y9o72p9iR1H 'g퍴ӎa=HNJ+ ƃKeʶ8 !Hu,cQG"wPDT 8{J! :3WtwMn8rrt|3k^{M~:hzT RZpLi(AF%Cdzf8EdA"I$ h /:9)N߁3# $VMѶEEOB(MK8 +da3BSL!`(b >1B1a#uL>PpOqZp M B xBULP@%t  n߳r&$Oˎ"mE{Z v,)Z޲-gUˠDHPշ8LdMcUuQ**ʯ* +4NEȤH)+=,}$5!B E +lL狱@ +r }nls2Zi[zU^pQwJ GsElGt;ǖ;Sm cr,{3GCݸeg'guAq,Ӂ_tQN +3dtr0) ;傣Y49;PrwdwN(Sp9g1ReQLJ +l7d*JqJ. s!IKT O*g%0i΃w '!\Ujɢ8XtE1*SJ@*)Ji01REt2BIP *L|Chq +Н0q*V!J\ hp& +t@* c0_Q#*Lr +J@ V +@Gq^JV +V~JhsU>x<<8 +XVP}h~0q;H 7 pFnr~>92.|oڷKٻS&سÞhv;m9v;ۛ6kSVf{2;V6c7A|`[eez[Msl\+lZc߸ZJaa~d*)eJYkbXB ^[̆ZL ,_j3DzDKx1KY|H[X[Hhd!nf|!Z,pW +'RY)pir>#A8;>Ffce/bRF"Z$< 5[Ab>lbX Eb@$1!M |(\.T,eeeEb}/skq*چǛ\{N(t{(k]()kWBN c~ >h:Lf;=) -&4dM3{?ݻM&'?9MKs|d1O5+R 6]9ۑ?7+̑|-$ 5 3f<*_3fL]_E*:S Հ 5 ZJcj1h<NCyӽڨ@Nuw=EŚ>)c'7&)Og['{;D(0V:N&c]14teѮ˪n.'׌)F:~ ZFZ F]&!wգcM 5z6z>P 04zx2_flQk2>Xfb駼W ԼSNUM}m@Kdw3В? 5MPP3-w 7IPPǢuEQP17J3*LSek 4PYzfYY 4CU뺝 f(9]M3nXpL)"3 +-(R=&`g:B1uqՂ+-a!2%sNk;/ufd\4# P.݂4ffZBpւ3L'f:OjTr#v3N$Y?>i  ģLqfĐڣm[Pt+-i = tȩf`(b >H b3C1a#u$>!õ>#fkQCՐ-h T"˩кq*sZ!<:7ᖀUMⳕ V% t9ɪ4G-&!A%gdyE <]a?S4*^$4{<3`KvvR'wR%Ӹ+K٥T iHJq6[wJ:f`';wD;9au搚ۥqF'98 cՀU> £{5Q3P5NR;gT\ +7&.VN5.ƛՁV} ݮv'J8HpWQlvs +!b6Bh{.:T= +Q VVV%|rl՘mA*L&5&4]&QI +TQnP:lYP9l^dSZ9EnZp\۸Z \gnpA +V䘕2LQhrO +2Ke~F.fjDq |Ɠղ2N̗>b|Oby' z`Α fK͟A̟#:̛%̝1931hfNx`fO͚.@M*LdbFS&&1SX0Q$F"`<<\'uz$v'x!rbRBEb)!)#QA HD0G9ţVX^? :>ZpŔOCqk|ZM|\H8U7բ7TC.V2 s(fc*AcBꩌ~hgWExL7m;P;Ph2 +A:Dn^@[@&mNPmśh6BϊgŁE">@p= +ցd>|o5 +9.%XwB || m(N^YSsG9Z.<ύSkr-ѹg.%)I|Ut9Ui[MFtYB^q6MR)\ !(jbM.$3 )`{媨X bQ#JRDJ EzH/)׺L&}'o&9{s|ywɔq.Cz;0ӭ4 veP +HU" +S +G! dAҁ3d5E"/I #*hzMrPʎQqdVɌIuʸ!uYV%_Vzr'EE_VjNPE(="\9J:E$V'h!z: <:!^XruҀ>) ="* 1=G X%gg8}Āu0Y6Iԉ><&x)Q d.,?F+R1RbhOPcFJ%<21l0OoG)^0$Z +@Ր0_@hbĢZ!F(B.{TrBa2RRL"L*QRPF$ ")+Sb,H$旈W޼qW#~ԏQ?|$x ֨ -c]a||^Md}`}Z: 6ߗGC <448ռ:|Osr9cc{|4. -S}?ӭgo)=)Gϴԇv +pwM.z&+wOr]DAB2vNP +7MԻQ@g/6&Ru/nT5(j,J$4>PgmfQyo{TT&ZYUFu+SjigYZFNShnZZ-XO8π7[_0ZہN.V_s7S=;&nX[`qixf˺MW4v5*`Ww5b<촫Qi19վf4wصuw԰pW~7/*޴Wi::tWyQ)wm21l/owCmTsK)P>`jtjN,}W_*S9*!) +N9#^SMn`,DC={ 5ww-ƢkcaՔm3EZ +<\nl͌n@s ٰvYndBqafsV_쬍F +8WNeHo౟&wvJXT%0EqC2 +R|d YʿB%)HFz@MT1a4L|=&`9 .(v-^#j*;FRY̘;_Q\Ynzj0j\⊊qOԠ*.n.1QP@@ٷF"N/I23dΜd^Uw5UWUq9s>{z!M9ke2"DJtTqDIӊSs:Fa*Q +R(D~29)yIܳz$=!&;¹)3DzA3L鉌8?Dz:m@šRO;wBC0J>N!RNJ>G$x=Fc~.x9BQq)7Ӈ Nxg xƐ 1QǢ)TG9guh/` āN٭i@\DΊ +}a7!߳"`=$c6=@P$ B!vm1;8 Y0i&t +٨"X[7hkS-^c: kՀ =5IYJXRXRRk +H-j ӪV- \FpD-_F-VX(TX`/% ./P SZ4W-DSp:-d,4 \99yPsg fP`f7YӼ3D|>U.>M.6pj9b?-}L7)I82@k1DN#ChRNK*LWP+RP(^0B&a=i>>7+1o7 r. O0 { p)OIR$[NyqӓPy|O>syzW&񐀐xxb^//[z?Wkjhe >}o[iGyo \-H#uXj~7@|!Sr,Cc^mt‡@qP~"T^ e"N ={"{}'1W uxJۡE -?W C;1M\AMsogq|ryo>ul4 )^Dp7Oi1a3-Wo˰I빝2]Lɲu8fۺ+a(׮!494Z-"hsh/1;h@;EsW7(e#3k#^wso 1a` c X[X@8_:i?Ut~fQ7Qϴ>_hM}vmNM/i&.򱩑iL />|E{UOo^dz@o!`au~C=+m m@ 4YiMFHCU4J{(^d(/PQKoF8TCĀo?R)H}ZC0 +*G[+G+23iVUp#u&*+<:ˁ2y\rx +(IrU ;k*b%ZBPOs#GPNse-mYgl\<2C'G*,($kO$8F"'xgxĹq)'sرVX1[ |LQ w8BZaX`9ln?4D~ D={`GHp>}vl 2ՄVGɊb`鹿-6!{ C[``G0-w#ﰾ &m +3~u]ӹk:ڎv\ zc ,&mUHkZZhs5MWE7T]y>Y{̓QW1jJW$2WuLP Q]#_q`LUg=0U^¹<^EEbor:nJ7 +"%Vc*PJܐTIrCiWsTĕ<-V8e9jiy 6Zwdp)S/djHcJ3t0J4 j4Q4 +/L%y` xA ++?(QyI$$Y +Hr(@ʌ'Ąo@d&Sip tc osPPVPV@EQQ{tPPΠ"vgݝqԩڪO};o;;U[>UzyoW~JAasqy9#'[F,0ڕڑl0ڶc.* ++ 4,{^ T >Z[ m-5CVCf^Ö@btbNMPIS|t<>{>S]> b hwc6uWzx=@/w}O#dͳVVf7P8]MЏU]OBt5~YtA磟zF!ݮ0u<zi۽g} =Q6ˎ^ۯj^um_[yV_ subs}-4@-Py꠻xA='A(:bT;T!*oܔsQ}uP^ו737\o6]ʷKy$'P*fIpVi7NqRB]㤝F1 nxp؍" 8(pub}nH'rucvvCv1mrȑōb Ý:T 1=ze 6 +6Y6[jQib6@)I{D(.)>/%&y!%uBEIlB%UE '$V +7עWֈY",i9*TCYhӲ(0[%!$ɍ7Bb[;<-*(0[:j`j|UR(;WKC G_^ +24M}"(a鼘҅'=( +u^M)ū>p *UJ>G*1g)q n\f0`*?MxS̰>N7JT؝nȻVuCz\#{?ixWa\9qG\.]:ݡp EZs*- +C`/̙B-A7" +h~ԁ@Ʊ%QJN]C0#r, ՋP{9VԑuxA +ad1; $o3HڿʎHAasqy9#wѭ=ٜY,`+#3ٞamlMgNAnlۖ49͈NAdH4HlLxֳ⍲8Lj,K0bRb8YѬu2 G#q ,&>e" bKA 瘵^T0!Фu1Lj=Jbq v+38e;0)b* ]DA@*{ TTl(( UKӨH$bv71jW}/sg $[y)qP 1j +9kUJįT$qQJ*.JM[ŮPAHIt\a%feƩpъ0D*U +LxCɉBe*qiB&fA2fe~r}eD>R@1K4 +}$6b|<Ō ^,xH`<0ODz3-eY0j~0ݡ~5~ ߆}M> /8Kw|NAf2[~&e`t޿o}k=n7ZHFz`Ys&盠?M i?+= ޘӆGYOLto/ΚxVh+=3(oUP~j8c*r 1VMX$oJѶ:ި!84=< mW_i]f=7xusJgPk`{msw5` ~-ȃ~(0Lͬ꾧6Lm lbRj4y]znɛݵo^vLB^WOvv=k&{YuUͩd ]UoG:+Xc&?CWSG+h0:XYFZ'CMPN5pSQ%OHS%¨ak5By& C[j6"6lYOJCnꭂR2z*QHһ+Qʡ$%}kV"YJw>ZJ{Uʉ'4nX(ؔūQ`D>atjgVu| Y|+ߠ",Z&'(Jxz7s[2?dxaC}hB}/B!C!!,bP*$H[YIAF hc3g@H!N @Iz*BI:B#ZR5RVM5:2,a;ЌPE5)Fa!%R`C`âT*E1 d $ BMZPVaFޟ0㇞0;Ln>{Ob;d4)}[DݨwI߻Pb[7B/Վg0o];Qb&n u8ao~Ì}_jџBK<23ih0upoj&Qt yI= 9Gzse'>r詽<?WpQ+t):/R쵼TҴ2azw]lw]%P輭US^ph_!Q> 2 R#jL5Hܕ=\9e@\>}r)9]<3#.$y(x j*ɣI4ʌ8h$NO4K:s$كgpN6Gi8rȂ8uuG,}f>KgA3j7GwY:"zthţۃ۬m۱2{X$Vd諍bF+b &cգ, ĶxO`Z`jG, ƊXch]4O*31k [D#9&.,)v Ĭ0 Dl2иUK0FD.qfDD\l10vŗ&f@ZʲFjBa,]ȣ77! d`sEs4D/(il#R2H7S=;À3]=@B/ipQS ̜w1)H-`_L{5mb=bJX<ޟ2iOMѸ ̄: +6F0ߣuq#u1k?4G1ZĨᨑ4Ԥ'C5 3D:{ +: ad fBP!Aj.J +0`LG#80LF +at"dHfԫPOzש:jU~@hJ!j EjRͨi-N։hay )fD4݇(y$M0 + )Js R)E. d ;SE(H?IT+ʜ^3p~k".d&-Ut- VDvE"P@@+H BI[oL2a0>}|sJ>X%#e?M6K'e>90_w Fa}wQ#nyod$(>-&i0c8@0M_SM_VLD0GcG;~g.` iO kobfXN5u'Y;KUA(J4}g Plʮ۠rTs[%"DJ3657Zή>ݨn2FɮAe[[U:۠jsvr MWz0ZG^@{O}csPba]+R] \zf{@5=6 ?Au=6Mv-uoV +PԿm^ڽTּT AݕC]C@Tz+unR9T &w涾ڮlƕjʉ,w[J +r +]]%v$+E4T 4:TcCa 40r?Ѭ^A>NcGJ02e]bI8  ."7;tpA*tԌ8cv).$3Hbrܜ SF\t#419 8{N[Np:fi;( |#0ptTOup~!C-ƙ{ՈUPnyLZehetC!bsMMy+euyquk҂Jp==<**x&J󸈲{qdN[B.(-nȿ. ݐpB<41//M*/"'UL#qv*UJȾg'sȺ"$GťyR6؝$?v-Ir,=Qe)* gt K@\ gz^srFW3Y"-ɧeS +DiT)\>t)ᄂѥr@1sGQ(3NJ:`9%~?>%c{=Jvá +]1;P i} +V{ٳMFpJ+;ZعU1" 8)v}tF9FmSŬ[7QQ2Dt %ũ6GaL66b8 k ljCj)"rnCI+@8 Fz/o U"V.#"b+3ZT8߄Y惜׋.- a"Ĉ`:|"dq8X.2 + `! <@"dբBDPFp`F|5׋F?1w͜Yk>}fQ|LܩgDP+p 9P g%bJ*!$6NLzRI+ 98i˛{qp/Lo&`| p 'aQaTX%#e?M6K'e>90_w8XQc8ވa7:%8aC>3S~_8D/onTNϽS]1QL(ឹT63况mEGܐj(Lv&X,dk;TbUAi4Z]5AvJEPfRAmjnU@]}QeՍ@]Է,uA /^^@=Au7`@v=սVSyp$BHC{;Գ{`E,ػg/ RDEN& *%)=Իy.Pg|ϼOI';N#\[[h7~-7Bڍk MMzڞѫjx&k}\bo1W @6sXf^1h7;)N\1VFpyܭYcPTYC-f>jC%ώh*HL{*2R)R1{h +)N4z6ť/Lq5h\$Ax/m><X ]r7r"LJ>bqC6tuÇ,H!Çtq݇k,8*tuڍ"C,.3r7$ptE|8^3,NpI?p:և81h(#Gzat8H9쪧;pYwtf?>ZhG =݄j*J.h_G%ÎvS[r>۠8KV]Rcew(nG[f&h{kΖ;^R6mJf1ERb_<42(iFyւJYCgh5])͖ǔ(# +rhsQIJMM wo4.]S,Ҹ%yy~]PvO4MiЫȧ\ QrGĀ! sߗTrp.x-|@bz/`4_Ml A RDAvs%?LGF0GR!*0lT_ N("/M Gܽ&榅B";2QnםPDU|0vr֕0@u3Y!%;)NEى +.0%"+A1*UXFUzuF/X]T#IFW!XsJ5v嬊U%$Q#NF%uR| +prtOh|t\1uᨚ׹#Vgyw!5SUfNPsi +qbq|!ql=jpđ8ͨԄ;UCvhx߮FU1h{cԼlS {FwJ3+JرEoRݬT8%fmbƴu™)-TH%"*BmTt"P?*k06E(0an+bC++䈵+JYj29$&4ݪBY\*V, E,_,C,[E!Q CY@d B}?_Ӣy! dsBfclϒ ͖;K͝)͙!A̝kt)b4 C̩RŒ):91eR 1m"j Ĥ B> 3!y0ۯĄo᜾+F|55.8ٽ?"dwz7"|"˿f-9s } w۴֩;.A$:6`Y Z`彖9R-b˂ޗڄ&m|((J3Aũ4*~*T*e t6FOv46MzLρn+hіj2agh:u:.;(4B=O:Nvc {#[j@TGa F h7[j /H-sڮh3WjjlvnRN=meW[~zFrZ:a٭8TTA*xў +(I1veRz_B*&*"R!%UHsM^' z {y٩&=$3BBHb]W]Q"E)Q@@)bB/;v$U]=yN2pd(j׵'ij 7^/;JQ׳+@0+CW']=?x<~| +:@;ڏr+Gc:{rCc:}{[D]];<]ro/VˣpoKֺb2Kˆ2 JcRwCR["ԕJ>Km )0Yu~MS UE$96L5rNͬRYa v{ 2̃B9سE˯ڙ/g͓#۹[Wr\2?lSzY).v$LY +$K)S)P0(?A)T3T)i*%$:ČZRbC0_r4Qc&%MVIRPIZ"'QE5$-&3^aqjHհJI.iͼDqQZ̥h\r$seu1B8J w&cÜX]8=3#'2&T*:D8Oi0炜0ZgLDp-4/⣥vzj0Z^5fNYdwI}RCzYyPBԄ8>sTD0:&ٸV'0ipj@pUIMH踋#J?M=L:@_adޘT3 vzK.JH7ηPːQpPېQIϬwPQ?`+w/[޽hz|`F#F_)c@ÇWuݬ_ K#t=M@ɞ6#ouW f#%gh@CW(ueOw6BHݯEuIIzL*iY +TL]{e"MY뺕l躑d)n%X`Qʡ$Q[ +p(fQ$຀k, +9$G]43zWQ(C.\pE6,$Ɍ7fŒ@軙YqHE2PF&1Н$r"A@<88 1YDq8d6"fD"tG2zpC'! `Y(L!vTpt["$H j'[P<тƚP >3\F< {tf_v48roB! bQQ:bATԱbEPқ(H BIggٙqƙ_}or}/Ⱥs>y7$a1螊a}lwE0-D* DDvv~]+U ʟ?UN`E((h/w $ʛIJpC(mt+Ȉ l c|m hB6m +16սȱꎣ;<1RuGCP'rM̚Uv S-1V\ CL%,IpYo3rӊ%0ygqݤBy +7=)#0גtuibJE$@UBRqQxB\.dB'@, "GX  %Vg +!!%IZb i1C,h13JRB5]@,Ȇ>էTwQ5PCY('VSeYyuSZrzo^s샸pP'M.MBA ntQ|*̻0Ssnx+?oC9:w rC嗁o8w-._ʻG9xvpރ꣼[lz9#H7M^X+tG%ShZPd&rd}v,;X2i &uYqET$\a:9t%H*~$ΟoJs8$,ΰHpcM7bqҎx'8Gͱ#x#t!pm5r8pB{č↞ |ʹw:!rOT-!,2S3tӂhQ]e$)]_^^DE,xQQ^H (|ia>`M m{P`]溠LTКX©,ٹ<ۉQE1ʲ ȥ;}YDcJ2)Lq(`gVyI&/N`tSFpT٤HQTPy=IH88IYrqJMTrxf,"7AE[ gPi0>koԼ֨@jq5xR۬[=e*ֳ37j֬PZ\ 1YTCAy.SR+*x-S˗(d-[,GQ)!RtDy,s(m,P0-d/䘅p 0Jysd(1̹_J|!98ėI_̦}>Kl6nT5(nų8ƨ` n]zqs$Fk!!D(ZSKc +#]80erI*#\2H )-d)C"cPZѴ|&ifQ$)P$([D"1Drᔳ3rTS}rvr/|`$'sv{S +f0~˼Z誙|#+zov#3p#+2qZypnʞ=Xij`VC Sul?ž{ |ؔ JYq& k_"Xxg +! +bu8S-&v6/TcϏ2?27>kVVlBEdBG[dHH@ +-I$r]17 mqׁ;p#uq+Z-丁0]>l;pMU+{~v ufqс ;pƳg8:5:AV'|<;7BGgè5!^AV@U(#\*q-GvA* D|S +}]g{][e.Ծ΂/v@A? njd+ +̶Dmfi{)RL^}OR8,Sb') 1+7Q=NRQʙ" *Q{ +*\٩﷦4ɽғu.:P@E"{/R#" E7=`/;;p{nNnp}}>'yܛj"M]IU$*N8E2N)(Y(LQJےTD~ +OT3T|x% +"^!sZ8 D#1jɕ +ʈTQ+}NPzVX$MER/i-NJN JC$iI :FBGA`'(4Hj$jh,vߥ[KypLc6_NĐr!.c 2 W/~[%\ԇ{[~d]<{g3K{EBiofcGixGIDҘ;@iDt7i (h*нI*:iQ4O6Mm{MOmo2FIY#-Ppk+ЖcҞ;<fzU yU}V]3=0Un#ƻ*_:/_tW=_9U d 6\9T+c1WS%$mҎ +(uSq0=tm%u+%3GFn'֕$6Ď5܊k~QJUlCv" +XV|0.cڑnlȲ#X +#'ؒjG +FI6$b$B8qv +ˆ 7 1p=o h.ocl93MAg8 +od;4ǩ8'GNp?1uZk#?Ü:w +:{ˇu7_w~] ̼g,2.`}6|"=)uh7q.._;1}v}xݧ3f;~mߴvjg-<96y\cm,NG)(Y(L(HVZKR OTbYjF^)^!sZ8 4ˉS!̎AP̊VheFi}FNPzVX$MER/ieKJN JC$iIC/ŝ ańhӨP=Bs͢ޮsDdަ4qH + 4PNΟSoMei zfmDA*`DEb/tAzӱ;DZ˞s Nnqvy}O~sO~JP:AzDRA8c1Ib(FE$]O/JgQBޢ:=Z:0fRNPL=# +N{#(2PDŽ"Q~ "ԟC4Djxh?hXv'y3451v(?BmW;ݕzڼX;ܔ&nj +DlBM;:)I(\7%s٤@8o#6*-D;DSLydӺI:"3mX#hjGu9bJ)~\@fZҁZBFj=jL·r=DqV-q$fW,I/8,[$c-~#a-`Xhb|[1g<;>Nd޷x~#e}76R7sPs"lHE1zB)B1j +QJ BidcJ!SE(G B $2ao/ƈ`̲[I(ؖ쌤,RೄhEMH$Ĕ`%&H$3/"1WZ_࿜5$Y,Ðkg;jֿFױ4 aX;GAFg揑5O3"ǁ;fë })W>en?i[ ֿ`lڷKK}YнȨ/w/'Z0#}%^eҴ񦢔SЃVa4u*;ch'T+Q֣VQ@턺z({hД; ]jiZ/ O N xQ`p6 tMhn`vkn34|5"qՄKz[ץ/\/idU6i6zS6jlRj2jں>zz:Yg]5ow>z|]']wg%}ogN9xv޼8U񛡣xG,imnh} z]N}#jr!pUJ!*,(2xJy𙯄0C9nD`=g./dAF2k紐Mm ~R C+5B3fAtr 9ah!JpŌy\3\4#ׂ͜l,C32-8Op΂ fCɆ&s Py)'q',8Np̌Gp^5Io?2#ق$oL4c8g{9{ {08L,O .nq4OfwP j? uVt__.:!dwO_0'* ,@ ȎRN>?(C a }V񆂞ydgȓLx@B9 :{`۝)Zosrø5tqo2kaprb5viŧpT\9&cE5UyUE,VUe @2C44B\I0Ƽ4fM9Ex2Wh Q|Hى]Eܿ(%E{倸+D9͝\GKĈlG,dlF +r> udf +)Q gD{JC :F\NWSygT<KՀx +Ac3h夨}v*#(+E#줖p!<]kyf -1 "V٣ "Biq4ߙÌӇ%3D4SԢutjGg#N&د${uDhJ'(9^H!H`v1 "1FE$]O/JgQBޢ:=Z:0fRNPL=# +N{#(2PDŽ"Q~ "ԟC4Dj&Raک + +^joyM +F9iڲAov+,8:7MG0$*1gP&L  +HؒAEɩu e_Uw{BCaNhK',Bg*cZ()d)8@ AII}X['F +a>b|0OBY'1zX$4/1i\єy^sHs=rB<(\Ctق 4 n gI\qf!3\aZEGҪq VA4*>DĭR)0 rG Lr&A$\dbD,BD" BN :)oԧyt}&z}H̱mۓMw&g )K߽3\ry0q0ah+dg)b$qPzJ(3{dl-*RI)̈́k&թC5͡ZBPKPo֐nhi$d蛚&-Veu x5il t]f[zHM@~R?0 >#7 OHC0`,0)mޙTDGIo#=K{I L?WԽ'TwLuԛ5tM]&@K/jH:>r|b,'t<,렔m>KFl(UViU Ƴ wuU%Zŭ~.c֠ڌJ +`]%KKtJJ( u@ň3A>XK(b9͜R &zO>P_pe{ y64ڒK8̔C`lBFȲB )&dؐn-F4x# -HEfC +B2)c%ɂWlp %nB )'G.pg)'5m`;C86RtچS!( ,8p4v.刱p CC:AC 5P@e}5a/m_ͰI*v]z٢׾,y"#q4pHI)Ά%98}Ň<p; NaЪ d +%<HP8(ҥ$p'Irܔ ݿ!Fd{7\ ' +uMy$T$CS yTX5'X|ZHYIrRv3c;UN˼̠ݾ, + ƔqɺDgJPUVLPZwQݸB~^ ~^eU9%$ڪ*HRcJ>!%ū 83*Vt +Rrr\: ZIm'5V]8fB@ŪghNV#3ƪS*Vs\X* Q|xEqqeggf KbwPlA@^Pz4,`KrYwvy{"F%B(D$/kz>6KA6Bz0~+ޟ]s_x>P']xt0w4nwkӧN/({ܿ~!w;G`ڕg1?4ڦx?Z_}hWPԯSCt_0Ah/li8q~mZK8򶦥c#m.V?)ϸ[ =3YtL + ʾbrr#my@~t7 *jWc~;\֔Bq֚2ܡ"J謪jk:/~L`שvo:jѡN[M3hhځ·mPףVlOz2Z*{>-UOY-ln.gTp+l.*j{\*n+wt*~U5U5M%_4>gtxP}]CA?>MC~XԐhhihg0ڀ܁w ﭯ23lr?Ԕ9<0̊Kr:Jsot9Bq| d9dveY21=`vBO92 { +qgVtWc(X@(*a-anLU٪o HHs!zkRY{R *!0n +Hr#:Jp#ލJ8ס3657b1b\u##來+㊀7.c\ Ec t0 +8̠{wA.־`ۚϵi ݜՔJܘcΆ,miW}?+MivKnx{-X{CfriV3b'ώ-`N?b3bn6a ddlhFl0 &'u`yi@o\ڰRm +=crӚezĚ:Ī! %zu8EZ[P( %5Ԣ5X }ՠPC,8-7hs4nVc4Y!Ě3CE͙I͞򞡤HxfMS"zB̩*k%*ƴ6Ir@25y1iGʚ8^E:Nǁn+뱴qcdƢz 1&x($CK&0QIxR NC$B)uI"*T< +%)+rIR9-v29C`P2ZѴ<4E(jIIqH1!DB#ŃX#hF3#qIȃZN"i"SoKϿة(-(3M&59`(fET@V sBH0DPw5 U+ޞ}UQGТB{=]U]J +<33h;66;֝-] NYƴGlӗnƄo(a +mi/1hSDkz&0[Ö煡Ȗ'Z0Ņ?Ǵfs3jL *9!ݕP;p{p;aMi+6>Bmha-a)m}M'n,,f +5h-R{u>mm͕kko_Ss}ޚкn4?*k^dE_eaK\(e8O8$ED^"9( Isn9+ӽl;""qc#pt7q',W;%S,d$lb&כRӍ 6A +IX]K{ I!!%U&]I"Dl$R +sg#G\N!dvd6rNI +yN}N9 +'!*) +C|3x5Br>N)-V픆H=fr PRNB$h8%W#Eo"ḖPSə^YV9kGda !Aoĩ!9_c8Op&ղ:G:Ci98K`:Cؿ]8cެmko՞ o6i9&iYmۨquӖDf:Td(*"D&CT*gej7Ԝ֯TqZJET2Bn*d9j +%brj\Tj9Er勔  䈥N +V!pH6 zrWb/osdļ^IAfɜ ru7sȝ14CjBN:'a0MLL3Ĭyb@ЦODO@AEL|<1bICLjw35yb8w6BLAX_FQƌ$5zbHHown֍x VШHNj%P)PJ!qpL$"L"% b!S0#S!!"܅;aNqnD6," F߈D"y`a%d)@(WWW^X jذal+~.W;!."p"z۽^,@%??@kg6~ +'g3)31`F}>YQ=6 șw,oFYPg  '7d\]&aߐ3S(oO#؉opupzE?;&bc=~>/;D\!L:$! Ŏmq6@{( JRHR@z uuW9LUw{6X6T__S2X8ud5v5sÃkf+SN# kaF[LVH3*㲥)NFp-$IR#ui98lnH +8HGA=֕X-&#Nlo܎Q7kN w$_r J3:(H7a*(4+񲁑pIϒ"όp7L\APE=&&̍BŅPE##&`t' +qs܇1QFJa펹tʈ 6 + v/4?a PN += 9fĐvsG :sĈ9}؀9sd +HwS+N7gc>tt=FAG p688K/Nf~>?=fs# +ܡRn]t_m#[h-:t>8͸>:Z&tF- @GOԖZ:u:ZMu5ZjH(zjW^.ҵ^ByY*WjJ"jrW^\~YժejP+k5rOYXE* *j"%B@Y<_=(@ChRZ8W[dI1as9rff,L9fL5k%9GWv3㘁)cT״)RSqSe")F)MpS^1т: +4ʙUҸpj U%aJ1F9q`I2I&PRXF(TƐB4m%4E(+DBgHLI(3bˆD"}Eqg&OL7>y9 IQ4i/\yG嵧濯X1dDzח7y`ܱ,\yty`?߀ @^ z +ٌs3?;*!/Tܷ(>/ *J O=xo~=BC!17x}'}lAX,q(wz1S{bkmu:R=\iiˍn-1QPa(6?JN}5qRnZB +muQ,P&%JT^BRC 0;{on\Ys=s<-\:Q̄$WwǪ>٤iIMi&m3NiҶtV0L+=xe tgnEUOވ?Iz a]  z`)"JjRz xIzUkǽЩqol]9Jѵ545ZIjR{;سw uֿyիzӧz7W;1Wv|[ZU36S61[ȀjbWjBYvje_>G]Xf2qQaB̢% Y#-tCSMAfiT3UPnTզqu*\PiEQAj SR6)Ɩ*HeTE$U8QK5J64J$LxBz F'd(`k:G+Â* {?E:ǻU̱O؍;p#]PwxCo?Aj/FcM-&l+mo-VМx9))/)eEC.׵ ׆<<'Tq="CU{ޙTy.8\˲,bf4K@(ϷwWۜإ>ɓL  `Orqez0*MqUcq^ +~Nd +BDA&Kr RE)BD~1)Ӓ,&;ވ$1C0e'zJcYFPqf}2b%o;یngKfݍ0eVZ#nFIx̒I7>MuH.QU'}YB Ā.ꒌp3BJm@ܺ(ED]P8u3\N&&w +Dd6yr]='$W*9R.qS +Z'3`fa! +u~.Hf"G v x渂(t\wc2 +SGNN2r|# 9$Q@DKc2ZGH?ɑ>$v0'Eqpp" vP;Q(8طݛmb@hIyvnO"Aɛb + o&oZ[7eˏ"Z?mbblm\/~ڰ Vk֯!V )֭ZR^Blr/ZybAMgR+Sxr,_XȝnB’On.npsTؼ9nTܹ 8vsN}p̞)pj/LL_J!l: ++a +)KT!|Q1!b9-`b!E<9lvEqY;Ea <>| +8 +?sy&q\ 8q)ЄfaXljXRBYf|˷|˷?at.3\ŕ06{':>al㫕\`eB8GsO/˺Ok?G6yWit ??&uJ?Q /f˽1_oCK E_/ LyNM v%xۻՋ ^iQMyE-swYx;Z@EWoU,5*LM2kpuwMԔf6&m JjK7jո C{;ɴ3j:gYB'y ^Zh{q>4PuP!D L<-թǀW7NMe{ukY۵}-]DDT,TIHB ($*`Uw}3_y\ι77o3szUfCYn#TQCJgjHu$=S7j tj UfKä{i :/ mMzZU/uc|b5ZKw4 v=yk7~7տmVn>ϺLYvy潔+Y{19,sueYRu Vsæfչ*@eQ6JeY2{ոZ&*D%tQ4'tKm-Zj0Q4_J+"wb\_H QW` ,&Z64:g9<6ߡ<_@*y[B9TvG["޳)+`\%q o(Ύa%dʣ;]  ,~V ujVaf[w :~2r[)I|[!#&!L RC07S$4<$Anr$ '1ԭI+]\K%dŇPαbÜՄ0{2Af2.L'(/ʈ QK;/ä\RI2JY)[WF)9&4vPI );ŁsBt\N=`u1FNpTFqv;# gG!ň:('< p/ wqlQ^9c:#Qrw˄CQw)vʇFbv9d#g!Do wEm펐bvn wDm$m[7[/uk\0EH)n-.b nա.6 +a~ukݪakW֬ )zy[IhB+0ZD2"?hAĭeqK PK ~\臅`Jp ׂ ,D#qpn0s\|] M`@Ff9L&sfnMߝ1Pf~O1oĦOukdI~io'NҪ+trp0(Ge JTfb1U!B| `<\9Ѻ^,LFQR:]i4RR"dI4 $2H@GX %|6B h(0MH4n05 +5 A Iu $%Ph;4k:R\O&ی.&Q]o|HK$f"Hsd>C y~&g}_՛~UAw>uK?INy1:rE5=‰ OW={| 95K8p}plO%;otblݳm+RR.Wʆp!0?ݞNC =ۺB>rGLjrGY&KdǪ'`U1x,GdrYTs&َUf;X VD1re9C*2aNR¨8])lR|R&q)x` bS`] Ėq5K&uK ('ѕk Aʊwf YqR2c%TѢt;'"=d8svBn#>E}ɢ=;!;Q挴sovp∴}w;>e&{3_opXe=dz; +M_6[ _ +-ڸ֞azV ͬ]-bY%B6Y)4YBZφb9'd\&Y ̍ n2> E.ٺIy,2 I+" quEHϖ3ۖLĂ9r lY{{6ΎerlqB;@f <>ϵ O9<.ψ]p;rdJ؈X,2SlmmYRbC5 +]>s>scg?V++[X[٨}}i?Efw[In|!sXv~n_ +f'^GmVzƻmkr_Ħ_7OslǰX]Iz;S^y;n~dpnp{Uq؋W8z\ChLƞM)س\k4M굧kN,mu=^ oZ©רL ^N^~ *&p#}Inr0M='L?4U-Nêfjzgq?T?~n^g㨒2C}5Y 0P;^ Ͻ{>f?>xVZ=4jX绡ַMoFiFLjqj”]eKbWĭ,KKX =ynMEe% q+R˼ ƻZmL]tM[{-pi}ڀּi鮧HST$-F942 тzL:ZiPcIM )R5'euV8ILЩ *S(ePP̠(NbB 3Gh2AȎRedDa2HCHDb=d HdOcK>sF h(0%$tFyF$Bp07!*,(X + T. (@op_qWSip!$)ˌuP 6" *UA5HE)bugvYgW}or^np]=~y{pFܸv :>"BP`=t BBdžkiС&j_T*:zBi!^L(yyʡeGLJi{zJ|Ch&7Gn8b>wCh^mEL.(BnȽ,pvz(\[rw)65-Y6T|NO`8B?oޘ\\e;T#@qg"LyФ{.h(wDFXP%f<β .Q5(ӖodؚTact\Qu?S{j :"!7ٞM38$9DvIpw0wMɊuJVDn:I h'"#ZIvSD⤔V)פsxM2CU' ̤9uQ$'c@OһyAJAha1Qd Θg&݈tsiD]>%K'vr!Bjp>B*@syrVa2u&T>+CdNNw"XJiAz2g +1_ Bf#%q!^`O &KFxJY{H4wI>GpN3xvDH <88g8}p4۴(qwu0EHj.iu 6e;n6{k=s[mb{Τ161gغՖv3lɖشΖƵ6F07f~Zm`7e*kڕV 6k~jVz52+fXTC-["b/],,,Y(wK `g@[4_hBgf||g'e.8KI.J.!02#u"M8'ptqPb;.ΖdgX[0VV\K,DV|  +I@@XB$d""II4>OgG K\.eÈ%#le||{rYRGA]Wi=ϯ75ZG"EyjW?[?ll?4ݗM>4~lM[| 6mtԯ#/ʯ+C˙0Y}Z(z?-֙)ei'Qڞm{P; Uj+x5:^KѫMvIJCR$4;ftuPw=Z2U]PdGyG뮪ɞ=˙<y:]PX0ec-D(eX;* -yU6>{S9iѳzR7҆q;TgHת׮1} ghZp#>4m~?g}^սox3w`2aayQ.ιucQ^|q+eEI SUyd4fO(nZ4M1GpwRxo^et5np=%%cihuMꤪjjz*FT@iVîWW2,ӔduK9vRxGIJYj-Sĩhh: "dz@7|yDi:\MAFcq׌;Ӳ46ꚦ`nFZT#RX$"%m[x3X2#ֈѴ̸I׍1絭WX7ȩֳ,"i?g#O#ghg43,NNiZ,"h'TMQPuX-! +gL  BBdžkСci!~zP*TyB+!/T`' +t/*^=lڊ W.gk!hkn[Y`ݒOYGZ* +,,Q JMRϵ)M'($>O?ޫg MUt8l*rs$<[ovs@BIbնu˵k]w]DH a7( }uam;Yw23ss>}yg~|p |XUAH !U2nURFElpEd^ybpO pu#r['ʆg)$IiUI]R.!IiJB!VRY'Ȝz0W!9Ctj$9KRBr1*,;Aqc +HfI8rIjD\$9Z ѰD +<) +]UA()! *nD(Ň a.PkssQ5kBɮSR<qFI# S$0/)!C] T0 wFrq֙cج> Q:S XHr2Hh?c䄣e3(X9 > wD8Gn)$8g%%)Cٳ]j6 ݵUJkɬҏbնM-/7imoŬ6l\+ذƏb_|K!F֭v?'+D.>_.ajGrig"OKDeNKI>[$pd7 \,Zu +8}px87`7|GaQʛs0C9d*Q*LR\ +IxO׋L"|y?.+ p![x{|>| +|Em"x!Q¥ !sˋC%xxxaʼ=6Ҝ1\hni0 MДc 1 FXg]= ,S#vu@]4;d;u]59avܙdY&H4*QbL1wQ[Ֆ[xSdtF)&nHB(a`PF>sCO#*h丑Mu +ɢ ÍtiT1TZ7Rh$fD3Kt#p#FLZ;X rrF h7h\u +UTG$am"Hp1x%"Es+py8GrD‹&ȹva4Bώ6 q83R$pzaCB뎑 yBžЧ@ɧ^`ȓtpq5pTQ}p|k±J`?}xoCvޞ=GR" nil 9d=Xp[-njJPϦ2ϖy2O+x>,(E<Nٿkã@Y=(Ֆ 8O'+F/ϑUM6aV5'T 6"Hy>qyU9v{z_wu云Su?[ٰ,1/)͒*ɔːB%2ĝ4)T R2 +R +9h(P@Cr5r +Z9IrD$bT(Yv: Y78 ?7iq +$6V6*6V IIrayR$^QRC"Usr#B WA]d.)$?Sip ==]T@ " 9KT@, IApldA$ CƄJazUݿr=w׫[}[c*-+#MF-2Q HI@̎$anV20(-^pF qĢHJI(``KB)V#1Z  W00 Ņb +FiEP,HD(` [ /(,n,v"Wf%GJ+[1[J+G2Po)%gNNs]!rڹ B&&pm6[" +ĴmY+e+] t6sZ! k9.V9~-5_ ]YBhj|F+ ,϶X*X{6=/쥋6-qAX [|cQ@J)xT0Rȸ&p #'bH"b\9 șqvfCB#Dq9"|O!<gE̸9 l. P¦ YĢƉGJʢXߝc;._{J>|U F:ɿ IͰ݆a+~'n!Xﵛ>_g轟8_6S>[bOk ?ŏ_%~_i&+clRcK?<[)x3Exip^5;Ґcn.4 4z@h54 -BɽBHHO(:u] u5Rp/ϤL;<@( ]6VkFpΐ<&==V=~F}97f2~mjxrpi +7}iA[qɁWL^7O~wryL&Ao{uk4&}&&co!o&:-Ǎu}4vyOF;?~nI7cLv{C7RZ+UY=uy ꌴ@VYURV5|e@^Ve-<,C=Z1ӫ)]*nRg; e=!_ҵt´=ҙtI A.pfu-bm];)@u}I#Œ|弮TVpNא PCiK]J5 l*Tq +O[+SB);.NS\`pގ"@ +ȧgG.ANl;rƎ%G81k81YviP tCYI!MI;lfp萾'J$h.PBNHTA@w=,)~ wMb9@hKԣf%E<7 + 5 > C +*:ȋ*'( yT{kJ;55H-5\ҽjjMWXي#T!& +JXsđT8XrT[ ;WYL-`tҨ5\s!v.w٭2grnBn2qɎRTW*!ՖI.E?Xʨꂄ?,P-礴JW dR +9y S+P2r)WerKU +Z%9rni)Fų +u+>\8BN/̹S ++'Ԣ)!'0HqtA0H1* msLI9GQX}pP.șt r:M 9i3;q +:~[cyJHGQde&+ ّ$JFVzF+Ht]A7P<I-%ERbHr46'F;\RJJ@`YćH,EL(,.D`HT0J+bA"@ٜ@XhJ~@aw`~A2+>RZϜ}R^ɜ=2Bx{Hi-=ĴvpF;`b.h1w٩ϧ(<„I01k^**32d%DeA$A]%Lrճ{'<==RoU}<~Մ-_ +A +P9",XNCY`DngbW9(x  2$% evHi\8˄E 4.6 (_SL?Gj2WbWil_ffz|f`1 剣4bZgQ"SaS&X}2->di@P8i2M!;~gA]X}XM-v0/}Gx?[9: l?zIY?Mi끽nz{0imk7 bMh٣7G tz2nYΗc]6mk(ȉ.Ns-H/zZOi֧,#efI֧$%YU]UMUHLfiӼ*R3U; [: ]M̉"C{#^k]sk5Hjm!(yfVhZr',zHM Ce+zH]>:eYW=ڲfuA3ߨwVg軫S UJBk'U,k&I&;7(cPʢD;9@%>\cP̢J&84Of ^aMv\eqJ& 2`gL=tiP2Ie@2- drJ&'\r" ,'LR܉n ΰHi8 ;>E98s⸩11c籣&QG;ҷ׵ǿh=:8޲Gwys,cM{!dmf7Ұ&ݱ`1E7DA}v6F:kvV %e{-jUI;:"[;WwFDu憷[ʜ[fP0JcY})P&4ᔦ"u(%Twuspy|&EpwṀ`" ˽b)ȎV\| ՝|w@.w o +T9"ʕ#*Ⱦ<@Td+YrDE,Si®Iи4 7F Z;tTQ”)HvQ|LqSaZ%$,7IȹaىJ}ʺD\Bd^ J;= *sJdoAS#RϪ%%AH>&hviqxB3-iiDsGb=35_-ᐚr:^es*^%NkHɃjO;'h߯fZ^% +{T4;vߥb;MNCw*v;*&RޮDަ][=(Q[mvmQqڹEر_!JMۈ܀Fu-m^K6bZ7ʆ5?#֯vnA㎯pcf%U~^`z D\V8,"LV+arF˗$D|E)T)$ArbNp^) +0r9/9d"V>\ +9~26~3o\`ksO  ,4as-0/}rc䚧ss$- gXZn$#[4wkLɽ V=ӵb~&; Eh$v_OǮ)\/H!}$=+I;'c{F̻Y-B%c1V} Dfj cJZoŹZ$Z{ h]OK4L+Kt==`=Lr=.*dg [uPêMs@1 d<\cgq +J!' 4Es"]p:! Jq(p9 NL[ka`F!!߮mA4 Yli*l9_pC2ئ-uMEKiKC곖Te2ߏ:('eq?@Aχp'`}V Ff%%e$R|8"!hiEȑJ9:mA\")ISOQd[0pלbD 0 DQD,H@r003u woOoOU[|>u9{_80C"é0ZD  +T!=Zhg g87G$.;=v}?*UebqK7kFNC#6|rFټ>fc>(,…=sP>uq;g|i.l>{qm?;Z=Z&#9I޶L&o' t(7qz4Z8Փ)١yQ= 7"c9@ntCNꠂ=Ь(xH%qzIY}]ܬ✾J7Tf5j䮺:>Ť!p?N#1$ifgC#td֜BkڮځZF{-} IONkm/쏼:Z腥T[k^5W*o| UU7WzkM^5Ƣʖ?[^U<}m*{RQc{uZ7?x__wJZ`F\Ȥ`yJDȨKƦFP]7 D\ b80䂱4X;YRUZ]v7KW3JMJK.ԭә%%uT:jH]J&YěћwWsIW} |rrFo Q[q8}MN)}(cmv +p\l&82L<ҙD_ +7Q]T&'u)4<γHbjk`=G@uh#Yghx +A5IJaq$hQLE :c# <39[s`O5U,yaqUPTA* CFL*R՗..( Q +^&jWn;6BҎ"T`Gfh,fA +h4 m}{_·n\h=źrl<~6ݿ{7VQ弒ίʍWP][Nl)*%oT>ًWe-m$ZW@)u(:dړ +/L¡(w(DgPbDA:FCpʿDA~w.:rM9]I8#n₸ {lp3q #jX)j C54r +کvT/@ػumZun voQhmڬaszPvlT"OmOmj/G!m^MحU#6Q!֢6q+g5حBDYJFk)WN[LIZTo+bb%4IJJFK(d|9ſEP |o満@͑4û0yo/ܙrFsfl̞B#gMsa5u&LfLq1SJiF5u7q0h/N$IR c#' Nxd_9ژ0NiXGH iQunfƌ#$F#GF(D3Ҫ ;V#4*1BFpR7%U! +LE)!2!CȝEdNBH,R!RA(J$X,ƥDHp1!1',pa8D8Sa" +Bz8booτ-vpoP ppEv =w/{+kgo9oܟaη32φY?'L->vO]C0…_SSxC1}]4P}-uҀmM4O"c7vk/}t47H;Q5"{sc9@nt٩Ϸ&=+d%ֵZ־*J4i+H$&"u{srϙdœd<='wVkcdR եPUC*4)ifԒnzդkڭ:LzmҫNkz ;< }xP8Byh01xZltX {>+C25A`5@3FPL +-ƪqDQ 5jI:;).$SARYuZk,^ispU_uO˛~cţm=O#tԛ*R3cebJDY~l\@~BDVbIFu}A_KsՒCv4_nn56mM@K5 [\mbiibim [uP}-{!sQa1r4wj A4ܷ2FhP +pd^*ͤJ!M[JRS4*քqH 2'J1J(IH-N\$yN\qYeř`fadH c9q3f<ٕ@2e'.a(q$9@;7E NEub89bNJ;QI54éSfթILM1ma9 iE AGD2h"?dl7E"@ήiCE<¬BßV{ NWѶ{T m/Оw8la̶K{nML Ca vUc +,vvֆ,vovo Sn(qk,5QJs ߭í*% wZ} %DY'nEĔVS,p)"S}]u~'SEސ*_⃸<_ĝ\!n_Ev3o僨Cb~YMy3č KJ3lJ2$6Wvow']$`!\_pK D +RQ)@nRD@N bSΥ@l[J1 Y{2PRE9"=^N]a] v\RdN()rDr%KQc@*l}%JteH<#G$2+!JTi9K$]N)lbOR{$V S+Fc;*p`:sD)갂CrHhs0`:pɉH9xceı +#쓱(+:G撃% g9EHCľޝRho {k;*l[_6![TfNl(ڶA pںqʖ )? 6pڸV@lX#ZZ?ֺ1PkW?a_~4Š V-G/cYk?;'Xk"2KA,Ym"N{A)>Z7e7"c5k/N zcv=9YeW39ӡABėQӃ“$b)d/E! R!BHpT\$Gxp!=x;M$1$B@Dx +!O6Ba|B@)|>_Cx<&۸7L6 |y>oRwU&uV*'P|X&j.RF)LiN3렖t֫&]nՑeҫl^ tZu]kYGuCGׇ)'bglH Y! CȝA 4zwbYi1VeԌϭ&jZEQMYIi4v1l5' ʪӠzT m_+Mo$0i:ꭶcmQoDrqqvb,3.Z_v+xpF\Tb%0z`c1^qoacm\e61I(q46 )M{-̠e=gWs߹#phXظhyAlMLx]MCmChȜ0--1 MѸ 3ȝhopd孌DsӔiiddY;eD=x |:ʜ022,z(&کOtS:6U&Z[ΨdKorPNP&-~G1n(&(PCpGKm51rPQ^س9dAQ4L\"&4Tٮ9AW&9 +!vi7uq! ઀+9\.Lqnyks4YkK4i$ˉS18tr :Cx8Jr|%qp3PP!'(=')Ӿ10 :]:~b7ۡ]lk|sm;;P C}� a bsM{{6{*.=ݷCA7ׇtkqk)4UP6me"RO +rG5pLc WBٕQ!ioH)нxK=x\X|05bs;SV4"L*s+W9 +QEܩ2Ks3S,,S!e +Qi!&JUb>7)cSU4\aş_S+?IEԼr|r +ʎנ$]PV.3Vb2bTzZIaR#Kj1IuN xp@p"/i1 g@wQ'(%@Nl;:QY3:!DWNi$W`G\>PNjYx]ԇP܀L[A'zoES/G+oW65#wм!{[fz2K\_.** KjM'=uiIF߯K|'҃ Rn15945jӖn v-Fá32X< ʟ  +o'la#bl1art`foxZ5j3 +Om& ݧ6 +еvᇆ>{#&9{lZFzQ?u?Gu uu9 u0lzlx?hx1'gc_ ה'%/LʊDE +"ce~D?*UFGǪF^ YD^ᮦ!c[ǐenoϜ0 +Ɩ {PÍ*de7yyZ(>t8=!Tû(y;0hraۏ܆q|p +h_.[]˻tgSR)Vh͕\k+w + +\.D, (#A9eji" "Dl ~}X∹oNEV`: +$f.pB jq 9UK{嘃{df-eSwɈ~;,fގٹݙ.!yRVg! V CH}3}EȶMD[7JG'p'&uVhֆ5pj1#$@[Gv5ٛv`Jj+YάڳW,e&~Cw|8-Z-RR7 +)ED*wSP(ta.Yr!EK2g J*9 0Ύ|$-`mQ<ً<;{>ΎDB1e';PD 2R @ D_( Ebcccˎ +E<x_Jnv}._zw? wZo~mOpo-{O%1 s},i ߙh \mzgnjurۉ5Z_&_ƿ$oV} x7\2ۑo׈Kʂsk-ej/5uC ǍC.PEC٨mrt qŠv 6B!5g_87fCsG7fiОπe3C#P `hjjh6=0LVOѦi`f6{wJݛi5,/^5N @|0^3i:яsL= k7 +f=5/7#oGϺ_ ecmyAM39Ɋ)I%Y.g +N*S䅧S3J3%ig~tLխ]_ǵَ.XZ8]4 +͠hhcR44;А`Cy֩նC+:]O]V]QAkju,=-(217.78XP ]C#]!OÉcKcr qJpłԅyeK.\<9)nYldnAINqI!8Il D6&1AN"ބCt=n.qP\Av2i(H6.PD+F9kBXYPM!2;1Ap# +i n|!=o }VBA^?r$}Z{Pz@EStWur)PxCpJ7-@:E?\;etfV-xT3%s*W8駥Nj?~/ GPZICEڣtqpс]r@jiv)lOۡDٮ`{vmU0ڹE>#;6mJ +Ymۄ#Cl$6H}QR #1_6HH&>ke6 FJ_-an7ZL֬r +1ƛ^UoV.Y؉O-Lj/bbe4K\,Y$dSh"l>McیOfn-H,^hjB|VHz ţөIV-@hT+D(@9(d|O:7ԋO'G!_()OHH%(ERN$9 ~$AXM'/Ow5C}k x p1o>_(mlgQk>`?,d_-׽/ ZVFQf?ZFGV!_ + -+ff/KfBB>yXޅ/ '&;wӬ5iևIDĉ1jrvtMk2e=ao:<t;Byc}}@@xC1G||`{\::*x +iw::BwuP'stt웻_xggNGnGڃEwn'ίnη|;m;YjsVPWC=-ereGsMSeZh)SJ)DS `QFTC 0 +loRn] Q E-@Fp7_=KR\ *Gʪ2GTP92* RANe˦gqQ neg4KɅ_xCN3N$9)NS!R4TAbF'PNyIJUNd!HF`H:QPvfN2ԨX-"#NKj]Q3ؤEk8QZDJfv"tHLA8ŇkL;4aοȲ8+$$@6JVli]Xeߑ"B +ʢ, + bۋ '{9Ψ=soJ|R 㙙sxԷ޽KhLn:NgNe'd&h:S3 >v*=NK0HL9hT-JYt\(H#Q 1qaNbCLL0ҰhD9Ej$"@ d&% Qc}i2G -1 & wӎ*`9~Pe%בޯ4;O^%,*r.%};;|%vocvn;eR*'X(Ve9KƢmM2;_n`[6xpZNx ˦unv6ڰMVWKY!n/VBӚ%֮tY!YX\bgr1I؄˗!Rg ffz-$¥K}0,-ё8X)NZ )iHJ&0hf*eˢE$z-_V}q[9K, +ݴ? +;Vg<3;ӗ~yk?Ŧ`4 ڀ{;e &'6of6zt/S?߻ד>gok5Cj~_z5w缜:ps@eoOJ^=^!U~EMMyBӃGPk;zqvEF{EE}[j cbvtF.Z^y|W=cij,M>FOc&GM  f0}}l4{kS\{g10XCO| +Kr6e9zɅyIF +p/efk*Y2}<㴲"+WQ#+֟VfxVgʠ2=KެԉLOzگNuUw)꬚꩜J冮njڢb>vub*gBw7vFUܽ|s+ū݊MozbGf{ES9 l3 5#@rMv:Qϡ΁Z$Ώ̍Θ.sv +I.NۻD% +afʹd@2MvJ8;py'P7t T@sN@^4Kr吃JsƉlBKfAT*inM!݁4$rHA%IFDSU#J0%2%8p*3񈍝ŰD[tb({paPY@cV,A( U6'wA´ +|'*m Bc|a/V_.!?:HM9ۣPwFA`k~}ufGn삎7:>X^r^Qb^Oݫtֺ™+D ^KPl:N-`n_^8T`.i,R%Z&ĹD͗B;ʃ׭l"~2!F\ƫCă^!B5j()DrRk%Jbłԕ+!`5dRa.zb TBܥ%'sjųl$2_*$|OF $riLi%gbgdi oԜ=>' sNYt-欞MGk!MR qN-γGrS3dә$Sى4ӡY 3M)IO;%$bTZ,)5FCDhITr4͢eP4J#Q 1qaxBuP &&DiXvNҜ"5 h2_c Ņ14Ov),tOb"亊 "(HEs!"Q% $f]3kÝ{{{wuʽnz{ܪW{o;J*>R疻="6\@m vE 9EmY*j*aFP 59tZXizz-b: `5 ҰڰV=#U֭Qj^ bm +WZZJ1)DJIP! j}UV-WXLV,U[ :.-1xZPX#K|@/͗фЙo͓~-s,+u1o_IsD/4%9/?Rs$>7A1(Dh2YФ0Ctbbo J!nhTBOZ)@)DR.@BI0T$<2D*J$D,WH bO!"i6M$a DL(!K <==dfϞ͆f}O>w IYYS@_kޏh9ϫ@oo}4-Ho{ PsPdW!w%O6Ŷ?xsr;:˛;6?J^c~[2Ë9?߆"a8y2x. ?E|r Ql\ Uԭ[鎧l}َG5kmk3.cR#4d9P~Мk'{yS.zځ|[o')^+xh3BHsepKH 0T9LF[C;V! )5Wkp&7BzK& /Md۔wAW}͓]C,#ݓmm>i8i~q_wwlQrTVphʦ4sɷӚ(x"w>C=:J--TîV ܡe9Pfm;(*st +7ơlw3lֲ4G7)aqٍbؙ)E +Φʔ%)" Pg"׍I&fJqX28FsO:F plN8 ;03ҎڻRL )N@q8tE;B9L8dp𠭃pv`!l?emX;l/%o w5H%D% 53%l"%$% 4v <$@CNJ|!~׳qXZb} mL;E6!2#w/Z;lbzozl$&t"mV9f!00#6іLQ`m7ID"5Uxb#\:dN$g8 ̘0zgș߫gBkaG n0I2LPM8.9?kN=j7Hޮw+)^18ӳ0rk1zfh("!ڀoҳԁ f|"buԶpo[Sf6"n2PoV!Z@͠e7r +[Ald V3h k3>Pj% +W!@%5,3oW1|X~J[bje ++zAN~K0?}A/յ\vA%ꋱ[^w}HSAAEQbDd]%tXb'ŗs9ݫ7d|wwξ?Z(1F)!VbD)!>#5jEWP S#"p91L SPC傆 0N_aY@.5bB ɬfVȬ&Fi Ũ1N0Z:LҪ8фR+RQ(89œ+h 'hc,K+,9 abhƋߣ(FhED&TE"HH + +/2 O1H: ~y5WL\3u}>]H#t:{J\S0;?ÐG@/9'k~wLߜkb1Q/m_;TBvU>WJH_:%A9e}Mļnp qEeEG<Ւî'דnJR^@7SkK[]4}G9xod:yLgt۽㎆ +lGctX xt5A@i3] yo==Oݾ*hoxt^^n@V^gQ[u[wqKs8C/~)i)m)k뱵mu^n~׏<~Zn/.=6'-)N[/ώKP~JBزc\5v2n鮽娲Cg:*yَJq'u9kvT؀rm2!Y]nAx{e8I7Uz]U\"Bp +uV]|Uw g%רî^ +D\よ|?r֣Ρ]>y"qpZD.{9"N 9;IJrq܏cLZ(]H6*⨈?w&,⟨}>E#A%t$c!N^nW.gjʝ;]ߐ{lwVzlulm mf߄F0Q6!njA뽶467c64݆"}V} OoBZAXNZ&q XQ1?kXo/V=~Pù@Ȋ/W5͇V6V_Y^wy(E{CZV{4 Lhy%8πb|- /0)%Pll0n_Sng|@ vJ|Oyw #K=dn +i 7qy^J*J/t#/3!rJTQnBS 0W#B]94sR R `O;1t~00M7Τ>6Hpҧ &7ErS"̘S)&ʃ #C&'+DL|ȉfLA &9$T~3&5фIK2 AGD+땒`7quh#KcBib=83m%iaٿJabQ̂m5Y1q[- j+ff+d&3nA`(;cm[o­`5c1ڼڈ0lZe`kJ3 _aB1kA][cĬ]ffĘ^jӀ] Z؈Y|eOB[|=,gx~- za:As~5f}͜1Ub>U-)*N?&k@Mx1ԉj:0-=eFgսLegz"|O3~ +PbƍRBČRB|FG*!jH.FDs&b‡ Qa :\64k ŅZYͬ YMe18'5YA&ӋQOc :^Ka"tUKq* + VJ1J PHqr'WNNYV2+Xs(4ø3ЌMGQ!M(L RD" &$_ d ;Rd~@( t]:j^%˛ H$ ޶nh* ^DAD(  *nd֊o=oN{sΜO{Q S*Sg]wH)Al'Y4ܹ'a wG_Ǡm&m:cؼe[kWӽo7iJ{94CIoޒaH׶}"헶 3;bS0 k :sl{aIxk˭f@w;Tح-ʓ--PEt6Ŧr7ժ9O htfZ :(/1\蛁fCG9]1$wӼ.3(hu0 mΦv㚉d:$sIY;HVKtz^*t/Wv-OZeǵ/u5uO^66{ 7`8ǍeښKݴn]MzOS]BwSmꪯҬ}RjUTBUPX.߷ 0JmZ ɶ0](Ji]AصסӶB)r ˦/`琇qC W('mMJ 0.rȢNM!rN;!Յs)1ik0p8!N]qC<RwNps81CFQʁn.8 ~{}z}8{:Xv6ױt꺋ya`mw԰lklv6AۍU-JF .bZ+[WZ簖 ZiRhۦǷhQ~Zк2k8%8k 7_g(ZV:"պB(:jm)OY٘7Z]_@rFj~ JA>`Ms:_4LʫB@3LLʯ +З=F+]JsDN@c])͑e.ݾ,)%ݺ~|i72=)S%_g@w2k + +,JIyirYj"q%%+ɁTgH9w x:d%@"f7D 7Ԉ *!SA*5--^:S;O)'T48[gX4")ə*Z` X5qCxDC:CA5 P1hD,jb4 c{Ɏ`[GC"ʑNXwDw#Lw9#l@"WoSLhL4b~ZQ`c Q*1O$RN@%*@!@(8(|&?'@}nxJy($ +}P,&$"PFE@D$b&!h BHPa@C|@$` ccLJѬ5 +U>OO~kk/{Q U>O; +O gc f\;#0{j61`?lqzᑷ{7icx94CIoޒ u@_>_&xg$B&}a@Tgm/,N?):kot{I2<U$ٛJ*pIjSlzι!wS:tʰFmŠMM%xm&=txEjOr<2<; ρVcFlj:H&A2t[lݥlm&1jݨ7ލ(vދtlEFD`gz7&>Ogf̌I>99?2 PunK=G!OzOvۓ+wpvi^o+9`L },OraUVD,?2R! Tb|ܸVCZZs)kk#{[k%lo9ۛ)uF:K &- <9.d9;.}yLzV:8Q1(+3L`ÐU.ʄ]( KJj}!j"?d( j5ҳEju|:_+*OáT_rة\*q2[( e" 3A9lA+I )8{(N3Έ(L1EB +$0#/yf`:!G&DfQPFä `Fa1f"-ڄe$RcL" +VJe|gI&'1u aPƇP0qGLGa#`bVDE4bE0("L,|QϤ׈c&`GvF$PQ]N#bv}ޭ =[D0+1"v +PرHl4`mۨ3AwBn0ڲ^ڀڼ>`M!zTjFVs +֯S~[yYCXDOXZ,[Z +ZxB h~N#r! j؂9j0|l ׳̛7?9}s [jY̩fLAL1mM6u;2GXƩd_GMFR- +ϕqcRxL_Qܬ@|65LLJ٨2@H`&ePJz!F/GPZB+Bzj OJ}$)[R*oR%+JJ +P +& 赌,-L&4\&8b"H`xyyId4'F>S>S#ax ?n 2qyD2-Ծy>S4]Ku.Z>#M qސ_ Oސ:ȿ39#9GAfW#◇TG}_/LSw.~qNDtOco֋4'WgQI[u Y bcRZ4;oө.ZӐ h"m]l+9Ϋ!vZXX6Zt9J;eC?ϸtqVq?xhT1@>m Um{Ne-"G&,2XєG4f9Af;dY.(-2+`oɤ)uxR _R\#AK1[KSs"Pn ˗c;)_+P +j!&O(&WQqVҨ9Ud;*s\QD/ԸkΘ,54yIJء*!e>! +\l;-T&?M'D 唛]ȹE謲/jiwZy&zs:NWjibqF-@'%ꈴd1%5IOJI-^.u)^GE\pgcՙh#P"N2`"v%F%k p=a@BbCt` ҿ(@-{-a~Z"WYhY{@ KaA +k0:]M;.>'k0^'p]lxsFh܏#887i4ĉ.pͱj8>5*gjF?S-%}*qRb>ۭ$R0tSrdJāؽ]ٵM!ܪdml섐[m$r+WV[6GGd4N6wlZ'qڸnX#[ZJhJU+%42̪2>xO"\B"@ՊwŀTr b̻q N/tbFz-!0h >JN#fu!lhE5Y%ĨP+N*$Ie"D*I$T,9b% D YHHP(;$ E(!m Qx|h@e˖1awy;o{$XFf(5ݪ߾۪pUDK^wqR~;Kǜ~a\6~۾h0- ;g-sK2uI~}}?lyOӛm8ɍ-N0_&9.׽9kl7_VAߍ!ݞPblFC\fe 8~VX$+&_:$.7fw]3Avgّe0^fdI[ae0k͏тJ5C͔6M\̓ ,`RKSTLC*f ;*T(A)t4huc$vmz.`ܤ Ď^mTʳeǟkǺi Q">^%>ZZ + vG_E[']`5k<^hV-SW)~n+j%j</b;J\_ټXE͛@7I@)}{«L$99&(&b(Bjc(m$(/G( J%0J#ChRA~*J%E2W.Q(erP\E(H%@REYF |L&wT.dH1#H|2Yfx::ߙ͑89\d@׉_[zMZ݋W~yL/_L zn_J {:s~ܶ뷉mf~w|մ2oFVOc+^Ϗchٟ⟣K?.S`񫦚,z5wgx"51zhr6p6tXd^2\*bu9]N2xu6Zpus/N}VVX?0paq|`<ƹǜoZ=:hpiQQ(x|!g̨5~!g#'NO;psgpgw:x񶣍YDuAJb6KʒS$$`J.9]r FUB:)M])L6Ҳͽ֮'Cݖ oouMtYKXY5IrC_'tq CD;b}aƹ9/>xd?8|ڋSbo֓NÊ8&VVS`?,YDFC|{zlV:\F@U"*y*prl},2<%3=(Q˘/ _DFV&U}6 cPkƈC n.c +=Š^ލй{pEZTXDˡ'/a/~e i 4VВ0P(&j1-yZt K#B50-2ƚclsg j*"i܂Հ1;@4k1_r dH)> ?G +>rT_C"Gy+>XS&ɤ>2 t'R\2y$ 85B2Dab$0@eb2zcKk:Z"i5bZUATJ +% +B$K S$eHJ.a,% ҅ ޓJ|fH)rFX sH$sGę7n|e̗23%rrّyC2k$De@u^{7^`Xo!Soށ6_|GОϧz3W}{01oyR2p`T0 0Z6{UxqŸQpb;w:@1ꡮމA}O>eTs3OzXO:Xi}?k€1t5 {HSuxKc}7{;Xue}S]EIy^@rRݹdav&ONW%>I';LDyJ4)]ZA|N9JKe=Ekvڬ GC#%vk~O+pWS3F V`q(oqYHb"yh8.|Vym]\u<g=8Q485#5LBN;'y8F`^=v!ĩ( wR%b<((3V<a}c8{1rF{8nX].P`d{ŕaeS&cK÷.iCҜR]RoR]Rބ%%? $$ \mLBlƵe㫌D>Vv-m f&F(YZa>lݸAzğas%ԴgW8b7pWpR c.dUu="qVj\}%z>:&u 犽[ nR;u,{`F r\-rJPqRuq +qkR#gVh8JK4X珨*T#:ĹJC4\^P!3^ ,#rSezA' NݎX^WżS]d8H! +"3G LnU&D:Q#FLd#vh3Lo3#J(X#6!wYȢ\3Va,eY +rͬӇ˶,3;MF"&fP10C,nَJdf*'ńlS,d3 ۙdB2a2ΙfBm[%#5$(%lF$o2}Frmk:$!&&P Ħ81ֈa鄬1 +Zm@ǠF{bW]$*v%j zs8Q:\L+r#bCO._ +_ XKh%aš4bQM. `-Qc:Z Kè` !LK̡iƘ7[=Y*-x9{@5DPp͚DWp+Ҁi6O鑿k\:#P |Q +d9֔I2L/ /tř~g buxނ"7x rD@E# +9q͚l䗭d߷}-ڪߪ<79fHwtÛE}wHo*3;$*;=o=SP !'JkCAwHs˳ !sNVfƃwW$ǺWcݎ4x5ۛZ ~FaM#;HQuقBmβv^'zxoo=q>FNu;@O:t9;yݭϠgx]P7s9 %&ףk;_?A//vS]?=vEuUyQ}tfGvR2L'$R=rSYtiԱ Ņ=-y/\r4[l j=/oBHP'E`UL-VlMˉv{]eۑ X% ""㲆:=l +:+8%RBN2Nf[q'|Z|aULR> XsTh(#=na _cULC8(!?} /fnB"r$dcULΡ@no}XWĞv"Ĥӽt ;E`gW*!%6w ${Is#^(zO\׵>[_=[b56{ [:c]lq< mgy;6"1O ìduȺ +gWH.V mxx+\ĭYwŠr-CY[b]Z/ oE=3J;gxp=SŻzZDW2jZ_ʦS *`HxV9*B}95Vj ,UJΕ wR{\'#]:.X(rYAsTXPʫ. t@.ѫ _G/!+ eU5+21" fQgSG,j@W6MC* +ZD,0tJ8~B8o|,9e4G(α:m{'E#6 d8.` k! )1cA9y]!garvq89^|;q쌇c4ۏeH)aoCsN{{B )+ᗞv&Hps-N{/Ƌp0X;!-6 nqJ<c1B 6@Ɋh'm uc]gIڲb56F01Q66FHZ'gJ׮5+zEZn~,LRR[%\lbV,_h,`M%`\_ʂ !͝m |1zgByCYi5g0{h pnh1NSISHӡiC0zB!ᓉZYS&kB&!ďoolaG!GhE Pc#}"0~c#t1FCER4ƌdѬ{F` zT+i!#9c;#c(~v+óY$&XL$"0JQ"RCZ^"tjyZZP + bYhf˰4tѰ8c<К4AEQQDRQ**a( # g8K'CPx)T5WYp IH.ꮮe`EP  QDQw)E:ivEϾޙd⽓s>_fذelذL?HΗy2G>l\,ϓeCE_6/=#<_iwƑqnܯK65g;z`͓˫eߌGi_K<?r✳YY' zx;q)9k)J諓LڪLSG5P:DMhtԐn 54e;0CiґfY]67ln\fӞgkHZ-+tAg(b%GNMWiүz/Q~`2Xާ!*z)F,]m=mWkUk kc]Tj߷hV7Wgf&K|(8%EY"(,3*+,.#*-2ܵ"atZ֓-h:n^I{oLyk&oDJ@0;Y:5MzX5-ͨ6UTsJϥa.RR?DJ1kP&"dJ8c(qdѝ=fЎ4g} + +`G>I#h;7 Y<29``ќ7283#As{ +C2$`,vGyp!!XPXK)G< xg1ߢĒM6Qƛ@mlCduRkLWha}W@F0m!LeJ i n&0j +wH;ww7Qvu5B7C$!vw6lzTOa SȃZf 5@RjMw62l~v^2m_^Uwy Wմ-ڲ՛5H؀sz)"m-Mm%ͭ^F +lDRrj Ai QM%86t( ;Db͕OYH$՜FU9WsQ]`hUbAe]E'<}VQ A{$4!r>,ϋ۩K$Js?˥\92V'9r.쳜MʖfxA3(>l63?OA +tT&+$) J1GUc*<먒UBNVHTFd$pg)Q jxvPI%xR )}j_El8%1r,q8VQ;HVAv @"#UJ;8g"DU8,.L8Y X^S1{=xn5]*^"C4MDGT9DP8ػ۳MBiV% +lQ@`  A) +V7.G36(ںއFlaA|hDZ9mbظZoX%g~ t)̸[!_d,"V3Z W,e'OR Ko~^$A`t% =Y2S{;0OX4 [y H06 f{  6GOBx͞ ?Nwgpj41b;݌bpnbb~NvN"$nd& & 'Opc5;pD2N`wj1Q*@$X@R>E!90\y < )DH<Ny]b9wM8 tP$p!\n"[k!4 H(b$L(K,Fcرcp՘oշVW8 zCְTa(@bŒJAf޲h$GjؼgZ0"%iwƑa{'7ƹ#5R sqg;z`͓ϫeߌǧz;}T=6/k)α@u{]'Z aŖSSګͺLmRM6բMtsѦ) d(W2M:,kFukl z )PtVB]4HcspxPld@t_ <*wS=@>J R4$CE/sO_Q{UlX`c-Uc-]^i K;lX("eg1ɹM17-w]fy9s93}{yj4G_u=چM恾Wo{-}f Oߵt7 r%ńIb +rI}TVGƹ袝rccߪdaEwcQSgф^GotPW֮Wnd wd8  8ƣGo7PFf fhf,M hDYv3.[VȣLlF57x\g-׳)35 fƬiWy\pq~Z% +2mrK J1Jxc] +S)##'2aHd8!#G:#q%-np'C +F2$9I=É"Lj3=zbzy/鍀gx1‡BBȡn -b+>6r`') t$vЧm' 1B2B| N?nf;;U/'5r9_`;f{~ȧ}1scQS P-xdyPpa~GZp^5}[֎-TW5:/qIbuUK7%$TڮK0dzU&Dy +[]rk˞.=J.lPR_wN +D}7Bw+Qu,>n^RWsgVj˕ê)ݺ3f_T%b?^׊W,*+8; f*_CWuI\59*E(摥Afk,5VyMCŠ2X*zj}u(HHF~>䥨\&iXHFNc!";!Fΐh];6Hպh\R}&9ZHH5d$FjIXBƭsjDBxq.LV+%&T \CTƭjD) '!j* j"rLQ#NdXH?t8:yğJ9qXC8v؟=! J2x?*S%;>?^%֡=~Eݾ4%q`;}Xa#|⋵{ٵMs7ǭ[PlV oqڶlݤpo}ڲAؼ[AL!6Sq>^-a?rkzں՞ohrG+e,nY!G^.ctYLV~({sK=+>ϰ\V<9?XVsx\gǡ>^4σ? /{8)aT7ilʥ,-ŶGʹݤCnnmzUHwzm6 p~)_\>'}4cŸT4K򸥟×S65 գg紁)5#!aڋ;##Ѻc#&`Fݶ5&k<{@7C[ ߷>0PM_U?>5N3?=!H g %d1bXa "%/)'zZ^T[$,k.3wo]BY{ ']zG7i{T2t;2uOJlNbЁVH`mR:Z6j_a=pyxqx <)bQx2P5dd{ b W^W,`㜍ϻ:-oڞut?Yih*+9*NM4}ĹIŒt %:3xBoz/ǜ$:Kf1w?S+tvznYڏ;-ξܿwr>oc+x>G옣ш˷5x]%2-$՜[+TT\QNri)?c\e{Hpy2ÎRsgl xdd;y c'i{{!=.F:A'vwIKBXDEj('/ 'V6S՝Du% +s9F9)5gbH9)5j3SOQiUfz#q(kWAE9DED\73n&ftOCbՖߪO?ou]M4UYP%~oUX5G+,5[1,"4hˬr,JƧVbj7rT0~Uјy +rYLeKV2a$eӠrlt)dyYDg +8LW]:HAnV@ q"1yPLr>SXg+cdGf%Q av'Js0"igJ1-L$d%㨤8ƯX`Ja06+m%2 1q4bb"r{-if+ +glDCEob6YIԖ*r+b\B6|,b%7Hڸ gr62rJu0kE֬0՟$Zn$}LZlR=oyA/Xן +_d,] H_FrF'A-ע9!3oVH_sg0sf{͞Y +i| 4}j 1-S^tI +(DL0PGhSp`3e2? 0Cqcj$4|P,bf b™ƨdPz.~u*N/H + +$& $Z-DQ-ԑTfD 5@E!РQQT(oT2I'J˄yyܤ2 U&70r/ 7r-y/~{_o{ս0^y:f{? \9!r^y~z:m +z^=6fu{8}ԣӤg13y`SƐpE7[]`}x=''OxvCg>7y/;ok[ו;;22SIN vpvG@FAE8!AS@@EQ"!˷+ gߥT!@wglFgŋROo{Eo5oF;ݍj,#碂VAGpU +r:7O,#v@=)Ċz圀 +ܘf%4hpLQ|O&JO;Xۅ +*^`{ܱSJQXG>vv>l=,K۠/"k[]"Q1w "$l~ؗ۾=+؄z GmuzP%;>k ATɵb[[5kՑ]'7W">|q%z3{^^g*֤]i&:6R&\{#I#$ϵxZcZeKG)@x]р]8 ʛx74G$)uq:IZvл%IQtWڕZ=ÊւA̛@Gz:RX\ͣ#4X+KRV%<B, S\.K-U +_BWNZ4OE,$+tQyJ39b B9btm49DJ*!S˰IbĔ Vd)(#&I&Od@tc6$8h@*x5L#&HFd$fO~\&f,J%: J&jėKCB"H)Ca2O&%|3RaJF$C14CҔ hHʅ$!! I\$r|yëxq_K}/]>kɜq~7z8{-B־X_ZO5z9??mc ?>fӸP9(?y^zxo~upg8? \x%3`}5PT_P5_Vk)˶P{2}5sd%\unQEgedgggPYN6Y[L<+%2`gڞ[ڔ8{kX_gн;۹}ekQV'3t?GX%(]:BX盔\[ +q uQɣtIRӠA> gtkhփ:T͕zurU'tX'jx DAGk^0+ "LJ'9Ta@4EX e"JM2UWjĪmL-d.#VMt3D .6"v 졦8,20Us;otm&)@:0Ј*0{(b0xk&6(ls kGޞgFl5Q\ ckaFdTAkKIfeSQP^Bl4 `DX<9n٩ WY)F*HO6pvِl@d$(D=bCZhJKЃc8hA7%%NHS\tb;z5::i5*qJYRˣctXqZ5yB5QZVGj+ybyTtk2{ZŠ\Ԃ"TaJֲpj˒E*ACՂa$@yS8 * +/hl|`,mL@3Cƣ4;D5]ƣp9M3 +D2iARbj91%H*K&ħDaL"K$ӹn]^j2@B drY!I'qIdQڙ)=AOWKqk/=ْm^ h5A^ gDJRtR.!UJs^s]EA@EtwI_Wp^ƹ"oYxΠ +wC|OiQƩ<0 *NJQ'VE j&ۅ:!t +jUHr\1T2 UJezQ{=b,/rJ9(ည2 2g>*uQ!V,HF!R._E}]>^JɖWEj珝Y;wdHg2HحbX`h ]Fڶ[ہmԁP}JM(ENrߍd$Hzv-p^Kħm &'Hz~+%QKLX Fu+":խ@ Ԗމ29%&b15 6@[(Ds!~z/7}N޹u`{6= H9zc7f+euCg +)-D7,E,Y^pְ$v#)BsAQHog0-u4$˓j-ZXLkRZbԲZFDJ^q~^ j2(TPPLs{Hj:j 3*j:n sGMGSiBQgHJYљ#xNsOijPn!( +;%uVY-6ETMM҉RR;j S]$; ʏc%vZɱ?hC,tLEs88̡}Lys rJli6TՅ)h%řNL3\0-ep(3@h(o'P`&a oߎј0L{i.&k;pdnD3) dTI$Nv2]I=VD0鉜'&=!NwIǩJTJŊLrl%E;1-a7΀M N:r *:ʁbc#4*&Žt["6jc AMb jZ;ZgQĘ5V= b\戈/l4jȗ+"vz +˭Z0'g2 `W/ZĂY)s^EҲ?d&IK> 7a> 7/0a>[h s&E -c„6*agLy3$@U4g:n60kZ0sj(`̘ Q4}3m^$$`DDNaI&ӑƫ1K?VOH'1,9n,K!@H;tGa1.3: qK$A(8 ae٭fY$Ƭb"4(Q %1BѠ 2=`dY3 ,R m=!pM-wH=DP$"E!$jQh48QE + +"Q#HFN0O_{諏Ҏ +w'"ة&<IHr1Ό +!x+ ApPA@AHxBupqV,pnOiU)n/BI)Q .oT@  (bGAu>wzڹmA,(Q(`dzڸY6<:ݰ% g[_. G@6dۚ dرolB,`w e#+um~+ѕ4Xzmk}k!TO뺜g]g.D +QakM~6%>hLJ}ؘYXZa5rl%,)W$_ $^r-O{OISZZ}kխ y,bYuڊa Uq|&(NJ(̶ 4 *2nEdY^gad~ULT^Êس"ʶ*jm *wUTVTMVZF+"s&4Wwc=u"hZ3`%7Zf΂6XQk̄+1Bِd&ӓO2f2-䗞lg~VкUVڕeSW)d$(ʂHNɾN$-7Xd2&jGɕKLV,6"3&ɵ<ΈXЈ+>.FǙȥ &377EP1 \8;7ˀsf0AXXasbl 5]k4;0_y| (v )Zڴ(vΊaL E|$QZĔtDts`#46)\â"PU jW1L "r"`Lg$%BO>է߮4 z>:7W mwgS1>og`h947Z$k7+5(ݠ&~n?͇м`QD ZVCT/z?huoR2TB~3cP~cFp:G!;C˳0Iv]/ܽ`s߾w^v)3>fD "*rQa 7nR랉f_#Sn +d7 q;"rdhe9IpEDTˠӥ'auQ@2G qt3>qVD)ciI{( [)IRBw'qG؉XP8XQчc#11р(#E D06G 5hGуMa4r$e#W(#ECHgD<]p:!Z)|t_utz?}' +C +9lG l-!cB wvTnrb(N i_O)e򀠮ÝyMn[{9TNi(2HK!\*T\T"Rj,D)i(Vq}}ФBKuSS yܿ% 4B@nz͒7 %UaݹMB*sU,GȎxNO5_HY.;k>0RN̋5,50[椅dia姫yh]uE3+74+iu|c뗵+7E0еKK:Q9|d sQNMuAɼ\H2pyK鉰+uzH9K z.񃤞ֻt ,9tJGpR?M o73vr6VJF9sL:}TK1:Te T\c'#u|Z<.r AdžkXq9c1FlNԱ#zPuҠ1!jlɢkHLDk)4$IRX9fNZ{<Pmޔ]*+}@I;=h*lVo^۶f ʛW*QmEٲږ6xAzKyA66"\V{" ~ +Zvf +trj%dr׾W@V.sPV,UP +Y/VȑeeS.#Kq)-^NYd͗Z4O,$Vy2Нt8eƐIA8S?dR`\$$h|1}P7G@T"n @RL@ +KJpG%292)aQ9&\&Ljc8 Ü=E IRAA'RH$777 7n|ܹse||w>Q!_{Oϙ%}aϿ_c;=SLnαW־}xdrZMu#g6gY|o~[?j1^bO N;=/7 U_+Fä +GXh0D(3UF C^t tja|5tEasO'F#IQ(HK"МIcK-=ݒc5^(he: 4S3&<dLe|jxTx'ak.*wRJ"a>H8Nꞁ`V1goUs d"و#J4/΋r4<>=-Vm՝ߪO?=5o%P1s." Ry +yxd8g&4"8)T@ bNSI3GI%;AC2kuG6AL ds'$q' U@ +, I7uIf$XPgˉ'ќ ( ՝H\m 51 c:N('r*jDwDtC @p{lpB_ >oHBX yv~ ;=>%]?0?x 7ps x8`>K{cM0<:ч  |kv=(jDwsYMA謧1 +AurZY$bX{|^U[s[ViZ DRmbgIEMfGJ%I׵*)FvB-]=Z gĕj@ƹ|g@ +4YL/:w6ӮrT)i>Ԟ j\R-DXJD!JPW,l:_]s:B=o9Ev&WG[td^PqJj@fyd 88Sϫ(CV +3Pz)/`Sn"/ u"`dTv"+qce>JF~Ac --FJY|H[%EVb59|F'( T|Gq!::6t^LcEkY=c(Nt^PTh Yi +GBB|u`-=OgS`ttQO |h(aWytQpt+=4=.2B?ۙuC͑p`v9#aTc\=?8ޡ.DS >gTQ\ec-*w[Qجi&bF'jj mYPeMQ)Qke(֯vmXXD[eZwĚU"E,W"ܗ9++-ZD!]k{oV˿fDK˥K"f#r_Ҭ(+7@#tC(^.1h"‰!9rfi])ڳ4.23E-E8$"Ir"TJ T^&+2Z.)Ji +Z!WP&)9`/dG&'JeȤ2X F$|eѢE$|,|O\jg7<ݮzI׸οT7p mBޛޙ,޴Q5g3ѻ[YoM>ɻ i@2aA1& QMߚr!:w1OP]Ifdon5-ћOwp;RT6%oIs죛y?OU2Z44Vd-:̓Rv)sŃnCFE>barqS9]8?x 7psrk|/۲w _v++ Jw-M/UML׸/I4((C(* +4nDOLLb3TTsoq +99g_>oҵU^zoOwnWw@WWȝbZu`,jt( դRR[dRH&ZTrj)WBN @+ԮYM*&˛.hD5LC;y-jF]uD¯3rn< +8bR_v|4p1猐|XYspH<"׈[͐u +FArS6M2;f(Q%)ʠ3i=0 KITD;P8@9w;CK=MH5L ĚLI,B+;FJHHETf,#@OѢ,Rc=!i1ӱhOH ''eZ3eSGi#SHas(.:'DeAa! w,"aG`QsPj!xGBhI-Ch3"QN +!ူ@E3 +g~f&TG@|(H^3)&p DIܷۄˈB|w8,gܻHj-]z@vzy@ lV/` n@ڲI? $7v :Φ0yMش:Em\lX.AO_cBVZf%l + K-ji25jrb/!4N9KP 5% ԰JlŤ*EBjSqtZ}D?Wc& +'}꩐ZH'0O r E"fES02DrF9&1z z ࡓ24rV hdZ.J&*\Pb8)IW +RI*J$Ab{$ pΒ#"@θɄqd gFqY11ۙq̚5{){nh}vl_瘗cc=fApS{W:?kE}{y3}x6>]; W+ߗV̯/WHXAmpA-:Oˋ%z~_N~XH?/%ZO ЋMWi#F4f>hH{mc1gq9jrgNhvogtXVu3w\gވ;#}]{zXC [ɸa}ƃ!CzĜY+^پc<<~g/9!CWٟ<ko|)=3ĸhUtph_,/O ŲBggB.ĆF99Y;Μ׶{ovwXzڙf| `Ihu5ԄЈi]wᚄt^e.!\t%êwxujQRj U*P8z. I8/ԅb^2ZB!+#T//tVB V 9٬{7)˅L i(''p7t!YB  X=x^) ']9wbyFE f1q~ ut(ȫNH#Go d~99cCp=k |>kD +8 +@OPXaOa\]c :򨁵/(_a].vv^d휰CvO=k۾:V߽-;*oo*ۥ-:Y{BvtVXFi&ڪH$3 JkbRʩ\ ;5RƐ+<9JSJƲi(s\;\-u a+%:XrH7C Rr x8 |3.R:+p Pe \8Rc\B(HYy٦IYfL%$ z8F*ʠ0 " ) +R)b픟B) -)4#Ad33-k2-*'X=99INAdVLeH)ZTZETj'$-cĕ2w$KF b;`@Tދܻ n+67c;!A б-_6f7+;w掦؁=9g真>$QQ6DMQ]VSb3q,.cE6,\wWC"3-ۆ(&,+(v ( \$^@ ^atRR^Fn*,xNN@E",Ie$ZXQ ifFq^)f b6<9"*)ʌH6xdlOӓd4zyYZeG=p~_nBZ_\jvB]wNͮ;ݔ+NV#(=n Eѻ{x3O6ox!ڷ ݣfQo{N{|GG_S@m/>;Gvw[Q JYLYmc¦̉u鲆 PeZC,ݡlh[iqu+C}]ۜ= @6%eQAy\jrqNY gⴟ~SCPHy\IҮBt9ԒT:ԩfȅtQ|HnZ(rK5 +!;u;8?Pqf_Kuzgqjn :K8ȥ:EvT6F~ БfrxɭՂ8bFlā>}Mf=M$ݍĘj0pZ=gg|Hٺe\"ZkII-5Wkͫ +$TUTS"֓+m2Ԧ2 RĊ.v)bUETZl}I[OxU"H,Vo/Ͷ!J * +$sexS@ʰF~:))/͊Q#7p bf!-@D2-, Fx3xjWJCQIQfDbxO2qXf^q&IQ1fj%?ׯɿIˀ3Qևny=~w_e(C/qϮu2U9K ͬΏѿwϣݧO(Gb~z)#J14Ng~afWj雇v}Vt=ԗ{Zv_no{#&{V }ǧio6mm9u@;[[9#>mG휇;yVlzzIUg~?rVu~ mozuqKǝ-/k4W&&32T[34;2gɩtQRJtPEmJM'KR,._|k[ii*6߬xܰv&Ľ{Wb +n\Q_#NB-&vM䪌+ +.zi(BJ-[윂^TKRp +zR SpT䈌I8yZdWVo#RAO3or2J(Amk7&XAV[{\&z 6xAdj ׭+b*MUQ/CB/nI{~3'&렕gyYܧ Y9 tA?^G~O]>5q]J2%.9ZA +(5(Uro,I@>D,jqr["B(}@|Il9?Z|n.bjكQ+,m%?%;zX|9V} ZHx<`O"E ՌU4s !F6I 6'u>UʏSCt໺Zy'XY?!+ + GCDbts؈9dD&\Ek]} v|ͫۘoЇ>!qrg@a.ۅYmV:,-eu^%裀t4' 7A#Tbh{@v 8&ˇ2켌6]VzPr+`Җe6I) V`!Z&+ibphAb^*iB"Vz\ xiIw&xZoh,`2ܙF33$itAW&IO7c7}*NO|5ɀ6FYS'0SƇ(0R BsjbBMōaqTXVRFhyt"lQ:^Hb"tH 9: !#tGh"s]FR0 Vy. B]5Icp.'9NKr0٭4fYb™$ƨdPP'1Vq,K`t:,VT:-E05 iJZCk (4ܓE$ΐ"))Z"AQT8*Q, f0:CxkBO3٩ﯨ-[a Qlcb) +(]l)JG  11@\He_̅s.ByϽg0ku>>>ҽu-ؿ _??1 +b_؎w΀>s?.^o{q):Z1-u7=^>l:FȫgDs//sVjO׬/Jl@L5V/:f@ ċwx kVP^E\IL*r^uث]m7rnf?T>T;|W+PVWj4P*rځ)vuwr8hy@yXinO j9koRxTm㲞?<)例W{9d#=0cώvŖz$;3Ry0ޅ%{ɐ팤%vIm{FKd$=2V ]-T K>...6g , +GuՑqWE}\z᱿U2BG7!_o6Er}# ȶk!려E^\YG f|ie5*>!MW/,m|x~,ޠ !E;Ty ?:;J@RANk8G"+D9 +T[PJ2rXrHYLjKըrL HdnrT: :Tyzln"҈!ԲO0*ar+%12`01#"gx=l#&g@TAb9lD<^Vl0F!3 =g M3E&\qȂNG8U`or2"D!~v<ϊ(ɵʱ38` ìCd[0!YZ8eɃ{m(ˊ<6Va%`FKG9 ڟ8N ڛL!2ex"vL1sFvfIVڮD0pFx"ҶZY-fGYqVfńdL(81cn8D,DF3 &Xo!`0u&‚Mu`l&65qڸƃwذʃ_i$P&b +Kr#F%z0ҝ]|2mM 22p`RF+p؊%z#'e`ă~4pZH/*h%n?h>cZď:Ģ-!"_>Z͟`>(yj\ ;Gg +Axf B̙dQ=CERFxOWaӔCfLUȽxMMVi7|*)T n2AgH$eolb'ӆf!8Y(gHgɈ!< (^Ћ0dV%0ZhPjRUDĤBq 0N +BA*p #pAYc8Ær >2L䬒qT* D"KªI8q"Z5q | ~I&?t¤,_<>9 yHK(F?] xs?[|9DC5_'ȁz`Gao~׽~塡 +vz};.B3;잧}#F-ثgs>+f @CEP}.`3Fw h t Y* +rSSfSP$?/ΌʌIVt:b2Ř88 'ͯo/rX^,%^ xwN:lE݅c6.b+6:xl@VTgmV~ 7G\'&j{+OeK."Ireku5s&Q7뼀F$I8Cg=6VxgF9IRMPvUrVn\!d8)qcʑ$)#(Ee|%$)$(@(ACk>' Il,H9ϗa~wW:9(@$yvZ.!R9`=$ }/o%C{_d$?g{H>NzڅJ=hjHDΞ'Y; ' @HGTj +ʣ:~KSй9ZhA*e{1eLi޿L#Sg\)A:ACt#0}2Sp胮4L9` `2Hf%If>#)wgާ94Wc3؜%1t@ `20izԝ:&u(,ON0Pq'Vϣevh:$-=IvtD ZzLBZmbU1oeڬDoEm2;6io h۷"x4DEdPGs6U6Q!"w՘ 4j*O5D{1^+U_k5TY1n7Y+W>geacZrʯ1- 'Z Z2_ I9(i,@ISR * VbR`oެPܙ!< +jD?f͐c@OxtPŚ!Μ.{kZSBMš6E33TN4t*H#@MfXiSL&鷌 hqzĠcZ 10,m$!c&Dq*)F:\QE`JB!ƄJR!rD&hFBR9 e $ E1488͡R)! %PR^I%QDb~x5W$B>X<v_<$Lj 20o\ز_VPHz^@~q/Cӵ}'r/ωc1>ak_9g"7E*' pG4@Л)9^`3>0=ztY!9p=].;;Zv=pplFPKch+qYw?Y,.Vw<6q6pn~t{^j:5jk~`n5lpֽz~aų/{C?>=P7roS'm7YqduZ\lPmAi& 6ɀ̨mM@ZI{fœyU{g앭 [G+{wXP`mm]<th') hiAzN}7qqʮdKdP/!lpUclc 67 .Z{uIHr'֮wֳZ!<<ξh)ݦ٬4ɞ;thG)%78Cc\x\p^.YK.h 2k-6ʞ7hhpG=J<8pFjyԠ5^ ^ vpKzK Ƃ;Vs^ؾ/4H{w9g×;T;atN{'m*ȮnU;s +c5} +iFO. J@B۲Ql͟++6nZlQ@6us5 +<]ZNc dBL|VyФrɚUy+KVj;er9c22TdٖX|jhOM21#NYjpɈ 2Q#t"7Fsc)Z/)[RK jAJ!(0B;\L.a$r 26)c &hRCŚ|ŏ/~xLaآ;Vm*#ˉ΢rQ7}ă~@2XeC'ܪ&q[3cXFꦭ٩1~ܴiqZ?;ni[Ojy6i阴}iy5v``}l4xzr]NRw`>:PF T~>7zQ] +xy!e6kvRz:>r ᪀+H2f hK.hA 1km.[JFQ +Qp%6JEA#yBF8)G%B-A)G(pG)B - %8.GB>B\4pB,T~&KbGKGI搚4}gVLK z![ 3j(<1s%c%3Z -E?#9%&-yڋD',q7-+ %mW0B-Q'-O?[ةӧ(<1'3=c7^V[9KA`9AQ`MDQ`[fslܭ?e豟i)ͦjoէ~|g^LW?Q7؂XȱvH8ۀ H+~}@pKP3c/ ~$nn h~ֽ d)2XJ{[b[L$>4o[XBiRS #fܮsuRqo\VܪS"*uaJ<{**_A*ۍ +_i\:*nL~Mk<^F_zVahH5 CK` E:guz|A +xmjz:_Re5@*\G9w<TvEن((lQl8gMg!()?@O +ɚ0C&Hʳ4KyRN~ ;w :k\N1CSYf7^fi)3f$3҅D{O0x\<&HJ,a#) +ZfHI#@0F +/?;J#&-&0",FQɈ7"IAYaȑP= +1 E$4x~X8 d!=RA}~z2p?dA0ֺ аlvi!vi ;5~Ğϴ mFxG|EFPs>ۮvczƮ9;B>ݪ| GՐ|hmH[7r[֫yMlئTuJ k5*ȆJ5}ZYJΡ~@Z'9 +Y^`.+eتז>\&V.RZL|m[,CZ[FOt ,"] xY*a|`"Q,3 1%$e ހF=b ECtZhhW,0Z)T0R Q($)\I2LJb9A`2 eR6$H fk a^0N$b6wD"'>x{{}}:>.k7#爽-Rx7ئfvj^}KYߜPpl}y[fo_6: \ rr#䗉=O /_RyuU?}5]6oOWS?<^)zf߻-9Α]/i=9{\;vsfww؁YSi_̹[<5:Lޣݟ3T69: OfVLhU.JG.xraêUÚɑo_؟we;z[(G{xnF$Gn._uǾva'PƑ@0#j[G`X;$baCme~}@pKP3c/ǞMYZ\B,E)5DM2lAC5%4Qѝ&=H} 21魕 PU[uJZ9~Fūڳ*%WPGEv`R J55^z i=j+AZK0OZJ ٚ!%"bVճB= F6F0jzVG0BHek"NPʮHFia, +`\5Qi^HF =M3($k:8 y(N}?Eqg 3]sFT0riH"HTA1AV10 /wu\w3=ۼ3m۪+O=}zjXIA5TIݶ1 +ҳrPWFh@-+݄w$mZB^]LCm*TY@|SGMBl-B9VM3eр,^ABxa& (,OTPPN2)b[VH\(@@[N @H3xr*)  1UBFD,x\*6$)f(zQČG3AE5B3f`}ZF/b֮6p`uaf#R/)4hu B\+A+ +Z,_/A.A-[?ZThB-@yhys9Z9̛͟'A~ ̞桜*d [ܾBfNS{4cgW*_2T/4 }d +֗8g*SiB + @RA8iށ%gfc1a<1Q2^A24 +V hZFR(1\aĔ8K*c8 &gC1 *Y +AQ) %˅%⒉j|}}a<\s_\>>"I 'W ҽ +v_K͋ ?Ǘ,zX͹ԃŜ?뱥%gt>~^.>qIy9'IZs^>7oB?קsTqP{2loh^>dO_M~9xy\;kf]hw0~u9̺mqpZv 2\o` `t1:t{dpa3ah}qgn;?c#Cܸ^K EɈ-'l:>~uj; ly{No^rEB!.ǡ!.B9y`C8˫wI 'ܜC.VqN1@pv~9sb}ë !aq[ b!Z%@4T8oN"/ItNJ rBKLڽBߝcY=e=ˊ%9#-4|%J:ŋ%OFpO6zeʼnuN,1Z^ҵ[8781 Ѱ'h]wFwL=.S0dG^S3\|sH-\>U\:>tݩ."?OxKC>$gN!w:աB'3xu8ˈxnC3%GqL;;݌V=baBf8b!-5}@JFp]H׾f쨥p[Hu3Rca:%jfߠiUc%i( 6V}Y9 +[m4וn»Rj6PM -!.6QSUHJ,YE>)#&\R!Br+&˲hP6 bř^ABxa& (,OTR +d4X3TlIRPzZg\kfD8z#`c>Ā [1kW‚lDŽLĈ2@K + er'8@e:@ЊzN>Eqqg>bfzQ(#**ry(r D0ٍQ# `Rb7ѬT_~顟ijoէ~3L +,`zkZiFL3-H5Q t|+n6" &G1uz=V':QZ*:@EE31B3$\7!LKEKeEx~]+| +xnABB^PbB( X r2X D@N;sZ6lE,¢j&F)@"F@ z2 tZh) `F@ =h !E"i$!1!BZMHd$* +G.AhF >dPwDҁiolϲ;n`z_3>e~NC63|yީ2xpw?|ބ7ro{~0כ8)26ͷ1' } _EMǠrG(O/o^8zowQ_G*7*]_w]/QMNcCVTi{ݫ=-*IY%85(6ݯ}ioWswO݃ޮwAKwP@[s(h¸-T9 0NRb1ɸ +{WhqIExО~sR2(8qJI  .oŨq!0!mbdAۼ>؏Q+cjV*J +bKmB- 8 k;0ئ`+n$(>((Az:P)ͥBSS\s_H{bw}ՂS悂A~|nA/OC +7hʑɂF~}KZdqUW+srS)9+?Iz/ ReV= +% Vv]K,X(-{..Ϝ~Al gPjy^J9"O +BZOA %sRYpxD43[j{ucsjn> 嬞:;bNө:'neD>e$o4`5+٠w F&q kLJG3DAWMu+GÖ.2 hsfyg`&ĬifħQj h3bFIL7cM3 35ֈǣ 1*a1`MFD\(="fN@ONJD7lPH-iŢ"ݙ"å"tZq.T>VCqUl< q! / D[Cfn@dXxvm4"؊Y(EL",&B0RD(@d@=PR:(-G4 V#F3{ +@@C(3D-FIBbB?jF-IT*\Fv)k 00[ ì>H jT@v\@@6}AEE\X]@@@4]JU1V{{MOV8_{ϹuO313O/9~yN^#B$џBk +P U1Hs<]ζ/5n]irDxP[uG!pt(,gtx)alhz{Pa%'9% /vybrf2w~{ߧ Xo'-I&ےIZS&lزQ "76;m~hޔ91A)&l}ؔOct=avI 4=F( .;RȞm3RC: Nb$eMjJPqP+CȅLQ2! +XɤD(Kb {cP11I0\"a\ 1F&Bu DBTx|zhE OOO&c&fb&fo^s򼝼G E?(yPT1HsŇ g[Yq.TrDxP[uٔp KO1fafZ:- 3/elh}" cQdBΙKOf`vg׌_q\ /OLb@l% ? {,] l#7^ -{7t68ڀ[VB{u8tZL.rTa1wz+}ɡ~t\5l/0?8}ا(4t03=w b(I9 JN"$9C۽U xuu ;fz|ힵ;O}yy{jBr!񑢨8(iowrdOr.QjX(l&Yzd(-,J1SEP,Ya J !R#BZDQ>wQ޴t *#rV=XsSCG;C}e3*@+;+q*vW/XsxЍţi:yt`#cX} GKcfs 6F(q +c 9zXu `qJ:ZrV(cq W0.2g6q.bTN;U)0mfzYv'}7@@wG=>7|ztHkb!=uhﺂKR!jUJ^˜sVu1^G +qvM-劊&&\͗hZ0|YtIM4_tJ-@6] +i +D4\ ԟ + Dܪ @q^Kki9-B1*IXmgwR'ktXեZ,Tʴ=jNXqX\.< +X +t2BUF:ɷ0< #*r3,GQY} Qzʈ(6*>ad4!J1MNU7;fB5"GQMn,qGP9ḶN4ae0d_xq,]vt#Ha!FC)dPd#u ɀ $~|FL7.r)X^JBn0 0YX=VBGGzjEzNPlcFEr訨0-%4УTĮ̼3+|G xmgn@#vm'a;pv|X۷h(0'Y}H35m4 7[6>k˖ ~֫7~N#hZ5b?4j~s[B fHYkV)aĚ*J + "x*He +ĊJ% +_3GЖ-3+I)m"`3KZdXKk_On?r @>= ycdd!Ld$QĨ :4bIfh@T@h^/g)ŋGA +5k 0Ҟh* +̌;ev6Qd>F*t2c=erX鱾)F崕6pnzG+[m+m.NOܻ<51xerJ _294LM>/[ +r2bda!+="JDZٛp?z7Ę(Q |SJ[CrhsWaU23ʨ3zKV1xtBQ윣p1*G F31G9uG8CMimTV+[%۲ +GBI覓B/{`S ƽ6.Hػ&?Br.ZB\fnxf>}HM 3VUD $y4M DaF8$FZ jD%Tr$gj~q,(A2(IJ J`0P,JB y"dq6ICIr(6A 9"dC9$4.}G6+Ȳg A +3KODNq@<$?.H&H%=KL|$` z pb]E b^DA"!b~Ds}#2.\K@gPn] wϻ !`8'*|l ' >6ya3GOlBGځ[ 67y훀]6]0:=YOFyY;J)z[V7DO>#!]mvJ&y1ZzQ@\:ՠ<.yLsqN'(j0S: ^\uK<{B '';]ÔLp(;U{@ Z|x-p(JL\:n@T:]1/( @U_AʌΕP\W[NTȀ1"NbS'LʎS +-4P]`FTxb;fDeI;mYcGDGCF fIeMDF.-\38$TiD٦]iDdMt^>nu(}&`EL:7Bb$x #'$ b8!;Bg%Z{ˈ7IJ3Bi&w1R e&J4Ѩ(qF:qNkzofD"6( 3!bw1FP_ E勈1``_ CaN7 BP} 18A|co&vbvnبx#oBllV7"ڴNSSMoKEk=%u0zZ +noZ 6ح[G|Jz5Uz:,f2a4+Vy /R%ԲZ"EjB-bB, whE_j~Ns5J<7w;|9M9oN#jlwޜ}u܈I%s#Pͤy,*|EpfFX*I0i"=9`4<_@yo ++z ^:B)!<V@irFp]SMSjJNJ5RnZåU4OQYTzGTRPPJ +FA\sL&#f6$bi>ͧ4E@qWm?EƝJoӿ| L○6oo7Ͼ?kۚ0; Y/m(JԯS_^WJI?3+DDB/X^N-_ՋeO|{GKXQ^<^| Go7ߛj9.Ts?[r磗l72w.p.9[W1i^k 319bo0k9pt} NmbăkM uߑwر%*p2.$-&_ϋ@%'&&0HRdljƝkO9;v6c&zcc[%sUHmNe§`ۥ"vv .89+`9:DpZD{>;kC0VA<ڌi(Af'9̎aj%Q#$AvZB.*%T89a9*\BRL ,K(Q)/"$#dچaJ#&نca糹=A]& f@ +3HOK#I)On)ɏÒ1IG`L Aob1v ]E b^DA"a1?t w!btDD/;sEv828(" ;#*쫲+ & $dN>$C-nq 4s>d c#tN@0q %%%- u^aw[9_Љ߰y>@x3$d 7 N#4ڀ Gj(C@Pg`g[Q*iz@‰_K0Q_3NGr־rHO3&ASBHz\XjX5tWY\^Uib(,25Th-QSZUh!-5K4lXs5iyz|P'm("P`\yz骁WmRc1@"]\ÒT6Ȯ"0/(4 *0BJ3vdp#[8ͼ@Q ̐+&)ιsd@ ٌw$(YPRvHvy$bW9agHigL H)3$l"ͼ.&A.p#R[3LM4)D3,q樅8`!N5/x#F3D S]Ů1f q,ڌe"b`DB8aZp3a$.( 5AB DlbdD; 2@Fp)_ P?]!zH,W@E8T ?r :$}ZdSC9W͢x@8Vsh}h] #~\$_>\$/?H<\|h;RmZӭ߷fƁNRWҝ.Гc̲ݽE͜՗5nL }[l,?Yh|8P㱑"hOlcO +mw +>z28~ٷlI'G⁣p{X#o~='-O=H ݐ#XcE;NZ-껎9!D>h"߻A9$ꪧZRאJjo ګ)=ݔ*Lh +RR.iV]9+J+jHTSL"J"* h|Jͮ<<׊*siAh#ZRBʃ",ҢKβbR:xgH&d+{eV4V i4r@pKyzBJTxHb)UyTy %9+ҁ Q(gy +O!&rL&F&}h[jO}ؽˉs^zzlJ۷+ϖc~A3W?vqq`Ӵ! 񱛌[GY?ypp{&lkgZ_8MhT[|x<>$HL S,+"=7:-34ĝ/K@xܤGSce_޸wƆZF&džڧj|8jqpmӚE\pc@B?V q꧜.h8ql.b\qUgu39", 1zjNql|=N +GO8.Q Gm#a$p@>%SBJ}WaΪjhЂ,Uf(^DZRZ{ETIĨ~([.|yWPdSR`m@"Bq8yne~{/'!V6F+ +Y__x+!548~/9~ $ϯ$$C<+巗xb$Jz|Q(''/Ns, cC(_܃PH vt@1{9Nu>q8'r=wxųVݕ^o@ZvZqf}< xO\;cj`ว5-|0pTIQ3.b8ys3Cz\\8hz8ץ' #pk3]Ӥ:adNMSf:fK,N5sx,BXYHeNX]k&!;lytтA`4R.u5CUO#Vg5+!"jo ګ)=ݔ*Lh +RR.iV]9+EՖP r-"QM1(Q|BZ,*)Q7H\+̥\ +q*˦QiJKqUi塜 +3Hs]:RA%@T ++/DyiPn+IPv9kY@V GcvJ:XJ-@bY"-Xfl[0Kf & 5b1;EuAPNh0&Fl'&$ ަ1A[ @-z#ھـg-gǣ +7m J?Eqqg{99P0Y=oш140?̋ \c;0FL^(417fGp`C Qaz 2TDɛfh$tx -Rd - jTF0#@Ji= + +pӘn)= + `tCPNTr$tR9l$Jd,$Gc1〟 2@{a2ڠTz 0T^tJ@Uh Z$SipXEI5e&%" Ca1'x8> +0\|fp $Q!T*ń( +4 +IH)>d&0=;(O:P-18ͫx؏Cq׃EO?W+ F{5~@x}70{" QW߽}k{/"$fS<]нo> {?RY8qyf,L7<~\r}ƸZ1˺V3wq^;8tVo2nUF>ܩxrq@/nNEG>mz}e'-w7Vf薯HJK %)>E I>}|)r+RnHMMJKN{7M]X}~NbPoWnPZwmVkXP5˻M::hG!V58uCD5V1껊Іp-4wɃ8*w@s-^w h iON'8qc^4v:EG\=z/>D8-BjPU#TyQp +b/o`=(CCNA3;{EJ]l+.E+rԦJX/6I}qH۬lY`x/VD^bO;rDֳ:ֲrtXk2QpQ*t}+QXk\.R)}SHZ||>Y"ɓD֪GX ([Xx=lZZy~{g]oZŭsZnn +v :)ZFLfygۍRu6뀎&`8@7N09z3W!=.W1j4KGi3pQcЅ&珘E,z?\e#~YlY8[oգNSTgbgYӇlNZmjӝ WY첎Uڀ*vRNCs;Rnp)~'Yρthݫ=#Ք٘j@U*wzw`b}l)|?P!(/8}7;'JH69dvۑvȲ"' ot +֍ ۲>FiM!؜ogs*uH8M9v8*p,vom:P>.k@j;i%2,L ' +ά (kXnkWZ֤YNLЪ1җE,~uIPZ",a!S!,5#;O/1q"f i HX-a&.4!-Y@#;L.o"PͣqIG28&XXk,hĂm@h. 1ʊm#&J/bDGƘ͉#t80KG!Ek0=" +3C4:<|)} u@hXH5*P#Ƃh8ՂiL7U0Sl:!XIT'SNuR*9Np:N6n%Rlc#x +αqi 0UmP*=u*@t:%ժdiBq)48Q,"դ2Sɡ0<a.>T8aQ*bB +R$S$ELf2]w‡sqwߖ5qE[~j?7MR?^N=nYcΟH8B$BQ䥍RJϣ^=N.—S(",3p[v6rۍBw M7Z|bln΢GG@y4 Գcs׀*+YP͔U<. g:E@**X(C(e!FKX(B(Q"81 ,N&FrhG;e8~1φCe8ddx` ts>4oNK酤i`K2M7 ].)_w&؅Jihv罿oLf{bȎbJv3$Yo:E,7lZȄ@Αfp 𸑆-aևj[|z[rp“1, 4ސ&kv^AΠ@u +zX5%KOuU6w]tWTvVnת`$(jԐKnn.QѸTH_j@jRIh]dx^Ci piY1|^?W|%.mR^ݶ"^ t:K.Rw1:&br#ǁi*íä%^9>WE㖑O,ه3mF!Ie0#)a;DMFqjTgFI?$HD{f=2ccQ.i >HJd^>;ra/uX2~a/'&J|J+ ~} w8A+v )C;B]6aa&-@>16^̣)pȣCsvpsjy\:SiaB 3059u]Q9,AČDQQ2HuYݫw{Wuo~yz|sԷ=U CNqhqd$zu"t jU<*9r;x1GJ97MGr6abȢ3N& `;ʼn<9 ˲9YhY̧3!OFt6G LiSh)q! ? ~'K$~KI+C$Sw7퉰ABu77И{YE߽vFv!dbEwG3D]Ev2ç;h~LaS0ȩ߈v%w:}6naS.Z$vhM,iwD w5mE]h1pEΠD`PR.+(-KJ&1*3VE%S!n.z.ˍ.95 as}[9f7&iW+ YlttjorjktIivgzJCfzJ.R6Oj9]wG\rաBjw sUZj=*̂9S4WlӚu zDcN pNzuyaՖj4 jK%NUGU*t]QYa}FxXUtDY8gu,q4Ã(1`dYH8SKfřzTUQ(0w.?MKBV):dMuN9IzJYIDv Z"#^OYZ{/)zDrN$Gh"V@Ņ#b4 Z"&+!iQ!"5Tx W*4 YS]갿␟+u +qvl](^j+"{PJ|}@ RfaPW.Rj嚠kZ +zr`i_V!A}KطSig{+!*ۜmڊڹMرU!AlQJoV`m$lߨDl۠@lm9bz'd:9/ba\X(^FlպU⵫֬rjJ[ስ3xC (+ R +L@ z)J']dw7)M]S4 U-FyD#T +BD)\I.::I$!Ib' !RH8d`"BJPdbK%RDL,K5 %01cDqppYG(:0G{ᰍ|OinP@QvCI}V:@Kza?vyk_嗬~{oK #7No? g9!ћQ1sfq'Ə;$ g>=8_-l^/yիg8= W϶ dӇrS 0_m!B>s/qşlTm2~8Scܬx9ܪ]%U{@2Xc7D_ Xuƹ1x2Q|rw&+[bJ3ۅ{ B!>σAZp WI}1>^vO +&%H &IH[myv<;V85^03Izӽۤ㒪#e`11bJ~>XF/|/#CM=7`&Yk,BUb $Vn:XCVf +F y*Y\:ney9{V33c9M,K3MF1NJL60NVdjXTCSQɣEY!KsJfx(eQRbJGrSL0LqiVdQ' sLZ,?kqc0G|z6FȂe> x2 +Cu4H*SڣaԇC$ZʃA ْDHBZOqI?4פX[Ѥ(RIUܷ=0H(s:!8Q!KI + +d`v3tJJT;7r:ݺN69ӭUu:; tʅrXžd7.#펈6j6_)4803=l0qŬ E("ChUԽkp6ݹ{wuU\w3=O=W>U~3NT1:Y(I @oרCF=pt7 y&vψu΀L::mF,̹Z3Tc!eV[IԙyPN謲;*;)hmUZ+mX-VJp-'v^S- 49HTc]-j(uԗ8b< i"gBx +ij +YnZ#B^u qG񄹠2a\Z-P.Uz JV|8<9 PBaKHhY Va:8tƳCQ =Nd0eDGBr1Gi4'(5*^e^/{h cE3dOfD\Ծ VJOvJKR3mk۳voȮ DTJ= 93Μ жM`Fڲy@RCVbH6قl\kE63BWۀu"v*>ƆҊͤ]aYnFXe`HRZk35(.O-jeIS(6Ci/29K>[h-Y `ߒf&FhX4$kc Shcy`,= |l gcEБiz`tyO3jE):i0YL#ɑIW&jL$&OI4A˛adHi lG}f*Q}Z|ߥQɉrQQCF8),ڡ~ SkKx>wOt"ZԟLIStgv}5Y2~p㙦oGn{u.\ _b]t{ƾQ4z{;P߉w y˛;] ]z2y 7?`pl{ofj#bW%*v*Y}u oǪq)1+x{VPvJ_f[Ę%o ]+y`o%κZ~1+<ü"P;Έ^+zӍqU8RQn0NPK|_sY3:1:Bh|y!T? FLgwQF (Fl90z;uDBuw[p/ὕ* AMԁof=/utAړk4A㫩G=ݨ=v~+HK +NTW=uؖ˜Rvͨ_^LHlTض/6lla˽swl8Ig6~T?Ok*ߌm*Xʀ&=JuY+zt"FvQ4vGw7 ?h"\7(:"Y +?eSsfO9_k%Qj,*:Sc:j!tTZE6.&ªN:r2۝@Sh,j(uʪ/quNU_BS:F8"St($Ej +Yn*pɪg*h^E3*f VE.Rqe'<¾F".E"ٴKț)bdgd~"M23=L`t7*`$s  EEĽnuYWdv}z{0\YuS駾njH쬡@fmUn U`RAJj(ި+@vvRjKH5Vũ."]ru!MTP6г4QO #<_\Y(˥rJ)8|+EPAEf[96 Ȭ\fSwJ|f`:r羄g4$Vʥ@S8D*唕DZ9Prf%pQf#ƃLLQ0GhN#ZHj\ ++RXf(q%l&(9JsPao( + ,9P +F&Nj7x)Dl<>ͧ4z<>=vg7>O:6~Cm}=5~I)X脵bޣyҾg_gP䃁}/ƆcYcXӣ3^<35j0292Y"n/2k͓n\>z05wQyιG{&'F%9+猈ns 78Q!#GxqHA1 YNc~}v"hiscj~UD"v$F;yv\lwc7 +EsgsӦY*:TZVW5B;T;U8TSYUmVS2 d Q%Op*U* !'Nyo?"r +zO&*2DrφJOSˬK̇Kf6+/cBRDQGΡZ'vv[H<+n~;6r!u\,6ՙ+Yk[өՅ^71YrYNtF$gTh\Q#j;1S>YNt,SI-\?sR0Hr\c.3|.5bKG FiBL.4"@!i]M0Y~}f VL8,^D cl' ԉ=$?w~ +k! +cm ԑJfMK:l"4Z9vLG :HwIt\k={վz+mH@<-[IZR󖷳{3%iW=-UKM5$VMK4TтVRjK)6SP/ԗI+$Ֆ.jS]DB*8lFg3h2TGPy<+QK9䜕dS@qV2)0-D)HrmY6('dyDVEPF`$[$D3`KM.R7fNzȎn1$yDRIPbQ!>Z0J2qk@ClЇ=9=P Qvv̶|w;gM-yn͜\666<''MzVNύ =i}oY<Z0B[85ٜ.&N*L߯V e2+"Q,Q( +E8_Z]‡)]Lx )rZQ'X N,9wkc!@R{#Ʊnu +.V|LtN\S+ת[F 25"^?DGVQPjڧ3*pJOyͧX@!VܡF\9ea!D KRpVQtԀ .6.Vw$~~ѧ;MCj%=` @&iUf5AXg*̀&I*,N7XB'1υgDϏYJrN +)I: +*K:Tl,ZۙuWԷv/q_ +ؿ6,;"vLtU.i)fT.hs8+d% vm +h#,ȳC`vBs +@9Ai$寵iE۸:dߘm˲yqNnȴAfX,Lr2,dN\fhkSm5ò:NV'D/+L4;+= HM0XU+P)MH7KJZj$ƃV.5 `XlvoZk,sDLd|jidkBAc3_'bDhN@.Z -#XfklN,ϛ#Ђf鈯gj$LfOJ55pS4Zތ!OMNV&i)8L6%R EE#MP&W TPQB;@0 +*yBh4<@*B^ci^ Bf +e:5& +$NR$n#@V +YH(b"YHd2"bPkQ.Q4@F HF**V(EcEJA4"(Iv')!$H/ +bΐ0\PÅ0QPHP(q"a|E6ьf4)d2^r@+YAxo{];LpE5asϔ2Ət!HpJS+p$^N^=~6,&^=Y3O"G{@ãp%9CD/Zʜ՗%}˥+ήBV٩64#$T*sPWL.4" B1c1BN|iK.9+9<}ݙY㳙+|=C#%6S=oNMǖf f = +sCBx! 7&NJcC @.ϊ{$&hه3cN:z4bLF<\gأHKCթj~ff^b00:݇zAE3qf@ʬf:d%..N:r̷(ES;mdE&B+fMdm7@p5  +0S+ .[u<$k)\ajTrlhdB92R +%dY" +qm.0(@gGv6%dblBu<+tjdϹåť@Rq))oGpT>> 8cwt!)AISO@I'~I/X@ YŸD""⾸G$I!]G](Q3wٳcx_pi<t9}t8A +Or89َ F0MA"& mA>|]9֢T:d- a͎=ڹ 62M1gi<) 9-.hUL"" 4{H$Nvy}^_,#g\B גܿ.-}MNܽu5qJ>AsE l#߮qYivٛ:WCD i4UjZ7}H4׫t~Zs!_PCkB'5ki])JuKH}޵HuEF5HtX!ѹT_2*А ZHIyDG,wiJsJtBJ2L s:tR^rS5St-,uV"˹ShvdI:ZZ0-A&R%ǫqZX{;,ɩ(-$)R9#L +W$F]}= S'|yԇV$(E+*B`ǃ! Jh7Q9p  +HD R +<('Q +(ˑ(`\[ph^!މ?[.% !%طSٻCFkvEvod.z-s lV)d lTmu'o)ue=!։I$k=6Q k$=akgx"\!;HfQ\˵\]nń^ Y"VrRնc^;ۍ aSXw!8v6'bu9'ٲ}>Os~S? +Efȏ~Svd~xaY?& ;ػVgE5++-]n{r~eTH4E$LG%:ER&o"'H8mq㭰0X0QZMQ)f:G[C5tV*j Fe>$a 'Jx!bE@R.&Y $GϹ.u#?ﺂ)=r+84W.7*N J5 +Af@Ո[u*jD{7k=y6FhHRETkP/jt*\R뢧pV腈:㾡\Rg"0 ˍ2FN75gR# X%z.N.3' Ο3 rcz#sGCFNg"J%N"N7z(:^d:Vhf q<߈8o@"95p:wSh(ڟidUa`0 + XizQA*?]^NjYN_D"3AȊ׊2ZFn"3jFiɱ()FO:DBS|aBEPC4dvd{Q&5Ffl"U{5'S +[ɠFRq +ީdPPa}f=۔B`ˮ +h"ЩDܢvlV*nQ`m/ܾIضQi7[! +un6Em\'GlX+C ׯ8VIW غ2ڕ֬"V/0ȈUˤX+*f2Ċ%RR?bXB[ȏt%eda'~G~X",";2>2 +)b>@a4Qz1ߠaw 4" Ҩ !/@E`P|rB!#rLCH|N~/b ?X("00H(r @H)@@3'L(>x<.___|(oooPC}q;'/o'oo +hۧ~3z;Sf~~vB:Ofn^;Q6f_g^7Q__׳xof {<ӷh?ɝָ?̏Wg+?]ᖽo]rK~xXJ|lVU8[1{6I:;?.MtN{LVPͫG}ӷm=7譚ȹ\k*HQ5yGXSOzxw;en߬`>++q=dv2&ޅϑS^SXg{q~Npȥ#w*ӹ.ا9S}61߃> Kf\z(esXnӷ٦.:R;M7̹φ\H$;頛'@$zd02Cd|KI2_),u3%AӾ͔K}Ew1R>cYG,>h2#*a=*)0y?at[aa1 ḍ̌SxC50$k +l)z +^U;&m4˼-{M[%!mE@RĐE@r@,aykӐg]f@:]WzӘ3Oi]џ"*]nT: jD +9W#nթ7/uܬ(FCkHRETkP5_@t*\΍ZZ"PrJ?WSii7@B +Iٙ (%4NBhQ7( +QAt׭3㌚3?ge$9g9}ܛptn8E:܉C$C$6Fp:؊{4BpoƁtk"m$@݈zA[ZW{ ɫmh&k&j2T_NpvKPJTbҭ"EUp,Af|#$VKp*<4׽=VM`Ye@a$fo:N&ȴl2S=㔞D=e(5>EJE딼'd % +c5-)>ZٹfThx@L +ռT dܩ"CTRZ]x;H‚TRJ(X%c{t6U+xK +M.mnR[6ʡ +r Mś*$lȁkmX_퇐K֭~RY^!;-sZWrwk2?|V~JurZ;x>:"ڧ )u~BD| $e"BquE9M HRaZI U"@ b@) +$ /_?H+dR?T&Ȥ2W0)ƐL,H$v$b B6A///.Fq>8͠oKȼL,`Ml٥~*\v>HKѼ{Ce>7v.CP϶u;zcGOsu+zr~lYď/61^?/7p?|$ l-㻯0xr5 R~l?nX[]uv:sxuxuΌQ&Z'XfoY?9;y~;˔iba^ yNA1R-0 RCw +MQY#=4++";hdFE +s ݸH\9Gnpl_aܣ;=/}1}oTmڀuAYF13b;m{cƒViԙ;l]s.WtZgic\i ͠.!.mvCe#<[mrBqڃS-s.NҚm3@q̃xpq :ͩ Qm.#xs󠗭n~ag{ͣ˃Nvm5Z9sAGU;uնvhU*l.jϝ,/Ҫ*^_ܭdPN+{~Q2JYJ\lVRVխBT7 +i_Ll:[N_켿ӲLD[Ο#ز)&?^Iu'i)O.>'?HKKDzsI !y8hهc,2$c'zp)ЫzX92";MblG^;quN[qS3 IF_Vo# FtWgtkH^m{ @{58jSSh$=0` $r[R-%tAM io1wQUg!* p2*rp,*u$GdXqhEP/IA:@Y围NyfSI2-e-Be$8'i9; Q%x㵀)Jta:% vCIX B%rpvE{"U,^F5Bhp50BE9w8;ad8av -Si(aT@ +FE0J\sFss/k۽[wWw[f}z򬫺y{ީaPlĚd''I?z')'1Jb9hQ8qud|BEs@l:`8GÊD̀(AQj\$KDh}Ɔk dEkEc4>Q,L1%g`t(# +s^07K( u3ECNp9,~ v+-f$hLaYLH&:Г#854Z`5$ͲV@,afXЌ%E)ڋ~G$")))Sj嫐B$, R}>u;*X +RTlbTSBWY~ay54TۿK|Yo/(_~Px5Eagy2kd=?obPqwbD-"C'${_e~hG\-7ε l`﹦_?B]Y[='Y3m 验̠E9l(=-0m +]U#D%A32yAY4OTFaۑ~۾:=]5ZPs{W<7޹v`խ7x_]kZ_E5{`\q 8[\;9QMC~Ρk?+̖32No9 J8!8ƱOw`W@KFg)Fasaơ>O~}2"g:؅SہS7гR<~ah@+jp/P;t#hфt-16h\o:NFT͐ X'8uU=:k3k=wjGT YSZWrh-QųgyU^+\J#V*_*Z\:/tU +K~ukɈ2// J%JPeX+*?Jt^P,J,@-lFעgP|TNϗSy D!<-B0gl>;NaYEoyCv!rGɿwT.^vr +vȿә3C4Nw NWvYgN8K\գy>t&x!׏k]Zj;W;9‹+za΋ԡ% |D/ YKPxXO]T<,gp0 ڱذ0β+*ȳyV?r-ܙV0٧МV`vEʶbeYLhf'7Ӫ(' d$,@ti& 1Ռ>$tg@Fi#ERπ7i&55)FIzr HM0*JdG} ~c8=0)& 7^G)T\4(&Jp:O HEOglАNVdV1F54XX21|AF207sP7]4d r8l@mҲlJV[DM`2C= 9!S:HVC,Kk4Kix,2fE ͈XRğaH(w$IR, ;_Q\Y魪iz^%( A@pqCTDE@pTWPYĘdFdLT$Ɠ3UռM={oWb LEPsD `L›D&2?u#?^>Vҽ@gXqF?w/k fـ7X [q? 'T^[Ydz6 Y01E5)>ʂP`w%kx߀zQfk3c3߷,䯺|l;:f,ιoz97<2sqc!{9|nxK/'>d%UDu]R殁9,Wm*g^[Y D ͠ux ޥdvPR^Y{=~]n??ԋ4w_nP/)ؼ0μ|:Cpc򏧓Ꙫ|K[oigO{mG~ZÍΚ=}5c|kGڮ[n>$#vKL^P~Lbe CyKBI.ɡ;NQdyGf&S(("K0K AQĬ FPɸpa Ll]]z{[u~X^fVQ[EX|% +?[xhǙᜉmcE|=u59_55[>1_19:tMeV=Y3sJfƺ_vXGrrNmrCWm.RX+Y[1Mbq:]'!@UΡ'@,-q[ F4-](Tw"٨,li1f ¬B--!ȿr bFeyu@5H=݈]f`gP$x90)0x)0l!0> y}Fݬ6e}RfI-iR"!ݍv{늝=A C (G輢R^%Y[eK8I;ۗԐ֋*f$@'[59qNpY9gkd\x]=ɁkuTwju7w$ZWYC +|…W}RWʅTUR/] PBΗ8+7g vT+1|zȩ"Xmra)4:Q`DyU7@yU.r+EE~N\KsdyghYK EFOarJ^WHHng"dәޭ  {;a33.?'bDel;4_'Hv~5|mSh;%mQ[ZmRYl9E^* ͎s<Ԑ-T6:bl8z&u󸯵ڰNAgXYJYiJlYaq[n[a+[\1grl2[)̎Je_./`_.Qp$_, +^F10Bw%|WB]圴N0gVKT*XP;aR-vpذۋ!vv^BBS\ARv(\&dsR}$2MSb)1Z6H-FjѢE8\%\s}Zd%`փLX$ +H7kߒο<41{:2-DzgקPHOCziUz~2X_tم[v3hTތJ?϶Nvs#":fH`I#y#>#>e6~9z9:jvC +шC&. w$}hء@v%B۔bԪ i$ע5kC Ӌ{$+sZY B7#=g7uW^Pw)FWWQLQPg&ct56q3녵^gZO(&-Ǎmn3qY !c:SEp}4U^* +p9# P_櫮:Iݰ(%?jFl%$P[LUSȫ ifQOb(3Ž!iifLHi. Tc3Vxd +΍f0>&l3vd^a"rnMn{6v 8ߎc8ef~em3{k H7;L2S ؖbɧhd#Ɩd6-3X7P̺AbJIR @rd 6lS\(d?!V%*cq%ZhZ5Wj-xUPlmGJ()2Zǚ7zmUdȴZ jFʥ!>VDY4^!>/!~X)|R + _. Sqht%(83` +X8O ~8O>mk`Hk؜fyohH\A\L0/0|L)Ce z(T'hNXChCDZB bhTb@ZĦRR, )2&c"(W ߆bų(HC`kYjmT7*^w]),ߘ 8Giy<M8̒{p:4yC;01B;rmaZÑl~fd#~?D#+ =Ypٽ~.ݿcKێdS Ԏ0Ѩl+ۿڒ%TKjƽ ^Em]pz;%ʒ-}t0Lʱ% } }) +*⭠}}hVD<6&0&MU]lJtC=_km*)_=[B ZL뚭&JP{#c(ikpԓVZuZKPĪB7\5"HJ[ fcJ-@M ]aUUU +QDp3Po|3PgJr Dqd6\#P fL=0 d$r H9z";]dWfHYIғt@ZEjCoGjg%hc!ጔY:Gk|DjQ1>.0ˠ<j!*`%ĄeA*@<*,x)Sod@%-WvZy! _o^wxB'V![D +QV(, +i&(҄01!5pAF=dat4VȤ:R,JVc>: fIYnC!Joe|U_3Qu ~ ؟31}z;#5rT(|{1/o|7/˷/ɰe TAU2CP}L|OYLr¾rχ^L^}꾊9E9I[RGNt4%MR ɋ'eYFq|06(Ib$EIAr(-ġ(!a+=r#$tIAaus{gO>;:9~7GNß~خ?|~gў׏6=\bL?n"q\EA,dC%УYvf&P"qce Vi7B8F Ɩ `}817"q0F!n`uNgwc{XH=nczZgGB֢mEfMD ~~:Sw۹Z_~hsõf۬<@۫f05s45>jDi&;zvQW7׹j~}UQŪUJwe/tWNO2V]TcW/2JXUs+?P:lTKogrOȐN~cP+Q<* R7O+S*o41rZ#gR˯Ըk}> ٵ> I -p鸆G'Ct q~^.AG\=st oGc:q&1#p栅f&| 7 iqkF:5}f.=ngeqX7Es馀]C;-j^n'y(H}ۡ[)Q{XyHQ)g s8`H] VAݝV@ +!n:B`[6-iظ*:[) Hf\t7/$5[MFꢭrbn,s5V`u֒<Dj- Ws*VC/7XD,#R PSfjWEU@&.Ecf"UVh +@ii^J@q (59z-@r@Q6Te +2Z3'R .׈q8E\-UQ!+ 5&&,X- R!*],QaKHAz#; @+/lb_/,K)z;-zg > " +PR@8dQH3Dq&܅Eوɀ 2!{Ea:p*" aC1cB]ŀ(9!H0gE{w{f׳juUtתۿߞ@JkV}CJB*e M!CrD$DNPp1@"Hb==0'Pi6EQy 1 aH#bş???.|F3ьO?7sct~E֒+ӾngR}pD~볨}P {k zlџH(A̻mA{+p0wxy1d?QCgԑ$BO RʛPM7Q'zEk{m| +ļ4(<#JŧC('>Fa@q3H PzʈrmX^lbؠlk,m&eM2㧑B]6˨?26,lf&Ċ̳bout]?jm/h)uܺy涧7w<ޮVJ󣝎vt]RjrtzT:;e|^^89+wtQr83:V:KoF&.N> R'xGfga|86:;J6nvq᱓ɫC;8lg[hTR9yUp(a2[)krf5xl.6n_vb[Ƕ7h.=Vtv[a'EZW0,_[-ܖrYr*m ey +m1^,䱀KX6υ; 9dʧ᜗f1 -R0oOqɦ̹sb]9dw28-ќΒ'vS*%)-2˥)֘{Rh%>~.dBiií8v4ˍJZEhiXHzL +R'K@zLBRPڕc +yfT'G/Uqk)Z r(%a 0ڙC!;}P5Z*i=eHT',Niޣ߫#g0Axav k̻ђSQ_nghP[L#HP[zvxΧCz1X+t* ^Wy+ׁdogˮ2PMA-F@&=@hq?'F b%r,1Tl0 ۶GL)[k`غH)-66iq(.Yia II~Ezb]XkR==QD`XXmjr@(sZ>_G,'0@ IJ=t>- X<'E'hQpPX, 4/'&ֲS{efg InF0 '=!rR Z S@Y4d5HpJOTsv -:SM$Ȏ)y +̊$*̴)T3J,fK[Ik= pŔXLJ5Fb#LD^@,ӧɽD8O!rLHT9"4mKd :I)0Q2A +M 0^1i\6q| +0N2A71 +2ր3 A:1&< ܋N@#pU4*LT +V(ah +/#"& H "@pA$8Nð(b3P e LD"+q 4ьf4A?Ћ`D/6l,=5~볨}P +`%%5ps|OR [GKO pp{=}P +|͓!y=<_?r>< +s "^=:RdA)#A3Lx49գ)$&I^vOrp=>y,E@ =: 3%C9(x-6@v[kҭ&(jӭq%-bseYͣ1=q&e$G@yq3hdOO n]n[Yoׯ]~Zqjٝϧ4 t tӁΌ9$# 9#QrFH fЀ d\I:3NpTYU3j߱6}s.;v˷WO{Ê%II້zjl CqMwi.4,rhǸB:i34]fqE *LsXVn;áEsUi4 8R}UF-S45,UaP +Z9C9F].R`>Q_xVt8Uɧy>~: z2C |<ɤx4q<#1X:%()EGi @-(ނ%oaK $?J7`q@,,AXL$D%'ER@+~Z8]|,,v7&Il)8z;u5c3i;@]@tWbO- bѝn`;#)bۑFJ(@I])EvJNBhK.uV#2U9;rU+ +čr%E%qr JUWwNmwvȎ ۦFՀt9"ncʮ+㭳E RlqEt4 6M$rZhoҢ]VLܠt^K"bB|\uJ&gk4:D[Zjұj>Ѳj!N"`ד$:= TGԗi!tRvJ8JMfHO*!* ױ:QGThy:,WK&ݚgk9:FdzDI(1*9h DgU]CjitDn+'YCo`)TJbe&j8euE'hX"4xDj+Tb IB9q% .,>B +wEąIL+":LD j#DTyTѨg*lR!;cRG+A+U ?v}: (}nQf-J&$QRV&R>Q1@K{$%DEbHP(;I `B0aֱǎ6a8_oa6`Rnd BUO>z+??^z䣄w·ߖ=Xn +. ;ָiͻK~3C=~]ڣ @}M, 7ܸYn2?dͳ]_Az??Ers|Cj|Uv/Oy;ȫl7on s ⅺ"|"=F{m촍qyp ExZ{EX{{~?,KË9;h ޻3 ︡`۟k|uO'Mӓ5/g_.i4NԾ\ L5,h2h]2Q_(-ށ-. +)S|yS'9ٔYL(222a NI8J:1H=HJIn8lDI,'|3]HX<%MR%͒$~5I$~y}{H +Ȍ_Pi7 a3C +1XY# f wc;~Ea/襺}j[\GfsCYD7PDG\WDMQT@0#qLq͙LN3Jn5]ͽUq$Ǘ;ϭSxS;u&PZS~쳢r(p6)/ʻc 1X$v[2r NGe尽&"+ +z+CgeP;-lvIF"-1yn7I&Į#b6H7rڱ١LD#bV="tmDBqzĖX1ZkSyvwQvFH[􀌶#. g-&R'u +,ؠCô"C5>"BWxdž0O>B֩8UBjp!k5*NVX*E]Ab +zBZ._,kRbBRZ4mYXXHW6&YL rA6@P eKH EAḢUńl2PF=.HtRNZDJ$0FRwRCjRJDKD @r ȓ^8!#ؤ2\Ri\äpX,yG$#bM k q>8y>pL0=QInL߯x]p 9)D?"ع;x ;٠{Kˢ +y70AL(_h߾ 94<;!^o^k~xAzA̦y j-?[#B*>=]ͻw*=a4_(}g: -i4I, dKEu[:@je݆G1yxmȾ`=MF ] 8Cvu1d{-Ά`oBV3Zh\eM[c̓ eRAт )P]L" +UȀZPE>%XyZTC,+ɦ`dQQe 2d~nXyCpr7Zxf&]|8ijBS, HLd e&@Fb&x &"=L6&,-ބH3b̈ &IɱF$Ř%FAB6X\a)-6ҀN1EPvzPSw^K݀X'0*"hT?T +`C, -Q>ZBY"> +-Yx[j?)W6Q|R. E*h+pc `5X@n1Fɠd`JA:Bn(iZjB!IbH +$TOT*UQ*r{xc///!b#{?rqς\KVT2]w:" =fϳu=7YO.lOAE DQӞÌgOÓ7'G}(?ԷY^~ƒU? +_Zsx/~Q=ZΞ~O/X~pˇ+=_|L+cHyvI^A5d)kdIPY\H,64X$%˲"b2B"dɫCd)v{^K ҃0t&KMKX#+8{ĺ7>sčɋ?g_}rjmO?943uyqo78tnpLe0E\?vރs"9&NOwӰ)A"N`{p t?u;&vLƄlvLbx0"Dm:嘄uL}1g;tN`y3B&U0fȃ-"N 6;rDc<#iN͘MtgAǝ6H+~6 ȩ}r5}yrS~<^ z j U_^T +?©S +a\/J~w6\+Sg <}d +p +~{ɿQpLKfoN;}z +ᒞIF4ϸ{'x㰔cɘ$\QX"/L|#qNFť;rj )ŕzG}G1Q6>A\=}mT-QpǴJ(#Zĕ_a OtDC 6M#mfx M6 -ihBfCl`4`8Dkl㑜y=MF ] b&!kQu6~+URE*hdXcڭb1WjCԕ0bÀ"ZPu!;" +UȀZPE>%\NyZTC#J))ʱ @JAϰ + r7Z8f&]|8ijBS, HLd e&@Fb &"=L6&,-ބH3b̈ &IɱF$Ř%FAB6X\a)-6ҀN1EPvzPSw^Kٙ(4} sӃrE{D(xȡ+^ql4n%Uz$1!l0==oߪO}^2e ~{e8WS\) Z/=I$m",U %Q$y))AM&k !P8M.!Ʃ? +GvX $.F UcpqQ*"6ZԢb½#UC5A81 %9 +8HV:lpX v 6 V3)b$#`z(`)`Z#5JLUAV+%Q*WI $A"q9J'@ JD +\F.L0`hFl0 .r1]$x&_Ϳgɦ_^f<95ѓAЛ̓A@*mнI {t(C;9ț#z<}h%z6!#x_O4CwOi^_yzi1oGh2JK'/4nXxU8$$+ζH$;+J +\XkV1=,?}jXn;,')=e鉲"w,F*Nyn9(?Íaellfj:_m?~;#}^}a/n<[}co{qv =.!q§(}~:} ! + +? \U{>A{$"…Zx5],Tl5t5"\gEA8uz)Neo)~f ᄈxPRu=s*z;B8w@~}!ECg>J-jQ6T؅3}HC法g f޺6l.ogMwzu/8ky׀V=mQV*O@V>[ۜ~ aв/o.,ۍ EBK)o!g_s|d -5P)g៮ +Y +d+sx 5}~3v\$T"7`|Y9B39%P`s;rk11~KN~Gsι).2ʛ, WkTMZKެ5i jQ֤H#Nr!vNk!tsyVҍ3:^gA6Lsq̐+'M!]>a 8ntQ,r v"BPoQ=HziaYi8h;`to"G{$T] ;1"'꜐{ȱZNh T_@v0r9T-Pbh:)3d*<: ٻU8`ۜhOPvٽ5-Tf'cwxǩ@lG ;ޮ cCD(tz'u ]6`:g@8ٺAm.wRV1Cq3߆vC_ Y]`5H٩?v"ZЁrفV̷ѠeV +fY:ΡyK%smshނ+d~EƣPf[Ati*+ӥ6 +e^dQRhPI͙eJf<3U6BfL1Ar'K>m2u`8.6m3٥vO2b2^:f AT$W.HFKOIKHIIAJJPZ%%hɉ%1NЄ"a)pd@b԰X1>"bU8L-*&*+:R5dQc`NÐZ iF1 b`,Ja5,&HH2 IW*9r^ɴZ( jRi~hAN$ p'$p DDP +a C 6ьf4 S hd};٦_L<9zM H~MyBы %Uyӓy=,:!ayݝ ybdy}5q )H$ +z!)) +() VWQu׵Qkv_ٙ ;YsgssM~v,J}}5TzOMهgsIOF{{ +^+z4@a¿?qǩܚ򵜭I0OV\7E`!XBH$ b˱"s +qji\ bA:,Vhf$= .GaE;;tT>rhH ;J^k-ptT#0!vD(c6ޣ+aPlGB!.XB>v'41Cȵ#e.i`/inҶ;;ކ ݢ m mlehl%e tlmodlklٴƍOoe> `=h(]ˠ{UJ+4"K#TڿХeՀ͐5WQdv]%cHD@̈́xPJO#%Z eeҽ:(Ļ5ɝfwj#Fk[Q0QŹ~Ahpr[!qDǎzNiPB:3LZkD5ΰj!r^Q25n\ZmWT'htHgœi>#bVM$\<%qBiNJHN@xI9B;3k8.m`ʦH9"Tt'UOrrŸJl)U~ejȩRDi[?YB:QDf0xr@'WQpjM?q{ۤVSJ9n(e 6ȥ\(s1J`bMbՕ(qsq8$U,P6N|>G@>!qp>_d耟 |~oM8|SOj6EWUU`t[vgs/x ^=)|ݫ _> 5;?o5zw930VblFrC\ 5XL,b`qX|p8N"`-<"R%K +V谄Vt@kN<ݲLF#+;FxdP^n8xT:N*7ZSfj#t7p5P1-bc7鲙ǪhH(ƞ&KVnv\@)7T`/0Q(FZ;3ABjTIg"Y3vF8k@8i JIOr ]3_M^i$o YHbV\٬(젬"jP]T.ngrCQ6[j.TqUPtaMv(P*\[ +P4F6|ۍ +FzB& I7&QF a7M>3|5@9&e߿ lw @X! Zb&uBpF?Ҡϥ"R,tB2]oIu۝@"6ɔzU7[%bl'I7ۡ5к6TlSP @+MJ7 Q-FS_1f6#c#":Cftuf ivc{Z%n䁓Y]=)N]iZ$(a..5{OMsQ>%;HhP:W@®z#L$Bi0}1!_uΝ"NjG)tJR(Tr_IPxq2ɥi2;J*c$O%b b1$H(I@P D GݝO;Qӈrss*Xc4).‹y"BYϿ+)xLE糰A>4Az74ɲt*7V(#6VFގѽۛ#t=Qx7^7O=qCz9:%"3-ta͗>$T:/vXmjhIZ:ax䧇%3~~0^/zdA )mP -ʶ@in0P#!gs(; +edrBd38K~lKHdkKoIM)I`ݲ72em`2q@Z)5 JRh 6%R1)ВU61'Zn%$ڀ v4qG'ۀˬ;rZjXUK:qYF h%+ف mbZ>ߌYEhY^ +,"ܒ8 x`͵(Z8L-kFsL@2sc@Lesf3<|;݈1͚n*mLShӌH%\fĘAIEF( &ܨ(:,CTct!b2Nd:Q/k:ޠqL`&kLS 4h z̈́:Yv=0.D |Bu;*@3ft )diȀ6+hd0=_HGahE< gȍð6nB j,&" (H-h3 Z+1q>/Nt:E(qKqD!PfZgF???{|}}%Ƈ#FjT_|/=~|TT\gWcl/[keYϧ~ +&o,/S~tD}V{#8"ˈ{=OO^Ct]OO(# +oozI> uzzXy_zGzx7FdPD/&$w_?<YaF_݋ҿx пxh(Ͻվ}};RnA ѿ}pѺ}ygڗfhoUZ4U1*ϢTӣUT_5`^Āp՜HhQU XpHő_ 5_~uɍ/n]*!|ݱݱ}JKUˢJG䒂^\qpNي>Eg*: N7qzOt9Ў+utTp漣6^Ǖ=:&Gђ.%-G8LhVpȋ2u(rvOA2p +zQWU'&f$SN-FAuCnIءjk-J^*+Qv\N"B/Eَ,Jlm zoƻE7ܹ c=ank%|.E15.ɘ$Qʭ3bYӫH8K%,d@&$hߞ-6@ +)+ubʮE 7Vt-,"O%\?Zs\他eZv-q|ޡQxVoGzZ88BqT燻Ң:B.ѻzE aHl..4ϡ A"FEg<dv;,@{o7ZN6N4@[fh\vu6zƍ܉+jSv:\c&hx8TͺXw2vd_#ACid?Jc4TrR_ΣeRV8`O +hIM Ts{;O`*>MYȺg<*I@Eo*7|k-{ZR8#E& +I*4b*`AqyzLI\H=e0F(f 䓟ie*?]Ki(`j09:ʶk1Y)&sWFAғ5 5Y*%AYPKWcTc[;g1hBx).Gi .qjLME05 N1ɪDG(yx U?^UpN6XfQBe.)bNߝCJ{UPӥJ~)yl;\9lz]h'QO0e0iy)i Rot hvsot3zN=k :"ܫ ov'Ȅn9G!orE uK;&c(c +1JW9\>ܿԩu`h0:ՒU۹Cjb`Թ=u:_v~wW9O`" >=;١w;ݸcɈj70>;im79<nDm3R` |,揲6Yul1pf̞&fwDjskF3/x t j[oP@ufLZuղ&%edj fKC Pp3UfqU \H af+,fZQkuf&D Kn|k16Bfrb fE`*LʍDj+r3XZfbUSjpgR]b QKg䵸D +(iEDU*HK$$W`.$ReHTq,26z"g0yzOyi +#]ZinD*ۮdhtEZ^HOҲJKԀd5g5fB /9^ISyHU"n TXUN ]mJh=%E16@QJ +dUa#l[dhk.?SIgafd QhD̊9+J0c,Nd{kCu]g=}ŷ|3LpC=7^$xI4 K hQܰ` GFPQZ:&"p:F,0P'i\ qX5dPN~.pȰYIL2&hTS +e"^ 2J^BtjY` xb82,NЌh4Դi QT0J +KBA"j0`Q _;P(:Rd%zo_δMo2y-ʒ(I z@%>4#;,_G(tg|,/]4O_*(!DL3Y])T" s&yϼ!&!=Cc<"~~Āsz$}}%;R+y݃sNBu=zg{E ~z݃8÷_>N M0bוP̴n*?5 +R*;!FyG(E~J"?5Y6\όSf SdE*r©1Ԥ$*/Ke'CMHGzl40Gr:( "KdH&P9i@@?SD妧Qekiֲ]77+_ߨsvϛwyGs͓khuzmw-/_WG]=^[w^_5~ \pJ?.\p|KE &99DWffl3|g3NBtN4Ih5$]wOTu58'8&($GlwPI^=+@W46.λzPl_ [ $BMR.Zz.n f &"F VulP1+}]w-]V-}vk%dnӛo,-~t}%c>h-ZP2ȂXD\_^kh_\ۅzSL9X13|W44\ a`TSS Tֈ(no(ܙ+n=++Ӑ_x/&AakC^q}G]<5DuѨդWlQzѨS F~€qu!X1Y׎WW1&D}F!ܬg!K?BZsPg;?c=NkN 53}NMCwM툓zD.;8pc۝pG;o8ewց8PWb:!n}5.d/̪=(pډس7~ f"ʉ҅~6xLo80ClUWAU,1}z7K۲IټM6 VY1YJ۸#k +w*ʗ9KenuK\M#M!&.%*̷r6P7%J49N1s+gfRNJ&f[`Pnx+KR0䃆即 rǚ9cLY٣͈YF!f#M^@aBde3ee2Lt ͎L3 FD @ 3c=11IF4oHDkdRCI z"oI38=X]` &QzDlc">~Z:*H D Xxj4 +\ éanrpvqژP`U6+#)ԂiYfdjc2hH" j%LW!t:,Vi%Yof,NЌh4Դi QT0J +KBA"j0`Q _;JLStZ߿k4_$[~{կ/N?5qo!!$ȥܹ C9(*"⭨x8x+ +̀:( 떻㭳Vݝt|ߦjO'|߷J2RrFOa$L$Q̟K{{7Q{g7QfFw^?ֳz{F?ۇ0p˫Q_ȯAEO7ǃH'3)`{a܏5%M~[:v!ָoKA6Z\(/iN?nf|22Üd,cUa5eF#id~"b BP$]dņ"YhĪAz3~d$-:I 5Y⠏!1 |M 4#)h@Rg#wÅcF'/ěeY=ϸyY!zN펢排gM۟v^+bf[ڧZ\mZ1P:xuPw |СRijj&Tٺ]e*+4Mn\fq n\`RjKȝ{ h(Qts)3(y]rogfw6PqN]:$%)HhafG)D쎃ϧ\lkz5E <0 F©儘SsRj>.\~+dni]>"GJ@pX?!Or0Ang(h9 x5»g4#v6԰ߥ~71sVI:Ymrbw v)(xӱ]*hё@*N+PBU*eɬL π`N{wjK#1ٳCٵ]SMиToU3R05jSeY (Ҡb:-ˊ47ixtvvn@Jk!;iPPjFغVi[WR(7-ZRhS FXuٰBC@/W-d2 jҚ* AA!+hԤE*:lB%Ftjt|eD@x)aJZ0FdN%sTyJNfry ssi9 6C2gz )/;`r!@r=˟QNc4ݪ@@)(?65efX!edd9$5I6LJ w f2-2HRl/$e8#:+'YL2.(N`&4|id8QwS +1 >JH)#$tALQth0 rQDc CƒEoAX0DIAނt"/6A>yXxwZ J0:>H򆨕0@E PQrP^'pd2/FR)'IxRbC"{bD$sB1o!2Bc ~yqQPOhQp`y·(dIM@Rb3b%") Ȕ( tIgD&ǘ:n4"YF$A4)Ð $:bـXj!ihHQ3"iX$Mo%IØ0%* +`YolA'ЪGk_C׶w\.^6Vc}f{R1Z>HjפKsuWsyC*+ ܸ](ݸy9[٩(400\hE !r QQnTC"x̠&5Ul =ݲV-U~yޚupi.QNl7ZvN 8ɡ&N(븀F%8BR1aVmu I#u''C k:Uj'KG@JݬdvlsBH}(P*]lcm~uV˭/J0ŰfgW`OByOY<`>.ozsa]HC <~dⲾld@ҁlP_Onw*&eB2qgĴRoX=Rnv7:’F;pIiVOJn[5!pz9`$ $ 74tGλ5e]<ԡE4@pBQJ@ߪ"wopR"z[TrZ/5s9i>uI+@>9-Pg9h1~qGpRXF::&: z=D!=/ uA#\g :q@O`մZo:VkjLH̪Qj#jב=*Ӈq9\iDm2Bv$b3}ި +Ljq|def[2mނU[qTYlwIYkGYPfQyfySef&.2ֶo|3@m3M7b&3\x& 0ۈ11 +0L`2D ` ftXS 0*7f#"3++IJ4 2^F+5ދ:CZ=#9%x!Wu(!S pbS>;b3ޤkBA|7aӡm8ҎeOM:}W/iyog[W ޔ{ne8o}W?>[[Ry'>|& &c{ЍNq#_|"=+vq`ؽRfOdqxu%2_( / ÝbW8EZfD/ \"_"jEТP G8{QTQB E-g {Q="|Z(?Hi -cDY"p_]oxh~TȌC-cww<귷zG*_3Xg=p~ӡv@q!nUz\Kp%=q]pGn*; i]Q.+#(ۍ6Zv)' 9촏Ž h$8ơAQ# +T=aXmu qe:''vU 9%#n`+];q[;*؇rHPll j)[9l +_ %bXAfƳ+EB'|Lަ}\6.o䐃r^`zX/0lZ $iOnw*&qgi_I:JY{Rnv7:ю8kHGYUIm@,+Z#j3?HnIni莜wkPyC!lh%r>6FɫUAZWX)%E5-Oh0R3!&紜kBmwqN?Eqqf{1QIT99USP ;FQLfI  ctwTŬɚaݸU[>U}9j NnXrd X ڜZ ؀C۬nIg)ԁ>F~g#k%`$鑶bn u`wvv@훡vZ@'}il$4١fn(TW-lPΆ4c]zh_oQu#ZǺ%mO̱l"+u, M/)O7bzui}oMzJ˽Ow^;OOK/@'w~rϟ +'OEh~<>4F~g#k%`$鑶ۆa%a sb::8I7Cړ6oe)O61Υѽ-v lIiC,Q&G:9aб.is=Ծ.i[т:֥.ic-QZ᱔4;X5T8R_ rXRF@AjJX.Xǟ6 +XRU6!ieGJm(,<(̵I*ʱB6`uXd1VgZ6V ˔egX,@R>DYi&:+d) "D|QDH1QzYc&(D2OTjX`Rxx$qapIՃ@1z .ZGI7;ĕ\Fe+ؖq,7 0czPCf!t&q $vזەm;{߷E3;# 6z9y>W5OT]|-0-<֮:9#ơC*yQjq +~kkk>ϫ3>;89^6C T}}bO#WWd^gW;=]Q +^E/Px=>>Q mQzou~y9TZX !|sF8 2KG+x|ֆ*W^ksM-`sݝ+ eUCe:Køq^WH9YmЙuwNK8%XtD۠$KY%(Uq_yX¡0bc?j> {؃;];%,c`I-V _E&6c`Q7A k$cJ +/$,̯-ixn "Ԝ_/~rf=jܙa5fϨ*e`+i.LǙZuiZ)/NMwAA|7ĀI?3a߾ $̻Ƃ&` hgF#FtHN FIA)ߞ] ?qsTzl0 ;oF(R:JG%b GSzhq֐~{9oՊ cFD(d~{!z }{!ŅfY} +M SP|#t=ܭ-SDk̛NG485^u󜺦NUy WUwyu<7Aជ?;uř嘙n搙TATA@P +(x(` n1 +:3c]ML6ڿdam~[/[>Uv~)~Ӝd[L|*,o(Je[S.K<5t8.D3rة,{_RV*Ñ4,Ý]`|c2˱\f$$PY 5f"NR1SҩD :Uv쾓ݻrN}U?W}U?i<~3{ wn`\q*:ejnO^>7_YN!5^VGӰ]޾S'E8.Vu#8* UD UdXހD$g^ 힇ru<{Dƨg'Auh[*>Ulܯ^9هe$EOBJ + 1x{+lbOzX-Mo6|yctll|t}#k8y t!XrkW.V%*ؚ?]\ɳrOYV}|> oG@ kE}gCnܝ Yy;/-12oeprwqV;Y򠓓4طik|ݎлJɝ@rS +ݡQ!nQzN+@:5q +qT;~B-BÃ\mB.G]:x4\8n#;ͣAZ$`עtsGbd0bm4D@4xQހ(\aG(`blZ=Xc76ֳ@(Xe+0` + DPyzD~zi bUn4hR}P[$t cZBbD|rF1bKF<9QXfkt`h X0SωqekesAdk]Ĭ,5bNhf!{F$D䚮F޹.FdE"2S24j4-IOOpғa.mj$ 4G-Jq!ٮB9"eScl*ӪrX2gaQJ,[%YyRdV$9C+ 锉qɱ8>DX9'nB[`f7ќqF Cl=.Z +a1Q2AZTFJj VddxGD**<T!p":14@GIdRYTD"pD +&3aaa'7!3f P=" :ڝ}qi 4Вm&qb;p~JK&qw7B~Mj3uTľ$1jnpS'OF3?}"+먈}Ah%%B~HCIax:2,o`2I<|(x?(g2)^?X/M o_ɿ+n`'NЗA.x'{;7ggRITƔXjJͲ(5LBe'#2 T&gڜ~X?- sTw;퓨lG,c˶IIsC\VW%fkrY45̚dSC +[{6}C}7|۬![~N[&> ޾ঀE\ø*J*pEe(q.z|~ݻn1!|n.: q)wFi./甀P8.Vu 8 +%NF#W'N__3CJO/렀P$cP4T lBaއ|u@V6.K}wv*He6 +Ê}XƃtEOBJ +N}>EaNMw:aVr+&d%G`dhA$+#2$Haku >?\9s/3LmՖoկsT On$<hHDa'}ЏÒs/:pҊcNX1'-L 3UqETMKUfVBcvJܹ‡UXo9{F8sNJPӇ,Sl̉mr+Ē|pj~RRPUbcp|>|j\EUe+tt> e,"bVRY@1E>LIj_bEȞ|γ +>]6> Sc؝H0,+0B(ȰPaPeh䧛v+BfvT`3Io0:+ғ̢2M3a[՛c< u)qol1&NR7k"lMH2Ƌ*>ړ&E{1<(Oz367b7dhbzAz>46|` DExZa$ 7e=8-2@ܹ.j "V _m$Ye `L +#'tQag=TUy KT+oY#`weA:@-=@ZeЩTA~H ͣU,P/M"w!ƂӖW+-(,?`?4χ4pXUOY}Lb,ުE#T y2#AqCZ%nN'wi2F#ŨYe +&çP)URBPwHT(q +)#p&ofF*~G΁p,pdT&R[W{ b׿'Ìz.]<_-2 +07F1>Jt{\I)b7 8sor~XA? +͏ϖ1z?98"gD_]Nd۷K~jww"'vA O t q +мz_C?A/jMygˇ]k^>׼4/4 5'Cf?n02%YE +,bD$" +~Z* +ك%v`dM0W&h$<(PWJHS};grm"]}m ~H4|bId]fu[+(/^zgrU=|wC7G8{*9>pK$bblG*q}3pbv7pM@4넉@::N]vr\_+e,iZMkF>k.MNN,i)fPKx>^{`v Ms"Ņ8'lȲ9CqW:1R:p9z +8)qc㼅@vOQG9Lqm)(5yP.`?4e0#eRdp >܎g7{o? A0Ÿ'7v_߁4XtHÁP>M<03uo6UuB@2#nNאt.ېLwҐ{H*L2mw`iOIJ"Km qq-I/C1;.6qAHmلKղAGqí1@t:N܈?8r1B?vdCh(:H~Eã#p:i:@V( F=ToS0S|r}ws)qz<8ڙx+;k:.p">0!LYE% ]1#(DI JZLXueEv { ޖwy^些1UWOjLhQCwA9یh|04ۍ,n31FNCG:,(mVpj1+nAZV+BCe`g쭯ق7}&:C[iM69EB5zm"zXg ~'(CZ9;ZMIj"3$88Ghp 4W@I1eb5 ܝ]p*ݔ8 %$+.)w>w@ *퐊< +璐<49CyTrTMН@٤-:J10"(.(ȤXQ;LpPn9D(@$afAh琸o##{ I$3Pnrh &$ wn {Ӭ=,ݩf+ٵbledyiim- t_obS[ [S̐-Lm(i qQČmH6IZKI6utpA.Ѩhmw~| Xv6%!  1V 1zXQZ bVVE{ g\Y+)©CW)p᡾(,x/ I +]P2,,j%ZdiVӉ!dBV"-%-vqYQA\Eh}@ wCX1 ,; ?[ PZl "MH +QD~E7뫆t>bjŵ(IB0801 <hpg DjPjqyjȕ]wˇہTP3 h}]z?@ꊆJ`;N_WA|A$WGɼv]?~B֋ߌһUX'a3||[|_Go0参x9Ke=\L[{ T`sў>q~0J>}1^vjF Qժ5!hUlH*."+n+:,+146;uw*ܺY;;y'Vj~S;;5~558ɩS3=ɪuݻ.Ud\R3#%)Hw^kB(%༤a!y0(55P1}A%"=tCff1J]N"hR2Ef黠2d448A:ZPק^D W{P%R\FA'&Jż;"c~R)`ds[Iѯo1n@| h<$yx#quF#ü/1=AϬCz1~NA~quWA8{yK= dd?fFvH4Юφy +95eǽR`&P݁lgl臤b'ub:ї}#eԫo "4:栿()H WtO9ygD\|BḀ j0րZycPRPh!CEYF?C}PIk'u~]=z\A$ݠrL0*/0z܄] Ă]8jF:$;8kQv;{S3v搑a1p9;{؂V)ANB 6<}VMз*8DJprd]4NJұ6I;"4qt%8&;-IR ;@@z {hi[ān;4"ETl߷FE!3.;ڵFڹ`g(; d2}}uAuҰdk-k k ݫoe0ȦH +iauu.:) PG;- ֶy$hM+bRV:Y[p@V,H-4gY3%/Ad[R5dI &SHl RKAklj4T$5VZa6H}R7-7XJM6&kTZ +?3Ry,/@ʊ͐yE2"&ȜoB*3&TdY3 zH(c>ru`fڹ,CY:'S;2t';MWtL ):tWh@i.`zr('5I II j<%A+ x5 %ƅh0g)!&A5(5,ZE"C*,:RLdEEp"U<0#E_ NHIvJ6e%4>ll5c Ba1`1f2` e8O $LBHIBQJBbG+vA] uUVv{c_yg';I{'s7gT +\QE>)dD0H.!2BQ8DJ%RD"H13% #DbB!^"  /8"BNpp`^x(ނ d _;8y +?t譪>L9a;23@Sf@~{ѯ~mOGŕvPB6/\C-_u?оz,oOdz/:[Y9-m[XxWfg-qkgGҌ;b:ER]㨮`VS'{բQimkLبwܽ^.=H\XA-؈x$#ъٓ6 nK I +2l5r5ΎO߷tg7||uJMK/o]alr53.ou]B?#i _D9Uuٛu. ?{hűj9G=c r؏C8GEsݚۜծ[|zǏ*a;vx&;m|+][،ɏe,oYJҶfX΋*R"+ocJQ `,iX +ח>SieEOrZX Z)e|J%-,3=y0: 4gH񠂛 q)?5)l:ɿq5FޤFV~S}^a޼=Gĝ=_kT +l4JtQhx䐫.9ȗ2P.+!+|pP释߽JtF0թ \p08S珆8_tj_8H̡8:F0N'NS'sD:GƣN@㻵nvirtҸ jةsd~F|dRtdm: l5@mt`ΧZo _eO{7l0r$_Zo5&rWizȑ Hci{فUIֵ-k_%l^mt@ݦUFOX $0Ln5+3AVD@~YdR܈ZSY]fZbrTOO# (5ȕ%Fo"&e"۲Ft!&H|ěy֒z_HPG(IKf3wtɂzu4o2w2ƿS̚P +Afh!'k <ڀLMԹMв|ZqHXzQ#Kh Ԑ0* iH-2nD;<ḭ02ox4@rU9J0Fd ó9[] .de( ee t%,->T*#U'QRHCCpKM +e !)2d+%N}JIL1PbBSHdA1,VJ$HzEGIh> +EĈ +aEGJ98#EE"MIVA dKqA'גn^#$v&\;{VUO*R)BR(pG) dBE|B)H ̔ 1 zD"<3pBDDB;B~y E x 6 d ,m+ `oC#麬#>P=OEn玬>C> PW&ZGF^ۋ?ů鿗/~qmCkH@>Яփ;~ t>'ȽzM{ng Z~g<}gP03'}~d㑅zG{z{~RHwKJH~Lw AT+~aL+PYlӉM8^Z0D)rlTb 6l,Ŋ-E3}11<HKg1{vˉEw WSi`H% Z*#b%"kŎ*UDIQ@JQ"ŊXPsvg2:߲7fsިZ14"ZۥQ9`jxBd(gSS@<Gh&y anr9ՕF#w*pambxW<]*|!q|OR%OIIRXW``NΟ|977/>  k9DOY淘$Pޖe'bRo"_X>epWw^߹vbQ3ij-FRyZ0@d651P0:dUWj ,Ic?5`UfC_륫4{t"Y NK . v4Ƥ<X2i<[f9Sj6ӌ4)'f'0YMwa5`c180F-~"J 4 +z5*0* +Q ʀ R)̣|mt{{sRd{^ +!}Q/CAX<J\!  jʶ|6HIjlVt_!= ѤBR(?$R`){pP)Iv$II&v,x$*HBVUQAQQv\@d_D]pAgqі`9NO22UUWTA33{·{TY2%$ok[ JoeӒ341~G\J]\m3z-xlS+ZSFkՂZD]w!Zt=z\mҳ1Sr(t7ui*jd #YoB.YJ`gF.Ԛ8j 7ᬅQc+qpP!mV3A**ulJ +r&B\S̆65Jp Fb Td-hM!N!0)gqAUy6 TG8<Ơfl )%xXYɡ0qWzpmd,RMbEYl9f%;$?(/pa&!'₲بN8O:tt9{) Y-c7]8Nt`omAn¶؞6A7Y3Ю6t+dW#ٚj-KB6'[ 6!L<)IO4[9i,%'X >7CR=$()Έ%ś!q&5FIV JXe!1akW/ZYLY_ʥȊ%z7cuzd`K!Kbt -1@ba 9@ U tGIqc̝DPµ"#9A44+ԗGD +f $,P AB 3}9!>HL>%-01sK̂$teqE| ܊YPUnl1!Ta6Xrrrр2Pz N!7JQ: jFQ|r0T莁 S A&(J<)y(\[/o^M㕗O%TS}R0vQ@Cdި}VQiBLeӯ.7Xп]4IKybAj] ?1ſFNٵx?2{M92Oʛ&Sq}9a}sO#'i'o6w!O"4R~(^=q!cY,5,q J)2$I8硚x0]};B?=M={}_= CvxBT!i2ŊHwtk lYD,6$BJ  +Yɇ,8LP7 ,0kI@,60X6? @([1o|Ypya͎ YدQlމWn 1J]cGxtSd ЮS35 =lɨ-&PAEv"\\!Ogə|\PUM0U($)ϵ0jGr*Xy.cg :+$.)aY$8Ċ)< r)8JNɩ#vH~&)*/f!aߢ88B"tiRDz^X H"vb5Mٸ0ɺOMLv7ʞ{9s'>>ysa6X:VXMf dJ7Z(ۺҥ V5| V +h8RCҚ\$*R:4VYHN fD} $X& VSbFT5E(~UQ^hTQ`DeFDiQg1*dWH+2iYFD +"?d+7]Gf9zDvΥ˵XY@Xe:$-'jԈ- "9^ )N%ƪŠbԈh"![|F-.bTaQJx"֒pKUv 0bQ+l2!ۃ%e5'J8EB$,HlؑAHȬz tbBz-iD4Z-R| Z!䤒 +B.#d2&R1!IT00 "1C$zC(" E0!0{-XϮrg}>w hԿhnT/8ŏ٪ߧxxoq c׏1.$q0 8zw8I3Qmjm{Eɵzz+=kbNpu:q+j=+lʗvg.B~}#cԯ@B +P:Bμ!z٩wؓ;8 ~|"ۤbNy *jGr[6; R&Pw! Cf^Ͼ5{<&M~J:uUºH~J{Bp[0/* ],ӏ@[4.'RC⃂x>o4@^o{rXG@/\3DH}sofzϓk=Onls\5jmZmuzr.p Ό_.8qJs;r6vvm3M6i'NAsr N|%;#0{zl6Q(q`vC]3q6L ^':@v%ݰΙݬ.X-N'v pb;F?NA vVMXmzYoub 816ucltuFˉ PtRbt0hX[uZFӣ`k}O)mVXÃ-Ͱka`FeQ7qI'ꩬRǨw k`_T3Xhw3*XbTR9X/gUߜ)CI+4RթB/O9ϒǒ +}S8 %a+ F`7Wc/gş匎rG2 +FM?Kو\ ((#r +1r3B!9ꨒӕ!5QavDゖ{!v&fq=֙:abxV|栞">ޯڧcY=``щQʓ7N Ā q|12`p Fb.{LcXC cLC;qtvqvnM,$}l3#,}H +1ʐP{-OVd`kfUBl7XlGE۾Dw +Xϳvt{RԺdo !VNOĶnEvXv ju=33:OĖַyF[-VOĆ+Rj "7,VF `k Y`[SoHȷ`%`[jHZsTEJafErj0Ka&*+3cՖ3XMQ]lBUEfDySEoByDIVs l]J#0gy+ Lzta@i:V.bejbEEOd&2D:HXZV[A.S#R4x8DcFzzJQ#U(nD\Tk?Sgf澘{@$ +x}+ +"*(b Q1f[Xk7dn~ؿd}{{4UYU~yޞk zQ9:Il-  kc"raH S-ȟ">$ 8(ϣ3*Ax$M `iJܓJ Hp'+%SgT#59ZP D%:HN(I٭T[a,Dk4['qZLGARpL\ct:Tak0I:5.i4(DV@T*O"HA8I0=#p0 =1 +DP" +~"ɄP2sdaH\ƑpCDJ^Mr̿~Sd-ufW2(9;җ'9E$fC%~soЉJE=zOb< 9gfk"?sei| O35b!:0w|j*G^IMźG%ܢKTSTv>Ŀ}îlES d\.@>2kA^(9)L "DYK˔2^sBo.F +>0CKG +|iH; F +HO6I 陴+B7&!Af=iϘ85͝9ypfs~u P +T֜{@%eIG# hlGO)  О퍀 $׋ΊdQR zQ9:Il-艠_~-xw89YZV0 $PF?CCdԂyUQ2=j/íq/aH +NS >"-E)@%*59$)-KrR$e'$MV*-l"UBD2 `c1A:0hq^IҩQ9H +J%)T*x\F#I%$(RNL@t pp@q aQ(Hr9/qd2!bA2 Y,9-j"]>!=T iiBKDp(6@+Ăub$ [{w&𾓙s=g}f:b &)[-<2?X~Rjc-x5fX1{;M@EǀA~݄zX;^\O~|2/:&ռ_;Uܾ!>/{b}4^w߃ +vLVn1MϤ%jH$YD) HɄi4HlS8UbÌW( Ăqƪ3Tp(G&s;"P&;ڀ5jĬ B:%J>5ayE[ihWZL Sƌ+oޘ\%l7+lwwi}~Z/?ni,~rvz; y +zz\\!Qep.ςwotbmw8Y"g@ = ES^Ԓ8ok@m=8Fk[Q#T8LfSE$zH6[>o<؋ڂn8-6e$J=Evۡȃ$ +q +<'5 v$zk;`8[@ol ~ 5@ϮBV=m^o&5CVcr7VYqeNG(a9u+pAYd2e-d~lwYdكK_ppX$0= +Xq,f!(;1K00WkLw@a2kSq"sWbH1l_ʼrDBZ̬;,\vBāxX‚A.TIa KY$LCR3s`ęns~ZOgUFRK9힜}|lĎ-uBVuܽ2pܭ]2 P`Pspd;(Q*/Ra ޝ +{ + + +< p̽p*N;I)J+Fd҃@HV[E[́R1p +6(sN;r!y땐(9*m]#'nmYl^%lZtڸRaoȑ] >[n.K6bkZF+Ud.V. -sr eHv*,+MLA. ,YY1?>\8[4o̟7C^dWRȜ/%qfOib)gFPJZ/D1GM"$'qx@4u8XEPB/;"ěX]\%J9җ,Qkrb}1,P !kCLXcy1UWx"}x?aq#geB5p,b?w֘Q{;L0No{F@7=?3etsN"8@NO?XzP/kNj;Ruh>_^=p:5?}I_ߔĪ̓%#^I2̀ Fhp5 F,*9VׁP$ѠF&GP%#tcu9,|JIC3=3 +5 慎v &{Ѣ߱Va*j`DD}|dcN>iQ\fkm*oZ!jaO[Ӯ{vngg傮ƒ޻E; ¾6b]}uvM +:}?EaL q!MI"u1HI QH(  " `ZvnwyνΧ3}޷fA?FrB\Rz8\)]ʴ. + J͢:SJӔ6= C L3MJ4jZu=eu8i1.p8qP3,3)ZjĨi(*cq(8A1m"ד@!F%խc@>}ޒ\ 8,x>H6K{z H͏ R))HMLH$=J%>)Iˎ$>|&&.a],ݿ +.s0,nNԝ. !A fvQLg}@T;6`%lS'z!l[>UZ۷ˣǙ?%^$;,Hv f5ڎP:$w6+T]T0& J 7m 1bkQv[&1hobdk vz{F;zlz;']+}ɁUW=Krr:҉΋Tu^訕 am9)Z9uD4rFɪ鴂]X`pJNSO*.Wu꫕˧RwRi qRE +%s +Ce*R%B?3 DwDĨXS}\b'TU*VJ1'DEjUV,WS+qBU!g+9EYJLCXd(t^^*VA%(MVd'W,눂UfRANxGTB+Jqvh9")JR #:GDaGDl"#"G +Gpԋ~9 Gc.n[_a/d4v=lBw_"ڽSF_þ.D/ vh[%Rd붠I9m `l JQezltl2 + aZ + +%zm61|aV?K,_ a+_+:K, :_OeVz>7|h6ʯ(j}lDzêMq jz˫_#~y*V"~~JK1`xO|H>ԟ?jC8nI"y7ᱳŻ.ox8h7w}miXs\W,*Hyo3c p")x^*Vo'W/k o oo#9y}y~k@wE@O7$,\1^'oQ3xz=L\\x\@_"&D[U3Z/{& UjfGN7^pf y{R{g(3S]Tk&C0 zq*ju,5҅nLk UQwe :0aiJfʡvMJ4jDV]2:Kj銴 .p8qP3,-j0N2SJ 8bE`sC'B@[`Y/'(SkRޒ\ 8]N1DlY7a tԹaX*%s) 'CIǃD iّG:GO`O'6A/,fM]$,޵aJn;]@8C1g:0 J}`_T;e/m=@dND>ٶ94|.oGO3K";,Hv f5ڮ'uHlBJصK#mpP˿؛(; ,r*\xʡ( ( ^*@3Imcmlli=Ҙ}tfoݙݚi=χ.z;9;'snj.goF{H#=l7ctU2AftqNuJ0q"j,D;Ol0I0F[@!Ijq$p !+pջBk&RTW#!@| $D$i\ۀ}\aCu{IPBjԙ?`s\.\0Aq7wnͻ_?;9dj`2*u|Ɇ!Y!鑲hY\x,>*g,>Cg82{,1 'Cf,?6'toBLߜ0el;&K-Y!_-OFbb#|SsWݹ2HՋ{h#{&c/5|{R7/ 7γoc5:OscaD‡gQ=u:#aU7q4) '9N'PB}z} k>qL8FB;Y] N nAhƩ**ƯJ8|©ōf&  (;&#PWB5{8ѪPU6~rۓ|([RUda;%[^dq|a;E/p +gmA(;_Tx_!g‚#(G Yy__q~&֦[gY liN6XYߜ\O8e}6ėΗP' '5bfe^`ڏJze`%+.}ȸұ̒S'*إ@R8,AD?B_t\+_<ߧ;;v ;cGsnjHz&MLFz H 8B߇{L2AftqNuJ:a jQ Z$Vh#T|V01TjV!8~u8BOi!5S@w)]墳D$i\ۀ}F=qXP%^5!yhj +Vsm״XC%-WТS.P6nj(2P4^YJ!UEo]$vQD I>\ mV@m'[4J5CkN-vRH^I[.7k%N}?7qq_m򪬚U]$ٖ 6b ^ {LC @H \nnBrSnw];g+ѣ[FD1,b or48T~4Y1S&ȀKc"f]a}C"#RI* }XX9wIPJ +2Tg A Kɰ`Ukw&WAtH  cԓ9Rv%+]Ge1]OGdp(Oq@ $ͧ%^K"0) <<5Y,MKJrQ1ZNiT఑Q1$Z YHIV3L,őFd ɨӨ@z=LSCFFΡ(-%i +H~ p  4NpQ4jP$*J-J( +E*XOzғuJ4n }iY] MVt(9]Q(*)X?Y ;in +9g>c,T*K(CYX`"?ÃTߗҰd/?% Ê~eFtcӆmi}vuww>˝5/?o]qӲ+5/n_^~rmۭw.v؎tႄf!逜qfH8-rRPXuhDhq[[dmqᰄCRִna2Vv؅SlE -olE"aZMbK?(F2IX[,mMV/jZigV-xr\pRn-鴘7ɕ(s-U=eÏyxZxs%Tl&Y!Ga ;wH9{ +;`9dm0'yۺg={e8Ȧ=v%vbw"7QNvD4qv.!Ev(u;mCnutd+[mqAmv~b:EuTؾMh=5nC%sK֎.nun۶ pGl]BHڲ-ؼM+2<+1,wy eOܪ",@V/tw˪nz|ҊyNdsǴ| YZX2ţW:AtlnȢ.I g9 *q?Ӽ.z.7Q;̙fMuҕSH'ۑhVRQf̚(sBfNr@MCNHCOLgM|/eclIG6~d"d[3 +="FlE9e@>4M g kaEh` 2,R~YhbX+ȈTRhJB&H"Vh]`糒B1HP(EF20(x pgzyzH0Kɐ>L=!eg0QuXfůtDׁ@|Z T-#ɛSqKݴ$%8Iˡ8ƑHE8CPd5jDbYhԨM: +t:5aTJa4*AK(;Z' :J ' 2 8N;OCEZERDQP(P'=9*L); +{GFP[*Lq_^j"]> $I +Q뺺6AqP,4UAt]JYwU?rg;Ϲs'ϼ߷xDEBOP;㿨q9~}Hɘ;b(E{x=6$lm"zE: e4QC~$fEm .xI~^8u#G~֋{L7 ׏t لu7z ,®uYɈh0 m l<)/-$"f@Yv`"`+a QA!3#1&+c6 ze7Lh z2hBC=jDf#;*8I +2xzقV ;4܂ؓWݯ(9\SsAm^G]EbGG2;VfuU8s?ns'♤F9w +cPJ~we\yS("l+qv"9I7;w =38NrQGz:A*[ ~C> r(mhɦ` v중ގ!ؾqemִ Z_@x.'jae кO%YCAՄ4V,o^PpYV_l(IRPtP4GW Kre1Ed.-tYR‡-(d s.Kf 2^ мnwMg[[<0h7N)LHU4vӬۅg)tlE#Dɹq^ƻyNqoRZ7y7e.zҵB 쬌^[]((ܪʡ3;k@*=*rbbQVZ_k?vBB|E9ꃰύp8ş/#?/y i>AA;G:(i;,sMNaW t*2&~GW}mѴ;6ZlR:z[FkZ"h$EHz[F{sCھʶO,n"m٨}N$h31}+d5E-}EdE%bZS5!B%]DZY.Q +Zmv eM ++bSx+I&[LBX;+)A +HHRr$$@)xB" )hJR'1r~ +_'2b +sg >rGpv@cx9Dޞoia-1H)z @ɠs26]j4+ZnbTq`% M*Iڻ8!*I()0''{\.#B!A RA""2e b&eIXH$=I(A"V eoo@ gUv(}>r xv0sߞB=/Iֻuf?_߭Ee Qy5>@أo`6/7)6qʹ׹P빕8({j3D|Ǚ/O!ěկOa/RI˷ +<^{c 7p~~X/.7p~]ʹc8ߐ?=Za吗h(/f<#u@!zSǞ8ʺ\%Y<@`+/ۍ-C|B<څz +¼WVBxA@O/۝O[Ekxĝkk(>^D -}#χœ*Hhά㹔$o*ˡDfr$f-K23((t:gi tK=BA&9(HN +)*;De"!I$#rHO$Yiy Y'xNf}$~|XfIm";-ěy3HB?G@Z0'f^hfέ&H3dGm66b7X7ldzD65@6}׆OgYFa}+#= f?Н'47ǫL~Rpspg6[.nun"VEhUQn:Xa27:AQZQaHT :DXa!Z` +lDCԢBhp%-VA(W?%$w!VB|\_o˕RBu<0 +XVH+0r. s #:Yɀ0d3:V+iNU]@j5LAJ4e4 \qWx!tDgEP;P(pfRpJS2 (\8SRPIz_\$ X`ϙ_ ]2Juf+r_tb3nME _믓eoɥZg~#n S5~FOBXo[q<-S Ao! ׁj^? +M}]Pߍ/i~?i>7 R?޸O<>RO_+'EݹTTUlzK})ibO2_i$+ H<$bIO$*0DGKH}u O\%gI$oF~? $2 QS+Νi{坫/n]'F_}^/\+.9PŢN\pщ |Jn8D?dv-FgrNq8D.NPi7:ɟth"ى&>yS7s'@ Nr^@ɱZ'=qQŕl'8*AYT8DcecR\D"B|f >uv׏y6~z-+Lgz .0(OWpJ|4hb8p }>'@+D.'x(Km_$ݻrs]vE_<`cݳ\q;v~y6[=v[may7͵c]썮lޱitZܵFƺ.FtHGt }|V6ܭFTN BS wk!C]pZ^W;& ky i`g73+a:Np[ j3 Z܅5! v(s-Y&f#dht8`a27:SgBh(YZBTWjHg^ebu4 Uyi$ HK%9/8 i*'h&!m4!@B bAQ ]l(m XWޮeU`no+Df27{|?|?<rz{u$ҢZZ8\cP +UxC ܊l@m+jKIĆ xU1TH,+P1ϱeEQ)m +Y-sfG(=NϚjB*`fDŽϘ?ɈO&4L)M0sD`;9OnD ^=RN4^0Ƨ|҈2S): C`^KwhJ4[JM$iOR+= ZAnVAJWH Sj\qj !6@j .F9Y1Q*uPciHհuB<1vI*9pAv + fX$ͬ ``1)( d 4#2A\^#piF#jBM" W)C S*%!)0%=q.JPrwr"RD"#EKXXJ>C>C#I}DߝO";$ZpHoL?fm^daM/AhQi M?\? ?> IePo脼yz4Л#І'!9c׿}Q/PW}}(C^>^1Ʃ_EȈy7_ƨzP|ԽzGqizE^Qu1H[%O Bc`/iS!  (kXǂ8p=(kbe @݋'Yy=?Bh@ڎ-AlAhc,m]eg3¦6a=:~kX#e.s^M[gc۴+je,| c9!-or-Eiz|}1"G 9^ZjSCZ#_Wݍu}. |y ]VJZo3*9G+G(U|vgŴ_AhP?==cO)$lBFYZʼ;'h3=:DQtԐ;^(H9{6V~*vZ/yR+ѩP)yR/ѩn$Gޡ_;e;ߵziWO).o_9fRtĺ|$"Pn)p +?lt OYyu 9`*k 0VRP^c!6.k$p|mD miNB$ C[n;8`ٱ4|& |{vm@wh=kIk;uΠvuh[y_Jg=mS:ߴ܉q# -a[nfS`";X.hE3Ժ,o"eMVKgi9`I=:iQ q-O +j Tm Xe*I†T_nEv\ue6 +ԕ@$PSbj_gEgX|(+Jl3The̲mn3<"E&pZDf|TR3<&|IF|:5Qd§F MhH8oڦ@ !tH +wg b (*Jw@P9ATW݄ ,՛;3g$̄ ۉPPD +(*$8 dx<>5[}>`g ##KY GEsܻ\};ZoVm]ic]a E-b.X% ہTBFI7}MRxKcF)*&3wF'(ɉހ%(eTX%h/@U)N(\,^8Y¢pr2(KTd 3EQa2P!2FAr!Yh 2@R@C(!t1<  oo!RB)2L.d|Tb*cxBn#{H5dC>߄}$d HD[R۵ϛn\py;WZnlng+-.ԲQ qBqKPȊoβ$30 d}P[eTzWTgpt 3)h*di + HXhi `P9gOYMoy̚ݳs|yo* Xmbph&/P2$F4`ԓJpӰ :xn p N`Pq hr0^QaU*\('T??F:77 ++}qdI1K;H$R=;¤l8I\H)]?2 zX6=LҞgN LLt$1Su kdI ItI__` ĒS{^AQnH f =މ?ցovn2 F£o]-Q z6#<[]RHHp`?.# HrN#>iƣ6'TGS8̥@luFZZQ&.6ҬXBܨPARRqFͪ^-΢:ϸbuVhSF׹q+,-'ԨVmcVǴ"G 5nꫵ+r hUiYp:Yh)'5ȼscuL˪qTUMQ]Aa)r:\bUZ| <ߍUYq(WCEhXdi4jDQR1*HWAOӘKUc\;X58HdWI*TZ`q] +Ū)1%'E#DƝ ++qB$S"qQ邊PQb(wؾJ].fډܡ@D|EsϜMԉF!kND¾ v(Xms"i~d%}EFő}}marʰHE[[B'捎F6X"‚@%$h@) (FA~XAkXs3ƞ:wb-eX-x!oO #/[JbnUZ1#wM-Yi\%J̣sU(jЄR! x.BF +'\ǒx6RBg%YP6;;k+<D`O$bP, 0b' B@  V>Z/>Az{{zFUU{. +XB޿ˇGXu]wW+>Z ϰ֔Fz;džOO:po wk w!1n2:@|>{Wp T/Y{&aHK"]& w)w:as ;Fm0ZphM@aI# R9g108M*+ 9EWl@88ZctE t`ƨbP 0X…r")ceK͍ҕ徸])rI!DŠfώ)2 Cp2f\HM"fXV@V~03}z'#iF X:TX ]7׍<9@Hf2Q) U  +]<,ˤ8X A/CJNwn?]݋;=( v.ADDQxu "ۍbo7"G{Ѯ}!E=*PfہG&[]RHHpdle4! u9;I<7hsBy>eq/`\ +7[Vy 4;4+5P.7*0fmPT;D<$3 !$TؕA޻ P]׮{ݻ]@޳g9ۿf2w }n*h3h +Qq,rPYӉ!Z8oF +ȃDXFBɃ"qGB<^ia)h]iN rsSKhPjqR;;񹸀*-N{v EI!R4Q(rpP|r8@ޞ;;;{ V06660Fi>ͧ4c'gɘ;962ذaV9&mt&"Կ~o$Kq+_.9[|S!nr9k2ֻ'Vs壟!~p~$q tPfq@ KŸX%3L='@ P@y\'| *)?/jܛz̒ŬWcƖ~6Hb,Hw帯KT/ T_z0Xf,@Ko1? >4_:T8A~3UHtjuKPb+ +هlWy;ل-eA {xVZ`F猀Y%[ _- 4z=d:\.?׷gh-/4Lܸ:uz3*_,E$|Fi8#tݝk4L䣻"Kk?8u0ywQtE"DC8*O‘i3SpPjs%+Q5yn:UN[BD;_6FųQVV-!E4R6}NNZ7k JQsWWnRFJ\5)UȝRH;X9&_=~A(/ۋ|\ʢ$ϲ;r>g'-Ât&3|/$Og|i_1I—id/N1MJ2A`Lʽ&O$p,#P%;n F`%<̈y5q}gcOQ^:ɯqqӐj9aW jkCЎJ?Kqu@ͺ6\rS\0s+n \ׂ4~GvYKu>=CirO'Qw9sX9}HaʩtC؏"DJb>^ {0@5Cqwc8hiNd&G:n'E2"i0shVi&YMĜFJԞRRW=Cq:H<ew-QCڪ)Q5j#TJ\NIj*3[c)j(!9u%FQՅBUT|SGJs +PLq6UC;LE'L~n&/hn*A;dAYI 3w9',T n7RaxGIӃb1Nb(Uⷀ6%ј: fktuP[jtm;a֯v" vƉ\a &Lcfu*"7;ĕ\iFHܻ-cH̀1`z14bY&& e7읱$;3fΣs̈*Tk $ddg>|rFxMAٙFAVKgizʗjM3P,VF>Dz2+/H $="5QJ`QzDRLg 8-^R|GhXf$EhIAY.31rBV*]-h5eAͤ:#L&l$eb5*bY5BWE5j@Ӓ~@ZFK14IS|300HA$|iHh0Qհ`T*Z((J(3 B-Pw +ZJZϔ\( +HGD]h"=V 3?S'?̎ !; ,zrevf_w>(kם#C po>ī02LQLR^>HEO񊈟G w>-xw{量SxёAfS{Dmx/S@?ee韵g޷ q/??oK?v4x+{Ig] +^v՝8뻉޶݋6Y}zɾN6to:oOcnn[}W#jU$_zY_T*ʻ^"< BlïVBV,zpi9he X.Tl Ku,{"p`ny- 絟_39g } t_f:=2 )ߝ~{W͉"lz@ߎæLf^qǦl2hIӯL vl&RǛrq_7R/(7zcQ.F:969:wĮpS]j2h5KM&a#RڄuшZ$BIp|hQ Ӵ4 : : G;d!|t(-:SBN9`Ot|pPv6Y{첎1"4yCϜvbrҰƝxPk jx/Vuhqpk@ls-NVtoKV7w aov3M0mbwڍ.*gPmG֧]amtBAֹs̃^2m]FlYBlZ햵yM4bjfQ]BTD3+=XW%wU܆enrWкrK݈5K\"n.Y9Eܲ*+8+w sQ>b'֒2v[<)kl4΂KNf^kt;v3́(jG)FMu"f;t~Z^GfX3&;d 1}1mLoE Icl2FFaeƎ3<2,"Q̨#>| 6PQ̈aX߷{fćE1 5AA +9-h6l 困tQ14CY +s͂!9l,#^SP_ȣ`9>)(;(0 |,7MOR i*3HhXz2H1P%IXJC%x=")AK&3]PBC/)>V#bo,փq3] ,CpF9!+.EIIfRX&Fm6@2`@׫"5i?i-)bER$ُ >4$AQ4jX0*J-JQJ%T`2BR?eB##Ţտ;D|M24j( n 6@l(A,+vD.]ko]mrH|afB{|N>{ɛ>h}LVNܛCT< ';`=])fB׭<$Ӟui=ɴg])4D=<}yzgh +<]{.Nuaw @80;I0,܎-o?@r>0.݌.ވ!r<^;zr#/#y>5{(U+dј ņ 2 Yl2#S"^or`1X݊9b ,ޡâ"Xń%$``Kand ZD>dpj-q4{Y-X i{-46[ioMF=S2`㈶K Js.oyl|[߷t|sǫ=G燓/.}P-F*;j:۫{rC+#vÁ*oAJυUKL [饵ph^4sbwM +.F;Y쀭6[dδgyׅ˽o8lF lz(٬[Vg zdSǢ6U%6UxXTE*rr3xN3:EYPwOdh aE]bO P +n- +nsXL׎΁ͺ:+GfQfLס|t?%M`ӿMɻ/2)co6,rKVnG3lϴK{ԋ͓`9{(! ?nZ&qSΡ :2&^䳍3crN7~ujzDɑZUȹp :٬S{T">'w+yhRz}$}( ]Z؉Aj۩ZĎѝ:NwdJP:m zġZ-z[t z^6 RhiInC 34P70M&鞍k &i6"v'gךkH5&ĶzzٶDZG ym5#6ס%eSDl4j"Z_e⴮[I"֬ H +sO} eʹIVuL2¯̫v_"YJRp^D3$̫bV<|3eIl A`~i1@*kB,)"HBmQ1$bS? f2 f3My3^3 FMQAVOk ;gO?RA4~|gH J5DgG*t5i* 5bD + UMLQp+i +?ߎ{JT^Ku*Iq)$ϝ%'Lc劗K\p^pI#UbG$Ć񊏑#N sD"刘(8:2U],J[eL"BY&YI!b>`& Ap!( b?B/3$t8O!BV)BàPjRB4 Z%H0D#T"^0a0&\, C(Pq@dR.RVbJvR&D,_Db"0c,Oppps@k~A-Eh^B AXo1hˇ#5aQo݋7A5TϽi3O*+Y(i=ɴg]nN9ՙwP=S  {!s:*| 4H ),o9ީnƽ F܌?r=R5{(UUl2|BIQS8:JkT K0Fa8eK⌱`’#EE*h5eÒv,lI+heŒm1>jm$@!X@zKi콬e\+l.,ۗfHjLLL]*RbPzUXQvO%޿ ;ξr99}wCGp%g? K=!ݝ7kQ?vNq|^{wK^tΌaT_Ⅹ~B)|~8W37wjfQqˢCNPdv$?p(%cfN(l,JLH@z~BS>\O*C +(io2(IO݉G] lRb @HLQHDbȽ*3(jZnW ߣܭإX;aqZAႴ+]_:3`n#Oxs9'm23Ϝl c_lq>LLd[YYdkdK L&'`RX#)4ЁFP3r ;Blw0 ;҂HiAD!؊-y!mC|7YŀD v0O[u6Hk=8et!yI,zlhZ)IMB4*LQjQJhj،J1iJN"PŬ\d"k Ʉ rG<N"^h;;k& )¤BDIŘI$I()"P(H( %@5.+++kfY1j |> +[>էTw]5$+"C/|OH<_sxV.?o:^gaLq <{od\0 5gpgcO@\0\ m6*؏s4߃*/r +ϯnj~=߰:h}Wg?? 鉻T0Heoxct~O:j/t΃乆y=/l=z_mtא|lX^+$vd(pO;G" w;INI_AxػU͂FB Ȟ8kbX0PQc#Ǭbm϶-R +2MAmgy&YM3af_TٛL6@Y2כN:3I_o3A6# k>x{_!ua־ѻ:C*Ak;zok:귴[Ch7J;+@ z{SjFjf\2-ce׊0NJb('h)a sŇzHNU@8Iqĥ!$:cy%Ĩ !cBq.QSB ż,AP TCވREPQĈP2/V d'1DFV7¢fL +(Ql + (F+Khz-L hdBFeT C4!2Aa@!X T*H@Sd* +S)0%/RA':%J+XrL&4\&ɐD"q(A'db1o#z=Y!%Ċ@~KDԿH$n5Vi*oɿ駕 l/꧙,K_ԏe^L'3aB~r't%R!?N'r W҂}ϬO4$_g@~:/|@O2_*nbVs EpB"/ +oD}dY_lR}{tҾOY1Z:1$0َ&Xu1&8bch1 HR&JEKmX;!-lVQ59+\o3bye2Sb]199S#D:Q,IEENK +.rԔ6?7Z==ikr51\Un}8rIHkj=5T|Z{tǠ>\2rrɇ v|wCf&@uQ^xzO mQT jW#@;ڋ(=bwkv>b eȋB/m k;m[Ugi[{hyܼ/ +?ʻs! ʝce8sz8!ٓAY=M|2ouoetp2o8փ2ƻXhm>Fx'#zgjXgR@^:Hn8BHo"Ȅt v4 rȼwdkzɩ5ԡ{@ W;Hg 3;k]O1B&rb\j]l1"̐f MfCM  8t&Bӈi 8gqewFw 4S$'$$:c\) +i&Te5VZy5T> :NB c$2JۼՕYW5c>H0 8"A "9 +U׌#*^2"m8 ^ݟr-|_Mw[[gLYl (izFVZ.@ka&fh*)Hc)Aj( e$dm-+x%$Аbj"ЎUҐ +ROʪ( |;,;*%`9$Vm,e* 8TAͻ ݎK`<@nIb@YkwdRj+(#'=,-IMBRl5II^ [IZnvÊ%. %,5$aV-6#\dV Zve n h|8L hQZ8LjI@ b &#R\Ak̋1MQFޜb#eCb]L(9&*B?l^ EyD\"9C|`?Y!~`_>,?H _Y!} 3%N +MLL|&lo^`.vA5ՠ9(ǐ؄QvB +bתFDt"U;a$"EҩfKA1aF2Iԫz ৖%QyqpoK qZLi@lRk5ZF3FVkҨ5 dT%OxHFT8G‹'/JyJJ6 +M6bÿ3y48Qz1]4x34<[֛~|/o~5)?2NYwOwt[uڤ +UCC)sioBC. +g(FJە!#{oa"!Y" cQ / +sI1 +'M2鷂0=kl@"v( bS`*MP0S<*Ҏݻu+;lyoP^Ã}ۇv rڇ{7m#!\BqP^ G8JhQ69-z1rQ6B8&DD8~Dtą8p2<Y72S7!ucJ'%h-؉0"vmnlEp݅-[͂6V76aE7׳)hjT_T=4iFCWϮR'(zvT j@U˂JG} +A飾򒇽Rez(E/*A)"0@ߝrs{YN+_~=HN$nwZ'9RYwNS@'׀2NoJ%rAR%SwRotg\\'3LZfz_R];aP+50#rA„vAuE 4CN&RQHQ3RQ`]<,YtE&!? +;`;;{*A@Ii>BC#! {f;}^rJtRw|uvȱ]&k' A@Gw;NIaѢC[)R-@;}76iO+6خVJ΍4dJgzi[ Ŧc¶0hYԘ&FV{CM|s#d58 mֵ4dS#kC]h}RL[W 5Wn5UR +RPNAH2ZTWJjKI!58E$RU.!U2UQ@bv*#Xv TKrH$.AY0PQ0@*HR(i/' )6 б0\lCXme$Rxz `%xZ &Z!) 6Țx$^a$-7aYlj_b`V.2a+-g;вf7Idqq& |_4Ϩ` 猣-5HtcHq]\2/6FysfdF3Kut1h瘨8z-$_ +Er_vis˒,ENdgp(md@&lPFaoF^ eRN@=R +Zr%%Z^{G+ȿ8]/ɗƐEYi1df^RF +É'f )#@^=,2DhIDD,)!ZOp7Y +-hIE!N;8HN6a%Cح,GIY@`<f 8fBŌ+k5Jz fa&8$(u4EN#INI "7p'%p#J0F BVEՓ'u4*L܃0VMih*۵ܕAs/L~raݫּ`x[/DۈSҟE .ik 9;b[dF{F|{EV {Qq/3nnZwwwRߩ'SJ۽Bo󯟓 ox'?3d2p鮇yii~|'E1ytsM\|~a.6kʳZ)d' 6^&:#>VΠXTn'ǭJcn[Jr|,˱2VlT?5jWy4žaUb2[Tnm~YQ-7 \?¦߾Rq٪߾?԰]}~æEۭ4qF0Nq鄌rVykaA\;,N(V¡0_oS#,'a=a얰Wo- 4#8иE066 U6X: kèo5< ka|!ay?K./f\X XY.t?%̝~KPٝs;̒2vCL^nK>糜Ӡ2ԔLLi9S&pJ0ɀI2&MhB;+E~{W"q^?R (BCJ|]Twn hlShPq!Ԩ#QEW + +:+^xy?a \\Z|u O5k/+bH~6h/2]8f;`@2[pPCu7%Wso4XDfљDEgDZI:ǂ!Ov wÎ"쐣;m(܏ltl"{n=}Pv6[][DQ6*TQپ*w E)Zϊs vu*`tCvd;ejwk<=ԶUnI[Wam^jJ+XHrb2V +7=[_[Flb%n"hE,RYh|E[xѲyA\w'xsܒfCvY.ȢNh dt'dtVT^̛2w+Ĝ)NI';9YI.ȬNE3'9<5}@eR'5QS٥: +4e#zr]Ҥ"ǁ@.h|]PZ`!%clhhC!hQ6I#@#(h Ӆ#l`2f 2zSF}2b9 +5a!2!,͒>D}M}9 #5C$1&ߨ>B0߀0>3Jk 7B`&?r ˎ 8QY!r|$$+N'3V#t$_CRceŐzI) 'W֛ z$%yihAb'^uz}'};+NKWE/}Eڋ.;G?'aP#BCv,EJBCtcNKfyrW]M%盶?nP}ޖfږ6&ZQoo9g948#4 )'{[i'=l "ÊzZrq VmPUiRɡ;Q#(pVielp@DRa}س¶;.vXrYVC,E +W\{mHX*6Vz.3Vt_gYxteak}u]Z#"o郋aK_XŲl:aw6/]isKmd[ [p"ۍ ̻ufmC Ksl'g\r0 6{LgCXo`e|[ ^̀lna +j9gJ5Tժɰ'3.3f\dd\}rŽƙu 3 &:Zu +P\ VK5zP\8g@ֳ(xWJtJ*oWY+͌ +J + b;sĢ>=>lfO[P,,6DA+rs>^fSCpp K }wүn?{2R]Sxk?wltkGTqvS]V[]$.h'wx(@ :͉8u`^J[]^i1%jn{IN(ĮB9כ(N; Hwرzg󝂶mp;i§d=pA\-kPyNAynM]U7trڰ`IeJк$bb/o1X(Ī +88oWΧ+摈ssK .K;[<ۆurl\[0.F3?F#eY;:ٙ6FnbC̰Yms4+:qX5 +eNS8,c1c1}L +5K3b&|x3ILLb'|fX#%Hca}>mQF= ;Ҡp1#Q>g1G8JӫG 7 FQiFO#RlxJ0"=91/8X*)&PPbl*!F)>Z "tb#h)a1:TUFi8hnMC$07h\$p:wF ÆvnS9j?E5͂f%[L*^f#^) (DWȌ,`Ar!H*R!:MJZ\F#4N%N(5*\IVщ@fS*-B4R)X#LT*GʚH$.|}q>HI1wQ($2L&Q. ;|^5x\𿞌2/т>)b 00w%v=b;p7oϰ?o`a7ݩ~ }^>J;Y$A<D1@ ADܐ/~Ё^%vG_g@v^vD }EG3xqM<"~NFq@ˎELg4`!n0'Ա$fB),!$ KZCHmD~5{<-Kͽ-ʹ-=m>M~%^9g948#4 %L8QigkqVe+ixrq VmU*UU<*9T6y9Pr)/i/rJ;\8﷏^(p~ [zwAh4=1J (UA, * ET5$ +V`!$%/Es/{s.13o&o3s~3wdrVe?>{كQnX0R["H%%P<=U*PJ蔒 +B 2R%$a'Ȥ2TD"wX*$cJ$\)'ᔇ_om.Az41!xHχ)^gﳵ[w-_߭ +szL ػIc%+zasKGZȋe^N,bRx6voׯOC|~FgwRߞ-Gx?G^? !*J@9FXyԨdܷʟ1~|1|zvߦa4TḳVy_0;#JN /l$~AD_d{5DMMXX`&S35@?h7AlΠLWK-3[gvnW)"DoXLQJIO⌘Sw{6L޼V7vo LT= +}]=5n +Pta\r"lPtVODTMt@lΣmp;ƣō:q*CM#@F3YNc%Ir0lr8 hxaXC<BsljzVP}cxgF1jy9n58@rUQGeԀG?lS 7S +˟-AӊYyOC>lyST~tVle=|pdud^ʂ߿ Kו'K鴔o.qH3 )Y_u&J7VxH\/;poJKp5 +'fKd6mVؖf`1Cgio4 63ƈؾƈ;NQYg&OFP <ݼ Q0YI + +JIIPϽzW޺{{o_7t螡ݳjW~kړcf!D{6`&ݕWoa b.Y=fqΦ]VwESc7m*7쒮*RUYmQGFtV9sJ+]`e6A[}S^^Ik)bB2ĉ:OO|a$Mi*f10dYZR_̠XX^WD:j"Fj +Y4USHXu!GV*O3GmOt RV;!.#EVMpJZ; P.fBSĥ.*q(eqR'­\‑/d#lb;[S&XG6Eh dO?a>y J>~2G3Ђ`x3Jg!,o&ŃYgFͷJ~7"X0z "|IQ7@05uB9 + F&E4] $%0i7a#٭A˳YP٬Z1ЃuZKadhM&Oc 0LI&H e S08=a D8^o4 QPRA +0ᛈ#C7J` 㜂bL~sddtXЍVpʏ|y\?rd?r#;m:車,L +N7r/{acv==OtwPuoژ}.RVA7"Am]/1-:6ձUɦ?omSflcF?\܀YI|y,J۲u[KK%nZKӘ|V=(Z[;ЀHYrL57xJ\C%^Y[}|J`%KT/X2hou34XzH7K/rNSk]c j*8&TitXG]D:8rJ+]`e6q ++\t7WZXP'<=A94;t/В" giI}1*bQcy]=,#=C`EU]@S5UrdU+4pJ(^y>#87y\Gqy J:tز ՂcMB@CcJ^&v&/b +F^Z+[Lڪzm-udD/ ;Fw} x?L +;Ԡ__8ď}Sb8Q^ND?Z$"ǻCC??>g"_̟7kCaa<zs?Nk}`C#NĄ .ذG {-k}{ O~ʁW9 ݋GZruq.dGƸ i}۩qcyF+x^Ωzt F⸏+@bfܺI#߯q8t㽂)>Jō8{Mn<̓zntksWqď.Ê5Dj8~}U=>ZUg ES IZz)Ywh+ ؤa#$5%Y>p5e7ak [EТ{y`ME~4}$]u@)ْ[]]7R;NgxzpXYd͢'F6)/0kp׎:qW+2xR]9T]>] M݇\fx6CŃ%w \AZo}sQg14Eqfqz7 aUv;tOrjaT'w"Vvb#;EPc;A;X ؑm,QW't8 ko9ʊx8 l3tpD7 ^ nlb{"v;CmkkkyVe ͫY*>h6x)Ɇf[G5yV~7NE5ֆ(՚^eBVkk㉚k9+kX PRE4V󠡊C,df806 5͎9Շ6#نqIv IJ͜,NȴSMyXdɲyK=!ΦPJKB {V +({%a@ݕ: v(wυ޵JrkNmy\ re.9!;ay-2Y'l"C3Qd&E2n*+d Ďe` $-!RRhq )IDcHR £I +aȁ<&&s4?~JU)|{?7Ok֔޹yr7yr/h1="c;cǽTc cw|pzu1mcHg`Z[Ț +|hesl\~Gfi2NMA&kr5i^^qh|.YSKiBtw wTM&$h.MO&'y5ѤwMY`~nn5ztR?[ή ᬂ3*NpJr2JZ$Y1ɚ hFGTAR!|^?:WPdUPcا`=*wK3hW ;P]Q P-[ũvYzҠ- +6ǰIA1lPnQjA-l:+U**%ښXJR%KT,M3dחc|//S0w /̙z>l6hs3T̔L{vh3aQSnLũ)j&䰊PQ.)2IMa>?>⳦ OIJAeXRvH8ěEZ@Jo`T !%IFJ+Z6B2!Z7L2JݰujL(jlGnYZ/,k v~Mхz+~A.!퐳uNuޏtj +9Wsr^=Ne5vvqtx+9à y˾a;#^աmCj9V@@u[Z[x@7{$Pj%ި jzQlB_n[1?ys=BTKg{ KfųjLO3n {Pi< +7O x s'(4g +OϞ)5-( +7 )eJiд \nESƻD\T%q.R6E&qӱLRT:)M +T:MƏp8*d*邌AcPj0:8iШh{ԈwG |>!6ȻocRC7dCx?dրba, *dA ,ba6֐lCr-b?k(ʉX"-$D|',EB3mRbH9,3?Ӥ_#2CMQe1 ,0DjQQJ-N$%Qh IJAx4^X@!2Ty8»)=#.sN +A\Bd;* nY,c6=^=f֌Go1 F/F"N 3Iʠ0Ҥ@bg@$AD ^'p#+0N!CjEӗ/ui~"qF#^V /G9~{|WO{#?'Gr+sQ wnӳ1'%3S=zzv?TkE>Qwsti +,/ǰ8EkJ12,(Bu +,dl$52aᔁ"( i\3.F{E/ c!1^E4XٌXhYՂV3<;+v땊ϔv\,}y`ZGysZ4 E8#4T8xF펛'8Cm(ujQ +0VwܨlGBD81GQ9ڎxq᐀r2G[)Arؖ%N ؋Gn/v!t4ځP$Ћnqϳ %4ԟtj?6RXiN%R;iR;` Yo2)unm!]t)z5gя9kU*f968-VZx212qOsJ|}cQ'R_ 1!iӰܮԪݤqrF#@bBFzJBkpR 0xh>1r;sl =ә#GA &>$Y~CrGi( f%/%9eR +PSjv?H(U%$Re*arZ~B:d|7Q*4^B:-ipd?ۂthvZ;,+Si! 8P*)|+Ӏ˾mV|n8ɣGmwŧ9+׊Ύ-4( +(lT +6Zpm:m]ourhLÖ$){ ؼl\Ep_6WP0brw02h@V:\F$fiRÌ@i$2Ռb 9c#HoyCF )}ai)ϒ$SB# 7BR؊sL6qY&&3cUHqJY\TOсqQ*):B C/ʦ)64$"_T*R$V*%,3 9N(Np9T.c+T&{D "AD,qDb8"(PP;qDlϮĘHcR ^&qߏiS?˔χ ?ߗm1ष.1ы.&9 s[{5y~wXΫ}yyoGnǠOYCP̓^]s]{r+V93=! +I7Bٔ-J-QIbJJ'x9xdß+~랩xv'S{i,7U)v .-dH= "uqMh4H"B1& ښ;_e 4 h ⌀NNSa7Oz4M=BZXT;nT{SP @81Ga[F9ڎ ␀r2Xԋrό-7JbeJ8HI(MA bދ#*.AQGX0ns߲^I|7on=9>|Oqb {1]nFɤb…r]NdMr*ؔv +&?+l=}DZk qZk =Λj(a,}GoɆCHA +r@O0 AhCrbR"O5uU۹ rʈ0Cj*=F 9RiB!5&n~hwvm r`̄pٷLN&V6U8.5I{vٱbm6C*6Iy)+Qdfm/4M۶׶J R#9Ȧl +Re@r)4B +3 (IA:"mdAjP6TJN,J)If+#^(HzAZ+5FKsJ$EXQZoԹA^trʛ:Z^#im$H-D7FhHaZo$h7*4گXkR9RP;X[7W\P_}.(LJ竖+ +9>_*G(bKĊt,Ö(XZH>mK@xC}얄xEaĂP/L"#xqE̛,yAyr +-#4'/X~{BdNϒ|%6$|$Bjg6HX&6^t'zȎҊNC";ZD 4*)!*L˅|%BCwo_-Ƚ|<\<=d2L&`xH"w&&%BXBJR%L'AL"F$zK(;C @B {yxx@)777gTS}rÃgl?7f$<;vsMK_['f??-S{2|S3/뒏귉r߬ `3M1#/X;ţ]܏!Og~7z~7CԳX{e=z6/{6j#7ӂoyg?Jq+Ht$Lc=D^嘟-[z1铛G$OF}tpB?ԗb^^ i+y:9+Pf,JKߵ`- [UyL^pT<ƇU3{n*5oZCRʇzլ Mu+nwwTZ/p8BF sκpzR>q݅6NZwN^҂BhOÍt*^j(Ra:88 uA'a۬k8uF z0\8urmL\:b?}.Ũv +Ib…r.;&9Z@eSv#!L?+eolr&a$Ao1(EPuʼ ˺۝9v+c|Nh'*>ҕJәL Fʭs4gSl~<JўJޖOCVqk- W4E_i 7"c/7ms>z.{X`:P`V++rD[";[B6Ej&hBL +!I.A/b%VwBS~'Bͩޡ6-ZH) yR u@35;ұiZNgkagk5C3|wZX; o'~q>hHo+B-h[h;(=nat53xgrڳ.]vcD쐽Mv|O#A vȮ:Ve!qiҪYH6#l\ +ʙik,e%՗pZE.k?5W &zIĂf"o|]D "p2#佥n4wDL;QF l.ˢ &KmɂH|ȒH&j^)Y)}i\6>g"g?Ifas#Hsu?0Y3upnEa!:P-Rh0(dVDL P\Db KFJ)Iڅj\@̍-\5G 4cYL"g6ŒA0W*jO%)@Knt:BSVQp48ip Z񉃸FL1'zJR2wN)[L=>ףdeޘ%:Jے,y-c"UD R XvNjE^D9)P±Pd>^_ ;%ܛA}ig~|-ݓ!yyI#fo/;|z˝;Oy!?&|+<=C IS1V{vh'LƜiޙ}r+\x4BӍēyēsf"􏯲nu :JϮۈ_%cAGw"-s~_kW_ 1Yi٬SH,fEZfVAeޭp+ IF[6Ndv BYLnIB&Y(ILAe+Z2㵑:ǥS<8 $ ^NzpHõ+^msz0mAΐU?g?JB_~N=Jnt҉T1+w\܋ǃ@BN Q&. hu*ZpӂÃ@4#4yшA}у =+p|)VE B'KsUMTrG9?/e;+ȹwWH1 AawgyNwπ9y;sroegpo}%mdVqLЖ'2@=Iq,-"ptJ~$)$DPa^S7qI '~}(%᫃ m%|u`cX1qpy iAІMx=Xx6>_bŜ\%l8͋9i'D\\E92dT\8*(G]T I$"g& LY}τtר>ky%z"I'zd9oX]u;g_ vZ'YD(bHv{(ȡݤ.rwp2A"p?AiH;){ƝwRk>{[)ma4VFB#Aq\6LzlXiX[D!XF[Li6MGLRHcS,<dLU$ $EAVH $)b5Ҍ@i$&XTa%ēolG@,`H%ޘ!!^C!^ +a<0P0Pn#{\&Unݨ0n7 +8>c:Gb4Y1ZV]%Fg1p4Xp MdMB +LFh|`0@o4AE@)+FQъBQ+]w+ZD¿ްh0GL^N?d_˩^9%pkD^dq(CsK!8Y E`)Ͽ)J&z<$t6N]}0=NDU=9%wX6ٰix͹xߡӜKl +VosѪY-XUX==NQGɚsM"-ĢC74ǣ4H7ߊyП$I*=A5z=ո3&41+6>+e_G1/%'Q,yf,sF%sTF06,`)`^0yQ4@c7%a[$}KzTѳv+<2nmmu_dgo?>tWmy1ؿy/چ/o޹$hm ;>>?sק(7+ Ω8 $[a@*=(-ݛJ'#8j TtrX*rPgp[Wޣb7(avF#v* Vj}>ж&x[a-4@%-6o66nn?Ռ^&: E+Z5O>5JV˖vP7=Zѕ(^^euO/.To`'*ԨEH}K@K>Xa^AP~sr_-R!%{ˊeg@ ,PQdQS=ҁ"^W[ݒS]y^01 78pn q:k;|+{\8U]vu5}Q]= $OR&P ҥ.7N EA.q:1J F? G)\"a{ԋt;Lk:9w Adg1CWAI" )8u%d=}}ސ,}tr8UA'r& .!$uaUuXN_HnN9 ;Y;8#,q=rd_ Gd6N@opp&8B[Hr(8hܳC’6q-s#?#T;67p +~Mۛ9m= kCqoukb[YGZ!Vs8lTj"7ԳJ*ټ#"YEjZ#sDXXRbȵY![SR,d2aDakGĴUK|KH3aѐJFղЃy!K˙05e4Ru)c4-.,*aDUŴʅbV@ +0RI,)`BPKA[A*zM@ + P\.!$,!8 "@ݐy\tBpE rΐafe;)YM3iYN%LͰ&;CLro,sb$c¿٩(;+ޖ{=SG  cb:$ `$v N6CH|{_i6'RLԜdJͱ +?!D_ BB>7!eL/G)"D"%!|D'!N"k{oSEd /Qgl`3EU~xԞGw~{Wj{/o|qkvW]b}ϝKO]~sҖ[]#w.wD;U>ܹ wI:(:8]ř$Nk}Gӭv*65Z5ﴨLjK$98K9ҭ8đ8J`l?}·Q{x;=ZGnVٕ$uP5uql6[-U}ޒDnbVolBx|s 可ch٣/(~~ZJ++Y ++Z%8,bT͟GshhRQ95ssUf!FzgEfF1SQ} UT̺jhv̌SdSRuMR^kT-dEZ&!&μ(~Wdƍ+.Uj,o:nc!)+7lpfk9+Z ]muŝ]>逜D#+t͠.pijvƸ3ٍIɝqOԹcnIG+ +*؎F{[ʊs~I籀Dpr_@E+02NPojM.TA F%`L㮀J0ѝ# p! sdG8ѡzAQ,: `ԧuAM A@p2^ƽUдgK + ٵ9gS0Ns3aLhFo1[d!ضFd]-(VUj+6h6.CHfòK`b'%Kn +(,'‰V/ +`V-+8-+j`eMb|?'EDݥ|X<ǃU{m,`7F Unț*_ԜJdtO\ܘYS=C2s3c'FD +W9ɍ{ܘiNpi򦓛 3y&`!dhgc+9jX;捱NW ˎ$l`KV=j싶+q/%R(SnüPfōGanR Č)/eE}Fc /V)HliYR2̤`J ,LIYSq).0bM1 +s԰\ScBن iTn2YP0L5eqѬ%=tPiGD~{9p^zh}J!Vr0q9*VZf2jHYO4j:de4HE zoSuxe9g934,`F14>Eh-T;|W)GM;P,+ +R$*EM1yIc}533?bH$Gċ@(P2#셈i_$KHB<+D"<F]V~:0md͓uG`; *@{~޴gnK~}p>ݏSWp(y *pD;ǃI_/'#~?jHָ݋ yn4 >(-qys=oy_sN*:zbG"4%`5!H^$1qJh3D !$B H$F9 ?ElJ$bCQ齊2$IQK=In=%b?/}͞k7=uɍbƒϖ>jj~Ο/OPmj(5lQ;Y307!!_q8 M[BԲ:nzɟfDeE^VE8Bcp8q `ZOc7Įv¬6( a{ sQX*`Vx6(|C^(\YZvb-eiۥ5,ytU.VS +WL eZS-{8-ʢ>gX/`Nzf>h/@n 11vcv\ܟrt2o'A3)?"reSf42f-njǧ”ZjV5dFUg^)MZSCq"+ެsk$\GIkuRJ-2yKƠ.js݅J#(UZcf +T1qQuUWfG2;umPY'A:d8y'XظۃAy}QΪcUwUP{mhtl`b#v|vNd;h=QVq9 uh=-VW`%N +J9ŧ`v}%bԞΐvor06:v9H.v|㤕npY7pm[qumYZ(Y K*ۼ {'Jٴpwt_3|eR;ɉvjb; V;@NlU2V+98/ l̲<+ZaAyv,%lPs~\mE֐"xl fZ XH֠XsӉrY8fM%ed+njI,3=Eu,ӲM` c&4 #9s +5^oDA8g3cP_|j|1=:7Fц|1L}Pd8dzQ:#~Hrj82Rtd-kdJ?Sx(aZGj<-I+OM@$)I*Da *QOR*XeX*(>ZVbq(wFN;J': BeNL +p<8ehNov+a#P.\j%dE"r1I…,&I!1 <:bs2I/N'xZrj$bFơSKҪ$"JVT^^RR)J2I +Tqr B ;T.3d>RTS$2 $EX,Db~Dy0 e(Cʿ:^F@@D2DDoTF6*%"~:0Qa͓uG`w$U=>x;et{}^zǓAuC6)amp(9\T8$SO"TZܪgw);Ӕ;Jx{] qz,.JIDN0ѪM6XBZ$¨E\z=bƄ vMD"?BK V3k"H0W&$b|Eeq/cU:йQ `vI:a "9g$ +HQA$ŜnwΆeZyU{޽^_:*/BFWxKӻ kfF-W +f'c}/͓*g&N:p ,}%/&AרwP"B/u'G7[eC"˵ڭ^Lp9ǣ 23OphqV`4hD8áG=-2:ͣ)5l*8qlٖc*xQPP +2_e2- 9ac+[F!iqIx|:'%%F2(#CbP>Fk{=XFnP [̝hP(PԭH[]p@#fWXčNAPT(vP%lC'!&u$dm-jMȘnF_[vv[mm:06ZT<gxPDW8E0vN&G+HbQ[ [OZUJ'C hVK@gUH}MHg5&5bơFcg45ľ256~ަ`]uHuZiGơ:=VANilzȹS:X @UpPkVc[HU:M +:{vcJ#g9SaYc+ GHutćՖZJ8.«MH'y(21 H _cVyy&6t4Vgd19TkA9X Re\C&A;isgd@RgK3K5Fnb$xvAв 2+HJ4pFfe qz62-VGhFAdJp$:CJIu0Cq5,:HlN Rtu(2Dg +߯O 9WVBwk!viT#]jߡ w +i_<=ߨ AR2;T(AҠJc6O_(sϔeGؒiqIc3h1Xzq{=(1;Ѡ=Q[݌H[]p@-fWXčNаSMy#$LsX[[%x Ao9=8(ݮW/M}ujΌFrXHQfF +$ B ىT-+\ +ž }N rS!!`m#ZIMNZ $57!\L#°ijw +Sc 5DJ%ȓ`%`$AHf͚%W::יP <+p*J8::'Jk| $bxQ~T~Ck_8z/ \KfgWNj^TX ~~G/G_Ž@Bܳ/ +:{bzy+y{DCq?ʫ =R|owH;sOoQoEMSw7wi|r7B ݥ6[$x-ؠp*(̚k)b"2*PZ\Rc%1PELYcrhU%WV9s]k S6!Tk0+bS +WemZUqzW䵊[W]9'J|=1 x<9X5Td4X4\ V >wG/5✼E?.N LЉ:8'@~]|hEY?Qy&hPGZjx}P; :i?*y9.H~I(DB1G R$Ї@vNN9!Q AH QqP֣krkG8٢}_ ~~AC`THٿh{wɼ; SN/;@;ܷ^6Tg=[nmIKRdᢗ[6.M|8@[&RA'Exi])>lD9nv +Rot6cOFnO8F[2F +[4c]:%G=|DpTc]z7ҍ2@sw a5jqZYpGϳ+m&Y#g<h5 ~2j\nowֿf dvA奧.R-b"Չ.z骳j)!QK5j;VEpй3 1iy +z-g8U +-h*g!eRh,4"yEuE -!5EDu!+ "EgN~>Ḩ9,<ˊH)ey\*9c4,efK +)dv$?v+{ff{ٝY +HU.XBQ{XPްQ#11Qcl)5$/yoy3΂}g޹S]^(p5iX8'YUOjsb4ZYCh|E-¼Zj \Ls5Y^S7U:p1$TAr'LZ=SWU[J +Ԕb@uWU!T<;T)%9r¥ĸ,&!ل@^]Tn Ͷ`Y)4&jV|"dB+^`ɚodt H3CY! Y$-k̟c 6>iLfdt؜T)FȬT3 +b=0֌d# f>IM2ZJ8ϴSIS&b&i%EOԌITV L(#բ"pj!aPWń0e(+@!ƣq9qFIH$r;CT2\[ TnyJ32/Q!3X Le&b)$`V?Ly<2F(XZ)c(15JZ1'JT1P>JR*G( +%سJE.L%88XO0/AL0A >>י9֛ 'V03P0'E=7秙QJbzS!2Ja츧I-y=8W^ȟ'>?Q}qoJ7&#wA˼ @>z:yt7ɤy)iD$p+ -pf=pW]r +gLR=0VSԯG_ދ_>=_>v?,V_4?TQ>]IPvDQ(b\,Fc)$(D'G(@lDs$B"$fCf$#a'4" vm ,2ʨEh PQTy$i11-(LEvdʁ 82eFuλWNnyz\Ε^k}a;;ݟ_eK/`:.:= { l6_d 8-p6߉YY78w,#8,PAm$Kľ쑰{]"vV !a{Z[@'O"6V~iq li!뼖\ q>lj|޿g5UVo? +FW@|Ϯ.45O?ji~rETu~V>b |5ʣҫ˳R**/?W*wT|PTE_QgD=]W٩@>3g+ ϫIV.`hY9nrr?Zw+cـ^H^wV'2/>y\+c(` yqu 15kJc{P|tm}rpt[ڹC=hGG>}!7?u'>Dluj/qݔ=vlS]NAhtomo.C[hmsJ3B[\ +¼mrнi jwڹfwwyl_Gڶb!FXbt:<.IWh* +l\II +gmh`^ZB8k],S}4R NZZkiZYCh|E-¼Zj^?dyOT4VXSYNHCzf!)!`QEB, * Qyv)4SKr~!Kq)XLB ,Lm3 ;$'ShiMԒE6V ɚodt H3CY! Y$-k̟c 6>iLfdt؜T)FȬT3 +b،d# f>IM2ZJ8ϴSIcpݪl<쿲o3#eY[Sv@NGNei{%3(Ұ-"-SSYZD)~AVG[~O|n#Dy]|ɽ6G8P;MF(!azl`Ibh + FHE0dz0iAG)JI Lw麉bRFZ-th9YY<ɠY3G14A=(ᵄ)Fa!eB,FC`I¢Vċ]]:0]BI:I"T$ɪ?|4Jj;:2CMa{ SD|u &]뤆v~[-&U,8["b~Q+;^ZFUgB@2Ws~<X1C*̛u\93o6;7e7͂ 1ZL`FeeWMMrtlVTX#RH xGJJ?\,/)tp2̊FLQ1IE%B +=1\ȸo)jo ބ(lo3-kNӚϜk >b@L{F_s&S=`Vl4:ߢkܽS̀0lVFK>9oGoa5ݝۺqDisGw;YXk+ƑNY8ÉE`[7yͅ1i[сmnnV}[ܾn ۻc8%6xbYxv.kq 뼈k=׸k|:/W @KuQ녱W{8ض7bj+k* 0Ai6ڰ )ٰsOȺe^^v`<vċX+5lB3 }0v/[$Ws˪zDqZ2-n1/pø. @X0tN^μ2WY`xi39eULu(/#*J]|y3Y)v1c#FY]BP4UZ)dx 1e]QDPEc1 +dcm(i4ʆ8:քQVY??"}b`cG 󱉓3z=F 7!>nA|YM?0'`Fo3hW> ߨİ| l!{ 6j)jcH~k/1(Ok`Mc@_} 5/GGNfr3uLn蛥)BQ}2t1EEYi^ 4,#EH jAV06F_іrS0Q^qrN;r0NQ66neDq=XjfⲘ04 3i"`Ɯ ZOF=0(E"n:]7QL +#(B%5NM '<3"sÁ'4p`(f"hEQ44E(,LEh<,IXjx{5< I2534Tl[v+{bcAņ]ݻ{^)Vf@ca׾7a2 I{D' Ddww3FЛѺw żЊxn%?;zK?4g^ޏ/yB{7R^L_h_N@j*=omD~;_?bZ.fgʮ[nF͟:Yv6mQ[QK5h+wiStA#LeC(+KBdɁV8 !PA4)%i܆  Y 3QGphfm4 #&Zь63ꐴy~Bfmlv{ټ+9wϽnkGS].w4~p&^S +ݶyR +}R+ n-pFi(*l:E%m4qqB\o ฀cwUͣJ@%|*6{9 pSGR%B,M7u4m80'`a=\Y7N;;(Q(`|(`Y㽙@-r[ >y6\͆xpm# .dAI[v +lݲ)kK\XveJⶋEYr~$c)dIf9[g2kAYYHL&r*#ڌIi\i?ZKf>*`ނjR*IZ's9qJ +RHfm:HbiNi0ʙӓoTfLO^N$R(F}6Ze"%jibսL,9=^~Z/7Ij=ȯӣ:@^] g*#\02** +3VWnRXfT\ʹe&څR#\Y2 +(}lK;WjiU{Ԫ8SQ +(Xaة_!+rs)8pj~D8yNYfmXu1Cê}ʽNQuim=$Kn'K.r@ 1v'wĨّ";\o'YXlsTDqnoIgƲ7ߍ1h~r8WLqvnv9..HZQVA!6DfmHrDm@ֻ +\, #uNٲ7q9] ZӲV (W8ymXHZI}eR2k IY%NښŎ>[ɲjv^+2l 'ˊt4q;K켖,68N[4&h\+%s+d ` 7?FKm4oe qsgZE͙ncIf%9+iHfafS,,6s׌?Yob1<[#2ـ~lbk#+fbK# 7y'>WپEe8 z :eo=mh]%ąďҲ$=h{È*Fijh bd1LjQCT%*B2,\†Dp%0%"LKxW'Pۉٔ~.A#x9l݊6+ÂY +8GϞńX٨d2pPQ'!:\f0ZE +Q4njuG.QeJJ " q%RS Y +PE{r)9S2 /T*㖔SAH$| +[AixRT AC=d +\0K磉Au??:xNJz7zz[hFȧz^p>_={y?F~l ^iм;yq'z?﷣>چ*֡"ykDg->.ZW |uCҨٓV'8ˮ|?ví4!H#u@@P;n]E슊t(ҫH**{{(.zzd; >=~_y}cfȀU6 B:({CAuk_2,"~iFO& +Uh0 +h}mFE1k|¬fQC1 +P?>b(HR)* di ]hIrr߾wۑmi*+n{/n]mM}5~*ѓSBhm ]Z- 9}Lr4g.h9`4 4 Wie-R@q %KwPSE3  (9w~픀 i y +{' 'm&e-ۋ,@َdˠ8np_OgaCϻ +H#xzIǝ|XnAm*߮WH;Wupkz:BXe{v| vABMSPjDؚJ X4xL4T_bDμ"G5gB.9N8*OU ₕ7̌8BYpFY -;s+09 ˳fO0,XI)((2SN0ON5OL͉ Q-(ۉ 3#8 Dfӹ>> B>S>SI\| Ϲ#}E?!XF>=ٻPLؿT7w9nwlZd>zbxmhƛg~˛_p E1~}2KQG`d&walׇHAI.# (}9`zXm.cثA{h~DZ-/O"7/1 0\ +3C FglAdHiPLAAFC&jT`5%TaSRZ'FMv20QPԒכ޾;{5;ţwiyr{,Gϕ]Ϻێ ^"e98(yv'wi!ZhHTf?} @:@C= u^9jh^ZU P%@1ʎ ;z +(( ȡqE +Nߦ8 `p ߋ<9cg>8d&}ŮAz***vA[i(x޾o$Mz;~~wfhEa + (sJ-P!ܗ}(< {ַf%i/[0kVOɜŖ&%- Z eI{Mɤ&dؤRv0M2L ]ii:)l;()vJ2-q-&%FBq w[hrK1fZ4-n ;bu$N#%&=l2F"lD6PiCuqQ&Ma1aqo&o܂ 6$^_K6I(f1FoM"FEIjAώɜ3ɰF)RQi= 2;FrȭzFbA_Ssl|]BU;\UA:()Ie j +Z#`vQ`Ϡ *AsE iA xNo8ԟU3 guU);DI->GϸRP+UQsBלA.WtBg?pΟXQ.T\?lQp|Ws*9yX*CzNұ:vP;uQYدΔN9ZˊB=M-Ju(P`]9l8KG8?{ξ,EQf +3t|)/MEi!yHns9;)jdkIFf"#APzE 1ĩ*Rc$S1jFR"1JP^$>R(q{Tp0Rn9Q;@.dn{Hʈo=_ _I] +)A$!AABF.a2ϥ,bD c6/JdN}IٶYMbȧE czuy۴q/dSHqcC} e!b*ڕ~5+|(}Е|>v>Y eZcgRoV,ZސeA^hI$D +$z +"Lq,@G@8&d5NϛFE@J{p; # x< )XD傘xxxp`ŝ777G||_ʍٸ+Kͺ$7;pioJ>r?o!zBlosvWC` N: ׁ3k?_f|!2Cg~z +ӳ=]>y/_PZX^ 'KaS!՟/ʏ{&Dn*Fg5q[= +Y2==?N ʻI=fB#|@'|;xq׫2*4wwj +*Ht%@NT V(ܖUnjT I8r)'H!cP_)PXˤKV+7H!KyF "-/7UΎyr|'c7+^ {}^oNxeUi:>3M!Ϡ.6P lcdGgiEv ijف& vcFP(zJ١u."\qbvQePyB]p YΠC;[r +U'\8ṕJJyؑ + J P!ܗ}< {ַ/i/[(kP9u-/MZ.( Z eI{Mˤ&d);1R& TPJ +(eLIoK$%0'JkxPݖ8@,!&~MmEŎ@{Qb4R"acD̐1AlcN  44[ ԇ +s 6# Zd$` 4!M&QboZгc2L2Qc`F+|PO kT-s^fq^ ׯ0%wשj:jU+J35*.k mԮTVPٙ(4 4]]UM] (08 "HFrPP2$AJ6bcu׈apvϮ;aٙ-[UMV.@=<}キX]rlxO]tPkt6ӊ:D{3h]@!Gwnd[Mb%SFr&60u lZʑdK KfpDivHXJD*iɎuѰ2کUTWUȰjKBQCRS + W|;+YP&ȑr4RVc)BHJW͐J +sFdӂ,jܶgҐmt;RnK!dk-ܛ;Rvml)IV]hs+#*c\YRc-XdsMmu+qe6H\E RLfl +wfF\o"#י!ך kcڰڀJ1BVк&ύr$hgf('V}0HV~w +Ä|2OB>^fPbђ@ YH/X0pܖ.,Y/ Y:j< Ce̟'Y0;?_⇅Ղs17/bL_EfLHt_H4 4c4M4}*ɝS}\LC e +K`S L'a)R؉ql$n%`6͊Y@ȌYL6n 2yz@`Fm1pZA4|!N~~N^Noy:L!Z' &  :\NŴ" h0pyc Z 奖KOY<<zQ&K߫/yEo^8dh1oN MNfp7~}fh!Jyp{'R M̏΃=BޫOD~86NIy`xD;KAN1;t/]A<> 3|D/^= Խ|d!_ 8OX?蟃_ꚡ͎Qy-VyUh\GVkV2R)&`و$^fTMWͱX=f T?OcK-hw;}j\;*]xvB勛FU; I 􉸷(pJT8qjv!JozFCd薨W1xӝv!Q7 C!)wW6tÝchqc^Q Z3B5"|!*BڍF=Bv!Ԣ ;}U#}WQP)Qũ=﯀ ^v(>RPeQ1ʖWxE' A9/ +dEُ.nf> I}b3B(6 c2 į{A\'qr zxQnPt܍.M띢(@dW:86AtWS ="_Dmc=<ͥ^ Omؗ=r*׻e\4ݝ+&ELإN#vì`Z&sG-=biav661@CVE'ڔ䴈Gxv4;JuŎԻφڵ|-"x-kt6ӊڛ)eM r,J38`Ml` YE. je'A԰ʾjGtjd@Ɲ/*{]Bv0 ECQ] UȰjKBQ'QS + 9Ux|wŶ2<DH%[)sRTF*ʡȢlFQaΨlZEL-rnGMyi4$7lMQ{bGNm3%J 2mne$Xex8+RjcSkl n%n@`A 71,MᮢHMd:3dZ$bqLVW9FHJZD~/"MT@ +`X!wl vL\Ά( Θ咋^r2syͧ|3?h(q#$ +;"b" 7̂LQF{e؈\9FȰ\dh 6!L܁F$'CrF"; 20(¼dYi"3UK `e Hd]ZEI^I h!ɉ `iIZH A%1ৄ*%Gb^ +("{ . sӁE Æ0R$rfb Bmಬf#Ʊ0Q,b10UFLz bԡ Z5D´ظ0 ѨZb)C$I)"id: L0;B 1a(bRc(BEQKA8D8QbE"Շ|ȇ|ubbTX_qCT8U,׫qPabYϷyo/+SXnڙ^#`d (~k{_:ݛA2~}&4P]Ҟ^Efo`~&CLgi3|GďORޫ%~x?}ĞY?< Q=L|ߚN~Ü׭I>NE64~uK|wϧazͫ6FMuK;o _>yZ{Y^LHסfU\VT[iW6U͢U~hr)g zž'[l 5u*ePIؼŅj[o4yڶW?ݴw?}n\ytiSGXuHpQF+B7γ;[=*t\U{ 謄32N6dt5J8)P k}m9օ $quGl9㶔[JHߍ}Z-o]Zh!Yj$l[$l[QfhIB,U]66h^i[e-rր?*)[yvmUr +Vٓ+eA >-dO,2oPVR9"a’ ]{p~>_%ν~SIɽ Rͻ{^l; -ck_"fu3ϧY3EY3<Ścv3T*df> ^tA4^]|~bJMXAqd^Qsgzs+zs#x~qOL0kn48m>i>k3Cn0w z3\*`Ů[$]9aƮ LWr`St֥6s8%59 GQp9t;wfE==!xg%tjhDENsCNnvy!vz Gwx# +TW!#|ۼ; +mj|:O?GJٻKH 7| JɎ >E{9~TYQ*V [xE|6V [>Φ^zdm+e>J^%gՋ / E(ЪEI+2<[x;R%%NjidxE̝.Iesݛ,,5!ₔpF))rHWhg8)t f89;d͜fOuɌNHQ#J$6 cwiM`4OVjG6VH8K&5K8İ@&6F[)QEFI2vEDn3!&EsafEy9&l#l&yC8 BINDvA081(Ce`Py5@L DfLa4-HEɺ(iR4B5()%Ғ S@&Jb<-)O UJ!Q-)EIA\Q gaHnfeY"Fc1  `4Yb`^ĨCjVӅiqaH4FQ#cR40H&4SE8t0' +avc8"PP  !e>8OHH2%!Im]ub +k` }W]5(h*ź+;3);&hs=߽ߝ{9B;BV"X\ +ҙt3#} UEHR\ Dp$O5㟟tr?hy7ǽʧoꯆՇF݃{AZ\o\=Y>=}pZ]ݿwK57ySx[u]9y|?#Cy]MI kxj:j{X^TŶ8/ꜗTH206aijؽ3'If>ZBY "-g+;W\P9,kf~M/h&eӜTS(9Or'Ayr@S&;:Se#yyw9iG'M}dhxxՄ?7eQ12oJZ%oQUI˹Z}lxeX}їJѲ/U qVEfRU|zc}*z)~bZL~u +-|߷|׹ +lә2lYG#}}:hNgS{;'&'v9/5HHC2`bi&1~hnAA,1q:ՈVn3I}P/ 1PŖ/Skf3-ƾM$dF d2\߽]KZVր]kHZc;W[kIȎ5vپZeùl[im'^ŠqٺD9zmE$a$kFlh+dbQ3E6^Y!,V^+6[1J×%`ͩx=0Zl[:ۆ-eC5cLY8it3D}0@Zh8ۼ3>/5՜| c4s͚j:dfӌ\#>31 >_!u`SDchƛS4ec ;irb510!?Цq## a3eSh<;K{QCCit!~AkCG ?)ZȐA i5LqE + _d`?l@o52U5e!}3T(SCBdvWB24 ֪g"H4QShzB%-)J"RtK]$y%˾H]II@v$.d*cdAbblxrb$]Hb`b`5 ҄وCL fI+=`"aKLPhM: JЪD45@4,Z%U"BQEy)+*K.z|,RD$(F2(RZqRDJ,K=-R"ĬDrD$ +"vD"3Lgx Goy!6E.@J^ tj<gnyܛ'}x3;T7jE3S}h=^Ag\=!>{)6(CГwսCzݣtU/A yWoK E3zW-m]6yҡ'K3umRXB&CQmąUms"Y*YErTpW \D~ +qzQCEzD R?5E'&A?6f6o}>B>cG&eA|H|<1d,(L3Mf%aM'e1sKIGH! 鉣Mp$ISxDRHbVa'j q.`R6Ho$.FV+`cԊq*A1Q$H "&J$:R%(CRHPDR$"(UI2(ڜv Pve"JZ8, +,&a6hF xzpQ@rIzM8Bj40?KVTj-T)dAp5N*I$TJ|H|rBQ(Fr+ +W%` + +W + "Vz_}W(pD8!, MՃo?46< ;^^`6ՃYIx9"ͥI @!ob1{I_ )/P/(b?Mӳt義z)xz6up:TS_"D=IG=i'$d/wQܟ,9}/͓ Z1LN=3Čc%oÿnO@w"TztkoS?|+AJ^?oFS xix=%X ai<[(1b1B-Mi +1Հ-z20ʨeDXUEԌqgd[f8 p[ ?<لQ&'mtlc! NNbn|]57ڏ>,xӺy䧁;_{Oׯoh.k mၶ`E#`H_ko׏]h iz9Eޞbo?A(CbV+J!eΟ8?Y zpƨ&F"ʎ/"Y]qE[%35f4jj{-jbY5Թ{Ϋk*uy%RG"8엱O^XGH`OC[.;E쀺el8z8[v׹u";lP#bԅT 89"*v89e]R^`'$kb1=l#/AG!ߑ2brlvzX3@u7a)d@K؞r- K~:%z+)"Nrֺk0N$$\=Y/:*aKGy+y@%|UOs Ӹ NJ%t5v-:xYwsKN'{K(Kv +l)a e0 :MrQO.pxk4g1!MFN()̩IXJ7ҍr()}ɽFat^ u!'L"yYґ;[i7#Y\n5{G!:ok-k6}@K[kQ=mڍqS5XU{jF2Mvj ;F Yi@ WDm+sT2R;Rbs-z 0gjjl2̦6AՅVNnTUY\2ώ縲<SkKstrdLQU,u7`e +2-3L^../[4ېjAO1{N6 J22IDZ3bi`'cIPzIO0ˡyi&FK3IJ^ekvQV"$aE(`dcBE^nĄ 0V-1"bzYM ̊FԢPDEޖ-4ZYX|e:?_yYF/r(9;9:7o6+ϴ,̝3C+ivt0YZħӃQX:=seƔ`5sD#'Q铂L +45RCM(mJdM$c jxqT "r| 8.@'c@ b˜IGʸ + yc0rTJPDz""L%|JPQ0JH+n(̸XM(e62PC*L!Ja4 +c 5#D(g1JÏ+X.tVD*$#4jJ1 (ZE(TS "ipHt(T<5BB S`/P~~~0O動V#F"VXcF/ApK9P4t쫡ˇAy'.f}$Oe̐Qw9y18܁z昪u:A4ϜS1Yo (dlIHw9N +tp8{K~Dqٓ}@1O'J^rof֗4k*ϝ*kOGPW{PYN@w[IQV̓9Um/>C?V;߁SVXC/'q^ ︌cBʜZ0GeA<58,kD8pDR;/cbG/g"gof]"v!ٻS/c*NL-,eDTc`9n^ +)y.^[oã=؉X)ezQ(e |;E TQzo}ɼ [D]8ZY(|VY%JHVU#՞X2v8z@ t65rWٯX. ΦTkAl+pmj=_e D4Wk% 2 lO)m8$*Ho5W81T> MeNTl)@gN:a0^C%NPPuSbZR})*$b64;ʈpA 8]TH*(󧢀a0|,֖GreY@i<`0%4 +D8x.dPy+Gp/#(CK2(nfw1Py;i[km:eMju*J)v/Ol `,M*JO$i v/_ؠRYH^h,Y-ij|+ 3 ً8OX3{Y@᳏ +f9lG̟kƔ!>m"F䣙&0f~͚a|8Fc3qF:3.B1>e$ԉhDðM!^2e<.jR4>0qQXG?&ܯqu#rhftN3*Z s=bqM4D1ZH:15H+a(\@;0"qS@FVDM09S@$6Y͈OBMPIhT +f#BMQ CtN qTA1-EqDE0 UR#D Q;/LȩP9BBBB`E*z_}WBøĭp'ð7_N'^?Il_?#l>ϧs7ɀ_~: y1 G30Wi}Sp.gxS`/ +v3i!??,yu$ɽ ${ _{/7@=?q^ܓyOwyX lC7;c[tcމv[˭h]xv3zzxw'Z&pg4; +-ګFGB&ҪX*hUUfUb UM <ȡ7QzKk"FGi#%,*֬W1 1*Dm()`yp`(a HYEYM!v"B2dΨU(nlɕ&Ww=/2qԝr@: 5l4k6+._:\PMr*Bl+p8(b PMJWهk;MZ @0Hh9E͕v\魜a +'&k*sP2'*wR%gN:EԿ\'(sDj)@M1->TQy6ex.v a$GhSQT~re4 FU7Q+H5+L"!X-$x=/l (,,spi@ll͛ț;3e -6wz Ҝi؜b#͜ +̘/kz߄L XjT!~L CBL ہjOhhnÕ0 Cm%(EQ+fBJҌ +YLlT0_A-HT{9<7Lj9H`R{/=#??{B^܃x,gw#i<w~W﷧"v+v;d!/7Q <`g! +59:FD8 /a{=؃adR.|,V!a֌\SB!i3&6"KhT8"ȩU_ \>i*)}YzN[u8RJ}Z#T|B@UѝbBߜX/Vrۿ-(˻IH@Q3R +9_)4@ {c/n 7珧rPП-NYod +e~q)C$=ҤhKa+Jr#BIÜD Ƀ}.8W{8q+\KÉ$\%_:p@lNݹSW,ÄB}(d/5>;B@.d}zBv 9kROF31!X {Iqs:{Ќ}r9`D-tz?)k` K]N#=n +c=V'LD :EАclБ.ywz1theg; 9&VZ@Ґuiahfĺ7њݛPF;v18VCЎV;d{ #ky'[Pg#a{H 4訷Tx`Zq V V,JFVs4UxSo\8a3BeGu6jhPSlC.@U .VU`6PQ@| K^^׷6b\} >TO@Re y)3k\ Wg+?eY-Yiar2X&&;ӌ0Z=y8ȄǕuHzg Z-S%ՈXyD8EIM1bJ rT(`J(AK/=lL>/(A'D4v25ՠ#v +b ](XUԋ6 fjԂ:8Q= 112ivC""iVPT$),1P$FjbD׫E4I$)) 'Vt3m'Y7$뤆 H*7_6_?+yO|}*OP/;^=@DWGwS_Vc~\/iʳtO yqiwԋOs:_ f S}oLJÃ>)7s^wE۝};p +nzN=~+N1+ +_}>>x~# |w+=0>n9)ƥ mOҭ.'HD@`"~Vm&N?QP)P Nqӧ85 gkBZI)_ԚjdW'&)&D/I&Ljp_?")R;b NQ!hŸkQEת#5F+dc.WF^Rtjb#VtaWKGmc6/Qjup"ąCvA}C8#v`3vn9ߍr%Bđޞءm^[=Cl"싩j?Pi%T>m&wQ8{6Xu)]k`ǚhv[+-qm^GlZx+Fٸ<6, ֕KXKrqU8k**ʂQV/ $LJV,+ +FKya-,Z4 fJc+ K}` o/!{̝3 N!L"fOo<3stNیYwL=qM2ȃ5u;*Ƹ 78ӄQn 'bH+q݈a(c?qbcQC]CQC@ .>rO>c d2};bG6D 1S`_z!;BԀָ~ŸX}z "[eSgD!Jl V~˲[n,)"7dMLvazXݻq ٕ+#0@[*F9K+pb +PQ>D#^ {ؘ|^ P.V&=NJp;hd j.AG86:&!P25B/5lXL!7 xs u(Rq$zbX#cd15,0(faEE6$IRYbHJĀ^WDiIRRNLg:N _= ~_|PԇWݝm3;;HQDIl(v`W,( +^-I|y"`]@M$73[;;s>ٳ{q0)5ǠO|y7Ǧ"Ѷׇ_ Qy}9ZxSzIjOĜ툖P]=@â@tۺ{(>Ao/W⾊wc/j{d2&]&Umt`efu\wʲgU2=v ,Y>%3{.Kg3IY 3smNM )ԩL2ȌOb|8%iR屉~d8NTʨ(7؉&=% e %1r/ST2B~I^;_=_9't2 Guc\>1.6Y1b p9.2C4 ,JX`!%͂0g,AgQV#}6L53k yOLXYHݶ{%N+#;,$[no :8mqOCdCZ9o̞˾MNLEѢB`ogCݽށpٕo=5`G3u^[eSNVMNAN`ӆvtr'Y)?N'`RBYԎYDV/v=JY.jg3vt<esh\;`Y696ti ]2fgfYC,i ˌ.̲dZgG̝a=݌fOٜ)f^&[͜d a9,j:ô &n5ej(ңcGc~з:?zNiBdaE-|?T}74-IJ˷@Cj HJ (ZA})x<(EÂ$cIx~}0N}5pJ"fɽ5^ Np$hj9[8^JS%(>F.q*$u+d1JYStJ*@t2ۥDenRPprN")Vf lVՌL\j1 A.5H&a2iy \Fi$-K%#WMDpT4>jJ%I#RF(,%V\ B;2X+`6\&ZIRDʤ2&)"9J"0+""B®V*,, _A]]]C4B '>1ćħ'OM4*I}x2q4X@1ڎ u2<}Ҽ)XG$ZS:6yW0O#QNy[1o%ۇ|MDn6C!4IPxY Y +\qBV@c4'Cj9cFυa WB.e3Iih."ZAn&,'z쑸TzITrܡ}wK?6?J,'ʲBzjO SoQ]iQ`fәa`ػF"HUz"B4"%XPl jMSܬyd9gνWarAi*J!P.;đJl\yI(lsd];\lgiϚ@jv;վm6B;S{t+w*ɷKpp;7۩vlq;6:XSg*ʅ!Eo0׍ +6؂v:;$۲c9J)"8{m̴ReX &/]Xnېn֧YغT+fmKNrUvIb-525!T\z卥ŇƙĆJxIJ\e `Aq+̈́ Ll,*f,˪/ef`L ʥ"V|ȭXl,_e &.0zYi f1a|Y7/<#KZ0@3|2 7of3gD͙=]f쬩n3y̬)Z3c3}˴:̔ 76ymG!IcTh㴘 c5 +1jF f(#Uoe5(xU(*_•T#8j̈0P%U;T0*yqXYN9nl! g1s`I!31`KP +ɨh nƀ!~PBFH_VkdtjZ;HVd*R%8 d P1T`E!g,H 1$Bd29 er(J׏,_5l0PC}N..oOޮ>60`w Xh |:og|:ճsvEyl'3+;?]AdtM{'RtNkNN^:9x_&=tZV 8CԯEXClw_MZ40x8cߖVdn?rEhDf*p&Pw"u@ψwp5|W? {~Fz]SC5pۢۢzcWx>qෲwG=>howsUO{){od+ +fOj}ÕaZOcblun 8h>6]#T ի|BdnFdn3 +0kJM 0 ۭrÎr{]-Rjoj?[ +>}mۓbWgg+pfW ~7pfCjB?j"z.贀SH4Kw@j9 Ǔ0ըg'℀[]^I8*UB@yT&a9 Q;aw}Wݨ]vj*+jd'EXkMѵK6 +{5_sr%+%#BT2T 89T}K**]`+;!5g,ETsbOt%8*Orr =(F OpTʼnpDq'ᇓ*-tR.p `ԹD1Nĩ8ϡLӯGNS9NE'r~8qTA  +nnYNLǸeL=$wه(a%`d3up7+){CeX*31?E؛bgڻE 2) fFoa6R7`lFdǎ$l~mlI6jsU֦6 bcYĪ(9ֆHZgcĵf*q ֊HXcA_+~YRG&*n !7_0S`}ǚ&j3Ј+&iReFI+ㄬXZcPl4ƨh"݅z#\<3O/ Ӓ(=b\[8GcANZb~^Ѽ:nsfy͝#LJFD"fOfM 4sj1%T!2-*p69*{'R#)*=#2\#)Ia,¡Q>,Fi IY,blJj^63Y`L^fe2173@zuQց 2h1>LHվFhhP J xAEC$XIfpQcj UD$@QMU@@RwMXu!χW}JoO_?}~`>q%F+x Xl|$͛0F֫) BBY/G( Bbdbgx1<bt?Z?t_F"~U$~O9ߏrxhewJ~7[hEJ0O?̘Y.MS)T Cֿ?"C?gwdH|<7ߎozz+\1w5ܞ n9=4nN<1cۣ߰7Y6ɝ/b #9ӪRM3T *UVwL(Z&ILu30GkTIbhJe֒*AfdU9h3Ҁ!P8p1quH>B'MӪH1‚Tp{pɜuKnv@Kpo{/: >i86w^צ=+ EzXvP#-hn\dKnٿdg7{@=~wwB8I>yo"/)p@MHk=)@!|H!:מZRCJڽ rCvVQvT +«`5 +XNsRT})} /|+&ܐ" +RSHT]4U'%Us rpQ٘hF,\Tq&2 Hqtf 4N^*Ƈ榸@LNM'' ceosy$S= 204D20ǻ -))u @J,zh=ʼnx h9A|xx{q|hf;dk >ntBb68ز.*z Dop"uHZ;ۼnȵ6Q>  ? ij 8XԺc0FU6+d`8!4G+, x.7Ӭߪe r٧KLK->-[bf Z `-oT-g,kpAp `QּYzFͼQsg5s 93c̞S5]5] iTAj!Sô)JLXPN թBcQQ!PRZUr` +G0ԋp!p 9́.G崩NF!j/{QجjIe5{1<&2"`5ҧAd6 &'NZjUr*ШDjZKOU#t%BE'ijRR**7CR(DM```0"HE>>e z]k*˫,~yzV",;o",~m0O'K޹F z5W֫~^q"~|~pA _zAp?|tOi)ڗީ eʋ;!w;lF^rnSa[З7=fB}~p +:r #7Cˑgw"w"WN4+JV+BPFi2\MZe!0TtBZ̮GddVFurI-w2 s, F2  c̎yi4B~(j0-ri MI$%rYޓ-S9w;_|yv+jGzz -Ng 7 ]g㔘'Ntq\1H`;S9uDaC~p@L~6?Z'31{"ak$W<9>yKw+!'#rG(/6+z<#=f7YN?c%,#o$ lKD) _J`d8F܍Oo+O,g.F@hA{ s'oK_&Hڦ+GlXޛqjuEASuYUOXUNZ4ՕVO]6`Q_Eek51;6.>_oo;4\hwi~{)CHt?tttSsAĜُMsŧ>݆kNbq:JNýZG@:?!b~c{ CB[ݸ#N&! +j&4oLs5}jk WGN:מZRCJڽ rCvVQvT +bT9SC1*(V#C/%@CR_BTWL +!EhTU! +(POJȃ~J1%YL e iE8(AA:6ni8$/㠜&〓rp80CJLzOLFHT(=iqNI[]OPb82h W|EqqNپ;gwE ,XPhz梞(K.wK'70<κ2 >gN>fYdUYS& +h +*J̀JiOMDq (hU8(Aƛ +}5$&%PdF17ʀȱ9z3٠,Q:@NAL=`p( N{ei R,3U 󑑬JO(ӓu$_ 5^L@%Ǫ@RGb +IЄ5&?L%+. +Jl +ё!QH7PH7AB]qQ!"WHc'6/d .)lfTD)ҘjVYh\M(KN1L e 8zNf0j٩ kPNUT>ju*,TYBPPb8JXI gO(SJ)0BpT)$ $,,LLHhhh4|"IHH CP2pFX/G޾: { ^4cw/5w2ق_f C"სtYv /]_*K+{;ۿ%;y4}|I|i`?} ӣ? C`< c"vQZ[{dDNF)='桁z"Mt'|s{xsC؉~d{8-FylZ1 K !n A<8eaҪ;GqM!v-a Nq4c!61i)jшuc'IĭӅ(E\63Qm##&Dho9/]zӶ:ֿhoi?yEbc,DKg7y7tݐs +f]'ht81]>ɽA:M;pvnи 8!pNg Hv(wp#}|EcV%BVf`&Fػ ʞ.]Y;;E\ E>[kkj:-u .-ͫM+M+\6.g$".Fֺkke.bRƯK@uZZYmv 'bj;Q X^_|QS ͷ%sR/cvEvA,עJY=.F- w0U3x ;A̟nY;&Sa9FTN,CpfYXVbz^&[93`j M,*B)Pe4QVhXf_%4T&8M4*`IMP>ǚyF@h(D\7#ɱ9F\lHCPFgrFe9YY#3u ;]di$tJT-`xGF*=ILOҒ~&jRԂx2%NV&kIqj* &!BbԘX0h*(*@DGRXDa"݄"ʣB"ݔO vEnp>\\"rpvJ,QJc +[ݝݙ/Eco;XE,4v좂K,QM5`vś ܙ]f}ߗww]1y>9󜑈A&A$K"6(Zi|D @&DZNVXQH%CJ/K. A2X +gddBPR)HhJblAl3 HGAo$HDH$" +EhH‘'=IOz?63/Gj=4L!ꎖRt,mdztm7oiw֜=a}SZwhB/q@w;rNF)Z]Im A$Xo!!Q!y]yS'C֫q){/a?EmLwBgM&!ix=ʹ܋gZzK̞?3k,W;8۽oE2ͿM<i]G\g8v)q^E޹P".Κ#L0GD pHAI/裷 2ʊ2J-0(NN +Q:jVBl*^:if2I +3"^% LT];cs5*/5W_}cE_4<+B!~ ⴇgЩ [Dw: =@eA8:W5چRۃֺ!0q PkU=Ac*]ӏAl؆Z ڊ[8+~m(c9O64)v@ W 7\,# +o5"U*W@+]\rx/e5E?._Xs c)b `,9w+}pͽ}34ߧys;o6j/'9fo&bƌCt4[ ޴2T)U nB&g,LLM<› L<4aRK*ӊYDev\G]=#Xu@^+ctLG^-r=Zf L>W=.1\>إRJRa3C& +ft +9woؙi Z?wjDc %VS{>'K'v|KmAaa ɑHv;6Am~p`Iy6;@žN:{lrBJ6:NBGHvF(pzljNNE@~XkZ5;8=؝MXU΀ +W:\'dC#˱벝,/z +o;UmX+tn2ӿE6:'Fg/~ m [6.gAKZ6Y2 +-keXhfi,+`Y4¡0`3$ 3wYʢ h͙523'xR1 4дf@g3u1uk=e6<4 XF 4@󵮋#Qo:ȨaZP=ây#@RC5b1X' O׆d 4M@C!Ӵ@j}h<Ғ>40I"5A_)IIPCJWz$S$ũ$}X +IBҿX9/FFQP>$6ZAzG˨^Q I$(:RET(t0Xv MJ[~٬0IlQ" Rcԓ,ؠkjCq4i:[bFIB +" \ + +/\$db1+a4CiZBI#)Rɮ$(")I~@ 9b A1&"P(" G/'=LG)0/Ӵ?o{6B%]y9U֔xhiw<{t A=E7ԟ;jm[W +]C>YJH$; x<Z]x0~!Z|WX\0~>'?.~XM𽗏~nP06s}?ktOأ(4-ag\@U=53b>yzG?at7tYz~Mt߉C5Fg&EeN s;ign[Ƿ-(vF=n޷@1mpF24FD@ "a !$2"L%'J Q,0ńI#&J%q1ʥ.jT*)l(JBIA"&"5LF$$AjCm3WW߫=fB^kMEAGm5PRp9_wa{8UJ?a9+`Y?p6;Nq +̏RXΛ.7NxQqщUq̏^08n>?zc7ZG-l~}fub;6?btew[ׁBFaz$~ v|xeFNFە /򭇬KpXu"b @́dsZ/p5 YqԖ`d𬆤Ö5UsV6V,s> XPs'u@+)-ܪKX8E%4,B nI7JĤ`l`޵>%^+5z 03&}oɺ2e0Kp\E^9"/V XS~kWXKUKejPyL*պ]<RsB7M "؅Tx\U]t̀8T:(:wDSaqȊ&p<4>`t+?lqPJ'^3d q|FmmQ˄8n 2(Q[>* n1X +̓궷'voAl$+b&W;6]o0 ȳm{>Uޛ(̌`Ӂ^Ż|Ax<B^<~} 7ߋ$gw>% b6̧d{g]һt7k0ݍvN1=31-Q Xys4y|tbd~ckWc$Ţ{ZbgH^oiy0ADhV +xjw!R(V +>AU2 +)DfARBJ ͅ:XJD\,\wp# "b1h. >qJ4 xOx|y|.M`8:::QH,J099Y"M=yj'˥SO= VL=yOk,Vw~ +y;o15S~?A &[b25.W6'!lnPSAoPQ/ȻWc M^aGw!@1Ύ{90`Á|y?1#ѿùC6ߧ s>΃ٴ^K7Uz//-/ w{i6eHc:3/#_G^;rɀ6ǟ xOn?şSO㷃~x7P.sth$K&#ZQ"ՙJ(\L4Z7YY 8]q8Q9n +F)8s޸pbƥ+@?xPegNR a~kY;l58mG+bEM4N! ,NY8aqc,MبJ}Lqš[8@ž-@{Mzb +2C.;vҨNULv=@J⍪Rv`F'*5oEyhW,gr)XHq֣ˈ̇"bWڢТdm|< wyi/nfKcMJAK$\2RSI#nRot-*sIg8p: +%v!1k-ф(Xt3)"EG6Dv7B[wׇ4!!uk}2."v9j"RIJ!R.v l:n:=-BFVgZ]_ +U*"9߹{ݪ/i1jV&F5Wx]ߨtF'q]2]:ipXXAPafreO`WjA4gMN8C,Nf^ !gaB8A'n5^䑈a:N"NZ2BT#9VB˶!ʲIDQ^8$!l @,#]TA !2a9awM9;H5#G"5LvOmQNY!6qivpdT2R 3Ŏ8&*##ғlIC'`nHE ڷjv+m{Zy%o-$"9AXR$&Xx'ge-|׎X3߱ +lhUm,-Ė f'a OXg4Sį53@ wq76Yxm|624&Bu+4X]`Yn0 V/QTRBD/12l^+%&b#b"bbOyEMK׉ZC~VkEu"Ӡ`};W iĂ5 5NMþyPsgz1gFAQ4n9͜v5%C-͘>IaZd S#Ո)Mp4A69

overrides the installation prefix + --exec-prefix= overrides the executable installation prefix + --libdir= overrides the library installation prefix + --includedir= overrides the header file installation prefix + + Installation Queries: + --prefix installation prefix + --exec-prefix executable installation prefix + --libdir library installation directory + --includedir header file installation directory + --version the version of the Google Test installation + + Version Queries: + --min-version=VERSION return 0 if the version is at least VERSION + --exact-version=VERSION return 0 if the version is exactly VERSION + --max-version=VERSION return 0 if the version is at most VERSION + + Compilation Flag Queries: + --cppflags compile flags specific to the C-like preprocessors + --cxxflags compile flags appropriate for C++ programs + --ldflags linker flags + --libs libraries for linking + +EOF +} + +# This function bounds our version with a min and a max. It uses some clever +# POSIX-compliant variable expansion to portably do all the work in the shell +# and avoid any dependency on a particular "sed" or "awk" implementation. +# Notable is that it will only ever compare the first 3 components of versions. +# Further components will be cleanly stripped off. All versions must be +# unadorned, so "v1.0" will *not* work. The minimum version must be in $1, and +# the max in $2. TODO(chandlerc@google.com): If this ever breaks, we should +# investigate expanding this via autom4te from AS_VERSION_COMPARE rather than +# continuing to maintain our own shell version. +check_versions() +{ + major_version=${version%%.*} + minor_version="0" + point_version="0" + if test "${version#*.}" != "${version}"; then + minor_version=${version#*.} + minor_version=${minor_version%%.*} + fi + if test "${version#*.*.}" != "${version}"; then + point_version=${version#*.*.} + point_version=${point_version%%.*} + fi + + min_version="$1" + min_major_version=${min_version%%.*} + min_minor_version="0" + min_point_version="0" + if test "${min_version#*.}" != "${min_version}"; then + min_minor_version=${min_version#*.} + min_minor_version=${min_minor_version%%.*} + fi + if test "${min_version#*.*.}" != "${min_version}"; then + min_point_version=${min_version#*.*.} + min_point_version=${min_point_version%%.*} + fi + + max_version="$2" + max_major_version=${max_version%%.*} + max_minor_version="0" + max_point_version="0" + if test "${max_version#*.}" != "${max_version}"; then + max_minor_version=${max_version#*.} + max_minor_version=${max_minor_version%%.*} + fi + if test "${max_version#*.*.}" != "${max_version}"; then + max_point_version=${max_version#*.*.} + max_point_version=${max_point_version%%.*} + fi + + test $(($major_version)) -lt $(($min_major_version)) && exit 1 + if test $(($major_version)) -eq $(($min_major_version)); then + test $(($minor_version)) -lt $(($min_minor_version)) && exit 1 + if test $(($minor_version)) -eq $(($min_minor_version)); then + test $(($point_version)) -lt $(($min_point_version)) && exit 1 + fi + fi + + test $(($major_version)) -gt $(($max_major_version)) && exit 1 + if test $(($major_version)) -eq $(($max_major_version)); then + test $(($minor_version)) -gt $(($max_minor_version)) && exit 1 + if test $(($minor_version)) -eq $(($max_minor_version)); then + test $(($point_version)) -gt $(($max_point_version)) && exit 1 + fi + fi + + exit 0 +} + +# Show the usage line when no arguments are specified. +if test $# -eq 0; then + show_usage + exit 1 +fi + +while test $# -gt 0; do + case $1 in + --usage) show_usage; exit 0;; + --help) show_help; exit 0;; + + # Installation overrides + --prefix=*) GTEST_PREFIX=${1#--prefix=};; + --exec-prefix=*) GTEST_EXEC_PREFIX=${1#--exec-prefix=};; + --libdir=*) GTEST_LIBDIR=${1#--libdir=};; + --includedir=*) GTEST_INCLUDEDIR=${1#--includedir=};; + + # Installation queries + --prefix|--exec-prefix|--libdir|--includedir|--version) + if test -n "${do_query}"; then + show_usage + exit 1 + fi + do_query=${1#--} + ;; + + # Version checking + --min-version=*) + do_check_versions=yes + min_version=${1#--min-version=} + ;; + --max-version=*) + do_check_versions=yes + max_version=${1#--max-version=} + ;; + --exact-version=*) + do_check_versions=yes + exact_version=${1#--exact-version=} + ;; + + # Compiler flag output + --cppflags) echo_cppflags=yes;; + --cxxflags) echo_cxxflags=yes;; + --ldflags) echo_ldflags=yes;; + --libs) echo_libs=yes;; + + # Everything else is an error + *) show_usage; exit 1;; + esac + shift +done + +# These have defaults filled in by the configure script but can also be +# overridden by environment variables or command line parameters. +prefix="${GTEST_PREFIX:-@prefix@}" +exec_prefix="${GTEST_EXEC_PREFIX:-@exec_prefix@}" +libdir="${GTEST_LIBDIR:-@libdir@}" +includedir="${GTEST_INCLUDEDIR:-@includedir@}" + +# We try and detect if our binary is not located at its installed location. If +# it's not, we provide variables pointing to the source and build tree rather +# than to the install tree. This allows building against a just-built gtest +# rather than an installed gtest. +bindir="@bindir@" +this_relative_bindir=`dirname $0` +this_bindir=`cd ${this_relative_bindir}; pwd -P` +if test "${this_bindir}" = "${this_bindir%${bindir}}"; then + # The path to the script doesn't end in the bindir sequence from Autoconf, + # assume that we are in a build tree. + build_dir=`dirname ${this_bindir}` + src_dir=`cd ${this_bindir}/@top_srcdir@; pwd -P` + + # TODO(chandlerc@google.com): This is a dangerous dependency on libtool, we + # should work to remove it, and/or remove libtool altogether, replacing it + # with direct references to the library and a link path. + gtest_libs="${build_dir}/lib/libgtest.la @PTHREAD_CFLAGS@ @PTHREAD_LIBS@" + gtest_ldflags="" + + # We provide hooks to include from either the source or build dir, where the + # build dir is always preferred. This will potentially allow us to write + # build rules for generated headers and have them automatically be preferred + # over provided versions. + gtest_cppflags="-I${build_dir}/include -I${src_dir}/include" + gtest_cxxflags="@PTHREAD_CFLAGS@" +else + # We're using an installed gtest, although it may be staged under some + # prefix. Assume (as our own libraries do) that we can resolve the prefix, + # and are present in the dynamic link paths. + gtest_ldflags="-L${libdir}" + gtest_libs="-l${name} @PTHREAD_CFLAGS@ @PTHREAD_LIBS@" + gtest_cppflags="-I${includedir}" + gtest_cxxflags="@PTHREAD_CFLAGS@" +fi + +# Do an installation query if requested. +if test -n "$do_query"; then + case $do_query in + prefix) echo $prefix; exit 0;; + exec-prefix) echo $exec_prefix; exit 0;; + libdir) echo $libdir; exit 0;; + includedir) echo $includedir; exit 0;; + version) echo $version; exit 0;; + *) show_usage; exit 1;; + esac +fi + +# Do a version check if requested. +if test "$do_check_versions" = "yes"; then + # Make sure we didn't receive a bad combination of parameters. + test "$echo_cppflags" = "yes" && show_usage && exit 1 + test "$echo_cxxflags" = "yes" && show_usage && exit 1 + test "$echo_ldflags" = "yes" && show_usage && exit 1 + test "$echo_libs" = "yes" && show_usage && exit 1 + + if test "$exact_version" != ""; then + check_versions $exact_version $exact_version + # unreachable + else + check_versions ${min_version:-0.0.0} ${max_version:-9999.9999.9999} + # unreachable + fi +fi + +# Do the output in the correct order so that these can be used in-line of +# a compiler invocation. +output="" +test "$echo_cppflags" = "yes" && output="$output $gtest_cppflags" +test "$echo_cxxflags" = "yes" && output="$output $gtest_cxxflags" +test "$echo_ldflags" = "yes" && output="$output $gtest_ldflags" +test "$echo_libs" = "yes" && output="$output $gtest_libs" +echo $output + +exit 0 diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/pump.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/pump.py new file mode 100755 index 00000000..f15c1b6c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/pump.py @@ -0,0 +1,835 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""pump v0.1 - Pretty Useful for Meta Programming. + +A tool for preprocessor meta programming. Useful for generating +repetitive boilerplate code. Especially useful for writing C++ +classes, functions, macros, and templates that need to work with +various number of arguments. + +USAGE: + pump.py SOURCE_FILE + +EXAMPLES: + pump.py foo.cc.pump + Converts foo.cc.pump to foo.cc. + +GRAMMAR: + CODE ::= ATOMIC_CODE* + ATOMIC_CODE ::= $var ID = EXPRESSION + | $var ID = [[ CODE ]] + | $range ID EXPRESSION..EXPRESSION + | $for ID SEPARATOR [[ CODE ]] + | $($) + | $ID + | $(EXPRESSION) + | $if EXPRESSION [[ CODE ]] ELSE_BRANCH + | [[ CODE ]] + | RAW_CODE + SEPARATOR ::= RAW_CODE | EMPTY + ELSE_BRANCH ::= $else [[ CODE ]] + | $elif EXPRESSION [[ CODE ]] ELSE_BRANCH + | EMPTY + EXPRESSION has Python syntax. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import re +import sys + + +TOKEN_TABLE = [ + (re.compile(r'\$var\s+'), '$var'), + (re.compile(r'\$elif\s+'), '$elif'), + (re.compile(r'\$else\s+'), '$else'), + (re.compile(r'\$for\s+'), '$for'), + (re.compile(r'\$if\s+'), '$if'), + (re.compile(r'\$range\s+'), '$range'), + (re.compile(r'\$[_A-Za-z]\w*'), '$id'), + (re.compile(r'\$\(\$\)'), '$($)'), + (re.compile(r'\$\$.*'), '$$'), + (re.compile(r'\$'), '$'), + (re.compile(r'\[\[\n?'), '[['), + (re.compile(r'\]\]\n?'), ']]'), + ] + + +class Cursor: + """Represents a position (line and column) in a text file.""" + + def __init__(self, line=-1, column=-1): + self.line = line + self.column = column + + def __eq__(self, rhs): + return self.line == rhs.line and self.column == rhs.column + + def __ne__(self, rhs): + return not self == rhs + + def __lt__(self, rhs): + return self.line < rhs.line or ( + self.line == rhs.line and self.column < rhs.column) + + def __le__(self, rhs): + return self < rhs or self == rhs + + def __gt__(self, rhs): + return rhs < self + + def __ge__(self, rhs): + return rhs <= self + + def __str__(self): + if self == Eof(): + return 'EOF' + else: + return '%s(%s)' % (self.line + 1, self.column) + + def __add__(self, offset): + return Cursor(self.line, self.column + offset) + + def __sub__(self, offset): + return Cursor(self.line, self.column - offset) + + def Clone(self): + """Returns a copy of self.""" + + return Cursor(self.line, self.column) + + +# Special cursor to indicate the end-of-file. +def Eof(): + """Returns the special cursor to denote the end-of-file.""" + return Cursor(-1, -1) + + +class Token: + """Represents a token in a Pump source file.""" + + def __init__(self, start=None, end=None, value=None, token_type=None): + if start is None: + self.start = Eof() + else: + self.start = start + if end is None: + self.end = Eof() + else: + self.end = end + self.value = value + self.token_type = token_type + + def __str__(self): + return 'Token @%s: \'%s\' type=%s' % ( + self.start, self.value, self.token_type) + + def Clone(self): + """Returns a copy of self.""" + + return Token(self.start.Clone(), self.end.Clone(), self.value, + self.token_type) + + +def StartsWith(lines, pos, string): + """Returns True iff the given position in lines starts with 'string'.""" + + return lines[pos.line][pos.column:].startswith(string) + + +def FindFirstInLine(line, token_table): + best_match_start = -1 + for (regex, token_type) in token_table: + m = regex.search(line) + if m: + # We found regex in lines + if best_match_start < 0 or m.start() < best_match_start: + best_match_start = m.start() + best_match_length = m.end() - m.start() + best_match_token_type = token_type + + if best_match_start < 0: + return None + + return (best_match_start, best_match_length, best_match_token_type) + + +def FindFirst(lines, token_table, cursor): + """Finds the first occurrence of any string in strings in lines.""" + + start = cursor.Clone() + cur_line_number = cursor.line + for line in lines[start.line:]: + if cur_line_number == start.line: + line = line[start.column:] + m = FindFirstInLine(line, token_table) + if m: + # We found a regex in line. + (start_column, length, token_type) = m + if cur_line_number == start.line: + start_column += start.column + found_start = Cursor(cur_line_number, start_column) + found_end = found_start + length + return MakeToken(lines, found_start, found_end, token_type) + cur_line_number += 1 + # We failed to find str in lines + return None + + +def SubString(lines, start, end): + """Returns a substring in lines.""" + + if end == Eof(): + end = Cursor(len(lines) - 1, len(lines[-1])) + + if start >= end: + return '' + + if start.line == end.line: + return lines[start.line][start.column:end.column] + + result_lines = ([lines[start.line][start.column:]] + + lines[start.line + 1:end.line] + + [lines[end.line][:end.column]]) + return ''.join(result_lines) + + +def MakeToken(lines, start, end, token_type): + """Creates a new instance of Token.""" + + return Token(start, end, SubString(lines, start, end), token_type) + + +def ParseToken(lines, pos, regex, token_type): + line = lines[pos.line][pos.column:] + m = regex.search(line) + if m and not m.start(): + return MakeToken(lines, pos, pos + m.end(), token_type) + else: + print 'ERROR: %s expected at %s.' % (token_type, pos) + sys.exit(1) + + +ID_REGEX = re.compile(r'[_A-Za-z]\w*') +EQ_REGEX = re.compile(r'=') +REST_OF_LINE_REGEX = re.compile(r'.*?(?=$|\$\$)') +OPTIONAL_WHITE_SPACES_REGEX = re.compile(r'\s*') +WHITE_SPACE_REGEX = re.compile(r'\s') +DOT_DOT_REGEX = re.compile(r'\.\.') + + +def Skip(lines, pos, regex): + line = lines[pos.line][pos.column:] + m = re.search(regex, line) + if m and not m.start(): + return pos + m.end() + else: + return pos + + +def SkipUntil(lines, pos, regex, token_type): + line = lines[pos.line][pos.column:] + m = re.search(regex, line) + if m: + return pos + m.start() + else: + print ('ERROR: %s expected on line %s after column %s.' % + (token_type, pos.line + 1, pos.column)) + sys.exit(1) + + +def ParseExpTokenInParens(lines, pos): + def ParseInParens(pos): + pos = Skip(lines, pos, OPTIONAL_WHITE_SPACES_REGEX) + pos = Skip(lines, pos, r'\(') + pos = Parse(pos) + pos = Skip(lines, pos, r'\)') + return pos + + def Parse(pos): + pos = SkipUntil(lines, pos, r'\(|\)', ')') + if SubString(lines, pos, pos + 1) == '(': + pos = Parse(pos + 1) + pos = Skip(lines, pos, r'\)') + return Parse(pos) + else: + return pos + + start = pos.Clone() + pos = ParseInParens(pos) + return MakeToken(lines, start, pos, 'exp') + + +def RStripNewLineFromToken(token): + if token.value.endswith('\n'): + return Token(token.start, token.end, token.value[:-1], token.token_type) + else: + return token + + +def TokenizeLines(lines, pos): + while True: + found = FindFirst(lines, TOKEN_TABLE, pos) + if not found: + yield MakeToken(lines, pos, Eof(), 'code') + return + + if found.start == pos: + prev_token = None + prev_token_rstripped = None + else: + prev_token = MakeToken(lines, pos, found.start, 'code') + prev_token_rstripped = RStripNewLineFromToken(prev_token) + + if found.token_type == '$$': # A meta comment. + if prev_token_rstripped: + yield prev_token_rstripped + pos = Cursor(found.end.line + 1, 0) + elif found.token_type == '$var': + if prev_token_rstripped: + yield prev_token_rstripped + yield found + id_token = ParseToken(lines, found.end, ID_REGEX, 'id') + yield id_token + pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX) + + eq_token = ParseToken(lines, pos, EQ_REGEX, '=') + yield eq_token + pos = Skip(lines, eq_token.end, r'\s*') + + if SubString(lines, pos, pos + 2) != '[[': + exp_token = ParseToken(lines, pos, REST_OF_LINE_REGEX, 'exp') + yield exp_token + pos = Cursor(exp_token.end.line + 1, 0) + elif found.token_type == '$for': + if prev_token_rstripped: + yield prev_token_rstripped + yield found + id_token = ParseToken(lines, found.end, ID_REGEX, 'id') + yield id_token + pos = Skip(lines, id_token.end, WHITE_SPACE_REGEX) + elif found.token_type == '$range': + if prev_token_rstripped: + yield prev_token_rstripped + yield found + id_token = ParseToken(lines, found.end, ID_REGEX, 'id') + yield id_token + pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX) + + dots_pos = SkipUntil(lines, pos, DOT_DOT_REGEX, '..') + yield MakeToken(lines, pos, dots_pos, 'exp') + yield MakeToken(lines, dots_pos, dots_pos + 2, '..') + pos = dots_pos + 2 + new_pos = Cursor(pos.line + 1, 0) + yield MakeToken(lines, pos, new_pos, 'exp') + pos = new_pos + elif found.token_type == '$': + if prev_token: + yield prev_token + yield found + exp_token = ParseExpTokenInParens(lines, found.end) + yield exp_token + pos = exp_token.end + elif (found.token_type == ']]' or found.token_type == '$if' or + found.token_type == '$elif' or found.token_type == '$else'): + if prev_token_rstripped: + yield prev_token_rstripped + yield found + pos = found.end + else: + if prev_token: + yield prev_token + yield found + pos = found.end + + +def Tokenize(s): + lines = s.splitlines(True) + return TokenizeLines(lines, Cursor(0, 0)) + + +class CodeNode: + def __init__(self, atomic_code_list=None): + self.atomic_code = atomic_code_list + + +class VarNode: + def __init__(self, identifier=None, atomic_code=None): + self.identifier = identifier + self.atomic_code = atomic_code + + +class RangeNode: + def __init__(self, identifier=None, exp1=None, exp2=None): + self.identifier = identifier + self.exp1 = exp1 + self.exp2 = exp2 + + +class ForNode: + def __init__(self, identifier=None, sep=None, code=None): + self.identifier = identifier + self.sep = sep + self.code = code + + +class ElseNode: + def __init__(self, else_branch=None): + self.else_branch = else_branch + + +class IfNode: + def __init__(self, exp=None, then_branch=None, else_branch=None): + self.exp = exp + self.then_branch = then_branch + self.else_branch = else_branch + + +class RawCodeNode: + def __init__(self, token=None): + self.raw_code = token + + +class LiteralDollarNode: + def __init__(self, token): + self.token = token + + +class ExpNode: + def __init__(self, token, python_exp): + self.token = token + self.python_exp = python_exp + + +def PopFront(a_list): + head = a_list[0] + a_list[:1] = [] + return head + + +def PushFront(a_list, elem): + a_list[:0] = [elem] + + +def PopToken(a_list, token_type=None): + token = PopFront(a_list) + if token_type is not None and token.token_type != token_type: + print 'ERROR: %s expected at %s' % (token_type, token.start) + print 'ERROR: %s found instead' % (token,) + sys.exit(1) + + return token + + +def PeekToken(a_list): + if not a_list: + return None + + return a_list[0] + + +def ParseExpNode(token): + python_exp = re.sub(r'([_A-Za-z]\w*)', r'self.GetValue("\1")', token.value) + return ExpNode(token, python_exp) + + +def ParseElseNode(tokens): + def Pop(token_type=None): + return PopToken(tokens, token_type) + + next = PeekToken(tokens) + if not next: + return None + if next.token_type == '$else': + Pop('$else') + Pop('[[') + code_node = ParseCodeNode(tokens) + Pop(']]') + return code_node + elif next.token_type == '$elif': + Pop('$elif') + exp = Pop('code') + Pop('[[') + code_node = ParseCodeNode(tokens) + Pop(']]') + inner_else_node = ParseElseNode(tokens) + return CodeNode([IfNode(ParseExpNode(exp), code_node, inner_else_node)]) + elif not next.value.strip(): + Pop('code') + return ParseElseNode(tokens) + else: + return None + + +def ParseAtomicCodeNode(tokens): + def Pop(token_type=None): + return PopToken(tokens, token_type) + + head = PopFront(tokens) + t = head.token_type + if t == 'code': + return RawCodeNode(head) + elif t == '$var': + id_token = Pop('id') + Pop('=') + next = PeekToken(tokens) + if next.token_type == 'exp': + exp_token = Pop() + return VarNode(id_token, ParseExpNode(exp_token)) + Pop('[[') + code_node = ParseCodeNode(tokens) + Pop(']]') + return VarNode(id_token, code_node) + elif t == '$for': + id_token = Pop('id') + next_token = PeekToken(tokens) + if next_token.token_type == 'code': + sep_token = next_token + Pop('code') + else: + sep_token = None + Pop('[[') + code_node = ParseCodeNode(tokens) + Pop(']]') + return ForNode(id_token, sep_token, code_node) + elif t == '$if': + exp_token = Pop('code') + Pop('[[') + code_node = ParseCodeNode(tokens) + Pop(']]') + else_node = ParseElseNode(tokens) + return IfNode(ParseExpNode(exp_token), code_node, else_node) + elif t == '$range': + id_token = Pop('id') + exp1_token = Pop('exp') + Pop('..') + exp2_token = Pop('exp') + return RangeNode(id_token, ParseExpNode(exp1_token), + ParseExpNode(exp2_token)) + elif t == '$id': + return ParseExpNode(Token(head.start + 1, head.end, head.value[1:], 'id')) + elif t == '$($)': + return LiteralDollarNode(head) + elif t == '$': + exp_token = Pop('exp') + return ParseExpNode(exp_token) + elif t == '[[': + code_node = ParseCodeNode(tokens) + Pop(']]') + return code_node + else: + PushFront(tokens, head) + return None + + +def ParseCodeNode(tokens): + atomic_code_list = [] + while True: + if not tokens: + break + atomic_code_node = ParseAtomicCodeNode(tokens) + if atomic_code_node: + atomic_code_list.append(atomic_code_node) + else: + break + return CodeNode(atomic_code_list) + + +def Convert(file_path): + s = file(file_path, 'r').read() + tokens = [] + for token in Tokenize(s): + tokens.append(token) + code_node = ParseCodeNode(tokens) + return code_node + + +class Env: + def __init__(self): + self.variables = [] + self.ranges = [] + + def Clone(self): + clone = Env() + clone.variables = self.variables[:] + clone.ranges = self.ranges[:] + return clone + + def PushVariable(self, var, value): + # If value looks like an int, store it as an int. + try: + int_value = int(value) + if ('%s' % int_value) == value: + value = int_value + except Exception: + pass + self.variables[:0] = [(var, value)] + + def PopVariable(self): + self.variables[:1] = [] + + def PushRange(self, var, lower, upper): + self.ranges[:0] = [(var, lower, upper)] + + def PopRange(self): + self.ranges[:1] = [] + + def GetValue(self, identifier): + for (var, value) in self.variables: + if identifier == var: + return value + + print 'ERROR: meta variable %s is undefined.' % (identifier,) + sys.exit(1) + + def EvalExp(self, exp): + try: + result = eval(exp.python_exp) + except Exception, e: + print 'ERROR: caught exception %s: %s' % (e.__class__.__name__, e) + print ('ERROR: failed to evaluate meta expression %s at %s' % + (exp.python_exp, exp.token.start)) + sys.exit(1) + return result + + def GetRange(self, identifier): + for (var, lower, upper) in self.ranges: + if identifier == var: + return (lower, upper) + + print 'ERROR: range %s is undefined.' % (identifier,) + sys.exit(1) + + +class Output: + def __init__(self): + self.string = '' + + def GetLastLine(self): + index = self.string.rfind('\n') + if index < 0: + return '' + + return self.string[index + 1:] + + def Append(self, s): + self.string += s + + +def RunAtomicCode(env, node, output): + if isinstance(node, VarNode): + identifier = node.identifier.value.strip() + result = Output() + RunAtomicCode(env.Clone(), node.atomic_code, result) + value = result.string + env.PushVariable(identifier, value) + elif isinstance(node, RangeNode): + identifier = node.identifier.value.strip() + lower = int(env.EvalExp(node.exp1)) + upper = int(env.EvalExp(node.exp2)) + env.PushRange(identifier, lower, upper) + elif isinstance(node, ForNode): + identifier = node.identifier.value.strip() + if node.sep is None: + sep = '' + else: + sep = node.sep.value + (lower, upper) = env.GetRange(identifier) + for i in range(lower, upper + 1): + new_env = env.Clone() + new_env.PushVariable(identifier, i) + RunCode(new_env, node.code, output) + if i != upper: + output.Append(sep) + elif isinstance(node, RawCodeNode): + output.Append(node.raw_code.value) + elif isinstance(node, IfNode): + cond = env.EvalExp(node.exp) + if cond: + RunCode(env.Clone(), node.then_branch, output) + elif node.else_branch is not None: + RunCode(env.Clone(), node.else_branch, output) + elif isinstance(node, ExpNode): + value = env.EvalExp(node) + output.Append('%s' % (value,)) + elif isinstance(node, LiteralDollarNode): + output.Append('$') + elif isinstance(node, CodeNode): + RunCode(env.Clone(), node, output) + else: + print 'BAD' + print node + sys.exit(1) + + +def RunCode(env, code_node, output): + for atomic_code in code_node.atomic_code: + RunAtomicCode(env, atomic_code, output) + + +def IsComment(cur_line): + return '//' in cur_line + + +def IsInPreprocessorDirevative(prev_lines, cur_line): + if cur_line.lstrip().startswith('#'): + return True + return prev_lines != [] and prev_lines[-1].endswith('\\') + + +def WrapComment(line, output): + loc = line.find('//') + before_comment = line[:loc].rstrip() + if before_comment == '': + indent = loc + else: + output.append(before_comment) + indent = len(before_comment) - len(before_comment.lstrip()) + prefix = indent*' ' + '// ' + max_len = 80 - len(prefix) + comment = line[loc + 2:].strip() + segs = [seg for seg in re.split(r'(\w+\W*)', comment) if seg != ''] + cur_line = '' + for seg in segs: + if len((cur_line + seg).rstrip()) < max_len: + cur_line += seg + else: + if cur_line.strip() != '': + output.append(prefix + cur_line.rstrip()) + cur_line = seg.lstrip() + if cur_line.strip() != '': + output.append(prefix + cur_line.strip()) + + +def WrapCode(line, line_concat, output): + indent = len(line) - len(line.lstrip()) + prefix = indent*' ' # Prefix of the current line + max_len = 80 - indent - len(line_concat) # Maximum length of the current line + new_prefix = prefix + 4*' ' # Prefix of a continuation line + new_max_len = max_len - 4 # Maximum length of a continuation line + # Prefers to wrap a line after a ',' or ';'. + segs = [seg for seg in re.split(r'([^,;]+[,;]?)', line.strip()) if seg != ''] + cur_line = '' # The current line without leading spaces. + for seg in segs: + # If the line is still too long, wrap at a space. + while cur_line == '' and len(seg.strip()) > max_len: + seg = seg.lstrip() + split_at = seg.rfind(' ', 0, max_len) + output.append(prefix + seg[:split_at].strip() + line_concat) + seg = seg[split_at + 1:] + prefix = new_prefix + max_len = new_max_len + + if len((cur_line + seg).rstrip()) < max_len: + cur_line = (cur_line + seg).lstrip() + else: + output.append(prefix + cur_line.rstrip() + line_concat) + prefix = new_prefix + max_len = new_max_len + cur_line = seg.lstrip() + if cur_line.strip() != '': + output.append(prefix + cur_line.strip()) + + +def WrapPreprocessorDirevative(line, output): + WrapCode(line, ' \\', output) + + +def WrapPlainCode(line, output): + WrapCode(line, '', output) + + +def IsHeaderGuardOrInclude(line): + return (re.match(r'^#(ifndef|define|endif\s*//)\s*[\w_]+\s*$', line) or + re.match(r'^#include\s', line)) + + +def WrapLongLine(line, output): + line = line.rstrip() + if len(line) <= 80: + output.append(line) + elif IsComment(line): + if IsHeaderGuardOrInclude(line): + # The style guide made an exception to allow long header guard lines + # and includes. + output.append(line) + else: + WrapComment(line, output) + elif IsInPreprocessorDirevative(output, line): + if IsHeaderGuardOrInclude(line): + # The style guide made an exception to allow long header guard lines + # and includes. + output.append(line) + else: + WrapPreprocessorDirevative(line, output) + else: + WrapPlainCode(line, output) + + +def BeautifyCode(string): + lines = string.splitlines() + output = [] + for line in lines: + WrapLongLine(line, output) + output2 = [line.rstrip() for line in output] + return '\n'.join(output2) + '\n' + + +def main(argv): + if len(argv) == 1: + print __doc__ + sys.exit(1) + + file_path = argv[-1] + ast = Convert(file_path) + output = Output() + RunCode(Env(), ast, output) + output_str = BeautifyCode(output.string) + if file_path.endswith('.pump'): + output_file_path = file_path[:-5] + else: + output_file_path = '-' + if output_file_path == '-': + print output_str, + else: + output_file = file(output_file_path, 'w') + output_file.write('// This file was GENERATED by command:\n') + output_file.write('// %s %s\n' % + (os.path.basename(__file__), os.path.basename(file_path))) + output_file.write('// DO NOT EDIT BY HAND!!!\n\n') + output_file.write(output_str) + output_file.close() + + +if __name__ == '__main__': + main(sys.argv) diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-all.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-all.cc new file mode 100644 index 00000000..fe34765f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-all.cc @@ -0,0 +1,47 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// Google C++ Testing Framework (Google Test) +// +// Sometimes it's desirable to build Google Test by compiling a single file. +// This file serves this purpose. + +// This line ensures that gtest.h can be compiled on its own, even +// when it's fused. +#include + +// The following lines pull in the real gtest *.cc files. +#include "src/gtest.cc" +#include "src/gtest-death-test.cc" +#include "src/gtest-filepath.cc" +#include "src/gtest-port.cc" +#include "src/gtest-test-part.cc" +#include "src/gtest-typed-test.cc" diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-death-test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-death-test.cc new file mode 100644 index 00000000..3b73b01d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-death-test.cc @@ -0,0 +1,1172 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) +// +// This file implements death tests. + +#include +#include + +#if GTEST_HAS_DEATH_TEST + +#if GTEST_OS_MAC +#include +#endif // GTEST_OS_MAC + +#include +#include +#include +#include + +#if GTEST_OS_WINDOWS +#include +#else +#include +#include +#endif // GTEST_OS_WINDOWS + +#endif // GTEST_HAS_DEATH_TEST + +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +// Constants. + +// The default death test style. +static const char kDefaultDeathTestStyle[] = "fast"; + +GTEST_DEFINE_string_( + death_test_style, + internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), + "Indicates how to run a death test in a forked child process: " + "\"threadsafe\" (child process re-executes the test binary " + "from the beginning, running only the specific death test) or " + "\"fast\" (child process runs the death test immediately " + "after forking)."); + +GTEST_DEFINE_bool_( + death_test_use_fork, + internal::BoolFromGTestEnv("death_test_use_fork", false), + "Instructs to use fork()/_exit() instead of clone() in death tests. " + "Ignored and always uses fork() on POSIX systems where clone() is not " + "implemented. Useful when running under valgrind or similar tools if " + "those do not support clone(). Valgrind 3.3.1 will just fail if " + "it sees an unsupported combination of clone() flags. " + "It is not recommended to use this flag w/o valgrind though it will " + "work in 99% of the cases. Once valgrind is fixed, this flag will " + "most likely be removed."); + +namespace internal { +GTEST_DEFINE_string_( + internal_run_death_test, "", + "Indicates the file, line number, temporal index of " + "the single death test to run, and a file descriptor to " + "which a success code may be sent, all separated by " + "colons. This flag is specified if and only if the current " + "process is a sub-process launched for running a thread-safe " + "death test. FOR INTERNAL USE ONLY."); +} // namespace internal + +#if GTEST_HAS_DEATH_TEST + +// ExitedWithCode constructor. +ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { +} + +// ExitedWithCode function-call operator. +bool ExitedWithCode::operator()(int exit_status) const { +#if GTEST_OS_WINDOWS + return exit_status == exit_code_; +#else + return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; +#endif // GTEST_OS_WINDOWS +} + +#if !GTEST_OS_WINDOWS +// KilledBySignal constructor. +KilledBySignal::KilledBySignal(int signum) : signum_(signum) { +} + +// KilledBySignal function-call operator. +bool KilledBySignal::operator()(int exit_status) const { + return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; +} +#endif // !GTEST_OS_WINDOWS + +namespace internal { + +// Utilities needed for death tests. + +// Generates a textual description of a given exit code, in the format +// specified by wait(2). +static String ExitSummary(int exit_code) { + Message m; +#if GTEST_OS_WINDOWS + m << "Exited with exit status " << exit_code; +#else + if (WIFEXITED(exit_code)) { + m << "Exited with exit status " << WEXITSTATUS(exit_code); + } else if (WIFSIGNALED(exit_code)) { + m << "Terminated by signal " << WTERMSIG(exit_code); + } +#ifdef WCOREDUMP + if (WCOREDUMP(exit_code)) { + m << " (core dumped)"; + } +#endif +#endif // GTEST_OS_WINDOWS + return m.GetString(); +} + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +bool ExitedUnsuccessfully(int exit_status) { + return !ExitedWithCode(0)(exit_status); +} + +#if !GTEST_OS_WINDOWS +// Generates a textual failure message when a death test finds more than +// one thread running, or cannot determine the number of threads, prior +// to executing the given statement. It is the responsibility of the +// caller not to pass a thread_count of 1. +static String DeathTestThreadWarning(size_t thread_count) { + Message msg; + msg << "Death tests use fork(), which is unsafe particularly" + << " in a threaded context. For this test, " << GTEST_NAME_ << " "; + if (thread_count == 0) + msg << "couldn't detect the number of threads."; + else + msg << "detected " << thread_count << " threads."; + return msg.GetString(); +} +#endif // !GTEST_OS_WINDOWS + +// Flag characters for reporting a death test that did not die. +static const char kDeathTestLived = 'L'; +static const char kDeathTestReturned = 'R'; +static const char kDeathTestInternalError = 'I'; + +// An enumeration describing all of the possible ways that a death test +// can conclude. DIED means that the process died while executing the +// test code; LIVED means that process lived beyond the end of the test +// code; and RETURNED means that the test statement attempted a "return," +// which is not allowed. IN_PROGRESS means the test has not yet +// concluded. +enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED }; + +// Routine for aborting the program which is safe to call from an +// exec-style death test child process, in which case the error +// message is propagated back to the parent process. Otherwise, the +// message is simply printed to stderr. In either case, the program +// then exits with status 1. +void DeathTestAbort(const String& message) { + // On a POSIX system, this function may be called from a threadsafe-style + // death test child process, which operates on a very small stack. Use + // the heap for any additional non-minuscule memory requirements. + const InternalRunDeathTestFlag* const flag = + GetUnitTestImpl()->internal_run_death_test_flag(); + if (flag != NULL) { + FILE* parent = posix::FDOpen(flag->write_fd(), "w"); + fputc(kDeathTestInternalError, parent); + fprintf(parent, "%s", message.c_str()); + fflush(parent); + _exit(1); + } else { + fprintf(stderr, "%s", message.c_str()); + fflush(stderr); + abort(); + } +} + +// A replacement for CHECK that calls DeathTestAbort if the assertion +// fails. +#define GTEST_DEATH_TEST_CHECK_(expression) \ + do { \ + if (!::testing::internal::IsTrue(expression)) { \ + DeathTestAbort(::testing::internal::String::Format( \ + "CHECK failed: File %s, line %d: %s", \ + __FILE__, __LINE__, #expression)); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for +// evaluating any system call that fulfills two conditions: it must return +// -1 on failure, and set errno to EINTR when it is interrupted and +// should be tried again. The macro expands to a loop that repeatedly +// evaluates the expression as long as it evaluates to -1 and sets +// errno to EINTR. If the expression evaluates to -1 but errno is +// something other than EINTR, DeathTestAbort is called. +#define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ + do { \ + int gtest_retval; \ + do { \ + gtest_retval = (expression); \ + } while (gtest_retval == -1 && errno == EINTR); \ + if (gtest_retval == -1) { \ + DeathTestAbort(::testing::internal::String::Format( \ + "CHECK failed: File %s, line %d: %s != -1", \ + __FILE__, __LINE__, #expression)); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// Returns the message describing the last system error in errno. +String GetLastErrnoDescription() { + return String(errno == 0 ? "" : posix::StrError(errno)); +} + +// This is called from a death test parent process to read a failure +// message from the death test child process and log it with the FATAL +// severity. On Windows, the message is read from a pipe handle. On other +// platforms, it is read from a file descriptor. +static void FailFromInternalError(int fd) { + Message error; + char buffer[256]; + int num_read; + + do { + while ((num_read = posix::Read(fd, buffer, 255)) > 0) { + buffer[num_read] = '\0'; + error << buffer; + } + } while (num_read == -1 && errno == EINTR); + + if (num_read == 0) { + GTEST_LOG_(FATAL) << error.GetString(); + } else { + const int last_error = errno; + GTEST_LOG_(FATAL) << "Error while reading death test internal: " + << GetLastErrnoDescription() << " [" << last_error << "]"; + } +} + +// Death test constructor. Increments the running death test count +// for the current test. +DeathTest::DeathTest() { + TestInfo* const info = GetUnitTestImpl()->current_test_info(); + if (info == NULL) { + DeathTestAbort("Cannot run a death test outside of a TEST or " + "TEST_F construct"); + } +} + +// Creates and returns a death test by dispatching to the current +// death test factory. +bool DeathTest::Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) { + return GetUnitTestImpl()->death_test_factory()->Create( + statement, regex, file, line, test); +} + +const char* DeathTest::LastMessage() { + return last_death_test_message_.c_str(); +} + +void DeathTest::set_last_death_test_message(const String& message) { + last_death_test_message_ = message; +} + +String DeathTest::last_death_test_message_; + +// Provides cross platform implementation for some death functionality. +class DeathTestImpl : public DeathTest { + protected: + DeathTestImpl(const char* a_statement, const RE* a_regex) + : statement_(a_statement), + regex_(a_regex), + spawned_(false), + status_(-1), + outcome_(IN_PROGRESS), + read_fd_(-1), + write_fd_(-1) {} + + // read_fd_ is expected to be closed and cleared by a derived class. + ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } + + void Abort(AbortReason reason); + virtual bool Passed(bool status_ok); + + const char* statement() const { return statement_; } + const RE* regex() const { return regex_; } + bool spawned() const { return spawned_; } + void set_spawned(bool is_spawned) { spawned_ = is_spawned; } + int status() const { return status_; } + void set_status(int a_status) { status_ = a_status; } + DeathTestOutcome outcome() const { return outcome_; } + void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } + int read_fd() const { return read_fd_; } + void set_read_fd(int fd) { read_fd_ = fd; } + int write_fd() const { return write_fd_; } + void set_write_fd(int fd) { write_fd_ = fd; } + + // Called in the parent process only. Reads the result code of the death + // test child process via a pipe, interprets it to set the outcome_ + // member, and closes read_fd_. Outputs diagnostics and terminates in + // case of unexpected codes. + void ReadAndInterpretStatusByte(); + + private: + // The textual content of the code this object is testing. This class + // doesn't own this string and should not attempt to delete it. + const char* const statement_; + // The regular expression which test output must match. DeathTestImpl + // doesn't own this object and should not attempt to delete it. + const RE* const regex_; + // True if the death test child process has been successfully spawned. + bool spawned_; + // The exit status of the child process. + int status_; + // How the death test concluded. + DeathTestOutcome outcome_; + // Descriptor to the read end of the pipe to the child process. It is + // always -1 in the child process. The child keeps its write end of the + // pipe in write_fd_. + int read_fd_; + // Descriptor to the child's write end of the pipe to the parent process. + // It is always -1 in the parent process. The parent keeps its end of the + // pipe in read_fd_. + int write_fd_; +}; + +// Called in the parent process only. Reads the result code of the death +// test child process via a pipe, interprets it to set the outcome_ +// member, and closes read_fd_. Outputs diagnostics and terminates in +// case of unexpected codes. +void DeathTestImpl::ReadAndInterpretStatusByte() { + char flag; + int bytes_read; + + // The read() here blocks until data is available (signifying the + // failure of the death test) or until the pipe is closed (signifying + // its success), so it's okay to call this in the parent before + // the child process has exited. + do { + bytes_read = posix::Read(read_fd(), &flag, 1); + } while (bytes_read == -1 && errno == EINTR); + + if (bytes_read == 0) { + set_outcome(DIED); + } else if (bytes_read == 1) { + switch (flag) { + case kDeathTestReturned: + set_outcome(RETURNED); + break; + case kDeathTestLived: + set_outcome(LIVED); + break; + case kDeathTestInternalError: + FailFromInternalError(read_fd()); // Does not return. + break; + default: + GTEST_LOG_(FATAL) << "Death test child process reported " + << "unexpected status byte (" + << static_cast(flag) << ")"; + } + } else { + GTEST_LOG_(FATAL) << "Read from death test child process failed: " + << GetLastErrnoDescription(); + } + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); + set_read_fd(-1); +} + +// Signals that the death test code which should have exited, didn't. +// Should be called only in a death test child process. +// Writes a status byte to the child's status file descriptor, then +// calls _exit(1). +void DeathTestImpl::Abort(AbortReason reason) { + // The parent process considers the death test to be a failure if + // it finds any data in our pipe. So, here we write a single flag byte + // to the pipe, then exit. + const char status_ch = + reason == TEST_DID_NOT_DIE ? kDeathTestLived : kDeathTestReturned; + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(write_fd())); + _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) +} + +// Assesses the success or failure of a death test, using both private +// members which have previously been set, and one argument: +// +// Private data members: +// outcome: An enumeration describing how the death test +// concluded: DIED, LIVED, or RETURNED. The death test fails +// in the latter two cases. +// status: The exit status of the child process. On *nix, it is in the +// in the format specified by wait(2). On Windows, this is the +// value supplied to the ExitProcess() API or a numeric code +// of the exception that terminated the program. +// regex: A regular expression object to be applied to +// the test's captured standard error output; the death test +// fails if it does not match. +// +// Argument: +// status_ok: true if exit_status is acceptable in the context of +// this particular death test, which fails if it is false +// +// Returns true iff all of the above conditions are met. Otherwise, the +// first failing condition, in the order given above, is the one that is +// reported. Also sets the last death test message string. +bool DeathTestImpl::Passed(bool status_ok) { + if (!spawned()) + return false; + + const String error_message = GetCapturedStderr(); + + bool success = false; + Message buffer; + + buffer << "Death test: " << statement() << "\n"; + switch (outcome()) { + case LIVED: + buffer << " Result: failed to die.\n" + << " Error msg: " << error_message; + break; + case RETURNED: + buffer << " Result: illegal return in test statement.\n" + << " Error msg: " << error_message; + break; + case DIED: + if (status_ok) { + const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); + if (matched) { + success = true; + } else { + buffer << " Result: died but not with expected error.\n" + << " Expected: " << regex()->pattern() << "\n" + << "Actual msg: " << error_message; + } + } else { + buffer << " Result: died but not with expected exit code:\n" + << " " << ExitSummary(status()) << "\n"; + } + break; + case IN_PROGRESS: + default: + GTEST_LOG_(FATAL) + << "DeathTest::Passed somehow called before conclusion of test"; + } + + DeathTest::set_last_death_test_message(buffer.GetString()); + return success; +} + +#if GTEST_OS_WINDOWS +// WindowsDeathTest implements death tests on Windows. Due to the +// specifics of starting new processes on Windows, death tests there are +// always threadsafe, and Google Test considers the +// --gtest_death_test_style=fast setting to be equivalent to +// --gtest_death_test_style=threadsafe there. +// +// A few implementation notes: Like the Linux version, the Windows +// implementation uses pipes for child-to-parent communication. But due to +// the specifics of pipes on Windows, some extra steps are required: +// +// 1. The parent creates a communication pipe and stores handles to both +// ends of it. +// 2. The parent starts the child and provides it with the information +// necessary to acquire the handle to the write end of the pipe. +// 3. The child acquires the write end of the pipe and signals the parent +// using a Windows event. +// 4. Now the parent can release the write end of the pipe on its side. If +// this is done before step 3, the object's reference count goes down to +// 0 and it is destroyed, preventing the child from acquiring it. The +// parent now has to release it, or read operations on the read end of +// the pipe will not return when the child terminates. +// 5. The parent reads child's output through the pipe (outcome code and +// any possible error messages) from the pipe, and its stderr and then +// determines whether to fail the test. +// +// Note: to distinguish Win32 API calls from the local method and function +// calls, the former are explicitly resolved in the global namespace. +// +class WindowsDeathTest : public DeathTestImpl { + public: + WindowsDeathTest(const char* statement, + const RE* regex, + const char* file, + int line) + : DeathTestImpl(statement, regex), file_(file), line_(line) {} + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + virtual TestRole AssumeRole(); + + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; + // Handle to the write end of the pipe to the child process. + AutoHandle write_handle_; + // Child process handle. + AutoHandle child_handle_; + // Event the child process uses to signal the parent that it has + // acquired the handle to the write end of the pipe. After seeing this + // event the parent can release its own handles to make sure its + // ReadFile() calls return when the child terminates. + AutoHandle event_handle_; +}; + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int WindowsDeathTest::Wait() { + if (!spawned()) + return 0; + + // Wait until the child either signals that it has acquired the write end + // of the pipe or it dies. + const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; + switch (::WaitForMultipleObjects(2, + wait_handles, + FALSE, // Waits for any of the handles. + INFINITE)) { + case WAIT_OBJECT_0: + case WAIT_OBJECT_0 + 1: + break; + default: + GTEST_DEATH_TEST_CHECK_(false); // Should not get here. + } + + // The child has acquired the write end of the pipe or exited. + // We release the handle on our side and continue. + write_handle_.Reset(); + event_handle_.Reset(); + + ReadAndInterpretStatusByte(); + + // Waits for the child process to exit if it haven't already. This + // returns immediately if the child has already exited, regardless of + // whether previous calls to WaitForMultipleObjects synchronized on this + // handle or not. + GTEST_DEATH_TEST_CHECK_( + WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), + INFINITE)); + DWORD status; + GTEST_DEATH_TEST_CHECK_(::GetExitCodeProcess(child_handle_.Get(), &status) + != FALSE); + child_handle_.Reset(); + set_status(static_cast(status)); + return this->status(); +} + +// The AssumeRole process for a Windows death test. It creates a child +// process with the same executable as the current process to run the +// death test. The child process is given the --gtest_filter and +// --gtest_internal_run_death_test flags such that it knows to run the +// current death test only. +DeathTest::TestRole WindowsDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + // ParseInternalRunDeathTestFlag() has performed all the necessary + // processing. + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + // WindowsDeathTest uses an anonymous pipe to communicate results of + // a death test. + SECURITY_ATTRIBUTES handles_are_inheritable = { + sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + HANDLE read_handle, write_handle; + GTEST_DEATH_TEST_CHECK_( + ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, + 0) // Default buffer size. + != FALSE); + set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), + O_RDONLY)); + write_handle_.Reset(write_handle); + event_handle_.Reset(::CreateEvent( + &handles_are_inheritable, + TRUE, // The event will automatically reset to non-signaled state. + FALSE, // The initial state is non-signalled. + NULL)); // The even is unnamed. + GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); + const String filter_flag = String::Format("--%s%s=%s.%s", + GTEST_FLAG_PREFIX_, kFilterFlag, + info->test_case_name(), + info->name()); + const String internal_flag = String::Format( + "--%s%s=%s|%d|%d|%u|%Iu|%Iu", + GTEST_FLAG_PREFIX_, + kInternalRunDeathTestFlag, + file_, line_, + death_test_index, + static_cast(::GetCurrentProcessId()), + // size_t has the same with as pointers on both 32-bit and 64-bit + // Windows platforms. + // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. + reinterpret_cast(write_handle), + reinterpret_cast(event_handle_.Get())); + + char executable_path[_MAX_PATH + 1]; // NOLINT + GTEST_DEATH_TEST_CHECK_( + _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, + executable_path, + _MAX_PATH)); + + String command_line = String::Format("%s %s \"%s\"", + ::GetCommandLineA(), + filter_flag.c_str(), + internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // Flush the log buffers since the log streams are shared with the child. + FlushInfoLog(); + + // The child process will share the standard handles with the parent. + STARTUPINFOA startup_info; + memset(&startup_info, 0, sizeof(STARTUPINFO)); + startup_info.dwFlags = STARTF_USESTDHANDLES; + startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); + startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); + startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); + + PROCESS_INFORMATION process_info; + GTEST_DEATH_TEST_CHECK_(::CreateProcessA( + executable_path, + const_cast(command_line.c_str()), + NULL, // Retuned process handle is not inheritable. + NULL, // Retuned thread handle is not inheritable. + TRUE, // Child inherits all inheritable handles (for write_handle_). + 0x0, // Default creation flags. + NULL, // Inherit the parent's environment. + UnitTest::GetInstance()->original_working_dir(), + &startup_info, + &process_info) != FALSE); + child_handle_.Reset(process_info.hProcess); + ::CloseHandle(process_info.hThread); + set_spawned(true); + return OVERSEE_TEST; +} +#else // We are not on Windows. + +// ForkingDeathTest provides implementations for most of the abstract +// methods of the DeathTest interface. Only the AssumeRole method is +// left undefined. +class ForkingDeathTest : public DeathTestImpl { + public: + ForkingDeathTest(const char* statement, const RE* regex); + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + + protected: + void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } + + private: + // PID of child process during death test; 0 in the child process itself. + pid_t child_pid_; +}; + +// Constructs a ForkingDeathTest. +ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) + : DeathTestImpl(a_statement, a_regex), + child_pid_(-1) {} + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int ForkingDeathTest::Wait() { + if (!spawned()) + return 0; + + ReadAndInterpretStatusByte(); + + int status_value; + GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); + set_status(status_value); + return status_value; +} + +// A concrete death test class that forks, then immediately runs the test +// in the child process. +class NoExecDeathTest : public ForkingDeathTest { + public: + NoExecDeathTest(const char* a_statement, const RE* a_regex) : + ForkingDeathTest(a_statement, a_regex) { } + virtual TestRole AssumeRole(); +}; + +// The AssumeRole process for a fork-and-run death test. It implements a +// straightforward fork, with a simple pipe to transmit the status byte. +DeathTest::TestRole NoExecDeathTest::AssumeRole() { + const size_t thread_count = GetThreadCount(); + if (thread_count != 1) { + GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + + DeathTest::set_last_death_test_message(""); + CaptureStderr(); + // When we fork the process below, the log file buffers are copied, but the + // file descriptors are shared. We flush all log files here so that closing + // the file descriptors in the child process doesn't throw off the + // synchronization between descriptors and buffers in the parent process. + // This is as close to the fork as possible to avoid a race condition in case + // there are multiple threads running before the death test, and another + // thread writes to the log file. + FlushInfoLog(); + + const pid_t child_pid = fork(); + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + set_child_pid(child_pid); + if (child_pid == 0) { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); + set_write_fd(pipe_fd[1]); + // Redirects all logging to stderr in the child process to prevent + // concurrent writes to the log files. We capture stderr in the parent + // process and append the child process' output to a log. + LogToStderr(); + // Event forwarding to the listeners of event listener API mush be shut + // down in death test subprocesses. + GetUnitTestImpl()->listeners()->SuppressEventForwarding(); + return EXECUTE_TEST; + } else { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; + } +} + +// A concrete death test class that forks and re-executes the main +// program from the beginning, with command-line flags set that cause +// only this specific death test to be run. +class ExecDeathTest : public ForkingDeathTest { + public: + ExecDeathTest(const char* a_statement, const RE* a_regex, + const char* file, int line) : + ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } + virtual TestRole AssumeRole(); + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; +}; + +// Utility class for accumulating command-line arguments. +class Arguments { + public: + Arguments() { + args_.push_back(NULL); + } + + ~Arguments() { + for (std::vector::iterator i = args_.begin(); i != args_.end(); + ++i) { + free(*i); + } + } + void AddArgument(const char* argument) { + args_.insert(args_.end() - 1, posix::StrDup(argument)); + } + + template + void AddArguments(const ::std::vector& arguments) { + for (typename ::std::vector::const_iterator i = arguments.begin(); + i != arguments.end(); + ++i) { + args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); + } + } + char* const* Argv() { + return &args_[0]; + } + private: + std::vector args_; +}; + +// A struct that encompasses the arguments to the child process of a +// threadsafe-style death test process. +struct ExecDeathTestArgs { + char* const* argv; // Command-line arguments for the child's call to exec + int close_fd; // File descriptor to close; the read end of a pipe +}; + +#if GTEST_OS_MAC +inline char** GetEnviron() { + // When Google Test is built as a framework on MacOS X, the environ variable + // is unavailable. Apple's documentation (man environ) recommends using + // _NSGetEnviron() instead. + return *_NSGetEnviron(); +} +#else +// Some POSIX platforms expect you to declare environ. extern "C" makes +// it reside in the global namespace. +extern "C" char** environ; +inline char** GetEnviron() { return environ; } +#endif // GTEST_OS_MAC + +// The main function for a threadsafe-style death test child process. +// This function is called in a clone()-ed process and thus must avoid +// any potentially unsafe operations like malloc or libc functions. +static int ExecDeathTestChildMain(void* child_arg) { + ExecDeathTestArgs* const args = static_cast(child_arg); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); + + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(String::Format("chdir(\"%s\") failed: %s", + original_dir, + GetLastErrnoDescription().c_str())); + return EXIT_FAILURE; + } + + // We can safely call execve() as it's a direct system call. We + // cannot use execvp() as it's a libc function and thus potentially + // unsafe. Since execve() doesn't search the PATH, the user must + // invoke the test program via a valid path that contains at least + // one path separator. + execve(args->argv[0], args->argv, GetEnviron()); + DeathTestAbort(String::Format("execve(%s, ...) in %s failed: %s", + args->argv[0], + original_dir, + GetLastErrnoDescription().c_str())); + return EXIT_FAILURE; +} + +// Two utility routines that together determine the direction the stack +// grows. +// This could be accomplished more elegantly by a single recursive +// function, but we want to guard against the unlikely possibility of +// a smart compiler optimizing the recursion away. +bool StackLowerThanAddress(const void* ptr) { + int dummy; + return &dummy < ptr; +} + +bool StackGrowsDown() { + int dummy; + return StackLowerThanAddress(&dummy); +} + +// A threadsafe implementation of fork(2) for threadsafe-style death tests +// that uses clone(2). It dies with an error message if anything goes +// wrong. +static pid_t ExecDeathTestFork(char* const* argv, int close_fd) { + ExecDeathTestArgs args = { argv, close_fd }; + pid_t child_pid = -1; + +#if GTEST_HAS_CLONE + const bool use_fork = GTEST_FLAG(death_test_use_fork); + + if (!use_fork) { + static const bool stack_grows_down = StackGrowsDown(); + const size_t stack_size = getpagesize(); + // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. + void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_PRIVATE, -1, 0); + GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); + void* const stack_top = + static_cast(stack) + (stack_grows_down ? stack_size : 0); + + child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); + + GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); + } +#else + const bool use_fork = true; +#endif // GTEST_HAS_CLONE + + if (use_fork && (child_pid = fork()) == 0) { + ExecDeathTestChildMain(&args); + _exit(0); + } + + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + return child_pid; +} + +// The AssumeRole process for a fork-and-exec death test. It re-executes the +// main program from the beginning, setting the --gtest_filter +// and --gtest_internal_run_death_test flags to cause only the current +// death test to be re-run. +DeathTest::TestRole ExecDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + // Clear the close-on-exec flag on the write end of the pipe, lest + // it be closed when the child process does an exec: + GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); + + const String filter_flag = + String::Format("--%s%s=%s.%s", + GTEST_FLAG_PREFIX_, kFilterFlag, + info->test_case_name(), info->name()); + const String internal_flag = + String::Format("--%s%s=%s|%d|%d|%d", + GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag, + file_, line_, death_test_index, pipe_fd[1]); + Arguments args; + args.AddArguments(GetArgvs()); + args.AddArgument(filter_flag.c_str()); + args.AddArgument(internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // See the comment in NoExecDeathTest::AssumeRole for why the next line + // is necessary. + FlushInfoLog(); + + const pid_t child_pid = ExecDeathTestFork(args.Argv(), pipe_fd[0]); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_child_pid(child_pid); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; +} + +#endif // !GTEST_OS_WINDOWS + +// Creates a concrete DeathTest-derived class that depends on the +// --gtest_death_test_style flag, and sets the pointer pointed to +// by the "test" argument to its address. If the test should be +// skipped, sets that pointer to NULL. Returns true, unless the +// flag is set to an invalid value. +bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, + const char* file, int line, + DeathTest** test) { + UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const int death_test_index = impl->current_test_info() + ->increment_death_test_count(); + + if (flag != NULL) { + if (death_test_index > flag->index()) { + DeathTest::set_last_death_test_message(String::Format( + "Death test count (%d) somehow exceeded expected maximum (%d)", + death_test_index, flag->index())); + return false; + } + + if (!(flag->file() == file && flag->line() == line && + flag->index() == death_test_index)) { + *test = NULL; + return true; + } + } + +#if GTEST_OS_WINDOWS + if (GTEST_FLAG(death_test_style) == "threadsafe" || + GTEST_FLAG(death_test_style) == "fast") { + *test = new WindowsDeathTest(statement, regex, file, line); + } +#else + if (GTEST_FLAG(death_test_style) == "threadsafe") { + *test = new ExecDeathTest(statement, regex, file, line); + } else if (GTEST_FLAG(death_test_style) == "fast") { + *test = new NoExecDeathTest(statement, regex); + } +#endif // GTEST_OS_WINDOWS + else { // NOLINT - this is more readable than unbalanced brackets inside #if. + DeathTest::set_last_death_test_message(String::Format( + "Unknown death test style \"%s\" encountered", + GTEST_FLAG(death_test_style).c_str())); + return false; + } + + return true; +} + +// Splits a given string on a given delimiter, populating a given +// vector with the fields. GTEST_HAS_DEATH_TEST implies that we have +// ::std::string, so we can use it here. +static void SplitString(const ::std::string& str, char delimiter, + ::std::vector< ::std::string>* dest) { + ::std::vector< ::std::string> parsed; + ::std::string::size_type pos = 0; + while (::testing::internal::AlwaysTrue()) { + const ::std::string::size_type colon = str.find(delimiter, pos); + if (colon == ::std::string::npos) { + parsed.push_back(str.substr(pos)); + break; + } else { + parsed.push_back(str.substr(pos, colon - pos)); + pos = colon + 1; + } + } + dest->swap(parsed); +} + +#if GTEST_OS_WINDOWS +// Recreates the pipe and event handles from the provided parameters, +// signals the event, and returns a file descriptor wrapped around the pipe +// handle. This function is called in the child process only. +int GetStatusFileDescriptor(unsigned int parent_process_id, + size_t write_handle_as_size_t, + size_t event_handle_as_size_t) { + AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, + FALSE, // Non-inheritable. + parent_process_id)); + if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { + DeathTestAbort(String::Format("Unable to open parent process %u", + parent_process_id)); + } + + // TODO(vladl@google.com): Replace the following check with a + // compile-time assertion when available. + GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); + + const HANDLE write_handle = + reinterpret_cast(write_handle_as_size_t); + HANDLE dup_write_handle; + + // The newly initialized handle is accessible only in in the parent + // process. To obtain one accessible within the child, we need to use + // DuplicateHandle. + if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, + ::GetCurrentProcess(), &dup_write_handle, + 0x0, // Requested privileges ignored since + // DUPLICATE_SAME_ACCESS is used. + FALSE, // Request non-inheritable handler. + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort(String::Format( + "Unable to duplicate the pipe handle %Iu from the parent process %u", + write_handle_as_size_t, parent_process_id)); + } + + const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); + HANDLE dup_event_handle; + + if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, + ::GetCurrentProcess(), &dup_event_handle, + 0x0, + FALSE, + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort(String::Format( + "Unable to duplicate the event handle %Iu from the parent process %u", + event_handle_as_size_t, parent_process_id)); + } + + const int write_fd = + ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); + if (write_fd == -1) { + DeathTestAbort(String::Format( + "Unable to convert pipe handle %Iu to a file descriptor", + write_handle_as_size_t)); + } + + // Signals the parent that the write end of the pipe has been acquired + // so the parent can release its own write end. + ::SetEvent(dup_event_handle); + + return write_fd; +} +#endif // GTEST_OS_WINDOWS + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { + if (GTEST_FLAG(internal_run_death_test) == "") return NULL; + + // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we + // can use it here. + int line = -1; + int index = -1; + ::std::vector< ::std::string> fields; + SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); + int write_fd = -1; + +#if GTEST_OS_WINDOWS + unsigned int parent_process_id = 0; + size_t write_handle_as_size_t = 0; + size_t event_handle_as_size_t = 0; + + if (fields.size() != 6 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &parent_process_id) + || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) + || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { + DeathTestAbort(String::Format( + "Bad --gtest_internal_run_death_test flag: %s", + GTEST_FLAG(internal_run_death_test).c_str())); + } + write_fd = GetStatusFileDescriptor(parent_process_id, + write_handle_as_size_t, + event_handle_as_size_t); +#else + if (fields.size() != 4 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &write_fd)) { + DeathTestAbort(String::Format( + "Bad --gtest_internal_run_death_test flag: %s", + GTEST_FLAG(internal_run_death_test).c_str())); + } +#endif // GTEST_OS_WINDOWS + return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); +} + +} // namespace internal + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-filepath.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-filepath.cc new file mode 100644 index 00000000..c1ef9188 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-filepath.cc @@ -0,0 +1,380 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) + +#include +#include + +#include + +#if GTEST_OS_WINDOWS_MOBILE +#include +#elif GTEST_OS_WINDOWS +#include +#include +#elif GTEST_OS_SYMBIAN +// Symbian OpenC has PATH_MAX in sys/syslimits.h +#include +#else +#include +#include // Some Linux distributions define PATH_MAX here. +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_WINDOWS +#define GTEST_PATH_MAX_ _MAX_PATH +#elif defined(PATH_MAX) +#define GTEST_PATH_MAX_ PATH_MAX +#elif defined(_XOPEN_PATH_MAX) +#define GTEST_PATH_MAX_ _XOPEN_PATH_MAX +#else +#define GTEST_PATH_MAX_ _POSIX_PATH_MAX +#endif // GTEST_OS_WINDOWS + +#include + +namespace testing { +namespace internal { + +#if GTEST_OS_WINDOWS +// On Windows, '\\' is the standard path separator, but many tools and the +// Windows API also accept '/' as an alternate path separator. Unless otherwise +// noted, a file path can contain either kind of path separators, or a mixture +// of them. +const char kPathSeparator = '\\'; +const char kAlternatePathSeparator = '/'; +const char kPathSeparatorString[] = "\\"; +const char kAlternatePathSeparatorString[] = "/"; +#if GTEST_OS_WINDOWS_MOBILE +// Windows CE doesn't have a current directory. You should not use +// the current directory in tests on Windows CE, but this at least +// provides a reasonable fallback. +const char kCurrentDirectoryString[] = "\\"; +// Windows CE doesn't define INVALID_FILE_ATTRIBUTES +const DWORD kInvalidFileAttributes = 0xffffffff; +#else +const char kCurrentDirectoryString[] = ".\\"; +#endif // GTEST_OS_WINDOWS_MOBILE +#else +const char kPathSeparator = '/'; +const char kPathSeparatorString[] = "/"; +const char kCurrentDirectoryString[] = "./"; +#endif // GTEST_OS_WINDOWS + +// Returns whether the given character is a valid path separator. +static bool IsPathSeparator(char c) { +#if GTEST_HAS_ALT_PATH_SEP_ + return (c == kPathSeparator) || (c == kAlternatePathSeparator); +#else + return c == kPathSeparator; +#endif +} + +// Returns the current working directory, or "" if unsuccessful. +FilePath FilePath::GetCurrentDir() { +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't have a current directory, so we just return + // something reasonable. + return FilePath(kCurrentDirectoryString); +#elif GTEST_OS_WINDOWS + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#else + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns a copy of the FilePath with the case-insensitive extension removed. +// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns +// FilePath("dir/file"). If a case-insensitive extension is not +// found, returns a copy of the original FilePath. +FilePath FilePath::RemoveExtension(const char* extension) const { + String dot_extension(String::Format(".%s", extension)); + if (pathname_.EndsWithCaseInsensitive(dot_extension.c_str())) { + return FilePath(String(pathname_.c_str(), pathname_.length() - 4)); + } + return *this; +} + +// Returns a pointer to the last occurence of a valid path separator in +// the FilePath. On Windows, for example, both '/' and '\' are valid path +// separators. Returns NULL if no path separator was found. +const char* FilePath::FindLastPathSeparator() const { + const char* const last_sep = strrchr(c_str(), kPathSeparator); +#if GTEST_HAS_ALT_PATH_SEP_ + const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); + // Comparing two pointers of which only one is NULL is undefined. + if (last_alt_sep != NULL && + (last_sep == NULL || last_alt_sep > last_sep)) { + return last_alt_sep; + } +#endif + return last_sep; +} + +// Returns a copy of the FilePath with the directory part removed. +// Example: FilePath("path/to/file").RemoveDirectoryName() returns +// FilePath("file"). If there is no directory part ("just_a_file"), it returns +// the FilePath unmodified. If there is no file part ("just_a_dir/") it +// returns an empty FilePath (""). +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveDirectoryName() const { + const char* const last_sep = FindLastPathSeparator(); + return last_sep ? FilePath(String(last_sep + 1)) : *this; +} + +// RemoveFileName returns the directory path with the filename removed. +// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". +// If the FilePath is "a_file" or "/a_file", RemoveFileName returns +// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does +// not have a file, like "just/a/dir/", it returns the FilePath unmodified. +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveFileName() const { + const char* const last_sep = FindLastPathSeparator(); + String dir; + if (last_sep) { + dir = String(c_str(), last_sep + 1 - c_str()); + } else { + dir = kCurrentDirectoryString; + } + return FilePath(dir); +} + +// Helper functions for naming files in a directory for xml output. + +// Given directory = "dir", base_name = "test", number = 0, +// extension = "xml", returns "dir/test.xml". If number is greater +// than zero (e.g., 12), returns "dir/test_12.xml". +// On Windows platform, uses \ as the separator rather than /. +FilePath FilePath::MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension) { + String file; + if (number == 0) { + file = String::Format("%s.%s", base_name.c_str(), extension); + } else { + file = String::Format("%s_%d.%s", base_name.c_str(), number, extension); + } + return ConcatPaths(directory, FilePath(file)); +} + +// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". +// On Windows, uses \ as the separator rather than /. +FilePath FilePath::ConcatPaths(const FilePath& directory, + const FilePath& relative_path) { + if (directory.IsEmpty()) + return relative_path; + const FilePath dir(directory.RemoveTrailingPathSeparator()); + return FilePath(String::Format("%s%c%s", dir.c_str(), kPathSeparator, + relative_path.c_str())); +} + +// Returns true if pathname describes something findable in the file-system, +// either a file, directory, or whatever. +bool FilePath::FileOrDirectoryExists() const { +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + return attributes != kInvalidFileAttributes; +#else + posix::StatStruct file_stat; + return posix::Stat(pathname_.c_str(), &file_stat) == 0; +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns true if pathname describes a directory in the file-system +// that exists. +bool FilePath::DirectoryExists() const { + bool result = false; +#if GTEST_OS_WINDOWS + // Don't strip off trailing separator if path is a root directory on + // Windows (like "C:\\"). + const FilePath& path(IsRootDirectory() ? *this : + RemoveTrailingPathSeparator()); +#else + const FilePath& path(*this); +#endif + +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + if ((attributes != kInvalidFileAttributes) && + (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = true; + } +#else + posix::StatStruct file_stat; + result = posix::Stat(path.c_str(), &file_stat) == 0 && + posix::IsDir(file_stat); +#endif // GTEST_OS_WINDOWS_MOBILE + + return result; +} + +// Returns true if pathname describes a root directory. (Windows has one +// root directory per disk drive.) +bool FilePath::IsRootDirectory() const { +#if GTEST_OS_WINDOWS + // TODO(wan@google.com): on Windows a network share like + // \\server\share can be a root directory, although it cannot be the + // current directory. Handle this properly. + return pathname_.length() == 3 && IsAbsolutePath(); +#else + return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); +#endif +} + +// Returns true if pathname describes an absolute path. +bool FilePath::IsAbsolutePath() const { + const char* const name = pathname_.c_str(); +#if GTEST_OS_WINDOWS + return pathname_.length() >= 3 && + ((name[0] >= 'a' && name[0] <= 'z') || + (name[0] >= 'A' && name[0] <= 'Z')) && + name[1] == ':' && + IsPathSeparator(name[2]); +#else + return IsPathSeparator(name[0]); +#endif +} + +// Returns a pathname for a file that does not currently exist. The pathname +// will be directory/base_name.extension or +// directory/base_name_.extension if directory/base_name.extension +// already exists. The number will be incremented until a pathname is found +// that does not already exist. +// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. +// There could be a race condition if two or more processes are calling this +// function at the same time -- they could both pick the same filename. +FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension) { + FilePath full_pathname; + int number = 0; + do { + full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); + } while (full_pathname.FileOrDirectoryExists()); + return full_pathname; +} + +// Returns true if FilePath ends with a path separator, which indicates that +// it is intended to represent a directory. Returns false otherwise. +// This does NOT check that a directory (or file) actually exists. +bool FilePath::IsDirectory() const { + return !pathname_.empty() && + IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); +} + +// Create directories so that path exists. Returns true if successful or if +// the directories already exist; returns false if unable to create directories +// for any reason. +bool FilePath::CreateDirectoriesRecursively() const { + if (!this->IsDirectory()) { + return false; + } + + if (pathname_.length() == 0 || this->DirectoryExists()) { + return true; + } + + const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); + return parent.CreateDirectoriesRecursively() && this->CreateFolder(); +} + +// Create the directory so that path exists. Returns true if successful or +// if the directory already exists; returns false if unable to create the +// directory for any reason, including if the parent directory does not +// exist. Not named "CreateDirectory" because that's a macro on Windows. +bool FilePath::CreateFolder() const { +#if GTEST_OS_WINDOWS_MOBILE + FilePath removed_sep(this->RemoveTrailingPathSeparator()); + LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); + int result = CreateDirectory(unicode, NULL) ? 0 : -1; + delete [] unicode; +#elif GTEST_OS_WINDOWS + int result = _mkdir(pathname_.c_str()); +#else + int result = mkdir(pathname_.c_str(), 0777); +#endif // GTEST_OS_WINDOWS_MOBILE + + if (result == -1) { + return this->DirectoryExists(); // An error is OK if the directory exists. + } + return true; // No error. +} + +// If input name has a trailing separator character, remove it and return the +// name, otherwise return the name string unmodified. +// On Windows platform, uses \ as the separator, other platforms use /. +FilePath FilePath::RemoveTrailingPathSeparator() const { + return IsDirectory() + ? FilePath(String(pathname_.c_str(), pathname_.length() - 1)) + : *this; +} + +// Removes any redundant separators that might be in the pathname. +// For example, "bar///foo" becomes "bar/foo". Does not eliminate other +// redundancies that might be in a pathname involving "." or "..". +// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). +void FilePath::Normalize() { + if (pathname_.c_str() == NULL) { + pathname_ = ""; + return; + } + const char* src = pathname_.c_str(); + char* const dest = new char[pathname_.length() + 1]; + char* dest_ptr = dest; + memset(dest_ptr, 0, pathname_.length() + 1); + + while (*src != '\0') { + *dest_ptr = *src; + if (!IsPathSeparator(*src)) { + src++; + } else { +#if GTEST_HAS_ALT_PATH_SEP_ + if (*dest_ptr == kAlternatePathSeparator) { + *dest_ptr = kPathSeparator; + } +#endif + while (IsPathSeparator(*src)) + src++; + } + dest_ptr++; + } + *dest_ptr = '\0'; + pathname_ = dest; + delete[] dest; +} + +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-internal-inl.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-internal-inl.h new file mode 100644 index 00000000..855b2155 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-internal-inl.h @@ -0,0 +1,1074 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utility functions and classes used by the Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This file contains purely Google Test's internal implementation. Please +// DO NOT #INCLUDE IT IN A USER PROGRAM. + +#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ +#define GTEST_SRC_GTEST_INTERNAL_INL_H_ + +// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is +// part of Google Test's implementation; otherwise it's undefined. +#if !GTEST_IMPLEMENTATION_ +// A user is trying to include this from his code - just say no. +#error "gtest-internal-inl.h is part of Google Test's internal implementation." +#error "It must not be included except by Google Test itself." +#endif // GTEST_IMPLEMENTATION_ + +#ifndef _WIN32_WCE +#include +#endif // !_WIN32_WCE +#include +#include // For strtoll/_strtoul64/malloc/free. +#include // For memmove. + +#include +#include +#include + +#include + +#if GTEST_OS_WINDOWS +#include // For DWORD. +#endif // GTEST_OS_WINDOWS + +#include // NOLINT +#include + +namespace testing { + +// Declares the flags. +// +// We don't want the users to modify this flag in the code, but want +// Google Test's own unit tests to be able to access it. Therefore we +// declare it here as opposed to in gtest.h. +GTEST_DECLARE_bool_(death_test_use_fork); + +namespace internal { + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; + +// Names of the flags (needed for parsing Google Test flags). +const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; +const char kBreakOnFailureFlag[] = "break_on_failure"; +const char kCatchExceptionsFlag[] = "catch_exceptions"; +const char kColorFlag[] = "color"; +const char kFilterFlag[] = "filter"; +const char kListTestsFlag[] = "list_tests"; +const char kOutputFlag[] = "output"; +const char kPrintTimeFlag[] = "print_time"; +const char kRandomSeedFlag[] = "random_seed"; +const char kRepeatFlag[] = "repeat"; +const char kShuffleFlag[] = "shuffle"; +const char kStackTraceDepthFlag[] = "stack_trace_depth"; +const char kThrowOnFailureFlag[] = "throw_on_failure"; + +// A valid random seed must be in [1, kMaxRandomSeed]. +const int kMaxRandomSeed = 99999; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +GTEST_API_ extern bool g_help_flag; + +// Returns the current time in milliseconds. +GTEST_API_ TimeInMillis GetTimeInMillis(); + +// Returns true iff Google Test should use colors in the output. +GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); + +// Formats the given time in milliseconds as seconds. +GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); + +// Parses a string for an Int32 flag, in the form of "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +GTEST_API_ bool ParseInt32Flag( + const char* str, const char* flag, Int32* value); + +// Returns a random seed in range [1, kMaxRandomSeed] based on the +// given --gtest_random_seed flag value. +inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { + const unsigned int raw_seed = (random_seed_flag == 0) ? + static_cast(GetTimeInMillis()) : + static_cast(random_seed_flag); + + // Normalizes the actual seed to range [1, kMaxRandomSeed] such that + // it's easy to type. + const int normalized_seed = + static_cast((raw_seed - 1U) % + static_cast(kMaxRandomSeed)) + 1; + return normalized_seed; +} + +// Returns the first valid random seed after 'seed'. The behavior is +// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is +// considered to be 1. +inline int GetNextRandomSeed(int seed) { + GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) + << "Invalid random seed " << seed << " - must be in [1, " + << kMaxRandomSeed << "]."; + const int next_seed = seed + 1; + return (next_seed > kMaxRandomSeed) ? 1 : next_seed; +} + +// This class saves the values of all Google Test flags in its c'tor, and +// restores them in its d'tor. +class GTestFlagSaver { + public: + // The c'tor. + GTestFlagSaver() { + also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); + break_on_failure_ = GTEST_FLAG(break_on_failure); + catch_exceptions_ = GTEST_FLAG(catch_exceptions); + color_ = GTEST_FLAG(color); + death_test_style_ = GTEST_FLAG(death_test_style); + death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); + filter_ = GTEST_FLAG(filter); + internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); + list_tests_ = GTEST_FLAG(list_tests); + output_ = GTEST_FLAG(output); + print_time_ = GTEST_FLAG(print_time); + random_seed_ = GTEST_FLAG(random_seed); + repeat_ = GTEST_FLAG(repeat); + shuffle_ = GTEST_FLAG(shuffle); + stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); + throw_on_failure_ = GTEST_FLAG(throw_on_failure); + } + + // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. + ~GTestFlagSaver() { + GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; + GTEST_FLAG(break_on_failure) = break_on_failure_; + GTEST_FLAG(catch_exceptions) = catch_exceptions_; + GTEST_FLAG(color) = color_; + GTEST_FLAG(death_test_style) = death_test_style_; + GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; + GTEST_FLAG(filter) = filter_; + GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; + GTEST_FLAG(list_tests) = list_tests_; + GTEST_FLAG(output) = output_; + GTEST_FLAG(print_time) = print_time_; + GTEST_FLAG(random_seed) = random_seed_; + GTEST_FLAG(repeat) = repeat_; + GTEST_FLAG(shuffle) = shuffle_; + GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; + GTEST_FLAG(throw_on_failure) = throw_on_failure_; + } + private: + // Fields for saving the original values of flags. + bool also_run_disabled_tests_; + bool break_on_failure_; + bool catch_exceptions_; + String color_; + String death_test_style_; + bool death_test_use_fork_; + String filter_; + String internal_run_death_test_; + bool list_tests_; + String output_; + bool print_time_; + bool pretty_; + internal::Int32 random_seed_; + internal::Int32 repeat_; + bool shuffle_; + internal::Int32 stack_trace_depth_; + bool throw_on_failure_; +} GTEST_ATTRIBUTE_UNUSED_; + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// The output buffer str must containt at least 32 characters. +// The function returns the address of the output buffer. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. +GTEST_API_ char* CodePointToUtf8(UInt32 code_point, char* str); + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +GTEST_API_ String WideStringToUtf8(const wchar_t* str, int num_chars); + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded(); + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (e.g., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +GTEST_API_ bool ShouldShard(const char* total_shards_str, + const char* shard_index_str, + bool in_subprocess_for_death_test); + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error and +// and aborts. +GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +GTEST_API_ bool ShouldRunTestOnShard( + int total_shards, int shard_index, int test_id); + +// STL container utilities. + +// Returns the number of elements in the given container that satisfy +// the given predicate. +template +inline int CountIf(const Container& c, Predicate predicate) { + return static_cast(std::count_if(c.begin(), c.end(), predicate)); +} + +// Applies a function/functor to each element in the container. +template +void ForEach(const Container& c, Functor functor) { + std::for_each(c.begin(), c.end(), functor); +} + +// Returns the i-th element of the vector, or default_value if i is not +// in range [0, v.size()). +template +inline E GetElementOr(const std::vector& v, int i, E default_value) { + return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; +} + +// Performs an in-place shuffle of a range of the vector's elements. +// 'begin' and 'end' are element indices as an STL-style range; +// i.e. [begin, end) are shuffled, where 'end' == size() means to +// shuffle to the end of the vector. +template +void ShuffleRange(internal::Random* random, int begin, int end, + std::vector* v) { + const int size = static_cast(v->size()); + GTEST_CHECK_(0 <= begin && begin <= size) + << "Invalid shuffle range start " << begin << ": must be in range [0, " + << size << "]."; + GTEST_CHECK_(begin <= end && end <= size) + << "Invalid shuffle range finish " << end << ": must be in range [" + << begin << ", " << size << "]."; + + // Fisher-Yates shuffle, from + // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle + for (int range_width = end - begin; range_width >= 2; range_width--) { + const int last_in_range = begin + range_width - 1; + const int selected = begin + random->Generate(range_width); + std::swap((*v)[selected], (*v)[last_in_range]); + } +} + +// Performs an in-place shuffle of the vector's elements. +template +inline void Shuffle(internal::Random* random, std::vector* v) { + ShuffleRange(random, 0, static_cast(v->size()), v); +} + +// A function for deleting an object. Handy for being used as a +// functor. +template +static void Delete(T* x) { + delete x; +} + +// A predicate that checks the key of a TestProperty against a known key. +// +// TestPropertyKeyIs is copyable. +class TestPropertyKeyIs { + public: + // Constructor. + // + // TestPropertyKeyIs has NO default constructor. + explicit TestPropertyKeyIs(const char* key) + : key_(key) {} + + // Returns true iff the test name of test property matches on key_. + bool operator()(const TestProperty& test_property) const { + return String(test_property.key()).Compare(key_) == 0; + } + + private: + String key_; +}; + +class TestInfoImpl { + public: + TestInfoImpl(TestInfo* parent, const char* test_case_name, + const char* name, const char* test_case_comment, + const char* comment, TypeId fixture_class_id, + internal::TestFactoryBase* factory); + ~TestInfoImpl(); + + // Returns true if this test should run. + bool should_run() const { return should_run_; } + + // Sets the should_run member. + void set_should_run(bool should) { should_run_ = should; } + + // Returns true if this test is disabled. Disabled tests are not run. + bool is_disabled() const { return is_disabled_; } + + // Sets the is_disabled member. + void set_is_disabled(bool is) { is_disabled_ = is; } + + // Returns true if this test matches the filter specified by the user. + bool matches_filter() const { return matches_filter_; } + + // Sets the matches_filter member. + void set_matches_filter(bool matches) { matches_filter_ = matches; } + + // Returns the test case name. + const char* test_case_name() const { return test_case_name_.c_str(); } + + // Returns the test name. + const char* name() const { return name_.c_str(); } + + // Returns the test case comment. + const char* test_case_comment() const { return test_case_comment_.c_str(); } + + // Returns the test comment. + const char* comment() const { return comment_.c_str(); } + + // Returns the ID of the test fixture class. + TypeId fixture_class_id() const { return fixture_class_id_; } + + // Returns the test result. + TestResult* result() { return &result_; } + const TestResult* result() const { return &result_; } + + // Creates the test object, runs it, records its result, and then + // deletes it. + void Run(); + + // Clears the test result. + void ClearResult() { result_.Clear(); } + + // Clears the test result in the given TestInfo object. + static void ClearTestResult(TestInfo * test_info) { + test_info->impl()->ClearResult(); + } + + private: + // These fields are immutable properties of the test. + TestInfo* const parent_; // The owner of this object + const String test_case_name_; // Test case name + const String name_; // Test name + const String test_case_comment_; // Test case comment + const String comment_; // Test comment + const TypeId fixture_class_id_; // ID of the test fixture class + bool should_run_; // True iff this test should run + bool is_disabled_; // True iff this test is disabled + bool matches_filter_; // True if this test matches the + // user-specified filter. + internal::TestFactoryBase* const factory_; // The factory that creates + // the test object + + // This field is mutable and needs to be reset before running the + // test for the second time. + TestResult result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfoImpl); +}; + +// Class UnitTestOptions. +// +// This class contains functions for processing options the user +// specifies when running the tests. It has only static members. +// +// In most cases, the user can specify an option using either an +// environment variable or a command line flag. E.g. you can set the +// test filter using either GTEST_FILTER or --gtest_filter. If both +// the variable and the flag are present, the latter overrides the +// former. +class GTEST_API_ UnitTestOptions { + public: + // Functions for processing the gtest_output flag. + + // Returns the output format, or "" for normal printed output. + static String GetOutputFormat(); + + // Returns the absolute path of the requested output file, or the + // default (test_detail.xml in the original working directory) if + // none was explicitly specified. + static String GetAbsolutePathToOutputFile(); + + // Functions for processing the gtest_filter flag. + + // Returns true iff the wildcard pattern matches the string. The + // first ':' or '\0' character in pattern marks the end of it. + // + // This recursive algorithm isn't very efficient, but is clear and + // works well enough for matching test names, which are short. + static bool PatternMatchesString(const char *pattern, const char *str); + + // Returns true iff the user-specified filter matches the test case + // name and the test name. + static bool FilterMatchesTest(const String &test_case_name, + const String &test_name); + +#if GTEST_OS_WINDOWS + // Function for supporting the gtest_catch_exception flag. + + // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the + // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. + // This function is useful as an __except condition. + static int GTestShouldProcessSEH(DWORD exception_code); +#endif // GTEST_OS_WINDOWS + + // Returns true if "name" matches the ':' separated list of glob-style + // filters in "filter". + static bool MatchesFilter(const String& name, const char* filter); +}; + +// Returns the current application's name, removing directory path if that +// is present. Used by UnitTestOptions::GetOutputFile. +GTEST_API_ FilePath GetCurrentExecutableName(); + +// The role interface for getting the OS stack trace as a string. +class OsStackTraceGetterInterface { + public: + OsStackTraceGetterInterface() {} + virtual ~OsStackTraceGetterInterface() {} + + // Returns the current OS stack trace as a String. Parameters: + // + // max_depth - the maximum number of stack frames to be included + // in the trace. + // skip_count - the number of top frames to be skipped; doesn't count + // against max_depth. + virtual String CurrentStackTrace(int max_depth, int skip_count) = 0; + + // UponLeavingGTest() should be called immediately before Google Test calls + // user code. It saves some information about the current stack that + // CurrentStackTrace() will use to find and hide Google Test stack frames. + virtual void UponLeavingGTest() = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); +}; + +// A working implementation of the OsStackTraceGetterInterface interface. +class OsStackTraceGetter : public OsStackTraceGetterInterface { + public: + OsStackTraceGetter() : caller_frame_(NULL) {} + virtual String CurrentStackTrace(int max_depth, int skip_count); + virtual void UponLeavingGTest(); + + // This string is inserted in place of stack frames that are part of + // Google Test's implementation. + static const char* const kElidedFramesMarker; + + private: + Mutex mutex_; // protects all internal state + + // We save the stack frame below the frame that calls user code. + // We do this because the address of the frame immediately below + // the user code changes between the call to UponLeavingGTest() + // and any calls to CurrentStackTrace() from within the user code. + void* caller_frame_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); +}; + +// Information about a Google Test trace point. +struct TraceInfo { + const char* file; + int line; + String message; +}; + +// This is the default global test part result reporter used in UnitTestImpl. +// This class should only be used by UnitTestImpl. +class DefaultGlobalTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. Reports the test part + // result in the current test. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); +}; + +// This is the default per thread test part result reporter used in +// UnitTestImpl. This class should only be used by UnitTestImpl. +class DefaultPerThreadTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. The implementation just + // delegates to the current global test part result reporter of *unit_test_. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); +}; + +// The private implementation of the UnitTest class. We don't protect +// the methods under a mutex, as this class is not accessible by a +// user and the UnitTest class that delegates work to this class does +// proper locking. +class GTEST_API_ UnitTestImpl { + public: + explicit UnitTestImpl(UnitTest* parent); + virtual ~UnitTestImpl(); + + // There are two different ways to register your own TestPartResultReporter. + // You can register your own repoter to listen either only for test results + // from the current thread or for results from all threads. + // By default, each per-thread test result repoter just passes a new + // TestPartResult to the global test result reporter, which registers the + // test part result for the currently running test. + + // Returns the global test part result reporter. + TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); + + // Sets the global test part result reporter. + void SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter); + + // Returns the test part result reporter for the current thread. + TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); + + // Sets the test part result reporter for the current thread. + void SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter); + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const { return !Failed(); } + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const { + return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[i]; + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i) { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[index]; + } + + // Provides access to the event listener list. + TestEventListeners* listeners() { return &listeners_; } + + // Returns the TestResult for the test that's currently running, or + // the TestResult for the ad hoc test if no test is running. + TestResult* current_test_result(); + + // Returns the TestResult for the ad hoc test. + const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } + + // Sets the OS stack trace getter. + // + // Does nothing if the input and the current OS stack trace getter + // are the same; otherwise, deletes the old getter and makes the + // input the current getter. + void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); + + // Returns the current OS stack trace getter if it is not NULL; + // otherwise, creates an OsStackTraceGetter, makes it the current + // getter, and returns it. + OsStackTraceGetterInterface* os_stack_trace_getter(); + + // Returns the current OS stack trace as a String. + // + // The maximum number of stack frames to be included is specified by + // the gtest_stack_trace_depth flag. The skip_count parameter + // specifies the number of top frames to be skipped, which doesn't + // count against the number of frames to be included. + // + // For example, if Foo() calls Bar(), which in turn calls + // CurrentOsStackTraceExceptTop(1), Foo() will be included in the + // trace but Bar() and CurrentOsStackTraceExceptTop() won't. + String CurrentOsStackTraceExceptTop(int skip_count); + + // Finds and returns a TestCase with the given name. If one doesn't + // exist, creates one and returns it. + // + // Arguments: + // + // test_case_name: name of the test case + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase* GetTestCase(const char* test_case_name, + const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Adds a TestInfo to the unit test. + // + // Arguments: + // + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + // test_info: the TestInfo object + void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + TestInfo * test_info) { + // In order to support thread-safe death tests, we need to + // remember the original working directory when the test program + // was first invoked. We cannot do this in RUN_ALL_TESTS(), as + // the user may have changed the current directory before calling + // RUN_ALL_TESTS(). Therefore we capture the current directory in + // AddTestInfo(), which is called to register a TEST or TEST_F + // before main() is reached. + if (original_working_dir_.IsEmpty()) { + original_working_dir_.Set(FilePath::GetCurrentDir()); + GTEST_CHECK_(!original_working_dir_.IsEmpty()) + << "Failed to get the current working directory."; + } + + GetTestCase(test_info->test_case_name(), + test_info->test_case_comment(), + set_up_tc, + tear_down_tc)->AddTestInfo(test_info); + } + +#if GTEST_HAS_PARAM_TEST + // Returns ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { + return parameterized_test_registry_; + } +#endif // GTEST_HAS_PARAM_TEST + + // Sets the TestCase object for the test that's currently running. + void set_current_test_case(TestCase* a_current_test_case) { + current_test_case_ = a_current_test_case; + } + + // Sets the TestInfo object for the test that's currently running. If + // current_test_info is NULL, the assertion results will be stored in + // ad_hoc_test_result_. + void set_current_test_info(TestInfo* a_current_test_info) { + current_test_info_ = a_current_test_info; + } + + // Registers all parameterized tests defined using TEST_P and + // INSTANTIATE_TEST_P, creating regular tests for each test/parameter + // combination. This method can be called more then once; it has + // guards protecting from registering the tests more then once. + // If value-parameterized tests are disabled, RegisterParameterizedTests + // is present but does nothing. + void RegisterParameterizedTests(); + + // Runs all tests in this UnitTest object, prints the result, and + // returns 0 if all tests are successful, or 1 otherwise. If any + // exception is thrown during a test on Windows, this test is + // considered to be failed, but the rest of the tests will still be + // run. (We disable exceptions on Linux and Mac OS X, so the issue + // doesn't apply there.) + int RunAllTests(); + + // Clears the results of all tests, including the ad hoc test. + void ClearResult() { + ForEach(test_cases_, TestCase::ClearTestCaseResult); + ad_hoc_test_result_.Clear(); + } + + enum ReactionToSharding { + HONOR_SHARDING_PROTOCOL, + IGNORE_SHARDING_PROTOCOL + }; + + // Matches the full name of each test against the user-specified + // filter to decide whether the test should run, then records the + // result in each TestCase and TestInfo object. + // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests + // based on sharding variables in the environment. + // Returns the number of tests that should run. + int FilterTests(ReactionToSharding shard_tests); + + // Prints the names of the tests matching the user-specified filter flag. + void ListTestsMatchingFilter(); + + const TestCase* current_test_case() const { return current_test_case_; } + TestInfo* current_test_info() { return current_test_info_; } + const TestInfo* current_test_info() const { return current_test_info_; } + + // Returns the vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector& environments() { return environments_; } + + // Getters for the per-thread Google Test trace stack. + std::vector& gtest_trace_stack() { + return *(gtest_trace_stack_.pointer()); + } + const std::vector& gtest_trace_stack() const { + return gtest_trace_stack_.get(); + } + +#if GTEST_HAS_DEATH_TEST + void InitDeathTestSubprocessControlInfo() { + internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); + } + // Returns a pointer to the parsed --gtest_internal_run_death_test + // flag, or NULL if that flag was not specified. + // This information is useful only in a death test child process. + // Must not be called before a call to InitGoogleTest. + const InternalRunDeathTestFlag* internal_run_death_test_flag() const { + return internal_run_death_test_flag_.get(); + } + + // Returns a pointer to the current death test factory. + internal::DeathTestFactory* death_test_factory() { + return death_test_factory_.get(); + } + + void SuppressTestEventsIfInSubprocess(); + + friend class ReplaceDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + + // Initializes the event listener performing XML output as specified by + // UnitTestOptions. Must not be called before InitGoogleTest. + void ConfigureXmlOutput(); + + // Performs initialization dependent upon flag values obtained in + // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to + // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest + // this function is also called from RunAllTests. Since this function can be + // called more than once, it has to be idempotent. + void PostFlagParsingInit(); + + // Gets the random seed used at the start of the current test iteration. + int random_seed() const { return random_seed_; } + + // Gets the random number generator. + internal::Random* random() { return &random_; } + + // Shuffles all test cases, and the tests within each test case, + // making sure that death tests are still run first. + void ShuffleTests(); + + // Restores the test cases and tests to their order before the first shuffle. + void UnshuffleTests(); + + private: + friend class ::testing::UnitTest; + + // The UnitTest object that owns this implementation object. + UnitTest* const parent_; + + // The working directory when the first TEST() or TEST_F() was + // executed. + internal::FilePath original_working_dir_; + + // The default test part result reporters. + DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; + DefaultPerThreadTestPartResultReporter + default_per_thread_test_part_result_reporter_; + + // Points to (but doesn't own) the global test part result reporter. + TestPartResultReporterInterface* global_test_part_result_repoter_; + + // Protects read and write access to global_test_part_result_reporter_. + internal::Mutex global_test_part_result_reporter_mutex_; + + // Points to (but doesn't own) the per-thread test part result reporter. + internal::ThreadLocal + per_thread_test_part_result_reporter_; + + // The vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector environments_; + + // The vector of TestCases in their original order. It owns the + // elements in the vector. + std::vector test_cases_; + + // Provides a level of indirection for the test case list to allow + // easy shuffling and restoring the test case order. The i-th + // element of this vector is the index of the i-th test case in the + // shuffled order. + std::vector test_case_indices_; + +#if GTEST_HAS_PARAM_TEST + // ParameterizedTestRegistry object used to register value-parameterized + // tests. + internal::ParameterizedTestCaseRegistry parameterized_test_registry_; + + // Indicates whether RegisterParameterizedTests() has been called already. + bool parameterized_tests_registered_; +#endif // GTEST_HAS_PARAM_TEST + + // Index of the last death test case registered. Initially -1. + int last_death_test_case_; + + // This points to the TestCase for the currently running test. It + // changes as Google Test goes through one test case after another. + // When no test is running, this is set to NULL and Google Test + // stores assertion results in ad_hoc_test_result_. Initially NULL. + TestCase* current_test_case_; + + // This points to the TestInfo for the currently running test. It + // changes as Google Test goes through one test after another. When + // no test is running, this is set to NULL and Google Test stores + // assertion results in ad_hoc_test_result_. Initially NULL. + TestInfo* current_test_info_; + + // Normally, a user only writes assertions inside a TEST or TEST_F, + // or inside a function called by a TEST or TEST_F. Since Google + // Test keeps track of which test is current running, it can + // associate such an assertion with the test it belongs to. + // + // If an assertion is encountered when no TEST or TEST_F is running, + // Google Test attributes the assertion result to an imaginary "ad hoc" + // test, and records the result in ad_hoc_test_result_. + TestResult ad_hoc_test_result_; + + // The list of event listeners that can be used to track events inside + // Google Test. + TestEventListeners listeners_; + + // The OS stack trace getter. Will be deleted when the UnitTest + // object is destructed. By default, an OsStackTraceGetter is used, + // but the user can set this field to use a custom getter if that is + // desired. + OsStackTraceGetterInterface* os_stack_trace_getter_; + + // True iff PostFlagParsingInit() has been called. + bool post_flag_parse_init_performed_; + + // The random number seed used at the beginning of the test run. + int random_seed_; + + // Our random number generator. + internal::Random random_; + + // How long the test took to run, in milliseconds. + TimeInMillis elapsed_time_; + +#if GTEST_HAS_DEATH_TEST + // The decomposed components of the gtest_internal_run_death_test flag, + // parsed when RUN_ALL_TESTS is called. + internal::scoped_ptr internal_run_death_test_flag_; + internal::scoped_ptr death_test_factory_; +#endif // GTEST_HAS_DEATH_TEST + + // A per-thread stack of traces created by the SCOPED_TRACE() macro. + internal::ThreadLocal > gtest_trace_stack_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); +}; // class UnitTestImpl + +// Convenience function for accessing the global UnitTest +// implementation object. +inline UnitTestImpl* GetUnitTestImpl() { + return UnitTest::GetInstance()->impl(); +} + +// Internal helper functions for implementing the simple regular +// expression matcher. +GTEST_API_ bool IsInSet(char ch, const char* str); +GTEST_API_ bool IsDigit(char ch); +GTEST_API_ bool IsPunct(char ch); +GTEST_API_ bool IsRepeat(char ch); +GTEST_API_ bool IsWhiteSpace(char ch); +GTEST_API_ bool IsWordChar(char ch); +GTEST_API_ bool IsValidEscape(char ch); +GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); +GTEST_API_ bool ValidateRegex(const char* regex); +GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); +GTEST_API_ bool MatchRepetitionAndRegexAtHead( + bool escaped, char ch, char repeat, const char* regex, const char* str); +GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); + +#if GTEST_HAS_DEATH_TEST + +// Returns the message describing the last system error, regardless of the +// platform. +String GetLastErrnoDescription(); + +#if GTEST_OS_WINDOWS +// Provides leak-safe Windows kernel handle ownership. +class AutoHandle { + public: + AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} + explicit AutoHandle(HANDLE handle) : handle_(handle) {} + + ~AutoHandle() { Reset(); } + + HANDLE Get() const { return handle_; } + void Reset() { Reset(INVALID_HANDLE_VALUE); } + void Reset(HANDLE handle) { + if (handle != handle_) { + if (handle_ != INVALID_HANDLE_VALUE) + ::CloseHandle(handle_); + handle_ = handle; + } + } + + private: + HANDLE handle_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); +}; +#endif // GTEST_OS_WINDOWS + +// Attempts to parse a string into a positive integer pointed to by the +// number parameter. Returns true if that is possible. +// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use +// it here. +template +bool ParseNaturalNumber(const ::std::string& str, Integer* number) { + // Fail fast if the given string does not begin with a digit; + // this bypasses strtoXXX's "optional leading whitespace and plus + // or minus sign" semantics, which are undesirable here. + if (str.empty() || !isdigit(str[0])) { + return false; + } + errno = 0; + + char* end; + // BiggestConvertible is the largest integer type that system-provided + // string-to-number conversion routines can return. +#if GTEST_OS_WINDOWS && !defined(__GNUC__) + // MSVC and C++ Builder define __int64 instead of the standard long long. + typedef unsigned __int64 BiggestConvertible; + const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); +#else + typedef unsigned long long BiggestConvertible; // NOLINT + const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); +#endif // GTEST_OS_WINDOWS && !defined(__GNUC__) + const bool parse_success = *end == '\0' && errno == 0; + + // TODO(vladl@google.com): Convert this to compile time assertion when it is + // available. + GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); + + const Integer result = static_cast(parsed); + if (parse_success && static_cast(result) == parsed) { + *number = result; + return true; + } + return false; +} +#endif // GTEST_HAS_DEATH_TEST + +// TestResult contains some private methods that should be hidden from +// Google Test user but are required for testing. This class allow our tests +// to access them. +// +// This class is supplied only for the purpose of testing Google Test's own +// constructs. Do not use it in user tests, either directly or indirectly. +class TestResultAccessor { + public: + static void RecordProperty(TestResult* test_result, + const TestProperty& property) { + test_result->RecordProperty(property); + } + + static void ClearTestPartResults(TestResult* test_result) { + test_result->ClearTestPartResults(); + } + + static const std::vector& test_part_results( + const TestResult& test_result) { + return test_result.test_part_results(); + } +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-port.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-port.cc new file mode 100644 index 00000000..b9504f56 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-port.cc @@ -0,0 +1,711 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + +#include +#include +#include + +#if GTEST_OS_WINDOWS_MOBILE +#include // For TerminateProcess() +#elif GTEST_OS_WINDOWS +#include +#include +#else +#include +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_MAC +#include +#include +#include +#endif // GTEST_OS_MAC + +#include +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace testing { +namespace internal { + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC and C++Builder do not provide a definition of STDERR_FILENO. +const int kStdOutFileno = 1; +const int kStdErrFileno = 2; +#else +const int kStdOutFileno = STDOUT_FILENO; +const int kStdErrFileno = STDERR_FILENO; +#endif // _MSC_VER + +#if GTEST_OS_MAC + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const task_t task = mach_task_self(); + mach_msg_type_number_t thread_count; + thread_act_array_t thread_list; + const kern_return_t status = task_threads(task, &thread_list, &thread_count); + if (status == KERN_SUCCESS) { + // task_threads allocates resources in thread_list and we need to free them + // to avoid leaks. + vm_deallocate(task, + reinterpret_cast(thread_list), + sizeof(thread_t) * thread_count); + return static_cast(thread_count); + } else { + return 0; + } +} + +#else + +size_t GetThreadCount() { + // There's no portable way to detect the number of threads, so we just + // return 0 to indicate that we cannot detect it. + return 0; +} + +#endif // GTEST_OS_MAC + +#if GTEST_USES_POSIX_RE + +// Implements RE. Currently only needed for death tests. + +RE::~RE() { + if (is_valid_) { + // regfree'ing an invalid regex might crash because the content + // of the regex is undefined. Since the regex's are essentially + // the same, one cannot be valid (or invalid) without the other + // being so too. + regfree(&partial_regex_); + regfree(&full_regex_); + } + free(const_cast(pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.full_regex_, str, 1, &match, 0) == 0; +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = posix::StrDup(regex); + + // Reserves enough bytes to hold the regular expression used for a + // full match. + const size_t full_regex_len = strlen(regex) + 10; + char* const full_pattern = new char[full_regex_len]; + + snprintf(full_pattern, full_regex_len, "^(%s)$", regex); + is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; + // We want to call regcomp(&partial_regex_, ...) even if the + // previous expression returns false. Otherwise partial_regex_ may + // not be properly initialized can may cause trouble when it's + // freed. + // + // Some implementation of POSIX regex (e.g. on at least some + // versions of Cygwin) doesn't accept the empty string as a valid + // regex. We change it to an equivalent form "()" to be safe. + if (is_valid_) { + const char* const partial_regex = (*regex == '\0') ? "()" : regex; + is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; + } + EXPECT_TRUE(is_valid_) + << "Regular expression \"" << regex + << "\" is not a valid POSIX Extended regular expression."; + + delete[] full_pattern; +} + +#elif GTEST_USES_SIMPLE_RE + +// Returns true iff ch appears anywhere in str (excluding the +// terminating '\0' character). +bool IsInSet(char ch, const char* str) { + return ch != '\0' && strchr(str, ch) != NULL; +} + +// Returns true iff ch belongs to the given classification. Unlike +// similar functions in , these aren't affected by the +// current locale. +bool IsDigit(char ch) { return '0' <= ch && ch <= '9'; } +bool IsPunct(char ch) { + return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); +} +bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } +bool IsWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } +bool IsWordChar(char ch) { + return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || + ('0' <= ch && ch <= '9') || ch == '_'; +} + +// Returns true iff "\\c" is a supported escape sequence. +bool IsValidEscape(char c) { + return (IsPunct(c) || IsInSet(c, "dDfnrsStvwW")); +} + +// Returns true iff the given atom (specified by escaped and pattern) +// matches ch. The result is undefined if the atom is invalid. +bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { + if (escaped) { // "\\p" where p is pattern_char. + switch (pattern_char) { + case 'd': return IsDigit(ch); + case 'D': return !IsDigit(ch); + case 'f': return ch == '\f'; + case 'n': return ch == '\n'; + case 'r': return ch == '\r'; + case 's': return IsWhiteSpace(ch); + case 'S': return !IsWhiteSpace(ch); + case 't': return ch == '\t'; + case 'v': return ch == '\v'; + case 'w': return IsWordChar(ch); + case 'W': return !IsWordChar(ch); + } + return IsPunct(pattern_char) && pattern_char == ch; + } + + return (pattern_char == '.' && ch != '\n') || pattern_char == ch; +} + +// Helper function used by ValidateRegex() to format error messages. +String FormatRegexSyntaxError(const char* regex, int index) { + return (Message() << "Syntax error at index " << index + << " in simple regular expression \"" << regex << "\": ").GetString(); +} + +// Generates non-fatal failures and returns false if regex is invalid; +// otherwise returns true. +bool ValidateRegex(const char* regex) { + if (regex == NULL) { + // TODO(wan@google.com): fix the source file location in the + // assertion failures to match where the regex is used in user + // code. + ADD_FAILURE() << "NULL is not a valid simple regular expression."; + return false; + } + + bool is_valid = true; + + // True iff ?, *, or + can follow the previous atom. + bool prev_repeatable = false; + for (int i = 0; regex[i]; i++) { + if (regex[i] == '\\') { // An escape sequence + i++; + if (regex[i] == '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "'\\' cannot appear at the end."; + return false; + } + + if (!IsValidEscape(regex[i])) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "invalid escape sequence \"\\" << regex[i] << "\"."; + is_valid = false; + } + prev_repeatable = true; + } else { // Not an escape sequence. + const char ch = regex[i]; + + if (ch == '^' && i > 0) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'^' can only appear at the beginning."; + is_valid = false; + } else if (ch == '$' && regex[i + 1] != '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'$' can only appear at the end."; + is_valid = false; + } else if (IsInSet(ch, "()[]{}|")) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' is unsupported."; + is_valid = false; + } else if (IsRepeat(ch) && !prev_repeatable) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' can only follow a repeatable token."; + is_valid = false; + } + + prev_repeatable = !IsInSet(ch, "^$?*+"); + } + } + + return is_valid; +} + +// Matches a repeated regex atom followed by a valid simple regular +// expression. The regex atom is defined as c if escaped is false, +// or \c otherwise. repeat is the repetition meta character (?, *, +// or +). The behavior is undefined if str contains too many +// characters to be indexable by size_t, in which case the test will +// probably time out anyway. We are fine with this limitation as +// std::string has it too. +bool MatchRepetitionAndRegexAtHead( + bool escaped, char c, char repeat, const char* regex, + const char* str) { + const size_t min_count = (repeat == '+') ? 1 : 0; + const size_t max_count = (repeat == '?') ? 1 : + static_cast(-1) - 1; + // We cannot call numeric_limits::max() as it conflicts with the + // max() macro on Windows. + + for (size_t i = 0; i <= max_count; ++i) { + // We know that the atom matches each of the first i characters in str. + if (i >= min_count && MatchRegexAtHead(regex, str + i)) { + // We have enough matches at the head, and the tail matches too. + // Since we only care about *whether* the pattern matches str + // (as opposed to *how* it matches), there is no need to find a + // greedy match. + return true; + } + if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) + return false; + } + return false; +} + +// Returns true iff regex matches a prefix of str. regex must be a +// valid simple regular expression and not start with "^", or the +// result is undefined. +bool MatchRegexAtHead(const char* regex, const char* str) { + if (*regex == '\0') // An empty regex matches a prefix of anything. + return true; + + // "$" only matches the end of a string. Note that regex being + // valid guarantees that there's nothing after "$" in it. + if (*regex == '$') + return *str == '\0'; + + // Is the first thing in regex an escape sequence? + const bool escaped = *regex == '\\'; + if (escaped) + ++regex; + if (IsRepeat(regex[1])) { + // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so + // here's an indirect recursion. It terminates as the regex gets + // shorter in each recursion. + return MatchRepetitionAndRegexAtHead( + escaped, regex[0], regex[1], regex + 2, str); + } else { + // regex isn't empty, isn't "$", and doesn't start with a + // repetition. We match the first atom of regex with the first + // character of str and recurse. + return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && + MatchRegexAtHead(regex + 1, str + 1); + } +} + +// Returns true iff regex matches any substring of str. regex must be +// a valid simple regular expression, or the result is undefined. +// +// The algorithm is recursive, but the recursion depth doesn't exceed +// the regex length, so we won't need to worry about running out of +// stack space normally. In rare cases the time complexity can be +// exponential with respect to the regex length + the string length, +// but usually it's must faster (often close to linear). +bool MatchRegexAnywhere(const char* regex, const char* str) { + if (regex == NULL || str == NULL) + return false; + + if (*regex == '^') + return MatchRegexAtHead(regex + 1, str); + + // A successful match can be anywhere in str. + do { + if (MatchRegexAtHead(regex, str)) + return true; + } while (*str++ != '\0'); + return false; +} + +// Implements the RE class. + +RE::~RE() { + free(const_cast(pattern_)); + free(const_cast(full_pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = full_pattern_ = NULL; + if (regex != NULL) { + pattern_ = posix::StrDup(regex); + } + + is_valid_ = ValidateRegex(regex); + if (!is_valid_) { + // No need to calculate the full pattern when the regex is invalid. + return; + } + + const size_t len = strlen(regex); + // Reserves enough bytes to hold the regular expression used for a + // full match: we need space to prepend a '^', append a '$', and + // terminate the string with '\0'. + char* buffer = static_cast(malloc(len + 3)); + full_pattern_ = buffer; + + if (*regex != '^') + *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. + + // We don't use snprintf or strncpy, as they trigger a warning when + // compiled with VC++ 8.0. + memcpy(buffer, regex, len); + buffer += len; + + if (len == 0 || regex[len - 1] != '$') + *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. + + *buffer = '\0'; +} + +#endif // GTEST_USES_POSIX_RE + + +GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) + : severity_(severity) { + const char* const marker = + severity == GTEST_INFO ? "[ INFO ]" : + severity == GTEST_WARNING ? "[WARNING]" : + severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; + GetStream() << ::std::endl << marker << " " + << FormatFileLocation(file, line).c_str() << ": "; +} + +// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. +GTestLog::~GTestLog() { + GetStream() << ::std::endl; + if (severity_ == GTEST_FATAL) { + fflush(stderr); + posix::Abort(); + } +} +// Disable Microsoft deprecation warnings for POSIX functions called from +// this class (creat, dup, dup2, and close) +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4996) +#endif // _MSC_VER + +#if GTEST_HAS_STREAM_REDIRECTION_ + +// Object that captures an output stream (stdout/stderr). +class CapturedStream { + public: + // The ctor redirects the stream to a temporary file. + CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { +#if GTEST_OS_WINDOWS + char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT + char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT + + ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); + const UINT success = ::GetTempFileNameA(temp_dir_path, + "gtest_redir", + 0, // Generate unique file name. + temp_file_path); + GTEST_CHECK_(success != 0) + << "Unable to create a temporary file in " << temp_dir_path; + const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); + GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " + << temp_file_path; + filename_ = temp_file_path; +#else + // There's no guarantee that a test has write access to the + // current directory, so we create the temporary file in the /tmp + // directory instead. + char name_template[] = "/tmp/captured_stream.XXXXXX"; + const int captured_fd = mkstemp(name_template); + filename_ = name_template; +#endif // GTEST_OS_WINDOWS + fflush(NULL); + dup2(captured_fd, fd_); + close(captured_fd); + } + + ~CapturedStream() { + remove(filename_.c_str()); + } + + String GetCapturedString() { + if (uncaptured_fd_ != -1) { + // Restores the original stream. + fflush(NULL); + dup2(uncaptured_fd_, fd_); + close(uncaptured_fd_); + uncaptured_fd_ = -1; + } + + FILE* const file = posix::FOpen(filename_.c_str(), "r"); + const String content = ReadEntireFile(file); + posix::FClose(file); + return content; + } + + private: + // Reads the entire content of a file as a String. + static String ReadEntireFile(FILE* file); + + // Returns the size (in bytes) of a file. + static size_t GetFileSize(FILE* file); + + const int fd_; // A stream to capture. + int uncaptured_fd_; + // Name of the temporary file holding the stderr output. + ::std::string filename_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); +}; + +// Returns the size (in bytes) of a file. +size_t CapturedStream::GetFileSize(FILE* file) { + fseek(file, 0, SEEK_END); + return static_cast(ftell(file)); +} + +// Reads the entire content of a file as a string. +String CapturedStream::ReadEntireFile(FILE* file) { + const size_t file_size = GetFileSize(file); + char* const buffer = new char[file_size]; + + size_t bytes_last_read = 0; // # of bytes read in the last fread() + size_t bytes_read = 0; // # of bytes read so far + + fseek(file, 0, SEEK_SET); + + // Keeps reading the file until we cannot read further or the + // pre-determined file size is reached. + do { + bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); + bytes_read += bytes_last_read; + } while (bytes_last_read > 0 && bytes_read < file_size); + + const String content(buffer, bytes_read); + delete[] buffer; + + return content; +} + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER + +static CapturedStream* g_captured_stderr = NULL; +static CapturedStream* g_captured_stdout = NULL; + +// Starts capturing an output stream (stdout/stderr). +void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { + if (*stream != NULL) { + GTEST_LOG_(FATAL) << "Only one " << stream_name + << " capturer can exist at a time."; + } + *stream = new CapturedStream(fd); +} + +// Stops capturing the output stream and returns the captured string. +String GetCapturedStream(CapturedStream** captured_stream) { + const String content = (*captured_stream)->GetCapturedString(); + + delete *captured_stream; + *captured_stream = NULL; + + return content; +} + +// Starts capturing stdout. +void CaptureStdout() { + CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); +} + +// Starts capturing stderr. +void CaptureStderr() { + CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); +} + +// Stops capturing stdout and returns the captured string. +String GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); } + +// Stops capturing stderr and returns the captured string. +String GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } + +#endif // GTEST_HAS_STREAM_REDIRECTION_ + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +::std::vector g_argvs; + +// Returns the command line as a vector of strings. +const ::std::vector& GetArgvs() { return g_argvs; } + +#endif // GTEST_HAS_DEATH_TEST + +#if GTEST_OS_WINDOWS_MOBILE +namespace posix { +void Abort() { + DebugBreak(); + TerminateProcess(GetCurrentProcess(), 1); +} +} // namespace posix +#endif // GTEST_OS_WINDOWS_MOBILE + +// Returns the name of the environment variable corresponding to the +// given flag. For example, FlagToEnvVar("foo") will return +// "GTEST_FOO" in the open-source version. +static String FlagToEnvVar(const char* flag) { + const String full_flag = + (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); + + Message env_var; + for (size_t i = 0; i != full_flag.length(); i++) { + env_var << static_cast(toupper(full_flag.c_str()[i])); + } + + return env_var.GetString(); +} + +// Parses 'str' for a 32-bit signed integer. If successful, writes +// the result to *value and returns true; otherwise leaves *value +// unchanged and returns false. +bool ParseInt32(const Message& src_text, const char* str, Int32* value) { + // Parses the environment variable as a decimal integer. + char* end = NULL; + const long long_value = strtol(str, &end, 10); // NOLINT + + // Has strtol() consumed all characters in the string? + if (*end != '\0') { + // No - an invalid character was encountered. + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value \"" << str << "\".\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + // Is the parsed value in the range of an Int32? + const Int32 result = static_cast(long_value); + if (long_value == LONG_MAX || long_value == LONG_MIN || + // The parsed value overflows as a long. (strtol() returns + // LONG_MAX or LONG_MIN when the input overflows.) + result != long_value + // The parsed value overflows as an Int32. + ) { + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value " << str << ", which overflows.\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + *value = result; + return true; +} + +// Reads and returns the Boolean environment variable corresponding to +// the given flag; if it's not set, returns default_value. +// +// The value is considered true iff it's not "0". +bool BoolFromGTestEnv(const char* flag, bool default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + return string_value == NULL ? + default_value : strcmp(string_value, "0") != 0; +} + +// Reads and returns a 32-bit integer stored in the environment +// variable corresponding to the given flag; if it isn't set or +// doesn't represent a valid 32-bit integer, returns default_value. +Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + if (string_value == NULL) { + // The environment variable is not set. + return default_value; + } + + Int32 result = default_value; + if (!ParseInt32(Message() << "Environment variable " << env_var, + string_value, &result)) { + printf("The default value %s is used.\n", + (Message() << default_value).GetString().c_str()); + fflush(stdout); + return default_value; + } + + return result; +} + +// Reads and returns the string environment variable corresponding to +// the given flag; if it's not set, returns default_value. +const char* StringFromGTestEnv(const char* flag, const char* default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const value = posix::GetEnv(env_var.c_str()); + return value == NULL ? default_value : value; +} + +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-test-part.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-test-part.cc new file mode 100644 index 00000000..5d183a44 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-test-part.cc @@ -0,0 +1,110 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// The Google C++ Testing Framework (Google Test) + +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +using internal::GetUnitTestImpl; + +// Gets the summary of the failure message by omitting the stack trace +// in it. +internal::String TestPartResult::ExtractSummary(const char* message) { + const char* const stack_trace = strstr(message, internal::kStackTraceMarker); + return stack_trace == NULL ? internal::String(message) : + internal::String(message, stack_trace - message); +} + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { + return os + << result.file_name() << ":" << result.line_number() << ": " + << (result.type() == TestPartResult::kSuccess ? "Success" : + result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : + "Non-fatal failure") << ":\n" + << result.message() << std::endl; +} + +// Appends a TestPartResult to the array. +void TestPartResultArray::Append(const TestPartResult& result) { + array_.push_back(result); +} + +// Returns the TestPartResult at the given index (0-based). +const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { + if (index < 0 || index >= size()) { + printf("\nInvalid index (%d) into TestPartResultArray.\n", index); + internal::posix::Abort(); + } + + return array_[index]; +} + +// Returns the number of TestPartResult objects in the array. +int TestPartResultArray::size() const { + return static_cast(array_.size()); +} + +namespace internal { + +HasNewFatalFailureHelper::HasNewFatalFailureHelper() + : has_new_fatal_failure_(false), + original_reporter_(GetUnitTestImpl()-> + GetTestPartResultReporterForCurrentThread()) { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); +} + +HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( + original_reporter_); +} + +void HasNewFatalFailureHelper::ReportTestPartResult( + const TestPartResult& result) { + if (result.fatally_failed()) + has_new_fatal_failure_ = true; + original_reporter_->ReportTestPartResult(result); +} + +} // namespace internal + +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-typed-test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-typed-test.cc new file mode 100644 index 00000000..3cc4b5de --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest-typed-test.cc @@ -0,0 +1,110 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include +#include + +namespace testing { +namespace internal { + +#if GTEST_HAS_TYPED_TEST_P + +// Skips to the first non-space char in str. Returns an empty string if str +// contains only whitespace characters. +static const char* SkipSpaces(const char* str) { + while (isspace(*str)) + str++; + return str; +} + +// Verifies that registered_tests match the test names in +// defined_test_names_; returns registered_tests if successful, or +// aborts the program otherwise. +const char* TypedTestCasePState::VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests) { + typedef ::std::set::const_iterator DefinedTestIter; + registered_ = true; + + // Skip initial whitespace in registered_tests since some + // preprocessors prefix stringizied literals with whitespace. + registered_tests = SkipSpaces(registered_tests); + + Message errors; + ::std::set tests; + for (const char* names = registered_tests; names != NULL; + names = SkipComma(names)) { + const String name = GetPrefixUntilComma(names); + if (tests.count(name) != 0) { + errors << "Test " << name << " is listed more than once.\n"; + continue; + } + + bool found = false; + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (name == *it) { + found = true; + break; + } + } + + if (found) { + tests.insert(name); + } else { + errors << "No test named " << name + << " can be found in this test case.\n"; + } + } + + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (tests.count(*it) == 0) { + errors << "You forgot to list test " << *it << ".\n"; + } + } + + const String& errors_str = errors.GetString(); + if (errors_str != "") { + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors_str.c_str()); + fflush(stderr); + posix::Abort(); + } + + return registered_tests; +} + +#endif // GTEST_HAS_TYPED_TEST_P + +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest.cc new file mode 100644 index 00000000..342d4582 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest.cc @@ -0,0 +1,4704 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if GTEST_OS_LINUX + +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +#define GTEST_HAS_GETTIMEOFDAY_ 1 + +#include +#include +#include +// Declares vsnprintf(). This header is not available on Windows. +#include +#include +#include +#include +#include +#include + +#elif GTEST_OS_SYMBIAN +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT + +#elif GTEST_OS_ZOS +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT + +// On z/OS we additionally need strings.h for strcasecmp. +#include // NOLINT + +#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. + +#include // NOLINT + +#elif GTEST_OS_WINDOWS // We are on Windows proper. + +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#if GTEST_OS_WINDOWS_MINGW +// MinGW has gettimeofday() but not _ftime64(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +// TODO(kenton@google.com): There are other ways to get the time on +// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW +// supports these. consider using them instead. +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT +#endif // GTEST_OS_WINDOWS_MINGW + +// cpplint thinks that the header is already included, so we want to +// silence it. +#include // NOLINT + +#else + +// Assume other platforms have gettimeofday(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +#define GTEST_HAS_GETTIMEOFDAY_ 1 + +// cpplint thinks that the header is already included, so we want to +// silence it. +#include // NOLINT +#include // NOLINT + +#endif // GTEST_OS_LINUX + +#if GTEST_HAS_EXCEPTIONS +#include +#endif + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_OS_WINDOWS +#define vsnprintf _vsnprintf +#endif // GTEST_OS_WINDOWS + +namespace testing { + +using internal::CountIf; +using internal::ForEach; +using internal::GetElementOr; +using internal::Shuffle; + +// Constants. + +// A test whose test case name or test name matches this filter is +// disabled and not run. +static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; + +// A test case whose name matches this filter is considered a death +// test case and will be run before test cases whose name doesn't +// match this filter. +static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; + +// A test filter that matches everything. +static const char kUniversalFilter[] = "*"; + +// The default output file for XML output. +static const char kDefaultOutputFile[] = "test_detail.xml"; + +// The environment variable name for the test shard index. +static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; +// The environment variable name for the total number of test shards. +static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; +// The environment variable name for the test shard status file. +static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; + +namespace internal { + +// The text used in failure messages to indicate the start of the +// stack trace. +const char kStackTraceMarker[] = "\nStack trace:\n"; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +bool g_help_flag = false; + +} // namespace internal + +GTEST_DEFINE_bool_( + also_run_disabled_tests, + internal::BoolFromGTestEnv("also_run_disabled_tests", false), + "Run disabled tests too, in addition to the tests normally being run."); + +GTEST_DEFINE_bool_( + break_on_failure, + internal::BoolFromGTestEnv("break_on_failure", false), + "True iff a failed assertion should be a debugger break-point."); + +GTEST_DEFINE_bool_( + catch_exceptions, + internal::BoolFromGTestEnv("catch_exceptions", false), + "True iff " GTEST_NAME_ + " should catch exceptions and treat them as test failures."); + +GTEST_DEFINE_string_( + color, + internal::StringFromGTestEnv("color", "auto"), + "Whether to use colors in the output. Valid values: yes, no, " + "and auto. 'auto' means to use colors if the output is " + "being sent to a terminal and the TERM environment variable " + "is set to xterm, xterm-color, xterm-256color, linux or cygwin."); + +GTEST_DEFINE_string_( + filter, + internal::StringFromGTestEnv("filter", kUniversalFilter), + "A colon-separated list of glob (not regex) patterns " + "for filtering the tests to run, optionally followed by a " + "'-' and a : separated list of negative patterns (tests to " + "exclude). A test is run if it matches one of the positive " + "patterns and does not match any of the negative patterns."); + +GTEST_DEFINE_bool_(list_tests, false, + "List all tests without running them."); + +GTEST_DEFINE_string_( + output, + internal::StringFromGTestEnv("output", ""), + "A format (currently must be \"xml\"), optionally followed " + "by a colon and an output file name or directory. A directory " + "is indicated by a trailing pathname separator. " + "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " + "If a directory is specified, output files will be created " + "within that directory, with file-names based on the test " + "executable's name and, if necessary, made unique by adding " + "digits."); + +GTEST_DEFINE_bool_( + print_time, + internal::BoolFromGTestEnv("print_time", true), + "True iff " GTEST_NAME_ + " should display elapsed time in text output."); + +GTEST_DEFINE_int32_( + random_seed, + internal::Int32FromGTestEnv("random_seed", 0), + "Random number seed to use when shuffling test orders. Must be in range " + "[1, 99999], or 0 to use a seed based on the current time."); + +GTEST_DEFINE_int32_( + repeat, + internal::Int32FromGTestEnv("repeat", 1), + "How many times to repeat each test. Specify a negative number " + "for repeating forever. Useful for shaking out flaky tests."); + +GTEST_DEFINE_bool_( + show_internal_stack_frames, false, + "True iff " GTEST_NAME_ " should include internal stack frames when " + "printing test failure stack traces."); + +GTEST_DEFINE_bool_( + shuffle, + internal::BoolFromGTestEnv("shuffle", false), + "True iff " GTEST_NAME_ + " should randomize tests' order on every run."); + +GTEST_DEFINE_int32_( + stack_trace_depth, + internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), + "The maximum number of stack frames to print when an " + "assertion fails. The valid range is 0 through 100, inclusive."); + +GTEST_DEFINE_bool_( + throw_on_failure, + internal::BoolFromGTestEnv("throw_on_failure", false), + "When this flag is specified, a failed assertion will throw an exception " + "if exceptions are enabled or exit the program with a non-zero code " + "otherwise."); + +namespace internal { + +// Generates a random number from [0, range), using a Linear +// Congruential Generator (LCG). Crashes if 'range' is 0 or greater +// than kMaxRange. +UInt32 Random::Generate(UInt32 range) { + // These constants are the same as are used in glibc's rand(3). + state_ = (1103515245U*state_ + 12345U) % kMaxRange; + + GTEST_CHECK_(range > 0) + << "Cannot generate a number in the range [0, 0)."; + GTEST_CHECK_(range <= kMaxRange) + << "Generation of a number in [0, " << range << ") was requested, " + << "but this can only generate numbers in [0, " << kMaxRange << ")."; + + // Converting via modulus introduces a bit of downward bias, but + // it's simple, and a linear congruential generator isn't too good + // to begin with. + return state_ % range; +} + +// GTestIsInitialized() returns true iff the user has initialized +// Google Test. Useful for catching the user mistake of not initializing +// Google Test before calling RUN_ALL_TESTS(). +// +// A user must call testing::InitGoogleTest() to initialize Google +// Test. g_init_gtest_count is set to the number of times +// InitGoogleTest() has been called. We don't protect this variable +// under a mutex as it is only accessed in the main thread. +int g_init_gtest_count = 0; +static bool GTestIsInitialized() { return g_init_gtest_count != 0; } + +// Iterates over a vector of TestCases, keeping a running sum of the +// results of calling a given int-returning method on each. +// Returns the sum. +static int SumOverTestCaseList(const std::vector& case_list, + int (TestCase::*method)() const) { + int sum = 0; + for (size_t i = 0; i < case_list.size(); i++) { + sum += (case_list[i]->*method)(); + } + return sum; +} + +// Returns true iff the test case passed. +static bool TestCasePassed(const TestCase* test_case) { + return test_case->should_run() && test_case->Passed(); +} + +// Returns true iff the test case failed. +static bool TestCaseFailed(const TestCase* test_case) { + return test_case->should_run() && test_case->Failed(); +} + +// Returns true iff test_case contains at least one test that should +// run. +static bool ShouldRunTestCase(const TestCase* test_case) { + return test_case->should_run(); +} + +// AssertHelper constructor. +AssertHelper::AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message) + : data_(new AssertHelperData(type, file, line, message)) { +} + +AssertHelper::~AssertHelper() { + delete data_; +} + +// Message assignment, for assertion streaming support. +void AssertHelper::operator=(const Message& message) const { + UnitTest::GetInstance()-> + AddTestPartResult(data_->type, data_->file, data_->line, + AppendUserMessage(data_->message, message), + UnitTest::GetInstance()->impl() + ->CurrentOsStackTraceExceptTop(1) + // Skips the stack frame for this function itself. + ); // NOLINT +} + +// Mutex for linked pointers. +GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// Application pathname gotten in InitGoogleTest. +String g_executable_path; + +// Returns the current application's name, removing directory path if that +// is present. +FilePath GetCurrentExecutableName() { + FilePath result; + +#if GTEST_OS_WINDOWS + result.Set(FilePath(g_executable_path).RemoveExtension("exe")); +#else + result.Set(FilePath(g_executable_path)); +#endif // GTEST_OS_WINDOWS + + return result.RemoveDirectoryName(); +} + +// Functions for processing the gtest_output flag. + +// Returns the output format, or "" for normal printed output. +String UnitTestOptions::GetOutputFormat() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) return String(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + return (colon == NULL) ? + String(gtest_output_flag) : + String(gtest_output_flag, colon - gtest_output_flag); +} + +// Returns the name of the requested output file, or the default if none +// was explicitly specified. +String UnitTestOptions::GetAbsolutePathToOutputFile() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) + return String(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + if (colon == NULL) + return String(internal::FilePath::ConcatPaths( + internal::FilePath( + UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(kDefaultOutputFile)).ToString() ); + + internal::FilePath output_name(colon + 1); + if (!output_name.IsAbsolutePath()) + // TODO(wan@google.com): on Windows \some\path is not an absolute + // path (as its meaning depends on the current drive), yet the + // following logic for turning it into an absolute path is wrong. + // Fix it. + output_name = internal::FilePath::ConcatPaths( + internal::FilePath(UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(colon + 1)); + + if (!output_name.IsDirectory()) + return output_name.ToString(); + + internal::FilePath result(internal::FilePath::GenerateUniqueFileName( + output_name, internal::GetCurrentExecutableName(), + GetOutputFormat().c_str())); + return result.ToString(); +} + +// Returns true iff the wildcard pattern matches the string. The +// first ':' or '\0' character in pattern marks the end of it. +// +// This recursive algorithm isn't very efficient, but is clear and +// works well enough for matching test names, which are short. +bool UnitTestOptions::PatternMatchesString(const char *pattern, + const char *str) { + switch (*pattern) { + case '\0': + case ':': // Either ':' or '\0' marks the end of the pattern. + return *str == '\0'; + case '?': // Matches any single character. + return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); + case '*': // Matches any string (possibly empty) of characters. + return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || + PatternMatchesString(pattern + 1, str); + default: // Non-special character. Matches itself. + return *pattern == *str && + PatternMatchesString(pattern + 1, str + 1); + } +} + +bool UnitTestOptions::MatchesFilter(const String& name, const char* filter) { + const char *cur_pattern = filter; + for (;;) { + if (PatternMatchesString(cur_pattern, name.c_str())) { + return true; + } + + // Finds the next pattern in the filter. + cur_pattern = strchr(cur_pattern, ':'); + + // Returns if no more pattern can be found. + if (cur_pattern == NULL) { + return false; + } + + // Skips the pattern separater (the ':' character). + cur_pattern++; + } +} + +// TODO(keithray): move String function implementations to gtest-string.cc. + +// Returns true iff the user-specified filter matches the test case +// name and the test name. +bool UnitTestOptions::FilterMatchesTest(const String &test_case_name, + const String &test_name) { + const String& full_name = String::Format("%s.%s", + test_case_name.c_str(), + test_name.c_str()); + + // Split --gtest_filter at '-', if there is one, to separate into + // positive filter and negative filter portions + const char* const p = GTEST_FLAG(filter).c_str(); + const char* const dash = strchr(p, '-'); + String positive; + String negative; + if (dash == NULL) { + positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter + negative = String(""); + } else { + positive = String(p, dash - p); // Everything up to the dash + negative = String(dash+1); // Everything after the dash + if (positive.empty()) { + // Treat '-test1' as the same as '*-test1' + positive = kUniversalFilter; + } + } + + // A filter is a colon-separated list of patterns. It matches a + // test if any pattern in it matches the test. + return (MatchesFilter(full_name, positive.c_str()) && + !MatchesFilter(full_name, negative.c_str())); +} + +#if GTEST_OS_WINDOWS +// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the +// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. +// This function is useful as an __except condition. +int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { + // Google Test should handle an exception if: + // 1. the user wants it to, AND + // 2. this is not a breakpoint exception. + return (GTEST_FLAG(catch_exceptions) && + exception_code != EXCEPTION_BREAKPOINT) ? + EXCEPTION_EXECUTE_HANDLER : + EXCEPTION_CONTINUE_SEARCH; +} +#endif // GTEST_OS_WINDOWS + +} // namespace internal + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. Intercepts only failures from the current thread. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + TestPartResultArray* result) + : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), + result_(result) { + Init(); +} + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + InterceptMode intercept_mode, TestPartResultArray* result) + : intercept_mode_(intercept_mode), + result_(result) { + Init(); +} + +void ScopedFakeTestPartResultReporter::Init() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + old_reporter_ = impl->GetGlobalTestPartResultReporter(); + impl->SetGlobalTestPartResultReporter(this); + } else { + old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); + impl->SetTestPartResultReporterForCurrentThread(this); + } +} + +// The d'tor restores the test part result reporter used by Google Test +// before. +ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + impl->SetGlobalTestPartResultReporter(old_reporter_); + } else { + impl->SetTestPartResultReporterForCurrentThread(old_reporter_); + } +} + +// Increments the test part result count and remembers the result. +// This method is from the TestPartResultReporterInterface interface. +void ScopedFakeTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + result_->Append(result); +} + +namespace internal { + +// Returns the type ID of ::testing::Test. We should always call this +// instead of GetTypeId< ::testing::Test>() to get the type ID of +// testing::Test. This is to work around a suspected linker bug when +// using Google Test as a framework on Mac OS X. The bug causes +// GetTypeId< ::testing::Test>() to return different values depending +// on whether the call is from the Google Test framework itself or +// from user test code. GetTestTypeId() is guaranteed to always +// return the same value, as it always calls GetTypeId<>() from the +// gtest.cc, which is within the Google Test framework. +TypeId GetTestTypeId() { + return GetTypeId(); +} + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); + +// This predicate-formatter checks that 'results' contains a test part +// failure of the given type and that the failure message contains the +// given substring. +AssertionResult HasOneFailure(const char* /* results_expr */, + const char* /* type_expr */, + const char* /* substr_expr */, + const TestPartResultArray& results, + TestPartResult::Type type, + const char* substr) { + const String expected(type == TestPartResult::kFatalFailure ? + "1 fatal failure" : + "1 non-fatal failure"); + Message msg; + if (results.size() != 1) { + msg << "Expected: " << expected << "\n" + << " Actual: " << results.size() << " failures"; + for (int i = 0; i < results.size(); i++) { + msg << "\n" << results.GetTestPartResult(i); + } + return AssertionFailure(msg); + } + + const TestPartResult& r = results.GetTestPartResult(0); + if (r.type() != type) { + msg << "Expected: " << expected << "\n" + << " Actual:\n" + << r; + return AssertionFailure(msg); + } + + if (strstr(r.message(), substr) == NULL) { + msg << "Expected: " << expected << " containing \"" + << substr << "\"\n" + << " Actual:\n" + << r; + return AssertionFailure(msg); + } + + return AssertionSuccess(); +} + +// The constructor of SingleFailureChecker remembers where to look up +// test part results, what type of failure we expect, and what +// substring the failure message should contain. +SingleFailureChecker:: SingleFailureChecker( + const TestPartResultArray* results, + TestPartResult::Type type, + const char* substr) + : results_(results), + type_(type), + substr_(substr) {} + +// The destructor of SingleFailureChecker verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +SingleFailureChecker::~SingleFailureChecker() { + EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_.c_str()); +} + +DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultGlobalTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->current_test_result()->AddTestPartResult(result); + unit_test_->listeners()->repeater()->OnTestPartResult(result); +} + +DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); +} + +// Returns the global test part result reporter. +TestPartResultReporterInterface* +UnitTestImpl::GetGlobalTestPartResultReporter() { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + return global_test_part_result_repoter_; +} + +// Sets the global test part result reporter. +void UnitTestImpl::SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter) { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + global_test_part_result_repoter_ = reporter; +} + +// Returns the test part result reporter for the current thread. +TestPartResultReporterInterface* +UnitTestImpl::GetTestPartResultReporterForCurrentThread() { + return per_thread_test_part_result_reporter_.get(); +} + +// Sets the test part result reporter for the current thread. +void UnitTestImpl::SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter) { + per_thread_test_part_result_reporter_.set(reporter); +} + +// Gets the number of successful test cases. +int UnitTestImpl::successful_test_case_count() const { + return CountIf(test_cases_, TestCasePassed); +} + +// Gets the number of failed test cases. +int UnitTestImpl::failed_test_case_count() const { + return CountIf(test_cases_, TestCaseFailed); +} + +// Gets the number of all test cases. +int UnitTestImpl::total_test_case_count() const { + return static_cast(test_cases_.size()); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTestImpl::test_case_to_run_count() const { + return CountIf(test_cases_, ShouldRunTestCase); +} + +// Gets the number of successful tests. +int UnitTestImpl::successful_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); +} + +// Gets the number of failed tests. +int UnitTestImpl::failed_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); +} + +// Gets the number of disabled tests. +int UnitTestImpl::disabled_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); +} + +// Gets the number of all tests. +int UnitTestImpl::total_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); +} + +// Gets the number of tests that should run. +int UnitTestImpl::test_to_run_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); +} + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// CurrentOsStackTraceExceptTop(1), Foo() will be included in the +// trace but Bar() and CurrentOsStackTraceExceptTop() won't. +String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { + (void)skip_count; + return String(""); +} + +// Returns the current time in milliseconds. +TimeInMillis GetTimeInMillis() { +#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) + // Difference between 1970-01-01 and 1601-01-01 in milliseconds. + // http://analogous.blogspot.com/2005/04/epoch.html + const TimeInMillis kJavaEpochToWinFileTimeDelta = + static_cast(116444736UL) * 100000UL; + const DWORD kTenthMicrosInMilliSecond = 10000; + + SYSTEMTIME now_systime; + FILETIME now_filetime; + ULARGE_INTEGER now_int64; + // TODO(kenton@google.com): Shouldn't this just use + // GetSystemTimeAsFileTime()? + GetSystemTime(&now_systime); + if (SystemTimeToFileTime(&now_systime, &now_filetime)) { + now_int64.LowPart = now_filetime.dwLowDateTime; + now_int64.HighPart = now_filetime.dwHighDateTime; + now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - + kJavaEpochToWinFileTimeDelta; + return now_int64.QuadPart; + } + return 0; +#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ + __timeb64 now; +#ifdef _MSC_VER + // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 + // (deprecated function) there. + // TODO(kenton@google.com): Use GetTickCount()? Or use + // SystemTimeToFileTime() +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4996) // Temporarily disables warning 4996. + _ftime64(&now); +#pragma warning(pop) // Restores the warning state. +#else + _ftime64(&now); +#endif // _MSC_VER + return static_cast(now.time) * 1000 + now.millitm; +#elif GTEST_HAS_GETTIMEOFDAY_ + struct timeval now; + gettimeofday(&now, NULL); + return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; +#else +#error "Don't know how to get the current time on your system." +#endif +} + +// Utilities + +// class String + +// Returns the input enclosed in double quotes if it's not NULL; +// otherwise returns "(null)". For example, "\"Hello\"" is returned +// for input "Hello". +// +// This is useful for printing a C string in the syntax of a literal. +// +// Known issue: escape sequences are not handled yet. +String String::ShowCStringQuoted(const char* c_str) { + return c_str ? String::Format("\"%s\"", c_str) : String("(null)"); +} + +// Copies at most length characters from str into a newly-allocated +// piece of memory of size length+1. The memory is allocated with new[]. +// A terminating null byte is written to the memory, and a pointer to it +// is returned. If str is NULL, NULL is returned. +static char* CloneString(const char* str, size_t length) { + if (str == NULL) { + return NULL; + } else { + char* const clone = new char[length + 1]; + posix::StrNCpy(clone, str, length); + clone[length] = '\0'; + return clone; + } +} + +// Clones a 0-terminated C string, allocating memory using new. The +// caller is responsible for deleting[] the return value. Returns the +// cloned string, or NULL if the input is NULL. +const char * String::CloneCString(const char* c_str) { + return (c_str == NULL) ? + NULL : CloneString(c_str, strlen(c_str)); +} + +#if GTEST_OS_WINDOWS_MOBILE +// Creates a UTF-16 wide string from the given ANSI string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the wide string, or NULL if the +// input is NULL. +LPCWSTR String::AnsiToUtf16(const char* ansi) { + if (!ansi) return NULL; + const int length = strlen(ansi); + const int unicode_length = + MultiByteToWideChar(CP_ACP, 0, ansi, length, + NULL, 0); + WCHAR* unicode = new WCHAR[unicode_length + 1]; + MultiByteToWideChar(CP_ACP, 0, ansi, length, + unicode, unicode_length); + unicode[unicode_length] = 0; + return unicode; +} + +// Creates an ANSI string from the given wide string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the ANSI string, or NULL if the +// input is NULL. +const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { + if (!utf16_str) return NULL; + const int ansi_length = + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + NULL, 0, NULL, NULL); + char* ansi = new char[ansi_length + 1]; + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + ansi, ansi_length, NULL, NULL); + ansi[ansi_length] = 0; + return ansi; +} + +#endif // GTEST_OS_WINDOWS_MOBILE + +// Compares two C strings. Returns true iff they have the same content. +// +// Unlike strcmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CStringEquals(const char * lhs, const char * rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + + return strcmp(lhs, rhs) == 0; +} + +#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +// Converts an array of wide chars to a narrow string using the UTF-8 +// encoding, and streams the result to the given Message object. +static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, + Message* msg) { + // TODO(wan): consider allowing a testing::String object to + // contain '\0'. This will make it behave more like std::string, + // and will allow ToUtf8String() to return the correct encoding + // for '\0' s.t. we can get rid of the conditional here (and in + // several other places). + for (size_t i = 0; i != length; ) { // NOLINT + if (wstr[i] != L'\0') { + *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); + while (i != length && wstr[i] != L'\0') + i++; + } else { + *msg << '\0'; + i++; + } + } +} + +#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +} // namespace internal + +#if GTEST_HAS_STD_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::std::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +namespace internal { + +// Formats a value to be used in a failure message. + +// For a char value, we print it as a C++ char literal and as an +// unsigned integer (both in decimal and in hexadecimal). +String FormatForFailureMessage(char ch) { + const unsigned int ch_as_uint = ch; + // A String object cannot contain '\0', so we print "\\0" when ch is + // '\0'. + return String::Format("'%s' (%u, 0x%X)", + ch ? String::Format("%c", ch).c_str() : "\\0", + ch_as_uint, ch_as_uint); +} + +// For a wchar_t value, we print it as a C++ wchar_t literal and as an +// unsigned integer (both in decimal and in hexidecimal). +String FormatForFailureMessage(wchar_t wchar) { + // The C++ standard doesn't specify the exact size of the wchar_t + // type. It just says that it shall have the same size as another + // integral type, called its underlying type. + // + // Therefore, in order to print a wchar_t value in the numeric form, + // we first convert it to the largest integral type (UInt64) and + // then print the converted value. + // + // We use streaming to print the value as "%llu" doesn't work + // correctly with MSVC 7.1. + const UInt64 wchar_as_uint64 = wchar; + Message msg; + // A String object cannot contain '\0', so we print "\\0" when wchar is + // L'\0'. + char buffer[32]; // CodePointToUtf8 requires a buffer that big. + msg << "L'" + << (wchar ? CodePointToUtf8(static_cast(wchar), buffer) : "\\0") + << "' (" << wchar_as_uint64 << ", 0x" << ::std::setbase(16) + << wchar_as_uint64 << ")"; + return msg.GetString(); +} + +} // namespace internal + +// AssertionResult constructors. +// Used in EXPECT_TRUE/FALSE(assertion_result). +AssertionResult::AssertionResult(const AssertionResult& other) + : success_(other.success_), + message_(other.message_.get() != NULL ? + new internal::String(*other.message_) : + static_cast(NULL)) { +} + +// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. +AssertionResult AssertionResult::operator!() const { + AssertionResult negation(!success_); + if (message_.get() != NULL) + negation << *message_; + return negation; +} + +// Makes a successful assertion result. +AssertionResult AssertionSuccess() { + return AssertionResult(true); +} + +// Makes a failed assertion result. +AssertionResult AssertionFailure() { + return AssertionResult(false); +} + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << message. +AssertionResult AssertionFailure(const Message& message) { + return AssertionFailure() << message; +} + +namespace internal { + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const String& expected_value, + const String& actual_value, + bool ignoring_case) { + Message msg; + msg << "Value of: " << actual_expression; + if (actual_value != actual_expression) { + msg << "\n Actual: " << actual_value; + } + + msg << "\nExpected: " << expected_expression; + if (ignoring_case) { + msg << " (ignoring case)"; + } + if (expected_value != expected_expression) { + msg << "\nWhich is: " << expected_value; + } + + return AssertionFailure(msg); +} + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +String GetBoolAssertionFailureMessage(const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value) { + const char* actual_message = assertion_result.message(); + Message msg; + msg << "Value of: " << expression_text + << "\n Actual: " << actual_predicate_value; + if (actual_message[0] != '\0') + msg << " (" << actual_message << ")"; + msg << "\nExpected: " << expected_predicate_value; + return msg.GetString(); +} + +// Helper function for implementing ASSERT_NEAR. +AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error) { + const double diff = fabs(val1 - val2); + if (diff <= abs_error) return AssertionSuccess(); + + // TODO(wan): do not print the value of an expression if it's + // already a literal. + Message msg; + msg << "The difference between " << expr1 << " and " << expr2 + << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ", and\n" + << abs_error_expr << " evaluates to " << abs_error << "."; + return AssertionFailure(msg); +} + + +// Helper template for implementing FloatLE() and DoubleLE(). +template +AssertionResult FloatingPointLE(const char* expr1, + const char* expr2, + RawType val1, + RawType val2) { + // Returns success if val1 is less than val2, + if (val1 < val2) { + return AssertionSuccess(); + } + + // or if val1 is almost equal to val2. + const FloatingPoint lhs(val1), rhs(val2); + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + // Note that the above two checks will both fail if either val1 or + // val2 is NaN, as the IEEE floating-point standard requires that + // any predicate involving a NaN must return false. + + StrStream val1_ss; + val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val1; + + StrStream val2_ss; + val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val2; + + Message msg; + msg << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" + << " Actual: " << StrStreamToString(&val1_ss) << " vs " + << StrStreamToString(&val2_ss); + + return AssertionFailure(msg); +} + +} // namespace internal + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +namespace internal { + +// The helper function for {ASSERT|EXPECT}_EQ with int or enum +// arguments. +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + if (expected == actual) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here +// just to avoid copy-and-paste of similar code. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + BiggestInt val1, BiggestInt val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + Message msg;\ + msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + return AssertionFailure(msg);\ + }\ +} + +// Implements the helper function for {ASSERT|EXPECT}_NE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(NE, !=) +// Implements the helper function for {ASSERT|EXPECT}_LE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LE, <=) +// Implements the helper function for {ASSERT|EXPECT}_LT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LT, < ) +// Implements the helper function for {ASSERT|EXPECT}_GE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GE, >=) +// Implements the helper function for {ASSERT|EXPECT}_GT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GT, > ) + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowCStringQuoted(expected), + String::ShowCStringQuoted(actual), + false); +} + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CaseInsensitiveCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowCStringQuoted(expected), + String::ShowCStringQuoted(actual), + true); +} + +// The helper function for {ASSERT|EXPECT}_STRNE. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + return AssertionFailure(msg); + } +} + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CaseInsensitiveCStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << ") (ignoring case), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + return AssertionFailure(msg); + } +} + +} // namespace internal + +namespace { + +// Helper functions for implementing IsSubString() and IsNotSubstring(). + +// This group of overloaded functions return true iff needle is a +// substring of haystack. NULL is considered a substring of itself +// only. + +bool IsSubstringPred(const char* needle, const char* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return strstr(haystack, needle) != NULL; +} + +bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return wcsstr(haystack, needle) != NULL; +} + +// StringType here can be either ::std::string or ::std::wstring. +template +bool IsSubstringPred(const StringType& needle, + const StringType& haystack) { + return haystack.find(needle) != StringType::npos; +} + +// This function implements either IsSubstring() or IsNotSubstring(), +// depending on the value of the expected_to_be_substring parameter. +// StringType here can be const char*, const wchar_t*, ::std::string, +// or ::std::wstring. +template +AssertionResult IsSubstringImpl( + bool expected_to_be_substring, + const char* needle_expr, const char* haystack_expr, + const StringType& needle, const StringType& haystack) { + if (IsSubstringPred(needle, haystack) == expected_to_be_substring) + return AssertionSuccess(); + + const bool is_wide_string = sizeof(needle[0]) > 1; + const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; + return AssertionFailure( + Message() + << "Value of: " << needle_expr << "\n" + << " Actual: " << begin_string_quote << needle << "\"\n" + << "Expected: " << (expected_to_be_substring ? "" : "not ") + << "a substring of " << haystack_expr << "\n" + << "Which is: " << begin_string_quote << haystack << "\""); +} + +} // namespace + +// IsSubstring() and IsNotSubstring() check whether needle is a +// substring of haystack (NULL is considered a substring of itself +// only), and return an appropriate error message when they fail. + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +#if GTEST_HAS_STD_WSTRING +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +#if GTEST_OS_WINDOWS + +namespace { + +// Helper function for IsHRESULT{SuccessFailure} predicates +AssertionResult HRESULTFailureHelper(const char* expr, + const char* expected, + long hr) { // NOLINT +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't support FormatMessage. + const char error_text[] = ""; +#else + // Looks up the human-readable system message for the HRESULT code + // and since we're not passing any params to FormatMessage, we don't + // want inserts expanded. + const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS; + const DWORD kBufSize = 4096; // String::Format can't exceed this length. + // Gets the system's human readable message string for this HRESULT. + char error_text[kBufSize] = { '\0' }; + DWORD message_length = ::FormatMessageA(kFlags, + 0, // no source, we're asking system + hr, // the error + 0, // no line width restrictions + error_text, // output buffer + kBufSize, // buf size + NULL); // no arguments for inserts + // Trims tailing white space (FormatMessage leaves a trailing cr-lf) + for (; message_length && isspace(error_text[message_length - 1]); + --message_length) { + error_text[message_length - 1] = '\0'; + } +#endif // GTEST_OS_WINDOWS_MOBILE + + const String error_hex(String::Format("0x%08X ", hr)); + Message msg; + msg << "Expected: " << expr << " " << expected << ".\n" + << " Actual: " << error_hex << error_text << "\n"; + + return ::testing::AssertionFailure(msg); +} + +} // namespace + +AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT + if (SUCCEEDED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "succeeds", hr); +} + +AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT + if (FAILED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "fails", hr); +} + +#endif // GTEST_OS_WINDOWS + +// Utility functions for encoding Unicode text (wide strings) in +// UTF-8. + +// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 +// like this: +// +// Code-point length Encoding +// 0 - 7 bits 0xxxxxxx +// 8 - 11 bits 110xxxxx 10xxxxxx +// 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx +// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +// The maximum code-point a one-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; + +// The maximum code-point a two-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; + +// The maximum code-point a three-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; + +// The maximum code-point a four-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; + +// Chops off the n lowest bits from a bit pattern. Returns the n +// lowest bits. As a side effect, the original bit pattern will be +// shifted to the right by n bits. +inline UInt32 ChopLowBits(UInt32* bits, int n) { + const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); + *bits >>= n; + return low_bits; +} + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// The output buffer str must containt at least 32 characters. +// The function returns the address of the output buffer. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. +char* CodePointToUtf8(UInt32 code_point, char* str) { + if (code_point <= kMaxCodePoint1) { + str[1] = '\0'; + str[0] = static_cast(code_point); // 0xxxxxxx + } else if (code_point <= kMaxCodePoint2) { + str[2] = '\0'; + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xC0 | code_point); // 110xxxxx + } else if (code_point <= kMaxCodePoint3) { + str[3] = '\0'; + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xE0 | code_point); // 1110xxxx + } else if (code_point <= kMaxCodePoint4) { + str[4] = '\0'; + str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xF0 | code_point); // 11110xxx + } else { + // The longest string String::Format can produce when invoked + // with these parameters is 28 character long (not including + // the terminating nul character). We are asking for 32 character + // buffer just in case. This is also enough for strncpy to + // null-terminate the destination string. + posix::StrNCpy( + str, String::Format("(Invalid Unicode 0x%X)", code_point).c_str(), 32); + str[31] = '\0'; // Makes sure no change in the format to strncpy leaves + // the result unterminated. + } + return str; +} + +// The following two functions only make sense if the the system +// uses UTF-16 for wide string encoding. All supported systems +// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. + +// Determines if the arguments constitute UTF-16 surrogate pair +// and thus should be combined into a single Unicode code point +// using CreateCodePointFromUtf16SurrogatePair. +inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { + return sizeof(wchar_t) == 2 && + (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; +} + +// Creates a Unicode code point from UTF16 surrogate pair. +inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, + wchar_t second) { + const UInt32 mask = (1 << 10) - 1; + return (sizeof(wchar_t) == 2) ? + (((first & mask) << 10) | (second & mask)) + 0x10000 : + // This function should not be called when the condition is + // false, but we provide a sensible default in case it is. + static_cast(first); +} + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +String WideStringToUtf8(const wchar_t* str, int num_chars) { + if (num_chars == -1) + num_chars = static_cast(wcslen(str)); + + StrStream stream; + for (int i = 0; i < num_chars; ++i) { + UInt32 unicode_code_point; + + if (str[i] == L'\0') { + break; + } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { + unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], + str[i + 1]); + i++; + } else { + unicode_code_point = static_cast(str[i]); + } + + char buffer[32]; // CodePointToUtf8 requires a buffer this big. + stream << CodePointToUtf8(unicode_code_point, buffer); + } + return StrStreamToString(&stream); +} + +// Converts a wide C string to a String using the UTF-8 encoding. +// NULL will be converted to "(null)". +String String::ShowWideCString(const wchar_t * wide_c_str) { + if (wide_c_str == NULL) return String("(null)"); + + return String(internal::WideStringToUtf8(wide_c_str, -1).c_str()); +} + +// Similar to ShowWideCString(), except that this function encloses +// the converted string in double quotes. +String String::ShowWideCStringQuoted(const wchar_t* wide_c_str) { + if (wide_c_str == NULL) return String("(null)"); + + return String::Format("L\"%s\"", + String::ShowWideCString(wide_c_str).c_str()); +} + +// Compares two wide C strings. Returns true iff they have the same +// content. +// +// Unlike wcscmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + + return wcscmp(lhs, rhs) == 0; +} + +// Helper function for *_STREQ on wide strings. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual) { + if (String::WideCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowWideCStringQuoted(expected), + String::ShowWideCStringQuoted(actual), + false); +} + +// Helper function for *_STRNE on wide strings. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2) { + if (!String::WideCStringEquals(s1, s2)) { + return AssertionSuccess(); + } + + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: " + << String::ShowWideCStringQuoted(s1) + << " vs " << String::ShowWideCStringQuoted(s2); + return AssertionFailure(msg); +} + +// Compares two C strings, ignoring case. Returns true iff they have +// the same content. +// +// Unlike strcasecmp(), this function can handle NULL argument(s). A +// NULL C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { + if (lhs == NULL) + return rhs == NULL; + if (rhs == NULL) + return false; + return posix::StrCaseCmp(lhs, rhs) == 0; +} + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. +bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + +#if GTEST_OS_WINDOWS + return _wcsicmp(lhs, rhs) == 0; +#elif GTEST_OS_LINUX + return wcscasecmp(lhs, rhs) == 0; +#else + // Mac OS X and Cygwin don't define wcscasecmp. Other unknown OSes + // may not define it either. + wint_t left, right; + do { + left = towlower(*lhs++); + right = towlower(*rhs++); + } while (left && left == right); + return left == right; +#endif // OS selector +} + +// Compares this with another String. +// Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 +// if this is greater than rhs. +int String::Compare(const String & rhs) const { + const char* const lhs_c_str = c_str(); + const char* const rhs_c_str = rhs.c_str(); + + if (lhs_c_str == NULL) { + return rhs_c_str == NULL ? 0 : -1; // NULL < anything except NULL + } else if (rhs_c_str == NULL) { + return 1; + } + + const size_t shorter_str_len = + length() <= rhs.length() ? length() : rhs.length(); + for (size_t i = 0; i != shorter_str_len; i++) { + if (lhs_c_str[i] < rhs_c_str[i]) { + return -1; + } else if (lhs_c_str[i] > rhs_c_str[i]) { + return 1; + } + } + return (length() < rhs.length()) ? -1 : + (length() > rhs.length()) ? 1 : 0; +} + +// Returns true iff this String ends with the given suffix. *Any* +// String is considered to end with a NULL or empty suffix. +bool String::EndsWith(const char* suffix) const { + if (suffix == NULL || CStringEquals(suffix, "")) return true; + + if (c_str() == NULL) return false; + + const size_t this_len = strlen(c_str()); + const size_t suffix_len = strlen(suffix); + return (this_len >= suffix_len) && + CStringEquals(c_str() + this_len - suffix_len, suffix); +} + +// Returns true iff this String ends with the given suffix, ignoring case. +// Any String is considered to end with a NULL or empty suffix. +bool String::EndsWithCaseInsensitive(const char* suffix) const { + if (suffix == NULL || CStringEquals(suffix, "")) return true; + + if (c_str() == NULL) return false; + + const size_t this_len = strlen(c_str()); + const size_t suffix_len = strlen(suffix); + return (this_len >= suffix_len) && + CaseInsensitiveCStringEquals(c_str() + this_len - suffix_len, suffix); +} + +// Formats a list of arguments to a String, using the same format +// spec string as for printf. +// +// We do not use the StringPrintf class as it is not universally +// available. +// +// The result is limited to 4096 characters (including the tailing 0). +// If 4096 characters are not enough to format the input, or if +// there's an error, "" is +// returned. +String String::Format(const char * format, ...) { + va_list args; + va_start(args, format); + + char buffer[4096]; + const int kBufferSize = sizeof(buffer)/sizeof(buffer[0]); + + // MSVC 8 deprecates vsnprintf(), so we want to suppress warning + // 4996 (deprecated function) there. +#ifdef _MSC_VER // We are using MSVC. +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4996) // Temporarily disables warning 4996. + const int size = vsnprintf(buffer, kBufferSize, format, args); +#pragma warning(pop) // Restores the warning state. +#else // We are not using MSVC. + const int size = vsnprintf(buffer, kBufferSize, format, args); +#endif // _MSC_VER + va_end(args); + + // vsnprintf()'s behavior is not portable. When the buffer is not + // big enough, it returns a negative value in MSVC, and returns the + // needed buffer size on Linux. When there is an output error, it + // always returns a negative value. For simplicity, we lump the two + // error cases together. + if (size < 0 || size >= kBufferSize) { + return String(""); + } else { + return String(buffer, size); + } +} + +// Converts the buffer in a StrStream to a String, converting NUL +// bytes to "\\0" along the way. +String StrStreamToString(StrStream* ss) { + const ::std::string& str = ss->str(); + const char* const start = str.c_str(); + const char* const end = start + str.length(); + + // We need to use a helper StrStream to do this transformation + // because String doesn't support push_back(). + StrStream helper; + for (const char* ch = start; ch != end; ++ch) { + if (*ch == '\0') { + helper << "\\0"; // Replaces NUL with "\\0"; + } else { + helper.put(*ch); + } + } + + return String(helper.str().c_str()); +} + +// Appends the user-supplied message to the Google-Test-generated message. +String AppendUserMessage(const String& gtest_msg, + const Message& user_msg) { + // Appends the user message if it's non-empty. + const String user_msg_string = user_msg.GetString(); + if (user_msg_string.empty()) { + return gtest_msg; + } + + Message msg; + msg << gtest_msg << "\n" << user_msg_string; + + return msg.GetString(); +} + +} // namespace internal + +// class TestResult + +// Creates an empty TestResult. +TestResult::TestResult() + : death_test_count_(0), + elapsed_time_(0) { +} + +// D'tor. +TestResult::~TestResult() { +} + +// Returns the i-th test part result among all the results. i can +// range from 0 to total_part_count() - 1. If i is not in that range, +// aborts the program. +const TestPartResult& TestResult::GetTestPartResult(int i) const { + if (i < 0 || i >= total_part_count()) + internal::posix::Abort(); + return test_part_results_.at(i); +} + +// Returns the i-th test property. i can range from 0 to +// test_property_count() - 1. If i is not in that range, aborts the +// program. +const TestProperty& TestResult::GetTestProperty(int i) const { + if (i < 0 || i >= test_property_count()) + internal::posix::Abort(); + return test_properties_.at(i); +} + +// Clears the test part results. +void TestResult::ClearTestPartResults() { + test_part_results_.clear(); +} + +// Adds a test part result to the list. +void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { + test_part_results_.push_back(test_part_result); +} + +// Adds a test property to the list. If a property with the same key as the +// supplied property is already represented, the value of this test_property +// replaces the old value for that key. +void TestResult::RecordProperty(const TestProperty& test_property) { + if (!ValidateTestProperty(test_property)) { + return; + } + internal::MutexLock lock(&test_properites_mutex_); + const std::vector::iterator property_with_matching_key = + std::find_if(test_properties_.begin(), test_properties_.end(), + internal::TestPropertyKeyIs(test_property.key())); + if (property_with_matching_key == test_properties_.end()) { + test_properties_.push_back(test_property); + return; + } + property_with_matching_key->SetValue(test_property.value()); +} + +// Adds a failure if the key is a reserved attribute of Google Test +// testcase tags. Returns true if the property is valid. +bool TestResult::ValidateTestProperty(const TestProperty& test_property) { + internal::String key(test_property.key()); + if (key == "name" || key == "status" || key == "time" || key == "classname") { + ADD_FAILURE() + << "Reserved key used in RecordProperty(): " + << key + << " ('name', 'status', 'time', and 'classname' are reserved by " + << GTEST_NAME_ << ")"; + return false; + } + return true; +} + +// Clears the object. +void TestResult::Clear() { + test_part_results_.clear(); + test_properties_.clear(); + death_test_count_ = 0; + elapsed_time_ = 0; +} + +// Returns true iff the test failed. +bool TestResult::Failed() const { + for (int i = 0; i < total_part_count(); ++i) { + if (GetTestPartResult(i).failed()) + return true; + } + return false; +} + +// Returns true iff the test part fatally failed. +static bool TestPartFatallyFailed(const TestPartResult& result) { + return result.fatally_failed(); +} + +// Returns true iff the test fatally failed. +bool TestResult::HasFatalFailure() const { + return CountIf(test_part_results_, TestPartFatallyFailed) > 0; +} + +// Returns true iff the test part non-fatally failed. +static bool TestPartNonfatallyFailed(const TestPartResult& result) { + return result.nonfatally_failed(); +} + +// Returns true iff the test has a non-fatal failure. +bool TestResult::HasNonfatalFailure() const { + return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; +} + +// Gets the number of all test parts. This is the sum of the number +// of successful test parts and the number of failed test parts. +int TestResult::total_part_count() const { + return static_cast(test_part_results_.size()); +} + +// Returns the number of the test properties. +int TestResult::test_property_count() const { + return static_cast(test_properties_.size()); +} + +// class Test + +// Creates a Test object. + +// The c'tor saves the values of all Google Test flags. +Test::Test() + : gtest_flag_saver_(new internal::GTestFlagSaver) { +} + +// The d'tor restores the values of all Google Test flags. +Test::~Test() { + delete gtest_flag_saver_; +} + +// Sets up the test fixture. +// +// A sub-class may override this. +void Test::SetUp() { +} + +// Tears down the test fixture. +// +// A sub-class may override this. +void Test::TearDown() { +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const char* key, const char* value) { + UnitTest::GetInstance()->RecordPropertyForCurrentTest(key, value); +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const char* key, int value) { + Message value_message; + value_message << value; + RecordProperty(key, value_message.GetString().c_str()); +} + +namespace internal { + +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const String& message) { + // This function is a friend of UnitTest and as such has access to + // AddTestPartResult. + UnitTest::GetInstance()->AddTestPartResult( + result_type, + NULL, // No info about the source file where the exception occurred. + -1, // We have no info on which line caused the exception. + message, + String()); // No stack trace, either. +} + +} // namespace internal + +#if GTEST_OS_WINDOWS +// We are on Windows. + +// Adds an "exception thrown" fatal failure to the current test. +static void AddExceptionThrownFailure(DWORD exception_code, + const char* location) { + Message message; + message << "Exception thrown with code 0x" << std::setbase(16) << + exception_code << std::setbase(10) << " in " << location << "."; + + internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, + message.GetString()); +} + +#endif // GTEST_OS_WINDOWS + +// Google Test requires all tests in the same test case to use the same test +// fixture class. This function checks if the current test has the +// same fixture class as the first test in the current test case. If +// yes, it returns true; otherwise it generates a Google Test failure and +// returns false. +bool Test::HasSameFixtureClass() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + const TestCase* const test_case = impl->current_test_case(); + + // Info about the first test in the current test case. + const internal::TestInfoImpl* const first_test_info = + test_case->test_info_list()[0]->impl(); + const internal::TypeId first_fixture_id = first_test_info->fixture_class_id(); + const char* const first_test_name = first_test_info->name(); + + // Info about the current test. + const internal::TestInfoImpl* const this_test_info = + impl->current_test_info()->impl(); + const internal::TypeId this_fixture_id = this_test_info->fixture_class_id(); + const char* const this_test_name = this_test_info->name(); + + if (this_fixture_id != first_fixture_id) { + // Is the first test defined using TEST? + const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); + // Is this test defined using TEST? + const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); + + if (first_is_TEST || this_is_TEST) { + // The user mixed TEST and TEST_F in this test case - we'll tell + // him/her how to fix it. + + // Gets the name of the TEST and the name of the TEST_F. Note + // that first_is_TEST and this_is_TEST cannot both be true, as + // the fixture IDs are different for the two tests. + const char* const TEST_name = + first_is_TEST ? first_test_name : this_test_name; + const char* const TEST_F_name = + first_is_TEST ? this_test_name : first_test_name; + + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class, so mixing TEST_F and TEST in the same test case is\n" + << "illegal. In test case " << this_test_info->test_case_name() + << ",\n" + << "test " << TEST_F_name << " is defined using TEST_F but\n" + << "test " << TEST_name << " is defined using TEST. You probably\n" + << "want to change the TEST to TEST_F or move it to another test\n" + << "case."; + } else { + // The user defined two fixture classes with the same name in + // two namespaces - we'll tell him/her how to fix it. + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " + << this_test_info->test_case_name() << ",\n" + << "you defined test " << first_test_name + << " and test " << this_test_name << "\n" + << "using two different test fixture classes. This can happen if\n" + << "the two classes are from different namespaces or translation\n" + << "units and have the same name. You should probably rename one\n" + << "of the classes to put the tests into different test cases."; + } + return false; + } + + return true; +} + +// Runs the test and updates the test result. +void Test::Run() { + if (!HasSameFixtureClass()) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + SetUp(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "SetUp()"); + } + + // We will run the test only if SetUp() had no fatal failure. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + TestBody(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "the test body"); + } + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + TearDown(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "TearDown()"); + } + +#else // We are on a compiler or platform that doesn't support SEH. + impl->os_stack_trace_getter()->UponLeavingGTest(); + SetUp(); + + // We will run the test only if SetUp() was successful. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + TestBody(); + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + TearDown(); +#endif // GTEST_HAS_SEH +} + + +// Returns true iff the current test has a fatal failure. +bool Test::HasFatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); +} + +// Returns true iff the current test has a non-fatal failure. +bool Test::HasNonfatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()-> + HasNonfatalFailure(); +} + +// class TestInfo + +// Constructs a TestInfo object. It assumes ownership of the test factory +// object via impl_. +TestInfo::TestInfo(const char* a_test_case_name, + const char* a_name, + const char* a_test_case_comment, + const char* a_comment, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory) { + impl_ = new internal::TestInfoImpl(this, a_test_case_name, a_name, + a_test_case_comment, a_comment, + fixture_class_id, factory); +} + +// Destructs a TestInfo object. +TestInfo::~TestInfo() { + delete impl_; +} + +namespace internal { + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// test_case_comment: a comment on the test case that will be included in +// the test output +// comment: a comment on the test that will be included in the +// test output +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory) { + TestInfo* const test_info = + new TestInfo(test_case_name, name, test_case_comment, comment, + fixture_class_id, factory); + GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); + return test_info; +} + +#if GTEST_HAS_PARAM_TEST +void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line) { + Message errors; + errors + << "Attempted redefinition of test case " << test_case_name << ".\n" + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " << test_case_name << ", you tried\n" + << "to define a test using a fixture class different from the one\n" + << "used earlier. This can happen if the two fixture classes are\n" + << "from different namespaces and have the same name. You should\n" + << "probably rename one of the classes to put the tests into different\n" + << "test cases."; + + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors.GetString().c_str()); +} +#endif // GTEST_HAS_PARAM_TEST + +} // namespace internal + +// Returns the test case name. +const char* TestInfo::test_case_name() const { + return impl_->test_case_name(); +} + +// Returns the test name. +const char* TestInfo::name() const { + return impl_->name(); +} + +// Returns the test case comment. +const char* TestInfo::test_case_comment() const { + return impl_->test_case_comment(); +} + +// Returns the test comment. +const char* TestInfo::comment() const { + return impl_->comment(); +} + +// Returns true if this test should run. +bool TestInfo::should_run() const { return impl_->should_run(); } + +// Returns true if this test matches the user-specified filter. +bool TestInfo::matches_filter() const { return impl_->matches_filter(); } + +// Returns the result of the test. +const TestResult* TestInfo::result() const { return impl_->result(); } + +// Increments the number of death tests encountered in this test so +// far. +int TestInfo::increment_death_test_count() { + return impl_->result()->increment_death_test_count(); +} + +namespace { + +// A predicate that checks the test name of a TestInfo against a known +// value. +// +// This is used for implementation of the TestCase class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestNameIs is copyable. +class TestNameIs { + public: + // Constructor. + // + // TestNameIs has NO default constructor. + explicit TestNameIs(const char* name) + : name_(name) {} + + // Returns true iff the test name of test_info matches name_. + bool operator()(const TestInfo * test_info) const { + return test_info && internal::String(test_info->name()).Compare(name_) == 0; + } + + private: + internal::String name_; +}; + +} // namespace + +namespace internal { + +// This method expands all parameterized tests registered with macros TEST_P +// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. +// This will be done just once during the program runtime. +void UnitTestImpl::RegisterParameterizedTests() { +#if GTEST_HAS_PARAM_TEST + if (!parameterized_tests_registered_) { + parameterized_test_registry_.RegisterTests(); + parameterized_tests_registered_ = true; + } +#endif +} + +// Creates the test object, runs it, records its result, and then +// deletes it. +void TestInfoImpl::Run() { + if (!should_run_) return; + + // Tells UnitTest where to store test result. + UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_info(parent_); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Notifies the unit test event listeners that a test is about to start. + repeater->OnTestStart(*parent_); + + const TimeInMillis start = GetTimeInMillis(); + + impl->os_stack_trace_getter()->UponLeavingGTest(); +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + Test* test = NULL; + + __try { + // Creates the test object. + test = factory_->CreateTest(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), + "the test fixture's constructor"); + return; + } +#else // We are on a compiler or platform that doesn't support SEH. + + // TODO(wan): If test->Run() throws, test won't be deleted. This is + // not a problem now as we don't use exceptions. If we were to + // enable exceptions, we should revise the following to be + // exception-safe. + + // Creates the test object. + Test* test = factory_->CreateTest(); +#endif // GTEST_HAS_SEH + + // Runs the test only if the constructor of the test fixture didn't + // generate a fatal failure. + if (!Test::HasFatalFailure()) { + test->Run(); + } + + // Deletes the test object. + impl->os_stack_trace_getter()->UponLeavingGTest(); + delete test; + test = NULL; + + result_.set_elapsed_time(GetTimeInMillis() - start); + + // Notifies the unit test event listener that a test has just finished. + repeater->OnTestEnd(*parent_); + + // Tells UnitTest to stop associating assertion results to this + // test. + impl->set_current_test_info(NULL); +} + +} // namespace internal + +// class TestCase + +// Gets the number of successful tests in this test case. +int TestCase::successful_test_count() const { + return CountIf(test_info_list_, TestPassed); +} + +// Gets the number of failed tests in this test case. +int TestCase::failed_test_count() const { + return CountIf(test_info_list_, TestFailed); +} + +int TestCase::disabled_test_count() const { + return CountIf(test_info_list_, TestDisabled); +} + +// Get the number of tests in this test case that should run. +int TestCase::test_to_run_count() const { + return CountIf(test_info_list_, ShouldRunTest); +} + +// Gets the number of all tests. +int TestCase::total_test_count() const { + return static_cast(test_info_list_.size()); +} + +// Creates a TestCase with the given name. +// +// Arguments: +// +// name: name of the test case +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase::TestCase(const char* a_name, const char* a_comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) + : name_(a_name), + comment_(a_comment), + set_up_tc_(set_up_tc), + tear_down_tc_(tear_down_tc), + should_run_(false), + elapsed_time_(0) { +} + +// Destructor of TestCase. +TestCase::~TestCase() { + // Deletes every Test in the collection. + ForEach(test_info_list_, internal::Delete); +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +const TestInfo* TestCase::GetTestInfo(int i) const { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +TestInfo* TestCase::GetMutableTestInfo(int i) { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Adds a test to this test case. Will delete the test upon +// destruction of the TestCase object. +void TestCase::AddTestInfo(TestInfo * test_info) { + test_info_list_.push_back(test_info); + test_indices_.push_back(static_cast(test_indices_.size())); +} + +// Runs every test in this TestCase. +void TestCase::Run() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_case(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + repeater->OnTestCaseStart(*this); + impl->os_stack_trace_getter()->UponLeavingGTest(); + set_up_tc_(); + + const internal::TimeInMillis start = internal::GetTimeInMillis(); + for (int i = 0; i < total_test_count(); i++) { + GetMutableTestInfo(i)->impl()->Run(); + } + elapsed_time_ = internal::GetTimeInMillis() - start; + + impl->os_stack_trace_getter()->UponLeavingGTest(); + tear_down_tc_(); + repeater->OnTestCaseEnd(*this); + impl->set_current_test_case(NULL); +} + +// Clears the results of all tests in this test case. +void TestCase::ClearResult() { + ForEach(test_info_list_, internal::TestInfoImpl::ClearTestResult); +} + +// Returns true iff test passed. +bool TestCase::TestPassed(const TestInfo * test_info) { + const internal::TestInfoImpl* const impl = test_info->impl(); + return impl->should_run() && impl->result()->Passed(); +} + +// Returns true iff test failed. +bool TestCase::TestFailed(const TestInfo * test_info) { + const internal::TestInfoImpl* const impl = test_info->impl(); + return impl->should_run() && impl->result()->Failed(); +} + +// Returns true iff test is disabled. +bool TestCase::TestDisabled(const TestInfo * test_info) { + return test_info->impl()->is_disabled(); +} + +// Returns true if the given test should run. +bool TestCase::ShouldRunTest(const TestInfo *test_info) { + return test_info->impl()->should_run(); +} + +// Shuffles the tests in this test case. +void TestCase::ShuffleTests(internal::Random* random) { + Shuffle(random, &test_indices_); +} + +// Restores the test order to before the first shuffle. +void TestCase::UnshuffleTests() { + for (size_t i = 0; i < test_indices_.size(); i++) { + test_indices_[i] = static_cast(i); + } +} + +// Formats a countable noun. Depending on its quantity, either the +// singular form or the plural form is used. e.g. +// +// FormatCountableNoun(1, "formula", "formuli") returns "1 formula". +// FormatCountableNoun(5, "book", "books") returns "5 books". +static internal::String FormatCountableNoun(int count, + const char * singular_form, + const char * plural_form) { + return internal::String::Format("%d %s", count, + count == 1 ? singular_form : plural_form); +} + +// Formats the count of tests. +static internal::String FormatTestCount(int test_count) { + return FormatCountableNoun(test_count, "test", "tests"); +} + +// Formats the count of test cases. +static internal::String FormatTestCaseCount(int test_case_count) { + return FormatCountableNoun(test_case_count, "test case", "test cases"); +} + +// Converts a TestPartResult::Type enum to human-friendly string +// representation. Both kNonFatalFailure and kFatalFailure are translated +// to "Failure", as the user usually doesn't care about the difference +// between the two when viewing the test result. +static const char * TestPartResultTypeToString(TestPartResult::Type type) { + switch (type) { + case TestPartResult::kSuccess: + return "Success"; + + case TestPartResult::kNonFatalFailure: + case TestPartResult::kFatalFailure: +#ifdef _MSC_VER + return "error: "; +#else + return "Failure\n"; +#endif + } + + return "Unknown result type"; +} + +// Prints a TestPartResult to a String. +static internal::String PrintTestPartResultToString( + const TestPartResult& test_part_result) { + return (Message() + << internal::FormatFileLocation(test_part_result.file_name(), + test_part_result.line_number()) + << " " << TestPartResultTypeToString(test_part_result.type()) + << test_part_result.message()).GetString(); +} + +// Prints a TestPartResult. +static void PrintTestPartResult(const TestPartResult& test_part_result) { + const internal::String& result = + PrintTestPartResultToString(test_part_result); + printf("%s\n", result.c_str()); + fflush(stdout); + // If the test program runs in Visual Studio or a debugger, the + // following statements add the test part result message to the Output + // window such that the user can double-click on it to jump to the + // corresponding source code location; otherwise they do nothing. +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + // We don't call OutputDebugString*() on Windows Mobile, as printing + // to stdout is done by OutputDebugString() there already - we don't + // want the same message printed twice. + ::OutputDebugStringA(result.c_str()); + ::OutputDebugStringA("\n"); +#endif +} + +// class PrettyUnitTestResultPrinter + +namespace internal { + +enum GTestColor { + COLOR_DEFAULT, + COLOR_RED, + COLOR_GREEN, + COLOR_YELLOW +}; + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns the character attribute for the given color. +WORD GetColorAttribute(GTestColor color) { + switch (color) { + case COLOR_RED: return FOREGROUND_RED; + case COLOR_GREEN: return FOREGROUND_GREEN; + case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; + default: return 0; + } +} + +#else + +// Returns the ANSI color code for the given color. COLOR_DEFAULT is +// an invalid input. +const char* GetAnsiColorCode(GTestColor color) { + switch (color) { + case COLOR_RED: return "1"; + case COLOR_GREEN: return "2"; + case COLOR_YELLOW: return "3"; + default: return NULL; + }; +} + +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns true iff Google Test should use colors in the output. +bool ShouldUseColor(bool stdout_is_tty) { + const char* const gtest_color = GTEST_FLAG(color).c_str(); + + if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { +#if GTEST_OS_WINDOWS + // On Windows the TERM variable is usually not set, but the + // console there does support colors. + return stdout_is_tty; +#else + // On non-Windows platforms, we rely on the TERM variable. + const char* const term = posix::GetEnv("TERM"); + const bool term_supports_color = + String::CStringEquals(term, "xterm") || + String::CStringEquals(term, "xterm-color") || + String::CStringEquals(term, "xterm-256color") || + String::CStringEquals(term, "linux") || + String::CStringEquals(term, "cygwin"); + return stdout_is_tty && term_supports_color; +#endif // GTEST_OS_WINDOWS + } + + return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || + String::CaseInsensitiveCStringEquals(gtest_color, "true") || + String::CaseInsensitiveCStringEquals(gtest_color, "t") || + String::CStringEquals(gtest_color, "1"); + // We take "yes", "true", "t", and "1" as meaning "yes". If the + // value is neither one of these nor "auto", we treat it as "no" to + // be conservative. +} + +// Helpers for printing colored strings to stdout. Note that on Windows, we +// cannot simply emit special characters and have the terminal change colors. +// This routine must actually emit the characters rather than return a string +// that would be colored when printed, as can be done on Linux. +void ColoredPrintf(GTestColor color, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + const bool use_color = false; +#else + static const bool in_color_mode = + ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); + const bool use_color = in_color_mode && (color != COLOR_DEFAULT); +#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + // The '!= 0' comparison is necessary to satisfy MSVC 7.1. + + if (!use_color) { + vprintf(fmt, args); + va_end(args); + return; + } + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); + + // Gets the current text color. + CONSOLE_SCREEN_BUFFER_INFO buffer_info; + GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); + const WORD old_color_attrs = buffer_info.wAttributes; + + // We need to flush the stream buffers into the console before each + // SetConsoleTextAttribute call lest it affect the text that is already + // printed but has not yet reached the console. + fflush(stdout); + SetConsoleTextAttribute(stdout_handle, + GetColorAttribute(color) | FOREGROUND_INTENSITY); + vprintf(fmt, args); + + fflush(stdout); + // Restores the text color. + SetConsoleTextAttribute(stdout_handle, old_color_attrs); +#else + printf("\033[0;3%sm", GetAnsiColorCode(color)); + vprintf(fmt, args); + printf("\033[m"); // Resets the terminal to default. +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + va_end(args); +} + +// This class implements the TestEventListener interface. +// +// Class PrettyUnitTestResultPrinter is copyable. +class PrettyUnitTestResultPrinter : public TestEventListener { + public: + PrettyUnitTestResultPrinter() {} + static void PrintTestName(const char * test_case, const char * test) { + printf("%s.%s", test_case, test); + } + + // The following methods override what's in the TestEventListener class. + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + + private: + static void PrintFailedTests(const UnitTest& unit_test); + + internal::String test_case_name_; +}; + + // Fired before each iteration of tests starts. +void PrettyUnitTestResultPrinter::OnTestIterationStart( + const UnitTest& unit_test, int iteration) { + if (GTEST_FLAG(repeat) != 1) + printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); + + const char* const filter = GTEST_FLAG(filter).c_str(); + + // Prints the filter if it's not *. This reminds the user that some + // tests may be skipped. + if (!internal::String::CStringEquals(filter, kUniversalFilter)) { + ColoredPrintf(COLOR_YELLOW, + "Note: %s filter = %s\n", GTEST_NAME_, filter); + } + + if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { + ColoredPrintf(COLOR_YELLOW, + "Note: This is test shard %s of %s.\n", + internal::posix::GetEnv(kTestShardIndex), + internal::posix::GetEnv(kTestTotalShards)); + } + + if (GTEST_FLAG(shuffle)) { + ColoredPrintf(COLOR_YELLOW, + "Note: Randomizing tests' orders with a seed of %d .\n", + unit_test.random_seed()); + } + + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("Running %s from %s.\n", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment set-up.\n"); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { + test_case_name_ = test_case.name(); + const internal::String counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s", counts.c_str(), test_case_name_.c_str()); + if (test_case.comment()[0] == '\0') { + printf("\n"); + } else { + printf(", where %s\n", test_case.comment()); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { + ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + PrintTestName(test_case_name_.c_str(), test_info.name()); + if (test_info.comment()[0] == '\0') { + printf("\n"); + } else { + printf(", where %s\n", test_info.comment()); + } + fflush(stdout); +} + +// Called after an assertion failure. +void PrettyUnitTestResultPrinter::OnTestPartResult( + const TestPartResult& result) { + // If the test part succeeded, we don't need to do anything. + if (result.type() == TestPartResult::kSuccess) + return; + + // Print failure message from the assertion (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { + if (test_info.result()->Passed()) { + ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else { + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + } + PrintTestName(test_case_name_.c_str(), test_info.name()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms)\n", internal::StreamableToString( + test_info.result()->elapsed_time()).c_str()); + } else { + printf("\n"); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { + if (!GTEST_FLAG(print_time)) return; + + test_case_name_ = test_case.name(); + const internal::String counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s (%s ms total)\n\n", + counts.c_str(), test_case_name_.c_str(), + internal::StreamableToString(test_case.elapsed_time()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment tear-down\n"); + fflush(stdout); +} + +// Internal helper for printing the list of failed tests. +void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { + const int failed_test_count = unit_test.failed_test_count(); + if (failed_test_count == 0) { + return; + } + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase& test_case = *unit_test.GetTestCase(i); + if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { + continue; + } + for (int j = 0; j < test_case.total_test_count(); ++j) { + const TestInfo& test_info = *test_case.GetTestInfo(j); + if (!test_info.should_run() || test_info.result()->Passed()) { + continue; + } + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s.%s", test_case.name(), test_info.name()); + if (test_case.comment()[0] != '\0' || + test_info.comment()[0] != '\0') { + printf(", where %s", test_case.comment()); + if (test_case.comment()[0] != '\0' && + test_info.comment()[0] != '\0') { + printf(" and "); + } + } + printf("%s\n", test_info.comment()); + } + } +} + + void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("%s from %s ran.", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms total)", + internal::StreamableToString(unit_test.elapsed_time()).c_str()); + } + printf("\n"); + ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); + printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + + int num_failures = unit_test.failed_test_count(); + if (!unit_test.Passed()) { + const int failed_test_count = unit_test.failed_test_count(); + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); + PrintFailedTests(unit_test); + printf("\n%2d FAILED %s\n", num_failures, + num_failures == 1 ? "TEST" : "TESTS"); + } + + int num_disabled = unit_test.disabled_test_count(); + if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { + if (!num_failures) { + printf("\n"); // Add a spacer if no FAILURE banner is displayed. + } + ColoredPrintf(COLOR_YELLOW, + " YOU HAVE %d DISABLED %s\n\n", + num_disabled, + num_disabled == 1 ? "TEST" : "TESTS"); + } + // Ensure that Google Test output is printed before, e.g., heapchecker output. + fflush(stdout); +} + +// End PrettyUnitTestResultPrinter + +// class TestEventRepeater +// +// This class forwards events to other event listeners. +class TestEventRepeater : public TestEventListener { + public: + TestEventRepeater() : forwarding_enabled_(true) {} + virtual ~TestEventRepeater(); + void Append(TestEventListener *listener); + TestEventListener* Release(TestEventListener* listener); + + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled() const { return forwarding_enabled_; } + void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } + + virtual void OnTestProgramStart(const UnitTest& unit_test); + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& unit_test); + + private: + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled_; + // The list of listeners that receive events. + std::vector listeners_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); +}; + +TestEventRepeater::~TestEventRepeater() { + ForEach(listeners_, Delete); +} + +void TestEventRepeater::Append(TestEventListener *listener) { + listeners_.push_back(listener); +} + +// TODO(vladl@google.com): Factor the search functionality into Vector::Find. +TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { + for (size_t i = 0; i < listeners_.size(); ++i) { + if (listeners_[i] == listener) { + listeners_.erase(listeners_.begin() + i); + return listener; + } + } + + return NULL; +} + +// Since most methods are very similar, use macros to reduce boilerplate. +// This defines a member that forwards the call to all listeners. +#define GTEST_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = 0; i < listeners_.size(); i++) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} +// This defines a member that forwards the call to all listeners in reverse +// order. +#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} + +GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) +GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) +GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) +GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) +GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) +GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) +GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) +GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) + +#undef GTEST_REPEATER_METHOD_ +#undef GTEST_REVERSE_REPEATER_METHOD_ + +void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (size_t i = 0; i < listeners_.size(); i++) { + listeners_[i]->OnTestIterationStart(unit_test, iteration); + } + } +} + +void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { + listeners_[i]->OnTestIterationEnd(unit_test, iteration); + } + } +} + +// End TestEventRepeater + +// This class generates an XML output file. +class XmlUnitTestResultPrinter : public EmptyTestEventListener { + public: + explicit XmlUnitTestResultPrinter(const char* output_file); + + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + + private: + // Is c a whitespace character that is normalized to a space character + // when it appears in an XML attribute value? + static bool IsNormalizableWhitespace(char c) { + return c == 0x9 || c == 0xA || c == 0xD; + } + + // May c appear in a well-formed XML document? + static bool IsValidXmlCharacter(char c) { + return IsNormalizableWhitespace(c) || c >= 0x20; + } + + // Returns an XML-escaped copy of the input string str. If + // is_attribute is true, the text is meant to appear as an attribute + // value, and normalizable whitespace is preserved by replacing it + // with character references. + static String EscapeXml(const char* str, bool is_attribute); + + // Returns the given string with all characters invalid in XML removed. + static String RemoveInvalidXmlCharacters(const char* str); + + // Convenience wrapper around EscapeXml when str is an attribute value. + static String EscapeXmlAttribute(const char* str) { + return EscapeXml(str, true); + } + + // Convenience wrapper around EscapeXml when str is not an attribute value. + static String EscapeXmlText(const char* str) { return EscapeXml(str, false); } + + // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. + static void OutputXmlCDataSection(::std::ostream* stream, const char* data); + + // Streams an XML representation of a TestInfo object. + static void OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info); + + // Prints an XML representation of a TestCase object + static void PrintXmlTestCase(FILE* out, const TestCase& test_case); + + // Prints an XML summary of unit_test to output stream out. + static void PrintXmlUnitTest(FILE* out, const UnitTest& unit_test); + + // Produces a string representing the test properties in a result as space + // delimited XML attributes based on the property key="value" pairs. + // When the String is not empty, it includes a space at the beginning, + // to delimit this attribute from prior attributes. + static String TestPropertiesAsXmlAttributes(const TestResult& result); + + // The output file. + const String output_file_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); +}; + +// Creates a new XmlUnitTestResultPrinter. +XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) + : output_file_(output_file) { + if (output_file_.c_str() == NULL || output_file_.empty()) { + fprintf(stderr, "XML output file may not be null\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } +} + +// Called after the unit test ends. +void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + FILE* xmlout = NULL; + FilePath output_file(output_file_); + FilePath output_dir(output_file.RemoveFileName()); + + if (output_dir.CreateDirectoriesRecursively()) { + xmlout = posix::FOpen(output_file_.c_str(), "w"); + } + if (xmlout == NULL) { + // TODO(wan): report the reason of the failure. + // + // We don't do it for now as: + // + // 1. There is no urgent need for it. + // 2. It's a bit involved to make the errno variable thread-safe on + // all three operating systems (Linux, Windows, and Mac OS). + // 3. To interpret the meaning of errno in a thread-safe way, + // we need the strerror_r() function, which is not available on + // Windows. + fprintf(stderr, + "Unable to open file \"%s\"\n", + output_file_.c_str()); + fflush(stderr); + exit(EXIT_FAILURE); + } + PrintXmlUnitTest(xmlout, unit_test); + fclose(xmlout); +} + +// Returns an XML-escaped copy of the input string str. If is_attribute +// is true, the text is meant to appear as an attribute value, and +// normalizable whitespace is preserved by replacing it with character +// references. +// +// Invalid XML characters in str, if any, are stripped from the output. +// It is expected that most, if not all, of the text processed by this +// module will consist of ordinary English text. +// If this module is ever modified to produce version 1.1 XML output, +// most invalid characters can be retained using character references. +// TODO(wan): It might be nice to have a minimally invasive, human-readable +// escaping scheme for invalid characters, rather than dropping them. +String XmlUnitTestResultPrinter::EscapeXml(const char* str, bool is_attribute) { + Message m; + + if (str != NULL) { + for (const char* src = str; *src; ++src) { + switch (*src) { + case '<': + m << "<"; + break; + case '>': + m << ">"; + break; + case '&': + m << "&"; + break; + case '\'': + if (is_attribute) + m << "'"; + else + m << '\''; + break; + case '"': + if (is_attribute) + m << """; + else + m << '"'; + break; + default: + if (IsValidXmlCharacter(*src)) { + if (is_attribute && IsNormalizableWhitespace(*src)) + m << String::Format("&#x%02X;", unsigned(*src)); + else + m << *src; + } + break; + } + } + } + + return m.GetString(); +} + +// Returns the given string with all characters invalid in XML removed. +// Currently invalid characters are dropped from the string. An +// alternative is to replace them with certain characters such as . or ?. +String XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(const char* str) { + char* const output = new char[strlen(str) + 1]; + char* appender = output; + for (char ch = *str; ch != '\0'; ch = *++str) + if (IsValidXmlCharacter(ch)) + *appender++ = ch; + *appender = '\0'; + + String ret_value(output); + delete[] output; + return ret_value; +} + +// The following routines generate an XML representation of a UnitTest +// object. +// +// This is how Google Test concepts map to the DTD: +// +// <-- corresponds to a UnitTest object +// <-- corresponds to a TestCase object +// <-- corresponds to a TestInfo object +// ... +// ... +// ... +// <-- individual assertion failures +// +// +// + +// Formats the given time in milliseconds as seconds. +std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { + ::std::stringstream ss; + ss << ms/1000.0; + return ss.str(); +} + +// Streams an XML CDATA section, escaping invalid CDATA sequences as needed. +void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, + const char* data) { + const char* segment = data; + *stream << ""); + if (next_segment != NULL) { + stream->write( + segment, static_cast(next_segment - segment)); + *stream << "]]>]]>"); + } else { + *stream << segment; + break; + } + } + *stream << "]]>"; +} + +// Prints an XML representation of a TestInfo object. +// TODO(wan): There is also value in printing properties with the plain printer. +void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info) { + const TestResult& result = *test_info.result(); + *stream << " \n"; + *stream << " "; + const String message = RemoveInvalidXmlCharacters(String::Format( + "%s:%d\n%s", + part.file_name(), part.line_number(), + part.message()).c_str()); + OutputXmlCDataSection(stream, message.c_str()); + *stream << "\n"; + } + } + + if (failures == 0) + *stream << " />\n"; + else + *stream << " \n"; +} + +// Prints an XML representation of a TestCase object +void XmlUnitTestResultPrinter::PrintXmlTestCase(FILE* out, + const TestCase& test_case) { + fprintf(out, + " \n", + FormatTimeInMillisAsSeconds(test_case.elapsed_time()).c_str()); + for (int i = 0; i < test_case.total_test_count(); ++i) { + StrStream stream; + OutputXmlTestInfo(&stream, test_case.name(), *test_case.GetTestInfo(i)); + fprintf(out, "%s", StrStreamToString(&stream).c_str()); + } + fprintf(out, " \n"); +} + +// Prints an XML summary of unit_test to output stream out. +void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out, + const UnitTest& unit_test) { + fprintf(out, "\n"); + fprintf(out, + "\n"); + for (int i = 0; i < unit_test.total_test_case_count(); ++i) + PrintXmlTestCase(out, *unit_test.GetTestCase(i)); + fprintf(out, "\n"); +} + +// Produces a string representing the test properties in a result as space +// delimited XML attributes based on the property key="value" pairs. +String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( + const TestResult& result) { + Message attributes; + for (int i = 0; i < result.test_property_count(); ++i) { + const TestProperty& property = result.GetTestProperty(i); + attributes << " " << property.key() << "=" + << "\"" << EscapeXmlAttribute(property.value()) << "\""; + } + return attributes.GetString(); +} + +// End XmlUnitTestResultPrinter + +// Class ScopedTrace + +// Pushes the given source file location and message onto a per-thread +// trace stack maintained by Google Test. +// L < UnitTest::mutex_ +ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) { + TraceInfo trace; + trace.file = file; + trace.line = line; + trace.message = message.GetString(); + + UnitTest::GetInstance()->PushGTestTrace(trace); +} + +// Pops the info pushed by the c'tor. +// L < UnitTest::mutex_ +ScopedTrace::~ScopedTrace() { + UnitTest::GetInstance()->PopGTestTrace(); +} + + +// class OsStackTraceGetter + +// Returns the current OS stack trace as a String. Parameters: +// +// max_depth - the maximum number of stack frames to be included +// in the trace. +// skip_count - the number of top frames to be skipped; doesn't count +// against max_depth. +// +// L < mutex_ +// We use "L < mutex_" to denote that the function may acquire mutex_. +String OsStackTraceGetter::CurrentStackTrace(int, int) { + return String(""); +} + +// L < mutex_ +void OsStackTraceGetter::UponLeavingGTest() { +} + +const char* const +OsStackTraceGetter::kElidedFramesMarker = + "... " GTEST_NAME_ " internal frames ..."; + +} // namespace internal + +// class TestEventListeners + +TestEventListeners::TestEventListeners() + : repeater_(new internal::TestEventRepeater()), + default_result_printer_(NULL), + default_xml_generator_(NULL) { +} + +TestEventListeners::~TestEventListeners() { delete repeater_; } + +// Returns the standard listener responsible for the default console +// output. Can be removed from the listeners list to shut down default +// console output. Note that removing this object from the listener list +// with Release transfers its ownership to the user. +void TestEventListeners::Append(TestEventListener* listener) { + repeater_->Append(listener); +} + +// Removes the given event listener from the list and returns it. It then +// becomes the caller's responsibility to delete the listener. Returns +// NULL if the listener is not found in the list. +TestEventListener* TestEventListeners::Release(TestEventListener* listener) { + if (listener == default_result_printer_) + default_result_printer_ = NULL; + else if (listener == default_xml_generator_) + default_xml_generator_ = NULL; + return repeater_->Release(listener); +} + +// Returns repeater that broadcasts the TestEventListener events to all +// subscribers. +TestEventListener* TestEventListeners::repeater() { return repeater_; } + +// Sets the default_result_printer attribute to the provided listener. +// The listener is also added to the listener list and previous +// default_result_printer is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { + if (default_result_printer_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_result_printer_); + default_result_printer_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Sets the default_xml_generator attribute to the provided listener. The +// listener is also added to the listener list and previous +// default_xml_generator is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { + if (default_xml_generator_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_xml_generator_); + default_xml_generator_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Controls whether events will be forwarded by the repeater to the +// listeners in the list. +bool TestEventListeners::EventForwardingEnabled() const { + return repeater_->forwarding_enabled(); +} + +void TestEventListeners::SuppressEventForwarding() { + repeater_->set_forwarding_enabled(false); +} + +// class UnitTest + +// Gets the singleton UnitTest object. The first time this method is +// called, a UnitTest object is constructed and returned. Consecutive +// calls will return the same object. +// +// We don't protect this under mutex_ as a user is not supposed to +// call this before main() starts, from which point on the return +// value will never change. +UnitTest * UnitTest::GetInstance() { + // When compiled with MSVC 7.1 in optimized mode, destroying the + // UnitTest object upon exiting the program messes up the exit code, + // causing successful tests to appear failed. We have to use a + // different implementation in this case to bypass the compiler bug. + // This implementation makes the compiler happy, at the cost of + // leaking the UnitTest object. + + // CodeGear C++Builder insists on a public destructor for the + // default implementation. Use this implementation to keep good OO + // design with private destructor. + +#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) + static UnitTest* const instance = new UnitTest; + return instance; +#else + static UnitTest instance; + return &instance; +#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +} + +// Gets the number of successful test cases. +int UnitTest::successful_test_case_count() const { + return impl()->successful_test_case_count(); +} + +// Gets the number of failed test cases. +int UnitTest::failed_test_case_count() const { + return impl()->failed_test_case_count(); +} + +// Gets the number of all test cases. +int UnitTest::total_test_case_count() const { + return impl()->total_test_case_count(); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTest::test_case_to_run_count() const { + return impl()->test_case_to_run_count(); +} + +// Gets the number of successful tests. +int UnitTest::successful_test_count() const { + return impl()->successful_test_count(); +} + +// Gets the number of failed tests. +int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } + +// Gets the number of disabled tests. +int UnitTest::disabled_test_count() const { + return impl()->disabled_test_count(); +} + +// Gets the number of all tests. +int UnitTest::total_test_count() const { return impl()->total_test_count(); } + +// Gets the number of tests that should run. +int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } + +// Gets the elapsed time, in milliseconds. +internal::TimeInMillis UnitTest::elapsed_time() const { + return impl()->elapsed_time(); +} + +// Returns true iff the unit test passed (i.e. all test cases passed). +bool UnitTest::Passed() const { return impl()->Passed(); } + +// Returns true iff the unit test failed (i.e. some test case failed +// or something outside of all tests failed). +bool UnitTest::Failed() const { return impl()->Failed(); } + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +const TestCase* UnitTest::GetTestCase(int i) const { + return impl()->GetTestCase(i); +} + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +TestCase* UnitTest::GetMutableTestCase(int i) { + return impl()->GetMutableTestCase(i); +} + +// Returns the list of event listeners that can be used to track events +// inside Google Test. +TestEventListeners& UnitTest::listeners() { + return *impl()->listeners(); +} + +// Registers and returns a global test environment. When a test +// program is run, all global test environments will be set-up in the +// order they were registered. After all tests in the program have +// finished, all global test environments will be torn-down in the +// *reverse* order they were registered. +// +// The UnitTest object takes ownership of the given environment. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +Environment* UnitTest::AddEnvironment(Environment* env) { + if (env == NULL) { + return NULL; + } + + impl_->environments().push_back(env); + return env; +} + +#if GTEST_HAS_EXCEPTIONS +// A failed Google Test assertion will throw an exception of this type +// when exceptions are enabled. We derive it from std::runtime_error, +// which is for errors presumably detectable only at run time. Since +// std::runtime_error inherits from std::exception, many testing +// frameworks know how to extract and print the message inside it. +class GoogleTestFailureException : public ::std::runtime_error { + public: + explicit GoogleTestFailureException(const TestPartResult& failure) + : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} +}; +#endif + +// Adds a TestPartResult to the current TestResult object. All Google Test +// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call +// this to report their results. The user code should use the +// assertion macros instead of calling this directly. +// L < mutex_ +void UnitTest::AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, + int line_number, + const internal::String& message, + const internal::String& os_stack_trace) { + Message msg; + msg << message; + + internal::MutexLock lock(&mutex_); + if (impl_->gtest_trace_stack().size() > 0) { + msg << "\n" << GTEST_NAME_ << " trace:"; + + for (int i = static_cast(impl_->gtest_trace_stack().size()); + i > 0; --i) { + const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; + msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) + << " " << trace.message; + } + } + + if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { + msg << internal::kStackTraceMarker << os_stack_trace; + } + + const TestPartResult result = + TestPartResult(result_type, file_name, line_number, + msg.GetString().c_str()); + impl_->GetTestPartResultReporterForCurrentThread()-> + ReportTestPartResult(result); + + if (result_type != TestPartResult::kSuccess) { + // gtest_break_on_failure takes precedence over + // gtest_throw_on_failure. This allows a user to set the latter + // in the code (perhaps in order to use Google Test assertions + // with another testing framework) and specify the former on the + // command line for debugging. + if (GTEST_FLAG(break_on_failure)) { +#if GTEST_OS_WINDOWS + // Using DebugBreak on Windows allows gtest to still break into a debugger + // when a failure happens and both the --gtest_break_on_failure and + // the --gtest_catch_exceptions flags are specified. + DebugBreak(); +#else + *static_cast(NULL) = 1; +#endif // GTEST_OS_WINDOWS + } else if (GTEST_FLAG(throw_on_failure)) { +#if GTEST_HAS_EXCEPTIONS + throw GoogleTestFailureException(result); +#else + // We cannot call abort() as it generates a pop-up in debug mode + // that cannot be suppressed in VC 7.1 or below. + exit(1); +#endif + } + } +} + +// Creates and adds a property to the current TestResult. If a property matching +// the supplied value already exists, updates its value instead. +void UnitTest::RecordPropertyForCurrentTest(const char* key, + const char* value) { + const TestProperty test_property(key, value); + impl_->current_test_result()->RecordProperty(test_property); +} + +// Runs all tests in this UnitTest object and prints the result. +// Returns 0 if successful, or 1 otherwise. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +int UnitTest::Run() { +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + + const bool in_death_test_child_process = + internal::GTEST_FLAG(internal_run_death_test).length() > 0; + + // Either the user wants Google Test to catch exceptions thrown by the + // tests or this is executing in the context of death test child + // process. In either case the user does not want to see pop-up dialogs + // about crashes - they are expected.. + if (GTEST_FLAG(catch_exceptions) || in_death_test_child_process) { +#if !GTEST_OS_WINDOWS_MOBILE + // SetErrorMode doesn't exist on CE. + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | + SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); +#endif // !GTEST_OS_WINDOWS_MOBILE + +#if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE + // Death test children can be terminated with _abort(). On Windows, + // _abort() can show a dialog with a warning message. This forces the + // abort message to go to stderr instead. + _set_error_mode(_OUT_TO_STDERR); +#endif + +#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE + // In the debug version, Visual Studio pops up a separate dialog + // offering a choice to debug the aborted program. We need to suppress + // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement + // executed. Google Test will notify the user of any unexpected + // failure via stderr. + // + // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. + // Users of prior VC versions shall suffer the agony and pain of + // clicking through the countless debug dialogs. + // TODO(vladl@google.com): find a way to suppress the abort dialog() in the + // debug mode when compiled with VC 7.1 or lower. + if (!GTEST_FLAG(break_on_failure)) + _set_abort_behavior( + 0x0, // Clear the following flags: + _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. +#endif + } + + __try { + return impl_->RunAllTests(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + printf("Exception thrown with code 0x%x.\nFAIL\n", GetExceptionCode()); + fflush(stdout); + return 1; + } + +#else // We are on a compiler or platform that doesn't support SEH. + + return impl_->RunAllTests(); +#endif // GTEST_HAS_SEH +} + +// Returns the working directory when the first TEST() or TEST_F() was +// executed. +const char* UnitTest::original_working_dir() const { + return impl_->original_working_dir_.c_str(); +} + +// Returns the TestCase object for the test that's currently running, +// or NULL if no test is running. +// L < mutex_ +const TestCase* UnitTest::current_test_case() const { + internal::MutexLock lock(&mutex_); + return impl_->current_test_case(); +} + +// Returns the TestInfo object for the test that's currently running, +// or NULL if no test is running. +// L < mutex_ +const TestInfo* UnitTest::current_test_info() const { + internal::MutexLock lock(&mutex_); + return impl_->current_test_info(); +} + +// Returns the random seed used at the start of the current test run. +int UnitTest::random_seed() const { return impl_->random_seed(); } + +#if GTEST_HAS_PARAM_TEST +// Returns ParameterizedTestCaseRegistry object used to keep track of +// value-parameterized tests and instantiate and register them. +// L < mutex_ +internal::ParameterizedTestCaseRegistry& + UnitTest::parameterized_test_registry() { + return impl_->parameterized_test_registry(); +} +#endif // GTEST_HAS_PARAM_TEST + +// Creates an empty UnitTest. +UnitTest::UnitTest() { + impl_ = new internal::UnitTestImpl(this); +} + +// Destructor of UnitTest. +UnitTest::~UnitTest() { + delete impl_; +} + +// Pushes a trace defined by SCOPED_TRACE() on to the per-thread +// Google Test trace stack. +// L < mutex_ +void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().push_back(trace); +} + +// Pops a trace from the per-thread Google Test trace stack. +// L < mutex_ +void UnitTest::PopGTestTrace() { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().pop_back(); +} + +namespace internal { + +UnitTestImpl::UnitTestImpl(UnitTest* parent) + : parent_(parent), +#ifdef _MSC_VER +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4355) // Temporarily disables warning 4355 + // (using this in initializer). + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#pragma warning(pop) // Restores the warning state again. +#else + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#endif // _MSC_VER + global_test_part_result_repoter_( + &default_global_test_part_result_reporter_), + per_thread_test_part_result_reporter_( + &default_per_thread_test_part_result_reporter_), +#if GTEST_HAS_PARAM_TEST + parameterized_test_registry_(), + parameterized_tests_registered_(false), +#endif // GTEST_HAS_PARAM_TEST + last_death_test_case_(-1), + current_test_case_(NULL), + current_test_info_(NULL), + ad_hoc_test_result_(), + os_stack_trace_getter_(NULL), + post_flag_parse_init_performed_(false), + random_seed_(0), // Will be overridden by the flag before first use. + random_(0), // Will be reseeded before first use. +#if GTEST_HAS_DEATH_TEST + elapsed_time_(0), + internal_run_death_test_flag_(NULL), + death_test_factory_(new DefaultDeathTestFactory) { +#else + elapsed_time_(0) { +#endif // GTEST_HAS_DEATH_TEST + listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); +} + +UnitTestImpl::~UnitTestImpl() { + // Deletes every TestCase. + ForEach(test_cases_, internal::Delete); + + // Deletes every Environment. + ForEach(environments_, internal::Delete); + + delete os_stack_trace_getter_; +} + +#if GTEST_HAS_DEATH_TEST +// Disables event forwarding if the control is currently in a death test +// subprocess. Must not be called before InitGoogleTest. +void UnitTestImpl::SuppressTestEventsIfInSubprocess() { + if (internal_run_death_test_flag_.get() != NULL) + listeners()->SuppressEventForwarding(); +} +#endif // GTEST_HAS_DEATH_TEST + +// Initializes event listeners performing XML output as specified by +// UnitTestOptions. Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureXmlOutput() { + const String& output_format = UnitTestOptions::GetOutputFormat(); + if (output_format == "xml") { + listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); + } else if (output_format != "") { + printf("WARNING: unrecognized output format \"%s\" ignored.\n", + output_format.c_str()); + fflush(stdout); + } +} + +// Performs initialization dependent upon flag values obtained in +// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to +// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest +// this function is also called from RunAllTests. Since this function can be +// called more than once, it has to be idempotent. +void UnitTestImpl::PostFlagParsingInit() { + // Ensures that this function does not execute more than once. + if (!post_flag_parse_init_performed_) { + post_flag_parse_init_performed_ = true; + +#if GTEST_HAS_DEATH_TEST + InitDeathTestSubprocessControlInfo(); + SuppressTestEventsIfInSubprocess(); +#endif // GTEST_HAS_DEATH_TEST + + // Registers parameterized tests. This makes parameterized tests + // available to the UnitTest reflection API without running + // RUN_ALL_TESTS. + RegisterParameterizedTests(); + + // Configures listeners for XML output. This makes it possible for users + // to shut down the default XML output before invoking RUN_ALL_TESTS. + ConfigureXmlOutput(); + } +} + +// A predicate that checks the name of a TestCase against a known +// value. +// +// This is used for implementation of the UnitTest class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestCaseNameIs is copyable. +class TestCaseNameIs { + public: + // Constructor. + explicit TestCaseNameIs(const String& name) + : name_(name) {} + + // Returns true iff the name of test_case matches name_. + bool operator()(const TestCase* test_case) const { + return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; + } + + private: + String name_; +}; + +// Finds and returns a TestCase with the given name. If one doesn't +// exist, creates one and returns it. It's the CALLER'S +// RESPONSIBILITY to ensure that this function is only called WHEN THE +// TESTS ARE NOT SHUFFLED. +// +// Arguments: +// +// test_case_name: name of the test case +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, + const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) { + // Can we find a TestCase with the given name? + const std::vector::const_iterator test_case = + std::find_if(test_cases_.begin(), test_cases_.end(), + TestCaseNameIs(test_case_name)); + + if (test_case != test_cases_.end()) + return *test_case; + + // No. Let's create one. + TestCase* const new_test_case = + new TestCase(test_case_name, comment, set_up_tc, tear_down_tc); + + // Is this a death test case? + if (internal::UnitTestOptions::MatchesFilter(String(test_case_name), + kDeathTestCaseFilter)) { + // Yes. Inserts the test case after the last death test case + // defined so far. This only works when the test cases haven't + // been shuffled. Otherwise we may end up running a death test + // after a non-death test. + ++last_death_test_case_; + test_cases_.insert(test_cases_.begin() + last_death_test_case_, + new_test_case); + } else { + // No. Appends to the end of the list. + test_cases_.push_back(new_test_case); + } + + test_case_indices_.push_back(static_cast(test_case_indices_.size())); + return new_test_case; +} + +// Helpers for setting up / tearing down the given environment. They +// are for use in the ForEach() function. +static void SetUpEnvironment(Environment* env) { env->SetUp(); } +static void TearDownEnvironment(Environment* env) { env->TearDown(); } + +// Runs all tests in this UnitTest object, prints the result, and +// returns 0 if all tests are successful, or 1 otherwise. If any +// exception is thrown during a test on Windows, this test is +// considered to be failed, but the rest of the tests will still be +// run. (We disable exceptions on Linux and Mac OS X, so the issue +// doesn't apply there.) +// When parameterized tests are enabled, it expands and registers +// parameterized tests first in RegisterParameterizedTests(). +// All other functions called from RunAllTests() may safely assume that +// parameterized tests are ready to be counted and run. +int UnitTestImpl::RunAllTests() { + // Makes sure InitGoogleTest() was called. + if (!GTestIsInitialized()) { + printf("%s", + "\nThis test program did NOT call ::testing::InitGoogleTest " + "before calling RUN_ALL_TESTS(). Please fix it.\n"); + return 1; + } + + // Do not run any test if the --help flag was specified. + if (g_help_flag) + return 0; + + // Repeats the call to the post-flag parsing initialization in case the + // user didn't call InitGoogleTest. + PostFlagParsingInit(); + + // Even if sharding is not on, test runners may want to use the + // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding + // protocol. + internal::WriteToShardStatusFileIfNeeded(); + + // True iff we are in a subprocess for running a thread-safe-style + // death test. + bool in_subprocess_for_death_test = false; + +#if GTEST_HAS_DEATH_TEST + in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); +#endif // GTEST_HAS_DEATH_TEST + + const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, + in_subprocess_for_death_test); + + // Compares the full test names with the filter to decide which + // tests to run. + const bool has_tests_to_run = FilterTests(should_shard + ? HONOR_SHARDING_PROTOCOL + : IGNORE_SHARDING_PROTOCOL) > 0; + + // Lists the tests and exits if the --gtest_list_tests flag was specified. + if (GTEST_FLAG(list_tests)) { + // This must be called *after* FilterTests() has been called. + ListTestsMatchingFilter(); + return 0; + } + + random_seed_ = GTEST_FLAG(shuffle) ? + GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; + + // True iff at least one test has failed. + bool failed = false; + + TestEventListener* repeater = listeners()->repeater(); + + repeater->OnTestProgramStart(*parent_); + + // How many times to repeat the tests? We don't want to repeat them + // when we are inside the subprocess of a death test. + const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); + // Repeats forever if the repeat count is negative. + const bool forever = repeat < 0; + for (int i = 0; forever || i != repeat; i++) { + ClearResult(); + + const TimeInMillis start = GetTimeInMillis(); + + // Shuffles test cases and tests if requested. + if (has_tests_to_run && GTEST_FLAG(shuffle)) { + random()->Reseed(random_seed_); + // This should be done before calling OnTestIterationStart(), + // such that a test event listener can see the actual test order + // in the event. + ShuffleTests(); + } + + // Tells the unit test event listeners that the tests are about to start. + repeater->OnTestIterationStart(*parent_, i); + + // Runs each test case if there is at least one test to run. + if (has_tests_to_run) { + // Sets up all environments beforehand. + repeater->OnEnvironmentsSetUpStart(*parent_); + ForEach(environments_, SetUpEnvironment); + repeater->OnEnvironmentsSetUpEnd(*parent_); + + // Runs the tests only if there was no fatal failure during global + // set-up. + if (!Test::HasFatalFailure()) { + for (int test_index = 0; test_index < total_test_case_count(); + test_index++) { + GetMutableTestCase(test_index)->Run(); + } + } + + // Tears down all environments in reverse order afterwards. + repeater->OnEnvironmentsTearDownStart(*parent_); + std::for_each(environments_.rbegin(), environments_.rend(), + TearDownEnvironment); + repeater->OnEnvironmentsTearDownEnd(*parent_); + } + + elapsed_time_ = GetTimeInMillis() - start; + + // Tells the unit test event listener that the tests have just finished. + repeater->OnTestIterationEnd(*parent_, i); + + // Gets the result and clears it. + if (!Passed()) { + failed = true; + } + + // Restores the original test order after the iteration. This + // allows the user to quickly repro a failure that happens in the + // N-th iteration without repeating the first (N - 1) iterations. + // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in + // case the user somehow changes the value of the flag somewhere + // (it's always safe to unshuffle the tests). + UnshuffleTests(); + + if (GTEST_FLAG(shuffle)) { + // Picks a new random seed for each iteration. + random_seed_ = GetNextRandomSeed(random_seed_); + } + } + + repeater->OnTestProgramEnd(*parent_); + + // Returns 0 if all tests passed, or 1 other wise. + return failed ? 1 : 0; +} + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded() { + const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); + if (test_shard_file != NULL) { + FILE* const file = posix::FOpen(test_shard_file, "w"); + if (file == NULL) { + ColoredPrintf(COLOR_RED, + "Could not write to the test shard status file \"%s\" " + "specified by the %s environment variable.\n", + test_shard_file, kTestShardStatusFile); + fflush(stdout); + exit(EXIT_FAILURE); + } + fclose(file); + } +} + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (i.e., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +bool ShouldShard(const char* total_shards_env, + const char* shard_index_env, + bool in_subprocess_for_death_test) { + if (in_subprocess_for_death_test) { + return false; + } + + const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); + const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); + + if (total_shards == -1 && shard_index == -1) { + return false; + } else if (total_shards == -1 && shard_index != -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestShardIndex << " = " << shard_index + << ", but have left " << kTestTotalShards << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (total_shards != -1 && shard_index == -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestTotalShards << " = " << total_shards + << ", but have left " << kTestShardIndex << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (shard_index < 0 || shard_index >= total_shards) { + const Message msg = Message() + << "Invalid environment variables: we require 0 <= " + << kTestShardIndex << " < " << kTestTotalShards + << ", but you have " << kTestShardIndex << "=" << shard_index + << ", " << kTestTotalShards << "=" << total_shards << ".\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } + + return total_shards > 1; +} + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error +// and aborts. +Int32 Int32FromEnvOrDie(const char* const var, Int32 default_val) { + const char* str_val = posix::GetEnv(var); + if (str_val == NULL) { + return default_val; + } + + Int32 result; + if (!ParseInt32(Message() << "The value of environment variable " << var, + str_val, &result)) { + exit(EXIT_FAILURE); + } + return result; +} + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { + return (test_id % total_shards) == shard_index; +} + +// Compares the name of each test with the user-specified filter to +// decide whether the test should be run, then records the result in +// each TestCase and TestInfo object. +// If shard_tests == true, further filters tests based on sharding +// variables in the environment - see +// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. +// Returns the number of tests that should run. +int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { + const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestTotalShards, -1) : -1; + const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestShardIndex, -1) : -1; + + // num_runnable_tests are the number of tests that will + // run across all shards (i.e., match filter and are not disabled). + // num_selected_tests are the number of tests to be run on + // this shard. + int num_runnable_tests = 0; + int num_selected_tests = 0; + for (size_t i = 0; i < test_cases_.size(); i++) { + TestCase* const test_case = test_cases_[i]; + const String &test_case_name = test_case->name(); + test_case->set_should_run(false); + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + TestInfo* const test_info = test_case->test_info_list()[j]; + const String test_name(test_info->name()); + // A test is disabled if test case name or test name matches + // kDisableTestFilter. + const bool is_disabled = + internal::UnitTestOptions::MatchesFilter(test_case_name, + kDisableTestFilter) || + internal::UnitTestOptions::MatchesFilter(test_name, + kDisableTestFilter); + test_info->impl()->set_is_disabled(is_disabled); + + const bool matches_filter = + internal::UnitTestOptions::FilterMatchesTest(test_case_name, + test_name); + test_info->impl()->set_matches_filter(matches_filter); + + const bool is_runnable = + (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && + matches_filter; + + const bool is_selected = is_runnable && + (shard_tests == IGNORE_SHARDING_PROTOCOL || + ShouldRunTestOnShard(total_shards, shard_index, + num_runnable_tests)); + + num_runnable_tests += is_runnable; + num_selected_tests += is_selected; + + test_info->impl()->set_should_run(is_selected); + test_case->set_should_run(test_case->should_run() || is_selected); + } + } + return num_selected_tests; +} + +// Prints the names of the tests matching the user-specified filter flag. +void UnitTestImpl::ListTestsMatchingFilter() { + for (size_t i = 0; i < test_cases_.size(); i++) { + const TestCase* const test_case = test_cases_[i]; + bool printed_test_case_name = false; + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + const TestInfo* const test_info = + test_case->test_info_list()[j]; + if (test_info->matches_filter()) { + if (!printed_test_case_name) { + printed_test_case_name = true; + printf("%s.\n", test_case->name()); + } + printf(" %s\n", test_info->name()); + } + } + } + fflush(stdout); +} + +// Sets the OS stack trace getter. +// +// Does nothing if the input and the current OS stack trace getter are +// the same; otherwise, deletes the old getter and makes the input the +// current getter. +void UnitTestImpl::set_os_stack_trace_getter( + OsStackTraceGetterInterface* getter) { + if (os_stack_trace_getter_ != getter) { + delete os_stack_trace_getter_; + os_stack_trace_getter_ = getter; + } +} + +// Returns the current OS stack trace getter if it is not NULL; +// otherwise, creates an OsStackTraceGetter, makes it the current +// getter, and returns it. +OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { + if (os_stack_trace_getter_ == NULL) { + os_stack_trace_getter_ = new OsStackTraceGetter; + } + + return os_stack_trace_getter_; +} + +// Returns the TestResult for the test that's currently running, or +// the TestResult for the ad hoc test if no test is running. +TestResult* UnitTestImpl::current_test_result() { + return current_test_info_ ? + current_test_info_->impl()->result() : &ad_hoc_test_result_; +} + +// Shuffles all test cases, and the tests within each test case, +// making sure that death tests are still run first. +void UnitTestImpl::ShuffleTests() { + // Shuffles the death test cases. + ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); + + // Shuffles the non-death test cases. + ShuffleRange(random(), last_death_test_case_ + 1, + static_cast(test_cases_.size()), &test_case_indices_); + + // Shuffles the tests inside each test case. + for (size_t i = 0; i < test_cases_.size(); i++) { + test_cases_[i]->ShuffleTests(random()); + } +} + +// Restores the test cases and tests to their order before the first shuffle. +void UnitTestImpl::UnshuffleTests() { + for (size_t i = 0; i < test_cases_.size(); i++) { + // Unshuffles the tests in each test case. + test_cases_[i]->UnshuffleTests(); + // Resets the index of each test case. + test_case_indices_[i] = static_cast(i); + } +} + +// TestInfoImpl constructor. The new instance assumes ownership of the test +// factory object. +TestInfoImpl::TestInfoImpl(TestInfo* parent, + const char* a_test_case_name, + const char* a_name, + const char* a_test_case_comment, + const char* a_comment, + TypeId a_fixture_class_id, + internal::TestFactoryBase* factory) : + parent_(parent), + test_case_name_(String(a_test_case_name)), + name_(String(a_name)), + test_case_comment_(String(a_test_case_comment)), + comment_(String(a_comment)), + fixture_class_id_(a_fixture_class_id), + should_run_(false), + is_disabled_(false), + matches_filter_(false), + factory_(factory) { +} + +// TestInfoImpl destructor. +TestInfoImpl::~TestInfoImpl() { + delete factory_; +} + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +String GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, + int skip_count) { + // We pass skip_count + 1 to skip this wrapper function in addition + // to what the user really wants to skip. + return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); +} + +// Used by the GTEST_HIDE_UNREACHABLE_CODE_ macro to suppress unreachable +// code warnings. +namespace { +class ClassUniqueToAlwaysTrue {}; +} + +bool IsTrue(bool condition) { return condition; } + +bool AlwaysTrue() { +#if GTEST_HAS_EXCEPTIONS + // This condition is always false so AlwaysTrue() never actually throws, + // but it makes the compiler think that it may throw. + if (IsTrue(false)) + throw ClassUniqueToAlwaysTrue(); +#endif // GTEST_HAS_EXCEPTIONS + return true; +} + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr) { + const size_t prefix_len = strlen(prefix); + if (strncmp(*pstr, prefix, prefix_len) == 0) { + *pstr += prefix_len; + return true; + } + return false; +} + +// Parses a string as a command line flag. The string should have +// the format "--flag=value". When def_optional is true, the "=value" +// part can be omitted. +// +// Returns the value of the flag, or NULL if the parsing failed. +const char* ParseFlagValue(const char* str, + const char* flag, + bool def_optional) { + // str and flag must not be NULL. + if (str == NULL || flag == NULL) return NULL; + + // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. + const String flag_str = String::Format("--%s%s", GTEST_FLAG_PREFIX_, flag); + const size_t flag_len = flag_str.length(); + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + + // Skips the flag name. + const char* flag_end = str + flag_len; + + // When def_optional is true, it's OK to not have a "=value" part. + if (def_optional && (flag_end[0] == '\0')) { + return flag_end; + } + + // If def_optional is true and there are more characters after the + // flag name, or if def_optional is false, there must be a '=' after + // the flag name. + if (flag_end[0] != '=') return NULL; + + // Returns the string after "=". + return flag_end + 1; +} + +// Parses a string for a bool flag, in the form of either +// "--flag=value" or "--flag". +// +// In the former case, the value is taken as true as long as it does +// not start with '0', 'f', or 'F'. +// +// In the latter case, the value is taken as true. +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseBoolFlag(const char* str, const char* flag, bool* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, true); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Converts the string value to a bool. + *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); + return true; +} + +// Parses a string for an Int32 flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + return ParseInt32(Message() << "The value of flag --" << flag, + value_str, value); +} + +// Parses a string for a string flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseStringFlag(const char* str, const char* flag, String* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + *value = value_str; + return true; +} + +// Determines whether a string has a prefix that Google Test uses for its +// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. +// If Google Test detects that a command line flag has its prefix but is not +// recognized, it will print its help message. Flags starting with +// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test +// internal flags and do not trigger the help message. +static bool HasGoogleTestFlagPrefix(const char* str) { + return (SkipPrefix("--", &str) || + SkipPrefix("-", &str) || + SkipPrefix("/", &str)) && + !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && + (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || + SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); +} + +// Prints a string containing code-encoded text. The following escape +// sequences can be used in the string to control the text color: +// +// @@ prints a single '@' character. +// @R changes the color to red. +// @G changes the color to green. +// @Y changes the color to yellow. +// @D changes to the default terminal text color. +// +// TODO(wan@google.com): Write tests for this once we add stdout +// capturing to Google Test. +static void PrintColorEncoded(const char* str) { + GTestColor color = COLOR_DEFAULT; // The current color. + + // Conceptually, we split the string into segments divided by escape + // sequences. Then we print one segment at a time. At the end of + // each iteration, the str pointer advances to the beginning of the + // next segment. + for (;;) { + const char* p = strchr(str, '@'); + if (p == NULL) { + ColoredPrintf(color, "%s", str); + return; + } + + ColoredPrintf(color, "%s", String(str, p - str).c_str()); + + const char ch = p[1]; + str = p + 2; + if (ch == '@') { + ColoredPrintf(color, "@"); + } else if (ch == 'D') { + color = COLOR_DEFAULT; + } else if (ch == 'R') { + color = COLOR_RED; + } else if (ch == 'G') { + color = COLOR_GREEN; + } else if (ch == 'Y') { + color = COLOR_YELLOW; + } else { + --str; + } + } +} + +static const char kColorEncodedHelpMessage[] = +"This program contains tests written using " GTEST_NAME_ ". You can use the\n" +"following command line flags to control its behavior:\n" +"\n" +"Test Selection:\n" +" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" +" List the names of all tests instead of running them. The name of\n" +" TEST(Foo, Bar) is \"Foo.Bar\".\n" +" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" + "[@G-@YNEGATIVE_PATTERNS]@D\n" +" Run only the tests whose name matches one of the positive patterns but\n" +" none of the negative patterns. '?' matches any single character; '*'\n" +" matches any substring; ':' separates two patterns.\n" +" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" +" Run all disabled tests too.\n" +"\n" +"Test Execution:\n" +" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" +" Run the tests repeatedly; use a negative count to repeat forever.\n" +" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" +" Randomize tests' orders on every iteration.\n" +" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" +" Random number seed to use for shuffling test orders (between 1 and\n" +" 99999, or 0 to use a seed based on the current time).\n" +"\n" +"Test Output:\n" +" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" +" Enable/disable colored output. The default is @Gauto@D.\n" +" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" +" Don't print the elapsed time of each test.\n" +" @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" + GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" +" Generate an XML report in the given directory or with the given file\n" +" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +"\n" +"Assertion Behavior:\n" +#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" +" Set the default death test style.\n" +#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" +" Turn assertion failures into debugger break-points.\n" +" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" +" Turn assertion failures into C++ exceptions.\n" +#if GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions@D\n" +" Suppress pop-ups caused by exceptions.\n" +#endif // GTEST_OS_WINDOWS +"\n" +"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " + "the corresponding\n" +"environment variable of a flag (all letters in upper-case). For example, to\n" +"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ + "color=no@D or set\n" +"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" +"\n" +"For more information, please read the " GTEST_NAME_ " documentation at\n" +"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" +"(not one in your own code or tests), please report it to\n" +"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. The type parameter CharType can be +// instantiated to either char or wchar_t. +template +void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { + for (int i = 1; i < *argc; i++) { + const String arg_string = StreamableToString(argv[i]); + const char* const arg = arg_string.c_str(); + + using internal::ParseBoolFlag; + using internal::ParseInt32Flag; + using internal::ParseStringFlag; + + // Do we see a Google Test flag? + if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, + >EST_FLAG(also_run_disabled_tests)) || + ParseBoolFlag(arg, kBreakOnFailureFlag, + >EST_FLAG(break_on_failure)) || + ParseBoolFlag(arg, kCatchExceptionsFlag, + >EST_FLAG(catch_exceptions)) || + ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || + ParseStringFlag(arg, kDeathTestStyleFlag, + >EST_FLAG(death_test_style)) || + ParseBoolFlag(arg, kDeathTestUseFork, + >EST_FLAG(death_test_use_fork)) || + ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || + ParseStringFlag(arg, kInternalRunDeathTestFlag, + >EST_FLAG(internal_run_death_test)) || + ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || + ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || + ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || + ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || + ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || + ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || + ParseInt32Flag(arg, kStackTraceDepthFlag, + >EST_FLAG(stack_trace_depth)) || + ParseBoolFlag(arg, kThrowOnFailureFlag, >EST_FLAG(throw_on_failure)) + ) { + // Yes. Shift the remainder of the argv list left by one. Note + // that argv has (*argc + 1) elements, the last one always being + // NULL. The following loop moves the trailing NULL element as + // well. + for (int j = i; j != *argc; j++) { + argv[j] = argv[j + 1]; + } + + // Decrements the argument count. + (*argc)--; + + // We also need to decrement the iterator as we just removed + // an element. + i--; + } else if (arg_string == "--help" || arg_string == "-h" || + arg_string == "-?" || arg_string == "/?" || + HasGoogleTestFlagPrefix(arg)) { + // Both help flag and unrecognized Google Test flags (excluding + // internal ones) trigger help display. + g_help_flag = true; + } + } + + if (g_help_flag) { + // We print the help here instead of in RUN_ALL_TESTS(), as the + // latter may not be called at all if the user is using Google + // Test with another testing framework. + PrintColorEncoded(kColorEncodedHelpMessage); + } +} + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +void ParseGoogleTestFlagsOnly(int* argc, char** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} +void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} + +// The internal implementation of InitGoogleTest(). +// +// The type parameter CharType can be instantiated to either char or +// wchar_t. +template +void InitGoogleTestImpl(int* argc, CharType** argv) { + g_init_gtest_count++; + + // We don't want to run the initialization code twice. + if (g_init_gtest_count != 1) return; + + if (*argc <= 0) return; + + internal::g_executable_path = internal::StreamableToString(argv[0]); + +#if GTEST_HAS_DEATH_TEST + g_argvs.clear(); + for (int i = 0; i != *argc; i++) { + g_argvs.push_back(StreamableToString(argv[i])); + } +#endif // GTEST_HAS_DEATH_TEST + + ParseGoogleTestFlagsOnly(argc, argv); + GetUnitTestImpl()->PostFlagParsingInit(); +} + +} // namespace internal + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +void InitGoogleTest(int* argc, char** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +void InitGoogleTest(int* argc, wchar_t** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest_main.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest_main.cc new file mode 100644 index 00000000..d20c02fd --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/src/gtest_main.cc @@ -0,0 +1,39 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +#include + +int main(int argc, char **argv) { + std::cout << "Running main() from gtest_main.cc\n"; + + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-death-test_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-death-test_test.cc new file mode 100644 index 00000000..ed5b53b7 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-death-test_test.cc @@ -0,0 +1,1230 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Tests for death tests. + +#include +#include +#include + +using testing::internal::AlwaysFalse; +using testing::internal::AlwaysTrue; + +#if GTEST_HAS_DEATH_TEST + +#if GTEST_OS_WINDOWS +#include // For chdir(). +#else +#include +#include // For waitpid. +#include // For std::numeric_limits. +#endif // GTEST_OS_WINDOWS + +#include +#include +#include + +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace posix = ::testing::internal::posix; + +using testing::Message; +using testing::internal::DeathTest; +using testing::internal::DeathTestFactory; +using testing::internal::FilePath; +using testing::internal::GetLastErrnoDescription; +using testing::internal::GetUnitTestImpl; +using testing::internal::ParseNaturalNumber; +using testing::internal::String; + +namespace testing { +namespace internal { + +// A helper class whose objects replace the death test factory for a +// single UnitTest object during their lifetimes. +class ReplaceDeathTestFactory { + public: + explicit ReplaceDeathTestFactory(DeathTestFactory* new_factory) + : unit_test_impl_(GetUnitTestImpl()) { + old_factory_ = unit_test_impl_->death_test_factory_.release(); + unit_test_impl_->death_test_factory_.reset(new_factory); + } + + ~ReplaceDeathTestFactory() { + unit_test_impl_->death_test_factory_.release(); + unit_test_impl_->death_test_factory_.reset(old_factory_); + } + private: + // Prevents copying ReplaceDeathTestFactory objects. + ReplaceDeathTestFactory(const ReplaceDeathTestFactory&); + void operator=(const ReplaceDeathTestFactory&); + + UnitTestImpl* unit_test_impl_; + DeathTestFactory* old_factory_; +}; + +} // namespace internal +} // namespace testing + +void DieInside(const char* function) { + fprintf(stderr, "death inside %s().", function); + fflush(stderr); + // We call _exit() instead of exit(), as the former is a direct + // system call and thus safer in the presence of threads. exit() + // will invoke user-defined exit-hooks, which may do dangerous + // things that conflict with death tests. + // + // Some compilers can recognize that _exit() never returns and issue the + // 'unreachable code' warning for code following this function, unless + // fooled by a fake condition. + if (AlwaysTrue()) + _exit(1); +} + +// Tests that death tests work. + +class TestForDeathTest : public testing::Test { + protected: + TestForDeathTest() : original_dir_(FilePath::GetCurrentDir()) {} + + virtual ~TestForDeathTest() { + posix::ChDir(original_dir_.c_str()); + } + + // A static member function that's expected to die. + static void StaticMemberFunction() { DieInside("StaticMemberFunction"); } + + // A method of the test fixture that may die. + void MemberFunction() { + if (should_die_) + DieInside("MemberFunction"); + } + + // True iff MemberFunction() should die. + bool should_die_; + const FilePath original_dir_; +}; + +// A class with a member function that may die. +class MayDie { + public: + explicit MayDie(bool should_die) : should_die_(should_die) {} + + // A member function that may die. + void MemberFunction() const { + if (should_die_) + DieInside("MayDie::MemberFunction"); + } + + private: + // True iff MemberFunction() should die. + bool should_die_; +}; + +// A global function that's expected to die. +void GlobalFunction() { DieInside("GlobalFunction"); } + +// A non-void function that's expected to die. +int NonVoidFunction() { + DieInside("NonVoidFunction"); + return 1; +} + +// A unary function that may die. +void DieIf(bool should_die) { + if (should_die) + DieInside("DieIf"); +} + +// A binary function that may die. +bool DieIfLessThan(int x, int y) { + if (x < y) { + DieInside("DieIfLessThan"); + } + return true; +} + +// Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture. +void DeathTestSubroutine() { + EXPECT_DEATH(GlobalFunction(), "death.*GlobalFunction"); + ASSERT_DEATH(GlobalFunction(), "death.*GlobalFunction"); +} + +// Death in dbg, not opt. +int DieInDebugElse12(int* sideeffect) { + if (sideeffect) *sideeffect = 12; +#ifndef NDEBUG + DieInside("DieInDebugElse12"); +#endif // NDEBUG + return 12; +} + +#if GTEST_OS_WINDOWS + +// Tests the ExitedWithCode predicate. +TEST(ExitStatusPredicateTest, ExitedWithCode) { + // On Windows, the process's exit code is the same as its exit status, + // so the predicate just compares the its input with its parameter. + EXPECT_TRUE(testing::ExitedWithCode(0)(0)); + EXPECT_TRUE(testing::ExitedWithCode(1)(1)); + EXPECT_TRUE(testing::ExitedWithCode(42)(42)); + EXPECT_FALSE(testing::ExitedWithCode(0)(1)); + EXPECT_FALSE(testing::ExitedWithCode(1)(0)); +} + +#else + +// Returns the exit status of a process that calls _exit(2) with a +// given exit code. This is a helper function for the +// ExitStatusPredicateTest test suite. +static int NormalExitStatus(int exit_code) { + pid_t child_pid = fork(); + if (child_pid == 0) { + _exit(exit_code); + } + int status; + waitpid(child_pid, &status, 0); + return status; +} + +// Returns the exit status of a process that raises a given signal. +// If the signal does not cause the process to die, then it returns +// instead the exit status of a process that exits normally with exit +// code 1. This is a helper function for the ExitStatusPredicateTest +// test suite. +static int KilledExitStatus(int signum) { + pid_t child_pid = fork(); + if (child_pid == 0) { + raise(signum); + _exit(1); + } + int status; + waitpid(child_pid, &status, 0); + return status; +} + +// Tests the ExitedWithCode predicate. +TEST(ExitStatusPredicateTest, ExitedWithCode) { + const int status0 = NormalExitStatus(0); + const int status1 = NormalExitStatus(1); + const int status42 = NormalExitStatus(42); + const testing::ExitedWithCode pred0(0); + const testing::ExitedWithCode pred1(1); + const testing::ExitedWithCode pred42(42); + EXPECT_PRED1(pred0, status0); + EXPECT_PRED1(pred1, status1); + EXPECT_PRED1(pred42, status42); + EXPECT_FALSE(pred0(status1)); + EXPECT_FALSE(pred42(status0)); + EXPECT_FALSE(pred1(status42)); +} + +// Tests the KilledBySignal predicate. +TEST(ExitStatusPredicateTest, KilledBySignal) { + const int status_segv = KilledExitStatus(SIGSEGV); + const int status_kill = KilledExitStatus(SIGKILL); + const testing::KilledBySignal pred_segv(SIGSEGV); + const testing::KilledBySignal pred_kill(SIGKILL); + EXPECT_PRED1(pred_segv, status_segv); + EXPECT_PRED1(pred_kill, status_kill); + EXPECT_FALSE(pred_segv(status_kill)); + EXPECT_FALSE(pred_kill(status_segv)); +} + +#endif // GTEST_OS_WINDOWS + +// Tests that the death test macros expand to code which may or may not +// be followed by operator<<, and that in either case the complete text +// comprises only a single C++ statement. +TEST_F(TestForDeathTest, SingleStatement) { + if (AlwaysFalse()) + // This would fail if executed; this is a compilation test only + ASSERT_DEATH(return, ""); + + if (AlwaysTrue()) + EXPECT_DEATH(_exit(1), ""); + else + // This empty "else" branch is meant to ensure that EXPECT_DEATH + // doesn't expand into an "if" statement without an "else" + ; + + if (AlwaysFalse()) + ASSERT_DEATH(return, "") << "did not die"; + + if (AlwaysFalse()) + ; + else + EXPECT_DEATH(_exit(1), "") << 1 << 2 << 3; +} + +void DieWithEmbeddedNul() { + fprintf(stderr, "Hello%cmy null world.\n", '\0'); + fflush(stderr); + _exit(1); +} + +#if GTEST_USES_PCRE +// Tests that EXPECT_DEATH and ASSERT_DEATH work when the error +// message has a NUL character in it. +TEST_F(TestForDeathTest, EmbeddedNulInMessage) { + // TODO(wan@google.com): doesn't support matching strings + // with embedded NUL characters - find a way to workaround it. + EXPECT_DEATH(DieWithEmbeddedNul(), "my null world"); + ASSERT_DEATH(DieWithEmbeddedNul(), "my null world"); +} +#endif // GTEST_USES_PCRE + +// Tests that death test macros expand to code which interacts well with switch +// statements. +TEST_F(TestForDeathTest, SwitchStatement) { +// Microsoft compiler usually complains about switch statements without +// case labels. We suppress that warning for this test. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4065) +#endif // _MSC_VER + + switch (0) + default: + ASSERT_DEATH(_exit(1), "") << "exit in default switch handler"; + + switch (0) + case 0: + EXPECT_DEATH(_exit(1), "") << "exit in switch case"; + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER +} + +// Tests that a static member function can be used in a "fast" style +// death test. +TEST_F(TestForDeathTest, StaticMemberFunctionFastStyle) { + testing::GTEST_FLAG(death_test_style) = "fast"; + ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember"); +} + +// Tests that a method of the test fixture can be used in a "fast" +// style death test. +TEST_F(TestForDeathTest, MemberFunctionFastStyle) { + testing::GTEST_FLAG(death_test_style) = "fast"; + should_die_ = true; + EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction"); +} + +void ChangeToRootDir() { posix::ChDir(GTEST_PATH_SEP_); } + +// Tests that death tests work even if the current directory has been +// changed. +TEST_F(TestForDeathTest, FastDeathTestInChangedDir) { + testing::GTEST_FLAG(death_test_style) = "fast"; + + ChangeToRootDir(); + EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); + + ChangeToRootDir(); + ASSERT_DEATH(_exit(1), ""); +} + +// Repeats a representative sample of death tests in the "threadsafe" style: + +TEST_F(TestForDeathTest, StaticMemberFunctionThreadsafeStyle) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember"); +} + +TEST_F(TestForDeathTest, MemberFunctionThreadsafeStyle) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + should_die_ = true; + EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction"); +} + +TEST_F(TestForDeathTest, ThreadsafeDeathTestInLoop) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + + for (int i = 0; i < 3; ++i) + EXPECT_EXIT(_exit(i), testing::ExitedWithCode(i), "") << ": i = " << i; +} + +TEST_F(TestForDeathTest, ThreadsafeDeathTestInChangedDir) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + + ChangeToRootDir(); + EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); + + ChangeToRootDir(); + ASSERT_DEATH(_exit(1), ""); +} + +TEST_F(TestForDeathTest, MixedStyles) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + EXPECT_DEATH(_exit(1), ""); + testing::GTEST_FLAG(death_test_style) = "fast"; + EXPECT_DEATH(_exit(1), ""); +} + +namespace { + +bool pthread_flag; + +void SetPthreadFlag() { + pthread_flag = true; +} + +} // namespace + +#if GTEST_HAS_CLONE && GTEST_HAS_PTHREAD + +TEST_F(TestForDeathTest, DoesNotExecuteAtforkHooks) { + if (!testing::GTEST_FLAG(death_test_use_fork)) { + testing::GTEST_FLAG(death_test_style) = "threadsafe"; + pthread_flag = false; + ASSERT_EQ(0, pthread_atfork(&SetPthreadFlag, NULL, NULL)); + ASSERT_DEATH(_exit(1), ""); + ASSERT_FALSE(pthread_flag); + } +} + +#endif // GTEST_HAS_CLONE && GTEST_HAS_PTHREAD + +// Tests that a method of another class can be used in a death test. +TEST_F(TestForDeathTest, MethodOfAnotherClass) { + const MayDie x(true); + ASSERT_DEATH(x.MemberFunction(), "MayDie\\:\\:MemberFunction"); +} + +// Tests that a global function can be used in a death test. +TEST_F(TestForDeathTest, GlobalFunction) { + EXPECT_DEATH(GlobalFunction(), "GlobalFunction"); +} + +// Tests that any value convertible to an RE works as a second +// argument to EXPECT_DEATH. +TEST_F(TestForDeathTest, AcceptsAnythingConvertibleToRE) { + static const char regex_c_str[] = "GlobalFunction"; + EXPECT_DEATH(GlobalFunction(), regex_c_str); + + const testing::internal::RE regex(regex_c_str); + EXPECT_DEATH(GlobalFunction(), regex); + +#if GTEST_HAS_GLOBAL_STRING + const string regex_str(regex_c_str); + EXPECT_DEATH(GlobalFunction(), regex_str); +#endif // GTEST_HAS_GLOBAL_STRING + + const ::std::string regex_std_str(regex_c_str); + EXPECT_DEATH(GlobalFunction(), regex_std_str); +} + +// Tests that a non-void function can be used in a death test. +TEST_F(TestForDeathTest, NonVoidFunction) { + ASSERT_DEATH(NonVoidFunction(), "NonVoidFunction"); +} + +// Tests that functions that take parameter(s) can be used in a death test. +TEST_F(TestForDeathTest, FunctionWithParameter) { + EXPECT_DEATH(DieIf(true), "DieIf\\(\\)"); + EXPECT_DEATH(DieIfLessThan(2, 3), "DieIfLessThan"); +} + +// Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture. +TEST_F(TestForDeathTest, OutsideFixture) { + DeathTestSubroutine(); +} + +// Tests that death tests can be done inside a loop. +TEST_F(TestForDeathTest, InsideLoop) { + for (int i = 0; i < 5; i++) { + EXPECT_DEATH(DieIfLessThan(-1, i), "DieIfLessThan") << "where i == " << i; + } +} + +// Tests that a compound statement can be used in a death test. +TEST_F(TestForDeathTest, CompoundStatement) { + EXPECT_DEATH({ // NOLINT + const int x = 2; + const int y = x + 1; + DieIfLessThan(x, y); + }, + "DieIfLessThan"); +} + +// Tests that code that doesn't die causes a death test to fail. +TEST_F(TestForDeathTest, DoesNotDie) { + EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(DieIf(false), "DieIf"), + "failed to die"); +} + +// Tests that a death test fails when the error message isn't expected. +TEST_F(TestForDeathTest, ErrorMessageMismatch) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_DEATH(DieIf(true), "DieIfLessThan") << "End of death test message."; + }, "died but not with expected error"); +} + +// On exit, *aborted will be true iff the EXPECT_DEATH() statement +// aborted the function. +void ExpectDeathTestHelper(bool* aborted) { + *aborted = true; + EXPECT_DEATH(DieIf(false), "DieIf"); // This assertion should fail. + *aborted = false; +} + +// Tests that EXPECT_DEATH doesn't abort the test on failure. +TEST_F(TestForDeathTest, EXPECT_DEATH) { + bool aborted = true; + EXPECT_NONFATAL_FAILURE(ExpectDeathTestHelper(&aborted), + "failed to die"); + EXPECT_FALSE(aborted); +} + +// Tests that ASSERT_DEATH does abort the test on failure. +TEST_F(TestForDeathTest, ASSERT_DEATH) { + static bool aborted; + EXPECT_FATAL_FAILURE({ // NOLINT + aborted = true; + ASSERT_DEATH(DieIf(false), "DieIf"); // This assertion should fail. + aborted = false; + }, "failed to die"); + EXPECT_TRUE(aborted); +} + +// Tests that EXPECT_DEATH evaluates the arguments exactly once. +TEST_F(TestForDeathTest, SingleEvaluation) { + int x = 3; + EXPECT_DEATH(DieIf((++x) == 4), "DieIf"); + + const char* regex = "DieIf"; + const char* regex_save = regex; + EXPECT_DEATH(DieIfLessThan(3, 4), regex++); + EXPECT_EQ(regex_save + 1, regex); +} + +// Tests that run-away death tests are reported as failures. +TEST_F(TestForDeathTest, Runaway) { + EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(static_cast(0), "Foo"), + "failed to die."); + + EXPECT_FATAL_FAILURE(ASSERT_DEATH(return, "Bar"), + "illegal return in test statement."); +} + + +// Tests that EXPECT_DEBUG_DEATH works as expected, +// that is, in debug mode, it: +// 1. Asserts on death. +// 2. Has no side effect. +// +// And in opt mode, it: +// 1. Has side effects but does not assert. +TEST_F(TestForDeathTest, TestExpectDebugDeath) { + int sideeffect = 0; + + EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), + "death.*DieInDebugElse12"); + +#ifdef NDEBUG + // Checks that the assignment occurs in opt mode (sideeffect). + EXPECT_EQ(12, sideeffect); +#else + // Checks that the assignment does not occur in dbg mode (no sideeffect). + EXPECT_EQ(0, sideeffect); +#endif +} + +// Tests that ASSERT_DEBUG_DEATH works as expected +// In debug mode: +// 1. Asserts on debug death. +// 2. Has no side effect. +// +// In opt mode: +// 1. Has side effects and returns the expected value (12). +TEST_F(TestForDeathTest, TestAssertDebugDeath) { + int sideeffect = 0; + + ASSERT_DEBUG_DEATH({ // NOLINT + // Tests that the return value is 12 in opt mode. + EXPECT_EQ(12, DieInDebugElse12(&sideeffect)); + // Tests that the side effect occurred in opt mode. + EXPECT_EQ(12, sideeffect); + }, "death.*DieInDebugElse12"); + +#ifdef NDEBUG + // Checks that the assignment occurs in opt mode (sideeffect). + EXPECT_EQ(12, sideeffect); +#else + // Checks that the assignment does not occur in dbg mode (no sideeffect). + EXPECT_EQ(0, sideeffect); +#endif +} + +#ifndef NDEBUG + +void ExpectDebugDeathHelper(bool* aborted) { + *aborted = true; + EXPECT_DEBUG_DEATH(return, "") << "This is expected to fail."; + *aborted = false; +} + +#if GTEST_OS_WINDOWS +TEST(PopUpDeathTest, DoesNotShowPopUpOnAbort) { + printf("This test should be considered failing if it shows " + "any pop-up dialogs.\n"); + fflush(stdout); + + EXPECT_DEATH({ + testing::GTEST_FLAG(catch_exceptions) = false; + abort(); + }, ""); +} + +TEST(PopUpDeathTest, DoesNotShowPopUpOnThrow) { + printf("This test should be considered failing if it shows " + "any pop-up dialogs.\n"); + fflush(stdout); + + EXPECT_DEATH({ + testing::GTEST_FLAG(catch_exceptions) = false; + throw 1; + }, ""); +} +#endif // GTEST_OS_WINDOWS + +// Tests that EXPECT_DEBUG_DEATH in debug mode does not abort +// the function. +TEST_F(TestForDeathTest, ExpectDebugDeathDoesNotAbort) { + bool aborted = true; + EXPECT_NONFATAL_FAILURE(ExpectDebugDeathHelper(&aborted), ""); + EXPECT_FALSE(aborted); +} + +void AssertDebugDeathHelper(bool* aborted) { + *aborted = true; + ASSERT_DEBUG_DEATH(return, "") << "This is expected to fail."; + *aborted = false; +} + +// Tests that ASSERT_DEBUG_DEATH in debug mode aborts the function on +// failure. +TEST_F(TestForDeathTest, AssertDebugDeathAborts) { + static bool aborted; + aborted = false; + EXPECT_FATAL_FAILURE(AssertDebugDeathHelper(&aborted), ""); + EXPECT_TRUE(aborted); +} + +#endif // _NDEBUG + +// Tests the *_EXIT family of macros, using a variety of predicates. +static void TestExitMacros() { + EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); + ASSERT_EXIT(_exit(42), testing::ExitedWithCode(42), ""); + +#if GTEST_OS_WINDOWS + // Of all signals effects on the process exit code, only those of SIGABRT + // are documented on Windows. + // See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx. + EXPECT_EXIT(raise(SIGABRT), testing::ExitedWithCode(3), ""); +#else + EXPECT_EXIT(raise(SIGKILL), testing::KilledBySignal(SIGKILL), "") << "foo"; + ASSERT_EXIT(raise(SIGUSR2), testing::KilledBySignal(SIGUSR2), "") << "bar"; + + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_EXIT(_exit(0), testing::KilledBySignal(SIGSEGV), "") + << "This failure is expected, too."; + }, "This failure is expected, too."); +#endif // GTEST_OS_WINDOWS + + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_EXIT(raise(SIGSEGV), testing::ExitedWithCode(0), "") + << "This failure is expected."; + }, "This failure is expected."); +} + +TEST_F(TestForDeathTest, ExitMacros) { + TestExitMacros(); +} + +TEST_F(TestForDeathTest, ExitMacrosUsingFork) { + testing::GTEST_FLAG(death_test_use_fork) = true; + TestExitMacros(); +} + +TEST_F(TestForDeathTest, InvalidStyle) { + testing::GTEST_FLAG(death_test_style) = "rococo"; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_DEATH(_exit(0), "") << "This failure is expected."; + }, "This failure is expected."); +} + +// A DeathTestFactory that returns MockDeathTests. +class MockDeathTestFactory : public DeathTestFactory { + public: + MockDeathTestFactory(); + virtual bool Create(const char* statement, + const ::testing::internal::RE* regex, + const char* file, int line, DeathTest** test); + + // Sets the parameters for subsequent calls to Create. + void SetParameters(bool create, DeathTest::TestRole role, + int status, bool passed); + + // Accessors. + int AssumeRoleCalls() const { return assume_role_calls_; } + int WaitCalls() const { return wait_calls_; } + int PassedCalls() const { return passed_args_.size(); } + bool PassedArgument(int n) const { return passed_args_[n]; } + int AbortCalls() const { return abort_args_.size(); } + DeathTest::AbortReason AbortArgument(int n) const { + return abort_args_[n]; + } + bool TestDeleted() const { return test_deleted_; } + + private: + friend class MockDeathTest; + // If true, Create will return a MockDeathTest; otherwise it returns + // NULL. + bool create_; + // The value a MockDeathTest will return from its AssumeRole method. + DeathTest::TestRole role_; + // The value a MockDeathTest will return from its Wait method. + int status_; + // The value a MockDeathTest will return from its Passed method. + bool passed_; + + // Number of times AssumeRole was called. + int assume_role_calls_; + // Number of times Wait was called. + int wait_calls_; + // The arguments to the calls to Passed since the last call to + // SetParameters. + std::vector passed_args_; + // The arguments to the calls to Abort since the last call to + // SetParameters. + std::vector abort_args_; + // True if the last MockDeathTest returned by Create has been + // deleted. + bool test_deleted_; +}; + + +// A DeathTest implementation useful in testing. It returns values set +// at its creation from its various inherited DeathTest methods, and +// reports calls to those methods to its parent MockDeathTestFactory +// object. +class MockDeathTest : public DeathTest { + public: + MockDeathTest(MockDeathTestFactory *parent, + TestRole role, int status, bool passed) : + parent_(parent), role_(role), status_(status), passed_(passed) { + } + virtual ~MockDeathTest() { + parent_->test_deleted_ = true; + } + virtual TestRole AssumeRole() { + ++parent_->assume_role_calls_; + return role_; + } + virtual int Wait() { + ++parent_->wait_calls_; + return status_; + } + virtual bool Passed(bool exit_status_ok) { + parent_->passed_args_.push_back(exit_status_ok); + return passed_; + } + virtual void Abort(AbortReason reason) { + parent_->abort_args_.push_back(reason); + } + private: + MockDeathTestFactory* const parent_; + const TestRole role_; + const int status_; + const bool passed_; +}; + + +// MockDeathTestFactory constructor. +MockDeathTestFactory::MockDeathTestFactory() + : create_(true), + role_(DeathTest::OVERSEE_TEST), + status_(0), + passed_(true), + assume_role_calls_(0), + wait_calls_(0), + passed_args_(), + abort_args_() { +} + + +// Sets the parameters for subsequent calls to Create. +void MockDeathTestFactory::SetParameters(bool create, + DeathTest::TestRole role, + int status, bool passed) { + create_ = create; + role_ = role; + status_ = status; + passed_ = passed; + + assume_role_calls_ = 0; + wait_calls_ = 0; + passed_args_.clear(); + abort_args_.clear(); +} + + +// Sets test to NULL (if create_ is false) or to the address of a new +// MockDeathTest object with parameters taken from the last call +// to SetParameters (if create_ is true). Always returns true. +bool MockDeathTestFactory::Create(const char* /*statement*/, + const ::testing::internal::RE* /*regex*/, + const char* /*file*/, + int /*line*/, + DeathTest** test) { + test_deleted_ = false; + if (create_) { + *test = new MockDeathTest(this, role_, status_, passed_); + } else { + *test = NULL; + } + return true; +} + +// A test fixture for testing the logic of the GTEST_DEATH_TEST_ macro. +// It installs a MockDeathTestFactory that is used for the duration +// of the test case. +class MacroLogicDeathTest : public testing::Test { + protected: + static testing::internal::ReplaceDeathTestFactory* replacer_; + static MockDeathTestFactory* factory_; + + static void SetUpTestCase() { + factory_ = new MockDeathTestFactory; + replacer_ = new testing::internal::ReplaceDeathTestFactory(factory_); + } + + static void TearDownTestCase() { + delete replacer_; + replacer_ = NULL; + delete factory_; + factory_ = NULL; + } + + // Runs a death test that breaks the rules by returning. Such a death + // test cannot be run directly from a test routine that uses a + // MockDeathTest, or the remainder of the routine will not be executed. + static void RunReturningDeathTest(bool* flag) { + ASSERT_DEATH({ // NOLINT + *flag = true; + return; + }, ""); + } +}; + +testing::internal::ReplaceDeathTestFactory* MacroLogicDeathTest::replacer_ + = NULL; +MockDeathTestFactory* MacroLogicDeathTest::factory_ = NULL; + + +// Test that nothing happens when the factory doesn't return a DeathTest: +TEST_F(MacroLogicDeathTest, NothingHappens) { + bool flag = false; + factory_->SetParameters(false, DeathTest::OVERSEE_TEST, 0, true); + EXPECT_DEATH(flag = true, ""); + EXPECT_FALSE(flag); + EXPECT_EQ(0, factory_->AssumeRoleCalls()); + EXPECT_EQ(0, factory_->WaitCalls()); + EXPECT_EQ(0, factory_->PassedCalls()); + EXPECT_EQ(0, factory_->AbortCalls()); + EXPECT_FALSE(factory_->TestDeleted()); +} + +// Test that the parent process doesn't run the death test code, +// and that the Passed method returns false when the (simulated) +// child process exits with status 0: +TEST_F(MacroLogicDeathTest, ChildExitsSuccessfully) { + bool flag = false; + factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 0, true); + EXPECT_DEATH(flag = true, ""); + EXPECT_FALSE(flag); + EXPECT_EQ(1, factory_->AssumeRoleCalls()); + EXPECT_EQ(1, factory_->WaitCalls()); + ASSERT_EQ(1, factory_->PassedCalls()); + EXPECT_FALSE(factory_->PassedArgument(0)); + EXPECT_EQ(0, factory_->AbortCalls()); + EXPECT_TRUE(factory_->TestDeleted()); +} + +// Tests that the Passed method was given the argument "true" when +// the (simulated) child process exits with status 1: +TEST_F(MacroLogicDeathTest, ChildExitsUnsuccessfully) { + bool flag = false; + factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 1, true); + EXPECT_DEATH(flag = true, ""); + EXPECT_FALSE(flag); + EXPECT_EQ(1, factory_->AssumeRoleCalls()); + EXPECT_EQ(1, factory_->WaitCalls()); + ASSERT_EQ(1, factory_->PassedCalls()); + EXPECT_TRUE(factory_->PassedArgument(0)); + EXPECT_EQ(0, factory_->AbortCalls()); + EXPECT_TRUE(factory_->TestDeleted()); +} + +// Tests that the (simulated) child process executes the death test +// code, and is aborted with the correct AbortReason if it +// executes a return statement. +TEST_F(MacroLogicDeathTest, ChildPerformsReturn) { + bool flag = false; + factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true); + RunReturningDeathTest(&flag); + EXPECT_TRUE(flag); + EXPECT_EQ(1, factory_->AssumeRoleCalls()); + EXPECT_EQ(0, factory_->WaitCalls()); + EXPECT_EQ(0, factory_->PassedCalls()); + EXPECT_EQ(1, factory_->AbortCalls()); + EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT, + factory_->AbortArgument(0)); + EXPECT_TRUE(factory_->TestDeleted()); +} + +// Tests that the (simulated) child process is aborted with the +// correct AbortReason if it does not die. +TEST_F(MacroLogicDeathTest, ChildDoesNotDie) { + bool flag = false; + factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true); + EXPECT_DEATH(flag = true, ""); + EXPECT_TRUE(flag); + EXPECT_EQ(1, factory_->AssumeRoleCalls()); + EXPECT_EQ(0, factory_->WaitCalls()); + EXPECT_EQ(0, factory_->PassedCalls()); + // This time there are two calls to Abort: one since the test didn't + // die, and another from the ReturnSentinel when it's destroyed. The + // sentinel normally isn't destroyed if a test doesn't die, since + // _exit(2) is called in that case by ForkingDeathTest, but not by + // our MockDeathTest. + ASSERT_EQ(2, factory_->AbortCalls()); + EXPECT_EQ(DeathTest::TEST_DID_NOT_DIE, + factory_->AbortArgument(0)); + EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT, + factory_->AbortArgument(1)); + EXPECT_TRUE(factory_->TestDeleted()); +} + +// Tests that a successful death test does not register a successful +// test part. +TEST(SuccessRegistrationDeathTest, NoSuccessPart) { + EXPECT_DEATH(_exit(1), ""); + EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +TEST(StreamingAssertionsDeathTest, DeathTest) { + EXPECT_DEATH(_exit(1), "") << "unexpected failure"; + ASSERT_DEATH(_exit(1), "") << "unexpected failure"; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_DEATH(_exit(0), "") << "expected failure"; + }, "expected failure"); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_DEATH(_exit(0), "") << "expected failure"; + }, "expected failure"); +} + +// Tests that GetLastErrnoDescription returns an empty string when the +// last error is 0 and non-empty string when it is non-zero. +TEST(GetLastErrnoDescription, GetLastErrnoDescriptionWorks) { + errno = ENOENT; + EXPECT_STRNE("", GetLastErrnoDescription().c_str()); + errno = 0; + EXPECT_STREQ("", GetLastErrnoDescription().c_str()); +} + +#if GTEST_OS_WINDOWS +TEST(AutoHandleTest, AutoHandleWorks) { + HANDLE handle = ::CreateEvent(NULL, FALSE, FALSE, NULL); + ASSERT_NE(INVALID_HANDLE_VALUE, handle); + + // Tests that the AutoHandle is correctly initialized with a handle. + testing::internal::AutoHandle auto_handle(handle); + EXPECT_EQ(handle, auto_handle.Get()); + + // Tests that Reset assigns INVALID_HANDLE_VALUE. + // Note that this cannot verify whether the original handle is closed. + auto_handle.Reset(); + EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle.Get()); + + // Tests that Reset assigns the new handle. + // Note that this cannot verify whether the original handle is closed. + handle = ::CreateEvent(NULL, FALSE, FALSE, NULL); + ASSERT_NE(INVALID_HANDLE_VALUE, handle); + auto_handle.Reset(handle); + EXPECT_EQ(handle, auto_handle.Get()); + + // Tests that AutoHandle contains INVALID_HANDLE_VALUE by default. + testing::internal::AutoHandle auto_handle2; + EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle2.Get()); +} +#endif // GTEST_OS_WINDOWS + +#if GTEST_OS_WINDOWS +typedef unsigned __int64 BiggestParsable; +typedef signed __int64 BiggestSignedParsable; +const BiggestParsable kBiggestParsableMax = ULLONG_MAX; +const BiggestParsable kBiggestSignedParsableMax = LLONG_MAX; +#else +typedef unsigned long long BiggestParsable; +typedef signed long long BiggestSignedParsable; +const BiggestParsable kBiggestParsableMax = + ::std::numeric_limits::max(); +const BiggestSignedParsable kBiggestSignedParsableMax = + ::std::numeric_limits::max(); +#endif // GTEST_OS_WINDOWS + +TEST(ParseNaturalNumberTest, RejectsInvalidFormat) { + BiggestParsable result = 0; + + // Rejects non-numbers. + EXPECT_FALSE(ParseNaturalNumber(String("non-number string"), &result)); + + // Rejects numbers with whitespace prefix. + EXPECT_FALSE(ParseNaturalNumber(String(" 123"), &result)); + + // Rejects negative numbers. + EXPECT_FALSE(ParseNaturalNumber(String("-123"), &result)); + + // Rejects numbers starting with a plus sign. + EXPECT_FALSE(ParseNaturalNumber(String("+123"), &result)); + errno = 0; +} + +TEST(ParseNaturalNumberTest, RejectsOverflownNumbers) { + BiggestParsable result = 0; + + EXPECT_FALSE(ParseNaturalNumber(String("99999999999999999999999"), &result)); + + signed char char_result = 0; + EXPECT_FALSE(ParseNaturalNumber(String("200"), &char_result)); + errno = 0; +} + +TEST(ParseNaturalNumberTest, AcceptsValidNumbers) { + BiggestParsable result = 0; + + result = 0; + ASSERT_TRUE(ParseNaturalNumber(String("123"), &result)); + EXPECT_EQ(123U, result); + + // Check 0 as an edge case. + result = 1; + ASSERT_TRUE(ParseNaturalNumber(String("0"), &result)); + EXPECT_EQ(0U, result); + + result = 1; + ASSERT_TRUE(ParseNaturalNumber(String("00000"), &result)); + EXPECT_EQ(0U, result); +} + +TEST(ParseNaturalNumberTest, AcceptsTypeLimits) { + Message msg; + msg << kBiggestParsableMax; + + BiggestParsable result = 0; + EXPECT_TRUE(ParseNaturalNumber(msg.GetString(), &result)); + EXPECT_EQ(kBiggestParsableMax, result); + + Message msg2; + msg2 << kBiggestSignedParsableMax; + + BiggestSignedParsable signed_result = 0; + EXPECT_TRUE(ParseNaturalNumber(msg2.GetString(), &signed_result)); + EXPECT_EQ(kBiggestSignedParsableMax, signed_result); + + Message msg3; + msg3 << INT_MAX; + + int int_result = 0; + EXPECT_TRUE(ParseNaturalNumber(msg3.GetString(), &int_result)); + EXPECT_EQ(INT_MAX, int_result); + + Message msg4; + msg4 << UINT_MAX; + + unsigned int uint_result = 0; + EXPECT_TRUE(ParseNaturalNumber(msg4.GetString(), &uint_result)); + EXPECT_EQ(UINT_MAX, uint_result); +} + +TEST(ParseNaturalNumberTest, WorksForShorterIntegers) { + short short_result = 0; + ASSERT_TRUE(ParseNaturalNumber(String("123"), &short_result)); + EXPECT_EQ(123, short_result); + + signed char char_result = 0; + ASSERT_TRUE(ParseNaturalNumber(String("123"), &char_result)); + EXPECT_EQ(123, char_result); +} + +#if GTEST_OS_WINDOWS +TEST(EnvironmentTest, HandleFitsIntoSizeT) { + // TODO(vladl@google.com): Remove this test after this condition is verified + // in a static assertion in gtest-death-test.cc in the function + // GetStatusFileDescriptor. + ASSERT_TRUE(sizeof(HANDLE) <= sizeof(size_t)); +} +#endif // GTEST_OS_WINDOWS + +// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger +// failures when death tests are available on the system. +TEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) { + EXPECT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestExpectMacro"), + "death inside CondDeathTestExpectMacro"); + ASSERT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestAssertMacro"), + "death inside CondDeathTestAssertMacro"); + + // Empty statement will not crash, which must trigger a failure. + EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, ""), ""); + EXPECT_FATAL_FAILURE(ASSERT_DEATH_IF_SUPPORTED(;, ""), ""); +} + +#else + +using testing::internal::CaptureStderr; +using testing::internal::GetCapturedStderr; +using testing::internal::String; + +// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED are still +// defined but do not trigger failures when death tests are not available on +// the system. +TEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) { + // Empty statement will not crash, but that should not trigger a failure + // when death tests are not supported. + CaptureStderr(); + EXPECT_DEATH_IF_SUPPORTED(;, ""); + String output = GetCapturedStderr(); + ASSERT_TRUE(NULL != strstr(output.c_str(), + "Death tests are not supported on this platform")); + ASSERT_TRUE(NULL != strstr(output.c_str(), ";")); + + // The streamed message should not be printed as there is no test failure. + CaptureStderr(); + EXPECT_DEATH_IF_SUPPORTED(;, "") << "streamed message"; + output = GetCapturedStderr(); + ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message")); + + CaptureStderr(); + ASSERT_DEATH_IF_SUPPORTED(;, ""); // NOLINT + output = GetCapturedStderr(); + ASSERT_TRUE(NULL != strstr(output.c_str(), + "Death tests are not supported on this platform")); + ASSERT_TRUE(NULL != strstr(output.c_str(), ";")); + + CaptureStderr(); + ASSERT_DEATH_IF_SUPPORTED(;, "") << "streamed message"; // NOLINT + output = GetCapturedStderr(); + ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message")); +} + +void FuncWithAssert(int* n) { + ASSERT_DEATH_IF_SUPPORTED(return;, ""); + (*n)++; +} + +// Tests that ASSERT_DEATH_IF_SUPPORTED does not return from the current +// function (as ASSERT_DEATH does) if death tests are not supported. +TEST(ConditionalDeathMacrosTest, AssertDeatDoesNotReturnhIfUnsupported) { + int n = 0; + FuncWithAssert(&n); + EXPECT_EQ(1, n); +} +#endif // GTEST_HAS_DEATH_TEST + +// Tests that the death test macros expand to code which may or may not +// be followed by operator<<, and that in either case the complete text +// comprises only a single C++ statement. +// +// The syntax should work whether death tests are available or not. +TEST(ConditionalDeathMacrosSyntaxDeathTest, SingleStatement) { + if (AlwaysFalse()) + // This would fail if executed; this is a compilation test only + ASSERT_DEATH_IF_SUPPORTED(return, ""); + + if (AlwaysTrue()) + EXPECT_DEATH_IF_SUPPORTED(_exit(1), ""); + else + // This empty "else" branch is meant to ensure that EXPECT_DEATH + // doesn't expand into an "if" statement without an "else" + ; // NOLINT + + if (AlwaysFalse()) + ASSERT_DEATH_IF_SUPPORTED(return, "") << "did not die"; + + if (AlwaysFalse()) + ; // NOLINT + else + EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << 1 << 2 << 3; +} + +// Tests that conditional death test macros expand to code which interacts +// well with switch statements. +TEST(ConditionalDeathMacrosSyntaxDeathTest, SwitchStatement) { +// Microsoft compiler usually complains about switch statements without +// case labels. We suppress that warning for this test. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4065) +#endif // _MSC_VER + + switch (0) + default: + ASSERT_DEATH_IF_SUPPORTED(_exit(1), "") + << "exit in default switch handler"; + + switch (0) + case 0: + EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << "exit in switch case"; + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER +} + +// Tests that a test case whose name ends with "DeathTest" works fine +// on Windows. +TEST(NotADeathTest, Test) { + SUCCEED(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-filepath_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-filepath_test.cc new file mode 100644 index 00000000..62502827 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-filepath_test.cc @@ -0,0 +1,690 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) +// +// Google Test filepath utilities +// +// This file tests classes and functions used internally by +// Google Test. They are subject to change without notice. +// +// This file is #included from gtest_unittest.cc, to avoid changing +// build or make-files for some existing Google Test clients. Do not +// #include this file anywhere else! + +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_OS_WINDOWS_MOBILE +#include // NOLINT +#elif GTEST_OS_WINDOWS +#include // NOLINT +#endif // GTEST_OS_WINDOWS_MOBILE + +namespace testing { +namespace internal { +namespace { + +#if GTEST_OS_WINDOWS_MOBILE +// TODO(wan@google.com): Move these to the POSIX adapter section in +// gtest-port.h. + +// Windows CE doesn't have the remove C function. +int remove(const char* path) { + LPCWSTR wpath = String::AnsiToUtf16(path); + int ret = DeleteFile(wpath) ? 0 : -1; + delete [] wpath; + return ret; +} +// Windows CE doesn't have the _rmdir C function. +int _rmdir(const char* path) { + FilePath filepath(path); + LPCWSTR wpath = String::AnsiToUtf16( + filepath.RemoveTrailingPathSeparator().c_str()); + int ret = RemoveDirectory(wpath) ? 0 : -1; + delete [] wpath; + return ret; +} + +#else + +TEST(GetCurrentDirTest, ReturnsCurrentDir) { + const FilePath original_dir = FilePath::GetCurrentDir(); + EXPECT_FALSE(original_dir.IsEmpty()); + + posix::ChDir(GTEST_PATH_SEP_); + const FilePath cwd = FilePath::GetCurrentDir(); + posix::ChDir(original_dir.c_str()); + +#if GTEST_OS_WINDOWS + // Skips the ":". + const char* const cwd_without_drive = strchr(cwd.c_str(), ':'); + ASSERT_TRUE(cwd_without_drive != NULL); + EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1); +#else + EXPECT_STREQ(GTEST_PATH_SEP_, cwd.c_str()); +#endif +} + +#endif // GTEST_OS_WINDOWS_MOBILE + +TEST(IsEmptyTest, ReturnsTrueForEmptyPath) { + EXPECT_TRUE(FilePath("").IsEmpty()); + EXPECT_TRUE(FilePath(NULL).IsEmpty()); +} + +TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) { + EXPECT_FALSE(FilePath("a").IsEmpty()); + EXPECT_FALSE(FilePath(".").IsEmpty()); + EXPECT_FALSE(FilePath("a/b").IsEmpty()); + EXPECT_FALSE(FilePath("a\\b\\").IsEmpty()); +} + +// RemoveDirectoryName "" -> "" +TEST(RemoveDirectoryNameTest, WhenEmptyName) { + EXPECT_STREQ("", FilePath("").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName "afile" -> "afile" +TEST(RemoveDirectoryNameTest, ButNoDirectory) { + EXPECT_STREQ("afile", + FilePath("afile").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName "/afile" -> "afile" +TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) { + EXPECT_STREQ("afile", + FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName "adir/" -> "" +TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) { + EXPECT_STREQ("", + FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName "adir/afile" -> "afile" +TEST(RemoveDirectoryNameTest, ShouldGiveFileName) { + EXPECT_STREQ("afile", + FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName "adir/subdir/afile" -> "afile" +TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) { + EXPECT_STREQ("afile", + FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") + .RemoveDirectoryName().c_str()); +} + +#if GTEST_HAS_ALT_PATH_SEP_ + +// Tests that RemoveDirectoryName() works with the alternate separator +// on Windows. + +// RemoveDirectoryName("/afile") -> "afile" +TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) { + EXPECT_STREQ("afile", + FilePath("/afile").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName("adir/") -> "" +TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) { + EXPECT_STREQ("", + FilePath("adir/").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName("adir/afile") -> "afile" +TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) { + EXPECT_STREQ("afile", + FilePath("adir/afile").RemoveDirectoryName().c_str()); +} + +// RemoveDirectoryName("adir/subdir/afile") -> "afile" +TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) { + EXPECT_STREQ("afile", + FilePath("adir/subdir/afile").RemoveDirectoryName().c_str()); +} + +#endif + +// RemoveFileName "" -> "./" +TEST(RemoveFileNameTest, EmptyName) { +#if GTEST_OS_WINDOWS_MOBILE + // On Windows CE, we use the root as the current directory. + EXPECT_STREQ(GTEST_PATH_SEP_, + FilePath("").RemoveFileName().c_str()); +#else + EXPECT_STREQ("." GTEST_PATH_SEP_, + FilePath("").RemoveFileName().c_str()); +#endif +} + +// RemoveFileName "adir/" -> "adir/" +TEST(RemoveFileNameTest, ButNoFile) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_, + FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().c_str()); +} + +// RemoveFileName "adir/afile" -> "adir/" +TEST(RemoveFileNameTest, GivesDirName) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_, + FilePath("adir" GTEST_PATH_SEP_ "afile") + .RemoveFileName().c_str()); +} + +// RemoveFileName "adir/subdir/afile" -> "adir/subdir/" +TEST(RemoveFileNameTest, GivesDirAndSubDirName) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, + FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") + .RemoveFileName().c_str()); +} + +// RemoveFileName "/afile" -> "/" +TEST(RemoveFileNameTest, GivesRootDir) { + EXPECT_STREQ(GTEST_PATH_SEP_, + FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().c_str()); +} + +#if GTEST_HAS_ALT_PATH_SEP_ + +// Tests that RemoveFileName() works with the alternate separator on +// Windows. + +// RemoveFileName("adir/") -> "adir/" +TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_, + FilePath("adir/").RemoveFileName().c_str()); +} + +// RemoveFileName("adir/afile") -> "adir/" +TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_, + FilePath("adir/afile").RemoveFileName().c_str()); +} + +// RemoveFileName("adir/subdir/afile") -> "adir/subdir/" +TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) { + EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, + FilePath("adir/subdir/afile").RemoveFileName().c_str()); +} + +// RemoveFileName("/afile") -> "\" +TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) { + EXPECT_STREQ(GTEST_PATH_SEP_, + FilePath("/afile").RemoveFileName().c_str()); +} + +#endif + +TEST(MakeFileNameTest, GenerateWhenNumberIsZero) { + FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), + 0, "xml"); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); +} + +TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) { + FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), + 12, "xml"); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); +} + +TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) { + FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), + FilePath("bar"), 0, "xml"); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); +} + +TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) { + FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), + FilePath("bar"), 12, "xml"); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); +} + +TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) { + FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), + 0, "xml"); + EXPECT_STREQ("bar.xml", actual.c_str()); +} + +TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) { + FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), + 14, "xml"); + EXPECT_STREQ("bar_14.xml", actual.c_str()); +} + +TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) { + FilePath actual = FilePath::ConcatPaths(FilePath("foo"), + FilePath("bar.xml")); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); +} + +TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) { + FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_), + FilePath("bar.xml")); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); +} + +TEST(ConcatPathsTest, Path1BeingEmpty) { + FilePath actual = FilePath::ConcatPaths(FilePath(""), + FilePath("bar.xml")); + EXPECT_STREQ("bar.xml", actual.c_str()); +} + +TEST(ConcatPathsTest, Path2BeingEmpty) { + FilePath actual = FilePath::ConcatPaths(FilePath("foo"), + FilePath("")); + EXPECT_STREQ("foo" GTEST_PATH_SEP_, actual.c_str()); +} + +TEST(ConcatPathsTest, BothPathBeingEmpty) { + FilePath actual = FilePath::ConcatPaths(FilePath(""), + FilePath("")); + EXPECT_STREQ("", actual.c_str()); +} + +TEST(ConcatPathsTest, Path1ContainsPathSep) { + FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"), + FilePath("foobar.xml")); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml", + actual.c_str()); +} + +TEST(ConcatPathsTest, Path2ContainsPathSep) { + FilePath actual = FilePath::ConcatPaths( + FilePath("foo" GTEST_PATH_SEP_), + FilePath("bar" GTEST_PATH_SEP_ "bar.xml")); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml", + actual.c_str()); +} + +TEST(ConcatPathsTest, Path2EndsWithPathSep) { + FilePath actual = FilePath::ConcatPaths(FilePath("foo"), + FilePath("bar" GTEST_PATH_SEP_)); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.c_str()); +} + +// RemoveTrailingPathSeparator "" -> "" +TEST(RemoveTrailingPathSeparatorTest, EmptyString) { + EXPECT_STREQ("", + FilePath("").RemoveTrailingPathSeparator().c_str()); +} + +// RemoveTrailingPathSeparator "foo" -> "foo" +TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) { + EXPECT_STREQ("foo", + FilePath("foo").RemoveTrailingPathSeparator().c_str()); +} + +// RemoveTrailingPathSeparator "foo/" -> "foo" +TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) { + EXPECT_STREQ( + "foo", + FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().c_str()); +#if GTEST_HAS_ALT_PATH_SEP_ + EXPECT_STREQ("foo", + FilePath("foo/").RemoveTrailingPathSeparator().c_str()); +#endif +} + +// RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/" +TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) { + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", + FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_) + .RemoveTrailingPathSeparator().c_str()); +} + +// RemoveTrailingPathSeparator "foo/bar" -> "foo/bar" +TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) { + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", + FilePath("foo" GTEST_PATH_SEP_ "bar") + .RemoveTrailingPathSeparator().c_str()); +} + +TEST(DirectoryTest, RootDirectoryExists) { +#if GTEST_OS_WINDOWS // We are on Windows. + char current_drive[_MAX_PATH]; // NOLINT + current_drive[0] = static_cast(_getdrive() + 'A' - 1); + current_drive[1] = ':'; + current_drive[2] = '\\'; + current_drive[3] = '\0'; + EXPECT_TRUE(FilePath(current_drive).DirectoryExists()); +#else + EXPECT_TRUE(FilePath("/").DirectoryExists()); +#endif // GTEST_OS_WINDOWS +} + +#if GTEST_OS_WINDOWS +TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) { + const int saved_drive_ = _getdrive(); + // Find a drive that doesn't exist. Start with 'Z' to avoid common ones. + for (char drive = 'Z'; drive >= 'A'; drive--) + if (_chdrive(drive - 'A' + 1) == -1) { + char non_drive[_MAX_PATH]; // NOLINT + non_drive[0] = drive; + non_drive[1] = ':'; + non_drive[2] = '\\'; + non_drive[3] = '\0'; + EXPECT_FALSE(FilePath(non_drive).DirectoryExists()); + break; + } + _chdrive(saved_drive_); +} +#endif // GTEST_OS_WINDOWS + +#if !GTEST_OS_WINDOWS_MOBILE +// Windows CE _does_ consider an empty directory to exist. +TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) { + EXPECT_FALSE(FilePath("").DirectoryExists()); +} +#endif // !GTEST_OS_WINDOWS_MOBILE + +TEST(DirectoryTest, CurrentDirectoryExists) { +#if GTEST_OS_WINDOWS // We are on Windows. +#ifndef _WIN32_CE // Windows CE doesn't have a current directory. + EXPECT_TRUE(FilePath(".").DirectoryExists()); + EXPECT_TRUE(FilePath(".\\").DirectoryExists()); +#endif // _WIN32_CE +#else + EXPECT_TRUE(FilePath(".").DirectoryExists()); + EXPECT_TRUE(FilePath("./").DirectoryExists()); +#endif // GTEST_OS_WINDOWS +} + +TEST(NormalizeTest, NullStringsEqualEmptyDirectory) { + EXPECT_STREQ("", FilePath(NULL).c_str()); + EXPECT_STREQ("", FilePath(String(NULL)).c_str()); +} + +// "foo/bar" == foo//bar" == "foo///bar" +TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) { + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", + FilePath("foo" GTEST_PATH_SEP_ "bar").c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", + FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", + FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ + GTEST_PATH_SEP_ "bar").c_str()); +} + +// "/bar" == //bar" == "///bar" +TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) { + EXPECT_STREQ(GTEST_PATH_SEP_ "bar", + FilePath(GTEST_PATH_SEP_ "bar").c_str()); + EXPECT_STREQ(GTEST_PATH_SEP_ "bar", + FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); + EXPECT_STREQ(GTEST_PATH_SEP_ "bar", + FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); +} + +// "foo/" == foo//" == "foo///" +TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) { + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo" GTEST_PATH_SEP_).c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); +} + +#if GTEST_HAS_ALT_PATH_SEP_ + +// Tests that separators at the end of the string are normalized +// regardless of their combination (e.g. "foo\" =="foo/\" == +// "foo\\/"). +TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) { + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo/").c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo" GTEST_PATH_SEP_ "/").c_str()); + EXPECT_STREQ("foo" GTEST_PATH_SEP_, + FilePath("foo//" GTEST_PATH_SEP_).c_str()); +} + +#endif + +TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) { + FilePath default_path; + FilePath non_default_path("path"); + non_default_path = default_path; + EXPECT_STREQ("", non_default_path.c_str()); + EXPECT_STREQ("", default_path.c_str()); // RHS var is unchanged. +} + +TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) { + FilePath non_default_path("path"); + FilePath default_path; + default_path = non_default_path; + EXPECT_STREQ("path", default_path.c_str()); + EXPECT_STREQ("path", non_default_path.c_str()); // RHS var is unchanged. +} + +TEST(AssignmentOperatorTest, ConstAssignedToNonConst) { + const FilePath const_default_path("const_path"); + FilePath non_default_path("path"); + non_default_path = const_default_path; + EXPECT_STREQ("const_path", non_default_path.c_str()); +} + +class DirectoryCreationTest : public Test { + protected: + virtual void SetUp() { + testdata_path_.Set(FilePath(String::Format("%s%s%s", + TempDir().c_str(), GetCurrentExecutableName().c_str(), + "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_))); + testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator()); + + unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), + 0, "txt")); + unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), + 1, "txt")); + + remove(testdata_file_.c_str()); + remove(unique_file0_.c_str()); + remove(unique_file1_.c_str()); + posix::RmDir(testdata_path_.c_str()); + } + + virtual void TearDown() { + remove(testdata_file_.c_str()); + remove(unique_file0_.c_str()); + remove(unique_file1_.c_str()); + posix::RmDir(testdata_path_.c_str()); + } + + String TempDir() const { +#if GTEST_OS_WINDOWS_MOBILE + return String("\\temp\\"); +#elif GTEST_OS_WINDOWS + const char* temp_dir = posix::GetEnv("TEMP"); + if (temp_dir == NULL || temp_dir[0] == '\0') + return String("\\temp\\"); + else if (String(temp_dir).EndsWith("\\")) + return String(temp_dir); + else + return String::Format("%s\\", temp_dir); +#else + return String("/tmp/"); +#endif // GTEST_OS_WINDOWS_MOBILE + } + + void CreateTextFile(const char* filename) { + FILE* f = posix::FOpen(filename, "w"); + fprintf(f, "text\n"); + fclose(f); + } + + // Strings representing a directory and a file, with identical paths + // except for the trailing separator character that distinquishes + // a directory named 'test' from a file named 'test'. Example names: + FilePath testdata_path_; // "/tmp/directory_creation/test/" + FilePath testdata_file_; // "/tmp/directory_creation/test" + FilePath unique_file0_; // "/tmp/directory_creation/test/unique.txt" + FilePath unique_file1_; // "/tmp/directory_creation/test/unique_1.txt" +}; + +TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) { + EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); + EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); + EXPECT_TRUE(testdata_path_.DirectoryExists()); +} + +TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) { + EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); + EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); + // Call 'create' again... should still succeed. + EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); +} + +TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) { + FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_, + FilePath("unique"), "txt")); + EXPECT_STREQ(unique_file0_.c_str(), file_path.c_str()); + EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file not there + + testdata_path_.CreateDirectoriesRecursively(); + EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file still not there + CreateTextFile(file_path.c_str()); + EXPECT_TRUE(file_path.FileOrDirectoryExists()); + + FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_, + FilePath("unique"), "txt")); + EXPECT_STREQ(unique_file1_.c_str(), file_path2.c_str()); + EXPECT_FALSE(file_path2.FileOrDirectoryExists()); // file not there + CreateTextFile(file_path2.c_str()); + EXPECT_TRUE(file_path2.FileOrDirectoryExists()); +} + +TEST_F(DirectoryCreationTest, CreateDirectoriesFail) { + // force a failure by putting a file where we will try to create a directory. + CreateTextFile(testdata_file_.c_str()); + EXPECT_TRUE(testdata_file_.FileOrDirectoryExists()); + EXPECT_FALSE(testdata_file_.DirectoryExists()); + EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively()); +} + +TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) { + const FilePath test_detail_xml("test_detail.xml"); + EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively()); +} + +TEST(FilePathTest, DefaultConstructor) { + FilePath fp; + EXPECT_STREQ("", fp.c_str()); +} + +TEST(FilePathTest, CharAndCopyConstructors) { + const FilePath fp("spicy"); + EXPECT_STREQ("spicy", fp.c_str()); + + const FilePath fp_copy(fp); + EXPECT_STREQ("spicy", fp_copy.c_str()); +} + +TEST(FilePathTest, StringConstructor) { + const FilePath fp(String("cider")); + EXPECT_STREQ("cider", fp.c_str()); +} + +TEST(FilePathTest, Set) { + const FilePath apple("apple"); + FilePath mac("mac"); + mac.Set(apple); // Implement Set() since overloading operator= is forbidden. + EXPECT_STREQ("apple", mac.c_str()); + EXPECT_STREQ("apple", apple.c_str()); +} + +TEST(FilePathTest, ToString) { + const FilePath file("drink"); + String str(file.ToString()); + EXPECT_STREQ("drink", str.c_str()); +} + +TEST(FilePathTest, RemoveExtension) { + EXPECT_STREQ("app", FilePath("app.exe").RemoveExtension("exe").c_str()); + EXPECT_STREQ("APP", FilePath("APP.EXE").RemoveExtension("exe").c_str()); +} + +TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) { + EXPECT_STREQ("app", FilePath("app").RemoveExtension("exe").c_str()); +} + +TEST(FilePathTest, IsDirectory) { + EXPECT_FALSE(FilePath("cola").IsDirectory()); + EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory()); +#if GTEST_HAS_ALT_PATH_SEP_ + EXPECT_TRUE(FilePath("koala/").IsDirectory()); +#endif +} + +TEST(FilePathTest, IsAbsolutePath) { + EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); + EXPECT_FALSE(FilePath("").IsAbsolutePath()); +#if GTEST_OS_WINDOWS + EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not" + GTEST_PATH_SEP_ "relative").IsAbsolutePath()); + EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath()); + EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not" + GTEST_PATH_SEP_ "relative").IsAbsolutePath()); +#else + EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative") + .IsAbsolutePath()); +#endif // GTEST_OS_WINDOWS +} + +TEST(FilePathTest, IsRootDirectory) { +#if GTEST_OS_WINDOWS + EXPECT_TRUE(FilePath("a:\\").IsRootDirectory()); + EXPECT_TRUE(FilePath("Z:/").IsRootDirectory()); + EXPECT_TRUE(FilePath("e://").IsRootDirectory()); + EXPECT_FALSE(FilePath("").IsRootDirectory()); + EXPECT_FALSE(FilePath("b:").IsRootDirectory()); + EXPECT_FALSE(FilePath("b:a").IsRootDirectory()); + EXPECT_FALSE(FilePath("8:/").IsRootDirectory()); + EXPECT_FALSE(FilePath("c|/").IsRootDirectory()); +#else + EXPECT_TRUE(FilePath("/").IsRootDirectory()); + EXPECT_TRUE(FilePath("//").IsRootDirectory()); + EXPECT_FALSE(FilePath("").IsRootDirectory()); + EXPECT_FALSE(FilePath("\\").IsRootDirectory()); + EXPECT_FALSE(FilePath("/x").IsRootDirectory()); +#endif +} + +} // namespace +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-linked_ptr_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-linked_ptr_test.cc new file mode 100644 index 00000000..eae82296 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-linked_ptr_test.cc @@ -0,0 +1,154 @@ +// Copyright 2003, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: Dan Egnor (egnor@google.com) +// Ported to Windows: Vadim Berman (vadimb@google.com) + +#include + +#include +#include + +namespace { + +using testing::Message; +using testing::internal::linked_ptr; + +int num; +Message* history = NULL; + +// Class which tracks allocation/deallocation +class A { + public: + A(): mynum(num++) { *history << "A" << mynum << " ctor\n"; } + virtual ~A() { *history << "A" << mynum << " dtor\n"; } + virtual void Use() { *history << "A" << mynum << " use\n"; } + protected: + int mynum; +}; + +// Subclass +class B : public A { + public: + B() { *history << "B" << mynum << " ctor\n"; } + ~B() { *history << "B" << mynum << " dtor\n"; } + virtual void Use() { *history << "B" << mynum << " use\n"; } +}; + +class LinkedPtrTest : public testing::Test { + public: + LinkedPtrTest() { + num = 0; + history = new Message; + } + + virtual ~LinkedPtrTest() { + delete history; + history = NULL; + } +}; + +TEST_F(LinkedPtrTest, GeneralTest) { + { + linked_ptr a0, a1, a2; + a0 = a0; + a1 = a2; + ASSERT_EQ(a0.get(), static_cast(NULL)); + ASSERT_EQ(a1.get(), static_cast(NULL)); + ASSERT_EQ(a2.get(), static_cast(NULL)); + ASSERT_TRUE(a0 == NULL); + ASSERT_TRUE(a1 == NULL); + ASSERT_TRUE(a2 == NULL); + + { + linked_ptr a3(new A); + a0 = a3; + ASSERT_TRUE(a0 == a3); + ASSERT_TRUE(a0 != NULL); + ASSERT_TRUE(a0.get() == a3); + ASSERT_TRUE(a0 == a3.get()); + linked_ptr a4(a0); + a1 = a4; + linked_ptr a5(new A); + ASSERT_TRUE(a5.get() != a3); + ASSERT_TRUE(a5 != a3.get()); + a2 = a5; + linked_ptr b0(new B); + linked_ptr a6(b0); + ASSERT_TRUE(b0 == a6); + ASSERT_TRUE(a6 == b0); + ASSERT_TRUE(b0 != NULL); + a5 = b0; + a5 = b0; + a3->Use(); + a4->Use(); + a5->Use(); + a6->Use(); + b0->Use(); + (*b0).Use(); + b0.get()->Use(); + } + + a0->Use(); + a1->Use(); + a2->Use(); + + a1 = a2; + a2.reset(new A); + a0.reset(); + + linked_ptr a7; + } + + ASSERT_STREQ( + "A0 ctor\n" + "A1 ctor\n" + "A2 ctor\n" + "B2 ctor\n" + "A0 use\n" + "A0 use\n" + "B2 use\n" + "B2 use\n" + "B2 use\n" + "B2 use\n" + "B2 use\n" + "B2 dtor\n" + "A2 dtor\n" + "A0 use\n" + "A0 use\n" + "A1 use\n" + "A3 ctor\n" + "A0 dtor\n" + "A3 dtor\n" + "A1 dtor\n", + history->GetString().c_str() + ); +} + +} // Unnamed namespace diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-listener_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-listener_test.cc new file mode 100644 index 00000000..c9be39a8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-listener_test.cc @@ -0,0 +1,313 @@ +// Copyright 2009 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) +// +// The Google C++ Testing Framework (Google Test) +// +// This file verifies Google Test event listeners receive events at the +// right times. + +#include +#include + +using ::testing::AddGlobalTestEnvironment; +using ::testing::Environment; +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; +using ::testing::TestEventListener; +using ::testing::TestInfo; +using ::testing::TestPartResult; +using ::testing::UnitTest; +using ::testing::internal::String; + +// Used by tests to register their events. +std::vector* g_events = NULL; + +namespace testing { +namespace internal { + +class EventRecordingListener : public TestEventListener { + public: + EventRecordingListener(const char* name) : name_(name) {} + + protected: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnTestProgramStart")); + } + + virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, + int iteration) { + Message message; + message << GetFullMethodName("OnTestIterationStart") + << "(" << iteration << ")"; + g_events->push_back(message.GetString()); + } + + virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart")); + } + + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd")); + } + + virtual void OnTestCaseStart(const TestCase& /*test_case*/) { + g_events->push_back(GetFullMethodName("OnTestCaseStart")); + } + + virtual void OnTestStart(const TestInfo& /*test_info*/) { + g_events->push_back(GetFullMethodName("OnTestStart")); + } + + virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) { + g_events->push_back(GetFullMethodName("OnTestPartResult")); + } + + virtual void OnTestEnd(const TestInfo& /*test_info*/) { + g_events->push_back(GetFullMethodName("OnTestEnd")); + } + + virtual void OnTestCaseEnd(const TestCase& /*test_case*/) { + g_events->push_back(GetFullMethodName("OnTestCaseEnd")); + } + + virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart")); + } + + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd")); + } + + virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int iteration) { + Message message; + message << GetFullMethodName("OnTestIterationEnd") + << "(" << iteration << ")"; + g_events->push_back(message.GetString()); + } + + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { + g_events->push_back(GetFullMethodName("OnTestProgramEnd")); + } + + private: + String GetFullMethodName(const char* name) { + Message message; + message << name_ << "." << name; + return message.GetString(); + } + + String name_; +}; + +class EnvironmentInvocationCatcher : public Environment { + protected: + virtual void SetUp() { + g_events->push_back(String("Environment::SetUp")); + } + + virtual void TearDown() { + g_events->push_back(String("Environment::TearDown")); + } +}; + +class ListenerTest : public Test { + protected: + static void SetUpTestCase() { + g_events->push_back(String("ListenerTest::SetUpTestCase")); + } + + static void TearDownTestCase() { + g_events->push_back(String("ListenerTest::TearDownTestCase")); + } + + virtual void SetUp() { + g_events->push_back(String("ListenerTest::SetUp")); + } + + virtual void TearDown() { + g_events->push_back(String("ListenerTest::TearDown")); + } +}; + +TEST_F(ListenerTest, DoesFoo) { + // Test execution order within a test case is not guaranteed so we are not + // recording the test name. + g_events->push_back(String("ListenerTest::* Test Body")); + SUCCEED(); // Triggers OnTestPartResult. +} + +TEST_F(ListenerTest, DoesBar) { + g_events->push_back(String("ListenerTest::* Test Body")); + SUCCEED(); // Triggers OnTestPartResult. +} + +} // namespace internal + +} // namespace testing + +using ::testing::internal::EnvironmentInvocationCatcher; +using ::testing::internal::EventRecordingListener; + +void VerifyResults(const std::vector& data, + const char* const* expected_data, + int expected_data_size) { + const int actual_size = data.size(); + // If the following assertion fails, a new entry will be appended to + // data. Hence we save data.size() first. + EXPECT_EQ(expected_data_size, actual_size); + + // Compares the common prefix. + const int shorter_size = expected_data_size <= actual_size ? + expected_data_size : actual_size; + int i = 0; + for (; i < shorter_size; ++i) { + ASSERT_STREQ(expected_data[i], data[i].c_str()) + << "at position " << i; + } + + // Prints extra elements in the actual data. + for (; i < actual_size; ++i) { + printf(" Actual event #%d: %s\n", i, data[i].c_str()); + } +} + +int main(int argc, char **argv) { + std::vector events; + g_events = &events; + InitGoogleTest(&argc, argv); + + UnitTest::GetInstance()->listeners().Append( + new EventRecordingListener("1st")); + UnitTest::GetInstance()->listeners().Append( + new EventRecordingListener("2nd")); + + AddGlobalTestEnvironment(new EnvironmentInvocationCatcher); + + GTEST_CHECK_(events.size() == 0) + << "AddGlobalTestEnvironment should not generate any events itself."; + + ::testing::GTEST_FLAG(repeat) = 2; + int ret_val = RUN_ALL_TESTS(); + + const char* const expected_events[] = { + "1st.OnTestProgramStart", + "2nd.OnTestProgramStart", + "1st.OnTestIterationStart(0)", + "2nd.OnTestIterationStart(0)", + "1st.OnEnvironmentsSetUpStart", + "2nd.OnEnvironmentsSetUpStart", + "Environment::SetUp", + "2nd.OnEnvironmentsSetUpEnd", + "1st.OnEnvironmentsSetUpEnd", + "1st.OnTestCaseStart", + "2nd.OnTestCaseStart", + "ListenerTest::SetUpTestCase", + "1st.OnTestStart", + "2nd.OnTestStart", + "ListenerTest::SetUp", + "ListenerTest::* Test Body", + "1st.OnTestPartResult", + "2nd.OnTestPartResult", + "ListenerTest::TearDown", + "2nd.OnTestEnd", + "1st.OnTestEnd", + "1st.OnTestStart", + "2nd.OnTestStart", + "ListenerTest::SetUp", + "ListenerTest::* Test Body", + "1st.OnTestPartResult", + "2nd.OnTestPartResult", + "ListenerTest::TearDown", + "2nd.OnTestEnd", + "1st.OnTestEnd", + "ListenerTest::TearDownTestCase", + "2nd.OnTestCaseEnd", + "1st.OnTestCaseEnd", + "1st.OnEnvironmentsTearDownStart", + "2nd.OnEnvironmentsTearDownStart", + "Environment::TearDown", + "2nd.OnEnvironmentsTearDownEnd", + "1st.OnEnvironmentsTearDownEnd", + "2nd.OnTestIterationEnd(0)", + "1st.OnTestIterationEnd(0)", + "1st.OnTestIterationStart(1)", + "2nd.OnTestIterationStart(1)", + "1st.OnEnvironmentsSetUpStart", + "2nd.OnEnvironmentsSetUpStart", + "Environment::SetUp", + "2nd.OnEnvironmentsSetUpEnd", + "1st.OnEnvironmentsSetUpEnd", + "1st.OnTestCaseStart", + "2nd.OnTestCaseStart", + "ListenerTest::SetUpTestCase", + "1st.OnTestStart", + "2nd.OnTestStart", + "ListenerTest::SetUp", + "ListenerTest::* Test Body", + "1st.OnTestPartResult", + "2nd.OnTestPartResult", + "ListenerTest::TearDown", + "2nd.OnTestEnd", + "1st.OnTestEnd", + "1st.OnTestStart", + "2nd.OnTestStart", + "ListenerTest::SetUp", + "ListenerTest::* Test Body", + "1st.OnTestPartResult", + "2nd.OnTestPartResult", + "ListenerTest::TearDown", + "2nd.OnTestEnd", + "1st.OnTestEnd", + "ListenerTest::TearDownTestCase", + "2nd.OnTestCaseEnd", + "1st.OnTestCaseEnd", + "1st.OnEnvironmentsTearDownStart", + "2nd.OnEnvironmentsTearDownStart", + "Environment::TearDown", + "2nd.OnEnvironmentsTearDownEnd", + "1st.OnEnvironmentsTearDownEnd", + "2nd.OnTestIterationEnd(1)", + "1st.OnTestIterationEnd(1)", + "2nd.OnTestProgramEnd", + "1st.OnTestProgramEnd" + }; + VerifyResults(events, + expected_events, + sizeof(expected_events)/sizeof(expected_events[0])); + + // We need to check manually for ad hoc test failures that happen after + // RUN_ALL_TESTS finishes. + if (UnitTest::GetInstance()->Failed()) + ret_val = 1; + + return ret_val; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-message_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-message_test.cc new file mode 100644 index 00000000..e42b0344 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-message_test.cc @@ -0,0 +1,167 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Tests for the Message class. + +#include + +#include + +namespace { + +using ::testing::Message; +using ::testing::internal::StrStream; + +// A helper function that turns a Message into a C string. +const char* ToCString(const Message& msg) { + static testing::internal::String result; + result = msg.GetString(); + return result.c_str(); +} + +// Tests the testing::Message class + +// Tests the default constructor. +TEST(MessageTest, DefaultConstructor) { + const Message msg; + EXPECT_STREQ("", ToCString(msg)); +} + +// Tests the copy constructor. +TEST(MessageTest, CopyConstructor) { + const Message msg1("Hello"); + const Message msg2(msg1); + EXPECT_STREQ("Hello", ToCString(msg2)); +} + +// Tests constructing a Message from a C-string. +TEST(MessageTest, ConstructsFromCString) { + Message msg("Hello"); + EXPECT_STREQ("Hello", ToCString(msg)); +} + +// Tests streaming a float. +TEST(MessageTest, StreamsFloat) { + const char* const s = ToCString(Message() << 1.23456F << " " << 2.34567F); + // Both numbers should be printed with enough precision. + EXPECT_PRED_FORMAT2(testing::IsSubstring, "1.234560", s); + EXPECT_PRED_FORMAT2(testing::IsSubstring, " 2.345669", s); +} + +// Tests streaming a double. +TEST(MessageTest, StreamsDouble) { + const char* const s = ToCString(Message() << 1260570880.4555497 << " " + << 1260572265.1954534); + // Both numbers should be printed with enough precision. + EXPECT_PRED_FORMAT2(testing::IsSubstring, "1260570880.45", s); + EXPECT_PRED_FORMAT2(testing::IsSubstring, " 1260572265.19", s); +} + +// Tests streaming a non-char pointer. +TEST(MessageTest, StreamsPointer) { + int n = 0; + int* p = &n; + EXPECT_STRNE("(null)", ToCString(Message() << p)); +} + +// Tests streaming a NULL non-char pointer. +TEST(MessageTest, StreamsNullPointer) { + int* p = NULL; + EXPECT_STREQ("(null)", ToCString(Message() << p)); +} + +// Tests streaming a C string. +TEST(MessageTest, StreamsCString) { + EXPECT_STREQ("Foo", ToCString(Message() << "Foo")); +} + +// Tests streaming a NULL C string. +TEST(MessageTest, StreamsNullCString) { + char* p = NULL; + EXPECT_STREQ("(null)", ToCString(Message() << p)); +} + +// Tests streaming std::string. +TEST(MessageTest, StreamsString) { + const ::std::string str("Hello"); + EXPECT_STREQ("Hello", ToCString(Message() << str)); +} + +// Tests that we can output strings containing embedded NULs. +TEST(MessageTest, StreamsStringWithEmbeddedNUL) { + const char char_array_with_nul[] = + "Here's a NUL\0 and some more string"; + const ::std::string string_with_nul(char_array_with_nul, + sizeof(char_array_with_nul) - 1); + EXPECT_STREQ("Here's a NUL\\0 and some more string", + ToCString(Message() << string_with_nul)); +} + +// Tests streaming a NUL char. +TEST(MessageTest, StreamsNULChar) { + EXPECT_STREQ("\\0", ToCString(Message() << '\0')); +} + +// Tests streaming int. +TEST(MessageTest, StreamsInt) { + EXPECT_STREQ("123", ToCString(Message() << 123)); +} + +// Tests that basic IO manipulators (endl, ends, and flush) can be +// streamed to Message. +TEST(MessageTest, StreamsBasicIoManip) { + EXPECT_STREQ("Line 1.\nA NUL char \\0 in line 2.", + ToCString(Message() << "Line 1." << std::endl + << "A NUL char " << std::ends << std::flush + << " in line 2.")); +} + +// Tests Message::GetString() +TEST(MessageTest, GetString) { + Message msg; + msg << 1 << " lamb"; + EXPECT_STREQ("1 lamb", msg.GetString().c_str()); +} + +// Tests streaming a Message object to an ostream. +TEST(MessageTest, StreamsToOStream) { + Message msg("Hello"); + StrStream ss; + ss << msg; + EXPECT_STREQ("Hello", testing::internal::StrStreamToString(&ss).c_str()); +} + +// Tests that a Message object doesn't take up too much stack space. +TEST(MessageTest, DoesNotTakeUpMuchStackSpace) { + EXPECT_LE(sizeof(Message), 16U); +} + +} // namespace diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-options_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-options_test.cc new file mode 100644 index 00000000..2e2cbc92 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-options_test.cc @@ -0,0 +1,212 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) +// +// Google Test UnitTestOptions tests +// +// This file tests classes and functions used internally by +// Google Test. They are subject to change without notice. +// +// This file is #included from gtest.cc, to avoid changing build or +// make-files on Windows and other platforms. Do not #include this file +// anywhere else! + +#include + +#if GTEST_OS_WINDOWS_MOBILE +#include +#elif GTEST_OS_WINDOWS +#include +#endif // GTEST_OS_WINDOWS_MOBILE + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace testing { +namespace internal { +namespace { + +// Turns the given relative path into an absolute path. +FilePath GetAbsolutePathOf(const FilePath& relative_path) { + return FilePath::ConcatPaths(FilePath::GetCurrentDir(), relative_path); +} + +// Testing UnitTestOptions::GetOutputFormat/GetOutputFile. + +TEST(XmlOutputTest, GetOutputFormatDefault) { + GTEST_FLAG(output) = ""; + EXPECT_STREQ("", UnitTestOptions::GetOutputFormat().c_str()); +} + +TEST(XmlOutputTest, GetOutputFormat) { + GTEST_FLAG(output) = "xml:filename"; + EXPECT_STREQ("xml", UnitTestOptions::GetOutputFormat().c_str()); +} + +TEST(XmlOutputTest, GetOutputFileDefault) { + GTEST_FLAG(output) = ""; + EXPECT_STREQ(GetAbsolutePathOf(FilePath("test_detail.xml")).c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +} + +TEST(XmlOutputTest, GetOutputFileSingleFile) { + GTEST_FLAG(output) = "xml:filename.abc"; + EXPECT_STREQ(GetAbsolutePathOf(FilePath("filename.abc")).c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +} + +TEST(XmlOutputTest, GetOutputFileFromDirectoryPath) { + GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; + const std::string expected_output_file = + GetAbsolutePathOf( + FilePath(std::string("path") + GTEST_PATH_SEP_ + + GetCurrentExecutableName().c_str() + ".xml")).c_str(); + const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); +#if GTEST_OS_WINDOWS + EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); +#else + EXPECT_EQ(expected_output_file, output_file.c_str()); +#endif +} + +TEST(OutputFileHelpersTest, GetCurrentExecutableName) { + const std::string exe_str = GetCurrentExecutableName().c_str(); +#if GTEST_OS_WINDOWS + const bool success = + _strcmpi("gtest-options_test", exe_str.c_str()) == 0 || + _strcmpi("gtest-options-ex_test", exe_str.c_str()) == 0 || + _strcmpi("gtest_all_test", exe_str.c_str()) == 0 || + _strcmpi("gtest_dll_test", exe_str.c_str()) == 0; +#else + // TODO(wan@google.com): remove the hard-coded "lt-" prefix when + // Chandler Carruth's libtool replacement is ready. + const bool success = + exe_str == "gtest-options_test" || + exe_str == "gtest_all_test" || + exe_str == "lt-gtest_all_test" || + exe_str == "gtest_dll_test"; +#endif // GTEST_OS_WINDOWS + if (!success) + FAIL() << "GetCurrentExecutableName() returns " << exe_str; +} + +class XmlOutputChangeDirTest : public Test { + protected: + virtual void SetUp() { + original_working_dir_ = FilePath::GetCurrentDir(); + posix::ChDir(".."); + // This will make the test fail if run from the root directory. + EXPECT_STRNE(original_working_dir_.c_str(), + FilePath::GetCurrentDir().c_str()); + } + + virtual void TearDown() { + posix::ChDir(original_working_dir_.c_str()); + } + + FilePath original_working_dir_; +}; + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefault) { + GTEST_FLAG(output) = ""; + EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_, + FilePath("test_detail.xml")).c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +} + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefaultXML) { + GTEST_FLAG(output) = "xml"; + EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_, + FilePath("test_detail.xml")).c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +} + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativeFile) { + GTEST_FLAG(output) = "xml:filename.abc"; + EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_, + FilePath("filename.abc")).c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +} + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativePath) { + GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; + const std::string expected_output_file = + FilePath::ConcatPaths( + original_working_dir_, + FilePath(std::string("path") + GTEST_PATH_SEP_ + + GetCurrentExecutableName().c_str() + ".xml")).c_str(); + const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); +#if GTEST_OS_WINDOWS + EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); +#else + EXPECT_EQ(expected_output_file, output_file.c_str()); +#endif +} + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsoluteFile) { +#if GTEST_OS_WINDOWS + GTEST_FLAG(output) = "xml:c:\\tmp\\filename.abc"; + EXPECT_STREQ(FilePath("c:\\tmp\\filename.abc").c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +#else + GTEST_FLAG(output) ="xml:/tmp/filename.abc"; + EXPECT_STREQ(FilePath("/tmp/filename.abc").c_str(), + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); +#endif +} + +TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsolutePath) { +#if GTEST_OS_WINDOWS + const std::string path = "c:\\tmp\\"; +#else + const std::string path = "/tmp/"; +#endif + + GTEST_FLAG(output) = "xml:" + path; + const std::string expected_output_file = + path + GetCurrentExecutableName().c_str() + ".xml"; + const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); + +#if GTEST_OS_WINDOWS + EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); +#else + EXPECT_EQ(expected_output_file, output_file.c_str()); +#endif +} + +} // namespace +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test2_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test2_test.cc new file mode 100644 index 00000000..ccb6cfac --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test2_test.cc @@ -0,0 +1,65 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) +// +// Tests for Google Test itself. This verifies that the basic constructs of +// Google Test work. + +#include + +#include "test/gtest-param-test_test.h" + +#if GTEST_HAS_PARAM_TEST + +using ::testing::Values; +using ::testing::internal::ParamGenerator; + +// Tests that generators defined in a different translation unit +// are functional. The test using extern_gen is defined +// in gtest-param-test_test.cc. +ParamGenerator extern_gen = Values(33); + +// Tests that a parameterized test case can be defined in one translation unit +// and instantiated in another. The test is defined in gtest-param-test_test.cc +// and ExternalInstantiationTest fixture class is defined in +// gtest-param-test_test.h. +INSTANTIATE_TEST_CASE_P(MultiplesOf33, + ExternalInstantiationTest, + Values(33, 66)); + +// Tests that a parameterized test case can be instantiated +// in multiple translation units. Another instantiation is defined +// in gtest-param-test_test.cc and InstantiationInMultipleTranslaionUnitsTest +// fixture is defined in gtest-param-test_test.h +INSTANTIATE_TEST_CASE_P(Sequence2, + InstantiationInMultipleTranslaionUnitsTest, + Values(42*3, 42*4, 42*5)); + +#endif // GTEST_HAS_PARAM_TEST diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.cc new file mode 100644 index 00000000..d0a0e735 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.cc @@ -0,0 +1,835 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) +// +// Tests for Google Test itself. This file verifies that the parameter +// generators objects produce correct parameter sequences and that +// Google Test runtime instantiates correct tests from those sequences. + +#include + +#if GTEST_HAS_PARAM_TEST + +#include +#include +#include +#include +#include +#include + +// To include gtest-internal-inl.h. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" // for UnitTestOptions +#undef GTEST_IMPLEMENTATION_ + +#include "test/gtest-param-test_test.h" + +using ::std::vector; +using ::std::sort; + +using ::testing::AddGlobalTestEnvironment; +using ::testing::Bool; +using ::testing::Message; +using ::testing::Range; +using ::testing::TestWithParam; +using ::testing::Values; +using ::testing::ValuesIn; + +#if GTEST_HAS_COMBINE +using ::testing::Combine; +using ::std::tr1::get; +using ::std::tr1::make_tuple; +using ::std::tr1::tuple; +#endif // GTEST_HAS_COMBINE + +using ::testing::internal::ParamGenerator; +using ::testing::internal::UnitTestOptions; + +// Prints a value to a string. +// +// TODO(wan@google.com): remove PrintValue() when we move matchers and +// EXPECT_THAT() from Google Mock to Google Test. At that time, we +// can write EXPECT_THAT(x, Eq(y)) to compare two tuples x and y, as +// EXPECT_THAT() and the matchers know how to print tuples. +template +::std::string PrintValue(const T& value) { + ::std::stringstream stream; + stream << value; + return stream.str(); +} + +#if GTEST_HAS_COMBINE + +// These overloads allow printing tuples in our tests. We cannot +// define an operator<< for tuples, as that definition needs to be in +// the std namespace in order to be picked up by Google Test via +// Argument-Dependent Lookup, yet defining anything in the std +// namespace in non-STL code is undefined behavior. + +template +::std::string PrintValue(const tuple& value) { + ::std::stringstream stream; + stream << "(" << get<0>(value) << ", " << get<1>(value) << ")"; + return stream.str(); +} + +template +::std::string PrintValue(const tuple& value) { + ::std::stringstream stream; + stream << "(" << get<0>(value) << ", " << get<1>(value) + << ", "<< get<2>(value) << ")"; + return stream.str(); +} + +template +::std::string PrintValue( + const tuple& value) { + ::std::stringstream stream; + stream << "(" << get<0>(value) << ", " << get<1>(value) + << ", "<< get<2>(value) << ", " << get<3>(value) + << ", "<< get<4>(value) << ", " << get<5>(value) + << ", "<< get<6>(value) << ", " << get<7>(value) + << ", "<< get<8>(value) << ", " << get<9>(value) << ")"; + return stream.str(); +} + +#endif // GTEST_HAS_COMBINE + +// Verifies that a sequence generated by the generator and accessed +// via the iterator object matches the expected one using Google Test +// assertions. +template +void VerifyGenerator(const ParamGenerator& generator, + const T (&expected_values)[N]) { + typename ParamGenerator::iterator it = generator.begin(); + for (size_t i = 0; i < N; ++i) { + ASSERT_FALSE(it == generator.end()) + << "At element " << i << " when accessing via an iterator " + << "created with the copy constructor.\n"; + // We cannot use EXPECT_EQ() here as the values may be tuples, + // which don't support <<. + EXPECT_TRUE(expected_values[i] == *it) + << "where i is " << i + << ", expected_values[i] is " << PrintValue(expected_values[i]) + << ", *it is " << PrintValue(*it) + << ", and 'it' is an iterator created with the copy constructor.\n"; + it++; + } + EXPECT_TRUE(it == generator.end()) + << "At the presumed end of sequence when accessing via an iterator " + << "created with the copy constructor.\n"; + + // Test the iterator assignment. The following lines verify that + // the sequence accessed via an iterator initialized via the + // assignment operator (as opposed to a copy constructor) matches + // just the same. + it = generator.begin(); + for (size_t i = 0; i < N; ++i) { + ASSERT_FALSE(it == generator.end()) + << "At element " << i << " when accessing via an iterator " + << "created with the assignment operator.\n"; + EXPECT_TRUE(expected_values[i] == *it) + << "where i is " << i + << ", expected_values[i] is " << PrintValue(expected_values[i]) + << ", *it is " << PrintValue(*it) + << ", and 'it' is an iterator created with the copy constructor.\n"; + it++; + } + EXPECT_TRUE(it == generator.end()) + << "At the presumed end of sequence when accessing via an iterator " + << "created with the assignment operator.\n"; +} + +template +void VerifyGeneratorIsEmpty(const ParamGenerator& generator) { + typename ParamGenerator::iterator it = generator.begin(); + EXPECT_TRUE(it == generator.end()); + + it = generator.begin(); + EXPECT_TRUE(it == generator.end()); +} + +// Generator tests. They test that each of the provided generator functions +// generates an expected sequence of values. The general test pattern +// instantiates a generator using one of the generator functions, +// checks the sequence produced by the generator using its iterator API, +// and then resets the iterator back to the beginning of the sequence +// and checks the sequence again. + +// Tests that iterators produced by generator functions conform to the +// ForwardIterator concept. +TEST(IteratorTest, ParamIteratorConformsToForwardIteratorConcept) { + const ParamGenerator gen = Range(0, 10); + ParamGenerator::iterator it = gen.begin(); + + // Verifies that iterator initialization works as expected. + ParamGenerator::iterator it2 = it; + EXPECT_TRUE(*it == *it2) << "Initialized iterators must point to the " + << "element same as its source points to"; + + // Verifies that iterator assignment works as expected. + it++; + EXPECT_FALSE(*it == *it2); + it2 = it; + EXPECT_TRUE(*it == *it2) << "Assigned iterators must point to the " + << "element same as its source points to"; + + // Verifies that prefix operator++() returns *this. + EXPECT_EQ(&it, &(++it)) << "Result of the prefix operator++ must be " + << "refer to the original object"; + + // Verifies that the result of the postfix operator++ points to the value + // pointed to by the original iterator. + int original_value = *it; // Have to compute it outside of macro call to be + // unaffected by the parameter evaluation order. + EXPECT_EQ(original_value, *(it++)); + + // Verifies that prefix and postfix operator++() advance an iterator + // all the same. + it2 = it; + it++; + ++it2; + EXPECT_TRUE(*it == *it2); +} + +// Tests that Range() generates the expected sequence. +TEST(RangeTest, IntRangeWithDefaultStep) { + const ParamGenerator gen = Range(0, 3); + const int expected_values[] = {0, 1, 2}; + VerifyGenerator(gen, expected_values); +} + +// Edge case. Tests that Range() generates the single element sequence +// as expected when provided with range limits that are equal. +TEST(RangeTest, IntRangeSingleValue) { + const ParamGenerator gen = Range(0, 1); + const int expected_values[] = {0}; + VerifyGenerator(gen, expected_values); +} + +// Edge case. Tests that Range() with generates empty sequence when +// supplied with an empty range. +TEST(RangeTest, IntRangeEmpty) { + const ParamGenerator gen = Range(0, 0); + VerifyGeneratorIsEmpty(gen); +} + +// Tests that Range() with custom step (greater then one) generates +// the expected sequence. +TEST(RangeTest, IntRangeWithCustomStep) { + const ParamGenerator gen = Range(0, 9, 3); + const int expected_values[] = {0, 3, 6}; + VerifyGenerator(gen, expected_values); +} + +// Tests that Range() with custom step (greater then one) generates +// the expected sequence when the last element does not fall on the +// upper range limit. Sequences generated by Range() must not have +// elements beyond the range limits. +TEST(RangeTest, IntRangeWithCustomStepOverUpperBound) { + const ParamGenerator gen = Range(0, 4, 3); + const int expected_values[] = {0, 3}; + VerifyGenerator(gen, expected_values); +} + +// Verifies that Range works with user-defined types that define +// copy constructor, operator=(), operator+(), and operator<(). +class DogAdder { + public: + explicit DogAdder(const char* a_value) : value_(a_value) {} + DogAdder(const DogAdder& other) : value_(other.value_.c_str()) {} + + DogAdder operator=(const DogAdder& other) { + if (this != &other) + value_ = other.value_; + return *this; + } + DogAdder operator+(const DogAdder& other) const { + Message msg; + msg << value_.c_str() << other.value_.c_str(); + return DogAdder(msg.GetString().c_str()); + } + bool operator<(const DogAdder& other) const { + return value_ < other.value_; + } + const ::testing::internal::String& value() const { return value_; } + + private: + ::testing::internal::String value_; +}; + +TEST(RangeTest, WorksWithACustomType) { + const ParamGenerator gen = + Range(DogAdder("cat"), DogAdder("catdogdog"), DogAdder("dog")); + ParamGenerator::iterator it = gen.begin(); + + ASSERT_FALSE(it == gen.end()); + EXPECT_STREQ("cat", it->value().c_str()); + + ASSERT_FALSE(++it == gen.end()); + EXPECT_STREQ("catdog", it->value().c_str()); + + EXPECT_TRUE(++it == gen.end()); +} + +class IntWrapper { + public: + explicit IntWrapper(int a_value) : value_(a_value) {} + IntWrapper(const IntWrapper& other) : value_(other.value_) {} + + IntWrapper operator=(const IntWrapper& other) { + value_ = other.value_; + return *this; + } + // operator+() adds a different type. + IntWrapper operator+(int other) const { return IntWrapper(value_ + other); } + bool operator<(const IntWrapper& other) const { + return value_ < other.value_; + } + int value() const { return value_; } + + private: + int value_; +}; + +TEST(RangeTest, WorksWithACustomTypeWithDifferentIncrementType) { + const ParamGenerator gen = Range(IntWrapper(0), IntWrapper(2)); + ParamGenerator::iterator it = gen.begin(); + + ASSERT_FALSE(it == gen.end()); + EXPECT_EQ(0, it->value()); + + ASSERT_FALSE(++it == gen.end()); + EXPECT_EQ(1, it->value()); + + EXPECT_TRUE(++it == gen.end()); +} + +// Tests that ValuesIn() with an array parameter generates +// the expected sequence. +TEST(ValuesInTest, ValuesInArray) { + int array[] = {3, 5, 8}; + const ParamGenerator gen = ValuesIn(array); + VerifyGenerator(gen, array); +} + +// Tests that ValuesIn() with a const array parameter generates +// the expected sequence. +TEST(ValuesInTest, ValuesInConstArray) { + const int array[] = {3, 5, 8}; + const ParamGenerator gen = ValuesIn(array); + VerifyGenerator(gen, array); +} + +// Edge case. Tests that ValuesIn() with an array parameter containing a +// single element generates the single element sequence. +TEST(ValuesInTest, ValuesInSingleElementArray) { + int array[] = {42}; + const ParamGenerator gen = ValuesIn(array); + VerifyGenerator(gen, array); +} + +// Tests that ValuesIn() generates the expected sequence for an STL +// container (vector). +TEST(ValuesInTest, ValuesInVector) { + typedef ::std::vector ContainerType; + ContainerType values; + values.push_back(3); + values.push_back(5); + values.push_back(8); + const ParamGenerator gen = ValuesIn(values); + + const int expected_values[] = {3, 5, 8}; + VerifyGenerator(gen, expected_values); +} + +// Tests that ValuesIn() generates the expected sequence. +TEST(ValuesInTest, ValuesInIteratorRange) { + typedef ::std::vector ContainerType; + ContainerType values; + values.push_back(3); + values.push_back(5); + values.push_back(8); + const ParamGenerator gen = ValuesIn(values.begin(), values.end()); + + const int expected_values[] = {3, 5, 8}; + VerifyGenerator(gen, expected_values); +} + +// Edge case. Tests that ValuesIn() provided with an iterator range specifying a +// single value generates a single-element sequence. +TEST(ValuesInTest, ValuesInSingleElementIteratorRange) { + typedef ::std::vector ContainerType; + ContainerType values; + values.push_back(42); + const ParamGenerator gen = ValuesIn(values.begin(), values.end()); + + const int expected_values[] = {42}; + VerifyGenerator(gen, expected_values); +} + +// Edge case. Tests that ValuesIn() provided with an empty iterator range +// generates an empty sequence. +TEST(ValuesInTest, ValuesInEmptyIteratorRange) { + typedef ::std::vector ContainerType; + ContainerType values; + const ParamGenerator gen = ValuesIn(values.begin(), values.end()); + + VerifyGeneratorIsEmpty(gen); +} + +// Tests that the Values() generates the expected sequence. +TEST(ValuesTest, ValuesWorks) { + const ParamGenerator gen = Values(3, 5, 8); + + const int expected_values[] = {3, 5, 8}; + VerifyGenerator(gen, expected_values); +} + +// Tests that Values() generates the expected sequences from elements of +// different types convertible to ParamGenerator's parameter type. +TEST(ValuesTest, ValuesWorksForValuesOfCompatibleTypes) { + const ParamGenerator gen = Values(3, 5.0f, 8.0); + + const double expected_values[] = {3.0, 5.0, 8.0}; + VerifyGenerator(gen, expected_values); +} + +TEST(ValuesTest, ValuesWorksForMaxLengthList) { + const ParamGenerator gen = Values( + 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, + 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, + 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, + 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, + 410, 420, 430, 440, 450, 460, 470, 480, 490, 500); + + const int expected_values[] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, + 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, + 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, + 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, + 410, 420, 430, 440, 450, 460, 470, 480, 490, 500}; + VerifyGenerator(gen, expected_values); +} + +// Edge case test. Tests that single-parameter Values() generates the sequence +// with the single value. +TEST(ValuesTest, ValuesWithSingleParameter) { + const ParamGenerator gen = Values(42); + + const int expected_values[] = {42}; + VerifyGenerator(gen, expected_values); +} + +// Tests that Bool() generates sequence (false, true). +TEST(BoolTest, BoolWorks) { + const ParamGenerator gen = Bool(); + + const bool expected_values[] = {false, true}; + VerifyGenerator(gen, expected_values); +} + +#if GTEST_HAS_COMBINE + +// Tests that Combine() with two parameters generates the expected sequence. +TEST(CombineTest, CombineWithTwoParameters) { + const char* foo = "foo"; + const char* bar = "bar"; + const ParamGenerator > gen = + Combine(Values(foo, bar), Values(3, 4)); + + tuple expected_values[] = { + make_tuple(foo, 3), make_tuple(foo, 4), + make_tuple(bar, 3), make_tuple(bar, 4)}; + VerifyGenerator(gen, expected_values); +} + +// Tests that Combine() with three parameters generates the expected sequence. +TEST(CombineTest, CombineWithThreeParameters) { + const ParamGenerator > gen = Combine(Values(0, 1), + Values(3, 4), + Values(5, 6)); + tuple expected_values[] = { + make_tuple(0, 3, 5), make_tuple(0, 3, 6), + make_tuple(0, 4, 5), make_tuple(0, 4, 6), + make_tuple(1, 3, 5), make_tuple(1, 3, 6), + make_tuple(1, 4, 5), make_tuple(1, 4, 6)}; + VerifyGenerator(gen, expected_values); +} + +// Tests that the Combine() with the first parameter generating a single value +// sequence generates a sequence with the number of elements equal to the +// number of elements in the sequence generated by the second parameter. +TEST(CombineTest, CombineWithFirstParameterSingleValue) { + const ParamGenerator > gen = Combine(Values(42), + Values(0, 1)); + + tuple expected_values[] = {make_tuple(42, 0), make_tuple(42, 1)}; + VerifyGenerator(gen, expected_values); +} + +// Tests that the Combine() with the second parameter generating a single value +// sequence generates a sequence with the number of elements equal to the +// number of elements in the sequence generated by the first parameter. +TEST(CombineTest, CombineWithSecondParameterSingleValue) { + const ParamGenerator > gen = Combine(Values(0, 1), + Values(42)); + + tuple expected_values[] = {make_tuple(0, 42), make_tuple(1, 42)}; + VerifyGenerator(gen, expected_values); +} + +// Tests that when the first parameter produces an empty sequence, +// Combine() produces an empty sequence, too. +TEST(CombineTest, CombineWithFirstParameterEmptyRange) { + const ParamGenerator > gen = Combine(Range(0, 0), + Values(0, 1)); + VerifyGeneratorIsEmpty(gen); +} + +// Tests that when the second parameter produces an empty sequence, +// Combine() produces an empty sequence, too. +TEST(CombineTest, CombineWithSecondParameterEmptyRange) { + const ParamGenerator > gen = Combine(Values(0, 1), + Range(1, 1)); + VerifyGeneratorIsEmpty(gen); +} + +// Edge case. Tests that combine works with the maximum number +// of parameters supported by Google Test (currently 10). +TEST(CombineTest, CombineWithMaxNumberOfParameters) { + const char* foo = "foo"; + const char* bar = "bar"; + const ParamGenerator > gen = Combine(Values(foo, bar), + Values(1), Values(2), + Values(3), Values(4), + Values(5), Values(6), + Values(7), Values(8), + Values(9)); + + tuple + expected_values[] = {make_tuple(foo, 1, 2, 3, 4, 5, 6, 7, 8, 9), + make_tuple(bar, 1, 2, 3, 4, 5, 6, 7, 8, 9)}; + VerifyGenerator(gen, expected_values); +} + +#endif // GTEST_HAS_COMBINE + +// Tests that an generator produces correct sequence after being +// assigned from another generator. +TEST(ParamGeneratorTest, AssignmentWorks) { + ParamGenerator gen = Values(1, 2); + const ParamGenerator gen2 = Values(3, 4); + gen = gen2; + + const int expected_values[] = {3, 4}; + VerifyGenerator(gen, expected_values); +} + +// This test verifies that the tests are expanded and run as specified: +// one test per element from the sequence produced by the generator +// specified in INSTANTIATE_TEST_CASE_P. It also verifies that the test's +// fixture constructor, SetUp(), and TearDown() have run and have been +// supplied with the correct parameters. + +// The use of environment object allows detection of the case where no test +// case functionality is run at all. In this case TestCaseTearDown will not +// be able to detect missing tests, naturally. +template +class TestGenerationEnvironment : public ::testing::Environment { + public: + static TestGenerationEnvironment* Instance() { + static TestGenerationEnvironment* instance = new TestGenerationEnvironment; + return instance; + } + + void FixtureConstructorExecuted() { fixture_constructor_count_++; } + void SetUpExecuted() { set_up_count_++; } + void TearDownExecuted() { tear_down_count_++; } + void TestBodyExecuted() { test_body_count_++; } + + virtual void TearDown() { + // If all MultipleTestGenerationTest tests have been de-selected + // by the filter flag, the following checks make no sense. + bool perform_check = false; + + for (int i = 0; i < kExpectedCalls; ++i) { + Message msg; + msg << "TestsExpandedAndRun/" << i; + if (UnitTestOptions::FilterMatchesTest( + "TestExpansionModule/MultipleTestGenerationTest", + msg.GetString().c_str())) { + perform_check = true; + } + } + if (perform_check) { + EXPECT_EQ(kExpectedCalls, fixture_constructor_count_) + << "Fixture constructor of ParamTestGenerationTest test case " + << "has not been run as expected."; + EXPECT_EQ(kExpectedCalls, set_up_count_) + << "Fixture SetUp method of ParamTestGenerationTest test case " + << "has not been run as expected."; + EXPECT_EQ(kExpectedCalls, tear_down_count_) + << "Fixture TearDown method of ParamTestGenerationTest test case " + << "has not been run as expected."; + EXPECT_EQ(kExpectedCalls, test_body_count_) + << "Test in ParamTestGenerationTest test case " + << "has not been run as expected."; + } + } + private: + TestGenerationEnvironment() : fixture_constructor_count_(0), set_up_count_(0), + tear_down_count_(0), test_body_count_(0) {} + + int fixture_constructor_count_; + int set_up_count_; + int tear_down_count_; + int test_body_count_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationEnvironment); +}; + +const int test_generation_params[] = {36, 42, 72}; + +class TestGenerationTest : public TestWithParam { + public: + enum { + PARAMETER_COUNT = + sizeof(test_generation_params)/sizeof(test_generation_params[0]) + }; + + typedef TestGenerationEnvironment Environment; + + TestGenerationTest() { + Environment::Instance()->FixtureConstructorExecuted(); + current_parameter_ = GetParam(); + } + virtual void SetUp() { + Environment::Instance()->SetUpExecuted(); + EXPECT_EQ(current_parameter_, GetParam()); + } + virtual void TearDown() { + Environment::Instance()->TearDownExecuted(); + EXPECT_EQ(current_parameter_, GetParam()); + } + + static void SetUpTestCase() { + bool all_tests_in_test_case_selected = true; + + for (int i = 0; i < PARAMETER_COUNT; ++i) { + Message test_name; + test_name << "TestsExpandedAndRun/" << i; + if ( !UnitTestOptions::FilterMatchesTest( + "TestExpansionModule/MultipleTestGenerationTest", + test_name.GetString())) { + all_tests_in_test_case_selected = false; + } + } + EXPECT_TRUE(all_tests_in_test_case_selected) + << "When running the TestGenerationTest test case all of its tests\n" + << "must be selected by the filter flag for the test case to pass.\n" + << "If not all of them are enabled, we can't reliably conclude\n" + << "that the correct number of tests have been generated."; + + collected_parameters_.clear(); + } + + static void TearDownTestCase() { + vector expected_values(test_generation_params, + test_generation_params + PARAMETER_COUNT); + // Test execution order is not guaranteed by Google Test, + // so the order of values in collected_parameters_ can be + // different and we have to sort to compare. + sort(expected_values.begin(), expected_values.end()); + sort(collected_parameters_.begin(), collected_parameters_.end()); + + EXPECT_TRUE(collected_parameters_ == expected_values); + } + protected: + int current_parameter_; + static vector collected_parameters_; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationTest); +}; +vector TestGenerationTest::collected_parameters_; + +TEST_P(TestGenerationTest, TestsExpandedAndRun) { + Environment::Instance()->TestBodyExecuted(); + EXPECT_EQ(current_parameter_, GetParam()); + collected_parameters_.push_back(GetParam()); +} +INSTANTIATE_TEST_CASE_P(TestExpansionModule, TestGenerationTest, + ValuesIn(test_generation_params)); + +// This test verifies that the element sequence (third parameter of +// INSTANTIATE_TEST_CASE_P) is evaluated in InitGoogleTest() and neither at +// the call site of INSTANTIATE_TEST_CASE_P nor in RUN_ALL_TESTS(). For +// that, we declare param_value_ to be a static member of +// GeneratorEvaluationTest and initialize it to 0. We set it to 1 in +// main(), just before invocation of InitGoogleTest(). After calling +// InitGoogleTest(), we set the value to 2. If the sequence is evaluated +// before or after InitGoogleTest, INSTANTIATE_TEST_CASE_P will create a +// test with parameter other than 1, and the test body will fail the +// assertion. +class GeneratorEvaluationTest : public TestWithParam { + public: + static int param_value() { return param_value_; } + static void set_param_value(int param_value) { param_value_ = param_value; } + + private: + static int param_value_; +}; +int GeneratorEvaluationTest::param_value_ = 0; + +TEST_P(GeneratorEvaluationTest, GeneratorsEvaluatedInMain) { + EXPECT_EQ(1, GetParam()); +} +INSTANTIATE_TEST_CASE_P(GenEvalModule, + GeneratorEvaluationTest, + Values(GeneratorEvaluationTest::param_value())); + +// Tests that generators defined in a different translation unit are +// functional. Generator extern_gen is defined in gtest-param-test_test2.cc. +extern ParamGenerator extern_gen; +class ExternalGeneratorTest : public TestWithParam {}; +TEST_P(ExternalGeneratorTest, ExternalGenerator) { + // Sequence produced by extern_gen contains only a single value + // which we verify here. + EXPECT_EQ(GetParam(), 33); +} +INSTANTIATE_TEST_CASE_P(ExternalGeneratorModule, + ExternalGeneratorTest, + extern_gen); + +// Tests that a parameterized test case can be defined in one translation +// unit and instantiated in another. This test will be instantiated in +// gtest-param-test_test2.cc. ExternalInstantiationTest fixture class is +// defined in gtest-param-test_test.h. +TEST_P(ExternalInstantiationTest, IsMultipleOf33) { + EXPECT_EQ(0, GetParam() % 33); +} + +// Tests that a parameterized test case can be instantiated with multiple +// generators. +class MultipleInstantiationTest : public TestWithParam {}; +TEST_P(MultipleInstantiationTest, AllowsMultipleInstances) { +} +INSTANTIATE_TEST_CASE_P(Sequence1, MultipleInstantiationTest, Values(1, 2)); +INSTANTIATE_TEST_CASE_P(Sequence2, MultipleInstantiationTest, Range(3, 5)); + +// Tests that a parameterized test case can be instantiated +// in multiple translation units. This test will be instantiated +// here and in gtest-param-test_test2.cc. +// InstantiationInMultipleTranslationUnitsTest fixture class +// is defined in gtest-param-test_test.h. +TEST_P(InstantiationInMultipleTranslaionUnitsTest, IsMultipleOf42) { + EXPECT_EQ(0, GetParam() % 42); +} +INSTANTIATE_TEST_CASE_P(Sequence1, + InstantiationInMultipleTranslaionUnitsTest, + Values(42, 42*2)); + +// Tests that each iteration of parameterized test runs in a separate test +// object. +class SeparateInstanceTest : public TestWithParam { + public: + SeparateInstanceTest() : count_(0) {} + + static void TearDownTestCase() { + EXPECT_GE(global_count_, 2) + << "If some (but not all) SeparateInstanceTest tests have been " + << "filtered out this test will fail. Make sure that all " + << "GeneratorEvaluationTest are selected or de-selected together " + << "by the test filter."; + } + + protected: + int count_; + static int global_count_; +}; +int SeparateInstanceTest::global_count_ = 0; + +TEST_P(SeparateInstanceTest, TestsRunInSeparateInstances) { + EXPECT_EQ(0, count_++); + global_count_++; +} +INSTANTIATE_TEST_CASE_P(FourElemSequence, SeparateInstanceTest, Range(1, 4)); + +// Tests that all instantiations of a test have named appropriately. Test +// defined with TEST_P(TestCaseName, TestName) and instantiated with +// INSTANTIATE_TEST_CASE_P(SequenceName, TestCaseName, generator) must be named +// SequenceName/TestCaseName.TestName/i, where i is the 0-based index of the +// sequence element used to instantiate the test. +class NamingTest : public TestWithParam {}; + +TEST_P(NamingTest, TestsAreNamedAppropriately) { + const ::testing::TestInfo* const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + + EXPECT_STREQ("ZeroToFiveSequence/NamingTest", test_info->test_case_name()); + + Message msg; + msg << "TestsAreNamedAppropriately/" << GetParam(); + EXPECT_STREQ(msg.GetString().c_str(), test_info->name()); +} + +INSTANTIATE_TEST_CASE_P(ZeroToFiveSequence, NamingTest, Range(0, 5)); + +#endif // GTEST_HAS_PARAM_TEST + +TEST(CompileTest, CombineIsDefinedOnlyWhenGtestHasParamTestIsDefined) { +#if GTEST_HAS_COMBINE && !GTEST_HAS_PARAM_TEST + FAIL() << "GTEST_HAS_COMBINE is defined while GTEST_HAS_PARAM_TEST is not\n" +#endif +} + +int main(int argc, char **argv) { +#if GTEST_HAS_PARAM_TEST + // Used in TestGenerationTest test case. + AddGlobalTestEnvironment(TestGenerationTest::Environment::Instance()); + // Used in GeneratorEvaluationTest test case. Tests that the updated value + // will be picked up for instantiating tests in GeneratorEvaluationTest. + GeneratorEvaluationTest::set_param_value(1); +#endif // GTEST_HAS_PARAM_TEST + + ::testing::InitGoogleTest(&argc, argv); + +#if GTEST_HAS_PARAM_TEST + // Used in GeneratorEvaluationTest test case. Tests that value updated + // here will NOT be used for instantiating tests in + // GeneratorEvaluationTest. + GeneratorEvaluationTest::set_param_value(2); +#endif // GTEST_HAS_PARAM_TEST + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.h new file mode 100644 index 00000000..b7f94936 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-param-test_test.h @@ -0,0 +1,55 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file provides classes and functions used internally +// for testing Google Test itself. + +#ifndef GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ +#define GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ + +#include + +#if GTEST_HAS_PARAM_TEST + +// Test fixture for testing definition and instantiation of a test +// in separate translation units. +class ExternalInstantiationTest : public ::testing::TestWithParam {}; + +// Test fixture for testing instantiation of a test in multiple +// translation units. +class InstantiationInMultipleTranslaionUnitsTest + : public ::testing::TestWithParam {}; + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-port_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-port_test.cc new file mode 100644 index 00000000..37258602 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-port_test.cc @@ -0,0 +1,1018 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev), wan@google.com (Zhanyong Wan) +// +// This file tests the internal cross-platform support utilities. + +#include + +#include + +#if GTEST_OS_MAC +#include +#endif // GTEST_OS_MAC + +#include // For std::pair and std::make_pair. + +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +using std::make_pair; +using std::pair; + +namespace testing { +namespace internal { + +// Tests that the element_type typedef is available in scoped_ptr and refers +// to the parameter type. +TEST(ScopedPtrTest, DefinesElementType) { + StaticAssertTypeEq::element_type>(); +} + +// TODO(vladl@google.com): Implement THE REST of scoped_ptr tests. + +TEST(GtestCheckSyntaxTest, BehavesLikeASingleStatement) { + if (AlwaysFalse()) + GTEST_CHECK_(false) << "This should never be executed; " + "It's a compilation test only."; + + if (AlwaysTrue()) + GTEST_CHECK_(true); + else + ; // NOLINT + + if (AlwaysFalse()) + ; // NOLINT + else + GTEST_CHECK_(true) << ""; +} + +TEST(GtestCheckSyntaxTest, WorksWithSwitch) { + switch (0) { + case 1: + break; + default: + GTEST_CHECK_(true); + } + + switch(0) + case 0: + GTEST_CHECK_(true) << "Check failed in switch case"; +} + +#if GTEST_OS_MAC +void* ThreadFunc(void* data) { + pthread_mutex_t* mutex = static_cast(data); + pthread_mutex_lock(mutex); + pthread_mutex_unlock(mutex); + return NULL; +} + +TEST(GetThreadCountTest, ReturnsCorrectValue) { + EXPECT_EQ(1U, GetThreadCount()); + pthread_mutex_t mutex; + pthread_attr_t attr; + pthread_t thread_id; + + // TODO(vladl@google.com): turn mutex into internal::Mutex for automatic + // destruction. + pthread_mutex_init(&mutex, NULL); + pthread_mutex_lock(&mutex); + ASSERT_EQ(0, pthread_attr_init(&attr)); + ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); + + const int status = pthread_create(&thread_id, &attr, &ThreadFunc, &mutex); + ASSERT_EQ(0, pthread_attr_destroy(&attr)); + ASSERT_EQ(0, status); + EXPECT_EQ(2U, GetThreadCount()); + pthread_mutex_unlock(&mutex); + + void* dummy; + ASSERT_EQ(0, pthread_join(thread_id, &dummy)); + + // MacOS X may not immediately report the updated thread count after + // joining a thread, causing flakiness in this test. To counter that, we + // wait for up to .5 seconds for the OS to report the correct value. + for (int i = 0; i < 5; ++i) { + if (GetThreadCount() == 1) + break; + + SleepMilliseconds(100); + } + EXPECT_EQ(1U, GetThreadCount()); + pthread_mutex_destroy(&mutex); +} +#else +TEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) { + EXPECT_EQ(0U, GetThreadCount()); +} +#endif // GTEST_OS_MAC + +TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) { + const bool a_false_condition = false; + const char regex[] = +#ifdef _MSC_VER + "gtest-port_test\\.cc\\(\\d+\\):" +#else + "gtest-port_test\\.cc:[0-9]+" +#endif // _MSC_VER + ".*a_false_condition.*Extra info.*"; + + EXPECT_DEATH_IF_SUPPORTED(GTEST_CHECK_(a_false_condition) << "Extra info", + regex); +} + +#if GTEST_HAS_DEATH_TEST + +TEST(GtestCheckDeathTest, LivesSilentlyOnSuccess) { + EXPECT_EXIT({ + GTEST_CHECK_(true) << "Extra info"; + ::std::cerr << "Success\n"; + exit(0); }, + ::testing::ExitedWithCode(0), "Success"); +} + +#endif // GTEST_HAS_DEATH_TEST + +#if GTEST_USES_POSIX_RE + +#if GTEST_HAS_TYPED_TEST + +template +class RETest : public ::testing::Test {}; + +// Defines StringTypes as the list of all string types that class RE +// supports. +typedef testing::Types< + ::std::string, +#if GTEST_HAS_GLOBAL_STRING + ::string, +#endif // GTEST_HAS_GLOBAL_STRING + const char*> StringTypes; + +TYPED_TEST_CASE(RETest, StringTypes); + +// Tests RE's implicit constructors. +TYPED_TEST(RETest, ImplicitConstructorWorks) { + const RE empty(TypeParam("")); + EXPECT_STREQ("", empty.pattern()); + + const RE simple(TypeParam("hello")); + EXPECT_STREQ("hello", simple.pattern()); + + const RE normal(TypeParam(".*(\\w+)")); + EXPECT_STREQ(".*(\\w+)", normal.pattern()); +} + +// Tests that RE's constructors reject invalid regular expressions. +TYPED_TEST(RETest, RejectsInvalidRegex) { + EXPECT_NONFATAL_FAILURE({ + const RE invalid(TypeParam("?")); + }, "\"?\" is not a valid POSIX Extended regular expression."); +} + +// Tests RE::FullMatch(). +TYPED_TEST(RETest, FullMatchWorks) { + const RE empty(TypeParam("")); + EXPECT_TRUE(RE::FullMatch(TypeParam(""), empty)); + EXPECT_FALSE(RE::FullMatch(TypeParam("a"), empty)); + + const RE re(TypeParam("a.*z")); + EXPECT_TRUE(RE::FullMatch(TypeParam("az"), re)); + EXPECT_TRUE(RE::FullMatch(TypeParam("axyz"), re)); + EXPECT_FALSE(RE::FullMatch(TypeParam("baz"), re)); + EXPECT_FALSE(RE::FullMatch(TypeParam("azy"), re)); +} + +// Tests RE::PartialMatch(). +TYPED_TEST(RETest, PartialMatchWorks) { + const RE empty(TypeParam("")); + EXPECT_TRUE(RE::PartialMatch(TypeParam(""), empty)); + EXPECT_TRUE(RE::PartialMatch(TypeParam("a"), empty)); + + const RE re(TypeParam("a.*z")); + EXPECT_TRUE(RE::PartialMatch(TypeParam("az"), re)); + EXPECT_TRUE(RE::PartialMatch(TypeParam("axyz"), re)); + EXPECT_TRUE(RE::PartialMatch(TypeParam("baz"), re)); + EXPECT_TRUE(RE::PartialMatch(TypeParam("azy"), re)); + EXPECT_FALSE(RE::PartialMatch(TypeParam("zza"), re)); +} + +#endif // GTEST_HAS_TYPED_TEST + +#elif GTEST_USES_SIMPLE_RE + +TEST(IsInSetTest, NulCharIsNotInAnySet) { + EXPECT_FALSE(IsInSet('\0', "")); + EXPECT_FALSE(IsInSet('\0', "\0")); + EXPECT_FALSE(IsInSet('\0', "a")); +} + +TEST(IsInSetTest, WorksForNonNulChars) { + EXPECT_FALSE(IsInSet('a', "Ab")); + EXPECT_FALSE(IsInSet('c', "")); + + EXPECT_TRUE(IsInSet('b', "bcd")); + EXPECT_TRUE(IsInSet('b', "ab")); +} + +TEST(IsDigitTest, IsFalseForNonDigit) { + EXPECT_FALSE(IsDigit('\0')); + EXPECT_FALSE(IsDigit(' ')); + EXPECT_FALSE(IsDigit('+')); + EXPECT_FALSE(IsDigit('-')); + EXPECT_FALSE(IsDigit('.')); + EXPECT_FALSE(IsDigit('a')); +} + +TEST(IsDigitTest, IsTrueForDigit) { + EXPECT_TRUE(IsDigit('0')); + EXPECT_TRUE(IsDigit('1')); + EXPECT_TRUE(IsDigit('5')); + EXPECT_TRUE(IsDigit('9')); +} + +TEST(IsPunctTest, IsFalseForNonPunct) { + EXPECT_FALSE(IsPunct('\0')); + EXPECT_FALSE(IsPunct(' ')); + EXPECT_FALSE(IsPunct('\n')); + EXPECT_FALSE(IsPunct('a')); + EXPECT_FALSE(IsPunct('0')); +} + +TEST(IsPunctTest, IsTrueForPunct) { + for (const char* p = "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"; *p; p++) { + EXPECT_PRED1(IsPunct, *p); + } +} + +TEST(IsRepeatTest, IsFalseForNonRepeatChar) { + EXPECT_FALSE(IsRepeat('\0')); + EXPECT_FALSE(IsRepeat(' ')); + EXPECT_FALSE(IsRepeat('a')); + EXPECT_FALSE(IsRepeat('1')); + EXPECT_FALSE(IsRepeat('-')); +} + +TEST(IsRepeatTest, IsTrueForRepeatChar) { + EXPECT_TRUE(IsRepeat('?')); + EXPECT_TRUE(IsRepeat('*')); + EXPECT_TRUE(IsRepeat('+')); +} + +TEST(IsWhiteSpaceTest, IsFalseForNonWhiteSpace) { + EXPECT_FALSE(IsWhiteSpace('\0')); + EXPECT_FALSE(IsWhiteSpace('a')); + EXPECT_FALSE(IsWhiteSpace('1')); + EXPECT_FALSE(IsWhiteSpace('+')); + EXPECT_FALSE(IsWhiteSpace('_')); +} + +TEST(IsWhiteSpaceTest, IsTrueForWhiteSpace) { + EXPECT_TRUE(IsWhiteSpace(' ')); + EXPECT_TRUE(IsWhiteSpace('\n')); + EXPECT_TRUE(IsWhiteSpace('\r')); + EXPECT_TRUE(IsWhiteSpace('\t')); + EXPECT_TRUE(IsWhiteSpace('\v')); + EXPECT_TRUE(IsWhiteSpace('\f')); +} + +TEST(IsWordCharTest, IsFalseForNonWordChar) { + EXPECT_FALSE(IsWordChar('\0')); + EXPECT_FALSE(IsWordChar('+')); + EXPECT_FALSE(IsWordChar('.')); + EXPECT_FALSE(IsWordChar(' ')); + EXPECT_FALSE(IsWordChar('\n')); +} + +TEST(IsWordCharTest, IsTrueForLetter) { + EXPECT_TRUE(IsWordChar('a')); + EXPECT_TRUE(IsWordChar('b')); + EXPECT_TRUE(IsWordChar('A')); + EXPECT_TRUE(IsWordChar('Z')); +} + +TEST(IsWordCharTest, IsTrueForDigit) { + EXPECT_TRUE(IsWordChar('0')); + EXPECT_TRUE(IsWordChar('1')); + EXPECT_TRUE(IsWordChar('7')); + EXPECT_TRUE(IsWordChar('9')); +} + +TEST(IsWordCharTest, IsTrueForUnderscore) { + EXPECT_TRUE(IsWordChar('_')); +} + +TEST(IsValidEscapeTest, IsFalseForNonPrintable) { + EXPECT_FALSE(IsValidEscape('\0')); + EXPECT_FALSE(IsValidEscape('\007')); +} + +TEST(IsValidEscapeTest, IsFalseForDigit) { + EXPECT_FALSE(IsValidEscape('0')); + EXPECT_FALSE(IsValidEscape('9')); +} + +TEST(IsValidEscapeTest, IsFalseForWhiteSpace) { + EXPECT_FALSE(IsValidEscape(' ')); + EXPECT_FALSE(IsValidEscape('\n')); +} + +TEST(IsValidEscapeTest, IsFalseForSomeLetter) { + EXPECT_FALSE(IsValidEscape('a')); + EXPECT_FALSE(IsValidEscape('Z')); +} + +TEST(IsValidEscapeTest, IsTrueForPunct) { + EXPECT_TRUE(IsValidEscape('.')); + EXPECT_TRUE(IsValidEscape('-')); + EXPECT_TRUE(IsValidEscape('^')); + EXPECT_TRUE(IsValidEscape('$')); + EXPECT_TRUE(IsValidEscape('(')); + EXPECT_TRUE(IsValidEscape(']')); + EXPECT_TRUE(IsValidEscape('{')); + EXPECT_TRUE(IsValidEscape('|')); +} + +TEST(IsValidEscapeTest, IsTrueForSomeLetter) { + EXPECT_TRUE(IsValidEscape('d')); + EXPECT_TRUE(IsValidEscape('D')); + EXPECT_TRUE(IsValidEscape('s')); + EXPECT_TRUE(IsValidEscape('S')); + EXPECT_TRUE(IsValidEscape('w')); + EXPECT_TRUE(IsValidEscape('W')); +} + +TEST(AtomMatchesCharTest, EscapedPunct) { + EXPECT_FALSE(AtomMatchesChar(true, '\\', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, '\\', ' ')); + EXPECT_FALSE(AtomMatchesChar(true, '_', '.')); + EXPECT_FALSE(AtomMatchesChar(true, '.', 'a')); + + EXPECT_TRUE(AtomMatchesChar(true, '\\', '\\')); + EXPECT_TRUE(AtomMatchesChar(true, '_', '_')); + EXPECT_TRUE(AtomMatchesChar(true, '+', '+')); + EXPECT_TRUE(AtomMatchesChar(true, '.', '.')); +} + +TEST(AtomMatchesCharTest, Escaped_d) { + EXPECT_FALSE(AtomMatchesChar(true, 'd', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'd', 'a')); + EXPECT_FALSE(AtomMatchesChar(true, 'd', '.')); + + EXPECT_TRUE(AtomMatchesChar(true, 'd', '0')); + EXPECT_TRUE(AtomMatchesChar(true, 'd', '9')); +} + +TEST(AtomMatchesCharTest, Escaped_D) { + EXPECT_FALSE(AtomMatchesChar(true, 'D', '0')); + EXPECT_FALSE(AtomMatchesChar(true, 'D', '9')); + + EXPECT_TRUE(AtomMatchesChar(true, 'D', '\0')); + EXPECT_TRUE(AtomMatchesChar(true, 'D', 'a')); + EXPECT_TRUE(AtomMatchesChar(true, 'D', '-')); +} + +TEST(AtomMatchesCharTest, Escaped_s) { + EXPECT_FALSE(AtomMatchesChar(true, 's', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 's', 'a')); + EXPECT_FALSE(AtomMatchesChar(true, 's', '.')); + EXPECT_FALSE(AtomMatchesChar(true, 's', '9')); + + EXPECT_TRUE(AtomMatchesChar(true, 's', ' ')); + EXPECT_TRUE(AtomMatchesChar(true, 's', '\n')); + EXPECT_TRUE(AtomMatchesChar(true, 's', '\t')); +} + +TEST(AtomMatchesCharTest, Escaped_S) { + EXPECT_FALSE(AtomMatchesChar(true, 'S', ' ')); + EXPECT_FALSE(AtomMatchesChar(true, 'S', '\r')); + + EXPECT_TRUE(AtomMatchesChar(true, 'S', '\0')); + EXPECT_TRUE(AtomMatchesChar(true, 'S', 'a')); + EXPECT_TRUE(AtomMatchesChar(true, 'S', '9')); +} + +TEST(AtomMatchesCharTest, Escaped_w) { + EXPECT_FALSE(AtomMatchesChar(true, 'w', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'w', '+')); + EXPECT_FALSE(AtomMatchesChar(true, 'w', ' ')); + EXPECT_FALSE(AtomMatchesChar(true, 'w', '\n')); + + EXPECT_TRUE(AtomMatchesChar(true, 'w', '0')); + EXPECT_TRUE(AtomMatchesChar(true, 'w', 'b')); + EXPECT_TRUE(AtomMatchesChar(true, 'w', 'C')); + EXPECT_TRUE(AtomMatchesChar(true, 'w', '_')); +} + +TEST(AtomMatchesCharTest, Escaped_W) { + EXPECT_FALSE(AtomMatchesChar(true, 'W', 'A')); + EXPECT_FALSE(AtomMatchesChar(true, 'W', 'b')); + EXPECT_FALSE(AtomMatchesChar(true, 'W', '9')); + EXPECT_FALSE(AtomMatchesChar(true, 'W', '_')); + + EXPECT_TRUE(AtomMatchesChar(true, 'W', '\0')); + EXPECT_TRUE(AtomMatchesChar(true, 'W', '*')); + EXPECT_TRUE(AtomMatchesChar(true, 'W', '\n')); +} + +TEST(AtomMatchesCharTest, EscapedWhiteSpace) { + EXPECT_FALSE(AtomMatchesChar(true, 'f', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'f', '\n')); + EXPECT_FALSE(AtomMatchesChar(true, 'n', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'n', '\r')); + EXPECT_FALSE(AtomMatchesChar(true, 'r', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'r', 'a')); + EXPECT_FALSE(AtomMatchesChar(true, 't', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 't', 't')); + EXPECT_FALSE(AtomMatchesChar(true, 'v', '\0')); + EXPECT_FALSE(AtomMatchesChar(true, 'v', '\f')); + + EXPECT_TRUE(AtomMatchesChar(true, 'f', '\f')); + EXPECT_TRUE(AtomMatchesChar(true, 'n', '\n')); + EXPECT_TRUE(AtomMatchesChar(true, 'r', '\r')); + EXPECT_TRUE(AtomMatchesChar(true, 't', '\t')); + EXPECT_TRUE(AtomMatchesChar(true, 'v', '\v')); +} + +TEST(AtomMatchesCharTest, UnescapedDot) { + EXPECT_FALSE(AtomMatchesChar(false, '.', '\n')); + + EXPECT_TRUE(AtomMatchesChar(false, '.', '\0')); + EXPECT_TRUE(AtomMatchesChar(false, '.', '.')); + EXPECT_TRUE(AtomMatchesChar(false, '.', 'a')); + EXPECT_TRUE(AtomMatchesChar(false, '.', ' ')); +} + +TEST(AtomMatchesCharTest, UnescapedChar) { + EXPECT_FALSE(AtomMatchesChar(false, 'a', '\0')); + EXPECT_FALSE(AtomMatchesChar(false, 'a', 'b')); + EXPECT_FALSE(AtomMatchesChar(false, '$', 'a')); + + EXPECT_TRUE(AtomMatchesChar(false, '$', '$')); + EXPECT_TRUE(AtomMatchesChar(false, '5', '5')); + EXPECT_TRUE(AtomMatchesChar(false, 'Z', 'Z')); +} + +TEST(ValidateRegexTest, GeneratesFailureAndReturnsFalseForInvalid) { + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(NULL)), + "NULL is not a valid simple regular expression"); + EXPECT_NONFATAL_FAILURE( + ASSERT_FALSE(ValidateRegex("a\\")), + "Syntax error at index 1 in simple regular expression \"a\\\": "); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a\\")), + "'\\' cannot appear at the end"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("\\n\\")), + "'\\' cannot appear at the end"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("\\s\\hb")), + "invalid escape sequence \"\\h\""); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^^")), + "'^' can only appear at the beginning"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(".*^b")), + "'^' can only appear at the beginning"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("$$")), + "'$' can only appear at the end"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^$a")), + "'$' can only appear at the end"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a(b")), + "'(' is unsupported"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("ab)")), + "')' is unsupported"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("[ab")), + "'[' is unsupported"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a{2")), + "'{' is unsupported"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("?")), + "'?' can only follow a repeatable token"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^*")), + "'*' can only follow a repeatable token"); + EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("5*+")), + "'+' can only follow a repeatable token"); +} + +TEST(ValidateRegexTest, ReturnsTrueForValid) { + EXPECT_TRUE(ValidateRegex("")); + EXPECT_TRUE(ValidateRegex("a")); + EXPECT_TRUE(ValidateRegex(".*")); + EXPECT_TRUE(ValidateRegex("^a_+")); + EXPECT_TRUE(ValidateRegex("^a\\t\\&?")); + EXPECT_TRUE(ValidateRegex("09*$")); + EXPECT_TRUE(ValidateRegex("^Z$")); + EXPECT_TRUE(ValidateRegex("a\\^Z\\$\\(\\)\\|\\[\\]\\{\\}")); +} + +TEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrOne) { + EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "a", "ba")); + // Repeating more than once. + EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "aab")); + + // Repeating zero times. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "ba")); + // Repeating once. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "ab")); + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '#', '?', ".", "##")); +} + +TEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrMany) { + EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '*', "a$", "baab")); + + // Repeating zero times. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', "b", "bc")); + // Repeating once. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', "b", "abc")); + // Repeating more than once. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '*', "-", "ab_1-g")); +} + +TEST(MatchRepetitionAndRegexAtHeadTest, WorksForOneOrMany) { + EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', "a$", "baab")); + // Repeating zero times. + EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', "b", "bc")); + + // Repeating once. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '+', "b", "abc")); + // Repeating more than once. + EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '+', "-", "ab_1-g")); +} + +TEST(MatchRegexAtHeadTest, ReturnsTrueForEmptyRegex) { + EXPECT_TRUE(MatchRegexAtHead("", "")); + EXPECT_TRUE(MatchRegexAtHead("", "ab")); +} + +TEST(MatchRegexAtHeadTest, WorksWhenDollarIsInRegex) { + EXPECT_FALSE(MatchRegexAtHead("$", "a")); + + EXPECT_TRUE(MatchRegexAtHead("$", "")); + EXPECT_TRUE(MatchRegexAtHead("a$", "a")); +} + +TEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithEscapeSequence) { + EXPECT_FALSE(MatchRegexAtHead("\\w", "+")); + EXPECT_FALSE(MatchRegexAtHead("\\W", "ab")); + + EXPECT_TRUE(MatchRegexAtHead("\\sa", "\nab")); + EXPECT_TRUE(MatchRegexAtHead("\\d", "1a")); +} + +TEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithRepetition) { + EXPECT_FALSE(MatchRegexAtHead(".+a", "abc")); + EXPECT_FALSE(MatchRegexAtHead("a?b", "aab")); + + EXPECT_TRUE(MatchRegexAtHead(".*a", "bc12-ab")); + EXPECT_TRUE(MatchRegexAtHead("a?b", "b")); + EXPECT_TRUE(MatchRegexAtHead("a?b", "ab")); +} + +TEST(MatchRegexAtHeadTest, + WorksWhenRegexStartsWithRepetionOfEscapeSequence) { + EXPECT_FALSE(MatchRegexAtHead("\\.+a", "abc")); + EXPECT_FALSE(MatchRegexAtHead("\\s?b", " b")); + + EXPECT_TRUE(MatchRegexAtHead("\\(*a", "((((ab")); + EXPECT_TRUE(MatchRegexAtHead("\\^?b", "^b")); + EXPECT_TRUE(MatchRegexAtHead("\\\\?b", "b")); + EXPECT_TRUE(MatchRegexAtHead("\\\\?b", "\\b")); +} + +TEST(MatchRegexAtHeadTest, MatchesSequentially) { + EXPECT_FALSE(MatchRegexAtHead("ab.*c", "acabc")); + + EXPECT_TRUE(MatchRegexAtHead("ab.*c", "ab-fsc")); +} + +TEST(MatchRegexAnywhereTest, ReturnsFalseWhenStringIsNull) { + EXPECT_FALSE(MatchRegexAnywhere("", NULL)); +} + +TEST(MatchRegexAnywhereTest, WorksWhenRegexStartsWithCaret) { + EXPECT_FALSE(MatchRegexAnywhere("^a", "ba")); + EXPECT_FALSE(MatchRegexAnywhere("^$", "a")); + + EXPECT_TRUE(MatchRegexAnywhere("^a", "ab")); + EXPECT_TRUE(MatchRegexAnywhere("^", "ab")); + EXPECT_TRUE(MatchRegexAnywhere("^$", "")); +} + +TEST(MatchRegexAnywhereTest, ReturnsFalseWhenNoMatch) { + EXPECT_FALSE(MatchRegexAnywhere("a", "bcde123")); + EXPECT_FALSE(MatchRegexAnywhere("a.+a", "--aa88888888")); +} + +TEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingPrefix) { + EXPECT_TRUE(MatchRegexAnywhere("\\w+", "ab1_ - 5")); + EXPECT_TRUE(MatchRegexAnywhere(".*=", "=")); + EXPECT_TRUE(MatchRegexAnywhere("x.*ab?.*bc", "xaaabc")); +} + +TEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingNonPrefix) { + EXPECT_TRUE(MatchRegexAnywhere("\\w+", "$$$ ab1_ - 5")); + EXPECT_TRUE(MatchRegexAnywhere("\\.+=", "= ...=")); +} + +// Tests RE's implicit constructors. +TEST(RETest, ImplicitConstructorWorks) { + const RE empty(""); + EXPECT_STREQ("", empty.pattern()); + + const RE simple("hello"); + EXPECT_STREQ("hello", simple.pattern()); +} + +// Tests that RE's constructors reject invalid regular expressions. +TEST(RETest, RejectsInvalidRegex) { + EXPECT_NONFATAL_FAILURE({ + const RE normal(NULL); + }, "NULL is not a valid simple regular expression"); + + EXPECT_NONFATAL_FAILURE({ + const RE normal(".*(\\w+"); + }, "'(' is unsupported"); + + EXPECT_NONFATAL_FAILURE({ + const RE invalid("^?"); + }, "'?' can only follow a repeatable token"); +} + +// Tests RE::FullMatch(). +TEST(RETest, FullMatchWorks) { + const RE empty(""); + EXPECT_TRUE(RE::FullMatch("", empty)); + EXPECT_FALSE(RE::FullMatch("a", empty)); + + const RE re1("a"); + EXPECT_TRUE(RE::FullMatch("a", re1)); + + const RE re("a.*z"); + EXPECT_TRUE(RE::FullMatch("az", re)); + EXPECT_TRUE(RE::FullMatch("axyz", re)); + EXPECT_FALSE(RE::FullMatch("baz", re)); + EXPECT_FALSE(RE::FullMatch("azy", re)); +} + +// Tests RE::PartialMatch(). +TEST(RETest, PartialMatchWorks) { + const RE empty(""); + EXPECT_TRUE(RE::PartialMatch("", empty)); + EXPECT_TRUE(RE::PartialMatch("a", empty)); + + const RE re("a.*z"); + EXPECT_TRUE(RE::PartialMatch("az", re)); + EXPECT_TRUE(RE::PartialMatch("axyz", re)); + EXPECT_TRUE(RE::PartialMatch("baz", re)); + EXPECT_TRUE(RE::PartialMatch("azy", re)); + EXPECT_FALSE(RE::PartialMatch("zza", re)); +} + +#endif // GTEST_USES_POSIX_RE + +#if !GTEST_OS_WINDOWS_MOBILE + +TEST(CaptureTest, CapturesStdout) { + CaptureStdout(); + fprintf(stdout, "abc"); + EXPECT_STREQ("abc", GetCapturedStdout().c_str()); + + CaptureStdout(); + fprintf(stdout, "def%cghi", '\0'); + EXPECT_EQ(::std::string("def\0ghi", 7), ::std::string(GetCapturedStdout())); +} + +TEST(CaptureTest, CapturesStderr) { + CaptureStderr(); + fprintf(stderr, "jkl"); + EXPECT_STREQ("jkl", GetCapturedStderr().c_str()); + + CaptureStderr(); + fprintf(stderr, "jkl%cmno", '\0'); + EXPECT_EQ(::std::string("jkl\0mno", 7), ::std::string(GetCapturedStderr())); +} + +// Tests that stdout and stderr capture don't interfere with each other. +TEST(CaptureTest, CapturesStdoutAndStderr) { + CaptureStdout(); + CaptureStderr(); + fprintf(stdout, "pqr"); + fprintf(stderr, "stu"); + EXPECT_STREQ("pqr", GetCapturedStdout().c_str()); + EXPECT_STREQ("stu", GetCapturedStderr().c_str()); +} + +TEST(CaptureDeathTest, CannotReenterStdoutCapture) { + CaptureStdout(); + EXPECT_DEATH_IF_SUPPORTED(CaptureStdout();, + "Only one stdout capturer can exist at a time"); + GetCapturedStdout(); + + // We cannot test stderr capturing using death tests as they use it + // themselves. +} + +#endif // !GTEST_OS_WINDOWS_MOBILE + +TEST(ThreadLocalTest, DefaultConstructorInitializesToDefaultValues) { + ThreadLocal t1; + EXPECT_EQ(0, t1.get()); + + ThreadLocal t2; + EXPECT_TRUE(t2.get() == NULL); +} + +TEST(ThreadLocalTest, SingleParamConstructorInitializesToParam) { + ThreadLocal t1(123); + EXPECT_EQ(123, t1.get()); + + int i = 0; + ThreadLocal t2(&i); + EXPECT_EQ(&i, t2.get()); +} + +class NoDefaultContructor { + public: + explicit NoDefaultContructor(const char*) {} + NoDefaultContructor(const NoDefaultContructor&) {} +}; + +TEST(ThreadLocalTest, ValueDefaultContructorIsNotRequiredForParamVersion) { + ThreadLocal bar(NoDefaultContructor("foo")); + bar.pointer(); +} + +TEST(ThreadLocalTest, GetAndPointerReturnSameValue) { + ThreadLocal thread_local; + + EXPECT_EQ(thread_local.pointer(), &(thread_local.get())); + + // Verifies the condition still holds after calling set. + thread_local.set("foo"); + EXPECT_EQ(thread_local.pointer(), &(thread_local.get())); +} + +TEST(ThreadLocalTest, PointerAndConstPointerReturnSameValue) { + ThreadLocal thread_local; + const ThreadLocal& const_thread_local = thread_local; + + EXPECT_EQ(thread_local.pointer(), const_thread_local.pointer()); + + thread_local.set("foo"); + EXPECT_EQ(thread_local.pointer(), const_thread_local.pointer()); +} + +#if GTEST_IS_THREADSAFE + +void AddTwo(int* param) { *param += 2; } + +TEST(ThreadWithParamTest, ConstructorExecutesThreadFunc) { + int i = 40; + ThreadWithParam thread(&AddTwo, &i, NULL); + thread.Join(); + EXPECT_EQ(42, i); +} + +TEST(MutexDeathTest, AssertHeldShouldAssertWhenNotLocked) { + // AssertHeld() is flaky only in the presence of multiple threads accessing + // the lock. In this case, the test is robust. + EXPECT_DEATH_IF_SUPPORTED({ + Mutex m; + { MutexLock lock(&m); } + m.AssertHeld(); + }, + "thread .*hold"); +} + +TEST(MutexTest, AssertHeldShouldNotAssertWhenLocked) { + Mutex m; + MutexLock lock(&m); + m.AssertHeld(); +} + +class AtomicCounterWithMutex { + public: + explicit AtomicCounterWithMutex(Mutex* mutex) : + value_(0), mutex_(mutex), random_(42) {} + + void Increment() { + MutexLock lock(mutex_); + int temp = value_; + { + // Locking a mutex puts up a memory barrier, preventing reads and + // writes to value_ rearranged when observed from other threads. + // + // We cannot use Mutex and MutexLock here or rely on their memory + // barrier functionality as we are testing them here. + pthread_mutex_t memory_barrier_mutex; + GTEST_CHECK_POSIX_SUCCESS_( + pthread_mutex_init(&memory_barrier_mutex, NULL)); + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&memory_barrier_mutex)); + + SleepMilliseconds(random_.Generate(30)); + + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&memory_barrier_mutex)); + } + value_ = temp + 1; + } + int value() const { return value_; } + + private: + volatile int value_; + Mutex* const mutex_; // Protects value_. + Random random_; +}; + +void CountingThreadFunc(pair param) { + for (int i = 0; i < param.second; ++i) + param.first->Increment(); +} + +// Tests that the mutex only lets one thread at a time to lock it. +TEST(MutexTest, OnlyOneThreadCanLockAtATime) { + Mutex mutex; + AtomicCounterWithMutex locked_counter(&mutex); + + typedef ThreadWithParam > ThreadType; + const int kCycleCount = 20; + const int kThreadCount = 7; + scoped_ptr counting_threads[kThreadCount]; + Notification threads_can_start; + // Creates and runs kThreadCount threads that increment locked_counter + // kCycleCount times each. + for (int i = 0; i < kThreadCount; ++i) { + counting_threads[i].reset(new ThreadType(&CountingThreadFunc, + make_pair(&locked_counter, + kCycleCount), + &threads_can_start)); + } + threads_can_start.Notify(); + for (int i = 0; i < kThreadCount; ++i) + counting_threads[i]->Join(); + + // If the mutex lets more than one thread to increment the counter at a + // time, they are likely to encounter a race condition and have some + // increments overwritten, resulting in the lower then expected counter + // value. + EXPECT_EQ(kCycleCount * kThreadCount, locked_counter.value()); +} + +template +void RunFromThread(void (func)(T), T param) { + ThreadWithParam thread(func, param, NULL); + thread.Join(); +} + +void RetrieveThreadLocalValue(pair*, String*> param) { + *param.second = param.first->get(); +} + +TEST(ThreadLocalTest, ParameterizedConstructorSetsDefault) { + ThreadLocal thread_local("foo"); + EXPECT_STREQ("foo", thread_local.get().c_str()); + + thread_local.set("bar"); + EXPECT_STREQ("bar", thread_local.get().c_str()); + + String result; + RunFromThread(&RetrieveThreadLocalValue, make_pair(&thread_local, &result)); + EXPECT_STREQ("foo", result.c_str()); +} + +// DestructorTracker keeps track of whether its instances have been +// destroyed. +static std::vector g_destroyed; + +class DestructorTracker { + public: + DestructorTracker() : index_(GetNewIndex()) {} + DestructorTracker(const DestructorTracker& /* rhs */) + : index_(GetNewIndex()) {} + ~DestructorTracker() { + // We never access g_destroyed concurrently, so we don't need to + // protect the write operation under a mutex. + g_destroyed[index_] = true; + } + + private: + static int GetNewIndex() { + g_destroyed.push_back(false); + return g_destroyed.size() - 1; + } + const int index_; +}; + +typedef ThreadLocal* ThreadParam; + +void CallThreadLocalGet(ThreadParam thread_local) { + thread_local->get(); +} + +// Tests that when a ThreadLocal object dies in a thread, it destroys +// the managed object for that thread. +TEST(ThreadLocalTest, DestroysManagedObjectForOwnThreadWhenDying) { + g_destroyed.clear(); + + { + // The next line default constructs a DestructorTracker object as + // the default value of objects managed by thread_local. + ThreadLocal thread_local; + ASSERT_EQ(1U, g_destroyed.size()); + ASSERT_FALSE(g_destroyed[0]); + + // This creates another DestructorTracker object for the main thread. + thread_local.get(); + ASSERT_EQ(2U, g_destroyed.size()); + ASSERT_FALSE(g_destroyed[0]); + ASSERT_FALSE(g_destroyed[1]); + } + + // Now thread_local has died. It should have destroyed both the + // default value shared by all threads and the value for the main + // thread. + ASSERT_EQ(2U, g_destroyed.size()); + EXPECT_TRUE(g_destroyed[0]); + EXPECT_TRUE(g_destroyed[1]); + + g_destroyed.clear(); +} + +// Tests that when a thread exits, the thread-local object for that +// thread is destroyed. +TEST(ThreadLocalTest, DestroysManagedObjectAtThreadExit) { + g_destroyed.clear(); + + { + // The next line default constructs a DestructorTracker object as + // the default value of objects managed by thread_local. + ThreadLocal thread_local; + ASSERT_EQ(1U, g_destroyed.size()); + ASSERT_FALSE(g_destroyed[0]); + + // This creates another DestructorTracker object in the new thread. + ThreadWithParam thread( + &CallThreadLocalGet, &thread_local, NULL); + thread.Join(); + + // Now the new thread has exited. The per-thread object for it + // should have been destroyed. + ASSERT_EQ(2U, g_destroyed.size()); + ASSERT_FALSE(g_destroyed[0]); + ASSERT_TRUE(g_destroyed[1]); + } + + // Now thread_local has died. The default value should have been + // destroyed too. + ASSERT_EQ(2U, g_destroyed.size()); + EXPECT_TRUE(g_destroyed[0]); + EXPECT_TRUE(g_destroyed[1]); + + g_destroyed.clear(); +} + +TEST(ThreadLocalTest, ThreadLocalMutationsAffectOnlyCurrentThread) { + ThreadLocal thread_local; + thread_local.set("Foo"); + EXPECT_STREQ("Foo", thread_local.get().c_str()); + + String result; + RunFromThread(&RetrieveThreadLocalValue, make_pair(&thread_local, &result)); + EXPECT_TRUE(result.c_str() == NULL); +} + +#endif // GTEST_IS_THREADSAFE + +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-test-part_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-test-part_test.cc new file mode 100644 index 00000000..5a3e9196 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-test-part_test.cc @@ -0,0 +1,208 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// + +#include + +#include + +using testing::Message; +using testing::Test; +using testing::TestPartResult; +using testing::TestPartResultArray; + +namespace { + +// Tests the TestPartResult class. + +// The test fixture for testing TestPartResult. +class TestPartResultTest : public Test { + protected: + TestPartResultTest() + : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"), + r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"), + r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {} + + TestPartResult r1_, r2_, r3_; +}; + + +TEST_F(TestPartResultTest, ConstructorWorks) { + Message message; + message << "something is terribly wrong"; + message << static_cast(testing::internal::kStackTraceMarker); + message << "some unimportant stack trace"; + + const TestPartResult result(TestPartResult::kNonFatalFailure, + "some_file.cc", + 42, + message.GetString().c_str()); + + EXPECT_EQ(TestPartResult::kNonFatalFailure, result.type()); + EXPECT_STREQ("some_file.cc", result.file_name()); + EXPECT_EQ(42, result.line_number()); + EXPECT_STREQ(message.GetString().c_str(), result.message()); + EXPECT_STREQ("something is terribly wrong", result.summary()); +} + +TEST_F(TestPartResultTest, ResultAccessorsWork) { + const TestPartResult success(TestPartResult::kSuccess, + "file.cc", + 42, + "message"); + EXPECT_TRUE(success.passed()); + EXPECT_FALSE(success.failed()); + EXPECT_FALSE(success.nonfatally_failed()); + EXPECT_FALSE(success.fatally_failed()); + + const TestPartResult nonfatal_failure(TestPartResult::kNonFatalFailure, + "file.cc", + 42, + "message"); + EXPECT_FALSE(nonfatal_failure.passed()); + EXPECT_TRUE(nonfatal_failure.failed()); + EXPECT_TRUE(nonfatal_failure.nonfatally_failed()); + EXPECT_FALSE(nonfatal_failure.fatally_failed()); + + const TestPartResult fatal_failure(TestPartResult::kFatalFailure, + "file.cc", + 42, + "message"); + EXPECT_FALSE(fatal_failure.passed()); + EXPECT_TRUE(fatal_failure.failed()); + EXPECT_FALSE(fatal_failure.nonfatally_failed()); + EXPECT_TRUE(fatal_failure.fatally_failed()); +} + +// Tests TestPartResult::type(). +TEST_F(TestPartResultTest, type) { + EXPECT_EQ(TestPartResult::kSuccess, r1_.type()); + EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type()); + EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type()); +} + +// Tests TestPartResult::file_name(). +TEST_F(TestPartResultTest, file_name) { + EXPECT_STREQ("foo/bar.cc", r1_.file_name()); + EXPECT_STREQ(NULL, r3_.file_name()); +} + +// Tests TestPartResult::line_number(). +TEST_F(TestPartResultTest, line_number) { + EXPECT_EQ(10, r1_.line_number()); + EXPECT_EQ(-1, r2_.line_number()); +} + +// Tests TestPartResult::message(). +TEST_F(TestPartResultTest, message) { + EXPECT_STREQ("Success!", r1_.message()); +} + +// Tests TestPartResult::passed(). +TEST_F(TestPartResultTest, Passed) { + EXPECT_TRUE(r1_.passed()); + EXPECT_FALSE(r2_.passed()); + EXPECT_FALSE(r3_.passed()); +} + +// Tests TestPartResult::failed(). +TEST_F(TestPartResultTest, Failed) { + EXPECT_FALSE(r1_.failed()); + EXPECT_TRUE(r2_.failed()); + EXPECT_TRUE(r3_.failed()); +} + +// Tests TestPartResult::fatally_failed(). +TEST_F(TestPartResultTest, FatallyFailed) { + EXPECT_FALSE(r1_.fatally_failed()); + EXPECT_FALSE(r2_.fatally_failed()); + EXPECT_TRUE(r3_.fatally_failed()); +} + +// Tests TestPartResult::nonfatally_failed(). +TEST_F(TestPartResultTest, NonfatallyFailed) { + EXPECT_FALSE(r1_.nonfatally_failed()); + EXPECT_TRUE(r2_.nonfatally_failed()); + EXPECT_FALSE(r3_.nonfatally_failed()); +} + +// Tests the TestPartResultArray class. + +class TestPartResultArrayTest : public Test { + protected: + TestPartResultArrayTest() + : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"), + r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {} + + const TestPartResult r1_, r2_; +}; + +// Tests that TestPartResultArray initially has size 0. +TEST_F(TestPartResultArrayTest, InitialSizeIsZero) { + TestPartResultArray results; + EXPECT_EQ(0, results.size()); +} + +// Tests that TestPartResultArray contains the given TestPartResult +// after one Append() operation. +TEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) { + TestPartResultArray results; + results.Append(r1_); + EXPECT_EQ(1, results.size()); + EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); +} + +// Tests that TestPartResultArray contains the given TestPartResults +// after two Append() operations. +TEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) { + TestPartResultArray results; + results.Append(r1_); + results.Append(r2_); + EXPECT_EQ(2, results.size()); + EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); + EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message()); +} + +typedef TestPartResultArrayTest TestPartResultArrayDeathTest; + +// Tests that the program dies when GetTestPartResult() is called with +// an invalid index. +TEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) { + TestPartResultArray results; + results.Append(r1_); + + EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), ""); + EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), ""); +} + +// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper. + +} // namespace diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-tuple_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-tuple_test.cc new file mode 100644 index 00000000..532f70b3 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-tuple_test.cc @@ -0,0 +1,320 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include +#include +#include + +namespace { + +using ::std::tr1::get; +using ::std::tr1::make_tuple; +using ::std::tr1::tuple; +using ::std::tr1::tuple_element; +using ::std::tr1::tuple_size; +using ::testing::StaticAssertTypeEq; + +// Tests that tuple_element >::type returns TK. +TEST(tuple_element_Test, ReturnsElementType) { + StaticAssertTypeEq >::type>(); + StaticAssertTypeEq >::type>(); + StaticAssertTypeEq >::type>(); +} + +// Tests that tuple_size::value gives the number of fields in tuple +// type T. +TEST(tuple_size_Test, ReturnsNumberOfFields) { + EXPECT_EQ(0, +tuple_size >::value); + EXPECT_EQ(1, +tuple_size >::value); + EXPECT_EQ(1, +tuple_size >::value); + EXPECT_EQ(1, +(tuple_size > >::value)); + EXPECT_EQ(2, +(tuple_size >::value)); + EXPECT_EQ(3, +(tuple_size >::value)); +} + +// Tests comparing a tuple with itself. +TEST(ComparisonTest, ComparesWithSelf) { + const tuple a(5, 'a', false); + + EXPECT_TRUE(a == a); + EXPECT_FALSE(a != a); +} + +// Tests comparing two tuples with the same value. +TEST(ComparisonTest, ComparesEqualTuples) { + const tuple a(5, true), b(5, true); + + EXPECT_TRUE(a == b); + EXPECT_FALSE(a != b); +} + +// Tests comparing two different tuples that have no reference fields. +TEST(ComparisonTest, ComparesUnequalTuplesWithoutReferenceFields) { + typedef tuple FooTuple; + + const FooTuple a(0, 'x'); + const FooTuple b(1, 'a'); + + EXPECT_TRUE(a != b); + EXPECT_FALSE(a == b); + + const FooTuple c(1, 'b'); + + EXPECT_TRUE(b != c); + EXPECT_FALSE(b == c); +} + +// Tests comparing two different tuples that have reference fields. +TEST(ComparisonTest, ComparesUnequalTuplesWithReferenceFields) { + typedef tuple FooTuple; + + int i = 5; + const char ch = 'a'; + const FooTuple a(i, ch); + + int j = 6; + const FooTuple b(j, ch); + + EXPECT_TRUE(a != b); + EXPECT_FALSE(a == b); + + j = 5; + const char ch2 = 'b'; + const FooTuple c(j, ch2); + + EXPECT_TRUE(b != c); + EXPECT_FALSE(b == c); +} + +// Tests that a tuple field with a reference type is an alias of the +// variable it's supposed to reference. +TEST(ReferenceFieldTest, IsAliasOfReferencedVariable) { + int n = 0; + tuple t(true, n); + + n = 1; + EXPECT_EQ(n, get<1>(t)) + << "Changing a underlying variable should update the reference field."; + + // Makes sure that the implementation doesn't do anything funny with + // the & operator for the return type of get<>(). + EXPECT_EQ(&n, &(get<1>(t))) + << "The address of a reference field should equal the address of " + << "the underlying variable."; + + get<1>(t) = 2; + EXPECT_EQ(2, n) + << "Changing a reference field should update the underlying variable."; +} + +// Tests that tuple's default constructor default initializes each field. +// This test needs to compile without generating warnings. +TEST(TupleConstructorTest, DefaultConstructorDefaultInitializesEachField) { + // The TR1 report requires that tuple's default constructor default + // initializes each field, even if it's a primitive type. If the + // implementation forgets to do this, this test will catch it by + // generating warnings about using uninitialized variables (assuming + // a decent compiler). + + tuple<> empty; + + tuple a1, b1; + b1 = a1; + EXPECT_EQ(0, get<0>(b1)); + + tuple a2, b2; + b2 = a2; + EXPECT_EQ(0, get<0>(b2)); + EXPECT_EQ(0.0, get<1>(b2)); + + tuple a3, b3; + b3 = a3; + EXPECT_EQ(0.0, get<0>(b3)); + EXPECT_EQ('\0', get<1>(b3)); + EXPECT_TRUE(get<2>(b3) == NULL); + + tuple a10, b10; + b10 = a10; + EXPECT_EQ(0, get<0>(b10)); + EXPECT_EQ(0, get<1>(b10)); + EXPECT_EQ(0, get<2>(b10)); + EXPECT_EQ(0, get<3>(b10)); + EXPECT_EQ(0, get<4>(b10)); + EXPECT_EQ(0, get<5>(b10)); + EXPECT_EQ(0, get<6>(b10)); + EXPECT_EQ(0, get<7>(b10)); + EXPECT_EQ(0, get<8>(b10)); + EXPECT_EQ(0, get<9>(b10)); +} + +// Tests constructing a tuple from its fields. +TEST(TupleConstructorTest, ConstructsFromFields) { + int n = 1; + // Reference field. + tuple a(n); + EXPECT_EQ(&n, &(get<0>(a))); + + // Non-reference fields. + tuple b(5, 'a'); + EXPECT_EQ(5, get<0>(b)); + EXPECT_EQ('a', get<1>(b)); + + // Const reference field. + const int m = 2; + tuple c(true, m); + EXPECT_TRUE(get<0>(c)); + EXPECT_EQ(&m, &(get<1>(c))); +} + +// Tests tuple's copy constructor. +TEST(TupleConstructorTest, CopyConstructor) { + tuple a(0.0, true); + tuple b(a); + + EXPECT_DOUBLE_EQ(0.0, get<0>(b)); + EXPECT_TRUE(get<1>(b)); +} + +// Tests constructing a tuple from another tuple that has a compatible +// but different type. +TEST(TupleConstructorTest, ConstructsFromDifferentTupleType) { + tuple a(0, 1, 'a'); + tuple b(a); + + EXPECT_DOUBLE_EQ(0.0, get<0>(b)); + EXPECT_EQ(1, get<1>(b)); + EXPECT_EQ('a', get<2>(b)); +} + +// Tests constructing a 2-tuple from an std::pair. +TEST(TupleConstructorTest, ConstructsFromPair) { + ::std::pair a(1, 'a'); + tuple b(a); + tuple c(a); +} + +// Tests assigning a tuple to another tuple with the same type. +TEST(TupleAssignmentTest, AssignsToSameTupleType) { + const tuple a(5, 7L); + tuple b; + b = a; + EXPECT_EQ(5, get<0>(b)); + EXPECT_EQ(7L, get<1>(b)); +} + +// Tests assigning a tuple to another tuple with a different but +// compatible type. +TEST(TupleAssignmentTest, AssignsToDifferentTupleType) { + const tuple a(1, 7L, true); + tuple b; + b = a; + EXPECT_EQ(1L, get<0>(b)); + EXPECT_EQ(7, get<1>(b)); + EXPECT_TRUE(get<2>(b)); +} + +// Tests assigning an std::pair to a 2-tuple. +TEST(TupleAssignmentTest, AssignsFromPair) { + const ::std::pair a(5, true); + tuple b; + b = a; + EXPECT_EQ(5, get<0>(b)); + EXPECT_TRUE(get<1>(b)); + + tuple c; + c = a; + EXPECT_EQ(5L, get<0>(c)); + EXPECT_TRUE(get<1>(c)); +} + +// A fixture for testing big tuples. +class BigTupleTest : public testing::Test { + protected: + typedef tuple BigTuple; + + BigTupleTest() : + a_(1, 0, 0, 0, 0, 0, 0, 0, 0, 2), + b_(1, 0, 0, 0, 0, 0, 0, 0, 0, 3) {} + + BigTuple a_, b_; +}; + +// Tests constructing big tuples. +TEST_F(BigTupleTest, Construction) { + BigTuple a; + BigTuple b(b_); +} + +// Tests that get(t) returns the N-th (0-based) field of tuple t. +TEST_F(BigTupleTest, get) { + EXPECT_EQ(1, get<0>(a_)); + EXPECT_EQ(2, get<9>(a_)); + + // Tests that get() works on a const tuple too. + const BigTuple a(a_); + EXPECT_EQ(1, get<0>(a)); + EXPECT_EQ(2, get<9>(a)); +} + +// Tests comparing big tuples. +TEST_F(BigTupleTest, Comparisons) { + EXPECT_TRUE(a_ == a_); + EXPECT_FALSE(a_ != a_); + + EXPECT_TRUE(a_ != b_); + EXPECT_FALSE(a_ == b_); +} + +TEST(MakeTupleTest, WorksForScalarTypes) { + tuple a; + a = make_tuple(true, 5); + EXPECT_TRUE(get<0>(a)); + EXPECT_EQ(5, get<1>(a)); + + tuple b; + b = make_tuple('a', 'b', 5); + EXPECT_EQ('a', get<0>(b)); + EXPECT_EQ('b', get<1>(b)); + EXPECT_EQ(5, get<2>(b)); +} + +TEST(MakeTupleTest, WorksForPointers) { + int a[] = { 1, 2, 3, 4 }; + const char* const str = "hi"; + int* const p = a; + + tuple t; + t = make_tuple(str, p); + EXPECT_EQ(str, get<0>(t)); + EXPECT_EQ(p, get<1>(t)); +} + +} // namespace diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test2_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test2_test.cc new file mode 100644 index 00000000..79a8a87d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test2_test.cc @@ -0,0 +1,45 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + +#include "test/gtest-typed-test_test.h" +#include + +#if GTEST_HAS_TYPED_TEST_P + +// Tests that the same type-parameterized test case can be +// instantiated in different translation units linked together. +// (ContainerTest is also instantiated in gtest-typed-test_test.cc.) +INSTANTIATE_TYPED_TEST_CASE_P(Vector, ContainerTest, + testing::Types >); + +#endif // GTEST_HAS_TYPED_TEST_P diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.cc new file mode 100644 index 00000000..f2c39723 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.cc @@ -0,0 +1,360 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include +#include + +#include "test/gtest-typed-test_test.h" +#include + +using testing::Test; + +// Used for testing that SetUpTestCase()/TearDownTestCase(), fixture +// ctor/dtor, and SetUp()/TearDown() work correctly in typed tests and +// type-parameterized test. +template +class CommonTest : public Test { + // For some technical reason, SetUpTestCase() and TearDownTestCase() + // must be public. + public: + static void SetUpTestCase() { + shared_ = new T(5); + } + + static void TearDownTestCase() { + delete shared_; + shared_ = NULL; + } + + // This 'protected:' is optional. There's no harm in making all + // members of this fixture class template public. + protected: + // We used to use std::list here, but switched to std::vector since + // MSVC's doesn't compile cleanly with /W4. + typedef std::vector Vector; + typedef std::set IntSet; + + CommonTest() : value_(1) {} + + virtual ~CommonTest() { EXPECT_EQ(3, value_); } + + virtual void SetUp() { + EXPECT_EQ(1, value_); + value_++; + } + + virtual void TearDown() { + EXPECT_EQ(2, value_); + value_++; + } + + T value_; + static T* shared_; +}; + +template +T* CommonTest::shared_ = NULL; + +// This #ifdef block tests typed tests. +#if GTEST_HAS_TYPED_TEST + +using testing::Types; + +// Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor, +// and SetUp()/TearDown() work correctly in typed tests + +typedef Types TwoTypes; +TYPED_TEST_CASE(CommonTest, TwoTypes); + +TYPED_TEST(CommonTest, ValuesAreCorrect) { + // Static members of the fixture class template can be visited via + // the TestFixture:: prefix. + EXPECT_EQ(5, *TestFixture::shared_); + + // Typedefs in the fixture class template can be visited via the + // "typename TestFixture::" prefix. + typename TestFixture::Vector empty; + EXPECT_EQ(0U, empty.size()); + + typename TestFixture::IntSet empty2; + EXPECT_EQ(0U, empty2.size()); + + // Non-static members of the fixture class must be visited via + // 'this', as required by C++ for class templates. + EXPECT_EQ(2, this->value_); +} + +// The second test makes sure shared_ is not deleted after the first +// test. +TYPED_TEST(CommonTest, ValuesAreStillCorrect) { + // Static members of the fixture class template can also be visited + // via 'this'. + ASSERT_TRUE(this->shared_ != NULL); + EXPECT_EQ(5, *this->shared_); + + // TypeParam can be used to refer to the type parameter. + EXPECT_EQ(static_cast(2), this->value_); +} + +// Tests that multiple TYPED_TEST_CASE's can be defined in the same +// translation unit. + +template +class TypedTest1 : public Test { +}; + +// Verifies that the second argument of TYPED_TEST_CASE can be a +// single type. +TYPED_TEST_CASE(TypedTest1, int); +TYPED_TEST(TypedTest1, A) {} + +template +class TypedTest2 : public Test { +}; + +// Verifies that the second argument of TYPED_TEST_CASE can be a +// Types<...> type list. +TYPED_TEST_CASE(TypedTest2, Types); + +// This also verifies that tests from different typed test cases can +// share the same name. +TYPED_TEST(TypedTest2, A) {} + +// Tests that a typed test case can be defined in a namespace. + +namespace library1 { + +template +class NumericTest : public Test { +}; + +typedef Types NumericTypes; +TYPED_TEST_CASE(NumericTest, NumericTypes); + +TYPED_TEST(NumericTest, DefaultIsZero) { + EXPECT_EQ(0, TypeParam()); +} + +} // namespace library1 + +#endif // GTEST_HAS_TYPED_TEST + +// This #ifdef block tests type-parameterized tests. +#if GTEST_HAS_TYPED_TEST_P + +using testing::Types; +using testing::internal::TypedTestCasePState; + +// Tests TypedTestCasePState. + +class TypedTestCasePStateTest : public Test { + protected: + virtual void SetUp() { + state_.AddTestName("foo.cc", 0, "FooTest", "A"); + state_.AddTestName("foo.cc", 0, "FooTest", "B"); + state_.AddTestName("foo.cc", 0, "FooTest", "C"); + } + + TypedTestCasePState state_; +}; + +TEST_F(TypedTestCasePStateTest, SucceedsForMatchingList) { + const char* tests = "A, B, C"; + EXPECT_EQ(tests, + state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); +} + +// Makes sure that the order of the tests and spaces around the names +// don't matter. +TEST_F(TypedTestCasePStateTest, IgnoresOrderAndSpaces) { + const char* tests = "A,C, B"; + EXPECT_EQ(tests, + state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); +} + +typedef TypedTestCasePStateTest TypedTestCasePStateDeathTest; + +TEST_F(TypedTestCasePStateDeathTest, DetectsDuplicates) { + EXPECT_DEATH_IF_SUPPORTED( + state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, A, C"), + "foo\\.cc.1.?: Test A is listed more than once\\."); +} + +TEST_F(TypedTestCasePStateDeathTest, DetectsExtraTest) { + EXPECT_DEATH_IF_SUPPORTED( + state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C, D"), + "foo\\.cc.1.?: No test named D can be found in this test case\\."); +} + +TEST_F(TypedTestCasePStateDeathTest, DetectsMissedTest) { + EXPECT_DEATH_IF_SUPPORTED( + state_.VerifyRegisteredTestNames("foo.cc", 1, "A, C"), + "foo\\.cc.1.?: You forgot to list test B\\."); +} + +// Tests that defining a test for a parameterized test case generates +// a run-time error if the test case has been registered. +TEST_F(TypedTestCasePStateDeathTest, DetectsTestAfterRegistration) { + state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C"); + EXPECT_DEATH_IF_SUPPORTED( + state_.AddTestName("foo.cc", 2, "FooTest", "D"), + "foo\\.cc.2.?: Test D must be defined before REGISTER_TYPED_TEST_CASE_P" + "\\(FooTest, \\.\\.\\.\\)\\."); +} + +// Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor, +// and SetUp()/TearDown() work correctly in type-parameterized tests. + +template +class DerivedTest : public CommonTest { +}; + +TYPED_TEST_CASE_P(DerivedTest); + +TYPED_TEST_P(DerivedTest, ValuesAreCorrect) { + // Static members of the fixture class template can be visited via + // the TestFixture:: prefix. + EXPECT_EQ(5, *TestFixture::shared_); + + // Non-static members of the fixture class must be visited via + // 'this', as required by C++ for class templates. + EXPECT_EQ(2, this->value_); +} + +// The second test makes sure shared_ is not deleted after the first +// test. +TYPED_TEST_P(DerivedTest, ValuesAreStillCorrect) { + // Static members of the fixture class template can also be visited + // via 'this'. + ASSERT_TRUE(this->shared_ != NULL); + EXPECT_EQ(5, *this->shared_); + EXPECT_EQ(2, this->value_); +} + +REGISTER_TYPED_TEST_CASE_P(DerivedTest, + ValuesAreCorrect, ValuesAreStillCorrect); + +typedef Types MyTwoTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, DerivedTest, MyTwoTypes); + +// Tests that multiple TYPED_TEST_CASE_P's can be defined in the same +// translation unit. + +template +class TypedTestP1 : public Test { +}; + +TYPED_TEST_CASE_P(TypedTestP1); + +// For testing that the code between TYPED_TEST_CASE_P() and +// TYPED_TEST_P() is not enclosed in a namespace. +typedef int IntAfterTypedTestCaseP; + +TYPED_TEST_P(TypedTestP1, A) {} +TYPED_TEST_P(TypedTestP1, B) {} + +// For testing that the code between TYPED_TEST_P() and +// REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace. +typedef int IntBeforeRegisterTypedTestCaseP; + +REGISTER_TYPED_TEST_CASE_P(TypedTestP1, A, B); + +template +class TypedTestP2 : public Test { +}; + +TYPED_TEST_CASE_P(TypedTestP2); + +// This also verifies that tests from different type-parameterized +// test cases can share the same name. +TYPED_TEST_P(TypedTestP2, A) {} + +REGISTER_TYPED_TEST_CASE_P(TypedTestP2, A); + +// Verifies that the code between TYPED_TEST_CASE_P() and +// REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace. +IntAfterTypedTestCaseP after = 0; +IntBeforeRegisterTypedTestCaseP before = 0; + +// Verifies that the last argument of INSTANTIATE_TYPED_TEST_CASE_P() +// can be either a single type or a Types<...> type list. +INSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP1, int); +INSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP2, Types); + +// Tests that the same type-parameterized test case can be +// instantiated more than once in the same translation unit. +INSTANTIATE_TYPED_TEST_CASE_P(Double, TypedTestP2, Types); + +// Tests that the same type-parameterized test case can be +// instantiated in different translation units linked together. +// (ContainerTest is also instantiated in gtest-typed-test_test.cc.) +typedef Types, std::set > MyContainers; +INSTANTIATE_TYPED_TEST_CASE_P(My, ContainerTest, MyContainers); + +// Tests that a type-parameterized test case can be defined and +// instantiated in a namespace. + +namespace library2 { + +template +class NumericTest : public Test { +}; + +TYPED_TEST_CASE_P(NumericTest); + +TYPED_TEST_P(NumericTest, DefaultIsZero) { + EXPECT_EQ(0, TypeParam()); +} + +TYPED_TEST_P(NumericTest, ZeroIsLessThanOne) { + EXPECT_LT(TypeParam(0), TypeParam(1)); +} + +REGISTER_TYPED_TEST_CASE_P(NumericTest, + DefaultIsZero, ZeroIsLessThanOne); +typedef Types NumericTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes); + +} // namespace library2 + +#endif // GTEST_HAS_TYPED_TEST_P + +#if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P) + +// Google Test may not support type-parameterized tests with some +// compilers. If we use conditional compilation to compile out all +// code referring to the gtest_main library, MSVC linker will not link +// that library at all and consequently complain about missing entry +// point defined in that library (fatal error LNK1561: entry point +// must be defined). This dummy test keeps gtest_main linked in. +TEST(DummyTest, TypedTestsAreNotSupportedOnThisPlatform) {} + +#endif // #if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P) diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.h new file mode 100644 index 00000000..40dfeac6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-typed-test_test.h @@ -0,0 +1,66 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ +#define GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ + +#include + +#if GTEST_HAS_TYPED_TEST_P + +using testing::Test; + +// For testing that the same type-parameterized test case can be +// instantiated in different translation units linked together. +// ContainerTest will be instantiated in both gtest-typed-test_test.cc +// and gtest-typed-test2_test.cc. + +template +class ContainerTest : public Test { +}; + +TYPED_TEST_CASE_P(ContainerTest); + +TYPED_TEST_P(ContainerTest, CanBeDefaultConstructed) { + TypeParam container; +} + +TYPED_TEST_P(ContainerTest, InitialSizeIsZero) { + TypeParam container; + EXPECT_EQ(0U, container.size()); +} + +REGISTER_TYPED_TEST_CASE_P(ContainerTest, + CanBeDefaultConstructed, InitialSizeIsZero); + +#endif // GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-unittest-api_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-unittest-api_test.cc new file mode 100644 index 00000000..7e0f8f80 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest-unittest-api_test.cc @@ -0,0 +1,343 @@ +// Copyright 2009 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) +// +// The Google C++ Testing Framework (Google Test) +// +// This file contains tests verifying correctness of data provided via +// UnitTest's public methods. + +#include + +#include // For strcmp. +#include + +using ::testing::InitGoogleTest; + +namespace testing { +namespace internal { + +template +struct LessByName { + bool operator()(const T* a, const T* b) { + return strcmp(a->name(), b->name()) < 0; + } +}; + +class UnitTestHelper { + public: + // Returns the array of pointers to all test cases sorted by the test case + // name. The caller is responsible for deleting the array. + static TestCase const** const GetSortedTestCases() { + UnitTest& unit_test = *UnitTest::GetInstance(); + TestCase const** const test_cases = + new const TestCase*[unit_test.total_test_case_count()]; + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) + test_cases[i] = unit_test.GetTestCase(i); + + std::sort(test_cases, + test_cases + unit_test.total_test_case_count(), + LessByName()); + return test_cases; + } + + // Returns the test case by its name. The caller doesn't own the returned + // pointer. + static const TestCase* FindTestCase(const char* name) { + UnitTest& unit_test = *UnitTest::GetInstance(); + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase* test_case = unit_test.GetTestCase(i); + if (0 == strcmp(test_case->name(), name)) + return test_case; + } + return NULL; + } + + // Returns the array of pointers to all tests in a particular test case + // sorted by the test name. The caller is responsible for deleting the + // array. + static TestInfo const** const GetSortedTests(const TestCase* test_case) { + TestInfo const** const tests = + new const TestInfo*[test_case->total_test_count()]; + + for (int i = 0; i < test_case->total_test_count(); ++i) + tests[i] = test_case->GetTestInfo(i); + + std::sort(tests, tests + test_case->total_test_count(), + LessByName()); + return tests; + } +}; + +#if GTEST_HAS_TYPED_TEST +template class TestCaseWithCommentTest : public Test {}; +TYPED_TEST_CASE(TestCaseWithCommentTest, Types); +TYPED_TEST(TestCaseWithCommentTest, Dummy) {} + +const int kTypedTestCases = 1; +const int kTypedTests = 1; + +String GetExpectedTestCaseComment() { + Message comment; + comment << "TypeParam = " << GetTypeName().c_str(); + return comment.GetString(); +} +#else +const int kTypedTestCases = 0; +const int kTypedTests = 0; +#endif // GTEST_HAS_TYPED_TEST + +// We can only test the accessors that do not change value while tests run. +// Since tests can be run in any order, the values the accessors that track +// test execution (such as failed_test_count) can not be predicted. +TEST(ApiTest, UnitTestImmutableAccessorsWork) { + UnitTest* unit_test = UnitTest::GetInstance(); + + ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); + EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count()); + EXPECT_EQ(2, unit_test->disabled_test_count()); + EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count()); + EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count()); + + const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); + + EXPECT_STREQ("ApiTest", test_cases[0]->name()); + EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); +#if GTEST_HAS_TYPED_TEST + EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); +#endif // GTEST_HAS_TYPED_TEST + + delete[] test_cases; + + // The following lines initiate actions to verify certain methods in + // FinalSuccessChecker::TearDown. + + // Records a test property to verify TestResult::GetTestProperty(). + RecordProperty("key", "value"); +} + +TEST(ApiTest, TestCaseImmutableAccessorsWork) { + const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); + ASSERT_TRUE(test_case != NULL); + + EXPECT_STREQ("ApiTest", test_case->name()); + EXPECT_STREQ("", test_case->comment()); + EXPECT_TRUE(test_case->should_run()); + EXPECT_EQ(1, test_case->disabled_test_count()); + EXPECT_EQ(3, test_case->test_to_run_count()); + ASSERT_EQ(4, test_case->total_test_count()); + + const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); + + EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); + EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); + EXPECT_STREQ("", tests[0]->comment()); + EXPECT_STREQ("", tests[0]->test_case_comment()); + EXPECT_FALSE(tests[0]->should_run()); + + EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); + EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); + EXPECT_STREQ("", tests[1]->comment()); + EXPECT_STREQ("", tests[1]->test_case_comment()); + EXPECT_TRUE(tests[1]->should_run()); + + EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); + EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); + EXPECT_STREQ("", tests[2]->comment()); + EXPECT_STREQ("", tests[2]->test_case_comment()); + EXPECT_TRUE(tests[2]->should_run()); + + EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); + EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); + EXPECT_STREQ("", tests[3]->comment()); + EXPECT_STREQ("", tests[3]->test_case_comment()); + EXPECT_TRUE(tests[3]->should_run()); + + delete[] tests; + tests = NULL; + +#if GTEST_HAS_TYPED_TEST + test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); + ASSERT_TRUE(test_case != NULL); + + EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name()); + EXPECT_STREQ(GetExpectedTestCaseComment().c_str(), test_case->comment()); + EXPECT_TRUE(test_case->should_run()); + EXPECT_EQ(0, test_case->disabled_test_count()); + EXPECT_EQ(1, test_case->test_to_run_count()); + ASSERT_EQ(1, test_case->total_test_count()); + + tests = UnitTestHelper::GetSortedTests(test_case); + + EXPECT_STREQ("Dummy", tests[0]->name()); + EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); + EXPECT_STREQ("", tests[0]->comment()); + EXPECT_STREQ(GetExpectedTestCaseComment().c_str(), + tests[0]->test_case_comment()); + EXPECT_TRUE(tests[0]->should_run()); + + delete[] tests; +#endif // GTEST_HAS_TYPED_TEST +} + +TEST(ApiTest, TestCaseDisabledAccessorsWork) { + const TestCase* test_case = UnitTestHelper::FindTestCase("DISABLED_Test"); + ASSERT_TRUE(test_case != NULL); + + EXPECT_STREQ("DISABLED_Test", test_case->name()); + EXPECT_STREQ("", test_case->comment()); + EXPECT_FALSE(test_case->should_run()); + EXPECT_EQ(1, test_case->disabled_test_count()); + EXPECT_EQ(0, test_case->test_to_run_count()); + ASSERT_EQ(1, test_case->total_test_count()); + + const TestInfo* const test_info = test_case->GetTestInfo(0); + EXPECT_STREQ("Dummy2", test_info->name()); + EXPECT_STREQ("DISABLED_Test", test_info->test_case_name()); + EXPECT_STREQ("", test_info->comment()); + EXPECT_STREQ("", test_info->test_case_comment()); + EXPECT_FALSE(test_info->should_run()); +} + +// These two tests are here to provide support for testing +// test_case_to_run_count, disabled_test_count, and test_to_run_count. +TEST(ApiTest, DISABLED_Dummy1) {} +TEST(DISABLED_Test, Dummy2) {} + +class FinalSuccessChecker : public Environment { + protected: + virtual void TearDown() { + UnitTest* unit_test = UnitTest::GetInstance(); + + EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count()); + EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count()); + EXPECT_EQ(0, unit_test->failed_test_case_count()); + EXPECT_EQ(0, unit_test->failed_test_count()); + EXPECT_TRUE(unit_test->Passed()); + EXPECT_FALSE(unit_test->Failed()); + ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); + + const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); + + EXPECT_STREQ("ApiTest", test_cases[0]->name()); + EXPECT_STREQ("", test_cases[0]->comment()); + EXPECT_TRUE(test_cases[0]->should_run()); + EXPECT_EQ(1, test_cases[0]->disabled_test_count()); + ASSERT_EQ(4, test_cases[0]->total_test_count()); + EXPECT_EQ(3, test_cases[0]->successful_test_count()); + EXPECT_EQ(0, test_cases[0]->failed_test_count()); + EXPECT_TRUE(test_cases[0]->Passed()); + EXPECT_FALSE(test_cases[0]->Failed()); + + EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); + EXPECT_STREQ("", test_cases[1]->comment()); + EXPECT_FALSE(test_cases[1]->should_run()); + EXPECT_EQ(1, test_cases[1]->disabled_test_count()); + ASSERT_EQ(1, test_cases[1]->total_test_count()); + EXPECT_EQ(0, test_cases[1]->successful_test_count()); + EXPECT_EQ(0, test_cases[1]->failed_test_count()); + +#if GTEST_HAS_TYPED_TEST + EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); + EXPECT_STREQ(GetExpectedTestCaseComment().c_str(), + test_cases[2]->comment()); + EXPECT_TRUE(test_cases[2]->should_run()); + EXPECT_EQ(0, test_cases[2]->disabled_test_count()); + ASSERT_EQ(1, test_cases[2]->total_test_count()); + EXPECT_EQ(1, test_cases[2]->successful_test_count()); + EXPECT_EQ(0, test_cases[2]->failed_test_count()); + EXPECT_TRUE(test_cases[2]->Passed()); + EXPECT_FALSE(test_cases[2]->Failed()); +#endif // GTEST_HAS_TYPED_TEST + + const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); + const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); + EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); + EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); + EXPECT_FALSE(tests[0]->should_run()); + + EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); + EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); + EXPECT_STREQ("", tests[1]->comment()); + EXPECT_STREQ("", tests[1]->test_case_comment()); + EXPECT_TRUE(tests[1]->should_run()); + EXPECT_TRUE(tests[1]->result()->Passed()); + EXPECT_EQ(0, tests[1]->result()->test_property_count()); + + EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); + EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); + EXPECT_STREQ("", tests[2]->comment()); + EXPECT_STREQ("", tests[2]->test_case_comment()); + EXPECT_TRUE(tests[2]->should_run()); + EXPECT_TRUE(tests[2]->result()->Passed()); + EXPECT_EQ(0, tests[2]->result()->test_property_count()); + + EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); + EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); + EXPECT_STREQ("", tests[3]->comment()); + EXPECT_STREQ("", tests[3]->test_case_comment()); + EXPECT_TRUE(tests[3]->should_run()); + EXPECT_TRUE(tests[3]->result()->Passed()); + EXPECT_EQ(1, tests[3]->result()->test_property_count()); + const TestProperty& property = tests[3]->result()->GetTestProperty(0); + EXPECT_STREQ("key", property.key()); + EXPECT_STREQ("value", property.value()); + + delete[] tests; + +#if GTEST_HAS_TYPED_TEST + test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); + tests = UnitTestHelper::GetSortedTests(test_case); + + EXPECT_STREQ("Dummy", tests[0]->name()); + EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); + EXPECT_STREQ("", tests[0]->comment()); + EXPECT_STREQ(GetExpectedTestCaseComment().c_str(), + tests[0]->test_case_comment()); + EXPECT_TRUE(tests[0]->should_run()); + EXPECT_TRUE(tests[0]->result()->Passed()); + EXPECT_EQ(0, tests[0]->result()->test_property_count()); + + delete[] tests; +#endif // GTEST_HAS_TYPED_TEST + delete[] test_cases; + } +}; + +} // namespace internal +} // namespace testing + +int main(int argc, char **argv) { + InitGoogleTest(&argc, argv); + + AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker()); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_all_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_all_test.cc new file mode 100644 index 00000000..e1edb08e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_all_test.cc @@ -0,0 +1,48 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Tests for Google C++ Testing Framework (Google Test) +// +// Sometimes it's desirable to build most of Google Test's own tests +// by compiling a single file. This file serves this purpose. +#include "test/gtest-filepath_test.cc" +#include "test/gtest-linked_ptr_test.cc" +#include "test/gtest-message_test.cc" +#include "test/gtest-options_test.cc" +#include "test/gtest-port_test.cc" +#include "test/gtest_pred_impl_unittest.cc" +#include "test/gtest_prod_test.cc" +#include "test/gtest-test-part_test.cc" +#include "test/gtest-typed-test_test.cc" +#include "test/gtest-typed-test2_test.cc" +#include "test/gtest_unittest.cc" +#include "test/production.cc" +#include "src/gtest_main.cc" diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest.py new file mode 100755 index 00000000..c8191833 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test for Google Test's break-on-failure mode. + +A user can ask Google Test to seg-fault when an assertion fails, using +either the GTEST_BREAK_ON_FAILURE environment variable or the +--gtest_break_on_failure flag. This script tests such functionality +by invoking gtest_break_on_failure_unittest_ (a program written with +Google Test) with different environments and command line flags. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import gtest_test_utils +import os +import sys + + +# Constants. + +IS_WINDOWS = os.name == 'nt' + +# The environment variable for enabling/disabling the break-on-failure mode. +BREAK_ON_FAILURE_ENV_VAR = 'GTEST_BREAK_ON_FAILURE' + +# The command line flag for enabling/disabling the break-on-failure mode. +BREAK_ON_FAILURE_FLAG = 'gtest_break_on_failure' + +# The environment variable for enabling/disabling the throw-on-failure mode. +THROW_ON_FAILURE_ENV_VAR = 'GTEST_THROW_ON_FAILURE' + +# The environment variable for enabling/disabling the catch-exceptions mode. +CATCH_EXCEPTIONS_ENV_VAR = 'GTEST_CATCH_EXCEPTIONS' + +# Path to the gtest_break_on_failure_unittest_ program. +EXE_PATH = gtest_test_utils.GetTestExecutablePath( + 'gtest_break_on_failure_unittest_') + + +# Utilities. + + +environ = os.environ.copy() + + +def SetEnvVar(env_var, value): + """Sets an environment variable to a given value; unsets it when the + given value is None. + """ + + if value is not None: + environ[env_var] = value + elif env_var in environ: + del environ[env_var] + + +def Run(command): + """Runs a command; returns 1 if it was killed by a signal, or 0 otherwise.""" + + p = gtest_test_utils.Subprocess(command, env=environ) + if p.terminated_by_signal: + return 1 + else: + return 0 + + +# The tests. + + +class GTestBreakOnFailureUnitTest(gtest_test_utils.TestCase): + """Tests using the GTEST_BREAK_ON_FAILURE environment variable or + the --gtest_break_on_failure flag to turn assertion failures into + segmentation faults. + """ + + def RunAndVerify(self, env_var_value, flag_value, expect_seg_fault): + """Runs gtest_break_on_failure_unittest_ and verifies that it does + (or does not) have a seg-fault. + + Args: + env_var_value: value of the GTEST_BREAK_ON_FAILURE environment + variable; None if the variable should be unset. + flag_value: value of the --gtest_break_on_failure flag; + None if the flag should not be present. + expect_seg_fault: 1 if the program is expected to generate a seg-fault; + 0 otherwise. + """ + + SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, env_var_value) + + if env_var_value is None: + env_var_value_msg = ' is not set' + else: + env_var_value_msg = '=' + env_var_value + + if flag_value is None: + flag = '' + elif flag_value == '0': + flag = '--%s=0' % BREAK_ON_FAILURE_FLAG + else: + flag = '--%s' % BREAK_ON_FAILURE_FLAG + + command = [EXE_PATH] + if flag: + command.append(flag) + + if expect_seg_fault: + should_or_not = 'should' + else: + should_or_not = 'should not' + + has_seg_fault = Run(command) + + SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, None) + + msg = ('when %s%s, an assertion failure in "%s" %s cause a seg-fault.' % + (BREAK_ON_FAILURE_ENV_VAR, env_var_value_msg, ' '.join(command), + should_or_not)) + self.assert_(has_seg_fault == expect_seg_fault, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" + + self.RunAndVerify(env_var_value=None, + flag_value=None, + expect_seg_fault=0) + + def testEnvVar(self): + """Tests using the GTEST_BREAK_ON_FAILURE environment variable.""" + + self.RunAndVerify(env_var_value='0', + flag_value=None, + expect_seg_fault=0) + self.RunAndVerify(env_var_value='1', + flag_value=None, + expect_seg_fault=1) + + def testFlag(self): + """Tests using the --gtest_break_on_failure flag.""" + + self.RunAndVerify(env_var_value=None, + flag_value='0', + expect_seg_fault=0) + self.RunAndVerify(env_var_value=None, + flag_value='1', + expect_seg_fault=1) + + def testFlagOverridesEnvVar(self): + """Tests that the flag overrides the environment variable.""" + + self.RunAndVerify(env_var_value='0', + flag_value='0', + expect_seg_fault=0) + self.RunAndVerify(env_var_value='0', + flag_value='1', + expect_seg_fault=1) + self.RunAndVerify(env_var_value='1', + flag_value='0', + expect_seg_fault=0) + self.RunAndVerify(env_var_value='1', + flag_value='1', + expect_seg_fault=1) + + def testBreakOnFailureOverridesThrowOnFailure(self): + """Tests that gtest_break_on_failure overrides gtest_throw_on_failure.""" + + SetEnvVar(THROW_ON_FAILURE_ENV_VAR, '1') + try: + self.RunAndVerify(env_var_value=None, + flag_value='1', + expect_seg_fault=1) + finally: + SetEnvVar(THROW_ON_FAILURE_ENV_VAR, None) + + if IS_WINDOWS: + def testCatchExceptionsDoesNotInterfere(self): + """Tests that gtest_catch_exceptions doesn't interfere.""" + + SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, '1') + try: + self.RunAndVerify(env_var_value='1', + flag_value='1', + expect_seg_fault=1) + finally: + SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, None) + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest_.cc new file mode 100644 index 00000000..d28d1d3d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_break_on_failure_unittest_.cc @@ -0,0 +1,86 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Unit test for Google Test's break-on-failure mode. +// +// A user can ask Google Test to seg-fault when an assertion fails, using +// either the GTEST_BREAK_ON_FAILURE environment variable or the +// --gtest_break_on_failure flag. This file is used for testing such +// functionality. +// +// This program will be invoked from a Python unit test. It is +// expected to fail. Don't run it directly. + +#include + +#if GTEST_OS_WINDOWS +#include +#include +#endif + +namespace { + +// A test that's expected to fail. +TEST(Foo, Bar) { + EXPECT_EQ(2, 3); +} + +#if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE +// On Windows Mobile global exception handlers are not supported. +LONG WINAPI ExitWithExceptionCode( + struct _EXCEPTION_POINTERS* exception_pointers) { + exit(exception_pointers->ExceptionRecord->ExceptionCode); +} +#endif + +} // namespace + +int main(int argc, char **argv) { +#if GTEST_OS_WINDOWS + // Suppresses display of the Windows error dialog upon encountering + // a general protection fault (segment violation). + SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); + +#if !GTEST_OS_WINDOWS_MOBILE + // The default unhandled exception filter does not always exit + // with the exception code as exit code - for example it exits with + // 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT + // if the application is compiled in debug mode. Thus we use our own + // filter which always exits with the exception code for unhandled + // exceptions. + SetUnhandledExceptionFilter(ExitWithExceptionCode); +#endif +#endif + + testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test.py new file mode 100755 index 00000000..d02a53ed --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Verifies that Google Test correctly determines whether to use colors.""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import gtest_test_utils + + +IS_WINDOWS = os.name = 'nt' + +COLOR_ENV_VAR = 'GTEST_COLOR' +COLOR_FLAG = 'gtest_color' +COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_color_test_') + + +def SetEnvVar(env_var, value): + """Sets the env variable to 'value'; unsets it when 'value' is None.""" + + if value is not None: + os.environ[env_var] = value + elif env_var in os.environ: + del os.environ[env_var] + + +def UsesColor(term, color_env_var, color_flag): + """Runs gtest_color_test_ and returns its exit code.""" + + SetEnvVar('TERM', term) + SetEnvVar(COLOR_ENV_VAR, color_env_var) + + if color_flag is None: + args = [] + else: + args = ['--%s=%s' % (COLOR_FLAG, color_flag)] + p = gtest_test_utils.Subprocess([COMMAND] + args) + return not p.exited or p.exit_code + + +class GTestColorTest(gtest_test_utils.TestCase): + def testNoEnvVarNoFlag(self): + """Tests the case when there's neither GTEST_COLOR nor --gtest_color.""" + + if not IS_WINDOWS: + self.assert_(not UsesColor('dumb', None, None)) + self.assert_(not UsesColor('emacs', None, None)) + self.assert_(not UsesColor('xterm-mono', None, None)) + self.assert_(not UsesColor('unknown', None, None)) + self.assert_(not UsesColor(None, None, None)) + self.assert_(UsesColor('linux', None, None)) + self.assert_(UsesColor('cygwin', None, None)) + self.assert_(UsesColor('xterm', None, None)) + self.assert_(UsesColor('xterm-color', None, None)) + self.assert_(UsesColor('xterm-256color', None, None)) + + def testFlagOnly(self): + """Tests the case when there's --gtest_color but not GTEST_COLOR.""" + + self.assert_(not UsesColor('dumb', None, 'no')) + self.assert_(not UsesColor('xterm-color', None, 'no')) + if not IS_WINDOWS: + self.assert_(not UsesColor('emacs', None, 'auto')) + self.assert_(UsesColor('xterm', None, 'auto')) + self.assert_(UsesColor('dumb', None, 'yes')) + self.assert_(UsesColor('xterm', None, 'yes')) + + def testEnvVarOnly(self): + """Tests the case when there's GTEST_COLOR but not --gtest_color.""" + + self.assert_(not UsesColor('dumb', 'no', None)) + self.assert_(not UsesColor('xterm-color', 'no', None)) + if not IS_WINDOWS: + self.assert_(not UsesColor('dumb', 'auto', None)) + self.assert_(UsesColor('xterm-color', 'auto', None)) + self.assert_(UsesColor('dumb', 'yes', None)) + self.assert_(UsesColor('xterm-color', 'yes', None)) + + def testEnvVarAndFlag(self): + """Tests the case when there are both GTEST_COLOR and --gtest_color.""" + + self.assert_(not UsesColor('xterm-color', 'no', 'no')) + self.assert_(UsesColor('dumb', 'no', 'yes')) + self.assert_(UsesColor('xterm-color', 'no', 'auto')) + + def testAliasesOfYesAndNo(self): + """Tests using aliases in specifying --gtest_color.""" + + self.assert_(UsesColor('dumb', None, 'true')) + self.assert_(UsesColor('dumb', None, 'YES')) + self.assert_(UsesColor('dumb', None, 'T')) + self.assert_(UsesColor('dumb', None, '1')) + + self.assert_(not UsesColor('xterm', None, 'f')) + self.assert_(not UsesColor('xterm', None, 'false')) + self.assert_(not UsesColor('xterm', None, '0')) + self.assert_(not UsesColor('xterm', None, 'unknown')) + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test_.cc new file mode 100644 index 00000000..58d377c9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_color_test_.cc @@ -0,0 +1,71 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// A helper program for testing how Google Test determines whether to use +// colors in the output. It prints "YES" and returns 1 if Google Test +// decides to use colors, and prints "NO" and returns 0 otherwise. + +#include + +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +using testing::internal::ShouldUseColor; + +// The purpose of this is to ensure that the UnitTest singleton is +// created before main() is entered, and thus that ShouldUseColor() +// works the same way as in a real Google-Test-based test. We don't actual +// run the TEST itself. +TEST(GTestColorTest, Dummy) { +} + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + + if (ShouldUseColor(true)) { + // Google Test decides to use colors in the output (assuming it + // goes to a TTY). + printf("YES\n"); + return 1; + } else { + // Google Test decides not to use colors in the output. + printf("NO\n"); + return 0; + } +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test.py new file mode 100755 index 00000000..bcc0bfd5 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Verifies that Google Test correctly parses environment variables.""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import gtest_test_utils + + +IS_WINDOWS = os.name == 'nt' +IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' + +COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_env_var_test_') + +environ = os.environ.copy() + + +def AssertEq(expected, actual): + if expected != actual: + print 'Expected: %s' % (expected,) + print ' Actual: %s' % (actual,) + raise AssertionError + + +def SetEnvVar(env_var, value): + """Sets the env variable to 'value'; unsets it when 'value' is None.""" + + if value is not None: + environ[env_var] = value + elif env_var in environ: + del environ[env_var] + + +def GetFlag(flag): + """Runs gtest_env_var_test_ and returns its output.""" + + args = [COMMAND] + if flag is not None: + args += [flag] + return gtest_test_utils.Subprocess(args, env=environ).output + + +def TestFlag(flag, test_val, default_val): + """Verifies that the given flag is affected by the corresponding env var.""" + + env_var = 'GTEST_' + flag.upper() + SetEnvVar(env_var, test_val) + AssertEq(test_val, GetFlag(flag)) + SetEnvVar(env_var, None) + AssertEq(default_val, GetFlag(flag)) + + +class GTestEnvVarTest(gtest_test_utils.TestCase): + def testEnvVarAffectsFlag(self): + """Tests that environment variable should affect the corresponding flag.""" + + TestFlag('break_on_failure', '1', '0') + TestFlag('color', 'yes', 'auto') + TestFlag('filter', 'FooTest.Bar', '*') + TestFlag('output', 'xml:tmp/foo.xml', '') + TestFlag('print_time', '0', '1') + TestFlag('repeat', '999', '1') + TestFlag('throw_on_failure', '1', '0') + TestFlag('death_test_style', 'threadsafe', 'fast') + + if IS_WINDOWS: + TestFlag('catch_exceptions', '1', '0') + + if IS_LINUX: + TestFlag('death_test_use_fork', '1', '0') + TestFlag('stack_trace_depth', '0', '100') + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test_.cc new file mode 100644 index 00000000..f7c78fcf --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_env_var_test_.cc @@ -0,0 +1,126 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// A helper program for testing that Google Test parses the environment +// variables correctly. + +#include + +#include + +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +using ::std::cout; + +namespace testing { + +// The purpose of this is to make the test more realistic by ensuring +// that the UnitTest singleton is created before main() is entered. +// We don't actual run the TEST itself. +TEST(GTestEnvVarTest, Dummy) { +} + +void PrintFlag(const char* flag) { + if (strcmp(flag, "break_on_failure") == 0) { + cout << GTEST_FLAG(break_on_failure); + return; + } + + if (strcmp(flag, "catch_exceptions") == 0) { + cout << GTEST_FLAG(catch_exceptions); + return; + } + + if (strcmp(flag, "color") == 0) { + cout << GTEST_FLAG(color); + return; + } + + if (strcmp(flag, "death_test_style") == 0) { + cout << GTEST_FLAG(death_test_style); + return; + } + + if (strcmp(flag, "death_test_use_fork") == 0) { + cout << GTEST_FLAG(death_test_use_fork); + return; + } + + if (strcmp(flag, "filter") == 0) { + cout << GTEST_FLAG(filter); + return; + } + + if (strcmp(flag, "output") == 0) { + cout << GTEST_FLAG(output); + return; + } + + if (strcmp(flag, "print_time") == 0) { + cout << GTEST_FLAG(print_time); + return; + } + + if (strcmp(flag, "repeat") == 0) { + cout << GTEST_FLAG(repeat); + return; + } + + if (strcmp(flag, "stack_trace_depth") == 0) { + cout << GTEST_FLAG(stack_trace_depth); + return; + } + + if (strcmp(flag, "throw_on_failure") == 0) { + cout << GTEST_FLAG(throw_on_failure); + return; + } + + cout << "Invalid flag name " << flag + << ". Valid names are break_on_failure, color, filter, etc.\n"; + exit(1); +} + +} // namespace testing + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + + if (argc != 2) { + cout << "Usage: gtest_env_var_test_ NAME_OF_FLAG\n"; + return 1; + } + + testing::PrintFlag(argv[1]); + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_environment_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_environment_test.cc new file mode 100644 index 00000000..c9392614 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_environment_test.cc @@ -0,0 +1,186 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Tests using global test environments. + +#include +#include +#include + +namespace testing { +GTEST_DECLARE_string_(filter); +} + +namespace { + +enum FailureType { + NO_FAILURE, NON_FATAL_FAILURE, FATAL_FAILURE +}; + +// For testing using global test environments. +class MyEnvironment : public testing::Environment { + public: + MyEnvironment() { Reset(); } + + // Depending on the value of failure_in_set_up_, SetUp() will + // generate a non-fatal failure, generate a fatal failure, or + // succeed. + virtual void SetUp() { + set_up_was_run_ = true; + + switch (failure_in_set_up_) { + case NON_FATAL_FAILURE: + ADD_FAILURE() << "Expected non-fatal failure in global set-up."; + break; + case FATAL_FAILURE: + FAIL() << "Expected fatal failure in global set-up."; + break; + default: + break; + } + } + + // Generates a non-fatal failure. + virtual void TearDown() { + tear_down_was_run_ = true; + ADD_FAILURE() << "Expected non-fatal failure in global tear-down."; + } + + // Resets the state of the environment s.t. it can be reused. + void Reset() { + failure_in_set_up_ = NO_FAILURE; + set_up_was_run_ = false; + tear_down_was_run_ = false; + } + + // We call this function to set the type of failure SetUp() should + // generate. + void set_failure_in_set_up(FailureType type) { + failure_in_set_up_ = type; + } + + // Was SetUp() run? + bool set_up_was_run() const { return set_up_was_run_; } + + // Was TearDown() run? + bool tear_down_was_run() const { return tear_down_was_run_; } + private: + FailureType failure_in_set_up_; + bool set_up_was_run_; + bool tear_down_was_run_; +}; + +// Was the TEST run? +bool test_was_run; + +// The sole purpose of this TEST is to enable us to check whether it +// was run. +TEST(FooTest, Bar) { + test_was_run = true; +} + +// Prints the message and aborts the program if condition is false. +void Check(bool condition, const char* msg) { + if (!condition) { + printf("FAILED: %s\n", msg); + abort(); + } +} + +// Runs the tests. Return true iff successful. +// +// The 'failure' parameter specifies the type of failure that should +// be generated by the global set-up. +int RunAllTests(MyEnvironment* env, FailureType failure) { + env->Reset(); + env->set_failure_in_set_up(failure); + test_was_run = false; + return RUN_ALL_TESTS(); +} + +} // namespace + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + + // Registers a global test environment, and verifies that the + // registration function returns its argument. + MyEnvironment* const env = new MyEnvironment; + Check(testing::AddGlobalTestEnvironment(env) == env, + "AddGlobalTestEnvironment() should return its argument."); + + // Verifies that RUN_ALL_TESTS() runs the tests when the global + // set-up is successful. + Check(RunAllTests(env, NO_FAILURE) != 0, + "RUN_ALL_TESTS() should return non-zero, as the global tear-down " + "should generate a failure."); + Check(test_was_run, + "The tests should run, as the global set-up should generate no " + "failure"); + Check(env->tear_down_was_run(), + "The global tear-down should run, as the global set-up was run."); + + // Verifies that RUN_ALL_TESTS() runs the tests when the global + // set-up generates no fatal failure. + Check(RunAllTests(env, NON_FATAL_FAILURE) != 0, + "RUN_ALL_TESTS() should return non-zero, as both the global set-up " + "and the global tear-down should generate a non-fatal failure."); + Check(test_was_run, + "The tests should run, as the global set-up should generate no " + "fatal failure."); + Check(env->tear_down_was_run(), + "The global tear-down should run, as the global set-up was run."); + + // Verifies that RUN_ALL_TESTS() runs no test when the global set-up + // generates a fatal failure. + Check(RunAllTests(env, FATAL_FAILURE) != 0, + "RUN_ALL_TESTS() should return non-zero, as the global set-up " + "should generate a fatal failure."); + Check(!test_was_run, + "The tests should not run, as the global set-up should generate " + "a fatal failure."); + Check(env->tear_down_was_run(), + "The global tear-down should run, as the global set-up was run."); + + // Verifies that RUN_ALL_TESTS() doesn't do global set-up or + // tear-down when there is no test to run. + testing::GTEST_FLAG(filter) = "-*"; + Check(RunAllTests(env, NO_FAILURE) == 0, + "RUN_ALL_TESTS() should return zero, as there is no test to run."); + Check(!env->set_up_was_run(), + "The global set-up should not run, as there is no test to run."); + Check(!env->tear_down_was_run(), + "The global tear-down should not run, " + "as the global set-up was not run."); + + printf("PASS\n"); + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest.py new file mode 100755 index 00000000..0d1a7700 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest.py @@ -0,0 +1,633 @@ +#!/usr/bin/env python +# +# Copyright 2005 Google Inc. All Rights Reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test for Google Test test filters. + +A user can specify which test(s) in a Google Test program to run via either +the GTEST_FILTER environment variable or the --gtest_filter flag. +This script tests such functionality by invoking +gtest_filter_unittest_ (a program written with Google Test) with different +environments and command line flags. + +Note that test sharding may also influence which tests are filtered. Therefore, +we test that here also. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import re +import sets +import sys + +import gtest_test_utils + +# Constants. + +# Checks if this platform can pass empty environment variables to child +# processes. We set an env variable to an empty string and invoke a python +# script in a subprocess to print whether the variable is STILL in +# os.environ. We then use 'eval' to parse the child's output so that an +# exception is thrown if the input is anything other than 'True' nor 'False'. +os.environ['EMPTY_VAR'] = '' +child = gtest_test_utils.Subprocess( + [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ']) +CAN_PASS_EMPTY_ENV = eval(child.output) + + +# Check if this platform can unset environment variables in child processes. +# We set an env variable to a non-empty string, unset it, and invoke +# a python script in a subprocess to print whether the variable +# is NO LONGER in os.environ. +# We use 'eval' to parse the child's output so that an exception +# is thrown if the input is neither 'True' nor 'False'. +os.environ['UNSET_VAR'] = 'X' +del os.environ['UNSET_VAR'] +child = gtest_test_utils.Subprocess( + [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ']) +CAN_UNSET_ENV = eval(child.output) + + +# Checks if we should test with an empty filter. This doesn't +# make sense on platforms that cannot pass empty env variables (Win32) +# and on platforms that cannot unset variables (since we cannot tell +# the difference between "" and NULL -- Borland and Solaris < 5.10) +CAN_TEST_EMPTY_FILTER = (CAN_PASS_EMPTY_ENV and CAN_UNSET_ENV) + + +# The environment variable for specifying the test filters. +FILTER_ENV_VAR = 'GTEST_FILTER' + +# The environment variables for test sharding. +TOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' +SHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' +SHARD_STATUS_FILE_ENV_VAR = 'GTEST_SHARD_STATUS_FILE' + +# The command line flag for specifying the test filters. +FILTER_FLAG = 'gtest_filter' + +# The command line flag for including disabled tests. +ALSO_RUN_DISABED_TESTS_FLAG = 'gtest_also_run_disabled_tests' + +# Command to run the gtest_filter_unittest_ program. +COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_filter_unittest_') + +# Regex for determining whether parameterized tests are enabled in the binary. +PARAM_TEST_REGEX = re.compile(r'/ParamTest') + +# Regex for parsing test case names from Google Test's output. +TEST_CASE_REGEX = re.compile(r'^\[\-+\] \d+ tests? from (\w+(/\w+)?)') + +# Regex for parsing test names from Google Test's output. +TEST_REGEX = re.compile(r'^\[\s*RUN\s*\].*\.(\w+(/\w+)?)') + +# The command line flag to tell Google Test to output the list of tests it +# will run. +LIST_TESTS_FLAG = '--gtest_list_tests' + +# Indicates whether Google Test supports death tests. +SUPPORTS_DEATH_TESTS = 'HasDeathTest' in gtest_test_utils.Subprocess( + [COMMAND, LIST_TESTS_FLAG]).output + +# Full names of all tests in gtest_filter_unittests_. +PARAM_TESTS = [ + 'SeqP/ParamTest.TestX/0', + 'SeqP/ParamTest.TestX/1', + 'SeqP/ParamTest.TestY/0', + 'SeqP/ParamTest.TestY/1', + 'SeqQ/ParamTest.TestX/0', + 'SeqQ/ParamTest.TestX/1', + 'SeqQ/ParamTest.TestY/0', + 'SeqQ/ParamTest.TestY/1', + ] + +DISABLED_TESTS = [ + 'BarTest.DISABLED_TestFour', + 'BarTest.DISABLED_TestFive', + 'BazTest.DISABLED_TestC', + 'DISABLED_FoobarTest.Test1', + 'DISABLED_FoobarTest.DISABLED_Test2', + 'DISABLED_FoobarbazTest.TestA', + ] + +if SUPPORTS_DEATH_TESTS: + DEATH_TESTS = [ + 'HasDeathTest.Test1', + 'HasDeathTest.Test2', + ] +else: + DEATH_TESTS = [] + +# All the non-disabled tests. +ACTIVE_TESTS = [ + 'FooTest.Abc', + 'FooTest.Xyz', + + 'BarTest.TestOne', + 'BarTest.TestTwo', + 'BarTest.TestThree', + + 'BazTest.TestOne', + 'BazTest.TestA', + 'BazTest.TestB', + ] + DEATH_TESTS + PARAM_TESTS + +param_tests_present = None + +# Utilities. + +environ = os.environ.copy() + + +def SetEnvVar(env_var, value): + """Sets the env variable to 'value'; unsets it when 'value' is None.""" + + if value is not None: + environ[env_var] = value + elif env_var in environ: + del environ[env_var] + + +def RunAndReturnOutput(args = None): + """Runs the test program and returns its output.""" + + return gtest_test_utils.Subprocess([COMMAND] + (args or []), + env=environ).output + + +def RunAndExtractTestList(args = None): + """Runs the test program and returns its exit code and a list of tests run.""" + + p = gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ) + tests_run = [] + test_case = '' + test = '' + for line in p.output.split('\n'): + match = TEST_CASE_REGEX.match(line) + if match is not None: + test_case = match.group(1) + else: + match = TEST_REGEX.match(line) + if match is not None: + test = match.group(1) + tests_run.append(test_case + '.' + test) + return (tests_run, p.exit_code) + + +def InvokeWithModifiedEnv(extra_env, function, *args, **kwargs): + """Runs the given function and arguments in a modified environment.""" + try: + original_env = environ.copy() + environ.update(extra_env) + return function(*args, **kwargs) + finally: + environ.clear() + environ.update(original_env) + + +def RunWithSharding(total_shards, shard_index, command): + """Runs a test program shard and returns exit code and a list of tests run.""" + + extra_env = {SHARD_INDEX_ENV_VAR: str(shard_index), + TOTAL_SHARDS_ENV_VAR: str(total_shards)} + return InvokeWithModifiedEnv(extra_env, RunAndExtractTestList, command) + +# The unit test. + + +class GTestFilterUnitTest(gtest_test_utils.TestCase): + """Tests the env variable or the command line flag to filter tests.""" + + # Utilities. + + def AssertSetEqual(self, lhs, rhs): + """Asserts that two sets are equal.""" + + for elem in lhs: + self.assert_(elem in rhs, '%s in %s' % (elem, rhs)) + + for elem in rhs: + self.assert_(elem in lhs, '%s in %s' % (elem, lhs)) + + def AssertPartitionIsValid(self, set_var, list_of_sets): + """Asserts that list_of_sets is a valid partition of set_var.""" + + full_partition = [] + for slice_var in list_of_sets: + full_partition.extend(slice_var) + self.assertEqual(len(set_var), len(full_partition)) + self.assertEqual(sets.Set(set_var), sets.Set(full_partition)) + + def AdjustForParameterizedTests(self, tests_to_run): + """Adjust tests_to_run in case value parameterized tests are disabled.""" + + global param_tests_present + if not param_tests_present: + return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS)) + else: + return tests_to_run + + def RunAndVerify(self, gtest_filter, tests_to_run): + """Checks that the binary runs correct set of tests for a given filter.""" + + tests_to_run = self.AdjustForParameterizedTests(tests_to_run) + + # First, tests using the environment variable. + + # Windows removes empty variables from the environment when passing it + # to a new process. This means it is impossible to pass an empty filter + # into a process using the environment variable. However, we can still + # test the case when the variable is not supplied (i.e., gtest_filter is + # None). + # pylint: disable-msg=C6403 + if CAN_TEST_EMPTY_FILTER or gtest_filter != '': + SetEnvVar(FILTER_ENV_VAR, gtest_filter) + tests_run = RunAndExtractTestList()[0] + SetEnvVar(FILTER_ENV_VAR, None) + self.AssertSetEqual(tests_run, tests_to_run) + # pylint: enable-msg=C6403 + + # Next, tests using the command line flag. + + if gtest_filter is None: + args = [] + else: + args = ['--%s=%s' % (FILTER_FLAG, gtest_filter)] + + tests_run = RunAndExtractTestList(args)[0] + self.AssertSetEqual(tests_run, tests_to_run) + + def RunAndVerifyWithSharding(self, gtest_filter, total_shards, tests_to_run, + args=None, check_exit_0=False): + """Checks that binary runs correct tests for the given filter and shard. + + Runs all shards of gtest_filter_unittest_ with the given filter, and + verifies that the right set of tests were run. The union of tests run + on each shard should be identical to tests_to_run, without duplicates. + + Args: + gtest_filter: A filter to apply to the tests. + total_shards: A total number of shards to split test run into. + tests_to_run: A set of tests expected to run. + args : Arguments to pass to the to the test binary. + check_exit_0: When set to a true value, make sure that all shards + return 0. + """ + + tests_to_run = self.AdjustForParameterizedTests(tests_to_run) + + # Windows removes empty variables from the environment when passing it + # to a new process. This means it is impossible to pass an empty filter + # into a process using the environment variable. However, we can still + # test the case when the variable is not supplied (i.e., gtest_filter is + # None). + # pylint: disable-msg=C6403 + if CAN_TEST_EMPTY_FILTER or gtest_filter != '': + SetEnvVar(FILTER_ENV_VAR, gtest_filter) + partition = [] + for i in range(0, total_shards): + (tests_run, exit_code) = RunWithSharding(total_shards, i, args) + if check_exit_0: + self.assertEqual(0, exit_code) + partition.append(tests_run) + + self.AssertPartitionIsValid(tests_to_run, partition) + SetEnvVar(FILTER_ENV_VAR, None) + # pylint: enable-msg=C6403 + + def RunAndVerifyAllowingDisabled(self, gtest_filter, tests_to_run): + """Checks that the binary runs correct set of tests for the given filter. + + Runs gtest_filter_unittest_ with the given filter, and enables + disabled tests. Verifies that the right set of tests were run. + + Args: + gtest_filter: A filter to apply to the tests. + tests_to_run: A set of tests expected to run. + """ + + tests_to_run = self.AdjustForParameterizedTests(tests_to_run) + + # Construct the command line. + args = ['--%s' % ALSO_RUN_DISABED_TESTS_FLAG] + if gtest_filter is not None: + args.append('--%s=%s' % (FILTER_FLAG, gtest_filter)) + + tests_run = RunAndExtractTestList(args)[0] + self.AssertSetEqual(tests_run, tests_to_run) + + def setUp(self): + """Sets up test case. + + Determines whether value-parameterized tests are enabled in the binary and + sets the flags accordingly. + """ + + global param_tests_present + if param_tests_present is None: + param_tests_present = PARAM_TEST_REGEX.search( + RunAndReturnOutput()) is not None + + def testDefaultBehavior(self): + """Tests the behavior of not specifying the filter.""" + + self.RunAndVerify(None, ACTIVE_TESTS) + + def testDefaultBehaviorWithShards(self): + """Tests the behavior without the filter, with sharding enabled.""" + + self.RunAndVerifyWithSharding(None, 1, ACTIVE_TESTS) + self.RunAndVerifyWithSharding(None, 2, ACTIVE_TESTS) + self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) - 1, ACTIVE_TESTS) + self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS), ACTIVE_TESTS) + self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) + 1, ACTIVE_TESTS) + + def testEmptyFilter(self): + """Tests an empty filter.""" + + self.RunAndVerify('', []) + self.RunAndVerifyWithSharding('', 1, []) + self.RunAndVerifyWithSharding('', 2, []) + + def testBadFilter(self): + """Tests a filter that matches nothing.""" + + self.RunAndVerify('BadFilter', []) + self.RunAndVerifyAllowingDisabled('BadFilter', []) + + def testFullName(self): + """Tests filtering by full name.""" + + self.RunAndVerify('FooTest.Xyz', ['FooTest.Xyz']) + self.RunAndVerifyAllowingDisabled('FooTest.Xyz', ['FooTest.Xyz']) + self.RunAndVerifyWithSharding('FooTest.Xyz', 5, ['FooTest.Xyz']) + + def testUniversalFilters(self): + """Tests filters that match everything.""" + + self.RunAndVerify('*', ACTIVE_TESTS) + self.RunAndVerify('*.*', ACTIVE_TESTS) + self.RunAndVerifyWithSharding('*.*', len(ACTIVE_TESTS) - 3, ACTIVE_TESTS) + self.RunAndVerifyAllowingDisabled('*', ACTIVE_TESTS + DISABLED_TESTS) + self.RunAndVerifyAllowingDisabled('*.*', ACTIVE_TESTS + DISABLED_TESTS) + + def testFilterByTestCase(self): + """Tests filtering by test case name.""" + + self.RunAndVerify('FooTest.*', ['FooTest.Abc', 'FooTest.Xyz']) + + BAZ_TESTS = ['BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB'] + self.RunAndVerify('BazTest.*', BAZ_TESTS) + self.RunAndVerifyAllowingDisabled('BazTest.*', + BAZ_TESTS + ['BazTest.DISABLED_TestC']) + + def testFilterByTest(self): + """Tests filtering by test name.""" + + self.RunAndVerify('*.TestOne', ['BarTest.TestOne', 'BazTest.TestOne']) + + def testFilterDisabledTests(self): + """Select only the disabled tests to run.""" + + self.RunAndVerify('DISABLED_FoobarTest.Test1', []) + self.RunAndVerifyAllowingDisabled('DISABLED_FoobarTest.Test1', + ['DISABLED_FoobarTest.Test1']) + + self.RunAndVerify('*DISABLED_*', []) + self.RunAndVerifyAllowingDisabled('*DISABLED_*', DISABLED_TESTS) + + self.RunAndVerify('*.DISABLED_*', []) + self.RunAndVerifyAllowingDisabled('*.DISABLED_*', [ + 'BarTest.DISABLED_TestFour', + 'BarTest.DISABLED_TestFive', + 'BazTest.DISABLED_TestC', + 'DISABLED_FoobarTest.DISABLED_Test2', + ]) + + self.RunAndVerify('DISABLED_*', []) + self.RunAndVerifyAllowingDisabled('DISABLED_*', [ + 'DISABLED_FoobarTest.Test1', + 'DISABLED_FoobarTest.DISABLED_Test2', + 'DISABLED_FoobarbazTest.TestA', + ]) + + def testWildcardInTestCaseName(self): + """Tests using wildcard in the test case name.""" + + self.RunAndVerify('*a*.*', [ + 'BarTest.TestOne', + 'BarTest.TestTwo', + 'BarTest.TestThree', + + 'BazTest.TestOne', + 'BazTest.TestA', + 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS) + + def testWildcardInTestName(self): + """Tests using wildcard in the test name.""" + + self.RunAndVerify('*.*A*', ['FooTest.Abc', 'BazTest.TestA']) + + def testFilterWithoutDot(self): + """Tests a filter that has no '.' in it.""" + + self.RunAndVerify('*z*', [ + 'FooTest.Xyz', + + 'BazTest.TestOne', + 'BazTest.TestA', + 'BazTest.TestB', + ]) + + def testTwoPatterns(self): + """Tests filters that consist of two patterns.""" + + self.RunAndVerify('Foo*.*:*A*', [ + 'FooTest.Abc', + 'FooTest.Xyz', + + 'BazTest.TestA', + ]) + + # An empty pattern + a non-empty one + self.RunAndVerify(':*A*', ['FooTest.Abc', 'BazTest.TestA']) + + def testThreePatterns(self): + """Tests filters that consist of three patterns.""" + + self.RunAndVerify('*oo*:*A*:*One', [ + 'FooTest.Abc', + 'FooTest.Xyz', + + 'BarTest.TestOne', + + 'BazTest.TestOne', + 'BazTest.TestA', + ]) + + # The 2nd pattern is empty. + self.RunAndVerify('*oo*::*One', [ + 'FooTest.Abc', + 'FooTest.Xyz', + + 'BarTest.TestOne', + + 'BazTest.TestOne', + ]) + + # The last 2 patterns are empty. + self.RunAndVerify('*oo*::', [ + 'FooTest.Abc', + 'FooTest.Xyz', + ]) + + def testNegativeFilters(self): + self.RunAndVerify('*-BazTest.TestOne', [ + 'FooTest.Abc', + 'FooTest.Xyz', + + 'BarTest.TestOne', + 'BarTest.TestTwo', + 'BarTest.TestThree', + + 'BazTest.TestA', + 'BazTest.TestB', + ] + DEATH_TESTS + PARAM_TESTS) + + self.RunAndVerify('*-FooTest.Abc:BazTest.*', [ + 'FooTest.Xyz', + + 'BarTest.TestOne', + 'BarTest.TestTwo', + 'BarTest.TestThree', + ] + DEATH_TESTS + PARAM_TESTS) + + self.RunAndVerify('BarTest.*-BarTest.TestOne', [ + 'BarTest.TestTwo', + 'BarTest.TestThree', + ]) + + # Tests without leading '*'. + self.RunAndVerify('-FooTest.Abc:FooTest.Xyz:BazTest.*', [ + 'BarTest.TestOne', + 'BarTest.TestTwo', + 'BarTest.TestThree', + ] + DEATH_TESTS + PARAM_TESTS) + + # Value parameterized tests. + self.RunAndVerify('*/*', PARAM_TESTS) + + # Value parameterized tests filtering by the sequence name. + self.RunAndVerify('SeqP/*', [ + 'SeqP/ParamTest.TestX/0', + 'SeqP/ParamTest.TestX/1', + 'SeqP/ParamTest.TestY/0', + 'SeqP/ParamTest.TestY/1', + ]) + + # Value parameterized tests filtering by the test name. + self.RunAndVerify('*/0', [ + 'SeqP/ParamTest.TestX/0', + 'SeqP/ParamTest.TestY/0', + 'SeqQ/ParamTest.TestX/0', + 'SeqQ/ParamTest.TestY/0', + ]) + + def testFlagOverridesEnvVar(self): + """Tests that the filter flag overrides the filtering env. variable.""" + + SetEnvVar(FILTER_ENV_VAR, 'Foo*') + args = ['--%s=%s' % (FILTER_FLAG, '*One')] + tests_run = RunAndExtractTestList(args)[0] + SetEnvVar(FILTER_ENV_VAR, None) + + self.AssertSetEqual(tests_run, ['BarTest.TestOne', 'BazTest.TestOne']) + + def testShardStatusFileIsCreated(self): + """Tests that the shard file is created if specified in the environment.""" + + shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), + 'shard_status_file') + self.assert_(not os.path.exists(shard_status_file)) + + extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} + try: + InvokeWithModifiedEnv(extra_env, RunAndReturnOutput) + finally: + self.assert_(os.path.exists(shard_status_file)) + os.remove(shard_status_file) + + def testShardStatusFileIsCreatedWithListTests(self): + """Tests that the shard file is created with the "list_tests" flag.""" + + shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), + 'shard_status_file2') + self.assert_(not os.path.exists(shard_status_file)) + + extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} + try: + output = InvokeWithModifiedEnv(extra_env, + RunAndReturnOutput, + [LIST_TESTS_FLAG]) + finally: + # This assertion ensures that Google Test enumerated the tests as + # opposed to running them. + self.assert_('[==========]' not in output, + 'Unexpected output during test enumeration.\n' + 'Please ensure that LIST_TESTS_FLAG is assigned the\n' + 'correct flag value for listing Google Test tests.') + + self.assert_(os.path.exists(shard_status_file)) + os.remove(shard_status_file) + + if SUPPORTS_DEATH_TESTS: + def testShardingWorksWithDeathTests(self): + """Tests integration with death tests and sharding.""" + + gtest_filter = 'HasDeathTest.*:SeqP/*' + expected_tests = [ + 'HasDeathTest.Test1', + 'HasDeathTest.Test2', + + 'SeqP/ParamTest.TestX/0', + 'SeqP/ParamTest.TestX/1', + 'SeqP/ParamTest.TestY/0', + 'SeqP/ParamTest.TestY/1', + ] + + for flag in ['--gtest_death_test_style=threadsafe', + '--gtest_death_test_style=fast']: + self.RunAndVerifyWithSharding(gtest_filter, 3, expected_tests, + check_exit_0=True, args=[flag]) + self.RunAndVerifyWithSharding(gtest_filter, 5, expected_tests, + check_exit_0=True, args=[flag]) + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest_.cc new file mode 100644 index 00000000..325504fe --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_filter_unittest_.cc @@ -0,0 +1,140 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Unit test for Google Test test filters. +// +// A user can specify which test(s) in a Google Test program to run via +// either the GTEST_FILTER environment variable or the --gtest_filter +// flag. This is used for testing such functionality. +// +// The program will be invoked from a Python unit test. Don't run it +// directly. + +#include + +namespace { + +// Test case FooTest. + +class FooTest : public testing::Test { +}; + +TEST_F(FooTest, Abc) { +} + +TEST_F(FooTest, Xyz) { + FAIL() << "Expected failure."; +} + +// Test case BarTest. + +TEST(BarTest, TestOne) { +} + +TEST(BarTest, TestTwo) { +} + +TEST(BarTest, TestThree) { +} + +TEST(BarTest, DISABLED_TestFour) { + FAIL() << "Expected failure."; +} + +TEST(BarTest, DISABLED_TestFive) { + FAIL() << "Expected failure."; +} + +// Test case BazTest. + +TEST(BazTest, TestOne) { + FAIL() << "Expected failure."; +} + +TEST(BazTest, TestA) { +} + +TEST(BazTest, TestB) { +} + +TEST(BazTest, DISABLED_TestC) { + FAIL() << "Expected failure."; +} + +// Test case HasDeathTest + +TEST(HasDeathTest, Test1) { + EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*"); +} + +// We need at least two death tests to make sure that the all death tests +// aren't on the first shard. +TEST(HasDeathTest, Test2) { + EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*"); +} + +// Test case FoobarTest + +TEST(DISABLED_FoobarTest, Test1) { + FAIL() << "Expected failure."; +} + +TEST(DISABLED_FoobarTest, DISABLED_Test2) { + FAIL() << "Expected failure."; +} + +// Test case FoobarbazTest + +TEST(DISABLED_FoobarbazTest, TestA) { + FAIL() << "Expected failure."; +} + +#if GTEST_HAS_PARAM_TEST +class ParamTest : public testing::TestWithParam { +}; + +TEST_P(ParamTest, TestX) { +} + +TEST_P(ParamTest, TestY) { +} + +INSTANTIATE_TEST_CASE_P(SeqP, ParamTest, testing::Values(1, 2)); +INSTANTIATE_TEST_CASE_P(SeqQ, ParamTest, testing::Values(5, 6)); +#endif // GTEST_HAS_PARAM_TEST + +} // namespace + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test.py new file mode 100755 index 00000000..3cb4c48e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python +# +# Copyright 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests the --help flag of Google C++ Testing Framework. + +SYNOPSIS + gtest_help_test.py --gtest_build_dir=BUILD/DIR + # where BUILD/DIR contains the built gtest_help_test_ file. + gtest_help_test.py +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import re +import gtest_test_utils + + +IS_WINDOWS = os.name == 'nt' + +PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_') +FLAG_PREFIX = '--gtest_' +CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions' +DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style' +UNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing' +LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests' +INCORRECT_FLAG_VARIANTS = [re.sub('^--', '-', LIST_TESTS_FLAG), + re.sub('^--', '/', LIST_TESTS_FLAG), + re.sub('_', '-', LIST_TESTS_FLAG)] +INTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing' + +SUPPORTS_DEATH_TESTS = "DeathTest" in gtest_test_utils.Subprocess( + [PROGRAM_PATH, LIST_TESTS_FLAG]).output + +# The help message must match this regex. +HELP_REGEX = re.compile( + FLAG_PREFIX + r'list_tests.*' + + FLAG_PREFIX + r'filter=.*' + + FLAG_PREFIX + r'also_run_disabled_tests.*' + + FLAG_PREFIX + r'repeat=.*' + + FLAG_PREFIX + r'shuffle.*' + + FLAG_PREFIX + r'random_seed=.*' + + FLAG_PREFIX + r'color=.*' + + FLAG_PREFIX + r'print_time.*' + + FLAG_PREFIX + r'output=.*' + + FLAG_PREFIX + r'break_on_failure.*' + + FLAG_PREFIX + r'throw_on_failure.*', + re.DOTALL) + + +def RunWithFlag(flag): + """Runs gtest_help_test_ with the given flag. + + Returns: + the exit code and the text output as a tuple. + Args: + flag: the command-line flag to pass to gtest_help_test_, or None. + """ + + if flag is None: + command = [PROGRAM_PATH] + else: + command = [PROGRAM_PATH, flag] + child = gtest_test_utils.Subprocess(command) + return child.exit_code, child.output + + +class GTestHelpTest(gtest_test_utils.TestCase): + """Tests the --help flag and its equivalent forms.""" + + def TestHelpFlag(self, flag): + """Verifies correct behavior when help flag is specified. + + The right message must be printed and the tests must + skipped when the given flag is specified. + + Args: + flag: A flag to pass to the binary or None. + """ + + exit_code, output = RunWithFlag(flag) + self.assertEquals(0, exit_code) + self.assert_(HELP_REGEX.search(output), output) + if IS_WINDOWS: + self.assert_(CATCH_EXCEPTIONS_FLAG in output, output) + else: + self.assert_(CATCH_EXCEPTIONS_FLAG not in output, output) + + if SUPPORTS_DEATH_TESTS and not IS_WINDOWS: + self.assert_(DEATH_TEST_STYLE_FLAG in output, output) + else: + self.assert_(DEATH_TEST_STYLE_FLAG not in output, output) + + def TestNonHelpFlag(self, flag): + """Verifies correct behavior when no help flag is specified. + + Verifies that when no help flag is specified, the tests are run + and the help message is not printed. + + Args: + flag: A flag to pass to the binary or None. + """ + + exit_code, output = RunWithFlag(flag) + self.assert_(exit_code != 0) + self.assert_(not HELP_REGEX.search(output), output) + + def testPrintsHelpWithFullFlag(self): + self.TestHelpFlag('--help') + + def testPrintsHelpWithShortFlag(self): + self.TestHelpFlag('-h') + + def testPrintsHelpWithQuestionFlag(self): + self.TestHelpFlag('-?') + + def testPrintsHelpWithWindowsStyleQuestionFlag(self): + self.TestHelpFlag('/?') + + def testPrintsHelpWithUnrecognizedGoogleTestFlag(self): + self.TestHelpFlag(UNKNOWN_FLAG) + + def testPrintsHelpWithIncorrectFlagStyle(self): + for incorrect_flag in INCORRECT_FLAG_VARIANTS: + self.TestHelpFlag(incorrect_flag) + + def testRunsTestsWithoutHelpFlag(self): + """Verifies that when no help flag is specified, the tests are run + and the help message is not printed.""" + + self.TestNonHelpFlag(None) + + def testRunsTestsWithGtestInternalFlag(self): + """Verifies that the tests are run and no help message is printed when + a flag starting with Google Test prefix and 'internal_' is supplied.""" + + self.TestNonHelpFlag(INTERNAL_FLAG_FOR_TESTING) + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test_.cc new file mode 100644 index 00000000..aad0d72d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_help_test_.cc @@ -0,0 +1,46 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// This program is meant to be run by gtest_help_test.py. Do not run +// it directly. + +#include + +// When a help flag is specified, this program should skip the tests +// and exit with 0; otherwise the following test will be executed, +// causing this program to exit with a non-zero code. +TEST(HelpFlagTest, ShouldNotBeRun) { + ASSERT_TRUE(false) << "Tests shouldn't be run when --help is specified."; +} + +#if GTEST_HAS_DEATH_TEST +TEST(DeathTest, UsedByPythonScriptToDetectSupportForDeathTestsInThisBinary) {} +#endif diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest.py new file mode 100755 index 00000000..ce8c3ef0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test for Google Test's --gtest_list_tests flag. + +A user can ask Google Test to list all tests by specifying the +--gtest_list_tests flag. This script tests such functionality +by invoking gtest_list_tests_unittest_ (a program written with +Google Test) the command line flags. +""" + +__author__ = 'phanna@google.com (Patrick Hanna)' + +import gtest_test_utils + + +# Constants. + +# The command line flag for enabling/disabling listing all tests. +LIST_TESTS_FLAG = 'gtest_list_tests' + +# Path to the gtest_list_tests_unittest_ program. +EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_') + +# The expected output when running gtest_list_tests_unittest_ with +# --gtest_list_tests +EXPECTED_OUTPUT_NO_FILTER = """FooDeathTest. + Test1 +Foo. + Bar1 + Bar2 + DISABLED_Bar3 +Abc. + Xyz + Def +FooBar. + Baz +FooTest. + Test1 + DISABLED_Test2 + Test3 +""" + +# The expected output when running gtest_list_tests_unittest_ with +# --gtest_list_tests and --gtest_filter=Foo*. +EXPECTED_OUTPUT_FILTER_FOO = """FooDeathTest. + Test1 +Foo. + Bar1 + Bar2 + DISABLED_Bar3 +FooBar. + Baz +FooTest. + Test1 + DISABLED_Test2 + Test3 +""" + +# Utilities. + + +def Run(args): + """Runs gtest_list_tests_unittest_ and returns the list of tests printed.""" + + return gtest_test_utils.Subprocess([EXE_PATH] + args, + capture_stderr=False).output + + +# The unit test. + +class GTestListTestsUnitTest(gtest_test_utils.TestCase): + """Tests using the --gtest_list_tests flag to list all tests.""" + + def RunAndVerify(self, flag_value, expected_output, other_flag): + """Runs gtest_list_tests_unittest_ and verifies that it prints + the correct tests. + + Args: + flag_value: value of the --gtest_list_tests flag; + None if the flag should not be present. + + expected_output: the expected output after running command; + + other_flag: a different flag to be passed to command + along with gtest_list_tests; + None if the flag should not be present. + """ + + if flag_value is None: + flag = '' + flag_expression = 'not set' + elif flag_value == '0': + flag = '--%s=0' % LIST_TESTS_FLAG + flag_expression = '0' + else: + flag = '--%s' % LIST_TESTS_FLAG + flag_expression = '1' + + args = [flag] + + if other_flag is not None: + args += [other_flag] + + output = Run(args) + + msg = ('when %s is %s, the output of "%s" is "%s".' % + (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)) + + if expected_output is not None: + self.assert_(output == expected_output, msg) + else: + self.assert_(output != EXPECTED_OUTPUT_NO_FILTER, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" + + self.RunAndVerify(flag_value=None, + expected_output=None, + other_flag=None) + + def testFlag(self): + """Tests using the --gtest_list_tests flag.""" + + self.RunAndVerify(flag_value='0', + expected_output=None, + other_flag=None) + self.RunAndVerify(flag_value='1', + expected_output=EXPECTED_OUTPUT_NO_FILTER, + other_flag=None) + + def testOverrideNonFilterFlags(self): + """Tests that --gtest_list_tests overrides the non-filter flags.""" + + self.RunAndVerify(flag_value='1', + expected_output=EXPECTED_OUTPUT_NO_FILTER, + other_flag='--gtest_break_on_failure') + + def testWithFilterFlags(self): + """Tests that --gtest_list_tests takes into account the + --gtest_filter flag.""" + + self.RunAndVerify(flag_value='1', + expected_output=EXPECTED_OUTPUT_FILTER_FOO, + other_flag='--gtest_filter=Foo*') + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest_.cc new file mode 100644 index 00000000..a0ed0825 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_list_tests_unittest_.cc @@ -0,0 +1,85 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: phanna@google.com (Patrick Hanna) + +// Unit test for Google Test's --gtest_list_tests flag. +// +// A user can ask Google Test to list all tests that will run +// so that when using a filter, a user will know what +// tests to look for. The tests will not be run after listing. +// +// This program will be invoked from a Python unit test. +// Don't run it directly. + +#include + +namespace { + +// Several different test cases and tests that will be listed. +TEST(Foo, Bar1) { +} + +TEST(Foo, Bar2) { +} + +TEST(Foo, DISABLED_Bar3) { +} + +TEST(Abc, Xyz) { +} + +TEST(Abc, Def) { +} + +TEST(FooBar, Baz) { +} + +class FooTest : public testing::Test { +}; + +TEST_F(FooTest, Test1) { +} + +TEST_F(FooTest, DISABLED_Test2) { +} + +TEST_F(FooTest, Test3) { +} + +TEST(FooDeathTest, Test1) { +} + +} // namespace + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_main_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_main_unittest.cc new file mode 100644 index 00000000..7a3f0adf --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_main_unittest.cc @@ -0,0 +1,45 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + +// Tests that we don't have to define main() when we link to +// gtest_main instead of gtest. + +namespace { + +TEST(GTestMainTest, ShouldSucceed) { +} + +} // namespace + +// We are using the main() function defined in src/gtest_main.cc, so +// we don't define it here. diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_no_test_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_no_test_unittest.cc new file mode 100644 index 00000000..afe2dc0c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_no_test_unittest.cc @@ -0,0 +1,54 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Tests that a Google Test program that has no test defined can run +// successfully. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + + // An ad-hoc assertion outside of all tests. + // + // This serves two purposes: + // + // 1. It verifies that an ad-hoc assertion can be executed even if + // no test is defined. + // 2. We had a bug where the XML output won't be generated if an + // assertion is executed before RUN_ALL_TESTS() is called, even + // though --gtest_output=xml is specified. This makes sure the + // bug is fixed and doesn't regress. + EXPECT_EQ(1, 1); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test.py new file mode 100755 index 00000000..192030a2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests the text output of Google C++ Testing Framework. + +SYNOPSIS + gtest_output_test.py --gtest_build_dir=BUILD/DIR --gengolden + # where BUILD/DIR contains the built gtest_output_test_ file. + gtest_output_test.py --gengolden + gtest_output_test.py +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import re +import sys +import gtest_test_utils + + +# The flag for generating the golden file +GENGOLDEN_FLAG = '--gengolden' +CATCH_EXCEPTIONS_ENV_VAR_NAME = 'GTEST_CATCH_EXCEPTIONS' + +IS_WINDOWS = os.name == 'nt' + +if IS_WINDOWS: + GOLDEN_NAME = 'gtest_output_test_golden_win.txt' +else: + GOLDEN_NAME = 'gtest_output_test_golden_lin.txt' + +PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_output_test_') + +# At least one command we exercise must not have the +# --gtest_internal_skip_environment_and_ad_hoc_tests flag. +COMMAND_LIST_TESTS = ({}, [PROGRAM_PATH, '--gtest_list_tests']) +COMMAND_WITH_COLOR = ({}, [PROGRAM_PATH, '--gtest_color=yes']) +COMMAND_WITH_TIME = ({}, [PROGRAM_PATH, + '--gtest_print_time', + '--gtest_internal_skip_environment_and_ad_hoc_tests', + '--gtest_filter=FatalFailureTest.*:LoggingTest.*']) +COMMAND_WITH_DISABLED = ( + {}, [PROGRAM_PATH, + '--gtest_also_run_disabled_tests', + '--gtest_internal_skip_environment_and_ad_hoc_tests', + '--gtest_filter=*DISABLED_*']) +COMMAND_WITH_SHARDING = ( + {'GTEST_SHARD_INDEX': '1', 'GTEST_TOTAL_SHARDS': '2'}, + [PROGRAM_PATH, + '--gtest_internal_skip_environment_and_ad_hoc_tests', + '--gtest_filter=PassingTest.*']) + +GOLDEN_PATH = os.path.join(gtest_test_utils.GetSourceDir(), GOLDEN_NAME) + + +def ToUnixLineEnding(s): + """Changes all Windows/Mac line endings in s to UNIX line endings.""" + + return s.replace('\r\n', '\n').replace('\r', '\n') + + +def RemoveLocations(test_output): + """Removes all file location info from a Google Test program's output. + + Args: + test_output: the output of a Google Test program. + + Returns: + output with all file location info (in the form of + 'DIRECTORY/FILE_NAME:LINE_NUMBER: 'or + 'DIRECTORY\\FILE_NAME(LINE_NUMBER): ') replaced by + 'FILE_NAME:#: '. + """ + + return re.sub(r'.*[/\\](.+)(\:\d+|\(\d+\))\: ', r'\1:#: ', test_output) + + +def RemoveStackTraceDetails(output): + """Removes all stack traces from a Google Test program's output.""" + + # *? means "find the shortest string that matches". + return re.sub(r'Stack trace:(.|\n)*?\n\n', + 'Stack trace: (omitted)\n\n', output) + + +def RemoveStackTraces(output): + """Removes all traces of stack traces from a Google Test program's output.""" + + # *? means "find the shortest string that matches". + return re.sub(r'Stack trace:(.|\n)*?\n\n', '', output) + + +def RemoveTime(output): + """Removes all time information from a Google Test program's output.""" + + return re.sub(r'\(\d+ ms', '(? ms', output) + + +def RemoveTypeInfoDetails(test_output): + """Removes compiler-specific type info from Google Test program's output. + + Args: + test_output: the output of a Google Test program. + + Returns: + output with type information normalized to canonical form. + """ + + # some compilers output the name of type 'unsigned int' as 'unsigned' + return re.sub(r'unsigned int', 'unsigned', test_output) + + +def RemoveTestCounts(output): + """Removes test counts from a Google Test program's output.""" + + output = re.sub(r'\d+ tests?, listed below', + '? tests, listed below', output) + output = re.sub(r'\d+ FAILED TESTS', + '? FAILED TESTS', output) + output = re.sub(r'\d+ tests? from \d+ test cases?', + '? tests from ? test cases', output) + output = re.sub(r'\d+ tests? from ([a-zA-Z_])', + r'? tests from \1', output) + return re.sub(r'\d+ tests?\.', '? tests.', output) + + +def RemoveMatchingTests(test_output, pattern): + """Removes output of specified tests from a Google Test program's output. + + This function strips not only the beginning and the end of a test but also + all output in between. + + Args: + test_output: A string containing the test output. + pattern: A regex string that matches names of test cases or + tests to remove. + + Returns: + Contents of test_output with tests whose names match pattern removed. + """ + + test_output = re.sub( + r'.*\[ RUN \] .*%s(.|\n)*?\[( FAILED | OK )\] .*%s.*\n' % ( + pattern, pattern), + '', + test_output) + return re.sub(r'.*%s.*\n' % pattern, '', test_output) + + +def NormalizeOutput(output): + """Normalizes output (the output of gtest_output_test_.exe).""" + + output = ToUnixLineEnding(output) + output = RemoveLocations(output) + output = RemoveStackTraceDetails(output) + output = RemoveTime(output) + return output + + +def GetShellCommandOutput(env_cmd): + """Runs a command in a sub-process, and returns its output in a string. + + Args: + env_cmd: The shell command. A 2-tuple where element 0 is a dict of extra + environment variables to set, and element 1 is a string with + the command and any flags. + + Returns: + A string with the command's combined standard and diagnostic output. + """ + + # Spawns cmd in a sub-process, and gets its standard I/O file objects. + # Set and save the environment properly. + environ = os.environ.copy() + environ.update(env_cmd[0]) + p = gtest_test_utils.Subprocess(env_cmd[1], env=environ) + + return p.output + + +def GetCommandOutput(env_cmd): + """Runs a command and returns its output with all file location + info stripped off. + + Args: + env_cmd: The shell command. A 2-tuple where element 0 is a dict of extra + environment variables to set, and element 1 is a string with + the command and any flags. + """ + + # Disables exception pop-ups on Windows. + environ, cmdline = env_cmd + environ = dict(environ) # Ensures we are modifying a copy. + environ[CATCH_EXCEPTIONS_ENV_VAR_NAME] = '1' + return NormalizeOutput(GetShellCommandOutput((environ, cmdline))) + + +def GetOutputOfAllCommands(): + """Returns concatenated output from several representative commands.""" + + return (GetCommandOutput(COMMAND_WITH_COLOR) + + GetCommandOutput(COMMAND_WITH_TIME) + + GetCommandOutput(COMMAND_WITH_DISABLED) + + GetCommandOutput(COMMAND_WITH_SHARDING)) + + +test_list = GetShellCommandOutput(COMMAND_LIST_TESTS) +SUPPORTS_DEATH_TESTS = 'DeathTest' in test_list +SUPPORTS_TYPED_TESTS = 'TypedTest' in test_list +SUPPORTS_THREADS = 'ExpectFailureWithThreadsTest' in test_list +SUPPORTS_STACK_TRACES = False + +CAN_GENERATE_GOLDEN_FILE = (SUPPORTS_DEATH_TESTS and + SUPPORTS_TYPED_TESTS and + SUPPORTS_THREADS) + + +class GTestOutputTest(gtest_test_utils.TestCase): + def RemoveUnsupportedTests(self, test_output): + if not SUPPORTS_DEATH_TESTS: + test_output = RemoveMatchingTests(test_output, 'DeathTest') + if not SUPPORTS_TYPED_TESTS: + test_output = RemoveMatchingTests(test_output, 'TypedTest') + test_output = RemoveMatchingTests(test_output, 'TypedDeathTest') + test_output = RemoveMatchingTests(test_output, 'TypeParamDeathTest') + if not SUPPORTS_THREADS: + test_output = RemoveMatchingTests(test_output, + 'ExpectFailureWithThreadsTest') + test_output = RemoveMatchingTests(test_output, + 'ScopedFakeTestPartResultReporterTest') + test_output = RemoveMatchingTests(test_output, + 'WorksConcurrently') + if not SUPPORTS_STACK_TRACES: + test_output = RemoveStackTraces(test_output) + + return test_output + + def testOutput(self): + output = GetOutputOfAllCommands() + + golden_file = open(GOLDEN_PATH, 'rb') + # A mis-configured source control system can cause \r appear in EOL + # sequences when we read the golden file irrespective of an operating + # system used. Therefore, we need to strip those \r's from newlines + # unconditionally. + golden = ToUnixLineEnding(golden_file.read()) + golden_file.close() + + # We want the test to pass regardless of certain features being + # supported or not. + + # We still have to remove type name specifics in all cases. + normalized_actual = RemoveTypeInfoDetails(output) + normalized_golden = RemoveTypeInfoDetails(golden) + + if CAN_GENERATE_GOLDEN_FILE: + self.assertEqual(normalized_golden, normalized_actual) + else: + normalized_actual = RemoveTestCounts(normalized_actual) + normalized_golden = RemoveTestCounts(self.RemoveUnsupportedTests( + normalized_golden)) + + # This code is very handy when debugging golden file differences: + if os.getenv('DEBUG_GTEST_OUTPUT_TEST'): + open(os.path.join( + gtest_test_utils.GetSourceDir(), + '_gtest_output_test_normalized_actual.txt'), 'wb').write( + normalized_actual) + open(os.path.join( + gtest_test_utils.GetSourceDir(), + '_gtest_output_test_normalized_golden.txt'), 'wb').write( + normalized_golden) + + self.assertEqual(normalized_golden, normalized_actual) + + +if __name__ == '__main__': + if sys.argv[1:] == [GENGOLDEN_FLAG]: + if CAN_GENERATE_GOLDEN_FILE: + output = GetOutputOfAllCommands() + golden_file = open(GOLDEN_PATH, 'wb') + golden_file.write(output) + golden_file.close() + else: + message = ( + """Unable to write a golden file when compiled in an environment +that does not support all the required features (death tests""") + if IS_WINDOWS: + message += ( + """\nand typed tests). Please check that you are using VC++ 8.0 SP1 +or higher as your compiler.""") + else: + message += """\ntyped tests, and threads). Please generate the +golden file using a binary built with those features enabled.""" + + sys.stderr.write(message) + sys.exit(1) + else: + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_.cc new file mode 100644 index 00000000..273e8e93 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_.cc @@ -0,0 +1,1135 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// A unit test for Google Test itself. This verifies that the basic +// constructs of Google Test work. +// +// Author: wan@google.com (Zhanyong Wan) + +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +#include + +#if GTEST_IS_THREADSAFE +using testing::ScopedFakeTestPartResultReporter; +using testing::TestPartResultArray; + +using testing::internal::Notification; +using testing::internal::ThreadWithParam; +#endif + +namespace posix = ::testing::internal::posix; +using testing::internal::String; +using testing::internal::scoped_ptr; + +// Tests catching fatal failures. + +// A subroutine used by the following test. +void TestEq1(int x) { + ASSERT_EQ(1, x); +} + +// This function calls a test subroutine, catches the fatal failure it +// generates, and then returns early. +void TryTestSubroutine() { + // Calls a subrountine that yields a fatal failure. + TestEq1(2); + + // Catches the fatal failure and aborts the test. + // + // The testing::Test:: prefix is necessary when calling + // HasFatalFailure() outside of a TEST, TEST_F, or test fixture. + if (testing::Test::HasFatalFailure()) return; + + // If we get here, something is wrong. + FAIL() << "This should never be reached."; +} + +TEST(PassingTest, PassingTest1) { +} + +TEST(PassingTest, PassingTest2) { +} + +// Tests catching a fatal failure in a subroutine. +TEST(FatalFailureTest, FatalFailureInSubroutine) { + printf("(expecting a failure that x should be 1)\n"); + + TryTestSubroutine(); +} + +// Tests catching a fatal failure in a nested subroutine. +TEST(FatalFailureTest, FatalFailureInNestedSubroutine) { + printf("(expecting a failure that x should be 1)\n"); + + // Calls a subrountine that yields a fatal failure. + TryTestSubroutine(); + + // Catches the fatal failure and aborts the test. + // + // When calling HasFatalFailure() inside a TEST, TEST_F, or test + // fixture, the testing::Test:: prefix is not needed. + if (HasFatalFailure()) return; + + // If we get here, something is wrong. + FAIL() << "This should never be reached."; +} + +// Tests HasFatalFailure() after a failed EXPECT check. +TEST(FatalFailureTest, NonfatalFailureInSubroutine) { + printf("(expecting a failure on false)\n"); + EXPECT_TRUE(false); // Generates a nonfatal failure + ASSERT_FALSE(HasFatalFailure()); // This should succeed. +} + +// Tests interleaving user logging and Google Test assertions. +TEST(LoggingTest, InterleavingLoggingAndAssertions) { + static const int a[4] = { + 3, 9, 2, 6 + }; + + printf("(expecting 2 failures on (3) >= (a[i]))\n"); + for (int i = 0; i < static_cast(sizeof(a)/sizeof(*a)); i++) { + printf("i == %d\n", i); + EXPECT_GE(3, a[i]); + } +} + +// Tests the SCOPED_TRACE macro. + +// A helper function for testing SCOPED_TRACE. +void SubWithoutTrace(int n) { + EXPECT_EQ(1, n); + ASSERT_EQ(2, n); +} + +// Another helper function for testing SCOPED_TRACE. +void SubWithTrace(int n) { + SCOPED_TRACE(testing::Message() << "n = " << n); + + SubWithoutTrace(n); +} + +// Tests that SCOPED_TRACE() obeys lexical scopes. +TEST(SCOPED_TRACETest, ObeysScopes) { + printf("(expected to fail)\n"); + + // There should be no trace before SCOPED_TRACE() is invoked. + ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; + + { + SCOPED_TRACE("Expected trace"); + // After SCOPED_TRACE(), a failure in the current scope should contain + // the trace. + ADD_FAILURE() << "This failure is expected, and should have a trace."; + } + + // Once the control leaves the scope of the SCOPED_TRACE(), there + // should be no trace again. + ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; +} + +// Tests that SCOPED_TRACE works inside a loop. +TEST(SCOPED_TRACETest, WorksInLoop) { + printf("(expected to fail)\n"); + + for (int i = 1; i <= 2; i++) { + SCOPED_TRACE(testing::Message() << "i = " << i); + + SubWithoutTrace(i); + } +} + +// Tests that SCOPED_TRACE works in a subroutine. +TEST(SCOPED_TRACETest, WorksInSubroutine) { + printf("(expected to fail)\n"); + + SubWithTrace(1); + SubWithTrace(2); +} + +// Tests that SCOPED_TRACE can be nested. +TEST(SCOPED_TRACETest, CanBeNested) { + printf("(expected to fail)\n"); + + SCOPED_TRACE(""); // A trace without a message. + + SubWithTrace(2); +} + +// Tests that multiple SCOPED_TRACEs can be used in the same scope. +TEST(SCOPED_TRACETest, CanBeRepeated) { + printf("(expected to fail)\n"); + + SCOPED_TRACE("A"); + ADD_FAILURE() + << "This failure is expected, and should contain trace point A."; + + SCOPED_TRACE("B"); + ADD_FAILURE() + << "This failure is expected, and should contain trace point A and B."; + + { + SCOPED_TRACE("C"); + ADD_FAILURE() << "This failure is expected, and should contain " + << "trace point A, B, and C."; + } + + SCOPED_TRACE("D"); + ADD_FAILURE() << "This failure is expected, and should contain " + << "trace point A, B, and D."; +} + +#if GTEST_IS_THREADSAFE +// Tests that SCOPED_TRACE()s can be used concurrently from multiple +// threads. Namely, an assertion should be affected by +// SCOPED_TRACE()s in its own thread only. + +// Here's the sequence of actions that happen in the test: +// +// Thread A (main) | Thread B (spawned) +// ===============================|================================ +// spawns thread B | +// -------------------------------+-------------------------------- +// waits for n1 | SCOPED_TRACE("Trace B"); +// | generates failure #1 +// | notifies n1 +// -------------------------------+-------------------------------- +// SCOPED_TRACE("Trace A"); | waits for n2 +// generates failure #2 | +// notifies n2 | +// -------------------------------|-------------------------------- +// waits for n3 | generates failure #3 +// | trace B dies +// | generates failure #4 +// | notifies n3 +// -------------------------------|-------------------------------- +// generates failure #5 | finishes +// trace A dies | +// generates failure #6 | +// -------------------------------|-------------------------------- +// waits for thread B to finish | + +struct CheckPoints { + Notification n1; + Notification n2; + Notification n3; +}; + +static void ThreadWithScopedTrace(CheckPoints* check_points) { + { + SCOPED_TRACE("Trace B"); + ADD_FAILURE() + << "Expected failure #1 (in thread B, only trace B alive)."; + check_points->n1.Notify(); + check_points->n2.WaitForNotification(); + + ADD_FAILURE() + << "Expected failure #3 (in thread B, trace A & B both alive)."; + } // Trace B dies here. + ADD_FAILURE() + << "Expected failure #4 (in thread B, only trace A alive)."; + check_points->n3.Notify(); +} + +TEST(SCOPED_TRACETest, WorksConcurrently) { + printf("(expecting 6 failures)\n"); + + CheckPoints check_points; + ThreadWithParam thread(&ThreadWithScopedTrace, + &check_points, + NULL); + check_points.n1.WaitForNotification(); + + { + SCOPED_TRACE("Trace A"); + ADD_FAILURE() + << "Expected failure #2 (in thread A, trace A & B both alive)."; + check_points.n2.Notify(); + check_points.n3.WaitForNotification(); + + ADD_FAILURE() + << "Expected failure #5 (in thread A, only trace A alive)."; + } // Trace A dies here. + ADD_FAILURE() + << "Expected failure #6 (in thread A, no trace alive)."; + thread.Join(); +} +#endif // GTEST_IS_THREADSAFE + +TEST(DisabledTestsWarningTest, + DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning) { + // This test body is intentionally empty. Its sole purpose is for + // verifying that the --gtest_also_run_disabled_tests flag + // suppresses the "YOU HAVE 12 DISABLED TESTS" warning at the end of + // the test output. +} + +// Tests using assertions outside of TEST and TEST_F. +// +// This function creates two failures intentionally. +void AdHocTest() { + printf("The non-test part of the code is expected to have 2 failures.\n\n"); + EXPECT_TRUE(false); + EXPECT_EQ(2, 3); +} + +// Runs all TESTs, all TEST_Fs, and the ad hoc test. +int RunAllTests() { + AdHocTest(); + return RUN_ALL_TESTS(); +} + +// Tests non-fatal failures in the fixture constructor. +class NonFatalFailureInFixtureConstructorTest : public testing::Test { + protected: + NonFatalFailureInFixtureConstructorTest() { + printf("(expecting 5 failures)\n"); + ADD_FAILURE() << "Expected failure #1, in the test fixture c'tor."; + } + + ~NonFatalFailureInFixtureConstructorTest() { + ADD_FAILURE() << "Expected failure #5, in the test fixture d'tor."; + } + + virtual void SetUp() { + ADD_FAILURE() << "Expected failure #2, in SetUp()."; + } + + virtual void TearDown() { + ADD_FAILURE() << "Expected failure #4, in TearDown."; + } +}; + +TEST_F(NonFatalFailureInFixtureConstructorTest, FailureInConstructor) { + ADD_FAILURE() << "Expected failure #3, in the test body."; +} + +// Tests fatal failures in the fixture constructor. +class FatalFailureInFixtureConstructorTest : public testing::Test { + protected: + FatalFailureInFixtureConstructorTest() { + printf("(expecting 2 failures)\n"); + Init(); + } + + ~FatalFailureInFixtureConstructorTest() { + ADD_FAILURE() << "Expected failure #2, in the test fixture d'tor."; + } + + virtual void SetUp() { + ADD_FAILURE() << "UNEXPECTED failure in SetUp(). " + << "We should never get here, as the test fixture c'tor " + << "had a fatal failure."; + } + + virtual void TearDown() { + ADD_FAILURE() << "UNEXPECTED failure in TearDown(). " + << "We should never get here, as the test fixture c'tor " + << "had a fatal failure."; + } + private: + void Init() { + FAIL() << "Expected failure #1, in the test fixture c'tor."; + } +}; + +TEST_F(FatalFailureInFixtureConstructorTest, FailureInConstructor) { + ADD_FAILURE() << "UNEXPECTED failure in the test body. " + << "We should never get here, as the test fixture c'tor " + << "had a fatal failure."; +} + +// Tests non-fatal failures in SetUp(). +class NonFatalFailureInSetUpTest : public testing::Test { + protected: + virtual ~NonFatalFailureInSetUpTest() { + Deinit(); + } + + virtual void SetUp() { + printf("(expecting 4 failures)\n"); + ADD_FAILURE() << "Expected failure #1, in SetUp()."; + } + + virtual void TearDown() { + FAIL() << "Expected failure #3, in TearDown()."; + } + private: + void Deinit() { + FAIL() << "Expected failure #4, in the test fixture d'tor."; + } +}; + +TEST_F(NonFatalFailureInSetUpTest, FailureInSetUp) { + FAIL() << "Expected failure #2, in the test function."; +} + +// Tests fatal failures in SetUp(). +class FatalFailureInSetUpTest : public testing::Test { + protected: + virtual ~FatalFailureInSetUpTest() { + Deinit(); + } + + virtual void SetUp() { + printf("(expecting 3 failures)\n"); + FAIL() << "Expected failure #1, in SetUp()."; + } + + virtual void TearDown() { + FAIL() << "Expected failure #2, in TearDown()."; + } + private: + void Deinit() { + FAIL() << "Expected failure #3, in the test fixture d'tor."; + } +}; + +TEST_F(FatalFailureInSetUpTest, FailureInSetUp) { + FAIL() << "UNEXPECTED failure in the test function. " + << "We should never get here, as SetUp() failed."; +} + +#if GTEST_OS_WINDOWS + +// This group of tests verifies that Google Test handles SEH and C++ +// exceptions correctly. + +// A function that throws an SEH exception. +static void ThrowSEH() { + int* p = NULL; + *p = 0; // Raises an access violation. +} + +// Tests exceptions thrown in the test fixture constructor. +class ExceptionInFixtureCtorTest : public testing::Test { + protected: + ExceptionInFixtureCtorTest() { + printf("(expecting a failure on thrown exception " + "in the test fixture's constructor)\n"); + + ThrowSEH(); + } + + virtual ~ExceptionInFixtureCtorTest() { + Deinit(); + } + + virtual void SetUp() { + FAIL() << "UNEXPECTED failure in SetUp(). " + << "We should never get here, as the test fixture c'tor threw."; + } + + virtual void TearDown() { + FAIL() << "UNEXPECTED failure in TearDown(). " + << "We should never get here, as the test fixture c'tor threw."; + } + private: + void Deinit() { + FAIL() << "UNEXPECTED failure in the d'tor. " + << "We should never get here, as the test fixture c'tor threw."; + } +}; + +TEST_F(ExceptionInFixtureCtorTest, ExceptionInFixtureCtor) { + FAIL() << "UNEXPECTED failure in the test function. " + << "We should never get here, as the test fixture c'tor threw."; +} + +// Tests exceptions thrown in SetUp(). +class ExceptionInSetUpTest : public testing::Test { + protected: + virtual ~ExceptionInSetUpTest() { + Deinit(); + } + + virtual void SetUp() { + printf("(expecting 3 failures)\n"); + + ThrowSEH(); + } + + virtual void TearDown() { + FAIL() << "Expected failure #2, in TearDown()."; + } + private: + void Deinit() { + FAIL() << "Expected failure #3, in the test fixture d'tor."; + } +}; + +TEST_F(ExceptionInSetUpTest, ExceptionInSetUp) { + FAIL() << "UNEXPECTED failure in the test function. " + << "We should never get here, as SetUp() threw."; +} + +// Tests that TearDown() and the test fixture d'tor are always called, +// even when the test function throws an exception. +class ExceptionInTestFunctionTest : public testing::Test { + protected: + virtual ~ExceptionInTestFunctionTest() { + Deinit(); + } + + virtual void TearDown() { + FAIL() << "Expected failure #2, in TearDown()."; + } + private: + void Deinit() { + FAIL() << "Expected failure #3, in the test fixture d'tor."; + } +}; + +// Tests that the test fixture d'tor is always called, even when the +// test function throws an SEH exception. +TEST_F(ExceptionInTestFunctionTest, SEH) { + printf("(expecting 3 failures)\n"); + + ThrowSEH(); +} + +#if GTEST_HAS_EXCEPTIONS + +// Tests that the test fixture d'tor is always called, even when the +// test function throws a C++ exception. We do this only when +// GTEST_HAS_EXCEPTIONS is non-zero, i.e. C++ exceptions are enabled. +TEST_F(ExceptionInTestFunctionTest, CppException) { + throw 1; +} + +// Tests exceptions thrown in TearDown(). +class ExceptionInTearDownTest : public testing::Test { + protected: + virtual ~ExceptionInTearDownTest() { + Deinit(); + } + + virtual void TearDown() { + throw 1; + } + private: + void Deinit() { + FAIL() << "Expected failure #2, in the test fixture d'tor."; + } +}; + +TEST_F(ExceptionInTearDownTest, ExceptionInTearDown) { + printf("(expecting 2 failures)\n"); +} + +#endif // GTEST_HAS_EXCEPTIONS + +#endif // GTEST_OS_WINDOWS + +#if GTEST_IS_THREADSAFE + +// A unary function that may die. +void DieIf(bool should_die) { + GTEST_CHECK_(!should_die) << " - death inside DieIf()."; +} + +// Tests running death tests in a multi-threaded context. + +// Used for coordination between the main and the spawn thread. +struct SpawnThreadNotifications { + SpawnThreadNotifications() {} + + Notification spawn_thread_started; + Notification spawn_thread_ok_to_terminate; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(SpawnThreadNotifications); +}; + +// The function to be executed in the thread spawn by the +// MultipleThreads test (below). +static void ThreadRoutine(SpawnThreadNotifications* notifications) { + // Signals the main thread that this thread has started. + notifications->spawn_thread_started.Notify(); + + // Waits for permission to finish from the main thread. + notifications->spawn_thread_ok_to_terminate.WaitForNotification(); +} + +// This is a death-test test, but it's not named with a DeathTest +// suffix. It starts threads which might interfere with later +// death tests, so it must run after all other death tests. +class DeathTestAndMultiThreadsTest : public testing::Test { + protected: + // Starts a thread and waits for it to begin. + virtual void SetUp() { + thread_.reset(new ThreadWithParam( + &ThreadRoutine, ¬ifications_, NULL)); + notifications_.spawn_thread_started.WaitForNotification(); + } + // Tells the thread to finish, and reaps it. + // Depending on the version of the thread library in use, + // a manager thread might still be left running that will interfere + // with later death tests. This is unfortunate, but this class + // cleans up after itself as best it can. + virtual void TearDown() { + notifications_.spawn_thread_ok_to_terminate.Notify(); + } + + private: + SpawnThreadNotifications notifications_; + scoped_ptr > thread_; +}; + +#endif // GTEST_IS_THREADSAFE + +// The MixedUpTestCaseTest test case verifies that Google Test will fail a +// test if it uses a different fixture class than what other tests in +// the same test case use. It deliberately contains two fixture +// classes with the same name but defined in different namespaces. + +// The MixedUpTestCaseWithSameTestNameTest test case verifies that +// when the user defines two tests with the same test case name AND +// same test name (but in different namespaces), the second test will +// fail. + +namespace foo { + +class MixedUpTestCaseTest : public testing::Test { +}; + +TEST_F(MixedUpTestCaseTest, FirstTestFromNamespaceFoo) {} +TEST_F(MixedUpTestCaseTest, SecondTestFromNamespaceFoo) {} + +class MixedUpTestCaseWithSameTestNameTest : public testing::Test { +}; + +TEST_F(MixedUpTestCaseWithSameTestNameTest, + TheSecondTestWithThisNameShouldFail) {} + +} // namespace foo + +namespace bar { + +class MixedUpTestCaseTest : public testing::Test { +}; + +// The following two tests are expected to fail. We rely on the +// golden file to check that Google Test generates the right error message. +TEST_F(MixedUpTestCaseTest, ThisShouldFail) {} +TEST_F(MixedUpTestCaseTest, ThisShouldFailToo) {} + +class MixedUpTestCaseWithSameTestNameTest : public testing::Test { +}; + +// Expected to fail. We rely on the golden file to check that Google Test +// generates the right error message. +TEST_F(MixedUpTestCaseWithSameTestNameTest, + TheSecondTestWithThisNameShouldFail) {} + +} // namespace bar + +// The following two test cases verify that Google Test catches the user +// error of mixing TEST and TEST_F in the same test case. The first +// test case checks the scenario where TEST_F appears before TEST, and +// the second one checks where TEST appears before TEST_F. + +class TEST_F_before_TEST_in_same_test_case : public testing::Test { +}; + +TEST_F(TEST_F_before_TEST_in_same_test_case, DefinedUsingTEST_F) {} + +// Expected to fail. We rely on the golden file to check that Google Test +// generates the right error message. +TEST(TEST_F_before_TEST_in_same_test_case, DefinedUsingTESTAndShouldFail) {} + +class TEST_before_TEST_F_in_same_test_case : public testing::Test { +}; + +TEST(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST) {} + +// Expected to fail. We rely on the golden file to check that Google Test +// generates the right error message. +TEST_F(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST_FAndShouldFail) { +} + +// Used for testing EXPECT_NONFATAL_FAILURE() and EXPECT_FATAL_FAILURE(). +int global_integer = 0; + +// Tests that EXPECT_NONFATAL_FAILURE() can reference global variables. +TEST(ExpectNonfatalFailureTest, CanReferenceGlobalVariables) { + global_integer = 0; + EXPECT_NONFATAL_FAILURE({ + EXPECT_EQ(1, global_integer) << "Expected non-fatal failure."; + }, "Expected non-fatal failure."); +} + +// Tests that EXPECT_NONFATAL_FAILURE() can reference local variables +// (static or not). +TEST(ExpectNonfatalFailureTest, CanReferenceLocalVariables) { + int m = 0; + static int n; + n = 1; + EXPECT_NONFATAL_FAILURE({ + EXPECT_EQ(m, n) << "Expected non-fatal failure."; + }, "Expected non-fatal failure."); +} + +// Tests that EXPECT_NONFATAL_FAILURE() succeeds when there is exactly +// one non-fatal failure and no fatal failure. +TEST(ExpectNonfatalFailureTest, SucceedsWhenThereIsOneNonfatalFailure) { + EXPECT_NONFATAL_FAILURE({ + ADD_FAILURE() << "Expected non-fatal failure."; + }, "Expected non-fatal failure."); +} + +// Tests that EXPECT_NONFATAL_FAILURE() fails when there is no +// non-fatal failure. +TEST(ExpectNonfatalFailureTest, FailsWhenThereIsNoNonfatalFailure) { + printf("(expecting a failure)\n"); + EXPECT_NONFATAL_FAILURE({ + }, ""); +} + +// Tests that EXPECT_NONFATAL_FAILURE() fails when there are two +// non-fatal failures. +TEST(ExpectNonfatalFailureTest, FailsWhenThereAreTwoNonfatalFailures) { + printf("(expecting a failure)\n"); + EXPECT_NONFATAL_FAILURE({ + ADD_FAILURE() << "Expected non-fatal failure 1."; + ADD_FAILURE() << "Expected non-fatal failure 2."; + }, ""); +} + +// Tests that EXPECT_NONFATAL_FAILURE() fails when there is one fatal +// failure. +TEST(ExpectNonfatalFailureTest, FailsWhenThereIsOneFatalFailure) { + printf("(expecting a failure)\n"); + EXPECT_NONFATAL_FAILURE({ + FAIL() << "Expected fatal failure."; + }, ""); +} + +// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being +// tested returns. +TEST(ExpectNonfatalFailureTest, FailsWhenStatementReturns) { + printf("(expecting a failure)\n"); + EXPECT_NONFATAL_FAILURE({ + return; + }, ""); +} + +#if GTEST_HAS_EXCEPTIONS + +// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being +// tested throws. +TEST(ExpectNonfatalFailureTest, FailsWhenStatementThrows) { + printf("(expecting a failure)\n"); + try { + EXPECT_NONFATAL_FAILURE({ + throw 0; + }, ""); + } catch(int) { // NOLINT + } +} + +#endif // GTEST_HAS_EXCEPTIONS + +// Tests that EXPECT_FATAL_FAILURE() can reference global variables. +TEST(ExpectFatalFailureTest, CanReferenceGlobalVariables) { + global_integer = 0; + EXPECT_FATAL_FAILURE({ + ASSERT_EQ(1, global_integer) << "Expected fatal failure."; + }, "Expected fatal failure."); +} + +// Tests that EXPECT_FATAL_FAILURE() can reference local static +// variables. +TEST(ExpectFatalFailureTest, CanReferenceLocalStaticVariables) { + static int n; + n = 1; + EXPECT_FATAL_FAILURE({ + ASSERT_EQ(0, n) << "Expected fatal failure."; + }, "Expected fatal failure."); +} + +// Tests that EXPECT_FATAL_FAILURE() succeeds when there is exactly +// one fatal failure and no non-fatal failure. +TEST(ExpectFatalFailureTest, SucceedsWhenThereIsOneFatalFailure) { + EXPECT_FATAL_FAILURE({ + FAIL() << "Expected fatal failure."; + }, "Expected fatal failure."); +} + +// Tests that EXPECT_FATAL_FAILURE() fails when there is no fatal +// failure. +TEST(ExpectFatalFailureTest, FailsWhenThereIsNoFatalFailure) { + printf("(expecting a failure)\n"); + EXPECT_FATAL_FAILURE({ + }, ""); +} + +// A helper for generating a fatal failure. +void FatalFailure() { + FAIL() << "Expected fatal failure."; +} + +// Tests that EXPECT_FATAL_FAILURE() fails when there are two +// fatal failures. +TEST(ExpectFatalFailureTest, FailsWhenThereAreTwoFatalFailures) { + printf("(expecting a failure)\n"); + EXPECT_FATAL_FAILURE({ + FatalFailure(); + FatalFailure(); + }, ""); +} + +// Tests that EXPECT_FATAL_FAILURE() fails when there is one non-fatal +// failure. +TEST(ExpectFatalFailureTest, FailsWhenThereIsOneNonfatalFailure) { + printf("(expecting a failure)\n"); + EXPECT_FATAL_FAILURE({ + ADD_FAILURE() << "Expected non-fatal failure."; + }, ""); +} + +// Tests that EXPECT_FATAL_FAILURE() fails when the statement being +// tested returns. +TEST(ExpectFatalFailureTest, FailsWhenStatementReturns) { + printf("(expecting a failure)\n"); + EXPECT_FATAL_FAILURE({ + return; + }, ""); +} + +#if GTEST_HAS_EXCEPTIONS + +// Tests that EXPECT_FATAL_FAILURE() fails when the statement being +// tested throws. +TEST(ExpectFatalFailureTest, FailsWhenStatementThrows) { + printf("(expecting a failure)\n"); + try { + EXPECT_FATAL_FAILURE({ + throw 0; + }, ""); + } catch(int) { // NOLINT + } +} + +#endif // GTEST_HAS_EXCEPTIONS + +// This #ifdef block tests the output of typed tests. +#if GTEST_HAS_TYPED_TEST + +template +class TypedTest : public testing::Test { +}; + +TYPED_TEST_CASE(TypedTest, testing::Types); + +TYPED_TEST(TypedTest, Success) { + EXPECT_EQ(0, TypeParam()); +} + +TYPED_TEST(TypedTest, Failure) { + EXPECT_EQ(1, TypeParam()) << "Expected failure"; +} + +#endif // GTEST_HAS_TYPED_TEST + +// This #ifdef block tests the output of type-parameterized tests. +#if GTEST_HAS_TYPED_TEST_P + +template +class TypedTestP : public testing::Test { +}; + +TYPED_TEST_CASE_P(TypedTestP); + +TYPED_TEST_P(TypedTestP, Success) { + EXPECT_EQ(0U, TypeParam()); +} + +TYPED_TEST_P(TypedTestP, Failure) { + EXPECT_EQ(1U, TypeParam()) << "Expected failure"; +} + +REGISTER_TYPED_TEST_CASE_P(TypedTestP, Success, Failure); + +typedef testing::Types UnsignedTypes; +INSTANTIATE_TYPED_TEST_CASE_P(Unsigned, TypedTestP, UnsignedTypes); + +#endif // GTEST_HAS_TYPED_TEST_P + +#if GTEST_HAS_DEATH_TEST + +// We rely on the golden file to verify that tests whose test case +// name ends with DeathTest are run first. + +TEST(ADeathTest, ShouldRunFirst) { +} + +#if GTEST_HAS_TYPED_TEST + +// We rely on the golden file to verify that typed tests whose test +// case name ends with DeathTest are run first. + +template +class ATypedDeathTest : public testing::Test { +}; + +typedef testing::Types NumericTypes; +TYPED_TEST_CASE(ATypedDeathTest, NumericTypes); + +TYPED_TEST(ATypedDeathTest, ShouldRunFirst) { +} + +#endif // GTEST_HAS_TYPED_TEST + +#if GTEST_HAS_TYPED_TEST_P + + +// We rely on the golden file to verify that type-parameterized tests +// whose test case name ends with DeathTest are run first. + +template +class ATypeParamDeathTest : public testing::Test { +}; + +TYPED_TEST_CASE_P(ATypeParamDeathTest); + +TYPED_TEST_P(ATypeParamDeathTest, ShouldRunFirst) { +} + +REGISTER_TYPED_TEST_CASE_P(ATypeParamDeathTest, ShouldRunFirst); + +INSTANTIATE_TYPED_TEST_CASE_P(My, ATypeParamDeathTest, NumericTypes); + +#endif // GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_HAS_DEATH_TEST + +// Tests various failure conditions of +// EXPECT_{,NON}FATAL_FAILURE{,_ON_ALL_THREADS}. +class ExpectFailureTest : public testing::Test { + public: // Must be public and not protected due to a bug in g++ 3.4.2. + enum FailureMode { + FATAL_FAILURE, + NONFATAL_FAILURE + }; + static void AddFailure(FailureMode failure) { + if (failure == FATAL_FAILURE) { + FAIL() << "Expected fatal failure."; + } else { + ADD_FAILURE() << "Expected non-fatal failure."; + } + } +}; + +TEST_F(ExpectFailureTest, ExpectFatalFailure) { + // Expected fatal failure, but succeeds. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE(SUCCEED(), "Expected fatal failure."); + // Expected fatal failure, but got a non-fatal failure. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Expected non-fatal " + "failure."); + // Wrong message. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), "Some other fatal failure " + "expected."); +} + +TEST_F(ExpectFailureTest, ExpectNonFatalFailure) { + // Expected non-fatal failure, but succeeds. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE(SUCCEED(), "Expected non-fatal failure."); + // Expected non-fatal failure, but got a fatal failure. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE(AddFailure(FATAL_FAILURE), "Expected fatal failure."); + // Wrong message. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Some other non-fatal " + "failure."); +} + +#if GTEST_IS_THREADSAFE + +class ExpectFailureWithThreadsTest : public ExpectFailureTest { + protected: + static void AddFailureInOtherThread(FailureMode failure) { + ThreadWithParam thread(&AddFailure, failure, NULL); + thread.Join(); + } +}; + +TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailure) { + // We only intercept the current thread. + printf("(expecting 2 failures)\n"); + EXPECT_FATAL_FAILURE(AddFailureInOtherThread(FATAL_FAILURE), + "Expected fatal failure."); +} + +TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailure) { + // We only intercept the current thread. + printf("(expecting 2 failures)\n"); + EXPECT_NONFATAL_FAILURE(AddFailureInOtherThread(NONFATAL_FAILURE), + "Expected non-fatal failure."); +} + +typedef ExpectFailureWithThreadsTest ScopedFakeTestPartResultReporterTest; + +// Tests that the ScopedFakeTestPartResultReporter only catches failures from +// the current thread if it is instantiated with INTERCEPT_ONLY_CURRENT_THREAD. +TEST_F(ScopedFakeTestPartResultReporterTest, InterceptOnlyCurrentThread) { + printf("(expecting 2 failures)\n"); + TestPartResultArray results; + { + ScopedFakeTestPartResultReporter reporter( + ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, + &results); + AddFailureInOtherThread(FATAL_FAILURE); + AddFailureInOtherThread(NONFATAL_FAILURE); + } + // The two failures should not have been intercepted. + EXPECT_EQ(0, results.size()) << "This shouldn't fail."; +} + +#endif // GTEST_IS_THREADSAFE + +TEST_F(ExpectFailureTest, ExpectFatalFailureOnAllThreads) { + // Expected fatal failure, but succeeds. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected fatal failure."); + // Expected fatal failure, but got a non-fatal failure. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), + "Expected non-fatal failure."); + // Wrong message. + printf("(expecting 1 failure)\n"); + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), + "Some other fatal failure expected."); +} + +TEST_F(ExpectFailureTest, ExpectNonFatalFailureOnAllThreads) { + // Expected non-fatal failure, but succeeds. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected non-fatal " + "failure."); + // Expected non-fatal failure, but got a fatal failure. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), + "Expected fatal failure."); + // Wrong message. + printf("(expecting 1 failure)\n"); + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), + "Some other non-fatal failure."); +} + + +// Two test environments for testing testing::AddGlobalTestEnvironment(). + +class FooEnvironment : public testing::Environment { + public: + virtual void SetUp() { + printf("%s", "FooEnvironment::SetUp() called.\n"); + } + + virtual void TearDown() { + printf("%s", "FooEnvironment::TearDown() called.\n"); + FAIL() << "Expected fatal failure."; + } +}; + +class BarEnvironment : public testing::Environment { + public: + virtual void SetUp() { + printf("%s", "BarEnvironment::SetUp() called.\n"); + } + + virtual void TearDown() { + printf("%s", "BarEnvironment::TearDown() called.\n"); + ADD_FAILURE() << "Expected non-fatal failure."; + } +}; + +GTEST_DEFINE_bool_(internal_skip_environment_and_ad_hoc_tests, false, + "This flag causes the program to skip test environment " + "tests and ad hoc tests."); + +// The main function. +// +// The idea is to use Google Test to run all the tests we have defined (some +// of them are intended to fail), and then compare the test results +// with the "golden" file. +int main(int argc, char **argv) { + testing::GTEST_FLAG(print_time) = false; + + // We just run the tests, knowing some of them are intended to fail. + // We will use a separate Python script to compare the output of + // this program with the golden file. + + // It's hard to test InitGoogleTest() directly, as it has many + // global side effects. The following line serves as a sanity test + // for it. + testing::InitGoogleTest(&argc, argv); + if (argc >= 2 && + String(argv[1]) == "--gtest_internal_skip_environment_and_ad_hoc_tests") + GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = true; + +#if GTEST_HAS_DEATH_TEST + if (testing::internal::GTEST_FLAG(internal_run_death_test) != "") { + // Skip the usual output capturing if we're running as the child + // process of an threadsafe-style death test. +#if GTEST_OS_WINDOWS + posix::FReopen("nul:", "w", stdout); +#else + posix::FReopen("/dev/null", "w", stdout); +#endif // GTEST_OS_WINDOWS + return RUN_ALL_TESTS(); + } +#endif // GTEST_HAS_DEATH_TEST + + if (GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests)) + return RUN_ALL_TESTS(); + + // Registers two global test environments. + // The golden file verifies that they are set up in the order they + // are registered, and torn down in the reverse order. + testing::AddGlobalTestEnvironment(new FooEnvironment); + testing::AddGlobalTestEnvironment(new BarEnvironment); + + return RunAllTests(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_lin.txt b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_lin.txt new file mode 100644 index 00000000..ec60437a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_lin.txt @@ -0,0 +1,696 @@ +The non-test part of the code is expected to have 2 failures. + +gtest_output_test_.cc:#: Failure +Value of: false + Actual: false +Expected: true +gtest_output_test_.cc:#: Failure +Value of: 3 +Expected: 2 +[==========] Running 60 tests from 25 test cases. +[----------] Global test environment set-up. +FooEnvironment::SetUp() called. +BarEnvironment::SetUp() called. +[----------] 1 test from ADeathTest +[ RUN ] ADeathTest.ShouldRunFirst +[ OK ] ADeathTest.ShouldRunFirst +[----------] 1 test from ATypedDeathTest/0, where TypeParam = int +[ RUN ] ATypedDeathTest/0.ShouldRunFirst +[ OK ] ATypedDeathTest/0.ShouldRunFirst +[----------] 1 test from ATypedDeathTest/1, where TypeParam = double +[ RUN ] ATypedDeathTest/1.ShouldRunFirst +[ OK ] ATypedDeathTest/1.ShouldRunFirst +[----------] 1 test from My/ATypeParamDeathTest/0, where TypeParam = int +[ RUN ] My/ATypeParamDeathTest/0.ShouldRunFirst +[ OK ] My/ATypeParamDeathTest/0.ShouldRunFirst +[----------] 1 test from My/ATypeParamDeathTest/1, where TypeParam = double +[ RUN ] My/ATypeParamDeathTest/1.ShouldRunFirst +[ OK ] My/ATypeParamDeathTest/1.ShouldRunFirst +[----------] 2 tests from PassingTest +[ RUN ] PassingTest.PassingTest1 +[ OK ] PassingTest.PassingTest1 +[ RUN ] PassingTest.PassingTest2 +[ OK ] PassingTest.PassingTest2 +[----------] 3 tests from FatalFailureTest +[ RUN ] FatalFailureTest.FatalFailureInSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: Failure +Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: Failure +Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine +(expecting a failure on false) +gtest_output_test_.cc:#: Failure +Value of: false + Actual: false +Expected: true +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[----------] 1 test from LoggingTest +[ RUN ] LoggingTest.InterleavingLoggingAndAssertions +(expecting 2 failures on (3) >= (a[i])) +i == 0 +i == 1 +gtest_output_test_.cc:#: Failure +Expected: (3) >= (a[i]), actual: 3 vs 9 +i == 2 +i == 3 +gtest_output_test_.cc:#: Failure +Expected: (3) >= (a[i]), actual: 3 vs 6 +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions +[----------] 6 tests from SCOPED_TRACETest +[ RUN ] SCOPED_TRACETest.ObeysScopes +(expected to fail) +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and shouldn't have a trace. +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and should have a trace. +Google Test trace: +gtest_output_test_.cc:#: Expected trace +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and shouldn't have a trace. +[ FAILED ] SCOPED_TRACETest.ObeysScopes +[ RUN ] SCOPED_TRACETest.WorksInLoop +(expected to fail) +gtest_output_test_.cc:#: Failure +Value of: n + Actual: 1 +Expected: 2 +Google Test trace: +gtest_output_test_.cc:#: i = 1 +gtest_output_test_.cc:#: Failure +Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: i = 2 +[ FAILED ] SCOPED_TRACETest.WorksInLoop +[ RUN ] SCOPED_TRACETest.WorksInSubroutine +(expected to fail) +gtest_output_test_.cc:#: Failure +Value of: n + Actual: 1 +Expected: 2 +Google Test trace: +gtest_output_test_.cc:#: n = 1 +gtest_output_test_.cc:#: Failure +Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: n = 2 +[ FAILED ] SCOPED_TRACETest.WorksInSubroutine +[ RUN ] SCOPED_TRACETest.CanBeNested +(expected to fail) +gtest_output_test_.cc:#: Failure +Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: n = 2 +gtest_output_test_.cc:#: +[ FAILED ] SCOPED_TRACETest.CanBeNested +[ RUN ] SCOPED_TRACETest.CanBeRepeated +(expected to fail) +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and should contain trace point A. +Google Test trace: +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and should contain trace point A and B. +Google Test trace: +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and should contain trace point A, B, and C. +Google Test trace: +gtest_output_test_.cc:#: C +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: Failure +Failed +This failure is expected, and should contain trace point A, B, and D. +Google Test trace: +gtest_output_test_.cc:#: D +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +[ FAILED ] SCOPED_TRACETest.CanBeRepeated +[ RUN ] SCOPED_TRACETest.WorksConcurrently +(expecting 6 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected failure #1 (in thread B, only trace B alive). +Google Test trace: +gtest_output_test_.cc:#: Trace B +gtest_output_test_.cc:#: Failure +Failed +Expected failure #2 (in thread A, trace A & B both alive). +Google Test trace: +gtest_output_test_.cc:#: Trace A +gtest_output_test_.cc:#: Failure +Failed +Expected failure #3 (in thread B, trace A & B both alive). +Google Test trace: +gtest_output_test_.cc:#: Trace B +gtest_output_test_.cc:#: Failure +Failed +Expected failure #4 (in thread B, only trace A alive). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #5 (in thread A, only trace A alive). +Google Test trace: +gtest_output_test_.cc:#: Trace A +gtest_output_test_.cc:#: Failure +Failed +Expected failure #6 (in thread A, no trace alive). +[ FAILED ] SCOPED_TRACETest.WorksConcurrently +[----------] 1 test from NonFatalFailureInFixtureConstructorTest +[ RUN ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +(expecting 5 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected failure #1, in the test fixture c'tor. +gtest_output_test_.cc:#: Failure +Failed +Expected failure #2, in SetUp(). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #3, in the test body. +gtest_output_test_.cc:#: Failure +Failed +Expected failure #4, in TearDown. +gtest_output_test_.cc:#: Failure +Failed +Expected failure #5, in the test fixture d'tor. +[ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +[----------] 1 test from FatalFailureInFixtureConstructorTest +[ RUN ] FatalFailureInFixtureConstructorTest.FailureInConstructor +(expecting 2 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected failure #1, in the test fixture c'tor. +gtest_output_test_.cc:#: Failure +Failed +Expected failure #2, in the test fixture d'tor. +[ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor +[----------] 1 test from NonFatalFailureInSetUpTest +[ RUN ] NonFatalFailureInSetUpTest.FailureInSetUp +(expecting 4 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected failure #1, in SetUp(). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #2, in the test function. +gtest_output_test_.cc:#: Failure +Failed +Expected failure #3, in TearDown(). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #4, in the test fixture d'tor. +[ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp +[----------] 1 test from FatalFailureInSetUpTest +[ RUN ] FatalFailureInSetUpTest.FailureInSetUp +(expecting 3 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected failure #1, in SetUp(). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #2, in TearDown(). +gtest_output_test_.cc:#: Failure +Failed +Expected failure #3, in the test fixture d'tor. +[ FAILED ] FatalFailureInSetUpTest.FailureInSetUp +[----------] 4 tests from MixedUpTestCaseTest +[ RUN ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo +[ OK ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo +[ RUN ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo +[ OK ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo +[ RUN ] MixedUpTestCaseTest.ThisShouldFail +gtest.cc:#: Failure +Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseTest, +you defined test FirstTestFromNamespaceFoo and test ThisShouldFail +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseTest.ThisShouldFail +[ RUN ] MixedUpTestCaseTest.ThisShouldFailToo +gtest.cc:#: Failure +Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseTest, +you defined test FirstTestFromNamespaceFoo and test ThisShouldFailToo +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo +[----------] 2 tests from MixedUpTestCaseWithSameTestNameTest +[ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ OK ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +gtest.cc:#: Failure +Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseWithSameTestNameTest, +you defined test TheSecondTestWithThisNameShouldFail and test TheSecondTestWithThisNameShouldFail +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[----------] 2 tests from TEST_F_before_TEST_in_same_test_case +[ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F +[ OK ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F +[ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +gtest.cc:#: Failure +Failed +All tests in the same test case must use the same test fixture +class, so mixing TEST_F and TEST in the same test case is +illegal. In test case TEST_F_before_TEST_in_same_test_case, +test DefinedUsingTEST_F is defined using TEST_F but +test DefinedUsingTESTAndShouldFail is defined using TEST. You probably +want to change the TEST to TEST_F or move it to another test +case. +[ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +[----------] 2 tests from TEST_before_TEST_F_in_same_test_case +[ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST +[ OK ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST +[ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +gtest.cc:#: Failure +Failed +All tests in the same test case must use the same test fixture +class, so mixing TEST_F and TEST in the same test case is +illegal. In test case TEST_before_TEST_F_in_same_test_case, +test DefinedUsingTEST_FAndShouldFail is defined using TEST_F but +test DefinedUsingTEST is defined using TEST. You probably +want to change the TEST to TEST_F or move it to another test +case. +[ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +[----------] 8 tests from ExpectNonfatalFailureTest +[ RUN ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables +[ OK ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables +[ RUN ] ExpectNonfatalFailureTest.CanReferenceLocalVariables +[ OK ] ExpectNonfatalFailureTest.CanReferenceLocalVariables +[ RUN ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure +[ OK ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: 2 failures +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure 1. + +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure 2. + +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +[ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +[----------] 8 tests from ExpectFatalFailureTest +[ RUN ] ExpectFatalFailureTest.CanReferenceGlobalVariables +[ OK ] ExpectFatalFailureTest.CanReferenceGlobalVariables +[ RUN ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables +[ OK ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables +[ RUN ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure +[ OK ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: 2 failures +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +[ RUN ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenStatementReturns +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns +[ RUN ] ExpectFatalFailureTest.FailsWhenStatementThrows +(expecting a failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows +[----------] 2 tests from TypedTest/0, where TypeParam = int +[ RUN ] TypedTest/0.Success +[ OK ] TypedTest/0.Success +[ RUN ] TypedTest/0.Failure +gtest_output_test_.cc:#: Failure +Value of: TypeParam() + Actual: 0 +Expected: 1 +Expected failure +[ FAILED ] TypedTest/0.Failure +[----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char +[ RUN ] Unsigned/TypedTestP/0.Success +[ OK ] Unsigned/TypedTestP/0.Success +[ RUN ] Unsigned/TypedTestP/0.Failure +gtest_output_test_.cc:#: Failure +Value of: TypeParam() + Actual: \0 +Expected: 1U +Which is: 1 +Expected failure +[ FAILED ] Unsigned/TypedTestP/0.Failure +[----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned int +[ RUN ] Unsigned/TypedTestP/1.Success +[ OK ] Unsigned/TypedTestP/1.Success +[ RUN ] Unsigned/TypedTestP/1.Failure +gtest_output_test_.cc:#: Failure +Value of: TypeParam() + Actual: 0 +Expected: 1U +Which is: 1 +Expected failure +[ FAILED ] Unsigned/TypedTestP/1.Failure +[----------] 4 tests from ExpectFailureTest +[ RUN ] ExpectFailureTest.ExpectFatalFailure +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure containing "Some other fatal failure expected." + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectFatalFailure +[ RUN ] ExpectFailureTest.ExpectNonFatalFailure +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure containing "Some other non-fatal failure." + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailure +[ RUN ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 fatal failure containing "Some other fatal failure expected." + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +[ RUN ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +(expecting 1 failure) +gtest.cc:#: Failure +Expected: 1 non-fatal failure containing "Some other non-fatal failure." + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads +[----------] 2 tests from ExpectFailureWithThreadsTest +[ RUN ] ExpectFailureWithThreadsTest.ExpectFatalFailure +(expecting 2 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected fatal failure. +gtest.cc:#: Failure +Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFailureWithThreadsTest.ExpectFatalFailure +[ RUN ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure +(expecting 2 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected non-fatal failure. +gtest.cc:#: Failure +Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure +[----------] 1 test from ScopedFakeTestPartResultReporterTest +[ RUN ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread +(expecting 2 failures) +gtest_output_test_.cc:#: Failure +Failed +Expected fatal failure. +gtest_output_test_.cc:#: Failure +Failed +Expected non-fatal failure. +[ FAILED ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread +[----------] Global test environment tear-down +BarEnvironment::TearDown() called. +gtest_output_test_.cc:#: Failure +Failed +Expected non-fatal failure. +FooEnvironment::TearDown() called. +gtest_output_test_.cc:#: Failure +Failed +Expected fatal failure. +[==========] 60 tests from 25 test cases ran. +[ PASSED ] 21 tests. +[ FAILED ] 39 tests, listed below: +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions +[ FAILED ] SCOPED_TRACETest.ObeysScopes +[ FAILED ] SCOPED_TRACETest.WorksInLoop +[ FAILED ] SCOPED_TRACETest.WorksInSubroutine +[ FAILED ] SCOPED_TRACETest.CanBeNested +[ FAILED ] SCOPED_TRACETest.CanBeRepeated +[ FAILED ] SCOPED_TRACETest.WorksConcurrently +[ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +[ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor +[ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp +[ FAILED ] FatalFailureInSetUpTest.FailureInSetUp +[ FAILED ] MixedUpTestCaseTest.ThisShouldFail +[ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo +[ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +[ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows +[ FAILED ] TypedTest/0.Failure, where TypeParam = int +[ FAILED ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char +[ FAILED ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned int +[ FAILED ] ExpectFailureTest.ExpectFatalFailure +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailure +[ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads +[ FAILED ] ExpectFailureWithThreadsTest.ExpectFatalFailure +[ FAILED ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure +[ FAILED ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread + +39 FAILED TESTS + YOU HAVE 1 DISABLED TEST + +Note: Google Test filter = FatalFailureTest.*:LoggingTest.* +[==========] Running 4 tests from 2 test cases. +[----------] Global test environment set-up. +[----------] 3 tests from FatalFailureTest +[ RUN ] FatalFailureTest.FatalFailureInSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: Failure +Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine (? ms) +[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: Failure +Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine (? ms) +[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine +(expecting a failure on false) +gtest_output_test_.cc:#: Failure +Value of: false + Actual: false +Expected: true +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine (? ms) +[----------] 3 tests from FatalFailureTest (? ms total) + +[----------] 1 test from LoggingTest +[ RUN ] LoggingTest.InterleavingLoggingAndAssertions +(expecting 2 failures on (3) >= (a[i])) +i == 0 +i == 1 +gtest_output_test_.cc:#: Failure +Expected: (3) >= (a[i]), actual: 3 vs 9 +i == 2 +i == 3 +gtest_output_test_.cc:#: Failure +Expected: (3) >= (a[i]), actual: 3 vs 6 +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions (? ms) +[----------] 1 test from LoggingTest (? ms total) + +[----------] Global test environment tear-down +[==========] 4 tests from 2 test cases ran. (? ms total) +[ PASSED ] 0 tests. +[ FAILED ] 4 tests, listed below: +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions + + 4 FAILED TESTS + YOU HAVE 1 DISABLED TEST + +Note: Google Test filter = *DISABLED_* +[==========] Running 1 test from 1 test case. +[----------] Global test environment set-up. +[----------] 1 test from DisabledTestsWarningTest +[ RUN ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning +[ OK ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning +[----------] Global test environment tear-down +[==========] 1 test from 1 test case ran. +[ PASSED ] 1 test. +Note: Google Test filter = PassingTest.* +Note: This is test shard 1 of 2. +[==========] Running 1 test from 1 test case. +[----------] Global test environment set-up. +[----------] 1 test from PassingTest +[ RUN ] PassingTest.PassingTest2 +[ OK ] PassingTest.PassingTest2 +[----------] Global test environment tear-down +[==========] 1 test from 1 test case ran. +[ PASSED ] 1 test. + + YOU HAVE 1 DISABLED TEST + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_win.txt b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_win.txt new file mode 100644 index 00000000..313c3aaf --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_output_test_golden_win.txt @@ -0,0 +1,605 @@ +The non-test part of the code is expected to have 2 failures. + +gtest_output_test_.cc:#: error: Value of: false + Actual: false +Expected: true +gtest_output_test_.cc:#: error: Value of: 3 +Expected: 2 +[==========] Running 61 tests from 27 test cases. +[----------] Global test environment set-up. +FooEnvironment::SetUp() called. +BarEnvironment::SetUp() called. +[----------] 1 test from ADeathTest +[ RUN ] ADeathTest.ShouldRunFirst +[ OK ] ADeathTest.ShouldRunFirst +[----------] 1 test from ATypedDeathTest/0, where TypeParam = int +[ RUN ] ATypedDeathTest/0.ShouldRunFirst +[ OK ] ATypedDeathTest/0.ShouldRunFirst +[----------] 1 test from ATypedDeathTest/1, where TypeParam = double +[ RUN ] ATypedDeathTest/1.ShouldRunFirst +[ OK ] ATypedDeathTest/1.ShouldRunFirst +[----------] 1 test from My/ATypeParamDeathTest/0, where TypeParam = int +[ RUN ] My/ATypeParamDeathTest/0.ShouldRunFirst +[ OK ] My/ATypeParamDeathTest/0.ShouldRunFirst +[----------] 1 test from My/ATypeParamDeathTest/1, where TypeParam = double +[ RUN ] My/ATypeParamDeathTest/1.ShouldRunFirst +[ OK ] My/ATypeParamDeathTest/1.ShouldRunFirst +[----------] 2 tests from PassingTest +[ RUN ] PassingTest.PassingTest1 +[ OK ] PassingTest.PassingTest1 +[ RUN ] PassingTest.PassingTest2 +[ OK ] PassingTest.PassingTest2 +[----------] 3 tests from FatalFailureTest +[ RUN ] FatalFailureTest.FatalFailureInSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: error: Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: error: Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine +(expecting a failure on false) +gtest_output_test_.cc:#: error: Value of: false + Actual: false +Expected: true +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[----------] 1 test from LoggingTest +[ RUN ] LoggingTest.InterleavingLoggingAndAssertions +(expecting 2 failures on (3) >= (a[i])) +i == 0 +i == 1 +gtest_output_test_.cc:#: error: Expected: (3) >= (a[i]), actual: 3 vs 9 +i == 2 +i == 3 +gtest_output_test_.cc:#: error: Expected: (3) >= (a[i]), actual: 3 vs 6 +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions +[----------] 5 tests from SCOPED_TRACETest +[ RUN ] SCOPED_TRACETest.ObeysScopes +(expected to fail) +gtest_output_test_.cc:#: error: Failed +This failure is expected, and shouldn't have a trace. +gtest_output_test_.cc:#: error: Failed +This failure is expected, and should have a trace. +Google Test trace: +gtest_output_test_.cc:#: Expected trace +gtest_output_test_.cc:#: error: Failed +This failure is expected, and shouldn't have a trace. +[ FAILED ] SCOPED_TRACETest.ObeysScopes +[ RUN ] SCOPED_TRACETest.WorksInLoop +(expected to fail) +gtest_output_test_.cc:#: error: Value of: n + Actual: 1 +Expected: 2 +Google Test trace: +gtest_output_test_.cc:#: i = 1 +gtest_output_test_.cc:#: error: Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: i = 2 +[ FAILED ] SCOPED_TRACETest.WorksInLoop +[ RUN ] SCOPED_TRACETest.WorksInSubroutine +(expected to fail) +gtest_output_test_.cc:#: error: Value of: n + Actual: 1 +Expected: 2 +Google Test trace: +gtest_output_test_.cc:#: n = 1 +gtest_output_test_.cc:#: error: Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: n = 2 +[ FAILED ] SCOPED_TRACETest.WorksInSubroutine +[ RUN ] SCOPED_TRACETest.CanBeNested +(expected to fail) +gtest_output_test_.cc:#: error: Value of: n + Actual: 2 +Expected: 1 +Google Test trace: +gtest_output_test_.cc:#: n = 2 +gtest_output_test_.cc:#: +[ FAILED ] SCOPED_TRACETest.CanBeNested +[ RUN ] SCOPED_TRACETest.CanBeRepeated +(expected to fail) +gtest_output_test_.cc:#: error: Failed +This failure is expected, and should contain trace point A. +Google Test trace: +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: error: Failed +This failure is expected, and should contain trace point A and B. +Google Test trace: +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: error: Failed +This failure is expected, and should contain trace point A, B, and C. +Google Test trace: +gtest_output_test_.cc:#: C +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +gtest_output_test_.cc:#: error: Failed +This failure is expected, and should contain trace point A, B, and D. +Google Test trace: +gtest_output_test_.cc:#: D +gtest_output_test_.cc:#: B +gtest_output_test_.cc:#: A +[ FAILED ] SCOPED_TRACETest.CanBeRepeated +[----------] 1 test from NonFatalFailureInFixtureConstructorTest +[ RUN ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +(expecting 5 failures) +gtest_output_test_.cc:#: error: Failed +Expected failure #1, in the test fixture c'tor. +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in SetUp(). +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in the test body. +gtest_output_test_.cc:#: error: Failed +Expected failure #4, in TearDown. +gtest_output_test_.cc:#: error: Failed +Expected failure #5, in the test fixture d'tor. +[ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +[----------] 1 test from FatalFailureInFixtureConstructorTest +[ RUN ] FatalFailureInFixtureConstructorTest.FailureInConstructor +(expecting 2 failures) +gtest_output_test_.cc:#: error: Failed +Expected failure #1, in the test fixture c'tor. +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in the test fixture d'tor. +[ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor +[----------] 1 test from NonFatalFailureInSetUpTest +[ RUN ] NonFatalFailureInSetUpTest.FailureInSetUp +(expecting 4 failures) +gtest_output_test_.cc:#: error: Failed +Expected failure #1, in SetUp(). +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in the test function. +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #4, in the test fixture d'tor. +[ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp +[----------] 1 test from FatalFailureInSetUpTest +[ RUN ] FatalFailureInSetUpTest.FailureInSetUp +(expecting 3 failures) +gtest_output_test_.cc:#: error: Failed +Expected failure #1, in SetUp(). +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in the test fixture d'tor. +[ FAILED ] FatalFailureInSetUpTest.FailureInSetUp +[----------] 1 test from ExceptionInFixtureCtorTest +[ RUN ] ExceptionInFixtureCtorTest.ExceptionInFixtureCtor +(expecting a failure on thrown exception in the test fixture's constructor) +unknown file: error: Exception thrown with code 0xc0000005 in the test fixture's constructor. +[----------] 1 test from ExceptionInSetUpTest +[ RUN ] ExceptionInSetUpTest.ExceptionInSetUp +(expecting 3 failures) +unknown file: error: Exception thrown with code 0xc0000005 in SetUp(). +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in the test fixture d'tor. +[ FAILED ] ExceptionInSetUpTest.ExceptionInSetUp +[----------] 2 tests from ExceptionInTestFunctionTest +[ RUN ] ExceptionInTestFunctionTest.SEH +(expecting 3 failures) +unknown file: error: Exception thrown with code 0xc0000005 in the test body. +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in the test fixture d'tor. +[ FAILED ] ExceptionInTestFunctionTest.SEH +[ RUN ] ExceptionInTestFunctionTest.CppException +unknown file: error: Exception thrown with code 0xe06d7363 in the test body. +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #3, in the test fixture d'tor. +[ FAILED ] ExceptionInTestFunctionTest.CppException +[----------] 1 test from ExceptionInTearDownTest +[ RUN ] ExceptionInTearDownTest.ExceptionInTearDown +(expecting 2 failures) +unknown file: error: Exception thrown with code 0xe06d7363 in TearDown(). +gtest_output_test_.cc:#: error: Failed +Expected failure #2, in the test fixture d'tor. +[ FAILED ] ExceptionInTearDownTest.ExceptionInTearDown +[----------] 4 tests from MixedUpTestCaseTest +[ RUN ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo +[ OK ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo +[ RUN ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo +[ OK ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo +[ RUN ] MixedUpTestCaseTest.ThisShouldFail +gtest.cc:#: error: Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseTest, +you defined test FirstTestFromNamespaceFoo and test ThisShouldFail +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseTest.ThisShouldFail +[ RUN ] MixedUpTestCaseTest.ThisShouldFailToo +gtest.cc:#: error: Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseTest, +you defined test FirstTestFromNamespaceFoo and test ThisShouldFailToo +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo +[----------] 2 tests from MixedUpTestCaseWithSameTestNameTest +[ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ OK ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +gtest.cc:#: error: Failed +All tests in the same test case must use the same test fixture +class. However, in test case MixedUpTestCaseWithSameTestNameTest, +you defined test TheSecondTestWithThisNameShouldFail and test TheSecondTestWithThisNameShouldFail +using two different test fixture classes. This can happen if +the two classes are from different namespaces or translation +units and have the same name. You should probably rename one +of the classes to put the tests into different test cases. +[ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[----------] 2 tests from TEST_F_before_TEST_in_same_test_case +[ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F +[ OK ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F +[ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +gtest.cc:#: error: Failed +All tests in the same test case must use the same test fixture +class, so mixing TEST_F and TEST in the same test case is +illegal. In test case TEST_F_before_TEST_in_same_test_case, +test DefinedUsingTEST_F is defined using TEST_F but +test DefinedUsingTESTAndShouldFail is defined using TEST. You probably +want to change the TEST to TEST_F or move it to another test +case. +[ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +[----------] 2 tests from TEST_before_TEST_F_in_same_test_case +[ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST +[ OK ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST +[ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +gtest.cc:#: error: Failed +All tests in the same test case must use the same test fixture +class, so mixing TEST_F and TEST in the same test case is +illegal. In test case TEST_before_TEST_F_in_same_test_case, +test DefinedUsingTEST_FAndShouldFail is defined using TEST_F but +test DefinedUsingTEST is defined using TEST. You probably +want to change the TEST to TEST_F or move it to another test +case. +[ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +[----------] 8 tests from ExpectNonfatalFailureTest +[ RUN ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables +[ OK ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables +[ RUN ] ExpectNonfatalFailureTest.CanReferenceLocalVariables +[ OK ] ExpectNonfatalFailureTest.CanReferenceLocalVariables +[ RUN ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure +[ OK ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +(expecting a failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +(expecting a failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: 2 failures +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure 1. + +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure 2. + +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +[ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +(expecting a failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +[ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +(expecting a failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +[ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +(expecting a failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: 0 failures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +[----------] 8 tests from ExpectFatalFailureTest +[ RUN ] ExpectFatalFailureTest.CanReferenceGlobalVariables +[ OK ] ExpectFatalFailureTest.CanReferenceGlobalVariables +[ RUN ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables +[ OK ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables +[ RUN ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure +[ OK ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +(expecting a failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +(expecting a failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: 2 failures +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +[ RUN ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +(expecting a failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +[ RUN ] ExpectFatalFailureTest.FailsWhenStatementReturns +(expecting a failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns +[ RUN ] ExpectFatalFailureTest.FailsWhenStatementThrows +(expecting a failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: 0 failures +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows +[----------] 2 tests from TypedTest/0, where TypeParam = int +[ RUN ] TypedTest/0.Success +[ OK ] TypedTest/0.Success +[ RUN ] TypedTest/0.Failure +gtest_output_test_.cc:#: error: Value of: TypeParam() + Actual: 0 +Expected: 1 +Expected failure +[ FAILED ] TypedTest/0.Failure +[----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char +[ RUN ] Unsigned/TypedTestP/0.Success +[ OK ] Unsigned/TypedTestP/0.Success +[ RUN ] Unsigned/TypedTestP/0.Failure +gtest_output_test_.cc:#: error: Value of: TypeParam() + Actual: \0 +Expected: 1U +Which is: 1 +Expected failure +[ FAILED ] Unsigned/TypedTestP/0.Failure +[----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned int +[ RUN ] Unsigned/TypedTestP/1.Success +[ OK ] Unsigned/TypedTestP/1.Success +[ RUN ] Unsigned/TypedTestP/1.Failure +gtest_output_test_.cc:#: error: Value of: TypeParam() + Actual: 0 +Expected: 1U +Which is: 1 +Expected failure +[ FAILED ] Unsigned/TypedTestP/1.Failure +[----------] 4 tests from ExpectFailureTest +[ RUN ] ExpectFailureTest.ExpectFatalFailure +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure containing "Some other fatal failure expected." + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectFatalFailure +[ RUN ] ExpectFailureTest.ExpectNonFatalFailure +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure containing "Some other non-fatal failure." + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailure +[ RUN ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 fatal failure containing "Some other fatal failure expected." + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +[ RUN ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Success: +Succeeded + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure + Actual: +gtest_output_test_.cc:#: Fatal failure: +Failed +Expected fatal failure. + +(expecting 1 failure) +gtest.cc:#: error: Expected: 1 non-fatal failure containing "Some other non-fatal failure." + Actual: +gtest_output_test_.cc:#: Non-fatal failure: +Failed +Expected non-fatal failure. + +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads +[----------] Global test environment tear-down +BarEnvironment::TearDown() called. +gtest_output_test_.cc:#: error: Failed +Expected non-fatal failure. +FooEnvironment::TearDown() called. +gtest_output_test_.cc:#: error: Failed +Expected fatal failure. +[==========] 61 tests from 27 test cases ran. +[ PASSED ] 21 tests. +[ FAILED ] 40 tests, listed below: +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions +[ FAILED ] SCOPED_TRACETest.ObeysScopes +[ FAILED ] SCOPED_TRACETest.WorksInLoop +[ FAILED ] SCOPED_TRACETest.WorksInSubroutine +[ FAILED ] SCOPED_TRACETest.CanBeNested +[ FAILED ] SCOPED_TRACETest.CanBeRepeated +[ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor +[ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor +[ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp +[ FAILED ] FatalFailureInSetUpTest.FailureInSetUp +[ FAILED ] ExceptionInFixtureCtorTest.ExceptionInFixtureCtor +[ FAILED ] ExceptionInSetUpTest.ExceptionInSetUp +[ FAILED ] ExceptionInTestFunctionTest.SEH +[ FAILED ] ExceptionInTestFunctionTest.CppException +[ FAILED ] ExceptionInTearDownTest.ExceptionInTearDown +[ FAILED ] MixedUpTestCaseTest.ThisShouldFail +[ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo +[ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail +[ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail +[ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns +[ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures +[ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns +[ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows +[ FAILED ] TypedTest/0.Failure, where TypeParam = int +[ FAILED ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char +[ FAILED ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned int +[ FAILED ] ExpectFailureTest.ExpectFatalFailure +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailure +[ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads +[ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads + +40 FAILED TESTS + YOU HAVE 1 DISABLED TEST + +Note: Google Test filter = FatalFailureTest.*:LoggingTest.* +[==========] Running 4 tests from 2 test cases. +[----------] Global test environment set-up. +[----------] 3 tests from FatalFailureTest +[ RUN ] FatalFailureTest.FatalFailureInSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: error: Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine (? ms) +[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine +(expecting a failure that x should be 1) +gtest_output_test_.cc:#: error: Value of: x + Actual: 2 +Expected: 1 +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine (? ms) +[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine +(expecting a failure on false) +gtest_output_test_.cc:#: error: Value of: false + Actual: false +Expected: true +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine (? ms) +[----------] 3 tests from FatalFailureTest (? ms total) + +[----------] 1 test from LoggingTest +[ RUN ] LoggingTest.InterleavingLoggingAndAssertions +(expecting 2 failures on (3) >= (a[i])) +i == 0 +i == 1 +gtest_output_test_.cc:#: error: Expected: (3) >= (a[i]), actual: 3 vs 9 +i == 2 +i == 3 +gtest_output_test_.cc:#: error: Expected: (3) >= (a[i]), actual: 3 vs 6 +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions (? ms) +[----------] 1 test from LoggingTest (? ms total) + +[----------] Global test environment tear-down +[==========] 4 tests from 2 test cases ran. (? ms total) +[ PASSED ] 0 tests. +[ FAILED ] 4 tests, listed below: +[ FAILED ] FatalFailureTest.FatalFailureInSubroutine +[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine +[ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine +[ FAILED ] LoggingTest.InterleavingLoggingAndAssertions + + 4 FAILED TESTS + YOU HAVE 1 DISABLED TEST + +Note: Google Test filter = *DISABLED_* +[==========] Running 1 test from 1 test case. +[----------] Global test environment set-up. +[----------] 1 test from DisabledTestsWarningTest +[ RUN ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning +[ OK ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning +[----------] Global test environment tear-down +[==========] 1 test from 1 test case ran. +[ PASSED ] 1 test. +Note: Google Test filter = PassingTest.* +Note: This is test shard 1 of 2. +[==========] Running 1 test from 1 test case. +[----------] Global test environment set-up. +[----------] 1 test from PassingTest +[ RUN ] PassingTest.PassingTest2 +[ OK ] PassingTest.PassingTest2 +[----------] Global test environment tear-down +[==========] 1 test from 1 test case ran. +[ PASSED ] 1 test. + + YOU HAVE 1 DISABLED TEST + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_pred_impl_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_pred_impl_unittest.cc new file mode 100644 index 00000000..e7ee54b5 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_pred_impl_unittest.cc @@ -0,0 +1,2432 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on 10/02/2008 by command +// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! + +// Regression test for gtest_pred_impl.h +// +// This file is generated by a script and quite long. If you intend to +// learn how Google Test works by reading its unit tests, read +// gtest_unittest.cc instead. +// +// This is intended as a regression test for the Google Test predicate +// assertions. We compile it as part of the gtest_unittest target +// only to keep the implementation tidy and compact, as it is quite +// involved to set up the stage for testing Google Test using Google +// Test itself. +// +// Currently, gtest_unittest takes ~11 seconds to run in the testing +// daemon. In the future, if it grows too large and needs much more +// time to finish, we should consider separating this file into a +// stand-alone regression test. + +#include + +#include +#include + +// A user-defined data type. +struct Bool { + explicit Bool(int val) : value(val != 0) {} + + bool operator>(int n) const { return value > Bool(n).value; } + + Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); } + + bool operator==(const Bool& rhs) const { return value == rhs.value; } + + bool value; +}; + +// Enables Bool to be used in assertions. +std::ostream& operator<<(std::ostream& os, const Bool& x) { + return os << (x.value ? "true" : "false"); +} + +// Sample functions/functors for testing unary predicate assertions. + +// A unary predicate function. +template +bool PredFunction1(T1 v1) { + return v1 > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction1Int(int v1) { + return v1 > 0; +} +bool PredFunction1Bool(Bool v1) { + return v1 > 0; +} + +// A unary predicate functor. +struct PredFunctor1 { + template + bool operator()(const T1& v1) { + return v1 > 0; + } +}; + +// A unary predicate-formatter function. +template +testing::AssertionResult PredFormatFunction1(const char* e1, + const T1& v1) { + if (PredFunction1(v1)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << e1 + << " is expected to be positive, but evaluates to " + << v1 << "."; + return testing::AssertionFailure(msg); +} + +// A unary predicate-formatter functor. +struct PredFormatFunctor1 { + template + testing::AssertionResult operator()(const char* e1, + const T1& v1) const { + return PredFormatFunction1(e1, v1); + } +}; + +// Tests for {EXPECT|ASSERT}_PRED_FORMAT1. + +class Predicate1Test : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false; + n1_ = 0; + } + + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once. + EXPECT_EQ(1, n1_) << + "The predicate assertion didn't evaluate argument 2 " + "exactly once."; + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; + + static int n1_; +}; + +bool Predicate1Test::expected_to_finish_; +bool Predicate1Test::finished_; +int Predicate1Test::n1_; + +typedef Predicate1Test EXPECT_PRED_FORMAT1Test; +typedef Predicate1Test ASSERT_PRED_FORMAT1Test; +typedef Predicate1Test EXPECT_PRED1Test; +typedef Predicate1Test ASSERT_PRED1Test; + +// Tests a successful EXPECT_PRED1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED1(PredFunction1Int, + ++n1_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED1(PredFunction1Bool, + Bool(++n1_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED1(PredFunctor1(), + ++n1_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED1(PredFunctor1(), + Bool(++n1_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED1(PredFunction1Int, + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED1(PredFunction1Bool, + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED1(PredFunctor1(), + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED1(PredFunctor1(), + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED1(PredFunction1Int, + ++n1_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED1(PredFunction1Bool, + Bool(++n1_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED1(PredFunctor1(), + ++n1_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED1(PredFunctor1(), + Bool(++n1_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED1(PredFunction1Int, + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED1(PredFunction1Bool, + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED1(PredFunctor1(), + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED1(PredFunctor1(), + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a successful EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT1(PredFormatFunction1, + ++n1_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED_FORMAT1(PredFormatFunction1, + Bool(++n1_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT1(PredFormatFunctor1(), + ++n1_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED_FORMAT1(PredFormatFunctor1(), + Bool(++n1_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT1(PredFormatFunction1, + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT1(PredFormatFunction1, + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT1(PredFormatFunctor1(), + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT1(PredFormatFunctor1(), + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT1(PredFormatFunction1, + ++n1_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED_FORMAT1(PredFormatFunction1, + Bool(++n1_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT1(PredFormatFunctor1(), + ++n1_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED_FORMAT1(PredFormatFunctor1(), + Bool(++n1_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(PredFormatFunction1, + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(PredFormatFunction1, + Bool(n1_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(PredFormatFunctor1(), + n1_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT1 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(PredFormatFunctor1(), + Bool(n1_++)); + finished_ = true; + }, ""); +} +// Sample functions/functors for testing binary predicate assertions. + +// A binary predicate function. +template +bool PredFunction2(T1 v1, T2 v2) { + return v1 + v2 > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction2Int(int v1, int v2) { + return v1 + v2 > 0; +} +bool PredFunction2Bool(Bool v1, Bool v2) { + return v1 + v2 > 0; +} + +// A binary predicate functor. +struct PredFunctor2 { + template + bool operator()(const T1& v1, + const T2& v2) { + return v1 + v2 > 0; + } +}; + +// A binary predicate-formatter function. +template +testing::AssertionResult PredFormatFunction2(const char* e1, + const char* e2, + const T1& v1, + const T2& v2) { + if (PredFunction2(v1, v2)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << e1 << " + " << e2 + << " is expected to be positive, but evaluates to " + << v1 + v2 << "."; + return testing::AssertionFailure(msg); +} + +// A binary predicate-formatter functor. +struct PredFormatFunctor2 { + template + testing::AssertionResult operator()(const char* e1, + const char* e2, + const T1& v1, + const T2& v2) const { + return PredFormatFunction2(e1, e2, v1, v2); + } +}; + +// Tests for {EXPECT|ASSERT}_PRED_FORMAT2. + +class Predicate2Test : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false; + n1_ = n2_ = 0; + } + + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once. + EXPECT_EQ(1, n1_) << + "The predicate assertion didn't evaluate argument 2 " + "exactly once."; + EXPECT_EQ(1, n2_) << + "The predicate assertion didn't evaluate argument 3 " + "exactly once."; + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; + + static int n1_; + static int n2_; +}; + +bool Predicate2Test::expected_to_finish_; +bool Predicate2Test::finished_; +int Predicate2Test::n1_; +int Predicate2Test::n2_; + +typedef Predicate2Test EXPECT_PRED_FORMAT2Test; +typedef Predicate2Test ASSERT_PRED_FORMAT2Test; +typedef Predicate2Test EXPECT_PRED2Test; +typedef Predicate2Test ASSERT_PRED2Test; + +// Tests a successful EXPECT_PRED2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED2(PredFunction2Int, + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED2(PredFunction2Bool, + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED2(PredFunctor2(), + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED2(PredFunctor2(), + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED2(PredFunction2Int, + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED2(PredFunction2Bool, + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED2(PredFunctor2(), + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED2(PredFunctor2(), + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED2(PredFunction2Int, + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED2(PredFunction2Bool, + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED2(PredFunctor2(), + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED2(PredFunctor2(), + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED2(PredFunction2Int, + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED2(PredFunction2Bool, + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED2(PredFunctor2(), + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED2(PredFunctor2(), + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a successful EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT2(PredFormatFunction2, + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED_FORMAT2(PredFormatFunction2, + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT2(PredFormatFunctor2(), + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED_FORMAT2(PredFormatFunctor2(), + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(PredFormatFunction2, + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(PredFormatFunction2, + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(PredFormatFunctor2(), + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(PredFormatFunctor2(), + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT2(PredFormatFunction2, + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED_FORMAT2(PredFormatFunction2, + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT2(PredFormatFunctor2(), + ++n1_, + ++n2_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED_FORMAT2(PredFormatFunctor2(), + Bool(++n1_), + Bool(++n2_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(PredFormatFunction2, + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(PredFormatFunction2, + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(PredFormatFunctor2(), + n1_++, + n2_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT2 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(PredFormatFunctor2(), + Bool(n1_++), + Bool(n2_++)); + finished_ = true; + }, ""); +} +// Sample functions/functors for testing ternary predicate assertions. + +// A ternary predicate function. +template +bool PredFunction3(T1 v1, T2 v2, T3 v3) { + return v1 + v2 + v3 > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction3Int(int v1, int v2, int v3) { + return v1 + v2 + v3 > 0; +} +bool PredFunction3Bool(Bool v1, Bool v2, Bool v3) { + return v1 + v2 + v3 > 0; +} + +// A ternary predicate functor. +struct PredFunctor3 { + template + bool operator()(const T1& v1, + const T2& v2, + const T3& v3) { + return v1 + v2 + v3 > 0; + } +}; + +// A ternary predicate-formatter function. +template +testing::AssertionResult PredFormatFunction3(const char* e1, + const char* e2, + const char* e3, + const T1& v1, + const T2& v2, + const T3& v3) { + if (PredFunction3(v1, v2, v3)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << e1 << " + " << e2 << " + " << e3 + << " is expected to be positive, but evaluates to " + << v1 + v2 + v3 << "."; + return testing::AssertionFailure(msg); +} + +// A ternary predicate-formatter functor. +struct PredFormatFunctor3 { + template + testing::AssertionResult operator()(const char* e1, + const char* e2, + const char* e3, + const T1& v1, + const T2& v2, + const T3& v3) const { + return PredFormatFunction3(e1, e2, e3, v1, v2, v3); + } +}; + +// Tests for {EXPECT|ASSERT}_PRED_FORMAT3. + +class Predicate3Test : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false; + n1_ = n2_ = n3_ = 0; + } + + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once. + EXPECT_EQ(1, n1_) << + "The predicate assertion didn't evaluate argument 2 " + "exactly once."; + EXPECT_EQ(1, n2_) << + "The predicate assertion didn't evaluate argument 3 " + "exactly once."; + EXPECT_EQ(1, n3_) << + "The predicate assertion didn't evaluate argument 4 " + "exactly once."; + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; + + static int n1_; + static int n2_; + static int n3_; +}; + +bool Predicate3Test::expected_to_finish_; +bool Predicate3Test::finished_; +int Predicate3Test::n1_; +int Predicate3Test::n2_; +int Predicate3Test::n3_; + +typedef Predicate3Test EXPECT_PRED_FORMAT3Test; +typedef Predicate3Test ASSERT_PRED_FORMAT3Test; +typedef Predicate3Test EXPECT_PRED3Test; +typedef Predicate3Test ASSERT_PRED3Test; + +// Tests a successful EXPECT_PRED3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED3(PredFunction3Int, + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED3(PredFunction3Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED3(PredFunctor3(), + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED3(PredFunctor3(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED3(PredFunction3Int, + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED3(PredFunction3Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED3(PredFunctor3(), + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED3(PredFunctor3(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED3(PredFunction3Int, + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED3(PredFunction3Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED3(PredFunctor3(), + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED3(PredFunctor3(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED3(PredFunction3Int, + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED3(PredFunction3Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED3(PredFunctor3(), + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED3(PredFunctor3(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a successful EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT3(PredFormatFunction3, + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED_FORMAT3(PredFormatFunction3, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT3(PredFormatFunctor3(), + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED_FORMAT3(PredFormatFunctor3(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT3(PredFormatFunction3, + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT3(PredFormatFunction3, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT3(PredFormatFunctor3(), + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT3(PredFormatFunctor3(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT3(PredFormatFunction3, + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED_FORMAT3(PredFormatFunction3, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT3(PredFormatFunctor3(), + ++n1_, + ++n2_, + ++n3_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED_FORMAT3(PredFormatFunctor3(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT3(PredFormatFunction3, + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT3(PredFormatFunction3, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT3(PredFormatFunctor3(), + n1_++, + n2_++, + n3_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT3 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT3(PredFormatFunctor3(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++)); + finished_ = true; + }, ""); +} +// Sample functions/functors for testing 4-ary predicate assertions. + +// A 4-ary predicate function. +template +bool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) { + return v1 + v2 + v3 + v4 > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction4Int(int v1, int v2, int v3, int v4) { + return v1 + v2 + v3 + v4 > 0; +} +bool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) { + return v1 + v2 + v3 + v4 > 0; +} + +// A 4-ary predicate functor. +struct PredFunctor4 { + template + bool operator()(const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) { + return v1 + v2 + v3 + v4 > 0; + } +}; + +// A 4-ary predicate-formatter function. +template +testing::AssertionResult PredFormatFunction4(const char* e1, + const char* e2, + const char* e3, + const char* e4, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) { + if (PredFunction4(v1, v2, v3, v4)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 + << " is expected to be positive, but evaluates to " + << v1 + v2 + v3 + v4 << "."; + return testing::AssertionFailure(msg); +} + +// A 4-ary predicate-formatter functor. +struct PredFormatFunctor4 { + template + testing::AssertionResult operator()(const char* e1, + const char* e2, + const char* e3, + const char* e4, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) const { + return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4); + } +}; + +// Tests for {EXPECT|ASSERT}_PRED_FORMAT4. + +class Predicate4Test : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false; + n1_ = n2_ = n3_ = n4_ = 0; + } + + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once. + EXPECT_EQ(1, n1_) << + "The predicate assertion didn't evaluate argument 2 " + "exactly once."; + EXPECT_EQ(1, n2_) << + "The predicate assertion didn't evaluate argument 3 " + "exactly once."; + EXPECT_EQ(1, n3_) << + "The predicate assertion didn't evaluate argument 4 " + "exactly once."; + EXPECT_EQ(1, n4_) << + "The predicate assertion didn't evaluate argument 5 " + "exactly once."; + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; + + static int n1_; + static int n2_; + static int n3_; + static int n4_; +}; + +bool Predicate4Test::expected_to_finish_; +bool Predicate4Test::finished_; +int Predicate4Test::n1_; +int Predicate4Test::n2_; +int Predicate4Test::n3_; +int Predicate4Test::n4_; + +typedef Predicate4Test EXPECT_PRED_FORMAT4Test; +typedef Predicate4Test ASSERT_PRED_FORMAT4Test; +typedef Predicate4Test EXPECT_PRED4Test; +typedef Predicate4Test ASSERT_PRED4Test; + +// Tests a successful EXPECT_PRED4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED4(PredFunction4Int, + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED4(PredFunction4Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED4(PredFunctor4(), + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED4(PredFunctor4(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED4(PredFunction4Int, + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED4(PredFunction4Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED4(PredFunctor4(), + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED4(PredFunctor4(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED4(PredFunction4Int, + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED4(PredFunction4Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED4(PredFunctor4(), + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED4(PredFunctor4(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED4(PredFunction4Int, + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED4(PredFunction4Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED4(PredFunctor4(), + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED4(PredFunctor4(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a successful EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT4(PredFormatFunction4, + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED_FORMAT4(PredFormatFunction4, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT4(PredFormatFunctor4(), + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED_FORMAT4(PredFormatFunctor4(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(PredFormatFunction4, + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(PredFormatFunction4, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(PredFormatFunctor4(), + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(PredFormatFunctor4(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT4(PredFormatFunction4, + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED_FORMAT4(PredFormatFunction4, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT4(PredFormatFunctor4(), + ++n1_, + ++n2_, + ++n3_, + ++n4_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED_FORMAT4(PredFormatFunctor4(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT4(PredFormatFunction4, + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT4(PredFormatFunction4, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT4(PredFormatFunctor4(), + n1_++, + n2_++, + n3_++, + n4_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT4 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT4(PredFormatFunctor4(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++)); + finished_ = true; + }, ""); +} +// Sample functions/functors for testing 5-ary predicate assertions. + +// A 5-ary predicate function. +template +bool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { + return v1 + v2 + v3 + v4 + v5 > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) { + return v1 + v2 + v3 + v4 + v5 > 0; +} +bool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) { + return v1 + v2 + v3 + v4 + v5 > 0; +} + +// A 5-ary predicate functor. +struct PredFunctor5 { + template + bool operator()(const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) { + return v1 + v2 + v3 + v4 + v5 > 0; + } +}; + +// A 5-ary predicate-formatter function. +template +testing::AssertionResult PredFormatFunction5(const char* e1, + const char* e2, + const char* e3, + const char* e4, + const char* e5, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) { + if (PredFunction5(v1, v2, v3, v4, v5)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 + << " is expected to be positive, but evaluates to " + << v1 + v2 + v3 + v4 + v5 << "."; + return testing::AssertionFailure(msg); +} + +// A 5-ary predicate-formatter functor. +struct PredFormatFunctor5 { + template + testing::AssertionResult operator()(const char* e1, + const char* e2, + const char* e3, + const char* e4, + const char* e5, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) const { + return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5); + } +}; + +// Tests for {EXPECT|ASSERT}_PRED_FORMAT5. + +class Predicate5Test : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false; + n1_ = n2_ = n3_ = n4_ = n5_ = 0; + } + + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once. + EXPECT_EQ(1, n1_) << + "The predicate assertion didn't evaluate argument 2 " + "exactly once."; + EXPECT_EQ(1, n2_) << + "The predicate assertion didn't evaluate argument 3 " + "exactly once."; + EXPECT_EQ(1, n3_) << + "The predicate assertion didn't evaluate argument 4 " + "exactly once."; + EXPECT_EQ(1, n4_) << + "The predicate assertion didn't evaluate argument 5 " + "exactly once."; + EXPECT_EQ(1, n5_) << + "The predicate assertion didn't evaluate argument 6 " + "exactly once."; + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; + + static int n1_; + static int n2_; + static int n3_; + static int n4_; + static int n5_; +}; + +bool Predicate5Test::expected_to_finish_; +bool Predicate5Test::finished_; +int Predicate5Test::n1_; +int Predicate5Test::n2_; +int Predicate5Test::n3_; +int Predicate5Test::n4_; +int Predicate5Test::n5_; + +typedef Predicate5Test EXPECT_PRED_FORMAT5Test; +typedef Predicate5Test ASSERT_PRED_FORMAT5Test; +typedef Predicate5Test EXPECT_PRED5Test; +typedef Predicate5Test ASSERT_PRED5Test; + +// Tests a successful EXPECT_PRED5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED5(PredFunction5Int, + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED5(PredFunction5Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED5(PredFunctor5(), + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED5(PredFunctor5(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED5(PredFunction5Int, + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED5(PredFunction5Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED5(PredFunctor5(), + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED5(PredFunctor5(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED5(PredFunction5Int, + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED5(PredFunction5Bool, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED5(PredFunctor5(), + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED5(PredFunctor5(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED5(PredFunction5Int, + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED5(PredFunction5Bool, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED5(PredFunctor5(), + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED5(PredFunctor5(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a successful EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT5(PredFormatFunction5, + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { + EXPECT_PRED_FORMAT5(PredFormatFunction5, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { + EXPECT_PRED_FORMAT5(PredFormatFunctor5(), + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { + EXPECT_PRED_FORMAT5(PredFormatFunctor5(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a failed EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT5(PredFormatFunction5, + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT5(PredFormatFunction5, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT5(PredFormatFunctor5(), + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed EXPECT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT5(PredFormatFunctor5(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a successful ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT5(PredFormatFunction5, + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { + ASSERT_PRED_FORMAT5(PredFormatFunction5, + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { + ASSERT_PRED_FORMAT5(PredFormatFunctor5(), + ++n1_, + ++n2_, + ++n3_, + ++n4_, + ++n5_); + finished_ = true; +} + +// Tests a successful ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { + ASSERT_PRED_FORMAT5(PredFormatFunctor5(), + Bool(++n1_), + Bool(++n2_), + Bool(++n3_), + Bool(++n4_), + Bool(++n5_)); + finished_ = true; +} + +// Tests a failed ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a function on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT5(PredFormatFunction5, + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a function on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT5(PredFormatFunction5, + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a built-in type (int). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT5(PredFormatFunctor5(), + n1_++, + n2_++, + n3_++, + n4_++, + n5_++); + finished_ = true; + }, ""); +} + +// Tests a failed ASSERT_PRED_FORMAT5 where the +// predicate-formatter is a functor on a user-defined type (Bool). +TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT5(PredFormatFunctor5(), + Bool(n1_++), + Bool(n2_++), + Bool(n3_++), + Bool(n4_++), + Bool(n5_++)); + finished_ = true; + }, ""); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_prod_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_prod_test.cc new file mode 100644 index 00000000..bc3201d0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_prod_test.cc @@ -0,0 +1,57 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Unit test for include/gtest/gtest_prod.h. + +#include +#include "test/production.h" + +// Tests that private members can be accessed from a TEST declared as +// a friend of the class. +TEST(PrivateCodeTest, CanAccessPrivateMembers) { + PrivateCode a; + EXPECT_EQ(0, a.x_); + + a.set_x(1); + EXPECT_EQ(1, a.x_); +} + +typedef testing::Test PrivateCodeFixtureTest; + +// Tests that private members can be accessed from a TEST_F declared +// as a friend of the class. +TEST_F(PrivateCodeFixtureTest, CanAccessPrivateMembers) { + PrivateCode a; + EXPECT_EQ(0, a.x_); + + a.set_x(2); + EXPECT_EQ(2, a.x_); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_repeat_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_repeat_test.cc new file mode 100644 index 00000000..df6868b8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_repeat_test.cc @@ -0,0 +1,253 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Tests the --gtest_repeat=number flag. + +#include +#include +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +GTEST_DECLARE_string_(death_test_style); +GTEST_DECLARE_string_(filter); +GTEST_DECLARE_int32_(repeat); + +} // namespace testing + +using testing::GTEST_FLAG(death_test_style); +using testing::GTEST_FLAG(filter); +using testing::GTEST_FLAG(repeat); + +namespace { + +// We need this when we are testing Google Test itself and therefore +// cannot use Google Test assertions. +#define GTEST_CHECK_INT_EQ_(expected, actual) \ + do {\ + const int expected_val = (expected);\ + const int actual_val = (actual);\ + if (::testing::internal::IsTrue(expected_val != actual_val)) {\ + ::std::cout << "Value of: " #actual "\n"\ + << " Actual: " << actual_val << "\n"\ + << "Expected: " #expected "\n"\ + << "Which is: " << expected_val << "\n";\ + abort();\ + }\ + } while(::testing::internal::AlwaysFalse()) + + +// Used for verifying that global environment set-up and tear-down are +// inside the gtest_repeat loop. + +int g_environment_set_up_count = 0; +int g_environment_tear_down_count = 0; + +class MyEnvironment : public testing::Environment { + public: + MyEnvironment() {} + virtual void SetUp() { g_environment_set_up_count++; } + virtual void TearDown() { g_environment_tear_down_count++; } +}; + +// A test that should fail. + +int g_should_fail_count = 0; + +TEST(FooTest, ShouldFail) { + g_should_fail_count++; + EXPECT_EQ(0, 1) << "Expected failure."; +} + +// A test that should pass. + +int g_should_pass_count = 0; + +TEST(FooTest, ShouldPass) { + g_should_pass_count++; +} + +// A test that contains a thread-safe death test and a fast death +// test. It should pass. + +int g_death_test_count = 0; + +TEST(BarDeathTest, ThreadSafeAndFast) { + g_death_test_count++; + + GTEST_FLAG(death_test_style) = "threadsafe"; + EXPECT_DEATH_IF_SUPPORTED(abort(), ""); + + GTEST_FLAG(death_test_style) = "fast"; + EXPECT_DEATH_IF_SUPPORTED(abort(), ""); +} + +#if GTEST_HAS_PARAM_TEST +int g_param_test_count = 0; + +const int kNumberOfParamTests = 10; + +class MyParamTest : public testing::TestWithParam {}; + +TEST_P(MyParamTest, ShouldPass) { + // TODO(vladl@google.com): Make parameter value checking robust + // WRT order of tests. + GTEST_CHECK_INT_EQ_(g_param_test_count % kNumberOfParamTests, GetParam()); + g_param_test_count++; +} +INSTANTIATE_TEST_CASE_P(MyParamSequence, + MyParamTest, + testing::Range(0, kNumberOfParamTests)); +#endif // GTEST_HAS_PARAM_TEST + +// Resets the count for each test. +void ResetCounts() { + g_environment_set_up_count = 0; + g_environment_tear_down_count = 0; + g_should_fail_count = 0; + g_should_pass_count = 0; + g_death_test_count = 0; +#if GTEST_HAS_PARAM_TEST + g_param_test_count = 0; +#endif // GTEST_HAS_PARAM_TEST +} + +// Checks that the count for each test is expected. +void CheckCounts(int expected) { + GTEST_CHECK_INT_EQ_(expected, g_environment_set_up_count); + GTEST_CHECK_INT_EQ_(expected, g_environment_tear_down_count); + GTEST_CHECK_INT_EQ_(expected, g_should_fail_count); + GTEST_CHECK_INT_EQ_(expected, g_should_pass_count); + GTEST_CHECK_INT_EQ_(expected, g_death_test_count); +#if GTEST_HAS_PARAM_TEST + GTEST_CHECK_INT_EQ_(expected * kNumberOfParamTests, g_param_test_count); +#endif // GTEST_HAS_PARAM_TEST +} + +// Tests the behavior of Google Test when --gtest_repeat is not specified. +void TestRepeatUnspecified() { + ResetCounts(); + GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS()); + CheckCounts(1); +} + +// Tests the behavior of Google Test when --gtest_repeat has the given value. +void TestRepeat(int repeat) { + GTEST_FLAG(repeat) = repeat; + + ResetCounts(); + GTEST_CHECK_INT_EQ_(repeat > 0 ? 1 : 0, RUN_ALL_TESTS()); + CheckCounts(repeat); +} + +// Tests using --gtest_repeat when --gtest_filter specifies an empty +// set of tests. +void TestRepeatWithEmptyFilter(int repeat) { + GTEST_FLAG(repeat) = repeat; + GTEST_FLAG(filter) = "None"; + + ResetCounts(); + GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS()); + CheckCounts(0); +} + +// Tests using --gtest_repeat when --gtest_filter specifies a set of +// successful tests. +void TestRepeatWithFilterForSuccessfulTests(int repeat) { + GTEST_FLAG(repeat) = repeat; + GTEST_FLAG(filter) = "*-*ShouldFail"; + + ResetCounts(); + GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS()); + GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count); + GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count); + GTEST_CHECK_INT_EQ_(0, g_should_fail_count); + GTEST_CHECK_INT_EQ_(repeat, g_should_pass_count); + GTEST_CHECK_INT_EQ_(repeat, g_death_test_count); +#if GTEST_HAS_PARAM_TEST + GTEST_CHECK_INT_EQ_(repeat * kNumberOfParamTests, g_param_test_count); +#endif // GTEST_HAS_PARAM_TEST +} + +// Tests using --gtest_repeat when --gtest_filter specifies a set of +// failed tests. +void TestRepeatWithFilterForFailedTests(int repeat) { + GTEST_FLAG(repeat) = repeat; + GTEST_FLAG(filter) = "*ShouldFail"; + + ResetCounts(); + GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS()); + GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count); + GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count); + GTEST_CHECK_INT_EQ_(repeat, g_should_fail_count); + GTEST_CHECK_INT_EQ_(0, g_should_pass_count); + GTEST_CHECK_INT_EQ_(0, g_death_test_count); +#if GTEST_HAS_PARAM_TEST + GTEST_CHECK_INT_EQ_(0, g_param_test_count); +#endif // GTEST_HAS_PARAM_TEST +} + +} // namespace + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + testing::AddGlobalTestEnvironment(new MyEnvironment); + + TestRepeatUnspecified(); + TestRepeat(0); + TestRepeat(1); + TestRepeat(5); + + TestRepeatWithEmptyFilter(2); + TestRepeatWithEmptyFilter(3); + + TestRepeatWithFilterForSuccessfulTests(3); + + TestRepeatWithFilterForFailedTests(4); + + // It would be nice to verify that the tests indeed loop forever + // when GTEST_FLAG(repeat) is negative, but this test will be quite + // complicated to write. Since this flag is for interactive + // debugging only and doesn't affect the normal test result, such a + // test would be an overkill. + + printf("PASS\n"); + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test.py new file mode 100755 index 00000000..30d0303d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test.py @@ -0,0 +1,325 @@ +#!/usr/bin/env python +# +# Copyright 2009 Google Inc. All Rights Reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Verifies that test shuffling works.""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import gtest_test_utils + +# Command to run the gtest_shuffle_test_ program. +COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_shuffle_test_') + +# The environment variables for test sharding. +TOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' +SHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' + +TEST_FILTER = 'A*.A:A*.B:C*' + +ALL_TESTS = [] +ACTIVE_TESTS = [] +FILTERED_TESTS = [] +SHARDED_TESTS = [] + +SHUFFLED_ALL_TESTS = [] +SHUFFLED_ACTIVE_TESTS = [] +SHUFFLED_FILTERED_TESTS = [] +SHUFFLED_SHARDED_TESTS = [] + + +def AlsoRunDisabledTestsFlag(): + return '--gtest_also_run_disabled_tests' + + +def FilterFlag(test_filter): + return '--gtest_filter=%s' % (test_filter,) + + +def RepeatFlag(n): + return '--gtest_repeat=%s' % (n,) + + +def ShuffleFlag(): + return '--gtest_shuffle' + + +def RandomSeedFlag(n): + return '--gtest_random_seed=%s' % (n,) + + +def RunAndReturnOutput(extra_env, args): + """Runs the test program and returns its output.""" + + environ_copy = os.environ.copy() + environ_copy.update(extra_env) + + return gtest_test_utils.Subprocess([COMMAND] + args, env=environ_copy).output + + +def GetTestsForAllIterations(extra_env, args): + """Runs the test program and returns a list of test lists. + + Args: + extra_env: a map from environment variables to their values + args: command line flags to pass to gtest_shuffle_test_ + + Returns: + A list where the i-th element is the list of tests run in the i-th + test iteration. + """ + + test_iterations = [] + for line in RunAndReturnOutput(extra_env, args).split('\n'): + if line.startswith('----'): + tests = [] + test_iterations.append(tests) + elif line.strip(): + tests.append(line.strip()) # 'TestCaseName.TestName' + + return test_iterations + + +def GetTestCases(tests): + """Returns a list of test cases in the given full test names. + + Args: + tests: a list of full test names + + Returns: + A list of test cases from 'tests', in their original order. + Consecutive duplicates are removed. + """ + + test_cases = [] + for test in tests: + test_case = test.split('.')[0] + if not test_case in test_cases: + test_cases.append(test_case) + + return test_cases + + +def CalculateTestLists(): + """Calculates the list of tests run under different flags.""" + + if not ALL_TESTS: + ALL_TESTS.extend( + GetTestsForAllIterations({}, [AlsoRunDisabledTestsFlag()])[0]) + + if not ACTIVE_TESTS: + ACTIVE_TESTS.extend(GetTestsForAllIterations({}, [])[0]) + + if not FILTERED_TESTS: + FILTERED_TESTS.extend( + GetTestsForAllIterations({}, [FilterFlag(TEST_FILTER)])[0]) + + if not SHARDED_TESTS: + SHARDED_TESTS.extend( + GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', + SHARD_INDEX_ENV_VAR: '1'}, + [])[0]) + + if not SHUFFLED_ALL_TESTS: + SHUFFLED_ALL_TESTS.extend(GetTestsForAllIterations( + {}, [AlsoRunDisabledTestsFlag(), ShuffleFlag(), RandomSeedFlag(1)])[0]) + + if not SHUFFLED_ACTIVE_TESTS: + SHUFFLED_ACTIVE_TESTS.extend(GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1)])[0]) + + if not SHUFFLED_FILTERED_TESTS: + SHUFFLED_FILTERED_TESTS.extend(GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1), FilterFlag(TEST_FILTER)])[0]) + + if not SHUFFLED_SHARDED_TESTS: + SHUFFLED_SHARDED_TESTS.extend( + GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', + SHARD_INDEX_ENV_VAR: '1'}, + [ShuffleFlag(), RandomSeedFlag(1)])[0]) + + +class GTestShuffleUnitTest(gtest_test_utils.TestCase): + """Tests test shuffling.""" + + def setUp(self): + CalculateTestLists() + + def testShufflePreservesNumberOfTests(self): + self.assertEqual(len(ALL_TESTS), len(SHUFFLED_ALL_TESTS)) + self.assertEqual(len(ACTIVE_TESTS), len(SHUFFLED_ACTIVE_TESTS)) + self.assertEqual(len(FILTERED_TESTS), len(SHUFFLED_FILTERED_TESTS)) + self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS)) + + def testShuffleChangesTestOrder(self): + self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS) + self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS) + self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS, + SHUFFLED_FILTERED_TESTS) + self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS, + SHUFFLED_SHARDED_TESTS) + + def testShuffleChangesTestCaseOrder(self): + self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS), + GetTestCases(SHUFFLED_ALL_TESTS)) + self.assert_( + GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS), + GetTestCases(SHUFFLED_ACTIVE_TESTS)) + self.assert_( + GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS), + GetTestCases(SHUFFLED_FILTERED_TESTS)) + self.assert_( + GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS), + GetTestCases(SHUFFLED_SHARDED_TESTS)) + + def testShuffleDoesNotRepeatTest(self): + for test in SHUFFLED_ALL_TESTS: + self.assertEqual(1, SHUFFLED_ALL_TESTS.count(test), + '%s appears more than once' % (test,)) + for test in SHUFFLED_ACTIVE_TESTS: + self.assertEqual(1, SHUFFLED_ACTIVE_TESTS.count(test), + '%s appears more than once' % (test,)) + for test in SHUFFLED_FILTERED_TESTS: + self.assertEqual(1, SHUFFLED_FILTERED_TESTS.count(test), + '%s appears more than once' % (test,)) + for test in SHUFFLED_SHARDED_TESTS: + self.assertEqual(1, SHUFFLED_SHARDED_TESTS.count(test), + '%s appears more than once' % (test,)) + + def testShuffleDoesNotCreateNewTest(self): + for test in SHUFFLED_ALL_TESTS: + self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_ACTIVE_TESTS: + self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_FILTERED_TESTS: + self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_SHARDED_TESTS: + self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,)) + + def testShuffleIncludesAllTests(self): + for test in ALL_TESTS: + self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,)) + for test in ACTIVE_TESTS: + self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,)) + for test in FILTERED_TESTS: + self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,)) + for test in SHARDED_TESTS: + self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,)) + + def testShuffleLeavesDeathTestsAtFront(self): + non_death_test_found = False + for test in SHUFFLED_ACTIVE_TESTS: + if 'DeathTest.' in test: + self.assert_(not non_death_test_found, + '%s appears after a non-death test' % (test,)) + else: + non_death_test_found = True + + def _VerifyTestCasesDoNotInterleave(self, tests): + test_cases = [] + for test in tests: + [test_case, _] = test.split('.') + if test_cases and test_cases[-1] != test_case: + test_cases.append(test_case) + self.assertEqual(1, test_cases.count(test_case), + 'Test case %s is not grouped together in %s' % + (test_case, tests)) + + def testShuffleDoesNotInterleaveTestCases(self): + self._VerifyTestCasesDoNotInterleave(SHUFFLED_ALL_TESTS) + self._VerifyTestCasesDoNotInterleave(SHUFFLED_ACTIVE_TESTS) + self._VerifyTestCasesDoNotInterleave(SHUFFLED_FILTERED_TESTS) + self._VerifyTestCasesDoNotInterleave(SHUFFLED_SHARDED_TESTS) + + def testShuffleRestoresOrderAfterEachIteration(self): + # Get the test lists in all 3 iterations, using random seed 1, 2, + # and 3 respectively. Google Test picks a different seed in each + # iteration, and this test depends on the current implementation + # picking successive numbers. This dependency is not ideal, but + # makes the test much easier to write. + [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = ( + GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)])) + + # Make sure running the tests with random seed 1 gets the same + # order as in iteration 1 above. + [tests_with_seed1] = GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1)]) + self.assertEqual(tests_in_iteration1, tests_with_seed1) + + # Make sure running the tests with random seed 2 gets the same + # order as in iteration 2 above. Success means that Google Test + # correctly restores the test order before re-shuffling at the + # beginning of iteration 2. + [tests_with_seed2] = GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(2)]) + self.assertEqual(tests_in_iteration2, tests_with_seed2) + + # Make sure running the tests with random seed 3 gets the same + # order as in iteration 3 above. Success means that Google Test + # correctly restores the test order before re-shuffling at the + # beginning of iteration 3. + [tests_with_seed3] = GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(3)]) + self.assertEqual(tests_in_iteration3, tests_with_seed3) + + def testShuffleGeneratesNewOrderInEachIteration(self): + [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = ( + GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)])) + + self.assert_(tests_in_iteration1 != tests_in_iteration2, + tests_in_iteration1) + self.assert_(tests_in_iteration1 != tests_in_iteration3, + tests_in_iteration1) + self.assert_(tests_in_iteration2 != tests_in_iteration3, + tests_in_iteration2) + + def testShuffleShardedTestsPreservesPartition(self): + # If we run M tests on N shards, the same M tests should be run in + # total, regardless of the random seeds used by the shards. + [tests1] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', + SHARD_INDEX_ENV_VAR: '0'}, + [ShuffleFlag(), RandomSeedFlag(1)]) + [tests2] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', + SHARD_INDEX_ENV_VAR: '1'}, + [ShuffleFlag(), RandomSeedFlag(20)]) + [tests3] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', + SHARD_INDEX_ENV_VAR: '2'}, + [ShuffleFlag(), RandomSeedFlag(25)]) + sorted_sharded_tests = tests1 + tests2 + tests3 + sorted_sharded_tests.sort() + sorted_active_tests = [] + sorted_active_tests.extend(ACTIVE_TESTS) + sorted_active_tests.sort() + self.assertEqual(sorted_active_tests, sorted_sharded_tests) + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test_.cc new file mode 100644 index 00000000..53ecf777 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_shuffle_test_.cc @@ -0,0 +1,104 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Verifies that test shuffling works. + +#include + +namespace { + +using ::testing::EmptyTestEventListener; +using ::testing::InitGoogleTest; +using ::testing::Message; +using ::testing::Test; +using ::testing::TestEventListeners; +using ::testing::TestInfo; +using ::testing::UnitTest; +using ::testing::internal::String; +using ::testing::internal::scoped_ptr; + +// The test methods are empty, as the sole purpose of this program is +// to print the test names before/after shuffling. + +class A : public Test {}; +TEST_F(A, A) {} +TEST_F(A, B) {} + +TEST(ADeathTest, A) {} +TEST(ADeathTest, B) {} +TEST(ADeathTest, C) {} + +TEST(B, A) {} +TEST(B, B) {} +TEST(B, C) {} +TEST(B, DISABLED_D) {} +TEST(B, DISABLED_E) {} + +TEST(BDeathTest, A) {} +TEST(BDeathTest, B) {} + +TEST(C, A) {} +TEST(C, B) {} +TEST(C, C) {} +TEST(C, DISABLED_D) {} + +TEST(CDeathTest, A) {} + +TEST(DISABLED_D, A) {} +TEST(DISABLED_D, DISABLED_B) {} + +// This printer prints the full test names only, starting each test +// iteration with a "----" marker. +class TestNamePrinter : public EmptyTestEventListener { + public: + virtual void OnTestIterationStart(const UnitTest& /* unit_test */, + int /* iteration */) { + printf("----\n"); + } + + virtual void OnTestStart(const TestInfo& test_info) { + printf("%s.%s\n", test_info.test_case_name(), test_info.name()); + } +}; + +} // namespace + +int main(int argc, char **argv) { + InitGoogleTest(&argc, argv); + + // Replaces the default printer with TestNamePrinter, which prints + // the test name only. + TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); + delete listeners.Release(listeners.default_result_printer()); + listeners.Append(new TestNamePrinter); + + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_sole_header_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_sole_header_test.cc new file mode 100644 index 00000000..de91e800 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_sole_header_test.cc @@ -0,0 +1,57 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// This test verifies that it's possible to use Google Test by including +// the gtest.h header file alone. + +#include + +namespace { + +void Subroutine() { + EXPECT_EQ(42, 42); +} + +TEST(NoFatalFailureTest, ExpectNoFatalFailure) { + EXPECT_NO_FATAL_FAILURE(;); + EXPECT_NO_FATAL_FAILURE(SUCCEED()); + EXPECT_NO_FATAL_FAILURE(Subroutine()); + EXPECT_NO_FATAL_FAILURE({ SUCCEED(); }); +} + +TEST(NoFatalFailureTest, AssertNoFatalFailure) { + ASSERT_NO_FATAL_FAILURE(;); + ASSERT_NO_FATAL_FAILURE(SUCCEED()); + ASSERT_NO_FATAL_FAILURE(Subroutine()); + ASSERT_NO_FATAL_FAILURE({ SUCCEED(); }); +} + +} // namespace diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_stress_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_stress_test.cc new file mode 100644 index 00000000..f5af78cc --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_stress_test.cc @@ -0,0 +1,257 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Tests that SCOPED_TRACE() and various Google Test assertions can be +// used in a large number of threads concurrently. + +#include + +#include +#include + +// We must define this macro in order to #include +// gtest-internal-inl.h. This is how Google Test prevents a user from +// accidentally depending on its internal implementation. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_IS_THREADSAFE + +namespace testing { +namespace { + +using internal::Notification; +using internal::String; +using internal::TestPropertyKeyIs; +using internal::ThreadWithParam; +using internal::scoped_ptr; + +// In order to run tests in this file, for platforms where Google Test is +// thread safe, implement ThreadWithParam. See the description of its API +// in gtest-port.h, where it is defined for already supported platforms. + +// How many threads to create? +const int kThreadCount = 50; + +String IdToKey(int id, const char* suffix) { + Message key; + key << "key_" << id << "_" << suffix; + return key.GetString(); +} + +String IdToString(int id) { + Message id_message; + id_message << id; + return id_message.GetString(); +} + +void ExpectKeyAndValueWereRecordedForId( + const std::vector& properties, + int id, const char* suffix) { + TestPropertyKeyIs matches_key(IdToKey(id, suffix).c_str()); + const std::vector::const_iterator property = + std::find_if(properties.begin(), properties.end(), matches_key); + ASSERT_TRUE(property != properties.end()) + << "expecting " << suffix << " value for id " << id; + EXPECT_STREQ(IdToString(id).c_str(), property->value()); +} + +// Calls a large number of Google Test assertions, where exactly one of them +// will fail. +void ManyAsserts(int id) { + GTEST_LOG_(INFO) << "Thread #" << id << " running..."; + + SCOPED_TRACE(Message() << "Thread #" << id); + + for (int i = 0; i < kThreadCount; i++) { + SCOPED_TRACE(Message() << "Iteration #" << i); + + // A bunch of assertions that should succeed. + EXPECT_TRUE(true); + ASSERT_FALSE(false) << "This shouldn't fail."; + EXPECT_STREQ("a", "a"); + ASSERT_LE(5, 6); + EXPECT_EQ(i, i) << "This shouldn't fail."; + + // RecordProperty() should interact safely with other threads as well. + // The shared_key forces property updates. + Test::RecordProperty(IdToKey(id, "string").c_str(), IdToString(id).c_str()); + Test::RecordProperty(IdToKey(id, "int").c_str(), id); + Test::RecordProperty("shared_key", IdToString(id).c_str()); + + // This assertion should fail kThreadCount times per thread. It + // is for testing whether Google Test can handle failed assertions in a + // multi-threaded context. + EXPECT_LT(i, 0) << "This should always fail."; + } +} + +void CheckTestFailureCount(int expected_failures) { + const TestInfo* const info = UnitTest::GetInstance()->current_test_info(); + const TestResult* const result = info->result(); + GTEST_CHECK_(expected_failures == result->total_part_count()) + << "Logged " << result->total_part_count() << " failures " + << " vs. " << expected_failures << " expected"; +} + +// Tests using SCOPED_TRACE() and Google Test assertions in many threads +// concurrently. +TEST(StressTest, CanUseScopedTraceAndAssertionsInManyThreads) { + { + scoped_ptr > threads[kThreadCount]; + Notification threads_can_start; + for (int i = 0; i != kThreadCount; i++) + threads[i].reset(new ThreadWithParam(&ManyAsserts, + i, + &threads_can_start)); + + threads_can_start.Notify(); + + // Blocks until all the threads are done. + for (int i = 0; i != kThreadCount; i++) + threads[i]->Join(); + } + + // Ensures that kThreadCount*kThreadCount failures have been reported. + const TestInfo* const info = UnitTest::GetInstance()->current_test_info(); + const TestResult* const result = info->result(); + + std::vector properties; + // We have no access to the TestResult's list of properties but we can + // copy them one by one. + for (int i = 0; i < result->test_property_count(); ++i) + properties.push_back(result->GetTestProperty(i)); + + EXPECT_EQ(kThreadCount * 2 + 1, result->test_property_count()) + << "String and int values recorded on each thread, " + << "as well as one shared_key"; + for (int i = 0; i < kThreadCount; ++i) { + ExpectKeyAndValueWereRecordedForId(properties, i, "string"); + ExpectKeyAndValueWereRecordedForId(properties, i, "int"); + } + CheckTestFailureCount(kThreadCount*kThreadCount); +} + +void FailingThread(bool is_fatal) { + if (is_fatal) + FAIL() << "Fatal failure in some other thread. " + << "(This failure is expected.)"; + else + ADD_FAILURE() << "Non-fatal failure in some other thread. " + << "(This failure is expected.)"; +} + +void GenerateFatalFailureInAnotherThread(bool is_fatal) { + ThreadWithParam thread(&FailingThread, is_fatal, NULL); + thread.Join(); +} + +TEST(NoFatalFailureTest, ExpectNoFatalFailureIgnoresFailuresInOtherThreads) { + EXPECT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true)); + // We should only have one failure (the one from + // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE + // should succeed. + CheckTestFailureCount(1); +} + +void AssertNoFatalFailureIgnoresFailuresInOtherThreads() { + ASSERT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true)); +} +TEST(NoFatalFailureTest, AssertNoFatalFailureIgnoresFailuresInOtherThreads) { + // Using a subroutine, to make sure, that the test continues. + AssertNoFatalFailureIgnoresFailuresInOtherThreads(); + // We should only have one failure (the one from + // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE + // should succeed. + CheckTestFailureCount(1); +} + +TEST(FatalFailureTest, ExpectFatalFailureIgnoresFailuresInOtherThreads) { + // This statement should fail, since the current thread doesn't generate a + // fatal failure, only another one does. + EXPECT_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true), "expected"); + CheckTestFailureCount(2); +} + +TEST(FatalFailureOnAllThreadsTest, ExpectFatalFailureOnAllThreads) { + // This statement should succeed, because failures in all threads are + // considered. + EXPECT_FATAL_FAILURE_ON_ALL_THREADS( + GenerateFatalFailureInAnotherThread(true), "expected"); + CheckTestFailureCount(0); + // We need to add a failure, because main() checks that there are failures. + // But when only this test is run, we shouldn't have any failures. + ADD_FAILURE() << "This is an expected non-fatal failure."; +} + +TEST(NonFatalFailureTest, ExpectNonFatalFailureIgnoresFailuresInOtherThreads) { + // This statement should fail, since the current thread doesn't generate a + // fatal failure, only another one does. + EXPECT_NONFATAL_FAILURE(GenerateFatalFailureInAnotherThread(false), + "expected"); + CheckTestFailureCount(2); +} + +TEST(NonFatalFailureOnAllThreadsTest, ExpectNonFatalFailureOnAllThreads) { + // This statement should succeed, because failures in all threads are + // considered. + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( + GenerateFatalFailureInAnotherThread(false), "expected"); + CheckTestFailureCount(0); + // We need to add a failure, because main() checks that there are failures, + // But when only this test is run, we shouldn't have any failures. + ADD_FAILURE() << "This is an expected non-fatal failure."; +} + +} // namespace +} // namespace testing + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + + const int result = RUN_ALL_TESTS(); // Expected to fail. + GTEST_CHECK_(result == 1) << "RUN_ALL_TESTS() did not fail as expected"; + + printf("\nPASS\n"); + return 0; +} + +#else +TEST(StressTest, + DISABLED_ThreadSafetyTestsAreSkippedWhenGoogleTestIsNotThreadSafe) { +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +#endif // GTEST_IS_THREADSAFE diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_test_utils.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_test_utils.py new file mode 100755 index 00000000..e0f5973e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_test_utils.py @@ -0,0 +1,309 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test utilities for Google C++ Testing Framework.""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import atexit +import os +import shutil +import sys +import tempfile +import unittest +_test_module = unittest + +# Suppresses the 'Import not at the top of the file' lint complaint. +# pylint: disable-msg=C6204 +try: + import subprocess + _SUBPROCESS_MODULE_AVAILABLE = True +except: + import popen2 + _SUBPROCESS_MODULE_AVAILABLE = False +# pylint: enable-msg=C6204 + +GTEST_OUTPUT_VAR_NAME = 'GTEST_OUTPUT' + +IS_WINDOWS = os.name == 'nt' +IS_CYGWIN = os.name == 'posix' and 'CYGWIN' in os.uname()[0] + +# Here we expose a class from a particular module, depending on the +# environment. The comment suppresses the 'Invalid variable name' lint +# complaint. +TestCase = _test_module.TestCase # pylint: disable-msg=C6409 + +# Initially maps a flag to its default value. After +# _ParseAndStripGTestFlags() is called, maps a flag to its actual value. +_flag_map = {'gtest_source_dir': os.path.dirname(sys.argv[0]), + 'gtest_build_dir': os.path.dirname(sys.argv[0])} +_gtest_flags_are_parsed = False + + +def _ParseAndStripGTestFlags(argv): + """Parses and strips Google Test flags from argv. This is idempotent.""" + + # Suppresses the lint complaint about a global variable since we need it + # here to maintain module-wide state. + global _gtest_flags_are_parsed # pylint: disable-msg=W0603 + if _gtest_flags_are_parsed: + return + + _gtest_flags_are_parsed = True + for flag in _flag_map: + # The environment variable overrides the default value. + if flag.upper() in os.environ: + _flag_map[flag] = os.environ[flag.upper()] + + # The command line flag overrides the environment variable. + i = 1 # Skips the program name. + while i < len(argv): + prefix = '--' + flag + '=' + if argv[i].startswith(prefix): + _flag_map[flag] = argv[i][len(prefix):] + del argv[i] + break + else: + # We don't increment i in case we just found a --gtest_* flag + # and removed it from argv. + i += 1 + + +def GetFlag(flag): + """Returns the value of the given flag.""" + + # In case GetFlag() is called before Main(), we always call + # _ParseAndStripGTestFlags() here to make sure the --gtest_* flags + # are parsed. + _ParseAndStripGTestFlags(sys.argv) + + return _flag_map[flag] + + +def GetSourceDir(): + """Returns the absolute path of the directory where the .py files are.""" + + return os.path.abspath(GetFlag('gtest_source_dir')) + + +def GetBuildDir(): + """Returns the absolute path of the directory where the test binaries are.""" + + return os.path.abspath(GetFlag('gtest_build_dir')) + + +_temp_dir = None + +def _RemoveTempDir(): + if _temp_dir: + shutil.rmtree(_temp_dir, ignore_errors=True) + +atexit.register(_RemoveTempDir) + + +def GetTempDir(): + """Returns a directory for temporary files.""" + + global _temp_dir + if not _temp_dir: + _temp_dir = tempfile.mkdtemp() + return _temp_dir + + +def GetTestExecutablePath(executable_name, build_dir=None): + """Returns the absolute path of the test binary given its name. + + The function will print a message and abort the program if the resulting file + doesn't exist. + + Args: + executable_name: name of the test binary that the test script runs. + build_dir: directory where to look for executables, by default + the result of GetBuildDir(). + + Returns: + The absolute path of the test binary. + """ + + path = os.path.abspath(os.path.join(build_dir or GetBuildDir(), + executable_name)) + if (IS_WINDOWS or IS_CYGWIN) and not path.endswith('.exe'): + path += '.exe' + + if not os.path.exists(path): + message = ( + 'Unable to find the test binary. Please make sure to provide path\n' + 'to the binary via the --gtest_build_dir flag or the GTEST_BUILD_DIR\n' + 'environment variable. For convenient use, invoke this script via\n' + 'mk_test.py.\n' + # TODO(vladl@google.com): change mk_test.py to test.py after renaming + # the file. + 'Please run mk_test.py -h for help.') + print >> sys.stderr, message + sys.exit(1) + + return path + + +def GetExitStatus(exit_code): + """Returns the argument to exit(), or -1 if exit() wasn't called. + + Args: + exit_code: the result value of os.system(command). + """ + + if os.name == 'nt': + # On Windows, os.WEXITSTATUS() doesn't work and os.system() returns + # the argument to exit() directly. + return exit_code + else: + # On Unix, os.WEXITSTATUS() must be used to extract the exit status + # from the result of os.system(). + if os.WIFEXITED(exit_code): + return os.WEXITSTATUS(exit_code) + else: + return -1 + + +class Subprocess: + def __init__(self, command, working_dir=None, capture_stderr=True, env=None): + """Changes into a specified directory, if provided, and executes a command. + + Restores the old directory afterwards. + + Args: + command: The command to run, in the form of sys.argv. + working_dir: The directory to change into. + capture_stderr: Determines whether to capture stderr in the output member + or to discard it. + env: Dictionary with environment to pass to the subprocess. + + Returns: + An object that represents outcome of the executed process. It has the + following attributes: + terminated_by_signal True iff the child process has been terminated + by a signal. + signal Sygnal that terminated the child process. + exited True iff the child process exited normally. + exit_code The code with which the child process exited. + output Child process's stdout and stderr output + combined in a string. + """ + + # The subprocess module is the preferrable way of running programs + # since it is available and behaves consistently on all platforms, + # including Windows. But it is only available starting in python 2.4. + # In earlier python versions, we revert to the popen2 module, which is + # available in python 2.0 and later but doesn't provide required + # functionality (Popen4) under Windows. This allows us to support Mac + # OS X 10.4 Tiger, which has python 2.3 installed. + if _SUBPROCESS_MODULE_AVAILABLE: + if capture_stderr: + stderr = subprocess.STDOUT + else: + stderr = subprocess.PIPE + + p = subprocess.Popen(command, + stdout=subprocess.PIPE, stderr=stderr, + cwd=working_dir, universal_newlines=True, env=env) + # communicate returns a tuple with the file obect for the child's + # output. + self.output = p.communicate()[0] + self._return_code = p.returncode + else: + old_dir = os.getcwd() + + def _ReplaceEnvDict(dest, src): + # Changes made by os.environ.clear are not inheritable by child + # processes until Python 2.6. To produce inheritable changes we have + # to delete environment items with the del statement. + for key in dest: + del dest[key] + dest.update(src) + + # When 'env' is not None, backup the environment variables and replace + # them with the passed 'env'. When 'env' is None, we simply use the + # current 'os.environ' for compatibility with the subprocess.Popen + # semantics used above. + if env is not None: + old_environ = os.environ.copy() + _ReplaceEnvDict(os.environ, env) + + try: + if working_dir is not None: + os.chdir(working_dir) + if capture_stderr: + p = popen2.Popen4(command) + else: + p = popen2.Popen3(command) + p.tochild.close() + self.output = p.fromchild.read() + ret_code = p.wait() + finally: + os.chdir(old_dir) + + # Restore the old environment variables + # if they were replaced. + if env is not None: + _ReplaceEnvDict(os.environ, old_environ) + + # Converts ret_code to match the semantics of + # subprocess.Popen.returncode. + if os.WIFSIGNALED(ret_code): + self._return_code = -os.WTERMSIG(ret_code) + else: # os.WIFEXITED(ret_code) should return True here. + self._return_code = os.WEXITSTATUS(ret_code) + + if self._return_code < 0: + self.terminated_by_signal = True + self.exited = False + self.signal = -self._return_code + else: + self.terminated_by_signal = False + self.exited = True + self.exit_code = self._return_code + + +def Main(): + """Runs the unit test.""" + + # We must call _ParseAndStripGTestFlags() before calling + # unittest.main(). Otherwise the latter will be confused by the + # --gtest_* flags. + _ParseAndStripGTestFlags(sys.argv) + # The tested binaries should not be writing XML output files unless the + # script explicitly instructs them to. + # TODO(vladl@google.com): Move this into Subprocess when we implement + # passing environment into it as a parameter. + if GTEST_OUTPUT_VAR_NAME in os.environ: + del os.environ[GTEST_OUTPUT_VAR_NAME] + + _test_module.main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_ex_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_ex_test.cc new file mode 100644 index 00000000..8bf9dc90 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_ex_test.cc @@ -0,0 +1,92 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Tests Google Test's throw-on-failure mode with exceptions enabled. + +#include + +#include +#include +#include +#include + +// Prints the given failure message and exits the program with +// non-zero. We use this instead of a Google Test assertion to +// indicate a failure, as the latter is been tested and cannot be +// relied on. +void Fail(const char* msg) { + printf("FAILURE: %s\n", msg); + fflush(stdout); + exit(1); +} + +// Tests that an assertion failure throws a subclass of +// std::runtime_error. +void TestFailureThrowsRuntimeError() { + testing::GTEST_FLAG(throw_on_failure) = true; + + // A successful assertion shouldn't throw. + try { + EXPECT_EQ(3, 3); + } catch(...) { + Fail("A successful assertion wrongfully threw."); + } + + // A failed assertion should throw a subclass of std::runtime_error. + try { + EXPECT_EQ(2, 3) << "Expected failure"; + } catch(const std::runtime_error& e) { + if (strstr(e.what(), "Expected failure") != NULL) + return; + + printf("%s", + "A failed assertion did throw an exception of the right type, " + "but the message is incorrect. Instead of containing \"Expected " + "failure\", it is:\n"); + Fail(e.what()); + } catch(...) { + Fail("A failed assertion threw the wrong type of exception."); + } + Fail("A failed assertion should've thrown but didn't."); +} + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + + // We want to ensure that people can use Google Test assertions in + // other testing frameworks, as long as they initialize Google Test + // properly and set the thrown-on-failure mode. Therefore, we don't + // use Google Test's constructs for defining and running tests + // (e.g. TEST and RUN_ALL_TESTS) here. + + TestFailureThrowsRuntimeError(); + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test.py new file mode 100755 index 00000000..5678ffea --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python +# +# Copyright 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests Google Test's throw-on-failure mode with exceptions disabled. + +This script invokes gtest_throw_on_failure_test_ (a program written with +Google Test) with different environments and command line flags. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import gtest_test_utils + + +# Constants. + +# The command line flag for enabling/disabling the throw-on-failure mode. +THROW_ON_FAILURE = 'gtest_throw_on_failure' + +# Path to the gtest_throw_on_failure_test_ program, compiled with +# exceptions disabled. +EXE_PATH = gtest_test_utils.GetTestExecutablePath( + 'gtest_throw_on_failure_test_') + + +# Utilities. + + +def SetEnvVar(env_var, value): + """Sets an environment variable to a given value; unsets it when the + given value is None. + """ + + env_var = env_var.upper() + if value is not None: + os.environ[env_var] = value + elif env_var in os.environ: + del os.environ[env_var] + + +def Run(command): + """Runs a command; returns True/False if its exit code is/isn't 0.""" + + print 'Running "%s". . .' % ' '.join(command) + p = gtest_test_utils.Subprocess(command) + return p.exited and p.exit_code == 0 + + +# The tests. TODO(wan@google.com): refactor the class to share common +# logic with code in gtest_break_on_failure_unittest.py. +class ThrowOnFailureTest(gtest_test_utils.TestCase): + """Tests the throw-on-failure mode.""" + + def RunAndVerify(self, env_var_value, flag_value, should_fail): + """Runs gtest_throw_on_failure_test_ and verifies that it does + (or does not) exit with a non-zero code. + + Args: + env_var_value: value of the GTEST_BREAK_ON_FAILURE environment + variable; None if the variable should be unset. + flag_value: value of the --gtest_break_on_failure flag; + None if the flag should not be present. + should_fail: True iff the program is expected to fail. + """ + + SetEnvVar(THROW_ON_FAILURE, env_var_value) + + if env_var_value is None: + env_var_value_msg = ' is not set' + else: + env_var_value_msg = '=' + env_var_value + + if flag_value is None: + flag = '' + elif flag_value == '0': + flag = '--%s=0' % THROW_ON_FAILURE + else: + flag = '--%s' % THROW_ON_FAILURE + + command = [EXE_PATH] + if flag: + command.append(flag) + + if should_fail: + should_or_not = 'should' + else: + should_or_not = 'should not' + + failed = not Run(command) + + SetEnvVar(THROW_ON_FAILURE, None) + + msg = ('when %s%s, an assertion failure in "%s" %s cause a non-zero ' + 'exit code.' % + (THROW_ON_FAILURE, env_var_value_msg, ' '.join(command), + should_or_not)) + self.assert_(failed == should_fail, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" + + self.RunAndVerify(env_var_value=None, flag_value=None, should_fail=False) + + def testThrowOnFailureEnvVar(self): + """Tests using the GTEST_THROW_ON_FAILURE environment variable.""" + + self.RunAndVerify(env_var_value='0', + flag_value=None, + should_fail=False) + self.RunAndVerify(env_var_value='1', + flag_value=None, + should_fail=True) + + def testThrowOnFailureFlag(self): + """Tests using the --gtest_throw_on_failure flag.""" + + self.RunAndVerify(env_var_value=None, + flag_value='0', + should_fail=False) + self.RunAndVerify(env_var_value=None, + flag_value='1', + should_fail=True) + + def testThrowOnFailureFlagOverridesEnvVar(self): + """Tests that --gtest_throw_on_failure overrides GTEST_THROW_ON_FAILURE.""" + + self.RunAndVerify(env_var_value='0', + flag_value='0', + should_fail=False) + self.RunAndVerify(env_var_value='0', + flag_value='1', + should_fail=True) + self.RunAndVerify(env_var_value='1', + flag_value='0', + should_fail=False) + self.RunAndVerify(env_var_value='1', + flag_value='1', + should_fail=True) + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test_.cc new file mode 100644 index 00000000..88fbd5a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_throw_on_failure_test_.cc @@ -0,0 +1,56 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Tests Google Test's throw-on-failure mode with exceptions disabled. +// +// This program must be compiled with exceptions disabled. It will be +// invoked by gtest_throw_on_failure_test.py, and is expected to exit +// with non-zero in the throw-on-failure mode or 0 otherwise. + +#include + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + + // We want to ensure that people can use Google Test assertions in + // other testing frameworks, as long as they initialize Google Test + // properly and set the thrown-on-failure mode. Therefore, we don't + // use Google Test's constructs for defining and running tests + // (e.g. TEST and RUN_ALL_TESTS) here. + + // In the throw-on-failure mode with exceptions disabled, this + // assertion will cause the program to exit with a non-zero code. + EXPECT_EQ(2, 3); + + // When not in the throw-on-failure mode, the control will reach + // here. + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test.py new file mode 100755 index 00000000..6ae57eee --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Verifies that Google Test warns the user when not initialized properly.""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import gtest_test_utils + + +COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_uninitialized_test_') + + +def Assert(condition): + if not condition: + raise AssertionError + + +def AssertEq(expected, actual): + if expected != actual: + print 'Expected: %s' % (expected,) + print ' Actual: %s' % (actual,) + raise AssertionError + + +def TestExitCodeAndOutput(command): + """Runs the given command and verifies its exit code and output.""" + + # Verifies that 'command' exits with code 1. + p = gtest_test_utils.Subprocess(command) + Assert(p.exited) + AssertEq(1, p.exit_code) + Assert('InitGoogleTest' in p.output) + + +class GTestUninitializedTest(gtest_test_utils.TestCase): + def testExitCodeAndOutput(self): + TestExitCodeAndOutput(COMMAND) + + +if __name__ == '__main__': + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test_.cc new file mode 100644 index 00000000..e8b2aa81 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_uninitialized_test_.cc @@ -0,0 +1,43 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + +TEST(DummyTest, Dummy) { + // This test doesn't verify anything. We just need it to create a + // realistic stage for testing the behavior of Google Test when + // RUN_ALL_TESTS() is called without testing::InitGoogleTest() being + // called first. +} + +int main() { + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_unittest.cc new file mode 100644 index 00000000..a14f065a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_unittest.cc @@ -0,0 +1,6718 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Tests for Google Test itself. This verifies that the basic constructs of +// Google Test work. + +#include +#include + +// Verifies that the command line flag variables can be accessed +// in code once has been #included. +// Do not move it after other #includes. +TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) { + bool dummy = testing::GTEST_FLAG(also_run_disabled_tests) + || testing::GTEST_FLAG(break_on_failure) + || testing::GTEST_FLAG(catch_exceptions) + || testing::GTEST_FLAG(color) != "unknown" + || testing::GTEST_FLAG(filter) != "unknown" + || testing::GTEST_FLAG(list_tests) + || testing::GTEST_FLAG(output) != "unknown" + || testing::GTEST_FLAG(print_time) + || testing::GTEST_FLAG(random_seed) + || testing::GTEST_FLAG(repeat) > 0 + || testing::GTEST_FLAG(show_internal_stack_frames) + || testing::GTEST_FLAG(shuffle) + || testing::GTEST_FLAG(stack_trace_depth) > 0 + || testing::GTEST_FLAG(throw_on_failure); + EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused. +} + +#include + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + +#include // For INT_MAX. +#include +#include + +#include + +namespace testing { +namespace internal { + +// Provides access to otherwise private parts of the TestEventListeners class +// that are needed to test it. +class TestEventListenersAccessor { + public: + static TestEventListener* GetRepeater(TestEventListeners* listeners) { + return listeners->repeater(); + } + + static void SetDefaultResultPrinter(TestEventListeners* listeners, + TestEventListener* listener) { + listeners->SetDefaultResultPrinter(listener); + } + static void SetDefaultXmlGenerator(TestEventListeners* listeners, + TestEventListener* listener) { + listeners->SetDefaultXmlGenerator(listener); + } + + static bool EventForwardingEnabled(const TestEventListeners& listeners) { + return listeners.EventForwardingEnabled(); + } + + static void SuppressEventForwarding(TestEventListeners* listeners) { + listeners->SuppressEventForwarding(); + } +}; + +} // namespace internal +} // namespace testing + +using testing::AssertionFailure; +using testing::AssertionResult; +using testing::AssertionSuccess; +using testing::DoubleLE; +using testing::EmptyTestEventListener; +using testing::FloatLE; +using testing::GTEST_FLAG(also_run_disabled_tests); +using testing::GTEST_FLAG(break_on_failure); +using testing::GTEST_FLAG(catch_exceptions); +using testing::GTEST_FLAG(color); +using testing::GTEST_FLAG(death_test_use_fork); +using testing::GTEST_FLAG(filter); +using testing::GTEST_FLAG(list_tests); +using testing::GTEST_FLAG(output); +using testing::GTEST_FLAG(print_time); +using testing::GTEST_FLAG(random_seed); +using testing::GTEST_FLAG(repeat); +using testing::GTEST_FLAG(show_internal_stack_frames); +using testing::GTEST_FLAG(shuffle); +using testing::GTEST_FLAG(stack_trace_depth); +using testing::GTEST_FLAG(throw_on_failure); +using testing::IsNotSubstring; +using testing::IsSubstring; +using testing::Message; +using testing::ScopedFakeTestPartResultReporter; +using testing::StaticAssertTypeEq; +using testing::Test; +using testing::TestEventListeners; +using testing::TestCase; +using testing::TestPartResult; +using testing::TestPartResultArray; +using testing::TestProperty; +using testing::TestResult; +using testing::UnitTest; +using testing::kMaxStackTraceDepth; +using testing::internal::AlwaysFalse; +using testing::internal::AlwaysTrue; +using testing::internal::AppendUserMessage; +using testing::internal::CodePointToUtf8; +using testing::internal::CountIf; +using testing::internal::EqFailure; +using testing::internal::FloatingPoint; +using testing::internal::FormatTimeInMillisAsSeconds; +using testing::internal::ForEach; +using testing::internal::GTestFlagSaver; +using testing::internal::GetCurrentOsStackTraceExceptTop; +using testing::internal::GetElementOr; +using testing::internal::GetNextRandomSeed; +using testing::internal::GetRandomSeedFromFlag; +using testing::internal::GetTestTypeId; +using testing::internal::GetTypeId; +using testing::internal::GetUnitTestImpl; +using testing::internal::Int32; +using testing::internal::Int32FromEnvOrDie; +using testing::internal::ParseInt32Flag; +using testing::internal::ShouldRunTestOnShard; +using testing::internal::ShouldShard; +using testing::internal::ShouldUseColor; +using testing::internal::Shuffle; +using testing::internal::ShuffleRange; +using testing::internal::StreamableToString; +using testing::internal::String; +using testing::internal::TestEventListenersAccessor; +using testing::internal::TestResultAccessor; +using testing::internal::UInt32; +using testing::internal::WideStringToUtf8; +using testing::internal::kMaxRandomSeed; +using testing::internal::kTestTypeIdInGoogleTest; +using testing::internal::scoped_ptr; + +#if GTEST_HAS_STREAM_REDIRECTION_ +using testing::internal::CaptureStdout; +using testing::internal::GetCapturedStdout; +#endif // GTEST_HAS_STREAM_REDIRECTION_ + +#if GTEST_IS_THREADSAFE +using testing::internal::ThreadWithParam; +#endif + +class TestingVector : public std::vector { +}; + +::std::ostream& operator<<(::std::ostream& os, + const TestingVector& vector) { + os << "{ "; + for (size_t i = 0; i < vector.size(); i++) { + os << vector[i] << " "; + } + os << "}"; + return os; +} + +// This line tests that we can define tests in an unnamed namespace. +namespace { + +TEST(GetRandomSeedFromFlagTest, HandlesZero) { + const int seed = GetRandomSeedFromFlag(0); + EXPECT_LE(1, seed); + EXPECT_LE(seed, static_cast(kMaxRandomSeed)); +} + +TEST(GetRandomSeedFromFlagTest, PreservesValidSeed) { + EXPECT_EQ(1, GetRandomSeedFromFlag(1)); + EXPECT_EQ(2, GetRandomSeedFromFlag(2)); + EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1)); + EXPECT_EQ(static_cast(kMaxRandomSeed), + GetRandomSeedFromFlag(kMaxRandomSeed)); +} + +TEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) { + const int seed1 = GetRandomSeedFromFlag(-1); + EXPECT_LE(1, seed1); + EXPECT_LE(seed1, static_cast(kMaxRandomSeed)); + + const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1); + EXPECT_LE(1, seed2); + EXPECT_LE(seed2, static_cast(kMaxRandomSeed)); +} + +TEST(GetNextRandomSeedTest, WorksForValidInput) { + EXPECT_EQ(2, GetNextRandomSeed(1)); + EXPECT_EQ(3, GetNextRandomSeed(2)); + EXPECT_EQ(static_cast(kMaxRandomSeed), + GetNextRandomSeed(kMaxRandomSeed - 1)); + EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed)); + + // We deliberately don't test GetNextRandomSeed() with invalid + // inputs, as that requires death tests, which are expensive. This + // is fine as GetNextRandomSeed() is internal and has a + // straightforward definition. +} + +static void ClearCurrentTestPartResults() { + TestResultAccessor::ClearTestPartResults( + GetUnitTestImpl()->current_test_result()); +} + +// Tests GetTypeId. + +TEST(GetTypeIdTest, ReturnsSameValueForSameType) { + EXPECT_EQ(GetTypeId(), GetTypeId()); + EXPECT_EQ(GetTypeId(), GetTypeId()); +} + +class SubClassOfTest : public Test {}; +class AnotherSubClassOfTest : public Test {}; + +TEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) { + EXPECT_NE(GetTypeId(), GetTypeId()); + EXPECT_NE(GetTypeId(), GetTypeId()); + EXPECT_NE(GetTypeId(), GetTestTypeId()); + EXPECT_NE(GetTypeId(), GetTestTypeId()); + EXPECT_NE(GetTypeId(), GetTestTypeId()); + EXPECT_NE(GetTypeId(), GetTypeId()); +} + +// Verifies that GetTestTypeId() returns the same value, no matter it +// is called from inside Google Test or outside of it. +TEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) { + EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId()); +} + +// Tests FormatTimeInMillisAsSeconds(). + +TEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { + EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); +} + +TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { + EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3)); + EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); + EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); + EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); + EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); +} + +TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { + EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3)); + EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); + EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); + EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); + EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); +} + +#if GTEST_CAN_COMPARE_NULL + +#ifdef __BORLANDC__ +// Silences warnings: "Condition is always true", "Unreachable code" +#pragma option push -w-ccc -w-rch +#endif + +// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null +// pointer literal. +TEST(NullLiteralTest, IsTrueForNullLiterals) { + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U)); + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L)); + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(false)); +#ifndef __BORLANDC__ + // Some compilers may fail to detect some null pointer literals; + // as long as users of the framework don't use such literals, this + // is harmless. + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(1 - 1)); + EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(true && false)); +#endif +} + +// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null +// pointer literal. +TEST(NullLiteralTest, IsFalseForNonNullLiterals) { + EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1)); + EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0)); + EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a')); + EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast(NULL))); +} + +#ifdef __BORLANDC__ +// Restores warnings after previous "#pragma option push" suppressed them. +#pragma option pop +#endif + +#endif // GTEST_CAN_COMPARE_NULL +// +// Tests CodePointToUtf8(). + +// Tests that the NUL character L'\0' is encoded correctly. +TEST(CodePointToUtf8Test, CanEncodeNul) { + char buffer[32]; + EXPECT_STREQ("", CodePointToUtf8(L'\0', buffer)); +} + +// Tests that ASCII characters are encoded correctly. +TEST(CodePointToUtf8Test, CanEncodeAscii) { + char buffer[32]; + EXPECT_STREQ("a", CodePointToUtf8(L'a', buffer)); + EXPECT_STREQ("Z", CodePointToUtf8(L'Z', buffer)); + EXPECT_STREQ("&", CodePointToUtf8(L'&', buffer)); + EXPECT_STREQ("\x7F", CodePointToUtf8(L'\x7F', buffer)); +} + +// Tests that Unicode code-points that have 8 to 11 bits are encoded +// as 110xxxxx 10xxxxxx. +TEST(CodePointToUtf8Test, CanEncode8To11Bits) { + char buffer[32]; + // 000 1101 0011 => 110-00011 10-010011 + EXPECT_STREQ("\xC3\x93", CodePointToUtf8(L'\xD3', buffer)); + + // 101 0111 0110 => 110-10101 10-110110 + EXPECT_STREQ("\xD5\xB6", CodePointToUtf8(L'\x576', buffer)); +} + +// Tests that Unicode code-points that have 12 to 16 bits are encoded +// as 1110xxxx 10xxxxxx 10xxxxxx. +TEST(CodePointToUtf8Test, CanEncode12To16Bits) { + char buffer[32]; + // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 + EXPECT_STREQ("\xE0\xA3\x93", CodePointToUtf8(L'\x8D3', buffer)); + + // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 + EXPECT_STREQ("\xEC\x9D\x8D", CodePointToUtf8(L'\xC74D', buffer)); +} + +#if !GTEST_WIDE_STRING_USES_UTF16_ +// Tests in this group require a wchar_t to hold > 16 bits, and thus +// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is +// 16-bit wide. This code may not compile on those systems. + +// Tests that Unicode code-points that have 17 to 21 bits are encoded +// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. +TEST(CodePointToUtf8Test, CanEncode17To21Bits) { + char buffer[32]; + // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 + EXPECT_STREQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3', buffer)); + + // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000 + EXPECT_STREQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400', buffer)); + + // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 + EXPECT_STREQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634', buffer)); +} + +// Tests that encoding an invalid code-point generates the expected result. +TEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) { + char buffer[32]; + EXPECT_STREQ("(Invalid Unicode 0x1234ABCD)", + CodePointToUtf8(L'\x1234ABCD', buffer)); +} + +#endif // !GTEST_WIDE_STRING_USES_UTF16_ + +// Tests WideStringToUtf8(). + +// Tests that the NUL character L'\0' is encoded correctly. +TEST(WideStringToUtf8Test, CanEncodeNul) { + EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str()); + EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str()); +} + +// Tests that ASCII strings are encoded correctly. +TEST(WideStringToUtf8Test, CanEncodeAscii) { + EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str()); + EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str()); + EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str()); + EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str()); +} + +// Tests that Unicode code-points that have 8 to 11 bits are encoded +// as 110xxxxx 10xxxxxx. +TEST(WideStringToUtf8Test, CanEncode8To11Bits) { + // 000 1101 0011 => 110-00011 10-010011 + EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str()); + EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str()); + + // 101 0111 0110 => 110-10101 10-110110 + EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(L"\x576", 1).c_str()); + EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(L"\x576", -1).c_str()); +} + +// Tests that Unicode code-points that have 12 to 16 bits are encoded +// as 1110xxxx 10xxxxxx 10xxxxxx. +TEST(WideStringToUtf8Test, CanEncode12To16Bits) { + // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 + EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(L"\x8D3", 1).c_str()); + EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(L"\x8D3", -1).c_str()); + + // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 + EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(L"\xC74D", 1).c_str()); + EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(L"\xC74D", -1).c_str()); +} + +// Tests that the conversion stops when the function encounters \0 character. +TEST(WideStringToUtf8Test, StopsOnNulCharacter) { + EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str()); +} + +// Tests that the conversion stops when the function reaches the limit +// specified by the 'length' parameter. +TEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) { + EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str()); +} + + +#if !GTEST_WIDE_STRING_USES_UTF16_ +// Tests that Unicode code-points that have 17 to 21 bits are encoded +// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile +// on the systems using UTF-16 encoding. +TEST(WideStringToUtf8Test, CanEncode17To21Bits) { + // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 + EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str()); + EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str()); + + // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 + EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str()); + EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str()); +} + +// Tests that encoding an invalid code-point generates the expected result. +TEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) { + EXPECT_STREQ("(Invalid Unicode 0xABCDFF)", + WideStringToUtf8(L"\xABCDFF", -1).c_str()); +} +#else // !GTEST_WIDE_STRING_USES_UTF16_ +// Tests that surrogate pairs are encoded correctly on the systems using +// UTF-16 encoding in the wide strings. +TEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) { + EXPECT_STREQ("\xF0\x90\x90\x80", + WideStringToUtf8(L"\xD801\xDC00", -1).c_str()); +} + +// Tests that encoding an invalid UTF-16 surrogate pair +// generates the expected result. +TEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) { + // Leading surrogate is at the end of the string. + EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(L"\xD800", -1).c_str()); + // Leading surrogate is not followed by the trailing surrogate. + EXPECT_STREQ("\xED\xA0\x80$", WideStringToUtf8(L"\xD800$", -1).c_str()); + // Trailing surrogate appearas without a leading surrogate. + EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(L"\xDC00PQR", -1).c_str()); +} +#endif // !GTEST_WIDE_STRING_USES_UTF16_ + +// Tests that codepoint concatenation works correctly. +#if !GTEST_WIDE_STRING_USES_UTF16_ +TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { + EXPECT_STREQ( + "\xF4\x88\x98\xB4" + "\xEC\x9D\x8D" + "\n" + "\xD5\xB6" + "\xE0\xA3\x93" + "\xF4\x88\x98\xB4", + WideStringToUtf8(L"\x108634\xC74D\n\x576\x8D3\x108634", -1).c_str()); +} +#else +TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { + EXPECT_STREQ( + "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93", + WideStringToUtf8(L"\xC74D\n\x576\x8D3", -1).c_str()); +} +#endif // !GTEST_WIDE_STRING_USES_UTF16_ + +// Tests the Random class. + +TEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) { + testing::internal::Random random(42); + EXPECT_DEATH_IF_SUPPORTED( + random.Generate(0), + "Cannot generate a number in the range \\[0, 0\\)"); + EXPECT_DEATH_IF_SUPPORTED( + random.Generate(testing::internal::Random::kMaxRange + 1), + "Generation of a number in \\[0, 2147483649\\) was requested, " + "but this can only generate numbers in \\[0, 2147483648\\)"); +} + +TEST(RandomTest, GeneratesNumbersWithinRange) { + const UInt32 kRange = 10000; + testing::internal::Random random(12345); + for (int i = 0; i < 10; i++) { + EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i; + } + + testing::internal::Random random2(testing::internal::Random::kMaxRange); + for (int i = 0; i < 10; i++) { + EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i; + } +} + +TEST(RandomTest, RepeatsWhenReseeded) { + const int kSeed = 123; + const int kArraySize = 10; + const UInt32 kRange = 10000; + UInt32 values[kArraySize]; + + testing::internal::Random random(kSeed); + for (int i = 0; i < kArraySize; i++) { + values[i] = random.Generate(kRange); + } + + random.Reseed(kSeed); + for (int i = 0; i < kArraySize; i++) { + EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i; + } +} + +// Tests STL container utilities. + +// Tests CountIf(). + +static bool IsPositive(int n) { return n > 0; } + +TEST(ContainerUtilityTest, CountIf) { + std::vector v; + EXPECT_EQ(0, CountIf(v, IsPositive)); // Works for an empty container. + + v.push_back(-1); + v.push_back(0); + EXPECT_EQ(0, CountIf(v, IsPositive)); // Works when no value satisfies. + + v.push_back(2); + v.push_back(-10); + v.push_back(10); + EXPECT_EQ(2, CountIf(v, IsPositive)); +} + +// Tests ForEach(). + +static int g_sum = 0; +static void Accumulate(int n) { g_sum += n; } + +TEST(ContainerUtilityTest, ForEach) { + std::vector v; + g_sum = 0; + ForEach(v, Accumulate); + EXPECT_EQ(0, g_sum); // Works for an empty container; + + g_sum = 0; + v.push_back(1); + ForEach(v, Accumulate); + EXPECT_EQ(1, g_sum); // Works for a container with one element. + + g_sum = 0; + v.push_back(20); + v.push_back(300); + ForEach(v, Accumulate); + EXPECT_EQ(321, g_sum); +} + +// Tests GetElementOr(). +TEST(ContainerUtilityTest, GetElementOr) { + std::vector a; + EXPECT_EQ('x', GetElementOr(a, 0, 'x')); + + a.push_back('a'); + a.push_back('b'); + EXPECT_EQ('a', GetElementOr(a, 0, 'x')); + EXPECT_EQ('b', GetElementOr(a, 1, 'x')); + EXPECT_EQ('x', GetElementOr(a, -2, 'x')); + EXPECT_EQ('x', GetElementOr(a, 2, 'x')); +} + +TEST(ContainerUtilityDeathTest, ShuffleRange) { + std::vector a; + a.push_back(0); + a.push_back(1); + a.push_back(2); + testing::internal::Random random(1); + + EXPECT_DEATH_IF_SUPPORTED( + ShuffleRange(&random, -1, 1, &a), + "Invalid shuffle range start -1: must be in range \\[0, 3\\]"); + EXPECT_DEATH_IF_SUPPORTED( + ShuffleRange(&random, 4, 4, &a), + "Invalid shuffle range start 4: must be in range \\[0, 3\\]"); + EXPECT_DEATH_IF_SUPPORTED( + ShuffleRange(&random, 3, 2, &a), + "Invalid shuffle range finish 2: must be in range \\[3, 3\\]"); + EXPECT_DEATH_IF_SUPPORTED( + ShuffleRange(&random, 3, 4, &a), + "Invalid shuffle range finish 4: must be in range \\[3, 3\\]"); +} + +class VectorShuffleTest : public Test { + protected: + static const int kVectorSize = 20; + + VectorShuffleTest() : random_(1) { + for (int i = 0; i < kVectorSize; i++) { + vector_.push_back(i); + } + } + + static bool VectorIsCorrupt(const TestingVector& vector) { + if (kVectorSize != static_cast(vector.size())) { + return true; + } + + bool found_in_vector[kVectorSize] = { false }; + for (size_t i = 0; i < vector.size(); i++) { + const int e = vector[i]; + if (e < 0 || e >= kVectorSize || found_in_vector[e]) { + return true; + } + found_in_vector[e] = true; + } + + // Vector size is correct, elements' range is correct, no + // duplicate elements. Therefore no corruption has occurred. + return false; + } + + static bool VectorIsNotCorrupt(const TestingVector& vector) { + return !VectorIsCorrupt(vector); + } + + static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) { + for (int i = begin; i < end; i++) { + if (i != vector[i]) { + return true; + } + } + return false; + } + + static bool RangeIsUnshuffled( + const TestingVector& vector, int begin, int end) { + return !RangeIsShuffled(vector, begin, end); + } + + static bool VectorIsShuffled(const TestingVector& vector) { + return RangeIsShuffled(vector, 0, static_cast(vector.size())); + } + + static bool VectorIsUnshuffled(const TestingVector& vector) { + return !VectorIsShuffled(vector); + } + + testing::internal::Random random_; + TestingVector vector_; +}; // class VectorShuffleTest + +const int VectorShuffleTest::kVectorSize; + +TEST_F(VectorShuffleTest, HandlesEmptyRange) { + // Tests an empty range at the beginning... + ShuffleRange(&random_, 0, 0, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); + + // ...in the middle... + ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); + + // ...at the end... + ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); + + // ...and past the end. + ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); +} + +TEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) { + // Tests a size one range at the beginning... + ShuffleRange(&random_, 0, 1, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); + + // ...in the middle... + ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); + + // ...and at the end. + ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsUnshuffled, vector_); +} + +// Because we use our own random number generator and a fixed seed, +// we can guarantee that the following "random" tests will succeed. + +TEST_F(VectorShuffleTest, ShufflesEntireVector) { + Shuffle(&random_, &vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_; + + // Tests the first and last elements in particular to ensure that + // there are no off-by-one problems in our shuffle algorithm. + EXPECT_NE(0, vector_[0]); + EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]); +} + +TEST_F(VectorShuffleTest, ShufflesStartOfVector) { + const int kRangeSize = kVectorSize/2; + + ShuffleRange(&random_, 0, kRangeSize, &vector_); + + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize); + EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize); +} + +TEST_F(VectorShuffleTest, ShufflesEndOfVector) { + const int kRangeSize = kVectorSize / 2; + ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_); + + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); + EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize); +} + +TEST_F(VectorShuffleTest, ShufflesMiddleOfVector) { + int kRangeSize = kVectorSize/3; + ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_); + + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); + EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize); + EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize); +} + +TEST_F(VectorShuffleTest, ShufflesRepeatably) { + TestingVector vector2; + for (int i = 0; i < kVectorSize; i++) { + vector2.push_back(i); + } + + random_.Reseed(1234); + Shuffle(&random_, &vector_); + random_.Reseed(1234); + Shuffle(&random_, &vector2); + + ASSERT_PRED1(VectorIsNotCorrupt, vector_); + ASSERT_PRED1(VectorIsNotCorrupt, vector2); + + for (int i = 0; i < kVectorSize; i++) { + EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i; + } +} + +// Tests the size of the AssertHelper class. + +TEST(AssertHelperTest, AssertHelperIsSmall) { + // To avoid breaking clients that use lots of assertions in one + // function, we cannot grow the size of AssertHelper. + EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*)); +} + +// Tests the String class. + +// Tests String's constructors. +TEST(StringTest, Constructors) { + // Default ctor. + String s1; + // We aren't using EXPECT_EQ(NULL, s1.c_str()) because comparing + // pointers with NULL isn't supported on all platforms. + EXPECT_EQ(0U, s1.length()); + EXPECT_TRUE(NULL == s1.c_str()); + + // Implicitly constructs from a C-string. + String s2 = "Hi"; + EXPECT_EQ(2U, s2.length()); + EXPECT_STREQ("Hi", s2.c_str()); + + // Constructs from a C-string and a length. + String s3("hello", 3); + EXPECT_EQ(3U, s3.length()); + EXPECT_STREQ("hel", s3.c_str()); + + // The empty String should be created when String is constructed with + // a NULL pointer and length 0. + EXPECT_EQ(0U, String(NULL, 0).length()); + EXPECT_FALSE(String(NULL, 0).c_str() == NULL); + + // Constructs a String that contains '\0'. + String s4("a\0bcd", 4); + EXPECT_EQ(4U, s4.length()); + EXPECT_EQ('a', s4.c_str()[0]); + EXPECT_EQ('\0', s4.c_str()[1]); + EXPECT_EQ('b', s4.c_str()[2]); + EXPECT_EQ('c', s4.c_str()[3]); + + // Copy ctor where the source is NULL. + const String null_str; + String s5 = null_str; + EXPECT_TRUE(s5.c_str() == NULL); + + // Copy ctor where the source isn't NULL. + String s6 = s3; + EXPECT_EQ(3U, s6.length()); + EXPECT_STREQ("hel", s6.c_str()); + + // Copy ctor where the source contains '\0'. + String s7 = s4; + EXPECT_EQ(4U, s7.length()); + EXPECT_EQ('a', s7.c_str()[0]); + EXPECT_EQ('\0', s7.c_str()[1]); + EXPECT_EQ('b', s7.c_str()[2]); + EXPECT_EQ('c', s7.c_str()[3]); +} + +TEST(StringTest, ConvertsFromStdString) { + // An empty std::string. + const std::string src1(""); + const String dest1 = src1; + EXPECT_EQ(0U, dest1.length()); + EXPECT_STREQ("", dest1.c_str()); + + // A normal std::string. + const std::string src2("Hi"); + const String dest2 = src2; + EXPECT_EQ(2U, dest2.length()); + EXPECT_STREQ("Hi", dest2.c_str()); + + // An std::string with an embedded NUL character. + const char src3[] = "a\0b"; + const String dest3 = std::string(src3, sizeof(src3)); + EXPECT_EQ(sizeof(src3), dest3.length()); + EXPECT_EQ('a', dest3.c_str()[0]); + EXPECT_EQ('\0', dest3.c_str()[1]); + EXPECT_EQ('b', dest3.c_str()[2]); +} + +TEST(StringTest, ConvertsToStdString) { + // An empty String. + const String src1(""); + const std::string dest1 = src1; + EXPECT_EQ("", dest1); + + // A normal String. + const String src2("Hi"); + const std::string dest2 = src2; + EXPECT_EQ("Hi", dest2); + + // A String containing a '\0'. + const String src3("x\0y", 3); + const std::string dest3 = src3; + EXPECT_EQ(std::string("x\0y", 3), dest3); +} + +#if GTEST_HAS_GLOBAL_STRING + +TEST(StringTest, ConvertsFromGlobalString) { + // An empty ::string. + const ::string src1(""); + const String dest1 = src1; + EXPECT_EQ(0U, dest1.length()); + EXPECT_STREQ("", dest1.c_str()); + + // A normal ::string. + const ::string src2("Hi"); + const String dest2 = src2; + EXPECT_EQ(2U, dest2.length()); + EXPECT_STREQ("Hi", dest2.c_str()); + + // An ::string with an embedded NUL character. + const char src3[] = "x\0y"; + const String dest3 = ::string(src3, sizeof(src3)); + EXPECT_EQ(sizeof(src3), dest3.length()); + EXPECT_EQ('x', dest3.c_str()[0]); + EXPECT_EQ('\0', dest3.c_str()[1]); + EXPECT_EQ('y', dest3.c_str()[2]); +} + +TEST(StringTest, ConvertsToGlobalString) { + // An empty String. + const String src1(""); + const ::string dest1 = src1; + EXPECT_EQ("", dest1); + + // A normal String. + const String src2("Hi"); + const ::string dest2 = src2; + EXPECT_EQ("Hi", dest2); + + const String src3("x\0y", 3); + const ::string dest3 = src3; + EXPECT_EQ(::string("x\0y", 3), dest3); +} + +#endif // GTEST_HAS_GLOBAL_STRING + +// Tests String::ShowCStringQuoted(). +TEST(StringTest, ShowCStringQuoted) { + EXPECT_STREQ("(null)", + String::ShowCStringQuoted(NULL).c_str()); + EXPECT_STREQ("\"\"", + String::ShowCStringQuoted("").c_str()); + EXPECT_STREQ("\"foo\"", + String::ShowCStringQuoted("foo").c_str()); +} + +// Tests String::empty(). +TEST(StringTest, Empty) { + EXPECT_TRUE(String("").empty()); + EXPECT_FALSE(String().empty()); + EXPECT_FALSE(String(NULL).empty()); + EXPECT_FALSE(String("a").empty()); + EXPECT_FALSE(String("\0", 1).empty()); +} + +// Tests String::Compare(). +TEST(StringTest, Compare) { + // NULL vs NULL. + EXPECT_EQ(0, String().Compare(String())); + + // NULL vs non-NULL. + EXPECT_EQ(-1, String().Compare(String(""))); + + // Non-NULL vs NULL. + EXPECT_EQ(1, String("").Compare(String())); + + // The following covers non-NULL vs non-NULL. + + // "" vs "". + EXPECT_EQ(0, String("").Compare(String(""))); + + // "" vs non-"". + EXPECT_EQ(-1, String("").Compare(String("\0", 1))); + EXPECT_EQ(-1, String("").Compare(" ")); + + // Non-"" vs "". + EXPECT_EQ(1, String("a").Compare(String(""))); + + // The following covers non-"" vs non-"". + + // Same length and equal. + EXPECT_EQ(0, String("a").Compare(String("a"))); + + // Same length and different. + EXPECT_EQ(-1, String("a\0b", 3).Compare(String("a\0c", 3))); + EXPECT_EQ(1, String("b").Compare(String("a"))); + + // Different lengths. + EXPECT_EQ(-1, String("a").Compare(String("ab"))); + EXPECT_EQ(-1, String("a").Compare(String("a\0", 2))); + EXPECT_EQ(1, String("abc").Compare(String("aacd"))); +} + +// Tests String::operator==(). +TEST(StringTest, Equals) { + const String null(NULL); + EXPECT_TRUE(null == NULL); // NOLINT + EXPECT_FALSE(null == ""); // NOLINT + EXPECT_FALSE(null == "bar"); // NOLINT + + const String empty(""); + EXPECT_FALSE(empty == NULL); // NOLINT + EXPECT_TRUE(empty == ""); // NOLINT + EXPECT_FALSE(empty == "bar"); // NOLINT + + const String foo("foo"); + EXPECT_FALSE(foo == NULL); // NOLINT + EXPECT_FALSE(foo == ""); // NOLINT + EXPECT_FALSE(foo == "bar"); // NOLINT + EXPECT_TRUE(foo == "foo"); // NOLINT + + const String bar("x\0y", 3); + EXPECT_FALSE(bar == "x"); +} + +// Tests String::operator!=(). +TEST(StringTest, NotEquals) { + const String null(NULL); + EXPECT_FALSE(null != NULL); // NOLINT + EXPECT_TRUE(null != ""); // NOLINT + EXPECT_TRUE(null != "bar"); // NOLINT + + const String empty(""); + EXPECT_TRUE(empty != NULL); // NOLINT + EXPECT_FALSE(empty != ""); // NOLINT + EXPECT_TRUE(empty != "bar"); // NOLINT + + const String foo("foo"); + EXPECT_TRUE(foo != NULL); // NOLINT + EXPECT_TRUE(foo != ""); // NOLINT + EXPECT_TRUE(foo != "bar"); // NOLINT + EXPECT_FALSE(foo != "foo"); // NOLINT + + const String bar("x\0y", 3); + EXPECT_TRUE(bar != "x"); +} + +// Tests String::length(). +TEST(StringTest, Length) { + EXPECT_EQ(0U, String().length()); + EXPECT_EQ(0U, String("").length()); + EXPECT_EQ(2U, String("ab").length()); + EXPECT_EQ(3U, String("a\0b", 3).length()); +} + +// Tests String::EndsWith(). +TEST(StringTest, EndsWith) { + EXPECT_TRUE(String("foobar").EndsWith("bar")); + EXPECT_TRUE(String("foobar").EndsWith("")); + EXPECT_TRUE(String("").EndsWith("")); + + EXPECT_FALSE(String("foobar").EndsWith("foo")); + EXPECT_FALSE(String("").EndsWith("foo")); +} + +// Tests String::EndsWithCaseInsensitive(). +TEST(StringTest, EndsWithCaseInsensitive) { + EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive("BAR")); + EXPECT_TRUE(String("foobaR").EndsWithCaseInsensitive("bar")); + EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive("")); + EXPECT_TRUE(String("").EndsWithCaseInsensitive("")); + + EXPECT_FALSE(String("Foobar").EndsWithCaseInsensitive("foo")); + EXPECT_FALSE(String("foobar").EndsWithCaseInsensitive("Foo")); + EXPECT_FALSE(String("").EndsWithCaseInsensitive("foo")); +} + +// C++Builder's preprocessor is buggy; it fails to expand macros that +// appear in macro parameters after wide char literals. Provide an alias +// for NULL as a workaround. +static const wchar_t* const kNull = NULL; + +// Tests String::CaseInsensitiveWideCStringEquals +TEST(StringTest, CaseInsensitiveWideCStringEquals) { + EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL)); + EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"")); + EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull)); + EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar")); + EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull)); + EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar")); + EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR")); + EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar")); +} + +// Tests that NULL can be assigned to a String. +TEST(StringTest, CanBeAssignedNULL) { + const String src(NULL); + String dest; + + dest = src; + EXPECT_STREQ(NULL, dest.c_str()); +} + +// Tests that the empty string "" can be assigned to a String. +TEST(StringTest, CanBeAssignedEmpty) { + const String src(""); + String dest; + + dest = src; + EXPECT_STREQ("", dest.c_str()); +} + +// Tests that a non-empty string can be assigned to a String. +TEST(StringTest, CanBeAssignedNonEmpty) { + const String src("hello"); + String dest; + dest = src; + EXPECT_EQ(5U, dest.length()); + EXPECT_STREQ("hello", dest.c_str()); + + const String src2("x\0y", 3); + String dest2; + dest2 = src2; + EXPECT_EQ(3U, dest2.length()); + EXPECT_EQ('x', dest2.c_str()[0]); + EXPECT_EQ('\0', dest2.c_str()[1]); + EXPECT_EQ('y', dest2.c_str()[2]); +} + +// Tests that a String can be assigned to itself. +TEST(StringTest, CanBeAssignedSelf) { + String dest("hello"); + + dest = dest; + EXPECT_STREQ("hello", dest.c_str()); +} + +// Sun Studio < 12 incorrectly rejects this code due to an overloading +// ambiguity. +#if !(defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) +// Tests streaming a String. +TEST(StringTest, Streams) { + EXPECT_EQ(StreamableToString(String()), "(null)"); + EXPECT_EQ(StreamableToString(String("")), ""); + EXPECT_EQ(StreamableToString(String("a\0b", 3)), "a\\0b"); +} +#endif + +// Tests that String::Format() works. +TEST(StringTest, FormatWorks) { + // Normal case: the format spec is valid, the arguments match the + // spec, and the result is < 4095 characters. + EXPECT_STREQ("Hello, 42", String::Format("%s, %d", "Hello", 42).c_str()); + + // Edge case: the result is 4095 characters. + char buffer[4096]; + const size_t kSize = sizeof(buffer); + memset(buffer, 'a', kSize - 1); + buffer[kSize - 1] = '\0'; + EXPECT_STREQ(buffer, String::Format("%s", buffer).c_str()); + + // The result needs to be 4096 characters, exceeding Format()'s limit. + EXPECT_STREQ("", + String::Format("x%s", buffer).c_str()); + +#if GTEST_OS_LINUX + // On Linux, invalid format spec should lead to an error message. + // In other environment (e.g. MSVC on Windows), String::Format() may + // simply ignore a bad format spec, so this assertion is run on + // Linux only. + EXPECT_STREQ("", + String::Format("%").c_str()); +#endif +} + +#if GTEST_OS_WINDOWS + +// Tests String::ShowWideCString(). +TEST(StringTest, ShowWideCString) { + EXPECT_STREQ("(null)", + String::ShowWideCString(NULL).c_str()); + EXPECT_STREQ("", String::ShowWideCString(L"").c_str()); + EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str()); +} + +// Tests String::ShowWideCStringQuoted(). +TEST(StringTest, ShowWideCStringQuoted) { + EXPECT_STREQ("(null)", + String::ShowWideCStringQuoted(NULL).c_str()); + EXPECT_STREQ("L\"\"", + String::ShowWideCStringQuoted(L"").c_str()); + EXPECT_STREQ("L\"foo\"", + String::ShowWideCStringQuoted(L"foo").c_str()); +} + +#if GTEST_OS_WINDOWS_MOBILE +TEST(StringTest, AnsiAndUtf16Null) { + EXPECT_EQ(NULL, String::AnsiToUtf16(NULL)); + EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL)); +} + +TEST(StringTest, AnsiAndUtf16ConvertBasic) { + const char* ansi = String::Utf16ToAnsi(L"str"); + EXPECT_STREQ("str", ansi); + delete [] ansi; + const WCHAR* utf16 = String::AnsiToUtf16("str"); + EXPECT_EQ(0, wcsncmp(L"str", utf16, 3)); + delete [] utf16; +} + +TEST(StringTest, AnsiAndUtf16ConvertPathChars) { + const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?"); + EXPECT_STREQ(".:\\ \"*?", ansi); + delete [] ansi; + const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?"); + EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3)); + delete [] utf16; +} +#endif // GTEST_OS_WINDOWS_MOBILE + +#endif // GTEST_OS_WINDOWS + +// Tests TestProperty construction. +TEST(TestPropertyTest, StringValue) { + TestProperty property("key", "1"); + EXPECT_STREQ("key", property.key()); + EXPECT_STREQ("1", property.value()); +} + +// Tests TestProperty replacing a value. +TEST(TestPropertyTest, ReplaceStringValue) { + TestProperty property("key", "1"); + EXPECT_STREQ("1", property.value()); + property.SetValue("2"); + EXPECT_STREQ("2", property.value()); +} + +// AddFatalFailure() and AddNonfatalFailure() must be stand-alone +// functions (i.e. their definitions cannot be inlined at the call +// sites), or C++Builder won't compile the code. +static void AddFatalFailure() { + FAIL() << "Expected fatal failure."; +} + +static void AddNonfatalFailure() { + ADD_FAILURE() << "Expected non-fatal failure."; +} + +class ScopedFakeTestPartResultReporterTest : public Test { + public: // Must be public and not protected due to a bug in g++ 3.4.2. + enum FailureMode { + FATAL_FAILURE, + NONFATAL_FAILURE + }; + static void AddFailure(FailureMode failure) { + if (failure == FATAL_FAILURE) { + AddFatalFailure(); + } else { + AddNonfatalFailure(); + } + } +}; + +// Tests that ScopedFakeTestPartResultReporter intercepts test +// failures. +TEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) { + TestPartResultArray results; + { + ScopedFakeTestPartResultReporter reporter( + ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, + &results); + AddFailure(NONFATAL_FAILURE); + AddFailure(FATAL_FAILURE); + } + + EXPECT_EQ(2, results.size()); + EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); + EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); +} + +TEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) { + TestPartResultArray results; + { + // Tests, that the deprecated constructor still works. + ScopedFakeTestPartResultReporter reporter(&results); + AddFailure(NONFATAL_FAILURE); + } + EXPECT_EQ(1, results.size()); +} + +#if GTEST_IS_THREADSAFE + +class ScopedFakeTestPartResultReporterWithThreadsTest + : public ScopedFakeTestPartResultReporterTest { + protected: + static void AddFailureInOtherThread(FailureMode failure) { + ThreadWithParam thread(&AddFailure, failure, NULL); + thread.Join(); + } +}; + +TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest, + InterceptsTestFailuresInAllThreads) { + TestPartResultArray results; + { + ScopedFakeTestPartResultReporter reporter( + ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results); + AddFailure(NONFATAL_FAILURE); + AddFailure(FATAL_FAILURE); + AddFailureInOtherThread(NONFATAL_FAILURE); + AddFailureInOtherThread(FATAL_FAILURE); + } + + EXPECT_EQ(4, results.size()); + EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); + EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); + EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed()); + EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed()); +} + +#endif // GTEST_IS_THREADSAFE + +// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}. Makes sure that they +// work even if the failure is generated in a called function rather than +// the current context. + +typedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest; + +TEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) { + EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure."); +} + +TEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) { + // We have another test below to verify that the macro catches fatal + // failures generated on another thread. + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(), + "Expected fatal failure."); +} + +#ifdef __BORLANDC__ +// Silences warnings: "Condition is always true" +#pragma option push -w-ccc +#endif + +// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void +// function even when the statement in it contains ASSERT_*. + +int NonVoidFunction() { + EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); + return 0; +} + +TEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) { + NonVoidFunction(); +} + +// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the +// current function even though 'statement' generates a fatal failure. + +void DoesNotAbortHelper(bool* aborted) { + EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); + + *aborted = false; +} + +#ifdef __BORLANDC__ +// Restores warnings after previous "#pragma option push" suppressed them. +#pragma option pop +#endif + +TEST_F(ExpectFatalFailureTest, DoesNotAbort) { + bool aborted = true; + DoesNotAbortHelper(&aborted); + EXPECT_FALSE(aborted); +} + +// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a +// statement that contains a macro which expands to code containing an +// unprotected comma. + +static int global_var = 0; +#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++ + +TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { +#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600 + // ICE's in C++Builder 2007. + EXPECT_FATAL_FAILURE({ + GTEST_USE_UNPROTECTED_COMMA_; + AddFatalFailure(); + }, ""); +#endif + + EXPECT_FATAL_FAILURE_ON_ALL_THREADS({ + GTEST_USE_UNPROTECTED_COMMA_; + AddFatalFailure(); + }, ""); +} + +// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}. + +typedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest; + +TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) { + EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), + "Expected non-fatal failure."); +} + +TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) { + // We have another test below to verify that the macro catches + // non-fatal failures generated on another thread. + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(), + "Expected non-fatal failure."); +} + +// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a +// statement that contains a macro which expands to code containing an +// unprotected comma. +TEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { + EXPECT_NONFATAL_FAILURE({ + GTEST_USE_UNPROTECTED_COMMA_; + AddNonfatalFailure(); + }, ""); + + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({ + GTEST_USE_UNPROTECTED_COMMA_; + AddNonfatalFailure(); + }, ""); +} + +#if GTEST_IS_THREADSAFE + +typedef ScopedFakeTestPartResultReporterWithThreadsTest + ExpectFailureWithThreadsTest; + +TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) { + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE), + "Expected fatal failure."); +} + +TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) { + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( + AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); +} + +#endif // GTEST_IS_THREADSAFE + +// Tests the TestProperty class. + +TEST(TestPropertyTest, ConstructorWorks) { + const TestProperty property("key", "value"); + EXPECT_STREQ("key", property.key()); + EXPECT_STREQ("value", property.value()); +} + +TEST(TestPropertyTest, SetValue) { + TestProperty property("key", "value_1"); + EXPECT_STREQ("key", property.key()); + property.SetValue("value_2"); + EXPECT_STREQ("key", property.key()); + EXPECT_STREQ("value_2", property.value()); +} + +// Tests the TestResult class + +// The test fixture for testing TestResult. +class TestResultTest : public Test { + protected: + typedef std::vector TPRVector; + + // We make use of 2 TestPartResult objects, + TestPartResult * pr1, * pr2; + + // ... and 3 TestResult objects. + TestResult * r0, * r1, * r2; + + virtual void SetUp() { + // pr1 is for success. + pr1 = new TestPartResult(TestPartResult::kSuccess, + "foo/bar.cc", + 10, + "Success!"); + + // pr2 is for fatal failure. + pr2 = new TestPartResult(TestPartResult::kFatalFailure, + "foo/bar.cc", + -1, // This line number means "unknown" + "Failure!"); + + // Creates the TestResult objects. + r0 = new TestResult(); + r1 = new TestResult(); + r2 = new TestResult(); + + // In order to test TestResult, we need to modify its internal + // state, in particular the TestPartResult vector it holds. + // test_part_results() returns a const reference to this vector. + // We cast it to a non-const object s.t. it can be modified (yes, + // this is a hack). + TPRVector* results1 = const_cast( + &TestResultAccessor::test_part_results(*r1)); + TPRVector* results2 = const_cast( + &TestResultAccessor::test_part_results(*r2)); + + // r0 is an empty TestResult. + + // r1 contains a single SUCCESS TestPartResult. + results1->push_back(*pr1); + + // r2 contains a SUCCESS, and a FAILURE. + results2->push_back(*pr1); + results2->push_back(*pr2); + } + + virtual void TearDown() { + delete pr1; + delete pr2; + + delete r0; + delete r1; + delete r2; + } + + // Helper that compares two two TestPartResults. + static void CompareTestPartResult(const TestPartResult& expected, + const TestPartResult& actual) { + EXPECT_EQ(expected.type(), actual.type()); + EXPECT_STREQ(expected.file_name(), actual.file_name()); + EXPECT_EQ(expected.line_number(), actual.line_number()); + EXPECT_STREQ(expected.summary(), actual.summary()); + EXPECT_STREQ(expected.message(), actual.message()); + EXPECT_EQ(expected.passed(), actual.passed()); + EXPECT_EQ(expected.failed(), actual.failed()); + EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed()); + EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed()); + } +}; + +// Tests TestResult::total_part_count(). +TEST_F(TestResultTest, total_part_count) { + ASSERT_EQ(0, r0->total_part_count()); + ASSERT_EQ(1, r1->total_part_count()); + ASSERT_EQ(2, r2->total_part_count()); +} + +// Tests TestResult::Passed(). +TEST_F(TestResultTest, Passed) { + ASSERT_TRUE(r0->Passed()); + ASSERT_TRUE(r1->Passed()); + ASSERT_FALSE(r2->Passed()); +} + +// Tests TestResult::Failed(). +TEST_F(TestResultTest, Failed) { + ASSERT_FALSE(r0->Failed()); + ASSERT_FALSE(r1->Failed()); + ASSERT_TRUE(r2->Failed()); +} + +// Tests TestResult::GetTestPartResult(). + +typedef TestResultTest TestResultDeathTest; + +TEST_F(TestResultDeathTest, GetTestPartResult) { + CompareTestPartResult(*pr1, r2->GetTestPartResult(0)); + CompareTestPartResult(*pr2, r2->GetTestPartResult(1)); + EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), ""); + EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), ""); +} + +// Tests TestResult has no properties when none are added. +TEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) { + TestResult test_result; + ASSERT_EQ(0, test_result.test_property_count()); +} + +// Tests TestResult has the expected property when added. +TEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) { + TestResult test_result; + TestProperty property("key_1", "1"); + TestResultAccessor::RecordProperty(&test_result, property); + ASSERT_EQ(1, test_result.test_property_count()); + const TestProperty& actual_property = test_result.GetTestProperty(0); + EXPECT_STREQ("key_1", actual_property.key()); + EXPECT_STREQ("1", actual_property.value()); +} + +// Tests TestResult has multiple properties when added. +TEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) { + TestResult test_result; + TestProperty property_1("key_1", "1"); + TestProperty property_2("key_2", "2"); + TestResultAccessor::RecordProperty(&test_result, property_1); + TestResultAccessor::RecordProperty(&test_result, property_2); + ASSERT_EQ(2, test_result.test_property_count()); + const TestProperty& actual_property_1 = test_result.GetTestProperty(0); + EXPECT_STREQ("key_1", actual_property_1.key()); + EXPECT_STREQ("1", actual_property_1.value()); + + const TestProperty& actual_property_2 = test_result.GetTestProperty(1); + EXPECT_STREQ("key_2", actual_property_2.key()); + EXPECT_STREQ("2", actual_property_2.value()); +} + +// Tests TestResult::RecordProperty() overrides values for duplicate keys. +TEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) { + TestResult test_result; + TestProperty property_1_1("key_1", "1"); + TestProperty property_2_1("key_2", "2"); + TestProperty property_1_2("key_1", "12"); + TestProperty property_2_2("key_2", "22"); + TestResultAccessor::RecordProperty(&test_result, property_1_1); + TestResultAccessor::RecordProperty(&test_result, property_2_1); + TestResultAccessor::RecordProperty(&test_result, property_1_2); + TestResultAccessor::RecordProperty(&test_result, property_2_2); + + ASSERT_EQ(2, test_result.test_property_count()); + const TestProperty& actual_property_1 = test_result.GetTestProperty(0); + EXPECT_STREQ("key_1", actual_property_1.key()); + EXPECT_STREQ("12", actual_property_1.value()); + + const TestProperty& actual_property_2 = test_result.GetTestProperty(1); + EXPECT_STREQ("key_2", actual_property_2.key()); + EXPECT_STREQ("22", actual_property_2.value()); +} + +// Tests TestResult::GetTestProperty(). +TEST(TestResultPropertyDeathTest, GetTestProperty) { + TestResult test_result; + TestProperty property_1("key_1", "1"); + TestProperty property_2("key_2", "2"); + TestProperty property_3("key_3", "3"); + TestResultAccessor::RecordProperty(&test_result, property_1); + TestResultAccessor::RecordProperty(&test_result, property_2); + TestResultAccessor::RecordProperty(&test_result, property_3); + + const TestProperty& fetched_property_1 = test_result.GetTestProperty(0); + const TestProperty& fetched_property_2 = test_result.GetTestProperty(1); + const TestProperty& fetched_property_3 = test_result.GetTestProperty(2); + + EXPECT_STREQ("key_1", fetched_property_1.key()); + EXPECT_STREQ("1", fetched_property_1.value()); + + EXPECT_STREQ("key_2", fetched_property_2.key()); + EXPECT_STREQ("2", fetched_property_2.value()); + + EXPECT_STREQ("key_3", fetched_property_3.key()); + EXPECT_STREQ("3", fetched_property_3.value()); + + EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), ""); + EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), ""); +} + +// When a property using a reserved key is supplied to this function, it tests +// that a non-fatal failure is added, a fatal failure is not added, and that the +// property is not recorded. +void ExpectNonFatalFailureRecordingPropertyWithReservedKey(const char* key) { + TestResult test_result; + TestProperty property(key, "1"); + EXPECT_NONFATAL_FAILURE( + TestResultAccessor::RecordProperty(&test_result, property), + "Reserved key"); + ASSERT_EQ(0, test_result.test_property_count()) << "Not recorded"; +} + +// Attempting to recording a property with the Reserved literal "name" +// should add a non-fatal failure and the property should not be recorded. +TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledName) { + ExpectNonFatalFailureRecordingPropertyWithReservedKey("name"); +} + +// Attempting to recording a property with the Reserved literal "status" +// should add a non-fatal failure and the property should not be recorded. +TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledStatus) { + ExpectNonFatalFailureRecordingPropertyWithReservedKey("status"); +} + +// Attempting to recording a property with the Reserved literal "time" +// should add a non-fatal failure and the property should not be recorded. +TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledTime) { + ExpectNonFatalFailureRecordingPropertyWithReservedKey("time"); +} + +// Attempting to recording a property with the Reserved literal "classname" +// should add a non-fatal failure and the property should not be recorded. +TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledClassname) { + ExpectNonFatalFailureRecordingPropertyWithReservedKey("classname"); +} + +// Tests that GTestFlagSaver works on Windows and Mac. + +class GTestFlagSaverTest : public Test { + protected: + // Saves the Google Test flags such that we can restore them later, and + // then sets them to their default values. This will be called + // before the first test in this test case is run. + static void SetUpTestCase() { + saver_ = new GTestFlagSaver; + + GTEST_FLAG(also_run_disabled_tests) = false; + GTEST_FLAG(break_on_failure) = false; + GTEST_FLAG(catch_exceptions) = false; + GTEST_FLAG(death_test_use_fork) = false; + GTEST_FLAG(color) = "auto"; + GTEST_FLAG(filter) = ""; + GTEST_FLAG(list_tests) = false; + GTEST_FLAG(output) = ""; + GTEST_FLAG(print_time) = true; + GTEST_FLAG(random_seed) = 0; + GTEST_FLAG(repeat) = 1; + GTEST_FLAG(shuffle) = false; + GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; + GTEST_FLAG(throw_on_failure) = false; + } + + // Restores the Google Test flags that the tests have modified. This will + // be called after the last test in this test case is run. + static void TearDownTestCase() { + delete saver_; + saver_ = NULL; + } + + // Verifies that the Google Test flags have their default values, and then + // modifies each of them. + void VerifyAndModifyFlags() { + EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests)); + EXPECT_FALSE(GTEST_FLAG(break_on_failure)); + EXPECT_FALSE(GTEST_FLAG(catch_exceptions)); + EXPECT_STREQ("auto", GTEST_FLAG(color).c_str()); + EXPECT_FALSE(GTEST_FLAG(death_test_use_fork)); + EXPECT_STREQ("", GTEST_FLAG(filter).c_str()); + EXPECT_FALSE(GTEST_FLAG(list_tests)); + EXPECT_STREQ("", GTEST_FLAG(output).c_str()); + EXPECT_TRUE(GTEST_FLAG(print_time)); + EXPECT_EQ(0, GTEST_FLAG(random_seed)); + EXPECT_EQ(1, GTEST_FLAG(repeat)); + EXPECT_FALSE(GTEST_FLAG(shuffle)); + EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth)); + EXPECT_FALSE(GTEST_FLAG(throw_on_failure)); + + GTEST_FLAG(also_run_disabled_tests) = true; + GTEST_FLAG(break_on_failure) = true; + GTEST_FLAG(catch_exceptions) = true; + GTEST_FLAG(color) = "no"; + GTEST_FLAG(death_test_use_fork) = true; + GTEST_FLAG(filter) = "abc"; + GTEST_FLAG(list_tests) = true; + GTEST_FLAG(output) = "xml:foo.xml"; + GTEST_FLAG(print_time) = false; + GTEST_FLAG(random_seed) = 1; + GTEST_FLAG(repeat) = 100; + GTEST_FLAG(shuffle) = true; + GTEST_FLAG(stack_trace_depth) = 1; + GTEST_FLAG(throw_on_failure) = true; + } + private: + // For saving Google Test flags during this test case. + static GTestFlagSaver* saver_; +}; + +GTestFlagSaver* GTestFlagSaverTest::saver_ = NULL; + +// Google Test doesn't guarantee the order of tests. The following two +// tests are designed to work regardless of their order. + +// Modifies the Google Test flags in the test body. +TEST_F(GTestFlagSaverTest, ModifyGTestFlags) { + VerifyAndModifyFlags(); +} + +// Verifies that the Google Test flags in the body of the previous test were +// restored to their original values. +TEST_F(GTestFlagSaverTest, VerifyGTestFlags) { + VerifyAndModifyFlags(); +} + +// Sets an environment variable with the given name to the given +// value. If the value argument is "", unsets the environment +// variable. The caller must ensure that both arguments are not NULL. +static void SetEnv(const char* name, const char* value) { +#if GTEST_OS_WINDOWS_MOBILE + // Environment variables are not supported on Windows CE. + return; +#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) + // C++Builder's putenv only stores a pointer to its parameter; we have to + // ensure that the string remains valid as long as it might be needed. + // We use an std::map to do so. + static std::map added_env; + + // Because putenv stores a pointer to the string buffer, we can't delete the + // previous string (if present) until after it's replaced. + String *prev_env = NULL; + if (added_env.find(name) != added_env.end()) { + prev_env = added_env[name]; + } + added_env[name] = new String((Message() << name << "=" << value).GetString()); + + // The standard signature of putenv accepts a 'char*' argument. Other + // implementations, like C++Builder's, accept a 'const char*'. + // We cast away the 'const' since that would work for both variants. + putenv(const_cast(added_env[name]->c_str())); + delete prev_env; +#elif GTEST_OS_WINDOWS // If we are on Windows proper. + _putenv((Message() << name << "=" << value).GetString().c_str()); +#else + if (*value == '\0') { + unsetenv(name); + } else { + setenv(name, value, 1); + } +#endif // GTEST_OS_WINDOWS_MOBILE +} + +#if !GTEST_OS_WINDOWS_MOBILE +// Environment variables are not supported on Windows CE. + +using testing::internal::Int32FromGTestEnv; + +// Tests Int32FromGTestEnv(). + +// Tests that Int32FromGTestEnv() returns the default value when the +// environment variable is not set. +TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) { + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", ""); + EXPECT_EQ(10, Int32FromGTestEnv("temp", 10)); +} + +// Tests that Int32FromGTestEnv() returns the default value when the +// environment variable overflows as an Int32. +TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) { + printf("(expecting 2 warnings)\n"); + + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321"); + EXPECT_EQ(20, Int32FromGTestEnv("temp", 20)); + + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321"); + EXPECT_EQ(30, Int32FromGTestEnv("temp", 30)); +} + +// Tests that Int32FromGTestEnv() returns the default value when the +// environment variable does not represent a valid decimal integer. +TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) { + printf("(expecting 2 warnings)\n"); + + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1"); + EXPECT_EQ(40, Int32FromGTestEnv("temp", 40)); + + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X"); + EXPECT_EQ(50, Int32FromGTestEnv("temp", 50)); +} + +// Tests that Int32FromGTestEnv() parses and returns the value of the +// environment variable when it represents a valid decimal integer in +// the range of an Int32. +TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) { + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123"); + EXPECT_EQ(123, Int32FromGTestEnv("temp", 0)); + + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321"); + EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0)); +} +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Tests ParseInt32Flag(). + +// Tests that ParseInt32Flag() returns false and doesn't change the +// output value when the flag has wrong format +TEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) { + Int32 value = 123; + EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value)); + EXPECT_EQ(123, value); + + EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value)); + EXPECT_EQ(123, value); +} + +// Tests that ParseInt32Flag() returns false and doesn't change the +// output value when the flag overflows as an Int32. +TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { + printf("(expecting 2 warnings)\n"); + + Int32 value = 123; + EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value)); + EXPECT_EQ(123, value); + + EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value)); + EXPECT_EQ(123, value); +} + +// Tests that ParseInt32Flag() returns false and doesn't change the +// output value when the flag does not represent a valid decimal +// integer. +TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { + printf("(expecting 2 warnings)\n"); + + Int32 value = 123; + EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value)); + EXPECT_EQ(123, value); + + EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value)); + EXPECT_EQ(123, value); +} + +// Tests that ParseInt32Flag() parses the value of the flag and +// returns true when the flag represents a valid decimal integer in +// the range of an Int32. +TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) { + Int32 value = 123; + EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value)); + EXPECT_EQ(456, value); + + EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", + "abc", &value)); + EXPECT_EQ(-789, value); +} + +// Tests that Int32FromEnvOrDie() parses the value of the var or +// returns the correct default. +// Environment variables are not supported on Windows CE. +#if !GTEST_OS_WINDOWS_MOBILE +TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) { + EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123"); + EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123"); + EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); +} +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Tests that Int32FromEnvOrDie() aborts with an error message +// if the variable is not an Int32. +TEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) { + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx"); + EXPECT_DEATH_IF_SUPPORTED( + Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), + ".*"); +} + +// Tests that Int32FromEnvOrDie() aborts with an error message +// if the variable cannot be represnted by an Int32. +TEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) { + SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234"); + EXPECT_DEATH_IF_SUPPORTED( + Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), + ".*"); +} + +// Tests that ShouldRunTestOnShard() selects all tests +// where there is 1 shard. +TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) { + EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0)); + EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1)); + EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2)); + EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3)); + EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4)); +} + +class ShouldShardTest : public testing::Test { + protected: + virtual void SetUp() { + index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX"; + total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL"; + } + + virtual void TearDown() { + SetEnv(index_var_, ""); + SetEnv(total_var_, ""); + } + + const char* index_var_; + const char* total_var_; +}; + +// Tests that sharding is disabled if neither of the environment variables +// are set. +TEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) { + SetEnv(index_var_, ""); + SetEnv(total_var_, ""); + + EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); +} + +// Tests that sharding is not enabled if total_shards == 1. +TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) { + SetEnv(index_var_, "0"); + SetEnv(total_var_, "1"); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); +} + +// Tests that sharding is enabled if total_shards > 1 and +// we are not in a death test subprocess. +// Environment variables are not supported on Windows CE. +#if !GTEST_OS_WINDOWS_MOBILE +TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) { + SetEnv(index_var_, "4"); + SetEnv(total_var_, "22"); + EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); + + SetEnv(index_var_, "8"); + SetEnv(total_var_, "9"); + EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); + + SetEnv(index_var_, "0"); + SetEnv(total_var_, "9"); + EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); + EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); +} +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Tests that we exit in error if the sharding values are not valid. + +typedef ShouldShardTest ShouldShardDeathTest; + +TEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) { + SetEnv(index_var_, "4"); + SetEnv(total_var_, "4"); + EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); + + SetEnv(index_var_, "4"); + SetEnv(total_var_, "-2"); + EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); + + SetEnv(index_var_, "5"); + SetEnv(total_var_, ""); + EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); + + SetEnv(index_var_, ""); + SetEnv(total_var_, "5"); + EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); +} + +// Tests that ShouldRunTestOnShard is a partition when 5 +// shards are used. +TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) { + // Choose an arbitrary number of tests and shards. + const int num_tests = 17; + const int num_shards = 5; + + // Check partitioning: each test should be on exactly 1 shard. + for (int test_id = 0; test_id < num_tests; test_id++) { + int prev_selected_shard_index = -1; + for (int shard_index = 0; shard_index < num_shards; shard_index++) { + if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) { + if (prev_selected_shard_index < 0) { + prev_selected_shard_index = shard_index; + } else { + ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and " + << shard_index << " are both selected to run test " << test_id; + } + } + } + } + + // Check balance: This is not required by the sharding protocol, but is a + // desirable property for performance. + for (int shard_index = 0; shard_index < num_shards; shard_index++) { + int num_tests_on_shard = 0; + for (int test_id = 0; test_id < num_tests; test_id++) { + num_tests_on_shard += + ShouldRunTestOnShard(num_shards, shard_index, test_id); + } + EXPECT_GE(num_tests_on_shard, num_tests / num_shards); + } +} + +// For the same reason we are not explicitly testing everything in the +// Test class, there are no separate tests for the following classes +// (except for some trivial cases): +// +// TestCase, UnitTest, UnitTestResultPrinter. +// +// Similarly, there are no separate tests for the following macros: +// +// TEST, TEST_F, RUN_ALL_TESTS + +TEST(UnitTestTest, CanGetOriginalWorkingDir) { + ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL); + EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), ""); +} + +// This group of tests is for predicate assertions (ASSERT_PRED*, etc) +// of various arities. They do not attempt to be exhaustive. Rather, +// view them as smoke tests that can be easily reviewed and verified. +// A more complete set of tests for predicate assertions can be found +// in gtest_pred_impl_unittest.cc. + +// First, some predicates and predicate-formatters needed by the tests. + +// Returns true iff the argument is an even number. +bool IsEven(int n) { + return (n % 2) == 0; +} + +// A functor that returns true iff the argument is an even number. +struct IsEvenFunctor { + bool operator()(int n) { return IsEven(n); } +}; + +// A predicate-formatter function that asserts the argument is an even +// number. +AssertionResult AssertIsEven(const char* expr, int n) { + if (IsEven(n)) { + return AssertionSuccess(); + } + + Message msg; + msg << expr << " evaluates to " << n << ", which is not even."; + return AssertionFailure(msg); +} + +// A predicate function that returns AssertionResult for use in +// EXPECT/ASSERT_TRUE/FALSE. +AssertionResult ResultIsEven(int n) { + if (IsEven(n)) + return AssertionSuccess() << n << " is even"; + else + return AssertionFailure() << n << " is odd"; +} + +// A predicate function that returns AssertionResult but gives no +// explanation why it succeeds. Needed for testing that +// EXPECT/ASSERT_FALSE handles such functions correctly. +AssertionResult ResultIsEvenNoExplanation(int n) { + if (IsEven(n)) + return AssertionSuccess(); + else + return AssertionFailure() << n << " is odd"; +} + +// A predicate-formatter functor that asserts the argument is an even +// number. +struct AssertIsEvenFunctor { + AssertionResult operator()(const char* expr, int n) { + return AssertIsEven(expr, n); + } +}; + +// Returns true iff the sum of the arguments is an even number. +bool SumIsEven2(int n1, int n2) { + return IsEven(n1 + n2); +} + +// A functor that returns true iff the sum of the arguments is an even +// number. +struct SumIsEven3Functor { + bool operator()(int n1, int n2, int n3) { + return IsEven(n1 + n2 + n3); + } +}; + +// A predicate-formatter function that asserts the sum of the +// arguments is an even number. +AssertionResult AssertSumIsEven4( + const char* e1, const char* e2, const char* e3, const char* e4, + int n1, int n2, int n3, int n4) { + const int sum = n1 + n2 + n3 + n4; + if (IsEven(sum)) { + return AssertionSuccess(); + } + + Message msg; + msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 + << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 + << ") evaluates to " << sum << ", which is not even."; + return AssertionFailure(msg); +} + +// A predicate-formatter functor that asserts the sum of the arguments +// is an even number. +struct AssertSumIsEven5Functor { + AssertionResult operator()( + const char* e1, const char* e2, const char* e3, const char* e4, + const char* e5, int n1, int n2, int n3, int n4, int n5) { + const int sum = n1 + n2 + n3 + n4 + n5; + if (IsEven(sum)) { + return AssertionSuccess(); + } + + Message msg; + msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 + << " (" + << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5 + << ") evaluates to " << sum << ", which is not even."; + return AssertionFailure(msg); + } +}; + + +// Tests unary predicate assertions. + +// Tests unary predicate assertions that don't use a custom formatter. +TEST(Pred1Test, WithoutFormat) { + // Success cases. + EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!"; + ASSERT_PRED1(IsEven, 4); + + // Failure cases. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED1(IsEven, 5) << "This failure is expected."; + }, "This failure is expected."); + EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5), + "evaluates to false"); +} + +// Tests unary predicate assertions that use a custom formatter. +TEST(Pred1Test, WithFormat) { + // Success cases. + EXPECT_PRED_FORMAT1(AssertIsEven, 2); + ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4) + << "This failure is UNEXPECTED!"; + + // Failure cases. + const int n = 5; + EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n), + "n evaluates to 5, which is not even."); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected."; + }, "This failure is expected."); +} + +// Tests that unary predicate assertions evaluates their arguments +// exactly once. +TEST(Pred1Test, SingleEvaluationOnFailure) { + // A success case. + static int n = 0; + EXPECT_PRED1(IsEven, n++); + EXPECT_EQ(1, n) << "The argument is not evaluated exactly once."; + + // A failure case. + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++) + << "This failure is expected."; + }, "This failure is expected."); + EXPECT_EQ(2, n) << "The argument is not evaluated exactly once."; +} + + +// Tests predicate assertions whose arity is >= 2. + +// Tests predicate assertions that don't use a custom formatter. +TEST(PredTest, WithoutFormat) { + // Success cases. + ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!"; + EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8); + + // Failure cases. + const int n1 = 1; + const int n2 = 2; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected."; + }, "This failure is expected."); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4); + }, "evaluates to false"); +} + +// Tests predicate assertions that use a custom formatter. +TEST(PredTest, WithFormat) { + // Success cases. + ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) << + "This failure is UNEXPECTED!"; + EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10); + + // Failure cases. + const int n1 = 1; + const int n2 = 2; + const int n3 = 4; + const int n4 = 6; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4); + }, "evaluates to 13, which is not even."); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8) + << "This failure is expected."; + }, "This failure is expected."); +} + +// Tests that predicate assertions evaluates their arguments +// exactly once. +TEST(PredTest, SingleEvaluationOnFailure) { + // A success case. + int n1 = 0; + int n2 = 0; + EXPECT_PRED2(SumIsEven2, n1++, n2++); + EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; + EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; + + // Another success case. + n1 = n2 = 0; + int n3 = 0; + int n4 = 0; + int n5 = 0; + ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), + n1++, n2++, n3++, n4++, n5++) + << "This failure is UNEXPECTED!"; + EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; + EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; + EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; + EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; + EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once."; + + // A failure case. + n1 = n2 = n3 = 0; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++) + << "This failure is expected."; + }, "This failure is expected."); + EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; + EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; + EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; + + // Another failure case. + n1 = n2 = n3 = n4 = 0; + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++); + }, "evaluates to 1, which is not even."); + EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; + EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; + EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; + EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; +} + + +// Some helper functions for testing using overloaded/template +// functions with ASSERT_PREDn and EXPECT_PREDn. + +bool IsPositive(double x) { + return x > 0; +} + +template +bool IsNegative(T x) { + return x < 0; +} + +template +bool GreaterThan(T1 x1, T2 x2) { + return x1 > x2; +} + +// Tests that overloaded functions can be used in *_PRED* as long as +// their types are explicitly specified. +TEST(PredicateAssertionTest, AcceptsOverloadedFunction) { + // C++Builder requires C-style casts rather than static_cast. + EXPECT_PRED1((bool (*)(int))(IsPositive), 5); // NOLINT + ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0); // NOLINT +} + +// Tests that template functions can be used in *_PRED* as long as +// their types are explicitly specified. +TEST(PredicateAssertionTest, AcceptsTemplateFunction) { + EXPECT_PRED1(IsNegative, -5); + // Makes sure that we can handle templates with more than one + // parameter. + ASSERT_PRED2((GreaterThan), 5, 0); +} + + +// Some helper functions for testing using overloaded/template +// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn. + +AssertionResult IsPositiveFormat(const char* /* expr */, int n) { + return n > 0 ? AssertionSuccess() : + AssertionFailure(Message() << "Failure"); +} + +AssertionResult IsPositiveFormat(const char* /* expr */, double x) { + return x > 0 ? AssertionSuccess() : + AssertionFailure(Message() << "Failure"); +} + +template +AssertionResult IsNegativeFormat(const char* /* expr */, T x) { + return x < 0 ? AssertionSuccess() : + AssertionFailure(Message() << "Failure"); +} + +template +AssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */, + const T1& x1, const T2& x2) { + return x1 == x2 ? AssertionSuccess() : + AssertionFailure(Message() << "Failure"); +} + +// Tests that overloaded functions can be used in *_PRED_FORMAT* +// without explicitly specifying their types. +TEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) { + EXPECT_PRED_FORMAT1(IsPositiveFormat, 5); + ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0); +} + +// Tests that template functions can be used in *_PRED_FORMAT* without +// explicitly specifying their types. +TEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) { + EXPECT_PRED_FORMAT1(IsNegativeFormat, -5); + ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3); +} + + +// Tests string assertions. + +// Tests ASSERT_STREQ with non-NULL arguments. +TEST(StringAssertionTest, ASSERT_STREQ) { + const char * const p1 = "good"; + ASSERT_STREQ(p1, p1); + + // Let p2 have the same content as p1, but be at a different address. + const char p2[] = "good"; + ASSERT_STREQ(p1, p2); + + EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"), + "Expected: \"bad\""); +} + +// Tests ASSERT_STREQ with NULL arguments. +TEST(StringAssertionTest, ASSERT_STREQ_Null) { + ASSERT_STREQ(static_cast(NULL), NULL); + EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"), + "non-null"); +} + +// Tests ASSERT_STREQ with NULL arguments. +TEST(StringAssertionTest, ASSERT_STREQ_Null2) { + EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL), + "non-null"); +} + +// Tests ASSERT_STRNE. +TEST(StringAssertionTest, ASSERT_STRNE) { + ASSERT_STRNE("hi", "Hi"); + ASSERT_STRNE("Hi", NULL); + ASSERT_STRNE(NULL, "Hi"); + ASSERT_STRNE("", NULL); + ASSERT_STRNE(NULL, ""); + ASSERT_STRNE("", "Hi"); + ASSERT_STRNE("Hi", ""); + EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"), + "\"Hi\" vs \"Hi\""); +} + +// Tests ASSERT_STRCASEEQ. +TEST(StringAssertionTest, ASSERT_STRCASEEQ) { + ASSERT_STRCASEEQ("hi", "Hi"); + ASSERT_STRCASEEQ(static_cast(NULL), NULL); + + ASSERT_STRCASEEQ("", ""); + EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"), + "(ignoring case)"); +} + +// Tests ASSERT_STRCASENE. +TEST(StringAssertionTest, ASSERT_STRCASENE) { + ASSERT_STRCASENE("hi1", "Hi2"); + ASSERT_STRCASENE("Hi", NULL); + ASSERT_STRCASENE(NULL, "Hi"); + ASSERT_STRCASENE("", NULL); + ASSERT_STRCASENE(NULL, ""); + ASSERT_STRCASENE("", "Hi"); + ASSERT_STRCASENE("Hi", ""); + EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"), + "(ignoring case)"); +} + +// Tests *_STREQ on wide strings. +TEST(StringAssertionTest, STREQ_Wide) { + // NULL strings. + ASSERT_STREQ(static_cast(NULL), NULL); + + // Empty strings. + ASSERT_STREQ(L"", L""); + + // Non-null vs NULL. + EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL), + "non-null"); + + // Equal strings. + EXPECT_STREQ(L"Hi", L"Hi"); + + // Unequal strings. + EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"), + "Abc"); + + // Strings containing wide characters. + EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"), + "abc"); +} + +// Tests *_STRNE on wide strings. +TEST(StringAssertionTest, STRNE_Wide) { + // NULL strings. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_STRNE(static_cast(NULL), NULL); + }, ""); + + // Empty strings. + EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""), + "L\"\""); + + // Non-null vs NULL. + ASSERT_STRNE(L"non-null", NULL); + + // Equal strings. + EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"), + "L\"Hi\""); + + // Unequal strings. + EXPECT_STRNE(L"abc", L"Abc"); + + // Strings containing wide characters. + EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"), + "abc"); +} + +// Tests for ::testing::IsSubstring(). + +// Tests that IsSubstring() returns the correct result when the input +// argument type is const char*. +TEST(IsSubstringTest, ReturnsCorrectResultForCString) { + EXPECT_FALSE(IsSubstring("", "", NULL, "a")); + EXPECT_FALSE(IsSubstring("", "", "b", NULL)); + EXPECT_FALSE(IsSubstring("", "", "needle", "haystack")); + + EXPECT_TRUE(IsSubstring("", "", static_cast(NULL), NULL)); + EXPECT_TRUE(IsSubstring("", "", "needle", "two needles")); +} + +// Tests that IsSubstring() returns the correct result when the input +// argument type is const wchar_t*. +TEST(IsSubstringTest, ReturnsCorrectResultForWideCString) { + EXPECT_FALSE(IsSubstring("", "", kNull, L"a")); + EXPECT_FALSE(IsSubstring("", "", L"b", kNull)); + EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack")); + + EXPECT_TRUE(IsSubstring("", "", static_cast(NULL), NULL)); + EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles")); +} + +// Tests that IsSubstring() generates the correct message when the input +// argument type is const char*. +TEST(IsSubstringTest, GeneratesCorrectMessageForCString) { + EXPECT_STREQ("Value of: needle_expr\n" + " Actual: \"needle\"\n" + "Expected: a substring of haystack_expr\n" + "Which is: \"haystack\"", + IsSubstring("needle_expr", "haystack_expr", + "needle", "haystack").failure_message()); +} + +// Tests that IsSubstring returns the correct result when the input +// argument type is ::std::string. +TEST(IsSubstringTest, ReturnsCorrectResultsForStdString) { + EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob")); + EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world"))); +} + +#if GTEST_HAS_STD_WSTRING +// Tests that IsSubstring returns the correct result when the input +// argument type is ::std::wstring. +TEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) { + EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles")); + EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack"))); +} + +// Tests that IsSubstring() generates the correct message when the input +// argument type is ::std::wstring. +TEST(IsSubstringTest, GeneratesCorrectMessageForWstring) { + EXPECT_STREQ("Value of: needle_expr\n" + " Actual: L\"needle\"\n" + "Expected: a substring of haystack_expr\n" + "Which is: L\"haystack\"", + IsSubstring( + "needle_expr", "haystack_expr", + ::std::wstring(L"needle"), L"haystack").failure_message()); +} + +#endif // GTEST_HAS_STD_WSTRING + +// Tests for ::testing::IsNotSubstring(). + +// Tests that IsNotSubstring() returns the correct result when the input +// argument type is const char*. +TEST(IsNotSubstringTest, ReturnsCorrectResultForCString) { + EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack")); + EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles")); +} + +// Tests that IsNotSubstring() returns the correct result when the input +// argument type is const wchar_t*. +TEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) { + EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack")); + EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles")); +} + +// Tests that IsNotSubstring() generates the correct message when the input +// argument type is const wchar_t*. +TEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) { + EXPECT_STREQ("Value of: needle_expr\n" + " Actual: L\"needle\"\n" + "Expected: not a substring of haystack_expr\n" + "Which is: L\"two needles\"", + IsNotSubstring( + "needle_expr", "haystack_expr", + L"needle", L"two needles").failure_message()); +} + +// Tests that IsNotSubstring returns the correct result when the input +// argument type is ::std::string. +TEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) { + EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob")); + EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world"))); +} + +// Tests that IsNotSubstring() generates the correct message when the input +// argument type is ::std::string. +TEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) { + EXPECT_STREQ("Value of: needle_expr\n" + " Actual: \"needle\"\n" + "Expected: not a substring of haystack_expr\n" + "Which is: \"two needles\"", + IsNotSubstring( + "needle_expr", "haystack_expr", + ::std::string("needle"), "two needles").failure_message()); +} + +#if GTEST_HAS_STD_WSTRING + +// Tests that IsNotSubstring returns the correct result when the input +// argument type is ::std::wstring. +TEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) { + EXPECT_FALSE( + IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles")); + EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack"))); +} + +#endif // GTEST_HAS_STD_WSTRING + +// Tests floating-point assertions. + +template +class FloatingPointTest : public Test { + protected: + + // Pre-calculated numbers to be used by the tests. + struct TestValues { + RawType close_to_positive_zero; + RawType close_to_negative_zero; + RawType further_from_negative_zero; + + RawType close_to_one; + RawType further_from_one; + + RawType infinity; + RawType close_to_infinity; + RawType further_from_infinity; + + RawType nan1; + RawType nan2; + }; + + typedef typename testing::internal::FloatingPoint Floating; + typedef typename Floating::Bits Bits; + + virtual void SetUp() { + const size_t max_ulps = Floating::kMaxUlps; + + // The bits that represent 0.0. + const Bits zero_bits = Floating(0).bits(); + + // Makes some numbers close to 0.0. + values_.close_to_positive_zero = Floating::ReinterpretBits( + zero_bits + max_ulps/2); + values_.close_to_negative_zero = -Floating::ReinterpretBits( + zero_bits + max_ulps - max_ulps/2); + values_.further_from_negative_zero = -Floating::ReinterpretBits( + zero_bits + max_ulps + 1 - max_ulps/2); + + // The bits that represent 1.0. + const Bits one_bits = Floating(1).bits(); + + // Makes some numbers close to 1.0. + values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps); + values_.further_from_one = Floating::ReinterpretBits( + one_bits + max_ulps + 1); + + // +infinity. + values_.infinity = Floating::Infinity(); + + // The bits that represent +infinity. + const Bits infinity_bits = Floating(values_.infinity).bits(); + + // Makes some numbers close to infinity. + values_.close_to_infinity = Floating::ReinterpretBits( + infinity_bits - max_ulps); + values_.further_from_infinity = Floating::ReinterpretBits( + infinity_bits - max_ulps - 1); + + // Makes some NAN's. Sets the most significant bit of the fraction so that + // our NaN's are quiet; trying to process a signaling NaN would raise an + // exception if our environment enables floating point exceptions. + values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask + | (static_cast(1) << (Floating::kFractionBitCount - 1)) | 1); + values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask + | (static_cast(1) << (Floating::kFractionBitCount - 1)) | 200); + } + + void TestSize() { + EXPECT_EQ(sizeof(RawType), sizeof(Bits)); + } + + static TestValues values_; +}; + +template +typename FloatingPointTest::TestValues + FloatingPointTest::values_; + +// Instantiates FloatingPointTest for testing *_FLOAT_EQ. +typedef FloatingPointTest FloatTest; + +// Tests that the size of Float::Bits matches the size of float. +TEST_F(FloatTest, Size) { + TestSize(); +} + +// Tests comparing with +0 and -0. +TEST_F(FloatTest, Zeros) { + EXPECT_FLOAT_EQ(0.0, -0.0); + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0), + "1.0"); + EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5), + "1.5"); +} + +// Tests comparing numbers close to 0. +// +// This ensures that *_FLOAT_EQ handles the sign correctly and no +// overflow occurs when comparing numbers whose absolute value is very +// small. +TEST_F(FloatTest, AlmostZeros) { + // In C++Builder, names within local classes (such as used by + // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the + // scoping class. Use a static local alias as a workaround. + // We use the assignment syntax since some compilers, like Sun Studio, + // don't allow initializing references using construction syntax + // (parentheses). + static const FloatTest::TestValues& v = this->values_; + + EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero); + EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero); + EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero); + + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_FLOAT_EQ(v.close_to_positive_zero, + v.further_from_negative_zero); + }, "v.further_from_negative_zero"); +} + +// Tests comparing numbers close to each other. +TEST_F(FloatTest, SmallDiff) { + EXPECT_FLOAT_EQ(1.0, values_.close_to_one); + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one), + "values_.further_from_one"); +} + +// Tests comparing numbers far apart. +TEST_F(FloatTest, LargeDiff) { + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0), + "3.0"); +} + +// Tests comparing with infinity. +// +// This ensures that no overflow occurs when comparing numbers whose +// absolute value is very large. +TEST_F(FloatTest, Infinity) { + EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity); + EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity); +#if !GTEST_OS_SYMBIAN + // Nokia's STLport crashes if we try to output infinity or NaN. + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity), + "-values_.infinity"); + + // This is interesting as the representations of infinity and nan1 + // are only 1 DLP apart. + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1), + "values_.nan1"); +#endif // !GTEST_OS_SYMBIAN +} + +// Tests that comparing with NAN always returns false. +TEST_F(FloatTest, NaN) { +#if !GTEST_OS_SYMBIAN +// Nokia's STLport crashes if we try to output infinity or NaN. + + // In C++Builder, names within local classes (such as used by + // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the + // scoping class. Use a static local alias as a workaround. + // We use the assignment syntax since some compilers, like Sun Studio, + // don't allow initializing references using construction syntax + // (parentheses). + static const FloatTest::TestValues& v = this->values_; + + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1), + "v.nan1"); + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2), + "v.nan2"); + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1), + "v.nan1"); + + EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity), + "v.infinity"); +#endif // !GTEST_OS_SYMBIAN +} + +// Tests that *_FLOAT_EQ are reflexive. +TEST_F(FloatTest, Reflexive) { + EXPECT_FLOAT_EQ(0.0, 0.0); + EXPECT_FLOAT_EQ(1.0, 1.0); + ASSERT_FLOAT_EQ(values_.infinity, values_.infinity); +} + +// Tests that *_FLOAT_EQ are commutative. +TEST_F(FloatTest, Commutative) { + // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one). + EXPECT_FLOAT_EQ(values_.close_to_one, 1.0); + + // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one). + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0), + "1.0"); +} + +// Tests EXPECT_NEAR. +TEST_F(FloatTest, EXPECT_NEAR) { + EXPECT_NEAR(-1.0f, -1.1f, 0.2f); + EXPECT_NEAR(2.0f, 3.0f, 1.0f); + EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f), // NOLINT + "The difference between 1.0f and 1.5f is 0.5, " + "which exceeds 0.25f"); + // To work around a bug in gcc 2.95.0, there is intentionally no + // space after the first comma in the previous line. +} + +// Tests ASSERT_NEAR. +TEST_F(FloatTest, ASSERT_NEAR) { + ASSERT_NEAR(-1.0f, -1.1f, 0.2f); + ASSERT_NEAR(2.0f, 3.0f, 1.0f); + EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f), // NOLINT + "The difference between 1.0f and 1.5f is 0.5, " + "which exceeds 0.25f"); + // To work around a bug in gcc 2.95.0, there is intentionally no + // space after the first comma in the previous line. +} + +// Tests the cases where FloatLE() should succeed. +TEST_F(FloatTest, FloatLESucceeds) { + EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2, + ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2, + + // or when val1 is greater than, but almost equals to, val2. + EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f); +} + +// Tests the cases where FloatLE() should fail. +TEST_F(FloatTest, FloatLEFails) { + // When val1 is greater than val2 by a large margin, + EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f), + "(2.0f) <= (1.0f)"); + + // or by a small yet non-negligible margin, + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f); + }, "(values_.further_from_one) <= (1.0f)"); + +#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) + // Nokia's STLport crashes if we try to output infinity or NaN. + // C++Builder gives bad results for ordered comparisons involving NaNs + // due to compiler bugs. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity); + }, "(values_.nan1) <= (values_.infinity)"); + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1); + }, "(-values_.infinity) <= (values_.nan1)"); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1); + }, "(values_.nan1) <= (values_.nan1)"); +#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) +} + +// Instantiates FloatingPointTest for testing *_DOUBLE_EQ. +typedef FloatingPointTest DoubleTest; + +// Tests that the size of Double::Bits matches the size of double. +TEST_F(DoubleTest, Size) { + TestSize(); +} + +// Tests comparing with +0 and -0. +TEST_F(DoubleTest, Zeros) { + EXPECT_DOUBLE_EQ(0.0, -0.0); + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0), + "1.0"); + EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0), + "1.0"); +} + +// Tests comparing numbers close to 0. +// +// This ensures that *_DOUBLE_EQ handles the sign correctly and no +// overflow occurs when comparing numbers whose absolute value is very +// small. +TEST_F(DoubleTest, AlmostZeros) { + // In C++Builder, names within local classes (such as used by + // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the + // scoping class. Use a static local alias as a workaround. + // We use the assignment syntax since some compilers, like Sun Studio, + // don't allow initializing references using construction syntax + // (parentheses). + static const DoubleTest::TestValues& v = this->values_; + + EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero); + EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero); + EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero); + + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_DOUBLE_EQ(v.close_to_positive_zero, + v.further_from_negative_zero); + }, "v.further_from_negative_zero"); +} + +// Tests comparing numbers close to each other. +TEST_F(DoubleTest, SmallDiff) { + EXPECT_DOUBLE_EQ(1.0, values_.close_to_one); + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one), + "values_.further_from_one"); +} + +// Tests comparing numbers far apart. +TEST_F(DoubleTest, LargeDiff) { + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0), + "3.0"); +} + +// Tests comparing with infinity. +// +// This ensures that no overflow occurs when comparing numbers whose +// absolute value is very large. +TEST_F(DoubleTest, Infinity) { + EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity); + EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity); +#if !GTEST_OS_SYMBIAN + // Nokia's STLport crashes if we try to output infinity or NaN. + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity), + "-values_.infinity"); + + // This is interesting as the representations of infinity_ and nan1_ + // are only 1 DLP apart. + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1), + "values_.nan1"); +#endif // !GTEST_OS_SYMBIAN +} + +// Tests that comparing with NAN always returns false. +TEST_F(DoubleTest, NaN) { +#if !GTEST_OS_SYMBIAN + // In C++Builder, names within local classes (such as used by + // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the + // scoping class. Use a static local alias as a workaround. + // We use the assignment syntax since some compilers, like Sun Studio, + // don't allow initializing references using construction syntax + // (parentheses). + static const DoubleTest::TestValues& v = this->values_; + + // Nokia's STLport crashes if we try to output infinity or NaN. + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1), + "v.nan1"); + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2"); + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1"); + EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity), + "v.infinity"); +#endif // !GTEST_OS_SYMBIAN +} + +// Tests that *_DOUBLE_EQ are reflexive. +TEST_F(DoubleTest, Reflexive) { + EXPECT_DOUBLE_EQ(0.0, 0.0); + EXPECT_DOUBLE_EQ(1.0, 1.0); +#if !GTEST_OS_SYMBIAN + // Nokia's STLport crashes if we try to output infinity or NaN. + ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity); +#endif // !GTEST_OS_SYMBIAN +} + +// Tests that *_DOUBLE_EQ are commutative. +TEST_F(DoubleTest, Commutative) { + // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one). + EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0); + + // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one). + EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0), + "1.0"); +} + +// Tests EXPECT_NEAR. +TEST_F(DoubleTest, EXPECT_NEAR) { + EXPECT_NEAR(-1.0, -1.1, 0.2); + EXPECT_NEAR(2.0, 3.0, 1.0); + EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25), // NOLINT + "The difference between 1.0 and 1.5 is 0.5, " + "which exceeds 0.25"); + // To work around a bug in gcc 2.95.0, there is intentionally no + // space after the first comma in the previous statement. +} + +// Tests ASSERT_NEAR. +TEST_F(DoubleTest, ASSERT_NEAR) { + ASSERT_NEAR(-1.0, -1.1, 0.2); + ASSERT_NEAR(2.0, 3.0, 1.0); + EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25), // NOLINT + "The difference between 1.0 and 1.5 is 0.5, " + "which exceeds 0.25"); + // To work around a bug in gcc 2.95.0, there is intentionally no + // space after the first comma in the previous statement. +} + +// Tests the cases where DoubleLE() should succeed. +TEST_F(DoubleTest, DoubleLESucceeds) { + EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2, + ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2, + + // or when val1 is greater than, but almost equals to, val2. + EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0); +} + +// Tests the cases where DoubleLE() should fail. +TEST_F(DoubleTest, DoubleLEFails) { + // When val1 is greater than val2 by a large margin, + EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0), + "(2.0) <= (1.0)"); + + // or by a small yet non-negligible margin, + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0); + }, "(values_.further_from_one) <= (1.0)"); + +#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) + // Nokia's STLport crashes if we try to output infinity or NaN. + // C++Builder gives bad results for ordered comparisons involving NaNs + // due to compiler bugs. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity); + }, "(values_.nan1) <= (values_.infinity)"); + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1); + }, " (-values_.infinity) <= (values_.nan1)"); + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1); + }, "(values_.nan1) <= (values_.nan1)"); +#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) +} + + +// Verifies that a test or test case whose name starts with DISABLED_ is +// not run. + +// A test whose name starts with DISABLED_. +// Should not run. +TEST(DisabledTest, DISABLED_TestShouldNotRun) { + FAIL() << "Unexpected failure: Disabled test should not be run."; +} + +// A test whose name does not start with DISABLED_. +// Should run. +TEST(DisabledTest, NotDISABLED_TestShouldRun) { + EXPECT_EQ(1, 1); +} + +// A test case whose name starts with DISABLED_. +// Should not run. +TEST(DISABLED_TestCase, TestShouldNotRun) { + FAIL() << "Unexpected failure: Test in disabled test case should not be run."; +} + +// A test case and test whose names start with DISABLED_. +// Should not run. +TEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) { + FAIL() << "Unexpected failure: Test in disabled test case should not be run."; +} + +// Check that when all tests in a test case are disabled, SetupTestCase() and +// TearDownTestCase() are not called. +class DisabledTestsTest : public Test { + protected: + static void SetUpTestCase() { + FAIL() << "Unexpected failure: All tests disabled in test case. " + "SetupTestCase() should not be called."; + } + + static void TearDownTestCase() { + FAIL() << "Unexpected failure: All tests disabled in test case. " + "TearDownTestCase() should not be called."; + } +}; + +TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) { + FAIL() << "Unexpected failure: Disabled test should not be run."; +} + +TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) { + FAIL() << "Unexpected failure: Disabled test should not be run."; +} + +// Tests that disabled typed tests aren't run. + +#if GTEST_HAS_TYPED_TEST + +template +class TypedTest : public Test { +}; + +typedef testing::Types NumericTypes; +TYPED_TEST_CASE(TypedTest, NumericTypes); + +TYPED_TEST(TypedTest, DISABLED_ShouldNotRun) { + FAIL() << "Unexpected failure: Disabled typed test should not run."; +} + +template +class DISABLED_TypedTest : public Test { +}; + +TYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes); + +TYPED_TEST(DISABLED_TypedTest, ShouldNotRun) { + FAIL() << "Unexpected failure: Disabled typed test should not run."; +} + +#endif // GTEST_HAS_TYPED_TEST + +// Tests that disabled type-parameterized tests aren't run. + +#if GTEST_HAS_TYPED_TEST_P + +template +class TypedTestP : public Test { +}; + +TYPED_TEST_CASE_P(TypedTestP); + +TYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) { + FAIL() << "Unexpected failure: " + << "Disabled type-parameterized test should not run."; +} + +REGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun); + +INSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes); + +template +class DISABLED_TypedTestP : public Test { +}; + +TYPED_TEST_CASE_P(DISABLED_TypedTestP); + +TYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) { + FAIL() << "Unexpected failure: " + << "Disabled type-parameterized test should not run."; +} + +REGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun); + +INSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes); + +#endif // GTEST_HAS_TYPED_TEST_P + +// Tests that assertion macros evaluate their arguments exactly once. + +class SingleEvaluationTest : public Test { + public: // Must be public and not protected due to a bug in g++ 3.4.2. + // This helper function is needed by the FailedASSERT_STREQ test + // below. It's public to work around C++Builder's bug with scoping local + // classes. + static void CompareAndIncrementCharPtrs() { + ASSERT_STREQ(p1_++, p2_++); + } + + // This helper function is needed by the FailedASSERT_NE test below. It's + // public to work around C++Builder's bug with scoping local classes. + static void CompareAndIncrementInts() { + ASSERT_NE(a_++, b_++); + } + + protected: + SingleEvaluationTest() { + p1_ = s1_; + p2_ = s2_; + a_ = 0; + b_ = 0; + } + + static const char* const s1_; + static const char* const s2_; + static const char* p1_; + static const char* p2_; + + static int a_; + static int b_; +}; + +const char* const SingleEvaluationTest::s1_ = "01234"; +const char* const SingleEvaluationTest::s2_ = "abcde"; +const char* SingleEvaluationTest::p1_; +const char* SingleEvaluationTest::p2_; +int SingleEvaluationTest::a_; +int SingleEvaluationTest::b_; + +// Tests that when ASSERT_STREQ fails, it evaluates its arguments +// exactly once. +TEST_F(SingleEvaluationTest, FailedASSERT_STREQ) { + EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(), + "p2_++"); + EXPECT_EQ(s1_ + 1, p1_); + EXPECT_EQ(s2_ + 1, p2_); +} + +// Tests that string assertion arguments are evaluated exactly once. +TEST_F(SingleEvaluationTest, ASSERT_STR) { + // successful EXPECT_STRNE + EXPECT_STRNE(p1_++, p2_++); + EXPECT_EQ(s1_ + 1, p1_); + EXPECT_EQ(s2_ + 1, p2_); + + // failed EXPECT_STRCASEEQ + EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++), + "ignoring case"); + EXPECT_EQ(s1_ + 2, p1_); + EXPECT_EQ(s2_ + 2, p2_); +} + +// Tests that when ASSERT_NE fails, it evaluates its arguments exactly +// once. +TEST_F(SingleEvaluationTest, FailedASSERT_NE) { + EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(), + "(a_++) != (b_++)"); + EXPECT_EQ(1, a_); + EXPECT_EQ(1, b_); +} + +// Tests that assertion arguments are evaluated exactly once. +TEST_F(SingleEvaluationTest, OtherCases) { + // successful EXPECT_TRUE + EXPECT_TRUE(0 == a_++); // NOLINT + EXPECT_EQ(1, a_); + + // failed EXPECT_TRUE + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++"); + EXPECT_EQ(2, a_); + + // successful EXPECT_GT + EXPECT_GT(a_++, b_++); + EXPECT_EQ(3, a_); + EXPECT_EQ(1, b_); + + // failed EXPECT_LT + EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)"); + EXPECT_EQ(4, a_); + EXPECT_EQ(2, b_); + + // successful ASSERT_TRUE + ASSERT_TRUE(0 < a_++); // NOLINT + EXPECT_EQ(5, a_); + + // successful ASSERT_GT + ASSERT_GT(a_++, b_++); + EXPECT_EQ(6, a_); + EXPECT_EQ(3, b_); +} + +#if GTEST_HAS_EXCEPTIONS + +void ThrowAnInteger() { + throw 1; +} + +// Tests that assertion arguments are evaluated exactly once. +TEST_F(SingleEvaluationTest, ExceptionTests) { + // successful EXPECT_THROW + EXPECT_THROW({ // NOLINT + a_++; + ThrowAnInteger(); + }, int); + EXPECT_EQ(1, a_); + + // failed EXPECT_THROW, throws different + EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT + a_++; + ThrowAnInteger(); + }, bool), "throws a different type"); + EXPECT_EQ(2, a_); + + // failed EXPECT_THROW, throws nothing + EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing"); + EXPECT_EQ(3, a_); + + // successful EXPECT_NO_THROW + EXPECT_NO_THROW(a_++); + EXPECT_EQ(4, a_); + + // failed EXPECT_NO_THROW + EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT + a_++; + ThrowAnInteger(); + }), "it throws"); + EXPECT_EQ(5, a_); + + // successful EXPECT_ANY_THROW + EXPECT_ANY_THROW({ // NOLINT + a_++; + ThrowAnInteger(); + }); + EXPECT_EQ(6, a_); + + // failed EXPECT_ANY_THROW + EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't"); + EXPECT_EQ(7, a_); +} + +#endif // GTEST_HAS_EXCEPTIONS + +// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE. +class NoFatalFailureTest : public Test { + protected: + void Succeeds() {} + void FailsNonFatal() { + ADD_FAILURE() << "some non-fatal failure"; + } + void Fails() { + FAIL() << "some fatal failure"; + } + + void DoAssertNoFatalFailureOnFails() { + ASSERT_NO_FATAL_FAILURE(Fails()); + ADD_FAILURE() << "shold not reach here."; + } + + void DoExpectNoFatalFailureOnFails() { + EXPECT_NO_FATAL_FAILURE(Fails()); + ADD_FAILURE() << "other failure"; + } +}; + +TEST_F(NoFatalFailureTest, NoFailure) { + EXPECT_NO_FATAL_FAILURE(Succeeds()); + ASSERT_NO_FATAL_FAILURE(Succeeds()); +} + +TEST_F(NoFatalFailureTest, NonFatalIsNoFailure) { + EXPECT_NONFATAL_FAILURE( + EXPECT_NO_FATAL_FAILURE(FailsNonFatal()), + "some non-fatal failure"); + EXPECT_NONFATAL_FAILURE( + ASSERT_NO_FATAL_FAILURE(FailsNonFatal()), + "some non-fatal failure"); +} + +TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) { + TestPartResultArray gtest_failures; + { + ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); + DoAssertNoFatalFailureOnFails(); + } + ASSERT_EQ(2, gtest_failures.size()); + EXPECT_EQ(TestPartResult::kFatalFailure, + gtest_failures.GetTestPartResult(0).type()); + EXPECT_EQ(TestPartResult::kFatalFailure, + gtest_failures.GetTestPartResult(1).type()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", + gtest_failures.GetTestPartResult(0).message()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", + gtest_failures.GetTestPartResult(1).message()); +} + +TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) { + TestPartResultArray gtest_failures; + { + ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); + DoExpectNoFatalFailureOnFails(); + } + ASSERT_EQ(3, gtest_failures.size()); + EXPECT_EQ(TestPartResult::kFatalFailure, + gtest_failures.GetTestPartResult(0).type()); + EXPECT_EQ(TestPartResult::kNonFatalFailure, + gtest_failures.GetTestPartResult(1).type()); + EXPECT_EQ(TestPartResult::kNonFatalFailure, + gtest_failures.GetTestPartResult(2).type()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", + gtest_failures.GetTestPartResult(0).message()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", + gtest_failures.GetTestPartResult(1).message()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure", + gtest_failures.GetTestPartResult(2).message()); +} + +TEST_F(NoFatalFailureTest, MessageIsStreamable) { + TestPartResultArray gtest_failures; + { + ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); + EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message"; + } + ASSERT_EQ(2, gtest_failures.size()); + EXPECT_EQ(TestPartResult::kNonFatalFailure, + gtest_failures.GetTestPartResult(0).type()); + EXPECT_EQ(TestPartResult::kNonFatalFailure, + gtest_failures.GetTestPartResult(1).type()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo", + gtest_failures.GetTestPartResult(0).message()); + EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message", + gtest_failures.GetTestPartResult(1).message()); +} + +// Tests non-string assertions. + +// Tests EqFailure(), used for implementing *EQ* assertions. +TEST(AssertionTest, EqFailure) { + const String foo_val("5"), bar_val("6"); + const String msg1( + EqFailure("foo", "bar", foo_val, bar_val, false) + .failure_message()); + EXPECT_STREQ( + "Value of: bar\n" + " Actual: 6\n" + "Expected: foo\n" + "Which is: 5", + msg1.c_str()); + + const String msg2( + EqFailure("foo", "6", foo_val, bar_val, false) + .failure_message()); + EXPECT_STREQ( + "Value of: 6\n" + "Expected: foo\n" + "Which is: 5", + msg2.c_str()); + + const String msg3( + EqFailure("5", "bar", foo_val, bar_val, false) + .failure_message()); + EXPECT_STREQ( + "Value of: bar\n" + " Actual: 6\n" + "Expected: 5", + msg3.c_str()); + + const String msg4( + EqFailure("5", "6", foo_val, bar_val, false).failure_message()); + EXPECT_STREQ( + "Value of: 6\n" + "Expected: 5", + msg4.c_str()); + + const String msg5( + EqFailure("foo", "bar", + String("\"x\""), String("\"y\""), + true).failure_message()); + EXPECT_STREQ( + "Value of: bar\n" + " Actual: \"y\"\n" + "Expected: foo (ignoring case)\n" + "Which is: \"x\"", + msg5.c_str()); +} + +// Tests AppendUserMessage(), used for implementing the *EQ* macros. +TEST(AssertionTest, AppendUserMessage) { + const String foo("foo"); + + Message msg; + EXPECT_STREQ("foo", + AppendUserMessage(foo, msg).c_str()); + + msg << "bar"; + EXPECT_STREQ("foo\nbar", + AppendUserMessage(foo, msg).c_str()); +} + +#ifdef __BORLANDC__ +// Silences warnings: "Condition is always true", "Unreachable code" +#pragma option push -w-ccc -w-rch +#endif + +// Tests ASSERT_TRUE. +TEST(AssertionTest, ASSERT_TRUE) { + ASSERT_TRUE(2 > 1); // NOLINT + EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1), + "2 < 1"); +} + +// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult. +TEST(AssertionTest, AssertTrueWithAssertionResult) { + ASSERT_TRUE(ResultIsEven(2)); +#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600 + // ICE's in C++Builder 2007. + EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)), + "Value of: ResultIsEven(3)\n" + " Actual: false (3 is odd)\n" + "Expected: true"); +#endif + ASSERT_TRUE(ResultIsEvenNoExplanation(2)); + EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)), + "Value of: ResultIsEvenNoExplanation(3)\n" + " Actual: false (3 is odd)\n" + "Expected: true"); +} + +// Tests ASSERT_FALSE. +TEST(AssertionTest, ASSERT_FALSE) { + ASSERT_FALSE(2 < 1); // NOLINT + EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1), + "Value of: 2 > 1\n" + " Actual: true\n" + "Expected: false"); +} + +// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult. +TEST(AssertionTest, AssertFalseWithAssertionResult) { + ASSERT_FALSE(ResultIsEven(3)); +#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600 + // ICE's in C++Builder 2007. + EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)), + "Value of: ResultIsEven(2)\n" + " Actual: true (2 is even)\n" + "Expected: false"); +#endif + ASSERT_FALSE(ResultIsEvenNoExplanation(3)); + EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)), + "Value of: ResultIsEvenNoExplanation(2)\n" + " Actual: true\n" + "Expected: false"); +} + +#ifdef __BORLANDC__ +// Restores warnings after previous "#pragma option push" supressed them +#pragma option pop +#endif + +// Tests using ASSERT_EQ on double values. The purpose is to make +// sure that the specialization we did for integer and anonymous enums +// isn't used for double arguments. +TEST(ExpectTest, ASSERT_EQ_Double) { + // A success. + ASSERT_EQ(5.6, 5.6); + + // A failure. + EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2), + "5.1"); +} + +// Tests ASSERT_EQ. +TEST(AssertionTest, ASSERT_EQ) { + ASSERT_EQ(5, 2 + 3); + EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3), + "Value of: 2*3\n" + " Actual: 6\n" + "Expected: 5"); +} + +// Tests ASSERT_EQ(NULL, pointer). +#if GTEST_CAN_COMPARE_NULL +TEST(AssertionTest, ASSERT_EQ_NULL) { + // A success. + const char* p = NULL; + // Some older GCC versions may issue a spurious waring in this or the next + // assertion statement. This warning should not be suppressed with + // static_cast since the test verifies the ability to use bare NULL as the + // expected parameter to the macro. + ASSERT_EQ(NULL, p); + + // A failure. + static int n = 0; + EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n), + "Value of: &n\n"); +} +#endif // GTEST_CAN_COMPARE_NULL + +// Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be +// treated as a null pointer by the compiler, we need to make sure +// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as +// ASSERT_EQ(static_cast(NULL), non_pointer). +TEST(ExpectTest, ASSERT_EQ_0) { + int n = 0; + + // A success. + ASSERT_EQ(0, n); + + // A failure. + EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6), + "Expected: 0"); +} + +// Tests ASSERT_NE. +TEST(AssertionTest, ASSERT_NE) { + ASSERT_NE(6, 7); + EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'), + "Expected: ('a') != ('a'), " + "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); +} + +// Tests ASSERT_LE. +TEST(AssertionTest, ASSERT_LE) { + ASSERT_LE(2, 3); + ASSERT_LE(2, 2); + EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0), + "Expected: (2) <= (0), actual: 2 vs 0"); +} + +// Tests ASSERT_LT. +TEST(AssertionTest, ASSERT_LT) { + ASSERT_LT(2, 3); + EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2), + "Expected: (2) < (2), actual: 2 vs 2"); +} + +// Tests ASSERT_GE. +TEST(AssertionTest, ASSERT_GE) { + ASSERT_GE(2, 1); + ASSERT_GE(2, 2); + EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3), + "Expected: (2) >= (3), actual: 2 vs 3"); +} + +// Tests ASSERT_GT. +TEST(AssertionTest, ASSERT_GT) { + ASSERT_GT(2, 1); + EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2), + "Expected: (2) > (2), actual: 2 vs 2"); +} + +#if GTEST_HAS_EXCEPTIONS + +void ThrowNothing() {} + +// Tests ASSERT_THROW. +TEST(AssertionTest, ASSERT_THROW) { + ASSERT_THROW(ThrowAnInteger(), int); + +#ifndef __BORLANDC__ + // ICE's in C++Builder 2007 and 2009. + EXPECT_FATAL_FAILURE( + ASSERT_THROW(ThrowAnInteger(), bool), + "Expected: ThrowAnInteger() throws an exception of type bool.\n" + " Actual: it throws a different type."); +#endif + + EXPECT_FATAL_FAILURE( + ASSERT_THROW(ThrowNothing(), bool), + "Expected: ThrowNothing() throws an exception of type bool.\n" + " Actual: it throws nothing."); +} + +// Tests ASSERT_NO_THROW. +TEST(AssertionTest, ASSERT_NO_THROW) { + ASSERT_NO_THROW(ThrowNothing()); + EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()), + "Expected: ThrowAnInteger() doesn't throw an exception." + "\n Actual: it throws."); +} + +// Tests ASSERT_ANY_THROW. +TEST(AssertionTest, ASSERT_ANY_THROW) { + ASSERT_ANY_THROW(ThrowAnInteger()); + EXPECT_FATAL_FAILURE( + ASSERT_ANY_THROW(ThrowNothing()), + "Expected: ThrowNothing() throws an exception.\n" + " Actual: it doesn't."); +} + +#endif // GTEST_HAS_EXCEPTIONS + +// Makes sure we deal with the precedence of <<. This test should +// compile. +TEST(AssertionTest, AssertPrecedence) { + ASSERT_EQ(1 < 2, true); + ASSERT_EQ(true && false, false); +} + +// A subroutine used by the following test. +void TestEq1(int x) { + ASSERT_EQ(1, x); +} + +// Tests calling a test subroutine that's not part of a fixture. +TEST(AssertionTest, NonFixtureSubroutine) { + EXPECT_FATAL_FAILURE(TestEq1(2), + "Value of: x"); +} + +// An uncopyable class. +class Uncopyable { + public: + explicit Uncopyable(int a_value) : value_(a_value) {} + + int value() const { return value_; } + bool operator==(const Uncopyable& rhs) const { + return value() == rhs.value(); + } + private: + // This constructor deliberately has no implementation, as we don't + // want this class to be copyable. + Uncopyable(const Uncopyable&); // NOLINT + + int value_; +}; + +::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) { + return os << value.value(); +} + + +bool IsPositiveUncopyable(const Uncopyable& x) { + return x.value() > 0; +} + +// A subroutine used by the following test. +void TestAssertNonPositive() { + Uncopyable y(-1); + ASSERT_PRED1(IsPositiveUncopyable, y); +} +// A subroutine used by the following test. +void TestAssertEqualsUncopyable() { + Uncopyable x(5); + Uncopyable y(-1); + ASSERT_EQ(x, y); +} + +// Tests that uncopyable objects can be used in assertions. +TEST(AssertionTest, AssertWorksWithUncopyableObject) { + Uncopyable x(5); + ASSERT_PRED1(IsPositiveUncopyable, x); + ASSERT_EQ(x, x); + EXPECT_FATAL_FAILURE(TestAssertNonPositive(), + "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); + EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(), + "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); +} + +// Tests that uncopyable objects can be used in expects. +TEST(AssertionTest, ExpectWorksWithUncopyableObject) { + Uncopyable x(5); + EXPECT_PRED1(IsPositiveUncopyable, x); + Uncopyable y(-1); + EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y), + "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); + EXPECT_EQ(x, x); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), + "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); +} + + +// The version of gcc used in XCode 2.2 has a bug and doesn't allow +// anonymous enums in assertions. Therefore the following test is not +// done on Mac. +// Sun Studio also rejects this code. +#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) + +// Tests using assertions with anonymous enums. +enum { + CASE_A = -1, +#if GTEST_OS_LINUX + // We want to test the case where the size of the anonymous enum is + // larger than sizeof(int), to make sure our implementation of the + // assertions doesn't truncate the enums. However, MSVC + // (incorrectly) doesn't allow an enum value to exceed the range of + // an int, so this has to be conditionally compiled. + // + // On Linux, CASE_B and CASE_A have the same value when truncated to + // int size. We want to test whether this will confuse the + // assertions. + CASE_B = testing::internal::kMaxBiggestInt, +#else + CASE_B = INT_MAX, +#endif // GTEST_OS_LINUX +}; + +TEST(AssertionTest, AnonymousEnum) { +#if GTEST_OS_LINUX + EXPECT_EQ(static_cast(CASE_A), static_cast(CASE_B)); +#endif // GTEST_OS_LINUX + + EXPECT_EQ(CASE_A, CASE_A); + EXPECT_NE(CASE_A, CASE_B); + EXPECT_LT(CASE_A, CASE_B); + EXPECT_LE(CASE_A, CASE_B); + EXPECT_GT(CASE_B, CASE_A); + EXPECT_GE(CASE_A, CASE_A); + EXPECT_NONFATAL_FAILURE(EXPECT_GE(CASE_A, CASE_B), + "(CASE_A) >= (CASE_B)"); + + ASSERT_EQ(CASE_A, CASE_A); + ASSERT_NE(CASE_A, CASE_B); + ASSERT_LT(CASE_A, CASE_B); + ASSERT_LE(CASE_A, CASE_B); + ASSERT_GT(CASE_B, CASE_A); + ASSERT_GE(CASE_A, CASE_A); + EXPECT_FATAL_FAILURE(ASSERT_EQ(CASE_A, CASE_B), + "Value of: CASE_B"); +} + +#endif // !GTEST_OS_MAC && !defined(__SUNPRO_CC) + +#if GTEST_OS_WINDOWS + +static HRESULT UnexpectedHRESULTFailure() { + return E_UNEXPECTED; +} + +static HRESULT OkHRESULTSuccess() { + return S_OK; +} + +static HRESULT FalseHRESULTSuccess() { + return S_FALSE; +} + +// HRESULT assertion tests test both zero and non-zero +// success codes as well as failure message for each. +// +// Windows CE doesn't support message texts. +TEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) { + EXPECT_HRESULT_SUCCEEDED(S_OK); + EXPECT_HRESULT_SUCCEEDED(S_FALSE); + + EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), + "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" + " Actual: 0x8000FFFF"); +} + +TEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) { + ASSERT_HRESULT_SUCCEEDED(S_OK); + ASSERT_HRESULT_SUCCEEDED(S_FALSE); + + EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), + "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" + " Actual: 0x8000FFFF"); +} + +TEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) { + EXPECT_HRESULT_FAILED(E_UNEXPECTED); + + EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()), + "Expected: (OkHRESULTSuccess()) fails.\n" + " Actual: 0x00000000"); + EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()), + "Expected: (FalseHRESULTSuccess()) fails.\n" + " Actual: 0x00000001"); +} + +TEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) { + ASSERT_HRESULT_FAILED(E_UNEXPECTED); + +#ifndef __BORLANDC__ + // ICE's in C++Builder 2007 and 2009. + EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()), + "Expected: (OkHRESULTSuccess()) fails.\n" + " Actual: 0x00000000"); +#endif + EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()), + "Expected: (FalseHRESULTSuccess()) fails.\n" + " Actual: 0x00000001"); +} + +// Tests that streaming to the HRESULT macros works. +TEST(HRESULTAssertionTest, Streaming) { + EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; + ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; + EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; + ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; + + EXPECT_NONFATAL_FAILURE( + EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", + "expected failure"); + +#ifndef __BORLANDC__ + // ICE's in C++Builder 2007 and 2009. + EXPECT_FATAL_FAILURE( + ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", + "expected failure"); +#endif + + EXPECT_NONFATAL_FAILURE( + EXPECT_HRESULT_FAILED(S_OK) << "expected failure", + "expected failure"); + + EXPECT_FATAL_FAILURE( + ASSERT_HRESULT_FAILED(S_OK) << "expected failure", + "expected failure"); +} + +#endif // GTEST_OS_WINDOWS + +#ifdef __BORLANDC__ +// Silences warnings: "Condition is always true", "Unreachable code" +#pragma option push -w-ccc -w-rch +#endif + +// Tests that the assertion macros behave like single statements. +TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) { + if (AlwaysFalse()) + ASSERT_TRUE(false) << "This should never be executed; " + "It's a compilation test only."; + + if (AlwaysTrue()) + EXPECT_FALSE(false); + else + ; // NOLINT + + if (AlwaysFalse()) + ASSERT_LT(1, 3); + + if (AlwaysFalse()) + ; // NOLINT + else + EXPECT_GT(3, 2) << ""; +} + +#if GTEST_HAS_EXCEPTIONS +// Tests that the compiler will not complain about unreachable code in the +// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros. +TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) { + int n = 0; + + EXPECT_THROW(throw 1, int); + EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), ""); + EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), ""); + EXPECT_NO_THROW(n++); + EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), ""); + EXPECT_ANY_THROW(throw 1); + EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), ""); +} + +TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) { + if (AlwaysFalse()) + EXPECT_THROW(ThrowNothing(), bool); + + if (AlwaysTrue()) + EXPECT_THROW(ThrowAnInteger(), int); + else + ; // NOLINT + + if (AlwaysFalse()) + EXPECT_NO_THROW(ThrowAnInteger()); + + if (AlwaysTrue()) + EXPECT_NO_THROW(ThrowNothing()); + else + ; // NOLINT + + if (AlwaysFalse()) + EXPECT_ANY_THROW(ThrowNothing()); + + if (AlwaysTrue()) + EXPECT_ANY_THROW(ThrowAnInteger()); + else + ; // NOLINT +} +#endif // GTEST_HAS_EXCEPTIONS + +TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) { + if (AlwaysFalse()) + EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. " + << "It's a compilation test only."; + else + ; // NOLINT + + if (AlwaysFalse()) + ASSERT_NO_FATAL_FAILURE(FAIL()) << ""; + else + ; // NOLINT + + if (AlwaysTrue()) + EXPECT_NO_FATAL_FAILURE(SUCCEED()); + else + ; // NOLINT + + if (AlwaysFalse()) + ; // NOLINT + else + ASSERT_NO_FATAL_FAILURE(SUCCEED()); +} + +// Tests that the assertion macros work well with switch statements. +TEST(AssertionSyntaxTest, WorksWithSwitch) { + switch (0) { + case 1: + break; + default: + ASSERT_TRUE(true); + } + + switch (0) + case 0: + EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case"; + + // Binary assertions are implemented using a different code path + // than the Boolean assertions. Hence we test them separately. + switch (0) { + case 1: + default: + ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler"; + } + + switch (0) + case 0: + EXPECT_NE(1, 2); +} + +#if GTEST_HAS_EXCEPTIONS + +void ThrowAString() { + throw "String"; +} + +// Test that the exception assertion macros compile and work with const +// type qualifier. +TEST(AssertionSyntaxTest, WorksWithConst) { + ASSERT_THROW(ThrowAString(), const char*); + + EXPECT_THROW(ThrowAString(), const char*); +} + +#endif // GTEST_HAS_EXCEPTIONS + +} // namespace + +namespace testing { + +// Tests that Google Test tracks SUCCEED*. +TEST(SuccessfulAssertionTest, SUCCEED) { + SUCCEED(); + SUCCEED() << "OK"; + EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +// Tests that Google Test doesn't track successful EXPECT_*. +TEST(SuccessfulAssertionTest, EXPECT) { + EXPECT_TRUE(true); + EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +// Tests that Google Test doesn't track successful EXPECT_STR*. +TEST(SuccessfulAssertionTest, EXPECT_STR) { + EXPECT_STREQ("", ""); + EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +// Tests that Google Test doesn't track successful ASSERT_*. +TEST(SuccessfulAssertionTest, ASSERT) { + ASSERT_TRUE(true); + EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +// Tests that Google Test doesn't track successful ASSERT_STR*. +TEST(SuccessfulAssertionTest, ASSERT_STR) { + ASSERT_STREQ("", ""); + EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); +} + +} // namespace testing + +namespace { + +// Tests EXPECT_TRUE. +TEST(ExpectTest, EXPECT_TRUE) { + EXPECT_TRUE(2 > 1); // NOLINT + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1), + "Value of: 2 < 1\n" + " Actual: false\n" + "Expected: true"); + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3), + "2 > 3"); +} + +// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult. +TEST(ExpectTest, ExpectTrueWithAssertionResult) { + EXPECT_TRUE(ResultIsEven(2)); + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)), + "Value of: ResultIsEven(3)\n" + " Actual: false (3 is odd)\n" + "Expected: true"); + EXPECT_TRUE(ResultIsEvenNoExplanation(2)); + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)), + "Value of: ResultIsEvenNoExplanation(3)\n" + " Actual: false (3 is odd)\n" + "Expected: true"); +} + +// Tests EXPECT_FALSE. +TEST(ExpectTest, EXPECT_FALSE) { + EXPECT_FALSE(2 < 1); // NOLINT + EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1), + "Value of: 2 > 1\n" + " Actual: true\n" + "Expected: false"); + EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3), + "2 < 3"); +} + +// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult. +TEST(ExpectTest, ExpectFalseWithAssertionResult) { + EXPECT_FALSE(ResultIsEven(3)); + EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)), + "Value of: ResultIsEven(2)\n" + " Actual: true (2 is even)\n" + "Expected: false"); + EXPECT_FALSE(ResultIsEvenNoExplanation(3)); + EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)), + "Value of: ResultIsEvenNoExplanation(2)\n" + " Actual: true\n" + "Expected: false"); +} + +#ifdef __BORLANDC__ +// Restores warnings after previous "#pragma option push" supressed them +#pragma option pop +#endif + +// Tests EXPECT_EQ. +TEST(ExpectTest, EXPECT_EQ) { + EXPECT_EQ(5, 2 + 3); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3), + "Value of: 2*3\n" + " Actual: 6\n" + "Expected: 5"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3), + "2 - 3"); +} + +// Tests using EXPECT_EQ on double values. The purpose is to make +// sure that the specialization we did for integer and anonymous enums +// isn't used for double arguments. +TEST(ExpectTest, EXPECT_EQ_Double) { + // A success. + EXPECT_EQ(5.6, 5.6); + + // A failure. + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2), + "5.1"); +} + +#if GTEST_CAN_COMPARE_NULL +// Tests EXPECT_EQ(NULL, pointer). +TEST(ExpectTest, EXPECT_EQ_NULL) { + // A success. + const char* p = NULL; + // Some older GCC versions may issue a spurious waring in this or the next + // assertion statement. This warning should not be suppressed with + // static_cast since the test verifies the ability to use bare NULL as the + // expected parameter to the macro. + EXPECT_EQ(NULL, p); + + // A failure. + int n = 0; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n), + "Value of: &n\n"); +} +#endif // GTEST_CAN_COMPARE_NULL + +// Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be +// treated as a null pointer by the compiler, we need to make sure +// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as +// EXPECT_EQ(static_cast(NULL), non_pointer). +TEST(ExpectTest, EXPECT_EQ_0) { + int n = 0; + + // A success. + EXPECT_EQ(0, n); + + // A failure. + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6), + "Expected: 0"); +} + +// Tests EXPECT_NE. +TEST(ExpectTest, EXPECT_NE) { + EXPECT_NE(6, 7); + + EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'), + "Expected: ('a') != ('a'), " + "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); + EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2), + "2"); + char* const p0 = NULL; + EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0), + "p0"); + // Only way to get the Nokia compiler to compile the cast + // is to have a separate void* variable first. Putting + // the two casts on the same line doesn't work, neither does + // a direct C-style to char*. + void* pv1 = (void*)0x1234; // NOLINT + char* const p1 = reinterpret_cast(pv1); + EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1), + "p1"); +} + +// Tests EXPECT_LE. +TEST(ExpectTest, EXPECT_LE) { + EXPECT_LE(2, 3); + EXPECT_LE(2, 2); + EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0), + "Expected: (2) <= (0), actual: 2 vs 0"); + EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9), + "(1.1) <= (0.9)"); +} + +// Tests EXPECT_LT. +TEST(ExpectTest, EXPECT_LT) { + EXPECT_LT(2, 3); + EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2), + "Expected: (2) < (2), actual: 2 vs 2"); + EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1), + "(2) < (1)"); +} + +// Tests EXPECT_GE. +TEST(ExpectTest, EXPECT_GE) { + EXPECT_GE(2, 1); + EXPECT_GE(2, 2); + EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3), + "Expected: (2) >= (3), actual: 2 vs 3"); + EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1), + "(0.9) >= (1.1)"); +} + +// Tests EXPECT_GT. +TEST(ExpectTest, EXPECT_GT) { + EXPECT_GT(2, 1); + EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2), + "Expected: (2) > (2), actual: 2 vs 2"); + EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3), + "(2) > (3)"); +} + +#if GTEST_HAS_EXCEPTIONS + +// Tests EXPECT_THROW. +TEST(ExpectTest, EXPECT_THROW) { + EXPECT_THROW(ThrowAnInteger(), int); + EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool), + "Expected: ThrowAnInteger() throws an exception of " + "type bool.\n Actual: it throws a different type."); + EXPECT_NONFATAL_FAILURE( + EXPECT_THROW(ThrowNothing(), bool), + "Expected: ThrowNothing() throws an exception of type bool.\n" + " Actual: it throws nothing."); +} + +// Tests EXPECT_NO_THROW. +TEST(ExpectTest, EXPECT_NO_THROW) { + EXPECT_NO_THROW(ThrowNothing()); + EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()), + "Expected: ThrowAnInteger() doesn't throw an " + "exception.\n Actual: it throws."); +} + +// Tests EXPECT_ANY_THROW. +TEST(ExpectTest, EXPECT_ANY_THROW) { + EXPECT_ANY_THROW(ThrowAnInteger()); + EXPECT_NONFATAL_FAILURE( + EXPECT_ANY_THROW(ThrowNothing()), + "Expected: ThrowNothing() throws an exception.\n" + " Actual: it doesn't."); +} + +#endif // GTEST_HAS_EXCEPTIONS + +// Make sure we deal with the precedence of <<. +TEST(ExpectTest, ExpectPrecedence) { + EXPECT_EQ(1 < 2, true); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false), + "Value of: true && false"); +} + + +// Tests the StreamableToString() function. + +// Tests using StreamableToString() on a scalar. +TEST(StreamableToStringTest, Scalar) { + EXPECT_STREQ("5", StreamableToString(5).c_str()); +} + +// Tests using StreamableToString() on a non-char pointer. +TEST(StreamableToStringTest, Pointer) { + int n = 0; + int* p = &n; + EXPECT_STRNE("(null)", StreamableToString(p).c_str()); +} + +// Tests using StreamableToString() on a NULL non-char pointer. +TEST(StreamableToStringTest, NullPointer) { + int* p = NULL; + EXPECT_STREQ("(null)", StreamableToString(p).c_str()); +} + +// Tests using StreamableToString() on a C string. +TEST(StreamableToStringTest, CString) { + EXPECT_STREQ("Foo", StreamableToString("Foo").c_str()); +} + +// Tests using StreamableToString() on a NULL C string. +TEST(StreamableToStringTest, NullCString) { + char* p = NULL; + EXPECT_STREQ("(null)", StreamableToString(p).c_str()); +} + +// Tests using streamable values as assertion messages. + +// Tests using std::string as an assertion message. +TEST(StreamableTest, string) { + static const std::string str( + "This failure message is a std::string, and is expected."); + EXPECT_FATAL_FAILURE(FAIL() << str, + str.c_str()); +} + +// Tests that we can output strings containing embedded NULs. +// Limited to Linux because we can only do this with std::string's. +TEST(StreamableTest, stringWithEmbeddedNUL) { + static const char char_array_with_nul[] = + "Here's a NUL\0 and some more string"; + static const std::string string_with_nul(char_array_with_nul, + sizeof(char_array_with_nul) + - 1); // drops the trailing NUL + EXPECT_FATAL_FAILURE(FAIL() << string_with_nul, + "Here's a NUL\\0 and some more string"); +} + +// Tests that we can output a NUL char. +TEST(StreamableTest, NULChar) { + EXPECT_FATAL_FAILURE({ // NOLINT + FAIL() << "A NUL" << '\0' << " and some more string"; + }, "A NUL\\0 and some more string"); +} + +// Tests using int as an assertion message. +TEST(StreamableTest, int) { + EXPECT_FATAL_FAILURE(FAIL() << 900913, + "900913"); +} + +// Tests using NULL char pointer as an assertion message. +// +// In MSVC, streaming a NULL char * causes access violation. Google Test +// implemented a workaround (substituting "(null)" for NULL). This +// tests whether the workaround works. +TEST(StreamableTest, NullCharPtr) { + EXPECT_FATAL_FAILURE(FAIL() << static_cast(NULL), + "(null)"); +} + +// Tests that basic IO manipulators (endl, ends, and flush) can be +// streamed to testing::Message. +TEST(StreamableTest, BasicIoManip) { + EXPECT_FATAL_FAILURE({ // NOLINT + FAIL() << "Line 1." << std::endl + << "A NUL char " << std::ends << std::flush << " in line 2."; + }, "Line 1.\nA NUL char \\0 in line 2."); +} + +// Tests the macros that haven't been covered so far. + +void AddFailureHelper(bool* aborted) { + *aborted = true; + ADD_FAILURE() << "Failure"; + *aborted = false; +} + +// Tests ADD_FAILURE. +TEST(MacroTest, ADD_FAILURE) { + bool aborted = true; + EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted), + "Failure"); + EXPECT_FALSE(aborted); +} + +// Tests FAIL. +TEST(MacroTest, FAIL) { + EXPECT_FATAL_FAILURE(FAIL(), + "Failed"); + EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.", + "Intentional failure."); +} + +// Tests SUCCEED +TEST(MacroTest, SUCCEED) { + SUCCEED(); + SUCCEED() << "Explicit success."; +} + + +// Tests for EXPECT_EQ() and ASSERT_EQ(). +// +// These tests fail *intentionally*, s.t. the failure messages can be +// generated and tested. +// +// We have different tests for different argument types. + +// Tests using bool values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, Bool) { + EXPECT_EQ(true, true); + EXPECT_FATAL_FAILURE(ASSERT_EQ(false, true), + "Value of: true"); +} + +// Tests using int values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, Int) { + ASSERT_EQ(32, 32); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33), + "33"); +} + +// Tests using time_t values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, Time_T) { + EXPECT_EQ(static_cast(0), + static_cast(0)); + EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast(0), + static_cast(1234)), + "1234"); +} + +// Tests using char values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, Char) { + ASSERT_EQ('z', 'z'); + const char ch = 'b'; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch), + "ch"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch), + "ch"); +} + +// Tests using wchar_t values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, WideChar) { + EXPECT_EQ(L'b', L'b'); + + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'), + "Value of: L'x'\n" + " Actual: L'x' (120, 0x78)\n" + "Expected: L'\0'\n" + "Which is: L'\0' (0, 0x0)"); + + static wchar_t wchar; + wchar = L'b'; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar), + "wchar"); + wchar = L'\x8119'; + EXPECT_FATAL_FAILURE(ASSERT_EQ(L'\x8120', wchar), + "Value of: wchar"); +} + +// Tests using ::std::string values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, StdString) { + // Compares a const char* to an std::string that has identical + // content. + ASSERT_EQ("Test", ::std::string("Test")); + + // Compares two identical std::strings. + static const ::std::string str1("A * in the middle"); + static const ::std::string str2(str1); + EXPECT_EQ(str1, str2); + + // Compares a const char* to an std::string that has different + // content + EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")), + "::std::string(\"test\")"); + + // Compares an std::string to a char* that has different content. + char* const p1 = const_cast("foo"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1), + "p1"); + + // Compares two std::strings that have different contents, one of + // which having a NUL character in the middle. This should fail. + static ::std::string str3(str1); + str3.at(2) = '\0'; + EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3), + "Value of: str3\n" + " Actual: \"A \\0 in the middle\""); +} + +#if GTEST_HAS_STD_WSTRING + +// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, StdWideString) { + // Compares an std::wstring to a const wchar_t* that has identical + // content. + EXPECT_EQ(::std::wstring(L"Test\x8119"), L"Test\x8119"); + + // Compares two identical std::wstrings. + const ::std::wstring wstr1(L"A * in the middle"); + const ::std::wstring wstr2(wstr1); + ASSERT_EQ(wstr1, wstr2); + + // Compares an std::wstring to a const wchar_t* that has different + // content. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_EQ(::std::wstring(L"Test\x8119"), L"Test\x8120"); + }, "L\"Test\\x8120\""); + + // Compares two std::wstrings that have different contents, one of + // which having a NUL character in the middle. + ::std::wstring wstr3(wstr1); + wstr3.at(2) = L'\0'; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3), + "wstr3"); + + // Compares a wchar_t* to an std::wstring that has different + // content. + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_EQ(const_cast(L"foo"), ::std::wstring(L"bar")); + }, ""); +} + +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_STRING +// Tests using ::string values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, GlobalString) { + // Compares a const char* to a ::string that has identical content. + EXPECT_EQ("Test", ::string("Test")); + + // Compares two identical ::strings. + const ::string str1("A * in the middle"); + const ::string str2(str1); + ASSERT_EQ(str1, str2); + + // Compares a ::string to a const char* that has different content. + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"), + "test"); + + // Compares two ::strings that have different contents, one of which + // having a NUL character in the middle. + ::string str3(str1); + str3.at(2) = '\0'; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3), + "str3"); + + // Compares a ::string to a char* that has different content. + EXPECT_FATAL_FAILURE({ // NOLINT + ASSERT_EQ(::string("bar"), const_cast("foo")); + }, ""); +} + +#endif // GTEST_HAS_GLOBAL_STRING + +#if GTEST_HAS_GLOBAL_WSTRING + +// Tests using ::wstring values in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, GlobalWideString) { + // Compares a const wchar_t* to a ::wstring that has identical content. + ASSERT_EQ(L"Test\x8119", ::wstring(L"Test\x8119")); + + // Compares two identical ::wstrings. + static const ::wstring wstr1(L"A * in the middle"); + static const ::wstring wstr2(wstr1); + EXPECT_EQ(wstr1, wstr2); + + // Compares a const wchar_t* to a ::wstring that has different + // content. + EXPECT_NONFATAL_FAILURE({ // NOLINT + EXPECT_EQ(L"Test\x8120", ::wstring(L"Test\x8119")); + }, "Test\\x8119"); + + // Compares a wchar_t* to a ::wstring that has different content. + wchar_t* const p1 = const_cast(L"foo"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")), + "bar"); + + // Compares two ::wstrings that have different contents, one of which + // having a NUL character in the middle. + static ::wstring wstr3; + wstr3 = wstr1; + wstr3.at(2) = L'\0'; + EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3), + "wstr3"); +} + +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Tests using char pointers in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, CharPointer) { + char* const p0 = NULL; + // Only way to get the Nokia compiler to compile the cast + // is to have a separate void* variable first. Putting + // the two casts on the same line doesn't work, neither does + // a direct C-style to char*. + void* pv1 = (void*)0x1234; // NOLINT + void* pv2 = (void*)0xABC0; // NOLINT + char* const p1 = reinterpret_cast(pv1); + char* const p2 = reinterpret_cast(pv2); + ASSERT_EQ(p1, p1); + + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), + "Value of: p2"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), + "p2"); + EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast(0x1234), + reinterpret_cast(0xABC0)), + "ABC0"); +} + +// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, WideCharPointer) { + wchar_t* const p0 = NULL; + // Only way to get the Nokia compiler to compile the cast + // is to have a separate void* variable first. Putting + // the two casts on the same line doesn't work, neither does + // a direct C-style to char*. + void* pv1 = (void*)0x1234; // NOLINT + void* pv2 = (void*)0xABC0; // NOLINT + wchar_t* const p1 = reinterpret_cast(pv1); + wchar_t* const p2 = reinterpret_cast(pv2); + EXPECT_EQ(p0, p0); + + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), + "Value of: p2"); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), + "p2"); + void* pv3 = (void*)0x1234; // NOLINT + void* pv4 = (void*)0xABC0; // NOLINT + const wchar_t* p3 = reinterpret_cast(pv3); + const wchar_t* p4 = reinterpret_cast(pv4); + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4), + "p4"); +} + +// Tests using other types of pointers in {EXPECT|ASSERT}_EQ. +TEST(EqAssertionTest, OtherPointer) { + ASSERT_EQ(static_cast(NULL), + static_cast(NULL)); + EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast(NULL), + reinterpret_cast(0x1234)), + "0x1234"); +} + +// Tests the FRIEND_TEST macro. + +// This class has a private member we want to test. We will test it +// both in a TEST and in a TEST_F. +class Foo { + public: + Foo() {} + + private: + int Bar() const { return 1; } + + // Declares the friend tests that can access the private member + // Bar(). + FRIEND_TEST(FRIEND_TEST_Test, TEST); + FRIEND_TEST(FRIEND_TEST_Test2, TEST_F); +}; + +// Tests that the FRIEND_TEST declaration allows a TEST to access a +// class's private members. This should compile. +TEST(FRIEND_TEST_Test, TEST) { + ASSERT_EQ(1, Foo().Bar()); +} + +// The fixture needed to test using FRIEND_TEST with TEST_F. +class FRIEND_TEST_Test2 : public Test { + protected: + Foo foo; +}; + +// Tests that the FRIEND_TEST declaration allows a TEST_F to access a +// class's private members. This should compile. +TEST_F(FRIEND_TEST_Test2, TEST_F) { + ASSERT_EQ(1, foo.Bar()); +} + +// Tests the life cycle of Test objects. + +// The test fixture for testing the life cycle of Test objects. +// +// This class counts the number of live test objects that uses this +// fixture. +class TestLifeCycleTest : public Test { + protected: + // Constructor. Increments the number of test objects that uses + // this fixture. + TestLifeCycleTest() { count_++; } + + // Destructor. Decrements the number of test objects that uses this + // fixture. + ~TestLifeCycleTest() { count_--; } + + // Returns the number of live test objects that uses this fixture. + int count() const { return count_; } + + private: + static int count_; +}; + +int TestLifeCycleTest::count_ = 0; + +// Tests the life cycle of test objects. +TEST_F(TestLifeCycleTest, Test1) { + // There should be only one test object in this test case that's + // currently alive. + ASSERT_EQ(1, count()); +} + +// Tests the life cycle of test objects. +TEST_F(TestLifeCycleTest, Test2) { + // After Test1 is done and Test2 is started, there should still be + // only one live test object, as the object for Test1 should've been + // deleted. + ASSERT_EQ(1, count()); +} + +} // namespace + +// Tests that the copy constructor works when it is NOT optimized away by +// the compiler. +TEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) { + // Checks that the copy constructor doesn't try to dereference NULL pointers + // in the source object. + AssertionResult r1 = AssertionSuccess(); + AssertionResult r2 = r1; + // The following line is added to prevent the compiler from optimizing + // away the constructor call. + r1 << "abc"; + + AssertionResult r3 = r1; + EXPECT_EQ(static_cast(r3), static_cast(r1)); + EXPECT_STREQ("abc", r1.message()); +} + +// Tests that AssertionSuccess and AssertionFailure construct +// AssertionResult objects as expected. +TEST(AssertionResultTest, ConstructionWorks) { + AssertionResult r1 = AssertionSuccess(); + EXPECT_TRUE(r1); + EXPECT_STREQ("", r1.message()); + + AssertionResult r2 = AssertionSuccess() << "abc"; + EXPECT_TRUE(r2); + EXPECT_STREQ("abc", r2.message()); + + AssertionResult r3 = AssertionFailure(); + EXPECT_FALSE(r3); + EXPECT_STREQ("", r3.message()); + + AssertionResult r4 = AssertionFailure() << "def"; + EXPECT_FALSE(r4); + EXPECT_STREQ("def", r4.message()); + + AssertionResult r5 = AssertionFailure(Message() << "ghi"); + EXPECT_FALSE(r5); + EXPECT_STREQ("ghi", r5.message()); +} + +// Tests that the negation fips the predicate result but keeps the message. +TEST(AssertionResultTest, NegationWorks) { + AssertionResult r1 = AssertionSuccess() << "abc"; + EXPECT_FALSE(!r1); + EXPECT_STREQ("abc", (!r1).message()); + + AssertionResult r2 = AssertionFailure() << "def"; + EXPECT_TRUE(!r2); + EXPECT_STREQ("def", (!r2).message()); +} + +TEST(AssertionResultTest, StreamingWorks) { + AssertionResult r = AssertionSuccess(); + r << "abc" << 'd' << 0 << true; + EXPECT_STREQ("abcd0true", r.message()); +} + +// Tests streaming a user type whose definition and operator << are +// both in the global namespace. +class Base { + public: + explicit Base(int an_x) : x_(an_x) {} + int x() const { return x_; } + private: + int x_; +}; +std::ostream& operator<<(std::ostream& os, + const Base& val) { + return os << val.x(); +} +std::ostream& operator<<(std::ostream& os, + const Base* pointer) { + return os << "(" << pointer->x() << ")"; +} + +TEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) { + Message msg; + Base a(1); + + msg << a << &a; // Uses ::operator<<. + EXPECT_STREQ("1(1)", msg.GetString().c_str()); +} + +// Tests streaming a user type whose definition and operator<< are +// both in an unnamed namespace. +namespace { +class MyTypeInUnnamedNameSpace : public Base { + public: + explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {} +}; +std::ostream& operator<<(std::ostream& os, + const MyTypeInUnnamedNameSpace& val) { + return os << val.x(); +} +std::ostream& operator<<(std::ostream& os, + const MyTypeInUnnamedNameSpace* pointer) { + return os << "(" << pointer->x() << ")"; +} +} // namespace + +TEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) { + Message msg; + MyTypeInUnnamedNameSpace a(1); + + msg << a << &a; // Uses ::operator<<. + EXPECT_STREQ("1(1)", msg.GetString().c_str()); +} + +// Tests streaming a user type whose definition and operator<< are +// both in a user namespace. +namespace namespace1 { +class MyTypeInNameSpace1 : public Base { + public: + explicit MyTypeInNameSpace1(int an_x): Base(an_x) {} +}; +std::ostream& operator<<(std::ostream& os, + const MyTypeInNameSpace1& val) { + return os << val.x(); +} +std::ostream& operator<<(std::ostream& os, + const MyTypeInNameSpace1* pointer) { + return os << "(" << pointer->x() << ")"; +} +} // namespace namespace1 + +TEST(MessageTest, CanStreamUserTypeInUserNameSpace) { + Message msg; + namespace1::MyTypeInNameSpace1 a(1); + + msg << a << &a; // Uses namespace1::operator<<. + EXPECT_STREQ("1(1)", msg.GetString().c_str()); +} + +// Tests streaming a user type whose definition is in a user namespace +// but whose operator<< is in the global namespace. +namespace namespace2 { +class MyTypeInNameSpace2 : public ::Base { + public: + explicit MyTypeInNameSpace2(int an_x): Base(an_x) {} +}; +} // namespace namespace2 +std::ostream& operator<<(std::ostream& os, + const namespace2::MyTypeInNameSpace2& val) { + return os << val.x(); +} +std::ostream& operator<<(std::ostream& os, + const namespace2::MyTypeInNameSpace2* pointer) { + return os << "(" << pointer->x() << ")"; +} + +TEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) { + Message msg; + namespace2::MyTypeInNameSpace2 a(1); + + msg << a << &a; // Uses ::operator<<. + EXPECT_STREQ("1(1)", msg.GetString().c_str()); +} + +// Tests streaming NULL pointers to testing::Message. +TEST(MessageTest, NullPointers) { + Message msg; + char* const p1 = NULL; + unsigned char* const p2 = NULL; + int* p3 = NULL; + double* p4 = NULL; + bool* p5 = NULL; + Message* p6 = NULL; + + msg << p1 << p2 << p3 << p4 << p5 << p6; + ASSERT_STREQ("(null)(null)(null)(null)(null)(null)", + msg.GetString().c_str()); +} + +// Tests streaming wide strings to testing::Message. +TEST(MessageTest, WideStrings) { + // Streams a NULL of type const wchar_t*. + const wchar_t* const_wstr = NULL; + EXPECT_STREQ("(null)", + (Message() << const_wstr).GetString().c_str()); + + // Streams a NULL of type wchar_t*. + wchar_t* wstr = NULL; + EXPECT_STREQ("(null)", + (Message() << wstr).GetString().c_str()); + + // Streams a non-NULL of type const wchar_t*. + const_wstr = L"abc\x8119"; + EXPECT_STREQ("abc\xe8\x84\x99", + (Message() << const_wstr).GetString().c_str()); + + // Streams a non-NULL of type wchar_t*. + wstr = const_cast(const_wstr); + EXPECT_STREQ("abc\xe8\x84\x99", + (Message() << wstr).GetString().c_str()); +} + + +// This line tests that we can define tests in the testing namespace. +namespace testing { + +// Tests the TestInfo class. + +class TestInfoTest : public Test { + protected: + static const TestInfo* GetTestInfo(const char* test_name) { + const TestCase* const test_case = GetUnitTestImpl()-> + GetTestCase("TestInfoTest", "", NULL, NULL); + + for (int i = 0; i < test_case->total_test_count(); ++i) { + const TestInfo* const test_info = test_case->GetTestInfo(i); + if (strcmp(test_name, test_info->name()) == 0) + return test_info; + } + return NULL; + } + + static const TestResult* GetTestResult( + const TestInfo* test_info) { + return test_info->result(); + } +}; + +// Tests TestInfo::test_case_name() and TestInfo::name(). +TEST_F(TestInfoTest, Names) { + const TestInfo* const test_info = GetTestInfo("Names"); + + ASSERT_STREQ("TestInfoTest", test_info->test_case_name()); + ASSERT_STREQ("Names", test_info->name()); +} + +// Tests TestInfo::result(). +TEST_F(TestInfoTest, result) { + const TestInfo* const test_info = GetTestInfo("result"); + + // Initially, there is no TestPartResult for this test. + ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); + + // After the previous assertion, there is still none. + ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); +} + +// Tests setting up and tearing down a test case. + +class SetUpTestCaseTest : public Test { + protected: + // This will be called once before the first test in this test case + // is run. + static void SetUpTestCase() { + printf("Setting up the test case . . .\n"); + + // Initializes some shared resource. In this simple example, we + // just create a C string. More complex stuff can be done if + // desired. + shared_resource_ = "123"; + + // Increments the number of test cases that have been set up. + counter_++; + + // SetUpTestCase() should be called only once. + EXPECT_EQ(1, counter_); + } + + // This will be called once after the last test in this test case is + // run. + static void TearDownTestCase() { + printf("Tearing down the test case . . .\n"); + + // Decrements the number of test cases that have been set up. + counter_--; + + // TearDownTestCase() should be called only once. + EXPECT_EQ(0, counter_); + + // Cleans up the shared resource. + shared_resource_ = NULL; + } + + // This will be called before each test in this test case. + virtual void SetUp() { + // SetUpTestCase() should be called only once, so counter_ should + // always be 1. + EXPECT_EQ(1, counter_); + } + + // Number of test cases that have been set up. + static int counter_; + + // Some resource to be shared by all tests in this test case. + static const char* shared_resource_; +}; + +int SetUpTestCaseTest::counter_ = 0; +const char* SetUpTestCaseTest::shared_resource_ = NULL; + +// A test that uses the shared resource. +TEST_F(SetUpTestCaseTest, Test1) { + EXPECT_STRNE(NULL, shared_resource_); +} + +// Another test that uses the shared resource. +TEST_F(SetUpTestCaseTest, Test2) { + EXPECT_STREQ("123", shared_resource_); +} + +// The InitGoogleTestTest test case tests testing::InitGoogleTest(). + +// The Flags struct stores a copy of all Google Test flags. +struct Flags { + // Constructs a Flags struct where each flag has its default value. + Flags() : also_run_disabled_tests(false), + break_on_failure(false), + catch_exceptions(false), + death_test_use_fork(false), + filter(""), + list_tests(false), + output(""), + print_time(true), + random_seed(0), + repeat(1), + shuffle(false), + stack_trace_depth(kMaxStackTraceDepth), + throw_on_failure(false) {} + + // Factory methods. + + // Creates a Flags struct where the gtest_also_run_disabled_tests flag has + // the given value. + static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) { + Flags flags; + flags.also_run_disabled_tests = also_run_disabled_tests; + return flags; + } + + // Creates a Flags struct where the gtest_break_on_failure flag has + // the given value. + static Flags BreakOnFailure(bool break_on_failure) { + Flags flags; + flags.break_on_failure = break_on_failure; + return flags; + } + + // Creates a Flags struct where the gtest_catch_exceptions flag has + // the given value. + static Flags CatchExceptions(bool catch_exceptions) { + Flags flags; + flags.catch_exceptions = catch_exceptions; + return flags; + } + + // Creates a Flags struct where the gtest_death_test_use_fork flag has + // the given value. + static Flags DeathTestUseFork(bool death_test_use_fork) { + Flags flags; + flags.death_test_use_fork = death_test_use_fork; + return flags; + } + + // Creates a Flags struct where the gtest_filter flag has the given + // value. + static Flags Filter(const char* filter) { + Flags flags; + flags.filter = filter; + return flags; + } + + // Creates a Flags struct where the gtest_list_tests flag has the + // given value. + static Flags ListTests(bool list_tests) { + Flags flags; + flags.list_tests = list_tests; + return flags; + } + + // Creates a Flags struct where the gtest_output flag has the given + // value. + static Flags Output(const char* output) { + Flags flags; + flags.output = output; + return flags; + } + + // Creates a Flags struct where the gtest_print_time flag has the given + // value. + static Flags PrintTime(bool print_time) { + Flags flags; + flags.print_time = print_time; + return flags; + } + + // Creates a Flags struct where the gtest_random_seed flag has + // the given value. + static Flags RandomSeed(Int32 random_seed) { + Flags flags; + flags.random_seed = random_seed; + return flags; + } + + // Creates a Flags struct where the gtest_repeat flag has the given + // value. + static Flags Repeat(Int32 repeat) { + Flags flags; + flags.repeat = repeat; + return flags; + } + + // Creates a Flags struct where the gtest_shuffle flag has + // the given value. + static Flags Shuffle(bool shuffle) { + Flags flags; + flags.shuffle = shuffle; + return flags; + } + + // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has + // the given value. + static Flags StackTraceDepth(Int32 stack_trace_depth) { + Flags flags; + flags.stack_trace_depth = stack_trace_depth; + return flags; + } + + // Creates a Flags struct where the gtest_throw_on_failure flag has + // the given value. + static Flags ThrowOnFailure(bool throw_on_failure) { + Flags flags; + flags.throw_on_failure = throw_on_failure; + return flags; + } + + // These fields store the flag values. + bool also_run_disabled_tests; + bool break_on_failure; + bool catch_exceptions; + bool death_test_use_fork; + const char* filter; + bool list_tests; + const char* output; + bool print_time; + Int32 random_seed; + Int32 repeat; + bool shuffle; + Int32 stack_trace_depth; + bool throw_on_failure; +}; + +// Fixture for testing InitGoogleTest(). +class InitGoogleTestTest : public Test { + protected: + // Clears the flags before each test. + virtual void SetUp() { + GTEST_FLAG(also_run_disabled_tests) = false; + GTEST_FLAG(break_on_failure) = false; + GTEST_FLAG(catch_exceptions) = false; + GTEST_FLAG(death_test_use_fork) = false; + GTEST_FLAG(filter) = ""; + GTEST_FLAG(list_tests) = false; + GTEST_FLAG(output) = ""; + GTEST_FLAG(print_time) = true; + GTEST_FLAG(random_seed) = 0; + GTEST_FLAG(repeat) = 1; + GTEST_FLAG(shuffle) = false; + GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; + GTEST_FLAG(throw_on_failure) = false; + } + + // Asserts that two narrow or wide string arrays are equal. + template + static void AssertStringArrayEq(size_t size1, CharType** array1, + size_t size2, CharType** array2) { + ASSERT_EQ(size1, size2) << " Array sizes different."; + + for (size_t i = 0; i != size1; i++) { + ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i; + } + } + + // Verifies that the flag values match the expected values. + static void CheckFlags(const Flags& expected) { + EXPECT_EQ(expected.also_run_disabled_tests, + GTEST_FLAG(also_run_disabled_tests)); + EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure)); + EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions)); + EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork)); + EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str()); + EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests)); + EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str()); + EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time)); + EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed)); + EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat)); + EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle)); + EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure)); + EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth)); + } + + // Parses a command line (specified by argc1 and argv1), then + // verifies that the flag values are expected and that the + // recognized flags are removed from the command line. + template + static void TestParsingFlags(int argc1, const CharType** argv1, + int argc2, const CharType** argv2, + const Flags& expected, bool should_print_help) { + const bool saved_help_flag = ::testing::internal::g_help_flag; + ::testing::internal::g_help_flag = false; + +#if GTEST_HAS_STREAM_REDIRECTION_ + CaptureStdout(); +#endif // GTEST_HAS_STREAM_REDIRECTION_ + + // Parses the command line. + internal::ParseGoogleTestFlagsOnly(&argc1, const_cast(argv1)); + +#if GTEST_HAS_STREAM_REDIRECTION_ + const String captured_stdout = GetCapturedStdout(); +#endif // GTEST_HAS_STREAM_REDIRECTION_ + + // Verifies the flag values. + CheckFlags(expected); + + // Verifies that the recognized flags are removed from the command + // line. + AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2); + + // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the + // help message for the flags it recognizes. + EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag); + +#if GTEST_HAS_STREAM_REDIRECTION_ + const char* const expected_help_fragment = + "This program contains tests written using"; + if (should_print_help) { + EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout); + } else { + EXPECT_PRED_FORMAT2(IsNotSubstring, + expected_help_fragment, captured_stdout); + } +#endif // GTEST_HAS_STREAM_REDIRECTION_ + + ::testing::internal::g_help_flag = saved_help_flag; + } + + // This macro wraps TestParsingFlags s.t. the user doesn't need + // to specify the array sizes. +#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \ + TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \ + sizeof(argv2)/sizeof(*argv2) - 1, argv2, \ + expected, should_print_help) +}; + +// Tests parsing an empty command line. +TEST_F(InitGoogleTestTest, Empty) { + const char* argv[] = { + NULL + }; + + const char* argv2[] = { + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); +} + +// Tests parsing a command line that has no flag. +TEST_F(InitGoogleTestTest, NoFlag) { + const char* argv[] = { + "foo.exe", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); +} + +// Tests parsing a bad --gtest_filter flag. +TEST_F(InitGoogleTestTest, FilterBad) { + const char* argv[] = { + "foo.exe", + "--gtest_filter", + NULL + }; + + const char* argv2[] = { + "foo.exe", + "--gtest_filter", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true); +} + +// Tests parsing an empty --gtest_filter flag. +TEST_F(InitGoogleTestTest, FilterEmpty) { + const char* argv[] = { + "foo.exe", + "--gtest_filter=", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false); +} + +// Tests parsing a non-empty --gtest_filter flag. +TEST_F(InitGoogleTestTest, FilterNonEmpty) { + const char* argv[] = { + "foo.exe", + "--gtest_filter=abc", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false); +} + +// Tests parsing --gtest_break_on_failure. +TEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure", + NULL +}; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); +} + +// Tests parsing --gtest_break_on_failure=0. +TEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); +} + +// Tests parsing --gtest_break_on_failure=f. +TEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure=f", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); +} + +// Tests parsing --gtest_break_on_failure=F. +TEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure=F", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); +} + +// Tests parsing a --gtest_break_on_failure flag that has a "true" +// definition. +TEST_F(InitGoogleTestTest, BreakOnFailureTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); +} + +// Tests parsing --gtest_catch_exceptions. +TEST_F(InitGoogleTestTest, CatchExceptions) { + const char* argv[] = { + "foo.exe", + "--gtest_catch_exceptions", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false); +} + +// Tests parsing --gtest_death_test_use_fork. +TEST_F(InitGoogleTestTest, DeathTestUseFork) { + const char* argv[] = { + "foo.exe", + "--gtest_death_test_use_fork", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false); +} + +// Tests having the same flag twice with different values. The +// expected behavior is that the one coming last takes precedence. +TEST_F(InitGoogleTestTest, DuplicatedFlags) { + const char* argv[] = { + "foo.exe", + "--gtest_filter=a", + "--gtest_filter=b", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false); +} + +// Tests having an unrecognized flag on the command line. +TEST_F(InitGoogleTestTest, UnrecognizedFlag) { + const char* argv[] = { + "foo.exe", + "--gtest_break_on_failure", + "bar", // Unrecognized by Google Test. + "--gtest_filter=b", + NULL + }; + + const char* argv2[] = { + "foo.exe", + "bar", + NULL + }; + + Flags flags; + flags.break_on_failure = true; + flags.filter = "b"; + GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false); +} + +// Tests having a --gtest_list_tests flag +TEST_F(InitGoogleTestTest, ListTestsFlag) { + const char* argv[] = { + "foo.exe", + "--gtest_list_tests", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); +} + +// Tests having a --gtest_list_tests flag with a "true" value +TEST_F(InitGoogleTestTest, ListTestsTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_list_tests=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); +} + +// Tests having a --gtest_list_tests flag with a "false" value +TEST_F(InitGoogleTestTest, ListTestsFalse) { + const char* argv[] = { + "foo.exe", + "--gtest_list_tests=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); +} + +// Tests parsing --gtest_list_tests=f. +TEST_F(InitGoogleTestTest, ListTestsFalse_f) { + const char* argv[] = { + "foo.exe", + "--gtest_list_tests=f", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); +} + +// Tests parsing --gtest_list_tests=F. +TEST_F(InitGoogleTestTest, ListTestsFalse_F) { + const char* argv[] = { + "foo.exe", + "--gtest_list_tests=F", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); +} + +// Tests parsing --gtest_output (invalid). +TEST_F(InitGoogleTestTest, OutputEmpty) { + const char* argv[] = { + "foo.exe", + "--gtest_output", + NULL + }; + + const char* argv2[] = { + "foo.exe", + "--gtest_output", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true); +} + +// Tests parsing --gtest_output=xml +TEST_F(InitGoogleTestTest, OutputXml) { + const char* argv[] = { + "foo.exe", + "--gtest_output=xml", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false); +} + +// Tests parsing --gtest_output=xml:file +TEST_F(InitGoogleTestTest, OutputXmlFile) { + const char* argv[] = { + "foo.exe", + "--gtest_output=xml:file", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false); +} + +// Tests parsing --gtest_output=xml:directory/path/ +TEST_F(InitGoogleTestTest, OutputXmlDirectory) { + const char* argv[] = { + "foo.exe", + "--gtest_output=xml:directory/path/", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, + Flags::Output("xml:directory/path/"), false); +} + +// Tests having a --gtest_print_time flag +TEST_F(InitGoogleTestTest, PrintTimeFlag) { + const char* argv[] = { + "foo.exe", + "--gtest_print_time", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); +} + +// Tests having a --gtest_print_time flag with a "true" value +TEST_F(InitGoogleTestTest, PrintTimeTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_print_time=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); +} + +// Tests having a --gtest_print_time flag with a "false" value +TEST_F(InitGoogleTestTest, PrintTimeFalse) { + const char* argv[] = { + "foo.exe", + "--gtest_print_time=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); +} + +// Tests parsing --gtest_print_time=f. +TEST_F(InitGoogleTestTest, PrintTimeFalse_f) { + const char* argv[] = { + "foo.exe", + "--gtest_print_time=f", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); +} + +// Tests parsing --gtest_print_time=F. +TEST_F(InitGoogleTestTest, PrintTimeFalse_F) { + const char* argv[] = { + "foo.exe", + "--gtest_print_time=F", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); +} + +// Tests parsing --gtest_random_seed=number +TEST_F(InitGoogleTestTest, RandomSeed) { + const char* argv[] = { + "foo.exe", + "--gtest_random_seed=1000", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false); +} + +// Tests parsing --gtest_repeat=number +TEST_F(InitGoogleTestTest, Repeat) { + const char* argv[] = { + "foo.exe", + "--gtest_repeat=1000", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false); +} + +// Tests having a --gtest_also_run_disabled_tests flag +TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) { + const char* argv[] = { + "foo.exe", + "--gtest_also_run_disabled_tests", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, + Flags::AlsoRunDisabledTests(true), false); +} + +// Tests having a --gtest_also_run_disabled_tests flag with a "true" value +TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_also_run_disabled_tests=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, + Flags::AlsoRunDisabledTests(true), false); +} + +// Tests having a --gtest_also_run_disabled_tests flag with a "false" value +TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) { + const char* argv[] = { + "foo.exe", + "--gtest_also_run_disabled_tests=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, + Flags::AlsoRunDisabledTests(false), false); +} + +// Tests parsing --gtest_shuffle. +TEST_F(InitGoogleTestTest, ShuffleWithoutValue) { + const char* argv[] = { + "foo.exe", + "--gtest_shuffle", + NULL +}; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); +} + +// Tests parsing --gtest_shuffle=0. +TEST_F(InitGoogleTestTest, ShuffleFalse_0) { + const char* argv[] = { + "foo.exe", + "--gtest_shuffle=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false); +} + +// Tests parsing a --gtest_shuffle flag that has a "true" +// definition. +TEST_F(InitGoogleTestTest, ShuffleTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_shuffle=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); +} + +// Tests parsing --gtest_stack_trace_depth=number. +TEST_F(InitGoogleTestTest, StackTraceDepth) { + const char* argv[] = { + "foo.exe", + "--gtest_stack_trace_depth=5", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false); +} + +// Tests parsing --gtest_throw_on_failure. +TEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) { + const char* argv[] = { + "foo.exe", + "--gtest_throw_on_failure", + NULL +}; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); +} + +// Tests parsing --gtest_throw_on_failure=0. +TEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) { + const char* argv[] = { + "foo.exe", + "--gtest_throw_on_failure=0", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false); +} + +// Tests parsing a --gtest_throw_on_failure flag that has a "true" +// definition. +TEST_F(InitGoogleTestTest, ThrowOnFailureTrue) { + const char* argv[] = { + "foo.exe", + "--gtest_throw_on_failure=1", + NULL + }; + + const char* argv2[] = { + "foo.exe", + NULL + }; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); +} + +#if GTEST_OS_WINDOWS +// Tests parsing wide strings. +TEST_F(InitGoogleTestTest, WideStrings) { + const wchar_t* argv[] = { + L"foo.exe", + L"--gtest_filter=Foo*", + L"--gtest_list_tests=1", + L"--gtest_break_on_failure", + L"--non_gtest_flag", + NULL + }; + + const wchar_t* argv2[] = { + L"foo.exe", + L"--non_gtest_flag", + NULL + }; + + Flags expected_flags; + expected_flags.break_on_failure = true; + expected_flags.filter = "Foo*"; + expected_flags.list_tests = true; + + GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false); +} +#endif // GTEST_OS_WINDOWS + +// Tests current_test_info() in UnitTest. +class CurrentTestInfoTest : public Test { + protected: + // Tests that current_test_info() returns NULL before the first test in + // the test case is run. + static void SetUpTestCase() { + // There should be no tests running at this point. + const TestInfo* test_info = + UnitTest::GetInstance()->current_test_info(); + EXPECT_TRUE(test_info == NULL) + << "There should be no tests running at this point."; + } + + // Tests that current_test_info() returns NULL after the last test in + // the test case has run. + static void TearDownTestCase() { + const TestInfo* test_info = + UnitTest::GetInstance()->current_test_info(); + EXPECT_TRUE(test_info == NULL) + << "There should be no tests running at this point."; + } +}; + +// Tests that current_test_info() returns TestInfo for currently running +// test by checking the expected test name against the actual one. +TEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) { + const TestInfo* test_info = + UnitTest::GetInstance()->current_test_info(); + ASSERT_TRUE(NULL != test_info) + << "There is a test running so we should have a valid TestInfo."; + EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) + << "Expected the name of the currently running test case."; + EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name()) + << "Expected the name of the currently running test."; +} + +// Tests that current_test_info() returns TestInfo for currently running +// test by checking the expected test name against the actual one. We +// use this test to see that the TestInfo object actually changed from +// the previous invocation. +TEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) { + const TestInfo* test_info = + UnitTest::GetInstance()->current_test_info(); + ASSERT_TRUE(NULL != test_info) + << "There is a test running so we should have a valid TestInfo."; + EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) + << "Expected the name of the currently running test case."; + EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name()) + << "Expected the name of the currently running test."; +} + +} // namespace testing + +// These two lines test that we can define tests in a namespace that +// has the name "testing" and is nested in another namespace. +namespace my_namespace { +namespace testing { + +// Makes sure that TEST knows to use ::testing::Test instead of +// ::my_namespace::testing::Test. +class Test {}; + +// Makes sure that an assertion knows to use ::testing::Message instead of +// ::my_namespace::testing::Message. +class Message {}; + +// Makes sure that an assertion knows to use +// ::testing::AssertionResult instead of +// ::my_namespace::testing::AssertionResult. +class AssertionResult {}; + +// Tests that an assertion that should succeed works as expected. +TEST(NestedTestingNamespaceTest, Success) { + EXPECT_EQ(1, 1) << "This shouldn't fail."; +} + +// Tests that an assertion that should fail works as expected. +TEST(NestedTestingNamespaceTest, Failure) { + EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.", + "This failure is expected."); +} + +} // namespace testing +} // namespace my_namespace + +// Tests that one can call superclass SetUp and TearDown methods-- +// that is, that they are not private. +// No tests are based on this fixture; the test "passes" if it compiles +// successfully. +class ProtectedFixtureMethodsTest : public Test { + protected: + virtual void SetUp() { + Test::SetUp(); + } + virtual void TearDown() { + Test::TearDown(); + } +}; + +// StreamingAssertionsTest tests the streaming versions of a representative +// sample of assertions. +TEST(StreamingAssertionsTest, Unconditional) { + SUCCEED() << "expected success"; + EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(FAIL() << "expected failure", + "expected failure"); +} + +#ifdef __BORLANDC__ +// Silences warnings: "Condition is always true", "Unreachable code" +#pragma option push -w-ccc -w-rch +#endif + +TEST(StreamingAssertionsTest, Truth) { + EXPECT_TRUE(true) << "unexpected failure"; + ASSERT_TRUE(true) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, Truth2) { + EXPECT_FALSE(false) << "unexpected failure"; + ASSERT_FALSE(false) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure", + "expected failure"); +} + +#ifdef __BORLANDC__ +// Restores warnings after previous "#pragma option push" supressed them +#pragma option pop +#endif + +TEST(StreamingAssertionsTest, IntegerEquals) { + EXPECT_EQ(1, 1) << "unexpected failure"; + ASSERT_EQ(1, 1) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, IntegerLessThan) { + EXPECT_LT(1, 2) << "unexpected failure"; + ASSERT_LT(1, 2) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, StringsEqual) { + EXPECT_STREQ("foo", "foo") << "unexpected failure"; + ASSERT_STREQ("foo", "foo") << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, StringsNotEqual) { + EXPECT_STRNE("foo", "bar") << "unexpected failure"; + ASSERT_STRNE("foo", "bar") << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, StringsEqualIgnoringCase) { + EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure"; + ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) { + EXPECT_STRCASENE("foo", "bar") << "unexpected failure"; + ASSERT_STRCASENE("foo", "bar") << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure", + "expected failure"); +} + +TEST(StreamingAssertionsTest, FloatingPointEquals) { + EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; + ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure", + "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure", + "expected failure"); +} + +#if GTEST_HAS_EXCEPTIONS + +TEST(StreamingAssertionsTest, Throw) { + EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure"; + ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) << + "expected failure", "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) << + "expected failure", "expected failure"); +} + +TEST(StreamingAssertionsTest, NoThrow) { + EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure"; + ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) << + "expected failure", "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) << + "expected failure", "expected failure"); +} + +TEST(StreamingAssertionsTest, AnyThrow) { + EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; + ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; + EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) << + "expected failure", "expected failure"); + EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) << + "expected failure", "expected failure"); +} + +#endif // GTEST_HAS_EXCEPTIONS + +// Tests that Google Test correctly decides whether to use colors in the output. + +TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) { + GTEST_FLAG(color) = "yes"; + + SetEnv("TERM", "xterm"); // TERM supports colors. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. + + SetEnv("TERM", "dumb"); // TERM doesn't support colors. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. +} + +TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) { + SetEnv("TERM", "dumb"); // TERM doesn't support colors. + + GTEST_FLAG(color) = "True"; + EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. + + GTEST_FLAG(color) = "t"; + EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. + + GTEST_FLAG(color) = "1"; + EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. +} + +TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) { + GTEST_FLAG(color) = "no"; + + SetEnv("TERM", "xterm"); // TERM supports colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. + + SetEnv("TERM", "dumb"); // TERM doesn't support colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. +} + +TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) { + SetEnv("TERM", "xterm"); // TERM supports colors. + + GTEST_FLAG(color) = "F"; + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + GTEST_FLAG(color) = "0"; + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + GTEST_FLAG(color) = "unknown"; + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. +} + +TEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) { + GTEST_FLAG(color) = "auto"; + + SetEnv("TERM", "xterm"); // TERM supports colors. + EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. +} + +TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) { + GTEST_FLAG(color) = "auto"; + +#if GTEST_OS_WINDOWS + // On Windows, we ignore the TERM variable as it's usually not set. + + SetEnv("TERM", "dumb"); + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", ""); + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "xterm"); + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. +#else + // On non-Windows platforms, we rely on TERM to determine if the + // terminal supports colors. + + SetEnv("TERM", "dumb"); // TERM doesn't support colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "emacs"); // TERM doesn't support colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "vt100"); // TERM doesn't support colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors. + EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "xterm"); // TERM supports colors. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "xterm-color"); // TERM supports colors. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. + + SetEnv("TERM", "linux"); // TERM supports colors. + EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. +#endif // GTEST_OS_WINDOWS +} + +// Verifies that StaticAssertTypeEq works in a namespace scope. + +static bool dummy1 = StaticAssertTypeEq(); +static bool dummy2 = StaticAssertTypeEq(); + +// Verifies that StaticAssertTypeEq works in a class. + +template +class StaticAssertTypeEqTestHelper { + public: + StaticAssertTypeEqTestHelper() { StaticAssertTypeEq(); } +}; + +TEST(StaticAssertTypeEqTest, WorksInClass) { + StaticAssertTypeEqTestHelper(); +} + +// Verifies that StaticAssertTypeEq works inside a function. + +typedef int IntAlias; + +TEST(StaticAssertTypeEqTest, CompilesForEqualTypes) { + StaticAssertTypeEq(); + StaticAssertTypeEq(); +} + +TEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) { + testing::UnitTest* const unit_test = testing::UnitTest::GetInstance(); + + // We don't have a stack walker in Google Test yet. + EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str()); + EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str()); +} + +TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) { + EXPECT_FALSE(HasNonfatalFailure()); +} + +static void FailFatally() { FAIL(); } + +TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) { + FailFatally(); + const bool has_nonfatal_failure = HasNonfatalFailure(); + ClearCurrentTestPartResults(); + EXPECT_FALSE(has_nonfatal_failure); +} + +TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { + ADD_FAILURE(); + const bool has_nonfatal_failure = HasNonfatalFailure(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_nonfatal_failure); +} + +TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { + FailFatally(); + ADD_FAILURE(); + const bool has_nonfatal_failure = HasNonfatalFailure(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_nonfatal_failure); +} + +// A wrapper for calling HasNonfatalFailure outside of a test body. +static bool HasNonfatalFailureHelper() { + return testing::Test::HasNonfatalFailure(); +} + +TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) { + EXPECT_FALSE(HasNonfatalFailureHelper()); +} + +TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) { + ADD_FAILURE(); + const bool has_nonfatal_failure = HasNonfatalFailureHelper(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_nonfatal_failure); +} + +TEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) { + EXPECT_FALSE(HasFailure()); +} + +TEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) { + FailFatally(); + const bool has_failure = HasFailure(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_failure); +} + +TEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { + ADD_FAILURE(); + const bool has_failure = HasFailure(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_failure); +} + +TEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { + FailFatally(); + ADD_FAILURE(); + const bool has_failure = HasFailure(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_failure); +} + +// A wrapper for calling HasFailure outside of a test body. +static bool HasFailureHelper() { return testing::Test::HasFailure(); } + +TEST(HasFailureTest, WorksOutsideOfTestBody) { + EXPECT_FALSE(HasFailureHelper()); +} + +TEST(HasFailureTest, WorksOutsideOfTestBody2) { + ADD_FAILURE(); + const bool has_failure = HasFailureHelper(); + ClearCurrentTestPartResults(); + EXPECT_TRUE(has_failure); +} + +class TestListener : public EmptyTestEventListener { + public: + TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {} + TestListener(int* on_start_counter, bool* is_destroyed) + : on_start_counter_(on_start_counter), + is_destroyed_(is_destroyed) {} + + virtual ~TestListener() { + if (is_destroyed_) + *is_destroyed_ = true; + } + + protected: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { + if (on_start_counter_ != NULL) + (*on_start_counter_)++; + } + + private: + int* on_start_counter_; + bool* is_destroyed_; +}; + +// Tests the constructor. +TEST(TestEventListenersTest, ConstructionWorks) { + TestEventListeners listeners; + + EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL); + EXPECT_TRUE(listeners.default_result_printer() == NULL); + EXPECT_TRUE(listeners.default_xml_generator() == NULL); +} + +// Tests that the TestEventListeners destructor deletes all the listeners it +// owns. +TEST(TestEventListenersTest, DestructionWorks) { + bool default_result_printer_is_destroyed = false; + bool default_xml_printer_is_destroyed = false; + bool extra_listener_is_destroyed = false; + TestListener* default_result_printer = new TestListener( + NULL, &default_result_printer_is_destroyed); + TestListener* default_xml_printer = new TestListener( + NULL, &default_xml_printer_is_destroyed); + TestListener* extra_listener = new TestListener( + NULL, &extra_listener_is_destroyed); + + { + TestEventListeners listeners; + TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, + default_result_printer); + TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, + default_xml_printer); + listeners.Append(extra_listener); + } + EXPECT_TRUE(default_result_printer_is_destroyed); + EXPECT_TRUE(default_xml_printer_is_destroyed); + EXPECT_TRUE(extra_listener_is_destroyed); +} + +// Tests that a listener Append'ed to a TestEventListeners list starts +// receiving events. +TEST(TestEventListenersTest, Append) { + int on_start_counter = 0; + bool is_destroyed = false; + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + { + TestEventListeners listeners; + listeners.Append(listener); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(1, on_start_counter); + } + EXPECT_TRUE(is_destroyed); +} + +// Tests that listeners receive events in the order they were appended to +// the list, except for *End requests, which must be received in the reverse +// order. +class SequenceTestingListener : public EmptyTestEventListener { + public: + SequenceTestingListener(std::vector* vector, const char* id) + : vector_(vector), id_(id) {} + + protected: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { + vector_->push_back(GetEventDescription("OnTestProgramStart")); + } + + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { + vector_->push_back(GetEventDescription("OnTestProgramEnd")); + } + + virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) { + vector_->push_back(GetEventDescription("OnTestIterationStart")); + } + + virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int /*iteration*/) { + vector_->push_back(GetEventDescription("OnTestIterationEnd")); + } + + private: + String GetEventDescription(const char* method) { + Message message; + message << id_ << "." << method; + return message.GetString(); + } + + std::vector* vector_; + const char* const id_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener); +}; + +TEST(EventListenerTest, AppendKeepsOrder) { + std::vector vec; + TestEventListeners listeners; + listeners.Append(new SequenceTestingListener(&vec, "1st")); + listeners.Append(new SequenceTestingListener(&vec, "2nd")); + listeners.Append(new SequenceTestingListener(&vec, "3rd")); + + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + ASSERT_EQ(3U, vec.size()); + EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str()); + EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str()); + EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str()); + + vec.clear(); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd( + *UnitTest::GetInstance()); + ASSERT_EQ(3U, vec.size()); + EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str()); + EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str()); + EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str()); + + vec.clear(); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart( + *UnitTest::GetInstance(), 0); + ASSERT_EQ(3U, vec.size()); + EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str()); + EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str()); + EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str()); + + vec.clear(); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd( + *UnitTest::GetInstance(), 0); + ASSERT_EQ(3U, vec.size()); + EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str()); + EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str()); + EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str()); +} + +// Tests that a listener removed from a TestEventListeners list stops receiving +// events and is not deleted when the list is destroyed. +TEST(TestEventListenersTest, Release) { + int on_start_counter = 0; + bool is_destroyed = false; + // Although Append passes the ownership of this object to the list, + // the following calls release it, and we need to delete it before the + // test ends. + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + { + TestEventListeners listeners; + listeners.Append(listener); + EXPECT_EQ(listener, listeners.Release(listener)); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_TRUE(listeners.Release(listener) == NULL); + } + EXPECT_EQ(0, on_start_counter); + EXPECT_FALSE(is_destroyed); + delete listener; +} + +// Tests that no events are forwarded when event forwarding is disabled. +TEST(EventListenerTest, SuppressEventForwarding) { + int on_start_counter = 0; + TestListener* listener = new TestListener(&on_start_counter, NULL); + + TestEventListeners listeners; + listeners.Append(listener); + ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); + TestEventListenersAccessor::SuppressEventForwarding(&listeners); + ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(0, on_start_counter); +} + +// Tests that events generated by Google Test are not forwarded in +// death test subprocesses. +TEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) { + EXPECT_DEATH_IF_SUPPORTED({ + GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled( + *GetUnitTestImpl()->listeners())) << "expected failure";}, + "expected failure"); +} + +// Tests that a listener installed via SetDefaultResultPrinter() starts +// receiving events and is returned via default_result_printer() and that +// the previous default_result_printer is removed from the list and deleted. +TEST(EventListenerTest, default_result_printer) { + int on_start_counter = 0; + bool is_destroyed = false; + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + + TestEventListeners listeners; + TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); + + EXPECT_EQ(listener, listeners.default_result_printer()); + + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + + EXPECT_EQ(1, on_start_counter); + + // Replacing default_result_printer with something else should remove it + // from the list and destroy it. + TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL); + + EXPECT_TRUE(listeners.default_result_printer() == NULL); + EXPECT_TRUE(is_destroyed); + + // After broadcasting an event the counter is still the same, indicating + // the listener is not in the list anymore. + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(1, on_start_counter); +} + +// Tests that the default_result_printer listener stops receiving events +// when removed via Release and that is not owned by the list anymore. +TEST(EventListenerTest, RemovingDefaultResultPrinterWorks) { + int on_start_counter = 0; + bool is_destroyed = false; + // Although Append passes the ownership of this object to the list, + // the following calls release it, and we need to delete it before the + // test ends. + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + { + TestEventListeners listeners; + TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); + + EXPECT_EQ(listener, listeners.Release(listener)); + EXPECT_TRUE(listeners.default_result_printer() == NULL); + EXPECT_FALSE(is_destroyed); + + // Broadcasting events now should not affect default_result_printer. + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(0, on_start_counter); + } + // Destroying the list should not affect the listener now, too. + EXPECT_FALSE(is_destroyed); + delete listener; +} + +// Tests that a listener installed via SetDefaultXmlGenerator() starts +// receiving events and is returned via default_xml_generator() and that +// the previous default_xml_generator is removed from the list and deleted. +TEST(EventListenerTest, default_xml_generator) { + int on_start_counter = 0; + bool is_destroyed = false; + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + + TestEventListeners listeners; + TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); + + EXPECT_EQ(listener, listeners.default_xml_generator()); + + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + + EXPECT_EQ(1, on_start_counter); + + // Replacing default_xml_generator with something else should remove it + // from the list and destroy it. + TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL); + + EXPECT_TRUE(listeners.default_xml_generator() == NULL); + EXPECT_TRUE(is_destroyed); + + // After broadcasting an event the counter is still the same, indicating + // the listener is not in the list anymore. + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(1, on_start_counter); +} + +// Tests that the default_xml_generator listener stops receiving events +// when removed via Release and that is not owned by the list anymore. +TEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) { + int on_start_counter = 0; + bool is_destroyed = false; + // Although Append passes the ownership of this object to the list, + // the following calls release it, and we need to delete it before the + // test ends. + TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); + { + TestEventListeners listeners; + TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); + + EXPECT_EQ(listener, listeners.Release(listener)); + EXPECT_TRUE(listeners.default_xml_generator() == NULL); + EXPECT_FALSE(is_destroyed); + + // Broadcasting events now should not affect default_xml_generator. + TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( + *UnitTest::GetInstance()); + EXPECT_EQ(0, on_start_counter); + } + // Destroying the list should not affect the listener now, too. + EXPECT_FALSE(is_destroyed); + delete listener; +} + +// Sanity tests to ensure that the alternative, verbose spellings of +// some of the macros work. We don't test them thoroughly as that +// would be quite involved. Since their implementations are +// straightforward, and they are rarely used, we'll just rely on the +// users to tell us when they are broken. +GTEST_TEST(AlternativeNameTest, Works) { // GTEST_TEST is the same as TEST. + GTEST_SUCCEED() << "OK"; // GTEST_SUCCEED is the same as SUCCEED. + + // GTEST_FAIL is the same as FAIL. + EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure", + "An expected failure"); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile1_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile1_test_.cc new file mode 100644 index 00000000..664baad2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile1_test_.cc @@ -0,0 +1,49 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: keith.ray@gmail.com (Keith Ray) +// +// gtest_xml_outfile1_test_ writes some xml via TestProperty used by +// gtest_xml_outfiles_test.py + +#include + +class PropertyOne : public testing::Test { + protected: + virtual void SetUp() { + RecordProperty("SetUpProp", 1); + } + virtual void TearDown() { + RecordProperty("TearDownProp", 1); + } +}; + +TEST_F(PropertyOne, TestSomeProperties) { + RecordProperty("TestSomeProperty", 1); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile2_test_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile2_test_.cc new file mode 100644 index 00000000..3411a3d3 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfile2_test_.cc @@ -0,0 +1,49 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: keith.ray@gmail.com (Keith Ray) +// +// gtest_xml_outfile2_test_ writes some xml via TestProperty used by +// gtest_xml_outfiles_test.py + +#include + +class PropertyTwo : public testing::Test { + protected: + virtual void SetUp() { + RecordProperty("SetUpProp", 2); + } + virtual void TearDown() { + RecordProperty("TearDownProp", 2); + } +}; + +TEST_F(PropertyTwo, TestSomeProperties) { + RecordProperty("TestSomeProperty", 2); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfiles_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfiles_test.py new file mode 100755 index 00000000..0fe947f0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_outfiles_test.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test for the gtest_xml_output module.""" + +__author__ = "keith.ray@gmail.com (Keith Ray)" + +import os +from xml.dom import minidom, Node + +import gtest_test_utils +import gtest_xml_test_utils + + +GTEST_OUTPUT_SUBDIR = "xml_outfiles" +GTEST_OUTPUT_1_TEST = "gtest_xml_outfile1_test_" +GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_" + +EXPECTED_XML_1 = """ + + + + + +""" + +EXPECTED_XML_2 = """ + + + + + +""" + + +class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase): + """Unit test for Google Test's XML output functionality.""" + + def setUp(self): + # We want the trailing '/' that the last "" provides in os.path.join, for + # telling Google Test to create an output directory instead of a single file + # for xml output. + self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(), + GTEST_OUTPUT_SUBDIR, "") + self.DeleteFilesAndDir() + + def tearDown(self): + self.DeleteFilesAndDir() + + def DeleteFilesAndDir(self): + try: + os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + ".xml")) + except os.error: + pass + try: + os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + ".xml")) + except os.error: + pass + try: + os.rmdir(self.output_dir_) + except os.error: + pass + + def testOutfile1(self): + self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_XML_1) + + def testOutfile2(self): + self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_XML_2) + + def _TestOutFile(self, test_name, expected_xml): + gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name) + command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_] + p = gtest_test_utils.Subprocess(command, + working_dir=gtest_test_utils.GetTempDir()) + self.assert_(p.exited) + self.assertEquals(0, p.exit_code) + + # TODO(wan@google.com): libtool causes the built test binary to be + # named lt-gtest_xml_outfiles_test_ instead of + # gtest_xml_outfiles_test_. To account for this possibillity, we + # allow both names in the following code. We should remove this + # hack when Chandler Carruth's libtool replacement tool is ready. + output_file_name1 = test_name + ".xml" + output_file1 = os.path.join(self.output_dir_, output_file_name1) + output_file_name2 = 'lt-' + output_file_name1 + output_file2 = os.path.join(self.output_dir_, output_file_name2) + self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2), + output_file1) + + expected = minidom.parseString(expected_xml) + if os.path.isfile(output_file1): + actual = minidom.parse(output_file1) + else: + actual = minidom.parse(output_file2) + self.NormalizeXml(actual.documentElement) + self.AssertEquivalentNodes(expected.documentElement, + actual.documentElement) + expected.unlink() + actual.unlink() + + +if __name__ == "__main__": + os.environ["GTEST_STACK_TRACE_DEPTH"] = "0" + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest.py new file mode 100755 index 00000000..6d44929c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test for the gtest_xml_output module""" + +__author__ = 'eefacm@gmail.com (Sean Mcafee)' + +import errno +import os +import sys +from xml.dom import minidom, Node + +import gtest_test_utils +import gtest_xml_test_utils + + +GTEST_OUTPUT_FLAG = "--gtest_output" +GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" +GTEST_PROGRAM_NAME = "gtest_xml_output_unittest_" + +SUPPORTS_STACK_TRACES = False + +if SUPPORTS_STACK_TRACES: + STACK_TRACE_TEMPLATE = "\nStack trace:\n*" +else: + STACK_TRACE_TEMPLATE = "" + +EXPECTED_NON_EMPTY_XML = """ + + + + + + + + + + + + + + + + + + + + ]]>%(stack)s]]> + + + + + + + + + + + + + + + + + + + + + +""" % {'stack': STACK_TRACE_TEMPLATE} + + +EXPECTED_EMPTY_XML = """ + +""" + + +class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): + """ + Unit test for Google Test's XML output functionality. + """ + + def testNonEmptyXmlOutput(self): + """ + Runs a test program that generates a non-empty XML output, and + tests that the XML output is expected. + """ + self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1) + + def testEmptyXmlOutput(self): + """ + Runs a test program that generates an empty XML output, and + tests that the XML output is expected. + """ + + self._TestXmlOutput("gtest_no_test_unittest", + EXPECTED_EMPTY_XML, 0) + + def testDefaultOutputFile(self): + """ + Confirms that Google Test produces an XML output file with the expected + default name if no name is explicitly specified. + """ + output_file = os.path.join(gtest_test_utils.GetTempDir(), + GTEST_DEFAULT_OUTPUT_FILE) + gtest_prog_path = gtest_test_utils.GetTestExecutablePath( + "gtest_no_test_unittest") + try: + os.remove(output_file) + except OSError, e: + if e.errno != errno.ENOENT: + raise + + p = gtest_test_utils.Subprocess( + [gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG], + working_dir=gtest_test_utils.GetTempDir()) + self.assert_(p.exited) + self.assertEquals(0, p.exit_code) + self.assert_(os.path.isfile(output_file)) + + def testSuppressedXmlOutput(self): + """ + Tests that no XML file is generated if the default XML listener is + shut down before RUN_ALL_TESTS is invoked. + """ + + xml_path = os.path.join(gtest_test_utils.GetTempDir(), + GTEST_PROGRAM_NAME + "out.xml") + if os.path.isfile(xml_path): + os.remove(xml_path) + + gtest_prog_path = gtest_test_utils.GetTestExecutablePath(GTEST_PROGRAM_NAME) + + command = [gtest_prog_path, + "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path), + "--shut_down_xml"] + p = gtest_test_utils.Subprocess(command) + if p.terminated_by_signal: + self.assert_(False, + "%s was killed by signal %d" % (gtest_prog_name, p.signal)) + else: + self.assert_(p.exited) + self.assertEquals(1, p.exit_code, + "'%s' exited with code %s, which doesn't match " + "the expected exit code %s." + % (command, p.exit_code, 1)) + + self.assert_(not os.path.isfile(xml_path)) + + + def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code): + """ + Asserts that the XML document generated by running the program + gtest_prog_name matches expected_xml, a string containing another + XML document. Furthermore, the program's exit code must be + expected_exit_code. + """ + xml_path = os.path.join(gtest_test_utils.GetTempDir(), + gtest_prog_name + "out.xml") + gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name) + + command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)] + p = gtest_test_utils.Subprocess(command) + if p.terminated_by_signal: + self.assert_(False, + "%s was killed by signal %d" % (gtest_prog_name, p.signal)) + else: + self.assert_(p.exited) + self.assertEquals(expected_exit_code, p.exit_code, + "'%s' exited with code %s, which doesn't match " + "the expected exit code %s." + % (command, p.exit_code, expected_exit_code)) + + expected = minidom.parseString(expected_xml) + actual = minidom.parse(xml_path) + self.NormalizeXml(actual.documentElement) + self.AssertEquivalentNodes(expected.documentElement, + actual.documentElement) + expected.unlink() + actual .unlink() + + + +if __name__ == '__main__': + os.environ['GTEST_STACK_TRACE_DEPTH'] = '1' + gtest_test_utils.Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest_.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest_.cc new file mode 100644 index 00000000..fc07ef46 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_output_unittest_.cc @@ -0,0 +1,145 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: eefacm@gmail.com (Sean Mcafee) + +// Unit test for Google Test XML output. +// +// A user can specify XML output in a Google Test program to run via +// either the GTEST_OUTPUT environment variable or the --gtest_output +// flag. This is used for testing such functionality. +// +// This program will be invoked from a Python unit test. Don't run it +// directly. + +#include + +using ::testing::InitGoogleTest; +using ::testing::TestEventListeners; +using ::testing::UnitTest; + +class SuccessfulTest : public testing::Test { +}; + +TEST_F(SuccessfulTest, Succeeds) { + SUCCEED() << "This is a success."; + ASSERT_EQ(1, 1); +} + +class FailedTest : public testing::Test { +}; + +TEST_F(FailedTest, Fails) { + ASSERT_EQ(1, 2); +} + +class DisabledTest : public testing::Test { +}; + +TEST_F(DisabledTest, DISABLED_test_not_run) { + FAIL() << "Unexpected failure: Disabled test should not be run"; +} + +TEST(MixedResultTest, Succeeds) { + EXPECT_EQ(1, 1); + ASSERT_EQ(1, 1); +} + +TEST(MixedResultTest, Fails) { + EXPECT_EQ(1, 2); + ASSERT_EQ(2, 3); +} + +TEST(MixedResultTest, DISABLED_test) { + FAIL() << "Unexpected failure: Disabled test should not be run"; +} + +TEST(XmlQuotingTest, OutputsCData) { + FAIL() << "XML output: " + ""; +} + +// Helps to test that invalid characters produced by test code do not make +// it into the XML file. +TEST(InvalidCharactersTest, InvalidCharactersInMessage) { + FAIL() << "Invalid characters in brackets [\x1\x2]"; +} + +class PropertyRecordingTest : public testing::Test { +}; + +TEST_F(PropertyRecordingTest, OneProperty) { + RecordProperty("key_1", "1"); +} + +TEST_F(PropertyRecordingTest, IntValuedProperty) { + RecordProperty("key_int", 1); +} + +TEST_F(PropertyRecordingTest, ThreeProperties) { + RecordProperty("key_1", "1"); + RecordProperty("key_2", "2"); + RecordProperty("key_3", "3"); +} + +TEST_F(PropertyRecordingTest, TwoValuesForOneKeyUsesLastValue) { + RecordProperty("key_1", "1"); + RecordProperty("key_1", "2"); +} + +TEST(NoFixtureTest, RecordProperty) { + RecordProperty("key", "1"); +} + +void ExternalUtilityThatCallsRecordProperty(const char* key, int value) { + testing::Test::RecordProperty(key, value); +} + +void ExternalUtilityThatCallsRecordProperty(const char* key, + const char* value) { + testing::Test::RecordProperty(key, value); +} + +TEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) { + ExternalUtilityThatCallsRecordProperty("key_for_utility_int", 1); +} + +TEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) { + ExternalUtilityThatCallsRecordProperty("key_for_utility_string", "1"); +} + +int main(int argc, char** argv) { + InitGoogleTest(&argc, argv); + + if (argc > 1 && strcmp(argv[1], "--shut_down_xml") == 0) { + TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); + delete listeners.Release(listeners.default_xml_generator()); + } + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_test_utils.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_test_utils.py new file mode 100755 index 00000000..c83c3b7e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/gtest_xml_test_utils.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unit test utilities for gtest_xml_output""" + +__author__ = 'eefacm@gmail.com (Sean Mcafee)' + +import re +from xml.dom import minidom, Node + +import gtest_test_utils + + +GTEST_OUTPUT_FLAG = "--gtest_output" +GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" + +class GTestXMLTestCase(gtest_test_utils.TestCase): + """ + Base class for tests of Google Test's XML output functionality. + """ + + + def AssertEquivalentNodes(self, expected_node, actual_node): + """ + Asserts that actual_node (a DOM node object) is equivalent to + expected_node (another DOM node object), in that either both of + them are CDATA nodes and have the same value, or both are DOM + elements and actual_node meets all of the following conditions: + + * It has the same tag name as expected_node. + * It has the same set of attributes as expected_node, each with + the same value as the corresponding attribute of expected_node. + An exception is any attribute named "time", which needs only be + convertible to a floating-point number. + * It has an equivalent set of child nodes (including elements and + CDATA sections) as expected_node. Note that we ignore the + order of the children as they are not guaranteed to be in any + particular order. + """ + + if expected_node.nodeType == Node.CDATA_SECTION_NODE: + self.assertEquals(Node.CDATA_SECTION_NODE, actual_node.nodeType) + self.assertEquals(expected_node.nodeValue, actual_node.nodeValue) + return + + self.assertEquals(Node.ELEMENT_NODE, actual_node.nodeType) + self.assertEquals(Node.ELEMENT_NODE, expected_node.nodeType) + self.assertEquals(expected_node.tagName, actual_node.tagName) + + expected_attributes = expected_node.attributes + actual_attributes = actual_node .attributes + self.assertEquals( + expected_attributes.length, actual_attributes.length, + "attribute numbers differ in element " + actual_node.tagName) + for i in range(expected_attributes.length): + expected_attr = expected_attributes.item(i) + actual_attr = actual_attributes.get(expected_attr.name) + self.assert_( + actual_attr is not None, + "expected attribute %s not found in element %s" % + (expected_attr.name, actual_node.tagName)) + self.assertEquals(expected_attr.value, actual_attr.value, + " values of attribute %s in element %s differ" % + (expected_attr.name, actual_node.tagName)) + + expected_children = self._GetChildren(expected_node) + actual_children = self._GetChildren(actual_node) + self.assertEquals( + len(expected_children), len(actual_children), + "number of child elements differ in element " + actual_node.tagName) + for child_id, child in expected_children.iteritems(): + self.assert_(child_id in actual_children, + '<%s> is not in <%s> (in element %s)' % + (child_id, actual_children, actual_node.tagName)) + self.AssertEquivalentNodes(child, actual_children[child_id]) + + identifying_attribute = { + "testsuites": "name", + "testsuite": "name", + "testcase": "name", + "failure": "message", + } + + def _GetChildren(self, element): + """ + Fetches all of the child nodes of element, a DOM Element object. + Returns them as the values of a dictionary keyed by the IDs of the + children. For , and elements, the ID + is the value of their "name" attribute; for elements, it is + the value of the "message" attribute; CDATA sections and non-whitespace + text nodes are concatenated into a single CDATA section with ID + "detail". An exception is raised if any element other than the above + four is encountered, if two child elements with the same identifying + attributes are encountered, or if any other type of node is encountered. + """ + + children = {} + for child in element.childNodes: + if child.nodeType == Node.ELEMENT_NODE: + self.assert_(child.tagName in self.identifying_attribute, + "Encountered unknown element <%s>" % child.tagName) + childID = child.getAttribute(self.identifying_attribute[child.tagName]) + self.assert_(childID not in children) + children[childID] = child + elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]: + if "detail" not in children: + if (child.nodeType == Node.CDATA_SECTION_NODE or + not child.nodeValue.isspace()): + children["detail"] = child.ownerDocument.createCDATASection( + child.nodeValue) + else: + children["detail"].nodeValue += child.nodeValue + else: + self.fail("Encountered unexpected node type %d" % child.nodeType) + return children + + def NormalizeXml(self, element): + """ + Normalizes Google Test's XML output to eliminate references to transient + information that may change from run to run. + + * The "time" attribute of , and + elements is replaced with a single asterisk, if it contains + only digit characters. + * The line number reported in the first line of the "message" + attribute of elements is replaced with a single asterisk. + * The directory names in file paths are removed. + * The stack traces are removed. + """ + + if element.tagName in ("testsuites", "testsuite", "testcase"): + time = element.getAttributeNode("time") + time.value = re.sub(r"^\d+(\.\d+)?$", "*", time.value) + elif element.tagName == "failure": + for child in element.childNodes: + if child.nodeType == Node.CDATA_SECTION_NODE: + # Removes the source line number. + cdata = re.sub(r"^.*[/\\](.*:)\d+\n", "\\1*\n", child.nodeValue) + # Removes the actual stack trace. + child.nodeValue = re.sub(r"\nStack trace:\n(.|\n)*", + "", cdata) + for child in element.childNodes: + if child.nodeType == Node.ELEMENT_NODE: + self.NormalizeXml(child) diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.cc new file mode 100644 index 00000000..8b8a40b4 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.cc @@ -0,0 +1,36 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This is part of the unit test for include/gtest/gtest_prod.h. + +#include "production.h" + +PrivateCode::PrivateCode() : x_(0) {} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.h new file mode 100644 index 00000000..8f16fffa --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/production.h @@ -0,0 +1,55 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This is part of the unit test for include/gtest/gtest_prod.h. + +#ifndef GTEST_TEST_PRODUCTION_H_ +#define GTEST_TEST_PRODUCTION_H_ + +#include + +class PrivateCode { + public: + // Declares a friend test that does not use a fixture. + FRIEND_TEST(PrivateCodeTest, CanAccessPrivateMembers); + + // Declares a friend test that uses a fixture. + FRIEND_TEST(PrivateCodeFixtureTest, CanAccessPrivateMembers); + + PrivateCode(); + + int x() const { return x_; } + private: + void set_x(int an_x) { x_ = an_x; } + int x_; +}; + +#endif // GTEST_TEST_PRODUCTION_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util.py new file mode 100755 index 00000000..9e57931e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util.py @@ -0,0 +1,466 @@ +# Copyright 2008 Google Inc. All Rights Reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides facilities for running SCons-built Google Test/Mock tests.""" + + +import optparse +import os +import re +import sets +import sys + +try: + # subrocess module is a preferable way to invoke subprocesses but it may + # not be available on MacOS X 10.4. + # Suppresses the 'Import not at the top of the file' lint complaint. + # pylint: disable-msg=C6204 + import subprocess +except ImportError: + subprocess = None + +HELP_MSG = """Runs the specified tests for %(proj)s. + +SYNOPSIS + run_tests.py [OPTION]... [BUILD_DIR]... [TEST]... + +DESCRIPTION + Runs the specified tests (either binary or Python), and prints a + summary of the results. BUILD_DIRS will be used to search for the + binaries. If no TESTs are specified, all binary tests found in + BUILD_DIRs and all Python tests found in the directory test/ (in the + %(proj)s root) are run. + + TEST is a name of either a binary or a Python test. A binary test is + an executable file named *_test or *_unittest (with the .exe + extension on Windows) A Python test is a script named *_test.py or + *_unittest.py. + +OPTIONS + -h, --help + Print this help message. + -c CONFIGURATIONS + Specify build directories via build configurations. + CONFIGURATIONS is either a comma-separated list of build + configurations or 'all'. Each configuration is equivalent to + adding 'scons/build//%(proj)s/scons' to BUILD_DIRs. + Specifying -c=all is equivalent to providing all directories + listed in KNOWN BUILD DIRECTORIES section below. + -a + Equivalent to -c=all + -b + Equivalent to -c=all with the exception that the script will not + fail if some of the KNOWN BUILD DIRECTORIES do not exists; the + script will simply not run the tests there. 'b' stands for + 'built directories'. + +RETURN VALUE + Returns 0 if all tests are successful; otherwise returns 1. + +EXAMPLES + run_tests.py + Runs all tests for the default build configuration. + run_tests.py -a + Runs all tests with binaries in KNOWN BUILD DIRECTORIES. + run_tests.py -b + Runs all tests in KNOWN BUILD DIRECTORIES that have been + built. + run_tests.py foo/ + Runs all tests in the foo/ directory and all Python tests in + the directory test. The Python tests are instructed to look + for binaries in foo/. + run_tests.py bar_test.exe test/baz_test.exe foo/ bar/ + Runs foo/bar_test.exe, bar/bar_test.exe, foo/baz_test.exe, and + bar/baz_test.exe. + run_tests.py foo bar test/foo_test.py + Runs test/foo_test.py twice instructing it to look for its + test binaries in the directories foo and bar, + correspondingly. + +KNOWN BUILD DIRECTORIES + run_tests.py knows about directories where the SCons build script + deposits its products. These are the directories where run_tests.py + will be looking for its binaries. Currently, %(proj)s's SConstruct file + defines them as follows (the default build directory is the first one + listed in each group): + On Windows: + <%(proj)s root>/scons/build/win-dbg8/%(proj)s/scons/ + <%(proj)s root>/scons/build/win-opt8/%(proj)s/scons/ + On Mac: + <%(proj)s root>/scons/build/mac-dbg/%(proj)s/scons/ + <%(proj)s root>/scons/build/mac-opt/%(proj)s/scons/ + On other platforms: + <%(proj)s root>/scons/build/dbg/%(proj)s/scons/ + <%(proj)s root>/scons/build/opt/%(proj)s/scons/""" + +IS_WINDOWS = os.name == 'nt' +IS_MAC = os.name == 'posix' and os.uname()[0] == 'Darwin' +IS_CYGWIN = os.name == 'posix' and 'CYGWIN' in os.uname()[0] + +# Definition of CONFIGS must match that of the build directory names in the +# SConstruct script. The first list item is the default build configuration. +if IS_WINDOWS: + CONFIGS = ('win-dbg8', 'win-opt8') +elif IS_MAC: + CONFIGS = ('mac-dbg', 'mac-opt') +else: + CONFIGS = ('dbg', 'opt') + +if IS_WINDOWS or IS_CYGWIN: + PYTHON_TEST_REGEX = re.compile(r'_(unit)?test\.py$', re.IGNORECASE) + BINARY_TEST_REGEX = re.compile(r'_(unit)?test(\.exe)?$', re.IGNORECASE) + BINARY_TEST_SEARCH_REGEX = re.compile(r'_(unit)?test\.exe$', re.IGNORECASE) +else: + PYTHON_TEST_REGEX = re.compile(r'_(unit)?test\.py$') + BINARY_TEST_REGEX = re.compile(r'_(unit)?test$') + BINARY_TEST_SEARCH_REGEX = BINARY_TEST_REGEX + + +def _GetGtestBuildDir(injected_os, script_dir, config): + """Calculates path to the Google Test SCons build directory.""" + + return injected_os.path.normpath(injected_os.path.join(script_dir, + 'scons/build', + config, + 'gtest/scons')) + + +def _GetConfigFromBuildDir(build_dir): + """Extracts the configuration name from the build directory.""" + + # We don't want to depend on build_dir containing the correct path + # separators. + m = re.match(r'.*[\\/]([^\\/]+)[\\/][^\\/]+[\\/]scons[\\/]?$', build_dir) + if m: + return m.group(1) + else: + print >>sys.stderr, ('%s is an invalid build directory that does not ' + 'correspond to any configuration.' % (build_dir,)) + return '' + + +# All paths in this script are either absolute or relative to the current +# working directory, unless otherwise specified. +class TestRunner(object): + """Provides facilities for running Python and binary tests for Google Test.""" + + def __init__(self, + script_dir, + build_dir_var_name='GTEST_BUILD_DIR', + injected_os=os, + injected_subprocess=subprocess, + injected_build_dir_finder=_GetGtestBuildDir): + """Initializes a TestRunner instance. + + Args: + script_dir: File path to the calling script. + build_dir_var_name: Name of the env variable used to pass the + the build directory path to the invoked + tests. + injected_os: standard os module or a mock/stub for + testing. + injected_subprocess: standard subprocess module or a mock/stub + for testing + injected_build_dir_finder: function that determines the path to + the build directory. + """ + + self.os = injected_os + self.subprocess = injected_subprocess + self.build_dir_finder = injected_build_dir_finder + self.build_dir_var_name = build_dir_var_name + self.script_dir = script_dir + + def _GetBuildDirForConfig(self, config): + """Returns the build directory for a given configuration.""" + + return self.build_dir_finder(self.os, self.script_dir, config) + + def _Run(self, args): + """Runs the executable with given args (args[0] is the executable name). + + Args: + args: Command line arguments for the process. + + Returns: + Process's exit code if it exits normally, or -signal if the process is + killed by a signal. + """ + + if self.subprocess: + return self.subprocess.Popen(args).wait() + else: + return self.os.spawnv(self.os.P_WAIT, args[0], args) + + def _RunBinaryTest(self, test): + """Runs the binary test given its path. + + Args: + test: Path to the test binary. + + Returns: + Process's exit code if it exits normally, or -signal if the process is + killed by a signal. + """ + + return self._Run([test]) + + def _RunPythonTest(self, test, build_dir): + """Runs the Python test script with the specified build directory. + + Args: + test: Path to the test's Python script. + build_dir: Path to the directory where the test binary is to be found. + + Returns: + Process's exit code if it exits normally, or -signal if the process is + killed by a signal. + """ + + old_build_dir = self.os.environ.get(self.build_dir_var_name) + + try: + self.os.environ[self.build_dir_var_name] = build_dir + + # If this script is run on a Windows machine that has no association + # between the .py extension and a python interpreter, simply passing + # the script name into subprocess.Popen/os.spawn will not work. + print 'Running %s . . .' % (test,) + return self._Run([sys.executable, test]) + + finally: + if old_build_dir is None: + del self.os.environ[self.build_dir_var_name] + else: + self.os.environ[self.build_dir_var_name] = old_build_dir + + def _FindFilesByRegex(self, directory, regex): + """Returns files in a directory whose names match a regular expression. + + Args: + directory: Path to the directory to search for files. + regex: Regular expression to filter file names. + + Returns: + The list of the paths to the files in the directory. + """ + + return [self.os.path.join(directory, file_name) + for file_name in self.os.listdir(directory) + if re.search(regex, file_name)] + + # TODO(vladl@google.com): Implement parsing of scons/SConscript to run all + # tests defined there when no tests are specified. + # TODO(vladl@google.com): Update the docstring after the code is changed to + # try to test all builds defined in scons/SConscript. + def GetTestsToRun(self, + args, + named_configurations, + built_configurations, + available_configurations=CONFIGS, + python_tests_to_skip=None): + """Determines what tests should be run. + + Args: + args: The list of non-option arguments from the command line. + named_configurations: The list of configurations specified via -c or -a. + built_configurations: True if -b has been specified. + available_configurations: a list of configurations available on the + current platform, injectable for testing. + python_tests_to_skip: a collection of (configuration, python test name)s + that need to be skipped. + + Returns: + A tuple with 2 elements: the list of Python tests to run and the list of + binary tests to run. + """ + + if named_configurations == 'all': + named_configurations = ','.join(available_configurations) + + normalized_args = [self.os.path.normpath(arg) for arg in args] + + # A final list of build directories which will be searched for the test + # binaries. First, add directories specified directly on the command + # line. + build_dirs = filter(self.os.path.isdir, normalized_args) + + # Adds build directories specified via their build configurations using + # the -c or -a options. + if named_configurations: + build_dirs += [self._GetBuildDirForConfig(config) + for config in named_configurations.split(',')] + + # Adds KNOWN BUILD DIRECTORIES if -b is specified. + if built_configurations: + build_dirs += [self._GetBuildDirForConfig(config) + for config in available_configurations + if self.os.path.isdir(self._GetBuildDirForConfig(config))] + + # If no directories were specified either via -a, -b, -c, or directly, use + # the default configuration. + elif not build_dirs: + build_dirs = [self._GetBuildDirForConfig(available_configurations[0])] + + # Makes sure there are no duplications. + build_dirs = sets.Set(build_dirs) + + errors_found = False + listed_python_tests = [] # All Python tests listed on the command line. + listed_binary_tests = [] # All binary tests listed on the command line. + + test_dir = self.os.path.normpath(self.os.path.join(self.script_dir, 'test')) + + # Sifts through non-directory arguments fishing for any Python or binary + # tests and detecting errors. + for argument in sets.Set(normalized_args) - build_dirs: + if re.search(PYTHON_TEST_REGEX, argument): + python_path = self.os.path.join(test_dir, + self.os.path.basename(argument)) + if self.os.path.isfile(python_path): + listed_python_tests.append(python_path) + else: + sys.stderr.write('Unable to find Python test %s' % argument) + errors_found = True + elif re.search(BINARY_TEST_REGEX, argument): + # This script also accepts binary test names prefixed with test/ for + # the convenience of typing them (can use path completions in the + # shell). Strips test/ prefix from the binary test names. + listed_binary_tests.append(self.os.path.basename(argument)) + else: + sys.stderr.write('%s is neither test nor build directory' % argument) + errors_found = True + + if errors_found: + return None + + user_has_listed_tests = listed_python_tests or listed_binary_tests + + if user_has_listed_tests: + selected_python_tests = listed_python_tests + else: + selected_python_tests = self._FindFilesByRegex(test_dir, + PYTHON_TEST_REGEX) + + # TODO(vladl@google.com): skip unbuilt Python tests when -b is specified. + python_test_pairs = [] + for directory in build_dirs: + for test in selected_python_tests: + config = _GetConfigFromBuildDir(directory) + file_name = os.path.basename(test) + if python_tests_to_skip and (config, file_name) in python_tests_to_skip: + print ('NOTE: %s is skipped for configuration %s, as it does not ' + 'work there.' % (file_name, config)) + else: + python_test_pairs.append((directory, test)) + + binary_test_pairs = [] + for directory in build_dirs: + if user_has_listed_tests: + binary_test_pairs.extend( + [(directory, self.os.path.join(directory, test)) + for test in listed_binary_tests]) + else: + tests = self._FindFilesByRegex(directory, BINARY_TEST_SEARCH_REGEX) + binary_test_pairs.extend([(directory, test) for test in tests]) + + return (python_test_pairs, binary_test_pairs) + + def RunTests(self, python_tests, binary_tests): + """Runs Python and binary tests and reports results to the standard output. + + Args: + python_tests: List of Python tests to run in the form of tuples + (build directory, Python test script). + binary_tests: List of binary tests to run in the form of tuples + (build directory, binary file). + + Returns: + The exit code the program should pass into sys.exit(). + """ + + if python_tests or binary_tests: + results = [] + for directory, test in python_tests: + results.append((directory, + test, + self._RunPythonTest(test, directory) == 0)) + for directory, test in binary_tests: + results.append((directory, + self.os.path.basename(test), + self._RunBinaryTest(test) == 0)) + + failed = [(directory, test) + for (directory, test, success) in results + if not success] + print + print '%d tests run.' % len(results) + if failed: + print 'The following %d tests failed:' % len(failed) + for (directory, test) in failed: + print '%s in %s' % (test, directory) + return 1 + else: + print 'All tests passed!' + else: # No tests defined + print 'Nothing to test - no tests specified!' + + return 0 + + +def ParseArgs(project_name, argv=None, help_callback=None): + """Parses the options run_tests.py uses.""" + + # Suppresses lint warning on unused arguments. These arguments are + # required by optparse, even though they are unused. + # pylint: disable-msg=W0613 + def PrintHelp(option, opt, value, parser): + print HELP_MSG % {'proj': project_name} + sys.exit(1) + + parser = optparse.OptionParser() + parser.add_option('-c', + action='store', + dest='configurations', + default=None) + parser.add_option('-a', + action='store_const', + dest='configurations', + default=None, + const='all') + parser.add_option('-b', + action='store_const', + dest='built_configurations', + default=False, + const=True) + # Replaces the built-in help with ours. + parser.remove_option('-h') + parser.add_option('-h', '--help', + action='callback', + callback=help_callback or PrintHelp) + return parser.parse_args(argv) diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util_test.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util_test.py new file mode 100755 index 00000000..9c55726f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/test/run_tests_util_test.py @@ -0,0 +1,676 @@ +#!/usr/bin/env python +# +# Copyright 2009 Google Inc. All Rights Reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests for run_tests_util.py test runner script.""" + +__author__ = 'vladl@google.com (Vlad Losev)' + +import os +import re +import sets +import unittest + +import run_tests_util + + +GTEST_DBG_DIR = 'scons/build/dbg/gtest/scons' +GTEST_OPT_DIR = 'scons/build/opt/gtest/scons' +GTEST_OTHER_DIR = 'scons/build/other/gtest/scons' + + +def AddExeExtension(path): + """Appends .exe to the path on Windows or Cygwin.""" + + if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: + return path + '.exe' + else: + return path + + +class FakePath(object): + """A fake os.path module for testing.""" + + def __init__(self, current_dir=os.getcwd(), known_paths=None): + self.current_dir = current_dir + self.tree = {} + self.path_separator = os.sep + + # known_paths contains either absolute or relative paths. Relative paths + # are absolutized with self.current_dir. + if known_paths: + self._AddPaths(known_paths) + + def _AddPath(self, path): + ends_with_slash = path.endswith('/') + path = self.abspath(path) + if ends_with_slash: + path += self.path_separator + name_list = path.split(self.path_separator) + tree = self.tree + for name in name_list[:-1]: + if not name: + continue + if name in tree: + tree = tree[name] + else: + tree[name] = {} + tree = tree[name] + + name = name_list[-1] + if name: + if name in tree: + assert tree[name] == 1 + else: + tree[name] = 1 + + def _AddPaths(self, paths): + for path in paths: + self._AddPath(path) + + def PathElement(self, path): + """Returns an internal representation of directory tree entry for path.""" + tree = self.tree + name_list = self.abspath(path).split(self.path_separator) + for name in name_list: + if not name: + continue + tree = tree.get(name, None) + if tree is None: + break + + return tree + + # Silences pylint warning about using standard names. + # pylint: disable-msg=C6409 + def normpath(self, path): + return os.path.normpath(path) + + def abspath(self, path): + return self.normpath(os.path.join(self.current_dir, path)) + + def isfile(self, path): + return self.PathElement(self.abspath(path)) == 1 + + def isdir(self, path): + return type(self.PathElement(self.abspath(path))) == type(dict()) + + def basename(self, path): + return os.path.basename(path) + + def dirname(self, path): + return os.path.dirname(path) + + def join(self, *kargs): + return os.path.join(*kargs) + + +class FakeOs(object): + """A fake os module for testing.""" + P_WAIT = os.P_WAIT + + def __init__(self, fake_path_module): + self.path = fake_path_module + + # Some methods/attributes are delegated to the real os module. + self.environ = os.environ + + # pylint: disable-msg=C6409 + def listdir(self, path): + assert self.path.isdir(path) + return self.path.PathElement(path).iterkeys() + + def spawnv(self, wait, executable, *kargs): + assert wait == FakeOs.P_WAIT + return self.spawn_impl(executable, kargs) + + +class GetTestsToRunTest(unittest.TestCase): + """Exercises TestRunner.GetTestsToRun.""" + + def NormalizeGetTestsToRunResults(self, results): + """Normalizes path data returned from GetTestsToRun for comparison.""" + + def NormalizePythonTestPair(pair): + """Normalizes path data in the (directory, python_script) pair.""" + + return (os.path.normpath(pair[0]), os.path.normpath(pair[1])) + + def NormalizeBinaryTestPair(pair): + """Normalizes path data in the (directory, binary_executable) pair.""" + + directory, executable = map(os.path.normpath, pair) + + # On Windows and Cygwin, the test file names have the .exe extension, but + # they can be invoked either by name or by name+extension. Our test must + # accommodate both situations. + if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: + executable = re.sub(r'\.exe$', '', executable) + return (directory, executable) + + python_tests = sets.Set(map(NormalizePythonTestPair, results[0])) + binary_tests = sets.Set(map(NormalizeBinaryTestPair, results[1])) + return (python_tests, binary_tests) + + def AssertResultsEqual(self, results, expected): + """Asserts results returned by GetTestsToRun equal to expected results.""" + + self.assertEqual(self.NormalizeGetTestsToRunResults(results), + self.NormalizeGetTestsToRunResults(expected), + 'Incorrect set of tests returned:\n%s\nexpected:\n%s' % + (results, expected)) + + def setUp(self): + self.fake_os = FakeOs(FakePath( + current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), + known_paths=[AddExeExtension(GTEST_DBG_DIR + '/gtest_unittest'), + AddExeExtension(GTEST_OPT_DIR + '/gtest_unittest'), + 'test/gtest_color_test.py'])) + self.fake_configurations = ['dbg', 'opt'] + self.test_runner = run_tests_util.TestRunner(script_dir='.', + injected_os=self.fake_os, + injected_subprocess=None) + + def testBinaryTestsOnly(self): + """Exercises GetTestsToRun with parameters designating binary tests only.""" + + # A default build. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + '', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # An explicitly specified directory. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_unittest'], + '', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # A particular configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + 'other', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_OTHER_DIR, GTEST_OTHER_DIR + '/gtest_unittest')])) + + # All available configurations + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + 'all', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), + (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) + + # All built configurations (unbuilt don't cause failure). + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + '', + True, + available_configurations=self.fake_configurations + ['unbuilt']), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), + (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) + + # A combination of an explicit directory and a configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_unittest'], + 'opt', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), + (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) + + # Same test specified in an explicit directory and via a configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_unittest'], + 'dbg', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # All built configurations + explicit directory + explicit configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_unittest'], + 'opt', + True, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), + (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) + + def testPythonTestsOnly(self): + """Exercises GetTestsToRun with parameters designating Python tests only.""" + + # A default build. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_color_test.py'], + '', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [])) + + # An explicitly specified directory. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'test/gtest_color_test.py'], + '', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [])) + + # A particular configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_color_test.py'], + 'other', + False, + available_configurations=self.fake_configurations), + ([(GTEST_OTHER_DIR, 'test/gtest_color_test.py')], + [])) + + # All available configurations + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['test/gtest_color_test.py'], + 'all', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), + (GTEST_OPT_DIR, 'test/gtest_color_test.py')], + [])) + + # All built configurations (unbuilt don't cause failure). + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_color_test.py'], + '', + True, + available_configurations=self.fake_configurations + ['unbuilt']), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), + (GTEST_OPT_DIR, 'test/gtest_color_test.py')], + [])) + + # A combination of an explicit directory and a configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_color_test.py'], + 'opt', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), + (GTEST_OPT_DIR, 'test/gtest_color_test.py')], + [])) + + # Same test specified in an explicit directory and via a configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_color_test.py'], + 'dbg', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [])) + + # All built configurations + explicit directory + explicit configuration. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [GTEST_DBG_DIR, 'gtest_color_test.py'], + 'opt', + True, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), + (GTEST_OPT_DIR, 'test/gtest_color_test.py')], + [])) + + def testCombinationOfBinaryAndPythonTests(self): + """Exercises GetTestsToRun with mixed binary/Python tests.""" + + # Use only default configuration for this test. + + # Neither binary nor Python tests are specified so find all. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [], + '', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # Specifying both binary and Python tests. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest', 'gtest_color_test.py'], + '', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # Specifying binary tests suppresses Python tests. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + '', + False, + available_configurations=self.fake_configurations), + ([], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) + + # Specifying Python tests suppresses binary tests. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_color_test.py'], + '', + False, + available_configurations=self.fake_configurations), + ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + [])) + + def testIgnoresNonTestFiles(self): + """Verifies that GetTestsToRun ignores non-test files in the filesystem.""" + + self.fake_os = FakeOs(FakePath( + current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), + known_paths=[AddExeExtension(GTEST_DBG_DIR + '/gtest_nontest'), + 'test/'])) + self.test_runner = run_tests_util.TestRunner(script_dir='.', + injected_os=self.fake_os, + injected_subprocess=None) + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [], + '', + True, + available_configurations=self.fake_configurations), + ([], [])) + + def testWorksFromDifferentDir(self): + """Exercises GetTestsToRun from a directory different from run_test.py's.""" + + # Here we simulate an test script in directory /d/ called from the + # directory /a/b/c/. + self.fake_os = FakeOs(FakePath( + current_dir=os.path.abspath('/a/b/c'), + known_paths=[ + '/a/b/c/', + AddExeExtension('/d/' + GTEST_DBG_DIR + '/gtest_unittest'), + AddExeExtension('/d/' + GTEST_OPT_DIR + '/gtest_unittest'), + '/d/test/gtest_color_test.py'])) + self.fake_configurations = ['dbg', 'opt'] + self.test_runner = run_tests_util.TestRunner(script_dir='/d/', + injected_os=self.fake_os, + injected_subprocess=None) + # A binary test. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_unittest'], + '', + False, + available_configurations=self.fake_configurations), + ([], + [('/d/' + GTEST_DBG_DIR, '/d/' + GTEST_DBG_DIR + '/gtest_unittest')])) + + # A Python test. + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + ['gtest_color_test.py'], + '', + False, + available_configurations=self.fake_configurations), + ([('/d/' + GTEST_DBG_DIR, '/d/test/gtest_color_test.py')], [])) + + def testNonTestBinary(self): + """Exercises GetTestsToRun with a non-test parameter.""" + + self.assert_( + not self.test_runner.GetTestsToRun( + ['gtest_unittest_not_really'], + '', + False, + available_configurations=self.fake_configurations)) + + def testNonExistingPythonTest(self): + """Exercises GetTestsToRun with a non-existent Python test parameter.""" + + self.assert_( + not self.test_runner.GetTestsToRun( + ['nonexistent_test.py'], + '', + False, + available_configurations=self.fake_configurations)) + + if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: + + def testDoesNotPickNonExeFilesOnWindows(self): + """Verifies that GetTestsToRun does not find _test files on Windows.""" + + self.fake_os = FakeOs(FakePath( + current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), + known_paths=['/d/' + GTEST_DBG_DIR + '/gtest_test', 'test/'])) + self.test_runner = run_tests_util.TestRunner(script_dir='.', + injected_os=self.fake_os, + injected_subprocess=None) + self.AssertResultsEqual( + self.test_runner.GetTestsToRun( + [], + '', + True, + available_configurations=self.fake_configurations), + ([], [])) + + +class RunTestsTest(unittest.TestCase): + """Exercises TestRunner.RunTests.""" + + def SpawnSuccess(self, unused_executable, unused_argv): + """Fakes test success by returning 0 as an exit code.""" + + self.num_spawn_calls += 1 + return 0 + + def SpawnFailure(self, unused_executable, unused_argv): + """Fakes test success by returning 1 as an exit code.""" + + self.num_spawn_calls += 1 + return 1 + + def setUp(self): + self.fake_os = FakeOs(FakePath( + current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), + known_paths=[ + AddExeExtension(GTEST_DBG_DIR + '/gtest_unittest'), + AddExeExtension(GTEST_OPT_DIR + '/gtest_unittest'), + 'test/gtest_color_test.py'])) + self.fake_configurations = ['dbg', 'opt'] + self.test_runner = run_tests_util.TestRunner( + script_dir=os.path.dirname(__file__) or '.', + injected_os=self.fake_os, + injected_subprocess=None) + self.num_spawn_calls = 0 # A number of calls to spawn. + + def testRunPythonTestSuccess(self): + """Exercises RunTests to handle a Python test success.""" + + self.fake_os.spawn_impl = self.SpawnSuccess + self.assertEqual( + self.test_runner.RunTests( + [(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + []), + 0) + self.assertEqual(self.num_spawn_calls, 1) + + def testRunBinaryTestSuccess(self): + """Exercises RunTests to handle a binary test success.""" + + self.fake_os.spawn_impl = self.SpawnSuccess + self.assertEqual( + self.test_runner.RunTests( + [], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), + 0) + self.assertEqual(self.num_spawn_calls, 1) + + def testRunPythonTestFauilure(self): + """Exercises RunTests to handle a Python test failure.""" + + self.fake_os.spawn_impl = self.SpawnFailure + self.assertEqual( + self.test_runner.RunTests( + [(GTEST_DBG_DIR, 'test/gtest_color_test.py')], + []), + 1) + self.assertEqual(self.num_spawn_calls, 1) + + def testRunBinaryTestFailure(self): + """Exercises RunTests to handle a binary test failure.""" + + self.fake_os.spawn_impl = self.SpawnFailure + self.assertEqual( + self.test_runner.RunTests( + [], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), + 1) + self.assertEqual(self.num_spawn_calls, 1) + + def testCombinedTestSuccess(self): + """Exercises RunTests to handle a success of both Python and binary test.""" + + self.fake_os.spawn_impl = self.SpawnSuccess + self.assertEqual( + self.test_runner.RunTests( + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), + 0) + self.assertEqual(self.num_spawn_calls, 2) + + def testCombinedTestSuccessAndFailure(self): + """Exercises RunTests to handle a success of both Python and binary test.""" + + def SpawnImpl(executable, argv): + self.num_spawn_calls += 1 + # Simulates failure of a Python test and success of a binary test. + if '.py' in executable or '.py' in argv[0]: + return 1 + else: + return 0 + + self.fake_os.spawn_impl = SpawnImpl + self.assertEqual( + self.test_runner.RunTests( + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')], + [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), + 0) + self.assertEqual(self.num_spawn_calls, 2) + + +class ParseArgsTest(unittest.TestCase): + """Exercises ParseArgs.""" + + def testNoOptions(self): + options, args = run_tests_util.ParseArgs('gtest', argv=['script.py']) + self.assertEqual(args, ['script.py']) + self.assert_(options.configurations is None) + self.assertFalse(options.built_configurations) + + def testOptionC(self): + options, args = run_tests_util.ParseArgs( + 'gtest', argv=['script.py', '-c', 'dbg']) + self.assertEqual(args, ['script.py']) + self.assertEqual(options.configurations, 'dbg') + self.assertFalse(options.built_configurations) + + def testOptionA(self): + options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-a']) + self.assertEqual(args, ['script.py']) + self.assertEqual(options.configurations, 'all') + self.assertFalse(options.built_configurations) + + def testOptionB(self): + options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-b']) + self.assertEqual(args, ['script.py']) + self.assert_(options.configurations is None) + self.assertTrue(options.built_configurations) + + def testOptionCAndOptionB(self): + options, args = run_tests_util.ParseArgs( + 'gtest', argv=['script.py', '-c', 'dbg', '-b']) + self.assertEqual(args, ['script.py']) + self.assertEqual(options.configurations, 'dbg') + self.assertTrue(options.built_configurations) + + def testOptionH(self): + help_called = [False] + + # Suppresses lint warning on unused arguments. These arguments are + # required by optparse, even though they are unused. + # pylint: disable-msg=W0613 + def VerifyHelp(option, opt, value, parser): + help_called[0] = True + + # Verifies that -h causes the help callback to be called. + help_called[0] = False + _, args = run_tests_util.ParseArgs( + 'gtest', argv=['script.py', '-h'], help_callback=VerifyHelp) + self.assertEqual(args, ['script.py']) + self.assertTrue(help_called[0]) + + # Verifies that --help causes the help callback to be called. + help_called[0] = False + _, args = run_tests_util.ParseArgs( + 'gtest', argv=['script.py', '--help'], help_callback=VerifyHelp) + self.assertEqual(args, ['script.py']) + self.assertTrue(help_called[0]) + + +if __name__ == '__main__': + unittest.main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/DebugProject.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/DebugProject.xcconfig new file mode 100644 index 00000000..3d68157d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/DebugProject.xcconfig @@ -0,0 +1,30 @@ +// +// DebugProject.xcconfig +// +// These are Debug Configuration project settings for the gtest framework and +// examples. It is set in the "Based On:" dropdown in the "Project" info +// dialog. +// This file is based on the Xcode Configuration files in: +// http://code.google.com/p/google-toolbox-for-mac/ +// + +#include "General.xcconfig" + +// No optimization +GCC_OPTIMIZATION_LEVEL = 0 + +// Deployment postprocessing is what triggers Xcode to strip, turn it off +DEPLOYMENT_POSTPROCESSING = NO + +// Dead code stripping off +DEAD_CODE_STRIPPING = NO + +// Debug symbols should be on obviously +GCC_GENERATE_DEBUGGING_SYMBOLS = YES + +// Define the DEBUG macro in all debug builds +OTHER_CFLAGS = $(OTHER_CFLAGS) -DDEBUG=1 + +// These are turned off to avoid STL incompatibilities with client code +// // Turns on special C++ STL checks to "encourage" good STL use +// GCC_PREPROCESSOR_DEFINITIONS = $(GCC_PREPROCESSOR_DEFINITIONS) _GLIBCXX_DEBUG_PEDANTIC _GLIBCXX_DEBUG _GLIBCPP_CONCEPT_CHECKS diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/FrameworkTarget.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/FrameworkTarget.xcconfig new file mode 100644 index 00000000..357b1c8f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/FrameworkTarget.xcconfig @@ -0,0 +1,17 @@ +// +// FrameworkTarget.xcconfig +// +// These are Framework target settings for the gtest framework and examples. It +// is set in the "Based On:" dropdown in the "Target" info dialog. +// This file is based on the Xcode Configuration files in: +// http://code.google.com/p/google-toolbox-for-mac/ +// + +// Dynamic libs need to be position independent +GCC_DYNAMIC_NO_PIC = NO + +// Dynamic libs should not have their external symbols stripped. +STRIP_STYLE = non-global + +// Let the user install by specifying the $DSTROOT with xcodebuild +SKIP_INSTALL = NO diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/General.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/General.xcconfig new file mode 100644 index 00000000..f23e3222 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/General.xcconfig @@ -0,0 +1,41 @@ +// +// General.xcconfig +// +// These are General configuration settings for the gtest framework and +// examples. +// This file is based on the Xcode Configuration files in: +// http://code.google.com/p/google-toolbox-for-mac/ +// + +// Build for PPC and Intel, 32- and 64-bit +ARCHS = i386 x86_64 ppc ppc64 + +// Zerolink prevents link warnings so turn it off +ZERO_LINK = NO + +// Prebinding considered unhelpful in 10.3 and later +PREBINDING = NO + +// Strictest warning policy +WARNING_CFLAGS = -Wall -Werror -Wendif-labels -Wnewline-eof -Wno-sign-compare -Wshadow + +// Work around Xcode bugs by using external strip. See: +// http://lists.apple.com/archives/Xcode-users/2006/Feb/msg00050.html +SEPARATE_STRIP = YES + +// Force C99 dialect +GCC_C_LANGUAGE_STANDARD = c99 + +// not sure why apple defaults this on, but it's pretty risky +ALWAYS_SEARCH_USER_PATHS = NO + +// Turn on position dependent code for most cases (overridden where appropriate) +GCC_DYNAMIC_NO_PIC = YES + +// Default SDK and minimum OS version is 10.4 +SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk +MACOSX_DEPLOYMENT_TARGET = 10.4 +GCC_VERSION = 4.0 + +// VERSIONING BUILD SETTINGS (used in Info.plist) +GTEST_VERSIONINFO_ABOUT = © 2008 Google Inc. diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/ReleaseProject.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/ReleaseProject.xcconfig new file mode 100644 index 00000000..5349f0a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/ReleaseProject.xcconfig @@ -0,0 +1,32 @@ +// +// ReleaseProject.xcconfig +// +// These are Release Configuration project settings for the gtest framework +// and examples. It is set in the "Based On:" dropdown in the "Project" info +// dialog. +// This file is based on the Xcode Configuration files in: +// http://code.google.com/p/google-toolbox-for-mac/ +// + +#include "General.xcconfig" + +// subconfig/Release.xcconfig + +// Optimize for space and size (Apple recommendation) +GCC_OPTIMIZATION_LEVEL = s + +// Deploment postprocessing is what triggers Xcode to strip +DEPLOYMENT_POSTPROCESSING = YES + +// No symbols +GCC_GENERATE_DEBUGGING_SYMBOLS = NO + +// Dead code strip does not affect ObjC code but can help for C +DEAD_CODE_STRIPPING = YES + +// NDEBUG is used by things like assert.h, so define it for general compat. +// ASSERT going away in release tends to create unused vars. +OTHER_CFLAGS = $(OTHER_CFLAGS) -DNDEBUG=1 -Wno-unused-variable + +// When we strip we want to strip all symbols in release, but save externals. +STRIP_STYLE = all diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/StaticLibraryTarget.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/StaticLibraryTarget.xcconfig new file mode 100644 index 00000000..3922fa51 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/StaticLibraryTarget.xcconfig @@ -0,0 +1,18 @@ +// +// StaticLibraryTarget.xcconfig +// +// These are static library target settings for libgtest.a. It +// is set in the "Based On:" dropdown in the "Target" info dialog. +// This file is based on the Xcode Configuration files in: +// http://code.google.com/p/google-toolbox-for-mac/ +// + +// Static libs can be included in bundles so make them position independent +GCC_DYNAMIC_NO_PIC = NO + +// Static libs should not have their internal globals or external symbols +// stripped. +STRIP_STYLE = debugging + +// Let the user install by specifying the $DSTROOT with xcodebuild +SKIP_INSTALL = NO diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/TestTarget.xcconfig b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/TestTarget.xcconfig new file mode 100644 index 00000000..e6652ba8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Config/TestTarget.xcconfig @@ -0,0 +1,8 @@ +// +// TestTarget.xcconfig +// +// These are Test target settings for the gtest framework and examples. It +// is set in the "Based On:" dropdown in the "Target" info dialog. + +PRODUCT_NAME = $(TARGET_NAME) +HEADER_SEARCH_PATHS = ../include diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Resources/Info.plist b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Resources/Info.plist new file mode 100644 index 00000000..9dd28ea1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Resources/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.google.${PRODUCT_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + GTEST_VERSIONINFO_LONG + CFBundleShortVersionString + GTEST_VERSIONINFO_SHORT + CFBundleGetInfoString + ${PRODUCT_NAME} GTEST_VERSIONINFO_LONG, ${GTEST_VERSIONINFO_ABOUT} + NSHumanReadableCopyright + ${GTEST_VERSIONINFO_ABOUT} + CSResourcesFileMapped + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/Info.plist b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/Info.plist new file mode 100644 index 00000000..f3852ede --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.google.gtest.${PRODUCT_NAME:identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CSResourcesFileMapped + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj new file mode 100644 index 00000000..497617eb --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj @@ -0,0 +1,457 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXAggregateTarget section */ + 4024D162113D7D2400C7059E /* Test */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 4024D169113D7D4600C7059E /* Build configuration list for PBXAggregateTarget "Test" */; + buildPhases = ( + 4024D161113D7D2400C7059E /* ShellScript */, + ); + dependencies = ( + 4024D166113D7D3100C7059E /* PBXTargetDependency */, + ); + name = Test; + productName = TestAndBuild; + }; + 4024D1E9113D83FF00C7059E /* TestAndBuild */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 4024D1F0113D842B00C7059E /* Build configuration list for PBXAggregateTarget "TestAndBuild" */; + buildPhases = ( + ); + dependencies = ( + 4024D1ED113D840900C7059E /* PBXTargetDependency */, + 4024D1EF113D840D00C7059E /* PBXTargetDependency */, + ); + name = TestAndBuild; + productName = TestAndBuild; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 3B7EB1250E5AEE3500C7F239 /* widget.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B7EB1230E5AEE3500C7F239 /* widget.cc */; }; + 3B7EB1260E5AEE3500C7F239 /* widget.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B7EB1240E5AEE3500C7F239 /* widget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B7EB1280E5AEE4600C7F239 /* widget_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */; }; + 3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D07F2C80486CC7A007CD1D0 /* Widget.framework */; }; + 4024D188113D7D7800C7059E /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4024D185113D7D5500C7059E /* libgtest.a */; }; + 4024D189113D7D7A00C7059E /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4024D183113D7D5500C7059E /* libgtest_main.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3B07BDF00E3F3FAE00647869 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = gTestExample; + }; + 4024D165113D7D3100C7059E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3B07BDE90E3F3F9E00647869; + remoteInfo = WidgetFrameworkTest; + }; + 4024D1EC113D840900C7059E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = WidgetFramework; + }; + 4024D1EE113D840D00C7059E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4024D162113D7D2400C7059E; + remoteInfo = Test; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WidgetFrameworkTest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B7EB1230E5AEE3500C7F239 /* widget.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget.cc; sourceTree = ""; }; + 3B7EB1240E5AEE3500C7F239 /* widget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = widget.h; sourceTree = ""; }; + 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget_test.cc; sourceTree = ""; }; + 4024D183113D7D5500C7059E /* libgtest_main.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgtest_main.a; path = /usr/local/lib/libgtest_main.a; sourceTree = ""; }; + 4024D185113D7D5500C7059E /* libgtest.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgtest.a; path = /usr/local/lib/libgtest.a; sourceTree = ""; }; + 4024D1E2113D838200C7059E /* runtests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = runtests.sh; sourceTree = ""; }; + 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8D07F2C80486CC7A007CD1D0 /* Widget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Widget.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3B07BDE80E3F3F9E00647869 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4024D189113D7D7A00C7059E /* libgtest_main.a in Frameworks */, + 4024D188113D7D7800C7059E /* libgtest.a in Frameworks */, + 3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8D07F2C80486CC7A007CD1D0 /* Widget.framework */, + 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* gTestExample */ = { + isa = PBXGroup; + children = ( + 4024D1E1113D836C00C7059E /* Scripts */, + 08FB77ACFE841707C02AAC07 /* Source */, + 089C1665FE841158C02AAC07 /* Resources */, + 3B07BE350E4094E400647869 /* Test */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DDFF38A45A11DB9C8B /* Products */, + ); + name = gTestExample; + sourceTree = ""; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 4024D183113D7D5500C7059E /* libgtest_main.a */, + 4024D185113D7D5500C7059E /* libgtest.a */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D07F2C70486CC7A007CD1D0 /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77ACFE841707C02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 3B7EB1230E5AEE3500C7F239 /* widget.cc */, + 3B7EB1240E5AEE3500C7F239 /* widget.h */, + ); + name = Source; + sourceTree = ""; + }; + 3B07BE350E4094E400647869 /* Test */ = { + isa = PBXGroup; + children = ( + 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */, + ); + name = Test; + sourceTree = ""; + }; + 4024D1E1113D836C00C7059E /* Scripts */ = { + isa = PBXGroup; + children = ( + 4024D1E2113D838200C7059E /* runtests.sh */, + ); + name = Scripts; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B7EB1260E5AEE3500C7F239 /* widget.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3B07BDF40E3F3FB600647869 /* Build configuration list for PBXNativeTarget "WidgetFrameworkTest" */; + buildPhases = ( + 3B07BDE70E3F3F9E00647869 /* Sources */, + 3B07BDE80E3F3F9E00647869 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 3B07BDF10E3F3FAE00647869 /* PBXTargetDependency */, + ); + name = WidgetFrameworkTest; + productName = gTestExampleTest; + productReference = 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */; + productType = "com.apple.product-type.tool"; + }; + 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "WidgetFramework" */; + buildPhases = ( + 8D07F2C10486CC7A007CD1D0 /* Sources */, + 8D07F2C30486CC7A007CD1D0 /* Frameworks */, + 8D07F2BD0486CC7A007CD1D0 /* Headers */, + 8D07F2BF0486CC7A007CD1D0 /* Resources */, + 8D07F2C50486CC7A007CD1D0 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WidgetFramework; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = gTestExample; + productReference = 8D07F2C80486CC7A007CD1D0 /* Widget.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "WidgetFramework" */; + compatibilityVersion = "Xcode 2.4"; + hasScannedForEncodings = 1; + mainGroup = 0867D691FE84028FC02AAC07 /* gTestExample */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */, + 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */, + 4024D162113D7D2400C7059E /* Test */, + 4024D1E9113D83FF00C7059E /* TestAndBuild */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D07F2C50486CC7A007CD1D0 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 4024D161113D7D2400C7059E /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/bash $SRCROOT/runtests.sh $BUILT_PRODUCTS_DIR/WidgetFrameworkTest\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3B07BDE70E3F3F9E00647869 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B7EB1280E5AEE4600C7F239 /* widget_test.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D07F2C10486CC7A007CD1D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B7EB1250E5AEE3500C7F239 /* widget.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 3B07BDF10E3F3FAE00647869 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */; + targetProxy = 3B07BDF00E3F3FAE00647869 /* PBXContainerItemProxy */; + }; + 4024D166113D7D3100C7059E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */; + targetProxy = 4024D165113D7D3100C7059E /* PBXContainerItemProxy */; + }; + 4024D1ED113D840900C7059E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */; + targetProxy = 4024D1EC113D840900C7059E /* PBXContainerItemProxy */; + }; + 4024D1EF113D840D00C7059E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4024D162113D7D2400C7059E /* Test */; + targetProxy = 4024D1EE113D840D00C7059E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 3B07BDEC0E3F3F9F00647869 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = WidgetFrameworkTest; + }; + name = Debug; + }; + 3B07BDED0E3F3F9F00647869 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = WidgetFrameworkTest; + }; + name = Release; + }; + 4024D163113D7D2400C7059E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = TestAndBuild; + }; + name = Debug; + }; + 4024D164113D7D2400C7059E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = TestAndBuild; + }; + name = Release; + }; + 4024D1EA113D83FF00C7059E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = TestAndBuild; + }; + name = Debug; + }; + 4024D1EB113D83FF00C7059E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = TestAndBuild; + }; + name = Release; + }; + 4FADC24308B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@loader_path/../Frameworks"; + PRODUCT_NAME = Widget; + }; + name = Debug; + }; + 4FADC24408B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@loader_path/../Frameworks"; + PRODUCT_NAME = Widget; + }; + name = Release; + }; + 4FADC24708B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_VERSION = 4.0; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 4FADC24808B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_VERSION = 4.0; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3B07BDF40E3F3FB600647869 /* Build configuration list for PBXNativeTarget "WidgetFrameworkTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B07BDEC0E3F3F9F00647869 /* Debug */, + 3B07BDED0E3F3F9F00647869 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4024D169113D7D4600C7059E /* Build configuration list for PBXAggregateTarget "Test" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4024D163113D7D2400C7059E /* Debug */, + 4024D164113D7D2400C7059E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4024D1F0113D842B00C7059E /* Build configuration list for PBXAggregateTarget "TestAndBuild" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4024D1EA113D83FF00C7059E /* Debug */, + 4024D1EB113D83FF00C7059E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "WidgetFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24308B4156D00ABE55E /* Debug */, + 4FADC24408B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "WidgetFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24708B4156D00ABE55E /* Debug */, + 4FADC24808B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/runtests.sh b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/runtests.sh new file mode 100644 index 00000000..4a0d413e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/runtests.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Executes the samples and tests for the Google Test Framework. + +# Help the dynamic linker find the path to the libraries. +export DYLD_FRAMEWORK_PATH=$BUILT_PRODUCTS_DIR +export DYLD_LIBRARY_PATH=$BUILT_PRODUCTS_DIR + +# Create some executables. +test_executables=$@ + +# Now execute each one in turn keeping track of how many succeeded and failed. +succeeded=0 +failed=0 +failed_list=() +for test in ${test_executables[*]}; do + "$test" + result=$? + if [ $result -eq 0 ]; then + succeeded=$(( $succeeded + 1 )) + else + failed=$(( failed + 1 )) + failed_list="$failed_list $test" + fi +done + +# Report the successes and failures to the console. +echo "Tests complete with $succeeded successes and $failed failures." +if [ $failed -ne 0 ]; then + echo "The following tests failed:" + echo $failed_list +fi +exit $failed diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.cc new file mode 100644 index 00000000..bfc4e7fc --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.cc @@ -0,0 +1,63 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: preston.a.jackson@gmail.com (Preston Jackson) +// +// Google Test - FrameworkSample +// widget.cc +// + +// Widget is a very simple class used for demonstrating the use of gtest + +#include "widget.h" + +Widget::Widget(int number, const std::string& name) + : number_(number), + name_(name) {} + +Widget::~Widget() {} + +float Widget::GetFloatValue() const { + return number_; +} + +int Widget::GetIntValue() const { + return static_cast(number_); +} + +std::string Widget::GetStringValue() const { + return name_; +} + +void Widget::GetCharPtrValue(char* buffer, size_t max_size) const { + // Copy the char* representation of name_ into buffer, up to max_size. + strncpy(buffer, name_.c_str(), max_size-1); + buffer[max_size-1] = '\0'; + return; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.h new file mode 100644 index 00000000..0c55cdc8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget.h @@ -0,0 +1,59 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: preston.a.jackson@gmail.com (Preston Jackson) +// +// Google Test - FrameworkSample +// widget.h +// + +// Widget is a very simple class used for demonstrating the use of gtest. It +// simply stores two values a string and an integer, which are returned via +// public accessors in multiple forms. + +#import + +class Widget { + public: + Widget(int number, const std::string& name); + ~Widget(); + + // Public accessors to number data + float GetFloatValue() const; + int GetIntValue() const; + + // Public accessors to the string data + std::string GetStringValue() const; + void GetCharPtrValue(char* buffer, size_t max_size) const; + + private: + // Data members + float number_; + std::string name_; +}; diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget_test.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget_test.cc new file mode 100644 index 00000000..61c0d2ff --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Samples/FrameworkSample/widget_test.cc @@ -0,0 +1,68 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: preston.a.jackson@gmail.com (Preston Jackson) +// +// Google Test - FrameworkSample +// widget_test.cc +// + +// This is a simple test file for the Widget class in the Widget.framework + +#include +#include + +#include + +// This test verifies that the constructor sets the internal state of the +// Widget class correctly. +TEST(WidgetInitializerTest, TestConstructor) { + Widget widget(1.0f, "name"); + EXPECT_FLOAT_EQ(1.0f, widget.GetFloatValue()); + EXPECT_EQ(std::string("name"), widget.GetStringValue()); +} + +// This test verifies the conversion of the float and string values to int and +// char*, respectively. +TEST(WidgetInitializerTest, TestConversion) { + Widget widget(1.0f, "name"); + EXPECT_EQ(1, widget.GetIntValue()); + + size_t max_size = 128; + char buffer[max_size]; + widget.GetCharPtrValue(buffer, max_size); + EXPECT_STREQ("name", buffer); +} + +// Use the Google Test main that is linked into the framework. It does something +// like this: +// int main(int argc, char** argv) { +// testing::InitGoogleTest(&argc, argv); +// return RUN_ALL_TESTS(); +// } diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/runtests.sh b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/runtests.sh new file mode 100644 index 00000000..3fc229f1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/runtests.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Executes the samples and tests for the Google Test Framework. + +# Help the dynamic linker find the path to the libraries. +export DYLD_FRAMEWORK_PATH=$BUILT_PRODUCTS_DIR +export DYLD_LIBRARY_PATH=$BUILT_PRODUCTS_DIR + +# Create some executables. +test_executables=("$BUILT_PRODUCTS_DIR/gtest_unittest-framework" + "$BUILT_PRODUCTS_DIR/gtest_unittest" + "$BUILT_PRODUCTS_DIR/sample1_unittest-framework" + "$BUILT_PRODUCTS_DIR/sample1_unittest-static") + +# Now execute each one in turn keeping track of how many succeeded and failed. +succeeded=0 +failed=0 +failed_list=() +for test in ${test_executables[*]}; do + "$test" + result=$? + if [ $result -eq 0 ]; then + succeeded=$(( $succeeded + 1 )) + else + failed=$(( failed + 1 )) + failed_list="$failed_list $test" + fi +done + +# Report the successes and failures to the console. +echo "Tests complete with $succeeded successes and $failed failures." +if [ $failed -ne 0 ]; then + echo "The following tests failed:" + echo $failed_list +fi +exit $failed diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/versiongenerate.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/versiongenerate.py new file mode 100755 index 00000000..81de8c96 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/Scripts/versiongenerate.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# +# Copyright 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""A script to prepare version informtion for use the gtest Info.plist file. + + This script extracts the version information from the configure.ac file and + uses it to generate a header file containing the same information. The + #defines in this header file will be included in during the generation of + the Info.plist of the framework, giving the correct value to the version + shown in the Finder. + + This script makes the following assumptions (these are faults of the script, + not problems with the Autoconf): + 1. The AC_INIT macro will be contained within the first 1024 characters + of configure.ac + 2. The version string will be 3 integers separated by periods and will be + surrounded by squre brackets, "[" and "]" (e.g. [1.0.1]). The first + segment represents the major version, the second represents the minor + version and the third represents the fix version. + 3. No ")" character exists between the opening "(" and closing ")" of + AC_INIT, including in comments and character strings. +""" + +import sys +import re + +# Read the command line argument (the output directory for Version.h) +if (len(sys.argv) < 3): + print "Usage: versiongenerate.py input_dir output_dir" + sys.exit(1) +else: + input_dir = sys.argv[1] + output_dir = sys.argv[2] + +# Read the first 1024 characters of the configure.ac file +config_file = open("%s/configure.ac" % input_dir, 'r') +buffer_size = 1024 +opening_string = config_file.read(buffer_size) +config_file.close() + +# Extract the version string from the AC_INIT macro +# The following init_expression means: +# Extract three integers separated by periods and surrounded by squre +# brackets(e.g. "[1.0.1]") between "AC_INIT(" and ")". Do not be greedy +# (*? is the non-greedy flag) since that would pull in everything between +# the first "(" and the last ")" in the file. +version_expression = re.compile(r"AC_INIT\(.*?\[(\d+)\.(\d+)\.(\d+)\].*?\)", + re.DOTALL) +version_values = version_expression.search(opening_string) +major_version = version_values.group(1) +minor_version = version_values.group(2) +fix_version = version_values.group(3) + +# Write the version information to a header file to be included in the +# Info.plist file. +file_data = """// +// DO NOT MODIFY THIS FILE (but you can delete it) +// +// This file is autogenerated by the versiongenerate.py script. This script +// is executed in a "Run Script" build phase when creating gtest.framework. This +// header file is not used during compilation of C-source. Rather, it simply +// defines some version strings for substitution in the Info.plist. Because of +// this, we are not not restricted to C-syntax nor are we using include guards. +// + +#define GTEST_VERSIONINFO_SHORT %s.%s +#define GTEST_VERSIONINFO_LONG %s.%s.%s + +""" % (major_version, minor_version, major_version, minor_version, fix_version) +version_file = open("%s/Version.h" % output_dir, 'w') +version_file.write(file_data) +version_file.close() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/gtest.xcodeproj/project.pbxproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/gtest.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4234e728 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/xcode/gtest.xcodeproj/project.pbxproj @@ -0,0 +1,1080 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXAggregateTarget section */ + 3B238F5F0E828B5400846E11 /* Check */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 3B238FA30E828BB600846E11 /* Build configuration list for PBXAggregateTarget "Check" */; + buildPhases = ( + 3B238F5E0E828B5400846E11 /* ShellScript */, + ); + dependencies = ( + 40899F9D0FFA740F000B29AE /* PBXTargetDependency */, + 40C849F7101A43440083642A /* PBXTargetDependency */, + 4089A0980FFAD34A000B29AE /* PBXTargetDependency */, + 40C849F9101A43490083642A /* PBXTargetDependency */, + ); + name = Check; + productName = Check; + }; + 40C44ADC0E3798F4008FCC51 /* Version Info */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 40C44AE40E379905008FCC51 /* Build configuration list for PBXAggregateTarget "Version Info" */; + buildPhases = ( + 40C44ADB0E3798F4008FCC51 /* Generate Version.h */, + ); + comments = "The generation of Version.h must be performed in its own target. Since the Info.plist is preprocessed before any of the other build phases in gtest, the Version.h file would not be ready if included as a build phase of that target."; + dependencies = ( + ); + name = "Version Info"; + productName = Version.h; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 224A12A30E9EADCC00BD17FD /* gtest-test-part.h in Headers */ = {isa = PBXBuildFile; fileRef = 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */; }; + 3BF6F2A50E79B616000F2EEE /* gtest-typed-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 404884380E2F799B00CF7658 /* gtest-death-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DB0E2F799B00CF7658 /* gtest-death-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 404884390E2F799B00CF7658 /* gtest-message.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DC0E2F799B00CF7658 /* gtest-message.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4048843A0E2F799B00CF7658 /* gtest-spi.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DD0E2F799B00CF7658 /* gtest-spi.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4048843B0E2F799B00CF7658 /* gtest.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DE0E2F799B00CF7658 /* gtest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4048843C0E2F799B00CF7658 /* gtest_pred_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4048843D0E2F799B00CF7658 /* gtest_prod.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883E00E2F799B00CF7658 /* gtest_prod.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 404884500E2F799B00CF7658 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 404883F60E2F799B00CF7658 /* README */; }; + 404884A00E2F7BE600CF7658 /* gtest-death-test-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */; }; + 404884A10E2F7BE600CF7658 /* gtest-filepath.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E30E2F799B00CF7658 /* gtest-filepath.h */; }; + 404884A20E2F7BE600CF7658 /* gtest-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E40E2F799B00CF7658 /* gtest-internal.h */; }; + 404884A30E2F7BE600CF7658 /* gtest-port.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E50E2F799B00CF7658 /* gtest-port.h */; }; + 404884A40E2F7BE600CF7658 /* gtest-string.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E60E2F799B00CF7658 /* gtest-string.h */; }; + 404884AC0E2F7CD900CF7658 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 404884A90E2F7CD900CF7658 /* CHANGES */; }; + 404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */ = {isa = PBXBuildFile; fileRef = 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */; }; + 404884AE0E2F7CD900CF7658 /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 404884AB0E2F7CD900CF7658 /* COPYING */; }; + 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; }; + 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 40899F4D0FFA7271000B29AE /* gtest-tuple.h */; }; + 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; }; + 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; }; + 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; }; + 40C848FF101A21150083642A /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; }; + 40C84915101A21DF0083642A /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840D0E2F799B00CF7658 /* gtest_main.cc */; }; + 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; + 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; + 40C84978101A36540083642A /* libgtest_main.a in Resources */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; + 40C84980101A36850083642A /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; }; + 40C84982101A36850083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; }; + 40C84983101A36850083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; + 40C8498F101A36A60083642A /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; }; + 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; }; + 40C84992101A36A60083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; }; + 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; + 40C849A2101A37050083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; }; + 40C849A4101A37150083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; }; + 4539C9340EC280AE00A70F4C /* gtest-param-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 4539C9330EC280AE00A70F4C /* gtest-param-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4539C9380EC280E200A70F4C /* gtest-linked_ptr.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */; }; + 4539C9390EC280E200A70F4C /* gtest-param-util-generated.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */; }; + 4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9370EC280E200A70F4C /* gtest-param-util.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40899F420FFA7184000B29AE; + remoteInfo = gtest_unittest; + }; + 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4089A0120FFACEFC000B29AE; + remoteInfo = sample1_unittest; + }; + 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C848F9101A209C0083642A; + remoteInfo = "gtest-static"; + }; + 40C44AE50E379922008FCC51 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C44ADC0E3798F4008FCC51; + remoteInfo = Version.h; + }; + 40C8497C101A36850083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C848F9101A209C0083642A; + remoteInfo = "gtest-static"; + }; + 40C8497E101A36850083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C8490A101A217E0083642A; + remoteInfo = "gtest_main-static"; + }; + 40C8498B101A36A60083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C848F9101A209C0083642A; + remoteInfo = "gtest-static"; + }; + 40C8498D101A36A60083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C8490A101A217E0083642A; + remoteInfo = "gtest_main-static"; + }; + 40C8499B101A36DC0083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C8490A101A217E0083642A; + remoteInfo = "gtest_main-static"; + }; + 40C8499D101A36E50083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = "gtest-framework"; + }; + 40C8499F101A36F10083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = "gtest-framework"; + }; + 40C849F6101A43440083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C8497A101A36850083642A; + remoteInfo = "gtest_unittest-static"; + }; + 40C849F8101A43490083642A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40C84989101A36A60083642A; + remoteInfo = "sample1_unittest-static"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 404884A50E2F7C0400CF7658 /* Copy Headers Internal */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = Headers/internal; + dstSubfolderSpec = 6; + files = ( + 404884A00E2F7BE600CF7658 /* gtest-death-test-internal.h in Copy Headers Internal */, + 404884A10E2F7BE600CF7658 /* gtest-filepath.h in Copy Headers Internal */, + 404884A20E2F7BE600CF7658 /* gtest-internal.h in Copy Headers Internal */, + 4539C9380EC280E200A70F4C /* gtest-linked_ptr.h in Copy Headers Internal */, + 4539C9390EC280E200A70F4C /* gtest-param-util-generated.h in Copy Headers Internal */, + 4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */, + 404884A30E2F7BE600CF7658 /* gtest-port.h in Copy Headers Internal */, + 404884A40E2F7BE600CF7658 /* gtest-string.h in Copy Headers Internal */, + 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */, + 3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */, + ); + name = "Copy Headers Internal"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 224A12A10E9EADA700BD17FD /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-all.cc"; sourceTree = ""; }; + 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "gtest-test-part.h"; sourceTree = ""; }; + 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_unittest.cc; sourceTree = ""; }; + 3B87D2100E96B92E000D1852 /* runtests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = runtests.sh; sourceTree = ""; }; + 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-type-util.h"; sourceTree = ""; }; + 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-typed-test.h"; sourceTree = ""; }; + 403EE37C0E377822004BD1E2 /* versiongenerate.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = versiongenerate.py; sourceTree = ""; }; + 404883DB0E2F799B00CF7658 /* gtest-death-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test.h"; sourceTree = ""; }; + 404883DC0E2F799B00CF7658 /* gtest-message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-message.h"; sourceTree = ""; }; + 404883DD0E2F799B00CF7658 /* gtest-spi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-spi.h"; sourceTree = ""; }; + 404883DE0E2F799B00CF7658 /* gtest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest.h; sourceTree = ""; }; + 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest_pred_impl.h; sourceTree = ""; }; + 404883E00E2F799B00CF7658 /* gtest_prod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest_prod.h; sourceTree = ""; }; + 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test-internal.h"; sourceTree = ""; }; + 404883E30E2F799B00CF7658 /* gtest-filepath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-filepath.h"; sourceTree = ""; }; + 404883E40E2F799B00CF7658 /* gtest-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-internal.h"; sourceTree = ""; }; + 404883E50E2F799B00CF7658 /* gtest-port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-port.h"; sourceTree = ""; }; + 404883E60E2F799B00CF7658 /* gtest-string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-string.h"; sourceTree = ""; }; + 404883F60E2F799B00CF7658 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../README; sourceTree = SOURCE_ROOT; }; + 4048840D0E2F799B00CF7658 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_main.cc; sourceTree = ""; }; + 404884A90E2F7CD900CF7658 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CHANGES; path = ../CHANGES; sourceTree = SOURCE_ROOT; }; + 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CONTRIBUTORS; path = ../CONTRIBUTORS; sourceTree = SOURCE_ROOT; }; + 404884AB0E2F7CD900CF7658 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = COPYING; path = ../COPYING; sourceTree = SOURCE_ROOT; }; + 40899F430FFA7184000B29AE /* gtest_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 40899F4D0FFA7271000B29AE /* gtest-tuple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-tuple.h"; sourceTree = ""; }; + 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = StaticLibraryTarget.xcconfig; sourceTree = ""; }; + 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4089A02C0FFACF7F000B29AE /* sample1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1.cc; sourceTree = ""; }; + 4089A02D0FFACF7F000B29AE /* sample1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample1.h; sourceTree = ""; }; + 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1_unittest.cc; sourceTree = ""; }; + 40C848FA101A209C0083642A /* libgtest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 40C8490B101A217E0083642A /* libgtest_main.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest_main.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 40C84987101A36850083642A /* gtest_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_unittest; sourceTree = BUILT_PRODUCTS_DIR; }; + 40C84997101A36A60083642A /* sample1_unittest-static */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-static"; sourceTree = BUILT_PRODUCTS_DIR; }; + 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugProject.xcconfig; sourceTree = ""; }; + 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FrameworkTarget.xcconfig; sourceTree = ""; }; + 40D4CDF30E30E07400294801 /* General.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = ""; }; + 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseProject.xcconfig; sourceTree = ""; }; + 40D4CF510E30F5E200294801 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4539C8FF0EC27F6400A70F4C /* gtest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = gtest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4539C9330EC280AE00A70F4C /* gtest-param-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-test.h"; sourceTree = ""; }; + 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-linked_ptr.h"; sourceTree = ""; }; + 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util-generated.h"; sourceTree = ""; }; + 4539C9370EC280E200A70F4C /* gtest-param-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util.h"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 40899F410FFA7184000B29AE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C849A4101A37150083642A /* gtest.framework in Frameworks */, + 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4089A0110FFACEFC000B29AE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C849A2101A37050083642A /* gtest.framework in Frameworks */, + 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C84981101A36850083642A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C84982101A36850083642A /* libgtest.a in Frameworks */, + 40C84983101A36850083642A /* libgtest_main.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C84991101A36A60083642A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C84992101A36A60083642A /* libgtest.a in Frameworks */, + 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 4539C8FF0EC27F6400A70F4C /* gtest.framework */, + 40C848FA101A209C0083642A /* libgtest.a */, + 40C8490B101A217E0083642A /* libgtest_main.a */, + 40899F430FFA7184000B29AE /* gtest_unittest-framework */, + 40C84987101A36850083642A /* gtest_unittest */, + 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */, + 40C84997101A36A60083642A /* sample1_unittest-static */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* gtest */ = { + isa = PBXGroup; + children = ( + 40D4CDF00E30E07400294801 /* Config */, + 08FB77ACFE841707C02AAC07 /* Source */, + 40D4CF4E0E30F5E200294801 /* Resources */, + 403EE37B0E377822004BD1E2 /* Scripts */, + 034768DDFF38A45A11DB9C8B /* Products */, + ); + name = gtest; + sourceTree = ""; + }; + 08FB77ACFE841707C02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 404884A90E2F7CD900CF7658 /* CHANGES */, + 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */, + 404884AB0E2F7CD900CF7658 /* COPYING */, + 404883F60E2F799B00CF7658 /* README */, + 404883D90E2F799B00CF7658 /* include */, + 4089A02F0FFACF84000B29AE /* samples */, + 404884070E2F799B00CF7658 /* src */, + 3B238BF00E7FE13B00846E11 /* test */, + ); + name = Source; + sourceTree = ""; + }; + 3B238BF00E7FE13B00846E11 /* test */ = { + isa = PBXGroup; + children = ( + 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */, + ); + name = test; + path = ../test; + sourceTree = SOURCE_ROOT; + }; + 403EE37B0E377822004BD1E2 /* Scripts */ = { + isa = PBXGroup; + children = ( + 403EE37C0E377822004BD1E2 /* versiongenerate.py */, + 3B87D2100E96B92E000D1852 /* runtests.sh */, + ); + path = Scripts; + sourceTree = ""; + }; + 404883D90E2F799B00CF7658 /* include */ = { + isa = PBXGroup; + children = ( + 404883DA0E2F799B00CF7658 /* gtest */, + ); + name = include; + path = ../include; + sourceTree = SOURCE_ROOT; + }; + 404883DA0E2F799B00CF7658 /* gtest */ = { + isa = PBXGroup; + children = ( + 404883E10E2F799B00CF7658 /* internal */, + 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */, + 404883DB0E2F799B00CF7658 /* gtest-death-test.h */, + 404883DC0E2F799B00CF7658 /* gtest-message.h */, + 4539C9330EC280AE00A70F4C /* gtest-param-test.h */, + 404883DD0E2F799B00CF7658 /* gtest-spi.h */, + 404883DE0E2F799B00CF7658 /* gtest.h */, + 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */, + 404883E00E2F799B00CF7658 /* gtest_prod.h */, + 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */, + ); + path = gtest; + sourceTree = ""; + }; + 404883E10E2F799B00CF7658 /* internal */ = { + isa = PBXGroup; + children = ( + 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */, + 404883E30E2F799B00CF7658 /* gtest-filepath.h */, + 404883E40E2F799B00CF7658 /* gtest-internal.h */, + 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */, + 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */, + 4539C9370EC280E200A70F4C /* gtest-param-util.h */, + 404883E50E2F799B00CF7658 /* gtest-port.h */, + 404883E60E2F799B00CF7658 /* gtest-string.h */, + 40899F4D0FFA7271000B29AE /* gtest-tuple.h */, + 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */, + ); + path = internal; + sourceTree = ""; + }; + 404884070E2F799B00CF7658 /* src */ = { + isa = PBXGroup; + children = ( + 224A12A10E9EADA700BD17FD /* gtest-all.cc */, + 4048840D0E2F799B00CF7658 /* gtest_main.cc */, + ); + name = src; + path = ../src; + sourceTree = SOURCE_ROOT; + }; + 4089A02F0FFACF84000B29AE /* samples */ = { + isa = PBXGroup; + children = ( + 4089A02C0FFACF7F000B29AE /* sample1.cc */, + 4089A02D0FFACF7F000B29AE /* sample1.h */, + 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */, + ); + name = samples; + path = ../samples; + sourceTree = SOURCE_ROOT; + }; + 40D4CDF00E30E07400294801 /* Config */ = { + isa = PBXGroup; + children = ( + 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */, + 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */, + 40D4CDF30E30E07400294801 /* General.xcconfig */, + 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */, + 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */, + ); + path = Config; + sourceTree = ""; + }; + 40D4CF4E0E30F5E200294801 /* Resources */ = { + isa = PBXGroup; + children = ( + 40D4CF510E30F5E200294801 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 404884380E2F799B00CF7658 /* gtest-death-test.h in Headers */, + 404884390E2F799B00CF7658 /* gtest-message.h in Headers */, + 4539C9340EC280AE00A70F4C /* gtest-param-test.h in Headers */, + 3BF6F2A50E79B616000F2EEE /* gtest-typed-test.h in Headers */, + 4048843A0E2F799B00CF7658 /* gtest-spi.h in Headers */, + 4048843B0E2F799B00CF7658 /* gtest.h in Headers */, + 4048843C0E2F799B00CF7658 /* gtest_pred_impl.h in Headers */, + 4048843D0E2F799B00CF7658 /* gtest_prod.h in Headers */, + 224A12A30E9EADCC00BD17FD /* gtest-test-part.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 40899F420FFA7184000B29AE /* gtest_unittest-framework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */; + buildPhases = ( + 40899F400FFA7184000B29AE /* Sources */, + 40899F410FFA7184000B29AE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 40C849A0101A36F10083642A /* PBXTargetDependency */, + ); + name = "gtest_unittest-framework"; + productName = gtest_unittest; + productReference = 40899F430FFA7184000B29AE /* gtest_unittest-framework */; + productType = "com.apple.product-type.tool"; + }; + 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */; + buildPhases = ( + 4089A0100FFACEFC000B29AE /* Sources */, + 4089A0110FFACEFC000B29AE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 40C8499E101A36E50083642A /* PBXTargetDependency */, + ); + name = "sample1_unittest-framework"; + productName = sample1_unittest; + productReference = 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */; + productType = "com.apple.product-type.tool"; + }; + 40C848F9101A209C0083642A /* gtest-static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */; + buildPhases = ( + 40C848F7101A209C0083642A /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "gtest-static"; + productName = "gtest-static"; + productReference = 40C848FA101A209C0083642A /* libgtest.a */; + productType = "com.apple.product-type.library.static"; + }; + 40C8490A101A217E0083642A /* gtest_main-static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */; + buildPhases = ( + 40C84908101A217E0083642A /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "gtest_main-static"; + productName = "gtest_main-static"; + productReference = 40C8490B101A217E0083642A /* libgtest_main.a */; + productType = "com.apple.product-type.library.static"; + }; + 40C8497A101A36850083642A /* gtest_unittest-static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */; + buildPhases = ( + 40C8497F101A36850083642A /* Sources */, + 40C84981101A36850083642A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 40C8497B101A36850083642A /* PBXTargetDependency */, + 40C8497D101A36850083642A /* PBXTargetDependency */, + ); + name = "gtest_unittest-static"; + productName = gtest_unittest; + productReference = 40C84987101A36850083642A /* gtest_unittest */; + productType = "com.apple.product-type.tool"; + }; + 40C84989101A36A60083642A /* sample1_unittest-static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */; + buildPhases = ( + 40C8498E101A36A60083642A /* Sources */, + 40C84991101A36A60083642A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 40C8498A101A36A60083642A /* PBXTargetDependency */, + 40C8498C101A36A60083642A /* PBXTargetDependency */, + ); + name = "sample1_unittest-static"; + productName = sample1_unittest; + productReference = 40C84997101A36A60083642A /* sample1_unittest-static */; + productType = "com.apple.product-type.tool"; + }; + 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */; + buildPhases = ( + 8D07F2C10486CC7A007CD1D0 /* Sources */, + 8D07F2BD0486CC7A007CD1D0 /* Headers */, + 404884A50E2F7C0400CF7658 /* Copy Headers Internal */, + 8D07F2BF0486CC7A007CD1D0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 40C44AE60E379922008FCC51 /* PBXTargetDependency */, + 408BEC101046CFE900DEF522 /* PBXTargetDependency */, + 40C8499C101A36DC0083642A /* PBXTargetDependency */, + ); + name = "gtest-framework"; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = gtest; + productReference = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "gtest" */; + compatibilityVersion = "Xcode 2.4"; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + en, + ); + mainGroup = 0867D691FE84028FC02AAC07 /* gtest */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */, + 40C848F9101A209C0083642A /* gtest-static */, + 40C8490A101A217E0083642A /* gtest_main-static */, + 40899F420FFA7184000B29AE /* gtest_unittest-framework */, + 40C8497A101A36850083642A /* gtest_unittest-static */, + 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */, + 40C84989101A36A60083642A /* sample1_unittest-static */, + 3B238F5F0E828B5400846E11 /* Check */, + 40C44ADC0E3798F4008FCC51 /* Version Info */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 404884500E2F799B00CF7658 /* README in Resources */, + 404884AC0E2F7CD900CF7658 /* CHANGES in Resources */, + 404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */, + 404884AE0E2F7CD900CF7658 /* COPYING in Resources */, + 40C84978101A36540083642A /* libgtest_main.a in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B238F5E0E828B5400846E11 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/bin/bash Scripts/runtests.sh"; + }; + 40C44ADB0E3798F4008FCC51 /* Generate Version.h */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Scripts/versiongenerate.py", + "$(SRCROOT)/../configure.ac", + ); + name = "Generate Version.h"; + outputPaths = ( + "$(PROJECT_TEMP_DIR)/Version.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 40899F400FFA7184000B29AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4089A0100FFACEFC000B29AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */, + 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C848F7101A209C0083642A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C848FF101A21150083642A /* gtest-all.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C84908101A217E0083642A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C84915101A21DF0083642A /* gtest_main.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C8497F101A36850083642A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C84980101A36850083642A /* gtest_unittest.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40C8498E101A36A60083642A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C8498F101A36A60083642A /* sample1.cc in Sources */, + 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D07F2C10486CC7A007CD1D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 40899F9D0FFA740F000B29AE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40899F420FFA7184000B29AE /* gtest_unittest-framework */; + targetProxy = 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */; + }; + 4089A0980FFAD34A000B29AE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */; + targetProxy = 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */; + }; + 408BEC101046CFE900DEF522 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C848F9101A209C0083642A /* gtest-static */; + targetProxy = 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */; + }; + 40C44AE60E379922008FCC51 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C44ADC0E3798F4008FCC51 /* Version Info */; + targetProxy = 40C44AE50E379922008FCC51 /* PBXContainerItemProxy */; + }; + 40C8497B101A36850083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C848F9101A209C0083642A /* gtest-static */; + targetProxy = 40C8497C101A36850083642A /* PBXContainerItemProxy */; + }; + 40C8497D101A36850083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C8490A101A217E0083642A /* gtest_main-static */; + targetProxy = 40C8497E101A36850083642A /* PBXContainerItemProxy */; + }; + 40C8498A101A36A60083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C848F9101A209C0083642A /* gtest-static */; + targetProxy = 40C8498B101A36A60083642A /* PBXContainerItemProxy */; + }; + 40C8498C101A36A60083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C8490A101A217E0083642A /* gtest_main-static */; + targetProxy = 40C8498D101A36A60083642A /* PBXContainerItemProxy */; + }; + 40C8499C101A36DC0083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C8490A101A217E0083642A /* gtest_main-static */; + targetProxy = 40C8499B101A36DC0083642A /* PBXContainerItemProxy */; + }; + 40C8499E101A36E50083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */; + targetProxy = 40C8499D101A36E50083642A /* PBXContainerItemProxy */; + }; + 40C849A0101A36F10083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */; + targetProxy = 40C8499F101A36F10083642A /* PBXContainerItemProxy */; + }; + 40C849F7101A43440083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C8497A101A36850083642A /* gtest_unittest-static */; + targetProxy = 40C849F6101A43440083642A /* PBXContainerItemProxy */; + }; + 40C849F9101A43490083642A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40C84989101A36A60083642A /* sample1_unittest-static */; + targetProxy = 40C849F8101A43490083642A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 3B238F600E828B5400846E11 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = Check; + }; + name = Debug; + }; + 3B238F610E828B5400846E11 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = Check; + ZERO_LINK = NO; + }; + name = Release; + }; + 40899F450FFA7185000B29AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ../; + PRODUCT_NAME = "gtest_unittest-framework"; + }; + name = Debug; + }; + 40899F460FFA7185000B29AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ../; + PRODUCT_NAME = "gtest_unittest-framework"; + }; + name = Release; + }; + 4089A0150FFACEFD000B29AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "sample1_unittest-framework"; + }; + name = Debug; + }; + 4089A0160FFACEFD000B29AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "sample1_unittest-framework"; + }; + name = Release; + }; + 40C44ADF0E3798F4008FCC51 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = gtest; + TARGET_NAME = gtest; + }; + name = Debug; + }; + 40C44AE00E3798F4008FCC51 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = gtest; + TARGET_NAME = gtest; + }; + name = Release; + }; + 40C848FB101A209D0083642A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; + buildSettings = { + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + PRODUCT_NAME = gtest; + }; + name = Debug; + }; + 40C848FC101A209D0083642A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; + buildSettings = { + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + PRODUCT_NAME = gtest; + }; + name = Release; + }; + 40C8490E101A217F0083642A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; + buildSettings = { + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + PRODUCT_NAME = gtest_main; + }; + name = Debug; + }; + 40C8490F101A217F0083642A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; + buildSettings = { + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + PRODUCT_NAME = gtest_main; + }; + name = Release; + }; + 40C84985101A36850083642A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ../; + PRODUCT_NAME = gtest_unittest; + }; + name = Debug; + }; + 40C84986101A36850083642A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ../; + PRODUCT_NAME = gtest_unittest; + }; + name = Release; + }; + 40C84995101A36A60083642A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "sample1_unittest-static"; + }; + name = Debug; + }; + 40C84996101A36A60083642A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "sample1_unittest-static"; + }; + name = Release; + }; + 4FADC24308B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + INFOPLIST_FILE = Resources/Info.plist; + INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h"; + INFOPLIST_PREPROCESS = YES; + PRODUCT_NAME = gtest; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 4FADC24408B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + HEADER_SEARCH_PATHS = ( + ../, + ../include/, + ); + INFOPLIST_FILE = Resources/Info.plist; + INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h"; + INFOPLIST_PREPROCESS = YES; + PRODUCT_NAME = gtest; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 4FADC24708B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + 4FADC24808B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3B238FA30E828BB600846E11 /* Build configuration list for PBXAggregateTarget "Check" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B238F600E828B5400846E11 /* Debug */, + 3B238F610E828B5400846E11 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40899F450FFA7185000B29AE /* Debug */, + 40899F460FFA7185000B29AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4089A0150FFACEFD000B29AE /* Debug */, + 4089A0160FFACEFD000B29AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40C44AE40E379905008FCC51 /* Build configuration list for PBXAggregateTarget "Version Info" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40C44ADF0E3798F4008FCC51 /* Debug */, + 40C44AE00E3798F4008FCC51 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40C848FB101A209D0083642A /* Debug */, + 40C848FC101A209D0083642A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40C8490E101A217F0083642A /* Debug */, + 40C8490F101A217F0083642A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40C84985101A36850083642A /* Debug */, + 40C84986101A36850083642A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40C84995101A36A60083642A /* Debug */, + 40C84996101A36A60083642A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24308B4156D00ABE55E /* Debug */, + 4FADC24408B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "gtest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24708B4156D00ABE55E /* Debug */, + 4FADC24808B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/thirdparty/carve-1.4.0/include/CMakeLists.txt b/thirdparty/carve-1.4.0/include/CMakeLists.txt new file mode 100644 index 00000000..50b03620 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/CMakeLists.txt @@ -0,0 +1,16 @@ +if(CARVE_SYSTEM_BOOST) + install(DIRECTORY carve + DESTINATION "${CMAKE_INSTALL_PREFIX}/include" + FILES_MATCHING + PATTERN "*.hpp" + PATTERN "internal" EXCLUDE + REGEX "external/boost" EXCLUDE + ) +else(CARVE_SYSTEM_BOOST) + install(DIRECTORY carve + DESTINATION "${CMAKE_INSTALL_PREFIX}/include" + FILES_MATCHING + PATTERN "*.hpp" + PATTERN "internal" EXCLUDE + ) +endif(CARVE_SYSTEM_BOOST) diff --git a/thirdparty/carve-1.4.0/include/Makefile.am b/thirdparty/carve-1.4.0/include/Makefile.am new file mode 100644 index 00000000..63093e66 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=carve diff --git a/thirdparty/carve-1.4.0/include/carve/Makefile.am b/thirdparty/carve-1.4.0/include/carve/Makefile.am new file mode 100644 index 00000000..a290f77f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/Makefile.am @@ -0,0 +1,25 @@ +SUBDIRS=collection +includedir=@includedir@/carve + +EXTRA_DIST=external +include_HEADERS= aabb.hpp carve.hpp classification.hpp collection.hpp \ + collection_types.hpp convex_hull.hpp csg.hpp \ + csg_triangulator.hpp debug_hooks.hpp edge_decl.hpp \ + edge_impl.hpp face_decl.hpp face_impl.hpp faceloop.hpp \ + geom.hpp geom2d.hpp geom3d.hpp heap.hpp input.hpp \ + interpolator.hpp intersection.hpp iobj.hpp kd_node.hpp \ + math.hpp math_constants.hpp matrix.hpp octree_decl.hpp \ + octree_impl.hpp pointset.hpp pointset_decl.hpp \ + pointset_impl.hpp pointset_iter.hpp poly.hpp poly_decl.hpp \ + poly_impl.hpp polyhedron_base.hpp polyhedron_decl.hpp \ + polyhedron_impl.hpp polyline.hpp polyline_decl.hpp \ + polyline_impl.hpp polyline_iter.hpp rescale.hpp spacetree.hpp \ + tag.hpp timing.hpp tree.hpp triangulator.hpp \ + triangulator_impl.hpp util.hpp vector.hpp vertex_decl.hpp \ + vertex_impl.hpp cbrt.h config.h gnu_cxx.h vcpp_config.h \ + win32.h xcode_config.h collection/unordered/boost_impl.hpp \ + collection/unordered/fallback_impl.hpp \ + collection/unordered/libstdcpp_impl.hpp \ + collection/unordered/std_impl.hpp \ + collection/unordered/tr1_impl.hpp \ + collection/unordered/vcpp_impl.hpp collection/unordered.hpp diff --git a/thirdparty/carve-1.4.0/include/carve/aabb.hpp b/thirdparty/carve-1.4.0/include/carve/aabb.hpp new file mode 100644 index 00000000..f0285301 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/aabb.hpp @@ -0,0 +1,359 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include + +#include +#include + +#include + +#include + +namespace carve { + namespace geom { + // n-dimensional AABB + template + struct aabb { + typedef vector vector_t; + + vector_t pos; // the centre of the AABB + vector_t extent; // the extent of the AABB - the vector from the centre to the maximal vertex. + + void empty() { + pos.setZero(); + extent.setZero(); + } + + bool isEmpty() const { + return extent.exactlyZero(); + } + + void fit(const vector_t &v1) { + pos = v1; + extent.setZero(); + } + + void fit(const vector_t &v1, const vector_t &v2) { + vector_t min, max; + assign_op(min, v1, v2, carve::util::min_functor()); + assign_op(max, v1, v2, carve::util::max_functor()); + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + + void fit(const vector_t &v1, const vector_t &v2, const vector_t &v3) { + vector_t min, max; + min = max = v1; + + assign_op(min, min, v2, carve::util::min_functor()); + assign_op(max, max, v2, carve::util::max_functor()); + assign_op(min, min, v3, carve::util::min_functor()); + assign_op(max, max, v3, carve::util::max_functor()); + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + + template + void fit(iter_t begin, iter_t end, adapt_t adapt) { + vector_t min, max; + bounds(begin, end, adapt, min, max); + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + + template + void fit(iter_t begin, iter_t end) { + vector_t min, max; + bounds(begin, end, min, max); + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + + template + void fitAABB(iter_t begin, iter_t end) { + if (begin == end) { + empty(); + } else { + vector_t min, max; + aabb a = *begin++; + min = a.min(); + max = a.max(); + while (begin != end) { + aabb a = *begin; ++begin; + assign_op(min, min, a.min(), carve::util::min_functor()); + assign_op(max, max, a.max(), carve::util::max_functor()); + } + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + } + + void expand(double pad) { + extent += pad; + } + + void fitAABB(const aabb &a, const aabb &b) { + vector_t min, max; + assign_op(min, a.min(), b.min(), carve::util::min_functor()); + assign_op(max, a.max(), b.max(), carve::util::max_functor()); + + pos = (min + max) / 2.0; + + assign_op(extent, max - pos, pos - min, carve::util::max_functor()); + } + + void unionAABB(const aabb &a) { + vector_t vmin, vmax; + assign_op(vmin, min(), a.min(), carve::util::min_functor()); + assign_op(vmax, max(), a.max(), carve::util::max_functor()); + + pos = (vmin + vmax) / 2.0; + + assign_op(extent, vmax - pos, pos - vmin, carve::util::max_functor()); + } + + aabb(const vector_t &_pos = vector_t::ZERO(), + const vector_t &_extent = vector_t::ZERO()) : pos(_pos), extent(_extent) { + } + + template + aabb(iter_t begin, iter_t end, adapt_t adapt) { + fit(begin, end, adapt); + } + + template + aabb(iter_t begin, iter_t end) { + fit(begin, end); + } + + aabb(const aabb &a, const aabb &b) { + fit(a, b); + } + + bool completelyContains(const aabb &other) const { + for (unsigned i = 0; i < ndim; ++i) { + if (fabs(other.pos.v[i] - pos.v[i] + other.extent.v[i]) > extent.v[i]) return false; + } + return true; + } + + bool containsPoint(const vector_t &v) const { + for (unsigned i = 0; i < ndim; ++i) { + if (fabs(v.v[i] - pos.v[i]) > extent.v[i]) return false; + } + return true; + } + + bool intersectsLineSegment(const vector_t &v1, const vector_t &v2) const; + + bool intersects(const aabb &other) const { + for (unsigned i = 0; i < ndim; ++i) { + if (fabs(other.pos.v[i] - pos.v[i]) > (extent.v[i] + other.extent.v[i])) return false; + } + return true; + } + + bool intersects(const sphere &s) const { + double r = 0.0; + for (unsigned i = 0; i < ndim; ++i) { + double t = fabs(s.C[i] - pos[i]) - extent[i]; if (t > 0.0) r += t*t; + } + return r <= s.r*s.r; + } + + bool intersects(const plane &plane) const { + double d1 = fabs(distance(plane, pos)); + double d2 = dot(abs(plane.N), extent); + return d1 <= d2; + } + + bool intersects(const ray &ray) const; + + bool intersects(tri tri) const; + + bool intersects(const linesegment &ls) const { + return intersectsLineSegment(ls.v1, ls.v2); + } + + vector_t min() const { return pos - extent; } + vector_t max() const { return pos + extent; } + + int compareAxis(const axis_pos &ap) const { + double p = ap.pos - pos[ap.axis]; + if (p > extent[ap.axis]) return -1; + if (p < -extent[ap.axis]) return +1; + return 0; + } + + void constrainMax(const axis_pos &ap) { + if (pos[ap.axis] + extent[ap.axis] > ap.pos) { + double min = std::min(ap.pos, pos[ap.axis] - extent[ap.axis]); + pos[ap.axis] = (min + ap.pos) / 2.0; + extent[ap.axis] = ap.pos - pos[ap.axis]; + } + } + + void constrainMin(const axis_pos &ap) { + if (pos[ap.axis] - extent[ap.axis] < ap.pos) { + double max = std::max(ap.pos, pos[ap.axis] + extent[ap.axis]); + pos[ap.axis] = (ap.pos + max) / 2.0; + extent[ap.axis] = pos[ap.axis] - ap.pos; + } + } + + }; + + template + bool operator==(const aabb &a, const aabb &b) { + return a.pos == b.pos && a.extent == b.extent; + } + + template + bool operator!=(const aabb &a, const aabb &b) { + return a.pos != b.pos || a.extent != b.extent; + } + + template + std::ostream &operator<<(std::ostream &o, const aabb &a) { + o << (a.pos - a.extent) << "--" << (a.pos + a.extent); + return o; + } + + template<> + inline bool aabb<3>::intersects(const ray<3> &ray) const { + vector<3> t = pos - ray.v; + vector<3> v; + double r; + + //l.cross(x-axis)? + r = extent.y * fabs(ray.D.z) + extent.z * fabs(ray.D.y); + if (fabs(t.y * ray.D.z - t.z * ray.D.y) > r) return false; + + //ray.D.cross(y-axis)? + r = extent.x * fabs(ray.D.z) + extent.z * fabs(ray.D.x); + if (fabs(t.z * ray.D.x - t.x * ray.D.z) > r) return false; + + //ray.D.cross(z-axis)? + r = extent.x*fabs(ray.D.y) + extent.y*fabs(ray.D.x); + if (fabs(t.x * ray.D.y - t.y * ray.D.x) > r) return false; + + return true; + } + + template<> + inline bool aabb<3>::intersectsLineSegment(const vector<3> &v1, const vector<3> &v2) const { + vector<3> half_length = 0.5 * (v2 - v1); + vector<3> t = pos - half_length - v1; + vector<3> v; + double r; + + //do any of the principal axes form a separating axis? + if(fabs(t.x) > extent.x + fabs(half_length.x)) return false; + if(fabs(t.y) > extent.y + fabs(half_length.y)) return false; + if(fabs(t.z) > extent.z + fabs(half_length.z)) return false; + + // NOTE: Since the separating axis is perpendicular to the line in + // these last four cases, the line does not contribute to the + // projection. + + //line.cross(x-axis)? + r = extent.y * fabs(half_length.z) + extent.z * fabs(half_length.y); + if (fabs(t.y * half_length.z - t.z * half_length.y) > r) return false; + + //half_length.cross(y-axis)? + r = extent.x * fabs(half_length.z) + extent.z * fabs(half_length.x); + if (fabs(t.z * half_length.x - t.x * half_length.z) > r) return false; + + //half_length.cross(z-axis)? + r = extent.x*fabs(half_length.y) + extent.y*fabs(half_length.x); + if (fabs(t.x * half_length.y - t.y * half_length.x) > r) return false; + + return true; + } + + template + static inline bool intersectsTriangle_axisTest_3(const aabb<3> &aabb, const tri<3> &tri) { + const int d = (c+1) % 3, e = (c+2) % 3; + const vector<3> a = cross(VECTOR(Ax, Ay, Az), tri.v[d] - tri.v[c]); + double p1 = dot(a, tri.v[c]), p2 = dot(a, tri.v[e]); + if (p1 > p2) std::swap(p1, p2); + const double r = dot(abs(a), aabb.extent); + return !(p1 > r || p2 < -r); + } + + template + static inline bool intersectsTriangle_axisTest_2(const aabb<3> &aabb, const tri<3> &tri) { + double vmin = std::min(std::min(tri.v[0][c], tri.v[1][c]), tri.v[2][c]), + vmax = std::max(std::max(tri.v[0][c], tri.v[1][c]), tri.v[2][c]); + return !(vmin > aabb.extent[c] || vmax < -aabb.extent[c]); + } + + static inline bool intersectsTriangle_axisTest_1(const aabb<3> &aabb, const tri<3> &tri) { + vector<3> n = cross(tri.v[1] - tri.v[0], tri.v[2] - tri.v[0]); + double d1 = fabs(dot(n, tri.v[0])); + double d2 = dot(abs(n), aabb.extent); + return d1 <= d2; + } + + template<> + inline bool aabb<3>::intersects(tri<3> tri) const { + tri.v[0] -= pos; + tri.v[1] -= pos; + tri.v[2] -= pos; + + if (!intersectsTriangle_axisTest_2<0>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_2<1>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_2<2>(*this, tri)) return false; + + if (!intersectsTriangle_axisTest_3<1,0,0,0>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<1,0,0,1>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<1,0,0,2>(*this, tri)) return false; + + if (!intersectsTriangle_axisTest_3<0,1,0,0>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<0,1,0,1>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<0,1,0,2>(*this, tri)) return false; + + if (!intersectsTriangle_axisTest_3<0,0,1,0>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<0,0,1,1>(*this, tri)) return false; + if (!intersectsTriangle_axisTest_3<0,0,1,2>(*this, tri)) return false; + + if (!intersectsTriangle_axisTest_1(*this, tri)) return false; + + return true; + } + + + } +} + +namespace carve { + namespace geom3d { + typedef carve::geom::aabb<3> AABB; + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/carve.hpp b/thirdparty/carve-1.4.0/include/carve/carve.hpp new file mode 100644 index 00000000..6585dcb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/carve.hpp @@ -0,0 +1,168 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#if defined(_MSC_VER) +# include +#else +# include +#endif + +#if defined(WIN32) +# include +#elif defined(__GNUC__) +# include +#endif + +#if defined(CARVE_SYSTEM_BOOST) +# define BOOST_INCLUDE(x) +#else +# define BOOST_INCLUDE(x) +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#define STR(x) #x +#define XSTR(x) STR(x) + +/** + * \brief Top level Carve namespace. + */ +namespace carve { + static struct noinit_t {} NOINIT; + + inline std::string fmtstring(const char *fmt, ...); + + /** + * \brief Base class for all Carve exceptions. + */ + struct exception { + private: + mutable std::string err; + mutable std::ostringstream accum; + + public: + exception(const std::string &e) : err(e), accum() { } + exception() : err(), accum() { } + exception(const exception &e) : err(e.str()), accum() { } + + const std::string &str() const { + if (accum.str().size() > 0) { + err = accum.str(); + accum.str(""); + } + return err; + } + + template + exception &operator<<(const T &t) { + accum << t; + return *this; + } + }; + + template::value_type > > + struct index_sort { + iter_t base; + order_t order; + index_sort(const iter_t &_base) : base(_base), order() { } + index_sort(const iter_t &_base, const order_t &_order) : base(_base), order(_order) { } + template + bool operator()(const U &a, const U &b) { + return order(*(base + a), *(base + b)); + } + }; + + template + index_sort make_index_sort(const iter_t &base, const order_t &order) { + return index_sort(base, order); + } + + template + index_sort make_index_sort(const iter_t &base) { + return index_sort(base); + } + + + enum RayIntersectionClass { + RR_DEGENERATE = -2, + RR_PARALLEL = -1, + RR_NO_INTERSECTION = 0, + RR_INTERSECTION = 1 + }; + + enum LineIntersectionClass { + COLINEAR = -1, + NO_INTERSECTION = 0, + INTERSECTION_LL = 1, + INTERSECTION_PL = 2, + INTERSECTION_LP = 3, + INTERSECTION_PP = 4 + }; + + enum PointClass { + POINT_UNK = -2, + POINT_OUT = -1, + POINT_ON = 0, + POINT_IN = 1, + POINT_VERTEX = 2, + POINT_EDGE = 3 + }; + + enum IntersectionClass { + INTERSECT_BAD = -1, + INTERSECT_NONE = 0, + INTERSECT_FACE = 1, + INTERSECT_VERTEX = 2, + INTERSECT_EDGE = 3, + INTERSECT_PLANE = 4, + }; + + extern double EPSILON; + extern double EPSILON2; + + static inline void setEpsilon(double ep) { EPSILON = ep; EPSILON2 = ep * ep; } + + template + struct identity_t { + typedef T argument_type; + typedef T result_type; + const T &operator()(const T &t) const { return t; } + }; +} + + +#if !defined(CARVE_NODEBUG) +# define CARVE_ASSERT(x) do { if (!(x)) throw carve::exception() << __FILE__ << ":" << __LINE__ << " " << #x; } while(0) +#else +# define CARVE_ASSERT(X) +#endif + +#define CARVE_FAIL(x) do { throw carve::exception() << __FILE__ << ":" << __LINE__ << " " << #x; } while(0) diff --git a/thirdparty/carve-1.4.0/include/carve/cbrt.h b/thirdparty/carve-1.4.0/include/carve/cbrt.h new file mode 100644 index 00000000..aeceab01 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/cbrt.h @@ -0,0 +1,93 @@ +// N.B. only appropriate for IEEE doubles. +// Cube root implementation obtained from code with the following notice: + +/* @(#)s_cbrt.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Sometimes it's necessary to define __LITTLE_ENDIAN explicitly + but these catch some common cases. */ + +#if defined(i386) || defined(i486) || \ + defined(intel) || defined(x86) || defined(i86pc) || \ + defined(__alpha) || defined(__osf__) +#define __LITTLE_ENDIAN +#endif + +#ifdef __LITTLE_ENDIAN +#define __HI(x) *(1+(int*)&x) +#define __LO(x) *(int*)&x +#define __HIp(x) *(1+(int*)x) +#define __LOp(x) *(int*)x +#else +#define __HI(x) *(int*)&x +#define __LO(x) *(1+(int*)&x) +#define __HIp(x) *(int*)x +#define __LOp(x) *(1+(int*)x) +#endif + +/* cbrt(x) + * Return cube root of x + */ + +inline double cbrt(double x) { + + static const unsigned + B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */ + B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */ + static const double + C = 5.42857142857142815906e-01, /* 19/35 = 0x3FE15F15, 0xF15F15F1 */ + D = -7.05306122448979611050e-01, /* -864/1225 = 0xBFE691DE, 0x2532C834 */ + E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */ + F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */ + G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ + + int hx; + double r,s,t=0.0,w; + unsigned sign; + + hx = __HI(x); /* high word of x */ + sign=hx&0x80000000; /* sign= sign(x) */ + hx ^=sign; + if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */ + if((hx|__LO(x))==0) + return(x); /* cbrt(0) is itself */ + + __HI(x) = hx; /* x <- |x| */ + /* rough cbrt to 5 bits */ + if(hx<0x00100000) /* subnormal number */ + {__HI(t)=0x43500000; /* set t= 2**54 */ + t*=x; __HI(t)=__HI(t)/3+B2; + } + else + __HI(t)=hx/3+B1; + + + /* new cbrt to 23 bits, may be implemented in single precision */ + r=t*t/x; + s=C+r*t; + t*=G+F/(s+E+D/s); + + /* chopped to 20 bits and make it larger than cbrt(x) */ + __LO(t)=0; __HI(t)+=0x00000001; + + /* one step newton iteration to 53 bits with error less than 0.667 ulps */ + s=t*t; /* t*t is exact */ + r=x/s; + w=t+t; + r=(r-t)/(w+r); /* r-s is exact */ + t=t+t*r; + + /* retore the sign bit */ + __HI(t) |= sign; + return(t); +} diff --git a/thirdparty/carve-1.4.0/include/carve/classification.hpp b/thirdparty/carve-1.4.0/include/carve/classification.hpp new file mode 100644 index 00000000..dd576ab7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/classification.hpp @@ -0,0 +1,117 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +namespace carve { + namespace csg { + + enum FaceClass { + FACE_UNCLASSIFIED = -3, + FACE_ON_ORIENT_OUT = -2, + FACE_OUT = -1, + FACE_ON = 0, + FACE_IN = +1, + FACE_ON_ORIENT_IN = +2 + }; + + enum FaceClassBit { + FACE_ON_ORIENT_OUT_BIT = 0x01, + FACE_OUT_BIT = 0x02, + FACE_IN_BIT = 0x04, + FACE_ON_ORIENT_IN_BIT = 0x08, + + FACE_ANY_BIT = 0x0f, + FACE_ON_BIT = 0x09, + FACE_NOT_ON_BIT = 0x06 + }; + + static inline FaceClass class_bit_to_class(unsigned i) { + if (i & FACE_ON_ORIENT_OUT_BIT) return FACE_ON_ORIENT_OUT; + if (i & FACE_OUT_BIT) return FACE_OUT; + if (i & FACE_IN_BIT) return FACE_IN; + if (i & FACE_ON_ORIENT_IN_BIT) return FACE_ON_ORIENT_IN; + return FACE_UNCLASSIFIED; + } + + static inline unsigned class_to_class_bit(FaceClass f) { + switch (f) { + case FACE_ON_ORIENT_OUT: return FACE_ON_ORIENT_OUT_BIT; + case FACE_OUT: return FACE_OUT_BIT; + case FACE_ON: return FACE_ON_BIT; + case FACE_IN: return FACE_IN_BIT; + case FACE_ON_ORIENT_IN: return FACE_ON_ORIENT_IN_BIT; + case FACE_UNCLASSIFIED: return FACE_ANY_BIT; + default: return 0; + } + } + + enum EdgeClass { + EDGE_UNK = -2, + EDGE_OUT = -1, + EDGE_ON = 0, + EDGE_IN = 1 + }; + + + + const char *ENUM(FaceClass f); + const char *ENUM(PointClass p); + + + + struct ClassificationInfo { + const carve::poly::Polyhedron *intersected_poly; + int intersected_manifold; + FaceClass classification; + + ClassificationInfo() : intersected_poly(NULL), intersected_manifold(-1), classification(FACE_UNCLASSIFIED) { } + ClassificationInfo(const carve::poly::Polyhedron *_intersected_poly, + int _intersected_manifold, + FaceClass _classification) : + intersected_poly(_intersected_poly), + intersected_manifold(_intersected_manifold), + classification(_classification) { + } + bool intersectedManifoldIsClosed() const { + return intersected_poly->manifold_is_closed[intersected_manifold]; + } + }; + + + + struct EC2 { + EdgeClass cls[2]; + EC2() { cls[0] = cls[1] = EDGE_UNK; } + EC2(EdgeClass a, EdgeClass b) { cls[0] = a; cls[1] = b; } + }; + + struct PC2 { + PointClass cls[2]; + PC2() { cls[0] = cls[1] = POINT_UNK; } + PC2(PointClass a, PointClass b) { cls[0] = a; cls[1] = b; } + }; + + typedef std::unordered_map EdgeClassification; + + typedef std::unordered_map VertexClassification; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/cmake-config.h.in b/thirdparty/carve-1.4.0/include/carve/cmake-config.h.in new file mode 100644 index 00000000..ac5ac0ec --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/cmake-config.h.in @@ -0,0 +1,11 @@ +#define CARVE_VERSION "@CARVE_VERSION@" + +#cmakedefine HAVE_TR1_UNORDERED_COLLECTIONS +#cmakedefine HAVE_STD_UNORDERED_COLLECTIONS +#cmakedefine HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS +#cmakedefine HAVE_BOOST_UNORDERED_COLLECTIONS + +#cmakedefine CARVE_SYSTEM_BOOST + +#cmakedefine CARVE_DEBUG +#cmakedefine CARVE_DEBUG_WRITE_PLY_DATA diff --git a/thirdparty/carve-1.4.0/include/carve/collection.hpp b/thirdparty/carve-1.4.0/include/carve/collection.hpp new file mode 100644 index 00000000..8738d0d5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection.hpp @@ -0,0 +1,51 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +namespace carve { + + template + class set_insert_iterator : public std::iterator { + + protected: + set_t *set; + public: + + set_insert_iterator(set_t &s) : set(&s) { + } + + set_insert_iterator & + operator=(typename set_t::const_reference value) { + set->insert(value); + return *this; + } + + set_insert_iterator &operator*() { return *this; } + set_insert_iterator &operator++() { return *this; } + set_insert_iterator &operator++(int) { return *this; } + }; + + template + inline set_insert_iterator + set_inserter(set_t &s) { + return set_insert_iterator(s); + } + +} diff --git a/thirdparty/carve-1.4.0/include/carve/collection/Makefile.am b/thirdparty/carve-1.4.0/include/carve/collection/Makefile.am new file mode 100644 index 00000000..97e248da --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS=unordered +includedir=@includedir@/carve/collection + +include_HEADERS= unordered.hpp diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered.hpp new file mode 100644 index 00000000..73038ecd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered.hpp @@ -0,0 +1,43 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#if defined(HAVE_STD_UNORDERED_COLLECTIONS) + +# include + +#elif defined(HAVE_TR1_UNORDERED_COLLECTIONS) + +# include + +#elif defined(HAVE_BOOST_UNORDERED_COLLECTIONS) + +# include + +#elif defined(HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS) + +# include + +#elif defined(_MSC_VER) && _MSC_VER >= 1300 + +# include + +#else + +# include + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/Makefile.am b/thirdparty/carve-1.4.0/include/carve/collection/unordered/Makefile.am new file mode 100644 index 00000000..f0327cf1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/Makefile.am @@ -0,0 +1,4 @@ +includedir=@includedir@/carve/collection/unordered + +include_HEADERS= boost_impl.hpp fallback_impl.hpp libstdcpp_impl.hpp \ + std_impl.hpp tr1_impl.hpp diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/boost_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/boost_impl.hpp new file mode 100644 index 00000000..f0617d08 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/boost_impl.hpp @@ -0,0 +1,43 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include BOOST_INCLUDE(unordered_set.hpp) +#include BOOST_INCLUDE(unordered_map.hpp) + +#include + +namespace std { + + template , + typename Pred = std::equal_to > + class unordered_map : public boost::unordered_map { + + public: + typedef T data_type; + + }; + + template , + typename Pred = std::equal_to > + class unordered_set : public boost::unordered_set { + }; + +} + +#undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/fallback_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/fallback_impl.hpp new file mode 100644 index 00000000..fc60d73a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/fallback_impl.hpp @@ -0,0 +1,42 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +namespace std { + + template + class unordered_map : public std::map { + typedef std::map super; + public: + typedef typename super::data_type mapped_type; + unordered_map() : super() {} + }; + + template + class unordered_set : public std::set { + typedef std::set super; + public: + unordered_set() : super() {} + }; + +} + +#undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/libstdcpp_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/libstdcpp_impl.hpp new file mode 100644 index 00000000..80d901ba --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/libstdcpp_impl.hpp @@ -0,0 +1,41 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include +#include + +namespace std { + + template > + class unordered_map : public __gnu_cxx::hash_map { + typedef __gnu_cxx::hash_map super; + public: + typedef typename super::data_type mapped_type; + unordered_map() : super() {} + }; + + template > + class unordered_set : public __gnu_cxx::hash_set { + typedef __gnu_cxx::hash_set super; + public: + unordered_set() : super() {} + }; + +} + +#define UNORDERED_COLLECTIONS_SUPPORT_RESIZE 1 diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/std_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/std_impl.hpp new file mode 100644 index 00000000..be0070f4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/std_impl.hpp @@ -0,0 +1,23 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +#undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/tr1_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/tr1_impl.hpp new file mode 100644 index 00000000..ab9a34f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/tr1_impl.hpp @@ -0,0 +1,40 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +namespace std { + + template > + class unordered_map : public std::tr1::unordered_map { + public: + typedef T data_type; + }; + + template > + class unordered_set : public std::tr1::unordered_set { + public: + }; + +} + +#undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE diff --git a/thirdparty/carve-1.4.0/include/carve/collection/unordered/vcpp_impl.hpp b/thirdparty/carve-1.4.0/include/carve/collection/unordered/vcpp_impl.hpp new file mode 100644 index 00000000..627803e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection/unordered/vcpp_impl.hpp @@ -0,0 +1,65 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +namespace std { + + namespace { + + template class hash_traits { + Hash hash_value; + std::less comp; + public: + enum { + bucket_size = 4, + min_buckets = 8 + }; + // hash _Keyval to size_t value + size_t operator()(const Value& v) const { + return ((size_t)hash_value(v)); + } + // test if _Keyval1 ordered before _Keyval2 + bool operator()(const Value& v1, const Value& v2) const { + return (comp(v1, v2)); + } + }; + + } + + template >, typename Pred = std::equal_to > + class unordered_map + : public stdext::hash_map > { + typedef stdext::hash_map > super; + public: + unordered_map() : super() {} + }; + + template >, typename Pred = std::equal_to > + class unordered_set + : public stdext::hash_set > { + typedef stdext::hash_set > super; + public: + unordered_set() : super() {} + }; + +} + +#undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE diff --git a/thirdparty/carve-1.4.0/include/carve/collection_types.hpp b/thirdparty/carve-1.4.0/include/carve/collection_types.hpp new file mode 100644 index 00000000..b3fbaac7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/collection_types.hpp @@ -0,0 +1,66 @@ + +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +namespace carve { + namespace csg { + + typedef std::pair< + const carve::poly::Geometry<3>::vertex_t *, + const carve::poly::Geometry<3>::vertex_t *> V2; + + typedef std::pair< + const carve::poly::Geometry<3>::face_t *, + const carve::poly::Geometry<3>::face_t *> F2; + + static inline V2 ordered_edge( + const carve::poly::Geometry<3>::vertex_t *a, + const carve::poly::Geometry<3>::vertex_t *b) { + return V2(std::min(a, b), std::max(a, b)); + } + + static inline V2 flip(const V2 &v) { + return V2(v.second, v.first); + } + + // include/carve/csg.hpp include/carve/faceloop.hpp + // lib/intersect.cpp lib/intersect_classify_common_impl.hpp + // lib/intersect_classify_edge.cpp + // lib/intersect_classify_group.cpp + // lib/intersect_classify_simple.cpp + // lib/intersect_face_division.cpp lib/intersect_group.cpp + // lib/intersect_half_classify_group.cpp + typedef std::unordered_set< + V2, + carve::poly::hash_vertex_ptr> V2Set; + + // include/carve/csg.hpp include/carve/polyhedron_decl.hpp + // lib/csg_collector.cpp lib/intersect.cpp + // lib/intersect_common.hpp lib/intersect_face_division.cpp + // lib/polyhedron.cpp + typedef std::unordered_map< + const carve::poly::Geometry<3>::vertex_t *, + const carve::poly::Geometry<3>::vertex_t *, + carve::poly::hash_vertex_ptr> VVMap; + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/colour.hpp b/thirdparty/carve-1.4.0/include/carve/colour.hpp new file mode 100644 index 00000000..65062776 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/colour.hpp @@ -0,0 +1,47 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +namespace carve { + namespace colour { + static inline void HSV2RGB(float H, float S, float V, float &r, float &g, float &b) { + H = 6.0f * H; + if (S < 5.0e-6) { + r = g = b = V; return; + } else { + int i = (int)H; + float f = H - i; + float p1 = V * (1.0f - S); + float p2 = V * (1.0f - S * f); + float p3 = V * (1.0f - S * (1.0f - f)); + switch (i) { + case 0: r = V; g = p3; b = p1; return; + case 1: r = p2; g = V; b = p1; return; + case 2: r = p1; g = V; b = p3; return; + case 3: r = p1; g = p2; b = V; return; + case 4: r = p3; g = p1; b = V; return; + case 5: r = V; g = p1; b = p2; return; + } + } + r = g = b = 0.0; + } + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/config.h.in b/thirdparty/carve-1.4.0/include/carve/config.h.in new file mode 100644 index 00000000..1ac6039e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/config.h.in @@ -0,0 +1,18 @@ +#pragma once + +/* Carve version number */ +#undef CARVE_VERSION + +/* Define if using gnu libstdc++. */ +#undef HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS + +/* Define if using boost collections. */ +#undef HAVE_BOOST_UNORDERED_COLLECTIONS + +/* Define if std::unordered_map and std::unordered_set are supported by your + compiler. */ +#undef HAVE_STD_UNORDERED_COLLECTIONS + +/* Define if TR1 collections are supportted by your compiler. */ +#undef HAVE_TR1_UNORDERED_COLLECTIONS + diff --git a/thirdparty/carve-1.4.0/include/carve/convex_hull.hpp b/thirdparty/carve-1.4.0/include/carve/convex_hull.hpp new file mode 100644 index 00000000..d9b9e93c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/convex_hull.hpp @@ -0,0 +1,52 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +#include + +#include + +namespace carve { + namespace geom { + std::vector convexHull(const std::vector &points); + + template + std::vector convexHull(const project_t &project, const polygon_container_t &points) { + std::vector proj; + proj.reserve(points.size()); + for (typename polygon_container_t::const_iterator i = points.begin(); i != points.end(); ++i) { + proj.push_back(project(*i)); + } + return convexHull(proj); + } + + template + std::vector convexHull(const project_t &project, iter_t beg, iter_t end, size_t size_hint = 0) { + std::vector proj; + if (size_hint) proj.reserve(size_hint); + for (; beg != end; ++beg) { + proj.push_back(project(*beg)); + } + return convexHull(proj); + } + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/csg.hpp b/thirdparty/carve-1.4.0/include/carve/csg.hpp new file mode 100644 index 00000000..61f60be9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/csg.hpp @@ -0,0 +1,475 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +#include + +#include + +#include + +#include +#include +#include +#include +#include + +namespace carve { + namespace csg { + + class VertexPool { + const static unsigned blocksize = 1024; + typedef std::list > pool_t; + pool_t pool; + public: + void reset(); + carve::poly::Polyhedron::vertex_t *get(const carve::geom3d::Vector &v = carve::geom3d::Vector::ZERO()); + bool inPool(const carve::poly::Polyhedron::vertex_t *v) const; + + VertexPool(); + ~VertexPool(); + }; + + + + namespace detail { + struct Data; + class LoopEdges; + } + + /** + * \class CSG + * \brief The class responsible for the computation of CSG operations. + * + */ + class CSG { + private: + + public: + struct Hook { + /** + * \class Hook + * \brief Provides API access to intermediate steps in CSG calculation. + * + */ + virtual void intersectionVertex(const carve::poly::Polyhedron::vertex_t *vertex, + const IObjPairSet &intersections) { + } + virtual void processOutputFace(std::vector &faces, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) { + } + virtual void resultFace(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) { + } + + virtual ~Hook() { + } + }; + + /** + * \class Hooks + * \brief Management of API hooks. + * + */ + class Hooks { + public: + enum { + RESULT_FACE_HOOK = 0, + PROCESS_OUTPUT_FACE_HOOK = 1, + INTERSECTION_VERTEX_HOOK = 2, + HOOK_MAX = 3, + + RESULT_FACE_BIT = 0x0001, + PROCESS_OUTPUT_FACE_BIT = 0x0002, + INTERSECTION_VERTEX_BIT = 0x0004 + }; + + std::vector > hooks; + + bool hasHook(unsigned hook_num); + + void intersectionVertex(const carve::poly::Polyhedron::vertex_t *vertex, + const IObjPairSet &intersections); + + void processOutputFace(std::vector &faces, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped); + + void resultFace(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped); + + void registerHook(Hook *hook, unsigned hook_bits); + void unregisterHook(Hook *hook); + + void reset(); + + Hooks(); + ~Hooks(); + }; + + /** + * \class Collector + * \brief Base class for objects responsible for selecting result from which form the result polyhedron. + * + */ + class Collector { + Collector(const Collector &); + Collector &operator=(const Collector &); + + protected: + + public: + virtual void collect(FaceLoopGroup *group, CSG::Hooks &) =0; + virtual carve::poly::Polyhedron *done(CSG::Hooks &) =0; + + Collector() {} + virtual ~Collector() {} + }; + + private: + /// The computed intersection data. + Intersections intersections; + + /// A map from intersection point to a set of intersections + /// represented by pairs of intersection objects. + VertexIntersections vertex_intersections; + + /// A pool from which temporary vertices are allocated. Also + /// provides testing for pool membership. + VertexPool vertex_pool; + + void init(); + + void makeVertexIntersections(); + + void groupIntersections(); + + void determinePotentiallyInteractingOctreeNodes( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b); + + void generateVertexEdgeIntersections( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b); + + /** + * \brief Generate vertex-vertex, vertex-edge and edge-edge intersections between poly \a a and poly \a b. + * + * @param a Polyhedron a. + * @param b Polyhedron b. + */ + void generateEdgeEdgeIntersections( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b); + + /** + * \brief Generate vertex-face and edge-face intersections between poly \a a and poly \a b. + * + * @param a Polyhedron a. + * @param b Polyhedron b. + */ + void generateEdgeFaceIntersections( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b); + + /** + * \brief Compute all points of intersection between poly \a a and poly \a b + * + * @param a Polyhedron a. + * @param b Polyhedron b. + */ + void generateIntersections( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b); + + /** + * \brief Generate tables of intersecting pairs of faces. + * + * @param[out] data Internal data-structure holding intersection info. + */ + void intersectingFacePairs(detail::Data &data); + + /** + * \brief Divide edges in \a edges that are intersected by polyhedron \a poly + * + * @param edges The edges to divide. + * @param[in] poly The polyhedron to divide against. + * @param[in,out] data Intersection information. + */ + void divideEdges( + const std::vector &edges, + const carve::poly::Polyhedron *poly, + detail::Data &data); + + void divideIntersectedEdges(detail::Data &data); + + /** + * \brief From the intersection points of pairs of intersecting faces, compute intersection edges. + * + * @param[out] eclass Classification information about created edges. + * @param[in,out] data Intersection information. + */ + void makeFaceEdges( + EdgeClassification &eclass, + detail::Data &data); + + friend void classifyEasyFaces( + FaceLoopList &face_loops, + VertexClassification &vclass, + const carve::poly::Polyhedron *other_poly, + int other_poly_num, + CSG &csg, + CSG::Collector &collector); + + size_t generateFaceLoops( + const carve::poly::Polyhedron *poly, + const detail::Data &data, + FaceLoopList &face_loops_out); + + + + // intersect_group.cpp + + /** + * \brief Build a loop edge mapping from a list of face loops. + * + * @param[in] loops A list of face loops. + * @param[in] edge_count A hint as to the number of edges in \a loops. + * @param[out] edge_map The calculated map of edges to loops. + */ + void makeEdgeMap( + const FaceLoopList &loops, + size_t edge_count, + detail::LoopEdges &edge_map); + + /** + * \brief Divide a list of face loops into groups that are connected by at least one edge not present in \a no_cross. + * + * @param[in,out] face_loops The list of loops (will be emptied as a side effect) + * @param[in] loop_edges A loop edge map used for traversing connected loops. + * @param[in] no_cross A set of edges not to cross. + * @param[out] out_loops A list of grouped face loops. + */ + void groupFaceLoops( + FaceLoopList &face_loops, + const detail::LoopEdges &loop_edges, + const V2Set &no_cross, + FLGroupList &out_loops); + + /** + * \brief Find the set of edges shared between two edge maps. + * + * @param[in] edge_map_a The first edge map. + * @param[in] edge_map_b The second edge map. + * @param[out] shared_edges The resulting set of common edges. + */ + void findSharedEdges( + const detail::LoopEdges &edge_map_a, + const detail::LoopEdges &edge_map_b, + V2Set &shared_edges); + + + // intersect_classify_edge.cpp + + /** + * + * + * @param shared_edges + * @param vclass + * @param poly_a + * @param a_loops_grouped + * @param a_edge_map + * @param poly_b + * @param b_loops_grouped + * @param b_edge_map + * @param collector + */ + void classifyFaceGroupsEdge( + const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + CSG::Collector &collector); + + // intersect_classify_group.cpp + + /** + * + * + * @param shared_edges + * @param vclass + * @param poly_a + * @param a_loops_grouped + * @param a_edge_map + * @param poly_b + * @param b_loops_grouped + * @param b_edge_map + * @param collector + */ + void classifyFaceGroups( + const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + CSG::Collector &collector); + + // intersect_half_classify_group.cpp + + /** + * + * + * @param shared_edges + * @param vclass + * @param poly_a + * @param a_loops_grouped + * @param a_edge_map + * @param poly_b + * @param b_loops_grouped + * @param b_edge_map + * @param FaceClass + * @param b_out + */ + void halfClassifyFaceGroups( + const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + std::list > &b_out); + + // intersect.cpp + + /** + * \brief The main calculation method for CSG. + * + * @param[in] a Polyhedron a + * @param[in] b Polyhedron b + * @param[out] vclass + * @param[out] eclass + * @param[out] a_face_loops + * @param[out] b_face_loops + * @param[out] a_edge_count + * @param[out] b_edge_count + */ + void calc( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + VertexClassification &vclass, + EdgeClassification &eclass, + FaceLoopList &a_face_loops, + FaceLoopList &b_face_loops, + size_t &a_edge_count, + size_t &b_edge_count); + + public: + /** + * \enum OP + * \brief Enumeration of the supported CSG operations. + */ + enum OP { + UNION, /**< in a or b. */ + INTERSECTION, /**< in a and b. */ + A_MINUS_B, /**< in a, but not b. */ + B_MINUS_A, /**< in b, but not a. */ + SYMMETRIC_DIFFERENCE, /**< in a or b, but not both. */ + ALL /**< all split faces from a and b */ + }; + + /** + * \enum CLASSIFY_TYPE + * \brief The type of classification algorithm to use. + */ + enum CLASSIFY_TYPE { + CLASSIFY_NORMAL, /**< Normal (group) classifier. */ + CLASSIFY_EDGE /**< Edge classifier. */ + }; + + CSG::Hooks hooks; /**< The manager for calculation hooks. */ + + CSG(); + ~CSG(); + + /** + * \brief Compute a CSG operation between two polyhedra, \a a and \a b. + * + * @param a Polyhedron a + * @param b Polyhedron b + * @param collector The collector (determines the CSG operation performed) + * @param shared_edges A pointer to a set that will be populated with shared edges (if not NULL). + * @param classify_type The type of classifier to use. + * + * @return + */ + carve::poly::Polyhedron *compute( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + CSG::Collector &collector, + V2Set *shared_edges = NULL, + CLASSIFY_TYPE classify_type = CLASSIFY_NORMAL); + + /** + * \brief Compute a CSG operation between two closed polyhedra, \a a and \a b. + * + * @param a Polyhedron a + * @param b Polyhedron b + * @param op The CSG operation (A collector is created automatically). + * @param shared_edges A pointer to a set that will be populated with shared edges (if not NULL). + * @param classify_type The type of classifier to use. + * + * @return + */ + carve::poly::Polyhedron *compute( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + OP op, + V2Set *shared_edges = NULL, + CLASSIFY_TYPE classify_type = CLASSIFY_NORMAL); + + void slice( + const carve::poly::Polyhedron *a, + const carve::poly::Polyhedron *b, + std::list &a_sliced, + std::list &b_sliced, + V2Set *shared_edges = NULL); + + bool sliceAndClassify( + const carve::poly::Polyhedron *closed, + const carve::poly::Polyhedron *open, + std::list > &result, + V2Set *shared_edges = NULL); + }; + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/csg_triangulator.hpp b/thirdparty/carve-1.4.0/include/carve/csg_triangulator.hpp new file mode 100644 index 00000000..261199a3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/csg_triangulator.hpp @@ -0,0 +1,416 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#include +#include +#include +#include + +namespace carve { + namespace csg { + + namespace detail { + template + class CarveTriangulator : public csg::CSG::Hook { + + public: + CarveTriangulator() { + } + + virtual ~CarveTriangulator() { + } + + virtual void processOutputFace(std::vector &faces, + const poly::Polyhedron::face_t *orig, + bool flipped) { + std::vector out_faces; + + size_t n_tris = 0; + for (size_t f = 0; f < faces.size(); ++f) { + CARVE_ASSERT(faces[f]->nVertices() >= 3); + n_tris += faces[f]->nVertices() - 2; + } + + out_faces.reserve(n_tris); + + for (size_t f = 0; f < faces.size(); ++f) { + poly::Polyhedron::face_t *face = faces[f]; + + if (face->nVertices() == 3) { + out_faces.push_back(face); + continue; + } + + std::vector result; + + std::vector vloop; + face->getVertexLoop(vloop); + + triangulate::triangulate(face->projector(), vloop, result); + if (with_improvement) { + triangulate::improve(face->projector(), vloop, result); + } + + std::vector fv; + fv.resize(3); + for (size_t i = 0; i < result.size(); ++i) { + fv[0] = vloop[result[i].a]; + fv[1] = vloop[result[i].b]; + fv[2] = vloop[result[i].c]; + out_faces.push_back(face->create(fv, false)); + } + delete face; + } + std::swap(faces, out_faces); + } + }; + } + + typedef detail::CarveTriangulator CarveTriangulator; + typedef detail::CarveTriangulator CarveTriangulatorWithImprovement; + + class CarveTriangulationImprover : public csg::CSG::Hook { + public: + CarveTriangulationImprover() { + } + + virtual ~CarveTriangulationImprover() { + } + + virtual void processOutputFace(std::vector &faces, + const poly::Polyhedron::face_t *orig, + bool flipped) { + if (faces.size() == 1) return; + + // doing improvement as a separate hook is much messier than + // just incorporating it into the triangulation hook. + + typedef std::map vert_map_t; + std::vector out_faces; + vert_map_t vert_map; + + out_faces.reserve(faces.size()); + + poly::p2_adapt_project<3> projector(faces[0]->project); + + std::vector result; + + for (size_t f = 0; f < faces.size(); ++f) { + poly::Polyhedron::face_t *face = faces[f]; + if (face->nVertices() != 3) { + out_faces.push_back(face); + } else { + triangulate::tri_idx tri; + for (size_t i = 0; i < 3; ++i) { + size_t v = 0; + vert_map_t::iterator j = vert_map.find(face->vertex(i)); + if (j == vert_map.end()) { + v = vert_map.size(); + vert_map[face->vertex(i)] = v; + } else { + v = (*j).second; + } + tri.v[i] = v; + } + result.push_back(tri); + delete face; + } + } + + std::vector verts; + verts.resize(vert_map.size()); + for (vert_map_t::iterator i = vert_map.begin(); i != vert_map.end(); ++i) { + verts[(*i).second] = (*i).first; + } + + triangulate::improve(projector, verts, result); + + std::vector fv; + fv.resize(3); + for (size_t i = 0; i < result.size(); ++i) { + fv[0] = verts[result[i].a]; + fv[1] = verts[result[i].b]; + fv[2] = verts[result[i].c]; + out_faces.push_back(orig->create(fv, false)); + } + + std::swap(faces, out_faces); + } + }; + + class CarveTriangulationQuadMerger : public csg::CSG::Hook { + // this code is incomplete. + typedef std::map edge_map_t; + + public: + CarveTriangulationQuadMerger() { + } + + virtual ~CarveTriangulationQuadMerger() { + } + + double scoreQuad(edge_map_t::iterator i, edge_map_t &edge_map) { + if (!(*i).second.first || !(*i).second.second) return -1; + } + + poly::Polyhedron::face_t *mergeQuad(edge_map_t::iterator i, edge_map_t &edge_map) { + return NULL; + } + + void recordEdge(const poly::Polyhedron::vertex_t *v1, + const poly::Polyhedron::vertex_t *v2, + const poly::Polyhedron::face_t *f, + edge_map_t &edge_map) { + if (v1 < v2) { + edge_map[V2(v1, v2)].first = f; + } else { + edge_map[V2(v2, v1)].second = f; + } + } + + virtual void processOutputFace(std::vector &faces, + const poly::Polyhedron::face_t *orig, + bool flipped) { + if (faces.size() == 1) return; + + std::vector out_faces; + edge_map_t edge_map; + + out_faces.reserve(faces.size()); + + poly::p2_adapt_project<3> projector(faces[0]->project); + + for (size_t f = 0; f < faces.size(); ++f) { + poly::Polyhedron::face_t *face = faces[f]; + if (face->nVertices() != 3) { + out_faces.push_back(face); + } else { + recordEdge(face->vertex(0), face->vertex(1), face, edge_map); + recordEdge(face->vertex(1), face->vertex(2), face, edge_map); + recordEdge(face->vertex(2), face->vertex(0), face, edge_map); + } + } + + for (edge_map_t::iterator i = edge_map.begin(); i != edge_map.end();) { + if ((*i).second.first && (*i).second.second) { + ++i; + } else { + edge_map.erase(i++); + } + } + + while (edge_map.size()) { + edge_map_t::iterator i = edge_map.begin(); + edge_map_t::iterator best = i; + double best_score = scoreQuad(i, edge_map); + for (++i; i != edge_map.end(); ++i) { + double score = scoreQuad(i, edge_map); + if (score > best_score) best = i; + } + if (best_score < 0) break; + out_faces.push_back(mergeQuad(best, edge_map)); + } + + if (edge_map.size()) { + tagable::tag_begin(); + for (edge_map_t::iterator i = edge_map.begin(); i != edge_map.end(); ++i) { + poly::Polyhedron::face_t *a = const_cast((*i).second.first); + poly::Polyhedron::face_t *b = const_cast((*i).second.first); + if (a && a->tag_once()) out_faces.push_back(a); + if (b && b->tag_once()) out_faces.push_back(b); + } + } + + std::swap(faces, out_faces); + } + }; + + class CarveHoleResolver : public csg::CSG::Hook { + + public: + CarveHoleResolver() { + } + + virtual ~CarveHoleResolver() { + } + + bool findRepeatedEdges(const std::vector &vertices, + std::list > &edge_pos) { + std::map edges; + for (size_t i = 0; i < vertices.size() - 1; ++i) { + edges[std::make_pair(vertices[i], vertices[i+1])] = i; + } + edges[std::make_pair(vertices[vertices.size()-1], vertices[0])] = vertices.size() - 1; + + for (std::map::iterator i = edges.begin(); i != edges.end(); ++i) { + V2 rev = V2((*i).first.second, (*i).first.first); + std::map::iterator j = edges.find(rev); + if (j != edges.end()) { + edge_pos.push_back(std::make_pair((*i).second, (*j).second)); + } + } + return edge_pos.size() > 0; + } + + void flood(size_t t1, + size_t t2, + size_t old_grp, + size_t new_grp_1, + size_t new_grp_2, + std::vector &grp, + const std::vector &tris, + const std::map, size_t> &tri_edge) { + grp[t1] = new_grp_1; + grp[t2] = new_grp_2; + + std::deque to_visit; + to_visit.push_back(t1); + to_visit.push_back(t2); + std::vector > rev; + rev.resize(3); + while (to_visit.size()) { + size_t curr = to_visit.front(); + to_visit.pop_front(); + triangulate::tri_idx ct = tris[curr]; + rev[0] = std::make_pair(ct.b, ct.a); + rev[1] = std::make_pair(ct.c, ct.b); + rev[2] = std::make_pair(ct.a, ct.c); + + for (size_t i = 0; i < 3; ++i) { + std::map, size_t>::const_iterator adj = tri_edge.find(rev[i]); + if (adj == tri_edge.end()) continue; + size_t next = (*adj).second; + if (grp[next] != old_grp) continue; + grp[next] = grp[curr]; + to_visit.push_back(next); + } + } + } + + void findPerimeter(const std::vector &tris, + const std::vector &verts, + std::vector &out) { + std::map, size_t> edges; + for (size_t i = 0; i < tris.size(); ++i) { + edges[std::make_pair(tris[i].a, tris[i].b)] = i; + edges[std::make_pair(tris[i].b, tris[i].c)] = i; + edges[std::make_pair(tris[i].c, tris[i].a)] = i; + } + std::map unpaired; + for (std::map, size_t>::iterator i = edges.begin(); i != edges.end(); ++i) { + if (edges.find(std::make_pair((*i).first.second, (*i).first.first)) == edges.end()) { + CARVE_ASSERT(unpaired.find((*i).first.first) == unpaired.end()); + unpaired[(*i).first.first] = (*i).first.second; + } + } + out.clear(); + out.reserve(unpaired.size()); + size_t start = (*unpaired.begin()).first; + size_t vert = start; + do { + out.push_back(verts[vert]); + CARVE_ASSERT(unpaired.find(vert) != unpaired.end()); + vert = unpaired[vert]; + } while (vert != start); + } + + virtual void processOutputFace(std::vector &faces, + const poly::Polyhedron::face_t *orig, + bool flipped) { + std::vector out_faces; + + for (size_t f = 0; f < faces.size(); ++f) { + poly::Polyhedron::face_t *face = faces[f]; + + if (face->nVertices() == 3) { + out_faces.push_back(face); + continue; + } + + std::vector vloop; + face->getVertexLoop(vloop); + + std::list > rep_edges; + if (!findRepeatedEdges(vloop, rep_edges)) { + out_faces.push_back(face); + continue; + } + + std::vector result; + triangulate::triangulate(face->projector(), vloop, result); + + std::map, size_t> tri_edge; + for (size_t i = 0; i < result.size(); ++i) { + tri_edge[std::make_pair(result[i].a, result[i].b)] = i; + tri_edge[std::make_pair(result[i].b, result[i].c)] = i; + tri_edge[std::make_pair(result[i].c, result[i].a)] = i; + } + + std::vector grp; + grp.resize(result.size(), 0); + + size_t grp_max = 0; + + while (rep_edges.size()) { + std::pair e1, e2; + + e1.first = rep_edges.front().first; + e1.second = (e1.first + 1) % vloop.size(); + + e2.first = rep_edges.front().second; + e2.second = (e2.first + 1) % vloop.size(); + + rep_edges.pop_front(); + + CARVE_ASSERT(tri_edge.find(e1) != tri_edge.end()); + size_t t1 = tri_edge[e1]; + CARVE_ASSERT(tri_edge.find(e2) != tri_edge.end()); + size_t t2 = tri_edge[e2]; + + if (grp[t1] != grp[t2]) { + continue; + } + + size_t t1g = ++grp_max; + size_t t2g = ++grp_max; + + flood(t1, t2, grp[t1], t1g, t2g, grp, result, tri_edge); + } + + std::set groups; + std::copy(grp.begin(), grp.end(), std::inserter(groups, groups.begin())); + + // now construct perimeters for each group. + std::vector grp_tris; + grp_tris.reserve(result.size()); + for (std::set::iterator i = groups.begin(); i != groups.end(); ++i) { + size_t grp_id = *i; + grp_tris.clear(); + for (size_t j = 0; j < grp.size(); ++j) { + if (grp[j] == grp_id) { + grp_tris.push_back(result[j]); + } + } + std::vector grp_perim; + findPerimeter(grp_tris, vloop, grp_perim); + out_faces.push_back(face->create(grp_perim, false)); + } + } + std::swap(faces, out_faces); + } + }; + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/debug_hooks.hpp b/thirdparty/carve-1.4.0/include/carve/debug_hooks.hpp new file mode 100644 index 00000000..19d61232 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/debug_hooks.hpp @@ -0,0 +1,96 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include + +#include + +template +void map_histogram(std::ostream &out, const MAP &map) { + std::vector hist; + for (typename MAP::const_iterator i = map.begin(); i != map.end(); ++i) { + size_t n = (*i).second.size(); + if (hist.size() <= n) { + hist.resize(n + 1); + } + hist[n]++; + } + int total = map.size(); + std::string bar(50, '*'); + for (size_t i = 0; i < hist.size(); i++) { + if (hist[i] > 0) { + out << std::setw(5) << i << " : " << std::setw(5) << hist[i] << " " << bar.substr(50 - hist[i] * 50 / total) << std::endl; + } + } +} + +namespace carve { + namespace csg { + class IntersectDebugHooks { + public: + virtual void drawIntersections(const VertexIntersections &vint) { + } + + virtual void drawOctree(const Octree &o) { + } + + virtual void drawPoint(const carve::poly::Polyhedron::vertex_t *v, + float r, float g, float b, float a, + float rad) { + } + virtual void drawEdge(const carve::poly::Polyhedron::vertex_t *v1, const carve::poly::Polyhedron::vertex_t *v2, + float rA, float gA, float bA, float aA, + float rB, float gB, float bB, float aB, + float thickness = 1.0) { + } + + virtual void drawFaceLoopWireframe(const std::vector &face_loop, + const carve::poly::Polyhedron::vertex_t &normal, + float r, float g, float b, float a, + bool inset = true) { + } + + virtual void drawFaceLoop(const std::vector &face_loop, + const carve::poly::Polyhedron::vertex_t &normal, + float r, float g, float b, float a, + bool offset = true, + bool lit = true) { + } + + virtual void drawFaceLoop2(const std::vector &face_loop, + const carve::poly::Polyhedron::vertex_t &normal, + float rF, float gF, float bF, float aF, + float rB, float gB, float bB, float aB, + bool offset = true, + bool lit = true) { + } + + virtual ~IntersectDebugHooks() { + } + }; + + IntersectDebugHooks *intersect_installDebugHooks(IntersectDebugHooks *hooks); + bool intersect_debugEnabled(); + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/djset.hpp b/thirdparty/carve-1.4.0/include/carve/djset.hpp new file mode 100644 index 00000000..ed214769 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/djset.hpp @@ -0,0 +1,134 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + + + +namespace carve { +namespace djset { + + + + class djset { + + protected: + struct elem { + size_t parent, rank; + elem(size_t p, size_t r) : parent(p), rank(r) {} + elem() {} + }; + + std::vector set; + size_t n_sets; + + public: + djset() : set(), n_sets(0) { + } + + djset(size_t N) { + n_sets = N; + set.reserve(N); + for (size_t i = 0; i < N; ++i) { + set.push_back(elem(i,0)); + } + } + + void init(size_t N) { + if (N == set.size()) { + for (size_t i = 0; i < N; ++i) { + set[i] = elem(i,0); + } + n_sets = N; + } else { + djset temp(N); + std::swap(set, temp.set); + std::swap(n_sets, temp.n_sets); + } + } + + size_t count() const { + return n_sets; + } + + size_t find_set_head(size_t a) { + if (a == set[a].parent) return a; + + size_t a_head = a; + while (set[a_head].parent != a_head) a_head = set[a_head].parent; + set[a].parent = a_head; + return a_head; + } + + bool same_set(size_t a, size_t b) { + return find_set_head(a) == find_set_head(b); + } + + void merge_sets(size_t a, size_t b) { + a = find_set_head(a); + b = find_set_head(b); + if (a != b) { + n_sets--; + if (set[a].rank < set[b].rank) { + set[a].parent = b; + } else if (set[b].rank < set[a].rank) { + set[b].parent = a; + } else { + set[a].rank++; + set[b].parent = a; + } + } + } + + void get_index_to_set(std::vector &index_set, std::vector &set_size) { + index_set.clear(); + index_set.resize(set.size(), n_sets); + set_size.clear(); + set_size.resize(n_sets, 0); + + size_t c = 0; + for (size_t i = 0; i < set.size(); ++i) { + size_t s = find_set_head(i); + if (index_set[s] == n_sets) index_set[s] = c++; + index_set[i] = index_set[s]; + set_size[index_set[s]]++; + } + } + + template + void collate(in_iter_t in, out_collection_t &out) { + std::vector set_id(set.size(), n_sets); + out.clear(); + out.resize(n_sets); + size_t c = 0; + for (size_t i = 0; i < set.size(); ++i) { + size_t s = find_set_head(i); + if (set_id[s] == n_sets) set_id[s] = c++; + s = set_id[s]; + std::insert_iterator j(out[s], out[s].end()); + *j = *in++; + } + } + }; + + + +} +} diff --git a/thirdparty/carve-1.4.0/include/carve/edge_decl.hpp b/thirdparty/carve-1.4.0/include/carve/edge_decl.hpp new file mode 100644 index 00000000..5d415cfe --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/edge_decl.hpp @@ -0,0 +1,68 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include +#include + +namespace carve { + namespace poly { + + + + struct Object; + + + + template + class Edge : public tagable { + public: + typedef Vertex vertex_t; + typedef typename Vertex::vector_t vector_t; + typedef Object obj_t; + + const vertex_t *v1, *v2; + const obj_t *owner; + + Edge(const vertex_t *_v1, const vertex_t *_v2, const obj_t *_owner) : + tagable(), v1(_v1), v2(_v2), owner(_owner) { + } + + ~Edge() { + } + }; + + + + struct hash_edge_ptr { + template + size_t operator()(const Edge * const &e) const { + return (size_t)e; + } + }; + + + + } +} + diff --git a/thirdparty/carve-1.4.0/include/carve/edge_impl.hpp b/thirdparty/carve-1.4.0/include/carve/edge_impl.hpp new file mode 100644 index 00000000..e3d286bf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/edge_impl.hpp @@ -0,0 +1,23 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace carve { + namespace poly { + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/external/README.BOOST b/thirdparty/carve-1.4.0/include/carve/external/README.BOOST new file mode 100644 index 00000000..cb3c879e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/README.BOOST @@ -0,0 +1,30 @@ +BOOST unordered_map, unordered_set and random. From Boost 1.40 + +Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +Copyright (C) 2005-2007 Daniel James. + +Distributed under the following license: + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/aligned_storage.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/aligned_storage.hpp new file mode 100644 index 00000000..6f958e14 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/aligned_storage.hpp @@ -0,0 +1,181 @@ +//----------------------------------------------------------------------------- +// boost aligned_storage.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_ALIGNED_STORAGE_HPP +#define BOOST_ALIGNED_STORAGE_HPP + +#include // for std::size_t + +#include "carve/external/boost/config.hpp" +#include "carve/external/boost/detail/workaround.hpp" +#include "carve/external/boost/type_traits/alignment_of.hpp" +#include "carve/external/boost/type_traits/type_with_alignment.hpp" +#include "carve/external/boost/type_traits/is_pod.hpp" + +#include "carve/external/boost/mpl/eval_if.hpp" +#include "carve/external/boost/mpl/identity.hpp" + +#include "carve/external/boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { + +namespace detail { namespace aligned_storage { + +BOOST_STATIC_CONSTANT( + std::size_t + , alignment_of_max_align = ::boost::alignment_of::value + ); + +// +// To be TR1 conforming this must be a POD type: +// +template < + std::size_t size_ + , std::size_t alignment_ +> +struct aligned_storage_imp +{ + union data_t + { + char buf[size_]; + + typename mpl::eval_if_c< + alignment_ == std::size_t(-1) + , mpl::identity + , type_with_alignment + >::type align_; + } data_; + void* address() const { return const_cast(this); } +}; + +template< std::size_t alignment_ > +struct aligned_storage_imp<0u,alignment_> +{ + /* intentionally empty */ + void* address() const { return 0; } +}; + +}} // namespace detail::aligned_storage + +template < + std::size_t size_ + , std::size_t alignment_ = std::size_t(-1) +> +class aligned_storage : +#ifndef __BORLANDC__ + private +#else + public +#endif + detail::aligned_storage::aligned_storage_imp +{ + +public: // constants + + typedef detail::aligned_storage::aligned_storage_imp type; + + BOOST_STATIC_CONSTANT( + std::size_t + , size = size_ + ); + BOOST_STATIC_CONSTANT( + std::size_t + , alignment = ( + alignment_ == std::size_t(-1) + ? ::boost::detail::aligned_storage::alignment_of_max_align + : alignment_ + ) + ); + +#if defined(__GNUC__) &&\ + (__GNUC__ > 3) ||\ + (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 ||\ + (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >=3))) + +private: // noncopyable + + aligned_storage(const aligned_storage&); + aligned_storage& operator=(const aligned_storage&); + +#else // gcc less than 3.2.3 + +public: // _should_ be noncopyable, but GCC compiler emits error + + aligned_storage(const aligned_storage&); + aligned_storage& operator=(const aligned_storage&); + +#endif // gcc < 3.2.3 workaround + +public: // structors + + aligned_storage() + { + } + + ~aligned_storage() + { + } + +public: // accessors + + void* address() + { + return static_cast(this)->address(); + } + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + + const void* address() const + { + return static_cast(this)->address(); + } + +#else // MSVC6 + + const void* address() const; + +#endif // MSVC6 workaround + +}; + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +// MSVC6 seems not to like inline functions with const void* returns, so we +// declare the following here: + +template +const void* aligned_storage::address() const +{ + return const_cast< aligned_storage* >(this)->address(); +} + +#endif // MSVC6 workaround + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +// +// Make sure that is_pod recognises aligned_storage<>::type +// as a POD (Note that aligned_storage<> itself is not a POD): +// +template +struct is_pod > + BOOST_TT_AUX_BOOL_C_BASE(true) +{ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(true) +}; +#endif + + +} // namespace boost + +#include "carve/external/boost/type_traits/detail/bool_trait_undef.hpp" + +#endif // BOOST_ALIGNED_STORAGE_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/assert.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/assert.hpp new file mode 100644 index 00000000..0ec0f26f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/assert.hpp @@ -0,0 +1,50 @@ +// +// boost/assert.hpp - BOOST_ASSERT(expr) +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2007 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// Note: There are no include guards. This is intentional. +// +// See http://www.boost.org/libs/utility/assert.html for documentation. +// + +#undef BOOST_ASSERT + +#if defined(BOOST_DISABLE_ASSERTS) + +# define BOOST_ASSERT(expr) ((void)0) + +#elif defined(BOOST_ENABLE_ASSERT_HANDLER) + +#include + +namespace boost +{ + +void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined + +} // namespace boost + +#define BOOST_ASSERT(expr) ((expr)? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)) + +#else +# include // .h to support old libraries w/o - effect is the same +# define BOOST_ASSERT(expr) assert(expr) +#endif + +#undef BOOST_VERIFY + +#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) ) + +# define BOOST_VERIFY(expr) ((void)(expr)) + +#else + +# define BOOST_VERIFY(expr) BOOST_ASSERT(expr) + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config.hpp new file mode 100644 index 00000000..b68bfb4f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config.hpp @@ -0,0 +1,70 @@ +// Boost config.hpp configuration header file ------------------------------// + +// (C) Copyright John Maddock 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config +// +// CAUTION: This file is intended to be completely stable - +// DO NOT MODIFY THIS FILE! +// + +#ifndef BOOST_CONFIG_HPP +#define BOOST_CONFIG_HPP + +// if we don't have a user config, then use the default location: +#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG) +# define BOOST_USER_CONFIG +#endif +// include it first: +#ifdef BOOST_USER_CONFIG +# include BOOST_USER_CONFIG +#endif + +// if we don't have a compiler config set, try and find one: +#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a compiler config, include it now: +#ifdef BOOST_COMPILER_CONFIG +# include BOOST_COMPILER_CONFIG +#endif + +// if we don't have a std library config set, try and find one: +#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a std library config, include it now: +#ifdef BOOST_STDLIB_CONFIG +# include BOOST_STDLIB_CONFIG +#endif + +// if we don't have a platform config set, try and find one: +#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a platform config, include it now: +#ifdef BOOST_PLATFORM_CONFIG +# include BOOST_PLATFORM_CONFIG +#endif + +// get config suffix code: +#include + +#endif // BOOST_CONFIG_HPP + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_prefix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_prefix.hpp new file mode 100644 index 00000000..49f42494 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_prefix.hpp @@ -0,0 +1,27 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// for C++ Builder the following options effect the ABI: +// +// -b (on or off - effect emum sizes) +// -Vx (on or off - empty members) +// -Ve (on or off - empty base classes) +// -aX (alignment - 5 options). +// -pX (Calling convention - 4 options) +// -VmX (member pointer size and layout - 5 options) +// -VC (on or off, changes name mangling) +// -Vl (on or off, changes struct layout). + +// In addition the following warnings are sufficiently annoying (and +// unfixable) to have them turned off by default: +// +// 8027 - functions containing [for|while] loops are not expanded inline +// 8026 - functions taking class by value arguments are not expanded inline + +#pragma nopushoptwarn +# pragma option push -Vx -Ve -a8 -b -pc -Vmv -VC- -Vl- -w-8027 -w-8026 + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_suffix.hpp new file mode 100644 index 00000000..940535f3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/borland_suffix.hpp @@ -0,0 +1,12 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +# pragma option pop +#pragma nopushoptwarn + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_prefix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_prefix.hpp new file mode 100644 index 00000000..97f06cdc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_prefix.hpp @@ -0,0 +1,22 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// +// Boost binaries are built with the compiler's default ABI settings, +// if the user changes their default alignment in the VS IDE then their +// code will no longer be binary compatible with the bjam built binaries +// unless this header is included to force Boost code into a consistent ABI. +// +// Note that inclusion of this header is only necessary for libraries with +// separate source, header only libraries DO NOT need this as long as all +// translation units are built with the same options. +// +#if defined(_M_X64) +# pragma pack(push,16) +#else +# pragma pack(push,8) +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_suffix.hpp new file mode 100644 index 00000000..a64d783e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/abi/msvc_suffix.hpp @@ -0,0 +1,8 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#pragma pack(pop) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/borland.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/borland.hpp new file mode 100644 index 00000000..9951732c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/borland.hpp @@ -0,0 +1,266 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Borland C++ compiler setup: + +// +// versions check: +// we don't support Borland prior to version 5.4: +#if __BORLANDC__ < 0x540 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// last known compiler version: +#if (__BORLANDC__ > 0x610) +//# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +//# else +//# pragma message( "Unknown compiler version - please run the configure tests and report the results") +//# endif +#elif (__BORLANDC__ == 0x600) +# error "CBuilderX preview compiler is no longer supported" +#endif + +// +// Support macros to help with standard library detection +#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL) +# define BOOST_BCB_WITH_ROGUE_WAVE +#elif __BORLANDC__ < 0x570 +# define BOOST_BCB_WITH_STLPORT +#else +# define BOOST_BCB_WITH_DINKUMWARE +#endif + +// +// Version 5.0 and below: +# if __BORLANDC__ <= 0x0550 +// Borland C++Builder 4 and 5: +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# if __BORLANDC__ == 0x0550 +// Borland C++Builder 5, command-line compiler 5.5: +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif +# endif + +// Version 5.51 and below: +#if (__BORLANDC__ <= 0x551) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_DEDUCED_TYPENAME +// workaround for missing WCHAR_MAX/WCHAR_MIN: +#include +#include +#ifndef WCHAR_MAX +# define WCHAR_MAX 0xffff +#endif +#ifndef WCHAR_MIN +# define WCHAR_MIN 0 +#endif +#endif + +// Borland C++ Builder 6 and below: +#if (__BORLANDC__ <= 0x564) +# define BOOST_NO_INTEGRAL_INT64_T + +# ifdef NDEBUG + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif + +// +// new bug in 5.61: +#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580) + // this seems to be needed by the command line compiler, but not the IDE: +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +// Borland C++ Builder 2006 Update 2 and below: +#if (__BORLANDC__ <= 0x582) +# define BOOST_NO_SFINAE +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# define BOOST_NO_TEMPLATE_TEMPLATES + +# define BOOST_NO_PRIVATE_IN_AGGREGATE + +# ifdef _WIN32 +# define BOOST_NO_SWPRINTF +# elif defined(linux) || defined(__linux__) || defined(__linux) + // we should really be able to do without this + // but the wcs* functions aren't imported into std:: +# define BOOST_NO_STDC_NAMESPACE + // _CPPUNWIND doesn't get automatically set for some reason: +# pragma defineonoption BOOST_CPPUNWIND -x +# endif +#endif + +// Borland C++ Builder 2007 December 2007 Update and below: +//#if (__BORLANDC__ <= 0x593) +#if (__BORLANDC__ <= 0x610) // Beman has asked Alisdair for more info + // we shouldn't really need this - but too many things choke + // without it, this needs more investigation: +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS + +// Temporary workaround +#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif + +// Borland C++ Builder 2008 and below: +#if (__BORLANDC__ <= 0x601) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_ILLEGAL_CV_REFERENCES +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_NO_NESTED_FRIENDSHIP +# define BOOST_NO_TYPENAME_WITH_CTOR +#endif + +// +// Positive Feature detection +// +// Borland C++ Builder 2008 and below: +#if (__BORLANDC__ >= 0x599) +# pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax +#endif +// +// C++0x Macros: +// +#if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610) +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DECLTYPE +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_STATIC_ASSERT +#else +# define BOOST_HAS_ALIGNOF +# define BOOST_HAS_CHAR16_T +# define BOOST_HAS_CHAR32_T +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_EXPLICIT_CONVERSION_OPS +# define BOOST_HAS_REF_QUALIFIER +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS // UTF-8 still not supported +#define BOOST_NO_VARIADIC_TEMPLATES + +#if __BORLANDC__ >= 0x590 +# define BOOST_HAS_TR1_HASH + +# define BOOST_HAS_MACRO_USE_FACET +#endif + +// +// Post 0x561 we have long long and stdint.h: +#if __BORLANDC__ >= 0x561 +# ifndef __NO_LONG_LONG +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif + // On non-Win32 platforms let the platform config figure this out: +# ifdef _WIN32 +# define BOOST_HAS_STDINT_H +# endif +#endif + +// Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is +// defined, then we have 0x560 or greater with the Rogue Wave implementation +// which presumably has the std::DBL_MAX bug. +#if defined( BOOST_BCB_WITH_ROGUE_WAVE ) +// is partly broken, some macros define symbols that are really in +// namespace std, so you end up having to use illegal constructs like +// std::DBL_MAX, as a fix we'll just include float.h and have done with: +#include +#endif +// +// __int64: +// +#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DECLSPEC +#endif +// +// ABI fixing headers: +// +#if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "carve/external/boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "carve/external/boost/config/abi/borland_suffix.hpp" +#endif +#endif +// +// Disable Win32 support in ANSI mode: +// +#if __BORLANDC__ < 0x600 +# pragma defineonoption BOOST_DISABLE_WIN32 -A +#elif defined(__STRICT_ANSI__) +# define BOOST_DISABLE_WIN32 +#endif +// +// MSVC compatibility mode does some nasty things: +// TODO: look up if this doesn't apply to the whole 12xx range +// +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_VOID_RETURNS +#endif + +#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__) + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/codegear.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/codegear.hpp new file mode 100644 index 00000000..dd94a3e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/codegear.hpp @@ -0,0 +1,157 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// CodeGear C++ compiler setup: + +#if !defined( BOOST_WITH_CODEGEAR_WARNINGS ) +// these warnings occur frequently in optimized template code +# pragma warn -8004 // var assigned value, but never used +# pragma warn -8008 // condition always true/false +# pragma warn -8066 // dead code can never execute +# pragma warn -8104 // static members with ctors not threadsafe +# pragma warn -8105 // reference member in class without ctors +#endif +// +// versions check: +// last known and checked version is 0x610 +#if (__CODEGEARC__ > 0x610) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message( "Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + +// CodeGear C++ Builder 2009 +#if (__CODEGEARC__ <= 0x610) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_NO_USING_TEMPLATE + // we shouldn't really need this - but too many things choke + // without it, this needs more investigation: +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type +# define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member + +// Temporary hack, until specific MPL preprocessed headers are generated +# define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +# ifdef NDEBUG + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif + +// +// C++0x macros: +// +#define BOOST_HAS_CHAR16_T +#define BOOST_HAS_CHAR32_T +#define BOOST_HAS_LONG_LONG +// #define BOOST_HAS_ALIGNOF +#define BOOST_HAS_DECLTYPE +#define BOOST_HAS_EXPLICIT_CONVERSION_OPS +// #define BOOST_HAS_RVALUE_REFS +#define BOOST_HAS_SCOPED_ENUM +// #define BOOST_HAS_STATIC_ASSERT +#define BOOST_HAS_STD_TYPE_TRAITS + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// TR1 macros: +// +#define BOOST_HAS_TR1_HASH +#define BOOST_HAS_TR1_TYPE_TRAITS +#define BOOST_HAS_TR1_UNORDERED_MAP +#define BOOST_HAS_TR1_UNORDERED_SET + +#define BOOST_HAS_MACRO_USE_FACET + +#define BOOST_NO_INITIALIZER_LISTS + +// On non-Win32 platforms let the platform config figure this out: +#ifdef _WIN32 +# define BOOST_HAS_STDINT_H +#endif + +// +// __int64: +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_DECLSPEC +#endif +// +// ABI fixing headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "carve/external/boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "carve/external/boost/config/abi/borland_suffix.hpp" +#endif +// +// Disable Win32 support in ANSI mode: +// +# pragma defineonoption BOOST_DISABLE_WIN32 -A +// +// MSVC compatibility mode does some nasty things: +// TODO: look up if this doesn't apply to the whole 12xx range +// +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_VOID_RETURNS +#endif + +#define BOOST_COMPILER "CodeGear C++ version " BOOST_STRINGIZE(__CODEGEARC__) + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/comeau.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/comeau.hpp new file mode 100644 index 00000000..21d40e2e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/comeau.hpp @@ -0,0 +1,59 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Douglas Gregor 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Comeau C++ compiler setup: + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +#if (__COMO_VERSION__ <= 4245) + +# if defined(_MSC_VER) && _MSC_VER <= 1300 +# if _MSC_VER > 100 + // only set this in non-strict mode: +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# endif +# endif + +// Void returns don't work when emulating VC 6 (Peter Dimov) +// TODO: look up if this doesn't apply to the whole 12xx range +# if defined(_MSC_VER) && (_MSC_VER < 1300) +# define BOOST_NO_VOID_RETURNS +# endif + +#endif // version 4245 + +// +// enable __int64 support in VC emulation mode +// +# if defined(_MSC_VER) && (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +# endif + +#define BOOST_COMPILER "Comeau compiler version " BOOST_STRINGIZE(__COMO_VERSION__) + +// +// versions check: +// we don't know Comeau prior to version 4245: +#if __COMO_VERSION__ < 4245 +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4245: +#if (__COMO_VERSION__ > 4245) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/common_edg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/common_edg.hpp new file mode 100644 index 00000000..75c2f57f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/common_edg.hpp @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright Markus Schoepflin 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// +// Options common to all edg based compilers. +// +// This is included from within the individual compiler mini-configs. + +#ifndef __EDG_VERSION__ +# error This file requires that __EDG_VERSION__ be defined. +#endif + +#if (__EDG_VERSION__ <= 238) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_SFINAE +#endif + +#if (__EDG_VERSION__ <= 240) +# define BOOST_NO_VOID_RETURNS +#endif + +#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +#endif + +#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES) +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT) +# define BOOST_NO_IS_ABSTRACT +#endif + +#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// See also kai.hpp which checks a Kai-specific symbol for EH +# if !defined(__KCC) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +# if !defined(__NO_LONG_LONG) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG +// +#if (__EDG_VERSION__ <= 310) || !defined(BOOST_STRICT_CONFIG) +// No support for initializer lists +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#ifdef c_plusplus +// EDG has "long long" in non-strict mode +// However, some libraries have insufficient "long long" support +// #define BOOST_HAS_LONG_LONG +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/compaq_cxx.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/compaq_cxx.hpp new file mode 100644 index 00000000..ad6201c9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/compaq_cxx.hpp @@ -0,0 +1,19 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Tru64 C++ compiler setup (now HP): + +#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER) + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +// +// versions check: +// Nothing to do here? + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/digitalmars.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/digitalmars.hpp new file mode 100644 index 00000000..3818f1ad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/digitalmars.hpp @@ -0,0 +1,92 @@ +// Copyright (C) Christof Meerwald 2003 +// Copyright (C) Dan Watkins 2003 +// +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Digital Mars C++ compiler setup: +#define BOOST_COMPILER __DMC_VERSION_STRING__ + +#define BOOST_HAS_LONG_LONG +#define BOOST_HAS_PRAGMA_ONCE + +#if (__DMC__ <= 0x833) +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TEMPLATE_TEMPLATES +#define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING +#define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#endif +#if (__DMC__ <= 0x840) || !defined(BOOST_STRICT_CONFIG) +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#define BOOST_NO_OPERATORS_IN_NAMESPACE +#define BOOST_NO_UNREACHABLE_RETURN_DETECTION +#define BOOST_NO_SFINAE +#define BOOST_NO_USING_TEMPLATE +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// has macros: +#if (__DMC__ >= 0x840) +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_STDINT_H +#define BOOST_HAS_WINTHREADS +#endif + +#if (__DMC__ >= 0x847) +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + +// +// Is this really the best way to detect whether the std lib is in namespace std? +// +#include +#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD) +# define BOOST_NO_STDC_NAMESPACE +#endif + + +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +// +// C++0x features +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#if __DMC__ < 0x800 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is ...: +#if (__DMC__ > 0x848) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc.hpp new file mode 100644 index 00000000..94653c89 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc.hpp @@ -0,0 +1,186 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Jens Maurer 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Douglas Gregor 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Synge Todo 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// GNU C++ compiler setup: + +#if __GNUC__ < 3 +# if __GNUC_MINOR__ == 91 + // egcs 1.1 won't parse shared_ptr.hpp without this: +# define BOOST_NO_AUTO_PTR +# endif +# if __GNUC_MINOR__ < 95 + // + // Prior to gcc 2.95 member templates only partly + // work - define BOOST_MSVC6_MEMBER_TEMPLATES + // instead since inline member templates mostly work. + // +# define BOOST_NO_MEMBER_TEMPLATES +# if __GNUC_MINOR__ >= 9 +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif +# endif + +# if __GNUC_MINOR__ < 96 +# define BOOST_NO_SFINAE +# endif + +# if __GNUC_MINOR__ <= 97 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif + +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_IS_ABSTRACT +#elif __GNUC__ == 3 +# if defined (__PATHSCALE__) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_IS_ABSTRACT +# endif + // + // gcc-3.x problems: + // + // Bug specific to gcc 3.1 and 3.2: + // +# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2)) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# endif +# if __GNUC_MINOR__ < 4 +# define BOOST_NO_IS_ABSTRACT +# endif +#endif +#if __GNUC__ < 4 +// +// All problems to gcc-3.x and earlier here: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#ifndef __EXCEPTIONS +# define BOOST_NO_EXCEPTIONS +#endif + + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +// +// gcc implements the named return value optimization since version 3.1 +// +#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) +#define BOOST_HAS_NRVO +#endif +// +// RTTI and typeinfo detection is possible post gcc-4.3: +// +#if __GNUC__ * 100 + __GNUC_MINOR__ >= 403 +# ifndef __GXX_RTTI +# define BOOST_NO_TYPEID +# define BOOST_NO_RTTI +# endif +#endif + +// C++0x features not implemented in any GCC version +// +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_SCOPED_ENUMS until it +// gets fixed. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_TEMPLATE_ALIASES + +// C++0x features in 4.3.n and later +// +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__) +// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are +// passed on the command line, which in turn defines +// __GXX_EXPERIMENTAL_CXX0X__. +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +# define BOOST_HAS_VARIADIC_TMPL +#else +# define BOOST_NO_DECLTYPE +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_STATIC_ASSERT + +// Variadic templates compiler: +// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html +# ifdef __VARIADIC_TEMPLATES +# define BOOST_HAS_VARIADIC_TMPL +# else +# define BOOST_NO_VARIADIC_TEMPLATES +# endif +#endif + +// C++0x features in 4.4.n and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_UNICODE_LITERALS +#endif + +// ConceptGCC compiler: +// http://www.generic-programming.org/software/ConceptGCC/ +#ifdef __GXX_CONCEPTS__ +# define BOOST_HAS_CONCEPTS +# define BOOST_COMPILER "ConceptGCC version " __VERSION__ +#else +# define BOOST_NO_CONCEPTS +#endif + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "GNU C++ version " __VERSION__ +#endif + +// +// versions check: +// we don't know gcc prior to version 2.90: +#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90) +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4.3 (Pre-release): +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 3)) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +// we don't emit warnings here anymore since there are no defect macros defined for +// gcc post 3.4, so any failures are gcc regressions... +//# warning "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc_xml.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc_xml.hpp new file mode 100644 index 00000000..5dd67c76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/gcc_xml.hpp @@ -0,0 +1,30 @@ +// (C) Copyright John Maddock 2006. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// GCC-XML C++ compiler setup: + +# if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3)) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/greenhills.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/greenhills.hpp new file mode 100644 index 00000000..faffd7d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/greenhills.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Greenhills C++ compiler setup: + +#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs) + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +// +// versions check: +// we don't support Greenhills prior to version 0: +#if __ghs < 0 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0: +#if (__ghs > 0) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/hp_acc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/hp_acc.hpp new file mode 100644 index 00000000..688b1b8b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/hp_acc.hpp @@ -0,0 +1,125 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// HP aCC C++ compiler setup: + +#if defined(__EDG__) +#include "carve/external/boost/config/compiler/common_edg.hpp" +#endif + +#if (__HP_aCC <= 33100) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# if !defined(_NAMESPACE_STD) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +# endif +#endif + +#if (__HP_aCC <= 33300) +// member templates are sufficiently broken that we disable them for now +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +#endif + +#if (__HP_aCC <= 38000) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if (__HP_aCC > 50000) && (__HP_aCC < 60000) +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SWPRINTF +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +// optional features rather than defects: +#if (__HP_aCC >= 33900) +# define BOOST_HAS_LONG_LONG +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 ) +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +// This macro should not be defined when compiling in strict ansi +// mode, but, currently, we don't have the ability to determine +// what standard mode we are compiling with. Some future version +// of aCC6 compiler will provide predefined macros reflecting the +// compilation options, including the standard mode. +#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98)) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#define BOOST_COMPILER "HP aCC version " BOOST_STRINGIZE(__HP_aCC) + +// +// versions check: +// we don't support HP aCC prior to version 33000: +#if __HP_aCC < 33000 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// +// Extended checks for supporting aCC on PA-RISC +#if __HP_aCC > 30000 && __HP_aCC < 50000 +# if __HP_aCC < 38000 + // versions prior to version A.03.80 not supported +# error "Compiler version not supported - version A.03.80 or higher is required" +# elif !defined(__hpxstd98) + // must compile using the option +hpxstd98 with version A.03.80 and above +# error "Compiler option '+hpxstd98' is required for proper support" +# endif //PA-RISC +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if !defined(__EDG__) + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#endif + +// +// last known and checked version for HP-UX/ia64 is 61300 +// last known and checked version for PA-RISC is 38000 +#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98))) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/intel.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/intel.hpp new file mode 100644 index 00000000..a7c05096 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/intel.hpp @@ -0,0 +1,173 @@ +// (C) Copyright John Maddock 2001-8. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright Guillaume Melquiond 2002 - 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Martin Wille 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Intel compiler setup: + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +#if defined(__INTEL_COMPILER) +# define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER +#elif defined(__ICL) +# define BOOST_INTEL_CXX_VERSION __ICL +#elif defined(__ICC) +# define BOOST_INTEL_CXX_VERSION __ICC +#elif defined(__ECC) +# define BOOST_INTEL_CXX_VERSION __ECC +#endif + +#define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) +#define BOOST_INTEL BOOST_INTEL_CXX_VERSION + +#if defined(_WIN32) || defined(_WIN64) +# define BOOST_INTEL_WIN BOOST_INTEL +#else +# define BOOST_INTEL_LINUX BOOST_INTEL +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 600) + +# if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov) + +// Boost libraries assume strong standard conformance unless otherwise +// indicated by a config macro. As configured by Intel, the EDG front-end +// requires certain compiler options be set to achieve that strong conformance. +// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt) +// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for +// details as they apply to particular versions of the compiler. When the +// compiler does not predefine a macro indicating if an option has been set, +// this config file simply assumes the option has been set. +// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if +// the compiler option is not enabled. + +# define BOOST_NO_SWPRINTF +# endif + +// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov) + +# if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +#endif + +// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864 +#if BOOST_INTEL_CXX_VERSION < 600 +# define BOOST_NO_INTRINSIC_WCHAR_T +#else +// We should test the macro _WCHAR_T_DEFINED to check if the compiler +// supports wchar_t natively. *BUT* there is a problem here: the standard +// headers define this macro if they typedef wchar_t. Anyway, we're lucky +// because they define it without a value, while Intel C++ defines it +// to 1. So we can check its value to see if the macro was defined natively +// or not. +// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T +// is used instead. +# if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0) +# define BOOST_NO_INTRINSIC_WCHAR_T +# endif +#endif + +#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +// +// Figure out when Intel is emulating this gcc bug +// (All Intel versions prior to 9.0.26, and versions +// later than that if they are set up to emulate gcc 3.2 +// or earlier): +// +# if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# endif +#endif +#if (defined(__GNUC__) && (__GNUC__ < 4)) || defined(_WIN32) || (BOOST_INTEL_CXX_VERSION <= 1100) +// GCC or VC emulation: +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif +// +// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T +// set correctly, if we don't do this now, we will get errors later +// in type_traits code among other things, getting this correct +// for the Intel compiler is actually remarkably fragile and tricky: +// +#if defined(BOOST_NO_INTRINSIC_WCHAR_T) +#include +template< typename T > struct assert_no_intrinsic_wchar_t; +template<> struct assert_no_intrinsic_wchar_t { typedef void type; }; +// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T +// where it is defined above: +typedef assert_no_intrinsic_wchar_t::type assert_no_intrinsic_wchar_t_; +#else +template< typename T > struct assert_intrinsic_wchar_t; +template<> struct assert_intrinsic_wchar_t {}; +// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line: +template<> struct assert_intrinsic_wchar_t {}; +#endif + +#if _MSC_VER+0 >= 1000 +# if _MSC_VER >= 1200 +# define BOOST_HAS_MS_INT64 +# endif +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#elif defined(_WIN32) +# define BOOST_DISABLE_WIN32 +#endif + +// I checked version 6.0 build 020312Z, it implements the NRVO. +// Correct this as you find out which version of the compiler +// implemented the NRVO first. (Daniel Frey) +#if (BOOST_INTEL_CXX_VERSION >= 600) +# define BOOST_HAS_NRVO +#endif + +// +// versions check: +// we don't support Intel prior to version 5.0: +#if BOOST_INTEL_CXX_VERSION < 500 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// Intel on MacOS requires +#if defined(__APPLE__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// Intel on Altix Itanium +#if defined(__itanium__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// +// last known and checked version: +#if (BOOST_INTEL_CXX_VERSION > 1100) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# elif defined(_MSC_VER) +// +// We don't emit this warning any more, since we have so few +// defect macros set anyway (just the one). +// +//# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/kai.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/kai.hpp new file mode 100644 index 00000000..ae61ec7b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/kai.hpp @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Kai C++ compiler setup: + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG) + // at least on Sun, the contents of is not in namespace std +# define BOOST_NO_STDC_NAMESPACE +# endif + +// see also common_edg.hpp which needs a special check for __KCC +# if !defined(_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +// +// last known and checked version is 4001: +#if (__KCC_VERSION > 4001) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/metrowerks.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/metrowerks.hpp new file mode 100644 index 00000000..e1e9329c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/metrowerks.hpp @@ -0,0 +1,137 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Stefan Slapeta 2004. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Metrowerks C++ compiler setup: + +// locale support is disabled when linking with the dynamic runtime +# ifdef _MSL_NO_LOCALE +# define BOOST_NO_STD_LOCALE +# endif + +# if __MWERKS__ <= 0x2301 // 5.3 +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_POINTER_TO_MEMBER_CONST +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# endif + +# if __MWERKS__ <= 0x2401 // 6.2 +//# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if(__MWERKS__ <= 0x2407) // 7.x +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# endif + +# if(__MWERKS__ <= 0x3003) // 8.x +# define BOOST_NO_SFINAE +# endif + +// the "|| !defined(BOOST_STRICT_CONFIG)" part should apply to the last +// tested version *only*: +# if(__MWERKS__ <= 0x3207) || !defined(BOOST_STRICT_CONFIG) // 9.6 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_IS_ABSTRACT +# endif + +#if !__option(wchar_type) +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if !__option(exceptions) +# define BOOST_NO_EXCEPTIONS +#endif + +#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh) +# if __MWERKS__ == 0x3000 +# define BOOST_COMPILER_VERSION 8.0 +# elif __MWERKS__ == 0x3001 +# define BOOST_COMPILER_VERSION 8.1 +# elif __MWERKS__ == 0x3002 +# define BOOST_COMPILER_VERSION 8.2 +# elif __MWERKS__ == 0x3003 +# define BOOST_COMPILER_VERSION 8.3 +# elif __MWERKS__ == 0x3200 +# define BOOST_COMPILER_VERSION 9.0 +# elif __MWERKS__ == 0x3201 +# define BOOST_COMPILER_VERSION 9.1 +# elif __MWERKS__ == 0x3202 +# define BOOST_COMPILER_VERSION 9.2 +# elif __MWERKS__ == 0x3204 +# define BOOST_COMPILER_VERSION 9.3 +# elif __MWERKS__ == 0x3205 +# define BOOST_COMPILER_VERSION 9.4 +# elif __MWERKS__ == 0x3206 +# define BOOST_COMPILER_VERSION 9.5 +# elif __MWERKS__ == 0x3207 +# define BOOST_COMPILER_VERSION 9.6 +# else +# define BOOST_COMPILER_VERSION __MWERKS__ +# endif +#else +# define BOOST_COMPILER_VERSION __MWERKS__ +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if __MWERKS__ > 0x3206 && __option(rvalue_refs) +# define BOOST_HAS_RVALUE_REFS +#else +# define BOOST_NO_RVALUE_REFERENCES +#endif +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Metrowerks prior to version 5.3: +#if __MWERKS__ < 0x2301 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version: +#if (__MWERKS__ > 0x3205) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/mpw.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/mpw.hpp new file mode 100644 index 00000000..ac536c00 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/mpw.hpp @@ -0,0 +1,79 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// MPW C++ compilers setup: + +# if defined(__SC__) +# define BOOST_COMPILER "MPW SCpp version " BOOST_STRINGIZE(__SC__) +# elif defined(__MRC__) +# define BOOST_COMPILER "MPW MrCpp version " BOOST_STRINGIZE(__MRC__) +# else +# error "Using MPW compiler configuration by mistake. Please update." +# endif + +// +// MPW 8.90: +// +#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_USING_TEMPLATE + +# define BOOST_NO_CWCHAR +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + +# define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */ + +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// versions check: +// we don't support MPW prior to version 8.9: +#if MPW_CPLUS < 0x890 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x890: +#if (MPW_CPLUS > 0x890) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/pgi.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/pgi.hpp new file mode 100644 index 00000000..64650cea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/pgi.hpp @@ -0,0 +1,60 @@ +// (C) Copyright Noel Belcourt 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// PGI C++ compiler setup: + +#define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__ +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// + +#if (__PGIC__ >= 7) + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_SWPRINTF + +#else + +# error "Pgi compiler not configured - please reconfigure" + +#endif +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// version check: +// probably nothing to do here? + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sgi_mipspro.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sgi_mipspro.hpp new file mode 100644 index 00000000..e7b6660b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sgi_mipspro.hpp @@ -0,0 +1,29 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// SGI C++ compiler setup: + +#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +#include "carve/external/boost/config/compiler/common_edg.hpp" + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// +#define BOOST_HAS_THREADS +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +#undef BOOST_NO_SWPRINTF +#undef BOOST_DEDUCED_TYPENAME + +// +// version check: +// probably nothing to do here? + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sunpro_cc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sunpro_cc.hpp new file mode 100644 index 00000000..c4407232 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/sunpro_cc.hpp @@ -0,0 +1,128 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Peter Dimov 2002. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright David Abrahams 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Sun C++ compiler setup: + +# if __SUNPRO_CC <= 0x500 +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if (__SUNPRO_CC <= 0x520) + // + // Sunpro 5.2 and earler: + // + // although sunpro 5.2 supports the syntax for + // inline initialization it often gets the value + // wrong, especially where the value is computed + // from other constants (J Maddock 6th May 2001) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // Although sunpro 5.2 supports the syntax for + // partial specialization, it often seems to + // bind to the wrong specialization. Better + // to disable it until suppport becomes more stable + // (J Maddock 6th May 2001). +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# endif + +# if (__SUNPRO_CC <= 0x530) + // Requesting debug info (-g) with Boost.Python results + // in an internal compiler error for "static const" + // initialized in-class. + // >> Assertion: (../links/dbg_cstabs.cc, line 611) + // while processing ../test.cpp at line 0. + // (Jens Maurer according to Gottfried Ganssauge 04 Mar 2002) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // SunPro 5.3 has better support for partial specialization, + // but breaks when compiling std::less > + // (Jens Maurer 4 Nov 2001). + + // std::less specialization fixed as reported by George + // Heintzelman; partial specialization re-enabled + // (Peter Dimov 17 Jan 2002) + +//# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + // integral constant expressions with 64 bit numbers fail +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +# if (__SUNPRO_CC < 0x570) +# define BOOST_NO_TEMPLATE_TEMPLATES + // see http://lists.boost.org/MailArchives/boost/msg47184.php + // and http://lists.boost.org/MailArchives/boost/msg47220.php +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_SFINAE +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif +# if (__SUNPRO_CC <= 0x580) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Issues that effect all known versions: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_ADL_BARRIER + +// +// C++0x features +// + +#if(__SUNPRO_CC >= 0x590) +# define BOOST_HAS_LONG_LONG +#else +# define BOOST_NO_LONG_LONG +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// Version +// + +#define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC) + +// +// versions check: +// we don't support sunpro prior to version 4: +#if __SUNPRO_CC < 0x400 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x590: +#if (__SUNPRO_CC > 0x590) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/vacpp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/vacpp.hpp new file mode 100644 index 00000000..b526a6b0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/vacpp.hpp @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Toon Knapen 2001 - 2003. +// (C) Copyright Lie-Quan Lee 2001. +// (C) Copyright Markus Schoepflin 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Visual Age (IBM) C++ compiler setup: + +#if __IBMCPP__ <= 501 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +#if (__IBMCPP__ <= 502) +// Actually the compiler supports inclass member initialization but it +// requires a definition for the class member and it doesn't recognize +// it as an integral constant expression when used as a template argument. +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +# define BOOST_NO_INITIALIZER_LISTS +#endif + +// +// On AIX thread support seems to be indicated by _THREAD_SAFE: +// +#ifdef _THREAD_SAFE +# define BOOST_HAS_THREADS +#endif + +#define BOOST_COMPILER "IBM Visual Age version " BOOST_STRINGIZE(__IBMCPP__) + +// +// versions check: +// we don't support Visual age prior to version 5: +#if __IBMCPP__ < 500 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 600: +#if (__IBMCPP__ > 1010) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + +// Some versions of the compiler have issues with default arguments on partial specializations +#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/visualc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/visualc.hpp new file mode 100644 index 00000000..87a34a04 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/compiler/visualc.hpp @@ -0,0 +1,250 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Microsoft Visual C++ compiler setup: + +#define BOOST_MSVC _MSC_VER + +// turn off the warnings before we #include anything +#pragma warning( disable : 4503 ) // warning: decorated name length exceeded + +#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 +# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_EXCEPTION_STD_NAMESPACE + +# if BOOST_MSVC == 1202 +# define BOOST_NO_STD_TYPEINFO +# endif + + // disable min/max macro defines on vc6: + // +#endif + +#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0 + +# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# endif + +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_DEDUCED_TYPENAME +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE + +// VC++ 6/7 has member templates but they have numerous problems including +// cases of silent failure, so for safety we define: +# define BOOST_NO_MEMBER_TEMPLATES +// For VC++ experts wishing to attempt workarounds, we define: +# define BOOST_MSVC6_MEMBER_TEMPLATES + +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SFINAE +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? +# if (_MSC_VER > 1200) +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# endif + +#endif + +#if _MSC_VER < 1400 +// although a conforming signature for swprint exists in VC7.1 +// it appears not to actually work: +# define BOOST_NO_SWPRINTF +#endif + +#if defined(UNDER_CE) +// Windows CE does not have a conforming signature for swprintf +# define BOOST_NO_SWPRINTF +#endif + +#if _MSC_VER <= 1400 // 1400 == VC++ 8.0 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +#if _MSC_VER <= 1600 // 1600 == VC++ 10.0 +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if _MSC_VER == 1500 // 1500 == VC++ 9.0 + // A bug in VC9: +# define BOOST_NO_ADL_BARRIER +#endif + +#if _MSC_VER <= 1500 || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0 +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#ifndef _NATIVE_WCHAR_T_DEFINED +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if defined(_WIN32_WCE) || defined(UNDER_CE) +# define BOOST_NO_THREADEX +# define BOOST_NO_GETSYSTEMTIMEASFILETIME +# define BOOST_NO_SWPRINTF +#endif + +// +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +// +// __int64 support: +// +#if (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +#endif +#if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS) +# define BOOST_HAS_LONG_LONG +#else +# define BOOST_NO_LONG_LONG +#endif +#if (_MSC_VER >= 1400) && !defined(_DEBUG) +# define BOOST_HAS_NRVO +#endif +// +// disable Win32 API's if compiler extentions are +// turned off: +// +#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) +# define BOOST_DISABLE_WIN32 +#endif +#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#endif + +// +// all versions support __declspec: +// +#define BOOST_HAS_DECLSPEC + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG + +// C++ features supported by VC++ 10 (aka 2010) +// +#if _MSC_VER < 1600 +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_DECLTYPE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_STATIC_ASSERT +#endif // _MSC_VER < 1600 + +// C++0x features not supported by any versions +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// prefix and suffix headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "carve/external/boost/config/abi/msvc_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "carve/external/boost/config/abi/msvc_suffix.hpp" +#endif + +// TODO: +// these things are mostly bogus. 1200 means version 12.0 of the compiler. The +// artificial versions assigned to them only refer to the versions of some IDE +// these compilers have been shipped with, and even that is not all of it. Some +// were shipped with freely downloadable SDKs, others as crosscompilers in eVC. +// IOW, you can't use these 'versions' in any sensible way. Sorry. +# if defined(UNDER_CE) +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 +# define BOOST_COMPILER_VERSION evc4.0 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION evc8 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION evc9 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION evc10 +# else +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# endif +# endif +# else +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# define BOOST_COMPILER_VERSION 5.0 +# elif _MSC_VER < 1300 +# define BOOST_COMPILER_VERSION 6.0 +# elif _MSC_VER == 1300 +# define BOOST_COMPILER_VERSION 7.0 +# elif _MSC_VER == 1310 +# define BOOST_COMPILER_VERSION 7.1 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION 8.0 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION 9.0 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION 10.0 +# else +# define BOOST_COMPILER_VERSION _MSC_VER +# endif +# endif + +#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Visual C++ prior to version 6: +#if _MSC_VER < 1200 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 1600 (VC10, aka 2010): +#if (_MSC_VER > 1600) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_prefix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_prefix.hpp new file mode 100644 index 00000000..49f42494 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_prefix.hpp @@ -0,0 +1,27 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// for C++ Builder the following options effect the ABI: +// +// -b (on or off - effect emum sizes) +// -Vx (on or off - empty members) +// -Ve (on or off - empty base classes) +// -aX (alignment - 5 options). +// -pX (Calling convention - 4 options) +// -VmX (member pointer size and layout - 5 options) +// -VC (on or off, changes name mangling) +// -Vl (on or off, changes struct layout). + +// In addition the following warnings are sufficiently annoying (and +// unfixable) to have them turned off by default: +// +// 8027 - functions containing [for|while] loops are not expanded inline +// 8026 - functions taking class by value arguments are not expanded inline + +#pragma nopushoptwarn +# pragma option push -Vx -Ve -a8 -b -pc -Vmv -VC- -Vl- -w-8027 -w-8026 + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_suffix.hpp new file mode 100644 index 00000000..940535f3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/borland_suffix.hpp @@ -0,0 +1,12 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +# pragma option pop +#pragma nopushoptwarn + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_prefix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_prefix.hpp new file mode 100644 index 00000000..3d3905c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_prefix.hpp @@ -0,0 +1,8 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#pragma pack(push,8) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_suffix.hpp new file mode 100644 index 00000000..a64d783e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi/msvc_suffix.hpp @@ -0,0 +1,8 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#pragma pack(pop) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_prefix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_prefix.hpp new file mode 100644 index 00000000..9702e5cc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_prefix.hpp @@ -0,0 +1,25 @@ +// abi_prefix header -------------------------------------------------------// + +// Copyright John Maddock 2003 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). + +#ifndef BOOST_CONFIG_ABI_PREFIX_HPP +# define BOOST_CONFIG_ABI_PREFIX_HPP +#else +# error double inclusion of header boost/config/abi_prefix.hpp is an error +#endif + +#include + +// this must occur after all other includes and before any code appears: +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_suffix.hpp new file mode 100644 index 00000000..d49417a9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/abi_suffix.hpp @@ -0,0 +1,26 @@ +// abi_sufffix header -------------------------------------------------------// + +// Copyright John Maddock 2003 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). + +// This header should be #included AFTER code that was preceded by a #include +// . + +#ifndef BOOST_CONFIG_ABI_PREFIX_HPP +# error Header boost/config/abi_prefix.hpp must only be used after boost/config/abi_prefix.hpp +#else +# undef BOOST_CONFIG_ABI_PREFIX_HPP +#endif + +// the suffix header occurs after all of our code: +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/auto_link.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/auto_link.hpp new file mode 100644 index 00000000..037e33ac --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/auto_link.hpp @@ -0,0 +1,368 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE auto_link.hpp + * VERSION see + * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers. + */ + +/************************************************************************* + +USAGE: +~~~~~~ + +Before including this header you must define one or more of define the following macros: + +BOOST_LIB_NAME: Required: A string containing the basename of the library, + for example boost_regex. +BOOST_LIB_TOOLSET: Optional: the base name of the toolset. +BOOST_DYN_LINK: Optional: when set link to dll rather than static library. +BOOST_LIB_DIAGNOSTIC: Optional: when set the header will print out the name + of the library selected (useful for debugging). +BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib, + rather than a mangled-name version. + +These macros will be undef'ed at the end of the header, further this header +has no include guards - so be sure to include it only once from your library! + +Algorithm: +~~~~~~~~~~ + +Libraries for Borland and Microsoft compilers are automatically +selected here, the name of the lib is selected according to the following +formula: + +BOOST_LIB_PREFIX + + BOOST_LIB_NAME + + "_" + + BOOST_LIB_TOOLSET + + BOOST_LIB_THREAD_OPT + + BOOST_LIB_RT_OPT + "-" + + BOOST_LIB_VERSION + +These are defined as: + +BOOST_LIB_PREFIX: "lib" for static libraries otherwise "". + +BOOST_LIB_NAME: The base name of the lib ( for example boost_regex). + +BOOST_LIB_TOOLSET: The compiler toolset name (vc6, vc7, bcb5 etc). + +BOOST_LIB_THREAD_OPT: "-mt" for multithread builds, otherwise nothing. + +BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used, + contains one or more of the following letters after + a hiphen: + + s static runtime (dynamic if not present). + d debug build (release if not present). + g debug/diagnostic runtime (release if not present). + p STLPort Build. + +BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. + + +***************************************************************************/ + +#ifdef __cplusplus +# ifndef BOOST_CONFIG_HPP +# include +# endif +#elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__) +// +// C language compatability (no, honestly) +// +# define BOOST_MSVC _MSC_VER +# define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +# define BOOST_DO_STRINGIZE(X) #X +#endif +// +// Only include what follows for known and supported compilers: +// +#if defined(BOOST_MSVC) \ + || defined(__BORLANDC__) \ + || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \ + || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) + +#ifndef BOOST_VERSION_HPP +# include +#endif + +#ifndef BOOST_LIB_NAME +# error "Macro BOOST_LIB_NAME not set (internal error)" +#endif + +// +// error check: +// +#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG) +# pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors") +# pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes") +# error "Incompatible build options" +#endif +// +// select toolset if not defined already: +// +#ifndef BOOST_LIB_TOOLSET +// Note: no compilers before 1200 are supported +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + +# ifdef UNDER_CE + // vc6: +# define BOOST_LIB_TOOLSET "evc4" +# else + // vc6: +# define BOOST_LIB_TOOLSET "vc6" +# endif + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300) + + // vc7: +# define BOOST_LIB_TOOLSET "vc7" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1310) + + // vc71: +# define BOOST_LIB_TOOLSET "vc71" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1400) + + // vc80: +# define BOOST_LIB_TOOLSET "vc80" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1500) + + // vc90: +# define BOOST_LIB_TOOLSET "vc90" + +#elif defined(__BORLANDC__) + + // CBuilder 6: +# define BOOST_LIB_TOOLSET "bcb" + +#elif defined(__ICL) + + // Intel C++, no version number: +# define BOOST_LIB_TOOLSET "iw" + +#elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF ) + + // Metrowerks CodeWarrior 8.x +# define BOOST_LIB_TOOLSET "cw8" + +#elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF ) + + // Metrowerks CodeWarrior 9.x +# define BOOST_LIB_TOOLSET "cw9" + +#endif +#endif // BOOST_LIB_TOOLSET + +// +// select thread opt: +// +#if defined(_MT) || defined(__MT__) +# define BOOST_LIB_THREAD_OPT "-mt" +#else +# define BOOST_LIB_THREAD_OPT +#endif + +#if defined(_MSC_VER) || defined(__MWERKS__) + +# ifdef _DLL + +# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdp" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gdp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-p" +# endif + +# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdpn" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gdpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-pn" +# endif + +# else + +# if defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gd" +# else +# define BOOST_LIB_RT_OPT +# endif + +# endif + +# else + +# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdp" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgdp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-sp" +# endif + +# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdpn" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgdpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-spn" +# endif + +# else + +# if defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgd" +# else +# define BOOST_LIB_RT_OPT "-s" +# endif + +# endif + +# endif + +#elif defined(__BORLANDC__) + +// +// figure out whether we want the debug builds or not: +// +#if __BORLANDC__ > 0x561 +#pragma defineonoption BOOST_BORLAND_DEBUG -v +#endif +// +// sanity check: +// +#if defined(__STL_DEBUG) || defined(_STLP_DEBUG) +#error "Pre-built versions of the Boost libraries are not provided in STLPort-debug form" +#endif + +# ifdef _RTLDLL + +# ifdef BOOST_BORLAND_DEBUG +# define BOOST_LIB_RT_OPT "-d" +# else +# define BOOST_LIB_RT_OPT +# endif + +# else + +# ifdef BOOST_BORLAND_DEBUG +# define BOOST_LIB_RT_OPT "-sd" +# else +# define BOOST_LIB_RT_OPT "-s" +# endif + +# endif + +#endif + +// +// select linkage opt: +// +#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK) +# define BOOST_LIB_PREFIX +#elif defined(BOOST_DYN_LINK) +# error "Mixing a dll boost library with a static runtime is a really bad idea..." +#else +# define BOOST_LIB_PREFIX "lib" +#endif + +// +// now include the lib: +// +#if defined(BOOST_LIB_NAME) \ + && defined(BOOST_LIB_PREFIX) \ + && defined(BOOST_LIB_TOOLSET) \ + && defined(BOOST_LIB_THREAD_OPT) \ + && defined(BOOST_LIB_RT_OPT) \ + && defined(BOOST_LIB_VERSION) + +#ifndef BOOST_AUTO_LINK_NOMANGLE +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# endif +#else +# pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") +# endif +#endif + +#else +# error "some required macros where not defined (internal logic error)." +#endif + + +#endif // _MSC_VER || __BORLANDC__ + +// +// finally undef any macros we may have set: +// +#ifdef BOOST_LIB_PREFIX +# undef BOOST_LIB_PREFIX +#endif +#if defined(BOOST_LIB_NAME) +# undef BOOST_LIB_NAME +#endif +// Don't undef this one: it can be set by the user and should be the +// same for all libraries: +//#if defined(BOOST_LIB_TOOLSET) +//# undef BOOST_LIB_TOOLSET +//#endif +#if defined(BOOST_LIB_THREAD_OPT) +# undef BOOST_LIB_THREAD_OPT +#endif +#if defined(BOOST_LIB_RT_OPT) +# undef BOOST_LIB_RT_OPT +#endif +#if defined(BOOST_LIB_LINK_OPT) +# undef BOOST_LIB_LINK_OPT +#endif +#if defined(BOOST_LIB_DEBUG_OPT) +# undef BOOST_LIB_DEBUG_OPT +#endif +#if defined(BOOST_DYN_LINK) +# undef BOOST_DYN_LINK +#endif +#if defined(BOOST_AUTO_LINK_NOMANGLE) +# undef BOOST_AUTO_LINK_NOMANGLE +#endif + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/borland.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/borland.hpp new file mode 100644 index 00000000..a593db76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/borland.hpp @@ -0,0 +1,209 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Borland C++ compiler setup: + +// +// versions check: +// we don't support Borland prior to version 5.4: +#if __BORLANDC__ < 0x540 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// last known and checked version is 0x600 (Builder X preview) +// or 0x593 (CodeGear C++ Builder 2007 December 2007 update): +#if (__BORLANDC__ > 0x593) && (__BORLANDC__ != 0x600) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message( "Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + +// +// Support macros to help with standard library detection +#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL) +# define BOOST_BCB_WITH_ROGUE_WAVE +#elif __BORLANDC__ < 0x570 +# define BOOST_BCB_WITH_STLPORT +#else +# define BOOST_BCB_WITH_DINKUMWARE +#endif + +// +// Version 5.0 and below: +# if __BORLANDC__ <= 0x0550 +// Borland C++Builder 4 and 5: +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# if __BORLANDC__ == 0x0550 +// Borland C++Builder 5, command-line compiler 5.5: +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif +# endif + +// Version 5.51 and below: +#if (__BORLANDC__ <= 0x551) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_DEDUCED_TYPENAME +// workaround for missing WCHAR_MAX/WCHAR_MIN: +#include +#include +#ifndef WCHAR_MAX +# define WCHAR_MAX 0xffff +#endif +#ifndef WCHAR_MIN +# define WCHAR_MIN 0 +#endif +#endif + +// Borland C++ Builder 6 and below: +#if (__BORLANDC__ <= 0x564) +# define BOOST_NO_INTEGRAL_INT64_T + +# ifdef NDEBUG + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif + +// +// new bug in 5.61: +#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580) + // this seems to be needed by the command line compiler, but not the IDE: +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +// Borland C++ Builder 2006 Update 2 and below: +#if (__BORLANDC__ <= 0x582) +# define BOOST_NO_SFINAE +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# define BOOST_NO_TEMPLATE_TEMPLATES + +# define BOOST_NO_PRIVATE_IN_AGGREGATE + +# ifdef _WIN32 +# define BOOST_NO_SWPRINTF +# elif defined(linux) || defined(__linux__) || defined(__linux) + // we should really be able to do without this + // but the wcs* functions aren't imported into std:: +# define BOOST_NO_STDC_NAMESPACE + // _CPPUNWIND doesn't get automatically set for some reason: +# pragma defineonoption BOOST_CPPUNWIND -x +# endif +#endif + +// Borland C++ Builder 2007 December 2007 Update and below: +#if (__BORLANDC__ <= 0x593) +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS + // we shouldn't really need this - but too many things choke + // without it, this needs more investigation: +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +// Temporary workaround +#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif + +#if __BORLANDC__ >= 0x590 +# define BOOST_HAS_TR1_HASH + +# define BOOST_HAS_MACRO_USE_FACET +#endif + +// +// Post 0x561 we have long long and stdint.h: +#if __BORLANDC__ >= 0x561 +# ifndef __NO_LONG_LONG +# define BOOST_HAS_LONG_LONG +# endif + // On non-Win32 platforms let the platform config figure this out: +# ifdef _WIN32 +# define BOOST_HAS_STDINT_H +# endif +#endif + +// Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is +// defined, then we have 0x560 or greater with the Rogue Wave implementation +// which presumably has the std::DBL_MAX bug. +#if defined( BOOST_BCB_WITH_ROGUE_WAVE ) +// is partly broken, some macros define symbols that are really in +// namespace std, so you end up having to use illegal constructs like +// std::DBL_MAX, as a fix we'll just include float.h and have done with: +#include +#endif +// +// __int64: +// +#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DECLSPEC +#endif +// +// ABI fixing headers: +// +#if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp" +#endif +#endif +// +// Disable Win32 support in ANSI mode: +// +#if __BORLANDC__ < 0x600 +# pragma defineonoption BOOST_DISABLE_WIN32 -A +#elif defined(__STRICT_ANSI__) +# define BOOST_DISABLE_WIN32 +#endif +// +// MSVC compatibility mode does some nasty things: +// TODO: look up if this doesn't apply to the whole 12xx range +// +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_VOID_RETURNS +#endif + +#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/comeau.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/comeau.hpp new file mode 100644 index 00000000..278222dc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/comeau.hpp @@ -0,0 +1,59 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Douglas Gregor 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Comeau C++ compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +#if (__COMO_VERSION__ <= 4245) + +# if defined(_MSC_VER) && _MSC_VER <= 1300 +# if _MSC_VER > 100 + // only set this in non-strict mode: +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# endif +# endif + +// Void returns don't work when emulating VC 6 (Peter Dimov) +// TODO: look up if this doesn't apply to the whole 12xx range +# if defined(_MSC_VER) && (_MSC_VER < 1300) +# define BOOST_NO_VOID_RETURNS +# endif + +#endif // version 4245 + +// +// enable __int64 support in VC emulation mode +// +# if defined(_MSC_VER) && (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +# endif + +#define BOOST_COMPILER "Comeau compiler version " BOOST_STRINGIZE(__COMO_VERSION__) + +// +// versions check: +// we don't know Comeau prior to version 4245: +#if __COMO_VERSION__ < 4245 +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4245: +#if (__COMO_VERSION__ > 4245) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/common_edg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/common_edg.hpp new file mode 100644 index 00000000..0443be1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/common_edg.hpp @@ -0,0 +1,62 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright Markus Schoepflin 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// +// Options common to all edg based compilers. +// +// This is included from within the individual compiler mini-configs. + +#ifndef __EDG_VERSION__ +# error This file requires that __EDG_VERSION__ be defined. +#endif + +#if (__EDG_VERSION__ <= 238) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_SFINAE +#endif + +#if (__EDG_VERSION__ <= 240) +# define BOOST_NO_VOID_RETURNS +#endif + +#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +#endif + +#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES) +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT) +# define BOOST_NO_IS_ABSTRACT +#endif + +#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// See also kai.hpp which checks a Kai-specific symbol for EH +# if !defined(__KCC) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +# if !defined(__NO_LONG_LONG) +# define BOOST_HAS_LONG_LONG +# endif + +#ifdef c_plusplus +// EDG has "long long" in non-strict mode +// However, some libraries have insufficient "long long" support +// #define BOOST_HAS_LONG_LONG +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/compaq_cxx.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/compaq_cxx.hpp new file mode 100644 index 00000000..b44486c6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/compaq_cxx.hpp @@ -0,0 +1,19 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Tru64 C++ compiler setup (now HP): + +#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER) + +#include "boost/config/compiler/common_edg.hpp" + +// +// versions check: +// Nothing to do here? + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/digitalmars.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/digitalmars.hpp new file mode 100644 index 00000000..46848479 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/digitalmars.hpp @@ -0,0 +1,67 @@ +// Copyright (C) Christof Meerwald 2003 +// Copyright (C) Dan Watkins 2003 +// +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Digital Mars C++ compiler setup: +#define BOOST_COMPILER __DMC_VERSION_STRING__ + +#define BOOST_HAS_LONG_LONG +#define BOOST_HAS_PRAGMA_ONCE + +#if (__DMC__ <= 0x833) +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TEMPLATE_TEMPLATES +#define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING +#define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#endif +#if (__DMC__ <= 0x840) || !defined(BOOST_STRICT_CONFIG) +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#define BOOST_NO_OPERATORS_IN_NAMESPACE +#define BOOST_NO_UNREACHABLE_RETURN_DETECTION +#define BOOST_NO_SFINAE +#define BOOST_NO_USING_TEMPLATE +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// has macros: +#if (__DMC__ >= 0x840) +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_STDINT_H +#define BOOST_HAS_WINTHREADS +#endif + +#if (__DMC__ >= 0x847) +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + +// +// Is this really the best way to detect whether the std lib is in namespace std? +// +#include +#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD) +# define BOOST_NO_STDC_NAMESPACE +#endif + + +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +#if __DMC__ < 0x800 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is ...: +#if (__DMC__ > 0x848) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc.hpp new file mode 100644 index 00000000..17895dcb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc.hpp @@ -0,0 +1,149 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Jens Maurer 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Douglas Gregor 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Synge Todo 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// GNU C++ compiler setup: + +#if __GNUC__ < 3 +# if __GNUC_MINOR__ == 91 + // egcs 1.1 won't parse shared_ptr.hpp without this: +# define BOOST_NO_AUTO_PTR +# endif +# if __GNUC_MINOR__ < 95 + // + // Prior to gcc 2.95 member templates only partly + // work - define BOOST_MSVC6_MEMBER_TEMPLATES + // instead since inline member templates mostly work. + // +# define BOOST_NO_MEMBER_TEMPLATES +# if __GNUC_MINOR__ >= 9 +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif +# endif + +# if __GNUC_MINOR__ < 96 +# define BOOST_NO_SFINAE +# endif + +# if __GNUC_MINOR__ <= 97 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif + +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_IS_ABSTRACT +#elif __GNUC__ == 3 +# if defined (__PATHSCALE__) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_IS_ABSTRACT +# endif + // + // gcc-3.x problems: + // + // Bug specific to gcc 3.1 and 3.2: + // +# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2)) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# endif +# if __GNUC_MINOR__ < 4 +# define BOOST_NO_IS_ABSTRACT +# endif +#endif +#if __GNUC__ < 4 +// +// All problems to gcc-3.x and earlier here: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#ifndef __EXCEPTIONS +# define BOOST_NO_EXCEPTIONS +#endif + + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +// +// gcc implements the named return value optimization since version 3.1 +// +#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) +#define BOOST_HAS_NRVO +#endif + +// +// C++0x features +// +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2) +// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are +// passed on the command line, which in turn defines +// __GXX_EXPERIMENTAL_CXX0X__. +# if defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_HAS_STATIC_ASSERT +# define BOOST_HAS_VARIADIC_TMPL +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_DECLTYPE +# endif +#endif + +// +// Potential C++0x features +// + +// Variadic templates compiler: +// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html +#ifdef __VARIADIC_TEMPLATES +# define BOOST_HAS_VARIADIC_TMPL +#endif + +// ConceptGCC compiler: +// http://www.generic-programming.org/software/ConceptGCC/ +#ifdef __GXX_CONCEPTS__ +# define BOOST_HAS_CONCEPTS +# define BOOST_COMPILER "ConceptGCC version " __VERSION__ +#endif + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "GNU C++ version " __VERSION__ +#endif + +// +// versions check: +// we don't know gcc prior to version 2.90: +#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90) +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4.3 (Pre-release): +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 3)) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +// we don't emit warnings here anymore since there are no defect macros defined for +// gcc post 3.4, so any failures are gcc regressions... +//# warning "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc_xml.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc_xml.hpp new file mode 100644 index 00000000..5dd67c76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/gcc_xml.hpp @@ -0,0 +1,30 @@ +// (C) Copyright John Maddock 2006. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// GCC-XML C++ compiler setup: + +# if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3)) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/greenhills.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/greenhills.hpp new file mode 100644 index 00000000..038b6b2b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/greenhills.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Greenhills C++ compiler setup: + +#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs) + +#include "boost/config/compiler/common_edg.hpp" + +// +// versions check: +// we don't support Greenhills prior to version 0: +#if __ghs < 0 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0: +#if (__ghs > 0) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/hp_acc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/hp_acc.hpp new file mode 100644 index 00000000..5a766c59 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/hp_acc.hpp @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// HP aCC C++ compiler setup: + +#if defined(__EDG__) +#include "boost/config/compiler/common_edg.hpp" +#endif + +#if (__HP_aCC <= 33100) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# if !defined(_NAMESPACE_STD) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +# endif +#endif + +#if (__HP_aCC <= 33300) +// member templates are sufficiently broken that we disable them for now +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +#endif + +#if (__HP_aCC <= 38000) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if (__HP_aCC > 50000) && (__HP_aCC < 60000) +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SWPRINTF +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +// optional features rather than defects: +#if (__HP_aCC >= 33900) +# define BOOST_HAS_LONG_LONG +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 ) +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +// This macro should not be defined when compiling in strict ansi +// mode, but, currently, we don't have the ability to determine +// what standard mode we are compiling with. Some future version +// of aCC6 compiler will provide predefined macros reflecting the +// compilation options, including the standard mode. +#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98)) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#define BOOST_COMPILER "HP aCC version " BOOST_STRINGIZE(__HP_aCC) + +// +// versions check: +// we don't support HP aCC prior to version 33000: +#if __HP_aCC < 33000 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// +// Extended checks for supporting aCC on PA-RISC +#if __HP_aCC > 30000 && __HP_aCC < 50000 +# if __HP_aCC < 38000 + // versions prior to version A.03.80 not supported +# error "Compiler version not supported - version A.03.80 or higher is required" +# elif !defined(__hpxstd98) + // must compile using the option +hpxstd98 with version A.03.80 and above +# error "Compiler option '+hpxstd98' is required for proper support" +# endif //PA-RISC +#endif + +// +// last known and checked version for HP-UX/ia64 is 61300 +// last known and checked version for PA-RISC is 38000 +#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98))) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/intel.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/intel.hpp new file mode 100644 index 00000000..d639f9a5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/intel.hpp @@ -0,0 +1,162 @@ +// (C) Copyright John Maddock 2001-8. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright Guillaume Melquiond 2002 - 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Martin Wille 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Intel compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +#if defined(__INTEL_COMPILER) +# define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER +#elif defined(__ICL) +# define BOOST_INTEL_CXX_VERSION __ICL +#elif defined(__ICC) +# define BOOST_INTEL_CXX_VERSION __ICC +#elif defined(__ECC) +# define BOOST_INTEL_CXX_VERSION __ECC +#endif + +#define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) +#define BOOST_INTEL BOOST_INTEL_CXX_VERSION + +#if defined(_WIN32) || defined(_WIN64) +# define BOOST_INTEL_WIN BOOST_INTEL +#else +# define BOOST_INTEL_LINUX BOOST_INTEL +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 600) + +# if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov) + +// Boost libraries assume strong standard conformance unless otherwise +// indicated by a config macro. As configured by Intel, the EDG front-end +// requires certain compiler options be set to achieve that strong conformance. +// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt) +// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for +// details as they apply to particular versions of the compiler. When the +// compiler does not predefine a macro indicating if an option has been set, +// this config file simply assumes the option has been set. +// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if +// the compiler option is not enabled. + +# define BOOST_NO_SWPRINTF +# endif + +// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov) + +# if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +#endif + +// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864 +#if BOOST_INTEL_CXX_VERSION < 600 +# define BOOST_NO_INTRINSIC_WCHAR_T +#else +// We should test the macro _WCHAR_T_DEFINED to check if the compiler +// supports wchar_t natively. *BUT* there is a problem here: the standard +// headers define this macro if they typedef wchar_t. Anyway, we're lucky +// because they define it without a value, while Intel C++ defines it +// to 1. So we can check its value to see if the macro was defined natively +// or not. +// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T +// is used instead. +# if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0) +# define BOOST_NO_INTRINSIC_WCHAR_T +# endif +#endif + +#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +// +// Figure out when Intel is emulating this gcc bug +// (All Intel versions prior to 9.0.26, and versions +// later than that if they are set up to emulate gcc 3.2 +// or earlier): +// +# if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# endif +#endif +#if (defined(__GNUC__) && (__GNUC__ < 4)) || defined(_WIN32) +// GCC or VC emulation: +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif +// +// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T +// set correctly, if we don't do this now, we will get errors later +// in type_traits code among other things, getting this correct +// for the Intel compiler is actually remarkably fragile and tricky: +// +#if defined(BOOST_NO_INTRINSIC_WCHAR_T) +#include +template< typename T > struct assert_no_intrinsic_wchar_t; +template<> struct assert_no_intrinsic_wchar_t { typedef void type; }; +// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T +// where it is defined above: +typedef assert_no_intrinsic_wchar_t::type assert_no_intrinsic_wchar_t_; +#else +template< typename T > struct assert_intrinsic_wchar_t; +template<> struct assert_intrinsic_wchar_t {}; +// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line: +template<> struct assert_intrinsic_wchar_t {}; +#endif + +#if _MSC_VER+0 >= 1000 +# if _MSC_VER >= 1200 +# define BOOST_HAS_MS_INT64 +# endif +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#elif defined(_WIN32) +# define BOOST_DISABLE_WIN32 +#endif + +// I checked version 6.0 build 020312Z, it implements the NRVO. +// Correct this as you find out which version of the compiler +// implemented the NRVO first. (Daniel Frey) +#if (BOOST_INTEL_CXX_VERSION >= 600) +# define BOOST_HAS_NRVO +#endif + +// +// versions check: +// we don't support Intel prior to version 5.0: +#if BOOST_INTEL_CXX_VERSION < 500 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version: +#if (BOOST_INTEL_CXX_VERSION > 1010) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# elif defined(_MSC_VER) +// +// We don't emit this warning any more, since we have so few +// defect macros set anyway (just the one). +// +//# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/kai.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/kai.hpp new file mode 100644 index 00000000..de16f1a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/kai.hpp @@ -0,0 +1,35 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Kai C++ compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG) + // at least on Sun, the contents of is not in namespace std +# define BOOST_NO_STDC_NAMESPACE +# endif + +// see also common_edg.hpp which needs a special check for __KCC +# if !defined(_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +#define BOOST_COMPILER "Kai C++ version " BOOST_STRINGIZE(__KCC_VERSION) + +// +// last known and checked version is 4001: +#if (__KCC_VERSION > 4001) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/metrowerks.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/metrowerks.hpp new file mode 100644 index 00000000..2b60b56f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/metrowerks.hpp @@ -0,0 +1,111 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Stefan Slapeta 2004. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Metrowerks C++ compiler setup: + +// locale support is disabled when linking with the dynamic runtime +# ifdef _MSL_NO_LOCALE +# define BOOST_NO_STD_LOCALE +# endif + +# if __MWERKS__ <= 0x2301 // 5.3 +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_POINTER_TO_MEMBER_CONST +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# endif + +# if __MWERKS__ <= 0x2401 // 6.2 +//# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if(__MWERKS__ <= 0x2407) // 7.x +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# endif + +# if(__MWERKS__ <= 0x3003) // 8.x +# define BOOST_NO_SFINAE +# endif + +// the "|| !defined(BOOST_STRICT_CONFIG)" part should apply to the last +// tested version *only*: +# if(__MWERKS__ <= 0x3206) || !defined(BOOST_STRICT_CONFIG) // 9.5 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_IS_ABSTRACT +# endif + +#if !__option(wchar_type) +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if !__option(exceptions) +# define BOOST_NO_EXCEPTIONS +#endif + +#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh) +# if __MWERKS__ == 0x3000 +# define BOOST_COMPILER_VERSION 8.0 +# elif __MWERKS__ == 0x3001 +# define BOOST_COMPILER_VERSION 8.1 +# elif __MWERKS__ == 0x3002 +# define BOOST_COMPILER_VERSION 8.2 +# elif __MWERKS__ == 0x3003 +# define BOOST_COMPILER_VERSION 8.3 +# elif __MWERKS__ == 0x3200 +# define BOOST_COMPILER_VERSION 9.0 +# elif __MWERKS__ == 0x3201 +# define BOOST_COMPILER_VERSION 9.1 +# elif __MWERKS__ == 0x3202 +# define BOOST_COMPILER_VERSION 9.2 +# elif __MWERKS__ == 0x3204 +# define BOOST_COMPILER_VERSION 9.3 +# elif __MWERKS__ == 0x3205 +# define BOOST_COMPILER_VERSION 9.4 +# elif __MWERKS__ == 0x3206 +# define BOOST_COMPILER_VERSION 9.5 +# else +# define BOOST_COMPILER_VERSION __MWERKS__ +# endif +#else +# define BOOST_COMPILER_VERSION __MWERKS__ +#endif + +// +// C++0x features +// +#if __MWERKS__ > 0x3206 && __option(rvalue_refs) +# define BOOST_HAS_RVALUE_REFS +#endif + +#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Metrowerks prior to version 5.3: +#if __MWERKS__ < 0x2301 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version: +#if (__MWERKS__ > 0x3205) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/mpw.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/mpw.hpp new file mode 100644 index 00000000..8ab2aacb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/mpw.hpp @@ -0,0 +1,51 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// MPW C++ compilers setup: + +# if defined(__SC__) +# define BOOST_COMPILER "MPW SCpp version " BOOST_STRINGIZE(__SC__) +# elif defined(__MRC__) +# define BOOST_COMPILER "MPW MrCpp version " BOOST_STRINGIZE(__MRC__) +# else +# error "Using MPW compiler configuration by mistake. Please update." +# endif + +// +// MPW 8.90: +// +#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_USING_TEMPLATE + +# define BOOST_NO_CWCHAR +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + +# define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */ +#endif + +// +// versions check: +// we don't support MPW prior to version 8.9: +#if MPW_CPLUS < 0x890 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x890: +#if (MPW_CPLUS > 0x890) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/pgi.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/pgi.hpp new file mode 100644 index 00000000..491497d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/pgi.hpp @@ -0,0 +1,25 @@ +// (C) Copyright Noel Belcourt 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// PGI C++ compiler setup: + +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_SWPRINTF + +// +// version check: +// probably nothing to do here? + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sgi_mipspro.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sgi_mipspro.hpp new file mode 100644 index 00000000..33e97e9a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sgi_mipspro.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// SGI C++ compiler setup: + +#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +#include "boost/config/compiler/common_edg.hpp" + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// +#define BOOST_HAS_THREADS +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +#undef BOOST_NO_SWPRINTF +#undef BOOST_DEDUCED_TYPENAME +// +// version check: +// probably nothing to do here? + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sunpro_cc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sunpro_cc.hpp new file mode 100644 index 00000000..815b56db --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/sunpro_cc.hpp @@ -0,0 +1,98 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Peter Dimov 2002. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright David Abrahams 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Sun C++ compiler setup: + +# if __SUNPRO_CC <= 0x500 +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if (__SUNPRO_CC <= 0x520) + // + // Sunpro 5.2 and earler: + // + // although sunpro 5.2 supports the syntax for + // inline initialization it often gets the value + // wrong, especially where the value is computed + // from other constants (J Maddock 6th May 2001) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // Although sunpro 5.2 supports the syntax for + // partial specialization, it often seems to + // bind to the wrong specialization. Better + // to disable it until suppport becomes more stable + // (J Maddock 6th May 2001). +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# endif + +# if (__SUNPRO_CC <= 0x530) + // Requesting debug info (-g) with Boost.Python results + // in an internal compiler error for "static const" + // initialized in-class. + // >> Assertion: (../links/dbg_cstabs.cc, line 611) + // while processing ../test.cpp at line 0. + // (Jens Maurer according to Gottfried Ganauge 04 Mar 2002) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // SunPro 5.3 has better support for partial specialization, + // but breaks when compiling std::less > + // (Jens Maurer 4 Nov 2001). + + // std::less specialization fixed as reported by George + // Heintzelman; partial specialization re-enabled + // (Peter Dimov 17 Jan 2002) + +//# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + // integral constant expressions with 64 bit numbers fail +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +# if (__SUNPRO_CC < 0x570) +# define BOOST_NO_TEMPLATE_TEMPLATES + // see http://lists.boost.org/MailArchives/boost/msg47184.php + // and http://lists.boost.org/MailArchives/boost/msg47220.php +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_SFINAE +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif +# if (__SUNPRO_CC <= 0x580) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Issues that effect all known versions: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP + + +#define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC) + +// +// versions check: +// we don't support sunpro prior to version 4: +#if __SUNPRO_CC < 0x400 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x590: +#if (__SUNPRO_CC > 0x590) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/vacpp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/vacpp.hpp new file mode 100644 index 00000000..b930dafd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/vacpp.hpp @@ -0,0 +1,60 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Toon Knapen 2001 - 2003. +// (C) Copyright Lie-Quan Lee 2001. +// (C) Copyright Markus Schpflin 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Visual Age (IBM) C++ compiler setup: + +#if __IBMCPP__ <= 501 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +#if (__IBMCPP__ <= 502) +// Actually the compiler supports inclass member initialization but it +// requires a definition for the class member and it doesn't recognize +// it as an integral constant expression when used as a template argument. +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +#endif + +// +// On AIX thread support seems to be indicated by _THREAD_SAFE: +// +#ifdef _THREAD_SAFE +# define BOOST_HAS_THREADS +#endif + +#define BOOST_COMPILER "IBM Visual Age version " BOOST_STRINGIZE(__IBMCPP__) + +// +// versions check: +// we don't support Visual age prior to version 5: +#if __IBMCPP__ < 500 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 600: +#if (__IBMCPP__ > 600) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + +// Some versions of the compiler have issues with default arguments on partial specializations +#define BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/visualc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/visualc.hpp new file mode 100644 index 00000000..198a7334 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/compiler/visualc.hpp @@ -0,0 +1,191 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Microsoft Visual C++ compiler setup: + +#define BOOST_MSVC _MSC_VER + +// turn off the warnings before we #include anything +#pragma warning( disable : 4503 ) // warning: decorated name length exceeded + +#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 +# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_EXCEPTION_STD_NAMESPACE + // disable min/max macro defines on vc6: + // +#endif + +#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0 + +# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# endif + +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_DEDUCED_TYPENAME +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE + +// VC++ 6/7 has member templates but they have numerous problems including +// cases of silent failure, so for safety we define: +# define BOOST_NO_MEMBER_TEMPLATES +// For VC++ experts wishing to attempt workarounds, we define: +# define BOOST_MSVC6_MEMBER_TEMPLATES + +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SFINAE +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? +# if (_MSC_VER > 1200) +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# endif + +#endif + +#if _MSC_VER < 1400 +// although a conforming signature for swprint exists in VC7.1 +// it appears not to actually work: +# define BOOST_NO_SWPRINTF +#endif + +#if defined(UNDER_CE) +// Windows CE does not have a conforming signature for swprintf +# define BOOST_NO_SWPRINTF +#endif + +#if _MSC_VER <= 1400 // 1400 == VC++ 8.0 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +#if _MSC_VER <= 1500 // 1500 == VC++ 9.0 +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#ifndef _NATIVE_WCHAR_T_DEFINED +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if defined(_WIN32_WCE) || defined(UNDER_CE) +# define BOOST_NO_THREADEX +# define BOOST_NO_GETSYSTEMTIMEASFILETIME +# define BOOST_NO_SWPRINTF +#endif + +// +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +// +// __int64 support: +// +#if (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +#endif +#if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS) +# define BOOST_HAS_LONG_LONG +#endif +#if (_MSC_VER >= 1400) && !defined(_DEBUG) +# define BOOST_HAS_NRVO +#endif +// +// disable Win32 API's if compiler extentions are +// turned off: +// +#ifndef _MSC_EXTENSIONS +# define BOOST_DISABLE_WIN32 +#endif + +// +// all versions support __declspec: +// +#define BOOST_HAS_DECLSPEC +// +// prefix and suffix headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" +#endif + +// TODO: +// these things are mostly bogus. 1200 means version 12.0 of the compiler. The +// artificial versions assigned to them only refer to the versions of some IDE +// these compilers have been shipped with, and even that is not all of it. Some +// were shipped with freely downloadable SDKs, others as crosscompilers in eVC. +// IOW, you can't use these 'versions' in any sensible way. Sorry. +# if defined(UNDER_CE) +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 +# define BOOST_COMPILER_VERSION evc4.0 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION evc8 +# else +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# endif +# endif +# else +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# define BOOST_COMPILER_VERSION 5.0 +# elif _MSC_VER < 1300 +# define BOOST_COMPILER_VERSION 6.0 +# elif _MSC_VER == 1300 +# define BOOST_COMPILER_VERSION 7.0 +# elif _MSC_VER == 1310 +# define BOOST_COMPILER_VERSION 7.1 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION 8.0 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION 9.0 +# else +# define BOOST_COMPILER_VERSION _MSC_VER +# endif +# endif + +#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Visual C++ prior to version 6: +#if _MSC_VER < 1200 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 1400 (VC8): +#if (_MSC_VER > 1500) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/complex.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/complex.hpp new file mode 100644 index 00000000..ca200922 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/complex.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/complex is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_COMPLEX +# define BOOST_CONFIG_COMPLEX + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_COMPLEX_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_COMPLEX_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/functional.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/functional.hpp new file mode 100644 index 00000000..e395efc1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/functional.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/functional is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_FUNCTIONAL +# define BOOST_CONFIG_FUNCTIONAL + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/memory.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/memory.hpp new file mode 100644 index 00000000..2b5d2080 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/memory.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/memory is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_MEMORY +# define BOOST_CONFIG_MEMORY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_MEMORY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_MEMORY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_MEMORY_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/utility.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/utility.hpp new file mode 100644 index 00000000..dea8f115 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/no_tr1/utility.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/utility is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_UTILITY +# define BOOST_CONFIG_UTILITY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/aix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/aix.hpp new file mode 100644 index 00000000..95acc36e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/aix.hpp @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// IBM/Aix specific config options: + +#define BOOST_PLATFORM "IBM Aix" + +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_CLOCK_GETTIME + +// This needs support in "boost/cstdint.hpp" exactly like FreeBSD. +// This platform has header named which includes all +// the things needed. +#define BOOST_HAS_STDINT_H + +// Threading API's: +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_DELAY_NP +#define BOOST_HAS_SCHED_YIELD +//#define BOOST_HAS_PTHREAD_YIELD + +// boilerplate code: +#include + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/amigaos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/amigaos.hpp new file mode 100644 index 00000000..34bcf412 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/amigaos.hpp @@ -0,0 +1,15 @@ +// (C) Copyright John Maddock 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +#define BOOST_PLATFORM "AmigaOS" + +#define BOOST_DISABLE_THREADS +#define BOOST_NO_CWCHAR +#define BOOST_NO_STD_WSTRING +#define BOOST_NO_INTRINSIC_WCHAR_T + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/beos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/beos.hpp new file mode 100644 index 00000000..8ca41703 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/beos.hpp @@ -0,0 +1,26 @@ +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// BeOS specific config options: + +#define BOOST_PLATFORM "BeOS" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_CWCTYPE +#define BOOST_HAS_UNISTD_H + +#define BOOST_HAS_BETHREADS + +#ifndef BOOST_DISABLE_THREADS +# define BOOST_HAS_THREADS +#endif + +// boilerplate code: +#include + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/bsd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/bsd.hpp new file mode 100644 index 00000000..85d7d77e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/bsd.hpp @@ -0,0 +1,73 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Douglas Gregor 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// generic BSD config options: + +#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) +#error "This platform is not BSD" +#endif + +#ifdef __FreeBSD__ +#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__) +#elif defined(__NetBSD__) +#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__) +#elif defined(__OpenBSD__) +#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__) +#elif defined(__DragonFly__) +#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__) +#endif + +// +// is this the correct version check? +// FreeBSD has but does not +// advertise the fact in : +// +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) +# define BOOST_HAS_NL_TYPES_H +#endif + +// +// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in +// and not in +// +#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3)) || defined(__OpenBSD__) +# define BOOST_HAS_PTHREADS +#endif + +// +// No wide character support in the BSD header files: +// +#if !(defined(__FreeBSD__) && (__FreeBSD__ >= 5)) +# define BOOST_NO_CWCHAR +#endif +// +// The BSD has macros only, no functions: +// +#if !defined(__OpenBSD__) +# define BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// thread API's not auto detected: +// +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_SIGACTION + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/cygwin.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/cygwin.hpp new file mode 100644 index 00000000..811a3787 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/cygwin.hpp @@ -0,0 +1,51 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// cygwin specific config options: + +#define BOOST_PLATFORM "Cygwin" +#define BOOST_NO_CWCTYPE +#define BOOST_NO_CWCHAR +#define BOOST_NO_SWPRINTF +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 + +// +// Threading API: +// See if we have POSIX threads, if we do use them, otherwise +// revert to native Win threads. +#define BOOST_HAS_UNISTD_H +#include +#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_PTHREADS +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_SIGACTION +#else +# if !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_WINTHREADS +# endif +# define BOOST_HAS_FTIME +#endif + +// +// find out if we have a stdint.h, there should be a better way to do this: +// +#include +#ifdef _STDINT_H +#define BOOST_HAS_STDINT_H +#endif + +// boilerplate code: +#include + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/hpux.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/hpux.hpp new file mode 100644 index 00000000..3fe608dd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/hpux.hpp @@ -0,0 +1,84 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// hpux specific config options: + +#define BOOST_PLATFORM "HP-UX" + +// In principle, HP-UX has a nice under the name +// However, it has the following problem: +// Use of UINT32_C(0) results in "0u l" for the preprocessed source +// (verifyable with gcc 2.95.3) +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC) +# define BOOST_HAS_STDINT_H +#endif + +#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE)) +# define BOOST_NO_SWPRINTF +# define BOOST_NO_CWCTYPE +#endif + +#if defined(__GNUC__) +# if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3)) + // GNU C on HP-UX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +# elif !defined(BOOST_DISABLE_THREADS) + // threads supported from gcc-3.3 onwards: +# define BOOST_HAS_THREADS +# define BOOST_HAS_PTHREADS +# endif +#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS) +# define BOOST_HAS_PTHREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// the following are always available: +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_SCHED_YIELD +#endif +#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#endif +#ifndef BOOST_HAS_NL_TYPES_H +# define BOOST_HAS_NL_TYPES_H +#endif +#ifndef BOOST_HAS_NANOSLEEP +# define BOOST_HAS_NANOSLEEP +#endif +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_DIRENT_H +# define BOOST_HAS_DIRENT_H +#endif +#ifndef BOOST_HAS_CLOCK_GETTIME +# define BOOST_HAS_CLOCK_GETTIME +#endif +#ifndef BOOST_HAS_SIGACTION +# define BOOST_HAS_SIGACTION +#endif +#ifndef BOOST_HAS_NRVO +# ifndef __parisc +# define BOOST_HAS_NRVO +# endif +#endif +#ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +#endif +#ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/irix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/irix.hpp new file mode 100644 index 00000000..8b11e4f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/irix.hpp @@ -0,0 +1,31 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// SGI Irix specific config options: + +#define BOOST_PLATFORM "SGI Irix" + +#define BOOST_NO_SWPRINTF +// +// these are not auto detected by POSIX feature tests: +// +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#ifdef __GNUC__ + // GNU C on IRIX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/linux.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/linux.hpp new file mode 100644 index 00000000..7206f5f2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/linux.hpp @@ -0,0 +1,98 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// linux specific config options: + +#define BOOST_PLATFORM "linux" + +// make sure we have __GLIBC_PREREQ if available at all +#include + +// +// added to glibc 2.1.1 +// We can only test for 2.1 though: +// +#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) + // defines int64_t unconditionally, but defines + // int64_t only if __GNUC__. Thus, assume a fully usable + // only when using GCC. +# if defined __GNUC__ +# define BOOST_HAS_STDINT_H +# endif +#endif + +#if defined(__LIBCOMO__) + // + // como on linux doesn't have std:: c functions: + // NOTE: versions of libcomo prior to beta28 have octal version numbering, + // e.g. version 25 is 21 (dec) + // +# if __LIBCOMO_VERSION__ <= 20 +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if __LIBCOMO_VERSION__ <= 21 +# define BOOST_NO_SWPRINTF +# endif + +#endif + +// +// If glibc is past version 2 then we definitely have +// gettimeofday, earlier versions may or may not have it: +// +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +# define BOOST_HAS_GETTIMEOFDAY +#endif + +#ifdef __USE_POSIX199309 +# define BOOST_HAS_NANOSLEEP +#endif + +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +// __GLIBC_PREREQ is available since 2.1.2 + + // swprintf is available since glibc 2.2.0 +# if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98)) +# define BOOST_NO_SWPRINTF +# endif +#else +# define BOOST_NO_SWPRINTF +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +#ifndef __GNUC__ +// +// if the compiler is not gcc we still need to be able to parse +// the GNU system headers, some of which (mainly ) +// use GNU specific extensions: +// +# ifndef __extension__ +# define __extension__ +# endif +# ifndef __const__ +# define __const__ const +# endif +# ifndef __volatile__ +# define __volatile__ volatile +# endif +# ifndef __signed__ +# define __signed__ signed +# endif +# ifndef __typeof__ +# define __typeof__ typeof +# endif +# ifndef __inline__ +# define __inline__ inline +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/macos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/macos.hpp new file mode 100644 index 00000000..8075de33 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/macos.hpp @@ -0,0 +1,78 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Bill Kempf 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Mac OS specific config options: + +#define BOOST_PLATFORM "Mac OS" + +#if __MACH__ && !defined(_MSL_USING_MSL_C) + +// Using the Mac OS X system BSD-style C library. + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif +// +// Begin by including our boilerplate code for POSIX +// feature detection, this is safe even when using +// the MSL as Metrowerks supply their own +// to replace the platform-native BSD one. G++ users +// should also always be able to do this on MaxOS X. +// +# include +# ifndef BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H +# endif + +// +// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday, +// of these only pthreads are advertised in , so set the +// other options explicitly: +// +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_SIGACTION + +# if (__GNUC__ < 3) && !defined( __APPLE_CC__) + +// GCC strange "ignore std" mode works better if you pretend everything +// is in the std namespace, for the most part. + +# define BOOST_NO_STDC_NAMESPACE +# endif + +#else + +// Using the MSL C library. + +// We will eventually support threads in non-Carbon builds, but we do +// not support this yet. +# if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON ) + +# if !defined(BOOST_HAS_PTHREADS) +# define BOOST_HAS_MPTASKS +# elif ( __dest_os == __mac_os_x ) +// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the +// gettimeofday and no posix. +# define BOOST_HAS_GETTIMEOFDAY +# endif + +// The MP task implementation of Boost Threads aims to replace MP-unsafe +// parts of the MSL, so we turn on threads unconditionally. +# define BOOST_HAS_THREADS + +// The remote call manager depends on this. +# define BOOST_BIND_ENABLE_PASCAL + +# endif + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/qnxnto.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/qnxnto.hpp new file mode 100644 index 00000000..7aaf439e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/qnxnto.hpp @@ -0,0 +1,31 @@ +// (C) Copyright Jim Douglas 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// QNX specific config options: + +#define BOOST_PLATFORM "QNX" + +#define BOOST_HAS_UNISTD_H +#include + +// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h +// or log1p and expm1: +#undef BOOST_HAS_NL_TYPES_H +#undef BOOST_HAS_LOG1P +#undef BOOST_HAS_EXPM1 + +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_CLOCK_GETTIME +#define BOOST_HAS_NANOSLEEP + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/solaris.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/solaris.hpp new file mode 100644 index 00000000..d42be1f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/solaris.hpp @@ -0,0 +1,21 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// sun specific config options: + +#define BOOST_PLATFORM "Sun Solaris" + +#define BOOST_HAS_GETTIMEOFDAY + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/win32.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/win32.hpp new file mode 100644 index 00000000..9344818f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/platform/win32.hpp @@ -0,0 +1,58 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Bill Kempf 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Rene Rivera 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Win32 specific config options: + +#define BOOST_PLATFORM "Win32" + +// Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION. +#if defined(__MINGW32__) +# include <_mingw.h> +#endif + +#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +#endif + +#if !defined(__GNUC__) && !defined(BOOST_HAS_DECLSPEC) +# define BOOST_HAS_DECLSPEC +#endif + +#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0))) +# define BOOST_HAS_STDINT_H +# define __STDC_LIMIT_MACROS +# define BOOST_HAS_DIRENT_H +# define BOOST_HAS_UNISTD_H +#endif + +// +// Win32 will normally be using native Win32 threads, +// but there is a pthread library avaliable as an option, +// we used to disable this when BOOST_DISABLE_WIN32 was +// defined but no longer - this should allow some +// files to be compiled in strict mode - while maintaining +// a consistent setting of BOOST_HAS_THREADS across +// all translation units (needed for shared_ptr etc). +// + +#ifdef _WIN32_WCE +# define BOOST_NO_ANSI_APIS +#endif + +#ifndef BOOST_HAS_PTHREADS +# define BOOST_HAS_WINTHREADS +#endif + +#ifndef BOOST_DISABLE_WIN32 +// WEK: Added +#define BOOST_HAS_FTIME +#define BOOST_WINDOWS 1 + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/posix_features.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/posix_features.hpp new file mode 100644 index 00000000..d1295479 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/posix_features.hpp @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// All POSIX feature tests go in this file, +// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well +// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's +// may be present but none-functional unless _POSIX_C_SOURCE and +// _XOPEN_SOURCE have been defined to the right value (it's up +// to the user to do this *before* including any header, although +// in most cases the compiler will do this for you). + +# if defined(BOOST_HAS_UNISTD_H) +# include + + // XOpen has , but is this the correct version check? +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3) +# define BOOST_HAS_NL_TYPES_H +# endif + + // POSIX version 6 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) +# define BOOST_HAS_STDINT_H +# endif + + // POSIX version 2 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) +# define BOOST_HAS_DIRENT_H +# endif + + // POSIX version 3 requires to have sigaction: +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L) +# define BOOST_HAS_SIGACTION +# endif + // POSIX defines _POSIX_THREADS > 0 for pthread support, + // however some platforms define _POSIX_THREADS without + // a value, hence the (_POSIX_THREADS+0 >= 0) check. + // Strictly speaking this may catch platforms with a + // non-functioning stub , but such occurrences should + // occur very rarely if at all. +# if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS) +# define BOOST_HAS_PTHREADS +# endif + + // BOOST_HAS_NANOSLEEP: + // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME: +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_NANOSLEEP +# endif + + // BOOST_HAS_CLOCK_GETTIME: + // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME + // but at least one platform - linux - defines that flag without + // defining clock_gettime): +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) +# define BOOST_HAS_CLOCK_GETTIME +# endif + + // BOOST_HAS_SCHED_YIELD: + // This is predicated on _POSIX_PRIORITY_SCHEDULING or + // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME. +# if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\ + || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_SCHED_YIELD +# endif + + // BOOST_HAS_GETTIMEOFDAY: + // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE: + // These are predicated on _XOPEN_VERSION, and appears to be first released + // in issue 4, version 2 (_XOPEN_VERSION > 500). + // Likewise for the functions log1p and expm1. +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500) +# define BOOST_HAS_GETTIMEOFDAY +# if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500) +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# endif +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +# endif + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/requires_threads.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/requires_threads.hpp new file mode 100644 index 00000000..4ac912f1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/requires_threads.hpp @@ -0,0 +1,92 @@ +// (C) Copyright John Maddock 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_CONFIG_REQUIRES_THREADS_HPP +#define BOOST_CONFIG_REQUIRES_THREADS_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_DISABLE_THREADS) + +// +// special case to handle versions of gcc which don't currently support threads: +// +#if defined(__GNUC__) && ((__GNUC__ < 3) || (__GNUC_MINOR__ <= 3) || !defined(BOOST_STRICT_CONFIG)) +// +// this is checked up to gcc 3.3: +// +#if defined(__sgi) || defined(__hpux) +# error "Multi-threaded programs are not supported by gcc on HPUX or Irix (last checked with gcc 3.3)" +#endif + +#endif + +# error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS" + +#elif !defined(BOOST_HAS_THREADS) + +# if defined __COMO__ +// Comeau C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_MT (Windows) or -D_REENTRANT (Unix)" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +#ifdef _WIN32 +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd" +#else +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -openmp" +#endif + +# elif defined __GNUC__ +// GNU C++: +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" + +#elif defined __sgi +// SGI MIPSpro C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_SGI_MP_SOURCE" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread" + +#elif defined __BORLANDC__ +// Borland +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -tWM" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either -runtime sm, -runtime smd, -runtime dm, or -runtime dmd" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt" + +#elif defined __HP_aCC +// HP aCC +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# error "Compiler threading support is not turned on. Please compile the code with the xlC_r compiler" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd" + +#else + +# error "Compiler threading support is not turned on. Please consult your compiler's documentation for the appropriate options to use" + +#endif // compilers + +#endif // BOOST_HAS_THREADS + +#endif // BOOST_CONFIG_REQUIRES_THREADS_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_compiler_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_compiler_config.hpp new file mode 100644 index 00000000..e3d3b4a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_compiler_config.hpp @@ -0,0 +1,115 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Martin Wille 2003. +// (C) Copyright Guillaume Melquiond 2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for most recent version. + + +// one identification macro for each of the +// compilers we support: + +# define BOOST_CXX_GCCXML 0 +# define BOOST_CXX_COMO 0 +# define BOOST_CXX_DMC 0 +# define BOOST_CXX_INTEL 0 +# define BOOST_CXX_GNUC 0 +# define BOOST_CXX_KCC 0 +# define BOOST_CXX_SGI 0 +# define BOOST_CXX_TRU64 0 +# define BOOST_CXX_GHS 0 +# define BOOST_CXX_BORLAND 0 +# define BOOST_CXX_CW 0 +# define BOOST_CXX_SUNPRO 0 +# define BOOST_CXX_HPACC 0 +# define BOOST_CXX_MPW 0 +# define BOOST_CXX_IBMCPP 0 +# define BOOST_CXX_MSVC 0 +# define BOOST_CXX_PGI 0 + + +// locate which compiler we are using and define +// BOOST_COMPILER_CONFIG as needed: + +#if defined(__GCCXML__) +// GCC-XML emulates other compilers, it has to appear first here! +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/gcc_xml.hpp" + +#elif defined __COMO__ +// Comeau C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/comeau.hpp" + +#elif defined __DMC__ +// Digital Mars C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/digitalmars.hpp" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/intel.hpp" + +# elif defined __GNUC__ +// GNU C++: +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/gcc.hpp" + +#elif defined __KCC +// Kai C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/kai.hpp" + +#elif defined __sgi +// SGI MIPSpro C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/sgi_mipspro.hpp" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/compaq_cxx.hpp" + +#elif defined __ghs +// Greenhills C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/greenhills.hpp" + +#elif defined __BORLANDC__ +// Borland +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/borland.hpp" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/metrowerks.hpp" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/sunpro_cc.hpp" + +#elif defined __HP_aCC +// HP aCC +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/hp_acc.hpp" + +#elif defined(__MRC__) || defined(__SC__) +// MPW MrCpp or SCpp +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/mpw.hpp" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/vacpp.hpp" + +#elif defined(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/pgi.hpp" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/visualc.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the compiler: +# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)" + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_platform_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_platform_config.hpp new file mode 100644 index 00000000..3532995d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_platform_config.hpp @@ -0,0 +1,90 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed. +// Note that we define the headers to include using "header_name" not +// in order to prevent macro expansion within the header +// name (for example "linux" is a macro on linux systems). + +#if defined(linux) || defined(__linux) || defined(__linux__) +// linux: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp" + +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +// BSD: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/bsd.hpp" + +#elif defined(sun) || defined(__sun) +// solaris: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/solaris.hpp" + +#elif defined(__sgi) +// SGI Irix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/irix.hpp" + +#elif defined(__hpux) +// hp unix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/hpux.hpp" + +#elif defined(__CYGWIN__) +// cygwin is not win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/cygwin.hpp" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +// win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp" + +#elif defined(__BEOS__) +// BeOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp" + +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +// MacOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp" + +#elif defined(__IBMCPP__) || defined(_AIX) +// IBM +# define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp" + +#elif defined(__amigaos__) +// AmigaOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/amigaos.hpp" + +#elif defined(__QNXNTO__) +// QNX: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/qnxnto.hpp" + +#else + +# if defined(unix) \ + || defined(__unix) \ + || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) + + // generic unix platform: + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif + +# include + +# endif + +# if defined (BOOST_ASSERT_CONFIG) + // this must come last - generate an error if we don't + // recognise the platform: +# error "Unknown platform - please configure and report the results to boost.org" +# endif + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_stdlib_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_stdlib_config.hpp new file mode 100644 index 00000000..ec7fc194 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/select_stdlib_config.hpp @@ -0,0 +1,68 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed: + +// we need to include a std lib header here in order to detect which +// library is in use, use as it's about the smallest +// of the std lib headers - do not rely on this header being included - +// users can short-circuit this header if they know whose std lib +// they are using. + +#include + +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +// STLPort library; this _must_ come first, otherwise since +// STLport typically sits on top of some other library, we +// can end up detecting that first rather than STLport: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/stlport.hpp" + +#elif defined(__LIBCOMO__) +// Comeau STL: +#define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcomo.hpp" + +#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) +// Rogue Wave library: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/roguewave.hpp" + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +// GNU libstdc++ 3 +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/libstdcpp3.hpp" + +#elif defined(__STL_CONFIG_H) +// generic SGI STL +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/sgi.hpp" + +#elif defined(__MSL_CPP__) +// MSL standard lib: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp" + +#elif defined(__IBMCPP__) +// take the default VACPP std lib +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp" + +#elif defined(MSIPL_COMPILE_H) +// Modena C++ standard library +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp" + +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +// Dinkumware Library (this has to appear after any possible replacement libraries): +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the library: +# error "Unknown standard library - please configure and report the results to boost.org" + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/dinkumware.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/dinkumware.hpp new file mode 100644 index 00000000..2479dca3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/dinkumware.hpp @@ -0,0 +1,106 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Guillaume Melquiond 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Dinkumware standard library config: + +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#include +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#error This is not the Dinkumware lib! +#endif +#endif + + +#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306) + // full dinkumware 3.06 and above + // fully conforming provided the compiler supports it: +# if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700)) // can be defined in yvals.h +# define BOOST_NO_STDC_NAMESPACE +# endif +# if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC) +# define BOOST_NO_STD_ALLOCATOR +# endif +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +# if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + // if this lib version is set up for vc6 then there is no std::use_facet: +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET + // C lib functions aren't in namespace std either: +# define BOOST_NO_STDC_NAMESPACE + // and nor is +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +// There's no numeric_limits support unless _LONGLONG is defined: +# if !defined(_LONGLONG) && (_CPPLIB_VER <= 310) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +// 3.06 appears to have (non-sgi versions of) & , +// and no at all +#else +# define BOOST_MSVC_STD_ITERATOR 1 +# define BOOST_NO_STD_ITERATOR +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_STD_USE_FACET +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +# define BOOST_HAS_MACRO_USE_FACET +# ifndef _CPPLIB_VER + // Updated Dinkum library defines this, and provides + // its own min and max definitions. +# define BOOST_NO_STD_MIN_MAX +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +#endif + +// +// std extension namespace is stdext for vc7.1 and later, +// the same applies to other compilers that sit on top +// of vc7.1 (Intel and Comeau): +// +#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__) +# define BOOST_STD_EXTENSION_NAMESPACE stdext +#endif + + +#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306) + // if we're using a dinkum lib that's + // been configured for VC6/7 then there is + // no iterator traits (true even for icl) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310) +// Intel C++ chokes over any non-trivial use of +// this may be an overly restrictive define, but regex fails without it: +# define BOOST_NO_STD_LOCALE +#endif + +#ifdef _CPPLIB_VER +# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER +#else +# define BOOST_DINKUMWARE_STDLIB 1 +#endif + +#ifdef _CPPLIB_VER +# define BOOST_STDLIB "Dinkumware standard library version " BOOST_STRINGIZE(_CPPLIB_VER) +#else +# define BOOST_STDLIB "Dinkumware standard library version 1.x" +#endif + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libcomo.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libcomo.hpp new file mode 100644 index 00000000..57951ed8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libcomo.hpp @@ -0,0 +1,46 @@ +// (C) Copyright John Maddock 2002 - 2003. +// (C) Copyright Jens Maurer 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Comeau STL: + +#if !defined(__LIBCOMO__) +# include +# if !defined(__LIBCOMO__) +# error "This is not the Comeau STL!" +# endif +#endif + +// +// std::streambuf is non-standard +// NOTE: versions of libcomo prior to beta28 have octal version numbering, +// e.g. version 25 is 21 (dec) +#if __LIBCOMO_VERSION__ <= 22 +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32) +#define BOOST_NO_SWPRINTF +#endif + +#if __LIBCOMO_VERSION__ >= 31 +# define BOOST_HAS_HASH +# define BOOST_HAS_SLIST +#endif + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +#define BOOST_STDLIB "Comeau standard library " BOOST_STRINGIZE(__LIBCOMO_VERSION__) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libstdcpp3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libstdcpp3.hpp new file mode 100644 index 00000000..7bbe604f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/libstdcpp3.hpp @@ -0,0 +1,73 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// config for libstdc++ v3 +// not much to go in here: + +#ifdef __GLIBCXX__ +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__) +#else +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__) +#endif + +#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +# define BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if defined(__osf__) && !defined(_REENTRANT) \ + && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) ) +// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header +// file is included, therefore for consistency we define it here as well. +# define _REENTRANT +#endif + +#ifdef __GLIBCXX__ // gcc 3.4 and greater: +# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ + || defined(_GLIBCXX__PTHREADS) + // + // If the std lib has thread support turned on, then turn it on in Boost + // as well. We do this because some gcc-3.4 std lib headers define _REENTANT + // while others do not... + // +# define BOOST_HAS_THREADS +# else +# define BOOST_DISABLE_THREADS +# endif +#elif defined(__GLIBCPP__) \ + && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \ + && !defined(_GLIBCPP__PTHREADS) + // disable thread support if the std lib was built single threaded: +# define BOOST_DISABLE_THREADS +#endif + +#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT) +// linux on arm apparently doesn't define _REENTRANT +// so just turn on threading support whenever the std lib is thread safe: +# define BOOST_HAS_THREADS +#endif + + +#if !defined(_GLIBCPP_USE_LONG_LONG) \ + && !defined(_GLIBCXX_USE_LONG_LONG)\ + && defined(BOOST_HAS_LONG_LONG) +// May have been set by compiler/*.hpp, but "long long" without library +// support is useless. +# undef BOOST_HAS_LONG_LONG +#endif + +#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0 +# define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx +# define BOOST_HAS_SLIST +# define BOOST_HAS_HASH +# define BOOST_SLIST_HEADER +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/modena.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/modena.hpp new file mode 100644 index 00000000..8d95442d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/modena.hpp @@ -0,0 +1,30 @@ +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Modena C++ standard library (comes with KAI C++) + +#if !defined(MSIPL_COMPILE_H) +# include +# if !defined(__MSIPL_COMPILE_H) +# error "This is not the Modena C++ library!" +# endif +#endif + +#ifndef MSIPL_NL_TYPES +#define BOOST_NO_STD_MESSAGES +#endif + +#ifndef MSIPL_WCHART +#define BOOST_NO_STD_WSTRING +#endif + +#define BOOST_STDLIB "Modena C++ standard library" + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/msl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/msl.hpp new file mode 100644 index 00000000..e247aeb5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/msl.hpp @@ -0,0 +1,59 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Metrowerks standard library: + +#ifndef __MSL_CPP__ +# include +# ifndef __MSL_CPP__ +# error This is not the MSL standard library! +# endif +#endif + +#if __MSL_CPP__ >= 0x6000 // Pro 6 +# define BOOST_HAS_HASH +# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks +#endif +#define BOOST_HAS_SLIST + +#if __MSL_CPP__ < 0x6209 +# define BOOST_NO_STD_MESSAGES +#endif + +// check C lib version for +#include + +#if defined(__MSL__) && (__MSL__ >= 0x5000) +# define BOOST_HAS_STDINT_H +# if !defined(__PALMOS_TRAPS__) +# define BOOST_HAS_UNISTD_H +# endif + // boilerplate code: +# include +#endif + +#if defined(_MWMT) || _MSL_THREADSAFE +# define BOOST_HAS_THREADS +#endif + +#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + + +#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/roguewave.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/roguewave.hpp new file mode 100644 index 00000000..f7afe334 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/roguewave.hpp @@ -0,0 +1,153 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2003. +// (C) Copyright Boris Gubenko 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Rogue Wave std lib: + +#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# include +# if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# error This is not the Rogue Wave standard library +# endif +#endif +// +// figure out a consistent version number: +// +#ifndef _RWSTD_VER +# define BOOST_RWSTD_VER 0x010000 +#elif _RWSTD_VER < 0x010000 +# define BOOST_RWSTD_VER (_RWSTD_VER << 8) +#else +# define BOOST_RWSTD_VER _RWSTD_VER +#endif + +#ifndef _RWSTD_VER +# define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)" +#elif _RWSTD_VER < 0x04010200 + # define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER) +#else +# ifdef _RWSTD_VER_STR +# define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR +# else +# define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER) +# endif +#endif + +// +// Prior to version 2.2.0 the primary template for std::numeric_limits +// does not have compile time constants, even though specializations of that +// template do: +// +#if BOOST_RWSTD_VER < 0x020200 +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the +// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817): +#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550)) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// Borland version of numeric_limits lacks __int64 specialisation: +// +#ifdef __BORLANDC__ +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// No std::iterator if it can't figure out default template args: +// +#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// No iterator traits without partial specialization: +// +#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// Prior to version 2.0, std::auto_ptr was buggy, and there were no +// new-style iostreams, and no conformant std::allocator: +// +#if (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_AUTO_PTR +# define BOOST_NO_STRINGSTREAM +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STD_LOCALE +#endif + +// +// No template iterator constructors without member template support: +// +#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +#endif + +// +// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use +// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR +// on HP aCC systems even though the allocator is in fact broken): +// +#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If we have a std::locale, we still may not have std::use_facet: +// +#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + +// +// There's no std::distance prior to version 2, or without +// partial specialization support: +// +#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + #define BOOST_NO_STD_DISTANCE +#endif + +// +// Some versions of the rogue wave library don't have assignable +// OutputIterators: +// +#if BOOST_RWSTD_VER < 0x020100 +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +#endif + +// +// Disable BOOST_HAS_LONG_LONG when the library has no support for it. +// +#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG) +# undef BOOST_HAS_LONG_LONG +#endif + +// +// check that on HP-UX, the proper RW library is used +// +#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD) +# error "Boost requires Standard RW library. Please compile and link with -AA" +#endif + +// +// Define macros specific to RW V2.2 on HP-UX +// +#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100) +# ifndef __HP_TC1_MAKE_PAIR +# define __HP_TC1_MAKE_PAIR +# endif +# ifndef _HP_INSTANTIATE_STD2_VL +# define _HP_INSTANTIATE_STD2_VL +# endif +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/sgi.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/sgi.hpp new file mode 100644 index 00000000..f413be78 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/sgi.hpp @@ -0,0 +1,111 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// generic SGI STL: + +#if !defined(__STL_CONFIG_H) +# include +# if !defined(__STL_CONFIG_H) +# error "This is not the SGI STL!" +# endif +#endif + +// +// No std::iterator traits without partial specialisation: +// +#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No std::stringstream with gcc < 3 +// +#if defined(__GNUC__) && (__GNUC__ < 3) && \ + ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \ + !defined(__STL_USE_NEW_IOSTREAMS) || \ + defined(__APPLE_CC__) + // Note that we only set this for GNU C++ prior to 2.95 since the + // latest patches for that release do contain a minimal + // If you are running a 2.95 release prior to 2.95.3 then this will need + // setting, but there is no way to detect that automatically (other + // than by running the configure script). + // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't + // have . +# define BOOST_NO_STRINGSTREAM +#endif + +// +// Assume no std::locale without own iostreams (this may be an +// incorrect assumption in some cases): +// +#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// Original native SGI streams have non-standard std::messages facet: +// +#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// SGI's new iostreams have missing "const" in messages<>::open +// +#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_MESSAGES +#endif + +// +// No template iterator constructors, or std::allocator +// without member templates: +// +#if !defined(__STL_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST + +// +// If this is GNU libstdc++2, then no and no std::wstring: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) +# include +# if defined(__BASTRING__) +# define BOOST_NO_LIMITS +// Note: will provide compile-time constants +# undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_STD_WSTRING +# endif +#endif + +// +// There is no standard iterator unless we have namespace support: +// +#if !defined(__STL_USE_NAMESPACES) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +#define BOOST_STDLIB "SGI standard library" + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/stlport.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/stlport.hpp new file mode 100644 index 00000000..d8274a11 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/stlport.hpp @@ -0,0 +1,201 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// STLPort standard library config: + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# include +# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# error "This is not STLPort!" +# endif +#endif + +// +// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +// for versions prior to 4.1(beta) +// +#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// +// If STLport thinks that there is no partial specialisation, then there is no +// std::iterator traits: +// +#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION)) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No new style iostreams on GCC without STLport's iostreams enabled: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS)) +# define BOOST_NO_STRINGSTREAM +#endif + +// +// No new iostreams implies no std::locale, and no std::stringstream: +// +#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +#endif + +// +// If the streams are not native, and we have a "using ::x" compiler bug +// then the io stream facets are not available in namespace std:: +// +#ifdef _STLPORT_VERSION +# if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#else +# if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#endif + +// +// Without member template support enabled, their are no template +// iterate constructors, and no std::allocator: +// +#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES)) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif +// +// however we always have at least a partial allocator: +// +#define BOOST_HAS_PARTIAL_STD_ALLOCATOR + +#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) +# define BOOST_NO_STD_ALLOCATOR +#endif + +#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If STLport thinks there is no wchar_t at all, then we have to disable +// the support for the relevant specilazations of std:: templates. +// +#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT) +# ifndef BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTRING +# endif +# ifndef BOOST_NO_STD_WSTREAMBUF +# define BOOST_NO_STD_WSTREAMBUF +# endif +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST + +// +// STLport does a good job of importing names into namespace std::, +// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our +// workaround does not conflict with STLports: +// +// +// Harold Howe says: +// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with +// BCB6 does cause problems. If we detect C++ Builder, then don't define +// BOOST_NO_STDC_NAMESPACE +// +#if !defined(__BORLANDC__) && !defined(__DMC__) +// +// If STLport is using it's own namespace, and the real names are in +// the global namespace, then we duplicate STLport's using declarations +// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't +// necessarily import all the names we need into namespace std:: +// +# if (defined(__STL_IMPORT_VENDOR_CSTD) \ + || defined(__STL_USE_OWN_NAMESPACE) \ + || defined(_STLP_IMPORT_VENDOR_CSTD) \ + || defined(_STLP_USE_OWN_NAMESPACE)) \ + && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD)) +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560 +// STLport doesn't import std::abs correctly: +#include +namespace std { using ::abs; } +// and strcmp/strcpy don't get imported either ('cos they are macros) +#include +#ifdef strcpy +# undef strcpy +#endif +#ifdef strcmp +# undef strcmp +#endif +#ifdef _STLP_VENDOR_CSTD +namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; } +#endif +#endif + +// +// std::use_facet may be non-standard, uses a class instead: +// +#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_STLP_USE_FACET +#endif + +// +// If STLport thinks there are no wide functions, etc. is not working; but +// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import +// into std:: ourselves). +// +#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +#endif + +// +// If STLport for some reason was configured so that it thinks that wchar_t +// is not an intrinsic type, then we have to disable the support for it as +// well (we would be missing required specializations otherwise). +// +#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT) +# undef BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +// +// Borland ships a version of STLport with C++ Builder 6 that lacks +// hashtables and the like: +// +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560) +# undef BOOST_HAS_HASH +#endif + +// +// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max +// +#if defined(__GNUC__) && (__GNUC__ < 3) +# include // for std::min and std::max +# define BOOST_USING_STD_MIN() ((void)0) +# define BOOST_USING_STD_MAX() ((void)0) +namespace boost { using std::min; using std::max; } +#endif + +#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/vacpp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/vacpp.hpp new file mode 100644 index 00000000..8321ee0c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/stdlib/vacpp.hpp @@ -0,0 +1,18 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +#if __IBMCPP__ <= 501 +# define BOOST_NO_STD_ALLOCATOR +#endif + +#define BOOST_HAS_MACRO_USE_FACET +#define BOOST_NO_STD_MESSAGES + +#define BOOST_STDLIB "Visual Age default standard library" + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/suffix.hpp new file mode 100644 index 00000000..b57d3f1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/suffix.hpp @@ -0,0 +1,566 @@ +// Boost config.hpp configuration header file ------------------------------// + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Bill Kempf 2002. +// (C) Copyright Jens Maurer 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Gennaro Prota 2003. +// (C) Copyright Eric Friedman 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config +// +// This file is intended to be stable, and relatively unchanging. +// It should contain boilerplate code only - no compiler specific +// code unless it is unavoidable - no changes unless unavoidable. + +#ifndef BOOST_CONFIG_SUFFIX_HPP +#define BOOST_CONFIG_SUFFIX_HPP + +// +// look for long long by looking for the appropriate macros in . +// Note that we use limits.h rather than climits for maximal portability, +// remember that since these just declare a bunch of macros, there should be +// no namespace issues from this. +// +#if !defined(BOOST_HAS_LONG_LONG) \ + && !defined(BOOST_MSVC) && !defined(__BORLANDC__) +# include +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# define BOOST_HAS_LONG_LONG +# endif +#endif + +// GCC 3.x will clean up all of those nasty macro definitions that +// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine +// it under GCC 3.x. +#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS) +# undef BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// Assume any extensions are in namespace std:: unless stated otherwise: +// +# ifndef BOOST_STD_EXTENSION_NAMESPACE +# define BOOST_STD_EXTENSION_NAMESPACE std +# endif + +// +// If cv-qualified specializations are not allowed, then neither are cv-void ones: +// +# if defined(BOOST_NO_CV_SPECIALIZATIONS) \ + && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# endif + +// +// If there is no numeric_limits template, then it can't have any compile time +// constants either! +// +# if defined(BOOST_NO_LIMITS) \ + && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// if there is no long long then there is no specialisation +// for numeric_limits either: +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +#endif + +// +// if there is no __int64 then there is no specialisation +// for numeric_limits<__int64> either: +// +#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// if member templates are supported then so is the +// VC6 subset of member templates: +// +# if !defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif + +// +// Without partial specialization, can't test for partial specialisation bugs: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# endif + +// +// Without partial specialization, we can't have array-type partial specialisations: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif + +// +// Without partial specialization, std::iterator_traits can't work: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +# define BOOST_NO_STD_ITERATOR_TRAITS +# endif + +// +// Without member template support, we can't have template constructors +// in the standard library either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# endif + +// +// Without member template support, we can't have a conforming +// std::allocator template either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_NO_STD_ALLOCATOR +# endif + +// +// without ADL support then using declarations will break ADL as well: +// +#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// If we have a standard allocator, then we have a partial one as well: +// +#if !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +// +// We can't have a working std::use_facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET) +# define BOOST_NO_STD_USE_FACET +# endif + +// +// We can't have a std::messages facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES) +# define BOOST_NO_STD_MESSAGES +# endif + +// +// We can't have a working std::wstreambuf if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF) +# define BOOST_NO_STD_WSTREAMBUF +# endif + +// +// We can't have a if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) +# define BOOST_NO_CWCTYPE +# endif + +// +// We can't have a swprintf if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +# endif + +// +// If Win32 support is turned off, then we must turn off +// threading support also, unless there is some other +// thread API enabled: +// +#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \ + && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS) +# define BOOST_DISABLE_THREADS +#endif + +// +// Turn on threading support if the compiler thinks that it's in +// multithreaded mode. We put this here because there are only a +// limited number of macros that identify this (if there's any missing +// from here then add to the appropriate compiler section): +// +#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ + || defined(_PTHREADS)) && !defined(BOOST_HAS_THREADS) +# define BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if BOOST_DISABLE_THREADS is defined: +// +#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if we don't recognise the threading API: +// +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\ + && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\ + && !defined(BOOST_HAS_MPTASKS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading detail macros off if we don't (want to) use threading +// +#ifndef BOOST_HAS_THREADS +# undef BOOST_HAS_PTHREADS +# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# undef BOOST_HAS_WINTHREADS +# undef BOOST_HAS_BETHREADS +# undef BOOST_HAS_MPTASKS +#endif + +// +// If the compiler claims to be C99 conformant, then it had better +// have a : +// +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) +# define BOOST_HAS_STDINT_H +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +// +// Define BOOST_NO_SLIST and BOOST_NO_HASH if required. +// Note that this is for backwards compatibility only. +// +# ifndef BOOST_HAS_SLIST +# define BOOST_NO_SLIST +# endif + +# ifndef BOOST_HAS_HASH +# define BOOST_NO_HASH +# endif + +// +// Set BOOST_SLIST_HEADER if not set already: +// +#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER) +# define BOOST_SLIST_HEADER +#endif + +// +// Set BOOST_HASH_SET_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER) +# define BOOST_HASH_SET_HEADER +#endif + +// +// Set BOOST_HASH_MAP_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER) +# define BOOST_HASH_MAP_HEADER +#endif + +// BOOST_HAS_ABI_HEADERS +// This macro gets set if we have headers that fix the ABI, +// and prevent ODR violations when linking to external libraries: +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) +# define BOOST_HAS_ABI_HEADERS +#endif + +#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) +# undef BOOST_HAS_ABI_HEADERS +#endif + +// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// +// Because std::size_t usage is so common, even in boost headers which do not +// otherwise use the C library, the workaround is included here so +// that ugly workaround code need not appear in many other boost headers. +// NOTE WELL: This is a workaround for non-conforming compilers; +// must still be #included in the usual places so that inclusion +// works as expected with standard conforming compilers. The resulting +// double inclusion of is harmless. + +# ifdef BOOST_NO_STDC_NAMESPACE +# include + namespace std { using ::ptrdiff_t; using ::size_t; } +# endif + +// Workaround for the unfortunate min/max macros defined by some platform headers + +#define BOOST_PREVENT_MACRO_SUBSTITUTION + +#ifndef BOOST_USING_STD_MIN +# define BOOST_USING_STD_MIN() using std::min +#endif + +#ifndef BOOST_USING_STD_MAX +# define BOOST_USING_STD_MAX() using std::max +#endif + +// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// + +# ifdef BOOST_NO_STD_MIN_MAX + +namespace std { + template + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __b < __a ? __b : __a; + } + template + inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __a < __b ? __b : __a; + } +} + +# endif + +// BOOST_STATIC_CONSTANT workaround --------------------------------------- // +// On compilers which don't allow in-class initialization of static integral +// constant members, we must use enums as a workaround if we want the constants +// to be available at compile-time. This macro gives us a convenient way to +// declare such constants. + +# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } +# else +# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment +# endif + +// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// +// When the standard library does not have a conforming std::use_facet there +// are various workarounds available, but they differ from library to library. +// The same problem occurs with has_facet. +// These macros provide a consistent way to access a locale's facets. +// Usage: +// replace +// std::use_facet(loc); +// with +// BOOST_USE_FACET(Type, loc); +// Note do not add a std:: prefix to the front of BOOST_USE_FACET! +// Use for BOOST_HAS_FACET is analagous. + +#if defined(BOOST_NO_STD_USE_FACET) +# ifdef BOOST_HAS_TWO_ARG_USE_FACET +# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast(0)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(0)) +# elif defined(BOOST_HAS_MACRO_USE_FACET) +# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) +# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) +# elif defined(BOOST_HAS_STLP_USE_FACET) +# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet(loc)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +# endif +#else +# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +#endif + +// BOOST_NESTED_TEMPLATE workaround ------------------------------------------// +// Member templates are supported by some compilers even though they can't use +// the A::template member syntax, as a workaround replace: +// +// typedef typename A::template rebind binder; +// +// with: +// +// typedef typename A::BOOST_NESTED_TEMPLATE rebind binder; + +#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# define BOOST_NESTED_TEMPLATE template +#else +# define BOOST_NESTED_TEMPLATE +#endif + +// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// +// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION +// is defined, in which case it evaluates to return x; Use when you have a return +// statement that can never be reached. + +#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_UNREACHABLE_RETURN(x) return x; +#else +# define BOOST_UNREACHABLE_RETURN(x) +#endif + +// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// +// +// Some compilers don't support the use of `typename' for dependent +// types in deduced contexts, e.g. +// +// template void f(T, typename T::type); +// ^^^^^^^^ +// Replace these declarations with: +// +// template void f(T, BOOST_DEDUCED_TYPENAME T::type); + +#ifndef BOOST_NO_DEDUCED_TYPENAME +# define BOOST_DEDUCED_TYPENAME typename +#else +# define BOOST_DEDUCED_TYPENAME +#endif + +// long long workaround ------------------------------------------// +// On gcc (and maybe other compilers?) long long is alway supported +// but it's use may generate either warnings (with -ansi), or errors +// (with -pedantic -ansi) unless it's use is prefixed by __extension__ +// +#if defined(BOOST_HAS_LONG_LONG) +namespace boost{ +# ifdef __GNUC__ + __extension__ typedef long long long_long_type; + __extension__ typedef unsigned long long ulong_long_type; +# else + typedef long long long_long_type; + typedef unsigned long long ulong_long_type; +# endif +} +#endif + +// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// +// +// Some compilers have problems with function templates whose +// template parameters don't appear in the function parameter +// list (basically they just link one instantiation of the +// template in the final executable). These macros provide a +// uniform way to cope with the problem with no effects on the +// calling syntax. + +// Example: +// +// #include +// #include +// #include +// +// template +// void f() { std::cout << n << ' '; } +// +// template +// void g() { std::cout << typeid(T).name() << ' '; } +// +// int main() { +// f<1>(); +// f<2>(); +// +// g(); +// g(); +// } +// +// With VC++ 6.0 the output is: +// +// 2 2 double double +// +// To fix it, write +// +// template +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } +// +// template +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +// + + +#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + +# include "boost/type.hpp" +# include "boost/non_type.hpp" + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +#else + +// no workaround needed: expand to nothing + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + + +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + + +// ---------------------------------------------------------------------------// + +// +// Helper macro BOOST_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +#define BOOST_DO_STRINGIZE(X) #X + +// +// Helper macro BOOST_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. +// +#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y ) +#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y) +#define BOOST_DO_JOIN2( X, Y ) X##Y + +// +// Set some default values for compiler/library/platform names. +// These are for debugging config setup only: +// +# ifndef BOOST_COMPILER +# define BOOST_COMPILER "Unknown ISO C++ Compiler" +# endif +# ifndef BOOST_STDLIB +# define BOOST_STDLIB "Unknown ISO standard library" +# endif +# ifndef BOOST_PLATFORM +# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) +# define BOOST_PLATFORM "Generic Unix" +# else +# define BOOST_PLATFORM "Unknown" +# endif +# endif + +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/user.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/user.hpp new file mode 100644 index 00000000..5a4a9d47 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/config/user.hpp @@ -0,0 +1,124 @@ +// boost/config/user.hpp ---------------------------------------------------// + +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Do not check in modified versions of this file, +// This file may be customized by the end user, but not by boost. + +// +// Use this file to define a site and compiler specific +// configuration policy: +// + +// define this to locate a compiler config file: +// #define BOOST_COMPILER_CONFIG + +// define this to locate a stdlib config file: +// #define BOOST_STDLIB_CONFIG + +// define this to locate a platform config file: +// #define BOOST_PLATFORM_CONFIG + +// define this to disable compiler config, +// use if your compiler config has nothing to set: +// #define BOOST_NO_COMPILER_CONFIG + +// define this to disable stdlib config, +// use if your stdlib config has nothing to set: +// #define BOOST_NO_STDLIB_CONFIG + +// define this to disable platform config, +// use if your platform config has nothing to set: +// #define BOOST_NO_PLATFORM_CONFIG + +// define this to disable all config options, +// excluding the user config. Use if your +// setup is fully ISO compliant, and has no +// useful extensions, or for autoconf generated +// setups: +// #define BOOST_NO_CONFIG + +// define this to make the config "optimistic" +// about unknown compiler versions. Normally +// unknown compiler versions are assumed to have +// all the defects of the last known version, however +// setting this flag, causes the config to assume +// that unknown compiler versions are fully conformant +// with the standard: +// #define BOOST_STRICT_CONFIG + +// define this to cause the config to halt compilation +// with an #error if it encounters anything unknown -- +// either an unknown compiler version or an unknown +// compiler/platform/library: +// #define BOOST_ASSERT_CONFIG + + +// define if you want to disable threading support, even +// when available: +// #define BOOST_DISABLE_THREADS + +// define when you want to disable Win32 specific features +// even when available: +// #define BOOST_DISABLE_WIN32 + +// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any +// prefix/suffix headers that normally control things like struct +// packing and alignment. +// #define BOOST_DISABLE_ABI_HEADERS + +// BOOST_ABI_PREFIX: A prefix header to include in place of whatever +// boost.config would normally select, any replacement should set up +// struct packing and alignment options as required. +// #define BOOST_ABI_PREFIX my-header-name + +// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever +// boost.config would normally select, any replacement should undo +// the effects of the prefix header. +// #define BOOST_ABI_SUFFIX my-header-name + +// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, +// to be linked as dll's rather than static libraries on Microsoft Windows +// (this macro is used to turn on __declspec(dllimport) modifiers, so that +// the compiler knows which symbols to look for in a dll rather than in a +// static library). Note that there may be some libraries that can only +// be statically linked (Boost.Test for example) and others which may only +// be dynamically linked (Boost.Threads for example), in these cases this +// macro has no effect. +// #define BOOST_ALL_DYN_LINK + +// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll +// rather than a static library on Microsoft Windows: replace the WHATEVER +// part of the macro name with the name of the library that you want to +// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or +// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) +// modifiers, so that the compiler knows which symbols to look for in a dll +// rather than in a static library). +// Note that there may be some libraries that can only be statically linked +// (Boost.Test for example) and others which may only be dynamically linked +// (Boost.Threads for example), in these cases this macro is unsupported. +// #define BOOST_WHATEVER_DYN_LINK + +// BOOST_ALL_NO_LIB: Tells the config system not to automatically select +// which libraries to link against. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, +// simply by the act of including one of that library's headers. +// This macro turns that feature off. +// #define BOOST_ALL_NO_LIB + +// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically +// select which library to link against for library "whatever", +// replace WHATEVER in the macro name with the name of the library; +// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, simply +// by the act of including one of that library's headers. This macro turns +// that feature off. +// #define BOOST_WHATEVER_NO_LIB + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/cmath.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/cmath.hpp new file mode 100644 index 00000000..d8268d84 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/cmath.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2008. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/cmath is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_CMATH +# define BOOST_CONFIG_CMATH + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_CMATH_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/utility.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/utility.hpp new file mode 100644 index 00000000..dea8f115 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/no_tr1/utility.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/utility is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_UTILITY +# define BOOST_CONFIG_UTILITY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/aix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/aix.hpp new file mode 100644 index 00000000..95acc36e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/aix.hpp @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// IBM/Aix specific config options: + +#define BOOST_PLATFORM "IBM Aix" + +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_CLOCK_GETTIME + +// This needs support in "boost/cstdint.hpp" exactly like FreeBSD. +// This platform has header named which includes all +// the things needed. +#define BOOST_HAS_STDINT_H + +// Threading API's: +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_DELAY_NP +#define BOOST_HAS_SCHED_YIELD +//#define BOOST_HAS_PTHREAD_YIELD + +// boilerplate code: +#include + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/amigaos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/amigaos.hpp new file mode 100644 index 00000000..34bcf412 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/amigaos.hpp @@ -0,0 +1,15 @@ +// (C) Copyright John Maddock 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +#define BOOST_PLATFORM "AmigaOS" + +#define BOOST_DISABLE_THREADS +#define BOOST_NO_CWCHAR +#define BOOST_NO_STD_WSTRING +#define BOOST_NO_INTRINSIC_WCHAR_T + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/beos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/beos.hpp new file mode 100644 index 00000000..8ca41703 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/beos.hpp @@ -0,0 +1,26 @@ +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// BeOS specific config options: + +#define BOOST_PLATFORM "BeOS" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_CWCTYPE +#define BOOST_HAS_UNISTD_H + +#define BOOST_HAS_BETHREADS + +#ifndef BOOST_DISABLE_THREADS +# define BOOST_HAS_THREADS +#endif + +// boilerplate code: +#include + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/bsd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/bsd.hpp new file mode 100644 index 00000000..7d78d71d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/bsd.hpp @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Douglas Gregor 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// generic BSD config options: + +#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) +#error "This platform is not BSD" +#endif + +#ifdef __FreeBSD__ +#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__) +#elif defined(__NetBSD__) +#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__) +#elif defined(__OpenBSD__) +#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__) +#elif defined(__DragonFly__) +#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__) +#endif + +// +// is this the correct version check? +// FreeBSD has but does not +// advertise the fact in : +// +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) +# define BOOST_HAS_NL_TYPES_H +#endif + +// +// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in +// and not in +// +#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\ + || defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_HAS_PTHREADS +#endif + +// +// No wide character support in the BSD header files: +// +#if defined(__NetBSD__) +#define __NetBSD_GCC__ (__GNUC__ * 1000000 \ + + __GNUC_MINOR__ * 1000 \ + + __GNUC_PATCHLEVEL__) +// XXX - the following is required until c++config.h +// defines _GLIBCXX_HAVE_SWPRINTF and friends +// or the preprocessor conditionals are removed +// from the cwchar header. +#define _GLIBCXX_HAVE_SWPRINTF 1 +#endif + +#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \ + || (__NetBSD_GCC__ >= 2095003) || defined(__DragonFly__)) +# define BOOST_NO_CWCHAR +#endif +// +// The BSD has macros only, no functions: +// +#if !defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// thread API's not auto detected: +// +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_SIGACTION + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/cygwin.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/cygwin.hpp new file mode 100644 index 00000000..811a3787 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/cygwin.hpp @@ -0,0 +1,51 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// cygwin specific config options: + +#define BOOST_PLATFORM "Cygwin" +#define BOOST_NO_CWCTYPE +#define BOOST_NO_CWCHAR +#define BOOST_NO_SWPRINTF +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 + +// +// Threading API: +// See if we have POSIX threads, if we do use them, otherwise +// revert to native Win threads. +#define BOOST_HAS_UNISTD_H +#include +#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_PTHREADS +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_SIGACTION +#else +# if !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_WINTHREADS +# endif +# define BOOST_HAS_FTIME +#endif + +// +// find out if we have a stdint.h, there should be a better way to do this: +// +#include +#ifdef _STDINT_H +#define BOOST_HAS_STDINT_H +#endif + +// boilerplate code: +#include + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/hpux.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/hpux.hpp new file mode 100644 index 00000000..c5f0f66a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/hpux.hpp @@ -0,0 +1,87 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// hpux specific config options: + +#define BOOST_PLATFORM "HP-UX" + +// In principle, HP-UX has a nice under the name +// However, it has the following problem: +// Use of UINT32_C(0) results in "0u l" for the preprocessed source +// (verifyable with gcc 2.95.3) +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC) +# define BOOST_HAS_STDINT_H +#endif + +#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE)) +# define BOOST_NO_SWPRINTF +#endif +#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE) +# define BOOST_NO_CWCTYPE +#endif + +#if defined(__GNUC__) +# if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3)) + // GNU C on HP-UX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +# elif !defined(BOOST_DISABLE_THREADS) + // threads supported from gcc-3.3 onwards: +# define BOOST_HAS_THREADS +# define BOOST_HAS_PTHREADS +# endif +#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS) +# define BOOST_HAS_PTHREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// the following are always available: +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_SCHED_YIELD +#endif +#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#endif +#ifndef BOOST_HAS_NL_TYPES_H +# define BOOST_HAS_NL_TYPES_H +#endif +#ifndef BOOST_HAS_NANOSLEEP +# define BOOST_HAS_NANOSLEEP +#endif +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_DIRENT_H +# define BOOST_HAS_DIRENT_H +#endif +#ifndef BOOST_HAS_CLOCK_GETTIME +# define BOOST_HAS_CLOCK_GETTIME +#endif +#ifndef BOOST_HAS_SIGACTION +# define BOOST_HAS_SIGACTION +#endif +#ifndef BOOST_HAS_NRVO +# ifndef __parisc +# define BOOST_HAS_NRVO +# endif +#endif +#ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +#endif +#ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/irix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/irix.hpp new file mode 100644 index 00000000..8b11e4f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/irix.hpp @@ -0,0 +1,31 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// SGI Irix specific config options: + +#define BOOST_PLATFORM "SGI Irix" + +#define BOOST_NO_SWPRINTF +// +// these are not auto detected by POSIX feature tests: +// +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#ifdef __GNUC__ + // GNU C on IRIX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/linux.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/linux.hpp new file mode 100644 index 00000000..7206f5f2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/linux.hpp @@ -0,0 +1,98 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// linux specific config options: + +#define BOOST_PLATFORM "linux" + +// make sure we have __GLIBC_PREREQ if available at all +#include + +// +// added to glibc 2.1.1 +// We can only test for 2.1 though: +// +#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) + // defines int64_t unconditionally, but defines + // int64_t only if __GNUC__. Thus, assume a fully usable + // only when using GCC. +# if defined __GNUC__ +# define BOOST_HAS_STDINT_H +# endif +#endif + +#if defined(__LIBCOMO__) + // + // como on linux doesn't have std:: c functions: + // NOTE: versions of libcomo prior to beta28 have octal version numbering, + // e.g. version 25 is 21 (dec) + // +# if __LIBCOMO_VERSION__ <= 20 +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if __LIBCOMO_VERSION__ <= 21 +# define BOOST_NO_SWPRINTF +# endif + +#endif + +// +// If glibc is past version 2 then we definitely have +// gettimeofday, earlier versions may or may not have it: +// +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +# define BOOST_HAS_GETTIMEOFDAY +#endif + +#ifdef __USE_POSIX199309 +# define BOOST_HAS_NANOSLEEP +#endif + +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +// __GLIBC_PREREQ is available since 2.1.2 + + // swprintf is available since glibc 2.2.0 +# if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98)) +# define BOOST_NO_SWPRINTF +# endif +#else +# define BOOST_NO_SWPRINTF +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +#ifndef __GNUC__ +// +// if the compiler is not gcc we still need to be able to parse +// the GNU system headers, some of which (mainly ) +// use GNU specific extensions: +// +# ifndef __extension__ +# define __extension__ +# endif +# ifndef __const__ +# define __const__ const +# endif +# ifndef __volatile__ +# define __volatile__ volatile +# endif +# ifndef __signed__ +# define __signed__ signed +# endif +# ifndef __typeof__ +# define __typeof__ typeof +# endif +# ifndef __inline__ +# define __inline__ inline +# endif +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/macos.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/macos.hpp new file mode 100644 index 00000000..ad9d1f31 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/macos.hpp @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Bill Kempf 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Mac OS specific config options: + +#define BOOST_PLATFORM "Mac OS" + +#if __MACH__ && !defined(_MSL_USING_MSL_C) + +// Using the Mac OS X system BSD-style C library. + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif +// +// Begin by including our boilerplate code for POSIX +// feature detection, this is safe even when using +// the MSL as Metrowerks supply their own +// to replace the platform-native BSD one. G++ users +// should also always be able to do this on MaxOS X. +// +# include +# ifndef BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H +# endif + +// +// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday, +// of these only pthreads are advertised in , so set the +// other options explicitly: +// +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_SIGACTION + +# if (__GNUC__ < 3) && !defined( __APPLE_CC__) + +// GCC strange "ignore std" mode works better if you pretend everything +// is in the std namespace, for the most part. + +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if (__GNUC__ == 4) + +// Both gcc and intel require these. +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_NANOSLEEP + +# endif + +#else + +// Using the MSL C library. + +// We will eventually support threads in non-Carbon builds, but we do +// not support this yet. +# if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON ) + +# if !defined(BOOST_HAS_PTHREADS) +# define BOOST_HAS_MPTASKS +# elif ( __dest_os == __mac_os_x ) +// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the +// gettimeofday and no posix. +# define BOOST_HAS_GETTIMEOFDAY +# endif + +// The MP task implementation of Boost Threads aims to replace MP-unsafe +// parts of the MSL, so we turn on threads unconditionally. +# define BOOST_HAS_THREADS + +// The remote call manager depends on this. +# define BOOST_BIND_ENABLE_PASCAL + +# endif + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/qnxnto.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/qnxnto.hpp new file mode 100644 index 00000000..7aaf439e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/qnxnto.hpp @@ -0,0 +1,31 @@ +// (C) Copyright Jim Douglas 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// QNX specific config options: + +#define BOOST_PLATFORM "QNX" + +#define BOOST_HAS_UNISTD_H +#include + +// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h +// or log1p and expm1: +#undef BOOST_HAS_NL_TYPES_H +#undef BOOST_HAS_LOG1P +#undef BOOST_HAS_EXPM1 + +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_CLOCK_GETTIME +#define BOOST_HAS_NANOSLEEP + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/solaris.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/solaris.hpp new file mode 100644 index 00000000..2a26a8ea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/solaris.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// sun specific config options: + +#define BOOST_PLATFORM "Sun Solaris" + +#define BOOST_HAS_GETTIMEOFDAY + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// +// pthreads don't actually work with gcc unless _PTHREADS is defined: +// +#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS) +# undef BOOST_HAS_PTHREADS +#endif + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/vxworks.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/vxworks.hpp new file mode 100644 index 00000000..0961b33c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/vxworks.hpp @@ -0,0 +1,31 @@ +// (C) Copyright Dustin Spicuzza 2009. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// vxWorks specific config options: + +#define BOOST_PLATFORM "vxWorks" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_INTRINSIC_WCHAR_T + +#if defined(__GNUC__) && defined(__STRICT_ANSI__) +#define BOOST_NO_INT64_T +#endif + +#define BOOST_HAS_UNISTD_H + +// these allow posix_features to work, since vxWorks doesn't +// define them itself +#define _POSIX_TIMERS 1 +#define _POSIX_THREADS 1 + +// vxworks doesn't work with asio serial ports +#define BOOST_ASIO_DISABLE_SERIAL_PORT + +// boilerplate code: +#include + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/win32.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/win32.hpp new file mode 100644 index 00000000..9344818f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/platform/win32.hpp @@ -0,0 +1,58 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Bill Kempf 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Rene Rivera 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Win32 specific config options: + +#define BOOST_PLATFORM "Win32" + +// Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION. +#if defined(__MINGW32__) +# include <_mingw.h> +#endif + +#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +#endif + +#if !defined(__GNUC__) && !defined(BOOST_HAS_DECLSPEC) +# define BOOST_HAS_DECLSPEC +#endif + +#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0))) +# define BOOST_HAS_STDINT_H +# define __STDC_LIMIT_MACROS +# define BOOST_HAS_DIRENT_H +# define BOOST_HAS_UNISTD_H +#endif + +// +// Win32 will normally be using native Win32 threads, +// but there is a pthread library avaliable as an option, +// we used to disable this when BOOST_DISABLE_WIN32 was +// defined but no longer - this should allow some +// files to be compiled in strict mode - while maintaining +// a consistent setting of BOOST_HAS_THREADS across +// all translation units (needed for shared_ptr etc). +// + +#ifdef _WIN32_WCE +# define BOOST_NO_ANSI_APIS +#endif + +#ifndef BOOST_HAS_PTHREADS +# define BOOST_HAS_WINTHREADS +#endif + +#ifndef BOOST_DISABLE_WIN32 +// WEK: Added +#define BOOST_HAS_FTIME +#define BOOST_WINDOWS 1 + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/posix_features.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/posix_features.hpp new file mode 100644 index 00000000..d1295479 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/posix_features.hpp @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// All POSIX feature tests go in this file, +// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well +// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's +// may be present but none-functional unless _POSIX_C_SOURCE and +// _XOPEN_SOURCE have been defined to the right value (it's up +// to the user to do this *before* including any header, although +// in most cases the compiler will do this for you). + +# if defined(BOOST_HAS_UNISTD_H) +# include + + // XOpen has , but is this the correct version check? +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3) +# define BOOST_HAS_NL_TYPES_H +# endif + + // POSIX version 6 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) +# define BOOST_HAS_STDINT_H +# endif + + // POSIX version 2 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) +# define BOOST_HAS_DIRENT_H +# endif + + // POSIX version 3 requires to have sigaction: +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L) +# define BOOST_HAS_SIGACTION +# endif + // POSIX defines _POSIX_THREADS > 0 for pthread support, + // however some platforms define _POSIX_THREADS without + // a value, hence the (_POSIX_THREADS+0 >= 0) check. + // Strictly speaking this may catch platforms with a + // non-functioning stub , but such occurrences should + // occur very rarely if at all. +# if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS) +# define BOOST_HAS_PTHREADS +# endif + + // BOOST_HAS_NANOSLEEP: + // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME: +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_NANOSLEEP +# endif + + // BOOST_HAS_CLOCK_GETTIME: + // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME + // but at least one platform - linux - defines that flag without + // defining clock_gettime): +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) +# define BOOST_HAS_CLOCK_GETTIME +# endif + + // BOOST_HAS_SCHED_YIELD: + // This is predicated on _POSIX_PRIORITY_SCHEDULING or + // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME. +# if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\ + || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_SCHED_YIELD +# endif + + // BOOST_HAS_GETTIMEOFDAY: + // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE: + // These are predicated on _XOPEN_VERSION, and appears to be first released + // in issue 4, version 2 (_XOPEN_VERSION > 500). + // Likewise for the functions log1p and expm1. +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500) +# define BOOST_HAS_GETTIMEOFDAY +# if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500) +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# endif +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +# endif + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_compiler_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_compiler_config.hpp new file mode 100644 index 00000000..abdf360a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_compiler_config.hpp @@ -0,0 +1,119 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Martin Wille 2003. +// (C) Copyright Guillaume Melquiond 2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for most recent version. + + +// one identification macro for each of the +// compilers we support: + +# define BOOST_CXX_GCCXML 0 +# define BOOST_CXX_COMO 0 +# define BOOST_CXX_DMC 0 +# define BOOST_CXX_INTEL 0 +# define BOOST_CXX_GNUC 0 +# define BOOST_CXX_KCC 0 +# define BOOST_CXX_SGI 0 +# define BOOST_CXX_TRU64 0 +# define BOOST_CXX_GHS 0 +# define BOOST_CXX_BORLAND 0 +# define BOOST_CXX_CW 0 +# define BOOST_CXX_SUNPRO 0 +# define BOOST_CXX_HPACC 0 +# define BOOST_CXX_MPW 0 +# define BOOST_CXX_IBMCPP 0 +# define BOOST_CXX_MSVC 0 +# define BOOST_CXX_PGI 0 + + +// locate which compiler we are using and define +// BOOST_COMPILER_CONFIG as needed: + +#if defined(__GCCXML__) +// GCC-XML emulates other compilers, it has to appear first here! +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/gcc_xml.hpp" + +#elif defined __COMO__ +// Comeau C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/comeau.hpp" + +#elif defined __DMC__ +// Digital Mars C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/digitalmars.hpp" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/intel.hpp" + +# elif defined __GNUC__ +// GNU C++: +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/gcc.hpp" + +#elif defined __KCC +// Kai C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/kai.hpp" + +#elif defined __sgi +// SGI MIPSpro C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/sgi_mipspro.hpp" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/compaq_cxx.hpp" + +#elif defined __ghs +// Greenhills C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/greenhills.hpp" + +#elif defined __CODEGEARC__ +// CodeGear - must be checked for before Borland +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/codegear.hpp" + +#elif defined __BORLANDC__ +// Borland +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/borland.hpp" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/metrowerks.hpp" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/sunpro_cc.hpp" + +#elif defined __HP_aCC +// HP aCC +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/hp_acc.hpp" + +#elif defined(__MRC__) || defined(__SC__) +// MPW MrCpp or SCpp +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/mpw.hpp" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/vacpp.hpp" + +#elif defined(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/pgi.hpp" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# define BOOST_COMPILER_CONFIG "carve/external/boost/config/compiler/visualc.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the compiler: +# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)" + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_platform_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_platform_config.hpp new file mode 100644 index 00000000..705416d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_platform_config.hpp @@ -0,0 +1,94 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed. +// Note that we define the headers to include using "header_name" not +// in order to prevent macro expansion within the header +// name (for example "linux" is a macro on linux systems). + +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) +// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though? +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/linux.hpp" + +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +// BSD: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/bsd.hpp" + +#elif defined(sun) || defined(__sun) +// solaris: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/solaris.hpp" + +#elif defined(__sgi) +// SGI Irix: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/irix.hpp" + +#elif defined(__hpux) +// hp unix: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/hpux.hpp" + +#elif defined(__CYGWIN__) +// cygwin is not win32: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/cygwin.hpp" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +// win32: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/win32.hpp" + +#elif defined(__BEOS__) +// BeOS +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/beos.hpp" + +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +// MacOS +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/macos.hpp" + +#elif defined(__IBMCPP__) || defined(_AIX) +// IBM +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/aix.hpp" + +#elif defined(__amigaos__) +// AmigaOS +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/amigaos.hpp" + +#elif defined(__QNXNTO__) +// QNX: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/qnxnto.hpp" + +#elif defined(__VXWORKS__) +// vxWorks: +# define BOOST_PLATFORM_CONFIG "carve/external/boost/config/platform/vxworks.hpp" + +#else + +# if defined(unix) \ + || defined(__unix) \ + || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) + + // generic unix platform: + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif + +# include + +# endif + +# if defined (BOOST_ASSERT_CONFIG) + // this must come last - generate an error if we don't + // recognise the platform: +# error "Unknown platform - please configure and report the results to boost.org" +# endif + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_stdlib_config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_stdlib_config.hpp new file mode 100644 index 00000000..74e95a52 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/select_stdlib_config.hpp @@ -0,0 +1,77 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed: + +// First include to determine if some version of STLport is in use as the std lib +// (do not rely on this header being included since users can short-circuit this header +// if they know whose std lib they are using.) +#include + +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +// STLPort library; this _must_ come first, otherwise since +// STLport typically sits on top of some other library, we +// can end up detecting that first rather than STLport: +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/stlport.hpp" + +#else + +// If our std lib was not some version of STLport, then include as it is about +// the smallest of the std lib headers that includes real C++ stuff. (Some std libs do not +// include their C++-related macros in so this additional include makes sure +// we get those definitions) +// (again do not rely on this header being included since users can short-circuit this +// header if they know whose std lib they are using.) +#include + +#if defined(__LIBCOMO__) +// Comeau STL: +#define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/libcomo.hpp" + +#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) +// Rogue Wave library: +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/roguewave.hpp" + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +// GNU libstdc++ 3 +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/libstdcpp3.hpp" + +#elif defined(__STL_CONFIG_H) +// generic SGI STL +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/sgi.hpp" + +#elif defined(__MSL_CPP__) +// MSL standard lib: +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/msl.hpp" + +#elif defined(__IBMCPP__) +// take the default VACPP std lib +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/vacpp.hpp" + +#elif defined(MSIPL_COMPILE_H) +// Modena C++ standard library +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/modena.hpp" + +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +// Dinkumware Library (this has to appear after any possible replacement libraries): +# define BOOST_STDLIB_CONFIG "carve/external/boost/config/stdlib/dinkumware.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the library: +# error "Unknown standard library - please configure and report the results to boost.org" + +#endif + +#endif + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/dinkumware.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/dinkumware.hpp new file mode 100644 index 00000000..ce6b342d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/dinkumware.hpp @@ -0,0 +1,136 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Guillaume Melquiond 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Dinkumware standard library config: + +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#include +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#error This is not the Dinkumware lib! +#endif +#endif + + +#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306) + // full dinkumware 3.06 and above + // fully conforming provided the compiler supports it: +# if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700)) // can be defined in yvals.h +# define BOOST_NO_STDC_NAMESPACE +# endif +# if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC) +# define BOOST_NO_STD_ALLOCATOR +# endif +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +# if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + // if this lib version is set up for vc6 then there is no std::use_facet: +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET + // C lib functions aren't in namespace std either: +# define BOOST_NO_STDC_NAMESPACE + // and nor is +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +// There's no numeric_limits support unless _LONGLONG is defined: +# if !defined(_LONGLONG) && (_CPPLIB_VER <= 310) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +// 3.06 appears to have (non-sgi versions of) & , +// and no at all +#else +# define BOOST_MSVC_STD_ITERATOR 1 +# define BOOST_NO_STD_ITERATOR +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_STD_USE_FACET +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +# define BOOST_HAS_MACRO_USE_FACET +# ifndef _CPPLIB_VER + // Updated Dinkum library defines this, and provides + // its own min and max definitions. +# define BOOST_NO_STD_MIN_MAX +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +#endif + +// +// std extension namespace is stdext for vc7.1 and later, +// the same applies to other compilers that sit on top +// of vc7.1 (Intel and Comeau): +// +#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__) +# define BOOST_STD_EXTENSION_NAMESPACE stdext +#endif + + +#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306) + // if we're using a dinkum lib that's + // been configured for VC6/7 then there is + // no iterator traits (true even for icl) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310) +// Intel C++ chokes over any non-trivial use of +// this may be an overly restrictive define, but regex fails without it: +# define BOOST_NO_STD_LOCALE +#endif + +// C++0x headers implemented in 520 (as shipped by Microsoft) +// +#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520 +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE + +#ifdef _CPPLIB_VER +# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER +#else +# define BOOST_DINKUMWARE_STDLIB 1 +#endif + +#ifdef _CPPLIB_VER +# define BOOST_STDLIB "Dinkumware standard library version " BOOST_STRINGIZE(_CPPLIB_VER) +#else +# define BOOST_STDLIB "Dinkumware standard library version 1.x" +#endif + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libcomo.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libcomo.hpp new file mode 100644 index 00000000..653e5780 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libcomo.hpp @@ -0,0 +1,71 @@ +// (C) Copyright John Maddock 2002 - 2003. +// (C) Copyright Jens Maurer 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Comeau STL: + +#if !defined(__LIBCOMO__) +# include +# if !defined(__LIBCOMO__) +# error "This is not the Comeau STL!" +# endif +#endif + +// +// std::streambuf is non-standard +// NOTE: versions of libcomo prior to beta28 have octal version numbering, +// e.g. version 25 is 21 (dec) +#if __LIBCOMO_VERSION__ <= 22 +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32) +#define BOOST_NO_SWPRINTF +#endif + +#if __LIBCOMO_VERSION__ >= 31 +# define BOOST_HAS_HASH +# define BOOST_HAS_SLIST +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +#define BOOST_STDLIB "Comeau standard library " BOOST_STRINGIZE(__LIBCOMO_VERSION__) + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libstdcpp3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libstdcpp3.hpp new file mode 100644 index 00000000..6a57319f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/libstdcpp3.hpp @@ -0,0 +1,127 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// config for libstdc++ v3 +// not much to go in here: + +#ifdef __GLIBCXX__ +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__) +#else +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__) +#endif + +#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +# define BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if defined(__osf__) && !defined(_REENTRANT) \ + && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) ) +// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header +// file is included, therefore for consistency we define it here as well. +# define _REENTRANT +#endif + +#ifdef __GLIBCXX__ // gcc 3.4 and greater: +# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ + || defined(_GLIBCXX__PTHREADS) + // + // If the std lib has thread support turned on, then turn it on in Boost + // as well. We do this because some gcc-3.4 std lib headers define _REENTANT + // while others do not... + // +# define BOOST_HAS_THREADS +# else +# define BOOST_DISABLE_THREADS +# endif +#elif defined(__GLIBCPP__) \ + && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \ + && !defined(_GLIBCPP__PTHREADS) + // disable thread support if the std lib was built single threaded: +# define BOOST_DISABLE_THREADS +#endif + +#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT) +// linux on arm apparently doesn't define _REENTRANT +// so just turn on threading support whenever the std lib is thread safe: +# define BOOST_HAS_THREADS +#endif + + +#if !defined(_GLIBCPP_USE_LONG_LONG) \ + && !defined(_GLIBCXX_USE_LONG_LONG)\ + && defined(BOOST_HAS_LONG_LONG) +// May have been set by compiler/*.hpp, but "long long" without library +// support is useless. +# undef BOOST_HAS_LONG_LONG +#endif + +#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0 +# define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx +# define BOOST_HAS_SLIST +# define BOOST_HAS_HASH +# define BOOST_SLIST_HEADER +# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# else +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# endif +#endif + +// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly +// __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++ +// developers. He also commented: +// +// "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in +// GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305. +// Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support +// than any release in the 4.2 series." +// +// Another resource for understanding stdlibc++ features is: +// http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x + +// C++0x headers in GCC 4.3.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// C++0x headers in GCC 4.4.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS + +// --- end --- diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/modena.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/modena.hpp new file mode 100644 index 00000000..61b47c61 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/modena.hpp @@ -0,0 +1,55 @@ +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Modena C++ standard library (comes with KAI C++) + +#if !defined(MSIPL_COMPILE_H) +# include +# if !defined(__MSIPL_COMPILE_H) +# error "This is not the Modena C++ library!" +# endif +#endif + +#ifndef MSIPL_NL_TYPES +#define BOOST_NO_STD_MESSAGES +#endif + +#ifndef MSIPL_WCHART +#define BOOST_NO_STD_WSTRING +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Modena C++ standard library" + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/msl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/msl.hpp new file mode 100644 index 00000000..6d584a0a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/msl.hpp @@ -0,0 +1,83 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Metrowerks standard library: + +#ifndef __MSL_CPP__ +# include +# ifndef __MSL_CPP__ +# error This is not the MSL standard library! +# endif +#endif + +#if __MSL_CPP__ >= 0x6000 // Pro 6 +# define BOOST_HAS_HASH +# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks +#endif +#define BOOST_HAS_SLIST + +#if __MSL_CPP__ < 0x6209 +# define BOOST_NO_STD_MESSAGES +#endif + +// check C lib version for +#include + +#if defined(__MSL__) && (__MSL__ >= 0x5000) +# define BOOST_HAS_STDINT_H +# if !defined(__PALMOS_TRAPS__) +# define BOOST_HAS_UNISTD_H +# endif + // boilerplate code: +# include +#endif + +#if defined(_MWMT) || _MSL_THREADSAFE +# define BOOST_HAS_THREADS +#endif + +#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/roguewave.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/roguewave.hpp new file mode 100644 index 00000000..7293635c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/roguewave.hpp @@ -0,0 +1,179 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2003. +// (C) Copyright Boris Gubenko 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Rogue Wave std lib: + +#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# include +# if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# error This is not the Rogue Wave standard library +# endif +#endif +// +// figure out a consistent version number: +// +#ifndef _RWSTD_VER +# define BOOST_RWSTD_VER 0x010000 +#elif _RWSTD_VER < 0x010000 +# define BOOST_RWSTD_VER (_RWSTD_VER << 8) +#else +# define BOOST_RWSTD_VER _RWSTD_VER +#endif + +#ifndef _RWSTD_VER +# define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)" +#elif _RWSTD_VER < 0x04010200 + # define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER) +#else +# ifdef _RWSTD_VER_STR +# define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR +# else +# define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER) +# endif +#endif + +// +// Prior to version 2.2.0 the primary template for std::numeric_limits +// does not have compile time constants, even though specializations of that +// template do: +// +#if BOOST_RWSTD_VER < 0x020200 +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the +// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817): +#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550)) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// Borland version of numeric_limits lacks __int64 specialisation: +// +#ifdef __BORLANDC__ +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// No std::iterator if it can't figure out default template args: +// +#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// No iterator traits without partial specialization: +// +#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// Prior to version 2.0, std::auto_ptr was buggy, and there were no +// new-style iostreams, and no conformant std::allocator: +// +#if (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_AUTO_PTR +# define BOOST_NO_STRINGSTREAM +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STD_LOCALE +#endif + +// +// No template iterator constructors without member template support: +// +#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +#endif + +// +// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use +// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR +// on HP aCC systems even though the allocator is in fact broken): +// +#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If we have a std::locale, we still may not have std::use_facet: +// +#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + +// +// There's no std::distance prior to version 2, or without +// partial specialization support: +// +#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + #define BOOST_NO_STD_DISTANCE +#endif + +// +// Some versions of the rogue wave library don't have assignable +// OutputIterators: +// +#if BOOST_RWSTD_VER < 0x020100 +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +#endif + +// +// Disable BOOST_HAS_LONG_LONG when the library has no support for it. +// +#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG) +# undef BOOST_HAS_LONG_LONG +#endif + +// +// check that on HP-UX, the proper RW library is used +// +#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD) +# error "Boost requires Standard RW library. Please compile and link with -AA" +#endif + +// +// Define macros specific to RW V2.2 on HP-UX +// +#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100) +# ifndef __HP_TC1_MAKE_PAIR +# define __HP_TC1_MAKE_PAIR +# endif +# ifndef _HP_INSTANTIATE_STD2_VL +# define _HP_INSTANTIATE_STD2_VL +# endif +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/sgi.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/sgi.hpp new file mode 100644 index 00000000..c69396e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/sgi.hpp @@ -0,0 +1,136 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// generic SGI STL: + +#if !defined(__STL_CONFIG_H) +# include +# if !defined(__STL_CONFIG_H) +# error "This is not the SGI STL!" +# endif +#endif + +// +// No std::iterator traits without partial specialisation: +// +#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No std::stringstream with gcc < 3 +// +#if defined(__GNUC__) && (__GNUC__ < 3) && \ + ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \ + !defined(__STL_USE_NEW_IOSTREAMS) || \ + defined(__APPLE_CC__) + // Note that we only set this for GNU C++ prior to 2.95 since the + // latest patches for that release do contain a minimal + // If you are running a 2.95 release prior to 2.95.3 then this will need + // setting, but there is no way to detect that automatically (other + // than by running the configure script). + // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't + // have . +# define BOOST_NO_STRINGSTREAM +#endif + +// +// Assume no std::locale without own iostreams (this may be an +// incorrect assumption in some cases): +// +#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// Original native SGI streams have non-standard std::messages facet: +// +#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// SGI's new iostreams have missing "const" in messages<>::open +// +#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_MESSAGES +#endif + +// +// No template iterator constructors, or std::allocator +// without member templates: +// +#if !defined(__STL_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST + +// +// If this is GNU libstdc++2, then no and no std::wstring: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) +# include +# if defined(__BASTRING__) +# define BOOST_NO_LIMITS +// Note: will provide compile-time constants +# undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_STD_WSTRING +# endif +#endif + +// +// There is no standard iterator unless we have namespace support: +// +#if !defined(__STL_USE_NAMESPACES) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "SGI standard library" + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/stlport.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/stlport.hpp new file mode 100644 index 00000000..3dfd529e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/stlport.hpp @@ -0,0 +1,236 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// STLPort standard library config: + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# include +# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# error "This is not STLPort!" +# endif +#endif + +// +// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +// for versions prior to 4.1(beta) +// +#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// +// If STLport thinks that there is no partial specialisation, then there is no +// std::iterator traits: +// +#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION)) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No new style iostreams on GCC without STLport's iostreams enabled: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS)) +# define BOOST_NO_STRINGSTREAM +#endif + +// +// No new iostreams implies no std::locale, and no std::stringstream: +// +#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +#endif + +// +// If the streams are not native, and we have a "using ::x" compiler bug +// then the io stream facets are not available in namespace std:: +// +#ifdef _STLPORT_VERSION +# if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#else +# if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#endif + +#if defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x500) || (_STLPORT_VERSION >= 0x520)) +# define BOOST_NO_STD_UNORDERED +#endif + +#if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520) +# define BOOST_HAS_TR1_UNORDERED_SET +# define BOOST_HAS_TR1_UNORDERED_MAP +#endif +// +// Without member template support enabled, their are no template +// iterate constructors, and no std::allocator: +// +#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES)) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif +// +// however we always have at least a partial allocator: +// +#define BOOST_HAS_PARTIAL_STD_ALLOCATOR + +#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) +# define BOOST_NO_STD_ALLOCATOR +#endif + +#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If STLport thinks there is no wchar_t at all, then we have to disable +// the support for the relevant specilazations of std:: templates. +// +#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT) +# ifndef BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTRING +# endif +# ifndef BOOST_NO_STD_WSTREAMBUF +# define BOOST_NO_STD_WSTREAMBUF +# endif +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#ifndef _STLP_NO_EXTENSIONS +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST +#endif + +// +// STLport does a good job of importing names into namespace std::, +// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our +// workaround does not conflict with STLports: +// +// +// Harold Howe says: +// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with +// BCB6 does cause problems. If we detect C++ Builder, then don't define +// BOOST_NO_STDC_NAMESPACE +// +#if !defined(__BORLANDC__) && !defined(__DMC__) +// +// If STLport is using it's own namespace, and the real names are in +// the global namespace, then we duplicate STLport's using declarations +// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't +// necessarily import all the names we need into namespace std:: +// +# if (defined(__STL_IMPORT_VENDOR_CSTD) \ + || defined(__STL_USE_OWN_NAMESPACE) \ + || defined(_STLP_IMPORT_VENDOR_CSTD) \ + || defined(_STLP_USE_OWN_NAMESPACE)) \ + && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD)) +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560 +// STLport doesn't import std::abs correctly: +#include +namespace std { using ::abs; } +// and strcmp/strcpy don't get imported either ('cos they are macros) +#include +#ifdef strcpy +# undef strcpy +#endif +#ifdef strcmp +# undef strcmp +#endif +#ifdef _STLP_VENDOR_CSTD +namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; } +#endif +#endif + +// +// std::use_facet may be non-standard, uses a class instead: +// +#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_STLP_USE_FACET +#endif + +// +// If STLport thinks there are no wide functions, etc. is not working; but +// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import +// into std:: ourselves). +// +#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +#endif + +// +// If STLport for some reason was configured so that it thinks that wchar_t +// is not an intrinsic type, then we have to disable the support for it as +// well (we would be missing required specializations otherwise). +// +#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT) +# undef BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +// +// Borland ships a version of STLport with C++ Builder 6 that lacks +// hashtables and the like: +// +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560) +# undef BOOST_HAS_HASH +#endif + +// +// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max +// +#if defined(__GNUC__) && (__GNUC__ < 3) +# include // for std::min and std::max +# define BOOST_USING_STD_MIN() ((void)0) +# define BOOST_USING_STD_MAX() ((void)0) +namespace boost { using std::min; using std::max; } +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) + + + + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/vacpp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/vacpp.hpp new file mode 100644 index 00000000..c8d6d5ad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/stdlib/vacpp.hpp @@ -0,0 +1,43 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +#if __IBMCPP__ <= 501 +# define BOOST_NO_STD_ALLOCATOR +#endif + +#define BOOST_HAS_MACRO_USE_FACET +#define BOOST_NO_STD_MESSAGES + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Visual Age default standard library" + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/suffix.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/suffix.hpp new file mode 100644 index 00000000..8abd7af7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/suffix.hpp @@ -0,0 +1,601 @@ +// Boost config.hpp configuration header file ------------------------------// + +// Copyright (c) 2001-2003 John Maddock +// Copyright (c) 2001 Darin Adler +// Copyright (c) 2001 Peter Dimov +// Copyright (c) 2002 Bill Kempf +// Copyright (c) 2002 Jens Maurer +// Copyright (c) 2002-2003 David Abrahams +// Copyright (c) 2003 Gennaro Prota +// Copyright (c) 2003 Eric Friedman +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config/ +// +// This file is intended to be stable, and relatively unchanging. +// It should contain boilerplate code only - no compiler specific +// code unless it is unavoidable - no changes unless unavoidable. + +#ifndef BOOST_CONFIG_SUFFIX_HPP +#define BOOST_CONFIG_SUFFIX_HPP + +// +// look for long long by looking for the appropriate macros in . +// Note that we use limits.h rather than climits for maximal portability, +// remember that since these just declare a bunch of macros, there should be +// no namespace issues from this. +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG) \ + && !defined(BOOST_MSVC) && !defined(__BORLANDC__) +# include +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif +#endif + +// GCC 3.x will clean up all of those nasty macro definitions that +// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine +// it under GCC 3.x. +#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS) +# undef BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// Assume any extensions are in namespace std:: unless stated otherwise: +// +# ifndef BOOST_STD_EXTENSION_NAMESPACE +# define BOOST_STD_EXTENSION_NAMESPACE std +# endif + +// +// If cv-qualified specializations are not allowed, then neither are cv-void ones: +// +# if defined(BOOST_NO_CV_SPECIALIZATIONS) \ + && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# endif + +// +// If there is no numeric_limits template, then it can't have any compile time +// constants either! +// +# if defined(BOOST_NO_LIMITS) \ + && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// if there is no long long then there is no specialisation +// for numeric_limits either: +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +#endif + +// +// if there is no __int64 then there is no specialisation +// for numeric_limits<__int64> either: +// +#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// if member templates are supported then so is the +// VC6 subset of member templates: +// +# if !defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif + +// +// Without partial specialization, can't test for partial specialisation bugs: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# endif + +// +// Without partial specialization, we can't have array-type partial specialisations: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif + +// +// Without partial specialization, std::iterator_traits can't work: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +# define BOOST_NO_STD_ITERATOR_TRAITS +# endif + +// +// Without partial specialization, partial +// specialization with default args won't work either: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) +# define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS +# endif + +// +// Without member template support, we can't have template constructors +// in the standard library either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# endif + +// +// Without member template support, we can't have a conforming +// std::allocator template either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_NO_STD_ALLOCATOR +# endif + +// +// without ADL support then using declarations will break ADL as well: +// +#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// Without typeid support we have no dynamic RTTI either: +// +#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#endif + +// +// If we have a standard allocator, then we have a partial one as well: +// +#if !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +// +// We can't have a working std::use_facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET) +# define BOOST_NO_STD_USE_FACET +# endif + +// +// We can't have a std::messages facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES) +# define BOOST_NO_STD_MESSAGES +# endif + +// +// We can't have a working std::wstreambuf if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF) +# define BOOST_NO_STD_WSTREAMBUF +# endif + +// +// We can't have a if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) +# define BOOST_NO_CWCTYPE +# endif + +// +// We can't have a swprintf if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +# endif + +// +// If Win32 support is turned off, then we must turn off +// threading support also, unless there is some other +// thread API enabled: +// +#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \ + && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS) +# define BOOST_DISABLE_THREADS +#endif + +// +// Turn on threading support if the compiler thinks that it's in +// multithreaded mode. We put this here because there are only a +// limited number of macros that identify this (if there's any missing +// from here then add to the appropriate compiler section): +// +#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ + || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \ + && !defined(BOOST_HAS_THREADS) +# define BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if BOOST_DISABLE_THREADS is defined: +// +#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if we don't recognise the threading API: +// +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\ + && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\ + && !defined(BOOST_HAS_MPTASKS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading detail macros off if we don't (want to) use threading +// +#ifndef BOOST_HAS_THREADS +# undef BOOST_HAS_PTHREADS +# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# undef BOOST_HAS_PTHREAD_YIELD +# undef BOOST_HAS_PTHREAD_DELAY_NP +# undef BOOST_HAS_WINTHREADS +# undef BOOST_HAS_BETHREADS +# undef BOOST_HAS_MPTASKS +#endif + +// +// If the compiler claims to be C99 conformant, then it had better +// have a : +// +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) +# define BOOST_HAS_STDINT_H +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +// +// Define BOOST_NO_SLIST and BOOST_NO_HASH if required. +// Note that this is for backwards compatibility only. +// +# if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST) +# define BOOST_NO_SLIST +# endif + +# if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH) +# define BOOST_NO_HASH +# endif + +// +// Set BOOST_SLIST_HEADER if not set already: +// +#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER) +# define BOOST_SLIST_HEADER +#endif + +// +// Set BOOST_HASH_SET_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER) +# define BOOST_HASH_SET_HEADER +#endif + +// +// Set BOOST_HASH_MAP_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER) +# define BOOST_HASH_MAP_HEADER +#endif + +// +// Set BOOST_NO_INITIALIZER_LISTS if there is no library support. +// + +#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) +# define BOOST_NO_INITIALIZER_LISTS +#endif + +// BOOST_HAS_ABI_HEADERS +// This macro gets set if we have headers that fix the ABI, +// and prevent ODR violations when linking to external libraries: +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) +# define BOOST_HAS_ABI_HEADERS +#endif + +#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) +# undef BOOST_HAS_ABI_HEADERS +#endif + +// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// +// Because std::size_t usage is so common, even in boost headers which do not +// otherwise use the C library, the workaround is included here so +// that ugly workaround code need not appear in many other boost headers. +// NOTE WELL: This is a workaround for non-conforming compilers; +// must still be #included in the usual places so that inclusion +// works as expected with standard conforming compilers. The resulting +// double inclusion of is harmless. + +# ifdef BOOST_NO_STDC_NAMESPACE +# include + namespace std { using ::ptrdiff_t; using ::size_t; } +# endif + +// Workaround for the unfortunate min/max macros defined by some platform headers + +#define BOOST_PREVENT_MACRO_SUBSTITUTION + +#ifndef BOOST_USING_STD_MIN +# define BOOST_USING_STD_MIN() using std::min +#endif + +#ifndef BOOST_USING_STD_MAX +# define BOOST_USING_STD_MAX() using std::max +#endif + +// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// + +# ifdef BOOST_NO_STD_MIN_MAX + +namespace std { + template + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __b < __a ? __b : __a; + } + template + inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __a < __b ? __b : __a; + } +} + +# endif + +// BOOST_STATIC_CONSTANT workaround --------------------------------------- // +// On compilers which don't allow in-class initialization of static integral +// constant members, we must use enums as a workaround if we want the constants +// to be available at compile-time. This macro gives us a convenient way to +// declare such constants. + +# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } +# else +# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment +# endif + +// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// +// When the standard library does not have a conforming std::use_facet there +// are various workarounds available, but they differ from library to library. +// The same problem occurs with has_facet. +// These macros provide a consistent way to access a locale's facets. +// Usage: +// replace +// std::use_facet(loc); +// with +// BOOST_USE_FACET(Type, loc); +// Note do not add a std:: prefix to the front of BOOST_USE_FACET! +// Use for BOOST_HAS_FACET is analogous. + +#if defined(BOOST_NO_STD_USE_FACET) +# ifdef BOOST_HAS_TWO_ARG_USE_FACET +# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast(0)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(0)) +# elif defined(BOOST_HAS_MACRO_USE_FACET) +# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) +# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) +# elif defined(BOOST_HAS_STLP_USE_FACET) +# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet(loc)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +# endif +#else +# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +#endif + +// BOOST_NESTED_TEMPLATE workaround ------------------------------------------// +// Member templates are supported by some compilers even though they can't use +// the A::template member syntax, as a workaround replace: +// +// typedef typename A::template rebind binder; +// +// with: +// +// typedef typename A::BOOST_NESTED_TEMPLATE rebind binder; + +#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# define BOOST_NESTED_TEMPLATE template +#else +# define BOOST_NESTED_TEMPLATE +#endif + +// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// +// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION +// is defined, in which case it evaluates to return x; Use when you have a return +// statement that can never be reached. + +#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_UNREACHABLE_RETURN(x) return x; +#else +# define BOOST_UNREACHABLE_RETURN(x) +#endif + +// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// +// +// Some compilers don't support the use of `typename' for dependent +// types in deduced contexts, e.g. +// +// template void f(T, typename T::type); +// ^^^^^^^^ +// Replace these declarations with: +// +// template void f(T, BOOST_DEDUCED_TYPENAME T::type); + +#ifndef BOOST_NO_DEDUCED_TYPENAME +# define BOOST_DEDUCED_TYPENAME typename +#else +# define BOOST_DEDUCED_TYPENAME +#endif + +#ifndef BOOST_NO_TYPENAME_WITH_CTOR +# define BOOST_CTOR_TYPENAME typename +#else +# define BOOST_CTOR_TYPENAME +#endif + +// long long workaround ------------------------------------------// +// On gcc (and maybe other compilers?) long long is alway supported +// but it's use may generate either warnings (with -ansi), or errors +// (with -pedantic -ansi) unless it's use is prefixed by __extension__ +// +#if defined(BOOST_HAS_LONG_LONG) +namespace boost{ +# ifdef __GNUC__ + __extension__ typedef long long long_long_type; + __extension__ typedef unsigned long long ulong_long_type; +# else + typedef long long long_long_type; + typedef unsigned long long ulong_long_type; +# endif +} +#endif + +// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// +// +// Some compilers have problems with function templates whose template +// parameters don't appear in the function parameter list (basically +// they just link one instantiation of the template in the final +// executable). These macros provide a uniform way to cope with the +// problem with no effects on the calling syntax. + +// Example: +// +// #include +// #include +// #include +// +// template +// void f() { std::cout << n << ' '; } +// +// template +// void g() { std::cout << typeid(T).name() << ' '; } +// +// int main() { +// f<1>(); +// f<2>(); +// +// g(); +// g(); +// } +// +// With VC++ 6.0 the output is: +// +// 2 2 double double +// +// To fix it, write +// +// template +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } +// +// template +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +// + + +#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + +# include "carve/external/boost/type.hpp" +# include "carve/external/boost/non_type.hpp" + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +#else + +// no workaround needed: expand to nothing + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + + +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + + +// ---------------------------------------------------------------------------// + +// +// Helper macro BOOST_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +#define BOOST_DO_STRINGIZE(X) #X + +// +// Helper macro BOOST_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. +// +#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y ) +#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y) +#define BOOST_DO_JOIN2( X, Y ) X##Y + +// +// Set some default values for compiler/library/platform names. +// These are for debugging config setup only: +// +# ifndef BOOST_COMPILER +# define BOOST_COMPILER "Unknown ISO C++ Compiler" +# endif +# ifndef BOOST_STDLIB +# define BOOST_STDLIB "Unknown ISO standard library" +# endif +# ifndef BOOST_PLATFORM +# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) +# define BOOST_PLATFORM "Generic Unix" +# else +# define BOOST_PLATFORM "Unknown" +# endif +# endif + +#endif + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/config/user.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/config/user.hpp new file mode 100644 index 00000000..5a4a9d47 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/config/user.hpp @@ -0,0 +1,124 @@ +// boost/config/user.hpp ---------------------------------------------------// + +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Do not check in modified versions of this file, +// This file may be customized by the end user, but not by boost. + +// +// Use this file to define a site and compiler specific +// configuration policy: +// + +// define this to locate a compiler config file: +// #define BOOST_COMPILER_CONFIG + +// define this to locate a stdlib config file: +// #define BOOST_STDLIB_CONFIG + +// define this to locate a platform config file: +// #define BOOST_PLATFORM_CONFIG + +// define this to disable compiler config, +// use if your compiler config has nothing to set: +// #define BOOST_NO_COMPILER_CONFIG + +// define this to disable stdlib config, +// use if your stdlib config has nothing to set: +// #define BOOST_NO_STDLIB_CONFIG + +// define this to disable platform config, +// use if your platform config has nothing to set: +// #define BOOST_NO_PLATFORM_CONFIG + +// define this to disable all config options, +// excluding the user config. Use if your +// setup is fully ISO compliant, and has no +// useful extensions, or for autoconf generated +// setups: +// #define BOOST_NO_CONFIG + +// define this to make the config "optimistic" +// about unknown compiler versions. Normally +// unknown compiler versions are assumed to have +// all the defects of the last known version, however +// setting this flag, causes the config to assume +// that unknown compiler versions are fully conformant +// with the standard: +// #define BOOST_STRICT_CONFIG + +// define this to cause the config to halt compilation +// with an #error if it encounters anything unknown -- +// either an unknown compiler version or an unknown +// compiler/platform/library: +// #define BOOST_ASSERT_CONFIG + + +// define if you want to disable threading support, even +// when available: +// #define BOOST_DISABLE_THREADS + +// define when you want to disable Win32 specific features +// even when available: +// #define BOOST_DISABLE_WIN32 + +// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any +// prefix/suffix headers that normally control things like struct +// packing and alignment. +// #define BOOST_DISABLE_ABI_HEADERS + +// BOOST_ABI_PREFIX: A prefix header to include in place of whatever +// boost.config would normally select, any replacement should set up +// struct packing and alignment options as required. +// #define BOOST_ABI_PREFIX my-header-name + +// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever +// boost.config would normally select, any replacement should undo +// the effects of the prefix header. +// #define BOOST_ABI_SUFFIX my-header-name + +// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, +// to be linked as dll's rather than static libraries on Microsoft Windows +// (this macro is used to turn on __declspec(dllimport) modifiers, so that +// the compiler knows which symbols to look for in a dll rather than in a +// static library). Note that there may be some libraries that can only +// be statically linked (Boost.Test for example) and others which may only +// be dynamically linked (Boost.Threads for example), in these cases this +// macro has no effect. +// #define BOOST_ALL_DYN_LINK + +// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll +// rather than a static library on Microsoft Windows: replace the WHATEVER +// part of the macro name with the name of the library that you want to +// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or +// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) +// modifiers, so that the compiler knows which symbols to look for in a dll +// rather than in a static library). +// Note that there may be some libraries that can only be statically linked +// (Boost.Test for example) and others which may only be dynamically linked +// (Boost.Threads for example), in these cases this macro is unsupported. +// #define BOOST_WHATEVER_DYN_LINK + +// BOOST_ALL_NO_LIB: Tells the config system not to automatically select +// which libraries to link against. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, +// simply by the act of including one of that library's headers. +// This macro turns that feature off. +// #define BOOST_ALL_NO_LIB + +// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically +// select which library to link against for library "whatever", +// replace WHATEVER in the macro name with the name of the library; +// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, simply +// by the act of including one of that library's headers. This macro turns +// that feature off. +// #define BOOST_WHATEVER_NO_LIB + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/cstdint.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/cstdint.hpp new file mode 100644 index 00000000..ec9e0981 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/cstdint.hpp @@ -0,0 +1,446 @@ +// boost cstdint.hpp header file ------------------------------------------// + +// (C) Copyright Beman Dawes 1999. +// (C) Copyright Jens Mauer 2001 +// (C) Copyright John Maddock 2001 +// Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/integer for documentation. + +// Revision History +// 31 Oct 01 use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.) +// 16 Apr 01 check LONGLONG_MAX when looking for "long long" (Jens Maurer) +// 23 Jan 01 prefer "long" over "int" for int32_t and intmax_t (Jens Maurer) +// 12 Nov 00 Merged (Jens Maurer) +// 23 Sep 00 Added INTXX_C macro support (John Maddock). +// 22 Sep 00 Better 64-bit support (John Maddock) +// 29 Jun 00 Reimplement to avoid including stdint.h within namespace boost +// 8 Aug 99 Initial version (Beman Dawes) + + +#ifndef BOOST_CSTDINT_HPP +#define BOOST_CSTDINT_HPP + +#include + + +#ifdef BOOST_HAS_STDINT_H + +// The following #include is an implementation artifact; not part of interface. +# ifdef __hpux +// HP-UX has a vaguely nice in a non-standard location +# include +# ifdef __STDC_32_MODE__ + // this is triggered with GCC, because it defines __cplusplus < 199707L +# define BOOST_NO_INT64_T +# endif +# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX) +# include +# else +# include + +// There is a bug in Cygwin two _C macros +# if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__) +# undef INTMAX_C +# undef UINTMAX_C +# define INTMAX_C(c) c##LL +# define UINTMAX_C(c) c##ULL +# endif + +# endif + +#ifdef __QNX__ + +// QNX (Dinkumware stdlib) defines these as non-standard names. +// Reflect to the standard names. + +typedef ::intleast8_t int_least8_t; +typedef ::intfast8_t int_fast8_t; +typedef ::uintleast8_t uint_least8_t; +typedef ::uintfast8_t uint_fast8_t; + +typedef ::intleast16_t int_least16_t; +typedef ::intfast16_t int_fast16_t; +typedef ::uintleast16_t uint_least16_t; +typedef ::uintfast16_t uint_fast16_t; + +typedef ::intleast32_t int_least32_t; +typedef ::intfast32_t int_fast32_t; +typedef ::uintleast32_t uint_least32_t; +typedef ::uintfast32_t uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + +typedef ::intleast64_t int_least64_t; +typedef ::intfast64_t int_fast64_t; +typedef ::uintleast64_t uint_least64_t; +typedef ::uintfast64_t uint_fast64_t; + +# endif + +#endif + +namespace boost +{ + + using ::int8_t; + using ::int_least8_t; + using ::int_fast8_t; + using ::uint8_t; + using ::uint_least8_t; + using ::uint_fast8_t; + + using ::int16_t; + using ::int_least16_t; + using ::int_fast16_t; + using ::uint16_t; + using ::uint_least16_t; + using ::uint_fast16_t; + + using ::int32_t; + using ::int_least32_t; + using ::int_fast32_t; + using ::uint32_t; + using ::uint_least32_t; + using ::uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + + using ::int64_t; + using ::int_least64_t; + using ::int_fast64_t; + using ::uint64_t; + using ::uint_least64_t; + using ::uint_fast64_t; + +# endif + + using ::intmax_t; + using ::uintmax_t; + +} // namespace boost + +#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) +// FreeBSD and Tru64 have an that contains much of what we need. +# include + +namespace boost { + + using ::int8_t; + typedef int8_t int_least8_t; + typedef int8_t int_fast8_t; + using ::uint8_t; + typedef uint8_t uint_least8_t; + typedef uint8_t uint_fast8_t; + + using ::int16_t; + typedef int16_t int_least16_t; + typedef int16_t int_fast16_t; + using ::uint16_t; + typedef uint16_t uint_least16_t; + typedef uint16_t uint_fast16_t; + + using ::int32_t; + typedef int32_t int_least32_t; + typedef int32_t int_fast32_t; + using ::uint32_t; + typedef uint32_t uint_least32_t; + typedef uint32_t uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + + using ::int64_t; + typedef int64_t int_least64_t; + typedef int64_t int_fast64_t; + using ::uint64_t; + typedef uint64_t uint_least64_t; + typedef uint64_t uint_fast64_t; + + typedef int64_t intmax_t; + typedef uint64_t uintmax_t; + +# else + + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; + +# endif + +} // namespace boost + +#else // BOOST_HAS_STDINT_H + +# include // implementation artifact; not part of interface +# include // needed for limits macros + + +namespace boost +{ + +// These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit +// platforms. For other systems, they will have to be hand tailored. +// +// Because the fast types are assumed to be the same as the undecorated types, +// it may be possible to hand tailor a more efficient implementation. Such +// an optimization may be illusionary; on the Intel x86-family 386 on, for +// example, byte arithmetic and load/stores are as fast as "int" sized ones. + +// 8-bit types ------------------------------------------------------------// + +# if UCHAR_MAX == 0xff + typedef signed char int8_t; + typedef signed char int_least8_t; + typedef signed char int_fast8_t; + typedef unsigned char uint8_t; + typedef unsigned char uint_least8_t; + typedef unsigned char uint_fast8_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 16-bit types -----------------------------------------------------------// + +# if USHRT_MAX == 0xffff +# if defined(__crayx1) + // The Cray X1 has a 16-bit short, however it is not recommend + // for use in performance critical code. + typedef short int16_t; + typedef short int_least16_t; + typedef int int_fast16_t; + typedef unsigned short uint16_t; + typedef unsigned short uint_least16_t; + typedef unsigned int uint_fast16_t; +# else + typedef short int16_t; + typedef short int_least16_t; + typedef short int_fast16_t; + typedef unsigned short uint16_t; + typedef unsigned short uint_least16_t; + typedef unsigned short uint_fast16_t; +# endif +# elif (USHRT_MAX == 0xffffffff) && defined(CRAY) + // no 16-bit types on Cray: + typedef short int_least16_t; + typedef short int_fast16_t; + typedef unsigned short uint_least16_t; + typedef unsigned short uint_fast16_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 32-bit types -----------------------------------------------------------// + +# if ULONG_MAX == 0xffffffff + typedef long int32_t; + typedef long int_least32_t; + typedef long int_fast32_t; + typedef unsigned long uint32_t; + typedef unsigned long uint_least32_t; + typedef unsigned long uint_fast32_t; +# elif UINT_MAX == 0xffffffff + typedef int int32_t; + typedef int int_least32_t; + typedef int int_fast32_t; + typedef unsigned int uint32_t; + typedef unsigned int uint_least32_t; + typedef unsigned int uint_fast32_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 64-bit types + intmax_t and uintmax_t ----------------------------------// + +# if defined(BOOST_HAS_LONG_LONG) && \ + !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \ + (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \ + (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# if defined(__hpux) + // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions +# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) + // 2**64 - 1 +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + + typedef ::boost::long_long_type intmax_t; + typedef ::boost::ulong_long_type uintmax_t; + typedef ::boost::long_long_type int64_t; + typedef ::boost::long_long_type int_least64_t; + typedef ::boost::long_long_type int_fast64_t; + typedef ::boost::ulong_long_type uint64_t; + typedef ::boost::ulong_long_type uint_least64_t; + typedef ::boost::ulong_long_type uint_fast64_t; + +# elif ULONG_MAX != 0xffffffff + +# if ULONG_MAX == 18446744073709551615 // 2**64 - 1 + typedef long intmax_t; + typedef unsigned long uintmax_t; + typedef long int64_t; + typedef long int_least64_t; + typedef long int_fast64_t; + typedef unsigned long uint64_t; + typedef unsigned long uint_least64_t; + typedef unsigned long uint_fast64_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG) + __extension__ typedef long long intmax_t; + __extension__ typedef unsigned long long uintmax_t; + __extension__ typedef long long int64_t; + __extension__ typedef long long int_least64_t; + __extension__ typedef long long int_fast64_t; + __extension__ typedef unsigned long long uint64_t; + __extension__ typedef unsigned long long uint_least64_t; + __extension__ typedef unsigned long long uint_fast64_t; +# elif defined(BOOST_HAS_MS_INT64) + // + // we have Borland/Intel/Microsoft __int64: + // + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; + typedef __int64 int64_t; + typedef __int64 int_least64_t; + typedef __int64 int_fast64_t; + typedef unsigned __int64 uint64_t; + typedef unsigned __int64 uint_least64_t; + typedef unsigned __int64 uint_fast64_t; +# else // assume no 64-bit integers +# define BOOST_NO_INT64_T + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; +# endif + +} // namespace boost + + +#endif // BOOST_HAS_STDINT_H + +#endif // BOOST_CSTDINT_HPP + + +/**************************************************** + +Macro definition section: + +Define various INTXX_C macros only if +__STDC_CONSTANT_MACROS is defined. + +Undefine the macros if __STDC_CONSTANT_MACROS is +not defined and the macros are (cf ). + +Added 23rd September 2000 (John Maddock). +Modified 11th September 2001 to be excluded when +BOOST_HAS_STDINT_H is defined (John Maddock). + +******************************************************/ + +#if defined(__STDC_CONSTANT_MACROS) && !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(BOOST_HAS_STDINT_H) +# define BOOST__STDC_CONSTANT_MACROS_DEFINED +# if defined(BOOST_HAS_MS_INT64) +// +// Borland/Intel/Microsoft compilers have width specific suffixes: +// +# define INT8_C(value) value##i8 +# define INT16_C(value) value##i16 +# define INT32_C(value) value##i32 +# define INT64_C(value) value##i64 +# ifdef __BORLANDC__ + // Borland bug: appending ui8 makes the type a signed char +# define UINT8_C(value) static_cast(value##u) +# else +# define UINT8_C(value) value##ui8 +# endif +# define UINT16_C(value) value##ui16 +# define UINT32_C(value) value##ui32 +# define UINT64_C(value) value##ui64 +# define INTMAX_C(value) value##i64 +# define UINTMAX_C(value) value##ui64 + +# else +// do it the old fashioned way: + +// 8-bit types ------------------------------------------------------------// + +# if UCHAR_MAX == 0xff +# define INT8_C(value) static_cast(value) +# define UINT8_C(value) static_cast(value##u) +# endif + +// 16-bit types -----------------------------------------------------------// + +# if USHRT_MAX == 0xffff +# define INT16_C(value) static_cast(value) +# define UINT16_C(value) static_cast(value##u) +# endif + +// 32-bit types -----------------------------------------------------------// + +# if UINT_MAX == 0xffffffff +# define INT32_C(value) value +# define UINT32_C(value) value##u +# elif ULONG_MAX == 0xffffffff +# define INT32_C(value) value##L +# define UINT32_C(value) value##uL +# endif + +// 64-bit types + intmax_t and uintmax_t ----------------------------------// + +# if defined(BOOST_HAS_LONG_LONG) && \ + (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) + +# if defined(__hpux) + // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions +# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615U) || \ + (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615U) || \ + (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615U) + +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# define INT64_C(value) value##LL +# define UINT64_C(value) value##uLL +# elif ULONG_MAX != 0xffffffff + +# if ULONG_MAX == 18446744073709551615 // 2**64 - 1 +# define INT64_C(value) value##L +# define UINT64_C(value) value##uL +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# endif + +# ifdef BOOST_NO_INT64_T +# define INTMAX_C(value) INT32_C(value) +# define UINTMAX_C(value) UINT32_C(value) +# else +# define INTMAX_C(value) INT64_C(value) +# define UINTMAX_C(value) UINT64_C(value) +# endif + +# endif // Borland/Microsoft specific width suffixes + + +#elif defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(__STDC_CONSTANT_MACROS) && !defined(BOOST_HAS_STDINT_H) +// +// undef all the macros: +// +# undef INT8_C +# undef INT16_C +# undef INT32_C +# undef INT64_C +# undef UINT8_C +# undef UINT16_C +# undef UINT32_C +# undef UINT64_C +# undef INTMAX_C +# undef UINTMAX_C + +#endif // __STDC_CONSTANT_MACROS_DEFINED etc. + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/current_function.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/current_function.hpp new file mode 100644 index 00000000..aa5756e0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/current_function.hpp @@ -0,0 +1,67 @@ +#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED +#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/current_function.hpp - BOOST_CURRENT_FUNCTION +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// http://www.boost.org/libs/utility/current_function.html +// + +namespace boost +{ + +namespace detail +{ + +inline void current_function_helper() +{ + +#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) + +# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ + +#elif defined(__DMC__) && (__DMC__ >= 0x810) + +# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ + +#elif defined(__FUNCSIG__) + +# define BOOST_CURRENT_FUNCTION __FUNCSIG__ + +#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500)) + +# define BOOST_CURRENT_FUNCTION __FUNCTION__ + +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) + +# define BOOST_CURRENT_FUNCTION __FUNC__ + +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) + +# define BOOST_CURRENT_FUNCTION __func__ + +#else + +# define BOOST_CURRENT_FUNCTION "(unknown)" + +#endif + +} + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/allocator_utilities.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/allocator_utilities.hpp new file mode 100644 index 00000000..8e400fd2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/allocator_utilities.hpp @@ -0,0 +1,212 @@ +/* Copyright 2003-2009 Joaquin M Lopez Munoz. + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See Boost website at http://www.boost.org/ + */ + +#ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP +#define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP + +#include /* keep it first to prevent nasty warns in MSVC */ +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ + +namespace detail{ + +/* Allocator adaption layer. Some stdlibs provide allocators without rebind + * and template ctors. These facilities are simulated with the external + * template class rebind_to and the aid of partial_std_allocator_wrapper. + */ + +namespace allocator{ + +/* partial_std_allocator_wrapper inherits the functionality of a std + * allocator while providing a templatized ctor and other bits missing + * in some stdlib implementation or another. + */ + +template +class partial_std_allocator_wrapper:public std::allocator +{ +public: + /* Oddly enough, STLport does not define std::allocator::value_type + * when configured to work without partial template specialization. + * No harm in supplying the definition here unconditionally. + */ + + typedef Type value_type; + + partial_std_allocator_wrapper(){}; + + template + partial_std_allocator_wrapper(const partial_std_allocator_wrapper&){} + + partial_std_allocator_wrapper(const std::allocator& x): + std::allocator(x) + { + }; + +#if defined(BOOST_DINKUMWARE_STDLIB) + /* Dinkumware guys didn't provide a means to call allocate() without + * supplying a hint, in disagreement with the standard. + */ + + Type* allocate(std::size_t n,const void* hint=0) + { + std::allocator& a=*this; + return a.allocate(n,hint); + } +#endif + +}; + +/* Detects whether a given allocator belongs to a defective stdlib not + * having the required member templates. + * Note that it does not suffice to check the Boost.Config stdlib + * macros, as the user might have passed a custom, compliant allocator. + * The checks also considers partial_std_allocator_wrapper to be + * a standard defective allocator. + */ + +#if defined(BOOST_NO_STD_ALLOCATOR)&&\ + (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB)) + +template +struct is_partial_std_allocator +{ + BOOST_STATIC_CONSTANT(bool, + value= + (is_same< + std::allocator, + Allocator + >::value)|| + (is_same< + partial_std_allocator_wrapper< + BOOST_DEDUCED_TYPENAME Allocator::value_type>, + Allocator + >::value)); +}; + +#else + +template +struct is_partial_std_allocator +{ + BOOST_STATIC_CONSTANT(bool,value=false); +}; + +#endif + +/* rebind operations for defective std allocators */ + +template +struct partial_std_allocator_rebind_to +{ + typedef partial_std_allocator_wrapper type; +}; + +/* rebind operation in all other cases */ + +#if BOOST_WORKAROUND(BOOST_MSVC,<1300) +/* Workaround for a problem in MSVC with dependent template typedefs + * when doing rebinding of allocators. + * Modeled after (thanks, Aleksey!) + */ + +template +struct rebinder +{ + template struct fake_allocator:Allocator{}; + template<> struct fake_allocator + { + template struct rebind{}; + }; + + template + struct result: + fake_allocator::value>:: + template rebind + { + }; +}; +#else +template +struct rebinder +{ + template + struct result + { + typedef typename Allocator::BOOST_NESTED_TEMPLATE + rebind::other other; + }; +}; +#endif + +template +struct compliant_allocator_rebind_to +{ + typedef typename rebinder:: + BOOST_NESTED_TEMPLATE result::other type; +}; + +/* rebind front-end */ + +template +struct rebind_to: + mpl::eval_if_c< + is_partial_std_allocator::value, + partial_std_allocator_rebind_to, + compliant_allocator_rebind_to + > +{ +}; + +/* allocator-independent versions of construct and destroy */ + +template +void construct(void* p,const Type& t) +{ + new (p) Type(t); +} + +#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) +/* MSVC++ issues spurious warnings about unreferencend formal parameters + * in destroy when Type is a class with trivial dtor. + */ + +#pragma warning(push) +#pragma warning(disable:4100) +#endif + +template +void destroy(const Type* p) +{ + +#if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590)) + const_cast(p)->~Type(); +#else + p->~Type(); +#endif + +} + +#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) +#pragma warning(pop) +#endif + +} /* namespace boost::detail::allocator */ + +} /* namespace boost::detail */ + +} /* namespace boost */ + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/container_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/container_fwd.hpp new file mode 100644 index 00000000..35f814eb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/container_fwd.hpp @@ -0,0 +1,99 @@ + +// Copyright 2005-2008 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include + +#if ((defined(__GLIBCPP__) || defined(__GLIBCXX__)) && defined(_GLIBCXX_DEBUG)) \ + || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \ + || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + +#include +#include +#include +#include +#include +#include +#include +#include + +#else + +#include + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \ + defined(__STL_CONFIG_H) + +#define BOOST_CONTAINER_FWD_BAD_BITSET + +#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +#define BOOST_CONTAINER_FWD_BAD_DEQUE +#endif + +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) +#include +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_BITSET) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4099) // struct/class mismatch in fwd declarations +#endif + +namespace std +{ + template class allocator; + template class basic_string; + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) + template struct string_char_traits; +#else + template struct char_traits; +#endif + + template class complex; +} + +// gcc 3.4 and greater +namespace std +{ +#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) + template class deque; +#endif + + template class list; + template class vector; + template class map; + template + class multimap; + template class set; + template class multiset; + +#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET) + template class bitset; +#endif + template struct pair; +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/endian.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/endian.hpp new file mode 100644 index 00000000..803d7e22 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/endian.hpp @@ -0,0 +1,73 @@ +// Copyright 2005 Caleb Epstein +// Copyright 2006 John Maddock +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* + * Copyright (c) 1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/* + * Copyright notice reproduced from , from + * which this code was originally taken. + * + * Modified by Caleb Epstein to use with GNU libc and to + * defined the BOOST_ENDIAN macro. + */ + +#ifndef BOOST_DETAIL_ENDIAN_HPP +#define BOOST_DETAIL_ENDIAN_HPP + +// GNU libc offers the helpful header which defines +// __BYTE_ORDER + +#if defined (__GLIBC__) +# include +# if (__BYTE_ORDER == __LITTLE_ENDIAN) +# define BOOST_LITTLE_ENDIAN +# elif (__BYTE_ORDER == __BIG_ENDIAN) +# define BOOST_BIG_ENDIAN +# elif (__BYTE_ORDER == __PDP_ENDIAN) +# define BOOST_PDP_ENDIAN +# else +# error Unknown machine endianness detected. +# endif +# define BOOST_BYTE_ORDER __BYTE_ORDER +#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#elif defined(__sparc) || defined(__sparc__) \ + || defined(_POWER) || defined(__powerpc__) \ + || defined(__ppc__) || defined(__hpux) \ + || defined(_MIPSEB) || defined(_POWER) \ + || defined(__s390__) +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#elif defined(__i386__) || defined(__alpha__) \ + || defined(__ia64) || defined(__ia64__) \ + || defined(_M_IX86) || defined(_M_IA64) \ + || defined(_M_ALPHA) || defined(__amd64) \ + || defined(__amd64__) || defined(_M_AMD64) \ + || defined(__x86_64) || defined(__x86_64__) \ + || defined(_M_X64) || defined(__bfin__) + +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#else +# error The file boost/detail/endian.hpp needs to be set up for your CPU type. +#endif + + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/iterator.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/iterator.hpp new file mode 100644 index 00000000..c7531147 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/iterator.hpp @@ -0,0 +1,494 @@ +// (C) Copyright David Abrahams 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Boost versions of +// +// std::iterator_traits<>::iterator_category +// std::iterator_traits<>::difference_type +// std::distance() +// +// ...for all compilers and iterators +// +// Additionally, if X is a pointer +// std::iterator_traits::pointer + +// Otherwise, if partial specialization is supported or X is not a pointer +// std::iterator_traits::value_type +// std::iterator_traits::pointer +// std::iterator_traits::reference +// +// See http://www.boost.org for most recent version including documentation. + +// Revision History +// 04 Mar 2001 - More attempted fixes for Intel C++ (David Abrahams) +// 03 Mar 2001 - Put all implementation into namespace +// boost::detail::iterator_traits_. Some progress made on fixes +// for Intel compiler. (David Abrahams) +// 02 Mar 2001 - Changed BOOST_MSVC to BOOST_MSVC_STD_ITERATOR in a few +// places. (Jeremy Siek) +// 19 Feb 2001 - Improved workarounds for stock MSVC6; use yes_type and +// no_type from type_traits.hpp; stopped trying to remove_cv +// before detecting is_pointer, in honor of the new type_traits +// semantics. (David Abrahams) +// 13 Feb 2001 - Make it work with nearly all standard-conforming iterators +// under raw VC6. The one category remaining which will fail is +// that of iterators derived from std::iterator but not +// boost::iterator and which redefine difference_type. +// 11 Feb 2001 - Clean away code which can never be used (David Abrahams) +// 09 Feb 2001 - Always have a definition for each traits member, even if it +// can't be properly deduced. These will be incomplete types in +// some cases (undefined), but it helps suppress MSVC errors +// elsewhere (David Abrahams) +// 07 Feb 2001 - Support for more of the traits members where possible, making +// this useful as a replacement for std::iterator_traits when +// used as a default template parameter. +// 06 Feb 2001 - Removed useless #includes of standard library headers +// (David Abrahams) + +#ifndef ITERATOR_DWA122600_HPP_ +# define ITERATOR_DWA122600_HPP_ + +# include +# include + +// STLPort 4.0 and betas have a bug when debugging is enabled and there is no +// partial specialization: instead of an iterator_category typedef, the standard +// container iterators have _Iterator_category. +// +// Also, whether debugging is enabled or not, there is a broken specialization +// of std::iterator which has no +// typedefs but iterator_category. +# if defined(__SGI_STL_PORT) + +# if (__SGI_STL_PORT <= 0x410) && !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && defined(__STL_DEBUG) +# define BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +# endif + +# define BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + +# endif // STLPort <= 4.1b4 && no partial specialization + +# if !defined(BOOST_NO_STD_ITERATOR_TRAITS) \ + && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_MSVC_STD_ITERATOR) + +namespace boost { namespace detail { + +// Define a new template so it can be specialized +template +struct iterator_traits + : std::iterator_traits +{}; +using std::distance; + +}} // namespace boost::detail + +# else + +# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_MSVC_STD_ITERATOR) + +// This is the case where everything conforms except BOOST_NO_STD_ITERATOR_TRAITS + +namespace boost { namespace detail { + +// Rogue Wave Standard Library fools itself into thinking partial +// specialization is missing on some platforms (e.g. Sun), so fails to +// supply iterator_traits! +template +struct iterator_traits +{ + typedef typename Iterator::value_type value_type; + typedef typename Iterator::reference reference; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::difference_type difference_type; + typedef typename Iterator::iterator_category iterator_category; +}; + +template +struct iterator_traits +{ + typedef T value_type; + typedef T& reference; + typedef T* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::random_access_iterator_tag iterator_category; +}; + +template +struct iterator_traits +{ + typedef T value_type; + typedef T const& reference; + typedef T const* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::random_access_iterator_tag iterator_category; +}; + +}} // namespace boost::detail + +# else + +# include +# include +# include + +# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +# endif +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +# include +# endif + +# include +# include +# include + +// should be the last #include +# include "carve/external/boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { namespace detail { + +BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type) +BOOST_MPL_HAS_XXX_TRAIT_DEF(reference) +BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer) +BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type) +BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category) + +// is_mutable_iterator -- +// +// A metafunction returning true iff T is a mutable iterator type +// with a nested value_type. Will only work portably with iterators +// whose operator* returns a reference, but that seems to be OK for +// the iterators supplied by Dinkumware. Some input iterators may +// compile-time if they arrive here, and if the compiler is strict +// about not taking the address of an rvalue. + +// This one detects ordinary mutable iterators - the result of +// operator* is convertible to the value_type. +template +type_traits::yes_type is_mutable_iterator_helper(T const*, BOOST_DEDUCED_TYPENAME T::value_type*); + +// Since you can't take the address of an rvalue, the guts of +// is_mutable_iterator_impl will fail if we use &*t directly. This +// makes sure we can still work with non-lvalue iterators. +template T* mutable_iterator_lvalue_helper(T& x); +int mutable_iterator_lvalue_helper(...); + + +// This one detects output iterators such as ostream_iterator which +// return references to themselves. +template +type_traits::yes_type is_mutable_iterator_helper(T const*, T const*); + +type_traits::no_type is_mutable_iterator_helper(...); + +template +struct is_mutable_iterator_impl +{ + static T t; + + BOOST_STATIC_CONSTANT( + bool, value = sizeof( + detail::is_mutable_iterator_helper( + (T*)0 + , mutable_iterator_lvalue_helper(*t) // like &*t + )) + == sizeof(type_traits::yes_type) + ); +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_mutable_iterator,T,::boost::detail::is_mutable_iterator_impl::value) + + +// is_full_iterator_traits -- +// +// A metafunction returning true iff T has all the requisite nested +// types to satisfy the requirements for a fully-conforming +// iterator_traits implementation. +template +struct is_full_iterator_traits_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has_iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl::value) + + +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +BOOST_MPL_HAS_XXX_TRAIT_DEF(_Iterator_category) + +// is_stlport_40_debug_iterator -- +// +// A metafunction returning true iff T has all the requisite nested +// types to satisfy the requirements of an STLPort 4.0 debug iterator +// iterator_traits implementation. +template +struct is_stlport_40_debug_iterator_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has__Iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl::value) + +template +struct stlport_40_debug_iterator_traits +{ + typedef typename T::value_type value_type; + typedef typename T::reference reference; + typedef typename T::pointer pointer; + typedef typename T::difference_type difference_type; + typedef typename T::_Iterator_category iterator_category; +}; +# endif // BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + +template struct pointer_iterator_traits; + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct pointer_iterator_traits +{ + typedef typename remove_const::type value_type; + typedef T* pointer; + typedef T& reference; + typedef std::random_access_iterator_tag iterator_category; + typedef std::ptrdiff_t difference_type; +}; +# else + +// In case of no template partial specialization, and if T is a +// pointer, iterator_traits::value_type can still be computed. For +// some basic types, remove_pointer is manually defined in +// type_traits/broken_compiler_spec.hpp. For others, do it yourself. + +template class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee; + +template +struct pointer_value_type + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

+ , typename remove_const< + typename remove_pointer

::type + >::type + > +{ +}; + + +template +struct pointer_reference + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

+ , typename remove_pointer

::type& + > +{ +}; + +template +struct pointer_iterator_traits +{ + typedef T pointer; + typedef std::random_access_iterator_tag iterator_category; + typedef std::ptrdiff_t difference_type; + + typedef typename pointer_value_type::type value_type; + typedef typename pointer_reference::type reference; +}; + +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// We'll sort iterator types into one of these classifications, from which we +// can determine the difference_type, pointer, reference, and value_type +template +struct standard_iterator_traits +{ + typedef typename Iterator::difference_type difference_type; + typedef typename Iterator::value_type value_type; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::reference reference; + typedef typename Iterator::iterator_category iterator_category; +}; + +template +struct msvc_stdlib_mutable_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef typename std::iterator_traits::value_type* pointer; + typedef typename std::iterator_traits::value_type& reference; +}; + +template +struct msvc_stdlib_const_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef const typename std::iterator_traits::value_type* pointer; + typedef const typename std::iterator_traits::value_type& reference; +}; + +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +template +struct is_bad_output_iterator + : is_base_and_derived< + std::iterator + , Iterator> +{ +}; + +struct bad_output_iterator_traits +{ + typedef void value_type; + typedef void difference_type; + typedef std::output_iterator_tag iterator_category; + typedef void pointer; + typedef void reference; +}; +# endif + +// If we're looking at an MSVC6 (old Dinkumware) ``standard'' +// iterator, this will generate an appropriate traits class. +template +struct msvc_stdlib_iterator_traits + : mpl::if_< + is_mutable_iterator + , msvc_stdlib_mutable_traits + , msvc_stdlib_const_traits + >::type +{}; + +template +struct non_pointer_iterator_traits + : mpl::if_< + // if the iterator contains all the right nested types... + is_full_iterator_traits + // Use a standard iterator_traits implementation + , standard_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + // Check for STLPort 4.0 broken _Iterator_category type + , mpl::if_< + is_stlport_40_debug_iterator + , stlport_40_debug_iterator_traits +# endif + // Otherwise, assume it's a Dinkum iterator + , msvc_stdlib_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + >::type +# endif + >::type +{ +}; + +template +struct iterator_traits_aux + : mpl::if_< + is_pointer + , pointer_iterator_traits + , non_pointer_iterator_traits + >::type +{ +}; + +template +struct iterator_traits +{ + // Explicit forwarding from base class needed to keep MSVC6 happy + // under some circumstances. + private: +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + typedef + typename mpl::if_< + is_bad_output_iterator + , bad_output_iterator_traits + , iterator_traits_aux + >::type base; +# else + typedef iterator_traits_aux base; +# endif + public: + typedef typename base::value_type value_type; + typedef typename base::pointer pointer; + typedef typename base::reference reference; + typedef typename base::difference_type difference_type; + typedef typename base::iterator_category iterator_category; +}; + +// This specialization cuts off ETI (Early Template Instantiation) for MSVC. +template <> struct iterator_traits +{ + typedef int value_type; + typedef int pointer; + typedef int reference; + typedef int difference_type; + typedef int iterator_category; +}; + +}} // namespace boost::detail + +# endif // workarounds + +namespace boost { namespace detail { + +namespace iterator_traits_ +{ + template + struct distance_select + { + static Difference execute(Iterator i1, const Iterator i2, ...) + { + Difference result = 0; + while (i1 != i2) + { + ++i1; + ++result; + } + return result; + } + + static Difference execute(Iterator i1, const Iterator i2, std::random_access_iterator_tag*) + { + return i2 - i1; + } + }; +} // namespace boost::detail::iterator_traits_ + +template +inline typename iterator_traits::difference_type +distance(Iterator first, Iterator last) +{ + typedef typename iterator_traits::difference_type diff_t; + typedef typename ::boost::detail::iterator_traits::iterator_category iterator_category; + + return iterator_traits_::distance_select::execute( + first, last, (iterator_category*)0); +} + +}} + +# endif + + +# undef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +# undef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + +#endif // ITERATOR_DWA122600_HPP_ diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/limits.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/limits.hpp new file mode 100644 index 00000000..02823344 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/limits.hpp @@ -0,0 +1,449 @@ +// Copyright 2001 John Maddock +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* + * Copyright (c) 1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/* NOTE: This is not portable code. Parts of numeric_limits<> are + * inherently machine-dependent, and this file is written for the MIPS + * architecture and the SGI MIPSpro C++ compiler. Parts of it (in + * particular, some of the characteristics of floating-point types) + * are almost certainly incorrect for any other platform. + */ + +/* The above comment is almost certainly out of date. This file works + * on systems other than SGI MIPSpro C++ now. + */ + +/* + * Revision history: + * 21 Sep 2001: + * Only include if BOOST_NO_CWCHAR is defined. (Darin Adler) + * 10 Aug 2001: + * Added MIPS (big endian) to the big endian family. (Jens Maurer) + * 13 Apr 2001: + * Added powerpc to the big endian family. (Jeremy Siek) + * 5 Apr 2001: + * Added sparc (big endian) processor support (John Maddock). + * Initial sub: + * Modified by Jens Maurer for gcc 2.95 on x86. + */ + +#ifndef BOOST_SGI_CPP_LIMITS +#define BOOST_SGI_CPP_LIMITS + +#include +#include +#include +#include + +#ifndef BOOST_NO_CWCHAR +#include // for WCHAR_MIN and WCHAR_MAX +#endif + +namespace std { + +enum float_round_style { + round_indeterminate = -1, + round_toward_zero = 0, + round_to_nearest = 1, + round_toward_infinity = 2, + round_toward_neg_infinity = 3 +}; + +enum float_denorm_style { + denorm_indeterminate = -1, + denorm_absent = 0, + denorm_present = 1 +}; + +// The C++ standard (section 18.2.1) requires that some of the members of +// numeric_limits be static const data members that are given constant- +// initializers within the class declaration. On compilers where the +// BOOST_NO_INCLASS_MEMBER_INITIALIZATION macro is defined, it is impossible to write +// a standard-conforming numeric_limits class. +// +// There are two possible workarounds: either initialize the data +// members outside the class, or change them from data members to +// enums. Neither workaround is satisfactory: the former makes it +// impossible to use the data members in constant-expressions, and the +// latter means they have the wrong type and that it is impossible to +// take their addresses. We choose the former workaround. + +#ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \ + enum { __mem_name = __mem_value } +#else /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */ +# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \ + static const __mem_type __mem_name = __mem_value +#endif /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */ + +// Base class for all specializations of numeric_limits. +template +class _Numeric_limits_base { +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, false); + + static __number min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); } + static __number max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, 0); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 0); + + static __number epsilon() throw() { return __number(); } + static __number round_error() throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, 0); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style, + has_denorm, + denorm_absent); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false); + + static __number infinity() throw() { return __number(); } + static __number quiet_NaN() throw() { return __number(); } + static __number signaling_NaN() throw() { return __number(); } + static __number denorm_min() throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, + round_style, + round_toward_zero); +}; + +// Base class for integers. + +template +class _Integer_limits : public _Numeric_limits_base<_Int> +{ +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true); + + static _Int min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imin; } + static _Int max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imax; } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, + digits, + (__idigits < 0) ? (int)(sizeof(_Int) * CHAR_BIT) + - (__imin == 0 ? 0 : 1) + : __idigits); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, (digits * 301) / 1000); + // log 2 = 0.301029995664... + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, __imin != 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, true); +}; + +#if defined(BOOST_BIG_ENDIAN) + + template + struct float_helper{ + static Number get_word() throw() { + // sizeof(long double) == 16 + const unsigned int _S_word[4] = { Word, 0, 0, 0 }; + return *reinterpret_cast(&_S_word); + } +}; + +#else + + template + struct float_helper{ + static Number get_word() throw() { + // sizeof(long double) == 12, but only 10 bytes significant + const unsigned int _S_word[4] = { 0, 0, 0, Word }; + return *reinterpret_cast( + reinterpret_cast(&_S_word)+16- + (sizeof(Number) == 12 ? 10 : sizeof(Number))); + } +}; + +#endif + +// Base class for floating-point numbers. +template +class _Floating_limits : public _Numeric_limits_base<__number> +{ +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, __Digits); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, __Digits10); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, true); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, __MinExp); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, __MaxExp); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, __MinExp10); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, __MaxExp10); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style, + has_denorm, + denorm_indeterminate); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false); + + + static __number infinity() throw() { + return float_helper<__number, __InfinityWord>::get_word(); + } + static __number quiet_NaN() throw() { + return float_helper<__number,__QNaNWord>::get_word(); + } + static __number signaling_NaN() throw() { + return float_helper<__number,__SNaNWord>::get_word(); + } + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, __IsIEC559); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false /* was: true */ ); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, round_style, __RoundStyle); +}; + +// Class numeric_limits + +// The unspecialized class. + +template +class numeric_limits : public _Numeric_limits_base {}; + +// Specializations for all built-in integral types. + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class numeric_limits +#if !defined(WCHAR_MAX) || !defined(WCHAR_MIN) +#if defined(_WIN32) || defined(__CYGWIN__) + : public _Integer_limits +#elif defined(__hppa) +// wchar_t has "unsigned int" as the underlying type + : public _Integer_limits +#else +// assume that wchar_t has "int" as the underlying type + : public _Integer_limits +#endif +#else +// we have WCHAR_MIN and WCHAR_MAX defined, so use it + : public _Integer_limits +#endif +{}; +#endif + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#ifdef __GNUC__ + +// Some compilers have long long, but don't define the +// LONGLONG_MIN and LONGLONG_MAX macros in limits.h. This +// assumes that long long is 64 bits. +#if !defined(LONGLONG_MAX) && !defined(ULONGLONG_MAX) + +# define ULONGLONG_MAX 0xffffffffffffffffLLU +# define LONGLONG_MAX 0x7fffffffffffffffLL + +#endif + +#if !defined(LONGLONG_MIN) +# define LONGLONG_MIN (-LONGLONG_MAX - 1) +#endif + + +#if !defined(ULONGLONG_MIN) +# define ULONGLONG_MIN 0 +#endif + +#endif /* __GNUC__ */ + +// Specializations for all built-in floating-point type. + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static float min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MIN; } + static float denorm_min() throw() { return FLT_MIN; } + static float max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MAX; } + static float epsilon() throw() { return FLT_EPSILON; } + static float round_error() throw() { return 0.5f; } // Units: ulps. +}; + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MIN; } + static double denorm_min() throw() { return DBL_MIN; } + static double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MAX; } + static double epsilon() throw() { return DBL_EPSILON; } + static double round_error() throw() { return 0.5; } // Units: ulps. +}; + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static long double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MIN; } + static long double denorm_min() throw() { return LDBL_MIN; } + static long double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MAX; } + static long double epsilon() throw() { return LDBL_EPSILON; } + static long double round_error() throw() { return 4; } // Units: ulps. +}; + +} // namespace std + +#endif /* BOOST_SGI_CPP_LIMITS */ + +// Local Variables: +// mode:C++ +// End: + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/detail/workaround.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/workaround.hpp new file mode 100644 index 00000000..ece67c12 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/detail/workaround.hpp @@ -0,0 +1,262 @@ +// Copyright David Abrahams 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +#ifndef WORKAROUND_DWA2002126_HPP +# define WORKAROUND_DWA2002126_HPP + +// Compiler/library version workaround macro +// +// Usage: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +// // workaround for eVC4 and VC6 +// ... // workaround code here +// #endif +// +// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the +// first argument must be undefined or expand to a numeric +// value. The above expands to: +// +// (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300 +// +// When used for workarounds that apply to the latest known version +// and all earlier versions of a compiler, the following convention +// should be observed: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301)) +// +// The version number in this case corresponds to the last version in +// which the workaround was known to have been required. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro +// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates +// the workaround for any version of the compiler. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or +// error will be issued if the compiler version exceeds the argument +// to BOOST_TESTED_AT(). This can be used to locate workarounds which +// may be obsoleted by newer versions. + +# ifndef BOOST_STRICT_CONFIG + +#include + +#ifndef __BORLANDC__ +#define __BORLANDC___WORKAROUND_GUARD 1 +#else +#define __BORLANDC___WORKAROUND_GUARD 0 +#endif +#ifndef __CODEGEARC__ +#define __CODEGEARC___WORKAROUND_GUARD 1 +#else +#define __CODEGEARC___WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_VER +#define _MSC_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_FULL_VER +#define _MSC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC +#define BOOST_MSVC_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC__ +#define __GNUC___WORKAROUND_GUARD 1 +#else +#define __GNUC___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_MINOR__ +#define __GNUC_MINOR___WORKAROUND_GUARD 1 +#else +#define __GNUC_MINOR___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_PATCHLEVEL__ +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1 +#else +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0 +#endif +#ifndef __IBMCPP__ +#define __IBMCPP___WORKAROUND_GUARD 1 +#else +#define __IBMCPP___WORKAROUND_GUARD 0 +#endif +#ifndef __SUNPRO_CC +#define __SUNPRO_CC_WORKAROUND_GUARD 1 +#else +#define __SUNPRO_CC_WORKAROUND_GUARD 0 +#endif +#ifndef __DECCXX_VER +#define __DECCXX_VER_WORKAROUND_GUARD 1 +#else +#define __DECCXX_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __MWERKS__ +#define __MWERKS___WORKAROUND_GUARD 1 +#else +#define __MWERKS___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG__ +#define __EDG___WORKAROUND_GUARD 1 +#else +#define __EDG___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG_VERSION__ +#define __EDG_VERSION___WORKAROUND_GUARD 1 +#else +#define __EDG_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __HP_aCC +#define __HP_aCC_WORKAROUND_GUARD 1 +#else +#define __HP_aCC_WORKAROUND_GUARD 0 +#endif +#ifndef __hpxstd98 +#define __hpxstd98_WORKAROUND_GUARD 1 +#else +#define __hpxstd98_WORKAROUND_GUARD 0 +#endif +#ifndef _CRAYC +#define _CRAYC_WORKAROUND_GUARD 1 +#else +#define _CRAYC_WORKAROUND_GUARD 0 +#endif +#ifndef __DMC__ +#define __DMC___WORKAROUND_GUARD 1 +#else +#define __DMC___WORKAROUND_GUARD 0 +#endif +#ifndef MPW_CPLUS +#define MPW_CPLUS_WORKAROUND_GUARD 1 +#else +#define MPW_CPLUS_WORKAROUND_GUARD 0 +#endif +#ifndef __COMO__ +#define __COMO___WORKAROUND_GUARD 1 +#else +#define __COMO___WORKAROUND_GUARD 0 +#endif +#ifndef __COMO_VERSION__ +#define __COMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __COMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __INTEL_COMPILER +#define __INTEL_COMPILER_WORKAROUND_GUARD 1 +#else +#define __INTEL_COMPILER_WORKAROUND_GUARD 0 +#endif +#ifndef __ICL +#define __ICL_WORKAROUND_GUARD 1 +#else +#define __ICL_WORKAROUND_GUARD 0 +#endif +#ifndef _COMPILER_VERSION +#define _COMPILER_VERSION_WORKAROUND_GUARD 1 +#else +#define _COMPILER_VERSION_WORKAROUND_GUARD 0 +#endif + +#ifndef _RWSTD_VER +#define _RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define _RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_RWSTD_VER +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GLIBCPP__ +#define __GLIBCPP___WORKAROUND_GUARD 1 +#else +#define __GLIBCPP___WORKAROUND_GUARD 0 +#endif +#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1 +#else +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0 +#endif +#ifndef __SGI_STL_PORT +#define __SGI_STL_PORT_WORKAROUND_GUARD 1 +#else +#define __SGI_STL_PORT_WORKAROUND_GUARD 0 +#endif +#ifndef _STLPORT_VERSION +#define _STLPORT_VERSION_WORKAROUND_GUARD 1 +#else +#define _STLPORT_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef __LIBCOMO_VERSION__ +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef _CPPLIB_VER +#define _CPPLIB_VER_WORKAROUND_GUARD 1 +#else +#define _CPPLIB_VER_WORKAROUND_GUARD 0 +#endif + +#ifndef BOOST_INTEL_CXX_VERSION +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL_WIN +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_DINKUMWARE_STDLIB +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1 +#else +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL +#define BOOST_INTEL_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WORKAROUND_GUARD 0 +#endif +// Always define to zero, if it's used it'll be defined my MPL: +#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0 + +# define BOOST_WORKAROUND(symbol, test) \ + ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \ + (symbol != 0) && (1 % (( (symbol test) ) + 1))) +// ^ ^ ^ ^ +// The extra level of parenthesis nesting above, along with the +// BOOST_OPEN_PAREN indirection below, is required to satisfy the +// broken preprocessor in MWCW 8.3 and earlier. +// +// The basic mechanism works as follows: +// (symbol test) + 1 => if (symbol test) then 2 else 1 +// 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0 +// +// The complication with % is for cooperation with BOOST_TESTED_AT(). +// When "test" is BOOST_TESTED_AT(x) and +// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined, +// +// symbol test => if (symbol <= x) then 1 else -1 +// (symbol test) + 1 => if (symbol <= x) then 2 else 0 +// 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero +// + +# ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS +# define BOOST_OPEN_PAREN ( +# define BOOST_TESTED_AT(value) > value) ?(-1): BOOST_OPEN_PAREN 1 +# else +# define BOOST_TESTED_AT(value) != ((value)-(value)) +# endif + +# else + +# define BOOST_WORKAROUND(symbol, test) 0 + +# endif + +#endif // WORKAROUND_DWA2002126_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/container_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/container_fwd.hpp new file mode 100644 index 00000000..0a118241 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/container_fwd.hpp @@ -0,0 +1,95 @@ + +// Copyright 2005-2007 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_HPP + +#include +#include + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +#define BOOST_HASH_CHAR_TRAITS string_char_traits +#else +#define BOOST_HASH_CHAR_TRAITS char_traits +#endif + +#if (defined(__GLIBCXX__) && defined(_GLIBCXX_DEBUG)) \ + || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \ + || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + +#include +#include +#include +#include +#include +#include +#include +#include + +#else + +#include + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \ + defined(__STL_CONFIG_H) + +#define BOOST_CONTAINER_FWD_BAD_BITSET + +#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +#define BOOST_CONTAINER_FWD_BAD_DEQUE +#endif + +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) +#include +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_BITSET) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4099) // struct/class mismatch in fwd declarations +#endif + +namespace std +{ + template class allocator; + template class basic_string; + template struct BOOST_HASH_CHAR_TRAITS; + template class complex; +} + +// gcc 3.4 and greater +namespace std +{ +#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) + template class deque; +#endif + + template class list; + template class vector; + template class map; + template + class multimap; + template class set; + template class multiset; + +#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET) + template class bitset; +#endif + template struct pair; +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/float_functions.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/float_functions.hpp new file mode 100644 index 00000000..9aac5a29 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/float_functions.hpp @@ -0,0 +1,154 @@ + +// Copyright 2005-2007 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP) +#define BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// The C++ standard requires that the C float functions are overloarded +// for float, double and long double in the std namespace, but some of the older +// library implementations don't support this. On some that don't, the C99 +// float functions (frexpf, frexpl, etc.) are available. +// +// Some of this is based on guess work. If I don't know any better I assume that +// the standard C++ overloaded functions are available. If they're not then this +// means that the argument is cast to a double and back, which is inefficient +// and will give pretty bad results for long doubles - so if you know better +// let me know. + +// STLport: +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +# if (defined(__GNUC__) && __GNUC__ < 3 && (defined(linux) || defined(__linux) || defined(__linux__))) || defined(__DMC__) +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# elif defined(BOOST_MSVC) && BOOST_MSVC < 1300 +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# else +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +# endif + +// Roguewave: +// +// On borland 5.51, with roguewave 2.1.1 the standard C++ overloads aren't +// defined, but for the same version of roguewave on sunpro they are. +#elif defined(_RWSTD_VER) +# if defined(__BORLANDC__) +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# define BOOST_HASH_C99_NO_FLOAT_FUNCS +# elif defined(__DECCXX) +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# else +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +# endif + +// libstdc++ (gcc 3.0 onwards, I think) +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS + +// SGI: +#elif defined(__STL_CONFIG_H) +# if defined(linux) || defined(__linux) || defined(__linux__) +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# else +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +# endif + +// Dinkumware. +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +// Overloaded float functions were probably introduced in an earlier version +// than this. +# if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 402) +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +# else +# define BOOST_HASH_USE_C99_FLOAT_FUNCS +# endif + +// Digital Mars +#elif defined(__DMC__) +# define BOOST_HASH_USE_C99_FLOAT_FUNCS + +// Use overloaded float functions by default. +#else +# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +#endif + +namespace boost +{ + namespace hash_detail + { + + inline float call_ldexp(float v, int exp) + { + using namespace std; +#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) || \ + defined(BOOST_HASH_C99_NO_FLOAT_FUNCS) + return ldexp(v, exp); +#else + return ldexpf(v, exp); +#endif + } + + inline double call_ldexp(double v, int exp) + { + using namespace std; + return ldexp(v, exp); + } + + inline long double call_ldexp(long double v, int exp) + { + using namespace std; +#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) + return ldexp(v, exp); +#else + return ldexpl(v, exp); +#endif + } + + inline float call_frexp(float v, int* exp) + { + using namespace std; +#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) || \ + defined(BOOST_HASH_C99_NO_FLOAT_FUNCS) + return frexp(v, exp); +#else + return frexpf(v, exp); +#endif + } + + inline double call_frexp(double v, int* exp) + { + using namespace std; + return frexp(v, exp); + } + + inline long double call_frexp(long double v, int* exp) + { + using namespace std; +#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) + return frexp(v, exp); +#else + return frexpl(v, exp); +#endif + } + } +} + +#if defined(BOOST_HASH_USE_C99_FLOAT_FUNCS) +#undef BOOST_HASH_USE_C99_FLOAT_FUNCS +#endif + +#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) +#undef BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS +#endif + +#if defined(BOOST_HASH_C99_NO_FLOAT_FUNCS) +#undef BOOST_HASH_C99_NO_FLOAT_FUNCS +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/hash_float.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/hash_float.hpp new file mode 100644 index 00000000..d5430acb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/detail/hash_float.hpp @@ -0,0 +1,196 @@ + +// Copyright 2005-2007 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Based on Peter Dimov's proposal +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf +// issue 6.18. + +#if !defined(BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER) +#define BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does + // not satisfy test. Loop body not executed +#endif +#endif + +#include +#include +#include +#include +#include + +// Select implementation for the current platform. + +// Cygwn +#if defined(__CYGWIN__) +# if defined(__i386__) || defined(_M_IX86) +# define BOOST_HASH_USE_x86_BINARY_HASH +# endif + +// STLport +#elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +// _fpclass and fpclassify aren't good enough on STLport. + +// GNU libstdc++ 3 +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \ + !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) +# define BOOST_HASH_USE_FPCLASSIFY +# endif + +// Dinkumware Library, on Visual C++ +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) + +// Not using _fpclass because it causes a warning about a conversion +// from 'long double' to 'double'. Pity. +// +//# if defined(BOOST_MSVC) +//# define BOOST_HASH_USE_FPCLASS +//# endif + +#endif + +namespace boost +{ + namespace hash_detail + { + inline void hash_float_combine(std::size_t& seed, std::size_t value) + { + seed ^= value + (seed<<6) + (seed>>2); + } + +// A simple, non-portable hash algorithm for x86. +#if defined(BOOST_HASH_USE_x86_BINARY_HASH) + inline std::size_t float_hash_impl(float v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr; + return seed; + } + + inline std::size_t float_hash_impl(double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr); + return seed; + } + + inline std::size_t float_hash_impl(long double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr++); + hash_float_combine(seed, *(boost::uint16_t*)ptr); + return seed; + } + +#else + + template + inline std::size_t float_hash_impl(T v) + { + int exp = 0; + + v = boost::hash_detail::call_frexp(v, &exp); + + // A postive value is easier to hash, so combine the + // sign with the exponent. + if(v < 0) { + v = -v; + exp += std::numeric_limits::max_exponent - + std::numeric_limits::min_exponent; + } + + // The result of frexp is always between 0.5 and 1, so its + // top bit will always be 1. Subtract by 0.5 to remove that. + v -= T(0.5); + v = boost::hash_detail::call_ldexp(v, + std::numeric_limits::digits + 1); + std::size_t seed = static_cast(v); + v -= seed; + + // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1; + std::size_t const length + = (std::numeric_limits::digits * + boost::static_log2::radix>::value + - 1) + / std::numeric_limits::digits; + + for(std::size_t i = 0; i != length; ++i) + { + v = boost::hash_detail::call_ldexp(v, + std::numeric_limits::digits); + std::size_t part = static_cast(v); + v -= part; + hash_float_combine(seed, part); + } + + hash_float_combine(seed, exp); + + return seed; + } +#endif + + template + inline std::size_t float_hash_value(T v) + { +#if defined(BOOST_HASH_USE_FPCLASSIFY) + using namespace std; + switch (fpclassify(v)) { + case FP_ZERO: + return 0; + case FP_INFINITE: + return (std::size_t)(v > 0 ? -1 : -2); + case FP_NAN: + return (std::size_t)(-3); + case FP_NORMAL: + case FP_SUBNORMAL: + return float_hash_impl(v); + default: + BOOST_ASSERT(0); + return 0; + } +#elif defined(BOOST_HASH_USE_FPCLASS) + switch(_fpclass(v)) { + case _FPCLASS_NZ: + case _FPCLASS_PZ: + return 0; + case _FPCLASS_PINF: + return (std::size_t)(-1); + case _FPCLASS_NINF: + return (std::size_t)(-2); + case _FPCLASS_SNAN: + case _FPCLASS_QNAN: + return (std::size_t)(-3); + case _FPCLASS_NN: + case _FPCLASS_ND: + return float_hash_impl(v); + case _FPCLASS_PD: + case _FPCLASS_PN: + return float_hash_impl(v); + default: + BOOST_ASSERT(0); + return 0; + } +#else + return v == 0 ? 0 : float_hash_impl(v); +#endif + } + } +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash.hpp new file mode 100644 index 00000000..eaca06bb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash.hpp @@ -0,0 +1,7 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/float_functions.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/float_functions.hpp new file mode 100644 index 00000000..c6d0597d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/float_functions.hpp @@ -0,0 +1,246 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP) +#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP + +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// The C++ standard requires that the C float functions are overloarded +// for float, double and long double in the std namespace, but some of the older +// library implementations don't support this. On some that don't, the C99 +// float functions (frexpf, frexpl, etc.) are available. +// +// The following tries to automatically detect which are available. + +namespace boost { + namespace hash_detail { + + // Returned by dummy versions of the float functions. + + struct not_found { + // Implicitly convertible to float and long double in order to avoid + // a compile error when the dummy float functions are used. + + inline operator float() const { return 0; } + inline operator long double() const { return 0; } + }; + + // A type for detecting the return type of functions. + + template struct is; + template <> struct is { char x[10]; }; + template <> struct is { char x[20]; }; + template <> struct is { char x[30]; }; + template <> struct is { char x[40]; }; + + // Used to convert the return type of a function to a type for sizeof. + + template is float_type(T); + + // call_ldexp + // + // This will get specialized for float and long double + + template struct call_ldexp + { + typedef double float_type; + + inline double operator()(double a, int b) const + { + using namespace std; + return ldexp(a, b); + } + }; + + // call_frexp + // + // This will get specialized for float and long double + + template struct call_frexp + { + typedef double float_type; + + inline double operator()(double a, int* b) const + { + using namespace std; + return frexp(a, b); + } + }; + } +} + +// A namespace for dummy functions to detect when the actual function we want +// isn't available. ldexpl, ldexpf etc. might be added tby the macros below. +// +// AFAICT these have to be outside of the boost namespace, as if they're in +// the boost namespace they'll always be preferable to any other function +// (since the arguments are built in types, ADL can't be used). + +namespace BOOST_HASH_DETECT_FLOAT_FUNCTIONS { + template boost::hash_detail::not_found ldexp(Float, int); + template boost::hash_detail::not_found frexp(Float, int*); +} + +// Macros for generating specializations of call_ldexp and call_frexp. +// +// check_cpp and check_c99 check if the C++ or C99 functions are available. +// +// Then the call_* functions select an appropriate implementation. +// +// I used c99_func in a few places just to get a unique name. +// +// Important: when using 'using namespace' at namespace level, include as +// little as possible in that namespace, as Visual C++ has an odd bug which +// can cause the namespace to be imported at the global level. This seems to +// happen mainly when there's a template in the same namesapce. + +#define BOOST_HASH_CALL_FLOAT_FUNC(cpp_func, c99_func, type1, type2) \ +namespace BOOST_HASH_DETECT_FLOAT_FUNCTIONS { \ + template \ + boost::hash_detail::not_found c99_func(Float, type2); \ +} \ + \ +namespace boost { \ + namespace hash_detail { \ + namespace c99_func##_detect { \ + using namespace std; \ + using namespace BOOST_HASH_DETECT_FLOAT_FUNCTIONS; \ + \ + struct check { \ + static type1 x; \ + static type2 y; \ + BOOST_STATIC_CONSTANT(bool, cpp = \ + sizeof(float_type(cpp_func(x,y))) \ + == sizeof(is)); \ + BOOST_STATIC_CONSTANT(bool, c99 = \ + sizeof(float_type(c99_func(x,y))) \ + == sizeof(is)); \ + }; \ + } \ + \ + template \ + struct call_c99_##c99_func : \ + boost::hash_detail::call_##cpp_func {}; \ + \ + template <> \ + struct call_c99_##c99_func { \ + typedef type1 float_type; \ + \ + template \ + inline type1 operator()(type1 a, T b) const \ + { \ + using namespace std; \ + return c99_func(a, b); \ + } \ + }; \ + \ + template \ + struct call_cpp_##c99_func : \ + call_c99_##c99_func< \ + ::boost::hash_detail::c99_func##_detect::check::c99 \ + > {}; \ + \ + template <> \ + struct call_cpp_##c99_func { \ + typedef type1 float_type; \ + \ + template \ + inline type1 operator()(type1 a, T b) const \ + { \ + using namespace std; \ + return cpp_func(a, b); \ + } \ + }; \ + \ + template <> \ + struct call_##cpp_func : \ + call_cpp_##c99_func< \ + ::boost::hash_detail::c99_func##_detect::check::cpp \ + > {}; \ + } \ +} + +#define BOOST_HASH_CALL_FLOAT_MACRO(cpp_func, c99_func, type1, type2) \ +namespace boost { \ + namespace hash_detail { \ + \ + template <> \ + struct call_##cpp_func { \ + typedef type1 float_type; \ + inline type1 operator()(type1 x, type2 y) const { \ + return c99_func(x, y); \ + } \ + }; \ + } \ +} + +#if defined(ldexpf) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpf, float, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int) +#endif + +#if defined(ldexpl) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpl, long double, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int) +#endif + +#if defined(frexpf) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpf, float, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*) +#endif + +#if defined(frexpl) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpl, long double, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*) +#endif + +#undef BOOST_HASH_CALL_FLOAT_MACRO +#undef BOOST_HASH_CALL_FLOAT_FUNC + + +namespace boost +{ + namespace hash_detail + { + template + struct select_hash_type_impl { + typedef double type; + }; + + template <> + struct select_hash_type_impl { + typedef float type; + }; + + template <> + struct select_hash_type_impl { + typedef long double type; + }; + + + // select_hash_type + // + // If there is support for a particular floating point type, use that + // otherwise use double (there's always support for double). + + template + struct select_hash_type : select_hash_type_impl< + BOOST_DEDUCED_TYPENAME call_ldexp::float_type, + BOOST_DEDUCED_TYPENAME call_frexp::float_type + > {}; + } +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float.hpp new file mode 100644 index 00000000..2e3930e2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float.hpp @@ -0,0 +1,101 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +// Include hash implementation for the current platform. + +// Cygwn +#if defined(__CYGWIN__) +# if defined(__i386__) || defined(_M_IX86) +# include +# else +# include +# endif +#else +# include +#endif + +// Can we use fpclassify? + +// STLport +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +#define BOOST_HASH_USE_FPCLASSIFY 0 + +// GNU libstdc++ 3 +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \ + !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) +# define BOOST_HASH_USE_FPCLASSIFY 1 +# else +# define BOOST_HASH_USE_FPCLASSIFY 0 +# endif + +// Everything else +#else +# define BOOST_HASH_USE_FPCLASSIFY 0 +#endif + +#if BOOST_HASH_USE_FPCLASSIFY + +#include + +namespace boost +{ + namespace hash_detail + { + template + inline std::size_t float_hash_value(T v) + { + using namespace std; + switch (fpclassify(v)) { + case FP_ZERO: + return 0; + case FP_INFINITE: + return (std::size_t)(v > 0 ? -1 : -2); + case FP_NAN: + return (std::size_t)(-3); + case FP_NORMAL: + case FP_SUBNORMAL: + return float_hash_impl(v); + default: + BOOST_ASSERT(0); + return 0; + } + } + } +} + +#else // !BOOST_HASH_USE_FPCLASSIFY + +namespace boost +{ + namespace hash_detail + { + template + inline std::size_t float_hash_value(T v) + { + return v == 0 ? 0 : float_hash_impl(v); + } + } +} + +#endif // BOOST_HASH_USE_FPCLASSIFY + +#undef BOOST_HASH_USE_FPCLASSIFY + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_generic.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_generic.hpp new file mode 100644 index 00000000..2a5b3dc9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_generic.hpp @@ -0,0 +1,93 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// A general purpose hash function for non-zero floating point values. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER + +#include +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does + // not satisfy test. Loop body not executed +#endif +#endif + +namespace boost +{ + namespace hash_detail + { + inline void hash_float_combine(std::size_t& seed, std::size_t value) + { + seed ^= value + (seed<<6) + (seed>>2); + } + + template + inline std::size_t float_hash_impl2(T v) + { + boost::hash_detail::call_frexp frexp; + boost::hash_detail::call_ldexp ldexp; + + int exp = 0; + + v = frexp(v, &exp); + + // A postive value is easier to hash, so combine the + // sign with the exponent and use the absolute value. + if(v < 0) { + v = -v; + exp += limits::max_exponent - + limits::min_exponent; + } + + // The result of frexp is always between 0.5 and 1, so its + // top bit will always be 1. Subtract by 0.5 to remove that. + v -= T(0.5); + v = ldexp(v, limits::digits + 1); + std::size_t seed = static_cast(v); + v -= seed; + + // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1; + std::size_t const length + = (limits::digits * + boost::static_log2::radix>::value - 1) + / limits::digits; + + for(std::size_t i = 0; i != length; ++i) + { + v = ldexp(v, limits::digits); + std::size_t part = static_cast(v); + v -= part; + hash_float_combine(seed, part); + } + + hash_float_combine(seed, exp); + + return seed; + } + + template + inline std::size_t float_hash_impl(T v) + { + typedef BOOST_DEDUCED_TYPENAME select_hash_type::type type; + return float_hash_impl2(static_cast(v)); + } + } +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_x86.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_x86.hpp new file mode 100644 index 00000000..d28d82e2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/hash_float_x86.hpp @@ -0,0 +1,56 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// A non-portable hash function form non-zero floats on x86. +// +// Even if you're on an x86 platform, this might not work if their floating +// point isn't set up as this expects. So this should only be used if it's +// absolutely certain that it will work. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +namespace boost +{ + namespace hash_detail + { + inline void hash_float_combine(std::size_t& seed, std::size_t value) + { + seed ^= value + (seed<<6) + (seed>>2); + } + + inline std::size_t float_hash_impl(float v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr; + return seed; + } + + inline std::size_t float_hash_impl(double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr); + return seed; + } + + inline std::size_t float_hash_impl(long double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr++); + hash_float_combine(seed, *(boost::uint16_t*)ptr); + return seed; + } + } +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/limits.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/limits.hpp new file mode 100644 index 00000000..ce14e918 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/detail/limits.hpp @@ -0,0 +1,61 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// On some platforms std::limits gives incorrect values for long double. +// This tries to work around them. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +// On OpenBSD, numeric_limits is not reliable for long doubles, but +// the macros defined in are and support long double when STLport +// doesn't. + +#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) +#include +#endif + +namespace boost +{ + namespace hash_detail + { + template + struct limits : std::numeric_limits {}; + +#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) + template <> + struct limits + : std::numeric_limits + { + static long double epsilon() { + return LDBL_EPSILON; + } + + static long double (max)() { + return LDBL_MAX; + } + + static long double (min)() { + return LDBL_MIN; + } + + BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG); + BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP); + BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP); +#if defined(_STLP_NO_LONG_DOUBLE) + BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX); +#endif + }; +#endif // __OpenBSD__ + } +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/extensions.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/extensions.hpp new file mode 100644 index 00000000..5cf21a30 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/extensions.hpp @@ -0,0 +1,286 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Based on Peter Dimov's proposal +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf +// issue 6.18. + +// This implements the extensions to the standard. +// It's undocumented, so you shouldn't use it.... + +#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP) +#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP + +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) +#include +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#include +#endif + +namespace boost +{ + template + std::size_t hash_value(std::pair const&); + template + std::size_t hash_value(std::vector const&); + template + std::size_t hash_value(std::list const& v); + template + std::size_t hash_value(std::deque const& v); + template + std::size_t hash_value(std::set const& v); + template + std::size_t hash_value(std::multiset const& v); + template + std::size_t hash_value(std::map const& v); + template + std::size_t hash_value(std::multimap const& v); + + template + std::size_t hash_value(std::complex const&); + + template + std::size_t hash_value(std::pair const& v) + { + std::size_t seed = 0; + hash_combine(seed, v.first); + hash_combine(seed, v.second); + return seed; + } + + template + std::size_t hash_value(std::vector const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::list const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::deque const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::set const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::multiset const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::map const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::multimap const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::complex const& v) + { + boost::hash hasher; + std::size_t seed = hasher(v.imag()); + seed ^= hasher(v.real()) + (seed<<6) + (seed>>2); + return seed; + } + + // + // call_hash_impl + // + + // On compilers without function template ordering, this deals with arrays. + +#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + namespace hash_detail + { + template + struct call_hash_impl + { + template + struct inner + { + static std::size_t call(T const& v) + { + using namespace boost; + return hash_value(v); + } + }; + }; + + template <> + struct call_hash_impl + { + template + struct inner + { +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + static std::size_t call(Array const& v) +#else + static std::size_t call(Array& v) +#endif + { + const int size = sizeof(v) / sizeof(*v); + return boost::hash_range(v, v + size); + } + }; + }; + + template + struct call_hash + : public call_hash_impl::value> + ::BOOST_NESTED_TEMPLATE inner + { + }; + } +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + + // + // boost::hash + // + + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + + template struct hash + : std::unary_function + { +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + std::size_t operator()(T const& val) const + { + return hash_value(val); + } +#else + std::size_t operator()(T const& val) const + { + return hash_detail::call_hash::call(val); + } +#endif + }; + +#if BOOST_WORKAROUND(__DMC__, <= 0x848) + template struct hash + : std::unary_function + { + std::size_t operator()(const T* val) const + { + return boost::hash_range(val, val+n); + } + }; +#endif + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + // On compilers without partial specialization, boost::hash + // has already been declared to deal with pointers, so just + // need to supply the non-pointer version of hash_impl. + + namespace hash_detail + { + template + struct hash_impl; + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + + template <> + struct hash_impl + { + template + struct inner + : std::unary_function + { +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + std::size_t operator()(T const& val) const + { + return hash_value(val); + } +#else + std::size_t operator()(T const& val) const + { + return hash_detail::call_hash::call(val); + } +#endif + }; + }; + +#else // Visual C++ 6.5 + + // Visual C++ 6.5 has problems with nested member functions and + // applying const to const types in templates. So we get this: + + template + struct hash_impl_msvc + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T const& val) const + { + return hash_detail::call_hash::call(val); + } + + std::size_t operator()(T& val) const + { + return hash_detail::call_hash::call(val); + } + }; + }; + + template <> + struct hash_impl_msvc + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T& val) const + { + return hash_detail::call_hash::call(val); + } + }; + }; + + template + struct hash_impl_msvc2 + : public hash_impl_msvc::value> + ::BOOST_NESTED_TEMPLATE inner {}; + + template <> + struct hash_impl + { + template + struct inner : public hash_impl_msvc2 {}; + }; + +#endif // Visual C++ 6.5 + } +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash.hpp new file mode 100644 index 00000000..649f3770 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash.hpp @@ -0,0 +1,478 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Based on Peter Dimov's proposal +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf +// issue 6.18. + +#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP) +#define BOOST_FUNCTIONAL_HASH_HASH_HPP + +#include +#include +#include +#include +#include + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#include +#endif + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +#define BOOST_HASH_CHAR_TRAITS string_char_traits +#else +#define BOOST_HASH_CHAR_TRAITS char_traits +#endif + +namespace boost +{ + std::size_t hash_value(bool); + std::size_t hash_value(char); + std::size_t hash_value(unsigned char); + std::size_t hash_value(signed char); + std::size_t hash_value(short); + std::size_t hash_value(unsigned short); + std::size_t hash_value(int); + std::size_t hash_value(unsigned int); + std::size_t hash_value(long); + std::size_t hash_value(unsigned long); + +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) + std::size_t hash_value(wchar_t); +#endif + +#if defined(BOOST_HAS_LONG_LONG) + std::size_t hash_value(boost::long_long_type); + std::size_t hash_value(boost::ulong_long_type); +#endif + +#if !BOOST_WORKAROUND(__DMC__, <= 0x848) + template std::size_t hash_value(T* const&); +#else + template std::size_t hash_value(T*); +#endif + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + template< class T, unsigned N > + std::size_t hash_value(const T (&x)[N]); + + template< class T, unsigned N > + std::size_t hash_value(T (&x)[N]); +#endif + + std::size_t hash_value(float v); + std::size_t hash_value(double v); + std::size_t hash_value(long double v); + + template + std::size_t hash_value(std::basic_string, A> const&); + + // Implementation + + namespace hash_detail + { + template + inline std::size_t hash_value_signed(T val) + { + const int size_t_bits = std::numeric_limits::digits; + // ceiling(std::numeric_limits::digits / size_t_bits) - 1 + const int length = (std::numeric_limits::digits - 1) + / size_t_bits; + + std::size_t seed = 0; + T positive = val < 0 ? -1 - val : val; + + // Hopefully, this loop can be unrolled. + for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits) + { + seed ^= (std::size_t) (positive >> i) + (seed<<6) + (seed>>2); + } + seed ^= (std::size_t) val + (seed<<6) + (seed>>2); + + return seed; + } + + template + inline std::size_t hash_value_unsigned(T val) + { + const int size_t_bits = std::numeric_limits::digits; + // ceiling(std::numeric_limits::digits / size_t_bits) - 1 + const int length = (std::numeric_limits::digits - 1) + / size_t_bits; + + std::size_t seed = 0; + + // Hopefully, this loop can be unrolled. + for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits) + { + seed ^= (std::size_t) (val >> i) + (seed<<6) + (seed>>2); + } + seed ^= (std::size_t) val + (seed<<6) + (seed>>2); + + return seed; + } + } + + inline std::size_t hash_value(bool v) + { + return static_cast(v); + } + + inline std::size_t hash_value(char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(signed char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(short v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned short v) + { + return static_cast(v); + } + + inline std::size_t hash_value(int v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned int v) + { + return static_cast(v); + } + + inline std::size_t hash_value(long v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned long v) + { + return static_cast(v); + } + +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) + inline std::size_t hash_value(wchar_t v) + { + return static_cast(v); + } +#endif + +#if defined(BOOST_HAS_LONG_LONG) + inline std::size_t hash_value(boost::long_long_type v) + { + return hash_detail::hash_value_signed(v); + } + + inline std::size_t hash_value(boost::ulong_long_type v) + { + return hash_detail::hash_value_unsigned(v); + } +#endif + + // Implementation by Alberto Barbati and Dave Harris. +#if !BOOST_WORKAROUND(__DMC__, <= 0x848) + template std::size_t hash_value(T* const& v) +#else + template std::size_t hash_value(T* v) +#endif + { + std::size_t x = static_cast( + reinterpret_cast(v)); + + return x + (x >> 3); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template + inline void hash_combine(std::size_t& seed, T& v) +#else + template + inline void hash_combine(std::size_t& seed, T const& v) +#endif + { + boost::hash hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2); + } + + template + inline std::size_t hash_range(It first, It last) + { + std::size_t seed = 0; + + for(; first != last; ++first) + { + hash_combine(seed, *first); + } + + return seed; + } + + template + inline void hash_range(std::size_t& seed, It first, It last) + { + for(; first != last; ++first) + { + hash_combine(seed, *first); + } + } + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + template + inline std::size_t hash_range(T* first, T* last) + { + std::size_t seed = 0; + + for(; first != last; ++first) + { + boost::hash hasher; + seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2); + } + + return seed; + } + + template + inline void hash_range(std::size_t& seed, T* first, T* last) + { + for(; first != last; ++first) + { + boost::hash hasher; + seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2); + } + } +#endif + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + template< class T, unsigned N > + inline std::size_t hash_value(const T (&x)[N]) + { + return hash_range(x, x + N); + } + + template< class T, unsigned N > + inline std::size_t hash_value(T (&x)[N]) + { + return hash_range(x, x + N); + } +#endif + + template + inline std::size_t hash_value(std::basic_string, A> const& v) + { + return hash_range(v.begin(), v.end()); + } + + inline std::size_t hash_value(float v) + { + return boost::hash_detail::float_hash_value(v); + } + + inline std::size_t hash_value(double v) + { + return boost::hash_detail::float_hash_value(v); + } + + inline std::size_t hash_value(long double v) + { + return boost::hash_detail::float_hash_value(v); + } + + // + // boost::hash + // + + // Define the specializations required by the standard. The general purpose + // boost::hash is defined later in extensions.hpp if BOOST_HASH_NO_EXTENSIONS + // is not defined. + + // BOOST_HASH_SPECIALIZE - define a specialization for a type which is + // passed by copy. + // + // BOOST_HASH_SPECIALIZE_REF - define a specialization for a type which is + // passed by copy. + // + // These are undefined later. + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#define BOOST_HASH_SPECIALIZE(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; + +#define BOOST_HASH_SPECIALIZE_REF(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type const& v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; +#else +#define BOOST_HASH_SPECIALIZE(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; \ + \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(const type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; + +#define BOOST_HASH_SPECIALIZE_REF(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type const& v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; \ + \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type const& v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; +#endif + + BOOST_HASH_SPECIALIZE(bool) + BOOST_HASH_SPECIALIZE(char) + BOOST_HASH_SPECIALIZE(signed char) + BOOST_HASH_SPECIALIZE(unsigned char) +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) + BOOST_HASH_SPECIALIZE(wchar_t) +#endif + BOOST_HASH_SPECIALIZE(short) + BOOST_HASH_SPECIALIZE(unsigned short) + BOOST_HASH_SPECIALIZE(int) + BOOST_HASH_SPECIALIZE(unsigned int) + BOOST_HASH_SPECIALIZE(long) + BOOST_HASH_SPECIALIZE(unsigned long) + + BOOST_HASH_SPECIALIZE(float) + BOOST_HASH_SPECIALIZE(double) + BOOST_HASH_SPECIALIZE(long double) + + BOOST_HASH_SPECIALIZE_REF(std::string) +#if !defined(BOOST_NO_STD_WSTRING) + BOOST_HASH_SPECIALIZE_REF(std::wstring) +#endif + +#if defined(BOOST_HAS_LONG_LONG) + BOOST_HASH_SPECIALIZE(boost::long_long_type) + BOOST_HASH_SPECIALIZE(boost::ulong_long_type) +#endif + +#undef BOOST_HASH_SPECIALIZE +#undef BOOST_HASH_SPECIALIZE_REF + +// Specializing boost::hash for pointers. + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + + template + struct hash + : public std::unary_function + { + std::size_t operator()(T* v) const + { +#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) + return boost::hash_value(v); +#else + std::size_t x = static_cast( + reinterpret_cast(v)); + + return x + (x >> 3); +#endif + } + }; + +#else + + // For compilers without partial specialization, we define a + // boost::hash for all remaining types. But hash_impl is only defined + // for pointers in 'extensions.hpp' - so when BOOST_HASH_NO_EXTENSIONS + // is defined there will still be a compile error for types not supported + // in the standard. + + namespace hash_detail + { + template + struct hash_impl; + + template <> + struct hash_impl + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T val) const + { +#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 590) + return boost::hash_value(val); +#else + std::size_t x = static_cast( + reinterpret_cast(val)); + + return x + (x >> 3); +#endif + } + }; + }; + } + + template struct hash + : public boost::hash_detail::hash_impl::value> + ::BOOST_NESTED_TEMPLATE inner + { + }; + +#endif +} + +#undef BOOST_HASH_CHAR_TRAITS + +#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP + +// Include this outside of the include guards in case the file is included +// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it +// undefined. + +#if !defined(BOOST_HASH_NO_EXTENSIONS) \ + && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP) +#include +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash_fwd.hpp new file mode 100644 index 00000000..8c46a9f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash/hash_fwd.hpp @@ -0,0 +1,40 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Based on Peter Dimov's proposal +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf +// issue 6.18. + +#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP) +#define BOOST_FUNCTIONAL_HASH_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include + +namespace boost +{ + template struct hash; + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template void hash_combine(std::size_t& seed, T& v); +#else + template void hash_combine(std::size_t& seed, T const& v); +#endif + + template std::size_t hash_range(It, It); + template void hash_range(std::size_t&, It, It); + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + template inline std::size_t hash_range(T*, T*); + template inline void hash_range(std::size_t&, T*, T*); +#endif +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash_fwd.hpp new file mode 100644 index 00000000..4b4cc15f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/functional/hash_fwd.hpp @@ -0,0 +1,7 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/integer/static_log2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/integer/static_log2.hpp new file mode 100644 index 00000000..63a8e943 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/integer/static_log2.hpp @@ -0,0 +1,132 @@ +// -------------- Boost static_log2.hpp header file ----------------------- // +// +// Copyright (C) 2001 Daryle Walker. +// Copyright (C) 2003 Vesa Karvonen. +// Copyright (C) 2003 Gennaro Prota. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// --------------------------------------------------- +// See http://www.boost.org/libs/integer for documentation. +// ------------------------------------------------------------------------- // + + +#ifndef BOOST_INTEGER_STATIC_LOG2_HPP +#define BOOST_INTEGER_STATIC_LOG2_HPP + +#include "carve/external/boost/config.hpp" // for BOOST_STATIC_CONSTANT + +namespace boost { + + namespace detail { + + namespace static_log2_impl { + + // choose_initial_n<> + // + // Recursively doubles its integer argument, until it + // becomes >= of the "width" (C99, 6.2.6.2p4) of + // static_log2_argument_type. + // + // Used to get the maximum power of two less then the width. + // + // Example: if on your platform argument_type has 48 value + // bits it yields n=32. + // + // It's easy to prove that, starting from such a value + // of n, the core algorithm works correctly for any width + // of static_log2_argument_type and that recursion always + // terminates with x = 1 and n = 0 (see the algorithm's + // invariant). + + typedef unsigned long argument_type; + typedef int result_type; + + + template + struct choose_initial_n { + + BOOST_STATIC_CONSTANT(bool, c = (argument_type(1) << n << n) != 0); + BOOST_STATIC_CONSTANT( + result_type, + value = !c*n + choose_initial_n<2*c*n>::value + ); + + }; + + template <> + struct choose_initial_n<0> { + BOOST_STATIC_CONSTANT(result_type, value = 0); + }; + + + + // start computing from n_zero - must be a power of two + const result_type n_zero = 16; + const result_type initial_n = choose_initial_n::value; + + // static_log2_impl<> + // + // * Invariant: + // 2n + // 1 <= x && x < 2 at the start of each recursion + // (see also choose_initial_n<>) + // + // * Type requirements: + // + // argument_type maybe any unsigned type with at least n_zero + 1 + // value bits. (Note: If larger types will be standardized -e.g. + // unsigned long long- then the argument_type typedef can be + // changed without affecting the rest of the code.) + // + + template + struct static_log2_impl { + + BOOST_STATIC_CONSTANT(bool, c = (x >> n) > 0); // x >= 2**n ? + BOOST_STATIC_CONSTANT( + result_type, + value = c*n + (static_log2_impl< (x>>c*n), n/2 >::value) + ); + + }; + + template <> + struct static_log2_impl<1, 0> { + BOOST_STATIC_CONSTANT(result_type, value = 0); + }; + + } + } // detail + + + + // -------------------------------------- + // static_log2 + // ---------------------------------------- + + typedef detail::static_log2_impl::argument_type static_log2_argument_type; + typedef detail::static_log2_impl::result_type static_log2_result_type; + + + template + struct static_log2 { + + BOOST_STATIC_CONSTANT( + static_log2_result_type, + value = detail::static_log2_impl::static_log2_impl::value + ); + + }; + + + template <> + struct static_log2<0> { }; + +} + + + +#endif // include guard diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/integer_traits.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/integer_traits.hpp new file mode 100644 index 00000000..783e735a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/integer_traits.hpp @@ -0,0 +1,236 @@ +/* boost integer_traits.hpp header file + * + * Copyright Jens Maurer 2000 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * $Id: integer_traits.hpp 32576 2006-02-05 10:19:42Z johnmaddock $ + * + * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers + */ + +// See http://www.boost.org/libs/integer for documentation. + + +#ifndef BOOST_INTEGER_TRAITS_HPP +#define BOOST_INTEGER_TRAITS_HPP + +#include +#include + +// These are an implementation detail and not part of the interface +#include +// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it, +// and some may have but not ... +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__)) +#include +#endif + + +namespace boost { +template +class integer_traits : public std::numeric_limits +{ +public: + BOOST_STATIC_CONSTANT(bool, is_integral = false); +}; + +namespace detail { +template +class integer_traits_base +{ +public: + BOOST_STATIC_CONSTANT(bool, is_integral = true); + BOOST_STATIC_CONSTANT(T, const_min = min_val); + BOOST_STATIC_CONSTANT(T, const_max = max_val); +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool integer_traits_base::is_integral; + +template +const T integer_traits_base::const_min; + +template +const T integer_traits_base::const_max; +#endif + +} // namespace detail + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class integer_traits + : public std::numeric_limits, + // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native + // library: they are wrong! +#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__) + public detail::integer_traits_base +#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__)) + // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned: + public detail::integer_traits_base +#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\ + || (defined __APPLE__)\ + || (defined(__OpenBSD__) && defined(__GNUC__))\ + || (defined(__NetBSD__) && defined(__GNUC__))\ + || (defined(__FreeBSD__) && defined(__GNUC__))\ + || (defined(__DragonFly__) && defined(__GNUC__))\ + || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT)) + // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int. + // - SGI MIPSpro with native library + // - gcc 3.x on HP-UX + // - Mac OS X with native library + // - gcc on FreeBSD, OpenBSD and NetBSD + public detail::integer_traits_base +#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT) + // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int. + // - gcc 2.95.x on HP-UX + // (also, std::numeric_limits appears to return the wrong values). + public detail::integer_traits_base +#else +#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler. +#endif +{ }; +#endif // BOOST_NO_INTRINSIC_WCHAR_T + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) +#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX> +{ }; + +#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> : public std::numeric_limits< ::boost::long_long_type>, public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ }; +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX> +{ }; + +#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX> +{ }; + +#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX> +{ }; + +#elif defined(BOOST_HAS_LONG_LONG) +// +// we have long long but no constants, this happens for example with gcc in -ansi mode, +// we'll just have to work out the values for ourselves (assumes 2's compliment representation): +// +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) - 1)), ~(1LL << (sizeof(::boost::long_long_type) - 1))> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL> +{ }; + +#endif +#endif + +} // namespace boost + +#endif /* BOOST_INTEGER_TRAITS_HPP */ + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/iterator.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator.hpp new file mode 100644 index 00000000..a2a7dd59 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator.hpp @@ -0,0 +1,59 @@ +// interator.hpp workarounds for non-conforming standard libraries ---------// + +// (C) Copyright Beman Dawes 2000. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/utility for documentation. + +// Revision History +// 12 Jan 01 added for std::ptrdiff_t (Jens Maurer) +// 28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams) +// 26 Jun 00 Initial version (Jeremy Siek) + +#ifndef BOOST_ITERATOR_HPP +#define BOOST_ITERATOR_HPP + +#include +#include // std::ptrdiff_t +#include + +namespace boost +{ +# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR) + template + struct iterator + { + typedef T value_type; + typedef Distance difference_type; + typedef Pointer pointer; + typedef Reference reference; + typedef Category iterator_category; + }; +# else + + // declare iterator_base in namespace detail to work around MSVC bugs which + // prevent derivation from an identically-named class in a different namespace. + namespace detail { + template +# if !defined(BOOST_MSVC_STD_ITERATOR) + struct iterator_base : std::iterator {}; +# else + struct iterator_base : std::iterator + { + typedef Reference reference; + typedef Pointer pointer; + typedef Distance difference_type; + }; +# endif + } + + template + struct iterator : boost::detail::iterator_base {}; +# endif +} // namespace boost + +#endif // BOOST_ITERATOR_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_def.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_def.hpp new file mode 100644 index 00000000..44122498 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_def.hpp @@ -0,0 +1,137 @@ +// (C) Copyright David Abrahams 2002. +// (C) Copyright Jeremy Siek 2002. +// (C) Copyright Thomas Witt 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// no include guard multiple inclusion intended + +// +// This is a temporary workaround until the bulk of this is +// available in boost config. +// 23/02/03 thw +// + +#include // for prior +#include + +#ifdef BOOST_ITERATOR_CONFIG_DEF +# error you have nested config_def #inclusion. +#else +# define BOOST_ITERATOR_CONFIG_DEF +#endif + +// We enable this always now. Otherwise, the simple case in +// libs/iterator/test/constant_iterator_arrow.cpp fails to compile +// because the operator-> return is improperly deduced as a non-const +// pointer. +#if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531)) + +// Recall that in general, compilers without partial specialization +// can't strip constness. Consider counting_iterator, which normally +// passes a const Value to iterator_facade. As a result, any code +// which makes a std::vector of the iterator's value_type will fail +// when its allocator declares functions overloaded on reference and +// const_reference (the same type). +// +// Furthermore, Borland 5.5.1 drops constness in enough ways that we +// end up using a proxy for operator[] when we otherwise shouldn't. +// Using reference constness gives it an extra hint that it can +// return the value_type from operator[] directly, but is not +// strictly necessary. Not sure how best to resolve this one. + +# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1 + +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x5A0)) \ + || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \ + || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) \ + || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) + +# define BOOST_NO_LVALUE_RETURN_DETECTION + +# if 0 // test code + struct v {}; + + typedef char (&no)[3]; + + template + no foo(T const&, ...); + + template + char foo(T&, int); + + + struct value_iterator + { + v operator*() const; + }; + + template + struct lvalue_deref_helper + { + static T& x; + enum { value = (sizeof(foo(*x,0)) == 1) }; + }; + + int z2[(lvalue_deref_helper::value == 1) ? 1 : -1]; + int z[(lvalue_deref_helper::value) == 1 ? -1 : 1 ]; +# endif + +#endif + +#if BOOST_WORKAROUND(__MWERKS__, <=0x2407) +# define BOOST_NO_IS_CONVERTIBLE // "is_convertible doesn't work for simple types" +#endif + +#if BOOST_WORKAROUND(__GNUC__, == 2) \ + || BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) +# define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile: + +# if 0 // test code + #include + template + struct foo + { + foo(T); + + template + foo(foo const& other) : p(other.p) { } + + T p; + }; + + bool x = boost::is_convertible, foo >::value; +# endif + +#endif + + +#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE)) +# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY +#endif + +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +# define BOOST_ARG_DEPENDENT_TYPENAME typename +# else +# define BOOST_ARG_DEPENDENT_TYPENAME +# endif + +# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + +// GCC-2.95 eagerly instantiates templated constructors and conversion +// operators in convertibility checks, causing premature errors. +// +// Borland's problems are harder to diagnose due to lack of an +// instantiation stack backtrace. They may be due in part to the fact +// that it drops cv-qualification willy-nilly in templates. +# define BOOST_NO_ONE_WAY_ITERATOR_INTEROP +# endif + +// no include guard; multiple inclusion intended diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_undef.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_undef.hpp new file mode 100644 index 00000000..9dcd1d52 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/detail/config_undef.hpp @@ -0,0 +1,25 @@ +// (C) Copyright Thomas Witt 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// no include guard multiple inclusion intended + +// +// This is a temporary workaround until the bulk of this is +// available in boost config. +// 23/02/03 thw +// + +#undef BOOST_NO_IS_CONVERTIBLE +#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE +#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY +#undef BOOST_ARG_DEPENDENT_TYPENAME +#undef BOOST_NO_LVALUE_RETURN_DETECTION +#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP + +#ifdef BOOST_ITERATOR_CONFIG_DEF +# undef BOOST_ITERATOR_CONFIG_DEF +#else +# error missing or nested #include config_def +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/iterator_categories.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/iterator_categories.hpp new file mode 100644 index 00000000..98edfeae --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/iterator/iterator_categories.hpp @@ -0,0 +1,188 @@ +// (C) Copyright Jeremy Siek 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_ITERATOR_CATEGORIES_HPP +# define BOOST_ITERATOR_CATEGORIES_HPP + +# include +# include +# include + +# include + +# include +# include +# include +# include + +# include + +# include + +namespace boost { + +// +// Traversal Categories +// + +struct no_traversal_tag {}; + +struct incrementable_traversal_tag + : no_traversal_tag +{ +// incrementable_traversal_tag() {} +// incrementable_traversal_tag(std::output_iterator_tag const&) {}; +}; + +struct single_pass_traversal_tag + : incrementable_traversal_tag +{ +// single_pass_traversal_tag() {} +// single_pass_traversal_tag(std::input_iterator_tag const&) {}; +}; + +struct forward_traversal_tag + : single_pass_traversal_tag +{ +// forward_traversal_tag() {} +// forward_traversal_tag(std::forward_iterator_tag const&) {}; +}; + +struct bidirectional_traversal_tag + : forward_traversal_tag +{ +// bidirectional_traversal_tag() {}; +// bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {}; +}; + +struct random_access_traversal_tag + : bidirectional_traversal_tag +{ +// random_access_traversal_tag() {}; +// random_access_traversal_tag(std::random_access_iterator_tag const&) {}; +}; + +namespace detail +{ + // + // Convert a "strictly old-style" iterator category to a traversal + // tag. This is broken out into a separate metafunction to reduce + // the cost of instantiating iterator_category_to_traversal, below, + // for new-style types. + // + template + struct old_category_to_traversal + : mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , void + > + > + > + > + > + {}; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template <> + struct old_category_to_traversal + { + typedef int type; + }; +# endif + + template + struct pure_traversal_tag + : mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , void + > + > + > + > + > + { + }; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template <> + struct pure_traversal_tag + { + typedef int type; + }; +# endif + +} // namespace detail + + +// +// Convert an iterator category into a traversal tag +// +template +struct iterator_category_to_traversal + : mpl::eval_if< // if already convertible to a traversal tag, we're done. + is_convertible + , mpl::identity + , boost::detail::old_category_to_traversal + > +{}; + +// Trait to get an iterator's traversal category +template +struct iterator_traversal + : iterator_category_to_traversal< + typename boost::detail::iterator_traits::iterator_category + > +{}; + +# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT +// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work +// out well. Instantiating the nested apply template also +// requires instantiating iterator_traits on the +// placeholder. Instead we just specialize it as a metafunction +// class. +template <> +struct iterator_traversal +{ + template + struct apply : iterator_traversal + {}; +}; +template <> +struct iterator_traversal + : iterator_traversal +{}; +# endif + +} // namespace boost + +#include + +#endif // BOOST_ITERATOR_CATEGORIES_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/limits.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/limits.hpp new file mode 100644 index 00000000..c684c90d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/limits.hpp @@ -0,0 +1,146 @@ + +// (C) Copyright John maddock 1999. +// (C) David Abrahams 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// use this header as a workaround for missing + +// See http://www.boost.org/libs/compatibility/index.html for documentation. + +#ifndef BOOST_LIMITS +#define BOOST_LIMITS + +#include + +#ifdef BOOST_NO_LIMITS +# include +#else +# include +#endif + +#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \ + || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)) +// Add missing specializations for numeric_limits: +#ifdef BOOST_HAS_MS_INT64 +# define BOOST_LLT __int64 +# define BOOST_ULLT unsigned __int64 +#else +# define BOOST_LLT ::boost::long_long_type +# define BOOST_ULLT ::boost::ulong_long_type +#endif + +#include // for CHAR_BIT + +namespace std +{ + template<> + class numeric_limits + { + public: + + BOOST_STATIC_CONSTANT(bool, is_specialized = true); +#ifdef BOOST_HAS_MS_INT64 + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; } +#elif defined(LLONG_MAX) + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; } +#elif defined(LONGLONG_MAX) + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; } +#else + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); } +#endif + BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1); + BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000); + BOOST_STATIC_CONSTANT(bool, is_signed = true); + BOOST_STATIC_CONSTANT(bool, is_integer = true); + BOOST_STATIC_CONSTANT(bool, is_exact = true); + BOOST_STATIC_CONSTANT(int, radix = 2); + static BOOST_LLT epsilon() throw() { return 0; }; + static BOOST_LLT round_error() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(int, min_exponent = 0); + BOOST_STATIC_CONSTANT(int, min_exponent10 = 0); + BOOST_STATIC_CONSTANT(int, max_exponent = 0); + BOOST_STATIC_CONSTANT(int, max_exponent10 = 0); + + BOOST_STATIC_CONSTANT(bool, has_infinity = false); + BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_denorm = false); + BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false); + static BOOST_LLT infinity() throw() { return 0; }; + static BOOST_LLT quiet_NaN() throw() { return 0; }; + static BOOST_LLT signaling_NaN() throw() { return 0; }; + static BOOST_LLT denorm_min() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(bool, is_iec559 = false); + BOOST_STATIC_CONSTANT(bool, is_bounded = true); + BOOST_STATIC_CONSTANT(bool, is_modulo = true); + + BOOST_STATIC_CONSTANT(bool, traps = false); + BOOST_STATIC_CONSTANT(bool, tinyness_before = false); + BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero); + + }; + + template<> + class numeric_limits + { + public: + + BOOST_STATIC_CONSTANT(bool, is_specialized = true); +#ifdef BOOST_HAS_MS_INT64 + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; } +#elif defined(ULLONG_MAX) && defined(ULLONG_MIN) + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; } +#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN) + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; } +#else + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; } +#endif + BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT); + BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000); + BOOST_STATIC_CONSTANT(bool, is_signed = false); + BOOST_STATIC_CONSTANT(bool, is_integer = true); + BOOST_STATIC_CONSTANT(bool, is_exact = true); + BOOST_STATIC_CONSTANT(int, radix = 2); + static BOOST_ULLT epsilon() throw() { return 0; }; + static BOOST_ULLT round_error() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(int, min_exponent = 0); + BOOST_STATIC_CONSTANT(int, min_exponent10 = 0); + BOOST_STATIC_CONSTANT(int, max_exponent = 0); + BOOST_STATIC_CONSTANT(int, max_exponent10 = 0); + + BOOST_STATIC_CONSTANT(bool, has_infinity = false); + BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_denorm = false); + BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false); + static BOOST_ULLT infinity() throw() { return 0; }; + static BOOST_ULLT quiet_NaN() throw() { return 0; }; + static BOOST_ULLT signaling_NaN() throw() { return 0; }; + static BOOST_ULLT denorm_min() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(bool, is_iec559 = false); + BOOST_STATIC_CONSTANT(bool, is_bounded = true); + BOOST_STATIC_CONSTANT(bool, is_modulo = true); + + BOOST_STATIC_CONSTANT(bool, traps = false); + BOOST_STATIC_CONSTANT(bool, tinyness_before = false); + BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero); + + }; +} +#endif + +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/and.hpp new file mode 100644 index 00000000..1e70f76e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/and.hpp @@ -0,0 +1,60 @@ + +#ifndef BOOST_MPL_AND_HPP_INCLUDED +#define BOOST_MPL_AND_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: and.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# include +# include +# include +# include + +// agurt, 19/may/04: workaround a conflict with header's +// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)' +// has to be checked in a separate condition, otherwise GCC complains +// about 'and' being an alternative token +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(and) +# pragma push_macro("and") +# undef and +# define and(x) +#endif +#endif +#endif + +# define BOOST_MPL_PREPROCESSED_HEADER and.hpp +# include + +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(and) +# pragma pop_macro("and") +#endif +#endif +#endif + +#else + +# define AUX778076_OP_NAME and_ +# define AUX778076_OP_VALUE1 false +# define AUX778076_OP_VALUE2 true +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AND_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg.hpp new file mode 100644 index 00000000..3461655e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg.hpp @@ -0,0 +1,131 @@ + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_ARG_HPP_INCLUDED +#define BOOST_MPL_ARG_HPP_INCLUDED + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +#endif + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER arg.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include + +# include +# include +# include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +// local macro, #undef-ined at the end of the header +#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \ + BOOST_MPL_PP_DEFAULT_PARAMS( \ + BOOST_MPL_LIMIT_METAFUNCTION_ARITY \ + , param \ + , value \ + ) \ + /**/ +#else +# define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \ + BOOST_MPL_PP_PARAMS( \ + BOOST_MPL_LIMIT_METAFUNCTION_ARITY \ + , param \ + ) \ + /**/ +#endif + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, )) +#include BOOST_PP_ITERATE() + + +# undef AUX778076_ARG_N_DEFAULT_PARAMS + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int,arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_ARG_HPP_INCLUDED + +///// iteration + +#else +#define i_ BOOST_PP_FRAME_ITERATION(1) + +#if i_ > 0 + +template<> struct arg +{ + BOOST_STATIC_CONSTANT(int, value = i_); + typedef arg next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na) + > + struct apply + { + typedef BOOST_PP_CAT(U,i_) type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +#else + +template<> struct arg<-1> +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na) + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +#endif // i_ > 0 + +#undef i_ +#endif // BOOST_PP_IS_ITERATING diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg_fwd.hpp new file mode 100644 index 00000000..b6e1494f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/arg_fwd.hpp @@ -0,0 +1,28 @@ + +#ifndef BOOST_MPL_ARG_FWD_HPP_INCLUDED +#define BOOST_MPL_ARG_FWD_HPP_INCLUDED + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arg_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arg; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(arg) + +#endif // BOOST_MPL_ARG_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/assert.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/assert.hpp new file mode 100644 index 00000000..316f3e92 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/assert.hpp @@ -0,0 +1,370 @@ + +#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED +#define BOOST_MPL_ASSERT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include // make sure 'size_t' is placed into 'std' +#include + + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || (BOOST_MPL_CFG_GCC != 0) \ + || BOOST_WORKAROUND(__IBMCPP__, <= 600) +# define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES +#endif + +#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \ + || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +# define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER +#endif + +// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants) +// and GCC (which issues "unused variable" warnings when static constants are used +// at a function scope) +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || (BOOST_MPL_CFG_GCC != 0) +# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr } +#else +# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr) +#endif + + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +struct failed {}; + +// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept +// 'assert' by reference; can't apply it unconditionally -- apparently it +// degrades the quality of GCC diagnostics +#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) +# define AUX778076_ASSERT_ARG(x) x& +#else +# define AUX778076_ASSERT_ARG(x) x +#endif + +template< bool C > struct assert { typedef void* type; }; +template<> struct assert { typedef AUX778076_ASSERT_ARG(assert) type; }; + +template< bool C > +int assertion_failed( typename assert::type ); + +template< bool C > +struct assertion +{ + static int failed( assert ); +}; + +template<> +struct assertion +{ + static int failed( void* ); +}; + +struct assert_ +{ +#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) + template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {}; +#endif + static assert_ const arg; + enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal }; +}; + + +#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES) + +bool operator==( failed, failed ); +bool operator!=( failed, failed ); +bool operator>( failed, failed ); +bool operator>=( failed, failed ); +bool operator<( failed, failed ); +bool operator<=( failed, failed ); + +#if defined(__EDG_VERSION__) +template< bool (*)(failed, failed), long x, long y > struct assert_relation {}; +# define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation +#else +template< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) > +struct assert_relation {}; +# define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation +#endif + +#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES + +boost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ ); +boost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ ); +boost::mpl::aux::weighted_tag<3>::type operator>( assert_, assert_ ); +boost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ ); +boost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ ); +boost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ ); + +template< assert_::relations r, long x, long y > struct assert_relation {}; + +#endif + + +#if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER) + +template< bool > struct assert_arg_pred_impl { typedef int type; }; +template<> struct assert_arg_pred_impl { typedef void* type; }; + +template< typename P > struct assert_arg_pred +{ + typedef typename P::type p_type; + typedef typename assert_arg_pred_impl< p_type::value >::type type; +}; + +template< typename P > struct assert_arg_pred_not +{ + typedef typename P::type p_type; + BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value ); + typedef typename assert_arg_pred_impl

::type type; +}; + +template< typename Pred > +failed ************ (Pred::************ + assert_arg( void (*)(Pred), typename assert_arg_pred::type ) + ); + +template< typename Pred > +failed ************ (boost::mpl::not_::************ + assert_not_arg( void (*)(Pred), typename assert_arg_pred_not::type ) + ); + +template< typename Pred > +AUX778076_ASSERT_ARG(assert) +assert_arg( void (*)(Pred), typename assert_arg_pred_not::type ); + +template< typename Pred > +AUX778076_ASSERT_ARG(assert) +assert_not_arg( void (*)(Pred), typename assert_arg_pred::type ); + + +#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER + +template< bool c, typename Pred > struct assert_arg_type_impl +{ + typedef failed ************ Pred::* mwcw83_wknd; + typedef mwcw83_wknd ************* type; +}; + +template< typename Pred > struct assert_arg_type_impl +{ + typedef AUX778076_ASSERT_ARG(assert) type; +}; + +template< typename Pred > struct assert_arg_type + : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred > +{ +}; + +template< typename Pred > +typename assert_arg_type::type +assert_arg(void (*)(Pred), int); + +template< typename Pred > +typename assert_arg_type< boost::mpl::not_ >::type +assert_not_arg(void (*)(Pred), int); + +# if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES) +template< long x, long y, bool (*r)(failed, failed) > +typename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type +assert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) ); +# else +template< assert_::relations r, long x, long y > +typename assert_arg_type_impl< false,assert_relation >::type +assert_rel_arg( assert_relation ); +# endif + +#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER + +#undef AUX778076_ASSERT_ARG + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + + +// BOOST_MPL_ASSERT((pred)) + +#define BOOST_MPL_ASSERT(pred) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed( \ + boost::mpl::assert_arg( (void (*) pred)0, 1 ) \ + ) \ + ) \ + ) \ +/**/ + +// BOOST_MPL_ASSERT_NOT((pred)) + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +# define BOOST_MPL_ASSERT_NOT(pred) \ +enum { \ + BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion::failed( \ + boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \ + ) \ + ) \ +}\ +/**/ +#else +# define BOOST_MPL_ASSERT_NOT(pred) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed( \ + boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \ + ) \ + ) \ + ) \ +/**/ +#endif + +// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y) + +#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES) + +# if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER) +// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518 +# define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y) \ +enum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed( \ + (boost::mpl::failed ************ ( boost::mpl::assert_relation< \ + boost::mpl::assert_::relations( sizeof( \ + boost::mpl::assert_::arg rel boost::mpl::assert_::arg \ + ) ) \ + , x \ + , y \ + >::************)) 0 ) \ + ) \ + ) \ +/**/ +# else +# define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \ + boost::mpl::assert_::arg rel boost::mpl::assert_::arg \ + ) \ + ); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed( \ + boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \ + boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \ + , x \ + , y \ + >() ) \ + ) \ + ) \ + ) \ +/**/ +# endif + +# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \ +BOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \ +/**/ + +#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES + +# if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER) +# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed<(x rel y)>( boost::mpl::assert_rel_arg( \ + boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))() \ + ) ) \ + ) \ + ) \ +/**/ +# else +# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed<(x rel y)>( (boost::mpl::failed ************ ( \ + boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))::************))0 ) \ + ) \ + ) \ +/**/ +# endif + +#endif + + +// BOOST_MPL_ASSERT_MSG( (pred::value), USER_PROVIDED_MESSAGE, (types) ) + +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) +# define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \ +struct msg; \ +typedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \ +{ \ + using boost::mpl::assert_::types; \ + static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \ + { return 0; } \ +} BOOST_PP_CAT(mpl_assert_arg,counter); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \ + ) \ + ) \ +/**/ +#else +# define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \ +struct msg; \ +typedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \ +{ \ + static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \ + { return 0; } \ +} BOOST_PP_CAT(mpl_assert_arg,counter); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \ + ) \ + ) \ +/**/ +#endif + +#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \ +BOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \ +/**/ + +#endif // BOOST_MPL_ASSERT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/adl_barrier.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/adl_barrier.hpp new file mode 100644 index 00000000..45fbad8d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/adl_barrier.hpp @@ -0,0 +1,48 @@ + +#ifndef BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED +#define BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: adl_barrier.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) + +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE mpl_ +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace mpl_ { +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE } +# define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \ + namespace boost { namespace mpl { \ + using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \ + } } \ +/**/ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} } +namespace boost { namespace mpl { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE; +namespace aux { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; } +}} +#endif + +#else // BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE + +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE boost::mpl +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace boost { namespace mpl { +# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }} +# define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/ + +#endif + +#endif // BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arg_typedef.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arg_typedef.hpp new file mode 100644 index 00000000..863ff7c6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arg_typedef.hpp @@ -0,0 +1,31 @@ + +#ifndef BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED +#define BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arg_typedef.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) + +# define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) typedef T name; + +#else + +# define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) /**/ + +#endif + +#endif // BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity.hpp new file mode 100644 index 00000000..76b8d1b2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_AUX_ARITY_HPP_INCLUDED +#define BOOST_MPL_AUX_ARITY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) + +# include +# include + +namespace boost { namespace mpl { namespace aux { + +// agurt, 15/mar/02: it's possible to implement the template so that it will +// "just work" and do not require any specialization, but not on the compilers +// that require the arity workaround in the first place +template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) > +struct arity +{ + BOOST_STATIC_CONSTANT(int, value = N); +}; + +}}} + +#endif // BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES + +#endif // BOOST_MPL_AUX_ARITY_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity_spec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity_spec.hpp new file mode 100644 index 00000000..005df63e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/arity_spec.hpp @@ -0,0 +1,67 @@ + +#ifndef BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED +#define BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arity_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) \ +namespace aux { \ +template< BOOST_MPL_AUX_NTTP_DECL(int, N), BOOST_MPL_PP_PARAMS(i,type T) > \ +struct arity< \ + name< BOOST_MPL_PP_PARAMS(i,T) > \ + , N \ + > \ +{ \ + BOOST_STATIC_CONSTANT(int \ + , value = BOOST_MPL_LIMIT_METAFUNCTION_ARITY \ + ); \ +}; \ +} \ +/**/ +#else +# define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) /**/ +#endif + +# define BOOST_MPL_AUX_ARITY_SPEC(i,name) \ + BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,typename,name) \ +/**/ + + +#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \ + && !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) +# define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) \ +namespace aux { \ +template< BOOST_MPL_PP_PARAMS(i,typename T) > \ +struct template_arity< name > \ + : int_ \ +{ \ +}; \ +} \ +/**/ +#else +# define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/ +#endif + + +#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/adl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/adl.hpp new file mode 100644 index 00000000..69dd5282 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/adl.hpp @@ -0,0 +1,40 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: adl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +// agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC, +// but putting everything expect public, user-specializable metafunctions into +// a separate global namespace has a nice side effect of reducing the length +// of template instantiation symbols, so we apply the workaround on all +// platforms that can handle it + +#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \ + && ( BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \ + || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \ + || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) \ + ) + +# define BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/arrays.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/arrays.hpp new file mode 100644 index 00000000..b8cb7f47 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/arrays.hpp @@ -0,0 +1,30 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arrays.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + ) + +# define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/compiler.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/compiler.hpp new file mode 100644 index 00000000..e64719b4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/compiler.hpp @@ -0,0 +1,66 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: compiler.hpp 53189 2009-05-22 20:07:55Z hkaiser $ +// $Date: 2009-05-22 16:07:55 -0400 (Fri, 22 May 2009) $ +// $Revision: 53189 $ + +#if !defined(BOOST_MPL_CFG_COMPILER_DIR) + +# include +# include +# include +# include +# include +# include + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# define BOOST_MPL_CFG_COMPILER_DIR msvc60 + +# elif BOOST_WORKAROUND(BOOST_MSVC, == 1300) +# define BOOST_MPL_CFG_COMPILER_DIR msvc70 + +# elif BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) +# define BOOST_MPL_CFG_COMPILER_DIR gcc + +# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) +# if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_CFG_COMPILER_DIR bcc551 +# elif BOOST_WORKAROUND(__BORLANDC__, >= 0x590) +# define BOOST_MPL_CFG_COMPILER_DIR bcc +# else +# define BOOST_MPL_CFG_COMPILER_DIR bcc_pre590 +# endif + +# elif BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +# define BOOST_MPL_CFG_COMPILER_DIR dmc + +# elif defined(__MWERKS__) +# if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_CFG_COMPILER_DIR mwcw +# else +# define BOOST_MPL_CFG_COMPILER_DIR plain +# endif + +# elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# define BOOST_MPL_CFG_COMPILER_DIR no_ctps + +# elif defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) +# define BOOST_MPL_CFG_COMPILER_DIR no_ttp + +# else +# define BOOST_MPL_CFG_COMPILER_DIR plain +# endif + +#endif // BOOST_MPL_CFG_COMPILER_DIR + +#endif // BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ctps.hpp new file mode 100644 index 00000000..11b2c31a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ctps.hpp @@ -0,0 +1,30 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, < 0x582) + +# define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC + +#endif + +// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in + +#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/dtp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/dtp.hpp new file mode 100644 index 00000000..18ae1dab --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/dtp.hpp @@ -0,0 +1,46 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: dtp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// MWCW 7.x-8.0 "losts" default template parameters of nested class +// templates when their owner classes are passed as arguments to other +// templates; Borland 5.5.1 "forgets" them from the very beginning (if +// the owner class is a class template), and Borland 5.6 isn't even +// able to compile a definition of nested class template with DTP + +#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, >= 0x560) \ + && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) + +# define BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES + +#endif + + +#if !defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(__MWERKS__, <= 0x3001) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \ + ) + +# define BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/eti.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/eti.hpp new file mode 100644 index 00000000..a9983d1f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/eti.hpp @@ -0,0 +1,47 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: eti.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// flags for MSVC 6.5's so-called "early template instantiation bug" +#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +# define BOOST_MPL_CFG_MSVC_60_ETI_BUG + +#endif + +#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(BOOST_MSVC, == 1300) + +# define BOOST_MPL_CFG_MSVC_70_ETI_BUG + +#endif + +#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \ + || defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \ + ) + +# define BOOST_MPL_CFG_MSVC_ETI_BUG + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/gcc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/gcc.hpp new file mode 100644 index 00000000..3380d613 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/gcc.hpp @@ -0,0 +1,23 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: gcc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(__GNUC__) && !defined(__EDG_VERSION__) +# define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__) +#else +# define BOOST_MPL_CFG_GCC 0 +#endif + +#endif // BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/has_xxx.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/has_xxx.hpp new file mode 100644 index 00000000..54c3fb25 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/has_xxx.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// Copyright David Abrahams 2002-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: has_xxx.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// agurt, 11/jan/03: signals a stub-only 'has_xxx' implementation + +#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) \ + && ( defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \ + || BOOST_WORKAROUND(__GNUC__, <= 2) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \ + ) + +# define BOOST_MPL_CFG_NO_HAS_XXX + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/integral.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/integral.hpp new file mode 100644 index 00000000..aafe3aa7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/integral.hpp @@ -0,0 +1,38 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: integral.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) + +# define BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS + +#endif + +#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \ + ) + +# define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/intel.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/intel.hpp new file mode 100644 index 00000000..4fd77a9a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/intel.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: intel.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +// BOOST_INTEL_CXX_VERSION is defined here: +#include + +#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/lambda.hpp new file mode 100644 index 00000000..fc7d0674 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/lambda.hpp @@ -0,0 +1,32 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// agurt, 15/jan/02: full-fledged implementation requires both +// template template parameters _and_ partial specialization + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \ + && ( defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ + || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + ) + +# define BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc.hpp new file mode 100644 index 00000000..5abf8f41 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: msvc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +// BOOST_MSVC is defined here: +#include + +#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc_typename.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc_typename.hpp new file mode 100644 index 00000000..78a1c2f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/msvc_typename.hpp @@ -0,0 +1,26 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: msvc_typename.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +# define BOOST_MSVC_TYPENAME +#else +# define BOOST_MSVC_TYPENAME typename +#endif + +#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/nttp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/nttp.hpp new file mode 100644 index 00000000..d24529e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/nttp.hpp @@ -0,0 +1,41 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: nttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// MSVC 6.5 ICE-s on the code as simple as this (see "aux_/nttp_decl.hpp" +// for a workaround): +// +// namespace std { +// template< typename Char > struct string; +// } +// +// void foo(std::string); +// +// namespace boost { namespace mpl { +// template< int > struct arg; +// }} + +#if !defined(BOOST_MPL_CFG_NTTP_BUG) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +# define BOOST_MPL_CFG_NTTP_BUG + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/overload_resolution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/overload_resolution.hpp new file mode 100644 index 00000000..2a91c05a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/overload_resolution.hpp @@ -0,0 +1,29 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: overload_resolution.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(__BORLANDC__, < 0x590) \ + || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \ + ) + +# define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/pp_counter.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/pp_counter.hpp new file mode 100644 index 00000000..cd3329bc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/pp_counter.hpp @@ -0,0 +1,26 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: pp_counter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_AUX_PP_COUNTER) +# include +# if BOOST_WORKAROUND(BOOST_MSVC, >= 1300) +# define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__ +# else +# define BOOST_MPL_AUX_PP_COUNTER() __LINE__ +# endif +#endif + +#endif // BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/preprocessor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/preprocessor.hpp new file mode 100644 index 00000000..68b37aea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/preprocessor.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: preprocessor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \ + && ( BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \ + || BOOST_WORKAROUND(__BORLANDC__, < 0x582) \ + || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \ + ) + +# define BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION + +#endif + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) +# define BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES +#endif + +#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) \ + && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +# define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING +#endif + + +#endif // BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/static_constant.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/static_constant.hpp new file mode 100644 index 00000000..00e6ba93 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/static_constant.hpp @@ -0,0 +1,25 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: static_constant.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +// BOOST_STATIC_CONSTANT is defined here: +# include +#else +// undef the macro for the preprocessing mode +# undef BOOST_STATIC_CONSTANT +#endif + +#endif // BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ttp.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ttp.hpp new file mode 100644 index 00000000..dbf35d25 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/ttp.hpp @@ -0,0 +1,41 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: ttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ + && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \ + || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \ + ) + +# define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS + +#endif + + +#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + ) + +# define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/use_preprocessed.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/use_preprocessed.hpp new file mode 100644 index 00000000..3bbc2296 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/use_preprocessed.hpp @@ -0,0 +1,19 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: use_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/workaround.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/workaround.hpp new file mode 100644 index 00000000..fd779476 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/config/workaround.hpp @@ -0,0 +1,19 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: workaround.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/include_preprocessed.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/include_preprocessed.hpp new file mode 100644 index 00000000..b050baa1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/include_preprocessed.hpp @@ -0,0 +1,42 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2000-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) +# define AUX778076_PREPROCESSED_HEADER \ + BOOST_MPL_CFG_COMPILER_DIR/BOOST_MPL_PREPROCESSED_HEADER \ +/**/ +#else +# define AUX778076_PREPROCESSED_HEADER \ + BOOST_PP_CAT(BOOST_MPL_CFG_COMPILER_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \ +/**/ +#endif + +#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700)) +# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(carve/external/boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER) +# include AUX778076_INCLUDE_STRING +# undef AUX778076_INCLUDE_STRING +#else +# include BOOST_PP_STRINGIZE(carve/external/boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER) +#endif + +# undef AUX778076_PREPROCESSED_HEADER + +#undef BOOST_MPL_PREPROCESSED_HEADER diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/integral_wrapper.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/integral_wrapper.hpp new file mode 100644 index 00000000..d9e8dca4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/integral_wrapper.hpp @@ -0,0 +1,93 @@ + +// Copyright Aleksey Gurtovoy 2000-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: integral_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#include +#include +#include +#include +#include + +#include + +#if !defined(AUX_WRAPPER_NAME) +# define AUX_WRAPPER_NAME BOOST_PP_CAT(AUX_WRAPPER_VALUE_TYPE,_) +#endif + +#if !defined(AUX_WRAPPER_PARAMS) +# define AUX_WRAPPER_PARAMS(N) BOOST_MPL_AUX_NTTP_DECL(AUX_WRAPPER_VALUE_TYPE, N) +#endif + +#if !defined(AUX_WRAPPER_INST) +# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) +# define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< value > +# else +# define AUX_WRAPPER_INST(value) BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::AUX_WRAPPER_NAME< value > +# endif +#endif + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< AUX_WRAPPER_PARAMS(N) > +struct AUX_WRAPPER_NAME +{ + BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N); +// agurt, 08/mar/03: SGI MIPSpro C++ workaround, have to #ifdef because some +// other compilers (e.g. MSVC) are not particulary happy about it +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + typedef struct AUX_WRAPPER_NAME type; +#else + typedef AUX_WRAPPER_NAME type; +#endif + typedef AUX_WRAPPER_VALUE_TYPE value_type; + typedef integral_c_tag tag; + +// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC), +// while some other don't like 'value + 1' (Borland), and some don't like +// either +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) + private: + BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1))); + BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1))); + public: + typedef AUX_WRAPPER_INST(next_value) next; + typedef AUX_WRAPPER_INST(prior_value) prior; +#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \ + || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \ + || (BOOST_WORKAROUND(__HP_aCC, <= 53800) && (BOOST_WORKAROUND(__hpxstd98, != 1))) + typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)) ) next; + typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)) ) prior; +#else + typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value + 1)) ) next; + typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior; +#endif + + // enables uniform function call syntax for families of overloaded + // functions that return objects of both arithmetic ('int', 'long', + // 'double', etc.) and wrapped integral types (for an example, see + // "mpl/example/power.cpp") + operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast(this->value); } +}; + +#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) +template< AUX_WRAPPER_PARAMS(N) > +AUX_WRAPPER_VALUE_TYPE const AUX_WRAPPER_INST(N)::value; +#endif + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +#undef AUX_WRAPPER_NAME +#undef AUX_WRAPPER_PARAMS +#undef AUX_WRAPPER_INST +#undef AUX_WRAPPER_VALUE_TYPE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_arity_param.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_arity_param.hpp new file mode 100644 index 00000000..b2a2befa --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_arity_param.hpp @@ -0,0 +1,25 @@ + +#ifndef BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED +#define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: lambda_arity_param.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) +# define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) +#else +# define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) , param +#endif + +#endif // BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_support.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_support.hpp new file mode 100644 index 00000000..f2300ff5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/lambda_support.hpp @@ -0,0 +1,169 @@ + +#ifndef BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED +#define BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: lambda_support.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) /**/ +# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i,name,params) /**/ + +#else + +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC(R,typedef_,i,param) \ + typedef_ param BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \ + /**/ + +// agurt, 07/mar/03: restore an old revision for the sake of SGI MIPSpro C++ +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \ + typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_ arity; \ + BOOST_PP_LIST_FOR_EACH_I_R( \ + 1 \ + , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \ + , typedef \ + , BOOST_PP_TUPLE_TO_LIST(i,params) \ + ) \ + struct rebind \ + { \ + template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \ + : name< BOOST_MPL_PP_PARAMS(i,U) > \ + { \ + }; \ + }; \ + /**/ + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \ + /**/ + +#elif BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION) +// agurt, 18/jan/03: old EDG-based compilers actually enforce 11.4 para 9 +// (in strict mode), so we have to provide an alternative to the +// MSVC-optimized implementation + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ + typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_ arity; \ + BOOST_PP_LIST_FOR_EACH_I_R( \ + 1 \ + , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \ + , typedef \ + , BOOST_PP_TUPLE_TO_LIST(i,params) \ + ) \ + struct rebind; \ +/**/ + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ +}; \ +template< BOOST_MPL_PP_PARAMS(i,typename T) > \ +struct name::rebind \ +{ \ + template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \ + : name< BOOST_MPL_PP_PARAMS(i,U) > \ + { \ + }; \ +/**/ + +#else // __EDG_VERSION__ + +namespace boost { namespace mpl { namespace aux { +template< typename T > struct has_rebind_tag; +}}} + +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ + typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_ arity; \ + BOOST_PP_LIST_FOR_EACH_I_R( \ + 1 \ + , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \ + , typedef \ + , BOOST_PP_TUPLE_TO_LIST(i,params) \ + ) \ + friend class BOOST_PP_CAT(name,_rebind); \ + typedef BOOST_PP_CAT(name,_rebind) rebind; \ +/**/ + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \ +template< BOOST_MPL_PP_PARAMS(i,typename T) > \ +::boost::mpl::aux::yes_tag operator|( \ + ::boost::mpl::aux::has_rebind_tag \ + , name* \ + ); \ +::boost::mpl::aux::no_tag operator|( \ + ::boost::mpl::aux::has_rebind_tag \ + , name< BOOST_MPL_PP_ENUM(i,::boost::mpl::na) >* \ + ); \ +/**/ +#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \ +template< BOOST_MPL_PP_PARAMS(i,typename T) > \ +::boost::mpl::aux::yes_tag operator|( \ + ::boost::mpl::aux::has_rebind_tag \ + , ::boost::mpl::aux::has_rebind_tag< name >* \ + ); \ +/**/ +#else +# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/ +#endif + +# if !defined(__BORLANDC__) +# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ +}; \ +BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \ +class BOOST_PP_CAT(name,_rebind) \ +{ \ + public: \ + template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \ + : name< BOOST_MPL_PP_PARAMS(i,U) > \ + { \ + }; \ +/**/ +# else +# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \ +}; \ +BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \ +class BOOST_PP_CAT(name,_rebind) \ +{ \ + public: \ + template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \ + { \ + typedef typename name< BOOST_MPL_PP_PARAMS(i,U) >::type type; \ + }; \ +/**/ +# endif // __BORLANDC__ + +#endif // __EDG_VERSION__ + +#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT + +#endif // BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/logical_op.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/logical_op.hpp new file mode 100644 index 00000000..02c0364c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/logical_op.hpp @@ -0,0 +1,165 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: logical_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace boost { namespace mpl { + +# define AUX778076_PARAMS(param, sub) \ + BOOST_MPL_PP_PARAMS( \ + BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, sub) \ + , param \ + ) \ + /**/ + +# define AUX778076_SHIFTED_PARAMS(param, sub) \ + BOOST_MPL_PP_EXT_PARAMS( \ + 2, BOOST_MPL_PP_SUB(BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY), sub) \ + , param \ + ) \ + /**/ + +# define AUX778076_SPEC_PARAMS(param) \ + BOOST_MPL_PP_ENUM( \ + BOOST_PP_DEC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \ + , param \ + ) \ + /**/ + +namespace aux { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< bool C_, AUX778076_PARAMS(typename T, 1) > +struct BOOST_PP_CAT(AUX778076_OP_NAME,impl) + : BOOST_PP_CAT(AUX778076_OP_VALUE1,_) +{ +}; + +template< AUX778076_PARAMS(typename T, 1) > +struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)< AUX778076_OP_VALUE2,AUX778076_PARAMS(T, 1) > + : BOOST_PP_CAT(AUX778076_OP_NAME,impl)< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , AUX778076_SHIFTED_PARAMS(T, 1) + , BOOST_PP_CAT(AUX778076_OP_VALUE2,_) + > +{ +}; + +template<> +struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)< + AUX778076_OP_VALUE2 + , AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) + > + : BOOST_PP_CAT(AUX778076_OP_VALUE2,_) +{ +}; + +#else + +template< bool C_ > struct BOOST_PP_CAT(AUX778076_OP_NAME,impl) +{ + template< AUX778076_PARAMS(typename T, 1) > struct result_ + : BOOST_PP_CAT(AUX778076_OP_VALUE1,_) + { + }; +}; + +template<> struct BOOST_PP_CAT(AUX778076_OP_NAME,impl) +{ + template< AUX778076_PARAMS(typename T, 1) > struct result_ + : BOOST_PP_CAT(AUX778076_OP_NAME,impl)< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< AUX778076_SHIFTED_PARAMS(T,1),BOOST_PP_CAT(AUX778076_OP_VALUE2,_) > + { + }; + +#if BOOST_WORKAROUND(BOOST_MSVC, == 1300) + template<> struct result_ + : BOOST_PP_CAT(AUX778076_OP_VALUE2,_) + { + }; +}; +#else +}; + +template<> +struct BOOST_PP_CAT(AUX778076_OP_NAME,impl) + ::result_< AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) > + : BOOST_PP_CAT(AUX778076_OP_VALUE2,_) +{ +}; +#endif // BOOST_MSVC == 1300 + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename T, BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) + > +struct AUX778076_OP_NAME +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , AUX778076_SHIFTED_PARAMS(T,0) + > +#else + : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< AUX778076_SHIFTED_PARAMS(T,0) > +#endif +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + BOOST_MPL_LIMIT_METAFUNCTION_ARITY + , AUX778076_OP_NAME + , (AUX778076_PARAMS(T, 0)) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , BOOST_MPL_LIMIT_METAFUNCTION_ARITY + , AUX778076_OP_NAME + ) + +}} + +#undef AUX778076_SPEC_PARAMS +#undef AUX778076_SHIFTED_PARAMS +#undef AUX778076_PARAMS +#undef AUX778076_OP_NAME +#undef AUX778076_OP_VALUE1 +#undef AUX778076_OP_VALUE2 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/msvc_never_true.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/msvc_never_true.hpp new file mode 100644 index 00000000..bc771520 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/msvc_never_true.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED +#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: msvc_never_true.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +namespace boost { namespace mpl { namespace aux { + +template< typename T > +struct msvc_never_true +{ + enum { value = false }; +}; + +}}} + +#endif // BOOST_MSVC + +#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na.hpp new file mode 100644 index 00000000..6d97beff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na.hpp @@ -0,0 +1,95 @@ + +#ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED +#define BOOST_MPL_AUX_NA_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template< typename T > +struct is_na + : false_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + using false_::value; +#endif +}; + +template<> +struct is_na + : true_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + using true_::value; +#endif +}; + +template< typename T > +struct is_not_na + : true_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + using true_::value; +#endif +}; + +template<> +struct is_not_na + : false_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + using false_::value; +#endif +}; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +template< typename T, typename U > struct if_na +{ + typedef T type; +}; + +template< typename U > struct if_na +{ + typedef U type; +}; +#else +template< typename T > struct if_na_impl +{ + template< typename U > struct apply + { + typedef T type; + }; +}; + +template<> struct if_na_impl +{ + template< typename U > struct apply + { + typedef U type; + }; +}; + +template< typename T, typename U > struct if_na + : if_na_impl::template apply +{ +}; +#endif + +}} + +#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_assert.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_assert.hpp new file mode 100644 index 00000000..e0010511 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_assert.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED +#define BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: na_assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) +# include +# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \ + BOOST_MPL_ASSERT_NOT((boost::mpl::is_na)) \ +/**/ +#else +# include +# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \ + BOOST_STATIC_ASSERT(!boost::mpl::is_na::value) \ +/**/ +#endif + +#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_fwd.hpp new file mode 100644 index 00000000..01314701 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_fwd.hpp @@ -0,0 +1,31 @@ + +#ifndef BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED +#define BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: na_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +// n.a. == not available +struct na +{ + typedef na type; + enum { value = 0 }; +}; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(na) + +#endif // BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_spec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_spec.hpp new file mode 100644 index 00000000..fba827dd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/na_spec.hpp @@ -0,0 +1,175 @@ + +#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED +#define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: na_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define BOOST_MPL_AUX_NA_PARAMS(i) \ + BOOST_MPL_PP_ENUM(i, na) \ +/**/ + +#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \ +namespace aux { \ +template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \ +struct arity< \ + name< BOOST_MPL_AUX_NA_PARAMS(i) > \ + , N \ + > \ + : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \ +{ \ +}; \ +} \ +/**/ +#else +# define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/ +#endif + +#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \ +template<> \ +struct name< BOOST_MPL_AUX_NA_PARAMS(i) > \ +{ \ + template< \ + BOOST_MPL_PP_PARAMS(i, typename T) \ + BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \ + > \ + struct apply \ + : name< BOOST_MPL_PP_PARAMS(i, T) > \ + { \ + }; \ +}; \ +/**/ + +#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) +# define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \ +template<> \ +struct lambda< \ + name< BOOST_MPL_AUX_NA_PARAMS(i) > \ + , void_ \ + , true_ \ + > \ +{ \ + typedef false_ is_le; \ + typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \ +}; \ +template<> \ +struct lambda< \ + name< BOOST_MPL_AUX_NA_PARAMS(i) > \ + , void_ \ + , false_ \ + > \ +{ \ + typedef false_ is_le; \ + typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \ +}; \ +/**/ +#else +# define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \ +template< typename Tag > \ +struct lambda< \ + name< BOOST_MPL_AUX_NA_PARAMS(i) > \ + , Tag \ + BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \ + > \ +{ \ + typedef false_ is_le; \ + typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \ + typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \ +}; \ +/**/ +#endif + +#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \ + || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \ + && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) +# define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \ +namespace aux { \ +template< BOOST_MPL_PP_PARAMS(j, typename T) > \ +struct template_arity< \ + name< BOOST_MPL_PP_PARAMS(j, T) > \ + > \ + : int_ \ +{ \ +}; \ +\ +template<> \ +struct template_arity< \ + name< BOOST_MPL_PP_ENUM(i, na) > \ + > \ + : int_<-1> \ +{ \ +}; \ +} \ +/**/ +#else +# define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/ +#endif + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) +# define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \ +template<> \ +struct name< BOOST_MPL_PP_ENUM(i, int) > \ +{ \ + typedef int type; \ + enum { value = 0 }; \ +}; \ +/**/ +#else +# define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/ +#endif + +#define BOOST_MPL_AUX_NA_PARAM(param) param = na + +#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \ +BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \ +BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \ +BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \ +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \ +/**/ + +#define BOOST_MPL_AUX_NA_SPEC(i, name) \ +BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \ +BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \ +/**/ + +#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \ +BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \ +BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \ +BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \ +BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \ +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \ +/**/ + + +#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nested_type_wknd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nested_type_wknd.hpp new file mode 100644 index 00000000..380db1c8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nested_type_wknd.hpp @@ -0,0 +1,48 @@ + +#ifndef BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED +#define BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: nested_type_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \ + || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) + +namespace boost { namespace mpl { namespace aux { +template< typename T > struct nested_type_wknd + : T::type +{ +}; +}}} + +#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \ + aux::nested_type_wknd \ +/**/ +#else +# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \ + ::boost::mpl::aux::nested_type_wknd \ +/**/ +#endif + +#else // !BOOST_MPL_CFG_GCC et al. + +# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) T::type + +#endif + +#endif // BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nttp_decl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nttp_decl.hpp new file mode 100644 index 00000000..ec4740ab --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/nttp_decl.hpp @@ -0,0 +1,35 @@ + +#ifndef BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED +#define BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: nttp_decl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if defined(BOOST_MPL_CFG_NTTP_BUG) + +typedef bool _mpl_nttp_bool; +typedef int _mpl_nttp_int; +typedef unsigned _mpl_nttp_unsigned; +typedef long _mpl_nttp_long; + +# include +# define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/ + +#else + +# define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/ + +#endif + +#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp new file mode 100644 index 00000000..5cb50dc0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp new file mode 100644 index 00000000..9654ee33 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/and.hpp new file mode 100644 index 00000000..f3456890 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply.hpp new file mode 100644 index 00000000..bce7c2c3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp new file mode 100644 index 00000000..1ba706ff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp new file mode 100644 index 00000000..45b75c78 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp @@ -0,0 +1,461 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + int N, typename F + > +struct apply_wrap_impl0; + +template< typename F, bool F_has_apply > +struct apply_wrap_impl0_bcb { + typedef typename F::template apply type; +}; + +template< typename F > +struct apply_wrap_impl0_bcb< F,true > { + typedef typename F::apply type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 0 + , F + + > +{ + typedef apply_wrap_impl0_bcb< F, aux::has_apply::value >::type type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 1 + , F + + > +{ + typedef typename F::template apply< + + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 2 + , F + + > +{ + typedef typename F::template apply< + + na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 3 + , F + + > +{ + typedef typename F::template apply< + + na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 4 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 5 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap0 + : apply_wrap_impl0< + ::boost::mpl::aux::arity< F,0 >::value + , F + + >::type +{ +}; + +template< + int N, typename F, typename T1 + > +struct apply_wrap_impl1; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 1 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 2 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 3 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 4 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 5 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 + : apply_wrap_impl1< + ::boost::mpl::aux::arity< F,1 >::value + , F + , T1 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2 + > +struct apply_wrap_impl2; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 2 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 3 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 4 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 5 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 + : apply_wrap_impl2< + ::boost::mpl::aux::arity< F,2 >::value + , F + , T1, T2 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 3 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 4 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 5 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 + : apply_wrap_impl3< + ::boost::mpl::aux::arity< F,3 >::value + , F + , T1, T2, T3 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 4 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 5 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap4 + : apply_wrap_impl4< + ::boost::mpl::aux::arity< F,4 >::value + , F + , T1, T2, T3, T4 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5< + 5 + , F + , T1, T2, T3, T4, T5 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4, T5 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap5 + : apply_wrap_impl5< + ::boost::mpl::aux::arity< F,5 >::value + , F + , T1, T2, T3, T4, T5 + >::type +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/arg.hpp new file mode 100644 index 00000000..3ac43401 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/arg.hpp @@ -0,0 +1,117 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp new file mode 100644 index 00000000..74b00299 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp @@ -0,0 +1,300 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind.hpp new file mode 100644 index 00000000..e769a0cb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind.hpp @@ -0,0 +1,397 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp new file mode 100644 index 00000000..962b5c98 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp new file mode 100644 index 00000000..527b6894 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp new file mode 100644 index 00000000..3f0d5caa --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp new file mode 100644 index 00000000..06996c03 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/deque.hpp new file mode 100644 index 00000000..06505c93 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/divides.hpp new file mode 100644 index 00000000..6b4178a9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp new file mode 100644 index 00000000..901a93c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp new file mode 100644 index 00000000..45ab4e7c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp new file mode 100644 index 00000000..8b2bf590 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp @@ -0,0 +1,558 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Arity + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + , int_<1> + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + , int_<1> + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + , int_<2> + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + , int_<2> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + , int_<3> + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + , int_<3> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + , int_<4> + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + , int_<4> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + , int_<5> + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + , int_<5> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +template< + typename F + , typename Tag1 + , typename Tag2 + , typename Arity + > +struct lambda< + lambda< F,Tag1,Arity > + , Tag2 + , int_<3> + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef bind1< quote1, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater.hpp new file mode 100644 index 00000000..3d1c3dce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp new file mode 100644 index 00000000..fb011866 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp new file mode 100644 index 00000000..6adcc014 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp @@ -0,0 +1,139 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1, typename T2, typename T3, typename T4, typename T5 + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp new file mode 100644 index 00000000..b767e958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp new file mode 100644 index 00000000..1dd216c8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp new file mode 100644 index 00000000..75b30ce3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less.hpp new file mode 100644 index 00000000..0b6ce1d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp new file mode 100644 index 00000000..0010e084 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list.hpp new file mode 100644 index 00000000..cbd58acd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp new file mode 100644 index 00000000..495c3f7f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/map.hpp new file mode 100644 index 00000000..80ef156e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/minus.hpp new file mode 100644 index 00000000..cfddc15b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp new file mode 100644 index 00000000..eb5eff07 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp new file mode 100644 index 00000000..68356eee --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/or.hpp new file mode 100644 index 00000000..ff7ce9fd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp new file mode 100644 index 00000000..b306bbbc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/plus.hpp new file mode 100644 index 00000000..82539abc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp new file mode 100644 index 00000000..677a3f9b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp @@ -0,0 +1,119 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename T, bool has_type_ > +struct quote_impl + +{ + typedef typename T::type type; +}; + +template< typename T > +struct quote_impl< T,false > +{ + typedef T type; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + { + typedef typename quote_impl< + F + , aux::has_type< F >::value + >::type type; + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + { + typedef typename quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + >::type type; + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + { + typedef typename quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + >::type type; + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + { + typedef typename quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + >::type type; + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + { + typedef typename quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + >::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp new file mode 100644 index 00000000..372f0d26 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..44aadf7a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set.hpp new file mode 100644 index 00000000..ace3a4f0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp new file mode 100644 index 00000000..4e6993ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp new file mode 100644 index 00000000..6d19e94e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp new file mode 100644 index 00000000..dd31d97c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp new file mode 100644 index 00000000..b24a0a7e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp @@ -0,0 +1,40 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/times.hpp new file mode 100644 index 00000000..ab100f1c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp new file mode 100644 index 00000000..f391dc1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + { + typedef typename aux::unpack_args_impl< + size::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector.hpp new file mode 100644 index 00000000..803e2178 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp new file mode 100644 index 00000000..643b7fd6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/and.hpp new file mode 100644 index 00000000..010ad1fc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp new file mode 100644 index 00000000..e08eaccf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp new file mode 100644 index 00000000..2ffe7091 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp @@ -0,0 +1,456 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + int N, typename F + > +struct apply_wrap_impl0; + +template< + typename F + > +struct apply_wrap_impl0< + 0 + , F + + > +{ + typedef typename F::template apply< + +/// since the defaults are "lost", we have to pass *something* even for nullary +/// metafunction classes + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 1 + , F + + > +{ + typedef typename F::template apply< + + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 2 + , F + + > +{ + typedef typename F::template apply< + + na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 3 + , F + + > +{ + typedef typename F::template apply< + + na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 4 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 5 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap0 + : apply_wrap_impl0< + ::boost::mpl::aux::arity< F,0 >::value + , F + + >::type +{ +}; + +template< + int N, typename F, typename T1 + > +struct apply_wrap_impl1; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 1 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 2 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 3 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 4 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 5 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 + : apply_wrap_impl1< + ::boost::mpl::aux::arity< F,1 >::value + , F + , T1 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2 + > +struct apply_wrap_impl2; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 2 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 3 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 4 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 5 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 + : apply_wrap_impl2< + ::boost::mpl::aux::arity< F,2 >::value + , F + , T1, T2 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 3 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 4 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 5 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 + : apply_wrap_impl3< + ::boost::mpl::aux::arity< F,3 >::value + , F + , T1, T2, T3 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 4 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 5 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap4 + : apply_wrap_impl4< + ::boost::mpl::aux::arity< F,4 >::value + , F + , T1, T2, T3, T4 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5< + 5 + , F + , T1, T2, T3, T4, T5 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4, T5 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap5 + : apply_wrap_impl5< + ::boost::mpl::aux::arity< F,5 >::value + , F + , T1, T2, T3, T4, T5 + >::type +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp new file mode 100644 index 00000000..a29daa0b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp @@ -0,0 +1,306 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp new file mode 100644 index 00000000..34b1b5c8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp @@ -0,0 +1,403 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp new file mode 100644 index 00000000..022cba34 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp new file mode 100644 index 00000000..0bbf54ea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp new file mode 100644 index 00000000..55b31cb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp new file mode 100644 index 00000000..ec193915 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp new file mode 100644 index 00000000..86f16826 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp new file mode 100644 index 00000000..62c99458 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp new file mode 100644 index 00000000..e3eef71b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp @@ -0,0 +1,558 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Arity + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + , int_<1> + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + , int_<1> + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + , int_<2> + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + , int_<2> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + , int_<3> + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + , int_<3> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + , int_<4> + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + , int_<4> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + , int_<5> + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + , int_<5> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +template< + typename F + , typename Tag1 + , typename Tag2 + , typename Arity + > +struct lambda< + lambda< F,Tag1,Arity > + , Tag2 + , int_<3> + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef bind1< quote1, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp new file mode 100644 index 00000000..14d8e08b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp new file mode 100644 index 00000000..2603f918 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp new file mode 100644 index 00000000..00f31c42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less.hpp new file mode 100644 index 00000000..4fe3cd17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp new file mode 100644 index 00000000..ca2894f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp new file mode 100644 index 00000000..71d49137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp new file mode 100644 index 00000000..224b3493 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp new file mode 100644 index 00000000..98b21b1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/or.hpp new file mode 100644 index 00000000..31e1aaa4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp new file mode 100644 index 00000000..a9f6ee79 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp new file mode 100644 index 00000000..e7a7f001 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp new file mode 100644 index 00000000..7a07414a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..39a4057b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp new file mode 100644 index 00000000..b5b181ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp new file mode 100644 index 00000000..f7a342e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp new file mode 100644 index 00000000..1164f0f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp @@ -0,0 +1,40 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/times.hpp new file mode 100644 index 00000000..cb97cc4e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp new file mode 100644 index 00000000..ef7c2b01 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + { + typedef typename aux::unpack_args_impl< + size::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp new file mode 100644 index 00000000..5cb50dc0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp new file mode 100644 index 00000000..9654ee33 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp new file mode 100644 index 00000000..f3456890 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp new file mode 100644 index 00000000..bce7c2c3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp new file mode 100644 index 00000000..1ba706ff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp new file mode 100644 index 00000000..d88129da --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp @@ -0,0 +1,456 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + int N, typename F + > +struct apply_wrap_impl0; + +template< + typename F + > +struct apply_wrap_impl0< + 0 + , F + + > +{ + typedef typename F::template apply< + +/// since the defaults are "lost", we have to pass *something* even for nullary +/// metafunction classes + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 1 + , F + + > +{ + typedef typename F::template apply< + + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 2 + , F + + > +{ + typedef typename F::template apply< + + na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 3 + , F + + > +{ + typedef typename F::template apply< + + na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 4 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 5 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap0 + : apply_wrap_impl0< + ::boost::mpl::aux::arity< F,0 >::value + , F + + >::type +{ +}; + +template< + int N, typename F, typename T1 + > +struct apply_wrap_impl1; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 1 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 2 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 3 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 4 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 5 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 + : apply_wrap_impl1< + ::boost::mpl::aux::arity< F,1 >::value + , F + , T1 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2 + > +struct apply_wrap_impl2; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 2 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 3 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 4 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 5 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 + : apply_wrap_impl2< + ::boost::mpl::aux::arity< F,2 >::value + , F + , T1, T2 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 3 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 4 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 5 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 + : apply_wrap_impl3< + ::boost::mpl::aux::arity< F,3 >::value + , F + , T1, T2, T3 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 4 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 5 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap4 + : apply_wrap_impl4< + ::boost::mpl::aux::arity< F,4 >::value + , F + , T1, T2, T3, T4 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5< + 5 + , F + , T1, T2, T3, T4, T5 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4, T5 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap5 + : apply_wrap_impl5< + ::boost::mpl::aux::arity< F,5 >::value + , F + , T1, T2, T3, T4, T5 + >::type +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp new file mode 100644 index 00000000..3ac43401 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp @@ -0,0 +1,117 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp new file mode 100644 index 00000000..74b00299 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp @@ -0,0 +1,300 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp new file mode 100644 index 00000000..e769a0cb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp @@ -0,0 +1,397 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1, typename U2, typename U3, typename U4, typename U5 + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp new file mode 100644 index 00000000..962b5c98 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp new file mode 100644 index 00000000..527b6894 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp new file mode 100644 index 00000000..3f0d5caa --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp new file mode 100644 index 00000000..06996c03 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp new file mode 100644 index 00000000..06505c93 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp new file mode 100644 index 00000000..6b4178a9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp new file mode 100644 index 00000000..901a93c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp new file mode 100644 index 00000000..45ab4e7c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp new file mode 100644 index 00000000..8b2bf590 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp @@ -0,0 +1,558 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Arity + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + , int_<1> + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + , int_<1> + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + , int_<2> + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + , int_<2> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + , int_<3> + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + , int_<3> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + , int_<4> + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + , int_<4> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + , int_<5> + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + , int_<5> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +template< + typename F + , typename Tag1 + , typename Tag2 + , typename Arity + > +struct lambda< + lambda< F,Tag1,Arity > + , Tag2 + , int_<3> + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef bind1< quote1, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp new file mode 100644 index 00000000..3d1c3dce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp new file mode 100644 index 00000000..fb011866 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp new file mode 100644 index 00000000..6adcc014 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp @@ -0,0 +1,139 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1, typename T2, typename T3, typename T4, typename T5 + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp new file mode 100644 index 00000000..b767e958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp new file mode 100644 index 00000000..1dd216c8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp new file mode 100644 index 00000000..75b30ce3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp new file mode 100644 index 00000000..0b6ce1d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp new file mode 100644 index 00000000..0010e084 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp new file mode 100644 index 00000000..cbd58acd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp new file mode 100644 index 00000000..495c3f7f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp new file mode 100644 index 00000000..80ef156e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp new file mode 100644 index 00000000..cfddc15b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp new file mode 100644 index 00000000..eb5eff07 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp new file mode 100644 index 00000000..68356eee --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp new file mode 100644 index 00000000..ff7ce9fd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp new file mode 100644 index 00000000..b306bbbc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp new file mode 100644 index 00000000..82539abc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp new file mode 100644 index 00000000..7f9d18bc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "quote.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp new file mode 100644 index 00000000..372f0d26 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..44aadf7a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp new file mode 100644 index 00000000..ace3a4f0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp new file mode 100644 index 00000000..4e6993ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp new file mode 100644 index 00000000..6d19e94e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp new file mode 100644 index 00000000..dd31d97c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp new file mode 100644 index 00000000..b24a0a7e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp @@ -0,0 +1,40 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp new file mode 100644 index 00000000..ab100f1c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp new file mode 100644 index 00000000..f391dc1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + { + typedef typename aux::unpack_args_impl< + size::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp new file mode 100644 index 00000000..803e2178 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp new file mode 100644 index 00000000..643b7fd6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/and.hpp new file mode 100644 index 00000000..010ad1fc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply.hpp new file mode 100644 index 00000000..e08eaccf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp new file mode 100644 index 00000000..34d51a1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp @@ -0,0 +1,84 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< typename F > +struct apply_wrap0< F,true_ > + : F::apply +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + + : F::template apply< T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + + : F::template apply< T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + + : F::template apply< T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + + : F::template apply< T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp new file mode 100644 index 00000000..1e734294 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp @@ -0,0 +1,406 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F, int dummy_ + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, int dummy_ + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1, int dummy_ + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, int dummy_ + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2, int dummy_ + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, int dummy_ + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, int dummy_ + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, int dummy_ + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , int dummy_ + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , int dummy_ + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, int dummy_ + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, int dummy_ + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind.hpp new file mode 100644 index 00000000..94bfe1fe --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind.hpp @@ -0,0 +1,515 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F, int dummy_ + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, int dummy_ + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1, int dummy_ + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, int dummy_ + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2, int dummy_ + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, int dummy_ + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, int dummy_ + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, int dummy_ + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , int dummy_ + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , int dummy_ + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, int dummy_ + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, int dummy_ + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp new file mode 100644 index 00000000..181bc77f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp @@ -0,0 +1,53 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, int dummy_ = 0 + > +struct bind; + +template< + typename F, int dummy_ = 0 + > +struct bind0; + +template< + typename F, typename T1, int dummy_ = 0 + > +struct bind1; + +template< + typename F, typename T1, typename T2, int dummy_ = 0 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3, int dummy_ = 0 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , int dummy_ = 0 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, int dummy_ = 0 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp new file mode 100644 index 00000000..0bbf54ea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp new file mode 100644 index 00000000..55b31cb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp new file mode 100644 index 00000000..ec193915 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/divides.hpp new file mode 100644 index 00000000..86f16826 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp new file mode 100644 index 00000000..62c99458 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp new file mode 100644 index 00000000..026418cc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp @@ -0,0 +1,536 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater.hpp new file mode 100644 index 00000000..14d8e08b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp new file mode 100644 index 00000000..2603f918 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp new file mode 100644 index 00000000..00f31c42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less.hpp new file mode 100644 index 00000000..4fe3cd17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp new file mode 100644 index 00000000..ca2894f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/minus.hpp new file mode 100644 index 00000000..71d49137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp new file mode 100644 index 00000000..224b3493 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp new file mode 100644 index 00000000..98b21b1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/or.hpp new file mode 100644 index 00000000..31e1aaa4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/plus.hpp new file mode 100644 index 00000000..a9f6ee79 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/quote.hpp new file mode 100644 index 00000000..d7d0420e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/quote.hpp @@ -0,0 +1,123 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename T, bool has_type_ > +struct quote_impl + : T +{ +}; + +template< typename T > +struct quote_impl< T,false > +{ + typedef T type; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< + F + , aux::has_type< F >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp new file mode 100644 index 00000000..c468684c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..658f92a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp new file mode 100644 index 00000000..b5b181ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp new file mode 100644 index 00000000..f7a342e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp new file mode 100644 index 00000000..a23fc238 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/times.hpp new file mode 100644 index 00000000..cb97cc4e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp new file mode 100644 index 00000000..2194ce9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/and.hpp new file mode 100644 index 00000000..010ad1fc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply.hpp new file mode 100644 index 00000000..e08eaccf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp new file mode 100644 index 00000000..34d51a1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp @@ -0,0 +1,84 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< typename F > +struct apply_wrap0< F,true_ > + : F::apply +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + + : F::template apply< T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + + : F::template apply< T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + + : F::template apply< T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + + : F::template apply< T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp new file mode 100644 index 00000000..b0702324 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp @@ -0,0 +1,440 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind.hpp new file mode 100644 index 00000000..0e9513a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind.hpp @@ -0,0 +1,561 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp new file mode 100644 index 00000000..c4a5060f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct bind; + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp new file mode 100644 index 00000000..0bbf54ea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp new file mode 100644 index 00000000..55b31cb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp new file mode 100644 index 00000000..ec193915 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/divides.hpp new file mode 100644 index 00000000..86f16826 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp new file mode 100644 index 00000000..62c99458 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp new file mode 100644 index 00000000..e3eef71b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp @@ -0,0 +1,558 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Arity + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + , int_<1> + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + , int_<1> + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + , int_<2> + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + , int_<2> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + , int_<3> + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + , int_<3> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + , int_<4> + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + , int_<4> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + , int_<5> + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + , int_<5> + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + , int_<6> + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +template< + typename F + , typename Tag1 + , typename Tag2 + , typename Arity + > +struct lambda< + lambda< F,Tag1,Arity > + , Tag2 + , int_<3> + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef bind1< quote1, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater.hpp new file mode 100644 index 00000000..14d8e08b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp new file mode 100644 index 00000000..2603f918 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp new file mode 100644 index 00000000..00f31c42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less.hpp new file mode 100644 index 00000000..4fe3cd17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp new file mode 100644 index 00000000..ca2894f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/minus.hpp new file mode 100644 index 00000000..71d49137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp new file mode 100644 index 00000000..224b3493 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp new file mode 100644 index 00000000..98b21b1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/or.hpp new file mode 100644 index 00000000..31e1aaa4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/plus.hpp new file mode 100644 index 00000000..a9f6ee79 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/quote.hpp new file mode 100644 index 00000000..020f0939 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/quote.hpp @@ -0,0 +1,123 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename T, bool has_type_ > +struct quote_impl +{ + typedef typename T::type type; +}; + +template< typename T > +struct quote_impl< T,false > +{ + typedef T type; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< + F + , aux::has_type< F >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp new file mode 100644 index 00000000..c468684c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..658f92a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp new file mode 100644 index 00000000..b5b181ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp new file mode 100644 index 00000000..f7a342e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp new file mode 100644 index 00000000..3e7bfba1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< int N > struct arity_tag +{ + typedef char (&type)[N + 1]; +}; + +template< + int C1, int C2, int C3, int C4, int C5, int C6 + > +struct max_arity +{ + BOOST_STATIC_CONSTANT(int, value = + ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) ) + + ); +}; + +arity_tag<0>::type arity_helper(...); + +template< + template< typename P1 > class F + , typename T1 + > +typename arity_tag<1>::type +arity_helper(type_wrapper< F >, arity_tag<1>); + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + > +typename arity_tag<2>::type +arity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>); + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + > +typename arity_tag<3>::type +arity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>); + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + > +typename arity_tag<4>::type +arity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>); + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + > +typename arity_tag<5>::type +arity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>); + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5, typename P6 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6 + > +typename arity_tag<6>::type +arity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>); +template< typename F, int N > +struct template_arity_impl +{ + BOOST_STATIC_CONSTANT(int, value = + sizeof(arity_helper(type_wrapper(), arity_tag())) - 1 + ); +}; + +template< typename F > +struct template_arity +{ + BOOST_STATIC_CONSTANT(int, value = ( + max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value + + )); + + typedef mpl::int_ type; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/times.hpp new file mode 100644 index 00000000..cb97cc4e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp new file mode 100644 index 00000000..2194ce9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp new file mode 100644 index 00000000..36337c8a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp @@ -0,0 +1,132 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp new file mode 100644 index 00000000..4ffbe78d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp @@ -0,0 +1,132 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/and.hpp new file mode 100644 index 00000000..555c8001 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/and.hpp @@ -0,0 +1,73 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : false_ + { + }; +}; + +template<> struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,true_ > + { + }; +}; + +template<> +struct and_impl + ::result_< true_,true_,true_,true_ > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp new file mode 100644 index 00000000..a3e2929f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp @@ -0,0 +1,166 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + +{ + typedef typename apply_wrap0< + typename lambda::type + + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +/// workaround for ETI bug +template<> +struct apply0 +{ + typedef int type; +}; + +template< + typename F, typename T1 + > +struct apply1 + +{ + typedef typename apply_wrap1< + typename lambda::type + , T1 + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +/// workaround for ETI bug +template<> +struct apply1< int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + +{ + typedef typename apply_wrap2< + typename lambda::type + , T1, T2 + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +/// workaround for ETI bug +template<> +struct apply2< int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + +{ + typedef typename apply_wrap3< + typename lambda::type + , T1, T2, T3 + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +/// workaround for ETI bug +template<> +struct apply3< int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + +{ + typedef typename apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +/// workaround for ETI bug +template<> +struct apply4< int,int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + +{ + typedef typename apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// workaround for ETI bug +template<> +struct apply5< int,int,int,int,int,int > +{ + typedef int type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp new file mode 100644 index 00000000..f0f86c17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp new file mode 100644 index 00000000..4e89507d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp @@ -0,0 +1,247 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename F> +struct msvc_apply0 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< typename P = int > struct apply + { + typedef int type; + }; + }; + + template< typename T = int > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply<> + { + }; + +}; + +template< + typename F + > +struct apply_wrap0 +{ + typedef typename msvc_apply0::template result_< + + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap0 +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply1 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< typename P1 > struct apply + { + typedef int type; + }; + }; + + template< typename T1 > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply + { + }; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 +{ + typedef typename msvc_apply1::template result_< + T1 + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap1< int,int > +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply2 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< typename P1, typename P2 > struct apply + { + typedef int type; + }; + }; + + template< typename T1, typename T2 > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply< T1,T2 > + { + }; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 +{ + typedef typename msvc_apply2::template result_< + T1, T2 + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap2< int,int,int > +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply3 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< typename P1, typename P2, typename P3 > struct apply + { + typedef int type; + }; + }; + + template< typename T1, typename T2, typename T3 > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply< T1,T2,T3 > + { + }; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 +{ + typedef typename msvc_apply3::template result_< + T1, T2, T3 + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap3< int,int,int,int > +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply4 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< + typename P1, typename P2, typename P3, typename P4 + > + struct apply + { + typedef int type; + }; + }; + + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : f_< aux::msvc_never_true::value > + ::template apply< T1,T2,T3,T4 > + { + }; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap4 +{ + typedef typename msvc_apply4::template result_< + T1, T2, T3, T4 + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap4< int,int,int,int,int > +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply5 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + struct apply + { + typedef int type; + }; + }; + + template< + typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + : f_< aux::msvc_never_true::value > + ::template apply< T1,T2,T3,T4,T5 > + { + }; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap5 +{ + typedef typename msvc_apply5::template result_< + T1, T2, T3, T4, T5 + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap5< int,int,int,int,int,int > +{ + typedef int type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp new file mode 100644 index 00000000..4f12a40f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp @@ -0,0 +1,328 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp new file mode 100644 index 00000000..53c76e8f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp @@ -0,0 +1,432 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< typename T > +struct replace_unnamed_arg_impl +{ + template< typename Arg > struct result_ + { + typedef Arg next; + typedef T type; + }; +}; + +template<> +struct replace_unnamed_arg_impl< arg< -1 > > +{ + template< typename Arg > struct result_ + { + typedef typename next::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp new file mode 100644 index 00000000..022cba34 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp new file mode 100644 index 00000000..e96cf1a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp @@ -0,0 +1,149 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitand_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + + : if_< + + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitand_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 & n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitand_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp new file mode 100644 index 00000000..bbc96ab7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp @@ -0,0 +1,149 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitor_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + + : if_< + + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 | n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp new file mode 100644 index 00000000..4c142971 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp @@ -0,0 +1,149 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitxor_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + + : if_< + + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitxor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitxor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp new file mode 100644 index 00000000..a0445d9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct deque_chooser; + +} + +namespace aux { + +template<> +struct deque_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct deque_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque_impl +{ + typedef aux::deque_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::deque_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque + : aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp new file mode 100644 index 00000000..76814919 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp @@ -0,0 +1,148 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct divides_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + + : if_< + + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 + : aux::msvc_eti_base< typename apply_wrap2< + divides_impl< + typename divides_tag::type + , typename divides_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct divides_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 / n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::divides_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp new file mode 100644 index 00000000..64e90650 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct equal_to_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + : aux::msvc_eti_base< typename apply_wrap2< + equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp new file mode 100644 index 00000000..4b3c6907 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp @@ -0,0 +1,293 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< int N > +struct fold_chunk; + +template<> struct fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< int N > +struct fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step; + +template< + typename Last + , typename State + > +struct fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , fold_null_step< Last,State > + , fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step +{ + typedef fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl + : fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp new file mode 100644 index 00000000..5f5662de --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct greater_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + : aux::msvc_eti_base< typename apply_wrap2< + greater_impl< + typename greater_tag::type + , typename greater_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp new file mode 100644 index 00000000..ae776fcc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct greater_equal_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + : aux::msvc_eti_base< typename apply_wrap2< + greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp new file mode 100644 index 00000000..233a1ec3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp @@ -0,0 +1,166 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C1, bool C2 > +struct inherit2_impl +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1, T2 + { + typedef Derived type_; + }; +}; + +template<> +struct inherit2_impl< false,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1 + { + typedef T1 type_; + }; +}; + +template<> +struct inherit2_impl< true,false > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T2 + { + typedef T2 type_; + }; +}; + +template<> +struct inherit2_impl< true,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + { + typedef T1 type_; + }; +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : aux::inherit2_impl< + is_empty_base::value + , is_empty_base::value + >::template result_< inherit2< T1,T2 >,T1, T2 > +{ + typedef typename inherit2::type_ type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp new file mode 100644 index 00000000..69aadc46 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp @@ -0,0 +1,293 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< int N > +struct iter_fold_chunk; + +template<> struct iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< int N > +struct iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step; + +template< + typename Last + , typename State + > +struct iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , iter_fold_null_step< Last,State > + , iter_fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step +{ + typedef iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl + : iter_fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less.hpp new file mode 100644 index 00000000..951f0608 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct less_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + : aux::msvc_eti_base< typename apply_wrap2< + less_impl< + typename less_tag::type + , typename less_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > + BOOST_MPL_AUX_VALUE_WKND(N1)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp new file mode 100644 index 00000000..a56e692e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct less_equal_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + : aux::msvc_eti_base< typename apply_wrap2< + less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list.hpp new file mode 100644 index 00000000..e5ea456c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_chooser; + +} + +namespace aux { + +template<> +struct list_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef list0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct list_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list_impl +{ + typedef aux::list_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::list_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list + : aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp new file mode 100644 index 00000000..ab25482f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_c_chooser; + +} + +namespace aux { + +template<> +struct list_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct list_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c_impl +{ + typedef aux::list_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::list_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c + : aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/map.hpp new file mode 100644 index 00000000..970e0b76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/map.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct map_chooser; + +} + +namespace aux { + +template<> +struct map_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef map0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct map_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map_impl +{ + typedef aux::map_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::map_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map + : aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp new file mode 100644 index 00000000..b47f3285 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp @@ -0,0 +1,148 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct minus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + + : if_< + + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 + : aux::msvc_eti_base< typename apply_wrap2< + minus_impl< + typename minus_tag::type + , typename minus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct minus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 - n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::minus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp new file mode 100644 index 00000000..c12b3f9f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp @@ -0,0 +1,115 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct modulus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + : aux::msvc_eti_base< typename apply_wrap2< + modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct modulus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 % n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::modulus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp new file mode 100644 index 00000000..6e56b1e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct not_equal_to_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + : aux::msvc_eti_base< typename apply_wrap2< + not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/or.hpp new file mode 100644 index 00000000..3f7394e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/or.hpp @@ -0,0 +1,73 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : true_ + { + }; +}; + +template<> struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,false_ > + { + }; +}; + +template<> +struct or_impl + ::result_< false_,false_,false_,false_ > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp new file mode 100644 index 00000000..10523353 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp @@ -0,0 +1,148 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct plus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + + : if_< + + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 + : aux::msvc_eti_base< typename apply_wrap2< + plus_impl< + typename plus_tag::type + , typename plus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct plus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 + n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::plus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp new file mode 100644 index 00000000..e7a7f001 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp new file mode 100644 index 00000000..adf15b63 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp @@ -0,0 +1,343 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..208ad970 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp @@ -0,0 +1,343 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; + + /// ETI workaround + template<> struct result_< int,int,int,int,int > + { + typedef int state; + typedef int iterator; + }; + +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set.hpp new file mode 100644 index 00000000..95aaa5cb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_chooser; + +} + +namespace aux { + +template<> +struct set_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef set0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct set_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set_impl +{ + typedef aux::set_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::set_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set + : aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp new file mode 100644 index 00000000..1ff34f90 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_c_chooser; + +} + +namespace aux { + +template<> +struct set_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct set_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c_impl +{ + typedef aux::set_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::set_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c + : aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp new file mode 100644 index 00000000..3861ca1d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp @@ -0,0 +1,114 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct shift_left_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + : aux::msvc_eti_base< typename apply_wrap2< + shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_left_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n << s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_left_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp new file mode 100644 index 00000000..24ea0948 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp @@ -0,0 +1,114 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct shift_right_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + : aux::msvc_eti_base< typename apply_wrap2< + shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_right_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n >> s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_right_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp new file mode 100644 index 00000000..16687713 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +template<> +struct template_arity + : mpl::int_< -1 > +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/times.hpp new file mode 100644 index 00000000..dee7fd44 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/times.hpp @@ -0,0 +1,148 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct times_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + + : if_< + + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 + : aux::msvc_eti_base< typename apply_wrap2< + times_impl< + typename times_tag::type + , typename times_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct times_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 * n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::times_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp new file mode 100644 index 00000000..26533dd4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp @@ -0,0 +1,109 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl +{ + template< typename F, typename Args > struct apply; +}; + +template<> struct unpack_args_impl<0> +{ + template< typename F, typename Args > struct apply + : apply0< + F + > + { + }; +}; + +template<> struct unpack_args_impl<1> +{ + template< typename F, typename Args > struct apply + : apply1< + F + , typename at_c< Args,0 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<2> +{ + template< typename F, typename Args > struct apply + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<3> +{ + template< typename F, typename Args > struct apply + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<4> +{ + template< typename F, typename Args > struct apply + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<5> +{ + template< typename F, typename Args > struct apply + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > + { + }; +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp new file mode 100644 index 00000000..a6c7b621 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_chooser; + +} + +namespace aux { + +template<> +struct vector_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct vector_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector_impl +{ + typedef aux::vector_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::vector_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector + : aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp new file mode 100644 index 00000000..c522d082 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_c_chooser; + +} + +namespace aux { + +template<> +struct vector_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector1_c< + T, T(C0) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector2_c< + T, T(C0), T(C1) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector3_c< + T, T(C0), T(C1), T(C2) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector4_c< + T, T(C0), T(C1), T(C2), T(C3) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector5_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector6_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector7_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector8_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector9_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector10_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector11_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector12_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector13_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector14_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector15_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector16_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector17_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector18_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector19_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector20_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct vector_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c_impl +{ + typedef aux::vector_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::vector_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c + : aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/and.hpp new file mode 100644 index 00000000..e58640a4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/and.hpp @@ -0,0 +1,71 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : false_ + { + }; +}; + +template<> struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,true_ > + { + }; + + template<> struct result_< true_,true_,true_,true_ > + : true_ + { + }; +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp new file mode 100644 index 00000000..d46d0309 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp @@ -0,0 +1,160 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +/// workaround for ETI bug +template<> +struct apply0 +{ + typedef int type; +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +/// workaround for ETI bug +template<> +struct apply1< int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +/// workaround for ETI bug +template<> +struct apply2< int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +/// workaround for ETI bug +template<> +struct apply3< int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +/// workaround for ETI bug +template<> +struct apply4< int,int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// workaround for ETI bug +template<> +struct apply5< int,int,int,int,int,int > +{ + typedef int type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp new file mode 100644 index 00000000..f0f86c17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp new file mode 100644 index 00000000..d3075179 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp @@ -0,0 +1,138 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + +{ + typedef typename F::template apply< + + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap0 +{ + typedef int type; +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + +{ + typedef typename F::template apply< + T1 + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap1< int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + +{ + typedef typename F::template apply< + T1, T2 + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap2< int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + +{ + typedef typename F::template apply< + T1, T2, T3 + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap3< int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + +{ + typedef typename F::template apply< + T1, T2, T3, T4 + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap4< int,int,int,int,int > +{ + typedef int type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + +{ + typedef typename F::template apply< + T1, T2, T3, T4, T5 + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap5< int,int,int,int,int,int > +{ + typedef int type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp new file mode 100644 index 00000000..4f12a40f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp @@ -0,0 +1,328 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp new file mode 100644 index 00000000..53c76e8f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp @@ -0,0 +1,432 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< typename T > +struct replace_unnamed_arg_impl +{ + template< typename Arg > struct result_ + { + typedef Arg next; + typedef T type; + }; +}; + +template<> +struct replace_unnamed_arg_impl< arg< -1 > > +{ + template< typename Arg > struct result_ + { + typedef typename next::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp new file mode 100644 index 00000000..022cba34 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp new file mode 100644 index 00000000..e54b4ce1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp @@ -0,0 +1,151 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitand_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + + : aux::msvc_eti_base< typename if_< + + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitand_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 & n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitand_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp new file mode 100644 index 00000000..3b465b33 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp @@ -0,0 +1,151 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitor_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + + : aux::msvc_eti_base< typename if_< + + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 | n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp new file mode 100644 index 00000000..f7c5d439 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp @@ -0,0 +1,151 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct bitxor_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + + : aux::msvc_eti_base< typename if_< + + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 + : aux::msvc_eti_base< typename apply_wrap2< + bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitxor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitxor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp new file mode 100644 index 00000000..a0445d9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct deque_chooser; + +} + +namespace aux { + +template<> +struct deque_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct deque_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque_impl +{ + typedef aux::deque_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::deque_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque + : aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp new file mode 100644 index 00000000..0c60c431 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp @@ -0,0 +1,150 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct divides_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + + : aux::msvc_eti_base< typename if_< + + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 + : aux::msvc_eti_base< typename apply_wrap2< + divides_impl< + typename divides_tag::type + , typename divides_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct divides_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 / n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::divides_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp new file mode 100644 index 00000000..107912b1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct equal_to_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + : aux::msvc_eti_base< typename apply_wrap2< + equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp new file mode 100644 index 00000000..58066d81 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp @@ -0,0 +1,245 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< int N > +struct fold_chunk; + +template<> struct fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; +}; + +template<> struct fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; +}; + +template<> struct fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; +}; + +template<> struct fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; +}; + +template< int N > +struct fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step; + +template< + typename Last + , typename State + > +struct fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , fold_null_step< Last,State > + , fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step +{ + typedef fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl + : fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp new file mode 100644 index 00000000..f60a8606 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct greater_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + : aux::msvc_eti_base< typename apply_wrap2< + greater_impl< + typename greater_tag::type + , typename greater_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp new file mode 100644 index 00000000..2ab09fd5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct greater_equal_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + : aux::msvc_eti_base< typename apply_wrap2< + greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp new file mode 100644 index 00000000..233a1ec3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp @@ -0,0 +1,166 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C1, bool C2 > +struct inherit2_impl +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1, T2 + { + typedef Derived type_; + }; +}; + +template<> +struct inherit2_impl< false,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1 + { + typedef T1 type_; + }; +}; + +template<> +struct inherit2_impl< true,false > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T2 + { + typedef T2 type_; + }; +}; + +template<> +struct inherit2_impl< true,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + { + typedef T1 type_; + }; +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : aux::inherit2_impl< + is_empty_base::value + , is_empty_base::value + >::template result_< inherit2< T1,T2 >,T1, T2 > +{ + typedef typename inherit2::type_ type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp new file mode 100644 index 00000000..50ea754f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp @@ -0,0 +1,245 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< int N > +struct iter_fold_chunk; + +template<> struct iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; +}; + +template<> struct iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; +}; + +template<> struct iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; +}; + +template<> struct iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; +}; + +template< int N > +struct iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step; + +template< + typename Last + , typename State + > +struct iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , iter_fold_null_step< Last,State > + , iter_fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step +{ + typedef iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl + : iter_fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less.hpp new file mode 100644 index 00000000..72338def --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct less_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + : aux::msvc_eti_base< typename apply_wrap2< + less_impl< + typename less_tag::type + , typename less_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > + BOOST_MPL_AUX_VALUE_WKND(N1)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp new file mode 100644 index 00000000..b5886975 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct less_equal_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + : aux::msvc_eti_base< typename apply_wrap2< + less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list.hpp new file mode 100644 index 00000000..e5ea456c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_chooser; + +} + +namespace aux { + +template<> +struct list_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef list0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct list_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list_impl +{ + typedef aux::list_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::list_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list + : aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp new file mode 100644 index 00000000..ab25482f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_c_chooser; + +} + +namespace aux { + +template<> +struct list_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct list_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c_impl +{ + typedef aux::list_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::list_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c + : aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/map.hpp new file mode 100644 index 00000000..970e0b76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/map.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct map_chooser; + +} + +namespace aux { + +template<> +struct map_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef map0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct map_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map_impl +{ + typedef aux::map_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::map_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map + : aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp new file mode 100644 index 00000000..3237fa68 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp @@ -0,0 +1,150 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct minus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + + : aux::msvc_eti_base< typename if_< + + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 + : aux::msvc_eti_base< typename apply_wrap2< + minus_impl< + typename minus_tag::type + , typename minus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct minus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 - n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::minus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp new file mode 100644 index 00000000..9c672c0f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp @@ -0,0 +1,115 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct modulus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + : aux::msvc_eti_base< typename apply_wrap2< + modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct modulus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 % n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::modulus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp new file mode 100644 index 00000000..1e48e7f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp @@ -0,0 +1,102 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct not_equal_to_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + : aux::msvc_eti_base< typename apply_wrap2< + not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/or.hpp new file mode 100644 index 00000000..8d0ba0a4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/or.hpp @@ -0,0 +1,71 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : true_ + { + }; +}; + +template<> struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,false_ > + { + }; + + template<> struct result_< false_,false_,false_,false_ > + : false_ + { + }; +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp new file mode 100644 index 00000000..c8f3355e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp @@ -0,0 +1,150 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct plus_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + + : aux::msvc_eti_base< typename if_< + + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 + : aux::msvc_eti_base< typename apply_wrap2< + plus_impl< + typename plus_tag::type + , typename plus_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct plus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 + n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::plus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp new file mode 100644 index 00000000..b85880ff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp @@ -0,0 +1,116 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { +template< bool > struct quote_impl +{ + template< typename T > struct result_ + : T + { + }; +}; + +template<> struct quote_impl +{ + template< typename T > struct result_ + { + typedef T type; + }; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< aux::has_type< F >::value > + ::template result_< F > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< aux::has_type< F< U1,U2 > >::value > + ::template result_< F< U1,U2 > > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3 > >::value > + ::template result_< F< U1,U2,U3 > > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value > + ::template result_< F< U1,U2,U3,U4 > > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value > + ::template result_< F< U1,U2,U3,U4,U5 > > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp new file mode 100644 index 00000000..7a07414a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..39a4057b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set.hpp new file mode 100644 index 00000000..95aaa5cb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_chooser; + +} + +namespace aux { + +template<> +struct set_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef set0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct set_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set_impl +{ + typedef aux::set_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::set_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set + : aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp new file mode 100644 index 00000000..1ff34f90 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_c_chooser; + +} + +namespace aux { + +template<> +struct set_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct set_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c_impl +{ + typedef aux::set_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::set_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c + : aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp new file mode 100644 index 00000000..176fc000 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp @@ -0,0 +1,114 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct shift_left_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + : aux::msvc_eti_base< typename apply_wrap2< + shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_left_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n << s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_left_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp new file mode 100644 index 00000000..6b6e01ff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp @@ -0,0 +1,114 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct shift_right_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag + : tag< T,na > +{ +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + : aux::msvc_eti_base< typename apply_wrap2< + shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_right_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n >> s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_right_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp new file mode 100644 index 00000000..16687713 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp @@ -0,0 +1,46 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +template<> +struct template_arity + : mpl::int_< -1 > +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/times.hpp new file mode 100644 index 00000000..a6ae333c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/times.hpp @@ -0,0 +1,150 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + > +struct times_impl + : if_c< + ( tag1_ > tag2_ ) + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag + : tag< T,na > +{ +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + + : aux::msvc_eti_base< typename if_< + + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type + + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 + : aux::msvc_eti_base< typename apply_wrap2< + times_impl< + typename times_tag::type + , typename times_tag::type + > + , N1 + , N2 + >::type >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct times_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 * n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::times_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp new file mode 100644 index 00000000..26533dd4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp @@ -0,0 +1,109 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl +{ + template< typename F, typename Args > struct apply; +}; + +template<> struct unpack_args_impl<0> +{ + template< typename F, typename Args > struct apply + : apply0< + F + > + { + }; +}; + +template<> struct unpack_args_impl<1> +{ + template< typename F, typename Args > struct apply + : apply1< + F + , typename at_c< Args,0 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<2> +{ + template< typename F, typename Args > struct apply + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<3> +{ + template< typename F, typename Args > struct apply + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<4> +{ + template< typename F, typename Args > struct apply + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<5> +{ + template< typename F, typename Args > struct apply + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > + { + }; +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp new file mode 100644 index 00000000..a6c7b621 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_chooser; + +} + +namespace aux { + +template<> +struct vector_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct vector_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector_impl +{ + typedef aux::vector_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::vector_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector + : aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp new file mode 100644 index 00000000..c522d082 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_c_chooser; + +} + +namespace aux { + +template<> +struct vector_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector1_c< + T, T(C0) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector2_c< + T, T(C0), T(C1) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector3_c< + T, T(C0), T(C1), T(C2) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector4_c< + T, T(C0), T(C1), T(C2), T(C3) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector5_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector6_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector7_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector8_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector9_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector10_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector11_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector12_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector13_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector14_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector15_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector16_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector17_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector18_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector19_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector20_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct vector_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c_impl +{ + typedef aux::vector_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::vector_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c + : aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/and.hpp new file mode 100644 index 00000000..010ad1fc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp new file mode 100644 index 00000000..e08eaccf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp new file mode 100644 index 00000000..2ffe7091 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp @@ -0,0 +1,456 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + int N, typename F + > +struct apply_wrap_impl0; + +template< + typename F + > +struct apply_wrap_impl0< + 0 + , F + + > +{ + typedef typename F::template apply< + +/// since the defaults are "lost", we have to pass *something* even for nullary +/// metafunction classes + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 1 + , F + + > +{ + typedef typename F::template apply< + + na + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 2 + , F + + > +{ + typedef typename F::template apply< + + na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 3 + , F + + > +{ + typedef typename F::template apply< + + na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 4 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 5 + , F + + > +{ + typedef typename F::template apply< + + na, na, na, na, na + + > type; +}; + +template< + typename F + > +struct apply_wrap0 + : apply_wrap_impl0< + ::boost::mpl::aux::arity< F,0 >::value + , F + + >::type +{ +}; + +template< + int N, typename F, typename T1 + > +struct apply_wrap_impl1; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 1 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 2 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 3 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 4 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap_impl1< + 5 + , F + , T1 + > +{ + typedef typename F::template apply< + T1 + , na, na, na, na + + > type; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 + : apply_wrap_impl1< + ::boost::mpl::aux::arity< F,1 >::value + , F + , T1 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2 + > +struct apply_wrap_impl2; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 2 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 3 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 4 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap_impl2< + 5 + , F + , T1, T2 + > +{ + typedef typename F::template apply< + T1, T2 + + , na, na, na + + > type; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 + : apply_wrap_impl2< + ::boost::mpl::aux::arity< F,2 >::value + , F + , T1, T2 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 3 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 4 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap_impl3< + 5 + , F + , T1, T2, T3 + > +{ + typedef typename F::template apply< + T1, T2, T3 + + , na, na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 + : apply_wrap_impl3< + ::boost::mpl::aux::arity< F,3 >::value + , F + , T1, T2, T3 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 4 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap_impl4< + 5 + , F + , T1, T2, T3, T4 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4 + + , na + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply_wrap4 + : apply_wrap_impl4< + ::boost::mpl::aux::arity< F,4 >::value + , F + , T1, T2, T3, T4 + >::type +{ +}; + +template< + int N, typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap_impl5< + 5 + , F + , T1, T2, T3, T4, T5 + > +{ + typedef typename F::template apply< + T1, T2, T3, T4, T5 + + > type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply_wrap5 + : apply_wrap_impl5< + ::boost::mpl::aux::arity< F,5 >::value + , F + , T1, T2, T3, T4, T5 + >::type +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp new file mode 100644 index 00000000..b0702324 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp @@ -0,0 +1,440 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp new file mode 100644 index 00000000..0e9513a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp @@ -0,0 +1,561 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp new file mode 100644 index 00000000..c4a5060f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct bind; + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp new file mode 100644 index 00000000..0bbf54ea --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp new file mode 100644 index 00000000..55b31cb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp new file mode 100644 index 00000000..ec193915 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp @@ -0,0 +1,147 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp new file mode 100644 index 00000000..86f16826 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp new file mode 100644 index 00000000..62c99458 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp new file mode 100644 index 00000000..14d8e08b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp new file mode 100644 index 00000000..2603f918 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp new file mode 100644 index 00000000..00f31c42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less.hpp new file mode 100644 index 00000000..4fe3cd17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp new file mode 100644 index 00000000..ca2894f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp new file mode 100644 index 00000000..71d49137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp new file mode 100644 index 00000000..224b3493 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp new file mode 100644 index 00000000..98b21b1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/or.hpp new file mode 100644 index 00000000..31e1aaa4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp new file mode 100644 index 00000000..a9f6ee79 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp new file mode 100644 index 00000000..d7d0420e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp @@ -0,0 +1,123 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename T, bool has_type_ > +struct quote_impl + : T +{ +}; + +template< typename T > +struct quote_impl< T,false > +{ + typedef T type; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< + F + , aux::has_type< F >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp new file mode 100644 index 00000000..c468684c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..658f92a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp new file mode 100644 index 00000000..b5b181ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp new file mode 100644 index 00000000..f7a342e9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp new file mode 100644 index 00000000..a23fc238 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/times.hpp new file mode 100644 index 00000000..cb97cc4e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/times.hpp @@ -0,0 +1,146 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp new file mode 100644 index 00000000..2194ce9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp new file mode 100644 index 00000000..555c8001 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp @@ -0,0 +1,73 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : false_ + { + }; +}; + +template<> struct and_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,true_ > + { + }; +}; + +template<> +struct and_impl + ::result_< true_,true_,true_,true_ > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp new file mode 100644 index 00000000..9838e799 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp @@ -0,0 +1,268 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<0> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply0< + F + > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<1> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply1< + F, T1 + > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<2> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply2< + F, T1, T2 + > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<3> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply3< + F, T1, T2, T3 + > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<4> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply4< + F, T1, T2, T3, T4 + > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +namespace aux { + +template<> +struct apply_chooser<5> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef apply5< + F, T1, T2, T3, T4, T5 + > type; + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_apply_arg +{ + static bool const value = true; +}; + +template<> +struct is_apply_arg +{ + static bool const value = false; +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + > +struct apply_count_args +{ + static int const value = is_apply_arg::value + is_apply_arg::value + is_apply_arg::value + is_apply_arg::value + is_apply_arg::value; + +}; + +} + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply + : aux::apply_chooser< + aux::apply_count_args< T1,T2,T3,T4,T5 >::value + >::template result_< F,T1,T2,T3,T4,T5 >::type +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp new file mode 100644 index 00000000..7de6dad0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp @@ -0,0 +1,50 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser; +} + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp new file mode 100644 index 00000000..efa213df --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp @@ -0,0 +1,78 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + + : F::template apply< T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + + : F::template apply< T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + + : F::template apply< T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + + : F::template apply< T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp new file mode 100644 index 00000000..254e5b88 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp @@ -0,0 +1,486 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +namespace aux { + +template<> +struct bind_chooser<0> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind0 type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +namespace aux { + +template<> +struct bind_chooser<1> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind1< F,T1 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +namespace aux { + +template<> +struct bind_chooser<2> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind2< F,T1,T2 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +namespace aux { + +template<> +struct bind_chooser<3> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind3< F,T1,T2,T3 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +namespace aux { + +template<> +struct bind_chooser<4> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind4< F,T1,T2,T3,T4 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +namespace aux { + +template<> +struct bind_chooser<5> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind5< F,T1,T2,T3,T4,T5 > type; + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_bind_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_bind_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + > +struct bind_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::value + ); + +}; + +} + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : aux::bind_chooser< + aux::bind_count_args< T1,T2,T3,T4,T5 >::value + >::template result_< F,T1,T2,T3,T4,T5 >::type +{ +}; + +BOOST_MPL_AUX_ARITY_SPEC( + 6 + , bind + ) + +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC( + 6 + , bind + ) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp new file mode 100644 index 00000000..12062b42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp @@ -0,0 +1,590 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool > +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef T type; + }; +}; + +template<> +struct resolve_arg_impl +{ + template< + typename T, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > + struct result_ + { + typedef typename apply_wrap5< + T + , U1, U2, U3, U4, U5 + >::type type; + }; +}; + +template< typename T > struct is_bind_template; + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg + : resolve_arg_impl< is_bind_template::value > + ::template result_< T,U1,U2,U3,U4,U5 > +{ +}; + +template< typename T > +struct replace_unnamed_arg_impl +{ + template< typename Arg > struct result_ + { + typedef Arg next; + typedef T type; + }; +}; + +template<> +struct replace_unnamed_arg_impl< arg< -1 > > +{ + template< typename Arg > struct result_ + { + typedef typename next::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +template< bool is_ref_ = true > +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template<> +struct is_bind_template_impl +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F + > +aux::yes_tag +is_bind_helper(bind0*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +namespace aux { + +template<> +struct bind_chooser<0> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind0 type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1 + > +aux::yes_tag +is_bind_helper(bind1< F,T1 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +namespace aux { + +template<> +struct bind_chooser<1> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind1< F,T1 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2 + > +aux::yes_tag +is_bind_helper(bind2< F,T1,T2 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +namespace aux { + +template<> +struct bind_chooser<2> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind2< F,T1,T2 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3 + > +aux::yes_tag +is_bind_helper(bind3< F,T1,T2,T3 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +namespace aux { + +template<> +struct bind_chooser<3> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind3< F,T1,T2,T3 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +aux::yes_tag +is_bind_helper(bind4< F,T1,T2,T3,T4 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +namespace aux { + +template<> +struct bind_chooser<4> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind4< F,T1,T2,T3,T4 > type; + }; +}; + +} // namespace aux + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +aux::yes_tag +is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +namespace aux { + +template<> +struct bind_chooser<5> +{ + template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > + struct result_ + { + typedef bind5< F,T1,T2,T3,T4,T5 > type; + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_bind_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_bind_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + > +struct bind_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::value + ); + +}; + +} + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : aux::bind_chooser< + aux::bind_count_args< T1,T2,T3,T4,T5 >::value + >::template result_< F,T1,T2,T3,T4,T5 >::type +{ +}; + +BOOST_MPL_AUX_ARITY_SPEC( + 6 + , bind + ) + +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC( + 6 + , bind + ) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp new file mode 100644 index 00000000..c4a5060f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct bind; + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp new file mode 100644 index 00000000..020d6ba4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp @@ -0,0 +1,134 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitand_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + + : if_< + + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp new file mode 100644 index 00000000..04748776 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp @@ -0,0 +1,134 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + + : if_< + + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp new file mode 100644 index 00000000..42a9758b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp @@ -0,0 +1,134 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct bitxor_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + + : if_< + + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp new file mode 100644 index 00000000..a0445d9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct deque_chooser; + +} + +namespace aux { + +template<> +struct deque_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct deque_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_deque_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct deque_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque_impl +{ + typedef aux::deque_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::deque_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque + : aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::deque_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp new file mode 100644 index 00000000..00636dcb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct divides_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + + : if_< + + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp new file mode 100644 index 00000000..b14cdda3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp new file mode 100644 index 00000000..58066d81 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp @@ -0,0 +1,245 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< int N > +struct fold_chunk; + +template<> struct fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; +}; + +template<> struct fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; +}; + +template<> struct fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; +}; + +template<> struct fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; +}; + +template< int N > +struct fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step; + +template< + typename Last + , typename State + > +struct fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , fold_null_step< Last,State > + , fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_step +{ + typedef fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl + : fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp new file mode 100644 index 00000000..6fdf8bad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp new file mode 100644 index 00000000..f848eef9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct greater_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp new file mode 100644 index 00000000..233a1ec3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp @@ -0,0 +1,166 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C1, bool C2 > +struct inherit2_impl +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1, T2 + { + typedef Derived type_; + }; +}; + +template<> +struct inherit2_impl< false,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T1 + { + typedef T1 type_; + }; +}; + +template<> +struct inherit2_impl< true,false > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + : T2 + { + typedef T2 type_; + }; +}; + +template<> +struct inherit2_impl< true,true > +{ + template< typename Derived, typename T1, typename T2 > struct result_ + { + typedef T1 type_; + }; +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : aux::inherit2_impl< + is_empty_base::value + , is_empty_base::value + >::template result_< inherit2< T1,T2 >,T1, T2 > +{ + typedef typename inherit2::type_ type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp new file mode 100644 index 00000000..50ea754f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp @@ -0,0 +1,245 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< int N > +struct iter_fold_chunk; + +template<> struct iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; + }; +}; + +template<> struct iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; + }; +}; + +template<> struct iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; + }; +}; + +template<> struct iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; + }; +}; + +template< int N > +struct iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step; + +template< + typename Last + , typename State + > +struct iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , iter_fold_null_step< Last,State > + , iter_fold_step< First,Last,State,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_step +{ + typedef iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > chunk_; + + typedef typename chunk_::state state; + typedef typename chunk_::iterator iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl + : iter_fold_chunk + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp new file mode 100644 index 00000000..7fb35e10 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp new file mode 100644 index 00000000..206ecdcf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct less_equal_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp new file mode 100644 index 00000000..e5ea456c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_chooser; + +} + +namespace aux { + +template<> +struct list_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef list0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct list_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list_impl +{ + typedef aux::list_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::list_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list + : aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::list_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp new file mode 100644 index 00000000..ab25482f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct list_c_chooser; + +} + +namespace aux { + +template<> +struct list_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct list_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_list_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct list_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c_impl +{ + typedef aux::list_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::list_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c + : aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::list_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp new file mode 100644 index 00000000..970e0b76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct map_chooser; + +} + +namespace aux { + +template<> +struct map_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef map0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct map_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_map_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct map_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map_impl +{ + typedef aux::map_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::map_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map + : aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::map_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp new file mode 100644 index 00000000..7b49450a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct minus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + + : if_< + + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp new file mode 100644 index 00000000..8badbab5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp @@ -0,0 +1,101 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct modulus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp new file mode 100644 index 00000000..d87d8cd1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct not_equal_to_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp new file mode 100644 index 00000000..3f7394e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp @@ -0,0 +1,73 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< bool C_ > struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : true_ + { + }; +}; + +template<> struct or_impl +{ + template< + typename T1, typename T2, typename T3, typename T4 + > + struct result_ + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,false_ > + { + }; +}; + +template<> +struct or_impl + ::result_< false_,false_,false_,false_ > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + >::template result_< T2,T3,T4,T5 > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp new file mode 100644 index 00000000..a55b24c4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct plus_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + + : if_< + + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp new file mode 100644 index 00000000..b85880ff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp @@ -0,0 +1,116 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { +template< bool > struct quote_impl +{ + template< typename T > struct result_ + : T + { + }; +}; + +template<> struct quote_impl +{ + template< typename T > struct result_ + { + typedef T type; + }; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< aux::has_type< F >::value > + ::template result_< F > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< aux::has_type< F< U1,U2 > >::value > + ::template result_< F< U1,U2 > > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3 > >::value > + ::template result_< F< U1,U2,U3 > > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value > + ::template result_< F< U1,U2,U3,U4 > > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value > + ::template result_< F< U1,U2,U3,U4,U5 > > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp new file mode 100644 index 00000000..7a07414a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< long N > +struct reverse_fold_chunk; + +template<> struct reverse_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step; + +template< + typename Last + , typename State + > +struct reverse_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_fold_null_step< Last,State > + , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_step +{ + typedef reverse_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl + : reverse_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..39a4057b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp @@ -0,0 +1,295 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< long N > +struct reverse_iter_fold_chunk; + +template<> struct reverse_iter_fold_chunk<0> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<1> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<2> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<3> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; + }; +}; + +template<> struct reverse_iter_fold_chunk<4> +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; + }; +}; + +template< long N > +struct reverse_iter_fold_chunk +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step; + +template< + typename Last + , typename State + > +struct reverse_iter_fold_null_step +{ + typedef Last iterator; + typedef State state; +}; + +template<> +struct reverse_iter_fold_chunk< -1 > +{ + template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > + struct result_ + { + typedef typename if_< + typename is_same< First,Last >::type + , reverse_iter_fold_null_step< Last,State > + , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > + >::type res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; + }; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_step +{ + typedef reverse_iter_fold_chunk< -1 >::template result_< + typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl + : reverse_iter_fold_chunk + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp new file mode 100644 index 00000000..95aaa5cb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_chooser; + +} + +namespace aux { + +template<> +struct set_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef set0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct set_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set_impl +{ + typedef aux::set_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::set_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set + : aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::set_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp new file mode 100644 index 00000000..1ff34f90 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct set_c_chooser; + +} + +namespace aux { + +template<> +struct set_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set1_c< + T, C0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set2_c< + T, C0, C1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set3_c< + T, C0, C1, C2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set4_c< + T, C0, C1, C2, C3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set5_c< + T, C0, C1, C2, C3, C4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set6_c< + T, C0, C1, C2, C3, C4, C5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set7_c< + T, C0, C1, C2, C3, C4, C5, C6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set8_c< + T, C0, C1, C2, C3, C4, C5, C6, C7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set9_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set10_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set11_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set12_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set13_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct set_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_set_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct set_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c_impl +{ + typedef aux::set_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::set_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c + : aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::set_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp new file mode 100644 index 00000000..d14a5e48 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_left_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp new file mode 100644 index 00000000..08c4915e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct shift_right_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp new file mode 100644 index 00000000..1164f0f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp @@ -0,0 +1,40 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp new file mode 100644 index 00000000..fd773cc8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< na,integral_c_tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct times_impl< integral_c_tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +/// forward declaration + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + + : if_< + + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp new file mode 100644 index 00000000..26533dd4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp @@ -0,0 +1,109 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl +{ + template< typename F, typename Args > struct apply; +}; + +template<> struct unpack_args_impl<0> +{ + template< typename F, typename Args > struct apply + : apply0< + F + > + { + }; +}; + +template<> struct unpack_args_impl<1> +{ + template< typename F, typename Args > struct apply + : apply1< + F + , typename at_c< Args,0 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<2> +{ + template< typename F, typename Args > struct apply + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<3> +{ + template< typename F, typename Args > struct apply + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<4> +{ + template< typename F, typename Args > struct apply + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > + { + }; +}; + +template<> struct unpack_args_impl<5> +{ + template< typename F, typename Args > struct apply + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > + { + }; +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp new file mode 100644 index 00000000..a6c7b621 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp @@ -0,0 +1,556 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_chooser; + +} + +namespace aux { + +template<> +struct vector_chooser<0> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef vector0< + + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<1> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector1< + T0 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<2> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector2< + T0, T1 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<3> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector3< + T0, T1, T2 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<4> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector4< + T0, T1, T2, T3 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<5> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector5< + T0, T1, T2, T3, T4 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<6> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector6< + T0, T1, T2, T3, T4, T5 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<7> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector7< + T0, T1, T2, T3, T4, T5, T6 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<8> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector8< + T0, T1, T2, T3, T4, T5, T6, T7 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<9> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector9< + T0, T1, T2, T3, T4, T5, T6, T7, T8 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<10> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector10< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<11> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector11< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<12> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector12< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<13> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector13< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<14> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector14< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<15> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<16> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<17> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<18> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<19> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_chooser<20> +{ + template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > + struct result_ + { + typedef typename vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< typename T > +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + typename T1, typename T2, typename T3, typename T4, typename T5 + , typename T6, typename T7, typename T8, typename T9, typename T10 + , typename T11, typename T12, typename T13, typename T14, typename T15 + , typename T16, typename T17, typename T18, typename T19, typename T20 + > +struct vector_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + ); + +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector_impl +{ + typedef aux::vector_count_args< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + > arg_num_; + + typedef typename aux::vector_chooser< arg_num_::value > + ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +} // namespace aux + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector + : aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type +{ + typedef typename aux::vector_impl< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp new file mode 100644 index 00000000..c522d082 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp @@ -0,0 +1,534 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { +template< int N > +struct vector_c_chooser; + +} + +namespace aux { + +template<> +struct vector_c_chooser<0> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector0_c< + T + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<1> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector1_c< + T, T(C0) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<2> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector2_c< + T, T(C0), T(C1) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<3> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector3_c< + T, T(C0), T(C1), T(C2) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<4> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector4_c< + T, T(C0), T(C1), T(C2), T(C3) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<5> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector5_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<6> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector6_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<7> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector7_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<8> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector8_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<9> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector9_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<10> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector10_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<11> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector11_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<12> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector12_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<13> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector13_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<14> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector14_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<15> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector15_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<16> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector16_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<17> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector17_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<18> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector18_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<19> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector19_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template<> +struct vector_c_chooser<20> +{ + template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > + struct result_ + { + typedef typename vector20_c< + T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) + >::type type; + + }; +}; + +} // namespace aux + +namespace aux { + +template< long C > +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template<> +struct is_vector_c_arg +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template< + long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8 + , long C9, long C10, long C11, long C12, long C13, long C14, long C15 + , long C16, long C17, long C18, long C19, long C20 + > +struct vector_c_count_args +{ + BOOST_STATIC_CONSTANT(int, value = + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + ); + +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c_impl +{ + typedef aux::vector_c_count_args< + C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + > arg_num_; + + typedef typename aux::vector_c_chooser< arg_num_::value > + ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +} // namespace aux + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c + : aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type +{ + typedef typename aux::vector_c_impl< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19 + >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp new file mode 100644 index 00000000..010ad1fc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , and_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp new file mode 100644 index 00000000..e08eaccf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp @@ -0,0 +1,169 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 2 + , apply1 + , (F, T1) + ) +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , apply2 + , (F, T1, T2) + ) +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , apply3 + , (F, T1, T2, T3) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , apply4 + , (F, T1, T2, T3, T4) + ) +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 6 + , apply5 + , (F, T1, T2, T3, T4, T5) + ) +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp new file mode 100644 index 00000000..34d51a1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp @@ -0,0 +1,84 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< typename F > +struct apply_wrap0< F,true_ > + : F::apply +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + + : F::template apply< T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + + : F::template apply< T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + + : F::template apply< T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + + : F::template apply< T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp new file mode 100644 index 00000000..095b84dd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp @@ -0,0 +1,369 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp new file mode 100644 index 00000000..28914408 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp @@ -0,0 +1,466 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp new file mode 100644 index 00000000..c4a5060f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct bind; + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp new file mode 100644 index 00000000..282771bc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp @@ -0,0 +1,157 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitand_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 & n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitand_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp new file mode 100644 index 00000000..bc9c1989 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp @@ -0,0 +1,157 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 | n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp new file mode 100644 index 00000000..76ce540b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp @@ -0,0 +1,157 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct bitxor_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::bitxor_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp new file mode 100644 index 00000000..9bc7fb19 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp @@ -0,0 +1,156 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct divides_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 / n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::divides_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp new file mode 100644 index 00000000..fa2dc4a2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp new file mode 100644 index 00000000..faa3f2ba --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp new file mode 100644 index 00000000..392d142d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp new file mode 100644 index 00000000..00f31c42 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 3 + , inherit3 + , ( T1, T2, T3) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 4 + , inherit4 + , ( T1, T2, T3, T4) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , inherit5 + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp new file mode 100644 index 00000000..890a198a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp @@ -0,0 +1,229 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; + BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp new file mode 100644 index 00000000..6451680f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > + BOOST_MPL_AUX_VALUE_WKND(N1)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp new file mode 100644 index 00000000..00ae0d3e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp new file mode 100644 index 00000000..bb67c59a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp @@ -0,0 +1,156 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct minus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 - n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::minus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp new file mode 100644 index 00000000..6fd0cab3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp @@ -0,0 +1,111 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct modulus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 % n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::modulus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp new file mode 100644 index 00000000..7c940a5b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp @@ -0,0 +1,98 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + { + BOOST_STATIC_CONSTANT(bool, value = + ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != + BOOST_MPL_AUX_VALUE_WKND(N2)::value ) + ); + typedef bool_ type; + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp new file mode 100644 index 00000000..31e1aaa4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp @@ -0,0 +1,69 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , or_ + , ( T1, T2, T3, T4, T5) + ) +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp new file mode 100644 index 00000000..cecead75 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp @@ -0,0 +1,156 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct plus_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 + n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::plus_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp new file mode 100644 index 00000000..e7a7f001 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp new file mode 100644 index 00000000..c468684c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..658f92a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp new file mode 100644 index 00000000..7ef46725 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp @@ -0,0 +1,110 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_left_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n << s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_left_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp new file mode 100644 index 00000000..91a98f73 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp @@ -0,0 +1,110 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2)) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, typename Shift, T n, Shift s > +struct shift_right_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n >> s)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + : aux::shift_right_wknd< + typename N::value_type + , typename S::value_type + , N::value + , S::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp new file mode 100644 index 00000000..1164f0f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp @@ -0,0 +1,40 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< bool > +struct template_arity_impl +{ + template< typename F > struct result_ + : mpl::int_< -1 > + { + }; +}; + +template<> +struct template_arity_impl +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp new file mode 100644 index 00000000..d019b572 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp @@ -0,0 +1,156 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { + +namespace aux { +template< typename T, T n1, T n2 > +struct times_wknd +{ + BOOST_STATIC_CONSTANT(T, value = (n1 * n2)); + typedef integral_c< T,value > type; +}; + +} + +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + : aux::times_wknd< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , N1::value + , N2::value + >::type + + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp new file mode 100644 index 00000000..2194ce9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp new file mode 100644 index 00000000..26de94ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_backward; +template<> +struct advance_backward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_backward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_backward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_backward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp new file mode 100644 index 00000000..b137cc72 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< long N > struct advance_forward; +template<> +struct advance_forward<0> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef iter0 type; + }; +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; +}; + +template< long N > +struct advance_forward +{ + template< typename Iterator > struct apply + { + typedef typename apply_wrap1< + advance_forward<4> + , Iterator + >::type chunk_result_; + + typedef typename apply_wrap1< + advance_forward<( + (N - 4) < 0 + ? 0 + : N - 4 + )> + , chunk_result_ + >::type type; + }; +}; + +}}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/and.hpp new file mode 100644 index 00000000..163913f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/and.hpp @@ -0,0 +1,64 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/and.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct and_impl + : false_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct and_impl< true,T1,T2,T3,T4 > + : and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , true_ + > +{ +}; + +template<> +struct and_impl< + true + , true_, true_, true_, true_ + > + : true_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = true_, typename T4 = true_, typename T5 = true_ + > +struct and_ + + : aux::and_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , and_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply.hpp new file mode 100644 index 00000000..89d9e4b4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply.hpp @@ -0,0 +1,139 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::type + , T1 + > +{ +}; + +template< + typename F, typename T1 + > +struct apply< F,T1,na,na,na,na > + : apply1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply2 + + : apply_wrap2< + typename lambda::type + , T1, T2 + > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct apply< F,T1,T2,na,na,na > + : apply2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3 + + : apply_wrap3< + typename lambda::type + , T1, T2, T3 + > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply< F,T1,T2,T3,na,na > + : apply3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4 + + : apply_wrap4< + typename lambda::type + , T1, T2, T3, T4 + > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply< F,T1,T2,T3,T4,na > + : apply4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5 + + : apply_wrap5< + typename lambda::type + , T1, T2, T3, T4, T5 + > +{ +}; + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply + : apply5< F,T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp new file mode 100644 index 00000000..b2ed5d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct apply; + +template< + typename F + > +struct apply0; + +template< + typename F, typename T1 + > +struct apply1; + +template< + typename F, typename T1, typename T2 + > +struct apply2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct apply4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct apply5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp new file mode 100644 index 00000000..34d51a1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp @@ -0,0 +1,84 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/apply_wrap.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + + , typename has_apply_ = typename aux::has_apply::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< typename F > +struct apply_wrap0< F,true_ > + : F::apply +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +template< + typename F, typename T1, typename T2 + + > +struct apply_wrap2 + + : F::template apply< T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + + > +struct apply_wrap3 + + : F::template apply< T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + + > +struct apply_wrap4 + + : F::template apply< T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + + > +struct apply_wrap5 + + : F::template apply< T1,T2,T3,T4,T5 > +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/arg.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/arg.hpp new file mode 100644 index 00000000..6f2f8a80 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/arg.hpp @@ -0,0 +1,123 @@ + +// Copyright Peter Dimov 2001-2002 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/arg.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +template<> struct arg< -1 > +{ + BOOST_STATIC_CONSTANT(int, value = -1); + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<1> +{ + BOOST_STATIC_CONSTANT(int, value = 1); + typedef arg<2> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U1 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<2> +{ + BOOST_STATIC_CONSTANT(int, value = 2); + typedef arg<3> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U2 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<3> +{ + BOOST_STATIC_CONSTANT(int, value = 3); + typedef arg<4> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U3 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<4> +{ + BOOST_STATIC_CONSTANT(int, value = 4); + typedef arg<5> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U4 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +template<> struct arg<5> +{ + BOOST_STATIC_CONSTANT(int, value = 5); + typedef arg<6> next; + BOOST_MPL_AUX_ARG_TYPEDEF(na, tag) + BOOST_MPL_AUX_ARG_TYPEDEF(na, type) + + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + typedef U5 type; + BOOST_MPL_AUX_ASSERT_NOT_NA(type); + }; +}; + +BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp new file mode 100644 index 00000000..b0702324 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp @@ -0,0 +1,440 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; + typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; + + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; + typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; + typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind.hpp new file mode 100644 index 00000000..0e9513a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind.hpp @@ -0,0 +1,561 @@ + +// Copyright Peter Dimov 2001 +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + typename T, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg +{ + typedef T type; +}; + +template< + typename T + , typename Arg + > +struct replace_unnamed_arg +{ + typedef Arg next; + typedef T type; +}; + +template< + typename Arg + > +struct replace_unnamed_arg< arg< -1 >, Arg > +{ + typedef typename Arg::next next; + typedef Arg type; +}; + +template< + int N, typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > +{ + typedef bind< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +template< + typename F + > +struct bind0 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + public: + typedef typename apply_wrap0< + f_ + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind0, U1, U2, U3, U4, U5 + > +{ + typedef bind0 f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(1, bind0) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) + +template< + typename F + > +struct bind< F,na,na,na,na,na > + : bind0 +{ +}; + +template< + typename F, typename T1 + > +struct bind1 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + public: + typedef typename apply_wrap1< + f_ + , typename t1::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename U1, typename U2, typename U3 + , typename U4, typename U5 + > +struct resolve_bind_arg< + bind1< F,T1 >, U1, U2, U3, U4, U5 + > +{ + typedef bind1< F,T1 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(2, bind1) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) + +template< + typename F, typename T1 + > +struct bind< F,T1,na,na,na,na > + : bind1< F,T1 > +{ +}; + +template< + typename F, typename T1, typename T2 + > +struct bind2 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + public: + typedef typename apply_wrap2< + f_ + , typename t1::type, typename t2::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename U1, typename U2 + , typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind2< F,T1,T2 >, U1, U2, U3, U4, U5 + > +{ + typedef bind2< F,T1,T2 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(3, bind2) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) + +template< + typename F, typename T1, typename T2 + > +struct bind< F,T1,T2,na,na,na > + : bind2< F,T1,T2 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + public: + typedef typename apply_wrap3< + f_ + , typename t1::type, typename t2::type, typename t3::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename U1 + , typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 + > +{ + typedef bind3< F,T1,T2,T3 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(4, bind3) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind< F,T1,T2,T3,na,na > + : bind3< F,T1,T2,T3 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + public: + typedef typename apply_wrap4< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename U1, typename U2, typename U3, typename U4, typename U5 + > +struct resolve_bind_arg< + bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 + > +{ + typedef bind4< F,T1,T2,T3,T4 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(5, bind4) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind< F,T1,T2,T3,T4,na > + : bind4< F,T1,T2,T3,T4 > +{ +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5 +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; + typedef typename r0::type a0; + typedef typename r0::next n1; + typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; + /// + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef aux::replace_unnamed_arg< T4,n4 > r4; + typedef typename r4::type a4; + typedef typename r4::next n5; + typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; + /// + typedef aux::replace_unnamed_arg< T5,n5 > r5; + typedef typename r5::type a5; + typedef typename r5::next n6; + typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; + /// + public: + typedef typename apply_wrap5< + f_ + , typename t1::type, typename t2::type, typename t3::type + , typename t4::type, typename t5::type + >::type type; + + }; +}; + +namespace aux { + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename U1, typename U2, typename U3, typename U4 + , typename U5 + > +struct resolve_bind_arg< + bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 + > +{ + typedef bind5< F,T1,T2,T3,T4,T5 > f_; + typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; +}; + +} // namespace aux + +BOOST_MPL_AUX_ARITY_SPEC(6, bind5) +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) + +/// primary template (not a specialization!) + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind + : bind5< F,T1,T2,T3,T4,T5 > +{ +}; + +/// if_/eval_if specializations +template< template< typename T1, typename T2, typename T3 > class F, typename Tag > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct if_; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< if_,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename if_< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +template< + template< typename T1, typename T2, typename T3 > class F, typename Tag + > +struct quote3; + +template< typename T1, typename T2, typename T3 > struct eval_if; + +template< + typename Tag, typename T1, typename T2, typename T3 + > +struct bind3< + quote3< eval_if,Tag > + , T1, T2, T3 + > +{ + template< + typename U1 = na, typename U2 = na, typename U3 = na + , typename U4 = na, typename U5 = na + > + struct apply + { + private: + typedef mpl::arg<1> n1; + typedef aux::replace_unnamed_arg< T1,n1 > r1; + typedef typename r1::type a1; + typedef typename r1::next n2; + typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; + /// + typedef aux::replace_unnamed_arg< T2,n2 > r2; + typedef typename r2::type a2; + typedef typename r2::next n3; + typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; + /// + typedef aux::replace_unnamed_arg< T3,n3 > r3; + typedef typename r3::type a3; + typedef typename r3::next n4; + typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; + /// + typedef typename eval_if< + typename t1::type + , t2, t3 + >::type f_; + + public: + typedef typename f_::type type; + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp new file mode 100644 index 00000000..c4a5060f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp @@ -0,0 +1,52 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bind_fwd.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na + > +struct bind; + +template< + typename F + > +struct bind0; + +template< + typename F, typename T1 + > +struct bind1; + +template< + typename F, typename T1, typename T2 + > +struct bind2; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct bind3; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + > +struct bind4; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct bind5; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitand.hpp new file mode 100644 index 00000000..ee40fb3d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitand.hpp @@ -0,0 +1,142 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitand.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitand_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitand_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitand_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitand_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitand_ + : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitand_< N1,N2,N3,N4,na > + + : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitand_< N1,N2,N3,na,na > + + : bitand_< bitand_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitand_< N1,N2,na,na,na > + : bitand_impl< + typename bitand_tag::type + , typename bitand_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitand_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + & BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitor.hpp new file mode 100644 index 00000000..1e28d3b0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitor.hpp @@ -0,0 +1,142 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitor_ + : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitor_< N1,N2,N3,N4,na > + + : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitor_< N1,N2,N3,na,na > + + : bitor_< bitor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitor_< N1,N2,na,na,na > + : bitor_impl< + typename bitor_tag::type + , typename bitor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + | BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp new file mode 100644 index 00000000..2ba879d6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp @@ -0,0 +1,142 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/bitxor.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct bitxor_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct bitxor_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct bitxor_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct bitxor_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct bitxor_ + : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct bitxor_< N1,N2,N3,N4,na > + + : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct bitxor_< N1,N2,N3,na,na > + + : bitxor_< bitxor_< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct bitxor_< N1,N2,na,na,na > + : bitxor_impl< + typename bitxor_tag::type + , typename bitxor_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) + +}} + +namespace boost { namespace mpl { +template<> +struct bitxor_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/deque.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/deque.hpp new file mode 100644 index 00000000..de67398a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/deque.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/deque.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct deque; + +template< + + > +struct deque< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct deque< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct deque< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct deque< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct deque< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct deque< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct deque< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct deque< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct deque + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/divides.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/divides.hpp new file mode 100644 index 00000000..f365d62d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/divides.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/divides.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct divides_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct divides_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct divides_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct divides_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct divides + : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct divides< N1,N2,N3,N4,na > + + : divides< divides< divides< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct divides< N1,N2,N3,na,na > + + : divides< divides< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct divides< N1,N2,na,na,na > + : divides_impl< + typename divides_tag::type + , typename divides_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) + +}} + +namespace boost { namespace mpl { +template<> +struct divides_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + / BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp new file mode 100644 index 00000000..bbc6bf0d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct equal_to + + : equal_to_impl< + typename equal_to_tag::type + , typename equal_to_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp new file mode 100644 index 00000000..9e7a2930 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp, state0, typename deref::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl +{ + typedef fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,First,Last,State,ForwardOp > + : fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp new file mode 100644 index 00000000..bf818731 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp @@ -0,0 +1,554 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +} // namespace aux + +template< + typename T + , typename Tag + + > +struct lambda +{ + typedef false_ is_le; + typedef T result_; + typedef T type; +}; + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , Tag + + > +{ + typedef false_ is_le; + typedef bind0< + F + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1 +{ + typedef F< + typename L1::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1 > class F + , typename L1 + > +struct le_result1< true_,Tag,F,L1 > +{ + typedef bind1< + quote1< F,Tag > + , typename L1::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef typename l1::is_le is_le1; + typedef typename aux::lambda_or< + is_le1::value + >::type is_le; + + typedef aux::le_result1< + is_le, Tag, F, l1 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1 + , typename Tag + > +struct lambda< + bind1< F,T1 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind1< + F + , T1 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2 +{ + typedef F< + typename L1::type, typename L2::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2 > class F + , typename L1, typename L2 + > +struct le_result2< true_,Tag,F,L1,L2 > +{ + typedef bind2< + quote2< F,Tag > + , typename L1::result_, typename L2::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2 > class F + , typename T1, typename T2 + , typename Tag + > +struct lambda< + F< T1,T2 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value + >::type is_le; + + typedef aux::le_result2< + is_le, Tag, F, l1, l2 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2 + , typename Tag + > +struct lambda< + bind2< F,T1,T2 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind2< + F + , T1, T2 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3 > class F + , typename L1, typename L2, typename L3 + > +struct le_result3< true_,Tag,F,L1,L2,L3 > +{ + typedef bind3< + quote3< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3 > class F + , typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + F< T1,T2,T3 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value + >::type is_le; + + typedef aux::le_result3< + is_le, Tag, F, l1, l2, l3 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3 + , typename Tag + > +struct lambda< + bind3< F,T1,T2,T3 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind3< + F + , T1, T2, T3 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4 > class F + , typename L1, typename L2, typename L3, typename L4 + > +struct le_result4< true_,Tag,F,L1,L2,L3,L4 > +{ + typedef bind4< + quote4< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + >::type is_le; + + typedef aux::le_result4< + is_le, Tag, F, l1, l2, l3, l4 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag + > +struct lambda< + bind4< F,T1,T2,T3,T4 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind4< + F + , T1, T2, T3, T4 + > result_; + + typedef result_ type; +}; + +namespace aux { + +template< + typename IsLE, typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5 +{ + typedef F< + typename L1::type, typename L2::type, typename L3::type + , typename L4::type, typename L5::type + > result_; + + typedef result_ type; +}; + +template< + typename Tag + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F + , typename L1, typename L2, typename L3, typename L4, typename L5 + > +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 > +{ + typedef bind5< + quote5< F,Tag > + , typename L1::result_, typename L2::result_, typename L3::result_ + , typename L4::result_, typename L5::result_ + > result_; + + typedef mpl::protect type; +}; + +} // namespace aux + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag + > +struct lambda< + F< T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef lambda< T1,Tag > l1; + typedef lambda< T2,Tag > l2; + typedef lambda< T3,Tag > l3; + typedef lambda< T4,Tag > l4; + typedef lambda< T5,Tag > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef typename aux::lambda_or< + is_le1::value, is_le2::value, is_le3::value, is_le4::value + , is_le5::value + >::type is_le; + + typedef aux::le_result5< + is_le, Tag, F, l1, l2, l3, l4, l5 + > le_result_; + + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind5< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind5< + F + , T1, T2, T3, T4, T5 + > result_; + + typedef result_ type; +}; + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect, Tag > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form + +template< + typename F, typename T1, typename T2, typename T3, typename T4 + , typename T5 + , typename Tag + > +struct lambda< + bind< F,T1,T2,T3,T4,T5 > + , Tag + + > +{ + typedef false_ is_le; + typedef bind< F,T1,T2,T3,T4,T5 > result_; + typedef result_ type; +}; + +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars + +template< + typename F, typename Tag1, typename Tag2 + > +struct lambda< + lambda< F,Tag1 > + , Tag2 + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + typedef typename l1::is_le is_le; + typedef aux::le_result2 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater.hpp new file mode 100644 index 00000000..38c8bb3a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater + + : greater_impl< + typename greater_tag::type + , typename greater_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp new file mode 100644 index 00000000..2aa8370f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/greater_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct greater_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct greater_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct greater_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct greater_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct greater_equal + + : greater_equal_impl< + typename greater_equal_tag::type + , typename greater_equal_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct greater_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/inherit.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/inherit.hpp new file mode 100644 index 00000000..8b34e718 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/inherit.hpp @@ -0,0 +1,125 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/inherit.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct inherit2 + : T1, T2 +{ + typedef inherit2 type; +}; + +template< typename T1 > +struct inherit2< T1,empty_base > +{ + typedef T1 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) +}; + +template< typename T2 > +struct inherit2< empty_base,T2 > +{ + typedef T2 type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) +}; + +template<> +struct inherit2< empty_base,empty_base > +{ + typedef empty_base type; + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, inherit2) + +template< + typename T1 = na, typename T2 = na, typename T3 = na + > +struct inherit3 + : inherit2< + typename inherit2< + T1, T2 + >::type + , T3 + > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(3, inherit3) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + > +struct inherit4 + : inherit2< + typename inherit3< + T1, T2, T3 + >::type + , T4 + > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(4, inherit4) + +template< + typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na + , typename T5 = na + > +struct inherit5 + : inherit2< + typename inherit4< + T1, T2, T3, T4 + >::type + , T5 + > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(5, inherit5) + +/// primary template + +template< + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + > +struct inherit + : inherit5< T1,T2,T3,T4,T5 > +{ +}; + +template<> +struct inherit< na,na,na,na,na > +{ + template< + + typename T1 = empty_base, typename T2 = empty_base + , typename T3 = empty_base, typename T4 = empty_base + , typename T5 = empty_base + + > + struct apply + : inherit< T1,T2,T3,T4,T5 > + { + }; +}; + +BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) +BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) +BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp new file mode 100644 index 00000000..69517958 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp @@ -0,0 +1,133 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ + typedef State state; + typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef typename apply2< StateOp,State,Iterator >::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + template< + typename Iterator + , typename State + , typename StateOp + , typename IteratorOp + > + struct result_ + { + typedef State state; + typedef Iterator iterator; + }; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename Predicate + > +struct iter_fold_if_forward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,ForwardOp, mpl::next > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename BackwardOp + , typename Predicate + > +struct iter_fold_if_backward_step +{ + typedef typename apply2< Predicate,State,Iterator >::type not_last; + typedef typename iter_fold_if_step_impl< + BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value + >::template result_< Iterator,State,BackwardOp, identity > impl_; + + typedef typename impl_::state state; + typedef typename impl_::iterator iterator; +}; + +template< + typename Iterator + , typename State + , typename ForwardOp + , typename ForwardPredicate + , typename BackwardOp + , typename BackwardPredicate + > +struct iter_fold_if_impl +{ + private: + typedef iter_fold_if_null_step< Iterator,State > forward_step0; + typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; + typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; + typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; + typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; + + + typedef typename if_< + typename forward_step4::not_last + , iter_fold_if_impl< + typename forward_step4::iterator + , typename forward_step4::state + , ForwardOp + , ForwardPredicate + , BackwardOp + , BackwardPredicate + > + , iter_fold_if_null_step< + typename forward_step4::iterator + , typename forward_step4::state + > + >::type backward_step4; + + typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; + typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; + typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; + typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; + + + public: + typedef typename backward_step0::state state; + typedef typename backward_step4::iterator iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp new file mode 100644 index 00000000..805790e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp @@ -0,0 +1,180 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 0,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 1,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + + + typedef state1 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 2,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + + + typedef state2 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 3,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + + + typedef state3 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< 4,First,Last,State,ForwardOp > +{ + typedef First iter0; + typedef State state0; + typedef typename apply2< ForwardOp,state0,iter0 >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::type iter4; + + + typedef state4 state; + typedef iter4 iterator; +}; + +template< + int N + , typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl +{ + typedef iter_fold_impl< + 4 + , First + , Last + , State + , ForwardOp + > chunk_; + + typedef iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , typename chunk_::iterator + , Last + , typename chunk_::state + , ForwardOp + > res_; + + typedef typename res_::state state; + typedef typename res_::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,First,Last,State,ForwardOp > + : iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , ForwardOp + > +{ +}; + +template< + typename Last + , typename State + , typename ForwardOp + > +struct iter_fold_impl< -1,Last,Last,State,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp new file mode 100644 index 00000000..f8f109c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp @@ -0,0 +1,228 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false + , bool C5 = false + > +struct lambda_or + : true_ +{ +}; + +template<> +struct lambda_or< false,false,false,false,false > + : false_ +{ +}; + +template< typename Arity > struct lambda_impl +{ + template< typename T, typename Tag, typename Protect > struct result_ + { + typedef T type; + typedef is_placeholder is_le; + }; +}; + +template<> struct lambda_impl< int_<1> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef typename l1::is_le is_le1; + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value + > is_le; + + typedef bind1< + typename F::rebind + , typename l1::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<2> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value + > is_le; + + typedef bind2< + typename F::rebind + , typename l1::type, typename l2::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<3> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value + > is_le; + + typedef bind3< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<4> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value + > is_le; + + typedef bind4< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +template<> struct lambda_impl< int_<5> > +{ + template< typename F, typename Tag, typename Protect > struct result_ + { + typedef lambda< typename F::arg1, Tag, false_ > l1; + typedef lambda< typename F::arg2, Tag, false_ > l2; + typedef lambda< typename F::arg3, Tag, false_ > l3; + typedef lambda< typename F::arg4, Tag, false_ > l4; + typedef lambda< typename F::arg5, Tag, false_ > l5; + + typedef typename l1::is_le is_le1; + typedef typename l2::is_le is_le2; + typedef typename l3::is_le is_le3; + typedef typename l4::is_le is_le4; + typedef typename l5::is_le is_le5; + + + typedef aux::lambda_or< + BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value + > is_le; + + typedef bind5< + typename F::rebind + , typename l1::type, typename l2::type, typename l3::type + , typename l4::type, typename l5::type + > bind_; + + typedef typename if_< + is_le + , if_< Protect, mpl::protect, bind_ > + , identity + >::type type_; + + typedef typename type_::type type; + }; +}; + +} // namespace aux + +template< + typename T + , typename Tag + , typename Protect + > +struct lambda +{ + /// Metafunction forwarding confuses MSVC 6.x + typedef typename aux::template_arity::type arity_; + typedef typename aux::lambda_impl + ::template result_< T,Tag,Protect > l_; + + typedef typename l_::type type; + typedef typename l_::is_le is_le; +}; + +BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) + +template< + typename T + > +struct is_lambda_expression + : lambda::is_le +{ +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less.hpp new file mode 100644 index 00000000..928d0e30 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less + + : less_impl< + typename less_tag::type + , typename less_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp new file mode 100644 index 00000000..364cd967 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/less_equal.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct less_equal_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct less_equal_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct less_equal_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct less_equal_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct less_equal + + : less_equal_impl< + typename less_equal_tag::type + , typename less_equal_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal) + +}} + +namespace boost { namespace mpl { + +template<> +struct less_equal_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list.hpp new file mode 100644 index 00000000..4e8ad53d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct list; + +template< + + > +struct list< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list0< > +{ + typedef list0< >::type type; +}; + +template< + typename T0 + > +struct list< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list1 +{ + typedef typename list1::type type; +}; + +template< + typename T0, typename T1 + > +struct list< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list2< T0,T1 > +{ + typedef typename list2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct list< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list3< T0,T1,T2 > +{ + typedef typename list3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct list< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list4< T0,T1,T2,T3 > +{ + typedef typename list4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct list< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list5< T0,T1,T2,T3,T4 > +{ + typedef typename list5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct list< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : list8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : list15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : list16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : list17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : list18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct list< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : list19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct list + : list20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list_c.hpp new file mode 100644 index 00000000..0b48a7f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/list_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/list_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct list_c; + +template< + typename T + > +struct list_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list0_c +{ + typedef typename list0_c::type type; +}; + +template< + typename T, long C0 + > +struct list_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list1_c< T,C0 > +{ + typedef typename list1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct list_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list2_c< T,C0,C1 > +{ + typedef typename list2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct list_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list3_c< T,C0,C1,C2 > +{ + typedef typename list3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct list_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list4_c< T,C0,C1,C2,C3 > +{ + typedef typename list4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct list_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : list7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : list16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : list17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : list18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct list_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : list19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct list_c + : list20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/map.hpp new file mode 100644 index 00000000..837e0137 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/map.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/map.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct map; + +template< + + > +struct map< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map0< > +{ + typedef map0< >::type type; +}; + +template< + typename T0 + > +struct map< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map1 +{ + typedef typename map1::type type; +}; + +template< + typename T0, typename T1 + > +struct map< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map2< T0,T1 > +{ + typedef typename map2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct map< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map3< T0,T1,T2 > +{ + typedef typename map3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct map< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map4< T0,T1,T2,T3 > +{ + typedef typename map4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct map< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map5< T0,T1,T2,T3,T4 > +{ + typedef typename map5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct map< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : map8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : map15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : map16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : map17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : map18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct map< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : map19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct map + : map20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/minus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/minus.hpp new file mode 100644 index 00000000..0b8b5cee --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/minus.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/minus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct minus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct minus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct minus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct minus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct minus + : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct minus< N1,N2,N3,N4,na > + + : minus< minus< minus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct minus< N1,N2,N3,na,na > + + : minus< minus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct minus< N1,N2,na,na,na > + : minus_impl< + typename minus_tag::type + , typename minus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) + +}} + +namespace boost { namespace mpl { +template<> +struct minus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + - BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/modulus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/modulus.hpp new file mode 100644 index 00000000..6a64e49a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/modulus.hpp @@ -0,0 +1,99 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/modulus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct modulus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct modulus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct modulus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct modulus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct modulus + + : modulus_impl< + typename modulus_tag::type + , typename modulus_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus) + +}} + +namespace boost { namespace mpl { +template<> +struct modulus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + % BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp new file mode 100644 index 00000000..c08d7f06 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp @@ -0,0 +1,92 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/not_equal_to.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct not_equal_to_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct not_equal_to_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct not_equal_to_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct not_equal_to_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct not_equal_to + + : not_equal_to_impl< + typename not_equal_to_tag::type + , typename not_equal_to_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to) + +}} + +namespace boost { namespace mpl { + +template<> +struct not_equal_to_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/or.hpp new file mode 100644 index 00000000..986b2e0e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/or.hpp @@ -0,0 +1,64 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/or.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< bool C_, typename T1, typename T2, typename T3, typename T4 > +struct or_impl + : true_ +{ +}; + +template< typename T1, typename T2, typename T3, typename T4 > +struct or_impl< false,T1,T2,T3,T4 > + : or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4 + , false_ + > +{ +}; + +template<> +struct or_impl< + false + , false_, false_, false_, false_ + > + : false_ +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename T3 = false_, typename T4 = false_, typename T5 = false_ + > +struct or_ + + : aux::or_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value + , T2, T3, T4, T5 + > + +{ +}; + +BOOST_MPL_AUX_NA_SPEC2( + 2 + , 5 + , or_ + ) + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp new file mode 100644 index 00000000..ff97364b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp @@ -0,0 +1,105 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/placeholders.hpp" header +// -- DO NOT modify by hand! + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg< -1 > _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<1> _1; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<2> _2; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<3> _3; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<4> _4; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<5> _5; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5; +} + +}} +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<6> _6; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6; +} + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/plus.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/plus.hpp new file mode 100644 index 00000000..ed2e432d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/plus.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/plus.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct plus_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct plus_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct plus_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct plus_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct plus + : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct plus< N1,N2,N3,N4,na > + + : plus< plus< plus< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct plus< N1,N2,N3,na,na > + + : plus< plus< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct plus< N1,N2,na,na,na > + : plus_impl< + typename plus_tag::type + , typename plus_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) + +}} + +namespace boost { namespace mpl { +template<> +struct plus_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + + BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/quote.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/quote.hpp new file mode 100644 index 00000000..d7d0420e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/quote.hpp @@ -0,0 +1,123 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/quote.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< typename T, bool has_type_ > +struct quote_impl + : T +{ +}; + +template< typename T > +struct quote_impl< T,false > +{ + typedef T type; +}; + +template< + template< typename P1 > class F + , typename Tag = void_ + > +struct quote1 +{ + template< typename U1 > struct apply + + : quote_impl< + F + , aux::has_type< F >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + : quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + : quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + > + + { + }; +}; + +template< + template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ + > +struct quote4 +{ + template< + typename U1, typename U2, typename U3, typename U4 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + > + + { + }; +}; + +template< + template< + typename P1, typename P2, typename P3, typename P4 + , typename P5 + > + class F + , typename Tag = void_ + > +struct quote5 +{ + template< + typename U1, typename U2, typename U3, typename U4 + , typename U5 + > + struct apply + + : quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + > + + { + }; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp new file mode 100644 index 00000000..c468684c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp, fwd_state0, typename deref::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::type >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::type + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp new file mode 100644 index 00000000..658f92a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp @@ -0,0 +1,231 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { namespace aux { + +/// forward declaration + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef fwd_state0 bkwd_state0; + typedef bkwd_state0 state; + typedef iter0 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + typedef bkwd_state0 state; + typedef iter1 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter2 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter3 iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp > +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef iter4 iterator; +}; + +template< + long N + , typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl +{ + typedef First iter0; + typedef State fwd_state0; + typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef reverse_iter_fold_impl< + ( (N - 4) < 0 ? 0 : N - 4 ) + , iter4 + , Last + , fwd_state4 + , BackwardOp + , ForwardOp + > nested_chunk; + + typedef typename nested_chunk::state bkwd_state4; + typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; + typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; + typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; + typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; + + + typedef bkwd_state0 state; + typedef typename nested_chunk::iterator iterator; +}; + +template< + typename First + , typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp > +{ + typedef reverse_iter_fold_impl< + -1 + , typename mpl::next::type + , Last + , typename apply2< ForwardOp,State,First >::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , First + >::type state; + + typedef typename nested_step::iterator iterator; +}; + +template< + typename Last + , typename State + , typename BackwardOp + , typename ForwardOp + > +struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp > +{ + typedef State state; + typedef Last iterator; +}; + +}}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set.hpp new file mode 100644 index 00000000..5721922e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct set; + +template< + + > +struct set< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set0< > +{ + typedef set0< >::type type; +}; + +template< + typename T0 + > +struct set< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set1 +{ + typedef typename set1::type type; +}; + +template< + typename T0, typename T1 + > +struct set< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set2< T0,T1 > +{ + typedef typename set2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct set< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set3< T0,T1,T2 > +{ + typedef typename set3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct set< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set4< T0,T1,T2,T3 > +{ + typedef typename set4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct set< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set5< T0,T1,T2,T3,T4 > +{ + typedef typename set5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct set< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : set8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : set15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : set16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : set17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : set18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct set< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : set19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct set + : set20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set_c.hpp new file mode 100644 index 00000000..cbeb932c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/set_c.hpp @@ -0,0 +1,328 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/set_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct set_c; + +template< + typename T + > +struct set_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set0_c +{ + typedef typename set0_c::type type; +}; + +template< + typename T, long C0 + > +struct set_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set1_c< T,C0 > +{ + typedef typename set1_c< T,C0 >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct set_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set2_c< T,C0,C1 > +{ + typedef typename set2_c< T,C0,C1 >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct set_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set3_c< T,C0,C1,C2 > +{ + typedef typename set3_c< T,C0,C1,C2 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct set_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set4_c< T,C0,C1,C2,C3 > +{ + typedef typename set4_c< T,C0,C1,C2,C3 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct set_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set5_c< T,C0,C1,C2,C3,C4 > +{ + typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set6_c< T,C0,C1,C2,C3,C4,C5 > +{ + typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : set7_c< T,C0,C1,C2,C3,C4,C5,C6 > +{ + typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 > +{ + typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 > +{ + typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +{ + typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +{ + typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +{ + typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +{ + typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set14_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + > +{ + typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set15_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + > +{ + typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : set16_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15 + > +{ + typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : set17_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16 + > +{ + typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : set18_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17 + > +{ + typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct set_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : set19_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18 + > +{ + typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct set_c + : set20_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, C19 + > +{ + typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp new file mode 100644 index 00000000..cf9c837d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_left.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_left_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_left_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_left_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_left_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_left + + : shift_left_impl< + typename shift_left_tag::type + , typename shift_left_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_left_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + << BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp new file mode 100644 index 00000000..477229f2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp @@ -0,0 +1,97 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Jaap Suter 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/shift_right.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct shift_right_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct shift_right_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct shift_right_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct shift_right_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct shift_right + + : shift_right_impl< + typename shift_right_tag::type + , typename shift_right_tag::type + >::template apply< N1,N2 >::type +{ +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right) + +}} + +namespace boost { namespace mpl { +template<> +struct shift_right_impl< integral_c_tag,integral_c_tag > +{ + template< typename N, typename S > struct apply + + : integral_c< + typename N::value_type + , ( BOOST_MPL_AUX_VALUE_WKND(N)::value + >> BOOST_MPL_AUX_VALUE_WKND(S)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp new file mode 100644 index 00000000..a23fc238 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header +// -- DO NOT modify by hand! + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/times.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/times.hpp new file mode 100644 index 00000000..ca88d405 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/times.hpp @@ -0,0 +1,141 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/times.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename Tag1 + , typename Tag2 + > +struct times_impl + : if_c< + ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) + > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) + ) + + , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 > + , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct times_impl< na,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< na,Tag > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct times_impl< Tag,na > +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename T > struct times_tag +{ + typedef typename T::tag type; +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > +struct times + : times< times< times< times< N1,N2 >, N3>, N4>, N5> +{ +}; + +template< + typename N1, typename N2, typename N3, typename N4 + > +struct times< N1,N2,N3,N4,na > + + : times< times< times< N1,N2 >, N3>, N4> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, N4, na ) + ) +}; + +template< + typename N1, typename N2, typename N3 + > +struct times< N1,N2,N3,na,na > + + : times< times< N1,N2 >, N3> +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, N3, na, na ) + ) +}; + +template< + typename N1, typename N2 + > +struct times< N1,N2,na,na,na > + : times_impl< + typename times_tag::type + , typename times_tag::type + >::template apply< N1,N2 >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) + +}; + +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) + +}} + +namespace boost { namespace mpl { +template<> +struct times_impl< integral_c_tag,integral_c_tag > +{ + template< typename N1, typename N2 > struct apply + + : integral_c< + typename aux::largest_int< + typename N1::value_type + , typename N2::value_type + >::type + , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value + * BOOST_MPL_AUX_VALUE_WKND(N2)::value + ) + > + { + }; +}; + +}} diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp new file mode 100644 index 00000000..2194ce9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp @@ -0,0 +1,94 @@ + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/unpack_args.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +namespace aux { + +template< int size, typename F, typename Args > +struct unpack_args_impl; + +template< typename F, typename Args > +struct unpack_args_impl< 0,F,Args > + : apply0< + F + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 1,F,Args > + : apply1< + F + , typename at_c< Args,0 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 2,F,Args > + : apply2< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 3,F,Args > + : apply3< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 4,F,Args > + : apply4< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + > +{ +}; + +template< typename F, typename Args > +struct unpack_args_impl< 5,F,Args > + : apply5< + F + , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type + , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type + , typename at_c< Args,4 >::type + > +{ +}; + +} + +template< + typename F + > +struct unpack_args +{ + template< typename Args > struct apply + + : aux::unpack_args_impl< size::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector.hpp new file mode 100644 index 00000000..bfa9565a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector.hpp @@ -0,0 +1,323 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na + , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na + , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na + , typename T12 = na, typename T13 = na, typename T14 = na + , typename T15 = na, typename T16 = na, typename T17 = na + , typename T18 = na, typename T19 = na + > +struct vector; + +template< + + > +struct vector< + na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector0< > +{ + typedef vector0< >::type type; +}; + +template< + typename T0 + > +struct vector< + T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector1 +{ + typedef typename vector1::type type; +}; + +template< + typename T0, typename T1 + > +struct vector< + T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector2< T0,T1 > +{ + typedef typename vector2< T0,T1 >::type type; +}; + +template< + typename T0, typename T1, typename T2 + > +struct vector< + T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector3< T0,T1,T2 > +{ + typedef typename vector3< T0,T1,T2 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3 + > +struct vector< + T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector4< T0,T1,T2,T3 > +{ + typedef typename vector4< T0,T1,T2,T3 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + > +struct vector< + T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector5< T0,T1,T2,T3,T4 > +{ + typedef typename vector5< T0,T1,T2,T3,T4 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5 + > +struct vector< + T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector6< T0,T1,T2,T3,T4,T5 > +{ + typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector7< T0,T1,T2,T3,T4,T5,T6 > +{ + typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na + , na, na, na + > + : vector8< T0,T1,T2,T3,T4,T5,T6,T7 > +{ + typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na + , na, na, na + > + : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 > +{ + typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na + , na, na, na + > + : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 > +{ + typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na + , na, na, na + > + : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +{ + typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na + , na, na, na, na + > + : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +{ + typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na + , na, na, na, na + > + : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +{ + typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na + , na, na, na, na + > + : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +{ + typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na + , na, na, na, na + > + : vector15< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + > +{ + typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, na, na, na, na + > + : vector16< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15 + > +{ + typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, na, na, na + > + : vector17< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16 + > +{ + typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, na, na + > + : vector18< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17 + > +{ + typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type; +}; + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18 + > +struct vector< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, na + > + : vector19< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18 + > +{ + typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T0, typename T1, typename T2, typename T3, typename T4 + , typename T5, typename T6, typename T7, typename T8, typename T9 + , typename T10, typename T11, typename T12, typename T13, typename T14 + , typename T15, typename T16, typename T17, typename T18, typename T19 + > +struct vector + : vector20< + T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 + , T15, T16, T17, T18, T19 + > +{ + typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp new file mode 100644 index 00000000..0f1560d7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// Preprocessed version of "boost/mpl/vector_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX + , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX + , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX + , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX + , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX + , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX + , long C18 = LONG_MAX, long C19 = LONG_MAX + > +struct vector_c; + +template< + typename T + > +struct vector_c< + T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector0_c +{ + typedef typename vector0_c::type type; +}; + +template< + typename T, long C0 + > +struct vector_c< + T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector1_c< T, T(C0) > +{ + typedef typename vector1_c< T, T(C0) >::type type; +}; + +template< + typename T, long C0, long C1 + > +struct vector_c< + T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector2_c< T, T(C0), T(C1) > +{ + typedef typename vector2_c< T, T(C0), T(C1) >::type type; +}; + +template< + typename T, long C0, long C1, long C2 + > +struct vector_c< + T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector3_c< T, T(C0), T(C1), T(C2) > +{ + typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3 + > +struct vector_c< + T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector4_c< T, T(C0), T(C1), T(C2), T(C3) > +{ + typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4 + > +struct vector_c< + T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) > +{ + typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) > +{ + typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX + > + : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) > +{ + typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX + > + : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) > +{ + typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) > +{ + typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + , LONG_MAX + > + : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) > +{ + typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) > +{ + typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) > +{ + typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) > +{ + typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) > +{ + typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) > +{ + typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) > +{ + typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX + > + : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) > +{ + typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, LONG_MAX, LONG_MAX + > + : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) > +{ + typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type; +}; + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18 + > +struct vector_c< + T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 + , C15, C16, C17, C18, LONG_MAX + > + : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) > +{ + typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type; +}; + +/// primary template (not a specialization!) + +template< + typename T, long C0, long C1, long C2, long C3, long C4, long C5 + , long C6, long C7, long C8, long C9, long C10, long C11, long C12 + , long C13, long C14, long C15, long C16, long C17, long C18, long C19 + > +struct vector_c + : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) > +{ + typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type; +}; + +}} + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/def_params_tail.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/def_params_tail.hpp new file mode 100644 index 00000000..4fe91e74 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/def_params_tail.hpp @@ -0,0 +1,105 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: def_params_tail.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#include +#include +#include +#include + +// BOOST_MPL_PP_DEF_PARAMS_TAIL(1,T,value): , T1 = value, .., Tn = value +// BOOST_MPL_PP_DEF_PARAMS_TAIL(2,T,value): , T2 = value, .., Tn = value +// BOOST_MPL_PP_DEF_PARAMS_TAIL(n,T,value): + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include +# include + +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1( \ + i \ + , BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,i) \ + , param \ + , value_func \ + ) \ + /**/ + +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1(i, n, param, value_func) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i,n,param,value_func) \ + /**/ + +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i, n, param, value_func) \ + BOOST_PP_COMMA_IF(BOOST_PP_AND(i,n)) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_##i(n,param,value_func) \ + /**/ + +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v()) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_1(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_2(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_3(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_4(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_5(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_6(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_7(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6,p7) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_8(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9 v(),p1,p2,p3,p4,p5,p6,p7,p8) +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_9(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p1,p2,p3,p4,p5,p6,p7,p8,p9) + +#else + +# include +# include +# include +# include +# include +# include + +# define BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC(unused, i, op) \ + , BOOST_PP_CAT( \ + BOOST_PP_TUPLE_ELEM(3, 1, op) \ + , BOOST_PP_ADD_D(1, i, BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(3, 0, op))) \ + ) BOOST_PP_TUPLE_ELEM(3, 2, op)() \ + /**/ + +# define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \ + BOOST_PP_REPEAT( \ + BOOST_PP_SUB_D(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, i) \ + , BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC \ + , (i, param, value_func) \ + ) \ + /**/ + + +#endif // BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES + +#define BOOST_MPL_PP_DEF_PARAMS_TAIL(i, param, value) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \ + /**/ + +#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \ + /**/ +#else +# define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \ + BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_EMPTY) \ + /**/ +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/default_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/default_params.hpp new file mode 100644 index 00000000..b5676f3a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/default_params.hpp @@ -0,0 +1,67 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: default_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): +// BOOST_MPL_PP_DEFAULT_PARAMS(1,T,int): T1 = int +// BOOST_MPL_PP_DEFAULT_PARAMS(2,T,int): T1 = int, T2 = int +// BOOST_MPL_PP_DEFAULT_PARAMS(n,T,int): T1 = int, T2 = int, .., Tn = int + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +# define BOOST_MPL_PP_DEFAULT_PARAMS(n,p,v) \ + BOOST_PP_CAT(BOOST_MPL_PP_DEFAULT_PARAMS_,n)(p,v) \ + /**/ + +# define BOOST_MPL_PP_DEFAULT_PARAMS_0(p,v) +# define BOOST_MPL_PP_DEFAULT_PARAMS_1(p,v) p##1=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_2(p,v) p##1=v,p##2=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_3(p,v) p##1=v,p##2=v,p##3=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_4(p,v) p##1=v,p##2=v,p##3=v,p##4=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_5(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_6(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_7(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_8(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v +# define BOOST_MPL_PP_DEFAULT_PARAMS_9(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v,p##9=v + +#else + +# include +# include +# include +# include +# include + +# define BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC(unused, i, pv) \ + BOOST_PP_COMMA_IF(i) \ + BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2,0,pv), BOOST_PP_INC(i) ) \ + = BOOST_PP_TUPLE_ELEM(2,1,pv) \ + /**/ + +# define BOOST_MPL_PP_DEFAULT_PARAMS(n, param, value) \ + BOOST_PP_REPEAT( \ + n \ + , BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC \ + , (param,value) \ + ) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/enum.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/enum.hpp new file mode 100644 index 00000000..9338e727 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/enum.hpp @@ -0,0 +1,62 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: enum.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_ENUM(0,int): +// BOOST_MPL_PP_ENUM(1,int): int +// BOOST_MPL_PP_ENUM(2,int): int, int +// BOOST_MPL_PP_ENUM(n,int): int, int, .., int + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +# define BOOST_MPL_PP_ENUM(n, param) \ + BOOST_PP_CAT(BOOST_MPL_PP_ENUM_,n)(param) \ + /**/ + +# define BOOST_MPL_PP_ENUM_0(p) +# define BOOST_MPL_PP_ENUM_1(p) p +# define BOOST_MPL_PP_ENUM_2(p) p,p +# define BOOST_MPL_PP_ENUM_3(p) p,p,p +# define BOOST_MPL_PP_ENUM_4(p) p,p,p,p +# define BOOST_MPL_PP_ENUM_5(p) p,p,p,p,p +# define BOOST_MPL_PP_ENUM_6(p) p,p,p,p,p,p +# define BOOST_MPL_PP_ENUM_7(p) p,p,p,p,p,p,p +# define BOOST_MPL_PP_ENUM_8(p) p,p,p,p,p,p,p,p +# define BOOST_MPL_PP_ENUM_9(p) p,p,p,p,p,p,p,p,p + +#else + +# include +# include + +# define BOOST_MPL_PP_AUX_ENUM_FUNC(unused, i, param) \ + BOOST_PP_COMMA_IF(i) param \ + /**/ + +# define BOOST_MPL_PP_ENUM(n, param) \ + BOOST_PP_REPEAT( \ + n \ + , BOOST_MPL_PP_AUX_ENUM_FUNC \ + , param \ + ) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/ext_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/ext_params.hpp new file mode 100644 index 00000000..9581e235 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/ext_params.hpp @@ -0,0 +1,78 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: ext_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_EXT_PARAMS(2,2,T): +// BOOST_MPL_PP_EXT_PARAMS(2,3,T): T2 +// BOOST_MPL_PP_EXT_PARAMS(2,4,T): T2, T3 +// BOOST_MPL_PP_EXT_PARAMS(2,n,T): T2, T3, .., Tn-1 + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include +# include + +# define BOOST_MPL_PP_EXT_PARAMS(i,j,p) \ + BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,BOOST_MPL_PP_SUB(j,i),p) \ + /**/ + +# define BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,n,p) \ + BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \ + /**/ + +# define BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \ + BOOST_MPL_PP_EXT_PARAMS_##i(n,p) \ + /**/ + +# define BOOST_MPL_PP_EXT_PARAMS_1(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9) +# define BOOST_MPL_PP_EXT_PARAMS_2(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1) +# define BOOST_MPL_PP_EXT_PARAMS_3(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1,p2) +# define BOOST_MPL_PP_EXT_PARAMS_4(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4,p##5,p##6,p##7,p##8,p##9,p1,p2,p3) +# define BOOST_MPL_PP_EXT_PARAMS_5(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5,p##6,p##7,p##8,p##9,p1,p2,p3,p4) +# define BOOST_MPL_PP_EXT_PARAMS_6(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6,p##7,p##8,p##9,p1,p2,p3,p4,p5) +# define BOOST_MPL_PP_EXT_PARAMS_7(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7,p##8,p##9,p1,p2,p3,p4,p5,p6) +# define BOOST_MPL_PP_EXT_PARAMS_8(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8,p##9,p1,p2,p3,p4,p5,p6,p7) +# define BOOST_MPL_PP_EXT_PARAMS_9(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9,p1,p2,p3,p4,p5,p6,p7,p8) + +#else + +# include +# include +# include +# include +# include +# include + +# define BOOST_MPL_PP_AUX_EXT_PARAM_FUNC(unused, i, op) \ + BOOST_PP_COMMA_IF(i) \ + BOOST_PP_CAT( \ + BOOST_PP_TUPLE_ELEM(2,1,op) \ + , BOOST_PP_ADD_D(1, i, BOOST_PP_TUPLE_ELEM(2,0,op)) \ + ) \ + /**/ + +# define BOOST_MPL_PP_EXT_PARAMS(i, j, param) \ + BOOST_PP_REPEAT( \ + BOOST_PP_SUB_D(1,j,i) \ + , BOOST_MPL_PP_AUX_EXT_PARAM_FUNC \ + , (i,param) \ + ) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/filter_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/filter_params.hpp new file mode 100644 index 00000000..38f3cbfd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/filter_params.hpp @@ -0,0 +1,28 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: filter_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define BOOST_MPL_PP_FILTER_PARAMS_0(p1,p2,p3,p4,p5,p6,p7,p8,p9) +#define BOOST_MPL_PP_FILTER_PARAMS_1(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1 +#define BOOST_MPL_PP_FILTER_PARAMS_2(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2 +#define BOOST_MPL_PP_FILTER_PARAMS_3(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3 +#define BOOST_MPL_PP_FILTER_PARAMS_4(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4 +#define BOOST_MPL_PP_FILTER_PARAMS_5(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5 +#define BOOST_MPL_PP_FILTER_PARAMS_6(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6 +#define BOOST_MPL_PP_FILTER_PARAMS_7(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7 +#define BOOST_MPL_PP_FILTER_PARAMS_8(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8 +#define BOOST_MPL_PP_FILTER_PARAMS_9(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8,p9 + +#endif // BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/params.hpp new file mode 100644 index 00000000..2dd41940 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/params.hpp @@ -0,0 +1,65 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_PARAMS(0,T): +// BOOST_MPL_PP_PARAMS(1,T): T1 +// BOOST_MPL_PP_PARAMS(2,T): T1, T2 +// BOOST_MPL_PP_PARAMS(n,T): T1, T2, .., Tn + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +# define BOOST_MPL_PP_PARAMS(n,p) \ + BOOST_PP_CAT(BOOST_MPL_PP_PARAMS_,n)(p) \ + /**/ + +# define BOOST_MPL_PP_PARAMS_0(p) +# define BOOST_MPL_PP_PARAMS_1(p) p##1 +# define BOOST_MPL_PP_PARAMS_2(p) p##1,p##2 +# define BOOST_MPL_PP_PARAMS_3(p) p##1,p##2,p##3 +# define BOOST_MPL_PP_PARAMS_4(p) p##1,p##2,p##3,p##4 +# define BOOST_MPL_PP_PARAMS_5(p) p##1,p##2,p##3,p##4,p##5 +# define BOOST_MPL_PP_PARAMS_6(p) p##1,p##2,p##3,p##4,p##5,p##6 +# define BOOST_MPL_PP_PARAMS_7(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7 +# define BOOST_MPL_PP_PARAMS_8(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8 +# define BOOST_MPL_PP_PARAMS_9(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9 + +#else + +# include +# include +# include +# include + +# define BOOST_MPL_PP_AUX_PARAM_FUNC(unused, i, param) \ + BOOST_PP_COMMA_IF(i) \ + BOOST_PP_CAT(param, BOOST_PP_INC(i)) \ + /**/ + +# define BOOST_MPL_PP_PARAMS(n, param) \ + BOOST_PP_REPEAT( \ + n \ + , BOOST_MPL_PP_AUX_PARAM_FUNC \ + , param \ + ) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/sub.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/sub.hpp new file mode 100644 index 00000000..cdc0bb92 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/sub.hpp @@ -0,0 +1,65 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: sub.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) +# include + +# define BOOST_MPL_PP_SUB(i,j) \ + BOOST_MPL_PP_SUB_DELAY(i,j) \ + /**/ + +# define BOOST_MPL_PP_SUB_DELAY(i,j) \ + BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_SUB_##j) \ + /**/ +#else +# define BOOST_MPL_PP_SUB(i,j) \ + BOOST_MPL_PP_SUB_DELAY(i,j) \ + /**/ + +# define BOOST_MPL_PP_SUB_DELAY(i,j) \ + BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_SUB_##j \ + /**/ +#endif + +# define BOOST_MPL_PP_SUB_0 (0,1,2,3,4,5,6,7,8,9,10) +# define BOOST_MPL_PP_SUB_1 (0,0,1,2,3,4,5,6,7,8,9) +# define BOOST_MPL_PP_SUB_2 (0,0,0,1,2,3,4,5,6,7,8) +# define BOOST_MPL_PP_SUB_3 (0,0,0,0,1,2,3,4,5,6,7) +# define BOOST_MPL_PP_SUB_4 (0,0,0,0,0,1,2,3,4,5,6) +# define BOOST_MPL_PP_SUB_5 (0,0,0,0,0,0,1,2,3,4,5) +# define BOOST_MPL_PP_SUB_6 (0,0,0,0,0,0,0,1,2,3,4) +# define BOOST_MPL_PP_SUB_7 (0,0,0,0,0,0,0,0,1,2,3) +# define BOOST_MPL_PP_SUB_8 (0,0,0,0,0,0,0,0,0,1,2) +# define BOOST_MPL_PP_SUB_9 (0,0,0,0,0,0,0,0,0,0,1) +# define BOOST_MPL_PP_SUB_10 (0,0,0,0,0,0,0,0,0,0,0) + +#else + +# include + +# define BOOST_MPL_PP_SUB(i,j) \ + BOOST_PP_SUB(i,j) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/tuple.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/tuple.hpp new file mode 100644 index 00000000..f46d0e96 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/preprocessor/tuple.hpp @@ -0,0 +1,29 @@ + +#ifndef BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED +#define BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: tuple.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define BOOST_MPL_PP_TUPLE_11_ELEM_0(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e0 +#define BOOST_MPL_PP_TUPLE_11_ELEM_1(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e1 +#define BOOST_MPL_PP_TUPLE_11_ELEM_2(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e2 +#define BOOST_MPL_PP_TUPLE_11_ELEM_3(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e3 +#define BOOST_MPL_PP_TUPLE_11_ELEM_4(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e4 +#define BOOST_MPL_PP_TUPLE_11_ELEM_5(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e5 +#define BOOST_MPL_PP_TUPLE_11_ELEM_6(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e6 +#define BOOST_MPL_PP_TUPLE_11_ELEM_7(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e7 +#define BOOST_MPL_PP_TUPLE_11_ELEM_8(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e8 +#define BOOST_MPL_PP_TUPLE_11_ELEM_9(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e9 +#define BOOST_MPL_PP_TUPLE_11_ELEM_10(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e10 + +#endif // BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/static_cast.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/static_cast.hpp new file mode 100644 index 00000000..9ffc428b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/static_cast.hpp @@ -0,0 +1,27 @@ + +#ifndef BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED +#define BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: static_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \ + || BOOST_WORKAROUND(__GNUC__, < 3) \ + || BOOST_WORKAROUND(__MWERKS__, <= 0x3001) +# define BOOST_MPL_AUX_STATIC_CAST(T, expr) (T)(expr) +#else +# define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast(expr) +#endif + +#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/template_arity_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/template_arity_fwd.hpp new file mode 100644 index 00000000..4b7c8b81 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/template_arity_fwd.hpp @@ -0,0 +1,23 @@ + +#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED +#define BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: template_arity_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { namespace aux { + +template< typename F > struct template_arity; + +}}} + +#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/type_wrapper.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/type_wrapper.hpp new file mode 100644 index 00000000..01f6c1c3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/type_wrapper.hpp @@ -0,0 +1,47 @@ + +#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED +#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Peter Dimov 2000-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: type_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +namespace boost { namespace mpl { namespace aux { + +template< typename T > struct type_wrapper +{ + typedef T type; +}; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +// agurt 08/may/03: a complicated way to extract the wrapped type; need it +// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the +// nested 'type' from 'type_wrapper' when the latter was the result of a +// 'typeof' expression +template< typename T > struct wrapped_type; + +template< typename T > struct wrapped_type< type_wrapper > +{ + typedef T type; +}; +#else +template< typename W > struct wrapped_type +{ + typedef typename W::type type; +}; +#endif + +}}} + +#endif // BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/value_wknd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/value_wknd.hpp new file mode 100644 index 00000000..a61b7760 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/value_wknd.hpp @@ -0,0 +1,89 @@ + +#ifndef BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED +#define BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: value_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \ + || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) + +# include + +namespace boost { namespace mpl { namespace aux { +template< typename C_ > struct value_wknd + : C_ +{ +}; + +#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) +template<> struct value_wknd + : int_<1> +{ + using int_<1>::value; +}; +#endif +}}} + + +#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) +# define BOOST_MPL_AUX_VALUE_WKND(C) \ + ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux::value_wknd< C > \ +/**/ +# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) BOOST_MPL_AUX_VALUE_WKND(C) +#else +# define BOOST_MPL_AUX_VALUE_WKND(C) C +# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \ + ::boost::mpl::aux::value_wknd< C > \ +/**/ +#endif + +#else // BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS + +# define BOOST_MPL_AUX_VALUE_WKND(C) C +# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) C + +#endif + +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) +# define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \ + BOOST_MPL_AUX_STATIC_CAST(T, C::value) \ +/**/ +#else +# define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \ + BOOST_MPL_AUX_VALUE_WKND(C)::value \ +/**/ +#endif + + +namespace boost { namespace mpl { namespace aux { + +template< typename T > struct value_type_wknd +{ + typedef typename T::value_type type; +}; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) +template<> struct value_type_wknd +{ + typedef int type; +}; +#endif + +}}} + +#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/yes_no.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/yes_no.hpp new file mode 100644 index 00000000..b9a6e36f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/aux_/yes_no.hpp @@ -0,0 +1,58 @@ + +#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED +#define BOOST_MPL_AUX_YES_NO_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: yes_no.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + + +namespace boost { namespace mpl { namespace aux { + +typedef char (&no_tag)[1]; +typedef char (&yes_tag)[2]; + +template< bool C_ > struct yes_no_tag +{ + typedef no_tag type; +}; + +template<> struct yes_no_tag +{ + typedef yes_tag type; +}; + + +template< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag +{ +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + typedef char (&type)[n]; +#else + char buf[n]; + typedef weighted_tag type; +#endif +}; + +#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) +template<> struct weighted_tag<0> +{ + typedef char (&type)[1]; +}; +#endif + +}}} + +#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool.hpp new file mode 100644 index 00000000..3b3a221c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_BOOL_HPP_INCLUDED +#define BOOST_MPL_BOOL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: bool.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< bool C_ > struct bool_ +{ + BOOST_STATIC_CONSTANT(bool, value = C_); + typedef integral_c_tag tag; + typedef bool_ type; + typedef bool value_type; + operator bool() const { return this->value; } +}; + +#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) +template< bool C_ > +bool const bool_::value; +#endif + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +#endif // BOOST_MPL_BOOL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool_fwd.hpp new file mode 100644 index 00000000..a2460e36 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/bool_fwd.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_BOOL_FWD_HPP_INCLUDED +#define BOOST_MPL_BOOL_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: bool_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< bool C_ > struct bool_; + +// shorcuts +typedef bool_ true_; +typedef bool_ false_; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +BOOST_MPL_AUX_ADL_BARRIER_DECL(bool_) +BOOST_MPL_AUX_ADL_BARRIER_DECL(true_) +BOOST_MPL_AUX_ADL_BARRIER_DECL(false_) + +#endif // BOOST_MPL_BOOL_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/eval_if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/eval_if.hpp new file mode 100644 index 00000000..36a537a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/eval_if.hpp @@ -0,0 +1,71 @@ + +#ifndef BOOST_MPL_EVAL_IF_HPP_INCLUDED +#define BOOST_MPL_EVAL_IF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: eval_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(C) + , typename BOOST_MPL_AUX_NA_PARAM(F1) + , typename BOOST_MPL_AUX_NA_PARAM(F2) + > +struct eval_if +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \ + && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \ + ) +{ + typedef typename if_::type f_; + typedef typename f_::type type; +#else + : if_::type +{ +#endif + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2)) +}; + +// (almost) copy & paste in order to save one more +// recursively nested template instantiation to user +template< + bool C + , typename F1 + , typename F2 + > +struct eval_if_c +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \ + && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \ + ) +{ + typedef typename if_c::type f_; + typedef typename f_::type type; +#else + : if_c::type +{ +#endif +}; + +BOOST_MPL_AUX_NA_SPEC(3, eval_if) + +}} + +#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/has_xxx.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/has_xxx.hpp new file mode 100644 index 00000000..aa60debd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/has_xxx.hpp @@ -0,0 +1,274 @@ + +#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED +#define BOOST_MPL_HAS_XXX_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2006 +// Copyright David Abrahams 2002-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: has_xxx.hpp 49273 2008-10-11 06:54:06Z agurtovoy $ +// $Date: 2008-10-11 02:54:06 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49273 $ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) +# include +#endif + +#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) + +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET +// newsgroup's posting by John Madsen (comp.lang.c++.moderated, +// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but +// it works way more reliably than the SFINAE-based implementation + +// Modified dwa 8/Oct/02 to handle reference types. + +# include +# include + +namespace boost { namespace mpl { namespace aux { + +struct has_xxx_tag; + +#if BOOST_WORKAROUND(BOOST_MSVC, == 1300) +template< typename U > struct msvc_incomplete_array +{ + typedef char (&type)[sizeof(U) + 1]; +}; +#endif + +template< typename T > +struct msvc_is_incomplete +{ + // MSVC is capable of some kinds of SFINAE. If U is an incomplete + // type, it won't pick the second overload + static char tester(...); + +#if BOOST_WORKAROUND(BOOST_MSVC, == 1300) + template< typename U > + static typename msvc_incomplete_array::type tester(type_wrapper); +#else + template< typename U > + static char (& tester(type_wrapper) )[sizeof(U)+1]; +#endif + + BOOST_STATIC_CONSTANT(bool, value = + sizeof(tester(type_wrapper())) == 1 + ); +}; + +template<> +struct msvc_is_incomplete +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +}}} + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \ +template< typename T, typename name = ::boost::mpl::aux::has_xxx_tag > \ +struct BOOST_PP_CAT(trait,_impl) : T \ +{ \ + static boost::mpl::aux::no_tag \ + test(void(*)(::boost::mpl::aux::has_xxx_tag)); \ + \ + static boost::mpl::aux::yes_tag test(...); \ + \ + BOOST_STATIC_CONSTANT(bool, value = \ + sizeof(test(static_cast(0))) \ + != sizeof(boost::mpl::aux::no_tag) \ + ); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ + : boost::mpl::if_c< \ + boost::mpl::aux::msvc_is_incomplete::value \ + , boost::mpl::bool_ \ + , BOOST_PP_CAT(trait,_impl) \ + >::type \ +{ \ +}; \ +\ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \ +BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \ +/**/ + +# define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \ +template<> struct trait \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = false); \ + typedef boost::mpl::bool_ type; \ +}; \ +/**/ + +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \ + BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \ +/**/ +#else +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \ +/**/ +#endif + + +// SFINAE-based implementations below are derived from a USENET newsgroup's +// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST) + +# elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ + || BOOST_WORKAROUND(__IBMCPP__, <= 700) + +// MSVC 7.1+ & VACPP + +// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE +// applied to partial specialization to fix some apparently random failures +// (thanks to Daniel Wallin for researching this!) + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ +template< typename T > \ +struct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \ +{ \ + typedef void type; \ +};\ +\ +template< typename T, typename U = void > \ +struct BOOST_PP_CAT(trait,_impl_) \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = false); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T > \ +struct BOOST_PP_CAT(trait,_impl_)< \ + T \ + , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \ + > \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = true); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ + : BOOST_PP_CAT(trait,_impl_) \ +{ \ +}; \ +/**/ + +# elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \ +template< typename T, bool IS_CLASS > \ +struct trait_tester \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = false ); \ +}; \ +template< typename T > \ +struct trait_tester< T, true > \ +{ \ + struct trait_tester_impl \ + { \ + template < class U > \ + static int resolve( boost::mpl::aux::type_wrapper const volatile * \ + , boost::mpl::aux::type_wrapper* = 0 ); \ + static char resolve( ... ); \ + }; \ + typedef boost::mpl::aux::type_wrapper t_; \ + BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \ +}; \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, boost::is_class< T >::value >::value) ); \ + typedef boost::mpl::bool_< trait< T, fallback_ >::value > type; \ +}; + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \ + , BOOST_PP_CAT(trait,_tester) \ + , name \ + , default_ ) \ +/**/ + +# else // other SFINAE-capable compilers + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + struct gcc_3_2_wknd \ + { \ + template< typename U > \ + static boost::mpl::aux::yes_tag test( \ + boost::mpl::aux::type_wrapper const volatile* \ + , boost::mpl::aux::type_wrapper* = 0 \ + ); \ + \ + static boost::mpl::aux::no_tag test(...); \ + }; \ + \ + typedef boost::mpl::aux::type_wrapper t_; \ + BOOST_STATIC_CONSTANT(bool, value = \ + sizeof(gcc_3_2_wknd::test(static_cast(0))) \ + == sizeof(boost::mpl::aux::yes_tag) \ + ); \ + typedef boost::mpl::bool_ type; \ +}; \ +/**/ + +# endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + + +#else // BOOST_MPL_CFG_NO_HAS_XXX + +// placeholder implementation + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \ + typedef fallback_ type; \ +}; \ +/**/ + +#endif + +#define BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(has_,name), name, false) \ +/**/ + +#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/identity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/identity.hpp new file mode 100644 index 00000000..eb3cb5b9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/identity.hpp @@ -0,0 +1,45 @@ + +#ifndef BOOST_MPL_IDENTITY_HPP_INCLUDED +#define BOOST_MPL_IDENTITY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: identity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(T) + > +struct identity +{ + typedef T type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1, identity, (T)) +}; + +template< + typename BOOST_MPL_AUX_NA_PARAM(T) + > +struct make_identity +{ + typedef identity type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1, make_identity, (T)) +}; + +BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity) +BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity) + +}} + +#endif // BOOST_MPL_IDENTITY_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/if.hpp new file mode 100644 index 00000000..b9aad6d8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/if.hpp @@ -0,0 +1,135 @@ + +#ifndef BOOST_MPL_IF_HPP_INCLUDED +#define BOOST_MPL_IF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< + bool C + , typename T1 + , typename T2 + > +struct if_c +{ + typedef T1 type; +}; + +template< + typename T1 + , typename T2 + > +struct if_c +{ + typedef T2 type; +}; + +// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars +// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959 +template< + typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + , typename BOOST_MPL_AUX_NA_PARAM(T3) + > +struct if_ +{ + private: + // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC + typedef if_c< +#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) + BOOST_MPL_AUX_VALUE_WKND(T1)::value +#else + BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value) +#endif + , T2 + , T3 + > almost_type_; + + public: + typedef typename almost_type_::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3)) +}; + +#else + +// no partial class template specialization + +namespace aux { + +template< bool C > +struct if_impl +{ + template< typename T1, typename T2 > struct result_ + { + typedef T1 type; + }; +}; + +template<> +struct if_impl +{ + template< typename T1, typename T2 > struct result_ + { + typedef T2 type; + }; +}; + +} // namespace aux + +template< + bool C_ + , typename T1 + , typename T2 + > +struct if_c +{ + typedef typename aux::if_impl< C_ > + ::template result_::type type; +}; + +// (almost) copy & paste in order to save one more +// recursively nested template instantiation to user +template< + typename BOOST_MPL_AUX_NA_PARAM(C_) + , typename BOOST_MPL_AUX_NA_PARAM(T1) + , typename BOOST_MPL_AUX_NA_PARAM(T2) + > +struct if_ +{ + enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value }; + + typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) > + ::template result_::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2)) +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +BOOST_MPL_AUX_NA_SPEC(3, if_) + +}} + +#endif // BOOST_MPL_IF_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int.hpp new file mode 100644 index 00000000..15f6357a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int.hpp @@ -0,0 +1,22 @@ + +#ifndef BOOST_MPL_INT_HPP_INCLUDED +#define BOOST_MPL_INT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#define AUX_WRAPPER_VALUE_TYPE int +#include + +#endif // BOOST_MPL_INT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int_fwd.hpp new file mode 100644 index 00000000..c4babaa2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/int_fwd.hpp @@ -0,0 +1,27 @@ + +#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED +#define BOOST_MPL_INT_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: int_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(int_) + +#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c.hpp new file mode 100644 index 00000000..032f6596 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c.hpp @@ -0,0 +1,51 @@ + +#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED +#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: integral_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#if BOOST_WORKAROUND(__HP_aCC, <= 53800) +// the type of non-type template arguments may not depend on template arguments +# define AUX_WRAPPER_PARAMS(N) typename T, long N +#else +# define AUX_WRAPPER_PARAMS(N) typename T, T N +#endif + +#define AUX_WRAPPER_NAME integral_c +#define AUX_WRAPPER_VALUE_TYPE T +#define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value > +#include + + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !BOOST_WORKAROUND(__BORLANDC__, <= 0x551) +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +// 'bool' constant doesn't have 'next'/'prior' members +template< bool C > +struct integral_c +{ + BOOST_STATIC_CONSTANT(bool, value = C); + typedef integral_c_tag tag; + typedef integral_c type; + typedef bool value_type; + operator bool() const { return this->value; } +}; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +#endif + +#endif // BOOST_MPL_INTEGRAL_C_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_fwd.hpp new file mode 100644 index 00000000..88fc5814 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_fwd.hpp @@ -0,0 +1,32 @@ + +#ifndef BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED +#define BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: integral_c_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +#if BOOST_WORKAROUND(__HP_aCC, <= 53800) +// the type of non-type template arguments may not depend on template arguments +template< typename T, long N > struct integral_c; +#else +template< typename T, T N > struct integral_c; +#endif + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c) + +#endif // BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_tag.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_tag.hpp new file mode 100644 index 00000000..0e233dfe --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/integral_c_tag.hpp @@ -0,0 +1,26 @@ + +#ifndef BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED +#define BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: integral_c_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +#include +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +struct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); }; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag) + +#endif // BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/lambda_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/lambda_fwd.hpp new file mode 100644 index 00000000..17cf6292 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/lambda_fwd.hpp @@ -0,0 +1,57 @@ + +#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED +#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: lambda_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) + +# include +# include +# include + +namespace boost { namespace mpl { + +template< + typename T = na + , typename Tag = void_ + BOOST_MPL_AUX_LAMBDA_ARITY_PARAM( + typename Arity = int_< aux::template_arity::value > + ) + > +struct lambda; + +}} + +#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT + +# include + +namespace boost { namespace mpl { + +template< + typename T = na + , typename Tag = void_ + , typename Protect = true_ + > +struct lambda; + +}} + +#endif + +#endif // BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/limits/arity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/limits/arity.hpp new file mode 100644 index 00000000..91e46063 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/limits/arity.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED +#define BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) +# define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5 +#endif + +#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/not.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/not.hpp new file mode 100644 index 00000000..dddd38c1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/not.hpp @@ -0,0 +1,51 @@ + +#ifndef BOOST_MPL_NOT_HPP_INCLUDED +#define BOOST_MPL_NOT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: not.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +namespace aux { + +template< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here +struct not_impl + : bool_ +{ +}; + +} // namespace aux + + +template< + typename BOOST_MPL_AUX_NA_PARAM(T) + > +struct not_ + : aux::not_impl< + BOOST_MPL_AUX_NESTED_TYPE_WKND(T)::value + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,not_,(T)) +}; + +BOOST_MPL_AUX_NA_SPEC(1,not_) + +}} + +#endif // BOOST_MPL_NOT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/or.hpp new file mode 100644 index 00000000..c27799ae --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/or.hpp @@ -0,0 +1,61 @@ + +#ifndef BOOST_MPL_OR_HPP_INCLUDED +#define BOOST_MPL_OR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: or.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# include +# include +# include +# include +# include + +// agurt, 19/may/04: workaround a conflict with header's +// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)' +// has to be checked in a separate condition, otherwise GCC complains +// about 'or' being an alternative token +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(or) +# pragma push_macro("or") +# undef or +# define or(x) +#endif +#endif +#endif + +# define BOOST_MPL_PREPROCESSED_HEADER or.hpp +# include + +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(or) +# pragma pop_macro("or") +#endif +#endif +#endif + +#else + +# define AUX778076_OP_NAME or_ +# define AUX778076_OP_VALUE1 true +# define AUX778076_OP_VALUE2 false +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_OR_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/placeholders.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/placeholders.hpp new file mode 100644 index 00000000..61584b5c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/placeholders.hpp @@ -0,0 +1,100 @@ + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED +#define BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright Peter Dimov 2001-2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: placeholders.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include + +# if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) +# define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) \ + using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \ + /**/ +# else +# define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) /**/ +# endif + +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER placeholders.hpp +# include + +#else + +# include +# include +# include +# include + +// watch out for GNU gettext users, who #define _(x) +#if !defined(_) || defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT) +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +typedef arg<-1> _; +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_; +} + +}} +#endif + +/// agurt, 17/mar/02: one more placeholder for the last 'apply#' +/// specialization +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY + 1, )) +#include BOOST_PP_ITERATE() + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED + +///// iteration + +#else +#define i_ BOOST_PP_FRAME_ITERATION(1) + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +typedef arg BOOST_PP_CAT(_,i_); + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +namespace boost { namespace mpl { + +BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(BOOST_PP_CAT(_,i_)) + +namespace placeholders { +using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::BOOST_PP_CAT(_,i_); +} + +}} + +#undef i_ +#endif // BOOST_PP_IS_ITERATING diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t.hpp new file mode 100644 index 00000000..1157c52f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t.hpp @@ -0,0 +1,25 @@ + +#ifndef BOOST_MPL_SIZE_T_HPP_INCLUDED +#define BOOST_MPL_SIZE_T_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: size_t.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#define AUX_WRAPPER_VALUE_TYPE std::size_t +#define AUX_WRAPPER_NAME size_t +#define AUX_WRAPPER_PARAMS(N) std::size_t N + +#include + +#endif // BOOST_MPL_SIZE_T_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t_fwd.hpp new file mode 100644 index 00000000..9be89f29 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/size_t_fwd.hpp @@ -0,0 +1,28 @@ + +#ifndef BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED +#define BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: size_t_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include // make sure 'size_t' is placed into 'std' +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< std::size_t N > struct size_t; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(size_t) + +#endif // BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/void_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/void_fwd.hpp new file mode 100644 index 00000000..0700cd62 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/mpl/void_fwd.hpp @@ -0,0 +1,26 @@ + +#ifndef BOOST_MPL_VOID_FWD_HPP_INCLUDED +#define BOOST_MPL_VOID_FWD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: void_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +struct void_; + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE +BOOST_MPL_AUX_ADL_BARRIER_DECL(void_) + +#endif // BOOST_MPL_VOID_FWD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/non_type.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/non_type.hpp new file mode 100644 index 00000000..896aed4d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/non_type.hpp @@ -0,0 +1,27 @@ +// ------------------------------------- +// +// (C) Copyright Gennaro Prota 2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// ------------------------------------------------------ + +#ifndef BOOST_NON_TYPE_HPP_GP_20030417 +#define BOOST_NON_TYPE_HPP_GP_20030417 + + +namespace boost { + + // Just a simple "envelope" for non-type template parameters. Useful + // to work around some MSVC deficiencies. + + template + struct non_type { }; + + +} + + +#endif // include guard diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/add.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/add.hpp new file mode 100644 index 00000000..038393c1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/add.hpp @@ -0,0 +1,51 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP +# define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP +# +# include +# include +# include +# include +# include +# +# /* BOOST_PP_ADD */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ADD(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y))) +# else +# define BOOST_PP_ADD(x, y) BOOST_PP_ADD_I(x, y) +# define BOOST_PP_ADD_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y))) +# endif +# +# define BOOST_PP_ADD_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy) +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I xy +# else +# define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy)) +# endif +# +# define BOOST_PP_ADD_O_I(x, y) (BOOST_PP_INC(x), BOOST_PP_DEC(y)) +# +# /* BOOST_PP_ADD_D */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ADD_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y))) +# else +# define BOOST_PP_ADD_D(d, x, y) BOOST_PP_ADD_D_I(d, x, y) +# define BOOST_PP_ADD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y))) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/dec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/dec.hpp new file mode 100644 index 00000000..73f4d5c4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/dec.hpp @@ -0,0 +1,288 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP +# define BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP +# +# include +# +# /* BOOST_PP_DEC */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_DEC(x) BOOST_PP_DEC_I(x) +# else +# define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x)) +# define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par +# endif +# +# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x +# +# define BOOST_PP_DEC_0 0 +# define BOOST_PP_DEC_1 0 +# define BOOST_PP_DEC_2 1 +# define BOOST_PP_DEC_3 2 +# define BOOST_PP_DEC_4 3 +# define BOOST_PP_DEC_5 4 +# define BOOST_PP_DEC_6 5 +# define BOOST_PP_DEC_7 6 +# define BOOST_PP_DEC_8 7 +# define BOOST_PP_DEC_9 8 +# define BOOST_PP_DEC_10 9 +# define BOOST_PP_DEC_11 10 +# define BOOST_PP_DEC_12 11 +# define BOOST_PP_DEC_13 12 +# define BOOST_PP_DEC_14 13 +# define BOOST_PP_DEC_15 14 +# define BOOST_PP_DEC_16 15 +# define BOOST_PP_DEC_17 16 +# define BOOST_PP_DEC_18 17 +# define BOOST_PP_DEC_19 18 +# define BOOST_PP_DEC_20 19 +# define BOOST_PP_DEC_21 20 +# define BOOST_PP_DEC_22 21 +# define BOOST_PP_DEC_23 22 +# define BOOST_PP_DEC_24 23 +# define BOOST_PP_DEC_25 24 +# define BOOST_PP_DEC_26 25 +# define BOOST_PP_DEC_27 26 +# define BOOST_PP_DEC_28 27 +# define BOOST_PP_DEC_29 28 +# define BOOST_PP_DEC_30 29 +# define BOOST_PP_DEC_31 30 +# define BOOST_PP_DEC_32 31 +# define BOOST_PP_DEC_33 32 +# define BOOST_PP_DEC_34 33 +# define BOOST_PP_DEC_35 34 +# define BOOST_PP_DEC_36 35 +# define BOOST_PP_DEC_37 36 +# define BOOST_PP_DEC_38 37 +# define BOOST_PP_DEC_39 38 +# define BOOST_PP_DEC_40 39 +# define BOOST_PP_DEC_41 40 +# define BOOST_PP_DEC_42 41 +# define BOOST_PP_DEC_43 42 +# define BOOST_PP_DEC_44 43 +# define BOOST_PP_DEC_45 44 +# define BOOST_PP_DEC_46 45 +# define BOOST_PP_DEC_47 46 +# define BOOST_PP_DEC_48 47 +# define BOOST_PP_DEC_49 48 +# define BOOST_PP_DEC_50 49 +# define BOOST_PP_DEC_51 50 +# define BOOST_PP_DEC_52 51 +# define BOOST_PP_DEC_53 52 +# define BOOST_PP_DEC_54 53 +# define BOOST_PP_DEC_55 54 +# define BOOST_PP_DEC_56 55 +# define BOOST_PP_DEC_57 56 +# define BOOST_PP_DEC_58 57 +# define BOOST_PP_DEC_59 58 +# define BOOST_PP_DEC_60 59 +# define BOOST_PP_DEC_61 60 +# define BOOST_PP_DEC_62 61 +# define BOOST_PP_DEC_63 62 +# define BOOST_PP_DEC_64 63 +# define BOOST_PP_DEC_65 64 +# define BOOST_PP_DEC_66 65 +# define BOOST_PP_DEC_67 66 +# define BOOST_PP_DEC_68 67 +# define BOOST_PP_DEC_69 68 +# define BOOST_PP_DEC_70 69 +# define BOOST_PP_DEC_71 70 +# define BOOST_PP_DEC_72 71 +# define BOOST_PP_DEC_73 72 +# define BOOST_PP_DEC_74 73 +# define BOOST_PP_DEC_75 74 +# define BOOST_PP_DEC_76 75 +# define BOOST_PP_DEC_77 76 +# define BOOST_PP_DEC_78 77 +# define BOOST_PP_DEC_79 78 +# define BOOST_PP_DEC_80 79 +# define BOOST_PP_DEC_81 80 +# define BOOST_PP_DEC_82 81 +# define BOOST_PP_DEC_83 82 +# define BOOST_PP_DEC_84 83 +# define BOOST_PP_DEC_85 84 +# define BOOST_PP_DEC_86 85 +# define BOOST_PP_DEC_87 86 +# define BOOST_PP_DEC_88 87 +# define BOOST_PP_DEC_89 88 +# define BOOST_PP_DEC_90 89 +# define BOOST_PP_DEC_91 90 +# define BOOST_PP_DEC_92 91 +# define BOOST_PP_DEC_93 92 +# define BOOST_PP_DEC_94 93 +# define BOOST_PP_DEC_95 94 +# define BOOST_PP_DEC_96 95 +# define BOOST_PP_DEC_97 96 +# define BOOST_PP_DEC_98 97 +# define BOOST_PP_DEC_99 98 +# define BOOST_PP_DEC_100 99 +# define BOOST_PP_DEC_101 100 +# define BOOST_PP_DEC_102 101 +# define BOOST_PP_DEC_103 102 +# define BOOST_PP_DEC_104 103 +# define BOOST_PP_DEC_105 104 +# define BOOST_PP_DEC_106 105 +# define BOOST_PP_DEC_107 106 +# define BOOST_PP_DEC_108 107 +# define BOOST_PP_DEC_109 108 +# define BOOST_PP_DEC_110 109 +# define BOOST_PP_DEC_111 110 +# define BOOST_PP_DEC_112 111 +# define BOOST_PP_DEC_113 112 +# define BOOST_PP_DEC_114 113 +# define BOOST_PP_DEC_115 114 +# define BOOST_PP_DEC_116 115 +# define BOOST_PP_DEC_117 116 +# define BOOST_PP_DEC_118 117 +# define BOOST_PP_DEC_119 118 +# define BOOST_PP_DEC_120 119 +# define BOOST_PP_DEC_121 120 +# define BOOST_PP_DEC_122 121 +# define BOOST_PP_DEC_123 122 +# define BOOST_PP_DEC_124 123 +# define BOOST_PP_DEC_125 124 +# define BOOST_PP_DEC_126 125 +# define BOOST_PP_DEC_127 126 +# define BOOST_PP_DEC_128 127 +# define BOOST_PP_DEC_129 128 +# define BOOST_PP_DEC_130 129 +# define BOOST_PP_DEC_131 130 +# define BOOST_PP_DEC_132 131 +# define BOOST_PP_DEC_133 132 +# define BOOST_PP_DEC_134 133 +# define BOOST_PP_DEC_135 134 +# define BOOST_PP_DEC_136 135 +# define BOOST_PP_DEC_137 136 +# define BOOST_PP_DEC_138 137 +# define BOOST_PP_DEC_139 138 +# define BOOST_PP_DEC_140 139 +# define BOOST_PP_DEC_141 140 +# define BOOST_PP_DEC_142 141 +# define BOOST_PP_DEC_143 142 +# define BOOST_PP_DEC_144 143 +# define BOOST_PP_DEC_145 144 +# define BOOST_PP_DEC_146 145 +# define BOOST_PP_DEC_147 146 +# define BOOST_PP_DEC_148 147 +# define BOOST_PP_DEC_149 148 +# define BOOST_PP_DEC_150 149 +# define BOOST_PP_DEC_151 150 +# define BOOST_PP_DEC_152 151 +# define BOOST_PP_DEC_153 152 +# define BOOST_PP_DEC_154 153 +# define BOOST_PP_DEC_155 154 +# define BOOST_PP_DEC_156 155 +# define BOOST_PP_DEC_157 156 +# define BOOST_PP_DEC_158 157 +# define BOOST_PP_DEC_159 158 +# define BOOST_PP_DEC_160 159 +# define BOOST_PP_DEC_161 160 +# define BOOST_PP_DEC_162 161 +# define BOOST_PP_DEC_163 162 +# define BOOST_PP_DEC_164 163 +# define BOOST_PP_DEC_165 164 +# define BOOST_PP_DEC_166 165 +# define BOOST_PP_DEC_167 166 +# define BOOST_PP_DEC_168 167 +# define BOOST_PP_DEC_169 168 +# define BOOST_PP_DEC_170 169 +# define BOOST_PP_DEC_171 170 +# define BOOST_PP_DEC_172 171 +# define BOOST_PP_DEC_173 172 +# define BOOST_PP_DEC_174 173 +# define BOOST_PP_DEC_175 174 +# define BOOST_PP_DEC_176 175 +# define BOOST_PP_DEC_177 176 +# define BOOST_PP_DEC_178 177 +# define BOOST_PP_DEC_179 178 +# define BOOST_PP_DEC_180 179 +# define BOOST_PP_DEC_181 180 +# define BOOST_PP_DEC_182 181 +# define BOOST_PP_DEC_183 182 +# define BOOST_PP_DEC_184 183 +# define BOOST_PP_DEC_185 184 +# define BOOST_PP_DEC_186 185 +# define BOOST_PP_DEC_187 186 +# define BOOST_PP_DEC_188 187 +# define BOOST_PP_DEC_189 188 +# define BOOST_PP_DEC_190 189 +# define BOOST_PP_DEC_191 190 +# define BOOST_PP_DEC_192 191 +# define BOOST_PP_DEC_193 192 +# define BOOST_PP_DEC_194 193 +# define BOOST_PP_DEC_195 194 +# define BOOST_PP_DEC_196 195 +# define BOOST_PP_DEC_197 196 +# define BOOST_PP_DEC_198 197 +# define BOOST_PP_DEC_199 198 +# define BOOST_PP_DEC_200 199 +# define BOOST_PP_DEC_201 200 +# define BOOST_PP_DEC_202 201 +# define BOOST_PP_DEC_203 202 +# define BOOST_PP_DEC_204 203 +# define BOOST_PP_DEC_205 204 +# define BOOST_PP_DEC_206 205 +# define BOOST_PP_DEC_207 206 +# define BOOST_PP_DEC_208 207 +# define BOOST_PP_DEC_209 208 +# define BOOST_PP_DEC_210 209 +# define BOOST_PP_DEC_211 210 +# define BOOST_PP_DEC_212 211 +# define BOOST_PP_DEC_213 212 +# define BOOST_PP_DEC_214 213 +# define BOOST_PP_DEC_215 214 +# define BOOST_PP_DEC_216 215 +# define BOOST_PP_DEC_217 216 +# define BOOST_PP_DEC_218 217 +# define BOOST_PP_DEC_219 218 +# define BOOST_PP_DEC_220 219 +# define BOOST_PP_DEC_221 220 +# define BOOST_PP_DEC_222 221 +# define BOOST_PP_DEC_223 222 +# define BOOST_PP_DEC_224 223 +# define BOOST_PP_DEC_225 224 +# define BOOST_PP_DEC_226 225 +# define BOOST_PP_DEC_227 226 +# define BOOST_PP_DEC_228 227 +# define BOOST_PP_DEC_229 228 +# define BOOST_PP_DEC_230 229 +# define BOOST_PP_DEC_231 230 +# define BOOST_PP_DEC_232 231 +# define BOOST_PP_DEC_233 232 +# define BOOST_PP_DEC_234 233 +# define BOOST_PP_DEC_235 234 +# define BOOST_PP_DEC_236 235 +# define BOOST_PP_DEC_237 236 +# define BOOST_PP_DEC_238 237 +# define BOOST_PP_DEC_239 238 +# define BOOST_PP_DEC_240 239 +# define BOOST_PP_DEC_241 240 +# define BOOST_PP_DEC_242 241 +# define BOOST_PP_DEC_243 242 +# define BOOST_PP_DEC_244 243 +# define BOOST_PP_DEC_245 244 +# define BOOST_PP_DEC_246 245 +# define BOOST_PP_DEC_247 246 +# define BOOST_PP_DEC_248 247 +# define BOOST_PP_DEC_249 248 +# define BOOST_PP_DEC_250 249 +# define BOOST_PP_DEC_251 250 +# define BOOST_PP_DEC_252 251 +# define BOOST_PP_DEC_253 252 +# define BOOST_PP_DEC_254 253 +# define BOOST_PP_DEC_255 254 +# define BOOST_PP_DEC_256 255 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/inc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/inc.hpp new file mode 100644 index 00000000..fdf304df --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/inc.hpp @@ -0,0 +1,288 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP +# define BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP +# +# include +# +# /* BOOST_PP_INC */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_INC(x) BOOST_PP_INC_I(x) +# else +# define BOOST_PP_INC(x) BOOST_PP_INC_OO((x)) +# define BOOST_PP_INC_OO(par) BOOST_PP_INC_I ## par +# endif +# +# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x +# +# define BOOST_PP_INC_0 1 +# define BOOST_PP_INC_1 2 +# define BOOST_PP_INC_2 3 +# define BOOST_PP_INC_3 4 +# define BOOST_PP_INC_4 5 +# define BOOST_PP_INC_5 6 +# define BOOST_PP_INC_6 7 +# define BOOST_PP_INC_7 8 +# define BOOST_PP_INC_8 9 +# define BOOST_PP_INC_9 10 +# define BOOST_PP_INC_10 11 +# define BOOST_PP_INC_11 12 +# define BOOST_PP_INC_12 13 +# define BOOST_PP_INC_13 14 +# define BOOST_PP_INC_14 15 +# define BOOST_PP_INC_15 16 +# define BOOST_PP_INC_16 17 +# define BOOST_PP_INC_17 18 +# define BOOST_PP_INC_18 19 +# define BOOST_PP_INC_19 20 +# define BOOST_PP_INC_20 21 +# define BOOST_PP_INC_21 22 +# define BOOST_PP_INC_22 23 +# define BOOST_PP_INC_23 24 +# define BOOST_PP_INC_24 25 +# define BOOST_PP_INC_25 26 +# define BOOST_PP_INC_26 27 +# define BOOST_PP_INC_27 28 +# define BOOST_PP_INC_28 29 +# define BOOST_PP_INC_29 30 +# define BOOST_PP_INC_30 31 +# define BOOST_PP_INC_31 32 +# define BOOST_PP_INC_32 33 +# define BOOST_PP_INC_33 34 +# define BOOST_PP_INC_34 35 +# define BOOST_PP_INC_35 36 +# define BOOST_PP_INC_36 37 +# define BOOST_PP_INC_37 38 +# define BOOST_PP_INC_38 39 +# define BOOST_PP_INC_39 40 +# define BOOST_PP_INC_40 41 +# define BOOST_PP_INC_41 42 +# define BOOST_PP_INC_42 43 +# define BOOST_PP_INC_43 44 +# define BOOST_PP_INC_44 45 +# define BOOST_PP_INC_45 46 +# define BOOST_PP_INC_46 47 +# define BOOST_PP_INC_47 48 +# define BOOST_PP_INC_48 49 +# define BOOST_PP_INC_49 50 +# define BOOST_PP_INC_50 51 +# define BOOST_PP_INC_51 52 +# define BOOST_PP_INC_52 53 +# define BOOST_PP_INC_53 54 +# define BOOST_PP_INC_54 55 +# define BOOST_PP_INC_55 56 +# define BOOST_PP_INC_56 57 +# define BOOST_PP_INC_57 58 +# define BOOST_PP_INC_58 59 +# define BOOST_PP_INC_59 60 +# define BOOST_PP_INC_60 61 +# define BOOST_PP_INC_61 62 +# define BOOST_PP_INC_62 63 +# define BOOST_PP_INC_63 64 +# define BOOST_PP_INC_64 65 +# define BOOST_PP_INC_65 66 +# define BOOST_PP_INC_66 67 +# define BOOST_PP_INC_67 68 +# define BOOST_PP_INC_68 69 +# define BOOST_PP_INC_69 70 +# define BOOST_PP_INC_70 71 +# define BOOST_PP_INC_71 72 +# define BOOST_PP_INC_72 73 +# define BOOST_PP_INC_73 74 +# define BOOST_PP_INC_74 75 +# define BOOST_PP_INC_75 76 +# define BOOST_PP_INC_76 77 +# define BOOST_PP_INC_77 78 +# define BOOST_PP_INC_78 79 +# define BOOST_PP_INC_79 80 +# define BOOST_PP_INC_80 81 +# define BOOST_PP_INC_81 82 +# define BOOST_PP_INC_82 83 +# define BOOST_PP_INC_83 84 +# define BOOST_PP_INC_84 85 +# define BOOST_PP_INC_85 86 +# define BOOST_PP_INC_86 87 +# define BOOST_PP_INC_87 88 +# define BOOST_PP_INC_88 89 +# define BOOST_PP_INC_89 90 +# define BOOST_PP_INC_90 91 +# define BOOST_PP_INC_91 92 +# define BOOST_PP_INC_92 93 +# define BOOST_PP_INC_93 94 +# define BOOST_PP_INC_94 95 +# define BOOST_PP_INC_95 96 +# define BOOST_PP_INC_96 97 +# define BOOST_PP_INC_97 98 +# define BOOST_PP_INC_98 99 +# define BOOST_PP_INC_99 100 +# define BOOST_PP_INC_100 101 +# define BOOST_PP_INC_101 102 +# define BOOST_PP_INC_102 103 +# define BOOST_PP_INC_103 104 +# define BOOST_PP_INC_104 105 +# define BOOST_PP_INC_105 106 +# define BOOST_PP_INC_106 107 +# define BOOST_PP_INC_107 108 +# define BOOST_PP_INC_108 109 +# define BOOST_PP_INC_109 110 +# define BOOST_PP_INC_110 111 +# define BOOST_PP_INC_111 112 +# define BOOST_PP_INC_112 113 +# define BOOST_PP_INC_113 114 +# define BOOST_PP_INC_114 115 +# define BOOST_PP_INC_115 116 +# define BOOST_PP_INC_116 117 +# define BOOST_PP_INC_117 118 +# define BOOST_PP_INC_118 119 +# define BOOST_PP_INC_119 120 +# define BOOST_PP_INC_120 121 +# define BOOST_PP_INC_121 122 +# define BOOST_PP_INC_122 123 +# define BOOST_PP_INC_123 124 +# define BOOST_PP_INC_124 125 +# define BOOST_PP_INC_125 126 +# define BOOST_PP_INC_126 127 +# define BOOST_PP_INC_127 128 +# define BOOST_PP_INC_128 129 +# define BOOST_PP_INC_129 130 +# define BOOST_PP_INC_130 131 +# define BOOST_PP_INC_131 132 +# define BOOST_PP_INC_132 133 +# define BOOST_PP_INC_133 134 +# define BOOST_PP_INC_134 135 +# define BOOST_PP_INC_135 136 +# define BOOST_PP_INC_136 137 +# define BOOST_PP_INC_137 138 +# define BOOST_PP_INC_138 139 +# define BOOST_PP_INC_139 140 +# define BOOST_PP_INC_140 141 +# define BOOST_PP_INC_141 142 +# define BOOST_PP_INC_142 143 +# define BOOST_PP_INC_143 144 +# define BOOST_PP_INC_144 145 +# define BOOST_PP_INC_145 146 +# define BOOST_PP_INC_146 147 +# define BOOST_PP_INC_147 148 +# define BOOST_PP_INC_148 149 +# define BOOST_PP_INC_149 150 +# define BOOST_PP_INC_150 151 +# define BOOST_PP_INC_151 152 +# define BOOST_PP_INC_152 153 +# define BOOST_PP_INC_153 154 +# define BOOST_PP_INC_154 155 +# define BOOST_PP_INC_155 156 +# define BOOST_PP_INC_156 157 +# define BOOST_PP_INC_157 158 +# define BOOST_PP_INC_158 159 +# define BOOST_PP_INC_159 160 +# define BOOST_PP_INC_160 161 +# define BOOST_PP_INC_161 162 +# define BOOST_PP_INC_162 163 +# define BOOST_PP_INC_163 164 +# define BOOST_PP_INC_164 165 +# define BOOST_PP_INC_165 166 +# define BOOST_PP_INC_166 167 +# define BOOST_PP_INC_167 168 +# define BOOST_PP_INC_168 169 +# define BOOST_PP_INC_169 170 +# define BOOST_PP_INC_170 171 +# define BOOST_PP_INC_171 172 +# define BOOST_PP_INC_172 173 +# define BOOST_PP_INC_173 174 +# define BOOST_PP_INC_174 175 +# define BOOST_PP_INC_175 176 +# define BOOST_PP_INC_176 177 +# define BOOST_PP_INC_177 178 +# define BOOST_PP_INC_178 179 +# define BOOST_PP_INC_179 180 +# define BOOST_PP_INC_180 181 +# define BOOST_PP_INC_181 182 +# define BOOST_PP_INC_182 183 +# define BOOST_PP_INC_183 184 +# define BOOST_PP_INC_184 185 +# define BOOST_PP_INC_185 186 +# define BOOST_PP_INC_186 187 +# define BOOST_PP_INC_187 188 +# define BOOST_PP_INC_188 189 +# define BOOST_PP_INC_189 190 +# define BOOST_PP_INC_190 191 +# define BOOST_PP_INC_191 192 +# define BOOST_PP_INC_192 193 +# define BOOST_PP_INC_193 194 +# define BOOST_PP_INC_194 195 +# define BOOST_PP_INC_195 196 +# define BOOST_PP_INC_196 197 +# define BOOST_PP_INC_197 198 +# define BOOST_PP_INC_198 199 +# define BOOST_PP_INC_199 200 +# define BOOST_PP_INC_200 201 +# define BOOST_PP_INC_201 202 +# define BOOST_PP_INC_202 203 +# define BOOST_PP_INC_203 204 +# define BOOST_PP_INC_204 205 +# define BOOST_PP_INC_205 206 +# define BOOST_PP_INC_206 207 +# define BOOST_PP_INC_207 208 +# define BOOST_PP_INC_208 209 +# define BOOST_PP_INC_209 210 +# define BOOST_PP_INC_210 211 +# define BOOST_PP_INC_211 212 +# define BOOST_PP_INC_212 213 +# define BOOST_PP_INC_213 214 +# define BOOST_PP_INC_214 215 +# define BOOST_PP_INC_215 216 +# define BOOST_PP_INC_216 217 +# define BOOST_PP_INC_217 218 +# define BOOST_PP_INC_218 219 +# define BOOST_PP_INC_219 220 +# define BOOST_PP_INC_220 221 +# define BOOST_PP_INC_221 222 +# define BOOST_PP_INC_222 223 +# define BOOST_PP_INC_223 224 +# define BOOST_PP_INC_224 225 +# define BOOST_PP_INC_225 226 +# define BOOST_PP_INC_226 227 +# define BOOST_PP_INC_227 228 +# define BOOST_PP_INC_228 229 +# define BOOST_PP_INC_229 230 +# define BOOST_PP_INC_230 231 +# define BOOST_PP_INC_231 232 +# define BOOST_PP_INC_232 233 +# define BOOST_PP_INC_233 234 +# define BOOST_PP_INC_234 235 +# define BOOST_PP_INC_235 236 +# define BOOST_PP_INC_236 237 +# define BOOST_PP_INC_237 238 +# define BOOST_PP_INC_238 239 +# define BOOST_PP_INC_239 240 +# define BOOST_PP_INC_240 241 +# define BOOST_PP_INC_241 242 +# define BOOST_PP_INC_242 243 +# define BOOST_PP_INC_243 244 +# define BOOST_PP_INC_244 245 +# define BOOST_PP_INC_245 246 +# define BOOST_PP_INC_246 247 +# define BOOST_PP_INC_247 248 +# define BOOST_PP_INC_248 249 +# define BOOST_PP_INC_249 250 +# define BOOST_PP_INC_250 251 +# define BOOST_PP_INC_251 252 +# define BOOST_PP_INC_252 253 +# define BOOST_PP_INC_253 254 +# define BOOST_PP_INC_254 255 +# define BOOST_PP_INC_255 256 +# define BOOST_PP_INC_256 256 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/sub.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/sub.hpp new file mode 100644 index 00000000..01cd8774 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/arithmetic/sub.hpp @@ -0,0 +1,50 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP +# define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_SUB */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_SUB(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y))) +# else +# define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y) +# define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y))) +# endif +# +# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy) +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I xy +# else +# define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy)) +# endif +# +# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y)) +# +# /* BOOST_PP_SUB_D */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_SUB_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y))) +# else +# define BOOST_PP_SUB_D(d, x, y) BOOST_PP_SUB_D_I(d, x, y) +# define BOOST_PP_SUB_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y))) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/data.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/data.hpp new file mode 100644 index 00000000..8523e7b8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/data.hpp @@ -0,0 +1,28 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARRAY_DATA_HPP +# define BOOST_PREPROCESSOR_ARRAY_DATA_HPP +# +# include +# include +# +# /* BOOST_PP_ARRAY_DATA */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ARRAY_DATA(array) BOOST_PP_TUPLE_ELEM(2, 1, array) +# else +# define BOOST_PP_ARRAY_DATA(array) BOOST_PP_ARRAY_DATA_I(array) +# define BOOST_PP_ARRAY_DATA_I(array) BOOST_PP_ARRAY_DATA_II array +# define BOOST_PP_ARRAY_DATA_II(size, data) data +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/elem.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/elem.hpp new file mode 100644 index 00000000..7235776b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/elem.hpp @@ -0,0 +1,29 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARRAY_ELEM_HPP +# define BOOST_PREPROCESSOR_ARRAY_ELEM_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_ARRAY_ELEM */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array)) +# else +# define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_ARRAY_ELEM_I(i, array) +# define BOOST_PP_ARRAY_ELEM_I(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array)) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/size.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/size.hpp new file mode 100644 index 00000000..a4f578ae --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/array/size.hpp @@ -0,0 +1,28 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ARRAY_SIZE_HPP +# define BOOST_PREPROCESSOR_ARRAY_SIZE_HPP +# +# include +# include +# +# /* BOOST_PP_ARRAY_SIZE */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_TUPLE_ELEM(2, 0, array) +# else +# define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_ARRAY_SIZE_I(array) +# define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_II array +# define BOOST_PP_ARRAY_SIZE_II(size, data) size +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/cat.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/cat.hpp new file mode 100644 index 00000000..fbc23418 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/cat.hpp @@ -0,0 +1,35 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CAT_HPP +# define BOOST_PREPROCESSOR_CAT_HPP +# +# include +# +# /* BOOST_PP_CAT */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b) +# else +# define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b)) +# define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_CAT_I(a, b) a ## b +# else +# define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(a ## b) +# define BOOST_PP_CAT_II(res) res +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/comma_if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/comma_if.hpp new file mode 100644 index 00000000..07833b0c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/comma_if.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP +# define BOOST_PREPROCESSOR_COMMA_IF_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/config/config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/config/config.hpp new file mode 100644 index 00000000..dd0f7138 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/config/config.hpp @@ -0,0 +1,70 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP +# define BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP +# +# /* BOOST_PP_CONFIG_FLAGS */ +# +# define BOOST_PP_CONFIG_STRICT() 0x0001 +# define BOOST_PP_CONFIG_IDEAL() 0x0002 +# +# define BOOST_PP_CONFIG_MSVC() 0x0004 +# define BOOST_PP_CONFIG_MWCC() 0x0008 +# define BOOST_PP_CONFIG_BCC() 0x0010 +# define BOOST_PP_CONFIG_EDG() 0x0020 +# define BOOST_PP_CONFIG_DMC() 0x0040 +# +# ifndef BOOST_PP_CONFIG_FLAGS +# if defined(__GCCXML__) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) +# elif defined(__WAVE__) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) +# elif defined(__MWERKS__) && __MWERKS__ >= 0x3200 +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) +# elif defined(__EDG__) || defined(__EDG_VERSION__) +# if defined(_MSC_VER) && __EDG_VERSION__ >= 308 +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC()) +# else +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT()) +# endif +# elif defined(__MWERKS__) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MWCC()) +# elif defined(__DMC__) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC()) +# elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581 +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) +# elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC()) +# elif defined(_MSC_VER) +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC()) +# else +# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) +# endif +# endif +# +# /* BOOST_PP_CONFIG_EXTENDED_LINE_INFO */ +# +# ifndef BOOST_PP_CONFIG_EXTENDED_LINE_INFO +# define BOOST_PP_CONFIG_EXTENDED_LINE_INFO 0 +# endif +# +# /* BOOST_PP_CONFIG_ERRORS */ +# +# ifndef BOOST_PP_CONFIG_ERRORS +# ifdef NDEBUG +# define BOOST_PP_CONFIG_ERRORS 0 +# else +# define BOOST_PP_CONFIG_ERRORS 1 +# endif +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/dmc/while.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/dmc/while.hpp new file mode 100644 index 00000000..7f5efd91 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/dmc/while.hpp @@ -0,0 +1,536 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP +# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP +# +# include +# include +# include +# +# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p##(2, s)), p, o, s) +# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p##(3, s)), p, o, s) +# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p##(4, s)), p, o, s) +# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p##(5, s)), p, o, s) +# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p##(6, s)), p, o, s) +# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p##(7, s)), p, o, s) +# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p##(8, s)), p, o, s) +# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p##(9, s)), p, o, s) +# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p##(10, s)), p, o, s) +# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p##(11, s)), p, o, s) +# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p##(12, s)), p, o, s) +# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p##(13, s)), p, o, s) +# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p##(14, s)), p, o, s) +# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p##(15, s)), p, o, s) +# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p##(16, s)), p, o, s) +# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p##(17, s)), p, o, s) +# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p##(18, s)), p, o, s) +# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p##(19, s)), p, o, s) +# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p##(20, s)), p, o, s) +# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p##(21, s)), p, o, s) +# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p##(22, s)), p, o, s) +# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p##(23, s)), p, o, s) +# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p##(24, s)), p, o, s) +# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p##(25, s)), p, o, s) +# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p##(26, s)), p, o, s) +# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p##(27, s)), p, o, s) +# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p##(28, s)), p, o, s) +# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p##(29, s)), p, o, s) +# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p##(30, s)), p, o, s) +# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p##(31, s)), p, o, s) +# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p##(32, s)), p, o, s) +# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p##(33, s)), p, o, s) +# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p##(34, s)), p, o, s) +# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p##(35, s)), p, o, s) +# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p##(36, s)), p, o, s) +# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p##(37, s)), p, o, s) +# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p##(38, s)), p, o, s) +# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p##(39, s)), p, o, s) +# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p##(40, s)), p, o, s) +# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p##(41, s)), p, o, s) +# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p##(42, s)), p, o, s) +# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p##(43, s)), p, o, s) +# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p##(44, s)), p, o, s) +# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p##(45, s)), p, o, s) +# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p##(46, s)), p, o, s) +# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p##(47, s)), p, o, s) +# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p##(48, s)), p, o, s) +# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p##(49, s)), p, o, s) +# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p##(50, s)), p, o, s) +# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p##(51, s)), p, o, s) +# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p##(52, s)), p, o, s) +# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p##(53, s)), p, o, s) +# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p##(54, s)), p, o, s) +# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p##(55, s)), p, o, s) +# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p##(56, s)), p, o, s) +# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p##(57, s)), p, o, s) +# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p##(58, s)), p, o, s) +# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p##(59, s)), p, o, s) +# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p##(60, s)), p, o, s) +# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p##(61, s)), p, o, s) +# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p##(62, s)), p, o, s) +# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p##(63, s)), p, o, s) +# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p##(64, s)), p, o, s) +# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p##(65, s)), p, o, s) +# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p##(66, s)), p, o, s) +# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p##(67, s)), p, o, s) +# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p##(68, s)), p, o, s) +# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p##(69, s)), p, o, s) +# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p##(70, s)), p, o, s) +# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p##(71, s)), p, o, s) +# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p##(72, s)), p, o, s) +# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p##(73, s)), p, o, s) +# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p##(74, s)), p, o, s) +# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p##(75, s)), p, o, s) +# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p##(76, s)), p, o, s) +# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p##(77, s)), p, o, s) +# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p##(78, s)), p, o, s) +# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p##(79, s)), p, o, s) +# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p##(80, s)), p, o, s) +# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p##(81, s)), p, o, s) +# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p##(82, s)), p, o, s) +# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p##(83, s)), p, o, s) +# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p##(84, s)), p, o, s) +# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p##(85, s)), p, o, s) +# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p##(86, s)), p, o, s) +# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p##(87, s)), p, o, s) +# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p##(88, s)), p, o, s) +# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p##(89, s)), p, o, s) +# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p##(90, s)), p, o, s) +# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p##(91, s)), p, o, s) +# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p##(92, s)), p, o, s) +# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p##(93, s)), p, o, s) +# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p##(94, s)), p, o, s) +# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p##(95, s)), p, o, s) +# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p##(96, s)), p, o, s) +# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p##(97, s)), p, o, s) +# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p##(98, s)), p, o, s) +# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p##(99, s)), p, o, s) +# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p##(100, s)), p, o, s) +# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p##(101, s)), p, o, s) +# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p##(102, s)), p, o, s) +# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p##(103, s)), p, o, s) +# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p##(104, s)), p, o, s) +# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p##(105, s)), p, o, s) +# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p##(106, s)), p, o, s) +# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p##(107, s)), p, o, s) +# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p##(108, s)), p, o, s) +# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p##(109, s)), p, o, s) +# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p##(110, s)), p, o, s) +# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p##(111, s)), p, o, s) +# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p##(112, s)), p, o, s) +# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p##(113, s)), p, o, s) +# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p##(114, s)), p, o, s) +# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p##(115, s)), p, o, s) +# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p##(116, s)), p, o, s) +# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p##(117, s)), p, o, s) +# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p##(118, s)), p, o, s) +# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p##(119, s)), p, o, s) +# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p##(120, s)), p, o, s) +# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p##(121, s)), p, o, s) +# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p##(122, s)), p, o, s) +# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p##(123, s)), p, o, s) +# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p##(124, s)), p, o, s) +# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p##(125, s)), p, o, s) +# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p##(126, s)), p, o, s) +# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p##(127, s)), p, o, s) +# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p##(128, s)), p, o, s) +# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p##(129, s)), p, o, s) +# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p##(130, s)), p, o, s) +# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p##(131, s)), p, o, s) +# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p##(132, s)), p, o, s) +# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p##(133, s)), p, o, s) +# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p##(134, s)), p, o, s) +# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p##(135, s)), p, o, s) +# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p##(136, s)), p, o, s) +# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p##(137, s)), p, o, s) +# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p##(138, s)), p, o, s) +# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p##(139, s)), p, o, s) +# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p##(140, s)), p, o, s) +# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p##(141, s)), p, o, s) +# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p##(142, s)), p, o, s) +# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p##(143, s)), p, o, s) +# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p##(144, s)), p, o, s) +# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p##(145, s)), p, o, s) +# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p##(146, s)), p, o, s) +# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p##(147, s)), p, o, s) +# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p##(148, s)), p, o, s) +# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p##(149, s)), p, o, s) +# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p##(150, s)), p, o, s) +# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p##(151, s)), p, o, s) +# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p##(152, s)), p, o, s) +# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p##(153, s)), p, o, s) +# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p##(154, s)), p, o, s) +# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p##(155, s)), p, o, s) +# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p##(156, s)), p, o, s) +# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p##(157, s)), p, o, s) +# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p##(158, s)), p, o, s) +# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p##(159, s)), p, o, s) +# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p##(160, s)), p, o, s) +# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p##(161, s)), p, o, s) +# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p##(162, s)), p, o, s) +# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p##(163, s)), p, o, s) +# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p##(164, s)), p, o, s) +# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p##(165, s)), p, o, s) +# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p##(166, s)), p, o, s) +# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p##(167, s)), p, o, s) +# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p##(168, s)), p, o, s) +# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p##(169, s)), p, o, s) +# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p##(170, s)), p, o, s) +# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p##(171, s)), p, o, s) +# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p##(172, s)), p, o, s) +# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p##(173, s)), p, o, s) +# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p##(174, s)), p, o, s) +# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p##(175, s)), p, o, s) +# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p##(176, s)), p, o, s) +# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p##(177, s)), p, o, s) +# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p##(178, s)), p, o, s) +# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p##(179, s)), p, o, s) +# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p##(180, s)), p, o, s) +# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p##(181, s)), p, o, s) +# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p##(182, s)), p, o, s) +# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p##(183, s)), p, o, s) +# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p##(184, s)), p, o, s) +# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p##(185, s)), p, o, s) +# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p##(186, s)), p, o, s) +# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p##(187, s)), p, o, s) +# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p##(188, s)), p, o, s) +# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p##(189, s)), p, o, s) +# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p##(190, s)), p, o, s) +# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p##(191, s)), p, o, s) +# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p##(192, s)), p, o, s) +# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p##(193, s)), p, o, s) +# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p##(194, s)), p, o, s) +# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p##(195, s)), p, o, s) +# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p##(196, s)), p, o, s) +# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p##(197, s)), p, o, s) +# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p##(198, s)), p, o, s) +# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p##(199, s)), p, o, s) +# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p##(200, s)), p, o, s) +# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p##(201, s)), p, o, s) +# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p##(202, s)), p, o, s) +# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p##(203, s)), p, o, s) +# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p##(204, s)), p, o, s) +# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p##(205, s)), p, o, s) +# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p##(206, s)), p, o, s) +# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p##(207, s)), p, o, s) +# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p##(208, s)), p, o, s) +# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p##(209, s)), p, o, s) +# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p##(210, s)), p, o, s) +# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p##(211, s)), p, o, s) +# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p##(212, s)), p, o, s) +# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p##(213, s)), p, o, s) +# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p##(214, s)), p, o, s) +# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p##(215, s)), p, o, s) +# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p##(216, s)), p, o, s) +# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p##(217, s)), p, o, s) +# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p##(218, s)), p, o, s) +# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p##(219, s)), p, o, s) +# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p##(220, s)), p, o, s) +# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p##(221, s)), p, o, s) +# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p##(222, s)), p, o, s) +# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p##(223, s)), p, o, s) +# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p##(224, s)), p, o, s) +# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p##(225, s)), p, o, s) +# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p##(226, s)), p, o, s) +# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p##(227, s)), p, o, s) +# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p##(228, s)), p, o, s) +# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p##(229, s)), p, o, s) +# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p##(230, s)), p, o, s) +# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p##(231, s)), p, o, s) +# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p##(232, s)), p, o, s) +# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p##(233, s)), p, o, s) +# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p##(234, s)), p, o, s) +# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p##(235, s)), p, o, s) +# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p##(236, s)), p, o, s) +# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p##(237, s)), p, o, s) +# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p##(238, s)), p, o, s) +# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p##(239, s)), p, o, s) +# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p##(240, s)), p, o, s) +# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p##(241, s)), p, o, s) +# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p##(242, s)), p, o, s) +# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p##(243, s)), p, o, s) +# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p##(244, s)), p, o, s) +# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p##(245, s)), p, o, s) +# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p##(246, s)), p, o, s) +# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p##(247, s)), p, o, s) +# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p##(248, s)), p, o, s) +# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p##(249, s)), p, o, s) +# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p##(250, s)), p, o, s) +# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p##(251, s)), p, o, s) +# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p##(252, s)), p, o, s) +# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p##(253, s)), p, o, s) +# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p##(254, s)), p, o, s) +# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p##(255, s)), p, o, s) +# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p##(256, s)), p, o, s) +# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p##(257, s)), p, o, s) +# +# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(2, s)) +# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(3, s)) +# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(4, s)) +# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(5, s)) +# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(6, s)) +# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(7, s)) +# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(8, s)) +# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(9, s)) +# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(10, s)) +# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(11, s)) +# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(12, s)) +# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(13, s)) +# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(14, s)) +# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(15, s)) +# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(16, s)) +# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(17, s)) +# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(18, s)) +# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(19, s)) +# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(20, s)) +# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(21, s)) +# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(22, s)) +# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(23, s)) +# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(24, s)) +# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(25, s)) +# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(26, s)) +# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(27, s)) +# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(28, s)) +# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(29, s)) +# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(30, s)) +# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(31, s)) +# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(32, s)) +# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(33, s)) +# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(34, s)) +# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(35, s)) +# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(36, s)) +# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(37, s)) +# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(38, s)) +# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(39, s)) +# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(40, s)) +# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(41, s)) +# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(42, s)) +# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(43, s)) +# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(44, s)) +# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(45, s)) +# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(46, s)) +# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(47, s)) +# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(48, s)) +# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(49, s)) +# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(50, s)) +# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(51, s)) +# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(52, s)) +# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(53, s)) +# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(54, s)) +# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(55, s)) +# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(56, s)) +# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(57, s)) +# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(58, s)) +# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(59, s)) +# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(60, s)) +# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(61, s)) +# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(62, s)) +# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(63, s)) +# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(64, s)) +# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(65, s)) +# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(66, s)) +# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(67, s)) +# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(68, s)) +# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(69, s)) +# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(70, s)) +# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(71, s)) +# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(72, s)) +# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(73, s)) +# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(74, s)) +# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(75, s)) +# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(76, s)) +# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(77, s)) +# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(78, s)) +# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(79, s)) +# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(80, s)) +# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(81, s)) +# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(82, s)) +# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(83, s)) +# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(84, s)) +# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(85, s)) +# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(86, s)) +# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(87, s)) +# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(88, s)) +# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(89, s)) +# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(90, s)) +# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(91, s)) +# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(92, s)) +# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(93, s)) +# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(94, s)) +# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(95, s)) +# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(96, s)) +# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(97, s)) +# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(98, s)) +# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(99, s)) +# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(100, s)) +# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(101, s)) +# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(102, s)) +# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(103, s)) +# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(104, s)) +# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(105, s)) +# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(106, s)) +# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(107, s)) +# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(108, s)) +# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(109, s)) +# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(110, s)) +# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(111, s)) +# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(112, s)) +# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(113, s)) +# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(114, s)) +# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(115, s)) +# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(116, s)) +# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(117, s)) +# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(118, s)) +# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(119, s)) +# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(120, s)) +# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(121, s)) +# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(122, s)) +# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(123, s)) +# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(124, s)) +# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(125, s)) +# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(126, s)) +# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(127, s)) +# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(128, s)) +# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(129, s)) +# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(130, s)) +# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(131, s)) +# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(132, s)) +# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(133, s)) +# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(134, s)) +# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(135, s)) +# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(136, s)) +# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(137, s)) +# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(138, s)) +# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(139, s)) +# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(140, s)) +# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(141, s)) +# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(142, s)) +# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(143, s)) +# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(144, s)) +# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(145, s)) +# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(146, s)) +# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(147, s)) +# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(148, s)) +# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(149, s)) +# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(150, s)) +# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(151, s)) +# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(152, s)) +# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(153, s)) +# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(154, s)) +# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(155, s)) +# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(156, s)) +# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(157, s)) +# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(158, s)) +# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(159, s)) +# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(160, s)) +# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(161, s)) +# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(162, s)) +# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(163, s)) +# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(164, s)) +# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(165, s)) +# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(166, s)) +# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(167, s)) +# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(168, s)) +# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(169, s)) +# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(170, s)) +# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(171, s)) +# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(172, s)) +# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(173, s)) +# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(174, s)) +# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(175, s)) +# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(176, s)) +# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(177, s)) +# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(178, s)) +# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(179, s)) +# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(180, s)) +# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(181, s)) +# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(182, s)) +# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(183, s)) +# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(184, s)) +# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(185, s)) +# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(186, s)) +# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(187, s)) +# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(188, s)) +# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(189, s)) +# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(190, s)) +# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(191, s)) +# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(192, s)) +# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(193, s)) +# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(194, s)) +# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(195, s)) +# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(196, s)) +# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(197, s)) +# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(198, s)) +# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(199, s)) +# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(200, s)) +# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(201, s)) +# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(202, s)) +# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(203, s)) +# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(204, s)) +# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(205, s)) +# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(206, s)) +# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(207, s)) +# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(208, s)) +# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(209, s)) +# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(210, s)) +# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(211, s)) +# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(212, s)) +# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(213, s)) +# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(214, s)) +# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(215, s)) +# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(216, s)) +# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(217, s)) +# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(218, s)) +# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(219, s)) +# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(220, s)) +# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(221, s)) +# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(222, s)) +# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(223, s)) +# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(224, s)) +# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(225, s)) +# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(226, s)) +# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(227, s)) +# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(228, s)) +# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(229, s)) +# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(230, s)) +# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(231, s)) +# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(232, s)) +# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(233, s)) +# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(234, s)) +# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(235, s)) +# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(236, s)) +# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(237, s)) +# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(238, s)) +# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(239, s)) +# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(240, s)) +# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(241, s)) +# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(242, s)) +# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(243, s)) +# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(244, s)) +# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(245, s)) +# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(246, s)) +# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(247, s)) +# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(248, s)) +# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(249, s)) +# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(250, s)) +# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(251, s)) +# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(252, s)) +# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(253, s)) +# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(254, s)) +# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(255, s)) +# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(256, s)) +# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(257, s)) +# +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/edg/while.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/edg/while.hpp new file mode 100644 index 00000000..1e8818dd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/edg/while.hpp @@ -0,0 +1,534 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP +# define BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP +# +# include +# include +# +# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_I(p, o, s) +# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_I(p, o, s) +# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_I(p, o, s) +# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_I(p, o, s) +# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_I(p, o, s) +# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_I(p, o, s) +# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_I(p, o, s) +# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_I(p, o, s) +# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_I(p, o, s) +# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_I(p, o, s) +# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_I(p, o, s) +# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_I(p, o, s) +# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_I(p, o, s) +# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_I(p, o, s) +# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_I(p, o, s) +# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_I(p, o, s) +# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_I(p, o, s) +# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_I(p, o, s) +# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_I(p, o, s) +# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_I(p, o, s) +# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_I(p, o, s) +# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_I(p, o, s) +# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_I(p, o, s) +# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_I(p, o, s) +# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_I(p, o, s) +# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_I(p, o, s) +# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_I(p, o, s) +# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_I(p, o, s) +# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_I(p, o, s) +# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_I(p, o, s) +# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_I(p, o, s) +# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_I(p, o, s) +# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_I(p, o, s) +# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_I(p, o, s) +# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_I(p, o, s) +# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_I(p, o, s) +# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_I(p, o, s) +# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_I(p, o, s) +# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_I(p, o, s) +# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_I(p, o, s) +# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_I(p, o, s) +# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_I(p, o, s) +# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_I(p, o, s) +# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_I(p, o, s) +# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_I(p, o, s) +# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_I(p, o, s) +# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_I(p, o, s) +# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_I(p, o, s) +# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_I(p, o, s) +# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_I(p, o, s) +# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_I(p, o, s) +# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_I(p, o, s) +# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_I(p, o, s) +# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_I(p, o, s) +# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_I(p, o, s) +# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_I(p, o, s) +# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_I(p, o, s) +# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_I(p, o, s) +# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_I(p, o, s) +# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_I(p, o, s) +# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_I(p, o, s) +# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_I(p, o, s) +# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_I(p, o, s) +# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_I(p, o, s) +# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_I(p, o, s) +# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_I(p, o, s) +# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_I(p, o, s) +# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_I(p, o, s) +# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_I(p, o, s) +# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_I(p, o, s) +# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_I(p, o, s) +# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_I(p, o, s) +# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_I(p, o, s) +# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_I(p, o, s) +# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_I(p, o, s) +# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_I(p, o, s) +# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_I(p, o, s) +# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_I(p, o, s) +# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_I(p, o, s) +# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_I(p, o, s) +# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_I(p, o, s) +# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_I(p, o, s) +# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_I(p, o, s) +# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_I(p, o, s) +# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_I(p, o, s) +# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_I(p, o, s) +# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_I(p, o, s) +# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_I(p, o, s) +# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_I(p, o, s) +# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_I(p, o, s) +# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_I(p, o, s) +# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_I(p, o, s) +# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_I(p, o, s) +# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_I(p, o, s) +# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_I(p, o, s) +# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_I(p, o, s) +# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_I(p, o, s) +# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_I(p, o, s) +# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_I(p, o, s) +# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_I(p, o, s) +# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_I(p, o, s) +# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_I(p, o, s) +# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_I(p, o, s) +# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_I(p, o, s) +# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_I(p, o, s) +# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_I(p, o, s) +# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_I(p, o, s) +# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_I(p, o, s) +# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_I(p, o, s) +# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_I(p, o, s) +# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_I(p, o, s) +# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_I(p, o, s) +# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_I(p, o, s) +# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_I(p, o, s) +# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_I(p, o, s) +# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_I(p, o, s) +# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_I(p, o, s) +# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_I(p, o, s) +# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_I(p, o, s) +# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_I(p, o, s) +# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_I(p, o, s) +# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_I(p, o, s) +# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_I(p, o, s) +# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_I(p, o, s) +# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_I(p, o, s) +# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_I(p, o, s) +# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_I(p, o, s) +# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_I(p, o, s) +# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_I(p, o, s) +# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_I(p, o, s) +# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_I(p, o, s) +# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_I(p, o, s) +# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_I(p, o, s) +# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_I(p, o, s) +# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_I(p, o, s) +# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_I(p, o, s) +# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_I(p, o, s) +# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_I(p, o, s) +# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_I(p, o, s) +# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_I(p, o, s) +# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_I(p, o, s) +# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_I(p, o, s) +# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_I(p, o, s) +# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_I(p, o, s) +# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_I(p, o, s) +# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_I(p, o, s) +# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_I(p, o, s) +# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_I(p, o, s) +# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_I(p, o, s) +# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_I(p, o, s) +# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_I(p, o, s) +# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_I(p, o, s) +# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_I(p, o, s) +# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_I(p, o, s) +# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_I(p, o, s) +# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_I(p, o, s) +# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_I(p, o, s) +# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_I(p, o, s) +# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_I(p, o, s) +# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_I(p, o, s) +# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_I(p, o, s) +# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_I(p, o, s) +# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_I(p, o, s) +# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_I(p, o, s) +# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_I(p, o, s) +# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_I(p, o, s) +# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_I(p, o, s) +# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_I(p, o, s) +# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_I(p, o, s) +# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_I(p, o, s) +# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_I(p, o, s) +# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_I(p, o, s) +# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_I(p, o, s) +# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_I(p, o, s) +# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_I(p, o, s) +# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_I(p, o, s) +# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_I(p, o, s) +# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_I(p, o, s) +# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_I(p, o, s) +# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_I(p, o, s) +# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_I(p, o, s) +# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_I(p, o, s) +# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_I(p, o, s) +# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_I(p, o, s) +# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_I(p, o, s) +# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_I(p, o, s) +# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_I(p, o, s) +# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_I(p, o, s) +# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_I(p, o, s) +# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_I(p, o, s) +# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_I(p, o, s) +# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_I(p, o, s) +# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_I(p, o, s) +# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_I(p, o, s) +# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_I(p, o, s) +# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_I(p, o, s) +# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_I(p, o, s) +# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_I(p, o, s) +# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_I(p, o, s) +# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_I(p, o, s) +# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_I(p, o, s) +# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_I(p, o, s) +# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_I(p, o, s) +# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_I(p, o, s) +# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_I(p, o, s) +# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_I(p, o, s) +# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_I(p, o, s) +# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_I(p, o, s) +# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_I(p, o, s) +# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_I(p, o, s) +# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_I(p, o, s) +# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_I(p, o, s) +# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_I(p, o, s) +# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_I(p, o, s) +# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_I(p, o, s) +# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_I(p, o, s) +# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_I(p, o, s) +# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_I(p, o, s) +# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_I(p, o, s) +# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_I(p, o, s) +# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_I(p, o, s) +# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_I(p, o, s) +# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_I(p, o, s) +# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_I(p, o, s) +# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_I(p, o, s) +# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_I(p, o, s) +# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_I(p, o, s) +# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_I(p, o, s) +# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_I(p, o, s) +# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_I(p, o, s) +# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_I(p, o, s) +# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_I(p, o, s) +# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_I(p, o, s) +# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_I(p, o, s) +# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_I(p, o, s) +# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_I(p, o, s) +# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_I(p, o, s) +# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_I(p, o, s) +# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_I(p, o, s) +# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_I(p, o, s) +# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_I(p, o, s) +# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_I(p, o, s) +# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_I(p, o, s) +# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_I(p, o, s) +# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_I(p, o, s) +# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_I(p, o, s) +# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_I(p, o, s) +# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_I(p, o, s) +# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_I(p, o, s) +# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_I(p, o, s) +# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_I(p, o, s) +# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_I(p, o, s) +# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_I(p, o, s) +# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_I(p, o, s) +# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_I(p, o, s) +# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_I(p, o, s) +# +# define BOOST_PP_WHILE_1_I(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s)) +# define BOOST_PP_WHILE_2_I(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s)) +# define BOOST_PP_WHILE_3_I(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s)) +# define BOOST_PP_WHILE_4_I(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s)) +# define BOOST_PP_WHILE_5_I(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s)) +# define BOOST_PP_WHILE_6_I(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s)) +# define BOOST_PP_WHILE_7_I(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s)) +# define BOOST_PP_WHILE_8_I(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s)) +# define BOOST_PP_WHILE_9_I(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s)) +# define BOOST_PP_WHILE_10_I(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s)) +# define BOOST_PP_WHILE_11_I(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s)) +# define BOOST_PP_WHILE_12_I(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s)) +# define BOOST_PP_WHILE_13_I(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s)) +# define BOOST_PP_WHILE_14_I(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s)) +# define BOOST_PP_WHILE_15_I(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s)) +# define BOOST_PP_WHILE_16_I(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s)) +# define BOOST_PP_WHILE_17_I(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s)) +# define BOOST_PP_WHILE_18_I(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s)) +# define BOOST_PP_WHILE_19_I(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s)) +# define BOOST_PP_WHILE_20_I(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s)) +# define BOOST_PP_WHILE_21_I(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s)) +# define BOOST_PP_WHILE_22_I(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s)) +# define BOOST_PP_WHILE_23_I(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s)) +# define BOOST_PP_WHILE_24_I(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s)) +# define BOOST_PP_WHILE_25_I(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s)) +# define BOOST_PP_WHILE_26_I(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s)) +# define BOOST_PP_WHILE_27_I(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s)) +# define BOOST_PP_WHILE_28_I(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s)) +# define BOOST_PP_WHILE_29_I(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s)) +# define BOOST_PP_WHILE_30_I(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s)) +# define BOOST_PP_WHILE_31_I(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s)) +# define BOOST_PP_WHILE_32_I(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s)) +# define BOOST_PP_WHILE_33_I(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s)) +# define BOOST_PP_WHILE_34_I(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s)) +# define BOOST_PP_WHILE_35_I(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s)) +# define BOOST_PP_WHILE_36_I(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s)) +# define BOOST_PP_WHILE_37_I(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s)) +# define BOOST_PP_WHILE_38_I(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s)) +# define BOOST_PP_WHILE_39_I(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s)) +# define BOOST_PP_WHILE_40_I(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s)) +# define BOOST_PP_WHILE_41_I(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s)) +# define BOOST_PP_WHILE_42_I(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s)) +# define BOOST_PP_WHILE_43_I(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s)) +# define BOOST_PP_WHILE_44_I(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s)) +# define BOOST_PP_WHILE_45_I(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s)) +# define BOOST_PP_WHILE_46_I(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s)) +# define BOOST_PP_WHILE_47_I(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s)) +# define BOOST_PP_WHILE_48_I(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s)) +# define BOOST_PP_WHILE_49_I(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s)) +# define BOOST_PP_WHILE_50_I(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s)) +# define BOOST_PP_WHILE_51_I(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s)) +# define BOOST_PP_WHILE_52_I(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s)) +# define BOOST_PP_WHILE_53_I(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s)) +# define BOOST_PP_WHILE_54_I(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s)) +# define BOOST_PP_WHILE_55_I(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s)) +# define BOOST_PP_WHILE_56_I(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s)) +# define BOOST_PP_WHILE_57_I(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s)) +# define BOOST_PP_WHILE_58_I(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s)) +# define BOOST_PP_WHILE_59_I(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s)) +# define BOOST_PP_WHILE_60_I(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s)) +# define BOOST_PP_WHILE_61_I(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s)) +# define BOOST_PP_WHILE_62_I(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s)) +# define BOOST_PP_WHILE_63_I(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s)) +# define BOOST_PP_WHILE_64_I(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s)) +# define BOOST_PP_WHILE_65_I(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s)) +# define BOOST_PP_WHILE_66_I(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s)) +# define BOOST_PP_WHILE_67_I(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s)) +# define BOOST_PP_WHILE_68_I(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s)) +# define BOOST_PP_WHILE_69_I(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s)) +# define BOOST_PP_WHILE_70_I(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s)) +# define BOOST_PP_WHILE_71_I(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s)) +# define BOOST_PP_WHILE_72_I(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s)) +# define BOOST_PP_WHILE_73_I(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s)) +# define BOOST_PP_WHILE_74_I(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s)) +# define BOOST_PP_WHILE_75_I(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s)) +# define BOOST_PP_WHILE_76_I(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s)) +# define BOOST_PP_WHILE_77_I(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s)) +# define BOOST_PP_WHILE_78_I(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s)) +# define BOOST_PP_WHILE_79_I(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s)) +# define BOOST_PP_WHILE_80_I(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s)) +# define BOOST_PP_WHILE_81_I(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s)) +# define BOOST_PP_WHILE_82_I(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s)) +# define BOOST_PP_WHILE_83_I(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s)) +# define BOOST_PP_WHILE_84_I(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s)) +# define BOOST_PP_WHILE_85_I(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s)) +# define BOOST_PP_WHILE_86_I(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s)) +# define BOOST_PP_WHILE_87_I(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s)) +# define BOOST_PP_WHILE_88_I(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s)) +# define BOOST_PP_WHILE_89_I(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s)) +# define BOOST_PP_WHILE_90_I(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s)) +# define BOOST_PP_WHILE_91_I(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s)) +# define BOOST_PP_WHILE_92_I(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s)) +# define BOOST_PP_WHILE_93_I(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s)) +# define BOOST_PP_WHILE_94_I(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s)) +# define BOOST_PP_WHILE_95_I(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s)) +# define BOOST_PP_WHILE_96_I(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s)) +# define BOOST_PP_WHILE_97_I(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s)) +# define BOOST_PP_WHILE_98_I(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s)) +# define BOOST_PP_WHILE_99_I(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s)) +# define BOOST_PP_WHILE_100_I(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s)) +# define BOOST_PP_WHILE_101_I(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s)) +# define BOOST_PP_WHILE_102_I(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s)) +# define BOOST_PP_WHILE_103_I(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s)) +# define BOOST_PP_WHILE_104_I(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s)) +# define BOOST_PP_WHILE_105_I(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s)) +# define BOOST_PP_WHILE_106_I(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s)) +# define BOOST_PP_WHILE_107_I(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s)) +# define BOOST_PP_WHILE_108_I(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s)) +# define BOOST_PP_WHILE_109_I(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s)) +# define BOOST_PP_WHILE_110_I(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s)) +# define BOOST_PP_WHILE_111_I(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s)) +# define BOOST_PP_WHILE_112_I(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s)) +# define BOOST_PP_WHILE_113_I(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s)) +# define BOOST_PP_WHILE_114_I(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s)) +# define BOOST_PP_WHILE_115_I(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s)) +# define BOOST_PP_WHILE_116_I(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s)) +# define BOOST_PP_WHILE_117_I(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s)) +# define BOOST_PP_WHILE_118_I(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s)) +# define BOOST_PP_WHILE_119_I(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s)) +# define BOOST_PP_WHILE_120_I(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s)) +# define BOOST_PP_WHILE_121_I(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s)) +# define BOOST_PP_WHILE_122_I(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s)) +# define BOOST_PP_WHILE_123_I(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s)) +# define BOOST_PP_WHILE_124_I(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s)) +# define BOOST_PP_WHILE_125_I(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s)) +# define BOOST_PP_WHILE_126_I(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s)) +# define BOOST_PP_WHILE_127_I(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s)) +# define BOOST_PP_WHILE_128_I(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s)) +# define BOOST_PP_WHILE_129_I(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s)) +# define BOOST_PP_WHILE_130_I(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s)) +# define BOOST_PP_WHILE_131_I(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s)) +# define BOOST_PP_WHILE_132_I(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s)) +# define BOOST_PP_WHILE_133_I(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s)) +# define BOOST_PP_WHILE_134_I(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s)) +# define BOOST_PP_WHILE_135_I(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s)) +# define BOOST_PP_WHILE_136_I(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s)) +# define BOOST_PP_WHILE_137_I(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s)) +# define BOOST_PP_WHILE_138_I(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s)) +# define BOOST_PP_WHILE_139_I(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s)) +# define BOOST_PP_WHILE_140_I(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s)) +# define BOOST_PP_WHILE_141_I(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s)) +# define BOOST_PP_WHILE_142_I(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s)) +# define BOOST_PP_WHILE_143_I(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s)) +# define BOOST_PP_WHILE_144_I(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s)) +# define BOOST_PP_WHILE_145_I(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s)) +# define BOOST_PP_WHILE_146_I(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s)) +# define BOOST_PP_WHILE_147_I(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s)) +# define BOOST_PP_WHILE_148_I(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s)) +# define BOOST_PP_WHILE_149_I(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s)) +# define BOOST_PP_WHILE_150_I(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s)) +# define BOOST_PP_WHILE_151_I(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s)) +# define BOOST_PP_WHILE_152_I(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s)) +# define BOOST_PP_WHILE_153_I(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s)) +# define BOOST_PP_WHILE_154_I(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s)) +# define BOOST_PP_WHILE_155_I(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s)) +# define BOOST_PP_WHILE_156_I(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s)) +# define BOOST_PP_WHILE_157_I(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s)) +# define BOOST_PP_WHILE_158_I(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s)) +# define BOOST_PP_WHILE_159_I(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s)) +# define BOOST_PP_WHILE_160_I(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s)) +# define BOOST_PP_WHILE_161_I(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s)) +# define BOOST_PP_WHILE_162_I(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s)) +# define BOOST_PP_WHILE_163_I(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s)) +# define BOOST_PP_WHILE_164_I(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s)) +# define BOOST_PP_WHILE_165_I(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s)) +# define BOOST_PP_WHILE_166_I(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s)) +# define BOOST_PP_WHILE_167_I(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s)) +# define BOOST_PP_WHILE_168_I(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s)) +# define BOOST_PP_WHILE_169_I(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s)) +# define BOOST_PP_WHILE_170_I(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s)) +# define BOOST_PP_WHILE_171_I(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s)) +# define BOOST_PP_WHILE_172_I(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s)) +# define BOOST_PP_WHILE_173_I(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s)) +# define BOOST_PP_WHILE_174_I(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s)) +# define BOOST_PP_WHILE_175_I(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s)) +# define BOOST_PP_WHILE_176_I(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s)) +# define BOOST_PP_WHILE_177_I(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s)) +# define BOOST_PP_WHILE_178_I(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s)) +# define BOOST_PP_WHILE_179_I(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s)) +# define BOOST_PP_WHILE_180_I(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s)) +# define BOOST_PP_WHILE_181_I(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s)) +# define BOOST_PP_WHILE_182_I(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s)) +# define BOOST_PP_WHILE_183_I(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s)) +# define BOOST_PP_WHILE_184_I(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s)) +# define BOOST_PP_WHILE_185_I(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s)) +# define BOOST_PP_WHILE_186_I(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s)) +# define BOOST_PP_WHILE_187_I(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s)) +# define BOOST_PP_WHILE_188_I(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s)) +# define BOOST_PP_WHILE_189_I(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s)) +# define BOOST_PP_WHILE_190_I(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s)) +# define BOOST_PP_WHILE_191_I(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s)) +# define BOOST_PP_WHILE_192_I(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s)) +# define BOOST_PP_WHILE_193_I(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s)) +# define BOOST_PP_WHILE_194_I(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s)) +# define BOOST_PP_WHILE_195_I(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s)) +# define BOOST_PP_WHILE_196_I(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s)) +# define BOOST_PP_WHILE_197_I(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s)) +# define BOOST_PP_WHILE_198_I(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s)) +# define BOOST_PP_WHILE_199_I(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s)) +# define BOOST_PP_WHILE_200_I(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s)) +# define BOOST_PP_WHILE_201_I(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s)) +# define BOOST_PP_WHILE_202_I(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s)) +# define BOOST_PP_WHILE_203_I(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s)) +# define BOOST_PP_WHILE_204_I(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s)) +# define BOOST_PP_WHILE_205_I(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s)) +# define BOOST_PP_WHILE_206_I(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s)) +# define BOOST_PP_WHILE_207_I(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s)) +# define BOOST_PP_WHILE_208_I(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s)) +# define BOOST_PP_WHILE_209_I(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s)) +# define BOOST_PP_WHILE_210_I(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s)) +# define BOOST_PP_WHILE_211_I(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s)) +# define BOOST_PP_WHILE_212_I(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s)) +# define BOOST_PP_WHILE_213_I(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s)) +# define BOOST_PP_WHILE_214_I(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s)) +# define BOOST_PP_WHILE_215_I(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s)) +# define BOOST_PP_WHILE_216_I(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s)) +# define BOOST_PP_WHILE_217_I(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s)) +# define BOOST_PP_WHILE_218_I(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s)) +# define BOOST_PP_WHILE_219_I(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s)) +# define BOOST_PP_WHILE_220_I(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s)) +# define BOOST_PP_WHILE_221_I(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s)) +# define BOOST_PP_WHILE_222_I(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s)) +# define BOOST_PP_WHILE_223_I(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s)) +# define BOOST_PP_WHILE_224_I(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s)) +# define BOOST_PP_WHILE_225_I(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s)) +# define BOOST_PP_WHILE_226_I(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s)) +# define BOOST_PP_WHILE_227_I(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s)) +# define BOOST_PP_WHILE_228_I(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s)) +# define BOOST_PP_WHILE_229_I(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s)) +# define BOOST_PP_WHILE_230_I(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s)) +# define BOOST_PP_WHILE_231_I(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s)) +# define BOOST_PP_WHILE_232_I(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s)) +# define BOOST_PP_WHILE_233_I(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s)) +# define BOOST_PP_WHILE_234_I(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s)) +# define BOOST_PP_WHILE_235_I(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s)) +# define BOOST_PP_WHILE_236_I(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s)) +# define BOOST_PP_WHILE_237_I(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s)) +# define BOOST_PP_WHILE_238_I(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s)) +# define BOOST_PP_WHILE_239_I(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s)) +# define BOOST_PP_WHILE_240_I(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s)) +# define BOOST_PP_WHILE_241_I(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s)) +# define BOOST_PP_WHILE_242_I(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s)) +# define BOOST_PP_WHILE_243_I(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s)) +# define BOOST_PP_WHILE_244_I(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s)) +# define BOOST_PP_WHILE_245_I(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s)) +# define BOOST_PP_WHILE_246_I(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s)) +# define BOOST_PP_WHILE_247_I(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s)) +# define BOOST_PP_WHILE_248_I(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s)) +# define BOOST_PP_WHILE_249_I(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s)) +# define BOOST_PP_WHILE_250_I(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s)) +# define BOOST_PP_WHILE_251_I(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s)) +# define BOOST_PP_WHILE_252_I(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s)) +# define BOOST_PP_WHILE_253_I(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s)) +# define BOOST_PP_WHILE_254_I(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s)) +# define BOOST_PP_WHILE_255_I(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s)) +# define BOOST_PP_WHILE_256_I(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/msvc/while.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/msvc/while.hpp new file mode 100644 index 00000000..f2878b32 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/msvc/while.hpp @@ -0,0 +1,277 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP +# define BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP +# +# include +# include +# +# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s)) +# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s)) +# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s)) +# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s)) +# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s)) +# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s)) +# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s)) +# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s)) +# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s)) +# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s)) +# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s)) +# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s)) +# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s)) +# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s)) +# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s)) +# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s)) +# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s)) +# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s)) +# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s)) +# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s)) +# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s)) +# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s)) +# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s)) +# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s)) +# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s)) +# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s)) +# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s)) +# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s)) +# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s)) +# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s)) +# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s)) +# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s)) +# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s)) +# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s)) +# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s)) +# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s)) +# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s)) +# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s)) +# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s)) +# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s)) +# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s)) +# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s)) +# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s)) +# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s)) +# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s)) +# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s)) +# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s)) +# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s)) +# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s)) +# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s)) +# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s)) +# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s)) +# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s)) +# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s)) +# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s)) +# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s)) +# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s)) +# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s)) +# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s)) +# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s)) +# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s)) +# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s)) +# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s)) +# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s)) +# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s)) +# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s)) +# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s)) +# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s)) +# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s)) +# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s)) +# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s)) +# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s)) +# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s)) +# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s)) +# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s)) +# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s)) +# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s)) +# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s)) +# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s)) +# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s)) +# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s)) +# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s)) +# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s)) +# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s)) +# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s)) +# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s)) +# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s)) +# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s)) +# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s)) +# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s)) +# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s)) +# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s)) +# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s)) +# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s)) +# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s)) +# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s)) +# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s)) +# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s)) +# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s)) +# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s)) +# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s)) +# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s)) +# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s)) +# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s)) +# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s)) +# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s)) +# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s)) +# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s)) +# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s)) +# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s)) +# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s)) +# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s)) +# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s)) +# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s)) +# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s)) +# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s)) +# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s)) +# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s)) +# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s)) +# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s)) +# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s)) +# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s)) +# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s)) +# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s)) +# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s)) +# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s)) +# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s)) +# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s)) +# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s)) +# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s)) +# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s)) +# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s)) +# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s)) +# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s)) +# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s)) +# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s)) +# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s)) +# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s)) +# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s)) +# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s)) +# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s)) +# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s)) +# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s)) +# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s)) +# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s)) +# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s)) +# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s)) +# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s)) +# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s)) +# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s)) +# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s)) +# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s)) +# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s)) +# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s)) +# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s)) +# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s)) +# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s)) +# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s)) +# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s)) +# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s)) +# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s)) +# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s)) +# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s)) +# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s)) +# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s)) +# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s)) +# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s)) +# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s)) +# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s)) +# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s)) +# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s)) +# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s)) +# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s)) +# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s)) +# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s)) +# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s)) +# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s)) +# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s)) +# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s)) +# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s)) +# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s)) +# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s)) +# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s)) +# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s)) +# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s)) +# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s)) +# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s)) +# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s)) +# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s)) +# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s)) +# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s)) +# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s)) +# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s)) +# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s)) +# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s)) +# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s)) +# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s)) +# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s)) +# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s)) +# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s)) +# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s)) +# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s)) +# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s)) +# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s)) +# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s)) +# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s)) +# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s)) +# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s)) +# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s)) +# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s)) +# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s)) +# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s)) +# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s)) +# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s)) +# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s)) +# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s)) +# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s)) +# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s)) +# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s)) +# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s)) +# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s)) +# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s)) +# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s)) +# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s)) +# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s)) +# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s)) +# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s)) +# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s)) +# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s)) +# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s)) +# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s)) +# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s)) +# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s)) +# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s)) +# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s)) +# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s)) +# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s)) +# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s)) +# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s)) +# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s)) +# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s)) +# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s)) +# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s)) +# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s)) +# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s)) +# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s)) +# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s)) +# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s)) +# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s)) +# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s)) +# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s)) +# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s)) +# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s)) +# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s)) +# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s)) +# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/while.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/while.hpp new file mode 100644 index 00000000..831a1bde --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/detail/while.hpp @@ -0,0 +1,536 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP +# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP +# +# include +# include +# include +# +# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s) +# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s) +# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s) +# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s) +# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p(6, s)), p, o, s) +# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p(7, s)), p, o, s) +# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p(8, s)), p, o, s) +# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p(9, s)), p, o, s) +# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p(10, s)), p, o, s) +# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p(11, s)), p, o, s) +# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p(12, s)), p, o, s) +# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p(13, s)), p, o, s) +# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p(14, s)), p, o, s) +# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p(15, s)), p, o, s) +# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p(16, s)), p, o, s) +# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p(17, s)), p, o, s) +# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p(18, s)), p, o, s) +# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p(19, s)), p, o, s) +# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p(20, s)), p, o, s) +# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p(21, s)), p, o, s) +# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p(22, s)), p, o, s) +# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p(23, s)), p, o, s) +# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p(24, s)), p, o, s) +# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p(25, s)), p, o, s) +# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p(26, s)), p, o, s) +# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p(27, s)), p, o, s) +# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p(28, s)), p, o, s) +# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p(29, s)), p, o, s) +# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p(30, s)), p, o, s) +# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p(31, s)), p, o, s) +# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p(32, s)), p, o, s) +# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p(33, s)), p, o, s) +# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p(34, s)), p, o, s) +# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p(35, s)), p, o, s) +# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p(36, s)), p, o, s) +# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p(37, s)), p, o, s) +# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p(38, s)), p, o, s) +# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p(39, s)), p, o, s) +# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p(40, s)), p, o, s) +# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p(41, s)), p, o, s) +# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p(42, s)), p, o, s) +# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p(43, s)), p, o, s) +# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p(44, s)), p, o, s) +# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p(45, s)), p, o, s) +# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p(46, s)), p, o, s) +# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p(47, s)), p, o, s) +# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p(48, s)), p, o, s) +# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p(49, s)), p, o, s) +# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p(50, s)), p, o, s) +# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p(51, s)), p, o, s) +# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p(52, s)), p, o, s) +# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p(53, s)), p, o, s) +# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p(54, s)), p, o, s) +# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p(55, s)), p, o, s) +# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p(56, s)), p, o, s) +# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p(57, s)), p, o, s) +# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p(58, s)), p, o, s) +# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p(59, s)), p, o, s) +# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p(60, s)), p, o, s) +# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p(61, s)), p, o, s) +# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p(62, s)), p, o, s) +# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p(63, s)), p, o, s) +# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p(64, s)), p, o, s) +# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p(65, s)), p, o, s) +# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p(66, s)), p, o, s) +# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p(67, s)), p, o, s) +# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p(68, s)), p, o, s) +# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p(69, s)), p, o, s) +# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p(70, s)), p, o, s) +# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p(71, s)), p, o, s) +# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p(72, s)), p, o, s) +# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p(73, s)), p, o, s) +# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p(74, s)), p, o, s) +# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p(75, s)), p, o, s) +# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p(76, s)), p, o, s) +# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p(77, s)), p, o, s) +# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p(78, s)), p, o, s) +# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p(79, s)), p, o, s) +# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p(80, s)), p, o, s) +# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p(81, s)), p, o, s) +# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p(82, s)), p, o, s) +# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p(83, s)), p, o, s) +# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p(84, s)), p, o, s) +# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p(85, s)), p, o, s) +# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p(86, s)), p, o, s) +# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p(87, s)), p, o, s) +# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p(88, s)), p, o, s) +# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p(89, s)), p, o, s) +# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p(90, s)), p, o, s) +# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p(91, s)), p, o, s) +# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p(92, s)), p, o, s) +# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p(93, s)), p, o, s) +# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p(94, s)), p, o, s) +# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p(95, s)), p, o, s) +# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p(96, s)), p, o, s) +# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p(97, s)), p, o, s) +# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p(98, s)), p, o, s) +# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p(99, s)), p, o, s) +# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p(100, s)), p, o, s) +# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p(101, s)), p, o, s) +# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p(102, s)), p, o, s) +# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p(103, s)), p, o, s) +# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p(104, s)), p, o, s) +# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p(105, s)), p, o, s) +# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p(106, s)), p, o, s) +# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p(107, s)), p, o, s) +# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p(108, s)), p, o, s) +# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p(109, s)), p, o, s) +# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p(110, s)), p, o, s) +# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p(111, s)), p, o, s) +# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p(112, s)), p, o, s) +# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p(113, s)), p, o, s) +# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p(114, s)), p, o, s) +# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p(115, s)), p, o, s) +# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p(116, s)), p, o, s) +# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p(117, s)), p, o, s) +# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p(118, s)), p, o, s) +# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p(119, s)), p, o, s) +# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p(120, s)), p, o, s) +# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p(121, s)), p, o, s) +# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p(122, s)), p, o, s) +# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p(123, s)), p, o, s) +# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p(124, s)), p, o, s) +# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p(125, s)), p, o, s) +# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p(126, s)), p, o, s) +# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p(127, s)), p, o, s) +# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p(128, s)), p, o, s) +# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p(129, s)), p, o, s) +# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p(130, s)), p, o, s) +# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p(131, s)), p, o, s) +# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p(132, s)), p, o, s) +# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p(133, s)), p, o, s) +# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p(134, s)), p, o, s) +# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p(135, s)), p, o, s) +# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p(136, s)), p, o, s) +# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p(137, s)), p, o, s) +# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p(138, s)), p, o, s) +# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p(139, s)), p, o, s) +# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p(140, s)), p, o, s) +# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p(141, s)), p, o, s) +# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p(142, s)), p, o, s) +# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p(143, s)), p, o, s) +# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p(144, s)), p, o, s) +# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p(145, s)), p, o, s) +# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p(146, s)), p, o, s) +# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p(147, s)), p, o, s) +# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p(148, s)), p, o, s) +# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p(149, s)), p, o, s) +# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p(150, s)), p, o, s) +# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p(151, s)), p, o, s) +# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p(152, s)), p, o, s) +# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p(153, s)), p, o, s) +# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p(154, s)), p, o, s) +# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p(155, s)), p, o, s) +# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p(156, s)), p, o, s) +# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p(157, s)), p, o, s) +# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p(158, s)), p, o, s) +# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p(159, s)), p, o, s) +# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p(160, s)), p, o, s) +# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p(161, s)), p, o, s) +# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p(162, s)), p, o, s) +# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p(163, s)), p, o, s) +# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p(164, s)), p, o, s) +# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p(165, s)), p, o, s) +# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p(166, s)), p, o, s) +# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p(167, s)), p, o, s) +# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p(168, s)), p, o, s) +# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p(169, s)), p, o, s) +# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p(170, s)), p, o, s) +# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p(171, s)), p, o, s) +# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p(172, s)), p, o, s) +# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p(173, s)), p, o, s) +# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p(174, s)), p, o, s) +# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p(175, s)), p, o, s) +# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p(176, s)), p, o, s) +# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p(177, s)), p, o, s) +# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p(178, s)), p, o, s) +# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p(179, s)), p, o, s) +# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p(180, s)), p, o, s) +# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p(181, s)), p, o, s) +# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p(182, s)), p, o, s) +# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p(183, s)), p, o, s) +# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p(184, s)), p, o, s) +# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p(185, s)), p, o, s) +# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p(186, s)), p, o, s) +# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p(187, s)), p, o, s) +# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p(188, s)), p, o, s) +# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p(189, s)), p, o, s) +# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p(190, s)), p, o, s) +# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p(191, s)), p, o, s) +# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p(192, s)), p, o, s) +# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p(193, s)), p, o, s) +# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p(194, s)), p, o, s) +# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p(195, s)), p, o, s) +# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p(196, s)), p, o, s) +# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p(197, s)), p, o, s) +# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p(198, s)), p, o, s) +# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p(199, s)), p, o, s) +# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p(200, s)), p, o, s) +# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p(201, s)), p, o, s) +# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p(202, s)), p, o, s) +# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p(203, s)), p, o, s) +# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p(204, s)), p, o, s) +# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p(205, s)), p, o, s) +# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p(206, s)), p, o, s) +# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p(207, s)), p, o, s) +# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p(208, s)), p, o, s) +# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p(209, s)), p, o, s) +# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p(210, s)), p, o, s) +# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p(211, s)), p, o, s) +# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p(212, s)), p, o, s) +# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p(213, s)), p, o, s) +# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p(214, s)), p, o, s) +# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p(215, s)), p, o, s) +# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p(216, s)), p, o, s) +# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p(217, s)), p, o, s) +# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p(218, s)), p, o, s) +# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p(219, s)), p, o, s) +# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p(220, s)), p, o, s) +# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p(221, s)), p, o, s) +# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p(222, s)), p, o, s) +# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p(223, s)), p, o, s) +# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p(224, s)), p, o, s) +# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p(225, s)), p, o, s) +# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p(226, s)), p, o, s) +# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p(227, s)), p, o, s) +# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p(228, s)), p, o, s) +# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p(229, s)), p, o, s) +# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p(230, s)), p, o, s) +# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p(231, s)), p, o, s) +# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p(232, s)), p, o, s) +# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p(233, s)), p, o, s) +# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p(234, s)), p, o, s) +# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p(235, s)), p, o, s) +# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p(236, s)), p, o, s) +# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p(237, s)), p, o, s) +# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p(238, s)), p, o, s) +# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p(239, s)), p, o, s) +# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p(240, s)), p, o, s) +# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p(241, s)), p, o, s) +# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p(242, s)), p, o, s) +# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p(243, s)), p, o, s) +# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p(244, s)), p, o, s) +# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p(245, s)), p, o, s) +# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p(246, s)), p, o, s) +# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p(247, s)), p, o, s) +# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p(248, s)), p, o, s) +# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p(249, s)), p, o, s) +# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p(250, s)), p, o, s) +# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p(251, s)), p, o, s) +# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p(252, s)), p, o, s) +# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p(253, s)), p, o, s) +# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p(254, s)), p, o, s) +# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p(255, s)), p, o, s) +# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p(256, s)), p, o, s) +# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p(257, s)), p, o, s) +# +# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s)) +# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s)) +# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s)) +# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s)) +# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(6, s)) +# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(7, s)) +# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(8, s)) +# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(9, s)) +# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(10, s)) +# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(11, s)) +# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(12, s)) +# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(13, s)) +# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(14, s)) +# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(15, s)) +# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(16, s)) +# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(17, s)) +# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(18, s)) +# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(19, s)) +# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(20, s)) +# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(21, s)) +# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(22, s)) +# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(23, s)) +# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(24, s)) +# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(25, s)) +# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(26, s)) +# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(27, s)) +# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(28, s)) +# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(29, s)) +# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(30, s)) +# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(31, s)) +# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(32, s)) +# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(33, s)) +# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(34, s)) +# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(35, s)) +# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(36, s)) +# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(37, s)) +# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(38, s)) +# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(39, s)) +# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(40, s)) +# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(41, s)) +# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(42, s)) +# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(43, s)) +# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(44, s)) +# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(45, s)) +# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(46, s)) +# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(47, s)) +# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(48, s)) +# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(49, s)) +# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(50, s)) +# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(51, s)) +# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(52, s)) +# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(53, s)) +# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(54, s)) +# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(55, s)) +# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(56, s)) +# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(57, s)) +# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(58, s)) +# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(59, s)) +# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(60, s)) +# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(61, s)) +# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(62, s)) +# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(63, s)) +# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(64, s)) +# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(65, s)) +# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(66, s)) +# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(67, s)) +# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(68, s)) +# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(69, s)) +# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(70, s)) +# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(71, s)) +# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(72, s)) +# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(73, s)) +# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(74, s)) +# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(75, s)) +# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(76, s)) +# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(77, s)) +# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(78, s)) +# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(79, s)) +# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(80, s)) +# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(81, s)) +# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(82, s)) +# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(83, s)) +# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(84, s)) +# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(85, s)) +# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(86, s)) +# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(87, s)) +# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(88, s)) +# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(89, s)) +# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(90, s)) +# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(91, s)) +# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(92, s)) +# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(93, s)) +# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(94, s)) +# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(95, s)) +# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(96, s)) +# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(97, s)) +# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(98, s)) +# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(99, s)) +# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(100, s)) +# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(101, s)) +# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(102, s)) +# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(103, s)) +# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(104, s)) +# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(105, s)) +# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(106, s)) +# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(107, s)) +# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(108, s)) +# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(109, s)) +# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(110, s)) +# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(111, s)) +# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(112, s)) +# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(113, s)) +# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(114, s)) +# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(115, s)) +# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(116, s)) +# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(117, s)) +# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(118, s)) +# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(119, s)) +# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(120, s)) +# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(121, s)) +# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(122, s)) +# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(123, s)) +# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(124, s)) +# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(125, s)) +# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(126, s)) +# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(127, s)) +# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(128, s)) +# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s)) +# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(130, s)) +# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(131, s)) +# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(132, s)) +# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(133, s)) +# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(134, s)) +# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(135, s)) +# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(136, s)) +# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(137, s)) +# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(138, s)) +# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(139, s)) +# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(140, s)) +# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(141, s)) +# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(142, s)) +# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(143, s)) +# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(144, s)) +# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(145, s)) +# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(146, s)) +# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(147, s)) +# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(148, s)) +# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(149, s)) +# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(150, s)) +# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(151, s)) +# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(152, s)) +# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(153, s)) +# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(154, s)) +# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(155, s)) +# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(156, s)) +# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(157, s)) +# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(158, s)) +# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(159, s)) +# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(160, s)) +# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(161, s)) +# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(162, s)) +# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(163, s)) +# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(164, s)) +# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(165, s)) +# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(166, s)) +# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(167, s)) +# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(168, s)) +# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(169, s)) +# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(170, s)) +# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(171, s)) +# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(172, s)) +# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(173, s)) +# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(174, s)) +# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(175, s)) +# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(176, s)) +# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(177, s)) +# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(178, s)) +# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(179, s)) +# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(180, s)) +# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(181, s)) +# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(182, s)) +# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(183, s)) +# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(184, s)) +# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(185, s)) +# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(186, s)) +# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(187, s)) +# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(188, s)) +# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(189, s)) +# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(190, s)) +# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(191, s)) +# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(192, s)) +# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(193, s)) +# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(194, s)) +# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(195, s)) +# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(196, s)) +# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(197, s)) +# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(198, s)) +# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(199, s)) +# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(200, s)) +# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(201, s)) +# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(202, s)) +# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(203, s)) +# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(204, s)) +# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(205, s)) +# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(206, s)) +# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(207, s)) +# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(208, s)) +# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(209, s)) +# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(210, s)) +# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(211, s)) +# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(212, s)) +# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(213, s)) +# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(214, s)) +# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(215, s)) +# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(216, s)) +# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(217, s)) +# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(218, s)) +# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(219, s)) +# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(220, s)) +# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(221, s)) +# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(222, s)) +# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(223, s)) +# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(224, s)) +# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(225, s)) +# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(226, s)) +# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(227, s)) +# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(228, s)) +# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(229, s)) +# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(230, s)) +# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(231, s)) +# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(232, s)) +# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(233, s)) +# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(234, s)) +# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(235, s)) +# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(236, s)) +# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(237, s)) +# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(238, s)) +# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(239, s)) +# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(240, s)) +# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(241, s)) +# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(242, s)) +# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(243, s)) +# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(244, s)) +# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(245, s)) +# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(246, s)) +# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(247, s)) +# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(248, s)) +# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(249, s)) +# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(250, s)) +# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(251, s)) +# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(252, s)) +# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(253, s)) +# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(254, s)) +# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(255, s)) +# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(256, s)) +# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(257, s)) +# +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/expr_iif.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/expr_iif.hpp new file mode 100644 index 00000000..07baecf3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/expr_iif.hpp @@ -0,0 +1,31 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP +# define BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP +# +# include +# +# /* BOOST_PP_EXPR_IIF */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_I(bit, expr) +# else +# define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr)) +# define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par +# endif +# +# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr) +# +# define BOOST_PP_EXPR_IIF_0(expr) +# define BOOST_PP_EXPR_IIF_1(expr) expr +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/if.hpp new file mode 100644 index 00000000..2aabad06 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/if.hpp @@ -0,0 +1,30 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_IF_HPP +# define BOOST_PREPROCESSOR_CONTROL_IF_HPP +# +# include +# include +# include +# +# /* BOOST_PP_IF */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f) +# else +# define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f) +# define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/iif.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/iif.hpp new file mode 100644 index 00000000..928e65dc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/iif.hpp @@ -0,0 +1,34 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_IIF_HPP +# define BOOST_PREPROCESSOR_CONTROL_IIF_HPP +# +# include +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f) +# else +# define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f)) +# define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f) +# else +# define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_II(BOOST_PP_IIF_ ## bit(t, f)) +# define BOOST_PP_IIF_II(id) id +# endif +# +# define BOOST_PP_IIF_0(t, f) f +# define BOOST_PP_IIF_1(t, f) t +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/while.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/while.hpp new file mode 100644 index 00000000..a282be0d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/control/while.hpp @@ -0,0 +1,312 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP +# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP +# +# include +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_WHILE */ +# +# if 0 +# define BOOST_PP_WHILE(pred, op, state) +# endif +# +# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)) +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))) +# else +# define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))) +# endif +# +# define BOOST_PP_WHILE_F(d, _) 0 +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# endif +# +# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001) +# +# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1 +# +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0 +# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/debug/error.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/debug/error.hpp new file mode 100644 index 00000000..741eddb5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/debug/error.hpp @@ -0,0 +1,33 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_DEBUG_ERROR_HPP +# define BOOST_PREPROCESSOR_DEBUG_ERROR_HPP +# +# include +# include +# +# /* BOOST_PP_ERROR */ +# +# if BOOST_PP_CONFIG_ERRORS +# define BOOST_PP_ERROR(code) BOOST_PP_CAT(BOOST_PP_ERROR_, code) +# endif +# +# define BOOST_PP_ERROR_0x0000 BOOST_PP_ERROR(0x0000, BOOST_PP_INDEX_OUT_OF_BOUNDS) +# define BOOST_PP_ERROR_0x0001 BOOST_PP_ERROR(0x0001, BOOST_PP_WHILE_OVERFLOW) +# define BOOST_PP_ERROR_0x0002 BOOST_PP_ERROR(0x0002, BOOST_PP_FOR_OVERFLOW) +# define BOOST_PP_ERROR_0x0003 BOOST_PP_ERROR(0x0003, BOOST_PP_REPEAT_OVERFLOW) +# define BOOST_PP_ERROR_0x0004 BOOST_PP_ERROR(0x0004, BOOST_PP_LIST_FOLD_OVERFLOW) +# define BOOST_PP_ERROR_0x0005 BOOST_PP_ERROR(0x0005, BOOST_PP_SEQ_FOLD_OVERFLOW) +# define BOOST_PP_ERROR_0x0006 BOOST_PP_ERROR(0x0006, BOOST_PP_ARITHMETIC_OVERFLOW) +# define BOOST_PP_ERROR_0x0007 BOOST_PP_ERROR(0x0007, BOOST_PP_DIVISION_BY_ZERO) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/dec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/dec.hpp new file mode 100644 index 00000000..443a9365 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/dec.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_DEC_HPP +# define BOOST_PREPROCESSOR_DEC_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/auto_rec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/auto_rec.hpp new file mode 100644 index 00000000..d5e756b1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/auto_rec.hpp @@ -0,0 +1,293 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# +# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# +# include +# +# /* BOOST_PP_AUTO_REC */ +# +# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred) +# +# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p) +# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p) +# +# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192) +# define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96) +# define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48) +# define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24) +# define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12) +# define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6) +# define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3) +# define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2) +# define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p(3), 3, 4) +# define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7) +# define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p(5), 5, 6) +# define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p(7), 7, 8) +# define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14) +# define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11) +# define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p(9), 9, 10) +# define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p(11), 11, 12) +# define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15) +# define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p(13), 13, 14) +# define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p(15), 15, 16) +# define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28) +# define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22) +# define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19) +# define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p(17), 17, 18) +# define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p(19), 19, 20) +# define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23) +# define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p(21), 21, 22) +# define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p(23), 23, 24) +# define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30) +# define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27) +# define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p(25), 25, 26) +# define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p(27), 27, 28) +# define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31) +# define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p(29), 29, 30) +# define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p(31), 31, 32) +# define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56) +# define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44) +# define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38) +# define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35) +# define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p(33), 33, 34) +# define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p(35), 35, 36) +# define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39) +# define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p(37), 37, 38) +# define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p(39), 39, 40) +# define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46) +# define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43) +# define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p(41), 41, 42) +# define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p(43), 43, 44) +# define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47) +# define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p(45), 45, 46) +# define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p(47), 47, 48) +# define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60) +# define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54) +# define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51) +# define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p(49), 49, 50) +# define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p(51), 51, 52) +# define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55) +# define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p(53), 53, 54) +# define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p(55), 55, 56) +# define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62) +# define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59) +# define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p(57), 57, 58) +# define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p(59), 59, 60) +# define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63) +# define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p(61), 61, 62) +# define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p(63), 63, 64) +# define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112) +# define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88) +# define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76) +# define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70) +# define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67) +# define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p(65), 65, 66) +# define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p(67), 67, 68) +# define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71) +# define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p(69), 69, 70) +# define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p(71), 71, 72) +# define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78) +# define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75) +# define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p(73), 73, 74) +# define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p(75), 75, 76) +# define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79) +# define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p(77), 77, 78) +# define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p(79), 79, 80) +# define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92) +# define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86) +# define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83) +# define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p(81), 81, 82) +# define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p(83), 83, 84) +# define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87) +# define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p(85), 85, 86) +# define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p(87), 87, 88) +# define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94) +# define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91) +# define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p(89), 89, 90) +# define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p(91), 91, 92) +# define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95) +# define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p(93), 93, 94) +# define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p(95), 95, 96) +# define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120) +# define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108) +# define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102) +# define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99) +# define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p(97), 97, 98) +# define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p(99), 99, 100) +# define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103) +# define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p(101), 101, 102) +# define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p(103), 103, 104) +# define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110) +# define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107) +# define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p(105), 105, 106) +# define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p(107), 107, 108) +# define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111) +# define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p(109), 109, 110) +# define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p(111), 111, 112) +# define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124) +# define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118) +# define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115) +# define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p(113), 113, 114) +# define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p(115), 115, 116) +# define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119) +# define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p(117), 117, 118) +# define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p(119), 119, 120) +# define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126) +# define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123) +# define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p(121), 121, 122) +# define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p(123), 123, 124) +# define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127) +# define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p(125), 125, 126) +# define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p(127), 127, 128) +# define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224) +# define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176) +# define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152) +# define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140) +# define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134) +# define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131) +# define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p(129), 129, 130) +# define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p(131), 131, 132) +# define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135) +# define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p(133), 133, 134) +# define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p(135), 135, 136) +# define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142) +# define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139) +# define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p(137), 137, 138) +# define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p(139), 139, 140) +# define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143) +# define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p(141), 141, 142) +# define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p(143), 143, 144) +# define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156) +# define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150) +# define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147) +# define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p(145), 145, 146) +# define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p(147), 147, 148) +# define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151) +# define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p(149), 149, 150) +# define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p(151), 151, 152) +# define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158) +# define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155) +# define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p(153), 153, 154) +# define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p(155), 155, 156) +# define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159) +# define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p(157), 157, 158) +# define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p(159), 159, 160) +# define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184) +# define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172) +# define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166) +# define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163) +# define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p(161), 161, 162) +# define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p(163), 163, 164) +# define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167) +# define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p(165), 165, 166) +# define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p(167), 167, 168) +# define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174) +# define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171) +# define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p(169), 169, 170) +# define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p(171), 171, 172) +# define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175) +# define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p(173), 173, 174) +# define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p(175), 175, 176) +# define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188) +# define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182) +# define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179) +# define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p(177), 177, 178) +# define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p(179), 179, 180) +# define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183) +# define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p(181), 181, 182) +# define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p(183), 183, 184) +# define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190) +# define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187) +# define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p(185), 185, 186) +# define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p(187), 187, 188) +# define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191) +# define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p(189), 189, 190) +# define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p(191), 191, 192) +# define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240) +# define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216) +# define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204) +# define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198) +# define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195) +# define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p(193), 193, 194) +# define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p(195), 195, 196) +# define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199) +# define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p(197), 197, 198) +# define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p(199), 199, 200) +# define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206) +# define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203) +# define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p(201), 201, 202) +# define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p(203), 203, 204) +# define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207) +# define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p(205), 205, 206) +# define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p(207), 207, 208) +# define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220) +# define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214) +# define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211) +# define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p(209), 209, 210) +# define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p(211), 211, 212) +# define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215) +# define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p(213), 213, 214) +# define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p(215), 215, 216) +# define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222) +# define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219) +# define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p(217), 217, 218) +# define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p(219), 219, 220) +# define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223) +# define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p(221), 221, 222) +# define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p(223), 223, 224) +# define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248) +# define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236) +# define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230) +# define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227) +# define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p(225), 225, 226) +# define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p(227), 227, 228) +# define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231) +# define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p(229), 229, 230) +# define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p(231), 231, 232) +# define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238) +# define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235) +# define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p(233), 233, 234) +# define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p(235), 235, 236) +# define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239) +# define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p(237), 237, 238) +# define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p(239), 239, 240) +# define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252) +# define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246) +# define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243) +# define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p(241), 241, 242) +# define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p(243), 243, 244) +# define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247) +# define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p(245), 245, 246) +# define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p(247), 247, 248) +# define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254) +# define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251) +# define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p(249), 249, 250) +# define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p(251), 251, 252) +# define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255) +# define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p(253), 253, 254) +# define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p(255), 255, 256) +# +# endif +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/check.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/check.hpp new file mode 100644 index 00000000..cf13d2a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/check.hpp @@ -0,0 +1,48 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_DETAIL_CHECK_HPP +# define BOOST_PREPROCESSOR_DETAIL_CHECK_HPP +# +# include +# include +# +# /* BOOST_PP_CHECK */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_D(x, type) +# else +# define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type)) +# define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, type x)) +# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk) +# define BOOST_PP_CHECK_2(res, _) res +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x) +# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk) +# define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk)) +# define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im) +# define BOOST_PP_CHECK_4(res, _) res +# define BOOST_PP_CHECK_5(res) res +# else /* DMC */ +# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_OO((type x)) +# define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_0 ## par +# define BOOST_PP_CHECK_0(chk) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, chk)) +# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk) +# define BOOST_PP_CHECK_2(res, _) res +# endif +# +# define BOOST_PP_CHECK_RESULT_1 1, BOOST_PP_NIL +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/dmc/auto_rec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/dmc/auto_rec.hpp new file mode 100644 index 00000000..6eb02b84 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/dmc/auto_rec.hpp @@ -0,0 +1,286 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# +# include +# +# /* BOOST_PP_AUTO_REC */ +# +# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred) +# +# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p) +# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p) +# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p) +# +# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p##(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192) +# define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p##(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96) +# define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p##(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48) +# define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p##(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24) +# define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p##(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12) +# define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p##(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6) +# define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p##(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3) +# define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p##(1), 1, 2) +# define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p##(3), 3, 4) +# define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p##(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7) +# define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p##(5), 5, 6) +# define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p##(7), 7, 8) +# define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p##(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14) +# define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p##(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11) +# define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p##(9), 9, 10) +# define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p##(11), 11, 12) +# define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p##(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15) +# define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14) +# define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p##(15), 15, 16) +# define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p##(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28) +# define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p##(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22) +# define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p##(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19) +# define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p##(17), 17, 18) +# define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p##(19), 19, 20) +# define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p##(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23) +# define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p##(21), 21, 22) +# define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p##(23), 23, 24) +# define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p##(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30) +# define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p##(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27) +# define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p##(25), 25, 26) +# define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p##(27), 27, 28) +# define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p##(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31) +# define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p##(29), 29, 30) +# define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p##(31), 31, 32) +# define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p##(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56) +# define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p##(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44) +# define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p##(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38) +# define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p##(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35) +# define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p##(33), 33, 34) +# define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p##(35), 35, 36) +# define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p##(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39) +# define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p##(37), 37, 38) +# define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p##(39), 39, 40) +# define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p##(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46) +# define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p##(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43) +# define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p##(41), 41, 42) +# define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p##(43), 43, 44) +# define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p##(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47) +# define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p##(45), 45, 46) +# define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p##(47), 47, 48) +# define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p##(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60) +# define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p##(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54) +# define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p##(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51) +# define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p##(49), 49, 50) +# define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p##(51), 51, 52) +# define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p##(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55) +# define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p##(53), 53, 54) +# define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p##(55), 55, 56) +# define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p##(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62) +# define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p##(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59) +# define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p##(57), 57, 58) +# define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p##(59), 59, 60) +# define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p##(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63) +# define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p##(61), 61, 62) +# define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p##(63), 63, 64) +# define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p##(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112) +# define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p##(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88) +# define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p##(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76) +# define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p##(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70) +# define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p##(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67) +# define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p##(65), 65, 66) +# define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p##(67), 67, 68) +# define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p##(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71) +# define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p##(69), 69, 70) +# define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p##(71), 71, 72) +# define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p##(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78) +# define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p##(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75) +# define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p##(73), 73, 74) +# define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p##(75), 75, 76) +# define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p##(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79) +# define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p##(77), 77, 78) +# define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p##(79), 79, 80) +# define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p##(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92) +# define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p##(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86) +# define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p##(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83) +# define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p##(81), 81, 82) +# define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p##(83), 83, 84) +# define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p##(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87) +# define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p##(85), 85, 86) +# define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p##(87), 87, 88) +# define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p##(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94) +# define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p##(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91) +# define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p##(89), 89, 90) +# define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p##(91), 91, 92) +# define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p##(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95) +# define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p##(93), 93, 94) +# define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p##(95), 95, 96) +# define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p##(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120) +# define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p##(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108) +# define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p##(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102) +# define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p##(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99) +# define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p##(97), 97, 98) +# define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p##(99), 99, 100) +# define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p##(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103) +# define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p##(101), 101, 102) +# define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p##(103), 103, 104) +# define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p##(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110) +# define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p##(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107) +# define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p##(105), 105, 106) +# define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p##(107), 107, 108) +# define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p##(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111) +# define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p##(109), 109, 110) +# define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p##(111), 111, 112) +# define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p##(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124) +# define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p##(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118) +# define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p##(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115) +# define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p##(113), 113, 114) +# define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p##(115), 115, 116) +# define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p##(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119) +# define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p##(117), 117, 118) +# define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p##(119), 119, 120) +# define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p##(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126) +# define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p##(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123) +# define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p##(121), 121, 122) +# define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p##(123), 123, 124) +# define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p##(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127) +# define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p##(125), 125, 126) +# define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p##(127), 127, 128) +# define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p##(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224) +# define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p##(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176) +# define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p##(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152) +# define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p##(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140) +# define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p##(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134) +# define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p##(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131) +# define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p##(129), 129, 130) +# define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p##(131), 131, 132) +# define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p##(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135) +# define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p##(133), 133, 134) +# define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p##(135), 135, 136) +# define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p##(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142) +# define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p##(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139) +# define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p##(137), 137, 138) +# define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p##(139), 139, 140) +# define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p##(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143) +# define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p##(141), 141, 142) +# define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p##(143), 143, 144) +# define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p##(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156) +# define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p##(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150) +# define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p##(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147) +# define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p##(145), 145, 146) +# define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p##(147), 147, 148) +# define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p##(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151) +# define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p##(149), 149, 150) +# define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p##(151), 151, 152) +# define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p##(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158) +# define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p##(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155) +# define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p##(153), 153, 154) +# define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p##(155), 155, 156) +# define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p##(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159) +# define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p##(157), 157, 158) +# define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p##(159), 159, 160) +# define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p##(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184) +# define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p##(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172) +# define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p##(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166) +# define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p##(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163) +# define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p##(161), 161, 162) +# define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p##(163), 163, 164) +# define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p##(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167) +# define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p##(165), 165, 166) +# define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p##(167), 167, 168) +# define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p##(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174) +# define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p##(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171) +# define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p##(169), 169, 170) +# define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p##(171), 171, 172) +# define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p##(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175) +# define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p##(173), 173, 174) +# define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p##(175), 175, 176) +# define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p##(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188) +# define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p##(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182) +# define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p##(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179) +# define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p##(177), 177, 178) +# define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p##(179), 179, 180) +# define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p##(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183) +# define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p##(181), 181, 182) +# define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p##(183), 183, 184) +# define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p##(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190) +# define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p##(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187) +# define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p##(185), 185, 186) +# define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p##(187), 187, 188) +# define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p##(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191) +# define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p##(189), 189, 190) +# define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p##(191), 191, 192) +# define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p##(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240) +# define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p##(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216) +# define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p##(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204) +# define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p##(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198) +# define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p##(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195) +# define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p##(193), 193, 194) +# define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p##(195), 195, 196) +# define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p##(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199) +# define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p##(197), 197, 198) +# define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p##(199), 199, 200) +# define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p##(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206) +# define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p##(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203) +# define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p##(201), 201, 202) +# define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p##(203), 203, 204) +# define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p##(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207) +# define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p##(205), 205, 206) +# define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p##(207), 207, 208) +# define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p##(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220) +# define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p##(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214) +# define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p##(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211) +# define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p##(209), 209, 210) +# define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p##(211), 211, 212) +# define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p##(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215) +# define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p##(213), 213, 214) +# define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p##(215), 215, 216) +# define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p##(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222) +# define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p##(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219) +# define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p##(217), 217, 218) +# define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p##(219), 219, 220) +# define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p##(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223) +# define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p##(221), 221, 222) +# define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p##(223), 223, 224) +# define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p##(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248) +# define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p##(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236) +# define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p##(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230) +# define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p##(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227) +# define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p##(225), 225, 226) +# define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p##(227), 227, 228) +# define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p##(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231) +# define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p##(229), 229, 230) +# define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p##(231), 231, 232) +# define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p##(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238) +# define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p##(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235) +# define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p##(233), 233, 234) +# define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p##(235), 235, 236) +# define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p##(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239) +# define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p##(237), 237, 238) +# define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p##(239), 239, 240) +# define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p##(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252) +# define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p##(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246) +# define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p##(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243) +# define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p##(241), 241, 242) +# define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p##(243), 243, 244) +# define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p##(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247) +# define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p##(245), 245, 246) +# define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p##(247), 247, 248) +# define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p##(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254) +# define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p##(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251) +# define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p##(249), 249, 250) +# define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p##(251), 251, 252) +# define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p##(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255) +# define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p##(253), 253, 254) +# define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p##(255), 255, 256) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/is_binary.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/is_binary.hpp new file mode 100644 index 00000000..dfddebb9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/detail/is_binary.hpp @@ -0,0 +1,30 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP +# define BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP +# +# include +# include +# +# /* BOOST_PP_IS_BINARY */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_IS_BINARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK) +# else +# define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x) +# define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK) +# endif +# +# define BOOST_PP_IS_BINARY_CHECK(a, b) 1 +# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/empty.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/empty.hpp new file mode 100644 index 00000000..62afdc50 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/empty.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_EMPTY_HPP +# define BOOST_PREPROCESSOR_EMPTY_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/enum_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/enum_params.hpp new file mode 100644 index 00000000..fce7073c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/enum_params.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_HPP +# define BOOST_PREPROCESSOR_ENUM_PARAMS_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/empty.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/empty.hpp new file mode 100644 index 00000000..46db1902 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/empty.hpp @@ -0,0 +1,21 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP +# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP +# +# /* BOOST_PP_EMPTY */ +# +# define BOOST_PP_EMPTY() +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/identity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/identity.hpp new file mode 100644 index 00000000..f64c1deb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/facilities/identity.hpp @@ -0,0 +1,23 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP +# define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP +# +# include +# +# /* BOOST_PP_IDENTITY */ +# +# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/identity.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/identity.hpp new file mode 100644 index 00000000..297fbde1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/identity.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_IDENTITY_HPP +# define BOOST_PREPROCESSOR_IDENTITY_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/inc.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/inc.hpp new file mode 100644 index 00000000..5fb12ddd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/inc.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_INC_HPP +# define BOOST_PREPROCESSOR_INC_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iterate.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iterate.hpp new file mode 100644 index 00000000..7f8f7726 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iterate.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ITERATE_HPP +# define BOOST_PREPROCESSOR_ITERATE_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower1.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower1.hpp new file mode 100644 index 00000000..0fc2ccc4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower1.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_START_1 +# +# undef BOOST_PP_ITERATION_START_1_DIGIT_1 +# undef BOOST_PP_ITERATION_START_1_DIGIT_2 +# undef BOOST_PP_ITERATION_START_1_DIGIT_3 +# undef BOOST_PP_ITERATION_START_1_DIGIT_4 +# undef BOOST_PP_ITERATION_START_1_DIGIT_5 +# undef BOOST_PP_ITERATION_START_1_DIGIT_6 +# undef BOOST_PP_ITERATION_START_1_DIGIT_7 +# undef BOOST_PP_ITERATION_START_1_DIGIT_8 +# undef BOOST_PP_ITERATION_START_1_DIGIT_9 +# undef BOOST_PP_ITERATION_START_1_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_START_1_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_START_1_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_START_1_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_START_1_DIGIT_3 +# define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_1_DIGIT_3, BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1) +# elif BOOST_PP_ITERATION_START_1_DIGIT_2 +# define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1) +# else +# define BOOST_PP_ITERATION_START_1 BOOST_PP_ITERATION_START_1_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower2.hpp new file mode 100644 index 00000000..6d4ba998 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower2.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_START_2 +# +# undef BOOST_PP_ITERATION_START_2_DIGIT_1 +# undef BOOST_PP_ITERATION_START_2_DIGIT_2 +# undef BOOST_PP_ITERATION_START_2_DIGIT_3 +# undef BOOST_PP_ITERATION_START_2_DIGIT_4 +# undef BOOST_PP_ITERATION_START_2_DIGIT_5 +# undef BOOST_PP_ITERATION_START_2_DIGIT_6 +# undef BOOST_PP_ITERATION_START_2_DIGIT_7 +# undef BOOST_PP_ITERATION_START_2_DIGIT_8 +# undef BOOST_PP_ITERATION_START_2_DIGIT_9 +# undef BOOST_PP_ITERATION_START_2_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_START_2_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_START_2_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_START_2_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_START_2_DIGIT_3 +# define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_2_DIGIT_3, BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1) +# elif BOOST_PP_ITERATION_START_2_DIGIT_2 +# define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1) +# else +# define BOOST_PP_ITERATION_START_2 BOOST_PP_ITERATION_START_2_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower3.hpp new file mode 100644 index 00000000..1771ef11 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower3.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_START_3 +# +# undef BOOST_PP_ITERATION_START_3_DIGIT_1 +# undef BOOST_PP_ITERATION_START_3_DIGIT_2 +# undef BOOST_PP_ITERATION_START_3_DIGIT_3 +# undef BOOST_PP_ITERATION_START_3_DIGIT_4 +# undef BOOST_PP_ITERATION_START_3_DIGIT_5 +# undef BOOST_PP_ITERATION_START_3_DIGIT_6 +# undef BOOST_PP_ITERATION_START_3_DIGIT_7 +# undef BOOST_PP_ITERATION_START_3_DIGIT_8 +# undef BOOST_PP_ITERATION_START_3_DIGIT_9 +# undef BOOST_PP_ITERATION_START_3_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_START_3_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_START_3_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_START_3_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_START_3_DIGIT_3 +# define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_3_DIGIT_3, BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1) +# elif BOOST_PP_ITERATION_START_3_DIGIT_2 +# define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1) +# else +# define BOOST_PP_ITERATION_START_3 BOOST_PP_ITERATION_START_3_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower4.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower4.hpp new file mode 100644 index 00000000..3aba82cd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower4.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_START_4 +# +# undef BOOST_PP_ITERATION_START_4_DIGIT_1 +# undef BOOST_PP_ITERATION_START_4_DIGIT_2 +# undef BOOST_PP_ITERATION_START_4_DIGIT_3 +# undef BOOST_PP_ITERATION_START_4_DIGIT_4 +# undef BOOST_PP_ITERATION_START_4_DIGIT_5 +# undef BOOST_PP_ITERATION_START_4_DIGIT_6 +# undef BOOST_PP_ITERATION_START_4_DIGIT_7 +# undef BOOST_PP_ITERATION_START_4_DIGIT_8 +# undef BOOST_PP_ITERATION_START_4_DIGIT_9 +# undef BOOST_PP_ITERATION_START_4_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_START_4_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_START_4_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_START_4_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_START_4_DIGIT_3 +# define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_4_DIGIT_3, BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1) +# elif BOOST_PP_ITERATION_START_4_DIGIT_2 +# define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1) +# else +# define BOOST_PP_ITERATION_START_4 BOOST_PP_ITERATION_START_4_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower5.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower5.hpp new file mode 100644 index 00000000..32979772 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/lower5.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_START_5 +# +# undef BOOST_PP_ITERATION_START_5_DIGIT_1 +# undef BOOST_PP_ITERATION_START_5_DIGIT_2 +# undef BOOST_PP_ITERATION_START_5_DIGIT_3 +# undef BOOST_PP_ITERATION_START_5_DIGIT_4 +# undef BOOST_PP_ITERATION_START_5_DIGIT_5 +# undef BOOST_PP_ITERATION_START_5_DIGIT_6 +# undef BOOST_PP_ITERATION_START_5_DIGIT_7 +# undef BOOST_PP_ITERATION_START_5_DIGIT_8 +# undef BOOST_PP_ITERATION_START_5_DIGIT_9 +# undef BOOST_PP_ITERATION_START_5_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_START_5_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_START_5_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_START_5_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_START_5_DIGIT_3 +# define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_5_DIGIT_3, BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1) +# elif BOOST_PP_ITERATION_START_5_DIGIT_2 +# define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1) +# else +# define BOOST_PP_ITERATION_START_5 BOOST_PP_ITERATION_START_5_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper1.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper1.hpp new file mode 100644 index 00000000..95b50ae6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper1.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_FINISH_1 +# +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_1 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_2 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_3 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_4 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_5 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_6 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_7 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_8 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_9 +# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_FINISH_1_DIGIT_3 +# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_1_DIGIT_3, BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1) +# elif BOOST_PP_ITERATION_FINISH_1_DIGIT_2 +# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1) +# else +# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_ITERATION_FINISH_1_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper2.hpp new file mode 100644 index 00000000..f4c530ad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper2.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_FINISH_2 +# +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_1 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_2 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_3 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_4 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_5 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_6 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_7 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_8 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_9 +# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_FINISH_2_DIGIT_3 +# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_2_DIGIT_3, BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1) +# elif BOOST_PP_ITERATION_FINISH_2_DIGIT_2 +# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1) +# else +# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_ITERATION_FINISH_2_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper3.hpp new file mode 100644 index 00000000..91c48fc0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper3.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_FINISH_3 +# +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_1 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_2 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_3 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_4 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_5 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_6 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_7 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_8 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_9 +# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_FINISH_3_DIGIT_3 +# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_3_DIGIT_3, BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1) +# elif BOOST_PP_ITERATION_FINISH_3_DIGIT_2 +# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1) +# else +# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_ITERATION_FINISH_3_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper4.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper4.hpp new file mode 100644 index 00000000..d0339405 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper4.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_FINISH_4 +# +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_1 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_2 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_3 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_4 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_5 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_6 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_7 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_8 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_9 +# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_FINISH_4_DIGIT_3 +# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_4_DIGIT_3, BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1) +# elif BOOST_PP_ITERATION_FINISH_4_DIGIT_2 +# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1) +# else +# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_ITERATION_FINISH_4_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper5.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper5.hpp new file mode 100644 index 00000000..a28b08ed --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/bounds/upper5.hpp @@ -0,0 +1,99 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_ITERATION_FINISH_5 +# +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_1 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_2 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_3 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_4 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_5 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_6 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_7 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_8 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_9 +# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 9 +# endif +# +# if BOOST_PP_ITERATION_FINISH_5_DIGIT_3 +# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_5_DIGIT_3, BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1) +# elif BOOST_PP_ITERATION_FINISH_5_DIGIT_2 +# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1) +# else +# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_ITERATION_FINISH_5_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward1.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward1.hpp new file mode 100644 index 00000000..19471139 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward1.hpp @@ -0,0 +1,1342 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if defined(BOOST_PP_ITERATION_LIMITS) +# if !defined(BOOST_PP_FILENAME_1) +# error BOOST_PP_ERROR: depth #1 filename is not defined +# endif +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_ITERATION_FLAGS_1 0 +# undef BOOST_PP_ITERATION_LIMITS +# elif defined(BOOST_PP_ITERATION_PARAMS_1) +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_1) +# include +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1) +# include +# define BOOST_PP_FILENAME_1 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_1) +# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_1) >= 4 +# define BOOST_PP_ITERATION_FLAGS_1 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_1) +# else +# define BOOST_PP_ITERATION_FLAGS_1 0 +# endif +# else +# error BOOST_PP_ERROR: depth #1 iteration boundaries or filename not defined +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 1 +# +# define BOOST_PP_IS_ITERATING 1 +# +# if (BOOST_PP_ITERATION_START_1) > (BOOST_PP_ITERATION_FINISH_1) +# include +# else +# if BOOST_PP_ITERATION_START_1 <= 0 && BOOST_PP_ITERATION_FINISH_1 >= 0 +# define BOOST_PP_ITERATION_1 0 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 1 && BOOST_PP_ITERATION_FINISH_1 >= 1 +# define BOOST_PP_ITERATION_1 1 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 2 && BOOST_PP_ITERATION_FINISH_1 >= 2 +# define BOOST_PP_ITERATION_1 2 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 3 && BOOST_PP_ITERATION_FINISH_1 >= 3 +# define BOOST_PP_ITERATION_1 3 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 4 && BOOST_PP_ITERATION_FINISH_1 >= 4 +# define BOOST_PP_ITERATION_1 4 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 5 && BOOST_PP_ITERATION_FINISH_1 >= 5 +# define BOOST_PP_ITERATION_1 5 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 6 && BOOST_PP_ITERATION_FINISH_1 >= 6 +# define BOOST_PP_ITERATION_1 6 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 7 && BOOST_PP_ITERATION_FINISH_1 >= 7 +# define BOOST_PP_ITERATION_1 7 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 8 && BOOST_PP_ITERATION_FINISH_1 >= 8 +# define BOOST_PP_ITERATION_1 8 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 9 && BOOST_PP_ITERATION_FINISH_1 >= 9 +# define BOOST_PP_ITERATION_1 9 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 10 && BOOST_PP_ITERATION_FINISH_1 >= 10 +# define BOOST_PP_ITERATION_1 10 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 11 && BOOST_PP_ITERATION_FINISH_1 >= 11 +# define BOOST_PP_ITERATION_1 11 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 12 && BOOST_PP_ITERATION_FINISH_1 >= 12 +# define BOOST_PP_ITERATION_1 12 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 13 && BOOST_PP_ITERATION_FINISH_1 >= 13 +# define BOOST_PP_ITERATION_1 13 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 14 && BOOST_PP_ITERATION_FINISH_1 >= 14 +# define BOOST_PP_ITERATION_1 14 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 15 && BOOST_PP_ITERATION_FINISH_1 >= 15 +# define BOOST_PP_ITERATION_1 15 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 16 && BOOST_PP_ITERATION_FINISH_1 >= 16 +# define BOOST_PP_ITERATION_1 16 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 17 && BOOST_PP_ITERATION_FINISH_1 >= 17 +# define BOOST_PP_ITERATION_1 17 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 18 && BOOST_PP_ITERATION_FINISH_1 >= 18 +# define BOOST_PP_ITERATION_1 18 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 19 && BOOST_PP_ITERATION_FINISH_1 >= 19 +# define BOOST_PP_ITERATION_1 19 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 20 && BOOST_PP_ITERATION_FINISH_1 >= 20 +# define BOOST_PP_ITERATION_1 20 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 21 && BOOST_PP_ITERATION_FINISH_1 >= 21 +# define BOOST_PP_ITERATION_1 21 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 22 && BOOST_PP_ITERATION_FINISH_1 >= 22 +# define BOOST_PP_ITERATION_1 22 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 23 && BOOST_PP_ITERATION_FINISH_1 >= 23 +# define BOOST_PP_ITERATION_1 23 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 24 && BOOST_PP_ITERATION_FINISH_1 >= 24 +# define BOOST_PP_ITERATION_1 24 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 25 && BOOST_PP_ITERATION_FINISH_1 >= 25 +# define BOOST_PP_ITERATION_1 25 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 26 && BOOST_PP_ITERATION_FINISH_1 >= 26 +# define BOOST_PP_ITERATION_1 26 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 27 && BOOST_PP_ITERATION_FINISH_1 >= 27 +# define BOOST_PP_ITERATION_1 27 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 28 && BOOST_PP_ITERATION_FINISH_1 >= 28 +# define BOOST_PP_ITERATION_1 28 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 29 && BOOST_PP_ITERATION_FINISH_1 >= 29 +# define BOOST_PP_ITERATION_1 29 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 30 && BOOST_PP_ITERATION_FINISH_1 >= 30 +# define BOOST_PP_ITERATION_1 30 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 31 && BOOST_PP_ITERATION_FINISH_1 >= 31 +# define BOOST_PP_ITERATION_1 31 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 32 && BOOST_PP_ITERATION_FINISH_1 >= 32 +# define BOOST_PP_ITERATION_1 32 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 33 && BOOST_PP_ITERATION_FINISH_1 >= 33 +# define BOOST_PP_ITERATION_1 33 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 34 && BOOST_PP_ITERATION_FINISH_1 >= 34 +# define BOOST_PP_ITERATION_1 34 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 35 && BOOST_PP_ITERATION_FINISH_1 >= 35 +# define BOOST_PP_ITERATION_1 35 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 36 && BOOST_PP_ITERATION_FINISH_1 >= 36 +# define BOOST_PP_ITERATION_1 36 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 37 && BOOST_PP_ITERATION_FINISH_1 >= 37 +# define BOOST_PP_ITERATION_1 37 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 38 && BOOST_PP_ITERATION_FINISH_1 >= 38 +# define BOOST_PP_ITERATION_1 38 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 39 && BOOST_PP_ITERATION_FINISH_1 >= 39 +# define BOOST_PP_ITERATION_1 39 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 40 && BOOST_PP_ITERATION_FINISH_1 >= 40 +# define BOOST_PP_ITERATION_1 40 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 41 && BOOST_PP_ITERATION_FINISH_1 >= 41 +# define BOOST_PP_ITERATION_1 41 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 42 && BOOST_PP_ITERATION_FINISH_1 >= 42 +# define BOOST_PP_ITERATION_1 42 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 43 && BOOST_PP_ITERATION_FINISH_1 >= 43 +# define BOOST_PP_ITERATION_1 43 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 44 && BOOST_PP_ITERATION_FINISH_1 >= 44 +# define BOOST_PP_ITERATION_1 44 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 45 && BOOST_PP_ITERATION_FINISH_1 >= 45 +# define BOOST_PP_ITERATION_1 45 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 46 && BOOST_PP_ITERATION_FINISH_1 >= 46 +# define BOOST_PP_ITERATION_1 46 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 47 && BOOST_PP_ITERATION_FINISH_1 >= 47 +# define BOOST_PP_ITERATION_1 47 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 48 && BOOST_PP_ITERATION_FINISH_1 >= 48 +# define BOOST_PP_ITERATION_1 48 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 49 && BOOST_PP_ITERATION_FINISH_1 >= 49 +# define BOOST_PP_ITERATION_1 49 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 50 && BOOST_PP_ITERATION_FINISH_1 >= 50 +# define BOOST_PP_ITERATION_1 50 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 51 && BOOST_PP_ITERATION_FINISH_1 >= 51 +# define BOOST_PP_ITERATION_1 51 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 52 && BOOST_PP_ITERATION_FINISH_1 >= 52 +# define BOOST_PP_ITERATION_1 52 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 53 && BOOST_PP_ITERATION_FINISH_1 >= 53 +# define BOOST_PP_ITERATION_1 53 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 54 && BOOST_PP_ITERATION_FINISH_1 >= 54 +# define BOOST_PP_ITERATION_1 54 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 55 && BOOST_PP_ITERATION_FINISH_1 >= 55 +# define BOOST_PP_ITERATION_1 55 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 56 && BOOST_PP_ITERATION_FINISH_1 >= 56 +# define BOOST_PP_ITERATION_1 56 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 57 && BOOST_PP_ITERATION_FINISH_1 >= 57 +# define BOOST_PP_ITERATION_1 57 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 58 && BOOST_PP_ITERATION_FINISH_1 >= 58 +# define BOOST_PP_ITERATION_1 58 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 59 && BOOST_PP_ITERATION_FINISH_1 >= 59 +# define BOOST_PP_ITERATION_1 59 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 60 && BOOST_PP_ITERATION_FINISH_1 >= 60 +# define BOOST_PP_ITERATION_1 60 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 61 && BOOST_PP_ITERATION_FINISH_1 >= 61 +# define BOOST_PP_ITERATION_1 61 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 62 && BOOST_PP_ITERATION_FINISH_1 >= 62 +# define BOOST_PP_ITERATION_1 62 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 63 && BOOST_PP_ITERATION_FINISH_1 >= 63 +# define BOOST_PP_ITERATION_1 63 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 64 && BOOST_PP_ITERATION_FINISH_1 >= 64 +# define BOOST_PP_ITERATION_1 64 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 65 && BOOST_PP_ITERATION_FINISH_1 >= 65 +# define BOOST_PP_ITERATION_1 65 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 66 && BOOST_PP_ITERATION_FINISH_1 >= 66 +# define BOOST_PP_ITERATION_1 66 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 67 && BOOST_PP_ITERATION_FINISH_1 >= 67 +# define BOOST_PP_ITERATION_1 67 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 68 && BOOST_PP_ITERATION_FINISH_1 >= 68 +# define BOOST_PP_ITERATION_1 68 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 69 && BOOST_PP_ITERATION_FINISH_1 >= 69 +# define BOOST_PP_ITERATION_1 69 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 70 && BOOST_PP_ITERATION_FINISH_1 >= 70 +# define BOOST_PP_ITERATION_1 70 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 71 && BOOST_PP_ITERATION_FINISH_1 >= 71 +# define BOOST_PP_ITERATION_1 71 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 72 && BOOST_PP_ITERATION_FINISH_1 >= 72 +# define BOOST_PP_ITERATION_1 72 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 73 && BOOST_PP_ITERATION_FINISH_1 >= 73 +# define BOOST_PP_ITERATION_1 73 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 74 && BOOST_PP_ITERATION_FINISH_1 >= 74 +# define BOOST_PP_ITERATION_1 74 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 75 && BOOST_PP_ITERATION_FINISH_1 >= 75 +# define BOOST_PP_ITERATION_1 75 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 76 && BOOST_PP_ITERATION_FINISH_1 >= 76 +# define BOOST_PP_ITERATION_1 76 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 77 && BOOST_PP_ITERATION_FINISH_1 >= 77 +# define BOOST_PP_ITERATION_1 77 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 78 && BOOST_PP_ITERATION_FINISH_1 >= 78 +# define BOOST_PP_ITERATION_1 78 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 79 && BOOST_PP_ITERATION_FINISH_1 >= 79 +# define BOOST_PP_ITERATION_1 79 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 80 && BOOST_PP_ITERATION_FINISH_1 >= 80 +# define BOOST_PP_ITERATION_1 80 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 81 && BOOST_PP_ITERATION_FINISH_1 >= 81 +# define BOOST_PP_ITERATION_1 81 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 82 && BOOST_PP_ITERATION_FINISH_1 >= 82 +# define BOOST_PP_ITERATION_1 82 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 83 && BOOST_PP_ITERATION_FINISH_1 >= 83 +# define BOOST_PP_ITERATION_1 83 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 84 && BOOST_PP_ITERATION_FINISH_1 >= 84 +# define BOOST_PP_ITERATION_1 84 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 85 && BOOST_PP_ITERATION_FINISH_1 >= 85 +# define BOOST_PP_ITERATION_1 85 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 86 && BOOST_PP_ITERATION_FINISH_1 >= 86 +# define BOOST_PP_ITERATION_1 86 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 87 && BOOST_PP_ITERATION_FINISH_1 >= 87 +# define BOOST_PP_ITERATION_1 87 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 88 && BOOST_PP_ITERATION_FINISH_1 >= 88 +# define BOOST_PP_ITERATION_1 88 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 89 && BOOST_PP_ITERATION_FINISH_1 >= 89 +# define BOOST_PP_ITERATION_1 89 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 90 && BOOST_PP_ITERATION_FINISH_1 >= 90 +# define BOOST_PP_ITERATION_1 90 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 91 && BOOST_PP_ITERATION_FINISH_1 >= 91 +# define BOOST_PP_ITERATION_1 91 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 92 && BOOST_PP_ITERATION_FINISH_1 >= 92 +# define BOOST_PP_ITERATION_1 92 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 93 && BOOST_PP_ITERATION_FINISH_1 >= 93 +# define BOOST_PP_ITERATION_1 93 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 94 && BOOST_PP_ITERATION_FINISH_1 >= 94 +# define BOOST_PP_ITERATION_1 94 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 95 && BOOST_PP_ITERATION_FINISH_1 >= 95 +# define BOOST_PP_ITERATION_1 95 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 96 && BOOST_PP_ITERATION_FINISH_1 >= 96 +# define BOOST_PP_ITERATION_1 96 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 97 && BOOST_PP_ITERATION_FINISH_1 >= 97 +# define BOOST_PP_ITERATION_1 97 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 98 && BOOST_PP_ITERATION_FINISH_1 >= 98 +# define BOOST_PP_ITERATION_1 98 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 99 && BOOST_PP_ITERATION_FINISH_1 >= 99 +# define BOOST_PP_ITERATION_1 99 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 100 && BOOST_PP_ITERATION_FINISH_1 >= 100 +# define BOOST_PP_ITERATION_1 100 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 101 && BOOST_PP_ITERATION_FINISH_1 >= 101 +# define BOOST_PP_ITERATION_1 101 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 102 && BOOST_PP_ITERATION_FINISH_1 >= 102 +# define BOOST_PP_ITERATION_1 102 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 103 && BOOST_PP_ITERATION_FINISH_1 >= 103 +# define BOOST_PP_ITERATION_1 103 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 104 && BOOST_PP_ITERATION_FINISH_1 >= 104 +# define BOOST_PP_ITERATION_1 104 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 105 && BOOST_PP_ITERATION_FINISH_1 >= 105 +# define BOOST_PP_ITERATION_1 105 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 106 && BOOST_PP_ITERATION_FINISH_1 >= 106 +# define BOOST_PP_ITERATION_1 106 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 107 && BOOST_PP_ITERATION_FINISH_1 >= 107 +# define BOOST_PP_ITERATION_1 107 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 108 && BOOST_PP_ITERATION_FINISH_1 >= 108 +# define BOOST_PP_ITERATION_1 108 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 109 && BOOST_PP_ITERATION_FINISH_1 >= 109 +# define BOOST_PP_ITERATION_1 109 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 110 && BOOST_PP_ITERATION_FINISH_1 >= 110 +# define BOOST_PP_ITERATION_1 110 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 111 && BOOST_PP_ITERATION_FINISH_1 >= 111 +# define BOOST_PP_ITERATION_1 111 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 112 && BOOST_PP_ITERATION_FINISH_1 >= 112 +# define BOOST_PP_ITERATION_1 112 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 113 && BOOST_PP_ITERATION_FINISH_1 >= 113 +# define BOOST_PP_ITERATION_1 113 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 114 && BOOST_PP_ITERATION_FINISH_1 >= 114 +# define BOOST_PP_ITERATION_1 114 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 115 && BOOST_PP_ITERATION_FINISH_1 >= 115 +# define BOOST_PP_ITERATION_1 115 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 116 && BOOST_PP_ITERATION_FINISH_1 >= 116 +# define BOOST_PP_ITERATION_1 116 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 117 && BOOST_PP_ITERATION_FINISH_1 >= 117 +# define BOOST_PP_ITERATION_1 117 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 118 && BOOST_PP_ITERATION_FINISH_1 >= 118 +# define BOOST_PP_ITERATION_1 118 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 119 && BOOST_PP_ITERATION_FINISH_1 >= 119 +# define BOOST_PP_ITERATION_1 119 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 120 && BOOST_PP_ITERATION_FINISH_1 >= 120 +# define BOOST_PP_ITERATION_1 120 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 121 && BOOST_PP_ITERATION_FINISH_1 >= 121 +# define BOOST_PP_ITERATION_1 121 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 122 && BOOST_PP_ITERATION_FINISH_1 >= 122 +# define BOOST_PP_ITERATION_1 122 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 123 && BOOST_PP_ITERATION_FINISH_1 >= 123 +# define BOOST_PP_ITERATION_1 123 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 124 && BOOST_PP_ITERATION_FINISH_1 >= 124 +# define BOOST_PP_ITERATION_1 124 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 125 && BOOST_PP_ITERATION_FINISH_1 >= 125 +# define BOOST_PP_ITERATION_1 125 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 126 && BOOST_PP_ITERATION_FINISH_1 >= 126 +# define BOOST_PP_ITERATION_1 126 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 127 && BOOST_PP_ITERATION_FINISH_1 >= 127 +# define BOOST_PP_ITERATION_1 127 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 128 && BOOST_PP_ITERATION_FINISH_1 >= 128 +# define BOOST_PP_ITERATION_1 128 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 129 && BOOST_PP_ITERATION_FINISH_1 >= 129 +# define BOOST_PP_ITERATION_1 129 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 130 && BOOST_PP_ITERATION_FINISH_1 >= 130 +# define BOOST_PP_ITERATION_1 130 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 131 && BOOST_PP_ITERATION_FINISH_1 >= 131 +# define BOOST_PP_ITERATION_1 131 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 132 && BOOST_PP_ITERATION_FINISH_1 >= 132 +# define BOOST_PP_ITERATION_1 132 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 133 && BOOST_PP_ITERATION_FINISH_1 >= 133 +# define BOOST_PP_ITERATION_1 133 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 134 && BOOST_PP_ITERATION_FINISH_1 >= 134 +# define BOOST_PP_ITERATION_1 134 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 135 && BOOST_PP_ITERATION_FINISH_1 >= 135 +# define BOOST_PP_ITERATION_1 135 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 136 && BOOST_PP_ITERATION_FINISH_1 >= 136 +# define BOOST_PP_ITERATION_1 136 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 137 && BOOST_PP_ITERATION_FINISH_1 >= 137 +# define BOOST_PP_ITERATION_1 137 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 138 && BOOST_PP_ITERATION_FINISH_1 >= 138 +# define BOOST_PP_ITERATION_1 138 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 139 && BOOST_PP_ITERATION_FINISH_1 >= 139 +# define BOOST_PP_ITERATION_1 139 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 140 && BOOST_PP_ITERATION_FINISH_1 >= 140 +# define BOOST_PP_ITERATION_1 140 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 141 && BOOST_PP_ITERATION_FINISH_1 >= 141 +# define BOOST_PP_ITERATION_1 141 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 142 && BOOST_PP_ITERATION_FINISH_1 >= 142 +# define BOOST_PP_ITERATION_1 142 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 143 && BOOST_PP_ITERATION_FINISH_1 >= 143 +# define BOOST_PP_ITERATION_1 143 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 144 && BOOST_PP_ITERATION_FINISH_1 >= 144 +# define BOOST_PP_ITERATION_1 144 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 145 && BOOST_PP_ITERATION_FINISH_1 >= 145 +# define BOOST_PP_ITERATION_1 145 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 146 && BOOST_PP_ITERATION_FINISH_1 >= 146 +# define BOOST_PP_ITERATION_1 146 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 147 && BOOST_PP_ITERATION_FINISH_1 >= 147 +# define BOOST_PP_ITERATION_1 147 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 148 && BOOST_PP_ITERATION_FINISH_1 >= 148 +# define BOOST_PP_ITERATION_1 148 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 149 && BOOST_PP_ITERATION_FINISH_1 >= 149 +# define BOOST_PP_ITERATION_1 149 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 150 && BOOST_PP_ITERATION_FINISH_1 >= 150 +# define BOOST_PP_ITERATION_1 150 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 151 && BOOST_PP_ITERATION_FINISH_1 >= 151 +# define BOOST_PP_ITERATION_1 151 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 152 && BOOST_PP_ITERATION_FINISH_1 >= 152 +# define BOOST_PP_ITERATION_1 152 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 153 && BOOST_PP_ITERATION_FINISH_1 >= 153 +# define BOOST_PP_ITERATION_1 153 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 154 && BOOST_PP_ITERATION_FINISH_1 >= 154 +# define BOOST_PP_ITERATION_1 154 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 155 && BOOST_PP_ITERATION_FINISH_1 >= 155 +# define BOOST_PP_ITERATION_1 155 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 156 && BOOST_PP_ITERATION_FINISH_1 >= 156 +# define BOOST_PP_ITERATION_1 156 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 157 && BOOST_PP_ITERATION_FINISH_1 >= 157 +# define BOOST_PP_ITERATION_1 157 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 158 && BOOST_PP_ITERATION_FINISH_1 >= 158 +# define BOOST_PP_ITERATION_1 158 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 159 && BOOST_PP_ITERATION_FINISH_1 >= 159 +# define BOOST_PP_ITERATION_1 159 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 160 && BOOST_PP_ITERATION_FINISH_1 >= 160 +# define BOOST_PP_ITERATION_1 160 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 161 && BOOST_PP_ITERATION_FINISH_1 >= 161 +# define BOOST_PP_ITERATION_1 161 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 162 && BOOST_PP_ITERATION_FINISH_1 >= 162 +# define BOOST_PP_ITERATION_1 162 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 163 && BOOST_PP_ITERATION_FINISH_1 >= 163 +# define BOOST_PP_ITERATION_1 163 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 164 && BOOST_PP_ITERATION_FINISH_1 >= 164 +# define BOOST_PP_ITERATION_1 164 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 165 && BOOST_PP_ITERATION_FINISH_1 >= 165 +# define BOOST_PP_ITERATION_1 165 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 166 && BOOST_PP_ITERATION_FINISH_1 >= 166 +# define BOOST_PP_ITERATION_1 166 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 167 && BOOST_PP_ITERATION_FINISH_1 >= 167 +# define BOOST_PP_ITERATION_1 167 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 168 && BOOST_PP_ITERATION_FINISH_1 >= 168 +# define BOOST_PP_ITERATION_1 168 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 169 && BOOST_PP_ITERATION_FINISH_1 >= 169 +# define BOOST_PP_ITERATION_1 169 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 170 && BOOST_PP_ITERATION_FINISH_1 >= 170 +# define BOOST_PP_ITERATION_1 170 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 171 && BOOST_PP_ITERATION_FINISH_1 >= 171 +# define BOOST_PP_ITERATION_1 171 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 172 && BOOST_PP_ITERATION_FINISH_1 >= 172 +# define BOOST_PP_ITERATION_1 172 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 173 && BOOST_PP_ITERATION_FINISH_1 >= 173 +# define BOOST_PP_ITERATION_1 173 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 174 && BOOST_PP_ITERATION_FINISH_1 >= 174 +# define BOOST_PP_ITERATION_1 174 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 175 && BOOST_PP_ITERATION_FINISH_1 >= 175 +# define BOOST_PP_ITERATION_1 175 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 176 && BOOST_PP_ITERATION_FINISH_1 >= 176 +# define BOOST_PP_ITERATION_1 176 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 177 && BOOST_PP_ITERATION_FINISH_1 >= 177 +# define BOOST_PP_ITERATION_1 177 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 178 && BOOST_PP_ITERATION_FINISH_1 >= 178 +# define BOOST_PP_ITERATION_1 178 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 179 && BOOST_PP_ITERATION_FINISH_1 >= 179 +# define BOOST_PP_ITERATION_1 179 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 180 && BOOST_PP_ITERATION_FINISH_1 >= 180 +# define BOOST_PP_ITERATION_1 180 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 181 && BOOST_PP_ITERATION_FINISH_1 >= 181 +# define BOOST_PP_ITERATION_1 181 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 182 && BOOST_PP_ITERATION_FINISH_1 >= 182 +# define BOOST_PP_ITERATION_1 182 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 183 && BOOST_PP_ITERATION_FINISH_1 >= 183 +# define BOOST_PP_ITERATION_1 183 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 184 && BOOST_PP_ITERATION_FINISH_1 >= 184 +# define BOOST_PP_ITERATION_1 184 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 185 && BOOST_PP_ITERATION_FINISH_1 >= 185 +# define BOOST_PP_ITERATION_1 185 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 186 && BOOST_PP_ITERATION_FINISH_1 >= 186 +# define BOOST_PP_ITERATION_1 186 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 187 && BOOST_PP_ITERATION_FINISH_1 >= 187 +# define BOOST_PP_ITERATION_1 187 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 188 && BOOST_PP_ITERATION_FINISH_1 >= 188 +# define BOOST_PP_ITERATION_1 188 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 189 && BOOST_PP_ITERATION_FINISH_1 >= 189 +# define BOOST_PP_ITERATION_1 189 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 190 && BOOST_PP_ITERATION_FINISH_1 >= 190 +# define BOOST_PP_ITERATION_1 190 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 191 && BOOST_PP_ITERATION_FINISH_1 >= 191 +# define BOOST_PP_ITERATION_1 191 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 192 && BOOST_PP_ITERATION_FINISH_1 >= 192 +# define BOOST_PP_ITERATION_1 192 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 193 && BOOST_PP_ITERATION_FINISH_1 >= 193 +# define BOOST_PP_ITERATION_1 193 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 194 && BOOST_PP_ITERATION_FINISH_1 >= 194 +# define BOOST_PP_ITERATION_1 194 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 195 && BOOST_PP_ITERATION_FINISH_1 >= 195 +# define BOOST_PP_ITERATION_1 195 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 196 && BOOST_PP_ITERATION_FINISH_1 >= 196 +# define BOOST_PP_ITERATION_1 196 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 197 && BOOST_PP_ITERATION_FINISH_1 >= 197 +# define BOOST_PP_ITERATION_1 197 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 198 && BOOST_PP_ITERATION_FINISH_1 >= 198 +# define BOOST_PP_ITERATION_1 198 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 199 && BOOST_PP_ITERATION_FINISH_1 >= 199 +# define BOOST_PP_ITERATION_1 199 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 200 && BOOST_PP_ITERATION_FINISH_1 >= 200 +# define BOOST_PP_ITERATION_1 200 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 201 && BOOST_PP_ITERATION_FINISH_1 >= 201 +# define BOOST_PP_ITERATION_1 201 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 202 && BOOST_PP_ITERATION_FINISH_1 >= 202 +# define BOOST_PP_ITERATION_1 202 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 203 && BOOST_PP_ITERATION_FINISH_1 >= 203 +# define BOOST_PP_ITERATION_1 203 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 204 && BOOST_PP_ITERATION_FINISH_1 >= 204 +# define BOOST_PP_ITERATION_1 204 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 205 && BOOST_PP_ITERATION_FINISH_1 >= 205 +# define BOOST_PP_ITERATION_1 205 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 206 && BOOST_PP_ITERATION_FINISH_1 >= 206 +# define BOOST_PP_ITERATION_1 206 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 207 && BOOST_PP_ITERATION_FINISH_1 >= 207 +# define BOOST_PP_ITERATION_1 207 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 208 && BOOST_PP_ITERATION_FINISH_1 >= 208 +# define BOOST_PP_ITERATION_1 208 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 209 && BOOST_PP_ITERATION_FINISH_1 >= 209 +# define BOOST_PP_ITERATION_1 209 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 210 && BOOST_PP_ITERATION_FINISH_1 >= 210 +# define BOOST_PP_ITERATION_1 210 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 211 && BOOST_PP_ITERATION_FINISH_1 >= 211 +# define BOOST_PP_ITERATION_1 211 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 212 && BOOST_PP_ITERATION_FINISH_1 >= 212 +# define BOOST_PP_ITERATION_1 212 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 213 && BOOST_PP_ITERATION_FINISH_1 >= 213 +# define BOOST_PP_ITERATION_1 213 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 214 && BOOST_PP_ITERATION_FINISH_1 >= 214 +# define BOOST_PP_ITERATION_1 214 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 215 && BOOST_PP_ITERATION_FINISH_1 >= 215 +# define BOOST_PP_ITERATION_1 215 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 216 && BOOST_PP_ITERATION_FINISH_1 >= 216 +# define BOOST_PP_ITERATION_1 216 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 217 && BOOST_PP_ITERATION_FINISH_1 >= 217 +# define BOOST_PP_ITERATION_1 217 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 218 && BOOST_PP_ITERATION_FINISH_1 >= 218 +# define BOOST_PP_ITERATION_1 218 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 219 && BOOST_PP_ITERATION_FINISH_1 >= 219 +# define BOOST_PP_ITERATION_1 219 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 220 && BOOST_PP_ITERATION_FINISH_1 >= 220 +# define BOOST_PP_ITERATION_1 220 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 221 && BOOST_PP_ITERATION_FINISH_1 >= 221 +# define BOOST_PP_ITERATION_1 221 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 222 && BOOST_PP_ITERATION_FINISH_1 >= 222 +# define BOOST_PP_ITERATION_1 222 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 223 && BOOST_PP_ITERATION_FINISH_1 >= 223 +# define BOOST_PP_ITERATION_1 223 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 224 && BOOST_PP_ITERATION_FINISH_1 >= 224 +# define BOOST_PP_ITERATION_1 224 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 225 && BOOST_PP_ITERATION_FINISH_1 >= 225 +# define BOOST_PP_ITERATION_1 225 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 226 && BOOST_PP_ITERATION_FINISH_1 >= 226 +# define BOOST_PP_ITERATION_1 226 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 227 && BOOST_PP_ITERATION_FINISH_1 >= 227 +# define BOOST_PP_ITERATION_1 227 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 228 && BOOST_PP_ITERATION_FINISH_1 >= 228 +# define BOOST_PP_ITERATION_1 228 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 229 && BOOST_PP_ITERATION_FINISH_1 >= 229 +# define BOOST_PP_ITERATION_1 229 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 230 && BOOST_PP_ITERATION_FINISH_1 >= 230 +# define BOOST_PP_ITERATION_1 230 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 231 && BOOST_PP_ITERATION_FINISH_1 >= 231 +# define BOOST_PP_ITERATION_1 231 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 232 && BOOST_PP_ITERATION_FINISH_1 >= 232 +# define BOOST_PP_ITERATION_1 232 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 233 && BOOST_PP_ITERATION_FINISH_1 >= 233 +# define BOOST_PP_ITERATION_1 233 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 234 && BOOST_PP_ITERATION_FINISH_1 >= 234 +# define BOOST_PP_ITERATION_1 234 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 235 && BOOST_PP_ITERATION_FINISH_1 >= 235 +# define BOOST_PP_ITERATION_1 235 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 236 && BOOST_PP_ITERATION_FINISH_1 >= 236 +# define BOOST_PP_ITERATION_1 236 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 237 && BOOST_PP_ITERATION_FINISH_1 >= 237 +# define BOOST_PP_ITERATION_1 237 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 238 && BOOST_PP_ITERATION_FINISH_1 >= 238 +# define BOOST_PP_ITERATION_1 238 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 239 && BOOST_PP_ITERATION_FINISH_1 >= 239 +# define BOOST_PP_ITERATION_1 239 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 240 && BOOST_PP_ITERATION_FINISH_1 >= 240 +# define BOOST_PP_ITERATION_1 240 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 241 && BOOST_PP_ITERATION_FINISH_1 >= 241 +# define BOOST_PP_ITERATION_1 241 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 242 && BOOST_PP_ITERATION_FINISH_1 >= 242 +# define BOOST_PP_ITERATION_1 242 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 243 && BOOST_PP_ITERATION_FINISH_1 >= 243 +# define BOOST_PP_ITERATION_1 243 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 244 && BOOST_PP_ITERATION_FINISH_1 >= 244 +# define BOOST_PP_ITERATION_1 244 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 245 && BOOST_PP_ITERATION_FINISH_1 >= 245 +# define BOOST_PP_ITERATION_1 245 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 246 && BOOST_PP_ITERATION_FINISH_1 >= 246 +# define BOOST_PP_ITERATION_1 246 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 247 && BOOST_PP_ITERATION_FINISH_1 >= 247 +# define BOOST_PP_ITERATION_1 247 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 248 && BOOST_PP_ITERATION_FINISH_1 >= 248 +# define BOOST_PP_ITERATION_1 248 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 249 && BOOST_PP_ITERATION_FINISH_1 >= 249 +# define BOOST_PP_ITERATION_1 249 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 250 && BOOST_PP_ITERATION_FINISH_1 >= 250 +# define BOOST_PP_ITERATION_1 250 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 251 && BOOST_PP_ITERATION_FINISH_1 >= 251 +# define BOOST_PP_ITERATION_1 251 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 252 && BOOST_PP_ITERATION_FINISH_1 >= 252 +# define BOOST_PP_ITERATION_1 252 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 253 && BOOST_PP_ITERATION_FINISH_1 >= 253 +# define BOOST_PP_ITERATION_1 253 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 254 && BOOST_PP_ITERATION_FINISH_1 >= 254 +# define BOOST_PP_ITERATION_1 254 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 255 && BOOST_PP_ITERATION_FINISH_1 >= 255 +# define BOOST_PP_ITERATION_1 255 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_START_1 <= 256 && BOOST_PP_ITERATION_FINISH_1 >= 256 +# define BOOST_PP_ITERATION_1 256 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# endif +# +# undef BOOST_PP_IS_ITERATING +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 0 +# +# undef BOOST_PP_ITERATION_START_1 +# undef BOOST_PP_ITERATION_FINISH_1 +# undef BOOST_PP_FILENAME_1 +# +# undef BOOST_PP_ITERATION_FLAGS_1 +# undef BOOST_PP_ITERATION_PARAMS_1 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward2.hpp new file mode 100644 index 00000000..3d747f81 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward2.hpp @@ -0,0 +1,1338 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if defined(BOOST_PP_ITERATION_LIMITS) +# if !defined(BOOST_PP_FILENAME_2) +# error BOOST_PP_ERROR: depth #2 filename is not defined +# endif +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_ITERATION_FLAGS_2 0 +# undef BOOST_PP_ITERATION_LIMITS +# elif defined(BOOST_PP_ITERATION_PARAMS_2) +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_2) +# include +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_2) +# include +# define BOOST_PP_FILENAME_2 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_2) +# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_2) >= 4 +# define BOOST_PP_ITERATION_FLAGS_2 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_2) +# else +# define BOOST_PP_ITERATION_FLAGS_2 0 +# endif +# else +# error BOOST_PP_ERROR: depth #2 iteration boundaries or filename not defined +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 2 +# +# if (BOOST_PP_ITERATION_START_2) > (BOOST_PP_ITERATION_FINISH_2) +# include +# else +# if BOOST_PP_ITERATION_START_2 <= 0 && BOOST_PP_ITERATION_FINISH_2 >= 0 +# define BOOST_PP_ITERATION_2 0 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 1 && BOOST_PP_ITERATION_FINISH_2 >= 1 +# define BOOST_PP_ITERATION_2 1 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 2 && BOOST_PP_ITERATION_FINISH_2 >= 2 +# define BOOST_PP_ITERATION_2 2 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 3 && BOOST_PP_ITERATION_FINISH_2 >= 3 +# define BOOST_PP_ITERATION_2 3 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 4 && BOOST_PP_ITERATION_FINISH_2 >= 4 +# define BOOST_PP_ITERATION_2 4 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 5 && BOOST_PP_ITERATION_FINISH_2 >= 5 +# define BOOST_PP_ITERATION_2 5 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 6 && BOOST_PP_ITERATION_FINISH_2 >= 6 +# define BOOST_PP_ITERATION_2 6 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 7 && BOOST_PP_ITERATION_FINISH_2 >= 7 +# define BOOST_PP_ITERATION_2 7 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 8 && BOOST_PP_ITERATION_FINISH_2 >= 8 +# define BOOST_PP_ITERATION_2 8 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 9 && BOOST_PP_ITERATION_FINISH_2 >= 9 +# define BOOST_PP_ITERATION_2 9 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 10 && BOOST_PP_ITERATION_FINISH_2 >= 10 +# define BOOST_PP_ITERATION_2 10 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 11 && BOOST_PP_ITERATION_FINISH_2 >= 11 +# define BOOST_PP_ITERATION_2 11 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 12 && BOOST_PP_ITERATION_FINISH_2 >= 12 +# define BOOST_PP_ITERATION_2 12 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 13 && BOOST_PP_ITERATION_FINISH_2 >= 13 +# define BOOST_PP_ITERATION_2 13 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 14 && BOOST_PP_ITERATION_FINISH_2 >= 14 +# define BOOST_PP_ITERATION_2 14 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 15 && BOOST_PP_ITERATION_FINISH_2 >= 15 +# define BOOST_PP_ITERATION_2 15 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 16 && BOOST_PP_ITERATION_FINISH_2 >= 16 +# define BOOST_PP_ITERATION_2 16 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 17 && BOOST_PP_ITERATION_FINISH_2 >= 17 +# define BOOST_PP_ITERATION_2 17 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 18 && BOOST_PP_ITERATION_FINISH_2 >= 18 +# define BOOST_PP_ITERATION_2 18 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 19 && BOOST_PP_ITERATION_FINISH_2 >= 19 +# define BOOST_PP_ITERATION_2 19 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 20 && BOOST_PP_ITERATION_FINISH_2 >= 20 +# define BOOST_PP_ITERATION_2 20 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 21 && BOOST_PP_ITERATION_FINISH_2 >= 21 +# define BOOST_PP_ITERATION_2 21 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 22 && BOOST_PP_ITERATION_FINISH_2 >= 22 +# define BOOST_PP_ITERATION_2 22 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 23 && BOOST_PP_ITERATION_FINISH_2 >= 23 +# define BOOST_PP_ITERATION_2 23 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 24 && BOOST_PP_ITERATION_FINISH_2 >= 24 +# define BOOST_PP_ITERATION_2 24 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 25 && BOOST_PP_ITERATION_FINISH_2 >= 25 +# define BOOST_PP_ITERATION_2 25 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 26 && BOOST_PP_ITERATION_FINISH_2 >= 26 +# define BOOST_PP_ITERATION_2 26 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 27 && BOOST_PP_ITERATION_FINISH_2 >= 27 +# define BOOST_PP_ITERATION_2 27 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 28 && BOOST_PP_ITERATION_FINISH_2 >= 28 +# define BOOST_PP_ITERATION_2 28 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 29 && BOOST_PP_ITERATION_FINISH_2 >= 29 +# define BOOST_PP_ITERATION_2 29 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 30 && BOOST_PP_ITERATION_FINISH_2 >= 30 +# define BOOST_PP_ITERATION_2 30 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 31 && BOOST_PP_ITERATION_FINISH_2 >= 31 +# define BOOST_PP_ITERATION_2 31 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 32 && BOOST_PP_ITERATION_FINISH_2 >= 32 +# define BOOST_PP_ITERATION_2 32 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 33 && BOOST_PP_ITERATION_FINISH_2 >= 33 +# define BOOST_PP_ITERATION_2 33 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 34 && BOOST_PP_ITERATION_FINISH_2 >= 34 +# define BOOST_PP_ITERATION_2 34 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 35 && BOOST_PP_ITERATION_FINISH_2 >= 35 +# define BOOST_PP_ITERATION_2 35 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 36 && BOOST_PP_ITERATION_FINISH_2 >= 36 +# define BOOST_PP_ITERATION_2 36 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 37 && BOOST_PP_ITERATION_FINISH_2 >= 37 +# define BOOST_PP_ITERATION_2 37 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 38 && BOOST_PP_ITERATION_FINISH_2 >= 38 +# define BOOST_PP_ITERATION_2 38 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 39 && BOOST_PP_ITERATION_FINISH_2 >= 39 +# define BOOST_PP_ITERATION_2 39 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 40 && BOOST_PP_ITERATION_FINISH_2 >= 40 +# define BOOST_PP_ITERATION_2 40 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 41 && BOOST_PP_ITERATION_FINISH_2 >= 41 +# define BOOST_PP_ITERATION_2 41 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 42 && BOOST_PP_ITERATION_FINISH_2 >= 42 +# define BOOST_PP_ITERATION_2 42 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 43 && BOOST_PP_ITERATION_FINISH_2 >= 43 +# define BOOST_PP_ITERATION_2 43 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 44 && BOOST_PP_ITERATION_FINISH_2 >= 44 +# define BOOST_PP_ITERATION_2 44 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 45 && BOOST_PP_ITERATION_FINISH_2 >= 45 +# define BOOST_PP_ITERATION_2 45 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 46 && BOOST_PP_ITERATION_FINISH_2 >= 46 +# define BOOST_PP_ITERATION_2 46 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 47 && BOOST_PP_ITERATION_FINISH_2 >= 47 +# define BOOST_PP_ITERATION_2 47 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 48 && BOOST_PP_ITERATION_FINISH_2 >= 48 +# define BOOST_PP_ITERATION_2 48 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 49 && BOOST_PP_ITERATION_FINISH_2 >= 49 +# define BOOST_PP_ITERATION_2 49 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 50 && BOOST_PP_ITERATION_FINISH_2 >= 50 +# define BOOST_PP_ITERATION_2 50 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 51 && BOOST_PP_ITERATION_FINISH_2 >= 51 +# define BOOST_PP_ITERATION_2 51 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 52 && BOOST_PP_ITERATION_FINISH_2 >= 52 +# define BOOST_PP_ITERATION_2 52 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 53 && BOOST_PP_ITERATION_FINISH_2 >= 53 +# define BOOST_PP_ITERATION_2 53 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 54 && BOOST_PP_ITERATION_FINISH_2 >= 54 +# define BOOST_PP_ITERATION_2 54 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 55 && BOOST_PP_ITERATION_FINISH_2 >= 55 +# define BOOST_PP_ITERATION_2 55 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 56 && BOOST_PP_ITERATION_FINISH_2 >= 56 +# define BOOST_PP_ITERATION_2 56 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 57 && BOOST_PP_ITERATION_FINISH_2 >= 57 +# define BOOST_PP_ITERATION_2 57 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 58 && BOOST_PP_ITERATION_FINISH_2 >= 58 +# define BOOST_PP_ITERATION_2 58 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 59 && BOOST_PP_ITERATION_FINISH_2 >= 59 +# define BOOST_PP_ITERATION_2 59 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 60 && BOOST_PP_ITERATION_FINISH_2 >= 60 +# define BOOST_PP_ITERATION_2 60 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 61 && BOOST_PP_ITERATION_FINISH_2 >= 61 +# define BOOST_PP_ITERATION_2 61 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 62 && BOOST_PP_ITERATION_FINISH_2 >= 62 +# define BOOST_PP_ITERATION_2 62 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 63 && BOOST_PP_ITERATION_FINISH_2 >= 63 +# define BOOST_PP_ITERATION_2 63 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 64 && BOOST_PP_ITERATION_FINISH_2 >= 64 +# define BOOST_PP_ITERATION_2 64 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 65 && BOOST_PP_ITERATION_FINISH_2 >= 65 +# define BOOST_PP_ITERATION_2 65 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 66 && BOOST_PP_ITERATION_FINISH_2 >= 66 +# define BOOST_PP_ITERATION_2 66 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 67 && BOOST_PP_ITERATION_FINISH_2 >= 67 +# define BOOST_PP_ITERATION_2 67 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 68 && BOOST_PP_ITERATION_FINISH_2 >= 68 +# define BOOST_PP_ITERATION_2 68 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 69 && BOOST_PP_ITERATION_FINISH_2 >= 69 +# define BOOST_PP_ITERATION_2 69 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 70 && BOOST_PP_ITERATION_FINISH_2 >= 70 +# define BOOST_PP_ITERATION_2 70 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 71 && BOOST_PP_ITERATION_FINISH_2 >= 71 +# define BOOST_PP_ITERATION_2 71 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 72 && BOOST_PP_ITERATION_FINISH_2 >= 72 +# define BOOST_PP_ITERATION_2 72 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 73 && BOOST_PP_ITERATION_FINISH_2 >= 73 +# define BOOST_PP_ITERATION_2 73 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 74 && BOOST_PP_ITERATION_FINISH_2 >= 74 +# define BOOST_PP_ITERATION_2 74 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 75 && BOOST_PP_ITERATION_FINISH_2 >= 75 +# define BOOST_PP_ITERATION_2 75 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 76 && BOOST_PP_ITERATION_FINISH_2 >= 76 +# define BOOST_PP_ITERATION_2 76 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 77 && BOOST_PP_ITERATION_FINISH_2 >= 77 +# define BOOST_PP_ITERATION_2 77 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 78 && BOOST_PP_ITERATION_FINISH_2 >= 78 +# define BOOST_PP_ITERATION_2 78 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 79 && BOOST_PP_ITERATION_FINISH_2 >= 79 +# define BOOST_PP_ITERATION_2 79 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 80 && BOOST_PP_ITERATION_FINISH_2 >= 80 +# define BOOST_PP_ITERATION_2 80 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 81 && BOOST_PP_ITERATION_FINISH_2 >= 81 +# define BOOST_PP_ITERATION_2 81 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 82 && BOOST_PP_ITERATION_FINISH_2 >= 82 +# define BOOST_PP_ITERATION_2 82 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 83 && BOOST_PP_ITERATION_FINISH_2 >= 83 +# define BOOST_PP_ITERATION_2 83 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 84 && BOOST_PP_ITERATION_FINISH_2 >= 84 +# define BOOST_PP_ITERATION_2 84 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 85 && BOOST_PP_ITERATION_FINISH_2 >= 85 +# define BOOST_PP_ITERATION_2 85 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 86 && BOOST_PP_ITERATION_FINISH_2 >= 86 +# define BOOST_PP_ITERATION_2 86 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 87 && BOOST_PP_ITERATION_FINISH_2 >= 87 +# define BOOST_PP_ITERATION_2 87 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 88 && BOOST_PP_ITERATION_FINISH_2 >= 88 +# define BOOST_PP_ITERATION_2 88 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 89 && BOOST_PP_ITERATION_FINISH_2 >= 89 +# define BOOST_PP_ITERATION_2 89 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 90 && BOOST_PP_ITERATION_FINISH_2 >= 90 +# define BOOST_PP_ITERATION_2 90 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 91 && BOOST_PP_ITERATION_FINISH_2 >= 91 +# define BOOST_PP_ITERATION_2 91 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 92 && BOOST_PP_ITERATION_FINISH_2 >= 92 +# define BOOST_PP_ITERATION_2 92 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 93 && BOOST_PP_ITERATION_FINISH_2 >= 93 +# define BOOST_PP_ITERATION_2 93 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 94 && BOOST_PP_ITERATION_FINISH_2 >= 94 +# define BOOST_PP_ITERATION_2 94 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 95 && BOOST_PP_ITERATION_FINISH_2 >= 95 +# define BOOST_PP_ITERATION_2 95 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 96 && BOOST_PP_ITERATION_FINISH_2 >= 96 +# define BOOST_PP_ITERATION_2 96 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 97 && BOOST_PP_ITERATION_FINISH_2 >= 97 +# define BOOST_PP_ITERATION_2 97 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 98 && BOOST_PP_ITERATION_FINISH_2 >= 98 +# define BOOST_PP_ITERATION_2 98 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 99 && BOOST_PP_ITERATION_FINISH_2 >= 99 +# define BOOST_PP_ITERATION_2 99 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 100 && BOOST_PP_ITERATION_FINISH_2 >= 100 +# define BOOST_PP_ITERATION_2 100 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 101 && BOOST_PP_ITERATION_FINISH_2 >= 101 +# define BOOST_PP_ITERATION_2 101 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 102 && BOOST_PP_ITERATION_FINISH_2 >= 102 +# define BOOST_PP_ITERATION_2 102 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 103 && BOOST_PP_ITERATION_FINISH_2 >= 103 +# define BOOST_PP_ITERATION_2 103 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 104 && BOOST_PP_ITERATION_FINISH_2 >= 104 +# define BOOST_PP_ITERATION_2 104 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 105 && BOOST_PP_ITERATION_FINISH_2 >= 105 +# define BOOST_PP_ITERATION_2 105 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 106 && BOOST_PP_ITERATION_FINISH_2 >= 106 +# define BOOST_PP_ITERATION_2 106 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 107 && BOOST_PP_ITERATION_FINISH_2 >= 107 +# define BOOST_PP_ITERATION_2 107 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 108 && BOOST_PP_ITERATION_FINISH_2 >= 108 +# define BOOST_PP_ITERATION_2 108 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 109 && BOOST_PP_ITERATION_FINISH_2 >= 109 +# define BOOST_PP_ITERATION_2 109 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 110 && BOOST_PP_ITERATION_FINISH_2 >= 110 +# define BOOST_PP_ITERATION_2 110 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 111 && BOOST_PP_ITERATION_FINISH_2 >= 111 +# define BOOST_PP_ITERATION_2 111 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 112 && BOOST_PP_ITERATION_FINISH_2 >= 112 +# define BOOST_PP_ITERATION_2 112 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 113 && BOOST_PP_ITERATION_FINISH_2 >= 113 +# define BOOST_PP_ITERATION_2 113 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 114 && BOOST_PP_ITERATION_FINISH_2 >= 114 +# define BOOST_PP_ITERATION_2 114 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 115 && BOOST_PP_ITERATION_FINISH_2 >= 115 +# define BOOST_PP_ITERATION_2 115 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 116 && BOOST_PP_ITERATION_FINISH_2 >= 116 +# define BOOST_PP_ITERATION_2 116 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 117 && BOOST_PP_ITERATION_FINISH_2 >= 117 +# define BOOST_PP_ITERATION_2 117 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 118 && BOOST_PP_ITERATION_FINISH_2 >= 118 +# define BOOST_PP_ITERATION_2 118 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 119 && BOOST_PP_ITERATION_FINISH_2 >= 119 +# define BOOST_PP_ITERATION_2 119 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 120 && BOOST_PP_ITERATION_FINISH_2 >= 120 +# define BOOST_PP_ITERATION_2 120 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 121 && BOOST_PP_ITERATION_FINISH_2 >= 121 +# define BOOST_PP_ITERATION_2 121 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 122 && BOOST_PP_ITERATION_FINISH_2 >= 122 +# define BOOST_PP_ITERATION_2 122 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 123 && BOOST_PP_ITERATION_FINISH_2 >= 123 +# define BOOST_PP_ITERATION_2 123 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 124 && BOOST_PP_ITERATION_FINISH_2 >= 124 +# define BOOST_PP_ITERATION_2 124 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 125 && BOOST_PP_ITERATION_FINISH_2 >= 125 +# define BOOST_PP_ITERATION_2 125 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 126 && BOOST_PP_ITERATION_FINISH_2 >= 126 +# define BOOST_PP_ITERATION_2 126 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 127 && BOOST_PP_ITERATION_FINISH_2 >= 127 +# define BOOST_PP_ITERATION_2 127 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 128 && BOOST_PP_ITERATION_FINISH_2 >= 128 +# define BOOST_PP_ITERATION_2 128 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 129 && BOOST_PP_ITERATION_FINISH_2 >= 129 +# define BOOST_PP_ITERATION_2 129 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 130 && BOOST_PP_ITERATION_FINISH_2 >= 130 +# define BOOST_PP_ITERATION_2 130 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 131 && BOOST_PP_ITERATION_FINISH_2 >= 131 +# define BOOST_PP_ITERATION_2 131 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 132 && BOOST_PP_ITERATION_FINISH_2 >= 132 +# define BOOST_PP_ITERATION_2 132 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 133 && BOOST_PP_ITERATION_FINISH_2 >= 133 +# define BOOST_PP_ITERATION_2 133 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 134 && BOOST_PP_ITERATION_FINISH_2 >= 134 +# define BOOST_PP_ITERATION_2 134 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 135 && BOOST_PP_ITERATION_FINISH_2 >= 135 +# define BOOST_PP_ITERATION_2 135 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 136 && BOOST_PP_ITERATION_FINISH_2 >= 136 +# define BOOST_PP_ITERATION_2 136 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 137 && BOOST_PP_ITERATION_FINISH_2 >= 137 +# define BOOST_PP_ITERATION_2 137 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 138 && BOOST_PP_ITERATION_FINISH_2 >= 138 +# define BOOST_PP_ITERATION_2 138 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 139 && BOOST_PP_ITERATION_FINISH_2 >= 139 +# define BOOST_PP_ITERATION_2 139 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 140 && BOOST_PP_ITERATION_FINISH_2 >= 140 +# define BOOST_PP_ITERATION_2 140 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 141 && BOOST_PP_ITERATION_FINISH_2 >= 141 +# define BOOST_PP_ITERATION_2 141 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 142 && BOOST_PP_ITERATION_FINISH_2 >= 142 +# define BOOST_PP_ITERATION_2 142 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 143 && BOOST_PP_ITERATION_FINISH_2 >= 143 +# define BOOST_PP_ITERATION_2 143 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 144 && BOOST_PP_ITERATION_FINISH_2 >= 144 +# define BOOST_PP_ITERATION_2 144 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 145 && BOOST_PP_ITERATION_FINISH_2 >= 145 +# define BOOST_PP_ITERATION_2 145 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 146 && BOOST_PP_ITERATION_FINISH_2 >= 146 +# define BOOST_PP_ITERATION_2 146 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 147 && BOOST_PP_ITERATION_FINISH_2 >= 147 +# define BOOST_PP_ITERATION_2 147 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 148 && BOOST_PP_ITERATION_FINISH_2 >= 148 +# define BOOST_PP_ITERATION_2 148 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 149 && BOOST_PP_ITERATION_FINISH_2 >= 149 +# define BOOST_PP_ITERATION_2 149 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 150 && BOOST_PP_ITERATION_FINISH_2 >= 150 +# define BOOST_PP_ITERATION_2 150 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 151 && BOOST_PP_ITERATION_FINISH_2 >= 151 +# define BOOST_PP_ITERATION_2 151 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 152 && BOOST_PP_ITERATION_FINISH_2 >= 152 +# define BOOST_PP_ITERATION_2 152 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 153 && BOOST_PP_ITERATION_FINISH_2 >= 153 +# define BOOST_PP_ITERATION_2 153 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 154 && BOOST_PP_ITERATION_FINISH_2 >= 154 +# define BOOST_PP_ITERATION_2 154 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 155 && BOOST_PP_ITERATION_FINISH_2 >= 155 +# define BOOST_PP_ITERATION_2 155 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 156 && BOOST_PP_ITERATION_FINISH_2 >= 156 +# define BOOST_PP_ITERATION_2 156 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 157 && BOOST_PP_ITERATION_FINISH_2 >= 157 +# define BOOST_PP_ITERATION_2 157 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 158 && BOOST_PP_ITERATION_FINISH_2 >= 158 +# define BOOST_PP_ITERATION_2 158 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 159 && BOOST_PP_ITERATION_FINISH_2 >= 159 +# define BOOST_PP_ITERATION_2 159 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 160 && BOOST_PP_ITERATION_FINISH_2 >= 160 +# define BOOST_PP_ITERATION_2 160 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 161 && BOOST_PP_ITERATION_FINISH_2 >= 161 +# define BOOST_PP_ITERATION_2 161 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 162 && BOOST_PP_ITERATION_FINISH_2 >= 162 +# define BOOST_PP_ITERATION_2 162 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 163 && BOOST_PP_ITERATION_FINISH_2 >= 163 +# define BOOST_PP_ITERATION_2 163 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 164 && BOOST_PP_ITERATION_FINISH_2 >= 164 +# define BOOST_PP_ITERATION_2 164 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 165 && BOOST_PP_ITERATION_FINISH_2 >= 165 +# define BOOST_PP_ITERATION_2 165 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 166 && BOOST_PP_ITERATION_FINISH_2 >= 166 +# define BOOST_PP_ITERATION_2 166 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 167 && BOOST_PP_ITERATION_FINISH_2 >= 167 +# define BOOST_PP_ITERATION_2 167 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 168 && BOOST_PP_ITERATION_FINISH_2 >= 168 +# define BOOST_PP_ITERATION_2 168 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 169 && BOOST_PP_ITERATION_FINISH_2 >= 169 +# define BOOST_PP_ITERATION_2 169 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 170 && BOOST_PP_ITERATION_FINISH_2 >= 170 +# define BOOST_PP_ITERATION_2 170 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 171 && BOOST_PP_ITERATION_FINISH_2 >= 171 +# define BOOST_PP_ITERATION_2 171 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 172 && BOOST_PP_ITERATION_FINISH_2 >= 172 +# define BOOST_PP_ITERATION_2 172 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 173 && BOOST_PP_ITERATION_FINISH_2 >= 173 +# define BOOST_PP_ITERATION_2 173 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 174 && BOOST_PP_ITERATION_FINISH_2 >= 174 +# define BOOST_PP_ITERATION_2 174 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 175 && BOOST_PP_ITERATION_FINISH_2 >= 175 +# define BOOST_PP_ITERATION_2 175 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 176 && BOOST_PP_ITERATION_FINISH_2 >= 176 +# define BOOST_PP_ITERATION_2 176 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 177 && BOOST_PP_ITERATION_FINISH_2 >= 177 +# define BOOST_PP_ITERATION_2 177 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 178 && BOOST_PP_ITERATION_FINISH_2 >= 178 +# define BOOST_PP_ITERATION_2 178 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 179 && BOOST_PP_ITERATION_FINISH_2 >= 179 +# define BOOST_PP_ITERATION_2 179 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 180 && BOOST_PP_ITERATION_FINISH_2 >= 180 +# define BOOST_PP_ITERATION_2 180 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 181 && BOOST_PP_ITERATION_FINISH_2 >= 181 +# define BOOST_PP_ITERATION_2 181 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 182 && BOOST_PP_ITERATION_FINISH_2 >= 182 +# define BOOST_PP_ITERATION_2 182 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 183 && BOOST_PP_ITERATION_FINISH_2 >= 183 +# define BOOST_PP_ITERATION_2 183 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 184 && BOOST_PP_ITERATION_FINISH_2 >= 184 +# define BOOST_PP_ITERATION_2 184 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 185 && BOOST_PP_ITERATION_FINISH_2 >= 185 +# define BOOST_PP_ITERATION_2 185 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 186 && BOOST_PP_ITERATION_FINISH_2 >= 186 +# define BOOST_PP_ITERATION_2 186 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 187 && BOOST_PP_ITERATION_FINISH_2 >= 187 +# define BOOST_PP_ITERATION_2 187 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 188 && BOOST_PP_ITERATION_FINISH_2 >= 188 +# define BOOST_PP_ITERATION_2 188 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 189 && BOOST_PP_ITERATION_FINISH_2 >= 189 +# define BOOST_PP_ITERATION_2 189 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 190 && BOOST_PP_ITERATION_FINISH_2 >= 190 +# define BOOST_PP_ITERATION_2 190 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 191 && BOOST_PP_ITERATION_FINISH_2 >= 191 +# define BOOST_PP_ITERATION_2 191 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 192 && BOOST_PP_ITERATION_FINISH_2 >= 192 +# define BOOST_PP_ITERATION_2 192 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 193 && BOOST_PP_ITERATION_FINISH_2 >= 193 +# define BOOST_PP_ITERATION_2 193 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 194 && BOOST_PP_ITERATION_FINISH_2 >= 194 +# define BOOST_PP_ITERATION_2 194 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 195 && BOOST_PP_ITERATION_FINISH_2 >= 195 +# define BOOST_PP_ITERATION_2 195 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 196 && BOOST_PP_ITERATION_FINISH_2 >= 196 +# define BOOST_PP_ITERATION_2 196 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 197 && BOOST_PP_ITERATION_FINISH_2 >= 197 +# define BOOST_PP_ITERATION_2 197 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 198 && BOOST_PP_ITERATION_FINISH_2 >= 198 +# define BOOST_PP_ITERATION_2 198 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 199 && BOOST_PP_ITERATION_FINISH_2 >= 199 +# define BOOST_PP_ITERATION_2 199 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 200 && BOOST_PP_ITERATION_FINISH_2 >= 200 +# define BOOST_PP_ITERATION_2 200 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 201 && BOOST_PP_ITERATION_FINISH_2 >= 201 +# define BOOST_PP_ITERATION_2 201 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 202 && BOOST_PP_ITERATION_FINISH_2 >= 202 +# define BOOST_PP_ITERATION_2 202 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 203 && BOOST_PP_ITERATION_FINISH_2 >= 203 +# define BOOST_PP_ITERATION_2 203 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 204 && BOOST_PP_ITERATION_FINISH_2 >= 204 +# define BOOST_PP_ITERATION_2 204 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 205 && BOOST_PP_ITERATION_FINISH_2 >= 205 +# define BOOST_PP_ITERATION_2 205 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 206 && BOOST_PP_ITERATION_FINISH_2 >= 206 +# define BOOST_PP_ITERATION_2 206 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 207 && BOOST_PP_ITERATION_FINISH_2 >= 207 +# define BOOST_PP_ITERATION_2 207 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 208 && BOOST_PP_ITERATION_FINISH_2 >= 208 +# define BOOST_PP_ITERATION_2 208 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 209 && BOOST_PP_ITERATION_FINISH_2 >= 209 +# define BOOST_PP_ITERATION_2 209 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 210 && BOOST_PP_ITERATION_FINISH_2 >= 210 +# define BOOST_PP_ITERATION_2 210 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 211 && BOOST_PP_ITERATION_FINISH_2 >= 211 +# define BOOST_PP_ITERATION_2 211 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 212 && BOOST_PP_ITERATION_FINISH_2 >= 212 +# define BOOST_PP_ITERATION_2 212 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 213 && BOOST_PP_ITERATION_FINISH_2 >= 213 +# define BOOST_PP_ITERATION_2 213 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 214 && BOOST_PP_ITERATION_FINISH_2 >= 214 +# define BOOST_PP_ITERATION_2 214 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 215 && BOOST_PP_ITERATION_FINISH_2 >= 215 +# define BOOST_PP_ITERATION_2 215 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 216 && BOOST_PP_ITERATION_FINISH_2 >= 216 +# define BOOST_PP_ITERATION_2 216 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 217 && BOOST_PP_ITERATION_FINISH_2 >= 217 +# define BOOST_PP_ITERATION_2 217 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 218 && BOOST_PP_ITERATION_FINISH_2 >= 218 +# define BOOST_PP_ITERATION_2 218 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 219 && BOOST_PP_ITERATION_FINISH_2 >= 219 +# define BOOST_PP_ITERATION_2 219 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 220 && BOOST_PP_ITERATION_FINISH_2 >= 220 +# define BOOST_PP_ITERATION_2 220 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 221 && BOOST_PP_ITERATION_FINISH_2 >= 221 +# define BOOST_PP_ITERATION_2 221 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 222 && BOOST_PP_ITERATION_FINISH_2 >= 222 +# define BOOST_PP_ITERATION_2 222 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 223 && BOOST_PP_ITERATION_FINISH_2 >= 223 +# define BOOST_PP_ITERATION_2 223 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 224 && BOOST_PP_ITERATION_FINISH_2 >= 224 +# define BOOST_PP_ITERATION_2 224 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 225 && BOOST_PP_ITERATION_FINISH_2 >= 225 +# define BOOST_PP_ITERATION_2 225 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 226 && BOOST_PP_ITERATION_FINISH_2 >= 226 +# define BOOST_PP_ITERATION_2 226 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 227 && BOOST_PP_ITERATION_FINISH_2 >= 227 +# define BOOST_PP_ITERATION_2 227 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 228 && BOOST_PP_ITERATION_FINISH_2 >= 228 +# define BOOST_PP_ITERATION_2 228 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 229 && BOOST_PP_ITERATION_FINISH_2 >= 229 +# define BOOST_PP_ITERATION_2 229 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 230 && BOOST_PP_ITERATION_FINISH_2 >= 230 +# define BOOST_PP_ITERATION_2 230 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 231 && BOOST_PP_ITERATION_FINISH_2 >= 231 +# define BOOST_PP_ITERATION_2 231 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 232 && BOOST_PP_ITERATION_FINISH_2 >= 232 +# define BOOST_PP_ITERATION_2 232 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 233 && BOOST_PP_ITERATION_FINISH_2 >= 233 +# define BOOST_PP_ITERATION_2 233 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 234 && BOOST_PP_ITERATION_FINISH_2 >= 234 +# define BOOST_PP_ITERATION_2 234 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 235 && BOOST_PP_ITERATION_FINISH_2 >= 235 +# define BOOST_PP_ITERATION_2 235 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 236 && BOOST_PP_ITERATION_FINISH_2 >= 236 +# define BOOST_PP_ITERATION_2 236 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 237 && BOOST_PP_ITERATION_FINISH_2 >= 237 +# define BOOST_PP_ITERATION_2 237 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 238 && BOOST_PP_ITERATION_FINISH_2 >= 238 +# define BOOST_PP_ITERATION_2 238 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 239 && BOOST_PP_ITERATION_FINISH_2 >= 239 +# define BOOST_PP_ITERATION_2 239 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 240 && BOOST_PP_ITERATION_FINISH_2 >= 240 +# define BOOST_PP_ITERATION_2 240 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 241 && BOOST_PP_ITERATION_FINISH_2 >= 241 +# define BOOST_PP_ITERATION_2 241 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 242 && BOOST_PP_ITERATION_FINISH_2 >= 242 +# define BOOST_PP_ITERATION_2 242 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 243 && BOOST_PP_ITERATION_FINISH_2 >= 243 +# define BOOST_PP_ITERATION_2 243 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 244 && BOOST_PP_ITERATION_FINISH_2 >= 244 +# define BOOST_PP_ITERATION_2 244 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 245 && BOOST_PP_ITERATION_FINISH_2 >= 245 +# define BOOST_PP_ITERATION_2 245 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 246 && BOOST_PP_ITERATION_FINISH_2 >= 246 +# define BOOST_PP_ITERATION_2 246 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 247 && BOOST_PP_ITERATION_FINISH_2 >= 247 +# define BOOST_PP_ITERATION_2 247 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 248 && BOOST_PP_ITERATION_FINISH_2 >= 248 +# define BOOST_PP_ITERATION_2 248 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 249 && BOOST_PP_ITERATION_FINISH_2 >= 249 +# define BOOST_PP_ITERATION_2 249 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 250 && BOOST_PP_ITERATION_FINISH_2 >= 250 +# define BOOST_PP_ITERATION_2 250 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 251 && BOOST_PP_ITERATION_FINISH_2 >= 251 +# define BOOST_PP_ITERATION_2 251 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 252 && BOOST_PP_ITERATION_FINISH_2 >= 252 +# define BOOST_PP_ITERATION_2 252 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 253 && BOOST_PP_ITERATION_FINISH_2 >= 253 +# define BOOST_PP_ITERATION_2 253 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 254 && BOOST_PP_ITERATION_FINISH_2 >= 254 +# define BOOST_PP_ITERATION_2 254 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 255 && BOOST_PP_ITERATION_FINISH_2 >= 255 +# define BOOST_PP_ITERATION_2 255 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_START_2 <= 256 && BOOST_PP_ITERATION_FINISH_2 >= 256 +# define BOOST_PP_ITERATION_2 256 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 1 +# +# undef BOOST_PP_ITERATION_START_2 +# undef BOOST_PP_ITERATION_FINISH_2 +# undef BOOST_PP_FILENAME_2 +# +# undef BOOST_PP_ITERATION_FLAGS_2 +# undef BOOST_PP_ITERATION_PARAMS_2 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward3.hpp new file mode 100644 index 00000000..b64dc781 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward3.hpp @@ -0,0 +1,1338 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if defined(BOOST_PP_ITERATION_LIMITS) +# if !defined(BOOST_PP_FILENAME_3) +# error BOOST_PP_ERROR: depth #3 filename is not defined +# endif +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_ITERATION_FLAGS_3 0 +# undef BOOST_PP_ITERATION_LIMITS +# elif defined(BOOST_PP_ITERATION_PARAMS_3) +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_3) +# include +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_3) +# include +# define BOOST_PP_FILENAME_3 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_3) +# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_3) >= 4 +# define BOOST_PP_ITERATION_FLAGS_3 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_3) +# else +# define BOOST_PP_ITERATION_FLAGS_3 0 +# endif +# else +# error BOOST_PP_ERROR: depth #3 iteration boundaries or filename not defined +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 3 +# +# if (BOOST_PP_ITERATION_START_3) > (BOOST_PP_ITERATION_FINISH_3) +# include +# else +# if BOOST_PP_ITERATION_START_3 <= 0 && BOOST_PP_ITERATION_FINISH_3 >= 0 +# define BOOST_PP_ITERATION_3 0 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 1 && BOOST_PP_ITERATION_FINISH_3 >= 1 +# define BOOST_PP_ITERATION_3 1 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 2 && BOOST_PP_ITERATION_FINISH_3 >= 2 +# define BOOST_PP_ITERATION_3 2 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 3 && BOOST_PP_ITERATION_FINISH_3 >= 3 +# define BOOST_PP_ITERATION_3 3 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 4 && BOOST_PP_ITERATION_FINISH_3 >= 4 +# define BOOST_PP_ITERATION_3 4 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 5 && BOOST_PP_ITERATION_FINISH_3 >= 5 +# define BOOST_PP_ITERATION_3 5 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 6 && BOOST_PP_ITERATION_FINISH_3 >= 6 +# define BOOST_PP_ITERATION_3 6 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 7 && BOOST_PP_ITERATION_FINISH_3 >= 7 +# define BOOST_PP_ITERATION_3 7 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 8 && BOOST_PP_ITERATION_FINISH_3 >= 8 +# define BOOST_PP_ITERATION_3 8 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 9 && BOOST_PP_ITERATION_FINISH_3 >= 9 +# define BOOST_PP_ITERATION_3 9 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 10 && BOOST_PP_ITERATION_FINISH_3 >= 10 +# define BOOST_PP_ITERATION_3 10 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 11 && BOOST_PP_ITERATION_FINISH_3 >= 11 +# define BOOST_PP_ITERATION_3 11 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 12 && BOOST_PP_ITERATION_FINISH_3 >= 12 +# define BOOST_PP_ITERATION_3 12 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 13 && BOOST_PP_ITERATION_FINISH_3 >= 13 +# define BOOST_PP_ITERATION_3 13 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 14 && BOOST_PP_ITERATION_FINISH_3 >= 14 +# define BOOST_PP_ITERATION_3 14 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 15 && BOOST_PP_ITERATION_FINISH_3 >= 15 +# define BOOST_PP_ITERATION_3 15 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 16 && BOOST_PP_ITERATION_FINISH_3 >= 16 +# define BOOST_PP_ITERATION_3 16 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 17 && BOOST_PP_ITERATION_FINISH_3 >= 17 +# define BOOST_PP_ITERATION_3 17 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 18 && BOOST_PP_ITERATION_FINISH_3 >= 18 +# define BOOST_PP_ITERATION_3 18 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 19 && BOOST_PP_ITERATION_FINISH_3 >= 19 +# define BOOST_PP_ITERATION_3 19 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 20 && BOOST_PP_ITERATION_FINISH_3 >= 20 +# define BOOST_PP_ITERATION_3 20 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 21 && BOOST_PP_ITERATION_FINISH_3 >= 21 +# define BOOST_PP_ITERATION_3 21 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 22 && BOOST_PP_ITERATION_FINISH_3 >= 22 +# define BOOST_PP_ITERATION_3 22 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 23 && BOOST_PP_ITERATION_FINISH_3 >= 23 +# define BOOST_PP_ITERATION_3 23 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 24 && BOOST_PP_ITERATION_FINISH_3 >= 24 +# define BOOST_PP_ITERATION_3 24 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 25 && BOOST_PP_ITERATION_FINISH_3 >= 25 +# define BOOST_PP_ITERATION_3 25 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 26 && BOOST_PP_ITERATION_FINISH_3 >= 26 +# define BOOST_PP_ITERATION_3 26 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 27 && BOOST_PP_ITERATION_FINISH_3 >= 27 +# define BOOST_PP_ITERATION_3 27 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 28 && BOOST_PP_ITERATION_FINISH_3 >= 28 +# define BOOST_PP_ITERATION_3 28 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 29 && BOOST_PP_ITERATION_FINISH_3 >= 29 +# define BOOST_PP_ITERATION_3 29 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 30 && BOOST_PP_ITERATION_FINISH_3 >= 30 +# define BOOST_PP_ITERATION_3 30 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 31 && BOOST_PP_ITERATION_FINISH_3 >= 31 +# define BOOST_PP_ITERATION_3 31 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 32 && BOOST_PP_ITERATION_FINISH_3 >= 32 +# define BOOST_PP_ITERATION_3 32 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 33 && BOOST_PP_ITERATION_FINISH_3 >= 33 +# define BOOST_PP_ITERATION_3 33 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 34 && BOOST_PP_ITERATION_FINISH_3 >= 34 +# define BOOST_PP_ITERATION_3 34 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 35 && BOOST_PP_ITERATION_FINISH_3 >= 35 +# define BOOST_PP_ITERATION_3 35 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 36 && BOOST_PP_ITERATION_FINISH_3 >= 36 +# define BOOST_PP_ITERATION_3 36 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 37 && BOOST_PP_ITERATION_FINISH_3 >= 37 +# define BOOST_PP_ITERATION_3 37 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 38 && BOOST_PP_ITERATION_FINISH_3 >= 38 +# define BOOST_PP_ITERATION_3 38 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 39 && BOOST_PP_ITERATION_FINISH_3 >= 39 +# define BOOST_PP_ITERATION_3 39 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 40 && BOOST_PP_ITERATION_FINISH_3 >= 40 +# define BOOST_PP_ITERATION_3 40 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 41 && BOOST_PP_ITERATION_FINISH_3 >= 41 +# define BOOST_PP_ITERATION_3 41 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 42 && BOOST_PP_ITERATION_FINISH_3 >= 42 +# define BOOST_PP_ITERATION_3 42 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 43 && BOOST_PP_ITERATION_FINISH_3 >= 43 +# define BOOST_PP_ITERATION_3 43 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 44 && BOOST_PP_ITERATION_FINISH_3 >= 44 +# define BOOST_PP_ITERATION_3 44 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 45 && BOOST_PP_ITERATION_FINISH_3 >= 45 +# define BOOST_PP_ITERATION_3 45 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 46 && BOOST_PP_ITERATION_FINISH_3 >= 46 +# define BOOST_PP_ITERATION_3 46 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 47 && BOOST_PP_ITERATION_FINISH_3 >= 47 +# define BOOST_PP_ITERATION_3 47 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 48 && BOOST_PP_ITERATION_FINISH_3 >= 48 +# define BOOST_PP_ITERATION_3 48 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 49 && BOOST_PP_ITERATION_FINISH_3 >= 49 +# define BOOST_PP_ITERATION_3 49 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 50 && BOOST_PP_ITERATION_FINISH_3 >= 50 +# define BOOST_PP_ITERATION_3 50 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 51 && BOOST_PP_ITERATION_FINISH_3 >= 51 +# define BOOST_PP_ITERATION_3 51 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 52 && BOOST_PP_ITERATION_FINISH_3 >= 52 +# define BOOST_PP_ITERATION_3 52 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 53 && BOOST_PP_ITERATION_FINISH_3 >= 53 +# define BOOST_PP_ITERATION_3 53 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 54 && BOOST_PP_ITERATION_FINISH_3 >= 54 +# define BOOST_PP_ITERATION_3 54 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 55 && BOOST_PP_ITERATION_FINISH_3 >= 55 +# define BOOST_PP_ITERATION_3 55 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 56 && BOOST_PP_ITERATION_FINISH_3 >= 56 +# define BOOST_PP_ITERATION_3 56 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 57 && BOOST_PP_ITERATION_FINISH_3 >= 57 +# define BOOST_PP_ITERATION_3 57 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 58 && BOOST_PP_ITERATION_FINISH_3 >= 58 +# define BOOST_PP_ITERATION_3 58 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 59 && BOOST_PP_ITERATION_FINISH_3 >= 59 +# define BOOST_PP_ITERATION_3 59 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 60 && BOOST_PP_ITERATION_FINISH_3 >= 60 +# define BOOST_PP_ITERATION_3 60 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 61 && BOOST_PP_ITERATION_FINISH_3 >= 61 +# define BOOST_PP_ITERATION_3 61 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 62 && BOOST_PP_ITERATION_FINISH_3 >= 62 +# define BOOST_PP_ITERATION_3 62 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 63 && BOOST_PP_ITERATION_FINISH_3 >= 63 +# define BOOST_PP_ITERATION_3 63 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 64 && BOOST_PP_ITERATION_FINISH_3 >= 64 +# define BOOST_PP_ITERATION_3 64 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 65 && BOOST_PP_ITERATION_FINISH_3 >= 65 +# define BOOST_PP_ITERATION_3 65 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 66 && BOOST_PP_ITERATION_FINISH_3 >= 66 +# define BOOST_PP_ITERATION_3 66 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 67 && BOOST_PP_ITERATION_FINISH_3 >= 67 +# define BOOST_PP_ITERATION_3 67 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 68 && BOOST_PP_ITERATION_FINISH_3 >= 68 +# define BOOST_PP_ITERATION_3 68 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 69 && BOOST_PP_ITERATION_FINISH_3 >= 69 +# define BOOST_PP_ITERATION_3 69 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 70 && BOOST_PP_ITERATION_FINISH_3 >= 70 +# define BOOST_PP_ITERATION_3 70 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 71 && BOOST_PP_ITERATION_FINISH_3 >= 71 +# define BOOST_PP_ITERATION_3 71 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 72 && BOOST_PP_ITERATION_FINISH_3 >= 72 +# define BOOST_PP_ITERATION_3 72 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 73 && BOOST_PP_ITERATION_FINISH_3 >= 73 +# define BOOST_PP_ITERATION_3 73 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 74 && BOOST_PP_ITERATION_FINISH_3 >= 74 +# define BOOST_PP_ITERATION_3 74 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 75 && BOOST_PP_ITERATION_FINISH_3 >= 75 +# define BOOST_PP_ITERATION_3 75 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 76 && BOOST_PP_ITERATION_FINISH_3 >= 76 +# define BOOST_PP_ITERATION_3 76 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 77 && BOOST_PP_ITERATION_FINISH_3 >= 77 +# define BOOST_PP_ITERATION_3 77 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 78 && BOOST_PP_ITERATION_FINISH_3 >= 78 +# define BOOST_PP_ITERATION_3 78 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 79 && BOOST_PP_ITERATION_FINISH_3 >= 79 +# define BOOST_PP_ITERATION_3 79 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 80 && BOOST_PP_ITERATION_FINISH_3 >= 80 +# define BOOST_PP_ITERATION_3 80 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 81 && BOOST_PP_ITERATION_FINISH_3 >= 81 +# define BOOST_PP_ITERATION_3 81 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 82 && BOOST_PP_ITERATION_FINISH_3 >= 82 +# define BOOST_PP_ITERATION_3 82 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 83 && BOOST_PP_ITERATION_FINISH_3 >= 83 +# define BOOST_PP_ITERATION_3 83 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 84 && BOOST_PP_ITERATION_FINISH_3 >= 84 +# define BOOST_PP_ITERATION_3 84 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 85 && BOOST_PP_ITERATION_FINISH_3 >= 85 +# define BOOST_PP_ITERATION_3 85 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 86 && BOOST_PP_ITERATION_FINISH_3 >= 86 +# define BOOST_PP_ITERATION_3 86 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 87 && BOOST_PP_ITERATION_FINISH_3 >= 87 +# define BOOST_PP_ITERATION_3 87 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 88 && BOOST_PP_ITERATION_FINISH_3 >= 88 +# define BOOST_PP_ITERATION_3 88 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 89 && BOOST_PP_ITERATION_FINISH_3 >= 89 +# define BOOST_PP_ITERATION_3 89 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 90 && BOOST_PP_ITERATION_FINISH_3 >= 90 +# define BOOST_PP_ITERATION_3 90 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 91 && BOOST_PP_ITERATION_FINISH_3 >= 91 +# define BOOST_PP_ITERATION_3 91 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 92 && BOOST_PP_ITERATION_FINISH_3 >= 92 +# define BOOST_PP_ITERATION_3 92 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 93 && BOOST_PP_ITERATION_FINISH_3 >= 93 +# define BOOST_PP_ITERATION_3 93 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 94 && BOOST_PP_ITERATION_FINISH_3 >= 94 +# define BOOST_PP_ITERATION_3 94 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 95 && BOOST_PP_ITERATION_FINISH_3 >= 95 +# define BOOST_PP_ITERATION_3 95 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 96 && BOOST_PP_ITERATION_FINISH_3 >= 96 +# define BOOST_PP_ITERATION_3 96 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 97 && BOOST_PP_ITERATION_FINISH_3 >= 97 +# define BOOST_PP_ITERATION_3 97 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 98 && BOOST_PP_ITERATION_FINISH_3 >= 98 +# define BOOST_PP_ITERATION_3 98 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 99 && BOOST_PP_ITERATION_FINISH_3 >= 99 +# define BOOST_PP_ITERATION_3 99 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 100 && BOOST_PP_ITERATION_FINISH_3 >= 100 +# define BOOST_PP_ITERATION_3 100 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 101 && BOOST_PP_ITERATION_FINISH_3 >= 101 +# define BOOST_PP_ITERATION_3 101 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 102 && BOOST_PP_ITERATION_FINISH_3 >= 102 +# define BOOST_PP_ITERATION_3 102 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 103 && BOOST_PP_ITERATION_FINISH_3 >= 103 +# define BOOST_PP_ITERATION_3 103 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 104 && BOOST_PP_ITERATION_FINISH_3 >= 104 +# define BOOST_PP_ITERATION_3 104 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 105 && BOOST_PP_ITERATION_FINISH_3 >= 105 +# define BOOST_PP_ITERATION_3 105 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 106 && BOOST_PP_ITERATION_FINISH_3 >= 106 +# define BOOST_PP_ITERATION_3 106 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 107 && BOOST_PP_ITERATION_FINISH_3 >= 107 +# define BOOST_PP_ITERATION_3 107 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 108 && BOOST_PP_ITERATION_FINISH_3 >= 108 +# define BOOST_PP_ITERATION_3 108 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 109 && BOOST_PP_ITERATION_FINISH_3 >= 109 +# define BOOST_PP_ITERATION_3 109 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 110 && BOOST_PP_ITERATION_FINISH_3 >= 110 +# define BOOST_PP_ITERATION_3 110 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 111 && BOOST_PP_ITERATION_FINISH_3 >= 111 +# define BOOST_PP_ITERATION_3 111 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 112 && BOOST_PP_ITERATION_FINISH_3 >= 112 +# define BOOST_PP_ITERATION_3 112 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 113 && BOOST_PP_ITERATION_FINISH_3 >= 113 +# define BOOST_PP_ITERATION_3 113 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 114 && BOOST_PP_ITERATION_FINISH_3 >= 114 +# define BOOST_PP_ITERATION_3 114 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 115 && BOOST_PP_ITERATION_FINISH_3 >= 115 +# define BOOST_PP_ITERATION_3 115 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 116 && BOOST_PP_ITERATION_FINISH_3 >= 116 +# define BOOST_PP_ITERATION_3 116 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 117 && BOOST_PP_ITERATION_FINISH_3 >= 117 +# define BOOST_PP_ITERATION_3 117 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 118 && BOOST_PP_ITERATION_FINISH_3 >= 118 +# define BOOST_PP_ITERATION_3 118 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 119 && BOOST_PP_ITERATION_FINISH_3 >= 119 +# define BOOST_PP_ITERATION_3 119 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 120 && BOOST_PP_ITERATION_FINISH_3 >= 120 +# define BOOST_PP_ITERATION_3 120 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 121 && BOOST_PP_ITERATION_FINISH_3 >= 121 +# define BOOST_PP_ITERATION_3 121 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 122 && BOOST_PP_ITERATION_FINISH_3 >= 122 +# define BOOST_PP_ITERATION_3 122 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 123 && BOOST_PP_ITERATION_FINISH_3 >= 123 +# define BOOST_PP_ITERATION_3 123 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 124 && BOOST_PP_ITERATION_FINISH_3 >= 124 +# define BOOST_PP_ITERATION_3 124 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 125 && BOOST_PP_ITERATION_FINISH_3 >= 125 +# define BOOST_PP_ITERATION_3 125 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 126 && BOOST_PP_ITERATION_FINISH_3 >= 126 +# define BOOST_PP_ITERATION_3 126 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 127 && BOOST_PP_ITERATION_FINISH_3 >= 127 +# define BOOST_PP_ITERATION_3 127 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 128 && BOOST_PP_ITERATION_FINISH_3 >= 128 +# define BOOST_PP_ITERATION_3 128 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 129 && BOOST_PP_ITERATION_FINISH_3 >= 129 +# define BOOST_PP_ITERATION_3 129 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 130 && BOOST_PP_ITERATION_FINISH_3 >= 130 +# define BOOST_PP_ITERATION_3 130 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 131 && BOOST_PP_ITERATION_FINISH_3 >= 131 +# define BOOST_PP_ITERATION_3 131 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 132 && BOOST_PP_ITERATION_FINISH_3 >= 132 +# define BOOST_PP_ITERATION_3 132 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 133 && BOOST_PP_ITERATION_FINISH_3 >= 133 +# define BOOST_PP_ITERATION_3 133 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 134 && BOOST_PP_ITERATION_FINISH_3 >= 134 +# define BOOST_PP_ITERATION_3 134 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 135 && BOOST_PP_ITERATION_FINISH_3 >= 135 +# define BOOST_PP_ITERATION_3 135 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 136 && BOOST_PP_ITERATION_FINISH_3 >= 136 +# define BOOST_PP_ITERATION_3 136 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 137 && BOOST_PP_ITERATION_FINISH_3 >= 137 +# define BOOST_PP_ITERATION_3 137 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 138 && BOOST_PP_ITERATION_FINISH_3 >= 138 +# define BOOST_PP_ITERATION_3 138 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 139 && BOOST_PP_ITERATION_FINISH_3 >= 139 +# define BOOST_PP_ITERATION_3 139 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 140 && BOOST_PP_ITERATION_FINISH_3 >= 140 +# define BOOST_PP_ITERATION_3 140 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 141 && BOOST_PP_ITERATION_FINISH_3 >= 141 +# define BOOST_PP_ITERATION_3 141 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 142 && BOOST_PP_ITERATION_FINISH_3 >= 142 +# define BOOST_PP_ITERATION_3 142 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 143 && BOOST_PP_ITERATION_FINISH_3 >= 143 +# define BOOST_PP_ITERATION_3 143 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 144 && BOOST_PP_ITERATION_FINISH_3 >= 144 +# define BOOST_PP_ITERATION_3 144 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 145 && BOOST_PP_ITERATION_FINISH_3 >= 145 +# define BOOST_PP_ITERATION_3 145 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 146 && BOOST_PP_ITERATION_FINISH_3 >= 146 +# define BOOST_PP_ITERATION_3 146 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 147 && BOOST_PP_ITERATION_FINISH_3 >= 147 +# define BOOST_PP_ITERATION_3 147 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 148 && BOOST_PP_ITERATION_FINISH_3 >= 148 +# define BOOST_PP_ITERATION_3 148 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 149 && BOOST_PP_ITERATION_FINISH_3 >= 149 +# define BOOST_PP_ITERATION_3 149 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 150 && BOOST_PP_ITERATION_FINISH_3 >= 150 +# define BOOST_PP_ITERATION_3 150 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 151 && BOOST_PP_ITERATION_FINISH_3 >= 151 +# define BOOST_PP_ITERATION_3 151 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 152 && BOOST_PP_ITERATION_FINISH_3 >= 152 +# define BOOST_PP_ITERATION_3 152 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 153 && BOOST_PP_ITERATION_FINISH_3 >= 153 +# define BOOST_PP_ITERATION_3 153 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 154 && BOOST_PP_ITERATION_FINISH_3 >= 154 +# define BOOST_PP_ITERATION_3 154 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 155 && BOOST_PP_ITERATION_FINISH_3 >= 155 +# define BOOST_PP_ITERATION_3 155 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 156 && BOOST_PP_ITERATION_FINISH_3 >= 156 +# define BOOST_PP_ITERATION_3 156 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 157 && BOOST_PP_ITERATION_FINISH_3 >= 157 +# define BOOST_PP_ITERATION_3 157 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 158 && BOOST_PP_ITERATION_FINISH_3 >= 158 +# define BOOST_PP_ITERATION_3 158 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 159 && BOOST_PP_ITERATION_FINISH_3 >= 159 +# define BOOST_PP_ITERATION_3 159 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 160 && BOOST_PP_ITERATION_FINISH_3 >= 160 +# define BOOST_PP_ITERATION_3 160 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 161 && BOOST_PP_ITERATION_FINISH_3 >= 161 +# define BOOST_PP_ITERATION_3 161 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 162 && BOOST_PP_ITERATION_FINISH_3 >= 162 +# define BOOST_PP_ITERATION_3 162 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 163 && BOOST_PP_ITERATION_FINISH_3 >= 163 +# define BOOST_PP_ITERATION_3 163 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 164 && BOOST_PP_ITERATION_FINISH_3 >= 164 +# define BOOST_PP_ITERATION_3 164 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 165 && BOOST_PP_ITERATION_FINISH_3 >= 165 +# define BOOST_PP_ITERATION_3 165 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 166 && BOOST_PP_ITERATION_FINISH_3 >= 166 +# define BOOST_PP_ITERATION_3 166 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 167 && BOOST_PP_ITERATION_FINISH_3 >= 167 +# define BOOST_PP_ITERATION_3 167 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 168 && BOOST_PP_ITERATION_FINISH_3 >= 168 +# define BOOST_PP_ITERATION_3 168 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 169 && BOOST_PP_ITERATION_FINISH_3 >= 169 +# define BOOST_PP_ITERATION_3 169 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 170 && BOOST_PP_ITERATION_FINISH_3 >= 170 +# define BOOST_PP_ITERATION_3 170 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 171 && BOOST_PP_ITERATION_FINISH_3 >= 171 +# define BOOST_PP_ITERATION_3 171 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 172 && BOOST_PP_ITERATION_FINISH_3 >= 172 +# define BOOST_PP_ITERATION_3 172 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 173 && BOOST_PP_ITERATION_FINISH_3 >= 173 +# define BOOST_PP_ITERATION_3 173 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 174 && BOOST_PP_ITERATION_FINISH_3 >= 174 +# define BOOST_PP_ITERATION_3 174 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 175 && BOOST_PP_ITERATION_FINISH_3 >= 175 +# define BOOST_PP_ITERATION_3 175 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 176 && BOOST_PP_ITERATION_FINISH_3 >= 176 +# define BOOST_PP_ITERATION_3 176 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 177 && BOOST_PP_ITERATION_FINISH_3 >= 177 +# define BOOST_PP_ITERATION_3 177 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 178 && BOOST_PP_ITERATION_FINISH_3 >= 178 +# define BOOST_PP_ITERATION_3 178 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 179 && BOOST_PP_ITERATION_FINISH_3 >= 179 +# define BOOST_PP_ITERATION_3 179 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 180 && BOOST_PP_ITERATION_FINISH_3 >= 180 +# define BOOST_PP_ITERATION_3 180 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 181 && BOOST_PP_ITERATION_FINISH_3 >= 181 +# define BOOST_PP_ITERATION_3 181 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 182 && BOOST_PP_ITERATION_FINISH_3 >= 182 +# define BOOST_PP_ITERATION_3 182 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 183 && BOOST_PP_ITERATION_FINISH_3 >= 183 +# define BOOST_PP_ITERATION_3 183 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 184 && BOOST_PP_ITERATION_FINISH_3 >= 184 +# define BOOST_PP_ITERATION_3 184 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 185 && BOOST_PP_ITERATION_FINISH_3 >= 185 +# define BOOST_PP_ITERATION_3 185 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 186 && BOOST_PP_ITERATION_FINISH_3 >= 186 +# define BOOST_PP_ITERATION_3 186 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 187 && BOOST_PP_ITERATION_FINISH_3 >= 187 +# define BOOST_PP_ITERATION_3 187 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 188 && BOOST_PP_ITERATION_FINISH_3 >= 188 +# define BOOST_PP_ITERATION_3 188 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 189 && BOOST_PP_ITERATION_FINISH_3 >= 189 +# define BOOST_PP_ITERATION_3 189 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 190 && BOOST_PP_ITERATION_FINISH_3 >= 190 +# define BOOST_PP_ITERATION_3 190 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 191 && BOOST_PP_ITERATION_FINISH_3 >= 191 +# define BOOST_PP_ITERATION_3 191 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 192 && BOOST_PP_ITERATION_FINISH_3 >= 192 +# define BOOST_PP_ITERATION_3 192 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 193 && BOOST_PP_ITERATION_FINISH_3 >= 193 +# define BOOST_PP_ITERATION_3 193 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 194 && BOOST_PP_ITERATION_FINISH_3 >= 194 +# define BOOST_PP_ITERATION_3 194 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 195 && BOOST_PP_ITERATION_FINISH_3 >= 195 +# define BOOST_PP_ITERATION_3 195 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 196 && BOOST_PP_ITERATION_FINISH_3 >= 196 +# define BOOST_PP_ITERATION_3 196 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 197 && BOOST_PP_ITERATION_FINISH_3 >= 197 +# define BOOST_PP_ITERATION_3 197 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 198 && BOOST_PP_ITERATION_FINISH_3 >= 198 +# define BOOST_PP_ITERATION_3 198 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 199 && BOOST_PP_ITERATION_FINISH_3 >= 199 +# define BOOST_PP_ITERATION_3 199 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 200 && BOOST_PP_ITERATION_FINISH_3 >= 200 +# define BOOST_PP_ITERATION_3 200 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 201 && BOOST_PP_ITERATION_FINISH_3 >= 201 +# define BOOST_PP_ITERATION_3 201 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 202 && BOOST_PP_ITERATION_FINISH_3 >= 202 +# define BOOST_PP_ITERATION_3 202 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 203 && BOOST_PP_ITERATION_FINISH_3 >= 203 +# define BOOST_PP_ITERATION_3 203 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 204 && BOOST_PP_ITERATION_FINISH_3 >= 204 +# define BOOST_PP_ITERATION_3 204 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 205 && BOOST_PP_ITERATION_FINISH_3 >= 205 +# define BOOST_PP_ITERATION_3 205 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 206 && BOOST_PP_ITERATION_FINISH_3 >= 206 +# define BOOST_PP_ITERATION_3 206 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 207 && BOOST_PP_ITERATION_FINISH_3 >= 207 +# define BOOST_PP_ITERATION_3 207 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 208 && BOOST_PP_ITERATION_FINISH_3 >= 208 +# define BOOST_PP_ITERATION_3 208 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 209 && BOOST_PP_ITERATION_FINISH_3 >= 209 +# define BOOST_PP_ITERATION_3 209 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 210 && BOOST_PP_ITERATION_FINISH_3 >= 210 +# define BOOST_PP_ITERATION_3 210 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 211 && BOOST_PP_ITERATION_FINISH_3 >= 211 +# define BOOST_PP_ITERATION_3 211 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 212 && BOOST_PP_ITERATION_FINISH_3 >= 212 +# define BOOST_PP_ITERATION_3 212 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 213 && BOOST_PP_ITERATION_FINISH_3 >= 213 +# define BOOST_PP_ITERATION_3 213 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 214 && BOOST_PP_ITERATION_FINISH_3 >= 214 +# define BOOST_PP_ITERATION_3 214 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 215 && BOOST_PP_ITERATION_FINISH_3 >= 215 +# define BOOST_PP_ITERATION_3 215 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 216 && BOOST_PP_ITERATION_FINISH_3 >= 216 +# define BOOST_PP_ITERATION_3 216 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 217 && BOOST_PP_ITERATION_FINISH_3 >= 217 +# define BOOST_PP_ITERATION_3 217 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 218 && BOOST_PP_ITERATION_FINISH_3 >= 218 +# define BOOST_PP_ITERATION_3 218 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 219 && BOOST_PP_ITERATION_FINISH_3 >= 219 +# define BOOST_PP_ITERATION_3 219 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 220 && BOOST_PP_ITERATION_FINISH_3 >= 220 +# define BOOST_PP_ITERATION_3 220 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 221 && BOOST_PP_ITERATION_FINISH_3 >= 221 +# define BOOST_PP_ITERATION_3 221 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 222 && BOOST_PP_ITERATION_FINISH_3 >= 222 +# define BOOST_PP_ITERATION_3 222 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 223 && BOOST_PP_ITERATION_FINISH_3 >= 223 +# define BOOST_PP_ITERATION_3 223 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 224 && BOOST_PP_ITERATION_FINISH_3 >= 224 +# define BOOST_PP_ITERATION_3 224 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 225 && BOOST_PP_ITERATION_FINISH_3 >= 225 +# define BOOST_PP_ITERATION_3 225 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 226 && BOOST_PP_ITERATION_FINISH_3 >= 226 +# define BOOST_PP_ITERATION_3 226 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 227 && BOOST_PP_ITERATION_FINISH_3 >= 227 +# define BOOST_PP_ITERATION_3 227 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 228 && BOOST_PP_ITERATION_FINISH_3 >= 228 +# define BOOST_PP_ITERATION_3 228 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 229 && BOOST_PP_ITERATION_FINISH_3 >= 229 +# define BOOST_PP_ITERATION_3 229 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 230 && BOOST_PP_ITERATION_FINISH_3 >= 230 +# define BOOST_PP_ITERATION_3 230 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 231 && BOOST_PP_ITERATION_FINISH_3 >= 231 +# define BOOST_PP_ITERATION_3 231 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 232 && BOOST_PP_ITERATION_FINISH_3 >= 232 +# define BOOST_PP_ITERATION_3 232 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 233 && BOOST_PP_ITERATION_FINISH_3 >= 233 +# define BOOST_PP_ITERATION_3 233 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 234 && BOOST_PP_ITERATION_FINISH_3 >= 234 +# define BOOST_PP_ITERATION_3 234 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 235 && BOOST_PP_ITERATION_FINISH_3 >= 235 +# define BOOST_PP_ITERATION_3 235 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 236 && BOOST_PP_ITERATION_FINISH_3 >= 236 +# define BOOST_PP_ITERATION_3 236 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 237 && BOOST_PP_ITERATION_FINISH_3 >= 237 +# define BOOST_PP_ITERATION_3 237 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 238 && BOOST_PP_ITERATION_FINISH_3 >= 238 +# define BOOST_PP_ITERATION_3 238 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 239 && BOOST_PP_ITERATION_FINISH_3 >= 239 +# define BOOST_PP_ITERATION_3 239 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 240 && BOOST_PP_ITERATION_FINISH_3 >= 240 +# define BOOST_PP_ITERATION_3 240 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 241 && BOOST_PP_ITERATION_FINISH_3 >= 241 +# define BOOST_PP_ITERATION_3 241 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 242 && BOOST_PP_ITERATION_FINISH_3 >= 242 +# define BOOST_PP_ITERATION_3 242 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 243 && BOOST_PP_ITERATION_FINISH_3 >= 243 +# define BOOST_PP_ITERATION_3 243 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 244 && BOOST_PP_ITERATION_FINISH_3 >= 244 +# define BOOST_PP_ITERATION_3 244 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 245 && BOOST_PP_ITERATION_FINISH_3 >= 245 +# define BOOST_PP_ITERATION_3 245 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 246 && BOOST_PP_ITERATION_FINISH_3 >= 246 +# define BOOST_PP_ITERATION_3 246 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 247 && BOOST_PP_ITERATION_FINISH_3 >= 247 +# define BOOST_PP_ITERATION_3 247 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 248 && BOOST_PP_ITERATION_FINISH_3 >= 248 +# define BOOST_PP_ITERATION_3 248 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 249 && BOOST_PP_ITERATION_FINISH_3 >= 249 +# define BOOST_PP_ITERATION_3 249 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 250 && BOOST_PP_ITERATION_FINISH_3 >= 250 +# define BOOST_PP_ITERATION_3 250 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 251 && BOOST_PP_ITERATION_FINISH_3 >= 251 +# define BOOST_PP_ITERATION_3 251 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 252 && BOOST_PP_ITERATION_FINISH_3 >= 252 +# define BOOST_PP_ITERATION_3 252 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 253 && BOOST_PP_ITERATION_FINISH_3 >= 253 +# define BOOST_PP_ITERATION_3 253 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 254 && BOOST_PP_ITERATION_FINISH_3 >= 254 +# define BOOST_PP_ITERATION_3 254 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 255 && BOOST_PP_ITERATION_FINISH_3 >= 255 +# define BOOST_PP_ITERATION_3 255 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_START_3 <= 256 && BOOST_PP_ITERATION_FINISH_3 >= 256 +# define BOOST_PP_ITERATION_3 256 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 2 +# +# undef BOOST_PP_ITERATION_START_3 +# undef BOOST_PP_ITERATION_FINISH_3 +# undef BOOST_PP_FILENAME_3 +# +# undef BOOST_PP_ITERATION_FLAGS_3 +# undef BOOST_PP_ITERATION_PARAMS_3 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward4.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward4.hpp new file mode 100644 index 00000000..b396c57f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward4.hpp @@ -0,0 +1,1338 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if defined(BOOST_PP_ITERATION_LIMITS) +# if !defined(BOOST_PP_FILENAME_4) +# error BOOST_PP_ERROR: depth #4 filename is not defined +# endif +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_ITERATION_FLAGS_4 0 +# undef BOOST_PP_ITERATION_LIMITS +# elif defined(BOOST_PP_ITERATION_PARAMS_4) +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_4) +# include +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_4) +# include +# define BOOST_PP_FILENAME_4 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_4) +# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_4) >= 4 +# define BOOST_PP_ITERATION_FLAGS_4 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_4) +# else +# define BOOST_PP_ITERATION_FLAGS_4 0 +# endif +# else +# error BOOST_PP_ERROR: depth #4 iteration boundaries or filename not defined +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 4 +# +# if (BOOST_PP_ITERATION_START_4) > (BOOST_PP_ITERATION_FINISH_4) +# include +# else +# if BOOST_PP_ITERATION_START_4 <= 0 && BOOST_PP_ITERATION_FINISH_4 >= 0 +# define BOOST_PP_ITERATION_4 0 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 1 && BOOST_PP_ITERATION_FINISH_4 >= 1 +# define BOOST_PP_ITERATION_4 1 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 2 && BOOST_PP_ITERATION_FINISH_4 >= 2 +# define BOOST_PP_ITERATION_4 2 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 3 && BOOST_PP_ITERATION_FINISH_4 >= 3 +# define BOOST_PP_ITERATION_4 3 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 4 && BOOST_PP_ITERATION_FINISH_4 >= 4 +# define BOOST_PP_ITERATION_4 4 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 5 && BOOST_PP_ITERATION_FINISH_4 >= 5 +# define BOOST_PP_ITERATION_4 5 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 6 && BOOST_PP_ITERATION_FINISH_4 >= 6 +# define BOOST_PP_ITERATION_4 6 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 7 && BOOST_PP_ITERATION_FINISH_4 >= 7 +# define BOOST_PP_ITERATION_4 7 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 8 && BOOST_PP_ITERATION_FINISH_4 >= 8 +# define BOOST_PP_ITERATION_4 8 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 9 && BOOST_PP_ITERATION_FINISH_4 >= 9 +# define BOOST_PP_ITERATION_4 9 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 10 && BOOST_PP_ITERATION_FINISH_4 >= 10 +# define BOOST_PP_ITERATION_4 10 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 11 && BOOST_PP_ITERATION_FINISH_4 >= 11 +# define BOOST_PP_ITERATION_4 11 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 12 && BOOST_PP_ITERATION_FINISH_4 >= 12 +# define BOOST_PP_ITERATION_4 12 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 13 && BOOST_PP_ITERATION_FINISH_4 >= 13 +# define BOOST_PP_ITERATION_4 13 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 14 && BOOST_PP_ITERATION_FINISH_4 >= 14 +# define BOOST_PP_ITERATION_4 14 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 15 && BOOST_PP_ITERATION_FINISH_4 >= 15 +# define BOOST_PP_ITERATION_4 15 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 16 && BOOST_PP_ITERATION_FINISH_4 >= 16 +# define BOOST_PP_ITERATION_4 16 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 17 && BOOST_PP_ITERATION_FINISH_4 >= 17 +# define BOOST_PP_ITERATION_4 17 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 18 && BOOST_PP_ITERATION_FINISH_4 >= 18 +# define BOOST_PP_ITERATION_4 18 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 19 && BOOST_PP_ITERATION_FINISH_4 >= 19 +# define BOOST_PP_ITERATION_4 19 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 20 && BOOST_PP_ITERATION_FINISH_4 >= 20 +# define BOOST_PP_ITERATION_4 20 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 21 && BOOST_PP_ITERATION_FINISH_4 >= 21 +# define BOOST_PP_ITERATION_4 21 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 22 && BOOST_PP_ITERATION_FINISH_4 >= 22 +# define BOOST_PP_ITERATION_4 22 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 23 && BOOST_PP_ITERATION_FINISH_4 >= 23 +# define BOOST_PP_ITERATION_4 23 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 24 && BOOST_PP_ITERATION_FINISH_4 >= 24 +# define BOOST_PP_ITERATION_4 24 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 25 && BOOST_PP_ITERATION_FINISH_4 >= 25 +# define BOOST_PP_ITERATION_4 25 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 26 && BOOST_PP_ITERATION_FINISH_4 >= 26 +# define BOOST_PP_ITERATION_4 26 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 27 && BOOST_PP_ITERATION_FINISH_4 >= 27 +# define BOOST_PP_ITERATION_4 27 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 28 && BOOST_PP_ITERATION_FINISH_4 >= 28 +# define BOOST_PP_ITERATION_4 28 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 29 && BOOST_PP_ITERATION_FINISH_4 >= 29 +# define BOOST_PP_ITERATION_4 29 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 30 && BOOST_PP_ITERATION_FINISH_4 >= 30 +# define BOOST_PP_ITERATION_4 30 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 31 && BOOST_PP_ITERATION_FINISH_4 >= 31 +# define BOOST_PP_ITERATION_4 31 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 32 && BOOST_PP_ITERATION_FINISH_4 >= 32 +# define BOOST_PP_ITERATION_4 32 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 33 && BOOST_PP_ITERATION_FINISH_4 >= 33 +# define BOOST_PP_ITERATION_4 33 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 34 && BOOST_PP_ITERATION_FINISH_4 >= 34 +# define BOOST_PP_ITERATION_4 34 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 35 && BOOST_PP_ITERATION_FINISH_4 >= 35 +# define BOOST_PP_ITERATION_4 35 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 36 && BOOST_PP_ITERATION_FINISH_4 >= 36 +# define BOOST_PP_ITERATION_4 36 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 37 && BOOST_PP_ITERATION_FINISH_4 >= 37 +# define BOOST_PP_ITERATION_4 37 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 38 && BOOST_PP_ITERATION_FINISH_4 >= 38 +# define BOOST_PP_ITERATION_4 38 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 39 && BOOST_PP_ITERATION_FINISH_4 >= 39 +# define BOOST_PP_ITERATION_4 39 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 40 && BOOST_PP_ITERATION_FINISH_4 >= 40 +# define BOOST_PP_ITERATION_4 40 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 41 && BOOST_PP_ITERATION_FINISH_4 >= 41 +# define BOOST_PP_ITERATION_4 41 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 42 && BOOST_PP_ITERATION_FINISH_4 >= 42 +# define BOOST_PP_ITERATION_4 42 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 43 && BOOST_PP_ITERATION_FINISH_4 >= 43 +# define BOOST_PP_ITERATION_4 43 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 44 && BOOST_PP_ITERATION_FINISH_4 >= 44 +# define BOOST_PP_ITERATION_4 44 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 45 && BOOST_PP_ITERATION_FINISH_4 >= 45 +# define BOOST_PP_ITERATION_4 45 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 46 && BOOST_PP_ITERATION_FINISH_4 >= 46 +# define BOOST_PP_ITERATION_4 46 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 47 && BOOST_PP_ITERATION_FINISH_4 >= 47 +# define BOOST_PP_ITERATION_4 47 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 48 && BOOST_PP_ITERATION_FINISH_4 >= 48 +# define BOOST_PP_ITERATION_4 48 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 49 && BOOST_PP_ITERATION_FINISH_4 >= 49 +# define BOOST_PP_ITERATION_4 49 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 50 && BOOST_PP_ITERATION_FINISH_4 >= 50 +# define BOOST_PP_ITERATION_4 50 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 51 && BOOST_PP_ITERATION_FINISH_4 >= 51 +# define BOOST_PP_ITERATION_4 51 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 52 && BOOST_PP_ITERATION_FINISH_4 >= 52 +# define BOOST_PP_ITERATION_4 52 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 53 && BOOST_PP_ITERATION_FINISH_4 >= 53 +# define BOOST_PP_ITERATION_4 53 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 54 && BOOST_PP_ITERATION_FINISH_4 >= 54 +# define BOOST_PP_ITERATION_4 54 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 55 && BOOST_PP_ITERATION_FINISH_4 >= 55 +# define BOOST_PP_ITERATION_4 55 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 56 && BOOST_PP_ITERATION_FINISH_4 >= 56 +# define BOOST_PP_ITERATION_4 56 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 57 && BOOST_PP_ITERATION_FINISH_4 >= 57 +# define BOOST_PP_ITERATION_4 57 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 58 && BOOST_PP_ITERATION_FINISH_4 >= 58 +# define BOOST_PP_ITERATION_4 58 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 59 && BOOST_PP_ITERATION_FINISH_4 >= 59 +# define BOOST_PP_ITERATION_4 59 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 60 && BOOST_PP_ITERATION_FINISH_4 >= 60 +# define BOOST_PP_ITERATION_4 60 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 61 && BOOST_PP_ITERATION_FINISH_4 >= 61 +# define BOOST_PP_ITERATION_4 61 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 62 && BOOST_PP_ITERATION_FINISH_4 >= 62 +# define BOOST_PP_ITERATION_4 62 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 63 && BOOST_PP_ITERATION_FINISH_4 >= 63 +# define BOOST_PP_ITERATION_4 63 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 64 && BOOST_PP_ITERATION_FINISH_4 >= 64 +# define BOOST_PP_ITERATION_4 64 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 65 && BOOST_PP_ITERATION_FINISH_4 >= 65 +# define BOOST_PP_ITERATION_4 65 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 66 && BOOST_PP_ITERATION_FINISH_4 >= 66 +# define BOOST_PP_ITERATION_4 66 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 67 && BOOST_PP_ITERATION_FINISH_4 >= 67 +# define BOOST_PP_ITERATION_4 67 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 68 && BOOST_PP_ITERATION_FINISH_4 >= 68 +# define BOOST_PP_ITERATION_4 68 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 69 && BOOST_PP_ITERATION_FINISH_4 >= 69 +# define BOOST_PP_ITERATION_4 69 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 70 && BOOST_PP_ITERATION_FINISH_4 >= 70 +# define BOOST_PP_ITERATION_4 70 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 71 && BOOST_PP_ITERATION_FINISH_4 >= 71 +# define BOOST_PP_ITERATION_4 71 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 72 && BOOST_PP_ITERATION_FINISH_4 >= 72 +# define BOOST_PP_ITERATION_4 72 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 73 && BOOST_PP_ITERATION_FINISH_4 >= 73 +# define BOOST_PP_ITERATION_4 73 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 74 && BOOST_PP_ITERATION_FINISH_4 >= 74 +# define BOOST_PP_ITERATION_4 74 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 75 && BOOST_PP_ITERATION_FINISH_4 >= 75 +# define BOOST_PP_ITERATION_4 75 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 76 && BOOST_PP_ITERATION_FINISH_4 >= 76 +# define BOOST_PP_ITERATION_4 76 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 77 && BOOST_PP_ITERATION_FINISH_4 >= 77 +# define BOOST_PP_ITERATION_4 77 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 78 && BOOST_PP_ITERATION_FINISH_4 >= 78 +# define BOOST_PP_ITERATION_4 78 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 79 && BOOST_PP_ITERATION_FINISH_4 >= 79 +# define BOOST_PP_ITERATION_4 79 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 80 && BOOST_PP_ITERATION_FINISH_4 >= 80 +# define BOOST_PP_ITERATION_4 80 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 81 && BOOST_PP_ITERATION_FINISH_4 >= 81 +# define BOOST_PP_ITERATION_4 81 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 82 && BOOST_PP_ITERATION_FINISH_4 >= 82 +# define BOOST_PP_ITERATION_4 82 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 83 && BOOST_PP_ITERATION_FINISH_4 >= 83 +# define BOOST_PP_ITERATION_4 83 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 84 && BOOST_PP_ITERATION_FINISH_4 >= 84 +# define BOOST_PP_ITERATION_4 84 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 85 && BOOST_PP_ITERATION_FINISH_4 >= 85 +# define BOOST_PP_ITERATION_4 85 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 86 && BOOST_PP_ITERATION_FINISH_4 >= 86 +# define BOOST_PP_ITERATION_4 86 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 87 && BOOST_PP_ITERATION_FINISH_4 >= 87 +# define BOOST_PP_ITERATION_4 87 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 88 && BOOST_PP_ITERATION_FINISH_4 >= 88 +# define BOOST_PP_ITERATION_4 88 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 89 && BOOST_PP_ITERATION_FINISH_4 >= 89 +# define BOOST_PP_ITERATION_4 89 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 90 && BOOST_PP_ITERATION_FINISH_4 >= 90 +# define BOOST_PP_ITERATION_4 90 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 91 && BOOST_PP_ITERATION_FINISH_4 >= 91 +# define BOOST_PP_ITERATION_4 91 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 92 && BOOST_PP_ITERATION_FINISH_4 >= 92 +# define BOOST_PP_ITERATION_4 92 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 93 && BOOST_PP_ITERATION_FINISH_4 >= 93 +# define BOOST_PP_ITERATION_4 93 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 94 && BOOST_PP_ITERATION_FINISH_4 >= 94 +# define BOOST_PP_ITERATION_4 94 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 95 && BOOST_PP_ITERATION_FINISH_4 >= 95 +# define BOOST_PP_ITERATION_4 95 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 96 && BOOST_PP_ITERATION_FINISH_4 >= 96 +# define BOOST_PP_ITERATION_4 96 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 97 && BOOST_PP_ITERATION_FINISH_4 >= 97 +# define BOOST_PP_ITERATION_4 97 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 98 && BOOST_PP_ITERATION_FINISH_4 >= 98 +# define BOOST_PP_ITERATION_4 98 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 99 && BOOST_PP_ITERATION_FINISH_4 >= 99 +# define BOOST_PP_ITERATION_4 99 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 100 && BOOST_PP_ITERATION_FINISH_4 >= 100 +# define BOOST_PP_ITERATION_4 100 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 101 && BOOST_PP_ITERATION_FINISH_4 >= 101 +# define BOOST_PP_ITERATION_4 101 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 102 && BOOST_PP_ITERATION_FINISH_4 >= 102 +# define BOOST_PP_ITERATION_4 102 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 103 && BOOST_PP_ITERATION_FINISH_4 >= 103 +# define BOOST_PP_ITERATION_4 103 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 104 && BOOST_PP_ITERATION_FINISH_4 >= 104 +# define BOOST_PP_ITERATION_4 104 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 105 && BOOST_PP_ITERATION_FINISH_4 >= 105 +# define BOOST_PP_ITERATION_4 105 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 106 && BOOST_PP_ITERATION_FINISH_4 >= 106 +# define BOOST_PP_ITERATION_4 106 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 107 && BOOST_PP_ITERATION_FINISH_4 >= 107 +# define BOOST_PP_ITERATION_4 107 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 108 && BOOST_PP_ITERATION_FINISH_4 >= 108 +# define BOOST_PP_ITERATION_4 108 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 109 && BOOST_PP_ITERATION_FINISH_4 >= 109 +# define BOOST_PP_ITERATION_4 109 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 110 && BOOST_PP_ITERATION_FINISH_4 >= 110 +# define BOOST_PP_ITERATION_4 110 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 111 && BOOST_PP_ITERATION_FINISH_4 >= 111 +# define BOOST_PP_ITERATION_4 111 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 112 && BOOST_PP_ITERATION_FINISH_4 >= 112 +# define BOOST_PP_ITERATION_4 112 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 113 && BOOST_PP_ITERATION_FINISH_4 >= 113 +# define BOOST_PP_ITERATION_4 113 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 114 && BOOST_PP_ITERATION_FINISH_4 >= 114 +# define BOOST_PP_ITERATION_4 114 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 115 && BOOST_PP_ITERATION_FINISH_4 >= 115 +# define BOOST_PP_ITERATION_4 115 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 116 && BOOST_PP_ITERATION_FINISH_4 >= 116 +# define BOOST_PP_ITERATION_4 116 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 117 && BOOST_PP_ITERATION_FINISH_4 >= 117 +# define BOOST_PP_ITERATION_4 117 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 118 && BOOST_PP_ITERATION_FINISH_4 >= 118 +# define BOOST_PP_ITERATION_4 118 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 119 && BOOST_PP_ITERATION_FINISH_4 >= 119 +# define BOOST_PP_ITERATION_4 119 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 120 && BOOST_PP_ITERATION_FINISH_4 >= 120 +# define BOOST_PP_ITERATION_4 120 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 121 && BOOST_PP_ITERATION_FINISH_4 >= 121 +# define BOOST_PP_ITERATION_4 121 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 122 && BOOST_PP_ITERATION_FINISH_4 >= 122 +# define BOOST_PP_ITERATION_4 122 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 123 && BOOST_PP_ITERATION_FINISH_4 >= 123 +# define BOOST_PP_ITERATION_4 123 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 124 && BOOST_PP_ITERATION_FINISH_4 >= 124 +# define BOOST_PP_ITERATION_4 124 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 125 && BOOST_PP_ITERATION_FINISH_4 >= 125 +# define BOOST_PP_ITERATION_4 125 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 126 && BOOST_PP_ITERATION_FINISH_4 >= 126 +# define BOOST_PP_ITERATION_4 126 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 127 && BOOST_PP_ITERATION_FINISH_4 >= 127 +# define BOOST_PP_ITERATION_4 127 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 128 && BOOST_PP_ITERATION_FINISH_4 >= 128 +# define BOOST_PP_ITERATION_4 128 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 129 && BOOST_PP_ITERATION_FINISH_4 >= 129 +# define BOOST_PP_ITERATION_4 129 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 130 && BOOST_PP_ITERATION_FINISH_4 >= 130 +# define BOOST_PP_ITERATION_4 130 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 131 && BOOST_PP_ITERATION_FINISH_4 >= 131 +# define BOOST_PP_ITERATION_4 131 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 132 && BOOST_PP_ITERATION_FINISH_4 >= 132 +# define BOOST_PP_ITERATION_4 132 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 133 && BOOST_PP_ITERATION_FINISH_4 >= 133 +# define BOOST_PP_ITERATION_4 133 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 134 && BOOST_PP_ITERATION_FINISH_4 >= 134 +# define BOOST_PP_ITERATION_4 134 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 135 && BOOST_PP_ITERATION_FINISH_4 >= 135 +# define BOOST_PP_ITERATION_4 135 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 136 && BOOST_PP_ITERATION_FINISH_4 >= 136 +# define BOOST_PP_ITERATION_4 136 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 137 && BOOST_PP_ITERATION_FINISH_4 >= 137 +# define BOOST_PP_ITERATION_4 137 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 138 && BOOST_PP_ITERATION_FINISH_4 >= 138 +# define BOOST_PP_ITERATION_4 138 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 139 && BOOST_PP_ITERATION_FINISH_4 >= 139 +# define BOOST_PP_ITERATION_4 139 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 140 && BOOST_PP_ITERATION_FINISH_4 >= 140 +# define BOOST_PP_ITERATION_4 140 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 141 && BOOST_PP_ITERATION_FINISH_4 >= 141 +# define BOOST_PP_ITERATION_4 141 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 142 && BOOST_PP_ITERATION_FINISH_4 >= 142 +# define BOOST_PP_ITERATION_4 142 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 143 && BOOST_PP_ITERATION_FINISH_4 >= 143 +# define BOOST_PP_ITERATION_4 143 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 144 && BOOST_PP_ITERATION_FINISH_4 >= 144 +# define BOOST_PP_ITERATION_4 144 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 145 && BOOST_PP_ITERATION_FINISH_4 >= 145 +# define BOOST_PP_ITERATION_4 145 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 146 && BOOST_PP_ITERATION_FINISH_4 >= 146 +# define BOOST_PP_ITERATION_4 146 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 147 && BOOST_PP_ITERATION_FINISH_4 >= 147 +# define BOOST_PP_ITERATION_4 147 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 148 && BOOST_PP_ITERATION_FINISH_4 >= 148 +# define BOOST_PP_ITERATION_4 148 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 149 && BOOST_PP_ITERATION_FINISH_4 >= 149 +# define BOOST_PP_ITERATION_4 149 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 150 && BOOST_PP_ITERATION_FINISH_4 >= 150 +# define BOOST_PP_ITERATION_4 150 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 151 && BOOST_PP_ITERATION_FINISH_4 >= 151 +# define BOOST_PP_ITERATION_4 151 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 152 && BOOST_PP_ITERATION_FINISH_4 >= 152 +# define BOOST_PP_ITERATION_4 152 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 153 && BOOST_PP_ITERATION_FINISH_4 >= 153 +# define BOOST_PP_ITERATION_4 153 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 154 && BOOST_PP_ITERATION_FINISH_4 >= 154 +# define BOOST_PP_ITERATION_4 154 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 155 && BOOST_PP_ITERATION_FINISH_4 >= 155 +# define BOOST_PP_ITERATION_4 155 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 156 && BOOST_PP_ITERATION_FINISH_4 >= 156 +# define BOOST_PP_ITERATION_4 156 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 157 && BOOST_PP_ITERATION_FINISH_4 >= 157 +# define BOOST_PP_ITERATION_4 157 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 158 && BOOST_PP_ITERATION_FINISH_4 >= 158 +# define BOOST_PP_ITERATION_4 158 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 159 && BOOST_PP_ITERATION_FINISH_4 >= 159 +# define BOOST_PP_ITERATION_4 159 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 160 && BOOST_PP_ITERATION_FINISH_4 >= 160 +# define BOOST_PP_ITERATION_4 160 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 161 && BOOST_PP_ITERATION_FINISH_4 >= 161 +# define BOOST_PP_ITERATION_4 161 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 162 && BOOST_PP_ITERATION_FINISH_4 >= 162 +# define BOOST_PP_ITERATION_4 162 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 163 && BOOST_PP_ITERATION_FINISH_4 >= 163 +# define BOOST_PP_ITERATION_4 163 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 164 && BOOST_PP_ITERATION_FINISH_4 >= 164 +# define BOOST_PP_ITERATION_4 164 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 165 && BOOST_PP_ITERATION_FINISH_4 >= 165 +# define BOOST_PP_ITERATION_4 165 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 166 && BOOST_PP_ITERATION_FINISH_4 >= 166 +# define BOOST_PP_ITERATION_4 166 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 167 && BOOST_PP_ITERATION_FINISH_4 >= 167 +# define BOOST_PP_ITERATION_4 167 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 168 && BOOST_PP_ITERATION_FINISH_4 >= 168 +# define BOOST_PP_ITERATION_4 168 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 169 && BOOST_PP_ITERATION_FINISH_4 >= 169 +# define BOOST_PP_ITERATION_4 169 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 170 && BOOST_PP_ITERATION_FINISH_4 >= 170 +# define BOOST_PP_ITERATION_4 170 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 171 && BOOST_PP_ITERATION_FINISH_4 >= 171 +# define BOOST_PP_ITERATION_4 171 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 172 && BOOST_PP_ITERATION_FINISH_4 >= 172 +# define BOOST_PP_ITERATION_4 172 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 173 && BOOST_PP_ITERATION_FINISH_4 >= 173 +# define BOOST_PP_ITERATION_4 173 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 174 && BOOST_PP_ITERATION_FINISH_4 >= 174 +# define BOOST_PP_ITERATION_4 174 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 175 && BOOST_PP_ITERATION_FINISH_4 >= 175 +# define BOOST_PP_ITERATION_4 175 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 176 && BOOST_PP_ITERATION_FINISH_4 >= 176 +# define BOOST_PP_ITERATION_4 176 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 177 && BOOST_PP_ITERATION_FINISH_4 >= 177 +# define BOOST_PP_ITERATION_4 177 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 178 && BOOST_PP_ITERATION_FINISH_4 >= 178 +# define BOOST_PP_ITERATION_4 178 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 179 && BOOST_PP_ITERATION_FINISH_4 >= 179 +# define BOOST_PP_ITERATION_4 179 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 180 && BOOST_PP_ITERATION_FINISH_4 >= 180 +# define BOOST_PP_ITERATION_4 180 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 181 && BOOST_PP_ITERATION_FINISH_4 >= 181 +# define BOOST_PP_ITERATION_4 181 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 182 && BOOST_PP_ITERATION_FINISH_4 >= 182 +# define BOOST_PP_ITERATION_4 182 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 183 && BOOST_PP_ITERATION_FINISH_4 >= 183 +# define BOOST_PP_ITERATION_4 183 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 184 && BOOST_PP_ITERATION_FINISH_4 >= 184 +# define BOOST_PP_ITERATION_4 184 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 185 && BOOST_PP_ITERATION_FINISH_4 >= 185 +# define BOOST_PP_ITERATION_4 185 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 186 && BOOST_PP_ITERATION_FINISH_4 >= 186 +# define BOOST_PP_ITERATION_4 186 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 187 && BOOST_PP_ITERATION_FINISH_4 >= 187 +# define BOOST_PP_ITERATION_4 187 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 188 && BOOST_PP_ITERATION_FINISH_4 >= 188 +# define BOOST_PP_ITERATION_4 188 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 189 && BOOST_PP_ITERATION_FINISH_4 >= 189 +# define BOOST_PP_ITERATION_4 189 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 190 && BOOST_PP_ITERATION_FINISH_4 >= 190 +# define BOOST_PP_ITERATION_4 190 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 191 && BOOST_PP_ITERATION_FINISH_4 >= 191 +# define BOOST_PP_ITERATION_4 191 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 192 && BOOST_PP_ITERATION_FINISH_4 >= 192 +# define BOOST_PP_ITERATION_4 192 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 193 && BOOST_PP_ITERATION_FINISH_4 >= 193 +# define BOOST_PP_ITERATION_4 193 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 194 && BOOST_PP_ITERATION_FINISH_4 >= 194 +# define BOOST_PP_ITERATION_4 194 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 195 && BOOST_PP_ITERATION_FINISH_4 >= 195 +# define BOOST_PP_ITERATION_4 195 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 196 && BOOST_PP_ITERATION_FINISH_4 >= 196 +# define BOOST_PP_ITERATION_4 196 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 197 && BOOST_PP_ITERATION_FINISH_4 >= 197 +# define BOOST_PP_ITERATION_4 197 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 198 && BOOST_PP_ITERATION_FINISH_4 >= 198 +# define BOOST_PP_ITERATION_4 198 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 199 && BOOST_PP_ITERATION_FINISH_4 >= 199 +# define BOOST_PP_ITERATION_4 199 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 200 && BOOST_PP_ITERATION_FINISH_4 >= 200 +# define BOOST_PP_ITERATION_4 200 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 201 && BOOST_PP_ITERATION_FINISH_4 >= 201 +# define BOOST_PP_ITERATION_4 201 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 202 && BOOST_PP_ITERATION_FINISH_4 >= 202 +# define BOOST_PP_ITERATION_4 202 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 203 && BOOST_PP_ITERATION_FINISH_4 >= 203 +# define BOOST_PP_ITERATION_4 203 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 204 && BOOST_PP_ITERATION_FINISH_4 >= 204 +# define BOOST_PP_ITERATION_4 204 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 205 && BOOST_PP_ITERATION_FINISH_4 >= 205 +# define BOOST_PP_ITERATION_4 205 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 206 && BOOST_PP_ITERATION_FINISH_4 >= 206 +# define BOOST_PP_ITERATION_4 206 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 207 && BOOST_PP_ITERATION_FINISH_4 >= 207 +# define BOOST_PP_ITERATION_4 207 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 208 && BOOST_PP_ITERATION_FINISH_4 >= 208 +# define BOOST_PP_ITERATION_4 208 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 209 && BOOST_PP_ITERATION_FINISH_4 >= 209 +# define BOOST_PP_ITERATION_4 209 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 210 && BOOST_PP_ITERATION_FINISH_4 >= 210 +# define BOOST_PP_ITERATION_4 210 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 211 && BOOST_PP_ITERATION_FINISH_4 >= 211 +# define BOOST_PP_ITERATION_4 211 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 212 && BOOST_PP_ITERATION_FINISH_4 >= 212 +# define BOOST_PP_ITERATION_4 212 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 213 && BOOST_PP_ITERATION_FINISH_4 >= 213 +# define BOOST_PP_ITERATION_4 213 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 214 && BOOST_PP_ITERATION_FINISH_4 >= 214 +# define BOOST_PP_ITERATION_4 214 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 215 && BOOST_PP_ITERATION_FINISH_4 >= 215 +# define BOOST_PP_ITERATION_4 215 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 216 && BOOST_PP_ITERATION_FINISH_4 >= 216 +# define BOOST_PP_ITERATION_4 216 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 217 && BOOST_PP_ITERATION_FINISH_4 >= 217 +# define BOOST_PP_ITERATION_4 217 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 218 && BOOST_PP_ITERATION_FINISH_4 >= 218 +# define BOOST_PP_ITERATION_4 218 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 219 && BOOST_PP_ITERATION_FINISH_4 >= 219 +# define BOOST_PP_ITERATION_4 219 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 220 && BOOST_PP_ITERATION_FINISH_4 >= 220 +# define BOOST_PP_ITERATION_4 220 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 221 && BOOST_PP_ITERATION_FINISH_4 >= 221 +# define BOOST_PP_ITERATION_4 221 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 222 && BOOST_PP_ITERATION_FINISH_4 >= 222 +# define BOOST_PP_ITERATION_4 222 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 223 && BOOST_PP_ITERATION_FINISH_4 >= 223 +# define BOOST_PP_ITERATION_4 223 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 224 && BOOST_PP_ITERATION_FINISH_4 >= 224 +# define BOOST_PP_ITERATION_4 224 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 225 && BOOST_PP_ITERATION_FINISH_4 >= 225 +# define BOOST_PP_ITERATION_4 225 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 226 && BOOST_PP_ITERATION_FINISH_4 >= 226 +# define BOOST_PP_ITERATION_4 226 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 227 && BOOST_PP_ITERATION_FINISH_4 >= 227 +# define BOOST_PP_ITERATION_4 227 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 228 && BOOST_PP_ITERATION_FINISH_4 >= 228 +# define BOOST_PP_ITERATION_4 228 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 229 && BOOST_PP_ITERATION_FINISH_4 >= 229 +# define BOOST_PP_ITERATION_4 229 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 230 && BOOST_PP_ITERATION_FINISH_4 >= 230 +# define BOOST_PP_ITERATION_4 230 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 231 && BOOST_PP_ITERATION_FINISH_4 >= 231 +# define BOOST_PP_ITERATION_4 231 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 232 && BOOST_PP_ITERATION_FINISH_4 >= 232 +# define BOOST_PP_ITERATION_4 232 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 233 && BOOST_PP_ITERATION_FINISH_4 >= 233 +# define BOOST_PP_ITERATION_4 233 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 234 && BOOST_PP_ITERATION_FINISH_4 >= 234 +# define BOOST_PP_ITERATION_4 234 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 235 && BOOST_PP_ITERATION_FINISH_4 >= 235 +# define BOOST_PP_ITERATION_4 235 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 236 && BOOST_PP_ITERATION_FINISH_4 >= 236 +# define BOOST_PP_ITERATION_4 236 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 237 && BOOST_PP_ITERATION_FINISH_4 >= 237 +# define BOOST_PP_ITERATION_4 237 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 238 && BOOST_PP_ITERATION_FINISH_4 >= 238 +# define BOOST_PP_ITERATION_4 238 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 239 && BOOST_PP_ITERATION_FINISH_4 >= 239 +# define BOOST_PP_ITERATION_4 239 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 240 && BOOST_PP_ITERATION_FINISH_4 >= 240 +# define BOOST_PP_ITERATION_4 240 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 241 && BOOST_PP_ITERATION_FINISH_4 >= 241 +# define BOOST_PP_ITERATION_4 241 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 242 && BOOST_PP_ITERATION_FINISH_4 >= 242 +# define BOOST_PP_ITERATION_4 242 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 243 && BOOST_PP_ITERATION_FINISH_4 >= 243 +# define BOOST_PP_ITERATION_4 243 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 244 && BOOST_PP_ITERATION_FINISH_4 >= 244 +# define BOOST_PP_ITERATION_4 244 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 245 && BOOST_PP_ITERATION_FINISH_4 >= 245 +# define BOOST_PP_ITERATION_4 245 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 246 && BOOST_PP_ITERATION_FINISH_4 >= 246 +# define BOOST_PP_ITERATION_4 246 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 247 && BOOST_PP_ITERATION_FINISH_4 >= 247 +# define BOOST_PP_ITERATION_4 247 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 248 && BOOST_PP_ITERATION_FINISH_4 >= 248 +# define BOOST_PP_ITERATION_4 248 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 249 && BOOST_PP_ITERATION_FINISH_4 >= 249 +# define BOOST_PP_ITERATION_4 249 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 250 && BOOST_PP_ITERATION_FINISH_4 >= 250 +# define BOOST_PP_ITERATION_4 250 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 251 && BOOST_PP_ITERATION_FINISH_4 >= 251 +# define BOOST_PP_ITERATION_4 251 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 252 && BOOST_PP_ITERATION_FINISH_4 >= 252 +# define BOOST_PP_ITERATION_4 252 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 253 && BOOST_PP_ITERATION_FINISH_4 >= 253 +# define BOOST_PP_ITERATION_4 253 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 254 && BOOST_PP_ITERATION_FINISH_4 >= 254 +# define BOOST_PP_ITERATION_4 254 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 255 && BOOST_PP_ITERATION_FINISH_4 >= 255 +# define BOOST_PP_ITERATION_4 255 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_START_4 <= 256 && BOOST_PP_ITERATION_FINISH_4 >= 256 +# define BOOST_PP_ITERATION_4 256 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 3 +# +# undef BOOST_PP_ITERATION_START_4 +# undef BOOST_PP_ITERATION_FINISH_4 +# undef BOOST_PP_FILENAME_4 +# +# undef BOOST_PP_ITERATION_FLAGS_4 +# undef BOOST_PP_ITERATION_PARAMS_4 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward5.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward5.hpp new file mode 100644 index 00000000..2fee952d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/forward5.hpp @@ -0,0 +1,1338 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if defined(BOOST_PP_ITERATION_LIMITS) +# if !defined(BOOST_PP_FILENAME_5) +# error BOOST_PP_ERROR: depth #5 filename is not defined +# endif +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# define BOOST_PP_ITERATION_FLAGS_5 0 +# undef BOOST_PP_ITERATION_LIMITS +# elif defined(BOOST_PP_ITERATION_PARAMS_5) +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_5) +# include +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5) +# include +# define BOOST_PP_FILENAME_5 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_5) +# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_5) >= 4 +# define BOOST_PP_ITERATION_FLAGS_5 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_5) +# else +# define BOOST_PP_ITERATION_FLAGS_5 0 +# endif +# else +# error BOOST_PP_ERROR: depth #5 iteration boundaries or filename not defined +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 5 +# +# if (BOOST_PP_ITERATION_START_5) > (BOOST_PP_ITERATION_FINISH_5) +# include +# else +# if BOOST_PP_ITERATION_START_5 <= 0 && BOOST_PP_ITERATION_FINISH_5 >= 0 +# define BOOST_PP_ITERATION_5 0 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 1 && BOOST_PP_ITERATION_FINISH_5 >= 1 +# define BOOST_PP_ITERATION_5 1 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 2 && BOOST_PP_ITERATION_FINISH_5 >= 2 +# define BOOST_PP_ITERATION_5 2 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 3 && BOOST_PP_ITERATION_FINISH_5 >= 3 +# define BOOST_PP_ITERATION_5 3 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 4 && BOOST_PP_ITERATION_FINISH_5 >= 4 +# define BOOST_PP_ITERATION_5 4 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 5 && BOOST_PP_ITERATION_FINISH_5 >= 5 +# define BOOST_PP_ITERATION_5 5 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 6 && BOOST_PP_ITERATION_FINISH_5 >= 6 +# define BOOST_PP_ITERATION_5 6 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 7 && BOOST_PP_ITERATION_FINISH_5 >= 7 +# define BOOST_PP_ITERATION_5 7 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 8 && BOOST_PP_ITERATION_FINISH_5 >= 8 +# define BOOST_PP_ITERATION_5 8 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 9 && BOOST_PP_ITERATION_FINISH_5 >= 9 +# define BOOST_PP_ITERATION_5 9 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 10 && BOOST_PP_ITERATION_FINISH_5 >= 10 +# define BOOST_PP_ITERATION_5 10 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 11 && BOOST_PP_ITERATION_FINISH_5 >= 11 +# define BOOST_PP_ITERATION_5 11 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 12 && BOOST_PP_ITERATION_FINISH_5 >= 12 +# define BOOST_PP_ITERATION_5 12 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 13 && BOOST_PP_ITERATION_FINISH_5 >= 13 +# define BOOST_PP_ITERATION_5 13 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 14 && BOOST_PP_ITERATION_FINISH_5 >= 14 +# define BOOST_PP_ITERATION_5 14 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 15 && BOOST_PP_ITERATION_FINISH_5 >= 15 +# define BOOST_PP_ITERATION_5 15 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 16 && BOOST_PP_ITERATION_FINISH_5 >= 16 +# define BOOST_PP_ITERATION_5 16 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 17 && BOOST_PP_ITERATION_FINISH_5 >= 17 +# define BOOST_PP_ITERATION_5 17 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 18 && BOOST_PP_ITERATION_FINISH_5 >= 18 +# define BOOST_PP_ITERATION_5 18 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 19 && BOOST_PP_ITERATION_FINISH_5 >= 19 +# define BOOST_PP_ITERATION_5 19 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 20 && BOOST_PP_ITERATION_FINISH_5 >= 20 +# define BOOST_PP_ITERATION_5 20 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 21 && BOOST_PP_ITERATION_FINISH_5 >= 21 +# define BOOST_PP_ITERATION_5 21 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 22 && BOOST_PP_ITERATION_FINISH_5 >= 22 +# define BOOST_PP_ITERATION_5 22 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 23 && BOOST_PP_ITERATION_FINISH_5 >= 23 +# define BOOST_PP_ITERATION_5 23 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 24 && BOOST_PP_ITERATION_FINISH_5 >= 24 +# define BOOST_PP_ITERATION_5 24 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 25 && BOOST_PP_ITERATION_FINISH_5 >= 25 +# define BOOST_PP_ITERATION_5 25 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 26 && BOOST_PP_ITERATION_FINISH_5 >= 26 +# define BOOST_PP_ITERATION_5 26 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 27 && BOOST_PP_ITERATION_FINISH_5 >= 27 +# define BOOST_PP_ITERATION_5 27 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 28 && BOOST_PP_ITERATION_FINISH_5 >= 28 +# define BOOST_PP_ITERATION_5 28 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 29 && BOOST_PP_ITERATION_FINISH_5 >= 29 +# define BOOST_PP_ITERATION_5 29 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 30 && BOOST_PP_ITERATION_FINISH_5 >= 30 +# define BOOST_PP_ITERATION_5 30 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 31 && BOOST_PP_ITERATION_FINISH_5 >= 31 +# define BOOST_PP_ITERATION_5 31 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 32 && BOOST_PP_ITERATION_FINISH_5 >= 32 +# define BOOST_PP_ITERATION_5 32 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 33 && BOOST_PP_ITERATION_FINISH_5 >= 33 +# define BOOST_PP_ITERATION_5 33 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 34 && BOOST_PP_ITERATION_FINISH_5 >= 34 +# define BOOST_PP_ITERATION_5 34 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 35 && BOOST_PP_ITERATION_FINISH_5 >= 35 +# define BOOST_PP_ITERATION_5 35 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 36 && BOOST_PP_ITERATION_FINISH_5 >= 36 +# define BOOST_PP_ITERATION_5 36 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 37 && BOOST_PP_ITERATION_FINISH_5 >= 37 +# define BOOST_PP_ITERATION_5 37 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 38 && BOOST_PP_ITERATION_FINISH_5 >= 38 +# define BOOST_PP_ITERATION_5 38 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 39 && BOOST_PP_ITERATION_FINISH_5 >= 39 +# define BOOST_PP_ITERATION_5 39 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 40 && BOOST_PP_ITERATION_FINISH_5 >= 40 +# define BOOST_PP_ITERATION_5 40 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 41 && BOOST_PP_ITERATION_FINISH_5 >= 41 +# define BOOST_PP_ITERATION_5 41 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 42 && BOOST_PP_ITERATION_FINISH_5 >= 42 +# define BOOST_PP_ITERATION_5 42 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 43 && BOOST_PP_ITERATION_FINISH_5 >= 43 +# define BOOST_PP_ITERATION_5 43 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 44 && BOOST_PP_ITERATION_FINISH_5 >= 44 +# define BOOST_PP_ITERATION_5 44 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 45 && BOOST_PP_ITERATION_FINISH_5 >= 45 +# define BOOST_PP_ITERATION_5 45 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 46 && BOOST_PP_ITERATION_FINISH_5 >= 46 +# define BOOST_PP_ITERATION_5 46 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 47 && BOOST_PP_ITERATION_FINISH_5 >= 47 +# define BOOST_PP_ITERATION_5 47 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 48 && BOOST_PP_ITERATION_FINISH_5 >= 48 +# define BOOST_PP_ITERATION_5 48 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 49 && BOOST_PP_ITERATION_FINISH_5 >= 49 +# define BOOST_PP_ITERATION_5 49 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 50 && BOOST_PP_ITERATION_FINISH_5 >= 50 +# define BOOST_PP_ITERATION_5 50 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 51 && BOOST_PP_ITERATION_FINISH_5 >= 51 +# define BOOST_PP_ITERATION_5 51 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 52 && BOOST_PP_ITERATION_FINISH_5 >= 52 +# define BOOST_PP_ITERATION_5 52 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 53 && BOOST_PP_ITERATION_FINISH_5 >= 53 +# define BOOST_PP_ITERATION_5 53 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 54 && BOOST_PP_ITERATION_FINISH_5 >= 54 +# define BOOST_PP_ITERATION_5 54 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 55 && BOOST_PP_ITERATION_FINISH_5 >= 55 +# define BOOST_PP_ITERATION_5 55 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 56 && BOOST_PP_ITERATION_FINISH_5 >= 56 +# define BOOST_PP_ITERATION_5 56 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 57 && BOOST_PP_ITERATION_FINISH_5 >= 57 +# define BOOST_PP_ITERATION_5 57 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 58 && BOOST_PP_ITERATION_FINISH_5 >= 58 +# define BOOST_PP_ITERATION_5 58 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 59 && BOOST_PP_ITERATION_FINISH_5 >= 59 +# define BOOST_PP_ITERATION_5 59 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 60 && BOOST_PP_ITERATION_FINISH_5 >= 60 +# define BOOST_PP_ITERATION_5 60 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 61 && BOOST_PP_ITERATION_FINISH_5 >= 61 +# define BOOST_PP_ITERATION_5 61 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 62 && BOOST_PP_ITERATION_FINISH_5 >= 62 +# define BOOST_PP_ITERATION_5 62 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 63 && BOOST_PP_ITERATION_FINISH_5 >= 63 +# define BOOST_PP_ITERATION_5 63 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 64 && BOOST_PP_ITERATION_FINISH_5 >= 64 +# define BOOST_PP_ITERATION_5 64 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 65 && BOOST_PP_ITERATION_FINISH_5 >= 65 +# define BOOST_PP_ITERATION_5 65 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 66 && BOOST_PP_ITERATION_FINISH_5 >= 66 +# define BOOST_PP_ITERATION_5 66 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 67 && BOOST_PP_ITERATION_FINISH_5 >= 67 +# define BOOST_PP_ITERATION_5 67 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 68 && BOOST_PP_ITERATION_FINISH_5 >= 68 +# define BOOST_PP_ITERATION_5 68 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 69 && BOOST_PP_ITERATION_FINISH_5 >= 69 +# define BOOST_PP_ITERATION_5 69 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 70 && BOOST_PP_ITERATION_FINISH_5 >= 70 +# define BOOST_PP_ITERATION_5 70 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 71 && BOOST_PP_ITERATION_FINISH_5 >= 71 +# define BOOST_PP_ITERATION_5 71 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 72 && BOOST_PP_ITERATION_FINISH_5 >= 72 +# define BOOST_PP_ITERATION_5 72 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 73 && BOOST_PP_ITERATION_FINISH_5 >= 73 +# define BOOST_PP_ITERATION_5 73 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 74 && BOOST_PP_ITERATION_FINISH_5 >= 74 +# define BOOST_PP_ITERATION_5 74 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 75 && BOOST_PP_ITERATION_FINISH_5 >= 75 +# define BOOST_PP_ITERATION_5 75 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 76 && BOOST_PP_ITERATION_FINISH_5 >= 76 +# define BOOST_PP_ITERATION_5 76 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 77 && BOOST_PP_ITERATION_FINISH_5 >= 77 +# define BOOST_PP_ITERATION_5 77 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 78 && BOOST_PP_ITERATION_FINISH_5 >= 78 +# define BOOST_PP_ITERATION_5 78 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 79 && BOOST_PP_ITERATION_FINISH_5 >= 79 +# define BOOST_PP_ITERATION_5 79 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 80 && BOOST_PP_ITERATION_FINISH_5 >= 80 +# define BOOST_PP_ITERATION_5 80 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 81 && BOOST_PP_ITERATION_FINISH_5 >= 81 +# define BOOST_PP_ITERATION_5 81 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 82 && BOOST_PP_ITERATION_FINISH_5 >= 82 +# define BOOST_PP_ITERATION_5 82 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 83 && BOOST_PP_ITERATION_FINISH_5 >= 83 +# define BOOST_PP_ITERATION_5 83 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 84 && BOOST_PP_ITERATION_FINISH_5 >= 84 +# define BOOST_PP_ITERATION_5 84 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 85 && BOOST_PP_ITERATION_FINISH_5 >= 85 +# define BOOST_PP_ITERATION_5 85 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 86 && BOOST_PP_ITERATION_FINISH_5 >= 86 +# define BOOST_PP_ITERATION_5 86 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 87 && BOOST_PP_ITERATION_FINISH_5 >= 87 +# define BOOST_PP_ITERATION_5 87 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 88 && BOOST_PP_ITERATION_FINISH_5 >= 88 +# define BOOST_PP_ITERATION_5 88 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 89 && BOOST_PP_ITERATION_FINISH_5 >= 89 +# define BOOST_PP_ITERATION_5 89 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 90 && BOOST_PP_ITERATION_FINISH_5 >= 90 +# define BOOST_PP_ITERATION_5 90 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 91 && BOOST_PP_ITERATION_FINISH_5 >= 91 +# define BOOST_PP_ITERATION_5 91 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 92 && BOOST_PP_ITERATION_FINISH_5 >= 92 +# define BOOST_PP_ITERATION_5 92 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 93 && BOOST_PP_ITERATION_FINISH_5 >= 93 +# define BOOST_PP_ITERATION_5 93 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 94 && BOOST_PP_ITERATION_FINISH_5 >= 94 +# define BOOST_PP_ITERATION_5 94 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 95 && BOOST_PP_ITERATION_FINISH_5 >= 95 +# define BOOST_PP_ITERATION_5 95 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 96 && BOOST_PP_ITERATION_FINISH_5 >= 96 +# define BOOST_PP_ITERATION_5 96 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 97 && BOOST_PP_ITERATION_FINISH_5 >= 97 +# define BOOST_PP_ITERATION_5 97 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 98 && BOOST_PP_ITERATION_FINISH_5 >= 98 +# define BOOST_PP_ITERATION_5 98 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 99 && BOOST_PP_ITERATION_FINISH_5 >= 99 +# define BOOST_PP_ITERATION_5 99 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 100 && BOOST_PP_ITERATION_FINISH_5 >= 100 +# define BOOST_PP_ITERATION_5 100 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 101 && BOOST_PP_ITERATION_FINISH_5 >= 101 +# define BOOST_PP_ITERATION_5 101 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 102 && BOOST_PP_ITERATION_FINISH_5 >= 102 +# define BOOST_PP_ITERATION_5 102 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 103 && BOOST_PP_ITERATION_FINISH_5 >= 103 +# define BOOST_PP_ITERATION_5 103 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 104 && BOOST_PP_ITERATION_FINISH_5 >= 104 +# define BOOST_PP_ITERATION_5 104 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 105 && BOOST_PP_ITERATION_FINISH_5 >= 105 +# define BOOST_PP_ITERATION_5 105 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 106 && BOOST_PP_ITERATION_FINISH_5 >= 106 +# define BOOST_PP_ITERATION_5 106 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 107 && BOOST_PP_ITERATION_FINISH_5 >= 107 +# define BOOST_PP_ITERATION_5 107 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 108 && BOOST_PP_ITERATION_FINISH_5 >= 108 +# define BOOST_PP_ITERATION_5 108 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 109 && BOOST_PP_ITERATION_FINISH_5 >= 109 +# define BOOST_PP_ITERATION_5 109 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 110 && BOOST_PP_ITERATION_FINISH_5 >= 110 +# define BOOST_PP_ITERATION_5 110 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 111 && BOOST_PP_ITERATION_FINISH_5 >= 111 +# define BOOST_PP_ITERATION_5 111 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 112 && BOOST_PP_ITERATION_FINISH_5 >= 112 +# define BOOST_PP_ITERATION_5 112 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 113 && BOOST_PP_ITERATION_FINISH_5 >= 113 +# define BOOST_PP_ITERATION_5 113 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 114 && BOOST_PP_ITERATION_FINISH_5 >= 114 +# define BOOST_PP_ITERATION_5 114 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 115 && BOOST_PP_ITERATION_FINISH_5 >= 115 +# define BOOST_PP_ITERATION_5 115 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 116 && BOOST_PP_ITERATION_FINISH_5 >= 116 +# define BOOST_PP_ITERATION_5 116 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 117 && BOOST_PP_ITERATION_FINISH_5 >= 117 +# define BOOST_PP_ITERATION_5 117 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 118 && BOOST_PP_ITERATION_FINISH_5 >= 118 +# define BOOST_PP_ITERATION_5 118 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 119 && BOOST_PP_ITERATION_FINISH_5 >= 119 +# define BOOST_PP_ITERATION_5 119 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 120 && BOOST_PP_ITERATION_FINISH_5 >= 120 +# define BOOST_PP_ITERATION_5 120 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 121 && BOOST_PP_ITERATION_FINISH_5 >= 121 +# define BOOST_PP_ITERATION_5 121 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 122 && BOOST_PP_ITERATION_FINISH_5 >= 122 +# define BOOST_PP_ITERATION_5 122 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 123 && BOOST_PP_ITERATION_FINISH_5 >= 123 +# define BOOST_PP_ITERATION_5 123 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 124 && BOOST_PP_ITERATION_FINISH_5 >= 124 +# define BOOST_PP_ITERATION_5 124 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 125 && BOOST_PP_ITERATION_FINISH_5 >= 125 +# define BOOST_PP_ITERATION_5 125 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 126 && BOOST_PP_ITERATION_FINISH_5 >= 126 +# define BOOST_PP_ITERATION_5 126 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 127 && BOOST_PP_ITERATION_FINISH_5 >= 127 +# define BOOST_PP_ITERATION_5 127 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 128 && BOOST_PP_ITERATION_FINISH_5 >= 128 +# define BOOST_PP_ITERATION_5 128 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 129 && BOOST_PP_ITERATION_FINISH_5 >= 129 +# define BOOST_PP_ITERATION_5 129 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 130 && BOOST_PP_ITERATION_FINISH_5 >= 130 +# define BOOST_PP_ITERATION_5 130 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 131 && BOOST_PP_ITERATION_FINISH_5 >= 131 +# define BOOST_PP_ITERATION_5 131 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 132 && BOOST_PP_ITERATION_FINISH_5 >= 132 +# define BOOST_PP_ITERATION_5 132 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 133 && BOOST_PP_ITERATION_FINISH_5 >= 133 +# define BOOST_PP_ITERATION_5 133 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 134 && BOOST_PP_ITERATION_FINISH_5 >= 134 +# define BOOST_PP_ITERATION_5 134 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 135 && BOOST_PP_ITERATION_FINISH_5 >= 135 +# define BOOST_PP_ITERATION_5 135 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 136 && BOOST_PP_ITERATION_FINISH_5 >= 136 +# define BOOST_PP_ITERATION_5 136 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 137 && BOOST_PP_ITERATION_FINISH_5 >= 137 +# define BOOST_PP_ITERATION_5 137 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 138 && BOOST_PP_ITERATION_FINISH_5 >= 138 +# define BOOST_PP_ITERATION_5 138 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 139 && BOOST_PP_ITERATION_FINISH_5 >= 139 +# define BOOST_PP_ITERATION_5 139 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 140 && BOOST_PP_ITERATION_FINISH_5 >= 140 +# define BOOST_PP_ITERATION_5 140 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 141 && BOOST_PP_ITERATION_FINISH_5 >= 141 +# define BOOST_PP_ITERATION_5 141 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 142 && BOOST_PP_ITERATION_FINISH_5 >= 142 +# define BOOST_PP_ITERATION_5 142 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 143 && BOOST_PP_ITERATION_FINISH_5 >= 143 +# define BOOST_PP_ITERATION_5 143 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 144 && BOOST_PP_ITERATION_FINISH_5 >= 144 +# define BOOST_PP_ITERATION_5 144 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 145 && BOOST_PP_ITERATION_FINISH_5 >= 145 +# define BOOST_PP_ITERATION_5 145 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 146 && BOOST_PP_ITERATION_FINISH_5 >= 146 +# define BOOST_PP_ITERATION_5 146 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 147 && BOOST_PP_ITERATION_FINISH_5 >= 147 +# define BOOST_PP_ITERATION_5 147 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 148 && BOOST_PP_ITERATION_FINISH_5 >= 148 +# define BOOST_PP_ITERATION_5 148 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 149 && BOOST_PP_ITERATION_FINISH_5 >= 149 +# define BOOST_PP_ITERATION_5 149 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 150 && BOOST_PP_ITERATION_FINISH_5 >= 150 +# define BOOST_PP_ITERATION_5 150 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 151 && BOOST_PP_ITERATION_FINISH_5 >= 151 +# define BOOST_PP_ITERATION_5 151 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 152 && BOOST_PP_ITERATION_FINISH_5 >= 152 +# define BOOST_PP_ITERATION_5 152 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 153 && BOOST_PP_ITERATION_FINISH_5 >= 153 +# define BOOST_PP_ITERATION_5 153 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 154 && BOOST_PP_ITERATION_FINISH_5 >= 154 +# define BOOST_PP_ITERATION_5 154 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 155 && BOOST_PP_ITERATION_FINISH_5 >= 155 +# define BOOST_PP_ITERATION_5 155 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 156 && BOOST_PP_ITERATION_FINISH_5 >= 156 +# define BOOST_PP_ITERATION_5 156 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 157 && BOOST_PP_ITERATION_FINISH_5 >= 157 +# define BOOST_PP_ITERATION_5 157 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 158 && BOOST_PP_ITERATION_FINISH_5 >= 158 +# define BOOST_PP_ITERATION_5 158 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 159 && BOOST_PP_ITERATION_FINISH_5 >= 159 +# define BOOST_PP_ITERATION_5 159 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 160 && BOOST_PP_ITERATION_FINISH_5 >= 160 +# define BOOST_PP_ITERATION_5 160 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 161 && BOOST_PP_ITERATION_FINISH_5 >= 161 +# define BOOST_PP_ITERATION_5 161 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 162 && BOOST_PP_ITERATION_FINISH_5 >= 162 +# define BOOST_PP_ITERATION_5 162 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 163 && BOOST_PP_ITERATION_FINISH_5 >= 163 +# define BOOST_PP_ITERATION_5 163 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 164 && BOOST_PP_ITERATION_FINISH_5 >= 164 +# define BOOST_PP_ITERATION_5 164 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 165 && BOOST_PP_ITERATION_FINISH_5 >= 165 +# define BOOST_PP_ITERATION_5 165 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 166 && BOOST_PP_ITERATION_FINISH_5 >= 166 +# define BOOST_PP_ITERATION_5 166 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 167 && BOOST_PP_ITERATION_FINISH_5 >= 167 +# define BOOST_PP_ITERATION_5 167 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 168 && BOOST_PP_ITERATION_FINISH_5 >= 168 +# define BOOST_PP_ITERATION_5 168 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 169 && BOOST_PP_ITERATION_FINISH_5 >= 169 +# define BOOST_PP_ITERATION_5 169 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 170 && BOOST_PP_ITERATION_FINISH_5 >= 170 +# define BOOST_PP_ITERATION_5 170 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 171 && BOOST_PP_ITERATION_FINISH_5 >= 171 +# define BOOST_PP_ITERATION_5 171 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 172 && BOOST_PP_ITERATION_FINISH_5 >= 172 +# define BOOST_PP_ITERATION_5 172 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 173 && BOOST_PP_ITERATION_FINISH_5 >= 173 +# define BOOST_PP_ITERATION_5 173 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 174 && BOOST_PP_ITERATION_FINISH_5 >= 174 +# define BOOST_PP_ITERATION_5 174 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 175 && BOOST_PP_ITERATION_FINISH_5 >= 175 +# define BOOST_PP_ITERATION_5 175 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 176 && BOOST_PP_ITERATION_FINISH_5 >= 176 +# define BOOST_PP_ITERATION_5 176 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 177 && BOOST_PP_ITERATION_FINISH_5 >= 177 +# define BOOST_PP_ITERATION_5 177 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 178 && BOOST_PP_ITERATION_FINISH_5 >= 178 +# define BOOST_PP_ITERATION_5 178 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 179 && BOOST_PP_ITERATION_FINISH_5 >= 179 +# define BOOST_PP_ITERATION_5 179 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 180 && BOOST_PP_ITERATION_FINISH_5 >= 180 +# define BOOST_PP_ITERATION_5 180 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 181 && BOOST_PP_ITERATION_FINISH_5 >= 181 +# define BOOST_PP_ITERATION_5 181 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 182 && BOOST_PP_ITERATION_FINISH_5 >= 182 +# define BOOST_PP_ITERATION_5 182 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 183 && BOOST_PP_ITERATION_FINISH_5 >= 183 +# define BOOST_PP_ITERATION_5 183 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 184 && BOOST_PP_ITERATION_FINISH_5 >= 184 +# define BOOST_PP_ITERATION_5 184 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 185 && BOOST_PP_ITERATION_FINISH_5 >= 185 +# define BOOST_PP_ITERATION_5 185 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 186 && BOOST_PP_ITERATION_FINISH_5 >= 186 +# define BOOST_PP_ITERATION_5 186 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 187 && BOOST_PP_ITERATION_FINISH_5 >= 187 +# define BOOST_PP_ITERATION_5 187 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 188 && BOOST_PP_ITERATION_FINISH_5 >= 188 +# define BOOST_PP_ITERATION_5 188 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 189 && BOOST_PP_ITERATION_FINISH_5 >= 189 +# define BOOST_PP_ITERATION_5 189 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 190 && BOOST_PP_ITERATION_FINISH_5 >= 190 +# define BOOST_PP_ITERATION_5 190 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 191 && BOOST_PP_ITERATION_FINISH_5 >= 191 +# define BOOST_PP_ITERATION_5 191 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 192 && BOOST_PP_ITERATION_FINISH_5 >= 192 +# define BOOST_PP_ITERATION_5 192 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 193 && BOOST_PP_ITERATION_FINISH_5 >= 193 +# define BOOST_PP_ITERATION_5 193 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 194 && BOOST_PP_ITERATION_FINISH_5 >= 194 +# define BOOST_PP_ITERATION_5 194 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 195 && BOOST_PP_ITERATION_FINISH_5 >= 195 +# define BOOST_PP_ITERATION_5 195 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 196 && BOOST_PP_ITERATION_FINISH_5 >= 196 +# define BOOST_PP_ITERATION_5 196 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 197 && BOOST_PP_ITERATION_FINISH_5 >= 197 +# define BOOST_PP_ITERATION_5 197 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 198 && BOOST_PP_ITERATION_FINISH_5 >= 198 +# define BOOST_PP_ITERATION_5 198 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 199 && BOOST_PP_ITERATION_FINISH_5 >= 199 +# define BOOST_PP_ITERATION_5 199 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 200 && BOOST_PP_ITERATION_FINISH_5 >= 200 +# define BOOST_PP_ITERATION_5 200 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 201 && BOOST_PP_ITERATION_FINISH_5 >= 201 +# define BOOST_PP_ITERATION_5 201 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 202 && BOOST_PP_ITERATION_FINISH_5 >= 202 +# define BOOST_PP_ITERATION_5 202 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 203 && BOOST_PP_ITERATION_FINISH_5 >= 203 +# define BOOST_PP_ITERATION_5 203 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 204 && BOOST_PP_ITERATION_FINISH_5 >= 204 +# define BOOST_PP_ITERATION_5 204 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 205 && BOOST_PP_ITERATION_FINISH_5 >= 205 +# define BOOST_PP_ITERATION_5 205 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 206 && BOOST_PP_ITERATION_FINISH_5 >= 206 +# define BOOST_PP_ITERATION_5 206 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 207 && BOOST_PP_ITERATION_FINISH_5 >= 207 +# define BOOST_PP_ITERATION_5 207 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 208 && BOOST_PP_ITERATION_FINISH_5 >= 208 +# define BOOST_PP_ITERATION_5 208 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 209 && BOOST_PP_ITERATION_FINISH_5 >= 209 +# define BOOST_PP_ITERATION_5 209 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 210 && BOOST_PP_ITERATION_FINISH_5 >= 210 +# define BOOST_PP_ITERATION_5 210 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 211 && BOOST_PP_ITERATION_FINISH_5 >= 211 +# define BOOST_PP_ITERATION_5 211 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 212 && BOOST_PP_ITERATION_FINISH_5 >= 212 +# define BOOST_PP_ITERATION_5 212 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 213 && BOOST_PP_ITERATION_FINISH_5 >= 213 +# define BOOST_PP_ITERATION_5 213 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 214 && BOOST_PP_ITERATION_FINISH_5 >= 214 +# define BOOST_PP_ITERATION_5 214 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 215 && BOOST_PP_ITERATION_FINISH_5 >= 215 +# define BOOST_PP_ITERATION_5 215 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 216 && BOOST_PP_ITERATION_FINISH_5 >= 216 +# define BOOST_PP_ITERATION_5 216 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 217 && BOOST_PP_ITERATION_FINISH_5 >= 217 +# define BOOST_PP_ITERATION_5 217 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 218 && BOOST_PP_ITERATION_FINISH_5 >= 218 +# define BOOST_PP_ITERATION_5 218 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 219 && BOOST_PP_ITERATION_FINISH_5 >= 219 +# define BOOST_PP_ITERATION_5 219 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 220 && BOOST_PP_ITERATION_FINISH_5 >= 220 +# define BOOST_PP_ITERATION_5 220 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 221 && BOOST_PP_ITERATION_FINISH_5 >= 221 +# define BOOST_PP_ITERATION_5 221 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 222 && BOOST_PP_ITERATION_FINISH_5 >= 222 +# define BOOST_PP_ITERATION_5 222 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 223 && BOOST_PP_ITERATION_FINISH_5 >= 223 +# define BOOST_PP_ITERATION_5 223 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 224 && BOOST_PP_ITERATION_FINISH_5 >= 224 +# define BOOST_PP_ITERATION_5 224 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 225 && BOOST_PP_ITERATION_FINISH_5 >= 225 +# define BOOST_PP_ITERATION_5 225 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 226 && BOOST_PP_ITERATION_FINISH_5 >= 226 +# define BOOST_PP_ITERATION_5 226 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 227 && BOOST_PP_ITERATION_FINISH_5 >= 227 +# define BOOST_PP_ITERATION_5 227 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 228 && BOOST_PP_ITERATION_FINISH_5 >= 228 +# define BOOST_PP_ITERATION_5 228 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 229 && BOOST_PP_ITERATION_FINISH_5 >= 229 +# define BOOST_PP_ITERATION_5 229 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 230 && BOOST_PP_ITERATION_FINISH_5 >= 230 +# define BOOST_PP_ITERATION_5 230 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 231 && BOOST_PP_ITERATION_FINISH_5 >= 231 +# define BOOST_PP_ITERATION_5 231 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 232 && BOOST_PP_ITERATION_FINISH_5 >= 232 +# define BOOST_PP_ITERATION_5 232 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 233 && BOOST_PP_ITERATION_FINISH_5 >= 233 +# define BOOST_PP_ITERATION_5 233 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 234 && BOOST_PP_ITERATION_FINISH_5 >= 234 +# define BOOST_PP_ITERATION_5 234 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 235 && BOOST_PP_ITERATION_FINISH_5 >= 235 +# define BOOST_PP_ITERATION_5 235 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 236 && BOOST_PP_ITERATION_FINISH_5 >= 236 +# define BOOST_PP_ITERATION_5 236 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 237 && BOOST_PP_ITERATION_FINISH_5 >= 237 +# define BOOST_PP_ITERATION_5 237 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 238 && BOOST_PP_ITERATION_FINISH_5 >= 238 +# define BOOST_PP_ITERATION_5 238 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 239 && BOOST_PP_ITERATION_FINISH_5 >= 239 +# define BOOST_PP_ITERATION_5 239 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 240 && BOOST_PP_ITERATION_FINISH_5 >= 240 +# define BOOST_PP_ITERATION_5 240 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 241 && BOOST_PP_ITERATION_FINISH_5 >= 241 +# define BOOST_PP_ITERATION_5 241 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 242 && BOOST_PP_ITERATION_FINISH_5 >= 242 +# define BOOST_PP_ITERATION_5 242 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 243 && BOOST_PP_ITERATION_FINISH_5 >= 243 +# define BOOST_PP_ITERATION_5 243 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 244 && BOOST_PP_ITERATION_FINISH_5 >= 244 +# define BOOST_PP_ITERATION_5 244 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 245 && BOOST_PP_ITERATION_FINISH_5 >= 245 +# define BOOST_PP_ITERATION_5 245 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 246 && BOOST_PP_ITERATION_FINISH_5 >= 246 +# define BOOST_PP_ITERATION_5 246 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 247 && BOOST_PP_ITERATION_FINISH_5 >= 247 +# define BOOST_PP_ITERATION_5 247 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 248 && BOOST_PP_ITERATION_FINISH_5 >= 248 +# define BOOST_PP_ITERATION_5 248 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 249 && BOOST_PP_ITERATION_FINISH_5 >= 249 +# define BOOST_PP_ITERATION_5 249 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 250 && BOOST_PP_ITERATION_FINISH_5 >= 250 +# define BOOST_PP_ITERATION_5 250 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 251 && BOOST_PP_ITERATION_FINISH_5 >= 251 +# define BOOST_PP_ITERATION_5 251 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 252 && BOOST_PP_ITERATION_FINISH_5 >= 252 +# define BOOST_PP_ITERATION_5 252 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 253 && BOOST_PP_ITERATION_FINISH_5 >= 253 +# define BOOST_PP_ITERATION_5 253 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 254 && BOOST_PP_ITERATION_FINISH_5 >= 254 +# define BOOST_PP_ITERATION_5 254 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 255 && BOOST_PP_ITERATION_FINISH_5 >= 255 +# define BOOST_PP_ITERATION_5 255 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_START_5 <= 256 && BOOST_PP_ITERATION_FINISH_5 >= 256 +# define BOOST_PP_ITERATION_5 256 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# endif +# +# undef BOOST_PP_ITERATION_DEPTH +# define BOOST_PP_ITERATION_DEPTH() 4 +# +# undef BOOST_PP_ITERATION_START_5 +# undef BOOST_PP_ITERATION_FINISH_5 +# undef BOOST_PP_FILENAME_5 +# +# undef BOOST_PP_ITERATION_FLAGS_5 +# undef BOOST_PP_ITERATION_PARAMS_5 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse1.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse1.hpp new file mode 100644 index 00000000..bf88d2f3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse1.hpp @@ -0,0 +1,1296 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if BOOST_PP_ITERATION_FINISH_1 <= 256 && BOOST_PP_ITERATION_START_1 >= 256 +# define BOOST_PP_ITERATION_1 256 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 255 && BOOST_PP_ITERATION_START_1 >= 255 +# define BOOST_PP_ITERATION_1 255 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 254 && BOOST_PP_ITERATION_START_1 >= 254 +# define BOOST_PP_ITERATION_1 254 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 253 && BOOST_PP_ITERATION_START_1 >= 253 +# define BOOST_PP_ITERATION_1 253 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 252 && BOOST_PP_ITERATION_START_1 >= 252 +# define BOOST_PP_ITERATION_1 252 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 251 && BOOST_PP_ITERATION_START_1 >= 251 +# define BOOST_PP_ITERATION_1 251 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 250 && BOOST_PP_ITERATION_START_1 >= 250 +# define BOOST_PP_ITERATION_1 250 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 249 && BOOST_PP_ITERATION_START_1 >= 249 +# define BOOST_PP_ITERATION_1 249 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 248 && BOOST_PP_ITERATION_START_1 >= 248 +# define BOOST_PP_ITERATION_1 248 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 247 && BOOST_PP_ITERATION_START_1 >= 247 +# define BOOST_PP_ITERATION_1 247 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 246 && BOOST_PP_ITERATION_START_1 >= 246 +# define BOOST_PP_ITERATION_1 246 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 245 && BOOST_PP_ITERATION_START_1 >= 245 +# define BOOST_PP_ITERATION_1 245 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 244 && BOOST_PP_ITERATION_START_1 >= 244 +# define BOOST_PP_ITERATION_1 244 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 243 && BOOST_PP_ITERATION_START_1 >= 243 +# define BOOST_PP_ITERATION_1 243 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 242 && BOOST_PP_ITERATION_START_1 >= 242 +# define BOOST_PP_ITERATION_1 242 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 241 && BOOST_PP_ITERATION_START_1 >= 241 +# define BOOST_PP_ITERATION_1 241 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 240 && BOOST_PP_ITERATION_START_1 >= 240 +# define BOOST_PP_ITERATION_1 240 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 239 && BOOST_PP_ITERATION_START_1 >= 239 +# define BOOST_PP_ITERATION_1 239 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 238 && BOOST_PP_ITERATION_START_1 >= 238 +# define BOOST_PP_ITERATION_1 238 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 237 && BOOST_PP_ITERATION_START_1 >= 237 +# define BOOST_PP_ITERATION_1 237 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 236 && BOOST_PP_ITERATION_START_1 >= 236 +# define BOOST_PP_ITERATION_1 236 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 235 && BOOST_PP_ITERATION_START_1 >= 235 +# define BOOST_PP_ITERATION_1 235 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 234 && BOOST_PP_ITERATION_START_1 >= 234 +# define BOOST_PP_ITERATION_1 234 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 233 && BOOST_PP_ITERATION_START_1 >= 233 +# define BOOST_PP_ITERATION_1 233 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 232 && BOOST_PP_ITERATION_START_1 >= 232 +# define BOOST_PP_ITERATION_1 232 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 231 && BOOST_PP_ITERATION_START_1 >= 231 +# define BOOST_PP_ITERATION_1 231 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 230 && BOOST_PP_ITERATION_START_1 >= 230 +# define BOOST_PP_ITERATION_1 230 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 229 && BOOST_PP_ITERATION_START_1 >= 229 +# define BOOST_PP_ITERATION_1 229 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 228 && BOOST_PP_ITERATION_START_1 >= 228 +# define BOOST_PP_ITERATION_1 228 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 227 && BOOST_PP_ITERATION_START_1 >= 227 +# define BOOST_PP_ITERATION_1 227 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 226 && BOOST_PP_ITERATION_START_1 >= 226 +# define BOOST_PP_ITERATION_1 226 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 225 && BOOST_PP_ITERATION_START_1 >= 225 +# define BOOST_PP_ITERATION_1 225 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 224 && BOOST_PP_ITERATION_START_1 >= 224 +# define BOOST_PP_ITERATION_1 224 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 223 && BOOST_PP_ITERATION_START_1 >= 223 +# define BOOST_PP_ITERATION_1 223 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 222 && BOOST_PP_ITERATION_START_1 >= 222 +# define BOOST_PP_ITERATION_1 222 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 221 && BOOST_PP_ITERATION_START_1 >= 221 +# define BOOST_PP_ITERATION_1 221 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 220 && BOOST_PP_ITERATION_START_1 >= 220 +# define BOOST_PP_ITERATION_1 220 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 219 && BOOST_PP_ITERATION_START_1 >= 219 +# define BOOST_PP_ITERATION_1 219 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 218 && BOOST_PP_ITERATION_START_1 >= 218 +# define BOOST_PP_ITERATION_1 218 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 217 && BOOST_PP_ITERATION_START_1 >= 217 +# define BOOST_PP_ITERATION_1 217 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 216 && BOOST_PP_ITERATION_START_1 >= 216 +# define BOOST_PP_ITERATION_1 216 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 215 && BOOST_PP_ITERATION_START_1 >= 215 +# define BOOST_PP_ITERATION_1 215 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 214 && BOOST_PP_ITERATION_START_1 >= 214 +# define BOOST_PP_ITERATION_1 214 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 213 && BOOST_PP_ITERATION_START_1 >= 213 +# define BOOST_PP_ITERATION_1 213 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 212 && BOOST_PP_ITERATION_START_1 >= 212 +# define BOOST_PP_ITERATION_1 212 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 211 && BOOST_PP_ITERATION_START_1 >= 211 +# define BOOST_PP_ITERATION_1 211 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 210 && BOOST_PP_ITERATION_START_1 >= 210 +# define BOOST_PP_ITERATION_1 210 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 209 && BOOST_PP_ITERATION_START_1 >= 209 +# define BOOST_PP_ITERATION_1 209 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 208 && BOOST_PP_ITERATION_START_1 >= 208 +# define BOOST_PP_ITERATION_1 208 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 207 && BOOST_PP_ITERATION_START_1 >= 207 +# define BOOST_PP_ITERATION_1 207 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 206 && BOOST_PP_ITERATION_START_1 >= 206 +# define BOOST_PP_ITERATION_1 206 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 205 && BOOST_PP_ITERATION_START_1 >= 205 +# define BOOST_PP_ITERATION_1 205 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 204 && BOOST_PP_ITERATION_START_1 >= 204 +# define BOOST_PP_ITERATION_1 204 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 203 && BOOST_PP_ITERATION_START_1 >= 203 +# define BOOST_PP_ITERATION_1 203 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 202 && BOOST_PP_ITERATION_START_1 >= 202 +# define BOOST_PP_ITERATION_1 202 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 201 && BOOST_PP_ITERATION_START_1 >= 201 +# define BOOST_PP_ITERATION_1 201 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 200 && BOOST_PP_ITERATION_START_1 >= 200 +# define BOOST_PP_ITERATION_1 200 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 199 && BOOST_PP_ITERATION_START_1 >= 199 +# define BOOST_PP_ITERATION_1 199 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 198 && BOOST_PP_ITERATION_START_1 >= 198 +# define BOOST_PP_ITERATION_1 198 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 197 && BOOST_PP_ITERATION_START_1 >= 197 +# define BOOST_PP_ITERATION_1 197 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 196 && BOOST_PP_ITERATION_START_1 >= 196 +# define BOOST_PP_ITERATION_1 196 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 195 && BOOST_PP_ITERATION_START_1 >= 195 +# define BOOST_PP_ITERATION_1 195 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 194 && BOOST_PP_ITERATION_START_1 >= 194 +# define BOOST_PP_ITERATION_1 194 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 193 && BOOST_PP_ITERATION_START_1 >= 193 +# define BOOST_PP_ITERATION_1 193 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 192 && BOOST_PP_ITERATION_START_1 >= 192 +# define BOOST_PP_ITERATION_1 192 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 191 && BOOST_PP_ITERATION_START_1 >= 191 +# define BOOST_PP_ITERATION_1 191 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 190 && BOOST_PP_ITERATION_START_1 >= 190 +# define BOOST_PP_ITERATION_1 190 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 189 && BOOST_PP_ITERATION_START_1 >= 189 +# define BOOST_PP_ITERATION_1 189 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 188 && BOOST_PP_ITERATION_START_1 >= 188 +# define BOOST_PP_ITERATION_1 188 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 187 && BOOST_PP_ITERATION_START_1 >= 187 +# define BOOST_PP_ITERATION_1 187 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 186 && BOOST_PP_ITERATION_START_1 >= 186 +# define BOOST_PP_ITERATION_1 186 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 185 && BOOST_PP_ITERATION_START_1 >= 185 +# define BOOST_PP_ITERATION_1 185 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 184 && BOOST_PP_ITERATION_START_1 >= 184 +# define BOOST_PP_ITERATION_1 184 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 183 && BOOST_PP_ITERATION_START_1 >= 183 +# define BOOST_PP_ITERATION_1 183 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 182 && BOOST_PP_ITERATION_START_1 >= 182 +# define BOOST_PP_ITERATION_1 182 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 181 && BOOST_PP_ITERATION_START_1 >= 181 +# define BOOST_PP_ITERATION_1 181 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 180 && BOOST_PP_ITERATION_START_1 >= 180 +# define BOOST_PP_ITERATION_1 180 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 179 && BOOST_PP_ITERATION_START_1 >= 179 +# define BOOST_PP_ITERATION_1 179 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 178 && BOOST_PP_ITERATION_START_1 >= 178 +# define BOOST_PP_ITERATION_1 178 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 177 && BOOST_PP_ITERATION_START_1 >= 177 +# define BOOST_PP_ITERATION_1 177 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 176 && BOOST_PP_ITERATION_START_1 >= 176 +# define BOOST_PP_ITERATION_1 176 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 175 && BOOST_PP_ITERATION_START_1 >= 175 +# define BOOST_PP_ITERATION_1 175 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 174 && BOOST_PP_ITERATION_START_1 >= 174 +# define BOOST_PP_ITERATION_1 174 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 173 && BOOST_PP_ITERATION_START_1 >= 173 +# define BOOST_PP_ITERATION_1 173 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 172 && BOOST_PP_ITERATION_START_1 >= 172 +# define BOOST_PP_ITERATION_1 172 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 171 && BOOST_PP_ITERATION_START_1 >= 171 +# define BOOST_PP_ITERATION_1 171 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 170 && BOOST_PP_ITERATION_START_1 >= 170 +# define BOOST_PP_ITERATION_1 170 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 169 && BOOST_PP_ITERATION_START_1 >= 169 +# define BOOST_PP_ITERATION_1 169 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 168 && BOOST_PP_ITERATION_START_1 >= 168 +# define BOOST_PP_ITERATION_1 168 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 167 && BOOST_PP_ITERATION_START_1 >= 167 +# define BOOST_PP_ITERATION_1 167 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 166 && BOOST_PP_ITERATION_START_1 >= 166 +# define BOOST_PP_ITERATION_1 166 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 165 && BOOST_PP_ITERATION_START_1 >= 165 +# define BOOST_PP_ITERATION_1 165 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 164 && BOOST_PP_ITERATION_START_1 >= 164 +# define BOOST_PP_ITERATION_1 164 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 163 && BOOST_PP_ITERATION_START_1 >= 163 +# define BOOST_PP_ITERATION_1 163 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 162 && BOOST_PP_ITERATION_START_1 >= 162 +# define BOOST_PP_ITERATION_1 162 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 161 && BOOST_PP_ITERATION_START_1 >= 161 +# define BOOST_PP_ITERATION_1 161 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 160 && BOOST_PP_ITERATION_START_1 >= 160 +# define BOOST_PP_ITERATION_1 160 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 159 && BOOST_PP_ITERATION_START_1 >= 159 +# define BOOST_PP_ITERATION_1 159 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 158 && BOOST_PP_ITERATION_START_1 >= 158 +# define BOOST_PP_ITERATION_1 158 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 157 && BOOST_PP_ITERATION_START_1 >= 157 +# define BOOST_PP_ITERATION_1 157 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 156 && BOOST_PP_ITERATION_START_1 >= 156 +# define BOOST_PP_ITERATION_1 156 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 155 && BOOST_PP_ITERATION_START_1 >= 155 +# define BOOST_PP_ITERATION_1 155 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 154 && BOOST_PP_ITERATION_START_1 >= 154 +# define BOOST_PP_ITERATION_1 154 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 153 && BOOST_PP_ITERATION_START_1 >= 153 +# define BOOST_PP_ITERATION_1 153 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 152 && BOOST_PP_ITERATION_START_1 >= 152 +# define BOOST_PP_ITERATION_1 152 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 151 && BOOST_PP_ITERATION_START_1 >= 151 +# define BOOST_PP_ITERATION_1 151 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 150 && BOOST_PP_ITERATION_START_1 >= 150 +# define BOOST_PP_ITERATION_1 150 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 149 && BOOST_PP_ITERATION_START_1 >= 149 +# define BOOST_PP_ITERATION_1 149 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 148 && BOOST_PP_ITERATION_START_1 >= 148 +# define BOOST_PP_ITERATION_1 148 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 147 && BOOST_PP_ITERATION_START_1 >= 147 +# define BOOST_PP_ITERATION_1 147 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 146 && BOOST_PP_ITERATION_START_1 >= 146 +# define BOOST_PP_ITERATION_1 146 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 145 && BOOST_PP_ITERATION_START_1 >= 145 +# define BOOST_PP_ITERATION_1 145 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 144 && BOOST_PP_ITERATION_START_1 >= 144 +# define BOOST_PP_ITERATION_1 144 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 143 && BOOST_PP_ITERATION_START_1 >= 143 +# define BOOST_PP_ITERATION_1 143 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 142 && BOOST_PP_ITERATION_START_1 >= 142 +# define BOOST_PP_ITERATION_1 142 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 141 && BOOST_PP_ITERATION_START_1 >= 141 +# define BOOST_PP_ITERATION_1 141 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 140 && BOOST_PP_ITERATION_START_1 >= 140 +# define BOOST_PP_ITERATION_1 140 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 139 && BOOST_PP_ITERATION_START_1 >= 139 +# define BOOST_PP_ITERATION_1 139 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 138 && BOOST_PP_ITERATION_START_1 >= 138 +# define BOOST_PP_ITERATION_1 138 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 137 && BOOST_PP_ITERATION_START_1 >= 137 +# define BOOST_PP_ITERATION_1 137 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 136 && BOOST_PP_ITERATION_START_1 >= 136 +# define BOOST_PP_ITERATION_1 136 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 135 && BOOST_PP_ITERATION_START_1 >= 135 +# define BOOST_PP_ITERATION_1 135 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 134 && BOOST_PP_ITERATION_START_1 >= 134 +# define BOOST_PP_ITERATION_1 134 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 133 && BOOST_PP_ITERATION_START_1 >= 133 +# define BOOST_PP_ITERATION_1 133 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 132 && BOOST_PP_ITERATION_START_1 >= 132 +# define BOOST_PP_ITERATION_1 132 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 131 && BOOST_PP_ITERATION_START_1 >= 131 +# define BOOST_PP_ITERATION_1 131 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 130 && BOOST_PP_ITERATION_START_1 >= 130 +# define BOOST_PP_ITERATION_1 130 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 129 && BOOST_PP_ITERATION_START_1 >= 129 +# define BOOST_PP_ITERATION_1 129 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 128 && BOOST_PP_ITERATION_START_1 >= 128 +# define BOOST_PP_ITERATION_1 128 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 127 && BOOST_PP_ITERATION_START_1 >= 127 +# define BOOST_PP_ITERATION_1 127 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 126 && BOOST_PP_ITERATION_START_1 >= 126 +# define BOOST_PP_ITERATION_1 126 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 125 && BOOST_PP_ITERATION_START_1 >= 125 +# define BOOST_PP_ITERATION_1 125 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 124 && BOOST_PP_ITERATION_START_1 >= 124 +# define BOOST_PP_ITERATION_1 124 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 123 && BOOST_PP_ITERATION_START_1 >= 123 +# define BOOST_PP_ITERATION_1 123 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 122 && BOOST_PP_ITERATION_START_1 >= 122 +# define BOOST_PP_ITERATION_1 122 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 121 && BOOST_PP_ITERATION_START_1 >= 121 +# define BOOST_PP_ITERATION_1 121 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 120 && BOOST_PP_ITERATION_START_1 >= 120 +# define BOOST_PP_ITERATION_1 120 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 119 && BOOST_PP_ITERATION_START_1 >= 119 +# define BOOST_PP_ITERATION_1 119 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 118 && BOOST_PP_ITERATION_START_1 >= 118 +# define BOOST_PP_ITERATION_1 118 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 117 && BOOST_PP_ITERATION_START_1 >= 117 +# define BOOST_PP_ITERATION_1 117 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 116 && BOOST_PP_ITERATION_START_1 >= 116 +# define BOOST_PP_ITERATION_1 116 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 115 && BOOST_PP_ITERATION_START_1 >= 115 +# define BOOST_PP_ITERATION_1 115 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 114 && BOOST_PP_ITERATION_START_1 >= 114 +# define BOOST_PP_ITERATION_1 114 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 113 && BOOST_PP_ITERATION_START_1 >= 113 +# define BOOST_PP_ITERATION_1 113 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 112 && BOOST_PP_ITERATION_START_1 >= 112 +# define BOOST_PP_ITERATION_1 112 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 111 && BOOST_PP_ITERATION_START_1 >= 111 +# define BOOST_PP_ITERATION_1 111 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 110 && BOOST_PP_ITERATION_START_1 >= 110 +# define BOOST_PP_ITERATION_1 110 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 109 && BOOST_PP_ITERATION_START_1 >= 109 +# define BOOST_PP_ITERATION_1 109 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 108 && BOOST_PP_ITERATION_START_1 >= 108 +# define BOOST_PP_ITERATION_1 108 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 107 && BOOST_PP_ITERATION_START_1 >= 107 +# define BOOST_PP_ITERATION_1 107 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 106 && BOOST_PP_ITERATION_START_1 >= 106 +# define BOOST_PP_ITERATION_1 106 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 105 && BOOST_PP_ITERATION_START_1 >= 105 +# define BOOST_PP_ITERATION_1 105 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 104 && BOOST_PP_ITERATION_START_1 >= 104 +# define BOOST_PP_ITERATION_1 104 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 103 && BOOST_PP_ITERATION_START_1 >= 103 +# define BOOST_PP_ITERATION_1 103 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 102 && BOOST_PP_ITERATION_START_1 >= 102 +# define BOOST_PP_ITERATION_1 102 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 101 && BOOST_PP_ITERATION_START_1 >= 101 +# define BOOST_PP_ITERATION_1 101 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 100 && BOOST_PP_ITERATION_START_1 >= 100 +# define BOOST_PP_ITERATION_1 100 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 99 && BOOST_PP_ITERATION_START_1 >= 99 +# define BOOST_PP_ITERATION_1 99 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 98 && BOOST_PP_ITERATION_START_1 >= 98 +# define BOOST_PP_ITERATION_1 98 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 97 && BOOST_PP_ITERATION_START_1 >= 97 +# define BOOST_PP_ITERATION_1 97 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 96 && BOOST_PP_ITERATION_START_1 >= 96 +# define BOOST_PP_ITERATION_1 96 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 95 && BOOST_PP_ITERATION_START_1 >= 95 +# define BOOST_PP_ITERATION_1 95 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 94 && BOOST_PP_ITERATION_START_1 >= 94 +# define BOOST_PP_ITERATION_1 94 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 93 && BOOST_PP_ITERATION_START_1 >= 93 +# define BOOST_PP_ITERATION_1 93 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 92 && BOOST_PP_ITERATION_START_1 >= 92 +# define BOOST_PP_ITERATION_1 92 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 91 && BOOST_PP_ITERATION_START_1 >= 91 +# define BOOST_PP_ITERATION_1 91 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 90 && BOOST_PP_ITERATION_START_1 >= 90 +# define BOOST_PP_ITERATION_1 90 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 89 && BOOST_PP_ITERATION_START_1 >= 89 +# define BOOST_PP_ITERATION_1 89 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 88 && BOOST_PP_ITERATION_START_1 >= 88 +# define BOOST_PP_ITERATION_1 88 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 87 && BOOST_PP_ITERATION_START_1 >= 87 +# define BOOST_PP_ITERATION_1 87 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 86 && BOOST_PP_ITERATION_START_1 >= 86 +# define BOOST_PP_ITERATION_1 86 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 85 && BOOST_PP_ITERATION_START_1 >= 85 +# define BOOST_PP_ITERATION_1 85 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 84 && BOOST_PP_ITERATION_START_1 >= 84 +# define BOOST_PP_ITERATION_1 84 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 83 && BOOST_PP_ITERATION_START_1 >= 83 +# define BOOST_PP_ITERATION_1 83 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 82 && BOOST_PP_ITERATION_START_1 >= 82 +# define BOOST_PP_ITERATION_1 82 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 81 && BOOST_PP_ITERATION_START_1 >= 81 +# define BOOST_PP_ITERATION_1 81 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 80 && BOOST_PP_ITERATION_START_1 >= 80 +# define BOOST_PP_ITERATION_1 80 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 79 && BOOST_PP_ITERATION_START_1 >= 79 +# define BOOST_PP_ITERATION_1 79 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 78 && BOOST_PP_ITERATION_START_1 >= 78 +# define BOOST_PP_ITERATION_1 78 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 77 && BOOST_PP_ITERATION_START_1 >= 77 +# define BOOST_PP_ITERATION_1 77 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 76 && BOOST_PP_ITERATION_START_1 >= 76 +# define BOOST_PP_ITERATION_1 76 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 75 && BOOST_PP_ITERATION_START_1 >= 75 +# define BOOST_PP_ITERATION_1 75 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 74 && BOOST_PP_ITERATION_START_1 >= 74 +# define BOOST_PP_ITERATION_1 74 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 73 && BOOST_PP_ITERATION_START_1 >= 73 +# define BOOST_PP_ITERATION_1 73 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 72 && BOOST_PP_ITERATION_START_1 >= 72 +# define BOOST_PP_ITERATION_1 72 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 71 && BOOST_PP_ITERATION_START_1 >= 71 +# define BOOST_PP_ITERATION_1 71 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 70 && BOOST_PP_ITERATION_START_1 >= 70 +# define BOOST_PP_ITERATION_1 70 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 69 && BOOST_PP_ITERATION_START_1 >= 69 +# define BOOST_PP_ITERATION_1 69 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 68 && BOOST_PP_ITERATION_START_1 >= 68 +# define BOOST_PP_ITERATION_1 68 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 67 && BOOST_PP_ITERATION_START_1 >= 67 +# define BOOST_PP_ITERATION_1 67 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 66 && BOOST_PP_ITERATION_START_1 >= 66 +# define BOOST_PP_ITERATION_1 66 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 65 && BOOST_PP_ITERATION_START_1 >= 65 +# define BOOST_PP_ITERATION_1 65 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 64 && BOOST_PP_ITERATION_START_1 >= 64 +# define BOOST_PP_ITERATION_1 64 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 63 && BOOST_PP_ITERATION_START_1 >= 63 +# define BOOST_PP_ITERATION_1 63 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 62 && BOOST_PP_ITERATION_START_1 >= 62 +# define BOOST_PP_ITERATION_1 62 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 61 && BOOST_PP_ITERATION_START_1 >= 61 +# define BOOST_PP_ITERATION_1 61 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 60 && BOOST_PP_ITERATION_START_1 >= 60 +# define BOOST_PP_ITERATION_1 60 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 59 && BOOST_PP_ITERATION_START_1 >= 59 +# define BOOST_PP_ITERATION_1 59 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 58 && BOOST_PP_ITERATION_START_1 >= 58 +# define BOOST_PP_ITERATION_1 58 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 57 && BOOST_PP_ITERATION_START_1 >= 57 +# define BOOST_PP_ITERATION_1 57 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 56 && BOOST_PP_ITERATION_START_1 >= 56 +# define BOOST_PP_ITERATION_1 56 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 55 && BOOST_PP_ITERATION_START_1 >= 55 +# define BOOST_PP_ITERATION_1 55 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 54 && BOOST_PP_ITERATION_START_1 >= 54 +# define BOOST_PP_ITERATION_1 54 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 53 && BOOST_PP_ITERATION_START_1 >= 53 +# define BOOST_PP_ITERATION_1 53 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 52 && BOOST_PP_ITERATION_START_1 >= 52 +# define BOOST_PP_ITERATION_1 52 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 51 && BOOST_PP_ITERATION_START_1 >= 51 +# define BOOST_PP_ITERATION_1 51 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 50 && BOOST_PP_ITERATION_START_1 >= 50 +# define BOOST_PP_ITERATION_1 50 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 49 && BOOST_PP_ITERATION_START_1 >= 49 +# define BOOST_PP_ITERATION_1 49 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 48 && BOOST_PP_ITERATION_START_1 >= 48 +# define BOOST_PP_ITERATION_1 48 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 47 && BOOST_PP_ITERATION_START_1 >= 47 +# define BOOST_PP_ITERATION_1 47 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 46 && BOOST_PP_ITERATION_START_1 >= 46 +# define BOOST_PP_ITERATION_1 46 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 45 && BOOST_PP_ITERATION_START_1 >= 45 +# define BOOST_PP_ITERATION_1 45 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 44 && BOOST_PP_ITERATION_START_1 >= 44 +# define BOOST_PP_ITERATION_1 44 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 43 && BOOST_PP_ITERATION_START_1 >= 43 +# define BOOST_PP_ITERATION_1 43 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 42 && BOOST_PP_ITERATION_START_1 >= 42 +# define BOOST_PP_ITERATION_1 42 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 41 && BOOST_PP_ITERATION_START_1 >= 41 +# define BOOST_PP_ITERATION_1 41 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 40 && BOOST_PP_ITERATION_START_1 >= 40 +# define BOOST_PP_ITERATION_1 40 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 39 && BOOST_PP_ITERATION_START_1 >= 39 +# define BOOST_PP_ITERATION_1 39 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 38 && BOOST_PP_ITERATION_START_1 >= 38 +# define BOOST_PP_ITERATION_1 38 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 37 && BOOST_PP_ITERATION_START_1 >= 37 +# define BOOST_PP_ITERATION_1 37 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 36 && BOOST_PP_ITERATION_START_1 >= 36 +# define BOOST_PP_ITERATION_1 36 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 35 && BOOST_PP_ITERATION_START_1 >= 35 +# define BOOST_PP_ITERATION_1 35 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 34 && BOOST_PP_ITERATION_START_1 >= 34 +# define BOOST_PP_ITERATION_1 34 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 33 && BOOST_PP_ITERATION_START_1 >= 33 +# define BOOST_PP_ITERATION_1 33 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 32 && BOOST_PP_ITERATION_START_1 >= 32 +# define BOOST_PP_ITERATION_1 32 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 31 && BOOST_PP_ITERATION_START_1 >= 31 +# define BOOST_PP_ITERATION_1 31 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 30 && BOOST_PP_ITERATION_START_1 >= 30 +# define BOOST_PP_ITERATION_1 30 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 29 && BOOST_PP_ITERATION_START_1 >= 29 +# define BOOST_PP_ITERATION_1 29 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 28 && BOOST_PP_ITERATION_START_1 >= 28 +# define BOOST_PP_ITERATION_1 28 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 27 && BOOST_PP_ITERATION_START_1 >= 27 +# define BOOST_PP_ITERATION_1 27 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 26 && BOOST_PP_ITERATION_START_1 >= 26 +# define BOOST_PP_ITERATION_1 26 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 25 && BOOST_PP_ITERATION_START_1 >= 25 +# define BOOST_PP_ITERATION_1 25 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 24 && BOOST_PP_ITERATION_START_1 >= 24 +# define BOOST_PP_ITERATION_1 24 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 23 && BOOST_PP_ITERATION_START_1 >= 23 +# define BOOST_PP_ITERATION_1 23 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 22 && BOOST_PP_ITERATION_START_1 >= 22 +# define BOOST_PP_ITERATION_1 22 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 21 && BOOST_PP_ITERATION_START_1 >= 21 +# define BOOST_PP_ITERATION_1 21 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 20 && BOOST_PP_ITERATION_START_1 >= 20 +# define BOOST_PP_ITERATION_1 20 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 19 && BOOST_PP_ITERATION_START_1 >= 19 +# define BOOST_PP_ITERATION_1 19 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 18 && BOOST_PP_ITERATION_START_1 >= 18 +# define BOOST_PP_ITERATION_1 18 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 17 && BOOST_PP_ITERATION_START_1 >= 17 +# define BOOST_PP_ITERATION_1 17 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 16 && BOOST_PP_ITERATION_START_1 >= 16 +# define BOOST_PP_ITERATION_1 16 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 15 && BOOST_PP_ITERATION_START_1 >= 15 +# define BOOST_PP_ITERATION_1 15 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 14 && BOOST_PP_ITERATION_START_1 >= 14 +# define BOOST_PP_ITERATION_1 14 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 13 && BOOST_PP_ITERATION_START_1 >= 13 +# define BOOST_PP_ITERATION_1 13 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 12 && BOOST_PP_ITERATION_START_1 >= 12 +# define BOOST_PP_ITERATION_1 12 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 11 && BOOST_PP_ITERATION_START_1 >= 11 +# define BOOST_PP_ITERATION_1 11 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 10 && BOOST_PP_ITERATION_START_1 >= 10 +# define BOOST_PP_ITERATION_1 10 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 9 && BOOST_PP_ITERATION_START_1 >= 9 +# define BOOST_PP_ITERATION_1 9 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 8 && BOOST_PP_ITERATION_START_1 >= 8 +# define BOOST_PP_ITERATION_1 8 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 7 && BOOST_PP_ITERATION_START_1 >= 7 +# define BOOST_PP_ITERATION_1 7 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 6 && BOOST_PP_ITERATION_START_1 >= 6 +# define BOOST_PP_ITERATION_1 6 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 5 && BOOST_PP_ITERATION_START_1 >= 5 +# define BOOST_PP_ITERATION_1 5 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 4 && BOOST_PP_ITERATION_START_1 >= 4 +# define BOOST_PP_ITERATION_1 4 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 3 && BOOST_PP_ITERATION_START_1 >= 3 +# define BOOST_PP_ITERATION_1 3 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 2 && BOOST_PP_ITERATION_START_1 >= 2 +# define BOOST_PP_ITERATION_1 2 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 1 && BOOST_PP_ITERATION_START_1 >= 1 +# define BOOST_PP_ITERATION_1 1 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif +# if BOOST_PP_ITERATION_FINISH_1 <= 0 && BOOST_PP_ITERATION_START_1 >= 0 +# define BOOST_PP_ITERATION_1 0 +# include BOOST_PP_FILENAME_1 +# undef BOOST_PP_ITERATION_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse2.hpp new file mode 100644 index 00000000..521bd249 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse2.hpp @@ -0,0 +1,1296 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if BOOST_PP_ITERATION_FINISH_2 <= 256 && BOOST_PP_ITERATION_START_2 >= 256 +# define BOOST_PP_ITERATION_2 256 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 255 && BOOST_PP_ITERATION_START_2 >= 255 +# define BOOST_PP_ITERATION_2 255 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 254 && BOOST_PP_ITERATION_START_2 >= 254 +# define BOOST_PP_ITERATION_2 254 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 253 && BOOST_PP_ITERATION_START_2 >= 253 +# define BOOST_PP_ITERATION_2 253 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 252 && BOOST_PP_ITERATION_START_2 >= 252 +# define BOOST_PP_ITERATION_2 252 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 251 && BOOST_PP_ITERATION_START_2 >= 251 +# define BOOST_PP_ITERATION_2 251 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 250 && BOOST_PP_ITERATION_START_2 >= 250 +# define BOOST_PP_ITERATION_2 250 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 249 && BOOST_PP_ITERATION_START_2 >= 249 +# define BOOST_PP_ITERATION_2 249 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 248 && BOOST_PP_ITERATION_START_2 >= 248 +# define BOOST_PP_ITERATION_2 248 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 247 && BOOST_PP_ITERATION_START_2 >= 247 +# define BOOST_PP_ITERATION_2 247 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 246 && BOOST_PP_ITERATION_START_2 >= 246 +# define BOOST_PP_ITERATION_2 246 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 245 && BOOST_PP_ITERATION_START_2 >= 245 +# define BOOST_PP_ITERATION_2 245 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 244 && BOOST_PP_ITERATION_START_2 >= 244 +# define BOOST_PP_ITERATION_2 244 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 243 && BOOST_PP_ITERATION_START_2 >= 243 +# define BOOST_PP_ITERATION_2 243 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 242 && BOOST_PP_ITERATION_START_2 >= 242 +# define BOOST_PP_ITERATION_2 242 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 241 && BOOST_PP_ITERATION_START_2 >= 241 +# define BOOST_PP_ITERATION_2 241 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 240 && BOOST_PP_ITERATION_START_2 >= 240 +# define BOOST_PP_ITERATION_2 240 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 239 && BOOST_PP_ITERATION_START_2 >= 239 +# define BOOST_PP_ITERATION_2 239 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 238 && BOOST_PP_ITERATION_START_2 >= 238 +# define BOOST_PP_ITERATION_2 238 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 237 && BOOST_PP_ITERATION_START_2 >= 237 +# define BOOST_PP_ITERATION_2 237 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 236 && BOOST_PP_ITERATION_START_2 >= 236 +# define BOOST_PP_ITERATION_2 236 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 235 && BOOST_PP_ITERATION_START_2 >= 235 +# define BOOST_PP_ITERATION_2 235 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 234 && BOOST_PP_ITERATION_START_2 >= 234 +# define BOOST_PP_ITERATION_2 234 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 233 && BOOST_PP_ITERATION_START_2 >= 233 +# define BOOST_PP_ITERATION_2 233 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 232 && BOOST_PP_ITERATION_START_2 >= 232 +# define BOOST_PP_ITERATION_2 232 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 231 && BOOST_PP_ITERATION_START_2 >= 231 +# define BOOST_PP_ITERATION_2 231 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 230 && BOOST_PP_ITERATION_START_2 >= 230 +# define BOOST_PP_ITERATION_2 230 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 229 && BOOST_PP_ITERATION_START_2 >= 229 +# define BOOST_PP_ITERATION_2 229 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 228 && BOOST_PP_ITERATION_START_2 >= 228 +# define BOOST_PP_ITERATION_2 228 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 227 && BOOST_PP_ITERATION_START_2 >= 227 +# define BOOST_PP_ITERATION_2 227 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 226 && BOOST_PP_ITERATION_START_2 >= 226 +# define BOOST_PP_ITERATION_2 226 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 225 && BOOST_PP_ITERATION_START_2 >= 225 +# define BOOST_PP_ITERATION_2 225 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 224 && BOOST_PP_ITERATION_START_2 >= 224 +# define BOOST_PP_ITERATION_2 224 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 223 && BOOST_PP_ITERATION_START_2 >= 223 +# define BOOST_PP_ITERATION_2 223 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 222 && BOOST_PP_ITERATION_START_2 >= 222 +# define BOOST_PP_ITERATION_2 222 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 221 && BOOST_PP_ITERATION_START_2 >= 221 +# define BOOST_PP_ITERATION_2 221 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 220 && BOOST_PP_ITERATION_START_2 >= 220 +# define BOOST_PP_ITERATION_2 220 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 219 && BOOST_PP_ITERATION_START_2 >= 219 +# define BOOST_PP_ITERATION_2 219 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 218 && BOOST_PP_ITERATION_START_2 >= 218 +# define BOOST_PP_ITERATION_2 218 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 217 && BOOST_PP_ITERATION_START_2 >= 217 +# define BOOST_PP_ITERATION_2 217 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 216 && BOOST_PP_ITERATION_START_2 >= 216 +# define BOOST_PP_ITERATION_2 216 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 215 && BOOST_PP_ITERATION_START_2 >= 215 +# define BOOST_PP_ITERATION_2 215 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 214 && BOOST_PP_ITERATION_START_2 >= 214 +# define BOOST_PP_ITERATION_2 214 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 213 && BOOST_PP_ITERATION_START_2 >= 213 +# define BOOST_PP_ITERATION_2 213 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 212 && BOOST_PP_ITERATION_START_2 >= 212 +# define BOOST_PP_ITERATION_2 212 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 211 && BOOST_PP_ITERATION_START_2 >= 211 +# define BOOST_PP_ITERATION_2 211 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 210 && BOOST_PP_ITERATION_START_2 >= 210 +# define BOOST_PP_ITERATION_2 210 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 209 && BOOST_PP_ITERATION_START_2 >= 209 +# define BOOST_PP_ITERATION_2 209 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 208 && BOOST_PP_ITERATION_START_2 >= 208 +# define BOOST_PP_ITERATION_2 208 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 207 && BOOST_PP_ITERATION_START_2 >= 207 +# define BOOST_PP_ITERATION_2 207 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 206 && BOOST_PP_ITERATION_START_2 >= 206 +# define BOOST_PP_ITERATION_2 206 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 205 && BOOST_PP_ITERATION_START_2 >= 205 +# define BOOST_PP_ITERATION_2 205 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 204 && BOOST_PP_ITERATION_START_2 >= 204 +# define BOOST_PP_ITERATION_2 204 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 203 && BOOST_PP_ITERATION_START_2 >= 203 +# define BOOST_PP_ITERATION_2 203 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 202 && BOOST_PP_ITERATION_START_2 >= 202 +# define BOOST_PP_ITERATION_2 202 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 201 && BOOST_PP_ITERATION_START_2 >= 201 +# define BOOST_PP_ITERATION_2 201 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 200 && BOOST_PP_ITERATION_START_2 >= 200 +# define BOOST_PP_ITERATION_2 200 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 199 && BOOST_PP_ITERATION_START_2 >= 199 +# define BOOST_PP_ITERATION_2 199 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 198 && BOOST_PP_ITERATION_START_2 >= 198 +# define BOOST_PP_ITERATION_2 198 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 197 && BOOST_PP_ITERATION_START_2 >= 197 +# define BOOST_PP_ITERATION_2 197 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 196 && BOOST_PP_ITERATION_START_2 >= 196 +# define BOOST_PP_ITERATION_2 196 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 195 && BOOST_PP_ITERATION_START_2 >= 195 +# define BOOST_PP_ITERATION_2 195 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 194 && BOOST_PP_ITERATION_START_2 >= 194 +# define BOOST_PP_ITERATION_2 194 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 193 && BOOST_PP_ITERATION_START_2 >= 193 +# define BOOST_PP_ITERATION_2 193 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 192 && BOOST_PP_ITERATION_START_2 >= 192 +# define BOOST_PP_ITERATION_2 192 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 191 && BOOST_PP_ITERATION_START_2 >= 191 +# define BOOST_PP_ITERATION_2 191 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 190 && BOOST_PP_ITERATION_START_2 >= 190 +# define BOOST_PP_ITERATION_2 190 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 189 && BOOST_PP_ITERATION_START_2 >= 189 +# define BOOST_PP_ITERATION_2 189 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 188 && BOOST_PP_ITERATION_START_2 >= 188 +# define BOOST_PP_ITERATION_2 188 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 187 && BOOST_PP_ITERATION_START_2 >= 187 +# define BOOST_PP_ITERATION_2 187 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 186 && BOOST_PP_ITERATION_START_2 >= 186 +# define BOOST_PP_ITERATION_2 186 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 185 && BOOST_PP_ITERATION_START_2 >= 185 +# define BOOST_PP_ITERATION_2 185 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 184 && BOOST_PP_ITERATION_START_2 >= 184 +# define BOOST_PP_ITERATION_2 184 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 183 && BOOST_PP_ITERATION_START_2 >= 183 +# define BOOST_PP_ITERATION_2 183 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 182 && BOOST_PP_ITERATION_START_2 >= 182 +# define BOOST_PP_ITERATION_2 182 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 181 && BOOST_PP_ITERATION_START_2 >= 181 +# define BOOST_PP_ITERATION_2 181 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 180 && BOOST_PP_ITERATION_START_2 >= 180 +# define BOOST_PP_ITERATION_2 180 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 179 && BOOST_PP_ITERATION_START_2 >= 179 +# define BOOST_PP_ITERATION_2 179 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 178 && BOOST_PP_ITERATION_START_2 >= 178 +# define BOOST_PP_ITERATION_2 178 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 177 && BOOST_PP_ITERATION_START_2 >= 177 +# define BOOST_PP_ITERATION_2 177 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 176 && BOOST_PP_ITERATION_START_2 >= 176 +# define BOOST_PP_ITERATION_2 176 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 175 && BOOST_PP_ITERATION_START_2 >= 175 +# define BOOST_PP_ITERATION_2 175 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 174 && BOOST_PP_ITERATION_START_2 >= 174 +# define BOOST_PP_ITERATION_2 174 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 173 && BOOST_PP_ITERATION_START_2 >= 173 +# define BOOST_PP_ITERATION_2 173 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 172 && BOOST_PP_ITERATION_START_2 >= 172 +# define BOOST_PP_ITERATION_2 172 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 171 && BOOST_PP_ITERATION_START_2 >= 171 +# define BOOST_PP_ITERATION_2 171 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 170 && BOOST_PP_ITERATION_START_2 >= 170 +# define BOOST_PP_ITERATION_2 170 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 169 && BOOST_PP_ITERATION_START_2 >= 169 +# define BOOST_PP_ITERATION_2 169 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 168 && BOOST_PP_ITERATION_START_2 >= 168 +# define BOOST_PP_ITERATION_2 168 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 167 && BOOST_PP_ITERATION_START_2 >= 167 +# define BOOST_PP_ITERATION_2 167 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 166 && BOOST_PP_ITERATION_START_2 >= 166 +# define BOOST_PP_ITERATION_2 166 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 165 && BOOST_PP_ITERATION_START_2 >= 165 +# define BOOST_PP_ITERATION_2 165 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 164 && BOOST_PP_ITERATION_START_2 >= 164 +# define BOOST_PP_ITERATION_2 164 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 163 && BOOST_PP_ITERATION_START_2 >= 163 +# define BOOST_PP_ITERATION_2 163 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 162 && BOOST_PP_ITERATION_START_2 >= 162 +# define BOOST_PP_ITERATION_2 162 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 161 && BOOST_PP_ITERATION_START_2 >= 161 +# define BOOST_PP_ITERATION_2 161 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 160 && BOOST_PP_ITERATION_START_2 >= 160 +# define BOOST_PP_ITERATION_2 160 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 159 && BOOST_PP_ITERATION_START_2 >= 159 +# define BOOST_PP_ITERATION_2 159 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 158 && BOOST_PP_ITERATION_START_2 >= 158 +# define BOOST_PP_ITERATION_2 158 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 157 && BOOST_PP_ITERATION_START_2 >= 157 +# define BOOST_PP_ITERATION_2 157 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 156 && BOOST_PP_ITERATION_START_2 >= 156 +# define BOOST_PP_ITERATION_2 156 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 155 && BOOST_PP_ITERATION_START_2 >= 155 +# define BOOST_PP_ITERATION_2 155 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 154 && BOOST_PP_ITERATION_START_2 >= 154 +# define BOOST_PP_ITERATION_2 154 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 153 && BOOST_PP_ITERATION_START_2 >= 153 +# define BOOST_PP_ITERATION_2 153 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 152 && BOOST_PP_ITERATION_START_2 >= 152 +# define BOOST_PP_ITERATION_2 152 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 151 && BOOST_PP_ITERATION_START_2 >= 151 +# define BOOST_PP_ITERATION_2 151 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 150 && BOOST_PP_ITERATION_START_2 >= 150 +# define BOOST_PP_ITERATION_2 150 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 149 && BOOST_PP_ITERATION_START_2 >= 149 +# define BOOST_PP_ITERATION_2 149 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 148 && BOOST_PP_ITERATION_START_2 >= 148 +# define BOOST_PP_ITERATION_2 148 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 147 && BOOST_PP_ITERATION_START_2 >= 147 +# define BOOST_PP_ITERATION_2 147 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 146 && BOOST_PP_ITERATION_START_2 >= 146 +# define BOOST_PP_ITERATION_2 146 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 145 && BOOST_PP_ITERATION_START_2 >= 145 +# define BOOST_PP_ITERATION_2 145 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 144 && BOOST_PP_ITERATION_START_2 >= 144 +# define BOOST_PP_ITERATION_2 144 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 143 && BOOST_PP_ITERATION_START_2 >= 143 +# define BOOST_PP_ITERATION_2 143 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 142 && BOOST_PP_ITERATION_START_2 >= 142 +# define BOOST_PP_ITERATION_2 142 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 141 && BOOST_PP_ITERATION_START_2 >= 141 +# define BOOST_PP_ITERATION_2 141 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 140 && BOOST_PP_ITERATION_START_2 >= 140 +# define BOOST_PP_ITERATION_2 140 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 139 && BOOST_PP_ITERATION_START_2 >= 139 +# define BOOST_PP_ITERATION_2 139 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 138 && BOOST_PP_ITERATION_START_2 >= 138 +# define BOOST_PP_ITERATION_2 138 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 137 && BOOST_PP_ITERATION_START_2 >= 137 +# define BOOST_PP_ITERATION_2 137 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 136 && BOOST_PP_ITERATION_START_2 >= 136 +# define BOOST_PP_ITERATION_2 136 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 135 && BOOST_PP_ITERATION_START_2 >= 135 +# define BOOST_PP_ITERATION_2 135 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 134 && BOOST_PP_ITERATION_START_2 >= 134 +# define BOOST_PP_ITERATION_2 134 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 133 && BOOST_PP_ITERATION_START_2 >= 133 +# define BOOST_PP_ITERATION_2 133 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 132 && BOOST_PP_ITERATION_START_2 >= 132 +# define BOOST_PP_ITERATION_2 132 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 131 && BOOST_PP_ITERATION_START_2 >= 131 +# define BOOST_PP_ITERATION_2 131 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 130 && BOOST_PP_ITERATION_START_2 >= 130 +# define BOOST_PP_ITERATION_2 130 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 129 && BOOST_PP_ITERATION_START_2 >= 129 +# define BOOST_PP_ITERATION_2 129 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 128 && BOOST_PP_ITERATION_START_2 >= 128 +# define BOOST_PP_ITERATION_2 128 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 127 && BOOST_PP_ITERATION_START_2 >= 127 +# define BOOST_PP_ITERATION_2 127 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 126 && BOOST_PP_ITERATION_START_2 >= 126 +# define BOOST_PP_ITERATION_2 126 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 125 && BOOST_PP_ITERATION_START_2 >= 125 +# define BOOST_PP_ITERATION_2 125 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 124 && BOOST_PP_ITERATION_START_2 >= 124 +# define BOOST_PP_ITERATION_2 124 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 123 && BOOST_PP_ITERATION_START_2 >= 123 +# define BOOST_PP_ITERATION_2 123 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 122 && BOOST_PP_ITERATION_START_2 >= 122 +# define BOOST_PP_ITERATION_2 122 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 121 && BOOST_PP_ITERATION_START_2 >= 121 +# define BOOST_PP_ITERATION_2 121 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 120 && BOOST_PP_ITERATION_START_2 >= 120 +# define BOOST_PP_ITERATION_2 120 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 119 && BOOST_PP_ITERATION_START_2 >= 119 +# define BOOST_PP_ITERATION_2 119 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 118 && BOOST_PP_ITERATION_START_2 >= 118 +# define BOOST_PP_ITERATION_2 118 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 117 && BOOST_PP_ITERATION_START_2 >= 117 +# define BOOST_PP_ITERATION_2 117 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 116 && BOOST_PP_ITERATION_START_2 >= 116 +# define BOOST_PP_ITERATION_2 116 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 115 && BOOST_PP_ITERATION_START_2 >= 115 +# define BOOST_PP_ITERATION_2 115 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 114 && BOOST_PP_ITERATION_START_2 >= 114 +# define BOOST_PP_ITERATION_2 114 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 113 && BOOST_PP_ITERATION_START_2 >= 113 +# define BOOST_PP_ITERATION_2 113 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 112 && BOOST_PP_ITERATION_START_2 >= 112 +# define BOOST_PP_ITERATION_2 112 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 111 && BOOST_PP_ITERATION_START_2 >= 111 +# define BOOST_PP_ITERATION_2 111 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 110 && BOOST_PP_ITERATION_START_2 >= 110 +# define BOOST_PP_ITERATION_2 110 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 109 && BOOST_PP_ITERATION_START_2 >= 109 +# define BOOST_PP_ITERATION_2 109 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 108 && BOOST_PP_ITERATION_START_2 >= 108 +# define BOOST_PP_ITERATION_2 108 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 107 && BOOST_PP_ITERATION_START_2 >= 107 +# define BOOST_PP_ITERATION_2 107 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 106 && BOOST_PP_ITERATION_START_2 >= 106 +# define BOOST_PP_ITERATION_2 106 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 105 && BOOST_PP_ITERATION_START_2 >= 105 +# define BOOST_PP_ITERATION_2 105 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 104 && BOOST_PP_ITERATION_START_2 >= 104 +# define BOOST_PP_ITERATION_2 104 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 103 && BOOST_PP_ITERATION_START_2 >= 103 +# define BOOST_PP_ITERATION_2 103 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 102 && BOOST_PP_ITERATION_START_2 >= 102 +# define BOOST_PP_ITERATION_2 102 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 101 && BOOST_PP_ITERATION_START_2 >= 101 +# define BOOST_PP_ITERATION_2 101 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 100 && BOOST_PP_ITERATION_START_2 >= 100 +# define BOOST_PP_ITERATION_2 100 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 99 && BOOST_PP_ITERATION_START_2 >= 99 +# define BOOST_PP_ITERATION_2 99 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 98 && BOOST_PP_ITERATION_START_2 >= 98 +# define BOOST_PP_ITERATION_2 98 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 97 && BOOST_PP_ITERATION_START_2 >= 97 +# define BOOST_PP_ITERATION_2 97 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 96 && BOOST_PP_ITERATION_START_2 >= 96 +# define BOOST_PP_ITERATION_2 96 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 95 && BOOST_PP_ITERATION_START_2 >= 95 +# define BOOST_PP_ITERATION_2 95 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 94 && BOOST_PP_ITERATION_START_2 >= 94 +# define BOOST_PP_ITERATION_2 94 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 93 && BOOST_PP_ITERATION_START_2 >= 93 +# define BOOST_PP_ITERATION_2 93 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 92 && BOOST_PP_ITERATION_START_2 >= 92 +# define BOOST_PP_ITERATION_2 92 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 91 && BOOST_PP_ITERATION_START_2 >= 91 +# define BOOST_PP_ITERATION_2 91 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 90 && BOOST_PP_ITERATION_START_2 >= 90 +# define BOOST_PP_ITERATION_2 90 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 89 && BOOST_PP_ITERATION_START_2 >= 89 +# define BOOST_PP_ITERATION_2 89 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 88 && BOOST_PP_ITERATION_START_2 >= 88 +# define BOOST_PP_ITERATION_2 88 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 87 && BOOST_PP_ITERATION_START_2 >= 87 +# define BOOST_PP_ITERATION_2 87 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 86 && BOOST_PP_ITERATION_START_2 >= 86 +# define BOOST_PP_ITERATION_2 86 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 85 && BOOST_PP_ITERATION_START_2 >= 85 +# define BOOST_PP_ITERATION_2 85 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 84 && BOOST_PP_ITERATION_START_2 >= 84 +# define BOOST_PP_ITERATION_2 84 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 83 && BOOST_PP_ITERATION_START_2 >= 83 +# define BOOST_PP_ITERATION_2 83 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 82 && BOOST_PP_ITERATION_START_2 >= 82 +# define BOOST_PP_ITERATION_2 82 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 81 && BOOST_PP_ITERATION_START_2 >= 81 +# define BOOST_PP_ITERATION_2 81 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 80 && BOOST_PP_ITERATION_START_2 >= 80 +# define BOOST_PP_ITERATION_2 80 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 79 && BOOST_PP_ITERATION_START_2 >= 79 +# define BOOST_PP_ITERATION_2 79 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 78 && BOOST_PP_ITERATION_START_2 >= 78 +# define BOOST_PP_ITERATION_2 78 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 77 && BOOST_PP_ITERATION_START_2 >= 77 +# define BOOST_PP_ITERATION_2 77 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 76 && BOOST_PP_ITERATION_START_2 >= 76 +# define BOOST_PP_ITERATION_2 76 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 75 && BOOST_PP_ITERATION_START_2 >= 75 +# define BOOST_PP_ITERATION_2 75 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 74 && BOOST_PP_ITERATION_START_2 >= 74 +# define BOOST_PP_ITERATION_2 74 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 73 && BOOST_PP_ITERATION_START_2 >= 73 +# define BOOST_PP_ITERATION_2 73 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 72 && BOOST_PP_ITERATION_START_2 >= 72 +# define BOOST_PP_ITERATION_2 72 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 71 && BOOST_PP_ITERATION_START_2 >= 71 +# define BOOST_PP_ITERATION_2 71 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 70 && BOOST_PP_ITERATION_START_2 >= 70 +# define BOOST_PP_ITERATION_2 70 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 69 && BOOST_PP_ITERATION_START_2 >= 69 +# define BOOST_PP_ITERATION_2 69 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 68 && BOOST_PP_ITERATION_START_2 >= 68 +# define BOOST_PP_ITERATION_2 68 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 67 && BOOST_PP_ITERATION_START_2 >= 67 +# define BOOST_PP_ITERATION_2 67 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 66 && BOOST_PP_ITERATION_START_2 >= 66 +# define BOOST_PP_ITERATION_2 66 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 65 && BOOST_PP_ITERATION_START_2 >= 65 +# define BOOST_PP_ITERATION_2 65 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 64 && BOOST_PP_ITERATION_START_2 >= 64 +# define BOOST_PP_ITERATION_2 64 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 63 && BOOST_PP_ITERATION_START_2 >= 63 +# define BOOST_PP_ITERATION_2 63 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 62 && BOOST_PP_ITERATION_START_2 >= 62 +# define BOOST_PP_ITERATION_2 62 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 61 && BOOST_PP_ITERATION_START_2 >= 61 +# define BOOST_PP_ITERATION_2 61 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 60 && BOOST_PP_ITERATION_START_2 >= 60 +# define BOOST_PP_ITERATION_2 60 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 59 && BOOST_PP_ITERATION_START_2 >= 59 +# define BOOST_PP_ITERATION_2 59 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 58 && BOOST_PP_ITERATION_START_2 >= 58 +# define BOOST_PP_ITERATION_2 58 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 57 && BOOST_PP_ITERATION_START_2 >= 57 +# define BOOST_PP_ITERATION_2 57 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 56 && BOOST_PP_ITERATION_START_2 >= 56 +# define BOOST_PP_ITERATION_2 56 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 55 && BOOST_PP_ITERATION_START_2 >= 55 +# define BOOST_PP_ITERATION_2 55 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 54 && BOOST_PP_ITERATION_START_2 >= 54 +# define BOOST_PP_ITERATION_2 54 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 53 && BOOST_PP_ITERATION_START_2 >= 53 +# define BOOST_PP_ITERATION_2 53 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 52 && BOOST_PP_ITERATION_START_2 >= 52 +# define BOOST_PP_ITERATION_2 52 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 51 && BOOST_PP_ITERATION_START_2 >= 51 +# define BOOST_PP_ITERATION_2 51 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 50 && BOOST_PP_ITERATION_START_2 >= 50 +# define BOOST_PP_ITERATION_2 50 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 49 && BOOST_PP_ITERATION_START_2 >= 49 +# define BOOST_PP_ITERATION_2 49 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 48 && BOOST_PP_ITERATION_START_2 >= 48 +# define BOOST_PP_ITERATION_2 48 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 47 && BOOST_PP_ITERATION_START_2 >= 47 +# define BOOST_PP_ITERATION_2 47 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 46 && BOOST_PP_ITERATION_START_2 >= 46 +# define BOOST_PP_ITERATION_2 46 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 45 && BOOST_PP_ITERATION_START_2 >= 45 +# define BOOST_PP_ITERATION_2 45 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 44 && BOOST_PP_ITERATION_START_2 >= 44 +# define BOOST_PP_ITERATION_2 44 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 43 && BOOST_PP_ITERATION_START_2 >= 43 +# define BOOST_PP_ITERATION_2 43 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 42 && BOOST_PP_ITERATION_START_2 >= 42 +# define BOOST_PP_ITERATION_2 42 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 41 && BOOST_PP_ITERATION_START_2 >= 41 +# define BOOST_PP_ITERATION_2 41 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 40 && BOOST_PP_ITERATION_START_2 >= 40 +# define BOOST_PP_ITERATION_2 40 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 39 && BOOST_PP_ITERATION_START_2 >= 39 +# define BOOST_PP_ITERATION_2 39 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 38 && BOOST_PP_ITERATION_START_2 >= 38 +# define BOOST_PP_ITERATION_2 38 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 37 && BOOST_PP_ITERATION_START_2 >= 37 +# define BOOST_PP_ITERATION_2 37 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 36 && BOOST_PP_ITERATION_START_2 >= 36 +# define BOOST_PP_ITERATION_2 36 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 35 && BOOST_PP_ITERATION_START_2 >= 35 +# define BOOST_PP_ITERATION_2 35 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 34 && BOOST_PP_ITERATION_START_2 >= 34 +# define BOOST_PP_ITERATION_2 34 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 33 && BOOST_PP_ITERATION_START_2 >= 33 +# define BOOST_PP_ITERATION_2 33 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 32 && BOOST_PP_ITERATION_START_2 >= 32 +# define BOOST_PP_ITERATION_2 32 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 31 && BOOST_PP_ITERATION_START_2 >= 31 +# define BOOST_PP_ITERATION_2 31 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 30 && BOOST_PP_ITERATION_START_2 >= 30 +# define BOOST_PP_ITERATION_2 30 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 29 && BOOST_PP_ITERATION_START_2 >= 29 +# define BOOST_PP_ITERATION_2 29 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 28 && BOOST_PP_ITERATION_START_2 >= 28 +# define BOOST_PP_ITERATION_2 28 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 27 && BOOST_PP_ITERATION_START_2 >= 27 +# define BOOST_PP_ITERATION_2 27 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 26 && BOOST_PP_ITERATION_START_2 >= 26 +# define BOOST_PP_ITERATION_2 26 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 25 && BOOST_PP_ITERATION_START_2 >= 25 +# define BOOST_PP_ITERATION_2 25 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 24 && BOOST_PP_ITERATION_START_2 >= 24 +# define BOOST_PP_ITERATION_2 24 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 23 && BOOST_PP_ITERATION_START_2 >= 23 +# define BOOST_PP_ITERATION_2 23 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 22 && BOOST_PP_ITERATION_START_2 >= 22 +# define BOOST_PP_ITERATION_2 22 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 21 && BOOST_PP_ITERATION_START_2 >= 21 +# define BOOST_PP_ITERATION_2 21 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 20 && BOOST_PP_ITERATION_START_2 >= 20 +# define BOOST_PP_ITERATION_2 20 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 19 && BOOST_PP_ITERATION_START_2 >= 19 +# define BOOST_PP_ITERATION_2 19 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 18 && BOOST_PP_ITERATION_START_2 >= 18 +# define BOOST_PP_ITERATION_2 18 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 17 && BOOST_PP_ITERATION_START_2 >= 17 +# define BOOST_PP_ITERATION_2 17 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 16 && BOOST_PP_ITERATION_START_2 >= 16 +# define BOOST_PP_ITERATION_2 16 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 15 && BOOST_PP_ITERATION_START_2 >= 15 +# define BOOST_PP_ITERATION_2 15 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 14 && BOOST_PP_ITERATION_START_2 >= 14 +# define BOOST_PP_ITERATION_2 14 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 13 && BOOST_PP_ITERATION_START_2 >= 13 +# define BOOST_PP_ITERATION_2 13 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 12 && BOOST_PP_ITERATION_START_2 >= 12 +# define BOOST_PP_ITERATION_2 12 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 11 && BOOST_PP_ITERATION_START_2 >= 11 +# define BOOST_PP_ITERATION_2 11 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 10 && BOOST_PP_ITERATION_START_2 >= 10 +# define BOOST_PP_ITERATION_2 10 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 9 && BOOST_PP_ITERATION_START_2 >= 9 +# define BOOST_PP_ITERATION_2 9 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 8 && BOOST_PP_ITERATION_START_2 >= 8 +# define BOOST_PP_ITERATION_2 8 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 7 && BOOST_PP_ITERATION_START_2 >= 7 +# define BOOST_PP_ITERATION_2 7 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 6 && BOOST_PP_ITERATION_START_2 >= 6 +# define BOOST_PP_ITERATION_2 6 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 5 && BOOST_PP_ITERATION_START_2 >= 5 +# define BOOST_PP_ITERATION_2 5 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 4 && BOOST_PP_ITERATION_START_2 >= 4 +# define BOOST_PP_ITERATION_2 4 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 3 && BOOST_PP_ITERATION_START_2 >= 3 +# define BOOST_PP_ITERATION_2 3 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 2 && BOOST_PP_ITERATION_START_2 >= 2 +# define BOOST_PP_ITERATION_2 2 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 1 && BOOST_PP_ITERATION_START_2 >= 1 +# define BOOST_PP_ITERATION_2 1 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif +# if BOOST_PP_ITERATION_FINISH_2 <= 0 && BOOST_PP_ITERATION_START_2 >= 0 +# define BOOST_PP_ITERATION_2 0 +# include BOOST_PP_FILENAME_2 +# undef BOOST_PP_ITERATION_2 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse3.hpp new file mode 100644 index 00000000..0a655149 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse3.hpp @@ -0,0 +1,1296 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if BOOST_PP_ITERATION_FINISH_3 <= 256 && BOOST_PP_ITERATION_START_3 >= 256 +# define BOOST_PP_ITERATION_3 256 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 255 && BOOST_PP_ITERATION_START_3 >= 255 +# define BOOST_PP_ITERATION_3 255 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 254 && BOOST_PP_ITERATION_START_3 >= 254 +# define BOOST_PP_ITERATION_3 254 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 253 && BOOST_PP_ITERATION_START_3 >= 253 +# define BOOST_PP_ITERATION_3 253 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 252 && BOOST_PP_ITERATION_START_3 >= 252 +# define BOOST_PP_ITERATION_3 252 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 251 && BOOST_PP_ITERATION_START_3 >= 251 +# define BOOST_PP_ITERATION_3 251 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 250 && BOOST_PP_ITERATION_START_3 >= 250 +# define BOOST_PP_ITERATION_3 250 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 249 && BOOST_PP_ITERATION_START_3 >= 249 +# define BOOST_PP_ITERATION_3 249 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 248 && BOOST_PP_ITERATION_START_3 >= 248 +# define BOOST_PP_ITERATION_3 248 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 247 && BOOST_PP_ITERATION_START_3 >= 247 +# define BOOST_PP_ITERATION_3 247 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 246 && BOOST_PP_ITERATION_START_3 >= 246 +# define BOOST_PP_ITERATION_3 246 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 245 && BOOST_PP_ITERATION_START_3 >= 245 +# define BOOST_PP_ITERATION_3 245 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 244 && BOOST_PP_ITERATION_START_3 >= 244 +# define BOOST_PP_ITERATION_3 244 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 243 && BOOST_PP_ITERATION_START_3 >= 243 +# define BOOST_PP_ITERATION_3 243 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 242 && BOOST_PP_ITERATION_START_3 >= 242 +# define BOOST_PP_ITERATION_3 242 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 241 && BOOST_PP_ITERATION_START_3 >= 241 +# define BOOST_PP_ITERATION_3 241 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 240 && BOOST_PP_ITERATION_START_3 >= 240 +# define BOOST_PP_ITERATION_3 240 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 239 && BOOST_PP_ITERATION_START_3 >= 239 +# define BOOST_PP_ITERATION_3 239 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 238 && BOOST_PP_ITERATION_START_3 >= 238 +# define BOOST_PP_ITERATION_3 238 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 237 && BOOST_PP_ITERATION_START_3 >= 237 +# define BOOST_PP_ITERATION_3 237 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 236 && BOOST_PP_ITERATION_START_3 >= 236 +# define BOOST_PP_ITERATION_3 236 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 235 && BOOST_PP_ITERATION_START_3 >= 235 +# define BOOST_PP_ITERATION_3 235 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 234 && BOOST_PP_ITERATION_START_3 >= 234 +# define BOOST_PP_ITERATION_3 234 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 233 && BOOST_PP_ITERATION_START_3 >= 233 +# define BOOST_PP_ITERATION_3 233 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 232 && BOOST_PP_ITERATION_START_3 >= 232 +# define BOOST_PP_ITERATION_3 232 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 231 && BOOST_PP_ITERATION_START_3 >= 231 +# define BOOST_PP_ITERATION_3 231 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 230 && BOOST_PP_ITERATION_START_3 >= 230 +# define BOOST_PP_ITERATION_3 230 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 229 && BOOST_PP_ITERATION_START_3 >= 229 +# define BOOST_PP_ITERATION_3 229 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 228 && BOOST_PP_ITERATION_START_3 >= 228 +# define BOOST_PP_ITERATION_3 228 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 227 && BOOST_PP_ITERATION_START_3 >= 227 +# define BOOST_PP_ITERATION_3 227 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 226 && BOOST_PP_ITERATION_START_3 >= 226 +# define BOOST_PP_ITERATION_3 226 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 225 && BOOST_PP_ITERATION_START_3 >= 225 +# define BOOST_PP_ITERATION_3 225 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 224 && BOOST_PP_ITERATION_START_3 >= 224 +# define BOOST_PP_ITERATION_3 224 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 223 && BOOST_PP_ITERATION_START_3 >= 223 +# define BOOST_PP_ITERATION_3 223 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 222 && BOOST_PP_ITERATION_START_3 >= 222 +# define BOOST_PP_ITERATION_3 222 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 221 && BOOST_PP_ITERATION_START_3 >= 221 +# define BOOST_PP_ITERATION_3 221 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 220 && BOOST_PP_ITERATION_START_3 >= 220 +# define BOOST_PP_ITERATION_3 220 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 219 && BOOST_PP_ITERATION_START_3 >= 219 +# define BOOST_PP_ITERATION_3 219 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 218 && BOOST_PP_ITERATION_START_3 >= 218 +# define BOOST_PP_ITERATION_3 218 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 217 && BOOST_PP_ITERATION_START_3 >= 217 +# define BOOST_PP_ITERATION_3 217 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 216 && BOOST_PP_ITERATION_START_3 >= 216 +# define BOOST_PP_ITERATION_3 216 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 215 && BOOST_PP_ITERATION_START_3 >= 215 +# define BOOST_PP_ITERATION_3 215 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 214 && BOOST_PP_ITERATION_START_3 >= 214 +# define BOOST_PP_ITERATION_3 214 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 213 && BOOST_PP_ITERATION_START_3 >= 213 +# define BOOST_PP_ITERATION_3 213 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 212 && BOOST_PP_ITERATION_START_3 >= 212 +# define BOOST_PP_ITERATION_3 212 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 211 && BOOST_PP_ITERATION_START_3 >= 211 +# define BOOST_PP_ITERATION_3 211 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 210 && BOOST_PP_ITERATION_START_3 >= 210 +# define BOOST_PP_ITERATION_3 210 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 209 && BOOST_PP_ITERATION_START_3 >= 209 +# define BOOST_PP_ITERATION_3 209 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 208 && BOOST_PP_ITERATION_START_3 >= 208 +# define BOOST_PP_ITERATION_3 208 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 207 && BOOST_PP_ITERATION_START_3 >= 207 +# define BOOST_PP_ITERATION_3 207 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 206 && BOOST_PP_ITERATION_START_3 >= 206 +# define BOOST_PP_ITERATION_3 206 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 205 && BOOST_PP_ITERATION_START_3 >= 205 +# define BOOST_PP_ITERATION_3 205 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 204 && BOOST_PP_ITERATION_START_3 >= 204 +# define BOOST_PP_ITERATION_3 204 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 203 && BOOST_PP_ITERATION_START_3 >= 203 +# define BOOST_PP_ITERATION_3 203 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 202 && BOOST_PP_ITERATION_START_3 >= 202 +# define BOOST_PP_ITERATION_3 202 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 201 && BOOST_PP_ITERATION_START_3 >= 201 +# define BOOST_PP_ITERATION_3 201 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 200 && BOOST_PP_ITERATION_START_3 >= 200 +# define BOOST_PP_ITERATION_3 200 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 199 && BOOST_PP_ITERATION_START_3 >= 199 +# define BOOST_PP_ITERATION_3 199 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 198 && BOOST_PP_ITERATION_START_3 >= 198 +# define BOOST_PP_ITERATION_3 198 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 197 && BOOST_PP_ITERATION_START_3 >= 197 +# define BOOST_PP_ITERATION_3 197 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 196 && BOOST_PP_ITERATION_START_3 >= 196 +# define BOOST_PP_ITERATION_3 196 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 195 && BOOST_PP_ITERATION_START_3 >= 195 +# define BOOST_PP_ITERATION_3 195 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 194 && BOOST_PP_ITERATION_START_3 >= 194 +# define BOOST_PP_ITERATION_3 194 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 193 && BOOST_PP_ITERATION_START_3 >= 193 +# define BOOST_PP_ITERATION_3 193 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 192 && BOOST_PP_ITERATION_START_3 >= 192 +# define BOOST_PP_ITERATION_3 192 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 191 && BOOST_PP_ITERATION_START_3 >= 191 +# define BOOST_PP_ITERATION_3 191 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 190 && BOOST_PP_ITERATION_START_3 >= 190 +# define BOOST_PP_ITERATION_3 190 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 189 && BOOST_PP_ITERATION_START_3 >= 189 +# define BOOST_PP_ITERATION_3 189 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 188 && BOOST_PP_ITERATION_START_3 >= 188 +# define BOOST_PP_ITERATION_3 188 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 187 && BOOST_PP_ITERATION_START_3 >= 187 +# define BOOST_PP_ITERATION_3 187 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 186 && BOOST_PP_ITERATION_START_3 >= 186 +# define BOOST_PP_ITERATION_3 186 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 185 && BOOST_PP_ITERATION_START_3 >= 185 +# define BOOST_PP_ITERATION_3 185 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 184 && BOOST_PP_ITERATION_START_3 >= 184 +# define BOOST_PP_ITERATION_3 184 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 183 && BOOST_PP_ITERATION_START_3 >= 183 +# define BOOST_PP_ITERATION_3 183 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 182 && BOOST_PP_ITERATION_START_3 >= 182 +# define BOOST_PP_ITERATION_3 182 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 181 && BOOST_PP_ITERATION_START_3 >= 181 +# define BOOST_PP_ITERATION_3 181 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 180 && BOOST_PP_ITERATION_START_3 >= 180 +# define BOOST_PP_ITERATION_3 180 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 179 && BOOST_PP_ITERATION_START_3 >= 179 +# define BOOST_PP_ITERATION_3 179 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 178 && BOOST_PP_ITERATION_START_3 >= 178 +# define BOOST_PP_ITERATION_3 178 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 177 && BOOST_PP_ITERATION_START_3 >= 177 +# define BOOST_PP_ITERATION_3 177 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 176 && BOOST_PP_ITERATION_START_3 >= 176 +# define BOOST_PP_ITERATION_3 176 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 175 && BOOST_PP_ITERATION_START_3 >= 175 +# define BOOST_PP_ITERATION_3 175 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 174 && BOOST_PP_ITERATION_START_3 >= 174 +# define BOOST_PP_ITERATION_3 174 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 173 && BOOST_PP_ITERATION_START_3 >= 173 +# define BOOST_PP_ITERATION_3 173 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 172 && BOOST_PP_ITERATION_START_3 >= 172 +# define BOOST_PP_ITERATION_3 172 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 171 && BOOST_PP_ITERATION_START_3 >= 171 +# define BOOST_PP_ITERATION_3 171 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 170 && BOOST_PP_ITERATION_START_3 >= 170 +# define BOOST_PP_ITERATION_3 170 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 169 && BOOST_PP_ITERATION_START_3 >= 169 +# define BOOST_PP_ITERATION_3 169 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 168 && BOOST_PP_ITERATION_START_3 >= 168 +# define BOOST_PP_ITERATION_3 168 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 167 && BOOST_PP_ITERATION_START_3 >= 167 +# define BOOST_PP_ITERATION_3 167 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 166 && BOOST_PP_ITERATION_START_3 >= 166 +# define BOOST_PP_ITERATION_3 166 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 165 && BOOST_PP_ITERATION_START_3 >= 165 +# define BOOST_PP_ITERATION_3 165 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 164 && BOOST_PP_ITERATION_START_3 >= 164 +# define BOOST_PP_ITERATION_3 164 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 163 && BOOST_PP_ITERATION_START_3 >= 163 +# define BOOST_PP_ITERATION_3 163 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 162 && BOOST_PP_ITERATION_START_3 >= 162 +# define BOOST_PP_ITERATION_3 162 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 161 && BOOST_PP_ITERATION_START_3 >= 161 +# define BOOST_PP_ITERATION_3 161 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 160 && BOOST_PP_ITERATION_START_3 >= 160 +# define BOOST_PP_ITERATION_3 160 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 159 && BOOST_PP_ITERATION_START_3 >= 159 +# define BOOST_PP_ITERATION_3 159 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 158 && BOOST_PP_ITERATION_START_3 >= 158 +# define BOOST_PP_ITERATION_3 158 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 157 && BOOST_PP_ITERATION_START_3 >= 157 +# define BOOST_PP_ITERATION_3 157 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 156 && BOOST_PP_ITERATION_START_3 >= 156 +# define BOOST_PP_ITERATION_3 156 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 155 && BOOST_PP_ITERATION_START_3 >= 155 +# define BOOST_PP_ITERATION_3 155 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 154 && BOOST_PP_ITERATION_START_3 >= 154 +# define BOOST_PP_ITERATION_3 154 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 153 && BOOST_PP_ITERATION_START_3 >= 153 +# define BOOST_PP_ITERATION_3 153 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 152 && BOOST_PP_ITERATION_START_3 >= 152 +# define BOOST_PP_ITERATION_3 152 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 151 && BOOST_PP_ITERATION_START_3 >= 151 +# define BOOST_PP_ITERATION_3 151 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 150 && BOOST_PP_ITERATION_START_3 >= 150 +# define BOOST_PP_ITERATION_3 150 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 149 && BOOST_PP_ITERATION_START_3 >= 149 +# define BOOST_PP_ITERATION_3 149 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 148 && BOOST_PP_ITERATION_START_3 >= 148 +# define BOOST_PP_ITERATION_3 148 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 147 && BOOST_PP_ITERATION_START_3 >= 147 +# define BOOST_PP_ITERATION_3 147 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 146 && BOOST_PP_ITERATION_START_3 >= 146 +# define BOOST_PP_ITERATION_3 146 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 145 && BOOST_PP_ITERATION_START_3 >= 145 +# define BOOST_PP_ITERATION_3 145 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 144 && BOOST_PP_ITERATION_START_3 >= 144 +# define BOOST_PP_ITERATION_3 144 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 143 && BOOST_PP_ITERATION_START_3 >= 143 +# define BOOST_PP_ITERATION_3 143 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 142 && BOOST_PP_ITERATION_START_3 >= 142 +# define BOOST_PP_ITERATION_3 142 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 141 && BOOST_PP_ITERATION_START_3 >= 141 +# define BOOST_PP_ITERATION_3 141 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 140 && BOOST_PP_ITERATION_START_3 >= 140 +# define BOOST_PP_ITERATION_3 140 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 139 && BOOST_PP_ITERATION_START_3 >= 139 +# define BOOST_PP_ITERATION_3 139 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 138 && BOOST_PP_ITERATION_START_3 >= 138 +# define BOOST_PP_ITERATION_3 138 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 137 && BOOST_PP_ITERATION_START_3 >= 137 +# define BOOST_PP_ITERATION_3 137 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 136 && BOOST_PP_ITERATION_START_3 >= 136 +# define BOOST_PP_ITERATION_3 136 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 135 && BOOST_PP_ITERATION_START_3 >= 135 +# define BOOST_PP_ITERATION_3 135 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 134 && BOOST_PP_ITERATION_START_3 >= 134 +# define BOOST_PP_ITERATION_3 134 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 133 && BOOST_PP_ITERATION_START_3 >= 133 +# define BOOST_PP_ITERATION_3 133 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 132 && BOOST_PP_ITERATION_START_3 >= 132 +# define BOOST_PP_ITERATION_3 132 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 131 && BOOST_PP_ITERATION_START_3 >= 131 +# define BOOST_PP_ITERATION_3 131 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 130 && BOOST_PP_ITERATION_START_3 >= 130 +# define BOOST_PP_ITERATION_3 130 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 129 && BOOST_PP_ITERATION_START_3 >= 129 +# define BOOST_PP_ITERATION_3 129 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 128 && BOOST_PP_ITERATION_START_3 >= 128 +# define BOOST_PP_ITERATION_3 128 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 127 && BOOST_PP_ITERATION_START_3 >= 127 +# define BOOST_PP_ITERATION_3 127 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 126 && BOOST_PP_ITERATION_START_3 >= 126 +# define BOOST_PP_ITERATION_3 126 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 125 && BOOST_PP_ITERATION_START_3 >= 125 +# define BOOST_PP_ITERATION_3 125 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 124 && BOOST_PP_ITERATION_START_3 >= 124 +# define BOOST_PP_ITERATION_3 124 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 123 && BOOST_PP_ITERATION_START_3 >= 123 +# define BOOST_PP_ITERATION_3 123 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 122 && BOOST_PP_ITERATION_START_3 >= 122 +# define BOOST_PP_ITERATION_3 122 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 121 && BOOST_PP_ITERATION_START_3 >= 121 +# define BOOST_PP_ITERATION_3 121 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 120 && BOOST_PP_ITERATION_START_3 >= 120 +# define BOOST_PP_ITERATION_3 120 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 119 && BOOST_PP_ITERATION_START_3 >= 119 +# define BOOST_PP_ITERATION_3 119 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 118 && BOOST_PP_ITERATION_START_3 >= 118 +# define BOOST_PP_ITERATION_3 118 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 117 && BOOST_PP_ITERATION_START_3 >= 117 +# define BOOST_PP_ITERATION_3 117 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 116 && BOOST_PP_ITERATION_START_3 >= 116 +# define BOOST_PP_ITERATION_3 116 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 115 && BOOST_PP_ITERATION_START_3 >= 115 +# define BOOST_PP_ITERATION_3 115 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 114 && BOOST_PP_ITERATION_START_3 >= 114 +# define BOOST_PP_ITERATION_3 114 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 113 && BOOST_PP_ITERATION_START_3 >= 113 +# define BOOST_PP_ITERATION_3 113 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 112 && BOOST_PP_ITERATION_START_3 >= 112 +# define BOOST_PP_ITERATION_3 112 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 111 && BOOST_PP_ITERATION_START_3 >= 111 +# define BOOST_PP_ITERATION_3 111 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 110 && BOOST_PP_ITERATION_START_3 >= 110 +# define BOOST_PP_ITERATION_3 110 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 109 && BOOST_PP_ITERATION_START_3 >= 109 +# define BOOST_PP_ITERATION_3 109 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 108 && BOOST_PP_ITERATION_START_3 >= 108 +# define BOOST_PP_ITERATION_3 108 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 107 && BOOST_PP_ITERATION_START_3 >= 107 +# define BOOST_PP_ITERATION_3 107 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 106 && BOOST_PP_ITERATION_START_3 >= 106 +# define BOOST_PP_ITERATION_3 106 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 105 && BOOST_PP_ITERATION_START_3 >= 105 +# define BOOST_PP_ITERATION_3 105 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 104 && BOOST_PP_ITERATION_START_3 >= 104 +# define BOOST_PP_ITERATION_3 104 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 103 && BOOST_PP_ITERATION_START_3 >= 103 +# define BOOST_PP_ITERATION_3 103 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 102 && BOOST_PP_ITERATION_START_3 >= 102 +# define BOOST_PP_ITERATION_3 102 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 101 && BOOST_PP_ITERATION_START_3 >= 101 +# define BOOST_PP_ITERATION_3 101 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 100 && BOOST_PP_ITERATION_START_3 >= 100 +# define BOOST_PP_ITERATION_3 100 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 99 && BOOST_PP_ITERATION_START_3 >= 99 +# define BOOST_PP_ITERATION_3 99 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 98 && BOOST_PP_ITERATION_START_3 >= 98 +# define BOOST_PP_ITERATION_3 98 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 97 && BOOST_PP_ITERATION_START_3 >= 97 +# define BOOST_PP_ITERATION_3 97 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 96 && BOOST_PP_ITERATION_START_3 >= 96 +# define BOOST_PP_ITERATION_3 96 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 95 && BOOST_PP_ITERATION_START_3 >= 95 +# define BOOST_PP_ITERATION_3 95 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 94 && BOOST_PP_ITERATION_START_3 >= 94 +# define BOOST_PP_ITERATION_3 94 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 93 && BOOST_PP_ITERATION_START_3 >= 93 +# define BOOST_PP_ITERATION_3 93 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 92 && BOOST_PP_ITERATION_START_3 >= 92 +# define BOOST_PP_ITERATION_3 92 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 91 && BOOST_PP_ITERATION_START_3 >= 91 +# define BOOST_PP_ITERATION_3 91 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 90 && BOOST_PP_ITERATION_START_3 >= 90 +# define BOOST_PP_ITERATION_3 90 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 89 && BOOST_PP_ITERATION_START_3 >= 89 +# define BOOST_PP_ITERATION_3 89 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 88 && BOOST_PP_ITERATION_START_3 >= 88 +# define BOOST_PP_ITERATION_3 88 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 87 && BOOST_PP_ITERATION_START_3 >= 87 +# define BOOST_PP_ITERATION_3 87 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 86 && BOOST_PP_ITERATION_START_3 >= 86 +# define BOOST_PP_ITERATION_3 86 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 85 && BOOST_PP_ITERATION_START_3 >= 85 +# define BOOST_PP_ITERATION_3 85 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 84 && BOOST_PP_ITERATION_START_3 >= 84 +# define BOOST_PP_ITERATION_3 84 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 83 && BOOST_PP_ITERATION_START_3 >= 83 +# define BOOST_PP_ITERATION_3 83 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 82 && BOOST_PP_ITERATION_START_3 >= 82 +# define BOOST_PP_ITERATION_3 82 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 81 && BOOST_PP_ITERATION_START_3 >= 81 +# define BOOST_PP_ITERATION_3 81 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 80 && BOOST_PP_ITERATION_START_3 >= 80 +# define BOOST_PP_ITERATION_3 80 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 79 && BOOST_PP_ITERATION_START_3 >= 79 +# define BOOST_PP_ITERATION_3 79 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 78 && BOOST_PP_ITERATION_START_3 >= 78 +# define BOOST_PP_ITERATION_3 78 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 77 && BOOST_PP_ITERATION_START_3 >= 77 +# define BOOST_PP_ITERATION_3 77 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 76 && BOOST_PP_ITERATION_START_3 >= 76 +# define BOOST_PP_ITERATION_3 76 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 75 && BOOST_PP_ITERATION_START_3 >= 75 +# define BOOST_PP_ITERATION_3 75 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 74 && BOOST_PP_ITERATION_START_3 >= 74 +# define BOOST_PP_ITERATION_3 74 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 73 && BOOST_PP_ITERATION_START_3 >= 73 +# define BOOST_PP_ITERATION_3 73 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 72 && BOOST_PP_ITERATION_START_3 >= 72 +# define BOOST_PP_ITERATION_3 72 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 71 && BOOST_PP_ITERATION_START_3 >= 71 +# define BOOST_PP_ITERATION_3 71 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 70 && BOOST_PP_ITERATION_START_3 >= 70 +# define BOOST_PP_ITERATION_3 70 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 69 && BOOST_PP_ITERATION_START_3 >= 69 +# define BOOST_PP_ITERATION_3 69 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 68 && BOOST_PP_ITERATION_START_3 >= 68 +# define BOOST_PP_ITERATION_3 68 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 67 && BOOST_PP_ITERATION_START_3 >= 67 +# define BOOST_PP_ITERATION_3 67 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 66 && BOOST_PP_ITERATION_START_3 >= 66 +# define BOOST_PP_ITERATION_3 66 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 65 && BOOST_PP_ITERATION_START_3 >= 65 +# define BOOST_PP_ITERATION_3 65 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 64 && BOOST_PP_ITERATION_START_3 >= 64 +# define BOOST_PP_ITERATION_3 64 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 63 && BOOST_PP_ITERATION_START_3 >= 63 +# define BOOST_PP_ITERATION_3 63 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 62 && BOOST_PP_ITERATION_START_3 >= 62 +# define BOOST_PP_ITERATION_3 62 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 61 && BOOST_PP_ITERATION_START_3 >= 61 +# define BOOST_PP_ITERATION_3 61 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 60 && BOOST_PP_ITERATION_START_3 >= 60 +# define BOOST_PP_ITERATION_3 60 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 59 && BOOST_PP_ITERATION_START_3 >= 59 +# define BOOST_PP_ITERATION_3 59 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 58 && BOOST_PP_ITERATION_START_3 >= 58 +# define BOOST_PP_ITERATION_3 58 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 57 && BOOST_PP_ITERATION_START_3 >= 57 +# define BOOST_PP_ITERATION_3 57 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 56 && BOOST_PP_ITERATION_START_3 >= 56 +# define BOOST_PP_ITERATION_3 56 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 55 && BOOST_PP_ITERATION_START_3 >= 55 +# define BOOST_PP_ITERATION_3 55 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 54 && BOOST_PP_ITERATION_START_3 >= 54 +# define BOOST_PP_ITERATION_3 54 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 53 && BOOST_PP_ITERATION_START_3 >= 53 +# define BOOST_PP_ITERATION_3 53 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 52 && BOOST_PP_ITERATION_START_3 >= 52 +# define BOOST_PP_ITERATION_3 52 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 51 && BOOST_PP_ITERATION_START_3 >= 51 +# define BOOST_PP_ITERATION_3 51 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 50 && BOOST_PP_ITERATION_START_3 >= 50 +# define BOOST_PP_ITERATION_3 50 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 49 && BOOST_PP_ITERATION_START_3 >= 49 +# define BOOST_PP_ITERATION_3 49 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 48 && BOOST_PP_ITERATION_START_3 >= 48 +# define BOOST_PP_ITERATION_3 48 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 47 && BOOST_PP_ITERATION_START_3 >= 47 +# define BOOST_PP_ITERATION_3 47 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 46 && BOOST_PP_ITERATION_START_3 >= 46 +# define BOOST_PP_ITERATION_3 46 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 45 && BOOST_PP_ITERATION_START_3 >= 45 +# define BOOST_PP_ITERATION_3 45 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 44 && BOOST_PP_ITERATION_START_3 >= 44 +# define BOOST_PP_ITERATION_3 44 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 43 && BOOST_PP_ITERATION_START_3 >= 43 +# define BOOST_PP_ITERATION_3 43 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 42 && BOOST_PP_ITERATION_START_3 >= 42 +# define BOOST_PP_ITERATION_3 42 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 41 && BOOST_PP_ITERATION_START_3 >= 41 +# define BOOST_PP_ITERATION_3 41 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 40 && BOOST_PP_ITERATION_START_3 >= 40 +# define BOOST_PP_ITERATION_3 40 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 39 && BOOST_PP_ITERATION_START_3 >= 39 +# define BOOST_PP_ITERATION_3 39 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 38 && BOOST_PP_ITERATION_START_3 >= 38 +# define BOOST_PP_ITERATION_3 38 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 37 && BOOST_PP_ITERATION_START_3 >= 37 +# define BOOST_PP_ITERATION_3 37 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 36 && BOOST_PP_ITERATION_START_3 >= 36 +# define BOOST_PP_ITERATION_3 36 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 35 && BOOST_PP_ITERATION_START_3 >= 35 +# define BOOST_PP_ITERATION_3 35 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 34 && BOOST_PP_ITERATION_START_3 >= 34 +# define BOOST_PP_ITERATION_3 34 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 33 && BOOST_PP_ITERATION_START_3 >= 33 +# define BOOST_PP_ITERATION_3 33 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 32 && BOOST_PP_ITERATION_START_3 >= 32 +# define BOOST_PP_ITERATION_3 32 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 31 && BOOST_PP_ITERATION_START_3 >= 31 +# define BOOST_PP_ITERATION_3 31 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 30 && BOOST_PP_ITERATION_START_3 >= 30 +# define BOOST_PP_ITERATION_3 30 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 29 && BOOST_PP_ITERATION_START_3 >= 29 +# define BOOST_PP_ITERATION_3 29 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 28 && BOOST_PP_ITERATION_START_3 >= 28 +# define BOOST_PP_ITERATION_3 28 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 27 && BOOST_PP_ITERATION_START_3 >= 27 +# define BOOST_PP_ITERATION_3 27 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 26 && BOOST_PP_ITERATION_START_3 >= 26 +# define BOOST_PP_ITERATION_3 26 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 25 && BOOST_PP_ITERATION_START_3 >= 25 +# define BOOST_PP_ITERATION_3 25 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 24 && BOOST_PP_ITERATION_START_3 >= 24 +# define BOOST_PP_ITERATION_3 24 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 23 && BOOST_PP_ITERATION_START_3 >= 23 +# define BOOST_PP_ITERATION_3 23 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 22 && BOOST_PP_ITERATION_START_3 >= 22 +# define BOOST_PP_ITERATION_3 22 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 21 && BOOST_PP_ITERATION_START_3 >= 21 +# define BOOST_PP_ITERATION_3 21 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 20 && BOOST_PP_ITERATION_START_3 >= 20 +# define BOOST_PP_ITERATION_3 20 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 19 && BOOST_PP_ITERATION_START_3 >= 19 +# define BOOST_PP_ITERATION_3 19 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 18 && BOOST_PP_ITERATION_START_3 >= 18 +# define BOOST_PP_ITERATION_3 18 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 17 && BOOST_PP_ITERATION_START_3 >= 17 +# define BOOST_PP_ITERATION_3 17 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 16 && BOOST_PP_ITERATION_START_3 >= 16 +# define BOOST_PP_ITERATION_3 16 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 15 && BOOST_PP_ITERATION_START_3 >= 15 +# define BOOST_PP_ITERATION_3 15 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 14 && BOOST_PP_ITERATION_START_3 >= 14 +# define BOOST_PP_ITERATION_3 14 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 13 && BOOST_PP_ITERATION_START_3 >= 13 +# define BOOST_PP_ITERATION_3 13 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 12 && BOOST_PP_ITERATION_START_3 >= 12 +# define BOOST_PP_ITERATION_3 12 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 11 && BOOST_PP_ITERATION_START_3 >= 11 +# define BOOST_PP_ITERATION_3 11 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 10 && BOOST_PP_ITERATION_START_3 >= 10 +# define BOOST_PP_ITERATION_3 10 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 9 && BOOST_PP_ITERATION_START_3 >= 9 +# define BOOST_PP_ITERATION_3 9 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 8 && BOOST_PP_ITERATION_START_3 >= 8 +# define BOOST_PP_ITERATION_3 8 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 7 && BOOST_PP_ITERATION_START_3 >= 7 +# define BOOST_PP_ITERATION_3 7 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 6 && BOOST_PP_ITERATION_START_3 >= 6 +# define BOOST_PP_ITERATION_3 6 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 5 && BOOST_PP_ITERATION_START_3 >= 5 +# define BOOST_PP_ITERATION_3 5 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 4 && BOOST_PP_ITERATION_START_3 >= 4 +# define BOOST_PP_ITERATION_3 4 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 3 && BOOST_PP_ITERATION_START_3 >= 3 +# define BOOST_PP_ITERATION_3 3 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 2 && BOOST_PP_ITERATION_START_3 >= 2 +# define BOOST_PP_ITERATION_3 2 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 1 && BOOST_PP_ITERATION_START_3 >= 1 +# define BOOST_PP_ITERATION_3 1 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif +# if BOOST_PP_ITERATION_FINISH_3 <= 0 && BOOST_PP_ITERATION_START_3 >= 0 +# define BOOST_PP_ITERATION_3 0 +# include BOOST_PP_FILENAME_3 +# undef BOOST_PP_ITERATION_3 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse4.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse4.hpp new file mode 100644 index 00000000..3bcfba04 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse4.hpp @@ -0,0 +1,1296 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if BOOST_PP_ITERATION_FINISH_4 <= 256 && BOOST_PP_ITERATION_START_4 >= 256 +# define BOOST_PP_ITERATION_4 256 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 255 && BOOST_PP_ITERATION_START_4 >= 255 +# define BOOST_PP_ITERATION_4 255 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 254 && BOOST_PP_ITERATION_START_4 >= 254 +# define BOOST_PP_ITERATION_4 254 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 253 && BOOST_PP_ITERATION_START_4 >= 253 +# define BOOST_PP_ITERATION_4 253 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 252 && BOOST_PP_ITERATION_START_4 >= 252 +# define BOOST_PP_ITERATION_4 252 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 251 && BOOST_PP_ITERATION_START_4 >= 251 +# define BOOST_PP_ITERATION_4 251 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 250 && BOOST_PP_ITERATION_START_4 >= 250 +# define BOOST_PP_ITERATION_4 250 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 249 && BOOST_PP_ITERATION_START_4 >= 249 +# define BOOST_PP_ITERATION_4 249 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 248 && BOOST_PP_ITERATION_START_4 >= 248 +# define BOOST_PP_ITERATION_4 248 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 247 && BOOST_PP_ITERATION_START_4 >= 247 +# define BOOST_PP_ITERATION_4 247 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 246 && BOOST_PP_ITERATION_START_4 >= 246 +# define BOOST_PP_ITERATION_4 246 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 245 && BOOST_PP_ITERATION_START_4 >= 245 +# define BOOST_PP_ITERATION_4 245 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 244 && BOOST_PP_ITERATION_START_4 >= 244 +# define BOOST_PP_ITERATION_4 244 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 243 && BOOST_PP_ITERATION_START_4 >= 243 +# define BOOST_PP_ITERATION_4 243 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 242 && BOOST_PP_ITERATION_START_4 >= 242 +# define BOOST_PP_ITERATION_4 242 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 241 && BOOST_PP_ITERATION_START_4 >= 241 +# define BOOST_PP_ITERATION_4 241 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 240 && BOOST_PP_ITERATION_START_4 >= 240 +# define BOOST_PP_ITERATION_4 240 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 239 && BOOST_PP_ITERATION_START_4 >= 239 +# define BOOST_PP_ITERATION_4 239 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 238 && BOOST_PP_ITERATION_START_4 >= 238 +# define BOOST_PP_ITERATION_4 238 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 237 && BOOST_PP_ITERATION_START_4 >= 237 +# define BOOST_PP_ITERATION_4 237 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 236 && BOOST_PP_ITERATION_START_4 >= 236 +# define BOOST_PP_ITERATION_4 236 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 235 && BOOST_PP_ITERATION_START_4 >= 235 +# define BOOST_PP_ITERATION_4 235 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 234 && BOOST_PP_ITERATION_START_4 >= 234 +# define BOOST_PP_ITERATION_4 234 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 233 && BOOST_PP_ITERATION_START_4 >= 233 +# define BOOST_PP_ITERATION_4 233 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 232 && BOOST_PP_ITERATION_START_4 >= 232 +# define BOOST_PP_ITERATION_4 232 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 231 && BOOST_PP_ITERATION_START_4 >= 231 +# define BOOST_PP_ITERATION_4 231 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 230 && BOOST_PP_ITERATION_START_4 >= 230 +# define BOOST_PP_ITERATION_4 230 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 229 && BOOST_PP_ITERATION_START_4 >= 229 +# define BOOST_PP_ITERATION_4 229 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 228 && BOOST_PP_ITERATION_START_4 >= 228 +# define BOOST_PP_ITERATION_4 228 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 227 && BOOST_PP_ITERATION_START_4 >= 227 +# define BOOST_PP_ITERATION_4 227 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 226 && BOOST_PP_ITERATION_START_4 >= 226 +# define BOOST_PP_ITERATION_4 226 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 225 && BOOST_PP_ITERATION_START_4 >= 225 +# define BOOST_PP_ITERATION_4 225 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 224 && BOOST_PP_ITERATION_START_4 >= 224 +# define BOOST_PP_ITERATION_4 224 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 223 && BOOST_PP_ITERATION_START_4 >= 223 +# define BOOST_PP_ITERATION_4 223 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 222 && BOOST_PP_ITERATION_START_4 >= 222 +# define BOOST_PP_ITERATION_4 222 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 221 && BOOST_PP_ITERATION_START_4 >= 221 +# define BOOST_PP_ITERATION_4 221 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 220 && BOOST_PP_ITERATION_START_4 >= 220 +# define BOOST_PP_ITERATION_4 220 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 219 && BOOST_PP_ITERATION_START_4 >= 219 +# define BOOST_PP_ITERATION_4 219 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 218 && BOOST_PP_ITERATION_START_4 >= 218 +# define BOOST_PP_ITERATION_4 218 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 217 && BOOST_PP_ITERATION_START_4 >= 217 +# define BOOST_PP_ITERATION_4 217 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 216 && BOOST_PP_ITERATION_START_4 >= 216 +# define BOOST_PP_ITERATION_4 216 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 215 && BOOST_PP_ITERATION_START_4 >= 215 +# define BOOST_PP_ITERATION_4 215 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 214 && BOOST_PP_ITERATION_START_4 >= 214 +# define BOOST_PP_ITERATION_4 214 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 213 && BOOST_PP_ITERATION_START_4 >= 213 +# define BOOST_PP_ITERATION_4 213 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 212 && BOOST_PP_ITERATION_START_4 >= 212 +# define BOOST_PP_ITERATION_4 212 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 211 && BOOST_PP_ITERATION_START_4 >= 211 +# define BOOST_PP_ITERATION_4 211 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 210 && BOOST_PP_ITERATION_START_4 >= 210 +# define BOOST_PP_ITERATION_4 210 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 209 && BOOST_PP_ITERATION_START_4 >= 209 +# define BOOST_PP_ITERATION_4 209 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 208 && BOOST_PP_ITERATION_START_4 >= 208 +# define BOOST_PP_ITERATION_4 208 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 207 && BOOST_PP_ITERATION_START_4 >= 207 +# define BOOST_PP_ITERATION_4 207 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 206 && BOOST_PP_ITERATION_START_4 >= 206 +# define BOOST_PP_ITERATION_4 206 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 205 && BOOST_PP_ITERATION_START_4 >= 205 +# define BOOST_PP_ITERATION_4 205 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 204 && BOOST_PP_ITERATION_START_4 >= 204 +# define BOOST_PP_ITERATION_4 204 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 203 && BOOST_PP_ITERATION_START_4 >= 203 +# define BOOST_PP_ITERATION_4 203 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 202 && BOOST_PP_ITERATION_START_4 >= 202 +# define BOOST_PP_ITERATION_4 202 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 201 && BOOST_PP_ITERATION_START_4 >= 201 +# define BOOST_PP_ITERATION_4 201 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 200 && BOOST_PP_ITERATION_START_4 >= 200 +# define BOOST_PP_ITERATION_4 200 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 199 && BOOST_PP_ITERATION_START_4 >= 199 +# define BOOST_PP_ITERATION_4 199 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 198 && BOOST_PP_ITERATION_START_4 >= 198 +# define BOOST_PP_ITERATION_4 198 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 197 && BOOST_PP_ITERATION_START_4 >= 197 +# define BOOST_PP_ITERATION_4 197 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 196 && BOOST_PP_ITERATION_START_4 >= 196 +# define BOOST_PP_ITERATION_4 196 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 195 && BOOST_PP_ITERATION_START_4 >= 195 +# define BOOST_PP_ITERATION_4 195 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 194 && BOOST_PP_ITERATION_START_4 >= 194 +# define BOOST_PP_ITERATION_4 194 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 193 && BOOST_PP_ITERATION_START_4 >= 193 +# define BOOST_PP_ITERATION_4 193 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 192 && BOOST_PP_ITERATION_START_4 >= 192 +# define BOOST_PP_ITERATION_4 192 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 191 && BOOST_PP_ITERATION_START_4 >= 191 +# define BOOST_PP_ITERATION_4 191 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 190 && BOOST_PP_ITERATION_START_4 >= 190 +# define BOOST_PP_ITERATION_4 190 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 189 && BOOST_PP_ITERATION_START_4 >= 189 +# define BOOST_PP_ITERATION_4 189 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 188 && BOOST_PP_ITERATION_START_4 >= 188 +# define BOOST_PP_ITERATION_4 188 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 187 && BOOST_PP_ITERATION_START_4 >= 187 +# define BOOST_PP_ITERATION_4 187 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 186 && BOOST_PP_ITERATION_START_4 >= 186 +# define BOOST_PP_ITERATION_4 186 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 185 && BOOST_PP_ITERATION_START_4 >= 185 +# define BOOST_PP_ITERATION_4 185 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 184 && BOOST_PP_ITERATION_START_4 >= 184 +# define BOOST_PP_ITERATION_4 184 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 183 && BOOST_PP_ITERATION_START_4 >= 183 +# define BOOST_PP_ITERATION_4 183 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 182 && BOOST_PP_ITERATION_START_4 >= 182 +# define BOOST_PP_ITERATION_4 182 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 181 && BOOST_PP_ITERATION_START_4 >= 181 +# define BOOST_PP_ITERATION_4 181 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 180 && BOOST_PP_ITERATION_START_4 >= 180 +# define BOOST_PP_ITERATION_4 180 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 179 && BOOST_PP_ITERATION_START_4 >= 179 +# define BOOST_PP_ITERATION_4 179 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 178 && BOOST_PP_ITERATION_START_4 >= 178 +# define BOOST_PP_ITERATION_4 178 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 177 && BOOST_PP_ITERATION_START_4 >= 177 +# define BOOST_PP_ITERATION_4 177 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 176 && BOOST_PP_ITERATION_START_4 >= 176 +# define BOOST_PP_ITERATION_4 176 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 175 && BOOST_PP_ITERATION_START_4 >= 175 +# define BOOST_PP_ITERATION_4 175 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 174 && BOOST_PP_ITERATION_START_4 >= 174 +# define BOOST_PP_ITERATION_4 174 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 173 && BOOST_PP_ITERATION_START_4 >= 173 +# define BOOST_PP_ITERATION_4 173 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 172 && BOOST_PP_ITERATION_START_4 >= 172 +# define BOOST_PP_ITERATION_4 172 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 171 && BOOST_PP_ITERATION_START_4 >= 171 +# define BOOST_PP_ITERATION_4 171 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 170 && BOOST_PP_ITERATION_START_4 >= 170 +# define BOOST_PP_ITERATION_4 170 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 169 && BOOST_PP_ITERATION_START_4 >= 169 +# define BOOST_PP_ITERATION_4 169 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 168 && BOOST_PP_ITERATION_START_4 >= 168 +# define BOOST_PP_ITERATION_4 168 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 167 && BOOST_PP_ITERATION_START_4 >= 167 +# define BOOST_PP_ITERATION_4 167 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 166 && BOOST_PP_ITERATION_START_4 >= 166 +# define BOOST_PP_ITERATION_4 166 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 165 && BOOST_PP_ITERATION_START_4 >= 165 +# define BOOST_PP_ITERATION_4 165 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 164 && BOOST_PP_ITERATION_START_4 >= 164 +# define BOOST_PP_ITERATION_4 164 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 163 && BOOST_PP_ITERATION_START_4 >= 163 +# define BOOST_PP_ITERATION_4 163 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 162 && BOOST_PP_ITERATION_START_4 >= 162 +# define BOOST_PP_ITERATION_4 162 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 161 && BOOST_PP_ITERATION_START_4 >= 161 +# define BOOST_PP_ITERATION_4 161 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 160 && BOOST_PP_ITERATION_START_4 >= 160 +# define BOOST_PP_ITERATION_4 160 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 159 && BOOST_PP_ITERATION_START_4 >= 159 +# define BOOST_PP_ITERATION_4 159 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 158 && BOOST_PP_ITERATION_START_4 >= 158 +# define BOOST_PP_ITERATION_4 158 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 157 && BOOST_PP_ITERATION_START_4 >= 157 +# define BOOST_PP_ITERATION_4 157 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 156 && BOOST_PP_ITERATION_START_4 >= 156 +# define BOOST_PP_ITERATION_4 156 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 155 && BOOST_PP_ITERATION_START_4 >= 155 +# define BOOST_PP_ITERATION_4 155 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 154 && BOOST_PP_ITERATION_START_4 >= 154 +# define BOOST_PP_ITERATION_4 154 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 153 && BOOST_PP_ITERATION_START_4 >= 153 +# define BOOST_PP_ITERATION_4 153 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 152 && BOOST_PP_ITERATION_START_4 >= 152 +# define BOOST_PP_ITERATION_4 152 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 151 && BOOST_PP_ITERATION_START_4 >= 151 +# define BOOST_PP_ITERATION_4 151 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 150 && BOOST_PP_ITERATION_START_4 >= 150 +# define BOOST_PP_ITERATION_4 150 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 149 && BOOST_PP_ITERATION_START_4 >= 149 +# define BOOST_PP_ITERATION_4 149 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 148 && BOOST_PP_ITERATION_START_4 >= 148 +# define BOOST_PP_ITERATION_4 148 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 147 && BOOST_PP_ITERATION_START_4 >= 147 +# define BOOST_PP_ITERATION_4 147 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 146 && BOOST_PP_ITERATION_START_4 >= 146 +# define BOOST_PP_ITERATION_4 146 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 145 && BOOST_PP_ITERATION_START_4 >= 145 +# define BOOST_PP_ITERATION_4 145 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 144 && BOOST_PP_ITERATION_START_4 >= 144 +# define BOOST_PP_ITERATION_4 144 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 143 && BOOST_PP_ITERATION_START_4 >= 143 +# define BOOST_PP_ITERATION_4 143 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 142 && BOOST_PP_ITERATION_START_4 >= 142 +# define BOOST_PP_ITERATION_4 142 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 141 && BOOST_PP_ITERATION_START_4 >= 141 +# define BOOST_PP_ITERATION_4 141 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 140 && BOOST_PP_ITERATION_START_4 >= 140 +# define BOOST_PP_ITERATION_4 140 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 139 && BOOST_PP_ITERATION_START_4 >= 139 +# define BOOST_PP_ITERATION_4 139 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 138 && BOOST_PP_ITERATION_START_4 >= 138 +# define BOOST_PP_ITERATION_4 138 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 137 && BOOST_PP_ITERATION_START_4 >= 137 +# define BOOST_PP_ITERATION_4 137 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 136 && BOOST_PP_ITERATION_START_4 >= 136 +# define BOOST_PP_ITERATION_4 136 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 135 && BOOST_PP_ITERATION_START_4 >= 135 +# define BOOST_PP_ITERATION_4 135 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 134 && BOOST_PP_ITERATION_START_4 >= 134 +# define BOOST_PP_ITERATION_4 134 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 133 && BOOST_PP_ITERATION_START_4 >= 133 +# define BOOST_PP_ITERATION_4 133 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 132 && BOOST_PP_ITERATION_START_4 >= 132 +# define BOOST_PP_ITERATION_4 132 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 131 && BOOST_PP_ITERATION_START_4 >= 131 +# define BOOST_PP_ITERATION_4 131 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 130 && BOOST_PP_ITERATION_START_4 >= 130 +# define BOOST_PP_ITERATION_4 130 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 129 && BOOST_PP_ITERATION_START_4 >= 129 +# define BOOST_PP_ITERATION_4 129 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 128 && BOOST_PP_ITERATION_START_4 >= 128 +# define BOOST_PP_ITERATION_4 128 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 127 && BOOST_PP_ITERATION_START_4 >= 127 +# define BOOST_PP_ITERATION_4 127 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 126 && BOOST_PP_ITERATION_START_4 >= 126 +# define BOOST_PP_ITERATION_4 126 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 125 && BOOST_PP_ITERATION_START_4 >= 125 +# define BOOST_PP_ITERATION_4 125 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 124 && BOOST_PP_ITERATION_START_4 >= 124 +# define BOOST_PP_ITERATION_4 124 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 123 && BOOST_PP_ITERATION_START_4 >= 123 +# define BOOST_PP_ITERATION_4 123 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 122 && BOOST_PP_ITERATION_START_4 >= 122 +# define BOOST_PP_ITERATION_4 122 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 121 && BOOST_PP_ITERATION_START_4 >= 121 +# define BOOST_PP_ITERATION_4 121 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 120 && BOOST_PP_ITERATION_START_4 >= 120 +# define BOOST_PP_ITERATION_4 120 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 119 && BOOST_PP_ITERATION_START_4 >= 119 +# define BOOST_PP_ITERATION_4 119 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 118 && BOOST_PP_ITERATION_START_4 >= 118 +# define BOOST_PP_ITERATION_4 118 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 117 && BOOST_PP_ITERATION_START_4 >= 117 +# define BOOST_PP_ITERATION_4 117 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 116 && BOOST_PP_ITERATION_START_4 >= 116 +# define BOOST_PP_ITERATION_4 116 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 115 && BOOST_PP_ITERATION_START_4 >= 115 +# define BOOST_PP_ITERATION_4 115 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 114 && BOOST_PP_ITERATION_START_4 >= 114 +# define BOOST_PP_ITERATION_4 114 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 113 && BOOST_PP_ITERATION_START_4 >= 113 +# define BOOST_PP_ITERATION_4 113 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 112 && BOOST_PP_ITERATION_START_4 >= 112 +# define BOOST_PP_ITERATION_4 112 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 111 && BOOST_PP_ITERATION_START_4 >= 111 +# define BOOST_PP_ITERATION_4 111 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 110 && BOOST_PP_ITERATION_START_4 >= 110 +# define BOOST_PP_ITERATION_4 110 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 109 && BOOST_PP_ITERATION_START_4 >= 109 +# define BOOST_PP_ITERATION_4 109 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 108 && BOOST_PP_ITERATION_START_4 >= 108 +# define BOOST_PP_ITERATION_4 108 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 107 && BOOST_PP_ITERATION_START_4 >= 107 +# define BOOST_PP_ITERATION_4 107 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 106 && BOOST_PP_ITERATION_START_4 >= 106 +# define BOOST_PP_ITERATION_4 106 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 105 && BOOST_PP_ITERATION_START_4 >= 105 +# define BOOST_PP_ITERATION_4 105 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 104 && BOOST_PP_ITERATION_START_4 >= 104 +# define BOOST_PP_ITERATION_4 104 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 103 && BOOST_PP_ITERATION_START_4 >= 103 +# define BOOST_PP_ITERATION_4 103 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 102 && BOOST_PP_ITERATION_START_4 >= 102 +# define BOOST_PP_ITERATION_4 102 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 101 && BOOST_PP_ITERATION_START_4 >= 101 +# define BOOST_PP_ITERATION_4 101 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 100 && BOOST_PP_ITERATION_START_4 >= 100 +# define BOOST_PP_ITERATION_4 100 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 99 && BOOST_PP_ITERATION_START_4 >= 99 +# define BOOST_PP_ITERATION_4 99 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 98 && BOOST_PP_ITERATION_START_4 >= 98 +# define BOOST_PP_ITERATION_4 98 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 97 && BOOST_PP_ITERATION_START_4 >= 97 +# define BOOST_PP_ITERATION_4 97 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 96 && BOOST_PP_ITERATION_START_4 >= 96 +# define BOOST_PP_ITERATION_4 96 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 95 && BOOST_PP_ITERATION_START_4 >= 95 +# define BOOST_PP_ITERATION_4 95 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 94 && BOOST_PP_ITERATION_START_4 >= 94 +# define BOOST_PP_ITERATION_4 94 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 93 && BOOST_PP_ITERATION_START_4 >= 93 +# define BOOST_PP_ITERATION_4 93 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 92 && BOOST_PP_ITERATION_START_4 >= 92 +# define BOOST_PP_ITERATION_4 92 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 91 && BOOST_PP_ITERATION_START_4 >= 91 +# define BOOST_PP_ITERATION_4 91 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 90 && BOOST_PP_ITERATION_START_4 >= 90 +# define BOOST_PP_ITERATION_4 90 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 89 && BOOST_PP_ITERATION_START_4 >= 89 +# define BOOST_PP_ITERATION_4 89 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 88 && BOOST_PP_ITERATION_START_4 >= 88 +# define BOOST_PP_ITERATION_4 88 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 87 && BOOST_PP_ITERATION_START_4 >= 87 +# define BOOST_PP_ITERATION_4 87 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 86 && BOOST_PP_ITERATION_START_4 >= 86 +# define BOOST_PP_ITERATION_4 86 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 85 && BOOST_PP_ITERATION_START_4 >= 85 +# define BOOST_PP_ITERATION_4 85 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 84 && BOOST_PP_ITERATION_START_4 >= 84 +# define BOOST_PP_ITERATION_4 84 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 83 && BOOST_PP_ITERATION_START_4 >= 83 +# define BOOST_PP_ITERATION_4 83 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 82 && BOOST_PP_ITERATION_START_4 >= 82 +# define BOOST_PP_ITERATION_4 82 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 81 && BOOST_PP_ITERATION_START_4 >= 81 +# define BOOST_PP_ITERATION_4 81 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 80 && BOOST_PP_ITERATION_START_4 >= 80 +# define BOOST_PP_ITERATION_4 80 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 79 && BOOST_PP_ITERATION_START_4 >= 79 +# define BOOST_PP_ITERATION_4 79 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 78 && BOOST_PP_ITERATION_START_4 >= 78 +# define BOOST_PP_ITERATION_4 78 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 77 && BOOST_PP_ITERATION_START_4 >= 77 +# define BOOST_PP_ITERATION_4 77 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 76 && BOOST_PP_ITERATION_START_4 >= 76 +# define BOOST_PP_ITERATION_4 76 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 75 && BOOST_PP_ITERATION_START_4 >= 75 +# define BOOST_PP_ITERATION_4 75 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 74 && BOOST_PP_ITERATION_START_4 >= 74 +# define BOOST_PP_ITERATION_4 74 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 73 && BOOST_PP_ITERATION_START_4 >= 73 +# define BOOST_PP_ITERATION_4 73 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 72 && BOOST_PP_ITERATION_START_4 >= 72 +# define BOOST_PP_ITERATION_4 72 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 71 && BOOST_PP_ITERATION_START_4 >= 71 +# define BOOST_PP_ITERATION_4 71 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 70 && BOOST_PP_ITERATION_START_4 >= 70 +# define BOOST_PP_ITERATION_4 70 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 69 && BOOST_PP_ITERATION_START_4 >= 69 +# define BOOST_PP_ITERATION_4 69 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 68 && BOOST_PP_ITERATION_START_4 >= 68 +# define BOOST_PP_ITERATION_4 68 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 67 && BOOST_PP_ITERATION_START_4 >= 67 +# define BOOST_PP_ITERATION_4 67 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 66 && BOOST_PP_ITERATION_START_4 >= 66 +# define BOOST_PP_ITERATION_4 66 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 65 && BOOST_PP_ITERATION_START_4 >= 65 +# define BOOST_PP_ITERATION_4 65 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 64 && BOOST_PP_ITERATION_START_4 >= 64 +# define BOOST_PP_ITERATION_4 64 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 63 && BOOST_PP_ITERATION_START_4 >= 63 +# define BOOST_PP_ITERATION_4 63 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 62 && BOOST_PP_ITERATION_START_4 >= 62 +# define BOOST_PP_ITERATION_4 62 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 61 && BOOST_PP_ITERATION_START_4 >= 61 +# define BOOST_PP_ITERATION_4 61 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 60 && BOOST_PP_ITERATION_START_4 >= 60 +# define BOOST_PP_ITERATION_4 60 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 59 && BOOST_PP_ITERATION_START_4 >= 59 +# define BOOST_PP_ITERATION_4 59 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 58 && BOOST_PP_ITERATION_START_4 >= 58 +# define BOOST_PP_ITERATION_4 58 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 57 && BOOST_PP_ITERATION_START_4 >= 57 +# define BOOST_PP_ITERATION_4 57 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 56 && BOOST_PP_ITERATION_START_4 >= 56 +# define BOOST_PP_ITERATION_4 56 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 55 && BOOST_PP_ITERATION_START_4 >= 55 +# define BOOST_PP_ITERATION_4 55 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 54 && BOOST_PP_ITERATION_START_4 >= 54 +# define BOOST_PP_ITERATION_4 54 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 53 && BOOST_PP_ITERATION_START_4 >= 53 +# define BOOST_PP_ITERATION_4 53 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 52 && BOOST_PP_ITERATION_START_4 >= 52 +# define BOOST_PP_ITERATION_4 52 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 51 && BOOST_PP_ITERATION_START_4 >= 51 +# define BOOST_PP_ITERATION_4 51 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 50 && BOOST_PP_ITERATION_START_4 >= 50 +# define BOOST_PP_ITERATION_4 50 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 49 && BOOST_PP_ITERATION_START_4 >= 49 +# define BOOST_PP_ITERATION_4 49 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 48 && BOOST_PP_ITERATION_START_4 >= 48 +# define BOOST_PP_ITERATION_4 48 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 47 && BOOST_PP_ITERATION_START_4 >= 47 +# define BOOST_PP_ITERATION_4 47 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 46 && BOOST_PP_ITERATION_START_4 >= 46 +# define BOOST_PP_ITERATION_4 46 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 45 && BOOST_PP_ITERATION_START_4 >= 45 +# define BOOST_PP_ITERATION_4 45 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 44 && BOOST_PP_ITERATION_START_4 >= 44 +# define BOOST_PP_ITERATION_4 44 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 43 && BOOST_PP_ITERATION_START_4 >= 43 +# define BOOST_PP_ITERATION_4 43 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 42 && BOOST_PP_ITERATION_START_4 >= 42 +# define BOOST_PP_ITERATION_4 42 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 41 && BOOST_PP_ITERATION_START_4 >= 41 +# define BOOST_PP_ITERATION_4 41 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 40 && BOOST_PP_ITERATION_START_4 >= 40 +# define BOOST_PP_ITERATION_4 40 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 39 && BOOST_PP_ITERATION_START_4 >= 39 +# define BOOST_PP_ITERATION_4 39 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 38 && BOOST_PP_ITERATION_START_4 >= 38 +# define BOOST_PP_ITERATION_4 38 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 37 && BOOST_PP_ITERATION_START_4 >= 37 +# define BOOST_PP_ITERATION_4 37 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 36 && BOOST_PP_ITERATION_START_4 >= 36 +# define BOOST_PP_ITERATION_4 36 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 35 && BOOST_PP_ITERATION_START_4 >= 35 +# define BOOST_PP_ITERATION_4 35 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 34 && BOOST_PP_ITERATION_START_4 >= 34 +# define BOOST_PP_ITERATION_4 34 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 33 && BOOST_PP_ITERATION_START_4 >= 33 +# define BOOST_PP_ITERATION_4 33 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 32 && BOOST_PP_ITERATION_START_4 >= 32 +# define BOOST_PP_ITERATION_4 32 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 31 && BOOST_PP_ITERATION_START_4 >= 31 +# define BOOST_PP_ITERATION_4 31 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 30 && BOOST_PP_ITERATION_START_4 >= 30 +# define BOOST_PP_ITERATION_4 30 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 29 && BOOST_PP_ITERATION_START_4 >= 29 +# define BOOST_PP_ITERATION_4 29 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 28 && BOOST_PP_ITERATION_START_4 >= 28 +# define BOOST_PP_ITERATION_4 28 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 27 && BOOST_PP_ITERATION_START_4 >= 27 +# define BOOST_PP_ITERATION_4 27 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 26 && BOOST_PP_ITERATION_START_4 >= 26 +# define BOOST_PP_ITERATION_4 26 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 25 && BOOST_PP_ITERATION_START_4 >= 25 +# define BOOST_PP_ITERATION_4 25 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 24 && BOOST_PP_ITERATION_START_4 >= 24 +# define BOOST_PP_ITERATION_4 24 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 23 && BOOST_PP_ITERATION_START_4 >= 23 +# define BOOST_PP_ITERATION_4 23 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 22 && BOOST_PP_ITERATION_START_4 >= 22 +# define BOOST_PP_ITERATION_4 22 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 21 && BOOST_PP_ITERATION_START_4 >= 21 +# define BOOST_PP_ITERATION_4 21 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 20 && BOOST_PP_ITERATION_START_4 >= 20 +# define BOOST_PP_ITERATION_4 20 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 19 && BOOST_PP_ITERATION_START_4 >= 19 +# define BOOST_PP_ITERATION_4 19 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 18 && BOOST_PP_ITERATION_START_4 >= 18 +# define BOOST_PP_ITERATION_4 18 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 17 && BOOST_PP_ITERATION_START_4 >= 17 +# define BOOST_PP_ITERATION_4 17 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 16 && BOOST_PP_ITERATION_START_4 >= 16 +# define BOOST_PP_ITERATION_4 16 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 15 && BOOST_PP_ITERATION_START_4 >= 15 +# define BOOST_PP_ITERATION_4 15 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 14 && BOOST_PP_ITERATION_START_4 >= 14 +# define BOOST_PP_ITERATION_4 14 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 13 && BOOST_PP_ITERATION_START_4 >= 13 +# define BOOST_PP_ITERATION_4 13 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 12 && BOOST_PP_ITERATION_START_4 >= 12 +# define BOOST_PP_ITERATION_4 12 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 11 && BOOST_PP_ITERATION_START_4 >= 11 +# define BOOST_PP_ITERATION_4 11 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 10 && BOOST_PP_ITERATION_START_4 >= 10 +# define BOOST_PP_ITERATION_4 10 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 9 && BOOST_PP_ITERATION_START_4 >= 9 +# define BOOST_PP_ITERATION_4 9 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 8 && BOOST_PP_ITERATION_START_4 >= 8 +# define BOOST_PP_ITERATION_4 8 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 7 && BOOST_PP_ITERATION_START_4 >= 7 +# define BOOST_PP_ITERATION_4 7 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 6 && BOOST_PP_ITERATION_START_4 >= 6 +# define BOOST_PP_ITERATION_4 6 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 5 && BOOST_PP_ITERATION_START_4 >= 5 +# define BOOST_PP_ITERATION_4 5 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 4 && BOOST_PP_ITERATION_START_4 >= 4 +# define BOOST_PP_ITERATION_4 4 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 3 && BOOST_PP_ITERATION_START_4 >= 3 +# define BOOST_PP_ITERATION_4 3 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 2 && BOOST_PP_ITERATION_START_4 >= 2 +# define BOOST_PP_ITERATION_4 2 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 1 && BOOST_PP_ITERATION_START_4 >= 1 +# define BOOST_PP_ITERATION_4 1 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif +# if BOOST_PP_ITERATION_FINISH_4 <= 0 && BOOST_PP_ITERATION_START_4 >= 0 +# define BOOST_PP_ITERATION_4 0 +# include BOOST_PP_FILENAME_4 +# undef BOOST_PP_ITERATION_4 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse5.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse5.hpp new file mode 100644 index 00000000..225a557f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/detail/iter/reverse5.hpp @@ -0,0 +1,1296 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# if BOOST_PP_ITERATION_FINISH_5 <= 256 && BOOST_PP_ITERATION_START_5 >= 256 +# define BOOST_PP_ITERATION_5 256 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 255 && BOOST_PP_ITERATION_START_5 >= 255 +# define BOOST_PP_ITERATION_5 255 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 254 && BOOST_PP_ITERATION_START_5 >= 254 +# define BOOST_PP_ITERATION_5 254 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 253 && BOOST_PP_ITERATION_START_5 >= 253 +# define BOOST_PP_ITERATION_5 253 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 252 && BOOST_PP_ITERATION_START_5 >= 252 +# define BOOST_PP_ITERATION_5 252 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 251 && BOOST_PP_ITERATION_START_5 >= 251 +# define BOOST_PP_ITERATION_5 251 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 250 && BOOST_PP_ITERATION_START_5 >= 250 +# define BOOST_PP_ITERATION_5 250 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 249 && BOOST_PP_ITERATION_START_5 >= 249 +# define BOOST_PP_ITERATION_5 249 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 248 && BOOST_PP_ITERATION_START_5 >= 248 +# define BOOST_PP_ITERATION_5 248 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 247 && BOOST_PP_ITERATION_START_5 >= 247 +# define BOOST_PP_ITERATION_5 247 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 246 && BOOST_PP_ITERATION_START_5 >= 246 +# define BOOST_PP_ITERATION_5 246 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 245 && BOOST_PP_ITERATION_START_5 >= 245 +# define BOOST_PP_ITERATION_5 245 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 244 && BOOST_PP_ITERATION_START_5 >= 244 +# define BOOST_PP_ITERATION_5 244 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 243 && BOOST_PP_ITERATION_START_5 >= 243 +# define BOOST_PP_ITERATION_5 243 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 242 && BOOST_PP_ITERATION_START_5 >= 242 +# define BOOST_PP_ITERATION_5 242 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 241 && BOOST_PP_ITERATION_START_5 >= 241 +# define BOOST_PP_ITERATION_5 241 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 240 && BOOST_PP_ITERATION_START_5 >= 240 +# define BOOST_PP_ITERATION_5 240 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 239 && BOOST_PP_ITERATION_START_5 >= 239 +# define BOOST_PP_ITERATION_5 239 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 238 && BOOST_PP_ITERATION_START_5 >= 238 +# define BOOST_PP_ITERATION_5 238 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 237 && BOOST_PP_ITERATION_START_5 >= 237 +# define BOOST_PP_ITERATION_5 237 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 236 && BOOST_PP_ITERATION_START_5 >= 236 +# define BOOST_PP_ITERATION_5 236 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 235 && BOOST_PP_ITERATION_START_5 >= 235 +# define BOOST_PP_ITERATION_5 235 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 234 && BOOST_PP_ITERATION_START_5 >= 234 +# define BOOST_PP_ITERATION_5 234 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 233 && BOOST_PP_ITERATION_START_5 >= 233 +# define BOOST_PP_ITERATION_5 233 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 232 && BOOST_PP_ITERATION_START_5 >= 232 +# define BOOST_PP_ITERATION_5 232 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 231 && BOOST_PP_ITERATION_START_5 >= 231 +# define BOOST_PP_ITERATION_5 231 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 230 && BOOST_PP_ITERATION_START_5 >= 230 +# define BOOST_PP_ITERATION_5 230 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 229 && BOOST_PP_ITERATION_START_5 >= 229 +# define BOOST_PP_ITERATION_5 229 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 228 && BOOST_PP_ITERATION_START_5 >= 228 +# define BOOST_PP_ITERATION_5 228 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 227 && BOOST_PP_ITERATION_START_5 >= 227 +# define BOOST_PP_ITERATION_5 227 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 226 && BOOST_PP_ITERATION_START_5 >= 226 +# define BOOST_PP_ITERATION_5 226 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 225 && BOOST_PP_ITERATION_START_5 >= 225 +# define BOOST_PP_ITERATION_5 225 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 224 && BOOST_PP_ITERATION_START_5 >= 224 +# define BOOST_PP_ITERATION_5 224 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 223 && BOOST_PP_ITERATION_START_5 >= 223 +# define BOOST_PP_ITERATION_5 223 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 222 && BOOST_PP_ITERATION_START_5 >= 222 +# define BOOST_PP_ITERATION_5 222 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 221 && BOOST_PP_ITERATION_START_5 >= 221 +# define BOOST_PP_ITERATION_5 221 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 220 && BOOST_PP_ITERATION_START_5 >= 220 +# define BOOST_PP_ITERATION_5 220 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 219 && BOOST_PP_ITERATION_START_5 >= 219 +# define BOOST_PP_ITERATION_5 219 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 218 && BOOST_PP_ITERATION_START_5 >= 218 +# define BOOST_PP_ITERATION_5 218 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 217 && BOOST_PP_ITERATION_START_5 >= 217 +# define BOOST_PP_ITERATION_5 217 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 216 && BOOST_PP_ITERATION_START_5 >= 216 +# define BOOST_PP_ITERATION_5 216 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 215 && BOOST_PP_ITERATION_START_5 >= 215 +# define BOOST_PP_ITERATION_5 215 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 214 && BOOST_PP_ITERATION_START_5 >= 214 +# define BOOST_PP_ITERATION_5 214 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 213 && BOOST_PP_ITERATION_START_5 >= 213 +# define BOOST_PP_ITERATION_5 213 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 212 && BOOST_PP_ITERATION_START_5 >= 212 +# define BOOST_PP_ITERATION_5 212 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 211 && BOOST_PP_ITERATION_START_5 >= 211 +# define BOOST_PP_ITERATION_5 211 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 210 && BOOST_PP_ITERATION_START_5 >= 210 +# define BOOST_PP_ITERATION_5 210 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 209 && BOOST_PP_ITERATION_START_5 >= 209 +# define BOOST_PP_ITERATION_5 209 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 208 && BOOST_PP_ITERATION_START_5 >= 208 +# define BOOST_PP_ITERATION_5 208 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 207 && BOOST_PP_ITERATION_START_5 >= 207 +# define BOOST_PP_ITERATION_5 207 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 206 && BOOST_PP_ITERATION_START_5 >= 206 +# define BOOST_PP_ITERATION_5 206 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 205 && BOOST_PP_ITERATION_START_5 >= 205 +# define BOOST_PP_ITERATION_5 205 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 204 && BOOST_PP_ITERATION_START_5 >= 204 +# define BOOST_PP_ITERATION_5 204 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 203 && BOOST_PP_ITERATION_START_5 >= 203 +# define BOOST_PP_ITERATION_5 203 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 202 && BOOST_PP_ITERATION_START_5 >= 202 +# define BOOST_PP_ITERATION_5 202 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 201 && BOOST_PP_ITERATION_START_5 >= 201 +# define BOOST_PP_ITERATION_5 201 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 200 && BOOST_PP_ITERATION_START_5 >= 200 +# define BOOST_PP_ITERATION_5 200 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 199 && BOOST_PP_ITERATION_START_5 >= 199 +# define BOOST_PP_ITERATION_5 199 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 198 && BOOST_PP_ITERATION_START_5 >= 198 +# define BOOST_PP_ITERATION_5 198 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 197 && BOOST_PP_ITERATION_START_5 >= 197 +# define BOOST_PP_ITERATION_5 197 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 196 && BOOST_PP_ITERATION_START_5 >= 196 +# define BOOST_PP_ITERATION_5 196 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 195 && BOOST_PP_ITERATION_START_5 >= 195 +# define BOOST_PP_ITERATION_5 195 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 194 && BOOST_PP_ITERATION_START_5 >= 194 +# define BOOST_PP_ITERATION_5 194 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 193 && BOOST_PP_ITERATION_START_5 >= 193 +# define BOOST_PP_ITERATION_5 193 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 192 && BOOST_PP_ITERATION_START_5 >= 192 +# define BOOST_PP_ITERATION_5 192 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 191 && BOOST_PP_ITERATION_START_5 >= 191 +# define BOOST_PP_ITERATION_5 191 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 190 && BOOST_PP_ITERATION_START_5 >= 190 +# define BOOST_PP_ITERATION_5 190 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 189 && BOOST_PP_ITERATION_START_5 >= 189 +# define BOOST_PP_ITERATION_5 189 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 188 && BOOST_PP_ITERATION_START_5 >= 188 +# define BOOST_PP_ITERATION_5 188 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 187 && BOOST_PP_ITERATION_START_5 >= 187 +# define BOOST_PP_ITERATION_5 187 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 186 && BOOST_PP_ITERATION_START_5 >= 186 +# define BOOST_PP_ITERATION_5 186 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 185 && BOOST_PP_ITERATION_START_5 >= 185 +# define BOOST_PP_ITERATION_5 185 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 184 && BOOST_PP_ITERATION_START_5 >= 184 +# define BOOST_PP_ITERATION_5 184 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 183 && BOOST_PP_ITERATION_START_5 >= 183 +# define BOOST_PP_ITERATION_5 183 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 182 && BOOST_PP_ITERATION_START_5 >= 182 +# define BOOST_PP_ITERATION_5 182 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 181 && BOOST_PP_ITERATION_START_5 >= 181 +# define BOOST_PP_ITERATION_5 181 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 180 && BOOST_PP_ITERATION_START_5 >= 180 +# define BOOST_PP_ITERATION_5 180 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 179 && BOOST_PP_ITERATION_START_5 >= 179 +# define BOOST_PP_ITERATION_5 179 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 178 && BOOST_PP_ITERATION_START_5 >= 178 +# define BOOST_PP_ITERATION_5 178 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 177 && BOOST_PP_ITERATION_START_5 >= 177 +# define BOOST_PP_ITERATION_5 177 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 176 && BOOST_PP_ITERATION_START_5 >= 176 +# define BOOST_PP_ITERATION_5 176 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 175 && BOOST_PP_ITERATION_START_5 >= 175 +# define BOOST_PP_ITERATION_5 175 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 174 && BOOST_PP_ITERATION_START_5 >= 174 +# define BOOST_PP_ITERATION_5 174 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 173 && BOOST_PP_ITERATION_START_5 >= 173 +# define BOOST_PP_ITERATION_5 173 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 172 && BOOST_PP_ITERATION_START_5 >= 172 +# define BOOST_PP_ITERATION_5 172 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 171 && BOOST_PP_ITERATION_START_5 >= 171 +# define BOOST_PP_ITERATION_5 171 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 170 && BOOST_PP_ITERATION_START_5 >= 170 +# define BOOST_PP_ITERATION_5 170 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 169 && BOOST_PP_ITERATION_START_5 >= 169 +# define BOOST_PP_ITERATION_5 169 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 168 && BOOST_PP_ITERATION_START_5 >= 168 +# define BOOST_PP_ITERATION_5 168 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 167 && BOOST_PP_ITERATION_START_5 >= 167 +# define BOOST_PP_ITERATION_5 167 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 166 && BOOST_PP_ITERATION_START_5 >= 166 +# define BOOST_PP_ITERATION_5 166 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 165 && BOOST_PP_ITERATION_START_5 >= 165 +# define BOOST_PP_ITERATION_5 165 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 164 && BOOST_PP_ITERATION_START_5 >= 164 +# define BOOST_PP_ITERATION_5 164 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 163 && BOOST_PP_ITERATION_START_5 >= 163 +# define BOOST_PP_ITERATION_5 163 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 162 && BOOST_PP_ITERATION_START_5 >= 162 +# define BOOST_PP_ITERATION_5 162 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 161 && BOOST_PP_ITERATION_START_5 >= 161 +# define BOOST_PP_ITERATION_5 161 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 160 && BOOST_PP_ITERATION_START_5 >= 160 +# define BOOST_PP_ITERATION_5 160 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 159 && BOOST_PP_ITERATION_START_5 >= 159 +# define BOOST_PP_ITERATION_5 159 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 158 && BOOST_PP_ITERATION_START_5 >= 158 +# define BOOST_PP_ITERATION_5 158 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 157 && BOOST_PP_ITERATION_START_5 >= 157 +# define BOOST_PP_ITERATION_5 157 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 156 && BOOST_PP_ITERATION_START_5 >= 156 +# define BOOST_PP_ITERATION_5 156 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 155 && BOOST_PP_ITERATION_START_5 >= 155 +# define BOOST_PP_ITERATION_5 155 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 154 && BOOST_PP_ITERATION_START_5 >= 154 +# define BOOST_PP_ITERATION_5 154 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 153 && BOOST_PP_ITERATION_START_5 >= 153 +# define BOOST_PP_ITERATION_5 153 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 152 && BOOST_PP_ITERATION_START_5 >= 152 +# define BOOST_PP_ITERATION_5 152 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 151 && BOOST_PP_ITERATION_START_5 >= 151 +# define BOOST_PP_ITERATION_5 151 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 150 && BOOST_PP_ITERATION_START_5 >= 150 +# define BOOST_PP_ITERATION_5 150 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 149 && BOOST_PP_ITERATION_START_5 >= 149 +# define BOOST_PP_ITERATION_5 149 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 148 && BOOST_PP_ITERATION_START_5 >= 148 +# define BOOST_PP_ITERATION_5 148 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 147 && BOOST_PP_ITERATION_START_5 >= 147 +# define BOOST_PP_ITERATION_5 147 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 146 && BOOST_PP_ITERATION_START_5 >= 146 +# define BOOST_PP_ITERATION_5 146 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 145 && BOOST_PP_ITERATION_START_5 >= 145 +# define BOOST_PP_ITERATION_5 145 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 144 && BOOST_PP_ITERATION_START_5 >= 144 +# define BOOST_PP_ITERATION_5 144 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 143 && BOOST_PP_ITERATION_START_5 >= 143 +# define BOOST_PP_ITERATION_5 143 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 142 && BOOST_PP_ITERATION_START_5 >= 142 +# define BOOST_PP_ITERATION_5 142 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 141 && BOOST_PP_ITERATION_START_5 >= 141 +# define BOOST_PP_ITERATION_5 141 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 140 && BOOST_PP_ITERATION_START_5 >= 140 +# define BOOST_PP_ITERATION_5 140 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 139 && BOOST_PP_ITERATION_START_5 >= 139 +# define BOOST_PP_ITERATION_5 139 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 138 && BOOST_PP_ITERATION_START_5 >= 138 +# define BOOST_PP_ITERATION_5 138 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 137 && BOOST_PP_ITERATION_START_5 >= 137 +# define BOOST_PP_ITERATION_5 137 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 136 && BOOST_PP_ITERATION_START_5 >= 136 +# define BOOST_PP_ITERATION_5 136 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 135 && BOOST_PP_ITERATION_START_5 >= 135 +# define BOOST_PP_ITERATION_5 135 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 134 && BOOST_PP_ITERATION_START_5 >= 134 +# define BOOST_PP_ITERATION_5 134 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 133 && BOOST_PP_ITERATION_START_5 >= 133 +# define BOOST_PP_ITERATION_5 133 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 132 && BOOST_PP_ITERATION_START_5 >= 132 +# define BOOST_PP_ITERATION_5 132 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 131 && BOOST_PP_ITERATION_START_5 >= 131 +# define BOOST_PP_ITERATION_5 131 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 130 && BOOST_PP_ITERATION_START_5 >= 130 +# define BOOST_PP_ITERATION_5 130 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 129 && BOOST_PP_ITERATION_START_5 >= 129 +# define BOOST_PP_ITERATION_5 129 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 128 && BOOST_PP_ITERATION_START_5 >= 128 +# define BOOST_PP_ITERATION_5 128 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 127 && BOOST_PP_ITERATION_START_5 >= 127 +# define BOOST_PP_ITERATION_5 127 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 126 && BOOST_PP_ITERATION_START_5 >= 126 +# define BOOST_PP_ITERATION_5 126 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 125 && BOOST_PP_ITERATION_START_5 >= 125 +# define BOOST_PP_ITERATION_5 125 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 124 && BOOST_PP_ITERATION_START_5 >= 124 +# define BOOST_PP_ITERATION_5 124 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 123 && BOOST_PP_ITERATION_START_5 >= 123 +# define BOOST_PP_ITERATION_5 123 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 122 && BOOST_PP_ITERATION_START_5 >= 122 +# define BOOST_PP_ITERATION_5 122 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 121 && BOOST_PP_ITERATION_START_5 >= 121 +# define BOOST_PP_ITERATION_5 121 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 120 && BOOST_PP_ITERATION_START_5 >= 120 +# define BOOST_PP_ITERATION_5 120 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 119 && BOOST_PP_ITERATION_START_5 >= 119 +# define BOOST_PP_ITERATION_5 119 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 118 && BOOST_PP_ITERATION_START_5 >= 118 +# define BOOST_PP_ITERATION_5 118 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 117 && BOOST_PP_ITERATION_START_5 >= 117 +# define BOOST_PP_ITERATION_5 117 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 116 && BOOST_PP_ITERATION_START_5 >= 116 +# define BOOST_PP_ITERATION_5 116 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 115 && BOOST_PP_ITERATION_START_5 >= 115 +# define BOOST_PP_ITERATION_5 115 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 114 && BOOST_PP_ITERATION_START_5 >= 114 +# define BOOST_PP_ITERATION_5 114 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 113 && BOOST_PP_ITERATION_START_5 >= 113 +# define BOOST_PP_ITERATION_5 113 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 112 && BOOST_PP_ITERATION_START_5 >= 112 +# define BOOST_PP_ITERATION_5 112 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 111 && BOOST_PP_ITERATION_START_5 >= 111 +# define BOOST_PP_ITERATION_5 111 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 110 && BOOST_PP_ITERATION_START_5 >= 110 +# define BOOST_PP_ITERATION_5 110 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 109 && BOOST_PP_ITERATION_START_5 >= 109 +# define BOOST_PP_ITERATION_5 109 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 108 && BOOST_PP_ITERATION_START_5 >= 108 +# define BOOST_PP_ITERATION_5 108 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 107 && BOOST_PP_ITERATION_START_5 >= 107 +# define BOOST_PP_ITERATION_5 107 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 106 && BOOST_PP_ITERATION_START_5 >= 106 +# define BOOST_PP_ITERATION_5 106 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 105 && BOOST_PP_ITERATION_START_5 >= 105 +# define BOOST_PP_ITERATION_5 105 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 104 && BOOST_PP_ITERATION_START_5 >= 104 +# define BOOST_PP_ITERATION_5 104 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 103 && BOOST_PP_ITERATION_START_5 >= 103 +# define BOOST_PP_ITERATION_5 103 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 102 && BOOST_PP_ITERATION_START_5 >= 102 +# define BOOST_PP_ITERATION_5 102 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 101 && BOOST_PP_ITERATION_START_5 >= 101 +# define BOOST_PP_ITERATION_5 101 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 100 && BOOST_PP_ITERATION_START_5 >= 100 +# define BOOST_PP_ITERATION_5 100 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 99 && BOOST_PP_ITERATION_START_5 >= 99 +# define BOOST_PP_ITERATION_5 99 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 98 && BOOST_PP_ITERATION_START_5 >= 98 +# define BOOST_PP_ITERATION_5 98 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 97 && BOOST_PP_ITERATION_START_5 >= 97 +# define BOOST_PP_ITERATION_5 97 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 96 && BOOST_PP_ITERATION_START_5 >= 96 +# define BOOST_PP_ITERATION_5 96 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 95 && BOOST_PP_ITERATION_START_5 >= 95 +# define BOOST_PP_ITERATION_5 95 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 94 && BOOST_PP_ITERATION_START_5 >= 94 +# define BOOST_PP_ITERATION_5 94 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 93 && BOOST_PP_ITERATION_START_5 >= 93 +# define BOOST_PP_ITERATION_5 93 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 92 && BOOST_PP_ITERATION_START_5 >= 92 +# define BOOST_PP_ITERATION_5 92 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 91 && BOOST_PP_ITERATION_START_5 >= 91 +# define BOOST_PP_ITERATION_5 91 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 90 && BOOST_PP_ITERATION_START_5 >= 90 +# define BOOST_PP_ITERATION_5 90 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 89 && BOOST_PP_ITERATION_START_5 >= 89 +# define BOOST_PP_ITERATION_5 89 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 88 && BOOST_PP_ITERATION_START_5 >= 88 +# define BOOST_PP_ITERATION_5 88 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 87 && BOOST_PP_ITERATION_START_5 >= 87 +# define BOOST_PP_ITERATION_5 87 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 86 && BOOST_PP_ITERATION_START_5 >= 86 +# define BOOST_PP_ITERATION_5 86 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 85 && BOOST_PP_ITERATION_START_5 >= 85 +# define BOOST_PP_ITERATION_5 85 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 84 && BOOST_PP_ITERATION_START_5 >= 84 +# define BOOST_PP_ITERATION_5 84 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 83 && BOOST_PP_ITERATION_START_5 >= 83 +# define BOOST_PP_ITERATION_5 83 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 82 && BOOST_PP_ITERATION_START_5 >= 82 +# define BOOST_PP_ITERATION_5 82 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 81 && BOOST_PP_ITERATION_START_5 >= 81 +# define BOOST_PP_ITERATION_5 81 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 80 && BOOST_PP_ITERATION_START_5 >= 80 +# define BOOST_PP_ITERATION_5 80 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 79 && BOOST_PP_ITERATION_START_5 >= 79 +# define BOOST_PP_ITERATION_5 79 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 78 && BOOST_PP_ITERATION_START_5 >= 78 +# define BOOST_PP_ITERATION_5 78 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 77 && BOOST_PP_ITERATION_START_5 >= 77 +# define BOOST_PP_ITERATION_5 77 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 76 && BOOST_PP_ITERATION_START_5 >= 76 +# define BOOST_PP_ITERATION_5 76 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 75 && BOOST_PP_ITERATION_START_5 >= 75 +# define BOOST_PP_ITERATION_5 75 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 74 && BOOST_PP_ITERATION_START_5 >= 74 +# define BOOST_PP_ITERATION_5 74 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 73 && BOOST_PP_ITERATION_START_5 >= 73 +# define BOOST_PP_ITERATION_5 73 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 72 && BOOST_PP_ITERATION_START_5 >= 72 +# define BOOST_PP_ITERATION_5 72 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 71 && BOOST_PP_ITERATION_START_5 >= 71 +# define BOOST_PP_ITERATION_5 71 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 70 && BOOST_PP_ITERATION_START_5 >= 70 +# define BOOST_PP_ITERATION_5 70 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 69 && BOOST_PP_ITERATION_START_5 >= 69 +# define BOOST_PP_ITERATION_5 69 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 68 && BOOST_PP_ITERATION_START_5 >= 68 +# define BOOST_PP_ITERATION_5 68 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 67 && BOOST_PP_ITERATION_START_5 >= 67 +# define BOOST_PP_ITERATION_5 67 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 66 && BOOST_PP_ITERATION_START_5 >= 66 +# define BOOST_PP_ITERATION_5 66 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 65 && BOOST_PP_ITERATION_START_5 >= 65 +# define BOOST_PP_ITERATION_5 65 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 64 && BOOST_PP_ITERATION_START_5 >= 64 +# define BOOST_PP_ITERATION_5 64 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 63 && BOOST_PP_ITERATION_START_5 >= 63 +# define BOOST_PP_ITERATION_5 63 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 62 && BOOST_PP_ITERATION_START_5 >= 62 +# define BOOST_PP_ITERATION_5 62 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 61 && BOOST_PP_ITERATION_START_5 >= 61 +# define BOOST_PP_ITERATION_5 61 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 60 && BOOST_PP_ITERATION_START_5 >= 60 +# define BOOST_PP_ITERATION_5 60 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 59 && BOOST_PP_ITERATION_START_5 >= 59 +# define BOOST_PP_ITERATION_5 59 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 58 && BOOST_PP_ITERATION_START_5 >= 58 +# define BOOST_PP_ITERATION_5 58 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 57 && BOOST_PP_ITERATION_START_5 >= 57 +# define BOOST_PP_ITERATION_5 57 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 56 && BOOST_PP_ITERATION_START_5 >= 56 +# define BOOST_PP_ITERATION_5 56 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 55 && BOOST_PP_ITERATION_START_5 >= 55 +# define BOOST_PP_ITERATION_5 55 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 54 && BOOST_PP_ITERATION_START_5 >= 54 +# define BOOST_PP_ITERATION_5 54 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 53 && BOOST_PP_ITERATION_START_5 >= 53 +# define BOOST_PP_ITERATION_5 53 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 52 && BOOST_PP_ITERATION_START_5 >= 52 +# define BOOST_PP_ITERATION_5 52 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 51 && BOOST_PP_ITERATION_START_5 >= 51 +# define BOOST_PP_ITERATION_5 51 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 50 && BOOST_PP_ITERATION_START_5 >= 50 +# define BOOST_PP_ITERATION_5 50 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 49 && BOOST_PP_ITERATION_START_5 >= 49 +# define BOOST_PP_ITERATION_5 49 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 48 && BOOST_PP_ITERATION_START_5 >= 48 +# define BOOST_PP_ITERATION_5 48 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 47 && BOOST_PP_ITERATION_START_5 >= 47 +# define BOOST_PP_ITERATION_5 47 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 46 && BOOST_PP_ITERATION_START_5 >= 46 +# define BOOST_PP_ITERATION_5 46 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 45 && BOOST_PP_ITERATION_START_5 >= 45 +# define BOOST_PP_ITERATION_5 45 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 44 && BOOST_PP_ITERATION_START_5 >= 44 +# define BOOST_PP_ITERATION_5 44 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 43 && BOOST_PP_ITERATION_START_5 >= 43 +# define BOOST_PP_ITERATION_5 43 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 42 && BOOST_PP_ITERATION_START_5 >= 42 +# define BOOST_PP_ITERATION_5 42 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 41 && BOOST_PP_ITERATION_START_5 >= 41 +# define BOOST_PP_ITERATION_5 41 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 40 && BOOST_PP_ITERATION_START_5 >= 40 +# define BOOST_PP_ITERATION_5 40 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 39 && BOOST_PP_ITERATION_START_5 >= 39 +# define BOOST_PP_ITERATION_5 39 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 38 && BOOST_PP_ITERATION_START_5 >= 38 +# define BOOST_PP_ITERATION_5 38 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 37 && BOOST_PP_ITERATION_START_5 >= 37 +# define BOOST_PP_ITERATION_5 37 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 36 && BOOST_PP_ITERATION_START_5 >= 36 +# define BOOST_PP_ITERATION_5 36 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 35 && BOOST_PP_ITERATION_START_5 >= 35 +# define BOOST_PP_ITERATION_5 35 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 34 && BOOST_PP_ITERATION_START_5 >= 34 +# define BOOST_PP_ITERATION_5 34 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 33 && BOOST_PP_ITERATION_START_5 >= 33 +# define BOOST_PP_ITERATION_5 33 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 32 && BOOST_PP_ITERATION_START_5 >= 32 +# define BOOST_PP_ITERATION_5 32 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 31 && BOOST_PP_ITERATION_START_5 >= 31 +# define BOOST_PP_ITERATION_5 31 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 30 && BOOST_PP_ITERATION_START_5 >= 30 +# define BOOST_PP_ITERATION_5 30 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 29 && BOOST_PP_ITERATION_START_5 >= 29 +# define BOOST_PP_ITERATION_5 29 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 28 && BOOST_PP_ITERATION_START_5 >= 28 +# define BOOST_PP_ITERATION_5 28 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 27 && BOOST_PP_ITERATION_START_5 >= 27 +# define BOOST_PP_ITERATION_5 27 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 26 && BOOST_PP_ITERATION_START_5 >= 26 +# define BOOST_PP_ITERATION_5 26 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 25 && BOOST_PP_ITERATION_START_5 >= 25 +# define BOOST_PP_ITERATION_5 25 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 24 && BOOST_PP_ITERATION_START_5 >= 24 +# define BOOST_PP_ITERATION_5 24 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 23 && BOOST_PP_ITERATION_START_5 >= 23 +# define BOOST_PP_ITERATION_5 23 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 22 && BOOST_PP_ITERATION_START_5 >= 22 +# define BOOST_PP_ITERATION_5 22 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 21 && BOOST_PP_ITERATION_START_5 >= 21 +# define BOOST_PP_ITERATION_5 21 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 20 && BOOST_PP_ITERATION_START_5 >= 20 +# define BOOST_PP_ITERATION_5 20 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 19 && BOOST_PP_ITERATION_START_5 >= 19 +# define BOOST_PP_ITERATION_5 19 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 18 && BOOST_PP_ITERATION_START_5 >= 18 +# define BOOST_PP_ITERATION_5 18 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 17 && BOOST_PP_ITERATION_START_5 >= 17 +# define BOOST_PP_ITERATION_5 17 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 16 && BOOST_PP_ITERATION_START_5 >= 16 +# define BOOST_PP_ITERATION_5 16 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 15 && BOOST_PP_ITERATION_START_5 >= 15 +# define BOOST_PP_ITERATION_5 15 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 14 && BOOST_PP_ITERATION_START_5 >= 14 +# define BOOST_PP_ITERATION_5 14 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 13 && BOOST_PP_ITERATION_START_5 >= 13 +# define BOOST_PP_ITERATION_5 13 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 12 && BOOST_PP_ITERATION_START_5 >= 12 +# define BOOST_PP_ITERATION_5 12 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 11 && BOOST_PP_ITERATION_START_5 >= 11 +# define BOOST_PP_ITERATION_5 11 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 10 && BOOST_PP_ITERATION_START_5 >= 10 +# define BOOST_PP_ITERATION_5 10 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 9 && BOOST_PP_ITERATION_START_5 >= 9 +# define BOOST_PP_ITERATION_5 9 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 8 && BOOST_PP_ITERATION_START_5 >= 8 +# define BOOST_PP_ITERATION_5 8 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 7 && BOOST_PP_ITERATION_START_5 >= 7 +# define BOOST_PP_ITERATION_5 7 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 6 && BOOST_PP_ITERATION_START_5 >= 6 +# define BOOST_PP_ITERATION_5 6 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 5 && BOOST_PP_ITERATION_START_5 >= 5 +# define BOOST_PP_ITERATION_5 5 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 4 && BOOST_PP_ITERATION_START_5 >= 4 +# define BOOST_PP_ITERATION_5 4 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 3 && BOOST_PP_ITERATION_START_5 >= 3 +# define BOOST_PP_ITERATION_5 3 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 2 && BOOST_PP_ITERATION_START_5 >= 2 +# define BOOST_PP_ITERATION_5 2 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 1 && BOOST_PP_ITERATION_START_5 >= 1 +# define BOOST_PP_ITERATION_5 1 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif +# if BOOST_PP_ITERATION_FINISH_5 <= 0 && BOOST_PP_ITERATION_START_5 >= 0 +# define BOOST_PP_ITERATION_5 0 +# include BOOST_PP_FILENAME_5 +# undef BOOST_PP_ITERATION_5 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/iterate.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/iterate.hpp new file mode 100644 index 00000000..2bd6e1d1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/iteration/iterate.hpp @@ -0,0 +1,82 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP +# define BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP +# +# include +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_ITERATION_DEPTH */ +# +# define BOOST_PP_ITERATION_DEPTH() 0 +# +# /* BOOST_PP_ITERATION */ +# +# define BOOST_PP_ITERATION() BOOST_PP_CAT(BOOST_PP_ITERATION_, BOOST_PP_ITERATION_DEPTH()) +# +# /* BOOST_PP_ITERATION_START && BOOST_PP_ITERATION_FINISH */ +# +# define BOOST_PP_ITERATION_START() BOOST_PP_CAT(BOOST_PP_ITERATION_START_, BOOST_PP_ITERATION_DEPTH()) +# define BOOST_PP_ITERATION_FINISH() BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, BOOST_PP_ITERATION_DEPTH()) +# +# /* BOOST_PP_ITERATION_FLAGS */ +# +# define BOOST_PP_ITERATION_FLAGS() (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, BOOST_PP_ITERATION_DEPTH())) +# +# /* BOOST_PP_FRAME_ITERATION */ +# +# define BOOST_PP_FRAME_ITERATION(i) BOOST_PP_CAT(BOOST_PP_ITERATION_, i) +# +# /* BOOST_PP_FRAME_START && BOOST_PP_FRAME_FINISH */ +# +# define BOOST_PP_FRAME_START(i) BOOST_PP_CAT(BOOST_PP_ITERATION_START_, i) +# define BOOST_PP_FRAME_FINISH(i) BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, i) +# +# /* BOOST_PP_FRAME_FLAGS */ +# +# define BOOST_PP_FRAME_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, i)) +# +# /* BOOST_PP_RELATIVE_ITERATION */ +# +# define BOOST_PP_RELATIVE_ITERATION(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_) +# +# define BOOST_PP_RELATIVE_0(m) BOOST_PP_CAT(m, BOOST_PP_ITERATION_DEPTH()) +# define BOOST_PP_RELATIVE_1(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())) +# define BOOST_PP_RELATIVE_2(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))) +# define BOOST_PP_RELATIVE_3(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))) +# define BOOST_PP_RELATIVE_4(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))))) +# +# /* BOOST_PP_RELATIVE_START && BOOST_PP_RELATIVE_FINISH */ +# +# define BOOST_PP_RELATIVE_START(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_START_) +# define BOOST_PP_RELATIVE_FINISH(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FINISH_) +# +# /* BOOST_PP_RELATIVE_FLAGS */ +# +# define BOOST_PP_RELATIVE_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FLAGS_)) +# +# /* BOOST_PP_ITERATE */ +# +# define BOOST_PP_ITERATE() BOOST_PP_CAT(BOOST_PP_ITERATE_, BOOST_PP_INC(BOOST_PP_ITERATION_DEPTH())) +# +# define BOOST_PP_ITERATE_1 +# define BOOST_PP_ITERATE_2 +# define BOOST_PP_ITERATE_3 +# define BOOST_PP_ITERATE_4 +# define BOOST_PP_ITERATE_5 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/adt.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/adt.hpp new file mode 100644 index 00000000..95beb8a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/adt.hpp @@ -0,0 +1,73 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * +# * See http://www.boost.org for most recent version. +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# ifndef BOOST_PREPROCESSOR_LIST_ADT_HPP +# define BOOST_PREPROCESSOR_LIST_ADT_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_LIST_CONS */ +# +# define BOOST_PP_LIST_CONS(head, tail) (head, tail) +# +# /* BOOST_PP_LIST_NIL */ +# +# define BOOST_PP_LIST_NIL BOOST_PP_NIL +# +# /* BOOST_PP_LIST_FIRST */ +# +# define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list) +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list +# else +# define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I ## list +# endif +# +# define BOOST_PP_LIST_FIRST_I(head, tail) head +# +# /* BOOST_PP_LIST_REST */ +# +# define BOOST_PP_LIST_REST(list) BOOST_PP_LIST_REST_D(list) +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I list +# else +# define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I ## list +# endif +# +# define BOOST_PP_LIST_REST_I(head, tail) tail +# +# /* BOOST_PP_LIST_IS_CONS */ +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC() +# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list) +# define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list +# define BOOST_PP_LIST_IS_CONS_(head, tail) 1 +# define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0 +# else +# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list) +# endif +# +# /* BOOST_PP_LIST_IS_NIL */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC() +# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list)) +# else +# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list)) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/append.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/append.hpp new file mode 100644 index 00000000..57139475 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/append.hpp @@ -0,0 +1,40 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_APPEND_HPP +# define BOOST_PREPROCESSOR_LIST_APPEND_HPP +# +# include +# include +# +# /* BOOST_PP_LIST_APPEND */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a) +# else +# define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_APPEND_I(a, b) +# define BOOST_PP_LIST_APPEND_I(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a) +# endif +# +# define BOOST_PP_LIST_APPEND_O(d, s, x) (x, s) +# +# /* BOOST_PP_LIST_APPEND_D */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a) +# else +# define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_APPEND_D_I(d, a, b) +# define BOOST_PP_LIST_APPEND_D_I(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/dmc/fold_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/dmc/fold_left.hpp new file mode 100644 index 00000000..a3c06372 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/dmc/fold_left.hpp @@ -0,0 +1,279 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP +# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP +# +# include +# include +# include +# include +# +# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_left.hpp new file mode 100644 index 00000000..cff64c17 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_left.hpp @@ -0,0 +1,536 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP +# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP +# +# include +# include +# include +# include +# +# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l) +# +# define BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_right.hpp new file mode 100644 index 00000000..687331ec --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/edg/fold_right.hpp @@ -0,0 +1,794 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP +# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP +# +# include +# include +# include +# +# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l) +# +# define BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(2, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_2, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(3, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_3, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(4, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_4, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(5, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_5, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(6, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_6, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(7, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_7, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(8, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_8, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(9, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_9, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(10, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_10, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(11, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_11, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(12, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_12, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(13, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_13, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(14, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_14, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(15, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_15, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(16, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_16, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(17, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_17, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(18, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_18, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(19, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_19, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(20, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_20, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(21, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_21, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(22, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_22, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(23, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_23, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(24, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_24, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(25, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_25, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(26, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_26, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(27, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_27, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(28, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_28, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(29, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_29, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(30, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_30, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(31, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_31, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(32, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_32, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(33, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_33, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(34, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_34, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(35, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_35, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(36, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_36, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(37, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_37, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(38, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_38, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(39, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_39, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(40, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_40, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(41, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_41, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(42, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_42, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(43, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_43, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(44, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_44, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(45, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_45, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(46, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_46, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(47, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_47, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(48, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_48, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(49, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_49, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(50, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_50, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(51, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_51, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(52, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_52, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(53, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_53, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(54, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_54, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(55, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_55, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(56, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_56, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(57, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_57, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(58, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_58, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(59, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_59, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(60, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_60, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(61, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_61, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(62, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_62, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(63, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_63, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(64, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_64, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(65, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_65, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(66, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_66, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(67, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_67, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(68, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_68, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(69, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_69, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(70, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_70, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(71, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_71, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(72, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_72, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(73, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_73, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(74, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_74, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(75, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_75, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(76, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_76, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(77, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_77, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(78, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_78, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(79, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_79, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(80, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_80, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(81, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_81, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(82, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_82, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(83, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_83, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(84, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_84, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(85, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_85, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(86, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_86, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(87, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_87, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(88, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_88, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(89, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_89, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(90, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_90, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(91, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_91, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(92, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_92, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(93, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_93, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(94, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_94, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(95, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_95, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(96, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_96, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(97, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_97, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(98, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_98, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(99, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_99, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(100, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_100, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(101, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_101, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(102, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_102, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(103, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_103, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(104, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_104, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(105, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_105, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(106, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_106, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(107, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_107, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(108, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_108, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(109, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_109, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(110, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_110, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(111, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_111, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(112, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_112, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(113, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_113, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(114, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_114, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(115, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_115, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(116, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_116, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(117, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_117, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(118, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_118, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(119, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_119, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(120, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_120, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(121, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_121, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(122, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_122, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(123, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_123, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(124, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_124, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(125, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_125, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(126, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_126, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(127, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_127, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(128, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_128, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(129, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(130, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_130, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(131, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_131, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(132, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_132, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(133, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_133, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(134, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_134, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(135, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_135, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(136, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_136, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(137, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_137, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(138, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_138, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(139, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_139, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(140, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_140, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(141, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_141, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(142, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_142, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(143, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_143, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(144, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_144, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(145, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_145, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(146, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_146, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(147, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_147, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(148, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_148, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(149, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_149, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(150, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_150, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(151, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_151, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(152, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_152, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(153, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_153, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(154, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_154, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(155, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_155, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(156, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_156, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(157, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_157, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(158, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_158, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(159, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_159, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(160, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_160, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(161, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_161, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(162, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_162, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(163, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_163, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(164, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_164, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(165, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_165, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(166, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_166, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(167, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_167, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(168, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_168, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(169, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_169, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(170, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_170, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(171, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_171, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(172, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_172, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(173, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_173, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(174, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_174, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(175, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_175, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(176, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_176, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(177, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_177, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(178, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_178, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(179, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_179, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(180, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_180, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(181, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_181, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(182, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_182, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(183, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_183, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(184, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_184, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(185, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_185, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(186, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_186, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(187, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_187, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(188, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_188, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(189, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_189, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(190, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_190, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(191, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_191, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(192, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_192, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(193, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_193, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(194, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_194, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(195, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_195, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(196, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_196, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(197, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_197, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(198, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_198, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(199, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_199, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(200, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_200, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(201, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_201, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(202, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_202, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(203, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_203, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(204, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_204, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(205, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_205, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(206, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_206, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(207, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_207, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(208, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_208, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(209, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_209, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(210, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_210, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(211, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_211, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(212, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_212, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(213, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_213, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(214, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_214, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(215, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_215, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(216, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_216, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(217, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_217, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(218, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_218, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(219, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_219, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(220, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_220, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(221, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_221, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(222, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_222, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(223, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_223, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(224, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_224, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(225, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_225, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(226, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_226, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(227, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_227, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(228, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_228, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(229, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_229, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(230, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_230, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(231, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_231, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(232, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_232, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(233, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_233, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(234, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_234, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(235, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_235, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(236, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_236, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(237, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_237, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(238, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_238, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(239, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_239, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(240, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_240, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(241, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_241, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(242, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_242, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(243, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_243, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(244, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_244, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(245, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_245, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(246, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_246, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(247, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_247, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(248, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_248, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(249, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_249, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(250, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_250, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(251, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_251, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(252, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_252, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(253, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_253, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(254, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_254, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(255, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_255, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(256, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_256, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# define BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(257, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_257, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l)) +# +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_NIL 1 +# +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) 0 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_left.hpp new file mode 100644 index 00000000..36e9a983 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_left.hpp @@ -0,0 +1,279 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP +# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP +# +# include +# include +# include +# include +# +# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_right.hpp new file mode 100644 index 00000000..a66e9d8f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/detail/fold_right.hpp @@ -0,0 +1,277 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP +# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP +# +# include +# include +# +# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1(o, s, BOOST_PP_LIST_REVERSE_D(1, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2(o, s, BOOST_PP_LIST_REVERSE_D(2, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3(o, s, BOOST_PP_LIST_REVERSE_D(3, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4(o, s, BOOST_PP_LIST_REVERSE_D(4, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5(o, s, BOOST_PP_LIST_REVERSE_D(5, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6(o, s, BOOST_PP_LIST_REVERSE_D(6, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7(o, s, BOOST_PP_LIST_REVERSE_D(7, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8(o, s, BOOST_PP_LIST_REVERSE_D(8, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9(o, s, BOOST_PP_LIST_REVERSE_D(9, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10(o, s, BOOST_PP_LIST_REVERSE_D(10, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11(o, s, BOOST_PP_LIST_REVERSE_D(11, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12(o, s, BOOST_PP_LIST_REVERSE_D(12, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13(o, s, BOOST_PP_LIST_REVERSE_D(13, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14(o, s, BOOST_PP_LIST_REVERSE_D(14, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15(o, s, BOOST_PP_LIST_REVERSE_D(15, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16(o, s, BOOST_PP_LIST_REVERSE_D(16, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17(o, s, BOOST_PP_LIST_REVERSE_D(17, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18(o, s, BOOST_PP_LIST_REVERSE_D(18, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19(o, s, BOOST_PP_LIST_REVERSE_D(19, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20(o, s, BOOST_PP_LIST_REVERSE_D(20, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21(o, s, BOOST_PP_LIST_REVERSE_D(21, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22(o, s, BOOST_PP_LIST_REVERSE_D(22, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23(o, s, BOOST_PP_LIST_REVERSE_D(23, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24(o, s, BOOST_PP_LIST_REVERSE_D(24, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25(o, s, BOOST_PP_LIST_REVERSE_D(25, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26(o, s, BOOST_PP_LIST_REVERSE_D(26, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27(o, s, BOOST_PP_LIST_REVERSE_D(27, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28(o, s, BOOST_PP_LIST_REVERSE_D(28, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29(o, s, BOOST_PP_LIST_REVERSE_D(29, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30(o, s, BOOST_PP_LIST_REVERSE_D(30, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31(o, s, BOOST_PP_LIST_REVERSE_D(31, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32(o, s, BOOST_PP_LIST_REVERSE_D(32, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33(o, s, BOOST_PP_LIST_REVERSE_D(33, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34(o, s, BOOST_PP_LIST_REVERSE_D(34, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35(o, s, BOOST_PP_LIST_REVERSE_D(35, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36(o, s, BOOST_PP_LIST_REVERSE_D(36, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37(o, s, BOOST_PP_LIST_REVERSE_D(37, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38(o, s, BOOST_PP_LIST_REVERSE_D(38, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39(o, s, BOOST_PP_LIST_REVERSE_D(39, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40(o, s, BOOST_PP_LIST_REVERSE_D(40, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41(o, s, BOOST_PP_LIST_REVERSE_D(41, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42(o, s, BOOST_PP_LIST_REVERSE_D(42, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43(o, s, BOOST_PP_LIST_REVERSE_D(43, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44(o, s, BOOST_PP_LIST_REVERSE_D(44, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45(o, s, BOOST_PP_LIST_REVERSE_D(45, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46(o, s, BOOST_PP_LIST_REVERSE_D(46, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47(o, s, BOOST_PP_LIST_REVERSE_D(47, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48(o, s, BOOST_PP_LIST_REVERSE_D(48, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49(o, s, BOOST_PP_LIST_REVERSE_D(49, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50(o, s, BOOST_PP_LIST_REVERSE_D(50, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51(o, s, BOOST_PP_LIST_REVERSE_D(51, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52(o, s, BOOST_PP_LIST_REVERSE_D(52, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53(o, s, BOOST_PP_LIST_REVERSE_D(53, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54(o, s, BOOST_PP_LIST_REVERSE_D(54, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55(o, s, BOOST_PP_LIST_REVERSE_D(55, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56(o, s, BOOST_PP_LIST_REVERSE_D(56, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57(o, s, BOOST_PP_LIST_REVERSE_D(57, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58(o, s, BOOST_PP_LIST_REVERSE_D(58, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59(o, s, BOOST_PP_LIST_REVERSE_D(59, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60(o, s, BOOST_PP_LIST_REVERSE_D(60, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61(o, s, BOOST_PP_LIST_REVERSE_D(61, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62(o, s, BOOST_PP_LIST_REVERSE_D(62, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63(o, s, BOOST_PP_LIST_REVERSE_D(63, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64(o, s, BOOST_PP_LIST_REVERSE_D(64, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65(o, s, BOOST_PP_LIST_REVERSE_D(65, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66(o, s, BOOST_PP_LIST_REVERSE_D(66, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67(o, s, BOOST_PP_LIST_REVERSE_D(67, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68(o, s, BOOST_PP_LIST_REVERSE_D(68, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69(o, s, BOOST_PP_LIST_REVERSE_D(69, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70(o, s, BOOST_PP_LIST_REVERSE_D(70, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71(o, s, BOOST_PP_LIST_REVERSE_D(71, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72(o, s, BOOST_PP_LIST_REVERSE_D(72, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73(o, s, BOOST_PP_LIST_REVERSE_D(73, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74(o, s, BOOST_PP_LIST_REVERSE_D(74, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75(o, s, BOOST_PP_LIST_REVERSE_D(75, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76(o, s, BOOST_PP_LIST_REVERSE_D(76, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77(o, s, BOOST_PP_LIST_REVERSE_D(77, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78(o, s, BOOST_PP_LIST_REVERSE_D(78, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79(o, s, BOOST_PP_LIST_REVERSE_D(79, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80(o, s, BOOST_PP_LIST_REVERSE_D(80, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81(o, s, BOOST_PP_LIST_REVERSE_D(81, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82(o, s, BOOST_PP_LIST_REVERSE_D(82, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83(o, s, BOOST_PP_LIST_REVERSE_D(83, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84(o, s, BOOST_PP_LIST_REVERSE_D(84, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85(o, s, BOOST_PP_LIST_REVERSE_D(85, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86(o, s, BOOST_PP_LIST_REVERSE_D(86, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87(o, s, BOOST_PP_LIST_REVERSE_D(87, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88(o, s, BOOST_PP_LIST_REVERSE_D(88, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89(o, s, BOOST_PP_LIST_REVERSE_D(89, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90(o, s, BOOST_PP_LIST_REVERSE_D(90, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91(o, s, BOOST_PP_LIST_REVERSE_D(91, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92(o, s, BOOST_PP_LIST_REVERSE_D(92, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93(o, s, BOOST_PP_LIST_REVERSE_D(93, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94(o, s, BOOST_PP_LIST_REVERSE_D(94, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95(o, s, BOOST_PP_LIST_REVERSE_D(95, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96(o, s, BOOST_PP_LIST_REVERSE_D(96, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97(o, s, BOOST_PP_LIST_REVERSE_D(97, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98(o, s, BOOST_PP_LIST_REVERSE_D(98, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99(o, s, BOOST_PP_LIST_REVERSE_D(99, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100(o, s, BOOST_PP_LIST_REVERSE_D(100, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101(o, s, BOOST_PP_LIST_REVERSE_D(101, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102(o, s, BOOST_PP_LIST_REVERSE_D(102, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103(o, s, BOOST_PP_LIST_REVERSE_D(103, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104(o, s, BOOST_PP_LIST_REVERSE_D(104, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105(o, s, BOOST_PP_LIST_REVERSE_D(105, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106(o, s, BOOST_PP_LIST_REVERSE_D(106, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107(o, s, BOOST_PP_LIST_REVERSE_D(107, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108(o, s, BOOST_PP_LIST_REVERSE_D(108, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109(o, s, BOOST_PP_LIST_REVERSE_D(109, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110(o, s, BOOST_PP_LIST_REVERSE_D(110, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111(o, s, BOOST_PP_LIST_REVERSE_D(111, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112(o, s, BOOST_PP_LIST_REVERSE_D(112, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113(o, s, BOOST_PP_LIST_REVERSE_D(113, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114(o, s, BOOST_PP_LIST_REVERSE_D(114, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115(o, s, BOOST_PP_LIST_REVERSE_D(115, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116(o, s, BOOST_PP_LIST_REVERSE_D(116, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117(o, s, BOOST_PP_LIST_REVERSE_D(117, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118(o, s, BOOST_PP_LIST_REVERSE_D(118, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119(o, s, BOOST_PP_LIST_REVERSE_D(119, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120(o, s, BOOST_PP_LIST_REVERSE_D(120, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121(o, s, BOOST_PP_LIST_REVERSE_D(121, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122(o, s, BOOST_PP_LIST_REVERSE_D(122, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123(o, s, BOOST_PP_LIST_REVERSE_D(123, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124(o, s, BOOST_PP_LIST_REVERSE_D(124, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125(o, s, BOOST_PP_LIST_REVERSE_D(125, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126(o, s, BOOST_PP_LIST_REVERSE_D(126, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127(o, s, BOOST_PP_LIST_REVERSE_D(127, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128(o, s, BOOST_PP_LIST_REVERSE_D(128, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129(o, s, BOOST_PP_LIST_REVERSE_D(129, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130(o, s, BOOST_PP_LIST_REVERSE_D(130, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131(o, s, BOOST_PP_LIST_REVERSE_D(131, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132(o, s, BOOST_PP_LIST_REVERSE_D(132, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133(o, s, BOOST_PP_LIST_REVERSE_D(133, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134(o, s, BOOST_PP_LIST_REVERSE_D(134, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135(o, s, BOOST_PP_LIST_REVERSE_D(135, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136(o, s, BOOST_PP_LIST_REVERSE_D(136, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137(o, s, BOOST_PP_LIST_REVERSE_D(137, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138(o, s, BOOST_PP_LIST_REVERSE_D(138, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139(o, s, BOOST_PP_LIST_REVERSE_D(139, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140(o, s, BOOST_PP_LIST_REVERSE_D(140, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141(o, s, BOOST_PP_LIST_REVERSE_D(141, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142(o, s, BOOST_PP_LIST_REVERSE_D(142, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143(o, s, BOOST_PP_LIST_REVERSE_D(143, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144(o, s, BOOST_PP_LIST_REVERSE_D(144, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145(o, s, BOOST_PP_LIST_REVERSE_D(145, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146(o, s, BOOST_PP_LIST_REVERSE_D(146, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147(o, s, BOOST_PP_LIST_REVERSE_D(147, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148(o, s, BOOST_PP_LIST_REVERSE_D(148, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149(o, s, BOOST_PP_LIST_REVERSE_D(149, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150(o, s, BOOST_PP_LIST_REVERSE_D(150, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151(o, s, BOOST_PP_LIST_REVERSE_D(151, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152(o, s, BOOST_PP_LIST_REVERSE_D(152, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153(o, s, BOOST_PP_LIST_REVERSE_D(153, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154(o, s, BOOST_PP_LIST_REVERSE_D(154, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155(o, s, BOOST_PP_LIST_REVERSE_D(155, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156(o, s, BOOST_PP_LIST_REVERSE_D(156, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157(o, s, BOOST_PP_LIST_REVERSE_D(157, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158(o, s, BOOST_PP_LIST_REVERSE_D(158, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159(o, s, BOOST_PP_LIST_REVERSE_D(159, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160(o, s, BOOST_PP_LIST_REVERSE_D(160, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161(o, s, BOOST_PP_LIST_REVERSE_D(161, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162(o, s, BOOST_PP_LIST_REVERSE_D(162, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163(o, s, BOOST_PP_LIST_REVERSE_D(163, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164(o, s, BOOST_PP_LIST_REVERSE_D(164, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165(o, s, BOOST_PP_LIST_REVERSE_D(165, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166(o, s, BOOST_PP_LIST_REVERSE_D(166, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167(o, s, BOOST_PP_LIST_REVERSE_D(167, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168(o, s, BOOST_PP_LIST_REVERSE_D(168, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169(o, s, BOOST_PP_LIST_REVERSE_D(169, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170(o, s, BOOST_PP_LIST_REVERSE_D(170, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171(o, s, BOOST_PP_LIST_REVERSE_D(171, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172(o, s, BOOST_PP_LIST_REVERSE_D(172, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173(o, s, BOOST_PP_LIST_REVERSE_D(173, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174(o, s, BOOST_PP_LIST_REVERSE_D(174, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175(o, s, BOOST_PP_LIST_REVERSE_D(175, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176(o, s, BOOST_PP_LIST_REVERSE_D(176, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177(o, s, BOOST_PP_LIST_REVERSE_D(177, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178(o, s, BOOST_PP_LIST_REVERSE_D(178, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179(o, s, BOOST_PP_LIST_REVERSE_D(179, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180(o, s, BOOST_PP_LIST_REVERSE_D(180, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181(o, s, BOOST_PP_LIST_REVERSE_D(181, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182(o, s, BOOST_PP_LIST_REVERSE_D(182, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183(o, s, BOOST_PP_LIST_REVERSE_D(183, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184(o, s, BOOST_PP_LIST_REVERSE_D(184, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185(o, s, BOOST_PP_LIST_REVERSE_D(185, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186(o, s, BOOST_PP_LIST_REVERSE_D(186, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187(o, s, BOOST_PP_LIST_REVERSE_D(187, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188(o, s, BOOST_PP_LIST_REVERSE_D(188, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189(o, s, BOOST_PP_LIST_REVERSE_D(189, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190(o, s, BOOST_PP_LIST_REVERSE_D(190, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191(o, s, BOOST_PP_LIST_REVERSE_D(191, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192(o, s, BOOST_PP_LIST_REVERSE_D(192, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193(o, s, BOOST_PP_LIST_REVERSE_D(193, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194(o, s, BOOST_PP_LIST_REVERSE_D(194, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195(o, s, BOOST_PP_LIST_REVERSE_D(195, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196(o, s, BOOST_PP_LIST_REVERSE_D(196, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197(o, s, BOOST_PP_LIST_REVERSE_D(197, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198(o, s, BOOST_PP_LIST_REVERSE_D(198, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199(o, s, BOOST_PP_LIST_REVERSE_D(199, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200(o, s, BOOST_PP_LIST_REVERSE_D(200, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201(o, s, BOOST_PP_LIST_REVERSE_D(201, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202(o, s, BOOST_PP_LIST_REVERSE_D(202, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203(o, s, BOOST_PP_LIST_REVERSE_D(203, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204(o, s, BOOST_PP_LIST_REVERSE_D(204, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205(o, s, BOOST_PP_LIST_REVERSE_D(205, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206(o, s, BOOST_PP_LIST_REVERSE_D(206, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207(o, s, BOOST_PP_LIST_REVERSE_D(207, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208(o, s, BOOST_PP_LIST_REVERSE_D(208, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209(o, s, BOOST_PP_LIST_REVERSE_D(209, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210(o, s, BOOST_PP_LIST_REVERSE_D(210, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211(o, s, BOOST_PP_LIST_REVERSE_D(211, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212(o, s, BOOST_PP_LIST_REVERSE_D(212, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213(o, s, BOOST_PP_LIST_REVERSE_D(213, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214(o, s, BOOST_PP_LIST_REVERSE_D(214, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215(o, s, BOOST_PP_LIST_REVERSE_D(215, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216(o, s, BOOST_PP_LIST_REVERSE_D(216, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217(o, s, BOOST_PP_LIST_REVERSE_D(217, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218(o, s, BOOST_PP_LIST_REVERSE_D(218, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219(o, s, BOOST_PP_LIST_REVERSE_D(219, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220(o, s, BOOST_PP_LIST_REVERSE_D(220, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221(o, s, BOOST_PP_LIST_REVERSE_D(221, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222(o, s, BOOST_PP_LIST_REVERSE_D(222, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223(o, s, BOOST_PP_LIST_REVERSE_D(223, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224(o, s, BOOST_PP_LIST_REVERSE_D(224, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225(o, s, BOOST_PP_LIST_REVERSE_D(225, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226(o, s, BOOST_PP_LIST_REVERSE_D(226, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227(o, s, BOOST_PP_LIST_REVERSE_D(227, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228(o, s, BOOST_PP_LIST_REVERSE_D(228, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229(o, s, BOOST_PP_LIST_REVERSE_D(229, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230(o, s, BOOST_PP_LIST_REVERSE_D(230, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231(o, s, BOOST_PP_LIST_REVERSE_D(231, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232(o, s, BOOST_PP_LIST_REVERSE_D(232, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233(o, s, BOOST_PP_LIST_REVERSE_D(233, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234(o, s, BOOST_PP_LIST_REVERSE_D(234, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235(o, s, BOOST_PP_LIST_REVERSE_D(235, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236(o, s, BOOST_PP_LIST_REVERSE_D(236, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237(o, s, BOOST_PP_LIST_REVERSE_D(237, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238(o, s, BOOST_PP_LIST_REVERSE_D(238, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239(o, s, BOOST_PP_LIST_REVERSE_D(239, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240(o, s, BOOST_PP_LIST_REVERSE_D(240, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241(o, s, BOOST_PP_LIST_REVERSE_D(241, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242(o, s, BOOST_PP_LIST_REVERSE_D(242, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243(o, s, BOOST_PP_LIST_REVERSE_D(243, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244(o, s, BOOST_PP_LIST_REVERSE_D(244, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245(o, s, BOOST_PP_LIST_REVERSE_D(245, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246(o, s, BOOST_PP_LIST_REVERSE_D(246, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247(o, s, BOOST_PP_LIST_REVERSE_D(247, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248(o, s, BOOST_PP_LIST_REVERSE_D(248, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249(o, s, BOOST_PP_LIST_REVERSE_D(249, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250(o, s, BOOST_PP_LIST_REVERSE_D(250, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251(o, s, BOOST_PP_LIST_REVERSE_D(251, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252(o, s, BOOST_PP_LIST_REVERSE_D(252, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253(o, s, BOOST_PP_LIST_REVERSE_D(253, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254(o, s, BOOST_PP_LIST_REVERSE_D(254, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255(o, s, BOOST_PP_LIST_REVERSE_D(255, l)) +# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256(o, s, BOOST_PP_LIST_REVERSE_D(256, l)) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_left.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_left.hpp new file mode 100644 index 00000000..4e47d4fa --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_left.hpp @@ -0,0 +1,303 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP +# define BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_LIST_FOLD_LEFT */ +# +# if 0 +# define BOOST_PP_LIST_FOLD_LEFT(op, state, list) +# endif +# +# define BOOST_PP_LIST_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)) +# +# define BOOST_PP_LIST_FOLD_LEFT_257(o, s, l) BOOST_PP_ERROR(0x0004) +# +# define BOOST_PP_LIST_FOLD_LEFT_D(d, o, s, l) BOOST_PP_LIST_FOLD_LEFT_ ## d(o, s, l) +# define BOOST_PP_LIST_FOLD_LEFT_2ND BOOST_PP_LIST_FOLD_LEFT +# define BOOST_PP_LIST_FOLD_LEFT_2ND_D BOOST_PP_LIST_FOLD_LEFT_D +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# endif +# +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1 +# +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) 0 +# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) 0 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_right.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_right.hpp new file mode 100644 index 00000000..7ce17c5f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/fold_right.hpp @@ -0,0 +1,40 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP +# define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP +# +# include +# include +# include +# include +# +# if 0 +# define BOOST_PP_LIST_FOLD_RIGHT(op, state, list) +# endif +# +# define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)) +# +# define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004) +# +# define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l) +# define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT +# define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# include +# else +# include +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/for_each_i.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/for_each_i.hpp new file mode 100644 index 00000000..8d7a987a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/for_each_i.hpp @@ -0,0 +1,65 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP +# define BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP +# +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_LIST_FOR_EACH_I */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M) +# else +# define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) +# define BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M) +# endif +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() +# define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_FOR_EACH_I_P_D x +# define BOOST_PP_LIST_FOR_EACH_I_P_D(m, d, l, i) BOOST_PP_LIST_IS_CONS(l) +# else +# define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(4, 2, x)) +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_LIST_FOR_EACH_I_O(r, x) BOOST_PP_LIST_FOR_EACH_I_O_D x +# define BOOST_PP_LIST_FOR_EACH_I_O_D(m, d, l, i) (m, d, BOOST_PP_LIST_REST(l), BOOST_PP_INC(i)) +# else +# define BOOST_PP_LIST_FOR_EACH_I_O(r, x) (BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(4, 2, x)), BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 3, x))) +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_D(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x)) +# else +# define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_REM_4 x) +# define BOOST_PP_LIST_FOR_EACH_I_M_I(r, x_e) BOOST_PP_LIST_FOR_EACH_I_M_D(r, x_e) +# endif +# +# define BOOST_PP_LIST_FOR_EACH_I_M_D(r, m, d, l, i) m(r, d, i, BOOST_PP_LIST_FIRST(l)) +# +# /* BOOST_PP_LIST_FOR_EACH_I_R */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M) +# else +# define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) +# define BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/reverse.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/reverse.hpp new file mode 100644 index 00000000..8016d81b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/reverse.hpp @@ -0,0 +1,40 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_REVERSE_HPP +# define BOOST_PREPROCESSOR_LIST_REVERSE_HPP +# +# include +# include +# +# /* BOOST_PP_LIST_REVERSE */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list) +# else +# define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_REVERSE_I(list) +# define BOOST_PP_LIST_REVERSE_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list) +# endif +# +# define BOOST_PP_LIST_REVERSE_O(d, s, x) (x, s) +# +# /* BOOST_PP_LIST_REVERSE_D */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list) +# else +# define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_REVERSE_D_I(d, list) +# define BOOST_PP_LIST_REVERSE_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/transform.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/transform.hpp new file mode 100644 index 00000000..c33cc21d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/list/transform.hpp @@ -0,0 +1,49 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP +# define BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_LIST_TRANSFORM */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list)) +# else +# define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_LIST_TRANSFORM_I(op, data, list) +# define BOOST_PP_LIST_TRANSFORM_I(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list)) +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, odr), BOOST_PP_TUPLE_ELEM(3, 1, odr), BOOST_PP_TUPLE_ELEM(3, 2, odr), elem) +# else +# define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_I(d, BOOST_PP_TUPLE_REM_3 odr, elem) +# define BOOST_PP_LIST_TRANSFORM_O_I(d, im, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, im, elem) +# endif +# +# define BOOST_PP_LIST_TRANSFORM_O_D(d, op, data, res, elem) (op, data, (op(d, data, elem), res)) +# +# /* BOOST_PP_LIST_TRANSFORM_D */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list)) +# else +# define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) +# define BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list)) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/and.hpp new file mode 100644 index 00000000..57dd7150 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/and.hpp @@ -0,0 +1,30 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP +# define BOOST_PREPROCESSOR_LOGICAL_AND_HPP +# +# include +# include +# include +# +# /* BOOST_PP_AND */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_AND(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q)) +# else +# define BOOST_PP_AND(p, q) BOOST_PP_AND_I(p, q) +# define BOOST_PP_AND_I(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q)) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bitand.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bitand.hpp new file mode 100644 index 00000000..15e4221d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bitand.hpp @@ -0,0 +1,38 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP +# define BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP +# +# include +# +# /* BOOST_PP_BITAND */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_I(x, y) +# else +# define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_OO((x, y)) +# define BOOST_PP_BITAND_OO(par) BOOST_PP_BITAND_I ## par +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y +# else +# define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ID(BOOST_PP_BITAND_ ## x ## y) +# define BOOST_PP_BITAND_ID(res) res +# endif +# +# define BOOST_PP_BITAND_00 0 +# define BOOST_PP_BITAND_01 0 +# define BOOST_PP_BITAND_10 0 +# define BOOST_PP_BITAND_11 1 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bool.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bool.hpp new file mode 100644 index 00000000..aeb1dd43 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/bool.hpp @@ -0,0 +1,288 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP +# define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP +# +# include +# +# /* BOOST_PP_BOOL */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x) +# else +# define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x)) +# define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par +# endif +# +# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x +# +# define BOOST_PP_BOOL_0 0 +# define BOOST_PP_BOOL_1 1 +# define BOOST_PP_BOOL_2 1 +# define BOOST_PP_BOOL_3 1 +# define BOOST_PP_BOOL_4 1 +# define BOOST_PP_BOOL_5 1 +# define BOOST_PP_BOOL_6 1 +# define BOOST_PP_BOOL_7 1 +# define BOOST_PP_BOOL_8 1 +# define BOOST_PP_BOOL_9 1 +# define BOOST_PP_BOOL_10 1 +# define BOOST_PP_BOOL_11 1 +# define BOOST_PP_BOOL_12 1 +# define BOOST_PP_BOOL_13 1 +# define BOOST_PP_BOOL_14 1 +# define BOOST_PP_BOOL_15 1 +# define BOOST_PP_BOOL_16 1 +# define BOOST_PP_BOOL_17 1 +# define BOOST_PP_BOOL_18 1 +# define BOOST_PP_BOOL_19 1 +# define BOOST_PP_BOOL_20 1 +# define BOOST_PP_BOOL_21 1 +# define BOOST_PP_BOOL_22 1 +# define BOOST_PP_BOOL_23 1 +# define BOOST_PP_BOOL_24 1 +# define BOOST_PP_BOOL_25 1 +# define BOOST_PP_BOOL_26 1 +# define BOOST_PP_BOOL_27 1 +# define BOOST_PP_BOOL_28 1 +# define BOOST_PP_BOOL_29 1 +# define BOOST_PP_BOOL_30 1 +# define BOOST_PP_BOOL_31 1 +# define BOOST_PP_BOOL_32 1 +# define BOOST_PP_BOOL_33 1 +# define BOOST_PP_BOOL_34 1 +# define BOOST_PP_BOOL_35 1 +# define BOOST_PP_BOOL_36 1 +# define BOOST_PP_BOOL_37 1 +# define BOOST_PP_BOOL_38 1 +# define BOOST_PP_BOOL_39 1 +# define BOOST_PP_BOOL_40 1 +# define BOOST_PP_BOOL_41 1 +# define BOOST_PP_BOOL_42 1 +# define BOOST_PP_BOOL_43 1 +# define BOOST_PP_BOOL_44 1 +# define BOOST_PP_BOOL_45 1 +# define BOOST_PP_BOOL_46 1 +# define BOOST_PP_BOOL_47 1 +# define BOOST_PP_BOOL_48 1 +# define BOOST_PP_BOOL_49 1 +# define BOOST_PP_BOOL_50 1 +# define BOOST_PP_BOOL_51 1 +# define BOOST_PP_BOOL_52 1 +# define BOOST_PP_BOOL_53 1 +# define BOOST_PP_BOOL_54 1 +# define BOOST_PP_BOOL_55 1 +# define BOOST_PP_BOOL_56 1 +# define BOOST_PP_BOOL_57 1 +# define BOOST_PP_BOOL_58 1 +# define BOOST_PP_BOOL_59 1 +# define BOOST_PP_BOOL_60 1 +# define BOOST_PP_BOOL_61 1 +# define BOOST_PP_BOOL_62 1 +# define BOOST_PP_BOOL_63 1 +# define BOOST_PP_BOOL_64 1 +# define BOOST_PP_BOOL_65 1 +# define BOOST_PP_BOOL_66 1 +# define BOOST_PP_BOOL_67 1 +# define BOOST_PP_BOOL_68 1 +# define BOOST_PP_BOOL_69 1 +# define BOOST_PP_BOOL_70 1 +# define BOOST_PP_BOOL_71 1 +# define BOOST_PP_BOOL_72 1 +# define BOOST_PP_BOOL_73 1 +# define BOOST_PP_BOOL_74 1 +# define BOOST_PP_BOOL_75 1 +# define BOOST_PP_BOOL_76 1 +# define BOOST_PP_BOOL_77 1 +# define BOOST_PP_BOOL_78 1 +# define BOOST_PP_BOOL_79 1 +# define BOOST_PP_BOOL_80 1 +# define BOOST_PP_BOOL_81 1 +# define BOOST_PP_BOOL_82 1 +# define BOOST_PP_BOOL_83 1 +# define BOOST_PP_BOOL_84 1 +# define BOOST_PP_BOOL_85 1 +# define BOOST_PP_BOOL_86 1 +# define BOOST_PP_BOOL_87 1 +# define BOOST_PP_BOOL_88 1 +# define BOOST_PP_BOOL_89 1 +# define BOOST_PP_BOOL_90 1 +# define BOOST_PP_BOOL_91 1 +# define BOOST_PP_BOOL_92 1 +# define BOOST_PP_BOOL_93 1 +# define BOOST_PP_BOOL_94 1 +# define BOOST_PP_BOOL_95 1 +# define BOOST_PP_BOOL_96 1 +# define BOOST_PP_BOOL_97 1 +# define BOOST_PP_BOOL_98 1 +# define BOOST_PP_BOOL_99 1 +# define BOOST_PP_BOOL_100 1 +# define BOOST_PP_BOOL_101 1 +# define BOOST_PP_BOOL_102 1 +# define BOOST_PP_BOOL_103 1 +# define BOOST_PP_BOOL_104 1 +# define BOOST_PP_BOOL_105 1 +# define BOOST_PP_BOOL_106 1 +# define BOOST_PP_BOOL_107 1 +# define BOOST_PP_BOOL_108 1 +# define BOOST_PP_BOOL_109 1 +# define BOOST_PP_BOOL_110 1 +# define BOOST_PP_BOOL_111 1 +# define BOOST_PP_BOOL_112 1 +# define BOOST_PP_BOOL_113 1 +# define BOOST_PP_BOOL_114 1 +# define BOOST_PP_BOOL_115 1 +# define BOOST_PP_BOOL_116 1 +# define BOOST_PP_BOOL_117 1 +# define BOOST_PP_BOOL_118 1 +# define BOOST_PP_BOOL_119 1 +# define BOOST_PP_BOOL_120 1 +# define BOOST_PP_BOOL_121 1 +# define BOOST_PP_BOOL_122 1 +# define BOOST_PP_BOOL_123 1 +# define BOOST_PP_BOOL_124 1 +# define BOOST_PP_BOOL_125 1 +# define BOOST_PP_BOOL_126 1 +# define BOOST_PP_BOOL_127 1 +# define BOOST_PP_BOOL_128 1 +# define BOOST_PP_BOOL_129 1 +# define BOOST_PP_BOOL_130 1 +# define BOOST_PP_BOOL_131 1 +# define BOOST_PP_BOOL_132 1 +# define BOOST_PP_BOOL_133 1 +# define BOOST_PP_BOOL_134 1 +# define BOOST_PP_BOOL_135 1 +# define BOOST_PP_BOOL_136 1 +# define BOOST_PP_BOOL_137 1 +# define BOOST_PP_BOOL_138 1 +# define BOOST_PP_BOOL_139 1 +# define BOOST_PP_BOOL_140 1 +# define BOOST_PP_BOOL_141 1 +# define BOOST_PP_BOOL_142 1 +# define BOOST_PP_BOOL_143 1 +# define BOOST_PP_BOOL_144 1 +# define BOOST_PP_BOOL_145 1 +# define BOOST_PP_BOOL_146 1 +# define BOOST_PP_BOOL_147 1 +# define BOOST_PP_BOOL_148 1 +# define BOOST_PP_BOOL_149 1 +# define BOOST_PP_BOOL_150 1 +# define BOOST_PP_BOOL_151 1 +# define BOOST_PP_BOOL_152 1 +# define BOOST_PP_BOOL_153 1 +# define BOOST_PP_BOOL_154 1 +# define BOOST_PP_BOOL_155 1 +# define BOOST_PP_BOOL_156 1 +# define BOOST_PP_BOOL_157 1 +# define BOOST_PP_BOOL_158 1 +# define BOOST_PP_BOOL_159 1 +# define BOOST_PP_BOOL_160 1 +# define BOOST_PP_BOOL_161 1 +# define BOOST_PP_BOOL_162 1 +# define BOOST_PP_BOOL_163 1 +# define BOOST_PP_BOOL_164 1 +# define BOOST_PP_BOOL_165 1 +# define BOOST_PP_BOOL_166 1 +# define BOOST_PP_BOOL_167 1 +# define BOOST_PP_BOOL_168 1 +# define BOOST_PP_BOOL_169 1 +# define BOOST_PP_BOOL_170 1 +# define BOOST_PP_BOOL_171 1 +# define BOOST_PP_BOOL_172 1 +# define BOOST_PP_BOOL_173 1 +# define BOOST_PP_BOOL_174 1 +# define BOOST_PP_BOOL_175 1 +# define BOOST_PP_BOOL_176 1 +# define BOOST_PP_BOOL_177 1 +# define BOOST_PP_BOOL_178 1 +# define BOOST_PP_BOOL_179 1 +# define BOOST_PP_BOOL_180 1 +# define BOOST_PP_BOOL_181 1 +# define BOOST_PP_BOOL_182 1 +# define BOOST_PP_BOOL_183 1 +# define BOOST_PP_BOOL_184 1 +# define BOOST_PP_BOOL_185 1 +# define BOOST_PP_BOOL_186 1 +# define BOOST_PP_BOOL_187 1 +# define BOOST_PP_BOOL_188 1 +# define BOOST_PP_BOOL_189 1 +# define BOOST_PP_BOOL_190 1 +# define BOOST_PP_BOOL_191 1 +# define BOOST_PP_BOOL_192 1 +# define BOOST_PP_BOOL_193 1 +# define BOOST_PP_BOOL_194 1 +# define BOOST_PP_BOOL_195 1 +# define BOOST_PP_BOOL_196 1 +# define BOOST_PP_BOOL_197 1 +# define BOOST_PP_BOOL_198 1 +# define BOOST_PP_BOOL_199 1 +# define BOOST_PP_BOOL_200 1 +# define BOOST_PP_BOOL_201 1 +# define BOOST_PP_BOOL_202 1 +# define BOOST_PP_BOOL_203 1 +# define BOOST_PP_BOOL_204 1 +# define BOOST_PP_BOOL_205 1 +# define BOOST_PP_BOOL_206 1 +# define BOOST_PP_BOOL_207 1 +# define BOOST_PP_BOOL_208 1 +# define BOOST_PP_BOOL_209 1 +# define BOOST_PP_BOOL_210 1 +# define BOOST_PP_BOOL_211 1 +# define BOOST_PP_BOOL_212 1 +# define BOOST_PP_BOOL_213 1 +# define BOOST_PP_BOOL_214 1 +# define BOOST_PP_BOOL_215 1 +# define BOOST_PP_BOOL_216 1 +# define BOOST_PP_BOOL_217 1 +# define BOOST_PP_BOOL_218 1 +# define BOOST_PP_BOOL_219 1 +# define BOOST_PP_BOOL_220 1 +# define BOOST_PP_BOOL_221 1 +# define BOOST_PP_BOOL_222 1 +# define BOOST_PP_BOOL_223 1 +# define BOOST_PP_BOOL_224 1 +# define BOOST_PP_BOOL_225 1 +# define BOOST_PP_BOOL_226 1 +# define BOOST_PP_BOOL_227 1 +# define BOOST_PP_BOOL_228 1 +# define BOOST_PP_BOOL_229 1 +# define BOOST_PP_BOOL_230 1 +# define BOOST_PP_BOOL_231 1 +# define BOOST_PP_BOOL_232 1 +# define BOOST_PP_BOOL_233 1 +# define BOOST_PP_BOOL_234 1 +# define BOOST_PP_BOOL_235 1 +# define BOOST_PP_BOOL_236 1 +# define BOOST_PP_BOOL_237 1 +# define BOOST_PP_BOOL_238 1 +# define BOOST_PP_BOOL_239 1 +# define BOOST_PP_BOOL_240 1 +# define BOOST_PP_BOOL_241 1 +# define BOOST_PP_BOOL_242 1 +# define BOOST_PP_BOOL_243 1 +# define BOOST_PP_BOOL_244 1 +# define BOOST_PP_BOOL_245 1 +# define BOOST_PP_BOOL_246 1 +# define BOOST_PP_BOOL_247 1 +# define BOOST_PP_BOOL_248 1 +# define BOOST_PP_BOOL_249 1 +# define BOOST_PP_BOOL_250 1 +# define BOOST_PP_BOOL_251 1 +# define BOOST_PP_BOOL_252 1 +# define BOOST_PP_BOOL_253 1 +# define BOOST_PP_BOOL_254 1 +# define BOOST_PP_BOOL_255 1 +# define BOOST_PP_BOOL_256 1 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/compl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/compl.hpp new file mode 100644 index 00000000..da4d0a33 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/logical/compl.hpp @@ -0,0 +1,36 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP +# define BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP +# +# include +# +# /* BOOST_PP_COMPL */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_COMPL(x) BOOST_PP_COMPL_I(x) +# else +# define BOOST_PP_COMPL(x) BOOST_PP_COMPL_OO((x)) +# define BOOST_PP_COMPL_OO(par) BOOST_PP_COMPL_I ## par +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ ## x +# else +# define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ID(BOOST_PP_COMPL_ ## x) +# define BOOST_PP_COMPL_ID(id) id +# endif +# +# define BOOST_PP_COMPL_0 1 +# define BOOST_PP_COMPL_1 0 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma.hpp new file mode 100644 index 00000000..38c2e0e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma.hpp @@ -0,0 +1,21 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP +# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP +# +# /* BOOST_PP_COMMA */ +# +# define BOOST_PP_COMMA() , +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma_if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma_if.hpp new file mode 100644 index 00000000..b3005ef7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/punctuation/comma_if.hpp @@ -0,0 +1,31 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP +# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_COMMA_IF */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)() +# else +# define BOOST_PP_COMMA_IF(cond) BOOST_PP_COMMA_IF_I(cond) +# define BOOST_PP_COMMA_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)() +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repeat.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repeat.hpp new file mode 100644 index 00000000..74400adf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repeat.hpp @@ -0,0 +1,17 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPEAT_HPP +# define BOOST_PREPROCESSOR_REPEAT_HPP +# +# include +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/dmc/for.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/dmc/for.hpp new file mode 100644 index 00000000..52fe9cca --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/dmc/for.hpp @@ -0,0 +1,536 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP +# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP +# +# include +# include +# include +# include +# +# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p##(2, s)), s, p, o, m) +# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p##(3, s)), s, p, o, m) +# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p##(4, s)), s, p, o, m) +# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p##(5, s)), s, p, o, m) +# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p##(6, s)), s, p, o, m) +# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p##(7, s)), s, p, o, m) +# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p##(8, s)), s, p, o, m) +# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p##(9, s)), s, p, o, m) +# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p##(10, s)), s, p, o, m) +# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p##(11, s)), s, p, o, m) +# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p##(12, s)), s, p, o, m) +# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p##(13, s)), s, p, o, m) +# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p##(14, s)), s, p, o, m) +# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p##(15, s)), s, p, o, m) +# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p##(16, s)), s, p, o, m) +# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p##(17, s)), s, p, o, m) +# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p##(18, s)), s, p, o, m) +# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p##(19, s)), s, p, o, m) +# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p##(20, s)), s, p, o, m) +# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p##(21, s)), s, p, o, m) +# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p##(22, s)), s, p, o, m) +# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p##(23, s)), s, p, o, m) +# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p##(24, s)), s, p, o, m) +# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p##(25, s)), s, p, o, m) +# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p##(26, s)), s, p, o, m) +# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p##(27, s)), s, p, o, m) +# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p##(28, s)), s, p, o, m) +# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p##(29, s)), s, p, o, m) +# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p##(30, s)), s, p, o, m) +# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p##(31, s)), s, p, o, m) +# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p##(32, s)), s, p, o, m) +# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p##(33, s)), s, p, o, m) +# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p##(34, s)), s, p, o, m) +# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p##(35, s)), s, p, o, m) +# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p##(36, s)), s, p, o, m) +# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p##(37, s)), s, p, o, m) +# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p##(38, s)), s, p, o, m) +# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p##(39, s)), s, p, o, m) +# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p##(40, s)), s, p, o, m) +# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p##(41, s)), s, p, o, m) +# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p##(42, s)), s, p, o, m) +# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p##(43, s)), s, p, o, m) +# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p##(44, s)), s, p, o, m) +# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p##(45, s)), s, p, o, m) +# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p##(46, s)), s, p, o, m) +# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p##(47, s)), s, p, o, m) +# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p##(48, s)), s, p, o, m) +# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p##(49, s)), s, p, o, m) +# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p##(50, s)), s, p, o, m) +# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p##(51, s)), s, p, o, m) +# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p##(52, s)), s, p, o, m) +# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p##(53, s)), s, p, o, m) +# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p##(54, s)), s, p, o, m) +# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p##(55, s)), s, p, o, m) +# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p##(56, s)), s, p, o, m) +# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p##(57, s)), s, p, o, m) +# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p##(58, s)), s, p, o, m) +# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p##(59, s)), s, p, o, m) +# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p##(60, s)), s, p, o, m) +# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p##(61, s)), s, p, o, m) +# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p##(62, s)), s, p, o, m) +# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p##(63, s)), s, p, o, m) +# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p##(64, s)), s, p, o, m) +# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p##(65, s)), s, p, o, m) +# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p##(66, s)), s, p, o, m) +# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p##(67, s)), s, p, o, m) +# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p##(68, s)), s, p, o, m) +# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p##(69, s)), s, p, o, m) +# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p##(70, s)), s, p, o, m) +# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p##(71, s)), s, p, o, m) +# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p##(72, s)), s, p, o, m) +# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p##(73, s)), s, p, o, m) +# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p##(74, s)), s, p, o, m) +# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p##(75, s)), s, p, o, m) +# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p##(76, s)), s, p, o, m) +# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p##(77, s)), s, p, o, m) +# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p##(78, s)), s, p, o, m) +# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p##(79, s)), s, p, o, m) +# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p##(80, s)), s, p, o, m) +# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p##(81, s)), s, p, o, m) +# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p##(82, s)), s, p, o, m) +# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p##(83, s)), s, p, o, m) +# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p##(84, s)), s, p, o, m) +# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p##(85, s)), s, p, o, m) +# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p##(86, s)), s, p, o, m) +# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p##(87, s)), s, p, o, m) +# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p##(88, s)), s, p, o, m) +# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p##(89, s)), s, p, o, m) +# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p##(90, s)), s, p, o, m) +# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p##(91, s)), s, p, o, m) +# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p##(92, s)), s, p, o, m) +# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p##(93, s)), s, p, o, m) +# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p##(94, s)), s, p, o, m) +# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p##(95, s)), s, p, o, m) +# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p##(96, s)), s, p, o, m) +# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p##(97, s)), s, p, o, m) +# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p##(98, s)), s, p, o, m) +# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p##(99, s)), s, p, o, m) +# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p##(100, s)), s, p, o, m) +# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p##(101, s)), s, p, o, m) +# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p##(102, s)), s, p, o, m) +# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p##(103, s)), s, p, o, m) +# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p##(104, s)), s, p, o, m) +# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p##(105, s)), s, p, o, m) +# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p##(106, s)), s, p, o, m) +# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p##(107, s)), s, p, o, m) +# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p##(108, s)), s, p, o, m) +# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p##(109, s)), s, p, o, m) +# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p##(110, s)), s, p, o, m) +# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p##(111, s)), s, p, o, m) +# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p##(112, s)), s, p, o, m) +# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p##(113, s)), s, p, o, m) +# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p##(114, s)), s, p, o, m) +# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p##(115, s)), s, p, o, m) +# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p##(116, s)), s, p, o, m) +# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p##(117, s)), s, p, o, m) +# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p##(118, s)), s, p, o, m) +# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p##(119, s)), s, p, o, m) +# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p##(120, s)), s, p, o, m) +# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p##(121, s)), s, p, o, m) +# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p##(122, s)), s, p, o, m) +# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p##(123, s)), s, p, o, m) +# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p##(124, s)), s, p, o, m) +# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p##(125, s)), s, p, o, m) +# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p##(126, s)), s, p, o, m) +# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p##(127, s)), s, p, o, m) +# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p##(128, s)), s, p, o, m) +# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p##(129, s)), s, p, o, m) +# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p##(130, s)), s, p, o, m) +# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p##(131, s)), s, p, o, m) +# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p##(132, s)), s, p, o, m) +# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p##(133, s)), s, p, o, m) +# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p##(134, s)), s, p, o, m) +# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p##(135, s)), s, p, o, m) +# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p##(136, s)), s, p, o, m) +# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p##(137, s)), s, p, o, m) +# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p##(138, s)), s, p, o, m) +# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p##(139, s)), s, p, o, m) +# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p##(140, s)), s, p, o, m) +# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p##(141, s)), s, p, o, m) +# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p##(142, s)), s, p, o, m) +# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p##(143, s)), s, p, o, m) +# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p##(144, s)), s, p, o, m) +# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p##(145, s)), s, p, o, m) +# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p##(146, s)), s, p, o, m) +# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p##(147, s)), s, p, o, m) +# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p##(148, s)), s, p, o, m) +# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p##(149, s)), s, p, o, m) +# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p##(150, s)), s, p, o, m) +# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p##(151, s)), s, p, o, m) +# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p##(152, s)), s, p, o, m) +# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p##(153, s)), s, p, o, m) +# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p##(154, s)), s, p, o, m) +# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p##(155, s)), s, p, o, m) +# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p##(156, s)), s, p, o, m) +# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p##(157, s)), s, p, o, m) +# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p##(158, s)), s, p, o, m) +# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p##(159, s)), s, p, o, m) +# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p##(160, s)), s, p, o, m) +# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p##(161, s)), s, p, o, m) +# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p##(162, s)), s, p, o, m) +# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p##(163, s)), s, p, o, m) +# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p##(164, s)), s, p, o, m) +# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p##(165, s)), s, p, o, m) +# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p##(166, s)), s, p, o, m) +# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p##(167, s)), s, p, o, m) +# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p##(168, s)), s, p, o, m) +# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p##(169, s)), s, p, o, m) +# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p##(170, s)), s, p, o, m) +# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p##(171, s)), s, p, o, m) +# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p##(172, s)), s, p, o, m) +# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p##(173, s)), s, p, o, m) +# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p##(174, s)), s, p, o, m) +# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p##(175, s)), s, p, o, m) +# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p##(176, s)), s, p, o, m) +# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p##(177, s)), s, p, o, m) +# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p##(178, s)), s, p, o, m) +# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p##(179, s)), s, p, o, m) +# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p##(180, s)), s, p, o, m) +# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p##(181, s)), s, p, o, m) +# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p##(182, s)), s, p, o, m) +# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p##(183, s)), s, p, o, m) +# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p##(184, s)), s, p, o, m) +# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p##(185, s)), s, p, o, m) +# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p##(186, s)), s, p, o, m) +# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p##(187, s)), s, p, o, m) +# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p##(188, s)), s, p, o, m) +# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p##(189, s)), s, p, o, m) +# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p##(190, s)), s, p, o, m) +# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p##(191, s)), s, p, o, m) +# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p##(192, s)), s, p, o, m) +# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p##(193, s)), s, p, o, m) +# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p##(194, s)), s, p, o, m) +# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p##(195, s)), s, p, o, m) +# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p##(196, s)), s, p, o, m) +# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p##(197, s)), s, p, o, m) +# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p##(198, s)), s, p, o, m) +# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p##(199, s)), s, p, o, m) +# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p##(200, s)), s, p, o, m) +# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p##(201, s)), s, p, o, m) +# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p##(202, s)), s, p, o, m) +# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p##(203, s)), s, p, o, m) +# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p##(204, s)), s, p, o, m) +# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p##(205, s)), s, p, o, m) +# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p##(206, s)), s, p, o, m) +# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p##(207, s)), s, p, o, m) +# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p##(208, s)), s, p, o, m) +# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p##(209, s)), s, p, o, m) +# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p##(210, s)), s, p, o, m) +# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p##(211, s)), s, p, o, m) +# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p##(212, s)), s, p, o, m) +# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p##(213, s)), s, p, o, m) +# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p##(214, s)), s, p, o, m) +# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p##(215, s)), s, p, o, m) +# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p##(216, s)), s, p, o, m) +# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p##(217, s)), s, p, o, m) +# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p##(218, s)), s, p, o, m) +# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p##(219, s)), s, p, o, m) +# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p##(220, s)), s, p, o, m) +# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p##(221, s)), s, p, o, m) +# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p##(222, s)), s, p, o, m) +# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p##(223, s)), s, p, o, m) +# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p##(224, s)), s, p, o, m) +# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p##(225, s)), s, p, o, m) +# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p##(226, s)), s, p, o, m) +# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p##(227, s)), s, p, o, m) +# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p##(228, s)), s, p, o, m) +# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p##(229, s)), s, p, o, m) +# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p##(230, s)), s, p, o, m) +# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p##(231, s)), s, p, o, m) +# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p##(232, s)), s, p, o, m) +# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p##(233, s)), s, p, o, m) +# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p##(234, s)), s, p, o, m) +# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p##(235, s)), s, p, o, m) +# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p##(236, s)), s, p, o, m) +# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p##(237, s)), s, p, o, m) +# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p##(238, s)), s, p, o, m) +# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p##(239, s)), s, p, o, m) +# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p##(240, s)), s, p, o, m) +# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p##(241, s)), s, p, o, m) +# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p##(242, s)), s, p, o, m) +# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p##(243, s)), s, p, o, m) +# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p##(244, s)), s, p, o, m) +# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p##(245, s)), s, p, o, m) +# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p##(246, s)), s, p, o, m) +# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p##(247, s)), s, p, o, m) +# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p##(248, s)), s, p, o, m) +# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p##(249, s)), s, p, o, m) +# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p##(250, s)), s, p, o, m) +# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p##(251, s)), s, p, o, m) +# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p##(252, s)), s, p, o, m) +# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p##(253, s)), s, p, o, m) +# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p##(254, s)), s, p, o, m) +# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p##(255, s)), s, p, o, m) +# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p##(256, s)), s, p, o, m) +# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p##(257, s)), s, p, o, m) +# +# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m) +# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m) +# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m) +# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m) +# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m) +# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m) +# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m) +# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m) +# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m) +# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m) +# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m) +# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m) +# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m) +# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m) +# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m) +# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m) +# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m) +# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m) +# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m) +# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m) +# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m) +# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m) +# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m) +# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m) +# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m) +# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m) +# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m) +# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m) +# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m) +# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m) +# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m) +# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m) +# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m) +# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m) +# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m) +# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m) +# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m) +# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m) +# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m) +# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m) +# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m) +# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m) +# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m) +# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m) +# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m) +# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m) +# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m) +# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m) +# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m) +# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m) +# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m) +# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m) +# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m) +# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m) +# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m) +# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m) +# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m) +# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m) +# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m) +# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m) +# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m) +# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m) +# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m) +# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m) +# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m) +# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m) +# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m) +# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m) +# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m) +# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m) +# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m) +# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m) +# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m) +# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m) +# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m) +# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m) +# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m) +# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m) +# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m) +# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m) +# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m) +# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m) +# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m) +# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m) +# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m) +# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m) +# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m) +# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m) +# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m) +# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m) +# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m) +# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m) +# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m) +# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m) +# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m) +# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m) +# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m) +# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m) +# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m) +# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m) +# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m) +# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m) +# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m) +# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m) +# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m) +# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m) +# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m) +# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m) +# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m) +# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m) +# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m) +# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m) +# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m) +# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m) +# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m) +# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m) +# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m) +# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m) +# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m) +# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m) +# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m) +# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m) +# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m) +# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m) +# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m) +# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m) +# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m) +# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m) +# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m) +# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m) +# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m) +# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m) +# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m) +# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m) +# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m) +# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m) +# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m) +# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m) +# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m) +# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m) +# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m) +# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m) +# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m) +# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m) +# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m) +# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m) +# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m) +# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m) +# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m) +# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m) +# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m) +# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m) +# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m) +# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m) +# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m) +# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m) +# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m) +# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m) +# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m) +# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m) +# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m) +# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m) +# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m) +# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m) +# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m) +# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m) +# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m) +# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m) +# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m) +# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m) +# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m) +# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m) +# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m) +# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m) +# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m) +# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m) +# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m) +# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m) +# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m) +# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m) +# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m) +# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m) +# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m) +# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m) +# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m) +# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m) +# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m) +# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m) +# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m) +# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m) +# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m) +# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m) +# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m) +# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m) +# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m) +# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m) +# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m) +# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m) +# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m) +# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m) +# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m) +# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m) +# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m) +# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m) +# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m) +# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m) +# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m) +# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m) +# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m) +# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m) +# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m) +# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m) +# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m) +# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m) +# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m) +# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m) +# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m) +# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m) +# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m) +# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m) +# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m) +# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m) +# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m) +# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m) +# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m) +# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m) +# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m) +# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m) +# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m) +# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m) +# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m) +# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m) +# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m) +# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m) +# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m) +# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m) +# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m) +# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m) +# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m) +# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m) +# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m) +# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m) +# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m) +# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m) +# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m) +# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m) +# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m) +# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m) +# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m) +# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m) +# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m) +# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m) +# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m) +# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m) +# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m) +# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/edg/for.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/edg/for.hpp new file mode 100644 index 00000000..ffb5a7c5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/edg/for.hpp @@ -0,0 +1,534 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP +# define BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP +# +# include +# include +# +# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_I(s, p, o, m) +# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_I(s, p, o, m) +# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_I(s, p, o, m) +# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_I(s, p, o, m) +# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_I(s, p, o, m) +# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_I(s, p, o, m) +# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_I(s, p, o, m) +# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_I(s, p, o, m) +# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_I(s, p, o, m) +# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_I(s, p, o, m) +# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_I(s, p, o, m) +# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_I(s, p, o, m) +# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_I(s, p, o, m) +# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_I(s, p, o, m) +# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_I(s, p, o, m) +# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_I(s, p, o, m) +# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_I(s, p, o, m) +# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_I(s, p, o, m) +# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_I(s, p, o, m) +# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_I(s, p, o, m) +# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_I(s, p, o, m) +# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_I(s, p, o, m) +# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_I(s, p, o, m) +# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_I(s, p, o, m) +# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_I(s, p, o, m) +# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_I(s, p, o, m) +# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_I(s, p, o, m) +# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_I(s, p, o, m) +# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_I(s, p, o, m) +# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_I(s, p, o, m) +# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_I(s, p, o, m) +# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_I(s, p, o, m) +# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_I(s, p, o, m) +# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_I(s, p, o, m) +# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_I(s, p, o, m) +# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_I(s, p, o, m) +# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_I(s, p, o, m) +# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_I(s, p, o, m) +# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_I(s, p, o, m) +# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_I(s, p, o, m) +# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_I(s, p, o, m) +# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_I(s, p, o, m) +# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_I(s, p, o, m) +# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_I(s, p, o, m) +# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_I(s, p, o, m) +# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_I(s, p, o, m) +# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_I(s, p, o, m) +# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_I(s, p, o, m) +# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_I(s, p, o, m) +# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_I(s, p, o, m) +# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_I(s, p, o, m) +# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_I(s, p, o, m) +# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_I(s, p, o, m) +# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_I(s, p, o, m) +# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_I(s, p, o, m) +# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_I(s, p, o, m) +# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_I(s, p, o, m) +# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_I(s, p, o, m) +# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_I(s, p, o, m) +# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_I(s, p, o, m) +# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_I(s, p, o, m) +# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_I(s, p, o, m) +# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_I(s, p, o, m) +# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_I(s, p, o, m) +# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_I(s, p, o, m) +# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_I(s, p, o, m) +# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_I(s, p, o, m) +# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_I(s, p, o, m) +# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_I(s, p, o, m) +# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_I(s, p, o, m) +# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_I(s, p, o, m) +# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_I(s, p, o, m) +# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_I(s, p, o, m) +# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_I(s, p, o, m) +# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_I(s, p, o, m) +# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_I(s, p, o, m) +# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_I(s, p, o, m) +# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_I(s, p, o, m) +# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_I(s, p, o, m) +# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_I(s, p, o, m) +# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_I(s, p, o, m) +# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_I(s, p, o, m) +# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_I(s, p, o, m) +# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_I(s, p, o, m) +# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_I(s, p, o, m) +# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_I(s, p, o, m) +# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_I(s, p, o, m) +# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_I(s, p, o, m) +# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_I(s, p, o, m) +# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_I(s, p, o, m) +# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_I(s, p, o, m) +# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_I(s, p, o, m) +# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_I(s, p, o, m) +# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_I(s, p, o, m) +# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_I(s, p, o, m) +# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_I(s, p, o, m) +# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_I(s, p, o, m) +# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_I(s, p, o, m) +# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_I(s, p, o, m) +# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_I(s, p, o, m) +# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_I(s, p, o, m) +# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_I(s, p, o, m) +# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_I(s, p, o, m) +# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_I(s, p, o, m) +# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_I(s, p, o, m) +# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_I(s, p, o, m) +# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_I(s, p, o, m) +# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_I(s, p, o, m) +# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_I(s, p, o, m) +# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_I(s, p, o, m) +# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_I(s, p, o, m) +# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_I(s, p, o, m) +# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_I(s, p, o, m) +# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_I(s, p, o, m) +# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_I(s, p, o, m) +# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_I(s, p, o, m) +# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_I(s, p, o, m) +# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_I(s, p, o, m) +# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_I(s, p, o, m) +# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_I(s, p, o, m) +# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_I(s, p, o, m) +# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_I(s, p, o, m) +# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_I(s, p, o, m) +# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_I(s, p, o, m) +# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_I(s, p, o, m) +# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_I(s, p, o, m) +# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_I(s, p, o, m) +# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_I(s, p, o, m) +# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_I(s, p, o, m) +# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_I(s, p, o, m) +# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_I(s, p, o, m) +# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_I(s, p, o, m) +# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_I(s, p, o, m) +# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_I(s, p, o, m) +# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_I(s, p, o, m) +# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_I(s, p, o, m) +# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_I(s, p, o, m) +# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_I(s, p, o, m) +# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_I(s, p, o, m) +# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_I(s, p, o, m) +# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_I(s, p, o, m) +# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_I(s, p, o, m) +# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_I(s, p, o, m) +# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_I(s, p, o, m) +# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_I(s, p, o, m) +# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_I(s, p, o, m) +# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_I(s, p, o, m) +# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_I(s, p, o, m) +# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_I(s, p, o, m) +# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_I(s, p, o, m) +# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_I(s, p, o, m) +# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_I(s, p, o, m) +# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_I(s, p, o, m) +# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_I(s, p, o, m) +# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_I(s, p, o, m) +# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_I(s, p, o, m) +# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_I(s, p, o, m) +# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_I(s, p, o, m) +# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_I(s, p, o, m) +# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_I(s, p, o, m) +# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_I(s, p, o, m) +# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_I(s, p, o, m) +# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_I(s, p, o, m) +# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_I(s, p, o, m) +# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_I(s, p, o, m) +# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_I(s, p, o, m) +# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_I(s, p, o, m) +# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_I(s, p, o, m) +# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_I(s, p, o, m) +# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_I(s, p, o, m) +# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_I(s, p, o, m) +# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_I(s, p, o, m) +# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_I(s, p, o, m) +# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_I(s, p, o, m) +# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_I(s, p, o, m) +# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_I(s, p, o, m) +# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_I(s, p, o, m) +# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_I(s, p, o, m) +# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_I(s, p, o, m) +# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_I(s, p, o, m) +# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_I(s, p, o, m) +# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_I(s, p, o, m) +# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_I(s, p, o, m) +# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_I(s, p, o, m) +# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_I(s, p, o, m) +# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_I(s, p, o, m) +# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_I(s, p, o, m) +# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_I(s, p, o, m) +# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_I(s, p, o, m) +# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_I(s, p, o, m) +# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_I(s, p, o, m) +# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_I(s, p, o, m) +# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_I(s, p, o, m) +# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_I(s, p, o, m) +# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_I(s, p, o, m) +# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_I(s, p, o, m) +# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_I(s, p, o, m) +# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_I(s, p, o, m) +# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_I(s, p, o, m) +# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_I(s, p, o, m) +# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_I(s, p, o, m) +# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_I(s, p, o, m) +# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_I(s, p, o, m) +# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_I(s, p, o, m) +# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_I(s, p, o, m) +# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_I(s, p, o, m) +# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_I(s, p, o, m) +# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_I(s, p, o, m) +# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_I(s, p, o, m) +# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_I(s, p, o, m) +# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_I(s, p, o, m) +# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_I(s, p, o, m) +# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_I(s, p, o, m) +# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_I(s, p, o, m) +# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_I(s, p, o, m) +# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_I(s, p, o, m) +# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_I(s, p, o, m) +# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_I(s, p, o, m) +# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_I(s, p, o, m) +# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_I(s, p, o, m) +# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_I(s, p, o, m) +# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_I(s, p, o, m) +# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_I(s, p, o, m) +# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_I(s, p, o, m) +# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_I(s, p, o, m) +# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_I(s, p, o, m) +# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_I(s, p, o, m) +# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_I(s, p, o, m) +# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_I(s, p, o, m) +# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_I(s, p, o, m) +# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_I(s, p, o, m) +# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_I(s, p, o, m) +# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_I(s, p, o, m) +# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_I(s, p, o, m) +# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_I(s, p, o, m) +# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_I(s, p, o, m) +# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_I(s, p, o, m) +# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_I(s, p, o, m) +# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_I(s, p, o, m) +# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_I(s, p, o, m) +# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_I(s, p, o, m) +# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_I(s, p, o, m) +# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_I(s, p, o, m) +# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_I(s, p, o, m) +# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_I(s, p, o, m) +# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_I(s, p, o, m) +# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_I(s, p, o, m) +# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_I(s, p, o, m) +# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_I(s, p, o, m) +# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_I(s, p, o, m) +# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_I(s, p, o, m) +# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_I(s, p, o, m) +# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_I(s, p, o, m) +# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_I(s, p, o, m) +# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_I(s, p, o, m) +# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_I(s, p, o, m) +# +# define BOOST_PP_FOR_1_I(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m) +# define BOOST_PP_FOR_2_I(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m) +# define BOOST_PP_FOR_3_I(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m) +# define BOOST_PP_FOR_4_I(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m) +# define BOOST_PP_FOR_5_I(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m) +# define BOOST_PP_FOR_6_I(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m) +# define BOOST_PP_FOR_7_I(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m) +# define BOOST_PP_FOR_8_I(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m) +# define BOOST_PP_FOR_9_I(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m) +# define BOOST_PP_FOR_10_I(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m) +# define BOOST_PP_FOR_11_I(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m) +# define BOOST_PP_FOR_12_I(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m) +# define BOOST_PP_FOR_13_I(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m) +# define BOOST_PP_FOR_14_I(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m) +# define BOOST_PP_FOR_15_I(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m) +# define BOOST_PP_FOR_16_I(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m) +# define BOOST_PP_FOR_17_I(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m) +# define BOOST_PP_FOR_18_I(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m) +# define BOOST_PP_FOR_19_I(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m) +# define BOOST_PP_FOR_20_I(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m) +# define BOOST_PP_FOR_21_I(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m) +# define BOOST_PP_FOR_22_I(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m) +# define BOOST_PP_FOR_23_I(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m) +# define BOOST_PP_FOR_24_I(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m) +# define BOOST_PP_FOR_25_I(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m) +# define BOOST_PP_FOR_26_I(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m) +# define BOOST_PP_FOR_27_I(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m) +# define BOOST_PP_FOR_28_I(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m) +# define BOOST_PP_FOR_29_I(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m) +# define BOOST_PP_FOR_30_I(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m) +# define BOOST_PP_FOR_31_I(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m) +# define BOOST_PP_FOR_32_I(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m) +# define BOOST_PP_FOR_33_I(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m) +# define BOOST_PP_FOR_34_I(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m) +# define BOOST_PP_FOR_35_I(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m) +# define BOOST_PP_FOR_36_I(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m) +# define BOOST_PP_FOR_37_I(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m) +# define BOOST_PP_FOR_38_I(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m) +# define BOOST_PP_FOR_39_I(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m) +# define BOOST_PP_FOR_40_I(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m) +# define BOOST_PP_FOR_41_I(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m) +# define BOOST_PP_FOR_42_I(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m) +# define BOOST_PP_FOR_43_I(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m) +# define BOOST_PP_FOR_44_I(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m) +# define BOOST_PP_FOR_45_I(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m) +# define BOOST_PP_FOR_46_I(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m) +# define BOOST_PP_FOR_47_I(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m) +# define BOOST_PP_FOR_48_I(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m) +# define BOOST_PP_FOR_49_I(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m) +# define BOOST_PP_FOR_50_I(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m) +# define BOOST_PP_FOR_51_I(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m) +# define BOOST_PP_FOR_52_I(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m) +# define BOOST_PP_FOR_53_I(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m) +# define BOOST_PP_FOR_54_I(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m) +# define BOOST_PP_FOR_55_I(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m) +# define BOOST_PP_FOR_56_I(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m) +# define BOOST_PP_FOR_57_I(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m) +# define BOOST_PP_FOR_58_I(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m) +# define BOOST_PP_FOR_59_I(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m) +# define BOOST_PP_FOR_60_I(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m) +# define BOOST_PP_FOR_61_I(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m) +# define BOOST_PP_FOR_62_I(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m) +# define BOOST_PP_FOR_63_I(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m) +# define BOOST_PP_FOR_64_I(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m) +# define BOOST_PP_FOR_65_I(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m) +# define BOOST_PP_FOR_66_I(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m) +# define BOOST_PP_FOR_67_I(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m) +# define BOOST_PP_FOR_68_I(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m) +# define BOOST_PP_FOR_69_I(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m) +# define BOOST_PP_FOR_70_I(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m) +# define BOOST_PP_FOR_71_I(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m) +# define BOOST_PP_FOR_72_I(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m) +# define BOOST_PP_FOR_73_I(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m) +# define BOOST_PP_FOR_74_I(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m) +# define BOOST_PP_FOR_75_I(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m) +# define BOOST_PP_FOR_76_I(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m) +# define BOOST_PP_FOR_77_I(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m) +# define BOOST_PP_FOR_78_I(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m) +# define BOOST_PP_FOR_79_I(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m) +# define BOOST_PP_FOR_80_I(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m) +# define BOOST_PP_FOR_81_I(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m) +# define BOOST_PP_FOR_82_I(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m) +# define BOOST_PP_FOR_83_I(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m) +# define BOOST_PP_FOR_84_I(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m) +# define BOOST_PP_FOR_85_I(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m) +# define BOOST_PP_FOR_86_I(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m) +# define BOOST_PP_FOR_87_I(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m) +# define BOOST_PP_FOR_88_I(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m) +# define BOOST_PP_FOR_89_I(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m) +# define BOOST_PP_FOR_90_I(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m) +# define BOOST_PP_FOR_91_I(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m) +# define BOOST_PP_FOR_92_I(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m) +# define BOOST_PP_FOR_93_I(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m) +# define BOOST_PP_FOR_94_I(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m) +# define BOOST_PP_FOR_95_I(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m) +# define BOOST_PP_FOR_96_I(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m) +# define BOOST_PP_FOR_97_I(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m) +# define BOOST_PP_FOR_98_I(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m) +# define BOOST_PP_FOR_99_I(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m) +# define BOOST_PP_FOR_100_I(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m) +# define BOOST_PP_FOR_101_I(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m) +# define BOOST_PP_FOR_102_I(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m) +# define BOOST_PP_FOR_103_I(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m) +# define BOOST_PP_FOR_104_I(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m) +# define BOOST_PP_FOR_105_I(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m) +# define BOOST_PP_FOR_106_I(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m) +# define BOOST_PP_FOR_107_I(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m) +# define BOOST_PP_FOR_108_I(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m) +# define BOOST_PP_FOR_109_I(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m) +# define BOOST_PP_FOR_110_I(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m) +# define BOOST_PP_FOR_111_I(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m) +# define BOOST_PP_FOR_112_I(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m) +# define BOOST_PP_FOR_113_I(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m) +# define BOOST_PP_FOR_114_I(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m) +# define BOOST_PP_FOR_115_I(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m) +# define BOOST_PP_FOR_116_I(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m) +# define BOOST_PP_FOR_117_I(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m) +# define BOOST_PP_FOR_118_I(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m) +# define BOOST_PP_FOR_119_I(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m) +# define BOOST_PP_FOR_120_I(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m) +# define BOOST_PP_FOR_121_I(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m) +# define BOOST_PP_FOR_122_I(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m) +# define BOOST_PP_FOR_123_I(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m) +# define BOOST_PP_FOR_124_I(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m) +# define BOOST_PP_FOR_125_I(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m) +# define BOOST_PP_FOR_126_I(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m) +# define BOOST_PP_FOR_127_I(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m) +# define BOOST_PP_FOR_128_I(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m) +# define BOOST_PP_FOR_129_I(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m) +# define BOOST_PP_FOR_130_I(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m) +# define BOOST_PP_FOR_131_I(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m) +# define BOOST_PP_FOR_132_I(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m) +# define BOOST_PP_FOR_133_I(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m) +# define BOOST_PP_FOR_134_I(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m) +# define BOOST_PP_FOR_135_I(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m) +# define BOOST_PP_FOR_136_I(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m) +# define BOOST_PP_FOR_137_I(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m) +# define BOOST_PP_FOR_138_I(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m) +# define BOOST_PP_FOR_139_I(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m) +# define BOOST_PP_FOR_140_I(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m) +# define BOOST_PP_FOR_141_I(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m) +# define BOOST_PP_FOR_142_I(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m) +# define BOOST_PP_FOR_143_I(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m) +# define BOOST_PP_FOR_144_I(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m) +# define BOOST_PP_FOR_145_I(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m) +# define BOOST_PP_FOR_146_I(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m) +# define BOOST_PP_FOR_147_I(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m) +# define BOOST_PP_FOR_148_I(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m) +# define BOOST_PP_FOR_149_I(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m) +# define BOOST_PP_FOR_150_I(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m) +# define BOOST_PP_FOR_151_I(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m) +# define BOOST_PP_FOR_152_I(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m) +# define BOOST_PP_FOR_153_I(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m) +# define BOOST_PP_FOR_154_I(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m) +# define BOOST_PP_FOR_155_I(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m) +# define BOOST_PP_FOR_156_I(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m) +# define BOOST_PP_FOR_157_I(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m) +# define BOOST_PP_FOR_158_I(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m) +# define BOOST_PP_FOR_159_I(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m) +# define BOOST_PP_FOR_160_I(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m) +# define BOOST_PP_FOR_161_I(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m) +# define BOOST_PP_FOR_162_I(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m) +# define BOOST_PP_FOR_163_I(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m) +# define BOOST_PP_FOR_164_I(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m) +# define BOOST_PP_FOR_165_I(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m) +# define BOOST_PP_FOR_166_I(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m) +# define BOOST_PP_FOR_167_I(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m) +# define BOOST_PP_FOR_168_I(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m) +# define BOOST_PP_FOR_169_I(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m) +# define BOOST_PP_FOR_170_I(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m) +# define BOOST_PP_FOR_171_I(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m) +# define BOOST_PP_FOR_172_I(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m) +# define BOOST_PP_FOR_173_I(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m) +# define BOOST_PP_FOR_174_I(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m) +# define BOOST_PP_FOR_175_I(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m) +# define BOOST_PP_FOR_176_I(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m) +# define BOOST_PP_FOR_177_I(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m) +# define BOOST_PP_FOR_178_I(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m) +# define BOOST_PP_FOR_179_I(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m) +# define BOOST_PP_FOR_180_I(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m) +# define BOOST_PP_FOR_181_I(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m) +# define BOOST_PP_FOR_182_I(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m) +# define BOOST_PP_FOR_183_I(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m) +# define BOOST_PP_FOR_184_I(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m) +# define BOOST_PP_FOR_185_I(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m) +# define BOOST_PP_FOR_186_I(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m) +# define BOOST_PP_FOR_187_I(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m) +# define BOOST_PP_FOR_188_I(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m) +# define BOOST_PP_FOR_189_I(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m) +# define BOOST_PP_FOR_190_I(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m) +# define BOOST_PP_FOR_191_I(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m) +# define BOOST_PP_FOR_192_I(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m) +# define BOOST_PP_FOR_193_I(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m) +# define BOOST_PP_FOR_194_I(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m) +# define BOOST_PP_FOR_195_I(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m) +# define BOOST_PP_FOR_196_I(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m) +# define BOOST_PP_FOR_197_I(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m) +# define BOOST_PP_FOR_198_I(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m) +# define BOOST_PP_FOR_199_I(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m) +# define BOOST_PP_FOR_200_I(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m) +# define BOOST_PP_FOR_201_I(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m) +# define BOOST_PP_FOR_202_I(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m) +# define BOOST_PP_FOR_203_I(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m) +# define BOOST_PP_FOR_204_I(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m) +# define BOOST_PP_FOR_205_I(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m) +# define BOOST_PP_FOR_206_I(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m) +# define BOOST_PP_FOR_207_I(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m) +# define BOOST_PP_FOR_208_I(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m) +# define BOOST_PP_FOR_209_I(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m) +# define BOOST_PP_FOR_210_I(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m) +# define BOOST_PP_FOR_211_I(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m) +# define BOOST_PP_FOR_212_I(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m) +# define BOOST_PP_FOR_213_I(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m) +# define BOOST_PP_FOR_214_I(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m) +# define BOOST_PP_FOR_215_I(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m) +# define BOOST_PP_FOR_216_I(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m) +# define BOOST_PP_FOR_217_I(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m) +# define BOOST_PP_FOR_218_I(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m) +# define BOOST_PP_FOR_219_I(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m) +# define BOOST_PP_FOR_220_I(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m) +# define BOOST_PP_FOR_221_I(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m) +# define BOOST_PP_FOR_222_I(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m) +# define BOOST_PP_FOR_223_I(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m) +# define BOOST_PP_FOR_224_I(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m) +# define BOOST_PP_FOR_225_I(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m) +# define BOOST_PP_FOR_226_I(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m) +# define BOOST_PP_FOR_227_I(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m) +# define BOOST_PP_FOR_228_I(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m) +# define BOOST_PP_FOR_229_I(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m) +# define BOOST_PP_FOR_230_I(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m) +# define BOOST_PP_FOR_231_I(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m) +# define BOOST_PP_FOR_232_I(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m) +# define BOOST_PP_FOR_233_I(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m) +# define BOOST_PP_FOR_234_I(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m) +# define BOOST_PP_FOR_235_I(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m) +# define BOOST_PP_FOR_236_I(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m) +# define BOOST_PP_FOR_237_I(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m) +# define BOOST_PP_FOR_238_I(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m) +# define BOOST_PP_FOR_239_I(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m) +# define BOOST_PP_FOR_240_I(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m) +# define BOOST_PP_FOR_241_I(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m) +# define BOOST_PP_FOR_242_I(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m) +# define BOOST_PP_FOR_243_I(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m) +# define BOOST_PP_FOR_244_I(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m) +# define BOOST_PP_FOR_245_I(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m) +# define BOOST_PP_FOR_246_I(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m) +# define BOOST_PP_FOR_247_I(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m) +# define BOOST_PP_FOR_248_I(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m) +# define BOOST_PP_FOR_249_I(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m) +# define BOOST_PP_FOR_250_I(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m) +# define BOOST_PP_FOR_251_I(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m) +# define BOOST_PP_FOR_252_I(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m) +# define BOOST_PP_FOR_253_I(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m) +# define BOOST_PP_FOR_254_I(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m) +# define BOOST_PP_FOR_255_I(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m) +# define BOOST_PP_FOR_256_I(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/for.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/for.hpp new file mode 100644 index 00000000..94446bee --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/for.hpp @@ -0,0 +1,536 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP +# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP +# +# include +# include +# include +# include +# +# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p(2, s)), s, p, o, m) +# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p(3, s)), s, p, o, m) +# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p(4, s)), s, p, o, m) +# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p(5, s)), s, p, o, m) +# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p(6, s)), s, p, o, m) +# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p(7, s)), s, p, o, m) +# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p(8, s)), s, p, o, m) +# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p(9, s)), s, p, o, m) +# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p(10, s)), s, p, o, m) +# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p(11, s)), s, p, o, m) +# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p(12, s)), s, p, o, m) +# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p(13, s)), s, p, o, m) +# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p(14, s)), s, p, o, m) +# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p(15, s)), s, p, o, m) +# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p(16, s)), s, p, o, m) +# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p(17, s)), s, p, o, m) +# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p(18, s)), s, p, o, m) +# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p(19, s)), s, p, o, m) +# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p(20, s)), s, p, o, m) +# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p(21, s)), s, p, o, m) +# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p(22, s)), s, p, o, m) +# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p(23, s)), s, p, o, m) +# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p(24, s)), s, p, o, m) +# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p(25, s)), s, p, o, m) +# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p(26, s)), s, p, o, m) +# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p(27, s)), s, p, o, m) +# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p(28, s)), s, p, o, m) +# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p(29, s)), s, p, o, m) +# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p(30, s)), s, p, o, m) +# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p(31, s)), s, p, o, m) +# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p(32, s)), s, p, o, m) +# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p(33, s)), s, p, o, m) +# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p(34, s)), s, p, o, m) +# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p(35, s)), s, p, o, m) +# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p(36, s)), s, p, o, m) +# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p(37, s)), s, p, o, m) +# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p(38, s)), s, p, o, m) +# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p(39, s)), s, p, o, m) +# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p(40, s)), s, p, o, m) +# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p(41, s)), s, p, o, m) +# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p(42, s)), s, p, o, m) +# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p(43, s)), s, p, o, m) +# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p(44, s)), s, p, o, m) +# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p(45, s)), s, p, o, m) +# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p(46, s)), s, p, o, m) +# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p(47, s)), s, p, o, m) +# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p(48, s)), s, p, o, m) +# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p(49, s)), s, p, o, m) +# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p(50, s)), s, p, o, m) +# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p(51, s)), s, p, o, m) +# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p(52, s)), s, p, o, m) +# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p(53, s)), s, p, o, m) +# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p(54, s)), s, p, o, m) +# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p(55, s)), s, p, o, m) +# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p(56, s)), s, p, o, m) +# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p(57, s)), s, p, o, m) +# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p(58, s)), s, p, o, m) +# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p(59, s)), s, p, o, m) +# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p(60, s)), s, p, o, m) +# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p(61, s)), s, p, o, m) +# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p(62, s)), s, p, o, m) +# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p(63, s)), s, p, o, m) +# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p(64, s)), s, p, o, m) +# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p(65, s)), s, p, o, m) +# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p(66, s)), s, p, o, m) +# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p(67, s)), s, p, o, m) +# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p(68, s)), s, p, o, m) +# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p(69, s)), s, p, o, m) +# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p(70, s)), s, p, o, m) +# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p(71, s)), s, p, o, m) +# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p(72, s)), s, p, o, m) +# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p(73, s)), s, p, o, m) +# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p(74, s)), s, p, o, m) +# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p(75, s)), s, p, o, m) +# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p(76, s)), s, p, o, m) +# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p(77, s)), s, p, o, m) +# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p(78, s)), s, p, o, m) +# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p(79, s)), s, p, o, m) +# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p(80, s)), s, p, o, m) +# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p(81, s)), s, p, o, m) +# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p(82, s)), s, p, o, m) +# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p(83, s)), s, p, o, m) +# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p(84, s)), s, p, o, m) +# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p(85, s)), s, p, o, m) +# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p(86, s)), s, p, o, m) +# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p(87, s)), s, p, o, m) +# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p(88, s)), s, p, o, m) +# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p(89, s)), s, p, o, m) +# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p(90, s)), s, p, o, m) +# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p(91, s)), s, p, o, m) +# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p(92, s)), s, p, o, m) +# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p(93, s)), s, p, o, m) +# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p(94, s)), s, p, o, m) +# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p(95, s)), s, p, o, m) +# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p(96, s)), s, p, o, m) +# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p(97, s)), s, p, o, m) +# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p(98, s)), s, p, o, m) +# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p(99, s)), s, p, o, m) +# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p(100, s)), s, p, o, m) +# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p(101, s)), s, p, o, m) +# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p(102, s)), s, p, o, m) +# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p(103, s)), s, p, o, m) +# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p(104, s)), s, p, o, m) +# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p(105, s)), s, p, o, m) +# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p(106, s)), s, p, o, m) +# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p(107, s)), s, p, o, m) +# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p(108, s)), s, p, o, m) +# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p(109, s)), s, p, o, m) +# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p(110, s)), s, p, o, m) +# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p(111, s)), s, p, o, m) +# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p(112, s)), s, p, o, m) +# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p(113, s)), s, p, o, m) +# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p(114, s)), s, p, o, m) +# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p(115, s)), s, p, o, m) +# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p(116, s)), s, p, o, m) +# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p(117, s)), s, p, o, m) +# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p(118, s)), s, p, o, m) +# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p(119, s)), s, p, o, m) +# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p(120, s)), s, p, o, m) +# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p(121, s)), s, p, o, m) +# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p(122, s)), s, p, o, m) +# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p(123, s)), s, p, o, m) +# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p(124, s)), s, p, o, m) +# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p(125, s)), s, p, o, m) +# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p(126, s)), s, p, o, m) +# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p(127, s)), s, p, o, m) +# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p(128, s)), s, p, o, m) +# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p(129, s)), s, p, o, m) +# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p(130, s)), s, p, o, m) +# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p(131, s)), s, p, o, m) +# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p(132, s)), s, p, o, m) +# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p(133, s)), s, p, o, m) +# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p(134, s)), s, p, o, m) +# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p(135, s)), s, p, o, m) +# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p(136, s)), s, p, o, m) +# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p(137, s)), s, p, o, m) +# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p(138, s)), s, p, o, m) +# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p(139, s)), s, p, o, m) +# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p(140, s)), s, p, o, m) +# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p(141, s)), s, p, o, m) +# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p(142, s)), s, p, o, m) +# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p(143, s)), s, p, o, m) +# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p(144, s)), s, p, o, m) +# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p(145, s)), s, p, o, m) +# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p(146, s)), s, p, o, m) +# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p(147, s)), s, p, o, m) +# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p(148, s)), s, p, o, m) +# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p(149, s)), s, p, o, m) +# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p(150, s)), s, p, o, m) +# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p(151, s)), s, p, o, m) +# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p(152, s)), s, p, o, m) +# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p(153, s)), s, p, o, m) +# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p(154, s)), s, p, o, m) +# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p(155, s)), s, p, o, m) +# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p(156, s)), s, p, o, m) +# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p(157, s)), s, p, o, m) +# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p(158, s)), s, p, o, m) +# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p(159, s)), s, p, o, m) +# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p(160, s)), s, p, o, m) +# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p(161, s)), s, p, o, m) +# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p(162, s)), s, p, o, m) +# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p(163, s)), s, p, o, m) +# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p(164, s)), s, p, o, m) +# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p(165, s)), s, p, o, m) +# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p(166, s)), s, p, o, m) +# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p(167, s)), s, p, o, m) +# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p(168, s)), s, p, o, m) +# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p(169, s)), s, p, o, m) +# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p(170, s)), s, p, o, m) +# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p(171, s)), s, p, o, m) +# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p(172, s)), s, p, o, m) +# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p(173, s)), s, p, o, m) +# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p(174, s)), s, p, o, m) +# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p(175, s)), s, p, o, m) +# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p(176, s)), s, p, o, m) +# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p(177, s)), s, p, o, m) +# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p(178, s)), s, p, o, m) +# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p(179, s)), s, p, o, m) +# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p(180, s)), s, p, o, m) +# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p(181, s)), s, p, o, m) +# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p(182, s)), s, p, o, m) +# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p(183, s)), s, p, o, m) +# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p(184, s)), s, p, o, m) +# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p(185, s)), s, p, o, m) +# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p(186, s)), s, p, o, m) +# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p(187, s)), s, p, o, m) +# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p(188, s)), s, p, o, m) +# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p(189, s)), s, p, o, m) +# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p(190, s)), s, p, o, m) +# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p(191, s)), s, p, o, m) +# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p(192, s)), s, p, o, m) +# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p(193, s)), s, p, o, m) +# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p(194, s)), s, p, o, m) +# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p(195, s)), s, p, o, m) +# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p(196, s)), s, p, o, m) +# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p(197, s)), s, p, o, m) +# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p(198, s)), s, p, o, m) +# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p(199, s)), s, p, o, m) +# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p(200, s)), s, p, o, m) +# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p(201, s)), s, p, o, m) +# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p(202, s)), s, p, o, m) +# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p(203, s)), s, p, o, m) +# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p(204, s)), s, p, o, m) +# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p(205, s)), s, p, o, m) +# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p(206, s)), s, p, o, m) +# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p(207, s)), s, p, o, m) +# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p(208, s)), s, p, o, m) +# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p(209, s)), s, p, o, m) +# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p(210, s)), s, p, o, m) +# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p(211, s)), s, p, o, m) +# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p(212, s)), s, p, o, m) +# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p(213, s)), s, p, o, m) +# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p(214, s)), s, p, o, m) +# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p(215, s)), s, p, o, m) +# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p(216, s)), s, p, o, m) +# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p(217, s)), s, p, o, m) +# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p(218, s)), s, p, o, m) +# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p(219, s)), s, p, o, m) +# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p(220, s)), s, p, o, m) +# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p(221, s)), s, p, o, m) +# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p(222, s)), s, p, o, m) +# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p(223, s)), s, p, o, m) +# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p(224, s)), s, p, o, m) +# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p(225, s)), s, p, o, m) +# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p(226, s)), s, p, o, m) +# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p(227, s)), s, p, o, m) +# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p(228, s)), s, p, o, m) +# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p(229, s)), s, p, o, m) +# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p(230, s)), s, p, o, m) +# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p(231, s)), s, p, o, m) +# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p(232, s)), s, p, o, m) +# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p(233, s)), s, p, o, m) +# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p(234, s)), s, p, o, m) +# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p(235, s)), s, p, o, m) +# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p(236, s)), s, p, o, m) +# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p(237, s)), s, p, o, m) +# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p(238, s)), s, p, o, m) +# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p(239, s)), s, p, o, m) +# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p(240, s)), s, p, o, m) +# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p(241, s)), s, p, o, m) +# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p(242, s)), s, p, o, m) +# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p(243, s)), s, p, o, m) +# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p(244, s)), s, p, o, m) +# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p(245, s)), s, p, o, m) +# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p(246, s)), s, p, o, m) +# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p(247, s)), s, p, o, m) +# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p(248, s)), s, p, o, m) +# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p(249, s)), s, p, o, m) +# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p(250, s)), s, p, o, m) +# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p(251, s)), s, p, o, m) +# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p(252, s)), s, p, o, m) +# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p(253, s)), s, p, o, m) +# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p(254, s)), s, p, o, m) +# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p(255, s)), s, p, o, m) +# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p(256, s)), s, p, o, m) +# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p(257, s)), s, p, o, m) +# +# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m) +# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m) +# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m) +# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m) +# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m) +# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m) +# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m) +# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m) +# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m) +# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m) +# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m) +# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m) +# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m) +# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m) +# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m) +# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m) +# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m) +# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m) +# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m) +# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m) +# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m) +# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m) +# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m) +# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m) +# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m) +# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m) +# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m) +# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m) +# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m) +# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m) +# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m) +# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m) +# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m) +# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m) +# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m) +# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m) +# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m) +# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m) +# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m) +# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m) +# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m) +# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m) +# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m) +# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m) +# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m) +# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m) +# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m) +# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m) +# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m) +# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m) +# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m) +# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m) +# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m) +# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m) +# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m) +# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m) +# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m) +# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m) +# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m) +# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m) +# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m) +# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m) +# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m) +# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m) +# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m) +# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m) +# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m) +# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m) +# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m) +# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m) +# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m) +# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m) +# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m) +# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m) +# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m) +# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m) +# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m) +# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m) +# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m) +# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m) +# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m) +# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m) +# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m) +# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m) +# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m) +# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m) +# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m) +# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m) +# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m) +# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m) +# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m) +# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m) +# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m) +# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m) +# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m) +# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m) +# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m) +# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m) +# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m) +# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m) +# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m) +# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m) +# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m) +# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m) +# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m) +# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m) +# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m) +# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m) +# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m) +# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m) +# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m) +# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m) +# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m) +# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m) +# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m) +# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m) +# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m) +# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m) +# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m) +# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m) +# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m) +# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m) +# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m) +# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m) +# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m) +# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m) +# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m) +# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m) +# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m) +# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m) +# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m) +# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m) +# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m) +# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m) +# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m) +# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m) +# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m) +# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m) +# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m) +# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m) +# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m) +# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m) +# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m) +# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m) +# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m) +# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m) +# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m) +# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m) +# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m) +# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m) +# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m) +# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m) +# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m) +# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m) +# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m) +# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m) +# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m) +# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m) +# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m) +# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m) +# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m) +# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m) +# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m) +# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m) +# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m) +# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m) +# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m) +# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m) +# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m) +# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m) +# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m) +# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m) +# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m) +# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m) +# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m) +# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m) +# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m) +# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m) +# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m) +# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m) +# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m) +# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m) +# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m) +# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m) +# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m) +# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m) +# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m) +# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m) +# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m) +# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m) +# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m) +# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m) +# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m) +# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m) +# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m) +# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m) +# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m) +# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m) +# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m) +# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m) +# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m) +# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m) +# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m) +# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m) +# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m) +# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m) +# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m) +# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m) +# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m) +# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m) +# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m) +# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m) +# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m) +# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m) +# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m) +# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m) +# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m) +# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m) +# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m) +# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m) +# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m) +# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m) +# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m) +# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m) +# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m) +# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m) +# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m) +# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m) +# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m) +# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m) +# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m) +# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m) +# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m) +# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m) +# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m) +# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m) +# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m) +# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m) +# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m) +# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m) +# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m) +# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m) +# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m) +# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m) +# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m) +# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m) +# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m) +# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m) +# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m) +# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m) +# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m) +# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m) +# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m) +# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m) +# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m) +# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/msvc/for.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/msvc/for.hpp new file mode 100644 index 00000000..eb047bcc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/detail/msvc/for.hpp @@ -0,0 +1,277 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP +# define BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP +# +# include +# include +# +# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m) +# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m) +# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m) +# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m) +# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m) +# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m) +# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m) +# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m) +# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m) +# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m) +# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m) +# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m) +# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m) +# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m) +# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m) +# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m) +# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m) +# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m) +# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m) +# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m) +# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m) +# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m) +# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m) +# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m) +# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m) +# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m) +# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m) +# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m) +# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m) +# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m) +# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m) +# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m) +# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m) +# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m) +# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m) +# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m) +# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m) +# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m) +# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m) +# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m) +# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m) +# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m) +# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m) +# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m) +# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m) +# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m) +# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m) +# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m) +# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m) +# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m) +# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m) +# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m) +# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m) +# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m) +# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m) +# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m) +# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m) +# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m) +# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m) +# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m) +# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m) +# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m) +# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m) +# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m) +# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m) +# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m) +# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m) +# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m) +# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m) +# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m) +# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m) +# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m) +# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m) +# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m) +# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m) +# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m) +# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m) +# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m) +# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m) +# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m) +# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m) +# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m) +# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m) +# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m) +# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m) +# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m) +# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m) +# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m) +# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m) +# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m) +# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m) +# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m) +# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m) +# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m) +# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m) +# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m) +# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m) +# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m) +# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m) +# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m) +# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m) +# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m) +# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m) +# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m) +# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m) +# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m) +# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m) +# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m) +# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m) +# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m) +# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m) +# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m) +# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m) +# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m) +# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m) +# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m) +# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m) +# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m) +# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m) +# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m) +# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m) +# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m) +# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m) +# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m) +# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m) +# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m) +# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m) +# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m) +# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m) +# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m) +# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m) +# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m) +# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m) +# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m) +# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m) +# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m) +# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m) +# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m) +# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m) +# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m) +# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m) +# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m) +# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m) +# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m) +# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m) +# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m) +# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m) +# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m) +# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m) +# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m) +# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m) +# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m) +# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m) +# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m) +# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m) +# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m) +# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m) +# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m) +# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m) +# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m) +# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m) +# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m) +# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m) +# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m) +# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m) +# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m) +# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m) +# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m) +# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m) +# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m) +# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m) +# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m) +# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m) +# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m) +# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m) +# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m) +# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m) +# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m) +# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m) +# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m) +# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m) +# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m) +# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m) +# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m) +# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m) +# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m) +# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m) +# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m) +# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m) +# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m) +# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m) +# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m) +# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m) +# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m) +# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m) +# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m) +# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m) +# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m) +# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m) +# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m) +# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m) +# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m) +# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m) +# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m) +# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m) +# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m) +# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m) +# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m) +# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m) +# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m) +# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m) +# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m) +# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m) +# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m) +# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m) +# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m) +# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m) +# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m) +# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m) +# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m) +# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m) +# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m) +# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m) +# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m) +# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m) +# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m) +# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m) +# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m) +# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m) +# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m) +# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m) +# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m) +# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m) +# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m) +# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m) +# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m) +# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m) +# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m) +# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m) +# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m) +# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m) +# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m) +# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m) +# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m) +# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m) +# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m) +# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m) +# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m) +# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m) +# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m) +# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m) +# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m) +# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m) +# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m) +# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m) +# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_binary_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_binary_params.hpp new file mode 100644 index 00000000..f4363d8f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_binary_params.hpp @@ -0,0 +1,54 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP +# define BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP +# +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_ENUM_BINARY_PARAMS */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2)) +# else +# define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) +# define BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2)) +# endif +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() +# define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp) +# define BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, im) +# else +# define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp)) +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) +# define BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) BOOST_PP_COMMA_IF(n) p1 ## n p2 ## n +# else +# define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n) +# endif +# +# /* BOOST_PP_ENUM_BINARY_PARAMS_Z */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2)) +# else +# define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) +# define BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2)) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_params.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_params.hpp new file mode 100644 index 00000000..0643b0cd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/enum_params.hpp @@ -0,0 +1,41 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP +# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP +# +# include +# include +# include +# +# /* BOOST_PP_ENUM_PARAMS */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param) +# else +# define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_ENUM_PARAMS_I(count, param) +# define BOOST_PP_ENUM_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param) +# endif +# +# define BOOST_PP_ENUM_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) param ## n +# +# /* BOOST_PP_ENUM_PARAMS_Z */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param) +# else +# define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) +# define BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param) +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/for.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/for.hpp new file mode 100644 index 00000000..f28b7de2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/for.hpp @@ -0,0 +1,306 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_FOR_HPP +# define BOOST_PREPROCESSOR_REPETITION_FOR_HPP +# +# include +# include +# include +# +# /* BOOST_PP_FOR */ +# +# if 0 +# define BOOST_PP_FOR(state, pred, op, macro) +# endif +# +# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256)) +# +# define BOOST_PP_FOR_P(n) BOOST_PP_CAT(BOOST_PP_FOR_CHECK_, BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M)) +# +# define BOOST_PP_FOR_SR_P(r, s) s +# define BOOST_PP_FOR_SR_O(r, s) 0 +# define BOOST_PP_FOR_SR_M(r, s) BOOST_PP_NIL +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# endif +# +# define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002) +# +# define BOOST_PP_FOR_CHECK_BOOST_PP_NIL 1 +# +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_3(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_4(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_5(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_6(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_7(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_8(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_9(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_10(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_11(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_12(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_13(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_14(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_15(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_16(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_17(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_18(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_19(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_20(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_21(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_22(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_23(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_24(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_25(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_26(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_27(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_28(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_29(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_30(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_31(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_32(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_33(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_34(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_35(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_36(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_37(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_38(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_39(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_40(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_41(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_42(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_43(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_44(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_45(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_46(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_47(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_48(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_49(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_50(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_51(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_52(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_53(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_54(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_55(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_56(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_57(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_58(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_59(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_60(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_61(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_62(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_63(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_64(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_65(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_66(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_67(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_68(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_69(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_70(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_71(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_72(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_73(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_74(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_75(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_76(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_77(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_78(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_79(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_80(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_81(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_82(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_83(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_84(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_85(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_86(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_87(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_88(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_89(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_90(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_91(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_92(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_93(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_94(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_95(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_96(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_97(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_98(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_99(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_100(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_101(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_102(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_103(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_104(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_105(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_106(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_107(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_108(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_109(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_110(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_111(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_112(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_113(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_114(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_115(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_116(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_117(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_118(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_119(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_120(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_121(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_122(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_123(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_124(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_125(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_126(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_127(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_128(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_129(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_130(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_131(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_132(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_133(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_134(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_135(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_136(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_137(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_138(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_139(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_140(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_141(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_142(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_143(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_144(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_145(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_146(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_147(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_148(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_149(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_150(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_151(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_152(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_153(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_154(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_155(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_156(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_157(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_158(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_159(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_160(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_161(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_162(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_163(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_164(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_165(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_166(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_167(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_168(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_169(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_170(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_171(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_172(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_173(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_174(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_175(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_176(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_177(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_178(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_179(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_180(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_181(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_182(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_183(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_184(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_185(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_186(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_187(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_188(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_189(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_190(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_191(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_192(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_193(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_194(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_195(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_196(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_197(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_198(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_199(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_200(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_201(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_202(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_203(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_204(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_205(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_206(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_207(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_208(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_209(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_210(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_211(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_212(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_213(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_214(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_215(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_216(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_217(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_218(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_219(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_220(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_221(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_222(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_223(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_224(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_225(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_226(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_227(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_228(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_229(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_230(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_231(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_232(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_233(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_234(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_235(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_236(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_237(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_238(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_239(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_240(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_241(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_242(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_243(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_244(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_245(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_246(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_247(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_248(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_249(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_250(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_251(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_252(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_253(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_254(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_255(s, p, o, m) 0 +# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat.hpp new file mode 100644 index 00000000..cdccb813 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat.hpp @@ -0,0 +1,825 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP +# define BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP +# +# include +# include +# include +# include +# include +# +# /* BOOST_PP_REPEAT */ +# +# if 0 +# define BOOST_PP_REPEAT(count, macro, data) +# endif +# +# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4)) +# +# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_REPEAT_CHECK_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3, BOOST_PP_NIL)) +# +# define BOOST_PP_REPEAT_CHECK_BOOST_PP_NIL 1 +# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_1(c, m, d) 0 +# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_2(c, m, d) 0 +# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_3(c, m, d) 0 +# +# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_REPEAT_1_I(c, m, d) +# define BOOST_PP_REPEAT_2(c, m, d) BOOST_PP_REPEAT_2_I(c, m, d) +# define BOOST_PP_REPEAT_3(c, m, d) BOOST_PP_REPEAT_3_I(c, m, d) +# define BOOST_PP_REPEAT_4(c, m, d) BOOST_PP_ERROR(0x0003) +# +# define BOOST_PP_REPEAT_1_I(c, m, d) BOOST_PP_REPEAT_1_ ## c(m, d) +# define BOOST_PP_REPEAT_2_I(c, m, d) BOOST_PP_REPEAT_2_ ## c(m, d) +# define BOOST_PP_REPEAT_3_I(c, m, d) BOOST_PP_REPEAT_3_ ## c(m, d) +# +# define BOOST_PP_REPEAT_1ST BOOST_PP_REPEAT_1 +# define BOOST_PP_REPEAT_2ND BOOST_PP_REPEAT_2 +# define BOOST_PP_REPEAT_3RD BOOST_PP_REPEAT_3 +# +# define BOOST_PP_REPEAT_1_0(m, d) +# define BOOST_PP_REPEAT_1_1(m, d) m(2, 0, d) +# define BOOST_PP_REPEAT_1_2(m, d) BOOST_PP_REPEAT_1_1(m, d) m(2, 1, d) +# define BOOST_PP_REPEAT_1_3(m, d) BOOST_PP_REPEAT_1_2(m, d) m(2, 2, d) +# define BOOST_PP_REPEAT_1_4(m, d) BOOST_PP_REPEAT_1_3(m, d) m(2, 3, d) +# define BOOST_PP_REPEAT_1_5(m, d) BOOST_PP_REPEAT_1_4(m, d) m(2, 4, d) +# define BOOST_PP_REPEAT_1_6(m, d) BOOST_PP_REPEAT_1_5(m, d) m(2, 5, d) +# define BOOST_PP_REPEAT_1_7(m, d) BOOST_PP_REPEAT_1_6(m, d) m(2, 6, d) +# define BOOST_PP_REPEAT_1_8(m, d) BOOST_PP_REPEAT_1_7(m, d) m(2, 7, d) +# define BOOST_PP_REPEAT_1_9(m, d) BOOST_PP_REPEAT_1_8(m, d) m(2, 8, d) +# define BOOST_PP_REPEAT_1_10(m, d) BOOST_PP_REPEAT_1_9(m, d) m(2, 9, d) +# define BOOST_PP_REPEAT_1_11(m, d) BOOST_PP_REPEAT_1_10(m, d) m(2, 10, d) +# define BOOST_PP_REPEAT_1_12(m, d) BOOST_PP_REPEAT_1_11(m, d) m(2, 11, d) +# define BOOST_PP_REPEAT_1_13(m, d) BOOST_PP_REPEAT_1_12(m, d) m(2, 12, d) +# define BOOST_PP_REPEAT_1_14(m, d) BOOST_PP_REPEAT_1_13(m, d) m(2, 13, d) +# define BOOST_PP_REPEAT_1_15(m, d) BOOST_PP_REPEAT_1_14(m, d) m(2, 14, d) +# define BOOST_PP_REPEAT_1_16(m, d) BOOST_PP_REPEAT_1_15(m, d) m(2, 15, d) +# define BOOST_PP_REPEAT_1_17(m, d) BOOST_PP_REPEAT_1_16(m, d) m(2, 16, d) +# define BOOST_PP_REPEAT_1_18(m, d) BOOST_PP_REPEAT_1_17(m, d) m(2, 17, d) +# define BOOST_PP_REPEAT_1_19(m, d) BOOST_PP_REPEAT_1_18(m, d) m(2, 18, d) +# define BOOST_PP_REPEAT_1_20(m, d) BOOST_PP_REPEAT_1_19(m, d) m(2, 19, d) +# define BOOST_PP_REPEAT_1_21(m, d) BOOST_PP_REPEAT_1_20(m, d) m(2, 20, d) +# define BOOST_PP_REPEAT_1_22(m, d) BOOST_PP_REPEAT_1_21(m, d) m(2, 21, d) +# define BOOST_PP_REPEAT_1_23(m, d) BOOST_PP_REPEAT_1_22(m, d) m(2, 22, d) +# define BOOST_PP_REPEAT_1_24(m, d) BOOST_PP_REPEAT_1_23(m, d) m(2, 23, d) +# define BOOST_PP_REPEAT_1_25(m, d) BOOST_PP_REPEAT_1_24(m, d) m(2, 24, d) +# define BOOST_PP_REPEAT_1_26(m, d) BOOST_PP_REPEAT_1_25(m, d) m(2, 25, d) +# define BOOST_PP_REPEAT_1_27(m, d) BOOST_PP_REPEAT_1_26(m, d) m(2, 26, d) +# define BOOST_PP_REPEAT_1_28(m, d) BOOST_PP_REPEAT_1_27(m, d) m(2, 27, d) +# define BOOST_PP_REPEAT_1_29(m, d) BOOST_PP_REPEAT_1_28(m, d) m(2, 28, d) +# define BOOST_PP_REPEAT_1_30(m, d) BOOST_PP_REPEAT_1_29(m, d) m(2, 29, d) +# define BOOST_PP_REPEAT_1_31(m, d) BOOST_PP_REPEAT_1_30(m, d) m(2, 30, d) +# define BOOST_PP_REPEAT_1_32(m, d) BOOST_PP_REPEAT_1_31(m, d) m(2, 31, d) +# define BOOST_PP_REPEAT_1_33(m, d) BOOST_PP_REPEAT_1_32(m, d) m(2, 32, d) +# define BOOST_PP_REPEAT_1_34(m, d) BOOST_PP_REPEAT_1_33(m, d) m(2, 33, d) +# define BOOST_PP_REPEAT_1_35(m, d) BOOST_PP_REPEAT_1_34(m, d) m(2, 34, d) +# define BOOST_PP_REPEAT_1_36(m, d) BOOST_PP_REPEAT_1_35(m, d) m(2, 35, d) +# define BOOST_PP_REPEAT_1_37(m, d) BOOST_PP_REPEAT_1_36(m, d) m(2, 36, d) +# define BOOST_PP_REPEAT_1_38(m, d) BOOST_PP_REPEAT_1_37(m, d) m(2, 37, d) +# define BOOST_PP_REPEAT_1_39(m, d) BOOST_PP_REPEAT_1_38(m, d) m(2, 38, d) +# define BOOST_PP_REPEAT_1_40(m, d) BOOST_PP_REPEAT_1_39(m, d) m(2, 39, d) +# define BOOST_PP_REPEAT_1_41(m, d) BOOST_PP_REPEAT_1_40(m, d) m(2, 40, d) +# define BOOST_PP_REPEAT_1_42(m, d) BOOST_PP_REPEAT_1_41(m, d) m(2, 41, d) +# define BOOST_PP_REPEAT_1_43(m, d) BOOST_PP_REPEAT_1_42(m, d) m(2, 42, d) +# define BOOST_PP_REPEAT_1_44(m, d) BOOST_PP_REPEAT_1_43(m, d) m(2, 43, d) +# define BOOST_PP_REPEAT_1_45(m, d) BOOST_PP_REPEAT_1_44(m, d) m(2, 44, d) +# define BOOST_PP_REPEAT_1_46(m, d) BOOST_PP_REPEAT_1_45(m, d) m(2, 45, d) +# define BOOST_PP_REPEAT_1_47(m, d) BOOST_PP_REPEAT_1_46(m, d) m(2, 46, d) +# define BOOST_PP_REPEAT_1_48(m, d) BOOST_PP_REPEAT_1_47(m, d) m(2, 47, d) +# define BOOST_PP_REPEAT_1_49(m, d) BOOST_PP_REPEAT_1_48(m, d) m(2, 48, d) +# define BOOST_PP_REPEAT_1_50(m, d) BOOST_PP_REPEAT_1_49(m, d) m(2, 49, d) +# define BOOST_PP_REPEAT_1_51(m, d) BOOST_PP_REPEAT_1_50(m, d) m(2, 50, d) +# define BOOST_PP_REPEAT_1_52(m, d) BOOST_PP_REPEAT_1_51(m, d) m(2, 51, d) +# define BOOST_PP_REPEAT_1_53(m, d) BOOST_PP_REPEAT_1_52(m, d) m(2, 52, d) +# define BOOST_PP_REPEAT_1_54(m, d) BOOST_PP_REPEAT_1_53(m, d) m(2, 53, d) +# define BOOST_PP_REPEAT_1_55(m, d) BOOST_PP_REPEAT_1_54(m, d) m(2, 54, d) +# define BOOST_PP_REPEAT_1_56(m, d) BOOST_PP_REPEAT_1_55(m, d) m(2, 55, d) +# define BOOST_PP_REPEAT_1_57(m, d) BOOST_PP_REPEAT_1_56(m, d) m(2, 56, d) +# define BOOST_PP_REPEAT_1_58(m, d) BOOST_PP_REPEAT_1_57(m, d) m(2, 57, d) +# define BOOST_PP_REPEAT_1_59(m, d) BOOST_PP_REPEAT_1_58(m, d) m(2, 58, d) +# define BOOST_PP_REPEAT_1_60(m, d) BOOST_PP_REPEAT_1_59(m, d) m(2, 59, d) +# define BOOST_PP_REPEAT_1_61(m, d) BOOST_PP_REPEAT_1_60(m, d) m(2, 60, d) +# define BOOST_PP_REPEAT_1_62(m, d) BOOST_PP_REPEAT_1_61(m, d) m(2, 61, d) +# define BOOST_PP_REPEAT_1_63(m, d) BOOST_PP_REPEAT_1_62(m, d) m(2, 62, d) +# define BOOST_PP_REPEAT_1_64(m, d) BOOST_PP_REPEAT_1_63(m, d) m(2, 63, d) +# define BOOST_PP_REPEAT_1_65(m, d) BOOST_PP_REPEAT_1_64(m, d) m(2, 64, d) +# define BOOST_PP_REPEAT_1_66(m, d) BOOST_PP_REPEAT_1_65(m, d) m(2, 65, d) +# define BOOST_PP_REPEAT_1_67(m, d) BOOST_PP_REPEAT_1_66(m, d) m(2, 66, d) +# define BOOST_PP_REPEAT_1_68(m, d) BOOST_PP_REPEAT_1_67(m, d) m(2, 67, d) +# define BOOST_PP_REPEAT_1_69(m, d) BOOST_PP_REPEAT_1_68(m, d) m(2, 68, d) +# define BOOST_PP_REPEAT_1_70(m, d) BOOST_PP_REPEAT_1_69(m, d) m(2, 69, d) +# define BOOST_PP_REPEAT_1_71(m, d) BOOST_PP_REPEAT_1_70(m, d) m(2, 70, d) +# define BOOST_PP_REPEAT_1_72(m, d) BOOST_PP_REPEAT_1_71(m, d) m(2, 71, d) +# define BOOST_PP_REPEAT_1_73(m, d) BOOST_PP_REPEAT_1_72(m, d) m(2, 72, d) +# define BOOST_PP_REPEAT_1_74(m, d) BOOST_PP_REPEAT_1_73(m, d) m(2, 73, d) +# define BOOST_PP_REPEAT_1_75(m, d) BOOST_PP_REPEAT_1_74(m, d) m(2, 74, d) +# define BOOST_PP_REPEAT_1_76(m, d) BOOST_PP_REPEAT_1_75(m, d) m(2, 75, d) +# define BOOST_PP_REPEAT_1_77(m, d) BOOST_PP_REPEAT_1_76(m, d) m(2, 76, d) +# define BOOST_PP_REPEAT_1_78(m, d) BOOST_PP_REPEAT_1_77(m, d) m(2, 77, d) +# define BOOST_PP_REPEAT_1_79(m, d) BOOST_PP_REPEAT_1_78(m, d) m(2, 78, d) +# define BOOST_PP_REPEAT_1_80(m, d) BOOST_PP_REPEAT_1_79(m, d) m(2, 79, d) +# define BOOST_PP_REPEAT_1_81(m, d) BOOST_PP_REPEAT_1_80(m, d) m(2, 80, d) +# define BOOST_PP_REPEAT_1_82(m, d) BOOST_PP_REPEAT_1_81(m, d) m(2, 81, d) +# define BOOST_PP_REPEAT_1_83(m, d) BOOST_PP_REPEAT_1_82(m, d) m(2, 82, d) +# define BOOST_PP_REPEAT_1_84(m, d) BOOST_PP_REPEAT_1_83(m, d) m(2, 83, d) +# define BOOST_PP_REPEAT_1_85(m, d) BOOST_PP_REPEAT_1_84(m, d) m(2, 84, d) +# define BOOST_PP_REPEAT_1_86(m, d) BOOST_PP_REPEAT_1_85(m, d) m(2, 85, d) +# define BOOST_PP_REPEAT_1_87(m, d) BOOST_PP_REPEAT_1_86(m, d) m(2, 86, d) +# define BOOST_PP_REPEAT_1_88(m, d) BOOST_PP_REPEAT_1_87(m, d) m(2, 87, d) +# define BOOST_PP_REPEAT_1_89(m, d) BOOST_PP_REPEAT_1_88(m, d) m(2, 88, d) +# define BOOST_PP_REPEAT_1_90(m, d) BOOST_PP_REPEAT_1_89(m, d) m(2, 89, d) +# define BOOST_PP_REPEAT_1_91(m, d) BOOST_PP_REPEAT_1_90(m, d) m(2, 90, d) +# define BOOST_PP_REPEAT_1_92(m, d) BOOST_PP_REPEAT_1_91(m, d) m(2, 91, d) +# define BOOST_PP_REPEAT_1_93(m, d) BOOST_PP_REPEAT_1_92(m, d) m(2, 92, d) +# define BOOST_PP_REPEAT_1_94(m, d) BOOST_PP_REPEAT_1_93(m, d) m(2, 93, d) +# define BOOST_PP_REPEAT_1_95(m, d) BOOST_PP_REPEAT_1_94(m, d) m(2, 94, d) +# define BOOST_PP_REPEAT_1_96(m, d) BOOST_PP_REPEAT_1_95(m, d) m(2, 95, d) +# define BOOST_PP_REPEAT_1_97(m, d) BOOST_PP_REPEAT_1_96(m, d) m(2, 96, d) +# define BOOST_PP_REPEAT_1_98(m, d) BOOST_PP_REPEAT_1_97(m, d) m(2, 97, d) +# define BOOST_PP_REPEAT_1_99(m, d) BOOST_PP_REPEAT_1_98(m, d) m(2, 98, d) +# define BOOST_PP_REPEAT_1_100(m, d) BOOST_PP_REPEAT_1_99(m, d) m(2, 99, d) +# define BOOST_PP_REPEAT_1_101(m, d) BOOST_PP_REPEAT_1_100(m, d) m(2, 100, d) +# define BOOST_PP_REPEAT_1_102(m, d) BOOST_PP_REPEAT_1_101(m, d) m(2, 101, d) +# define BOOST_PP_REPEAT_1_103(m, d) BOOST_PP_REPEAT_1_102(m, d) m(2, 102, d) +# define BOOST_PP_REPEAT_1_104(m, d) BOOST_PP_REPEAT_1_103(m, d) m(2, 103, d) +# define BOOST_PP_REPEAT_1_105(m, d) BOOST_PP_REPEAT_1_104(m, d) m(2, 104, d) +# define BOOST_PP_REPEAT_1_106(m, d) BOOST_PP_REPEAT_1_105(m, d) m(2, 105, d) +# define BOOST_PP_REPEAT_1_107(m, d) BOOST_PP_REPEAT_1_106(m, d) m(2, 106, d) +# define BOOST_PP_REPEAT_1_108(m, d) BOOST_PP_REPEAT_1_107(m, d) m(2, 107, d) +# define BOOST_PP_REPEAT_1_109(m, d) BOOST_PP_REPEAT_1_108(m, d) m(2, 108, d) +# define BOOST_PP_REPEAT_1_110(m, d) BOOST_PP_REPEAT_1_109(m, d) m(2, 109, d) +# define BOOST_PP_REPEAT_1_111(m, d) BOOST_PP_REPEAT_1_110(m, d) m(2, 110, d) +# define BOOST_PP_REPEAT_1_112(m, d) BOOST_PP_REPEAT_1_111(m, d) m(2, 111, d) +# define BOOST_PP_REPEAT_1_113(m, d) BOOST_PP_REPEAT_1_112(m, d) m(2, 112, d) +# define BOOST_PP_REPEAT_1_114(m, d) BOOST_PP_REPEAT_1_113(m, d) m(2, 113, d) +# define BOOST_PP_REPEAT_1_115(m, d) BOOST_PP_REPEAT_1_114(m, d) m(2, 114, d) +# define BOOST_PP_REPEAT_1_116(m, d) BOOST_PP_REPEAT_1_115(m, d) m(2, 115, d) +# define BOOST_PP_REPEAT_1_117(m, d) BOOST_PP_REPEAT_1_116(m, d) m(2, 116, d) +# define BOOST_PP_REPEAT_1_118(m, d) BOOST_PP_REPEAT_1_117(m, d) m(2, 117, d) +# define BOOST_PP_REPEAT_1_119(m, d) BOOST_PP_REPEAT_1_118(m, d) m(2, 118, d) +# define BOOST_PP_REPEAT_1_120(m, d) BOOST_PP_REPEAT_1_119(m, d) m(2, 119, d) +# define BOOST_PP_REPEAT_1_121(m, d) BOOST_PP_REPEAT_1_120(m, d) m(2, 120, d) +# define BOOST_PP_REPEAT_1_122(m, d) BOOST_PP_REPEAT_1_121(m, d) m(2, 121, d) +# define BOOST_PP_REPEAT_1_123(m, d) BOOST_PP_REPEAT_1_122(m, d) m(2, 122, d) +# define BOOST_PP_REPEAT_1_124(m, d) BOOST_PP_REPEAT_1_123(m, d) m(2, 123, d) +# define BOOST_PP_REPEAT_1_125(m, d) BOOST_PP_REPEAT_1_124(m, d) m(2, 124, d) +# define BOOST_PP_REPEAT_1_126(m, d) BOOST_PP_REPEAT_1_125(m, d) m(2, 125, d) +# define BOOST_PP_REPEAT_1_127(m, d) BOOST_PP_REPEAT_1_126(m, d) m(2, 126, d) +# define BOOST_PP_REPEAT_1_128(m, d) BOOST_PP_REPEAT_1_127(m, d) m(2, 127, d) +# define BOOST_PP_REPEAT_1_129(m, d) BOOST_PP_REPEAT_1_128(m, d) m(2, 128, d) +# define BOOST_PP_REPEAT_1_130(m, d) BOOST_PP_REPEAT_1_129(m, d) m(2, 129, d) +# define BOOST_PP_REPEAT_1_131(m, d) BOOST_PP_REPEAT_1_130(m, d) m(2, 130, d) +# define BOOST_PP_REPEAT_1_132(m, d) BOOST_PP_REPEAT_1_131(m, d) m(2, 131, d) +# define BOOST_PP_REPEAT_1_133(m, d) BOOST_PP_REPEAT_1_132(m, d) m(2, 132, d) +# define BOOST_PP_REPEAT_1_134(m, d) BOOST_PP_REPEAT_1_133(m, d) m(2, 133, d) +# define BOOST_PP_REPEAT_1_135(m, d) BOOST_PP_REPEAT_1_134(m, d) m(2, 134, d) +# define BOOST_PP_REPEAT_1_136(m, d) BOOST_PP_REPEAT_1_135(m, d) m(2, 135, d) +# define BOOST_PP_REPEAT_1_137(m, d) BOOST_PP_REPEAT_1_136(m, d) m(2, 136, d) +# define BOOST_PP_REPEAT_1_138(m, d) BOOST_PP_REPEAT_1_137(m, d) m(2, 137, d) +# define BOOST_PP_REPEAT_1_139(m, d) BOOST_PP_REPEAT_1_138(m, d) m(2, 138, d) +# define BOOST_PP_REPEAT_1_140(m, d) BOOST_PP_REPEAT_1_139(m, d) m(2, 139, d) +# define BOOST_PP_REPEAT_1_141(m, d) BOOST_PP_REPEAT_1_140(m, d) m(2, 140, d) +# define BOOST_PP_REPEAT_1_142(m, d) BOOST_PP_REPEAT_1_141(m, d) m(2, 141, d) +# define BOOST_PP_REPEAT_1_143(m, d) BOOST_PP_REPEAT_1_142(m, d) m(2, 142, d) +# define BOOST_PP_REPEAT_1_144(m, d) BOOST_PP_REPEAT_1_143(m, d) m(2, 143, d) +# define BOOST_PP_REPEAT_1_145(m, d) BOOST_PP_REPEAT_1_144(m, d) m(2, 144, d) +# define BOOST_PP_REPEAT_1_146(m, d) BOOST_PP_REPEAT_1_145(m, d) m(2, 145, d) +# define BOOST_PP_REPEAT_1_147(m, d) BOOST_PP_REPEAT_1_146(m, d) m(2, 146, d) +# define BOOST_PP_REPEAT_1_148(m, d) BOOST_PP_REPEAT_1_147(m, d) m(2, 147, d) +# define BOOST_PP_REPEAT_1_149(m, d) BOOST_PP_REPEAT_1_148(m, d) m(2, 148, d) +# define BOOST_PP_REPEAT_1_150(m, d) BOOST_PP_REPEAT_1_149(m, d) m(2, 149, d) +# define BOOST_PP_REPEAT_1_151(m, d) BOOST_PP_REPEAT_1_150(m, d) m(2, 150, d) +# define BOOST_PP_REPEAT_1_152(m, d) BOOST_PP_REPEAT_1_151(m, d) m(2, 151, d) +# define BOOST_PP_REPEAT_1_153(m, d) BOOST_PP_REPEAT_1_152(m, d) m(2, 152, d) +# define BOOST_PP_REPEAT_1_154(m, d) BOOST_PP_REPEAT_1_153(m, d) m(2, 153, d) +# define BOOST_PP_REPEAT_1_155(m, d) BOOST_PP_REPEAT_1_154(m, d) m(2, 154, d) +# define BOOST_PP_REPEAT_1_156(m, d) BOOST_PP_REPEAT_1_155(m, d) m(2, 155, d) +# define BOOST_PP_REPEAT_1_157(m, d) BOOST_PP_REPEAT_1_156(m, d) m(2, 156, d) +# define BOOST_PP_REPEAT_1_158(m, d) BOOST_PP_REPEAT_1_157(m, d) m(2, 157, d) +# define BOOST_PP_REPEAT_1_159(m, d) BOOST_PP_REPEAT_1_158(m, d) m(2, 158, d) +# define BOOST_PP_REPEAT_1_160(m, d) BOOST_PP_REPEAT_1_159(m, d) m(2, 159, d) +# define BOOST_PP_REPEAT_1_161(m, d) BOOST_PP_REPEAT_1_160(m, d) m(2, 160, d) +# define BOOST_PP_REPEAT_1_162(m, d) BOOST_PP_REPEAT_1_161(m, d) m(2, 161, d) +# define BOOST_PP_REPEAT_1_163(m, d) BOOST_PP_REPEAT_1_162(m, d) m(2, 162, d) +# define BOOST_PP_REPEAT_1_164(m, d) BOOST_PP_REPEAT_1_163(m, d) m(2, 163, d) +# define BOOST_PP_REPEAT_1_165(m, d) BOOST_PP_REPEAT_1_164(m, d) m(2, 164, d) +# define BOOST_PP_REPEAT_1_166(m, d) BOOST_PP_REPEAT_1_165(m, d) m(2, 165, d) +# define BOOST_PP_REPEAT_1_167(m, d) BOOST_PP_REPEAT_1_166(m, d) m(2, 166, d) +# define BOOST_PP_REPEAT_1_168(m, d) BOOST_PP_REPEAT_1_167(m, d) m(2, 167, d) +# define BOOST_PP_REPEAT_1_169(m, d) BOOST_PP_REPEAT_1_168(m, d) m(2, 168, d) +# define BOOST_PP_REPEAT_1_170(m, d) BOOST_PP_REPEAT_1_169(m, d) m(2, 169, d) +# define BOOST_PP_REPEAT_1_171(m, d) BOOST_PP_REPEAT_1_170(m, d) m(2, 170, d) +# define BOOST_PP_REPEAT_1_172(m, d) BOOST_PP_REPEAT_1_171(m, d) m(2, 171, d) +# define BOOST_PP_REPEAT_1_173(m, d) BOOST_PP_REPEAT_1_172(m, d) m(2, 172, d) +# define BOOST_PP_REPEAT_1_174(m, d) BOOST_PP_REPEAT_1_173(m, d) m(2, 173, d) +# define BOOST_PP_REPEAT_1_175(m, d) BOOST_PP_REPEAT_1_174(m, d) m(2, 174, d) +# define BOOST_PP_REPEAT_1_176(m, d) BOOST_PP_REPEAT_1_175(m, d) m(2, 175, d) +# define BOOST_PP_REPEAT_1_177(m, d) BOOST_PP_REPEAT_1_176(m, d) m(2, 176, d) +# define BOOST_PP_REPEAT_1_178(m, d) BOOST_PP_REPEAT_1_177(m, d) m(2, 177, d) +# define BOOST_PP_REPEAT_1_179(m, d) BOOST_PP_REPEAT_1_178(m, d) m(2, 178, d) +# define BOOST_PP_REPEAT_1_180(m, d) BOOST_PP_REPEAT_1_179(m, d) m(2, 179, d) +# define BOOST_PP_REPEAT_1_181(m, d) BOOST_PP_REPEAT_1_180(m, d) m(2, 180, d) +# define BOOST_PP_REPEAT_1_182(m, d) BOOST_PP_REPEAT_1_181(m, d) m(2, 181, d) +# define BOOST_PP_REPEAT_1_183(m, d) BOOST_PP_REPEAT_1_182(m, d) m(2, 182, d) +# define BOOST_PP_REPEAT_1_184(m, d) BOOST_PP_REPEAT_1_183(m, d) m(2, 183, d) +# define BOOST_PP_REPEAT_1_185(m, d) BOOST_PP_REPEAT_1_184(m, d) m(2, 184, d) +# define BOOST_PP_REPEAT_1_186(m, d) BOOST_PP_REPEAT_1_185(m, d) m(2, 185, d) +# define BOOST_PP_REPEAT_1_187(m, d) BOOST_PP_REPEAT_1_186(m, d) m(2, 186, d) +# define BOOST_PP_REPEAT_1_188(m, d) BOOST_PP_REPEAT_1_187(m, d) m(2, 187, d) +# define BOOST_PP_REPEAT_1_189(m, d) BOOST_PP_REPEAT_1_188(m, d) m(2, 188, d) +# define BOOST_PP_REPEAT_1_190(m, d) BOOST_PP_REPEAT_1_189(m, d) m(2, 189, d) +# define BOOST_PP_REPEAT_1_191(m, d) BOOST_PP_REPEAT_1_190(m, d) m(2, 190, d) +# define BOOST_PP_REPEAT_1_192(m, d) BOOST_PP_REPEAT_1_191(m, d) m(2, 191, d) +# define BOOST_PP_REPEAT_1_193(m, d) BOOST_PP_REPEAT_1_192(m, d) m(2, 192, d) +# define BOOST_PP_REPEAT_1_194(m, d) BOOST_PP_REPEAT_1_193(m, d) m(2, 193, d) +# define BOOST_PP_REPEAT_1_195(m, d) BOOST_PP_REPEAT_1_194(m, d) m(2, 194, d) +# define BOOST_PP_REPEAT_1_196(m, d) BOOST_PP_REPEAT_1_195(m, d) m(2, 195, d) +# define BOOST_PP_REPEAT_1_197(m, d) BOOST_PP_REPEAT_1_196(m, d) m(2, 196, d) +# define BOOST_PP_REPEAT_1_198(m, d) BOOST_PP_REPEAT_1_197(m, d) m(2, 197, d) +# define BOOST_PP_REPEAT_1_199(m, d) BOOST_PP_REPEAT_1_198(m, d) m(2, 198, d) +# define BOOST_PP_REPEAT_1_200(m, d) BOOST_PP_REPEAT_1_199(m, d) m(2, 199, d) +# define BOOST_PP_REPEAT_1_201(m, d) BOOST_PP_REPEAT_1_200(m, d) m(2, 200, d) +# define BOOST_PP_REPEAT_1_202(m, d) BOOST_PP_REPEAT_1_201(m, d) m(2, 201, d) +# define BOOST_PP_REPEAT_1_203(m, d) BOOST_PP_REPEAT_1_202(m, d) m(2, 202, d) +# define BOOST_PP_REPEAT_1_204(m, d) BOOST_PP_REPEAT_1_203(m, d) m(2, 203, d) +# define BOOST_PP_REPEAT_1_205(m, d) BOOST_PP_REPEAT_1_204(m, d) m(2, 204, d) +# define BOOST_PP_REPEAT_1_206(m, d) BOOST_PP_REPEAT_1_205(m, d) m(2, 205, d) +# define BOOST_PP_REPEAT_1_207(m, d) BOOST_PP_REPEAT_1_206(m, d) m(2, 206, d) +# define BOOST_PP_REPEAT_1_208(m, d) BOOST_PP_REPEAT_1_207(m, d) m(2, 207, d) +# define BOOST_PP_REPEAT_1_209(m, d) BOOST_PP_REPEAT_1_208(m, d) m(2, 208, d) +# define BOOST_PP_REPEAT_1_210(m, d) BOOST_PP_REPEAT_1_209(m, d) m(2, 209, d) +# define BOOST_PP_REPEAT_1_211(m, d) BOOST_PP_REPEAT_1_210(m, d) m(2, 210, d) +# define BOOST_PP_REPEAT_1_212(m, d) BOOST_PP_REPEAT_1_211(m, d) m(2, 211, d) +# define BOOST_PP_REPEAT_1_213(m, d) BOOST_PP_REPEAT_1_212(m, d) m(2, 212, d) +# define BOOST_PP_REPEAT_1_214(m, d) BOOST_PP_REPEAT_1_213(m, d) m(2, 213, d) +# define BOOST_PP_REPEAT_1_215(m, d) BOOST_PP_REPEAT_1_214(m, d) m(2, 214, d) +# define BOOST_PP_REPEAT_1_216(m, d) BOOST_PP_REPEAT_1_215(m, d) m(2, 215, d) +# define BOOST_PP_REPEAT_1_217(m, d) BOOST_PP_REPEAT_1_216(m, d) m(2, 216, d) +# define BOOST_PP_REPEAT_1_218(m, d) BOOST_PP_REPEAT_1_217(m, d) m(2, 217, d) +# define BOOST_PP_REPEAT_1_219(m, d) BOOST_PP_REPEAT_1_218(m, d) m(2, 218, d) +# define BOOST_PP_REPEAT_1_220(m, d) BOOST_PP_REPEAT_1_219(m, d) m(2, 219, d) +# define BOOST_PP_REPEAT_1_221(m, d) BOOST_PP_REPEAT_1_220(m, d) m(2, 220, d) +# define BOOST_PP_REPEAT_1_222(m, d) BOOST_PP_REPEAT_1_221(m, d) m(2, 221, d) +# define BOOST_PP_REPEAT_1_223(m, d) BOOST_PP_REPEAT_1_222(m, d) m(2, 222, d) +# define BOOST_PP_REPEAT_1_224(m, d) BOOST_PP_REPEAT_1_223(m, d) m(2, 223, d) +# define BOOST_PP_REPEAT_1_225(m, d) BOOST_PP_REPEAT_1_224(m, d) m(2, 224, d) +# define BOOST_PP_REPEAT_1_226(m, d) BOOST_PP_REPEAT_1_225(m, d) m(2, 225, d) +# define BOOST_PP_REPEAT_1_227(m, d) BOOST_PP_REPEAT_1_226(m, d) m(2, 226, d) +# define BOOST_PP_REPEAT_1_228(m, d) BOOST_PP_REPEAT_1_227(m, d) m(2, 227, d) +# define BOOST_PP_REPEAT_1_229(m, d) BOOST_PP_REPEAT_1_228(m, d) m(2, 228, d) +# define BOOST_PP_REPEAT_1_230(m, d) BOOST_PP_REPEAT_1_229(m, d) m(2, 229, d) +# define BOOST_PP_REPEAT_1_231(m, d) BOOST_PP_REPEAT_1_230(m, d) m(2, 230, d) +# define BOOST_PP_REPEAT_1_232(m, d) BOOST_PP_REPEAT_1_231(m, d) m(2, 231, d) +# define BOOST_PP_REPEAT_1_233(m, d) BOOST_PP_REPEAT_1_232(m, d) m(2, 232, d) +# define BOOST_PP_REPEAT_1_234(m, d) BOOST_PP_REPEAT_1_233(m, d) m(2, 233, d) +# define BOOST_PP_REPEAT_1_235(m, d) BOOST_PP_REPEAT_1_234(m, d) m(2, 234, d) +# define BOOST_PP_REPEAT_1_236(m, d) BOOST_PP_REPEAT_1_235(m, d) m(2, 235, d) +# define BOOST_PP_REPEAT_1_237(m, d) BOOST_PP_REPEAT_1_236(m, d) m(2, 236, d) +# define BOOST_PP_REPEAT_1_238(m, d) BOOST_PP_REPEAT_1_237(m, d) m(2, 237, d) +# define BOOST_PP_REPEAT_1_239(m, d) BOOST_PP_REPEAT_1_238(m, d) m(2, 238, d) +# define BOOST_PP_REPEAT_1_240(m, d) BOOST_PP_REPEAT_1_239(m, d) m(2, 239, d) +# define BOOST_PP_REPEAT_1_241(m, d) BOOST_PP_REPEAT_1_240(m, d) m(2, 240, d) +# define BOOST_PP_REPEAT_1_242(m, d) BOOST_PP_REPEAT_1_241(m, d) m(2, 241, d) +# define BOOST_PP_REPEAT_1_243(m, d) BOOST_PP_REPEAT_1_242(m, d) m(2, 242, d) +# define BOOST_PP_REPEAT_1_244(m, d) BOOST_PP_REPEAT_1_243(m, d) m(2, 243, d) +# define BOOST_PP_REPEAT_1_245(m, d) BOOST_PP_REPEAT_1_244(m, d) m(2, 244, d) +# define BOOST_PP_REPEAT_1_246(m, d) BOOST_PP_REPEAT_1_245(m, d) m(2, 245, d) +# define BOOST_PP_REPEAT_1_247(m, d) BOOST_PP_REPEAT_1_246(m, d) m(2, 246, d) +# define BOOST_PP_REPEAT_1_248(m, d) BOOST_PP_REPEAT_1_247(m, d) m(2, 247, d) +# define BOOST_PP_REPEAT_1_249(m, d) BOOST_PP_REPEAT_1_248(m, d) m(2, 248, d) +# define BOOST_PP_REPEAT_1_250(m, d) BOOST_PP_REPEAT_1_249(m, d) m(2, 249, d) +# define BOOST_PP_REPEAT_1_251(m, d) BOOST_PP_REPEAT_1_250(m, d) m(2, 250, d) +# define BOOST_PP_REPEAT_1_252(m, d) BOOST_PP_REPEAT_1_251(m, d) m(2, 251, d) +# define BOOST_PP_REPEAT_1_253(m, d) BOOST_PP_REPEAT_1_252(m, d) m(2, 252, d) +# define BOOST_PP_REPEAT_1_254(m, d) BOOST_PP_REPEAT_1_253(m, d) m(2, 253, d) +# define BOOST_PP_REPEAT_1_255(m, d) BOOST_PP_REPEAT_1_254(m, d) m(2, 254, d) +# define BOOST_PP_REPEAT_1_256(m, d) BOOST_PP_REPEAT_1_255(m, d) m(2, 255, d) +# +# define BOOST_PP_REPEAT_2_0(m, d) +# define BOOST_PP_REPEAT_2_1(m, d) m(3, 0, d) +# define BOOST_PP_REPEAT_2_2(m, d) BOOST_PP_REPEAT_2_1(m, d) m(3, 1, d) +# define BOOST_PP_REPEAT_2_3(m, d) BOOST_PP_REPEAT_2_2(m, d) m(3, 2, d) +# define BOOST_PP_REPEAT_2_4(m, d) BOOST_PP_REPEAT_2_3(m, d) m(3, 3, d) +# define BOOST_PP_REPEAT_2_5(m, d) BOOST_PP_REPEAT_2_4(m, d) m(3, 4, d) +# define BOOST_PP_REPEAT_2_6(m, d) BOOST_PP_REPEAT_2_5(m, d) m(3, 5, d) +# define BOOST_PP_REPEAT_2_7(m, d) BOOST_PP_REPEAT_2_6(m, d) m(3, 6, d) +# define BOOST_PP_REPEAT_2_8(m, d) BOOST_PP_REPEAT_2_7(m, d) m(3, 7, d) +# define BOOST_PP_REPEAT_2_9(m, d) BOOST_PP_REPEAT_2_8(m, d) m(3, 8, d) +# define BOOST_PP_REPEAT_2_10(m, d) BOOST_PP_REPEAT_2_9(m, d) m(3, 9, d) +# define BOOST_PP_REPEAT_2_11(m, d) BOOST_PP_REPEAT_2_10(m, d) m(3, 10, d) +# define BOOST_PP_REPEAT_2_12(m, d) BOOST_PP_REPEAT_2_11(m, d) m(3, 11, d) +# define BOOST_PP_REPEAT_2_13(m, d) BOOST_PP_REPEAT_2_12(m, d) m(3, 12, d) +# define BOOST_PP_REPEAT_2_14(m, d) BOOST_PP_REPEAT_2_13(m, d) m(3, 13, d) +# define BOOST_PP_REPEAT_2_15(m, d) BOOST_PP_REPEAT_2_14(m, d) m(3, 14, d) +# define BOOST_PP_REPEAT_2_16(m, d) BOOST_PP_REPEAT_2_15(m, d) m(3, 15, d) +# define BOOST_PP_REPEAT_2_17(m, d) BOOST_PP_REPEAT_2_16(m, d) m(3, 16, d) +# define BOOST_PP_REPEAT_2_18(m, d) BOOST_PP_REPEAT_2_17(m, d) m(3, 17, d) +# define BOOST_PP_REPEAT_2_19(m, d) BOOST_PP_REPEAT_2_18(m, d) m(3, 18, d) +# define BOOST_PP_REPEAT_2_20(m, d) BOOST_PP_REPEAT_2_19(m, d) m(3, 19, d) +# define BOOST_PP_REPEAT_2_21(m, d) BOOST_PP_REPEAT_2_20(m, d) m(3, 20, d) +# define BOOST_PP_REPEAT_2_22(m, d) BOOST_PP_REPEAT_2_21(m, d) m(3, 21, d) +# define BOOST_PP_REPEAT_2_23(m, d) BOOST_PP_REPEAT_2_22(m, d) m(3, 22, d) +# define BOOST_PP_REPEAT_2_24(m, d) BOOST_PP_REPEAT_2_23(m, d) m(3, 23, d) +# define BOOST_PP_REPEAT_2_25(m, d) BOOST_PP_REPEAT_2_24(m, d) m(3, 24, d) +# define BOOST_PP_REPEAT_2_26(m, d) BOOST_PP_REPEAT_2_25(m, d) m(3, 25, d) +# define BOOST_PP_REPEAT_2_27(m, d) BOOST_PP_REPEAT_2_26(m, d) m(3, 26, d) +# define BOOST_PP_REPEAT_2_28(m, d) BOOST_PP_REPEAT_2_27(m, d) m(3, 27, d) +# define BOOST_PP_REPEAT_2_29(m, d) BOOST_PP_REPEAT_2_28(m, d) m(3, 28, d) +# define BOOST_PP_REPEAT_2_30(m, d) BOOST_PP_REPEAT_2_29(m, d) m(3, 29, d) +# define BOOST_PP_REPEAT_2_31(m, d) BOOST_PP_REPEAT_2_30(m, d) m(3, 30, d) +# define BOOST_PP_REPEAT_2_32(m, d) BOOST_PP_REPEAT_2_31(m, d) m(3, 31, d) +# define BOOST_PP_REPEAT_2_33(m, d) BOOST_PP_REPEAT_2_32(m, d) m(3, 32, d) +# define BOOST_PP_REPEAT_2_34(m, d) BOOST_PP_REPEAT_2_33(m, d) m(3, 33, d) +# define BOOST_PP_REPEAT_2_35(m, d) BOOST_PP_REPEAT_2_34(m, d) m(3, 34, d) +# define BOOST_PP_REPEAT_2_36(m, d) BOOST_PP_REPEAT_2_35(m, d) m(3, 35, d) +# define BOOST_PP_REPEAT_2_37(m, d) BOOST_PP_REPEAT_2_36(m, d) m(3, 36, d) +# define BOOST_PP_REPEAT_2_38(m, d) BOOST_PP_REPEAT_2_37(m, d) m(3, 37, d) +# define BOOST_PP_REPEAT_2_39(m, d) BOOST_PP_REPEAT_2_38(m, d) m(3, 38, d) +# define BOOST_PP_REPEAT_2_40(m, d) BOOST_PP_REPEAT_2_39(m, d) m(3, 39, d) +# define BOOST_PP_REPEAT_2_41(m, d) BOOST_PP_REPEAT_2_40(m, d) m(3, 40, d) +# define BOOST_PP_REPEAT_2_42(m, d) BOOST_PP_REPEAT_2_41(m, d) m(3, 41, d) +# define BOOST_PP_REPEAT_2_43(m, d) BOOST_PP_REPEAT_2_42(m, d) m(3, 42, d) +# define BOOST_PP_REPEAT_2_44(m, d) BOOST_PP_REPEAT_2_43(m, d) m(3, 43, d) +# define BOOST_PP_REPEAT_2_45(m, d) BOOST_PP_REPEAT_2_44(m, d) m(3, 44, d) +# define BOOST_PP_REPEAT_2_46(m, d) BOOST_PP_REPEAT_2_45(m, d) m(3, 45, d) +# define BOOST_PP_REPEAT_2_47(m, d) BOOST_PP_REPEAT_2_46(m, d) m(3, 46, d) +# define BOOST_PP_REPEAT_2_48(m, d) BOOST_PP_REPEAT_2_47(m, d) m(3, 47, d) +# define BOOST_PP_REPEAT_2_49(m, d) BOOST_PP_REPEAT_2_48(m, d) m(3, 48, d) +# define BOOST_PP_REPEAT_2_50(m, d) BOOST_PP_REPEAT_2_49(m, d) m(3, 49, d) +# define BOOST_PP_REPEAT_2_51(m, d) BOOST_PP_REPEAT_2_50(m, d) m(3, 50, d) +# define BOOST_PP_REPEAT_2_52(m, d) BOOST_PP_REPEAT_2_51(m, d) m(3, 51, d) +# define BOOST_PP_REPEAT_2_53(m, d) BOOST_PP_REPEAT_2_52(m, d) m(3, 52, d) +# define BOOST_PP_REPEAT_2_54(m, d) BOOST_PP_REPEAT_2_53(m, d) m(3, 53, d) +# define BOOST_PP_REPEAT_2_55(m, d) BOOST_PP_REPEAT_2_54(m, d) m(3, 54, d) +# define BOOST_PP_REPEAT_2_56(m, d) BOOST_PP_REPEAT_2_55(m, d) m(3, 55, d) +# define BOOST_PP_REPEAT_2_57(m, d) BOOST_PP_REPEAT_2_56(m, d) m(3, 56, d) +# define BOOST_PP_REPEAT_2_58(m, d) BOOST_PP_REPEAT_2_57(m, d) m(3, 57, d) +# define BOOST_PP_REPEAT_2_59(m, d) BOOST_PP_REPEAT_2_58(m, d) m(3, 58, d) +# define BOOST_PP_REPEAT_2_60(m, d) BOOST_PP_REPEAT_2_59(m, d) m(3, 59, d) +# define BOOST_PP_REPEAT_2_61(m, d) BOOST_PP_REPEAT_2_60(m, d) m(3, 60, d) +# define BOOST_PP_REPEAT_2_62(m, d) BOOST_PP_REPEAT_2_61(m, d) m(3, 61, d) +# define BOOST_PP_REPEAT_2_63(m, d) BOOST_PP_REPEAT_2_62(m, d) m(3, 62, d) +# define BOOST_PP_REPEAT_2_64(m, d) BOOST_PP_REPEAT_2_63(m, d) m(3, 63, d) +# define BOOST_PP_REPEAT_2_65(m, d) BOOST_PP_REPEAT_2_64(m, d) m(3, 64, d) +# define BOOST_PP_REPEAT_2_66(m, d) BOOST_PP_REPEAT_2_65(m, d) m(3, 65, d) +# define BOOST_PP_REPEAT_2_67(m, d) BOOST_PP_REPEAT_2_66(m, d) m(3, 66, d) +# define BOOST_PP_REPEAT_2_68(m, d) BOOST_PP_REPEAT_2_67(m, d) m(3, 67, d) +# define BOOST_PP_REPEAT_2_69(m, d) BOOST_PP_REPEAT_2_68(m, d) m(3, 68, d) +# define BOOST_PP_REPEAT_2_70(m, d) BOOST_PP_REPEAT_2_69(m, d) m(3, 69, d) +# define BOOST_PP_REPEAT_2_71(m, d) BOOST_PP_REPEAT_2_70(m, d) m(3, 70, d) +# define BOOST_PP_REPEAT_2_72(m, d) BOOST_PP_REPEAT_2_71(m, d) m(3, 71, d) +# define BOOST_PP_REPEAT_2_73(m, d) BOOST_PP_REPEAT_2_72(m, d) m(3, 72, d) +# define BOOST_PP_REPEAT_2_74(m, d) BOOST_PP_REPEAT_2_73(m, d) m(3, 73, d) +# define BOOST_PP_REPEAT_2_75(m, d) BOOST_PP_REPEAT_2_74(m, d) m(3, 74, d) +# define BOOST_PP_REPEAT_2_76(m, d) BOOST_PP_REPEAT_2_75(m, d) m(3, 75, d) +# define BOOST_PP_REPEAT_2_77(m, d) BOOST_PP_REPEAT_2_76(m, d) m(3, 76, d) +# define BOOST_PP_REPEAT_2_78(m, d) BOOST_PP_REPEAT_2_77(m, d) m(3, 77, d) +# define BOOST_PP_REPEAT_2_79(m, d) BOOST_PP_REPEAT_2_78(m, d) m(3, 78, d) +# define BOOST_PP_REPEAT_2_80(m, d) BOOST_PP_REPEAT_2_79(m, d) m(3, 79, d) +# define BOOST_PP_REPEAT_2_81(m, d) BOOST_PP_REPEAT_2_80(m, d) m(3, 80, d) +# define BOOST_PP_REPEAT_2_82(m, d) BOOST_PP_REPEAT_2_81(m, d) m(3, 81, d) +# define BOOST_PP_REPEAT_2_83(m, d) BOOST_PP_REPEAT_2_82(m, d) m(3, 82, d) +# define BOOST_PP_REPEAT_2_84(m, d) BOOST_PP_REPEAT_2_83(m, d) m(3, 83, d) +# define BOOST_PP_REPEAT_2_85(m, d) BOOST_PP_REPEAT_2_84(m, d) m(3, 84, d) +# define BOOST_PP_REPEAT_2_86(m, d) BOOST_PP_REPEAT_2_85(m, d) m(3, 85, d) +# define BOOST_PP_REPEAT_2_87(m, d) BOOST_PP_REPEAT_2_86(m, d) m(3, 86, d) +# define BOOST_PP_REPEAT_2_88(m, d) BOOST_PP_REPEAT_2_87(m, d) m(3, 87, d) +# define BOOST_PP_REPEAT_2_89(m, d) BOOST_PP_REPEAT_2_88(m, d) m(3, 88, d) +# define BOOST_PP_REPEAT_2_90(m, d) BOOST_PP_REPEAT_2_89(m, d) m(3, 89, d) +# define BOOST_PP_REPEAT_2_91(m, d) BOOST_PP_REPEAT_2_90(m, d) m(3, 90, d) +# define BOOST_PP_REPEAT_2_92(m, d) BOOST_PP_REPEAT_2_91(m, d) m(3, 91, d) +# define BOOST_PP_REPEAT_2_93(m, d) BOOST_PP_REPEAT_2_92(m, d) m(3, 92, d) +# define BOOST_PP_REPEAT_2_94(m, d) BOOST_PP_REPEAT_2_93(m, d) m(3, 93, d) +# define BOOST_PP_REPEAT_2_95(m, d) BOOST_PP_REPEAT_2_94(m, d) m(3, 94, d) +# define BOOST_PP_REPEAT_2_96(m, d) BOOST_PP_REPEAT_2_95(m, d) m(3, 95, d) +# define BOOST_PP_REPEAT_2_97(m, d) BOOST_PP_REPEAT_2_96(m, d) m(3, 96, d) +# define BOOST_PP_REPEAT_2_98(m, d) BOOST_PP_REPEAT_2_97(m, d) m(3, 97, d) +# define BOOST_PP_REPEAT_2_99(m, d) BOOST_PP_REPEAT_2_98(m, d) m(3, 98, d) +# define BOOST_PP_REPEAT_2_100(m, d) BOOST_PP_REPEAT_2_99(m, d) m(3, 99, d) +# define BOOST_PP_REPEAT_2_101(m, d) BOOST_PP_REPEAT_2_100(m, d) m(3, 100, d) +# define BOOST_PP_REPEAT_2_102(m, d) BOOST_PP_REPEAT_2_101(m, d) m(3, 101, d) +# define BOOST_PP_REPEAT_2_103(m, d) BOOST_PP_REPEAT_2_102(m, d) m(3, 102, d) +# define BOOST_PP_REPEAT_2_104(m, d) BOOST_PP_REPEAT_2_103(m, d) m(3, 103, d) +# define BOOST_PP_REPEAT_2_105(m, d) BOOST_PP_REPEAT_2_104(m, d) m(3, 104, d) +# define BOOST_PP_REPEAT_2_106(m, d) BOOST_PP_REPEAT_2_105(m, d) m(3, 105, d) +# define BOOST_PP_REPEAT_2_107(m, d) BOOST_PP_REPEAT_2_106(m, d) m(3, 106, d) +# define BOOST_PP_REPEAT_2_108(m, d) BOOST_PP_REPEAT_2_107(m, d) m(3, 107, d) +# define BOOST_PP_REPEAT_2_109(m, d) BOOST_PP_REPEAT_2_108(m, d) m(3, 108, d) +# define BOOST_PP_REPEAT_2_110(m, d) BOOST_PP_REPEAT_2_109(m, d) m(3, 109, d) +# define BOOST_PP_REPEAT_2_111(m, d) BOOST_PP_REPEAT_2_110(m, d) m(3, 110, d) +# define BOOST_PP_REPEAT_2_112(m, d) BOOST_PP_REPEAT_2_111(m, d) m(3, 111, d) +# define BOOST_PP_REPEAT_2_113(m, d) BOOST_PP_REPEAT_2_112(m, d) m(3, 112, d) +# define BOOST_PP_REPEAT_2_114(m, d) BOOST_PP_REPEAT_2_113(m, d) m(3, 113, d) +# define BOOST_PP_REPEAT_2_115(m, d) BOOST_PP_REPEAT_2_114(m, d) m(3, 114, d) +# define BOOST_PP_REPEAT_2_116(m, d) BOOST_PP_REPEAT_2_115(m, d) m(3, 115, d) +# define BOOST_PP_REPEAT_2_117(m, d) BOOST_PP_REPEAT_2_116(m, d) m(3, 116, d) +# define BOOST_PP_REPEAT_2_118(m, d) BOOST_PP_REPEAT_2_117(m, d) m(3, 117, d) +# define BOOST_PP_REPEAT_2_119(m, d) BOOST_PP_REPEAT_2_118(m, d) m(3, 118, d) +# define BOOST_PP_REPEAT_2_120(m, d) BOOST_PP_REPEAT_2_119(m, d) m(3, 119, d) +# define BOOST_PP_REPEAT_2_121(m, d) BOOST_PP_REPEAT_2_120(m, d) m(3, 120, d) +# define BOOST_PP_REPEAT_2_122(m, d) BOOST_PP_REPEAT_2_121(m, d) m(3, 121, d) +# define BOOST_PP_REPEAT_2_123(m, d) BOOST_PP_REPEAT_2_122(m, d) m(3, 122, d) +# define BOOST_PP_REPEAT_2_124(m, d) BOOST_PP_REPEAT_2_123(m, d) m(3, 123, d) +# define BOOST_PP_REPEAT_2_125(m, d) BOOST_PP_REPEAT_2_124(m, d) m(3, 124, d) +# define BOOST_PP_REPEAT_2_126(m, d) BOOST_PP_REPEAT_2_125(m, d) m(3, 125, d) +# define BOOST_PP_REPEAT_2_127(m, d) BOOST_PP_REPEAT_2_126(m, d) m(3, 126, d) +# define BOOST_PP_REPEAT_2_128(m, d) BOOST_PP_REPEAT_2_127(m, d) m(3, 127, d) +# define BOOST_PP_REPEAT_2_129(m, d) BOOST_PP_REPEAT_2_128(m, d) m(3, 128, d) +# define BOOST_PP_REPEAT_2_130(m, d) BOOST_PP_REPEAT_2_129(m, d) m(3, 129, d) +# define BOOST_PP_REPEAT_2_131(m, d) BOOST_PP_REPEAT_2_130(m, d) m(3, 130, d) +# define BOOST_PP_REPEAT_2_132(m, d) BOOST_PP_REPEAT_2_131(m, d) m(3, 131, d) +# define BOOST_PP_REPEAT_2_133(m, d) BOOST_PP_REPEAT_2_132(m, d) m(3, 132, d) +# define BOOST_PP_REPEAT_2_134(m, d) BOOST_PP_REPEAT_2_133(m, d) m(3, 133, d) +# define BOOST_PP_REPEAT_2_135(m, d) BOOST_PP_REPEAT_2_134(m, d) m(3, 134, d) +# define BOOST_PP_REPEAT_2_136(m, d) BOOST_PP_REPEAT_2_135(m, d) m(3, 135, d) +# define BOOST_PP_REPEAT_2_137(m, d) BOOST_PP_REPEAT_2_136(m, d) m(3, 136, d) +# define BOOST_PP_REPEAT_2_138(m, d) BOOST_PP_REPEAT_2_137(m, d) m(3, 137, d) +# define BOOST_PP_REPEAT_2_139(m, d) BOOST_PP_REPEAT_2_138(m, d) m(3, 138, d) +# define BOOST_PP_REPEAT_2_140(m, d) BOOST_PP_REPEAT_2_139(m, d) m(3, 139, d) +# define BOOST_PP_REPEAT_2_141(m, d) BOOST_PP_REPEAT_2_140(m, d) m(3, 140, d) +# define BOOST_PP_REPEAT_2_142(m, d) BOOST_PP_REPEAT_2_141(m, d) m(3, 141, d) +# define BOOST_PP_REPEAT_2_143(m, d) BOOST_PP_REPEAT_2_142(m, d) m(3, 142, d) +# define BOOST_PP_REPEAT_2_144(m, d) BOOST_PP_REPEAT_2_143(m, d) m(3, 143, d) +# define BOOST_PP_REPEAT_2_145(m, d) BOOST_PP_REPEAT_2_144(m, d) m(3, 144, d) +# define BOOST_PP_REPEAT_2_146(m, d) BOOST_PP_REPEAT_2_145(m, d) m(3, 145, d) +# define BOOST_PP_REPEAT_2_147(m, d) BOOST_PP_REPEAT_2_146(m, d) m(3, 146, d) +# define BOOST_PP_REPEAT_2_148(m, d) BOOST_PP_REPEAT_2_147(m, d) m(3, 147, d) +# define BOOST_PP_REPEAT_2_149(m, d) BOOST_PP_REPEAT_2_148(m, d) m(3, 148, d) +# define BOOST_PP_REPEAT_2_150(m, d) BOOST_PP_REPEAT_2_149(m, d) m(3, 149, d) +# define BOOST_PP_REPEAT_2_151(m, d) BOOST_PP_REPEAT_2_150(m, d) m(3, 150, d) +# define BOOST_PP_REPEAT_2_152(m, d) BOOST_PP_REPEAT_2_151(m, d) m(3, 151, d) +# define BOOST_PP_REPEAT_2_153(m, d) BOOST_PP_REPEAT_2_152(m, d) m(3, 152, d) +# define BOOST_PP_REPEAT_2_154(m, d) BOOST_PP_REPEAT_2_153(m, d) m(3, 153, d) +# define BOOST_PP_REPEAT_2_155(m, d) BOOST_PP_REPEAT_2_154(m, d) m(3, 154, d) +# define BOOST_PP_REPEAT_2_156(m, d) BOOST_PP_REPEAT_2_155(m, d) m(3, 155, d) +# define BOOST_PP_REPEAT_2_157(m, d) BOOST_PP_REPEAT_2_156(m, d) m(3, 156, d) +# define BOOST_PP_REPEAT_2_158(m, d) BOOST_PP_REPEAT_2_157(m, d) m(3, 157, d) +# define BOOST_PP_REPEAT_2_159(m, d) BOOST_PP_REPEAT_2_158(m, d) m(3, 158, d) +# define BOOST_PP_REPEAT_2_160(m, d) BOOST_PP_REPEAT_2_159(m, d) m(3, 159, d) +# define BOOST_PP_REPEAT_2_161(m, d) BOOST_PP_REPEAT_2_160(m, d) m(3, 160, d) +# define BOOST_PP_REPEAT_2_162(m, d) BOOST_PP_REPEAT_2_161(m, d) m(3, 161, d) +# define BOOST_PP_REPEAT_2_163(m, d) BOOST_PP_REPEAT_2_162(m, d) m(3, 162, d) +# define BOOST_PP_REPEAT_2_164(m, d) BOOST_PP_REPEAT_2_163(m, d) m(3, 163, d) +# define BOOST_PP_REPEAT_2_165(m, d) BOOST_PP_REPEAT_2_164(m, d) m(3, 164, d) +# define BOOST_PP_REPEAT_2_166(m, d) BOOST_PP_REPEAT_2_165(m, d) m(3, 165, d) +# define BOOST_PP_REPEAT_2_167(m, d) BOOST_PP_REPEAT_2_166(m, d) m(3, 166, d) +# define BOOST_PP_REPEAT_2_168(m, d) BOOST_PP_REPEAT_2_167(m, d) m(3, 167, d) +# define BOOST_PP_REPEAT_2_169(m, d) BOOST_PP_REPEAT_2_168(m, d) m(3, 168, d) +# define BOOST_PP_REPEAT_2_170(m, d) BOOST_PP_REPEAT_2_169(m, d) m(3, 169, d) +# define BOOST_PP_REPEAT_2_171(m, d) BOOST_PP_REPEAT_2_170(m, d) m(3, 170, d) +# define BOOST_PP_REPEAT_2_172(m, d) BOOST_PP_REPEAT_2_171(m, d) m(3, 171, d) +# define BOOST_PP_REPEAT_2_173(m, d) BOOST_PP_REPEAT_2_172(m, d) m(3, 172, d) +# define BOOST_PP_REPEAT_2_174(m, d) BOOST_PP_REPEAT_2_173(m, d) m(3, 173, d) +# define BOOST_PP_REPEAT_2_175(m, d) BOOST_PP_REPEAT_2_174(m, d) m(3, 174, d) +# define BOOST_PP_REPEAT_2_176(m, d) BOOST_PP_REPEAT_2_175(m, d) m(3, 175, d) +# define BOOST_PP_REPEAT_2_177(m, d) BOOST_PP_REPEAT_2_176(m, d) m(3, 176, d) +# define BOOST_PP_REPEAT_2_178(m, d) BOOST_PP_REPEAT_2_177(m, d) m(3, 177, d) +# define BOOST_PP_REPEAT_2_179(m, d) BOOST_PP_REPEAT_2_178(m, d) m(3, 178, d) +# define BOOST_PP_REPEAT_2_180(m, d) BOOST_PP_REPEAT_2_179(m, d) m(3, 179, d) +# define BOOST_PP_REPEAT_2_181(m, d) BOOST_PP_REPEAT_2_180(m, d) m(3, 180, d) +# define BOOST_PP_REPEAT_2_182(m, d) BOOST_PP_REPEAT_2_181(m, d) m(3, 181, d) +# define BOOST_PP_REPEAT_2_183(m, d) BOOST_PP_REPEAT_2_182(m, d) m(3, 182, d) +# define BOOST_PP_REPEAT_2_184(m, d) BOOST_PP_REPEAT_2_183(m, d) m(3, 183, d) +# define BOOST_PP_REPEAT_2_185(m, d) BOOST_PP_REPEAT_2_184(m, d) m(3, 184, d) +# define BOOST_PP_REPEAT_2_186(m, d) BOOST_PP_REPEAT_2_185(m, d) m(3, 185, d) +# define BOOST_PP_REPEAT_2_187(m, d) BOOST_PP_REPEAT_2_186(m, d) m(3, 186, d) +# define BOOST_PP_REPEAT_2_188(m, d) BOOST_PP_REPEAT_2_187(m, d) m(3, 187, d) +# define BOOST_PP_REPEAT_2_189(m, d) BOOST_PP_REPEAT_2_188(m, d) m(3, 188, d) +# define BOOST_PP_REPEAT_2_190(m, d) BOOST_PP_REPEAT_2_189(m, d) m(3, 189, d) +# define BOOST_PP_REPEAT_2_191(m, d) BOOST_PP_REPEAT_2_190(m, d) m(3, 190, d) +# define BOOST_PP_REPEAT_2_192(m, d) BOOST_PP_REPEAT_2_191(m, d) m(3, 191, d) +# define BOOST_PP_REPEAT_2_193(m, d) BOOST_PP_REPEAT_2_192(m, d) m(3, 192, d) +# define BOOST_PP_REPEAT_2_194(m, d) BOOST_PP_REPEAT_2_193(m, d) m(3, 193, d) +# define BOOST_PP_REPEAT_2_195(m, d) BOOST_PP_REPEAT_2_194(m, d) m(3, 194, d) +# define BOOST_PP_REPEAT_2_196(m, d) BOOST_PP_REPEAT_2_195(m, d) m(3, 195, d) +# define BOOST_PP_REPEAT_2_197(m, d) BOOST_PP_REPEAT_2_196(m, d) m(3, 196, d) +# define BOOST_PP_REPEAT_2_198(m, d) BOOST_PP_REPEAT_2_197(m, d) m(3, 197, d) +# define BOOST_PP_REPEAT_2_199(m, d) BOOST_PP_REPEAT_2_198(m, d) m(3, 198, d) +# define BOOST_PP_REPEAT_2_200(m, d) BOOST_PP_REPEAT_2_199(m, d) m(3, 199, d) +# define BOOST_PP_REPEAT_2_201(m, d) BOOST_PP_REPEAT_2_200(m, d) m(3, 200, d) +# define BOOST_PP_REPEAT_2_202(m, d) BOOST_PP_REPEAT_2_201(m, d) m(3, 201, d) +# define BOOST_PP_REPEAT_2_203(m, d) BOOST_PP_REPEAT_2_202(m, d) m(3, 202, d) +# define BOOST_PP_REPEAT_2_204(m, d) BOOST_PP_REPEAT_2_203(m, d) m(3, 203, d) +# define BOOST_PP_REPEAT_2_205(m, d) BOOST_PP_REPEAT_2_204(m, d) m(3, 204, d) +# define BOOST_PP_REPEAT_2_206(m, d) BOOST_PP_REPEAT_2_205(m, d) m(3, 205, d) +# define BOOST_PP_REPEAT_2_207(m, d) BOOST_PP_REPEAT_2_206(m, d) m(3, 206, d) +# define BOOST_PP_REPEAT_2_208(m, d) BOOST_PP_REPEAT_2_207(m, d) m(3, 207, d) +# define BOOST_PP_REPEAT_2_209(m, d) BOOST_PP_REPEAT_2_208(m, d) m(3, 208, d) +# define BOOST_PP_REPEAT_2_210(m, d) BOOST_PP_REPEAT_2_209(m, d) m(3, 209, d) +# define BOOST_PP_REPEAT_2_211(m, d) BOOST_PP_REPEAT_2_210(m, d) m(3, 210, d) +# define BOOST_PP_REPEAT_2_212(m, d) BOOST_PP_REPEAT_2_211(m, d) m(3, 211, d) +# define BOOST_PP_REPEAT_2_213(m, d) BOOST_PP_REPEAT_2_212(m, d) m(3, 212, d) +# define BOOST_PP_REPEAT_2_214(m, d) BOOST_PP_REPEAT_2_213(m, d) m(3, 213, d) +# define BOOST_PP_REPEAT_2_215(m, d) BOOST_PP_REPEAT_2_214(m, d) m(3, 214, d) +# define BOOST_PP_REPEAT_2_216(m, d) BOOST_PP_REPEAT_2_215(m, d) m(3, 215, d) +# define BOOST_PP_REPEAT_2_217(m, d) BOOST_PP_REPEAT_2_216(m, d) m(3, 216, d) +# define BOOST_PP_REPEAT_2_218(m, d) BOOST_PP_REPEAT_2_217(m, d) m(3, 217, d) +# define BOOST_PP_REPEAT_2_219(m, d) BOOST_PP_REPEAT_2_218(m, d) m(3, 218, d) +# define BOOST_PP_REPEAT_2_220(m, d) BOOST_PP_REPEAT_2_219(m, d) m(3, 219, d) +# define BOOST_PP_REPEAT_2_221(m, d) BOOST_PP_REPEAT_2_220(m, d) m(3, 220, d) +# define BOOST_PP_REPEAT_2_222(m, d) BOOST_PP_REPEAT_2_221(m, d) m(3, 221, d) +# define BOOST_PP_REPEAT_2_223(m, d) BOOST_PP_REPEAT_2_222(m, d) m(3, 222, d) +# define BOOST_PP_REPEAT_2_224(m, d) BOOST_PP_REPEAT_2_223(m, d) m(3, 223, d) +# define BOOST_PP_REPEAT_2_225(m, d) BOOST_PP_REPEAT_2_224(m, d) m(3, 224, d) +# define BOOST_PP_REPEAT_2_226(m, d) BOOST_PP_REPEAT_2_225(m, d) m(3, 225, d) +# define BOOST_PP_REPEAT_2_227(m, d) BOOST_PP_REPEAT_2_226(m, d) m(3, 226, d) +# define BOOST_PP_REPEAT_2_228(m, d) BOOST_PP_REPEAT_2_227(m, d) m(3, 227, d) +# define BOOST_PP_REPEAT_2_229(m, d) BOOST_PP_REPEAT_2_228(m, d) m(3, 228, d) +# define BOOST_PP_REPEAT_2_230(m, d) BOOST_PP_REPEAT_2_229(m, d) m(3, 229, d) +# define BOOST_PP_REPEAT_2_231(m, d) BOOST_PP_REPEAT_2_230(m, d) m(3, 230, d) +# define BOOST_PP_REPEAT_2_232(m, d) BOOST_PP_REPEAT_2_231(m, d) m(3, 231, d) +# define BOOST_PP_REPEAT_2_233(m, d) BOOST_PP_REPEAT_2_232(m, d) m(3, 232, d) +# define BOOST_PP_REPEAT_2_234(m, d) BOOST_PP_REPEAT_2_233(m, d) m(3, 233, d) +# define BOOST_PP_REPEAT_2_235(m, d) BOOST_PP_REPEAT_2_234(m, d) m(3, 234, d) +# define BOOST_PP_REPEAT_2_236(m, d) BOOST_PP_REPEAT_2_235(m, d) m(3, 235, d) +# define BOOST_PP_REPEAT_2_237(m, d) BOOST_PP_REPEAT_2_236(m, d) m(3, 236, d) +# define BOOST_PP_REPEAT_2_238(m, d) BOOST_PP_REPEAT_2_237(m, d) m(3, 237, d) +# define BOOST_PP_REPEAT_2_239(m, d) BOOST_PP_REPEAT_2_238(m, d) m(3, 238, d) +# define BOOST_PP_REPEAT_2_240(m, d) BOOST_PP_REPEAT_2_239(m, d) m(3, 239, d) +# define BOOST_PP_REPEAT_2_241(m, d) BOOST_PP_REPEAT_2_240(m, d) m(3, 240, d) +# define BOOST_PP_REPEAT_2_242(m, d) BOOST_PP_REPEAT_2_241(m, d) m(3, 241, d) +# define BOOST_PP_REPEAT_2_243(m, d) BOOST_PP_REPEAT_2_242(m, d) m(3, 242, d) +# define BOOST_PP_REPEAT_2_244(m, d) BOOST_PP_REPEAT_2_243(m, d) m(3, 243, d) +# define BOOST_PP_REPEAT_2_245(m, d) BOOST_PP_REPEAT_2_244(m, d) m(3, 244, d) +# define BOOST_PP_REPEAT_2_246(m, d) BOOST_PP_REPEAT_2_245(m, d) m(3, 245, d) +# define BOOST_PP_REPEAT_2_247(m, d) BOOST_PP_REPEAT_2_246(m, d) m(3, 246, d) +# define BOOST_PP_REPEAT_2_248(m, d) BOOST_PP_REPEAT_2_247(m, d) m(3, 247, d) +# define BOOST_PP_REPEAT_2_249(m, d) BOOST_PP_REPEAT_2_248(m, d) m(3, 248, d) +# define BOOST_PP_REPEAT_2_250(m, d) BOOST_PP_REPEAT_2_249(m, d) m(3, 249, d) +# define BOOST_PP_REPEAT_2_251(m, d) BOOST_PP_REPEAT_2_250(m, d) m(3, 250, d) +# define BOOST_PP_REPEAT_2_252(m, d) BOOST_PP_REPEAT_2_251(m, d) m(3, 251, d) +# define BOOST_PP_REPEAT_2_253(m, d) BOOST_PP_REPEAT_2_252(m, d) m(3, 252, d) +# define BOOST_PP_REPEAT_2_254(m, d) BOOST_PP_REPEAT_2_253(m, d) m(3, 253, d) +# define BOOST_PP_REPEAT_2_255(m, d) BOOST_PP_REPEAT_2_254(m, d) m(3, 254, d) +# define BOOST_PP_REPEAT_2_256(m, d) BOOST_PP_REPEAT_2_255(m, d) m(3, 255, d) +# +# define BOOST_PP_REPEAT_3_0(m, d) +# define BOOST_PP_REPEAT_3_1(m, d) m(4, 0, d) +# define BOOST_PP_REPEAT_3_2(m, d) BOOST_PP_REPEAT_3_1(m, d) m(4, 1, d) +# define BOOST_PP_REPEAT_3_3(m, d) BOOST_PP_REPEAT_3_2(m, d) m(4, 2, d) +# define BOOST_PP_REPEAT_3_4(m, d) BOOST_PP_REPEAT_3_3(m, d) m(4, 3, d) +# define BOOST_PP_REPEAT_3_5(m, d) BOOST_PP_REPEAT_3_4(m, d) m(4, 4, d) +# define BOOST_PP_REPEAT_3_6(m, d) BOOST_PP_REPEAT_3_5(m, d) m(4, 5, d) +# define BOOST_PP_REPEAT_3_7(m, d) BOOST_PP_REPEAT_3_6(m, d) m(4, 6, d) +# define BOOST_PP_REPEAT_3_8(m, d) BOOST_PP_REPEAT_3_7(m, d) m(4, 7, d) +# define BOOST_PP_REPEAT_3_9(m, d) BOOST_PP_REPEAT_3_8(m, d) m(4, 8, d) +# define BOOST_PP_REPEAT_3_10(m, d) BOOST_PP_REPEAT_3_9(m, d) m(4, 9, d) +# define BOOST_PP_REPEAT_3_11(m, d) BOOST_PP_REPEAT_3_10(m, d) m(4, 10, d) +# define BOOST_PP_REPEAT_3_12(m, d) BOOST_PP_REPEAT_3_11(m, d) m(4, 11, d) +# define BOOST_PP_REPEAT_3_13(m, d) BOOST_PP_REPEAT_3_12(m, d) m(4, 12, d) +# define BOOST_PP_REPEAT_3_14(m, d) BOOST_PP_REPEAT_3_13(m, d) m(4, 13, d) +# define BOOST_PP_REPEAT_3_15(m, d) BOOST_PP_REPEAT_3_14(m, d) m(4, 14, d) +# define BOOST_PP_REPEAT_3_16(m, d) BOOST_PP_REPEAT_3_15(m, d) m(4, 15, d) +# define BOOST_PP_REPEAT_3_17(m, d) BOOST_PP_REPEAT_3_16(m, d) m(4, 16, d) +# define BOOST_PP_REPEAT_3_18(m, d) BOOST_PP_REPEAT_3_17(m, d) m(4, 17, d) +# define BOOST_PP_REPEAT_3_19(m, d) BOOST_PP_REPEAT_3_18(m, d) m(4, 18, d) +# define BOOST_PP_REPEAT_3_20(m, d) BOOST_PP_REPEAT_3_19(m, d) m(4, 19, d) +# define BOOST_PP_REPEAT_3_21(m, d) BOOST_PP_REPEAT_3_20(m, d) m(4, 20, d) +# define BOOST_PP_REPEAT_3_22(m, d) BOOST_PP_REPEAT_3_21(m, d) m(4, 21, d) +# define BOOST_PP_REPEAT_3_23(m, d) BOOST_PP_REPEAT_3_22(m, d) m(4, 22, d) +# define BOOST_PP_REPEAT_3_24(m, d) BOOST_PP_REPEAT_3_23(m, d) m(4, 23, d) +# define BOOST_PP_REPEAT_3_25(m, d) BOOST_PP_REPEAT_3_24(m, d) m(4, 24, d) +# define BOOST_PP_REPEAT_3_26(m, d) BOOST_PP_REPEAT_3_25(m, d) m(4, 25, d) +# define BOOST_PP_REPEAT_3_27(m, d) BOOST_PP_REPEAT_3_26(m, d) m(4, 26, d) +# define BOOST_PP_REPEAT_3_28(m, d) BOOST_PP_REPEAT_3_27(m, d) m(4, 27, d) +# define BOOST_PP_REPEAT_3_29(m, d) BOOST_PP_REPEAT_3_28(m, d) m(4, 28, d) +# define BOOST_PP_REPEAT_3_30(m, d) BOOST_PP_REPEAT_3_29(m, d) m(4, 29, d) +# define BOOST_PP_REPEAT_3_31(m, d) BOOST_PP_REPEAT_3_30(m, d) m(4, 30, d) +# define BOOST_PP_REPEAT_3_32(m, d) BOOST_PP_REPEAT_3_31(m, d) m(4, 31, d) +# define BOOST_PP_REPEAT_3_33(m, d) BOOST_PP_REPEAT_3_32(m, d) m(4, 32, d) +# define BOOST_PP_REPEAT_3_34(m, d) BOOST_PP_REPEAT_3_33(m, d) m(4, 33, d) +# define BOOST_PP_REPEAT_3_35(m, d) BOOST_PP_REPEAT_3_34(m, d) m(4, 34, d) +# define BOOST_PP_REPEAT_3_36(m, d) BOOST_PP_REPEAT_3_35(m, d) m(4, 35, d) +# define BOOST_PP_REPEAT_3_37(m, d) BOOST_PP_REPEAT_3_36(m, d) m(4, 36, d) +# define BOOST_PP_REPEAT_3_38(m, d) BOOST_PP_REPEAT_3_37(m, d) m(4, 37, d) +# define BOOST_PP_REPEAT_3_39(m, d) BOOST_PP_REPEAT_3_38(m, d) m(4, 38, d) +# define BOOST_PP_REPEAT_3_40(m, d) BOOST_PP_REPEAT_3_39(m, d) m(4, 39, d) +# define BOOST_PP_REPEAT_3_41(m, d) BOOST_PP_REPEAT_3_40(m, d) m(4, 40, d) +# define BOOST_PP_REPEAT_3_42(m, d) BOOST_PP_REPEAT_3_41(m, d) m(4, 41, d) +# define BOOST_PP_REPEAT_3_43(m, d) BOOST_PP_REPEAT_3_42(m, d) m(4, 42, d) +# define BOOST_PP_REPEAT_3_44(m, d) BOOST_PP_REPEAT_3_43(m, d) m(4, 43, d) +# define BOOST_PP_REPEAT_3_45(m, d) BOOST_PP_REPEAT_3_44(m, d) m(4, 44, d) +# define BOOST_PP_REPEAT_3_46(m, d) BOOST_PP_REPEAT_3_45(m, d) m(4, 45, d) +# define BOOST_PP_REPEAT_3_47(m, d) BOOST_PP_REPEAT_3_46(m, d) m(4, 46, d) +# define BOOST_PP_REPEAT_3_48(m, d) BOOST_PP_REPEAT_3_47(m, d) m(4, 47, d) +# define BOOST_PP_REPEAT_3_49(m, d) BOOST_PP_REPEAT_3_48(m, d) m(4, 48, d) +# define BOOST_PP_REPEAT_3_50(m, d) BOOST_PP_REPEAT_3_49(m, d) m(4, 49, d) +# define BOOST_PP_REPEAT_3_51(m, d) BOOST_PP_REPEAT_3_50(m, d) m(4, 50, d) +# define BOOST_PP_REPEAT_3_52(m, d) BOOST_PP_REPEAT_3_51(m, d) m(4, 51, d) +# define BOOST_PP_REPEAT_3_53(m, d) BOOST_PP_REPEAT_3_52(m, d) m(4, 52, d) +# define BOOST_PP_REPEAT_3_54(m, d) BOOST_PP_REPEAT_3_53(m, d) m(4, 53, d) +# define BOOST_PP_REPEAT_3_55(m, d) BOOST_PP_REPEAT_3_54(m, d) m(4, 54, d) +# define BOOST_PP_REPEAT_3_56(m, d) BOOST_PP_REPEAT_3_55(m, d) m(4, 55, d) +# define BOOST_PP_REPEAT_3_57(m, d) BOOST_PP_REPEAT_3_56(m, d) m(4, 56, d) +# define BOOST_PP_REPEAT_3_58(m, d) BOOST_PP_REPEAT_3_57(m, d) m(4, 57, d) +# define BOOST_PP_REPEAT_3_59(m, d) BOOST_PP_REPEAT_3_58(m, d) m(4, 58, d) +# define BOOST_PP_REPEAT_3_60(m, d) BOOST_PP_REPEAT_3_59(m, d) m(4, 59, d) +# define BOOST_PP_REPEAT_3_61(m, d) BOOST_PP_REPEAT_3_60(m, d) m(4, 60, d) +# define BOOST_PP_REPEAT_3_62(m, d) BOOST_PP_REPEAT_3_61(m, d) m(4, 61, d) +# define BOOST_PP_REPEAT_3_63(m, d) BOOST_PP_REPEAT_3_62(m, d) m(4, 62, d) +# define BOOST_PP_REPEAT_3_64(m, d) BOOST_PP_REPEAT_3_63(m, d) m(4, 63, d) +# define BOOST_PP_REPEAT_3_65(m, d) BOOST_PP_REPEAT_3_64(m, d) m(4, 64, d) +# define BOOST_PP_REPEAT_3_66(m, d) BOOST_PP_REPEAT_3_65(m, d) m(4, 65, d) +# define BOOST_PP_REPEAT_3_67(m, d) BOOST_PP_REPEAT_3_66(m, d) m(4, 66, d) +# define BOOST_PP_REPEAT_3_68(m, d) BOOST_PP_REPEAT_3_67(m, d) m(4, 67, d) +# define BOOST_PP_REPEAT_3_69(m, d) BOOST_PP_REPEAT_3_68(m, d) m(4, 68, d) +# define BOOST_PP_REPEAT_3_70(m, d) BOOST_PP_REPEAT_3_69(m, d) m(4, 69, d) +# define BOOST_PP_REPEAT_3_71(m, d) BOOST_PP_REPEAT_3_70(m, d) m(4, 70, d) +# define BOOST_PP_REPEAT_3_72(m, d) BOOST_PP_REPEAT_3_71(m, d) m(4, 71, d) +# define BOOST_PP_REPEAT_3_73(m, d) BOOST_PP_REPEAT_3_72(m, d) m(4, 72, d) +# define BOOST_PP_REPEAT_3_74(m, d) BOOST_PP_REPEAT_3_73(m, d) m(4, 73, d) +# define BOOST_PP_REPEAT_3_75(m, d) BOOST_PP_REPEAT_3_74(m, d) m(4, 74, d) +# define BOOST_PP_REPEAT_3_76(m, d) BOOST_PP_REPEAT_3_75(m, d) m(4, 75, d) +# define BOOST_PP_REPEAT_3_77(m, d) BOOST_PP_REPEAT_3_76(m, d) m(4, 76, d) +# define BOOST_PP_REPEAT_3_78(m, d) BOOST_PP_REPEAT_3_77(m, d) m(4, 77, d) +# define BOOST_PP_REPEAT_3_79(m, d) BOOST_PP_REPEAT_3_78(m, d) m(4, 78, d) +# define BOOST_PP_REPEAT_3_80(m, d) BOOST_PP_REPEAT_3_79(m, d) m(4, 79, d) +# define BOOST_PP_REPEAT_3_81(m, d) BOOST_PP_REPEAT_3_80(m, d) m(4, 80, d) +# define BOOST_PP_REPEAT_3_82(m, d) BOOST_PP_REPEAT_3_81(m, d) m(4, 81, d) +# define BOOST_PP_REPEAT_3_83(m, d) BOOST_PP_REPEAT_3_82(m, d) m(4, 82, d) +# define BOOST_PP_REPEAT_3_84(m, d) BOOST_PP_REPEAT_3_83(m, d) m(4, 83, d) +# define BOOST_PP_REPEAT_3_85(m, d) BOOST_PP_REPEAT_3_84(m, d) m(4, 84, d) +# define BOOST_PP_REPEAT_3_86(m, d) BOOST_PP_REPEAT_3_85(m, d) m(4, 85, d) +# define BOOST_PP_REPEAT_3_87(m, d) BOOST_PP_REPEAT_3_86(m, d) m(4, 86, d) +# define BOOST_PP_REPEAT_3_88(m, d) BOOST_PP_REPEAT_3_87(m, d) m(4, 87, d) +# define BOOST_PP_REPEAT_3_89(m, d) BOOST_PP_REPEAT_3_88(m, d) m(4, 88, d) +# define BOOST_PP_REPEAT_3_90(m, d) BOOST_PP_REPEAT_3_89(m, d) m(4, 89, d) +# define BOOST_PP_REPEAT_3_91(m, d) BOOST_PP_REPEAT_3_90(m, d) m(4, 90, d) +# define BOOST_PP_REPEAT_3_92(m, d) BOOST_PP_REPEAT_3_91(m, d) m(4, 91, d) +# define BOOST_PP_REPEAT_3_93(m, d) BOOST_PP_REPEAT_3_92(m, d) m(4, 92, d) +# define BOOST_PP_REPEAT_3_94(m, d) BOOST_PP_REPEAT_3_93(m, d) m(4, 93, d) +# define BOOST_PP_REPEAT_3_95(m, d) BOOST_PP_REPEAT_3_94(m, d) m(4, 94, d) +# define BOOST_PP_REPEAT_3_96(m, d) BOOST_PP_REPEAT_3_95(m, d) m(4, 95, d) +# define BOOST_PP_REPEAT_3_97(m, d) BOOST_PP_REPEAT_3_96(m, d) m(4, 96, d) +# define BOOST_PP_REPEAT_3_98(m, d) BOOST_PP_REPEAT_3_97(m, d) m(4, 97, d) +# define BOOST_PP_REPEAT_3_99(m, d) BOOST_PP_REPEAT_3_98(m, d) m(4, 98, d) +# define BOOST_PP_REPEAT_3_100(m, d) BOOST_PP_REPEAT_3_99(m, d) m(4, 99, d) +# define BOOST_PP_REPEAT_3_101(m, d) BOOST_PP_REPEAT_3_100(m, d) m(4, 100, d) +# define BOOST_PP_REPEAT_3_102(m, d) BOOST_PP_REPEAT_3_101(m, d) m(4, 101, d) +# define BOOST_PP_REPEAT_3_103(m, d) BOOST_PP_REPEAT_3_102(m, d) m(4, 102, d) +# define BOOST_PP_REPEAT_3_104(m, d) BOOST_PP_REPEAT_3_103(m, d) m(4, 103, d) +# define BOOST_PP_REPEAT_3_105(m, d) BOOST_PP_REPEAT_3_104(m, d) m(4, 104, d) +# define BOOST_PP_REPEAT_3_106(m, d) BOOST_PP_REPEAT_3_105(m, d) m(4, 105, d) +# define BOOST_PP_REPEAT_3_107(m, d) BOOST_PP_REPEAT_3_106(m, d) m(4, 106, d) +# define BOOST_PP_REPEAT_3_108(m, d) BOOST_PP_REPEAT_3_107(m, d) m(4, 107, d) +# define BOOST_PP_REPEAT_3_109(m, d) BOOST_PP_REPEAT_3_108(m, d) m(4, 108, d) +# define BOOST_PP_REPEAT_3_110(m, d) BOOST_PP_REPEAT_3_109(m, d) m(4, 109, d) +# define BOOST_PP_REPEAT_3_111(m, d) BOOST_PP_REPEAT_3_110(m, d) m(4, 110, d) +# define BOOST_PP_REPEAT_3_112(m, d) BOOST_PP_REPEAT_3_111(m, d) m(4, 111, d) +# define BOOST_PP_REPEAT_3_113(m, d) BOOST_PP_REPEAT_3_112(m, d) m(4, 112, d) +# define BOOST_PP_REPEAT_3_114(m, d) BOOST_PP_REPEAT_3_113(m, d) m(4, 113, d) +# define BOOST_PP_REPEAT_3_115(m, d) BOOST_PP_REPEAT_3_114(m, d) m(4, 114, d) +# define BOOST_PP_REPEAT_3_116(m, d) BOOST_PP_REPEAT_3_115(m, d) m(4, 115, d) +# define BOOST_PP_REPEAT_3_117(m, d) BOOST_PP_REPEAT_3_116(m, d) m(4, 116, d) +# define BOOST_PP_REPEAT_3_118(m, d) BOOST_PP_REPEAT_3_117(m, d) m(4, 117, d) +# define BOOST_PP_REPEAT_3_119(m, d) BOOST_PP_REPEAT_3_118(m, d) m(4, 118, d) +# define BOOST_PP_REPEAT_3_120(m, d) BOOST_PP_REPEAT_3_119(m, d) m(4, 119, d) +# define BOOST_PP_REPEAT_3_121(m, d) BOOST_PP_REPEAT_3_120(m, d) m(4, 120, d) +# define BOOST_PP_REPEAT_3_122(m, d) BOOST_PP_REPEAT_3_121(m, d) m(4, 121, d) +# define BOOST_PP_REPEAT_3_123(m, d) BOOST_PP_REPEAT_3_122(m, d) m(4, 122, d) +# define BOOST_PP_REPEAT_3_124(m, d) BOOST_PP_REPEAT_3_123(m, d) m(4, 123, d) +# define BOOST_PP_REPEAT_3_125(m, d) BOOST_PP_REPEAT_3_124(m, d) m(4, 124, d) +# define BOOST_PP_REPEAT_3_126(m, d) BOOST_PP_REPEAT_3_125(m, d) m(4, 125, d) +# define BOOST_PP_REPEAT_3_127(m, d) BOOST_PP_REPEAT_3_126(m, d) m(4, 126, d) +# define BOOST_PP_REPEAT_3_128(m, d) BOOST_PP_REPEAT_3_127(m, d) m(4, 127, d) +# define BOOST_PP_REPEAT_3_129(m, d) BOOST_PP_REPEAT_3_128(m, d) m(4, 128, d) +# define BOOST_PP_REPEAT_3_130(m, d) BOOST_PP_REPEAT_3_129(m, d) m(4, 129, d) +# define BOOST_PP_REPEAT_3_131(m, d) BOOST_PP_REPEAT_3_130(m, d) m(4, 130, d) +# define BOOST_PP_REPEAT_3_132(m, d) BOOST_PP_REPEAT_3_131(m, d) m(4, 131, d) +# define BOOST_PP_REPEAT_3_133(m, d) BOOST_PP_REPEAT_3_132(m, d) m(4, 132, d) +# define BOOST_PP_REPEAT_3_134(m, d) BOOST_PP_REPEAT_3_133(m, d) m(4, 133, d) +# define BOOST_PP_REPEAT_3_135(m, d) BOOST_PP_REPEAT_3_134(m, d) m(4, 134, d) +# define BOOST_PP_REPEAT_3_136(m, d) BOOST_PP_REPEAT_3_135(m, d) m(4, 135, d) +# define BOOST_PP_REPEAT_3_137(m, d) BOOST_PP_REPEAT_3_136(m, d) m(4, 136, d) +# define BOOST_PP_REPEAT_3_138(m, d) BOOST_PP_REPEAT_3_137(m, d) m(4, 137, d) +# define BOOST_PP_REPEAT_3_139(m, d) BOOST_PP_REPEAT_3_138(m, d) m(4, 138, d) +# define BOOST_PP_REPEAT_3_140(m, d) BOOST_PP_REPEAT_3_139(m, d) m(4, 139, d) +# define BOOST_PP_REPEAT_3_141(m, d) BOOST_PP_REPEAT_3_140(m, d) m(4, 140, d) +# define BOOST_PP_REPEAT_3_142(m, d) BOOST_PP_REPEAT_3_141(m, d) m(4, 141, d) +# define BOOST_PP_REPEAT_3_143(m, d) BOOST_PP_REPEAT_3_142(m, d) m(4, 142, d) +# define BOOST_PP_REPEAT_3_144(m, d) BOOST_PP_REPEAT_3_143(m, d) m(4, 143, d) +# define BOOST_PP_REPEAT_3_145(m, d) BOOST_PP_REPEAT_3_144(m, d) m(4, 144, d) +# define BOOST_PP_REPEAT_3_146(m, d) BOOST_PP_REPEAT_3_145(m, d) m(4, 145, d) +# define BOOST_PP_REPEAT_3_147(m, d) BOOST_PP_REPEAT_3_146(m, d) m(4, 146, d) +# define BOOST_PP_REPEAT_3_148(m, d) BOOST_PP_REPEAT_3_147(m, d) m(4, 147, d) +# define BOOST_PP_REPEAT_3_149(m, d) BOOST_PP_REPEAT_3_148(m, d) m(4, 148, d) +# define BOOST_PP_REPEAT_3_150(m, d) BOOST_PP_REPEAT_3_149(m, d) m(4, 149, d) +# define BOOST_PP_REPEAT_3_151(m, d) BOOST_PP_REPEAT_3_150(m, d) m(4, 150, d) +# define BOOST_PP_REPEAT_3_152(m, d) BOOST_PP_REPEAT_3_151(m, d) m(4, 151, d) +# define BOOST_PP_REPEAT_3_153(m, d) BOOST_PP_REPEAT_3_152(m, d) m(4, 152, d) +# define BOOST_PP_REPEAT_3_154(m, d) BOOST_PP_REPEAT_3_153(m, d) m(4, 153, d) +# define BOOST_PP_REPEAT_3_155(m, d) BOOST_PP_REPEAT_3_154(m, d) m(4, 154, d) +# define BOOST_PP_REPEAT_3_156(m, d) BOOST_PP_REPEAT_3_155(m, d) m(4, 155, d) +# define BOOST_PP_REPEAT_3_157(m, d) BOOST_PP_REPEAT_3_156(m, d) m(4, 156, d) +# define BOOST_PP_REPEAT_3_158(m, d) BOOST_PP_REPEAT_3_157(m, d) m(4, 157, d) +# define BOOST_PP_REPEAT_3_159(m, d) BOOST_PP_REPEAT_3_158(m, d) m(4, 158, d) +# define BOOST_PP_REPEAT_3_160(m, d) BOOST_PP_REPEAT_3_159(m, d) m(4, 159, d) +# define BOOST_PP_REPEAT_3_161(m, d) BOOST_PP_REPEAT_3_160(m, d) m(4, 160, d) +# define BOOST_PP_REPEAT_3_162(m, d) BOOST_PP_REPEAT_3_161(m, d) m(4, 161, d) +# define BOOST_PP_REPEAT_3_163(m, d) BOOST_PP_REPEAT_3_162(m, d) m(4, 162, d) +# define BOOST_PP_REPEAT_3_164(m, d) BOOST_PP_REPEAT_3_163(m, d) m(4, 163, d) +# define BOOST_PP_REPEAT_3_165(m, d) BOOST_PP_REPEAT_3_164(m, d) m(4, 164, d) +# define BOOST_PP_REPEAT_3_166(m, d) BOOST_PP_REPEAT_3_165(m, d) m(4, 165, d) +# define BOOST_PP_REPEAT_3_167(m, d) BOOST_PP_REPEAT_3_166(m, d) m(4, 166, d) +# define BOOST_PP_REPEAT_3_168(m, d) BOOST_PP_REPEAT_3_167(m, d) m(4, 167, d) +# define BOOST_PP_REPEAT_3_169(m, d) BOOST_PP_REPEAT_3_168(m, d) m(4, 168, d) +# define BOOST_PP_REPEAT_3_170(m, d) BOOST_PP_REPEAT_3_169(m, d) m(4, 169, d) +# define BOOST_PP_REPEAT_3_171(m, d) BOOST_PP_REPEAT_3_170(m, d) m(4, 170, d) +# define BOOST_PP_REPEAT_3_172(m, d) BOOST_PP_REPEAT_3_171(m, d) m(4, 171, d) +# define BOOST_PP_REPEAT_3_173(m, d) BOOST_PP_REPEAT_3_172(m, d) m(4, 172, d) +# define BOOST_PP_REPEAT_3_174(m, d) BOOST_PP_REPEAT_3_173(m, d) m(4, 173, d) +# define BOOST_PP_REPEAT_3_175(m, d) BOOST_PP_REPEAT_3_174(m, d) m(4, 174, d) +# define BOOST_PP_REPEAT_3_176(m, d) BOOST_PP_REPEAT_3_175(m, d) m(4, 175, d) +# define BOOST_PP_REPEAT_3_177(m, d) BOOST_PP_REPEAT_3_176(m, d) m(4, 176, d) +# define BOOST_PP_REPEAT_3_178(m, d) BOOST_PP_REPEAT_3_177(m, d) m(4, 177, d) +# define BOOST_PP_REPEAT_3_179(m, d) BOOST_PP_REPEAT_3_178(m, d) m(4, 178, d) +# define BOOST_PP_REPEAT_3_180(m, d) BOOST_PP_REPEAT_3_179(m, d) m(4, 179, d) +# define BOOST_PP_REPEAT_3_181(m, d) BOOST_PP_REPEAT_3_180(m, d) m(4, 180, d) +# define BOOST_PP_REPEAT_3_182(m, d) BOOST_PP_REPEAT_3_181(m, d) m(4, 181, d) +# define BOOST_PP_REPEAT_3_183(m, d) BOOST_PP_REPEAT_3_182(m, d) m(4, 182, d) +# define BOOST_PP_REPEAT_3_184(m, d) BOOST_PP_REPEAT_3_183(m, d) m(4, 183, d) +# define BOOST_PP_REPEAT_3_185(m, d) BOOST_PP_REPEAT_3_184(m, d) m(4, 184, d) +# define BOOST_PP_REPEAT_3_186(m, d) BOOST_PP_REPEAT_3_185(m, d) m(4, 185, d) +# define BOOST_PP_REPEAT_3_187(m, d) BOOST_PP_REPEAT_3_186(m, d) m(4, 186, d) +# define BOOST_PP_REPEAT_3_188(m, d) BOOST_PP_REPEAT_3_187(m, d) m(4, 187, d) +# define BOOST_PP_REPEAT_3_189(m, d) BOOST_PP_REPEAT_3_188(m, d) m(4, 188, d) +# define BOOST_PP_REPEAT_3_190(m, d) BOOST_PP_REPEAT_3_189(m, d) m(4, 189, d) +# define BOOST_PP_REPEAT_3_191(m, d) BOOST_PP_REPEAT_3_190(m, d) m(4, 190, d) +# define BOOST_PP_REPEAT_3_192(m, d) BOOST_PP_REPEAT_3_191(m, d) m(4, 191, d) +# define BOOST_PP_REPEAT_3_193(m, d) BOOST_PP_REPEAT_3_192(m, d) m(4, 192, d) +# define BOOST_PP_REPEAT_3_194(m, d) BOOST_PP_REPEAT_3_193(m, d) m(4, 193, d) +# define BOOST_PP_REPEAT_3_195(m, d) BOOST_PP_REPEAT_3_194(m, d) m(4, 194, d) +# define BOOST_PP_REPEAT_3_196(m, d) BOOST_PP_REPEAT_3_195(m, d) m(4, 195, d) +# define BOOST_PP_REPEAT_3_197(m, d) BOOST_PP_REPEAT_3_196(m, d) m(4, 196, d) +# define BOOST_PP_REPEAT_3_198(m, d) BOOST_PP_REPEAT_3_197(m, d) m(4, 197, d) +# define BOOST_PP_REPEAT_3_199(m, d) BOOST_PP_REPEAT_3_198(m, d) m(4, 198, d) +# define BOOST_PP_REPEAT_3_200(m, d) BOOST_PP_REPEAT_3_199(m, d) m(4, 199, d) +# define BOOST_PP_REPEAT_3_201(m, d) BOOST_PP_REPEAT_3_200(m, d) m(4, 200, d) +# define BOOST_PP_REPEAT_3_202(m, d) BOOST_PP_REPEAT_3_201(m, d) m(4, 201, d) +# define BOOST_PP_REPEAT_3_203(m, d) BOOST_PP_REPEAT_3_202(m, d) m(4, 202, d) +# define BOOST_PP_REPEAT_3_204(m, d) BOOST_PP_REPEAT_3_203(m, d) m(4, 203, d) +# define BOOST_PP_REPEAT_3_205(m, d) BOOST_PP_REPEAT_3_204(m, d) m(4, 204, d) +# define BOOST_PP_REPEAT_3_206(m, d) BOOST_PP_REPEAT_3_205(m, d) m(4, 205, d) +# define BOOST_PP_REPEAT_3_207(m, d) BOOST_PP_REPEAT_3_206(m, d) m(4, 206, d) +# define BOOST_PP_REPEAT_3_208(m, d) BOOST_PP_REPEAT_3_207(m, d) m(4, 207, d) +# define BOOST_PP_REPEAT_3_209(m, d) BOOST_PP_REPEAT_3_208(m, d) m(4, 208, d) +# define BOOST_PP_REPEAT_3_210(m, d) BOOST_PP_REPEAT_3_209(m, d) m(4, 209, d) +# define BOOST_PP_REPEAT_3_211(m, d) BOOST_PP_REPEAT_3_210(m, d) m(4, 210, d) +# define BOOST_PP_REPEAT_3_212(m, d) BOOST_PP_REPEAT_3_211(m, d) m(4, 211, d) +# define BOOST_PP_REPEAT_3_213(m, d) BOOST_PP_REPEAT_3_212(m, d) m(4, 212, d) +# define BOOST_PP_REPEAT_3_214(m, d) BOOST_PP_REPEAT_3_213(m, d) m(4, 213, d) +# define BOOST_PP_REPEAT_3_215(m, d) BOOST_PP_REPEAT_3_214(m, d) m(4, 214, d) +# define BOOST_PP_REPEAT_3_216(m, d) BOOST_PP_REPEAT_3_215(m, d) m(4, 215, d) +# define BOOST_PP_REPEAT_3_217(m, d) BOOST_PP_REPEAT_3_216(m, d) m(4, 216, d) +# define BOOST_PP_REPEAT_3_218(m, d) BOOST_PP_REPEAT_3_217(m, d) m(4, 217, d) +# define BOOST_PP_REPEAT_3_219(m, d) BOOST_PP_REPEAT_3_218(m, d) m(4, 218, d) +# define BOOST_PP_REPEAT_3_220(m, d) BOOST_PP_REPEAT_3_219(m, d) m(4, 219, d) +# define BOOST_PP_REPEAT_3_221(m, d) BOOST_PP_REPEAT_3_220(m, d) m(4, 220, d) +# define BOOST_PP_REPEAT_3_222(m, d) BOOST_PP_REPEAT_3_221(m, d) m(4, 221, d) +# define BOOST_PP_REPEAT_3_223(m, d) BOOST_PP_REPEAT_3_222(m, d) m(4, 222, d) +# define BOOST_PP_REPEAT_3_224(m, d) BOOST_PP_REPEAT_3_223(m, d) m(4, 223, d) +# define BOOST_PP_REPEAT_3_225(m, d) BOOST_PP_REPEAT_3_224(m, d) m(4, 224, d) +# define BOOST_PP_REPEAT_3_226(m, d) BOOST_PP_REPEAT_3_225(m, d) m(4, 225, d) +# define BOOST_PP_REPEAT_3_227(m, d) BOOST_PP_REPEAT_3_226(m, d) m(4, 226, d) +# define BOOST_PP_REPEAT_3_228(m, d) BOOST_PP_REPEAT_3_227(m, d) m(4, 227, d) +# define BOOST_PP_REPEAT_3_229(m, d) BOOST_PP_REPEAT_3_228(m, d) m(4, 228, d) +# define BOOST_PP_REPEAT_3_230(m, d) BOOST_PP_REPEAT_3_229(m, d) m(4, 229, d) +# define BOOST_PP_REPEAT_3_231(m, d) BOOST_PP_REPEAT_3_230(m, d) m(4, 230, d) +# define BOOST_PP_REPEAT_3_232(m, d) BOOST_PP_REPEAT_3_231(m, d) m(4, 231, d) +# define BOOST_PP_REPEAT_3_233(m, d) BOOST_PP_REPEAT_3_232(m, d) m(4, 232, d) +# define BOOST_PP_REPEAT_3_234(m, d) BOOST_PP_REPEAT_3_233(m, d) m(4, 233, d) +# define BOOST_PP_REPEAT_3_235(m, d) BOOST_PP_REPEAT_3_234(m, d) m(4, 234, d) +# define BOOST_PP_REPEAT_3_236(m, d) BOOST_PP_REPEAT_3_235(m, d) m(4, 235, d) +# define BOOST_PP_REPEAT_3_237(m, d) BOOST_PP_REPEAT_3_236(m, d) m(4, 236, d) +# define BOOST_PP_REPEAT_3_238(m, d) BOOST_PP_REPEAT_3_237(m, d) m(4, 237, d) +# define BOOST_PP_REPEAT_3_239(m, d) BOOST_PP_REPEAT_3_238(m, d) m(4, 238, d) +# define BOOST_PP_REPEAT_3_240(m, d) BOOST_PP_REPEAT_3_239(m, d) m(4, 239, d) +# define BOOST_PP_REPEAT_3_241(m, d) BOOST_PP_REPEAT_3_240(m, d) m(4, 240, d) +# define BOOST_PP_REPEAT_3_242(m, d) BOOST_PP_REPEAT_3_241(m, d) m(4, 241, d) +# define BOOST_PP_REPEAT_3_243(m, d) BOOST_PP_REPEAT_3_242(m, d) m(4, 242, d) +# define BOOST_PP_REPEAT_3_244(m, d) BOOST_PP_REPEAT_3_243(m, d) m(4, 243, d) +# define BOOST_PP_REPEAT_3_245(m, d) BOOST_PP_REPEAT_3_244(m, d) m(4, 244, d) +# define BOOST_PP_REPEAT_3_246(m, d) BOOST_PP_REPEAT_3_245(m, d) m(4, 245, d) +# define BOOST_PP_REPEAT_3_247(m, d) BOOST_PP_REPEAT_3_246(m, d) m(4, 246, d) +# define BOOST_PP_REPEAT_3_248(m, d) BOOST_PP_REPEAT_3_247(m, d) m(4, 247, d) +# define BOOST_PP_REPEAT_3_249(m, d) BOOST_PP_REPEAT_3_248(m, d) m(4, 248, d) +# define BOOST_PP_REPEAT_3_250(m, d) BOOST_PP_REPEAT_3_249(m, d) m(4, 249, d) +# define BOOST_PP_REPEAT_3_251(m, d) BOOST_PP_REPEAT_3_250(m, d) m(4, 250, d) +# define BOOST_PP_REPEAT_3_252(m, d) BOOST_PP_REPEAT_3_251(m, d) m(4, 251, d) +# define BOOST_PP_REPEAT_3_253(m, d) BOOST_PP_REPEAT_3_252(m, d) m(4, 252, d) +# define BOOST_PP_REPEAT_3_254(m, d) BOOST_PP_REPEAT_3_253(m, d) m(4, 253, d) +# define BOOST_PP_REPEAT_3_255(m, d) BOOST_PP_REPEAT_3_254(m, d) m(4, 254, d) +# define BOOST_PP_REPEAT_3_256(m, d) BOOST_PP_REPEAT_3_255(m, d) m(4, 255, d) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat_from_to.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat_from_to.hpp new file mode 100644 index 00000000..c3f2e2af --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/repetition/repeat_from_to.hpp @@ -0,0 +1,87 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP +# define BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP +# +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_REPEAT_FROM_TO */ +# +# if 0 +# define BOOST_PP_REPEAT_FROM_TO(first, last, macro, data) +# endif +# +# define BOOST_PP_REPEAT_FROM_TO BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4)) +# +# define BOOST_PP_REPEAT_FROM_TO_1(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_2(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_3(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_4(f, l, m, dt) BOOST_PP_ERROR(0x0003) +# +# define BOOST_PP_REPEAT_FROM_TO_1ST BOOST_PP_REPEAT_FROM_TO_1 +# define BOOST_PP_REPEAT_FROM_TO_2ND BOOST_PP_REPEAT_FROM_TO_2 +# define BOOST_PP_REPEAT_FROM_TO_3RD BOOST_PP_REPEAT_FROM_TO_3 +# +# /* BOOST_PP_REPEAT_FROM_TO_D */ +# +# if 0 +# define BOOST_PP_REPEAT_FROM_TO_D(d, first, last, macro, data) +# endif +# +# define BOOST_PP_REPEAT_FROM_TO_D BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_D_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4)) +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt)) +# define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt)) +# define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt)) +# else +# define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) +# define BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt)) +# define BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt)) +# define BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt)) +# endif +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() +# define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd) +# define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd) +# define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd) +# define BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, im) +# define BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, im) +# define BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, im) +# else +# define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd)) +# define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd)) +# define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd)) +# endif +# +# define BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_1_II(z, BOOST_PP_ADD_D(d, n, f), m, dt) +# define BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_2_II(z, BOOST_PP_ADD_D(d, n, f), m, dt) +# define BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_3_II(z, BOOST_PP_ADD_D(d, n, f), m, dt) +# +# define BOOST_PP_REPEAT_FROM_TO_M_1_II(z, n, m, dt) m(z, n, dt) +# define BOOST_PP_REPEAT_FROM_TO_M_2_II(z, n, m, dt) m(z, n, dt) +# define BOOST_PP_REPEAT_FROM_TO_M_3_II(z, n, m, dt) m(z, n, dt) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/enum.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/enum.hpp new file mode 100644 index 00000000..f8dacd37 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/enum.hpp @@ -0,0 +1,288 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_SEQ_ENUM_HPP +# define BOOST_PREPROCESSOR_SEQ_ENUM_HPP +# +# include +# include +# include +# +# /* BOOST_PP_SEQ_ENUM */ +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(seq) +# define BOOST_PP_SEQ_ENUM_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq) +# define BOOST_PP_SEQ_ENUM_I(size, seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq +# else +# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq +# endif +# +# define BOOST_PP_SEQ_ENUM_1(x) x +# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1 +# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2 +# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3 +# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4 +# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5 +# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6 +# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7 +# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8 +# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9 +# define BOOST_PP_SEQ_ENUM_11(x) x, BOOST_PP_SEQ_ENUM_10 +# define BOOST_PP_SEQ_ENUM_12(x) x, BOOST_PP_SEQ_ENUM_11 +# define BOOST_PP_SEQ_ENUM_13(x) x, BOOST_PP_SEQ_ENUM_12 +# define BOOST_PP_SEQ_ENUM_14(x) x, BOOST_PP_SEQ_ENUM_13 +# define BOOST_PP_SEQ_ENUM_15(x) x, BOOST_PP_SEQ_ENUM_14 +# define BOOST_PP_SEQ_ENUM_16(x) x, BOOST_PP_SEQ_ENUM_15 +# define BOOST_PP_SEQ_ENUM_17(x) x, BOOST_PP_SEQ_ENUM_16 +# define BOOST_PP_SEQ_ENUM_18(x) x, BOOST_PP_SEQ_ENUM_17 +# define BOOST_PP_SEQ_ENUM_19(x) x, BOOST_PP_SEQ_ENUM_18 +# define BOOST_PP_SEQ_ENUM_20(x) x, BOOST_PP_SEQ_ENUM_19 +# define BOOST_PP_SEQ_ENUM_21(x) x, BOOST_PP_SEQ_ENUM_20 +# define BOOST_PP_SEQ_ENUM_22(x) x, BOOST_PP_SEQ_ENUM_21 +# define BOOST_PP_SEQ_ENUM_23(x) x, BOOST_PP_SEQ_ENUM_22 +# define BOOST_PP_SEQ_ENUM_24(x) x, BOOST_PP_SEQ_ENUM_23 +# define BOOST_PP_SEQ_ENUM_25(x) x, BOOST_PP_SEQ_ENUM_24 +# define BOOST_PP_SEQ_ENUM_26(x) x, BOOST_PP_SEQ_ENUM_25 +# define BOOST_PP_SEQ_ENUM_27(x) x, BOOST_PP_SEQ_ENUM_26 +# define BOOST_PP_SEQ_ENUM_28(x) x, BOOST_PP_SEQ_ENUM_27 +# define BOOST_PP_SEQ_ENUM_29(x) x, BOOST_PP_SEQ_ENUM_28 +# define BOOST_PP_SEQ_ENUM_30(x) x, BOOST_PP_SEQ_ENUM_29 +# define BOOST_PP_SEQ_ENUM_31(x) x, BOOST_PP_SEQ_ENUM_30 +# define BOOST_PP_SEQ_ENUM_32(x) x, BOOST_PP_SEQ_ENUM_31 +# define BOOST_PP_SEQ_ENUM_33(x) x, BOOST_PP_SEQ_ENUM_32 +# define BOOST_PP_SEQ_ENUM_34(x) x, BOOST_PP_SEQ_ENUM_33 +# define BOOST_PP_SEQ_ENUM_35(x) x, BOOST_PP_SEQ_ENUM_34 +# define BOOST_PP_SEQ_ENUM_36(x) x, BOOST_PP_SEQ_ENUM_35 +# define BOOST_PP_SEQ_ENUM_37(x) x, BOOST_PP_SEQ_ENUM_36 +# define BOOST_PP_SEQ_ENUM_38(x) x, BOOST_PP_SEQ_ENUM_37 +# define BOOST_PP_SEQ_ENUM_39(x) x, BOOST_PP_SEQ_ENUM_38 +# define BOOST_PP_SEQ_ENUM_40(x) x, BOOST_PP_SEQ_ENUM_39 +# define BOOST_PP_SEQ_ENUM_41(x) x, BOOST_PP_SEQ_ENUM_40 +# define BOOST_PP_SEQ_ENUM_42(x) x, BOOST_PP_SEQ_ENUM_41 +# define BOOST_PP_SEQ_ENUM_43(x) x, BOOST_PP_SEQ_ENUM_42 +# define BOOST_PP_SEQ_ENUM_44(x) x, BOOST_PP_SEQ_ENUM_43 +# define BOOST_PP_SEQ_ENUM_45(x) x, BOOST_PP_SEQ_ENUM_44 +# define BOOST_PP_SEQ_ENUM_46(x) x, BOOST_PP_SEQ_ENUM_45 +# define BOOST_PP_SEQ_ENUM_47(x) x, BOOST_PP_SEQ_ENUM_46 +# define BOOST_PP_SEQ_ENUM_48(x) x, BOOST_PP_SEQ_ENUM_47 +# define BOOST_PP_SEQ_ENUM_49(x) x, BOOST_PP_SEQ_ENUM_48 +# define BOOST_PP_SEQ_ENUM_50(x) x, BOOST_PP_SEQ_ENUM_49 +# define BOOST_PP_SEQ_ENUM_51(x) x, BOOST_PP_SEQ_ENUM_50 +# define BOOST_PP_SEQ_ENUM_52(x) x, BOOST_PP_SEQ_ENUM_51 +# define BOOST_PP_SEQ_ENUM_53(x) x, BOOST_PP_SEQ_ENUM_52 +# define BOOST_PP_SEQ_ENUM_54(x) x, BOOST_PP_SEQ_ENUM_53 +# define BOOST_PP_SEQ_ENUM_55(x) x, BOOST_PP_SEQ_ENUM_54 +# define BOOST_PP_SEQ_ENUM_56(x) x, BOOST_PP_SEQ_ENUM_55 +# define BOOST_PP_SEQ_ENUM_57(x) x, BOOST_PP_SEQ_ENUM_56 +# define BOOST_PP_SEQ_ENUM_58(x) x, BOOST_PP_SEQ_ENUM_57 +# define BOOST_PP_SEQ_ENUM_59(x) x, BOOST_PP_SEQ_ENUM_58 +# define BOOST_PP_SEQ_ENUM_60(x) x, BOOST_PP_SEQ_ENUM_59 +# define BOOST_PP_SEQ_ENUM_61(x) x, BOOST_PP_SEQ_ENUM_60 +# define BOOST_PP_SEQ_ENUM_62(x) x, BOOST_PP_SEQ_ENUM_61 +# define BOOST_PP_SEQ_ENUM_63(x) x, BOOST_PP_SEQ_ENUM_62 +# define BOOST_PP_SEQ_ENUM_64(x) x, BOOST_PP_SEQ_ENUM_63 +# define BOOST_PP_SEQ_ENUM_65(x) x, BOOST_PP_SEQ_ENUM_64 +# define BOOST_PP_SEQ_ENUM_66(x) x, BOOST_PP_SEQ_ENUM_65 +# define BOOST_PP_SEQ_ENUM_67(x) x, BOOST_PP_SEQ_ENUM_66 +# define BOOST_PP_SEQ_ENUM_68(x) x, BOOST_PP_SEQ_ENUM_67 +# define BOOST_PP_SEQ_ENUM_69(x) x, BOOST_PP_SEQ_ENUM_68 +# define BOOST_PP_SEQ_ENUM_70(x) x, BOOST_PP_SEQ_ENUM_69 +# define BOOST_PP_SEQ_ENUM_71(x) x, BOOST_PP_SEQ_ENUM_70 +# define BOOST_PP_SEQ_ENUM_72(x) x, BOOST_PP_SEQ_ENUM_71 +# define BOOST_PP_SEQ_ENUM_73(x) x, BOOST_PP_SEQ_ENUM_72 +# define BOOST_PP_SEQ_ENUM_74(x) x, BOOST_PP_SEQ_ENUM_73 +# define BOOST_PP_SEQ_ENUM_75(x) x, BOOST_PP_SEQ_ENUM_74 +# define BOOST_PP_SEQ_ENUM_76(x) x, BOOST_PP_SEQ_ENUM_75 +# define BOOST_PP_SEQ_ENUM_77(x) x, BOOST_PP_SEQ_ENUM_76 +# define BOOST_PP_SEQ_ENUM_78(x) x, BOOST_PP_SEQ_ENUM_77 +# define BOOST_PP_SEQ_ENUM_79(x) x, BOOST_PP_SEQ_ENUM_78 +# define BOOST_PP_SEQ_ENUM_80(x) x, BOOST_PP_SEQ_ENUM_79 +# define BOOST_PP_SEQ_ENUM_81(x) x, BOOST_PP_SEQ_ENUM_80 +# define BOOST_PP_SEQ_ENUM_82(x) x, BOOST_PP_SEQ_ENUM_81 +# define BOOST_PP_SEQ_ENUM_83(x) x, BOOST_PP_SEQ_ENUM_82 +# define BOOST_PP_SEQ_ENUM_84(x) x, BOOST_PP_SEQ_ENUM_83 +# define BOOST_PP_SEQ_ENUM_85(x) x, BOOST_PP_SEQ_ENUM_84 +# define BOOST_PP_SEQ_ENUM_86(x) x, BOOST_PP_SEQ_ENUM_85 +# define BOOST_PP_SEQ_ENUM_87(x) x, BOOST_PP_SEQ_ENUM_86 +# define BOOST_PP_SEQ_ENUM_88(x) x, BOOST_PP_SEQ_ENUM_87 +# define BOOST_PP_SEQ_ENUM_89(x) x, BOOST_PP_SEQ_ENUM_88 +# define BOOST_PP_SEQ_ENUM_90(x) x, BOOST_PP_SEQ_ENUM_89 +# define BOOST_PP_SEQ_ENUM_91(x) x, BOOST_PP_SEQ_ENUM_90 +# define BOOST_PP_SEQ_ENUM_92(x) x, BOOST_PP_SEQ_ENUM_91 +# define BOOST_PP_SEQ_ENUM_93(x) x, BOOST_PP_SEQ_ENUM_92 +# define BOOST_PP_SEQ_ENUM_94(x) x, BOOST_PP_SEQ_ENUM_93 +# define BOOST_PP_SEQ_ENUM_95(x) x, BOOST_PP_SEQ_ENUM_94 +# define BOOST_PP_SEQ_ENUM_96(x) x, BOOST_PP_SEQ_ENUM_95 +# define BOOST_PP_SEQ_ENUM_97(x) x, BOOST_PP_SEQ_ENUM_96 +# define BOOST_PP_SEQ_ENUM_98(x) x, BOOST_PP_SEQ_ENUM_97 +# define BOOST_PP_SEQ_ENUM_99(x) x, BOOST_PP_SEQ_ENUM_98 +# define BOOST_PP_SEQ_ENUM_100(x) x, BOOST_PP_SEQ_ENUM_99 +# define BOOST_PP_SEQ_ENUM_101(x) x, BOOST_PP_SEQ_ENUM_100 +# define BOOST_PP_SEQ_ENUM_102(x) x, BOOST_PP_SEQ_ENUM_101 +# define BOOST_PP_SEQ_ENUM_103(x) x, BOOST_PP_SEQ_ENUM_102 +# define BOOST_PP_SEQ_ENUM_104(x) x, BOOST_PP_SEQ_ENUM_103 +# define BOOST_PP_SEQ_ENUM_105(x) x, BOOST_PP_SEQ_ENUM_104 +# define BOOST_PP_SEQ_ENUM_106(x) x, BOOST_PP_SEQ_ENUM_105 +# define BOOST_PP_SEQ_ENUM_107(x) x, BOOST_PP_SEQ_ENUM_106 +# define BOOST_PP_SEQ_ENUM_108(x) x, BOOST_PP_SEQ_ENUM_107 +# define BOOST_PP_SEQ_ENUM_109(x) x, BOOST_PP_SEQ_ENUM_108 +# define BOOST_PP_SEQ_ENUM_110(x) x, BOOST_PP_SEQ_ENUM_109 +# define BOOST_PP_SEQ_ENUM_111(x) x, BOOST_PP_SEQ_ENUM_110 +# define BOOST_PP_SEQ_ENUM_112(x) x, BOOST_PP_SEQ_ENUM_111 +# define BOOST_PP_SEQ_ENUM_113(x) x, BOOST_PP_SEQ_ENUM_112 +# define BOOST_PP_SEQ_ENUM_114(x) x, BOOST_PP_SEQ_ENUM_113 +# define BOOST_PP_SEQ_ENUM_115(x) x, BOOST_PP_SEQ_ENUM_114 +# define BOOST_PP_SEQ_ENUM_116(x) x, BOOST_PP_SEQ_ENUM_115 +# define BOOST_PP_SEQ_ENUM_117(x) x, BOOST_PP_SEQ_ENUM_116 +# define BOOST_PP_SEQ_ENUM_118(x) x, BOOST_PP_SEQ_ENUM_117 +# define BOOST_PP_SEQ_ENUM_119(x) x, BOOST_PP_SEQ_ENUM_118 +# define BOOST_PP_SEQ_ENUM_120(x) x, BOOST_PP_SEQ_ENUM_119 +# define BOOST_PP_SEQ_ENUM_121(x) x, BOOST_PP_SEQ_ENUM_120 +# define BOOST_PP_SEQ_ENUM_122(x) x, BOOST_PP_SEQ_ENUM_121 +# define BOOST_PP_SEQ_ENUM_123(x) x, BOOST_PP_SEQ_ENUM_122 +# define BOOST_PP_SEQ_ENUM_124(x) x, BOOST_PP_SEQ_ENUM_123 +# define BOOST_PP_SEQ_ENUM_125(x) x, BOOST_PP_SEQ_ENUM_124 +# define BOOST_PP_SEQ_ENUM_126(x) x, BOOST_PP_SEQ_ENUM_125 +# define BOOST_PP_SEQ_ENUM_127(x) x, BOOST_PP_SEQ_ENUM_126 +# define BOOST_PP_SEQ_ENUM_128(x) x, BOOST_PP_SEQ_ENUM_127 +# define BOOST_PP_SEQ_ENUM_129(x) x, BOOST_PP_SEQ_ENUM_128 +# define BOOST_PP_SEQ_ENUM_130(x) x, BOOST_PP_SEQ_ENUM_129 +# define BOOST_PP_SEQ_ENUM_131(x) x, BOOST_PP_SEQ_ENUM_130 +# define BOOST_PP_SEQ_ENUM_132(x) x, BOOST_PP_SEQ_ENUM_131 +# define BOOST_PP_SEQ_ENUM_133(x) x, BOOST_PP_SEQ_ENUM_132 +# define BOOST_PP_SEQ_ENUM_134(x) x, BOOST_PP_SEQ_ENUM_133 +# define BOOST_PP_SEQ_ENUM_135(x) x, BOOST_PP_SEQ_ENUM_134 +# define BOOST_PP_SEQ_ENUM_136(x) x, BOOST_PP_SEQ_ENUM_135 +# define BOOST_PP_SEQ_ENUM_137(x) x, BOOST_PP_SEQ_ENUM_136 +# define BOOST_PP_SEQ_ENUM_138(x) x, BOOST_PP_SEQ_ENUM_137 +# define BOOST_PP_SEQ_ENUM_139(x) x, BOOST_PP_SEQ_ENUM_138 +# define BOOST_PP_SEQ_ENUM_140(x) x, BOOST_PP_SEQ_ENUM_139 +# define BOOST_PP_SEQ_ENUM_141(x) x, BOOST_PP_SEQ_ENUM_140 +# define BOOST_PP_SEQ_ENUM_142(x) x, BOOST_PP_SEQ_ENUM_141 +# define BOOST_PP_SEQ_ENUM_143(x) x, BOOST_PP_SEQ_ENUM_142 +# define BOOST_PP_SEQ_ENUM_144(x) x, BOOST_PP_SEQ_ENUM_143 +# define BOOST_PP_SEQ_ENUM_145(x) x, BOOST_PP_SEQ_ENUM_144 +# define BOOST_PP_SEQ_ENUM_146(x) x, BOOST_PP_SEQ_ENUM_145 +# define BOOST_PP_SEQ_ENUM_147(x) x, BOOST_PP_SEQ_ENUM_146 +# define BOOST_PP_SEQ_ENUM_148(x) x, BOOST_PP_SEQ_ENUM_147 +# define BOOST_PP_SEQ_ENUM_149(x) x, BOOST_PP_SEQ_ENUM_148 +# define BOOST_PP_SEQ_ENUM_150(x) x, BOOST_PP_SEQ_ENUM_149 +# define BOOST_PP_SEQ_ENUM_151(x) x, BOOST_PP_SEQ_ENUM_150 +# define BOOST_PP_SEQ_ENUM_152(x) x, BOOST_PP_SEQ_ENUM_151 +# define BOOST_PP_SEQ_ENUM_153(x) x, BOOST_PP_SEQ_ENUM_152 +# define BOOST_PP_SEQ_ENUM_154(x) x, BOOST_PP_SEQ_ENUM_153 +# define BOOST_PP_SEQ_ENUM_155(x) x, BOOST_PP_SEQ_ENUM_154 +# define BOOST_PP_SEQ_ENUM_156(x) x, BOOST_PP_SEQ_ENUM_155 +# define BOOST_PP_SEQ_ENUM_157(x) x, BOOST_PP_SEQ_ENUM_156 +# define BOOST_PP_SEQ_ENUM_158(x) x, BOOST_PP_SEQ_ENUM_157 +# define BOOST_PP_SEQ_ENUM_159(x) x, BOOST_PP_SEQ_ENUM_158 +# define BOOST_PP_SEQ_ENUM_160(x) x, BOOST_PP_SEQ_ENUM_159 +# define BOOST_PP_SEQ_ENUM_161(x) x, BOOST_PP_SEQ_ENUM_160 +# define BOOST_PP_SEQ_ENUM_162(x) x, BOOST_PP_SEQ_ENUM_161 +# define BOOST_PP_SEQ_ENUM_163(x) x, BOOST_PP_SEQ_ENUM_162 +# define BOOST_PP_SEQ_ENUM_164(x) x, BOOST_PP_SEQ_ENUM_163 +# define BOOST_PP_SEQ_ENUM_165(x) x, BOOST_PP_SEQ_ENUM_164 +# define BOOST_PP_SEQ_ENUM_166(x) x, BOOST_PP_SEQ_ENUM_165 +# define BOOST_PP_SEQ_ENUM_167(x) x, BOOST_PP_SEQ_ENUM_166 +# define BOOST_PP_SEQ_ENUM_168(x) x, BOOST_PP_SEQ_ENUM_167 +# define BOOST_PP_SEQ_ENUM_169(x) x, BOOST_PP_SEQ_ENUM_168 +# define BOOST_PP_SEQ_ENUM_170(x) x, BOOST_PP_SEQ_ENUM_169 +# define BOOST_PP_SEQ_ENUM_171(x) x, BOOST_PP_SEQ_ENUM_170 +# define BOOST_PP_SEQ_ENUM_172(x) x, BOOST_PP_SEQ_ENUM_171 +# define BOOST_PP_SEQ_ENUM_173(x) x, BOOST_PP_SEQ_ENUM_172 +# define BOOST_PP_SEQ_ENUM_174(x) x, BOOST_PP_SEQ_ENUM_173 +# define BOOST_PP_SEQ_ENUM_175(x) x, BOOST_PP_SEQ_ENUM_174 +# define BOOST_PP_SEQ_ENUM_176(x) x, BOOST_PP_SEQ_ENUM_175 +# define BOOST_PP_SEQ_ENUM_177(x) x, BOOST_PP_SEQ_ENUM_176 +# define BOOST_PP_SEQ_ENUM_178(x) x, BOOST_PP_SEQ_ENUM_177 +# define BOOST_PP_SEQ_ENUM_179(x) x, BOOST_PP_SEQ_ENUM_178 +# define BOOST_PP_SEQ_ENUM_180(x) x, BOOST_PP_SEQ_ENUM_179 +# define BOOST_PP_SEQ_ENUM_181(x) x, BOOST_PP_SEQ_ENUM_180 +# define BOOST_PP_SEQ_ENUM_182(x) x, BOOST_PP_SEQ_ENUM_181 +# define BOOST_PP_SEQ_ENUM_183(x) x, BOOST_PP_SEQ_ENUM_182 +# define BOOST_PP_SEQ_ENUM_184(x) x, BOOST_PP_SEQ_ENUM_183 +# define BOOST_PP_SEQ_ENUM_185(x) x, BOOST_PP_SEQ_ENUM_184 +# define BOOST_PP_SEQ_ENUM_186(x) x, BOOST_PP_SEQ_ENUM_185 +# define BOOST_PP_SEQ_ENUM_187(x) x, BOOST_PP_SEQ_ENUM_186 +# define BOOST_PP_SEQ_ENUM_188(x) x, BOOST_PP_SEQ_ENUM_187 +# define BOOST_PP_SEQ_ENUM_189(x) x, BOOST_PP_SEQ_ENUM_188 +# define BOOST_PP_SEQ_ENUM_190(x) x, BOOST_PP_SEQ_ENUM_189 +# define BOOST_PP_SEQ_ENUM_191(x) x, BOOST_PP_SEQ_ENUM_190 +# define BOOST_PP_SEQ_ENUM_192(x) x, BOOST_PP_SEQ_ENUM_191 +# define BOOST_PP_SEQ_ENUM_193(x) x, BOOST_PP_SEQ_ENUM_192 +# define BOOST_PP_SEQ_ENUM_194(x) x, BOOST_PP_SEQ_ENUM_193 +# define BOOST_PP_SEQ_ENUM_195(x) x, BOOST_PP_SEQ_ENUM_194 +# define BOOST_PP_SEQ_ENUM_196(x) x, BOOST_PP_SEQ_ENUM_195 +# define BOOST_PP_SEQ_ENUM_197(x) x, BOOST_PP_SEQ_ENUM_196 +# define BOOST_PP_SEQ_ENUM_198(x) x, BOOST_PP_SEQ_ENUM_197 +# define BOOST_PP_SEQ_ENUM_199(x) x, BOOST_PP_SEQ_ENUM_198 +# define BOOST_PP_SEQ_ENUM_200(x) x, BOOST_PP_SEQ_ENUM_199 +# define BOOST_PP_SEQ_ENUM_201(x) x, BOOST_PP_SEQ_ENUM_200 +# define BOOST_PP_SEQ_ENUM_202(x) x, BOOST_PP_SEQ_ENUM_201 +# define BOOST_PP_SEQ_ENUM_203(x) x, BOOST_PP_SEQ_ENUM_202 +# define BOOST_PP_SEQ_ENUM_204(x) x, BOOST_PP_SEQ_ENUM_203 +# define BOOST_PP_SEQ_ENUM_205(x) x, BOOST_PP_SEQ_ENUM_204 +# define BOOST_PP_SEQ_ENUM_206(x) x, BOOST_PP_SEQ_ENUM_205 +# define BOOST_PP_SEQ_ENUM_207(x) x, BOOST_PP_SEQ_ENUM_206 +# define BOOST_PP_SEQ_ENUM_208(x) x, BOOST_PP_SEQ_ENUM_207 +# define BOOST_PP_SEQ_ENUM_209(x) x, BOOST_PP_SEQ_ENUM_208 +# define BOOST_PP_SEQ_ENUM_210(x) x, BOOST_PP_SEQ_ENUM_209 +# define BOOST_PP_SEQ_ENUM_211(x) x, BOOST_PP_SEQ_ENUM_210 +# define BOOST_PP_SEQ_ENUM_212(x) x, BOOST_PP_SEQ_ENUM_211 +# define BOOST_PP_SEQ_ENUM_213(x) x, BOOST_PP_SEQ_ENUM_212 +# define BOOST_PP_SEQ_ENUM_214(x) x, BOOST_PP_SEQ_ENUM_213 +# define BOOST_PP_SEQ_ENUM_215(x) x, BOOST_PP_SEQ_ENUM_214 +# define BOOST_PP_SEQ_ENUM_216(x) x, BOOST_PP_SEQ_ENUM_215 +# define BOOST_PP_SEQ_ENUM_217(x) x, BOOST_PP_SEQ_ENUM_216 +# define BOOST_PP_SEQ_ENUM_218(x) x, BOOST_PP_SEQ_ENUM_217 +# define BOOST_PP_SEQ_ENUM_219(x) x, BOOST_PP_SEQ_ENUM_218 +# define BOOST_PP_SEQ_ENUM_220(x) x, BOOST_PP_SEQ_ENUM_219 +# define BOOST_PP_SEQ_ENUM_221(x) x, BOOST_PP_SEQ_ENUM_220 +# define BOOST_PP_SEQ_ENUM_222(x) x, BOOST_PP_SEQ_ENUM_221 +# define BOOST_PP_SEQ_ENUM_223(x) x, BOOST_PP_SEQ_ENUM_222 +# define BOOST_PP_SEQ_ENUM_224(x) x, BOOST_PP_SEQ_ENUM_223 +# define BOOST_PP_SEQ_ENUM_225(x) x, BOOST_PP_SEQ_ENUM_224 +# define BOOST_PP_SEQ_ENUM_226(x) x, BOOST_PP_SEQ_ENUM_225 +# define BOOST_PP_SEQ_ENUM_227(x) x, BOOST_PP_SEQ_ENUM_226 +# define BOOST_PP_SEQ_ENUM_228(x) x, BOOST_PP_SEQ_ENUM_227 +# define BOOST_PP_SEQ_ENUM_229(x) x, BOOST_PP_SEQ_ENUM_228 +# define BOOST_PP_SEQ_ENUM_230(x) x, BOOST_PP_SEQ_ENUM_229 +# define BOOST_PP_SEQ_ENUM_231(x) x, BOOST_PP_SEQ_ENUM_230 +# define BOOST_PP_SEQ_ENUM_232(x) x, BOOST_PP_SEQ_ENUM_231 +# define BOOST_PP_SEQ_ENUM_233(x) x, BOOST_PP_SEQ_ENUM_232 +# define BOOST_PP_SEQ_ENUM_234(x) x, BOOST_PP_SEQ_ENUM_233 +# define BOOST_PP_SEQ_ENUM_235(x) x, BOOST_PP_SEQ_ENUM_234 +# define BOOST_PP_SEQ_ENUM_236(x) x, BOOST_PP_SEQ_ENUM_235 +# define BOOST_PP_SEQ_ENUM_237(x) x, BOOST_PP_SEQ_ENUM_236 +# define BOOST_PP_SEQ_ENUM_238(x) x, BOOST_PP_SEQ_ENUM_237 +# define BOOST_PP_SEQ_ENUM_239(x) x, BOOST_PP_SEQ_ENUM_238 +# define BOOST_PP_SEQ_ENUM_240(x) x, BOOST_PP_SEQ_ENUM_239 +# define BOOST_PP_SEQ_ENUM_241(x) x, BOOST_PP_SEQ_ENUM_240 +# define BOOST_PP_SEQ_ENUM_242(x) x, BOOST_PP_SEQ_ENUM_241 +# define BOOST_PP_SEQ_ENUM_243(x) x, BOOST_PP_SEQ_ENUM_242 +# define BOOST_PP_SEQ_ENUM_244(x) x, BOOST_PP_SEQ_ENUM_243 +# define BOOST_PP_SEQ_ENUM_245(x) x, BOOST_PP_SEQ_ENUM_244 +# define BOOST_PP_SEQ_ENUM_246(x) x, BOOST_PP_SEQ_ENUM_245 +# define BOOST_PP_SEQ_ENUM_247(x) x, BOOST_PP_SEQ_ENUM_246 +# define BOOST_PP_SEQ_ENUM_248(x) x, BOOST_PP_SEQ_ENUM_247 +# define BOOST_PP_SEQ_ENUM_249(x) x, BOOST_PP_SEQ_ENUM_248 +# define BOOST_PP_SEQ_ENUM_250(x) x, BOOST_PP_SEQ_ENUM_249 +# define BOOST_PP_SEQ_ENUM_251(x) x, BOOST_PP_SEQ_ENUM_250 +# define BOOST_PP_SEQ_ENUM_252(x) x, BOOST_PP_SEQ_ENUM_251 +# define BOOST_PP_SEQ_ENUM_253(x) x, BOOST_PP_SEQ_ENUM_252 +# define BOOST_PP_SEQ_ENUM_254(x) x, BOOST_PP_SEQ_ENUM_253 +# define BOOST_PP_SEQ_ENUM_255(x) x, BOOST_PP_SEQ_ENUM_254 +# define BOOST_PP_SEQ_ENUM_256(x) x, BOOST_PP_SEQ_ENUM_255 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/size.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/size.hpp new file mode 100644 index 00000000..2b626a9b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/seq/size.hpp @@ -0,0 +1,548 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_SEQ_SIZE_HPP +# define BOOST_PREPROCESSOR_SEQ_SIZE_HPP +# +# include +# include +# include +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I((seq)) +# define BOOST_PP_SEQ_SIZE_I(par) BOOST_PP_SEQ_SIZE_II ## par +# define BOOST_PP_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 ## seq) +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq) +# define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq) +# elif defined(__IBMC__) || defined(__IBMCPP__) +# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq)) +# else +# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq) +# endif +# +# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1 +# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2 +# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3 +# define BOOST_PP_SEQ_SIZE_3(_) BOOST_PP_SEQ_SIZE_4 +# define BOOST_PP_SEQ_SIZE_4(_) BOOST_PP_SEQ_SIZE_5 +# define BOOST_PP_SEQ_SIZE_5(_) BOOST_PP_SEQ_SIZE_6 +# define BOOST_PP_SEQ_SIZE_6(_) BOOST_PP_SEQ_SIZE_7 +# define BOOST_PP_SEQ_SIZE_7(_) BOOST_PP_SEQ_SIZE_8 +# define BOOST_PP_SEQ_SIZE_8(_) BOOST_PP_SEQ_SIZE_9 +# define BOOST_PP_SEQ_SIZE_9(_) BOOST_PP_SEQ_SIZE_10 +# define BOOST_PP_SEQ_SIZE_10(_) BOOST_PP_SEQ_SIZE_11 +# define BOOST_PP_SEQ_SIZE_11(_) BOOST_PP_SEQ_SIZE_12 +# define BOOST_PP_SEQ_SIZE_12(_) BOOST_PP_SEQ_SIZE_13 +# define BOOST_PP_SEQ_SIZE_13(_) BOOST_PP_SEQ_SIZE_14 +# define BOOST_PP_SEQ_SIZE_14(_) BOOST_PP_SEQ_SIZE_15 +# define BOOST_PP_SEQ_SIZE_15(_) BOOST_PP_SEQ_SIZE_16 +# define BOOST_PP_SEQ_SIZE_16(_) BOOST_PP_SEQ_SIZE_17 +# define BOOST_PP_SEQ_SIZE_17(_) BOOST_PP_SEQ_SIZE_18 +# define BOOST_PP_SEQ_SIZE_18(_) BOOST_PP_SEQ_SIZE_19 +# define BOOST_PP_SEQ_SIZE_19(_) BOOST_PP_SEQ_SIZE_20 +# define BOOST_PP_SEQ_SIZE_20(_) BOOST_PP_SEQ_SIZE_21 +# define BOOST_PP_SEQ_SIZE_21(_) BOOST_PP_SEQ_SIZE_22 +# define BOOST_PP_SEQ_SIZE_22(_) BOOST_PP_SEQ_SIZE_23 +# define BOOST_PP_SEQ_SIZE_23(_) BOOST_PP_SEQ_SIZE_24 +# define BOOST_PP_SEQ_SIZE_24(_) BOOST_PP_SEQ_SIZE_25 +# define BOOST_PP_SEQ_SIZE_25(_) BOOST_PP_SEQ_SIZE_26 +# define BOOST_PP_SEQ_SIZE_26(_) BOOST_PP_SEQ_SIZE_27 +# define BOOST_PP_SEQ_SIZE_27(_) BOOST_PP_SEQ_SIZE_28 +# define BOOST_PP_SEQ_SIZE_28(_) BOOST_PP_SEQ_SIZE_29 +# define BOOST_PP_SEQ_SIZE_29(_) BOOST_PP_SEQ_SIZE_30 +# define BOOST_PP_SEQ_SIZE_30(_) BOOST_PP_SEQ_SIZE_31 +# define BOOST_PP_SEQ_SIZE_31(_) BOOST_PP_SEQ_SIZE_32 +# define BOOST_PP_SEQ_SIZE_32(_) BOOST_PP_SEQ_SIZE_33 +# define BOOST_PP_SEQ_SIZE_33(_) BOOST_PP_SEQ_SIZE_34 +# define BOOST_PP_SEQ_SIZE_34(_) BOOST_PP_SEQ_SIZE_35 +# define BOOST_PP_SEQ_SIZE_35(_) BOOST_PP_SEQ_SIZE_36 +# define BOOST_PP_SEQ_SIZE_36(_) BOOST_PP_SEQ_SIZE_37 +# define BOOST_PP_SEQ_SIZE_37(_) BOOST_PP_SEQ_SIZE_38 +# define BOOST_PP_SEQ_SIZE_38(_) BOOST_PP_SEQ_SIZE_39 +# define BOOST_PP_SEQ_SIZE_39(_) BOOST_PP_SEQ_SIZE_40 +# define BOOST_PP_SEQ_SIZE_40(_) BOOST_PP_SEQ_SIZE_41 +# define BOOST_PP_SEQ_SIZE_41(_) BOOST_PP_SEQ_SIZE_42 +# define BOOST_PP_SEQ_SIZE_42(_) BOOST_PP_SEQ_SIZE_43 +# define BOOST_PP_SEQ_SIZE_43(_) BOOST_PP_SEQ_SIZE_44 +# define BOOST_PP_SEQ_SIZE_44(_) BOOST_PP_SEQ_SIZE_45 +# define BOOST_PP_SEQ_SIZE_45(_) BOOST_PP_SEQ_SIZE_46 +# define BOOST_PP_SEQ_SIZE_46(_) BOOST_PP_SEQ_SIZE_47 +# define BOOST_PP_SEQ_SIZE_47(_) BOOST_PP_SEQ_SIZE_48 +# define BOOST_PP_SEQ_SIZE_48(_) BOOST_PP_SEQ_SIZE_49 +# define BOOST_PP_SEQ_SIZE_49(_) BOOST_PP_SEQ_SIZE_50 +# define BOOST_PP_SEQ_SIZE_50(_) BOOST_PP_SEQ_SIZE_51 +# define BOOST_PP_SEQ_SIZE_51(_) BOOST_PP_SEQ_SIZE_52 +# define BOOST_PP_SEQ_SIZE_52(_) BOOST_PP_SEQ_SIZE_53 +# define BOOST_PP_SEQ_SIZE_53(_) BOOST_PP_SEQ_SIZE_54 +# define BOOST_PP_SEQ_SIZE_54(_) BOOST_PP_SEQ_SIZE_55 +# define BOOST_PP_SEQ_SIZE_55(_) BOOST_PP_SEQ_SIZE_56 +# define BOOST_PP_SEQ_SIZE_56(_) BOOST_PP_SEQ_SIZE_57 +# define BOOST_PP_SEQ_SIZE_57(_) BOOST_PP_SEQ_SIZE_58 +# define BOOST_PP_SEQ_SIZE_58(_) BOOST_PP_SEQ_SIZE_59 +# define BOOST_PP_SEQ_SIZE_59(_) BOOST_PP_SEQ_SIZE_60 +# define BOOST_PP_SEQ_SIZE_60(_) BOOST_PP_SEQ_SIZE_61 +# define BOOST_PP_SEQ_SIZE_61(_) BOOST_PP_SEQ_SIZE_62 +# define BOOST_PP_SEQ_SIZE_62(_) BOOST_PP_SEQ_SIZE_63 +# define BOOST_PP_SEQ_SIZE_63(_) BOOST_PP_SEQ_SIZE_64 +# define BOOST_PP_SEQ_SIZE_64(_) BOOST_PP_SEQ_SIZE_65 +# define BOOST_PP_SEQ_SIZE_65(_) BOOST_PP_SEQ_SIZE_66 +# define BOOST_PP_SEQ_SIZE_66(_) BOOST_PP_SEQ_SIZE_67 +# define BOOST_PP_SEQ_SIZE_67(_) BOOST_PP_SEQ_SIZE_68 +# define BOOST_PP_SEQ_SIZE_68(_) BOOST_PP_SEQ_SIZE_69 +# define BOOST_PP_SEQ_SIZE_69(_) BOOST_PP_SEQ_SIZE_70 +# define BOOST_PP_SEQ_SIZE_70(_) BOOST_PP_SEQ_SIZE_71 +# define BOOST_PP_SEQ_SIZE_71(_) BOOST_PP_SEQ_SIZE_72 +# define BOOST_PP_SEQ_SIZE_72(_) BOOST_PP_SEQ_SIZE_73 +# define BOOST_PP_SEQ_SIZE_73(_) BOOST_PP_SEQ_SIZE_74 +# define BOOST_PP_SEQ_SIZE_74(_) BOOST_PP_SEQ_SIZE_75 +# define BOOST_PP_SEQ_SIZE_75(_) BOOST_PP_SEQ_SIZE_76 +# define BOOST_PP_SEQ_SIZE_76(_) BOOST_PP_SEQ_SIZE_77 +# define BOOST_PP_SEQ_SIZE_77(_) BOOST_PP_SEQ_SIZE_78 +# define BOOST_PP_SEQ_SIZE_78(_) BOOST_PP_SEQ_SIZE_79 +# define BOOST_PP_SEQ_SIZE_79(_) BOOST_PP_SEQ_SIZE_80 +# define BOOST_PP_SEQ_SIZE_80(_) BOOST_PP_SEQ_SIZE_81 +# define BOOST_PP_SEQ_SIZE_81(_) BOOST_PP_SEQ_SIZE_82 +# define BOOST_PP_SEQ_SIZE_82(_) BOOST_PP_SEQ_SIZE_83 +# define BOOST_PP_SEQ_SIZE_83(_) BOOST_PP_SEQ_SIZE_84 +# define BOOST_PP_SEQ_SIZE_84(_) BOOST_PP_SEQ_SIZE_85 +# define BOOST_PP_SEQ_SIZE_85(_) BOOST_PP_SEQ_SIZE_86 +# define BOOST_PP_SEQ_SIZE_86(_) BOOST_PP_SEQ_SIZE_87 +# define BOOST_PP_SEQ_SIZE_87(_) BOOST_PP_SEQ_SIZE_88 +# define BOOST_PP_SEQ_SIZE_88(_) BOOST_PP_SEQ_SIZE_89 +# define BOOST_PP_SEQ_SIZE_89(_) BOOST_PP_SEQ_SIZE_90 +# define BOOST_PP_SEQ_SIZE_90(_) BOOST_PP_SEQ_SIZE_91 +# define BOOST_PP_SEQ_SIZE_91(_) BOOST_PP_SEQ_SIZE_92 +# define BOOST_PP_SEQ_SIZE_92(_) BOOST_PP_SEQ_SIZE_93 +# define BOOST_PP_SEQ_SIZE_93(_) BOOST_PP_SEQ_SIZE_94 +# define BOOST_PP_SEQ_SIZE_94(_) BOOST_PP_SEQ_SIZE_95 +# define BOOST_PP_SEQ_SIZE_95(_) BOOST_PP_SEQ_SIZE_96 +# define BOOST_PP_SEQ_SIZE_96(_) BOOST_PP_SEQ_SIZE_97 +# define BOOST_PP_SEQ_SIZE_97(_) BOOST_PP_SEQ_SIZE_98 +# define BOOST_PP_SEQ_SIZE_98(_) BOOST_PP_SEQ_SIZE_99 +# define BOOST_PP_SEQ_SIZE_99(_) BOOST_PP_SEQ_SIZE_100 +# define BOOST_PP_SEQ_SIZE_100(_) BOOST_PP_SEQ_SIZE_101 +# define BOOST_PP_SEQ_SIZE_101(_) BOOST_PP_SEQ_SIZE_102 +# define BOOST_PP_SEQ_SIZE_102(_) BOOST_PP_SEQ_SIZE_103 +# define BOOST_PP_SEQ_SIZE_103(_) BOOST_PP_SEQ_SIZE_104 +# define BOOST_PP_SEQ_SIZE_104(_) BOOST_PP_SEQ_SIZE_105 +# define BOOST_PP_SEQ_SIZE_105(_) BOOST_PP_SEQ_SIZE_106 +# define BOOST_PP_SEQ_SIZE_106(_) BOOST_PP_SEQ_SIZE_107 +# define BOOST_PP_SEQ_SIZE_107(_) BOOST_PP_SEQ_SIZE_108 +# define BOOST_PP_SEQ_SIZE_108(_) BOOST_PP_SEQ_SIZE_109 +# define BOOST_PP_SEQ_SIZE_109(_) BOOST_PP_SEQ_SIZE_110 +# define BOOST_PP_SEQ_SIZE_110(_) BOOST_PP_SEQ_SIZE_111 +# define BOOST_PP_SEQ_SIZE_111(_) BOOST_PP_SEQ_SIZE_112 +# define BOOST_PP_SEQ_SIZE_112(_) BOOST_PP_SEQ_SIZE_113 +# define BOOST_PP_SEQ_SIZE_113(_) BOOST_PP_SEQ_SIZE_114 +# define BOOST_PP_SEQ_SIZE_114(_) BOOST_PP_SEQ_SIZE_115 +# define BOOST_PP_SEQ_SIZE_115(_) BOOST_PP_SEQ_SIZE_116 +# define BOOST_PP_SEQ_SIZE_116(_) BOOST_PP_SEQ_SIZE_117 +# define BOOST_PP_SEQ_SIZE_117(_) BOOST_PP_SEQ_SIZE_118 +# define BOOST_PP_SEQ_SIZE_118(_) BOOST_PP_SEQ_SIZE_119 +# define BOOST_PP_SEQ_SIZE_119(_) BOOST_PP_SEQ_SIZE_120 +# define BOOST_PP_SEQ_SIZE_120(_) BOOST_PP_SEQ_SIZE_121 +# define BOOST_PP_SEQ_SIZE_121(_) BOOST_PP_SEQ_SIZE_122 +# define BOOST_PP_SEQ_SIZE_122(_) BOOST_PP_SEQ_SIZE_123 +# define BOOST_PP_SEQ_SIZE_123(_) BOOST_PP_SEQ_SIZE_124 +# define BOOST_PP_SEQ_SIZE_124(_) BOOST_PP_SEQ_SIZE_125 +# define BOOST_PP_SEQ_SIZE_125(_) BOOST_PP_SEQ_SIZE_126 +# define BOOST_PP_SEQ_SIZE_126(_) BOOST_PP_SEQ_SIZE_127 +# define BOOST_PP_SEQ_SIZE_127(_) BOOST_PP_SEQ_SIZE_128 +# define BOOST_PP_SEQ_SIZE_128(_) BOOST_PP_SEQ_SIZE_129 +# define BOOST_PP_SEQ_SIZE_129(_) BOOST_PP_SEQ_SIZE_130 +# define BOOST_PP_SEQ_SIZE_130(_) BOOST_PP_SEQ_SIZE_131 +# define BOOST_PP_SEQ_SIZE_131(_) BOOST_PP_SEQ_SIZE_132 +# define BOOST_PP_SEQ_SIZE_132(_) BOOST_PP_SEQ_SIZE_133 +# define BOOST_PP_SEQ_SIZE_133(_) BOOST_PP_SEQ_SIZE_134 +# define BOOST_PP_SEQ_SIZE_134(_) BOOST_PP_SEQ_SIZE_135 +# define BOOST_PP_SEQ_SIZE_135(_) BOOST_PP_SEQ_SIZE_136 +# define BOOST_PP_SEQ_SIZE_136(_) BOOST_PP_SEQ_SIZE_137 +# define BOOST_PP_SEQ_SIZE_137(_) BOOST_PP_SEQ_SIZE_138 +# define BOOST_PP_SEQ_SIZE_138(_) BOOST_PP_SEQ_SIZE_139 +# define BOOST_PP_SEQ_SIZE_139(_) BOOST_PP_SEQ_SIZE_140 +# define BOOST_PP_SEQ_SIZE_140(_) BOOST_PP_SEQ_SIZE_141 +# define BOOST_PP_SEQ_SIZE_141(_) BOOST_PP_SEQ_SIZE_142 +# define BOOST_PP_SEQ_SIZE_142(_) BOOST_PP_SEQ_SIZE_143 +# define BOOST_PP_SEQ_SIZE_143(_) BOOST_PP_SEQ_SIZE_144 +# define BOOST_PP_SEQ_SIZE_144(_) BOOST_PP_SEQ_SIZE_145 +# define BOOST_PP_SEQ_SIZE_145(_) BOOST_PP_SEQ_SIZE_146 +# define BOOST_PP_SEQ_SIZE_146(_) BOOST_PP_SEQ_SIZE_147 +# define BOOST_PP_SEQ_SIZE_147(_) BOOST_PP_SEQ_SIZE_148 +# define BOOST_PP_SEQ_SIZE_148(_) BOOST_PP_SEQ_SIZE_149 +# define BOOST_PP_SEQ_SIZE_149(_) BOOST_PP_SEQ_SIZE_150 +# define BOOST_PP_SEQ_SIZE_150(_) BOOST_PP_SEQ_SIZE_151 +# define BOOST_PP_SEQ_SIZE_151(_) BOOST_PP_SEQ_SIZE_152 +# define BOOST_PP_SEQ_SIZE_152(_) BOOST_PP_SEQ_SIZE_153 +# define BOOST_PP_SEQ_SIZE_153(_) BOOST_PP_SEQ_SIZE_154 +# define BOOST_PP_SEQ_SIZE_154(_) BOOST_PP_SEQ_SIZE_155 +# define BOOST_PP_SEQ_SIZE_155(_) BOOST_PP_SEQ_SIZE_156 +# define BOOST_PP_SEQ_SIZE_156(_) BOOST_PP_SEQ_SIZE_157 +# define BOOST_PP_SEQ_SIZE_157(_) BOOST_PP_SEQ_SIZE_158 +# define BOOST_PP_SEQ_SIZE_158(_) BOOST_PP_SEQ_SIZE_159 +# define BOOST_PP_SEQ_SIZE_159(_) BOOST_PP_SEQ_SIZE_160 +# define BOOST_PP_SEQ_SIZE_160(_) BOOST_PP_SEQ_SIZE_161 +# define BOOST_PP_SEQ_SIZE_161(_) BOOST_PP_SEQ_SIZE_162 +# define BOOST_PP_SEQ_SIZE_162(_) BOOST_PP_SEQ_SIZE_163 +# define BOOST_PP_SEQ_SIZE_163(_) BOOST_PP_SEQ_SIZE_164 +# define BOOST_PP_SEQ_SIZE_164(_) BOOST_PP_SEQ_SIZE_165 +# define BOOST_PP_SEQ_SIZE_165(_) BOOST_PP_SEQ_SIZE_166 +# define BOOST_PP_SEQ_SIZE_166(_) BOOST_PP_SEQ_SIZE_167 +# define BOOST_PP_SEQ_SIZE_167(_) BOOST_PP_SEQ_SIZE_168 +# define BOOST_PP_SEQ_SIZE_168(_) BOOST_PP_SEQ_SIZE_169 +# define BOOST_PP_SEQ_SIZE_169(_) BOOST_PP_SEQ_SIZE_170 +# define BOOST_PP_SEQ_SIZE_170(_) BOOST_PP_SEQ_SIZE_171 +# define BOOST_PP_SEQ_SIZE_171(_) BOOST_PP_SEQ_SIZE_172 +# define BOOST_PP_SEQ_SIZE_172(_) BOOST_PP_SEQ_SIZE_173 +# define BOOST_PP_SEQ_SIZE_173(_) BOOST_PP_SEQ_SIZE_174 +# define BOOST_PP_SEQ_SIZE_174(_) BOOST_PP_SEQ_SIZE_175 +# define BOOST_PP_SEQ_SIZE_175(_) BOOST_PP_SEQ_SIZE_176 +# define BOOST_PP_SEQ_SIZE_176(_) BOOST_PP_SEQ_SIZE_177 +# define BOOST_PP_SEQ_SIZE_177(_) BOOST_PP_SEQ_SIZE_178 +# define BOOST_PP_SEQ_SIZE_178(_) BOOST_PP_SEQ_SIZE_179 +# define BOOST_PP_SEQ_SIZE_179(_) BOOST_PP_SEQ_SIZE_180 +# define BOOST_PP_SEQ_SIZE_180(_) BOOST_PP_SEQ_SIZE_181 +# define BOOST_PP_SEQ_SIZE_181(_) BOOST_PP_SEQ_SIZE_182 +# define BOOST_PP_SEQ_SIZE_182(_) BOOST_PP_SEQ_SIZE_183 +# define BOOST_PP_SEQ_SIZE_183(_) BOOST_PP_SEQ_SIZE_184 +# define BOOST_PP_SEQ_SIZE_184(_) BOOST_PP_SEQ_SIZE_185 +# define BOOST_PP_SEQ_SIZE_185(_) BOOST_PP_SEQ_SIZE_186 +# define BOOST_PP_SEQ_SIZE_186(_) BOOST_PP_SEQ_SIZE_187 +# define BOOST_PP_SEQ_SIZE_187(_) BOOST_PP_SEQ_SIZE_188 +# define BOOST_PP_SEQ_SIZE_188(_) BOOST_PP_SEQ_SIZE_189 +# define BOOST_PP_SEQ_SIZE_189(_) BOOST_PP_SEQ_SIZE_190 +# define BOOST_PP_SEQ_SIZE_190(_) BOOST_PP_SEQ_SIZE_191 +# define BOOST_PP_SEQ_SIZE_191(_) BOOST_PP_SEQ_SIZE_192 +# define BOOST_PP_SEQ_SIZE_192(_) BOOST_PP_SEQ_SIZE_193 +# define BOOST_PP_SEQ_SIZE_193(_) BOOST_PP_SEQ_SIZE_194 +# define BOOST_PP_SEQ_SIZE_194(_) BOOST_PP_SEQ_SIZE_195 +# define BOOST_PP_SEQ_SIZE_195(_) BOOST_PP_SEQ_SIZE_196 +# define BOOST_PP_SEQ_SIZE_196(_) BOOST_PP_SEQ_SIZE_197 +# define BOOST_PP_SEQ_SIZE_197(_) BOOST_PP_SEQ_SIZE_198 +# define BOOST_PP_SEQ_SIZE_198(_) BOOST_PP_SEQ_SIZE_199 +# define BOOST_PP_SEQ_SIZE_199(_) BOOST_PP_SEQ_SIZE_200 +# define BOOST_PP_SEQ_SIZE_200(_) BOOST_PP_SEQ_SIZE_201 +# define BOOST_PP_SEQ_SIZE_201(_) BOOST_PP_SEQ_SIZE_202 +# define BOOST_PP_SEQ_SIZE_202(_) BOOST_PP_SEQ_SIZE_203 +# define BOOST_PP_SEQ_SIZE_203(_) BOOST_PP_SEQ_SIZE_204 +# define BOOST_PP_SEQ_SIZE_204(_) BOOST_PP_SEQ_SIZE_205 +# define BOOST_PP_SEQ_SIZE_205(_) BOOST_PP_SEQ_SIZE_206 +# define BOOST_PP_SEQ_SIZE_206(_) BOOST_PP_SEQ_SIZE_207 +# define BOOST_PP_SEQ_SIZE_207(_) BOOST_PP_SEQ_SIZE_208 +# define BOOST_PP_SEQ_SIZE_208(_) BOOST_PP_SEQ_SIZE_209 +# define BOOST_PP_SEQ_SIZE_209(_) BOOST_PP_SEQ_SIZE_210 +# define BOOST_PP_SEQ_SIZE_210(_) BOOST_PP_SEQ_SIZE_211 +# define BOOST_PP_SEQ_SIZE_211(_) BOOST_PP_SEQ_SIZE_212 +# define BOOST_PP_SEQ_SIZE_212(_) BOOST_PP_SEQ_SIZE_213 +# define BOOST_PP_SEQ_SIZE_213(_) BOOST_PP_SEQ_SIZE_214 +# define BOOST_PP_SEQ_SIZE_214(_) BOOST_PP_SEQ_SIZE_215 +# define BOOST_PP_SEQ_SIZE_215(_) BOOST_PP_SEQ_SIZE_216 +# define BOOST_PP_SEQ_SIZE_216(_) BOOST_PP_SEQ_SIZE_217 +# define BOOST_PP_SEQ_SIZE_217(_) BOOST_PP_SEQ_SIZE_218 +# define BOOST_PP_SEQ_SIZE_218(_) BOOST_PP_SEQ_SIZE_219 +# define BOOST_PP_SEQ_SIZE_219(_) BOOST_PP_SEQ_SIZE_220 +# define BOOST_PP_SEQ_SIZE_220(_) BOOST_PP_SEQ_SIZE_221 +# define BOOST_PP_SEQ_SIZE_221(_) BOOST_PP_SEQ_SIZE_222 +# define BOOST_PP_SEQ_SIZE_222(_) BOOST_PP_SEQ_SIZE_223 +# define BOOST_PP_SEQ_SIZE_223(_) BOOST_PP_SEQ_SIZE_224 +# define BOOST_PP_SEQ_SIZE_224(_) BOOST_PP_SEQ_SIZE_225 +# define BOOST_PP_SEQ_SIZE_225(_) BOOST_PP_SEQ_SIZE_226 +# define BOOST_PP_SEQ_SIZE_226(_) BOOST_PP_SEQ_SIZE_227 +# define BOOST_PP_SEQ_SIZE_227(_) BOOST_PP_SEQ_SIZE_228 +# define BOOST_PP_SEQ_SIZE_228(_) BOOST_PP_SEQ_SIZE_229 +# define BOOST_PP_SEQ_SIZE_229(_) BOOST_PP_SEQ_SIZE_230 +# define BOOST_PP_SEQ_SIZE_230(_) BOOST_PP_SEQ_SIZE_231 +# define BOOST_PP_SEQ_SIZE_231(_) BOOST_PP_SEQ_SIZE_232 +# define BOOST_PP_SEQ_SIZE_232(_) BOOST_PP_SEQ_SIZE_233 +# define BOOST_PP_SEQ_SIZE_233(_) BOOST_PP_SEQ_SIZE_234 +# define BOOST_PP_SEQ_SIZE_234(_) BOOST_PP_SEQ_SIZE_235 +# define BOOST_PP_SEQ_SIZE_235(_) BOOST_PP_SEQ_SIZE_236 +# define BOOST_PP_SEQ_SIZE_236(_) BOOST_PP_SEQ_SIZE_237 +# define BOOST_PP_SEQ_SIZE_237(_) BOOST_PP_SEQ_SIZE_238 +# define BOOST_PP_SEQ_SIZE_238(_) BOOST_PP_SEQ_SIZE_239 +# define BOOST_PP_SEQ_SIZE_239(_) BOOST_PP_SEQ_SIZE_240 +# define BOOST_PP_SEQ_SIZE_240(_) BOOST_PP_SEQ_SIZE_241 +# define BOOST_PP_SEQ_SIZE_241(_) BOOST_PP_SEQ_SIZE_242 +# define BOOST_PP_SEQ_SIZE_242(_) BOOST_PP_SEQ_SIZE_243 +# define BOOST_PP_SEQ_SIZE_243(_) BOOST_PP_SEQ_SIZE_244 +# define BOOST_PP_SEQ_SIZE_244(_) BOOST_PP_SEQ_SIZE_245 +# define BOOST_PP_SEQ_SIZE_245(_) BOOST_PP_SEQ_SIZE_246 +# define BOOST_PP_SEQ_SIZE_246(_) BOOST_PP_SEQ_SIZE_247 +# define BOOST_PP_SEQ_SIZE_247(_) BOOST_PP_SEQ_SIZE_248 +# define BOOST_PP_SEQ_SIZE_248(_) BOOST_PP_SEQ_SIZE_249 +# define BOOST_PP_SEQ_SIZE_249(_) BOOST_PP_SEQ_SIZE_250 +# define BOOST_PP_SEQ_SIZE_250(_) BOOST_PP_SEQ_SIZE_251 +# define BOOST_PP_SEQ_SIZE_251(_) BOOST_PP_SEQ_SIZE_252 +# define BOOST_PP_SEQ_SIZE_252(_) BOOST_PP_SEQ_SIZE_253 +# define BOOST_PP_SEQ_SIZE_253(_) BOOST_PP_SEQ_SIZE_254 +# define BOOST_PP_SEQ_SIZE_254(_) BOOST_PP_SEQ_SIZE_255 +# define BOOST_PP_SEQ_SIZE_255(_) BOOST_PP_SEQ_SIZE_256 +# define BOOST_PP_SEQ_SIZE_256(_) BOOST_PP_SEQ_SIZE_257 +# +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_0 0 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_1 1 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_2 2 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 4 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_5 5 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_6 6 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_7 7 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_8 8 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_9 9 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_10 10 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_11 11 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_12 12 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_13 13 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_14 14 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_15 15 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_16 16 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_17 17 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_18 18 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_19 19 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_20 20 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_21 21 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_22 22 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_23 23 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_24 24 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_25 25 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_26 26 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_27 27 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_28 28 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_29 29 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_30 30 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_31 31 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_32 32 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_33 33 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_34 34 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_35 35 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_36 36 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_37 37 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_38 38 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_39 39 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_40 40 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_41 41 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_42 42 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_43 43 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_44 44 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_45 45 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_46 46 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_47 47 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_48 48 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_49 49 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_50 50 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_51 51 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_52 52 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_53 53 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_54 54 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_55 55 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_56 56 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_57 57 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_58 58 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_59 59 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_60 60 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_61 61 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_62 62 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_63 63 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_64 64 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_65 65 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_66 66 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_67 67 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_68 68 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_69 69 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_70 70 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_71 71 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_72 72 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_73 73 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_74 74 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_75 75 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_76 76 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_77 77 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_78 78 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_79 79 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_80 80 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_81 81 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_82 82 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_83 83 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_84 84 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_85 85 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_86 86 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_87 87 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_88 88 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_89 89 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_90 90 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_91 91 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_92 92 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_93 93 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_94 94 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_95 95 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_96 96 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_97 97 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_98 98 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_99 99 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_100 100 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_101 101 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_102 102 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_103 103 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_104 104 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_105 105 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_106 106 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_107 107 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_108 108 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_109 109 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_110 110 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_111 111 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_112 112 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_113 113 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_114 114 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_115 115 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_116 116 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_117 117 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_118 118 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_119 119 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_120 120 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_121 121 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_122 122 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_123 123 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_124 124 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_125 125 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_126 126 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_127 127 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_128 128 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_129 129 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_130 130 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_131 131 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_132 132 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_133 133 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_134 134 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_135 135 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_136 136 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_137 137 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_138 138 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_139 139 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_140 140 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_141 141 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_142 142 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_143 143 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_144 144 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_145 145 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_146 146 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_147 147 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_148 148 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_149 149 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_150 150 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_151 151 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_152 152 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_153 153 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_154 154 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_155 155 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_156 156 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_157 157 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_158 158 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_159 159 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_160 160 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_161 161 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_162 162 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_163 163 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_164 164 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_165 165 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_166 166 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_167 167 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_168 168 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_169 169 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_170 170 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_171 171 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_172 172 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_173 173 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_174 174 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_175 175 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_176 176 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_177 177 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_178 178 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_179 179 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_180 180 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_181 181 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_182 182 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_183 183 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_184 184 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_185 185 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_186 186 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_187 187 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_188 188 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_189 189 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_190 190 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_191 191 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_192 192 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_193 193 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_194 194 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_195 195 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_196 196 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_197 197 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_198 198 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_199 199 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_200 200 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_201 201 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_202 202 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_203 203 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_204 204 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_205 205 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_206 206 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_207 207 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_208 208 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_209 209 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_210 210 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_211 211 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_212 212 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_213 213 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_214 214 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_215 215 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_216 216 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_217 217 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_218 218 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_219 219 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_220 220 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_221 221 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_222 222 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_223 223 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_224 224 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_225 225 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_226 226 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_227 227 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_228 228 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_229 229 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_230 230 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_231 231 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_232 232 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_233 233 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_234 234 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_235 235 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_236 236 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_237 237 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_238 238 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_239 239 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_240 240 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_241 241 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_242 242 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_243 243 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_244 244 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_245 245 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_246 246 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_247 247 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_248 248 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_249 249 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_250 250 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_251 251 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_252 252 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_253 253 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_254 254 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_255 255 +# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_256 256 +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/def.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/def.hpp new file mode 100644 index 00000000..885099e5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/def.hpp @@ -0,0 +1,49 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP +# define BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP +# +# /* BOOST_PP_SLOT_OFFSET_x */ +# +# define BOOST_PP_SLOT_OFFSET_10(x) (x) % 1000000000UL +# define BOOST_PP_SLOT_OFFSET_9(x) BOOST_PP_SLOT_OFFSET_10(x) % 100000000UL +# define BOOST_PP_SLOT_OFFSET_8(x) BOOST_PP_SLOT_OFFSET_9(x) % 10000000UL +# define BOOST_PP_SLOT_OFFSET_7(x) BOOST_PP_SLOT_OFFSET_8(x) % 1000000UL +# define BOOST_PP_SLOT_OFFSET_6(x) BOOST_PP_SLOT_OFFSET_7(x) % 100000UL +# define BOOST_PP_SLOT_OFFSET_5(x) BOOST_PP_SLOT_OFFSET_6(x) % 10000UL +# define BOOST_PP_SLOT_OFFSET_4(x) BOOST_PP_SLOT_OFFSET_5(x) % 1000UL +# define BOOST_PP_SLOT_OFFSET_3(x) BOOST_PP_SLOT_OFFSET_4(x) % 100UL +# define BOOST_PP_SLOT_OFFSET_2(x) BOOST_PP_SLOT_OFFSET_3(x) % 10UL +# +# /* BOOST_PP_SLOT_CC_x */ +# +# define BOOST_PP_SLOT_CC_2(a, b) BOOST_PP_SLOT_CC_2_D(a, b) +# define BOOST_PP_SLOT_CC_3(a, b, c) BOOST_PP_SLOT_CC_3_D(a, b, c) +# define BOOST_PP_SLOT_CC_4(a, b, c, d) BOOST_PP_SLOT_CC_4_D(a, b, c, d) +# define BOOST_PP_SLOT_CC_5(a, b, c, d, e) BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) +# define BOOST_PP_SLOT_CC_6(a, b, c, d, e, f) BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) +# define BOOST_PP_SLOT_CC_7(a, b, c, d, e, f, g) BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) +# define BOOST_PP_SLOT_CC_8(a, b, c, d, e, f, g, h) BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) +# define BOOST_PP_SLOT_CC_9(a, b, c, d, e, f, g, h, i) BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) +# define BOOST_PP_SLOT_CC_10(a, b, c, d, e, f, g, h, i, j) BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) +# +# define BOOST_PP_SLOT_CC_2_D(a, b) a ## b +# define BOOST_PP_SLOT_CC_3_D(a, b, c) a ## b ## c +# define BOOST_PP_SLOT_CC_4_D(a, b, c, d) a ## b ## c ## d +# define BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) a ## b ## c ## d ## e +# define BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) a ## b ## c ## d ## e ## f +# define BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) a ## b ## c ## d ## e ## f ## g +# define BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) a ## b ## c ## d ## e ## f ## g ## h +# define BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) a ## b ## c ## d ## e ## f ## g ## h ## i +# define BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) a ## b ## c ## d ## e ## f ## g ## h ## i ## j +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/shared.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/shared.hpp new file mode 100644 index 00000000..c97ac54c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/shared.hpp @@ -0,0 +1,247 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PP_VALUE +# error BOOST_PP_ERROR: BOOST_PP_VALUE is not defined +# endif +# +# undef BOOST_PP_SLOT_TEMP_1 +# undef BOOST_PP_SLOT_TEMP_2 +# undef BOOST_PP_SLOT_TEMP_3 +# undef BOOST_PP_SLOT_TEMP_4 +# undef BOOST_PP_SLOT_TEMP_5 +# undef BOOST_PP_SLOT_TEMP_6 +# undef BOOST_PP_SLOT_TEMP_7 +# undef BOOST_PP_SLOT_TEMP_8 +# undef BOOST_PP_SLOT_TEMP_9 +# undef BOOST_PP_SLOT_TEMP_10 +# +# if (BOOST_PP_VALUE) / 1000000000UL == 0 +# define BOOST_PP_SLOT_TEMP_10 0 +# elif (BOOST_PP_VALUE) / 1000000000UL == 1 +# define BOOST_PP_SLOT_TEMP_10 1 +# elif (BOOST_PP_VALUE) / 1000000000UL == 2 +# define BOOST_PP_SLOT_TEMP_10 2 +# elif (BOOST_PP_VALUE) / 1000000000UL == 3 +# define BOOST_PP_SLOT_TEMP_10 3 +# elif (BOOST_PP_VALUE) / 1000000000UL == 4 +# define BOOST_PP_SLOT_TEMP_10 4 +# elif (BOOST_PP_VALUE) / 1000000000UL == 5 +# define BOOST_PP_SLOT_TEMP_10 5 +# elif (BOOST_PP_VALUE) / 1000000000UL == 6 +# define BOOST_PP_SLOT_TEMP_10 6 +# elif (BOOST_PP_VALUE) / 1000000000UL == 7 +# define BOOST_PP_SLOT_TEMP_10 7 +# elif (BOOST_PP_VALUE) / 1000000000UL == 8 +# define BOOST_PP_SLOT_TEMP_10 8 +# elif (BOOST_PP_VALUE) / 1000000000UL == 9 +# define BOOST_PP_SLOT_TEMP_10 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 0 +# define BOOST_PP_SLOT_TEMP_9 0 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 1 +# define BOOST_PP_SLOT_TEMP_9 1 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 2 +# define BOOST_PP_SLOT_TEMP_9 2 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 3 +# define BOOST_PP_SLOT_TEMP_9 3 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 4 +# define BOOST_PP_SLOT_TEMP_9 4 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 5 +# define BOOST_PP_SLOT_TEMP_9 5 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 6 +# define BOOST_PP_SLOT_TEMP_9 6 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 7 +# define BOOST_PP_SLOT_TEMP_9 7 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 8 +# define BOOST_PP_SLOT_TEMP_9 8 +# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 9 +# define BOOST_PP_SLOT_TEMP_9 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 0 +# define BOOST_PP_SLOT_TEMP_8 0 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 1 +# define BOOST_PP_SLOT_TEMP_8 1 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 2 +# define BOOST_PP_SLOT_TEMP_8 2 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 3 +# define BOOST_PP_SLOT_TEMP_8 3 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 4 +# define BOOST_PP_SLOT_TEMP_8 4 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 5 +# define BOOST_PP_SLOT_TEMP_8 5 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 6 +# define BOOST_PP_SLOT_TEMP_8 6 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 7 +# define BOOST_PP_SLOT_TEMP_8 7 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 8 +# define BOOST_PP_SLOT_TEMP_8 8 +# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 9 +# define BOOST_PP_SLOT_TEMP_8 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 0 +# define BOOST_PP_SLOT_TEMP_7 0 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 1 +# define BOOST_PP_SLOT_TEMP_7 1 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 2 +# define BOOST_PP_SLOT_TEMP_7 2 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 3 +# define BOOST_PP_SLOT_TEMP_7 3 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 4 +# define BOOST_PP_SLOT_TEMP_7 4 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 5 +# define BOOST_PP_SLOT_TEMP_7 5 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 6 +# define BOOST_PP_SLOT_TEMP_7 6 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 7 +# define BOOST_PP_SLOT_TEMP_7 7 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 8 +# define BOOST_PP_SLOT_TEMP_7 8 +# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 9 +# define BOOST_PP_SLOT_TEMP_7 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 0 +# define BOOST_PP_SLOT_TEMP_6 0 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 1 +# define BOOST_PP_SLOT_TEMP_6 1 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 2 +# define BOOST_PP_SLOT_TEMP_6 2 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 3 +# define BOOST_PP_SLOT_TEMP_6 3 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 4 +# define BOOST_PP_SLOT_TEMP_6 4 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 5 +# define BOOST_PP_SLOT_TEMP_6 5 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 6 +# define BOOST_PP_SLOT_TEMP_6 6 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 7 +# define BOOST_PP_SLOT_TEMP_6 7 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 8 +# define BOOST_PP_SLOT_TEMP_6 8 +# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 9 +# define BOOST_PP_SLOT_TEMP_6 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 0 +# define BOOST_PP_SLOT_TEMP_5 0 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 1 +# define BOOST_PP_SLOT_TEMP_5 1 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 2 +# define BOOST_PP_SLOT_TEMP_5 2 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 3 +# define BOOST_PP_SLOT_TEMP_5 3 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 4 +# define BOOST_PP_SLOT_TEMP_5 4 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 5 +# define BOOST_PP_SLOT_TEMP_5 5 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 6 +# define BOOST_PP_SLOT_TEMP_5 6 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 7 +# define BOOST_PP_SLOT_TEMP_5 7 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 8 +# define BOOST_PP_SLOT_TEMP_5 8 +# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 9 +# define BOOST_PP_SLOT_TEMP_5 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 0 +# define BOOST_PP_SLOT_TEMP_4 0 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 1 +# define BOOST_PP_SLOT_TEMP_4 1 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 2 +# define BOOST_PP_SLOT_TEMP_4 2 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 3 +# define BOOST_PP_SLOT_TEMP_4 3 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 4 +# define BOOST_PP_SLOT_TEMP_4 4 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 5 +# define BOOST_PP_SLOT_TEMP_4 5 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 6 +# define BOOST_PP_SLOT_TEMP_4 6 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 7 +# define BOOST_PP_SLOT_TEMP_4 7 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 8 +# define BOOST_PP_SLOT_TEMP_4 8 +# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 9 +# define BOOST_PP_SLOT_TEMP_4 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 0 +# define BOOST_PP_SLOT_TEMP_3 0 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 1 +# define BOOST_PP_SLOT_TEMP_3 1 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 2 +# define BOOST_PP_SLOT_TEMP_3 2 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 3 +# define BOOST_PP_SLOT_TEMP_3 3 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 4 +# define BOOST_PP_SLOT_TEMP_3 4 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 5 +# define BOOST_PP_SLOT_TEMP_3 5 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 6 +# define BOOST_PP_SLOT_TEMP_3 6 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 7 +# define BOOST_PP_SLOT_TEMP_3 7 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 8 +# define BOOST_PP_SLOT_TEMP_3 8 +# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 9 +# define BOOST_PP_SLOT_TEMP_3 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 0 +# define BOOST_PP_SLOT_TEMP_2 0 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 1 +# define BOOST_PP_SLOT_TEMP_2 1 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 2 +# define BOOST_PP_SLOT_TEMP_2 2 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 3 +# define BOOST_PP_SLOT_TEMP_2 3 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 4 +# define BOOST_PP_SLOT_TEMP_2 4 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 5 +# define BOOST_PP_SLOT_TEMP_2 5 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 6 +# define BOOST_PP_SLOT_TEMP_2 6 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 7 +# define BOOST_PP_SLOT_TEMP_2 7 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 8 +# define BOOST_PP_SLOT_TEMP_2 8 +# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 9 +# define BOOST_PP_SLOT_TEMP_2 9 +# endif +# +# if BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 0 +# define BOOST_PP_SLOT_TEMP_1 0 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 1 +# define BOOST_PP_SLOT_TEMP_1 1 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 2 +# define BOOST_PP_SLOT_TEMP_1 2 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 3 +# define BOOST_PP_SLOT_TEMP_1 3 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 4 +# define BOOST_PP_SLOT_TEMP_1 4 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 5 +# define BOOST_PP_SLOT_TEMP_1 5 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 6 +# define BOOST_PP_SLOT_TEMP_1 6 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 7 +# define BOOST_PP_SLOT_TEMP_1 7 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 8 +# define BOOST_PP_SLOT_TEMP_1 8 +# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 9 +# define BOOST_PP_SLOT_TEMP_1 9 +# endif +# +# undef BOOST_PP_VALUE diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot1.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot1.hpp new file mode 100644 index 00000000..2e5b4539 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot1.hpp @@ -0,0 +1,267 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_SLOT_1 +# +# undef BOOST_PP_SLOT_1_DIGIT_1 +# undef BOOST_PP_SLOT_1_DIGIT_2 +# undef BOOST_PP_SLOT_1_DIGIT_3 +# undef BOOST_PP_SLOT_1_DIGIT_4 +# undef BOOST_PP_SLOT_1_DIGIT_5 +# undef BOOST_PP_SLOT_1_DIGIT_6 +# undef BOOST_PP_SLOT_1_DIGIT_7 +# undef BOOST_PP_SLOT_1_DIGIT_8 +# undef BOOST_PP_SLOT_1_DIGIT_9 +# undef BOOST_PP_SLOT_1_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_10 == 0 +# define BOOST_PP_SLOT_1_DIGIT_10 0 +# elif BOOST_PP_SLOT_TEMP_10 == 1 +# define BOOST_PP_SLOT_1_DIGIT_10 1 +# elif BOOST_PP_SLOT_TEMP_10 == 2 +# define BOOST_PP_SLOT_1_DIGIT_10 2 +# elif BOOST_PP_SLOT_TEMP_10 == 3 +# define BOOST_PP_SLOT_1_DIGIT_10 3 +# elif BOOST_PP_SLOT_TEMP_10 == 4 +# define BOOST_PP_SLOT_1_DIGIT_10 4 +# elif BOOST_PP_SLOT_TEMP_10 == 5 +# define BOOST_PP_SLOT_1_DIGIT_10 5 +# elif BOOST_PP_SLOT_TEMP_10 == 6 +# define BOOST_PP_SLOT_1_DIGIT_10 6 +# elif BOOST_PP_SLOT_TEMP_10 == 7 +# define BOOST_PP_SLOT_1_DIGIT_10 7 +# elif BOOST_PP_SLOT_TEMP_10 == 8 +# define BOOST_PP_SLOT_1_DIGIT_10 8 +# elif BOOST_PP_SLOT_TEMP_10 == 9 +# define BOOST_PP_SLOT_1_DIGIT_10 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_9 == 0 +# define BOOST_PP_SLOT_1_DIGIT_9 0 +# elif BOOST_PP_SLOT_TEMP_9 == 1 +# define BOOST_PP_SLOT_1_DIGIT_9 1 +# elif BOOST_PP_SLOT_TEMP_9 == 2 +# define BOOST_PP_SLOT_1_DIGIT_9 2 +# elif BOOST_PP_SLOT_TEMP_9 == 3 +# define BOOST_PP_SLOT_1_DIGIT_9 3 +# elif BOOST_PP_SLOT_TEMP_9 == 4 +# define BOOST_PP_SLOT_1_DIGIT_9 4 +# elif BOOST_PP_SLOT_TEMP_9 == 5 +# define BOOST_PP_SLOT_1_DIGIT_9 5 +# elif BOOST_PP_SLOT_TEMP_9 == 6 +# define BOOST_PP_SLOT_1_DIGIT_9 6 +# elif BOOST_PP_SLOT_TEMP_9 == 7 +# define BOOST_PP_SLOT_1_DIGIT_9 7 +# elif BOOST_PP_SLOT_TEMP_9 == 8 +# define BOOST_PP_SLOT_1_DIGIT_9 8 +# elif BOOST_PP_SLOT_TEMP_9 == 9 +# define BOOST_PP_SLOT_1_DIGIT_9 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_8 == 0 +# define BOOST_PP_SLOT_1_DIGIT_8 0 +# elif BOOST_PP_SLOT_TEMP_8 == 1 +# define BOOST_PP_SLOT_1_DIGIT_8 1 +# elif BOOST_PP_SLOT_TEMP_8 == 2 +# define BOOST_PP_SLOT_1_DIGIT_8 2 +# elif BOOST_PP_SLOT_TEMP_8 == 3 +# define BOOST_PP_SLOT_1_DIGIT_8 3 +# elif BOOST_PP_SLOT_TEMP_8 == 4 +# define BOOST_PP_SLOT_1_DIGIT_8 4 +# elif BOOST_PP_SLOT_TEMP_8 == 5 +# define BOOST_PP_SLOT_1_DIGIT_8 5 +# elif BOOST_PP_SLOT_TEMP_8 == 6 +# define BOOST_PP_SLOT_1_DIGIT_8 6 +# elif BOOST_PP_SLOT_TEMP_8 == 7 +# define BOOST_PP_SLOT_1_DIGIT_8 7 +# elif BOOST_PP_SLOT_TEMP_8 == 8 +# define BOOST_PP_SLOT_1_DIGIT_8 8 +# elif BOOST_PP_SLOT_TEMP_8 == 9 +# define BOOST_PP_SLOT_1_DIGIT_8 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_7 == 0 +# define BOOST_PP_SLOT_1_DIGIT_7 0 +# elif BOOST_PP_SLOT_TEMP_7 == 1 +# define BOOST_PP_SLOT_1_DIGIT_7 1 +# elif BOOST_PP_SLOT_TEMP_7 == 2 +# define BOOST_PP_SLOT_1_DIGIT_7 2 +# elif BOOST_PP_SLOT_TEMP_7 == 3 +# define BOOST_PP_SLOT_1_DIGIT_7 3 +# elif BOOST_PP_SLOT_TEMP_7 == 4 +# define BOOST_PP_SLOT_1_DIGIT_7 4 +# elif BOOST_PP_SLOT_TEMP_7 == 5 +# define BOOST_PP_SLOT_1_DIGIT_7 5 +# elif BOOST_PP_SLOT_TEMP_7 == 6 +# define BOOST_PP_SLOT_1_DIGIT_7 6 +# elif BOOST_PP_SLOT_TEMP_7 == 7 +# define BOOST_PP_SLOT_1_DIGIT_7 7 +# elif BOOST_PP_SLOT_TEMP_7 == 8 +# define BOOST_PP_SLOT_1_DIGIT_7 8 +# elif BOOST_PP_SLOT_TEMP_7 == 9 +# define BOOST_PP_SLOT_1_DIGIT_7 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_6 == 0 +# define BOOST_PP_SLOT_1_DIGIT_6 0 +# elif BOOST_PP_SLOT_TEMP_6 == 1 +# define BOOST_PP_SLOT_1_DIGIT_6 1 +# elif BOOST_PP_SLOT_TEMP_6 == 2 +# define BOOST_PP_SLOT_1_DIGIT_6 2 +# elif BOOST_PP_SLOT_TEMP_6 == 3 +# define BOOST_PP_SLOT_1_DIGIT_6 3 +# elif BOOST_PP_SLOT_TEMP_6 == 4 +# define BOOST_PP_SLOT_1_DIGIT_6 4 +# elif BOOST_PP_SLOT_TEMP_6 == 5 +# define BOOST_PP_SLOT_1_DIGIT_6 5 +# elif BOOST_PP_SLOT_TEMP_6 == 6 +# define BOOST_PP_SLOT_1_DIGIT_6 6 +# elif BOOST_PP_SLOT_TEMP_6 == 7 +# define BOOST_PP_SLOT_1_DIGIT_6 7 +# elif BOOST_PP_SLOT_TEMP_6 == 8 +# define BOOST_PP_SLOT_1_DIGIT_6 8 +# elif BOOST_PP_SLOT_TEMP_6 == 9 +# define BOOST_PP_SLOT_1_DIGIT_6 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_5 == 0 +# define BOOST_PP_SLOT_1_DIGIT_5 0 +# elif BOOST_PP_SLOT_TEMP_5 == 1 +# define BOOST_PP_SLOT_1_DIGIT_5 1 +# elif BOOST_PP_SLOT_TEMP_5 == 2 +# define BOOST_PP_SLOT_1_DIGIT_5 2 +# elif BOOST_PP_SLOT_TEMP_5 == 3 +# define BOOST_PP_SLOT_1_DIGIT_5 3 +# elif BOOST_PP_SLOT_TEMP_5 == 4 +# define BOOST_PP_SLOT_1_DIGIT_5 4 +# elif BOOST_PP_SLOT_TEMP_5 == 5 +# define BOOST_PP_SLOT_1_DIGIT_5 5 +# elif BOOST_PP_SLOT_TEMP_5 == 6 +# define BOOST_PP_SLOT_1_DIGIT_5 6 +# elif BOOST_PP_SLOT_TEMP_5 == 7 +# define BOOST_PP_SLOT_1_DIGIT_5 7 +# elif BOOST_PP_SLOT_TEMP_5 == 8 +# define BOOST_PP_SLOT_1_DIGIT_5 8 +# elif BOOST_PP_SLOT_TEMP_5 == 9 +# define BOOST_PP_SLOT_1_DIGIT_5 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_4 == 0 +# define BOOST_PP_SLOT_1_DIGIT_4 0 +# elif BOOST_PP_SLOT_TEMP_4 == 1 +# define BOOST_PP_SLOT_1_DIGIT_4 1 +# elif BOOST_PP_SLOT_TEMP_4 == 2 +# define BOOST_PP_SLOT_1_DIGIT_4 2 +# elif BOOST_PP_SLOT_TEMP_4 == 3 +# define BOOST_PP_SLOT_1_DIGIT_4 3 +# elif BOOST_PP_SLOT_TEMP_4 == 4 +# define BOOST_PP_SLOT_1_DIGIT_4 4 +# elif BOOST_PP_SLOT_TEMP_4 == 5 +# define BOOST_PP_SLOT_1_DIGIT_4 5 +# elif BOOST_PP_SLOT_TEMP_4 == 6 +# define BOOST_PP_SLOT_1_DIGIT_4 6 +# elif BOOST_PP_SLOT_TEMP_4 == 7 +# define BOOST_PP_SLOT_1_DIGIT_4 7 +# elif BOOST_PP_SLOT_TEMP_4 == 8 +# define BOOST_PP_SLOT_1_DIGIT_4 8 +# elif BOOST_PP_SLOT_TEMP_4 == 9 +# define BOOST_PP_SLOT_1_DIGIT_4 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_SLOT_1_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_SLOT_1_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_SLOT_1_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_SLOT_1_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_SLOT_1_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_SLOT_1_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_SLOT_1_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_SLOT_1_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_SLOT_1_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_SLOT_1_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_SLOT_1_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_SLOT_1_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_SLOT_1_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_SLOT_1_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_SLOT_1_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_SLOT_1_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_SLOT_1_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_SLOT_1_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_SLOT_1_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_SLOT_1_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_SLOT_1_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_SLOT_1_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_SLOT_1_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_SLOT_1_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_SLOT_1_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_SLOT_1_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_SLOT_1_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_SLOT_1_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_SLOT_1_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_SLOT_1_DIGIT_1 9 +# endif +# +# if BOOST_PP_SLOT_1_DIGIT_10 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_1_DIGIT_10, BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_9 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_8 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_7 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_6 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_5 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_4 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_3 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# elif BOOST_PP_SLOT_1_DIGIT_2 +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1) +# else +# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_1_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot2.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot2.hpp new file mode 100644 index 00000000..b675c98f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot2.hpp @@ -0,0 +1,267 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_SLOT_2 +# +# undef BOOST_PP_SLOT_2_DIGIT_1 +# undef BOOST_PP_SLOT_2_DIGIT_2 +# undef BOOST_PP_SLOT_2_DIGIT_3 +# undef BOOST_PP_SLOT_2_DIGIT_4 +# undef BOOST_PP_SLOT_2_DIGIT_5 +# undef BOOST_PP_SLOT_2_DIGIT_6 +# undef BOOST_PP_SLOT_2_DIGIT_7 +# undef BOOST_PP_SLOT_2_DIGIT_8 +# undef BOOST_PP_SLOT_2_DIGIT_9 +# undef BOOST_PP_SLOT_2_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_10 == 0 +# define BOOST_PP_SLOT_2_DIGIT_10 0 +# elif BOOST_PP_SLOT_TEMP_10 == 1 +# define BOOST_PP_SLOT_2_DIGIT_10 1 +# elif BOOST_PP_SLOT_TEMP_10 == 2 +# define BOOST_PP_SLOT_2_DIGIT_10 2 +# elif BOOST_PP_SLOT_TEMP_10 == 3 +# define BOOST_PP_SLOT_2_DIGIT_10 3 +# elif BOOST_PP_SLOT_TEMP_10 == 4 +# define BOOST_PP_SLOT_2_DIGIT_10 4 +# elif BOOST_PP_SLOT_TEMP_10 == 5 +# define BOOST_PP_SLOT_2_DIGIT_10 5 +# elif BOOST_PP_SLOT_TEMP_10 == 6 +# define BOOST_PP_SLOT_2_DIGIT_10 6 +# elif BOOST_PP_SLOT_TEMP_10 == 7 +# define BOOST_PP_SLOT_2_DIGIT_10 7 +# elif BOOST_PP_SLOT_TEMP_10 == 8 +# define BOOST_PP_SLOT_2_DIGIT_10 8 +# elif BOOST_PP_SLOT_TEMP_10 == 9 +# define BOOST_PP_SLOT_2_DIGIT_10 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_9 == 0 +# define BOOST_PP_SLOT_2_DIGIT_9 0 +# elif BOOST_PP_SLOT_TEMP_9 == 1 +# define BOOST_PP_SLOT_2_DIGIT_9 1 +# elif BOOST_PP_SLOT_TEMP_9 == 2 +# define BOOST_PP_SLOT_2_DIGIT_9 2 +# elif BOOST_PP_SLOT_TEMP_9 == 3 +# define BOOST_PP_SLOT_2_DIGIT_9 3 +# elif BOOST_PP_SLOT_TEMP_9 == 4 +# define BOOST_PP_SLOT_2_DIGIT_9 4 +# elif BOOST_PP_SLOT_TEMP_9 == 5 +# define BOOST_PP_SLOT_2_DIGIT_9 5 +# elif BOOST_PP_SLOT_TEMP_9 == 6 +# define BOOST_PP_SLOT_2_DIGIT_9 6 +# elif BOOST_PP_SLOT_TEMP_9 == 7 +# define BOOST_PP_SLOT_2_DIGIT_9 7 +# elif BOOST_PP_SLOT_TEMP_9 == 8 +# define BOOST_PP_SLOT_2_DIGIT_9 8 +# elif BOOST_PP_SLOT_TEMP_9 == 9 +# define BOOST_PP_SLOT_2_DIGIT_9 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_8 == 0 +# define BOOST_PP_SLOT_2_DIGIT_8 0 +# elif BOOST_PP_SLOT_TEMP_8 == 1 +# define BOOST_PP_SLOT_2_DIGIT_8 1 +# elif BOOST_PP_SLOT_TEMP_8 == 2 +# define BOOST_PP_SLOT_2_DIGIT_8 2 +# elif BOOST_PP_SLOT_TEMP_8 == 3 +# define BOOST_PP_SLOT_2_DIGIT_8 3 +# elif BOOST_PP_SLOT_TEMP_8 == 4 +# define BOOST_PP_SLOT_2_DIGIT_8 4 +# elif BOOST_PP_SLOT_TEMP_8 == 5 +# define BOOST_PP_SLOT_2_DIGIT_8 5 +# elif BOOST_PP_SLOT_TEMP_8 == 6 +# define BOOST_PP_SLOT_2_DIGIT_8 6 +# elif BOOST_PP_SLOT_TEMP_8 == 7 +# define BOOST_PP_SLOT_2_DIGIT_8 7 +# elif BOOST_PP_SLOT_TEMP_8 == 8 +# define BOOST_PP_SLOT_2_DIGIT_8 8 +# elif BOOST_PP_SLOT_TEMP_8 == 9 +# define BOOST_PP_SLOT_2_DIGIT_8 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_7 == 0 +# define BOOST_PP_SLOT_2_DIGIT_7 0 +# elif BOOST_PP_SLOT_TEMP_7 == 1 +# define BOOST_PP_SLOT_2_DIGIT_7 1 +# elif BOOST_PP_SLOT_TEMP_7 == 2 +# define BOOST_PP_SLOT_2_DIGIT_7 2 +# elif BOOST_PP_SLOT_TEMP_7 == 3 +# define BOOST_PP_SLOT_2_DIGIT_7 3 +# elif BOOST_PP_SLOT_TEMP_7 == 4 +# define BOOST_PP_SLOT_2_DIGIT_7 4 +# elif BOOST_PP_SLOT_TEMP_7 == 5 +# define BOOST_PP_SLOT_2_DIGIT_7 5 +# elif BOOST_PP_SLOT_TEMP_7 == 6 +# define BOOST_PP_SLOT_2_DIGIT_7 6 +# elif BOOST_PP_SLOT_TEMP_7 == 7 +# define BOOST_PP_SLOT_2_DIGIT_7 7 +# elif BOOST_PP_SLOT_TEMP_7 == 8 +# define BOOST_PP_SLOT_2_DIGIT_7 8 +# elif BOOST_PP_SLOT_TEMP_7 == 9 +# define BOOST_PP_SLOT_2_DIGIT_7 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_6 == 0 +# define BOOST_PP_SLOT_2_DIGIT_6 0 +# elif BOOST_PP_SLOT_TEMP_6 == 1 +# define BOOST_PP_SLOT_2_DIGIT_6 1 +# elif BOOST_PP_SLOT_TEMP_6 == 2 +# define BOOST_PP_SLOT_2_DIGIT_6 2 +# elif BOOST_PP_SLOT_TEMP_6 == 3 +# define BOOST_PP_SLOT_2_DIGIT_6 3 +# elif BOOST_PP_SLOT_TEMP_6 == 4 +# define BOOST_PP_SLOT_2_DIGIT_6 4 +# elif BOOST_PP_SLOT_TEMP_6 == 5 +# define BOOST_PP_SLOT_2_DIGIT_6 5 +# elif BOOST_PP_SLOT_TEMP_6 == 6 +# define BOOST_PP_SLOT_2_DIGIT_6 6 +# elif BOOST_PP_SLOT_TEMP_6 == 7 +# define BOOST_PP_SLOT_2_DIGIT_6 7 +# elif BOOST_PP_SLOT_TEMP_6 == 8 +# define BOOST_PP_SLOT_2_DIGIT_6 8 +# elif BOOST_PP_SLOT_TEMP_6 == 9 +# define BOOST_PP_SLOT_2_DIGIT_6 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_5 == 0 +# define BOOST_PP_SLOT_2_DIGIT_5 0 +# elif BOOST_PP_SLOT_TEMP_5 == 1 +# define BOOST_PP_SLOT_2_DIGIT_5 1 +# elif BOOST_PP_SLOT_TEMP_5 == 2 +# define BOOST_PP_SLOT_2_DIGIT_5 2 +# elif BOOST_PP_SLOT_TEMP_5 == 3 +# define BOOST_PP_SLOT_2_DIGIT_5 3 +# elif BOOST_PP_SLOT_TEMP_5 == 4 +# define BOOST_PP_SLOT_2_DIGIT_5 4 +# elif BOOST_PP_SLOT_TEMP_5 == 5 +# define BOOST_PP_SLOT_2_DIGIT_5 5 +# elif BOOST_PP_SLOT_TEMP_5 == 6 +# define BOOST_PP_SLOT_2_DIGIT_5 6 +# elif BOOST_PP_SLOT_TEMP_5 == 7 +# define BOOST_PP_SLOT_2_DIGIT_5 7 +# elif BOOST_PP_SLOT_TEMP_5 == 8 +# define BOOST_PP_SLOT_2_DIGIT_5 8 +# elif BOOST_PP_SLOT_TEMP_5 == 9 +# define BOOST_PP_SLOT_2_DIGIT_5 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_4 == 0 +# define BOOST_PP_SLOT_2_DIGIT_4 0 +# elif BOOST_PP_SLOT_TEMP_4 == 1 +# define BOOST_PP_SLOT_2_DIGIT_4 1 +# elif BOOST_PP_SLOT_TEMP_4 == 2 +# define BOOST_PP_SLOT_2_DIGIT_4 2 +# elif BOOST_PP_SLOT_TEMP_4 == 3 +# define BOOST_PP_SLOT_2_DIGIT_4 3 +# elif BOOST_PP_SLOT_TEMP_4 == 4 +# define BOOST_PP_SLOT_2_DIGIT_4 4 +# elif BOOST_PP_SLOT_TEMP_4 == 5 +# define BOOST_PP_SLOT_2_DIGIT_4 5 +# elif BOOST_PP_SLOT_TEMP_4 == 6 +# define BOOST_PP_SLOT_2_DIGIT_4 6 +# elif BOOST_PP_SLOT_TEMP_4 == 7 +# define BOOST_PP_SLOT_2_DIGIT_4 7 +# elif BOOST_PP_SLOT_TEMP_4 == 8 +# define BOOST_PP_SLOT_2_DIGIT_4 8 +# elif BOOST_PP_SLOT_TEMP_4 == 9 +# define BOOST_PP_SLOT_2_DIGIT_4 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_SLOT_2_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_SLOT_2_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_SLOT_2_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_SLOT_2_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_SLOT_2_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_SLOT_2_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_SLOT_2_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_SLOT_2_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_SLOT_2_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_SLOT_2_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_SLOT_2_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_SLOT_2_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_SLOT_2_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_SLOT_2_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_SLOT_2_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_SLOT_2_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_SLOT_2_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_SLOT_2_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_SLOT_2_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_SLOT_2_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_SLOT_2_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_SLOT_2_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_SLOT_2_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_SLOT_2_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_SLOT_2_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_SLOT_2_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_SLOT_2_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_SLOT_2_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_SLOT_2_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_SLOT_2_DIGIT_1 9 +# endif +# +# if BOOST_PP_SLOT_2_DIGIT_10 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_2_DIGIT_10, BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_9 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_8 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_7 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_6 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_5 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_4 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_3 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# elif BOOST_PP_SLOT_2_DIGIT_2 +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1) +# else +# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_2_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot3.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot3.hpp new file mode 100644 index 00000000..707aa724 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot3.hpp @@ -0,0 +1,267 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_SLOT_3 +# +# undef BOOST_PP_SLOT_3_DIGIT_1 +# undef BOOST_PP_SLOT_3_DIGIT_2 +# undef BOOST_PP_SLOT_3_DIGIT_3 +# undef BOOST_PP_SLOT_3_DIGIT_4 +# undef BOOST_PP_SLOT_3_DIGIT_5 +# undef BOOST_PP_SLOT_3_DIGIT_6 +# undef BOOST_PP_SLOT_3_DIGIT_7 +# undef BOOST_PP_SLOT_3_DIGIT_8 +# undef BOOST_PP_SLOT_3_DIGIT_9 +# undef BOOST_PP_SLOT_3_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_10 == 0 +# define BOOST_PP_SLOT_3_DIGIT_10 0 +# elif BOOST_PP_SLOT_TEMP_10 == 1 +# define BOOST_PP_SLOT_3_DIGIT_10 1 +# elif BOOST_PP_SLOT_TEMP_10 == 2 +# define BOOST_PP_SLOT_3_DIGIT_10 2 +# elif BOOST_PP_SLOT_TEMP_10 == 3 +# define BOOST_PP_SLOT_3_DIGIT_10 3 +# elif BOOST_PP_SLOT_TEMP_10 == 4 +# define BOOST_PP_SLOT_3_DIGIT_10 4 +# elif BOOST_PP_SLOT_TEMP_10 == 5 +# define BOOST_PP_SLOT_3_DIGIT_10 5 +# elif BOOST_PP_SLOT_TEMP_10 == 6 +# define BOOST_PP_SLOT_3_DIGIT_10 6 +# elif BOOST_PP_SLOT_TEMP_10 == 7 +# define BOOST_PP_SLOT_3_DIGIT_10 7 +# elif BOOST_PP_SLOT_TEMP_10 == 8 +# define BOOST_PP_SLOT_3_DIGIT_10 8 +# elif BOOST_PP_SLOT_TEMP_10 == 9 +# define BOOST_PP_SLOT_3_DIGIT_10 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_9 == 0 +# define BOOST_PP_SLOT_3_DIGIT_9 0 +# elif BOOST_PP_SLOT_TEMP_9 == 1 +# define BOOST_PP_SLOT_3_DIGIT_9 1 +# elif BOOST_PP_SLOT_TEMP_9 == 2 +# define BOOST_PP_SLOT_3_DIGIT_9 2 +# elif BOOST_PP_SLOT_TEMP_9 == 3 +# define BOOST_PP_SLOT_3_DIGIT_9 3 +# elif BOOST_PP_SLOT_TEMP_9 == 4 +# define BOOST_PP_SLOT_3_DIGIT_9 4 +# elif BOOST_PP_SLOT_TEMP_9 == 5 +# define BOOST_PP_SLOT_3_DIGIT_9 5 +# elif BOOST_PP_SLOT_TEMP_9 == 6 +# define BOOST_PP_SLOT_3_DIGIT_9 6 +# elif BOOST_PP_SLOT_TEMP_9 == 7 +# define BOOST_PP_SLOT_3_DIGIT_9 7 +# elif BOOST_PP_SLOT_TEMP_9 == 8 +# define BOOST_PP_SLOT_3_DIGIT_9 8 +# elif BOOST_PP_SLOT_TEMP_9 == 9 +# define BOOST_PP_SLOT_3_DIGIT_9 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_8 == 0 +# define BOOST_PP_SLOT_3_DIGIT_8 0 +# elif BOOST_PP_SLOT_TEMP_8 == 1 +# define BOOST_PP_SLOT_3_DIGIT_8 1 +# elif BOOST_PP_SLOT_TEMP_8 == 2 +# define BOOST_PP_SLOT_3_DIGIT_8 2 +# elif BOOST_PP_SLOT_TEMP_8 == 3 +# define BOOST_PP_SLOT_3_DIGIT_8 3 +# elif BOOST_PP_SLOT_TEMP_8 == 4 +# define BOOST_PP_SLOT_3_DIGIT_8 4 +# elif BOOST_PP_SLOT_TEMP_8 == 5 +# define BOOST_PP_SLOT_3_DIGIT_8 5 +# elif BOOST_PP_SLOT_TEMP_8 == 6 +# define BOOST_PP_SLOT_3_DIGIT_8 6 +# elif BOOST_PP_SLOT_TEMP_8 == 7 +# define BOOST_PP_SLOT_3_DIGIT_8 7 +# elif BOOST_PP_SLOT_TEMP_8 == 8 +# define BOOST_PP_SLOT_3_DIGIT_8 8 +# elif BOOST_PP_SLOT_TEMP_8 == 9 +# define BOOST_PP_SLOT_3_DIGIT_8 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_7 == 0 +# define BOOST_PP_SLOT_3_DIGIT_7 0 +# elif BOOST_PP_SLOT_TEMP_7 == 1 +# define BOOST_PP_SLOT_3_DIGIT_7 1 +# elif BOOST_PP_SLOT_TEMP_7 == 2 +# define BOOST_PP_SLOT_3_DIGIT_7 2 +# elif BOOST_PP_SLOT_TEMP_7 == 3 +# define BOOST_PP_SLOT_3_DIGIT_7 3 +# elif BOOST_PP_SLOT_TEMP_7 == 4 +# define BOOST_PP_SLOT_3_DIGIT_7 4 +# elif BOOST_PP_SLOT_TEMP_7 == 5 +# define BOOST_PP_SLOT_3_DIGIT_7 5 +# elif BOOST_PP_SLOT_TEMP_7 == 6 +# define BOOST_PP_SLOT_3_DIGIT_7 6 +# elif BOOST_PP_SLOT_TEMP_7 == 7 +# define BOOST_PP_SLOT_3_DIGIT_7 7 +# elif BOOST_PP_SLOT_TEMP_7 == 8 +# define BOOST_PP_SLOT_3_DIGIT_7 8 +# elif BOOST_PP_SLOT_TEMP_7 == 9 +# define BOOST_PP_SLOT_3_DIGIT_7 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_6 == 0 +# define BOOST_PP_SLOT_3_DIGIT_6 0 +# elif BOOST_PP_SLOT_TEMP_6 == 1 +# define BOOST_PP_SLOT_3_DIGIT_6 1 +# elif BOOST_PP_SLOT_TEMP_6 == 2 +# define BOOST_PP_SLOT_3_DIGIT_6 2 +# elif BOOST_PP_SLOT_TEMP_6 == 3 +# define BOOST_PP_SLOT_3_DIGIT_6 3 +# elif BOOST_PP_SLOT_TEMP_6 == 4 +# define BOOST_PP_SLOT_3_DIGIT_6 4 +# elif BOOST_PP_SLOT_TEMP_6 == 5 +# define BOOST_PP_SLOT_3_DIGIT_6 5 +# elif BOOST_PP_SLOT_TEMP_6 == 6 +# define BOOST_PP_SLOT_3_DIGIT_6 6 +# elif BOOST_PP_SLOT_TEMP_6 == 7 +# define BOOST_PP_SLOT_3_DIGIT_6 7 +# elif BOOST_PP_SLOT_TEMP_6 == 8 +# define BOOST_PP_SLOT_3_DIGIT_6 8 +# elif BOOST_PP_SLOT_TEMP_6 == 9 +# define BOOST_PP_SLOT_3_DIGIT_6 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_5 == 0 +# define BOOST_PP_SLOT_3_DIGIT_5 0 +# elif BOOST_PP_SLOT_TEMP_5 == 1 +# define BOOST_PP_SLOT_3_DIGIT_5 1 +# elif BOOST_PP_SLOT_TEMP_5 == 2 +# define BOOST_PP_SLOT_3_DIGIT_5 2 +# elif BOOST_PP_SLOT_TEMP_5 == 3 +# define BOOST_PP_SLOT_3_DIGIT_5 3 +# elif BOOST_PP_SLOT_TEMP_5 == 4 +# define BOOST_PP_SLOT_3_DIGIT_5 4 +# elif BOOST_PP_SLOT_TEMP_5 == 5 +# define BOOST_PP_SLOT_3_DIGIT_5 5 +# elif BOOST_PP_SLOT_TEMP_5 == 6 +# define BOOST_PP_SLOT_3_DIGIT_5 6 +# elif BOOST_PP_SLOT_TEMP_5 == 7 +# define BOOST_PP_SLOT_3_DIGIT_5 7 +# elif BOOST_PP_SLOT_TEMP_5 == 8 +# define BOOST_PP_SLOT_3_DIGIT_5 8 +# elif BOOST_PP_SLOT_TEMP_5 == 9 +# define BOOST_PP_SLOT_3_DIGIT_5 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_4 == 0 +# define BOOST_PP_SLOT_3_DIGIT_4 0 +# elif BOOST_PP_SLOT_TEMP_4 == 1 +# define BOOST_PP_SLOT_3_DIGIT_4 1 +# elif BOOST_PP_SLOT_TEMP_4 == 2 +# define BOOST_PP_SLOT_3_DIGIT_4 2 +# elif BOOST_PP_SLOT_TEMP_4 == 3 +# define BOOST_PP_SLOT_3_DIGIT_4 3 +# elif BOOST_PP_SLOT_TEMP_4 == 4 +# define BOOST_PP_SLOT_3_DIGIT_4 4 +# elif BOOST_PP_SLOT_TEMP_4 == 5 +# define BOOST_PP_SLOT_3_DIGIT_4 5 +# elif BOOST_PP_SLOT_TEMP_4 == 6 +# define BOOST_PP_SLOT_3_DIGIT_4 6 +# elif BOOST_PP_SLOT_TEMP_4 == 7 +# define BOOST_PP_SLOT_3_DIGIT_4 7 +# elif BOOST_PP_SLOT_TEMP_4 == 8 +# define BOOST_PP_SLOT_3_DIGIT_4 8 +# elif BOOST_PP_SLOT_TEMP_4 == 9 +# define BOOST_PP_SLOT_3_DIGIT_4 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_SLOT_3_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_SLOT_3_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_SLOT_3_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_SLOT_3_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_SLOT_3_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_SLOT_3_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_SLOT_3_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_SLOT_3_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_SLOT_3_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_SLOT_3_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_SLOT_3_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_SLOT_3_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_SLOT_3_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_SLOT_3_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_SLOT_3_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_SLOT_3_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_SLOT_3_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_SLOT_3_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_SLOT_3_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_SLOT_3_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_SLOT_3_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_SLOT_3_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_SLOT_3_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_SLOT_3_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_SLOT_3_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_SLOT_3_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_SLOT_3_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_SLOT_3_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_SLOT_3_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_SLOT_3_DIGIT_1 9 +# endif +# +# if BOOST_PP_SLOT_3_DIGIT_10 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_3_DIGIT_10, BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_9 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_8 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_7 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_6 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_5 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_4 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_3 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# elif BOOST_PP_SLOT_3_DIGIT_2 +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1) +# else +# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_3_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot4.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot4.hpp new file mode 100644 index 00000000..c466f598 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot4.hpp @@ -0,0 +1,267 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_SLOT_4 +# +# undef BOOST_PP_SLOT_4_DIGIT_1 +# undef BOOST_PP_SLOT_4_DIGIT_2 +# undef BOOST_PP_SLOT_4_DIGIT_3 +# undef BOOST_PP_SLOT_4_DIGIT_4 +# undef BOOST_PP_SLOT_4_DIGIT_5 +# undef BOOST_PP_SLOT_4_DIGIT_6 +# undef BOOST_PP_SLOT_4_DIGIT_7 +# undef BOOST_PP_SLOT_4_DIGIT_8 +# undef BOOST_PP_SLOT_4_DIGIT_9 +# undef BOOST_PP_SLOT_4_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_10 == 0 +# define BOOST_PP_SLOT_4_DIGIT_10 0 +# elif BOOST_PP_SLOT_TEMP_10 == 1 +# define BOOST_PP_SLOT_4_DIGIT_10 1 +# elif BOOST_PP_SLOT_TEMP_10 == 2 +# define BOOST_PP_SLOT_4_DIGIT_10 2 +# elif BOOST_PP_SLOT_TEMP_10 == 3 +# define BOOST_PP_SLOT_4_DIGIT_10 3 +# elif BOOST_PP_SLOT_TEMP_10 == 4 +# define BOOST_PP_SLOT_4_DIGIT_10 4 +# elif BOOST_PP_SLOT_TEMP_10 == 5 +# define BOOST_PP_SLOT_4_DIGIT_10 5 +# elif BOOST_PP_SLOT_TEMP_10 == 6 +# define BOOST_PP_SLOT_4_DIGIT_10 6 +# elif BOOST_PP_SLOT_TEMP_10 == 7 +# define BOOST_PP_SLOT_4_DIGIT_10 7 +# elif BOOST_PP_SLOT_TEMP_10 == 8 +# define BOOST_PP_SLOT_4_DIGIT_10 8 +# elif BOOST_PP_SLOT_TEMP_10 == 9 +# define BOOST_PP_SLOT_4_DIGIT_10 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_9 == 0 +# define BOOST_PP_SLOT_4_DIGIT_9 0 +# elif BOOST_PP_SLOT_TEMP_9 == 1 +# define BOOST_PP_SLOT_4_DIGIT_9 1 +# elif BOOST_PP_SLOT_TEMP_9 == 2 +# define BOOST_PP_SLOT_4_DIGIT_9 2 +# elif BOOST_PP_SLOT_TEMP_9 == 3 +# define BOOST_PP_SLOT_4_DIGIT_9 3 +# elif BOOST_PP_SLOT_TEMP_9 == 4 +# define BOOST_PP_SLOT_4_DIGIT_9 4 +# elif BOOST_PP_SLOT_TEMP_9 == 5 +# define BOOST_PP_SLOT_4_DIGIT_9 5 +# elif BOOST_PP_SLOT_TEMP_9 == 6 +# define BOOST_PP_SLOT_4_DIGIT_9 6 +# elif BOOST_PP_SLOT_TEMP_9 == 7 +# define BOOST_PP_SLOT_4_DIGIT_9 7 +# elif BOOST_PP_SLOT_TEMP_9 == 8 +# define BOOST_PP_SLOT_4_DIGIT_9 8 +# elif BOOST_PP_SLOT_TEMP_9 == 9 +# define BOOST_PP_SLOT_4_DIGIT_9 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_8 == 0 +# define BOOST_PP_SLOT_4_DIGIT_8 0 +# elif BOOST_PP_SLOT_TEMP_8 == 1 +# define BOOST_PP_SLOT_4_DIGIT_8 1 +# elif BOOST_PP_SLOT_TEMP_8 == 2 +# define BOOST_PP_SLOT_4_DIGIT_8 2 +# elif BOOST_PP_SLOT_TEMP_8 == 3 +# define BOOST_PP_SLOT_4_DIGIT_8 3 +# elif BOOST_PP_SLOT_TEMP_8 == 4 +# define BOOST_PP_SLOT_4_DIGIT_8 4 +# elif BOOST_PP_SLOT_TEMP_8 == 5 +# define BOOST_PP_SLOT_4_DIGIT_8 5 +# elif BOOST_PP_SLOT_TEMP_8 == 6 +# define BOOST_PP_SLOT_4_DIGIT_8 6 +# elif BOOST_PP_SLOT_TEMP_8 == 7 +# define BOOST_PP_SLOT_4_DIGIT_8 7 +# elif BOOST_PP_SLOT_TEMP_8 == 8 +# define BOOST_PP_SLOT_4_DIGIT_8 8 +# elif BOOST_PP_SLOT_TEMP_8 == 9 +# define BOOST_PP_SLOT_4_DIGIT_8 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_7 == 0 +# define BOOST_PP_SLOT_4_DIGIT_7 0 +# elif BOOST_PP_SLOT_TEMP_7 == 1 +# define BOOST_PP_SLOT_4_DIGIT_7 1 +# elif BOOST_PP_SLOT_TEMP_7 == 2 +# define BOOST_PP_SLOT_4_DIGIT_7 2 +# elif BOOST_PP_SLOT_TEMP_7 == 3 +# define BOOST_PP_SLOT_4_DIGIT_7 3 +# elif BOOST_PP_SLOT_TEMP_7 == 4 +# define BOOST_PP_SLOT_4_DIGIT_7 4 +# elif BOOST_PP_SLOT_TEMP_7 == 5 +# define BOOST_PP_SLOT_4_DIGIT_7 5 +# elif BOOST_PP_SLOT_TEMP_7 == 6 +# define BOOST_PP_SLOT_4_DIGIT_7 6 +# elif BOOST_PP_SLOT_TEMP_7 == 7 +# define BOOST_PP_SLOT_4_DIGIT_7 7 +# elif BOOST_PP_SLOT_TEMP_7 == 8 +# define BOOST_PP_SLOT_4_DIGIT_7 8 +# elif BOOST_PP_SLOT_TEMP_7 == 9 +# define BOOST_PP_SLOT_4_DIGIT_7 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_6 == 0 +# define BOOST_PP_SLOT_4_DIGIT_6 0 +# elif BOOST_PP_SLOT_TEMP_6 == 1 +# define BOOST_PP_SLOT_4_DIGIT_6 1 +# elif BOOST_PP_SLOT_TEMP_6 == 2 +# define BOOST_PP_SLOT_4_DIGIT_6 2 +# elif BOOST_PP_SLOT_TEMP_6 == 3 +# define BOOST_PP_SLOT_4_DIGIT_6 3 +# elif BOOST_PP_SLOT_TEMP_6 == 4 +# define BOOST_PP_SLOT_4_DIGIT_6 4 +# elif BOOST_PP_SLOT_TEMP_6 == 5 +# define BOOST_PP_SLOT_4_DIGIT_6 5 +# elif BOOST_PP_SLOT_TEMP_6 == 6 +# define BOOST_PP_SLOT_4_DIGIT_6 6 +# elif BOOST_PP_SLOT_TEMP_6 == 7 +# define BOOST_PP_SLOT_4_DIGIT_6 7 +# elif BOOST_PP_SLOT_TEMP_6 == 8 +# define BOOST_PP_SLOT_4_DIGIT_6 8 +# elif BOOST_PP_SLOT_TEMP_6 == 9 +# define BOOST_PP_SLOT_4_DIGIT_6 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_5 == 0 +# define BOOST_PP_SLOT_4_DIGIT_5 0 +# elif BOOST_PP_SLOT_TEMP_5 == 1 +# define BOOST_PP_SLOT_4_DIGIT_5 1 +# elif BOOST_PP_SLOT_TEMP_5 == 2 +# define BOOST_PP_SLOT_4_DIGIT_5 2 +# elif BOOST_PP_SLOT_TEMP_5 == 3 +# define BOOST_PP_SLOT_4_DIGIT_5 3 +# elif BOOST_PP_SLOT_TEMP_5 == 4 +# define BOOST_PP_SLOT_4_DIGIT_5 4 +# elif BOOST_PP_SLOT_TEMP_5 == 5 +# define BOOST_PP_SLOT_4_DIGIT_5 5 +# elif BOOST_PP_SLOT_TEMP_5 == 6 +# define BOOST_PP_SLOT_4_DIGIT_5 6 +# elif BOOST_PP_SLOT_TEMP_5 == 7 +# define BOOST_PP_SLOT_4_DIGIT_5 7 +# elif BOOST_PP_SLOT_TEMP_5 == 8 +# define BOOST_PP_SLOT_4_DIGIT_5 8 +# elif BOOST_PP_SLOT_TEMP_5 == 9 +# define BOOST_PP_SLOT_4_DIGIT_5 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_4 == 0 +# define BOOST_PP_SLOT_4_DIGIT_4 0 +# elif BOOST_PP_SLOT_TEMP_4 == 1 +# define BOOST_PP_SLOT_4_DIGIT_4 1 +# elif BOOST_PP_SLOT_TEMP_4 == 2 +# define BOOST_PP_SLOT_4_DIGIT_4 2 +# elif BOOST_PP_SLOT_TEMP_4 == 3 +# define BOOST_PP_SLOT_4_DIGIT_4 3 +# elif BOOST_PP_SLOT_TEMP_4 == 4 +# define BOOST_PP_SLOT_4_DIGIT_4 4 +# elif BOOST_PP_SLOT_TEMP_4 == 5 +# define BOOST_PP_SLOT_4_DIGIT_4 5 +# elif BOOST_PP_SLOT_TEMP_4 == 6 +# define BOOST_PP_SLOT_4_DIGIT_4 6 +# elif BOOST_PP_SLOT_TEMP_4 == 7 +# define BOOST_PP_SLOT_4_DIGIT_4 7 +# elif BOOST_PP_SLOT_TEMP_4 == 8 +# define BOOST_PP_SLOT_4_DIGIT_4 8 +# elif BOOST_PP_SLOT_TEMP_4 == 9 +# define BOOST_PP_SLOT_4_DIGIT_4 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_SLOT_4_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_SLOT_4_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_SLOT_4_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_SLOT_4_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_SLOT_4_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_SLOT_4_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_SLOT_4_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_SLOT_4_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_SLOT_4_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_SLOT_4_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_SLOT_4_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_SLOT_4_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_SLOT_4_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_SLOT_4_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_SLOT_4_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_SLOT_4_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_SLOT_4_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_SLOT_4_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_SLOT_4_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_SLOT_4_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_SLOT_4_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_SLOT_4_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_SLOT_4_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_SLOT_4_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_SLOT_4_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_SLOT_4_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_SLOT_4_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_SLOT_4_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_SLOT_4_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_SLOT_4_DIGIT_1 9 +# endif +# +# if BOOST_PP_SLOT_4_DIGIT_10 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_4_DIGIT_10, BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_9 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_8 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_7 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_6 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_5 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_4 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_3 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# elif BOOST_PP_SLOT_4_DIGIT_2 +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1) +# else +# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_4_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot5.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot5.hpp new file mode 100644 index 00000000..8a44f4ba --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/detail/slot5.hpp @@ -0,0 +1,267 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# undef BOOST_PP_SLOT_5 +# +# undef BOOST_PP_SLOT_5_DIGIT_1 +# undef BOOST_PP_SLOT_5_DIGIT_2 +# undef BOOST_PP_SLOT_5_DIGIT_3 +# undef BOOST_PP_SLOT_5_DIGIT_4 +# undef BOOST_PP_SLOT_5_DIGIT_5 +# undef BOOST_PP_SLOT_5_DIGIT_6 +# undef BOOST_PP_SLOT_5_DIGIT_7 +# undef BOOST_PP_SLOT_5_DIGIT_8 +# undef BOOST_PP_SLOT_5_DIGIT_9 +# undef BOOST_PP_SLOT_5_DIGIT_10 +# +# if BOOST_PP_SLOT_TEMP_10 == 0 +# define BOOST_PP_SLOT_5_DIGIT_10 0 +# elif BOOST_PP_SLOT_TEMP_10 == 1 +# define BOOST_PP_SLOT_5_DIGIT_10 1 +# elif BOOST_PP_SLOT_TEMP_10 == 2 +# define BOOST_PP_SLOT_5_DIGIT_10 2 +# elif BOOST_PP_SLOT_TEMP_10 == 3 +# define BOOST_PP_SLOT_5_DIGIT_10 3 +# elif BOOST_PP_SLOT_TEMP_10 == 4 +# define BOOST_PP_SLOT_5_DIGIT_10 4 +# elif BOOST_PP_SLOT_TEMP_10 == 5 +# define BOOST_PP_SLOT_5_DIGIT_10 5 +# elif BOOST_PP_SLOT_TEMP_10 == 6 +# define BOOST_PP_SLOT_5_DIGIT_10 6 +# elif BOOST_PP_SLOT_TEMP_10 == 7 +# define BOOST_PP_SLOT_5_DIGIT_10 7 +# elif BOOST_PP_SLOT_TEMP_10 == 8 +# define BOOST_PP_SLOT_5_DIGIT_10 8 +# elif BOOST_PP_SLOT_TEMP_10 == 9 +# define BOOST_PP_SLOT_5_DIGIT_10 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_9 == 0 +# define BOOST_PP_SLOT_5_DIGIT_9 0 +# elif BOOST_PP_SLOT_TEMP_9 == 1 +# define BOOST_PP_SLOT_5_DIGIT_9 1 +# elif BOOST_PP_SLOT_TEMP_9 == 2 +# define BOOST_PP_SLOT_5_DIGIT_9 2 +# elif BOOST_PP_SLOT_TEMP_9 == 3 +# define BOOST_PP_SLOT_5_DIGIT_9 3 +# elif BOOST_PP_SLOT_TEMP_9 == 4 +# define BOOST_PP_SLOT_5_DIGIT_9 4 +# elif BOOST_PP_SLOT_TEMP_9 == 5 +# define BOOST_PP_SLOT_5_DIGIT_9 5 +# elif BOOST_PP_SLOT_TEMP_9 == 6 +# define BOOST_PP_SLOT_5_DIGIT_9 6 +# elif BOOST_PP_SLOT_TEMP_9 == 7 +# define BOOST_PP_SLOT_5_DIGIT_9 7 +# elif BOOST_PP_SLOT_TEMP_9 == 8 +# define BOOST_PP_SLOT_5_DIGIT_9 8 +# elif BOOST_PP_SLOT_TEMP_9 == 9 +# define BOOST_PP_SLOT_5_DIGIT_9 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_8 == 0 +# define BOOST_PP_SLOT_5_DIGIT_8 0 +# elif BOOST_PP_SLOT_TEMP_8 == 1 +# define BOOST_PP_SLOT_5_DIGIT_8 1 +# elif BOOST_PP_SLOT_TEMP_8 == 2 +# define BOOST_PP_SLOT_5_DIGIT_8 2 +# elif BOOST_PP_SLOT_TEMP_8 == 3 +# define BOOST_PP_SLOT_5_DIGIT_8 3 +# elif BOOST_PP_SLOT_TEMP_8 == 4 +# define BOOST_PP_SLOT_5_DIGIT_8 4 +# elif BOOST_PP_SLOT_TEMP_8 == 5 +# define BOOST_PP_SLOT_5_DIGIT_8 5 +# elif BOOST_PP_SLOT_TEMP_8 == 6 +# define BOOST_PP_SLOT_5_DIGIT_8 6 +# elif BOOST_PP_SLOT_TEMP_8 == 7 +# define BOOST_PP_SLOT_5_DIGIT_8 7 +# elif BOOST_PP_SLOT_TEMP_8 == 8 +# define BOOST_PP_SLOT_5_DIGIT_8 8 +# elif BOOST_PP_SLOT_TEMP_8 == 9 +# define BOOST_PP_SLOT_5_DIGIT_8 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_7 == 0 +# define BOOST_PP_SLOT_5_DIGIT_7 0 +# elif BOOST_PP_SLOT_TEMP_7 == 1 +# define BOOST_PP_SLOT_5_DIGIT_7 1 +# elif BOOST_PP_SLOT_TEMP_7 == 2 +# define BOOST_PP_SLOT_5_DIGIT_7 2 +# elif BOOST_PP_SLOT_TEMP_7 == 3 +# define BOOST_PP_SLOT_5_DIGIT_7 3 +# elif BOOST_PP_SLOT_TEMP_7 == 4 +# define BOOST_PP_SLOT_5_DIGIT_7 4 +# elif BOOST_PP_SLOT_TEMP_7 == 5 +# define BOOST_PP_SLOT_5_DIGIT_7 5 +# elif BOOST_PP_SLOT_TEMP_7 == 6 +# define BOOST_PP_SLOT_5_DIGIT_7 6 +# elif BOOST_PP_SLOT_TEMP_7 == 7 +# define BOOST_PP_SLOT_5_DIGIT_7 7 +# elif BOOST_PP_SLOT_TEMP_7 == 8 +# define BOOST_PP_SLOT_5_DIGIT_7 8 +# elif BOOST_PP_SLOT_TEMP_7 == 9 +# define BOOST_PP_SLOT_5_DIGIT_7 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_6 == 0 +# define BOOST_PP_SLOT_5_DIGIT_6 0 +# elif BOOST_PP_SLOT_TEMP_6 == 1 +# define BOOST_PP_SLOT_5_DIGIT_6 1 +# elif BOOST_PP_SLOT_TEMP_6 == 2 +# define BOOST_PP_SLOT_5_DIGIT_6 2 +# elif BOOST_PP_SLOT_TEMP_6 == 3 +# define BOOST_PP_SLOT_5_DIGIT_6 3 +# elif BOOST_PP_SLOT_TEMP_6 == 4 +# define BOOST_PP_SLOT_5_DIGIT_6 4 +# elif BOOST_PP_SLOT_TEMP_6 == 5 +# define BOOST_PP_SLOT_5_DIGIT_6 5 +# elif BOOST_PP_SLOT_TEMP_6 == 6 +# define BOOST_PP_SLOT_5_DIGIT_6 6 +# elif BOOST_PP_SLOT_TEMP_6 == 7 +# define BOOST_PP_SLOT_5_DIGIT_6 7 +# elif BOOST_PP_SLOT_TEMP_6 == 8 +# define BOOST_PP_SLOT_5_DIGIT_6 8 +# elif BOOST_PP_SLOT_TEMP_6 == 9 +# define BOOST_PP_SLOT_5_DIGIT_6 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_5 == 0 +# define BOOST_PP_SLOT_5_DIGIT_5 0 +# elif BOOST_PP_SLOT_TEMP_5 == 1 +# define BOOST_PP_SLOT_5_DIGIT_5 1 +# elif BOOST_PP_SLOT_TEMP_5 == 2 +# define BOOST_PP_SLOT_5_DIGIT_5 2 +# elif BOOST_PP_SLOT_TEMP_5 == 3 +# define BOOST_PP_SLOT_5_DIGIT_5 3 +# elif BOOST_PP_SLOT_TEMP_5 == 4 +# define BOOST_PP_SLOT_5_DIGIT_5 4 +# elif BOOST_PP_SLOT_TEMP_5 == 5 +# define BOOST_PP_SLOT_5_DIGIT_5 5 +# elif BOOST_PP_SLOT_TEMP_5 == 6 +# define BOOST_PP_SLOT_5_DIGIT_5 6 +# elif BOOST_PP_SLOT_TEMP_5 == 7 +# define BOOST_PP_SLOT_5_DIGIT_5 7 +# elif BOOST_PP_SLOT_TEMP_5 == 8 +# define BOOST_PP_SLOT_5_DIGIT_5 8 +# elif BOOST_PP_SLOT_TEMP_5 == 9 +# define BOOST_PP_SLOT_5_DIGIT_5 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_4 == 0 +# define BOOST_PP_SLOT_5_DIGIT_4 0 +# elif BOOST_PP_SLOT_TEMP_4 == 1 +# define BOOST_PP_SLOT_5_DIGIT_4 1 +# elif BOOST_PP_SLOT_TEMP_4 == 2 +# define BOOST_PP_SLOT_5_DIGIT_4 2 +# elif BOOST_PP_SLOT_TEMP_4 == 3 +# define BOOST_PP_SLOT_5_DIGIT_4 3 +# elif BOOST_PP_SLOT_TEMP_4 == 4 +# define BOOST_PP_SLOT_5_DIGIT_4 4 +# elif BOOST_PP_SLOT_TEMP_4 == 5 +# define BOOST_PP_SLOT_5_DIGIT_4 5 +# elif BOOST_PP_SLOT_TEMP_4 == 6 +# define BOOST_PP_SLOT_5_DIGIT_4 6 +# elif BOOST_PP_SLOT_TEMP_4 == 7 +# define BOOST_PP_SLOT_5_DIGIT_4 7 +# elif BOOST_PP_SLOT_TEMP_4 == 8 +# define BOOST_PP_SLOT_5_DIGIT_4 8 +# elif BOOST_PP_SLOT_TEMP_4 == 9 +# define BOOST_PP_SLOT_5_DIGIT_4 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_3 == 0 +# define BOOST_PP_SLOT_5_DIGIT_3 0 +# elif BOOST_PP_SLOT_TEMP_3 == 1 +# define BOOST_PP_SLOT_5_DIGIT_3 1 +# elif BOOST_PP_SLOT_TEMP_3 == 2 +# define BOOST_PP_SLOT_5_DIGIT_3 2 +# elif BOOST_PP_SLOT_TEMP_3 == 3 +# define BOOST_PP_SLOT_5_DIGIT_3 3 +# elif BOOST_PP_SLOT_TEMP_3 == 4 +# define BOOST_PP_SLOT_5_DIGIT_3 4 +# elif BOOST_PP_SLOT_TEMP_3 == 5 +# define BOOST_PP_SLOT_5_DIGIT_3 5 +# elif BOOST_PP_SLOT_TEMP_3 == 6 +# define BOOST_PP_SLOT_5_DIGIT_3 6 +# elif BOOST_PP_SLOT_TEMP_3 == 7 +# define BOOST_PP_SLOT_5_DIGIT_3 7 +# elif BOOST_PP_SLOT_TEMP_3 == 8 +# define BOOST_PP_SLOT_5_DIGIT_3 8 +# elif BOOST_PP_SLOT_TEMP_3 == 9 +# define BOOST_PP_SLOT_5_DIGIT_3 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_2 == 0 +# define BOOST_PP_SLOT_5_DIGIT_2 0 +# elif BOOST_PP_SLOT_TEMP_2 == 1 +# define BOOST_PP_SLOT_5_DIGIT_2 1 +# elif BOOST_PP_SLOT_TEMP_2 == 2 +# define BOOST_PP_SLOT_5_DIGIT_2 2 +# elif BOOST_PP_SLOT_TEMP_2 == 3 +# define BOOST_PP_SLOT_5_DIGIT_2 3 +# elif BOOST_PP_SLOT_TEMP_2 == 4 +# define BOOST_PP_SLOT_5_DIGIT_2 4 +# elif BOOST_PP_SLOT_TEMP_2 == 5 +# define BOOST_PP_SLOT_5_DIGIT_2 5 +# elif BOOST_PP_SLOT_TEMP_2 == 6 +# define BOOST_PP_SLOT_5_DIGIT_2 6 +# elif BOOST_PP_SLOT_TEMP_2 == 7 +# define BOOST_PP_SLOT_5_DIGIT_2 7 +# elif BOOST_PP_SLOT_TEMP_2 == 8 +# define BOOST_PP_SLOT_5_DIGIT_2 8 +# elif BOOST_PP_SLOT_TEMP_2 == 9 +# define BOOST_PP_SLOT_5_DIGIT_2 9 +# endif +# +# if BOOST_PP_SLOT_TEMP_1 == 0 +# define BOOST_PP_SLOT_5_DIGIT_1 0 +# elif BOOST_PP_SLOT_TEMP_1 == 1 +# define BOOST_PP_SLOT_5_DIGIT_1 1 +# elif BOOST_PP_SLOT_TEMP_1 == 2 +# define BOOST_PP_SLOT_5_DIGIT_1 2 +# elif BOOST_PP_SLOT_TEMP_1 == 3 +# define BOOST_PP_SLOT_5_DIGIT_1 3 +# elif BOOST_PP_SLOT_TEMP_1 == 4 +# define BOOST_PP_SLOT_5_DIGIT_1 4 +# elif BOOST_PP_SLOT_TEMP_1 == 5 +# define BOOST_PP_SLOT_5_DIGIT_1 5 +# elif BOOST_PP_SLOT_TEMP_1 == 6 +# define BOOST_PP_SLOT_5_DIGIT_1 6 +# elif BOOST_PP_SLOT_TEMP_1 == 7 +# define BOOST_PP_SLOT_5_DIGIT_1 7 +# elif BOOST_PP_SLOT_TEMP_1 == 8 +# define BOOST_PP_SLOT_5_DIGIT_1 8 +# elif BOOST_PP_SLOT_TEMP_1 == 9 +# define BOOST_PP_SLOT_5_DIGIT_1 9 +# endif +# +# if BOOST_PP_SLOT_5_DIGIT_10 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_5_DIGIT_10, BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_9 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_8 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_7 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_6 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_5 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_4 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_3 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# elif BOOST_PP_SLOT_5_DIGIT_2 +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1) +# else +# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_5_DIGIT_1 +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/slot.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/slot.hpp new file mode 100644 index 00000000..0b334669 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/slot/slot.hpp @@ -0,0 +1,32 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_SLOT_SLOT_HPP +# define BOOST_PREPROCESSOR_SLOT_SLOT_HPP +# +# include +# include +# +# /* BOOST_PP_ASSIGN_SLOT */ +# +# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i) +# +# define BOOST_PP_ASSIGN_SLOT_1 +# define BOOST_PP_ASSIGN_SLOT_2 +# define BOOST_PP_ASSIGN_SLOT_3 +# define BOOST_PP_ASSIGN_SLOT_4 +# define BOOST_PP_ASSIGN_SLOT_5 +# +# /* BOOST_PP_SLOT */ +# +# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)() +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/stringize.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/stringize.hpp new file mode 100644 index 00000000..c295ac0b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/stringize.hpp @@ -0,0 +1,33 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP +# define BOOST_PREPROCESSOR_STRINGIZE_HPP +# +# include +# +# /* BOOST_PP_STRINGIZE */ +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_A((text)) +# define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_I arg +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_OO((text)) +# define BOOST_PP_STRINGIZE_OO(par) BOOST_PP_STRINGIZE_I ## par +# else +# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_I(text) +# endif +# +# define BOOST_PP_STRINGIZE_I(text) #text +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/eat.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/eat.hpp new file mode 100644 index 00000000..49c32da6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/eat.hpp @@ -0,0 +1,57 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP +# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP +# +# include +# +# /* BOOST_PP_TUPLE_EAT */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_I(size) +# else +# define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_OO((size)) +# define BOOST_PP_TUPLE_EAT_OO(par) BOOST_PP_TUPLE_EAT_I ## par +# endif +# +# define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size +# +# define BOOST_PP_TUPLE_EAT_0() +# define BOOST_PP_TUPLE_EAT_1(a) +# define BOOST_PP_TUPLE_EAT_2(a, b) +# define BOOST_PP_TUPLE_EAT_3(a, b, c) +# define BOOST_PP_TUPLE_EAT_4(a, b, c, d) +# define BOOST_PP_TUPLE_EAT_5(a, b, c, d, e) +# define BOOST_PP_TUPLE_EAT_6(a, b, c, d, e, f) +# define BOOST_PP_TUPLE_EAT_7(a, b, c, d, e, f, g) +# define BOOST_PP_TUPLE_EAT_8(a, b, c, d, e, f, g, h) +# define BOOST_PP_TUPLE_EAT_9(a, b, c, d, e, f, g, h, i) +# define BOOST_PP_TUPLE_EAT_10(a, b, c, d, e, f, g, h, i, j) +# define BOOST_PP_TUPLE_EAT_11(a, b, c, d, e, f, g, h, i, j, k) +# define BOOST_PP_TUPLE_EAT_12(a, b, c, d, e, f, g, h, i, j, k, l) +# define BOOST_PP_TUPLE_EAT_13(a, b, c, d, e, f, g, h, i, j, k, l, m) +# define BOOST_PP_TUPLE_EAT_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) +# define BOOST_PP_TUPLE_EAT_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +# define BOOST_PP_TUPLE_EAT_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) +# define BOOST_PP_TUPLE_EAT_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) +# define BOOST_PP_TUPLE_EAT_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) +# define BOOST_PP_TUPLE_EAT_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) +# define BOOST_PP_TUPLE_EAT_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) +# define BOOST_PP_TUPLE_EAT_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) +# define BOOST_PP_TUPLE_EAT_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) +# define BOOST_PP_TUPLE_EAT_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) +# define BOOST_PP_TUPLE_EAT_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) +# define BOOST_PP_TUPLE_EAT_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/elem.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/elem.hpp new file mode 100644 index 00000000..51adcb2a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/elem.hpp @@ -0,0 +1,385 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP +# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP +# +# include +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_I(size, index, tuple) +# else +# define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_OO((size, index, tuple)) +# define BOOST_PP_TUPLE_ELEM_OO(par) BOOST_PP_TUPLE_ELEM_I ## par +# endif +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i ## t +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t) +# define BOOST_PP_TUPLE_ELEM_II(res) res +# else +# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t +# endif +# +# define BOOST_PP_TUPLE_ELEM_1_0(a) a +# +# define BOOST_PP_TUPLE_ELEM_2_0(a, b) a +# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b +# +# define BOOST_PP_TUPLE_ELEM_3_0(a, b, c) a +# define BOOST_PP_TUPLE_ELEM_3_1(a, b, c) b +# define BOOST_PP_TUPLE_ELEM_3_2(a, b, c) c +# +# define BOOST_PP_TUPLE_ELEM_4_0(a, b, c, d) a +# define BOOST_PP_TUPLE_ELEM_4_1(a, b, c, d) b +# define BOOST_PP_TUPLE_ELEM_4_2(a, b, c, d) c +# define BOOST_PP_TUPLE_ELEM_4_3(a, b, c, d) d +# +# define BOOST_PP_TUPLE_ELEM_5_0(a, b, c, d, e) a +# define BOOST_PP_TUPLE_ELEM_5_1(a, b, c, d, e) b +# define BOOST_PP_TUPLE_ELEM_5_2(a, b, c, d, e) c +# define BOOST_PP_TUPLE_ELEM_5_3(a, b, c, d, e) d +# define BOOST_PP_TUPLE_ELEM_5_4(a, b, c, d, e) e +# +# define BOOST_PP_TUPLE_ELEM_6_0(a, b, c, d, e, f) a +# define BOOST_PP_TUPLE_ELEM_6_1(a, b, c, d, e, f) b +# define BOOST_PP_TUPLE_ELEM_6_2(a, b, c, d, e, f) c +# define BOOST_PP_TUPLE_ELEM_6_3(a, b, c, d, e, f) d +# define BOOST_PP_TUPLE_ELEM_6_4(a, b, c, d, e, f) e +# define BOOST_PP_TUPLE_ELEM_6_5(a, b, c, d, e, f) f +# +# define BOOST_PP_TUPLE_ELEM_7_0(a, b, c, d, e, f, g) a +# define BOOST_PP_TUPLE_ELEM_7_1(a, b, c, d, e, f, g) b +# define BOOST_PP_TUPLE_ELEM_7_2(a, b, c, d, e, f, g) c +# define BOOST_PP_TUPLE_ELEM_7_3(a, b, c, d, e, f, g) d +# define BOOST_PP_TUPLE_ELEM_7_4(a, b, c, d, e, f, g) e +# define BOOST_PP_TUPLE_ELEM_7_5(a, b, c, d, e, f, g) f +# define BOOST_PP_TUPLE_ELEM_7_6(a, b, c, d, e, f, g) g +# +# define BOOST_PP_TUPLE_ELEM_8_0(a, b, c, d, e, f, g, h) a +# define BOOST_PP_TUPLE_ELEM_8_1(a, b, c, d, e, f, g, h) b +# define BOOST_PP_TUPLE_ELEM_8_2(a, b, c, d, e, f, g, h) c +# define BOOST_PP_TUPLE_ELEM_8_3(a, b, c, d, e, f, g, h) d +# define BOOST_PP_TUPLE_ELEM_8_4(a, b, c, d, e, f, g, h) e +# define BOOST_PP_TUPLE_ELEM_8_5(a, b, c, d, e, f, g, h) f +# define BOOST_PP_TUPLE_ELEM_8_6(a, b, c, d, e, f, g, h) g +# define BOOST_PP_TUPLE_ELEM_8_7(a, b, c, d, e, f, g, h) h +# +# define BOOST_PP_TUPLE_ELEM_9_0(a, b, c, d, e, f, g, h, i) a +# define BOOST_PP_TUPLE_ELEM_9_1(a, b, c, d, e, f, g, h, i) b +# define BOOST_PP_TUPLE_ELEM_9_2(a, b, c, d, e, f, g, h, i) c +# define BOOST_PP_TUPLE_ELEM_9_3(a, b, c, d, e, f, g, h, i) d +# define BOOST_PP_TUPLE_ELEM_9_4(a, b, c, d, e, f, g, h, i) e +# define BOOST_PP_TUPLE_ELEM_9_5(a, b, c, d, e, f, g, h, i) f +# define BOOST_PP_TUPLE_ELEM_9_6(a, b, c, d, e, f, g, h, i) g +# define BOOST_PP_TUPLE_ELEM_9_7(a, b, c, d, e, f, g, h, i) h +# define BOOST_PP_TUPLE_ELEM_9_8(a, b, c, d, e, f, g, h, i) i +# +# define BOOST_PP_TUPLE_ELEM_10_0(a, b, c, d, e, f, g, h, i, j) a +# define BOOST_PP_TUPLE_ELEM_10_1(a, b, c, d, e, f, g, h, i, j) b +# define BOOST_PP_TUPLE_ELEM_10_2(a, b, c, d, e, f, g, h, i, j) c +# define BOOST_PP_TUPLE_ELEM_10_3(a, b, c, d, e, f, g, h, i, j) d +# define BOOST_PP_TUPLE_ELEM_10_4(a, b, c, d, e, f, g, h, i, j) e +# define BOOST_PP_TUPLE_ELEM_10_5(a, b, c, d, e, f, g, h, i, j) f +# define BOOST_PP_TUPLE_ELEM_10_6(a, b, c, d, e, f, g, h, i, j) g +# define BOOST_PP_TUPLE_ELEM_10_7(a, b, c, d, e, f, g, h, i, j) h +# define BOOST_PP_TUPLE_ELEM_10_8(a, b, c, d, e, f, g, h, i, j) i +# define BOOST_PP_TUPLE_ELEM_10_9(a, b, c, d, e, f, g, h, i, j) j +# +# define BOOST_PP_TUPLE_ELEM_11_0(a, b, c, d, e, f, g, h, i, j, k) a +# define BOOST_PP_TUPLE_ELEM_11_1(a, b, c, d, e, f, g, h, i, j, k) b +# define BOOST_PP_TUPLE_ELEM_11_2(a, b, c, d, e, f, g, h, i, j, k) c +# define BOOST_PP_TUPLE_ELEM_11_3(a, b, c, d, e, f, g, h, i, j, k) d +# define BOOST_PP_TUPLE_ELEM_11_4(a, b, c, d, e, f, g, h, i, j, k) e +# define BOOST_PP_TUPLE_ELEM_11_5(a, b, c, d, e, f, g, h, i, j, k) f +# define BOOST_PP_TUPLE_ELEM_11_6(a, b, c, d, e, f, g, h, i, j, k) g +# define BOOST_PP_TUPLE_ELEM_11_7(a, b, c, d, e, f, g, h, i, j, k) h +# define BOOST_PP_TUPLE_ELEM_11_8(a, b, c, d, e, f, g, h, i, j, k) i +# define BOOST_PP_TUPLE_ELEM_11_9(a, b, c, d, e, f, g, h, i, j, k) j +# define BOOST_PP_TUPLE_ELEM_11_10(a, b, c, d, e, f, g, h, i, j, k) k +# +# define BOOST_PP_TUPLE_ELEM_12_0(a, b, c, d, e, f, g, h, i, j, k, l) a +# define BOOST_PP_TUPLE_ELEM_12_1(a, b, c, d, e, f, g, h, i, j, k, l) b +# define BOOST_PP_TUPLE_ELEM_12_2(a, b, c, d, e, f, g, h, i, j, k, l) c +# define BOOST_PP_TUPLE_ELEM_12_3(a, b, c, d, e, f, g, h, i, j, k, l) d +# define BOOST_PP_TUPLE_ELEM_12_4(a, b, c, d, e, f, g, h, i, j, k, l) e +# define BOOST_PP_TUPLE_ELEM_12_5(a, b, c, d, e, f, g, h, i, j, k, l) f +# define BOOST_PP_TUPLE_ELEM_12_6(a, b, c, d, e, f, g, h, i, j, k, l) g +# define BOOST_PP_TUPLE_ELEM_12_7(a, b, c, d, e, f, g, h, i, j, k, l) h +# define BOOST_PP_TUPLE_ELEM_12_8(a, b, c, d, e, f, g, h, i, j, k, l) i +# define BOOST_PP_TUPLE_ELEM_12_9(a, b, c, d, e, f, g, h, i, j, k, l) j +# define BOOST_PP_TUPLE_ELEM_12_10(a, b, c, d, e, f, g, h, i, j, k, l) k +# define BOOST_PP_TUPLE_ELEM_12_11(a, b, c, d, e, f, g, h, i, j, k, l) l +# +# define BOOST_PP_TUPLE_ELEM_13_0(a, b, c, d, e, f, g, h, i, j, k, l, m) a +# define BOOST_PP_TUPLE_ELEM_13_1(a, b, c, d, e, f, g, h, i, j, k, l, m) b +# define BOOST_PP_TUPLE_ELEM_13_2(a, b, c, d, e, f, g, h, i, j, k, l, m) c +# define BOOST_PP_TUPLE_ELEM_13_3(a, b, c, d, e, f, g, h, i, j, k, l, m) d +# define BOOST_PP_TUPLE_ELEM_13_4(a, b, c, d, e, f, g, h, i, j, k, l, m) e +# define BOOST_PP_TUPLE_ELEM_13_5(a, b, c, d, e, f, g, h, i, j, k, l, m) f +# define BOOST_PP_TUPLE_ELEM_13_6(a, b, c, d, e, f, g, h, i, j, k, l, m) g +# define BOOST_PP_TUPLE_ELEM_13_7(a, b, c, d, e, f, g, h, i, j, k, l, m) h +# define BOOST_PP_TUPLE_ELEM_13_8(a, b, c, d, e, f, g, h, i, j, k, l, m) i +# define BOOST_PP_TUPLE_ELEM_13_9(a, b, c, d, e, f, g, h, i, j, k, l, m) j +# define BOOST_PP_TUPLE_ELEM_13_10(a, b, c, d, e, f, g, h, i, j, k, l, m) k +# define BOOST_PP_TUPLE_ELEM_13_11(a, b, c, d, e, f, g, h, i, j, k, l, m) l +# define BOOST_PP_TUPLE_ELEM_13_12(a, b, c, d, e, f, g, h, i, j, k, l, m) m +# +# define BOOST_PP_TUPLE_ELEM_14_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n) a +# define BOOST_PP_TUPLE_ELEM_14_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n) b +# define BOOST_PP_TUPLE_ELEM_14_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n) c +# define BOOST_PP_TUPLE_ELEM_14_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n) d +# define BOOST_PP_TUPLE_ELEM_14_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n) e +# define BOOST_PP_TUPLE_ELEM_14_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n) f +# define BOOST_PP_TUPLE_ELEM_14_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n) g +# define BOOST_PP_TUPLE_ELEM_14_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n) h +# define BOOST_PP_TUPLE_ELEM_14_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n) i +# define BOOST_PP_TUPLE_ELEM_14_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n) j +# define BOOST_PP_TUPLE_ELEM_14_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n) k +# define BOOST_PP_TUPLE_ELEM_14_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n) l +# define BOOST_PP_TUPLE_ELEM_14_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n) m +# define BOOST_PP_TUPLE_ELEM_14_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n) n +# +# define BOOST_PP_TUPLE_ELEM_15_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) a +# define BOOST_PP_TUPLE_ELEM_15_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) b +# define BOOST_PP_TUPLE_ELEM_15_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) c +# define BOOST_PP_TUPLE_ELEM_15_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) d +# define BOOST_PP_TUPLE_ELEM_15_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) e +# define BOOST_PP_TUPLE_ELEM_15_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) f +# define BOOST_PP_TUPLE_ELEM_15_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) g +# define BOOST_PP_TUPLE_ELEM_15_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) h +# define BOOST_PP_TUPLE_ELEM_15_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) i +# define BOOST_PP_TUPLE_ELEM_15_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) j +# define BOOST_PP_TUPLE_ELEM_15_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) k +# define BOOST_PP_TUPLE_ELEM_15_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) l +# define BOOST_PP_TUPLE_ELEM_15_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) m +# define BOOST_PP_TUPLE_ELEM_15_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) n +# define BOOST_PP_TUPLE_ELEM_15_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) o +# +# define BOOST_PP_TUPLE_ELEM_16_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) a +# define BOOST_PP_TUPLE_ELEM_16_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) b +# define BOOST_PP_TUPLE_ELEM_16_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) c +# define BOOST_PP_TUPLE_ELEM_16_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) d +# define BOOST_PP_TUPLE_ELEM_16_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) e +# define BOOST_PP_TUPLE_ELEM_16_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) f +# define BOOST_PP_TUPLE_ELEM_16_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) g +# define BOOST_PP_TUPLE_ELEM_16_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) h +# define BOOST_PP_TUPLE_ELEM_16_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) i +# define BOOST_PP_TUPLE_ELEM_16_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) j +# define BOOST_PP_TUPLE_ELEM_16_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) k +# define BOOST_PP_TUPLE_ELEM_16_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) l +# define BOOST_PP_TUPLE_ELEM_16_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) m +# define BOOST_PP_TUPLE_ELEM_16_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) n +# define BOOST_PP_TUPLE_ELEM_16_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) o +# define BOOST_PP_TUPLE_ELEM_16_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) p +# +# define BOOST_PP_TUPLE_ELEM_17_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) a +# define BOOST_PP_TUPLE_ELEM_17_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) b +# define BOOST_PP_TUPLE_ELEM_17_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) c +# define BOOST_PP_TUPLE_ELEM_17_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) d +# define BOOST_PP_TUPLE_ELEM_17_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) e +# define BOOST_PP_TUPLE_ELEM_17_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) f +# define BOOST_PP_TUPLE_ELEM_17_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) g +# define BOOST_PP_TUPLE_ELEM_17_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) h +# define BOOST_PP_TUPLE_ELEM_17_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) i +# define BOOST_PP_TUPLE_ELEM_17_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) j +# define BOOST_PP_TUPLE_ELEM_17_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) k +# define BOOST_PP_TUPLE_ELEM_17_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) l +# define BOOST_PP_TUPLE_ELEM_17_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) m +# define BOOST_PP_TUPLE_ELEM_17_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) n +# define BOOST_PP_TUPLE_ELEM_17_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) o +# define BOOST_PP_TUPLE_ELEM_17_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) p +# define BOOST_PP_TUPLE_ELEM_17_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) q +# +# define BOOST_PP_TUPLE_ELEM_18_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) a +# define BOOST_PP_TUPLE_ELEM_18_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) b +# define BOOST_PP_TUPLE_ELEM_18_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) c +# define BOOST_PP_TUPLE_ELEM_18_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) d +# define BOOST_PP_TUPLE_ELEM_18_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) e +# define BOOST_PP_TUPLE_ELEM_18_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) f +# define BOOST_PP_TUPLE_ELEM_18_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) g +# define BOOST_PP_TUPLE_ELEM_18_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) h +# define BOOST_PP_TUPLE_ELEM_18_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) i +# define BOOST_PP_TUPLE_ELEM_18_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) j +# define BOOST_PP_TUPLE_ELEM_18_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) k +# define BOOST_PP_TUPLE_ELEM_18_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) l +# define BOOST_PP_TUPLE_ELEM_18_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) m +# define BOOST_PP_TUPLE_ELEM_18_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) n +# define BOOST_PP_TUPLE_ELEM_18_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) o +# define BOOST_PP_TUPLE_ELEM_18_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) p +# define BOOST_PP_TUPLE_ELEM_18_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) q +# define BOOST_PP_TUPLE_ELEM_18_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) r +# +# define BOOST_PP_TUPLE_ELEM_19_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) a +# define BOOST_PP_TUPLE_ELEM_19_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) b +# define BOOST_PP_TUPLE_ELEM_19_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) c +# define BOOST_PP_TUPLE_ELEM_19_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) d +# define BOOST_PP_TUPLE_ELEM_19_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) e +# define BOOST_PP_TUPLE_ELEM_19_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) f +# define BOOST_PP_TUPLE_ELEM_19_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) g +# define BOOST_PP_TUPLE_ELEM_19_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) h +# define BOOST_PP_TUPLE_ELEM_19_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) i +# define BOOST_PP_TUPLE_ELEM_19_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) j +# define BOOST_PP_TUPLE_ELEM_19_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) k +# define BOOST_PP_TUPLE_ELEM_19_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) l +# define BOOST_PP_TUPLE_ELEM_19_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) m +# define BOOST_PP_TUPLE_ELEM_19_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) n +# define BOOST_PP_TUPLE_ELEM_19_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) o +# define BOOST_PP_TUPLE_ELEM_19_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) p +# define BOOST_PP_TUPLE_ELEM_19_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) q +# define BOOST_PP_TUPLE_ELEM_19_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) r +# define BOOST_PP_TUPLE_ELEM_19_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) s +# +# define BOOST_PP_TUPLE_ELEM_20_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) a +# define BOOST_PP_TUPLE_ELEM_20_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) b +# define BOOST_PP_TUPLE_ELEM_20_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) c +# define BOOST_PP_TUPLE_ELEM_20_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) d +# define BOOST_PP_TUPLE_ELEM_20_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) e +# define BOOST_PP_TUPLE_ELEM_20_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) f +# define BOOST_PP_TUPLE_ELEM_20_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) g +# define BOOST_PP_TUPLE_ELEM_20_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) h +# define BOOST_PP_TUPLE_ELEM_20_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) i +# define BOOST_PP_TUPLE_ELEM_20_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) j +# define BOOST_PP_TUPLE_ELEM_20_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) k +# define BOOST_PP_TUPLE_ELEM_20_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) l +# define BOOST_PP_TUPLE_ELEM_20_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) m +# define BOOST_PP_TUPLE_ELEM_20_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) n +# define BOOST_PP_TUPLE_ELEM_20_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) o +# define BOOST_PP_TUPLE_ELEM_20_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) p +# define BOOST_PP_TUPLE_ELEM_20_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) q +# define BOOST_PP_TUPLE_ELEM_20_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) r +# define BOOST_PP_TUPLE_ELEM_20_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) s +# define BOOST_PP_TUPLE_ELEM_20_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) t +# +# define BOOST_PP_TUPLE_ELEM_21_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) a +# define BOOST_PP_TUPLE_ELEM_21_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) b +# define BOOST_PP_TUPLE_ELEM_21_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) c +# define BOOST_PP_TUPLE_ELEM_21_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) d +# define BOOST_PP_TUPLE_ELEM_21_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) e +# define BOOST_PP_TUPLE_ELEM_21_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) f +# define BOOST_PP_TUPLE_ELEM_21_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) g +# define BOOST_PP_TUPLE_ELEM_21_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) h +# define BOOST_PP_TUPLE_ELEM_21_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) i +# define BOOST_PP_TUPLE_ELEM_21_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) j +# define BOOST_PP_TUPLE_ELEM_21_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) k +# define BOOST_PP_TUPLE_ELEM_21_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) l +# define BOOST_PP_TUPLE_ELEM_21_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) m +# define BOOST_PP_TUPLE_ELEM_21_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) n +# define BOOST_PP_TUPLE_ELEM_21_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) o +# define BOOST_PP_TUPLE_ELEM_21_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) p +# define BOOST_PP_TUPLE_ELEM_21_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) q +# define BOOST_PP_TUPLE_ELEM_21_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) r +# define BOOST_PP_TUPLE_ELEM_21_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) s +# define BOOST_PP_TUPLE_ELEM_21_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) t +# define BOOST_PP_TUPLE_ELEM_21_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) u +# +# define BOOST_PP_TUPLE_ELEM_22_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) a +# define BOOST_PP_TUPLE_ELEM_22_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) b +# define BOOST_PP_TUPLE_ELEM_22_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) c +# define BOOST_PP_TUPLE_ELEM_22_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) d +# define BOOST_PP_TUPLE_ELEM_22_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) e +# define BOOST_PP_TUPLE_ELEM_22_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) f +# define BOOST_PP_TUPLE_ELEM_22_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) g +# define BOOST_PP_TUPLE_ELEM_22_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) h +# define BOOST_PP_TUPLE_ELEM_22_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) i +# define BOOST_PP_TUPLE_ELEM_22_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) j +# define BOOST_PP_TUPLE_ELEM_22_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) k +# define BOOST_PP_TUPLE_ELEM_22_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) l +# define BOOST_PP_TUPLE_ELEM_22_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) m +# define BOOST_PP_TUPLE_ELEM_22_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) n +# define BOOST_PP_TUPLE_ELEM_22_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) o +# define BOOST_PP_TUPLE_ELEM_22_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) p +# define BOOST_PP_TUPLE_ELEM_22_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) q +# define BOOST_PP_TUPLE_ELEM_22_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) r +# define BOOST_PP_TUPLE_ELEM_22_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) s +# define BOOST_PP_TUPLE_ELEM_22_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) t +# define BOOST_PP_TUPLE_ELEM_22_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) u +# define BOOST_PP_TUPLE_ELEM_22_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) v +# +# define BOOST_PP_TUPLE_ELEM_23_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) a +# define BOOST_PP_TUPLE_ELEM_23_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) b +# define BOOST_PP_TUPLE_ELEM_23_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) c +# define BOOST_PP_TUPLE_ELEM_23_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) d +# define BOOST_PP_TUPLE_ELEM_23_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) e +# define BOOST_PP_TUPLE_ELEM_23_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) f +# define BOOST_PP_TUPLE_ELEM_23_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) g +# define BOOST_PP_TUPLE_ELEM_23_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) h +# define BOOST_PP_TUPLE_ELEM_23_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) i +# define BOOST_PP_TUPLE_ELEM_23_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) j +# define BOOST_PP_TUPLE_ELEM_23_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) k +# define BOOST_PP_TUPLE_ELEM_23_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) l +# define BOOST_PP_TUPLE_ELEM_23_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) m +# define BOOST_PP_TUPLE_ELEM_23_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) n +# define BOOST_PP_TUPLE_ELEM_23_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) o +# define BOOST_PP_TUPLE_ELEM_23_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) p +# define BOOST_PP_TUPLE_ELEM_23_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) q +# define BOOST_PP_TUPLE_ELEM_23_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) r +# define BOOST_PP_TUPLE_ELEM_23_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) s +# define BOOST_PP_TUPLE_ELEM_23_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) t +# define BOOST_PP_TUPLE_ELEM_23_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) u +# define BOOST_PP_TUPLE_ELEM_23_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) v +# define BOOST_PP_TUPLE_ELEM_23_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) w +# +# define BOOST_PP_TUPLE_ELEM_24_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) a +# define BOOST_PP_TUPLE_ELEM_24_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) b +# define BOOST_PP_TUPLE_ELEM_24_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) c +# define BOOST_PP_TUPLE_ELEM_24_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) d +# define BOOST_PP_TUPLE_ELEM_24_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) e +# define BOOST_PP_TUPLE_ELEM_24_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) f +# define BOOST_PP_TUPLE_ELEM_24_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) g +# define BOOST_PP_TUPLE_ELEM_24_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) h +# define BOOST_PP_TUPLE_ELEM_24_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) i +# define BOOST_PP_TUPLE_ELEM_24_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) j +# define BOOST_PP_TUPLE_ELEM_24_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) k +# define BOOST_PP_TUPLE_ELEM_24_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) l +# define BOOST_PP_TUPLE_ELEM_24_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) m +# define BOOST_PP_TUPLE_ELEM_24_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) n +# define BOOST_PP_TUPLE_ELEM_24_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) o +# define BOOST_PP_TUPLE_ELEM_24_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) p +# define BOOST_PP_TUPLE_ELEM_24_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) q +# define BOOST_PP_TUPLE_ELEM_24_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) r +# define BOOST_PP_TUPLE_ELEM_24_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) s +# define BOOST_PP_TUPLE_ELEM_24_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) t +# define BOOST_PP_TUPLE_ELEM_24_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) u +# define BOOST_PP_TUPLE_ELEM_24_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) v +# define BOOST_PP_TUPLE_ELEM_24_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) w +# define BOOST_PP_TUPLE_ELEM_24_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) x +# +# define BOOST_PP_TUPLE_ELEM_25_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) a +# define BOOST_PP_TUPLE_ELEM_25_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) b +# define BOOST_PP_TUPLE_ELEM_25_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) c +# define BOOST_PP_TUPLE_ELEM_25_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) d +# define BOOST_PP_TUPLE_ELEM_25_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) e +# define BOOST_PP_TUPLE_ELEM_25_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) f +# define BOOST_PP_TUPLE_ELEM_25_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) g +# define BOOST_PP_TUPLE_ELEM_25_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) h +# define BOOST_PP_TUPLE_ELEM_25_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) i +# define BOOST_PP_TUPLE_ELEM_25_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) j +# define BOOST_PP_TUPLE_ELEM_25_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) k +# define BOOST_PP_TUPLE_ELEM_25_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) l +# define BOOST_PP_TUPLE_ELEM_25_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) m +# define BOOST_PP_TUPLE_ELEM_25_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) n +# define BOOST_PP_TUPLE_ELEM_25_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) o +# define BOOST_PP_TUPLE_ELEM_25_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) p +# define BOOST_PP_TUPLE_ELEM_25_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) q +# define BOOST_PP_TUPLE_ELEM_25_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) r +# define BOOST_PP_TUPLE_ELEM_25_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) s +# define BOOST_PP_TUPLE_ELEM_25_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) t +# define BOOST_PP_TUPLE_ELEM_25_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) u +# define BOOST_PP_TUPLE_ELEM_25_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) v +# define BOOST_PP_TUPLE_ELEM_25_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) w +# define BOOST_PP_TUPLE_ELEM_25_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) x +# define BOOST_PP_TUPLE_ELEM_25_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) y +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/rem.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/rem.hpp new file mode 100644 index 00000000..57ecea1e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/rem.hpp @@ -0,0 +1,72 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_REM_HPP +# define BOOST_PREPROCESSOR_TUPLE_REM_HPP +# +# include +# +# /* BOOST_PP_TUPLE_REM */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_I(size) +# else +# define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_OO((size)) +# define BOOST_PP_TUPLE_REM_OO(par) BOOST_PP_TUPLE_REM_I ## par +# endif +# +# define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size +# +# define BOOST_PP_TUPLE_REM_0() +# define BOOST_PP_TUPLE_REM_1(a) a +# define BOOST_PP_TUPLE_REM_2(a, b) a, b +# define BOOST_PP_TUPLE_REM_3(a, b, c) a, b, c +# define BOOST_PP_TUPLE_REM_4(a, b, c, d) a, b, c, d +# define BOOST_PP_TUPLE_REM_5(a, b, c, d, e) a, b, c, d, e +# define BOOST_PP_TUPLE_REM_6(a, b, c, d, e, f) a, b, c, d, e, f +# define BOOST_PP_TUPLE_REM_7(a, b, c, d, e, f, g) a, b, c, d, e, f, g +# define BOOST_PP_TUPLE_REM_8(a, b, c, d, e, f, g, h) a, b, c, d, e, f, g, h +# define BOOST_PP_TUPLE_REM_9(a, b, c, d, e, f, g, h, i) a, b, c, d, e, f, g, h, i +# define BOOST_PP_TUPLE_REM_10(a, b, c, d, e, f, g, h, i, j) a, b, c, d, e, f, g, h, i, j +# define BOOST_PP_TUPLE_REM_11(a, b, c, d, e, f, g, h, i, j, k) a, b, c, d, e, f, g, h, i, j, k +# define BOOST_PP_TUPLE_REM_12(a, b, c, d, e, f, g, h, i, j, k, l) a, b, c, d, e, f, g, h, i, j, k, l +# define BOOST_PP_TUPLE_REM_13(a, b, c, d, e, f, g, h, i, j, k, l, m) a, b, c, d, e, f, g, h, i, j, k, l, m +# define BOOST_PP_TUPLE_REM_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) a, b, c, d, e, f, g, h, i, j, k, l, m, n +# define BOOST_PP_TUPLE_REM_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o +# define BOOST_PP_TUPLE_REM_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p +# define BOOST_PP_TUPLE_REM_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q +# define BOOST_PP_TUPLE_REM_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r +# define BOOST_PP_TUPLE_REM_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s +# define BOOST_PP_TUPLE_REM_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t +# define BOOST_PP_TUPLE_REM_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u +# define BOOST_PP_TUPLE_REM_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v +# define BOOST_PP_TUPLE_REM_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w +# define BOOST_PP_TUPLE_REM_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x +# define BOOST_PP_TUPLE_REM_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y +# +# /* BOOST_PP_TUPLE_REM_CTOR */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple) +# else +# define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) +# define BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple) +# endif +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) ext tuple +# else +# define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) BOOST_PP_TUPLE_REM_CTOR_OO((ext, tuple)) +# define BOOST_PP_TUPLE_REM_CTOR_OO(par) BOOST_PP_TUPLE_REM_CTOR_II ## par +# define BOOST_PP_TUPLE_REM_CTOR_II(ext, tuple) ext ## tuple +# endif +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/to_list.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/to_list.hpp new file mode 100644 index 00000000..f110f60b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/preprocessor/tuple/to_list.hpp @@ -0,0 +1,62 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP +# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP +# +# include +# +# /* BOOST_PP_TUPLE_TO_LIST */ +# +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_I(size, tuple) +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s t +# else +# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_II(BOOST_PP_TUPLE_TO_LIST_ ## s t) +# define BOOST_PP_TUPLE_TO_LIST_II(res) res +# endif +# else +# define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_OO((size, tuple)) +# define BOOST_PP_TUPLE_TO_LIST_OO(par) BOOST_PP_TUPLE_TO_LIST_I ## par +# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s ## t +# endif +# +# define BOOST_PP_TUPLE_TO_LIST_0() BOOST_PP_NIL +# define BOOST_PP_TUPLE_TO_LIST_1(a) (a, BOOST_PP_NIL) +# define BOOST_PP_TUPLE_TO_LIST_2(a, b) (a, (b, BOOST_PP_NIL)) +# define BOOST_PP_TUPLE_TO_LIST_3(a, b, c) (a, (b, (c, BOOST_PP_NIL))) +# define BOOST_PP_TUPLE_TO_LIST_4(a, b, c, d) (a, (b, (c, (d, BOOST_PP_NIL)))) +# define BOOST_PP_TUPLE_TO_LIST_5(a, b, c, d, e) (a, (b, (c, (d, (e, BOOST_PP_NIL))))) +# define BOOST_PP_TUPLE_TO_LIST_6(a, b, c, d, e, f) (a, (b, (c, (d, (e, (f, BOOST_PP_NIL)))))) +# define BOOST_PP_TUPLE_TO_LIST_7(a, b, c, d, e, f, g) (a, (b, (c, (d, (e, (f, (g, BOOST_PP_NIL))))))) +# define BOOST_PP_TUPLE_TO_LIST_8(a, b, c, d, e, f, g, h) (a, (b, (c, (d, (e, (f, (g, (h, BOOST_PP_NIL)))))))) +# define BOOST_PP_TUPLE_TO_LIST_9(a, b, c, d, e, f, g, h, i) (a, (b, (c, (d, (e, (f, (g, (h, (i, BOOST_PP_NIL))))))))) +# define BOOST_PP_TUPLE_TO_LIST_10(a, b, c, d, e, f, g, h, i, j) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, BOOST_PP_NIL)))))))))) +# define BOOST_PP_TUPLE_TO_LIST_11(a, b, c, d, e, f, g, h, i, j, k) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, BOOST_PP_NIL))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_12(a, b, c, d, e, f, g, h, i, j, k, l) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, BOOST_PP_NIL)))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_13(a, b, c, d, e, f, g, h, i, j, k, l, m) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, BOOST_PP_NIL))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, BOOST_PP_NIL)))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, BOOST_PP_NIL))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, BOOST_PP_NIL)))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, BOOST_PP_NIL))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, BOOST_PP_NIL)))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, BOOST_PP_NIL))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, BOOST_PP_NIL)))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, BOOST_PP_NIL))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, BOOST_PP_NIL)))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, BOOST_PP_NIL))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, (x, BOOST_PP_NIL)))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, (x, (y, BOOST_PP_NIL))))))))))))))))))))))))) +# +# endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random.hpp new file mode 100644 index 00000000..ee449de5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random.hpp @@ -0,0 +1,72 @@ +/* boost random.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org/libs/random for documentation. + * + * $Id: random.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + * Revision history + * 2000-02-18 portability fixes (thanks to Beman Dawes) + * 2000-02-21 shuffle_output, inversive_congruential_schrage, + * generator_iterator, uniform_smallint + * 2000-02-23 generic modulus arithmetic helper, removed *_schrage classes, + * implemented Streamable and EqualityComparable concepts for + * generators, added Bernoulli distribution and Box-Muller + * transform + * 2000-03-01 cauchy, lognormal, triangle distributions; fixed + * uniform_smallint; renamed gaussian to normal distribution + * 2000-03-05 implemented iterator syntax for distribution functions + * 2000-04-21 removed some optimizations for better BCC/MSVC compatibility + * 2000-05-10 adapted to BCC and MSVC + * 2000-06-13 incorporated review results + * 2000-07-06 moved basic templates from namespace detail to random + * 2000-09-23 warning removals and int64 fixes (Ed Brey) + * 2000-09-24 added lagged_fibonacci generator (Matthias Troyer) + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_HPP +#define BOOST_RANDOM_HPP + +// generators +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { + typedef random::xor_combine, 0, + random::linear_feedback_shift, 0, 0>, 0, + random::linear_feedback_shift, 0, 0> taus88; +} // namespace boost + +// misc +#include + +// distributions +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_RANDOM_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/additive_combine.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/additive_combine.hpp new file mode 100644 index 00000000..f281f4cc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/additive_combine.hpp @@ -0,0 +1,134 @@ +/* boost random/additive_combine.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: additive_combine.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_ADDITIVE_COMBINE_HPP +#define BOOST_RANDOM_ADDITIVE_COMBINE_HPP + +#include +#include // for std::min and std::max +#include +#include +#include +#include + +namespace boost { +namespace random { + +// L'Ecuyer 1988 +template +class additive_combine +{ +public: + typedef MLCG1 first_base; + typedef MLCG2 second_base; + typedef typename MLCG1::result_type result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = 1; + static const result_type max_value = MLCG1::max_value-1; +#else + enum { has_fixed_range = false }; +#endif + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 1; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_mlcg1.max)()-1; } + + additive_combine() : _mlcg1(), _mlcg2() { } + additive_combine(typename MLCG1::result_type seed1, + typename MLCG2::result_type seed2) + : _mlcg1(seed1), _mlcg2(seed2) { } + additive_combine(result_type seed) + : _mlcg1(seed), _mlcg2(seed) { } + template additive_combine(It& first, It last) + : _mlcg1(first, last), _mlcg2(first, last) { } + + void seed() + { + _mlcg1.seed(); + _mlcg2.seed(); + } + + void seed(result_type seed) + { + _mlcg1.seed(seed); + _mlcg2.seed(seed); + } + + void seed(typename MLCG1::result_type seed1, + typename MLCG2::result_type seed2) + { + _mlcg1.seed(seed1); + _mlcg2.seed(seed2); + } + + template void seed(It& first, It last) + { + _mlcg1.seed(first, last); + _mlcg2.seed(first, last); + } + + result_type operator()() { + result_type z = _mlcg1() - _mlcg2(); + if(z < 1) + z += MLCG1::modulus-1; + return z; + } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const additive_combine& r) + { os << r._mlcg1 << " " << r._mlcg2; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, additive_combine& r) + { is >> r._mlcg1 >> std::ws >> r._mlcg2; return is; } +#endif + + friend bool operator==(const additive_combine& x, const additive_combine& y) + { return x._mlcg1 == y._mlcg1 && x._mlcg2 == y._mlcg2; } + friend bool operator!=(const additive_combine& x, const additive_combine& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const additive_combine& rhs) const + { return _mlcg1 == rhs._mlcg1 && _mlcg2 == rhs._mlcg2; } + bool operator!=(const additive_combine& rhs) const + { return !(*this == rhs); } +#endif +private: + MLCG1 _mlcg1; + MLCG2 _mlcg2; +}; + +} // namespace random + +typedef random::additive_combine< + random::linear_congruential, + random::linear_congruential, + 2060321752> ecuyer1988; + +} // namespace boost + +#endif // BOOST_RANDOM_ADDITIVE_COMBINE_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/bernoulli_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/bernoulli_distribution.hpp new file mode 100644 index 00000000..6c19794e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/bernoulli_distribution.hpp @@ -0,0 +1,81 @@ +/* boost random/bernoulli_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: bernoulli_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP +#define BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP + +#include +#include +#include + +namespace boost { + +// Bernoulli distribution: p(true) = p, p(false) = 1-p (boolean) +template +class bernoulli_distribution +{ +public: + // In principle, this could work with both integer and floating-point + // types. Generating floating-point random numbers in the first + // place is probably more expensive, so use integer as input. + typedef int input_type; + typedef bool result_type; + + explicit bernoulli_distribution(const RealType& p_arg = RealType(0.5)) + : _p(p_arg) + { + assert(_p >= 0); + assert(_p <= 1); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType p() const { return _p; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + if(_p == RealType(0)) + return false; + else + return RealType(eng() - (eng.min)()) <= _p * RealType((eng.max)()-(eng.min)()); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const bernoulli_distribution& bd) + { + os << bd._p; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, bernoulli_distribution& bd) + { + is >> std::ws >> bd._p; + return is; + } +#endif + +private: + RealType _p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/binomial_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/binomial_distribution.hpp new file mode 100644 index 00000000..37f346c9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/binomial_distribution.hpp @@ -0,0 +1,82 @@ +/* boost random/binomial_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: binomial_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP + +#include +#include +#include +#include + +namespace boost { + +// Knuth +template +class binomial_distribution +{ +public: + typedef typename bernoulli_distribution::input_type input_type; + typedef IntType result_type; + + explicit binomial_distribution(IntType t_arg = 1, + const RealType& p_arg = RealType(0.5)) + : _bernoulli(p_arg), _t(t_arg) + { + assert(_t >= 0); + assert(RealType(0) <= p_arg && p_arg <= RealType(1)); + } + + // compiler-generated copy ctor and assignment operator are fine + + IntType t() const { return _t; } + RealType p() const { return _bernoulli.p(); } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // TODO: This is O(_t), but it should be O(log(_t)) for large _t + result_type n = 0; + for(IntType i = 0; i < _t; ++i) + if(_bernoulli(eng)) + ++n; + return n; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const binomial_distribution& bd) + { + os << bd._bernoulli << " " << bd._t; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, binomial_distribution& bd) + { + is >> std::ws >> bd._bernoulli >> std::ws >> bd._t; + return is; + } +#endif + +private: + bernoulli_distribution _bernoulli; + IntType _t; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/cauchy_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/cauchy_distribution.hpp new file mode 100644 index 00000000..711337a9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/cauchy_distribution.hpp @@ -0,0 +1,90 @@ +/* boost random/cauchy_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: cauchy_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP +#define BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::tan; +#endif + +// Cauchy distribution: p(x) = sigma/(pi*(sigma**2 + (x-median)**2)) +template +class cauchy_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit cauchy_distribution(result_type median_arg = result_type(0), + result_type sigma_arg = result_type(1)) + : _median(median_arg), _sigma(sigma_arg) { } + + // compiler-generated copy ctor and assignment operator are fine + + result_type median() const { return _median; } + result_type sigma() const { return _sigma; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); +#ifndef BOOST_NO_STDC_NAMESPACE + using std::tan; +#endif + return _median + _sigma * tan(pi*(eng()-result_type(0.5))); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const cauchy_distribution& cd) + { + os << cd._median << " " << cd._sigma; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, cauchy_distribution& cd) + { + is >> std::ws >> cd._median >> std::ws >> cd._sigma; + return is; + } +#endif + +private: + result_type _median, _sigma; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/config.hpp new file mode 100644 index 00000000..be922207 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/config.hpp @@ -0,0 +1,18 @@ +/* boost random/detail/config.hpp header file + * + * Copyright Steven Watanabe 2009 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: config.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + */ + +#include + +#if (defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)) \ + && !defined(BOOST_MSVC) + #define BOOST_RANDOM_NO_STREAM_OPERATORS +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/const_mod.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/const_mod.hpp new file mode 100644 index 00000000..6761a6f4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/const_mod.hpp @@ -0,0 +1,359 @@ +/* boost random/detail/const_mod.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: const_mod.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_CONST_MOD_HPP +#define BOOST_RANDOM_CONST_MOD_HPP + +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +/* + * Some random number generators require modular arithmetic. Put + * everything we need here. + * IntType must be an integral type. + */ + +namespace detail { + + template + struct do_add + { }; + + template<> + struct do_add + { + template + static IntType add(IntType m, IntType x, IntType c) + { + if (x < m - c) + return x + c; + else + return x - (m-c); + } + }; + + template<> + struct do_add + { + template + static IntType add(IntType, IntType, IntType) + { + // difficult + assert(!"const_mod::add with c too large"); + return 0; + } + }; +} // namespace detail + +#if !(defined(__BORLANDC__) && (__BORLANDC__ == 0x560)) + +template +class const_mod +{ +public: + static IntType add(IntType x, IntType c) + { + if(c == 0) + return x; + else if(c <= traits::const_max - m) // i.e. m+c < max + return add_small(x, c); + else + return detail::do_add::add(m, x, c); + } + + static IntType mult(IntType a, IntType x) + { + if(a == 1) + return x; + else if(m <= traits::const_max/a) // i.e. a*m <= max + return mult_small(a, x); + else if(traits::is_signed && (m%a < m/a)) + return mult_schrage(a, x); + else { + // difficult + assert(!"const_mod::mult with a too large"); + return 0; + } + } + + static IntType mult_add(IntType a, IntType x, IntType c) + { + if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max + return (a*x+c) % m; + else + return add(mult(a, x), c); + } + + static IntType invert(IntType x) + { return x == 0 ? 0 : invert_euclidian(x); } + +private: + typedef integer_traits traits; + + const_mod(); // don't instantiate + + static IntType add_small(IntType x, IntType c) + { + x += c; + if(x >= m) + x -= m; + return x; + } + + static IntType mult_small(IntType a, IntType x) + { + return a*x % m; + } + + static IntType mult_schrage(IntType a, IntType value) + { + const IntType q = m / a; + const IntType r = m % a; + + assert(r < q); // check that overflow cannot happen + + value = a*(value%q) - r*(value/q); + // An optimizer bug in the SGI MIPSpro 7.3.1.x compiler requires this + // convoluted formulation of the loop (Synge Todo) + for(;;) { + if (value > 0) + break; + value += m; + } + return value; + } + + // invert c in the finite field (mod m) (m must be prime) + static IntType invert_euclidian(IntType c) + { + // we are interested in the gcd factor for c, because this is our inverse + BOOST_STATIC_ASSERT(m > 0); +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) + assert(boost::integer_traits::is_signed); +#elif !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) + BOOST_STATIC_ASSERT(boost::integer_traits::is_signed); +#endif + assert(c > 0); + IntType l1 = 0; + IntType l2 = 1; + IntType n = c; + IntType p = m; + for(;;) { + IntType q = p / n; + l1 -= q * l2; // this requires a signed IntType! + p -= q * n; + if(p == 0) + return (l2 < 1 ? l2 + m : l2); + IntType q2 = n / p; + l2 -= q2 * l1; + n -= q2 * p; + if(n == 0) + return (l1 < 1 ? l1 + m : l1); + } + } +}; + +// The modulus is exactly the word size: rely on machine overflow handling. +// Due to a GCC bug, we cannot partially specialize in the presence of +// template value parameters. +template<> +class const_mod +{ + typedef unsigned int IntType; +public: + static IntType add(IntType x, IntType c) { return x+c; } + static IntType mult(IntType a, IntType x) { return a*x; } + static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; + +template<> +class const_mod +{ + typedef unsigned long IntType; +public: + static IntType add(IntType x, IntType c) { return x+c; } + static IntType mult(IntType a, IntType x) { return a*x; } + static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; + +// the modulus is some power of 2: rely partly on machine overflow handling +// we only specialize for rand48 at the moment +#ifndef BOOST_NO_INT64_T +template<> +class const_mod +{ + typedef uint64_t IntType; +public: + static IntType add(IntType x, IntType c) { return c == 0 ? x : mod(x+c); } + static IntType mult(IntType a, IntType x) { return mod(a*x); } + static IntType mult_add(IntType a, IntType x, IntType c) + { return mod(a*x+c); } + static IntType mod(IntType x) { return x &= ((uint64_t(1) << 48)-1); } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; +#endif /* !BOOST_NO_INT64_T */ + +#else + +// +// for some reason Borland C++ Builder 6 has problems with +// the full specialisations of const_mod, define a generic version +// instead, the compiler will optimise away the const-if statements: +// + +template +class const_mod +{ +public: + static IntType add(IntType x, IntType c) + { + if(0 == m) + { + return x+c; + } + else + { + if(c == 0) + return x; + else if(c <= traits::const_max - m) // i.e. m+c < max + return add_small(x, c); + else + return detail::do_add::add(m, x, c); + } + } + + static IntType mult(IntType a, IntType x) + { + if(x == 0) + { + return a*x; + } + else + { + if(a == 1) + return x; + else if(m <= traits::const_max/a) // i.e. a*m <= max + return mult_small(a, x); + else if(traits::is_signed && (m%a < m/a)) + return mult_schrage(a, x); + else { + // difficult + assert(!"const_mod::mult with a too large"); + return 0; + } + } + } + + static IntType mult_add(IntType a, IntType x, IntType c) + { + if(m == 0) + { + return a*x+c; + } + else + { + if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max + return (a*x+c) % m; + else + return add(mult(a, x), c); + } + } + + static IntType invert(IntType x) + { return x == 0 ? 0 : invert_euclidian(x); } + +private: + typedef integer_traits traits; + + const_mod(); // don't instantiate + + static IntType add_small(IntType x, IntType c) + { + x += c; + if(x >= m) + x -= m; + return x; + } + + static IntType mult_small(IntType a, IntType x) + { + return a*x % m; + } + + static IntType mult_schrage(IntType a, IntType value) + { + const IntType q = m / a; + const IntType r = m % a; + + assert(r < q); // check that overflow cannot happen + + value = a*(value%q) - r*(value/q); + while(value <= 0) + value += m; + return value; + } + + // invert c in the finite field (mod m) (m must be prime) + static IntType invert_euclidian(IntType c) + { + // we are interested in the gcd factor for c, because this is our inverse + BOOST_STATIC_ASSERT(m > 0); +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(boost::integer_traits::is_signed); +#endif + assert(c > 0); + IntType l1 = 0; + IntType l2 = 1; + IntType n = c; + IntType p = m; + for(;;) { + IntType q = p / n; + l1 -= q * l2; // this requires a signed IntType! + p -= q * n; + if(p == 0) + return (l2 < 1 ? l2 + m : l2); + IntType q2 = n / p; + l2 -= q2 * l1; + n -= q2 * p; + if(n == 0) + return (l1 < 1 ? l1 + m : l1); + } + } +}; + + +#endif + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_CONST_MOD_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/pass_through_engine.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/pass_through_engine.hpp new file mode 100644 index 00000000..0d5bc79b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/pass_through_engine.hpp @@ -0,0 +1,98 @@ +/* boost random/detail/uniform_int_float.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: pass_through_engine.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP +#define BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP + +#include +#include + + +namespace boost { +namespace random { +namespace detail { + +template +class pass_through_engine +{ +private: + typedef ptr_helper helper_type; + +public: + typedef typename helper_type::value_type base_type; + typedef typename base_type::result_type result_type; + + explicit pass_through_engine(UniformRandomNumberGenerator rng) + // make argument an rvalue to avoid matching Generator& constructor + : _rng(static_cast(rng)) + { } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().max)(); } + base_type& base() { return helper_type::ref(_rng); } + const base_type& base() const { return helper_type::ref(_rng); } + + result_type operator()() { return base()(); } + +private: + UniformRandomNumberGenerator _rng; +}; + +#ifndef BOOST_NO_STD_LOCALE + +template +std::basic_ostream& +operator<<( + std::basic_ostream& os + , const pass_through_engine& ud + ) +{ + return os << ud.base(); +} + +template +std::basic_istream& +operator>>( + std::basic_istream& is + , const pass_through_engine& ud + ) +{ + return is >> ud.base(); +} + +#else // no new streams + +template +inline std::ostream& +operator<<(std::ostream& os, + const pass_through_engine& ud) +{ + return os << ud.base(); +} + +template +inline std::istream& +operator>>(std::istream& is, + const pass_through_engine& ud) +{ + return is >> ud.base(); +} + +#endif + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/ptr_helper.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/ptr_helper.hpp new file mode 100644 index 00000000..e7d7d3ab --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/ptr_helper.hpp @@ -0,0 +1,94 @@ +/* boost random/detail/ptr_helper.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: ptr_helper.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_PTR_HELPER_HPP +#define BOOST_RANDOM_DETAIL_PTR_HELPER_HPP + +#include + + +namespace boost { +namespace random { +namespace detail { + +// type_traits could help here, but I don't want to depend on type_traits. +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef const T& rvalue_type; + static reference_type ref(T& r) { return r; } + static const T& ref(const T& r) { return r; } +}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef T& rvalue_type; + static reference_type ref(T& r) { return r; } + static const T& ref(const T& r) { return r; } +}; + +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef T* rvalue_type; + static reference_type ref(T * p) { return *p; } + static const T& ref(const T * p) { return *p; } +}; +#endif + +} // namespace detail +} // namespace random +} // namespace boost + +// +// BOOST_RANDOM_PTR_HELPER_SPEC -- +// +// Helper macro for broken compilers defines specializations of +// ptr_helper. +// +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_RANDOM_PTR_HELPER_SPEC(T) \ +namespace boost { namespace random { namespace detail { \ +template<> \ +struct ptr_helper \ +{ \ + typedef T value_type; \ + typedef T& reference_type; \ + typedef T& rvalue_type; \ + static reference_type ref(T& r) { return r; } \ + static const T& ref(const T& r) { return r; } \ +}; \ + \ +template<> \ +struct ptr_helper \ +{ \ + typedef T value_type; \ + typedef T& reference_type; \ + typedef T* rvalue_type; \ + static reference_type ref(T * p) { return *p; } \ + static const T& ref(const T * p) { return *p; } \ +}; \ +}}} +#else +# define BOOST_RANDOM_PTR_HELPER_SPEC(T) +#endif + +#endif // BOOST_RANDOM_DETAIL_PTR_HELPER_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/seed.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/seed.hpp new file mode 100644 index 00000000..66820706 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/seed.hpp @@ -0,0 +1,88 @@ +/* boost random/detail/seed.hpp header file + * + * Copyright Steven Watanabe 2009 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: seed.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_DETAIL_SEED_HPP +#define BOOST_RANDOM_DETAIL_SEED_HPP + +#include + +#if !defined(BOOST_NO_SFINAE) + +#include +#include + +namespace boost { +namespace random { +namespace detail { + +template +struct disable_seed : boost::disable_if > {}; + +template +struct disable_constructor : disable_seed {}; + +template +struct disable_constructor { +}; + +#define BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(Self, Generator, gen) \ + template \ + explicit Self(Generator& gen, typename ::boost::random::detail::disable_constructor::type* = 0) + +#define BOOST_RANDOM_DETAIL_GENERATOR_SEED(Self, Generator, gen) \ + template \ + void seed(Generator& gen, typename ::boost::random::detail::disable_seed::type* = 0) + +#define BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(Self, T, x) \ + explicit Self(const T& x) + +#define BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(Self, T, x) \ + void seed(const T& x) + +} +} +} + +#else + +#include +#include + +#define BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(Self, Generator, gen) \ + Self(Self& other) { *this = other; } \ + Self(const Self& other) { *this = other; } \ + template \ + explicit Self(Generator& gen) { \ + boost_random_constructor_impl(gen, ::boost::is_arithmetic());\ + } \ + template \ + void boost_random_constructor_impl(Generator& gen, ::boost::mpl::false_) + +#define BOOST_RANDOM_DETAIL_GENERATOR_SEED(Self, Generator, gen) \ + template \ + void seed(Generator& gen) { \ + boost_random_seed_impl(gen, ::boost::is_arithmetic());\ + }\ + template\ + void boost_random_seed_impl(Generator& gen, ::boost::mpl::false_) + +#define BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(Self, T, x) \ + explicit Self(const T& x) { boost_random_constructor_impl(x, ::boost::mpl::true_()); }\ + void boost_random_constructor_impl(const T& x, ::boost::mpl::true_) + +#define BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(Self, T, x) \ + void seed(const T& x) { boost_random_seed_impl(x, ::boost::mpl::true_()); }\ + void boost_random_seed_impl(const T& x, ::boost::mpl::true_) + +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/signed_unsigned_tools.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/signed_unsigned_tools.hpp new file mode 100644 index 00000000..0273d729 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/signed_unsigned_tools.hpp @@ -0,0 +1,89 @@ +/* boost random/detail/signed_unsigned_tools.hpp header file + * + * Copyright Jens Maurer 2006 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + */ + +#ifndef BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS +#define BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS + +#include +#include +#include + +namespace boost { +namespace random { +namespace detail { + + +/* + * Compute x - y, we know that x >= y, return an unsigned value. + */ + +template::is_signed> +struct subtract { }; + +template +struct subtract +{ + typedef T result_type; + result_type operator()(T x, T y) { return x - y; } +}; + +template +struct subtract +{ + typedef typename make_unsigned::type result_type; + result_type operator()(T x, T y) + { + if (y >= 0) // because x >= y, it follows that x >= 0, too + return result_type(x) - result_type(y); + if (x >= 0) // y < 0 + // avoid the nasty two's complement case for y == min() + return result_type(x) + result_type(-(y+1)) + 1; + // both x and y are negative: no signed overflow + return result_type(x - y); + } +}; + +/* + * Compute x + y, x is unsigned, result fits in type of "y". + */ + +template::is_signed> +struct add { }; + +template +struct add +{ + typedef T2 result_type; + result_type operator()(T1 x, T2 y) { return x + y; } +}; + +template +struct add +{ + typedef T2 result_type; + result_type operator()(T1 x, T2 y) + { + if (y >= 0) + return x + y; + // y < 0 + if (x >= T1(-(y+1))) // result >= 0 after subtraction + // avoid the nasty two's complement edge case for y == min() + return T2(x - T1(-(y+1)) - 1); + // abs(x) < abs(y), thus T2 able to represent x + return T2(x) + y; + } +}; + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/uniform_int_float.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/uniform_int_float.hpp new file mode 100644 index 00000000..385afaa0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/detail/uniform_int_float.hpp @@ -0,0 +1,85 @@ +/* boost random/detail/uniform_int_float.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_int_float.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP +#define BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP + +#include +#include +#include + + +namespace boost { +namespace random { +namespace detail { + +template +class uniform_int_float +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType result_type; + + uniform_int_float(base_type rng, IntType min_arg = 0, IntType max_arg = 0xffffffff) + : _rng(rng), _min(min_arg), _max(max_arg) + { + init(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + base_type& base() { return _rng.base(); } + const base_type& base() const { return _rng.base(); } + + result_type operator()() + { + return static_cast(_rng() * _range) + _min; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_int_float& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_int_float& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + ud.init(); + return is; + } +#endif + +private: + void init() + { + _range = static_cast(_max-_min)+1; + } + + typedef typename base_type::result_type base_result; + uniform_01 _rng; + result_type _min, _max; + base_result _range; +}; + + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/discard_block.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/discard_block.hpp new file mode 100644 index 00000000..2124a421 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/discard_block.hpp @@ -0,0 +1,123 @@ +/* boost random/discard_block.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: discard_block.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-03-02 created + */ + +#ifndef BOOST_RANDOM_DISCARD_BLOCK_HPP +#define BOOST_RANDOM_DISCARD_BLOCK_HPP + +#include +#include +#include +#include +#include + + +namespace boost { +namespace random { + +template +class discard_block +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef typename base_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(unsigned int, total_block = p); + BOOST_STATIC_CONSTANT(unsigned int, returned_block = r); + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(total_block >= returned_block); +#endif + + discard_block() : _rng(), _n(0) { } + explicit discard_block(const base_type & rng) : _rng(rng), _n(0) { } + template explicit discard_block(T s) : _rng(s), _n(0) {} + template discard_block(It& first, It last) + : _rng(first, last), _n(0) { } + void seed() { _rng.seed(); _n = 0; } + template void seed(T s) { _rng.seed(s); _n = 0; } + template void seed(It& first, It last) + { _n = 0; _rng.seed(first, last); } + + const base_type& base() const { return _rng; } + + result_type operator()() + { + if(_n >= returned_block) { + // discard values of random number generator + for( ; _n < total_block; ++_n) + _rng(); + _n = 0; + } + ++_n; + return _rng(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); } + static bool validation(result_type x) { return true; } // dummy + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const discard_block& s) + { + os << s._rng << " " << s._n << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, discard_block& s) + { + is >> s._rng >> std::ws >> s._n >> std::ws; + return is; + } +#endif + + friend bool operator==(const discard_block& x, const discard_block& y) + { return x._rng == y._rng && x._n == y._n; } + friend bool operator!=(const discard_block& x, const discard_block& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const discard_block& rhs) const + { return _rng == rhs._rng && _n == rhs._n; } + bool operator!=(const discard_block& rhs) const + { return !(*this == rhs); } +#endif + +private: + base_type _rng; + unsigned int _n; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool discard_block::has_fixed_range; +template +const unsigned int discard_block::total_block; +template +const unsigned int discard_block::returned_block; +#endif + +} // namespace random + +} // namespace boost + +#endif // BOOST_RANDOM_DISCARD_BLOCK_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/exponential_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/exponential_distribution.hpp new file mode 100644 index 00000000..ad692077 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/exponential_distribution.hpp @@ -0,0 +1,82 @@ +/* boost random/exponential_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: exponential_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + +// exponential distribution: p(x) = lambda * exp(-lambda * x) +template +class exponential_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit exponential_distribution(result_type lambda_arg = result_type(1)) + : _lambda(lambda_arg) { assert(_lambda > result_type(0)); } + + // compiler-generated copy ctor and assignment operator are fine + + result_type lambda() const { return _lambda; } + + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; +#endif + return -result_type(1) / _lambda * log(result_type(1)-eng()); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const exponential_distribution& ed) + { + os << ed._lambda; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, exponential_distribution& ed) + { + is >> std::ws >> ed._lambda; + return is; + } +#endif + +private: + result_type _lambda; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/gamma_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/gamma_distribution.hpp new file mode 100644 index 00000000..919169df --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/gamma_distribution.hpp @@ -0,0 +1,134 @@ +/* boost random/gamma_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: gamma_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP +#define BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + +// Knuth +template +class gamma_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit gamma_distribution(const result_type& alpha_arg = result_type(1)) + : _exp(result_type(1)), _alpha(alpha_arg) + { + assert(_alpha > result_type(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType alpha() const { return _alpha; } + + void reset() { _exp.reset(); } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::tan; using std::sqrt; using std::exp; using std::log; + using std::pow; +#endif + if(_alpha == result_type(1)) { + return _exp(eng); + } else if(_alpha > result_type(1)) { + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); + for(;;) { + result_type y = tan(pi * eng()); + result_type x = sqrt(result_type(2)*_alpha-result_type(1))*y + + _alpha-result_type(1); + if(x <= result_type(0)) + continue; + if(eng() > + (result_type(1)+y*y) * exp((_alpha-result_type(1)) + *log(x/(_alpha-result_type(1))) + - sqrt(result_type(2)*_alpha + -result_type(1))*y)) + continue; + return x; + } + } else /* alpha < 1.0 */ { + for(;;) { + result_type u = eng(); + result_type y = _exp(eng); + result_type x, q; + if(u < _p) { + x = exp(-y/_alpha); + q = _p*exp(-x); + } else { + x = result_type(1)+y; + q = _p + (result_type(1)-_p) * pow(x, _alpha-result_type(1)); + } + if(u >= q) + continue; + return x; + } + } + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const gamma_distribution& gd) + { + os << gd._alpha; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, gamma_distribution& gd) + { + is >> std::ws >> gd._alpha; + gd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + _p = exp(result_type(1)) / (_alpha + exp(result_type(1))); + } + + exponential_distribution _exp; + result_type _alpha; + // some data precomputed from the parameters + result_type _p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/geometric_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/geometric_distribution.hpp new file mode 100644 index 00000000..ee086628 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/geometric_distribution.hpp @@ -0,0 +1,98 @@ +/* boost random/geometric_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: geometric_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP +#define BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP + +#include // std::log +#include +#include +#include +#include + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::log; +#endif + +// geometric distribution: p(i) = (1-p) * pow(p, i-1) (integer) +template +class geometric_distribution +{ +public: + typedef RealType input_type; + typedef IntType result_type; + + explicit geometric_distribution(const RealType& p_arg = RealType(0.5)) + : _p(p_arg) + { + assert(RealType(0) < _p && _p < RealType(1)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType p() const { return _p; } + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; + using std::floor; +#endif + return IntType(floor(log(RealType(1)-eng()) / _log_p)) + IntType(1); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const geometric_distribution& gd) + { + os << gd._p; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, geometric_distribution& gd) + { + is >> std::ws >> gd._p; + gd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; +#endif + _log_p = log(_p); + } + + RealType _p; + RealType _log_p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/inversive_congruential.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/inversive_congruential.hpp new file mode 100644 index 00000000..43ab8397 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/inversive_congruential.hpp @@ -0,0 +1,129 @@ +/* boost random/inversive_congruential.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: inversive_congruential.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP +#define BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Eichenauer and Lehn 1986 +template +class inversive_congruential +{ +public: + typedef IntType result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = (b == 0 ? 1 : 0); + static const result_type max_value = p-1; +#else + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); +#endif + BOOST_STATIC_CONSTANT(result_type, multiplier = a); + BOOST_STATIC_CONSTANT(result_type, increment = b); + BOOST_STATIC_CONSTANT(result_type, modulus = p); + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return b == 0 ? 1 : 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return p-1; } + + explicit inversive_congruential(IntType y0 = 1) : value(y0) + { + BOOST_STATIC_ASSERT(b >= 0); + BOOST_STATIC_ASSERT(p > 1); + BOOST_STATIC_ASSERT(a >= 1); + if(b == 0) + assert(y0 > 0); + } + template inversive_congruential(It& first, It last) + { seed(first, last); } + + void seed(IntType y0 = 1) { value = y0; if(b == 0) assert(y0 > 0); } + template void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("inversive_congruential::seed"); + value = *first++; + } + IntType operator()() + { + typedef const_mod do_mod; + value = do_mod::mult_add(a, do_mod::invert(value), b); + return value; + } + + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, inversive_congruential x) + { os << x.value; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, inversive_congruential& x) + { is >> x.value; return is; } +#endif + + friend bool operator==(inversive_congruential x, inversive_congruential y) + { return x.value == y.value; } + friend bool operator!=(inversive_congruential x, inversive_congruential y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(inversive_congruential rhs) const + { return value == rhs.value; } + bool operator!=(inversive_congruential rhs) const + { return !(*this == rhs); } +#endif +private: + IntType value; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool inversive_congruential::has_fixed_range; +template +const typename inversive_congruential::result_type inversive_congruential::min_value; +template +const typename inversive_congruential::result_type inversive_congruential::max_value; +template +const typename inversive_congruential::result_type inversive_congruential::multiplier; +template +const typename inversive_congruential::result_type inversive_congruential::increment; +template +const typename inversive_congruential::result_type inversive_congruential::modulus; +#endif + +} // namespace random + +typedef random::inversive_congruential hellekalek1995; + +} // namespace boost + +#endif // BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/lagged_fibonacci.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/lagged_fibonacci.hpp new file mode 100644 index 00000000..15f54839 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/lagged_fibonacci.hpp @@ -0,0 +1,469 @@ +/* boost random/lagged_fibonacci.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: lagged_fibonacci.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LAGGED_FIBONACCI_HPP +#define BOOST_RANDOM_LAGGED_FIBONACCI_HPP + +#include +#include +#include // std::max +#include +#include // std::pow +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 +# define BOOST_RANDOM_EXTRACT_LF +#endif + +#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3) +# define BOOST_RANDOM_EXTRACT_LF +#endif + +# ifdef BOOST_RANDOM_EXTRACT_LF +namespace detail +{ + template + IStream& + extract_lagged_fibonacci_01( + IStream& is + , F const& f + , unsigned int& i + , RealType* x + , RealType modulus) + { + is >> i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + { + RealType value; + is >> value >> std::ws; + x[i] = value / modulus; + } + return is; + } + + template + IStream& + extract_lagged_fibonacci( + IStream& is + , F const& f + , unsigned int& i + , UIntType* x) + { + is >> i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + is >> x[i] >> std::ws; + return is; + } +} +# endif + +template +class lagged_fibonacci +{ +public: + typedef UIntType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = p); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = q); + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return wordmask; } + + lagged_fibonacci() { init_wordmask(); seed(); } + explicit lagged_fibonacci(uint32_t value) { init_wordmask(); seed(value); } + template lagged_fibonacci(It& first, It last) + { init_wordmask(); seed(first, last); } + // compiler-generated copy ctor and assignment operator are fine + +private: + void init_wordmask() + { + wordmask = 0; + for(int j = 0; j < w; ++j) + wordmask |= (1u << j); + } + +public: + void seed(uint32_t value = 331u) + { + minstd_rand0 gen(value); + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen() & wordmask; + i = long_lag; + } + + template + void seed(It& first, It last) + { + // word size could be smaller than the seed values + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j, ++first) + x[j] = *first & wordmask; + i = long_lag; + if(first == last && j < long_lag) + throw std::invalid_argument("lagged_fibonacci::seed"); + } + + result_type operator()() + { + if(i >= long_lag) + fill(); + return x[i++]; + } + + static bool validation(result_type x) + { + return x == val; + } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lagged_fibonacci& f) + { + os << f.i << " "; + for(unsigned int i = 0; i < f.long_lag; ++i) + os << f.x[i] << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lagged_fibonacci& f) + { +# ifdef BOOST_RANDOM_EXTRACT_LF + return detail::extract_lagged_fibonacci(is, f, f.i, f.x); +# else + is >> f.i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + is >> f.x[i] >> std::ws; + return is; +# endif + } +#endif + + friend bool operator==(const lagged_fibonacci& x, const lagged_fibonacci& y) + { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); } + friend bool operator!=(const lagged_fibonacci& x, + const lagged_fibonacci& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const lagged_fibonacci& rhs) const + { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); } + bool operator!=(const lagged_fibonacci& rhs) const + { return !(*this == rhs); } +#endif + +private: + void fill(); + UIntType wordmask; + unsigned int i; + UIntType x[long_lag]; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool lagged_fibonacci::has_fixed_range; +template +const unsigned int lagged_fibonacci::long_lag; +template +const unsigned int lagged_fibonacci::short_lag; +#endif + +template +void lagged_fibonacci::fill() +{ + // two loops to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(unsigned int j = 0; j < short_lag; ++j) + x[j] = (x[j] + x[j+(long_lag-short_lag)]) & wordmask; + } + for(unsigned int j = short_lag; j < long_lag; ++j) + x[j] = (x[j] + x[j-short_lag]) & wordmask; + i = 0; +} + + + +// lagged Fibonacci generator for the range [0..1) +// contributed by Matthias Troyer +// for p=55, q=24 originally by G. J. Mitchell and D. P. Moore 1958 + +template +struct fibonacci_validation +{ + BOOST_STATIC_CONSTANT(bool, is_specialized = false); + static T value() { return 0; } + static T tolerance() { return 0; } +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool fibonacci_validation::is_specialized; +#endif + +#define BOOST_RANDOM_FIBONACCI_VAL(T,P,Q,V,E) \ +template<> \ +struct fibonacci_validation \ +{ \ + BOOST_STATIC_CONSTANT(bool, is_specialized = true); \ + static T value() { return V; } \ + static T tolerance() \ +{ return (std::max)(E, static_cast(5*std::numeric_limits::epsilon())); } \ +}; +// (The extra static_cast in the std::max call above is actually +// unnecessary except for HP aCC 1.30, which claims that +// numeric_limits::epsilon() doesn't actually return a double.) + +BOOST_RANDOM_FIBONACCI_VAL(double, 607, 273, 0.4293817707235914, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 1279, 418, 0.9421630240437659, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 2281, 1252, 0.1768114046909004, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 3217, 576, 0.1956232694868209, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 4423, 2098, 0.9499762202147172, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 9689, 5502, 0.05737836943695162, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 19937, 9842, 0.5076528587449834, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 23209, 13470, 0.5414473810619185, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 44497,21034, 0.254135073399297, 1e-14) + +#undef BOOST_RANDOM_FIBONACCI_VAL + +template +class lagged_fibonacci_01 +{ +public: + typedef RealType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = p); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = q); + + lagged_fibonacci_01() { init_modulus(); seed(); } + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(lagged_fibonacci_01, uint32_t, value) + { init_modulus(); seed(value); } + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(lagged_fibonacci_01, Generator, gen) + { init_modulus(); seed(gen); } + template lagged_fibonacci_01(It& first, It last) + { init_modulus(); seed(first, last); } + // compiler-generated copy ctor and assignment operator are fine + +private: + void init_modulus() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + _modulus = pow(RealType(2), word_size); + } + +public: + void seed() { seed(331u); } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(lagged_fibonacci_01, uint32_t, value) + { + minstd_rand0 intgen(value); + seed(intgen); + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line template member functions. + BOOST_RANDOM_DETAIL_GENERATOR_SEED(lagged_fibonacci, Generator, gen) + { + // use pass-by-reference, but wrap argument in pass_through_engine + typedef detail::pass_through_engine ref_gen; + uniform_01 gen01 = + uniform_01(ref_gen(gen)); + // I could have used std::generate_n, but it takes "gen" by value + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen01(); + i = long_lag; + } + + template + void seed(It& first, It last) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; + using std::pow; +#endif + unsigned long mask = ~((~0u) << (w%32)); // now lowest w bits set + RealType two32 = pow(RealType(2), 32); + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j) { + x[j] = RealType(0); + for(int k = 0; k < w/32 && first != last; ++k, ++first) + x[j] += *first / pow(two32,k+1); + if(first != last && mask != 0) { + x[j] += fmod((*first & mask) / _modulus, RealType(1)); + ++first; + } + } + i = long_lag; + if(first == last && j < long_lag) + throw std::invalid_argument("lagged_fibonacci_01::seed"); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + + result_type operator()() + { + if(i >= long_lag) + fill(); + return x[i++]; + } + + static bool validation(result_type x) + { + result_type v = fibonacci_validation::value(); + result_type epsilon = fibonacci_validation::tolerance(); + // std::abs is a source of trouble: sometimes, it's not overloaded + // for double, plus the usual namespace std noncompliance -> avoid it + // using std::abs; + // return abs(x - v) < 5 * epsilon + return x > v - epsilon && x < v + epsilon; + } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lagged_fibonacci_01&f) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + os << f.i << " "; + std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left); + for(unsigned int i = 0; i < f.long_lag; ++i) + os << f.x[i] * f._modulus << " "; + os.flags(oldflags); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lagged_fibonacci_01& f) + { +# ifdef BOOST_RANDOM_EXTRACT_LF + return detail::extract_lagged_fibonacci_01(is, f, f.i, f.x, f._modulus); +# else + is >> f.i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) { + typename lagged_fibonacci_01::result_type value; + is >> value >> std::ws; + f.x[i] = value / f._modulus; + } + return is; +# endif + } +#endif + + friend bool operator==(const lagged_fibonacci_01& x, + const lagged_fibonacci_01& y) + { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); } + friend bool operator!=(const lagged_fibonacci_01& x, + const lagged_fibonacci_01& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const lagged_fibonacci_01& rhs) const + { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); } + bool operator!=(const lagged_fibonacci_01& rhs) const + { return !(*this == rhs); } +#endif + +private: + void fill(); + unsigned int i; + RealType x[long_lag]; + RealType _modulus; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool lagged_fibonacci_01::has_fixed_range; +template +const unsigned int lagged_fibonacci_01::long_lag; +template +const unsigned int lagged_fibonacci_01::short_lag; +template +const int lagged_fibonacci_01::word_size; + +#endif + +template +void lagged_fibonacci_01::fill() +{ + // two loops to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(unsigned int j = 0; j < short_lag; ++j) { + RealType t = x[j] + x[j+(long_lag-short_lag)]; + if(t >= RealType(1)) + t -= RealType(1); + x[j] = t; + } + } + for(unsigned int j = short_lag; j < long_lag; ++j) { + RealType t = x[j] + x[j-short_lag]; + if(t >= RealType(1)) + t -= RealType(1); + x[j] = t; + } + i = 0; +} + +} // namespace random + +typedef random::lagged_fibonacci_01 lagged_fibonacci607; +typedef random::lagged_fibonacci_01 lagged_fibonacci1279; +typedef random::lagged_fibonacci_01 lagged_fibonacci2281; +typedef random::lagged_fibonacci_01 lagged_fibonacci3217; +typedef random::lagged_fibonacci_01 lagged_fibonacci4423; +typedef random::lagged_fibonacci_01 lagged_fibonacci9689; +typedef random::lagged_fibonacci_01 lagged_fibonacci19937; +typedef random::lagged_fibonacci_01 lagged_fibonacci23209; +typedef random::lagged_fibonacci_01 lagged_fibonacci44497; + + +// It is possible to partially specialize uniform_01<> on lagged_fibonacci_01<> +// to help the compiler generate efficient code. For GCC, this seems useless, +// because GCC optimizes (x-0)/(1-0) to (x-0). This is good enough for now. + +} // namespace boost + +#endif // BOOST_RANDOM_LAGGED_FIBONACCI_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_congruential.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_congruential.hpp new file mode 100644 index 00000000..3397ea34 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_congruential.hpp @@ -0,0 +1,273 @@ +/* boost random/linear_congruential.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: linear_congruential.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP +#define BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// compile-time configurable linear congruential generator +template +class linear_congruential +{ +public: + typedef IntType result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = ( c == 0 ? 1 : 0 ); + static const result_type max_value = m-1; +#else + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); +#endif + BOOST_STATIC_CONSTANT(IntType, multiplier = a); + BOOST_STATIC_CONSTANT(IntType, increment = c); + BOOST_STATIC_CONSTANT(IntType, modulus = m); + + // MSVC 6 and possibly others crash when encountering complicated integral + // constant expressions. Avoid the check for now. + // BOOST_STATIC_ASSERT(m == 0 || a < m); + // BOOST_STATIC_ASSERT(m == 0 || c < m); + + explicit linear_congruential(IntType x0 = 1) + : _modulus(modulus), _x(_modulus ? (x0 % _modulus) : x0) + { + assert(c || x0); /* if c == 0 and x(0) == 0 then x(n) = 0 for all n */ + // overflow check + // disabled because it gives spurious "divide by zero" gcc warnings + // assert(m == 0 || (a*(m-1)+c) % m == (c < a ? c-a+m : c-a)); + + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + + template + linear_congruential(It& first, It last) + : _modulus(modulus) + { + seed(first, last); + } + + // compiler-generated copy constructor and assignment operator are fine + void seed(IntType x0 = 1) + { + assert(c || x0); + _x = (_modulus ? (x0 % _modulus) : x0); + } + + template + void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("linear_congruential::seed"); + IntType value = *first++; + _x = (_modulus ? (value % _modulus) : value); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return c == 0 ? 1 : 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return modulus-1; } + + IntType operator()() + { + _x = const_mod::mult_add(a, _x, c); + return _x; + } + + static bool validation(IntType x) { return val == x; } + +#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE + + // Use a member function; Streamable concept not supported. + bool operator==(const linear_congruential& rhs) const + { return _x == rhs._x; } + bool operator!=(const linear_congruential& rhs) const + { return !(*this == rhs); } + +#else + friend bool operator==(const linear_congruential& x, + const linear_congruential& y) + { return x._x == y._x; } + friend bool operator!=(const linear_congruential& x, + const linear_congruential& y) + { return !(x == y); } + +#if !defined(BOOST_RANDOM_NO_STREAM_OPERATORS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const linear_congruential& lcg) + { + return os << lcg._x; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, + linear_congruential& lcg) + { + return is >> lcg._x; + } + +private: +#endif +#endif + + IntType _modulus; // work-around for gcc "divide by zero" warning in ctor + IntType _x; +}; + +// probably needs the "no native streams" caveat for STLPort +#if !defined(__SGI_STL_PORT) && BOOST_WORKAROUND(__GNUC__, == 2) +template +std::ostream& +operator<<(std::ostream& os, + const linear_congruential& lcg) +{ + return os << lcg._x; +} + +template +std::istream& +operator>>(std::istream& is, + linear_congruential& lcg) +{ + return is >> lcg._x; +} +#elif defined(BOOST_RANDOM_NO_STREAM_OPERATORS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) +template +std::basic_ostream& +operator<<(std::basic_ostream& os, + const linear_congruential& lcg) +{ + return os << lcg._x; +} + +template +std::basic_istream& +operator>>(std::basic_istream& is, + linear_congruential& lcg) +{ + return is >> lcg._x; +} +#endif + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool linear_congruential::has_fixed_range; +template +const typename linear_congruential::result_type linear_congruential::min_value; +template +const typename linear_congruential::result_type linear_congruential::max_value; +template +const IntType linear_congruential::modulus; +#endif + +} // namespace random + +// validation values from the publications +typedef random::linear_congruential minstd_rand0; +typedef random::linear_congruential minstd_rand; + + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +// emulate the lrand48() C library function; requires support for uint64_t +class rand48 +{ +public: + typedef int32_t result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const int32_t min_value = 0; + static const int32_t max_value = integer_traits::const_max; +#else + enum { has_fixed_range = false }; +#endif + int32_t min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + int32_t max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); } + + rand48() : lcf(cnv(static_cast(1))) {} + template explicit rand48(T x0) : lcf(cnv(x0)) { } + template rand48(It& first, It last) : lcf(first, last) { } + // compiler-generated copy ctor and assignment operator are fine + void seed() { seed(static_cast(1)); } + template void seed(T x0) { lcf.seed(cnv(x0)); } + template void seed(It& first, It last) { lcf.seed(first,last); } + + int32_t operator()() { return static_cast(lcf() >> 17); } + // by experiment from lrand48() + static bool validation(int32_t x) { return x == 1993516219; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const rand48& r) + { os << r.lcf; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, rand48& r) + { is >> r.lcf; return is; } +#endif + + friend bool operator==(const rand48& x, const rand48& y) + { return x.lcf == y.lcf; } + friend bool operator!=(const rand48& x, const rand48& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const rand48& rhs) const + { return lcf == rhs.lcf; } + bool operator!=(const rand48& rhs) const + { return !(*this == rhs); } +#endif +private: + random::linear_congruential lcf; + template + static uint64_t cnv(T x) + { + if(sizeof(T) < sizeof(uint64_t)) { + return (static_cast(x) << 16) | 0x330e; + } else { + return(static_cast(x)); + } + } + static uint64_t cnv(float x) { return(static_cast(x)); } + static uint64_t cnv(double x) { return(static_cast(x)); } + static uint64_t cnv(long double x) { return(static_cast(x)); } +}; +#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */ + +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_feedback_shift.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_feedback_shift.hpp new file mode 100644 index 00000000..72014cb8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/linear_feedback_shift.hpp @@ -0,0 +1,146 @@ +/* boost random/tausworthe.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: linear_feedback_shift.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP +#define BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Tausworte 1965 +template +class linear_feedback_shift +{ +public: + typedef UIntType result_type; + // avoid the warning trouble when using (1< 0); + // BOOST_STATIC_ASSERT(q > 0); + // BOOST_STATIC_ASSERT(k < w); + // BOOST_STATIC_ASSERT(0 < 2*q && 2*q < k); + // BOOST_STATIC_ASSERT(0 < s && s <= k-q); + + explicit linear_feedback_shift(UIntType s0 = 341) : wordmask(0) + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + + // avoid "left shift count >= with of type" warning + for(int i = 0; i < w; ++i) + wordmask |= (1u << i); + seed(s0); + } + + template linear_feedback_shift(It& first, It last) : wordmask(0) + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + + // avoid "left shift count >= with of type" warning + for(int i = 0; i < w; ++i) + wordmask |= (1u << i); + seed(first, last); + } + + void seed(UIntType s0 = 341) { assert(s0 >= (1 << (w-k))); value = s0; } + template void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("linear_feedback_shift::seed"); + value = *first++; + assert(value >= (1 << (w-k))); + } + + result_type operator()() + { + const UIntType b = (((value << q) ^ value) & wordmask) >> (k-s); + const UIntType mask = ( (~static_cast(0)) << (w-k) ) & wordmask; + value = ((value & mask) << s) ^ b; + return value; + } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, linear_feedback_shift x) + { os << x.value; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, linear_feedback_shift& x) + { is >> x.value; return is; } +#endif + + friend bool operator==(linear_feedback_shift x, linear_feedback_shift y) + { return x.value == y.value; } + friend bool operator!=(linear_feedback_shift x, linear_feedback_shift y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(linear_feedback_shift rhs) const + { return value == rhs.value; } + bool operator!=(linear_feedback_shift rhs) const + { return !(*this == rhs); } +#endif + +private: + UIntType wordmask; // avoid "left shift count >= width of type" warnings + UIntType value; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool linear_feedback_shift::has_fixed_range; +template +const int linear_feedback_shift::word_size; +template +const int linear_feedback_shift::exponent1; +template +const int linear_feedback_shift::exponent2; +template +const int linear_feedback_shift::step_size; +#endif + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/lognormal_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/lognormal_distribution.hpp new file mode 100644 index 00000000..a0c51ca2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/lognormal_distribution.hpp @@ -0,0 +1,115 @@ +/* boost random/lognormal_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: lognormal_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP + +#include // std::exp, std::sqrt +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { + using ::log; + using ::sqrt; +} +#endif + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::sqrt; + using std::exp; +#endif + +template +class lognormal_distribution +{ +public: + typedef typename normal_distribution::input_type input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit lognormal_distribution(result_type mean_arg = result_type(1), + result_type sigma_arg = result_type(1)) + : _mean(mean_arg), _sigma(sigma_arg) + { + assert(_mean > result_type(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + RealType sigma() const { return _sigma; } + void reset() { _normal.reset(); } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + return exp(_normal(eng) * _nsigma + _nmean); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lognormal_distribution& ld) + { + os << ld._normal << " " << ld._mean << " " << ld._sigma; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lognormal_distribution& ld) + { + is >> std::ws >> ld._normal >> std::ws >> ld._mean >> std::ws >> ld._sigma; + ld.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; using std::log; using std::sqrt; +#endif + _nmean = log(_mean*_mean/sqrt(_sigma*_sigma + _mean*_mean)); + _nsigma = sqrt(log(_sigma*_sigma/_mean/_mean+result_type(1))); + } + + RealType _mean, _sigma; + RealType _nmean, _nsigma; + normal_distribution _normal; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/mersenne_twister.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/mersenne_twister.hpp new file mode 100644 index 00000000..bd34f426 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/mersenne_twister.hpp @@ -0,0 +1,293 @@ +/* boost random/mersenne_twister.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: mersenne_twister.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_MERSENNE_TWISTER_HPP +#define BOOST_RANDOM_MERSENNE_TWISTER_HPP + +#include +#include // std::copy +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// http://www.math.keio.ac.jp/matumoto/emt.html +template +class mersenne_twister +{ +public: + typedef UIntType result_type; + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(int, state_size = n); + BOOST_STATIC_CONSTANT(int, shift_size = m); + BOOST_STATIC_CONSTANT(int, mask_bits = r); + BOOST_STATIC_CONSTANT(UIntType, parameter_a = a); + BOOST_STATIC_CONSTANT(int, output_u = u); + BOOST_STATIC_CONSTANT(int, output_s = s); + BOOST_STATIC_CONSTANT(UIntType, output_b = b); + BOOST_STATIC_CONSTANT(int, output_t = t); + BOOST_STATIC_CONSTANT(UIntType, output_c = c); + BOOST_STATIC_CONSTANT(int, output_l = l); + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + + mersenne_twister() { seed(); } + + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(mersenne_twister, UIntType, value) + { seed(value); } + template mersenne_twister(It& first, It last) { seed(first,last); } + + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(mersenne_twister, Generator, gen) + { seed(gen); } + + // compiler-generated copy ctor and assignment operator are fine + + void seed() { seed(UIntType(5489)); } + + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(mersenne_twister, UIntType, value) + { + // New seeding algorithm from + // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html + // In the previous versions, MSBs of the seed affected only MSBs of the + // state x[]. + const UIntType mask = ~0u; + x[0] = value & mask; + for (i = 1; i < n; i++) { + // See Knuth "The Art of Computer Programming" Vol. 2, 3rd ed., page 106 + x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask; + } + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line definitions of member function templates. + BOOST_RANDOM_DETAIL_GENERATOR_SEED(mersenne_twister, Generator, gen) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + // I could have used std::generate_n, but it takes "gen" by value + for(int j = 0; j < n; j++) + x[j] = gen(); + i = n; + } + + template + void seed(It& first, It last) + { + int j; + for(j = 0; j < n && first != last; ++j, ++first) + x[j] = *first; + i = n; + if(first == last && j < n) + throw std::invalid_argument("mersenne_twister::seed"); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { + // avoid "left shift count >= with of type" warning + result_type res = 0; + for(int j = 0; j < w; ++j) + res |= (1u << j); + return res; + } + + result_type operator()(); + static bool validation(result_type v) { return val == v; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const mersenne_twister& mt) + { + for(int j = 0; j < mt.state_size; ++j) + os << mt.compute(j) << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, mersenne_twister& mt) + { + for(int j = 0; j < mt.state_size; ++j) + is >> mt.x[j] >> std::ws; + // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template + // value parameter "n" available from the class template scope, so use + // the static constant with the same value + mt.i = mt.state_size; + return is; + } +#endif + + friend bool operator==(const mersenne_twister& x, const mersenne_twister& y) + { + for(int j = 0; j < state_size; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const mersenne_twister& x, const mersenne_twister& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const mersenne_twister& rhs) const + { + for(int j = 0; j < state_size; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const mersenne_twister& rhs) const + { return !(*this == rhs); } +#endif + +private: + // returns x(i-n+index), where index is in 0..n-1 + UIntType compute(unsigned int index) const + { + // equivalent to (i-n+index) % 2n, but doesn't produce negative numbers + return x[ (i + n + index) % (2*n) ]; + } + void twist(int block); + + // state representation: next output is o(x(i)) + // x[0] ... x[k] x[k+1] ... x[n-1] x[n] ... x[2*n-1] represents + // x(i-k) ... x(i) x(i+1) ... x(i-k+n-1) x(i-k-n) ... x[i(i-k-1)] + // The goal is to always have x(i-n) ... x(i-1) available for + // operator== and save/restore. + + UIntType x[2*n]; + int i; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool mersenne_twister::has_fixed_range; +template +const int mersenne_twister::state_size; +template +const int mersenne_twister::shift_size; +template +const int mersenne_twister::mask_bits; +template +const UIntType mersenne_twister::parameter_a; +template +const int mersenne_twister::output_u; +template +const int mersenne_twister::output_s; +template +const UIntType mersenne_twister::output_b; +template +const int mersenne_twister::output_t; +template +const UIntType mersenne_twister::output_c; +template +const int mersenne_twister::output_l; +#endif + +template +void mersenne_twister::twist(int block) +{ + const UIntType upper_mask = (~0u) << r; + const UIntType lower_mask = ~upper_mask; + + if(block == 0) { + for(int j = n; j < 2*n; j++) { + UIntType y = (x[j-n] & upper_mask) | (x[j-(n-1)] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0); + } + } else if (block == 1) { + // split loop to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(int j = 0; j < n-m; j++) { + UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask); + x[j] = x[j+n+m] ^ (y >> 1) ^ (y&1 ? a : 0); + } + } + + for(int j = n-m; j < n-1; j++) { + UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0); + } + // last iteration + UIntType y = (x[2*n-1] & upper_mask) | (x[0] & lower_mask); + x[n-1] = x[m-1] ^ (y >> 1) ^ (y&1 ? a : 0); + i = 0; + } +} + +template +inline typename mersenne_twister::result_type +mersenne_twister::operator()() +{ + if(i == n) + twist(0); + else if(i >= 2*n) + twist(1); + // Step 4 + UIntType z = x[i]; + ++i; + z ^= (z >> u); + z ^= ((z << s) & b); + z ^= ((z << t) & c); + z ^= (z >> l); + return z; +} + +} // namespace random + + +typedef random::mersenne_twister mt11213b; + +// validation by experiment from mt19937.c +typedef random::mersenne_twister mt19937; + +} // namespace boost + +BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt19937) + +#endif // BOOST_RANDOM_MERSENNE_TWISTER_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/normal_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/normal_distribution.hpp new file mode 100644 index 00000000..4fd383a8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/normal_distribution.hpp @@ -0,0 +1,112 @@ +/* boost random/normal_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: normal_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + +// deterministic Box-Muller method, uses trigonometric functions +template +class normal_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit normal_distribution(const result_type& mean_arg = result_type(0), + const result_type& sigma_arg = result_type(1)) + : _mean(mean_arg), _sigma(sigma_arg), _valid(false) + { + assert(_sigma >= result_type(0)); + } + + // compiler-generated copy constructor is NOT fine, need to purge cache + normal_distribution(const normal_distribution& other) + : _mean(other._mean), _sigma(other._sigma), _valid(false) + { + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + RealType sigma() const { return _sigma; } + + void reset() { _valid = false; } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::sqrt; using std::log; using std::sin; using std::cos; +#endif + if(!_valid) { + _r1 = eng(); + _r2 = eng(); + _cached_rho = sqrt(-result_type(2) * log(result_type(1)-_r2)); + _valid = true; + } else { + _valid = false; + } + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); + + return _cached_rho * (_valid ? + cos(result_type(2)*pi*_r1) : + sin(result_type(2)*pi*_r1)) + * _sigma + _mean; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const normal_distribution& nd) + { + os << nd._mean << " " << nd._sigma << " " + << nd._valid << " " << nd._cached_rho << " " << nd._r1; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, normal_distribution& nd) + { + is >> std::ws >> nd._mean >> std::ws >> nd._sigma + >> std::ws >> nd._valid >> std::ws >> nd._cached_rho + >> std::ws >> nd._r1; + return is; + } +#endif +private: + result_type _mean, _sigma; + result_type _r1, _r2, _cached_rho; + bool _valid; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/poisson_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/poisson_distribution.hpp new file mode 100644 index 00000000..b94418c0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/poisson_distribution.hpp @@ -0,0 +1,100 @@ +/* boost random/poisson_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: poisson_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_POISSON_DISTRIBUTION_HPP +#define BOOST_RANDOM_POISSON_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + +// Knuth +template +class poisson_distribution +{ +public: + typedef RealType input_type; + typedef IntType result_type; + + explicit poisson_distribution(const RealType& mean_arg = RealType(1)) + : _mean(mean_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + assert(_mean > RealType(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // TODO: This is O(_mean), but it should be O(log(_mean)) for large _mean + RealType product = RealType(1); + for(result_type m = 0; ; ++m) { + product *= eng(); + if(product <= _exp_mean) + return m; + } + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const poisson_distribution& pd) + { + os << pd._mean; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, poisson_distribution& pd) + { + is >> std::ws >> pd._mean; + pd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + _exp_mean = exp(-_mean); + } + + RealType _mean; + // some precomputed data from the parameters + RealType _exp_mean; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_POISSON_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/random_number_generator.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/random_number_generator.hpp new file mode 100644 index 00000000..8b6d42de --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/random_number_generator.hpp @@ -0,0 +1,56 @@ +/* boost random/random_number_generator.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: random_number_generator.hpp 26164 2004-11-09 21:22:00Z jmaurer $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP +#define BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// a model for RandomNumberGenerator std:25.2.11 [lib.alg.random.shuffle] +template +class random_number_generator +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType argument_type; + typedef IntType result_type; + random_number_generator(base_type& rng) : _rng(rng) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + // compiler-generated copy ctor is fine + // assignment is disallowed because there is a reference member + + result_type operator()(argument_type n) + { + typedef uniform_int dist_type; + return variate_generator(_rng, dist_type(0, n-1))(); + } + +private: + base_type& _rng; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/ranlux.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/ranlux.hpp new file mode 100644 index 00000000..8a461c58 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/ranlux.hpp @@ -0,0 +1,50 @@ +/* boost random/ranlux.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: ranlux.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + * Revision history + * 2001-02-18 created + */ + +#ifndef BOOST_RANDOM_RANLUX_HPP +#define BOOST_RANDOM_RANLUX_HPP + +#include +#include +#include + +namespace boost { + +namespace random { + typedef subtract_with_carry ranlux_base; + typedef subtract_with_carry_01 ranlux_base_01; + typedef subtract_with_carry_01 ranlux64_base_01; +} + +typedef random::discard_block ranlux3; +typedef random::discard_block ranlux4; + +typedef random::discard_block ranlux3_01; +typedef random::discard_block ranlux4_01; + +typedef random::discard_block ranlux64_3_01; +typedef random::discard_block ranlux64_4_01; + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +namespace random { + typedef random::subtract_with_carry ranlux64_base; +} +typedef random::discard_block ranlux64_3; +typedef random::discard_block ranlux64_4; +#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */ + +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/shuffle_output.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/shuffle_output.hpp new file mode 100644 index 00000000..0812325c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/shuffle_output.hpp @@ -0,0 +1,175 @@ +/* boost random/shuffle_output.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: shuffle_output.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_SHUFFLE_OUTPUT_HPP +#define BOOST_RANDOM_SHUFFLE_OUTPUT_HPP + +#include +#include // std::copy +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Carter Bays and S.D. Durham 1979 +template +class shuffle_output +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef typename base_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, buffer_size = k); + + shuffle_output() : _rng() { init(); } +#if defined(BOOST_MSVC) && _MSC_VER < 1300 + // MSVC does not implicitly generate the copy constructor here + shuffle_output(const shuffle_output & x) + : _rng(x._rng), y(x.y) { std::copy(x.v, x.v+k, v); } +#endif + template + explicit shuffle_output(T s) : _rng(s) { init(); } + explicit shuffle_output(const base_type & rng) : _rng(rng) { init(); } + template shuffle_output(It& first, It last) + : _rng(first, last) { init(); } + void seed() { _rng.seed(); init(); } + template + void seed(T s) { _rng.seed(s); init(); } + template void seed(It& first, It last) + { + _rng.seed(first, last); + init(); + } + + const base_type& base() const { return _rng; } + + result_type operator()() { + // calculating the range every time may seem wasteful. However, this + // makes the information locally available for the optimizer. + result_type range = (max)()-(min)()+1; + int j = k*(y-(min)())/range; + // assert(0 <= j && j < k); + y = v[j]; + v[j] = _rng(); + return y; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const shuffle_output& s) + { + os << s._rng << " " << s.y << " "; + for(int i = 0; i < s.buffer_size; ++i) + os << s.v[i] << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, shuffle_output& s) + { + is >> s._rng >> std::ws >> s.y >> std::ws; + for(int i = 0; i < s.buffer_size; ++i) + is >> s.v[i] >> std::ws; + return is; + } +#endif + + friend bool operator==(const shuffle_output& x, const shuffle_output& y) + { return x._rng == y._rng && x.y == y.y && std::equal(x.v, x.v+k, y.v); } + friend bool operator!=(const shuffle_output& x, const shuffle_output& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const shuffle_output& rhs) const + { return _rng == rhs._rng && y == rhs.y && std::equal(v, v+k, rhs.v); } + bool operator!=(const shuffle_output& rhs) const + { return !(*this == rhs); } +#endif +private: + void init() + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + result_type range = (max)()-(min)(); + assert(range > 0); // otherwise there would be little choice + if(static_cast(k * range) < + static_cast(range)) // not a sufficient condition + // likely overflow with bucket number computation + assert(!"overflow will occur"); + + // we cannot use std::generate, because it uses pass-by-value for _rng + for(result_type * p = v; p != v+k; ++p) + *p = _rng(); + y = _rng(); + } + + base_type _rng; + result_type v[k]; + result_type y; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool shuffle_output::has_fixed_range; + +template +const int shuffle_output::buffer_size; +#endif + +} // namespace random + +// validation by experiment from Harry Erwin's generator.h (private e-mail) +typedef random::shuffle_output< + random::linear_congruential, + 97, 139726> kreutzer1986; + + +} // namespace boost + +#endif // BOOST_RANDOM_SHUFFLE_OUTPUT_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/subtract_with_carry.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/subtract_with_carry.hpp new file mode 100644 index 00000000..9e34d5bf --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/subtract_with_carry.hpp @@ -0,0 +1,448 @@ +/* boost random/subtract_with_carry.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: subtract_with_carry.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2002-03-02 created + */ + +#ifndef BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP +#define BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP + +#include +#include +#include // std::equal +#include +#include // std::pow +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace random { + +#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 +# define BOOST_RANDOM_EXTRACT_SWC_01 +#endif + +#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3) +# define BOOST_RANDOM_EXTRACT_SWC_01 +#endif + +# ifdef BOOST_RANDOM_EXTRACT_SWC_01 +namespace detail +{ + template + void extract_subtract_with_carry_01( + IStream& is + , SubtractWithCarry& f + , RealType& carry + , RealType* x + , RealType modulus) + { + RealType value; + for(unsigned int j = 0; j < f.long_lag; ++j) { + is >> value >> std::ws; + x[j] = value / modulus; + } + is >> value >> std::ws; + carry = value / modulus; + } +} +# endif +// subtract-with-carry generator +// Marsaglia and Zaman + +template +class subtract_with_carry +{ +public: + typedef IntType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = true); + BOOST_STATIC_CONSTANT(result_type, min_value = 0); + BOOST_STATIC_CONSTANT(result_type, max_value = m-1); + BOOST_STATIC_CONSTANT(result_type, modulus = m); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = r); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = s); + + subtract_with_carry() { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_signed); + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + seed(); + } + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(subtract_with_carry, uint32_t, value) + { seed(value); } + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(subtract_with_carry, Generator, gen) + { seed(gen); } + template subtract_with_carry(It& first, It last) { seed(first,last); } + + // compiler-generated copy ctor and assignment operator are fine + + void seed() { seed(19780503u); } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(subtract_with_carry, uint32_t, value) + { + random::linear_congruential intgen(value); + seed(intgen); + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line template member functions. + BOOST_RANDOM_DETAIL_GENERATOR_SEED(subtract_with_carry, Generator, gen) + { + // I could have used std::generate_n, but it takes "gen" by value + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen() % modulus; + carry = (x[long_lag-1] == 0); + k = 0; + } + + template + void seed(It& first, It last) + { + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j, ++first) + x[j] = *first % modulus; + if(first == last && j < long_lag) + throw std::invalid_argument("subtract_with_carry::seed"); + carry = (x[long_lag-1] == 0); + k = 0; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return min_value; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return max_value; } + + result_type operator()() + { + int short_index = k - short_lag; + if(short_index < 0) + short_index += long_lag; + IntType delta; + if (x[short_index] >= x[k] + carry) { + // x(n) >= 0 + delta = x[short_index] - (x[k] + carry); + carry = 0; + } else { + // x(n) < 0 + delta = modulus - x[k] - carry + x[short_index]; + carry = 1; + } + x[k] = delta; + ++k; + if(k >= long_lag) + k = 0; + return delta; + } + +public: + static bool validation(result_type x) { return x == val; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const subtract_with_carry& f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + os << f.compute(j) << " "; + os << f.carry << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, subtract_with_carry& f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + is >> f.x[j] >> std::ws; + is >> f.carry >> std::ws; + f.k = 0; + return is; + } +#endif + + friend bool operator==(const subtract_with_carry& x, const subtract_with_carry& y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const subtract_with_carry& x, const subtract_with_carry& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const subtract_with_carry& rhs) const + { + for(unsigned int j = 0; j < r; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const subtract_with_carry& rhs) const + { return !(*this == rhs); } +#endif + +private: + // returns x(i-r+index), where index is in 0..r-1 + IntType compute(unsigned int index) const + { + return x[(k+index) % long_lag]; + } + + // state representation; next output (state) is x(i) + // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents + // x(i-k) ... x(i) x(i+1) ... x(i-k+long_lag-1) + // speed: base: 20-25 nsec + // ranlux_4: 230 nsec, ranlux_7: 430 nsec, ranlux_14: 810 nsec + // This state representation makes operator== and save/restore more + // difficult, because we've already computed "too much" and thus + // have to undo some steps to get at x(i-r) etc. + + // state representation: next output (state) is x(i) + // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents + // x(i-k) ... x(i) x(i-long_lag+1) ... x(i-k-1) + // speed: base 28 nsec + // ranlux_4: 370 nsec, ranlux_7: 688 nsec, ranlux_14: 1343 nsec + IntType x[long_lag]; + unsigned int k; + int carry; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool subtract_with_carry::has_fixed_range; +template +const IntType subtract_with_carry::min_value; +template +const IntType subtract_with_carry::max_value; +template +const IntType subtract_with_carry::modulus; +template +const unsigned int subtract_with_carry::long_lag; +template +const unsigned int subtract_with_carry::short_lag; +#endif + + +// use a floating-point representation to produce values in [0..1) +template +class subtract_with_carry_01 +{ +public: + typedef RealType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = r); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = s); + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + subtract_with_carry_01() { init_modulus(); seed(); } + explicit subtract_with_carry_01(uint32_t value) + { init_modulus(); seed(value); } + template subtract_with_carry_01(It& first, It last) + { init_modulus(); seed(first,last); } + +private: + void init_modulus() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + _modulus = pow(RealType(2), word_size); + } + +public: + // compiler-generated copy ctor and assignment operator are fine + + void seed(uint32_t value = 19780503u) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; +#endif + random::linear_congruential gen(value); + unsigned long array[(w+31)/32 * long_lag]; + for(unsigned int j = 0; j < sizeof(array)/sizeof(unsigned long); ++j) + array[j] = gen(); + unsigned long * start = array; + seed(start, array + sizeof(array)/sizeof(unsigned long)); + } + + template + void seed(It& first, It last) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; + using std::pow; +#endif + unsigned long mask = ~((~0u) << (w%32)); // now lowest (w%32) bits set + RealType two32 = pow(RealType(2), 32); + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j) { + x[j] = RealType(0); + for(int i = 0; i < w/32 && first != last; ++i, ++first) + x[j] += *first / pow(two32,i+1); + if(first != last && mask != 0) { + x[j] += fmod((*first & mask) / _modulus, RealType(1)); + ++first; + } + } + if(first == last && j < long_lag) + throw std::invalid_argument("subtract_with_carry_01::seed"); + carry = (x[long_lag-1] ? 0 : 1 / _modulus); + k = 0; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + + result_type operator()() + { + int short_index = k - short_lag; + if(short_index < 0) + short_index += long_lag; + RealType delta = x[short_index] - x[k] - carry; + if(delta < 0) { + delta += RealType(1); + carry = RealType(1)/_modulus; + } else { + carry = 0; + } + x[k] = delta; + ++k; + if(k >= long_lag) + k = 0; + return delta; + } + + static bool validation(result_type x) + { return x == val/pow(RealType(2), word_size); } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const subtract_with_carry_01& f) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left); + for(unsigned int j = 0; j < f.long_lag; ++j) + os << (f.compute(j) * f._modulus) << " "; + os << (f.carry * f._modulus); + os.flags(oldflags); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, subtract_with_carry_01& f) + { +# ifdef BOOST_RANDOM_EXTRACT_SWC_01 + detail::extract_subtract_with_carry_01(is, f, f.carry, f.x, f._modulus); +# else + // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template type + // parameter "RealType" available from the class template scope, so use + // the member typedef + typename subtract_with_carry_01::result_type value; + for(unsigned int j = 0; j < long_lag; ++j) { + is >> value >> std::ws; + f.x[j] = value / f._modulus; + } + is >> value >> std::ws; + f.carry = value / f._modulus; +# endif + f.k = 0; + return is; + } +#endif + + friend bool operator==(const subtract_with_carry_01& x, + const subtract_with_carry_01& y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const subtract_with_carry_01& x, + const subtract_with_carry_01& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const subtract_with_carry_01& rhs) const + { + for(unsigned int j = 0; j < r; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const subtract_with_carry_01& rhs) const + { return !(*this == rhs); } +#endif + +private: + RealType compute(unsigned int index) const; + unsigned int k; + RealType carry; + RealType x[long_lag]; + RealType _modulus; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool subtract_with_carry_01::has_fixed_range; +template +const int subtract_with_carry_01::word_size; +template +const unsigned int subtract_with_carry_01::long_lag; +template +const unsigned int subtract_with_carry_01::short_lag; +#endif + +template +RealType subtract_with_carry_01::compute(unsigned int index) const +{ + return x[(k+index) % long_lag]; +} + + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/triangle_distribution.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/triangle_distribution.hpp new file mode 100644 index 00000000..2d699a59 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/triangle_distribution.hpp @@ -0,0 +1,102 @@ +/* boost random/triangle_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: triangle_distribution.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP +#define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP + +#include +#include +#include +#include + +namespace boost { + +// triangle distribution, with a smallest, b most probable, and c largest +// value. +template +class triangle_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + explicit triangle_distribution(result_type a_arg = result_type(0), + result_type b_arg = result_type(0.5), + result_type c_arg = result_type(1)) + : _a(a_arg), _b(b_arg), _c(c_arg) + { + assert(_a <= _b && _b <= _c); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + result_type a() const { return _a; } + result_type b() const { return _b; } + result_type c() const { return _c; } + + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + result_type u = eng(); + if( u <= q1 ) + return _a + p1*sqrt(u); + else + return _c - d3*sqrt(d2*u-d1); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const triangle_distribution& td) + { + os << td._a << " " << td._b << " " << td._c; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, triangle_distribution& td) + { + is >> std::ws >> td._a >> std::ws >> td._b >> std::ws >> td._c; + td.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + d1 = _b - _a; + d2 = _c - _a; + d3 = sqrt(_c - _b); + q1 = d1 / d2; + p1 = sqrt(d1 * d2); + } + + result_type _a, _b, _c; + result_type d1, d2, d3, q1, p1; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_01.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_01.hpp new file mode 100644 index 00000000..3fbd19b5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_01.hpp @@ -0,0 +1,220 @@ +/* boost random/uniform_01.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_01.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_UNIFORM_01_HPP +#define BOOST_RANDOM_UNIFORM_01_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + +namespace detail { + +template +class new_uniform_01 +{ +public: + typedef RealType input_type; + typedef RealType result_type; + // compiler-generated copy ctor and copy assignment are fine + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + void reset() { } + + template + result_type operator()(Engine& eng) { + for (;;) { + typedef typename Engine::result_type base_result; + result_type factor = result_type(1) / + (result_type((eng.max)()-(eng.min)()) + + result_type(std::numeric_limits::is_integer ? 1 : 0)); + result_type result = result_type(eng() - (eng.min)()) * factor; + if (result < result_type(1)) + return result; + } + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const new_uniform_01&) + { + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, new_uniform_01&) + { + return is; + } +#endif +}; + +template +class backward_compatible_uniform_01 +{ + typedef boost::random::detail::ptr_helper traits; + typedef boost::random::detail::pass_through_engine internal_engine_type; +public: + typedef UniformRandomNumberGenerator base_type; + typedef RealType result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit backward_compatible_uniform_01(typename traits::rvalue_type rng) + : _rng(rng), + _factor(result_type(1) / + (result_type((_rng.max)()-(_rng.min)()) + + result_type(std::numeric_limits::is_integer ? 1 : 0))) + { + } + // compiler-generated copy ctor and copy assignment are fine + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + typename traits::value_type& base() { return _rng.base(); } + const typename traits::value_type& base() const { return _rng.base(); } + void reset() { } + + result_type operator()() { + for (;;) { + result_type result = result_type(_rng() - (_rng.min)()) * _factor; + if (result < result_type(1)) + return result; + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const backward_compatible_uniform_01& u) + { + os << u._rng; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, backward_compatible_uniform_01& u) + { + is >> u._rng; + return is; + } +#endif + +private: + typedef typename internal_engine_type::result_type base_result; + internal_engine_type _rng; + result_type _factor; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool backward_compatible_uniform_01::has_fixed_range; +#endif + +template +struct select_uniform_01 +{ + template + struct apply + { + typedef backward_compatible_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +} + +// Because it is so commonly used: uniform distribution on the real [0..1) +// range. This allows for specializations to avoid a costly int -> float +// conversion plus float multiplication +template +class uniform_01 + : public detail::select_uniform_01::BOOST_NESTED_TEMPLATE apply::type +{ + typedef typename detail::select_uniform_01::BOOST_NESTED_TEMPLATE apply::type impl_type; + typedef boost::random::detail::ptr_helper traits; +public: + + uniform_01() {} + + explicit uniform_01(typename traits::rvalue_type rng) + : impl_type(rng) + { + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_01& u) + { + os << static_cast(u); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_01& u) + { + is >> static_cast(u); + return is; + } +#endif +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_01_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_int.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_int.hpp new file mode 100644 index 00000000..b838d6ae --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_int.hpp @@ -0,0 +1,264 @@ +/* boost random/uniform_int.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_int.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { + +// uniform integer distribution on [min, max] +template +class uniform_int +{ +public: + typedef IntType input_type; + typedef IntType result_type; + typedef typename make_unsigned::type range_type; + + explicit uniform_int(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + assert(min_arg <= max_arg); + init(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + // can't have member function templates out-of-line due to MSVC bugs + template + result_type operator()(Engine& eng) + { + return generate(eng, _min, _max, _range); + } + + template + result_type operator()(Engine& eng, result_type n) + { + assert(n > 0); + + if (n == 1) + { + return 0; + } + + return generate(eng, 0, n - 1, n - 1); + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_int& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_int& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + ud.init(); + return is; + } +#endif + +private: + template + static result_type generate(Engine& eng, result_type min_value, result_type max_value, range_type range) + { + typedef typename Engine::result_type base_result; + // ranges are always unsigned + typedef typename make_unsigned::type base_unsigned; + const base_result bmin = (eng.min)(); + const base_unsigned brange = + random::detail::subtract()((eng.max)(), (eng.min)()); + + if(range == 0) { + return min_value; + } else if(brange == range) { + // this will probably never happen in real life + // basically nothing to do; just take care we don't overflow / underflow + base_unsigned v = random::detail::subtract()(eng(), bmin); + return random::detail::add()(v, min_value); + } else if(brange < range) { + // use rejection method to handle things like 0..3 --> 0..4 + for(;;) { + // concatenate several invocations of the base RNG + // take extra care to avoid overflows + + // limit == floor((range+1)/(brange+1)) + // Therefore limit*(brange+1) <= range+1 + range_type limit; + if(range == (std::numeric_limits::max)()) { + limit = range/(range_type(brange)+1); + if(range % (range_type(brange)+1) == range_type(brange)) + ++limit; + } else { + limit = (range+1)/(range_type(brange)+1); + } + + // We consider "result" as expressed to base (brange+1): + // For every power of (brange+1), we determine a random factor + range_type result = range_type(0); + range_type mult = range_type(1); + + // loop invariants: + // result < mult + // mult <= range + while(mult <= limit) { + // Postcondition: result <= range, thus no overflow + // + // limit*(brange+1)<=range+1 def. of limit (1) + // eng()-bmin<=brange eng() post. (2) + // and mult<=limit. loop condition (3) + // Therefore mult*(eng()-bmin+1)<=range+1 by (1),(2),(3) (4) + // Therefore mult*(eng()-bmin)+mult<=range+1 rearranging (4) (5) + // result()(eng(), bmin) * mult; + + // equivalent to (mult * (brange+1)) == range+1, but avoids overflow. + if(mult * range_type(brange) == range - mult + 1) { + // The destination range is an integer power of + // the generator's range. + return(result); + } + + // Postcondition: mult <= range + // + // limit*(brange+1)<=range+1 def. of limit (1) + // mult<=limit loop condition (2) + // Therefore mult*(brange+1)<=range+1 by (1), (2) (3) + // mult*(brange+1)!=range+1 preceding if (4) + // Therefore mult*(brange+1) limit loop condition (1) + // Suppose range/mult >= brange+1 Assumption (2) + // range >= mult*(brange+1) by (2) (3) + // range+1 > mult*(brange+1) by (3) (4) + // range+1 > (limit+1)*(brange+1) by (1), (4) (5) + // (range+1)/(brange+1) > limit+1 by (5) (6) + // limit < floor((range+1)/(brange+1)) by (6) (7) + // limit==floor((range+1)/(brange+1)) def. of limit (8) + // not (2) reductio (9) + // + // loop postcondition: (range/mult)*mult+(mult-1) >= range + // + // (range/mult)*mult + range%mult == range identity (1) + // range%mult < mult def. of % (2) + // (range/mult)*mult+mult > range by (1), (2) (3) + // (range/mult)*mult+(mult-1) >= range by (3) (4) + // + // Note that the maximum value of result at this point is (mult-1), + // so after this final step, we generate numbers that can be + // at least as large as range. We have to really careful to avoid + // overflow in this final addition and in the rejection. Anything + // that overflows is larger than range and can thus be rejected. + + // range/mult < brange+1 -> no endless loop + range_type result_increment = uniform_int(0, range/mult)(eng); + if((std::numeric_limits::max)() / mult < result_increment) { + // The multiplcation would overflow. Reject immediately. + continue; + } + result_increment *= mult; + // unsigned integers are guaranteed to wrap on overflow. + result += result_increment; + if(result < result_increment) { + // The addition overflowed. Reject. + continue; + } + if(result > range) { + // Too big. Reject. + continue; + } + return random::detail::add()(result, min_value); + } + } else { // brange > range + base_unsigned bucket_size; + // it's safe to add 1 to range, as long as we cast it first, + // because we know that it is less than brange. However, + // we do need to be careful not to cause overflow by adding 1 + // to brange. + if(brange == (std::numeric_limits::max)()) { + bucket_size = brange / (static_cast(range)+1); + if(brange % (static_cast(range)+1) == static_cast(range)) { + ++bucket_size; + } + } else { + bucket_size = (brange+1) / (static_cast(range)+1); + } + for(;;) { + base_unsigned result = + random::detail::subtract()(eng(), bmin); + result /= bucket_size; + // result and range are non-negative, and result is possibly larger + // than range, so the cast is safe + if(result <= static_cast(range)) + return random::detail::add()(result, min_value); + } + } + } + + void init() + { + _range = random::detail::subtract()(_max, _min); + } + + // The result_type may be signed or unsigned, but the _range is always + // unsigned. + result_type _min, _max; + range_type _range; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_INT_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_on_sphere.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_on_sphere.hpp new file mode 100644 index 00000000..a9b44eda --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_on_sphere.hpp @@ -0,0 +1,87 @@ +/* boost random/uniform_on_sphere.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_on_sphere.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP +#define BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP + +#include +#include // std::transform +#include // std::bind2nd, std::divides +#include +#include + +namespace boost { + +template > +class uniform_on_sphere +{ +public: + typedef RealType input_type; + typedef Cont result_type; + + explicit uniform_on_sphere(int dim = 2) : _container(dim), _dim(dim) { } + + // compiler-generated copy ctor and assignment operator are fine + + void reset() { _normal.reset(); } + + template + const result_type & operator()(Engine& eng) + { + RealType sqsum = 0; + for(typename Cont::iterator it = _container.begin(); + it != _container.end(); + ++it) { + RealType val = _normal(eng); + *it = val; + sqsum += val * val; + } +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + // for all i: result[i] /= sqrt(sqsum) + std::transform(_container.begin(), _container.end(), _container.begin(), + std::bind2nd(std::divides(), sqrt(sqsum))); + return _container; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_on_sphere& sd) + { + os << sd._dim; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_on_sphere& sd) + { + is >> std::ws >> sd._dim; + sd._container.resize(sd._dim); + return is; + } +#endif + +private: + normal_distribution _normal; + result_type _container; + int _dim; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_real.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_real.hpp new file mode 100644 index 00000000..1c3492d8 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_real.hpp @@ -0,0 +1,84 @@ +/* boost random/uniform_real.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_real.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include + +namespace boost { + +// uniform distribution on a real range +template +class uniform_real +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + explicit uniform_real(RealType min_arg = RealType(0), + RealType max_arg = RealType(1)) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + assert(min_arg <= max_arg); + } + + // compiler-generated copy ctor and assignment operator are fine + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + template + result_type operator()(Engine& eng) { + return static_cast(eng() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION()) + / static_cast(eng.max BOOST_PREVENT_MACRO_SUBSTITUTION() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION()) + * (_max - _min) + _min; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_real& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_real& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + return is; + } +#endif + +private: + RealType _min, _max; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_REAL_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_smallint.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_smallint.hpp new file mode 100644 index 00000000..994e6d88 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/uniform_smallint.hpp @@ -0,0 +1,108 @@ +/* boost random/uniform_smallint.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_smallint.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#include + +namespace boost { + +// uniform integer distribution on a small range [min, max] + +template +class uniform_smallint +{ +public: + typedef IntType input_type; + typedef IntType result_type; + + explicit uniform_smallint(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + typedef typename Engine::result_type base_result; + base_result _range = static_cast(_max-_min)+1; + base_result _factor = 1; + + // LCGs get bad when only taking the low bits. + // (probably put this logic into a partial template specialization) + // Check how many low bits we can ignore before we get too much + // quantization error. + base_result r_base = (eng.max)() - (eng.min)(); + if(r_base == (std::numeric_limits::max)()) { + _factor = 2; + r_base /= 2; + } + r_base += 1; + if(r_base % _range == 0) { + // No quantization effects, good + _factor = r_base / _range; + } else { + // carefully avoid overflow; pessimizing here + for( ; r_base/_range/32 >= _range; _factor *= 2) + r_base /= 2; + } + + return ((eng() - (eng.min)()) / _factor) % _range + _min; + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_smallint& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_smallint& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + return is; + } +#endif + +private: + + result_type _min; + result_type _max; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_SMALLINT_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/variate_generator.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/variate_generator.hpp new file mode 100644 index 00000000..81205ce4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/variate_generator.hpp @@ -0,0 +1,133 @@ +/* boost random/variate_generator.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: variate_generator.hpp 27375 2005-02-14 11:53:50Z johnmaddock $ + * + */ + +#ifndef BOOST_RANDOM_RANDOM_GENERATOR_HPP +#define BOOST_RANDOM_RANDOM_GENERATOR_HPP + +#include + +// implementation details +#include +#include +#include +#include +#include + +// Borland C++ 5.6.0 has problems using its numeric_limits traits as +// template parameters +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564) +#include +#endif + +namespace boost { + +namespace random { +namespace detail { + +template +struct engine_helper; + +// for consistency, always have two levels of decorations +template<> +struct engine_helper +{ + template + struct impl + { + typedef pass_through_engine type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_01 type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_01 type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_int_float type; + }; +}; + +} // namespace detail +} // namespace random + + +template +class variate_generator +{ +private: + typedef random::detail::pass_through_engine decorated_engine; + +public: + typedef typename decorated_engine::base_type engine_value_type; + typedef Engine engine_type; + typedef Distribution distribution_type; + typedef typename Distribution::result_type result_type; + + variate_generator(Engine e, Distribution d) + : _eng(decorated_engine(e)), _dist(d) { } + + result_type operator()() { return _dist(_eng); } + template + result_type operator()(T value) { return _dist(_eng, value); } + + engine_value_type& engine() { return _eng.base().base(); } + const engine_value_type& engine() const { return _eng.base().base(); } + + distribution_type& distribution() { return _dist; } + const distribution_type& distribution() const { return _dist; } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().max)(); } + +private: +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564) + typedef typename random::detail::engine_helper< + boost::is_integral::value, + boost::is_integral::value + >::BOOST_NESTED_TEMPLATE impl::type internal_engine_type; +#else + enum { + have_int = std::numeric_limits::is_integer, + want_int = std::numeric_limits::is_integer + }; + typedef typename random::detail::engine_helper::BOOST_NESTED_TEMPLATE impl::type internal_engine_type; +#endif + + internal_engine_type _eng; + distribution_type _dist; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_RANDOM_GENERATOR_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/random/xor_combine.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/random/xor_combine.hpp new file mode 100644 index 00000000..51141983 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/random/xor_combine.hpp @@ -0,0 +1,134 @@ +/* boost random/xor_combine.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: xor_combine.hpp 53871 2009-06-13 17:54:06Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_XOR_COMBINE_HPP +#define BOOST_RANDOM_XOR_COMBINE_HPP + +#include +#include +#include // for std::min and std::max +#include +#include +#include +#include // uint32_t +#include + + +namespace boost { +namespace random { + +#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS + #define BOOST_RANDOM_VAL_TYPE typename URNG1::result_type +#else + #define BOOST_RANDOM_VAL_TYPE uint32_t +#endif + +template +class xor_combine +{ +public: + typedef URNG1 base1_type; + typedef URNG2 base2_type; + typedef typename base1_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, shift1 = s1); + BOOST_STATIC_CONSTANT(int, shift2 = s2); + + xor_combine() : _rng1(), _rng2() + { } + xor_combine(const base1_type & rng1, const base2_type & rng2) + : _rng1(rng1), _rng2(rng2) { } + xor_combine(const result_type & v) + : _rng1(v), _rng2(v) { } + template xor_combine(It& first, It last) + : _rng1(first, last), _rng2( /* advanced by other call */ first, last) { } + void seed() { _rng1.seed(); _rng2.seed(); } + void seed(const result_type & v) { _rng1.seed(v); _rng2.seed(v); } + template void seed(It& first, It last) + { + _rng1.seed(first, last); + _rng2.seed(first, last); + } + + const base1_type& base1() { return _rng1; } + const base2_type& base2() { return _rng2; } + + result_type operator()() + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(std::numeric_limits::digits >= std::numeric_limits::digits); +#endif + return (_rng1() << s1) ^ (_rng2() << s2); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::min BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.min)()); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::max BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.max)()); } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const xor_combine& s) + { + os << s._rng1 << " " << s._rng2 << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, xor_combine& s) + { + is >> s._rng1 >> std::ws >> s._rng2 >> std::ws; + return is; + } +#endif + + friend bool operator==(const xor_combine& x, const xor_combine& y) + { return x._rng1 == y._rng1 && x._rng2 == y._rng2; } + friend bool operator!=(const xor_combine& x, const xor_combine& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const xor_combine& rhs) const + { return _rng1 == rhs._rng1 && _rng2 == rhs._rng2; } + bool operator!=(const xor_combine& rhs) const + { return !(*this == rhs); } +#endif + +private: + base1_type _rng1; + base2_type _rng2; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool xor_combine::has_fixed_range; +template +const int xor_combine::shift1; +template +const int xor_combine::shift2; +#endif + +#undef BOOST_RANDOM_VAL_TYPE + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_XOR_COMBINE_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/static_assert.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/static_assert.hpp new file mode 100644 index 00000000..768884f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/static_assert.hpp @@ -0,0 +1,132 @@ +// (C) Copyright John Maddock 2000. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/static_assert for documentation. + +/* + Revision history: + 02 August 2000 + Initial version. +*/ + +#ifndef BOOST_STATIC_ASSERT_HPP +#define BOOST_STATIC_ASSERT_HPP + +#include +#include + +#ifdef __BORLANDC__ +// +// workaround for buggy integral-constant expression support: +#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS +#endif + +#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4)) +// gcc 3.3 and 3.4 don't produce good error messages with the default version: +# define BOOST_SA_GCC_WORKAROUND +#endif + +// +// If the compiler issues warnings about old C style casts, +// then enable this: +// +#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))) +# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true) +#else +# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x) +#endif + +#ifdef BOOST_HAS_STATIC_ASSERT +# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B) +#else + +namespace boost{ + +// HP aCC cannot deal with missing names for template value parameters +template struct STATIC_ASSERTION_FAILURE; + +template <> struct STATIC_ASSERTION_FAILURE { enum { value = 1 }; }; + +// HP aCC cannot deal with missing names for template value parameters +template struct static_assert_test{}; + +} + +// +// Implicit instantiation requires that all member declarations be +// instantiated, but that the definitions are *not* instantiated. +// +// It's not particularly clear how this applies to enum's or typedefs; +// both are described as declarations [7.1.3] and [7.2] in the standard, +// however some compilers use "delayed evaluation" of one or more of +// these when implicitly instantiating templates. We use typedef declarations +// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum +// version gets better results from your compiler... +// +// Implementation: +// Both of these versions rely on sizeof(incomplete_type) generating an error +// message containing the name of the incomplete type. We use +// "STATIC_ASSERTION_FAILURE" as the type name here to generate +// an eye catching error message. The result of the sizeof expression is either +// used as an enum initialiser, or as a template argument depending which version +// is in use... +// Note that the argument to the assert is explicitly cast to bool using old- +// style casts: too many compilers currently have problems with static_cast +// when used inside integral constant expressions. +// +#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS) + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +// __LINE__ macro broken when -ZI is used see Q199057 +// fortunately MSVC ignores duplicate typedef's. +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\ + > boost_static_assert_typedef_ +#elif defined(BOOST_MSVC) +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__) +#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND) +// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error +// instead of warning in case of failure +# define BOOST_STATIC_ASSERT( B ) \ + typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \ + [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ] +#elif defined(__sgi) +// special version for SGI MIPSpro compiler +#define BOOST_STATIC_ASSERT( B ) \ + BOOST_STATIC_CONSTANT(bool, \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __LINE__) +#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003) +// special version for CodeWarrior <= 8.x +#define BOOST_STATIC_ASSERT( B ) \ + BOOST_STATIC_CONSTANT(int, \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) = \ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) ) +#else +// generic version +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __LINE__) +#endif + +#else +// alternative enum based implementation: +#define BOOST_STATIC_ASSERT( B ) \ + enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \ + = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) } +#endif +#endif // ndef BOOST_HAS_STATIC_ASSERT + +#endif // BOOST_STATIC_ASSERT_HPP + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type.hpp new file mode 100644 index 00000000..ab81c916 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type.hpp @@ -0,0 +1,18 @@ +// (C) Copyright David Abrahams 2001. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_DWA20010120_HPP +# define BOOST_TYPE_DWA20010120_HPP + +namespace boost { + + // Just a simple "type envelope". Useful in various contexts, mostly to work + // around some MSVC deficiencies. + template + struct type {}; + +} + +#endif // BOOST_TYPE_DWA20010120_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_const.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_const.hpp new file mode 100644 index 00000000..c3a24e93 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_const.hpp @@ -0,0 +1,47 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED +#define BOOST_TT_ADD_CONST_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +// * convert a type T to const type - add_const +// this is not required since the result is always +// the same as "T const", but it does suppress warnings +// from some compilers: + +#if defined(BOOST_MSVC) +// This bogus warning will appear when add_const is applied to a +// const volatile reference because we can't detect const volatile +// references with MSVC6. +# pragma warning(push) +# pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored +#endif + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_const,T,T const) + +#if defined(BOOST_MSVC) +# pragma warning(pop) +#endif + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_const,T&,T&) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_reference.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_reference.hpp new file mode 100644 index 00000000..f855185c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_reference.hpp @@ -0,0 +1,89 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED +#define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED + +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +template +struct reference_adder +{ + template struct result_ + { + typedef T& type; + }; +}; + +template <> +struct reference_adder +{ + template struct result_ + { + typedef T type; + }; +}; + +template +struct add_reference_impl +{ + typedef typename reference_adder< + ::boost::is_reference::value + >::template result_ result; + + typedef typename result::type type; +}; + +#else + +template +struct add_reference_impl +{ + typedef T& type; +}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&) +#endif + +#endif + +// these full specialisations are always required: +BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void,void) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const,void const) +BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void volatile,void volatile) +BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const volatile,void const volatile) +#endif + +} // namespace detail + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_reference,T,typename boost::detail::add_reference_impl::type) + +// agurt, 07/mar/03: workaround Borland's ill-formed sensitivity to an additional +// level of indirection, here +#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_volatile.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_volatile.hpp new file mode 100644 index 00000000..4331550d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/add_volatile.hpp @@ -0,0 +1,47 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_ADD_VOLATILE_HPP_INCLUDED +#define BOOST_TT_ADD_VOLATILE_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +// * convert a type T to volatile type - add_volatile +// this is not required since the result is always +// the same as "T volatile", but it does suppress warnings +// from some compilers: + +#if defined(BOOST_MSVC) +// This bogus warning will appear when add_volatile is applied to a +// const volatile reference because we can't detect const volatile +// references with MSVC6. +# pragma warning(push) +# pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored +#endif + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_volatile,T,T volatile) + +#if defined(BOOST_MSVC) +# pragma warning(pop) +#endif + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_volatile,T&,T&) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/aligned_storage.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/aligned_storage.hpp new file mode 100644 index 00000000..e2751420 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/aligned_storage.hpp @@ -0,0 +1,13 @@ + +// Copyright (C) John Maddock 2005. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED +# define BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED +# include +#endif // BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/alignment_of.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/alignment_of.hpp new file mode 100644 index 00000000..b5031d41 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/alignment_of.hpp @@ -0,0 +1,128 @@ + +// (C) Copyright John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED +#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED + +#include +#include + +#include +// should be the last #include +#include + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4121 4512) // alignment is sensitive to packing +#endif +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600) +#pragma option push -Vx- -Ve- +#endif + +namespace boost { + +template struct alignment_of; + +// get the alignment of some arbitrary type: +namespace detail { + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) +#endif +template +struct alignment_of_hack +{ + char c; + T t; + alignment_of_hack(); +}; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +struct alignment_logic +{ + BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S); +}; + + +template< typename T > +struct alignment_of_impl +{ +#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400) + // + // With MSVC both the native __alignof operator + // and our own logic gets things wrong from time to time :-( + // Using a combination of the two seems to make the most of a bad job: + // + BOOST_STATIC_CONSTANT(std::size_t, value = + (::boost::detail::alignment_logic< + sizeof(::boost::detail::alignment_of_hack) - sizeof(T), + __alignof(T) + >::value)); +#elif !defined(BOOST_ALIGNMENT_OF) + BOOST_STATIC_CONSTANT(std::size_t, value = + (::boost::detail::alignment_logic< + sizeof(::boost::detail::alignment_of_hack) - sizeof(T), + sizeof(T) + >::value)); +#else + // + // We put this here, rather than in the definition of + // alignment_of below, because MSVC's __alignof doesn't + // always work in that context for some unexplained reason. + // (See type_with_alignment tests for test cases). + // + BOOST_STATIC_CONSTANT(std::size_t, value = BOOST_ALIGNMENT_OF(T)); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl::value) + +// references have to be treated specially, assume +// that a reference is just a special pointer: +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct alignment_of + : alignment_of +{ +}; +#endif +#ifdef __BORLANDC__ +// long double gives an incorrect value of 10 (!) +// unless we do this... +struct long_double_wrapper{ long double ld; }; +template<> struct alignment_of + : public alignment_of{}; +#endif + +// void has to be treated specially: +BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void,0) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const,0) +BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void volatile,0) +BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0) +#endif + +} // namespace boost + +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600) +#pragma option pop +#endif +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#include + +#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/broken_compiler_spec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/broken_compiler_spec.hpp new file mode 100644 index 00000000..f09c87c6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/broken_compiler_spec.hpp @@ -0,0 +1,117 @@ + +// Copyright 2001-2003 Aleksey Gurtovoy. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED +#define BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED + +#include +#include + +// these are needed regardless of BOOST_TT_NO_BROKEN_COMPILER_SPEC +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +namespace boost { namespace detail { +template< typename T > struct remove_const_impl { typedef T type; }; +template< typename T > struct remove_volatile_impl { typedef T type; }; +template< typename T > struct remove_pointer_impl { typedef T type; }; +template< typename T > struct remove_reference_impl { typedef T type; }; +typedef int invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces; +}} +#endif + +// agurt, 27/jun/03: disable the workaround if user defined +// BOOST_TT_NO_BROKEN_COMPILER_SPEC +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + || defined(BOOST_TT_NO_BROKEN_COMPILER_SPEC) + +# define BOOST_TT_BROKEN_COMPILER_SPEC(T) /**/ + +#else + +// same as BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1 macro, except that it +// never gets #undef-ined +# define BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(trait,spec,result) \ +template<> struct trait##_impl \ +{ \ + typedef result type; \ +}; \ +/**/ + +# define BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const volatile,T volatile) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T volatile,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T const volatile,T const) \ + /**/ + +# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*volatile,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const volatile,T) \ + BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_reference,T&,T) \ + /**/ + +# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \ + BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \ + BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const) \ + BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T volatile) \ + BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const volatile) \ + /**/ + +# define BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \ + BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \ + BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \ + /**/ + +# define BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T volatile*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const volatile*) \ + /**/ + +# define BOOST_TT_BROKEN_COMPILER_SPEC(T) \ + namespace boost { namespace detail { \ + typedef invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces \ + please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces; \ + BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T volatile*) \ + BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const volatile*) \ + }} \ + /**/ + +# include + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +BOOST_TT_BROKEN_COMPILER_SPEC(bool) +BOOST_TT_BROKEN_COMPILER_SPEC(char) +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +BOOST_TT_BROKEN_COMPILER_SPEC(wchar_t) +#endif +BOOST_TT_BROKEN_COMPILER_SPEC(signed char) +BOOST_TT_BROKEN_COMPILER_SPEC(unsigned char) +BOOST_TT_BROKEN_COMPILER_SPEC(signed short) +BOOST_TT_BROKEN_COMPILER_SPEC(unsigned short) +BOOST_TT_BROKEN_COMPILER_SPEC(signed int) +BOOST_TT_BROKEN_COMPILER_SPEC(unsigned int) +BOOST_TT_BROKEN_COMPILER_SPEC(signed long) +BOOST_TT_BROKEN_COMPILER_SPEC(unsigned long) +BOOST_TT_BROKEN_COMPILER_SPEC(float) +BOOST_TT_BROKEN_COMPILER_SPEC(double) +//BOOST_TT_BROKEN_COMPILER_SPEC(long double) + +// for backward compatibility +#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(T) \ + BOOST_TT_BROKEN_COMPILER_SPEC(T) \ +/**/ + +#endif // BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/config.hpp new file mode 100644 index 00000000..6a55d4ee --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/config.hpp @@ -0,0 +1,76 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_CONFIG_HPP_INCLUDED +#define BOOST_TT_CONFIG_HPP_INCLUDED + +#ifndef BOOST_CONFIG_HPP +#include +#endif + +#include + +// +// whenever we have a conversion function with elipses +// it needs to be declared __cdecl to suppress compiler +// warnings from MS and Borland compilers (this *must* +// appear before we include is_same.hpp below): +#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32)) +# define BOOST_TT_DECL __cdecl +#else +# define BOOST_TT_DECL /**/ +#endif + +# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000) \ + || BOOST_WORKAROUND(BOOST_MSVC, <= 1301) \ + || !defined(__EDG_VERSION__) && BOOST_WORKAROUND(__GNUC__, < 3) \ + || BOOST_WORKAROUND(__IBMCPP__, < 600 ) \ + || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0) \ + || defined(__ghs) \ + || BOOST_WORKAROUND(__HP_aCC, < 60700) \ + || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890)) \ + || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))) \ + && defined(BOOST_NO_IS_ABSTRACT) + +# define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1 + +#endif + +#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION +# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1 +#endif + +// +// Define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +// when we can't test for function types with elipsis: +// +#if BOOST_WORKAROUND(__GNUC__, < 3) +# define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +#endif + +// +// define BOOST_TT_TEST_MS_FUNC_SIGS +// when we want to test __stdcall etc function types with is_function etc +// (Note, does not work with Borland, even though it does support __stdcall etc): +// +#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__) +# define BOOST_TT_TEST_MS_FUNC_SIGS +#endif + +// +// define BOOST_TT_NO_CV_FUNC_TEST +// if tests for cv-qualified member functions don't +// work in is_member_function_pointer +// +#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600) +# define BOOST_TT_NO_CV_FUNC_TEST +#endif + +#endif // BOOST_TT_CONFIG_HPP_INCLUDED + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_def.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_def.hpp new file mode 100644 index 00000000..beb0968d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_def.hpp @@ -0,0 +1,173 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2006-07-12 07:10:22 -0400 (Wed, 12 Jul 2006) $ +// $Revision: 34511 $ + +#include +#include +#include +#include +#include + +// +// Unfortunately some libraries have started using this header without +// cleaning up afterwards: so we'd better undef the macros just in case +// they've been defined already.... +// +#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL +#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL +#undef BOOST_TT_AUX_BOOL_C_BASE +#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1 +#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2 +#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1 +#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1 +#endif + +#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x570) +# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + typedef ::boost::integral_constant type; \ + enum { value = type::value }; \ + /**/ +# define BOOST_TT_AUX_BOOL_C_BASE(C) + +#elif defined(BOOST_MSVC) && BOOST_MSVC < 1300 + +# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + typedef ::boost::integral_constant base_; \ + using base_::value; \ + /**/ + +#endif + +#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL +# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/ +#endif + +#ifndef BOOST_TT_AUX_BOOL_C_BASE +# define BOOST_TT_AUX_BOOL_C_BASE(C) : ::boost::integral_constant +#endif + + +#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \ +template< typename T > struct trait \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \ +}; \ +\ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \ +/**/ + + +#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \ +template< typename T1, typename T2 > struct trait \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(2,trait,(T1,T2)) \ +}; \ +\ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \ +template<> struct trait< sp > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(sp)) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \ +template<> struct trait< sp1,sp2 > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \ +template<> struct trait##_impl< sp > \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = (C)); \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \ +template<> struct trait##_impl< sp1,sp2 > \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = (C)); \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \ +template< param > struct trait< sp > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \ +template< param1, param2 > struct trait< sp > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \ +template< param > struct trait< sp1,sp2 > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \ +template< param1, param2 > struct trait< sp1,sp2 > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \ +template< param > struct trait##_impl< sp1,sp2 > \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = (C)); \ +}; \ +/**/ + +#ifndef BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \ + BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \ + BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \ + BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \ + BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \ + /**/ +#else +# define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \ + BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \ + /**/ +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_undef.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_undef.hpp new file mode 100644 index 00000000..2259c644 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/bool_trait_undef.hpp @@ -0,0 +1,27 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL +#undef BOOST_TT_AUX_BOOL_C_BASE +#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1 +#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2 +#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1 +#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2 +#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1 +#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/cv_traits_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/cv_traits_impl.hpp new file mode 100644 index 00000000..da0f41ce --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/cv_traits_impl.hpp @@ -0,0 +1,97 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED +#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED + +#include +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// implementation helper: + + +#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)) +namespace boost { +namespace detail { +#else +#include +namespace boost { +namespace type_traits { +namespace gcc8503 { +#endif + +template struct cv_traits_imp {}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type; +}; + +#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2) +// We have to exclude function pointers +// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503) +yes_type mini_funcptr_tester(...); +no_type mini_funcptr_tester(const volatile void*); + +} // namespace gcc8503 +} // namespace type_traits + +namespace detail { + +// Use the implementation above for non function pointers +template +struct cv_traits_imp : ::boost::type_traits::gcc8503::cv_traits_imp { }; + +// Functions are never cv-qualified +template struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +#endif + +} // namespace detail +} // namespace boost + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/false_result.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/false_result.hpp new file mode 100644 index 00000000..b520bff9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/false_result.hpp @@ -0,0 +1,28 @@ +// Copyright David Abrahams 2002. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED +#define BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED + +#include + +namespace boost { +namespace type_traits { + +// Utility class which always "returns" false +struct false_result +{ + template struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +}} // namespace boost::type_traits + +#endif // BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_and.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_and.hpp new file mode 100644 index 00000000..51d8ef2d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_and.hpp @@ -0,0 +1,35 @@ +// (C) Copyright John Maddock and Steve Cleary 2000. +// +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED +#define BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED + +#include + +namespace boost { +namespace type_traits { + +template +struct ice_and; + +template +struct ice_and +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template <> +struct ice_and +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_eq.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_eq.hpp new file mode 100644 index 00000000..3681258e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_eq.hpp @@ -0,0 +1,36 @@ +// (C) Copyright John Maddock and Steve Cleary 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED +#define BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED + +#include + +namespace boost { +namespace type_traits { + +template +struct ice_eq +{ + BOOST_STATIC_CONSTANT(bool, value = (b1 == b2)); +}; + +template +struct ice_ne +{ + BOOST_STATIC_CONSTANT(bool, value = (b1 != b2)); +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +template bool const ice_eq::value; +template bool const ice_ne::value; +#endif + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_not.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_not.hpp new file mode 100644 index 00000000..879ab56e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_not.hpp @@ -0,0 +1,31 @@ +// (C) Copyright John Maddock and Steve Cleary 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED +#define BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED + +#include + +namespace boost { +namespace type_traits { + +template +struct ice_not +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template <> +struct ice_not +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_or.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_or.hpp new file mode 100644 index 00000000..96ac9116 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/ice_or.hpp @@ -0,0 +1,34 @@ +// (C) Copyright John Maddock and Steve Cleary 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED +#define BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED + +#include + +namespace boost { +namespace type_traits { + +template +struct ice_or; + +template +struct ice_or +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template <> +struct ice_or +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_helper.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_helper.hpp new file mode 100644 index 00000000..15b50e76 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_helper.hpp @@ -0,0 +1,220 @@ + +// Copyright 2000 John Maddock (john@johnmaddock.co.uk) +// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com) +// +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED +#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED + +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +template +struct is_function_ptr_helper +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +#if !defined(BOOST_TT_PREPROCESSING_MODE) +// preprocessor-generated part, don't edit by hand! + +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#else + +#undef BOOST_STATIC_CONSTANT +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, 25, "carve/external/boost/type_traits/detail/is_function_ptr_helper.hpp")) +#include BOOST_PP_ITERATE() + +#endif // BOOST_TT_PREPROCESSING_MODE + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED + +///// iteration + +#else +#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1) + +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_tester.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_tester.hpp new file mode 100644 index 00000000..34d3addb --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_function_ptr_tester.hpp @@ -0,0 +1,654 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED +#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED + +#include +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +// Note it is acceptible to use ellipsis here, since the argument will +// always be a pointer type of some sort (JM 2005/06/04): +no_type BOOST_TT_DECL is_function_ptr_tester(...); + +#if !defined(BOOST_TT_PREPROCESSING_MODE) +// pre-processed code, don't edit, try GNU cpp with +// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename + +template +yes_type is_function_ptr_tester(R (*)()); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)()); +template +yes_type is_function_ptr_tester(R (__stdcall*)( ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)()); +template +yes_type is_function_ptr_tester(R (__fastcall*)( ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)()); +template +yes_type is_function_ptr_tester(R (__cdecl*)( ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); +#endif +#else + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, 25, "carve/external/boost/type_traits/detail/is_function_ptr_tester.hpp")) +#include BOOST_PP_ITERATE() + +#endif // BOOST_TT_PREPROCESSING_MODE + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED + +///// iteration + +#else +#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1) +#undef __stdcall +#undef __fastcall +#undef __cdecl + +template +yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#endif +@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#endif + +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp new file mode 100644 index 00000000..e4c8fc01 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp @@ -0,0 +1,817 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED +#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED + +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +template +struct is_mem_fun_pointer_impl +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +#if !defined(BOOST_TT_PREPROCESSING_MODE) +// pre-processed code, don't edit, try GNU cpp with +// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif + +#else + +#undef BOOST_STATIC_CONSTANT +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, 25, "carve/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp")) +#include BOOST_PP_ITERATE() + +#endif // BOOST_TT_PREPROCESSING_MODE + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED + +///// iteration + +#else +#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1) + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif + +@#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif +@#endif + +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp new file mode 100644 index 00000000..3bd111ca --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp @@ -0,0 +1,2759 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED +#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED + +#include +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +no_type BOOST_TT_DECL is_mem_fun_pointer_tester(...); + +#if !defined(BOOST_TT_PREPROCESSING_MODE) +// pre-processed code, don't edit, try GNU cpp with +// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile); +#endif + +#else + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, 25, "carve/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp")) +#include BOOST_PP_ITERATE() + +#endif // BOOST_TT_PREPROCESSING_MODE + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED + +///// iteration + +#else +#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1) +#undef __stdcall +#undef __fastcall +#undef __cdecl + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile); +@#endif +@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS // Other calling conventions used by MS compatible compilers: +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile); + +@#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile); +@#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile); +@#endif + +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_def.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_def.hpp new file mode 100644 index 00000000..ac6d27ad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_def.hpp @@ -0,0 +1,58 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2005-08-25 12:27:28 -0400 (Thu, 25 Aug 2005) $ +// $Revision: 30670 $ + +#include +#include +#include +#include + +#include + +#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300 +# define BOOST_TT_AUX_SIZE_T_BASE(C) ::boost::integral_constant +# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/ +#else +# define BOOST_TT_AUX_SIZE_T_BASE(C) ::boost::mpl::size_t +# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \ + typedef ::boost::mpl::size_t base_; \ + using base_::value; \ + /**/ +#endif + + +#define BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(trait,T,C) \ +template< typename T > struct trait \ + : BOOST_TT_AUX_SIZE_T_BASE(C) \ +{ \ + BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \ +}; \ +\ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \ +/**/ + +#define BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(trait,spec,C) \ +template<> struct trait \ + : BOOST_TT_AUX_SIZE_T_BASE(C) \ +{ \ + BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \ +}; \ +/**/ + +#define BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,C) \ +template< param > struct trait \ + : BOOST_TT_AUX_SIZE_T_BASE(C) \ +{ \ +}; \ +/**/ diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_undef.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_undef.hpp new file mode 100644 index 00000000..06a176dc --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/size_t_trait_undef.hpp @@ -0,0 +1,16 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#undef BOOST_TT_AUX_SIZE_T_TRAIT_DEF1 +#undef BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1 +#undef BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/template_arity_spec.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/template_arity_spec.hpp new file mode 100644 index 00000000..97b01612 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/template_arity_spec.hpp @@ -0,0 +1,31 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \ + && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) +# define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) \ +namespace mpl { namespace aux { \ +template< BOOST_MPL_PP_PARAMS(i, typename T) > \ +struct template_arity< \ + name< BOOST_MPL_PP_PARAMS(i, T) > \ + > \ + : int_ \ +{ \ +}; \ +}} \ +/**/ +#else +# define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/ +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_def.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_def.hpp new file mode 100644 index 00000000..95058fc0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_def.hpp @@ -0,0 +1,61 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#include +#include + +#define BOOST_TT_AUX_TYPE_TRAIT_DEF1(trait,T,result) \ +template< typename T > struct trait \ +{ \ + typedef result type; \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \ +}; \ +\ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_SPEC1(trait,spec,result) \ +template<> struct trait \ +{ \ + typedef result type; \ + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(trait,spec,result) \ +template<> struct trait##_impl \ +{ \ + typedef result type; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,result) \ +template< param > struct trait \ +{ \ + typedef result type; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,spec,result) \ +template< param1, param2 > struct trait \ +{ \ + typedef result; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(param,trait,spec,result) \ +template< param > struct trait##_impl \ +{ \ + typedef result type; \ +}; \ +/**/ diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_undef.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_undef.hpp new file mode 100644 index 00000000..9403b9bd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/type_trait_undef.hpp @@ -0,0 +1,19 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// $Source$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#undef BOOST_TT_AUX_TYPE_TRAIT_DEF1 +#undef BOOST_TT_AUX_TYPE_TRAIT_SPEC1 +#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1 +#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1 +#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2 +#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/wrap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/wrap.hpp new file mode 100644 index 00000000..d0a75d06 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/wrap.hpp @@ -0,0 +1,18 @@ +// (C) Copyright David Abrahams 2002. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_DETAIL_WRAP_HPP_INCLUDED +#define BOOST_TT_DETAIL_WRAP_HPP_INCLUDED + +namespace boost { +namespace type_traits { + +template struct wrap {}; + +}} // namespace boost::type_traits + +#endif // BOOST_TT_DETAIL_WRAP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/yes_no_type.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/yes_no_type.hpp new file mode 100644 index 00000000..f5837302 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/detail/yes_no_type.hpp @@ -0,0 +1,26 @@ + +// (C) Copyright John Maddock and Steve Cleary 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. +// +// macros and helpers for working with integral-constant-expressions. + +#ifndef BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED +#define BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED + +namespace boost { +namespace type_traits { + +typedef char yes_type; +struct no_type +{ + char padding[8]; +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/ice.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/ice.hpp new file mode 100644 index 00000000..109e1f71 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/ice.hpp @@ -0,0 +1,20 @@ + +// (C) Copyright John Maddock and Steve Cleary 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. +// +// macros and helpers for working with integral-constant-expressions. + +#ifndef BOOST_TT_ICE_HPP_INCLUDED +#define BOOST_TT_ICE_HPP_INCLUDED + +#include +#include +#include +#include +#include + +#endif // BOOST_TT_ICE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/integral_constant.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/integral_constant.hpp new file mode 100644 index 00000000..63b20fa2 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/integral_constant.hpp @@ -0,0 +1,53 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP +#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP + +#include +#include +#include + +namespace boost{ + +#if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__) +template +#else +template +#endif +struct integral_constant : public mpl::integral_c +{ + typedef integral_constant type; +}; + +template<> struct integral_constant : public mpl::true_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# pragma warning(push) +# pragma warning(disable:4097) + typedef mpl::true_ base_; + using base_::value; +# pragma warning(pop) +#endif + typedef integral_constant type; +}; +template<> struct integral_constant : public mpl::false_ +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# pragma warning(push) +# pragma warning(disable:4097) + typedef mpl::false_ base_; + using base_::value; +# pragma warning(pop) +#endif + typedef integral_constant type; +}; + +typedef integral_constant true_type; +typedef integral_constant false_type; + +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/intrinsics.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/intrinsics.hpp new file mode 100644 index 00000000..4b27325a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/intrinsics.hpp @@ -0,0 +1,240 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED +#define BOOST_TT_INTRINSICS_HPP_INCLUDED + +#ifndef BOOST_TT_CONFIG_HPP_INCLUDED +#include +#endif + +// +// Helper macros for builtin compiler support. +// If your compiler has builtin support for any of the following +// traits concepts, then redefine the appropriate macros to pick +// up on the compiler support: +// +// (these should largely ignore cv-qualifiers) +// BOOST_IS_UNION(T) should evaluate to true if T is a union type +// BOOST_IS_POD(T) should evaluate to true if T is a POD type +// BOOST_IS_EMPTY(T) should evaluate to true if T is an empty struct or union +// BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if "T x;" has no effect +// BOOST_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy +// BOOST_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy +// BOOST_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect +// BOOST_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if "T x;" can not throw +// BOOST_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw +// BOOST_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw +// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor +// +// The following can also be defined: when detected our implementation is greatly simplified. +// Note that unlike the macros above these do not have default definitions, so we can use +// #ifdef MACRONAME to detect when these are available. +// +// BOOST_IS_ABSTRACT(T) true if T is an abstract type +// BOOST_IS_BASE_OF(T,U) true if T is a base class of U +// BOOST_IS_CLASS(T) true if T is a class type +// BOOST_IS_CONVERTIBLE(T,U) true if T is convertible to U +// BOOST_IS_ENUM(T) true is T is an enum +// BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type +// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T. + +#ifdef BOOST_HAS_SGI_TYPE_TRAITS + // Hook into SGI's __type_traits class, this will pick up user supplied + // specializations as well as SGI - compiler supplied specializations. +# include +# ifdef __NetBSD__ + // There are two different versions of type_traits.h on NetBSD on Spark + // use an implicit include via algorithm instead, to make sure we get + // the same version as the std lib: +# include +# else +# include +# endif +# define BOOST_IS_POD(T) ::boost::is_same< typename ::__type_traits::is_POD_type, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::boost::is_same< typename ::__type_traits::has_trivial_default_constructor, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_COPY(T) ::boost::is_same< typename ::__type_traits::has_trivial_copy_constructor, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_ASSIGN(T) ::boost::is_same< typename ::__type_traits::has_trivial_assignment_operator, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::boost::is_same< typename ::__type_traits::has_trivial_destructor, ::__true_type>::value + +# ifdef __sgi +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +# endif +#endif + +#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000) + // Metrowerks compiler is acquiring intrinsic type traits support + // post version 8. We hook into the published interface to pick up + // user defined specializations as well as compiler intrinsics as + // and when they become available: +# include +# define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union::value +# define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD::value +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor::value +# define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor::value +# define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment::value +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor::value +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(BOOST_MSVC) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >=140050215) +# include + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T)) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) +# define BOOST_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T) +# define BOOST_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T) +# define BOOST_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# define BOOST_IS_CLASS(T) __is_class(T) +// This one doesn't quite always do the right thing: +// # define BOOST_IS_CONVERTIBLE(T,U) __is_convertible_to(T,U) +# define BOOST_IS_ENUM(T) __is_enum(T) +// This one doesn't quite always do the right thing: +// # define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +// This one fails if the default alignment has been changed with /Zp: +// # define BOOST_ALIGNMENT_OF(T) __alignof(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(__DMC__) && (__DMC__ >= 0x848) +// For Digital Mars C++, www.digitalmars.com +# define BOOST_IS_UNION(T) (__typeinfo(T) & 0x400) +# define BOOST_IS_POD(T) (__typeinfo(T) & 0x800) +# define BOOST_IS_EMPTY(T) (__typeinfo(T) & 0x1000) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__typeinfo(T) & 0x10) +# define BOOST_HAS_TRIVIAL_COPY(T) (__typeinfo(T) & 0x20) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__typeinfo(T) & 0x40) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__typeinfo(T) & 0x8) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__typeinfo(T) & 0x80) +# define BOOST_HAS_NOTHROW_COPY(T) (__typeinfo(T) & 0x100) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__typeinfo(T) & 0x200) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) (__typeinfo(T) & 0x4) +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) +# include +# include +# include + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) __is_pod(T) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) +# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference::value) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T) +# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile::value && !is_reference::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_ENUM(T) __is_enum(T) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# if !defined(unix) || defined(__LP64__) + // GCC sometimes lies about alignment requirements + // of type double on 32-bit unix platforms, use the + // old implementation instead in that case: +# define BOOST_ALIGNMENT_OF(T) __alignof__(T) +# endif + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +# if defined(__CODEGEARC__) +# include +# include +# include +# include + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) __is_pod(T) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T) || is_void::value) +# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile::value && !is_reference::value || is_void::value) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile::value || is_void::value) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || is_void::value) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T) || is_void::value) +# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile::value && !is_reference::value || is_void::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value || is_void::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_void::value && !is_void::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible(T,U) || is_void::value) +# define BOOST_IS_ENUM(T) __is_enum(T) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# define BOOST_ALIGNMENT_OF(T) alignof(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#ifndef BOOST_IS_UNION +# define BOOST_IS_UNION(T) false +#endif + +#ifndef BOOST_IS_POD +# define BOOST_IS_POD(T) false +#endif + +#ifndef BOOST_IS_EMPTY +# define BOOST_IS_EMPTY(T) false +#endif + +#ifndef BOOST_HAS_TRIVIAL_CONSTRUCTOR +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) false +#endif + +#ifndef BOOST_HAS_TRIVIAL_COPY +# define BOOST_HAS_TRIVIAL_COPY(T) false +#endif + +#ifndef BOOST_HAS_TRIVIAL_ASSIGN +# define BOOST_HAS_TRIVIAL_ASSIGN(T) false +#endif + +#ifndef BOOST_HAS_TRIVIAL_DESTRUCTOR +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) false +#endif + +#ifndef BOOST_HAS_NOTHROW_CONSTRUCTOR +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) false +#endif + +#ifndef BOOST_HAS_NOTHROW_COPY +# define BOOST_HAS_NOTHROW_COPY(T) false +#endif + +#ifndef BOOST_HAS_NOTHROW_ASSIGN +# define BOOST_HAS_NOTHROW_ASSIGN(T) false +#endif + +#ifndef BOOST_HAS_VIRTUAL_DESTRUCTOR +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) false +#endif + +#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED + + + + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_abstract.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_abstract.hpp new file mode 100644 index 00000000..e28ff4f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_abstract.hpp @@ -0,0 +1,153 @@ +#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP +#define BOOST_TT_IS_ABSTRACT_CLASS_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// is_abstract_class.hpp: +// +// (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org for updates, documentation, and revision history. +// + +// Compile type discovery whether given type is abstract class or not. +// +// Requires DR 337 to be supported by compiler +// (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_active.html#337). +// +// +// Believed (Jan 2004) to work on: +// - GCC 3.4 +// - VC++ 7.1 +// - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2) +// +// Doesn't work on: +// - VC++6, VC++7.0 and less +// - GCC 3.3.X and less +// - Borland C++ 6 and less +// +// +// History: +// - Originally written by Rani Sharoni, see +// http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com +// At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1. +// - Adapted and added into Boost.Serialization library by Robert Ramey +// (starting with submission #10). +// - Jan 2004: GCC 3.4 fixed to suport DR337 (Giovanni Bajo). +// - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek). +// - Nov 2004: Christoph Ludwig found that the implementation did not work with +// template types and gcc-3.4 or VC7.1, fix due to Christoph Ludwig +// and John Maddock. +// - Dec 2004: Added new config macro BOOST_NO_IS_ABSTRACT which causes the template +// to degrade gracefully, rather than trash the compiler (John Maddock). +// + +#include +#ifndef BOOST_IS_ABSTRACT +#include +#include +#include +#include +#ifdef BOOST_NO_IS_ABSTRACT +#include +#endif +#endif +// should be the last #include +#include + + +namespace boost { +namespace detail{ + +#ifdef BOOST_IS_ABSTRACT +template +struct is_abstract_imp +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_ABSTRACT(T)); +}; +#elif !defined(BOOST_NO_IS_ABSTRACT) +template +struct is_abstract_imp2 +{ + // Deduction fails if T is void, function type, + // reference type (14.8.2/2)or an abstract class type + // according to review status issue #337 + // + template + static type_traits::no_type check_sig(U (*)[1]); + template + static type_traits::yes_type check_sig(...); + // + // T must be a complete type, further if T is a template then + // it must be instantiated in order for us to get the right answer: + // + BOOST_STATIC_ASSERT(sizeof(T) != 0); + + // GCC2 won't even parse this template if we embed the computation + // of s1 in the computation of value. +#ifdef __GNUC__ + BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(is_abstract_imp2::template check_sig(0))); +#else +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(check_sig(0))); +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +#endif + + BOOST_STATIC_CONSTANT(bool, value = + (s1 == sizeof(type_traits::yes_type))); +}; + +template +struct is_abstract_select +{ + template + struct rebind + { + typedef is_abstract_imp2 type; + }; +}; +template <> +struct is_abstract_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_abstract_imp +{ + typedef is_abstract_select< ::boost::is_class::value> selector; + typedef typename selector::template rebind binder; + typedef typename binder::type type; + + BOOST_STATIC_CONSTANT(bool, value = type::value); +}; + +#endif +} + +#ifndef BOOST_NO_IS_ABSTRACT +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_abstract_imp::value) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_polymorphic_imp::value) +#endif + +} // namespace boost + +#include + +#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_arithmetic.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_arithmetic.hpp new file mode 100644 index 00000000..2bbe8a8c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_arithmetic.hpp @@ -0,0 +1,51 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED +#define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED + +#if !defined( __CODEGEARC__ ) +#include +#include +#include +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#if !defined(__CODEGEARC__) +namespace detail { + +template< typename T > +struct is_arithmetic_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_float::value + >::value)); +}; + +} // namespace detail +#endif + +//* is a type T an arithmetic type described in the standard (3.9.1p8) +#if defined(__CODEGEARC__) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,__is_arithmetic(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,::boost::detail::is_arithmetic_impl::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_array.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_array.hpp new file mode 100644 index 00000000..3a78a57c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_array.hpp @@ -0,0 +1,91 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +// Some fixes for is_array are based on a newgroup posting by Jonathan Lundquist. + + +#ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED +#define BOOST_TT_IS_ARRAY_HPP_INCLUDED + +#include + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +#endif + +#include + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,__is_array(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,false) +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T[N],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const[N],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T volatile[N],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const volatile[N],true) +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T[],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const[],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T volatile[],true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],true) +#endif +#endif + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail { + +using ::boost::type_traits::yes_type; +using ::boost::type_traits::no_type; +using ::boost::type_traits::wrap; + +template< typename T > T(* is_array_tester1(wrap) )(wrap); +char BOOST_TT_DECL is_array_tester1(...); + +template< typename T> no_type is_array_tester2(T(*)(wrap)); +yes_type BOOST_TT_DECL is_array_tester2(...); + +template< typename T > +struct is_array_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + sizeof(::boost::detail::is_array_tester2( + ::boost::detail::is_array_tester1( + ::boost::type_traits::wrap() + ) + )) == 1 + ); +}; + +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,::boost::detail::is_array_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_base_and_derived.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_base_and_derived.hpp new file mode 100644 index 00000000..3b09447e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_base_and_derived.hpp @@ -0,0 +1,251 @@ + +// (C) Copyright Rani Sharoni 2003. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED +#define BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED + +#include +#ifndef BOOST_IS_BASE_OF +#include +#include +#include +#include +#include +#include +#include +#endif + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#ifndef BOOST_IS_BASE_OF +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581)) \ + && !BOOST_WORKAROUND(__SUNPRO_CC , <= 0x540) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \ + && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) + + // The EDG version number is a lower estimate. + // It is not currently known which EDG version + // exactly fixes the problem. + +/************************************************************************* + +This version detects ambiguous base classes and private base classes +correctly, and was devised by Rani Sharoni. + +Explanation by Terje Slettebo and Rani Sharoni. + +Let's take the multiple base class below as an example, and the following +will also show why there's not a problem with private or ambiguous base +class: + +struct B {}; +struct B1 : B {}; +struct B2 : B {}; +struct D : private B1, private B2 {}; + +is_base_and_derived::value; + +First, some terminology: + +SC - Standard conversion +UDC - User-defined conversion + +A user-defined conversion sequence consists of an SC, followed by an UDC, +followed by another SC. Either SC may be the identity conversion. + +When passing the default-constructed Host object to the overloaded check_sig() +functions (initialization 8.5/14/4/3), we have several viable implicit +conversion sequences: + +For "static no_type check_sig(B const volatile *, int)" we have the conversion +sequences: + +C -> C const (SC - Qualification Adjustment) -> B const volatile* (UDC) +C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* -> + B const volatile* (SC - Conversion) + +For "static yes_type check_sig(D const volatile *, T)" we have the conversion +sequence: + +C -> D const volatile* (UDC) + +According to 13.3.3.1/4, in context of user-defined conversion only the +standard conversion sequence is considered when selecting the best viable +function, so it only considers up to the user-defined conversion. For the +first function this means choosing between C -> C const and C -> C, and it +chooses the latter, because it's a proper subset (13.3.3.2/3/2) of the +former. Therefore, we have: + +C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* -> + B const volatile* (SC - Conversion) +C -> D const volatile* (UDC) + +Here, the principle of the "shortest subsequence" applies again, and it +chooses C -> D const volatile*. This shows that it doesn't even need to +consider the multiple paths to B, or accessibility, as that possibility is +eliminated before it could possibly cause ambiguity or access violation. + +If D is not derived from B, it has to choose between C -> C const -> B const +volatile* for the first function, and C -> D const volatile* for the second +function, which are just as good (both requires a UDC, 13.3.3.2), had it not +been for the fact that "static no_type check_sig(B const volatile *, int)" is +not templated, which makes C -> C const -> B const volatile* the best choice +(13.3.3/1/4), resulting in "no". + +Also, if Host::operator B const volatile* hadn't been const, the two +conversion sequences for "static no_type check_sig(B const volatile *, int)", in +the case where D is derived from B, would have been ambiguous. + +See also +http://groups.google.com/groups?selm=df893da6.0301280859.522081f7%40posting. +google.com and links therein. + +*************************************************************************/ + +template +struct bd_helper +{ + // + // This VC7.1 specific workaround stops the compiler from generating + // an internal compiler error when compiling with /vmg (thanks to + // Aleksey Gurtovoy for figuring out the workaround). + // +#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310) + template + static type_traits::yes_type check_sig(D const volatile *, T); + static type_traits::no_type check_sig(B const volatile *, int); +#else + static type_traits::yes_type check_sig(D const volatile *, long); + static type_traits::no_type check_sig(B const volatile * const&, int); +#endif +}; + +template +struct is_base_and_derived_impl2 +{ +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + // + // May silently do the wrong thing with incomplete types + // unless we trap them here: + // + BOOST_STATIC_ASSERT(sizeof(B) != 0); + BOOST_STATIC_ASSERT(sizeof(D) != 0); + + struct Host + { +#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310) + operator B const volatile *() const; +#else + operator B const volatile * const&() const; +#endif + operator D const volatile *(); + }; + + BOOST_STATIC_CONSTANT(bool, value = + sizeof(bd_helper::check_sig(Host(), 0)) == sizeof(type_traits::yes_type)); +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +}; + +#else + +// +// broken version: +// +template +struct is_base_and_derived_impl2 +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::is_convertible::value)); +}; + +#define BOOST_BROKEN_IS_BASE_AND_DERIVED + +#endif + +template +struct is_base_and_derived_impl3 +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template +struct is_base_and_derived_select +{ + template + struct rebind + { + typedef is_base_and_derived_impl3 type; + }; +}; + +template <> +struct is_base_and_derived_select +{ + template + struct rebind + { + typedef is_base_and_derived_impl2 type; + }; +}; + +template +struct is_base_and_derived_impl +{ + typedef typename remove_cv::type ncvB; + typedef typename remove_cv::type ncvD; + + typedef is_base_and_derived_select< + ::boost::is_class::value, + ::boost::is_class::value, + ::boost::is_same::value> selector; + typedef typename selector::template rebind binder; + typedef typename binder::type bound_type; + + BOOST_STATIC_CONSTANT(bool, value = bound_type::value); +}; +#else +template +struct is_base_and_derived_impl +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_BASE_OF(B,D)); +}; +#endif +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF2( + is_base_and_derived + , Base + , Derived + , (::boost::detail::is_base_and_derived_impl::value) + ) + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base,Derived&,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived&,false) +#endif + +#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename Base,is_base_and_derived,Base,Base,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_class.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_class.hpp new file mode 100644 index 00000000..9e05f557 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_class.hpp @@ -0,0 +1,140 @@ +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000-2003. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED +#define BOOST_TT_IS_CLASS_HPP_INCLUDED + +#include +#include +#ifndef BOOST_IS_CLASS +# include +# include +# include + +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION +# include +#else +# include +# include +# include +# include +# include +#endif + +#endif // BOOST_IS_CLASS + +#ifdef __EDG_VERSION__ +# include +#endif + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#ifndef BOOST_IS_CLASS +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION + +// This is actually the conforming implementation which works with +// abstract classes. However, enough compilers have trouble with +// it that most will use the one in +// boost/type_traits/object_traits.hpp. This implementation +// actually works with VC7.0, but other interactions seem to fail +// when we use it. + +// is_class<> metafunction due to Paul Mensonides +// (leavings@attbi.com). For more details: +// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1 +#if defined(__GNUC__) && !defined(__EDG_VERSION__) + +template ::boost::type_traits::yes_type is_class_tester(void(U::*)(void)); +template ::boost::type_traits::no_type is_class_tester(...); + +template +struct is_class_impl +{ + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + sizeof(is_class_tester(0)) == sizeof(::boost::type_traits::yes_type), + ::boost::type_traits::ice_not< ::boost::is_union::value >::value + >::value) + ); +}; + +#else + +template +struct is_class_impl +{ + template static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void)); + template static ::boost::type_traits::no_type is_class_tester(...); + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + sizeof(is_class_tester(0)) == sizeof(::boost::type_traits::yes_type), + ::boost::type_traits::ice_not< ::boost::is_union::value >::value + >::value) + ); +}; + +#endif + +#else + +template +struct is_class_impl +{ +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_not< ::boost::is_union::value >::value, + ::boost::type_traits::ice_not< ::boost::is_scalar::value >::value, + ::boost::type_traits::ice_not< ::boost::is_array::value >::value, + ::boost::type_traits::ice_not< ::boost::is_reference::value>::value, + ::boost::type_traits::ice_not< ::boost::is_void::value >::value, + ::boost::type_traits::ice_not< ::boost::is_function::value >::value + >::value)); +# else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_not< ::boost::is_union::value >::value, + ::boost::type_traits::ice_not< ::boost::is_scalar::value >::value, + ::boost::type_traits::ice_not< ::boost::is_array::value >::value, + ::boost::type_traits::ice_not< ::boost::is_reference::value>::value, + ::boost::type_traits::ice_not< ::boost::is_void::value >::value + >::value)); +# endif +}; + +# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION +# else // BOOST_IS_CLASS +template +struct is_class_impl +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T)); +}; +# endif // BOOST_IS_CLASS + +} // namespace detail + +# ifdef __EDG_VERSION__ +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_class,T, boost::detail::is_class_impl::type>::value) +# else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl::value) +# endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_const.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_const.hpp new file mode 100644 index 00000000..fc085c39 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_const.hpp @@ -0,0 +1,146 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_CONST_HPP_INCLUDED +#define BOOST_TT_IS_CONST_HPP_INCLUDED + +#include +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# ifdef __GNUC__ +# include +# endif +# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +# include +# endif +#else +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T)) + +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +//* is a type T declared const - is_const +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) + BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::cv_traits_imp::type*>::is_const) +#else + BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::cv_traits_imp::is_const) +#endif +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false) +#endif + +#if defined(__GNUC__) && (__GNUC__ < 3) +// special case for gcc where illegally cv-qualified reference types can be +// generated in some corner cases: +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T const,!(::boost::is_reference::value)) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T volatile const,!(::boost::is_reference::value)) +#endif + +#else + +namespace detail { + +using ::boost::type_traits::yes_type; +using ::boost::type_traits::no_type; + +yes_type is_const_tester(const volatile void*); +no_type is_const_tester(volatile void *); + +template +struct is_const_helper + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_const_helper +{ + template struct result_ + { + static T* t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(detail::yes_type) == sizeof(detail::is_const_tester(t)) + )); + }; +}; + +template <> +struct is_const_helper +{ + template struct result_ + { + static T t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(detail::yes_type) == sizeof(detail::is_const_tester(&t)) + )); + }; +}; + +template +struct is_const_impl + : is_const_helper< + is_reference::value + , is_array::value + >::template result_ +{ +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const volatile,true) +#endif + +} // namespace detail + +//* is a type T declared const - is_const +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CONST_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_convertible.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_convertible.hpp new file mode 100644 index 00000000..92656a0d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_convertible.hpp @@ -0,0 +1,430 @@ + +// Copyright 2000 John Maddock (john@johnmaddock.co.uk) +// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu) +// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) +// +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED +#define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED + +#include +#ifndef BOOST_IS_CONVERTIBLE +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_IS_ABSTRACT +#include +#endif + +#if defined(__MWERKS__) +#include +#include +#endif + +#endif // BOOST_IS_CONVERTIBLE + +// should be always the last #include directive +#include + +namespace boost { + +#ifndef BOOST_IS_CONVERTIBLE + +// is one type convertable to another? +// +// there are multiple versions of the is_convertible +// template, almost every compiler seems to require its +// own version. +// +// Thanks to Andrei Alexandrescu for the original version of the +// conversion detection technique! +// + +namespace detail { + +// MS specific version: + +#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) + +// This workaround is necessary to handle when From is void +// which is normally taken care of by the partial specialization +// of the is_convertible typename. +using ::boost::type_traits::yes_type; +using ::boost::type_traits::no_type; + +template< typename From > +struct does_conversion_exist +{ + template< typename To > struct result_ + { + static no_type BOOST_TT_DECL _m_check(...); + static yes_type BOOST_TT_DECL _m_check(To); + static From _m_from; + enum { value = sizeof( _m_check(_m_from) ) == sizeof(yes_type) }; + }; +}; + +template<> +struct does_conversion_exist +{ + template< typename To > struct result_ + { + enum { value = ::boost::is_void::value }; + }; +}; + +template +struct is_convertible_basic_impl + : does_conversion_exist::template result_ +{ +}; + +#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560) +// +// special version for Borland compilers +// this version breaks when used for some +// UDT conversions: +// +template +struct is_convertible_impl +{ +#pragma option push -w-8074 + // This workaround for Borland breaks the EDG C++ frontend, + // so we only use it for Borland. + template struct checker + { + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(T); + }; + + static From _m_from; + static bool const value = sizeof( checker::_m_check(_m_from) ) + == sizeof(::boost::type_traits::yes_type); +#pragma option pop +}; + +#elif defined(__GNUC__) || defined(__BORLANDC__) && (__BORLANDC__ < 0x600) +// special version for gcc compiler + recent Borland versions +// note that this does not pass UDT's through (...) + +struct any_conversion +{ + template any_conversion(const volatile T&); + template any_conversion(T&); +}; + +template struct checker +{ + static boost::type_traits::no_type _m_check(any_conversion ...); + static boost::type_traits::yes_type _m_check(T, int); +}; + +template +struct is_convertible_basic_impl +{ + static From _m_from; + static bool const value = sizeof( detail::checker::_m_check(_m_from, 0) ) + == sizeof(::boost::type_traits::yes_type); +}; + +#elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \ + || defined(__IBMCPP__) || defined(__HP_aCC) +// +// This is *almost* an ideal world implementation as it doesn't rely +// on undefined behaviour by passing UDT's through (...). +// Unfortunately it doesn't quite pass all the tests for most compilers (sigh...) +// Enable this for your compiler if is_convertible_test.cpp will compile it... +// +// Note we do not enable this for VC7.1, because even though it passes all the +// type_traits tests it is known to cause problems when instantiation occurs +// deep within the instantiation tree :-( +// +struct any_conversion +{ + template any_conversion(const volatile T&); + // we need this constructor to catch references to functions + // (which can not be cv-qualified): + template any_conversion(T&); +}; + +template +struct is_convertible_basic_impl +{ + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int); + static From _m_from; + + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type) + ); +}; + +#elif defined(__DMC__) + +struct any_conversion +{ + template any_conversion(const volatile T&); + // we need this constructor to catch references to functions + // (which can not be cv-qualified): + template any_conversion(T&); +}; + +template +struct is_convertible_basic_impl +{ + // Using '...' doesn't always work on Digital Mars. This version seems to. + template + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion, float, T); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int, int); + static From _m_from; + + // Static constants sometime cause the conversion of _m_from to To to be + // called. This doesn't happen with an enum. + enum { value = + sizeof( _m_check(_m_from, 0, 0) ) == sizeof(::boost::type_traits::yes_type) + }; +}; + +#elif defined(__MWERKS__) +// +// CW works with the technique implemented above for EDG, except when From +// is a function type (or a reference to such a type), in which case +// any_conversion won't be accepted as a valid conversion. We detect this +// exceptional situation and channel it through an alternative algorithm. +// + +template +struct is_convertible_basic_impl_aux; + +struct any_conversion +{ + template any_conversion(const volatile T&); +}; + +template +struct is_convertible_basic_impl_aux +{ + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int); + static From _m_from; + + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type) + ); +}; + +template +struct is_convertible_basic_impl_aux +{ + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To); + static From _m_from; + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type) + ); +}; + +template +struct is_convertible_basic_impl: + is_convertible_basic_impl_aux< + From,To, + ::boost::is_function::type>::value + > +{}; + +#else + +// +// This version seems to work pretty well for a wide spectrum of compilers, +// however it does rely on undefined behaviour by passing UDT's through (...). +// +template +struct is_convertible_basic_impl +{ + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To); + static From _m_from; +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(disable:6334) +#endif +#endif + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type) + ); +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +}; + +#endif // is_convertible_impl + +#if defined(__DMC__) +// As before, a static constant sometimes causes errors on Digital Mars. +template +struct is_convertible_impl +{ + typedef typename add_reference::type ref_type; + enum { value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_or< + ::boost::detail::is_convertible_basic_impl::value, + ::boost::is_void::value + >::value, + ::boost::type_traits::ice_not< + ::boost::is_array::value + >::value + >::value) }; +}; +#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551 +template +struct is_convertible_impl +{ + typedef typename add_reference::type ref_type; + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_or< + ::boost::detail::is_convertible_basic_impl::value, + ::boost::is_void::value + >::value, + ::boost::type_traits::ice_not< + ::boost::is_array::value + >::value + >::value) + ); +}; +#endif + +template +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef is_convertible_impl type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef true_type type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_convertible_impl_dispatch_base +{ +#if !BOOST_WORKAROUND(__HP_aCC, < 60700) + typedef is_convertible_impl_select< + ::boost::is_arithmetic::value, + ::boost::is_arithmetic::value, +#ifndef BOOST_NO_IS_ABSTRACT + ::boost::is_abstract::value +#else + false +#endif + > selector; +#else + typedef is_convertible_impl_select selector; +#endif + typedef typename selector::template rebind isc_binder; + typedef typename isc_binder::type type; +}; + +template +struct is_convertible_impl_dispatch + : public is_convertible_impl_dispatch_base::type +{}; + +// +// Now add the full and partial specialisations +// for void types, these are common to all the +// implementation above: +// +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +# define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \ + BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2,value) \ + BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const,value) \ + BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 volatile,value) \ + BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const volatile,value) \ + /**/ + +# define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(trait,spec1,spec2,value) \ + TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \ + TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const,spec2,value) \ + TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 volatile,spec2,value) \ + TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const volatile,spec2,value) \ + /**/ + + TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(is_convertible,void,void,true) + +# undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2 +# undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1 + +#else + BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(is_convertible,void,void,true) +#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void,To,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void,true) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const,To,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void volatile,To,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const volatile,To,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,true) +#endif +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,(::boost::detail::is_convertible_impl_dispatch::value)) + +#else + +BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,BOOST_IS_CONVERTIBLE(From,To)) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_enum.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_enum.hpp new file mode 100644 index 00000000..6268b9f4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_enum.hpp @@ -0,0 +1,189 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_ENUM_HPP_INCLUDED +#define BOOST_TT_IS_ENUM_HPP_INCLUDED + +#include +#ifndef BOOST_IS_ENUM +#include +#include +#include +#include +#include +#ifdef __GNUC__ +#include +#endif +#include +#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) +# include +# include +#endif +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_IS_ENUM +#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)) + +namespace detail { + +#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) + +template +struct is_class_or_union +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_class::value + , ::boost::is_union::value + >::value)); +}; + +#else + +template +struct is_class_or_union +{ +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way. + BOOST_STATIC_CONSTANT(bool, value = false); +# else + template static ::boost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void)); + +# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) \ + || BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE + static ::boost::type_traits::no_type is_class_or_union_tester(...); + BOOST_STATIC_CONSTANT( + bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type)); +# else + template + static ::boost::type_traits::no_type is_class_or_union_tester(...); + BOOST_STATIC_CONSTANT( + bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type)); +# endif +# endif +}; +#endif + +struct int_convertible +{ + int_convertible(int); +}; + +// Don't evaluate convertibility to int_convertible unless the type +// is non-arithmetic. This suppresses warnings with GCC. +template +struct is_enum_helper +{ + template struct type + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template <> +struct is_enum_helper +{ + template struct type + : ::boost::is_convertible::type,::boost::detail::int_convertible> + { + }; +}; + +template struct is_enum_impl +{ + //typedef ::boost::add_reference ar_t; + //typedef typename ar_t::type r_type; + +#if defined(__GNUC__) + +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION + + // We MUST check for is_class_or_union on conforming compilers in + // order to correctly deduce that noncopyable types are not enums + // (dwa 2002/04/15)... + BOOST_STATIC_CONSTANT(bool, selector = + (::boost::type_traits::ice_or< + ::boost::is_arithmetic::value + , ::boost::is_reference::value + , ::boost::is_function::value + , is_class_or_union::value + , is_array::value + >::value)); +#else + // ...however, not checking is_class_or_union on non-conforming + // compilers prevents a dependency recursion. + BOOST_STATIC_CONSTANT(bool, selector = + (::boost::type_traits::ice_or< + ::boost::is_arithmetic::value + , ::boost::is_reference::value + , ::boost::is_function::value + , is_array::value + >::value)); +#endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION + +#else // !defined(__GNUC__): + + BOOST_STATIC_CONSTANT(bool, selector = + (::boost::type_traits::ice_or< + ::boost::is_arithmetic::value + , ::boost::is_reference::value + , is_class_or_union::value + , is_array::value + >::value)); + +#endif + +#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) + typedef ::boost::detail::is_enum_helper< + ::boost::detail::is_enum_impl::selector + > se_t; +#else + typedef ::boost::detail::is_enum_helper se_t; +#endif + + typedef typename se_t::template type helper; + BOOST_STATIC_CONSTANT(bool, value = helper::value); +}; + +// these help on compilers with no partial specialization support: +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,::boost::detail::is_enum_impl::value) + +#else // __BORLANDC__ +// +// buggy is_convertible prevents working +// implementation of is_enum: +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,false) + +#endif + +#else // BOOST_IS_ENUM + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,BOOST_IS_ENUM(T)) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_float.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_float.hpp new file mode 100644 index 00000000..6c43030f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_float.hpp @@ -0,0 +1,27 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED +#define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED + +// should be the last #include +#include + +namespace boost { + +//* is a type T a floating-point type described in the standard (3.9.1p8) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_float,T,false) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,float,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,double,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,long double,true) + +} // namespace boost + +#include + +#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_function.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_function.hpp new file mode 100644 index 00000000..bf0c3806 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_function.hpp @@ -0,0 +1,103 @@ + +// Copyright 2000 John Maddock (john@johnmaddock.co.uk) +// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com) +// +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_FUNCTION_HPP_INCLUDED +#define BOOST_TT_IS_FUNCTION_HPP_INCLUDED + +#include +#include +#include + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) +# include +#else +# include +# include +#endif + +// should be the last #include +#include + +// is a type a function? +// Please note that this implementation is unnecessarily complex: +// we could just use !is_convertible::value, +// except that some compilers erroneously allow conversions from +// function pointers to void*. + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) +template +struct is_function_chooser + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_function_chooser +{ + template< typename T > struct result_ + : ::boost::type_traits::is_function_ptr_helper + { + }; +}; + +template +struct is_function_impl + : is_function_chooser< ::boost::is_reference::value > + ::BOOST_NESTED_TEMPLATE result_ +{ +}; + +#else + +template +struct is_function_impl +{ +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + static T* t; + BOOST_STATIC_CONSTANT( + bool, value = sizeof(::boost::type_traits::is_function_ptr_tester(t)) + == sizeof(::boost::type_traits::yes_type) + ); +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +}; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +template +struct is_function_impl : public false_type +{}; +#endif + +#endif + +} // namespace detail + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,__is_function(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,::boost::detail::is_function_impl::value) +#endif +} // namespace boost + +#include + +#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_integral.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_integral.hpp new file mode 100644 index 00000000..e1ee3a73 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_integral.hpp @@ -0,0 +1,78 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_INTEGRAL_HPP_INCLUDED +#define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3) +// as an extention we include long long, as this is likely to be added to the +// standard at a later date +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,__is_integral(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,false) + +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned char,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned short,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned int,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned long,true) + +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed char,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed short,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed int,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed long,true) + +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,bool,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char,true) + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +// If the following line fails to compile and you're using the Intel +// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php, +// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line. +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true) +#endif + +// Same set of integral types as in boost/type_traits/integral_promotion.hpp. +// Please, keep in sync. -- Alexander Nasonov +#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \ + || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \ + || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300)) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int8,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int8,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int16,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int16,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int32,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int32,true) +#ifdef __BORLANDC__ +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true) +#endif +#endif + +# if defined(BOOST_HAS_LONG_LONG) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::ulong_long_type,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::long_long_type,true) +#elif defined(BOOST_HAS_MS_INT64) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true) +BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true) +#endif + +#endif // non-CodeGear implementation + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_function_pointer.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_function_pointer.hpp new file mode 100644 index 00000000..08824c8d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_function_pointer.hpp @@ -0,0 +1,136 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED +#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED + +#include +#include + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) + // + // Note: we use the "workaround" version for MSVC because it works for + // __stdcall etc function types, where as the partial specialisation + // version does not do so. + // +# include +# include +#else +# include +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,__is_member_function_pointer( T )) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_member_function_pointer + , T + , ::boost::type_traits::is_mem_fun_pointer_impl::type>::value + ) + +#else + +namespace detail { + +#ifndef __BORLANDC__ + +template +struct is_mem_fun_pointer_select + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_mem_fun_pointer_select +{ + template struct result_ + { +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + static T* make_t; + typedef result_ self_type; + + BOOST_STATIC_CONSTANT( + bool, value = ( + 1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t)) + )); +#if BOOST_WORKAROUND(_MSC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif + }; +}; + +template +struct is_member_function_pointer_impl + : is_mem_fun_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct is_member_function_pointer_impl : public false_type{}; +#endif + +#else // Borland C++ + +template +struct is_member_function_pointer_impl +{ + static T* m_t; + BOOST_STATIC_CONSTANT( + bool, value = + (1 == sizeof(type_traits::is_mem_fun_pointer_tester(m_t))) ); +}; + +template +struct is_member_function_pointer_impl +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +#endif + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_member_function_pointer_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_pointer.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_pointer.hpp new file mode 100644 index 00000000..ac679566 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_member_pointer.hpp @@ -0,0 +1,116 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED +#define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED + +#include +#include + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) +# include +#else +# include +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,__is_member_pointer(T)) +#elif BOOST_WORKAROUND(__BORLANDC__, < 0x600) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true) + +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true) + +#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true) +#endif + +#else // no partial template specialization + +namespace detail { + +template +::boost::type_traits::yes_type BOOST_TT_DECL is_member_pointer_tester(R T::*const volatile*); +::boost::type_traits::no_type BOOST_TT_DECL is_member_pointer_tester(...); + +template +struct is_member_pointer_select + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_member_pointer_select +{ + template struct result_ + { + static T* make_t(); + BOOST_STATIC_CONSTANT( + bool, value = + (::boost::type_traits::ice_or< + (1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(make_t()))), + (1 == sizeof(is_member_pointer_tester(make_t()))) + >::value) ); + }; +}; + +template +struct is_member_pointer_impl + : is_member_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::detail::is_member_pointer_impl::value) + +#endif // __BORLANDC__ + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pod.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pod.hpp new file mode 100644 index 00000000..50b4a912 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pod.hpp @@ -0,0 +1,135 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_POD_HPP_INCLUDED +#define BOOST_TT_IS_POD_HPP_INCLUDED + +#include +#include +#include +#include +#include + +#include + +// should be the last #include +#include + +namespace boost { + +// forward declaration, needed by 'is_pod_array_helper' template below +template< typename T > struct is_POD; + +namespace detail { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template struct is_pod_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = + (::boost::type_traits::ice_or< + ::boost::is_scalar::value, + ::boost::is_void::value, + BOOST_IS_POD(T) + >::value)); +}; + +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +template +struct is_pod_impl + : is_pod_impl +{ +}; +#endif + +#else + +template +struct is_pod_helper +{ + template struct result_ + { + BOOST_STATIC_CONSTANT( + bool, value = + (::boost::type_traits::ice_or< + ::boost::is_scalar::value, + ::boost::is_void::value, + BOOST_IS_POD(T) + >::value)); + }; +}; + +template +struct bool_to_yes_no_type +{ + typedef ::boost::type_traits::no_type type; +}; + +template <> +struct bool_to_yes_no_type +{ + typedef ::boost::type_traits::yes_type type; +}; + +template +struct is_pod_array_helper +{ + enum { is_pod = ::boost::is_POD::value }; // MSVC workaround + typedef typename bool_to_yes_no_type::type type; + type instance() const; +}; + +template +is_pod_array_helper is_POD_array(T*); + +template <> +struct is_pod_helper +{ + template struct result_ + { + static T& help(); + BOOST_STATIC_CONSTANT(bool, value = + sizeof(is_POD_array(help()).instance()) == sizeof(::boost::type_traits::yes_type) + ); + }; +}; + + +template struct is_pod_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = ( + ::boost::detail::is_pod_helper< + ::boost::is_array::value + >::template result_::value + ) + ); +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// the following help compilers without partial specialization support: +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void,true) + +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const volatile,true) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_POD,T,::boost::detail::is_pod_impl::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_POD_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pointer.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pointer.hpp new file mode 100644 index 00000000..570e9fff --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_pointer.hpp @@ -0,0 +1,162 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED +#define BOOST_TT_IS_POINTER_HPP_INCLUDED + +#include +#include +#include +#include +#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +namespace detail { + +template< typename T > struct is_pointer_helper +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +# define TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(helper,sp,result) \ +template< typename T > struct helper \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = result); \ +}; \ +/**/ + +TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true) + +# undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC + +template< typename T > +struct is_pointer_impl +{ +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::detail::is_pointer_helper::value + , ::boost::type_traits::ice_not< + ::boost::is_member_pointer::value + >::value + >::value) + ); +#else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::detail::is_pointer_helper::type>::value + , ::boost::type_traits::ice_not< + ::boost::is_member_pointer::value + >::value + >::value) + ); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl::value) + +#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T&,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false) +#endif + +#else // no partial template specialization + +namespace detail { + +struct pointer_helper +{ + pointer_helper(const volatile void*); +}; + +yes_type BOOST_TT_DECL is_pointer_tester(pointer_helper); +no_type BOOST_TT_DECL is_pointer_tester(...); + +template +struct is_pointer_select + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_pointer_select +{ + template struct result_ + { + static T& make_t(); + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + (1 == sizeof(is_pointer_tester(make_t()))), + (1 == sizeof(type_traits::is_function_ptr_tester(make_t()))) + >::value)); + }; +}; + +template +struct is_pointer_impl + : is_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_polymorphic.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_polymorphic.hpp new file mode 100644 index 00000000..277f40e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_polymorphic.hpp @@ -0,0 +1,114 @@ +// (C) Copyright John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_POLYMORPHIC_HPP +#define BOOST_TT_IS_POLYMORPHIC_HPP + +#include +#ifndef BOOST_IS_POLYMORPHIC +#include +#include +#endif +// should be the last #include +#include +#include + +namespace boost{ + +#ifndef BOOST_IS_POLYMORPHIC + +namespace detail{ + +template +struct is_polymorphic_imp1 +{ +# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always. + typedef char d1, (&d2)[2]; +# else + typedef typename remove_cv::type ncvT; + struct d1 : public ncvT + { + d1(); +# if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC + ~d1()throw(); +# endif + char padding[256]; + private: + // keep some picky compilers happy: + d1(const d1&); + d1& operator=(const d1&); + }; + struct d2 : public ncvT + { + d2(); + virtual ~d2()throw(); +# if !defined(BOOST_MSVC) && !defined(__ICL) + // for some reason this messes up VC++ when T has virtual bases, + // probably likewise for compilers that use the same ABI: + struct unique{}; + virtual void unique_name_to_boost5487629(unique*); +# endif + char padding[256]; + private: + // keep some picky compilers happy: + d2(const d2&); + d2& operator=(const d2&); + }; +# endif + BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1))); +}; + +template +struct is_polymorphic_imp2 +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template +struct is_polymorphic_selector +{ + template + struct rebind + { + typedef is_polymorphic_imp2 type; + }; +}; + +template <> +struct is_polymorphic_selector +{ + template + struct rebind + { + typedef is_polymorphic_imp1 type; + }; +}; + +template +struct is_polymorphic_imp +{ + typedef is_polymorphic_selector< ::boost::is_class::value> selector; + typedef typename selector::template rebind binder; + typedef typename binder::type imp_type; + BOOST_STATIC_CONSTANT(bool, value = imp_type::value); +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,::boost::detail::is_polymorphic_imp::value) + +#else // BOOST_IS_POLYMORPHIC + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,BOOST_IS_POLYMORPHIC(T)) + +#endif + +} // namespace boost + +#include + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_reference.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_reference.hpp new file mode 100644 index 00000000..b24063c9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_reference.hpp @@ -0,0 +1,118 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED +#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED + +#include + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,__is_reference(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T&,true) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& const,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& const volatile,true) +#endif + +#if defined(__GNUC__) && (__GNUC__ < 3) +// these allow us to work around illegally cv-qualified reference +// types. +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T const ,::boost::is_reference::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T volatile ,::boost::is_reference::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T const volatile ,::boost::is_reference::value) +// However, the above specializations confuse gcc 2.96 unless we also +// supply these specializations for array types +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,const T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,volatile T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,const volatile T[N],false) +#endif + +#else + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4181 4097) +#endif + +namespace detail { + +using ::boost::type_traits::yes_type; +using ::boost::type_traits::no_type; +using ::boost::type_traits::wrap; + +template T&(* is_reference_helper1(wrap) )(wrap); +char is_reference_helper1(...); + +template no_type is_reference_helper2(T&(*)(wrap)); +yes_type is_reference_helper2(...); + +template +struct is_reference_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = sizeof( + ::boost::detail::is_reference_helper2( + ::boost::detail::is_reference_helper1(::boost::type_traits::wrap()))) == 1 + ); +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl::value) + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_same.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_same.hpp new file mode 100644 index 00000000..8125ac5f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_same.hpp @@ -0,0 +1,103 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_SAME_HPP_INCLUDED +#define BOOST_TT_IS_SAME_HPP_INCLUDED + +#include +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#include +#include +#endif +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true) +#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) +// without this, Borland's compiler gives the wrong answer for +// references to arrays: +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true) +#endif + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail { + +#ifdef BOOST_MSVC +// the following VC6 specific implementation is *NOT* legal +// C++, but has the advantage that it works for incomplete +// types. + +template< typename T1 > +struct is_same_part_1 +{ + template struct part_2 { enum { value = false }; }; + template<> struct part_2 { enum { value = true }; }; +}; + +template< typename T1, typename T2 > +struct is_same_impl +{ + enum { value = detail::is_same_part_1::template part_2::value }; +}; + +#else // generic "no-partial-specialization" version + +template +::boost::type_traits::yes_type +BOOST_TT_DECL is_same_tester(T*, T*); + +::boost::type_traits::no_type +BOOST_TT_DECL is_same_tester(...); + +template +struct is_same_impl +{ + static T t; + static U u; + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + (sizeof(type_traits::yes_type) == sizeof(detail::is_same_tester(&t,&u))), + (::boost::is_reference::value == ::boost::is_reference::value), + (sizeof(T) == sizeof(U)) + >::value)); +}; + +#endif // BOOST_MSVC + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,(::boost::detail::is_same_impl::value)) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_SAME_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_scalar.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_scalar.hpp new file mode 100644 index 00000000..5c4a549f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_scalar.hpp @@ -0,0 +1,55 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_SCALAR_HPP_INCLUDED +#define BOOST_TT_IS_SCALAR_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct is_scalar_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_arithmetic::value, + ::boost::is_enum::value, + ::boost::is_pointer::value, + ::boost::is_member_pointer::value + >::value)); +}; + +// these specializations are only really needed for compilers +// without partial specialization support: +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scalar,T,::boost::detail::is_scalar_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_signed.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_signed.hpp new file mode 100644 index 00000000..bc860a4a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_signed.hpp @@ -0,0 +1,127 @@ + +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_SIGNED_HPP_INCLUDED +#define BOOST_TT_IS_SIGNED_HPP_INCLUDED + +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail{ + +#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) + +template +struct is_signed_helper +{ + typedef typename remove_cv::type no_cv_t; + BOOST_STATIC_CONSTANT(bool, value = (static_cast(-1) < 0)); +}; + +template +struct is_signed_select_helper +{ + template + struct rebind + { + typedef is_signed_helper type; + }; +}; + +template <> +struct is_signed_select_helper +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_signed_imp +{ + typedef is_signed_select_helper< + ::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_enum::value>::value + > selector; + typedef typename selector::template rebind binder; + typedef typename binder::type type; +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + BOOST_STATIC_CONSTANT(bool, value = is_signed_imp::type::value); +#else + BOOST_STATIC_CONSTANT(bool, value = type::value); +#endif +}; + +#else + +template struct is_signed_imp : public false_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#ifdef BOOST_HAS_LONG_LONG +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif +#if defined(CHAR_MIN) && (CHAR_MIN != 0) +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif +#if defined(WCHAR_MIN) && (WCHAR_MIN != 0) +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif + +#endif + +} + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,__is_signed(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,::boost::detail::is_signed_imp::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_union.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_union.hpp new file mode 100644 index 00000000..e146c94e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_union.hpp @@ -0,0 +1,49 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_UNION_HPP_INCLUDED +#define BOOST_TT_IS_UNION_HPP_INCLUDED + +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { +#ifndef __GNUC__ +template struct is_union_impl +{ + typedef typename remove_cv::type cvt; + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(cvt)); +}; +#else +// +// using remove_cv here generates a whole load of needless +// warnings with gcc, since it doesn't do any good with gcc +// in any case (at least at present), just remove it: +// +template struct is_union_impl +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(T)); +}; +#endif +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_union,T,::boost::detail::is_union_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_UNION_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_unsigned.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_unsigned.hpp new file mode 100644 index 00000000..90dc2663 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_unsigned.hpp @@ -0,0 +1,123 @@ + +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED +#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED + +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail{ + +#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) + +template +struct is_ununsigned_helper +{ + typedef typename remove_cv::type no_cv_t; + BOOST_STATIC_CONSTANT(bool, value = (static_cast(-1) > 0)); +}; + +template +struct is_ununsigned_select_helper +{ + template + struct rebind + { + typedef is_ununsigned_helper type; + }; +}; + +template <> +struct is_ununsigned_select_helper +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_unsigned_imp +{ + typedef is_ununsigned_select_helper< + ::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_enum::value>::value + > selector; + typedef typename selector::template rebind binder; + typedef typename binder::type type; + BOOST_STATIC_CONSTANT(bool, value = type::value); +}; + +#else + +template struct is_unsigned_imp : public false_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#ifdef BOOST_HAS_LONG_LONG +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif +#if defined(CHAR_MIN) && (CHAR_MIN == 0) +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif +#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif + +#endif + +} + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,__is_unsigned(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_void.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_void.hpp new file mode 100644 index 00000000..711e5f6e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_void.hpp @@ -0,0 +1,38 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_IS_VOID_HPP_INCLUDED +#define BOOST_TT_IS_VOID_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +//* is a type T void - is_void +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,__is_void(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void,true) + +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const,true) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const volatile,true) +#endif + +#endif // non-CodeGear implementation + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_VOID_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_volatile.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_volatile.hpp new file mode 100644 index 00000000..f4bed417 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/is_volatile.hpp @@ -0,0 +1,133 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED +#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED + +#include +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +# include +# endif +#else +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +//* is a type T declared volatile - is_volatile +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) + BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::cv_traits_imp::type*>::is_volatile) +#else + BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::cv_traits_imp::is_volatile) +#endif +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false) +#endif + +#else + +namespace detail { + +using ::boost::type_traits::yes_type; +using ::boost::type_traits::no_type; + +yes_type is_volatile_tester(void const volatile*); +no_type is_volatile_tester(void const*); + +template +struct is_volatile_helper + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T* t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(detail::yes_type) == sizeof(detail::is_volatile_tester(t)) + )); + }; +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(detail::yes_type) == sizeof(detail::is_volatile_tester(&t)) + )); + }; +}; + +template +struct is_volatile_impl + : is_volatile_helper< + is_reference::value + , is_array::value + >::template result_ +{ +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const volatile,true) +#endif + +} // namespace detail + +//* is a type T declared volatile - is_volatile +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/make_unsigned.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/make_unsigned.hpp new file mode 100644 index 00000000..4ba18e4d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/make_unsigned.hpp @@ -0,0 +1,137 @@ + +// (C) Copyright John Maddock 2007. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED +#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct make_unsigned_imp +{ + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_or< ::boost::is_integral::value, ::boost::is_enum::value>::value)); +#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300) + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_not< ::boost::is_same< + typename remove_cv::type, bool>::value>::value)); +#endif + + typedef typename remove_cv::type t_no_cv; + typedef typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_unsigned::value, + ::boost::is_integral::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value >::value), + T, + typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_integral::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value> + ::value), + typename mpl::if_< + is_same, + unsigned char, + typename mpl::if_< + is_same, + unsigned short, + typename mpl::if_< + is_same, + unsigned int, + typename mpl::if_< + is_same, + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type, + // Not a regular integer type: + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned char), + unsigned char, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned short), + unsigned short, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned int), + unsigned int, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned long), + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type + >::type + >::type base_integer_type; + + // Add back any const qualifier: + typedef typename mpl::if_< + is_const, + typename add_const::type, + base_integer_type + >::type const_base_integer_type; + + // Add back any volatile qualifier: + typedef typename mpl::if_< + is_volatile, + typename add_volatile::type, + const_base_integer_type + >::type type; +}; + + +} // namespace detail + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(make_unsigned,T,typename boost::detail::make_unsigned_imp::type) + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_bounds.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_bounds.hpp new file mode 100644 index 00000000..5050a255 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_bounds.hpp @@ -0,0 +1,43 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827 +#define BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827 + +#include +#include + +namespace boost { + namespace detail { + template + struct remove_bounds_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_bounds_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U[]); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_bounds { + typedef typename detail::remove_bounds_impl_typeof< + boost::is_array::value + >::template inner >::type type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_bounds,T) + }; +} //namespace boost + +#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827 + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_const.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_const.hpp new file mode 100644 index 00000000..69c79eed --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_const.hpp @@ -0,0 +1,143 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828 +#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828 + +#include +#include +#include +#include +#include + +namespace boost { + namespace detail { + template + struct remove_const_impl_typeof { + template + struct inner { + typedef T type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Const + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //CV + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Const Pointer + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //CV Pointer + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Const Array + struct remove_const_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + template<> //CV Array + struct remove_const_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + } //namespace detail + + template + struct remove_const { + typedef detail::remove_const_impl_typeof< + boost::is_pointer::value, + boost::is_array::value, + boost::is_const::value, + boost::is_volatile::value + > remove_const_type; + typedef typename + remove_const_type::template inner< + typename remove_const_type::template transform_type::type, + remove_const + >::type + type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_const,T) + }; +}//namespace boost + +#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_cv.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_cv.hpp new file mode 100644 index 00000000..da327d51 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_cv.hpp @@ -0,0 +1,190 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901 +#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901 + +#include +#include +#include +#include +#include + +namespace boost { + namespace detail { + template + struct remove_cv_impl_typeof { + template + struct inner { + typedef T type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Volatile + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Const + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //CV + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Volatile Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Const Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //CV Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Volatile Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Const Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + template<> //CV Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + } //namespace detail + + template + struct remove_cv { + typedef detail::remove_cv_impl_typeof< + boost::is_pointer::value, + boost::is_array::value, + boost::is_const::value, + boost::is_volatile::value + > remove_cv_type; + typedef typename + remove_cv_type::template inner< + typename remove_cv_type::template transform_type::type, + remove_cv + >::type + type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_cv,T) + }; +}//namespace boost + +#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_pointer.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_pointer.hpp new file mode 100644 index 00000000..f228f5ed --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_pointer.hpp @@ -0,0 +1,42 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827 +#define BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827 + +#include +#include + +namespace boost { + namespace detail { + template + struct remove_pointer_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_pointer_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U*); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_pointer { + typedef typename detail::remove_pointer_impl_typeof< + boost::is_pointer::value + >::template inner >::type type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_pointer,T) + }; +} //namespace boost + +#endif //BOOST_TYPE_TRAITS_REMOVE_POINTER_HOLT_2004_0827 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_reference.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_reference.hpp new file mode 100644 index 00000000..87711c7f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/remove_reference.hpp @@ -0,0 +1,42 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827 +#define BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827 + +#include +#include + +namespace boost { + namespace detail { + template + struct remove_reference_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_reference_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_reference { + typedef typename detail::remove_reference_impl_typeof< + boost::is_reference::value + >::template inner >::type type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_reference,T) + }; +} //namespace boost + +#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827 diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/typeof.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/typeof.hpp new file mode 100644 index 00000000..75846e39 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/msvc/typeof.hpp @@ -0,0 +1,50 @@ +// Copyright (C) 2004 Peder Holt +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_TYPETRAITS_MSVC_TYPEOF_HPP +#define BOOST_TYPETRAITS_MSVC_TYPEOF_HPP + +#include +#include + +namespace boost { namespace detail { +# if BOOST_WORKAROUND(BOOST_MSVC,==1300) + template + struct msvc_extract_type + { + template + struct id2type_impl; + + typedef id2type_impl id2type; + }; + + template + struct msvc_register_type : msvc_extract_type + { + template<> + struct id2type_impl //VC7.0 specific bugfeature + { + typedef T type; + }; + }; +# else + template + struct msvc_extract_type + { + struct id2type; + }; + + template + struct msvc_register_type : msvc_extract_type + { + typedef msvc_extract_type base_type; + struct base_type::id2type // This uses nice VC6.5 and VC7.1 bugfeature + { + typedef T type; + }; + }; +# endif +}} + +#endif //BOOST_TYPETRAITS_MSVC_TYPEOF_IMPL_HPP diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_bounds.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_bounds.hpp new file mode 100644 index 00000000..726b4c6e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_bounds.hpp @@ -0,0 +1,48 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED +#define BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED + +#include +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300) + +namespace boost { + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_bounds,T,T) + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T[N],T type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const[N],T const type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T volatile[N],T volatile type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const volatile[N],T const volatile type) +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T[],T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const[],T const) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T volatile[],T volatile) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const volatile[],T const volatile) +#endif +#endif + +} // namespace boost + +#endif + +#include + +#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_const.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_const.hpp new file mode 100644 index 00000000..94bd1ec9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_const.hpp @@ -0,0 +1,78 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED +#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED + +#include +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail { + +template +struct remove_const_helper +{ + typedef T type; +}; + +template +struct remove_const_helper +{ + typedef T volatile type; +}; + + +template +struct remove_const_impl +{ + typedef typename remove_const_helper< + typename cv_traits_imp::unqualified_type + , ::boost::is_volatile::value + >::type type; +}; + +} // namespace detail + +// * convert a type T to non-const type - remove_const + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl::type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_const,T&,T&) +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const[N],T type[N]) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const volatile[N],T volatile type[N]) +#endif + +#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300) + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_cv.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_cv.hpp new file mode 100644 index 00000000..edfc9870 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_cv.hpp @@ -0,0 +1,61 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED +#define BOOST_TT_REMOVE_CV_HPP_INCLUDED + +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// convert a type T to a non-cv-qualified type - remove_cv +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::cv_traits_imp::unqualified_type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_cv,T&,T&) +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const[N],T type[N]) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T volatile[N],T type[N]) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const volatile[N],T type[N]) +#endif + +#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300) + +namespace detail { +template +struct remove_cv_impl +{ + typedef typename remove_volatile_impl< + typename remove_const_impl::type + >::type type; +}; +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::remove_cv_impl::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_pointer.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_pointer.hpp new file mode 100644 index 00000000..639a201c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_pointer.hpp @@ -0,0 +1,43 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED +#define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED + +#include +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* volatile,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const volatile,T) + +#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300) + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_impl::type) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_reference.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_reference.hpp new file mode 100644 index 00000000..cdbcb081 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/remove_reference.hpp @@ -0,0 +1,50 @@ + +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED +#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED + +#include +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T) +#endif + +#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300) + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_reference_impl::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/type_with_alignment.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/type_with_alignment.hpp new file mode 100644 index 00000000..7a3c23e4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/type_traits/type_with_alignment.hpp @@ -0,0 +1,393 @@ +// (C) Copyright John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED +#define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +#include + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4121) // alignment is sensitive to packing +#endif + +namespace boost { + +#ifndef __BORLANDC__ + +namespace detail { + +class alignment_dummy; +typedef void (*function_ptr)(); +typedef int (alignment_dummy::*member_ptr); +typedef int (alignment_dummy::*member_function_ptr)(); + +#ifdef BOOST_HAS_LONG_LONG +#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \ + 12, ( \ + char, short, int, long, ::boost::long_long_type, float, double, long double \ + , void*, function_ptr, member_ptr, member_function_ptr)) +#else +#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \ + 11, ( \ + char, short, int, long, float, double, long double \ + , void*, function_ptr, member_ptr, member_function_ptr)) +#endif + +#define BOOST_TT_HAS_ONE_T(D,Data,T) boost::detail::has_one_T< T > + +#define BOOST_TT_ALIGNMENT_STRUCT_TYPES \ + BOOST_PP_LIST_TRANSFORM(BOOST_TT_HAS_ONE_T, \ + X, \ + BOOST_TT_ALIGNMENT_BASE_TYPES) + +#define BOOST_TT_ALIGNMENT_TYPES \ + BOOST_PP_LIST_APPEND(BOOST_TT_ALIGNMENT_BASE_TYPES, \ + BOOST_TT_ALIGNMENT_STRUCT_TYPES) + +// +// lower_alignment_helper -- +// +// This template gets instantiated a lot, so use partial +// specialization when available to reduce the compiler burden. +// +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct lower_alignment_helper_impl +{ + template + struct apply + { + typedef char type; + enum { value = true }; + }; +}; + +template <> +struct lower_alignment_helper_impl +{ + template + struct apply + : mpl::if_c<(alignment_of::value == target), TestType, char> + { + enum { value = (alignment_of::value == target) }; + }; +}; + +template +struct lower_alignment_helper + : lower_alignment_helper_impl::template apply +{ +}; +#else +template +struct lower_alignment_helper +{ + typedef char type; + enum { value = true }; +}; + +template +struct lower_alignment_helper +{ + enum { value = (alignment_of::value == target) }; + typedef typename mpl::if_c::type type; +}; +#endif + +#define BOOST_TT_CHOOSE_MIN_ALIGNMENT(R,P,I,T) \ + typename lower_alignment_helper< \ + BOOST_PP_CAT(found,I),target,T \ + >::type BOOST_PP_CAT(t,I); \ + enum { \ + BOOST_PP_CAT(found,BOOST_PP_INC(I)) \ + = lower_alignment_helper::value \ + }; + +#define BOOST_TT_CHOOSE_T(R,P,I,T) T BOOST_PP_CAT(t,I); + +template +struct has_one_T +{ + T data; +}; + +template +union lower_alignment +{ + enum { found0 = false }; + + BOOST_PP_LIST_FOR_EACH_I( + BOOST_TT_CHOOSE_MIN_ALIGNMENT + , ignored + , BOOST_TT_ALIGNMENT_TYPES + ) +}; + +union max_align +{ + BOOST_PP_LIST_FOR_EACH_I( + BOOST_TT_CHOOSE_T + , ignored + , BOOST_TT_ALIGNMENT_TYPES + ) +}; + +#undef BOOST_TT_ALIGNMENT_BASE_TYPES +#undef BOOST_TT_HAS_ONE_T +#undef BOOST_TT_ALIGNMENT_STRUCT_TYPES +#undef BOOST_TT_ALIGNMENT_TYPES +#undef BOOST_TT_CHOOSE_MIN_ALIGNMENT +#undef BOOST_TT_CHOOSE_T + +template +struct is_aligned +{ + BOOST_STATIC_CONSTANT(bool, + value = (TAlign >= Align) & (TAlign % Align == 0) + ); +}; + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::max_align,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<1> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<2> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<4> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<8> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<10> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<16> ,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<32> ,true) +#endif + +} // namespace detail + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct is_pod< ::boost::detail::lower_alignment > +{ + BOOST_STATIC_CONSTANT(std::size_t, value = true); +}; +#endif + +// This alignment method originally due to Brian Parker, implemented by David +// Abrahams, and then ported here by Doug Gregor. +namespace detail{ + +template +class type_with_alignment_imp +{ + typedef ::boost::detail::lower_alignment t1; + typedef typename mpl::if_c< + ::boost::detail::is_aligned< ::boost::alignment_of::value,Align >::value + , t1 + , ::boost::detail::max_align + >::type align_t; + + BOOST_STATIC_CONSTANT(std::size_t, found = alignment_of::value); + + BOOST_STATIC_ASSERT(found >= Align); + BOOST_STATIC_ASSERT(found % Align == 0); + + public: + typedef align_t type; +}; + +} + +template +class type_with_alignment + : public ::boost::detail::type_with_alignment_imp +{ +}; + +#if defined(__GNUC__) +namespace align { +struct __attribute__((__aligned__(2))) a2 {}; +struct __attribute__((__aligned__(4))) a4 {}; +struct __attribute__((__aligned__(8))) a8 {}; +struct __attribute__((__aligned__(16))) a16 {}; +struct __attribute__((__aligned__(32))) a32 {}; +} + +template<> class type_with_alignment<1> { public: typedef char type; }; +template<> class type_with_alignment<2> { public: typedef align::a2 type; }; +template<> class type_with_alignment<4> { public: typedef align::a4 type; }; +template<> class type_with_alignment<8> { public: typedef align::a8 type; }; +template<> class type_with_alignment<16> { public: typedef align::a16 type; }; +template<> class type_with_alignment<32> { public: typedef align::a32 type; }; + +namespace detail { +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true) +} +#endif +#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && _MSC_VER >= 1300 +// +// MSVC supports types which have alignments greater than the normal +// maximum: these are used for example in the types __m64 and __m128 +// to provide types with alignment requirements which match the SSE +// registers. Therefore we extend type_with_alignment<> to support +// such types, however, we have to be careful to use a builtin type +// whenever possible otherwise we break previously working code: +// see http://article.gmane.org/gmane.comp.lib.boost.devel/173011 +// for an example and test case. Thus types like a8 below will +// be used *only* if the existing implementation can't provide a type +// with suitable alignment. This does mean however, that type_with_alignment<> +// may return a type which cannot be passed through a function call +// by value (and neither can any type containing such a type like +// Boost.Optional). However, this only happens when we have no choice +// in the matter because no other "ordinary" type is available. +// +namespace align { +struct __declspec(align(8)) a8 { + char m[8]; + typedef a8 type; +}; +struct __declspec(align(16)) a16 { + char m[16]; + typedef a16 type; +}; +struct __declspec(align(32)) a32 { + char m[32]; + typedef a32 type; +}; +struct __declspec(align(64)) a64 +{ + char m[64]; + typedef a64 type; +}; +struct __declspec(align(128)) a128 { + char m[128]; + typedef a128 type; +}; +} + +template<> class type_with_alignment<8> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 8, + align::a8, + detail::type_with_alignment_imp<8> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<16> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 16, + align::a16, + detail::type_with_alignment_imp<16> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<32> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 32, + align::a32, + detail::type_with_alignment_imp<32> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<64> { + typedef mpl::if_c< + ::boost::alignment_of::value < 64, + align::a64, + detail::type_with_alignment_imp<64> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<128> { + typedef mpl::if_c< + ::boost::alignment_of::value < 128, + align::a128, + detail::type_with_alignment_imp<128> >::type t1; +public: + typedef t1::type type; +}; + +namespace detail { +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true) +} +#endif + +#else + +// +// Borland specific version, we have this for two reasons: +// 1) The version above doesn't always compile (with the new test cases for example) +// 2) Because of Borlands #pragma option we can create types with alignments that are +// greater that the largest aligned builtin type. + +namespace align{ +#pragma option push -a16 +struct a2{ short s; }; +struct a4{ int s; }; +struct a8{ double s; }; +struct a16{ long double s; }; +#pragma option pop +} + +namespace detail { + +typedef ::boost::align::a16 max_align; + +//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true) +//#endif +} + +template struct type_with_alignment +{ + // We should never get to here, but if we do use the maximally + // aligned type: + // BOOST_STATIC_ASSERT(0); + typedef align::a16 type; +}; +template <> struct type_with_alignment<1>{ typedef char type; }; +template <> struct type_with_alignment<2>{ typedef align::a2 type; }; +template <> struct type_with_alignment<4>{ typedef align::a4 type; }; +template <> struct type_with_alignment<8>{ typedef align::a8 type; }; +template <> struct type_with_alignment<16>{ typedef align::a16 type; }; + +#endif + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#include + +#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED + + diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator.hpp new file mode 100644 index 00000000..fd9c6d5c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator.hpp @@ -0,0 +1,231 @@ + +// Copyright 2005 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED +#define BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +#if (defined(BOOST_NO_STD_ALLOCATOR) || defined(BOOST_DINKUMWARE_STDLIB)) \ + && !defined(__BORLANDC__) +# define BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES +#endif + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) +# include +#endif + +#include + +namespace boost { + namespace unordered_detail { + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) + template + struct rebind_wrap : ::boost::detail::allocator::rebind_to {}; +#else + template + struct rebind_wrap + { + typedef BOOST_DEDUCED_TYPENAME + Alloc::BOOST_NESTED_TEMPLATE rebind::other + type; + }; +#endif + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template + inline void reset(T& x) { x = T(); } +#else + template + inline void reset_impl(T& x, ...) { x = T(); } + template + inline void reset_impl(T*& x, int) { x = 0; } + template + inline void reset(T& x) { reset_impl(x); } +#endif + + // Work around for Microsoft's ETI bug. + + template struct allocator_value_type + { + typedef typename Allocator::value_type type; + }; + + template struct allocator_pointer + { + typedef typename Allocator::pointer type; + }; + + template struct allocator_const_pointer + { + typedef typename Allocator::const_pointer type; + }; + + template struct allocator_reference + { + typedef typename Allocator::reference type; + }; + + template struct allocator_const_reference + { + typedef typename Allocator::const_reference type; + }; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) + + template <> + struct allocator_value_type + { + typedef int type; + }; + + template <> + struct allocator_pointer + { + typedef int type; + }; + + template <> + struct allocator_const_pointer + { + typedef int type; + }; + + template <> + struct allocator_reference + { + typedef int type; + }; + + template <> + struct allocator_const_reference + { + typedef int type; + }; + +#endif + + template + struct allocator_constructor + { + typedef typename Allocator::value_type value_type; + typedef typename allocator_pointer::type pointer; + + Allocator& alloc_; + pointer ptr_; + bool constructed_; + + allocator_constructor(Allocator& a) + : alloc_(a), ptr_(), constructed_(false) + { +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + unordered_detail::reset(ptr_); +#endif + } + + ~allocator_constructor() { + if(ptr_) { + if(constructed_) alloc_.destroy(ptr_); + alloc_.deallocate(ptr_, 1); + } + } + + template + void construct(V const& v) { + BOOST_ASSERT(!ptr_ && !constructed_); + ptr_ = alloc_.allocate(1); + alloc_.construct(ptr_, value_type(v)); + constructed_ = true; + } + + void construct(value_type const& v) { + BOOST_ASSERT(!ptr_ && !constructed_); + ptr_ = alloc_.allocate(1); + alloc_.construct(ptr_, v); + constructed_ = true; + } + + pointer get() const + { + return ptr_; + } + + // no throw + pointer release() + { + pointer p = ptr_; + constructed_ = false; + reset(ptr_); + return p; + } + }; + + template + struct allocator_array_constructor + { + typedef typename allocator_pointer::type pointer; + + Allocator& alloc_; + pointer ptr_; + pointer constructed_; + std::size_t length_; + + allocator_array_constructor(Allocator& a) + : alloc_(a), ptr_(), constructed_(), length_(0) + { +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + unordered_detail::reset(constructed_); + unordered_detail::reset(ptr_); +#endif + } + + ~allocator_array_constructor() { + if (ptr_) { + for(pointer p = ptr_; p != constructed_; ++p) + alloc_.destroy(p); + + alloc_.deallocate(ptr_, length_); + } + } + + template + void construct(V const& v, std::size_t l) + { + BOOST_ASSERT(!ptr_); + length_ = l; + ptr_ = alloc_.allocate(length_); + pointer end = ptr_ + length_; + for(constructed_ = ptr_; constructed_ != end; ++constructed_) + alloc_.construct(constructed_, v); + } + + pointer get() const + { + return ptr_; + } + + pointer release() + { + pointer p(ptr_); + reset(ptr_); + return p; + } + private: + allocator_array_constructor(allocator_array_constructor const&); + allocator_array_constructor& operator=(allocator_array_constructor const&); + }; + } +} + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) +# undef BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator_helpers.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator_helpers.hpp new file mode 100644 index 00000000..132fcffe --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/allocator_helpers.hpp @@ -0,0 +1,237 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED +#define BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +#if (defined(BOOST_NO_STD_ALLOCATOR) || defined(BOOST_DINKUMWARE_STDLIB)) \ + && !defined(__BORLANDC__) +# define BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES +#endif + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) +# include +#endif + +#include + +namespace boost { + namespace unordered_detail { + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) + template + struct rebind_wrap : ::boost::detail::allocator::rebind_to {}; +#else + template + struct rebind_wrap + { + typedef BOOST_DEDUCED_TYPENAME + Alloc::BOOST_NESTED_TEMPLATE rebind::other + type; + }; +#endif + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template + inline void reset(T& x) { x = T(); } + + template + inline Ptr null_ptr() { return Ptr(); } +#else + template + inline void reset_impl(T& x, ...) { x = T(); } + template + inline void reset_impl(T*& x, int) { x = 0; } + template + inline void reset(T& x) { reset_impl(x); } + + template + inline Ptr null_ptr() { Ptr x; reset(x); return x; } +#endif + + // Work around for Microsoft's ETI bug. + + template struct allocator_value_type + { + typedef BOOST_DEDUCED_TYPENAME Allocator::value_type type; + }; + + template struct allocator_pointer + { + typedef BOOST_DEDUCED_TYPENAME Allocator::pointer type; + }; + + template struct allocator_const_pointer + { + typedef BOOST_DEDUCED_TYPENAME Allocator::const_pointer type; + }; + + template struct allocator_reference + { + typedef BOOST_DEDUCED_TYPENAME Allocator::reference type; + }; + + template struct allocator_const_reference + { + typedef BOOST_DEDUCED_TYPENAME Allocator::const_reference type; + }; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) + + template <> + struct allocator_value_type + { + typedef int type; + }; + + template <> + struct allocator_pointer + { + typedef int type; + }; + + template <> + struct allocator_const_pointer + { + typedef int type; + }; + + template <> + struct allocator_reference + { + typedef int type; + }; + + template <> + struct allocator_const_reference + { + typedef int type; + }; + +#endif + + template + struct allocator_constructor + { + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + typedef BOOST_DEDUCED_TYPENAME allocator_pointer::type pointer; + + Allocator& alloc_; + pointer ptr_; + bool constructed_; + + allocator_constructor(Allocator& a) + : alloc_(a), ptr_(), constructed_(false) + { +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + unordered_detail::reset(ptr_); +#endif + } + + ~allocator_constructor() { + if(ptr_) { + if(constructed_) alloc_.destroy(ptr_); + alloc_.deallocate(ptr_, 1); + } + } + + template + void construct(V const& v) { + BOOST_ASSERT(!ptr_ && !constructed_); + ptr_ = alloc_.allocate(1); + alloc_.construct(ptr_, value_type(v)); + constructed_ = true; + } + + void construct(value_type const& v) { + BOOST_ASSERT(!ptr_ && !constructed_); + ptr_ = alloc_.allocate(1); + alloc_.construct(ptr_, v); + constructed_ = true; + } + + pointer get() const + { + return ptr_; + } + + // no throw + pointer release() + { + pointer p = ptr_; + constructed_ = false; + unordered_detail::reset(ptr_); + return p; + } + }; + + template + struct allocator_array_constructor + { + typedef BOOST_DEDUCED_TYPENAME allocator_pointer::type pointer; + + Allocator& alloc_; + pointer ptr_; + pointer constructed_; + std::size_t length_; + + allocator_array_constructor(Allocator& a) + : alloc_(a), ptr_(), constructed_(), length_(0) + { +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + unordered_detail::reset(constructed_); + unordered_detail::reset(ptr_); +#endif + } + + ~allocator_array_constructor() { + if (ptr_) { + for(pointer p = ptr_; p != constructed_; ++p) + alloc_.destroy(p); + + alloc_.deallocate(ptr_, length_); + } + } + + template + void construct(V const& v, std::size_t l) + { + BOOST_ASSERT(!ptr_); + length_ = l; + ptr_ = alloc_.allocate(length_); + pointer end = ptr_ + static_cast(length_); + for(constructed_ = ptr_; constructed_ != end; ++constructed_) + alloc_.construct(constructed_, v); + } + + pointer get() const + { + return ptr_; + } + + pointer release() + { + pointer p(ptr_); + unordered_detail::reset(ptr_); + return p; + } + private: + allocator_array_constructor(allocator_array_constructor const&); + allocator_array_constructor& operator=(allocator_array_constructor const&); + }; + } +} + +#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES) +# undef BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/config.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/config.hpp new file mode 100644 index 00000000..2f0b293b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/config.hpp @@ -0,0 +1,30 @@ + +// Copyright 2008-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_UNORDERED_DETAIL_CONFIG_HEADER) +#define BOOST_UNORDERED_DETAIL_CONFIG_HEADER + +#include + +#if defined(BOOST_NO_SFINAE) +# define BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN +#elif defined(__GNUC__) && \ + (__GNUC__ < 3 || __GNUC__ == 3 && __GNUC_MINOR__ <= 3) +# define BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN +#elif BOOST_WORKAROUND(BOOST_INTEL, < 900) || \ + BOOST_WORKAROUND(__EDG_VERSION__, < 304) || \ + BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0593)) +# define BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN +#endif + +#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL) +# if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + // STLport doesn't have std::forward. +# else +# define BOOST_UNORDERED_STD_FORWARD +# endif +#endif + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table.hpp new file mode 100644 index 00000000..cd7ff494 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table.hpp @@ -0,0 +1,347 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2009 Daniel James +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNORDERED_DETAIL_HASH_TABLE_HPP_INCLUDED +#define BOOST_UNORDERED_DETAIL_HASH_TABLE_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include + +#if !defined(BOOST_UNORDERED_EMPLACE_LIMIT) +#define BOOST_UNORDERED_EMPLACE_LIMIT 10 +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if !(defined(BOOST_UNORDERED_STD_FORWARD)) + +#include +#include +#include + +#define BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + BOOST_PP_ENUM_PARAMS_Z(z, n, typename Arg) +#define BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, Arg, const& arg) +#define BOOST_UNORDERED_CALL_PARAMS(z, n) \ + BOOST_PP_ENUM_PARAMS_Z(z, n, arg) + +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:4267) // conversion from 'size_t' to 'unsigned int', + // possible loss of data. +#endif +#endif + +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0582) +#define BOOST_UNORDERED_BORLAND_BOOL(x) (bool)(x) +#else +#define BOOST_UNORDERED_BORLAND_BOOL(x) x +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#define BOOST_UNORDERED_MSVC_RESET_PTR(x) unordered_detail::reset(x) +#else +#define BOOST_UNORDERED_MSVC_RESET_PTR(x) +#endif + +namespace boost { + namespace unordered_detail { + template struct type_wrapper {}; + + static const std::size_t default_initial_bucket_count = 11; + static const float minimum_max_load_factor = 1e-3f; + + inline std::size_t double_to_size_t(double f) + { + return f >= static_cast((std::numeric_limits::max)()) ? + (std::numeric_limits::max)() : + static_cast(f); + } + + // prime number list, accessor + + template struct prime_list_template + { + static std::size_t const value[]; + static std::ptrdiff_t const length; + }; + +#define BOOST_UNORDERED_PRIMES \ + (5ul)(11ul)(17ul)(29ul)(37ul)(53ul)(67ul)(79ul) \ + (97ul)(131ul)(193ul)(257ul)(389ul)(521ul)(769ul) \ + (1031ul)(1543ul)(2053ul)(3079ul)(6151ul)(12289ul)(24593ul) \ + (49157ul)(98317ul)(196613ul)(393241ul)(786433ul) \ + (1572869ul)(3145739ul)(6291469ul)(12582917ul)(25165843ul) \ + (50331653ul)(100663319ul)(201326611ul)(402653189ul)(805306457ul) \ + (1610612741ul)(3221225473ul)(4294967291ul) + + template + std::size_t const prime_list_template::value[] = { + BOOST_PP_SEQ_ENUM(BOOST_UNORDERED_PRIMES) + }; + + template + std::ptrdiff_t const prime_list_template::length + = BOOST_PP_SEQ_SIZE(BOOST_UNORDERED_PRIMES); + +#undef BOOST_UNORDERED_PRIMES + + typedef prime_list_template prime_list; + + // no throw + inline std::size_t next_prime(std::size_t n) { + std::size_t const* const prime_list_begin = prime_list::value; + std::size_t const* const prime_list_end = prime_list_begin + + prime_list::length; + std::size_t const* bound = + std::lower_bound(prime_list_begin, prime_list_end, n); + if(bound == prime_list_end) + bound--; + return *bound; + } + + // no throw + inline std::size_t prev_prime(std::size_t n) { + std::size_t const* const prime_list_begin = prime_list::value; + std::size_t const* const prime_list_end = prime_list_begin + + prime_list::length; + std::size_t const* bound = + std::upper_bound(prime_list_begin,prime_list_end, n); + if(bound != prime_list_begin) + bound--; + return *bound; + } + + // Controls how many buckets are allocated and which buckets hash + // values map to. Does not contain the buckets themselves, or ever + // deal with them directly. + + struct bucket_manager { + std::size_t bucket_count_; + + bucket_manager() + : bucket_count_(0) {} + + explicit bucket_manager(std::size_t n) + : bucket_count_(next_prime(n)) {} + + std::size_t bucket_count() const { + return bucket_count_; + } + + std::size_t bucket_from_hash(std::size_t hashed) const { + return hashed % bucket_count_; + } + + std::size_t max_bucket_count(std::size_t max_size) const { + return prev_prime(max_size); + } + }; + + // pair_cast - used to convert between pair types. + + template + inline std::pair pair_cast(std::pair const& x) + { + return std::pair(Dst1(x.first), Dst2(x.second)); + } + +#if !defined(BOOST_NO_STD_DISTANCE) + using ::std::distance; +#else + template + inline std::size_t distance(ForwardIterator i, ForwardIterator j) { + std::size_t x; + std::distance(i, j, x); + return x; + } +#endif + + struct move_tag {}; + + // Both hasher and key_equal's copy/assign can throw so double + // buffering is used to copy them. + + template + struct buffered_functions + { + typedef Hash hasher; + typedef Pred key_equal; + + class functions + { + std::pair functions_; + + public: + + functions(hasher const& h, key_equal const& k) + : functions_(h, k) {} + + hasher const& hash_function() const + { + return functions_.first; + } + + key_equal const& key_eq() const + { + return functions_.second; + } + }; + + typedef functions buffered_functions::*functions_ptr; + + buffered_functions(hasher const& h, key_equal const& k) + : func1_(h, k), func2_(h, k), func_(&buffered_functions::func1_) {} + + // This copies the given function objects into the currently unused + // function objects and returns a pointer, that func_ can later be + // set to, to commit the change. + // + // Strong exception safety (since only usued function objects are + // changed). + functions_ptr buffer(buffered_functions const& x) { + functions_ptr ptr = func_ == &buffered_functions::func1_ + ? &buffered_functions::func2_ : &buffered_functions::func1_; + this->*ptr = x.current(); + return ptr; + } + + void set(functions_ptr ptr) { + BOOST_ASSERT(ptr != func_); + func_ = ptr; + } + + functions const& current() const { + return this->*func_; + } + + private: + functions func1_; + functions func2_; + functions_ptr func_; // The currently active functions. + }; + +#if defined(BOOST_MSVC) +# define BOOST_UNORDERED_DESTRUCT(x, type) (x)->~type(); +#else +# define BOOST_UNORDERED_DESTRUCT(x, type) boost::unordered_detail::destroy(x) + template + void destroy(T* x) { + x->~T(); + } +#endif + } +} + +#define BOOST_UNORDERED_EQUIVALENT_KEYS 1 +#include +#undef BOOST_UNORDERED_EQUIVALENT_KEYS + +#define BOOST_UNORDERED_EQUIVALENT_KEYS 0 +#include +#undef BOOST_UNORDERED_EQUIVALENT_KEYS + +namespace boost { + namespace unordered_detail { + class iterator_access + { + public: + template + static BOOST_DEDUCED_TYPENAME Iterator::base const& get(Iterator const& it) { + return it.base_; + } + }; + + template + class hash_types_unique_keys + { + public: + typedef BOOST_DEDUCED_TYPENAME + boost::unordered_detail::rebind_wrap::type + value_allocator; + + typedef hash_table_unique_keys hash_table; + typedef hash_table_data_unique_keys data; + typedef BOOST_DEDUCED_TYPENAME data::iterator_base iterator_base; + + typedef hash_const_local_iterator_unique_keys const_local_iterator; + typedef hash_local_iterator_unique_keys local_iterator; + typedef hash_const_iterator_unique_keys const_iterator; + typedef hash_iterator_unique_keys iterator; + + typedef BOOST_DEDUCED_TYPENAME data::size_type size_type; + typedef std::ptrdiff_t difference_type; + }; + + template + class hash_types_equivalent_keys + { + public: + typedef BOOST_DEDUCED_TYPENAME + boost::unordered_detail::rebind_wrap::type + value_allocator; + + typedef hash_table_equivalent_keys hash_table; + typedef hash_table_data_equivalent_keys data; + typedef BOOST_DEDUCED_TYPENAME data::iterator_base iterator_base; + + typedef hash_const_local_iterator_equivalent_keys const_local_iterator; + typedef hash_local_iterator_equivalent_keys local_iterator; + typedef hash_const_iterator_equivalent_keys const_iterator; + typedef hash_iterator_equivalent_keys iterator; + + typedef BOOST_DEDUCED_TYPENAME data::size_type size_type; + typedef std::ptrdiff_t difference_type; + }; + } // namespace boost::unordered_detail +} // namespace boost + +#undef BOOST_UNORDERED_BORLAND_BOOL +#undef BOOST_UNORDERED_MSVC_RESET_PTR + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_UNORDERED_DETAIL_HASH_TABLE_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table_impl.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table_impl.hpp new file mode 100644 index 00000000..6bfe6580 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/hash_table_impl.hpp @@ -0,0 +1,2527 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2009 Daniel James +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if BOOST_UNORDERED_EQUIVALENT_KEYS +#define BOOST_UNORDERED_TABLE hash_table_equivalent_keys +#define BOOST_UNORDERED_TABLE_DATA hash_table_data_equivalent_keys +#define BOOST_UNORDERED_ITERATOR hash_iterator_equivalent_keys +#define BOOST_UNORDERED_CONST_ITERATOR hash_const_iterator_equivalent_keys +#define BOOST_UNORDERED_LOCAL_ITERATOR hash_local_iterator_equivalent_keys +#define BOOST_UNORDERED_CONST_LOCAL_ITERATOR hash_const_local_iterator_equivalent_keys +#else +#define BOOST_UNORDERED_TABLE hash_table_unique_keys +#define BOOST_UNORDERED_TABLE_DATA hash_table_data_unique_keys +#define BOOST_UNORDERED_ITERATOR hash_iterator_unique_keys +#define BOOST_UNORDERED_CONST_ITERATOR hash_const_iterator_unique_keys +#define BOOST_UNORDERED_LOCAL_ITERATOR hash_local_iterator_unique_keys +#define BOOST_UNORDERED_CONST_LOCAL_ITERATOR hash_const_local_iterator_unique_keys +#endif + +namespace boost { + namespace unordered_detail { + + // + // Hash Table Data + // + // Responsible for managing the hash buckets. + + template + class BOOST_UNORDERED_TABLE_DATA + { + public: + typedef BOOST_UNORDERED_TABLE_DATA data; + + struct node; + struct bucket; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + typedef Alloc value_allocator; + + typedef BOOST_DEDUCED_TYPENAME + boost::unordered_detail::rebind_wrap::type + node_allocator; + typedef BOOST_DEDUCED_TYPENAME + boost::unordered_detail::rebind_wrap::type + bucket_allocator; + + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + typedef BOOST_DEDUCED_TYPENAME allocator_pointer::type node_ptr; + typedef BOOST_DEDUCED_TYPENAME allocator_pointer::type bucket_ptr; + typedef BOOST_DEDUCED_TYPENAME allocator_reference::type reference; + typedef BOOST_DEDUCED_TYPENAME allocator_reference::type bucket_reference; + + typedef bucket_ptr link_ptr; + + // Hash Bucket + // + // all no throw + + struct bucket + { + private: + bucket& operator=(bucket const&); + public: + link_ptr next_; + + bucket() : next_() + { + BOOST_UNORDERED_MSVC_RESET_PTR(next_); + } + + bucket(bucket const& x) : next_(x.next_) + { + // Only copy construct when allocating. + BOOST_ASSERT(!x.next_); + } + + bool empty() const + { + return !this->next_; + } + }; + + // Value Base + + struct value_base { + typename boost::aligned_storage< + sizeof(value_type), + ::boost::alignment_of::value>::type data_; + + void* address() { return this; } + }; + + // Hash Node + // + // all no throw + + struct node : value_base, bucket { +#if BOOST_UNORDERED_EQUIVALENT_KEYS + public: + node() : group_prev_() + { + BOOST_UNORDERED_MSVC_RESET_PTR(group_prev_); + } + + link_ptr group_prev_; +#endif + + value_type& value() { + return *static_cast(this->address()); + } + }; + + // allocators + // + // Stores all the allocators that we're going to need. + + struct allocators + { + node_allocator node_alloc_; + bucket_allocator bucket_alloc_; + + allocators(value_allocator const& a) + : node_alloc_(a), bucket_alloc_(a) + {} + + void destroy(link_ptr ptr) + { + node* raw_ptr = static_cast(&*ptr); + BOOST_UNORDERED_DESTRUCT(&raw_ptr->value(), value_type); + node_ptr n(node_alloc_.address(*raw_ptr)); + node_alloc_.destroy(n); + node_alloc_.deallocate(n, 1); + } + + void swap(allocators& x) + { + boost::swap(node_alloc_, x.node_alloc_); + boost::swap(bucket_alloc_, x.bucket_alloc_); + } + + bool operator==(allocators const& x) + { + return node_alloc_ == x.node_alloc_; + } + }; + + // node_constructor + // + // Used to construct nodes in an exception safe manner. + + class node_constructor + { + allocators& allocators_; + + node_ptr node_; + bool node_constructed_; + bool value_constructed_; + + public: + + node_constructor(allocators& a) + : allocators_(a), + node_(), node_constructed_(false), value_constructed_(false) + { + } + + ~node_constructor() + { + if (node_) { + if (value_constructed_) { + BOOST_UNORDERED_DESTRUCT(&node_->value(), value_type); + } + + if (node_constructed_) + allocators_.node_alloc_.destroy(node_); + allocators_.node_alloc_.deallocate(node_, 1); + } + } + + void construct_preamble() + { + if(!node_) { + node_constructed_ = false; + value_constructed_ = false; + + node_ = allocators_.node_alloc_.allocate(1); + allocators_.node_alloc_.construct(node_, node()); + node_constructed_ = true; + } + else { + BOOST_ASSERT(node_constructed_ && value_constructed_); + BOOST_UNORDERED_DESTRUCT(&node_->value(), value_type); + value_constructed_ = false; + } + } + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + void construct(Args&&... args) + { + construct_preamble(); + new(node_->address()) value_type(std::forward(args)...); + value_constructed_ = true; + } +#else + +#define BOOST_UNORDERED_CONSTRUCT_IMPL(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + void construct( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + construct_preamble(); \ + construct_impl( \ + (value_type*) 0, \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + value_constructed_ = true; \ + } \ + \ + template < \ + typename T, \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + void construct_impl( \ + T*, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + new(node_->address()) value_type( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + } + +#define BOOST_UNORDERED_CONSTRUCT_IMPL2(z, n, _) \ + template \ + void construct_impl( \ + std::pair*, \ + Key const& k, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + new(node_->address()) value_type(k, \ + Second( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ) \ + ); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_CONSTRUCT_IMPL, _) + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_CONSTRUCT_IMPL2, _) + + template + void construct_impl(std::pair*, + std::pair const& arg0) + { + new(node_->address()) value_type(arg0); + } + +#undef BOOST_UNORDERED_CONSTRUCT_IMPL + +#endif + template + void construct_pair(K const& k, M*) + { + construct_preamble(); + new(node_->address()) value_type(k, M()); + value_constructed_ = true; + } + + node_ptr get() const + { + BOOST_ASSERT(node_); + return node_; + } + + // no throw + link_ptr release() + { + node_ptr p = node_; + unordered_detail::reset(node_); + return link_ptr(allocators_.bucket_alloc_.address(*p)); + } + + private: + node_constructor(node_constructor const&); + node_constructor& operator=(node_constructor const&); + }; + + // Methods for navigating groups of elements with equal keys. + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + static inline link_ptr& prev_in_group(link_ptr n) { + return static_cast(&*n)->group_prev_; + } + + // pre: Must be pointing to the first node in a group. + static inline link_ptr& next_group(link_ptr n) { + BOOST_ASSERT(BOOST_UNORDERED_BORLAND_BOOL(n) && n != prev_in_group(n)->next_); + return prev_in_group(n)->next_; + } +#else + static inline link_ptr& next_group(link_ptr n) { + BOOST_ASSERT(n); + return n->next_; + } +#endif + + // pre: Must be pointing to a node + static inline node& get_node(link_ptr p) { + BOOST_ASSERT(p); + return *static_cast(&*p); + } + + // pre: Must be pointing to a node + static inline reference get_value(link_ptr p) { + return get_node(p).value(); + } + + class iterator_base + { + typedef BOOST_UNORDERED_TABLE_DATA data; + public: + bucket_ptr bucket_; + link_ptr node_; + + iterator_base() + : bucket_(), node_() + { + BOOST_UNORDERED_MSVC_RESET_PTR(bucket_); + BOOST_UNORDERED_MSVC_RESET_PTR(node_); + } + + explicit iterator_base(bucket_ptr b) + : bucket_(b), node_(b->next_) {} + + iterator_base(bucket_ptr b, link_ptr n) + : bucket_(b), node_(n) {} + + bool operator==(iterator_base const& x) const + { + return node_ == x.node_; + } + + bool operator!=(iterator_base const& x) const + { + return node_ != x.node_; + } + + reference operator*() const + { + return get_value(node_); + } + + void increment() + { + BOOST_ASSERT(bucket_); + node_ = node_->next_; + + while (!node_) { + ++bucket_; + node_ = bucket_->next_; + } + } + + void increment_group() + { + node_ = data::next_group(node_); + + while (!node_) { + ++bucket_; + node_ = bucket_->next_; + } + } + }; + + // Member Variables + + allocators allocators_; + bucket_ptr buckets_; + bucket_manager bucket_manager_; + bucket_ptr cached_begin_bucket_; + size_type size_; + + // Constructors/Deconstructor + + BOOST_UNORDERED_TABLE_DATA(size_type n, value_allocator const& a) + : allocators_(a), + buckets_(), bucket_manager_(n), + cached_begin_bucket_(), size_(0) + { + BOOST_UNORDERED_MSVC_RESET_PTR(buckets_); + create_buckets(); + } + + BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA const& x, size_type n) + : allocators_(x.allocators_), + buckets_(), bucket_manager_(n), + cached_begin_bucket_(), size_(0) + { + BOOST_UNORDERED_MSVC_RESET_PTR(buckets_); + create_buckets(); + } + + BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA& x, move_tag) + : allocators_(x.allocators_), + buckets_(x.buckets_), bucket_manager_(x.bucket_manager_), + cached_begin_bucket_(x.cached_begin_bucket_), size_(x.size_) + { + unordered_detail::reset(x.buckets_); + } + + BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA& x, + value_allocator const& a, size_type n, move_tag) + : allocators_(a), buckets_(), bucket_manager_(), + cached_begin_bucket_(), size_(0) + { + if(allocators_ == x.allocators_) { + buckets_ = x.buckets_; + bucket_manager_ = x.bucket_manager_; + cached_begin_bucket_ = x.cached_begin_bucket_; + size_ = x.size_; + unordered_detail::reset(x.buckets_); + } + else { + BOOST_UNORDERED_MSVC_RESET_PTR(buckets_); + bucket_manager_ = bucket_manager(n); + create_buckets(); + } + } + + // no throw + ~BOOST_UNORDERED_TABLE_DATA() + { + delete_buckets(); + } + + void create_buckets() { + size_type bucket_count = bucket_manager_.bucket_count(); + + // The array constructor will clean up in the event of an + // exception. + allocator_array_constructor + constructor(allocators_.bucket_alloc_); + + // Creates an extra bucket to act as a sentinel. + constructor.construct(bucket(), bucket_count + 1); + + cached_begin_bucket_ = constructor.get() + static_cast(bucket_count); + + // Set up the sentinel. + cached_begin_bucket_->next_ = link_ptr(cached_begin_bucket_); + + // Only release the buckets once everything is successfully + // done. + buckets_ = constructor.release(); + } + + // no throw + void delete_buckets() + { + if(buckets_) { + bucket_ptr begin = cached_begin_bucket_; + bucket_ptr end = buckets_end(); + while(begin != end) { + clear_bucket(begin); + ++begin; + } + + // Destroy an extra bucket for the sentinels. + ++end; + for(begin = buckets_; begin != end; ++begin) + allocators_.bucket_alloc_.destroy(begin); + + allocators_.bucket_alloc_.deallocate(buckets_, + bucket_manager_.bucket_count() + 1); + } + } + + private: + + BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA const&); + BOOST_UNORDERED_TABLE_DATA& operator=(BOOST_UNORDERED_TABLE_DATA const&); + + public: + + // no throw + void swap(BOOST_UNORDERED_TABLE_DATA& other) + { + std::swap(buckets_, other.buckets_); + std::swap(bucket_manager_, other.bucket_manager_); + std::swap(cached_begin_bucket_, other.cached_begin_bucket_); + std::swap(size_, other.size_); + } + + // no throw + void move(BOOST_UNORDERED_TABLE_DATA& other) + { + delete_buckets(); + buckets_ = other.buckets_; + unordered_detail::reset(other.buckets_); + bucket_manager_ = other.bucket_manager_; + cached_begin_bucket_ = other.cached_begin_bucket_; + size_ = other.size_; + } + + // Return the bucket number for a hashed value. + // + // no throw + size_type bucket_from_hash(size_type hashed) const + { + return bucket_manager_.bucket_from_hash(hashed); + } + + // Return the bucket for a hashed value. + // + // no throw + bucket_ptr bucket_ptr_from_hash(size_type hashed) const + { + return buckets_ + static_cast( + bucket_manager_.bucket_from_hash(hashed)); + } + + // Begin & End + // + // no throw + + bucket_ptr buckets_end() const + { + return buckets_ + static_cast(bucket_manager_.bucket_count()); + } + + iterator_base begin() const + { + return size_ + ? iterator_base(cached_begin_bucket_) + : end(); + } + + iterator_base end() const + { + return iterator_base(buckets_end()); + } + + link_ptr begin(size_type n) const + { + return (buckets_ + static_cast(n))->next_; + } + + link_ptr end(size_type) const + { + return unordered_detail::null_ptr(); + } + + link_ptr begin(bucket_ptr b) const + { + return b->next_; + } + + // Bucket Size + + // no throw + static inline size_type node_count(link_ptr it) + { + size_type count = 0; + while(BOOST_UNORDERED_BORLAND_BOOL(it)) { + ++count; + it = it->next_; + } + return count; + } + + static inline size_type node_count(link_ptr it1, link_ptr it2) + { + size_type count = 0; + while(it1 != it2) { + ++count; + it1 = it1->next_; + } + return count; + } + + size_type bucket_size(size_type n) const + { + return node_count(begin(n)); + } + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + static inline size_type group_count(link_ptr it) + { + return node_count(it, next_group(it)); + } +#else + static inline size_type group_count(link_ptr) + { + return 1; + } +#endif + + // get_for_erase + // + // Find the pointer to a node, for use when erasing. + // + // no throw + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + static link_ptr* get_for_erase(iterator_base r) + { + link_ptr n = r.node_; + + // If the element isn't the first in its group, then + // the link to it will be found in the previous element + // in the group. + link_ptr* it = &prev_in_group(n)->next_; + if(*it == n) return it; + + // The element is the first in its group, so iterate + // throught the groups, checking against the first element. + it = &r.bucket_->next_; + while(*it != n) it = &BOOST_UNORDERED_TABLE_DATA::next_group(*it); + return it; + } +#else + static link_ptr* get_for_erase(iterator_base r) + { + link_ptr n = r.node_; + link_ptr* it = &r.bucket_->next_; + while(*it != n) it = &(*it)->next_; + return it; + } +#endif + + // Link/Unlink/Move Node + // + // For adding nodes to buckets, removing them and moving them to a + // new bucket. + // + // no throw + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + // If n points to the first node in a group, this adds it to the + // end of that group. + link_ptr link_node(node_constructor& a, link_ptr pos) + { + link_ptr n = a.release(); + node& node_ref = get_node(n); + node& pos_ref = get_node(pos); + node_ref.next_ = pos_ref.group_prev_->next_; + node_ref.group_prev_ = pos_ref.group_prev_; + pos_ref.group_prev_->next_ = n; + pos_ref.group_prev_ = n; + ++size_; + return n; + } + + link_ptr link_node_in_bucket(node_constructor& a, bucket_ptr base) + { + link_ptr n = a.release(); + node& node_ref = get_node(n); + node_ref.next_ = base->next_; + node_ref.group_prev_ = n; + base->next_ = n; + ++size_; + if(base < cached_begin_bucket_) cached_begin_bucket_ = base; + return n; + } + + void link_group(link_ptr n, bucket_ptr base, size_type count) + { + node& node_ref = get_node(n); + node& last_ref = get_node(node_ref.group_prev_); + last_ref.next_ = base->next_; + base->next_ = n; + size_ += count; + if(base < cached_begin_bucket_) cached_begin_bucket_ = base; + } +#else + void link_node(link_ptr n, bucket_ptr base) + { + n->next_ = base->next_; + base->next_ = n; + ++size_; + if(base < cached_begin_bucket_) cached_begin_bucket_ = base; + } + + link_ptr link_node_in_bucket(node_constructor& a, bucket_ptr base) + { + link_ptr n = a.release(); + link_node(n, base); + return n; + } + + void link_group(link_ptr n, bucket_ptr base, size_type) + { + link_node(n, base); + } +#endif + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + void unlink_node(iterator_base it) + { + link_ptr* pos = get_for_erase(it); + node* n = &get_node(it.node_); + link_ptr next = n->next_; + + if(n->group_prev_ == *pos) { + // The deleted node is the sole node in the group, so + // no need to unlink it from a group. + } + else if(BOOST_UNORDERED_BORLAND_BOOL(next) && prev_in_group(next) == *pos) + { + // The deleted node is not at the end of the group, so + // change the link from the next node. + prev_in_group(next) = n->group_prev_; + } + else { + // The deleted node is at the end of the group, so the + // first node in the group is pointing to it. + // Find that to change its pointer. + link_ptr it = n->group_prev_; + while(prev_in_group(it) != *pos) { + it = prev_in_group(it); + } + prev_in_group(it) = n->group_prev_; + } + *pos = next; + --size_; + } + + size_type unlink_group(link_ptr* pos) + { + size_type count = group_count(*pos); + size_ -= count; + *pos = next_group(*pos); + return count; + } +#else + void unlink_node(iterator_base n) + { + link_ptr* pos = get_for_erase(n); + *pos = (*pos)->next_; + --size_; + } + + size_type unlink_group(link_ptr* pos) + { + *pos = (*pos)->next_; + --size_; + return 1; + } +#endif + + void unlink_nodes(iterator_base n) + { + link_ptr* it = get_for_erase(n); + split_group(*it); + unordered_detail::reset(*it); + size_ -= node_count(n.node_); + } + + void unlink_nodes(iterator_base begin, iterator_base end) + { + BOOST_ASSERT(begin.bucket_ == end.bucket_); + size_ -= node_count(begin.node_, end.node_); + link_ptr* it = get_for_erase(begin); + split_group(*it, end.node_); + *it = end.node_; + } + + void unlink_nodes(bucket_ptr base, iterator_base end) + { + BOOST_ASSERT(base == end.bucket_); + + split_group(end.node_); + + link_ptr ptr(base->next_); + base->next_ = end.node_; + + size_ -= node_count(ptr, end.node_); + } + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + // Break a ciruclar list into two, with split as the beginning + // of the second group (if split is at the beginning then don't + // split). + static inline link_ptr split_group(link_ptr split) + { + // If split is at the beginning of the group then there's + // nothing to split. + if(prev_in_group(split)->next_ != split) + return unordered_detail::null_ptr(); + + // Find the start of the group. + link_ptr start = split; + do { + start = prev_in_group(start); + } while(prev_in_group(start)->next_ == start); + + link_ptr last = prev_in_group(start); + prev_in_group(start) = prev_in_group(split); + prev_in_group(split) = last; + + return start; + } + + static inline void split_group(link_ptr split1, link_ptr split2) + { + link_ptr begin1 = split_group(split1); + link_ptr begin2 = split_group(split2); + + if(BOOST_UNORDERED_BORLAND_BOOL(begin1) && split1 == begin2) { + link_ptr end1 = prev_in_group(begin1); + prev_in_group(begin1) = prev_in_group(begin2); + prev_in_group(begin2) = end1; + } + } +#else + static inline void split_group(link_ptr) + { + } + + static inline void split_group(link_ptr, link_ptr) + { + } +#endif + + // copy_group + // + // Basic exception safety. + // If it throws, it only copies some of the nodes in the group. + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + void copy_group(link_ptr it, bucket_ptr dst) + { + node_constructor a(allocators_); + + link_ptr end = next_group(it); + + a.construct(get_value(it)); // throws + link_ptr n = link_node_in_bucket(a, dst); + + for(it = it->next_; it != end; it = it->next_) { + a.construct(get_value(it)); // throws + link_node(a, n); + } + } +#else + void copy_group(link_ptr it, bucket_ptr dst) + { + node_constructor a(allocators_); + + a.construct(get_value(it)); // throws + link_node_in_bucket(a, dst); + } +#endif + + // Delete Node + // + // Remove a node, or a range of nodes, from a bucket, and destroy + // them. + // + // no throw + + void delete_to_bucket_end(link_ptr begin) + { + while(begin) { + link_ptr node = begin; + begin = begin->next_; + allocators_.destroy(node); + } + } + + void delete_nodes(link_ptr begin, link_ptr end) + { + while(begin != end) { + link_ptr node = begin; + begin = begin->next_; + allocators_.destroy(node); + } + } + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + void delete_group(link_ptr first_node) + { + delete_nodes(first_node, prev_in_group(first_node)->next_); + } +#else + void delete_group(link_ptr node) + { + allocators_.destroy(node); + } +#endif + + // Clear + // + // Remove all the nodes. + // + // no throw + + void clear_bucket(bucket_ptr b) + { + link_ptr first_node = b->next_; + unordered_detail::reset(b->next_); + delete_to_bucket_end(first_node); + } + + void clear() + { + bucket_ptr begin = cached_begin_bucket_; + bucket_ptr end = buckets_end(); + + size_ = 0; + cached_begin_bucket_ = end; + + while(begin != end) { + clear_bucket(begin); + ++begin; + } + } + + // Erase + // + // no throw + + iterator_base erase(iterator_base r) + { + BOOST_ASSERT(r != end()); + iterator_base next = r; + next.increment(); + unlink_node(r); + allocators_.destroy(r.node_); + // r has been invalidated but its bucket is still valid + recompute_begin_bucket(r.bucket_, next.bucket_); + return next; + } + + iterator_base erase_range(iterator_base r1, iterator_base r2) + { + if(r1 != r2) + { + BOOST_ASSERT(r1 != end()); + + if (r1.bucket_ == r2.bucket_) { + unlink_nodes(r1, r2); + delete_nodes(r1.node_, r2.node_); + + // No need to call recompute_begin_bucket because + // the nodes are only deleted from one bucket, which + // still contains r2 after the erase. + BOOST_ASSERT(!r1.bucket_->empty()); + } + else { + BOOST_ASSERT(r1.bucket_ < r2.bucket_); + + unlink_nodes(r1); + delete_to_bucket_end(r1.node_); + + bucket_ptr i = r1.bucket_; + for(++i; i != r2.bucket_; ++i) { + size_ -= node_count(i->next_); + clear_bucket(i); + } + + if(r2 != end()) { + link_ptr first = r2.bucket_->next_; + unlink_nodes(r2.bucket_, r2); + delete_nodes(first, r2.node_); + } + + // r1 has been invalidated but its bucket is still + // valid. + recompute_begin_bucket(r1.bucket_, r2.bucket_); + } + } + + return r2; + } + + // recompute_begin_bucket + // + // After an erase cached_begin_bucket_ might be left pointing to + // an empty bucket, so this is called to update it + // + // no throw + + void recompute_begin_bucket(bucket_ptr b) + { + BOOST_ASSERT(!(b < cached_begin_bucket_)); + + if(b == cached_begin_bucket_) + { + if (size_ != 0) { + while (cached_begin_bucket_->empty()) + ++cached_begin_bucket_; + } else { + cached_begin_bucket_ = buckets_end(); + } + } + } + + // This is called when a range has been erased + // + // no throw + + void recompute_begin_bucket(bucket_ptr b1, bucket_ptr b2) + { + BOOST_ASSERT(!(b1 < cached_begin_bucket_) && !(b2 < b1)); + BOOST_ASSERT(b2 == buckets_end() || !b2->empty()); + + if(b1 == cached_begin_bucket_ && b1->empty()) + cached_begin_bucket_ = b2; + } + + size_type erase_group(link_ptr* it, bucket_ptr bucket) + { + link_ptr pos = *it; + size_type count = unlink_group(it); + delete_group(pos); + + this->recompute_begin_bucket(bucket); + + return count; + } + }; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) + template <> + class BOOST_UNORDERED_TABLE_DATA + { + public: + typedef int size_type; + typedef int iterator_base; + }; +#endif + + // + // Hash Table + // + + template + class BOOST_UNORDERED_TABLE + { + typedef BOOST_UNORDERED_TABLE_DATA data; + + typedef BOOST_DEDUCED_TYPENAME data::node_constructor node_constructor; + typedef BOOST_DEDUCED_TYPENAME data::bucket_ptr bucket_ptr; + typedef BOOST_DEDUCED_TYPENAME data::link_ptr link_ptr; + + public: + + typedef BOOST_DEDUCED_TYPENAME data::value_allocator value_allocator; + typedef BOOST_DEDUCED_TYPENAME data::node_allocator node_allocator; + + // Type definitions + + typedef KeyType key_type; + typedef Hash hasher; + typedef Pred key_equal; + typedef ValueType value_type; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + // iterators + + typedef BOOST_DEDUCED_TYPENAME data::iterator_base iterator_base; + + private: + + + typedef boost::unordered_detail::buffered_functions + function_store; + typedef BOOST_DEDUCED_TYPENAME function_store::functions functions; + typedef BOOST_DEDUCED_TYPENAME function_store::functions_ptr + functions_ptr; + + function_store functions_; + float mlf_; + size_type max_load_; + + public: + + data data_; + + // Constructors + // + // In the constructors, if anything throws an exception, + // BOOST_UNORDERED_TABLE_DATA's destructor will clean up. + + BOOST_UNORDERED_TABLE(size_type n, + hasher const& hf, key_equal const& eq, + value_allocator const& a) + : functions_(hf, eq), // throws, cleans itself up + mlf_(1.0f), // no throw + data_(n, a) // throws, cleans itself up + { + calculate_max_load(); // no throw + } + + // Construct from iterators + + // initial_size + // + // A helper function for the copy constructor to calculate how many + // nodes will be created if the iterator's support it. Might get it + // totally wrong for containers with unique keys. + // + // no throw + + template + size_type initial_size(I i, I j, size_type n, + boost::forward_traversal_tag) + { + // max load factor isn't set yet, but when it is, it'll be 1.0. + return (std::max)(static_cast(unordered_detail::distance(i, j)) + 1, n); + } + + template + size_type initial_size(I, I, size_type n, + boost::incrementable_traversal_tag) + { + return n; + } + + template + size_type initial_size(I i, I j, size_type n) + { + BOOST_DEDUCED_TYPENAME boost::iterator_traversal::type + iterator_traversal_tag; + return initial_size(i, j, n, iterator_traversal_tag); + } + + template + BOOST_UNORDERED_TABLE(I i, I j, size_type n, + hasher const& hf, key_equal const& eq, + value_allocator const& a) + : functions_(hf, eq), // throws, cleans itself up + mlf_(1.0f), // no throw + data_(initial_size(i, j, n), a) // throws, cleans itself up + { + calculate_max_load(); // no throw + + // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean up. + insert_range(i, j); + } + + // Copy Construct + + BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE const& x) + : functions_(x.functions_), // throws + mlf_(x.mlf_), // no throw + data_(x.data_, x.min_buckets_for_size(x.size())) // throws + { + calculate_max_load(); // no throw + + // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean + // up. + x.copy_buckets_to(data_); + } + + // Copy Construct with allocator + + BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE const& x, + value_allocator const& a) + : functions_(x.functions_), // throws + mlf_(x.mlf_), // no throw + data_(x.min_buckets_for_size(x.size()), a) + { + calculate_max_load(); // no throw + + // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean + // up. + x.copy_buckets_to(data_); + } + + // Move Construct + + BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE& x, move_tag m) + : functions_(x.functions_), // throws + mlf_(x.mlf_), // no throw + data_(x.data_, m) // throws + { + calculate_max_load(); // no throw + } + + BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE& x, + value_allocator const& a, move_tag m) + : functions_(x.functions_), // throws + mlf_(x.mlf_), // no throw + data_(x.data_, a, + x.min_buckets_for_size(x.size()), m) // throws + { + calculate_max_load(); // no throw + + if(x.data_.buckets_) { + // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean + // up. + x.copy_buckets_to(data_); + } + } + + // Assign + // + // basic exception safety, if buffered_functions::buffer or reserver throws + // the container is left in a sane, empty state. If copy_buckets_to + // throws the container is left with whatever was successfully + // copied. + + BOOST_UNORDERED_TABLE& operator=(BOOST_UNORDERED_TABLE const& x) + { + if(this != &x) + { + data_.clear(); // no throw + functions_.set(functions_.buffer(x.functions_)); + // throws, strong + mlf_ = x.mlf_; // no throw + calculate_max_load(); // no throw + reserve(x.size()); // throws + x.copy_buckets_to(data_); // throws + } + + return *this; + } + + // Swap + // + // Swap's behaviour when allocators aren't equal is in dispute, for + // details see: + // + // http://unordered.nfshost.com/doc/html/unordered/rationale.html#swapping_containers_with_unequal_allocators + // + // ---------------------------------------------------------------- + // + // Strong exception safety (might change unused function objects) + // + // Can throw if hash or predicate object's copy constructor throws + // or if allocators are unequal. + + void swap(BOOST_UNORDERED_TABLE& x) + { + // The swap code can work when swapping a container with itself + // but it triggers an assertion in buffered_functions. + // At the moment, I'd rather leave that assertion in and add a + // check here, rather than remove the assertion. I might change + // this at a later date. + if(this == &x) return; + + // These can throw, but they only affect the function objects + // that aren't in use so it is strongly exception safe, via. + // double buffering. + functions_ptr new_func_this = functions_.buffer(x.functions_); + functions_ptr new_func_that = x.functions_.buffer(functions_); + + if(data_.allocators_ == x.data_.allocators_) { + data_.swap(x.data_); // no throw + } + else { + // Create new buckets in separate HASH_TABLE_DATA objects + // which will clean up if anything throws an exception. + // (all can throw, but with no effect as these are new objects). + data new_this(data_, x.min_buckets_for_size(x.data_.size_)); + x.copy_buckets_to(new_this); + + data new_that(x.data_, min_buckets_for_size(data_.size_)); + copy_buckets_to(new_that); + + // Start updating the data here, no throw from now on. + data_.swap(new_this); + x.data_.swap(new_that); + } + + // We've made it, the rest is no throw. + std::swap(mlf_, x.mlf_); + + functions_.set(new_func_this); + x.functions_.set(new_func_that); + + calculate_max_load(); + x.calculate_max_load(); + } + + // Move + // + // ---------------------------------------------------------------- + // + // Strong exception safety (might change unused function objects) + // + // Can throw if hash or predicate object's copy constructor throws + // or if allocators are unequal. + + void move(BOOST_UNORDERED_TABLE& x) + { + // This can throw, but it only affects the function objects + // that aren't in use so it is strongly exception safe, via. + // double buffering. + functions_ptr new_func_this = functions_.buffer(x.functions_); + + if(data_.allocators_ == x.data_.allocators_) { + data_.move(x.data_); // no throw + } + else { + // Create new buckets in separate HASH_TABLE_DATA objects + // which will clean up if anything throws an exception. + // (all can throw, but with no effect as these are new objects). + data new_this(data_, x.min_buckets_for_size(x.data_.size_)); + x.copy_buckets_to(new_this); + + // Start updating the data here, no throw from now on. + data_.move(new_this); + } + + // We've made it, the rest is no throw. + mlf_ = x.mlf_; + functions_.set(new_func_this); + calculate_max_load(); + } + + // accessors + + // no throw + node_allocator get_allocator() const + { + return data_.allocators_.node_alloc_; + } + + // no throw + hasher const& hash_function() const + { + return functions_.current().hash_function(); + } + + // no throw + key_equal const& key_eq() const + { + return functions_.current().key_eq(); + } + + // no throw + size_type size() const + { + return data_.size_; + } + + // no throw + bool empty() const + { + return data_.size_ == 0; + } + + // no throw + size_type max_size() const + { + using namespace std; + + // size < mlf_ * count + return double_to_size_t(ceil( + (double) mlf_ * max_bucket_count())) - 1; + } + + // strong safety + size_type bucket(key_type const& k) const + { + // hash_function can throw: + return data_.bucket_from_hash(hash_function()(k)); + } + + + // strong safety + bucket_ptr get_bucket(key_type const& k) const + { + return data_.buckets_ + static_cast(bucket(k)); + } + + // no throw + size_type bucket_count() const + { + return data_.bucket_manager_.bucket_count(); + } + + // no throw + size_type max_bucket_count() const + { + // -1 to account for the end marker. + return prev_prime(data_.allocators_.bucket_alloc_.max_size() - 1); + } + + private: + + // no throw + size_type min_buckets_for_size(size_type n) const + { + BOOST_ASSERT(mlf_ != 0); + + using namespace std; + + // From 6.3.1/13: + // size < mlf_ * count + // => count > size / mlf_ + // + // Or from rehash post-condition: + // count > size / mlf_ + return double_to_size_t(floor(n / (double) mlf_)) + 1; + } + + // no throw + void calculate_max_load() + { + using namespace std; + + // From 6.3.1/13: + // Only resize when size >= mlf_ * count + max_load_ = double_to_size_t(ceil( + (double) mlf_ * data_.bucket_manager_.bucket_count())); + } + + // basic exception safety + bool reserve(size_type n) + { + bool need_to_reserve = n >= max_load_; + // throws - basic: + if (need_to_reserve) rehash_impl(min_buckets_for_size(n)); + BOOST_ASSERT(n < max_load_ || n > max_size()); + return need_to_reserve; + } + + // basic exception safety + bool reserve_for_insert(size_type n) + { + bool need_to_reserve = n >= max_load_; + // throws - basic: + if (need_to_reserve) { + size_type s = size(); + s = s + (s >> 1); + s = s > n ? s : n; + rehash_impl(min_buckets_for_size(s)); + } + BOOST_ASSERT(n < max_load_ || n > max_size()); + return need_to_reserve; + } + + public: + + // no throw + float max_load_factor() const + { + return mlf_; + } + + // no throw + void max_load_factor(float z) + { + BOOST_ASSERT(z > 0); + mlf_ = (std::max)(z, minimum_max_load_factor); + calculate_max_load(); + } + + // no throw + float load_factor() const + { + BOOST_ASSERT(data_.bucket_manager_.bucket_count() != 0); + return static_cast(data_.size_) + / static_cast(data_.bucket_manager_.bucket_count()); + } + + // key extractors + // + // no throw + // + // 'extract_key' is called with the emplace parameters to return a + // key if available or 'no_key' is one isn't and will need to be + // constructed. + + struct no_key { + no_key() {} + template no_key(T const&) {} + }; + + + // If emplace is called with no arguments then there obviously + // isn't an available key. + + static no_key extract_key() + { + return no_key(); + } + + // Emplace or insert was called with the value type. + + static key_type const& extract_key(value_type const& v) + { + return extract(v, (type_wrapper*)0); + } + + static key_type const& extract(value_type const& v, + type_wrapper*) + { + return v; + } + + static key_type const& extract(value_type const& v, + void*) + { + return v.first; + } + + // For maps, if emplace is called with just a key, then it's the value type + // with the second value default initialised. + + template + static BOOST_DEDUCED_TYPENAME + boost::mpl::if_, key_type const&, no_key>::type + extract_key(Arg const& k) + { + return k; + } + + // For a map, the argument might be a pair with the key as the first + // part and a convertible value as the second part. + + template + static BOOST_DEDUCED_TYPENAME + boost::mpl::if_< + boost::mpl::and_< + boost::mpl::not_ >, + boost::is_same::type + >::type> + >, + key_type const&, no_key + >::type extract_key(std::pair const& v) + { + return v.first; + } + + // For maps if there is more than one argument, the key can be the first argument. + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + static BOOST_DEDUCED_TYPENAME + boost::mpl::if_< + boost::mpl::and_< + boost::mpl::not_ >, + boost::is_same + >, + key_type const&, no_key + >::type extract_key(Arg const& k, Arg1 const&, Args const&...) + { + return k; + } + +#else + template + static BOOST_DEDUCED_TYPENAME + boost::mpl::if_< + boost::mpl::and_< + boost::mpl::not_ >, + boost::is_same + >, + key_type const&, no_key + >::type extract_key(Arg const& k, Arg1 const&) + { + return k; + } + +#endif + + public: + + // if hash function throws, basic exception safety + // strong otherwise. + void rehash(size_type n) + { + using namespace std; + + // no throw: + size_type min_size = min_buckets_for_size(size()); + // basic/strong: + rehash_impl(min_size > n ? min_size : n); + + BOOST_ASSERT((float) bucket_count() > (float) size() / max_load_factor() + && bucket_count() >= n); + } + + private: + + // if hash function throws, basic exception safety + // strong otherwise + void rehash_impl(size_type n) + { + n = next_prime(n); // no throw + + if (n == bucket_count()) // no throw + return; + + data new_buckets(data_, n); // throws, seperate + move_buckets_to(new_buckets); // basic/no throw + new_buckets.swap(data_); // no throw + calculate_max_load(); // no throw + } + + // move_buckets_to & copy_buckets_to + // + // if the hash function throws, basic excpetion safety + // no throw otherwise + + void move_buckets_to(data& dst) + { + BOOST_ASSERT(dst.size_ == 0); + //BOOST_ASSERT(src.allocators_.node_alloc_ == dst.allocators_.node_alloc_); + + data& src = this->data_; + hasher const& hf = this->hash_function(); + bucket_ptr end = src.buckets_end(); + + for(; src.cached_begin_bucket_ != end; + ++src.cached_begin_bucket_) { + bucket_ptr src_bucket = src.cached_begin_bucket_; + while(src_bucket->next_) { + // Move the first group of equivalent nodes in + // src_bucket to dst. + + // This next line throws iff the hash function throws. + bucket_ptr dst_bucket = dst.bucket_ptr_from_hash( + hf(extract_key(data::get_value(src_bucket->next_)))); + + link_ptr n = src_bucket->next_; + size_type count = src.unlink_group(&src_bucket->next_); + dst.link_group(n, dst_bucket, count); + } + } + } + + // basic excpetion safety. If an exception is thrown this will + // leave dst partially filled. + + void copy_buckets_to(data& dst) const + { + BOOST_ASSERT(dst.size_ == 0); + + // no throw: + data const& src = this->data_; + hasher const& hf = this->hash_function(); + bucket_ptr end = src.buckets_end(); + + // no throw: + for(bucket_ptr i = src.cached_begin_bucket_; i != end; ++i) { + // no throw: + for(link_ptr it = src.begin(i); + BOOST_UNORDERED_BORLAND_BOOL(it); it = data::next_group(it)) { + // hash function can throw. + bucket_ptr dst_bucket = dst.bucket_ptr_from_hash( + hf(extract_key(data::get_value(it)))); + // throws, strong + dst.copy_group(it, dst_bucket); + } + } + } + + public: + + // Insert functions + // + // basic exception safety, if hash function throws + // strong otherwise. + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + +#if defined(BOOST_UNORDERED_STD_FORWARD) + + // Emplace (equivalent key containers) + // (I'm using an overloaded emplace for both 'insert' and 'emplace') + + // if hash function throws, basic exception safety + // strong otherwise + template + iterator_base emplace(Args&&... args) + { + // Create the node before rehashing in case it throws an + // exception (need strong safety in such a case). + node_constructor a(data_.allocators_); + a.construct(std::forward(args)...); + + return emplace_impl(a); + } + + // Emplace (equivalent key containers) + // (I'm using an overloaded emplace for both 'insert' and 'emplace') + + // if hash function throws, basic exception safety + // strong otherwise + template + iterator_base emplace_hint(iterator_base const& it, Args&&... args) + { + // Create the node before rehashing in case it throws an + // exception (need strong safety in such a case). + node_constructor a(data_.allocators_); + a.construct(std::forward(args)...); + + return emplace_hint_impl(it, a); + } + +#else + +#define BOOST_UNORDERED_INSERT_IMPL(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator_base emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + node_constructor a(data_.allocators_); \ + a.construct( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + return emplace_impl(a); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator_base emplace_hint(iterator_base const& it, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + node_constructor a(data_.allocators_); \ + a.construct( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + return emplace_hint_impl(it, a); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_INSERT_IMPL, _) + +#undef BOOST_UNORDERED_INSERT_IMPL +#endif + + iterator_base emplace_impl(node_constructor& a) + { + key_type const& k = extract_key(a.get()->value()); + size_type hash_value = hash_function()(k); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr position = find_iterator(bucket, k); + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(reserve_for_insert(size() + 1)) + bucket = data_.bucket_ptr_from_hash(hash_value); + + // I'm relying on link_ptr not being invalidated by + // the rehash here. + return iterator_base(bucket, + (BOOST_UNORDERED_BORLAND_BOOL(position)) ? + data_.link_node(a, position) : + data_.link_node_in_bucket(a, bucket) + ); + } + + iterator_base emplace_hint_impl(iterator_base const& it, node_constructor& a) + { + // equal can throw, but with no effects + if (it == data_.end() || !equal(extract_key(a.get()->value()), *it)) { + // Use the standard emplace if the iterator doesn't point + // to a matching key. + return emplace_impl(a); + } + else { + // Find the first node in the group - so that the node + // will be added at the end of the group. + + link_ptr start(it.node_); + while(data_.prev_in_group(start)->next_ == start) + start = data_.prev_in_group(start); + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + bucket_ptr base = reserve_for_insert(size() + 1) ? + get_bucket(extract_key(a.get()->value())) : it.bucket_; + + // Nothing after this point can throw + + return iterator_base(base, + data_.link_node(a, start)); + } + } + + // Insert from iterator range (equivalent key containers) + + private: + + // if hash function throws, or inserting > 1 element, basic exception safety + // strong otherwise + template + void insert_for_range(I i, I j, forward_traversal_tag) + { + size_type distance = unordered_detail::distance(i, j); + if(distance == 1) { + emplace(*i); + } + else { + // Only require basic exception safety here + reserve_for_insert(size() + distance); + node_constructor a(data_.allocators_); + + for (; i != j; ++i) { + a.construct(*i); + + key_type const& k = extract_key(a.get()->value()); + bucket_ptr bucket = get_bucket(k); + link_ptr position = find_iterator(bucket, k); + + if(BOOST_UNORDERED_BORLAND_BOOL(position)) + data_.link_node(a, position); + else + data_.link_node_in_bucket(a, bucket); + } + } + } + + // if hash function throws, or inserting > 1 element, basic exception safety + // strong otherwise + template + void insert_for_range(I i, I j, + boost::incrementable_traversal_tag) + { + // If only inserting 1 element, get the required + // safety since insert is only called once. + for (; i != j; ++i) emplace(*i); + } + + public: + + // if hash function throws, or inserting > 1 element, basic exception safety + // strong otherwise + template + void insert_range(I i, I j) + { + BOOST_DEDUCED_TYPENAME boost::iterator_traversal::type + iterator_traversal_tag; + insert_for_range(i, j, iterator_traversal_tag); + } +#else + // if hash function throws, basic exception safety + // strong otherwise + value_type& operator[](key_type const& k) + { + BOOST_STATIC_ASSERT(( + !boost::is_same::value)); + typedef BOOST_DEDUCED_TYPENAME value_type::second_type mapped_type; + + size_type hash_value = hash_function()(k); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr pos = find_iterator(bucket, k); + + if (BOOST_UNORDERED_BORLAND_BOOL(pos)) + return data::get_value(pos); + else + { + // Side effects only in this block. + + // Create the node before rehashing in case it throws an + // exception (need strong safety in such a case). + node_constructor a(data_.allocators_); + a.construct_pair(k, (mapped_type*) 0); + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(reserve_for_insert(size() + 1)) + bucket = data_.bucket_ptr_from_hash(hash_value); + + // Nothing after this point can throw. + + return data::get_value(data_.link_node_in_bucket(a, bucket)); + } + } + +#if defined(BOOST_UNORDERED_STD_FORWARD) + + // Emplace (unique keys) + // (I'm using an overloaded emplace for both 'insert' and 'emplace') + + // if hash function throws, basic exception safety + // strong otherwise + template + std::pair emplace(Args&&... args) + { + return emplace_impl( + extract_key(std::forward(args)...), + std::forward(args)...); + } + + // Insert (unique keys) + // (I'm using an overloaded emplace for both 'insert' and 'emplace') + // I'm just ignoring hints here for now. + + // if hash function throws, basic exception safety + // strong otherwise + template + iterator_base emplace_hint(iterator_base const&, Args&&... args) + { + return emplace_impl( + extract_key(std::forward(args)...), + std::forward(args)...).first; + } + + template + std::pair emplace_impl(key_type const& k, Args&&... args) + { + // No side effects in this initial code + size_type hash_value = hash_function()(k); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr pos = find_iterator(bucket, k); + + if (BOOST_UNORDERED_BORLAND_BOOL(pos)) { + // Found an existing key, return it (no throw). + return std::pair( + iterator_base(bucket, pos), false); + + } else { + // Doesn't already exist, add to bucket. + // Side effects only in this block. + + // Create the node before rehashing in case it throws an + // exception (need strong safety in such a case). + node_constructor a(data_.allocators_); + a.construct(std::forward(args)...); + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(reserve_for_insert(size() + 1)) + bucket = data_.bucket_ptr_from_hash(hash_value); + + // Nothing after this point can throw. + + return std::pair(iterator_base(bucket, + data_.link_node_in_bucket(a, bucket)), true); + } + } + + template + std::pair emplace_impl(no_key, Args&&... args) + { + // Construct the node regardless - in order to get the key. + // It will be discarded if it isn't used + node_constructor a(data_.allocators_); + a.construct(std::forward(args)...); + return emplace_impl_with_node(a); + } +#else + template + std::pair emplace(Arg0 const& arg0) + { + return emplace_impl(extract_key(arg0), arg0); + } + + template + iterator_base emplace_hint(iterator_base const& it, Arg0 const& arg0) + { + return emplace_impl(extract_key(arg0), arg0).first; + } + + +#define BOOST_UNORDERED_INSERT_IMPL(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + std::pair emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return emplace_impl( \ + extract_key(arg0, arg1), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator_base emplace_hint(iterator_base const& it, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return emplace_impl( \ + extract_key(arg0, arg1), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ).first; \ + } \ + BOOST_UNORDERED_INSERT_IMPL2(z, n, _) + +#define BOOST_UNORDERED_INSERT_IMPL2(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + std::pair emplace_impl(key_type const& k, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + size_type hash_value = hash_function()(k); \ + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); \ + link_ptr pos = find_iterator(bucket, k); \ + \ + if (BOOST_UNORDERED_BORLAND_BOOL(pos)) { \ + return std::pair( \ + iterator_base(bucket, pos), false); \ + } else { \ + node_constructor a(data_.allocators_); \ + a.construct( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + \ + if(reserve_for_insert(size() + 1)) \ + bucket = data_.bucket_ptr_from_hash(hash_value); \ + \ + return std::pair(iterator_base(bucket, \ + data_.link_node_in_bucket(a, bucket)), true); \ + } \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + std::pair emplace_impl(no_key, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + node_constructor a(data_.allocators_); \ + a.construct( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + ); \ + return emplace_impl_with_node(a); \ + } + + BOOST_UNORDERED_INSERT_IMPL2(1, 1, _) + + BOOST_PP_REPEAT_FROM_TO(2, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_INSERT_IMPL, _) + +#undef BOOST_UNORDERED_INSERT_IMPL + +#endif + + std::pair emplace_impl_with_node(node_constructor& a) + { + // No side effects in this initial code + key_type const& k = extract_key(a.get()->value()); + size_type hash_value = hash_function()(k); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr pos = find_iterator(bucket, k); + + if (BOOST_UNORDERED_BORLAND_BOOL(pos)) { + // Found an existing key, return it (no throw). + return std::pair( + iterator_base(bucket, pos), false); + } else { + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(reserve_for_insert(size() + 1)) + bucket = data_.bucket_ptr_from_hash(hash_value); + + // Nothing after this point can throw. + + return std::pair(iterator_base(bucket, + data_.link_node_in_bucket(a, bucket)), true); + } + } + + // Insert from iterators (unique keys) + + template + size_type insert_size(I i, I j, boost::forward_traversal_tag) + { + return unordered_detail::distance(i, j); + } + + template + size_type insert_size(I, I, boost::incrementable_traversal_tag) + { + return 1; + } + + template + size_type insert_size(I i, I j) + { + BOOST_DEDUCED_TYPENAME boost::iterator_traversal::type + iterator_traversal_tag; + return insert_size(i, j, iterator_traversal_tag); + } + + // if hash function throws, or inserting > 1 element, basic exception safety + // strong otherwise + template + void insert_range(InputIterator i, InputIterator j) + { + if(i != j) + return insert_range_impl(extract_key(*i), i, j); + } + + template + void insert_range_impl(key_type const&, InputIterator i, InputIterator j) + { + node_constructor a(data_.allocators_); + + for (; i != j; ++i) { + // No side effects in this initial code + size_type hash_value = hash_function()(extract_key(*i)); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr pos = find_iterator(bucket, extract_key(*i)); + + if (!BOOST_UNORDERED_BORLAND_BOOL(pos)) { + // Doesn't already exist, add to bucket. + // Side effects only in this block. + + // Create the node before rehashing in case it throws an + // exception (need strong safety in such a case). + a.construct(*i); + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(size() + 1 >= max_load_) { + reserve_for_insert(size() + insert_size(i, j)); + bucket = data_.bucket_ptr_from_hash(hash_value); + } + + // Nothing after this point can throw. + data_.link_node_in_bucket(a, bucket); + } + } + } + + template + void insert_range_impl(no_key, InputIterator i, InputIterator j) + { + node_constructor a(data_.allocators_); + + for (; i != j; ++i) { + // No side effects in this initial code + a.construct(*i); + key_type const& k = extract_key(a.get()->value()); + size_type hash_value = hash_function()(extract_key(k)); + bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value); + link_ptr pos = find_iterator(bucket, k); + + if (!BOOST_UNORDERED_BORLAND_BOOL(pos)) { + // Doesn't already exist, add to bucket. + // Side effects only in this block. + + // reserve has basic exception safety if the hash function + // throws, strong otherwise. + if(size() + 1 >= max_load_) { + reserve_for_insert(size() + insert_size(i, j)); + bucket = data_.bucket_ptr_from_hash(hash_value); + } + + // Nothing after this point can throw. + data_.link_node_in_bucket(a, bucket); + } + } + } +#endif + public: + + // erase_key + + // strong exception safety + size_type erase_key(key_type const& k) + { + // No side effects in initial section + bucket_ptr bucket = get_bucket(k); + link_ptr* it = find_for_erase(bucket, k); + + // No throw. + return *it ? data_.erase_group(it, bucket) : 0; + } + + // count + // + // strong exception safety, no side effects + size_type count(key_type const& k) const + { + link_ptr it = find_iterator(k); // throws, strong + return BOOST_UNORDERED_BORLAND_BOOL(it) ? data::group_count(it) : 0; + } + + // find + // + // strong exception safety, no side effects + iterator_base find(key_type const& k) const + { + bucket_ptr bucket = get_bucket(k); + link_ptr it = find_iterator(bucket, k); + + if (BOOST_UNORDERED_BORLAND_BOOL(it)) + return iterator_base(bucket, it); + else + return data_.end(); + } + + value_type& at(key_type const& k) const + { + bucket_ptr bucket = get_bucket(k); + link_ptr it = find_iterator(bucket, k); + + if (BOOST_UNORDERED_BORLAND_BOOL(it)) + return data::get_value(it); + else + throw std::out_of_range("Unable to find key in unordered_map."); + } + + // equal_range + // + // strong exception safety, no side effects + std::pair equal_range(key_type const& k) const + { + bucket_ptr bucket = get_bucket(k); + link_ptr it = find_iterator(bucket, k); + if (BOOST_UNORDERED_BORLAND_BOOL(it)) { + iterator_base first(iterator_base(bucket, it)); + iterator_base second(first); + second.increment_group(); + return std::pair(first, second); + } + else { + return std::pair( + data_.end(), data_.end()); + } + } + + // strong exception safety, no side effects + bool equal(key_type const& k, value_type const& v) const + { + return key_eq()(k, extract_key(v)); + } + + // strong exception safety, no side effects + link_ptr find_iterator(key_type const& k) const + { + return find_iterator(get_bucket(k), k); + } + + // strong exception safety, no side effects + link_ptr find_iterator(bucket_ptr bucket, + key_type const& k) const + { + link_ptr it = data_.begin(bucket); + while (BOOST_UNORDERED_BORLAND_BOOL(it) && !equal(k, data::get_value(it))) { + it = data::next_group(it); + } + + return it; + } + + // strong exception safety, no side effects + link_ptr* find_for_erase(bucket_ptr bucket, key_type const& k) const + { + link_ptr* it = &bucket->next_; + while(BOOST_UNORDERED_BORLAND_BOOL(*it) && !equal(k, data::get_value(*it))) + it = &data::next_group(*it); + + return it; + } + }; + + // + // Equals - unordered container equality comparison. + // + +#if BOOST_UNORDERED_EQUIVALENT_KEYS + template + inline bool group_equals( + BOOST_UNORDERED_TABLE_DATA*, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it1, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it2, + KeyType*, + type_wrapper*) + { + typedef BOOST_UNORDERED_TABLE_DATA data; + return data::group_count(it1) == data::group_count(it2); + } + + template + inline bool group_equals( + BOOST_UNORDERED_TABLE_DATA*, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it1, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it2, + KeyType*, + void*) + { + typedef BOOST_UNORDERED_TABLE_DATA data; + typename BOOST_UNORDERED_TABLE_DATA::link_ptr end1 = data::next_group(it1); + typename BOOST_UNORDERED_TABLE_DATA::link_ptr end2 = data::next_group(it2); + + do { + if(data::get_value(it1).second != data::get_value(it2).second) return false; + it1 = it1->next_; + it2 = it2->next_; + } while(it1 != end1 && it2 != end2); + return it1 == end1 && it2 == end2; + } +#else + template + inline bool group_equals( + BOOST_UNORDERED_TABLE_DATA*, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr, + KeyType*, + type_wrapper*) + { + return true; + } + + template + inline bool group_equals( + BOOST_UNORDERED_TABLE_DATA*, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it1, + typename BOOST_UNORDERED_TABLE_DATA::link_ptr it2, + KeyType*, + void*) + { + typedef BOOST_UNORDERED_TABLE_DATA data; + return data::get_value(it1).second == data::get_value(it2).second; + } +#endif + + template + bool equals(BOOST_UNORDERED_TABLE const& t1, + BOOST_UNORDERED_TABLE const& t2) + { + typedef BOOST_UNORDERED_TABLE_DATA data; + typedef typename data::bucket_ptr bucket_ptr; + typedef typename data::link_ptr link_ptr; + + if(t1.size() != t2.size()) return false; + + for(bucket_ptr i = t1.data_.cached_begin_bucket_, + j = t1.data_.buckets_end(); i != j; ++i) + { + for(link_ptr it(i->next_); BOOST_UNORDERED_BORLAND_BOOL(it); it = data::next_group(it)) + { + link_ptr other_pos = t2.find_iterator(t2.extract_key(data::get_value(it))); + if(!BOOST_UNORDERED_BORLAND_BOOL(other_pos) || + !group_equals((data*)0, it, other_pos, (K*)0, (type_wrapper*)0)) + return false; + } + } + + return true; + } + + // Iterators + + template class BOOST_UNORDERED_ITERATOR; + template class BOOST_UNORDERED_CONST_ITERATOR; + template class BOOST_UNORDERED_LOCAL_ITERATOR; + template class BOOST_UNORDERED_CONST_LOCAL_ITERATOR; + class iterator_access; + + // Local Iterators + // + // all no throw + + template + class BOOST_UNORDERED_LOCAL_ITERATOR + : public boost::iterator < + std::forward_iterator_tag, + BOOST_DEDUCED_TYPENAME allocator_value_type::type, + std::ptrdiff_t, + BOOST_DEDUCED_TYPENAME allocator_pointer::type, + BOOST_DEDUCED_TYPENAME allocator_reference::type > + { + public: + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + + private: + typedef BOOST_UNORDERED_TABLE_DATA data; + typedef BOOST_DEDUCED_TYPENAME data::link_ptr ptr; + typedef BOOST_UNORDERED_CONST_LOCAL_ITERATOR const_local_iterator; + + friend class BOOST_UNORDERED_CONST_LOCAL_ITERATOR; + ptr ptr_; + + public: + BOOST_UNORDERED_LOCAL_ITERATOR() : ptr_() { + BOOST_UNORDERED_MSVC_RESET_PTR(ptr_); + } + explicit BOOST_UNORDERED_LOCAL_ITERATOR(ptr x) : ptr_(x) {} + BOOST_DEDUCED_TYPENAME allocator_reference::type operator*() const + { return data::get_value(ptr_); } + value_type* operator->() const { return &data::get_value(ptr_); } + BOOST_UNORDERED_LOCAL_ITERATOR& operator++() { ptr_ = ptr_->next_; return *this; } + BOOST_UNORDERED_LOCAL_ITERATOR operator++(int) { BOOST_UNORDERED_LOCAL_ITERATOR tmp(ptr_); ptr_ = ptr_->next_; return tmp; } + bool operator==(BOOST_UNORDERED_LOCAL_ITERATOR x) const { return ptr_ == x.ptr_; } + bool operator==(const_local_iterator x) const { return ptr_ == x.ptr_; } + bool operator!=(BOOST_UNORDERED_LOCAL_ITERATOR x) const { return ptr_ != x.ptr_; } + bool operator!=(const_local_iterator x) const { return ptr_ != x.ptr_; } + }; + + template + class BOOST_UNORDERED_CONST_LOCAL_ITERATOR + : public boost::iterator < + std::forward_iterator_tag, + BOOST_DEDUCED_TYPENAME allocator_value_type::type, + std::ptrdiff_t, + BOOST_DEDUCED_TYPENAME allocator_const_pointer::type, + BOOST_DEDUCED_TYPENAME allocator_const_reference::type > + { + public: + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + + private: + typedef BOOST_UNORDERED_TABLE_DATA data; + typedef BOOST_DEDUCED_TYPENAME data::link_ptr ptr; + typedef BOOST_UNORDERED_LOCAL_ITERATOR local_iterator; + friend class BOOST_UNORDERED_LOCAL_ITERATOR; + ptr ptr_; + + public: + BOOST_UNORDERED_CONST_LOCAL_ITERATOR() : ptr_() { + BOOST_UNORDERED_MSVC_RESET_PTR(ptr_); + } + explicit BOOST_UNORDERED_CONST_LOCAL_ITERATOR(ptr x) : ptr_(x) {} + BOOST_UNORDERED_CONST_LOCAL_ITERATOR(local_iterator x) : ptr_(x.ptr_) {} + BOOST_DEDUCED_TYPENAME allocator_const_reference::type + operator*() const { return data::get_value(ptr_); } + value_type const* operator->() const { return &data::get_value(ptr_); } + BOOST_UNORDERED_CONST_LOCAL_ITERATOR& operator++() { ptr_ = ptr_->next_; return *this; } + BOOST_UNORDERED_CONST_LOCAL_ITERATOR operator++(int) { BOOST_UNORDERED_CONST_LOCAL_ITERATOR tmp(ptr_); ptr_ = ptr_->next_; return tmp; } + bool operator==(local_iterator x) const { return ptr_ == x.ptr_; } + bool operator==(BOOST_UNORDERED_CONST_LOCAL_ITERATOR x) const { return ptr_ == x.ptr_; } + bool operator!=(local_iterator x) const { return ptr_ != x.ptr_; } + bool operator!=(BOOST_UNORDERED_CONST_LOCAL_ITERATOR x) const { return ptr_ != x.ptr_; } + }; + + // iterators + // + // all no throw + + + template + class BOOST_UNORDERED_ITERATOR + : public boost::iterator < + std::forward_iterator_tag, + BOOST_DEDUCED_TYPENAME allocator_value_type::type, + std::ptrdiff_t, + BOOST_DEDUCED_TYPENAME allocator_pointer::type, + BOOST_DEDUCED_TYPENAME allocator_reference::type > + { + public: + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + + private: + typedef BOOST_DEDUCED_TYPENAME BOOST_UNORDERED_TABLE_DATA::iterator_base base; + typedef BOOST_UNORDERED_CONST_ITERATOR const_iterator; + friend class BOOST_UNORDERED_CONST_ITERATOR; + base base_; + + public: + + BOOST_UNORDERED_ITERATOR() : base_() {} + explicit BOOST_UNORDERED_ITERATOR(base const& x) : base_(x) {} + BOOST_DEDUCED_TYPENAME allocator_reference::type + operator*() const { return *base_; } + value_type* operator->() const { return &*base_; } + BOOST_UNORDERED_ITERATOR& operator++() { base_.increment(); return *this; } + BOOST_UNORDERED_ITERATOR operator++(int) { BOOST_UNORDERED_ITERATOR tmp(base_); base_.increment(); return tmp; } + bool operator==(BOOST_UNORDERED_ITERATOR const& x) const { return base_ == x.base_; } + bool operator==(const_iterator const& x) const { return base_ == x.base_; } + bool operator!=(BOOST_UNORDERED_ITERATOR const& x) const { return base_ != x.base_; } + bool operator!=(const_iterator const& x) const { return base_ != x.base_; } + }; + + template + class BOOST_UNORDERED_CONST_ITERATOR + : public boost::iterator < + std::forward_iterator_tag, + BOOST_DEDUCED_TYPENAME allocator_value_type::type, + std::ptrdiff_t, + BOOST_DEDUCED_TYPENAME allocator_const_pointer::type, + BOOST_DEDUCED_TYPENAME allocator_const_reference::type > + { + public: + typedef BOOST_DEDUCED_TYPENAME allocator_value_type::type value_type; + + private: + typedef BOOST_DEDUCED_TYPENAME BOOST_UNORDERED_TABLE_DATA::iterator_base base; + typedef BOOST_UNORDERED_ITERATOR iterator; + friend class BOOST_UNORDERED_ITERATOR; + friend class iterator_access; + base base_; + + public: + + BOOST_UNORDERED_CONST_ITERATOR() : base_() {} + explicit BOOST_UNORDERED_CONST_ITERATOR(base const& x) : base_(x) {} + BOOST_UNORDERED_CONST_ITERATOR(iterator const& x) : base_(x.base_) {} + BOOST_DEDUCED_TYPENAME allocator_const_reference::type + operator*() const { return *base_; } + value_type const* operator->() const { return &*base_; } + BOOST_UNORDERED_CONST_ITERATOR& operator++() { base_.increment(); return *this; } + BOOST_UNORDERED_CONST_ITERATOR operator++(int) { BOOST_UNORDERED_CONST_ITERATOR tmp(base_); base_.increment(); return tmp; } + bool operator==(iterator const& x) const { return base_ == x.base_; } + bool operator==(BOOST_UNORDERED_CONST_ITERATOR const& x) const { return base_ == x.base_; } + bool operator!=(iterator const& x) const { return base_ != x.base_; } + bool operator!=(BOOST_UNORDERED_CONST_ITERATOR const& x) const { return base_ != x.base_; } + }; + } +} + +#undef BOOST_UNORDERED_TABLE +#undef BOOST_UNORDERED_TABLE_DATA +#undef BOOST_UNORDERED_ITERATOR +#undef BOOST_UNORDERED_CONST_ITERATOR +#undef BOOST_UNORDERED_LOCAL_ITERATOR +#undef BOOST_UNORDERED_CONST_LOCAL_ITERATOR diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/move.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/move.hpp new file mode 100644 index 00000000..95baa78b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/detail/move.hpp @@ -0,0 +1,228 @@ +/* + Copyright 2005-2007 Adobe Systems Incorporated + + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ + +/*************************************************************************************************/ + +#ifndef BOOST_UNORDERED_DETAIL_MOVE_HEADER +#define BOOST_UNORDERED_DETAIL_MOVE_HEADER + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*************************************************************************************************/ + +namespace boost { +namespace unordered_detail { + +/*************************************************************************************************/ + +namespace move_detail { + +/*************************************************************************************************/ + +#if !defined(BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN) + +/*************************************************************************************************/ + +template +struct class_has_move_assign { + class type { + typedef T& (T::*E)(T t); + typedef char (&no_type)[1]; + typedef char (&yes_type)[2]; + template struct sfinae { typedef yes_type type; }; + template + static typename sfinae<&U::operator=>::type test(int); + template + static no_type test(...); + public: + enum {value = sizeof(test(1)) == sizeof(yes_type)}; + }; + }; + +/*************************************************************************************************/ + +template +struct has_move_assign : boost::mpl::and_, class_has_move_assign > {}; + +/*************************************************************************************************/ + +class test_can_convert_anything { }; + +/*************************************************************************************************/ + +#endif // BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN + +/*************************************************************************************************/ + +/* + REVISIT (sparent@adobe.com): This is a work around for Boost 1.34.1 and VC++ 2008 where + boost::is_convertible fails to compile. +*/ + +template +struct is_convertible : boost::mpl::or_< + boost::is_same, + boost::is_convertible +> { }; + +/*************************************************************************************************/ + +} //namespace move_detail + + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief move_from is used for move_ctors. +*/ + +template +struct move_from +{ + explicit move_from(T& x) : source(x) { } + T& source; +}; + +/*************************************************************************************************/ + +#if !defined(BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN) + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief The is_movable trait can be used to identify movable types. +*/ +template +struct is_movable : boost::mpl::and_< + boost::is_convertible, T>, + move_detail::has_move_assign, + boost::mpl::not_ > + > { }; + +/*************************************************************************************************/ + +#else // BOOST_UNORDERED_NO_HAS_MOVE_ASSIGN + +// On compilers which don't have adequate SFINAE support, treat most types as unmovable, +// unless the trait is specialized. + +template +struct is_movable : boost::mpl::false_ { }; + +#endif + +/*************************************************************************************************/ + +#if !defined(BOOST_NO_SFINAE) + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief copy_sink and move_sink are used to select between overloaded operations according to + whether type T is movable and convertible to type U. +\sa move +*/ + +template +struct copy_sink : boost::enable_if< + boost::mpl::and_< + boost::unordered_detail::move_detail::is_convertible, + boost::mpl::not_ > + >, + R + > +{ }; + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief move_sink and copy_sink are used to select between overloaded operations according to + whether type T is movable and convertible to type U. + \sa move +*/ + +template +struct move_sink : boost::enable_if< + boost::mpl::and_< + boost::unordered_detail::move_detail::is_convertible, + is_movable + >, + R + > +{ }; + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief This version of move is selected when T is_movable . It in turn calls the move +constructor. This call, with the help of the return value optimization, will cause x to be moved +instead of copied to its destination. See adobe/test/move/main.cpp for examples. + +*/ +template +T move(T& x, typename move_sink::type = 0) { return T(move_from(x)); } + +/*************************************************************************************************/ + +/*! +\ingroup move_related +\brief This version of move is selected when T is not movable . The net result will be that +x gets copied. +*/ +template +T& move(T& x, typename copy_sink::type = 0) { return x; } + +/*************************************************************************************************/ + +#else // BOOST_NO_SFINAE + +// On compilers without SFINAE, define copy_sink to always use the copy function. + +template +struct copy_sink +{ + typedef R type; +}; + +// Always copy the element unless this is overloaded. + +template +T& move(T& x) { + return x; +} + +#endif // BOOST_NO_SFINAE + +} // namespace unordered_detail +} // namespace boost + +/*************************************************************************************************/ + +#endif + +/*************************************************************************************************/ diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map.hpp new file mode 100644 index 00000000..a6ae1af6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map.hpp @@ -0,0 +1,957 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/unordered for documentation + +#ifndef BOOST_UNORDERED_UNORDERED_MAP_HPP_INCLUDED +#define BOOST_UNORDERED_UNORDERED_MAP_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include + +#if !defined(BOOST_HAS_RVALUE_REFS) +#include +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:4396) //the inline specifier cannot be used when a + // friend declaration refers to a specialization + // of a function template +#endif +#endif + +namespace boost +{ + template + class unordered_map + { +#if BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + public: +#endif + typedef boost::unordered_detail::hash_types_unique_keys< + std::pair, Key, Hash, Pred, Alloc + > implementation; + + BOOST_DEDUCED_TYPENAME implementation::hash_table base; + + public: + + // types + + typedef Key key_type; + typedef std::pair value_type; + typedef T mapped_type; + typedef Hash hasher; + typedef Pred key_equal; + + typedef Alloc allocator_type; + typedef BOOST_DEDUCED_TYPENAME allocator_type::pointer pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_pointer const_pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::reference reference; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_reference const_reference; + + typedef BOOST_DEDUCED_TYPENAME implementation::size_type size_type; + typedef BOOST_DEDUCED_TYPENAME implementation::difference_type difference_type; + + typedef BOOST_DEDUCED_TYPENAME implementation::iterator iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator const_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::local_iterator local_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator const_local_iterator; + + // construct/destroy/copy + + explicit unordered_map( + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(n, hf, eql, a) + { + } + + explicit unordered_map(allocator_type const& a) + : base(boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), a) + { + } + + unordered_map(unordered_map const& other, allocator_type const& a) + : base(other.base, a) + { + } + + template + unordered_map(InputIterator f, InputIterator l) + : base(f, l, boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), allocator_type()) + { + } + + template + unordered_map(InputIterator f, InputIterator l, + size_type n, + const hasher &hf = hasher(), + const key_equal &eql = key_equal()) + : base(f, l, n, hf, eql, allocator_type()) + { + } + + template + unordered_map(InputIterator f, InputIterator l, + size_type n, + const hasher &hf, + const key_equal &eql, + const allocator_type &a) + : base(f, l, n, hf, eql, a) + { + } + + ~unordered_map() {} + +#if defined(BOOST_HAS_RVALUE_REFS) + unordered_map(unordered_map&& other) + : base(other.base, boost::unordered_detail::move_tag()) + { + } + + unordered_map(unordered_map&& other, allocator_type const& a) + : base(other.base, a, boost::unordered_detail::move_tag()) + { + } + + unordered_map& operator=(unordered_map&& x) + { + base.move(x.base); + return *this; + } +#else + unordered_map(boost::unordered_detail::move_from > other) + : base(other.source.base, boost::unordered_detail::move_tag()) + { + } + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0593) + unordered_map& operator=(unordered_map x) + { + base.move(x.base); + return *this; + } +#endif +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) + unordered_map(std::initializer_list list, + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(list.begin(), list.end(), n, hf, eql, a) + { + } + + unordered_map& operator=(std::initializer_list list) + { + base.data_.clear(); + base.insert_range(list.begin(), list.end()); + return *this; + } +#endif + + private: + + BOOST_DEDUCED_TYPENAME implementation::iterator_base const& + get(const_iterator const& it) + { + return boost::unordered_detail::iterator_access::get(it); + } + + public: + + allocator_type get_allocator() const + { + return base.get_allocator(); + } + + // size and capacity + + bool empty() const + { + return base.empty(); + } + + size_type size() const + { + return base.size(); + } + + size_type max_size() const + { + return base.max_size(); + } + + // iterators + + iterator begin() + { + return iterator(base.data_.begin()); + } + + const_iterator begin() const + { + return const_iterator(base.data_.begin()); + } + + iterator end() + { + return iterator(base.data_.end()); + } + + const_iterator end() const + { + return const_iterator(base.data_.end()); + } + + const_iterator cbegin() const + { + return const_iterator(base.data_.begin()); + } + + const_iterator cend() const + { + return const_iterator(base.data_.end()); + } + + // modifiers + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + std::pair emplace(Args&&... args) + { + return boost::unordered_detail::pair_cast( + base.emplace(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return iterator(base.emplace_hint(get(hint), std::forward(args)...)); + } +#else + + std::pair emplace(value_type const& v = value_type()) + { + return boost::unordered_detail::pair_cast( + base.emplace(v)); + } + + iterator emplace_hint(const_iterator hint, value_type const& v = value_type()) + { + return iterator(base.emplace_hint(get(hint), v)); + } + +#define BOOST_UNORDERED_EMPLACE(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + std::pair emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return boost::unordered_detail::pair_cast( \ + base.emplace( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace_hint(const_iterator hint, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator(base.emplace_hint(get(hint), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_EMPLACE, _) + +#undef BOOST_UNORDERED_EMPLACE + +#endif + + std::pair insert(const value_type& obj) + { + return boost::unordered_detail::pair_cast( + base.emplace(obj)); + } + + iterator insert(const_iterator hint, const value_type& obj) + { + return iterator(base.emplace_hint(get(hint), obj)); + } + + template + void insert(InputIterator first, InputIterator last) + { + base.insert_range(first, last); + } + + iterator erase(const_iterator position) + { + return iterator(base.data_.erase(get(position))); + } + + size_type erase(const key_type& k) + { + return base.erase_key(k); + } + + iterator erase(const_iterator first, const_iterator last) + { + return iterator(base.data_.erase_range(get(first), get(last))); + } + + void clear() + { + base.data_.clear(); + } + + void swap(unordered_map& other) + { + base.swap(other.base); + } + + // observers + + hasher hash_function() const + { + return base.hash_function(); + } + + key_equal key_eq() const + { + return base.key_eq(); + } + + mapped_type& operator[](const key_type &k) + { + return base[k].second; + } + + mapped_type& at(const key_type& k) + { + return base.at(k).second; + } + + mapped_type const& at(const key_type& k) const + { + return base.at(k).second; + } + + // lookup + + iterator find(const key_type& k) + { + return iterator(base.find(k)); + } + + const_iterator find(const key_type& k) const + { + return const_iterator(base.find(k)); + } + + size_type count(const key_type& k) const + { + return base.count(k); + } + + std::pair + equal_range(const key_type& k) + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + std::pair + equal_range(const key_type& k) const + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + // bucket interface + + size_type bucket_count() const + { + return base.bucket_count(); + } + + size_type max_bucket_count() const + { + return base.max_bucket_count(); + } + + size_type bucket_size(size_type n) const + { + return base.data_.bucket_size(n); + } + + size_type bucket(const key_type& k) const + { + return base.bucket(k); + } + + local_iterator begin(size_type n) + { + return local_iterator(base.data_.begin(n)); + } + + const_local_iterator begin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + local_iterator end(size_type n) + { + return local_iterator(base.data_.end(n)); + } + + const_local_iterator end(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + const_local_iterator cbegin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + const_local_iterator cend(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + // hash policy + + float load_factor() const + { + return base.load_factor(); + } + + float max_load_factor() const + { + return base.max_load_factor(); + } + + void max_load_factor(float m) + { + base.max_load_factor(m); + } + + void rehash(size_type n) + { + base.rehash(n); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + friend bool operator==(unordered_map const&, unordered_map const&); + friend bool operator!=(unordered_map const&, unordered_map const&); +#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + friend bool operator==(unordered_map const&, unordered_map const&); + friend bool operator!=(unordered_map const&, unordered_map const&); +#endif + }; // class template unordered_map + + template + inline bool operator==(unordered_map const& m1, + unordered_map const& m2) + { + return boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline bool operator!=(unordered_map const& m1, + unordered_map const& m2) + { + return !boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline void swap(unordered_map &m1, + unordered_map &m2) + { + m1.swap(m2); + } + + template + class unordered_multimap + { +#if BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + public: +#endif + typedef boost::unordered_detail::hash_types_equivalent_keys< + std::pair, Key, Hash, Pred, Alloc + > implementation; + + BOOST_DEDUCED_TYPENAME implementation::hash_table base; + + public: + + // types + + typedef Key key_type; + typedef std::pair value_type; + typedef T mapped_type; + typedef Hash hasher; + typedef Pred key_equal; + + typedef Alloc allocator_type; + typedef BOOST_DEDUCED_TYPENAME allocator_type::pointer pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_pointer const_pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::reference reference; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_reference const_reference; + + typedef BOOST_DEDUCED_TYPENAME implementation::size_type size_type; + typedef BOOST_DEDUCED_TYPENAME implementation::difference_type difference_type; + + typedef BOOST_DEDUCED_TYPENAME implementation::iterator iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator const_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::local_iterator local_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator const_local_iterator; + + // construct/destroy/copy + + explicit unordered_multimap( + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(n, hf, eql, a) + { + } + + explicit unordered_multimap(allocator_type const& a) + : base(boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), a) + { + } + + unordered_multimap(unordered_multimap const& other, allocator_type const& a) + : base(other.base, a) + { + } + + template + unordered_multimap(InputIterator f, InputIterator l) + : base(f, l, boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), allocator_type()) + { + } + + template + unordered_multimap(InputIterator f, InputIterator l, + size_type n, + const hasher &hf = hasher(), + const key_equal &eql = key_equal()) + : base(f, l, n, hf, eql, allocator_type()) + { + } + + template + unordered_multimap(InputIterator f, InputIterator l, + size_type n, + const hasher &hf, + const key_equal &eql, + const allocator_type &a) + : base(f, l, n, hf, eql, a) + { + } + + ~unordered_multimap() {} + +#if defined(BOOST_HAS_RVALUE_REFS) + unordered_multimap(unordered_multimap&& other) + : base(other.base, boost::unordered_detail::move_tag()) + { + } + + unordered_multimap(unordered_multimap&& other, allocator_type const& a) + : base(other.base, a, boost::unordered_detail::move_tag()) + { + } + + unordered_multimap& operator=(unordered_multimap&& x) + { + base.move(x.base); + return *this; + } +#else + unordered_multimap(boost::unordered_detail::move_from > other) + : base(other.source.base, boost::unordered_detail::move_tag()) + { + } + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0593) + unordered_multimap& operator=(unordered_multimap x) + { + base.move(x.base); + return *this; + } +#endif +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) + unordered_multimap(std::initializer_list list, + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(list.begin(), list.end(), n, hf, eql, a) + { + } + + unordered_multimap& operator=(std::initializer_list list) + { + base.data_.clear(); + base.insert_range(list.begin(), list.end()); + return *this; + } +#endif + + + private: + + BOOST_DEDUCED_TYPENAME implementation::iterator_base const& + get(const_iterator const& it) + { + return boost::unordered_detail::iterator_access::get(it); + } + + public: + + allocator_type get_allocator() const + { + return base.get_allocator(); + } + + // size and capacity + + bool empty() const + { + return base.empty(); + } + + size_type size() const + { + return base.size(); + } + + size_type max_size() const + { + return base.max_size(); + } + + // iterators + + iterator begin() + { + return iterator(base.data_.begin()); + } + + const_iterator begin() const + { + return const_iterator(base.data_.begin()); + } + + iterator end() + { + return iterator(base.data_.end()); + } + + const_iterator end() const + { + return const_iterator(base.data_.end()); + } + + const_iterator cbegin() const + { + return const_iterator(base.data_.begin()); + } + + const_iterator cend() const + { + return const_iterator(base.data_.end()); + } + + // modifiers + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + iterator emplace(Args&&... args) + { + return iterator(base.emplace(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return iterator(base.emplace_hint(get(hint), std::forward(args)...)); + } +#else + + iterator emplace(value_type const& v = value_type()) + { + return iterator(base.emplace(v)); + } + + iterator emplace_hint(const_iterator hint, value_type const& v = value_type()) + { + return iterator(base.emplace_hint(get(hint), v)); + } + + +#define BOOST_UNORDERED_EMPLACE(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator( \ + base.emplace( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace_hint(const_iterator hint, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator(base.emplace_hint(get(hint), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_EMPLACE, _) + +#undef BOOST_UNORDERED_EMPLACE + +#endif + + iterator insert(const value_type& obj) + { + return iterator(base.emplace(obj)); + } + + iterator insert(const_iterator hint, const value_type& obj) + { + return iterator(base.emplace_hint(get(hint), obj)); + } + + template + void insert(InputIterator first, InputIterator last) + { + base.insert_range(first, last); + } + + iterator erase(const_iterator position) + { + return iterator(base.data_.erase(get(position))); + } + + size_type erase(const key_type& k) + { + return base.erase_key(k); + } + + iterator erase(const_iterator first, const_iterator last) + { + return iterator(base.data_.erase_range(get(first), get(last))); + } + + void clear() + { + base.data_.clear(); + } + + void swap(unordered_multimap& other) + { + base.swap(other.base); + } + + // observers + + hasher hash_function() const + { + return base.hash_function(); + } + + key_equal key_eq() const + { + return base.key_eq(); + } + + // lookup + + iterator find(const key_type& k) + { + return iterator(base.find(k)); + } + + const_iterator find(const key_type& k) const + { + return const_iterator(base.find(k)); + } + + size_type count(const key_type& k) const + { + return base.count(k); + } + + std::pair + equal_range(const key_type& k) + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + std::pair + equal_range(const key_type& k) const + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + // bucket interface + + size_type bucket_count() const + { + return base.bucket_count(); + } + + size_type max_bucket_count() const + { + return base.max_bucket_count(); + } + + size_type bucket_size(size_type n) const + { + return base.data_.bucket_size(n); + } + + size_type bucket(const key_type& k) const + { + return base.bucket(k); + } + + local_iterator begin(size_type n) + { + return local_iterator(base.data_.begin(n)); + } + + const_local_iterator begin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + local_iterator end(size_type n) + { + return local_iterator(base.data_.end(n)); + } + + const_local_iterator end(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + const_local_iterator cbegin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + const_local_iterator cend(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + // hash policy + + float load_factor() const + { + return base.load_factor(); + } + + float max_load_factor() const + { + return base.max_load_factor(); + } + + void max_load_factor(float m) + { + base.max_load_factor(m); + } + + void rehash(size_type n) + { + base.rehash(n); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + friend bool operator==(unordered_multimap const&, unordered_multimap const&); + friend bool operator!=(unordered_multimap const&, unordered_multimap const&); +#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + friend bool operator==(unordered_multimap const&, unordered_multimap const&); + friend bool operator!=(unordered_multimap const&, unordered_multimap const&); +#endif + }; // class template unordered_multimap + + template + inline bool operator==(unordered_multimap const& m1, + unordered_multimap const& m2) + { + return boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline bool operator!=(unordered_multimap const& m1, + unordered_multimap const& m2) + { + return !boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline void swap(unordered_multimap &m1, + unordered_multimap &m2) + { + m1.swap(m2); + } + +} // namespace boost + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_UNORDERED_UNORDERED_MAP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map_fwd.hpp new file mode 100644 index 00000000..90f8ce58 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_map_fwd.hpp @@ -0,0 +1,53 @@ + +// Copyright (C) 2008-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNORDERED_MAP_FWD_HPP_INCLUDED +#define BOOST_UNORDERED_MAP_FWD_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include +#include + +namespace boost +{ + template , + class Pred = std::equal_to, + class Alloc = std::allocator > > + class unordered_map; + template + bool operator==(unordered_map const&, + unordered_map const&); + template + bool operator!=(unordered_map const&, + unordered_map const&); + template + void swap(unordered_map&, + unordered_map&); + + template , + class Pred = std::equal_to, + class Alloc = std::allocator > > + class unordered_multimap; + template + bool operator==(unordered_multimap const&, + unordered_multimap const&); + template + bool operator!=(unordered_multimap const&, + unordered_multimap const&); + template + void swap(unordered_multimap&, + unordered_multimap&); +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set.hpp new file mode 100644 index 00000000..71a43996 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set.hpp @@ -0,0 +1,911 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/unordered for documentation + +#ifndef BOOST_UNORDERED_UNORDERED_SET_HPP_INCLUDED +#define BOOST_UNORDERED_UNORDERED_SET_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include + +#if !defined(BOOST_HAS_RVALUE_REFS) +#include +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:4396) //the inline specifier cannot be used when a + // friend declaration refers to a specialization + // of a function template +#endif +#endif + +namespace boost +{ + template + class unordered_set + { +#if BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + public: +#endif + typedef boost::unordered_detail::hash_types_unique_keys< + Value, Value, Hash, Pred, Alloc + > implementation; + + BOOST_DEDUCED_TYPENAME implementation::hash_table base; + + public: + + // types + + typedef Value key_type; + typedef Value value_type; + typedef Hash hasher; + typedef Pred key_equal; + + typedef Alloc allocator_type; + typedef BOOST_DEDUCED_TYPENAME allocator_type::pointer pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_pointer const_pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::reference reference; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_reference const_reference; + + typedef BOOST_DEDUCED_TYPENAME implementation::size_type size_type; + typedef BOOST_DEDUCED_TYPENAME implementation::difference_type difference_type; + + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator const_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator local_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator const_local_iterator; + + // construct/destroy/copy + + explicit unordered_set( + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(n, hf, eql, a) + { + } + + explicit unordered_set(allocator_type const& a) + : base(boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), a) + { + } + + unordered_set(unordered_set const& other, allocator_type const& a) + : base(other.base, a) + { + } + + template + unordered_set(InputIterator f, InputIterator l) + : base(f, l, boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), allocator_type()) + { + } + + template + unordered_set(InputIterator f, InputIterator l, size_type n, + const hasher &hf = hasher(), + const key_equal &eql = key_equal()) + : base(f, l, n, hf, eql, allocator_type()) + { + } + + template + unordered_set(InputIterator f, InputIterator l, size_type n, + const hasher &hf, + const key_equal &eql, + const allocator_type &a) + : base(f, l, n, hf, eql, a) + { + } + + ~unordered_set() {} + +#if defined(BOOST_HAS_RVALUE_REFS) + unordered_set(unordered_set&& other) + : base(other.base, boost::unordered_detail::move_tag()) + { + } + + unordered_set(unordered_set&& other, allocator_type const& a) + : base(other.base, a, boost::unordered_detail::move_tag()) + { + } + + unordered_set& operator=(unordered_set&& x) + { + base.move(x.base); + return *this; + } +#else + unordered_set(boost::unordered_detail::move_from > other) + : base(other.source.base, boost::unordered_detail::move_tag()) + { + } + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0593) + unordered_set& operator=(unordered_set x) + { + base.move(x.base); + return *this; + } +#endif +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) + unordered_set(std::initializer_list list, + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(list.begin(), list.end(), n, hf, eql, a) + { + } + + unordered_set& operator=(std::initializer_list list) + { + base.data_.clear(); + base.insert_range(list.begin(), list.end()); + return *this; + } +#endif + + private: + + BOOST_DEDUCED_TYPENAME implementation::iterator_base const& + get(const_iterator const& it) + { + return boost::unordered_detail::iterator_access::get(it); + } + + public: + + allocator_type get_allocator() const + { + return base.get_allocator(); + } + + // size and capacity + + bool empty() const + { + return base.empty(); + } + + size_type size() const + { + return base.size(); + } + + size_type max_size() const + { + return base.max_size(); + } + + // iterators + + iterator begin() + { + return iterator(base.data_.begin()); + } + + const_iterator begin() const + { + return const_iterator(base.data_.begin()); + } + + iterator end() + { + return iterator(base.data_.end()); + } + + const_iterator end() const + { + return const_iterator(base.data_.end()); + } + + const_iterator cbegin() const + { + return const_iterator(base.data_.begin()); + } + + const_iterator cend() const + { + return const_iterator(base.data_.end()); + } + + // modifiers + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + std::pair emplace(Args&&... args) + { + return boost::unordered_detail::pair_cast( + base.emplace(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return iterator( + base.emplace_hint(get(hint), std::forward(args)...)); + } +#else + + std::pair emplace(value_type const& v = value_type()) + { + return boost::unordered_detail::pair_cast( + base.emplace(v)); + } + + iterator emplace_hint(const_iterator hint, value_type const& v = value_type()) + { + return iterator(base.emplace_hint(get(hint), v)); + } + +#define BOOST_UNORDERED_EMPLACE(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + std::pair emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return boost::unordered_detail::pair_cast( \ + base.emplace( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace_hint(const_iterator hint, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator(base.emplace_hint(get(hint), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_EMPLACE, _) + +#undef BOOST_UNORDERED_EMPLACE + +#endif + + std::pair insert(const value_type& obj) + { + return boost::unordered_detail::pair_cast( + base.emplace(obj)); + } + + iterator insert(const_iterator hint, const value_type& obj) + { + return iterator(base.emplace_hint(get(hint), obj)); + } + + template + void insert(InputIterator first, InputIterator last) + { + base.insert_range(first, last); + } + + iterator erase(const_iterator position) + { + return iterator(base.data_.erase(get(position))); + } + + size_type erase(const key_type& k) + { + return base.erase_key(k); + } + + iterator erase(const_iterator first, const_iterator last) + { + return iterator(base.data_.erase_range(get(first), get(last))); + } + + void clear() + { + base.data_.clear(); + } + + void swap(unordered_set& other) + { + base.swap(other.base); + } + + // observers + + hasher hash_function() const + { + return base.hash_function(); + } + + key_equal key_eq() const + { + return base.key_eq(); + } + + // lookup + + const_iterator find(const key_type& k) const + { + return const_iterator(base.find(k)); + } + + size_type count(const key_type& k) const + { + return base.count(k); + } + + std::pair + equal_range(const key_type& k) const + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + // bucket interface + + size_type bucket_count() const + { + return base.bucket_count(); + } + + size_type max_bucket_count() const + { + return base.max_bucket_count(); + } + + size_type bucket_size(size_type n) const + { + return base.data_.bucket_size(n); + } + + size_type bucket(const key_type& k) const + { + return base.bucket(k); + } + + local_iterator begin(size_type n) + { + return local_iterator(base.data_.begin(n)); + } + + const_local_iterator begin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + local_iterator end(size_type n) + { + return local_iterator(base.data_.end(n)); + } + + const_local_iterator end(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + const_local_iterator cbegin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + const_local_iterator cend(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + // hash policy + + float load_factor() const + { + return base.load_factor(); + } + + float max_load_factor() const + { + return base.max_load_factor(); + } + + void max_load_factor(float m) + { + base.max_load_factor(m); + } + + void rehash(size_type n) + { + base.rehash(n); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + friend bool operator==(unordered_set const&, unordered_set const&); + friend bool operator!=(unordered_set const&, unordered_set const&); +#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + friend bool operator==(unordered_set const&, unordered_set const&); + friend bool operator!=(unordered_set const&, unordered_set const&); +#endif + }; // class template unordered_set + + template + inline bool operator==(unordered_set const& m1, + unordered_set const& m2) + { + return boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline bool operator!=(unordered_set const& m1, + unordered_set const& m2) + { + return !boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline void swap(unordered_set &m1, + unordered_set &m2) + { + m1.swap(m2); + } + + template + class unordered_multiset + { +#if BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + public: +#endif + typedef boost::unordered_detail::hash_types_equivalent_keys< + Value, Value, Hash, Pred, Alloc + > implementation; + + BOOST_DEDUCED_TYPENAME implementation::hash_table base; + + public: + + //types + + typedef Value key_type; + typedef Value value_type; + typedef Hash hasher; + typedef Pred key_equal; + + typedef Alloc allocator_type; + typedef BOOST_DEDUCED_TYPENAME allocator_type::pointer pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_pointer const_pointer; + typedef BOOST_DEDUCED_TYPENAME allocator_type::reference reference; + typedef BOOST_DEDUCED_TYPENAME allocator_type::const_reference const_reference; + + typedef BOOST_DEDUCED_TYPENAME implementation::size_type size_type; + typedef BOOST_DEDUCED_TYPENAME implementation::difference_type difference_type; + + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_iterator const_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator local_iterator; + typedef BOOST_DEDUCED_TYPENAME implementation::const_local_iterator const_local_iterator; + + // construct/destroy/copy + + explicit unordered_multiset( + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(n, hf, eql, a) + { + } + + explicit unordered_multiset(allocator_type const& a) + : base(boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), a) + { + } + + unordered_multiset(unordered_multiset const& other, allocator_type const& a) + : base(other.base, a) + { + } + + template + unordered_multiset(InputIterator f, InputIterator l) + : base(f, l, boost::unordered_detail::default_initial_bucket_count, + hasher(), key_equal(), allocator_type()) + { + } + + template + unordered_multiset(InputIterator f, InputIterator l, size_type n, + const hasher &hf = hasher(), + const key_equal &eql = key_equal()) + : base(f, l, n, hf, eql, allocator_type()) + { + } + + template + unordered_multiset(InputIterator f, InputIterator l, size_type n, + const hasher &hf, + const key_equal &eql, + const allocator_type &a) + : base(f, l, n, hf, eql, a) + { + } + + ~unordered_multiset() {} + +#if defined(BOOST_HAS_RVALUE_REFS) + unordered_multiset(unordered_multiset&& other) + : base(other.base, boost::unordered_detail::move_tag()) + { + } + + unordered_multiset(unordered_multiset&& other, allocator_type const& a) + : base(other.base, a, boost::unordered_detail::move_tag()) + { + } + + unordered_multiset& operator=(unordered_multiset&& x) + { + base.move(x.base); + return *this; + } +#else + unordered_multiset(boost::unordered_detail::move_from > other) + : base(other.source.base, boost::unordered_detail::move_tag()) + { + } + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0593) + unordered_multiset& operator=(unordered_multiset x) + { + base.move(x.base); + return *this; + } +#endif +#endif + +#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) + unordered_multiset(std::initializer_list list, + size_type n = boost::unordered_detail::default_initial_bucket_count, + const hasher &hf = hasher(), + const key_equal &eql = key_equal(), + const allocator_type &a = allocator_type()) + : base(list.begin(), list.end(), n, hf, eql, a) + { + } + + unordered_multiset& operator=(std::initializer_list list) + { + base.data_.clear(); + base.insert_range(list.begin(), list.end()); + return *this; + } +#endif + + private: + + BOOST_DEDUCED_TYPENAME implementation::iterator_base const& + get(const_iterator const& it) + { + return boost::unordered_detail::iterator_access::get(it); + } + + public: + + allocator_type get_allocator() const + { + return base.get_allocator(); + } + + // size and capacity + + bool empty() const + { + return base.empty(); + } + + size_type size() const + { + return base.size(); + } + + size_type max_size() const + { + return base.max_size(); + } + + // iterators + + iterator begin() + { + return iterator(base.data_.begin()); + } + + const_iterator begin() const + { + return const_iterator(base.data_.begin()); + } + + iterator end() + { + return iterator(base.data_.end()); + } + + const_iterator end() const + { + return const_iterator(base.data_.end()); + } + + const_iterator cbegin() const + { + return const_iterator(base.data_.begin()); + } + + const_iterator cend() const + { + return const_iterator(base.data_.end()); + } + + // modifiers + +#if defined(BOOST_UNORDERED_STD_FORWARD) + template + iterator emplace(Args&&... args) + { + return iterator(base.emplace(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return iterator(base.emplace_hint(get(hint), std::forward(args)...)); + } +#else + + iterator emplace(value_type const& v = value_type()) + { + return iterator(base.emplace(v)); + } + + iterator emplace_hint(const_iterator hint, value_type const& v = value_type()) + { + return iterator(base.emplace_hint(get(hint), v)); + } + +#define BOOST_UNORDERED_EMPLACE(z, n, _) \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace( \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator( \ + base.emplace( \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } \ + \ + template < \ + BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \ + > \ + iterator emplace_hint(const_iterator hint, \ + BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \ + ) \ + { \ + return iterator(base.emplace_hint(get(hint), \ + BOOST_UNORDERED_CALL_PARAMS(z, n) \ + )); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_EMPLACE, _) + +#undef BOOST_UNORDERED_EMPLACE + +#endif + + iterator insert(const value_type& obj) + { + return iterator(base.emplace(obj)); + } + + iterator insert(const_iterator hint, const value_type& obj) + { + return iterator(base.emplace_hint(get(hint), obj)); + } + + template + void insert(InputIterator first, InputIterator last) + { + base.insert_range(first, last); + } + + iterator erase(const_iterator position) + { + return iterator(base.data_.erase(get(position))); + } + + size_type erase(const key_type& k) + { + return base.erase_key(k); + } + + iterator erase(const_iterator first, const_iterator last) + { + return iterator(base.data_.erase_range(get(first), get(last))); + } + + void clear() + { + base.data_.clear(); + } + + void swap(unordered_multiset& other) + { + base.swap(other.base); + } + + // observers + + hasher hash_function() const + { + return base.hash_function(); + } + + key_equal key_eq() const + { + return base.key_eq(); + } + + // lookup + + const_iterator find(const key_type& k) const + { + return const_iterator(base.find(k)); + } + + size_type count(const key_type& k) const + { + return base.count(k); + } + + std::pair + equal_range(const key_type& k) const + { + return boost::unordered_detail::pair_cast( + base.equal_range(k)); + } + + // bucket interface + + size_type bucket_count() const + { + return base.bucket_count(); + } + + size_type max_bucket_count() const + { + return base.max_bucket_count(); + } + + size_type bucket_size(size_type n) const + { + return base.data_.bucket_size(n); + } + + size_type bucket(const key_type& k) const + { + return base.bucket(k); + } + + local_iterator begin(size_type n) + { + return local_iterator(base.data_.begin(n)); + } + + const_local_iterator begin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + local_iterator end(size_type n) + { + return local_iterator(base.data_.end(n)); + } + + const_local_iterator end(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + const_local_iterator cbegin(size_type n) const + { + return const_local_iterator(base.data_.begin(n)); + } + + const_local_iterator cend(size_type n) const + { + return const_local_iterator(base.data_.end(n)); + } + + // hash policy + + float load_factor() const + { + return base.load_factor(); + } + + float max_load_factor() const + { + return base.max_load_factor(); + } + + void max_load_factor(float m) + { + base.max_load_factor(m); + } + + void rehash(size_type n) + { + base.rehash(n); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + friend bool operator==(unordered_multiset const&, unordered_multiset const&); + friend bool operator!=(unordered_multiset const&, unordered_multiset const&); +#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x0582) + friend bool operator==(unordered_multiset const&, unordered_multiset const&); + friend bool operator!=(unordered_multiset const&, unordered_multiset const&); +#endif + }; // class template unordered_multiset + + template + inline bool operator==(unordered_multiset const& m1, + unordered_multiset const& m2) + { + return boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline bool operator!=(unordered_multiset const& m1, + unordered_multiset const& m2) + { + return !boost::unordered_detail::equals(m1.base, m2.base); + } + + template + inline void swap(unordered_multiset &m1, + unordered_multiset &m2) + { + m1.swap(m2); + } + +} // namespace boost + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_UNORDERED_UNORDERED_SET_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set_fwd.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set_fwd.hpp new file mode 100644 index 00000000..3d16b1d1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered/unordered_set_fwd.hpp @@ -0,0 +1,51 @@ + +// Copyright (C) 2008-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNORDERED_SET_FWD_HPP_INCLUDED +#define BOOST_UNORDERED_SET_FWD_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include +#include + +namespace boost +{ + template , + class Pred = std::equal_to, + class Alloc = std::allocator > + class unordered_set; + template + bool operator==(unordered_set const&, + unordered_set const&); + template + bool operator!=(unordered_set const&, + unordered_set const&); + template + void swap(unordered_set &m1, + unordered_set &m2); + + template , + class Pred = std::equal_to, + class Alloc = std::allocator > + class unordered_multiset; + template + bool operator==(unordered_multiset const&, + unordered_multiset const&); + template + bool operator!=(unordered_multiset const&, + unordered_multiset const&); + template + void swap(unordered_multiset &m1, + unordered_multiset &m2); +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_map.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_map.hpp new file mode 100644 index 00000000..d8182c53 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_map.hpp @@ -0,0 +1,18 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2008 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/unordered for documentation + +#ifndef BOOST_UNORDERED_MAP_HPP_INCLUDED +#define BOOST_UNORDERED_MAP_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +#endif // BOOST_UNORDERED_MAP_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_set.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_set.hpp new file mode 100644 index 00000000..1f29980e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/unordered_set.hpp @@ -0,0 +1,18 @@ + +// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. +// Copyright (C) 2005-2008 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/unordered for documentation + +#ifndef BOOST_UNORDERED_SET_HPP_INCLUDED +#define BOOST_UNORDERED_SET_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +#endif // BOOST_UNORDERED_SET_HPP_INCLUDED diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/utility/enable_if.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/utility/enable_if.hpp new file mode 100644 index 00000000..b0b76aaa --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/utility/enable_if.hpp @@ -0,0 +1,119 @@ +// Boost enable_if library + +// Copyright 2003 (c) The Trustees of Indiana University. + +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu) +// Jeremiah Willcock (jewillco at osl.iu.edu) +// Andrew Lumsdaine (lums at osl.iu.edu) + + +#ifndef BOOST_UTILITY_ENABLE_IF_HPP +#define BOOST_UTILITY_ENABLE_IF_HPP + +#include "carve/external/boost/config.hpp" + +// Even the definition of enable_if causes problems on some compilers, +// so it's macroed out for all compilers that do not support SFINAE + +#ifndef BOOST_NO_SFINAE + +namespace boost +{ + + template + struct enable_if_c { + typedef T type; + }; + + template + struct enable_if_c {}; + + template + struct enable_if : public enable_if_c {}; + + template + struct lazy_enable_if_c { + typedef typename T::type type; + }; + + template + struct lazy_enable_if_c {}; + + template + struct lazy_enable_if : public lazy_enable_if_c {}; + + + template + struct disable_if_c { + typedef T type; + }; + + template + struct disable_if_c {}; + + template + struct disable_if : public disable_if_c {}; + + template + struct lazy_disable_if_c { + typedef typename T::type type; + }; + + template + struct lazy_disable_if_c {}; + + template + struct lazy_disable_if : public lazy_disable_if_c {}; + +} // namespace boost + +#else + +namespace boost { + + namespace detail { typedef void enable_if_default_T; } + + template + struct enable_if_does_not_work_on_this_compiler; + + template + struct enable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct disable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct enable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct disable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_enable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_disable_if : enable_if_does_not_work_on_this_compiler + { }; + +} // namespace boost + +#endif // BOOST_NO_SFINAE + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/external/boost/utility/swap.hpp b/thirdparty/carve-1.4.0/include/carve/external/boost/utility/swap.hpp new file mode 100644 index 00000000..6845e796 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/external/boost/utility/swap.hpp @@ -0,0 +1,55 @@ +// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// For more information, see http://www.boost.org + + +#ifndef BOOST_UTILITY_SWAP_HPP +#define BOOST_UTILITY_SWAP_HPP + +// Note: the implementation of this utility contains various workarounds: +// - swap_impl is put outside the boost namespace, to avoid infinite +// recursion (causing stack overflow) when swapping objects of a primitive +// type. +// - swap_impl has a using-directive, rather than a using-declaration, +// because some compilers (including MSVC 7.1, Borland 5.9.3, and +// Intel 8.1) don't do argument-dependent lookup when it has a +// using-declaration instead. +// - boost::swap has two template arguments, instead of one, to +// avoid ambiguity when swapping objects of a Boost type that does +// not have its own boost::swap overload. + +#include //for std::swap +#include //for std::size_t + +namespace boost_swap_impl +{ + template + void swap_impl(T& left, T& right) + { + using namespace std;//use std::swap if argument dependent lookup fails + swap(left,right); + } + + template + void swap_impl(T (& left)[N], T (& right)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + ::boost_swap_impl::swap_impl(left[i], right[i]); + } + } +} + +namespace boost +{ + template + void swap(T1& left, T2& right) + { + ::boost_swap_impl::swap_impl(left, right); + } +} + +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/face_decl.hpp b/thirdparty/carve-1.4.0/include/carve/face_decl.hpp new file mode 100644 index 00000000..c689704a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/face_decl.hpp @@ -0,0 +1,203 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace carve { + namespace poly { + + + + struct Object; + + template + class Edge; + + + + template + struct p2_adapt_project { + typedef carve::geom2d::P2 (*proj_t)(const carve::geom::vector &); + proj_t proj; + p2_adapt_project(proj_t _proj) : proj(_proj) { } + carve::geom2d::P2 operator()(const carve::geom::vector &v) const { return proj(v); } + carve::geom2d::P2 operator()(const carve::geom::vector *v) const { return proj(*v); } + carve::geom2d::P2 operator()(const Vertex &v) const { return proj(v.v); } + carve::geom2d::P2 operator()(const Vertex *v) const { return proj(v->v); } + }; + + + template + class Face : public tagable { + public: + typedef Vertex vertex_t; + typedef typename Vertex::vector_t vector_t; + typedef Edge edge_t; + typedef Object obj_t; + typedef carve::geom::aabb aabb_t; + typedef carve::geom::plane plane_t; + + typedef carve::geom2d::P2 (*project_t)(const vector_t &); + typedef vector_t (*unproject_t)(const carve::geom2d::P2 &, const plane_t &); + + public: + std::vector vertices; // pointer into polyhedron.vertices + std::vector edges; // pointer into polyhedron.edges + + project_t getProjector(bool positive_facing, int axis); + unproject_t getUnprojector(bool positive_facing, int axis); + + public: + typedef typename std::vector::iterator vertex_iter_t; + typedef typename std::vector::const_iterator const_vertex_iter_t; + + typedef typename std::vector::iterator edge_iter_t; + typedef typename std::vector::const_iterator const_edge_iter_t; + + obj_t *owner; + + aabb_t aabb; + plane_t plane_eqn; + int manifold_id; + int group_id; + + project_t project; + unproject_t unproject; + + Face(const std::vector &_vertices, bool delay_recalc = false); + Face(const vertex_t *v1, const vertex_t *v2, const vertex_t *v3, bool delay_recalc = false); + Face(const vertex_t *v1, const vertex_t *v2, const vertex_t *v3, const vertex_t *v4, bool delay_recalc = false); + + Face(const Face *base, const std::vector &_vertices, bool flipped) { + init(base, _vertices, flipped); + } + + Face() {} + ~Face() {} + + bool recalc(); + + template + Face *init(const Face *base, iter_t vbegin, iter_t vend, bool flipped); + Face *init(const Face *base, const std::vector &_vertices, bool flipped); + + template + Face *create(iter_t vbegin, iter_t vend, bool flipped) const; + Face *create(const std::vector &_vertices, bool flipped) const; + + Face *clone(bool flipped = false) const; + void invert(); + + void getVertexLoop(std::vector &loop) const; + + const vertex_t *&vertex(size_t idx); + const vertex_t *vertex(size_t idx) const; + size_t nVertices() const; + + vertex_iter_t vbegin() { return vertices.begin(); } + vertex_iter_t vend() { return vertices.end(); } + const_vertex_iter_t vbegin() const { return vertices.begin(); } + const_vertex_iter_t vend() const { return vertices.end(); } + + std::vector > projectedVertices() const; + + const edge_t *&edge(size_t idx); + const edge_t *edge(size_t idx) const; + size_t nEdges() const; + + edge_iter_t ebegin() { return edges.begin(); } + edge_iter_t eend() { return edges.end(); } + const_edge_iter_t ebegin() const { return edges.begin(); } + const_edge_iter_t eend() const { return edges.end(); } + + bool containsPoint(const vector_t &p) const; + bool containsPointInProjection(const vector_t &p) const; + bool simpleLineSegmentIntersection(const carve::geom::linesegment &line, + vector_t &intersection) const; + IntersectionClass lineSegmentIntersection(const carve::geom::linesegment &line, + vector_t &intersection) const; + vector_t centroid() const; + + p2_adapt_project projector() const { + return p2_adapt_project(project); + } + + void swap(Face &other); + }; + + + + struct hash_face_ptr { + template + size_t operator()(const Face * const &f) const { + return (size_t)f; + } + }; + + + + namespace face { + + + + template + static inline carve::geom2d::P2 project(const Face *f, const typename Face::vector_t &v) { + return f->project(v); + } + + + + template + static inline carve::geom2d::P2 project(const Face &f, const typename Face::vector_t &v) { + return f.project(v); + } + + + + template + static inline typename Face::vector_t unproject(const Face *f, const carve::geom2d::P2 &p) { + return f->unproject(p, f->plane_eqn); + } + + + + template + static inline typename Face::vector_t unproject(const Face &f, const carve::geom2d::P2 &p) { + return f.unproject(p, f.plane_eqn); + } + + + + } + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/face_impl.hpp b/thirdparty/carve-1.4.0/include/carve/face_impl.hpp new file mode 100644 index 00000000..97b0c2d5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/face_impl.hpp @@ -0,0 +1,140 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace std { + template + inline void swap(carve::poly::Face &a, carve::poly::Face &b) { + a.swap(b); + } +} + +namespace carve { + namespace poly { + template + void Face::swap(Face &other) { + std::swap(vertices, other.vertices); + std::swap(edges, other.edges); + std::swap(owner, other.owner); + std::swap(aabb, other.aabb); + std::swap(plane_eqn, other.plane_eqn); + std::swap(manifold_id, other.manifold_id); + std::swap(group_id, other.group_id); + std::swap(project, other.project); + std::swap(unproject, other.unproject); + } + + template + template + Face *Face::init(const Face *base, iter_t vbegin, iter_t vend, bool flipped) { + vertices.reserve(std::distance(vbegin, vend)); + + if (flipped) { + std::reverse_copy(vbegin, vend, std::back_inserter(vertices)); + plane_eqn = -base->plane_eqn; + } else { + std::copy(vbegin, vend, std::back_inserter(vertices)); + plane_eqn = base->plane_eqn; + } + + edges.clear(); + edges.resize(nVertices(), NULL); + + aabb.fit(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr()); + untag(); + + int da = carve::geom::largestAxis(plane_eqn.N); + + project = getProjector(plane_eqn.N.v[da] > 0, da); + unproject = getUnprojector(plane_eqn.N.v[da] > 0, da); + + return this; + } + + template + template + Face *Face::create(iter_t vbegin, iter_t vend, bool flipped) const { + return (new Face)->init(this, vbegin, vend, flipped); + } + + template + Face *Face::create(const std::vector &_vertices, bool flipped) const { + return (new Face)->init(this, _vertices.begin(), _vertices.end(), flipped); + } + + template + Face *Face::clone(bool flipped) const { + return (new Face)->init(this, vertices, flipped); + } + + template + void Face::getVertexLoop(std::vector &loop) const { + loop.resize(nVertices(), NULL); + std::copy(vbegin(), vend(), loop.begin()); + } + + template + const typename Face::edge_t *&Face::edge(size_t idx) { + return edges[idx]; + } + + template + const typename Face::edge_t *Face::edge(size_t idx) const { + return edges[idx]; + } + + template + size_t Face::nEdges() const { + return edges.size(); + } + + template + const typename Face::vertex_t *&Face::vertex(size_t idx) { + return vertices[idx]; + } + + template + const typename Face::vertex_t *Face::vertex(size_t idx) const { + return vertices[idx]; + } + + template + size_t Face::nVertices() const { + return vertices.size(); + } + + template + typename Face::vector_t Face::centroid() const { + vector_t c; + carve::geom::centroid(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr(), c); + return c; + } + + template + std::vector > Face::projectedVertices() const { + p2_adapt_project proj = projector(); + std::vector > result; + result.reserve(nVertices()); + for (size_t i = 0; i < nVertices(); ++i) { + result.push_back(proj(vertex(i)->v)); + } + return result; + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/faceloop.hpp b/thirdparty/carve-1.4.0/include/carve/faceloop.hpp new file mode 100644 index 00000000..2a8b5ce0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/faceloop.hpp @@ -0,0 +1,95 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +namespace carve { + namespace csg { + + struct FaceLoopGroup; + + struct FaceLoop { + FaceLoop *next, *prev; + const carve::poly::Polyhedron::face_t *orig_face; + std::vector vertices; + FaceLoopGroup *group; + + FaceLoop(const carve::poly::Polyhedron::face_t *f, const std::vector &v) : next(NULL), prev(NULL), orig_face(f), vertices(v), group(NULL) {} + }; + + + struct FaceLoopList { + FaceLoop *head, *tail; + unsigned count; + + FaceLoopList() : head(NULL), tail(NULL), count(0) { } + + void append(FaceLoop *f) { + f->prev = tail; + f->next = NULL; + if (tail) tail->next = f; + tail = f; + if (!head) head = f; + count++; + } + void prepend(FaceLoop *f) { + f->next = head; + f->prev = NULL; + if (head) head->prev = f; + head = f; + if (!tail) tail = f; + count++; + } + unsigned size() const { + return count; + } + FaceLoop *remove(FaceLoop *f) { + FaceLoop *r = f->next; + if (f->prev) { f->prev->next = f->next; } else { head = f->next; } + if (f->next) { f->next->prev = f->prev; } else { tail = f->prev; } + f->next = f->prev = NULL; + count--; + return r; + } + ~FaceLoopList() { + FaceLoop *a = head, *b; + while (a) { + b = a; + a = a->next; + delete b; + } + } + }; + + struct FaceLoopGroup { + FaceLoopList face_loops; + V2Set perimeter; + std::list classification; + + FaceClass classificationAgainst(const carve::poly::Polyhedron *poly, int m_id) const; + }; + + + + typedef std::list FLGroupList; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/geom.hpp b/thirdparty/carve-1.4.0/include/carve/geom.hpp new file mode 100644 index 00000000..fd3661e1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/geom.hpp @@ -0,0 +1,645 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +namespace carve { + namespace geom { + + // ======================================================================== + struct _uninitialized { }; + + template + struct base { double v[ndim]; }; + + template<> struct base<2> {union { double v[2]; struct { double x, y; }; }; }; + template<> struct base<3> {union { double v[3]; struct { double x, y, z; }; }; }; + template<> struct base<4> {union { double v[4]; struct { double x, y, z, w; }; }; }; + + template + struct vector : public base { + static vector ZERO() { vector r; r.setZero(); return r; } + double length2() const; + double length() const; + vector &normalize(); + vector normalized() const; + bool exactlyZero() const; + bool isZero(double epsilon = EPSILON) const; + void setZero(); + void fill(double val); + vector &scaleBy(double d); + vector &invscaleBy(double d); + vector scaled(double d) const; + vector invscaled(double d) const; + vector &negate(); + vector negated() const; + double &operator[](unsigned i); + const double &operator[](unsigned i) const; + template + vector &operator=(const assign_t &t); + std::string asStr() const; + vector() { setZero(); } + vector(noinit_t) { } + }; + + static inline vector<2> VECTOR(double x, double y) { vector<2> r; r.x = x; r.y = y; return r; } + static inline vector<3> VECTOR(double x, double y, double z) { vector<3> r; r.x = x; r.y = y; r.z = z; return r; } + static inline vector<4> VECTOR(double x, double y, double z, double w) { vector<4> r; r.x = x; r.y = y; r.z = z; r.w = w; return r; } + + template + double dot(const vector &a, const val_t &b) { + double r = 0.0; + for (unsigned i = 0; i < ndim; ++i) r += a[i] * b[i]; + return r; + } + + template + vector operator-(const vector &a) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = -a[i]; + return c; + } + + template + vector &operator*=(vector &a, double s) { + for (unsigned i = 0; i < ndim; ++i) a[i] *= s; + return a; + } + + template + vector &operator/=(vector &a, double s) { + for (unsigned i = 0; i < ndim; ++i) a[i] /= s; + return a; + } + + template + vector operator*(const vector &a, double s) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] * s; + return c; + } + + template + vector operator*(double s, const vector &a) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] * s; + return c; + } + + template + vector operator/(const vector &a, double s) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] / s; + return c; + } + + template + vector &operator+=(vector &a, const vector &b) { + for (unsigned i = 0; i < ndim; ++i) a[i] += b[i]; + return a; + } + + template + vector &operator+=(vector &a, const val_t &b) { + for (unsigned i = 0; i < ndim; ++i) a[i] += b[i]; + return a; + } + + template + vector &operator+=(vector &a, double b) { + for (unsigned i = 0; i < ndim; ++i) a[i] += b; + return a; + } + + template + vector operator+(const vector &a, const vector &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] + b[i]; + return c; + } + + template + vector operator+(const val_t &a, const vector &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] + b[i]; + return c; + } + + template + vector operator+(const vector &a, const val_t &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] + b[i]; + return c; + } + + template + vector operator+(const vector &a, double b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] + b; + return c; + } + + template + vector &operator-=(vector &a, const vector &b) { + for (unsigned i = 0; i < ndim; ++i) a[i] -= b[i]; + return a; + } + + template + vector &operator-=(vector &a, const val_t &b) { + for (unsigned i = 0; i < ndim; ++i) a[i] -= b[i]; + return a; + } + + template + vector &operator-=(vector &a, double b) { + for (unsigned i = 0; i < ndim; ++i) a[i] -= b; + return a; + } + + template + vector operator-(const vector &a, const vector &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] - b[i]; + return c; + } + + template + vector operator-(const vector &a, const val_t &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] - b[i]; + return c; + } + + template + vector operator-(const val_t &a, const vector &b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] - b[i]; + return c; + } + + template + vector operator-(const vector &a, double b) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = a[i] - b; + return c; + } + + template + vector abs(const vector &a) { + vector c(NOINIT); + for (unsigned i = 0; i < ndim; ++i) c[i] = fabs(a[i]); + return c; + } + + template + vector &assign_op(vector &a, const assign_t &t, oper_t op) { + for (unsigned i = 0; i < ndim; ++i) a[i] = op(t[i]); + return a; + } + + template + vector &assign_op(vector &a, const assign1_t &t1, const assign2_t &t2, oper_t op) { + for (unsigned i = 0; i < ndim; ++i) a[i] = op(t1[i], t2[i]); + return a; + } + + template + void bounds(iter_t begin, iter_t end, adapt_t adapt, vector &min, vector &max) { + if (begin == end) { + min.setZero(); + max.setZero(); + } else { + min = max = adapt(*begin); + while (++begin != end) { + vector v = adapt(*begin); + assign_op(min, min, v, carve::util::min_functor()); + assign_op(max, max, v, carve::util::max_functor()); + } + } + } + + template + void bounds(iter_t begin, iter_t end, vector &min, vector &max) { + if (begin == end) { + min.setZero(); + max.setZero(); + } else { + min = max = *begin; + while (++begin != end) { + vector v = *begin; + assign_op(min, min, v, carve::util::min_functor()); + assign_op(max, max, v, carve::util::max_functor()); + } + } + } + + template + bool operator==(const vector &a, const vector &b) { + for (unsigned i = 0; i < ndim; ++i) { if (a[i] != b[i]) return false; } + return true; + } + + template + bool operator!=(const vector &a, const vector &b) { + return !(a == b); + } + + template + bool operator<(const vector &a, const vector &b) { + for (unsigned i = 0; i < ndim; ++i) { if (a[i] < b[i]) return true; if (a[i] > b[i]) return false; } + return false; + } + + template + bool operator<=(const vector &a, const vector &b) { + return !(b < a); + } + + template + bool operator>(const vector &a, const vector &b) { + return b < a; + } + + template + bool operator>=(const vector &a, const vector &b) { + return !(a < b); + } + + template + double distance2(const vector &a, const vector &b) { + return (b - a).length2(); + } + + template + double distance(const vector &a, const vector &b) { + return (b - a).length(); + } + + template + bool equal(const vector &a, const vector &b) { + return (b - a).isZero(); + } + + template + int smallestAxis(const vector &a) { + int x = 0; + double y = fabs(a[0]); + for (unsigned i = 1; i < ndim; ++i) { + double z = fabs(a[i]); + if (z <= y) { y = z; x = i; } + } + return x; + } + + template + int largestAxis(const vector &a) { + int x = 0; + double y = fabs(a[0]); + for (unsigned i = 1; i < ndim; ++i) { + double z = fabs(a[i]); + if (z > y) { y = z; x = i; } + } + return x; + } + + template + double vector::length2() const { return dot(*this, *this); } + template + double vector::length() const { return sqrt(dot(*this, *this)); } + + template + vector &vector::normalize() { *this /= length(); return *this; } + template + vector vector::normalized() const { return *this / length(); } + + template + bool vector::exactlyZero() const { + for (unsigned i = 0; i < ndim; ++i) if (this->v[i]) return false; + return true; + } + template + bool vector::isZero(double epsilon) const { + return length2() < epsilon * epsilon; + } + + template + void vector::setZero() { for (size_t i = 0; i < ndim; ++i) this->v[i] = 0.0; } + + template + void vector::fill(double val) { for (size_t i = 0; i < ndim; ++i) this->v[i] = val; } + + template + vector &vector::scaleBy(double d) { for (unsigned i = 0; i < ndim; ++i) this->v[i] *= d; return *this; } + template + vector &vector::invscaleBy(double d) { for (unsigned i = 0; i < ndim; ++i) this->v[i] /= d; return *this; } + + template + vector vector::scaled(double d) const { return *this * d; } + template + vector vector::invscaled(double d) const { return *this / d; } + + template + vector &vector::negate() { for (unsigned i = 0; i < ndim; ++i) this->v[i] = -this->v[i]; return *this; } + template + vector vector::negated() const { return -*this; } + + template + double &vector::operator[](unsigned i) { return this->v[i]; } + template + const double &vector::operator[](unsigned i) const { return this->v[i]; } + + template + template + vector &vector::operator=(const assign_t &t) { + for (unsigned i = 0; i < ndim; ++i) this->v[i] = t[i]; + return *this; + } + + template + std::string vector::asStr() const { + std::ostringstream out; + out << '<'; + out << std::setprecision(24); + for (unsigned i = 0; i < ndim; ++i) { if (i) out << ','; out << this->v[i]; } + out << '>'; + return out.str(); + } + + template + void centroid(iter_t begin, iter_t end, adapt_t adapt, vector &c) { + c.setZero(); + int n = 0; + while (begin != end) { c += adapt(*begin++); ++n; } + c /= double(n); + } + + template + vector<2> select(const vector &a, int a1, int a2) { + vector<2> r(NOINIT); + r.v[0] = a.v[a1]; r.v[1] = a.v[a2]; + return r; + } + + template + vector<3> select(const vector &a, int a1, int a2, int a3) { + vector<3> r(NOINIT); + r.v[0] = a.v[a1]; r.v[1] = a.v[a2]; r.v[2] = a.v[a3]; + return r; + } + + static inline vector<3> cross(const vector<3> &a, const vector<3> &b) { + // Compute a x b + return VECTOR(+(a.y * b.z - a.z * b.y), + -(a.x * b.z - a.z * b.x), + +(a.x * b.y - a.y * b.x)); + } + + static inline double cross(const vector<2> &a, const vector<2> &b) { + // Compute a x b + return a.x * b.y - b.x * a.y; + } + + static inline double dotcross(const vector<3> &a, const vector<3> &b, const vector<3> &c) { + // Compute a . (b x c) + return + (a.x * b.y * c.z + a.y * b.z * c.x + a.z * b.x * c.y) - + (a.x * b.z * c.y + a.y * b.x * c.z + a.z * b.y * c.x); + } + + + // ======================================================================== + struct axis_pos { + int axis; + double pos; + + axis_pos(int _axis, double _pos) : axis(_axis), pos(_pos) { + } + }; + + template + double distance(const axis_pos &a, const vector &b) { + return fabs(b[a.axis] - a.pos); + } + + template + double distance2(const axis_pos &a, const vector &b) { + double r = fabs(b[a.axis] - a.pos); + return r * r; + } + + template bool operator<(const axis_pos &a, const vector &b) { return a.pos < b[a.axis]; } + template bool operator<(const vector &a, const axis_pos &b) { return a[b.axis] < b.pos; } + + template bool operator<=(const axis_pos &a, const vector &b) { return a.pos <= b[a.axis]; } + template bool operator<=(const vector &a, const axis_pos &b) { return a[b.axis] <= b.pos; } + + template bool operator>(const axis_pos &a, const vector &b) { return a.pos > b[a.axis]; } + template bool operator>(const vector &a, const axis_pos &b) { return a[b.axis] > b.pos; } + + template bool operator>=(const axis_pos &a, const vector &b) { return a.pos >= b[a.axis]; } + template bool operator>=(const vector &a, const axis_pos &b) { return a[b.axis] >= b.pos; } + + template bool operator==(const axis_pos &a, const vector &b) { return a.pos == b[a.axis]; } + template bool operator==(const vector &a, const axis_pos &b) { return a[b.axis] == b.pos; } + + template bool operator!=(const axis_pos &a, const vector &b) { return a.pos != b[a.axis]; } + template bool operator!=(const vector &a, const axis_pos &b) { return a[b.axis] != b.pos; } + + + // ======================================================================== + template + struct ray { + typedef vector vector_t; + + vector_t D, v; + + ray() { } + ray(vector_t _D, vector_t _v) : D(_D), v(_v) { } + bool OK() const { return !D.isZero(); } + }; + + static inline double distance2(const ray<3> &r, const vector<3> &v) { + return cross(r.D, v - r.v).length2() / r.D.length2(); + } + + static inline double distance(const ray<3> &r, const vector<3> &v) { + return sqrt(distance2(r, v)); + } + + inline double distance2(const ray<2> &r, const vector<2> &v) { + double t = cross(r.D, v - r.v); + return (t * t) / r.D.length2(); + } + + inline double distance(const ray<2> &r, const vector<2> &v) { + return sqrt(distance2(r, v)); + } + template + ray rayThrough(const vector &a, const vector &b) { + return ray(b - a, a); + } + + + + // ======================================================================== + template + struct linesegment { + typedef vector vector_t; + + vector_t v1; + vector_t v2; + vector_t midpoint; + vector_t half_length; + + linesegment(const vector_t &_v1, const vector_t &_v2) : v1(_v1), v2(_v2) { + update(); + } + + void update() { + midpoint = (v2 + v1) / 2.0; + half_length = (v2 - v1) / 2.0; + } + bool OK() const { + return !half_length.isZero(); + } + void flip() { + std::swap(v1, v2); + half_length = (v2 - v1) / 2.0; + } + }; + + template + double distance2(const linesegment &l, const vector &v) { + vector D = l.v2 - l.v1; + double t = dot(v - l.v1, D) / dot(D, D); + if (t <= 0.0) return (v - l.v1).length2(); + if (t >= 1.0) return (v - l.v2).length2(); + vector vc = D * t + l.v1; + return (v - vc).length2(); + } + + template + double distance(const linesegment &l, const vector &v) { + return sqrt(distance2(l, v)); + } + + + + // ======================================================================== + template + struct plane { + typedef vector vector_t; + + vector_t N; + double d; + + // plane() { } + plane() { N.setZero(); N[0] = 1.0; d= 0.0; } + plane(const vector_t &_N, vector_t _p) : N(_N), d(-dot(_p, _N)) { } + plane(const vector_t &_N, double _d) : N(_N), d(_d) { } + void negate() { N.negate(); d = -d; } + }; + + template + inline plane operator-(const plane &p) { + return plane(-p.N, -p.d); + } + + template + double distance(const plane &plane, const val_t &point) { + return dot(plane.N, point) + plane.d; + } + + template + static inline vector closestPoint(const plane &p, const vector &v) { + return v - p.N * (p.d + dot(p.N, v)) / dot(p.N, p.N); + } + + + + // ======================================================================== + template + struct sphere { + typedef vector vector_t; + + vector_t C; + double r; + + // sphere() { } + sphere() { C.setZero(); r = 1.0; } + sphere(const vector_t &_C, double _r) : C(_C), r(_r) { } + }; + + template + double distance(const sphere &sphere, const val_t &point) { + return std::max(0.0, distance(sphere.C, point) - sphere.r); + } + + template + static inline vector closestPoint(const sphere &sphere, const vector &point) { + return (point - sphere.C).normalized() * sphere.r; + } + + + // ======================================================================== + template + struct tri { + typedef vector vector_t; + + vector_t v[3]; + + tri(vector_t _v[3]) { + std::copy(v, v+3, _v); + } + tri(const vector_t &a, const vector_t &b, const vector_t &c) { + v[0] = a; v[1] = b; v[2] = c; + } + }; + + template + inline std::ostream &operator<<(std::ostream &o, const vector &v) { + o << v.asStr(); + return o; + } + + template + inline std::ostream &operator<<(std::ostream &o, const carve::geom::plane &p) { + o << p.N << ";" << p.d; + return o; + } + + template + std::ostream &operator<<(std::ostream &o, const carve::geom::sphere &sphere) { + o << "{sphere " << sphere.C << ";" << sphere.r << "}"; + return o; + } + + template + std::ostream &operator<<(std::ostream &o, const carve::geom::tri &tri) { + o << "{tri " << tri.v[0] << ";" << tri.v[1] << ";" << tri.v[2] << "}"; + return o; + } + + } +} + + diff --git a/thirdparty/carve-1.4.0/include/carve/geom2d.hpp b/thirdparty/carve-1.4.0/include/carve/geom2d.hpp new file mode 100644 index 00000000..29f3fe9d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/geom2d.hpp @@ -0,0 +1,385 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include + +#include + +#include + +#if defined(CARVE_DEBUG) +# include +#endif + +namespace carve { + namespace geom2d { + + typedef carve::geom::vector<2> P2; + typedef carve::geom::ray<2> Ray2; + typedef carve::geom::linesegment<2> LineSegment2; + + + + struct p2_adapt_ident { + P2 &operator()(P2 &p) const { return p; } + const P2 &operator()(const P2 &p) const { return p; } + }; + + + + typedef std::vector P2Vector; + + /** + * \brief Return the orientation of c with respect to the ray defined by a->b. + * + * (Can be implemented exactly) + * + * @param[in] a + * @param[in] b + * @param[in] c + * + * @return positive, if c to the left of a->b. + * zero, if c is colinear with a->b. + * negative, if c to the right of a->b. + */ + inline double orient2d(const P2 &a, const P2 &b, const P2 &c) { + double acx = a.x - c.x; + double bcx = b.x - c.x; + double acy = a.y - c.y; + double bcy = b.y - c.y; + return acx * bcy - acy * bcx; + } + + /** + * \brief Determine whether p is internal to the anticlockwise + * angle abc, where b is the apex of the angle. + * + * @param[in] a + * @param[in] b + * @param[in] c + * @param[in] p + * + * @return true, if p is contained in the anticlockwise angle from + * b->a to b->c. Reflex angles contain p if p lies + * on b->a or on b->c. Acute angles do not contain p + * if p lies on b->a or on b->c. This is so that + * internalToAngle(a,b,c,p) = !internalToAngle(c,b,a,p) + */ + inline bool internalToAngle(const P2 &a, + const P2 &b, + const P2 &c, + const P2 &p) { + bool reflex = (a < c) ? orient2d(b, a, c) <= 0.0 : orient2d(b, c, a) > 0.0; + double d1 = orient2d(b, a, p); + double d2 = orient2d(b, c, p); + if (reflex) { + return d1 >= 0.0 || d2 <= 0.0; + } else { + return d1 > 0.0 && d2 < 0.0; + } + } + + /** + * \brief Determine whether p is internal to the anticlockwise + * angle ac, with apex at (0,0). + * + * @param[in] a + * @param[in] c + * @param[in] p + * + * @return true, if p is contained in a0c. + */ + inline bool internalToAngle(const P2 &a, + const P2 &c, + const P2 &p) { + return internalToAngle(a, P2::ZERO(), c, p); + } + + template + bool isAnticlockwise(const P2vec &tri) { + return orient2d(tri[0], tri[1], tri[2]) > 0.0; + } + + template + bool pointIntersectsTriangle(const P2 &p, const P2vec &tri) { + int orient = isAnticlockwise(tri) ? +1 : -1; + if (orient2d(tri[0], tri[1], p) * orient < 0) return false; + if (orient2d(tri[1], tri[2], p) * orient < 0) return false; + if (orient2d(tri[2], tri[0], p) * orient < 0) return false; + return true; + } + + template + bool lineIntersectsTriangle(const P2 &p1, const P2 &p2, const P2vec &tri) { + int s[3]; + // does tri lie on one side or the other of p1-p2? + s[0] = orient2d(p1, p2, tri[0]); + s[1] = orient2d(p1, p2, tri[1]); + s[2] = orient2d(p1, p2, tri[2]); + if (*std::max_element(s, s+3) < 0) return false; + if (*std::min_element(s, s+3) > 0) return false; + + // does line lie entirely to the right of a triangle edge? + int orient = isAnticlockwise(tri) ? +1 : -1; + if (orient2d(tri[0], tri[1], p1) * orient < 0 && orient2d(tri[0], tri[1], p2) * orient < 0) return false; + if (orient2d(tri[1], tri[2], p1) * orient < 0 && orient2d(tri[1], tri[2], p2) * orient < 0) return false; + if (orient2d(tri[2], tri[0], p1) * orient < 0 && orient2d(tri[2], tri[0], p2) * orient < 0) return false; + return true; + } + + template + int triangleLineOrientation(const P2 &p1, const P2 &p2, const P2vec &tri) { + double lo, hi, tmp; + lo = hi = orient2d(p1, p2, tri[0]); + tmp = orient2d(p1, p2, tri[1]); lo = std::min(lo, tmp); hi = std::max(hi, tmp); + tmp = orient2d(p1, p2, tri[2]); lo = std::min(lo, tmp); hi = std::max(hi, tmp); + if (hi < 0.0) return -1; + if (lo > 0.0) return +1; + return 0; + } + + template + bool triangleIntersectsTriangle(const P2vec &tri_b, const P2vec &tri_a) { + int orient_a = isAnticlockwise(tri_a) ? +1 : -1; + if (triangleLineOrientation(tri_a[0], tri_a[1], tri_b) * orient_a < 0) return false; + if (triangleLineOrientation(tri_a[1], tri_a[2], tri_b) * orient_a < 0) return false; + if (triangleLineOrientation(tri_a[2], tri_a[0], tri_b) * orient_a < 0) return false; + + int orient_b = isAnticlockwise(tri_b) ? +1 : -1; + if (triangleLineOrientation(tri_b[0], tri_b[1], tri_a) * orient_b < 0) return false; + if (triangleLineOrientation(tri_b[1], tri_b[2], tri_a) * orient_b < 0) return false; + if (triangleLineOrientation(tri_b[2], tri_b[0], tri_a) * orient_b < 0) return false; + + return true; + } + + + + static inline double atan2(const P2 &p) { + return ::atan2(p.y, p.x); + } + + + + struct LineIntersectionInfo { + LineIntersectionClass iclass; + P2 ipoint; + int p1, p2; + + LineIntersectionInfo(LineIntersectionClass _iclass, + P2 _ipoint = P2::ZERO(), + int _p1 = -1, + int _p2 = -1) : + iclass(_iclass), ipoint(_ipoint), p1(_p1), p2(_p2) { + } + }; + + struct PolyInclusionInfo { + PointClass iclass; + int iobjnum; + + PolyInclusionInfo(PointClass _iclass, + int _iobjnum = -1) : + iclass(_iclass), iobjnum(_iobjnum) { + } + }; + + struct PolyIntersectionInfo { + IntersectionClass iclass; + P2 ipoint; + size_t iobjnum; + + PolyIntersectionInfo(IntersectionClass _iclass, + const P2 &_ipoint, + size_t _iobjnum) : + iclass(_iclass), ipoint(_ipoint), iobjnum(_iobjnum) { + } + }; + + LineIntersectionInfo lineSegmentIntersection(const P2 &l1v1, const P2 &l1v2, const P2 &l2v1, const P2 &l2v2); + LineIntersectionInfo lineSegmentIntersection(const LineSegment2 &l1, const LineSegment2 &l2); + + int lineSegmentPolyIntersections(const std::vector &points, + LineSegment2 line, + std::vector &out); + + int sortedLineSegmentPolyIntersections(const std::vector &points, + LineSegment2 line, + std::vector &out); + + + + static inline bool quadIsConvex(const P2 &a, const P2 &b, const P2 &c, const P2 &d) { + double s_1, s_2; + + s_1 = carve::geom2d::orient2d(a, c, b); + s_2 = carve::geom2d::orient2d(a, c, d); + if ((s_1 < 0.0 && s_2 < 0.0) || (s_1 > 0.0 && s_2 > 0.0)) return false; + + s_1 = carve::geom2d::orient2d(b, d, a); + s_2 = carve::geom2d::orient2d(b, d, c); + if ((s_1 < 0.0 && s_2 < 0.0) || (s_1 > 0.0 && s_2 > 0.0)) return false; + + return true; + } + + template + inline bool quadIsConvex(const T &a, const T &b, const T &c, const T &d, adapt_t adapt) { + return quadIsConvex(adapt(a), adapt(b), adapt(c), adapt(d)); + } + + + + double signedArea(const std::vector &points); + + static inline double signedArea(const P2 &a, const P2 &b, const P2 &c) { + return ((b.y + a.y) * (b.x - a.x) + (c.y + b.y) * (c.x - b.x) + (a.y + c.y) * (a.x - c.x)) / 2.0; + } + + template + double signedArea(const std::vector &points, adapt_t adapt) { + P2Vector::size_type l = points.size(); + double A = 0.0; + + for (P2Vector::size_type i = 0; i < l - 1; i++) { + A += (adapt(points[i + 1]).y + adapt(points[i]).y) * (adapt(points[i + 1]).x - adapt(points[i]).x); + } + A += (adapt(points[0]).y + adapt(points[l - 1]).y) * (adapt(points[0]).x - adapt(points[l - 1]).x); + + return A / 2.0; + } + + + + template + double signedArea(iter_t begin, iter_t end, adapt_t adapt) { + double A = 0.0; + P2 p, n; + + if (begin == end) return 0.0; + + p = adapt(*begin); + for (iter_t c = begin; ++c != end; ) { + P2 n = adapt(*c); + A += (n.y + p.y) * (n.x - p.x); + p = n; + } + n = adapt(*begin); + A += (n.y + p.y) * (n.x - p.x); + + return A / 2.0; + } + + + + bool pointInPolySimple(const std::vector &points, const P2 &p); + + template + bool pointInPolySimple(const std::vector &points, adapt_t adapt, const P2 &p) { + CARVE_ASSERT(points.size() > 0); + P2Vector::size_type l = points.size(); + double s = 0.0; + double rp, r0, d; + + rp = r0 = atan2(adapt(points[0]) - p); + + for (P2Vector::size_type i = 1; i < l; i++) { + double r = atan2(adapt(points[i]) - p); + d = r - rp; + if (d > M_PI) d -= M_TWOPI; + if (d < -M_PI) d += M_TWOPI; + s = s + d; + rp = r; + } + + d = r0 - rp; + if (d > M_PI) d -= M_TWOPI; + if (d < -M_PI) d += M_TWOPI; + s = s + d; + + return !carve::math::ZERO(s); + } + + + + PolyInclusionInfo pointInPoly(const std::vector &points, const P2 &p); + + template + PolyInclusionInfo pointInPoly(const std::vector &points, adapt_t adapt, const P2 &p) { + P2Vector::size_type l = points.size(); + for (unsigned i = 0; i < l; i++) { + if (equal(adapt(points[i]), p)) return PolyInclusionInfo(POINT_VERTEX, i); + } + + for (unsigned i = 0; i < l; i++) { + unsigned j = (i + 1) % l; + + if (std::min(adapt(points[i]).x, adapt(points[j]).x) - EPSILON < p.x && + std::max(adapt(points[i]).x, adapt(points[j]).x) + EPSILON > p.x && + std::min(adapt(points[i]).y, adapt(points[j]).y) - EPSILON < p.y && + std::max(adapt(points[i]).y, adapt(points[j]).y) + EPSILON > p.y && + distance2(carve::geom::rayThrough(adapt(points[i]), adapt(points[j])), p) < EPSILON2) { + return PolyInclusionInfo(POINT_EDGE, i); + } + } + + if (pointInPolySimple(points, adapt, p)) { + return PolyInclusionInfo(POINT_IN); + } + + return PolyInclusionInfo(POINT_OUT); + } + + + + bool pickContainedPoint(const std::vector &poly, P2 &result); + + template + bool pickContainedPoint(const std::vector &poly, adapt_t adapt, P2 &result) { +#if defined(CARVE_DEBUG) + std::cerr << "pickContainedPoint "; + for (unsigned i = 0; i < poly.size(); ++i) std::cerr << " " << adapt(poly[i]); + std::cerr << std::endl; +#endif + + const size_t S = poly.size(); + P2 a, b, c; + for (unsigned i = 0; i < S; ++i) { + a = adapt(poly[i]); + b = adapt(poly[(i + 1) % S]); + c = adapt(poly[(i + 2) % S]); + + if (cross(a - b, c - b) < 0) { + P2 p = (a + b + c) / 3; + if (pointInPolySimple(poly, adapt, p)) { + result = p; + return true; + } + } + } + return false; + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/geom3d.hpp b/thirdparty/carve-1.4.0/include/carve/geom3d.hpp new file mode 100644 index 00000000..3bdaf993 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/geom3d.hpp @@ -0,0 +1,300 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include + +#include +#include + +#include +#include +#include + +#if defined(CARVE_DEBUG) +# include +#endif + +namespace carve { + namespace geom3d { + + typedef carve::geom::plane<3> Plane; + typedef carve::geom::ray<3> Ray; + typedef carve::geom::linesegment<3> LineSegment; + typedef carve::geom::vector<3> Vector; + + template + bool fitPlane(iter_t begin, iter_t end, adapt_t adapt, Plane &plane) { + Vector centroid; + carve::geom::centroid(begin, end, adapt, centroid); + iter_t i; + + Vector n = Vector::ZERO(); + Vector v, z; + Vector p1, p2, p3, c1, c2; + if (begin == end) return false; + + i = begin; + p1 = c1 = adapt(*i++); if (i == end) return false; + p2 = c2 = adapt(*i++); if (i == end) return false; + +#if defined(CARVE_DEBUG) + size_t N = 2; +#endif + while (i != end) { + p3 = adapt(*i++); + v = cross(p3 - p2, p1 - p2); + if (v.v[largestAxis(v)]) v.negate(); + n += v; + p1 = p2; p2 = p3; +#if defined(CARVE_DEBUG) + ++N; +#endif + } + + p1 = p2; p2 = p3; p3 = c1; + v = cross(p3 - p2, p1 - p2); + if (v.v[largestAxis(v)]) v.negate(); + n += v; + + p1 = p2; p2 = p3; p3 = c2; + v = cross(p3 - p2, p1 - p2); + if (v.v[largestAxis(v)]) v.negate(); + n += v; + + n.normalize(); + plane.N = n; + plane.d = -dot(n, centroid); +#if defined(CARVE_DEBUG) + if (N > 3) { + std::cerr << "N = " << N << " fitted distance:"; + for (i = begin; i != end; ++i) { + Vector p = adapt(*i); + std::cerr << " {" << p << "} " << distance(plane, p); + } + std::cerr << std::endl; + } +#endif + return true; + } + + bool planeIntersection(const Plane &a, const Plane &b, Ray &r); + + IntersectionClass rayPlaneIntersection(const Plane &p, + const Vector &v1, + const Vector &v2, + Vector &v, + double &t); + + IntersectionClass lineSegmentPlaneIntersection(const Plane &p, + const LineSegment &line, + Vector &v); + + RayIntersectionClass rayRayIntersection(const Ray &r1, + const Ray &r2, + Vector &v1, + Vector &v2, + double &mu1, + double &mu2); + + + + // test whether point d is above, below or on the plane formed by the triangle a,b,c. + // return: +ve = d is below a,b,c + // -ve = d is above a,b,c + // 0 = d is on a,b,c + static inline double orient3d(const carve::geom3d::Vector &a, + const carve::geom3d::Vector &b, + const carve::geom3d::Vector &c, + const carve::geom3d::Vector &d) { + return dotcross((a - d), (b - d), (c - d)); + } + + + + // Volume of a tetrahedron described by 4 points. Will be + // positive if the anticlockwise normal of a,b,c is oriented out + // of the tetrahedron. + // + // see: http://mathworld.wolfram.com/Tetrahedron.html + inline double tetrahedronVolume(const Vector &a, + const Vector &b, + const Vector &c, + const Vector &d) { + return dotcross((a - d), (b - d), (c - d)) / 6.0; + } + + /** + * \brief Determine whether p is internal to the wedge defined by + * the area between the planes defined by a,b,c and a,b,d + * angle abc, where ab is the apex of the angle. + * + * @param[in] a + * @param[in] b + * @param[in] c + * @param[in] d + * @param[in] p + * + * @return true, if p is contained in the wedge defined by the + * area between the planes defined by a,b,c and + * a,b,d. If the wedge is reflex, p is considered to + * be contained if it lies on either plane. Acute + * wdges do not contain p if p lies on either + * plane. This is so that internalToWedge(a,b,c,d,p) = + * !internalToWedge(a,b,d,c,p) + */ + inline bool internalToWedge(const Vector &a, + const Vector &b, + const Vector &c, + const Vector &d, + const Vector &p) { + bool reflex = (c < d) ? + orient3d(a, b, c, d) >= 0.0 : + orient3d(a, b, d, c) < 0.0; + + double d1 = orient3d(a, b, c, p); + double d2 = orient3d(a, b, d, p); + + if (reflex) { + // above a,b,c or below a,b,d (or coplanar with either) + return d1 <= 0.0 || d2 >= 0.0; + } else { + // above a,b,c and below a,b,d + return d1 < 0.0 && d2 > 0.0; + } + } + + /** + * \brief Determine the ordering relationship of a and b, when + * rotating around direction, starting from base. + * + * @param[in] adirection + * @param[in] base + * @param[in] a + * @param[in] b + * + * @return + * * -1, if a is ordered before b around, rotating about direction. + * * 0, if a and b are equal in angle. + * * +1, if a is ordered after b around, rotating about direction. + */ + inline int compareAngles(const Vector &direction, const Vector &base, const Vector &a, const Vector &b) { + double d1 = carve::geom3d::orient3d(carve::geom::VECTOR(0,0,0), direction, a, b); + double d2 = carve::geom3d::orient3d(carve::geom::VECTOR(0,0,0), direction, base, a); + double d3 = carve::geom3d::orient3d(carve::geom::VECTOR(0,0,0), direction, base, b); + + // CASE: a and b are coplanar wrt. direction. + if (d1 == 0.0) { + // a and b point in the same direction. + if (dot(a, b) > 0.0) { + // Neither is less than the other. + return 0; + } + + // a and b point in opposite directions. + double d2 = carve::geom3d::orient3d(carve::geom::VECTOR(0,0,0), direction, base, a); + // * if d2 < 0.0, a is above plane(direction, base) and is less + // than b. + // * if d2 == 0.0 a is coplanar with plane(direction, base) and is + // less than b if it points in the same direction as base. + // * if d2 > 0.0, a is below plane(direction, base) and is greater + // than b. + + if (d2 == 0.0) { return dot(a, base) > 0.0 ? -1 : +1; } + if (d3 == 0.0) { return dot(b, base) > 0.0 ? +1 : -1; } + if (d2 < 0.0 && d3 > 0.0) return -1; + if (d2 > 0.0 && d3 < 0.0) return +1; + + // both a and b are to one side of plane(direction, base) - + // rounding error (if a and b are truly coplanar with + // direction, one should be above, and one should be below any + // other plane that is not itself coplanar with + // plane(direction, a|b) - which would imply d2 and d3 == 0.0). + + // If both are below plane(direction, base) then the one that + // points in the same direction as base is greater. + // If both are above plane(direction, base) then the one that + // points in the same direction as base is lesser. + if (d2 > 0.0) { return dot(a, base) > 0.0 ? +1 : -1; } + else { return dot(a, base) > 0.0 ? -1 : +1; } + } + + // CASE: a and b are not coplanar wrt. direction + + if (d2 < 0.0) { + // if a is above plane(direction,base), then a is less than b if + // b is below plane(direction,base) or b is above plane(direction,a) + return (d3 > 0.0 || d1 < 0.0) ? -1 : +1; + } else if (d2 == 0.0) { + // if a is on plane(direction,base) then a is less than b if a + // points in the same direction as base, or b is below + // plane(direction,base) + return (dot(a, base) > 0.0 || d3 > 0.0) ? -1 : +1; + } else { + // if a is below plane(direction,base), then a is less than b if b + // is below plane(direction,base) and b is above plane(direction,a) + return (d3 > 0.0 && d1 < 0.0) ? -1 : +1; + } + } + + // The anticlockwise angle from vector "from" to vector "to", oriented around the vector "orient". + static inline double antiClockwiseAngle(const Vector &from, const Vector &to, const Vector &orient) { + double dp = dot(from, to); + Vector cp = cross(from, to); + if (cp.isZero()) { + if (dp < 0) { + return M_PI; + } else { + return 0.0; + } + } else { + if (dot(cp, orient) > 0.0) { + return acos(dp); + } else { + return M_TWOPI - acos(dp); + } + } + } + + + + static inline double antiClockwiseOrdering(const Vector &from, const Vector &to, const Vector &orient) { + double dp = dot(from, to); + Vector cp = cross(from, to); + if (cp.isZero()) { + if (dp < 0) { + return 2.0; + } else { + return 0.0; + } + } else { + if (dot(cp, orient) > 0.0) { + // 1..-1 -> 0..2 + return 1.0 - dp; + } else { + // -1..1 -> 2..4 + return dp + 1.0; + } + } + } + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/gnu_cxx.h b/thirdparty/carve-1.4.0/include/carve/gnu_cxx.h new file mode 100644 index 00000000..280fa360 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/gnu_cxx.h @@ -0,0 +1,4 @@ +// Copyright 2006 Tobias Sargeant (toby@permuted.net) +// All rights reserved. + +#pragma once diff --git a/thirdparty/carve-1.4.0/include/carve/heap.hpp b/thirdparty/carve-1.4.0/include/carve/heap.hpp new file mode 100644 index 00000000..7d1f18a7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/heap.hpp @@ -0,0 +1,150 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once +namespace carve { + namespace heap { + + + + template + void _down_heap(random_access_iter_t begin, + distance_t pos, + distance_t len, + pred_t pred) { + typedef typename std::iterator_traits::value_type value_t; + + const distance_t start = pos; + distance_t child = pos * 2 + 2; + + value_t v = *(begin + pos); + + while (child < len) { + if (pred(*(begin + child), *(begin + (child-1)))) child--; + if (!pred(v, *(begin + child))) break; + *(begin + pos) = *(begin + child); + pos = child; + } + if (child == len) { + --child; + if (pred(v, *(begin + child))) { + *(begin + pos) = *(begin + child); + pos = child; + } + } + if (pos != start) *(begin + pos) = v; + } + + + + template + void _up_heap(random_access_iter_t begin, + distance_t pos, + distance_t len, + pred_t pred) { + typedef typename std::iterator_traits::value_type value_t; + + const distance_t start = pos; + distance_t parent = (pos - 1) / 2; + + value_t v = *(begin + pos); + + while (pos > 0) { + if (pred(*(begin + parent), v)) break; + *(begin + pos) = *(begin + parent); + pos = parent; + parent = (parent - 1) / 2; + } + if (pos != start) *(begin + pos) = v; + } + + + + template + void _adjust_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos, + pred_t pred) { + typedef typename std::iterator_traits::difference_type distance_t; + + distance_t parent = ((pos - begin) - 1) / 2; + if (p != 0 && pred(*(begin + parent), *pos)) { + _up_heap(begin, pos - begin, end - begin, (pos - begin), pred); + } else { + _down_heap(begin, pos - begin, end - begin, (pos - begin), pred); + } + } + + + + template + void adjust_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos) { + typedef typename std::iterator_traits::value_type value_t; + + _adjust_heap(begin, end, pos, std::less()); + } + + + + template + void adjust_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos, + pred_t pred) { + _adjust_heap(begin, end, pos, pred); + } + + + + template + void _remove_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos, + pred_t pred) { + --end; + if (pos != end) { + std::swap(*pos, *end); + _adjust_heap(begin, end, pos, pred); + } + } + + + + template + void remove_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos) { + typedef typename std::iterator_traits::value_type value_t; + + _remove_heap(begin, end, pos, std::less()); + } + + + + template + void remove_heap(random_access_iter_t begin, + random_access_iter_t end, + random_access_iter_t pos, + pred_t pred) { + _remove_heap(begin, end, pos, pred); + } + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/input.hpp b/thirdparty/carve-1.4.0/include/carve/input.hpp new file mode 100644 index 00000000..bd7974c9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/input.hpp @@ -0,0 +1,239 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include +#include + + + +namespace carve { + namespace input { + + struct Data { + Data() { + } + + virtual ~Data() { + } + + virtual void transform(const carve::math::Matrix &transform) { + } + }; + + + + struct VertexData : public Data { + std::vector points; + + VertexData() : Data() { + } + + virtual ~VertexData() { + } + + virtual void transform(const carve::math::Matrix &transform) { + for (size_t i = 0; i < points.size(); ++i) { + points[i] *= transform; + } + } + + size_t addVertex(carve::geom3d::Vector point) { + size_t index = points.size(); + points.push_back(point); + return index; + } + + inline void reserveVertices(int count) { + points.reserve(count); + } + + size_t getVertexCount() const { + return points.size(); + } + + const carve::geom3d::Vector &getVertex(int index) const { + return points[index]; + } + }; + + + + struct PolyhedronData : public VertexData { + std::vector faceIndices; + int faceCount; + + PolyhedronData() : VertexData(), faceIndices(), faceCount(0) { + } + + virtual ~PolyhedronData() { + } + + void reserveFaces(int count, int avgFaceSize) { + faceIndices.reserve(faceIndices.size() + count * (1 + avgFaceSize)); + } + + int getFaceCount() const { + return faceCount; + } + + template + void addFace(Iter begin, Iter end) { + size_t n = std::distance(begin, end); + faceIndices.reserve(faceIndices.size() + n + 1); + faceIndices.push_back(n); + std::copy(begin, end, std::back_inserter(faceIndices)); + ++faceCount; + } + + void addFace(int a, int b, int c) { + faceIndices.push_back(3); + faceIndices.push_back(a); + faceIndices.push_back(b); + faceIndices.push_back(c); + ++faceCount; + } + + void addFace(int a, int b, int c, int d) { + faceIndices.push_back(4); + faceIndices.push_back(a); + faceIndices.push_back(b); + faceIndices.push_back(c); + faceIndices.push_back(d); + ++faceCount; + } + + void clearFaces() { + faceIndices.clear(); + faceCount = 0; + } + + carve::poly::Polyhedron *create() const { + return new carve::poly::Polyhedron(points, faceCount, faceIndices); + } + }; + + + + struct PolylineSetData : public VertexData { + typedef std::pair > polyline_data_t; + std::list polylines; + + PolylineSetData() : VertexData(), polylines() { + } + + virtual ~PolylineSetData() { + } + + void beginPolyline(bool closed = false) { + polylines.push_back(std::make_pair(closed, std::vector())); + } + + void reservePolyline(size_t len) { + polylines.back().second.reserve(len); + } + + void addPolylineIndex(int idx) { + polylines.back().second.push_back(idx); + } + + carve::line::PolylineSet *create() const { + carve::line::PolylineSet *p = new carve::line::PolylineSet(points); + + for (std::list::const_iterator i = polylines.begin(); + i != polylines.end(); + ++i) { + p->addPolyline((*i).first, (*i).second.begin(), (*i).second.end()); + } + return p; + } + }; + + + + struct PointSetData : public VertexData { + + PointSetData() : VertexData() { + } + + virtual ~PointSetData() { + } + + carve::point::PointSet *create() const { + carve::point::PointSet *p = new carve::point::PointSet(points); + return p; + } + }; + + + + class Input { + public: + std::list input; + + Input() { + } + + ~Input() { + for (std::list::iterator i = input.begin(); i != input.end(); ++i) { + delete (*i); + } + } + + void addDataBlock(Data *data) { + input.push_back(data); + } + + void transform(const carve::math::Matrix &transform) { + if (transform == carve::math::Matrix::IDENT()) return; + for (std::list::iterator i = input.begin(); i != input.end(); ++i) { + (*i)->transform(transform); + } + } + + template + static inline T *create(Data *d) { + return NULL; + } + }; + + template<> + inline carve::poly::Polyhedron *Input::create(Data *d) { + PolyhedronData *p = dynamic_cast(d); + if (p == NULL) return NULL; + return p->create(); + } + + template<> + inline carve::line::PolylineSet *Input::create(Data *d) { + PolylineSetData *p = dynamic_cast(d); + if (p == NULL) return NULL; + return p->create(); + } + + template<> + inline carve::point::PointSet *Input::create(Data *d) { + PointSetData *p = dynamic_cast(d); + if (p == NULL) return NULL; + return p->create(); + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/interpolator.hpp b/thirdparty/carve-1.4.0/include/carve/interpolator.hpp new file mode 100644 index 00000000..6c3afa1a --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/interpolator.hpp @@ -0,0 +1,331 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include +#include + +namespace carve { + namespace interpolate { + + static inline std::vector polyInterpolate(const std::vector &s, + const carve::geom2d::P2 &v) { + // see hormann et al. 2006 + const size_t SZ = s.size(); + std::vector r; + std::vector A; + std::vector D; + + std::vector result; + + r.resize(SZ); + A.resize(SZ); + D.resize(SZ); + + result.resize(SZ, 0.0); + + for (size_t i = 0; i < SZ; ++i) { + size_t i2 = (i + 1) % SZ; + carve::geom2d::P2 si = s[i] - v; + carve::geom2d::P2 si2 = s[i2] - v; + + r[i] = sqrt(dot(si, si)); + A[i] = cross(si, si2) / 2.0; + D[i] = dot(si, si2); + if (fabs(r[i]) < 1e-16) { + result[i] = 1.0; + return result; + } else if (fabs(A[i]) < 1e-16 && D[i] < 0.0) { + double r2 = sqrt(dot(si2, si2)); + result[i2] = r[i] / (r[i] + r2); + result[i] = r2 / (r[i] + r2); + return result; + } + } + + double w_sum = 0.0; + + for (size_t i = 0; i < SZ; ++i) { + size_t i_m = (i + SZ - 1) % SZ; + size_t i_p = (i + 1) % SZ; + + double w = 0.0; + if (fabs(A[i_m]) > 1e-16) + w += (r[i_m] - D[i_m] / r[i]) / A[i_m]; + if (fabs(A[i]) > 1e-16) + w += (r[i_p] - D[i] / r[i]) / A[i]; + + result[i] = w; + w_sum += w; + } + + for (size_t i = 0; i < SZ; ++i) { + result[i] /= w_sum; + } + +// carve::geom2d::P2 test; +// for (size_t i = 0; i < SZ; ++i) { +// test = test + result[i] * s[i]; +// } + + return result; + } + + template + val_t interp(iter_t begin, + iter_t end, + adapt_t adapt, + const std::vector &vals, + double x, + double y, + mod_t mod = mod_t()) { + std::vector s; + s.reserve(std::distance(begin, end)); + std::transform(begin, end, std::back_inserter(s), adapt); + std::vector weight = polyInterpolate(s, carve::geom::VECTOR(x, y)); + + val_t v; + for (size_t z = 0; z < weight.size(); z++) { + v += weight[z] * vals[z]; + } + + return mod(v); + } + + template + val_t interp(iter_t begin, + iter_t end, + adapt_t adapt, + const std::vector &vals, + double x, + double y) { + return interp(begin, end, adapt, vals, x, y, identity_t()); + } + + template + val_t interp(const std::vector &poly, + adapt_t adapt, + const std::vector &vals, + double x, + double y, + mod_t mod = mod_t()) { + return interp(poly.begin(), poly.end(), adapt, vals, x, y, mod); + } + + template + val_t interp(const std::vector &poly, + adapt_t adapt, + const std::vector &vals, + double x, + double y) { + return interp(poly.begin(), poly.end(), adapt, vals, x, y, identity_t()); + } + + template + val_t interp(const std::vector &poly, + const std::vector &vals, + double x, + double y, + mod_t mod = mod_t()) { + std::vector weight = polyInterpolate(poly, carve::geom::VECTOR(x, y)); + + val_t v; + for (size_t z = 0; z < weight.size(); z++) { + v += weight[z] * vals[z]; + } + + return mod(v); + } + + template + val_t interp(const std::vector &poly, + const std::vector &vals, + double x, + double y) { + return interp(poly, vals, x, y, identity_t()); + } + + class Interpolator { + public: + virtual void interpolate(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) =0; + + Interpolator() { + } + + virtual ~Interpolator() { + } + + class Hook : public carve::csg::CSG::Hook { + Interpolator *interpolator; + public: + virtual void resultFace(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) { + interpolator->interpolate(new_face, orig_face, flipped); + } + + Hook(Interpolator *_interpolator) : interpolator(_interpolator) { + } + + virtual ~Hook() { + } + }; + + void installHooks(carve::csg::CSG &csg) { + csg.hooks.registerHook(new Hook(this), carve::csg::CSG::Hooks::RESULT_FACE_BIT); + } + }; + + template + class FaceVertexAttr : public Interpolator { + + protected: + struct fv_hash { + size_t operator()(const std::pair &v) const { + return size_t(v.first) ^ size_t(v.second); + } + }; + + typedef std::unordered_map attrvmap_t; + typedef std::unordered_map, attr_t, fv_hash> attrmap_t; + + attrmap_t attrs; + + public: + bool hasAttribute(const carve::poly::Polyhedron::face_t *f, unsigned v) { + return attrs.find(std::make_pair(f, v)) != attrs.end(); + } + + attr_t getAttribute(const carve::poly::Polyhedron::face_t *f, unsigned v, const attr_t &def = attr_t()) { + typename attrmap_t::const_iterator fv = attrs.find(std::make_pair(f, v)); + if (fv != attrs.end()) { + return (*fv).second; + } + return def; + } + + void setAttribute(const carve::poly::Polyhedron::face_t *f, unsigned v, const attr_t &attr) { + attrs[std::make_pair(f, v)] = attr; + } + + virtual void interpolate(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) { + std::vector vertex_attrs; + attrvmap_t base_attrs; + vertex_attrs.reserve(orig_face->nVertices()); + + for (size_t i = 0; i < orig_face->nVertices(); ++i) { + typename attrmap_t::const_iterator a = attrs.find(std::make_pair(orig_face, i)); + if (a == attrs.end()) return; + vertex_attrs.push_back((*a).second); + base_attrs[orig_face->vertex(i)] = vertex_attrs.back(); + } + + for (size_t i = 0; i < new_face->nVertices(); ++i) { + const carve::poly::Polyhedron::vertex_t *vertex = new_face->vertex(i); + typename attrvmap_t::const_iterator b = base_attrs.find(vertex); + if (b != base_attrs.end()) { + attrs[std::make_pair(new_face, i)] = (*b).second; + } else { + carve::geom2d::P2 p = carve::poly::face::project(orig_face, new_face->vertex(i)->v); + attr_t attr = interp(orig_face->vbegin(), + orig_face->vend(), + orig_face->projector(), + vertex_attrs, + p.x, + p.y); + attrs[std::make_pair(new_face, i)] = attr; + } + } + } + + FaceVertexAttr() : Interpolator() { + } + + virtual ~FaceVertexAttr() { + } + + }; + + + template + class FaceAttr : public Interpolator { + + protected: + struct f_hash { + size_t operator()(const carve::poly::Polyhedron::face_t * const &f) const { + return size_t(f); + } + }; + + typedef std::unordered_map attrmap_t; + + attrmap_t attrs; + + public: + bool hasAttribute(const carve::poly::Polyhedron::face_t *f) { + return attrs.find(f) != attrs.end(); + } + + attr_t getAttribute(const carve::poly::Polyhedron::face_t *f, const attr_t &def = attr_t()) { + typename attrmap_t::const_iterator i = attrs.find(f); + if (i != attrs.end()) { + return (*i).second; + } + return def; + } + + void setAttribute(const carve::poly::Polyhedron::face_t *f, const attr_t &attr) { + attrs[f] = attr; + } + + virtual void interpolate(const carve::poly::Polyhedron::face_t *new_face, + const carve::poly::Polyhedron::face_t *orig_face, + bool flipped) { + typename attrmap_t::const_iterator i = attrs.find(orig_face); + if (i != attrs.end()) { + attrs[new_face] = (*i).second; + } + } + + FaceAttr() : Interpolator() { + } + + virtual ~FaceAttr() { + } + + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/intersection.hpp b/thirdparty/carve-1.4.0/include/carve/intersection.hpp new file mode 100644 index 00000000..385a830e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/intersection.hpp @@ -0,0 +1,323 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +namespace carve { + namespace csg { + + /** + * \class Intersections + * \brief Storage for computed intersections between vertices, edges and faces. + * + */ + struct Intersections : public std::unordered_map { + + typedef std::unordered_map super; + + ~Intersections() { + } + + /** + * \brief Record the position of intersection between a pair of intersection objects. + * + * @param a The first intersecting object. + * @param b The second intersecting object. + * @param p The point of intersection. + */ + void record(const IObj &a, const IObj &b, const carve::poly::Polyhedron::vertex_t *p) { + (*this)[a][b] = p; + (*this)[b][a] = p; + } + + /** + * \brief Test whether vertex \a v intersects face \a f. + * + * @param v The vertex to test. + * @param f The face to test. + * + * @return true, if \a v intersects \a f. + */ + bool intersectsFace(const carve::poly::Polyhedron::vertex_t *v, const carve::poly::Polyhedron::face_t *f) const; + + /** + * \brief Collect sets of vertices, edges and faces that intersect \a obj + * + * @param[in] obj The intersection object to search for intersections. + * @param[out] collect_v A vector of vertices intersecting \a obj. + * @param[out] collect_e A vector of edges intersecting \a obj. + * @param[out] collect_f A vector of faces intersecting \a obj. + */ + void collect(const IObj &obj, + std::vector *collect_v, + std::vector *collect_e, + std::vector *collect_f) const; + + + /** + * \brief Populate a collection with the faces adjoining an edge. + * + * @tparam face_set_t A collection type. + * @param e The edge for which to collect adjoining faces. + * @param faces + */ + template + void facesForVertex(const carve::poly::Polyhedron::vertex_t *v, face_set_t &faces) const { + static_cast(v->owner)->vertexToFaces(v, set_inserter(faces)); + } + + /** + * \brief Populate a collection with the faces adjoining an edge. + * + * @tparam face_set_t A collection type. + * @param e The edge for which to collect adjoining faces. + * @param faces + */ + template + void facesForEdge(const carve::poly::Polyhedron::edge_t *e, face_set_t &faces) const { + static_cast(e->owner)->edgeToFaces(e, set_inserter(faces)); + } + + /** + * \brief Populate a collection with the faces adjoining a face. + * + * @tparam face_set_t A collection type. + * @param f The face for which to collect adjoining faces. + * @param faces + */ + template + void facesForFace(const carve::poly::Polyhedron::face_t *f, face_set_t &faces) const { + faces.insert(f); + } + + /** + * \brief Populate a collection with the faces adjoining an intersection object. + * + * @tparam face_set_t A collection type holding const carve::poly::Polyhedron::face_t *. + * @param obj The intersection object for which to collect adjoining faces. + * @param faces + */ + template + void facesForObject(const IObj &obj, face_set_t &faces) const { + switch (obj.obtype) { + case IObj::OBTYPE_VERTEX: + facesForVertex(obj.vertex, faces); + break; + + case IObj::OBTYPE_EDGE: + facesForEdge(obj.edge, faces); + break; + + case IObj::OBTYPE_FACE: + facesForFace(obj.face, faces); + break; + + default: + break; + } + } + + /** + * \brief Determine whether two intersection objects intersect. + * + * @param a The first intersection object. + * @param b The second intersection object. + * + * @return true, if \a a and \a b intersect. + */ + bool intersectsExactly(const IObj &a, const IObj &b) { + Intersections::const_iterator i = find(a); + if (i == end()) return false; + return i->second.find(b) != i->second.end(); + } + + /** + * \brief Determine whether an intersection object intersects a vertex. + * + * @param a The intersection object. + * @param v The vertex. + * + * @return true, if \a a and \a v intersect. + */ + bool intersects(const IObj &a, const carve::poly::Polyhedron::vertex_t *v) { + Intersections::const_iterator i = find(a); + if (i == end()) return false; + if (i->second.find(v) != i->second.end()) return true; + return false; + } + + /** + * \brief Determine whether an intersection object intersects an edge. + * + * @param a The intersection object. + * @param e The edge. + * + * @return true, if \a a and \a e intersect (either on the edge, + * or at either endpoint). + */ + bool intersects(const IObj &a, const carve::poly::Polyhedron::edge_t *e) { + Intersections::const_iterator i = find(a); + if (i == end()) return false; + for (/*super::data_type::const_iterator*/auto j = i->second.begin(); j != i->second.end(); ++j) { + const IObj &obj = j->first; + switch (obj.obtype) { + case IObj::OBTYPE_VERTEX: + if (obj.vertex == e->v1 || obj.vertex == e->v2) return true; + break; + case IObj::OBTYPE_EDGE: + if (obj.edge == e) return true; + break; + default: + break; + } + } + return false; + } + + /** + * \brief Determine whether an intersection object intersects a face. + * + * @param a The intersection object. + * @param f The face. + * + * @return true, if \a a and \a f intersect (either on the face, + * or at any associated edge or vertex). + */ + bool intersects(const IObj &a, const carve::poly::Polyhedron::face_t *f) { + Intersections::const_iterator i = find(a); + if (i == end()) return false; + if (i->second.find(f) != i->second.end()) return true; + for (size_t j = 0; j < f->nEdges(); ++j) if (i->second.find(f->edge(j)) != i->second.end()) return true; + for (size_t j = 0; j < f->nVertices(); ++j) if (i->second.find(f->vertex(j)) != i->second.end()) return true; + return false; + } + + /** + * \brief Determine whether an edge intersects another edge. + * + * @param e The edge. + * @param f The face. + * + * @return true, if \a e and \a f intersect. + */ + bool intersects(const carve::poly::Polyhedron::edge_t *e1, const carve::poly::Polyhedron::edge_t *e2) { + if (intersects(e1->v1, e2) || intersects(e1->v2, e2) || intersects(IObj(e1), e2)) return true; + return false; + } + + /** + * \brief Determine whether an edge intersects a face. + * + * @param e The edge. + * @param f The face. + * + * @return true, if \a e and \a f intersect. + */ + bool intersects(const carve::poly::Polyhedron::edge_t *e, const carve::poly::Polyhedron::face_t *f) { + if (intersects(e->v1, f) || intersects(e->v2, f) || intersects(IObj(e), f)) return true; + return false; + } + + /** + * \brief Determine the faces intersected by an edge. + * + * @tparam face_set_t A collection type holding const carve::poly::Polyhedron::face_t * + * @param[in] e The edge. + * @param[out] f The resulting set of faces. + */ + template + void intersectedFaces(const carve::poly::Polyhedron::edge_t *e, face_set_t &f) const { + std::vector intersected_faces; + std::vector intersected_edges; + std::vector intersected_vertices; + + collect(e, &intersected_vertices, &intersected_edges, &intersected_faces); + + for (unsigned i = 0; i < intersected_vertices.size(); ++i) { + facesForVertex(intersected_vertices[i], f); + } + for (unsigned i = 0; i < intersected_edges.size(); ++i) { + facesForEdge(intersected_edges[i], f); + } + f.insert(intersected_faces.begin(), intersected_faces.end()); + } + + /** + * \brief Determine the faces intersected by a vertex. + * + * @tparam face_set_t A collection type holding const carve::poly::Polyhedron::face_t * + * @param[in] v The vertex. + * @param[out] f The resulting set of faces. + */ + template + void intersectedFaces(const carve::poly::Polyhedron::vertex_t *v, face_set_t &f) const { + std::vector intersected_faces; + std::vector intersected_edges; + std::vector intersected_vertices; + + collect(v, &intersected_vertices, &intersected_edges, &intersected_faces); + + for (unsigned i = 0; i < intersected_vertices.size(); ++i) { + facesForVertex(intersected_vertices[i], f); + } + for (unsigned i = 0; i < intersected_edges.size(); ++i) { + facesForEdge(intersected_edges[i], f); + } + f.insert(intersected_faces.begin(), intersected_faces.end()); + } + + /** + * \brief Collect the set of faces that contain all vertices in \a verts. + * + * @tparam vertex_set_t A collection type holding const carve::poly::Polyhedron::vertex_t * + * @tparam face_set_t A collection type holding const carve::poly::Polyhedron::face_t * + * @param[in] verts A set of vertices. + * @param[out] result The resulting set of faces. + */ + template + void commonFaces(const vertex_set_t &verts, + face_set_t &result) { + + std::set ifaces, temp, out; + typename vertex_set_t::const_iterator i = verts.begin(); + if (i == verts.end()) return; + intersectedFaces((*i), ifaces); + while (++i != verts.end()) { + temp.clear(); + intersectedFaces((*i), temp); + + out.clear(); + std::set_intersection(temp.begin(), temp.end(), + ifaces.begin(), ifaces.end(), + set_inserter(out)); + ifaces.swap(out); + } + std::copy(ifaces.begin(), ifaces.end(), set_inserter(result)); + } + + void clear() { + super::clear(); + } + + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/iobj.hpp b/thirdparty/carve-1.4.0/include/carve/iobj.hpp new file mode 100644 index 00000000..8dfa060b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/iobj.hpp @@ -0,0 +1,105 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +namespace carve { + namespace csg { + struct IObj { + enum { + OBTYPE_NONE = 0, + OBTYPE_VERTEX = 1, + OBTYPE_EDGE = 2, + OBTYPE_FACE = 4 + } obtype; + + union { + const carve::poly::Polyhedron::vertex_t *vertex; + const carve::poly::Polyhedron::edge_t *edge; + const carve::poly::Polyhedron::face_t *face; + intptr_t val; + }; + + IObj() : obtype(OBTYPE_NONE), val(0) { } + IObj(const carve::poly::Polyhedron::vertex_t *v) : obtype(OBTYPE_VERTEX), vertex(v) { } + IObj(const carve::poly::Polyhedron::edge_t *e) : obtype(OBTYPE_EDGE), edge(e) { } + IObj(const carve::poly::Polyhedron::face_t *f) : obtype(OBTYPE_FACE), face(f) { } + }; + + + + struct IObj_hash { + inline size_t operator()(const IObj &i) const { + return (size_t)i.val; + } + inline size_t operator()(const std::pair &i) const { + return (size_t)i.first.val ^ (size_t)i.second.val; + } + }; + + + + typedef std::unordered_set, IObj_hash> IObjPairSet; + + typedef std::unordered_map IObjVMap; + typedef std::map IObjVMapSmall; + + class VertexIntersections : + public std::unordered_map { + }; + + + + static inline bool operator==(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype == b.obtype && a.val == b.val; + } + + static inline bool operator!=(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype != b.obtype || a.val != b.val; + } + + static inline bool operator<(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype < b.obtype || (a.obtype == b.obtype && a.val < b.val); + } + + static inline bool operator<=(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype < b.obtype || (a.obtype == b.obtype && a.val <= b.val); + } + + static inline bool operator>(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype > b.obtype || (a.obtype == b.obtype && a.val > b.val); + } + + static inline bool operator>=(const carve::csg::IObj &a, const carve::csg::IObj &b) { + return a.obtype > b.obtype || (a.obtype == b.obtype && a.val >= b.val); + } + + static inline std::ostream &operator<<(std::ostream &o, const carve::csg::IObj &a) { + switch (a.obtype) { + case carve::csg::IObj::OBTYPE_NONE: o << "NONE{}"; break; + case carve::csg::IObj::OBTYPE_VERTEX: o << "VERT{" << a.vertex << "}"; break; + case carve::csg::IObj::OBTYPE_EDGE: o << "EDGE{" << a.edge << "}"; break; + case carve::csg::IObj::OBTYPE_FACE: o << "FACE{" << a.face << "}"; break; + } + return o; + } + + } +} + diff --git a/thirdparty/carve-1.4.0/include/carve/kd_node.hpp b/thirdparty/carve-1.4.0/include/carve/kd_node.hpp new file mode 100644 index 00000000..79d00093 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/kd_node.hpp @@ -0,0 +1,308 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +#include +#include +#include + +namespace carve { + namespace geom { + template + class kd_node { + kd_node(const kd_node &); + kd_node &operator=(const kd_node &); + + public: + kd_node *c_neg; + kd_node *c_pos; + kd_node *parent; + axis_pos splitpos; + + typedef vector vector_t; + typedef std::list container_t; + + container_t data; + + kd_node(kd_node *_parent = NULL) : c_neg(NULL), c_pos(NULL), parent(_parent), splitpos(0, 0.0) { + } + + ~kd_node() { + if (c_neg) delete c_neg; + if (c_pos) delete c_pos; + } + + template + void closeNodes(const vector_t &p, double d, visitor_t &visit) const { + if (c_neg) { + double delta = splitpos.pos - p[splitpos.axis]; + if (delta <= d) c_neg->closeNodes(p, d, visit); + if (delta >= -d) c_pos->closeNodes(p, d, visit); + } else { + visit(this); + } + } + + void removeData(const data_t &d) { + typename container_t::iterator i = std::find(data.begin(), data.end(), d); + + if (i != data.end()) { + data.erase(i); + } + } + + void addData(const data_t &d) { + data.push_back(d); + } + + void insert(const data_t &data, inserter_t &inserter) { + inserter.insert(this, data); + } + + void insert(const data_t &data) { + inserter_t inserter; + insert(data, inserter); + } + + void remove(const data_t &data, inserter_t &inserter) { + inserter.remove(this, data); + } + + void remove(const data_t &data) { + inserter_t inserter; + remove(data, inserter); + } + + carve::geom::aabb nodeAABB() const { + carve::geom::aabb aabb; + if (c_neg) { + aabb = c_neg->nodeAABB(); + aabb.unionAABB(c_pos->nodeAABB()); + } else { + if (data.size()) { + typename container_t::const_iterator i = data.begin(); + aabb = aabb_calc_t()(*i); + while (i != data.end()) { + aabb.unionAABB(aabb_calc_t()(*i)); + ++i; + } + } + } + return aabb; + } + + bool split(axis_pos split_at, inserter_t &inserter) { + if (c_neg) { + // already split + return false; + } + + c_neg = new kd_node(this); + c_pos = new kd_node(this); + + // choose an axis and split point. + splitpos = split_at; + + carve::geom::aabb aabb; + + if (splitpos.axis < 0 || + splitpos.axis >= ndim || + splitpos.pos == std::numeric_limits::max()) { + // need an aabb + if (data.size()) { + typename container_t::const_iterator i = data.begin(); + aabb = aabb_calc_t()(*i); + while (i != data.end()) { + aabb.unionAABB(aabb_calc_t()(*i)); + ++i; + } + } + } + + if (splitpos.axis < 0 || splitpos.axis >= ndim) { + + // choose an axis; + + // if no axis was specified, force calculation of the split position. + splitpos.pos = std::numeric_limits::max(); + + // choose the axis of the AABB with the biggest extent. + splitpos.axis = largestAxis(aabb.extent); + + if (parent && splitpos.axis == parent->splitpos.axis) { + // but don't choose the same axis as the parent node; + // choose the axis with the second greatest AABB extent. + double e = -1.0; + int a = -1; + for (unsigned i = 0; i < ndim; ++i) { + if (i == splitpos.axis) continue; + if (e < aabb.extent[i]) { a = i; e = aabb.extent[i]; } + } + if (a != -1) { + splitpos.axis = a; + } + } + } + + if (splitpos.pos == std::numeric_limits::max()) { + carve::geom::vector min = aabb.min(); + carve::geom::vector max = aabb.max(); + splitpos.pos = aabb.pos.v[splitpos.axis]; + } + + inserter.propagate(this); + + return true; + } + + bool split(axis_pos split_at = axis_pos(-1, std::numeric_limits::max())) { + inserter_t inserter; + return split(split_at, inserter); + } + + void splitn(int num, inserter_t &inserter) { + if (num <= 0) return; + if (!c_neg) { + split(inserter); + } + if (c_pos) c_pos->splitn(num-1, inserter); + if (c_neg) c_neg->splitn(num-1, inserter); + } + + void splitn(int num) { + inserter_t inserter; + splitn(num, inserter); + } + + template + void splitn(int num, split_t splitter, inserter_t &inserter) { + if (num <= 0) return; + if (!c_neg) { + split(inserter, splitter(this)); + } + if (c_pos) c_pos->splitn(num-1, inserter, splitter); + if (c_neg) c_neg->splitn(num-1, inserter, splitter); + } + + template + void splitn(int num, split_t splitter) { + inserter_t inserter; + splitn(num, splitter, inserter); + } + + template + void splitpred(pred_t pred, inserter_t &inserter, int depth = 0) { + if (!c_neg) { + axis_pos splitpos(-1, std::numeric_limits::max()); + if (!pred(this, depth, splitpos)) return; + split(splitpos, inserter); + } + if (c_pos) c_pos->splitpred(pred, inserter, depth + 1); + if (c_neg) c_neg->splitpred(pred, inserter, depth + 1); + } + + template + void splitpred(pred_t pred, int depth = 0) { + inserter_t inserter; + splitpred(pred, inserter, depth); + } + + // distance_t must provide: + // double operator()(kd_node::data_t, vector); + // double operator()(axis_pos, vector); + template + struct near_point_query { + + // q_t - the priority queue value type. + // q_t.first: distance from object to query point. + // q_t.second: pointer to object + typedef std::pair q_t; + + // the queue priority should sort from smallest distance to largest, and on equal distance, by object pointer. + struct pcmp { + bool operator()(const q_t &a, const q_t &b) { + return (a.first > b.first) || ((a.first == b.first) && (a.second < b.second)); + } + }; + + vector point; + const kd_node *node; + std::priority_queue, pcmp> pq; + + distance_t dist; + double dist_to_parent_split; + + void addToPQ(kd_node *node) { + if (node->c_neg) { + addToPQ(node->c_neg); + addToPQ(node->c_pos); + } else { + for (typename kd_node::container_t::const_iterator i = node->data.begin(); i != node->data.end(); ++i) { + double d = dist((*i), point); + pq.push(std::make_pair(d, &(*i))); + } + } + } + + const data_t *next() { + while (1) { + if (pq.size()) { + q_t t = pq.top(); + if (!node->parent || t.first < dist_to_parent_split) { + pq.pop(); + return t.second; + } + } + + if (!node->parent) return NULL; + + if (node->parent->c_neg == node) { + addToPQ(node->parent->c_pos); + } else { + addToPQ(node->parent->c_neg); + } + + node = node->parent; + dist_to_parent_split = dist(node->splitpos, point); + } + } + + near_point_query(const vector _point, const kd_node *_node) : point(_point), node(_node), pq(), dist() { + while (node->c_neg) { + node = (point[node->axis] < node->pos) ? node->c_neg : node->c_pos; + } + if (node->parent) { + dist_to_parent_split = dist(node->parent->splitpos, point); + } else { + dist_to_parent_split = HUGE_VAL; + } + addToPQ(node); + } + }; + + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/math.hpp b/thirdparty/carve-1.4.0/include/carve/math.hpp new file mode 100644 index 00000000..a3e237d4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/math.hpp @@ -0,0 +1,51 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include + +namespace carve { + namespace math { + struct Matrix3; + using carve::geom3d::Vector; + + int cubic_roots(double c3, double c2, double c1, double c0, double *roots); + + void eigSolveSymmetric(const Matrix3 &m, + double &l1, Vector &e1, + double &l2, Vector &e2, + double &l3, Vector &e3); + + void eigSolve(const Matrix3 &m, double &l1, double &l2, double &l3); + + static inline bool ZERO(double x) { return fabs(x) < carve::EPSILON; } + + static inline double radians(double deg) { return deg * M_PI / 180.0; } + static inline double degrees(double rad) { return rad * 180.0 / M_PI; } + + static inline double ANG(double x) { + return (x < 0) ? x + M_TWOPI : x; + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/math_constants.hpp b/thirdparty/carve-1.4.0/include/carve/math_constants.hpp new file mode 100644 index 00000000..a91daf4e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/math_constants.hpp @@ -0,0 +1,33 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#ifndef M_SQRT_3 +#define M_SQRT_3 1.73205080756887729352 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#ifndef M_TWOPI +#define M_TWOPI (M_PI + M_PI) +#endif + diff --git a/thirdparty/carve-1.4.0/include/carve/matrix.hpp b/thirdparty/carve-1.4.0/include/carve/matrix.hpp new file mode 100644 index 00000000..198f3fb4 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/matrix.hpp @@ -0,0 +1,247 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +#include +#include + +namespace carve { + namespace math { + + struct Quaternion { + double x, y, z, w; + + Quaternion(double _x, double _y, double _z, double _w) : x(_x), y(_y), z(_z), w(_w) { + } + + Quaternion(double angle, const carve::geom3d::Vector &axis) { + double s = axis.length(); + if (!carve::math::ZERO(s)) { + double c = 1.0 / s; + double omega = -0.5 * angle; + s = sin(omega); + x = axis.x * c * s; + y = axis.y * c * s; + z = axis.z * c * s; + w = cos(omega); + normalize(); + } else { + x = y = z = 0.0; + w = 1.0; + } + } + + double lengthSquared() const { + return x * x + y * y + z * z + w * w; + } + + double length() const { + return sqrt(lengthSquared()); + } + + Quaternion normalized() const { + return Quaternion(*this).normalize(); + } + + Quaternion &normalize() { + double l = length(); + if (l == 0.0) { + x = 1.0; y = 0.0; z = 0.0; w = 0.0; + } else { + x /= l; y /= l; z /= l; w /= l; + } + return *this; + } + }; + + struct Matrix3 { + // access: .m[col][row], .v[col * 4 + row], ._cr + union { + double m[3][3]; + double v[9]; + struct { + // transposed + double _11, _12, _13; + double _21, _22, _23; + double _31, _32, _33; + }; + }; + Matrix3(double __11, double __21, double __31, + double __12, double __22, double __32, + double __13, double __23, double __33) { + // nb, args are row major, storage is column major. + _11 = __11; _12 = __12; _13 = __13; + _21 = __21; _22 = __22; _23 = __23; + _31 = __31; _32 = __32; _33 = __33; + } + Matrix3(double _m[3][3]) { + std::memcpy(m, _m, sizeof(m)); + } + Matrix3(double _v[9]) { + std::memcpy(v, _v, sizeof(v)); + } + Matrix3() { + _11 = 1.00; _12 = 0.00; _13 = 0.00; + _21 = 0.00; _22 = 1.00; _23 = 0.00; + _31 = 0.00; _32 = 0.00; _33 = 1.00; + } + }; + + struct Matrix { + // access: .m[col][row], .v[col * 4 + row], ._cr + union { + double m[4][4]; + double v[16]; + struct { + // transposed + double _11, _12, _13, _14; + double _21, _22, _23, _24; + double _31, _32, _33, _34; + double _41, _42 ,_43, _44; + }; + }; + Matrix(double __11, double __21, double __31, double __41, + double __12, double __22, double __32, double __42, + double __13, double __23, double __33, double __43, + double __14, double __24, double __34, double __44) { + // nb, args are row major, storage is column major. + _11 = __11; _12 = __12; _13 = __13; _14 = __14; + _21 = __21; _22 = __22; _23 = __23; _24 = __24; + _31 = __31; _32 = __32; _33 = __33; _34 = __34; + _41 = __41; _42 = __42; _43 = __43; _44 = __44; + } + Matrix(double _m[4][4]) { + std::memcpy(m, _m, sizeof(m)); + } + Matrix(double _v[16]) { + std::memcpy(v, _v, sizeof(v)); + } + Matrix() { + _11 = 1.00; _12 = 0.00; _13 = 0.00; _14 = 0.00; + _21 = 0.00; _22 = 1.00; _23 = 0.00; _24 = 0.00; + _31 = 0.00; _32 = 0.00; _33 = 1.00; _34 = 0.00; + _41 = 0.00; _42 = 0.00; _43 = 0.00; _44 = 1.00; + } + + static Matrix ROT(const Quaternion &q) { + const double w = q.w; + const double x = q.x; + const double y = q.y; + const double z = q.z; + return Matrix(1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w, 0.0, + 2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w, 0.0, + 2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y, 0.0, + 0.0, 0.0, 0.0, 1.0); + } + static Matrix ROT(double angle, const carve::geom3d::Vector &axis) { + return ROT(Quaternion(angle, axis)); + } + static Matrix ROT(double angle, double x, double y, double z) { + return ROT(Quaternion(angle, carve::geom::VECTOR(x, y, z))); + } + static Matrix TRANS(double x, double y, double z) { + return Matrix(1.0, 0.0, 0.0, x, + 0.0, 1.0, 0.0, y, + 0.0, 0.0, 1.0, z, + 0.0, 0.0, 0.0, 1.0); + } + static Matrix TRANS(const carve::geom3d::Vector &v) { + return TRANS(v.x, v.y, v.z); + } + static Matrix SCALE(double x, double y, double z) { + return Matrix(x, 0.0, 0.0, 0.0, + 0.0, y, 0.0, 0.0, + 0.0, 0.0, z, 0.0, + 0.0, 0.0, 0.0, 1.0); + } + static Matrix SCALE(const carve::geom3d::Vector &v) { + return SCALE(v.x, v.y, v.z); + } + static Matrix IDENT() { + return Matrix(1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + } + }; + + static inline bool operator==(const Matrix &A, const Matrix &B) { + for (size_t i = 0; i < 16; ++i) if (A.v[i] != B.v[i]) return false; + return true; + } + static inline bool operator!=(const Matrix &A, const Matrix &B) { + return !(A == B); + } + static inline carve::geom3d::Vector operator*(const Matrix &A, const carve::geom3d::Vector &b) { + return carve::geom::VECTOR( + A._11 * b.x + A._21 * b.y + A._31 * b.z + A._41, + A._12 * b.x + A._22 * b.y + A._32 * b.z + A._42, + A._13 * b.x + A._23 * b.y + A._33 * b.z + A._43 + ); + } + + static inline carve::geom3d::Vector &operator*=(carve::geom3d::Vector &b, const Matrix &A) { + b = A * b; + return b; + } + + static inline carve::geom3d::Vector operator*(const Matrix3 &A, const carve::geom3d::Vector &b) { + return carve::geom::VECTOR( + A._11 * b.x + A._21 * b.y + A._31 * b.z, + A._12 * b.x + A._22 * b.y + A._32 * b.z, + A._13 * b.x + A._23 * b.y + A._33 * b.z + ); + } + + static inline carve::geom3d::Vector &operator*=(carve::geom3d::Vector &b, const Matrix3 &A) { + b = A * b; + return b; + } + + static inline Matrix operator*(const Matrix &A, const Matrix &B) { + Matrix c; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + c.m[i][j] = 0.0; + for (int k = 0; k < 4; k++) { + c.m[i][j] += A.m[k][j] * B.m[i][k]; + } + } + } + return c; + } + + static inline Matrix3 operator*(const Matrix3 &A, const Matrix3 &B) { + Matrix3 c; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + c.m[i][j] = 0.0; + for (int k = 0; k < 3; k++) { + c.m[i][j] += A.m[k][j] * B.m[i][k]; + } + } + } + return c; + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/octree_decl.hpp b/thirdparty/carve-1.4.0/include/carve/octree_decl.hpp new file mode 100644 index 00000000..d6abea67 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/octree_decl.hpp @@ -0,0 +1,193 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +#include + +namespace carve { + + namespace csg { + + const double SLACK_FACTOR=1.0009765625; + const unsigned FACE_SPLIT_THRESHOLD=50U; + const unsigned EDGE_SPLIT_THRESHOLD=50U; + const unsigned POINT_SPLIT_THRESHOLD=20U; + const unsigned MAX_SPLIT_DEPTH=32; + + class Octree { + + public: + class Node { + private: + Node(const Node &node); // undefined. + Node &operator=(const Node &node); // undefined. + + public: + Node *parent; + Node *children[8]; + bool is_leaf; + + carve::geom3d::Vector min; + carve::geom3d::Vector max; + + std::vector::face_t *> faces; + std::vector::edge_t *> edges; + std::vector::vertex_t *> vertices; + + carve::geom3d::AABB aabb; + + Node(); + + Node(const carve::geom3d::Vector &newMin, const carve::geom3d::Vector &newMax); + Node(Node *p, double x1, double y1, double z1, double x2, double y2, double z2); + + ~Node(); + + bool mightContain(const carve::poly::Geometry<3>::face_t &face); + bool mightContain(const carve::poly::Geometry<3>::edge_t &edge); + bool mightContain(const carve::poly::Geometry<3>::vertex_t &p); + bool hasChildren(); + bool hasGeometry(); + + template + void putInside(const T &input, Node *child, T &output); + + bool split(); + }; + + + + Node *root; + + + + struct no_filter { + bool operator()(const carve::poly::Geometry<3>::edge_t *) { return true; } + bool operator()(const carve::poly::Geometry<3>::face_t *) { return true; } + }; + + + + Octree(); + + ~Octree(); + + + + void setBounds(const carve::geom3d::Vector &min, const carve::geom3d::Vector &max); + void setBounds(carve::geom3d::AABB aabb); + + + + void addEdges(const std::vector::edge_t > &edges); + void addFaces(const std::vector::face_t > &faces); + void addVertices(const std::vector::vertex_t *> &vertices); + + + + static carve::geom3d::AABB makeAABB(const Node *node); + + + + void doFindEdges(const carve::geom::aabb<3> &aabb, + Node *node, + std::vector::edge_t *> &out, + unsigned depth) const; + void doFindEdges(const carve::geom3d::LineSegment &l, + Node *node, + std::vector::edge_t *> &out, + unsigned depth) const; + void doFindEdges(const carve::geom3d::Vector &v, + Node *node, + std::vector::edge_t *> &out, + unsigned depth) const; + void doFindFaces(const carve::geom::aabb<3> &aabb, + Node *node, + std::vector::face_t *> &out, + unsigned depth) const; + void doFindFaces(const carve::geom3d::LineSegment &l, + Node *node, + std::vector::face_t *> &out, + unsigned depth) const; + + + + void doFindVerticesAllowDupes(const carve::geom3d::Vector &v, + Node *node, + std::vector::vertex_t *> &out, + unsigned depth) const; + + void findVerticesNearAllowDupes(const carve::geom3d::Vector &v, + std::vector::vertex_t *> &out) const; + + + + template + void doFindEdges(const carve::poly::Geometry<3>::face_t &f, Node *node, + std::vector::edge_t *> &out, + unsigned depth, + filter_t filter) const; + + template + void findEdgesNear(const carve::poly::Geometry<3>::face_t &f, + std::vector::edge_t *> &out, + filter_t filter) const; + + void findEdgesNear(const carve::poly::Geometry<3>::face_t &f, + std::vector::edge_t *> &out) const { + return findEdgesNear(f, out, no_filter()); + } + + + + void findEdgesNear(const carve::geom::aabb<3> &aabb, std::vector::edge_t *> &out) const; + void findEdgesNear(const carve::geom3d::LineSegment &l, std::vector::edge_t *> &out) const; + void findEdgesNear(const carve::poly::Geometry<3>::edge_t &e, std::vector::edge_t *> &out) const; + void findEdgesNear(const carve::geom3d::Vector &v, std::vector::edge_t *> &out) const; + + + + void findFacesNear(const carve::geom::aabb<3> &aabb, std::vector::face_t *> &out) const; + void findFacesNear(const carve::geom3d::LineSegment &l, std::vector::face_t *> &out) const; + void findFacesNear(const carve::poly::Geometry<3>::edge_t &e, std::vector::face_t *> &out) const; + + + + static void doSplit(int maxSplit, Node *node); + + + + template + void doIterate(int level, Node *node, const FUNC &f) const; + + template + void iterateNodes(const FUNC &f) const; + + + + void splitTree(); + + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/octree_impl.hpp b/thirdparty/carve-1.4.0/include/carve/octree_impl.hpp new file mode 100644 index 00000000..e8307ffd --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/octree_impl.hpp @@ -0,0 +1,79 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace carve { + namespace csg { + template + void Octree::doFindEdges(const carve::poly::Geometry<3>::face_t &f, + Node *node, + std::vector::edge_t *> &out, + unsigned depth, + filter_t filter) const { + if (node == NULL) { + return; + } + + if (node->aabb.intersects(f.aabb) && node->aabb.intersects(f.plane_eqn)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(f, node->children[i], out, depth + 1, filter); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->edges.size() > EDGE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(f, node->children[i], out, depth + 1, filter); + } + return; + } + } + for (std::vector::edge_t*>::const_iterator it = node->edges.begin(), e = node->edges.end(); it != e; ++it) { + if ((*it)->tag_once()) { + if (filter(*it)) { + out.push_back(*it); + } + } + } + } + } + } + + template + void Octree::findEdgesNear(const carve::poly::Geometry<3>::face_t &f, std::vector::edge_t *> &out, filter_t filter) const { + tagable::tag_begin(); + doFindEdges(f, root, out, 0, filter); + } + + template + void Octree::doIterate(int level, Node *node, const func_t &f) const{ + f(level, node); + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doIterate(level + 1, node->children[i], f); + } + } + } + + template + void Octree::iterateNodes(const func_t &f) const { + doIterate(0, root, f); + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/pointset.hpp b/thirdparty/carve-1.4.0/include/carve/pointset.hpp new file mode 100644 index 00000000..147b36f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/pointset.hpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include diff --git a/thirdparty/carve-1.4.0/include/carve/pointset_decl.hpp b/thirdparty/carve-1.4.0/include/carve/pointset_decl.hpp new file mode 100644 index 00000000..5826afad --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/pointset_decl.hpp @@ -0,0 +1,61 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace carve { + namespace point { + + struct Vertex : public tagable { + carve::geom3d::Vector v; + }; + + + + struct vec_adapt_vertex_ptr { + const carve::geom3d::Vector &operator()(const Vertex * const &v) { return v->v; } + carve::geom3d::Vector &operator()(Vertex *&v) { return v->v; } + }; + + + + struct PointSet { + std::vector vertices; + carve::geom3d::AABB aabb; + + PointSet(const std::vector &points); + PointSet() { + } + + void sortVertices(const carve::geom3d::Vector &axis); + + size_t vertexToIndex_fast(const Vertex *v) const; + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/pointset_impl.hpp b/thirdparty/carve-1.4.0/include/carve/pointset_impl.hpp new file mode 100644 index 00000000..fc9dea32 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/pointset_impl.hpp @@ -0,0 +1,36 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +namespace carve { + namespace point { + + inline size_t PointSet::vertexToIndex_fast(const Vertex *v) const { + return v - &vertices[0]; + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/pointset_iter.hpp b/thirdparty/carve-1.4.0/include/carve/pointset_iter.hpp new file mode 100644 index 00000000..b01e2165 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/pointset_iter.hpp @@ -0,0 +1,18 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + diff --git a/thirdparty/carve-1.4.0/include/carve/poly.hpp b/thirdparty/carve-1.4.0/include/carve/poly.hpp new file mode 100644 index 00000000..16c4da85 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/poly.hpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +#include diff --git a/thirdparty/carve-1.4.0/include/carve/poly_decl.hpp b/thirdparty/carve-1.4.0/include/carve/poly_decl.hpp new file mode 100644 index 00000000..f0638ac9 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/poly_decl.hpp @@ -0,0 +1,25 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include +#include diff --git a/thirdparty/carve-1.4.0/include/carve/poly_impl.hpp b/thirdparty/carve-1.4.0/include/carve/poly_impl.hpp new file mode 100644 index 00000000..75d1b3a1 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/poly_impl.hpp @@ -0,0 +1,25 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include +#include diff --git a/thirdparty/carve-1.4.0/include/carve/polyhedron_base.hpp b/thirdparty/carve-1.4.0/include/carve/polyhedron_base.hpp new file mode 100644 index 00000000..fcda10ca --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyhedron_base.hpp @@ -0,0 +1,147 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +#include +#include +#include + +namespace carve { + namespace poly { + + + + struct Object { + }; + + + + template + ptrdiff_t ptrToIndex_fast(const array_t &a, const typename array_t::value_type *v) { + return v - &a[0]; + } + + template + ptrdiff_t ptrToIndex(const array_t &a, const typename array_t::value_type *v) { + if (v < &a.front() || v > &a.back()) return -1; + return v - &a[0]; + } + + + template + struct Geometry : public Object { + struct Connectivity { + } connectivity; + }; + + + + template<> + struct Geometry<2> : public Object { + typedef Vertex<2> vertex_t; + typedef Edge<2> edge_t; + + struct Connectivity { + std::vector > vertex_to_edge; + } connectivity; + + std::vector vertices; + std::vector edges; + + ptrdiff_t vertexToIndex_fast(const vertex_t *v) const { return ptrToIndex_fast(vertices, v); } + ptrdiff_t vertexToIndex(const vertex_t *v) const { return ptrToIndex(vertices, v); } + + ptrdiff_t edgeToIndex_fast(const edge_t *e) const { return ptrToIndex_fast(edges, e); } + ptrdiff_t edgeToIndex(const edge_t *e) const { return ptrToIndex(edges, e); } + + + + // *** connectivity queries + + template + int vertexToEdges(const vertex_t *v, T result) const; + }; + + + + template<> + struct Geometry<3> : public Object { + typedef Vertex<3> vertex_t; + typedef Edge<3> edge_t; + typedef Face<3> face_t; + + struct Connectivity { + std::vector > vertex_to_edge; + std::vector > vertex_to_face; + std::vector > edge_to_face; + } connectivity; + + std::vector vertices; + std::vector edges; + std::vector faces; + + ptrdiff_t vertexToIndex_fast(const vertex_t *v) const { return ptrToIndex_fast(vertices, v); } + ptrdiff_t vertexToIndex(const vertex_t *v) const { return ptrToIndex(vertices, v); } + + ptrdiff_t edgeToIndex_fast(const edge_t *e) const { return ptrToIndex_fast(edges, e); } + ptrdiff_t edgeToIndex(const edge_t *e) const { return ptrToIndex(edges, e); } + + ptrdiff_t faceToIndex_fast(const face_t *f) const { return ptrToIndex_fast(faces, f); } + ptrdiff_t faceToIndex(const face_t *f) const { return ptrToIndex(faces, f); } + + template + bool orderVertices(order_t order); + + bool orderVertices() { return orderVertices(std::less()); } + + + + // *** connectivity queries + + const face_t *connectedFace(const face_t *, const edge_t *) const; + + template + int _faceNeighbourhood(const face_t *f, int depth, T *result) const; + + template + int faceNeighbourhood(const face_t *f, int depth, T result) const; + + template + int faceNeighbourhood(const edge_t *e, int m_id, int depth, T result) const; + + template + int faceNeighbourhood(const vertex_t *v, int m_id, int depth, T result) const; + + template + int vertexToEdges(const vertex_t *v, T result) const; + + template + int edgeToFaces(const edge_t *e, T result) const; + + template + int vertexToFaces(const vertex_t *v, T result) const; + }; + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/polyhedron_decl.hpp b/thirdparty/carve-1.4.0/include/carve/polyhedron_decl.hpp new file mode 100644 index 00000000..5e5fb7f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyhedron_decl.hpp @@ -0,0 +1,177 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +#include +#include +#include + +#include +#include + + +namespace carve { + namespace poly { + + class EdgeConnectivityInfo; + + + + struct Polyhedron : public Geometry<3> { + private: + Polyhedron(); // not implemented + Polyhedron &operator=(const Polyhedron &); // not implemented + + // *** initialization + + bool initSpatialIndex(); + void initVertexConnectivity(); + bool initEdgeConnectivity(const EdgeConnectivityInfo &); + void buildEdgeFaceMap(EdgeConnectivityInfo &); + void setFaceAndVertexOwner(); + + bool initConnectivity(); + bool markManifolds(); + bool calcManifoldEmbedding(); + + bool init(); + void faceRecalc(); + + void commonFaceInit(bool _recalc); + + public: + typedef std::unordered_map VVMap; + + static void collectFaceVertices(std::vector &faces, + std::vector &vertices, + carve::csg::VVMap &vmap); + + static void collectFaceVertices(std::vector &faces, + std::vector &vertices); + + std::vector manifold_is_closed; + std::vector manifold_is_negative; + + carve::geom3d::AABB aabb; + carve::csg::Octree octree; + + + + // *** construction of Polyhedron objects + + Polyhedron(const Polyhedron &); + + // copy a single manifold + Polyhedron(const Polyhedron &, int m_id); + + // copy a subset of manifolds + Polyhedron(const Polyhedron &, const std::vector &selected_manifolds); + + Polyhedron(std::vector &_faces, + std::vector &_vertices, + bool _recalc = false); + + Polyhedron(std::vector &_faces, + bool _recalc = false); + + Polyhedron(std::list &_faces, + bool _recalc = false); + + Polyhedron(const std::vector &vertices, + int n_faces, + const std::vector &face_indices); + + ~Polyhedron(); + + + + // *** containment queries + + void testVertexAgainstClosedManifolds(const carve::geom3d::Vector &v, + std::map &result, + bool ignore_orentation) const; + + PointClass containsVertex(const carve::geom3d::Vector &v, + const face_t **hit_face = NULL, + bool even_odd = false, + int manifold_id = -1) const; + + + + // *** locality queries + + void findEdgesNear(const carve::geom::aabb<3> &aabb, std::vector &edges) const; + void findEdgesNear(const carve::geom3d::LineSegment &l, std::vector &edges) const; + void findEdgesNear(const carve::geom3d::Vector &v, std::vector &edges) const; + void findEdgesNear(const face_t &face, std::vector &edges) const; + void findEdgesNear(const edge_t &edge, std::vector &edges) const; + + void findFacesNear(const carve::geom::aabb<3> &aabb, std::vector &faces) const; + void findFacesNear(const carve::geom3d::LineSegment &l, std::vector &faces) const; + void findFacesNear(const edge_t &edge, std::vector &faces) const; + + + + // *** manifold queries + + inline bool vertexOnManifold(const vertex_t *v, int m_id) const; + inline bool edgeOnManifold(const edge_t *e, int m_id) const; + + template + int vertexManifolds(const vertex_t *v, T result) const; + + template + int edgeManifolds(const edge_t *e, T result) const; + + size_t manifoldCount() const; + + bool hasOpenManifolds() const; + + + + + // *** transformation + + // flip face directions + void invertAll(); + void invert(const std::vector &selected_manifolds); + + void invert(int m_id); + void invert(); + + // matrix transform of vertices + void transform(const carve::math::Matrix &xform); + + // arbitrary function transform of vertices + template + void transform(const T &xform); + + void print(std::ostream &) const; + + void canonicalize(); + }; + + std::ostream &operator<<(std::ostream &, const Polyhedron &); + + } + +} diff --git a/thirdparty/carve-1.4.0/include/carve/polyhedron_impl.hpp b/thirdparty/carve-1.4.0/include/carve/polyhedron_impl.hpp new file mode 100644 index 00000000..ad9b237d --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyhedron_impl.hpp @@ -0,0 +1,287 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include + +namespace carve { + namespace poly { + + + + template + struct VPtrSort { + order_t ℴ + + VPtrSort(order_t &_order) : order(_order) {} + bool operator()(carve::poly::Polyhedron::vertex_t const *a, + carve::poly::Polyhedron::vertex_t const *b) const { + return order(a->v, b->v); + } + }; + + template + bool Geometry<3>::orderVertices(order_t order) { + static carve::TimingName FUNC_NAME("Geometry<3>::orderVertices()"); + carve::TimingBlock block(FUNC_NAME); + + std::vector vptr; + std::vector vmap; + std::vector vout; + const size_t N = vertices.size(); + + vptr.reserve(N); + vout.reserve(N); + vmap.resize(N); + + for (size_t i = 0; i != N; ++i) { + vptr.push_back(&vertices[i]); + } + std::sort(vptr.begin(), vptr.end(), VPtrSort(order)); + + for (size_t i = 0; i != N; ++i) { + vout.push_back(*vptr[i]); + vmap[vertexToIndex_fast(vptr[i])] = &vout[i]; + } + + for (size_t i = 0; i < faces.size(); ++i) { + face_t &f = faces[i]; + for (size_t j = 0; j < f.nVertices(); ++j) { + f.vertex(j) = vmap[vertexToIndex_fast(f.vertex(j))]; + } + } + for (size_t i = 0; i < edges.size(); ++i) { + edges[i].v1 = vmap[vertexToIndex_fast(edges[i].v1)]; + edges[i].v2 = vmap[vertexToIndex_fast(edges[i].v2)]; + } + + vout.swap(vertices); + + return true; + } + + + + template + int Geometry<3>::_faceNeighbourhood(const face_t *f, int depth, T *result) const { + if (depth < 0 || f->is_tagged()) return 0; + + f->tag(); + *(*result)++ = f; + + int r = 1; + for (size_t i = 0; i < f->edges.size(); ++i) { + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(f->edges[i])]; + const face_t *f2 = connectedFace(f, f->edges[i]); + if (f2) { + r += _faceNeighbourhood(f2, depth - 1, (*result)); + } + } + return r; + } + + + + template + int Geometry<3>::faceNeighbourhood(const face_t *f, int depth, T result) const { + tagable::tag_begin(); + + return _faceNeighbourhood(f, depth, &result); + } + + + + template + int Geometry<3>::faceNeighbourhood(const edge_t *e, int m_id, int depth, T result) const { + tagable::tag_begin(); + + int r = 0; + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(e)]; + for (size_t i = 0; i < edge_faces.size(); ++i) { + const face_t *f = edge_faces[i]; + if (f && f->manifold_id == m_id) { r += _faceNeighbourhood(f, depth, &result); } + } + return r; + } + + + + template + int Geometry<3>::faceNeighbourhood(const vertex_t *v, int m_id, int depth, T result) const { + tagable::tag_begin(); + + int r = 0; + const std::vector &vertex_faces = connectivity.vertex_to_face[vertexToIndex_fast(v)]; + for (size_t i = 0; i < vertex_faces.size(); ++i) { + const face_t *f = vertex_faces[i]; + if (f && f->manifold_id == m_id) { r += _faceNeighbourhood(f, depth, &result); } + } + return r; + } + + + + // accessing connectivity information. + template + int Geometry<3>::vertexToEdges(const vertex_t *v, T result) const { + const std::vector &e = connectivity.vertex_to_edge[vertexToIndex_fast(v)]; + std::copy(e.begin(), e.end(), result); + return e.size(); + } + + + + template + int Geometry<3>::vertexToFaces(const vertex_t *v, T result) const { + const std::vector &vertex_faces = connectivity.vertex_to_face[vertexToIndex_fast(v)]; + int c = 0; + for (size_t i = 0; i < vertex_faces.size(); ++i) { + *result++ = vertex_faces[i]; ++c; + } + return c; + } + + + + template + int Geometry<3>::edgeToFaces(const edge_t *e, T result) const { + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(e)]; + int c = 0; + for (size_t i = 0; i < edge_faces.size(); ++i) { + if (edge_faces[i] != NULL) { *result++ = edge_faces[i]; ++c; } + } + return c; + } + + + + inline const Geometry<3>::face_t *Geometry<3>::connectedFace(const face_t *f, const edge_t *e) const { + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(e)]; + for (size_t i = 0; i < (edge_faces.size() & ~1U); i++) { + if (edge_faces[i] == f) return edge_faces[i^1]; + } + return NULL; + } + + + + inline void Polyhedron::invert(int m_id) { + std::vector selected_manifolds(manifold_is_closed.size(), false); + if (m_id >=0 && (unsigned)m_id < selected_manifolds.size()) selected_manifolds[m_id] = true; + invert(selected_manifolds); + } + + + + inline void Polyhedron::invert() { + invertAll(); + } + + + + inline bool Polyhedron::edgeOnManifold(const edge_t *e, int m_id) const { + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(e)]; + + for (size_t i = 0; i < edge_faces.size(); ++i) { + if (edge_faces[i] && edge_faces[i]->manifold_id == m_id) return true; + } + return false; + } + + inline bool Polyhedron::vertexOnManifold(const vertex_t *v, int m_id) const { + const std::vector &f = connectivity.vertex_to_face[vertexToIndex_fast(v)]; + + for (size_t i = 0; i < f.size(); ++i) { + if (f[i]->manifold_id == m_id) return true; + } + return false; + } + + + + template + int Polyhedron::edgeManifolds(const edge_t *e, T result) const { + const std::vector &edge_faces = connectivity.edge_to_face[edgeToIndex_fast(e)]; + + for (size_t i = 0; i < (edge_faces.size() & ~1U); i += 2) { + const face_t *f1 = edge_faces[i]; + const face_t *f2 = edge_faces[i+1]; + assert (f1 || f2); + if (f1) + *result++ = f1->manifold_id; + else if (f2) + *result++ = f2->manifold_id; + } + return edge_faces.size() >> 1; + } + + + + template + int Polyhedron::vertexManifolds(const vertex_t *v, T result) const { + const std::vector &f = connectivity.vertex_to_face[vertexToIndex_fast(v)]; + std::set em; + + for (size_t i = 0; i < f.size(); ++i) { + em.insert(f[i]->manifold_id); + } + + std::copy(em.begin(), em.end(), result); + return em.size(); + } + + + + template + void Polyhedron::transform(const T &xform) { + for (size_t i = 0; i < vertices.size(); i++) { + vertices[i].v = xform(vertices[i].v); + } + faceRecalc(); + init(); + } + + + + inline size_t Polyhedron::manifoldCount() const { + return manifold_is_closed.size(); + } + + + + inline bool Polyhedron::hasOpenManifolds() const { + for (size_t i = 0; i < manifold_is_closed.size(); ++i) { + if (!manifold_is_closed[i]) return true; + } + return false; + } + + + + inline std::ostream &operator<<(std::ostream &o, const Polyhedron &p) { + p.print(o); + return o; + } + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/polyline.hpp b/thirdparty/carve-1.4.0/include/carve/polyline.hpp new file mode 100644 index 00000000..1d72399f --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyline.hpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include diff --git a/thirdparty/carve-1.4.0/include/carve/polyline_decl.hpp b/thirdparty/carve-1.4.0/include/carve/polyline_decl.hpp new file mode 100644 index 00000000..b088b9e0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyline_decl.hpp @@ -0,0 +1,151 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace carve { + namespace line { + + struct PolylineEdge; + struct Polyline; + struct polyline_vertex_const_iter; + struct polyline_vertex_iter; + struct polyline_edge_const_iter; + struct polyline_edge_iter; + + + + struct Vertex : public tagable { + carve::geom3d::Vector v; + std::list > edge_pairs; + + void addEdgePair(PolylineEdge *in, PolylineEdge *out) { + edge_pairs.push_back(std::make_pair(in, out)); + } + }; + + + + struct vec_adapt_vertex_ptr { + const carve::geom3d::Vector &operator()(const Vertex * const &v) { return v->v; } + carve::geom3d::Vector &operator()(Vertex *&v) { return v->v; } + }; + + + + struct PolylineEdge : public tagable { + Polyline *parent; + unsigned edgenum; + Vertex *v1, *v2; + + PolylineEdge(Polyline *_parent, int _edgenum, Vertex *_v1, Vertex *_v2); + + carve::geom3d::AABB aabb() const; + + inline PolylineEdge *prevEdge() const; + inline PolylineEdge *nextEdge() const; + }; + + + + struct Polyline { + bool closed; + std::vector edges; + + Polyline(); + + size_t vertexCount() const; + + size_t edgeCount() const; + + const PolylineEdge *edge(size_t e) const; + + PolylineEdge *edge(size_t e); + + const Vertex *vertex(size_t v) const; + + Vertex *vertex(size_t v); + + bool isClosed() const; + + polyline_vertex_const_iter vbegin() const; + polyline_vertex_const_iter vend() const; + polyline_vertex_iter vbegin(); + polyline_vertex_iter vend(); + + polyline_edge_const_iter ebegin() const; + polyline_edge_const_iter eend() const; + polyline_edge_iter ebegin(); + polyline_edge_iter eend(); + + carve::geom3d::AABB aabb() const; + + template + void _init(bool c, iter_t begin, iter_t end, std::vector &vertices); + + template + void _init(bool closed, iter_t begin, iter_t end, std::vector &vertices, std::forward_iterator_tag); + + template + void _init(bool closed, iter_t begin, iter_t end, std::vector &vertices, std::random_access_iterator_tag); + + template + Polyline(bool closed, iter_t begin, iter_t end, std::vector &vertices); + + ~Polyline() { + for (size_t i = 0; i < edges.size(); ++i) { + delete edges[i]; + } + } + }; + + + + struct PolylineSet { + typedef std::list line_list; + typedef line_list::iterator line_iter; + typedef line_list::const_iterator const_line_iter; + + std::vector vertices; + line_list lines; + carve::geom3d::AABB aabb; + + PolylineSet(const std::vector &points); + PolylineSet() { + } + + template + void addPolyline(bool closed, iter_t begin, iter_t end); + + void sortVertices(const carve::geom3d::Vector &axis); + + size_t vertexToIndex_fast(const Vertex *v) const; + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/polyline_impl.hpp b/thirdparty/carve-1.4.0/include/carve/polyline_impl.hpp new file mode 100644 index 00000000..e43d0029 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyline_impl.hpp @@ -0,0 +1,160 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +namespace carve { + namespace line { + + inline PolylineEdge::PolylineEdge(Polyline *_parent, int _edgenum, Vertex *_v1, Vertex *_v2) : + tagable(), parent(_parent), edgenum(_edgenum), v1(_v1), v2(_v2) { + } + + inline carve::geom3d::AABB PolylineEdge::aabb() const { + carve::geom3d::AABB a; + a.fit(v1->v, v2->v); + return a; + } + + inline PolylineEdge *PolylineEdge::prevEdge() const { + if (edgenum) { + return parent->edge(edgenum - 1); + } else { + if (parent->closed) { + return parent->edge(parent->edgeCount() - 1); + } else { + return NULL; + } + } + } + + inline PolylineEdge *PolylineEdge::nextEdge() const { + if (edgenum + 1 < parent->edgeCount()) { + return parent->edge(edgenum + 1); + } else { + if (parent->closed) { + return parent->edge(0); + } else { + return NULL; + } + } + } + + + + inline Polyline::Polyline() : edges() { + } + + inline size_t Polyline::vertexCount() const { + return edgeCount() + (closed ? 0 : 1); + } + + inline size_t Polyline::edgeCount() const { + return edges.size(); + } + + inline const PolylineEdge *Polyline::edge(size_t e) const { + return edges[e % edges.size()]; + } + + inline PolylineEdge *Polyline::edge(size_t e) { + return edges[e % edges.size()]; + } + + inline const Vertex *Polyline::vertex(size_t v) const { + if (closed) { + v %= edgeCount(); + } else if (v >= edgeCount()) { + return v == edgeCount() ? edges.back()->v2 : NULL; + } + return edges[v]->v1; + } + + inline Vertex *Polyline::vertex(size_t v) { + if (closed) { + v %= edgeCount(); + } else if (v >= edgeCount()) { + return v == edgeCount() ? edges.back()->v2 : NULL; + } + return edges[v]->v1; + } + + inline bool Polyline::isClosed() const { + return closed; + } + + template + void Polyline::_init(bool c, iter_t begin, iter_t end, std::vector &vertices) { + closed = c; + + PolylineEdge *e; + if (begin == end) return; + size_t v1 = (int)*begin++; + if (begin == end) return; + + while (begin != end) { + size_t v2 = (int)*begin++; + e = new PolylineEdge(this, edges.size(), &vertices[v1], &vertices[v2]); + edges.push_back(e); + v1 = v2; + } + + if (closed) { + e = new PolylineEdge(this, edges.size(), edges.back()->v2, edges.front()->v1); + edges.push_back(e); + + edges.front()->v1->addEdgePair(edges.back(), edges.front()); + for (size_t i = 1; i < edges.size(); ++i) { + edges[i]->v1->addEdgePair(edges[i-1], edges[i]); + } + } else { + edges.front()->v1->addEdgePair(NULL, edges.front()); + for (size_t i = 1; i < edges.size(); ++i) { + edges[i]->v1->addEdgePair(edges[i-1], edges[i]); + } + edges.back()->v2->addEdgePair(edges.back(), NULL); + } + } + + template + void Polyline::_init(bool closed, iter_t begin, iter_t end, std::vector &vertices, std::forward_iterator_tag) { + _init(closed, begin, end, vertices); + } + + template + void Polyline::_init(bool closed, iter_t begin, iter_t end, std::vector &vertices, std::random_access_iterator_tag) { + edges.reserve(end - begin - (closed ? 0 : 1)); + _init(closed, begin, end, vertices); + } + + template + Polyline::Polyline(bool closed, iter_t begin, iter_t end, std::vector &vertices) { + _init(closed, begin, end, vertices, typename std::iterator_traits::iterator_category()); + } + + + + template + void PolylineSet::addPolyline(bool closed, iter_t begin, iter_t end) { + Polyline *p = new Polyline(closed, begin, end, vertices); + lines.push_back(p); + } + + inline size_t PolylineSet::vertexToIndex_fast(const Vertex *v) const { + return v - &vertices[0]; + } + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/polyline_iter.hpp b/thirdparty/carve-1.4.0/include/carve/polyline_iter.hpp new file mode 100644 index 00000000..fb7dcab3 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/polyline_iter.hpp @@ -0,0 +1,198 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#pragma once + +#include +#include +#include +#include + +#include + +namespace carve { + namespace line { + + struct polyline_vertex_iter : public std::iterator { + Polyline *base; + size_t idx; + + polyline_vertex_iter(Polyline *_base) : base(_base), idx(0) { + } + + polyline_vertex_iter(Polyline *_base, size_t _idx) : base(_base), idx(_idx) { + } + + polyline_vertex_iter operator++(int) { return polyline_vertex_iter(base, idx++); } + polyline_vertex_iter &operator++() { ++idx; return *this; } + polyline_vertex_iter &operator+=(int v) { idx += v; return *this; } + + polyline_vertex_iter operator--(int) { return polyline_vertex_iter(base, idx--); } + polyline_vertex_iter &operator--() { --idx; return *this; } + polyline_vertex_iter &operator-=(int v) { idx -= v; return *this; } + + Vertex *operator*() const { + return base->vertex(idx); + } + }; + + + + static inline int operator-(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx - b.idx; } + + static inline bool operator==(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx == b.idx; } + static inline bool operator!=(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx != b.idx; } + static inline bool operator<(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx < b.idx; } + static inline bool operator>(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx > b.idx; } + static inline bool operator<=(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx <= b.idx; } + static inline bool operator>=(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx >= b.idx; } + + + + struct polyline_vertex_const_iter : public std::iterator { + const Polyline *base; + size_t idx; + + polyline_vertex_const_iter(const Polyline *_base) : base(_base), idx(0) { + } + + polyline_vertex_const_iter(const Polyline *_base, size_t _idx) : base(_base), idx(_idx) { + } + + polyline_vertex_const_iter operator++(int) { return polyline_vertex_const_iter(base, idx++); } + polyline_vertex_const_iter &operator++() { ++idx; return *this; } + polyline_vertex_const_iter &operator+=(int v) { idx += v; return *this; } + + polyline_vertex_const_iter operator--(int) { return polyline_vertex_const_iter(base, idx--); } + polyline_vertex_const_iter &operator--() { --idx; return *this; } + polyline_vertex_const_iter &operator-=(int v) { idx -= v; return *this; } + + const Vertex *operator*() const { + return base->vertex(idx); + } + }; + + + + static inline int operator-(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx - b.idx; } + + static inline bool operator==(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx == b.idx; } + static inline bool operator!=(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx != b.idx; } + static inline bool operator<(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx < b.idx; } + static inline bool operator>(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx > b.idx; } + static inline bool operator<=(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx <= b.idx; } + static inline bool operator>=(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx >= b.idx; } + + inline polyline_vertex_const_iter Polyline::vbegin() const { + return polyline_vertex_const_iter(this, 0); + } + inline polyline_vertex_const_iter Polyline::vend() const { + return polyline_vertex_const_iter(this, vertexCount()); + } + inline polyline_vertex_iter Polyline::vbegin() { + return polyline_vertex_iter(this, 0); + } + inline polyline_vertex_iter Polyline::vend() { + return polyline_vertex_iter(this, vertexCount()); + } + + + + struct polyline_edge_iter : public std::iterator { + Polyline *base; + size_t idx; + + polyline_edge_iter(Polyline *_base) : base(_base), idx(0) { + } + + polyline_edge_iter(Polyline *_base, size_t _idx) : base(_base), idx(_idx) { + } + + polyline_edge_iter operator++(int) { return polyline_edge_iter(base, idx++); } + polyline_edge_iter &operator++() { ++idx; return *this; } + polyline_edge_iter &operator+=(int v) { idx += v; return *this; } + + polyline_edge_iter operator--(int) { return polyline_edge_iter(base, idx--); } + polyline_edge_iter &operator--() { --idx; return *this; } + polyline_edge_iter &operator-=(int v) { idx -= v; return *this; } + + PolylineEdge *operator*() const { + return base->edge(idx); + } + }; + + + + static inline int operator-(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx - b.idx; } + + static inline bool operator==(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx == b.idx; } + static inline bool operator!=(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx != b.idx; } + static inline bool operator<(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx < b.idx; } + static inline bool operator>(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx > b.idx; } + static inline bool operator<=(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx <= b.idx; } + static inline bool operator>=(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx >= b.idx; } + + + + struct polyline_edge_const_iter : public std::iterator { + const Polyline *base; + size_t idx; + + polyline_edge_const_iter(const Polyline *_base) : base(_base), idx(0) { + } + + polyline_edge_const_iter(const Polyline *_base, size_t _idx) : base(_base), idx(_idx) { + } + + polyline_edge_const_iter operator++(int) { return polyline_edge_const_iter(base, idx++); } + polyline_edge_const_iter &operator++() { ++idx; return *this; } + polyline_edge_const_iter &operator+=(int v) { idx += v; return *this; } + + polyline_edge_const_iter operator--(int) { return polyline_edge_const_iter(base, idx--); } + polyline_edge_const_iter &operator--() { --idx; return *this; } + polyline_edge_const_iter &operator-=(int v) { idx -= v; return *this; } + + const PolylineEdge *operator*() const { + return base->edge(idx); + } + }; + + + + static inline int operator-(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx - b.idx; } + + static inline bool operator==(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx == b.idx; } + static inline bool operator!=(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx != b.idx; } + static inline bool operator<(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx < b.idx; } + static inline bool operator>(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx > b.idx; } + static inline bool operator<=(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx <= b.idx; } + static inline bool operator>=(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx >= b.idx; } + + inline polyline_edge_const_iter Polyline::ebegin() const { + return polyline_edge_const_iter(this, 0); + } + inline polyline_edge_const_iter Polyline::eend() const { + return polyline_edge_const_iter(this, edgeCount()); + } + inline polyline_edge_iter Polyline::ebegin() { + return polyline_edge_iter(this, 0); + } + inline polyline_edge_iter Polyline::eend() { + return polyline_edge_iter(this, edgeCount()); + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/rescale.hpp b/thirdparty/carve-1.4.0/include/carve/rescale.hpp new file mode 100644 index 00000000..6419813e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/rescale.hpp @@ -0,0 +1,100 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include + +#include + +namespace carve { + namespace rescale { + + template + T calc_scale(T max) { + const int radix = std::numeric_limits::radix; + + T div = T(1); + T m = fabs(max); + while (div < m) div *= radix; + m *= radix; + while (div > m) div /= radix; + return div; + } + + template + T calc_delta(T min, T max) { + const int radix = std::numeric_limits::radix; + + if (min >= T(0) || max <= T(0)) { + bool neg = false; + if (max <= T(0)) { + min = -min; + max = -max; + std::swap(min, max); + neg = true; + } + T t = T(1); + while (t > max) t /= radix; + while (t <= max/radix) t *= radix; + volatile T temp = t + min; + temp -= t; + if (neg) temp = -temp; + return temp; + } else { + return T(0); + } + } + + struct rescale { + double dx, dy, dz, scale; + + void init(double minx, double miny, double minz, double maxx, double maxy, double maxz) { + dx = calc_delta(minx, maxx); minx -= dx; maxx -= dx; + dy = calc_delta(miny, maxy); miny -= dy; maxy -= dy; + dz = calc_delta(minz, maxz); minz -= dz; maxz -= dz; + scale = calc_scale(std::max(std::max(fabs(minz), fabs(maxz)), + std::max(std::max(fabs(minx), fabs(maxx)), + std::max(fabs(miny), fabs(maxy))))); + } + + rescale(double minx, double miny, double minz, double maxx, double maxy, double maxz) { + init(minx, miny, minz, maxx, maxy, maxz); + } + rescale(const carve::geom3d::Vector &min, const carve::geom3d::Vector &max) { + init(min.x, min.y, min.z, max.x, max.y, max.z); + } + }; + + struct fwd { + rescale r; + fwd(const rescale &_r) : r(_r) { } + carve::geom3d::Vector operator()(const carve::geom3d::Vector &v) const { return carve::geom::VECTOR((v.x - r.dx) / r.scale, (v.y - r.dy) / r.scale, (v.z - r.dz) / r.scale); } + }; + + struct rev { + rescale r; + rev(const rescale &_r) : r(_r) { } + carve::geom3d::Vector operator()(const carve::geom3d::Vector &v) const { return carve::geom::VECTOR((v.x * r.scale) + r.dx, (v.y * r.scale) + r.dy, (v.z * r.scale) + r.dz); } + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/spacetree.hpp b/thirdparty/carve-1.4.0/include/carve/spacetree.hpp new file mode 100644 index 00000000..eba27989 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/spacetree.hpp @@ -0,0 +1,264 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include +#include +#include + +namespace carve { + + namespace space { + + static inline bool intersection_test(const carve::geom::aabb<3> &aabb, const carve::poly::Face<3> *face) { + if (face->nVertices() == 3) { + return aabb.intersects(carve::geom::tri<3>(face->vertex(0)->v, face->vertex(1)->v, face->vertex(2)->v)); + } else { + // partial, conservative SAT. + return aabb.intersects(face->aabb) && aabb.intersects(face->plane_eqn); + } + } + + static inline bool intersection_test(const carve::geom::aabb<3> &aabb, const carve::poly::Edge<3> *edge) { + return aabb.intersectsLineSegment(edge->v1->v, edge->v2->v); + } + + static inline bool intersection_test(const carve::geom::aabb<3> &aabb, const carve::poly::Vertex<3> *vertex) { + return aabb.intersects(vertex->v); + } + + + + struct nodedata_FaceEdge { + std::vector *> faces; + std::vector *> edges; + + void add(const carve::poly::Face<3> *face) { + faces.push_back(face); + } + + void add(const carve::poly::Edge<3> *edge) { + edges.push_back(edge); + } + + template + void _fetch(iter_t &iter, const carve::poly::Edge<3> *) { + std::copy(edges.begin(), edges.end(), iter); + } + + template + void _fetch(iter_t &iter, const carve::poly::Face<3> *) { + std::copy(faces.begin(), faces.end(), iter); + } + + template + void propagate(node_t *node) { + } + + template + void fetch(iter_t &iter) { + return _fetch(iter, std::iterator_traits::value_type); + } + }; + + + + const static double SLACK_FACTOR = 1.0009765625; + const static unsigned MAX_SPLIT_DEPTH = 32; + + + + template + class SpatialSubdivTree { + + typedef carve::geom::aabb aabb_t; + typedef carve::geom::vector vector_t; + + public: + + class Node { + enum { + n_children = 1 << n_dim + }; + + public: + Node *parent; + Node *children; + + vector_t min; + vector_t max; + + aabb_t aabb; + + nodedata_t data; + + private: + Node(const Node &node); // undefined. + Node &operator=(const Node &node); // undefined. + + Node() { + } + + inline aabb_t makeAABB() const { + vector_t centre = 0.5 * (min + max); + vector_t size = SLACK_FACTOR * 0.5 * (max - min); + return aabb_t(centre, size); + } + + void setup(Node *_parent, const vector_t &_min, const vector_t &_max) { + parent = _parent; + min = _min; + max = _max; + aabb = makeAABB(); + } + + void alloc_children() { + vector_t mid = 0.5 * (min + max); + children = new Node[n_children]; + for (size_t i = 0; i < (n_children); ++i) { + vector_t new_min, new_max; + for (size_t c = 0; c < n_dim; ++c) { + if (i & (1 << c)) { + new_min.v[c] = min.v[c]; + new_max.v[c] = mid.v[c]; + } else { + new_min.v[c] = mid.v[c]; + new_max.v[c] = max.v[c]; + } + } + children[i].setup(this, new_min, new_max); + } + } + + void dealloc_children() { + delete [] children; + } + + public: + + inline bool isLeaf() const { return children == NULL; } + + Node(Node *_parent, const vector_t &_min, const vector_t &_max) : parent(_parent), min(_min), max(_max), children(NULL) { + aabb = makeAABB(); + } + + ~Node() { + dealloc_children(); + } + + bool split() { + if (isLeaf()) { + alloc_children(); + data.propagate(this); + } + return isLeaf(); + } + + template + bool insert(const obj_t &object) { + if (!isLeaf()) { + for (size_t i = 0; i < n_children; ++i) { + if (intersection_test(children[i].aabb, object)) { + children[i].insert(object); + } + } + } else { + data.add(object); + } + } + + template + void insertVector(typename std::vector::iterator beg, typename std::vector::iterator end) { + if (isLeaf()) { + while (beg != end) { + data.add(*beg); + } + } else { + for (size_t i = 0; i < n_children; ++i) { + typename std::vector::iterator mid = std::partition(beg, end, std::bind1st(intersection_test, children[i].aabb)); + children[i].insertVector(beg, mid); + } + } + } + + template + void insertMany(iter_t begin, iter_t end) { + if (isLeaf()) { + } + } + + template + void findObjectsNear(const obj_t &object, iter_t &output, filter_t filter) { + if (!isLeaf()) { + for (size_t i = 0; i < n_children; ++i) { + if (intersection_test(children[i].aabb, object)) { + children[i].findObjectsNear(object, output, filter); + } + } + return; + } + data.fetch(output); + } + + // bool hasGeometry(); + + // template + // void putInside(const T &input, Node *child, T &output); + + }; + + + + Node *root; + + SpatialSubdivTree(const vector_t &_min, const vector_t &_max) : root(new Node(NULL, _min, _max)) { + } + + ~SpatialSubdivTree() { + delete root; + } + + struct no_filter { + template + bool operator()(const obj_t &obj) const { + return true; + } + }; + + struct tag_filter { + template + bool operator()(const obj_t &obj) const { + return obj.tag_once(); + } + }; + + // in order to be used as an input, aabb_t::intersect(const obj_t &) must exist. + template + void findObjectsNear(const obj_t &object, iter_t output, filter_t filter) { + if (!intersection_test(root->aabb, object)) return; + root->findObjectsNear(root, object, output, filter); + } + + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/tag.hpp b/thirdparty/carve-1.4.0/include/carve/tag.hpp new file mode 100644 index 00000000..6ac82d8c --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/tag.hpp @@ -0,0 +1,44 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +namespace carve { + + class tagable { + private: + static int s_count; + + protected: + mutable int __tag; + + public: + tagable(const tagable &) : __tag(s_count - 1) { } + tagable &operator=(const tagable &) { return *this; } + + tagable() : __tag(s_count - 1) { } + + void tag() const { __tag = s_count; } + void untag() const { __tag = s_count - 1; } + bool is_tagged() const { return __tag == s_count; } + bool tag_once() const { if (__tag == s_count) return false; __tag = s_count; return true; } + + static void tag_begin() { s_count++; } + }; +} diff --git a/thirdparty/carve-1.4.0/include/carve/timing.hpp b/thirdparty/carve-1.4.0/include/carve/timing.hpp new file mode 100644 index 00000000..0745ce87 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/timing.hpp @@ -0,0 +1,96 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#ifndef CARVE_USE_TIMINGS +#define CARVE_USE_TIMINGS 0 +#endif + +namespace carve { + +#if CARVE_USE_TIMINGS + + class TimingName { + public: + TimingName(const char *name); + int id; + }; + + class TimingBlock { + public: + /** + * Starts timing at the end of this constructor, using the given ID. To + * associate an ID with a textual name, use Timing::registerID. + */ + TimingBlock(int id); + TimingBlock(const TimingName &name); + ~TimingBlock(); + }; + + class Timing { + public: + + /** + * Starts timing against a particular ID. + */ + static void start(int id); + + static void start(const TimingName &id) { + start(id.id); + } + + /** + * Stops the most recent timing block. + */ + static double stop(); + + /** + * This will print out the current state of recorded time blocks. It will + * display the tree of timings, as well as the summaries down the bottom. + */ + static void printTimings(); + + /** + * Associates a particular ID with a text string. This is used when + * printing out the timings. + */ + static void registerID(int id, const char *name); + + }; + +#else + + struct TimingName { + TimingName(const char *) {} + }; + struct TimingBlock { + TimingBlock(int id) {} + TimingBlock(const TimingName &name) {} + }; + struct Timing { + static void start(int id) {} + static void start(const TimingName &id) {} + static double stop() { return 0; } + static void printTimings() {} + static void registerID(int id, const char *name) {} + }; + +#endif +} diff --git a/thirdparty/carve-1.4.0/include/carve/tree.hpp b/thirdparty/carve-1.4.0/include/carve/tree.hpp new file mode 100644 index 00000000..7918812e --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/tree.hpp @@ -0,0 +1,311 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include + +namespace carve { + namespace csg { + + class CSG_TreeNode { + CSG_TreeNode(const CSG_TreeNode &); + CSG_TreeNode &operator=(const CSG_TreeNode &); + + protected: + + public: + CSG_TreeNode() { + } + + virtual ~CSG_TreeNode() { + } + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) =0; + + virtual carve::poly::Polyhedron *eval(CSG &csg) { + bool temp; + carve::poly::Polyhedron *r = eval(temp, csg); + if (!temp) r = new carve::poly::Polyhedron(*r); + return r; + } + }; + + + + class CSG_TransformNode : public CSG_TreeNode { + carve::math::Matrix transform; + CSG_TreeNode *child; + + public: + CSG_TransformNode(const carve::math::Matrix &_transform, CSG_TreeNode *_child) : transform(_transform), child(_child) { + } + virtual ~CSG_TransformNode() { + delete child; + } + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) { + carve::poly::Polyhedron *result = child->eval(is_temp, csg); + if (!is_temp) { + result = new carve::poly::Polyhedron(*result); + is_temp = true; + } + result->transform(transform); + return result; + } + }; + + + + + class CSG_InvertNode : public CSG_TreeNode { + std::vector selected_groups; + CSG_TreeNode *child; + + public: + CSG_InvertNode(CSG_TreeNode *_child) : selected_groups(), child(_child) { + } + CSG_InvertNode(int g_id, CSG_TreeNode *_child) : selected_groups(), child(_child) { + selected_groups.resize(g_id + 1, false); + selected_groups[g_id] = true; + } + virtual ~CSG_InvertNode() { + delete child; + } + + template + CSG_InvertNode(T start, T end, CSG_TreeNode *_child) : selected_groups(), child(_child) { + while (start != end) { + int g_id = (int)(*start); + if (selected_groups.size() < g_id + 1) selected_groups.resize(g_id + 1, false); + selected_groups[g_id] = true; + ++start; + } + } + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) { + bool c_temp; + carve::poly::Polyhedron *c = child->eval(c_temp, csg); + carve::poly::Polyhedron *result; + if (!c_temp) { + result = new carve::poly::Polyhedron(*c); + } else { + result = c; + } + if (!selected_groups.size()) { + result->invertAll(); + } else { + result->invert(selected_groups); + } + is_temp = true; + return result; + } + }; + + + + + class CSG_SelectNode : public CSG_TreeNode { + std::vector selected_manifolds; + CSG_TreeNode *child; + + public: + CSG_SelectNode(int m_id, CSG_TreeNode *_child) : selected_manifolds(), child(_child) { + selected_manifolds.resize(m_id + 1, false); + selected_manifolds[m_id] = true; + } + + template + CSG_SelectNode(T start, T end, CSG_TreeNode *_child) : selected_manifolds(), child(_child) { + while (start != end) { + int m_id = (int)(*start); + if ((int)selected_manifolds.size() < m_id + 1) selected_manifolds.resize(m_id + 1, false); + selected_manifolds[m_id] = true; + ++start; + } + } + + virtual ~CSG_SelectNode() { + delete child; + } + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) { + bool c_temp; + carve::poly::Polyhedron *c = child->eval(c_temp, csg); + carve::poly::Polyhedron *result = new carve::poly::Polyhedron(*c, selected_manifolds); + if (c_temp) delete c; + is_temp = true; + return result; + } + }; + + + + + class CSG_PolyNode : public CSG_TreeNode { + carve::poly::Polyhedron *poly; + bool del; + + public: + CSG_PolyNode(carve::poly::Polyhedron *_poly, bool _del) : poly(_poly), del(_del) { + } + virtual ~CSG_PolyNode() { + static carve::TimingName FUNC_NAME("delete polyhedron"); + carve::TimingBlock block(FUNC_NAME); + + if (del) delete poly; + } + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) { + is_temp = false; + return poly; + } + }; + + + + class CSG_OPNode : public CSG_TreeNode { + CSG_TreeNode *left, *right; + CSG::OP op; + bool rescale; + CSG::CLASSIFY_TYPE classify_type; + + public: + CSG_OPNode(CSG_TreeNode *_left, + CSG_TreeNode *_right, + CSG::OP _op, + bool _rescale, + CSG::CLASSIFY_TYPE _classify_type = CSG::CLASSIFY_NORMAL) : left(_left), right(_right), op(_op), rescale(_rescale), classify_type(_classify_type) { + } + + virtual ~CSG_OPNode() { + delete left; + delete right; + } + + void minmax(double &min_x, double &min_y, double &min_z, + double &max_x, double &max_y, double &max_z, + const std::vector &points) { + for (unsigned i = 1; i < points.size(); ++i) { + min_x = std::min(min_x, points[i].x); + max_x = std::max(max_x, points[i].x); + min_y = std::min(min_y, points[i].y); + max_y = std::max(max_y, points[i].y); + min_z = std::min(min_z, points[i].z); + max_z = std::max(max_z, points[i].z); + } + } + + virtual carve::poly::Polyhedron *evalScaled(bool &is_temp, CSG &csg) { + carve::poly::Polyhedron *l, *r; + bool l_temp, r_temp; + + l = left->eval(l_temp, csg); + r = right->eval(r_temp, csg); + + if (!l_temp) { l = new carve::poly::Polyhedron(*l); } + if (!r_temp) { r = new carve::poly::Polyhedron(*r); } + + carve::geom3d::Vector min, max; + carve::geom3d::Vector min_l, max_l; + carve::geom3d::Vector min_r, max_r; + + carve::geom::bounds<3>(l->vertices.begin(), + l->vertices.end(), + carve::poly::vec_adapt_vertex_ref(), + min_l, + max_l); + carve::geom::bounds<3>(r->vertices.begin(), + r->vertices.end(), + carve::poly::vec_adapt_vertex_ref(), + min_r, + max_r); + + carve::geom::assign_op(min, min_l, min_r, carve::util::min_functor()); + carve::geom::assign_op(max, max_l, max_r, carve::util::max_functor()); + + carve::rescale::rescale scaler(min.x, min.y, min.z, max.x, max.y, max.z); + + carve::rescale::fwd fwd_r(scaler); + carve::rescale::rev rev_r(scaler); + + l->transform(fwd_r); + r->transform(fwd_r); + + carve::poly::Polyhedron *result = NULL; + { + static carve::TimingName FUNC_NAME("csg.compute()"); + carve::TimingBlock block(FUNC_NAME); + result = csg.compute(l, r, op, NULL, classify_type); + } + + { + static carve::TimingName FUNC_NAME("delete polyhedron"); + carve::TimingBlock block(FUNC_NAME); + + delete l; + delete r; + } + + result->transform(rev_r); + + is_temp = true; + return result; + } + + virtual carve::poly::Polyhedron *evalUnscaled(bool &is_temp, CSG &csg) { + carve::poly::Polyhedron *l, *r; + bool l_temp, r_temp; + + l = left->eval(l_temp, csg); + r = right->eval(r_temp, csg); + + carve::poly::Polyhedron *result = NULL; + { + static carve::TimingName FUNC_NAME("csg.compute()"); + carve::TimingBlock block(FUNC_NAME); + result = csg.compute(l, r, op, NULL, classify_type); + } + + { + static carve::TimingName FUNC_NAME("delete polyhedron"); + carve::TimingBlock block(FUNC_NAME); + + if (l_temp) delete l; + if (r_temp) delete r; + } + + is_temp = true; + return result; + } + + + virtual carve::poly::Polyhedron *eval(bool &is_temp, CSG &csg) { + if (rescale) { + return evalScaled(is_temp, csg); + } else { + return evalUnscaled(is_temp, csg); + } + } + }; + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/triangulator.hpp b/thirdparty/carve-1.4.0/include/carve/triangulator.hpp new file mode 100644 index 00000000..1b9545f5 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/triangulator.hpp @@ -0,0 +1,175 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include +#include +#include + +#include + +#include + +namespace carve { + namespace triangulate { + + /** + * \brief Merge a set of holes into a polygon. (templated) + * + * Take a polygon loop and a collection of hole loops, and patch + * the hole loops into the polygon loop, returning a vector of + * vertices from the polygon and holes, which describes a new + * polygon boundary with no holes. The new polygon boundary is + * constructed via the addition of edges * joining the polygon + * loop to the holes. + * + * This may be applied to arbitrary vertex data (generally + * carve::geom3d::Vertex pointers), but a projection function must + * be supplied to convert vertices to coordinates in 2-space, in + * which the work is performed. + * + * @tparam project_t A functor which converts vertices to a 2d + * projection. + * @tparam vert_t The vertex type. + * @param project The projection functor. + * @param f_loop The polygon loop into which holes are to be + * incorporated. + * @param h_loops The set of hole loops to be incorporated. + * + * @return A vector of vertex pointers. + */ + template + static std::vector + incorporateHolesIntoPolygon(const project_t &project, + const std::vector &f_loop, + const std::vector > &h_loops); + + void + incorporateHolesIntoPolygon(const std::vector > &poly, + std::vector > &result, + size_t poly_loop, + const std::vector &hole_loops); + + /** + * \brief Merge a set of holes into a polygon. (2d) + * + * Take a polygon loop and a collection of hole loops, and patch + * the hole loops into the polygon loop, returning a vector of + * containing the vertices from the polygon and holes which + * describes a new polygon boundary with no holes, through the + * addition of edges joining the polygon loop to the holes. + * + * @param poly A vector containing the face loop (the first + * element of poly) and the hole loops (second and + * subsequent elements of poly). + * + * @return A vector of pairs of that + * reference poly and define the result polygon loop. + */ + std::vector > incorporateHolesIntoPolygon(const std::vector > &poly); + + std::vector > > mergePolygonsAndHoles(const std::vector > &poly); + + + struct tri_idx { + union { + unsigned v[3]; + struct { unsigned a, b, c; }; + }; + + tri_idx() : a(0), b(0), c(0) { + } + tri_idx(unsigned _a, unsigned _b, unsigned _c) : a(_a), b(_b), c(_c) { + } + }; + + /** + * \brief Triangulate a 2-dimensional polygon. + * + * Given a 2-dimensional polygon described as a vector of 2-d + * points, with no holes and no self-crossings, produce a + * triangulation using an ear-clipping algorithm. + * + * @param [in] poly A vector containing the input polygon. + * @param [out] result A vector of triangles, represented as + * indicies into poly. + */ + + + void triangulate(const std::vector &poly, std::vector &result); + + /** + * \brief Triangulate a polygon (templated). + * + * @tparam project_t A functor which converts vertices to a 2d + * projection. + * @tparam vert_t The vertex type. + * @param [in] project The projection functor. + * @param [in] poly A vector containing the input polygon, + * represented as vert_t pointers. + * @param [out] result A vector of triangles, represented as + * indicies into poly. + */ + template + void triangulate(const project_t &project, + const std::vector &poly, + std::vector &result); + + /** + * \brief Improve a candidate triangulation of poly by minimising + * the length of internal edges. (templated) + * + * @tparam project_t A functor which converts vertices to a 2d + * projection. + * @tparam vert_t The vertex type. + * @param [in] project The projection functor. + * @param [in] poly A vector containing the input polygon, + * represented as vert_t pointers. + * @param [inout] result A vector of triangles, represented as + * indicies into poly. On input, this vector + * must contain a candidate triangulation of + * poly. Calling improve() modifies the + * contents of the vector, returning an + * improved triangulation. + */ + template + void improve(const project_t &project, + const std::vector &poly, + std::vector &result); + + /** + * \brief Improve a candidate triangulation of poly by minimising + * the length of internal edges. + * + * @param [in] poly A vector containing the input polygon. + + * @param [inout] result A vector of triangles, represented as + * indicies into poly. On input, this vector + * must contain a candidate triangulation of + * poly. Calling improve() modifies the + * contents of the vector, returning an + * improved triangulation. + */ + static inline void improve(const std::vector &poly, std::vector &result) { + improve(carve::geom2d::p2_adapt_ident(), poly, result); + } + + } +} + +#include diff --git a/thirdparty/carve-1.4.0/include/carve/triangulator_impl.hpp b/thirdparty/carve-1.4.0/include/carve/triangulator_impl.hpp new file mode 100644 index 00000000..d6206e48 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/triangulator_impl.hpp @@ -0,0 +1,760 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#if defined(CARVE_DEBUG) +# include +#endif + +namespace carve { + namespace triangulate { + namespace detail { + + static inline bool axisOrdering(const carve::geom2d::P2 &a, + const carve::geom2d::P2 &b, + int axis) { + return a.v[axis] < b.v[axis] || (a.v[axis] == b.v[axis] && a.v[1-axis] < b.v[1-axis]); + } + + /** + * \class order_h_loops + * \brief Provides an ordering of hole loops based upon a single + * projected axis. + * + * @tparam project_t A functor which converts vertices to a 2d + * projection. + * @tparam hole_t A collection of vertices. + */ + template + class order_h_loops { + const project_t &project; + int axis; + public: + + /** + * + * @param _project The projection functor. + * @param _axis The axis of the 2d projection upon which hole + * loops are ordered. + */ + order_h_loops(const project_t &_project, int _axis) : project(_project), axis(_axis) { } + + bool operator()(const vert_t &a, + const vert_t &b) const { + return axisOrdering(project(a), project(b), axis); + } + + bool operator()( + const std::pair *, typename std::vector::const_iterator> &a, + const std::pair *, typename std::vector::const_iterator> &b) { + return axisOrdering(project(*(a.second)), project(*(b.second)), axis); + } + }; + + + + /** + * \class heap_ordering + * \brief Provides an ordering of vertex indicies in a polygon + * loop according to proximity to a vertex. + * + * @tparam project_t A functor which converts vertices to a 2d + * projection. + * @tparam vert_t A vertex type. + */ + template + class heap_ordering { + const project_t &project; + const std::vector &loop; + const carve::geom2d::P2 p; + int axis; + + public: + /** + * + * @param _project A functor which converts vertices to a 2d + * projection. + * @param _loop The polygon loop which indices address. + * @param _vert The vertex from which distance is measured. + * + */ + heap_ordering(const project_t &_project, + const std::vector &_loop, + vert_t _vert, + int _axis) : + project(_project), + loop(_loop), + p(_project(_vert)), + axis(_axis) { + } + + bool operator()(size_t a, size_t b) const { + carve::geom2d::P2 pa = project(loop[a]); + carve::geom2d::P2 pb = project(loop[b]); + double da = carve::geom::distance2(p, pa); + double db = carve::geom::distance2(p, pb); + if (da > db) return true; + if (da < db) return false; + return axisOrdering(pa, pb, axis); + } + }; + + + + /** + * \brief Given a polygon loop and a hole loop, and attachment + * points, insert the hole loop vertices into the polygon loop. + * + * @param[in,out] f_loop The polygon loop to incorporate the + * hole into. + * @param f_loop_attach[in] The index of the vertex of the + * polygon loop that the hole is to be + * attached to. + * @param hole_attach[in] A pair consisting of a pointer to a + * hole container and an iterator into + * that container reflecting the point of + * attachment of the hole. + */ + template + void patchHoleIntoPolygon(std::vector &f_loop, + unsigned f_loop_attach, + const std::pair *, + typename std::vector::const_iterator> &hole_attach) { + // join the vertex curr of the polygon loop to the hole at + // h_loop_connect + f_loop.insert(f_loop.begin() + f_loop_attach + 1, hole_attach.first->size() + 2, NULL); + typename std::vector::iterator f = f_loop.begin() + f_loop_attach; + + typename std::vector::const_iterator h = hole_attach.second; + + while (h != hole_attach.first->end()) { + *++f = *h++; + } + + h = hole_attach.first->begin(); + typename std::vector::const_iterator he = hole_attach.second; ++he; + while (h != he) { + *++f = *h++; + } + + *++f = f_loop[f_loop_attach]; + } + + + struct vertex_info; + + + + /** + * \brief Determine whether c is to the left of a->b. + */ + static inline bool isLeft(const vertex_info *a, + const vertex_info *b, + const vertex_info *c); + + + + /** + * \brief Determine whether d is contained in the triangle abc. + */ + static inline bool pointInTriangle(const vertex_info *a, + const vertex_info *b, + const vertex_info *c, + const vertex_info *d); + + + + /** + * \class vertex_info + * \brief Maintains a linked list of untriangulated vertices + * during a triangulation operation. + */ + + struct vertex_info { + vertex_info *prev; + vertex_info *next; + carve::geom2d::P2 p; + size_t idx; + double score; + bool convex; + bool failed; + + vertex_info(const carve::geom2d::P2 &_p, size_t _idx) : + prev(NULL), next(NULL), + p(_p), idx(_idx), + score(0.0), convex(false) { + } + + static double triScore(const vertex_info *p, const vertex_info *v, const vertex_info *n); + + double calcScore() const; + + void recompute() { + score = calcScore(); + convex = isLeft(prev, this, next); + failed = false; + } + + bool isCandidate() const { + return convex && !failed; + } + + void remove() { + next->prev = prev; + prev->next = next; + } + + bool isClipable() const; + }; + + + + static inline bool isLeft(const vertex_info *a, + const vertex_info *b, + const vertex_info *c) { + if (a->idx < b->idx && b->idx < c->idx) { + return carve::geom2d::orient2d(a->p, b->p, c->p) > 0.0; + } else if (a->idx < c->idx && c->idx < b->idx) { + return carve::geom2d::orient2d(a->p, c->p, b->p) < 0.0; + } else if (b->idx < a->idx && a->idx < c->idx) { + return carve::geom2d::orient2d(b->p, a->p, c->p) < 0.0; + } else if (b->idx < c->idx && c->idx < a->idx) { + return carve::geom2d::orient2d(b->p, c->p, a->p) > 0.0; + } else if (c->idx < a->idx && a->idx < b->idx) { + return carve::geom2d::orient2d(c->p, a->p, b->p) > 0.0; + } else { + return carve::geom2d::orient2d(c->p, b->p, a->p) < 0.0; + } + } + + + + static inline bool pointInTriangle(const vertex_info *a, + const vertex_info *b, + const vertex_info *c, + const vertex_info *d) { + return !isLeft(a, c, d) && !isLeft(b, a, d) && !isLeft(c, b, d); + } + + + + size_t removeDegeneracies(vertex_info *&begin, std::vector &result); + + bool splitAndResume(vertex_info *begin, std::vector &result); + + bool doTriangulate(vertex_info *begin, std::vector &result); + + + typedef std::pair vert_edge_t; + + struct hash_vert_edge_t { + size_t operator()(const vert_edge_t &e) const { + size_t r = (size_t)e.first; + size_t s = (size_t)e.second; + return r ^ ((s >> 16) | (s << 16)); + } + }; + + static inline vert_edge_t ordered_vert_edge_t(unsigned a, unsigned b) { + return (a < b) ? vert_edge_t(a, b) : vert_edge_t(b, a); + } + + struct tri_pair_t { + carve::triangulate::tri_idx *a, *b; + double score; + size_t idx; + + tri_pair_t() : a(NULL), b(NULL), score(0.0) { + } + + static inline unsigned N(unsigned i) { return (i+1)%3; } + static inline unsigned P(unsigned i) { return (i+2)%3; } + + void findSharedEdge(unsigned &ai, unsigned &bi) const { + if (a->v[1] == b->v[0]) { if (a->v[0] == b->v[1]) { ai = 0; bi = 0; } else { ai = 1; bi = 2; } return; } + if (a->v[1] == b->v[1]) { if (a->v[0] == b->v[2]) { ai = 0; bi = 1; } else { ai = 1; bi = 0; } return; } + if (a->v[1] == b->v[2]) { if (a->v[0] == b->v[0]) { ai = 0; bi = 2; } else { ai = 1; bi = 1; } return; } + if (a->v[2] == b->v[0]) { ai = 2; bi = 2; return; } + if (a->v[2] == b->v[1]) { ai = 2; bi = 0; return; } + if (a->v[2] == b->v[2]) { ai = 2; bi = 1; return; } + CARVE_FAIL("should not be reached"); + } + + void flip(vert_edge_t &old_edge, + vert_edge_t &new_edge, + vert_edge_t perim[4]); + + template + double calc(const project_t &project, + const std::vector &poly) { + unsigned ai, bi; + unsigned cross_ai, cross_bi; + unsigned ea, eb; + + findSharedEdge(ai, bi); + +#if defined(CARVE_DEBUG) + if (carve::geom2d::signedArea(project(poly[a->v[0]]), project(poly[a->v[1]]), project(poly[a->v[2]])) > 0.0 || + carve::geom2d::signedArea(project(poly[b->v[0]]), project(poly[b->v[1]]), project(poly[b->v[2]])) > 0.0) { + std::cerr << "warning: triangle pair " << this << " contains triangles with incorrect orientation" << std::endl; + } +#endif + + cross_ai = P(ai); + cross_bi = P(bi); + + ea = a->v[cross_ai]; + eb = b->v[cross_bi]; + + double side_1 = carve::geom2d::orient2d(project(poly[ea]), project(poly[eb]), project(poly[a->v[ai]])); + double side_2 = carve::geom2d::orient2d(project(poly[ea]), project(poly[eb]), project(poly[a->v[N(ai)]])); + + bool can_flip = (side_1 < 0.0 && side_2 > 0.0) || (side_1 > 0.0 && side_2 < 0.0); + + if (!can_flip) { + score = -1; + } else { + score = + distance(poly[a->v[ai]], poly[b->v[bi]]) - + distance(poly[a->v[cross_ai]], poly[b->v[cross_bi]]); + } + return score; + } + + template + double edgeLen(const project_t &project, + const std::vector &poly) const { + unsigned ai, bi; + findSharedEdge(ai, bi); + return distance(poly[a->v[ai]], poly[b->v[bi]]); + } + }; + + struct max_score { + bool operator()(const tri_pair_t *a, const tri_pair_t *b) const { return a->score < b->score; } + }; + + struct tri_pairs_t { + typedef std::unordered_map storage_t; + storage_t storage; + + tri_pairs_t() : storage() { + }; + + ~tri_pairs_t() { + for (storage_t::iterator i = storage.begin(); i != storage.end(); ++i) { + if ((*i).second) delete (*i).second; + } + } + + void insert(unsigned a, unsigned b, carve::triangulate::tri_idx *t); + + template + void updateEdge(tri_pair_t *tp, + const project_t &project, + const std::vector &poly, + std::vector &edges, + size_t &n) { + double old_score = tp->score; + double new_score = tp->calc(project, poly); +#if defined(CARVE_DEBUG) + std::cerr << "tp:" << tp << " old_score: " << old_score << " new_score: " << new_score << std::endl; +#endif + if (new_score > 0.0 && old_score <= 0.0) { + tp->idx = n; + edges[n++] = tp; + } else if (new_score <= 0.0 && old_score > 0.0) { + std::swap(edges[tp->idx], edges[--n]); + edges[tp->idx]->idx = tp->idx; + } + } + + tri_pair_t *get(vert_edge_t &e) { + storage_t::iterator i; + i = storage.find(e); + if (i == storage.end()) return NULL; + return (*i).second; + } + + template + void flip(const project_t &project, + const std::vector &poly, + std::vector &edges, + size_t &n) { + vert_edge_t old_e, new_e; + vert_edge_t perim[4]; + +#if defined(CARVE_DEBUG) + std::cerr << "improvable edges: " << n << std::endl; +#endif + + tri_pair_t *tp = *std::max_element(edges.begin(), edges.begin() + n, max_score()); + +#if defined(CARVE_DEBUG) + std::cerr << "improving tri-pair: " << tp << " with score: " << tp->score << std::endl; +#endif + + tp->flip(old_e, new_e, perim); + +#if defined(CARVE_DEBUG) + std::cerr << "old_e: " << old_e.first << "," << old_e.second << " -> new_e: " << new_e.first << "," << new_e.second << std::endl; +#endif + + CARVE_ASSERT(storage.find(old_e) != storage.end()); + storage.erase(old_e); + storage[new_e] = tp; + + std::swap(edges[tp->idx], edges[--n]); + edges[tp->idx]->idx = tp->idx; + + tri_pair_t *tp2; + + tp2 = get(perim[0]); + if (tp2 != NULL) { + updateEdge(tp2, project, poly, edges, n); + } + + tp2 = get(perim[1]); + if (tp2 != NULL) { + CARVE_ASSERT(tp2->a == tp->b || tp2->b == tp->b); + if (tp2->a == tp->b) { tp2->a = tp->a; } else { tp2->b = tp->a; } + updateEdge(tp2, project, poly, edges, n); + } + + tp2 = get(perim[2]); + if (tp2 != NULL) { + updateEdge(tp2, project, poly, edges, n); + } + + tp2 = get(perim[3]); + if (tp2 != NULL) { + CARVE_ASSERT(tp2->a == tp->a || tp2->b == tp->a); + if (tp2->a == tp->a) { tp2->a = tp->b; } else { tp2->b = tp->b; } + updateEdge(tp2, project, poly, edges, n); + } + } + + template + size_t getInternalEdges(const project_t &project, + const std::vector &poly, + std::vector &edges) { + size_t count = 0; + + for (storage_t::iterator i = storage.begin(); i != storage.end();) { + tri_pair_t *tp = (*i).second; + if (tp->a && tp->b) { + tp->calc(project, poly); + count++; +#if defined(CARVE_DEBUG) + std::cerr << "internal edge: " << (*i).first.first << "," << (*i).first.second << " -> " << tp << " " << tp->score << std::endl; +#endif + ++i; + } else { + delete (*i).second; + storage.erase(i++); + } + } + + edges.resize(count); + + size_t fwd = 0; + size_t rev = count; + for (storage_t::iterator i = storage.begin(); i != storage.end(); ++i) { + tri_pair_t *tp = (*i).second; + if (tp && tp->a && tp->b) { + if (tp->score > 0.0) { + edges[fwd++] = tp; + } else { + edges[--rev] = tp; + } + } + } + + CARVE_ASSERT(fwd == rev); + + return fwd; + } + }; + } + + + + template + static std::vector + incorporateHolesIntoPolygon(const project_t &project, + const std::vector &f_loop, + const std::vector > &h_loops) { + typedef std::vector hole_t; + typedef typename std::vector::const_iterator vert_iter; + typedef typename std::vector >::const_iterator hole_iter; + + size_t N = f_loop.size(); + + // work out how much space to reserve for the patched in holes. + for (hole_iter i = h_loops.begin(); i != h_loops.end(); ++i) { + N += 2 + (*i).size(); + } + + // this is the vector that we will build the result in. + std::vector current_f_loop; + current_f_loop.reserve(N); + + std::vector f_loop_heap; + f_loop_heap.reserve(N); + + for (unsigned i = 0; i < f_loop.size(); ++i) { + current_f_loop.push_back(f_loop[i]); + } + + std::vector *, vert_iter> > h_loop_min_vertex; + + h_loop_min_vertex.reserve(h_loops.size()); + + // find the major axis for the holes - this is the axis that we + // will sort on for finding vertices on the polygon to join + // holes up to. + // + // it might also be nice to also look for whether it is better + // to sort ascending or descending. + // + // another trick that could be used is to modify the projection + // by 90 degree rotations or flipping about an axis. just as + // long as we keep the carve::geom3d::Vector pointers for the + // real data in sync, everything should be ok. then we wouldn't + // need to accomodate axes or sort order in the main loop. + + // find the bounding box of all the holes. + bool first = true; + double min_x, min_y, max_x, max_y; + for (hole_iter i = h_loops.begin(); i != h_loops.end(); ++i) { + const hole_t &hole(*i); + for (vert_iter j = hole.begin(); j != hole.end(); ++j) { + carve::geom2d::P2 curr = project(*j); + if (first) { + min_x = max_x = curr.x; + min_y = max_y = curr.y; + first = false; + } else { + min_x = std::min(min_x, curr.x); + min_y = std::min(min_y, curr.y); + max_x = std::max(max_x, curr.x); + max_y = std::max(max_y, curr.y); + } + } + } + + // choose the axis for which the bbox is largest. + int axis = (max_x - min_x) > (max_y - min_y) ? 0 : 1; + + // for each hole, find the minimum vertex in the chosen axis. + for (hole_iter i = h_loops.begin(); i != h_loops.end(); ++i) { + const hole_t &hole = *i; + vert_iter best_i = std::min_element(hole.begin(), hole.end(), detail::order_h_loops(project, axis)); + h_loop_min_vertex.push_back(std::make_pair(&hole, best_i)); + } + + // sort the holes by the minimum vertex. + std::sort(h_loop_min_vertex.begin(), h_loop_min_vertex.end(), detail::order_h_loops(project, axis)); + + // now, for each hole, find a vertex in the current polygon loop that it can be joined to. + for (unsigned i = 0; i < h_loop_min_vertex.size(); ++i) { + // the index of the vertex in the hole to connect. + vert_iter h_loop_connect = h_loop_min_vertex[i].second; + carve::geom2d::P2 hole_min = project(*h_loop_connect); + + f_loop_heap.clear(); + // we order polygon loop vertices that may be able to be connected + // to the hole vertex by their distance to the hole vertex + detail::heap_ordering _heap_ordering(project, current_f_loop, *h_loop_connect, axis); + + for (size_t j = 0; j < current_f_loop.size(); ++j) { + // it is guaranteed that there exists a polygon vertex with + // coord < the min hole coord chosen, which can be joined to + // the min hole coord without crossing the polygon + // boundary. also, because we merge holes in ascending + // order, it is also true that this join can never cross + // another hole (and that doesn't need to be tested for). + if (project(current_f_loop[j]).v[axis] < hole_min.v[axis]) { + f_loop_heap.push_back(j); + std::push_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + } + } + + // we are going to test each potential (according to the + // previous test) polygon vertex as a candidate join. we order + // by closeness to the hole vertex, so that the join we make + // is as small as possible. to test, we need to check the + // joining line segment does not cross any other line segment + // in the current polygon loop (excluding those that have the + // vertex that we are attempting to join with as an endpoint). + while (f_loop_heap.size()) { + std::pop_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + size_t curr = f_loop_heap.back(); + f_loop_heap.pop_back(); + // test the candidate join from current_f_loop[curr] to hole_min + + carve::geom2d::LineSegment2 test(hole_min, project(current_f_loop[curr])); + + size_t v1, v2; + for (v1 = current_f_loop.size() - 1, v2 = 0; v2 != current_f_loop.size(); v1 = v2++) { + // XXX: need to test vertices, not indices, because they may + // be duplicated. + if (current_f_loop[v1] == current_f_loop[curr] || + current_f_loop[v2] == current_f_loop[curr]) continue; + carve::geom2d::LineSegment2 test2(project(current_f_loop[v1]), project(current_f_loop[v2])); + carve::LineIntersectionClass ic = carve::geom2d::lineSegmentIntersection(test, test2).iclass; + if (ic > 0) { + // intersection; failed. + goto intersection; + } + } + + detail::patchHoleIntoPolygon(current_f_loop, curr, h_loop_min_vertex[i]); + goto merged; + + intersection:; + } + CARVE_FAIL("didn't manage to link up hole!"); + + merged:; + } + + return current_f_loop; + } + + + + template + void triangulate(const project_t &project, + const std::vector &poly, + std::vector &result) { + std::vector vinfo; + const size_t N = poly.size(); + + result.clear(); + if (N < 3) { + return; + } + + result.reserve(poly.size() - 2); + + if (N == 3) { + result.push_back(tri_idx(0, 1, 2)); + return; + } + + vinfo.resize(N); + + vinfo[0] = new detail::vertex_info(project(poly[0]), 0); + for (size_t i = 1; i < N-1; ++i) { + vinfo[i] = new detail::vertex_info(project(poly[i]), i); + vinfo[i]->prev = vinfo[i-1]; + vinfo[i-1]->next = vinfo[i]; + } + vinfo[N-1] = new detail::vertex_info(project(poly[N-1]), N-1); + vinfo[N-1]->prev = vinfo[N-2]; + vinfo[N-1]->next = vinfo[0]; + vinfo[0]->prev = vinfo[N-1]; + vinfo[N-2]->next = vinfo[N-1]; + + for (size_t i = 0; i < N; ++i) { + vinfo[i]->recompute(); + } + + detail::vertex_info *begin = vinfo[0]; + + removeDegeneracies(begin, result); + doTriangulate(begin, result); + } + + + + template + void improve(const project_t &project, + const std::vector &poly, + std::vector &result) { + detail::tri_pairs_t tri_pairs; + +#if defined(CARVE_DEBUG) + bool warn = false; + for (size_t i = 0; i < result.size(); ++i) { + tri_idx &t = result[i]; + if (carve::geom2d::signedArea(project(poly[t.a]), project(poly[t.b]), project(poly[t.c])) > 0) { + warn = true; + } + } + if (warn) { + std::cerr << "carve::triangulate::improve(): Some triangles are incorrectly oriented. Results may be incorrect." << std::endl; + } +#endif + + for (size_t i = 0; i < result.size(); ++i) { + tri_idx &t = result[i]; + tri_pairs.insert(t.a, t.b, &t); + tri_pairs.insert(t.b, t.c, &t); + tri_pairs.insert(t.c, t.a, &t); + } + + std::vector edges; + size_t n = tri_pairs.getInternalEdges(project, poly, edges); + for (size_t i = 0; i < n; ++i) { + edges[i]->idx = i; + } + + // procedure: + // while a tri pair with a positive score exists: + // p = pair with highest positive score + // flip p, rewriting its two referenced triangles. + // negate p's score + // for each q in the up-to-four adjoining tri pairs: + // update q's tri ptr, if changed, and its score. + +#if defined(CARVE_DEBUG) + double initial_score = 0; + for (size_t i = 0; i < edges.size(); ++i) { + initial_score += edges[i]->edgeLen(project, poly); + } + std::cerr << "initial score: " << initial_score << std::endl; +#endif + + while (n) { + tri_pairs.flip(project, poly, edges, n); + } + +#if defined(CARVE_DEBUG) + double final_score = 0; + for (size_t i = 0; i < edges.size(); ++i) { + final_score += edges[i]->edgeLen(project, poly); + } + std::cerr << "final score: " << final_score << std::endl; +#endif + +#if defined(CARVE_DEBUG) + if (!warn) { + for (size_t i = 0; i < result.size(); ++i) { + tri_idx &t = result[i]; + CARVE_ASSERT (carve::geom2d::signedArea(project(poly[t.a]), project(poly[t.b]), project(poly[t.c])) <= 0.0); + } + } +#endif + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/util.hpp b/thirdparty/carve-1.4.0/include/carve/util.hpp new file mode 100644 index 00000000..8f5f9abe --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/util.hpp @@ -0,0 +1,31 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace carve { + namespace util { + struct min_functor { + template + const T &operator()(const T &a, const T &b) const { return std::min(a, b); } + }; + struct max_functor { + template + const T &operator()(const T &a, const T &b) const { return std::max(a, b); } + }; + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/vcpp_config.h b/thirdparty/carve-1.4.0/include/carve/vcpp_config.h new file mode 100644 index 00000000..9e167017 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/vcpp_config.h @@ -0,0 +1,6 @@ +/* include/carve/config.h. Generated from config.h.in by configure. */ +#pragma once + +/* Define if using boost collections. Preferred, because the visual C++ unordered collections are slow and memory hungry. */ +#define HAVE_BOOST_UNORDERED_COLLECTIONS + diff --git a/thirdparty/carve-1.4.0/include/carve/vector.hpp b/thirdparty/carve-1.4.0/include/carve/vector.hpp new file mode 100644 index 00000000..d3f166ba --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/vector.hpp @@ -0,0 +1,162 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include + +#include + +#include + +namespace carve { + namespace geom3d { + + struct hash_vector_ptr { + size_t operator()(const Vector * const &v) const { + return (size_t)v; + } + size_t operator()(const std::pair &v) const { + size_t r = (size_t)v.first; + size_t s = (size_t)v.second; + return r ^ ((s >> 16) | (s << 16)); + } + }; + + + + struct vec_adapt_ident { + const Vector &operator()(const Vector &v) const { return v; } + Vector &operator()(Vector &v) const { return v; } + }; + + + + struct vec_adapt_ptr { + const Vector &operator()(const Vector * const &v) const { return *v; } + Vector &operator()(Vector *&v) const { return *v; } + }; + + + + struct vec_adapt_pair_first { + template const Vector &operator()(const pair_t &v) const { return v.first; } + template Vector &operator()(pair_t &v) const { return v.first; } + }; + + + + struct vec_adapt_pair_second { + template const Vector &operator()(const pair_t &v) const { return v.second; } + template Vector &operator()(pair_t &v) const { return v.second; } + }; + + + + template + struct vec_cmp_lt_x { + adapt_t adapt; + vec_cmp_lt_x(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).x < adapt(b).x; } + }; + template vec_cmp_lt_x vec_lt_x(adapt_t &adapt) { return vec_cmp_lt_x(adapt); } + + + + template + struct vec_cmp_lt_y { + adapt_t adapt; + vec_cmp_lt_y(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).y < adapt(b).y; } + }; + template vec_cmp_lt_y vec_lt_y(adapt_t &adapt) { return vec_cmp_lt_y(adapt); } + + + + template + struct vec_cmp_lt_z { + adapt_t adapt; + vec_cmp_lt_z(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).z < adapt(b).z; } + }; + template vec_cmp_lt_z vec_lt_z(adapt_t &adapt) { return vec_cmp_lt_z(adapt); } + + + + template + struct vec_cmp_gt_x { + adapt_t adapt; + vec_cmp_gt_x(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).x > adapt(b).x; } + }; + template vec_cmp_gt_x vec_gt_x(adapt_t &adapt) { return vec_cmp_gt_x(adapt); } + + + + template + struct vec_cmp_gt_y { + adapt_t adapt; + vec_cmp_gt_y(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).y > adapt(b).y; } + }; + template vec_cmp_gt_y vec_gt_y(adapt_t &adapt) { return vec_cmp_gt_y(adapt); } + + + + template + struct vec_cmp_gt_z { + adapt_t adapt; + vec_cmp_gt_z(adapt_t _adapt = adapt_t()) : adapt(_adapt) {} + template bool operator()(const input_t &a, const input_t &b) const { return adapt(a).z > adapt(b).z; } + }; + template vec_cmp_gt_z vec_gt_z(adapt_t &adapt) { return vec_cmp_gt_z(adapt); } + + + + template + void sortInDirectionOfRay(const Vector &ray_dir, iter_t begin, iter_t end, adapt_t adapt) { + switch (carve::geom::largestAxis(ray_dir)) { + case 0: + if (ray_dir.x > 0) { + std::sort(begin, end, vec_lt_x(adapt)); + } else { + std::sort(begin, end, vec_gt_x(adapt)); + } + break; + case 1: + if (ray_dir.y > 0) { + std::sort(begin, end, vec_lt_y(adapt)); + } else { + std::sort(begin, end, vec_gt_y(adapt)); + } + break; + case 2: + if (ray_dir.z > 0) { + std::sort(begin, end, vec_lt_z(adapt)); + } else { + std::sort(begin, end, vec_gt_z(adapt)); + } + break; + } + } + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/vertex_decl.hpp b/thirdparty/carve-1.4.0/include/carve/vertex_decl.hpp new file mode 100644 index 00000000..f48023a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/vertex_decl.hpp @@ -0,0 +1,111 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace carve { + namespace poly { + + + + struct Object; + + + + template + class Vertex : public tagable { + public: + typedef carve::geom::vector vector_t; + typedef Object obj_t; + + vector_t v; + obj_t *owner; + + Vertex() : tagable(), v() { + } + + ~Vertex() { + } + + Vertex(const vector_t &_v) : tagable(), v(_v) { + } + }; + + + + struct hash_vertex_ptr { + template + size_t operator()(const Vertex * const &v) const { + return (size_t)v; + } + + template + size_t operator()(const std::pair *, const Vertex *> &v) const { + size_t r = (size_t)v.first; + size_t s = (size_t)v.second; + return r ^ ((s >> 16) | (s << 16)); + } + + }; + + + + template + double distance(const Vertex *v1, const Vertex *v2) { + return distance(v1->v, v2->v); + } + + template + double distance(const Vertex &v1, const Vertex &v2) { + return distance(v1.v, v2.v); + } + + struct vec_adapt_vertex_ref { + template + const typename Vertex::vector_t &operator()(const Vertex &v) const { return v.v; } + + template + typename Vertex::vector_t &operator()(Vertex &v) const { return v.v; } + }; + + + + struct vec_adapt_vertex_ptr { + template + const typename Vertex::vector_t &operator()(const Vertex *v) const { return v->v; } + + template + typename Vertex::vector_t &operator()(Vertex *v) const { return v->v; } + }; + + + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/vertex_impl.hpp b/thirdparty/carve-1.4.0/include/carve/vertex_impl.hpp new file mode 100644 index 00000000..bfeed09b --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/vertex_impl.hpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace carve { + namespace poly { + + } +} diff --git a/thirdparty/carve-1.4.0/include/carve/win32.h b/thirdparty/carve-1.4.0/include/carve/win32.h new file mode 100755 index 00000000..72e4e4e6 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/win32.h @@ -0,0 +1,45 @@ +// Copyright 2006 Tobias Sargeant (toby@permuted.net) +// All rights reserved. +#pragma once + +#pragma warning (disable : 4996) +#pragma warning (disable : 4786) + +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; + +#include +#include + +inline int strcasecmp(const char *a, const char *b) { + return _stricmp(a,b); +} + +inline void srandom(unsigned long input) { + srand(input); +} + +inline long random() { + return rand(); +} + +// intptr_t is an integer type that is big enough to hold a pointer +// It is not defined in VC6 so include a definition here for the older compiler +#if defined(_MSC_VER) && _MSC_VER < 1300 +typedef long intptr_t; +typedef unsigned long uintptr_t; +#endif + +#if defined(_MSC_VER) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#endif + +#if defined(_MSC_VER) +# include +#endif diff --git a/thirdparty/carve-1.4.0/include/carve/xcode_config.h b/thirdparty/carve-1.4.0/include/carve/xcode_config.h new file mode 100644 index 00000000..e8316884 --- /dev/null +++ b/thirdparty/carve-1.4.0/include/carve/xcode_config.h @@ -0,0 +1,15 @@ +#pragma once + +/* Define if using gnu libstdc++. */ +#define HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS + +/* Define if using boost collections. */ +/* #define HAVE_BOOST_UNORDERED_COLLECTIONS */ + +/* Define if std::unordered_map and std::unordered_set are supported by your + compiler. */ +/* #undef HAVE_STD_UNORDERED_COLLECTIONS */ + +/* Define if TR1 collections are supportted by your compiler. */ +/* #undef HAVE_TR1_UNORDERED_COLLECTIONS */ + diff --git a/thirdparty/carve-1.4.0/lib/CMakeLists.txt b/thirdparty/carve-1.4.0/lib/CMakeLists.txt new file mode 100644 index 00000000..27219fd9 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/CMakeLists.txt @@ -0,0 +1,36 @@ +include_directories("${carve_SOURCE_DIR}/include") + +add_library(carve + aabb.cpp + carve.cpp + convex_hull.cpp + csg.cpp + csg_collector.cpp + edge.cpp + face.cpp + geom2d.cpp + geom3d.cpp + intersect.cpp + intersect_classify_edge.cpp + intersect_classify_group.cpp + intersect_debug.cpp + intersect_face_division.cpp + intersect_group.cpp + intersect_half_classify_group.cpp + intersection.cpp + math.cpp + octree.cpp + pointset.cpp + polyhedron.cpp + polyline.cpp + tag.cpp + timing.cpp + triangulator.cpp) + +set_target_properties(carve PROPERTIES + VERSION "${carve_VERSION_MAJOR}.${carve_VERSION_MINOR}.${carve_VERSION_PATCH}" + SOVERSION "${carve_VERSION_MAJOR}.${carve_VERSION_MINOR}") + +install(TARGETS carve + LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" + ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/thirdparty/carve-1.4.0/lib/Makefile.am b/thirdparty/carve-1.4.0/lib/Makefile.am new file mode 100644 index 00000000..d3896f64 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/Makefile.am @@ -0,0 +1,16 @@ +lib_LTLIBRARIES=libintersect.la + +noinst_HEADERS=csg_collector.hpp intersect_classify_common.hpp \ + intersect_classify_common_impl.hpp intersect_common.hpp \ + intersect_debug.hpp + +AM_CPPFLAGS=@CPPFLAGS@ -I$(top_srcdir)/include + +libintersect_la_SOURCES=aabb.cpp carve.cpp convex_hull.cpp csg.cpp \ + csg_collector.cpp geom2d.cpp geom3d.cpp polyhedron.cpp \ + intersect.cpp intersection.cpp intersect_debug.cpp \ + intersect_group.cpp intersect_classify_group.cpp \ + intersect_half_classify_group.cpp intersect_face_division.cpp \ + intersect_classify_edge.cpp octree.cpp polyline.cpp math.cpp \ + edge.cpp face.cpp tag.cpp timing.cpp triangulator.cpp \ + pointset.cpp diff --git a/thirdparty/carve-1.4.0/lib/aabb.cpp b/thirdparty/carve-1.4.0/lib/aabb.cpp new file mode 100644 index 00000000..2acf3d4f --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/aabb.cpp @@ -0,0 +1,29 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +namespace carve { + namespace geom3d { + } +} + diff --git a/thirdparty/carve-1.4.0/lib/carve.cpp b/thirdparty/carve-1.4.0/lib/carve.cpp new file mode 100644 index 00000000..461b92bf --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/carve.cpp @@ -0,0 +1,29 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#define DEF_EPSILON 1.4901161193847656e-08 + +namespace carve { + double EPSILON = DEF_EPSILON; + double EPSILON2 = DEF_EPSILON * DEF_EPSILON; +} diff --git a/thirdparty/carve-1.4.0/lib/convex_hull.cpp b/thirdparty/carve-1.4.0/lib/convex_hull.cpp new file mode 100644 index 00000000..439374e1 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/convex_hull.cpp @@ -0,0 +1,100 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include + +namespace { + + bool grahamScan(const std::vector &points, + int vpp, int vp, + const std::vector &ordered, + int start, + std::vector &result, int _i = 0) { + carve::geom2d::P2 v1 = points[vp] - points[vpp]; + if (start == (int)ordered.size()) return true; + + for (int i = start; i < (int)ordered.size(); ++i) { + int v = ordered[i]; + carve::geom2d::P2 v2 = points[v] - points[vp]; + + double cp = v1.x * v2.y - v2.x * v1.y; + if (cp < 0) return false; + + int j = i + 1; + while (j < (int)ordered.size() && points[ordered[j]] == points[v]) j++; + + result.push_back(v); + if (grahamScan(points, vp, v, ordered, j, result, _i + 1)) return true; + result.pop_back(); + } + + return false; + } + +} + +namespace carve { + namespace geom { + + std::vector convexHull(const std::vector &points) { + double max_x = points[0].x; + unsigned max_v = 0; + + for (unsigned i = 1; i < points.size(); ++i) { + if (points[i].x > max_x) { + max_x = points[i].x; + max_v = i; + } + } + + std::vector > angle_dist; + std::vector ordered; + angle_dist.reserve(points.size()); + ordered.reserve(points.size() - 1); + for (unsigned i = 0; i < points.size(); ++i) { + if (i == max_v) continue; + angle_dist[i] = std::make_pair(carve::math::ANG(carve::geom2d::atan2(points[i] - points[max_v])), distance2(points[i], points[max_v])); + ordered.push_back(i); + } + + std::sort(ordered.begin(), + ordered.end(), + make_index_sort(angle_dist.begin())); + + std::vector result; + result.push_back(max_v); + result.push_back(ordered[0]); + + if (!grahamScan(points, max_v, ordered[0], ordered, 1, result)) { + result.clear(); + throw carve::exception("convex hull failed!"); + } + + return result; + } + + } +} + + diff --git a/thirdparty/carve-1.4.0/lib/csg.cpp b/thirdparty/carve-1.4.0/lib/csg.cpp new file mode 100644 index 00000000..63af6b37 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/csg.cpp @@ -0,0 +1,93 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include "csg_detail.hpp" + + +const char *carve::csg::ENUM(carve::csg::FaceClass f) { + if (f == FACE_ON_ORIENT_OUT) return "FACE_ON_ORIENT_OUT"; + if (f == FACE_OUT) return "FACE_OUT"; + if (f == FACE_IN) return "FACE_IN"; + if (f == FACE_ON_ORIENT_IN) return "FACE_ON_ORIENT_IN"; + return "???"; +} + + + +const char *carve::csg::ENUM(carve::PointClass p) { + if (p == POINT_UNK) return "POINT_UNK"; + if (p == POINT_OUT) return "POINT_OUT"; + if (p == POINT_ON) return "POINT_ON"; + if (p == POINT_IN) return "POINT_IN"; + if (p == POINT_VERTEX) return "POINT_VERTEX"; + if (p == POINT_EDGE) return "POINT_EDGE"; + return "???"; +} + + + +void carve::csg::detail::LoopEdges::addFaceLoop(FaceLoop *fl) { + const carve::poly::Polyhedron::vertex_t *v1, *v2; + v1 = fl->vertices[fl->vertices.size() - 1]; + for (unsigned j = 0; j < fl->vertices.size(); ++j) { + v2 = fl->vertices[j]; + (*this)[std::make_pair(v1, v2)].push_back(fl); + v1 = v2; + } +} + + + +void carve::csg::detail::LoopEdges::sortFaceLoopLists() { + for (super::iterator i = begin(), e = end(); i != e; ++i) { + (*i).second.sort(); + } +} + + + +void carve::csg::detail::LoopEdges::removeFaceLoop(FaceLoop *fl) { + const carve::poly::Polyhedron::vertex_t *v1, *v2; + v1 = fl->vertices[fl->vertices.size() - 1]; + for (unsigned j = 0; j < fl->vertices.size(); ++j) { + v2 = fl->vertices[j]; + iterator l(find(std::make_pair(v1, v2))); + if (l != end()) { + (*l).second.remove(fl); + if (!(*l).second.size()) { + erase(l); + } + } + v1 = v2; + } +} + + + +carve::csg::FaceClass carve::csg::FaceLoopGroup::classificationAgainst(const carve::poly::Polyhedron *poly, int m_id) const { + for (std::list::const_iterator i = classification.begin(); i != classification.end(); ++i) { + if ((*i).intersected_poly == poly && (*i).intersected_manifold == m_id) { + return (*i).classification; + } + } + return FACE_UNCLASSIFIED; +} diff --git a/thirdparty/carve-1.4.0/lib/csg_collector.cpp b/thirdparty/carve-1.4.0/lib/csg_collector.cpp new file mode 100644 index 00000000..af5efb2b --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/csg_collector.cpp @@ -0,0 +1,379 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include "intersect_debug.hpp" + +typedef carve::poly::Polyhedron poly_t; + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) +void writePLY(std::string &out_file, const carve::poly::Polyhedron *poly, bool ascii); +#endif + + +namespace carve { + namespace csg { + namespace { + + class BaseCollector : public CSG::Collector { + BaseCollector(); + BaseCollector(const BaseCollector &); + BaseCollector &operator=(const BaseCollector &); + + protected: + struct face_data_t { + poly_t::face_t *face; + const poly_t::face_t *orig_face; + bool flipped; + face_data_t(poly_t::face_t *_face, + const poly_t::face_t *_orig_face, + bool _flipped) : face(_face), orig_face(_orig_face), flipped(_flipped) { + }; + }; + + std::list faces; + + const poly_t *src_a; + const poly_t *src_b; + + BaseCollector(const poly_t *_src_a, + const poly_t *_src_b) : CSG::Collector(), src_a(_src_a), src_b(_src_b) { + } + + virtual ~BaseCollector() { + } + + void FWD(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + std::vector new_faces; + new_faces.reserve(1); + new_faces.push_back(orig_face->create(vertices, false)); + hooks.processOutputFace(new_faces, orig_face, false); + for (size_t i = 0; i < new_faces.size(); ++i) { + faces.push_back(face_data_t(new_faces[i], orig_face, false)); + } + +#if defined(CARVE_DEBUG) && defined(DEBUG_PRINT_RESULT_FACES) + std::cerr << "+" << ENUM(face_class) << " "; + for (unsigned i = 0; i < vertices.size(); ++i) std::cerr << " " << vertices[i] << ":" << *vertices[i]; + std::cerr << std::endl; +#endif + } + + void REV(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + normal = -normal; + std::vector new_faces; + new_faces.reserve(1); + new_faces.push_back(orig_face->create(vertices, true)); + hooks.processOutputFace(new_faces, orig_face, true); + for (size_t i = 0; i < new_faces.size(); ++i) { + faces.push_back(face_data_t(new_faces[i], orig_face, true)); + } + +#if defined(CARVE_DEBUG) && defined(DEBUG_PRINT_RESULT_FACES) + std::cerr << "-" << ENUM(face_class) << " "; + for (unsigned i = 0; i < vertices.size(); ++i) std::cerr << " " << vertices[i] << ":" << *vertices[i]; + std::cerr << std::endl; +#endif + } + + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) =0; + + virtual void collect(FaceLoopGroup *grp, CSG::Hooks &hooks) { + std::list &cinfo = (grp->classification); + if (cinfo.size() == 0) { + std::cerr << "WARNING! group " << grp << " has no classification info!" << std::endl; + return; + } + + FaceClass fc = FACE_UNCLASSIFIED; + unsigned fc_bits = 0; + + for (std::list::const_iterator i = grp->classification.begin(), e = grp->classification.end(); i != e; ++i) { + if ((*i).intersected_manifold < 0) { + // classifier only returns global info + fc_bits = class_to_class_bit((*i).classification); + break; + } + + if ((*i).intersectedManifoldIsClosed()) { + if ((*i).classification == FACE_UNCLASSIFIED) continue; + fc_bits |= class_to_class_bit((*i).classification); + } + } + + fc = class_bit_to_class(fc_bits); + + // handle the complex cases where a group is classified differently with respect to two or more closed manifolds. + if (fc == FACE_UNCLASSIFIED) { + unsigned inout_bits = fc_bits & FACE_NOT_ON_BIT; + unsigned on_bits = fc_bits & FACE_ON_BIT; + + // both in and out. indicates an invalid manifold embedding. + if (inout_bits == (FACE_IN_BIT | FACE_OUT_BIT)) goto out; + + // on, both orientations. could be caused by two manifolds touching at a face. + if (on_bits == (FACE_ON_ORIENT_IN_BIT | FACE_ON_ORIENT_OUT_BIT)) goto out; + + // in or out, but also on (with orientation). the on classification takes precedence. + fc = class_bit_to_class(on_bits); + } + + out: + + if (fc == FACE_UNCLASSIFIED) { + std::cerr << "group " << grp << " is unclassified!" << std::endl; + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + static int uc_count = 0; + + std::vector faces; + + for (FaceLoop *f = grp->face_loops.head; f; f = f->next) { + poly_t::face_t *temp = f->orig_face->create(f->vertices, false); + faces.push_back(*temp); + delete temp; + } + + std::vector vertices; + carve::csg::VVMap vmap; + + poly_t::collectFaceVertices(faces, vertices, vmap); + + poly_t *p = new poly_t(faces, vertices); + + std::ostringstream filename; + filename << "classifier_fail_" << ++uc_count << ".ply"; + std::string out(filename.str().c_str()); + ::writePLY(out, p, false); + + delete p; +#endif + + return; + } + + bool is_poly_a = cinfo.front().intersected_poly == src_b; + +#if defined(CARVE_DEBUG) + bool is_poly_b = cinfo.front().intersected_poly == src_a; + std::cerr << "collect:: " << ENUM(fc) << " grp: " << grp << " (" << grp->face_loops.size() << " faces) is_poly_a?:" << is_poly_a << " is_poly_b?:" << is_poly_b << " against:" << cinfo.front().intersected_poly << std::endl;; +#endif + + for (FaceLoop *f = grp->face_loops.head; f; f = f->next) { + collect(f->orig_face, f->vertices, f->orig_face->plane_eqn.N, is_poly_a, fc, hooks); + } + } + + virtual poly_t *done(CSG::Hooks &hooks) { + std::vector f; + f.reserve(faces.size()); + for (std::list::iterator i = faces.begin(); i != faces.end(); ++i) { + f.push_back(poly_t::face_t()); + std::swap(f.back(), *(*i).face); + delete (*i).face; + (*i).face = &f.back(); + } + + std::vector vertices; + carve::csg::VVMap vmap; + + poly_t::collectFaceVertices(f, vertices, vmap); + + poly_t *p = new poly_t(f, vertices); + + if (hooks.hasHook(carve::csg::CSG::Hooks::RESULT_FACE_HOOK)) { + for (std::list::iterator i = faces.begin(); i != faces.end(); ++i) { + hooks.resultFace((*i).face, (*i).orig_face, (*i).flipped); + } + } + + return p; + } + }; + + + + class AllCollector : public BaseCollector { + public: + AllCollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~AllCollector() { + } + virtual void collect(FaceLoopGroup *grp, CSG::Hooks &hooks) { + for (FaceLoop *f = grp->face_loops.head; f; f = f->next) { + FWD(f->orig_face, f->vertices, f->orig_face->plane_eqn.N, f->orig_face->owner == src_a, FACE_OUT, hooks); + } + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } + }; + + + + class UnionCollector : public BaseCollector { + public: + UnionCollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~UnionCollector() { + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + if (face_class == FACE_OUT || (poly_a && face_class == FACE_ON_ORIENT_OUT)) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } + } + }; + + + + class IntersectionCollector : public BaseCollector { + public: + IntersectionCollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~IntersectionCollector() { + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + if (face_class == FACE_IN || (poly_a && face_class == FACE_ON_ORIENT_OUT)) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } + } + }; + + + + class SymmetricDifferenceCollector : public BaseCollector { + public: + SymmetricDifferenceCollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~SymmetricDifferenceCollector() { + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + if (face_class == FACE_OUT) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } else if (face_class == FACE_IN) { + REV(orig_face, vertices, normal, poly_a, face_class, hooks); + } + } + }; + + + + class AMinusBCollector : public BaseCollector { + public: + AMinusBCollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~AMinusBCollector() { + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + if ((face_class == FACE_OUT || face_class == FACE_ON_ORIENT_IN) && poly_a) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } else if (face_class == FACE_IN && !poly_a) { + REV(orig_face, vertices, normal, poly_a, face_class, hooks); + } + } + }; + + + + class BMinusACollector : public BaseCollector { + public: + BMinusACollector(const poly_t *_src_a, + const poly_t *_src_b) : BaseCollector(_src_a, _src_b) { + } + virtual ~BMinusACollector() { + } + virtual void collect(const poly_t::face_t *orig_face, + const std::vector &vertices, + carve::geom3d::Vector normal, + bool poly_a, + FaceClass face_class, + CSG::Hooks &hooks) { + if ((face_class == FACE_OUT || face_class == FACE_ON_ORIENT_IN) && !poly_a) { + FWD(orig_face, vertices, normal, poly_a, face_class, hooks); + } else if (face_class == FACE_IN && poly_a) { + REV(orig_face, vertices, normal, poly_a, face_class, hooks); + } + } + }; + + } + + CSG::Collector *makeCollector(CSG::OP op, + const poly_t *poly_a, + const poly_t *poly_b) { + switch (op) { + case CSG::UNION: return new UnionCollector(poly_a, poly_b); + case CSG::INTERSECTION: return new IntersectionCollector(poly_a, poly_b); + case CSG::A_MINUS_B: return new AMinusBCollector(poly_a, poly_b); + case CSG::B_MINUS_A: return new BMinusACollector(poly_a, poly_b); + case CSG::SYMMETRIC_DIFFERENCE: return new SymmetricDifferenceCollector(poly_a, poly_b); + case CSG::ALL: return new AllCollector(poly_a, poly_b); + } + return NULL; + } + } +} diff --git a/thirdparty/carve-1.4.0/lib/csg_collector.hpp b/thirdparty/carve-1.4.0/lib/csg_collector.hpp new file mode 100644 index 00000000..74b2914e --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/csg_collector.hpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +namespace carve { + namespace csg { + CSG::Collector *makeCollector(CSG::OP op, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b); + } +} diff --git a/thirdparty/carve-1.4.0/lib/csg_data.hpp b/thirdparty/carve-1.4.0/lib/csg_data.hpp new file mode 100644 index 00000000..d52c7b1d --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/csg_data.hpp @@ -0,0 +1,47 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include "csg_detail.hpp" + +struct carve::csg::detail::Data { +// * @param[out] vmap A mapping from vertex pointer to intersection point. +// * @param[out] emap A mapping from edge pointer to intersection points. +// * @param[out] fmap A mapping from face pointer to intersection points. +// * @param[out] fmap_rev A mapping from intersection points to face pointers. + // map from intersected vertex to intersection point. + VVMap vmap; + + // map from intersected edge to intersection points. + EVSMap emap; + + // map from intersected face to intersection points. + FVSMap fmap; + + // map from intersection point to intersected faces. + VFSMap fmap_rev; + + // created by divideEdges(). + // holds, for each edge, a + EVVMap divided_edges; + + // created by faceSplitEdges. + FV2SMap face_split_edges; +}; diff --git a/thirdparty/carve-1.4.0/lib/csg_detail.hpp b/thirdparty/carve-1.4.0/lib/csg_detail.hpp new file mode 100644 index 00000000..9c642179 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/csg_detail.hpp @@ -0,0 +1,90 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include + +#include + +namespace carve { + namespace csg { + namespace detail { + + typedef std::unordered_set< + const carve::poly::Geometry<3>::vertex_t *, + carve::poly::hash_vertex_ptr> VSet; + typedef std::unordered_set< + const carve::poly::Geometry<3>::face_t *, + carve::poly::hash_face_ptr> FSet; + + typedef std::set::vertex_t *> VSetSmall; + typedef std::set V2SetSmall; + typedef std::set::face_t *> FSetSmall; + + typedef std::unordered_map< + const carve::poly::Geometry<3>::vertex_t *, + VSetSmall, + carve::poly::hash_vertex_ptr> VVSMap; + typedef std::unordered_map< + const carve::poly::Geometry<3>::edge_t *, + VSetSmall, + carve::poly::hash_edge_ptr> EVSMap; + typedef std::unordered_map< + const carve::poly::Geometry<3>::face_t *, + VSetSmall, + carve::poly::hash_face_ptr> FVSMap; + + typedef std::unordered_map< + const carve::poly::Geometry<3>::vertex_t *, + FSetSmall, + carve::poly::hash_vertex_ptr> VFSMap; + + typedef std::unordered_map< + const carve::poly::Geometry<3>::face_t *, + V2SetSmall, + carve::poly::hash_face_ptr> FV2SMap; + + typedef std::unordered_map< + const carve::poly::Geometry<3>::edge_t *, + std::vector::vertex_t *>, + carve::poly::hash_edge_ptr> EVVMap; + + + + class LoopEdges : public std::unordered_map, carve::poly::hash_vertex_ptr> { + typedef std::unordered_map, carve::poly::hash_vertex_ptr> super; + + public: + void addFaceLoop(FaceLoop *fl); + void sortFaceLoopLists(); + void removeFaceLoop(FaceLoop *fl); + }; + + } + } +} + + + +static inline std::ostream &operator<<(std::ostream &o, const carve::csg::detail::FSet &s) { + const char *sep=""; + for (carve::csg::detail::FSet::const_iterator i = s.begin(); i != s.end(); ++i) { + o << sep << *i; sep=","; + } + return o; +} diff --git a/thirdparty/carve-1.4.0/lib/edge.cpp b/thirdparty/carve-1.4.0/lib/edge.cpp new file mode 100644 index 00000000..d2763f07 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/edge.cpp @@ -0,0 +1,23 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + diff --git a/thirdparty/carve-1.4.0/lib/face.cpp b/thirdparty/carve-1.4.0/lib/face.cpp new file mode 100644 index 00000000..f91d4576 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/face.cpp @@ -0,0 +1,281 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +double CALC_X(const carve::geom::plane<3> &p, double y, double z) { return -(p.d + p.N.y * y + p.N.z * z) / p.N.x; } +double CALC_Y(const carve::geom::plane<3> &p, double x, double z) { return -(p.d + p.N.x * x + p.N.z * z) / p.N.y; } +double CALC_Z(const carve::geom::plane<3> &p, double x, double y) { return -(p.d + p.N.x * x + p.N.y * y) / p.N.z; } + +namespace carve { + namespace poly { + + carve::geom2d::P2 _project_1(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.z, v.y); + } + + carve::geom2d::P2 _project_2(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.x, v.z); + } + + carve::geom2d::P2 _project_3(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.y, v.x); + } + + carve::geom2d::P2 _project_4(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.y, v.z); + } + + carve::geom2d::P2 _project_5(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.z, v.x); + } + + carve::geom2d::P2 _project_6(const carve::geom3d::Vector &v) { + return carve::geom::VECTOR(v.x, v.y); + } + + + carve::geom3d::Vector _unproject_1(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(CALC_X(plane_eqn, p.y, p.x), p.y, p.x); + } + + carve::geom3d::Vector _unproject_2(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(p.x, CALC_Y(plane_eqn, p.x, p.y), p.y); + } + + carve::geom3d::Vector _unproject_3(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(p.y, p.x, CALC_Z(plane_eqn, p.y, p.x)); + } + + carve::geom3d::Vector _unproject_4(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(CALC_X(plane_eqn, p.x, p.y), p.x, p.y); + } + + carve::geom3d::Vector _unproject_5(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(p.y, CALC_Y(plane_eqn, p.y, p.x), p.x); + } + + carve::geom3d::Vector _unproject_6(const carve::geom2d::P2 &p, const carve::geom3d::Plane &plane_eqn) { + return carve::geom::VECTOR(p.x, p.y, CALC_Z(plane_eqn, p.x, p.y)); + } + + static carve::geom2d::P2 (*project_tab[2][3])(const carve::geom3d::Vector &) = { + { &_project_1, &_project_2, &_project_3 }, + { &_project_4, &_project_5, &_project_6 } + }; + + static carve::geom3d::Vector (*unproject_tab[2][3])(const carve::geom2d::P2 &, const carve::geom3d::Plane &) = { + { &_unproject_1, &_unproject_2, &_unproject_3 }, + { &_unproject_4, &_unproject_5, &_unproject_6 } + }; + + // only implemented for 3d. + template + typename Face::project_t Face::getProjector(bool positive_facing, int axis) { + return NULL; + } + + template<> + Face<3>::project_t Face<3>::getProjector(bool positive_facing, int axis) { + return project_tab[positive_facing ? 1 : 0][axis]; + } + + template + typename Face::unproject_t Face::getUnprojector(bool positive_facing, int axis) { + return NULL; + } + + template<> + Face<3>::unproject_t Face<3>::getUnprojector(bool positive_facing, int axis) { + return unproject_tab[positive_facing ? 1 : 0][axis]; + } + + + + template + Face::Face(const std::vector &_vertices, + bool delay_recalc) : tagable() { + vertices = _vertices; + edges.resize(nVertices(), NULL); + if (!delay_recalc && !recalc()) { } + } + + template + Face::Face(const vertex_t *a, + const vertex_t *b, + const vertex_t *c, + bool delay_recalc) : tagable() { + vertices.reserve(3); + vertices.push_back(a); + vertices.push_back(b); + vertices.push_back(c); + edges.resize(3, NULL); + if (!delay_recalc && !recalc()) { } + } + + template + Face::Face(const vertex_t *a, + const vertex_t *b, + const vertex_t *c, + const vertex_t *d, + bool delay_recalc) : tagable() { + vertices.reserve(4); + vertices.push_back(a); + vertices.push_back(b); + vertices.push_back(c); + vertices.push_back(d); + edges.resize(4, NULL); + if (!delay_recalc && !recalc()) { } + } + + template + void Face::invert() { + size_t n_verts = vertices.size(); + for (size_t i = 0; i < n_verts / 2; ++i) std::swap(vertices[i], vertices[n_verts - 1 - i]); + + + if (project != NULL) { + plane_eqn.negate(); + + int da = carve::geom::largestAxis(plane_eqn.N); + + project = getProjector(plane_eqn.N.v[da] > 0, da); + unproject = getUnprojector(plane_eqn.N.v[da] > 0, da); + } + + if (edges.size() == n_verts) { + for (size_t i = 0; i < (n_verts - 1) / 2; ++i) std::swap(edges[i], edges[n_verts - 2 - i]); + for (size_t i = 0; i < n_verts; i++) { + const vertex_t *v1 = vertices[i]; + const vertex_t *v2 = vertices[(i+1) % n_verts]; + CARVE_ASSERT((edges[i]->v1 == v1 && edges[i]->v2 == v2) || (edges[i]->v1 == v2 && edges[i]->v2 == v1)); + } + } + } + + template + bool Face::recalc() { + aabb.fit(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr()); + + if (!carve::geom3d::fitPlane(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr(), plane_eqn)) { + return false; + } + + int da = carve::geom::largestAxis(plane_eqn.N); + project = getProjector(false, da); + + double A = carve::geom2d::signedArea(vertices, projector()); + if ((A < 0.0) ^ (plane_eqn.N.v[da] < 0.0)) { + plane_eqn.negate(); + } + + project = getProjector(plane_eqn.N.v[da] > 0, da); + unproject = getUnprojector(plane_eqn.N.v[da] > 0, da); + + return true; + } + + template + Face *Face::init(const Face *base, const std::vector &_vertices, bool flipped) { + return init(base, _vertices.begin(), _vertices.end(), flipped); + } + + template + bool Face::containsPoint(const vector_t &p) const { + if (!carve::math::ZERO(carve::geom::distance(plane_eqn, p))) return false; + // return pointInPolySimple(vertices, projector(), (this->*project)(p)); + return carve::geom2d::pointInPoly(vertices, projector(), face::project(this, p)).iclass != POINT_OUT; + } + + template + bool Face::containsPointInProjection(const vector_t &p) const { + return carve::geom2d::pointInPoly(vertices, projector(), face::project(this, p)).iclass != POINT_OUT; + } + + template + bool Face::simpleLineSegmentIntersection(const carve::geom::linesegment &line, + vector_t &intersection) const { + if (!line.OK()) return false; + + carve::geom3d::Vector p; + IntersectionClass intersects = carve::geom3d::lineSegmentPlaneIntersection(plane_eqn, + line, + p); + if (intersects == INTERSECT_NONE || intersects == INTERSECT_BAD) { + return false; + } + + carve::geom2d::P2 proj_p(face::project(this, p)); + if (carve::geom2d::pointInPolySimple(vertices, projector(), proj_p)) { + intersection = p; + return true; + } + return false; + } + + // XXX: should try to return a pre-existing vertex in the case of a + // line-vertex intersection. as it stands, this code isn't used, + // so... meh. + template + IntersectionClass Face::lineSegmentIntersection(const carve::geom::linesegment &line, + vector_t &intersection) const { + if (!line.OK()) return INTERSECT_NONE; + + + carve::geom3d::Vector p; + IntersectionClass intersects = carve::geom3d::lineSegmentPlaneIntersection(plane_eqn, + line, + p); + if (intersects == INTERSECT_NONE || intersects == INTERSECT_BAD) { + return intersects; + } + + carve::geom2d::P2 proj_p(face::project(this, p)); + + carve::geom2d::PolyInclusionInfo pi = carve::geom2d::pointInPoly(vertices, projector(), proj_p); + switch (pi.iclass) { + case POINT_VERTEX: + intersection = p; + return INTERSECT_VERTEX; + + case POINT_EDGE: + intersection = p; + return INTERSECT_EDGE; + + case POINT_IN: + intersection = p; + return INTERSECT_FACE; + + case POINT_OUT: + return INTERSECT_NONE; + + default: + break; + } + return INTERSECT_NONE; + } + + + } +} + +// explicit instantiations. +template class carve::poly::Face<3>; diff --git a/thirdparty/carve-1.4.0/lib/geom2d.cpp b/thirdparty/carve-1.4.0/lib/geom2d.cpp new file mode 100644 index 00000000..5ef531f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/geom2d.cpp @@ -0,0 +1,231 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include + +namespace carve { + namespace geom2d { + + namespace { + } + + LineIntersectionInfo lineSegmentIntersection(const P2 &l1v1, const P2 &l1v2, + const P2 &l2v1, const P2 &l2v2) { + if (carve::geom::equal(l1v1, l1v2) || carve::geom::equal(l2v1, l2v2)) { + throw carve::exception("bad args"); + } + + if (std::max(l1v1.x, l1v2.x) < std::min(l2v1.x, l2v2.x) - EPSILON || + std::max(l2v1.x, l2v2.x) < std::min(l1v1.x, l1v2.x) - EPSILON) { + return LineIntersectionInfo(NO_INTERSECTION); + } + + double dx13 = l1v1.x - l2v1.x; + double dy13 = l1v1.y - l2v1.y; + double dx43 = l2v2.x - l2v1.x; + double dy43 = l2v2.y - l2v1.y; + double dx21 = l1v2.x - l1v1.x; + double dy21 = l1v2.y - l1v1.y; + double ua_n = dx43 * dy13 - dy43 * dx13; + double ub_n = dx21 * dy13 - dy21 * dx13; + double u_d = dy43 * dx21 - dx43 * dy21; + + if (carve::math::ZERO(u_d)) { + if (carve::math::ZERO(ua_n)) { + if (carve::geom::equal(l1v2, l2v1)) { + return LineIntersectionInfo(INTERSECTION_PP, l1v2, 1, 2); + } + if (carve::geom::equal(l1v1, l2v2)) { + return LineIntersectionInfo(INTERSECTION_PP, l1v1, 0, 4); + } + if (l1v2.x > l2v1.x && l1v1.x < l2v2.x) { + return LineIntersectionInfo(COLINEAR); + } + } + return LineIntersectionInfo(NO_INTERSECTION); + } + + double ua = ua_n / u_d; + double ub = ub_n / u_d; + + if (-EPSILON <= ua && ua <= 1.0 + EPSILON && -EPSILON <= ub && ub <= 1.0 + EPSILON) { + double x = l1v1.x + ua * (l1v2.x - l1v1.x); + double y = l1v1.y + ua * (l1v2.y - l1v1.y); + + P2 p = carve::geom::VECTOR(x, y); + + double d1 = distance2(p, l1v1); + double d2 = distance2(p, l1v2); + double d3 = distance2(p, l2v1); + double d4 = distance2(p, l2v2); + + int n = -1; + + if (std::min(d1, d2) < EPSILON2) { + if (d1 < d2) { + p = l1v1; n = 0; + } else { + p = l1v2; n = 1; + } + if (std::min(d3, d4) < EPSILON2) { + if (d3 < d4) { + return LineIntersectionInfo(INTERSECTION_PP, p, n, 2); + } else { + return LineIntersectionInfo(INTERSECTION_PP, p, n, 3); + } + } else { + return LineIntersectionInfo(INTERSECTION_PL, p, n, -1); + } + } else if (std::min(d3, d4) < EPSILON2) { + if (d3 < d4) { + return LineIntersectionInfo(INTERSECTION_LP, l2v1, -1, 2); + } else { + return LineIntersectionInfo(INTERSECTION_LP, l2v2, -1, 3); + } + } else { + return LineIntersectionInfo(INTERSECTION_LL, p, -1, -1); + } + } + return LineIntersectionInfo(NO_INTERSECTION); + } + + LineIntersectionInfo lineSegmentIntersection(const LineSegment2 &l1, + const LineSegment2 &l2) { + return lineSegmentIntersection(l1.v1, l1.v2, l2.v1, l2.v2); + } + + double signedArea(const P2Vector &points) { + return signedArea(points, p2_adapt_ident()); + } + + bool pointInPolySimple(const P2Vector &points, const P2 &p) { + return pointInPolySimple(points, p2_adapt_ident(), p); + } + + PolyInclusionInfo pointInPoly(const P2Vector &points, const P2 &p) { + return pointInPoly(points, p2_adapt_ident(), p); + } + + int lineSegmentPolyIntersections(const P2Vector &points, + LineSegment2 line, + std::vector &out) { + int count = 0; + + if (line.v2 < line.v1) { line.flip(); } + out.clear(); + + for (P2Vector::size_type i = 0, l = points.size(); i < l; i++) { + P2Vector::size_type j = (i + 1) % l; + LineIntersectionInfo e = + lineSegmentIntersection(LineSegment2(points[i], points[j]), line); + + switch (e.iclass) { + case INTERSECTION_PL: { + out.push_back(PolyIntersectionInfo(INTERSECT_EDGE, e.ipoint, i)); + count++; + break; + } + case INTERSECTION_PP: { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, e.ipoint, i + e.p2 - 2)); + count++; + break; + } + case INTERSECTION_LP: { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, e.ipoint, i + e.p2 - 2)); + count++; + break; + } + case INTERSECTION_LL: { + out.push_back(PolyIntersectionInfo(INTERSECT_EDGE, e.ipoint, i)); + count++; + break; + } + case COLINEAR: { + int n1 = (int)i, n2 = (int)j; + P2 q1 = points[i], q2 = points[j]; + + if (q2 < q1) { std::swap(q1, q2); std::swap(n1, n2); } + + if (equal(q1, line.v1)) { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, q1, n1)); + } else if (q1.x < line.v1.x) { + out.push_back(PolyIntersectionInfo(INTERSECT_EDGE, line.v1, i)); + } else { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, q1, n1)); + } + if (equal(q2, line.v2)) { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, q2, n2)); + } else if (line.v2.x < q2.x) { + out.push_back(PolyIntersectionInfo(INTERSECT_EDGE, line.v2, i)); + } else { + out.push_back(PolyIntersectionInfo(INTERSECT_VERTEX, q2, n2)); + } + + count += 2; + + break; + } + default: + break; + } + } + return count; + } + + struct FwdSort { + bool operator()(const PolyIntersectionInfo &a, + const PolyIntersectionInfo &b) const { + return a.ipoint < b.ipoint; + } + }; + + struct RevSort { + bool operator()(const PolyIntersectionInfo &a, + const PolyIntersectionInfo &b) const { + return a.ipoint < b.ipoint; + } + }; + + int sortedLineSegmentPolyIntersections(const P2Vector &points, + LineSegment2 line, + std::vector &out) { + + bool swapped = line.v2 < line.v1; + + int count = lineSegmentPolyIntersections(points, line, out); + if (swapped) { + std::sort(out.begin(), out.end(), RevSort()); + } else { + std::sort(out.begin(), out.end(), FwdSort()); + } + return count; + } + + bool pickContainedPoint(const std::vector &poly, P2 &result) { + return pickContainedPoint(poly, p2_adapt_ident(), result); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/geom3d.cpp b/thirdparty/carve-1.4.0/lib/geom3d.cpp new file mode 100644 index 00000000..4fc7f0cf --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/geom3d.cpp @@ -0,0 +1,164 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include + +namespace carve { + namespace geom3d { + + namespace { + int is_same(const std::vector &a, + const std::vector &b) { + if (a.size() != b.size()) return false; + + const size_t S = a.size(); + size_t i, j, p; + + for (p = 0; p < S; ++p) { + if (a[0] == b[p]) break; + } + if (p == S) return 0; + + for (i = 1, j = p + 1; j < S; ++i, ++j) if (a[i] != b[j]) goto not_fwd; + for ( j = 0; i < S; ++i, ++j) if (a[i] != b[j]) goto not_fwd; + return +1; + +not_fwd: + for (i = 1, j = p - 1; j != (size_t)-1; ++i, --j) if (a[i] != b[j]) goto not_rev; + for ( j = S - 1; i < S; ++i, --j) if (a[i] != b[j]) goto not_rev; + return -1; + +not_rev: + return 0; + } + } + + bool planeIntersection(const Plane &a, const Plane &b, Ray &r) { + Vector N = cross(a.N, b.N); + if (N.isZero()) { + return false; + } + N.normalize(); + + double dot_aa = dot(a.N, a.N); + double dot_bb = dot(b.N, b.N); + double dot_ab = dot(a.N, b.N); + + double determinant = dot_aa * dot_bb - dot_ab * dot_ab; + + double c1 = ( a.d * dot_bb - b.d * dot_ab) / determinant; + double c2 = ( b.d * dot_aa - a.d * dot_ab) / determinant; + + r.D = N; + r.v = c1 * a.N + c2 * b.N; + + return true; + } + + IntersectionClass rayPlaneIntersection(const Plane &p, + const Vector &v1, + const Vector &v2, + Vector &v, + double &t) { + Vector Rd = v2 - v1; + double Vd = dot(p.N, Rd); + double V0 = dot(p.N, v1) + p.d; + + if (carve::math::ZERO(Vd)) { + if (carve::math::ZERO(V0)) { + return INTERSECT_BAD; + } else { + return INTERSECT_NONE; + } + } + + t = -V0 / Vd; + v = v1 + t * Rd; + return INTERSECT_PLANE; + } + + IntersectionClass lineSegmentPlaneIntersection(const Plane &p, + const LineSegment &line, + Vector &v) { + double t; + IntersectionClass r = rayPlaneIntersection(p, line.v1, line.v2, v, t); + + if (r <= 0) return r; + + if ((t < 0.0 && !equal(v, line.v1)) || (t > 1.0 && !equal(v, line.v2))) + return INTERSECT_NONE; + + return INTERSECT_PLANE; + } + + RayIntersectionClass rayRayIntersection(const Ray &r1, + const Ray &r2, + Vector &v1, + Vector &v2, + double &mu1, + double &mu2) { + if (!r1.OK() || !r2.OK()) return RR_DEGENERATE; + + Vector v_13 = r1.v - r2.v; + + double d1343 = dot(v_13, r2.D); + double d4321 = dot(r2.D, r1.D); + double d1321 = dot(v_13, r1.D); + double d4343 = dot(r2.D, r2.D); + double d2121 = dot(r1.D, r1.D); + + double numer = d1343 * d4321 - d1321 * d4343; + double denom = d2121 * d4343 - d4321 * d4321; + + // dc - eb + // ------- + // ab - cc + + // dc/eb - 1 + // --------- + // a/e - cc/eb + + // dc/b - e + // -------- + // a - cc/b + + // d/b - e/c + // --------- + // a/c - c/b + + if (denom * double(1<<10) < numer) { + return RR_PARALLEL; + } + + mu1 = numer / denom; + mu2 = (d1343 + d4321 * mu1) / d4343; + + v1 = r1.v + mu1 * r1.D; + v2 = r2.v + mu2 * r2.D; + + return (equal(v1, v2)) ? RR_INTERSECTION : RR_NO_INTERSECTION; + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect.cpp b/thirdparty/carve-1.4.0/lib/intersect.cpp new file mode 100644 index 00000000..6d6b189e --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect.cpp @@ -0,0 +1,1543 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include +#include +#include + +#include + +#include "csg_detail.hpp" +#include "csg_data.hpp" + +#include "intersect_debug.hpp" +#include "intersect_common.hpp" +#include "intersect_classify_common.hpp" + +#include "csg_collector.hpp" + +#include +#include + +typedef carve::poly::Polyhedron poly_t; + +carve::csg::VertexPool::VertexPool() { +} + +carve::csg::VertexPool::~VertexPool() { +} + +void carve::csg::VertexPool::reset() { + pool.clear(); +} + +poly_t::vertex_t *carve::csg::VertexPool::get(const carve::geom3d::Vector &v) { + if (!pool.size() || pool.back().size() == blocksize) { + pool.push_back(std::vector()); + pool.back().reserve(blocksize); + } + pool.back().push_back(poly_t::vertex_t(v)); + return &pool.back().back(); +} + +bool carve::csg::VertexPool::inPool(const poly_t::vertex_t *v) const { + for (pool_t::const_iterator i = pool.begin(); i != pool.end(); ++i) { + if (v >= &(i->front()) && v <= &(i->back())) return true; + } + return false; +} + + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) +void writePLY(std::string &out_file, const carve::point::PointSet *points, bool ascii); +void writePLY(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii); +void writePLY(std::string &out_file, const carve::poly::Polyhedron *poly, bool ascii); + +static carve::poly::Polyhedron *faceLoopsToPolyhedron(const carve::csg::FaceLoopList &fl) { + std::vector faces; + faces.reserve(fl.size()); + for (carve::csg::FaceLoop *f = fl.head; f; f = f->next) { + faces.push_back(carve::poly::Polyhedron::face_t()); + faces.back().init(f->orig_face, f->vertices, false); + } + carve::poly::Polyhedron *poly = new carve::poly::Polyhedron(faces); + + return poly; +} +#endif + +namespace { + /** + * \brief Sort a range [\a beg, \a end) of vertices in order of increasing dot product of vertex - \a base on \dir. + * + * @tparam[in] T a forward iterator type. + * @param[in] dir The direction in which to sort vertices. + * @param[in] base + * @param[in] beg The start of the vertex range to sort. + * @param[in] end The end of the vertex range to sort. + * @param[out] out The sorted vertex result. + * @param[in] size_hint A hint regarding the size of the output + * vector (to avoid needing to be able to calculate \a + * end - \a beg). + */ + template + void orderVertices(const carve::geom3d::Vector &dir, const carve::geom3d::Vector &base, + T beg, const T end, std::vector &out, + size_t size_hint = 1) { + typedef std::vector > DVVector; + std::vector > ordered_vertices; + ordered_vertices.reserve(size_hint); + + for (; beg != end; ++beg) { + const poly_t::vertex_t *v = (*beg); + ordered_vertices.push_back(std::make_pair(carve::geom::dot(v->v - base, dir), v)); + } + + std::sort(ordered_vertices.begin(), ordered_vertices.end()); + + out.clear(); + out.reserve(ordered_vertices.size()); + for (DVVector::const_iterator + i = ordered_vertices.begin(), e = ordered_vertices.end(); + i != e; + ++i) { + out.push_back((*i).second); + } + } + + + + /** + * + * + * @param dir + * @param base + * @param beg + * @param end + */ + template + void selectOrderingProjection(carve::geom3d::Vector &dir, carve::geom3d::Vector &base, + T beg, const T end) { + double dx, dy, dz; + const poly_t::vertex_t *min_x, *min_y, *min_z, *max_x, *max_y, *max_z; + if (beg == end) return; + min_x = max_x = min_y = max_y = min_z = max_z = *beg++; + for (; beg != end; ++beg) { + if (min_x->v.x > (*beg)->v.x) min_x = *beg; + if (min_y->v.y > (*beg)->v.y) min_y = *beg; + if (min_z->v.z > (*beg)->v.z) min_z = *beg; + if (max_x->v.x < (*beg)->v.x) max_x = *beg; + if (max_y->v.y < (*beg)->v.y) max_y = *beg; + if (max_z->v.z < (*beg)->v.z) max_z = *beg; + } + + dx = max_x->v.x - min_x->v.x; + dy = max_y->v.y - min_y->v.y; + dz = max_z->v.z - min_z->v.z; + + if (dx > dy) { + if (dx > dz) { + dir = max_x->v - min_x->v; base = min_x->v; + } else { + dir = max_z->v - min_z->v; base = min_z->v; + } + } else { + if (dy > dz) { + dir = max_y->v - min_y->v; base = min_y->v; + } else { + dir = max_z->v - min_z->v; base = min_z->v; + } + } + } + +} + +namespace { + void dump_octree_stats(std::ostream &out, carve::csg::Octree::Node *node, size_t depth, std::string indent = "") { + if (node->is_leaf) { + out + << indent + << node << "." << depth << " " + << node->faces.size() << " faces " + << node->edges.size() << " edges " + << node->vertices.size() << " vertices" + << std::endl; + } else { + out + << indent + << node << "." << depth + << std::endl; + for (size_t i = 0; i < 8; ++i) { + dump_octree_stats(out, node->children[i], depth+1, indent + " "); + } + } + } + + + + struct dump_data { + const poly_t::vertex_t *i_pt; + carve::csg::IObj i_src; + carve::csg::IObj i_tgt; + dump_data(const poly_t::vertex_t *_i_pt, + carve::csg::IObj _i_src, + carve::csg::IObj _i_tgt) : i_pt(_i_pt), i_src(_i_src), i_tgt(_i_tgt) { + } + }; + + + + struct dump_sort { + bool operator()(const dump_data &a, const dump_data &b) const { + if (a.i_pt->v.x < b.i_pt->v.x) return true; + if (a.i_pt->v.x > b.i_pt->v.x) return false; + if (a.i_pt->v.y < b.i_pt->v.y) return true; + if (a.i_pt->v.y > b.i_pt->v.y) return false; + if (a.i_pt->v.z < b.i_pt->v.z) return true; + if (a.i_pt->v.z > b.i_pt->v.z) return false; + return false; + } + }; + + + + void dump_intersections(std::ostream &out, carve::csg::Intersections &csg_intersections) { + std::vector temp; + + for (carve::csg::Intersections::const_iterator + i = csg_intersections.begin(), + ie = csg_intersections.end(); + i != ie; + ++i) { + const carve::csg::IObj &i_src = ((*i).first); + + for (carve::csg::Intersections::mapped_type::const_iterator + j = (*i).second.begin(), + je = (*i).second.end(); + j != je; + ++j) { + const carve::csg::IObj &i_tgt = ((*j).first); + const poly_t::vertex_t *i_pt = ((*j).second); + temp.push_back(dump_data(i_pt, i_src, i_tgt)); + } + } + + std::sort(temp.begin(), temp.end(), dump_sort()); + + for (size_t i = 0; i < temp.size(); ++i) { + const carve::csg::IObj &i_src = temp[i].i_src; + const carve::csg::IObj &i_tgt = temp[i].i_tgt; + out + << "INTERSECTION: " << temp[i].i_pt << " (" << temp[i].i_pt->v << ") " + << "is " << i_src << ".." << i_tgt << std::endl; + } + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + std::vector vertices; + + for (carve::csg::Intersections::const_iterator + i = csg_intersections.begin(), + ie = csg_intersections.end(); + i != ie; + ++i) { + for (carve::csg::Intersections::mapped_type::const_iterator + j = (*i).second.begin(), + je = (*i).second.end(); + j != je; + ++j) { + const poly_t::vertex_t *i_pt = ((*j).second); + vertices.push_back(i_pt->v); + } + } + + carve::point::PointSet points(vertices); + + std::string outf("/tmp/intersection-points.ply"); + ::writePLY(outf, &points, true); +#endif + } +} + + + +bool carve::csg::CSG::Hooks::hasHook(unsigned hook_num) { + return hooks[hook_num].size() > 0; +} + +void carve::csg::CSG::Hooks::intersectionVertex(const poly_t::vertex_t *vertex, + const IObjPairSet &intersections) { + for (std::list::iterator j = hooks[INTERSECTION_VERTEX_HOOK].begin(); + j != hooks[INTERSECTION_VERTEX_HOOK].end(); + ++j) { + (*j)->intersectionVertex(vertex, intersections); + } +} + +void carve::csg::CSG::Hooks::processOutputFace(std::vector &faces, + const poly_t::face_t *orig_face, + bool flipped) { + for (std::list::iterator j = hooks[PROCESS_OUTPUT_FACE_HOOK].begin(); + j != hooks[PROCESS_OUTPUT_FACE_HOOK].end(); + ++j) { + (*j)->processOutputFace(faces, orig_face, flipped); + } +} + +void carve::csg::CSG::Hooks::resultFace(const poly_t::face_t *new_face, + const poly_t::face_t *orig_face, + bool flipped) { + for (std::list::iterator j = hooks[RESULT_FACE_HOOK].begin(); + j != hooks[RESULT_FACE_HOOK].end(); + ++j) { + (*j)->resultFace(new_face, orig_face, flipped); + } +} + +void carve::csg::CSG::Hooks::registerHook(Hook *hook, unsigned hook_bits) { + for (unsigned i = 0; i < HOOK_MAX; ++i) { + if (hook_bits & (1U << i)) { + hooks[i].push_back(hook); + } + } +} + +void carve::csg::CSG::Hooks::unregisterHook(Hook *hook) { + for (unsigned i = 0; i < HOOK_MAX; ++i) { + hooks[i].erase(std::remove(hooks[i].begin(), hooks[i].end(), hook), hooks[i].end()); + } +} + +void carve::csg::CSG::Hooks::reset() { + for (unsigned i = 0; i < HOOK_MAX; ++i) { + for (std::list::iterator j = hooks[i].begin(); j != hooks[i].end(); ++j) { + delete (*j); + } + hooks[i].clear(); + } +} + +carve::csg::CSG::Hooks::Hooks() : hooks() { + hooks.resize(HOOK_MAX); +} + +carve::csg::CSG::Hooks::~Hooks() { + reset(); +} + + + +void carve::csg::CSG::makeVertexIntersections() { + static carve::TimingName FUNC_NAME("CSG::makeVertexIntersections()"); + carve::TimingBlock block(FUNC_NAME); + vertex_intersections.clear(); + for (Intersections::const_iterator + i = intersections.begin(), + ie = intersections.end(); + i != ie; + ++i) { + const IObj &i_src = ((*i).first); + + for (Intersections::mapped_type::const_iterator + j = (*i).second.begin(), + je = (*i).second.end(); + j != je; + ++j) { + const IObj &i_tgt = ((*j).first); + const poly_t::vertex_t *i_pt = ((*j).second); + + vertex_intersections[i_pt].insert(std::make_pair(i_src, i_tgt)); + } + } +} + + + +static const poly_t::vertex_t *chooseWeldPoint( + const carve::csg::detail::VSet &equivalent, + carve::csg::VertexPool &vertex_pool) { + // XXX: choose a better weld point. + if (!equivalent.size()) return NULL; + + for (carve::csg::detail::VSet::const_iterator + i = equivalent.begin(), e = equivalent.end(); + i != e; + ++i) { + if (!vertex_pool.inPool((*i))) return (*i); + } + return *equivalent.begin(); +} + + + +static const poly_t::vertex_t *weld( + const carve::csg::detail::VSet &equivalent, + carve::csg::VertexIntersections &vertex_intersections, + carve::csg::VertexPool &vertex_pool) { + const poly_t::vertex_t *weld_point = chooseWeldPoint(equivalent, vertex_pool); + +#if defined(CARVE_DEBUG) + std::cerr << "weld: " << equivalent.size() << " vertices ( "; + for (carve::csg::detail::VSet::const_iterator + i = equivalent.begin(), e = equivalent.end(); + i != e; + ++i) { + const poly_t::vertex_t *v = (*i); + std::cerr << " " << v; + } + std::cerr << ") to " << weld_point << std::endl; +#endif + + if (!weld_point) return NULL; + + carve::csg::VertexIntersections::mapped_type &weld_tgt = (vertex_intersections[weld_point]); + + for (carve::csg::detail::VSet::const_iterator + i = equivalent.begin(), e = equivalent.end(); + i != e; + ++i) { + const poly_t::vertex_t *v = (*i); + + if (v != weld_point) { + carve::csg::VertexIntersections::iterator j = vertex_intersections.find(v); + + if (j != vertex_intersections.end()) { + weld_tgt.insert((*j).second.begin(), (*j).second.end()); + vertex_intersections.erase(j); + } + } + } + return weld_point; +} + + + +void carve::csg::CSG::groupIntersections() { + static carve::TimingName GROUP_INTERSECTONS("groupIntersections()"); + + carve::TimingBlock block(GROUP_INTERSECTONS); + + std::vector vertices; + detail::VVSMap graph; +#if defined(CARVE_DEBUG) + std::cerr << "groupIntersections()" << ": vertex_intersections.size()==" << vertex_intersections.size() << std::endl; +#endif + + vertices.reserve(vertex_intersections.size()); + for (carve::csg::VertexIntersections::const_iterator + i = vertex_intersections.begin(), + e = vertex_intersections.end(); + i != e; + ++i) + { + vertices.push_back((*i).first); + } + carve::geom3d::AABB aabb; + aabb.fit(vertices.begin(), vertices.end(), carve::poly::vec_adapt_vertex_ptr()); + Octree vertex_intersections_octree; + vertex_intersections_octree.setBounds(aabb); + + vertex_intersections_octree.addVertices(vertices); + + std::vector out; + for (size_t i = 0, l = vertices.size(); i != l; ++i) { + // let's find all the vertices near this one. + out.clear(); + vertex_intersections_octree.findVerticesNearAllowDupes(vertices[i]->v, out); + + for (size_t j = 0; j < out.size(); ++j) { + if (vertices[i] != out[j] && carve::geom::equal(vertices[i]->v, out[j]->v)) { +#if defined(CARVE_DEBUG) + std::cerr << "EQ: " << vertices[i] << "," << out[j] << " " << vertices[i]->v << "," << out[j]->v << std::endl; +#endif + graph[vertices[i]].insert(out[j]); + graph[out[j]].insert(vertices[i]); + } + } + } + + detail::VSet visited, open; + while (graph.size()) { + visited.clear(); + open.clear(); + detail::VVSMap::iterator i = graph.begin(); + open.insert((*i).first); + while (open.size()) { + detail::VSet::iterator t = open.begin(); + const poly_t::vertex_t *o = (*t); + open.erase(t); + i = graph.find(o); + CARVE_ASSERT(i != graph.end()); + visited.insert(o); + for (detail::VVSMap::mapped_type::const_iterator + j = (*i).second.begin(), + je = (*i).second.end(); + j != je; + ++j) { + if (visited.count((*j)) == 0) { + open.insert((*j)); + } + } + graph.erase(i); + } + weld(visited, vertex_intersections, vertex_pool); + } +} + + + +void carve::csg::CSG::intersectingFacePairs(detail::Data &data) { + static carve::TimingName FUNC_NAME("CSG::intersectingFacePairs()"); + carve::TimingBlock block(FUNC_NAME); + + // iterate over all intersection points. + for (carve::csg::VertexIntersections::const_iterator + i = vertex_intersections.begin(), + ie = vertex_intersections.end(); + i != ie; + ++i) { + const poly_t::vertex_t *i_pt = ((*i).first); + detail::VFSMap::mapped_type &face_set = (data.fmap_rev[i_pt]); + + // for all pairs of intersecting objects at this point + for (carve::csg::VertexIntersections::mapped_type::const_iterator + j = (*i).second.begin(), + je = (*i).second.end(); + j != je; + ++j) { + const carve::csg::IObj &i_src = ((*j).first); + const carve::csg::IObj &i_tgt = ((*j).second); + + // work out the faces involved. this updates fmap_rev. + intersections.facesForObject(i_src, face_set); + intersections.facesForObject(i_tgt, face_set); + + // record the intersection with respect to any involved vertex. + if (i_src.obtype == IObj::OBTYPE_VERTEX) data.vmap[i_src.vertex] = i_pt; + if (i_tgt.obtype == IObj::OBTYPE_VERTEX) data.vmap[i_tgt.vertex] = i_pt; + + // record the intersection with respect to any involved edge. + if (i_src.obtype == IObj::OBTYPE_EDGE) data.emap[i_src.edge].insert(i_pt); + if (i_tgt.obtype == IObj::OBTYPE_EDGE) data.emap[i_tgt.edge].insert(i_pt); + } + + // record the intersection with respect to each face. + for (detail::VFSMap::mapped_type::const_iterator k = face_set.begin(), ke = face_set.end(); k != ke; ++k) { + const poly_t::face_t *f = (*k); + data.fmap[f].insert(i_pt); + } + } +} + + + +void carve::csg::CSG::generateVertexEdgeIntersections(const poly_t *a, const poly_t *b) { + static carve::TimingName FUNC_NAME("CSG::generateVertexEdgeIntersections()"); + carve::TimingBlock block(FUNC_NAME); + + std::vector edges_in_b; + for (size_t va_i = 0, va_l = a->vertices.size(); va_i != va_l; ++va_i) { + const poly_t::vertex_t *v = &(a->vertices[va_i]); + if (a->connectivity.vertex_to_face[a->vertexToIndex_fast(v)].size() == 0) { + continue; + } + b->findEdgesNear(v->v, edges_in_b); + // std::cerr << "testing vertex: " << v << " " << v->v << std::endl; + + for (size_t eb_i = 0, eb_l = edges_in_b.size(); eb_i != eb_l; ++eb_i) { + const poly_t::edge_t *edge_b = edges_in_b[eb_i]; + const poly_t::vertex_t *ev1 = edge_b->v1, *ev2 = edge_b->v2; + // std::cerr << " aganist edge: " << edge_b << " [" << ev1 << "," << ev2 << "] " << ev1->v << " " << ev2->v << std::endl; + if (intersections.intersects(v, edge_b)) { + // std::cerr << " already intersected" << std::endl; + continue; + } + + + if (std::min(ev1->v.x, ev2->v.x) - carve::EPSILON > v->v.x || + std::max(ev1->v.x, ev2->v.x) + carve::EPSILON < v->v.x || + std::min(ev1->v.y, ev2->v.y) - carve::EPSILON > v->v.y || + std::max(ev1->v.y, ev2->v.y) + carve::EPSILON < v->v.y || + std::min(ev1->v.z, ev2->v.z) - carve::EPSILON > v->v.z || + std::max(ev1->v.z, ev2->v.z) + carve::EPSILON < v->v.z) { + continue; + } + + if (distance2(ev1->v, v->v) < carve::EPSILON2) { + // vertex-vertex intersection + intersections.record(IObj(ev1), IObj(v), v); + // std::cerr << "INTERSECT(VV) " << v << "-" << ev1 << std::endl; + } else if (distance2(ev2->v, v->v) < carve::EPSILON2) { + // vertex-vertex intersection + intersections.record(IObj(ev2), IObj(v), v); + // std::cerr << "INTERSECT(VV) " << v << "-" << ev2 << std::endl; + } else { + double a = cross(ev2->v - ev1->v, v->v - ev1->v).length2(); + double b = (ev2->v - ev1->v).length2(); + if (a < b * carve::EPSILON2) { + // vertex-edge intersection + intersections.record(IObj(edge_b), IObj(v), v); + // std::cerr << "INTERSECT(VE) " << v << "-" << edge_b << std::endl; + } + } + + } + } +} + + + +void carve::csg::CSG::generateEdgeEdgeIntersections(const poly_t *a, const poly_t *b) { + static carve::TimingName FUNC_NAME("CSG::generateEdgeEdgeIntersections()"); + carve::TimingBlock block(FUNC_NAME); + + std::vector edges_in_b; + for (size_t ea_i = 0, ea_l = a->edges.size(); ea_i != ea_l; ++ea_i) { + const poly_t::edge_t *edge_a = &a->edges[ea_i]; + const poly_t::vertex_t *v1 = edge_a->v1, *v2 = edge_a->v2; + + b->findEdgesNear(*edge_a, edges_in_b); + + for (size_t eb_i = 0, eb_l = edges_in_b.size(); eb_i != eb_l; ++eb_i) { + const poly_t::edge_t *edge_b = edges_in_b[eb_i]; + const poly_t::vertex_t *v3 = edge_b->v1, *v4 = edge_b->v2; + + if (intersections.intersects(edge_a, edge_b)) { + continue; + } + + if (std::max(v3->v.x, v4->v.x) + carve::EPSILON < std::min(v1->v.x, v2->v.x) - carve::EPSILON || + std::max(v1->v.x, v2->v.x) + carve::EPSILON < std::min(v3->v.x, v4->v.x) - carve::EPSILON) continue; + if (std::max(v3->v.y, v4->v.y) + carve::EPSILON < std::min(v1->v.y, v2->v.y) - carve::EPSILON || + std::max(v1->v.y, v2->v.y) + carve::EPSILON < std::min(v3->v.y, v4->v.y) - carve::EPSILON) continue; + if (std::max(v3->v.z, v4->v.z) + carve::EPSILON < std::min(v1->v.z, v2->v.z) - carve::EPSILON || + std::max(v1->v.z, v2->v.z) + carve::EPSILON < std::min(v3->v.z, v4->v.z) - carve::EPSILON) continue; + + carve::geom3d::Vector p1, p2; + double mu1, mu2; + + switch (carve::geom3d::rayRayIntersection(carve::geom3d::Ray(v2->v - v1->v, v1->v), + carve::geom3d::Ray(v4->v - v3->v, v3->v), + p1, p2, mu1, mu2)) { + case RR_INTERSECTION: { + // edges intersect + + carve::geom3d::Vector p1, p2; + double mu1, mu2; + + // std::cerr << "edge intersect: " << v1 << " " << v2 << " " << v3 << " " << v4 << std::endl; + if (!carve::geom3d::rayRayIntersection(carve::geom3d::Ray(v2->v - v1->v, v1->v), + carve::geom3d::Ray(v4->v - v3->v, v3->v), + p1, p2, mu1, mu2) || + !carve::geom::equal(p1, p2)) { + continue; + } + + if (mu1 >= 0.0 && mu1 <= 1.0 && mu2 >= 0.0 && mu2 <= 1.0) { + IObj o1, o2; + const poly_t::vertex_t *p; + + o1 = IObj(edge_a); + o2 = IObj(edge_b); + p = vertex_pool.get((p1 + p2) / 2.0); + intersections.record(o1, o2, p); + } + } + case RR_PARALLEL: { + // edges parallel. any intersection of this type should have + // been handled by generateVertexEdgeIntersections(). + break; + } + case RR_DEGENERATE: { + throw carve::exception("degenerate edge"); + break; + } + case RR_NO_INTERSECTION: { + break; + } + } + } + } +} + + + +void carve::csg::CSG::generateEdgeFaceIntersections(const poly_t *a, const poly_t *b) { + static carve::TimingName FUNC_NAME("CSG::generateEdgeFaceIntersections()"); + carve::TimingBlock block(FUNC_NAME); + + detail::FSet if_e; + + std::vector edges_in_b; + + for (size_t fa_i = 0, fa_l = a->faces.size(); fa_i != fa_l; ++fa_i) { + const poly_t::face_t &face_a = a->faces[fa_i]; + + b->findEdgesNear(face_a, edges_in_b); + + // vertex-face intersections. + for (size_t eb_i = 0, eb_l = edges_in_b.size(); eb_i != eb_l; ++eb_i) { + const poly_t::edge_t *edge_b = (edges_in_b[eb_i]); + if (edge_b == NULL) continue; + double d1 = carve::geom::distance(face_a.plane_eqn, edge_b->v1->v); + double d2 = carve::geom::distance(face_a.plane_eqn, edge_b->v2->v); + + // shortcircuit: does the edge cross the face? + if (std::max(d1, d2) < -carve::EPSILON || std::min(d1, d2) > carve::EPSILON) { edges_in_b[eb_i] = NULL; continue; } + + if (fabs(d1) < carve::EPSILON && + !intersections.intersects(edge_b->v1, &face_a) && + face_a.containsPoint(edge_b->v1->v)) { + intersections.record(edge_b->v1, &face_a, edge_b->v1); + for (size_t eb_j = eb_i + 1; eb_j != eb_l; ++eb_j) { + if (edges_in_b[eb_j] && + (edges_in_b[eb_j]->v1 == edge_b->v1 || + edges_in_b[eb_j]->v2 == edge_b->v1)) edges_in_b[eb_j] = NULL; + } + edges_in_b[eb_i] = NULL; + } + + if (fabs(d2) < carve::EPSILON && + !intersections.intersects(edge_b->v2, &face_a) && + face_a.containsPoint(edge_b->v2->v)) { + intersections.record(edge_b->v2, &face_a, edge_b->v2); + for (size_t eb_j = eb_i + 1; eb_j != eb_l; ++eb_j) { + if (edges_in_b[eb_j] && + (edges_in_b[eb_j]->v1 == edge_b->v2 || + edges_in_b[eb_j]->v2 == edge_b->v2)) edges_in_b[eb_j] = NULL; + } + edges_in_b[eb_i] = NULL; + } + } + + // edge-face intersections. + for (size_t eb_i = 0, eb_l = edges_in_b.size(); eb_i != eb_l; ++eb_i) { + const poly_t::edge_t *edge_b = (edges_in_b[eb_i]); + if (edge_b == NULL) continue; + + if (intersections.intersects(edge_b, &face_a)) continue; + + carve::geom3d::Vector p; + if (face_a.simpleLineSegmentIntersection(carve::geom3d::LineSegment(edge_b->v1->v, edge_b->v2->v), p)) { + intersections.record(edge_b, &face_a, vertex_pool.get(p)); + } + } + } +} + +void carve::csg::CSG::determinePotentiallyInteractingOctreeNodes(const poly_t *a, const poly_t *b) { +} + +void carve::csg::CSG::generateIntersections(const poly_t *a, const poly_t *b) { + generateVertexEdgeIntersections(a, b); + generateVertexEdgeIntersections(b, a); + +#if defined(CARVE_DEBUG) + std::cerr << "generateEdgeEdgeIntersections" << std::endl; +#endif + generateEdgeEdgeIntersections(a, b); + + +#if defined(CARVE_DEBUG) + std::cerr << "generateEdgeFaceIntersections" << std::endl; +#endif + generateEdgeFaceIntersections(a, b); + generateEdgeFaceIntersections(b, a); + + +#if defined(CARVE_DEBUG) + std::cerr << "makeVertexIntersections" << std::endl; +#endif + makeVertexIntersections(); + +#if defined(CARVE_DEBUG) + std::cerr << " intersections.size() " << intersections.size() << std::endl; + map_histogram(std::cerr, intersections); + std::cerr << " vertex_intersections.size() " << vertex_intersections.size() << std::endl; + map_histogram(std::cerr, vertex_intersections); +#endif + +#if defined(CARVE_DEBUG) && defined(DEBUG_DRAW_INTERSECTIONS) + HOOK(drawIntersections(vertex_intersections);); +#endif + +#if defined(CARVE_DEBUG) + // std::cerr << "groupIntersections" << std::endl; +#endif + //groupIntersections(); + +#if defined(CARVE_DEBUG) + std::cerr << " intersections.size() " << intersections.size() << std::endl; + std::cerr << " vertex_intersections.size() " << vertex_intersections.size() << std::endl; +#endif + + // notify about intersections. + if (hooks.hasHook(Hooks::INTERSECTION_VERTEX_HOOK)) { + for (VertexIntersections::const_iterator i = vertex_intersections.begin(); + i != vertex_intersections.end(); + ++i) { + hooks.intersectionVertex((*i).first, (*i).second); + } + } + + // from here on, only vertex_intersections is used for intersection + // information. + + // intersections still contains the vertex_to_face map. maybe that + // should be moved out into another class. + static_cast(intersections).clear(); +} + + + +carve::csg::CSG::CSG() { +} + + + +/** + * \brief For each intersected edge, decompose into a set of vertex pairs representing an ordered set of edge fragments. + * + * @tparam[in,out] data Internal intersection data. data.emap is used to produce data.divided_edges. + */ +void carve::csg::CSG::divideIntersectedEdges(detail::Data &data) { + static carve::TimingName FUNC_NAME("CSG::divideIntersectedEdges()"); + carve::TimingBlock block(FUNC_NAME); + + for (detail::EVSMap::const_iterator i = data.emap.begin(), ei = data.emap.end(); i != ei; ++i) { + const poly_t::edge_t *edge = (*i).first; + const detail::EVSMap::mapped_type &vertices = (*i).second; + std::vector &verts = data.divided_edges[edge]; + orderVertices(edge->v2->v - edge->v1->v, edge->v1->v, + vertices.begin(), vertices.end(), + verts, vertices.size()); + } +} + + + +carve::csg::CSG::~CSG() { +} + + + +void carve::csg::CSG::divideEdges(const std::vector &edges, + const poly_t *poly, + detail::Data &data) { + static carve::TimingName FUNC_NAME("CSG::divideEdges()"); + carve::TimingBlock block(FUNC_NAME); + + for (std::vector::const_iterator + i = edges.begin(), e = edges.end(); + i != e; + ++i) { + const poly_t::edge_t *edge = (&(*i)); + detail::EVSMap::const_iterator ei = data.emap.find(edge); + if (ei != data.emap.end()) { + const detail::EVSMap::mapped_type &vertices = ((*ei).second); + std::vector &verts = (data.divided_edges[edge]); + orderVertices(edge->v2->v - edge->v1->v, edge->v1->v, + vertices.begin(), vertices.end(), + verts, vertices.size()); + } + } +} + + + +void carve::csg::CSG::makeFaceEdges(carve::csg::EdgeClassification &eclass, + detail::Data &data) { + detail::FSet face_b_set; + for (detail::FVSMap::const_iterator + i = data.fmap.begin(), ie = data.fmap.end(); + i != ie; + ++i) { + const poly_t::face_t *face_a = (*i).first; + const detail::FVSMap::mapped_type &face_a_intersections = ((*i).second); + + face_b_set.clear(); + + // work out the set of faces from the opposing polyhedron that intersect face_a. + for (detail::FVSMap::mapped_type::const_iterator + j = face_a_intersections.begin(), je = face_a_intersections.end(); + j != je; + ++j) { + for (detail::VFSMap::mapped_type::const_iterator + k = data.fmap_rev[*j].begin(), ke = data.fmap_rev[*j].end(); + k != ke; + ++k) { + const poly_t::face_t *face_b = (*k); + if (face_a != face_b && face_b->owner != face_a->owner) { + face_b_set.insert(face_b); + } + } + } + + // run through each intersecting face. + for (detail::FSet::const_iterator + j = face_b_set.begin(), je = face_b_set.end(); + j != je; + ++j) { + const poly_t::face_t *face_b = (*j); + const detail::FVSMap::mapped_type &face_b_intersections = (data.fmap[face_b]); + + std::vector vertices; + vertices.reserve(std::min(face_a_intersections.size(), face_b_intersections.size())); + + // record the points of intersection between face_a and face_b + std::set_intersection(face_a_intersections.begin(), + face_a_intersections.end(), + face_b_intersections.begin(), + face_b_intersections.end(), + std::back_inserter(vertices)); + +#if defined(CARVE_DEBUG) + std::cerr << "face pair: " + << face_a << ":" << face_b + << " N(verts) " << vertices.size() << std::endl; + for (std::vector::const_iterator i = vertices.begin(), e = vertices.end(); i != e; ++i) { + std::cerr << (*i) << " " << (*i)->v << " (" + << carve::geom::distance(face_a->plane_eqn, (*i)->v) << "," + << carve::geom::distance(face_b->plane_eqn, (*i)->v) << ")" + << std::endl; + //CARVE_ASSERT(carve::geom3d::distance(face_a->plane_eqn, *(*i)) < EPSILON); + //CARVE_ASSERT(carve::geom3d::distance(face_b->plane_eqn, *(*i)) < EPSILON); + } +#endif + + // if there are two points of intersection, then the added edge is simple to determine. + if (vertices.size() == 2) { + const poly_t::vertex_t *v1 = vertices[0]; + const poly_t::vertex_t *v2 = vertices[1]; + carve::geom3d::Vector c = (v1->v + v2->v) / 2; + + // determine whether the midpoint of the implied edge is contained in face_a and face_b + +#if defined(CARVE_DEBUG) + std::cerr << "face_a->nVertices() = " << face_a->nVertices() << " face_a->containsPointInProjection(c) = " << face_a->containsPointInProjection(c) << std::endl; + std::cerr << "face_b->nVertices() = " << face_b->nVertices() << " face_b->containsPointInProjection(c) = " << face_b->containsPointInProjection(c) << std::endl; +#endif + + if (face_a->containsPointInProjection(c) && face_b->containsPointInProjection(c)) { +#if defined(CARVE_DEBUG) + std::cerr << "adding edge: " << v1 << "-" << v2 << std::endl; +#if defined(DEBUG_DRAW_FACE_EDGES) + HOOK(drawEdge(v1, v2, 1, 1, 1, 1, 1, 1, 1, 1, 2.0);); +#endif +#endif + // record the edge, with class information. + if (v1 > v2) std::swap(v1, v2); + eclass[ordered_edge(v1, v2)] = EC2(EDGE_ON, EDGE_ON); + data.face_split_edges[face_a].insert(std::make_pair(v1, v2)); + data.face_split_edges[face_b].insert(std::make_pair(v1, v2)); + } + continue; + } + + // otherwise, it's more complex. + carve::geom3d::Vector base, dir; + std::vector ordered; + + // skip coplanar edges. this simplifies the resulting + // mesh. eventually all coplanar face regions of two polyhedra + // must reach a point where they are no longer coplanar (or the + // polyhedra are identical). + if (!facesAreCoplanar(face_a, face_b)) { + // order the intersection vertices (they must lie along a + // vector, as the faces aren't coplanar). + selectOrderingProjection(dir, base, vertices.begin(), vertices.end()); + orderVertices(dir, base, vertices.begin(), vertices.end(), ordered, vertices.size()); + + // for each possible edge in the ordering, test the midpoint, + // and record if it's contained in face_a and face_b. + for (int k = 0, ke = (int)ordered.size() - 1; k < ke; ++k) { + const poly_t::vertex_t *v1 = ordered[k]; + const poly_t::vertex_t *v2 = ordered[k + 1]; + carve::geom3d::Vector c = (v1->v + v2->v) / 2; + +#if defined(CARVE_DEBUG) + std::cerr << "testing edge: " << v1 << "-" << v2 << " at " << c << std::endl; + std::cerr << "a: " << face_a->containsPointInProjection(c) << " b: " << face_b->containsPointInProjection(c) << std::endl; + std::cerr << "face_a->containsPointInProjection(c): " << face_a->containsPointInProjection(c) << std::endl; + std::cerr << "face_b->containsPointInProjection(c): " << face_b->containsPointInProjection(c) << std::endl; +#endif + + if (face_a->containsPointInProjection(c) && face_b->containsPointInProjection(c)) { +#if defined(CARVE_DEBUG) + std::cerr << "adding edge: " << v1 << "-" << v2 << std::endl; +#if defined(DEBUG_DRAW_FACE_EDGES) + HOOK(drawEdge(v1, v2, .5, .5, .5, 1, .5, .5, .5, 1, 2.0);); +#endif +#endif + // record the edge, with class information. + if (v1 > v2) std::swap(v1, v2); + eclass[ordered_edge(v1, v2)] = EC2(EDGE_ON, EDGE_ON); + data.face_split_edges[face_a].insert(std::make_pair(v1, v2)); + data.face_split_edges[face_b].insert(std::make_pair(v1, v2)); + } + } + } + } + } + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + { + V2Set edges; + for (detail::FV2SMap::const_iterator i = data.face_split_edges.begin(); i != data.face_split_edges.end(); ++i) { + edges.insert((*i).second.begin(), (*i).second.end()); + } + + detail::VSet vertices; + for (V2Set::const_iterator i = edges.begin(); i != edges.end(); ++i) { + vertices.insert((*i).first); + vertices.insert((*i).second); + } + + carve::line::PolylineSet intersection_graph; + intersection_graph.vertices.resize(vertices.size()); + std::map vmap; + + size_t j = 0; + for (detail::VSet::const_iterator i = vertices.begin(); i != vertices.end(); ++i) { + intersection_graph.vertices[j].v = (*i)->v; + vmap[(*i)] = j++; + } + + for (V2Set::const_iterator i = edges.begin(); i != edges.end(); ++i) { + size_t line[2]; + line[0] = vmap[(*i).first]; + line[1] = vmap[(*i).second]; + intersection_graph.addPolyline(false, line, line + 2); + } + + std::string out("/tmp/intersection-edges.ply"); + ::writePLY(out, &intersection_graph, true); + } +#endif +} + + + +/** + * + * + * @param fll + */ +static void checkFaceLoopIntegrity(carve::csg::FaceLoopList &fll) { + static carve::TimingName FUNC_NAME("CSG::checkFaceLoopIntegrity()"); + carve::TimingBlock block(FUNC_NAME); + + std::unordered_map counts; + for (carve::csg::FaceLoop *fl = fll.head; fl; fl = fl->next) { + std::vector &loop = (fl->vertices); + const poly_t::vertex_t *v1, *v2; + v1 = loop[loop.size() - 1]; + for (unsigned i = 0; i < loop.size(); ++i) { + v2 = loop[i]; + if (v1 < v2) { + counts[std::make_pair(v1, v2)]++; + } else { + counts[std::make_pair(v2, v1)]--; + } + v1 = v2; + } + } + for (std::unordered_map::const_iterator + x = counts.begin(), xe = counts.end(); x != xe; ++x) { + if ((*x).second) { + std::cerr << "FACE LOOP ERROR: " << (*x).first.first << "-" << (*x).first.second << " : " << (*x).second << std::endl; + } + } +} + + + +/** + * + * + * @param a + * @param b + * @param vclass + * @param eclass + * @param a_face_loops + * @param b_face_loops + * @param a_edge_count + * @param b_edge_count + * @param hooks + */ +void carve::csg::CSG::calc(const poly_t *a, + const poly_t *b, + carve::csg::VertexClassification &vclass, + carve::csg::EdgeClassification &eclass, + carve::csg::FaceLoopList &a_face_loops, + carve::csg::FaceLoopList &b_face_loops, + size_t &a_edge_count, + size_t &b_edge_count) { + detail::Data data; + +#if defined(CARVE_DEBUG) + std::cerr << "init" << std::endl; +#endif + init(); + + generateIntersections(a, b); + +#if defined(CARVE_DEBUG) + std::cerr << "intersectingFacePairs" << std::endl; +#endif + intersectingFacePairs(data); + +#if defined(CARVE_DEBUG) + std::cerr << "emap:" << std::endl; + map_histogram(std::cerr, data.emap); + std::cerr << "fmap:" << std::endl; + map_histogram(std::cerr, data.fmap); + std::cerr << "fmap_rev:" << std::endl; + map_histogram(std::cerr, data.fmap_rev); +#endif + + // std::cerr << "removeCoplanarFaces" << std::endl; + // fp_intersections.removeCoplanarFaces(); + +#if defined(CARVE_DEBUG) && defined(DEBUG_DRAW_OCTREE) + HOOK(drawOctree(a->octree);); + HOOK(drawOctree(b->octree);); +#endif + +#if defined(CARVE_DEBUG) + std::cerr << "divideEdges" << std::endl; +#endif + // divideEdges(a->edges, b, data); + // divideEdges(b->edges, a, data); + divideIntersectedEdges(data); + +#if defined(CARVE_DEBUG) + std::cerr << "makeFaceEdges" << std::endl; +#endif + // makeFaceEdges(data.face_split_edges, eclass, data.fmap, data.fmap_rev); + makeFaceEdges(eclass, data); + +#if defined(CARVE_DEBUG) + std::cerr << "generateFaceLoops" << std::endl; +#endif + a_edge_count = generateFaceLoops(a, data, a_face_loops); + b_edge_count = generateFaceLoops(b, data, b_face_loops); + +#if defined(CARVE_DEBUG) + std::cerr << "generated " << a_edge_count << " edges for poly a" << std::endl; + std::cerr << "generated " << b_edge_count << " edges for poly b" << std::endl; +#endif + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + { + std::string out("/tmp/a_split.ply"); + writePLY(out, faceLoopsToPolyhedron(a_face_loops), false); + } + { + std::string out("/tmp/b_split.ply"); + writePLY(out, faceLoopsToPolyhedron(b_face_loops), false); + } +#endif + + checkFaceLoopIntegrity(a_face_loops); + checkFaceLoopIntegrity(b_face_loops); + +#if defined(CARVE_DEBUG) + std::cerr << "classify" << std::endl; +#endif + // initialize some classification information. + for (std::vector::const_iterator + i = a->vertices.begin(), e = a->vertices.end(); i != e; ++i) { + vclass[map_vertex(data.vmap, &(*i))].cls[0] = POINT_ON; + } + for (std::vector::const_iterator + i = b->vertices.begin(), e = b->vertices.end(); i != e; ++i) { + vclass[map_vertex(data.vmap, &(*i))].cls[1] = POINT_ON; + } + for (VertexIntersections::const_iterator + i = vertex_intersections.begin(), e = vertex_intersections.end(); i != e; ++i) { + vclass[(*i).first] = PC2(POINT_ON, POINT_ON); + } + +#if defined(CARVE_DEBUG) + std::cerr << data.divided_edges.size() << " edges are split" << std::endl; + std::cerr << data.face_split_edges.size() << " faces are split" << std::endl; + + std::cerr << "poly a: " << a_face_loops.size() << " face loops" << std::endl; + std::cerr << "poly b: " << b_face_loops.size() << " face loops" << std::endl; +#endif + + // std::cerr << "OCTREE A:" << std::endl; + // dump_octree_stats(a->octree.root, 0); + // std::cerr << "OCTREE B:" << std::endl; + // dump_octree_stats(b->octree.root, 0); +} + + + +/** + * + * + * @param shared_edges + * @param result_list + * @param shared_edge_ptr + */ +void returnSharedEdges(carve::csg::V2Set &shared_edges, + std::list &result_list, + carve::csg::V2Set *shared_edge_ptr) { + // need to convert shared edges to point into result + typedef std::map remap_type; + remap_type remap; + for (std::list::iterator list_it = + result_list.begin(); list_it != result_list.end(); list_it++) { + poly_t *result = *list_it; + if (result) { + for (std::vector::iterator it = + result->vertices.begin(); it != result->vertices.end(); it++) { + remap.insert(std::make_pair((*it).v, &(*it))); + } + } + } + for (carve::csg::V2Set::iterator it = shared_edges.begin(); + it != shared_edges.end(); it++) { + remap_type::iterator first_it = remap.find(((*it).first)->v); + remap_type::iterator second_it = remap.find(((*it).second)->v); + CARVE_ASSERT(first_it != remap.end() && second_it != remap.end()); + shared_edge_ptr->insert(std::make_pair(first_it->second, second_it->second)); + } +} + + + +/** + * + * + * @param a + * @param b + * @param collector + * @param hooks + * @param shared_edges_ptr + * @param classify_type + * + * @return + */ +poly_t *carve::csg::CSG::compute(const poly_t *a, + const poly_t *b, + carve::csg::CSG::Collector &collector, + carve::csg::V2Set *shared_edges_ptr, + CLASSIFY_TYPE classify_type) { + static carve::TimingName FUNC_NAME("CSG::compute"); + carve::TimingBlock block(FUNC_NAME); + + VertexClassification vclass; + EdgeClassification eclass; + + FLGroupList a_loops_grouped; + FLGroupList b_loops_grouped; + + FaceLoopList a_face_loops; + FaceLoopList b_face_loops; + + size_t a_edge_count; + size_t b_edge_count; + + { + static carve::TimingName FUNC_NAME("CSG::compute - calc()"); + carve::TimingBlock block(FUNC_NAME); + calc(a, b, vclass, eclass,a_face_loops, b_face_loops, a_edge_count, b_edge_count); + } + + detail::LoopEdges a_edge_map; + detail::LoopEdges b_edge_map; + + { + static carve::TimingName FUNC_NAME("CSG::compute - makeEdgeMap()"); + carve::TimingBlock block(FUNC_NAME); + makeEdgeMap(a_face_loops, a_edge_count, a_edge_map); + makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); + + } + + { + static carve::TimingName FUNC_NAME("CSG::compute - sortFaceLoopLists()"); + carve::TimingBlock block(FUNC_NAME); + a_edge_map.sortFaceLoopLists(); + b_edge_map.sortFaceLoopLists(); + } + + V2Set shared_edges; + + { + static carve::TimingName FUNC_NAME("CSG::compute - findSharedEdges()"); + carve::TimingBlock block(FUNC_NAME); + findSharedEdges(a_edge_map, b_edge_map, shared_edges); + } + + { + static carve::TimingName FUNC_NAME("CSG::compute - groupFaceLoops()"); + carve::TimingBlock block(FUNC_NAME); + groupFaceLoops(a_face_loops, a_edge_map, shared_edges, a_loops_grouped); + groupFaceLoops(b_face_loops, b_edge_map, shared_edges, b_loops_grouped); +#if defined(CARVE_DEBUG) + std::cerr << "*** a_loops_grouped.size(): " << a_loops_grouped.size() << std::endl; + std::cerr << "*** b_loops_grouped.size(): " << b_loops_grouped.size() << std::endl; +#endif + } + +#if defined(CARVE_DEBUG) && defined(DEBUG_DRAW_GROUPS) + { + float n = 1.0 / (a_loops_grouped.size() + b_loops_grouped.size() + 1); + float H = 0.0, S = 1.0, V = 1.0; + float r, g, b; + for (FLGroupList::const_iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + carve::colour::HSV2RGB(H, S, V, r, g, b); H += n; + drawFaceLoopList((*i).face_loops, r, g, b, 1.0, r * .5, g * .5, b * .5, 1.0, true); + } + for (FLGroupList::const_iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + carve::colour::HSV2RGB(H, S, V, r, g, b); H += n; + drawFaceLoopList((*i).face_loops, r, g, b, 1.0, r * .5, g * .5, b * .5, 1.0, true); + } + + for (FLGroupList::const_iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + drawFaceLoopListWireframe((*i).face_loops); + } + for (FLGroupList::const_iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + drawFaceLoopListWireframe((*i).face_loops); + } + } +#endif + + switch (classify_type) { + case CLASSIFY_EDGE: + classifyFaceGroupsEdge(shared_edges, + vclass, + a, + a_loops_grouped, + a_edge_map, + b, + b_loops_grouped, + b_edge_map, + collector); + break; + case CLASSIFY_NORMAL: + classifyFaceGroups(shared_edges, + vclass, + a, + a_loops_grouped, + a_edge_map, + b, + b_loops_grouped, + b_edge_map, + collector); + break; + } + + poly_t *result = collector.done(hooks); + if (result != NULL && shared_edges_ptr != NULL) { + std::list result_list; + result_list.push_back(result); + returnSharedEdges(shared_edges, result_list, shared_edges_ptr); + } + return result; +} + + + +/** + * + * + * @param a + * @param b + * @param op + * @param hooks + * @param shared_edges + * @param classify_type + * + * @return + */ +poly_t *carve::csg::CSG::compute(const poly_t *a, + const poly_t *b, + carve::csg::CSG::OP op, + carve::csg::V2Set *shared_edges, + CLASSIFY_TYPE classify_type) { + Collector *coll = makeCollector(op, a, b); + if (!coll) return NULL; + + poly_t *result = compute(a, b, *coll, shared_edges, classify_type); + + delete coll; + + return result; +} + + + +/** + * + * + * @param closed + * @param open + * @param FaceClass + * @param result + * @param hooks + * @param shared_edges_ptr + * + * @return + */ +bool carve::csg::CSG::sliceAndClassify(const poly_t *closed, + const poly_t *open, + std::list > &result, + carve::csg::V2Set *shared_edges_ptr) { + if (closed->hasOpenManifolds()) return false; + carve::csg::VertexClassification vclass; + carve::csg::EdgeClassification eclass; + + carve::csg::FLGroupList a_loops_grouped; + carve::csg::FLGroupList b_loops_grouped; + + carve::csg::FaceLoopList a_face_loops; + carve::csg::FaceLoopList b_face_loops; + + size_t a_edge_count; + size_t b_edge_count; + + calc(closed, open, vclass, eclass,a_face_loops, b_face_loops, a_edge_count, b_edge_count); + + detail::LoopEdges a_edge_map; + detail::LoopEdges b_edge_map; + + makeEdgeMap(a_face_loops, a_edge_count, a_edge_map); + makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); + + carve::csg::V2Set shared_edges; + + findSharedEdges(a_edge_map, b_edge_map, shared_edges); + + groupFaceLoops(a_face_loops, a_edge_map, shared_edges, a_loops_grouped); + groupFaceLoops(b_face_loops, b_edge_map, shared_edges, b_loops_grouped); + + halfClassifyFaceGroups(shared_edges, + vclass, + closed, + a_loops_grouped, + a_edge_map, + open, + b_loops_grouped, + b_edge_map, + result); + + if (shared_edges_ptr != NULL) { + std::list result_list; + for (std::list >::iterator it = result.begin(); it != result.end(); it++) { + result_list.push_back(it->second); + } + returnSharedEdges(shared_edges, result_list, shared_edges_ptr); + } + return true; +} + + + +/** + * + * + * @param a + * @param b + * @param a_sliced + * @param b_sliced + * @param hooks + * @param shared_edges_ptr + */ +void carve::csg::CSG::slice(const poly_t *a, + const poly_t *b, + std::list &a_sliced, + std::list &b_sliced, + carve::csg::V2Set *shared_edges_ptr) { + carve::csg::VertexClassification vclass; + carve::csg::EdgeClassification eclass; + + carve::csg::FLGroupList a_loops_grouped; + carve::csg::FLGroupList b_loops_grouped; + + carve::csg::FaceLoopList a_face_loops; + carve::csg::FaceLoopList b_face_loops; + + size_t a_edge_count; + size_t b_edge_count; + + calc(a, b, vclass, eclass,a_face_loops, b_face_loops, a_edge_count, b_edge_count); + + detail::LoopEdges a_edge_map; + detail::LoopEdges b_edge_map; + + makeEdgeMap(a_face_loops, a_edge_count, a_edge_map); + makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); + + carve::csg::V2Set shared_edges; + + findSharedEdges(a_edge_map, b_edge_map, shared_edges); + + groupFaceLoops(a_face_loops, a_edge_map, shared_edges, a_loops_grouped); + groupFaceLoops(b_face_loops, b_edge_map, shared_edges, b_loops_grouped); + + for (carve::csg::FLGroupList::iterator + i = a_loops_grouped.begin(), e = a_loops_grouped.end(); + i != e; ++i) { + Collector *all = makeCollector(ALL, a, b); + all->collect(&*i, hooks); + a_sliced.push_back(all->done(hooks)); + + delete all; + } + + for (carve::csg::FLGroupList::iterator + i = b_loops_grouped.begin(), e = b_loops_grouped.end(); + i != e; ++i) { + Collector *all = makeCollector(ALL, a, b); + all->collect(&*i, hooks); + b_sliced.push_back(all->done(hooks)); + + delete all; + } + if (shared_edges_ptr != NULL) { + std::list result_list; + result_list.insert(result_list.end(), a_sliced.begin(), a_sliced.end()); + result_list.insert(result_list.end(), b_sliced.begin(), b_sliced.end()); + returnSharedEdges(shared_edges, result_list, shared_edges_ptr); + } +} + + + +/** + * + * + */ +void carve::csg::CSG::init() { + intersections.clear(); + vertex_intersections.clear(); + vertex_pool.reset(); +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_classify_common.hpp b/thirdparty/carve-1.4.0/lib/intersect_classify_common.hpp new file mode 100644 index 00000000..59face22 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_classify_common.hpp @@ -0,0 +1,46 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +#include "intersect_common.hpp" + +template +static int is_same(const std::vector &a, + const std::vector &b) { + if (a.size() != b.size()) return false; + + const size_t S = a.size(); + size_t i, j, p; + + for (p = 0; p < S; ++p) { + if (a[0] == b[p]) break; + } + if (p == S) return 0; + + for (i = 1, j = p + 1; j < S; ++i, ++j) if (a[i] != b[j]) goto not_fwd; + for ( j = 0; i < S; ++i, ++j) if (a[i] != b[j]) goto not_fwd; + return +1; + +not_fwd: + for (i = 1, j = p - 1; j != (size_t)-1; ++i, --j) if (a[i] != b[j]) goto not_rev; + for ( j = S - 1; i < S; ++i, --j) if (a[i] != b[j]) goto not_rev; + return -1; + +not_rev: + return 0; +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_classify_common_impl.hpp b/thirdparty/carve-1.4.0/lib/intersect_classify_common_impl.hpp new file mode 100644 index 00000000..4df7548b --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_classify_common_impl.hpp @@ -0,0 +1,357 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + +namespace carve { + namespace csg { + typedef std::unordered_map< + const carve::poly::Polyhedron::vertex_t *, + std::list, + carve::poly::hash_vertex_ptr> GroupLookup; + + + inline bool isSameFwd(const V2Set &a, const V2Set &b) { + if (a.size() != b.size()) return false; + for (V2Set::const_iterator i = a.begin(), e = a.end(); i != e; ++i) { + if (b.find((*i)) == b.end()) return false; + } + return true; + } + + inline bool isSameRev(const V2Set &a, const V2Set &b) { + if (a.size() != b.size()) return false; + for (V2Set::const_iterator i = a.begin(), e = a.end(); i != e; ++i) { + if (b.find(std::make_pair((*i).second, (*i).first)) == b.end()) return false; + } + return true; + } + + + static void performClassifySimpleOnFaceGroups(FLGroupList &a_groups, + FLGroupList &b_groups, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b, + CSG::Collector &collector, + CSG::Hooks &hooks) { + // Simple ON faces groups are face groups that consist of a single + // face, and which have copy in both inputs. These are trivially ON. + // This has the side effect of short circuiting the case where the + // two inputs share geometry. + GroupLookup a_map, b_map; + + // First, hash FaceLoopGroups with one FaceLoop based upon their + // minimum vertex pointer - this pointer must be shared between + // FaceLoops that this test catches. + for (FLGroupList::iterator i = a_groups.begin(); i != a_groups.end(); ++i) { + if ((*i).face_loops.size() != 1) continue; + FaceLoop *f = (*i).face_loops.head; + const carve::poly::Polyhedron::vertex_t *v = *std::min_element(f->vertices.begin(), f->vertices.end()); + a_map[v].push_back(i); + } + + for (FLGroupList::iterator i = b_groups.begin(); i != b_groups.end(); ++i) { + if ((*i).face_loops.size() != 1) continue; + FaceLoop *f = (*i).face_loops.head; + const carve::poly::Polyhedron::vertex_t *v = *std::min_element(f->vertices.begin(), f->vertices.end()); + if (a_map.find(v) != a_map.end()) { + b_map[v].push_back(i); + } + } + + // Then, iterate through the FaceLoops hashed in the first map, and + // find candidate matches in the second map. + for (GroupLookup::iterator j = b_map.begin(), je = b_map.end(); j != je; ++j) { + const carve::poly::Polyhedron::vertex_t *v = (*j).first; + GroupLookup::iterator i = a_map.find(v); + + for (std::list::iterator bi = (*j).second.begin(), be = (*j).second.end(); bi != be;) { + FLGroupList::iterator b(*bi); + FaceLoop *f_b = (*b).face_loops.head; + + // For each candidate match pair, see if their vertex pointers + // are the same, allowing for rotation and inversion. + for (std::list::iterator ai = (*i).second.begin(), ae = (*i).second.end(); ai != ae; ++ai) { + FLGroupList::iterator a(*ai); + FaceLoop *f_a = (*a).face_loops.head; + + int s = is_same(f_a->vertices, f_b->vertices); + if (!s) continue; + + // if they are ordered in the same direction, then they are + // oriented out, otherwise oriented in. + FaceClass fc = s == +1 ? FACE_ON_ORIENT_OUT : FACE_ON_ORIENT_IN; + + (*a).classification.push_back(ClassificationInfo(poly_b, -1, fc)); + (*b).classification.push_back(ClassificationInfo(poly_a, -1, fc)); + + collector.collect(&*a, hooks); + collector.collect(&*b, hooks); + + a_groups.erase(a); + b_groups.erase(b); + + (*i).second.erase(ai); + bi = (*j).second.erase(bi); + + goto done; + } + ++bi; + done:; + } + } + } + + template + static void performClassifyEasyFaceGroups(FLGroupList &group, + const carve::poly::Polyhedron *poly_a, + VertexClassification &vclass, + const CLASSIFIER &classifier, + CSG::Collector &collector, + CSG::Hooks &hooks) { + + for (FLGroupList::iterator i = group.begin(); i != group.end();) { +#if defined(CARVE_DEBUG) + std::cerr << "............group " << &(*i) << std::endl; +#endif + FaceLoopGroup &grp = (*i); + FaceLoopList &curr = (grp.face_loops); + FaceClass fc; + + for (FaceLoop *f = curr.head; f; f = f->next) { + for (size_t j = 0; j < f->vertices.size(); ++j) { + if (!classifier.pointOn(vclass, f, j)) { + PointClass pc = poly_a->containsVertex(f->vertices[j]->v); + if (pc == POINT_IN || pc == POINT_OUT) { + classifier.explain(f, j, pc); + } + if (pc == POINT_IN) { fc = FACE_IN; goto accept; } + if (pc == POINT_OUT) { fc = FACE_OUT; goto accept; } + } + } + } + ++i; + continue; + accept: { + grp.classification.push_back(ClassificationInfo(poly_a, -1, fc)); + collector.collect(&grp, hooks); + i = group.erase(i); + } + } + } + + + template + static void performClassifyHardFaceGroups(FLGroupList &group, + const carve::poly::Polyhedron *poly_a, + const CLASSIFIER &classifier, + CSG::Collector &collector, + CSG::Hooks &hooks) { + for (FLGroupList::iterator + i = group.begin(); i != group.end();) { + int n_in = 0, n_out = 0, n_on = 0; + FaceLoopGroup &grp = (*i); + FaceLoopList &curr = (grp.face_loops); + V2Set &perim = ((*i).perimeter); + FaceClass fc; + + for (FaceLoop *f = curr.head; f; f = f->next) { + const carve::poly::Polyhedron::vertex_t *v1, *v2; + v1 = f->vertices.back(); + for (size_t j = 0; j < f->vertices.size(); ++j) { + v2 = f->vertices[j]; + if (v1 < v2 && perim.find(std::make_pair(v1, v2)) == perim.end()) { + carve::geom3d::Vector c = (v1->v + v2->v) / 2.0; + + PointClass pc = poly_a->containsVertex(c); + + switch (pc) { + case POINT_IN: n_in++; break; + case POINT_OUT: n_out++; break; + case POINT_ON: n_on++; break; + default: break; // does not happen. + } + } + v1 = v2; + } + } + +#if defined(CARVE_DEBUG) + std::cerr << ">>> n_in: " << n_in << " n_on: " << n_on << " n_out: " << n_out << std::endl; +#endif + + if (!n_in && !n_out) { + ++i; + continue; + } + + if (n_in) fc = FACE_IN; + if (n_out) fc = FACE_OUT; + + grp.classification.push_back(ClassificationInfo(poly_a, -1, fc)); + collector.collect(&grp, hooks); + i = group.erase(i); + } + } + + template + void performFaceLoopWork(const carve::poly::Polyhedron *poly_a, + FLGroupList &b_loops_grouped, + const CLASSIFIER &classifier, + CSG::Collector &collector, + CSG::Hooks &hooks) { + for (FLGroupList::iterator i = b_loops_grouped.begin(), e = b_loops_grouped.end(); i != e;) { + FaceClass fc; + + if (classifier.faceLoopSanityChecker(*i)) { + std::cerr << "UNEXPECTED face loop with size != 1." << std::endl; + ++i; + continue; + } + assert((*i).face_loops.size() == 1); + + FaceLoop *fla = (*i).face_loops.head; + + const carve::poly::Polyhedron::face_t *f = (fla->orig_face); + std::vector &loop = (fla->vertices); + std::vector proj; + proj.reserve(loop.size()); + for (unsigned j = 0; j < loop.size(); ++j) { + proj.push_back(carve::poly::face::project(f, loop[j]->v)); + } + carve::geom2d::P2 pv; + if (!carve::geom2d::pickContainedPoint(proj, pv)) { + CARVE_FAIL("Failed"); + } + carve::geom3d::Vector v = carve::poly::face::unproject(f, pv); + + const carve::poly::Polyhedron::face_t *hit_face; + PointClass pc = poly_a->containsVertex(v, &hit_face); + switch (pc) { + case POINT_IN: fc = FACE_IN; break; + case POINT_OUT: fc = FACE_OUT; break; + case POINT_ON: { + double d = carve::geom::distance(hit_face->plane_eqn, v); +#if defined(CARVE_DEBUG) + std::cerr << "d = " << d << std::endl; +#endif + fc = d < 0 ? FACE_IN : FACE_OUT; + } + default: + CARVE_FAIL("unhandled switch case -- should not happen"); + } +#if defined(CARVE_DEBUG) + std::cerr << "CLASS: " << (fc == FACE_IN ? "FACE_IN" : "FACE_OUT" ) << std::endl; +#endif + + (*i).classification.push_back(ClassificationInfo(poly_a, -1, fc)); + collector.collect(&*i, hooks); + i = b_loops_grouped.erase(i); + } + + } + + template + void performClassifyFaceGroups(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b, + const CLASSIFIER &classifier, + CSG::Collector &collector, + CSG::Hooks &hooks) { + + classifier.classifySimple(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b); + classifier.classifyEasy(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b); + classifier.classifyHard(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b); + + { + GroupLookup a_map; + FLGroupList::iterator i, j; + FaceClass fc; + + for (i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + V2Set::iterator it_end = (*i).perimeter.end(); + V2Set::iterator it_begin = (*i).perimeter.begin(); + + if(it_begin != it_end) { + a_map[std::min_element(it_begin, it_end)->first].push_back(i); + } + } + + for (i = b_loops_grouped.begin(); i != b_loops_grouped.end();) { + GroupLookup::iterator a = a_map.end(); + + V2Set::iterator it_end = (*i).perimeter.end(); + V2Set::iterator it_begin = (*i).perimeter.begin(); + + if(it_begin != it_end) { + a = a_map.find(std::min_element(it_begin, it_end)->first); + } + + if (a == a_map.end()) { ++i; continue; } + + for (std::list::iterator ji = (*a).second.begin(), je = (*a).second.end(); ji != je; ++ji) { + j = (*ji); + if (isSameFwd((*i).perimeter, (*j).perimeter)) { +#if defined(CARVE_DEBUG) + std::cerr << "SAME FWD PAIR" << std::endl; +#endif + fc = FACE_ON_ORIENT_OUT; + goto face_pair; + } else if (isSameRev((*i).perimeter, (*j).perimeter)) { +#if defined(CARVE_DEBUG) + std::cerr << "SAME REV PAIR" << std::endl; +#endif + fc = FACE_ON_ORIENT_IN; + goto face_pair; + } + } + ++i; + continue; + + face_pair: { + V2Set::iterator it_end = (*j).perimeter.end(); + V2Set::iterator it_begin = (*j).perimeter.begin(); + + if(it_begin != it_end) { + a_map[std::min_element(it_begin, it_end)->first].remove(j); + } + + (*i).classification.push_back(ClassificationInfo(poly_b, -1, fc)); + (*j).classification.push_back(ClassificationInfo(poly_a, -1, fc)); + + collector.collect(&*i, hooks); + collector.collect(&*j, hooks); + + j = a_loops_grouped.erase(j); + i = b_loops_grouped.erase(i); + } + } + } + + // XXX: this may leave some face groups that are IN or OUT, and + // consist of a single face loop. + classifier.postRemovalCheck(a_loops_grouped, b_loops_grouped); + + classifier.faceLoopWork(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b); + + classifier.finish(a_loops_grouped, b_loops_grouped); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_classify_edge.cpp b/thirdparty/carve-1.4.0/lib/intersect_classify_edge.cpp new file mode 100644 index 00000000..e1aa720f --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_classify_edge.cpp @@ -0,0 +1,820 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#if defined(HAVE_STDINT_H) +#include +#endif + +#include +#include +#include + +#include +#include +#include + +#include + +#include "csg_detail.hpp" + +#include "intersect_common.hpp" +#include "intersect_classify_common.hpp" + +#define ANGLE_EPSILON 1e-6 + +namespace carve { + namespace csg { + + namespace { + + inline bool single_bit_set(uint32_t v) { + v &= v - 1; + return v == 0; + } + + struct EdgeSurface { + FaceLoop *fwd; + double fwd_ang; + FaceLoop *rev; + double rev_ang; + + EdgeSurface() : fwd(NULL), fwd_ang(0.0), rev(NULL), rev_ang(0.0) { } + }; + + + typedef std::map GrpEdgeSurfMap; + + typedef std::pair ClassificationKey; + + struct ClassificationData { + uint32_t class_bits : 5; + uint32_t class_decided : 1; + + int c[5]; + + ClassificationData() { + class_bits = FACE_ANY_BIT; + class_decided = 0; + memset(c, 0, sizeof(c)); + } + }; + + struct hash_classification { + size_t operator()(const ClassificationKey &f) const { + return (size_t)f.first ^ (size_t)f.second; + } + }; + + typedef std::unordered_map Classification; + + + struct hash_group_ptr { + size_t operator()(const FaceLoopGroup * const &f) const { + return (size_t)f; + } + }; + + + typedef std::pair PerimKey; + + struct hash_perim_key { + size_t operator()(const PerimKey &v) const { + return (size_t)v.first ^ (size_t)v.second; + } + }; + + typedef std::unordered_map, + std::unordered_set, + hash_perim_key> PerimMap; + + + + struct hash_group_pair { + size_t operator()(const std::pair &v) const { + return (size_t)v.first ^ (size_t)v.second; + } + }; + + typedef std::unordered_map, hash_group_pair>, + hash_group_ptr> CandidateOnMap; + + + + static inline void remove(const carve::poly::Polyhedron::vertex_t *a, + const carve::poly::Polyhedron::vertex_t *b, + carve::csg::detail::VVSMap &shared_edge_graph) { + carve::csg::detail::VVSMap::iterator i = shared_edge_graph.find(a); + CARVE_ASSERT(i != shared_edge_graph.end()); + size_t n = (*i).second.erase(b); + CARVE_ASSERT(n == 1); + if ((*i).second.size() == 0) shared_edge_graph.erase(i); + } + + + + static inline void remove(V2 edge, + carve::csg::detail::VVSMap &shared_edge_graph) { + remove(edge.first, edge.second, shared_edge_graph); + remove(edge.second, edge.first, shared_edge_graph); + } + + + + static void walkGraphSegment(carve::csg::detail::VVSMap &shared_edge_graph, + const carve::csg::detail::VSet &branch_points, + V2 initial, + const carve::csg::detail::LoopEdges &a_edge_map, + const carve::csg::detail::LoopEdges &b_edge_map, + std::list &out) { + V2 curr; + curr = initial; + bool closed = false; + + out.clear(); + while (1) { + // walk forward. + out.push_back(curr); + remove(curr, shared_edge_graph); + + if (curr.second == initial.first) { closed = true; break; } + if (branch_points.find(curr.second) != branch_points.end()) break; + carve::csg::detail::VVSMap::const_iterator o = shared_edge_graph.find(curr.second); + if (o == shared_edge_graph.end()) break; + CARVE_ASSERT((*o).second.size() == 1); + curr.first = curr.second; + curr.second = *((*o).second.begin()); + // test here that the set of incident groups hasn't changed. + } + + if (!closed) { + // walk backward. + curr = initial; + while (1) { + if (branch_points.find(curr.first) != branch_points.end()) break; + carve::csg::detail::VVSMap::const_iterator o = shared_edge_graph.find(curr.first); + if (o == shared_edge_graph.end()) break; + curr.second = curr.first; + curr.first = *((*o).second.begin()); + // test here that the set of incident groups hasn't changed. + + out.push_front(curr); + remove(curr, shared_edge_graph); + } + } + +#if defined(CARVE_DEBUG) + std::cerr << "intersection segment: " << out.size() << " edges." << std::endl; +#if defined(DEBUG_DRAW_INTERSECTION_LINE) + { + static float H = 0.0, S = 1.0, V = 1.0; + float r, g, b; + + H = fmod((H + .37), 1.0); + S = 0.5 + fmod((S - 0.37), 0.5); + carve::colour::HSV2RGB(H, S, V, r, g, b); + + if (out.size() > 1) { + drawEdges(out.begin(), ++out.begin(), + 0.0, 0.0, 0.0, 1.0, + r, g, b, 1.0, + 3.0); + drawEdges(++out.begin(), --out.end(), + r, g, b, 1.0, + r, g, b, 1.0, + 3.0); + drawEdges(--out.end(), out.end(), + r, g, b, 1.0, + 1.0, 1.0, 1.0, 1.0, + 3.0); + } else { + drawEdges(out.begin(), out.end(), + r, g, b, 1.0, + r, g, b, 1.0, + 3.0); + } + } +#endif +#endif + } + + + + static carve::geom3d::Vector perpendicular(const carve::geom3d::Vector &v) { + if (fabs(v.x) < fabs(v.y)) { + if (fabs(v.x) < fabs(v.z)) { + return cross(v, carve::geom::VECTOR(1.0, 0.0, 0.0)).normalized(); + } else { + return cross(v, carve::geom::VECTOR(0.0, 0.0, 1.0)).normalized(); + } + } else { + if (fabs(v.y) < fabs(v.z)) { + return cross(v, carve::geom::VECTOR(0.0, 1.0, 0.0)).normalized(); + } else { + return cross(v, carve::geom::VECTOR(1.0, 0.0, 1.0)).normalized(); + } + } + } + + + + static void classifyAB(const GrpEdgeSurfMap &a_edge_surfaces, + const GrpEdgeSurfMap &b_edge_surfaces, + Classification &classifications) { + // two faces in the a surface + for (GrpEdgeSurfMap::const_iterator ib = b_edge_surfaces.begin(), eb = b_edge_surfaces.end(); ib != eb; ++ib) { + + if ((*ib).second.fwd) { + FaceLoopGroup *b_grp = ((*ib).second.fwd->group); + + for (GrpEdgeSurfMap::const_iterator ia = a_edge_surfaces.begin(), ea = a_edge_surfaces.end(); ia != ea; ++ia) { + + if ((*ia).second.fwd && (*ia).second.rev) { + int a_gid = (*ia).first; + + ClassificationData &data = classifications[std::make_pair(b_grp, a_gid)]; + if (data.class_decided) continue; + + // an angle between (*ia).fwd_ang and (*ia).rev_ang is outside/above group a. + FaceClass fc; + + if (fabs((*ib).second.fwd_ang - (*ia).second.fwd_ang) < ANGLE_EPSILON) { + fc = FACE_ON_ORIENT_OUT; + } else if (fabs((*ib).second.fwd_ang - (*ia).second.rev_ang) < ANGLE_EPSILON) { + fc = FACE_ON_ORIENT_IN; + } else { + double a1 = (*ia).second.fwd_ang; + double a2 = (*ia).second.rev_ang; + if (a1 < a2) { + if (a1 < (*ib).second.fwd_ang && (*ib).second.fwd_ang < a2) { + fc = FACE_IN; + } else { + fc = FACE_OUT; + } + } else { + if (a2 < (*ib).second.fwd_ang && (*ib).second.fwd_ang < a1) { + fc = FACE_OUT; + } else { + fc = FACE_IN; + } + } + } + data.c[fc + 2]++; + } + } + } + + if ((*ib).second.rev) { + FaceLoopGroup *b_grp = ((*ib).second.rev->group); + + for (GrpEdgeSurfMap::const_iterator ia = a_edge_surfaces.begin(), ea = a_edge_surfaces.end(); ia != ea; ++ia) { + + if ((*ia).second.fwd && (*ia).second.rev) { + int a_gid = (*ia).first; + + ClassificationData &data = (classifications[std::make_pair(b_grp, a_gid)]); + if (data.class_decided) continue; + + // an angle between (*ia).fwd_ang and (*ia).rev_ang is outside/above group a. + FaceClass fc; + + if (fabs((*ib).second.rev_ang - (*ia).second.fwd_ang) < ANGLE_EPSILON) { + fc = FACE_ON_ORIENT_IN; + } else if (fabs((*ib).second.rev_ang - (*ia).second.rev_ang) < ANGLE_EPSILON) { + fc = FACE_ON_ORIENT_OUT; + } else { + double a1 = (*ia).second.fwd_ang; + double a2 = (*ia).second.rev_ang; + if (a1 < a2) { + if (a1 < (*ib).second.rev_ang && (*ib).second.rev_ang < a2) { + fc = FACE_IN; + } else { + fc = FACE_OUT; + } + } else { + if (a2 < (*ib).second.rev_ang && (*ib).second.rev_ang < a1) { + fc = FACE_OUT; + } else { + fc = FACE_IN; + } + } + } + data.c[fc + 2]++; + } + } + } + } + } + + + static bool processForwardEdgeSurfaces(GrpEdgeSurfMap &edge_surfaces, + const std::list &fwd, + const carve::geom3d::Vector &edge_vector, + const carve::geom3d::Vector &base_vector) { + for (std::list::const_iterator i = fwd.begin(), e = fwd.end(); i != e; ++i) { + EdgeSurface &es = (edge_surfaces[(*i)->orig_face->manifold_id]); + if (es.fwd != NULL) return false; + es.fwd = (*i); + es.fwd_ang = carve::geom3d::antiClockwiseAngle((*i)->orig_face->plane_eqn.N, base_vector, edge_vector); + } + return true; + } + + static bool processReverseEdgeSurfaces(GrpEdgeSurfMap &edge_surfaces, + const std::list &rev, + const carve::geom3d::Vector &edge_vector, + const carve::geom3d::Vector &base_vector) { + for (std::list::const_iterator i = rev.begin(), e = rev.end(); i != e; ++i) { + EdgeSurface &es = (edge_surfaces[(*i)->orig_face->manifold_id]); + if (es.rev != NULL) return false; + es.rev = (*i); + es.rev_ang = carve::geom3d::antiClockwiseAngle(-(*i)->orig_face->plane_eqn.N, base_vector, edge_vector); + } + return true; + } + + + + static void processOneEdge(const V2 &edge, + const carve::csg::detail::LoopEdges &a_edge_map, + const carve::csg::detail::LoopEdges &b_edge_map, + Classification &a_classification, + Classification &b_classification) { + GrpEdgeSurfMap a_edge_surfaces; + GrpEdgeSurfMap b_edge_surfaces; + + carve::geom3d::Vector edge_vector = (edge.second->v - edge.first->v).normalized(); + carve::geom3d::Vector base_vector = perpendicular(edge_vector); + + carve::csg::detail::LoopEdges::const_iterator ae_f = a_edge_map.find(edge); + carve::csg::detail::LoopEdges::const_iterator ae_r = a_edge_map.find(flip(edge)); + CARVE_ASSERT(ae_f != a_edge_map.end() || ae_r != a_edge_map.end()); + + carve::csg::detail::LoopEdges::const_iterator be_f = b_edge_map.find(edge); + carve::csg::detail::LoopEdges::const_iterator be_r = b_edge_map.find(flip(edge)); + CARVE_ASSERT(be_f != b_edge_map.end() || be_r != b_edge_map.end()); + + if (ae_f != a_edge_map.end() && !processForwardEdgeSurfaces(a_edge_surfaces, (*ae_f).second, edge_vector, base_vector)) return; + if (ae_r != a_edge_map.end() && !processReverseEdgeSurfaces(a_edge_surfaces, (*ae_r).second, edge_vector, base_vector)) return; + if (be_f != b_edge_map.end() && !processForwardEdgeSurfaces(b_edge_surfaces, (*be_f).second, edge_vector, base_vector)) return; + if (be_r != b_edge_map.end() && !processReverseEdgeSurfaces(b_edge_surfaces, (*be_r).second, edge_vector, base_vector)) return; + + classifyAB(a_edge_surfaces, b_edge_surfaces, b_classification); + classifyAB(b_edge_surfaces, a_edge_surfaces, a_classification); + } + + + + static void traceIntersectionGraph(const V2Set &shared_edges, + const FLGroupList &a_loops_grouped, + const FLGroupList &b_loops_grouped, + const carve::csg::detail::LoopEdges &a_edge_map, + const carve::csg::detail::LoopEdges &b_edge_map) { + + carve::csg::detail::VVSMap shared_edge_graph; + carve::csg::detail::VSet branch_points; + + // first, make the intersection graph. + for (V2Set::const_iterator i = shared_edges.begin(); i != shared_edges.end(); ++i) { + const V2Set::key_type &edge = (*i); + carve::csg::detail::VVSMap::mapped_type &out = (shared_edge_graph[edge.first]); + out.insert(edge.second); + if (out.size() == 3) branch_points.insert(edge.first); + +#if defined(CARVE_DEBUG) && defined(DEBUG_DRAW_INTERSECTION_LINE) + HOOK(drawEdge(edge.first, edge.second, 1, 1, 1, 1, 1, 1, 1, 1, 1.0);); +#endif + } +#if defined(CARVE_DEBUG) + std::cerr << "graph nodes: " << shared_edge_graph.size() << std::endl; + std::cerr << "branch nodes: " << branch_points.size() << std::endl; +#endif + + std::list out; + while (shared_edge_graph.size()) { + carve::csg::detail::VVSMap::iterator i = shared_edge_graph.begin(); + const carve::poly::Polyhedron::vertex_t *v1 = (*i).first; + const carve::poly::Polyhedron::vertex_t *v2 = *((*i).second.begin()); + walkGraphSegment(shared_edge_graph, branch_points, V2(v1, v2), a_edge_map, b_edge_map, out); + } + } + + void hashByPerimeter(FLGroupList &grp, PerimMap &perim_map) { + for (FLGroupList::iterator i = grp.begin(); i != grp.end(); ++i) { + size_t perim_size = (*i).perimeter.size(); + // can be the case for non intersecting groups. (and groups that intersect at a point?) + if (!perim_size) continue; + const carve::poly::Polyhedron::vertex_t *perim_min = std::min_element((*i).perimeter.begin(), (*i).perimeter.end())->first; + perim_map[std::make_pair(perim_size, perim_min)].insert(&(*i)); + } + } + + + + bool same_edge_set_fwd(const V2Set &a, const V2Set &b) { + if (a.size() != b.size()) return false; + for (V2Set::const_iterator i = a.begin(), e = a.end(); i != e; ++i) { + if (b.find(*i) == b.end()) return false; + } + return true; + } + + + + bool same_edge_set_rev(const V2Set &a, const V2Set &b) { + if (a.size() != b.size()) return false; + for (V2Set::const_iterator i = a.begin(), e = a.end(); i != e; ++i) { + if (b.find(std::make_pair((*i).second, (*i).first)) == b.end()) return false; + } + return true; + } + + + + int same_edge_set(const V2Set &a, const V2Set &b) { + if (same_edge_set_fwd(a, b)) return +1; + if (same_edge_set_rev(a, b)) return -1; + return 0; + } + + + + void generateCandidateOnSets(FLGroupList &a_grp, + FLGroupList &b_grp, + CandidateOnMap &candidate_on_map, + Classification &a_classification, + Classification &b_classification) { + PerimMap a_grp_by_perim, b_grp_by_perim; + + hashByPerimeter(a_grp, a_grp_by_perim); + hashByPerimeter(b_grp, b_grp_by_perim); + + for (PerimMap::iterator i = a_grp_by_perim.begin(), ie = a_grp_by_perim.end(); i != ie; ++i) { + PerimMap::iterator j = b_grp_by_perim.find((*i).first); + if (j == b_grp_by_perim.end()) continue; + + for (PerimMap::mapped_type::iterator a = (*i).second.begin(), ae = (*i).second.end(); a != ae; ++a) { + for (PerimMap::mapped_type::iterator b = (*j).second.begin(), be = (*j).second.end(); b != be; ++b) { + int x = same_edge_set((*a)->perimeter, (*b)->perimeter); + if (!x) continue; + candidate_on_map[(*a)].insert(std::make_pair(x, (*b))); + if ((*a)->face_loops.count == 1 && (*b)->face_loops.count == 1) { + uint32_t fcb = x == +1 ? FACE_ON_ORIENT_OUT_BIT : FACE_ON_ORIENT_IN_BIT; + +#if defined(CARVE_DEBUG) + std::cerr << "paired groups: " << (*a) << ", " << (*b) << std::endl; +#endif + + ClassificationData &a_data = a_classification[std::make_pair((*a), (*b)->face_loops.head->orig_face->manifold_id)]; + a_data.class_bits = fcb; a_data.class_decided = 1; + + ClassificationData &b_data = b_classification[std::make_pair((*b), (*a)->face_loops.head->orig_face->manifold_id)]; + b_data.class_bits = fcb; b_data.class_decided = 1; + } + } + } + } + } + + } + + + static inline std::string CODE(const FaceLoopGroup *grp) { + const std::list &cinfo = (grp->classification); + if (cinfo.size() == 0) { + return "?"; + } + + FaceClass fc = FACE_UNCLASSIFIED; + + for (std::list::const_iterator i = grp->classification.begin(), e = grp->classification.end(); i != e; ++i) { + if ((*i).intersected_manifold < 0) { + // classifier only returns global info + fc = (*i).classification; + break; + } + + if ((*i).intersectedManifoldIsClosed()) { + if ((*i).classification == FACE_UNCLASSIFIED) continue; + if (fc == FACE_UNCLASSIFIED) { + fc = (*i).classification; + } else if (fc != (*i).classification) { + return "X"; + } + } + } + if (fc == FACE_IN) return "I"; + if (fc == FACE_ON_ORIENT_IN) return "<"; + if (fc == FACE_ON_ORIENT_OUT) return ">"; + if (fc == FACE_OUT) return "O"; + return "*"; + } + + void CSG::classifyFaceGroupsEdge(const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + CSG::Collector &collector) { + Classification a_classification; + Classification b_classification; + + CandidateOnMap candidate_on_map; + +#if defined(CARVE_DEBUG) + std::cerr << "a input loops (" << a_loops_grouped.size() << "): "; + for (FLGroupList::iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + std::cerr << &*i << " "; + } + std::cerr << std::endl; + std::cerr << "b input loops (" << b_loops_grouped.size() << "): "; + for (FLGroupList::iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + std::cerr << &*i << " "; + } + std::cerr << std::endl; +#endif + +#if defined(DISPLAY_GRP_GRAPH) + // XXX: this is hopelessly inefficient. + std::map > grp_graph_fwd, grp_graph_rev; + { + for (FLGroupList::iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + FaceLoopGroup *src = &(*i); + for (V2Set::const_iterator k = src->perimeter.begin(); k != src->perimeter.end(); ++k) { + V2 fwd = *k; + V2 rev = std::make_pair(fwd.second, fwd.first); + for (FLGroupList::iterator j = a_loops_grouped.begin(); j != a_loops_grouped.end(); ++j) { + FaceLoopGroup *tgt = &(*j); + if (tgt->perimeter.find(fwd) != tgt->perimeter.end()) { grp_graph_fwd[src].insert(tgt); } + if (tgt->perimeter.find(rev) != tgt->perimeter.end()) { grp_graph_rev[src].insert(tgt); } + } + for (FLGroupList::iterator j = b_loops_grouped.begin(); j != b_loops_grouped.end(); ++j) { + FaceLoopGroup *tgt = &(*j); + if (tgt->perimeter.find(fwd) != tgt->perimeter.end()) { grp_graph_fwd[src].insert(tgt); } + if (tgt->perimeter.find(rev) != tgt->perimeter.end()) { grp_graph_rev[src].insert(tgt); } + } + } + } + for (FLGroupList::iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + FaceLoopGroup *src = &(*i); + for (V2Set::const_iterator k = src->perimeter.begin(); k != src->perimeter.end(); ++k) { + V2 fwd = *k; + V2 rev = std::make_pair(fwd.second, fwd.first); + for (FLGroupList::iterator j = a_loops_grouped.begin(); j != a_loops_grouped.end(); ++j) { + FaceLoopGroup *tgt = &(*j); + if (tgt->perimeter.find(fwd) != tgt->perimeter.end()) { grp_graph_fwd[src].insert(tgt); } + if (tgt->perimeter.find(rev) != tgt->perimeter.end()) { grp_graph_rev[src].insert(tgt); } + } + for (FLGroupList::iterator j = b_loops_grouped.begin(); j != b_loops_grouped.end(); ++j) { + FaceLoopGroup *tgt = &(*j); + if (tgt->perimeter.find(fwd) != tgt->perimeter.end()) { grp_graph_fwd[src].insert(tgt); } + if (tgt->perimeter.find(rev) != tgt->perimeter.end()) { grp_graph_rev[src].insert(tgt); } + } + } + } + } +#endif + + generateCandidateOnSets(a_loops_grouped, b_loops_grouped, candidate_on_map, a_classification, b_classification); + + + for (V2Set::const_iterator i = shared_edges.begin(); i != shared_edges.end(); ++i) { + const V2 &edge = (*i); + processOneEdge(edge, a_edge_map, b_edge_map, a_classification, b_classification); + } + + + for (Classification::iterator i = a_classification.begin(), e = a_classification.end(); i != e; ++i) { + if (!(*i).second.class_decided) { + if ((*i).second.c[FACE_IN + 2] == 0) (*i).second.class_bits &= ~ FACE_IN_BIT; + if ((*i).second.c[FACE_ON_ORIENT_IN + 2] == 0) (*i).second.class_bits &= ~ FACE_ON_ORIENT_IN_BIT; + if ((*i).second.c[FACE_ON_ORIENT_OUT + 2] == 0) (*i).second.class_bits &= ~ FACE_ON_ORIENT_OUT_BIT; + if ((*i).second.c[FACE_OUT + 2] == 0) (*i).second.class_bits &= ~ FACE_OUT_BIT; + + // XXX: this is the wrong thing to do. It's intended just as a test. + if ((*i).second.class_bits == (FACE_IN_BIT | FACE_OUT_BIT)) { + if ((*i).second.c[FACE_OUT + 2] > (*i).second.c[FACE_IN + 2]) { + (*i).second.class_bits = FACE_OUT_BIT; + } else { + (*i).second.class_bits = FACE_IN_BIT; + } + } + + if (single_bit_set((*i).second.class_bits)) (*i).second.class_decided = 1; + } + } + + for (Classification::iterator i = b_classification.begin(), e = b_classification.end(); i != e; ++i) { + if (!(*i).second.class_decided) { + if ((*i).second.c[FACE_IN + 2] == 0) (*i).second.class_bits &= ~ FACE_IN_BIT; + if ((*i).second.c[FACE_ON_ORIENT_IN + 2] == 0) (*i).second.class_bits &= ~ FACE_ON_ORIENT_IN_BIT; + if ((*i).second.c[FACE_ON_ORIENT_OUT + 2] == 0) (*i).second.class_bits &= ~ FACE_ON_ORIENT_OUT_BIT; + if ((*i).second.c[FACE_OUT + 2] == 0) (*i).second.class_bits &= ~ FACE_OUT_BIT; + + // XXX: this is the wrong thing to do. It's intended just as a test. + if ((*i).second.class_bits == (FACE_IN_BIT | FACE_OUT_BIT)) { + if ((*i).second.c[FACE_OUT + 2] > (*i).second.c[FACE_IN + 2]) { + (*i).second.class_bits = FACE_OUT_BIT; + } else { + (*i).second.class_bits = FACE_IN_BIT; + } + } + + if (single_bit_set((*i).second.class_bits)) (*i).second.class_decided = 1; + } + } + + +#if defined(CARVE_DEBUG) + std::cerr << "poly a:" << std::endl; + for (Classification::iterator i = a_classification.begin(), e = a_classification.end(); i != e; ++i) { + FaceLoopGroup *grp = ((*i).first.first); + + std::cerr << " group: " << grp << " gid: " << (*i).first.second + << " " + << ((*i).second.class_decided ? "+" : "-") + << " " + << ((*i).second.class_bits & FACE_IN_BIT ? "I" : ".") + << ((*i).second.class_bits & FACE_ON_ORIENT_IN_BIT ? "<" : ".") + << ((*i).second.class_bits & FACE_ON_ORIENT_OUT_BIT ? ">" : ".") + << ((*i).second.class_bits & FACE_OUT_BIT ? "O" : ".") + << " [" + << std::setw(4) << (*i).second.c[0] << " " + << std::setw(4) << (*i).second.c[1] << " " + << std::setw(4) << (*i).second.c[2] << " " + << std::setw(4) << (*i).second.c[3] << " " + << std::setw(4) << (*i).second.c[4] << "]" << std::endl; + } + + std::cerr << "poly b:" << std::endl; + for (Classification::iterator i = b_classification.begin(), e = b_classification.end(); i != e; ++i) { + FaceLoopGroup *grp = ((*i).first.first); + + std::cerr << " group: " << grp << " gid: " << (*i).first.second + << " " + << ((*i).second.class_decided ? "+" : "-") + << " " + << ((*i).second.class_bits & FACE_IN_BIT ? "I" : ".") + << ((*i).second.class_bits & FACE_ON_ORIENT_IN_BIT ? "<" : ".") + << ((*i).second.class_bits & FACE_ON_ORIENT_OUT_BIT ? ">" : ".") + << ((*i).second.class_bits & FACE_OUT_BIT ? "O" : ".") + << " [" + << std::setw(4) << (*i).second.c[0] << " " + << std::setw(4) << (*i).second.c[1] << " " + << std::setw(4) << (*i).second.c[2] << " " + << std::setw(4) << (*i).second.c[3] << " " + << std::setw(4) << (*i).second.c[4] << "]" << std::endl; + } +#endif + + for (Classification::iterator i = a_classification.begin(), e = a_classification.end(); i != e; ++i) { + FaceLoopGroup *grp = ((*i).first.first); + + grp->classification.push_back(ClassificationInfo()); + ClassificationInfo &info = grp->classification.back(); + + info.intersected_poly = poly_b; + info.intersected_manifold = (*i).first.second; + + if ((*i).second.class_decided) { + info.classification = class_bit_to_class((*i).second.class_bits); + } else { + info.classification = FACE_UNCLASSIFIED; + } + } + + for (Classification::iterator i = b_classification.begin(), e = b_classification.end(); i != e; ++i) { + FaceLoopGroup *grp = ((*i).first.first); + + grp->classification.push_back(ClassificationInfo()); + ClassificationInfo &info = grp->classification.back(); + + info.intersected_poly = poly_a; + info.intersected_manifold = (*i).first.second; + + if ((*i).second.class_decided) { + info.classification = class_bit_to_class((*i).second.class_bits); + } else { + info.classification = FACE_UNCLASSIFIED; + } + } + + for (FLGroupList::iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + if ((*i).classification.size() == 0) { +#if defined(CARVE_DEBUG) + std::cerr << " non intersecting group (poly a): " << &(*i) << std::endl; +#endif + bool classified = false; + for (FaceLoop *fl = (*i).face_loops.head; !classified && fl != NULL; fl = fl->next) { + for (size_t fli = 0; !classified && fli < fl->vertices.size(); ++fli) { + if (vclass[fl->vertices[fli]].cls[1] == POINT_UNK) { + vclass[fl->vertices[fli]].cls[1] = poly_b->containsVertex(fl->vertices[fli]->v); + } + switch (vclass[fl->vertices[fli]].cls[1]) { + case POINT_IN: + (*i).classification.push_back(ClassificationInfo(poly_b, -1, FACE_IN)); + classified = true; + break; + case POINT_OUT: + (*i).classification.push_back(ClassificationInfo(poly_b, -1, FACE_OUT)); + classified = true; + break; + default: + break; + } + } + } + if (!classified) { + throw carve::exception("non intersecting group is not IN or OUT! (poly_a)"); + } + } + } + + for (FLGroupList::iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + if ((*i).classification.size() == 0) { +#if defined(CARVE_DEBUG) + std::cerr << " non intersecting group (poly b): " << &(*i) << std::endl; +#endif + bool classified = false; + for (FaceLoop *fl = (*i).face_loops.head; !classified && fl != NULL; fl = fl->next) { + for (size_t fli = 0; !classified && fli < fl->vertices.size(); ++fli) { + if (vclass[fl->vertices[fli]].cls[0] == POINT_UNK) { + vclass[fl->vertices[fli]].cls[0] = poly_a->containsVertex(fl->vertices[fli]->v); + } + switch (vclass[fl->vertices[fli]].cls[0]) { + case POINT_IN: + (*i).classification.push_back(ClassificationInfo(poly_a, -1, FACE_IN)); + classified = true; + break; + case POINT_OUT: + (*i).classification.push_back(ClassificationInfo(poly_a, -1, FACE_OUT)); + classified = true; + break; + default: + break; + } + } + } + if (!classified) { + throw carve::exception("non intersecting group is not IN or OUT! (poly_b)"); + } + } + } + +#if defined(DISPLAY_GRP_GRAPH) +#define POLY(grp) (std::string((grp)->face_loops.head->orig_face->polyhedron == poly_a ? "[A:" : "[B:") + CODE(grp) + "]") + + for (std::map >::iterator i = grp_graph_fwd.begin(); i != grp_graph_fwd.end(); ++i) { + const FaceLoopGroup *grp = (*i).first; + + std::cerr << "GRP: " << grp << POLY(grp) << std::endl; + + std::set &fwd_set = grp_graph_fwd[grp]; + std::set &rev_set = grp_graph_rev[grp]; + std::cerr << " FWD: "; + for (std::set::const_iterator j = fwd_set.begin(); j != fwd_set.end(); ++j) { + std::cerr << " " << (*j) << POLY(*j); + } + std::cerr << std::endl; + std::cerr << " REV: "; + for (std::set::const_iterator j = rev_set.begin(); j != rev_set.end(); ++j) { + std::cerr << " " << (*j) << POLY(*j); + } + std::cerr << std::endl; + } +#endif + + for (FLGroupList::iterator i = a_loops_grouped.begin(); i != a_loops_grouped.end(); ++i) { + collector.collect(&*i, hooks); + } + + for (FLGroupList::iterator i = b_loops_grouped.begin(); i != b_loops_grouped.end(); ++i) { + collector.collect(&*i, hooks); + } + + // traceIntersectionGraph(shared_edges, a_loops_grouped, b_loops_grouped, a_edge_map, b_edge_map); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_classify_group.cpp b/thirdparty/carve-1.4.0/lib/intersect_classify_group.cpp new file mode 100644 index 00000000..5374c04f --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_classify_group.cpp @@ -0,0 +1,198 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include +#include + +#include + +#include "intersect_common.hpp" +#include "intersect_classify_common.hpp" +#include "intersect_classify_common_impl.hpp" + + +namespace carve { + namespace csg { + + namespace { + +#if defined(_MSC_VER) && _MSC_VER < 1300 + // VC++ 6.0 gets an internal compiler when compiling + // the FaceMaker template. Not sure why but for now we just bypass + // the template + class FaceMaker0 { + public: + CSG::Collector &collector; + CSG::Hooks &hooks; + + FaceMaker0(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) { + } + bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const { + return vclass[f->vertices[index]].cls[1] == POINT_ON; + } + void explain(FaceLoop *f, size_t index, PointClass pc) const { +#if defined(CARVE_DEBUG) + std::cerr << "face loop " << f << " from poly " << "ab"[0] << " is easy because vertex " << index << " (" << *f->vertices[index] << ") is " << ENUM(pc) << std::endl; +#endif + } + }; + class FaceMaker1 { + public: + CSG::Collector &collector; + CSG::Hooks &hooks; + + FaceMaker1(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) { + } + bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const { + return vclass[f->vertices[index]].cls[0] == POINT_ON; + } + void explain(FaceLoop *f, size_t index, PointClass pc) const { +#if defined(CARVE_DEBUG) + std::cerr << "face loop " << f << " from poly " << "ab"[1] << " is easy because vertex " << index << " (" << *f->vertices[index] << ") is " << ENUM(pc) << std::endl; +#endif + } + }; +#else + template + class FaceMaker { + public: + CSG::Collector &collector; + CSG::Hooks &hooks; + + FaceMaker(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) { + } + + bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const { + return vclass[f->vertices[index]].cls[1 - poly_num] == POINT_ON; + } + + void explain(FaceLoop *f, size_t index, PointClass pc) const { +#if defined(CARVE_DEBUG) + std::cerr << "face loop " << f << " from poly " << "ab"[poly_num] << " is easy because vertex " << index << " (" << f->vertices[index]->v << ") is " << ENUM(pc) << std::endl; +#endif + } + }; + typedef FaceMaker<0> FaceMaker0; + typedef FaceMaker<1> FaceMaker1; +#endif + class ClassifyFaceGroups { + public: + CSG::Collector &collector; + CSG::Hooks &hooks; + + ClassifyFaceGroups(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) { + } + + void classifySimple(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b) const { + if (a_loops_grouped.size() < b_loops_grouped.size()) { + performClassifySimpleOnFaceGroups(a_loops_grouped, b_loops_grouped, poly_a, poly_b, collector, hooks); + } else { + performClassifySimpleOnFaceGroups(b_loops_grouped, a_loops_grouped, poly_b, poly_a, collector, hooks); + } +#if defined(CARVE_DEBUG) + std::cerr << "after removal of simple on groups: " << a_loops_grouped.size() << " a groups" << std::endl; + std::cerr << "after removal of simple on groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + void classifyEasy(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b) const { + performClassifyEasyFaceGroups(a_loops_grouped, poly_b, vclass, FaceMaker0(collector, hooks), collector, hooks); + performClassifyEasyFaceGroups(b_loops_grouped, poly_a, vclass, FaceMaker1(collector, hooks), collector, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "after removal of easy groups: " << a_loops_grouped.size() << " a groups" << std::endl; + std::cerr << "after removal of easy groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + void classifyHard(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b) const { + performClassifyHardFaceGroups(a_loops_grouped, poly_b, FaceMaker0(collector, hooks), collector, hooks); + performClassifyHardFaceGroups(b_loops_grouped, poly_a, FaceMaker1(collector, hooks), collector, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "after removal of hard groups: " << a_loops_grouped.size() << " a groups" << std::endl; + std::cerr << "after removal of hard groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + void faceLoopWork(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b) const { + performFaceLoopWork(poly_b, a_loops_grouped, *this, collector, hooks); + performFaceLoopWork(poly_a, b_loops_grouped, *this, collector, hooks); + } + + void postRemovalCheck(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped) const { +#if defined(CARVE_DEBUG) + std::cerr << "after removal of on groups: " << a_loops_grouped.size() << " a groups" << std::endl; + std::cerr << "after removal of on groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + bool faceLoopSanityChecker(FaceLoopGroup &i) const { + return i.face_loops.size() != 1; + } + + void finish(FLGroupList &a_loops_grouped,FLGroupList &b_loops_grouped) const { +#if defined(CARVE_DEBUG) + if (a_loops_grouped.size() || b_loops_grouped.size()) + std::cerr << "UNCLASSIFIED! a=" << a_loops_grouped.size() << ", b=" << b_loops_grouped.size() << std::endl; +#endif + } + }; + } + + void CSG::classifyFaceGroups(const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + CSG::Collector &collector) { + ClassifyFaceGroups classifier(collector, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "initial groups: " << a_loops_grouped.size() << " a groups" << std::endl; + std::cerr << "initial groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + performClassifyFaceGroups(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b, classifier, collector, hooks); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_classify_simple.cpp b/thirdparty/carve-1.4.0/lib/intersect_classify_simple.cpp new file mode 100644 index 00000000..3406f1dd --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_classify_simple.cpp @@ -0,0 +1,772 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include +#include +#include + +#include + +#include "intersect_common.hpp" +#include "intersect_classify_common.hpp" + +#if 0 + +class edge_graph_t : + public std::hash_map >, + hash_vector_ptr> { +public: + typedef mapped_type data_type; +}; + +#if defined(CARVE_DEBUG) +static void drawEdgeGraph(edge_graph_t &eg) { + for (edge_graph_t::const_iterator + j = eg.begin(), je = eg.end(); j != je; ++j) { + const Vector *v1 = (*j).first; + for (std::set::const_iterator + k = (*j).second.second.begin(), ke = (*j).second.second.end(); + k != ke; + ++k) { + const Vector *v2 = (*k); + HOOK(drawEdge(v1, v2, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 3.0f);); + } + } +} +#endif + +static bool find_cycles(edge_graph_t &eg, std::list &cycles) { + for (edge_graph_t::const_iterator + i = eg.begin(), e = eg.end(); i != e; ++i) { + if ((*i).second.second.size() != 1) { +#if defined(CARVE_DEBUG) + // HOOK(drawEdgeGraph(eg);); +#endif + std::cerr << "WARNING:edge loop graph does not consist of simple cycles" + << std::endl; + return false; + } + } + + while (eg.size()) { +#if defined(CARVE_DEBUG) + std::cerr << "eg.size(): " << eg.size() << std::endl; +#endif + std::list path; + edge_graph_t::iterator i; + int c = 0; + const Vector *v; + i = eg.begin(); + path.push_back(v = (*i).first); + (*i).second.first = c++; + + while (1) { + const Vector *v2 = *((*i).second.second.begin()); + path.push_back(v2); + + i = eg.find(v2); + if (i == eg.end()) { + break; + } + if ((*i).second.first < c) { + break; + } + (*i).second.first = c++; + } + +#if defined(CARVE_DEBUG) + std::cerr << (i != eg.end() ? "found" : "didn't find") << " cycle " + << std::endl + << "path.size(): " << path.size() + << std::endl; +#endif + if (i != eg.end()) { + c = (*i).second.first; + cycles.push_back(V2Set()); + } + + const Vector *src = NULL, *tgt = NULL; + + for (std::list::const_iterator + j = path.begin(), je = path.end(); j != je; ++j) { + tgt = (*j); + if (src) { + edge_graph_t::iterator k = eg.find(src); + if ((*k).second.first >= c) { + cycles.back().insert(std::make_pair(src, tgt)); + } + (*k).second.first = INT_MAX; + (*k).second.second.erase(tgt); + if ((*k).second.second.size() == 0) { + eg.erase(k); + } + } + src = tgt; + } + } + return true; +} + +static bool eliminate_simple(const LoopEdges &edge_map, + V2Set &edges, + std::set &loops, + V2Set &extra_edges) { + const Vector *v1, *v2; + loops.clear(); + +#if defined(CARVE_DEBUG) + std::cerr << edges.size() << " edges to eliminate" << std::endl; +#endif + + while (edges.size()) { + LoopEdges::const_iterator i = edge_map.find(*(edges.begin())); + if (i == edge_map.end()) { + std::pair t = *(edges.begin()); + return false; + } + if ((*i).second.size() != 1) { + throw intersect_exception( + "eliminate_simple failed: topology too complex"); + } + + FaceLoop *to_remove = *((*i).second.begin()); +#if defined(CARVE_DEBUG) + std::cerr << " removing face loop " << to_remove << std::endl; +#endif + loops.insert(to_remove); + + v1 = to_remove->vertices[to_remove->vertices.size() - 1]; + for (unsigned j = 0; j < to_remove->vertices.size(); ++j) { + v2 = to_remove->vertices[j]; + + V2Set::iterator v = edges.find(std::make_pair(v1, v2)); + if (v != edges.end()) { +#if defined(CARVE_DEBUG) + std::cerr << " removing edge " << v1 << "-" << v2 << std::endl; +#endif + edges.erase(v); + } else { +#if defined(CARVE_DEBUG) + std::cerr << " adding edge " << v2 << "-" << v1 << std::endl; +#endif + edges.insert(std::make_pair(v2, v1)); + extra_edges.insert(std::make_pair(std::min(v1, v2), + std::max(v1, v2))); + } + + v1 = v2; + } +#if defined(CARVE_DEBUG) + std::cerr << " " << edges.size() << " edges remain." << std::endl; +#endif + } + +#if defined(CARVE_DEBUG) + std::cerr << "eliminate succeeded" << std::endl; +#endif + + return true; +} + +static void classifyEdges(const V2Set &edges, + const Polyhedron *poly, + int &n_in, int &n_on, int &n_out) { + + n_in = n_on = n_out = 0; + for (V2Set::const_iterator + i = edges.begin(), e = edges.end(); i != e; ++i) { + Vector c((*(*i).first + *(*i).second) / 2.0); + switch (poly->containsVertex(c, NULL)) { + case POINT_IN: n_in++; break; + case POINT_OUT: n_out++; break; + case POINT_ON: n_on++; break; + default: break; + } + } +} + +static FaceClass faceClassificationBasedOnEdges(const V2Set &edges, + const Polyhedron *poly, + FaceClass on_hint) { + int n_in, n_on, n_out; + + classifyEdges(edges, poly, n_in, n_on, n_out); + + std::cerr << ">>> classification: n_in: " << n_in << " n_on: " << n_on << " n_out: " << n_out << std::endl; + CARVE_ASSERT(n_in == (int)edges.size() || n_out == (int)edges.size() || n_on == (int)edges.size()); + + if (n_in) return FACE_IN; + if (n_out) return FACE_OUT; + + return on_hint; +} + +static void classifySimpleOnFaces(FaceLoopList &a_face_loops, + FaceLoopList &b_face_loops, + const Polyhedron *poly_a, + const Polyhedron *poly_b, + CSG::Collector &collector) { + LoopEdges edge_map; + + for (FaceLoop *i = b_face_loops.head; i; i = i->next) { + edge_map.addFaceLoop(i); + } + + for (FaceLoop *i = a_face_loops.head; i;) { + LoopEdges::const_iterator t; + t = edge_map.find(std::make_pair(i->vertices[0], i->vertices[1])); + if (t != edge_map.end()) { + for (std::list::const_iterator + u = (*t).second.begin(), ue = (*t).second.end(); u != ue; ++u) { + FaceLoop *j(*u); + int k = is_same(i->vertices, j->vertices); + CARVE_ASSERT(k != -1); + if (k == +1) { + collector.collect(i->orig_face, + i->vertices, + i->orig_face->normal, + true, + FACE_ON_ORIENT_OUT); + collector.collect(j->orig_face, + j->vertices, + j->orig_face->normal, + false, + FACE_ON_ORIENT_OUT); + edge_map.removeFaceLoop(j); + i = a_face_loops.remove(i); + b_face_loops.remove(j); + goto next_loop; + } + } + } + t = edge_map.find(std::make_pair(i->vertices[1], i->vertices[0])); + if (t != edge_map.end()) { + for (std::list::const_iterator + u = (*t).second.begin(), ue = (*t).second.end(); u != ue; ++u) { + FaceLoop *j(*u); + int k = is_same(i->vertices, j->vertices); + CARVE_ASSERT(k != +1); + if (k == -1) { + collector.collect(i->orig_face, + i->vertices, + i->orig_face->normal, + true, + FACE_ON_ORIENT_IN); + collector.collect(j->orig_face, + j->vertices, + j->orig_face->normal, + false, + FACE_ON_ORIENT_IN); + edge_map.removeFaceLoop(j); + i = a_face_loops.remove(i); + b_face_loops.remove(j); + goto next_loop; + } + } + } + i = i->next; + next_loop:; + } +} + +static void classifyOnFaces_2(FaceLoopList &a_face_loops, + FaceLoopList &b_face_loops, + const VertexClassification &vclass, + const Polyhedron *poly_a, + const Polyhedron *poly_b, + CSG::Collector &collector) { + + LoopEdges edge_map_a; + LoopEdges edge_map_b; + + std::list cycles; + + for (FaceLoop *i = a_face_loops.head; i; i = i->next) { + edge_map_a.addFaceLoop(i); + } + + for (FaceLoop *i = b_face_loops.head; i; i = i->next) { + edge_map_b.addFaceLoop(i); + } + + edge_graph_t edge_graph; + + edge_graph.clear(); + for (LoopEdges::const_iterator + i = edge_map_a.begin(), e = edge_map_a.end(); + i != e; + ++i) { + const Vector *v1((*i).first.first), *v2((*i).first.second); + LoopEdges::const_iterator j = edge_map_b.find(std::make_pair(v2, v1)); + if (j != edge_map_b.end()) { + edge_graph_t::data_type &data(edge_graph[v1]); + data.first = INT_MAX; + data.second.insert(v2); +#if defined(CARVE_DEBUG) + std::cerr << "--- " << v1 << "-" << v2 << std::endl; +#endif + } + } + + cycles.clear(); + if (!find_cycles(edge_graph, cycles)) return; + +#if defined(CARVE_DEBUG) + std::cerr << cycles.size() << " reverse cycles" << std::endl; +#endif + + for (std::list::iterator + i = cycles.begin(), e = cycles.end(); i != e; ++i) { + std::set a_loopset, b_loopset; + V2Set b_cycle; + V2Set a_extra_edges, b_extra_edges; + + for (V2Set::const_iterator + j = (*i).begin(), je = (*i).end(); j != je; ++j) { + b_cycle.insert(std::make_pair((*j).second, (*j).first)); + } + if (eliminate_simple(edge_map_a, (*i), a_loopset, a_extra_edges) && + eliminate_simple(edge_map_b, b_cycle, b_loopset, b_extra_edges)) { +#if defined(CARVE_DEBUG) + std::cerr << "paired " + << a_loopset.size() << " poly_a faces with " + << b_loopset.size() << " poly_b faces in reverse loop (" + << a_extra_edges.size() << " extra edges in set a, " + << b_extra_edges.size() << " extra edges in set b)" + << std::endl; +#endif + FaceClass a_class, b_class; + + a_class = faceClassificationBasedOnEdges(a_extra_edges, + poly_b, + FACE_ON_ORIENT_IN); + b_class = faceClassificationBasedOnEdges(b_extra_edges, + poly_a, + FACE_ON_ORIENT_IN); + +#if defined(CARVE_DEBUG) + std::cerr << "a_class = " << ENUM(a_class) << std::endl + << "b_class = " << ENUM(b_class) << std::endl; +#endif + + if (a_class == FACE_ON_ORIENT_IN && b_class != FACE_ON_ORIENT_IN) + a_class = b_class; + else if (a_class != FACE_ON_ORIENT_IN && b_class == FACE_ON_ORIENT_IN) + b_class = a_class; + +#if defined(CARVE_DEBUG) + std::cerr << "modified a_class = " << ENUM(a_class) << std::endl + << " b_class = " << ENUM(b_class) << std::endl; +#endif + + for (std::set::const_iterator + j = a_loopset.begin(), je = a_loopset.end(); j != je; ++j) { + collector.collect((*j)->orig_face, + (*j)->vertices, + (*j)->orig_face->normal, + true, + a_class); + edge_map_a.removeFaceLoop((*j)); + a_face_loops.remove((*j)); + } + for (std::set::const_iterator + j = b_loopset.begin(), je = b_loopset.end(); j != je; ++j) { + collector.collect((*j)->orig_face, + (*j)->vertices, + (*j)->orig_face->normal, + false, + a_class); + edge_map_b.removeFaceLoop((*j)); + b_face_loops.remove((*j)); + } + } else { +#if defined(CARVE_DEBUG) + std::cerr << "pairing failed" << std::endl; +#endif + } + } + + edge_graph.clear(); + for (LoopEdges::const_iterator + i = edge_map_a.begin(), e = edge_map_a.end(); + i != e; + ++i) { + const Vector *v1((*i).first.first), *v2((*i).first.second); + LoopEdges::const_iterator j = edge_map_b.find(std::make_pair(v1, v2)); + if (j != edge_map_b.end()) { + edge_graph_t::data_type &data(edge_graph[v1]); + data.first = INT_MAX; + data.second.insert(v2); +#if defined(CARVE_DEBUG) + std::cerr << "+++ " << v1 << "-" << v2 << std::endl; +#endif + } + } + + cycles.clear(); + if (!find_cycles(edge_graph, cycles)) return; + +#if defined(CARVE_DEBUG) + std::cerr << cycles.size() << " forward cycles" << std::endl; +#endif + + for (std::list::iterator + i = cycles.begin(), e = cycles.end(); i != e; ++i) { + std::set a_loopset, b_loopset; + V2Set b_cycle((*i)); + V2Set a_extra_edges, b_extra_edges; + + if (eliminate_simple(edge_map_a, (*i), a_loopset, a_extra_edges) && + eliminate_simple(edge_map_b, b_cycle, b_loopset, b_extra_edges)) { +#if defined(CARVE_DEBUG) + std::cerr << "paired " + << a_loopset.size() << " poly_a faces with " + << b_loopset.size() << " poly_b faces in forward loop" + << a_extra_edges.size() << " extra edges in set a, " + << b_extra_edges.size() << " extra edges in set b)" + << std::endl; +#endif + FaceClass a_class, b_class; + + a_class = faceClassificationBasedOnEdges(a_extra_edges, + poly_b, + FACE_ON_ORIENT_OUT); + b_class = faceClassificationBasedOnEdges(b_extra_edges, + poly_a, + FACE_ON_ORIENT_OUT); +#if defined(CARVE_DEBUG) + std::cerr << "a_class = " << ENUM(a_class) << std::endl + << "b_class = " << ENUM(b_class) << std::endl; +#endif + + if (a_class == FACE_ON_ORIENT_OUT && b_class != FACE_ON_ORIENT_OUT) + a_class = (FaceClass)-b_class; + else if (a_class != FACE_ON_ORIENT_OUT && b_class == FACE_ON_ORIENT_OUT) + b_class = (FaceClass)-a_class; + +#if defined(CARVE_DEBUG) + std::cerr << "modified a_class = " << ENUM(a_class) << std::endl + << " b_class = " << ENUM(b_class) << std::endl; +#endif + + for (std::set::const_iterator + j = a_loopset.begin(), je = a_loopset.end(); j != je; ++j) { + collector.collect((*j)->orig_face, + (*j)->vertices, + (*j)->orig_face->normal, + true, + a_class); + edge_map_a.removeFaceLoop((*j)); + a_face_loops.remove((*j)); + } + for (std::set::const_iterator + j = b_loopset.begin(), je = b_loopset.end(); j != je; ++j) { + collector.collect((*j)->orig_face, + (*j)->vertices, + (*j)->orig_face->normal, + false, + b_class); + edge_map_b.removeFaceLoop((*j)); + b_face_loops.remove((*j)); + } + } else { +#if defined(CARVE_DEBUG) + std::cerr << "pairing failed" << std::endl; +#endif + } + } +} + +void classifyEasyFaces(FaceLoopList &face_loops, + VertexClassification &vclass, + const Polyhedron *other_poly, + int other_poly_num, + Intersections &intersections, + CSG::Collector &collector) { + + + for (FaceLoop *i = face_loops.head; i;) { + unsigned j; + + const std::vector &f_loop(i->vertices); + + PointClass pc = POINT_ON; + unsigned test = 0; + for (j = 0; j < f_loop.size(); j++) { + PointClass temp = vclass[f_loop[j]].cls[other_poly_num]; + if (temp == POINT_ON) continue; + pc = temp; + test = j; + if (pc != POINT_UNK) break; + } + + if (pc != POINT_ON) { + // EASY CASE + + // IF a face uses a POINT_OUT vertex, it is OUT, and no face + // vertices may be POINT_IN + + // IF a face uses a POINT_IN vertex, it is IN, and no face + // vertices may be POINT_OUT + + if (pc == POINT_UNK) { + pc = other_poly->containsVertex(*f_loop[test]); +#if defined(CARVE_DEBUG) + std::cerr << "testing " << f_loop[test] << " pc = " << pc << std::endl; +#endif + +#if defined(CARVE_DEBUG) + if (pc != POINT_IN && pc != POINT_OUT) { + HOOK(drawFaceLoop(f_loop, i->orig_face->normal, 1.0, 0.0, 0.0, 0.5, true);); + HOOK(drawFaceLoopWireframe(f_loop, i->orig_face->normal, 1.0, 1.0, 0.0, 1.0);); + HOOK(drawPoint(f_loop[test], 1, 1, 1, 1, 8.0);); + } +#endif + CARVE_ASSERT(pc == POINT_OUT || pc == POINT_IN); + } + + for (j = 0; j < f_loop.size(); j++) { + PC2 &pc2(vclass[f_loop[j]]); + if (pc2.cls[other_poly_num] == POINT_UNK) { + pc2.cls[other_poly_num] = pc; + } else { + CARVE_ASSERT(pc2.cls[other_poly_num] == POINT_ON || pc2.cls[other_poly_num] == pc); + } + } + + // this face loop is trivially either IN or OUT. + + { + std::vector ifaces; + intersections.commonFaces(f_loop, ifaces); + if (ifaces.size()) { + std::cerr << "ERROR: JUST CLASSIFIED A FACE AS IN OR OUT WHEN " + "ifaces.size() == " << ifaces.size() << " [ "; + + for (std::vector::const_iterator + x = ifaces.begin(), xe = ifaces.end(); x != xe; ++x) { + std::cerr << (*x) << " "; + } + std::cerr << "]" << std::endl; + } + } + + if (pc == POINT_IN) { + collector.collect(i->orig_face, + f_loop, + i->orig_face->normal, + other_poly_num == 1, + FACE_IN); + } else { + collector.collect(i->orig_face, + f_loop, + i->orig_face->normal, + other_poly_num == 1, + FACE_OUT); + } + + i = face_loops.remove(i); + } else { + i = i ->next; + } + } +} +#endif + +void carve::csg::CSG::classifyFaceGroupsSimple(const V2Set &shared_edges, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + FLGroupList &a_loops_grouped, + const LoopEdges &a_edge_map, + const carve::poly::Polyhedron *poly_b, + FLGroupList &b_loops_grouped, + const LoopEdges &b_edge_map, + Collector &collector) { +#if 0 + // Old proto + void carve::csg::CSG::classifyFaces(carve::csg::FaceLoopList &a_face_loops, + size_t a_edge_count, + carve::csg::FaceLoopList &b_face_loops, + size_t b_edge_count, + VertexClassification &vclass, + const carve::poly::Polyhedron *poly_a, + const carve::poly::Polyhedron *poly_b, + Collector &collector); + + std::cerr << "classify: " + << a_face_loops.size() << " cases in polyhedron a" + << std::endl; + std::cerr << "classify: " + << b_face_loops.size() << " cases in polyhedron b" + << std::endl; + + classifyEasyFaces(a_face_loops, vclass, poly_b, 1, intersections, collector); + classifyEasyFaces(b_face_loops, vclass, poly_a, 0, intersections, collector); + +#if 0 && defined(CARVE_DEBUG) + HOOK(drawFaceLoopList(a_face_loops, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f);); + HOOK(drawFaceLoopList(b_face_loops, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f);); +#endif + + std::cerr << "classify: " + << a_face_loops.size() << " hard cases in polyhedron a" + << std::endl; + std::cerr << "classify: " + << b_face_loops.size() << " hard cases in polyhedron b" + << std::endl; + + classifySimpleOnFaces(a_face_loops, b_face_loops, poly_a, poly_b, collector); + + std::cerr << "classify: " + << a_face_loops.size() + << " after elimination of easy pairs: polyhedron a" << std::endl; + std::cerr << "classify: " + << b_face_loops.size() + << " after elimination of easy pairs: polyhedron b" << std::endl; + + classifyOnFaces_2(a_face_loops, + b_face_loops, + vclass, poly_a, + poly_b, + collector); + + std::cerr << "classify: " << a_face_loops.size() << " after elimination of hard pairs: polyhedron a" << std::endl; + std::cerr << "classify: " << b_face_loops.size() << " after elimination of hard pairs: polyhedron b" << std::endl; + + FaceLoop *fla, *flb; + + for (fla = a_face_loops.head; fla; fla = fla->next) { + const Face *f(fla->orig_face); + std::vector &loop(fla->vertices); + std::vector proj; + proj.reserve(loop.size()); + for (unsigned i = 0; i < loop.size(); ++i) { + proj.push_back((f->*(f->project))(*loop[i])); + } + P2 pv; + if (!pickContainedPoint(proj, pv)) { + CARVE_FAIL("pickContainedPoint failed"); + } + Vector v = (f->*(f->unproject))(pv); + + const Face *hit_face; + PointClass pc = poly_b->containsVertex(v, &hit_face); + + FaceClass fc = FACE_ON; + + if (pc != POINT_IN && pc != POINT_OUT) { + std::cerr << "WARNING: last resort classifier found an ON face" + << std::endl; + } + + switch (pc) { + case POINT_IN: fc = FACE_IN; break; + case POINT_OUT: fc = FACE_OUT; break; + case POINT_ON: { + double d = dot(hit_face->normal, f->normal); + fc = d < 0.0 ? FACE_ON_ORIENT_IN : FACE_ON_ORIENT_OUT; + break; + } + default: + CARVE_FAIL("should not happen"); + } + + // CARVE_ASSERT(pc == POINT_IN || pc == POINT_OUT); +#if defined(CARVE_DEBUG) + { + float r,g,b,a; + switch(fc) { + case FACE_IN: r=1; g=0; b=0; a=1; break; + case FACE_OUT: r=0; g=0; b=1; a=1; break; + case FACE_ON_ORIENT_OUT: r=1; g=1; b=0; a=1; break; + case FACE_ON_ORIENT_IN: r=0; g=1; b=1; a=1; break; + } + if (fc != FACE_IN && fc != FACE_OUT) { + HOOK(drawFaceLoopWireframe(loop, f->normal, r, g, b, a);); + HOOK(drawPoint(&v, 1, 1, 1, 1, 30.0);); + } + } +#endif + + collector.collect(f, loop, f->normal, true, fc); + } + + for (flb = b_face_loops.head; flb; flb = flb->next) { + const Face *f(flb->orig_face); + std::vector &loop(flb->vertices); + std::vector proj; + proj.reserve(loop.size()); + for (unsigned i = 0; i < loop.size(); ++i) { + proj.push_back((f->*(f->project))(*loop[i])); + } + P2 pv; + if (!pickContainedPoint(proj, pv)) { + CARVE_FAIL("pickContainedPoint failed"); + } + Vector v = (f->*(f->unproject))(pv); + + const Face *hit_face; + PointClass pc = poly_a->containsVertex(v, &hit_face); + + FaceClass fc = FACE_ON; + + if (pc != POINT_IN && pc != POINT_OUT) { + std::cerr << "WARNING: last resort classifier found an ON face" + << std::endl; + } + + switch (pc) { + case POINT_IN: fc = FACE_IN; break; + case POINT_OUT: fc = FACE_OUT; break; + case POINT_ON: { + double d = dot(hit_face->normal, f->normal); + fc = d < 0.0 ? FACE_ON_ORIENT_IN : FACE_ON_ORIENT_OUT; + break; + } + default: + CARVE_FAIL("should not happen"); + } + + // CARVE_ASSERT(pc == POINT_IN || pc == POINT_OUT); +#if defined(CARVE_DEBUG) + { + float r,g,b,a; + switch(fc) { + case FACE_IN: r=1; g=0; b=0; a=1; break; + case FACE_OUT: r=0; g=0; b=1; a=1; break; + case FACE_ON_ORIENT_OUT: r=1; g=1; b=0; a=1; break; + case FACE_ON_ORIENT_IN: r=0; g=1; b=1; a=1; break; + } + // HOOK(drawFaceLoop(loop, f->normal, r, g, b, a);); + if (fc != FACE_IN && fc != FACE_OUT) { + HOOK(drawFaceLoopWireframe(loop, f->normal, r, g, b, a);); + HOOK(drawPoint(&v, 1, 1, 1, 1, 30.0);); + } + } +#endif + + collector.collect(f, loop, f->normal, false, fc); + } +#endif +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_common.hpp b/thirdparty/carve-1.4.0/lib/intersect_common.hpp new file mode 100644 index 00000000..f41bbde0 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_common.hpp @@ -0,0 +1,83 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#pragma once + + +static inline bool facesAreCoplanar(const carve::poly::Polyhedron::face_t *a, const carve::poly::Polyhedron::face_t *b) { + carve::geom3d::Ray temp; + // XXX: Find a better definition. This may be a source of problems + // if floating point inaccuracies cause an incorrect answer. + return !carve::geom3d::planeIntersection(a->plane_eqn, b->plane_eqn, temp); +} + +#if defined(CARVE_DEBUG) + +#include + +#endif + +namespace carve { + namespace csg { + + static inline const carve::poly::Polyhedron::vertex_t *map_vertex(const VVMap &vmap, const carve::poly::Polyhedron::vertex_t *v) { + VVMap::const_iterator i = vmap.find(v); + if (i == vmap.end()) return v; + return (*i).second; + } + +#if defined(CARVE_DEBUG) + + class IntersectDebugHooks; + extern IntersectDebugHooks *g_debug; + +#define HOOK(x) do { if (g_debug) { g_debug->x } } while(0) + + static inline void drawFaceLoopList(const FaceLoopList &ll, + float rF, float gF, float bF, float aF, + float rB, float gB, float bB, float aB, + bool lit) { + for (FaceLoop *flb = ll.head; flb; flb = flb->next) { + const carve::poly::Polyhedron::face_t *f = (flb->orig_face); + std::vector &loop = flb->vertices; + HOOK(drawFaceLoop2(loop, f->plane_eqn.N, rF, gF, bF, aF, rB, gB, bB, aB, true, lit);); + HOOK(drawFaceLoopWireframe(loop, f->plane_eqn.N, 1, 1, 1, 0.1f);); + } + } + + static inline void drawFaceLoopListWireframe(const FaceLoopList &ll) { + for (FaceLoop *flb = ll.head; flb; flb = flb->next) { + const carve::poly::Polyhedron::face_t *f = (flb->orig_face); + std::vector &loop = flb->vertices; + HOOK(drawFaceLoopWireframe(loop, f->plane_eqn.N, 1, 1, 1, 0.1f);); + } + } + + template + static inline void drawEdges(T begin, T end, + float rB, float gB, float bB, float aB, + float rE, float gE, float bE, float aE, + float w) { + for (; begin != end; ++begin) { + HOOK(drawEdge((*begin).first, (*begin).second, rB, gB, bB, aB, rE, gE, bE, aE, w);); + } + } + +#endif + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_debug.cpp b/thirdparty/carve-1.4.0/lib/intersect_debug.cpp new file mode 100644 index 00000000..56bb3269 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_debug.cpp @@ -0,0 +1,65 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include +#include +#include + +#include + +#include "intersect_debug.hpp" + +namespace carve { + namespace csg { + +#if defined(CARVE_DEBUG) + +#define DEBUG_DRAW_FACE_EDGES +#define DEBUG_DRAW_INTERSECTIONS +// #define DEBUG_DRAW_OCTREE +#define DEBUG_DRAW_INTERSECTION_LINE +// #define DEBUG_DRAW_GROUPS +// #define DEBUG_PRINT_RESULT_FACES + + IntersectDebugHooks *g_debug = NULL; + + IntersectDebugHooks *intersect_installDebugHooks(IntersectDebugHooks *hooks) { + IntersectDebugHooks *h = g_debug; + g_debug = hooks; + return h; + } + + bool intersect_debugEnabled() { return true; } + +#else + + IntersectDebugHooks *intersect_installDebugHooks(IntersectDebugHooks *hooks) { + return NULL; + } + + bool intersect_debugEnabled() { return false; } + +#endif + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_debug.hpp b/thirdparty/carve-1.4.0/lib/intersect_debug.hpp new file mode 100644 index 00000000..9a31e837 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_debug.hpp @@ -0,0 +1,29 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#include + +#if defined(CARVE_DEBUG) + +#define DEBUG_DRAW_FACE_EDGES +#define DEBUG_DRAW_INTERSECTIONS +// #define DEBUG_DRAW_OCTREE +#define DEBUG_DRAW_INTERSECTION_LINE +// #define DEBUG_DRAW_GROUPS +// #define DEBUG_PRINT_RESULT_FACES + +#endif diff --git a/thirdparty/carve-1.4.0/lib/intersect_face_division.cpp b/thirdparty/carve-1.4.0/lib/intersect_face_division.cpp new file mode 100644 index 00000000..a730eea4 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_face_division.cpp @@ -0,0 +1,1696 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "csg_detail.hpp" +#include "csg_data.hpp" + +#include "intersect_common.hpp" + +typedef carve::poly::Polyhedron poly_t; + + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) +void writePLY(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii); +#endif + + + +namespace { + + + + template + void populateVectorFromList(std::list &l, std::vector &v) { + v.clear(); + v.reserve(l.size()); + for (typename std::list::iterator i = l.begin(); i != l.end(); ++i) { + v.push_back(T()); + std::swap(*i, v.back()); + } + l.clear(); + } + + template + void populateListFromVector(std::vector &v, std::list &l) { + l.clear(); + for (size_t i = 0; i < v.size(); ++i) { + l.push_back(T()); + std::swap(v[i], l.back()); + } + v.clear(); + } + + + + struct GraphEdge { + GraphEdge *next; + GraphEdge *prev; + GraphEdge *loop_next; + const poly_t::vertex_t *src; + const poly_t::vertex_t *tgt; + double ang; + int visited; + + GraphEdge(const poly_t::vertex_t *_src, const poly_t::vertex_t *_tgt) : + next(NULL), prev(NULL), loop_next(NULL), + src(_src), tgt(_tgt), + ang(0.0), visited(-1) { + } + }; + + + + struct GraphEdges { + GraphEdge *edges; + carve::geom2d::P2 proj; + + GraphEdges() : edges(NULL), proj() { + } + }; + + + + struct Graph { + typedef std::unordered_map graph_t; + + graph_t graph; + + Graph() : graph() { + } + + ~Graph() { + int c = 0; + + GraphEdge *edge; + for (graph_t::iterator i = graph.begin(), e = graph.end(); i != e; ++i) { + edge = (*i).second.edges; + while (edge) { + GraphEdge *temp = edge; + ++c; + edge = edge->next; + delete temp; + } + } + + if (c) { + std::cerr << "warning: " + << c + << " edges should have already been removed at graph destruction time" + << std::endl; + } + } + + const carve::geom2d::P2 &projection(const poly_t::vertex_t *v) const { + graph_t::const_iterator i = graph.find(v); + CARVE_ASSERT(i != graph.end()); + return (*i).second.proj; + } + + void computeProjection(const poly_t::face_t *face) { + for (graph_t::iterator i = graph.begin(), e = graph.end(); i != e; ++i) { + (*i).second.proj = carve::poly::face::project(face, (*i).first->v); + } + for (graph_t::iterator i = graph.begin(), e = graph.end(); i != e; ++i) { + for (GraphEdge *e = (*i).second.edges; e; e = e->next) { + e->ang = carve::math::ANG(carve::geom2d::atan2(projection(e->tgt) - projection(e->src))); + } + } + } + + void print(std::ostream &out, const carve::csg::VertexIntersections *vi) const { + for (graph_t::const_iterator i = graph.begin(), e = graph.end(); i != e; ++i) { + out << (*i).first << (*i).first->v << '(' << projection((*i).first).x << ',' << projection((*i).first).y << ") :"; + for (const GraphEdge *e = (*i).second.edges; e; e = e->next) { + out << ' ' << e->tgt << e->tgt->v << '(' << projection(e->tgt).x << ',' << projection(e->tgt).y << ')'; + } + out << std::endl; + if (vi) { + carve::csg::VertexIntersections::const_iterator j = vi->find((*i).first); + if (j != vi->end()) { + out << " (int) "; + for (carve::csg::IObjPairSet::const_iterator + k = (*j).second.begin(), ke = (*j).second.end(); k != ke; ++k) { + if ((*k).first < (*k).second) { + out << (*k).first << ".." << (*k).second << "; "; + } + } + out << std::endl; + } + } + } + } + + void addEdge(const poly_t::vertex_t *v1, const poly_t::vertex_t *v2) { + GraphEdges &edges = graph[v1]; + GraphEdge *edge = new GraphEdge(v1, v2); + if (edges.edges) edges.edges->prev = edge; + edge->next = edges.edges; + edges.edges = edge; + } + + void removeEdge(GraphEdge *edge) { + if (edge->prev != NULL) { + edge->prev->next = edge->next; + } else { + if (edge->next != NULL) { + GraphEdges &edges = (graph[edge->src]); + edges.edges = edge->next; + } else { + graph.erase(edge->src); + } + } + if (edge->next != NULL) { + edge->next->prev = edge->prev; + } + delete edge; + } + + bool empty() const { + return graph.size() == 0; + } + + GraphEdge *pickStartEdge() { + // Try and find a vertex from which there is only one outbound edge. Won't always succeed. + for (graph_t::iterator i = graph.begin(); i != graph.end(); ++i) { + GraphEdges &ge = i->second; + if (ge.edges->next == NULL) { + return ge.edges; + } + } + return (*graph.begin()).second.edges; + } + + GraphEdge *outboundEdges(const poly_t::vertex_t *v) { + return graph[v].edges; + } + }; + + + + /** + * \brief Take a set of new edges and split a face based upon those edges. + * + * @param[in] face The face to be split. + * @param[in] edges + * @param[out] face_loops Output list of face loops + * @param[out] hole_loops Output list of hole loops + * @param vi + */ + static void splitFace(const poly_t::face_t *face, + const carve::csg::V2Set &edges, + std::list > &face_loops, + std::list > &hole_loops, + const carve::csg::VertexIntersections &vi) { + Graph graph; + + for (carve::csg::V2Set::const_iterator + i = edges.begin(), e = edges.end(); + i != e; + ++i) { + const poly_t::vertex_t *v1 = ((*i).first), *v2 = ((*i).second); + if (carve::geom::equal(v1->v, v2->v)) std::cerr << "WARNING! " << v1->v << "==" << v2->v << std::endl; + graph.addEdge(v1, v2); + } + + graph.computeProjection(face); + + while (!graph.empty()) { + GraphEdge *edge; + GraphEdge *start; + start = edge = graph.pickStartEdge(); + + edge->visited = 0; + + int len = 0; + + while (1) { + double in_ang = M_PI + edge->ang; + if (in_ang > M_TWOPI) in_ang -= M_TWOPI; + + GraphEdge *opts; + GraphEdge *out = NULL; + double best = M_TWOPI + 1.0; + + for (opts = graph.outboundEdges(edge->tgt); opts; opts = opts->next) { + if (opts->tgt == edge->src) { + if (out == NULL && opts->next == NULL) out = opts; + } else { + double out_ang = carve::math::ANG(in_ang - opts->ang); + + if (out == NULL || out_ang < best) { + out = opts; + best = out_ang; + } + } + } + + CARVE_ASSERT(out != NULL); + + edge->loop_next = out; + + if (out->visited >= 0) { + while (start != out) { + GraphEdge *e = start; + start = start->loop_next; + e->loop_next = NULL; + e->visited = -1; + } + len = edge->visited - out->visited + 1; + break; + } + + out->visited = edge->visited + 1; + edge = out; + } + + std::vector loop(len); + std::vector projected(len); + + edge = start; + for (int i = 0; i < len; ++i) { + GraphEdge *next = edge->loop_next; + loop[i] = edge->src; + projected[i] = graph.projection(edge->src); + graph.removeEdge(edge); + edge = next; + } + + CARVE_ASSERT(edge == start); + + if (carve::geom2d::signedArea(projected) < 0) { + face_loops.push_back(std::vector()); + face_loops.back().swap(loop); + } else { + hole_loops.push_back(std::vector()); + hole_loops.back().swap(loop); + } + } + } + + + + /** + * \brief Determine the relationship between a face loop and a hole loop. + * + * Determine whether a face and hole share an edge, or a vertex, + * or do not touch. Find a hole vertex that is not part of the + * face, and a hole,face vertex pair that are coincident, if such + * a pair exists. + * + * @param[in] f A face loop. + * @param[in] f_sort A vector indexing \a f in address order + * @param[in] h A hole loop. + * @param[in] h_sort A vector indexing \a h in address order + * @param[out] f_idx Index of a face vertex that is shared with the hole. + * @param[out] h_idx Index of the hole vertex corresponding to \a f_idx. + * @param[out] unmatched_h_idx Index of a hole vertex that is not part of the face. + * @param[out] shares_vertex Boolean indicating that the face and the hole share a vertex. + * @param[out] shares_edge Boolean indicating that the face and the hole share an edge. + */ + static void compareFaceLoopAndHoleLoop(const std::vector &f, + const std::vector &f_sort, + const std::vector &h, + const std::vector &h_sort, + unsigned &f_idx, + unsigned &h_idx, + int &unmatched_h_idx, + bool &shares_vertex, + bool &shares_edge) { + const size_t F = f.size(); + const size_t H = h.size(); + + shares_vertex = shares_edge = false; + unmatched_h_idx = -1; + + unsigned I, J; + for (I = J = 0; I < F && J < H;) { + unsigned i = f_sort[I], j = h_sort[J]; + if (f[i] == h[j]) { + shares_vertex = true; + f_idx = i; + h_idx = j; + if (f[(i + F - 1) % F] == h[(j + 1) % H]) { + shares_edge = true; + } + const poly_t::vertex_t *t = f[i]; + do { ++I; } while (I < F && f[f_sort[I]] == t); + do { ++J; } while (J < H && h[h_sort[J]] == t); + } else if (f[i] < h[j]) { + ++I; + } else { + unmatched_h_idx = j; + ++J; + } + } + if (J < H) { + unmatched_h_idx = h_sort[J]; + } + } + + + + /** + * \brief Compute an embedding for a set of face loops and hole loops. + * + * Because face and hole loops may be contained within each other, + * it must be determined which hole loops are directly contained + * within a face loop. + * + * @param[in] face The face from which these face and hole loops derive. + * @param[in] face_loops + * @param[in] hole_loops + * @param[out] containing_faces A vector which for each hole loop + * lists the indices of the face + * loops it is containined in. + * @param[out] hole_shared_vertices A map from a face,hole pair to + * a shared vertex pair. + */ + static void computeContainment(const poly_t::face_t *face, + std::vector > &face_loops, + std::vector > &hole_loops, + std::vector > &containing_faces, + std::map > > &hole_shared_vertices) { + std::vector > face_loops_projected, hole_loops_projected; + std::vector > face_loops_sorted, hole_loops_sorted; + + std::vector face_loop_areas, hole_loop_areas; + + face_loops_projected.resize(face_loops.size()); + face_loops_sorted.resize(face_loops.size()); + face_loop_areas.resize(face_loops.size()); + + hole_loops.resize(hole_loops.size()); + hole_loops_projected.resize(hole_loops.size()); + hole_loops_sorted.resize(hole_loops.size()); + hole_loop_areas.resize(hole_loops.size()); + + // produce a projection of each face loop onto a 2D plane, and a + // index vector which sorts vertices by address. + for (size_t m = 0; m < face_loops.size(); ++m) { + const std::vector &f_loop = (face_loops[m]); + face_loops_projected[m].reserve(f_loop.size()); + face_loops_sorted[m].reserve(f_loop.size()); + for (size_t n = 0; n < f_loop.size(); ++n) { + face_loops_projected[m].push_back(carve::poly::face::project(face, f_loop[n]->v)); + face_loops_sorted[m].push_back(n); + } + face_loop_areas.push_back(carve::geom2d::signedArea(face_loops_projected[m])); + std::sort(face_loops_sorted[m].begin(), face_loops_sorted[m].end(), + carve::make_index_sort(face_loops[m].begin())); + } + + // produce a projection of each hole loop onto a 2D plane, and a + // index vector which sorts vertices by address. + for (size_t m = 0; m < hole_loops.size(); ++m) { + const std::vector &h_loop = (hole_loops[m]); + hole_loops_projected[m].reserve(h_loop.size()); + hole_loops_projected[m].reserve(h_loop.size()); + for (size_t n = 0; n < h_loop.size(); ++n) { + hole_loops_projected[m].push_back(carve::poly::face::project(face, h_loop[n]->v)); + hole_loops_sorted[m].push_back(n); + } + hole_loop_areas.push_back(carve::geom2d::signedArea(hole_loops_projected[m])); + std::sort(hole_loops_sorted[m].begin(), hole_loops_sorted[m].end(), + carve::make_index_sort(hole_loops[m].begin())); + } + + containing_faces.resize(hole_loops.size()); + + for (unsigned i = 0; i < hole_loops.size(); ++i) { + + for (unsigned j = 0; j < face_loops.size(); ++j) { + unsigned f_idx, h_idx; + int unmatched_h_idx; + bool shares_vertex, shares_edge; + compareFaceLoopAndHoleLoop(face_loops[j], + face_loops_sorted[j], + hole_loops[i], + hole_loops_sorted[i], + f_idx, h_idx, + unmatched_h_idx, + shares_vertex, + shares_edge); + +#if defined(CARVE_DEBUG) + std::cerr << "face: " << j + << " hole: " << i + << " shares_vertex: " << shares_vertex + << " shares_edge: " << shares_edge + << std::endl; +#endif + + carve::geom3d::Vector test = hole_loops[i][0]->v; + carve::geom2d::P2 test_p = carve::poly::face::project(face, test); + + if (shares_vertex) { + hole_shared_vertices[i][j] = std::make_pair(h_idx, f_idx); + // Hole touches face. Should be able to connect it up + // trivially. Still need to record its containment, so that + // the assignment below works. + if (unmatched_h_idx != -1) { +#if defined(CARVE_DEBUG) + std::cerr << "using unmatched vertex: " << unmatched_h_idx << std::endl; +#endif + test = hole_loops[i][unmatched_h_idx]->v; + test_p = carve::poly::face::project(face, test); + } else { + // XXX: hole shares ALL vertices with face. Pick a point + // internal to the projected poly. + if (shares_edge) { + // Hole shares edge with face => face can't contain hole. + continue; + } + + // XXX: how is this possible? Doesn't share an edge, but + // also doesn't have any vertices that are not in + // common. Degenerate hole? + + // XXX: come up with a test case for this. + CARVE_FAIL("implement me"); + } + } + + + // XXX: use loop area to avoid some point-in-poly tests? Loop + // area is faster, but not sure which is more robust. + if (carve::geom2d::pointInPolySimple(face_loops_projected[j], test_p)) { +#if defined(CARVE_DEBUG) + std::cerr << "contains: " << i << " - " << j << std::endl; +#endif + containing_faces[i].push_back(j); + } else { +#if defined(CARVE_DEBUG) + std::cerr << "does not contain: " << i << " - " << j << std::endl; +#endif + } + } + +#if defined(CARVE_DEBUG) + if (containing_faces[i].size() == 0) { + //HOOK(drawFaceLoopWireframe(hole_loops[i], face->normal, 1.0, 0.0, 0.0, 1.0);); + std::cerr << "hole loop: "; + for (unsigned j = 0; j < hole_loops[i].size(); ++j) { + std::cerr << " " << hole_loops[i][j] << ":" << hole_loops[i][j]->v; + } + std::cerr << std::endl; + for (unsigned j = 0; j < face_loops.size(); ++j) { + //HOOK(drawFaceLoopWireframe(face_loops[j], face->normal, 0.0, 1.0, 0.0, 1.0);); + } + } +#endif + + // CARVE_ASSERT(containing_faces[i].size() >= 1); + } + } + + + + /** + * \brief Merge face loops and hole loops to produce a set of face loops without holes. + * + * @param[in] face The face from which these face loops derive. + * @param[in,out] f_loops A list of face loops. + * @param[in] h_loops A list of hole loops to be incorporated into face loops. + */ + static void mergeFacesAndHoles(const poly_t::face_t *face, + std::list > &f_loops, + std::list > &h_loops, + carve::csg::CSG::Hooks &hooks) { + std::vector > face_loops; + std::vector > hole_loops; + + std::vector > containing_faces; + std::map > > hole_shared_vertices; + + { + // move input face and hole loops to temp vectors. + size_t m; + face_loops.resize(f_loops.size()); + m = 0; + for (std::list >::iterator + i = f_loops.begin(), ie = f_loops.end(); + i != ie; + ++i, ++m) { + face_loops[m].swap((*i)); + } + + hole_loops.resize(h_loops.size()); + m = 0; + for (std::list >::iterator + i = h_loops.begin(), ie = h_loops.end(); + i != ie; + ++i, ++m) { + hole_loops[m].swap((*i)); + } + f_loops.clear(); + h_loops.clear(); + } + + // work out the embedding of holes and faces. + computeContainment(face, face_loops, hole_loops, containing_faces, hole_shared_vertices); + + int unassigned = (int)hole_loops.size(); + + std::vector > face_holes; + face_holes.resize(face_loops.size()); + + for (unsigned i = 0; i < containing_faces.size(); ++i) { + if (containing_faces[i].size() == 0) { + std::map > >::iterator it = hole_shared_vertices.find(i); + if (it != hole_shared_vertices.end()) { + std::map >::iterator it2 = (*it).second.begin(); + int f = (*it2).first; + unsigned h_idx = (*it2).second.first; + unsigned f_idx = (*it2).second.second; + + // patch the hole into the face directly. because + // f_loop[f_idx] == h_loop[h_idx], we don't need to + // duplicate the f_loop vertex. + + std::vector &f_loop = face_loops[f]; + std::vector &h_loop = hole_loops[i]; + + f_loop.insert(f_loop.begin() + f_idx + 1, h_loop.size(), NULL); + + unsigned p = f_idx + 1; + for (unsigned a = h_idx + 1; a < h_loop.size(); ++a, ++p) { + f_loop[p] = h_loop[a]; + } + for (unsigned a = 0; a <= h_idx; ++a, ++p) { + f_loop[p] = h_loop[a]; + } + +#if defined(CARVE_DEBUG) + std::cerr << "hook face " << f << " to hole " << i << "(vertex)" << std::endl; +#endif + } else { + std::cerr << "uncontained hole loop does not share vertices with any face loop!" << std::endl; + } + unassigned--; + } + } + + + // work out which holes are directly contained within which faces. + while (unassigned) { + std::set removed; + + for (unsigned i = 0; i < containing_faces.size(); ++i) { + if (containing_faces[i].size() == 1) { + int f = containing_faces[i][0]; + face_holes[f].push_back(i); +#if defined(CARVE_DEBUG) + std::cerr << "hook face " << f << " to hole " << i << std::endl; +#endif + removed.insert(f); + unassigned--; + } + } + for (std::set::iterator f = removed.begin(); f != removed.end(); ++f) { + for (unsigned i = 0; i < containing_faces.size(); ++i) { + containing_faces[i].erase(std::remove(containing_faces[i].begin(), + containing_faces[i].end(), + *f), + containing_faces[i].end()); + } + } + } + +#if 0 + // use old templated projection code to patch holes into faces. + for (unsigned i = 0; i < face_loops.size(); ++i) { + std::vector > face_hole_loops; + face_hole_loops.resize(face_holes[i].size()); + for (unsigned j = 0; j < face_holes[i].size(); ++j) { + face_hole_loops[j].swap(hole_loops[face_holes[i][j]]); + } + if (face_hole_loops.size()) { + + f_loops.push_back(carve::triangulate::incorporateHolesIntoPolygon(face->projector(), face_loops[i], face_hole_loops)); + } else { + f_loops.push_back(face_loops[i]); + } + } + +#else + // use new 2d-only hole patching code. + for (size_t i = 0; i < face_loops.size(); ++i) { + if (!face_holes[i].size()) { + f_loops.push_back(face_loops[i]); + continue; + } + + std::vector > projected_poly; + projected_poly.resize(face_holes[i].size() + 1); + projected_poly[0].reserve(face_loops[i].size()); + for (size_t j = 0; j < face_loops[i].size(); ++j) { + projected_poly[0].push_back(face->project(face_loops[i][j]->v)); + } + for (size_t j = 0; j < face_holes[i].size(); ++j) { + projected_poly[j+1].reserve(hole_loops[face_holes[i][j]].size()); + for (size_t k = 0; k < hole_loops[face_holes[i][j]].size(); ++k) { + projected_poly[j+1].push_back(face->project(hole_loops[face_holes[i][j]][k]->v)); + } + } + + std::vector > result = carve::triangulate::incorporateHolesIntoPolygon(projected_poly); + f_loops.push_back(std::vector()); + std::vector &out = f_loops.back(); + out.reserve(result.size()); + for (size_t j = 0; j < result.size(); ++j) { + if (result[j].first == 0) { + out.push_back(face_loops[i][result[j].second]); + } else { + out.push_back(hole_loops[face_holes[i][result[j].first-1]][result[j].second]); + } + } + } +#endif + } + + + + /** + * \brief Assemble the base loop for a face. + * + * The base loop is the original face loop, including vertices + * created by intersections crossing any of its edges. + * + * @param[in] face The face to process. + * @param[in] vmap + * @param[in] face_split_edges + * @param[in] divided_edges A mapping from edge pointer to sets of + * ordered vertices corrsponding to the intersection points + * on that edge. + * @param[out] base_loop A vector of the vertices of the base loop. + */ + static void assembleBaseLoop(const poly_t::face_t *face, + const carve::csg::detail::Data &data, + std::vector &base_loop) { + base_loop.clear(); + + // XXX: assumes that face->edges is in the same order as + // face->vertices. (Which it is) + for (size_t j = 0, je = face->nVertices(); j < je; ++j) { + base_loop.push_back(carve::csg::map_vertex(data.vmap, face->vertex(j))); + + const poly_t::edge_t *e = face->edge(j); + carve::csg::detail::EVVMap::const_iterator ev = data.divided_edges.find(e); + + if (ev != data.divided_edges.end()) { + const std::vector &ev_vec = ((*ev).second); + + if (e->v1 == face->vertex(j)) { + // edge is forward; + for (size_t k = 0, ke = ev_vec.size(); k < ke;) { + base_loop.push_back(ev_vec[k++]); + } + } else { + // edge is backward; + for (size_t k = ev_vec.size(); k;) { + base_loop.push_back(ev_vec[--k]); + } + } + } + } + } + + + + // the crossing_data structure holds temporary information regarding + // paths, and their relationship to the loop of edges that forms the + // face perimeter. + struct crossing_data { + std::vector *path; + size_t edge_idx[2]; + + crossing_data(std::vector *p, size_t e1, size_t e2) : path(p) { + edge_idx[0] = e1; edge_idx[1] = e2; + } + + bool operator<(const crossing_data &c) const { + // the sort order for paths is in order of increasing initial + // position on the edge loop, but decreasing final position. + return edge_idx[0] < c.edge_idx[0] || (edge_idx[0] == c.edge_idx[0] && edge_idx[1] > c.edge_idx[1]); + } + }; + + + + bool processCrossingEdges(const poly_t::face_t *face, + const carve::csg::VertexIntersections &vertex_intersections, + carve::csg::CSG::Hooks &hooks, + std::vector &base_loop, + std::vector > &paths, + std::vector > &loops, + std::list > &face_loops_out) { + const size_t N = base_loop.size(); + std::vector endpoint_indices; + + endpoint_indices.reserve(paths.size()); + + for (size_t i = 0; i < paths.size(); ++i) { + endpoint_indices.push_back(crossing_data(&paths[i], N, N)); + } + + // locate endpoints of paths on the base loop. + for (size_t i = 0; i < N; ++i) { + for (size_t j = 0; j < paths.size(); ++j) { + // test beginning of path. + if (paths[j].front() == base_loop[i]) { + if (endpoint_indices[j].edge_idx[0] == N) { + endpoint_indices[j].edge_idx[0] = i; + } else { + // there is a duplicated vertex in the face perimeter. The + // path might attach to either of the duplicate instances + // so we have to work out which is the right one to attach + // to. We assume it's the index currently being examined, + // if the path heads in a direction that's internal to the + // angle made by the prior and next edges of the face + // perimeter. Otherwise, leave it as the currently + // selected index (until another duplicate is found, if it + // exists, and is tested). + const std::vector &p = *endpoint_indices[j].path; + const size_t pN = p.size(); + + const poly_t::vertex_t *a, *b, *c; + a = base_loop[(i+N-1)%N]; + b = base_loop[i]; + c = base_loop[(i+1)%N]; + + const poly_t::vertex_t *adj = (p[0] == base_loop[i]) ? p[1] : p[pN-2]; + + if (carve::geom2d::internalToAngle(face->project(c->v), + face->project(b->v), + face->project(a->v), + face->project(adj->v))) { + endpoint_indices[j].edge_idx[0] = i; + } + } + } + + // test end of path. + if (paths[j].back() == base_loop[i]) { + if (endpoint_indices[j].edge_idx[1] == N) { + endpoint_indices[j].edge_idx[1] = i; + } else { + // Work out which of the duplicated vertices is the right + // one to attach to, as above. + const std::vector &p = *endpoint_indices[j].path; + const size_t pN = p.size(); + + const poly_t::vertex_t *a, *b, *c; + a = base_loop[(i+N-1)%N]; + b = base_loop[i]; + c = base_loop[(i+1)%N]; + + const poly_t::vertex_t *adj = (p[0] == base_loop[i]) ? p[1] : p[pN-2]; + + if (carve::geom2d::internalToAngle(face->project(c->v), + face->project(b->v), + face->project(a->v), + face->project(adj->v))) { + endpoint_indices[j].edge_idx[1] = i; + } + } + } + } + } + +#if defined(CARVE_DEBUG) + std::cerr << "### N: " << N << std::endl; + for (size_t i = 0; i < paths.size(); ++i) { + std::cerr << "### path: " << i << " endpoints: " << endpoint_indices[i].edge_idx[0] << " - " << endpoint_indices[i].edge_idx[1] << std::endl; + } +#endif + + + // divide paths up into those that connect to the base loop in two + // places (cross), and those that do not (noncross). + std::vector cross, noncross; + cross.reserve(endpoint_indices.size() + 1); + noncross.reserve(endpoint_indices.size()); + + for (size_t i = 0; i < endpoint_indices.size(); ++i) { +#if defined(CARVE_DEBUG) + std::cerr << "### orienting path: " << i << " endpoints: " << endpoint_indices[i].edge_idx[0] << " - " << endpoint_indices[i].edge_idx[1] << std::endl; +#endif + if (endpoint_indices[i].edge_idx[0] != N && endpoint_indices[i].edge_idx[1] != N) { + // Orient each path correctly. Paths should progress from + // smaller perimeter index to larger, but if the path starts + // and ends at the same perimeter index, then the decision + // needs to be made based upon area. + if (endpoint_indices[i].edge_idx[0] == endpoint_indices[i].edge_idx[1]) { + // The path forms a loop that starts and ends at the same + // vertex of the perimeter. In this case, we need to orient + // the path so that the constructed loop has the right + // signed area. + double area = carve::geom2d::signedArea(endpoint_indices[i].path->begin() + 1, + endpoint_indices[i].path->end(), + face->projector()); + std::cerr << "HITS THIS CODE - area=" << area << std::endl; + if (area < 0) { + // XXX: Create test case to check that this is the correct sign for the area. + std::reverse(endpoint_indices[i].path->begin(), endpoint_indices[i].path->end()); + } + } else { + if (endpoint_indices[i].edge_idx[0] > endpoint_indices[i].edge_idx[1]) { + std::swap(endpoint_indices[i].edge_idx[0], endpoint_indices[i].edge_idx[1]); + std::reverse(endpoint_indices[i].path->begin(), endpoint_indices[i].path->end()); + } + } + } + + if (endpoint_indices[i].edge_idx[0] != N && + endpoint_indices[i].edge_idx[1] != N && + endpoint_indices[i].edge_idx[0] != endpoint_indices[i].edge_idx[1]) { + cross.push_back(endpoint_indices[i]); + } else { + noncross.push_back(endpoint_indices[i]); + } + } + + // add a temporary crossing path that connects the beginning and the + // end of the base loop. this stops us from needing special case + // code to handle the left over loop after all the other crossing + // paths are considered. + std::vector base_loop_temp_path; + base_loop_temp_path.reserve(2); + base_loop_temp_path.push_back(base_loop.front()); + base_loop_temp_path.push_back(base_loop.back()); + + cross.push_back(crossing_data(&base_loop_temp_path, 0, base_loop.size() - 1)); +#if defined(CARVE_DEBUG) + std::cerr << "### crossing edge count (with sentinel): " << cross.size() << std::endl; +#endif + + // sort paths by increasing beginning point and decreasing ending point. + std::sort(cross.begin(), cross.end()); + std::sort(noncross.begin(), noncross.end()); + + // divide up the base loop based upon crossing paths. + std::vector > divided_base_loop; + divided_base_loop.reserve(cross.size()); + std::vector out; + + for (size_t i = 0; i < cross.size(); ++i) { + size_t j; + for (j = i + 1; + j < cross.size() && + cross[i].edge_idx[0] == cross[j].edge_idx[0] && + cross[i].edge_idx[1] == cross[j].edge_idx[1]; + ++j) {} + if (j - i >= 2) { + // when there are multiple paths that begin and end at the + // same point, they need to be ordered so that the constructed + // loops have the right orientation. this means that the loop + // made by taking path(i+1) forward, then path(i) backward + // needs to have negative area. this combined area is equal to + // the area of path(i+1) minus the area of path(i). in turn + // this means that the loop made by path path(i+1) alone has + // to have smaller signed area than loop made by path(i). + // thus, we sort paths in order of decreasing area. + + std::vector *> > order; + order.reserve(j - i); + for (size_t k = i; k < j; ++k) { + double area = carve::geom2d::signedArea(cross[k].path->begin(), + cross[k].path->end(), + face->projector()); +#if defined(CARVE_DEBUG) + std::cerr << "### k=" << k << " area=" << area << std::endl; +#endif + order.push_back(std::make_pair(-area, cross[k].path)); + } + std::sort(order.begin(), order.end()); + for (size_t k = i; k < j; ++k) { + cross[k].path = order[k-i].second; +#if defined(CARVE_DEBUG) + std::cerr << "### post-sort k=" << k << " cross[k].path->size()=" << cross[k].path->size() << std::endl; +#endif + } + } + } + + for (size_t i = 0; i < cross.size(); ++i) { +#if defined(CARVE_DEBUG) + std::cerr << "### i=" << i << " working on edge: " << cross[i].edge_idx[0] << " - " << cross[i].edge_idx[1] << std::endl; +#endif + size_t e1_0 = cross[i].edge_idx[0]; + size_t e1_1 = cross[i].edge_idx[1]; + std::vector &p1 = *cross[i].path; +#if defined(CARVE_DEBUG) + std::cerr << "### path size = " << p1.size() << std::endl; +#endif + + out.clear(); + + if (i < cross.size() - 1 && + cross[i+1].edge_idx[1] <= cross[i].edge_idx[1]) { +#if defined(CARVE_DEBUG) + std::cerr << "### complex case" << std::endl; +#endif + // complex case. crossing path with other crossing paths embedded within. + size_t pos = e1_0; + + size_t skip = i+1; + + while (pos != e1_1) { + + std::vector &p2 = *cross[skip].path; + size_t e2_0 = cross[skip].edge_idx[0]; + size_t e2_1 = cross[skip].edge_idx[1]; + + // copy up to the beginning of the next path. + std::copy(base_loop.begin() + pos, base_loop.begin() + e2_0, std::back_inserter(out)); + + CARVE_ASSERT(base_loop[e2_0] == p2[0]); + // copy the next path in the right direction. + std::copy(p2.begin(), p2.end() - 1, std::back_inserter(out)); + + // move to the position of the end of the path. + pos = e2_1; + + // advance to the next hit path. + do { + ++skip; + } while(skip != cross.size() && cross[skip].edge_idx[0] < e2_1); + + if (skip == cross.size()) break; + + // if the next hit path is past the start point of the current path, we're done. + if (cross[skip].edge_idx[0] >= e1_1) break; + } + + // copy up to the end of the path. + std::copy(base_loop.begin() + pos, base_loop.begin() + e1_1, std::back_inserter(out)); + + CARVE_ASSERT(base_loop[e1_1] == p1.back()); + std::copy(p1.rbegin(), p1.rend() - 1, std::back_inserter(out)); + } else { + size_t loop_size = (e1_1 - e1_0) + (p1.size() - 1); + out.reserve(loop_size); + + std::copy(base_loop.begin() + e1_0, base_loop.begin() + e1_1, std::back_inserter(out)); + std::copy(p1.rbegin(), p1.rend() - 1, std::back_inserter(out)); + + CARVE_ASSERT(out.size() == loop_size); + } + divided_base_loop.push_back(out); + +#if defined(CARVE_DEBUG) + { + std::vector projected; + projected.reserve(out.size()); + for (size_t n = 0; n < out.size(); ++n) { + projected.push_back(face->project(out[n]->v)); + } + + double A = carve::geom2d::signedArea(projected); + std::cerr << "### out area=" << A << std::endl; + CARVE_ASSERT(A <= 0); + } +#endif + } + + if (!noncross.size() && !loops.size()) { + populateListFromVector(divided_base_loop, face_loops_out); + return true; + } + + // for each divided base loop, work out which noncrossing paths and + // loops are part of it. use the old algorithm to combine these into + // the divided base loop. if none, the divided base loop is just + // output. + std::vector > proj; + std::vector > proj_aabb; + proj.resize(divided_base_loop.size()); + proj_aabb.resize(divided_base_loop.size()); + + // calculate an aabb for each divided base loop, to avoid expensive + // point-in-poly tests. + for (size_t i = 0; i < divided_base_loop.size(); ++i) { + proj[i].reserve(divided_base_loop[i].size()); + for (size_t j = 0; j < divided_base_loop[i].size(); ++j) { + proj[i].push_back(face->project(divided_base_loop[i][j]->v)); + } + proj_aabb[i].fit(proj[i].begin(), proj[i].end()); + } + + for (size_t i = 0; i < divided_base_loop.size(); ++i) { + std::vector *> inc; + carve::geom2d::P2 test; + + // for each noncrossing path, choose an endpoint that isn't on the + // base loop as a test point. + for (size_t j = 0; j < noncross.size(); ++j) { + if (noncross[j].edge_idx[0] < N) { + if (noncross[j].path->front() == base_loop[noncross[j].edge_idx[0]]) { + // noncrossing paths may be loops that run from the edge, back to the same vertex. + if (noncross[j].path->front() == noncross[j].path->back()) { + CARVE_ASSERT(noncross[j].path->size() > 2); + test = face->project((*noncross[j].path)[1]->v); + } else { + test = face->project(noncross[j].path->back()->v); + } + } else { + test = face->project(noncross[j].path->front()->v); + } + } else { + test = face->project(noncross[j].path->front()->v); + } + + if (proj_aabb[i].intersects(test) && + carve::geom2d::pointInPoly(proj[i], test).iclass != carve::POINT_OUT) { + inc.push_back(noncross[j].path); + } + } + + // for each loop, just test with any point. + for (size_t j = 0; j < loops.size(); ++j) { + test = face->project(loops[j].front()->v); + + if (proj_aabb[i].intersects(test) && + carve::geom2d::pointInPoly(proj[i], test).iclass != carve::POINT_OUT) { + inc.push_back(&loops[j]); + } + } + +#if defined(CARVE_DEBUG) + std::cerr << "### divided base loop:" << i << " inc.size()=" << inc.size() << std::endl; + std::cerr << "### inc = ["; + for (size_t j = 0; j < inc.size(); ++j) { + std::cerr << " " << inc[j]; + } + std::cerr << " ]" << std::endl; +#endif + + if (inc.size()) { + carve::csg::V2Set face_edges; + + for (size_t j = 0; j < divided_base_loop[i].size() - 1; ++j) { + face_edges.insert(std::make_pair(divided_base_loop[i][j], + divided_base_loop[i][j+1])); + } + + face_edges.insert(std::make_pair(divided_base_loop[i].back(), + divided_base_loop[i].front())); + + for (size_t j = 0; j < inc.size(); ++j) { + std::vector &path = *inc[j]; + for (size_t k = 0; k < path.size() - 1; ++k) { + face_edges.insert(std::make_pair(path[k], path[k+1])); + face_edges.insert(std::make_pair(path[k+1], path[k])); + } + } + + std::list > face_loops; + std::list > hole_loops; + + splitFace(face, face_edges, face_loops, hole_loops, vertex_intersections); + + if (hole_loops.size()) { + mergeFacesAndHoles(face, face_loops, hole_loops, hooks); + } + std::copy(face_loops.begin(), face_loops.end(), std::back_inserter(face_loops_out)); + } else { + face_loops_out.push_back(divided_base_loop[i]); + } + } + return true; + } + + + + void composeEdgesIntoPaths(const carve::csg::V2Set &edges, + const std::vector &extra_endpoints, + std::vector > &paths, + std::vector > &loops) { + using namespace carve::csg; + + detail::VVSMap vertex_graph; + detail::VSet endpoints; + + std::vector path; + + std::list > temp; + + // build graph from edges. + for (V2Set::const_iterator i = edges.begin(); i != edges.end(); ++i) { +#if defined(CARVE_DEBUG) + std::cerr << "### edge: " << (*i).first << " - " << (*i).second << std::endl; +#endif + vertex_graph[(*i).first].insert((*i).second); + vertex_graph[(*i).second].insert((*i).first); + } + + // find the endpoints in the graph. + // every vertex with number of incident edges != 2 is an endpoint. + for (detail::VVSMap::const_iterator i = vertex_graph.begin(); i != vertex_graph.end(); ++i) { + if ((*i).second.size() != 2) { +#if defined(CARVE_DEBUG) + std::cerr << "### endpoint: " << (*i).first << std::endl; +#endif + endpoints.insert((*i).first); + } + } + + // every vertex on the perimeter of the face is also an endpoint. + for (size_t i = 0; i < extra_endpoints.size(); ++i) { + if (vertex_graph.find(extra_endpoints[i]) != vertex_graph.end()) { +#if defined(CARVE_DEBUG) + std::cerr << "### extra endpoint: " << extra_endpoints[i] << std::endl; +#endif + endpoints.insert(extra_endpoints[i]); + } + } + + while (endpoints.size()) { + const poly_t::vertex_t *v = *endpoints.begin(); + detail::VVSMap::iterator p = vertex_graph.find(v); + if (p == vertex_graph.end()) { + endpoints.erase(endpoints.begin()); + continue; + } + + path.clear(); + path.push_back(v); + + while (1) { + CARVE_ASSERT(p != vertex_graph.end()); + + // pick a connected vertex to move to. + if ((*p).second.size() == 0) break; + + const poly_t::vertex_t *n = *((*p).second.begin()); + detail::VVSMap::iterator q = vertex_graph.find(n); + + // remove the link. + (*p).second.erase(n); + (*q).second.erase(v); + + // move on. + v = n; + path.push_back(v); + + if ((*p).second.size() == 0) vertex_graph.erase(p); + if ((*q).second.size() == 0) { + vertex_graph.erase(q); + q = vertex_graph.end(); + } + + p = q; + + if (v == path[0] || p == vertex_graph.end() || endpoints.find(v) != endpoints.end()) break; + } + CARVE_ASSERT(endpoints.find(path.back()) != endpoints.end()); + + temp.push_back(path); + } + + populateVectorFromList(temp, paths); + temp.clear(); + + // now only loops should remain in the graph. + while (vertex_graph.size()) { + detail::VVSMap::iterator p = vertex_graph.begin(); + const poly_t::vertex_t *v = (*p).first; + CARVE_ASSERT((*p).second.size() == 2); + + std::vector path; + path.clear(); + path.push_back(v); + + while (1) { + CARVE_ASSERT(p != vertex_graph.end()); + // pick a connected vertex to move to. + + const poly_t::vertex_t *n = *((*p).second.begin()); + detail::VVSMap::iterator q = vertex_graph.find(n); + + // remove the link. + (*p).second.erase(n); + (*q).second.erase(v); + + // move on. + v = n; + path.push_back(v); + + if ((*p).second.size() == 0) vertex_graph.erase(p); + if ((*q).second.size() == 0) vertex_graph.erase(q); + + p = q; + + if (v == path[0]) break; + } + + temp.push_back(path); + } + populateVectorFromList(temp, loops); + } + + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + void dumpFacesAndHoles(const std::list > &face_loops, + const std::list > &hole_loops) { + std::map v_included; + + for (std::list >::const_iterator + i = face_loops.begin(); i != face_loops.end(); ++i) { + for (size_t j = 0; j < (*i).size(); ++j) { + if (v_included.find((*i)[j]) == v_included.end()) { + size_t &p = v_included[(*i)[j]]; + p = v_included.size() - 1; + } + } + } + + for (std::list >::const_iterator + i = hole_loops.begin(); i != hole_loops.end(); ++i) { + for (size_t j = 0; j < (*i).size(); ++j) { + if (v_included.find((*i)[j]) == v_included.end()) { + size_t &p = v_included[(*i)[j]]; + p = v_included.size() - 1; + } + } + } + + carve::line::PolylineSet fh; + fh.vertices.resize(v_included.size()); + for (std::map::const_iterator + i = v_included.begin(); i != v_included.end(); ++i) { + fh.vertices[(*i).second].v = (*i).first->v; + } + + { + std::vector connected; + for (std::list >::const_iterator + i = face_loops.begin(); i != face_loops.end(); ++i) { + connected.clear(); + for (size_t j = 0; j < (*i).size(); ++j) { + connected.push_back(v_included[(*i)[j]]); + } + fh.addPolyline(true, connected.begin(), connected.end()); + } + for (std::list >::const_iterator + i = hole_loops.begin(); i != hole_loops.end(); ++i) { + connected.clear(); + for (size_t j = 0; j < (*i).size(); ++j) { + connected.push_back(v_included[(*i)[j]]); + } + fh.addPolyline(true, connected.begin(), connected.end()); + } + } + + std::string out("/tmp/hole_merge.ply"); + ::writePLY(out, &fh, true); + } +#endif + + + + template + std::string ptrstr(const T *ptr) { + std::ostringstream s; + s << ptr; + return s.str().substr(1); + } + + void dumpAsGraph(const poly_t::face_t *face, + const std::vector &base_loop, + const carve::csg::V2Set &face_edges, + const carve::csg::V2Set &split_edges) { + std::map proj; + + for (size_t i = 0; i < base_loop.size(); ++i) { + proj[base_loop[i]] = face->project(base_loop[i]->v); + } + for (carve::csg::V2Set::iterator i = split_edges.begin(); i != split_edges.end(); ++i) { + proj[(*i).first] = face->project((*i).first->v); + proj[(*i).second] = face->project((*i).second->v); + } + + { + carve::geom2d::P2 lo, hi; + std::map::iterator i; + i = proj.begin(); + lo = hi = (*i).second; + for (; i != proj.end(); ++i) { + lo.x = std::min(lo.x, (*i).second.x); lo.y = std::min(lo.y, (*i).second.y); + hi.x = std::max(hi.x, (*i).second.x); hi.y = std::max(hi.y, (*i).second.y); + } + for (i = proj.begin(); i != proj.end(); ++i) { + (*i).second.x = ((*i).second.x - lo.x) / (hi.x - lo.x) * 10; + (*i).second.y = ((*i).second.y - lo.y) / (hi.y - lo.y) * 10; + } + } + + std::cerr << "graph G {\nnode [shape=circle,style=filled,fixedsize=true,width=\".1\",height=\".1\"];\nedge [len=4]\n"; + for (std::map::iterator i = proj.begin(); i != proj.end(); ++i) { + std::cerr << " " << ptrstr((*i).first) << " [pos=\"" << (*i).second.x << "," << (*i).second.y << "!\"];\n"; + } + for (carve::csg::V2Set::iterator i = face_edges.begin(); i != face_edges.end(); ++i) { + std::cerr << " " << ptrstr((*i).first) << " -- " << ptrstr((*i).second) << ";\n"; + } + for (carve::csg::V2Set::iterator i = split_edges.begin(); i != split_edges.end(); ++i) { + std::cerr << " " << ptrstr((*i).first) << " -- " << ptrstr((*i).second) << " [color=\"blue\"];\n"; + } + std::cerr << "};\n"; + } + + void generateOneFaceLoop(const poly_t::face_t *face, + const carve::csg::detail::Data &data, + const carve::csg::VertexIntersections &vertex_intersections, + carve::csg::CSG::Hooks &hooks, + std::list > &face_loops) { + using namespace carve::csg; + + std::vector base_loop; + std::list > hole_loops; + + assembleBaseLoop(face, data, base_loop); + + detail::FV2SMap::const_iterator fse_iter = data.face_split_edges.find(face); + + face_loops.clear(); + + if (fse_iter == data.face_split_edges.end()) { + // simple case: input face is output face (possibly with the + // addition of vertices at intersections). + face_loops.push_back(base_loop); + return; + } + + // complex case: input face is split into multiple output faces. + V2Set face_edges; + + for (size_t j = 0, je = base_loop.size() - 1; j < je; ++j) { + face_edges.insert(std::make_pair(base_loop[j], base_loop[j + 1])); + } + face_edges.insert(std::make_pair(base_loop.back(), base_loop[0])); + + // collect the split edges (as long as they're not on the perimeter) + const detail::FV2SMap::mapped_type &fse = ((*fse_iter).second); + + // split_edges contains all of the edges created by intersections + // that aren't part of the perimeter of the face. + V2Set split_edges; + + for (detail::FV2SMap::mapped_type::const_iterator + j = fse.begin(), je = fse.end(); + j != je; + ++j) { + const poly_t::vertex_t *v1 = ((*j).first), *v2 = ((*j).second); + + if (face_edges.find(std::make_pair(v1, v2)) == face_edges.end() && + face_edges.find(std::make_pair(v2, v1)) == face_edges.end()) { + + split_edges.insert(ordered_edge(v1, v2)); + } + } + + // face is unsplit. + if (!split_edges.size()) { + face_loops.push_back(base_loop); + return; + } + +#if defined(CARVE_DEBUG) + dumpAsGraph(face, base_loop, face_edges, split_edges); +#endif + +#if 0 + // old face splitting method. + for (V2Set::const_iterator i = split_edges.begin(); i != split_edges.end(); ++i) { + face_edges.insert(std::make_pair((*i).first, (*i).second)); + face_edges.insert(std::make_pair((*i).second, (*i).first)); + } + splitFace(face, face_edges, face_loops, hole_loops, vertex_intersections); + + if (hole_loops.size()) { + mergeFacesAndHoles(face, face_loops, hole_loops, hooks); + } + return; +#endif + +#if defined(CARVE_DEBUG) + std::cerr << "### split_edges.size(): " << split_edges.size() << std::endl; +#endif + if (split_edges.size() == 1) { + // handle the common case of a face that's split by a single edge. + const poly_t::vertex_t *v1 = split_edges.begin()->first; + const poly_t::vertex_t *v2 = split_edges.begin()->second; + + std::vector::iterator vi1 = std::find(base_loop.begin(), base_loop.end(), v1); + std::vector::iterator vi2 = std::find(base_loop.begin(), base_loop.end(), v2); + + if (vi1 != base_loop.end() && vi2 != base_loop.end()) { + // this is an inserted edge that connects two points on the base loop. nice and simple. + if (vi2 < vi1) std::swap(vi1, vi2); + + size_t loop1_size = vi2 - vi1 + 1; + size_t loop2_size = base_loop.size() + 2 - loop1_size; + + std::vector l1; + std::vector l2; + + l1.reserve(loop1_size); + l2.reserve(loop2_size); + + std::copy(vi1, vi2+1, std::back_inserter(l1)); + std::copy(vi2, base_loop.end(), std::back_inserter(l2)); + std::copy(base_loop.begin(), vi1+1, std::back_inserter(l2)); + + CARVE_ASSERT(l1.size() == loop1_size); + CARVE_ASSERT(l2.size() == loop2_size); + + face_loops.push_back(l1); + face_loops.push_back(l2); + + return; + } + } + + std::vector > paths; + std::vector > loops; + + // Take the split edges and compose them into a set of paths and + // loops. Loops are edge paths that do not touch the boundary, or + // any other path or loop - they are holes cut out of the centre + // of the face. Paths are made up of all the other edge segments, + // and start and end at the face perimeter, or where they meet + // another path (sometimes both cases will be true). + composeEdgesIntoPaths(split_edges, base_loop, paths, loops); + +#if defined(CARVE_DEBUG) + std::cerr << "### paths.size(): " << paths.size() << std::endl; + std::cerr << "### loops.size(): " << loops.size() << std::endl; +#endif + + if (!paths.size()) { + // Loops found by composeEdgesIntoPaths() can't touch the + // boundary, or each other, so we can deal with the no paths + // case simply. The hole loops are the loops produced by + // composeEdgesIntoPaths() oriented so that their signed area + // wrt. the face is negative. The face loops are the base loop + // plus the hole loops, reversed. + face_loops.push_back(base_loop); + + for (size_t i = 0; i < loops.size(); ++i) { + hole_loops.push_back(std::vector()); + hole_loops.back().reserve(loops[i].size()-1); + std::copy(loops[i].begin(), loops[i].end()-1, std::back_inserter(hole_loops.back())); + + face_loops.push_back(std::vector()); + face_loops.back().reserve(loops[i].size()-1); + std::copy(loops[i].rbegin()+1, loops[i].rend(), std::back_inserter(face_loops.back())); + + std::vector projected; + projected.reserve(face_loops.back().size()); + for (size_t i = 0; i < face_loops.back().size(); ++i) { + projected.push_back(face->project(face_loops.back()[i]->v)); + } + + if (carve::geom2d::signedArea(projected) > 0.0) { + std::swap(face_loops.back(), hole_loops.back()); + } + } + + // if there are holes, then they need to be merged with faces. + if (hole_loops.size()) { + mergeFacesAndHoles(face, face_loops, hole_loops, hooks); + } + } else { + if (!processCrossingEdges(face, vertex_intersections, hooks, base_loop, paths, loops, face_loops)) { + // complex case - fall back to old edge tracing code. +#if defined(CARVE_DEBUG) + std::cerr << "### processCrossingEdges failed. Falling back to edge tracing code" << std::endl; +#endif + for (V2Set::const_iterator i = split_edges.begin(); i != split_edges.end(); ++i) { + face_edges.insert(std::make_pair((*i).first, (*i).second)); + face_edges.insert(std::make_pair((*i).second, (*i).first)); + } + splitFace(face, face_edges, face_loops, hole_loops, vertex_intersections); + + if (hole_loops.size()) { + mergeFacesAndHoles(face, face_loops, hole_loops, hooks); + } + } + } + } + + + +} + + + +/** + * \brief Build a set of face loops for all (split) faces of a Polyhedron. + * + * @param[in] poly The polyhedron to process + * @param vmap + * @param face_split_edges + * @param divided_edges + * @param[out] face_loops_out The resulting face loops + * + * @return The number of edges generated. + */ +size_t carve::csg::CSG::generateFaceLoops(const poly_t *poly, + const detail::Data &data, + FaceLoopList &face_loops_out) { + static carve::TimingName FUNC_NAME("CSG::generateFaceLoops()"); + carve::TimingBlock block(FUNC_NAME); + size_t generated_edges = 0; + std::vector base_loop; + std::list > face_loops; + + for (std::vector::const_iterator + i = poly->faces.begin(), e = poly->faces.end(); + i != e; + ++i) { + const poly_t::face_t *face = &(*i); + +#if defined(CARVE_DEBUG) + double in_area = 0.0, out_area = 0.0; + + { + std::vector base_loop; + assembleBaseLoop(face, data, base_loop); + + { + std::vector projected; + projected.reserve(base_loop.size()); + for (size_t n = 0; n < base_loop.size(); ++n) { + projected.push_back(face->project(base_loop[n]->v)); + } + + in_area = carve::geom2d::signedArea(projected); + std::cerr << "### in_area=" << in_area << std::endl; + } + } +#endif + + generateOneFaceLoop(face, data, vertex_intersections, hooks, face_loops); + +#if defined(CARVE_DEBUG) + { + V2Set face_edges; + + std::vector base_loop; + assembleBaseLoop(face, data, base_loop); + + for (size_t j = 0, je = base_loop.size() - 1; j < je; ++j) { + face_edges.insert(std::make_pair(base_loop[j+1], base_loop[j])); + } + face_edges.insert(std::make_pair(base_loop[0], base_loop.back())); + for (std::list >::const_iterator fli = face_loops.begin(); fli != face_loops.end(); ++ fli) { + + { + std::vector projected; + projected.reserve((*fli).size()); + for (size_t n = 0; n < (*fli).size(); ++n) { + projected.push_back(face->project((*fli)[n]->v)); + } + + double area = carve::geom2d::signedArea(projected); + std::cerr << "### loop_area[" << std::distance((std::list >::const_iterator)face_loops.begin(), fli) << "]=" << area << std::endl; + out_area += area; + } + + const std::vector &fl = *fli; + for (size_t j = 0, je = fl.size() - 1; j < je; ++j) { + face_edges.insert(std::make_pair(fl[j], fl[j+1])); + } + face_edges.insert(std::make_pair(fl.back(), fl[0])); + } + for (V2Set::const_iterator j = face_edges.begin(); j != face_edges.end(); ++j) { + if (face_edges.find(std::make_pair((*j).second, (*j).first)) == face_edges.end()) { + std::cerr << "### error: unmatched edge [" << (*j).first << "-" << (*j).second << "]" << std::endl; + } + } + std::cerr << "### out_area=" << out_area << std::endl; + if (out_area != in_area) { + std::cerr << "### error: area does not match. delta = " << (out_area - in_area) << std::endl; + // CARVE_ASSERT(fabs(out_area - in_area) < 1e-5); + } + } +#endif + + // now record all the resulting face loops. +#if defined(CARVE_DEBUG) + std::cerr << "### ======" << std::endl; +#endif + for (std::list >::const_iterator + f = face_loops.begin(), fe = face_loops.end(); + f != fe; + ++f) { +#if defined(CARVE_DEBUG) + std::cerr << "### loop:"; + for (size_t i = 0; i < (*f).size(); ++i) { + std::cerr << " " << (*f)[i]; + } + std::cerr << std::endl; +#endif + + face_loops_out.append(new FaceLoop(face, *f)); + generated_edges += (*f).size(); + } +#if defined(CARVE_DEBUG) + std::cerr << "### ======" << std::endl; +#endif + } + return generated_edges; +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_group.cpp b/thirdparty/carve-1.4.0/lib/intersect_group.cpp new file mode 100644 index 00000000..8f92edaa --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_group.cpp @@ -0,0 +1,232 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include "csg_detail.hpp" +#include "intersect_common.hpp" + +void carve::csg::CSG::makeEdgeMap(const carve::csg::FaceLoopList &loops, + size_t edge_count, + detail::LoopEdges &edge_map) { +#if defined(UNORDERED_COLLECTIONS_SUPPORT_RESIZE) + edge_map.resize(edge_count); +#endif + + for (carve::csg::FaceLoop *i = loops.head; i; i = i->next) { + edge_map.addFaceLoop(i); + i->group = NULL; + } +} + +#include + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) +void writePLY(std::string &out_file, const carve::poly::Polyhedron *poly, bool ascii); +void writePLY(std::string &out_file, const carve::line::PolylineSet *lines, bool ascii); +#endif + +void carve::csg::CSG::findSharedEdges(const detail::LoopEdges &edge_map_a, + const detail::LoopEdges &edge_map_b, + V2Set &shared_edges) { + for (detail::LoopEdges::const_iterator + i = edge_map_a.begin(), e = edge_map_a.end(); + i != e; + ++i) { + detail::LoopEdges::const_iterator j = edge_map_b.find((*i).first); + if (j != edge_map_b.end()) { + shared_edges.insert((*i).first); + } + } + +#if defined(CARVE_DEBUG) + detail::VVSMap edge_graph; + + for (V2Set::const_iterator i = shared_edges.begin(); i != shared_edges.end(); ++i) { + edge_graph[(*i).first].insert((*i).second); + edge_graph[(*i).second].insert((*i).first); + } + + std::cerr << "*** testing consistency of edge graph" << std::endl; + for (detail::VVSMap::const_iterator i = edge_graph.begin(); i != edge_graph.end(); ++i) { + if ((*i).second.size() > 2) { + std::cerr << "branch at: " << (*i).first << std::endl; + } + if ((*i).second.size() == 1) { + std::cerr << "endpoint at: " << (*i).first << std::endl; + std::cerr << "coordinate: " << (*i).first->v << std::endl; + } + } + + { + carve::line::PolylineSet intersection_graph; + intersection_graph.vertices.resize(edge_graph.size()); + std::map vmap; + + size_t j = 0; + for (detail::VVSMap::const_iterator i = edge_graph.begin(); i != edge_graph.end(); ++i) { + intersection_graph.vertices[j].v = (*i).first->v; + vmap[(*i).first] = j++; + } + + while (edge_graph.size()) { + detail::VVSMap::iterator prior_i = edge_graph.begin(); + const carve::poly::Polyhedron::vertex_t *prior = (*prior_i).first; + std::vector connected; + connected.push_back(vmap[prior]); + while (prior_i != edge_graph.end() && (*prior_i).second.size()) { + const carve::poly::Polyhedron::vertex_t *next = *(*prior_i).second.begin(); + detail::VVSMap::iterator next_i = edge_graph.find(next); + assert(next_i != edge_graph.end()); + connected.push_back(vmap[next]); + (*prior_i).second.erase(next); + (*next_i).second.erase(prior); + if (!(*prior_i).second.size()) { edge_graph.erase(prior_i); prior_i = edge_graph.end(); } + if (!(*next_i).second.size()) { edge_graph.erase(next_i); next_i = edge_graph.end(); } + prior_i = next_i; + prior = next; + } + bool closed = connected.front() == connected.back(); + for (size_t k = 0; k < connected.size(); ++k) { + std::cerr << " " << connected[k]; + } + std::cerr << std::endl; + intersection_graph.addPolyline(closed, connected.begin(), connected.end()); + } + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + std::string out("/tmp/intersection.ply"); + ::writePLY(out, &intersection_graph, true); +#endif + } + + std::cerr << "*** edge graph consistency test done" << std::endl; +#endif +} + + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) +static carve::poly::Polyhedron *groupToPolyhedron(const carve::csg::FaceLoopGroup &grp) { + const carve::csg::FaceLoopList &fl = grp.face_loops; + std::vector faces; + faces.reserve(fl.size()); + for (carve::csg::FaceLoop *f = fl.head; f; f = f->next) { + faces.push_back(carve::poly::Polyhedron::face_t()); + faces.back().init(f->orig_face, f->vertices, false); + } + carve::poly::Polyhedron *poly = new carve::poly::Polyhedron(faces); + + poly->canonicalize(); + return poly; +} +#endif + + + +void carve::csg::CSG::groupFaceLoops(carve::csg::FaceLoopList &face_loops, + const carve::csg::detail::LoopEdges &loop_edges, + const carve::csg::V2Set &no_cross, + carve::csg::FLGroupList &out_loops) { + // Find all the groups of face loops that are connected by edges + // that are not part of no_cross. + // this could potentially be done with a disjoint set data-structure. +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + static int call_num = 0; + call_num++; +#endif + + static carve::TimingName GROUP_FACE_LOOPS("groupFaceLoops()"); + + carve::TimingBlock block(GROUP_FACE_LOOPS); + + int tag_num = 0; + while (face_loops.size()) { + out_loops.push_back(FaceLoopGroup()); + carve::csg::FaceLoopGroup &group = (out_loops.back()); + carve::csg::FaceLoopList &curr = (group.face_loops); + carve::csg::V2Set &perim = (group.perimeter); + + carve::csg::FaceLoop *expand = face_loops.head; + + expand->group = &group; + face_loops.remove(expand); + curr.append(expand); + + while (expand) { + std::vector &loop = (expand->vertices); + const carve::poly::Polyhedron::vertex_t *v1, *v2; + + v1 = loop.back(); + for (size_t i = 0; i < loop.size(); ++i) { + v2 = loop[i]; + + carve::csg::V2Set::const_iterator nc = no_cross.find(std::make_pair(v1, v2)); + if (nc == no_cross.end()) { + carve::csg::detail::LoopEdges::const_iterator j; + + j = loop_edges.find(std::make_pair(v1, v2)); + if (j != loop_edges.end()) { + for (std::list::const_iterator + k = (*j).second.begin(), ke = (*j).second.end(); + k != ke; ++k) { + if ((*k)->group != NULL || + (*k)->orig_face->manifold_id != expand->orig_face->manifold_id) continue; + face_loops.remove((*k)); + curr.append((*k)); + (*k)->group = &group; + } + } + + j = loop_edges.find(std::make_pair(v2, v1)); + if (j != loop_edges.end()) { + for (std::list::const_iterator + k = (*j).second.begin(), ke = (*j).second.end(); + k != ke; ++k) { + if ((*k)->group != NULL || + (*k)->orig_face->manifold_id != expand->orig_face->manifold_id) continue; + face_loops.remove((*k)); + curr.append((*k)); + (*k)->group = &group; + } + } + } else { + perim.insert(std::make_pair(v1, v2)); + } + v1 = v2; + } + expand = expand->next; + } + tag_num++; + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + { + carve::poly::Polyhedron *poly = groupToPolyhedron(group); + char buf[128]; + sprintf(buf, "/tmp/group-%d-%p.ply", call_num, &curr); + std::string out(buf); + ::writePLY(out, poly, false); + delete poly; + } +#endif + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersect_half_classify_group.cpp b/thirdparty/carve-1.4.0/lib/intersect_half_classify_group.cpp new file mode 100644 index 00000000..806b12ef --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersect_half_classify_group.cpp @@ -0,0 +1,221 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include +#include + +#include + +#include "intersect_common.hpp" +#include "intersect_classify_common.hpp" +#include "intersect_classify_common_impl.hpp" + +typedef carve::poly::Polyhedron poly_t; + +namespace carve { + namespace csg { + + namespace { + struct GroupPoly : public CSG::Collector { + const poly_t *want_groups_from; + std::list > &out; + + struct face_data_t { + poly_t::face_t *face; + const poly_t::face_t *orig_face; + bool flipped; + face_data_t(poly_t::face_t *_face, + const poly_t::face_t *_orig_face, + bool _flipped) : face(_face), orig_face(_orig_face), flipped(_flipped) { + }; + }; + + GroupPoly(const poly_t *poly, + std::list > &_out) : + CSG::Collector(), + want_groups_from(poly), + out(_out) { + } + + virtual ~GroupPoly() { + } + + virtual void collect(FaceLoopGroup *grp, CSG::Hooks &hooks) { + if (grp->face_loops.head->orig_face->owner != want_groups_from) return; + + std::list &cinfo = (grp->classification); + if (cinfo.size() == 0) { + std::cerr << "WARNING! group " << grp << " has no classification info!" << std::endl; + return; + } + // XXX: check all the cinfo elements for consistency. + FaceClass fc = cinfo.front().classification; + + std::list faces; + std::vector new_faces; + for (FaceLoop *loop = grp->face_loops.head; loop != NULL; loop = loop->next) { + new_faces.clear(); + new_faces.push_back(loop->orig_face->create(loop->vertices, false)); + hooks.processOutputFace(new_faces, loop->orig_face, false); + for (size_t i = 0; i < new_faces.size(); ++i) { + faces.push_back(face_data_t(new_faces[i], loop->orig_face, false)); + } + } + + std::vector f; + f.reserve(faces.size()); + for (std::list::iterator i = faces.begin(); i != faces.end(); ++i) { + f.push_back(poly_t::face_t()); + std::swap(f.back(), *(*i).face); + delete (*i).face; + (*i).face = &f.back(); + } + + std::vector vertices; + carve::csg::VVMap vmap; + + poly_t::collectFaceVertices(f, vertices, vmap); + + poly_t *p = new poly_t(f, vertices); + + if (hooks.hasHook(carve::csg::CSG::Hooks::RESULT_FACE_HOOK)) { + for (std::list::iterator i = faces.begin(); i != faces.end(); ++i) { + hooks.resultFace((*i).face, (*i).orig_face, (*i).flipped); + } + } + + out.push_back(std::make_pair(fc, p)); + } + + virtual poly_t *done(CSG::Hooks &hooks) { + return NULL; + } + }; + + class FaceMaker { + public: + + bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const { + return vclass[f->vertices[index]].cls[0] == POINT_ON; + } + + void explain(FaceLoop *f, size_t index, PointClass pc) const { +#if defined(CARVE_DEBUG) + std::cerr << "face loop " << f << " from poly b is easy because vertex " << index << " (" << f->vertices[index]->v << ") is " << ENUM(pc) << std::endl; +#endif + } + }; + + class HalfClassifyFaceGroups { + public: + std::list > &b_out; + CSG::Hooks &hooks; + + HalfClassifyFaceGroups(std::list > &c, CSG::Hooks &h) : b_out(c), hooks(h) { + } + + void classifySimple(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const poly_t *poly_a, + const poly_t *poly_b) const { + GroupPoly group_poly(poly_b, b_out); + performClassifySimpleOnFaceGroups(a_loops_grouped, b_loops_grouped, poly_a, poly_b, group_poly, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "after removal of simple on groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + void classifyEasy(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const poly_t *poly_a, + const poly_t *poly_b) const { + GroupPoly group_poly(poly_b, b_out); + performClassifyEasyFaceGroups(b_loops_grouped, poly_a, vclass, FaceMaker(), group_poly, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "after removal of easy groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + void classifyHard(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const poly_t *poly_a, + const poly_t *poly_b) const { + GroupPoly group_poly(poly_b, b_out); + performClassifyHardFaceGroups(b_loops_grouped, poly_a, FaceMaker(), group_poly, hooks); +#if defined(CARVE_DEBUG) + std::cerr << "after removal of hard groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + + } + + void faceLoopWork(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped, + VertexClassification &vclass, + const poly_t *poly_a, + const poly_t *poly_b) const { + GroupPoly group_poly(poly_b, b_out); + performFaceLoopWork(poly_a, b_loops_grouped, *this, group_poly, hooks); + } + + void postRemovalCheck(FLGroupList &a_loops_grouped, + FLGroupList &b_loops_grouped) const { +#if defined(CARVE_DEBUG) + std::cerr << "after removal of on groups: " << b_loops_grouped.size() << " b groups" << std::endl; +#endif + } + + bool faceLoopSanityChecker(FaceLoopGroup &i) const { + return false; + return i.face_loops.size() != 1; + } + + void finish(FLGroupList &a_loops_grouped,FLGroupList &b_loops_grouped) const { +#if defined(CARVE_DEBUG) + if (a_loops_grouped.size() || b_loops_grouped.size()) + std::cerr << "UNCLASSIFIED! a=" << a_loops_grouped.size() << ", b=" << b_loops_grouped.size() << std::endl; +#endif + } + }; + } + + void CSG::halfClassifyFaceGroups(const V2Set &shared_edges, + VertexClassification &vclass, + const poly_t *poly_a, + FLGroupList &a_loops_grouped, + const detail::LoopEdges &a_edge_map, + const poly_t *poly_b, + FLGroupList &b_loops_grouped, + const detail::LoopEdges &b_edge_map, + std::list > &b_out) { + HalfClassifyFaceGroups classifier(b_out, hooks); + GroupPoly group_poly(poly_b, b_out); + performClassifyFaceGroups(a_loops_grouped, b_loops_grouped, vclass, poly_a, poly_b, classifier, group_poly, hooks); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/intersection.cpp b/thirdparty/carve-1.4.0/lib/intersection.cpp new file mode 100644 index 00000000..dd4ad372 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/intersection.cpp @@ -0,0 +1,83 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include +#include +#include +#include + + + +void carve::csg::Intersections::collect(const IObj &obj, + std::vector *collect_v, + std::vector *collect_e, + std::vector *collect_f) const { + carve::csg::Intersections::const_iterator i = find(obj); + if (i != end()) { + Intersections::mapped_type::const_iterator a, b; + for (a = (*i).second.begin(), b = (*i).second.end(); a != b; ++a) { + switch ((*a).first.obtype) { + case carve::csg::IObj::OBTYPE_VERTEX: + if (collect_v) collect_v->push_back((*a).first.vertex); + break; + case carve::csg::IObj::OBTYPE_EDGE: + if (collect_e) collect_e->push_back((*a).first.edge); + break; + case carve::csg::IObj::OBTYPE_FACE: + if (collect_f) collect_f->push_back((*a).first.face); + break; + default: + throw carve::exception("should not happen " __FILE__ ":" XSTR(__LINE__)); + } + } + } +} + + + +bool carve::csg::Intersections::intersectsFace(const carve::poly::Polyhedron::vertex_t *v, const carve::poly::Polyhedron::face_t *f) const { + const_iterator i = find(v); + if (i != end()) { + mapped_type::const_iterator a, b; + + for (a = (*i).second.begin(), b = (*i).second.end(); a != b; ++a) { + switch ((*a).first.obtype) { + case IObj::OBTYPE_VERTEX: { + for (size_t j = 0; j < f->nVertices(); ++j) if (f->vertex(j) == (*a).first.vertex) return true; + break; + } + case carve::csg::IObj::OBTYPE_EDGE: { + for (size_t j = 0; j < f->nEdges(); ++j) if (f->edge(j) == (*a).first.edge) return true; + break; + } + case carve::csg::IObj::OBTYPE_FACE: { + if ((*a).first.face == f) return true; + break; + } + default: + throw carve::exception("should not happen " __FILE__ ":" XSTR(__LINE__)); + } + } + } + return false; +} diff --git a/thirdparty/carve-1.4.0/lib/math.cpp b/thirdparty/carve-1.4.0/lib/math.cpp new file mode 100644 index 00000000..0766efaa --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/math.cpp @@ -0,0 +1,343 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include + +#include + +#define M_2PI_3 2.0943951023931953 +#define M_SQRT_3_4 0.8660254037844386 +#define EPS std::numeric_limits::epsilon() + +namespace carve { + namespace math { + + struct Root { + double root; + int multiplicity; + + Root(double r) : root(r), multiplicity(1) {} + Root(double r, int m) : root(r), multiplicity(m) {} + }; + + void cplx_sqrt(double re, double im, + double &re_1, double &im_1, + double &re_2, double &im_2) { + if (re == 0.0 && im == 0.0) { + re_1 = re_2 = re; + im_1 = im_2 = im; + } else { + double d = sqrt(re * re + im * im); + re_1 = sqrt((d + re) / 2.0); + re_2 = re_1; + im_1 = fabs(sqrt((d - re) / 2.0)); + im_2 = -im_1; + } + } + + void cplx_cbrt(double re, double im, + double &re_1, double &im_1, + double &re_2, double &im_2, + double &re_3, double &im_3) { + if (re == 0.0 && im == 0.0) { + re_1 = re_2 = re_3 = re; + im_1 = im_2 = im_3 = im; + } else { + double r = cbrt(sqrt(re * re + im * im)); + double t = atan2(im, re) / 3.0; + re_1 = r * cos(t); + im_1 = r * sin(t); + re_2 = r * cos(t + M_TWOPI / 3.0); + im_2 = r * sin(t + M_TWOPI / 3.0); + re_3 = r * cos(t + M_TWOPI * 2.0 / 3.0); + im_3 = r * sin(t + M_TWOPI * 2.0 / 3.0); + } + } + + void add_root(std::vector &roots, double root) { + for (size_t i = 0; i < roots.size(); ++i) { + if (roots[i].root == root) { + roots[i].multiplicity++; + return; + } + } + roots.push_back(Root(root)); + } + + void linear_roots(double c1, double c0, std::vector &roots) { + roots.push_back(Root(c0 / c1)); + } + + void quadratic_roots(double c2, double c1, double c0, std::vector &roots) { + if (fabs(c2) < EPS) { + linear_roots(c1, c0, roots); + return; + } + + double p = 0.5 * c1 / c2; + double dis = p * p - c0 / c2; + + if (dis > 0.0) { + dis = sqrt(dis); + if (-p - dis != -p + dis) { + roots.push_back(Root(-p - dis)); + roots.push_back(Root(-p + dis)); + } else { + roots.push_back(Root(-p, 2)); + } + } + } + + void cubic_roots(double c3, double c2, double c1, double c0, std::vector &roots) { + int n_sol = 0; + double _r[3]; + + if (fabs(c3) < EPS) { + quadratic_roots(c2, c1, c0, roots); + return; + } + + if (fabs(c0) < EPS) { + quadratic_roots(c3, c2, c1, roots); + add_root(roots, 0.0); + return; + } + + double xN = -c2 / (3.0 * c3); + double yN = c0 + xN * (c1 + xN * (c2 + c3 * xN)); + + double delta_sq = (c2 * c2 - 3.0 * c3 * c1) / (9.0 * c3 * c3); + double h_sq = 4.0 / 9.0 * (c2 * c2 - 3.0 * c3 * c1) * (delta_sq * delta_sq); + double dis = yN * yN - h_sq; + + if (dis > EPS) { + // One real root, two complex roots. + + double dis_sqrt = sqrt(dis); + double r_p = yN - dis_sqrt; + double r_q = yN + dis_sqrt; + double p = cbrt(fabs(r_p)/(2.0 * c3)); + double q = cbrt(fabs(r_q)/(2.0 * c3)); + + if (r_p > 0.0) p = -p; + if (r_q > 0.0) q = -q; + + _r[0] = xN + p + q; + n_sol = 1; + + double re = xN - p * .5 - q * .5; + double im = p * M_SQRT_3_4 - q * M_SQRT_3_4; + + // root 2: xN + p * exp(M_2PI_3.i) + q * exp(-M_2PI_3.i); + // root 3: complex conjugate of root 2 + + if (im < EPS) { + _r[1] = _r[2] = re; + n_sol += 2; + } + } else if (dis < -EPS) { + // Three distinct real roots. + double theta = acos(-yN / sqrt(h_sq)) / 3.0; + double delta = sqrt(c2 * c2 - 3.0 * c3 * c1) / (3.0 * c3); + + _r[0] = xN + (2.0 * delta) * cos(theta); + _r[1] = xN + (2.0 * delta) * cos(M_2PI_3 - theta); + _r[2] = xN + (2.0 * delta) * cos(M_2PI_3 + theta); + n_sol = 3; + } else { + // Three real roots (two or three equal). + double r = yN / (2.0 * c3); + double delta = cbrt(r); + + _r[0] = xN + delta; + _r[1] = xN + delta; + _r[2] = xN - 2.0 * delta; + n_sol = 3; + } + + for (int i=0; i < n_sol; i++) { + add_root(roots, _r[i]); + } + } + + static void U(const Matrix3 &m, + double l, + double u[6], + double &u_max, + int &u_argmax) { + u[0] = (m._22 - l) * (m._33 - l) - m._23 * m._23; + u[1] = m._13 * m._23 - m._12 * (m._33 - l); + u[2] = m._12 * m._23 - m._13 * (m._22 - l); + u[3] = (m._11 - l) * (m._33 - l) - m._13 * m._13; + u[4] = m._12 * m._13 - m._23 * (m._11 - l); + u[5] = (m._11 - l) * (m._22 - l) - m._12 * m._12; + + u_max = -1.0; + u_argmax = -1; + + for (int i = 0; i < 6; ++i) { + if (u_max < fabs(u[i])) { u_max = fabs(u[i]); u_argmax = i; } + } + } + + static void eig1(const Matrix3 &m, double l, carve::geom3d::Vector &e) { + double u[6]; + double u_max; + int u_argmax; + + U(m, l, u, u_max, u_argmax); + + switch(u_argmax) { + case 0: + e.x = u[0]; e.y = u[1]; e.z = u[2]; break; + case 1: case 3: + e.x = u[1]; e.y = u[3]; e.z = u[4]; break; + case 2: case 4: case 5: + e.x = u[2]; e.y = u[4]; e.z = u[5]; break; + } + e.normalize(); + } + + static void eig2(const Matrix3 &m, double l, carve::geom3d::Vector &e1, carve::geom3d::Vector &e2) { + double u[6]; + double u_max; + int u_argmax; + + U(m, l, u, u_max, u_argmax); + + switch(u_argmax) { + case 0: case 1: + e1.x = -m._12; e1.y = m._11; e1.z = 0.0; + e2.x = -m._13 * m._11; e2.y = -m._13 * m._12; e2.z = m._11 * m._11 + m._12 * m._12; + break; + case 2: + e1.x = m._12; e1.y = 0.0; e1.z = -m._11; + e2.x = -m._12 * m._11; e2.y = m._11 * m._11 + m._13 * m._13; e2.z = -m._12 * m._13; + break; + case 3: case 4: + e1.x = 0.0; e1.y = -m._23; e1.z = -m._22; + e2.x = m._22 * m._22 + m._23 * m._23; e2.y = -m._12 * m._22; e2.z = -m._12 * m._23; + break; + case 5: + e1.x = 0.0; e1.y = -m._33; e1.z = m._23; + e2.x = m._23 * m._23 + m._33 * m._33; e2.y = -m._13 * m._23; e2.z = -m._13 * m._33; + } + e1.normalize(); + e2.normalize(); + } + + static void eig3(const Matrix3 &m, double l, carve::geom3d::Vector &e1, carve::geom3d::Vector &e2, carve::geom3d::Vector &e3) { + e1.x = 1.0; e1.y = 0.0; e1.z = 0.0; + e2.x = 0.0; e2.y = 1.0; e2.z = 0.0; + e3.x = 0.0; e3.y = 0.0; e3.z = 1.0; + } + + void eigSolveSymmetric(const Matrix3 &m, + double &l1, carve::geom3d::Vector &e1, + double &l2, carve::geom3d::Vector &e2, + double &l3, carve::geom3d::Vector &e3) { + double c0 = + m._11 * m._22 * m._33 + + 2.0 * m._12 * m._13 * m._23 - + m._11 * m._23 * m._23 - + m._22 * m._13 * m._13 - + m._33 * m._12 * m._12; + double c1 = + m._11 * m._22 - + m._12 * m._12 + + m._11 * m._33 - + m._13 * m._13 + + m._22 * m._33 - + m._23 * m._23; + double c2 = + m._11 + + m._22 + + m._33; + + double a = (3.0 * c1 - c2 * c2) / 3.0; + double b = (-2.0 * c2 * c2 * c2 + 9.0 * c1 * c2 - 27.0 * c0) / 27.0; + + double Q = b * b / 4.0 + a * a * a / 27.0; + + if (fabs(Q) < 1e-16) { + l1 = m._11; e1.x = 1.0; e1.y = 0.0; e1.z = 0.0; + l2 = m._22; e2.x = 0.0; e2.y = 1.0; e2.z = 0.0; + l3 = m._33; e3.x = 0.0; e3.y = 0.0; e3.z = 1.0; + } else if (Q > 0) { + l1 = l2 = c2 / 3.0 + cbrt(b / 2.0); + l3 = c2 / 3.0 - 2.0 * cbrt(b / 2.0); + + eig2(m, l1, e1, e2); + eig1(m, l3, e3); + } else if (Q < 0) { + double t = atan2(sqrt(-Q), -b / 2.0); + double cos_t3 = cos(t / 3.0); + double sin_t3 = sin(t / 3.0); + double r = cbrt(sqrt(b * b / 4.0 - Q)); + + l1 = c2 / 3.0 + 2 * r * cos_t3; + l2 = c2 / 3.0 - r * (cos_t3 + M_SQRT_3 * sin_t3); + l3 = c2 / 3.0 - r * (cos_t3 - M_SQRT_3 * sin_t3); + + eig1(m, l1, e1); + eig1(m, l2, e2); + eig1(m, l3, e3); + } + } + + void eigSolve(const Matrix3 &m, double &l1, double &l2, double &l3) { + double c3, c2, c1, c0; + std::vector roots; + + c3 = -1.0; + c2 = m._11 + m._22 + m._33; + c1 = + -(m._22 * m._33 + m._11 * m._22 + m._11 * m._33) + +(m._23 * m._32 + m._13 * m._31 + m._12 * m._21); + c0 = + +(m._11 * m._22 - m._12 * m._21) * m._33 + -(m._11 * m._23 - m._13 * m._21) * m._32 + +(m._12 * m._23 - m._13 * m._22) * m._31; + + cubic_roots(c3, c2, c1, c0, roots); + + for (size_t i = 0; i < roots.size(); i++) { + Matrix3 M(m); + M._11 -= roots[i].root; + M._22 -= roots[i].root; + M._33 -= roots[i].root; + // solve M.v = 0 + } + + std::cerr << "n_roots=" << roots.size() << std::endl; + for (size_t i = 0; i < roots.size(); i++) { + fprintf(stderr, " %.24f(%d)", roots[i].root, roots[i].multiplicity); + } + std::cerr << std::endl; + } + + } +} + diff --git a/thirdparty/carve-1.4.0/lib/octree.cpp b/thirdparty/carve-1.4.0/lib/octree.cpp new file mode 100644 index 00000000..4b93a616 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/octree.cpp @@ -0,0 +1,399 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include + +namespace carve { + namespace csg { + + Octree::Node::Node(const carve::geom3d::Vector &newMin, const carve::geom3d::Vector &newMax) : + parent(NULL), is_leaf(true), min(newMin), max(newMax) { + for (int i = 0; i < 8; ++i) children[i] = NULL; + aabb = Octree::makeAABB(this); + } + + Octree::Node::Node(Node *p, double x1, double y1, double z1, double x2, double y2, double z2) : + parent(p), is_leaf(true), min(carve::geom::VECTOR(x1, y1, z1)), max(carve::geom::VECTOR(x2, y2, z2)) { + for (int i = 0; i < 8; ++i) children[i] = NULL; + aabb = Octree::makeAABB(this); + } + + Octree::Node::~Node() { + for (int i = 0; i < 8; ++i) { + if (children[i] != NULL) { + (*children[i]).~Node(); + } + } + if (children[0] != NULL) { + char *ptr = (char*)children[0]; + delete[] ptr; + } + } + + bool Octree::Node::mightContain(const carve::poly::Face<3> &face) { + if (face.nVertices() == 3) { + return aabb.intersects(carve::geom::tri<3>(face.vertex(0)->v, face.vertex(1)->v, face.vertex(2)->v)); + } else { + return aabb.intersects(face.aabb) && aabb.intersects(face.plane_eqn); + } + } + + bool Octree::Node::mightContain(const carve::poly::Edge<3> &edge) { + return aabb.intersectsLineSegment(edge.v1->v, edge.v2->v); + } + + bool Octree::Node::mightContain(const carve::poly::Vertex<3> &p) { + return aabb.containsPoint(p.v); + } + + bool Octree::Node::hasChildren() { + return !is_leaf; + } + + bool Octree::Node::split() { + if (is_leaf && hasGeometry()) { + + carve::geom3d::Vector mid = 0.5 * (min + max); + char *ptr = new char[sizeof(Node)*8]; + children[0] = new (ptr + sizeof(Node) * 0) Node(this, min.x, min.y, min.z, mid.x, mid.y, mid.z); + children[1] = new (ptr + sizeof(Node) * 1) Node(this, mid.x, min.y, min.z, max.x, mid.y, mid.z); + children[2] = new (ptr + sizeof(Node) * 2) Node(this, min.x, mid.y, min.z, mid.x, max.y, mid.z); + children[3] = new (ptr + sizeof(Node) * 3) Node(this, mid.x, mid.y, min.z, max.x, max.y, mid.z); + children[4] = new (ptr + sizeof(Node) * 4) Node(this, min.x, min.y, mid.z, mid.x, mid.y, max.z); + children[5] = new (ptr + sizeof(Node) * 5) Node(this, mid.x, min.y, mid.z, max.x, mid.y, max.z); + children[6] = new (ptr + sizeof(Node) * 6) Node(this, min.x, mid.y, mid.z, mid.x, max.y, max.z); + children[7] = new (ptr + sizeof(Node) * 7) Node(this, mid.x, mid.y, mid.z, max.x, max.y, max.z); + + for (int i = 0; i < 8; ++i) { + putInside(faces, children[i], children[i]->faces); + putInside(edges, children[i], children[i]->edges); + putInside(vertices, children[i], children[i]->vertices); + } + + faces.clear(); + edges.clear(); + vertices.clear(); + is_leaf = false; + } + return is_leaf; + } + + template + void Octree::Node::putInside(const T &input, Node *child, T &output) { + for (typename T::const_iterator it = input.begin(), e = input.end(); it != e; ++it) { + if (child->mightContain(**it)) { + output.push_back(*it); + } + } + } + + bool Octree::Node::hasGeometry() { + return faces.size() > 0 || edges.size() > 0 || vertices.size() > 0; + } + + Octree::Octree() { + root = NULL; + } + + Octree::~Octree() { + if (root) delete root; + } + + void Octree::setBounds(const carve::geom3d::Vector &min, const carve::geom3d::Vector &max) { + if (root) delete root; + root = new Node(min, max); + } + + void Octree::setBounds(carve::geom3d::AABB aabb) { + if (root) delete root; + aabb.extent = 1.1 * aabb.extent; + root = new Node(aabb.min(), aabb.max()); + } + + void Octree::addEdges(const std::vector > &e) { + root->edges.reserve(root->edges.size() + e.size()); + for (size_t i = 0; i < e.size(); ++i) { + root->edges.push_back(&e[i]); + } + } + + void Octree::addFaces(const std::vector > &f) { + root->faces.reserve(root->faces.size() + f.size()); + for (size_t i = 0; i < f.size(); ++i) { + root->faces.push_back(&f[i]); + } + } + + void Octree::addVertices(const std::vector *> &p) { + root->vertices.insert(root->vertices.end(), p.begin(), p.end()); + } + + carve::geom3d::AABB Octree::makeAABB(const Node *node) { + carve::geom3d::Vector centre = 0.5 * (node->min + node->max); + carve::geom3d::Vector size = SLACK_FACTOR * 0.5 * (node->max - node->min); + return carve::geom3d::AABB(centre, size); + } + + void Octree::doFindEdges(const carve::geom::aabb<3> &aabb, + Node *node, + std::vector *> &out, + unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.intersects(aabb)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(aabb, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->edges.size() > EDGE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(aabb, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector*>::const_iterator it = node->edges.begin(), e = node->edges.end(); it != e; ++it) { + if ((*it)->tag_once()) { + out.push_back(*it); + } + } + } + } + } + + void Octree::doFindEdges(const carve::geom3d::LineSegment &l, + Node *node, + std::vector *> &out, + unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.intersectsLineSegment(l.v1, l.v2)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(l, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->edges.size() > EDGE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(l, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector*>::const_iterator it = node->edges.begin(), e = node->edges.end(); it != e; ++it) { + if ((*it)->tag_once()) { + out.push_back(*it); + } + } + } + } + } + + void Octree::doFindEdges(const carve::geom3d::Vector &v, + Node *node, + std::vector *> &out, + unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.containsPoint(v)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(v, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->edges.size() > EDGE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindEdges(v, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector*>::const_iterator + it = node->edges.begin(), e = node->edges.end(); it != e; ++it) { + if ((*it)->tag_once()) { + out.push_back(*it); + } + } + } + } + } + + void Octree::doFindFaces(const carve::geom::aabb<3> &aabb, + Node *node, + std::vector*> &out, + unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.intersects(aabb)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindFaces(aabb, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->faces.size() > FACE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindFaces(aabb, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector*>::const_iterator it = node->faces.begin(), e = node->faces.end(); it != e; ++it) { + if ((*it)->tag_once()) { + out.push_back(*it); + } + } + } + } + } + + void Octree::doFindFaces(const carve::geom3d::LineSegment &l, + Node *node, + std::vector*> &out, + unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.intersectsLineSegment(l.v1, l.v2)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindFaces(l, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->faces.size() > FACE_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindFaces(l, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector*>::const_iterator it = node->faces.begin(), e = node->faces.end(); it != e; ++it) { + if ((*it)->tag_once()) { + out.push_back(*it); + } + } + } + } + } + + void Octree::doFindVerticesAllowDupes(const carve::geom3d::Vector &v, Node *node, std::vector *> &out, unsigned depth) const { + if (node == NULL) { + return; + } + + if (node->aabb.containsPoint(v)) { + if (node->hasChildren()) { + for (int i = 0; i < 8; ++i) { + doFindVerticesAllowDupes(v, node->children[i], out, depth + 1); + } + } else { + if (depth < MAX_SPLIT_DEPTH && node->vertices.size() > POINT_SPLIT_THRESHOLD) { + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doFindVerticesAllowDupes(v, node->children[i], out, depth + 1); + } + return; + } + } + for (std::vector *>::const_iterator it = node->vertices.begin(), e = node->vertices.end(); it != e; ++it) { + out.push_back(*it); + } + } + } + } + + void Octree::findEdgesNear(const carve::geom::aabb<3> &aabb, std::vector*> &out) const { + tagable::tag_begin(); + doFindEdges(aabb, root, out, 0); + } + + void Octree::findEdgesNear(const carve::geom3d::LineSegment &l, std::vector*> &out) const { + tagable::tag_begin(); + doFindEdges(l, root, out, 0); + } + + void Octree::findEdgesNear(const carve::poly::Edge<3> &e, std::vector*> &out) const { + tagable::tag_begin(); + doFindEdges(carve::geom3d::LineSegment(e.v1->v, e.v2->v), root, out, 0); + } + + void Octree::findEdgesNear(const carve::geom3d::Vector &v, std::vector*> &out) const { + tagable::tag_begin(); + doFindEdges(v, root, out, 0); + } + + void Octree::findFacesNear(const carve::geom::aabb<3> &aabb, std::vector*> &out) const { + tagable::tag_begin(); + doFindFaces(aabb, root, out, 0); + } + + void Octree::findFacesNear(const carve::geom3d::LineSegment &l, std::vector*> &out) const { + tagable::tag_begin(); + doFindFaces(l, root, out, 0); + } + + void Octree::findFacesNear(const carve::poly::Edge<3> &e, std::vector*> &out) const { + tagable::tag_begin(); + doFindFaces(carve::geom3d::LineSegment(e.v1->v, e.v2->v), root, out, 0); + } + + void Octree::findVerticesNearAllowDupes(const carve::geom3d::Vector &v, std::vector *> &out) const { + tagable::tag_begin(); + doFindVerticesAllowDupes(v, root, out, 0); + } + + void Octree::doSplit(int maxSplit, Node *node) { + // Don't split down any further than 4 levels. + if (maxSplit <= 0 || (node->edges.size() < 5 && node->faces.size() < 5)) { + return; + } + + if (!node->split()) { + for (int i = 0; i < 8; ++i) { + doSplit(maxSplit - 1, node->children[i]); + } + } + } + + void Octree::splitTree() { + // initially split 4 levels + doSplit(0, root); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/pointset.cpp b/thirdparty/carve-1.4.0/lib/pointset.cpp new file mode 100644 index 00000000..355813b5 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/pointset.cpp @@ -0,0 +1,59 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +namespace carve { + namespace point { + + PointSet::PointSet(const std::vector &points) { + vertices.resize(points.size()); + for (size_t i = 0; i < points.size(); ++i) { + vertices[i].v = points[i]; + } + aabb.fit(points.begin(), points.end()); + } + + void PointSet::sortVertices(const carve::geom3d::Vector &axis) { + std::vector > temp; + temp.reserve(vertices.size()); + for (size_t i = 0; i < vertices.size(); ++i) { + temp.push_back(std::make_pair(dot(axis, vertices[i].v), i)); + } + std::sort(temp.begin(), temp.end()); + + std::vector vnew; + vnew.reserve(vertices.size()); + + // std::vector revmap; + // revmap.resize(vertices.size()); + + for (size_t i = 0; i < vertices.size(); ++i) { + vnew.push_back(vertices[temp[i].second]); + // revmap[temp[i].second] = i; + } + + vertices.swap(vnew); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/polyhedron.cpp b/thirdparty/carve-1.4.0/lib/polyhedron.cpp new file mode 100644 index 00000000..fa454534 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/polyhedron.cpp @@ -0,0 +1,1459 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#if defined(CARVE_DEBUG) +#define DEBUG_CONTAINS_VERTEX +#endif + +#include + +#include +#include + +#include + +#include + +#include + +#include BOOST_INCLUDE(random.hpp) + +namespace { + + + + struct FV { + carve::poly::Polyhedron::face_t *face; + size_t vertex; + FV(carve::poly::Polyhedron::face_t *f, size_t v) : face(f), vertex(v) { } + }; + + + + struct EdgeFaces { + std::list fwd, rev; + carve::poly::Polyhedron::edge_t *edge; + }; + + + + struct EdgeFaceMap { + std::unordered_map, + size_t, + carve::poly::hash_vertex_ptr> index_map; + std::vector edge_faces; + + void sizeHint(size_t n_faces, size_t n_vertices) { +#if defined(UNORDERED_COLLECTIONS_SUPPORT_RESIZE) + index_map.resize(n_faces + n_vertices); // approximately, for a single closed manifold. +#endif + edge_faces.reserve(n_faces + n_vertices); + } + + void record(const carve::poly::Polyhedron::vertex_t *v1, + const carve::poly::Polyhedron::vertex_t *v2, + carve::poly::Polyhedron::face_t *f, + size_t i) { + if (v1 < v2) { + size_t &x = index_map[std::make_pair(v1, v2)]; + if (x == 0) { + edge_faces.push_back(EdgeFaces()); + x = edge_faces.size(); + } + edge_faces[x-1].fwd.push_back(FV(f, i)); + } else { + size_t &x = index_map[std::make_pair(v2, v1)]; + if (x == 0) { + edge_faces.push_back(EdgeFaces()); + x = edge_faces.size(); + } + edge_faces[x-1].rev.push_back(FV(f, i)); + } + } + }; + + + + // Interestingly, for one set of inserts and a number of complete + // traversals, a map seems to be faster than an unordered_map. This + // may apply in other places. + + struct FaceOrder { + double ang; + const FV *fv; + bool fwd; + + FaceOrder(double _ang, const FV *_fv, bool _fwd) : ang(_ang), fv(_fv), fwd(_fwd) { } + }; + + + + inline bool operator<(const FaceOrder &a, const FaceOrder &b) { + return a.ang < b.ang || (a.ang == b.ang && a.fwd && !b.fwd); + } + + + + inline std::ostream &operator<<(std::ostream &o, const FaceOrder &a) { + o << (a.fwd ? "+" : "-") << " " << a.ang << " " << a.fv; + return o; + } + + + + bool makeFacePairs(const EdgeFaces &ef, + carve::poly::Polyhedron::edge_t *e, + std::vector &edge_face_pairs) { + static carve::TimingName FUNC_NAME("static Polyhedron makeFacePairs()"); + carve::TimingBlock block(FUNC_NAME); + + edge_face_pairs.clear(); + + carve::geom3d::Vector evec = (e->v2->v - e->v1->v).normalized(); + std::vector sorted_faces; + + carve::geom3d::Vector base; + + base = ef.fwd.front().face->plane_eqn.N; + + for (std::list::const_iterator + f_i = ef.fwd.begin(), f_e = ef.fwd.end(); f_i != f_e; ++f_i) { + double ang = carve::geom3d::antiClockwiseAngle((*f_i).face->plane_eqn.N, base, evec); + if (ang == 0.0 && f_i != ef.fwd.begin()) ang = M_TWOPI + carve::EPSILON; + sorted_faces.push_back(FaceOrder(ang, &(*f_i), true)); + } + for (std::list::const_iterator + f_i = ef.rev.begin(), f_e = ef.rev.end(); f_i != f_e; ++f_i) { + double ang = carve::geom3d::antiClockwiseAngle(-(*f_i).face->plane_eqn.N, base, evec); + if (ang == 0.0) ang = M_TWOPI + carve::EPSILON; + sorted_faces.push_back(FaceOrder(ang, &(*f_i), false)); + } + std::sort(sorted_faces.begin(), sorted_faces.end()); + + for (unsigned i = 0; i < sorted_faces.size();) { + if (!sorted_faces[i].fwd) { + const FV &fv2 = (*(sorted_faces[i++].fv)); + + edge_face_pairs.push_back(NULL); + edge_face_pairs.push_back(fv2.face); + // std::cerr << "face pair: " << NULL << " " << fv2.face << std::endl; + } else if (i == sorted_faces.size() - 1 || sorted_faces[i + 1].fwd) { + const FV &fv1 = (*(sorted_faces[i++].fv)); + + edge_face_pairs.push_back(fv1.face); + edge_face_pairs.push_back(NULL); + // std::cerr << "face pair: " << fv1.face << " " << NULL << std::endl; + } else { + const FV &fv1 = (*(sorted_faces[i++].fv)); + const FV &fv2 = (*(sorted_faces[i++].fv)); + + edge_face_pairs.push_back(fv1.face); + edge_face_pairs.push_back(fv2.face); + // std::cerr << "face pair: " << fv1.face << " " << fv2.face << std::endl; + } + } + + return true; + } + + + + bool emb_test(carve::poly::Polyhedron *poly, + std::map > &embedding, + carve::geom3d::Vector v, + int m_id) { + + std::map result; +#if defined(CARVE_DEBUG) + std::cerr << "test " << v << " (m_id:" << m_id << ")" << std::endl; +#endif + poly->testVertexAgainstClosedManifolds(v, result, true); + std::set inside; + for (std::map::iterator j = result.begin(); + j != result.end(); + ++j) { + if ((*j).first == m_id) continue; + if ((*j).second == carve::POINT_IN) inside.insert((*j).first); + else if ((*j).second == carve::POINT_ON) { +#if defined(CARVE_DEBUG) + std::cerr << " FAIL" << std::endl; +#endif + return false; + } + } +#if defined(CARVE_DEBUG) + std::cerr << " OK (inside.size()==" << inside.size() << ")" << std::endl; +#endif + embedding[m_id] = inside; + return true; + } + + + + struct order_ef_first_vertex { + bool operator()(const EdgeFaces *a, const EdgeFaces *b) const { + return a->edge->v1 < b->edge->v1; + } + }; + + + + struct order_faces { + bool operator()(const carve::poly::Polyhedron::face_t * const &a, + const carve::poly::Polyhedron::face_t * const &b) const { + return std::lexicographical_compare(a->vbegin(), a->vend(), b->vbegin(), b->vend()); + } + }; + + + +} + + + +namespace carve { + namespace poly { + + + + struct EdgeConnectivityInfo { + EdgeFaceMap ef_map; + }; + + + + bool Polyhedron::initSpatialIndex() { + static carve::TimingName FUNC_NAME("Polyhedron::initSpatialIndex()"); + carve::TimingBlock block(FUNC_NAME); + + octree.setBounds(aabb); + octree.addFaces(faces); + octree.addEdges(edges); + octree.splitTree(); + + return true; + } + + + + void Polyhedron::invertAll() { + for (size_t i = 0; i < faces.size(); ++i) { + faces[i].invert(); + } + + for (size_t i = 0; i < edges.size(); ++i) { + std::vector &f = connectivity.edge_to_face[i]; + for (size_t j = 0; j < (f.size() & ~1U); j += 2) { + std::swap(f[j], f[j+1]); + } + } + + for (size_t i = 0; i < manifold_is_negative.size(); ++i) { + manifold_is_negative[i] = !manifold_is_negative[i]; + } + } + + + + void Polyhedron::invert(const std::vector &selected_manifolds) { + bool altered = false; + for (size_t i = 0; i < faces.size(); ++i) { + if (faces[i].manifold_id >= 0 && + (unsigned)faces[i].manifold_id < selected_manifolds.size() && + selected_manifolds[faces[i].manifold_id]) { + altered = true; + faces[i].invert(); + } + } + + if (altered) { + for (size_t i = 0; i < edges.size(); ++i) { + std::vector &f = connectivity.edge_to_face[i]; + for (size_t j = 0; j < (f.size() & ~1U); j += 2) { + int m_id = -1; + if (f[j]) m_id = f[j]->manifold_id; + if (f[j+1]) m_id = f[j+1]->manifold_id; + if (m_id >= 0 && (unsigned)m_id < selected_manifolds.size() && selected_manifolds[m_id]) { + std::swap(f[j], f[j+1]); + } + } + } + + for (size_t i = 0; i < std::min(selected_manifolds.size(), manifold_is_negative.size()); ++i) { + manifold_is_negative[i] = !manifold_is_negative[i]; + } + } + } + + + + void Polyhedron::initVertexConnectivity() { + static carve::TimingName FUNC_NAME("static Polyhedron initVertexConnectivity()"); + carve::TimingBlock block(FUNC_NAME); + + // allocate space for connectivity info. + connectivity.vertex_to_edge.resize(vertices.size()); + connectivity.vertex_to_face.resize(vertices.size()); + + std::vector vertex_face_count; + + vertex_face_count.resize(vertices.size()); + + // work out how many faces/edges each vertex is connected to, in + // order to save on array reallocs. + for (unsigned i = 0; i < faces.size(); ++i) { + face_t &f = faces[i]; + for (unsigned j = 0; j < f.nVertices(); j++) { + vertex_face_count[vertexToIndex_fast(f.vertex(j))]++; + } + } + + for (size_t i = 0; i < vertices.size(); ++i) { + connectivity.vertex_to_edge[i].reserve(vertex_face_count[i]); + connectivity.vertex_to_face[i].reserve(vertex_face_count[i]); + } + + // record connectivity from vertex to edges. + for (size_t i = 0; i < edges.size(); ++i) { + size_t v1i = vertexToIndex_fast(edges[i].v1); + size_t v2i = vertexToIndex_fast(edges[i].v2); + + connectivity.vertex_to_edge[v1i].push_back(&edges[i]); + connectivity.vertex_to_edge[v2i].push_back(&edges[i]); + } + + // record connectivity from vertex to faces. + for (size_t i = 0; i < faces.size(); ++i) { + face_t &f = faces[i]; + for (unsigned j = 0; j < f.nVertices(); j++) { + size_t vi = vertexToIndex_fast(f.vertex(j)); + connectivity.vertex_to_face[vi].push_back(&f); + } + } + } + + + + bool Polyhedron::initEdgeConnectivity(const EdgeConnectivityInfo &eci) { + static carve::TimingName FUNC_NAME("static Polyhedron initEdgeConnectivity()"); + carve::TimingBlock block(FUNC_NAME); + + const std::vector &ef = eci.ef_map.edge_faces; + + // pair up incident faces for each edge. + bool is_ok = true; + bool complex = false; + carve::djset::djset face_groups(faces.size()); + std::vector face_open(faces.size(), false); + + connectivity.edge_to_face.resize(edges.size()); + + // simple edges + for (size_t i = 0; i < ef.size(); ++i) { + const std::list &fwd_faces = ef[i].fwd; + const std::list &rev_faces = ef[i].rev; + + edge_t *edge = ef[i].edge; + size_t edge_index = edgeToIndex_fast(edge); + std::vector &edge_face_pairs = connectivity.edge_to_face[edge_index]; + edge_face_pairs.clear(); + + if (rev_faces.size() == 0) { + for (std::list::const_iterator j = fwd_faces.begin(); j != fwd_faces.end(); ++j) { + face_open[faceToIndex_fast(j->face)] = true; + edge_face_pairs.push_back(j->face); + edge_face_pairs.push_back(NULL); + } + } else if (fwd_faces.size() == 0) { + for (std::list::const_iterator j = rev_faces.begin(); j != rev_faces.end(); ++j) { + face_open[faceToIndex_fast(j->face)] = true; + edge_face_pairs.push_back(NULL); + edge_face_pairs.push_back(j->face); + } + } else if (fwd_faces.size() == 1 && rev_faces.size() == 1) { + edge_face_pairs.push_back(fwd_faces.front().face); + edge_face_pairs.push_back(rev_faces.front().face); + face_groups.merge_sets(faceToIndex_fast(fwd_faces.front().face), + faceToIndex_fast(rev_faces.front().face)); + } else { + complex = true; + } + } + + if (!complex) return is_ok; + + // propagate openness of each face set to all members of the set. + for (size_t i = 0; i < faces.size(); ++i) { + if (face_open[i]) face_open[face_groups.find_set_head(i)] = true; + } + + for (size_t i = 0; i < faces.size(); ++i) { + face_open[i] = face_open[face_groups.find_set_head(i)]; + } + + // complex edges. + std::map, std::list > grouped_ef; + + for (size_t i = 0; is_ok && i < ef.size(); ++i) { + const std::list &fwd_faces = ef[i].fwd; + const std::list &rev_faces = ef[i].rev; + + edge_t *edge = ef[i].edge; + size_t edge_index = edgeToIndex_fast(edge); + std::vector &edge_face_pairs = connectivity.edge_to_face[edge_index]; + + if (!edge_face_pairs.size()) { + const EdgeFaces &ef_old = ef[i]; + + EdgeFaces ef_closed; + EdgeFaces ef_open; + + ef_open.edge = ef_old.edge; + ef_closed.edge = ef_old.edge; + + // group faces into those that form part of an open surface and those that form a closed surface. + for (std::list::const_iterator j = ef_old.fwd.begin(); j != ef_old.fwd.end(); ++j) { + if (face_open[faceToIndex_fast(j->face)]) { + ef_open.fwd.push_back(*j); + } else { + ef_closed.fwd.push_back(*j); + } + } + + for (std::list::const_iterator j = ef_old.rev.begin(); j != ef_old.rev.end(); ++j) { + if (face_open[faceToIndex_fast(j->face)]) { + ef_open.rev.push_back(*j); + } else { + ef_closed.rev.push_back(*j); + } + } + + // make open edge connectivity entries for any open surface faces. + for (std::list::const_iterator j = ef_open.fwd.begin(); j != ef_open.fwd.end(); ++j) { + edge_face_pairs.push_back(j->face); + edge_face_pairs.push_back(NULL); + } + for (std::list::const_iterator j = ef_open.rev.begin(); j != ef_open.rev.end(); ++j) { + edge_face_pairs.push_back(NULL); + edge_face_pairs.push_back(j->face); + } + + if (ef_closed.fwd.size() == 0 && ef_closed.rev.size() == 0) continue; + + // group edges based upon the closed-face sets that are incident to them. + std::vector tag; + tag.reserve(ef_closed.fwd.size() + ef_closed.rev.size()); + for (std::list::const_iterator j = ef_closed.fwd.begin(); j != ef_closed.fwd.end(); ++j) { + tag.push_back(+face_groups.find_set_head(faceToIndex_fast(j->face)) + 1); + } + for (std::list::const_iterator j = ef_closed.rev.begin(); j != ef_closed.rev.end(); ++j) { + tag.push_back(-face_groups.find_set_head(faceToIndex_fast(j->face)) - 1); + } + std::sort(tag.begin(), tag.end()); + + // normalise tag to remove edge direction effects. + std::vector revtag = tag; + std::reverse(revtag.begin(), revtag.end()); + std::transform(revtag.begin(), revtag.end(), revtag.begin(), std::negate()); + + if (!std::lexicographical_compare(tag.begin(), tag.end(), revtag.begin(), revtag.end())) { + std::swap(tag, revtag); + } + + grouped_ef[tag].push_back(ef_closed); + } + } + + + // std::cerr << "grouped ef tags:" << std::endl; + for (std::map, std::list > ::iterator i = grouped_ef.begin(); i != grouped_ef.end(); ++i) { + const std::vector &tag = (*i).first; + + // std::cerr << "tag.size() == " << tag.size() << std::endl; + // for (size_t j = 0; j < tag.size(); ++j) { + // std::cerr << " " << tag[j]; + // } + // std::cerr << std::endl; + + std::vector efp; + efp.reserve((*i).second.size()); + carve::djset::djset efp_group((*i).second.size()); + std::map > vec_ef; + + for (std::list::iterator j = (*i).second.begin(); j != (*i).second.end(); ++j) { + EdgeFaces &ef = *j; + vec_ef[ef.edge->v1].push_back(efp.size()); + vec_ef[ef.edge->v2].push_back(efp.size()); + efp.push_back(&ef); + } + + for (std::map >::iterator j = vec_ef.begin(); j != vec_ef.end(); ++j) { + if ((*j).second.size() == 2) { + efp_group.merge_sets((*j).second[0], (*j).second[1]); + } + } + + std::vector > grouped; + efp_group.collate(efp.begin(), grouped); + + for (size_t j = 0; j < grouped.size(); ++j) { + std::vector grp = grouped[j]; + for (size_t k = 0; k < grp.size(); ++k) { + EdgeFaces &ef = *grp[k]; + + edge_t *edge = ef.edge; + size_t edge_index = edgeToIndex_fast(edge); + std::vector &edge_face_pairs = connectivity.edge_to_face[edge_index]; + + if (!makeFacePairs(ef, edge, edge_face_pairs)) { + is_ok = false; + } + } + } + } + + return is_ok; + } + + + + void Polyhedron::buildEdgeFaceMap(EdgeConnectivityInfo &eci) { + // make a mapping from pairs of vertices denoting edges to pairs + // of that incorporate this edge in the + // forward and reverse directions. + for (unsigned i = 0; i < faces.size(); ++i) { + face_t &f = faces[i]; + for (unsigned j = 0; j < f.nVertices() - 1; j++) { + eci.ef_map.record(f.vertex(j), f.vertex(j+1), &f, j); + } + eci.ef_map.record(f.vertex(f.nVertices()-1), f.vertex(0), &f, f.nVertices()-1); + + f.manifold_id = -1; + } + } + + + + bool Polyhedron::initConnectivity() { + static carve::TimingName FUNC_NAME("Polyhedron::initConnectivity()"); + carve::TimingBlock block(FUNC_NAME); + + EdgeConnectivityInfo eci; + eci.ef_map.sizeHint(faces.size(), vertices.size()); + bool is_ok = true; + + buildEdgeFaceMap(eci); + + // now we know how many edges this polyhedron has. + edges.clear(); + edges.reserve(eci.ef_map.edge_faces.size()); + + // make an edge object for each entry in ef_map. + for (size_t i = 0; i < eci.ef_map.edge_faces.size(); ++i) { + EdgeFaces &ef = eci.ef_map.edge_faces[i]; + const std::list &fwd = ef.fwd; + const std::list &rev = ef.rev; + + const vertex_t *v1, *v2; + + if (fwd.size()) { + face_t *f = fwd.front().face; + size_t v = fwd.front().vertex; + v1 = f->vertex(v); + v2 = f->vertex((v+1) % f->nVertices()); + } else { + face_t *f = rev.front().face; + size_t v = rev.front().vertex; + v2 = f->vertex(v); + v1 = f->vertex((v+1) % f->nVertices()); + } + + edges.push_back(edge_t(v1, v2, this)); + ef.edge = &edges.back(); + + for (std::list::const_iterator j = fwd.begin(); j != fwd.end(); ++j) { + (*j).face->edge((*j).vertex) = &edges.back(); + } + + for (std::list::const_iterator j = rev.begin(); j != rev.end(); ++j) { + (*j).face->edge((*j).vertex) = &edges.back(); + } + } + + initVertexConnectivity(); + + return initEdgeConnectivity(eci); + } + + + + bool Polyhedron::calcManifoldEmbedding() { + // this could be significantly sped up using bounding box tests + // to work out what pairs of manifolds are embedding candidates. + // A per-manifold AABB could also be used to speed up + // testVertexAgainstClosedManifolds(). + + static carve::TimingName FUNC_NAME("Polyhedron::calcManifoldEmbedding()"); + static carve::TimingName CME_V("Polyhedron::calcManifoldEmbedding() (vertices)"); + static carve::TimingName CME_E("Polyhedron::calcManifoldEmbedding() (edges)"); + static carve::TimingName CME_F("Polyhedron::calcManifoldEmbedding() (faces)"); + + carve::TimingBlock block(FUNC_NAME); + + const unsigned MCOUNT = manifoldCount(); + if (MCOUNT < 2) return true; + + std::set vertex_manifolds; + std::map > embedding; + + carve::Timing::start(CME_V); + for (size_t i = 0; i < vertices.size(); ++i) { + vertex_manifolds.clear(); + if (vertexManifolds(&vertices[i], set_inserter(vertex_manifolds)) != 1) continue; + int m_id = *vertex_manifolds.begin(); + if (embedding.find(m_id) == embedding.end()) { + if (emb_test(this, embedding, vertices[i].v, m_id) && embedding.size() == MCOUNT) { + carve::Timing::stop(); + goto done; + } + } + } + carve::Timing::stop(); + + carve::Timing::start(CME_E); + for (size_t i = 0; i < edges.size(); ++i) { + if (connectivity.edge_to_face[i].size() == 2) { + int m_id; + const face_t *f1 = connectivity.edge_to_face[i][0]; + const face_t *f2 = connectivity.edge_to_face[i][1]; + if (f1) m_id = f1->manifold_id; + if (f2) m_id = f2->manifold_id; + if (embedding.find(m_id) == embedding.end()) { + if (emb_test(this, embedding, (edges[i].v1->v + edges[i].v2->v) / 2, m_id) && embedding.size() == MCOUNT) { + carve::Timing::stop(); + goto done; + } + } + } + } + carve::Timing::stop(); + + carve::Timing::start(CME_F); + for (size_t i = 0; i < faces.size(); ++i) { + int m_id = faces[i].manifold_id; + if (embedding.find(m_id) == embedding.end()) { + carve::geom2d::P2 pv; + if (!carve::geom2d::pickContainedPoint(faces[i].projectedVertices(), pv)) continue; + carve::geom3d::Vector v = carve::poly::face::unproject(faces[i], pv); + if (emb_test(this, embedding, v, m_id) && embedding.size() == MCOUNT) { + carve::Timing::stop(); + goto done; + } + } + } + carve::Timing::stop(); + + std::cerr << "could not find test points!!!" << std::endl; + return true; + + CARVE_FAIL("could not find test points"); + + done:; + for (std::map >::iterator i = embedding.begin(); i != embedding.end(); ++i) { +#if defined(CARVE_DEBUG) + std::cerr << (*i).first << " : "; + std::copy((*i).second.begin(), (*i).second.end(), std::ostream_iterator(std::cerr, ",")); + std::cerr << std::endl; +#endif + (*i).second.insert(-1); + } + std::set parents, new_parents; + parents.insert(-1); + + while (embedding.size()) { + new_parents.clear(); + for (std::map >::iterator i = embedding.begin(); i != embedding.end(); ++i) { + if ((*i).second.size() == 1) { + if (parents.find(*(*i).second.begin()) != parents.end()) { + new_parents.insert((*i).first); +#if defined(CARVE_DEBUG) + std::cerr << "parent(" << (*i).first << "): " << *(*i).second.begin() << std::endl; +#endif + } else { +#if defined(CARVE_DEBUG) + std::cerr << "no parent: " << (*i).first << " (looking for: " << *(*i).second.begin() << ")" << std::endl; +#endif + } + } + } + for (std::set::const_iterator i = new_parents.begin(); i != new_parents.end(); ++i) { + embedding.erase(*i); + } + for (std::map >::iterator i = embedding.begin(); i != embedding.end(); ++i) { + size_t n = 0; + for (std::set::const_iterator j = parents.begin(); j != parents.end(); ++j) { + n += (*i).second.erase((*j)); + } + CARVE_ASSERT(n != 0); + } + parents.swap(new_parents); + } + + return true; + } + + + + bool Polyhedron::markManifolds() { + static carve::TimingName FUNC_NAME("Polyhedron::markManifolds()"); + + carve::TimingBlock block(FUNC_NAME); + + std::vector to_mark; + size_t i = 0; + int m_id = 0; + int closed_manifold_count = 0; + + const vertex_t *min_vertex = NULL; + std::set min_faces; + + manifold_is_closed.clear(); + manifold_is_negative.clear(); + + while (1) { + + while (i < faces.size() && faces[i].manifold_id != -1) ++i; + if (i == faces.size()) break; + + to_mark.push_back(&faces[i]); + min_vertex = faces[i].vertex(0); + + bool is_closed = true; + + while (to_mark.size()) { + face_t *f = to_mark.back(); + to_mark.pop_back(); + + if (f->manifold_id == -1) { + f->manifold_id = m_id; + + const vertex_t *v = f->vertex(0); + for (size_t j = 1; j < f->nVertices(); ++j) { + if (f->vertex(j)->v < v->v) { + v = f->vertex(j); + } + } + if (v->v < min_vertex->v) { + min_vertex = v; + } + + for (size_t j = 0; j < f->nEdges(); ++j) { + face_t *g = const_cast(connectedFace(f, f->edge(j))); + + if (g) { + if (g->manifold_id == -1) to_mark.push_back(g); + } else { + is_closed = false; + } + } + } + } + + vertexToFaces(min_vertex, set_inserter(min_faces)); + + double max_abs_x = 0.0; + for (std::set::iterator i = min_faces.begin(); i != min_faces.end(); ++i) { + if (fabs((*i)->plane_eqn.N.x) > fabs(max_abs_x)) max_abs_x = (*i)->plane_eqn.N.x; + } + + manifold_is_closed.push_back(is_closed); + manifold_is_negative.push_back(is_closed && max_abs_x > 0.0); +#if defined(CARVE_DEBUG) + std::cerr << "{manifold: " << m_id << (manifold_is_negative.back() ? " is" : " is not") << " negative}" << std::endl; +#endif + if (is_closed) closed_manifold_count++; + ++m_id; + } + +#if defined(CARVE_DEBUG) + std::cerr << "polyhedron " << this << " has " << m_id << " manifolds (" << closed_manifold_count << " closed)" << std::endl; +#endif + + return true; + } + + + + bool Polyhedron::init() { + static carve::TimingName FUNC_NAME("Polyhedron::init()"); + carve::TimingBlock block(FUNC_NAME); + + aabb.fit(vertices.begin(), vertices.end(), vec_adapt_vertex_ref()); + + connectivity.vertex_to_edge.clear(); + connectivity.vertex_to_face.clear(); + connectivity.edge_to_face.clear(); + + // if (!orderVertices()) return false; + if (!initConnectivity()) return false; + if (!initSpatialIndex()) return false; + if (!markManifolds()) return false; + // if (!calcManifoldEmbedding()) return false; + return true; + } + + + + void Polyhedron::faceRecalc() { + for (size_t i = 0; i < faces.size(); ++i) { + if (!faces[i].recalc()) { + std::ostringstream out; + out << "face " << i << " recalc failed"; + throw carve::exception(out.str()); + } + } + } + + + + Polyhedron::Polyhedron(const Polyhedron &poly) { + faces.reserve(poly.faces.size()); + + for (size_t i = 0; i < poly.faces.size(); ++i) { + const face_t &src = poly.faces[i]; + faces.push_back(src); + } + commonFaceInit(false); // calls setFaceAndVertexOwner() and init() + } + + + + Polyhedron::Polyhedron(const Polyhedron &poly, const std::vector &selected_manifolds) { + size_t n_faces = 0; + + for (size_t i = 0; i < poly.faces.size(); ++i) { + const face_t &src = poly.faces[i]; + if (src.manifold_id >= 0 && + (unsigned)src.manifold_id < selected_manifolds.size() && + selected_manifolds[src.manifold_id]) { + n_faces++; + } + } + + faces.reserve(n_faces); + + for (size_t i = 0; i < poly.faces.size(); ++i) { + const face_t &src = poly.faces[i]; + if (src.manifold_id >= 0 && + (unsigned)src.manifold_id < selected_manifolds.size() && + selected_manifolds[src.manifold_id]) { + faces.push_back(src); + } + } + + commonFaceInit(false); // calls setFaceAndVertexOwner() and init() + } + + + + Polyhedron::Polyhedron(const Polyhedron &poly, int m_id) { + size_t n_faces = 0; + + for (size_t i = 0; i < poly.faces.size(); ++i) { + const face_t &src = poly.faces[i]; + if (src.manifold_id == m_id) n_faces++; + } + + faces.reserve(n_faces); + + for (size_t i = 0; i < poly.faces.size(); ++i) { + const face_t &src = poly.faces[i]; + if (src.manifold_id == m_id) faces.push_back(src); + } + + commonFaceInit(false); // calls setFaceAndVertexOwner() and init() + } + + + + Polyhedron::Polyhedron(const std::vector &_vertices, + int n_faces, + const std::vector &face_indices) { + // The polyhedron is defined by a vector of vertices, which we + // want to copy, and a face index list, from which we need to + // generate a set of Faces. + + vertices.clear(); + vertices.resize(_vertices.size()); + for (size_t i = 0; i < _vertices.size(); ++i) { + vertices[i].v = _vertices[i]; + } + + faces.reserve(n_faces); + + std::vector::const_iterator iter = face_indices.begin(); + std::vector v; + for (int i = 0; i < n_faces; ++i) { + int vertexCount = *iter++; + + v.clear(); + + while (vertexCount--) { + CARVE_ASSERT(*iter >= 0); + CARVE_ASSERT((unsigned)*iter < vertices.size()); + v.push_back(&vertices[*iter++]); + } + faces.push_back(face_t(v)); + } + + setFaceAndVertexOwner(); + + if (!init()) { + throw carve::exception("polyhedron creation failed"); + } + } + + + + Polyhedron::Polyhedron(std::vector &_faces, + std::vector &_vertices, + bool _recalc) { + faces.swap(_faces); + vertices.swap(_vertices); + + setFaceAndVertexOwner(); + + if (_recalc) faceRecalc(); + + if (!init()) { + throw carve::exception("polyhedron creation failed"); + } + } + + + + Polyhedron::Polyhedron(std::vector &_faces, + bool _recalc) { + faces.swap(_faces); + commonFaceInit(_recalc); // calls setFaceAndVertexOwner() and init() + } + + + + Polyhedron::Polyhedron(std::list &_faces, + bool _recalc) { + faces.reserve(_faces.size()); + std::copy(_faces.begin(), _faces.end(), std::back_inserter(faces)); + commonFaceInit(_recalc); // calls setFaceAndVertexOwner() and init() + } + + + + void Polyhedron::collectFaceVertices(std::vector &faces, + std::vector &vertices, + carve::csg::VVMap &vmap) { + // Given a set of faces, copy all referenced vertices into a + // single vertex array and update the faces to point into that + // array. On exit, vmap contains a mapping from old pointer to + // new pointer. + + vertices.clear(); + vmap.clear(); + + for (size_t i = 0, il = faces.size(); i != il; ++i) { + face_t &f = faces[i]; + + for (size_t j = 0, jl = f.nVertices(); j != jl; ++j) { + vmap[f.vertex(j)] = NULL; + } + } + + vertices.reserve(vmap.size()); + + for (carve::csg::VVMap::iterator i = vmap.begin(), + e = vmap.end(); + i != e; + ++i) { + vertices.push_back(*(*i).first); + (*i).second = &vertices.back(); + } + + for (size_t i = 0, il = faces.size(); i != il; ++i) { + face_t &f = faces[i]; + + for (size_t j = 0, jl = f.nVertices(); j != jl; ++j) { + f.vertex(j) = vmap[f.vertex(j)]; + } + } + } + + + + void Polyhedron::collectFaceVertices(std::vector &faces, + std::vector &vertices) { + VVMap vmap; + collectFaceVertices(faces, vertices, vmap); + } + + + + void Polyhedron::setFaceAndVertexOwner() { + for (size_t i = 0; i < vertices.size(); ++i) vertices[i].owner = this; + for (size_t i = 0; i < faces.size(); ++i) faces[i].owner = this; + } + + + + void Polyhedron::commonFaceInit(bool _recalc) { + collectFaceVertices(faces, vertices); + setFaceAndVertexOwner(); + if (_recalc) faceRecalc(); + + if (!init()) { + throw carve::exception("polyhedron creation failed"); + } + } + + + + Polyhedron::~Polyhedron() { + } + + + + void Polyhedron::testVertexAgainstClosedManifolds(const carve::geom3d::Vector &v, + std::map &result, + bool ignore_orientation) const { + + for (size_t i = 0; i < faces.size(); i++) { + if (!manifold_is_closed[faces[i].manifold_id]) continue; // skip open manifolds + if (faces[i].containsPoint(v)) { + result[faces[i].manifold_id] = POINT_ON; + } + } + + double ray_len = aabb.extent.length() * 2; + + std::vector possible_faces; + + std::vector > manifold_intersections; + + boost::mt19937 rng; + boost::uniform_on_sphere distrib(3); + boost::variate_generator > gen(rng, distrib); + + while (1) { + carve::geom3d::Vector ray_dir; + ray_dir = gen(); + + carve::geom3d::Vector v2 = v + ray_dir * ray_len; + + bool failed = false; + carve::geom3d::LineSegment line(v, v2); + carve::geom3d::Vector intersection; + + possible_faces.clear(); + manifold_intersections.clear(); + octree.findFacesNear(line, possible_faces); + + for (unsigned i = 0; !failed && i < possible_faces.size(); i++) { + if (!manifold_is_closed[possible_faces[i]->manifold_id]) continue; // skip open manifolds + if (result.find(possible_faces[i]->manifold_id) != result.end()) continue; // already ON + + switch (possible_faces[i]->lineSegmentIntersection(line, intersection)) { + case INTERSECT_FACE: { + manifold_intersections.push_back(std::make_pair(possible_faces[i], intersection)); + break; + } + case INTERSECT_NONE: { + break; + } + default: { + failed = true; + break; + } + } + } + + if (!failed) break; + } + + std::vector crossings(manifold_is_closed.size(), 0); + + for (size_t i = 0; i < manifold_intersections.size(); ++i) { + const face_t *f = manifold_intersections[i].first; + crossings[f->manifold_id]++; + } + + for (size_t i = 0; i < crossings.size(); ++i) { +#if defined(CARVE_DEBUG) + std::cerr << "crossing: " << i << " = " << crossings[i] << " is_negative = " << manifold_is_negative[i] << std::endl; +#endif + if (!manifold_is_closed[i]) continue; + if (result.find(i) != result.end()) continue; + PointClass pc = (crossings[i] & 1) ? POINT_IN : POINT_OUT; + if (!ignore_orientation && manifold_is_negative[i]) pc = (PointClass)-pc; + result[i] = pc; + } + } + + + + PointClass Polyhedron::containsVertex(const carve::geom3d::Vector &v, + const face_t **hit_face, + bool even_odd, + int manifold_id) const { + if (hit_face) *hit_face = NULL; + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{containsVertex " << v << "}" << std::endl; +#endif + + if (!aabb.containsPoint(v)) { +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{final:OUT(aabb short circuit)}" << std::endl; +#endif + // XXX: if the top level manifolds are negative, this should be POINT_IN. + // for the moment, this only works for a single manifold. + if (manifold_is_negative.size() == 1 && manifold_is_negative[0]) return POINT_IN; + return POINT_OUT; + } + + for (size_t i = 0; i < faces.size(); i++) { + if (manifold_id != -1 && manifold_id != faces[i].manifold_id) continue; + + // XXX: Do allow the tested vertex to be ON an open + // manifold. This was here originally because of the + // possibility of an open manifold contained within a closed + // manifold. + + // if (!manifold_is_closed[faces[i].manifold_id]) continue; + + if (faces[i].containsPoint(v)) { +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{final:ON(hits face " << &faces[i] << ")}" << std::endl; +#endif + if (hit_face) *hit_face = &faces[i]; + return POINT_ON; + } + } + + double ray_len = aabb.extent.length() * 2; + + std::vector possible_faces; + + std::vector > manifold_intersections; + + while (1) { + double a1 = random() / double(RAND_MAX) * M_TWOPI; + double a2 = random() / double(RAND_MAX) * M_TWOPI; + + carve::geom3d::Vector ray_dir = carve::geom::VECTOR(sin(a1) * sin(a2), cos(a1) * sin(a2), cos(a2)); + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{testing ray: " << ray_dir << "}" << std::endl; +#endif + + carve::geom3d::Vector v2 = v + ray_dir * ray_len; + + bool failed = false; + carve::geom3d::LineSegment line(v, v2); + carve::geom3d::Vector intersection; + + possible_faces.clear(); + manifold_intersections.clear(); + octree.findFacesNear(line, possible_faces); + + for (unsigned i = 0; !failed && i < possible_faces.size(); i++) { + if (manifold_id != -1 && manifold_id != faces[i].manifold_id) continue; + + if (!manifold_is_closed[possible_faces[i]->manifold_id]) continue; + + switch (possible_faces[i]->lineSegmentIntersection(line, intersection)) { + case INTERSECT_FACE: { + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{intersects face: " << possible_faces[i] + << " dp: " << dot(ray_dir, possible_faces[i]->plane_eqn.N) << "}" << std::endl; +#endif + + if (!even_odd && fabs(dot(ray_dir, possible_faces[i]->plane_eqn.N)) < EPSILON) { + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{failing(small dot product)}" << std::endl; +#endif + + failed = true; + break; + } + manifold_intersections.push_back(std::make_pair(possible_faces[i], intersection)); + break; + } + case INTERSECT_NONE: { + break; + } + default: { + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{failing(degenerate intersection)}" << std::endl; +#endif + failed = true; + break; + } + } + } + + if (!failed) { + if (even_odd) { + return (manifold_intersections.size() & 1) ? POINT_IN : POINT_OUT; + } + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{intersections ok [count:" + << manifold_intersections.size() + << "], sorting}" + << std::endl; +#endif + + carve::geom3d::sortInDirectionOfRay(ray_dir, + manifold_intersections.begin(), + manifold_intersections.end(), + carve::geom3d::vec_adapt_pair_second()); + + std::vector crossings(manifold_is_closed.size(), 0); + + for (size_t i = 0; i < manifold_intersections.size(); ++i) { + const face_t *f = manifold_intersections[i].first; + if (dot(ray_dir, f->plane_eqn.N) < 0.0) { + crossings[f->manifold_id]++; + } else { + crossings[f->manifold_id]--; + } + } + +#if defined(DEBUG_CONTAINS_VERTEX) + for (size_t i = 0; i < crossings.size(); ++i) { + std::cerr << "{manifold " << i << " crossing count: " << crossings[i] << "}" << std::endl; + } +#endif + + for (size_t i = 0; i < manifold_intersections.size(); ++i) { + const face_t *f = manifold_intersections[i].first; + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{intersection at " + << manifold_intersections[i].second + << " id: " + << f->manifold_id + << " count: " + << crossings[f->manifold_id] + << "}" + << std::endl; +#endif + + if (crossings[f->manifold_id] < 0) { + // inside this manifold. + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{final:IN}" << std::endl; +#endif + + return POINT_IN; + } else if (crossings[f->manifold_id] > 0) { + // outside this manifold, but it's an infinite manifold. (for instance, an inverted cube) + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{final:OUT}" << std::endl; +#endif + + return POINT_OUT; + } + } + +#if defined(DEBUG_CONTAINS_VERTEX) + std::cerr << "{final:OUT(default)}" << std::endl; +#endif + + return POINT_OUT; + } + } + } + + + + void Polyhedron::findEdgesNear(const carve::geom::aabb<3> &aabb, + std::vector &outEdges) const { + outEdges.clear(); + octree.findEdgesNear(aabb, outEdges); + } + + + + void Polyhedron::findEdgesNear(const carve::geom3d::LineSegment &line, + std::vector &outEdges) const { + outEdges.clear(); + octree.findEdgesNear(line, outEdges); + } + + + + void Polyhedron::findEdgesNear(const carve::geom3d::Vector &v, + std::vector &outEdges) const { + outEdges.clear(); + octree.findEdgesNear(v, outEdges); + } + + + + void Polyhedron::findEdgesNear(const face_t &face, + std::vector &edges) const { + edges.clear(); + octree.findEdgesNear(face, edges); + } + + + + void Polyhedron::findEdgesNear(const edge_t &edge, + std::vector &outEdges) const { + outEdges.clear(); + octree.findEdgesNear(edge, outEdges); + } + + + + void Polyhedron::findFacesNear(const carve::geom3d::LineSegment &line, + std::vector &outFaces) const { + outFaces.clear(); + octree.findFacesNear(line, outFaces); + } + + + + void Polyhedron::findFacesNear(const carve::geom::aabb<3> &aabb, + std::vector &outFaces) const { + outFaces.clear(); + octree.findFacesNear(aabb, outFaces); + } + + + + void Polyhedron::findFacesNear(const edge_t &edge, + std::vector &outFaces) const { + outFaces.clear(); + octree.findFacesNear(edge, outFaces); + } + + + + void Polyhedron::transform(const carve::math::Matrix &xform) { + for (size_t i = 0; i < vertices.size(); i++) { + vertices[i].v = xform * vertices[i].v; + } + for (size_t i = 0; i < faces.size(); i++) { + faces[i].recalc(); + } + init(); + } + + + + void Polyhedron::print(std::ostream &o) const { + o << "Polyhedron@" << this << " {" << std::endl; + for (std::vector::const_iterator + i = vertices.begin(), e = vertices.end(); i != e; ++i) { + o << " V@" << &(*i) << " " << (*i).v << std::endl; + } + for (std::vector::const_iterator + i = edges.begin(), e = edges.end(); i != e; ++i) { + o << " E@" << &(*i) << " {" << std::endl; + o << " V@" << (*i).v1 << " - " << "V@" << (*i).v2 << std::endl; + const std::vector &faces = connectivity.edge_to_face[edgeToIndex_fast(&(*i))]; + for (size_t j = 0; j < (faces.size() & ~1U); j += 2) { + o << " fp: F@" << faces[j] << ", F@" << faces[j+1] << std::endl; + } + o << " }" << std::endl; + } + for (std::vector::const_iterator + i = faces.begin(), e = faces.end(); i != e; ++i) { + o << " F@" << &(*i) << " {" << std::endl; + o << " vertices {" << std::endl; + for (face_t::const_vertex_iter_t j = (*i).vbegin(), je = (*i).vend(); j != je; ++j) { + o << " V@" << (*j) << std::endl; + } + o << " }" << std::endl; + o << " edges {" << std::endl; + for (face_t::const_edge_iter_t j = (*i).ebegin(), je = (*i).eend(); j != je; ++j) { + o << " E@" << (*j) << std::endl; + } + carve::geom::plane<3> p = (*i).plane_eqn; + o << " }" << std::endl; + o << " normal " << (*i).plane_eqn.N << std::endl; + o << " aabb " << (*i).aabb << std::endl; + o << " plane_eqn "; + carve::geom::operator<< <3>(o, p); + o << std::endl; + o << " }" << std::endl; + } + + o << "}" << std::endl; + } + + + + void Polyhedron::canonicalize() { + orderVertices(); + for (size_t i = 0; i < faces.size(); i++) { + face_t &f = faces[i]; + size_t j = std::distance(f.vbegin(), + std::min_element(f.vbegin(), + f.vend())); + if (j) { + { + std::vector temp; + temp.reserve(f.nVertices()); + std::copy(f.vbegin() + j, f.vend(), std::back_inserter(temp)); + std::copy(f.vbegin(), f.vbegin() + j, std::back_inserter(temp)); + std::copy(temp.begin(), temp.end(), f.vbegin()); + } + { + std::vector temp; + temp.reserve(f.nEdges()); + std::copy(f.ebegin() + j, f.eend(), std::back_inserter(temp)); + std::copy(f.ebegin(), f.ebegin() + j, std::back_inserter(temp)); + std::copy(temp.begin(), temp.end(), f.ebegin()); + } + } + } + + std::vector face_ptrs; + face_ptrs.reserve(faces.size()); + for (size_t i = 0; i < faces.size(); ++i) face_ptrs.push_back(&faces[i]); + std::sort(face_ptrs.begin(), face_ptrs.end(), order_faces()); + std::vector sorted_faces; + sorted_faces.reserve(faces.size()); + for (size_t i = 0; i < faces.size(); ++i) sorted_faces.push_back(*face_ptrs[i]); + std::swap(faces, sorted_faces); + } + + } +} + diff --git a/thirdparty/carve-1.4.0/lib/polyline.cpp b/thirdparty/carve-1.4.0/lib/polyline.cpp new file mode 100644 index 00000000..55b4e0f4 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/polyline.cpp @@ -0,0 +1,66 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +namespace carve { + namespace line { + carve::geom3d::AABB Polyline::aabb() const { + return carve::geom3d::AABB(vbegin(), vend(), vec_adapt_vertex_ptr()); + } + + PolylineSet::PolylineSet(const std::vector &points) { + vertices.resize(points.size()); + for (size_t i = 0; i < points.size(); ++i) vertices[i].v = points[i]; + aabb.fit(points.begin(), points.end(), carve::geom3d::vec_adapt_ident()); + } + + void PolylineSet::sortVertices(const carve::geom3d::Vector &axis) { + std::vector > temp; + temp.reserve(vertices.size()); + for (size_t i = 0; i < vertices.size(); ++i) { + temp.push_back(std::make_pair(dot(axis, vertices[i].v), i)); + } + std::sort(temp.begin(), temp.end()); + std::vector vnew; + std::vector revmap; + vnew.reserve(vertices.size()); + revmap.resize(vertices.size()); + + for (size_t i = 0; i < vertices.size(); ++i) { + vnew.push_back(vertices[temp[i].second]); + revmap[temp[i].second] = i; + } + + for (line_iter i = lines.begin(); i != lines.end(); ++i) { + Polyline &l = *(*i); + for (size_t j = 0; j < l.edges.size(); ++j) { + PolylineEdge &e = *l.edges[j]; + if (e.v1) e.v1 = &vnew[revmap[vertexToIndex_fast(e.v1)]]; + if (e.v2) e.v2 = &vnew[revmap[vertexToIndex_fast(e.v2)]]; + } + } + vertices.swap(vnew); + } + + } +} diff --git a/thirdparty/carve-1.4.0/lib/tag.cpp b/thirdparty/carve-1.4.0/lib/tag.cpp new file mode 100644 index 00000000..f89815a1 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/tag.cpp @@ -0,0 +1,24 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +int carve::tagable::s_count = 0; diff --git a/thirdparty/carve-1.4.0/lib/timing.cpp b/thirdparty/carve-1.4.0/lib/timing.cpp new file mode 100644 index 00000000..54fba9f7 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/timing.cpp @@ -0,0 +1,436 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if CARVE_USE_TIMINGS + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include +#else +#include +#include +#endif + +#ifndef CARVE_USE_GLOBAL_NEW_DELETE +#define CARVE_USE_GLOBAL_NEW_DELETE 0 +#endif + +namespace carve { + static uint64_t memoryCurr = 0; + static uint64_t memoryTotal = 0; + unsigned blkCntCurr[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + unsigned blkCntTotal[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + + void addBlk(unsigned size) { + unsigned i = 0; + while (i < 31 && (1U< +#include + +void* carve_alloc(size_t size) { + void *p = malloc(size); + if (p == 0) throw std::bad_alloc(); // ANSI/ISO compliant behavior + + unsigned sz = malloc_size(p); + carve::memoryCurr += sz; + carve::memoryTotal += sz; + carve::addBlk(sz); + return p; +} + +void carve_free(void *p) { + unsigned sz = malloc_size(p); + carve::memoryCurr -= sz; + carve::remBlk(sz); + free(p); +} + +#else + +void* carve_alloc(size_t size) { + void *p = malloc(size + 4); + if (p == 0) throw std::bad_alloc(); // ANSI/ISO compliant behavior + + int *sizePtr = (int*)p; + *sizePtr = size; + ++sizePtr; + carve::memoryCurr += size; + carve::memoryTotal += size; + carve::addBlk(size); + return sizePtr; +} + +void carve_free(void *p) { + // our memory block is actually a size of an int behind this pointer. + int *sizePtr = (int*)p; + + --sizePtr; + + carve::memoryCurr -= *sizePtr; + int size = *sizePtr; + carve::remBlk(size); + free(sizePtr); +} + +#endif + + +void* operator new (size_t size) { + return carve_alloc(size); +} + +void* operator new[](size_t size) { + return carve_alloc(size); +} + + +void operator delete (void *p) { + carve_free(p); +} + +void operator delete[](void *p) { + carve_free(p); +} + +#endif + +namespace carve { + + + +#ifdef WIN32 + + typedef __int64 precise_time_t; + + precise_time_t g_frequency; + + void initTime() { + ::QueryPerformanceFrequency((LARGE_INTEGER*)&g_frequency); + } + + void getTime(precise_time_t &t) { + ::QueryPerformanceCounter((LARGE_INTEGER*)&t); + } + + double diffTime(precise_time_t from, precise_time_t to) { + return (double)(to - from) / (double)g_frequency; + } + +#else + + typedef double precise_time_t; + + void initTime() { + } + + void getTime(precise_time_t &t) { + struct timeval tv; + gettimeofday(&tv, NULL); + t = tv.tv_sec + tv.tv_usec / 1000000.0; + } + + double diffTime(precise_time_t from, precise_time_t to) { + return to - from; + } + +#endif + + struct Entry { + Entry(int _id) { + id = _id; + time = 0; + parent = NULL; + } + int id; + double time; + int64_t memoryDiff; + int64_t allocTotal; + int delta_blk_cnt_curr[32]; + int delta_blk_cnt_total[32]; + Entry *parent; + std::vector children; + }; + + struct Timer { + struct cmp { + bool operator()(const std::pair &a, const std::pair &b) const { + return b.second < a.second; + } + bool operator()(const Entry * const &a, const Entry * const &b) const { + return b->time < a->time; + } + }; + + Timer() { + initTime(); + } + + struct Snapshot { + precise_time_t time; + uint64_t memory_curr; + uint64_t memory_total; + unsigned blk_cnt_curr[32]; + unsigned blk_cnt_total[32]; + }; + + static void getSnapshot(Snapshot &snapshot) { + getTime(snapshot.time); + snapshot.memory_curr = carve::memoryCurr; + snapshot.memory_total = carve::memoryTotal; + std::memcpy(snapshot.blk_cnt_curr, carve::blkCntCurr, sizeof(carve::blkCntCurr)); + std::memcpy(snapshot.blk_cnt_total, carve::blkCntTotal, sizeof(carve::blkCntTotal)); + } + + static void compareSnapshot(const Snapshot &from, const Snapshot &to, Entry *entry) { + entry->time = diffTime(from.time, to.time); + entry->memoryDiff = to.memory_curr - from.memory_curr; + entry->allocTotal = to.memory_total - from.memory_total; + for (int i = 0; i < 32; i++) { + entry->delta_blk_cnt_curr[i] = to.blk_cnt_curr[i] - from.blk_cnt_curr[i]; + entry->delta_blk_cnt_total[i] = to.blk_cnt_total[i] - from.blk_cnt_total[i]; + } + } + + std::stack > currentTimers; + + void startTiming(int id) { + entries.push_back(Entry(id)); + currentTimers.push(std::make_pair(&entries.back(), Snapshot())); + getSnapshot(currentTimers.top().second); + } + + double endTiming() { + Snapshot end; + getSnapshot(end); + + Entry *entry = currentTimers.top().first; + compareSnapshot(currentTimers.top().second, end, entry); + + currentTimers.pop(); + if (!currentTimers.empty()) { + entry->parent = currentTimers.top().first; + entry->parent->children.push_back(entry); + } else { + root_entries.push_back(entry); + } + //std::sort(entry->children.begin(), entry->children.end(), cmp()); + return entry->time; + } + + typedef std::list EntryList; + EntryList entries; + std::vector root_entries; + + std::map names; + + static std::string formatMemory(int64_t value) { + + std::ostringstream result; + + result << (value >= 0 ? "+" : "-"); + if (value < 0) { + value = -value; + } + + int power = 1; + while (value > pow(10.0, power)) { + power++; + } + + for (power--; power >= 0; power--) { + int64_t base = pow(10.0, power); + int64_t amount = value / base; + result << +#if defined(_MSC_VER) && _MSC_VER < 1300 + (long) +#endif + amount; + if (power > 0 && (power % 3) == 0) { + result << ","; + } + value -= amount * base; + } + + result << " bytes"; + + return result.str(); + } + + void printEntries(std::ostream &o, const std::vector &entries, const std::string &indent, double parent_time) { + if (parent_time <= 0.0) { + parent_time = 0.0; + for (size_t i = 0; i < entries.size(); ++i) { + parent_time += entries[i]->time; + } + } + double t_tot = 0.0; + for (size_t i = 0; i < entries.size(); ++i) { + const Entry *entry = entries[i]; + + std::ostringstream r; + r << indent; + std::string str = names[entry->id]; + if (str.empty()) { + r << "(" << entry->id << ")"; + } else { + r << str; + } + r << " "; + std::string pad(r.str().size(), ' '); + r << " - exectime: " << entry->time << "s (" << (entry->time * 100.0 / parent_time) << "%)" << std::endl; + if (entry->allocTotal || entry->memoryDiff) { + r << pad << " - alloc: " << formatMemory(entry->allocTotal) << " delta: " << formatMemory(entry->memoryDiff) << std::endl; + r << pad << " - alloc blks:"; + for (int i = 0; i < 32; i++) { if (entry->delta_blk_cnt_total[i]) r << ' ' << ((1 << (i - 1)) + 1) << '-' << (1 << i) << ':' << entry->delta_blk_cnt_total[i]; } + r << std::endl; + r << pad << " - delta blks:"; + for (int i = 0; i < 32; i++) { if (entry->delta_blk_cnt_curr[i]) r << ' ' << ((1 << (i - 1)) + 1) << '-' << (1 << i) << ':' << entry->delta_blk_cnt_curr[i]; } + r << std::endl; + } + o << r.str(); + t_tot += entry->time; + if (entry->children.size()) printEntries(o, entry->children, indent + " ", entry->time); + } + if (t_tot < parent_time) { + o << indent << "*** unaccounted: " << (parent_time - t_tot) << "s (" << (100.0 - t_tot * 100.0 / parent_time) << "%)" << std::endl; + } + } + + void print() { + std::map totals; + std::cerr << "Timings: " << std::endl; + // print out all the entries. + + //std::sort(root_entries.begin(), root_entries.end(), cmp()); + + printEntries(std::cerr, root_entries, " ", -1.0); + + for (EntryList::const_iterator it = entries.begin(); it != entries.end(); ++it) { + totals[(*it).id] += (*it).time; + } + + std::cerr << std::endl; + std::cerr << "Totals: " << std::endl; + + std::vector > sorted_totals; + sorted_totals.reserve(totals.size()); + for (std::map::iterator it = totals.begin(); it != totals.end(); ++it) { + sorted_totals.push_back(*it); + } + + std::sort(sorted_totals.begin(), sorted_totals.end(), cmp()); + + for (std::vector >::iterator it = sorted_totals.begin(); it != sorted_totals.end(); ++it) { + std::cerr << " "; + std::string str = names[it->first]; + if (str.empty()) { + std::cerr << "(" << it->first << ")"; + } else { + std::cerr << str; + } + std::cerr << " - " << it->second << "s " << std::endl; + } + } + void registerID(int id, const char *name) { + names[id] = name; + } + int registerID(const char *name) { + int id = names.size() + 1; + names[id] = name; + return id; + } + + }; + + Timer timer; + + + TimingBlock::TimingBlock(int id) { +#if CARVE_USE_TIMINGS + timer.startTiming(id); +#endif + } + + TimingBlock::TimingBlock(const TimingName &name) { +#if CARVE_USE_TIMINGS + timer.startTiming(name.id); +#endif + } + + + TimingBlock::~TimingBlock() { +#if CARVE_USE_TIMINGS + timer.endTiming(); +#endif + } + void Timing::start(int id) { +#if CARVE_USE_TIMINGS + timer.startTiming(id); +#endif + } + + double Timing::stop() { +#if CARVE_USE_TIMINGS + return timer.endTiming(); +#endif + } + + void Timing::printTimings() { + timer.print(); + } + + void Timing::registerID(int id, const char *name) { + timer.registerID(id, name); + } + + TimingName::TimingName(const char *name) { + id = timer.registerID(name); + } + +} + +#endif diff --git a/thirdparty/carve-1.4.0/lib/triangulator.cpp b/thirdparty/carve-1.4.0/lib/triangulator.cpp new file mode 100644 index 00000000..bdf94214 --- /dev/null +++ b/thirdparty/carve-1.4.0/lib/triangulator.cpp @@ -0,0 +1,1204 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include + +#include + + +namespace { + // private code related to hole patching. + + class order_h_loops_2d { + const std::vector > &poly; + int axis; + public: + + order_h_loops_2d(const std::vector > &_poly, int _axis) : + poly(_poly), axis(_axis) { + } + + bool operator()(const std::pair &a, + const std::pair &b) const { + return carve::triangulate::detail::axisOrdering(poly[a.first][a.second], poly[b.first][b.second], axis); + } + }; + + class heap_ordering_2d { + const std::vector > &poly; + const std::vector > &loop; + const carve::geom2d::P2 p; + int axis; + + public: + + heap_ordering_2d(const std::vector > &_poly, + const std::vector > &_loop, + const carve::geom2d::P2 _p, + int _axis) : poly(_poly), loop(_loop), p(_p), axis(_axis) { + } + + bool operator()(size_t a, size_t b) const { + double da = carve::geom::distance2(p, poly[loop[a].first][loop[a].second]); + double db = carve::geom::distance2(p, poly[loop[b].first][loop[b].second]); + if (da > db) return true; + if (da < db) return false; + return carve::triangulate::detail::axisOrdering(poly[loop[a].first][loop[a].second], poly[loop[b].first][loop[b].second], axis); + } + }; + + static inline void patchHoleIntoPolygon_2d(std::vector > &f_loop, + size_t f_loop_attach, + size_t h_loop, + size_t h_loop_attach, + size_t h_loop_size) { + f_loop.insert(f_loop.begin() + f_loop_attach + 1, h_loop_size + 2, std::make_pair(h_loop, 0)); + size_t f = f_loop_attach + 1; + + for (size_t h = h_loop_attach; h != h_loop_size; ++h) { + f_loop[f++].second = h; + } + + for (size_t h = 0; h <= h_loop_attach; ++h) { + f_loop[f++].second = h; + } + + f_loop[f] = f_loop[f_loop_attach]; + } + + static inline const carve::geom2d::P2 &pvert(const std::vector > &poly, const std::pair &idx) { + return poly[idx.first][idx.second]; + } +} + + +namespace { + // private code related to triangulation. + + using carve::triangulate::detail::vertex_info; + + struct vertex_info_ordering { + bool operator()(const vertex_info *a, const vertex_info *b) const { + return a->score < b->score; + } + }; + + struct vertex_info_l2norm_inc_ordering { + const vertex_info *v; + vertex_info_l2norm_inc_ordering(const vertex_info *_v) : v(_v) { + } + bool operator()(const vertex_info *a, const vertex_info *b) const { + return carve::geom::distance2(v->p, a->p) > carve::geom::distance2(v->p, b->p); + } + }; + + class EarQueue { + std::vector queue; + + void checkheap() { +//#ifdef __GNUC__ +// CARVE_ASSERT(std::__is_heap(queue.begin(), queue.end(), vertex_info_ordering())); +//#endif + } + + public: + EarQueue() { + } + + size_t size() const { + return queue.size(); + } + + void push(vertex_info *v) { +#if defined(CARVE_DEBUG) + checkheap(); +#endif + queue.push_back(v); + std::push_heap(queue.begin(), queue.end(), vertex_info_ordering()); + } + + vertex_info *pop() { +#if defined(CARVE_DEBUG) + checkheap(); +#endif + std::pop_heap(queue.begin(), queue.end(), vertex_info_ordering()); + vertex_info *v = queue.back(); + queue.pop_back(); + return v; + } + + void remove(vertex_info *v) { +#if defined(CARVE_DEBUG) + checkheap(); +#endif + CARVE_ASSERT(std::find(queue.begin(), queue.end(), v) != queue.end()); + double score = v->score; + if (v != queue[0]) { + v->score = queue[0]->score + 1; + std::make_heap(queue.begin(), queue.end(), vertex_info_ordering()); + } + CARVE_ASSERT(v == queue[0]); + std::pop_heap(queue.begin(), queue.end(), vertex_info_ordering()); + CARVE_ASSERT(queue.back() == v); + queue.pop_back(); + v->score = score; + } + + void changeScore(vertex_info *v, double score) { +#if defined(CARVE_DEBUG) + checkheap(); +#endif + CARVE_ASSERT(std::find(queue.begin(), queue.end(), v) != queue.end()); + if (v->score != score) { + v->score = score; + std::make_heap(queue.begin(), queue.end(), vertex_info_ordering()); + } + } + + // 39% of execution time + void updateVertex(vertex_info *v) { + double spre = v->score; + bool qpre = v->isCandidate(); + v->recompute(); + bool qpost = v->isCandidate(); + double spost = v->score; + + v->score = spre; + + if (qpre) { + if (qpost) { + if (v->score != spre) { + changeScore(v, spost); + } + } else { + remove(v); + } + } else { + if (qpost) { + push(v); + } + } + } + }; + + + + int windingNumber(vertex_info *begin, const carve::geom2d::P2 &point) { + int wn = 0; + + vertex_info *v = begin; + do { + if (v->p.y <= point.y) { + if (v->next->p.y > point.y && carve::geom2d::orient2d(v->p, v->next->p, point) > 0.0) { + ++wn; + } + } else { + if (v->next->p.y <= point.y && carve::geom2d::orient2d(v->p, v->next->p, point) < 0.0) { + --wn; + } + } + v = v->next; + } while (v != begin); + + return wn; + } + + + + bool internalToAngle(const vertex_info *a, + const vertex_info *b, + const vertex_info *c, + const carve::geom2d::P2 &p) { + return carve::geom2d::internalToAngle(a->p, b->p, c->p, p); + } + + + + bool findDiagonal(vertex_info *begin, vertex_info *&v1, vertex_info *&v2) { + vertex_info *t; + std::vector heap; + + v1 = begin; + do { + heap.clear(); + + for (v2 = v1->next->next; v2 != v1->prev; v2 = v2->next) { + if (!internalToAngle(v1->next, v1, v1->prev, v2->p) || + !internalToAngle(v2->next, v2, v2->prev, v1->p)) continue; + + heap.push_back(v2); + std::push_heap(heap.begin(), heap.end(), vertex_info_l2norm_inc_ordering(v1)); + } + + while (heap.size()) { + std::pop_heap(heap.begin(), heap.end(), vertex_info_l2norm_inc_ordering(v1)); + v2 = heap.back(); heap.pop_back(); + +#if defined(CARVE_DEBUG) + std::cerr << "testing: " << v1 << " - " << v2 << std::endl; + std::cerr << " length = " << (v2->p - v1->p).length() << std::endl; + std::cerr << " pos: " << v1->p << " - " << v2->p << std::endl; +#endif + // test whether v1-v2 is a valid diagonal. + double v_min_x = std::min(v1->p.x, v2->p.x); + double v_max_x = std::max(v1->p.x, v2->p.x); + + bool intersected = false; + + for (t = v1->next; !intersected && t != v1->prev; t = t->next) { + vertex_info *u = t->next; + if (t == v2 || u == v2) continue; + + double l1 = carve::geom2d::orient2d(v1->p, v2->p, t->p); + double l2 = carve::geom2d::orient2d(v1->p, v2->p, u->p); + + if ((l1 > 0.0 && l2 > 0.0) || (l1 < 0.0 && l2 < 0.0)) { + // both on the same side; no intersection + continue; + } + + double dx13 = v1->p.x - t->p.x; + double dy13 = v1->p.y - t->p.y; + double dx43 = u->p.x - t->p.x; + double dy43 = u->p.y - t->p.y; + double dx21 = v2->p.x - v1->p.x; + double dy21 = v2->p.y - v1->p.y; + double ua_n = dx43 * dy13 - dy43 * dx13; + double ub_n = dx21 * dy13 - dy21 * dx13; + double u_d = dy43 * dx21 - dx43 * dy21; + + if (carve::math::ZERO(u_d)) { + // parallel + if (carve::math::ZERO(ua_n)) { + // colinear + if (std::max(t->p.x, u->p.x) >= v_min_x && std::min(t->p.x, u->p.x) <= v_max_x) { + // colinear and intersecting + intersected = true; + } + } + } else { + // not parallel + double ua = ua_n / u_d; + double ub = ub_n / u_d; + + if (0.0 <= ua && ua <= 1.0 && 0.0 <= ub && ub <= 1.0) { + intersected = true; + } + } +#if defined(CARVE_DEBUG) + if (intersected) { + std::cerr << " failed on edge: " << t << " - " << u << std::endl; + std::cerr << " pos: " << t->p << " - " << u->p << std::endl; + } +#endif + } + + if (!intersected) { + // test whether midpoint winding == 1 + + carve::geom2d::P2 mid = (v1->p + v2->p) / 2; + if (windingNumber(begin, mid) == 1) { + // this diagonal is ok + return true; + } + } + } + + // couldn't find a diagonal from v1 that was ok. + v1 = v1->next; + } while (v1 != begin); + return false; + } + + + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + void dumpPoly(const std::vector &points, + const std::vector &result) { + static int step = 0; + std::ostringstream filename; + filename << "poly_" << step++ << ".svg"; + std::cerr << "dumping to " << filename.str() << std::endl; + std::ofstream out(filename.str().c_str()); + + double minx = points[0].x, maxx = points[0].x; + double miny = points[0].y, maxy = points[0].y; + + for (size_t i = 1; i < points.size(); ++i) { + minx = std::min(points[i].x, minx); maxx = std::max(points[i].x, maxx); + miny = std::min(points[i].y, miny); maxy = std::max(points[i].y, maxy); + } + double scale = 100 / std::max(maxx-minx, maxy-miny); + + maxx *= scale; minx *= scale; + maxy *= scale; miny *= scale; + + double width = maxx - minx + 10; + double height = maxy - miny + 10; + + out << "\ +\n\ +\n\ +\n"; + + out << "" << std::endl; + + for (size_t i = 0; i < result.size(); ++i) { + out << "" << std::endl; + } + + out << "" << std::endl; + } +#endif +} + + + +double carve::triangulate::detail::vertex_info::triScore(const vertex_info *p, const vertex_info *v, const vertex_info *n) { + + // different scoring functions. +#if 0 + bool convex = isLeft(p, v, n); + if (!convex) return -1e-5; + + double a1 = carve::geom2d::atan2(p->p - v->p) - carve::geom2d::atan2(n->p - v->p); + double a2 = carve::geom2d::atan2(v->p - n->p) - carve::geom2d::atan2(p->p - n->p); + if (a1 < 0) a1 += M_PI * 2; + if (a2 < 0) a2 += M_PI * 2; + + return std::min(a1, std::min(a2, M_PI - a1 - a2)) / (M_PI / 3); +#endif + +#if 1 + // range: 0 - 1 + double a, b, c; + + bool convex = isLeft(p, v, n); + if (!convex) return -1e-5; + + a = (n->p - v->p).length(); + b = (p->p - n->p).length(); + c = (v->p - p->p).length(); + + if (a < 1e-10 || b < 1e-10 || c < 1e-10) return 0.0; + + return std::max(std::min((a+b)/c, std::min((a+c)/b, (b+c)/a)) - 1.0, 0.0); +#endif +} + + + +double carve::triangulate::detail::vertex_info::calcScore() const { + +#if 0 + // examine only this triangle. + double this_tri = triScore(prev, this, next); + return this_tri; +#endif + +#if 1 + // attempt to look ahead in the neighbourhood to attempt to clip ears that have good neighbours. + double this_tri = triScore(prev, this, next); + double next_tri = triScore(prev, next, next->next); + double prev_tri = triScore(prev->prev, prev, next); + + return this_tri + std::max(next_tri, prev_tri) * .2; +#endif + +#if 0 + // attempt to penalise ears that will require producing a sliver triangle. + double score = triScore(prev, this, next); + + double a1, a2; + a1 = carve::geom2d::atan2(prev->p - next->p); + a2 = carve::geom2d::atan2(next->next->p - next->p); + if (fabs(a1 - a2) < 1e-5) score -= .5; + + a1 = carve::geom2d::atan2(next->p - prev->p); + a2 = carve::geom2d::atan2(prev->prev->p - prev->p); + if (fabs(a1 - a2) < 1e-5) score -= .5; + + return score; +#endif +} + + + +bool carve::triangulate::detail::vertex_info::isClipable() const { + for (const vertex_info *v_test = next->next; v_test != prev; v_test = v_test->next) { + if (v_test->convex) { + continue; + } + + if (v_test->p == prev->p || + v_test->p == next->p) { + continue; + } + + if (v_test->p == p) { + if (v_test->next->p == prev->p && + v_test->prev->p == next->p) { + return false; + } + if (v_test->next->p == prev->p || + v_test->prev->p == next->p) { + continue; + } + } + + if (pointInTriangle(prev, this, next, v_test)) { + return false; + } + } + return true; +} + + + +size_t carve::triangulate::detail::removeDegeneracies(vertex_info *&begin, std::vector &result) { + vertex_info *v = begin; + vertex_info *n; + size_t count = 0; + do { + bool remove = false; + if (v->p == v->next->p) { + remove = true; + } else if (v->p == v->next->next->p) { + if (v->next->p == v->next->next->next->p) { + // a 'z' in the loop: z (a) b a b c -> remove a-b-a -> z (a) a b c -> remove a-a-b (next loop) -> z a b c + // z --(a)-- b + // / + // / + // a -- b -- d + remove = true; + } else { + // a 'shard' in the loop: z (a) b a c d -> remove a-b-a -> z (a) a b c d -> remove a-a-b (next loop) -> z a b c d + // z --(a)-- b + // / + // / + // a -- c -- d + // n.b. can only do this if the shard is pointing out of the polygon. i.e. b is outside z-a-c + remove = !internalToAngle(v->next->next->next, v, v->prev, v->next->p); + } + } + + if (remove) { + result.push_back(carve::triangulate::tri_idx(v->idx, v->next->idx, v->next->next->idx)); + n = v->next; + if (n == begin) begin = n->next; + n->remove(); + count++; + delete n; + continue; + } + + v = v->next; + } while (v != begin); + return count; +} + + + +bool carve::triangulate::detail::splitAndResume(vertex_info *begin, std::vector &result) { + vertex_info *v1, *v2; + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + { + std::vector dummy; + std::vector dummy_p; + vertex_info *v = begin; + do { + dummy_p.push_back(v->p); + v = v->next; + } while (v != begin); + std::cerr << "input to splitAndResume:" << std::endl; + dumpPoly(dummy_p, dummy); + } +#endif + + + if (!findDiagonal(begin, v1, v2)) return false; + + vertex_info *v1_copy = new vertex_info(*v1); + vertex_info *v2_copy = new vertex_info(*v2); + + v1->next = v2; + v2->prev = v1; + + v1_copy->next->prev = v1_copy; + v2_copy->prev->next = v2_copy; + + v1_copy->prev = v2_copy; + v2_copy->next = v1_copy; + + bool r1 = doTriangulate(v1, result); + bool r2 = doTriangulate(v1_copy, result); + return r1 && r2; +} + + + +bool carve::triangulate::detail::doTriangulate(vertex_info *begin, std::vector &result) { +#if defined(CARVE_DEBUG) + std::cerr << "entering doTriangulate" << std::endl; +#endif + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + { + std::vector dummy; + std::vector dummy_p; + vertex_info *v = begin; + do { + dummy_p.push_back(v->p); + v = v->next; + } while (v != begin); + dumpPoly(dummy_p, dummy); + } +#endif + + EarQueue vq; + + vertex_info *v = begin; + size_t remain = 0; + do { + if (v->isCandidate()) vq.push(v); + v = v->next; + remain++; + } while (v != begin); + +#if defined(CARVE_DEBUG) + std::cerr << "remain = " << remain << std::endl; +#endif + + while (vq.size()) { + vertex_info *v = vq.pop(); + if (!v->isClipable()) { + v->failed = true; + continue; + } + + continue_clipping: + vertex_info *n = v->next; + vertex_info *p = v->prev; + + result.push_back(carve::triangulate::tri_idx(v->prev->idx, v->idx, v->next->idx)); + +#if defined(CARVE_DEBUG) + { + std::vector temp; + temp.push_back(v->prev->p); + temp.push_back(v->p); + temp.push_back(v->next->p); + std::cerr << "clip " << v << " idx = " << v->idx << " score = " << v->score << " area = " << carve::geom2d::signedArea(temp) << " " << temp[0] << " " << temp[1] << " " << temp[2] << std::endl; + } +#endif + + v->remove(); + remain--; + if (v == begin) begin = v->next; + delete v; + + vq.updateVertex(n); + vq.updateVertex(p); + + if (n->score < p->score) { std::swap(n, p); } + + if (n->score > 0.25 && n->isCandidate() && n->isClipable()) { + vq.remove(n); + v = n; +#if defined(CARVE_DEBUG) + std::cerr << " continue clipping (n), score = " << n->score << std::endl; +#endif + goto continue_clipping; + } + + if (p->score > 0.25 && p->isCandidate() && p->isClipable()) { + vq.remove(p); + v = p; +#if defined(CARVE_DEBUG) + std::cerr << " continue clipping (p), score = " << n->score << std::endl; +#endif + goto continue_clipping; + } + +#if defined(CARVE_DEBUG) + std::cerr << "looking for new start point" << std::endl; + std::cerr << "remain = " << remain << std::endl; +#endif + } + +#if defined(CARVE_DEBUG) + std::cerr << "doTriangulate complete; remain=" << remain << std::endl; +#endif + + bool ret; + + if (remain > 3) { + std::vector temp; + temp.reserve(remain); + vertex_info *v = begin; + + do { + temp.push_back(v->p); + v = v->next; + } while (v != begin); + + if (carve::geom2d::signedArea(temp) == 0) { + // XXX: this test will fail in cases where the boundary is + // twisted so that a negative area balances a positive area. +#if defined(CARVE_DEBUG) + std::cerr << "skeleton remains. complete." << std::endl; +#endif + goto done; + } + +#if defined(CARVE_DEBUG) + std::cerr << "before removeDegeneracies: remain=" << remain << std::endl; +#endif + remain -= removeDegeneracies(begin, result); +#if defined(CARVE_DEBUG) + std::cerr << "after removeDegeneracies: remain=" << remain << std::endl; +#endif + } + + if (remain > 3) { + return splitAndResume(begin, result); + } else if (remain == 3) { + result.push_back(carve::triangulate::tri_idx(begin->idx, begin->next->idx, begin->next->next->idx)); + ret = true; + } else { + ret = true; + } + + done: + vertex_info *d = begin; + do { + vertex_info *n = d->next; + delete d; + d = n; + } while (d != begin); + + return ret; +} + + + +bool testCandidateAttachment(const std::vector > &poly, + std::vector > ¤t_f_loop, + size_t curr, + carve::geom2d::P2 hole_min) { + const size_t SZ = current_f_loop.size(); + + if (!carve::geom2d::internalToAngle(pvert(poly, current_f_loop[(curr+1) % SZ]), + pvert(poly, current_f_loop[curr]), + pvert(poly, current_f_loop[(curr+SZ-1) % SZ]), + hole_min)) { + return false; + } + + carve::geom2d::LineSegment2 test(hole_min, pvert(poly, current_f_loop[curr])); + + size_t v1 = current_f_loop.size() - 1; + size_t v2 = 0; + int v1_side = carve::geom2d::orient2d(test.v1, test.v2, pvert(poly, current_f_loop[v1])); + int v2_side = 0; + + while (v2 != current_f_loop.size()) { + v2_side = carve::geom2d::orient2d(test.v1, test.v2, pvert(poly, current_f_loop[v2])); + + if (v1_side != v2_side) { + // XXX: need to test vertices, not indices, because they may + // be duplicated. + if (pvert(poly, current_f_loop[v1]) != pvert(poly, current_f_loop[curr]) && + pvert(poly, current_f_loop[v2]) != pvert(poly, current_f_loop[curr])) { + carve::geom2d::LineSegment2 test2(pvert(poly, current_f_loop[v1]), pvert(poly, current_f_loop[v2])); + carve::LineIntersectionClass ic = carve::geom2d::lineSegmentIntersection(test, test2).iclass; + if (ic > 0) { + // intersection; failed. + return false; + } + } + } + + v1 = v2; + v1_side = v2_side; + ++v2; + } + return true; +} + + + +void +carve::triangulate::incorporateHolesIntoPolygon( + const std::vector > &poly, + std::vector > &result, + size_t poly_loop, + const std::vector &hole_loops) { + typedef std::vector loop_t; + + size_t N = poly[poly_loop].size(); + + // work out how much space to reserve for the patched in holes. + for (size_t i = 0; i < hole_loops.size(); i++) { + N += 2 + poly[hole_loops[i]].size(); + } + + // this is the vector that we will build the result in. + result.clear(); + result.reserve(N); + + // this is a heap of result indices that defines the vertex test order. + std::vector f_loop_heap; + f_loop_heap.reserve(N); + + // add the poly loop to result. + for (size_t i = 0; i < poly[poly_loop].size(); ++i) { + result.push_back(std::make_pair((size_t)poly_loop, i)); + } + + if (hole_loops.size() == 0) { + return; + } + + std::vector > h_loop_min_vertex; + + h_loop_min_vertex.reserve(hole_loops.size()); + + // find the major axis for the holes - this is the axis that we + // will sort on for finding vertices on the polygon to join + // holes up to. + // + // it might also be nice to also look for whether it is better + // to sort ascending or descending. + // + // another trick that could be used is to modify the projection + // by 90 degree rotations or flipping about an axis. just as + // long as we keep the carve::geom3d::Vector pointers for the + // real data in sync, everything should be ok. then we wouldn't + // need to accomodate axes or sort order in the main loop. + + // find the bounding box of all the holes. + carve::geom2d::P2 h_min, h_max; + h_min = h_max = poly[hole_loops[0]][0]; + for (size_t i = 0; i < hole_loops.size(); ++i) { + const loop_t &hole = poly[hole_loops[i]]; + for (size_t j = 0; j < hole.size(); ++j) { + assign_op(h_min, h_min, hole[j], carve::util::min_functor()); + assign_op(h_max, h_max, hole[j], carve::util::max_functor()); + } + } + // choose the axis for which the bbox is largest. + int axis = (h_max.x - h_min.x) > (h_max.y - h_min.y) ? 0 : 1; + + // for each hole, find the minimum vertex in the chosen axis. + for (size_t i = 0; i < hole_loops.size(); ++i) { + const loop_t &hole = poly[hole_loops[i]]; + size_t best, curr; + best = 0; + for (curr = 1; curr != hole.size(); ++curr) { + if (detail::axisOrdering(hole[curr], hole[best], axis)) { + best = curr; + } + } + h_loop_min_vertex.push_back(std::make_pair(hole_loops[i], best)); + } + + // sort the holes by the minimum vertex. + std::sort(h_loop_min_vertex.begin(), h_loop_min_vertex.end(), order_h_loops_2d(poly, axis)); + + // now, for each hole, find a vertex in the current polygon loop that it can be joined to. + for (unsigned i = 0; i < h_loop_min_vertex.size(); ++i) { + // the index of the vertex in the hole to connect. + size_t hole_i = h_loop_min_vertex[i].first; + size_t hole_i_connect = h_loop_min_vertex[i].second; + + carve::geom2d::P2 hole_min = poly[hole_i][hole_i_connect]; + + f_loop_heap.clear(); + // we order polygon loop vertices that may be able to be connected + // to the hole vertex by their distance to the hole vertex + heap_ordering_2d _heap_ordering(poly, result, hole_min, axis); + + const size_t SZ = result.size(); + for (size_t j = 0; j < SZ; ++j) { + // it is guaranteed that there exists a polygon vertex with + // coord < the min hole coord chosen, which can be joined to + // the min hole coord without crossing the polygon + // boundary. also, because we merge holes in ascending + // order, it is also true that this join can never cross + // another hole (and that doesn't need to be tested for). + if (pvert(poly, result[j]).v[axis] < hole_min.v[axis]) { + f_loop_heap.push_back(j); + std::push_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + } + } + + // we are going to test each potential (according to the + // previous test) polygon vertex as a candidate join. we order + // by closeness to the hole vertex, so that the join we make + // is as small as possible. to test, we need to check the + // joining line segment does not cross any other line segment + // in the current polygon loop (excluding those that have the + // vertex that we are attempting to join with as an endpoint). + size_t attachment_point = result.size(); + + while (f_loop_heap.size()) { + std::pop_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + size_t curr = f_loop_heap.back(); + f_loop_heap.pop_back(); + // test the candidate join from result[curr] to hole_min + + if (!testCandidateAttachment(poly, result, curr, hole_min)) { + continue; + } + + attachment_point = curr; + break; + } + + if (attachment_point == result.size()) { + CARVE_FAIL("didn't manage to link up hole!"); + } + + patchHoleIntoPolygon_2d(result, attachment_point, hole_i, hole_i_connect, poly[hole_i].size()); + } +} + + + +std::vector > +carve::triangulate::incorporateHolesIntoPolygon(const std::vector > &poly) { +#if 1 + std::vector > result; + std::vector hole_indices; + hole_indices.reserve(poly.size() - 1); + for (size_t i = 1; i < poly.size(); ++i) { + hole_indices.push_back(i); + } + + incorporateHolesIntoPolygon(poly, result, 0, hole_indices); + + return result; + +#else + typedef std::vector loop_t; + size_t N = poly[0].size(); + // + // work out how much space to reserve for the patched in holes. + for (size_t i = 0; i < poly.size(); i++) { + N += 2 + poly[i].size(); + } + + // this is the vector that we will build the result in. + std::vector > current_f_loop; + current_f_loop.reserve(N); + + // this is a heap of current_f_loop indices that defines the vertex test order. + std::vector f_loop_heap; + f_loop_heap.reserve(N); + + // add the poly loop to current_f_loop. + for (size_t i = 0; i < poly[0].size(); ++i) { + current_f_loop.push_back(std::make_pair((size_t)0, i)); + } + + if (poly.size() == 1) { + return current_f_loop; + } + + std::vector > h_loop_min_vertex; + + h_loop_min_vertex.reserve(poly.size() - 1); + + // find the major axis for the holes - this is the axis that we + // will sort on for finding vertices on the polygon to join + // holes up to. + // + // it might also be nice to also look for whether it is better + // to sort ascending or descending. + // + // another trick that could be used is to modify the projection + // by 90 degree rotations or flipping about an axis. just as + // long as we keep the carve::geom3d::Vector pointers for the + // real data in sync, everything should be ok. then we wouldn't + // need to accomodate axes or sort order in the main loop. + + // find the bounding box of all the holes. + double min_x, min_y, max_x, max_y; + min_x = max_x = poly[1][0].x; + min_y = max_y = poly[1][0].y; + for (size_t i = 1; i < poly.size(); ++i) { + const loop_t &hole = poly[i]; + for (size_t j = 0; j < hole.size(); ++j) { + min_x = std::min(min_x, hole[j].x); + min_y = std::min(min_y, hole[j].y); + max_x = std::max(max_x, hole[j].x); + max_y = std::max(max_y, hole[j].y); + } + } + + // choose the axis for which the bbox is largest. + int axis = (max_x - min_x) > (max_y - min_y) ? 0 : 1; + + // for each hole, find the minimum vertex in the chosen axis. + for (size_t i = 1; i < poly.size(); ++i) { + const loop_t &hole = poly[i]; + size_t best, curr; + best = 0; + for (curr = 1; curr != hole.size(); ++curr) { + if (detail::axisOrdering(hole[curr], hole[best], axis)) { + best = curr; + } + } + h_loop_min_vertex.push_back(std::make_pair(i, best)); + } + + // sort the holes by the minimum vertex. + std::sort(h_loop_min_vertex.begin(), h_loop_min_vertex.end(), order_h_loops_2d(poly, axis)); + + // now, for each hole, find a vertex in the current polygon loop that it can be joined to. + for (unsigned i = 0; i < h_loop_min_vertex.size(); ++i) { + // the index of the vertex in the hole to connect. + size_t hole_i = h_loop_min_vertex[i].first; + size_t hole_i_connect = h_loop_min_vertex[i].second; + + carve::geom2d::P2 hole_min = poly[hole_i][hole_i_connect]; + + f_loop_heap.clear(); + // we order polygon loop vertices that may be able to be connected + // to the hole vertex by their distance to the hole vertex + heap_ordering_2d _heap_ordering(poly, current_f_loop, hole_min, axis); + + const size_t SZ = current_f_loop.size(); + for (size_t j = 0; j < SZ; ++j) { + // it is guaranteed that there exists a polygon vertex with + // coord < the min hole coord chosen, which can be joined to + // the min hole coord without crossing the polygon + // boundary. also, because we merge holes in ascending + // order, it is also true that this join can never cross + // another hole (and that doesn't need to be tested for). + if (pvert(poly, current_f_loop[j]).v[axis] < hole_min.v[axis]) { + f_loop_heap.push_back(j); + std::push_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + } + } + + // we are going to test each potential (according to the + // previous test) polygon vertex as a candidate join. we order + // by closeness to the hole vertex, so that the join we make + // is as small as possible. to test, we need to check the + // joining line segment does not cross any other line segment + // in the current polygon loop (excluding those that have the + // vertex that we are attempting to join with as an endpoint). + size_t attachment_point = current_f_loop.size(); + + while (f_loop_heap.size()) { + std::pop_heap(f_loop_heap.begin(), f_loop_heap.end(), _heap_ordering); + size_t curr = f_loop_heap.back(); + f_loop_heap.pop_back(); + // test the candidate join from current_f_loop[curr] to hole_min + + if (!testCandidateAttachment(poly, current_f_loop, curr, hole_min)) { + continue; + } + + attachment_point = curr; + break; + } + + if (attachment_point == current_f_loop.size()) { + CARVE_FAIL("didn't manage to link up hole!"); + } + + patchHoleIntoPolygon_2d(current_f_loop, attachment_point, hole_i, hole_i_connect, poly[hole_i].size()); + } + + return current_f_loop; +#endif +} + + + +std::vector > > +carve::triangulate::mergePolygonsAndHoles(const std::vector > &poly) { + std::vector poly_indices, hole_indices; + + poly_indices.reserve(poly.size()); + hole_indices.reserve(poly.size()); + + for (size_t i = 0; i < poly.size(); ++i) { + if (carve::geom2d::signedArea(poly[i]) < 0) { + poly_indices.push_back(i); + } else { + hole_indices.push_back(i); + } + } + + std::vector > > result; + result.resize(poly_indices.size()); + + if (hole_indices.size() == 0) { + for (size_t i = 0; i < poly.size(); ++i) { + result[i].resize(poly[i].size()); + for (size_t j = 0; j < poly[i].size(); ++j) { + result[i].push_back(std::make_pair(i, j)); + } + } + return result; + } + + if (poly_indices.size() == 1) { + incorporateHolesIntoPolygon(poly, result[0], poly_indices[0], hole_indices); + + return result; + } + + throw carve::exception("not implemented"); +} + + + +void carve::triangulate::triangulate(const std::vector &poly, + std::vector &result) { + std::vector vinfo; + const size_t N = poly.size(); + +#if defined(CARVE_DEBUG) + std::cerr << "TRIANGULATION BEGINS" << std::endl; +#endif + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + dumpPoly(poly, result); +#endif + + result.clear(); + if (N < 3) { + return; + } + + result.reserve(poly.size() - 2); + + if (N == 3) { + result.push_back(tri_idx(0, 1, 2)); + return; + } + + vinfo.resize(N); + + vinfo[0] = new detail::vertex_info(poly[0], 0); + for (size_t i = 1; i < N-1; ++i) { + vinfo[i] = new detail::vertex_info(poly[i], i); + vinfo[i]->prev = vinfo[i-1]; + vinfo[i-1]->next = vinfo[i]; + } + vinfo[N-1] = new detail::vertex_info(poly[N-1], N-1); + vinfo[N-1]->prev = vinfo[N-2]; + vinfo[N-1]->next = vinfo[0]; + vinfo[0]->prev = vinfo[N-1]; + vinfo[N-2]->next = vinfo[N-1]; + + for (size_t i = 0; i < N; ++i) { + vinfo[i]->recompute(); + } + + detail::vertex_info *begin = vinfo[0]; + + removeDegeneracies(begin, result); + doTriangulate(begin, result); + +#if defined(CARVE_DEBUG) + std::cerr << "TRIANGULATION ENDS" << std::endl; +#endif + +#if defined(CARVE_DEBUG_WRITE_PLY_DATA) + dumpPoly(poly, result); +#endif +} + + + +void carve::triangulate::detail::tri_pair_t::flip(vert_edge_t &old_edge, + vert_edge_t &new_edge, + vert_edge_t perim[4]) { + unsigned ai, bi; + unsigned cross_ai, cross_bi; + + findSharedEdge(ai, bi); + old_edge = ordered_vert_edge_t(a->v[ai], b->v[bi]); + + cross_ai = P(ai); + cross_bi = P(bi); + new_edge = ordered_vert_edge_t(a->v[cross_ai], b->v[cross_bi]); + + score = -score; + + a->v[N(ai)] = b->v[cross_bi]; + b->v[N(bi)] = a->v[cross_ai]; + + perim[0] = ordered_vert_edge_t(a->v[P(ai)], a->v[ai]); + perim[1] = ordered_vert_edge_t(a->v[N(ai)], a->v[ai]); // this edge was a b-edge + + perim[2] = ordered_vert_edge_t(b->v[P(bi)], b->v[bi]); + perim[3] = ordered_vert_edge_t(b->v[N(bi)], b->v[bi]); // this edge was an a-edge +} + + + +void carve::triangulate::detail::tri_pairs_t::insert(unsigned a, unsigned b, carve::triangulate::tri_idx *t) { + tri_pair_t *tp; + if (a < b) { + tp = storage[vert_edge_t(a,b)]; + if (!tp) { + tp = storage[vert_edge_t(a,b)] = new tri_pair_t; + } + tp->a = t; + } else { + tp = storage[vert_edge_t(b,a)]; + if (!tp) { + tp = storage[vert_edge_t(b,a)] = new tri_pair_t; + } + tp->b = t; + } +} diff --git a/thirdparty/carve-1.4.0/m4/ax_boost.m4 b/thirdparty/carve-1.4.0/m4/ax_boost.m4 new file mode 100644 index 00000000..9662af88 --- /dev/null +++ b/thirdparty/carve-1.4.0/m4/ax_boost.m4 @@ -0,0 +1,517 @@ +##### http://autoconf-archive.cryp.to/ax_boost.html +# +# SYNOPSIS +# +# AX_BOOST([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro +# searchs under /usr, /usr/local, and /opt, and evaluates the +# $BOOST_ROOT environment variable. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# AC_SUBST(BOOST_FILESYSTEM_LIB) +# AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) +# AC_SUBST(BOOST_THREAD_LIB) +# AC_SUBST(BOOST_IOSTREAMS_LIB) +# AC_SUBST(BOOST_SERIALIZATION_LIB) +# AC_SUBST(BOOST_WSERIALIZATION_LIB) +# AC_SUBST(BOOST_SIGNALS_LIB) +# AC_SUBST(BOOST_DATE_TIME_LIB) +# AC_SUBST(BOOST_REGEX_LIB) +# AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) +# +# And sets: +# +# HAVE_BOOST +# HAVE_BOOST_FILESYSTEM +# HAVE_BOOST_PROGRAM_OPTIONS +# HAVE_BOOST_THREAD +# HAVE_BOOST_IOSTREAMS +# HAVE_BOOST_SERIALIZATION +# HAVE_BOOST_SIGNALS +# HAVE_BOOST_DATE_TIME +# HAVE_BOOST_REGEX +# HAVE_BOOST_UNIT_TEST_FRAMEWORK +# +# LAST MODIFICATION +# +# 2006-12-28 +# +# COPYLEFT +# +# Copyright (c) 2006 Thomas Porschberg +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + +AC_DEFUN([AX_BOOST], +[ + AC_ARG_WITH([boost], + AS_HELP_STRING([--with-boost=DIR], + [use boost (default is NO) specify the root directory for boost library (optional)]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + + AC_CANONICAL_BUILD + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + BOOST_CPPFLAGS="-I$ac_boost_path/include" + else + for ac_boost_path_tmp in /usr /usr/local /opt ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +@%:@include +]], + [[ +#if BOOST_VERSION >= $WANT_BOOST_VERSION +// Everything is okay +#else +# error Boost version is too old +#endif + + ]])], + [ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ifelse([$2], , :, [$2]) + ], + [ + ]) + AC_LANG_POP([C++]) + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + for ac_boost_path in /usr /usr/local /opt ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + BOOST_LDFLAGS="-L$best_path/lib" + + if test "x$BOOST_ROOT" != "x"; then + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +@%:@include +]], + [[ +#if BOOST_VERSION >= $WANT_BOOST_VERSION +// Everything is okay +#else +# error Boost version is too old +#endif + + ]])], + [ + AC_MSG_RESULT(yes ($_version)) + succeeded=yes + ifelse([$2], , :, [$2]) + ], + [ + AC_MSG_RESULT(no ($_version)) + ifelse([$3], , :, [$3]) + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_ERROR('Your boost libraries seems to old (version $_version). We need at least $boost_lib_version_shorten') + fi + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + + AC_CACHE_CHECK([whether the Boost::Filesystem library is available], + ax_cv_boost_filesystem, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include ]], + [[using namespace boost::filesystem; + path my_path( "foo/bar/data.txt" ); + return 0;]]), + ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no) + AC_LANG_POP([C++]) + ]) + if test "$ax_cv_boost_filesystem" = "yes"; then + AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::FILESYSTEM library is available]) + BN=boost_filesystem + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_FILESYSTEM_LIB="-l$ax_lib" AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes" break], + [link_filesystem="no"]) + done + if test "x$link_filesystem" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK([whether the Boost::Program_Options library is available], + ax_cv_boost_program_options, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include ]], + [[boost::program_options::options_description generic("Generic options"); + return 0;]]), + ax_cv_boost_program_options=yes, ax_cv_boost_program_options=no) + AC_LANG_POP([C++]) + ]) + if test "$ax_cv_boost_program_options" = yes; then + AC_DEFINE(HAVE_BOOST_PROGRAM_OPTIONS,,[define if the Boost::PROGRAM_OPTIONS library is available]) + BN=boost_program_options + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib" AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) link_program_options="yes" break], + [link_program_options="no"]) + done + if test "x$link_program_options="no"" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::Thread library is available, + ax_cv_boost_thread, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + if test "x$build_os" = "xsolaris" ; then + CXXFLAGS="-pthreads $CXXFLAGS" + elif test "x$build_os" = "xming32" ; then + CXXFLAGS="-mthreads $CXXFLAGS" + else + CXXFLAGS="-pthread $CXXFLAGS" + fi + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include ]], + [[boost::thread_group thrds; + return 0;]]), + ax_cv_boost_thread=yes, ax_cv_boost_thread=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_thread" = "xyes"; then + if test "x$build_os" = "xsolaris" ; then + BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" + elif test "x$build_os" = "xming32" ; then + BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" + else + BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" + fi + + AC_SUBST(BOOST_CPPFLAGS) + AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::THREAD library is available]) + BN=boost_thread + LDFLAGS_SAVE=$LDFLAGS + case "x$build_os" in + *bsd* ) + LDFLAGS="-pthread $LDFLAGS" + break; + ;; + esac + + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, [BOOST_THREAD_LIB="-l$ax_lib" AC_SUBST(BOOST_THREAD_LIB) link_thread="yes" break], + [link_thread="no"]) + done + if test "x$link_thread" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + else + case "x$build_os" in + *bsd* ) + BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" + break; + ;; + esac + fi + fi + + AC_CACHE_CHECK(whether the Boost::IOStreams library is available, + ax_cv_boost_iostreams, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + @%:@include + ]], + [[std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0; + ]]), + ax_cv_boost_iostreams=yes, ax_cv_boost_iostreams=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_iostreams" = "xyes"; then + AC_DEFINE(HAVE_BOOST_IOSTREAMS,,[define if the Boost::IOStreams library is available]) + BN=boost_iostreams + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, [BOOST_IOSTREAMS_LIB="-l$ax_lib" AC_SUBST(BOOST_IOSTREAMS_LIB) link_thread="yes" break], + [link_thread="no"]) + done + if test "x$link_thread" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::Serialization library is available, + ax_cv_boost_serialization, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + @%:@include + @%:@include + ]], + [[std::ofstream ofs("filename"); + boost::archive::text_oarchive oa(ofs); + return 0; + ]]), + ax_cv_boost_serialization=yes, ax_cv_boost_serialization=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_serialization" = "xyes"; then + AC_DEFINE(HAVE_BOOST_SERIALIZATION,,[define if the Boost::Serialization library is available]) + BN=boost_serialization + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_SERIALIZATION_LIB="-l$ax_lib" AC_SUBST(BOOST_SERIALIZATION_LIB) link_serialization="yes" break], + [link_serialization="no"]) + done + if test "x$link_serialization" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + + BN=boost_wserialization + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_WSERIALIZATION_LIB="-l$ax_lib" AC_SUBST(BOOST_WSERIALIZATION_LIB) link_wserialization="yes" break], + [link_wserialization="no"]) + done + if test "x$link_wserialization" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::Signals library is available, + ax_cv_boost_signals, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + ]], + [[boost::signal sig; + return 0; + ]]), + ax_cv_boost_signals=yes, ax_cv_boost_signals=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_signals" = "xyes"; then + AC_DEFINE(HAVE_BOOST_SIGNALS,,[define if the Boost::Signals library is available]) + BN=boost_signals + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, [BOOST_SIGNALS_LIB="-l$ax_lib" AC_SUBST(BOOST_SIGNALS_LIB) link_signals="yes" break], + [link_signals="no"]) + done + if test "x$link_signals" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::Date_Time library is available, + ax_cv_boost_date_time, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + ]], + [[using namespace boost::gregorian; date d(2002,Jan,10); + return 0; + ]]), + ax_cv_boost_date_time=yes, ax_cv_boost_date_time=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_date_time" = "xyes"; then + AC_DEFINE(HAVE_BOOST_DATE_TIME,,[define if the Boost::Date_Time library is available]) + BN=boost_date_time + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, [BOOST_DATE_TIME_LIB="-l$ax_lib" AC_SUBST(BOOST_DATE_TIME_LIB) link_thread="yes" break], + [link_thread="no"]) + done + if test "x$link_thread"="no" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::Regex library is available, + ax_cv_boost_regex, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + ]], + [[boost::regex r(); return 0;]]), + ax_cv_boost_regex=yes, ax_cv_boost_regex=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_regex" = "xyes"; then + AC_DEFINE(HAVE_BOOST_REGEX,,[define if the Boost::Regex library is available]) + BN=boost_regex + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + AC_CHECK_LIB($ax_lib, main, [BOOST_REGEX_LIB="-l$ax_lib" AC_SUBST(BOOST_REGEX_LIB) link_regex="yes" break], + [link_regex="no"]) + done + if test "x$link_regex" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + + AC_CACHE_CHECK(whether the Boost::UnitTestFramework library is available, + ax_cv_boost_unit_test_framework, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include ]], + [[using boost::unit_test::test_suite; + test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;]]), + ax_cv_boost_unit_test_framework=yes, ax_cv_boost_unit_test_framework=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then + AC_DEFINE(HAVE_BOOST_UNIT_TEST_FRAMEWORK,,[define if the Boost::Unit_test_framework library is available]) + BN=boost_unit_test_framework + saved_ldflags="${LDFLAGS}" + for ax_lib in $BN $BN-$CC $BN-$CC-mt $BN-$CC-mt-s $BN-$CC-s \ + lib$BN lib$BN-$CC lib$BN-$CC-mt lib$BN-$CC-mt-s lib$BN-$CC-s \ + $BN-mgw $BN-mgw $BN-mgw-mt $BN-mgw-mt-s $BN-mgw-s ; do + LDFLAGS="${LDFLAGS} -l$ax_lib" + AC_CACHE_CHECK(the name of the Boost::UnitTestFramework library, + ax_cv_boost_unit_test_framework_link, + [AC_LANG_PUSH([C++]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include + using boost::unit_test::test_suite; + test_suite* init_unit_test_suite( int argc, char * argv[] ) { + test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); + return test; + } + ]], + [[ return 0;]])], + link_unit_test_framework="yes",link_unit_test_framework="no") + AC_LANG_POP([C++]) + ]) + LDFLAGS="${saved_ldflags}" + if test "x$link_unit_test_framework" = "xyes"; then + BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib" + AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) + break + fi + done + if test "x$link_unit_test_framework" = "xno"; then + AC_MSG_NOTICE(Could not link against $ax_lib !) + fi + fi + fi + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/thirdparty/carve-1.4.0/m4/ax_boost_base.m4 b/thirdparty/carve-1.4.0/m4/ax_boost_base.m4 new file mode 100644 index 00000000..0da5408b --- /dev/null +++ b/thirdparty/carve-1.4.0/m4/ax_boost_base.m4 @@ -0,0 +1,198 @@ +##### http://autoconf-archive.cryp.to/ax_boost_base.html +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro +# searchs under /usr, /usr/local, and /opt, and evaluates the +# $BOOST_ROOT environment variable. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LAST MODIFICATION +# +# 2006-12-28 +# +# COPYLEFT +# +# Copyright (c) 2006 Thomas Porschberg +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_ARG_WITH([boost], + AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is No) - it is possible to specify the root directory for boost (optional)]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="no"]) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + BOOST_CPPFLAGS="-I$ac_boost_path/include" + else + for ac_boost_path_tmp in /usr /usr/local /opt ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + for ac_boost_path in /usr /usr/local /opt ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + BOOST_LDFLAGS="-L$best_path/lib" + + if test "x$BOOST_ROOT" != "x"; then + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) + fi + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) diff --git a/thirdparty/carve-1.4.0/regression/compare_runs.py b/thirdparty/carve-1.4.0/regression/compare_runs.py new file mode 100644 index 00000000..2ae6c6dc --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/compare_runs.py @@ -0,0 +1,90 @@ +import sys +import os +import sre + +from sets import Set + +output = sre.compile(r"test_(.*).out") + +RUN_1_DIR = sys.argv[1] +RUN_2_DIR = sys.argv[2] + +run_1_files = os.listdir(RUN_1_DIR) +run_2_files = os.listdir(RUN_2_DIR) + +tests_1 = [] +tests_2 = [] + +for _ in run_1_files: + m = output.match(_) + if m is None: continue + tests_1.append(m.group(1)) + +for _ in run_2_files: + m = output.match(_) + if m is None: continue + tests_2.append(m.group(1)) + +tests = Set(tests_1) & Set(tests_2) + +print len(tests), 'common tests' + +def parseLog(log): + try: + timings_idx = log.index('Timings: ') + totals_idx = log.index('Totals: ') + except ValueError: + return {}, None + timings = log[timings_idx+1:totals_idx-1] + totals = log[totals_idx+1:-2] + tot = {} + # mem = timings[1].split() + # mem = (float(mem[-5].replace(',','')), float(mem[-2].replace(',',''))) + mem = None + for line in totals: + line = line.strip() + ident, t = line.rsplit(' - ', 1) + ident = ident.strip() + t = float(t[:-1]) + tot[ident] = t + return tot, mem + +def PCT(b, a, k): + if k not in a or k not in b: return '********' + return '%+6.2f%%' % ((float(b[k]) - float(a[k])) * 100.0 / float(a[k]),) + +def compareStats(a, b): + print ' Exec time: %s' % (PCT(b, a, 'Application')), + print ' Parse time: %s' % (PCT(b, a, 'Parse')), + print ' Eval time: %s' % (PCT(b, a, 'Eval')), + +def compareMem(a, b): + if a is not None and b is not None: + print ' Mem usage: %+6.2f%%' % (PCT(b[0], a[0]),), + print ' Mem delta: %+6.2f%%' % (PCT(b[1], a[1]),), + +def compare(test, a, b): + print 'test: %-30s' % (test,), + if a[0] == b[0]: + print ' OK', + else: + print 'DIFFER', + + a_log = a[1].split('\n') + a_stats = parseLog(a_log) + + b_log = b[1].split('\n') + b_stats = parseLog(b_log) + + compareStats(a_stats[0], b_stats[0]) + compareMem(a_stats[1], b_stats[1]) + print + +for test in tests: + a_out = os.path.join(RUN_1_DIR, 'test_%s.out' % (test,)) + a_err = os.path.join(RUN_1_DIR, 'test_%s.err' % (test,)) + + b_out = os.path.join(RUN_2_DIR, 'test_%s.out' % (test,)) + b_err = os.path.join(RUN_2_DIR, 'test_%s.err' % (test,)) + + compare(test, (open(a_out).read(), open(a_err).read()), (open(b_out).read(), open(b_err).read())) diff --git a/thirdparty/carve-1.4.0/regression/run_tests.py b/thirdparty/carve-1.4.0/regression/run_tests.py new file mode 100644 index 00000000..3e6d036a --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/run_tests.py @@ -0,0 +1,138 @@ +import sys +import os +import subprocess +import re +import select +import string + +comment = re.compile(r'\s*#.*') +assignment = re.compile(r'^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)') +continuation = re.compile(r'^\s') + +INTERSECT = sys.argv[1] +TESTS = sys.argv[2] +TGT_DIR = sys.argv[3] + +if not os.path.exists(TGT_DIR): + os.makedirs(TGT_DIR) + +pre = '' +assignments = {} + +SHARK = os.path.exists('/usr/bin/shark') and '/usr/bin/shark' or None +SHARK = None +TIME = None + +def runcmd(CMD): + cmd = subprocess.Popen(CMD, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE) + cout, cerr = cmd.stdout, cmd.stderr + cmd.stdin.close() + + r_out = [] + r_err = [] + streams = [ cout, cerr ] + while len(streams): + ready = select.select(streams, [], []) + + if cout in ready[0]: + r_out.append(os.read(cout.fileno(), 1024)) + if not len(r_out[-1]): streams.remove(cout) + + if cerr in ready[0]: + r_err.append(os.read(cerr.fileno(), 1024)) + if not len(r_err[-1]): streams.remove(cerr) + + exitcode = cmd.wait() + + r_out = ''.join(r_out) + r_err = ''.join(r_err) + + return exitcode, r_out, r_err + + +WITH_OPROFILE = True + +if WITH_OPROFILE: + search_path = os.environ['PATH'].split(os.pathsep) + for s in search_path: + if os.path.isfile(os.path.join(s, 'opcontrol')): + break + else: + print >>sys.stderr, 'could not find opcontrol. disabling oprofile' + WITH_OPROFILE = False + +def opcontrol(*args): + CMD = ('sudo', 'opcontrol') + tuple(args) + exitcode, r_out, r_err = runcmd(CMD) + +def opreport(path, output): + CMD = ('opreport', '-l', path) + exitcode, r_out, r_err = runcmd(CMD) + if r_out == '' and r_err != '': + r_out = 'ERROR:\n' + r_err + open(output, 'w').write(r_out) + + +def run(cmd): + test_name, args, op = cmd.split('|') + test_name = test_name.strip() + args = args.strip().split() + op = string.Template(op.strip()).substitute(**assignments) + print >>sys.stderr, test_name, '...', + + if SHARK: + CMD = (SHARK, '-o', os.path.join(TGT_DIR, 'prof_%s' % (test_name,)), '-G', '-i', '-1', '-c', '13') + (INTERSECT,) + tuple(args) + (op,) + elif TIME: + CMD = (TIME, '-v', '-o', os.path.join(TGT_DIR, 'time_%s' % (test_name,))) + (INTERSECT,) + tuple(args) + (op,) + else: + CMD = (INTERSECT,) + tuple(args) + (op,) + + if WITH_OPROFILE: + opcontrol('--reset') + + exitcode, r_out, r_err = runcmd(CMD) + + if WITH_OPROFILE: + opreport(os.path.abspath(INTERSECT), os.path.join(TGT_DIR, 'oprofile_%s.out' % (test_name,))) + + open (os.path.join(TGT_DIR, 'test_%s.out' % (test_name,)), 'w').write(r_out) + open (os.path.join(TGT_DIR, 'test_%s.err' % (test_name,)), 'w').write(r_err) + if exitcode: + print >>sys.stderr, 'FAIL' + else: + print >>sys.stderr, 'PASS' + +if WITH_OPROFILE: + opcontrol('--start') + +c = [] +def consume(): + if len(c): + cmd = '\n'.join(c) + m = assignment.match(cmd) + if m is not None: + k, v = m.groups() + assignments[k] = eval(v) + else: + run(re.sub(r'\s+', ' ', cmd)) + c[:] = [] + +for cmd in [ _ for _ in open(TESTS) if comment.sub('', _).strip() ]: + cmd = cmd.rstrip('\n') + + if cmd == '': + consume() + continue + + if continuation.match(cmd): + c.append(cmd.lstrip()) + continue + + consume() + + c.append(cmd) + +consume() + +if WITH_OPROFILE: + opcontrol('--shutdown') diff --git a/thirdparty/carve-1.4.0/regression/test-cylinders b/thirdparty/carve-1.4.0/regression/test-cylinders new file mode 100644 index 00000000..85d4fc21 --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/test-cylinders @@ -0,0 +1,43 @@ +CYLINDER(256,4,20) & +( + ROT( 0 deg,0,0,1,TRANS(0,0, 10.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 30 deg,0,0,1,TRANS(0,0, 9.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 60 deg,0,0,1,TRANS(0,0, 9.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 90 deg,0,0,1,TRANS(0,0, 8.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(120 deg,0,0,1,TRANS(0,0, 8.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(150 deg,0,0,1,TRANS(0,0, 7.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(180 deg,0,0,1,TRANS(0,0, 7.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(210 deg,0,0,1,TRANS(0,0, 6.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(240 deg,0,0,1,TRANS(0,0, 6.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(270 deg,0,0,1,TRANS(0,0, 5.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(300 deg,0,0,1,TRANS(0,0, 4.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(330 deg,0,0,1,TRANS(0,0, 4.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 0 deg,0,0,1,TRANS(0,0, 3.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 30 deg,0,0,1,TRANS(0,0, 3.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 60 deg,0,0,1,TRANS(0,0, 2.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 90 deg,0,0,1,TRANS(0,0, 2.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(120 deg,0,0,1,TRANS(0,0, 1.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(150 deg,0,0,1,TRANS(0,0, 1.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(180 deg,0,0,1,TRANS(0,0, 0.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(210 deg,0,0,1,TRANS(0,0, 0.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(240 deg,0,0,1,TRANS(0,0, -0.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(270 deg,0,0,1,TRANS(0,0, -1.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(300 deg,0,0,1,TRANS(0,0, -1.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(330 deg,0,0,1,TRANS(0,0, -2.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 0 deg,0,0,1,TRANS(0,0, -2.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 30 deg,0,0,1,TRANS(0,0, -3.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 60 deg,0,0,1,TRANS(0,0, -3.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 90 deg,0,0,1,TRANS(0,0, -4.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(120 deg,0,0,1,TRANS(0,0, -4.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(150 deg,0,0,1,TRANS(0,0, -5.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(180 deg,0,0,1,TRANS(0,0, -5.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(210 deg,0,0,1,TRANS(0,0, -6.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(240 deg,0,0,1,TRANS(0,0, -6.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(270 deg,0,0,1,TRANS(0,0, -7.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(300 deg,0,0,1,TRANS(0,0, -7.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT(330 deg,0,0,1,TRANS(0,0, -8.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 0 deg,0,0,1,TRANS(0,0, -8.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 30 deg,0,0,1,TRANS(0,0, -9.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 60 deg,0,0,1,TRANS(0,0, -9.5,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) | + ROT( 90 deg,0,0,1,TRANS(0,0,-10.0,TRANS(0,-.3,0,ROT(90 deg,0,1,0,CYLINDER(256,1,10))))) +) diff --git a/thirdparty/carve-1.4.0/regression/test-spheres-1 b/thirdparty/carve-1.4.0/regression/test-spheres-1 new file mode 100644 index 00000000..85979e8c --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/test-spheres-1 @@ -0,0 +1,21 @@ +( + ../data/ico.ply UNION + TRANS(+1.8,+1.8,+1.8,../data/ico.ply) UNION + TRANS(+1.8,+1.8,-1.8,../data/ico.ply) UNION + TRANS(+1.8,-1.8,+1.8,../data/ico.ply) UNION + TRANS(+1.8,-1.8,-1.8,../data/ico.ply) UNION + TRANS(-1.8,+1.8,+1.8,../data/ico.ply) UNION + TRANS(-1.8,+1.8,-1.8,../data/ico.ply) UNION + TRANS(-1.8,-1.8,+1.8,../data/ico.ply) UNION + TRANS(-1.8,-1.8,-1.8,../data/ico.ply) +) A_MINUS_B +ROT(1,1,1,1,( + TRANS(+1.2,+1.2,+1.2,../data/ico.ply) UNION + TRANS(+1.2,+1.2,-1.2,../data/ico.ply) UNION + TRANS(+1.2,-1.2,+1.2,../data/ico.ply) UNION + TRANS(+1.2,-1.2,-1.2,../data/ico.ply) UNION + TRANS(-1.2,+1.2,+1.2,../data/ico.ply) UNION + TRANS(-1.2,+1.2,-1.2,../data/ico.ply) UNION + TRANS(-1.2,-1.2,+1.2,../data/ico.ply) UNION + TRANS(-1.2,-1.2,-1.2,../data/ico.ply)) +) diff --git a/thirdparty/carve-1.4.0/regression/test-spheres-2 b/thirdparty/carve-1.4.0/regression/test-spheres-2 new file mode 100644 index 00000000..6dcc0a87 --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/test-spheres-2 @@ -0,0 +1,21 @@ +( + ../data/ico5.ply UNION + TRANS(+1.8,+1.8,+1.8,../data/ico5.ply) UNION + TRANS(+1.8,+1.8,-1.8,../data/ico5.ply) UNION + TRANS(+1.8,-1.8,+1.8,../data/ico5.ply) UNION + TRANS(+1.8,-1.8,-1.8,../data/ico5.ply) UNION + TRANS(-1.8,+1.8,+1.8,../data/ico5.ply) UNION + TRANS(-1.8,+1.8,-1.8,../data/ico5.ply) UNION + TRANS(-1.8,-1.8,+1.8,../data/ico5.ply) UNION + TRANS(-1.8,-1.8,-1.8,../data/ico5.ply) +) A_MINUS_B +ROT(1,1,1,1,( + TRANS(+1.2,+1.2,+1.2,../data/ico5.ply) UNION + TRANS(+1.2,+1.2,-1.2,../data/ico5.ply) UNION + TRANS(+1.2,-1.2,+1.2,../data/ico5.ply) UNION + TRANS(+1.2,-1.2,-1.2,../data/ico5.ply) UNION + TRANS(-1.2,+1.2,+1.2,../data/ico5.ply) UNION + TRANS(-1.2,+1.2,-1.2,../data/ico5.ply) UNION + TRANS(-1.2,-1.2,+1.2,../data/ico5.ply) UNION + TRANS(-1.2,-1.2,-1.2,../data/ico5.ply)) +) diff --git a/thirdparty/carve-1.4.0/regression/test-spheres-3 b/thirdparty/carve-1.4.0/regression/test-spheres-3 new file mode 100644 index 00000000..01070032 --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/test-spheres-3 @@ -0,0 +1,21 @@ +( + ../data/ico5.ply UNION + TRANS(+1.4,+1.4,+1.4,../data/ico5.ply) UNION + TRANS(+1.4,+1.4,-1.4,../data/ico5.ply) UNION + TRANS(+1.4,-1.4,+1.4,../data/ico5.ply) UNION + TRANS(+1.4,-1.4,-1.4,../data/ico5.ply) UNION + TRANS(-1.4,+1.4,+1.4,../data/ico5.ply) UNION + TRANS(-1.4,+1.4,-1.4,../data/ico5.ply) UNION + TRANS(-1.4,-1.4,+1.4,../data/ico5.ply) UNION + TRANS(-1.4,-1.4,-1.4,../data/ico5.ply) +) A_MINUS_B +ROT(1,1,1,1,( + TRANS(+0.8,+0.8,+0.8,../data/ico5.ply) UNION + TRANS(+0.8,+0.8,-0.8,../data/ico5.ply) UNION + TRANS(+0.8,-0.8,+0.8,../data/ico5.ply) UNION + TRANS(+0.8,-0.8,-0.8,../data/ico5.ply) UNION + TRANS(-0.8,+0.8,+0.8,../data/ico5.ply) UNION + TRANS(-0.8,+0.8,-0.8,../data/ico5.ply) UNION + TRANS(-0.8,-0.8,+0.8,../data/ico5.ply) UNION + TRANS(-0.8,-0.8,-0.8,../data/ico5.ply)) +) diff --git a/thirdparty/carve-1.4.0/regression/test-spheres-4 b/thirdparty/carve-1.4.0/regression/test-spheres-4 new file mode 100644 index 00000000..25994f24 --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/test-spheres-4 @@ -0,0 +1,18 @@ +( + (../data/ico5.ply A_MINUS_B SCALE(0.95,0.95,0.95, ../data/ico5.ply)) UNION + (SCALE(0.90,0.90,0.90, ../data/ico5.ply) A_MINUS_B SCALE(0.85,0.85,0.85, ../data/ico5.ply)) UNION + (SCALE(0.80,0.80,0.80, ../data/ico5.ply) A_MINUS_B SCALE(0.75,0.75,0.75, ../data/ico5.ply)) UNION + (SCALE(0.70,0.70,0.70, ../data/ico5.ply) A_MINUS_B SCALE(0.65,0.65,0.65, ../data/ico5.ply)) UNION + (SCALE(0.60,0.60,0.60, ../data/ico5.ply) A_MINUS_B SCALE(0.55,0.55,0.55, ../data/ico5.ply)) UNION + (SCALE(0.50,0.50,0.50, ../data/ico5.ply) A_MINUS_B SCALE(0.45,0.45,0.45, ../data/ico5.ply)) UNION + (SCALE(0.40,0.40,0.40, ../data/ico5.ply) A_MINUS_B SCALE(0.35,0.35,0.35, ../data/ico5.ply)) UNION + (SCALE(0.30,0.30,0.30, ../data/ico5.ply) A_MINUS_B SCALE(0.25,0.25,0.25, ../data/ico5.ply)) UNION + (SCALE(0.20,0.20,0.20, ../data/ico5.ply) A_MINUS_B SCALE(0.15,0.15,0.15, ../data/ico5.ply)) UNION + (SCALE(0.10,0.10,0.10, ../data/ico5.ply) A_MINUS_B SCALE(0.05,0.05,0.05, ../data/ico5.ply)) +) INTERSECTION ( + (CYLINDER(256,1.0,2) A_MINUS_B CYLINDER(256,0.9,2)) UNION + (CYLINDER(256,0.8,2) A_MINUS_B CYLINDER(256,0.7,2)) UNION + (CYLINDER(256,0.6,2) A_MINUS_B CYLINDER(256,0.5,2)) UNION + (CYLINDER(256,0.4,2) A_MINUS_B CYLINDER(256,0.3,2)) UNION + (CYLINDER(256,0.2,2) A_MINUS_B CYLINDER(256,0.1,2)) +) diff --git a/thirdparty/carve-1.4.0/regression/tests b/thirdparty/carve-1.4.0/regression/tests new file mode 100644 index 00000000..7269a6fd --- /dev/null +++ b/thirdparty/carve-1.4.0/regression/tests @@ -0,0 +1,30 @@ +cube_intersection | -r -e -c | CUBE INTERSECTION TRANS(1,1,1,ROT(1,1,1,1,CUBE)) +torus | -r -e -c | TORUS(20,20,2.0,1.0) A_MINUS_B ROT(.5,1,1,1,TORUS(20,20,2.0,1.0)) +torus_2 | -r -e -c | TORUS(50,50,2.0,1.0) A_MINUS_B TRANS(0,0,1.5,SCALE(2.5,2.5,1.5,CUBE)) +sphere_one_point | -r -e -c | ../data/sphere_one_point_moved.ply A_MINUS_B ../data/sphere.ply +double_cube | -r -e -c | (TRANS(-1,-1,0,CUBE) UNION TRANS(+1,+1,0,CUBE)) INTERSECTION ROT(1.5707963267948966,1,0,0,TORUS(20,20,2.0,1.0)) +edge_intersecting_cubes | -r -e -c | TRANS(0.0,0.0,-0.5,CUBE) INTERSECTION TRANS(0.0,0.0,+0.5,CUBE) +rotated_cube | -r -e -c | CUBE INTERSECTION ROT(0.78539816339744828,0,0,1,CUBE) +rotated_shifted_cube | -r -e -c | CUBE INTERSECTION ROT(0.78539816339744828,0,0,1,TRANS(0,0,1,CUBE)) +rotated_shifted_scaled_cube | -r -e -c | CUBE INTERSECTION ROT(0.78539816339744828,0,0,1,SCALE(0.70710678118654757,0.70710678118654757,0.1,TRANS(0,0,.1,CUBE))) +cylinder_xy | -r -e -c | ../data/cylinderx.ply UNION ../data/cylindery.ply +cylinder_xyz | -r -e -c | ../data/cylinderx.ply UNION ../data/cylindery.ply UNION ../data/cylinderz.ply +cone_up_down | -r -e -c | ../data/coneup.ply UNION ../data/coneup.ply +cone_up_sub_down | -r -e -c | ../data/coneup.ply A_MINUS_B ../data/coneup.ply +sphere_self_union | -r -e -c | ../data/sphere.ply UNION ../data/sphere.ply +sphere_self_subtract | -r -e -c | ../data/sphere.ply A_MINUS_B ../data/sphere.ply +sphere_self_shift_subtract | -r -e -c | ../data/sphere.ply A_MINUS_B TRANS(0.01,0.01,0.01,../data/sphere.ply) +hollow_sphere | -r -e -c | (../data/sphere.ply A_MINUS_B SCALE(0.9,0.9,0.9,../data/sphere.ply)) A_MINUS_B TRANS(5.5,0.0,0.0,SCALE(5,5,5,CUBE)) +cube_small_rot_1 | -r -e -c | CUBE A_MINUS_B ROT(1e-2,1,1,1,CUBE) +cube_small_rot_2 | -r -e -c | CUBE A_MINUS_B ROT(1e-4,1,1,1,CUBE) +cube_small_rot_3 | -r -e -c | CUBE A_MINUS_B ROT(1e-6,1,1,1,CUBE) +cube_small_rot_4 | -r -e -c | CUBE A_MINUS_B ROT(1e-8,1,1,1,CUBE) +cube_small_rot_5 | -r -e -c | CUBE A_MINUS_B ROT(1e-10,1,1,1,CUBE) +sphere_stress_test_1 | -r -e -c -f | test-spheres-1 +sphere_stress_test_2 | -r -e -c -f | test-spheres-2 +sphere_stress_test_3 | -r -e -c -f | test-spheres-3 +sphere_stress_test_4 | -r -e -c -f | test-spheres-4 +shell_stress_test_1 | -r -e -c | TRANS(0, 1.1547005383792515, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(-1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(0, 0, 1.6329931618554521, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) +shell_stress_test_2 | -r -e -c | TRANS(0, 1.1547005383792515, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(-1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) +shell_stress_test_3 | -r -e -c | TRANS(-1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) INTERSECTION TRANS(1.0, -0.57735026918962584, 0, SCALE(2.71, 2.71, 2.71, ../data/shells.ply)) +cylinder_spiral | -r -e -c -f | test-cylinders diff --git a/thirdparty/carve-1.4.0/src/CMakeLists.txt b/thirdparty/carve-1.4.0/src/CMakeLists.txt new file mode 100644 index 00000000..effb2ddf --- /dev/null +++ b/thirdparty/carve-1.4.0/src/CMakeLists.txt @@ -0,0 +1,47 @@ +include_directories("${carve_SOURCE_DIR}/include") +include_directories("${carve_SOURCE_DIR}/external/GLOOP/include") +include_directories("${carve_SOURCE_DIR}/external/GLEW/include") +include_directories("${carve_SOURCE_DIR}/external/GLUI/include") +include_directories("${carve_SOURCE_DIR}/common") +include_directories(${OPENGL_INCLUDE_DIR}) + +link_directories("${gloop_BINARY_DIR}") +link_directories("${carve_BINARY_DIR}/common") + +if(ENABLE_GLU_TRI AND CARVE_WITH_GUI) + add_executable (intersect glu_triangulator.cpp intersect.cpp) + target_link_libraries(intersect carve_fileformats carve_misc carve gloop_model ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) +else(ENABLE_GLU_TRI AND CARVE_WITH_GUI) + add_definitions(-DDISABLE_GLU_TRIANGULATOR) + add_executable (intersect intersect.cpp) + target_link_libraries(intersect carve_fileformats carve_misc carve gloop_model) +endif(ENABLE_GLU_TRI AND CARVE_WITH_GUI) + +if(CARVE_WITH_GUI) + add_executable (view view.cpp) + target_link_libraries(view carve_fileformats carve_misc carve_ui carve gloop_model glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + install(TARGETS view RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") +endif(CARVE_WITH_GUI) + +add_executable (triangulate triangulate.cpp) +target_link_libraries(triangulate carve_fileformats carve gloop_model) + +add_executable (cutgraph cut.cpp) +target_link_libraries(cutgraph carve_fileformats carve gloop_model) + +add_executable (extrude extrude.cpp) +target_link_libraries(extrude carve_fileformats carve gloop_model) + +add_executable (convert convert.cpp) +target_link_libraries(convert carve_fileformats carve gloop_model) + +add_executable (close_manifold close_manifold.cpp) +target_link_libraries(close_manifold carve_fileformats carve gloop_model) + +add_executable (selfintersect selfintersect.cpp) +target_link_libraries(selfintersect carve_fileformats carve gloop_model) + +foreach(tgt intersect triangulate convert) + install(TARGETS ${tgt} + RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") +endforeach(tgt) diff --git a/thirdparty/carve-1.4.0/src/Makefile.am b/thirdparty/carve-1.4.0/src/Makefile.am new file mode 100644 index 00000000..ace0ca3e --- /dev/null +++ b/thirdparty/carve-1.4.0/src/Makefile.am @@ -0,0 +1,43 @@ +noinst_HEADERS= glu_triangulator.hpp + +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/include @GL_CFLAGS@ @GLUT_CFLAGS@ +CPPFLAGS += -I$(top_srcdir)/external/GLOOP/include + +bin_PROGRAMS = intersect triangulate convert +noinst_PROGRAMS = cutgraph + + + +triangulate_SOURCES=triangulate.cpp +triangulate_LDADD=../common/libcarve_fileformats.la ../lib/libintersect.la @GL_LIBS@ + +cutgraph_SOURCES=cut.cpp +cutgraph_LDADD=../common/libcarve_misc.la ../lib/libintersect.la ../common/libcarve_fileformats.la + +convert_SOURCES=convert.cpp +convert_LDADD=../common/libcarve_fileformats.la ../common/libcarve_misc.la ../lib/libintersect.la + + + +if enable_GLU_tri + intersect_SOURCES=intersect.cpp glu_triangulator.cpp + intersect_CPPFLAGS= + intersect_LDADD=../common/libcarve_fileformats.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ +else + intersect_SOURCES=intersect.cpp + intersect_CPPFLAGS=-DDISABLE_GLU_TRIANGULATOR + intersect_LDADD=../common/libcarve_fileformats.la ../common/libcarve_misc.la ../lib/libintersect.la +endif + + + +if with_GUI + bin_PROGRAMS += view + CPPFLAGS += -I$(top_srcdir)/external/GLEW/include + CPPFLAGS += -I$(top_srcdir)/external/GLUI/include +endif + + + +view_SOURCES=view.cpp +view_LDADD=../common/libcarve_fileformats.la ../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ diff --git a/thirdparty/carve-1.4.0/src/close_manifold.cpp b/thirdparty/carve-1.4.0/src/close_manifold.cpp new file mode 100644 index 00000000..0af1d107 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/close_manifold.cpp @@ -0,0 +1,214 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include + +#include "opts.hpp" +#include "read_ply.hpp" +#include "write_ply.hpp" + + +#include +#include +#include +#include +#include +#include +#include + +struct Options : public opt::Parser { + bool ascii; + bool obj; + bool vtk; + bool flip; + + double pos; + enum { ERR = -1, X = 0, Y = 1, Z = 2 } axis; + + std::string file; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--flip" || o == "-f") { flip = true; return; } + if ( o == "-x") { axis = X; pos = strtod(v.c_str(), NULL); } + if ( o == "-y") { axis = Y; pos = strtod(v.c_str(), NULL); } + if ( o == "-z") { axis = Z; pos = strtod(v.c_str(), NULL); } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] expression"); + }; + + virtual void arg(const std::string &a) { + if (file == "") { + file = a; + } + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + } + + Options() { + ascii = true; + obj = false; + vtk = false; + flip = false; + pos = 0.0; + axis = ERR; + file = ""; + + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("obj", 'O', false, "Output in .obj format."); + option("vtk", 'V', false, "Output in .vtk format."); + option("flip", 'f', false, "Flip orientation of input faces."); + option( 'x', true, "close with plane x={arg}."); + option( 'y', true, "close with plane y={arg}."); + option( 'z', true, "close with plane z={arg}."); + } +}; + + + +static Options options; + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +int main(int argc, char **argv) { + options.parse(argc, argv); + carve::poly::Polyhedron *poly; + + if (options.axis == Options::ERR) { + std::cerr << "need to specify a closure plane." << std::endl; + exit(1); + } + + if (options.file == "-") { + poly = readPLY(std::cin); + } else if (endswith(options.file, ".ply")) { + poly = readPLY(options.file); + } else if (endswith(options.file, ".vtk")) { + poly = readVTK(options.file); + } else if (endswith(options.file, ".obj")) { + poly = readOBJ(options.file); + } + + if (poly == NULL) { + std::cerr << "failed to load polyhedron" << std::endl; + exit(1); + } + + std::cerr << "poly aabb = " << poly->aabb << std::endl; + + if (poly->aabb.compareAxis(carve::geom::axis_pos(options.axis, options.pos)) == 0) { + std::cerr << "poly aabb intersects closure plane." << std::endl; + exit(1); + } + + std::vector open_edges; + for (size_t edge_num = 0; edge_num < poly->edges.size(); ++edge_num) { + std::vector &ef = poly->connectivity.edge_to_face[edge_num]; + if (std::find(ef.begin(), ef.end(), (const carve::poly::Polyhedron::face_t *)NULL) != ef.end()) { + open_edges.push_back(edge_num); + } + } + + std::vector out_faces; + out_faces.reserve(open_edges.size() + 1 + poly->faces.size()); + for (size_t face = 0; face < poly->faces.size(); ++face) { + carve::poly::Polyhedron::face_t *temp = poly->faces[face].clone(options.flip); + out_faces.push_back(*temp); + delete temp; + } + + std::vector proj_vertices; + proj_vertices.reserve(poly->vertices.size()); + std::copy(poly->vertices.begin(), poly->vertices.end(), std::back_inserter(proj_vertices)); + + for (size_t vert = 0; vert != proj_vertices.size(); ++vert) { + proj_vertices[vert].v.v[options.axis] = options.pos; + } + + std::map base_edges; + + + for (size_t edge_index = 0; edge_index < open_edges.size(); ++edge_index) { + size_t edge_num = open_edges[edge_index]; + carve::poly::Polyhedron::edge_t *edge = &poly->edges[edge_num]; + size_t v1i = poly->vertexToIndex_fast(edge->v1); + size_t v2i = poly->vertexToIndex_fast(edge->v2); + std::vector vertices; + vertices.push_back(edge->v2); + vertices.push_back(edge->v1); + vertices.push_back(&proj_vertices[v1i]); + vertices.push_back(&proj_vertices[v2i]); + + std::vector &ef = poly->connectivity.edge_to_face[edge_num]; + CARVE_ASSERT(ef.size() == 2); + if (ef[0] == NULL) { std::swap(vertices[0], vertices[1]); std::swap(vertices[2], vertices[3]); } + if (options.flip) { std::swap(vertices[0], vertices[1]); std::swap(vertices[2], vertices[3]); } + out_faces.push_back(carve::poly::Polyhedron::face_t(vertices)); + base_edges[vertices[3]] = vertices[2]; + } + + while (base_edges.size()) { + std::vector fv; + const carve::poly::Polyhedron::vertex_t *vert = base_edges.begin()->first; + const carve::poly::Polyhedron::vertex_t *start = vert; + do { + const carve::poly::Polyhedron::vertex_t *next = base_edges[vert]; + base_edges.erase(vert); + fv.push_back(next); + vert = next; + } while (vert != start); + out_faces.push_back(carve::poly::Polyhedron::face_t(fv)); + } + + std::vector vertices; + carve::csg::VVMap vmap; + carve::poly::Polyhedron::collectFaceVertices(out_faces, vertices, vmap); + carve::poly::Polyhedron *result = new carve::poly::Polyhedron(out_faces, vertices); + std::cerr << "result: " << result->faces.size() << " faces\n"; + + if (options.obj) { + writeOBJ(std::cout, result); + } else if (options.vtk) { + writeVTK(std::cout, result); + } else { + writePLY(std::cout, result, options.ascii); + } + + return 0; +} diff --git a/thirdparty/carve-1.4.0/src/convert.cpp b/thirdparty/carve-1.4.0/src/convert.cpp new file mode 100644 index 00000000..8849137f --- /dev/null +++ b/thirdparty/carve-1.4.0/src/convert.cpp @@ -0,0 +1,165 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include "geometry.hpp" +#include "glu_triangulator.hpp" + +#include "read_ply.hpp" +#include "write_ply.hpp" + +#include "opts.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include + + + +struct Options : public opt::Parser { + bool ascii; + bool obj; + bool vtk; + bool canonicalize; + bool triangulate; + + std::string file; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--canonicalize" || o == "-c") { canonicalize = true; return; } + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--triangulate" || o == "-t") { triangulate = true; return; } + if (o == "--help" || o == "-h") { help(std::cout); exit(0); } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] file"); + }; + + virtual void arg(const std::string &a) { + file = a; + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + } + + Options() { + ascii = true; + obj = false; + vtk = false; + triangulate = false; + + option("canonicalize", 'c', false, "Canonicalize before output (for comparing output)."); + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("obj", 'O', false, "Output in .obj format."); + option("vtk", 'V', false, "Output in .vtk format."); + option("triangulate", 't', false, "Triangulate output."); + option("help", 'h', false, "This help message."); + } +}; + + + +static Options options; + + + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +int main(int argc, char **argv) { + options.parse(argc, argv); + + carve::input::Input inputs; + std::vector polys; + std::vector lines; + std::vector points; + + if (options.file == "") { + readPLY(std::cin, inputs); + } else { + if (endswith(options.file, ".ply")) { + readPLY(options.file, inputs); + } else if (endswith(options.file, ".vtk")) { + readVTK(options.file, inputs); + } else if (endswith(options.file, ".obj")) { + readOBJ(options.file, inputs); + } + } + + for (std::list::const_iterator i = inputs.input.begin(); i != inputs.input.end(); ++i) { + carve::poly::Polyhedron *p; + carve::point::PointSet *ps; + carve::line::PolylineSet *l; + + if ((p = carve::input::Input::create(*i)) != NULL) { + if (options.canonicalize) p->canonicalize(); + if (options.obj) { + writeOBJ(std::cout, p); + } else if (options.vtk) { + writeVTK(std::cout, p); + } else { + writePLY(std::cout, p, options.ascii); + } + delete p; + } else if ((l = carve::input::Input::create(*i)) != NULL) { + if (options.obj) { + writeOBJ(std::cout, l); + } else if (options.vtk) { + writeVTK(std::cout, l); + } else { + writePLY(std::cout, l, options.ascii); + } + delete l; + } else if ((ps = carve::input::Input::create(*i)) != NULL) { + if (options.obj) { + std::cerr << "Can't write a point set in .obj format" << std::endl; + } else if (options.vtk) { + std::cerr << "Can't write a point set in .vtk format" << std::endl; + } else { + writePLY(std::cout, ps, options.ascii); + } + delete ps; + } + } + + return 0; +} diff --git a/thirdparty/carve-1.4.0/src/cut.cpp b/thirdparty/carve-1.4.0/src/cut.cpp new file mode 100644 index 00000000..584797e2 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/cut.cpp @@ -0,0 +1,197 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include "geometry.hpp" +#include "glu_triangulator.hpp" + +#include "read_ply.hpp" +#include "write_ply.hpp" + +#include "opts.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +typedef std::vector::iterator TOK; + + + +struct Options : public opt::Parser { + bool ascii; + bool rescale; + + std::vector args; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--rescale" || o == "-r") { rescale = true; return; } + if (o == "--epsilon" || o == "-E") { carve::setEpsilon(strtod(v.c_str(), NULL)); return; } + if (o == "--help" || o == "-h") { help(std::cout); exit(0); } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] expression"); + }; + + virtual void arg(const std::string &a) { + args.push_back(a); + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + } + + Options() { + ascii = true; + rescale = false; + + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("rescale", 'r', false, "Rescale prior to CSG operations."); + option("epsilon", 'E', true, "Set epsilon used for calculations."); + option("help", 'h', false, "This help message."); + } +}; + + + +static Options options; + + + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + + + +carve::poly::Polyhedron *read(const std::string &s) { + if (endswith(s, ".vtk")) { + return readVTK(s); + } else if (endswith(s, ".obj")) { + return readOBJ(s); + } else { + return readPLY(s); + } +} + + + +int main(int argc, char **argv) { + options.parse(argc, argv); + if (options.args.size() != 2) { + std::cerr << "expected exactly two arguments" << std::endl; + exit(1); + } + + + carve::poly::Polyhedron *a, *b; + a = read(options.args[0]); + if (!a) { std::cerr << "failed to read [" << options.args[0] << "]" << std::endl; exit(1); } + b = read(options.args[1]); + if (!b) { std::cerr << "failed to read [" << options.args[1] << "]" << std::endl; exit(1); } + + std::list a_sliced, b_sliced; + carve::csg::V2Set shared_edges; + carve::csg::CSG csg; + + csg.slice(a, b, a_sliced, b_sliced, &shared_edges); + std::cerr << "result: " << a_sliced.size() << " connected components from a" << std::endl; + std::cerr << " : " << b_sliced.size() << " connected components from b" << std::endl; + std::cerr << " : " << shared_edges.size() << " edges in the line of intersection" << std::endl; + + typedef std::unordered_map< + const carve::poly::Geometry<3>::vertex_t *, + std::set::vertex_t *>, + carve::poly::hash_vertex_ptr> VVSMap; + + VVSMap edge_graph; + + for (carve::csg::V2Set::const_iterator i = shared_edges.begin(); i != shared_edges.end(); ++i) { + edge_graph[(*i).first].insert((*i).second); + edge_graph[(*i).second].insert((*i).first); + } + + for (VVSMap::const_iterator i = edge_graph.begin(); i != edge_graph.end(); ++i) { + if ((*i).second.size() > 2) { + std::cerr << "branch at: " << (*i).first << std::endl; + } + if ((*i).second.size() == 1) { + std::cerr << "endpoint at: " << (*i).first << std::endl; + std::cerr << "coordinate: " << (*i).first->v << std::endl; + } + } + + { + carve::line::PolylineSet intersection_graph; + intersection_graph.vertices.resize(edge_graph.size()); + std::map *, size_t> vmap; + + size_t j = 0; + for (VVSMap::const_iterator i = edge_graph.begin(); i != edge_graph.end(); ++i) { + intersection_graph.vertices[j].v = (*i).first->v; + vmap[(*i).first] = j++; + } + + while (edge_graph.size()) { + VVSMap::iterator prior_i = edge_graph.begin(); + const carve::poly::Vertex<3> *prior = (*prior_i).first; + std::vector connected; + connected.push_back(vmap[prior]); + while (prior_i != edge_graph.end() && (*prior_i).second.size()) { + const carve::poly::Vertex<3> *next = *(*prior_i).second.begin(); + VVSMap::iterator next_i = edge_graph.find(next); + assert(next_i != edge_graph.end()); + connected.push_back(vmap[next]); + (*prior_i).second.erase(next); + (*next_i).second.erase(prior); + if (!(*prior_i).second.size()) { edge_graph.erase(prior_i); prior_i = edge_graph.end(); } + if (!(*next_i).second.size()) { edge_graph.erase(next_i); next_i = edge_graph.end(); } + prior_i = next_i; + prior = next; + } + bool closed = connected.front() == connected.back(); + for (size_t k = 0; k < connected.size(); ++k) { + std::cerr << " " << connected[k]; + } + std::cerr << std::endl; + intersection_graph.addPolyline(closed, connected.begin(), connected.end()); + } + + writePLY(std::cout, &intersection_graph, true); + } +} diff --git a/thirdparty/carve-1.4.0/src/extrude.cpp b/thirdparty/carve-1.4.0/src/extrude.cpp new file mode 100644 index 00000000..968aad70 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/extrude.cpp @@ -0,0 +1,453 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include +#include + +#include +#include + +#include "write_ply.hpp" + +#include + +template +carve::geom::vector lerp( + double t, + const carve::geom::vector &p1, + const carve::geom::vector &p2) { + return (1-t)*p1 + t*p2; +} + +template +class cubic_bezier { + +public: + typedef carve::geom::vector vec_t; + typedef cubic_bezier cubic_bezier_t; + + vec_t p[4]; + + cubic_bezier() { + } + + cubic_bezier(const vec_t &p1, const vec_t &p2, const vec_t &p3, const vec_t &p4) { + p[0] = p1; p[1] = p2; p[2] = p3; p[3] = p4; + } + + template + cubic_bezier(iter_t begin, iter_t end) { + if (std::distance(begin, end) != 4) throw std::runtime_error("failed"); + std::copy(begin, end, p); + } + + vec_t eval(double t) const { + double u = 1-t; + return u*u*u*p[0] + 3*t*u*u*p[1] + 3*t*t*u*p[2] + t*t*t*p[3]; + } + + double flatness() const { + carve::geom::ray ray = carve::geom::rayThrough(p[0], p[3]); + return sqrt(std::max(carve::geom::distance2(ray, p[1]), carve::geom::distance2(ray, p[2]))); + } + + void split(double t, cubic_bezier_t &a, cubic_bezier_t &b) const { + a.p[0] = p[0]; b.p[3] = p[3]; + a.p[1] = lerp(t, p[0], p[1]); + vec_t m = lerp(t, p[1], p[2]); + b.p[2] = lerp(t, p[2], p[3]); + a.p[2] = lerp(t, a.p[1], m); + b.p[1] = lerp(t, m, b.p[2]); + a.p[3] = b.p[0] = lerp(t, a.p[2], b.p[1]); + } + + void approximateSimple(std::vector &out, double max_flatness) const { + double f = flatness(); + if (f < max_flatness) { + out.push_back(p[3]); + } else { + cubic_bezier a, b; + split(0.5, a, b); + a.approximateSimple(out, max_flatness); + b.approximateSimple(out, max_flatness); + } + } + + void approximate(std::vector &out, double max_flatness, unsigned n_tests = 128) const { + double f = flatness(); + if (f < max_flatness) { + out.push_back(p[3]); + } else { + double best_t = .5; + double best_f = f; + cubic_bezier a, b; + for (size_t i = 1; i < n_tests; ++i) { + double t = double(i) / n_tests; + split(t, a, b); + double f = a.flatness() + b.flatness(); + if (f < best_f) { + best_t = t; + best_f = f; + } + } + split(best_t, a, b); + a.approximate(out, max_flatness, n_tests); + b.approximate(out, max_flatness, n_tests); + } + } +}; + +template +cubic_bezier make_bezier( + const carve::geom::vector &p1, + const carve::geom::vector &p2, + const carve::geom::vector &p3, + const carve::geom::vector &p4) { + return cubic_bezier(p1, p2, p3, p4); +} + +void consume(std::istream &in, char ch) { + while (in.good()) { + int c; + c = in.peek(); + if (in.eof()) return; + if (std::isspace(c)) { in.ignore(); continue; } + if (c == ch) { in.ignore(); } + return; + } +} + +void readVals(std::istream &in, std::vector &vals) { + while (in.good()) { + int c; + + while (std::isspace(in.peek())) in.ignore(); + + c = in.peek(); + if (in.eof()) break; + + if (c != '-' && c != '+' && c != '.' && !std::isdigit(c)) { + break; + } + + double v; + in >> v; + vals.push_back(v); + + while (std::isspace(in.peek())) in.ignore(); + c = in.peek(); + + if (c == ',') { + in.ignore(); + continue; + } else if (c == '-' || c == '+' || c == '.' || std::isdigit(c)) { + continue; + } else { + std::cerr << "remain c=" << (char)c << std::endl; + break; + } + } +} + +void add(std::vector &points, carve::geom2d::P2 p) { + if (!points.size() || points.back() != p) { + points.push_back(p); + } +} + +void add(std::vector &points, const cubic_bezier<2> &bezier) { + bezier.approximate(points, .05); +} + +void parsePath(std::istream &in, std::vector > &paths) { + carve::geom2d::P2 curr, curr_ctrl; + + std::string pathname; + // while (in.good() && !std::isspace(in.peek())) pathname.push_back(in.get()); + in >> pathname; + std::cerr << "parsing: [" << pathname << "]" << std::endl; + + std::vector vals; + + std::vector points; + while (in.good()) { + char c; + + in >> c; + if (in.eof()) break; + if (std::isspace(c)) continue; + std::cerr << "[" << c << "]"; + + vals.clear(); + switch (c) { + case 'M': { + readVals(in, vals); + points.clear(); + for (unsigned i = 0; i < vals.size(); i += 2) { + curr = carve::geom::VECTOR(vals[i], vals[i+1]); + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'm': { + readVals(in, vals); + points.clear(); + curr = carve::geom::VECTOR(0.0, 0.0); + for (unsigned i = 0; i < vals.size(); i += 2) { + curr += carve::geom::VECTOR(vals[i], vals[i+1]); + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'L': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 2) { + curr = carve::geom::VECTOR(vals[i], vals[i+1]); + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'l': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 2) { + curr += carve::geom::VECTOR(vals[i], vals[i+1]); + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'H': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); ++i) { + curr.x = vals[i]; + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'h': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); ++i) { + curr.x += vals[i]; + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'V': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); ++i) { + curr.y = vals[i]; + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'v': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); ++i) { + curr.y += vals[i]; + add(points, curr); + } + curr_ctrl = curr; + break; + } + case 'S': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 4) { + carve::geom2d::P2 c1 = curr - (curr_ctrl - curr); + carve::geom2d::P2 c2 = carve::geom::VECTOR(vals[i+0], vals[i+1]); + carve::geom2d::P2 p2 = carve::geom::VECTOR(vals[i+2], vals[i+3]); + add(points, make_bezier(curr, c1, c2, p2)); + curr_ctrl = c2; + curr = p2; + } + break; + } + case 's': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 4) { + carve::geom2d::P2 c1 = curr - (curr_ctrl - curr); + carve::geom2d::P2 c2 = curr + carve::geom::VECTOR(vals[i+0], vals[i+1]); + carve::geom2d::P2 p2 = curr + carve::geom::VECTOR(vals[i+2], vals[i+3]); + add(points, make_bezier(curr, c1, c2, p2)); + curr_ctrl = c2; + curr = p2; + } + break; + } + case 'C': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 6) { + carve::geom2d::P2 c1 = carve::geom::VECTOR(vals[i+0], vals[i+1]); + carve::geom2d::P2 c2 = carve::geom::VECTOR(vals[i+2], vals[i+3]); + carve::geom2d::P2 p2 = carve::geom::VECTOR(vals[i+4], vals[i+5]); + add(points, make_bezier(curr, c1, c2, p2)); + curr_ctrl = c2; + curr = p2; + } + break; + } + case 'c': { + readVals(in, vals); + for (unsigned i = 0; i < vals.size(); i += 6) { + carve::geom2d::P2 c1 = curr + carve::geom::VECTOR(vals[i+0], vals[i+1]); + carve::geom2d::P2 c2 = curr + carve::geom::VECTOR(vals[i+2], vals[i+3]); + carve::geom2d::P2 p2 = curr + carve::geom::VECTOR(vals[i+4], vals[i+5]); + add(points, make_bezier(curr, c1, c2, p2)); + curr_ctrl = c2; + curr = p2; + } + break; + } + case 'Z': + case 'z': { + + std::cerr << "path coords: " << std::endl; + for (size_t i = 0; i < points.size(); ++i) { + std::cerr << " " << i << ": " << points[i].x << "," << points[i].y; + } + if (points.back() == points.front()) points.pop_back(); + std::cerr << std::endl; + paths.push_back(points); + curr = curr_ctrl = carve::geom::VECTOR(0.0, 0.0); + break; + } + default: { + std::cerr << "unhandled path op: [" << c << "]" << std::endl; + throw std::runtime_error("failed"); + } + } + } +} + +void parsePath(std::string &s, std::vector > &paths) { + std::istringstream in(s); + return parsePath(in, paths); +} + +carve::poly::Polyhedron *extrude(const std::vector > &paths, carve::geom3d::Vector dir) { + carve::input::PolyhedronData data; + + for (size_t p = 0; p < paths.size(); ++p) { + const std::vector &path = paths[p]; + const unsigned N = path.size(); + std::cerr << "N=" << N << std::endl; + + std::vector fwd, rev; + fwd.reserve(N); + rev.reserve(N); + + std::map vert_idx; + std::set > edges; + + for (size_t i = 0; i < path.size(); ++i) { + carve::geom3d::Vector v; + std::map::iterator j; + + v = carve::geom::VECTOR(path[i].x, -path[i].y, 0.0); + j = vert_idx.find(v); + if (j == vert_idx.end()) { + data.addVertex(v); + fwd.push_back(vert_idx[v] = data.getVertexCount()-1); + } else { + fwd.push_back((*j).second); + } + + v = carve::geom::VECTOR(path[i].x, -path[i].y, 0.0) + dir; + j = vert_idx.find(v); + if (j == vert_idx.end()) { + data.addVertex(v); + rev.push_back(vert_idx[v] = data.getVertexCount()-1); + } else { + rev.push_back((*j).second); + } + } + + data.addFace(fwd.begin(), fwd.end()); + data.addFace(rev.rbegin(), rev.rend()); + + for (size_t i = 0; i < path.size()-1; ++i) { + edges.insert(std::make_pair(fwd[i+1], fwd[i])); + } + edges.insert(std::make_pair(fwd[0], fwd[N-1])); + + for (size_t i = 0; i < path.size()-1; ++i) { + if (edges.find(std::make_pair(fwd[i], fwd[i+1])) == edges.end()) { + data.addFace(fwd[i+1], fwd[i], rev[i], rev[i+1]); + } + } + if (edges.find(std::make_pair(fwd[N-1], fwd[0])) == edges.end()) { + data.addFace(fwd[0], fwd[N-1], rev[N-1], rev[0]); + } + } + + return new carve::poly::Polyhedron(data.points, data.getFaceCount(), data.faceIndices); +} + +int main(int argc, char **argv) { + typedef std::vector loop_t; + + std::ifstream in(argv[1]); + unsigned file_num = 0; + while (in.good()) { + std::string s; + std::getline(in, s); + if (in.eof()) break; + std::vector > paths; + parsePath(s, paths); + + std::cerr << "paths.size()=" << paths.size() << std::endl; + + if (paths.size() > 1) { + std::vector > > result; + std::vector > merged; + + result = carve::triangulate::mergePolygonsAndHoles(paths); + + merged.resize(result.size()); + for (size_t i = 0; i < result.size(); ++i) { + std::vector > &p = result[i]; + merged[i].reserve(p.size()); + for (size_t j = 0; j < p.size(); ++j) { + merged[i].push_back(paths[p[j].first][p[j].second]); + } + } + + paths.swap(merged); + } + + carve::poly::Polyhedron *p = extrude(paths, carve::geom::VECTOR(0,0,100)); + p->transform(carve::math::Matrix::TRANS(-p->aabb.pos)); + std::ostringstream outf; + outf << "file_" << file_num++ << ".ply"; + std::ofstream out(outf.str().c_str()); + writePLY(out, p, false); + delete p; + } + return 0; +} diff --git a/thirdparty/carve-1.4.0/src/glu_triangulator.cpp b/thirdparty/carve-1.4.0/src/glu_triangulator.cpp new file mode 100644 index 00000000..aadef8b7 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/glu_triangulator.cpp @@ -0,0 +1,139 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include "glu_triangulator.hpp" + +#if defined(__GNUC__) +#define __stdcall +#endif + +#if defined(GLU_TESS_CALLBACK_VARARGS) + typedef GLvoid (__stdcall *GLUTessCallback)(...); +#else + typedef void (__stdcall *GLUTessCallback)(); +#endif + +void GLUTriangulator::faceBegin(GLenum type) { + curr_type = type; + vertices.clear(); +} + +void GLUTriangulator::faceVertex(const carve::poly::Vertex<3> *vertex) { + vertices.push_back(vertex); +} + +void GLUTriangulator::faceEnd() { + std::vector *> fv; + fv.resize(3); + + switch (curr_type) { + case GL_TRIANGLES: { + for (int i = 0; i < vertices.size(); i += 3) { + fv[0] = vertices[i]; + fv[1] = vertices[i+1]; + fv[2] = vertices[i+2]; + new_faces.push_back(orig_face->create(fv, false)); + } + break; + } + case GL_TRIANGLE_STRIP: { + bool fwd = true; + for (int i = 2; i < vertices.size(); ++i) { + if (fwd) { + fv[0] = vertices[i-2]; + fv[1] = vertices[i-1]; + fv[2] = vertices[i]; + } else { + fv[0] = vertices[i]; + fv[1] = vertices[i-1]; + fv[2] = vertices[i-2]; + } + new_faces.push_back(orig_face->create(fv, false)); + fwd = !fwd; + } + break; + } + case GL_TRIANGLE_FAN: { + for (int i = 2; i < vertices.size(); ++i) { + fv[0] = vertices[0]; + fv[1] = vertices[i-1]; + fv[2] = vertices[i]; + new_faces.push_back(orig_face->create(fv, false)); + } + break; + } + } +} + +static void __stdcall _faceBegin(GLenum type, void *data) { + static_cast(data)->faceBegin(type); +} + +static void __stdcall _faceVertex(void *vertex_data, void *data) { + static_cast(data)->faceVertex(static_cast *>(vertex_data)); +} + +static void __stdcall _faceEnd(void *data) { + static_cast(data)->faceEnd(); +} + +GLUTriangulator::GLUTriangulator() { + tess = gluNewTess(); + gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (GLUTessCallback)_faceBegin); + gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (GLUTessCallback)_faceVertex); + gluTessCallback(tess, GLU_TESS_END_DATA, (GLUTessCallback)_faceEnd); +} + +GLUTriangulator::~GLUTriangulator() { + gluDeleteTess(tess); +} + +void GLUTriangulator::processOutputFace(std::vector *> &faces, + const carve::poly::Face<3> *orig, + bool flipped) { + size_t f = 0; + while (f < faces.size()) { + carve::poly::Face<3> *face = faces[f]; + if (face->vertices.size() == 3) { + ++f; + continue; + } + + orig_face = face; + + new_faces.clear(); + + gluTessBeginPolygon(tess, (void *)this); + gluTessBeginContour(tess); + + for (size_t i = 0; i < face->vertices.size(); ++i) { + gluTessVertex(tess, (GLdouble *)face->vertices[i]->v.v, (GLvoid *)face->vertices[i]); + } + + gluTessEndContour(tess); + gluTessEndPolygon(tess); + + faces.erase(faces.begin() + f); + faces.reserve(faces.size() + new_faces.size()); + faces.insert(faces.begin() + f, new_faces.begin(), new_faces.end()); + f += new_faces.size(); + delete face; + } +} diff --git a/thirdparty/carve-1.4.0/src/glu_triangulator.hpp b/thirdparty/carve-1.4.0/src/glu_triangulator.hpp new file mode 100644 index 00000000..4296e275 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/glu_triangulator.hpp @@ -0,0 +1,53 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#if defined(__APPLE__) +#include +#include +#else + +#ifdef WIN32 +#include +#undef rad1 +#undef rad2 +#endif + +#include +#include + +#endif + +#include + +class GLUTriangulator : public carve::csg::CSG::Hook { + GLUtesselator *tess; + GLenum curr_type; + + std::vector *> vertices; + std::vector *> new_faces; + const carve::poly::Face<3> *orig_face; + +public: + GLUTriangulator(); + virtual ~GLUTriangulator(); + virtual void processOutputFace(std::vector *> &faces, + const carve::poly::Face<3> *orig, + bool flipped); + + void faceBegin(GLenum type); + void faceVertex(const carve::poly::Vertex<3> *vertex); + void faceEnd(); +}; diff --git a/thirdparty/carve-1.4.0/src/intersect.cpp b/thirdparty/carve-1.4.0/src/intersect.cpp new file mode 100644 index 00000000..62834c91 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/intersect.cpp @@ -0,0 +1,574 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include "geometry.hpp" + +#if !defined(DISABLE_GLU_TRIANGULATOR) +#include "glu_triangulator.hpp" +#endif + +#include "read_ply.hpp" +#include "write_ply.hpp" + +#include "opts.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +typedef std::vector::iterator TOK; + + + +struct Options : public opt::Parser { + bool ascii; + bool obj; + bool vtk; + bool rescale; + bool canonicalize; + bool from_file; + bool triangulate; + bool no_holes; +#if !defined(DISABLE_GLU_TRIANGULATOR) + bool glu_triangulate; +#endif + bool improve; + carve::csg::CSG::CLASSIFY_TYPE classifier; + + std::string stream; + + void _read(std::istream &in) { + while (in.good()) { + char buf[1024]; + in.read(buf, 1024); + size_t sz = in.gcount(); + if (sz) { + stream.append(buf, sz); + } + } + } + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--canonicalize" || o == "-c") { canonicalize = true; return; } + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--rescale" || o == "-r") { rescale = true; return; } + if (o == "--triangulate" || o == "-t") { triangulate = true; return; } + if (o == "--no-holes" || o == "-n") { no_holes = true; return; } +#if !defined(DISABLE_GLU_TRIANGULATOR) + if (o == "--glu" || o == "-g") { glu_triangulate = true; return; } +#endif + if (o == "--improve" || o == "-i") { improve = true; return; } + if (o == "--edge" || o == "-e") { classifier = carve::csg::CSG::CLASSIFY_EDGE; return; } + if (o == "--epsilon" || o == "-E") { carve::setEpsilon(strtod(v.c_str(), NULL)); return; } + if (o == "--help" || o == "-h") { help(std::cout); exit(0); } + if (o == "--file" || o == "-f") { + from_file = true; + if (v == "-") { + _read(std::cin); + } else { + std::ifstream in(v.c_str()); + _read(in); + } + return; + } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] expression"); + }; + + virtual void arg(const std::string &a) { + if (from_file) { + std::cerr << "Can't mix command line arguments and -f" << std::endl; + exit(1); + } + if (stream.size()) stream += " "; + stream += a; + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + out << std::endl; + out << "expression is an infix expression:" << std::endl; + out << std::endl; + out << "For objects A and B, the following operators are defined" << std::endl; + out << " A | B A UNION B - CSG union of A and B." << std::endl; + out << " A & B A INTERSECTION B - CSG intersection of A and B." << std::endl; + out << " A ^ B A SYMMETRIC_DIFFERENCE B - CSG symmetric difference of A and B." << std::endl; + out << " A A_MINUS_B B - CSG subtraction of B from a." << std::endl; + out << " A B_MINUS_A B - CSG subtraction of A from B." << std::endl; + out << std::endl; + out << "an object can be any of the following:" << std::endl; + out << " CUBE - a cube from {-1,-1,-1} to {+1,+1,+1}." << std::endl; + out << " TORUS(slices, rings, rad1, rad2) - a torus defined by the provided." << std::endl; + out << " parameters." << std::endl; + out << " file.ply - an object in stanford .ply format." << std::endl; + out << " file.obj - an object in wavefront .obj format." << std::endl; + out << " (expression) - a subexpression to be evaluated." << std::endl; + out << std::endl; + out << "an object, A, may be operated on by the following functions:" << std::endl; + out << " SCALE(x, y, z, A) - scaling of A by {x,y,z}." << std::endl; + out << " TRANS(x, y, z, A) - translation of A by {x,y,z}." << std::endl; + out << " ROT(a, x, y, z, A) - rotation of about the axis{x,y,z}" << std::endl; + out << " by a radians." << std::endl; + out << " FLIP(A) - normal-flipped A." << std::endl; + out << " SELECT(i, A) - selection of manifold i from A." << std::endl; + out << std::endl; + out << "examples:" << std::endl; + out << " CUBE & ROT(0.78539816339744828,1,1,1,CUBE)" << std::endl; + out << " data/cylinderx.ply | data/cylindery.ply | data/cylinderz.ply" << std::endl; + + } + + Options() { + ascii = true; + obj = false; + vtk = false; + rescale = false; + triangulate = false; + no_holes = false; +#if !defined(DISABLE_GLU_TRIANGULATOR) + glu_triangulate = false; +#endif + improve = false; + classifier = carve::csg::CSG::CLASSIFY_NORMAL; + + option("canonicalize", 'c', false, "Canonicalize before output (for comparing output)."); + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("obj", 'O', false, "Output in .obj format."); + option("vtk", 'V', false, "Output in .vtk format."); + option("rescale", 'r', false, "Rescale prior to CSG operations."); + option("triangulate", 't', false, "Triangulate output."); + option("no-holes", 'n', false, "Split faces containing holes."); +#if !defined(DISABLE_GLU_TRIANGULATOR) + option("glu", 'g', false, "Use GLU triangulator."); +#endif + option("improve", 'i', false, "Improve triangulation by minimising internal edge lengths."); + option("edge", 'e', false, "Use edge classifier."); + option("epsilon", 'E', true, "Set epsilon used for calculations."); + option("file", 'f', true, "Read CSG expression from file."); + option("help", 'h', false, "This help message."); + } +}; + + + +static Options options; + + + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +bool charTok(char ch) { + return strchr("()|&^,-", ch) != NULL; +} + +bool beginsNumber(char ch) { + return strchr("+-0123456789.", ch) != NULL; +} + +bool STRTOD(const std::string &str, double &v) { + char *ptr; + v = strtod(str.c_str(), &ptr); + return *ptr == 0; +} + +bool STRTOUL(const std::string &str, unsigned long &v) { + char *ptr; + v = strtoul(str.c_str(), &ptr, 0); + return *ptr == 0; +} + +std::vector tokenize(const std::string &stream) { + size_t i = 0; + std::string token; + std::vector result; + while (i < stream.size()) { + if (isspace(stream[i])) { ++i; continue; } + + token = ""; + + if (beginsNumber(stream[i])) { + char *t; + strtod(stream.c_str() + i, &t); + if (t != stream.c_str() + i) { + token = stream.substr(i, t - stream.c_str() - i); + result.push_back(token); + i += token.size(); + continue; + } + } + + if (charTok(stream[i])) { + token = stream.substr(i, 1); + result.push_back(token); + ++i; + continue; + } + + if (stream[i] == '"' || stream[i] == '\'') { + char close = stream[i++]; + while (i < stream.size() && stream[i] != close) { + if (stream[i] == '\\') { + if (++i == stream.size()) { + std::cerr << "unterminated escape" << std::endl; + exit(1); + } + } + token.push_back(stream[i++]); + } + if (i == stream.size()) { + std::cerr << "unterminated string" << std::endl; + exit(1); + } + ++i; + result.push_back(token); + continue; + } + + // not space, single char, number, or quoted string. + // generally this will be a function name, or a file name. + // will extend to the next (unescaped) space, single char, or quote. + + while (i < stream.size()) { + if (stream[i] == '\\') { + if (++i == stream.size()) { + std::cerr << "unterminated escape" << std::endl; + exit(1); + } + } else { + if (isspace(stream[i])) break; + if (charTok(stream[i])) break; + if (stream[i] == '"' || stream[i] == '\'') break; + } + token += stream[i++]; + } + result.push_back(token); + } + + return result; +} + +carve::csg::CSG_TreeNode *parseBracketExpr(TOK &tok); +carve::csg::CSG_TreeNode *parseAtom(TOK &tok); +carve::csg::CSG_TreeNode *parseTransform(TOK &tok); +carve::csg::CSG_TreeNode *parseExpr(TOK &tok); + +bool parseOP(TOK &tok, carve::csg::CSG::OP &op); + +carve::csg::CSG_TreeNode *parseBracketExpr(TOK &tok) { + carve::csg::CSG_TreeNode *result; + if (*tok != "(") return NULL; + ++tok; + result = parseExpr(tok); + if (result == NULL || *tok != ")") return NULL; + ++tok; + return result; +} + +carve::csg::CSG_TreeNode *parseAtom(TOK &tok) { + if (*tok == "(") { + return parseBracketExpr(tok); + } else { + carve::poly::Polyhedron *poly = NULL; + + if (*tok == "CUBE") { + poly = makeCube(); + } else if (*tok == "CONE") { + unsigned long slices; + double rad, height; + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOUL(*tok, slices)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, rad)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, height)) { return NULL; } ++tok; + if (*tok != ")") { return NULL; } + poly = makeCone(slices, rad, height); + } else if (*tok == "CYLINDER") { + unsigned long slices; + double rad, height; + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOUL(*tok, slices)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, rad)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, height)) { return NULL; } ++tok; + if (*tok != ")") { return NULL; } + poly = makeCylinder(slices, rad, height); + } else if (*tok == "TORUS") { + unsigned long slices, rings; + double rad1, rad2; + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOUL(*tok, slices)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOUL(*tok, rings)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, rad1)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, rad2)) { return NULL; } ++tok; + if (*tok != ")") { return NULL; } + poly = makeTorus(slices, rings, rad1, rad2); + } else if (endswith(*tok, ".ply")) { + poly = readPLY(*tok); + } else if (endswith(*tok, ".vtk")) { + poly = readVTK(*tok); + } else if (endswith(*tok, ".obj")) { + poly = readOBJ(*tok); + } + if (poly == NULL) return NULL; + + std::cerr << "loaded polyhedron " << poly << " has " + << poly->vertices.size() << " vertices " + << poly->faces.size() << " faces " + << poly->manifold_is_closed.size() << " manifolds (" << std::count(poly->manifold_is_closed.begin(), poly->manifold_is_closed.end(), true) << " closed)" << std::endl; + + ++tok; + return new carve::csg::CSG_PolyNode(poly, true); + } +} + +carve::csg::CSG_TreeNode *parseTransform(TOK &tok) { + carve::csg::CSG_TreeNode *result; + double ang, x, y, z; + if (*tok == "FLIP") { + ++tok; + if (*tok != "(") { return NULL; } ++tok; + carve::csg::CSG_TreeNode *child = parseTransform(tok); + if (*tok != ")") { delete child; return NULL; } ++tok; + + result = new carve::csg::CSG_InvertNode(child); + } else if (*tok == "SELECT") { + unsigned long id; + std::set sel_ids; + + ++tok; + if (*tok != "(") { return NULL; } ++tok; + while (1) { + if (!STRTOUL(*tok, id)) { break; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + sel_ids.insert(id); + } + + carve::csg::CSG_TreeNode *child = parseTransform(tok); + if (child == NULL) return NULL; + + if (*tok != ")") { delete child; return NULL; } ++tok; + + result = new carve::csg::CSG_SelectNode(sel_ids.begin(), sel_ids.end(), child); + } else if (*tok == "ROT") { + bool deg = false; + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOD(*tok, ang)) { return NULL; } ++tok; + if (*tok == "deg") { deg = true; ++tok; } + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, x)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, y)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, z)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + + carve::csg::CSG_TreeNode *child = parseTransform(tok); + if (child == NULL) return NULL; + + if (*tok != ")") { delete child; return NULL; } ++tok; + if (deg) ang *= M_PI / 180.0; + result = new carve::csg::CSG_TransformNode(carve::math::Matrix::ROT(ang, x, y, z), child); + } else if (*tok == "TRANS") { + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOD(*tok, x)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, y)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, z)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + + carve::csg::CSG_TreeNode *child = parseTransform(tok); + if (child == NULL) return NULL; + + if (*tok != ")") { delete child; return NULL; } ++tok; + result = new carve::csg::CSG_TransformNode(carve::math::Matrix::TRANS(x, y, z), child); + } else if (*tok == "SCALE") { + ++tok; + if (*tok != "(") { return NULL; } ++tok; + if (!STRTOD(*tok, x)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, y)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + if (!STRTOD(*tok, z)) { return NULL; } ++tok; + if (*tok != ",") { return NULL; } ++tok; + + carve::csg::CSG_TreeNode *child = parseTransform(tok); + if (child == NULL) return NULL; + + if (*tok != ")") { delete child; return NULL; } ++tok; + result = new carve::csg::CSG_TransformNode(carve::math::Matrix::SCALE(x, y, z), child); + } else { + result = parseAtom(tok); + } + return result; +} + +bool parseOP(TOK &tok, carve::csg::CSG::OP &op) { + if (*tok == "INTERSECTION" || *tok == "&") { op = carve::csg::CSG::INTERSECTION; } + else if (*tok == "UNION" || *tok == "|") { op = carve::csg::CSG::UNION; } + else if (*tok == "A_MINUS_B" || *tok == "-") { op = carve::csg::CSG::A_MINUS_B; } + else if (*tok == "B_MINUS_A") { op = carve::csg::CSG::B_MINUS_A; } + else if (*tok == "SYMMETRIC_DIFFERENCE" || *tok == "^") { op = carve::csg::CSG::SYMMETRIC_DIFFERENCE; } + else { return false; } + ++tok; + return true; +} + +carve::csg::CSG_TreeNode *parseExpr(TOK &tok) { + carve::csg::CSG_TreeNode *lhs = parseTransform(tok); + carve::csg::CSG::OP op; + if (lhs == NULL) return NULL; + + while (parseOP(tok, op)) { + carve::csg::CSG_TreeNode *rhs = parseTransform(tok); + if (rhs == NULL) { delete lhs; return NULL; } + lhs = new carve::csg::CSG_OPNode(lhs, rhs, op, options.rescale, options.classifier); + } + return lhs; +} + +carve::csg::CSG_TreeNode *parse(TOK &tok) { + carve::csg::CSG_TreeNode *result = parseExpr(tok); + if (result == NULL || *tok != "$") { return NULL; } + return result; +} + + + + + +int main(int argc, char **argv) { + static carve::TimingName MAIN_BLOCK("Application"); + static carve::TimingName PARSE_BLOCK("Parse"); + static carve::TimingName EVAL_BLOCK("Eval"); + static carve::TimingName WRITE_BLOCK("Write"); + + carve::Timing::start(MAIN_BLOCK); + + double duration; + std::vector tokens; + + options.parse(argc, argv); + + tokens = tokenize(options.stream); + tokens.push_back("$"); + + carve::Timing::start(PARSE_BLOCK); + TOK tok = tokens.begin(); + carve::csg::CSG_TreeNode *p = parse(tok); + duration = carve::Timing::stop(); + + std::cerr << "Parse time " << duration << " seconds" << std::endl; + + if (p != NULL) { + carve::Timing::start(EVAL_BLOCK); + carve::poly::Polyhedron *result = NULL; + try { + carve::csg::CSG csg; + if (options.triangulate) { +#if !defined(DISABLE_GLU_TRIANGULATOR) + if (options.glu_triangulate) { + csg.hooks.registerHook(new GLUTriangulator, carve::csg::CSG::Hooks::PROCESS_OUTPUT_FACE_BIT); + if (options.improve) { + csg.hooks.registerHook(new carve::csg::CarveTriangulationImprover, carve::csg::CSG::Hooks::PROCESS_OUTPUT_FACE_BIT); + } + } else { +#endif + if (options.improve) { + csg.hooks.registerHook(new carve::csg::CarveTriangulatorWithImprovement, carve::csg::CSG::Hooks::PROCESS_OUTPUT_FACE_BIT); + } else { + csg.hooks.registerHook(new carve::csg::CarveTriangulator, carve::csg::CSG::Hooks::PROCESS_OUTPUT_FACE_BIT); + } +#if !defined(DISABLE_GLU_TRIANGULATOR) + } +#endif + } else if (options.no_holes) { + csg.hooks.registerHook(new carve::csg::CarveHoleResolver, carve::csg::CSG::Hooks::PROCESS_OUTPUT_FACE_BIT); + } + result = p->eval(csg); + } catch (carve::exception e) { + std::cerr << "CSG failed, exception: " << e.str() << std::endl; + } + duration = carve::Timing::stop(); + std::cerr << "Eval time " << duration << " seconds" << std::endl; + + carve::Timing::start(WRITE_BLOCK); + if (result) { + if (options.canonicalize) result->canonicalize(); + + if (options.obj) { + writeOBJ(std::cout, result); + } else if (options.vtk) { + writeVTK(std::cout, result); + } else { + writePLY(std::cout, result, options.ascii); + } + } + duration = carve::Timing::stop(); + std::cerr << "Output time " << duration << " seconds" << std::endl; + + { + static carve::TimingName FUNC_NAME("Main app delete polyhedron"); + carve::TimingBlock block(FUNC_NAME); + + delete p; + if (result) delete result; + } + } else { + std::cerr << "syntax error at [" << *tok << "]" << std::endl; + } + + carve::Timing::stop(); + + carve::Timing::printTimings(); +} diff --git a/thirdparty/carve-1.4.0/src/intersection.ply b/thirdparty/carve-1.4.0/src/intersection.ply new file mode 100644 index 00000000..3b814e46 Binary files /dev/null and b/thirdparty/carve-1.4.0/src/intersection.ply differ diff --git a/thirdparty/carve-1.4.0/src/selfintersect.cpp b/thirdparty/carve-1.4.0/src/selfintersect.cpp new file mode 100644 index 00000000..a2d3c967 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/selfintersect.cpp @@ -0,0 +1,534 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include + +// #include + +#include "opts.hpp" +#include "read_ply.hpp" +#include "write_ply.hpp" + + +#include +#include +#include +#include +#include +#include +#include + +struct Options : public opt::Parser { + bool ascii; + bool obj; + bool vtk; + + std::string file; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] expression"); + }; + + virtual void arg(const std::string &a) { + if (file == "") { + file = a; + } + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + } + + Options() { + ascii = true; + obj = false; + vtk = false; + file = ""; + + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("obj", 'O', false, "Output in .obj format."); + option("vtk", 'V', false, "Output in .vtk format."); + } +}; + + + +static Options options; + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +typedef carve::geom::vector<3> vec3; +typedef carve::geom::vector<2> vec2; + +inline void add_to_bbox(vec3 &lo, vec3 &hi, const vec3 &p) { + lo.x = std::min(lo.x, p.x); lo.y = std::min(lo.y, p.y); lo.z = std::min(lo.z, p.z); + hi.x = std::max(hi.x, p.x); hi.y = std::max(hi.y, p.y); hi.z = std::max(hi.z, p.z); +} + +template +void bbox(iter_t begin, iter_t end, vec3 &lo, vec3 &hi) { + lo = hi = *begin++; + for (; begin != end; ++begin) { + add_to_bbox(lo, hi, *begin); + } +} + +vec3 extent(const vec3 tri[3]) { + vec3 lo, hi; + bbox(tri, tri+3, lo, hi); + return hi - lo; +} + +vec3 extent(const vec3 tri[3], const vec3 &p1) { + vec3 lo, hi; + bbox(tri, tri+3, lo, hi); + add_to_bbox(lo, hi, p1); + return hi - lo; +} + +vec3 extent(const vec3 tri[3], const vec3 &p1, const vec3 &p2) { + vec3 lo, hi; + bbox(tri, tri+3, lo, hi); + add_to_bbox(lo, hi, p1); + add_to_bbox(lo, hi, p2); + return hi - lo; +} + +vec3 extent(const vec3 tri_a[3], const vec3 tri_b[3]) { + vec3 lo, hi; + bbox(tri_a, tri_a+3, lo, hi); + add_to_bbox(lo, hi, tri_b[0]); + add_to_bbox(lo, hi, tri_b[1]); + add_to_bbox(lo, hi, tri_b[2]); + return hi - lo; +} + +bool shares_edge(const vec3 tri_a[3], const vec3 tri_b[3], size_t &ia, size_t &ib) { + for (size_t a = 0; a < 3; ++a) { + for (size_t b = 0; b < 3; ++b) { + if (tri_a[a] == tri_b[(b+1)%3] && tri_a[(a+1)%3] == tri_b[b]) { + ia = a; ib = b; return true; + } + } + } + return false; +} + +std::string SIGN(double x) { + if (x == 0.0) return "0"; + if (x < 0.0) return "-"; + return "+"; +} + +inline int fsign(double d) { + if (d < 0.0) return -1; + if (d == 0.0) return 0; + return +1; +} + +inline void count(int s[3], int c[3]) { + std::fill(c, c+3, 0); + c[s[0]+1]++; c[s[1]+1]++; c[s[2]+1]++; +} + +vec3 normal(const vec3 tri[3]) { + return carve::geom::cross(tri[1]-tri[0], tri[2]-tri[0]); +} + +// assumes that p is coplanar with tri - compute by projecting away smallest axis +int triangle_point_intersection_2d(const vec3 tri[3], const vec3 &p) { + if (p == tri[0] || p == tri[1] || p == tri[2]) { + // shared vertex. + return 1; + } + + int a0 = carve::geom::largestAxis(normal(tri)); + int a1 = (a0+1) % 3; + int a2 = (a0+2) % 3; + + vec2 ptri[3]; + vec2 pp; + + ptri[0] = carve::geom::select(tri[0], a1, a2); + ptri[1] = carve::geom::select(tri[1], a1, a2); + ptri[2] = carve::geom::select(tri[2], a1, a2); + pp = carve::geom::select(p, a1, a2); + + // what about vertex-edge intersections? currently count them as intersections. + return carve::geom2d::pointIntersectsTriangle(pp, ptri) ? 3 : 0; +} + +// assumes that p1 and p2 are coplanar with tri - compute by projecting away smallest axis +int triangle_line_intersection_2d(const vec3 tri[3], const vec3 &p1, const vec3 &p2) { + int a0 = carve::geom::largestAxis(normal(tri)); + int a1 = (a0+1) % 3; + int a2 = (a0+2) % 3; + + vec2 ptri[3]; + vec2 pp1; + vec2 pp2; + + ptri[0] = carve::geom::select(tri[0], a1, a2); + ptri[1] = carve::geom::select(tri[1], a1, a2); + ptri[2] = carve::geom::select(tri[2], a1, a2); + if (!carve::geom2d::isAnticlockwise(ptri)) std::swap(ptri[0], ptri[2]); + + pp1 = carve::geom::select(p1, a1, a2); + pp2 = carve::geom::select(p2, a1, a2); + + int ia = std::find(ptri, ptri+3, pp1) - ptri; + int ib = std::find(ptri, ptri+3, pp2) - ptri; + + if (ia == 3 && ib == 3) { + // no shared vertices + return carve::geom2d::lineIntersectsTriangle(pp1, pp2, ptri) ? 3 : 0; + } else if (ib == 3) { + // shared vertex (pp1) + if (carve::geom2d::orient2d(ptri[(ia+2)%3], ptri[ia], pp2) < 0.0) return 1; + if (carve::geom2d::orient2d(ptri[ia], ptri[(ia+1)%3], pp2) < 0.0) return 1; + return 3; + } else if (ia == 3) { + // shared vertex (pp2) + if (carve::geom2d::orient2d(ptri[(ib+2)%3], ptri[ib], pp1) < 0.0) return 1; + if (carve::geom2d::orient2d(ptri[ib], ptri[(ib+1)%3], pp1) < 0.0) return 1; + return 3; + } else { + // shared edge + return 2; + } +} + +bool shared_vertex_intersection_test(const vec2 tri_a[3], int va, const vec2 tri_b[3], int vb) { + // if two triangles share a vertex, then they additionally intersect if the two wedges formed by the two triangles at the shared vertex overlap. + int van = (va+1)%3, vap = (va+2)%3; + int vbn = (vb+1)%3, vbp = (vb+2)%3; + + if (carve::geom2d::orient2d(tri_a[vap], tri_a[va], tri_b[vbp]) >= 0 && + carve::geom2d::orient2d(tri_a[va], tri_a[van], tri_b[vbp]) >= 0) return true; + if (carve::geom2d::orient2d(tri_a[vap], tri_a[va], tri_b[vbn]) >= 0 && + carve::geom2d::orient2d(tri_a[va], tri_a[van], tri_b[vbn]) >= 0) return true; + + if (carve::geom2d::orient2d(tri_b[vbp], tri_b[vb], tri_a[vap]) >= 0 && + carve::geom2d::orient2d(tri_b[vb], tri_b[vbn], tri_a[vap]) >= 0) return true; + if (carve::geom2d::orient2d(tri_b[vbp], tri_b[vb], tri_a[van]) >= 0 && + carve::geom2d::orient2d(tri_b[vb], tri_b[vbn], tri_a[van]) >= 0) return true; + + return false; +} + +bool shared_edge_intersection_test(const vec2 &l1, const vec2 &l2, const vec2 &p1, const vec2 &p2) { + // if two triangles share an edge, then they additionally intersect if the unshared vertices lie on the same side as the edge. + return fsign(carve::geom2d::orient2d(l1, l2, p1)) * fsign(carve::geom2d::orient2d(l1, l2, p2)) != -1; +} + +// assumes that tri_a is coplanar with tri_b - compute by projecting away smallest axis +int triangle_triangle_intersection_2d(const vec3 tri_a[3], const vec3 tri_b[3]) { + int a0 = carve::geom::largestAxis(normal(tri_a)); + int a1 = (a0+1) % 3; + int a2 = (a0+2) % 3; + + vec2 ptri_a[3], ptri_b[3]; + + ptri_a[0] = carve::geom::select(tri_a[0], a1, a2); + ptri_a[1] = carve::geom::select(tri_a[1], a1, a2); + ptri_a[2] = carve::geom::select(tri_a[2], a1, a2); + if (!carve::geom2d::isAnticlockwise(ptri_a)) std::swap(ptri_a[0], ptri_a[2]); + + ptri_b[0] = carve::geom::select(tri_b[0], a1, a2); + ptri_b[1] = carve::geom::select(tri_b[1], a1, a2); + ptri_b[2] = carve::geom::select(tri_b[2], a1, a2); + if (!carve::geom2d::isAnticlockwise(ptri_b)) std::swap(ptri_b[0], ptri_b[2]); + + int ia = std::find(ptri_b, ptri_b+3, ptri_a[0]) - ptri_b; + int ib = std::find(ptri_b, ptri_b+3, ptri_a[1]) - ptri_b; + int ic = std::find(ptri_b, ptri_b+3, ptri_a[2]) - ptri_b; + + if (ia == 3 && ib == 3 && ic == 3) { + // no shared vertices + return carve::geom2d::triangleIntersectsTriangle(ptri_b, ptri_a) ? 3 : 0; + } else if (ib == 3 && ic == 3) { + // shared vertex ia. + return shared_vertex_intersection_test(ptri_a, 0, ptri_b, ia) ? 3 : 1; + } else if (ia == 3 && ic == 3) { + // shared vertex ib. + return shared_vertex_intersection_test(ptri_a, 1, ptri_b, ib) ? 3 : 1; + } else if (ia == 3 && ib == 3) { + // shared vertex ic. + return shared_vertex_intersection_test(ptri_a, 2, ptri_b, ic) ? 3 : 1; + } else if (ic == 3) { + // shared edge ia-ib. + return shared_edge_intersection_test(ptri_a[0], ptri_a[1], ptri_a[2], ptri_b[3-ia-ib]) ? 3 : 2; + } else if (ia == 3) { + // shared edge ib-ic. + return shared_edge_intersection_test(ptri_a[1], ptri_a[2], ptri_a[0], ptri_b[3-ib-ic]) ? 3 : 2; + } else if (ib == 3) { + // shared edge ic-ia. + return shared_edge_intersection_test(ptri_a[2], ptri_a[0], ptri_a[1], ptri_b[3-ic-ia]) ? 3 : 2; + } else { + // duplicated triangle. + return 3; + } +} + +bool line_segment_triangle_test(const vec3 tri[3], const vec3 &a, const vec3 &b) { + // XXX this test is correct with exact predicates, but fails for nearly-coplanar inputs with inexact predicates. a 2d projection test would be useful in this case. + int o[3]; + int c[3]; + + o[0] = fsign(carve::geom3d::orient3d(tri[0], tri[1], a, b)); + o[1] = fsign(carve::geom3d::orient3d(tri[1], tri[2], a, b)); + o[2] = fsign(carve::geom3d::orient3d(tri[2], tri[0], a, b)); + count(o, c); + + // count(0) == 0 -> face intersection? requires same result for other three tests + // count(0) == 1 -> edge intersection? requires same result for other two tests + // count(0) == 2 -> vertex intersection implies count(-1) == 0 or count(+1) == 0 + return (c[0] == 0 || c[2] == 0); +} + +template +t max3(const t &a, const t &b, const t &c) { + return std::max(std::max(a,b),c); +} + +// 0 = not intersecting +// 1 = shared vertex +// 2 = shared edge +// 3 = intersecting +int a_intersects_b(const vec3 tri_a[3], double da[3], const vec3 tri_b[3]) { + // called with non-coplanar triangles the sign of elements of da determine which side of tri_b each vertex of tri_a is on. + + int s[3]; s[0] = fsign(da[0]); s[1] = fsign(da[1]); s[2] = fsign(da[2]); + int c[3]; + count(s, c); + + switch (c[1]) { + case 0: { + // no coplanar points + if (s[0] != s[1] && line_segment_triangle_test(tri_b, tri_a[0], tri_a[1])) return 3; + if (s[1] != s[2] && line_segment_triangle_test(tri_b, tri_a[1], tri_a[2])) return 3; + if (s[2] != s[0] && line_segment_triangle_test(tri_b, tri_a[2], tri_a[0])) return 3; + return 0; + } + case 1: { + // 1 coplanar point. + size_t zi = std::find(s, s+3, 0) - s; + if (c[0] == 1 && c[2] == 1) { + // test for intersection of crossing edge. + if (line_segment_triangle_test(tri_b, tri_a[(zi+1)%3], tri_a[(zi+2)%3])) return 3; + } + // test point against triangle. + return triangle_point_intersection_2d(tri_b, tri_a[zi]); + } + case 2: { + // 2 coplanar points. + // test line segment against triangle. + size_t zi = std::find(s, s+3, 0) - s; + size_t zi2 = std::find(s+zi+1, s+3, 0) - s; + return triangle_line_intersection_2d(tri_b, tri_a[zi], tri_a[zi2]); + } + case 3: { + // 3 coplanar points. + // coplanar triangle. + return triangle_triangle_intersection_2d(tri_b, tri_a); + } + } + + return false; // not reached. +} + +bool bounding_box_overlap(const vec3 tri_a[3], const vec3 tri_b[3]) { + vec3 a_lo, a_hi; + vec3 b_lo, b_hi; + + bbox(tri_a, tri_a+3, a_lo, a_hi); + bbox(tri_b, tri_b+3, b_lo, b_hi); + + // check bounding boxes. + for (size_t i = 0; i < 3; ++i) { + if (a_hi.v[i] < b_lo.v[i] || b_hi.v[i] < a_lo.v[i]) { + return false; + } + } + return true; +} + +// 0 = not intersecting +// 1 = shared vertex +// 2 = shared edge +// 3 = intersecting +int tripair_intersection(const vec3 tri_a[3], const vec3 tri_b[3]) { + if (!bounding_box_overlap(tri_a, tri_b)) { + return 0; + } + + { + size_t ia, ib; + if (shares_edge(tri_a, tri_b, ia, ib)) { + if (carve::geom3d::orient3d(tri_a[0], tri_a[1], tri_a[2], tri_b[(ib+2)%3]) != 0.0) { + return 2; + } + + // triangles are coplanar, and share an edge. 2d test to determine edge sharing vs. intersecting. + // this case also catches identical triangles (possibly with reversed winding) and returns intersecting if they are not degenerate, and shared edge if they are. + int a0 = carve::geom::largestAxis(normal(tri_a)); + int a1 = (a0+1) % 3; + int a2 = (a0+2) % 3; + + CARVE_ASSERT(tri_a[ia] == tri_b[(ib+1)%3]); + CARVE_ASSERT(tri_a[(ia+1)%3] == tri_b[ib]); + + vec2 ea = carve::geom::select(tri_a[ia], a1, a2); + vec2 eb = carve::geom::select(tri_a[(ia+1)%3], a1, a2); + + int sa = fsign(carve::geom2d::orient2d(ea, eb, carve::geom::select(tri_a[(ia+2)%3], a1, a2))); + int sb = fsign(carve::geom2d::orient2d(ea, eb, carve::geom::select(tri_b[(ib+2)%3], a1, a2))); + + return (sa * sb == -1) ? 2 : 3; + } + } + + // triangles share at most one vertex. + double da[3], db[3]; + double lo, hi; + + for (size_t i = 0; i < 3; ++i) { + db[i] = carve::geom3d::orient3d(tri_a[0], tri_a[1], tri_a[2], tri_b[i]); + } + // test for b on one side of the plane containing a + lo = *std::min_element(db, db+3); + hi = *std::max_element(db, db+3); + if (lo > 0 || hi < 0) { + return 0; + } + + for (size_t i = 0; i < 3; ++i) { + da[i] = carve::geom3d::orient3d(tri_b[0], tri_b[1], tri_b[2], tri_a[i]); + } + // test for a on one side of the plane containing b + lo = *std::min_element(da, da+3); + hi = *std::max_element(da, da+3); + if (lo > 0 || hi < 0) { + return 0; + } + + int t1 = a_intersects_b(tri_a, da, tri_b); + int t2 = a_intersects_b(tri_b, db, tri_a); + + return std::max(t1, t2); +} + +int main(int argc, char **argv) { + options.parse(argc, argv); + carve::poly::Polyhedron *poly; + + if (options.file == "-") { + poly = readPLY(std::cin); + } else if (endswith(options.file, ".ply")) { + poly = readPLY(options.file); + } else if (endswith(options.file, ".vtk")) { + poly = readVTK(options.file); + } else if (endswith(options.file, ".obj")) { + poly = readOBJ(options.file); + } + + if (poly == NULL) { + // std::cerr << "failed to load polyhedron" << std::endl; + exit(1); + } + + // std::cerr << "poly aabb = " << poly->aabb << std::endl; + + for (size_t f = 0; f < poly->faces.size(); ++f) { + std::vector near_faces; + poly->findFacesNear(poly->faces[f].aabb, near_faces); + const carve::poly::Polyhedron::face_t *fa = &poly->faces[f]; + vec3 tri_a[3]; tri_a[0] = fa->vertex(0)->v; tri_a[1] = fa->vertex(1)->v; tri_a[2] = fa->vertex(2)->v; + + for (size_t f2 = 0; f2 < near_faces.size(); ++f2) { + const carve::poly::Polyhedron::face_t *fb = near_faces[f2]; + if (fa >= fb) continue; + if (fa->aabb.intersects(fb->aabb)) { + if (fa->nVertices() == 3 && fb->nVertices() == 3) { + vec3 tri_b[3]; tri_b[0] = fb->vertex(0)->v; tri_b[1] = fb->vertex(1)->v; tri_b[2] = fb->vertex(2)->v; + + switch (tripair_intersection(tri_a, tri_b)) { + case 0: + break; + case 1: + break; + case 2: + break; + case 3: { + std::cerr << "intersection: " << poly->faceToIndex_fast(fa) << " - " << poly->faceToIndex_fast(fb) << std::endl; + static int c = 0; + std::ostringstream fn; + fn << "intersection-" << c++ << ".ply"; + std::cerr << fn.str().c_str() << std::endl; + std::ofstream outf(fn.str().c_str()); + outf << "\ +ply\n\ +format ascii 1.0\n\ +element vertex 6\n\ +property double x\n\ +property double y\n\ +property double z\n\ +element face 2\n\ +property list uchar uchar vertex_indices\n\ +end_header\n"; + outf << std::setprecision(30); + outf << tri_a[0].x << " " << tri_a[0].y << " " << tri_a[0].z << "\n"; + outf << tri_a[1].x << " " << tri_a[1].y << " " << tri_a[1].z << "\n"; + outf << tri_a[2].x << " " << tri_a[2].y << " " << tri_a[2].z << "\n"; + outf << tri_b[0].x << " " << tri_b[0].y << " " << tri_b[0].z << "\n"; + outf << tri_b[1].x << " " << tri_b[1].y << " " << tri_b[1].z << "\n"; + outf << tri_b[2].x << " " << tri_b[2].y << " " << tri_b[2].z << "\n"; + outf << "\ +3 0 1 2\n\ +3 5 4 3\n"; + break; + } + } + } + } + } + } + + return 0; +} diff --git a/thirdparty/carve-1.4.0/src/triangulate.cpp b/thirdparty/carve-1.4.0/src/triangulate.cpp new file mode 100644 index 00000000..942f473b --- /dev/null +++ b/thirdparty/carve-1.4.0/src/triangulate.cpp @@ -0,0 +1,189 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include "read_ply.hpp" +#include "write_ply.hpp" + +#include "opts.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +typedef std::vector::iterator TOK; + + + +struct Options : public opt::Parser { + bool improve; + bool ascii; + bool obj; + bool vtk; + bool canonicalize; + + std::string file; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--canonicalize" || o == "-c") { canonicalize = true; return; } + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--help" || o == "-h") { help(std::cout); exit(0); } + if (o == "--improve" || o == "-i") { improve = true; return; } + } + + virtual std::string usageStr() { + return std::string ("Usage: ") + progname + std::string(" [options] expression"); + }; + + virtual void arg(const std::string &a) { + file = a; + } + + virtual void help(std::ostream &out) { + this->opt::Parser::help(out); + } + + Options() { + improve = false; + ascii = true; + obj = false; + vtk = false; + canonicalize = false; + file = ""; + + option("canonicalize", 'c', false, "Canonicalize before output (for comparing output)."); + option("binary", 'b', false, "Produce binary output."); + option("ascii", 'a', false, "ASCII output (default)."); + option("obj", 'O', false, "Output in .obj format."); + option("vtk", 'V', false, "Output in .vtk format."); + option("improve", 'i', false, "Improve triangulation by minimising internal edge lengths."); + option("help", 'h', false, "This help message."); + } +}; + + + +static Options options; + + + + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +carve::poly::Polyhedron *readModel(const std::string &file) { + carve::poly::Polyhedron *poly; + + if (file == "") { + if (options.obj) { + poly = readOBJ(std::cin); + } else if (options.vtk) { + poly = readVTK(std::cin); + } else { + poly = readPLY(std::cin); + } + } else if (endswith(file, ".ply")) { + poly = readPLY(file); + } else if (endswith(file, ".vtk")) { + poly = readVTK(file); + } else if (endswith(file, ".obj")) { + poly = readOBJ(file); + } + + if (poly == NULL) return NULL; + + std::cerr << "loaded polyhedron " << poly << " has " + << poly->vertices.size() << " vertices " + << poly->faces.size() << " faces " + << poly->manifold_is_closed.size() << " manifolds (" << std::count(poly->manifold_is_closed.begin(), poly->manifold_is_closed.end(), true) << " closed)" << std::endl; + + return poly; +} + +int main(int argc, char **argv) { + options.parse(argc, argv); + + carve::poly::Polyhedron *poly = readModel(options.file); + if (!poly) exit(1); + + std::vector > out_vertices = poly->vertices; + std::vector > out_faces; + + size_t N = 0; + for (size_t i = 0; i < poly->faces.size(); ++i) { + carve::poly::Face<3> &f = poly->faces[i]; + N += f.nVertices() - 2; + } + out_faces.reserve(N); + + for (size_t i = 0; i < poly->faces.size(); ++i) { + carve::poly::Face<3> &f = poly->faces[i]; + std::vector result; + + std::vector vloop; + f.getVertexLoop(vloop); + + carve::triangulate::triangulate(carve::poly::p2_adapt_project<3>(f.project), vloop, result); + if (options.improve) { + carve::triangulate::improve(carve::poly::p2_adapt_project<3>(f.project), vloop, result); + } + + for (size_t j = 0; j < result.size(); ++j) { + out_faces.push_back(carve::poly::Face<3>( + &out_vertices[poly->vertexToIndex_fast(vloop[result[j].a])], + &out_vertices[poly->vertexToIndex_fast(vloop[result[j].b])], + &out_vertices[poly->vertexToIndex_fast(vloop[result[j].c])] + )); + } + } + + carve::poly::Polyhedron *result = new carve::poly::Polyhedron(out_faces, out_vertices); + + if (options.canonicalize) result->canonicalize(); + + if (options.obj) { + writeOBJ(std::cout, result); + } else if (options.vtk) { + writeVTK(std::cout, result); + } else { + writePLY(std::cout, result, options.ascii); + } + + delete result; + delete poly; +} diff --git a/thirdparty/carve-1.4.0/src/view.cpp b/thirdparty/carve-1.4.0/src/view.cpp new file mode 100644 index 00000000..9950e382 --- /dev/null +++ b/thirdparty/carve-1.4.0/src/view.cpp @@ -0,0 +1,363 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include + +#include "geom_draw.hpp" +#include "read_ply.hpp" +#include "scene.hpp" +#include "opts.hpp" + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +struct Options : public opt::Parser { + bool wireframe; + bool normal; + bool fit; + bool obj; + bool vtk; + std::vector files; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--obj" || o == "-O") { obj = true; return; } + if (o == "--vtk" || o == "-V") { vtk = true; return; } + if (o == "--no-wireframe" || o == "-n") { wireframe = false; return; } + if (o == "--no-fit" || o == "-f") { fit = false; return; } + if (o == "--no-normals" || o == "-N") { normal = false; return; } + if (o == "--help" || o == "-h") { help(std::cout); exit(0); } + } + + virtual void arg(const std::string &a) { + files.push_back(a); + } + + Options() { + obj = false; + vtk = false; + fit = true; + wireframe = true; + normal = true; + + option("obj", 'O', false, "Read input in .obj format."); + option("vtk", 'V', false, "Read input in .vtk format."); + option("no-wireframe", 'n', false, "Don't display wireframes."); + option("no-fit", 'f', false, "Don't scale/translate for viewing."); + option("no-normals", 'N', false, "Don't display normals."); + option("help", 'h', false, "This help message."); + } +}; + + + +static Options options; + + + +bool odd(int x, int y, int z) { + return ((x + y + z) & 1) == 1; +} + +bool even(int x, int y, int z) { + return ((x + y + z) & 1) == 0; +} + +#undef min +#undef max + +GLuint genSceneDisplayList(std::vector &polys, + std::vector &lines, + std::vector &points, + size_t *listSize, + std::vector &is_wireframe) { + + int n = 0; + int N = 1; + + is_wireframe.clear(); + + if (options.wireframe) N = 2; + + for (size_t p = 0; p < polys.size(); ++p) n += polys[p]->manifold_is_closed.size() * N; + for (size_t p = 0; p < lines.size(); ++p) n += lines[p]->lines.size() * 2; + n += points.size(); + + if (n == 0) return 0; + + carve::geom3d::AABB aabb; + if (polys.size()) { + aabb = polys[0]->aabb; + } else if (lines.size()) { + aabb = lines[0]->aabb; + } else if (points.size()) { + aabb = points[0]->aabb; + } + for (size_t p = 0; p < polys.size(); ++p) aabb.unionAABB(polys[p]->aabb); + for (size_t p = 0; p < lines.size(); ++p) aabb.unionAABB(lines[p]->aabb); + for (size_t p = 0; p < points.size(); ++p) aabb.unionAABB(points[p]->aabb); + + GLuint dlist = glGenLists((GLsizei)(*listSize = n)); + is_wireframe.resize(n, false); + + double scale_fac = 20.0 / aabb.extent[carve::geom::largestAxis(aabb.extent)]; + + if (options.fit) { + g_translation = -aabb.pos; + g_scale = scale_fac; + } else { + g_translation = carve::geom::VECTOR(0.0,0.0,0.0); + g_scale = 1.0; + } + + unsigned list_num = 0; + + for (size_t p = 0; p < polys.size(); ++p) { + carve::poly::Polyhedron *poly = polys[p]; + for (unsigned i = 0; i < poly->manifold_is_closed.size(); i++) { + if (!poly->manifold_is_closed[i]) { + is_wireframe[list_num] = false; + glNewList(dlist + list_num++, GL_COMPILE); + glCullFace(GL_BACK); + drawPolyhedron(poly, 0.0f, 0.0f, 0.5f, 1.0f, false, i); + glCullFace(GL_FRONT); + drawPolyhedron(poly, 0.0f, 0.0f, 1.0f, 1.0f, false, i); + glCullFace(GL_BACK); + glEndList(); + + if (options.wireframe) { + is_wireframe[list_num] = true; + glNewList(dlist + list_num++, GL_COMPILE); + drawPolyhedronWireframe(poly, options.normal, i); + glEndList(); + } + } + } + + for (unsigned i = 0; i < poly->manifold_is_closed.size(); i++) { + if (poly->manifold_is_closed[i]) { + is_wireframe[list_num] = false; + glNewList(dlist + list_num++, GL_COMPILE); + glCullFace(GL_BACK); + drawPolyhedron(poly, 0.3f, 0.5f, 0.8f, 1.0f, false, i); + glCullFace(GL_FRONT); + drawPolyhedron(poly, 1.0f, 0.0f, 0.0f, 1.0f, false, i); + glCullFace(GL_BACK); + glEndList(); + + if (options.wireframe) { + is_wireframe[list_num] = true; + glNewList(dlist + list_num++, GL_COMPILE); + drawPolyhedronWireframe(poly, options.normal, i); + glEndList(); + } + } + } + } + + for (size_t l = 0; l < lines.size(); ++l) { + carve::line::PolylineSet *line = lines[l]; + + for (carve::line::PolylineSet::line_iter i = line->lines.begin(); i != line->lines.end(); ++i) { + is_wireframe[list_num] = false; + glNewList(dlist + list_num++, GL_COMPILE); + glBegin((*i)->isClosed() ? GL_LINE_LOOP : GL_LINE_STRIP); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + for (carve::line::polyline_vertex_iter j = (*i)->vbegin(); j != (*i)->vend(); ++j) { + carve::geom3d::Vector v = (*j)->v; + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); + } + glEnd(); + glEndList(); + is_wireframe[list_num] = true; + glNewList(dlist + list_num++, GL_COMPILE); + glPointSize(2.0); + glColor4f(1.0f, 1.0f, 0.0f, 1.0f); + glBegin(GL_POINTS); + for (carve::line::polyline_vertex_iter j = (*i)->vbegin(); j != (*i)->vend(); ++j) { + carve::geom3d::Vector v = (*j)->v; + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); + } + glEnd(); + glEndList(); + } + } + + for (size_t l = 0; l < points.size(); ++l) { + carve::point::PointSet *point = points[l]; + + is_wireframe[list_num] = false; + glNewList(dlist + list_num++, GL_COMPILE); + glPointSize(2.0); + glBegin(GL_POINTS); + for (size_t i = 0; i < point->vertices.size(); ++i) { + carve::geom3d::Vector v = point->vertices[i].v; + glColor4f(0.0f, 1.0f, 1.0f, 1.0f); + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); + } + glEnd(); + glEndList(); + } + + return dlist; +} + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + std::vector is_wireframe; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + if (k == '\\') { + for (unsigned i = 1; i < draw_flags.size(); i += 2) { + draw_flags[i] = !draw_flags[i]; + } + } else if (k == 'n') { + bool n = true; + for (unsigned i = 0; i < draw_flags.size(); ++i) + if (is_wireframe[i] && draw_flags[i]) n = false; + for (unsigned i = 0; i < draw_flags.size(); ++i) + if (is_wireframe[i]) draw_flags[i] = n; + } else if (k == 'm') { + bool n = true; + for (unsigned i = 0; i < draw_flags.size(); ++i) + if (!is_wireframe[i] && draw_flags[i]) n = false; + for (unsigned i = 0; i < draw_flags.size(); ++i) + if (!is_wireframe[i]) draw_flags[i] = n; + } else { + t = strchr(l, k); + if (t != NULL) { + CARVE_ASSERT(t >= l); + unsigned layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + } + return true; + } + + virtual GLvoid draw() { + for (unsigned i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = 0; + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +int main(int argc, char **argv) { + TestScene *scene = new TestScene(argc, argv, std::min(1, argc - 1)); + options.parse(argc, argv); + + size_t count = 0; + + carve::input::Input inputs; + std::vector polys; + std::vector lines; + std::vector points; + + if (options.files.size() == 0) { + if (options.obj) { + readOBJ(std::cin, inputs); + } else if (options.vtk) { + readVTK(std::cin, inputs); + } else { + readPLY(std::cin, inputs); + } + + } else { + for (size_t idx = 0; idx < options.files.size(); ++idx) { + std::string &s(options.files[idx]); + std::string::size_type i = s.rfind("."); + + if (i != std::string::npos) { + std::string ext = s.substr(i, s.size() - i); + if (!strcasecmp(ext.c_str(), ".obj")) { + readOBJ(s, inputs); + } else if (!strcasecmp(ext.c_str(), ".vtk")) { + readVTK(s, inputs); + } else { + readPLY(s, inputs); + } + } else { + readPLY(s, inputs); + } + } + } + + for (std::list::const_iterator i = inputs.input.begin(); i != inputs.input.end(); ++i) { + carve::poly::Polyhedron *p; + carve::point::PointSet *ps; + carve::line::PolylineSet *l; + + if ((p = carve::input::Input::create(*i)) != NULL) { + polys.push_back(p); + std::cerr << "loaded polyhedron " + << polys.back() << " has " << polys.back()->manifold_is_closed.size() + << " manifolds (" << std::count(polys.back()->manifold_is_closed.begin(), + polys.back()->manifold_is_closed.end(), + true) << " closed)" << std::endl; + } else if ((l = carve::input::Input::create(*i)) != NULL) { + lines.push_back(l); + std::cerr << "loaded polyline set " + << lines.back() << std::endl; + } else if ((ps = carve::input::Input::create(*i)) != NULL) { + points.push_back(ps); + std::cerr << "loaded point set " + << points.back() << std::endl; + } + } + + scene->draw_list_base = genSceneDisplayList(polys, lines, points, &count, scene->is_wireframe); + scene->draw_flags.assign(count, true); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/CMakeLists.txt b/thirdparty/carve-1.4.0/tests/CMakeLists.txt new file mode 100644 index 00000000..613c6b09 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/CMakeLists.txt @@ -0,0 +1,90 @@ +SET(GTEST_DIR "${carve_SOURCE_DIR}/external/gtest-1.5.0") + +include_directories(${GTEST_DIR}) +include_directories(${GTEST_DIR}/include) + +function(cxx_test_with_flags name cxx_flags libs) + add_executable(${name} ${ARGN}) + set_target_properties(${name} + PROPERTIES + COMPILE_FLAGS "${cxx_flags}") + # To support mixing linking in static and dynamic libraries, link each + # library in with an extra call to target_link_libraries. + foreach (lib "${libs}") + target_link_libraries(${name} ${lib}) + endforeach() + add_test(${name} ${name}) +endfunction() + +# cxx_test(name libs srcs...) +# +# creates a named test target that depends on the given libs and is +# built from the given source files. Unlike cxx_test_with_flags, +# test/name.cc is already implicitly included in the source file list. +function(cxx_test name libs) + cxx_test_with_flags("${name}" "${cxx_default}" "${libs}" "${name}.cpp" ${ARGN}) +endfunction() + +cxx_test(geom2d_unittest gtest_main) +target_link_libraries(geom2d_unittest carve) +cxx_test(geom3d_unittest gtest_main) +target_link_libraries(geom3d_unittest carve) +# not committed yet. +# cxx_test(exact_unittest gtest_main) +# target_link_libraries(exact_unittest carve) +# cxx_test(shewchuk_unittest gtest_main) + +include_directories("${carve_SOURCE_DIR}/include") +include_directories("${carve_SOURCE_DIR}/external/GLOOP/include") +include_directories("${carve_SOURCE_DIR}/external/GLEW/include") +include_directories("${carve_SOURCE_DIR}/external/GLUI/include") +include_directories("${carve_SOURCE_DIR}/common") +include_directories(${OPENGL_INCLUDE_DIR}) + +link_directories("${gloop_BINARY_DIR}") +link_directories("${carve_BINARY_DIR}/lib") +link_directories("${carve_BINARY_DIR}/common") + +add_executable (test_carve_polyhedrons_2 test_carve_polyhedrons_2.cpp) +target_link_libraries(test_carve_polyhedrons_2 carve carve_fileformats gloop_model) + +add_executable (test_geom test_geom.cpp) +target_link_libraries(test_geom carve) + +add_executable (test_eigen test_eigen.cpp) +target_link_libraries(test_eigen carve) + +add_executable (test_spacetree test_spacetree.cpp) +target_link_libraries(test_spacetree carve) + +add_executable (test_aabb test_aabb.cpp) +target_link_libraries(test_aabb carve) + +add_executable (test_rescale test_rescale.cpp) +target_link_libraries(test_rescale carve) + +add_executable (tetrahedron tetrahedron.cpp) +target_link_libraries(tetrahedron carve) + +if(CARVE_WITH_GUI) + add_executable (test_intersect test_intersect.cpp) + target_link_libraries(test_intersect carve carve_fileformats carve_ui carve_misc glui gloop_model ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_interpolate test_interpolate.cpp) + target_link_libraries(test_interpolate carve carve_ui glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_csg_interpolate test_csg_interpolate.cpp) + target_link_libraries(test_csg_interpolate carve carve_ui carve_misc carve_fileformats gloop_model glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_slice test_slice.cpp) + target_link_libraries(test_slice carve carve_ui carve_misc carve_fileformats gloop_model glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_slice_classify test_slice_classify.cpp) + target_link_libraries(test_slice_classify carve carve_ui carve_misc carve_fileformats gloop_model glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_triangulate test_triangulate.cpp) + target_link_libraries(test_triangulate carve carve_ui carve_misc glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (test_hole_incorporate test_hole_incorporate.cpp) + target_link_libraries(test_hole_incorporate carve carve_ui carve_misc glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) +endif(CARVE_WITH_GUI) diff --git a/thirdparty/carve-1.4.0/tests/Makefile.am b/thirdparty/carve-1.4.0/tests/Makefile.am new file mode 100644 index 00000000..f294e865 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/Makefile.am @@ -0,0 +1,63 @@ +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/include @GL_CFLAGS@ @GLUT_CFLAGS@ +CPPFLAGS += -I$(top_srcdir)/external/GLOOP/include + +noinst_HEADERS = mersenne_twister.h + +noinst_PROGRAMS = test_geom test_eigen test_spacetree test_aabb test_aabb_tri test_rescale tetrahedron + + + +test_geom_SOURCES=test_geom.cpp +test_geom_LDADD=../lib/libintersect.la + +test_eigen_SOURCES=test_eigen.cpp +test_eigen_LDADD=../lib/libintersect.la + +test_spacetree_SOURCES=test_spacetree.cpp +test_spacetree_LDADD=../lib/libintersect.la + +test_aabb_SOURCES=test_aabb.cpp +test_aabb_LDADD=../lib/libintersect.la + +test_aabb_tri_SOURCES=test_aabb_tri.cpp +test_aabb_tri_LDADD=../lib/libintersect.la + +test_rescale_SOURCES=test_rescale.cpp +test_rescale_LDADD=../lib/libintersect.la + +tetrahedron_SOURCES=tetrahedron.cpp +tetrahedron_LDADD=../lib/libintersect.la + + + +if with_GUI + CPPFLAGS += -I$(top_srcdir)/external/GLEW/include + CPPFLAGS += -I$(top_srcdir)/external/GLUI/include + noinst_PROGRAMS += test_intersect test_interpolate test_csg_interpolate test_slice test_slice_classify test_triangulate test_hole_incorporate problem +endif + + + +test_intersect_SOURCES=test_intersect.cpp +test_intersect_LDADD=../common/libcarve_fileformats.la ../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_interpolate_SOURCES=test_interpolate.cpp +test_interpolate_LDADD=../common/libcarve_ui.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_csg_interpolate_SOURCES=test_csg_interpolate.cpp +test_csg_interpolate_LDADD=../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_slice_SOURCES=test_slice.cpp +test_slice_LDADD=../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_slice_classify_SOURCES=test_slice_classify.cpp +test_slice_classify_LDADD=../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_triangulate_SOURCES=test_triangulate.cpp +test_triangulate_LDADD=../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +test_hole_incorporate_SOURCES=test_hole_incorporate.cpp +test_hole_incorporate_LDADD=../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +problem_SOURCES=problem.cpp +problem_LDADD=../common/libcarve_ui.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ diff --git a/thirdparty/carve-1.4.0/tests/coords.h b/thirdparty/carve-1.4.0/tests/coords.h new file mode 100644 index 00000000..75c56816 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/coords.h @@ -0,0 +1,2878 @@ +const double map[][2] = { + { 14.372, 157.927 }, + { 15.293, 156.084 }, + { 14.372, 156.084 }, + { 13.45, 155.163 }, + { 13.45, 154.243 }, + { 14.372, 153.39 }, + { 15.293, 154.243 }, + { 16.215, 155.163 }, + { 16.959, 154.243 }, + { 16.959, 153.39 }, + { 16.215, 152.4 }, + { 14.372, 151.602 }, + { 14.372, 149.707 }, + { 13.45, 147.85 }, + { 14.372, 146.075 }, + { 13.45, 145.331 }, + { 13.45, 144.41 }, + { 15.293, 142.635 }, + { 15.293, 140.726 }, + { 14.372, 139.873 }, + { 14.372, 138.084 }, + { 14.372, 137.163 }, + { 14.372, 136.244 }, + { 15.293, 135.322 }, + { 16.215, 137.163 }, + { 16.959, 137.163 }, + { 16.959, 136.244 }, + { 16.959, 135.322 }, + { 16.959, 134.469 }, + { 17.935, 133.547 }, + { 17.935, 134.469 }, + { 18.802, 134.469 }, + { 18.802, 133.547 }, + { 21.496, 133.547 }, + { 23.284, 133.547 }, + { 25.18, 133.547 }, + { 26.101, 133.547 }, + { 26.101, 131.759 }, + { 25.18, 131.759 }, + { 24.381, 130.906 }, + { 23.284, 130.906 }, + { 21.496, 130.906 }, + { 20.697, 131.759 }, + { 18.802, 130.906 }, + { 17.935, 129.864 }, + { 16.215, 129.864 }, + { 16.215, 128.942 }, + { 16.959, 127.154 }, + { 16.959, 126.234 }, + { 16.215, 126.234 }, + { 14.372, 127.154 }, + { 12.598, 127.154 }, + { 12.598, 124.756 }, + { 18.124, 115.669 }, + { 19.775, 114.681 }, + { 19.465, 113.394 }, + { 20.697, 110.822 }, + { 22.052, 108.545 }, + { 22.729, 105.593 }, + { 24.381, 104.604 }, + { 23.338, 102.274 }, + { 19.775, 101.353 }, + { 17.812, 100.066 }, + { 16.525, 99.389 }, + { 15.172, 95.516 }, + { 16.16, 94.838 }, + { 17.446, 94.473 }, + { 17.446, 92.578 }, + { 16.525, 92.197 }, + { 15.172, 92.197 }, + { 13.884, 88.337 }, + { 13.207, 88.337 }, + { 12.219, 85.75 }, + { 11.92, 82.798 }, + { 11.609, 81.146 }, + { 11.92, 79.548 }, + { 11.297, 78.26 }, + { 12.598, 76.594 }, + { 9.943, 72.058 }, + { 6.693, 69.417 }, + { 5.771, 65.543 }, + { 5.405, 61.615 }, + { 6.381, 59.339 }, + { 4.119, 56.387 }, + { 2.764, 54.423 }, + { 0.125, 52.215 }, + { 0.125, 50.55 }, + { 1.167, 49.574 }, + { 1.167, 48.287 }, + { 2.088, 48.287 }, + { 2.453, 45.39 }, + { 3.74, 42.45 }, + { 7.979, 40.785 }, + { 9.821, 40.785 }, + { 10.742, 41.706 }, + { 12.598, 41.706 }, + { 12.598, 38.942 }, + { 13.45, 38.942 }, + { 14.372, 40.785 }, + { 15.293, 40.785 }, + { 16.215, 38.942 }, + { 16.959, 38.942 }, + { 17.935, 40.785 }, + { 18.802, 40.785 }, + { 19.775, 42.573 }, + { 20.697, 41.706 }, + { 21.496, 42.573 }, + { 21.496, 43.547 }, + { 23.284, 42.573 }, + { 24.381, 43.547 }, + { 25.18, 43.547 }, + { 31.452, 43.547 }, + { 33.416, 42.573 }, + { 35.935, 43.547 }, + { 38.766, 45.39 }, + { 41.406, 45.39 }, + { 43.247, 46.934 }, + { 44.103, 47.854 }, + { 44.103, 46.934 }, + { 45.943, 47.854 }, + { 46.865, 48.83 }, + { 47.663, 49.628 }, + { 49.506, 48.83 }, + { 52.215, 49.628 }, + { 52.215, 50.618 }, + { 53.189, 50.618 }, + { 54.91, 50.618 }, + { 54.91, 52.459 }, + { 55.898, 53.312 }, + { 56.696, 52.459 }, + { 56.696, 54.233 }, + { 57.618, 54.233 }, + { 57.618, 56.022 }, + { 58.471, 57.863 }, + { 57.618, 61.492 }, + { 56.696, 61.492 }, + { 56.696, 62.414 }, + { 56.696, 63.335 }, + { 55.898, 63.335 }, + { 54.91, 64.256 }, + { 54.91, 65.109 }, + { 54.057, 65.908 }, + { 52.215, 66.775 }, + { 51.347, 66.775 }, + { 49.506, 68.618 }, + { 47.663, 68.618 }, + { 45.943, 68.618 }, + { 44.103, 68.618 }, + { 44.103, 67.696 }, + { 43.247, 66.775 }, + { 42.326, 67.696 }, + { 41.406, 68.618 }, + { 38.766, 67.696 }, + { 36.922, 67.696 }, + { 35.067, 67.696 }, + { 34.215, 66.775 }, + { 33.416, 66.775 }, + { 32.371, 66.775 }, + { 30.585, 65.908 }, + { 28.865, 65.109 }, + { 28.865, 65.908 }, + { 27.821, 65.908 }, + { 27.022, 65.109 }, + { 25.18, 63.335 }, + { 24.381, 63.335 }, + { 23.284, 63.335 }, + { 22.485, 63.335 }, + { 23.284, 64.256 }, + { 24.381, 64.256 }, + { 23.284, 65.908 }, + { 24.381, 67.696 }, + { 25.18, 68.618 }, + { 27.022, 68.618 }, + { 27.022, 69.538 }, + { 27.821, 69.538 }, + { 28.865, 69.538 }, + { 28.865, 70.392 }, + { 27.821, 70.392 }, + { 28.865, 71.38 }, + { 29.663, 71.38 }, + { 30.585, 71.38 }, + { 33.416, 71.38 }, + { 34.215, 72.356 }, + { 35.067, 73.155 }, + { 35.067, 74.021 }, + { 35.935, 74.998 }, + { 35.935, 76.784 }, + { 35.067, 77.706 }, + { 35.067, 78.626 }, + { 35.935, 79.494 }, + { 36.922, 81.334 }, + { 36.922, 82.188 }, + { 37.844, 83.178 }, + { 37.844, 84.031 }, + { 37.844, 84.952 }, + { 38.766, 84.952 }, + { 38.766, 86.618 }, + { 41.406, 87.539 }, + { 42.326, 88.46 }, + { 43.247, 86.618 }, + { 44.103, 87.539 }, + { 44.968, 88.46 }, + { 46.865, 90.301 }, + { 47.663, 90.301 }, + { 49.506, 90.301 }, + { 51.347, 91.154 }, + { 52.215, 90.301 }, + { 54.057, 89.313 }, + { 53.189, 85.696 }, + { 51.347, 84.031 }, + { 50.426, 84.031 }, + { 50.426, 84.952 }, + { 47.663, 84.031 }, + { 46.865, 83.178 }, + { 44.968, 82.188 }, + { 44.968, 81.334 }, + { 45.943, 80.347 }, + { 45.943, 78.626 }, + { 48.585, 79.494 }, + { 51.347, 79.494 }, + { 52.215, 79.494 }, + { 52.215, 80.347 }, + { 54.057, 80.347 }, + { 55.898, 81.334 }, + { 58.471, 82.188 }, + { 60.449, 81.334 }, + { 61.181, 82.188 }, + { 62.103, 81.334 }, + { 63.021, 81.334 }, + { 64.012, 82.188 }, + { 65.786, 83.178 }, + { 67.506, 83.178 }, + { 68.549, 83.178 }, + { 70.269, 84.031 }, + { 69.416, 82.188 }, + { 68.549, 81.334 }, + { 64.012, 82.188 }, + { 64.012, 81.334 }, + { 63.021, 78.626 }, + { 61.181, 76.784 }, + { 61.181, 75.917 }, + { 59.461, 74.998 }, + { 56.696, 73.155 }, + { 55.898, 72.356 }, + { 56.696, 71.38 }, + { 57.618, 70.392 }, + { 58.471, 68.618 }, + { 58.471, 66.775 }, + { 59.461, 65.908 }, + { 61.181, 65.109 }, + { 62.103, 62.414 }, + { 63.021, 60.573 }, + { 63.021, 59.651 }, + { 64.865, 60.573 }, + { 66.706, 60.573 }, + { 67.506, 59.651 }, + { 69.416, 61.492 }, + { 68.549, 61.492 }, + { 67.506, 63.335 }, + { 69.416, 63.335 }, + { 71.066, 62.414 }, + { 72.109, 63.335 }, + { 73.898, 62.414 }, + { 73.031, 61.492 }, + { 71.066, 59.651 }, + { 72.109, 57.863 }, + { 73.031, 57.01 }, + { 72.109, 56.022 }, + { 72.109, 55.221 }, + { 71.066, 54.233 }, + { 71.066, 53.312 }, + { 70.269, 52.459 }, + { 68.549, 52.459 }, + { 66.706, 52.459 }, + { 66.706, 49.628 }, + { 66.706, 48.83 }, + { 67.506, 46.934 }, + { 66.706, 46.934 }, + { 66.706, 46.067 }, + { 65.786, 45.39 }, + { 65.786, 43.547 }, + { 65.786, 42.573 }, + { 64.865, 41.706 }, + { 64.012, 40.785 }, + { 62.103, 39.863 }, + { 64.012, 39.863 }, + { 64.012, 38.942 }, + { 65.786, 38.942 }, + { 68.549, 38.022 }, + { 69.416, 38.022 }, + { 70.269, 39.863 }, + { 72.109, 39.863 }, + { 73.031, 40.785 }, + { 73.898, 41.706 }, + { 75.618, 42.573 }, + { 74.819, 43.547 }, + { 73.031, 43.547 }, + { 73.031, 44.414 }, + { 70.269, 45.39 }, + { 70.269, 46.067 }, + { 70.269, 47.854 }, + { 70.269, 48.83 }, + { 72.109, 49.628 }, + { 73.898, 49.628 }, + { 75.618, 50.618 }, + { 78.504, 52.459 }, + { 79.302, 51.538 }, + { 82.066, 50.618 }, + { 83.731, 49.628 }, + { 84.708, 48.83 }, + { 84.708, 47.854 }, + { 84.708, 46.067 }, + { 84.708, 44.414 }, + { 82.987, 42.573 }, + { 83.731, 42.573 }, + { 84.708, 41.706 }, + { 86.549, 39.863 }, + { 85.574, 38.942 }, + { 84.708, 38.022 }, + { 85.574, 37.167 }, + { 86.549, 36.302 }, + { 88.337, 32.55 }, + { 89.189, 32.55 }, + { 90.111, 30.83 }, + { 91.1, 29.854 }, + { 91.1, 30.83 }, + { 91.952, 31.751 }, + { 93.795, 31.751 }, + { 91.952, 28.987 }, + { 91.952, 28.065 }, + { 91.952, 27.146 }, + { 92.819, 27.146 }, + { 92.819, 28.065 }, + { 93.795, 28.065 }, + { 93.795, 26.225 }, + { 92.819, 26.225 }, + { 93.795, 23.652 }, + { 94.594, 24.625 }, + { 95.582, 24.625 }, + { 96.503, 24.625 }, + { 96.503, 26.225 }, + { 97.304, 27.146 }, + { 96.503, 28.065 }, + { 96.503, 29.854 }, + { 96.503, 31.751 }, + { 98.277, 28.987 }, + { 99.076, 29.854 }, + { 100.133, 30.83 }, + { 100.133, 29.854 }, + { 100.133, 28.987 }, + { 101.785, 27.146 }, + { 101.785, 26.225 }, + { 102.707, 22.785 }, + { 102.707, 21.863 }, + { 104.616, 21.863 }, + { 107.312, 21.863 }, + { 108.178, 20.022 }, + { 108.178, 19.101 }, + { 108.178, 17.381 }, + { 108.178, 16.405 }, + { 109.1, 14.562 }, + { 109.952, 13.695 }, + { 110.818, 14.562 }, + { 111.74, 16.405 }, + { 110.818, 17.381 }, + { 112.662, 19.101 }, + { 114.436, 19.101 }, + { 116.277, 17.381 }, + { 115.304, 16.405 }, + { 114.436, 16.405 }, + { 115.304, 13.695 }, + { 117.145, 11.922 }, + { 116.277, 11.055 }, + { 114.436, 11.055 }, + { 113.638, 9.146 }, + { 112.662, 8.225 }, + { 111.74, 7.372 }, + { 112.662, 6.382 }, + { 112.662, 3.93 }, + { 111.74, 2.888 }, + { 113.638, 2.888 }, + { 116.277, 2.888 }, + { 118.12, 2.089 }, + { 121.629, 0.125 }, + { 125.258, 0.125 }, + { 126.3, 0.125 }, + { 126.3, 1.167 }, + { 125.258, 2.089 }, + { 126.3, 2.888 }, + { 127.153, 4.785 }, + { 127.951, 4.785 }, + { 128.941, 4.785 }, + { 129.74, 3.93 }, + { 131.638, 3.93 }, + { 132.557, 3.93 }, + { 132.557, 5.65 }, + { 133.479, 6.382 }, + { 134.276, 6.382 }, + { 135.321, 7.372 }, + { 136.188, 9.146 }, + { 136.987, 9.146 }, + { 137.84, 7.372 }, + { 138.829, 7.372 }, + { 139.804, 8.225 }, + { 140.671, 8.225 }, + { 139.804, 10.013 }, + { 141.523, 11.055 }, + { 142.391, 12.842 }, + { 142.391, 15.538 }, + { 143.312, 18.179 }, + { 142.391, 20.022 }, + { 140.671, 21.863 }, + { 139.804, 23.652 }, + { 141.523, 28.065 }, + { 141.523, 31.751 }, + { 140.671, 34.459 }, + { 139.804, 34.459 }, + { 139.804, 36.302 }, + { 139.804, 38.942 }, + { 139.804, 42.573 }, + { 138.829, 43.547 }, + { 136.987, 43.547 }, + { 136.987, 44.414 }, + { 136.987, 45.39 }, + { 138.829, 45.39 }, + { 139.804, 46.934 }, + { 140.671, 48.83 }, + { 141.523, 49.628 }, + { 141.523, 51.538 }, + { 142.391, 53.312 }, + { 142.391, 52.459 }, + { 143.312, 54.233 }, + { 143.312, 56.022 }, + { 144.286, 56.022 }, + { 145.222, 60.573 }, + { 146.143, 61.492 }, + { 147.862, 62.414 }, + { 147.862, 63.335 }, + { 149.704, 64.256 }, + { 150.504, 65.109 }, + { 151.424, 68.618 }, + { 152.399, 69.538 }, + { 153.267, 70.392 }, + { 154.188, 72.356 }, + { 154.188, 74.021 }, + { 155.908, 75.917 }, + { 156.829, 76.784 }, + { 156.829, 79.494 }, + { 159.592, 81.334 }, + { 160.513, 83.178 }, + { 161.366, 86.618 }, + { 163.207, 90.301 }, + { 164.074, 92.997 }, + { 164.996, 92.144 }, + { 165.849, 92.997 }, + { 165.849, 93.862 }, + { 166.837, 93.862 }, + { 167.691, 95.705 }, + { 168.625, 96.626 }, + { 169.411, 98.467 }, + { 169.411, 100.189 }, + { 171.321, 100.189 }, + { 171.321, 101.177 }, + { 171.321, 103.874 }, + { 171.321, 104.792 }, + { 172.309, 106.392 }, + { 172.309, 107.38 }, + { 171.321, 107.38 }, + { 170.399, 108.235 }, + { 169.411, 110.076 }, + { 171.321, 112.786 }, + { 172.309, 115.548 }, + { 172.309, 118.242 }, + { 171.321, 118.242 }, + { 170.399, 119.109 }, + { 171.321, 119.963 }, + { 173.109, 122.861 }, + { 174.029, 125.502 }, + { 175.804, 125.502 }, + { 179.435, 123.647 }, + { 180.408, 122.861 }, + { 181.207, 122.861 }, + { 182.996, 122.861 }, + { 183.917, 121.873 }, + { 184.893, 121.873 }, + { 184.893, 122.861 }, + { 186.679, 123.647 }, + { 187.532, 125.502 }, + { 186.679, 127.154 }, + { 185.691, 128.942 }, + { 185.691, 129.864 }, + { 185.691, 131.759 }, + { 184.893, 132.626 }, + { 183.917, 131.759 }, + { 182.996, 130.906 }, + { 180.408, 131.759 }, + { 178.513, 132.626 }, + { 178.513, 135.322 }, + { 181.207, 138.952 }, + { 182.996, 138.084 }, + { 185.691, 137.163 }, + { 188.399, 136.244 }, + { 190.309, 133.547 }, + { 192.085, 129.864 }, + { 192.085, 128.942 }, + { 193.004, 128.076 }, + { 193.004, 129.864 }, + { 193.004, 132.626 }, + { 194.725, 133.547 }, + { 195.646, 134.469 }, + { 194.725, 137.163 }, + { 194.725, 140.726 }, + { 196.567, 142.635 }, + { 196.567, 143.488 }, + { 197.488, 144.41 }, + { 198.477, 145.331 }, + { 198.477, 146.075 }, + { 198.477, 147.85 }, + { 200.251, 150.68 }, + { 202.039, 152.4 }, + { 203.691, 152.4 }, + { 204.612, 151.602 }, + { 206.576, 149.707 }, + { 207.443, 149.707 }, + { 208.241, 149.707 }, + { 209.163, 151.602 }, + { 209.163, 152.4 }, + { 211.926, 153.39 }, + { 212.847, 153.39 }, + { 214.567, 153.39 }, + { 217.208, 153.39 }, + { 219.118, 152.4 }, + { 220.039, 151.602 }, + { 220.893, 151.602 }, + { 222.733, 153.39 }, + { 223.533, 155.163 }, + { 223.533, 157.005 }, + { 222.733, 157.927 }, + { 220.039, 160.568 }, + { 217.208, 161.49 }, + { 215.555, 162.478 }, + { 215.555, 164.252 }, + { 215.555, 165.119 }, + { 214.567, 165.119 }, + { 213.715, 165.119 }, + { 210.085, 165.917 }, + { 208.241, 165.917 }, + { 207.443, 164.252 }, + { 206.576, 163.331 }, + { 204.612, 164.252 }, + { 203.691, 165.119 }, + { 202.959, 165.917 }, + { 203.691, 167.692 }, + { 202.039, 167.692 }, + { 202.039, 169.533 }, + { 200.251, 169.533 }, + { 198.477, 168.559 }, + { 197.488, 169.533 }, + { 196.567, 169.533 }, + { 197.488, 171.39 }, + { 195.646, 171.39 }, + { 193.926, 171.39 }, + { 194.725, 172.31 }, + { 194.725, 173.165 }, + { 193.926, 173.165 }, + { 193.926, 174.084 }, + { 193.926, 175.005 }, + { 193.004, 176.794 }, + { 190.309, 175.873 }, + { 185.691, 175.005 }, + { 184.893, 175.005 }, + { 184.893, 175.873 }, + { 185.691, 176.794 }, + { 185.691, 178.635 }, + { 184.893, 177.77 }, + { 183.917, 177.77 }, + { 182.13, 177.77 }, + { 181.207, 176.794 }, + { 178.513, 176.794 }, + { 176.725, 175.873 }, + { 175.804, 175.005 }, + { 174.029, 175.005 }, + { 173.109, 175.005 }, + { 172.309, 176.794 }, + { 172.309, 177.77 }, + { 170.399, 175.873 }, + { 169.411, 175.873 }, + { 167.691, 176.794 }, + { 166.837, 178.635 }, + { 165.849, 180.357 }, + { 164.074, 181.399 }, + { 163.207, 180.357 }, + { 162.354, 179.49 }, + { 161.366, 179.49 }, + { 161.366, 180.357 }, + { 161.366, 181.399 }, + { 160.513, 183.119 }, + { 158.792, 184.96 }, + { 157.804, 186.613 }, + { 156.829, 187.48 }, + { 155.041, 187.48 }, + { 155.041, 191.218 }, + { 155.041, 192.085 }, + { 155.041, 193.005 }, + { 153.267, 193.005 }, + { 151.424, 193.86 }, + { 153.267, 194.793 }, + { 154.188, 197.49 }, + { 155.041, 199.276 }, + { 155.041, 200.198 }, + { 153.267, 202.095 }, + { 152.399, 201.119 }, + { 150.504, 200.198 }, + { 149.704, 198.478 }, + { 147.862, 197.49 }, + { 146.143, 200.198 }, + { 146.996, 200.198 }, + { 146.996, 202.961 }, + { 146.143, 202.961 }, + { 145.222, 204.857 }, + { 146.143, 206.402 }, + { 146.996, 207.375 }, + { 146.996, 210.017 }, + { 146.143, 211.005 }, + { 146.996, 211.981 }, + { 149.704, 212.727 }, + { 147.862, 215.489 }, + { 147.862, 217.331 }, + { 147.862, 219.972 }, + { 148.784, 219.119 }, + { 150.504, 219.119 }, + { 152.399, 219.972 }, + { 152.399, 221.016 }, + { 152.399, 222.802 }, + { 153.267, 223.656 }, + { 155.041, 224.577 }, + { 155.908, 223.656 }, + { 155.908, 222.802 }, + { 157.804, 222.802 }, + { 158.792, 221.814 }, + { 160.513, 223.656 }, + { 164.074, 226.243 }, + { 166.837, 228.085 }, + { 167.691, 229.006 }, + { 166.837, 229.006 }, + { 165.849, 229.86 }, + { 164.996, 231.769 }, + { 166.837, 232.622 }, + { 167.691, 232.622 }, + { 169.411, 232.622 }, + { 170.399, 235.332 }, + { 169.411, 237.173 }, + { 168.625, 236.251 }, + { 167.691, 238.094 }, + { 166.837, 238.893 }, + { 165.849, 239.814 }, + { 164.074, 241.657 }, + { 163.207, 240.802 }, + { 162.354, 240.802 }, + { 162.354, 242.577 }, + { 161.366, 244.486 }, + { 161.366, 247.006 }, + { 162.354, 247.859 }, + { 161.366, 248.847 }, + { 161.366, 250.622 }, + { 160.513, 251.543 }, + { 160.513, 252.41 }, + { 159.592, 256.026 }, + { 161.366, 256.947 }, + { 162.354, 257.869 }, + { 163.207, 256.947 }, + { 163.207, 256.026 }, + { 165.849, 257.869 }, + { 167.691, 258.79 }, + { 167.691, 259.588 }, + { 168.625, 259.588 }, + { 169.411, 261.498 }, + { 169.411, 263.287 }, + { 170.399, 264.26 }, + { 171.321, 265.061 }, + { 171.321, 268.622 }, + { 173.109, 270.464 }, + { 174.95, 271.386 }, + { 177.525, 273.172 }, + { 178.513, 274.027 }, + { 180.408, 274.947 }, + { 182.13, 275.868 }, + { 182.996, 275.868 }, + { 182.13, 277.711 }, + { 182.13, 279.498 }, + { 181.207, 279.498 }, + { 179.435, 279.498 }, + { 180.408, 280.351 }, + { 179.435, 282.262 }, + { 177.525, 283.115 }, + { 176.725, 283.115 }, + { 174.95, 283.115 }, + { 173.109, 282.262 }, + { 171.321, 280.351 }, + { 170.399, 280.351 }, + { 167.691, 280.351 }, + { 164.996, 279.498 }, + { 164.074, 279.498 }, + { 162.354, 280.351 }, + { 161.366, 279.498 }, + { 161.366, 278.578 }, + { 161.366, 277.711 }, + { 159.592, 276.735 }, + { 157.804, 276.735 }, + { 157.804, 277.711 }, + { 155.908, 278.578 }, + { 155.908, 276.735 }, + { 155.041, 276.735 }, + { 154.188, 276.735 }, + { 154.188, 277.711 }, + { 153.267, 278.578 }, + { 152.399, 278.578 }, + { 150.504, 277.711 }, + { 148.784, 278.578 }, + { 147.862, 279.498 }, + { 146.143, 279.498 }, + { 144.286, 279.498 }, + { 145.222, 278.578 }, + { 144.286, 277.711 }, + { 143.312, 277.711 }, + { 141.523, 277.711 }, + { 138.829, 277.711 }, + { 137.84, 276.735 }, + { 136.987, 276.735 }, + { 134.276, 277.711 }, + { 132.557, 277.711 }, + { 130.784, 277.711 }, + { 129.74, 277.711 }, + { 128.941, 276.735 }, + { 125.258, 276.735 }, + { 124.391, 276.735 }, + { 122.603, 275.868 }, + { 120.762, 274.947 }, + { 119.908, 276.735 }, + { 118.987, 277.711 }, + { 117.145, 277.711 }, + { 116.277, 277.711 }, + { 115.304, 279.498 }, + { 112.662, 275.868 }, + { 110.818, 275.868 }, + { 109.952, 274.947 }, + { 109.1, 274.027 }, + { 107.312, 274.027 }, + { 105.47, 273.172 }, + { 105.47, 272.253 }, + { 103.627, 272.253 }, + { 102.707, 271.386 }, + { 101.785, 272.253 }, + { 100.133, 272.253 }, + { 100.133, 271.386 }, + { 99.076, 270.464 }, + { 97.304, 270.464 }, + { 96.503, 270.464 }, + { 94.594, 269.543 }, + { 92.819, 268.622 }, + { 92.819, 267.702 }, + { 93.795, 265.061 }, + { 95.582, 265.061 }, + { 95.582, 263.287 }, + { 94.594, 262.419 }, + { 95.582, 261.498 }, + { 95.582, 259.588 }, + { 96.503, 258.79 }, + { 97.304, 259.588 }, + { 98.277, 260.577 }, + { 99.076, 259.588 }, + { 98.277, 258.79 }, + { 98.277, 256.947 }, + { 99.076, 257.869 }, + { 100.133, 256.947 }, + { 100.987, 256.947 }, + { 98.277, 256.026 }, + { 98.277, 255.172 }, + { 97.304, 254.253 }, + { 94.594, 254.253 }, + { 93.795, 253.332 }, + { 93.795, 252.41 }, + { 94.594, 252.41 }, + { 95.582, 251.543 }, + { 96.503, 251.543 }, + { 98.277, 252.41 }, + { 100.133, 251.543 }, + { 99.076, 250.622 }, + { 98.277, 249.769 }, + { 99.076, 248.847 }, + { 100.987, 247.859 }, + { 102.707, 247.006 }, + { 102.707, 246.017 }, + { 102.707, 244.486 }, + { 100.987, 244.486 }, + { 100.133, 245.287 }, + { 98.277, 247.006 }, + { 97.304, 247.006 }, + { 97.304, 245.287 }, + { 96.503, 246.017 }, + { 95.582, 246.017 }, + { 94.594, 247.006 }, + { 94.594, 242.577 }, + { 97.304, 241.657 }, + { 98.277, 238.893 }, + { 99.076, 238.094 }, + { 101.785, 238.094 }, + { 103.627, 238.094 }, + { 104.616, 235.332 }, + { 104.616, 232.622 }, + { 102.707, 229.86 }, + { 101.785, 229.86 }, + { 101.785, 229.006 }, + { 102.707, 228.085 }, + { 103.627, 227.095 }, + { 103.627, 226.243 }, + { 101.785, 226.243 }, + { 100.987, 225.565 }, + { 101.785, 224.577 }, + { 103.627, 223.656 }, + { 104.616, 222.802 }, + { 104.616, 219.972 }, + { 103.627, 219.972 }, + { 102.707, 221.016 }, + { 100.987, 221.016 }, + { 99.076, 219.972 }, + { 97.304, 219.972 }, + { 97.304, 221.016 }, + { 96.503, 219.972 }, + { 96.503, 219.119 }, + { 95.582, 219.119 }, + { 93.795, 219.119 }, + { 93.795, 219.972 }, + { 91.952, 219.972 }, + { 91.952, 219.119 }, + { 90.111, 219.972 }, + { 89.189, 219.119 }, + { 88.337, 218.197 }, + { 88.337, 219.119 }, + { 86.549, 219.972 }, + { 83.731, 218.197 }, + { 82.987, 217.331 }, + { 82.987, 216.477 }, + { 81.145, 216.477 }, + { 79.302, 218.197 }, + { 78.504, 219.119 }, + { 77.461, 219.119 }, + { 76.594, 218.197 }, + { 75.618, 219.119 }, + { 74.819, 218.197 }, + { 73.898, 218.197 }, + { 72.109, 218.197 }, + { 71.066, 218.197 }, + { 71.066, 217.331 }, + { 70.269, 214.623 }, + { 70.269, 213.769 }, + { 68.549, 213.769 }, + { 67.506, 211.981 }, + { 67.506, 211.005 }, + { 66.706, 211.005 }, + { 65.786, 211.981 }, + { 63.021, 211.981 }, + { 61.181, 211.981 }, + { 61.181, 211.005 }, + { 61.181, 209.164 }, + { 61.181, 207.375 }, + { 60.449, 206.402 }, + { 59.461, 204.857 }, + { 58.471, 203.815 }, + { 57.618, 203.815 }, + { 55.898, 204.857 }, + { 54.057, 203.815 }, + { 53.189, 203.815 }, + { 52.215, 204.857 }, + { 51.347, 204.857 }, + { 49.506, 205.601 }, + { 48.585, 204.857 }, + { 46.865, 205.601 }, + { 46.865, 206.402 }, + { 44.968, 205.601 }, + { 44.103, 204.857 }, + { 44.103, 203.815 }, + { 43.247, 202.095 }, + { 42.326, 200.198 }, + { 42.326, 199.276 }, + { 42.326, 197.49 }, + { 42.326, 196.636 }, + { 43.247, 196.636 }, + { 44.968, 197.49 }, + { 45.943, 196.636 }, + { 47.663, 195.715 }, + { 48.585, 194.793 }, + { 49.506, 193.86 }, + { 50.426, 193.005 }, + { 49.506, 191.218 }, + { 47.663, 191.218 }, + { 47.663, 189.254 }, + { 45.943, 189.254 }, + { 44.968, 189.254 }, + { 43.247, 189.254 }, + { 43.247, 188.455 }, + { 43.247, 186.613 }, + { 41.406, 185.692 }, + { 40.539, 185.692 }, + { 37.844, 184.96 }, + { 37.844, 184.041 }, + { 37.844, 183.119 }, + { 35.067, 183.119 }, + { 36.922, 182.198 }, + { 35.935, 179.49 }, + { 34.215, 176.794 }, + { 34.215, 175.873 }, + { 35.067, 175.005 }, + { 35.067, 174.084 }, + { 33.416, 174.084 }, + { 32.371, 172.31 }, + { 30.585, 171.39 }, + { 29.663, 171.39 }, + { 29.663, 172.31 }, + { 27.821, 173.165 }, + { 27.022, 173.165 }, + { 27.022, 172.31 }, + { 26.101, 171.39 }, + { 24.381, 171.39 }, + { 22.485, 171.39 }, + { 20.697, 171.39 }, + { 20.697, 170.455 }, + { 19.775, 170.455 }, + { 18.802, 170.455 }, + { 17.935, 168.559 }, + { 17.935, 166.771 }, + { 16.959, 165.119 }, + { 16.959, 164.252 }, + { 16.215, 164.252 }, + { 15.293, 164.252 }, + { 14.372, 162.478 }, + { 16.215, 162.478 }, + { 16.215, 160.568 }, + { 16.215, 158.794 }, + { 15.293, 158.794 }, + { 14.372, 159.592 }, + { 14.372, 158.794 }, + { 13.45, 158.794 }, + { 13.45, 157.927 } +}; + + +const double floral[][2] = { + { 329.698, 2.378 }, + { 328.515, 2.708 }, + { 325.903, 3.469 }, + { 323.306, 4.275 }, + { 320.732, 5.145 }, + { 318.186, 6.094 }, + { 315.675, 7.142 }, + { 313.205, 8.304 }, + { 309.74, 10.195 }, + { 306.468, 12.301 }, + { 303.387, 14.615 }, + { 300.492, 17.132 }, + { 297.777, 19.847 }, + { 295.238, 22.752 }, + { 292.873, 25.844 }, + { 290.675, 29.116 }, + { 289.773, 30.576 }, + { 288.892, 32.065 }, + { 288.046, 33.586 }, + { 287.254, 35.137 }, + { 286.531, 36.718 }, + { 285.892, 38.33 }, + { 285.353, 39.972 }, + { 284.929, 41.644 }, + { 284.623, 43.526 }, + { 284.5, 45.403 }, + { 284.544, 47.273 }, + { 284.738, 49.133 }, + { 285.064, 50.98 }, + { 285.506, 52.812 }, + { 286.048, 54.627 }, + { 286.672, 56.42 }, + { 286.929, 57.12 }, + { 287.19, 57.821 }, + { 287.455, 58.521 }, + { 287.727, 59.221 }, + { 288.008, 59.916 }, + { 288.3, 60.607 }, + { 288.607, 61.292 }, + { 288.929, 61.968 }, + { 289.039, 62.191 }, + { 289.151, 62.414 }, + { 289.265, 62.635 }, + { 289.382, 62.855 }, + { 289.501, 63.073 }, + { 289.623, 63.29 }, + { 289.747, 63.505 }, + { 289.873, 63.717 }, + { 290.257, 64.351 }, + { 290.651, 64.98 }, + { 291.048, 65.608 }, + { 291.443, 66.238 }, + { 291.832, 66.872 }, + { 292.208, 67.512 }, + { 292.568, 68.16 }, + { 292.907, 68.82 }, + { 293.506, 70.265 }, + { 293.94, 71.783 }, + { 294.203, 73.35 }, + { 294.292, 74.942 }, + { 294.206, 76.533 }, + { 293.939, 78.1 }, + { 293.49, 79.618 }, + { 292.853, 81.063 }, + { 292.469, 81.751 }, + { 292.052, 82.401 }, + { 291.603, 83.016 }, + { 291.125, 83.595 }, + { 290.617, 84.14 }, + { 290.083, 84.651 }, + { 289.525, 85.13 }, + { 288.942, 85.576 }, + { 287.432, 86.528 }, + { 285.814, 87.307 }, + { 284.11, 87.924 }, + { 282.339, 88.392 }, + { 280.526, 88.724 }, + { 278.691, 88.93 }, + { 276.857, 89.023 }, + { 275.045, 89.015 }, + { 274.86, 88.972 }, + { 274.722, 88.868 }, + { 274.631, 88.723 }, + { 274.589, 88.552 }, + { 274.596, 88.375 }, + { 274.653, 88.206 }, + { 274.76, 88.065 }, + { 274.917, 87.969 }, + { 276.335, 87.385 }, + { 277.696, 86.707 }, + { 278.978, 85.921 }, + { 280.158, 85.018 }, + { 281.212, 83.988 }, + { 282.121, 82.819 }, + { 282.859, 81.501 }, + { 283.405, 80.023 }, + { 283.552, 79.447 }, + { 283.68, 78.835 }, + { 283.775, 78.199 }, + { 283.827, 77.553 }, + { 283.824, 76.91 }, + { 283.755, 76.282 }, + { 283.611, 75.682 }, + { 283.378, 75.124 }, + { 282.937, 74.519 }, + { 282.391, 74.139 }, + { 281.768, 73.951 }, + { 281.093, 73.924 }, + { 280.393, 74.026 }, + { 279.695, 74.224 }, + { 279.023, 74.486 }, + { 278.405, 74.781 }, + { 276.606, 75.912 }, + { 275.05, 77.297 }, + { 273.714, 78.892 }, + { 272.574, 80.653 }, + { 271.603, 82.537 }, + { 270.779, 84.5 }, + { 270.076, 86.499 }, + { 269.468, 88.489 }, + { 269.168, 89.657 }, + { 268.937, 90.822 }, + { 268.773, 91.986 }, + { 268.673, 93.15 }, + { 268.637, 94.316 }, + { 268.662, 95.485 }, + { 268.745, 96.658 }, + { 268.886, 97.836 }, + { 268.911, 98.007 }, + { 268.937, 98.178 }, + { 268.994, 98.52 }, + { 269.023, 98.689 }, + { 269.052, 98.86 }, + { 269.115, 99.199 }, + { 269.324, 100.356 }, + { 269.5, 101.526 }, + { 269.633, 102.704 }, + { 269.717, 103.886 }, + { 269.741, 105.069 }, + { 269.697, 106.251 }, + { 269.575, 107.427 }, + { 269.367, 108.594 }, + { 268.991, 109.982 }, + { 268.506, 111.302 }, + { 267.933, 112.566 }, + { 267.287, 113.791 }, + { 266.585, 114.99 }, + { 265.845, 116.178 }, + { 265.083, 117.369 }, + { 264.318, 118.579 }, + { 263.878, 119.271 }, + { 263.43, 119.967 }, + { 262.98, 120.665 }, + { 262.532, 121.367 }, + { 262.092, 122.073 }, + { 261.666, 122.783 }, + { 261.258, 123.5 }, + { 260.876, 124.223 }, + { 260.542, 124.896 }, + { 260.212, 125.571 }, + { 259.887, 126.248 }, + { 259.562, 126.924 }, + { 259.236, 127.6 }, + { 258.907, 128.273 }, + { 258.57, 128.943 }, + { 258.225, 129.61 }, + { 258.078, 129.796 }, + { 257.898, 129.899 }, + { 257.707, 129.925 }, + { 257.52, 129.883 }, + { 257.36, 129.781 }, + { 257.244, 129.626 }, + { 257.191, 129.427 }, + { 257.222, 129.191 }, + { 257.43, 128.462 }, + { 257.608, 127.702 }, + { 257.744, 126.921 }, + { 257.826, 126.129 }, + { 257.845, 125.335 }, + { 257.792, 124.55 }, + { 257.655, 123.782 }, + { 257.423, 123.042 }, + { 257.165, 122.471 }, + { 256.858, 121.943 }, + { 256.511, 121.448 }, + { 256.134, 120.979 }, + { 255.735, 120.525 }, + { 255.321, 120.078 }, + { 254.902, 119.629 }, + { 254.486, 119.168 }, + { 254.01, 118.569 }, + { 253.618, 117.954 }, + { 253.304, 117.325 }, + { 253.064, 116.684 }, + { 252.893, 116.031 }, + { 252.786, 115.369 }, + { 252.737, 114.697 }, + { 252.742, 114.018 }, + { 252.755, 113.79 }, + { 252.775, 113.562 }, + { 252.798, 113.333 }, + { 252.828, 113.103 }, + { 252.862, 112.873 }, + { 252.9, 112.643 }, + { 252.943, 112.413 }, + { 252.989, 112.183 }, + { 252.13, 113.283 }, + { 251.35, 114.404 }, + { 250.642, 115.551 }, + { 250, 116.726 }, + { 249.418, 117.934 }, + { 248.89, 119.179 }, + { 248.408, 120.463 }, + { 247.966, 121.792 }, + { 247.503, 123.186 }, + { 246.996, 124.561 }, + { 246.441, 125.916 }, + { 245.84, 127.249 }, + { 245.191, 128.561 }, + { 244.493, 129.849 }, + { 243.745, 131.113 }, + { 242.947, 132.352 }, + { 241.396, 134.491 }, + { 239.706, 136.505 }, + { 237.878, 138.379 }, + { 235.918, 140.102 }, + { 233.83, 141.66 }, + { 231.615, 143.043 }, + { 229.278, 144.236 }, + { 226.822, 145.229 }, + { 226.352, 145.392 }, + { 225.881, 145.547 }, + { 225.41, 145.695 }, + { 224.937, 145.835 }, + { 224.463, 145.969 }, + { 223.99, 146.097 }, + { 223.514, 146.218 }, + { 223.039, 146.333 }, + { 222.519, 147.802 }, + { 222.001, 149.296 }, + { 221.488, 150.818 }, + { 220.978, 152.366 }, + { 220.474, 153.94 }, + { 219.975, 155.542 }, + { 219.484, 157.17 }, + { 219, 158.824 }, + { 217.361, 165.043 }, + { 215.882, 171.627 }, + { 214.645, 178.545 }, + { 213.728, 185.763 }, + { 213.213, 193.25 }, + { 213.181, 200.975 }, + { 213.711, 208.904 }, + { 214.884, 217.007 }, + { 215.755, 221.062 }, + { 216.835, 225.125 }, + { 218.136, 229.171 }, + { 219.668, 233.178 }, + { 221.443, 237.123 }, + { 223.471, 240.984 }, + { 225.763, 244.74 }, + { 228.332, 248.367 }, + { 231.179, 251.8 }, + { 234.314, 255.046 }, + { 237.718, 258.067 }, + { 241.375, 260.824 }, + { 245.267, 263.278 }, + { 249.375, 265.39 }, + { 253.683, 267.119 }, + { 258.171, 268.429 }, + { 260.455, 268.901 }, + { 262.753, 269.241 }, + { 265.058, 269.446 }, + { 267.361, 269.514 }, + { 269.653, 269.441 }, + { 271.925, 269.229 }, + { 274.17, 268.871 }, + { 276.379, 268.369 }, + { 278.544, 267.742 }, + { 280.658, 266.975 }, + { 282.711, 266.075 }, + { 284.699, 265.053 }, + { 286.614, 263.916 }, + { 288.45, 262.675 }, + { 290.202, 261.338 }, + { 291.861, 259.913 }, + { 294.833, 256.73 }, + { 297.286, 253.209 }, + { 299.212, 249.423 }, + { 300.612, 245.449 }, + { 301.479, 241.364 }, + { 301.811, 237.242 }, + { 301.605, 233.159 }, + { 300.856, 229.191 }, + { 300.303, 227.269 }, + { 299.633, 225.395 }, + { 298.853, 223.575 }, + { 297.966, 221.819 }, + { 296.98, 220.135 }, + { 295.898, 218.53 }, + { 294.726, 217.013 }, + { 293.47, 215.59 }, + { 292.121, 214.281 }, + { 290.686, 213.089 }, + { 289.178, 212.017 }, + { 287.606, 211.064 }, + { 285.98, 210.235 }, + { 284.31, 209.532 }, + { 282.608, 208.955 }, + { 280.883, 208.508 }, + { 277.392, 207.966 }, + { 273.935, 207.928 }, + { 270.567, 208.355 }, + { 267.339, 209.209 }, + { 264.305, 210.449 }, + { 261.517, 212.037 }, + { 259.03, 213.934 }, + { 256.894, 216.1 }, + { 255.142, 218.525 }, + { 253.818, 221.098 }, + { 252.9, 223.763 }, + { 252.366, 226.467 }, + { 252.195, 229.155 }, + { 252.366, 231.773 }, + { 252.855, 234.269 }, + { 253.643, 236.585 }, + { 254.651, 238.76 }, + { 255.864, 240.698 }, + { 257.247, 242.398 }, + { 258.762, 243.857 }, + { 260.375, 245.074 }, + { 262.048, 246.049 }, + { 263.749, 246.778 }, + { 265.437, 247.262 }, + { 267.083, 247.573 }, + { 268.644, 247.719 }, + { 270.115, 247.722 }, + { 271.487, 247.607 }, + { 272.752, 247.399 }, + { 273.904, 247.121 }, + { 274.933, 246.797 }, + { 275.834, 246.451 }, + { 276.626, 246.103 }, + { 277.306, 245.774 }, + { 277.877, 245.477 }, + { 278.343, 245.22 }, + { 278.707, 245.012 }, + { 278.971, 244.864 }, + { 279.139, 244.786 }, + { 279.214, 244.788 }, + { 279.187, 244.85 }, + { 279.065, 244.991 }, + { 278.843, 245.204 }, + { 278.519, 245.479 }, + { 278.086, 245.806 }, + { 277.541, 246.176 }, + { 276.877, 246.58 }, + { 276.092, 247.01 }, + { 275.185, 247.438 }, + { 274.133, 247.847 }, + { 272.944, 248.211 }, + { 271.625, 248.502 }, + { 270.182, 248.695 }, + { 268.624, 248.764 }, + { 266.955, 248.682 }, + { 265.184, 248.421 }, + { 264.277, 248.213 }, + { 263.355, 247.947 }, + { 262.425, 247.621 }, + { 261.492, 247.231 }, + { 260.56, 246.776 }, + { 259.636, 246.253 }, + { 258.726, 245.659 }, + { 257.833, 244.992 }, + { 256.962, 244.254 }, + { 256.13, 243.443 }, + { 255.339, 242.562 }, + { 254.59, 241.615 }, + { 253.888, 240.606 }, + { 253.232, 239.54 }, + { 252.626, 238.418 }, + { 252.074, 237.245 }, + { 251.16, 234.749 }, + { 250.565, 232.043 }, + { 250.317, 229.188 }, + { 250.443, 226.241 }, + { 250.97, 223.263 }, + { 251.926, 220.311 }, + { 253.338, 217.445 }, + { 255.234, 214.726 }, + { 257.557, 212.297 }, + { 260.258, 210.171 }, + { 263.284, 208.386 }, + { 266.582, 206.984 }, + { 270.097, 206.008 }, + { 273.778, 205.498 }, + { 277.57, 205.495 }, + { 281.419, 206.04 }, + { 283.324, 206.516 }, + { 285.207, 207.134 }, + { 287.056, 207.893 }, + { 288.86, 208.789 }, + { 290.607, 209.823 }, + { 292.286, 210.992 }, + { 293.884, 212.294 }, + { 295.391, 213.728 }, + { 296.789, 215.287 }, + { 298.087, 216.94 }, + { 299.282, 218.681 }, + { 300.369, 220.503 }, + { 301.345, 222.401 }, + { 302.206, 224.369 }, + { 302.949, 226.402 }, + { 303.568, 228.494 }, + { 304.414, 232.812 }, + { 304.667, 237.261 }, + { 304.332, 241.76 }, + { 303.409, 246.225 }, + { 301.901, 250.571 }, + { 299.812, 254.718 }, + { 297.143, 258.58 }, + { 293.897, 262.075 }, + { 292.095, 263.638 }, + { 290.2, 265.098 }, + { 288.216, 266.447 }, + { 286.15, 267.68 }, + { 284.004, 268.788 }, + { 281.785, 269.765 }, + { 279.496, 270.602 }, + { 277.141, 271.293 }, + { 274.743, 271.843 }, + { 272.308, 272.233 }, + { 269.846, 272.468 }, + { 267.367, 272.55 }, + { 264.88, 272.479 }, + { 262.397, 272.263 }, + { 259.927, 271.9 }, + { 257.48, 271.396 }, + { 252.685, 269.988 }, + { 248.106, 268.146 }, + { 243.757, 265.907 }, + { 239.652, 263.312 }, + { 235.806, 260.401 }, + { 232.234, 257.215 }, + { 228.948, 253.793 }, + { 225.963, 250.175 }, + { 223.286, 246.366 }, + { 220.905, 242.434 }, + { 218.808, 238.399 }, + { 216.982, 234.287 }, + { 215.415, 230.12 }, + { 214.092, 225.921 }, + { 213, 221.714 }, + { 212.128, 217.521 }, + { 210.985, 209.175 }, + { 210.508, 201.036 }, + { 210.615, 193.135 }, + { 211.218, 185.5 }, + { 212.237, 178.161 }, + { 213.585, 171.148 }, + { 215.179, 164.49 }, + { 216.933, 158.218 }, + { 217.402, 156.712 }, + { 217.876, 155.229 }, + { 218.357, 153.768 }, + { 218.842, 152.33 }, + { 219.333, 150.914 }, + { 219.827, 149.521 }, + { 220.324, 148.149 }, + { 220.824, 146.8 }, + { 219.628, 147.008 }, + { 218.427, 147.19 }, + { 217.221, 147.35 }, + { 216.012, 147.49 }, + { 214.799, 147.615 }, + { 213.583, 147.728 }, + { 212.365, 147.831 }, + { 211.144, 147.927 }, + { 210.406, 147.985 }, + { 209.667, 148.048 }, + { 208.929, 148.122 }, + { 208.193, 148.209 }, + { 207.459, 148.314 }, + { 206.729, 148.441 }, + { 206.003, 148.596 }, + { 205.285, 148.78 }, + { 205.123, 148.827 }, + { 204.959, 148.876 }, + { 204.796, 148.927 }, + { 204.634, 148.979 }, + { 204.472, 149.033 }, + { 204.309, 149.089 }, + { 204.148, 149.148 }, + { 203.987, 149.209 }, + { 202.556, 149.841 }, + { 201.19, 150.584 }, + { 199.881, 151.423 }, + { 198.621, 152.338 }, + { 197.4, 153.313 }, + { 196.212, 154.33 }, + { 195.048, 155.372 }, + { 193.9, 156.42 }, + { 193.717, 156.535 }, + { 193.537, 156.556 }, + { 193.369, 156.499 }, + { 193.226, 156.383 }, + { 193.121, 156.223 }, + { 193.064, 156.037 }, + { 193.068, 155.842 }, + { 193.146, 155.653 }, + { 194.473, 153.609 }, + { 195.793, 151.561 }, + { 197.111, 149.51 }, + { 198.431, 147.462 }, + { 199.759, 145.419 }, + { 201.099, 143.385 }, + { 202.458, 141.363 }, + { 203.841, 139.358 }, + { 204.419, 138.538 }, + { 205.001, 137.722 }, + { 205.591, 136.912 }, + { 206.192, 136.114 }, + { 206.807, 135.33 }, + { 207.442, 134.564 }, + { 208.099, 133.821 }, + { 208.783, 133.103 }, + { 209.13, 132.758 }, + { 209.486, 132.421 }, + { 209.85, 132.092 }, + { 210.223, 131.772 }, + { 210.605, 131.46 }, + { 210.997, 131.159 }, + { 211.399, 130.867 }, + { 211.81, 130.586 }, + { 212.772, 129.955 }, + { 213.742, 129.336 }, + { 214.717, 128.727 }, + { 215.696, 128.125 }, + { 216.677, 127.527 }, + { 217.662, 126.931 }, + { 218.646, 126.335 }, + { 219.629, 125.736 }, + { 220.641, 125.093 }, + { 221.625, 124.423 }, + { 222.582, 123.728 }, + { 223.516, 123.008 }, + { 224.433, 122.265 }, + { 225.335, 121.498 }, + { 226.227, 120.709 }, + { 227.111, 119.898 }, + { 227.19, 119.826 }, + { 227.269, 119.752 }, + { 227.348, 119.679 }, + { 227.427, 119.604 }, + { 227.506, 119.53 }, + { 227.584, 119.455 }, + { 227.663, 119.379 }, + { 227.74, 119.303 }, + { 226.701, 119.84 }, + { 225.656, 120.366 }, + { 224.604, 120.879 }, + { 223.545, 121.38 }, + { 222.48, 121.868 }, + { 221.409, 122.343 }, + { 220.331, 122.804 }, + { 219.246, 123.252 }, + { 216.382, 124.356 }, + { 213.486, 125.362 }, + { 210.56, 126.275 }, + { 207.608, 127.101 }, + { 204.633, 127.844 }, + { 201.639, 128.509 }, + { 198.628, 129.101 }, + { 195.606, 129.626 }, + { 191.227, 130.266 }, + { 186.818, 130.841 }, + { 182.421, 131.468 }, + { 178.078, 132.26 }, + { 173.831, 133.333 }, + { 169.721, 134.802 }, + { 165.792, 136.781 }, + { 162.083, 139.385 }, + { 160.922, 140.443 }, + { 159.891, 141.59 }, + { 158.995, 142.82 }, + { 158.238, 144.128 }, + { 157.627, 145.509 }, + { 157.167, 146.956 }, + { 156.861, 148.465 }, + { 156.716, 150.03 }, + { 156.778, 150.9 }, + { 157.015, 151.746 }, + { 157.397, 152.558 }, + { 157.896, 153.329 }, + { 158.479, 154.051 }, + { 159.12, 154.715 }, + { 159.786, 155.312 }, + { 160.448, 155.836 }, + { 160.78, 156.064 }, + { 161.122, 156.271 }, + { 161.474, 156.454 }, + { 161.836, 156.612 }, + { 162.208, 156.747 }, + { 162.589, 156.856 }, + { 162.979, 156.939 }, + { 163.379, 156.995 }, + { 163.468, 157.004 }, + { 163.553, 157.008 }, + { 163.635, 157.007 }, + { 163.712, 157.001 }, + { 163.786, 156.991 }, + { 163.855, 156.977 }, + { 163.921, 156.958 }, + { 163.982, 156.936 }, + { 164.195, 156.817 }, + { 164.363, 156.654 }, + { 164.493, 156.452 }, + { 164.591, 156.221 }, + { 164.663, 155.968 }, + { 164.714, 155.701 }, + { 164.751, 155.429 }, + { 164.779, 155.16 }, + { 164.918, 153.984 }, + { 165.108, 152.865 }, + { 165.38, 151.816 }, + { 165.768, 150.851 }, + { 166.303, 149.982 }, + { 167.018, 149.223 }, + { 167.945, 148.587 }, + { 169.117, 148.088 }, + { 170.259, 147.822 }, + { 171.369, 147.767 }, + { 172.432, 147.912 }, + { 173.432, 148.248 }, + { 174.356, 148.764 }, + { 175.188, 149.451 }, + { 175.913, 150.298 }, + { 176.516, 151.296 }, + { 176.896, 152.36 }, + { 177.006, 153.453 }, + { 176.883, 154.551 }, + { 176.562, 155.632 }, + { 176.078, 156.67 }, + { 175.465, 157.642 }, + { 174.758, 158.523 }, + { 173.994, 159.291 }, + { 172.955, 160.094 }, + { 171.796, 160.763 }, + { 170.545, 161.302 }, + { 169.231, 161.714 }, + { 167.88, 162.004 }, + { 166.522, 162.175 }, + { 165.185, 162.232 }, + { 163.895, 162.178 }, + { 162.396, 161.965 }, + { 160.884, 161.588 }, + { 159.388, 161.056 }, + { 157.937, 160.378 }, + { 156.562, 159.563 }, + { 155.291, 158.622 }, + { 154.154, 157.562 }, + { 153.181, 156.394 }, + { 152.458, 155.225 }, + { 151.897, 153.964 }, + { 151.484, 152.634 }, + { 151.205, 151.255 }, + { 151.045, 149.851 }, + { 150.991, 148.443 }, + { 151.03, 147.054 }, + { 151.147, 145.706 }, + { 151.712, 143.05 }, + { 152.732, 140.631 }, + { 154.144, 138.443 }, + { 155.886, 136.479 }, + { 157.896, 134.735 }, + { 160.113, 133.204 }, + { 162.474, 131.88 }, + { 164.917, 130.758 }, + { 165.136, 130.666 }, + { 165.355, 130.576 }, + { 165.575, 130.488 }, + { 165.794, 130.401 }, + { 166.013, 130.317 }, + { 166.233, 130.234 }, + { 166.453, 130.154 }, + { 166.672, 130.077 }, + { 163.441, 129.797 }, + { 160.176, 129.705 }, + { 156.899, 129.805 }, + { 153.631, 130.101 }, + { 150.393, 130.597 }, + { 147.205, 131.297 }, + { 144.088, 132.207 }, + { 141.064, 133.328 }, + { 138.542, 134.484 }, + { 136.116, 135.814 }, + { 133.791, 137.307 }, + { 131.574, 138.954 }, + { 129.47, 140.746 }, + { 127.487, 142.671 }, + { 125.631, 144.721 }, + { 123.907, 146.886 }, + { 122.642, 148.675 }, + { 121.464, 150.537 }, + { 120.384, 152.463 }, + { 119.411, 154.448 }, + { 118.553, 156.484 }, + { 117.82, 158.563 }, + { 117.222, 160.681 }, + { 116.767, 162.827 }, + { 116.517, 164.816 }, + { 116.486, 166.827 }, + { 116.718, 168.781 }, + { 117.259, 170.597 }, + { 118.154, 172.197 }, + { 119.448, 173.5 }, + { 121.185, 174.428 }, + { 123.412, 174.899 }, + { 123.962, 174.902 }, + { 124.498, 174.828 }, + { 125.024, 174.701 }, + { 125.545, 174.545 }, + { 126.065, 174.385 }, + { 126.589, 174.242 }, + { 127.122, 174.144 }, + { 127.667, 174.11 }, + { 128.12, 174.157 }, + { 128.532, 174.287 }, + { 128.904, 174.49 }, + { 129.232, 174.754 }, + { 129.515, 175.069 }, + { 129.751, 175.426 }, + { 129.938, 175.812 }, + { 130.075, 176.219 }, + { 130.14, 177.291 }, + { 129.761, 178.146 }, + { 129.044, 178.812 }, + { 128.092, 179.316 }, + { 127.008, 179.685 }, + { 125.896, 179.944 }, + { 124.861, 180.123 }, + { 124.006, 180.248 }, + { 123.121, 180.335 }, + { 122.242, 180.347 }, + { 121.371, 180.286 }, + { 120.512, 180.158 }, + { 119.665, 179.966 }, + { 118.833, 179.714 }, + { 118.016, 179.406 }, + { 117.218, 179.046 }, + { 117.527, 182.011 }, + { 117.708, 184.986 }, + { 117.757, 187.967 }, + { 117.67, 190.945 }, + { 117.446, 193.917 }, + { 117.08, 196.874 }, + { 116.57, 199.812 }, + { 115.913, 202.724 }, + { 114.688, 206.875 }, + { 113.106, 210.899 }, + { 111.187, 214.775 }, + { 108.95, 218.479 }, + { 106.414, 221.99 }, + { 103.598, 225.284 }, + { 100.522, 228.34 }, + { 97.205, 231.134 }, + { 94.643, 233.051 }, + { 91.979, 234.833 }, + { 89.22, 236.469 }, + { 86.373, 237.946 }, + { 83.444, 239.256 }, + { 80.442, 240.385 }, + { 77.373, 241.324 }, + { 74.244, 242.062 }, + { 71.076, 242.605 }, + { 67.876, 242.927 }, + { 64.66, 243.027 }, + { 61.444, 242.905 }, + { 58.243, 242.562 }, + { 55.073, 241.998 }, + { 51.949, 241.213 }, + { 48.887, 240.206 }, + { 48.476, 240.047 }, + { 48.071, 239.877 }, + { 47.671, 239.699 }, + { 47.273, 239.515 }, + { 46.877, 239.327 }, + { 46.482, 239.137 }, + { 46.086, 238.948 }, + { 45.689, 238.763 }, + { 45.648, 238.744 }, + { 45.607, 238.727 }, + { 45.525, 238.689 }, + { 45.483, 238.671 }, + { 45.359, 238.612 }, + { 44.725, 238.31 }, + { 44.097, 237.998 }, + { 43.474, 237.678 }, + { 42.856, 237.349 }, + { 42.244, 237.01 }, + { 41.637, 236.661 }, + { 41.034, 236.303 }, + { 40.437, 235.936 }, + { 40.354, 235.883 }, + { 40.312, 235.857 }, + { 40.23, 235.805 }, + { 40.189, 235.779 }, + { 40.149, 235.753 }, + { 40.108, 235.727 }, + { 39.517, 235.345 }, + { 38.932, 234.955 }, + { 38.353, 234.557 }, + { 37.78, 234.15 }, + { 37.214, 233.736 }, + { 36.653, 233.313 }, + { 36.099, 232.883 }, + { 35.55, 232.442 }, + { 35.518, 232.417 }, + { 35.393, 232.312 }, + { 35.33, 232.259 }, + { 35.298, 232.233 }, + { 31.981, 229.237 }, + { 28.935, 225.962 }, + { 26.181, 222.434 }, + { 23.742, 218.681 }, + { 21.64, 214.729 }, + { 19.896, 210.605 }, + { 18.531, 206.34 }, + { 17.569, 201.956 }, + { 17.51, 201.547 }, + { 17.455, 201.138 }, + { 17.403, 200.727 }, + { 17.357, 200.315 }, + { 17.315, 199.903 }, + { 17.277, 199.49 }, + { 17.244, 199.076 }, + { 17.215, 198.662 }, + { 15.949, 195.702 }, + { 14.686, 193.013 }, + { 13.434, 190.588 }, + { 12.202, 188.419 }, + { 10.998, 186.499 }, + { 9.829, 184.822 }, + { 8.705, 183.38 }, + { 7.631, 182.163 }, + { 6.625, 181.137 }, + { 5.695, 180.268 }, + { 4.84, 179.531 }, + { 4.059, 178.906 }, + { 3.349, 178.369 }, + { 2.707, 177.896 }, + { 2.133, 177.464 }, + { 1.623, 177.05 }, + { 1.179, 176.661 }, + { 0.799, 176.276 }, + { 0.487, 175.894 }, + { 0.247, 175.513 }, + { 0.083, 175.133 }, + { 0, 174.752 }, + { 0, 174.371 }, + { 0.087, 173.987 }, + { 0.262, 173.618 }, + { 0.539, 173.266 }, + { 0.912, 172.942 }, + { 1.374, 172.658 }, + { 1.919, 172.426 }, + { 2.541, 172.255 }, + { 3.234, 172.158 }, + { 3.992, 172.146 }, + { 4.817, 172.231 }, + { 5.723, 172.455 }, + { 6.688, 172.814 }, + { 7.689, 173.306 }, + { 8.702, 173.925 }, + { 9.703, 174.668 }, + { 10.669, 175.532 }, + { 11.577, 176.514 }, + { 12.43, 177.572 }, + { 13.203, 178.701 }, + { 13.898, 179.887 }, + { 14.517, 181.115 }, + { 15.062, 182.373 }, + { 15.535, 183.646 }, + { 15.938, 184.923 }, + { 16.273, 186.188 }, + { 16.475, 187.093 }, + { 16.651, 187.983 }, + { 16.802, 188.857 }, + { 16.93, 189.712 }, + { 17.036, 190.543 }, + { 17.123, 191.351 }, + { 17.192, 192.129 }, + { 17.245, 192.878 }, + { 17.35, 191.729 }, + { 17.488, 190.582 }, + { 17.66, 189.439 }, + { 17.864, 188.304 }, + { 18.101, 187.174 }, + { 18.371, 186.052 }, + { 18.673, 184.939 }, + { 19.008, 183.837 }, + { 20.249, 180.398 }, + { 21.86, 177.033 }, + { 23.818, 173.788 }, + { 26.099, 170.708 }, + { 28.68, 167.84 }, + { 31.539, 165.229 }, + { 34.65, 162.919 }, + { 37.993, 160.959 }, + { 41.484, 159.333 }, + { 45.06, 158.108 }, + { 48.673, 157.253 }, + { 52.278, 156.735 }, + { 55.827, 156.521 }, + { 59.273, 156.578 }, + { 62.571, 156.874 }, + { 65.674, 157.375 }, + { 65.888, 157.416 }, + { 66.183, 157.491 }, + { 66.522, 157.588 }, + { 66.867, 157.695 }, + { 67.179, 157.802 }, + { 67.422, 157.897 }, + { 67.557, 157.968 }, + { 67.546, 158.003 }, + { 66.431, 158.114 }, + { 64.977, 158.116 }, + { 63.215, 158.059 }, + { 61.174, 157.989 }, + { 58.886, 157.956 }, + { 56.38, 158.008 }, + { 53.687, 158.194 }, + { 50.837, 158.562 }, + { 50.094, 158.676 }, + { 49.346, 158.809 }, + { 48.594, 158.96 }, + { 47.839, 159.131 }, + { 47.082, 159.319 }, + { 46.322, 159.526 }, + { 45.561, 159.751 }, + { 44.8, 159.994 }, + { 44.773, 160.004 }, + { 44.746, 160.015 }, + { 44.691, 160.036 }, + { 44.664, 160.046 }, + { 44.636, 160.056 }, + { 44.608, 160.065 }, + { 44.581, 160.074 }, + { 43.843, 160.33 }, + { 43.106, 160.602 }, + { 42.372, 160.891 }, + { 41.64, 161.196 }, + { 40.911, 161.517 }, + { 40.186, 161.854 }, + { 39.465, 162.207 }, + { 38.75, 162.575 }, + { 38.741, 162.579 }, + { 38.732, 162.583 }, + { 38.723, 162.587 }, + { 38.714, 162.591 }, + { 38.695, 162.601 }, + { 38.686, 162.606 }, + { 38.675, 162.612 }, + { 40.089, 161.996 }, + { 41.52, 161.452 }, + { 42.964, 160.98 }, + { 44.417, 160.583 }, + { 45.874, 160.262 }, + { 47.328, 160.016 }, + { 48.776, 159.848 }, + { 50.213, 159.758 }, + { 53.038, 159.746 }, + { 55.749, 159.975 }, + { 58.332, 160.413 }, + { 60.775, 161.026 }, + { 63.065, 161.783 }, + { 65.188, 162.651 }, + { 67.13, 163.598 }, + { 68.878, 164.592 }, + { 69.011, 164.688 }, + { 68.969, 164.708 }, + { 68.794, 164.67 }, + { 68.528, 164.59 }, + { 68.212, 164.483 }, + { 67.888, 164.368 }, + { 67.596, 164.259 }, + { 67.378, 164.173 }, + { 65.515, 163.454 }, + { 63.62, 162.825 }, + { 61.696, 162.29 }, + { 59.748, 161.854 }, + { 57.781, 161.523 }, + { 55.798, 161.3 }, + { 53.805, 161.191 }, + { 51.804, 161.201 }, + { 49.807, 161.33 }, + { 47.819, 161.583 }, + { 45.846, 161.96 }, + { 43.896, 162.459 }, + { 41.977, 163.079 }, + { 40.095, 163.817 }, + { 38.258, 164.675 }, + { 36.473, 165.649 }, + { 33.069, 167.918 }, + { 29.969, 170.607 }, + { 27.204, 173.666 }, + { 24.802, 177.046 }, + { 22.797, 180.697 }, + { 21.218, 184.57 }, + { 20.095, 188.615 }, + { 19.46, 192.782 }, + { 19.294, 195.503 }, + { 19.33, 198.227 }, + { 19.562, 200.941 }, + { 19.983, 203.638 }, + { 20.587, 206.305 }, + { 21.368, 208.932 }, + { 22.32, 211.508 }, + { 23.435, 214.023 }, + { 24.681, 216.489 }, + { 26.052, 218.888 }, + { 27.546, 221.211 }, + { 29.162, 223.45 }, + { 30.896, 225.596 }, + { 32.748, 227.642 }, + { 34.713, 229.578 }, + { 36.791, 231.396 }, + { 38.968, 233.089 }, + { 41.246, 234.645 }, + { 43.615, 236.059 }, + { 46.067, 237.324 }, + { 48.592, 238.438 }, + { 51.181, 239.392 }, + { 53.826, 240.182 }, + { 56.518, 240.802 }, + { 59.245, 241.262 }, + { 61.996, 241.549 }, + { 64.761, 241.665 }, + { 67.529, 241.612 }, + { 70.292, 241.394 }, + { 73.04, 241.012 }, + { 75.762, 240.469 }, + { 78.449, 239.767 }, + { 80.356, 239.167 }, + { 82.236, 238.491 }, + { 84.09, 237.74 }, + { 85.914, 236.918 }, + { 87.708, 236.027 }, + { 89.471, 235.072 }, + { 91.201, 234.056 }, + { 92.896, 232.979 }, + { 93.171, 232.798 }, + { 93.308, 232.707 }, + { 93.444, 232.616 }, + { 93.58, 232.524 }, + { 93.716, 232.434 }, + { 93.851, 232.342 }, + { 93.987, 232.249 }, + { 94.496, 231.895 }, + { 95.001, 231.537 }, + { 95.504, 231.175 }, + { 96.003, 230.809 }, + { 96.499, 230.437 }, + { 96.99, 230.06 }, + { 97.477, 229.677 }, + { 97.958, 229.288 }, + { 98.953, 228.459 }, + { 99.926, 227.603 }, + { 100.877, 226.722 }, + { 101.806, 225.818 }, + { 102.712, 224.893 }, + { 103.597, 223.945 }, + { 104.458, 222.978 }, + { 105.298, 221.991 }, + { 105.389, 221.885 }, + { 105.573, 221.67 }, + { 105.665, 221.563 }, + { 105.757, 221.456 }, + { 105.848, 221.349 }, + { 105.938, 221.24 }, + { 106.025, 221.132 }, + { 106.854, 220.062 }, + { 107.655, 218.971 }, + { 108.427, 217.859 }, + { 109.17, 216.728 }, + { 109.881, 215.576 }, + { 110.561, 214.404 }, + { 111.206, 213.212 }, + { 111.817, 212.001 }, + { 113.519, 208.115 }, + { 114.895, 204.113 }, + { 115.955, 200.018 }, + { 116.708, 195.848 }, + { 117.167, 191.626 }, + { 117.337, 187.373 }, + { 117.232, 183.11 }, + { 116.859, 178.858 }, + { 116.09, 178.432 }, + { 115.344, 177.962 }, + { 114.622, 177.453 }, + { 113.926, 176.91 }, + { 113.258, 176.337 }, + { 112.619, 175.737 }, + { 112.012, 175.115 }, + { 111.438, 174.476 }, + { 110.013, 172.589 }, + { 108.833, 170.562 }, + { 107.888, 168.422 }, + { 107.171, 166.192 }, + { 106.676, 163.897 }, + { 106.395, 161.562 }, + { 106.319, 159.212 }, + { 106.441, 156.871 }, + { 106.606, 155.469 }, + { 106.842, 154.063 }, + { 107.15, 152.663 }, + { 107.534, 151.278 }, + { 107.996, 149.921 }, + { 108.54, 148.6 }, + { 109.167, 147.325 }, + { 109.88, 146.108 }, + { 110.617, 145.062 }, + { 111.438, 144.084 }, + { 112.329, 143.17 }, + { 113.282, 142.314 }, + { 114.285, 141.512 }, + { 115.326, 140.757 }, + { 116.396, 140.044 }, + { 117.482, 139.369 }, + { 116.667, 139.242 }, + { 115.827, 139.216 }, + { 114.978, 139.284 }, + { 114.135, 139.438 }, + { 113.315, 139.668 }, + { 112.534, 139.967 }, + { 111.805, 140.326 }, + { 111.147, 140.737 }, + { 111.004, 140.811 }, + { 110.843, 140.847 }, + { 110.676, 140.844 }, + { 110.517, 140.805 }, + { 110.379, 140.728 }, + { 110.275, 140.614 }, + { 110.218, 140.463 }, + { 110.221, 140.276 }, + { 110.695, 138.036 }, + { 111.274, 135.819 }, + { 111.961, 133.633 }, + { 112.762, 131.487 }, + { 113.68, 129.393 }, + { 114.717, 127.357 }, + { 115.879, 125.391 }, + { 117.169, 123.504 }, + { 111.74, 123.287 }, + { 106.075, 122.435 }, + { 100.275, 120.958 }, + { 94.438, 118.872 }, + { 88.662, 116.185 }, + { 83.047, 112.911 }, + { 77.691, 109.062 }, + { 72.694, 104.65 }, + { 67.339, 99.117 }, + { 62.401, 93.241 }, + { 57.945, 87.083 }, + { 54.039, 80.704 }, + { 50.747, 74.161 }, + { 48.138, 67.517 }, + { 46.277, 60.83 }, + { 45.23, 54.162 }, + { 45.16, 48 }, + { 45.524, 42.46 }, + { 46.193, 37.58 }, + { 47.042, 33.392 }, + { 47.939, 29.931 }, + { 48.76, 27.231 }, + { 49.375, 25.328 }, + { 49.657, 24.255 }, + { 50.544, 21.681 }, + { 51.706, 19.493 }, + { 53.067, 17.699 }, + { 54.554, 16.31 }, + { 56.092, 15.336 }, + { 57.605, 14.787 }, + { 59.02, 14.673 }, + { 60.261, 15.005 }, + { 61.322, 15.778 }, + { 62.153, 16.917 }, + { 62.735, 18.368 }, + { 63.05, 20.08 }, + { 63.08, 22.001 }, + { 62.807, 24.079 }, + { 62.211, 26.263 }, + { 61.275, 28.499 }, + { 60.796, 29.778 }, + { 60.07, 31.599 }, + { 59.19, 33.958 }, + { 58.246, 36.853 }, + { 57.33, 40.283 }, + { 56.533, 44.244 }, + { 55.946, 48.735 }, + { 55.661, 53.754 }, + { 56.048, 59.045 }, + { 57.202, 64.735 }, + { 59.064, 70.699 }, + { 61.581, 76.813 }, + { 64.696, 82.954 }, + { 68.354, 88.996 }, + { 72.5, 94.815 }, + { 77.077, 100.288 }, + { 77.29, 100.529 }, + { 77.504, 100.769 }, + { 77.72, 101.008 }, + { 77.938, 101.246 }, + { 78.156, 101.482 }, + { 78.375, 101.718 }, + { 78.596, 101.953 }, + { 78.819, 102.187 }, + { 77.507, 100.425 }, + { 76.268, 98.594 }, + { 75.107, 96.694 }, + { 74.029, 94.727 }, + { 73.038, 92.691 }, + { 72.14, 90.588 }, + { 71.34, 88.417 }, + { 70.642, 86.177 }, + { 69.758, 81.991 }, + { 69.453, 77.754 }, + { 69.694, 73.533 }, + { 70.447, 69.393 }, + { 71.68, 65.398 }, + { 73.36, 61.616 }, + { 75.454, 58.111 }, + { 77.927, 54.95 }, + { 80.671, 52.111 }, + { 83.63, 49.618 }, + { 86.771, 47.486 }, + { 90.057, 45.733 }, + { 93.453, 44.374 }, + { 96.923, 43.425 }, + { 100.431, 42.903 }, + { 103.941, 42.825 }, + { 107.27, 43.312 }, + { 110.356, 44.165 }, + { 113.185, 45.326 }, + { 115.738, 46.738 }, + { 118, 48.344 }, + { 119.956, 50.087 }, + { 121.586, 51.909 }, + { 122.877, 53.754 }, + { 123.896, 55.528 }, + { 124.686, 57.231 }, + { 125.275, 58.827 }, + { 125.691, 60.277 }, + { 125.961, 61.546 }, + { 126.113, 62.595 }, + { 126.174, 63.386 }, + { 126.171, 63.884 }, + { 126.132, 65.389 }, + { 125.886, 66.978 }, + { 125.427, 68.619 }, + { 124.747, 70.283 }, + { 123.839, 71.938 }, + { 122.697, 73.555 }, + { 121.312, 75.101 }, + { 119.678, 76.546 }, + { 118.019, 77.829 }, + { 115.808, 79.103 }, + { 113.145, 80.155 }, + { 110.128, 80.774 }, + { 106.859, 80.746 }, + { 103.436, 79.861 }, + { 99.958, 77.905 }, + { 96.526, 74.668 }, + { 94.956, 72.077 }, + { 94.072, 69.584 }, + { 93.833, 67.253 }, + { 94.192, 65.149 }, + { 95.109, 63.338 }, + { 96.54, 61.885 }, + { 98.44, 60.854 }, + { 100.769, 60.311 }, + { 101.85, 60.348 }, + { 102.914, 60.714 }, + { 103.929, 61.344 }, + { 104.863, 62.173 }, + { 105.687, 63.135 }, + { 106.368, 64.164 }, + { 106.875, 65.195 }, + { 107.178, 66.164 }, + { 107.59, 67.642 }, + { 108.098, 68.985 }, + { 108.728, 70.146 }, + { 109.504, 71.075 }, + { 110.454, 71.719 }, + { 111.603, 72.031 }, + { 112.975, 71.959 }, + { 114.597, 71.454 }, + { 116.199, 70.622 }, + { 117.663, 69.297 }, + { 118.874, 67.554 }, + { 119.722, 65.467 }, + { 120.095, 63.111 }, + { 119.881, 60.56 }, + { 118.968, 57.888 }, + { 117.245, 55.17 }, + { 115.173, 52.677 }, + { 112.542, 50.595 }, + { 109.458, 48.981 }, + { 106.029, 47.893 }, + { 102.36, 47.386 }, + { 98.56, 47.517 }, + { 94.734, 48.344 }, + { 90.99, 49.923 }, + { 87.38, 51.852 }, + { 84.029, 54.306 }, + { 81, 57.224 }, + { 78.356, 60.546 }, + { 76.158, 64.211 }, + { 74.468, 68.157 }, + { 73.349, 72.325 }, + { 72.863, 76.653 }, + { 73.956, 85.389 }, + { 76.816, 93.303 }, + { 81.104, 100.325 }, + { 86.481, 106.387 }, + { 92.608, 111.42 }, + { 99.146, 115.356 }, + { 105.756, 118.127 }, + { 112.099, 119.662 }, + { 113.088, 119.839 }, + { 114.063, 119.997 }, + { 115.023, 120.136 }, + { 115.969, 120.257 }, + { 116.9, 120.361 }, + { 117.816, 120.448 }, + { 118.716, 120.519 }, + { 119.601, 120.574 }, + { 119.616, 120.558 }, + { 119.644, 120.526 }, + { 119.659, 120.51 }, + { 119.701, 120.461 }, + { 119.715, 120.446 }, + { 122.386, 117.999 }, + { 125.326, 115.961 }, + { 128.488, 114.324 }, + { 131.826, 113.078 }, + { 135.291, 112.214 }, + { 138.837, 111.725 }, + { 142.416, 111.601 }, + { 145.98, 111.834 }, + { 147.175, 111.987 }, + { 148.367, 112.167 }, + { 149.555, 112.365 }, + { 150.741, 112.573 }, + { 151.926, 112.782 }, + { 153.113, 112.983 }, + { 154.301, 113.169 }, + { 155.493, 113.331 }, + { 156.304, 113.438 }, + { 157.272, 113.56 }, + { 158.338, 113.663 }, + { 159.442, 113.711 }, + { 160.526, 113.669 }, + { 161.529, 113.502 }, + { 162.392, 113.174 }, + { 163.056, 112.65 }, + { 163.21, 112.384 }, + { 163.259, 112.093 }, + { 163.222, 111.785 }, + { 163.122, 111.471 }, + { 162.978, 111.16 }, + { 162.812, 110.863 }, + { 162.646, 110.589 }, + { 162.5, 110.348 }, + { 162.29, 109.968 }, + { 162.091, 109.583 }, + { 161.905, 109.195 }, + { 161.73, 108.803 }, + { 161.566, 108.406 }, + { 161.413, 108.006 }, + { 161.271, 107.602 }, + { 161.139, 107.193 }, + { 160.815, 105.818 }, + { 160.672, 104.439 }, + { 160.694, 103.063 }, + { 160.864, 101.697 }, + { 161.166, 100.348 }, + { 161.585, 99.024 }, + { 162.106, 97.732 }, + { 162.711, 96.479 }, + { 162.836, 96.315 }, + { 162.989, 96.232 }, + { 163.154, 96.219 }, + { 163.32, 96.265 }, + { 163.474, 96.36 }, + { 163.602, 96.494 }, + { 163.691, 96.654 }, + { 163.729, 96.833 }, + { 163.845, 98.094 }, + { 164.082, 99.311 }, + { 164.428, 100.486 }, + { 164.876, 101.622 }, + { 165.414, 102.72 }, + { 166.032, 103.781 }, + { 166.721, 104.809 }, + { 167.47, 105.804 }, + { 168.704, 107.271 }, + { 170.027, 108.66 }, + { 171.434, 109.964 }, + { 172.92, 111.174 }, + { 174.482, 112.283 }, + { 176.114, 113.282 }, + { 177.813, 114.164 }, + { 179.574, 114.919 }, + { 183.079, 116.087 }, + { 186.698, 116.96 }, + { 190.4, 117.565 }, + { 194.156, 117.926 }, + { 197.933, 118.069 }, + { 201.7, 118.021 }, + { 205.426, 117.807 }, + { 209.082, 117.452 }, + { 211.04, 117.203 }, + { 212.993, 116.911 }, + { 214.939, 116.577 }, + { 216.879, 116.203 }, + { 218.813, 115.789 }, + { 220.738, 115.336 }, + { 222.655, 114.846 }, + { 224.563, 114.318 }, + { 222.516, 114.36 }, + { 220.513, 114.244 }, + { 218.549, 113.979 }, + { 216.617, 113.578 }, + { 214.71, 113.049 }, + { 212.826, 112.405 }, + { 210.956, 111.655 }, + { 209.095, 110.81 }, + { 207.703, 110.141 }, + { 206.312, 109.469 }, + { 204.921, 108.799 }, + { 203.53, 108.136 }, + { 202.132, 107.483 }, + { 200.729, 106.845 }, + { 199.316, 106.227 }, + { 197.892, 105.632 }, + { 197.707, 105.556 }, + { 197.52, 105.481 }, + { 197.333, 105.408 }, + { 197.147, 105.335 }, + { 196.959, 105.263 }, + { 196.772, 105.191 }, + { 196.584, 105.119 }, + { 196.397, 105.047 }, + { 195.199, 104.591 }, + { 193.999, 104.141 }, + { 192.796, 103.696 }, + { 191.593, 103.255 }, + { 190.387, 102.818 }, + { 189.18, 102.385 }, + { 187.973, 101.955 }, + { 186.764, 101.527 }, + { 186.596, 101.43 }, + { 186.488, 101.292 }, + { 186.437, 101.13 }, + { 186.439, 100.958 }, + { 186.49, 100.792 }, + { 186.586, 100.646 }, + { 186.724, 100.538 }, + { 186.9, 100.481 }, + { 188.926, 100.128 }, + { 190.945, 99.639 }, + { 192.952, 99.037 }, + { 194.944, 98.349 }, + { 196.918, 97.6 }, + { 198.87, 96.815 }, + { 200.794, 96.02 }, + { 202.689, 95.239 }, + { 204.508, 94.473 }, + { 206.322, 93.673 }, + { 208.138, 92.872 }, + { 209.964, 92.104 }, + { 211.81, 91.401 }, + { 213.683, 90.797 }, + { 215.593, 90.325 }, + { 217.548, 90.019 }, + { 218.521, 89.923 }, + { 219.49, 89.844 }, + { 220.455, 89.78 }, + { 221.417, 89.733 }, + { 222.377, 89.705 }, + { 223.335, 89.695 }, + { 224.292, 89.705 }, + { 225.248, 89.734 }, + { 225.823, 89.763 }, + { 226.398, 89.8 }, + { 226.974, 89.845 }, + { 227.549, 89.9 }, + { 228.125, 89.963 }, + { 228.704, 90.035 }, + { 229.282, 90.116 }, + { 229.861, 90.206 }, + { 230.768, 90.338 }, + { 231.672, 90.445 }, + { 232.575, 90.528 }, + { 233.476, 90.588 }, + { 234.378, 90.626 }, + { 235.285, 90.644 }, + { 236.193, 90.641 }, + { 237.107, 90.62 }, + { 238.566, 90.521 }, + { 239.976, 90.317 }, + { 241.336, 90.011 }, + { 242.648, 89.606 }, + { 243.91, 89.104 }, + { 245.122, 88.506 }, + { 246.284, 87.816 }, + { 247.396, 87.035 }, + { 246.386, 87.478 }, + { 245.352, 87.866 }, + { 244.302, 88.2 }, + { 243.245, 88.479 }, + { 242.187, 88.703 }, + { 241.139, 88.87 }, + { 240.108, 88.982 }, + { 239.101, 89.037 }, + { 236.924, 88.981 }, + { 234.779, 88.726 }, + { 232.66, 88.307 }, + { 230.563, 87.763 }, + { 228.485, 87.13 }, + { 226.421, 86.449 }, + { 224.368, 85.755 }, + { 222.32, 85.088 }, + { 222.152, 84.996 }, + { 222.045, 84.859 }, + { 221.996, 84.694 }, + { 221.999, 84.519 }, + { 222.05, 84.349 }, + { 222.147, 84.201 }, + { 222.285, 84.093 }, + { 222.459, 84.042 }, + { 223.538, 83.922 }, + { 224.63, 83.774 }, + { 225.733, 83.597 }, + { 226.842, 83.391 }, + { 227.954, 83.158 }, + { 229.063, 82.898 }, + { 230.167, 82.611 }, + { 231.264, 82.298 }, + { 231.927, 82.094 }, + { 232.584, 81.879 }, + { 233.234, 81.656 }, + { 233.876, 81.422 }, + { 234.509, 81.18 }, + { 235.133, 80.928 }, + { 235.748, 80.668 }, + { 236.351, 80.398 }, + { 237.582, 79.689 }, + { 238.68, 78.812 }, + { 239.687, 77.818 }, + { 240.641, 76.754 }, + { 241.582, 75.67 }, + { 242.548, 74.615 }, + { 243.58, 73.637 }, + { 244.715, 72.785 }, + { 245.585, 72.262 }, + { 246.482, 71.797 }, + { 247.402, 71.39 }, + { 248.341, 71.036 }, + { 249.3, 70.735 }, + { 250.276, 70.484 }, + { 251.266, 70.281 }, + { 252.269, 70.124 }, + { 253.279, 70.011 }, + { 254.351, 69.909 }, + { 255.459, 69.795 }, + { 256.575, 69.645 }, + { 257.671, 69.434 }, + { 258.72, 69.137 }, + { 259.696, 68.731 }, + { 260.57, 68.192 }, + { 261.132, 67.746 }, + { 261.68, 67.274 }, + { 262.212, 66.78 }, + { 262.73, 66.265 }, + { 263.236, 65.733 }, + { 263.73, 65.187 }, + { 264.213, 64.628 }, + { 264.688, 64.061 }, + { 263.335, 64.432 }, + { 261.906, 64.635 }, + { 260.428, 64.701 }, + { 258.93, 64.658 }, + { 257.44, 64.539 }, + { 255.987, 64.371 }, + { 254.599, 64.186 }, + { 253.305, 64.013 }, + { 252.341, 63.918 }, + { 251.369, 63.873 }, + { 250.393, 63.87 }, + { 249.415, 63.9 }, + { 248.437, 63.958 }, + { 247.462, 64.037 }, + { 246.494, 64.129 }, + { 245.534, 64.227 }, + { 244.91, 64.284 }, + { 244.263, 64.336 }, + { 243.601, 64.389 }, + { 242.93, 64.45 }, + { 242.26, 64.526 }, + { 241.597, 64.624 }, + { 240.948, 64.751 }, + { 240.321, 64.914 }, + { 240.237, 64.946 }, + { 240.151, 64.977 }, + { 240.066, 65.007 }, + { 239.894, 65.066 }, + { 239.808, 65.096 }, + { 239.723, 65.125 }, + { 239.637, 65.155 }, + { 239.403, 65.188 }, + { 239.203, 65.13 }, + { 239.045, 65.005 }, + { 238.941, 64.834 }, + { 238.898, 64.641 }, + { 238.926, 64.447 }, + { 239.034, 64.275 }, + { 239.232, 64.146 }, + { 239.314, 64.113 }, + { 239.398, 64.08 }, + { 239.481, 64.048 }, + { 239.566, 64.018 }, + { 239.651, 63.988 }, + { 239.736, 63.959 }, + { 239.822, 63.932 }, + { 239.908, 63.905 }, + { 241.42, 63.333 }, + { 242.913, 62.702 }, + { 244.375, 62.005 }, + { 245.8, 61.24 }, + { 247.181, 60.4 }, + { 248.509, 59.482 }, + { 249.777, 58.481 }, + { 250.976, 57.392 }, + { 252.14, 56.151 }, + { 253.212, 54.838 }, + { 254.224, 53.478 }, + { 255.21, 52.097 }, + { 256.205, 50.721 }, + { 257.24, 49.376 }, + { 258.349, 48.09 }, + { 259.567, 46.886 }, + { 261.244, 45.542 }, + { 263.046, 44.35 }, + { 264.926, 43.25 }, + { 266.835, 42.184 }, + { 268.722, 41.092 }, + { 270.54, 39.916 }, + { 272.239, 38.598 }, + { 273.769, 37.078 }, + { 274.034, 36.769 }, + { 274.309, 36.423 }, + { 274.574, 36.046 }, + { 274.804, 35.646 }, + { 274.979, 35.229 }, + { 275.077, 34.804 }, + { 275.074, 34.377 }, + { 274.949, 33.956 }, + { 274.866, 33.798 }, + { 274.768, 33.65 }, + { 274.658, 33.513 }, + { 274.535, 33.384 }, + { 274.4, 33.264 }, + { 274.253, 33.152 }, + { 274.096, 33.048 }, + { 273.93, 32.952 }, + { 273.361, 32.701 }, + { 272.729, 32.517 }, + { 272.06, 32.391 }, + { 271.375, 32.313 }, + { 270.7, 32.276 }, + { 270.056, 32.27 }, + { 269.466, 32.285 }, + { 268.957, 32.314 }, + { 267.811, 32.425 }, + { 266.674, 32.591 }, + { 265.546, 32.806 }, + { 264.427, 33.065 }, + { 263.317, 33.363 }, + { 262.216, 33.696 }, + { 261.125, 34.058 }, + { 260.044, 34.444 }, + { 258.664, 34.968 }, + { 257.275, 35.538 }, + { 255.895, 36.162 }, + { 254.542, 36.849 }, + { 253.232, 37.607 }, + { 251.983, 38.447 }, + { 250.811, 39.376 }, + { 249.735, 40.405 }, + { 249.292, 40.882 }, + { 248.761, 41.495 }, + { 248.226, 42.192 }, + { 247.772, 42.929 }, + { 247.482, 43.654 }, + { 247.441, 44.321 }, + { 247.732, 44.882 }, + { 248.439, 45.287 }, + { 248.917, 45.428 }, + { 249.4, 45.538 }, + { 249.887, 45.624 }, + { 250.377, 45.688 }, + { 250.87, 45.738 }, + { 251.364, 45.776 }, + { 251.858, 45.809 }, + { 252.35, 45.84 }, + { 252.547, 45.888 }, + { 252.686, 45.989 }, + { 252.771, 46.129 }, + { 252.804, 46.292 }, + { 252.79, 46.465 }, + { 252.729, 46.631 }, + { 252.626, 46.776 }, + { 252.484, 46.886 }, + { 251.658, 47.258 }, + { 250.703, 47.559 }, + { 249.667, 47.76 }, + { 248.604, 47.834 }, + { 247.564, 47.751 }, + { 246.597, 47.486 }, + { 245.757, 47.008 }, + { 245.093, 46.291 }, + { 244.789, 45.737 }, + { 244.584, 45.165 }, + { 244.474, 44.58 }, + { 244.448, 43.988 }, + { 244.5, 43.394 }, + { 244.623, 42.803 }, + { 244.809, 42.219 }, + { 245.05, 41.649 }, + { 245.711, 40.448 }, + { 246.503, 39.337 }, + { 247.409, 38.312 }, + { 248.405, 37.366 }, + { 249.473, 36.494 }, + { 250.594, 35.69 }, + { 251.749, 34.948 }, + { 252.917, 34.262 }, + { 254.128, 33.601 }, + { 255.364, 32.981 }, + { 256.619, 32.4 }, + { 257.89, 31.855 }, + { 259.176, 31.345 }, + { 260.473, 30.864 }, + { 261.779, 30.412 }, + { 263.091, 29.985 }, + { 264.343, 29.61 }, + { 265.61, 29.267 }, + { 266.887, 28.946 }, + { 268.172, 28.64 }, + { 269.46, 28.338 }, + { 270.748, 28.031 }, + { 272.029, 27.711 }, + { 273.302, 27.367 }, + { 273.876, 27.203 }, + { 274.448, 27.031 }, + { 275.015, 26.851 }, + { 275.579, 26.662 }, + { 276.138, 26.463 }, + { 276.693, 26.254 }, + { 277.244, 26.033 }, + { 277.788, 25.8 }, + { 280.041, 24.682 }, + { 282.156, 23.416 }, + { 284.158, 22.022 }, + { 286.073, 20.524 }, + { 287.925, 18.944 }, + { 289.74, 17.304 }, + { 291.544, 15.626 }, + { 293.363, 13.932 }, + { 294.976, 12.499 }, + { 296.641, 11.132 }, + { 298.357, 9.836 }, + { 300.125, 8.615 }, + { 301.946, 7.475 }, + { 303.819, 6.418 }, + { 305.744, 5.45 }, + { 307.721, 4.575 }, + { 310.958, 3.363 }, + { 314.255, 2.358 }, + { 317.601, 1.544 }, + { 320.986, 0.908 }, + { 324.401, 0.433 }, + { 327.836, 0.105 }, + { 329.698, 0 }, + { 329.698, 1.021 }, + { 329.522, 1.04 }, + { 328.927, 1.109 }, + { 324.183, 1.827 }, + { 319.536, 2.813 }, + { 315.009, 4.072 }, + { 310.628, 5.61 }, + { 306.417, 7.432 }, + { 302.404, 9.542 }, + { 298.61, 11.947 }, + { 295.061, 14.651 }, + { 291.427, 17.975 }, + { 288.148, 21.53 }, + { 285.217, 25.279 }, + { 282.633, 29.188 }, + { 280.391, 33.219 }, + { 278.487, 37.338 }, + { 276.917, 41.509 }, + { 275.679, 45.695 }, + { 275.134, 47.752 }, + { 274.639, 49.798 }, + { 274.179, 51.827 }, + { 273.743, 53.833 }, + { 273.317, 55.808 }, + { 272.888, 57.747 }, + { 272.444, 59.644 }, + { 271.971, 61.491 }, + { 271.458, 63.323 }, + { 270.911, 65.122 }, + { 270.33, 66.885 }, + { 269.713, 68.612 }, + { 269.062, 70.301 }, + { 268.375, 71.951 }, + { 267.65, 73.561 }, + { 266.888, 75.129 }, + { 265.262, 78.137 }, + { 263.481, 80.949 }, + { 261.566, 83.569 }, + { 259.536, 86 }, + { 257.412, 88.244 }, + { 255.214, 90.306 }, + { 252.961, 92.188 }, + { 250.676, 93.893 }, + { 246.017, 96.784 }, + { 241.424, 99.056 }, + { 236.95, 100.777 }, + { 232.648, 102.018 }, + { 228.569, 102.85 }, + { 224.767, 103.343 }, + { 221.295, 103.567 }, + { 218.205, 103.593 }, + { 215.444, 103.497 }, + { 213.039, 103.377 }, + { 210.994, 103.249 }, + { 209.31, 103.128 }, + { 207.993, 103.03 }, + { 207.043, 102.971 }, + { 206.465, 102.965 }, + { 206.261, 103.03 }, + { 208.139, 103.292 }, + { 210.031, 103.574 }, + { 211.935, 103.861 }, + { 213.853, 104.14 }, + { 215.784, 104.395 }, + { 217.728, 104.612 }, + { 219.683, 104.777 }, + { 221.652, 104.875 }, + { 223.639, 104.887 }, + { 225.626, 104.831 }, + { 227.615, 104.704 }, + { 229.599, 104.506 }, + { 231.58, 104.234 }, + { 233.555, 103.888 }, + { 235.522, 103.465 }, + { 237.48, 102.965 }, + { 241.337, 101.751 }, + { 245.095, 100.232 }, + { 248.727, 98.421 }, + { 252.211, 96.333 }, + { 255.525, 93.982 }, + { 258.642, 91.383 }, + { 261.541, 88.549 }, + { 264.197, 85.496 }, + { 266.608, 82.247 }, + { 268.728, 78.852 }, + { 270.578, 75.339 }, + { 272.18, 71.738 }, + { 273.556, 68.076 }, + { 274.728, 64.382 }, + { 275.715, 60.684 }, + { 276.541, 57.011 }, + { 276.891, 55.171 }, + { 277.256, 53.369 }, + { 277.637, 51.6 }, + { 278.033, 49.859 }, + { 278.445, 48.14 }, + { 278.871, 46.437 }, + { 279.314, 44.746 }, + { 279.773, 43.061 }, + { 280.259, 41.442 }, + { 280.817, 39.853 }, + { 281.434, 38.292 }, + { 282.1, 36.756 }, + { 282.804, 35.245 }, + { 283.537, 33.756 }, + { 284.285, 32.288 }, + { 285.039, 30.838 }, + { 286.658, 28.087 }, + { 288.399, 25.481 }, + { 290.249, 23.024 }, + { 292.189, 20.718 }, + { 294.204, 18.565 }, + { 296.276, 16.568 }, + { 298.39, 14.729 }, + { 300.532, 13.052 }, + { 302.711, 11.536 }, + { 304.892, 10.17 }, + { 307.062, 8.944 }, + { 309.206, 7.846 }, + { 311.311, 6.865 }, + { 313.365, 5.989 }, + { 315.355, 5.208 }, + { 317.266, 4.51 }, + { 319.171, 3.895 }, + { 320.98, 3.351 }, + { 322.687, 2.873 }, + { 324.288, 2.456 }, + { 325.779, 2.097 }, + { 327.157, 1.792 }, + { 328.416, 1.535 }, + { 329.552, 1.323 }, + { 329.698, 1.298 } +}; diff --git a/thirdparty/carve-1.4.0/tests/geom2d_unittest.cpp b/thirdparty/carve-1.4.0/tests/geom2d_unittest.cpp new file mode 100644 index 00000000..48d04561 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/geom2d_unittest.cpp @@ -0,0 +1,141 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#include + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include +#include + +using namespace carve::geom; +using namespace carve::geom2d; + +typedef std::vector P2vec; + +P2vec TRI(P2 a, P2 b, P2 c) { P2vec r; r.reserve(3); r.push_back(a); r.push_back(b); r.push_back(c); return r; } + +TEST(GeomTest, Geom2D) { + ASSERT_EQ(0.0, dot(VECTOR(1,1), VECTOR(-2,2))); + ASSERT_EQ(1.0, dot(VECTOR(1,1), VECTOR(0,1))); + + ASSERT_EQ(-2.0, cross(VECTOR(1,2), VECTOR(3,4))); + + ASSERT_TRUE(internalToAngle(VECTOR(1,1), VECTOR(0,0), VECTOR(-1,1), VECTOR(2,3))); + ASSERT_FALSE(internalToAngle(VECTOR(-1,1), VECTOR(0,0), VECTOR(1,1), VECTOR(2,3))); + + // rounding errors mean that N=100 fails with inexact orient2d. +#define N 100 + for (size_t i = 0; i < N; ++i) { + for (size_t j = 0; j < N; ++j) { + double x, y; + x = i / double(N/2) - 1.0; + y = j / double(N/2) - 1.0; + ASSERT_NE( + internalToAngle(VECTOR(+1,1), VECTOR(0,0), VECTOR(-1,1), VECTOR(x, y)), + internalToAngle(VECTOR(-1,1), VECTOR(0,0), VECTOR(+1,1), VECTOR(x, y))); + if (x != 0 && y != 0) { + double a = atan2(y, x); + const double a_min = M_PI / 4; + const double a_max = M_PI * 3 / 4; + ASSERT_EQ(y > fabs(x), internalToAngle(VECTOR(+1,1), VECTOR(0,0), VECTOR(-1,1), VECTOR(x, y))); + ASSERT_EQ(y <= fabs(x), internalToAngle(VECTOR(-1,1), VECTOR(0,0), VECTOR(+1,1), VECTOR(x, y))); + } + } + } + + P2vec tri; + + // anticlockwise triangle + tri = TRI(VECTOR(0,0), VECTOR(0,1), VECTOR(1,0)); + + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.25, .25), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(0, 0), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(0.5, 0.5), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.75, .75), tri), false); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(-.25, .25), tri), false); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.25, -.25), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(1,1), VECTOR(2,2), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,-1), VECTOR(3,-1), tri), false); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,-1), VECTOR(-1,3), tri), false); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(3,-1), VECTOR(-1,3), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(.25,.25), VECTOR(.5,.5), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,0), VECTOR(-.25,-.25), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,0), VECTOR(-.25,-.25), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(.5,0), VECTOR(0,.5), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(1.5,-1), VECTOR(-1,1.5), tri), true); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(2,-1), VECTOR(-1,2), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,0), VECTOR(2,0), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,-1), VECTOR(0,2), tri), true); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0.25,0.25), VECTOR(1,1), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0.5,0.5), VECTOR(1,1), tri), true); + + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(1,0), VECTOR(1,1), VECTOR(0,1)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(.5,.5), VECTOR(.5,1), VECTOR(1,.5)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(.25,.25), VECTOR(.25,1), VECTOR(1,.25)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(2,0), VECTOR(2,2), VECTOR(0,2)), tri), false); + + // clockwise triangle - results should be the same. + tri = TRI(VECTOR(0,0), VECTOR(0,1), VECTOR(1,0)); + + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.25, .25), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(0, 0), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(0.5, 0.5), tri), true); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.75, .75), tri), false); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(-.25, .25), tri), false); + ASSERT_EQ(pointIntersectsTriangle(VECTOR(.25, -.25), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(1,1), VECTOR(2,2), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,-1), VECTOR(3,-1), tri), false); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,-1), VECTOR(-1,3), tri), false); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(3,-1), VECTOR(-1,3), tri), false); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(.25,.25), VECTOR(.5,.5), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,0), VECTOR(-.25,-.25), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,0), VECTOR(-.25,-.25), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(.5,0), VECTOR(0,.5), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(1.5,-1), VECTOR(-1,1.5), tri), true); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(2,-1), VECTOR(-1,2), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(-1,0), VECTOR(2,0), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0,-1), VECTOR(0,2), tri), true); + + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0.25,0.25), VECTOR(1,1), tri), true); + ASSERT_EQ(lineIntersectsTriangle(VECTOR(0.5,0.5), VECTOR(1,1), tri), true); + + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(1,0), VECTOR(1,1), VECTOR(0,1)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(.5,.5), VECTOR(.5,1), VECTOR(1,.5)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(.25,.25), VECTOR(.25,1), VECTOR(1,.25)), tri), true); + ASSERT_EQ(triangleIntersectsTriangle(TRI(VECTOR(2,0), VECTOR(2,2), VECTOR(0,2)), tri), false); + + ASSERT_EQ(lineIntersectsTriangle( + VECTOR(1119.40699999999992542143,213543.176000000006752089), + VECTOR(1118.40699999999992542143,213542.883000000001629815), + TRI(VECTOR(1121.40699999999992542143,213543.761999999987892807), + VECTOR(1119.40699999999992542143,213544.662000000011175871), + VECTOR(1120.40699999999992542143,213543.469000000011874363))), false); +} diff --git a/thirdparty/carve-1.4.0/tests/geom3d_unittest.cpp b/thirdparty/carve-1.4.0/tests/geom3d_unittest.cpp new file mode 100644 index 00000000..1972a5b8 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/geom3d_unittest.cpp @@ -0,0 +1,176 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + +#include + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include +#include +#include + +using namespace carve::geom; +using namespace carve::geom3d; + +#include BOOST_INCLUDE(random.hpp) + +// OSX only. +uint32_t getseed() { + srandomdev(); + return random(); +} + +boost::mt19937 rng(getseed()); +boost::uniform_on_sphere distrib(3); +boost::variate_generator > gen(rng, distrib); + +Vector randomUnitVector() { + Vector vec; + vec = gen(); + return vec; +} + +Vector randomPerpendicularVector(const Vector &p) { + Vector t; + do { + t = randomUnitVector(); + } while (fabs(carve::geom::dot(p, t)) > 1 - 1e-5); + return cross(t, p).normalized(); +} + +carve::math::Matrix3 randomRotation() { + Vector vx = randomUnitVector(); + Vector vy = randomPerpendicularVector(vx); + Vector vz = cross(vx, vy).normalized(); + + carve::math::Matrix3 m; + m._11 = vx.x; m._12 = vx.y; m._13 = vx.z; + m._21 = vy.x; m._22 = vy.y; m._23 = vy.z; + m._31 = vz.x; m._32 = vz.y; m._33 = vz.z; + return m; +} + +// static inline double antiClockwiseAngle(const Vector &from, const Vector &to, const Vector &orient) + +void checkOrderInvariance(const Vector &dir, + const Vector &base, + const Vector &a, + const Vector &b) { + ASSERT_EQ(compareAngles(dir, base, a, b), -compareAngles(dir, base, b, a)); +} + +void checkReflectionInvariance(const Vector &dir, + const Vector &base, + const Vector &a, + const Vector &b) { + ASSERT_EQ(compareAngles(dir, base, a, b), -compareAngles(-dir, base, a, b)); +} + +void checkRotationInvariance(const Vector &dir, + const Vector &base, + const Vector &a, + const Vector &b, + size_t n) { + for (size_t i = 0; i < n; ++i) { + carve::math::Matrix3 rot = randomRotation(); + ASSERT_EQ(compareAngles(dir, base, a, b), + compareAngles(rot * dir, rot * base, rot * a, rot * b)); + + } +} + +void checkInvariance(const Vector &dir, + const Vector &base, + const Vector &a, + const Vector &b) { + checkOrderInvariance(dir, base, a, b); + checkReflectionInvariance(dir, base, a, b); + checkRotationInvariance(dir, base, a, b, 1000); + +} + +int sign(double d) { + return (d > 0) ? +1 : (d == 0) ? 0 : -1; +} + +TEST(GeomTest, compareAnglesFailure0) { + using namespace carve::geom3d; + Vector v_dir = VECTOR( 0, 0, 1); + Vector v_base = VECTOR(-1, 0, 0); + Vector v_a = VECTOR( 0.305679278186268776895673, -0.952134538228459503805823, 0); + Vector v_b = VECTOR(-0.305679278186268721384522, 0.95213453822845939278352, 0); + ASSERT_EQ(compareAngles(v_dir, v_base, v_a, v_b), -1); +} + +TEST(GeomTest, compareAnglesFailure1) { + using namespace carve::geom3d; + Vector v_dir = VECTOR(-4.44089209850062616169453e-16,0,1); + Vector v_base = VECTOR(-0.952134538228459281761218,-0.305679278186269054451429,-1.40944224917610240079275e-16); + Vector v_a = VECTOR(0.952134538228459281761218,0.305679278186268998940278,-1.06444930801409522585195e-16); + Vector v_b = VECTOR(-0.952134538228459281761218,-0.305679278186269054451429,-1.40944224917610240079275e-16); + ASSERT_EQ(compareAngles(v_dir, v_base, v_a, v_b), +1); +} + +TEST(GeomTest, Geom3D) { + using namespace carve::geom3d; + + ASSERT_EQ(0.0, dot(VECTOR(1,1,1), VECTOR(-2,0,2))); + + // 1 2 3 => +(12-15), -(6-12), +(5-8) + // 4 5 6 + ASSERT_EQ(VECTOR(-3, +6, -3), cross(VECTOR(1,2,3), VECTOR(4,5,6))); + + // should return 0 - a == b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(+1,0,0), VECTOR(+1,0,0)), 0); + // should return 0 - a == b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,0,0), VECTOR(-1,0,0)), 0); + // should return 0 - a == b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(+1,+1,0), VECTOR(+1,+1,0)), 0); + // should return +1 - a > b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,+1,0), VECTOR(+1,+1,0)), +1); + // should return -1 - a < b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(+1,+1,0), VECTOR(-1,+1,0)), -1); + // should return +1 - a > b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,0,0), VECTOR(+1,0,0)), +1); + // should return -1 - a < b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(+1,0,0), VECTOR(-1,0,0)), -1); + // +1 a > b + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,-1,0), VECTOR(-1,+1,0)), +1); + // -1 a < b + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,-1,0), VECTOR(+1,-1,0)), -1); + // should return +1 - a > b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(-1,0,0), VECTOR(0,1,0)), +1); + // should return -1 - a < b. + ASSERT_EQ(compareAngles(VECTOR(0,0,1), VECTOR(1,0,0), VECTOR(0,1,0), VECTOR(-1,0,0)), -1); + + for (size_t i = 0; i < 100; ++i) { + Vector dir = randomUnitVector(); + dir = VECTOR(0,0,1); + Vector base = randomPerpendicularVector(dir); + Vector a = randomPerpendicularVector(dir); + Vector b = randomPerpendicularVector(dir); + double da = antiClockwiseAngle(base, a, dir); + double db = antiClockwiseAngle(base, b, dir); + // std::cerr << "dir=" << dir << " base=" << base << " a=" << a << " b=" << b << std::endl; + // std::cerr << compareAngles(dir, base, a, b) << " " << sign(da - db) << " " << da << " " << db << std::endl; + checkInvariance(dir, base, a, b); + } +} + diff --git a/thirdparty/carve-1.4.0/tests/leaf.txt b/thirdparty/carve-1.4.0/tests/leaf.txt new file mode 100644 index 00000000..7cbf1048 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/leaf.txt @@ -0,0 +1,792 @@ +BEGIN +82.227 49.316 +81.826 49.348 +81.457 49.439 +81.118 49.591 +80.811 49.805 +80.555 50.061 +80.371 50.341 +80.262 50.646 +80.225 50.977 +80.23 51.236 +80.248 51.477 +80.279 51.7 +80.322 51.904 +77.627 51.616 +75.158 51.043 +72.916 50.188 +70.898 49.048 +69.232 47.71 +68.042 46.259 +67.328 44.695 +67.09 43.018 +67.111 42.539 +67.175 42.029 +67.282 41.489 +67.432 40.918 +67.475 40.652 +67.505 40.393 +67.523 40.141 +67.529 39.893 +67.447 39.337 +67.199 38.939 +66.788 38.703 +66.211 38.623 +65.628 38.684 +65.051 38.867 +64.48 39.172 +63.916 39.6 +62.551 40.72 +61.34 42.029 +60.28 43.527 +59.375 45.214 +58.648 47.031 +58.13 48.914 +57.818 50.863 +57.715 52.88 +57.734 53.771 +57.794 54.932 +58.789 66.113 +55.42 66.699 +55.224 65.266 +54.846 62.03 +54.339 58.316 +53.979 56.164 +53.606 54.434 +53.223 53.125 +52.752 52.057 +52.124 51.05 +51.337 50.104 +50.391 49.218 +49.371 48.413 +48.12 47.559 +46.637 46.655 +44.922 45.703 +42.581 44.484 +40.686 43.615 +39.236 43.093 +38.232 42.919 +37.542 43.082 +36.889 43.566 +36.272 44.375 +35.693 45.507 +35.298 46.43 +34.894 47.242 +34.479 47.943 +34.057 48.535 +33.606 49.033 +33.11 49.451 +32.569 49.789 +31.982 50.048 +31.332 50.241 +30.603 50.378 +29.794 50.46 +28.906 50.488 +26 50.402 +22.948 50.146 +19.75 49.719 +16.406 49.121 +17.196 48.697 +17.761 48.206 +18.1 47.646 +18.213 47.021 +18.105 46.405 +17.785 45.777 +17.251 45.135 +16.504 44.482 +13.574 42.078 +12.439 41.086 +11.523 40.234 +10.705 39.4 +9.863 38.464 +8.996 37.424 +8.105 36.279 +8.463 36.473 +8.801 36.609 +9.122 36.691 +9.424 36.719 +9.777 36.688 +10.107 36.598 +10.412 36.443 +10.693 36.23 +10.928 35.971 +11.096 35.682 +11.197 35.361 +11.23 35.01 +11.16 34.537 +10.949 33.997 +10.599 33.389 +7.653 29.23 +6.857 28.023 +6.348 27.173 +5.996 26.439 +5.676 25.58 +5.386 24.596 +5.127 23.486 +5.96 23.386 +6.555 23.083 +6.912 22.58 +7.031 21.875 +6.918 21.313 +6.579 20.41 +6.015 19.165 +5.225 17.578 +4.8 16.836 +4.357 15.93 +3.896 14.859 +3.418 13.623 +4.041 13.582 +4.59 13.458 +5.066 13.252 +5.469 12.964 +5.789 12.611 +6.018 12.213 +6.155 11.769 +6.201 11.279 +6.092 10.132 +5.762 8.887 +5.213 7.544 +4.443 6.104 +3.506 4.654 +2.453 3.284 +1.284 1.993 +0 0.781 +2.188 0.598 +2.393 0.586 +4.271 0.644 +6.055 0.818 +7.739 1.108 +9.326 1.514 +13.293 2.393 +14.517 2.612 +15.234 2.686 +16.046 2.6 +16.626 2.344 +16.974 1.917 +17.09 1.318 +17.059 1.016 +16.967 0.696 +16.814 0.357 +16.602 0 +17.609 0.253 +18.535 0.574 +19.379 0.961 +20.141 1.416 +20.954 2.026 +21.954 2.881 +23.14 3.979 +24.512 5.322 +25.186 5.878 +25.793 6.274 +26.334 6.512 +26.807 6.592 +27.426 6.442 +27.868 5.994 +28.134 5.246 +28.223 4.199 +29.467 4.925 +30.663 5.884 +31.811 7.074 +32.91 8.496 +35.693 12.5 +36.111 13.034 +36.535 13.416 +36.966 13.645 +37.402 13.721 +37.967 13.602 +38.391 13.245 +38.675 12.649 +38.818 11.816 +39.639 13.504 +40.344 15.149 +40.933 16.751 +41.406 18.311 +41.8 19.187 +42.248 19.812 +42.752 20.188 +43.311 20.312 +43.765 20.236 +44.152 20.007 +44.473 19.626 +44.727 19.092 +46.072 21.955 +47.033 24.878 +47.61 27.862 +47.803 30.908 +47.598 32.968 +46.984 34.802 +45.962 36.411 +44.531 37.793 +43.826 38.443 +43.322 39.025 +43.021 39.542 +42.92 39.99 +42.97 40.438 +43.121 40.852 +43.372 41.23 +43.725 41.577 +44.281 41.988 +45.146 42.561 +47.803 44.189 +49.93 45.428 +51.623 46.312 +52.884 46.844 +53.711 47.021 +54.103 46.994 +54.449 46.912 +54.749 46.773 +55.004 46.582 +55.265 46.297 +55.584 45.886 +55.961 45.345 +58.071 42.154 +59.631 39.954 +61.074 38.077 +62.402 36.523 +62.936 35.82 +63.317 35.182 +63.547 34.602 +63.623 34.082 +63.59 33.691 +63.488 33.35 +63.32 33.057 +63.086 32.812 +62.762 32.602 +62.328 32.41 +61.785 32.236 +59.837 31.748 +58.733 31.335 +57.822 30.844 +57.104 30.273 +56.525 29.565 +56.035 28.662 +55.635 27.563 +55.322 26.27 +55.062 24.67 +54.821 22.656 +54.599 20.227 +54.395 17.383 +54.983 17.746 +55.529 18.005 +56.033 18.161 +56.494 18.213 +57.251 18.063 +57.959 17.615 +58.618 16.867 +59.229 15.82 +60.019 14.287 +60.778 12.909 +61.508 11.687 +62.207 10.62 +62.927 9.626 +63.72 8.625 +64.587 7.613 +65.527 6.592 +65.631 7.681 +65.942 8.459 +66.461 8.926 +67.188 9.082 +67.479 9.059 +67.767 8.991 +68.052 8.876 +68.334 8.716 +68.632 8.51 +68.963 8.258 +69.328 7.96 +69.727 7.617 +71.095 6.302 +72.564 5.09 +74.134 3.982 +75.805 2.979 +77.521 2.109 +79.229 1.404 +80.928 0.864 +82.617 0.488 +82.361 0.918 +82.178 1.331 +82.068 1.724 +82.031 2.1 +82.146 2.933 +82.494 3.528 +83.074 3.885 +83.887 4.004 +84.292 3.986 +84.729 3.931 +85.195 3.839 +85.693 3.711 +86.765 3.317 +92.996 1.285 +94.641 0.891 +96.341 0.625 +98.096 0.488 +97.625 1.004 +97.29 1.526 +97.089 2.054 +97.021 2.588 +97.07 3.067 +97.217 3.479 +97.461 3.824 +97.803 4.102 +98.593 4.321 +99.938 4.492 +101.84 4.614 +104.297 4.688 +106.161 4.788 +107.897 4.944 +109.506 5.154 +110.986 5.42 +109.655 7.32 +108.496 9.113 +107.507 10.799 +106.689 12.378 +106.049 13.817 +105.591 15.082 +105.316 16.173 +105.225 17.09 +105.26 17.581 +105.364 18.03 +105.539 18.436 +105.785 18.799 +106.08 19.098 +106.402 19.312 +106.752 19.439 +107.129 19.482 +107.403 19.458 +107.689 19.385 +107.989 19.263 +108.301 19.092 +107.635 21.344 +106.615 23.56 +105.242 25.739 +103.516 27.881 +101.172 30.463 +100.439 31.31 +100 31.86 +99.744 32.258 +99.561 32.648 +99.451 33.028 +99.414 33.398 +99.545 34.104 +99.938 34.607 +100.595 34.909 +101.514 35.01 +101.757 35.003 +102.001 34.984 +102.246 34.955 +102.49 34.912 +101.592 36.243 +100.609 37.451 +99.541 38.538 +98.389 39.502 +94.092 42.48 +93.493 42.973 +93.066 43.469 +92.81 43.973 +92.725 44.482 +92.749 44.924 +92.822 45.374 +92.943 45.829 +93.469 47.284 +93.749 48.169 +93.957 48.943 +94.092 49.609 +92.795 49.695 +90.329 49.792 +89.16 49.805 +87.796 49.786 +86.535 49.73 +85.379 49.639 +84.326 49.511 +82.227 49.316 +BEGIN +10.01 25 +9.838 25.024 +9.717 25.098 +9.644 25.22 +9.619 25.391 +9.817 25.833 +10.412 26.428 +11.404 27.176 +12.793 28.076 +13.768 28.644 +14.788 29.175 +15.854 29.669 +16.967 30.127 +18.039 30.511 +18.987 30.786 +19.81 30.951 +20.508 31.006 +21.041 30.942 +21.423 30.75 +21.652 30.429 +21.729 29.98 +21.634 29.535 +21.35 29.175 +20.877 28.9 +20.215 28.711 +19.187 28.52 +18.054 28.241 +16.818 27.873 +15.479 27.417 +14.147 26.915 +12.939 26.41 +11.853 25.902 +10.889 25.391 +10.596 25.22 +10.352 25.098 +10.156 25.024 +10.01 25 +BEGIN +12.598 8.984 +12.384 8.685 +12.133 8.472 +11.847 8.344 +11.523 8.301 +11.403 8.316 +11.291 8.362 +11.184 8.438 +11.084 8.545 +10.998 8.664 +10.938 8.777 +10.9 8.884 +10.889 8.984 +11.035 9.516 +11.475 10.425 +12.207 11.713 +13.232 13.379 +17.636 20.251 +22.498 26.66 +27.816 32.605 +33.594 38.086 +35.699 39.789 +36.035 40.039 +36.278 40.188 +36.522 40.295 +36.768 40.359 +37.012 40.381 +37.208 40.361 +37.408 40.302 +37.61 40.203 +37.816 40.062 +37.998 39.902 +38.129 39.74 +38.206 39.574 +38.232 39.404 +38.101 39.096 +37.902 38.757 +37.637 38.389 +37.305 37.988 +35.637 36.602 +34.051 35.223 +32.548 33.855 +31.127 32.495 +29.724 31.081 +28.271 29.547 +26.77 27.895 +25.219 26.123 +23.656 24.268 +22.118 22.363 +20.604 20.41 +17.601 16.299 +12.598 8.984 +BEGIN +28.809 37.891 +27.291 38.062 +25.769 38.184 +24.24 38.257 +22.705 38.281 +20.932 38.227 +19.274 38.062 +17.733 37.787 +16.309 37.402 +16.168 37.316 +16.039 37.256 +15.924 37.219 +15.82 37.207 +15.692 37.225 +15.601 37.28 +15.546 37.372 +15.527 37.5 +15.558 37.622 +15.649 37.744 +15.802 37.866 +17.822 39.035 +19.921 39.783 +22.313 40.23 +25 40.381 +26.327 40.361 +27.429 40.302 +28.305 40.203 +28.955 40.062 +29.425 39.879 +29.76 39.643 +29.962 39.354 +30.029 39.014 +29.953 38.521 +29.724 38.171 +29.342 37.961 +28.809 37.891 +BEGIN +21.387 9.521 +22.216 13.257 +22.412 14.307 +23.096 19.092 +23.221 19.711 +23.449 20.154 +23.782 20.419 +24.219 20.508 +24.646 20.425 +24.951 20.178 +25.134 19.766 +25.195 19.189 +25.088 18.277 +24.768 16.858 +24.233 14.932 +23.486 12.5 +22.938 10.919 +22.461 9.79 +22.059 9.113 +21.729 8.887 +21.579 8.926 +21.472 9.045 +21.408 9.244 +21.387 9.521 +BEGIN +32.715 16.699 +32.543 16.729 +32.422 16.821 +32.349 16.974 +32.324 17.188 +32.348 17.243 +32.372 17.31 +32.396 17.389 +32.422 17.48 +32.445 17.593 +32.47 17.737 +32.909 21.497 +33.031 22.903 +33.398 29.395 +33.48 30.048 +33.582 30.591 +33.7 31.024 +33.838 31.348 +34.009 31.583 +34.229 31.75 +34.496 31.851 +34.814 31.885 +35.327 31.793 +35.693 31.519 +35.913 31.061 +35.986 30.42 +35.963 29.611 +35.895 28.699 +35.779 27.683 +35.619 26.562 +35.413 25.348 +35.162 24.048 +34.521 21.191 +33.99 19.165 +33.766 18.39 +33.568 17.773 +33.378 17.304 +33.172 16.968 +32.951 16.766 +32.715 16.699 +BEGIN +71.924 12.5 +71.967 12.391 +71.997 12.256 +72.016 12.098 +72.021 11.914 +72.003 11.743 +71.948 11.621 +71.856 11.548 +71.729 11.523 +71.5 11.579 +71.252 11.743 +70.987 12.018 +70.703 12.402 +70.123 13.507 +69.604 14.771 +69.146 16.192 +68.75 17.773 +68.43 19.452 +68.201 21.167 +68.063 22.918 +68.018 24.707 +68.031 25.696 +68.072 26.514 +68.141 27.161 +68.236 27.637 +68.372 27.979 +68.561 28.223 +68.8 28.369 +69.092 28.418 +69.583 28.323 +69.934 28.04 +70.145 27.566 +70.215 26.904 +70.215 25.977 +70.172 25.516 +70.141 24.915 +70.123 24.173 +70.117 23.291 +70.23 20.419 +70.568 17.664 +71.133 15.024 +71.924 12.5 +BEGIN +68.506 33.105 +68.576 33.618 +68.786 33.984 +69.137 34.204 +69.629 34.277 +69.885 34.223 +70.215 34.059 +70.617 33.783 +74.844 30.329 +79.016 27.075 +93.457 16.565 +98.068 13.474 +98.62 13.123 +99.069 12.863 +99.414 12.695 +99.67 12.482 +99.854 12.28 +99.963 12.091 +100 11.914 +99.957 11.636 +99.829 11.438 +99.615 11.319 +99.316 11.279 +98.656 11.464 +97.509 12.018 +95.873 12.941 +93.75 14.233 +91.284 15.807 +79.333 24.023 +73.669 28.125 +71.387 29.883 +70.542 30.559 +69.866 31.122 +69.357 31.572 +69.018 31.909 +68.793 32.194 +68.634 32.489 +68.538 32.793 +68.506 33.105 +BEGIN +75.391 33.984 +75.177 33.855 +74.975 33.765 +74.786 33.709 +74.609 33.691 +74.117 33.755 +73.767 33.948 +73.557 34.268 +73.486 34.717 +73.525 35.003 +73.645 35.277 +73.843 35.541 +74.121 35.791 +75.004 36.404 +76.189 36.975 +77.677 37.503 +79.467 37.988 +81.443 38.395 +83.489 38.684 +85.605 38.857 +87.793 38.916 +88.626 38.876 +89.221 38.757 +89.578 38.559 +89.697 38.281 +89.624 38.062 +89.404 37.891 +89.038 37.77 +86.595 37.425 +84.76 37.104 +83.018 36.729 +81.371 36.305 +79.798 35.82 +78.277 35.271 +76.808 34.661 +75.391 33.984 +BEGIN +90.234 6.494 +90.213 6.323 +90.148 6.201 +90.042 6.128 +89.893 6.104 +89.558 6.198 +89.092 6.482 +88.496 6.955 +87.768 7.617 +86.982 8.408 +86.212 9.265 +85.457 10.19 +84.717 11.182 +84.123 12.071 +83.562 12.982 +83.036 13.915 +82.543 14.868 +82.127 15.761 +81.829 16.51 +81.651 17.116 +81.592 17.578 +81.649 18.07 +81.823 18.42 +82.113 18.631 +82.52 18.701 +82.916 18.619 +83.275 18.372 +83.6 17.959 +83.887 17.383 +85.146 14.545 +86.535 11.939 +88.052 9.564 +89.697 7.422 +89.932 7.089 +90.1 6.824 +90.201 6.625 +90.234 6.494 +BEGIN +91.504 24.707 +90.661 24.689 +89.795 24.634 +88.903 24.542 +87.988 24.414 +87.756 24.371 +87.549 24.341 +87.365 24.323 +87.207 24.316 +86.822 24.372 +86.548 24.536 +86.383 24.811 +86.328 25.195 +86.615 25.815 +87.476 26.257 +88.91 26.523 +90.918 26.611 +93.615 26.468 +96.093 26.038 +98.352 25.321 +100.391 24.316 +100.754 24.039 +101.013 23.792 +101.169 23.575 +101.221 23.389 +101.196 23.26 +101.123 23.169 +101.001 23.114 +100.83 23.096 +100.76 23.108 +100 23.291 +99.008 23.613 +97.985 23.896 +96.933 24.138 +95.85 24.341 +94.754 24.501 +93.664 24.616 +92.581 24.684 +91.504 24.707 diff --git a/thirdparty/carve-1.4.0/tests/mersenne_twister.h b/thirdparty/carve-1.4.0/tests/mersenne_twister.h new file mode 100644 index 00000000..2a3383b9 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/mersenne_twister.h @@ -0,0 +1,424 @@ +// MersenneTwister.h +// Mersenne Twister random number generator -- a C++ class MTRand +// Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus +// Richard J. Wagner v1.0 15 May 2003 rjwagner@writeme.com + +// The Mersenne Twister is an algorithm for generating random numbers. It +// was designed with consideration of the flaws in various other generators. +// The period, 2^19937-1, and the order of equidistribution, 623 dimensions, +// are far greater. The generator is also fast; it avoids multiplication and +// division, and it benefits from caches and pipelines. For more information +// see the inventors' web page at http://www.math.keio.ac.jp/~matumoto/emt.html + +// Reference +// M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-Dimensionally +// Equidistributed Uniform Pseudo-Random Number Generator", ACM Transactions on +// Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30. + +// Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, +// Copyright (C) 2000 - 2003, Richard J. Wagner +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The names of its contributors may not be used to endorse or promote +// products derived from this software without specific prior written +// permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The original code included the following notice: +// +// When you use this, send an email to: matumoto@math.keio.ac.jp +// with an appropriate reference to your work. +// +// It would be nice to CC: rjwagner@writeme.com and Cokus@math.washington.edu +// when you write. + +#pragma once + +// Not thread safe (unless auto-initialization is avoided and each thread has +// its own MTRand object) + +#include +#include +#include +#include +#include + +#if !defined(_WIN32) +#include +#else +typedef unsigned long uint32_t; +#endif + +class MTRand { + // Data +public: + enum { N = 624 }; // length of state vector + enum { SAVE = N + 1 }; // length of array for save() + +protected: + enum { M = 397 }; // period parameter + + uint32_t state[N]; // internal state + uint32_t *pNext; // next value to get from state + int left; // number of values left before reload needed + + +//Methods +public: + MTRand(const uint32_t& oneSeed); // initialize with a simple uint32_t + MTRand(uint32_t *const bigSeed, uint32_t const seedLength = N); // or an array + MTRand(); // auto-initialize with /dev/urandom or time() and clock() + + // Do NOT use for CRYPTOGRAPHY without securely hashing several returned + // values together, otherwise the generator state can be learned after + // reading 624 consecutive values. + + // Access to 32-bit random numbers + double rand(); // real number in [0,1] + double rand(const double& n); // real number in [0,n] + double randExc(); // real number in [0,1) + double randExc(const double& n); // real number in [0,n) + double randDblExc(); // real number in (0,1) + double randDblExc(const double& n); // real number in (0,n) + uint32_t randInt(); // integer in [0,2^32-1] + uint32_t randInt(const uint32_t& n); // integer in [0,n] for n < 2^32 + double operator()() { return rand(); } // same as rand() + + // Access to 53-bit random numbers (capacity of IEEE double precision) + double rand53(); // real number in [0,1) + + // Access to nonuniform random number distributions + double randNorm(const double& mean = 0.0, const double& variance = 0.0); + + // Re-seeding functions with same behavior as initializers + void seed(const uint32_t oneSeed); + void seed(uint32_t *const bigSeed, const uint32_t seedLength = N); + void seed(); + + // Saving and loading generator state + void save(uint32_t* saveArray) const; // to array of size SAVE + void load(uint32_t *const loadArray); // from such array + friend std::ostream& operator<<(std::ostream& os, const MTRand& mtrand); + friend std::istream& operator>>(std::istream& is, MTRand& mtrand); + + protected: + void initialize(const uint32_t oneSeed); + void reload(); + + uint32_t hiBit(const uint32_t& u) const { + return u & 0x80000000UL; + } + uint32_t loBit(const uint32_t& u) const { + return u & 0x00000001UL; + } + uint32_t loBits(const uint32_t& u) const { + return u & 0x7fffffffUL; + } + + uint32_t mixBits(const uint32_t& u, const uint32_t& v) const { + return hiBit(u) | loBits(v); + } + + uint32_t twist(const uint32_t& m, const uint32_t& s0, const uint32_t& s1) const { + return m ^ (mixBits(s0,s1)>>1) ^ (-loBit(s1) & 0x9908b0dfUL); + } + + static uint32_t hash(time_t t, clock_t c); +}; + + +inline MTRand::MTRand(const uint32_t& oneSeed) { + seed(oneSeed); +} + +inline MTRand::MTRand(uint32_t *const bigSeed, const uint32_t seedLength) { + seed(bigSeed,seedLength); +} + +inline MTRand::MTRand() { + seed(); +} + +inline double MTRand::rand() { + return double(randInt()) * (1.0/4294967295.0); +} + +inline double MTRand::rand(const double& n) { + return rand() * n; +} + +inline double MTRand::randExc() { + return double(randInt()) * (1.0/4294967296.0); +} + +inline double MTRand::randExc(const double& n) { + return randExc() * n; +} + +inline double MTRand::randDblExc() { + return (double(randInt()) + 0.5) * (1.0/4294967296.0); +} + +inline double MTRand::randDblExc(const double& n) { + return randDblExc() * n; +} + +inline double MTRand::rand53() { + uint32_t a = randInt() >> 5, b = randInt() >> 6; + return (a * 67108864.0 + b) * (1.0/9007199254740992.0); // by Isaku Wada +} + +inline double MTRand::randNorm(const double& mean, const double& variance) { + // Return a real number from a normal (Gaussian) distribution with given + // mean and variance by Box-Muller method + double r = sqrt(-2.0 * log(1.0-randDblExc())) * variance; + double phi = 2.0 * 3.14159265358979323846264338328 * randExc(); + return mean + r * cos(phi); +} + +inline uint32_t MTRand::randInt() { + // Pull a 32-bit integer from the generator state + // Every other access function simply transforms the numbers extracted here + + if(left == 0) reload(); + --left; + + uint32_t s1; + s1 = *pNext++; + s1 ^= (s1 >> 11); + s1 ^= (s1 << 7) & 0x9d2c5680UL; + s1 ^= (s1 << 15) & 0xefc60000UL; + return (s1 ^ (s1 >> 18)); +} + +inline uint32_t MTRand::randInt(const uint32_t& n) { + // Find which bits are used in n + // Optimized by Magnus Jonsson (magnus@smartelectronix.com) + uint32_t used = n; + used |= used >> 1; + used |= used >> 2; + used |= used >> 4; + used |= used >> 8; + used |= used >> 16; + + // Draw numbers until one is found in [0,n] + uint32_t i; + do { + i = randInt() & used; // toss unused bits to shorten search + } while(i > n); + return i; +} + + +inline void MTRand::seed(const uint32_t oneSeed) { + // Seed the generator with a simple uint32_t + initialize(oneSeed); + reload(); +} + + +inline void MTRand::seed(uint32_t *const bigSeed, const uint32_t seedLength) { + // Seed the generator with an array of uint32_t's + // There are 2^19937-1 possible initial states. This function allows + // all of those to be accessed by providing at least 19937 bits (with a + // default seed length of N = 624 uint32_t's). Any bits above the lower 32 + // in each element are discarded. + // Just call seed() if you want to get array from /dev/urandom + initialize(19650218UL); + int i = 1; + uint32_t j = 0; + int k = (N > seedLength ? N : seedLength); + for(; k; --k) { + state[i] = + state[i] ^ ((state[i-1] ^ (state[i-1] >> 30)) * 1664525UL); + state[i] += (bigSeed[j] & 0xffffffffUL) + j; + state[i] &= 0xffffffffUL; + ++i; ++j; + if(i >= N) { state[0] = state[N-1]; i = 1; } + if(j >= seedLength) j = 0; + } + for(k = N - 1; k; --k) { + state[i] = state[i] ^ ((state[i-1] ^ (state[i-1] >> 30)) * 1566083941UL); + state[i] -= i; + state[i] &= 0xffffffffUL; + ++i; + if(i >= N) { state[0] = state[N-1]; i = 1; } + } + state[0] = 0x80000000UL; // MSB is 1, assuring non-zero initial array + reload(); +} + + +inline void MTRand::seed() { + // Seed the generator with an array from /dev/urandom if available + // Otherwise use a hash of time() and clock() values + + // First try getting an array from /dev/urandom + FILE* urandom = fopen("/dev/urandom", "rb"); + if(urandom) { + uint32_t bigSeed[N]; + uint32_t *s = bigSeed; + int i = N; + bool success = true; + while(success && i--) + success = fread(s++, sizeof(uint32_t), 1, urandom); + fclose(urandom); + if(success) { seed(bigSeed, N); return; } + } + + // Was not successful, so use time() and clock() instead + seed(hash(time(NULL), clock())); +} + + +inline void MTRand::initialize(const uint32_t seed) { + // Initialize generator state with seed + // See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier. + // In previous versions, most significant bits (MSBs) of the seed affect + // only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. + uint32_t *s = state; + uint32_t *r = state; + int i = 1; + *s++ = seed & 0xffffffffUL; + for(; i < N; ++i) { + *s++ = (1812433253UL * (*r ^ (*r >> 30)) + i) & 0xffffffffUL; + r++; + } +} + + +inline void MTRand::reload() { + // Generate N new values in state + // Made clearer and faster by Matthew Bellew (matthew.bellew@home.com) + uint32_t *p = state; + int i; + for(i = N - M; i--; ++p) + *p = twist(p[M], p[0], p[1]); + for(i = M; --i; ++p) + *p = twist(p[M-N], p[0], p[1]); + *p = twist(p[M-N], p[0], state[0]); + + left = N, pNext = state; +} + + +inline uint32_t MTRand::hash(time_t t, clock_t c) { + // Get a uint32_t from t and c + // Better than uint32_t(x) in case x is floating point in [0,1] + // Based on code by Lawrence Kirby (fred@genesis.demon.co.uk) + + static uint32_t differ = 0; // guarantee time-based seeds will change + + uint32_t h1 = 0; + unsigned char *p = (unsigned char *) &t; + for(size_t i = 0; i < sizeof(t); ++i) { + h1 *= UCHAR_MAX + 2U; + h1 += p[i]; + } + uint32_t h2 = 0; + p = (unsigned char *) &c; + for(size_t j = 0; j < sizeof(c); ++j) { + h2 *= UCHAR_MAX + 2U; + h2 += p[j]; + } + return (h1 + differ++) ^ h2; +} + + +inline void MTRand::save(uint32_t* saveArray) const { + uint32_t *sa = saveArray; + const uint32_t *s = state; + int i = N; + for(; i--; *sa++ = *s++) {} + *sa = left; +} + + +inline void MTRand::load(uint32_t *const loadArray) { + uint32_t *s = state; + uint32_t *la = loadArray; + int i = N; + for(; i--; *s++ = *la++) {} + left = *la; + pNext = &state[N-left]; +} + + +inline std::ostream& operator<<(std::ostream& os, const MTRand& mtrand) { + const uint32_t *s = mtrand.state; + int i = mtrand.N; + for(; i--; os << *s++ << "\t") {} + return os << mtrand.left; +} + + +inline std::istream& operator>>(std::istream& is, MTRand& mtrand) { + uint32_t *s = mtrand.state; + int i = mtrand.N; + for(; i--; is >> *s++) {} + is >> mtrand.left; + mtrand.pNext = &mtrand.state[mtrand.N-mtrand.left]; + return is; +} + +// Change log: +// +// v0.1 - First release on 15 May 2000 +// - Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus +// - Translated from C to C++ +// - Made completely ANSI compliant +// - Designed convenient interface for initialization, seeding, and +// obtaining numbers in default or user-defined ranges +// - Added automatic seeding from /dev/urandom or time() and clock() +// - Provided functions for saving and loading generator state +// +// v0.2 - Fixed bug which reloaded generator one step too late +// +// v0.3 - Switched to clearer, faster reload() code from Matthew Bellew +// +// v0.4 - Removed trailing newline in saved generator format to be consistent +// with output format of built-in types +// +// v0.5 - Improved portability by replacing static const int's with enum's and +// clarifying return values in seed(); suggested by Eric Heimburg +// - Removed MAXINT constant; use 0xffffffffUL instead +// +// v0.6 - Eliminated seed overflow when uint32_t is larger than 32 bits +// - Changed integer [0,n] generator to give better uniformity +// +// v0.7 - Fixed operator precedence ambiguity in reload() +// - Added access for real numbers in (0,1) and (0,n) +// +// v0.8 - Included time.h header to properly support time_t and clock_t +// +// v1.0 - Revised seeding to match 26 Jan 2002 update of Nishimura and Matsumoto +// - Allowed for seeding with arrays of any length +// - Added access for real numbers in [0,1) with 53-bit resolution +// - Added access for real numbers from normal (Gaussian) distributions +// - Increased overall speed by optimizing twist() +// - Doubled speed of integer [0,n] generation +// - Fixed out-of-range number generation on 64-bit machines +// - Improved portability by substituting literal constants for long enum's +// - Changed license from GNU LGPL to BSD diff --git a/thirdparty/carve-1.4.0/tests/offset.cpp b/thirdparty/carve-1.4.0/tests/offset.cpp new file mode 100644 index 00000000..aa87e885 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/offset.cpp @@ -0,0 +1,193 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include "scene.hpp" +#include "rgb.hpp" +#include "geom_draw.hpp" +#include "read_ply.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +// XXX: for the moment, we're only handling simple closed surfaces. + +struct EdgePlane { + carve::geom3d::Vector base, dir, norm; +}; + +typedef std::unordered_map EPMap; + +void makeEdgePlanes(const carve::poly::Polyhedron *poly, EPMap &edge_planes) { +#if defined(UNORDERED_COLLECTIONS_SUPPORT_RESIZE) + edge_planes.resize(poly->edges.size()); +#endif + + for (size_t i = 0; i < poly->edges.size(); ++i) { + EdgePlane &ep(edge_planes[&poly->edges[i]]); + + CARVE_ASSERT(poly->edges[i].faces.size() == 2); + + const carve::poly::Face *f1 = poly->edges[i].faces[0]; + const carve::poly::Face *f2 = poly->edges[i].faces[1]; + + CARVE_ASSERT(f1 && f2); + + ep.base = poly->edges[i].v2->v - poly->edges[i].v1->v; + ep.base.normalize(); + carve::geom3d::Vector d_1 = f1->plane_eqn.N + f2->plane_eqn.N; + carve::geom3d::Vector d_2 = cross(f1->plane_eqn.N, ep.base) - cross(f2->plane_eqn.N, ep.base); + ep.dir = d_2.length2() > d_1.length2() ? d_2 : d_1; + ep.dir.normalize(); + ep.norm = cross(ep.dir, ep.base); + + if (true) { + carve::geom3d::Vector v1 = (poly->edges[i].v1->v + poly->edges[i].v2->v) / 2.0; + carve::geom3d::Vector v2 = v1 + 0.075 * ep.dir; + glBegin(GL_LINES); + glColor4f(1.0, 1.0, 1.0, 1.0); + glVertex3f(v1.x, v1.y, v1.z); + glColor4f(1.0, 1.0, 1.0, 0.4); + glVertex3f(v2.x, v2.y, v2.z); + glEnd(); + } + } +} + +void makeVertexPaths(const carve::poly::Polyhedron *poly, const EPMap &edge_planes) { + for (size_t i = 0; i < poly->poly_vertices.size(); ++i) { + const carve::poly::Vertex *v = &poly->poly_vertices[i]; + const std::list &edges = v->v_edges; + + carve::geom3d::Vector sum = carve::geom::VECTOR(0.0, 0.0, 0.0); + + for (std::list::const_iterator i = edges.begin(), e = edges.end(); i != e; ++i) { + const carve::poly::Edge *e1 = (*i); + const EdgePlane &ep1(edge_planes.find(e1)->second); + carve::geom3d::Vector e1n = e1->v2 == v ? ep1.norm : -ep1.norm; + + std::list::const_iterator j = i; + for (++j; j != e; ++j) { + const carve::poly::Edge *e2 = (*j); + const EdgePlane &ep2(edge_planes.find(e2)->second); + carve::geom3d::Vector e2n = e2->v1 == v ? ep2.norm : -ep2.norm; + + carve::geom3d::Vector vertex_dir = cross(e2n, e1n); + + if (vertex_dir.isZero()) { + vertex_dir = (ep1.dir + ep2.dir).normalized(); + } else { + vertex_dir.normalize(); + } + sum += vertex_dir; + } + } + sum.normalize(); + + } +} + +void doOffset(const carve::poly::Polyhedron *poly, const double OFFSET) { + EPMap edge_planes; + + makeEdgePlanes(poly, edge_planes); + makeVertexPaths(poly, edge_planes); + + const carve::poly::Face *f = poly->faces.front(); +} + +int main(int argc, char **argv) { + carve::poly::Polyhedron *input = readPLY(argv[1]); + double offset = strtod(argv[2], NULL); + + TestScene *scene = new TestScene(argc, argv, 3); + + glNewList(scene->draw_list_base, GL_COMPILE); + doOffset(input, offset); + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + drawPolyhedron(input, .6, .6, .6, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 2, GL_COMPILE); + drawPolyhedronWireframe(input); + glEndList(); + + scene->draw_flags[0] = true; + scene->draw_flags[1] = true; + scene->draw_flags[2] = true; + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/problem.cpp b/thirdparty/carve-1.4.0/tests/problem.cpp new file mode 100644 index 00000000..6533a736 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/problem.cpp @@ -0,0 +1,211 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include "scene.hpp" +#include "rgb.hpp" +#include "geom_draw.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +int main(int argc, char **argv) { +#define N_NORMALS 4 + carve::geom3d::Vector normals[N_NORMALS]; + + normals[0] = carve::geom::VECTOR(cos(.1),sin(.1),sin(.1)).normalized(); + normals[1] = carve::geom::VECTOR(cos(.8),sin(.8),sin(.8)).normalized(); + normals[2] = carve::geom::VECTOR(cos(-1.6),sin(-1.6),sin(-1.6)).normalized(); + normals[3] = carve::geom::VECTOR(cos(-2.5),sin(-2.5),sin(-2.5)).normalized(); + + TestScene *scene = new TestScene(argc, argv, 1); + + double d[100][100]; + carve::geom3d::Vector p[100][100]; + + double max_d = 0.0; + double min_d = 10000.0; + + for (int ring = 0; ring < 100; ++ring) { + double ra = M_PI * ring / 99.0; + double z = cos(ra); + double rr = sin(ra); + for (int slice = 0; slice < 100; ++slice) { + double rb = M_PI * 2.0 * slice / 100.0; + double x = sin(rb) * rr; + double y = cos(rb) * rr; + p[ring][slice] = carve::geom::VECTOR(x,y,z); + double dist = 0.0; + for (int i = 0; i < N_NORMALS; ++i) { + dist += pow(dot(normals[i], p[ring][slice]), 2.0); + } + std::cerr << x << " " << y << " " << z << " " << dist << std::endl; + d[ring][slice] = dist; + max_d = std::max(dist, max_d); + min_d = std::min(dist, min_d); + } + } + + glNewList(scene->draw_list_base, GL_COMPILE); + + glBegin(GL_TRIANGLES); + for (int ring = 0; ring < 99; ++ring) { + for (int slice = 0; slice < 100; ++slice) { +#define VERT(x, y) do { double k = (d[x][y] - min_d) / (max_d - min_d); k = pow(k, 0.1); glColor4f(k, k, k, 1.0); glVertex3dv(p[x][y].v); } while(0) + VERT(ring, slice); + VERT(ring + 1, (slice + 1) % 100); + VERT(ring + 1, slice); + + VERT(ring, slice); + VERT(ring, (slice + 1) % 100); + VERT(ring + 1, (slice + 1) % 100); + } + } + glEnd(); + + carve::math::Matrix3 m; + for (int i = 0; i < 3; ++i) { + for (int j = i; j < 3; ++j) { + double d = 0.0; + for (int k = 0; k < N_NORMALS; ++k) { + d += normals[k].v[i] * normals[k].v[j]; + } + m.m[i][j] = m.m[j][i] = d; + } + } + + double l1, l2, l3; + carve::geom3d::Vector e1, e2, e3; + carve::math::eigSolveSymmetric(m, l1, e1, l2, e2, l3, e3); + e1 = e1 * 2.0; + e2 = e2 * 2.0; + e3 = e3 * 2.0; + + glLineWidth(3.0); + glBegin(GL_LINES); + if (fabs(l1) < fabs(l2) && fabs(l1) < fabs(l3)) glColor4f(1,1,1,1); else glColor4f(0,0,0,1); + glVertex3f(0,0,0); + glVertex3dv(e1.v); + if (fabs(l2) < fabs(l1) && fabs(l2) < fabs(l3)) glColor4f(1,1,1,1); else glColor4f(0,0,0,1); + glVertex3f(0,0,0); + glVertex3dv(e2.v); + if (fabs(l3) < fabs(l1) && fabs(l3) < fabs(l2)) glColor4f(1,1,1,1); else glColor4f(0,0,0,1); + glVertex3f(0,0,0); + glVertex3dv(e3.v); + glEnd(); + glLineWidth(1.0); + + glEnable(GL_BLEND); + glDisable(GL_LIGHTING); + glDisable(GL_CULL_FACE); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glBegin(GL_LINES); + for (int i = 0; i < N_NORMALS; i++) { + carve::geom3d::Vector N = normals[i]; + N = N * 2.0; + glColor4f(.5 + (i & 1 ? .5 : .0), .5 + (i & 2 ? .5 : .0), .5 + (i & 4 ? .5 : .0), 1); + glVertex3f(0,0,0); + glVertex3dv(N.v); + } + glEnd(); + + glBegin(GL_QUADS); + for (int i = 0; i < N_NORMALS; i++) { + carve::geom3d::Vector N = normals[i]; + carve::geom3d::Vector V1 = carve::geom::VECTOR(N.y, N.z, N.x); + carve::geom3d::Vector V2 = cross(N, V1).normalized(); + V1 = cross(N, V2); + carve::geom3d::Vector V; + + glColor4f(.5 + (i & 1 ? .5 : .0), .5 + (i & 2 ? .5 : .0), .5 + (i & 4 ? .5 : .0), .2); + V = + 3 * V1 + 3 * V2 ; glVertex3dv(V.v); + V = + 3 * V1 - 3 * V2 ; glVertex3dv(V.v); + V = - 3 * V1 - 3 * V2 ; glVertex3dv(V.v); + V = - 3 * V1 + 3 * V2 ; glVertex3dv(V.v); + } + glEnd(); + + glDisable(GL_BLEND); + glEnable(GL_LIGHTING); + glEnable(GL_CULL_FACE); + + glEndList(); + + scene->draw_flags[0] = true; + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test.txt b/thirdparty/carve-1.4.0/tests/test.txt new file mode 100644 index 00000000..9bb77142 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test.txt @@ -0,0 +1,10 @@ +BEGIN +1 1 +-1 1 +-1 -1 +1 -1 +BEGIN +.5 .5 +.5 -.5 +-.5 -.5 +-.5 .5 diff --git a/thirdparty/carve-1.4.0/tests/test_aabb.cpp b/thirdparty/carve-1.4.0/tests/test_aabb.cpp new file mode 100644 index 00000000..7ea51a70 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_aabb.cpp @@ -0,0 +1,74 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include +#include +#include + +int main(int argc, char **argv) { + carve::geom3d::AABB aabb(carve::geom::VECTOR(0,0,0), carve::geom::VECTOR(1,1,1)); + + std::ifstream in("aabb.test"); + while (in.good()) { + double x1, y1, z1; + double x2, y2, z2; + char ray_intersects[10]; + char lineseg_intersects[10]; + bool ri; + bool li; + std::string line; + + std::getline(in, line); + sscanf(line.c_str(), + "<%lf,%lf,%lf>\t<%lf,%lf,%lf>\t%s\t%s", + &x1, &y1, &z1, + &x2, &y2, &z2, + ray_intersects, lineseg_intersects); + + carve::geom3d::Vector v1 = carve::geom::VECTOR(x1, y1, z1); + carve::geom3d::Vector v2 = carve::geom::VECTOR(x2, y2, z2); + + carve::geom3d::Ray r(v2 - v1, v1); + carve::geom3d::LineSegment l(v1, v2); + + ri = !std::strcmp(ray_intersects, "True"); + li = !std::strcmp(lineseg_intersects, "True"); + + bool ri_t = aabb.intersects(r); + bool li_t = aabb.intersectsLineSegment(l.v1, l.v2); + + if (li != li_t || ri != ri_t) std::cout << line << std::endl; + + if (ri != ri_t) { + std::cout << "RAY: " << ri << " " << ri_t << std::endl; + } + if (li != li_t) { + std::cout << "LINE: " << li << " " << li_t << std::endl; + std::cout << "LINE MIDPOINT = " << l.midpoint.asStr() << std::endl; + aabb.intersectsLineSegment(l.v1, l.v2); + } + if (li != li_t || ri != ri_t) std::cout << std::endl; + } +} diff --git a/thirdparty/carve-1.4.0/tests/test_aabb_tri.cpp b/thirdparty/carve-1.4.0/tests/test_aabb_tri.cpp new file mode 100644 index 00000000..6e2a9fc7 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_aabb_tri.cpp @@ -0,0 +1,332 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include +#include +#include +#include + +#include "mersenne_twister.h" + +/********************************************************/ +/* AABB-triangle overlap test code */ +/* by Tomas Akenine-Möller */ +/* Function: int triBoxOverlap(double boxcenter[3], */ +/* double boxhalfsize[3],double triverts[3][3]); */ +/* History: */ +/* 2001-03-05: released the code in its first version */ +/* 2001-06-18: changed the order of the tests, faster */ +/* */ +/* Acknowledgement: Many thanks to Pierre Terdiman for */ +/* suggestions and discussions on how to optimize code. */ +/* Thanks to David Hunt for finding a ">="-bug! */ +/********************************************************/ +#include +#include + +#define X 0 +#define Y 1 +#define Z 2 + +#define CROSS(dest,v1,v2) \ + dest[0]=v1[1]*v2[2]-v1[2]*v2[1]; \ + dest[1]=v1[2]*v2[0]-v1[0]*v2[2]; \ + dest[2]=v1[0]*v2[1]-v1[1]*v2[0]; + +#define DOT(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]) + +#define SUB(dest,v1,v2) \ + dest[0]=v1[0]-v2[0]; \ + dest[1]=v1[1]-v2[1]; \ + dest[2]=v1[2]-v2[2]; + +#define FINDMINMAX(x0,x1,x2,min,max) \ + min = max = x0; \ + if(x1max) max=x1;\ + if(x2max) max=x2; + +int planeBoxOverlap(double normal[3], double vert[3], double maxbox[3]) // -NJMP- +{ + int q; + double vmin[3],vmax[3],v; + for(q=X;q<=Z;q++) + { + v=vert[q]; // -NJMP- + if(normal[q]>0.0f) + { + vmin[q]=-maxbox[q] - v; // -NJMP- + vmax[q]= maxbox[q] - v; // -NJMP- + } + else + { + vmin[q]= maxbox[q] - v; // -NJMP- + vmax[q]=-maxbox[q] - v; // -NJMP- + } + } + if(DOT(normal,vmin)>0.0f) return 0; // -NJMP- + if(DOT(normal,vmax)>=0.0f) return 1; // -NJMP- + + return 0; +} + +/*======================== X-tests ========================*/ +#define AXISTEST_X01(a, b, fa, fb, on_fail) \ + p0 = a*v0[Y] - b*v0[Z]; \ + p2 = a*v2[Y] - b*v2[Z]; \ + if(p0rad || max<-rad) on_fail; +#define AXISTEST_X2(a, b, fa, fb, on_fail) \ + p0 = a*v0[Y] - b*v0[Z]; \ + p1 = a*v1[Y] - b*v1[Z]; \ + if(p0rad || max<-rad) on_fail; + +/*======================== Y-tests ========================*/ +#define AXISTEST_Y02(a, b, fa, fb, on_fail) \ + p0 = -a*v0[X] + b*v0[Z]; \ + p2 = -a*v2[X] + b*v2[Z]; \ + if(p0rad || max<-rad) on_fail; +#define AXISTEST_Y1(a, b, fa, fb, on_fail) \ + p0 = -a*v0[X] + b*v0[Z]; \ + p1 = -a*v1[X] + b*v1[Z]; \ + if(p0rad || max<-rad) on_fail; + +/*======================== Z-tests ========================*/ +#define AXISTEST_Z12(a, b, fa, fb, on_fail) \ + p1 = a*v1[X] - b*v1[Y]; \ + p2 = a*v2[X] - b*v2[Y]; \ + if(p2rad || max<-rad) on_fail; +#define AXISTEST_Z0(a, b, fa, fb, on_fail) \ + p0 = a*v0[X] - b*v0[Y]; \ + p1 = a*v1[X] - b*v1[Y]; \ + if(p0rad || max<-rad) on_fail; + +int triBoxOverlap_test(double boxcenter[3],double boxhalfsize[3],double triverts[3][3]) +{ + /* use separating axis theorem to test overlap between triangle and box */ + /* need to test for overlap in these directions: */ + /* 1) the {x,y,z}-directions (actually, since we use the AABB of the triangle */ + /* we do not even need to test these) */ + /* 2) normal of the triangle */ + /* 3) crossproduct(edge from tri, {x,y,z}-directin) */ + /* this gives 3x3=9 more tests */ + double v0[3],v1[3],v2[3]; +// double axis[3]; + double min,max,p0,p1,p2,rad,fex,fey,fez; // -NJMP- "d" local variable removed + double normal[3],e0[3],e1[3],e2[3]; + /* This is the fastest branch on Sun */ + /* move everything so that the boxcenter is in (0,0,0) */ + SUB(v0,triverts[0],boxcenter); + SUB(v1,triverts[1],boxcenter); + SUB(v2,triverts[2],boxcenter); + /* compute triangle edges */ + SUB(e0,v1,v0); /* tri edge 0 */ + SUB(e1,v2,v1); /* tri edge 1 */ + SUB(e2,v0,v2); /* tri edge 2 */ + /* Bullet 3: */ + /* test the 9 tests first (this was faster) */ + fex = fabsf(e0[X]); + fey = fabsf(e0[Y]); + fez = fabsf(e0[Z]); + unsigned test_result = 0; +#define TEST(x) test_result |= x + AXISTEST_X01(e0[Z], e0[Y], fez, fey, TEST(0x0001)); + AXISTEST_Y02(e0[Z], e0[X], fez, fex, TEST(0x0002)); + AXISTEST_Z12(e0[Y], e0[X], fey, fex, TEST(0x0004)); + fex = fabsf(e1[X]); + fey = fabsf(e1[Y]); + fez = fabsf(e1[Z]); + AXISTEST_X01(e1[Z], e1[Y], fez, fey, TEST(0x0008)); + AXISTEST_Y02(e1[Z], e1[X], fez, fex, TEST(0x0010)); + AXISTEST_Z0( e1[Y], e1[X], fey, fex, TEST(0x0020)); + fex = fabsf(e2[X]); + fey = fabsf(e2[Y]); + fez = fabsf(e2[Z]); + AXISTEST_X2( e2[Z], e2[Y], fez, fey, TEST(0x0040)); + AXISTEST_Y1( e2[Z], e2[X], fez, fex, TEST(0x0080)); + AXISTEST_Z12(e2[Y], e2[X], fey, fex, TEST(0x0100)); + /* Bullet 1: */ + /* first test overlap in the {x,y,z}-directions */ + /* find min, max of the triangle each direction, and test for overlap in */ + /* that direction -- this is equivalent to testing a minimal AABB around */ + /* the triangle against the AABB */ + /* test in X-direction */ + FINDMINMAX(v0[X],v1[X],v2[X],min,max); + if(min>boxhalfsize[X] || max<-boxhalfsize[X]) TEST(0x0200); + /* test in Y-direction */ + FINDMINMAX(v0[Y],v1[Y],v2[Y],min,max); + if(min>boxhalfsize[Y] || max<-boxhalfsize[Y]) TEST(0x0400); + /* test in Z-direction */ + FINDMINMAX(v0[Z],v1[Z],v2[Z],min,max); + if(min>boxhalfsize[Z] || max<-boxhalfsize[Z]) TEST(0x0800); + /* Bullet 2: */ + /* test if the box intersects the plane of the triangle */ + /* compute plane equation of triangle: normal*x+d=0 */ + CROSS(normal,e0,e1); + // -NJMP- (line removed here) + if(!planeBoxOverlap(normal,v0,boxhalfsize)) TEST(0x1000); // -NJMP- + return test_result; /* box and triangle overlaps */ +} + +int triBoxOverlap_optimized(double boxcenter[3],double boxhalfsize[3],double triverts[3][3]) +{ + /* use separating axis theorem to test overlap between triangle and box */ + /* need to test for overlap in these directions: */ + /* 1) the {x,y,z}-directions (actually, since we use the AABB of the triangle */ + /* we do not even need to test these) */ + /* 2) normal of the triangle */ + /* 3) crossproduct(edge from tri, {x,y,z}-directin) */ + /* this gives 3x3=9 more tests */ + double v0[3],v1[3],v2[3]; +// double axis[3]; + double min,max,p0,p1,p2,rad,fex,fey,fez; // -NJMP- "d" local variable removed + double normal[3],e0[3],e1[3],e2[3]; + /* This is the fastest branch on Sun */ + /* move everything so that the boxcenter is in (0,0,0) */ + SUB(v0,triverts[0],boxcenter); + SUB(v1,triverts[1],boxcenter); + SUB(v2,triverts[2],boxcenter); + /* compute triangle edges */ + SUB(e0,v1,v0); /* tri edge 0 */ + SUB(e1,v2,v1); /* tri edge 1 */ + SUB(e2,v0,v2); /* tri edge 2 */ + /* Bullet 3: */ + /* test the 9 tests first (this was faster) */ + fex = fabsf(e0[X]); + fey = fabsf(e0[Y]); + fez = fabsf(e0[Z]); + AXISTEST_X01(e0[Z], e0[Y], fez, fey, return 1); + AXISTEST_Y02(e0[Z], e0[X], fez, fex, return 1); + AXISTEST_Z12(e0[Y], e0[X], fey, fex, return 1); + fex = fabsf(e1[X]); + fey = fabsf(e1[Y]); + fez = fabsf(e1[Z]); + AXISTEST_X01(e1[Z], e1[Y], fez, fey, return 1); + AXISTEST_Y02(e1[Z], e1[X], fez, fex, return 1); + AXISTEST_Z0( e1[Y], e1[X], fey, fex, return 1); + fex = fabsf(e2[X]); + fey = fabsf(e2[Y]); + fez = fabsf(e2[Z]); + AXISTEST_X2( e2[Z], e2[Y], fez, fey, return 1); + AXISTEST_Y1( e2[Z], e2[X], fez, fex, return 1); + AXISTEST_Z12(e2[Y], e2[X], fey, fex, return 1); + /* Bullet 1: */ + /* first test overlap in the {x,y,z}-directions */ + /* find min, max of the triangle each direction, and test for overlap in */ + /* that direction -- this is equivalent to testing a minimal AABB around */ + /* the triangle against the AABB */ + /* test in X-direction */ + FINDMINMAX(v0[X],v1[X],v2[X],min,max); + if(min>boxhalfsize[X] || max<-boxhalfsize[X]) return 1; + /* test in Y-direction */ + FINDMINMAX(v0[Y],v1[Y],v2[Y],min,max); + if(min>boxhalfsize[Y] || max<-boxhalfsize[Y]) return 1; + /* test in Z-direction */ + FINDMINMAX(v0[Z],v1[Z],v2[Z],min,max); + if(min>boxhalfsize[Z] || max<-boxhalfsize[Z]) return 1; + /* Bullet 2: */ + /* test if the box intersects the plane of the triangle */ + /* compute plane equation of triangle: normal*x+d=0 */ + CROSS(normal,e0,e1); + // -NJMP- (line removed here) + if(!planeBoxOverlap(normal,v0,boxhalfsize)) return 1; // -NJMP- + return 0; /* box and triangle overlaps */ +} + +MTRand rnd; + +double randrange(double min, double max) { + return rnd.rand(max - min) + min; +} + +carve::geom::vector<3> randomVector() { + return carve::geom::VECTOR(randrange(-4.0, +4.0), randrange(-4.0, +4.0), randrange(-4.0, +4.0)); +} + +carve::geom::tri<3> randomTriangle() { + return carve::geom::tri<3>(randomVector(), randomVector(), randomVector()); +} + +int main(int argc, char **argv) { + carve::geom::aabb<3> aabb(carve::geom::VECTOR(0,0,0), carve::geom::VECTOR(1,1,1)); + + for (unsigned i = 0; i < 1000000; ++i) { + carve::geom::tri<3> tri(randomTriangle()); + double triverts[3][3]; + for (unsigned x = 0; x < 3; ++x) { + for (unsigned y = 0; y < 3; ++y) { + triverts[x][y] = tri.v[x][y]; + } + } + bool a = aabb.intersects(tri); + unsigned b = triBoxOverlap_test(aabb.pos.v, aabb.extent.v, triverts); + if (a != !(bool)b) { + std::cerr << "i=" << i << " disagreement (" << a << ":" << std::hex << b << std::dec << ") over aabb=" << aabb << " tri=" << tri << std::endl; + std::cout << +"ply\n" +"format ascii 1.0\n" +"element vertex 11\n" +"property double x\n" +"property double y\n" +"property double z\n" +"element face 7\n" +"property list uchar ushort vertex_indices\n" +"end_header\n"; + carve::geom::vector<3> amin = aabb.min(), amax = aabb.max(); + std::cout << amax.x << " " << amin.y << " " << amin.z << std::endl; + std::cout << amin.x << " " << amin.y << " " << amin.z << std::endl; + std::cout << amin.x << " " << amax.y << " " << amin.z << std::endl; + std::cout << amax.x << " " << amax.y << " " << amin.z << std::endl; + + std::cout << amax.x << " " << amin.y << " " << amax.z << std::endl; + std::cout << amin.x << " " << amin.y << " " << amax.z << std::endl; + std::cout << amin.x << " " << amax.y << " " << amax.z << std::endl; + std::cout << amax.x << " " << amax.y << " " << amax.z << std::endl; + std::cout << tri.v[0].x << " " << tri.v[0].y << " " << tri.v[0].z << std::endl; + std::cout << tri.v[1].x << " " << tri.v[1].y << " " << tri.v[1].z << std::endl; + std::cout << tri.v[2].x << " " << tri.v[2].y << " " << tri.v[2].z << std::endl; + std::cout << +"4 0 1 2 3\n" +"4 1 0 4 5\n" +"4 2 1 5 6\n" +"4 3 2 6 7\n" +"4 0 3 7 4\n" +"4 7 6 5 4\n" +"3 8 9 10\n"; + throw std::runtime_error("failed"); + } + } +} diff --git a/thirdparty/carve-1.4.0/tests/test_carve_polyhedrons_2.cpp b/thirdparty/carve-1.4.0/tests/test_carve_polyhedrons_2.cpp new file mode 100644 index 00000000..7579b4de --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_carve_polyhedrons_2.cpp @@ -0,0 +1,84 @@ +#include +#include +#include + +#include +#include + +typedef carve::poly::Vertex<3> vertex_t; +typedef carve::poly::Edge<3> edge_t; +typedef carve::poly::Face<3> face_t; + + +int main() +{ + //create a tetrahedron + std::vector > tet_verts; + std::vector > tet_faces; + std::vector corners; + + tet_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(0.0, 0.0, 0.0))); + tet_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(1.0, 0.0, 0.0))); + tet_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(0.0, 1.0, 0.0))); + tet_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(0.0, 0.0, 1.0))); + + corners.push_back(&tet_verts[0]); + corners.push_back(&tet_verts[2]); + corners.push_back(&tet_verts[1]); + tet_faces.push_back(face_t(corners)); + + corners.clear(); + corners.push_back(&tet_verts[0]); + corners.push_back(&tet_verts[1]); + corners.push_back(&tet_verts[3]); + tet_faces.push_back(face_t(corners)); + + corners.clear(); + corners.push_back(&tet_verts[0]); + corners.push_back(&tet_verts[3]); + corners.push_back(&tet_verts[2]); + tet_faces.push_back(face_t(corners)); + + corners.clear(); + corners.push_back(&tet_verts[1]); + corners.push_back(&tet_verts[2]); + corners.push_back(&tet_verts[3]); + tet_faces.push_back(face_t(corners)); + + carve::poly::Polyhedron tetrahedron(tet_faces); + + //create a triangle + std::vector > tri_verts; + std::vector > tri_faces; + + //Vertices + //crashes if last coordinate set to 1e-8, but ok for 1e-7 + tri_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(-0.3, 0.0, 1e-8))); + tri_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(1.0, 0.0, 1.1e-8))); + tri_verts.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(-0.3, 1.0, 1.1e-8))); + + //Face + corners.clear(); + corners.push_back(&tri_verts[0]); + corners.push_back(&tri_verts[2]); + corners.push_back(&tri_verts[1]); + tri_faces.push_back(face_t(corners)); + +// corners.clear(); +// corners.push_back(&tri_verts[0]); +// corners.push_back(&tri_verts[1]); +// corners.push_back(&tri_verts[2]); +// tri_faces.push_back(face_t(corners)); + + carve::poly::Polyhedron triangle(tri_faces); + + //cut triangle with tetrahedron. + carve::poly::Polyhedron * is_poly = carve::csg::CSG().compute(&tetrahedron,&triangle, + carve::csg::CSG::INTERSECTION); + + std::cout << "Tetrahedron is ... \n" << tetrahedron; + std::cout << "Triangle is ... \n" << triangle; + std::cout << "Intersection is ... \n" << *is_poly; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_csg_interpolate.cpp b/thirdparty/carve-1.4.0/tests/test_csg_interpolate.cpp new file mode 100644 index 00000000..b9f570ff --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_csg_interpolate.cpp @@ -0,0 +1,229 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include + +#include "geom_draw.hpp" +#include "geometry.hpp" +#include "scene.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +#include "rgb.hpp" +#include "geometry.hpp" + +typedef carve::poly::Polyhedron poly_t; + +static inline void glVertex(const carve::geom3d::Vector &v) { + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); +} + +static inline void glColor(const cRGBA &c) { + glColor4f(c.r, c.g, c.b, c.a); +} + +carve::interpolate::FaceVertexAttr fv_colours; + +void drawColourPolyhedron(poly_t *poly, float r, float g, float b, float a, bool offset) { + if (offset) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.5, 0.5); + } + + cRGBA cdefault = cRGBA(r, g, b); + glColor(cdefault); + + std::vector vc; + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glBegin(GL_TRIANGLES); + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + poly_t::face_t &f = poly->faces[i]; + if (f.nVertices() == 3) { + glNormal3dv(f.plane_eqn.N.v); + glColor(fv_colours.getAttribute(&f, 0, cdefault)); + glVertex(f.vertex(0)->v); + glColor(fv_colours.getAttribute(&f, 1, cdefault)); + glVertex(f.vertex(1)->v); + glColor(fv_colours.getAttribute(&f, 2, cdefault)); + glVertex(f.vertex(2)->v); + } + } + glEnd(); + if (offset) { + glDisable(GL_POLYGON_OFFSET_FILL); + } + + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + poly_t::face_t &f = poly->faces[i]; + if (f.nVertices() != 3) { + vc.resize(f.nVertices()); + for (size_t j = 0; j < f.nVertices(); ++j) { + vc[j] = fv_colours.getAttribute(&f, j, cdefault); + } + drawColourFace(&poly->faces[i], vc, offset); + } + } +} + +poly_t *colourCube(const carve::math::Matrix &transform = carve::math::Matrix::IDENT()) { + std::vector v; + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, +1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, +1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, -1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, -1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, +1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, +1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, -1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, -1.0, -1.0))); + + std::vector faces; + faces.reserve(6); + + faces.push_back(poly_t::face_t(&v[0], &v[1], &v[2], &v[3])); + fv_colours.setAttribute(&faces[0], 0, cRGBA(0,0,1)); + fv_colours.setAttribute(&faces[0], 1, cRGBA(0,0,0)); + fv_colours.setAttribute(&faces[0], 2, cRGBA(0,1,1)); + fv_colours.setAttribute(&faces[0], 3, cRGBA(1,0,1)); + + faces.push_back(poly_t::face_t(&v[7], &v[6], &v[5], &v[4])); + fv_colours.setAttribute(&faces[1], 0, cRGBA(0,1,0)); + fv_colours.setAttribute(&faces[1], 1, cRGBA(0,1,1)); + fv_colours.setAttribute(&faces[1], 2, cRGBA(0,0,0)); + fv_colours.setAttribute(&faces[1], 3, cRGBA(1,1,0)); + + faces.push_back(poly_t::face_t(&v[0], &v[4], &v[5], &v[1])); + fv_colours.setAttribute(&faces[2], 0, cRGBA(0,1,1)); + fv_colours.setAttribute(&faces[2], 1, cRGBA(0,1,0)); + fv_colours.setAttribute(&faces[2], 2, cRGBA(0,0,1)); + fv_colours.setAttribute(&faces[2], 3, cRGBA(1,1,1)); + + faces.push_back(poly_t::face_t(&v[1], &v[5], &v[6], &v[2])); + fv_colours.setAttribute(&faces[3], 0, cRGBA(1,0,0)); + fv_colours.setAttribute(&faces[3], 1, cRGBA(1,0,1)); + fv_colours.setAttribute(&faces[3], 2, cRGBA(1,1,0)); + fv_colours.setAttribute(&faces[3], 3, cRGBA(0,0,0)); + + faces.push_back(poly_t::face_t(&v[2], &v[6], &v[7], &v[3])); + fv_colours.setAttribute(&faces[4], 0, cRGBA(1,0,1)); + fv_colours.setAttribute(&faces[4], 1, cRGBA(1,0,0)); + fv_colours.setAttribute(&faces[4], 2, cRGBA(1,1,1)); + fv_colours.setAttribute(&faces[4], 3, cRGBA(0,0,1)); + + faces.push_back(poly_t::face_t(&v[3], &v[7], &v[4], &v[0])); + fv_colours.setAttribute(&faces[5], 0, cRGBA(1,1,0)); + fv_colours.setAttribute(&faces[5], 1, cRGBA(1,1,1)); + fv_colours.setAttribute(&faces[5], 2, cRGBA(1,0,0)); + fv_colours.setAttribute(&faces[5], 3, cRGBA(0,1,0)); + + + return new poly_t(faces); +} + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +int main(int argc, char **argv) { + installDebugHooks(); + + TestScene *scene = new TestScene(argc, argv, 4); + + g_scale = 10.0; + + glNewList(scene->draw_list_base, GL_COMPILE); + poly_t *a = colourCube(carve::math::Matrix::ROT(.4, .2, .3, .4)); + poly_t *b = makeTorus(20, 20, .9, .5); + carve::csg::CSG csg; + fv_colours.installHooks(csg); + poly_t *c = csg.compute(a, b, carve::csg::CSG::A_MINUS_B); + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + drawColourPolyhedron(a, .6, .6, .6, 1.0, false); + glEndList(); + glNewList(scene->draw_list_base + 2, GL_COMPILE); + drawColourPolyhedron(b, .6, .6, .6, 1.0, false); + glEndList(); + glNewList(scene->draw_list_base + 3, GL_COMPILE); + drawColourPolyhedron(c, .6, .6, .6, 1.0, false); + glEndList(); + + scene->draw_flags[0] = false; + scene->draw_flags[1] = false; + scene->draw_flags[2] = false; + scene->draw_flags[3] = true; + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_eigen.cpp b/thirdparty/carve-1.4.0/tests/test_eigen.cpp new file mode 100644 index 00000000..d310a6be --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_eigen.cpp @@ -0,0 +1,53 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include + +#define D(x) strtod(x, NULL) + +int main(int argc, char **argv) { + carve::math::Matrix3 m; + m._11 = D(argv[1]); m._12 = D(argv[2]); m._13 = D(argv[3]); + m._21 = D(argv[2]); m._22 = D(argv[4]); m._23 = D(argv[5]); + m._31 = D(argv[3]); m._32 = D(argv[5]); m._33 = D(argv[6]); + + double l1, l2, l3; + carve::geom3d::Vector e1, e2, e3; + + carve::math::eigSolveSymmetric(m, l1, e1, l2, e2, l3, e3); + std::cout << l1 << " " << e1 << std::endl; + std::cout << l2 << " " << e2 << std::endl; + std::cout << l3 << " " << e3 << std::endl; + + std::cout << m * e1 - l1 * e1 << " " << (m * e1 - l1 * e1).isZero() << std::endl; + std::cout << m * e2 - l2 * e2 << " " << (m * e2 - l2 * e2).isZero() << std::endl; + std::cout << m * e3 - l3 * e3 << " " << (m * e3 - l3 * e3).isZero() << std::endl; + + eigSolve(m, l1, l2, l3); + + std::cout << l1 << " " << e1 << std::endl; + std::cout << l2 << " " << e2 << std::endl; + std::cout << l3 << " " << e3 << std::endl; + +} diff --git a/thirdparty/carve-1.4.0/tests/test_geom.cpp b/thirdparty/carve-1.4.0/tests/test_geom.cpp new file mode 100644 index 00000000..8198cd58 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_geom.cpp @@ -0,0 +1,23 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#include + +int main(int argc, char **argv) { + carve::geom::vector<4> v; + v.x = 1.0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_hole_incorporate.cpp b/thirdparty/carve-1.4.0/tests/test_hole_incorporate.cpp new file mode 100644 index 00000000..1d0108ed --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_hole_incorporate.cpp @@ -0,0 +1,176 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include "coords.h" +#include "geom_draw.hpp" +#include "scene.hpp" + +#include +#include + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include + +#if defined(__GNUC__) +#define __stdcall +#endif + +#if defined(GLU_TESS_CALLBACK_VARARGS) + typedef GLvoid (_stdcall *GLUTessCallback)(...); +#else + typedef void (__stdcall *GLUTessCallback)(); +#endif + +struct TestScene : public Scene { + GLuint d_list; + + virtual bool key(unsigned char k, int x, int y) { + return true; + } + + virtual GLvoid draw() { + glCallList(d_list); + } + + TestScene(int argc, char **argv) : Scene(argc, argv) { + d_list = glGenLists(1); + } + + virtual ~TestScene() { + glDeleteLists(d_list, 1); + } +}; + +int main(int argc, char **argv) { + TestScene *scene = new TestScene(argc, argv); + + typedef std::vector loop_t; + std::vector poly; + + std::ifstream in(argv[1]); + while (in.good()) { + std::string s; + std::getline(in, s); + if (s == "BEGIN") { + poly.push_back(loop_t()); + } else { + std::istringstream in_s(s); + double x,y; + in_s >> x >> y; + poly.back().push_back(carve::geom::VECTOR(x, y)); + } + } + + std::vector > result; + std::vector merged; + std::vector triangulated; + + try { + result = carve::triangulate::incorporateHolesIntoPolygon(poly); + merged.reserve(result.size()); + for (size_t i = 0; i < result.size(); ++i) { + merged.push_back(poly[result[i].first][result[i].second]); + } + carve::triangulate::triangulate(merged, triangulated); + carve::triangulate::improve(merged, triangulated); + + } catch (carve::exception exc) { + std::cerr << "FAIL: " << exc.str() << std::endl; + return -1; + } + + carve::geom::aabb<2> aabb; + aabb.fit(merged.begin(), merged.end()); + double scale = 20.0 / std::max(aabb.extent.x, aabb.extent.y); + + glNewList(scene->d_list, GL_COMPILE); + + glDisable(GL_LIGHTING); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glColor4f(0.2, 0.3, 0.4, 1.0); + + glBegin(GL_TRIANGLES); + for (size_t i = 0; i != triangulated.size(); ++i) { + double x, y; + x = (merged[triangulated[i].a].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].a].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + x = (merged[triangulated[i].b].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].b].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + x = (merged[triangulated[i].c].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].c].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + } + glEnd(); + + glColor4f(0.0, 0.0, 0.0, 0.1); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_DEPTH_TEST); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glBegin(GL_TRIANGLES); + for (size_t i = 0; i != triangulated.size(); ++i) { + double x, y; + x = (merged[triangulated[i].a].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].a].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + x = (merged[triangulated[i].b].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].b].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + x = (merged[triangulated[i].c].x - aabb.pos.x) * scale; + y = (merged[triangulated[i].c].y - aabb.pos.y) * scale; + glVertex3f(x, y, 0.0); + } + glEnd(); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glEnable(GL_DEPTH_TEST); + + glColor4f(1, 1, 1, 1); + glBegin(GL_LINE_LOOP); + for (int i = 0; i < merged.size(); ++i) { + glVertex3f((merged[i].x - aabb.pos.x) * scale, (merged[i].y - aabb.pos.y) * scale, 2.0); + } + glEnd(); + + glEndList(); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_interpolate.cpp b/thirdparty/carve-1.4.0/tests/test_interpolate.cpp new file mode 100644 index 00000000..7c48fcac --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_interpolate.cpp @@ -0,0 +1,163 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include "scene.hpp" +#include "rgb.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +#define POINTS 80 + +double rad(int p) { + return .6 + .2 * (sin(p * 6 * M_TWOPI / POINTS) + sin(p * 5 * M_TWOPI / POINTS)); +} + +double H(int p) { return .5 + .5 * cos(p * M_TWOPI * 2 / double(POINTS)); } +double S(int p) { return .8 + .2 * cos(p * M_TWOPI * 8 / double(POINTS)); } +double V(int p) { return .8 + .2 * sin(.3 + p * M_TWOPI * 5 / double(POINTS)) * sin(p * M_TWOPI * 9 / double(POINTS)); } + +int main(int argc, char **argv) { + TestScene *scene = new TestScene(argc, argv, 2); + + std::vector poly; + std::vector colour; + for (int i = 0; i < POINTS; ++i) { + double r = rad(i); + poly.push_back(carve::geom::VECTOR(cos(i * M_TWOPI / POINTS) * r, sin(i * M_TWOPI / POINTS) * r)); + colour.push_back(HSV2RGB(H(i), S(i), V(i))); + } + + glNewList(scene->draw_list_base, GL_COMPILE); + glDisable(GL_LIGHTING); + glBegin(GL_TRIANGLES); + + for (int x = -100; x < +100; x++) { + double X = x / 100.0; + double X2 = (x + 1) / 100.0; + for (int y = -100; y < +100; y++) { + double Y = y / 100.0; + double Y2 = (y + 1) / 100.0; + cRGBA c1 = carve::interpolate::interp(poly, colour, X, Y, colour_clamp_t()); + cRGBA c2 = carve::interpolate::interp(poly, colour, X2, Y, colour_clamp_t()); + cRGBA c3 = carve::interpolate::interp(poly, colour, X2, Y2, colour_clamp_t()); + cRGBA c4 = carve::interpolate::interp(poly, colour, X, Y2, colour_clamp_t()); + + glColor4f(c1.r, c1.g, c1.b, c1.a); + glVertex3f(X * 20, Y * 20, 1.0); + glColor4f(c2.r, c2.g, c2.b, c2.a); + glVertex3f(X2 * 20, Y * 20, 1.0); + glColor4f(c3.r, c3.g, c3.b, c3.a); + glVertex3f(X2 * 20, Y2 * 20, 1.0); + + glColor4f(c1.r, c1.g, c1.b, c1.a); + glVertex3f(X * 20, Y * 20, 1.0); + glColor4f(c3.r, c3.g, c3.b, c3.a); + glVertex3f(X2 * 20, Y2 * 20, 1.0); + glColor4f(c4.r, c4.g, c4.b, c4.a); + glVertex3f(X * 20, Y2 * 20, 1.0); + } + } + + glEnd(); + glEnable(GL_LIGHTING); + + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + glDisable(GL_LIGHTING); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBegin(GL_TRIANGLES); + for (int i = 0; i < POINTS; ++i) { + int i2 = (i + 1) % POINTS; + glColor4f(0, 0, 0, 0); + glVertex3f(0.0, 0.0, 2.0); + glColor4f(colour[i].r, colour[i].g, colour[i].b, 1.0); + glVertex3f(poly[i].x * 20, poly[i].y * 20, 2.0); + glColor4f(colour[i2].r, colour[i2].g, colour[i2].b, 1.0); + glVertex3f(poly[i2].x * 20, poly[i2].y * 20, 2.0); + } + glEnd(); + glDisable(GL_BLEND); + glEnable(GL_LIGHTING); + glEndList(); + + scene->draw_flags[0] = true; + scene->draw_flags[1] = true; + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_intersect.cpp b/thirdparty/carve-1.4.0/tests/test_intersect.cpp new file mode 100644 index 00000000..c8c1e4fe --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_intersect.cpp @@ -0,0 +1,737 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include + +#include "geom_draw.hpp" +#include "geometry.hpp" +#include "read_ply.hpp" +#include "write_ply.hpp" + +#include "rgb.hpp" + +#include "scene.hpp" + +#include "opts.hpp" + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#ifdef WIN32 +#undef min +#undef max +#endif + + + +struct Options : public opt::Parser { + bool edge_classifier; + bool rescale; + bool output; + std::string output_file; + bool ascii; + + std::vector args; + + virtual void optval(const std::string &o, const std::string &v) { + if (o == "--binary" || o == "-b") { ascii = false; return; } + if (o == "--ascii" || o == "-a") { ascii = true; return; } + if (o == "--rescale" || o == "-r") { rescale = true; return; } + if (o == "--output" || o == "-o") { output = true; output_file = v; return; } + if (o == "--edge" || o == "-e") { edge_classifier = true; return; } + } + + virtual void arg(const std::string &a) { + args.push_back(a); + } + + Options() { + ascii = true; + rescale = false; + output = false; + edge_classifier = false; + + option("binary", 'b', false, "binary output"); + option("ascii", 'a', false, "ascii output (default)"); + option("rescale", 'r', false, "rescale prior to CSG operations"); + option("output", 'o', true, "output result in .ply format"); + option("edge", 'e', false, "use edge classifier"); + } +}; + + +static Options options; + + +carve::poly::Polyhedron *g_result = NULL; + +std::vector rays; + +#if 1 +std::string data_path = "/Users/sargeant/projects/PERSONAL/CARVE/data/"; +#else +std::string data_path = "../data/"; +#endif + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer]->setChecked(!draw_flags[layer]->isChecked()); + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]->isChecked()) { + glCallList(draw_list_base + i); + } + } + + if (rays.size()) { + glBegin(GL_LINES); + for (int i = 0; i < rays.size(); ++i) { + carve::geom3d::Vector a = rays[i].v1, b = rays[i].v2; + + glVertex3f(a.x, a.y, a.z); + glVertex3f(b.x, b.y, b.z); + } + glEnd(); + } + } + + virtual void click(int button, int state, int x, int y) { + if ((glutGetModifiers() & GLUT_ACTIVE_CTRL) != 0 && state == GLUT_DOWN) { + + carve::geom3d::Ray r = getRay(x, y); + + r.v = r.v / g_scale; + r.v = r.v - g_translation; + carve::geom3d::Vector from = r.v; + carve::geom3d::Vector to = r.v - r.D * 1000; + + //rays.push_back(LineSegment(g_scale * (from + g_translation), g_scale * (to + g_translation))); + std::vector *> faces; + + g_result->findFacesNear(carve::geom3d::LineSegment(from, to), faces); + + // see if any of the faces intersect our ray + for (int i = 0; i < faces.size();++i) { + const carve::poly::Face<3> *f = faces[i]; + carve::geom3d::Vector pos; + if (f->lineSegmentIntersection(carve::geom3d::LineSegment(from, to), pos) > 0) { + pos = g_scale * (pos + g_translation); + carve::geom3d::Vector fromWorld = g_scale * (from + g_translation); + zoomTo(pos, 0.7 * (fromWorld - pos).length()); + } + } + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } + + virtual void _init() { + } +}; + +bool odd(int x, int y, int z) { + return ((x + y + z) & 1) == 1; +} + +bool even(int x, int y, int z) { + return ((x + y + z) & 1) == 0; +} + +class Input { +public: + Input() { + poly = NULL; + op = carve::csg::CSG::UNION; + ownsPoly = true; + } + + // Our copy constructor actually transfers ownership. + Input(const Input &i) { + poly = i.poly; + op = i.op; + i.ownsPoly = false; + ownsPoly = true; + } + + Input(carve::poly::Polyhedron *p, carve::csg::CSG::OP o, bool becomeOwner = true) { + poly = p; + op = o; + ownsPoly = becomeOwner; + } + + ~Input() { + if (ownsPoly) { + delete poly; + } + } + + carve::poly::Polyhedron *poly; + carve::csg::CSG::OP op; + mutable bool ownsPoly; + +private: +}; + +void getInputsFromTest(int test, std::list &inputs) { + carve::csg::CSG::OP op = carve::csg::CSG::INTERSECTION; + carve::poly::Polyhedron *a = NULL; + carve::poly::Polyhedron *b = NULL; + carve::poly::Polyhedron *c = NULL; + + switch (test) { + case 0: + a = makeCube(carve::math::Matrix::SCALE(2.0, 2.0, 2.0)); + b = makeCube(carve::math::Matrix::SCALE(2.0, 2.0, 2.0) * + carve::math::Matrix::ROT(1.0, 1.0, 1.0, 1.0) * + carve::math::Matrix::TRANS(1.0, 1.0, 1.0)); + break; + case 1: + a = makeCube(carve::math::Matrix::SCALE(2.0, 2.0, 2.0)); + b = makeCube(carve::math::Matrix::TRANS(1.0, 0.0, 0.0)); + break; + + case 2: + a = makeTorus(20, 20, 2.0, 1.0, carve::math::Matrix::ROT(0.5, 1.0, 1.0, 1.0)); + b = makeTorus(20, 20, 2.0, 1.0, carve::math::Matrix::TRANS(0.0, 0.0, 0.0)); + op = carve::csg::CSG::A_MINUS_B; + break; + + case 4: + a = makeDoubleCube(carve::math::Matrix::SCALE(2.0, 2.0, 2.0)); + b = makeTorus(20, 20, 2.0, 1.0, carve::math::Matrix::ROT(M_PI / 2.0, 0.1, 0.0, 0.0)); + break; + + case 5: + a = makeCube(carve::math::Matrix::TRANS(0.0, 0.0, -0.5)); + b = makeCube(carve::math::Matrix::TRANS(0.0, 0.0, +0.5)); + break; + + case 6: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(M_PI/4.0, 0.0, 0.0, +1.0)); + break; + + case 7: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(M_PI/4.0, 0.0, 0.0, +1.0) * carve::math::Matrix::TRANS(0.0, 0.0, 1.0)); + break; + + case 8: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(M_PI/4.0, 0.0, 0.0, +1.0) * carve::math::Matrix::SCALE(sqrt(2.0)/2.0, sqrt(2.0)/2.0, 0.1) * carve::math::Matrix::TRANS(0.0, 0.0, 0.1)); + break; + + case 9: + a = makeCube(); + b = makeSubdividedCube(3, 3, 3, NULL, carve::math::Matrix::TRANS(0.0, 0.0, 0.5) * carve::math::Matrix::SCALE(0.5, 0.5, 0.5)); + break; + + case 12: + a = makeCube(); + b = makeCube(carve::math::Matrix::TRANS(.5, .0, 1.0) * + carve::math::Matrix::SCALE(sqrt(2.0)/4.0, sqrt(2.0)/4.0, 0.1) * + carve::math::Matrix::ROT(M_PI/4.0, 0.0, 0.0, +1.0)); + break; + + case 13: + a = makeSubdividedCube(3, 3, 3, NULL); + b = makeSubdividedCube(3, 3, 3, NULL, + carve::math::Matrix::TRANS(0.0, 0.0, 0.5) * + carve::math::Matrix::SCALE(0.5, 0.5, 0.5)); + break; + + case 14: + a = makeSubdividedCube(3, 3, 3, odd); + b = makeSubdividedCube(3, 3, 3, even); + op = carve::csg::CSG::UNION; + break; + + case 15: + a = makeSubdividedCube(3, 3, 1, odd); + b = makeSubdividedCube(3, 3, 1); + op = carve::csg::CSG::UNION; + break; + + case 16: + a = readPLY(data_path + "cylinderx.ply"); + b = readPLY(data_path + "cylindery.ply"); + op = carve::csg::CSG::UNION; + break; + + case 17: + a = readPLY(data_path + "coneup.ply"); + b = readPLY(data_path + "conedown.ply"); + op = carve::csg::CSG::UNION; + break; + + case 18: + a = readPLY(data_path + "coneup.ply"); + b = readPLY(data_path + "conedown.ply"); + op = carve::csg::CSG::A_MINUS_B; + break; + + case 19: + a = readPLY(data_path + "sphere.ply"); + b = readPLY(data_path + "sphere.ply"); + op = carve::csg::CSG::UNION; + break; + + case 20: + a = readPLY(data_path + "sphere.ply"); + b = readPLY(data_path + "sphere.ply"); + op = carve::csg::CSG::A_MINUS_B; + break; + + case 21: + a = readPLY(data_path + "sphere.ply"); + b = readPLY(data_path + "sphere.ply", carve::math::Matrix::TRANS(0.01, 0.01, 0.01)); + op = carve::csg::CSG::A_MINUS_B; + break; + + case 22: + a = readPLY(data_path + "cylinderx.ply"); + b = readPLY(data_path + "cylindery.ply"); + op = carve::csg::CSG::UNION; + break; + + case 23: + a = readPLY(data_path + "cylinderx.ply"); + b = readPLY(data_path + "cylindery.ply"); + c = readPLY(data_path + "cylinderz.ply"); + op = carve::csg::CSG::UNION; + break; + + case 24: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(1e-5, 1.0, 1.0, 0.0)); + op = carve::csg::CSG::UNION; + break; + + case 25: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(1e-1, 1.0, 1.0, 0.0)); + op = carve::csg::CSG::UNION; + break; + + case 26: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(1e-5, 1.0, 1.0, 0.0)); + op = carve::csg::CSG::B_MINUS_A; + break; + + case 27: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(1e-2, 1.0, 1.0, 0.0)); + op = carve::csg::CSG::B_MINUS_A; + break; + + case 28: + a = makeCube(); + b = makeCube(carve::math::Matrix::ROT(1e-6, 1.0, 0.0, 0.0)); + c = makeCube(carve::math::Matrix::ROT(2e-6, 1.0, 0.0, 0.0)); + op = carve::csg::CSG::UNION; + break; + + case 29: + for (int i = 0; i < 30; i++) { + inputs.push_back(Input(makeCube(carve::math::Matrix::ROT(i * M_TWOPI / 30, .4, .3, .7)), carve::csg::CSG::UNION)); + } + break; + + case 30: + inputs.push_back(Input(readPLY(data_path + "sphere.ply"), carve::csg::CSG::UNION)); + inputs.push_back(Input(readPLY(data_path + "sphere.ply", carve::math::Matrix::SCALE(0.9, 0.9, 0.9)), carve::csg::CSG::A_MINUS_B)); + inputs.push_back(Input(makeCube(carve::math::Matrix::TRANS(5.5, 0.0, 0.0) * carve::math::Matrix::SCALE(5.0, 5.0, 5.0)), carve::csg::CSG::A_MINUS_B)); + break; + + case 31: + inputs.push_back(Input(makeCube(), carve::csg::CSG::UNION)); + inputs.push_back(Input(makeCube(carve::math::Matrix::SCALE(0.9, 0.9, 0.9)), carve::csg::CSG::A_MINUS_B)); + inputs.push_back(Input(makeCube(carve::math::Matrix::TRANS(5.5, 0.0, 0.0) * carve::math::Matrix::SCALE(5.0, 5.0, 5.0)), carve::csg::CSG::A_MINUS_B)); + break; + + case 32: + inputs.push_back(Input(readPLY(data_path + "ico.ply"), carve::csg::CSG::UNION)); + inputs.push_back(Input(readPLY(data_path + "ico.ply", carve::math::Matrix::SCALE(0.9, 0.9, 0.9)), carve::csg::CSG::A_MINUS_B)); + inputs.push_back(Input(makeCube(carve::math::Matrix::TRANS(5.5, 0.0, 0.0) * carve::math::Matrix::SCALE(5.0, 5.0, 5.0)), carve::csg::CSG::A_MINUS_B)); + break; + + case 33: + inputs.push_back(Input(readPLY(data_path + "ico2.ply"), carve::csg::CSG::UNION)); + inputs.push_back(Input(readPLY(data_path + "ico2.ply", carve::math::Matrix::SCALE(0.9, 0.9, 0.9)), carve::csg::CSG::A_MINUS_B)); + inputs.push_back(Input(makeCube(carve::math::Matrix::TRANS(5.5, 0.0, 0.0) * carve::math::Matrix::SCALE(5.0, 5.0, 5.0)), carve::csg::CSG::A_MINUS_B)); + break; + + case 34: + inputs.push_back(Input(readPLY(data_path + "cow2.ply"), carve::csg::CSG::UNION)); + inputs.push_back(Input(readPLY(data_path + "cow2.ply", carve::math::Matrix::TRANS(0.5, 0.5, 0.5)), carve::csg::CSG::UNION)); + break; + + case 35: + inputs.push_back(Input(readPLY(data_path + "201addon.ply"), carve::csg::CSG::UNION)); + inputs.push_back(Input(readPLY(data_path + "addontun.ply"), carve::csg::CSG::UNION)); + break; + + case 36: + inputs.push_back(Input(readPLY(data_path + "../Bloc/block1.ply"), carve::csg::CSG::INTERSECTION)); + inputs.push_back(Input(readPLY(data_path + "../Bloc/debug1.ply"), carve::csg::CSG::INTERSECTION)); + inputs.push_back(Input(readPLY(data_path + "../Bloc/debug2.ply"), carve::csg::CSG::INTERSECTION)); + break; + + case 37: + a = readPLY("../data/sphere_one_point_moved.ply"); + b = readPLY("../data/sphere.ply"); + op = carve::csg::CSG::A_MINUS_B; + break; + } + + + + if (a != NULL) { + inputs.push_back(Input(a, carve::csg::CSG::UNION)); + } + if (b != NULL) { + inputs.push_back(Input(b, op)); + } + if (c != NULL) { + inputs.push_back(Input(c, op)); + } + +// glPointSize(4.0); +// glEnable(GL_DEPTH_TEST); +// glBegin(GL_POINTS); +// for (int i = 0; i < 1000; i++) { +// double x = 4.0 * random() / (double)RAND_MAX - 2; +// double y = 4.0 * random() / (double)RAND_MAX - 2; +// double z = 4.0 * random() / (double)RAND_MAX - 2; +// switch (b->containsVertex(Vector(x, y, z))) { +// case POINT_IN: glColor4f(1,1,1,1); break; +// case POINT_ON: glColor4f(1,0,0,1); break; +// case POINT_OUT: glColor4f(0,0,0,1); break; +// } +// glVertex3f(x,y,z); +// } +// glEnd(); +} + +static bool endswith(const std::string &a, const std::string &b) { + if (a.size() < b.size()) return false; + + for (unsigned i = a.size(), j = b.size(); j; ) { + if (tolower(a[--i]) != tolower(b[--j])) return false; + } + return true; +} + +void testCSG(GLuint &dlist, std::list::const_iterator begin, std::list::const_iterator end, carve::poly::Polyhedron *&finalResult, TestScene *scene) { + // Can't do anything with the terminating iterator + if (begin == end) { + return; + } + + bool result_is_temp = true; + + // If this is the first time around, we use the first input as our first intermediate result. + if (finalResult == NULL) { + finalResult = begin->poly; + result_is_temp = false; + ++begin; + } + + OptionGroup *group = scene->createOptionGroup("CSG debug"); + + while (begin != end) { + // Okay, we have a polyhedron in result that will be our first operand, and also our output, + // and we have a list of operations and second operands in our iterator list. + + carve::poly::Polyhedron *a = finalResult; + carve::poly::Polyhedron *b = begin->poly; + carve::csg::CSG::OP op = begin->op; + + glNewList(dlist++, GL_COMPILE); + scene->draw_flags.push_back(group->createOption("Debug data visible", false)); + if (a && b) { + carve::poly::Polyhedron *result = NULL; + try { + result = carve::csg::CSG().compute(a, b, op, NULL, options.edge_classifier ? carve::csg::CSG::CLASSIFY_EDGE : carve::csg::CSG::CLASSIFY_NORMAL); + + std::cerr << "a->octree.root->is_leaf = " << a->octree.root->is_leaf << std::endl; + std::cerr << "b->octree.root->is_leaf = " << b->octree.root->is_leaf << std::endl; + std::cerr << "result = " << result << std::endl + << " n(manifolds) = " << result->manifold_is_closed.size() << std::endl + << " n(open manifolds) = " << std::count(result->manifold_is_closed.begin(), + result->manifold_is_closed.end(), + false) << std::endl; + writePLY(std::cout, result, true); + + // Place the result of this CSG into our final result, and get rid of our last one + std::swap(result, finalResult); + if (result_is_temp) delete result; + result_is_temp = true; + + } catch (carve::exception e) { + std::cerr << "FAIL- " << e.str(); + if (result_is_temp && finalResult) delete finalResult; + finalResult = NULL; + } + } + ++begin; + glEndList(); + } +} + +void testConvexHull() { +#define N 100 + + std::vector points; +#if defined(__APPLE__) + srandomdev(); +#else + srandom(time(NULL)); +#endif + points.reserve(100); + glPointSize(5.0); + glEnable(GL_POINT_SMOOTH); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + glBegin(GL_POINTS); + for (int i = 0; i < 100; i++) { + double a = random() / double(RAND_MAX) * M_TWOPI; + double d = random() / double(RAND_MAX) * 10.0; + + points.push_back(carve::geom::VECTOR(cos(a) * d, sin(a) * d)); + + glVertex3f((GLfloat)points.back().x, (GLfloat)points.back().y, 0.1f); + } + glEnd(); + + std::vector result = carve::geom::convexHull(points); + + glBegin(GL_LINE_LOOP); + for (unsigned i = 0; i < result.size(); i++) { + glVertex3f((GLfloat)points[result[i]].x, (GLfloat)points[result[i]].y, 0.1f); + } + glEnd(); + + glBegin(GL_LINES); + + glColor4f(1.0f, 0.0f, 0.0f, 1.0f); + glVertex3f( 0.0f, 0.0f, 0.1f); + glVertex3f(20.0f, 0.0f, 0.1f); + + glColor4f(0.0f, 1.0f, 0.0f, 1.0f); + glVertex3f(0.0f, 0.0f, 0.1f); + glVertex3f(0.0f, 20.0f, 0.1f); + + glEnd(); +} + +void genSceneDisplayList(const std::list &inputs, TestScene *scene) { + std::list::const_iterator i = inputs.begin(); + + carve::geom3d::Vector min, max; + + if (i != inputs.end()) { + carve::geom3d::AABB aabb = i->poly->aabb; + min = aabb.min(); + max = aabb.max(); + + for (;i != inputs.end(); ++i) { + aabb = i->poly->aabb; + + assign_op(min, min, aabb.min(), carve::util::min_functor()); + assign_op(max, max, aabb.max(), carve::util::max_functor()); + } + } else { + min.fill(-1.0); + max.fill(+1.0); + } + + std::cerr << "X: " << min.x << " - " << max.x << std::endl; + std::cerr << "Y: " << min.y << " - " << max.y << std::endl; + std::cerr << "Z: " << min.z << " - " << max.z << std::endl; + + double scale_fac = 40.0 / std::max(max.x - min.x, max.y - min.y); + + g_translation = -carve::geom::VECTOR((min.x + max.x) / 2.0, + (min.y + max.y) / 2.0, + (min.z + max.z) / 2.0); + g_scale = scale_fac; + std::cerr << "scale fac: " << scale_fac << std::endl; + + g_result = NULL; + + GLuint currentList = scene->draw_list_base; + + testCSG(currentList, inputs.begin(), inputs.end(), g_result, scene); + + { + OptionGroup *group; + group = scene->createOptionGroup("Result"); + + scene->draw_flags.push_back(group->createOption("Result visible", true)); + glNewList(currentList++, GL_COMPILE); + if (g_result) { + glCullFace(GL_BACK); + drawPolyhedron(g_result, 0.3f, 0.5f, 0.8f, 1.0f, true); + glCullFace(GL_FRONT); + drawPolyhedron(g_result, 0.8f, 0.5f, 0.3f, 1.0f, true); + glCullFace(GL_BACK); + } + glEndList(); + + scene->draw_flags.push_back(group->createOption("Result wireframe", true)); + glNewList(currentList++, GL_COMPILE); + if (g_result) { + drawPolyhedronWireframe(g_result); + } + glEndList(); + } + + { + OptionGroup *group = scene->createOptionGroup("Inputs"); + char buf[1024]; + int count = 0; + float H = 0.0, S = 1.0, V = 1.0; + + for (std::list::const_iterator it = inputs.begin(); it != inputs.end(); ++it) { + H = fmod((H + .37), 1.0); + S = 0.5 + fmod((S - 0.37), 0.5); + cRGB colour = HSV2RGB(H, S, V); + + count++; + sprintf(buf, "Input %d wireframe", count); + scene->draw_flags.push_back(group->createOption(buf, false)); + glNewList(currentList++, GL_COMPILE); + if (it->poly) drawPolyhedronWireframe(it->poly); + glEndList(); + + sprintf(buf, "Input %d solid", count); + scene->draw_flags.push_back(group->createOption(buf, false)); + glNewList(currentList++, GL_COMPILE); + if (it->poly) drawPolyhedron(it->poly, colour.r, colour.g, colour.b, true); + glEndList(); + + if (it->poly->octree.root->is_leaf) { + sprintf(buf, "Input %d octree (unsplit)", count); + } else { + sprintf(buf, "Input %d octree", count); + } + scene->draw_flags.push_back(group->createOption(buf, false)); + glNewList(currentList++, GL_COMPILE); + if (it->poly) { drawOctree(it->poly->octree); } + glEndList(); + } + } +} + +static bool isInteger(const char *str) { + int count = 0; + while (*str) { + if (!isdigit(*str)) { + return false; + } + ++str; + ++count; + } + return count > 0; +} + + +int main(int argc, char **argv) { + installDebugHooks(); + + int test = 0; + int inputFilenamesStartAt = -1; + + options.parse(argc, argv); + + if (options.args.size() == 0) { + test = 0; + } else if (options.args.size() == 1 && isInteger(options.args[0].c_str())) { + test = atoi(options.args[0].c_str()); + } else { + std::cerr << "invalid test: " << options.args[0] << std::endl; + exit(1); + } + + { + std::list inputs; + + static carve::TimingName MAIN_BLOCK("Application"); + static carve::TimingName PARSE_BLOCK("Parse"); + + carve::Timing::start(MAIN_BLOCK); + + carve::Timing::start(PARSE_BLOCK); + + getInputsFromTest(test, inputs); + + carve::Timing::stop(); + + // inputs result debug + TestScene *scene = new TestScene(argc, argv, (3 * inputs.size()) + 2 + (inputs.size() - 1)); + scene->init(); + genSceneDisplayList(inputs, scene); + + carve::Timing::stop(); + + carve::Timing::printTimings(); + + scene->run(); + + delete scene; + } + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_rescale.cpp b/thirdparty/carve-1.4.0/tests/test_rescale.cpp new file mode 100644 index 00000000..399aa752 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_rescale.cpp @@ -0,0 +1,65 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include "mersenne_twister.h" + +int main(int argc, char **argv) { + MTRand rand; + double sx, sy, sz; + double minx, maxx, miny,maxy, minz, maxz; + + sx = rand.rand(1e5) + 1; + sy = rand.rand(1e5) + 1; + sz = rand.rand(1e5) + 1; + + minx = rand.rand(1e10) - sx / 2; maxx = minx + sx; + miny = rand.rand(1e10) - sy / 2; maxy = miny + sy; + minz = rand.rand(1e10) - sz / 2; maxz = minz + sz; + + if (minx > maxx) std::swap(minx, maxx); + if (miny > maxy) std::swap(miny, maxy); + if (minz > maxz) std::swap(minz, maxz); + + carve::rescale::rescale r(minx, miny, minz, maxx, maxy, maxz); + carve::rescale::fwd fwd(r); + carve::rescale::rev rev(r); + + std::cout << "x: [" << minx << "," << maxx << "]" << std::endl; + std::cout << "y: [" << miny << "," << maxy << "]" << std::endl; + std::cout << "z: [" << minz << "," << maxz << "]" << std::endl; + std::cout << std::endl; + std::cout << "r.dx=" << r.dx << " r.dy=" << r.dy << " r.dz=" << r.dz << " r.scale=" << r.scale << std::endl; + std::cout << std::endl; + + for (int i = 0; i < 10000; i++) { + carve::geom3d::Vector in, temp, out; + in.x = rand.rand(maxx-minx) + minx; + in.y = rand.rand(maxy-miny) + miny; + in.z = rand.rand(maxz-minz) + minz; + temp = fwd(in); + out = rev(temp); + std::cout << in << " -> " << temp << " -> " << out << std::endl; + CARVE_ASSERT(fabs(temp.x) < 1.0 && fabs(temp.y) < 1.0 && fabs(temp.z) < 1.0); + CARVE_ASSERT(out.x == in.x && out.y == in.y && out.z == in.z); + } +} diff --git a/thirdparty/carve-1.4.0/tests/test_slice.cpp b/thirdparty/carve-1.4.0/tests/test_slice.cpp new file mode 100644 index 00000000..ed767f3f --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_slice.cpp @@ -0,0 +1,159 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include "scene.hpp" +#include "geom_draw.hpp" +#include "geometry.hpp" +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +#define POINTS 60 + +int main(int argc, char **argv) { + carve::poly::Polyhedron *a = makeCube(carve::math::Matrix::ROT(1.0, 1.0, 1.0, 1.0)); + + std::vector shape; + + carve::input::PolyhedronData data; + for (int i = 0; i < POINTS; ++i) { + double r = 2.0 + .4 * sin(i * 3 * M_TWOPI / POINTS) + .8 * sin(i * 5 * M_TWOPI / POINTS); + data.addVertex(carve::geom::VECTOR(r * cos(i * M_TWOPI / POINTS), r * sin(i * M_TWOPI / POINTS), 0.0)); + } + std::vector face_verts; + for (int i = 0; i < POINTS; ++i) { + face_verts.push_back(i); + } + data.addFace(face_verts.begin(), face_verts.end()); + + carve::poly::Polyhedron *b = new carve::poly::Polyhedron(data.points, data.getFaceCount(), data.faceIndices); + + std::list a_sliced, b_sliced; + + carve::csg::CSG().slice(a, b, a_sliced, b_sliced); + + TestScene *scene = new TestScene(argc, argv, 6); + + glNewList(scene->draw_list_base + 0, GL_COMPILE); + drawPolyhedron(a, .4, .6, .8, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + drawPolyhedron(b, .8, .6, .4, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 2, GL_COMPILE); + { + int n = 0; + for (std::list::iterator i = a_sliced.begin(); i != a_sliced.end(); ++i) { + float r = n & 1 ? .3 : .7; + float g = n & 2 ? .3 : .7; + float b = n & 4 ? .3 : .7; + drawPolyhedron((*i), r, g, b, 1.0, true); + ++n; + } + } + glEndList(); + + glNewList(scene->draw_list_base + 3, GL_COMPILE); + { + int n = 0; + for (std::list::iterator i = a_sliced.begin(); i != a_sliced.end(); ++i) { + drawPolyhedronWireframe((*i)); + ++n; + } + } + glEndList(); + + glNewList(scene->draw_list_base + 4, GL_COMPILE); + { + int n = 0; + for (std::list::iterator i = b_sliced.begin(); i != b_sliced.end(); ++i) { + float r = n & 1 ? .3 : .7; + float g = n & 2 ? .3 : .7; + float b = n & 4 ? .3 : .7; + drawPolyhedron((*i), r, g, b, 1.0, true); + ++n; + } + } + glEndList(); + + glNewList(scene->draw_list_base + 5, GL_COMPILE); + { + int n = 0; + for (std::list::iterator i = b_sliced.begin(); i != b_sliced.end(); ++i) { + drawPolyhedronWireframe((*i)); + ++n; + } + } + glEndList(); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_slice_classify.cpp b/thirdparty/carve-1.4.0/tests/test_slice_classify.cpp new file mode 100644 index 00000000..4d1ddced --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_slice_classify.cpp @@ -0,0 +1,152 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include "scene.hpp" +#include "geom_draw.hpp" +#include "geometry.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +#define POINTS 60 + +int main(int argc, char **argv) { + carve::poly::Polyhedron *a = makeCube(carve::math::Matrix::ROT(1.0, 1.0, 1.0, 1.0)); + + std::vector > shape; + + for (int i = 0; i < POINTS; ++i) { + double r = 2.0 + .4 * sin(i * 3 * M_TWOPI / POINTS) + .8 * sin(i * 5 * M_TWOPI / POINTS); + shape.push_back(carve::poly::Vertex<3>(carve::geom::VECTOR(r * cos(i * M_TWOPI / POINTS), r * sin(i * M_TWOPI / POINTS), 0.0))); + } + std::vector *> face_verts; + for (int i = 0; i < POINTS; ++i) { + face_verts.push_back(&shape[i]); + } + std::vector > faces; + faces.push_back(carve::poly::Face<3>(face_verts)); + + carve::poly::Polyhedron *b = new carve::poly::Polyhedron(faces); + + std::list > b_sliced; + + carve::csg::CSG().sliceAndClassify(a, b, b_sliced); + + TestScene *scene = new TestScene(argc, argv, 6); + + glNewList(scene->draw_list_base + 0, GL_COMPILE); + drawPolyhedron(a, .4, .6, .8, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + drawPolyhedron(b, .8, .6, .4, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 2, GL_COMPILE); + { + int n = 0; + for (std::list >::iterator i = b_sliced.begin(); i != b_sliced.end(); ++i) { + float r, g, b; + switch ((*i).first) { + case carve::csg::FACE_IN: r = 0.0; g = 0.0; b = 1.0; break; + case carve::csg::FACE_OUT: r = 1.0; g = 0.0; b = 0.0; break; + case carve::csg::FACE_ON_ORIENT_OUT: r = 1.0; g = 1.0; b = 0.0; break; + case carve::csg::FACE_ON_ORIENT_IN: r = 0.0; g = 1.0; b = 1.0; break; + } + drawPolyhedron((*i).second, r, g, b, 1.0, true); + ++n; + } + } + glEndList(); + + glNewList(scene->draw_list_base + 3, GL_COMPILE); + { + int n = 0; + for (std::list >::iterator i = b_sliced.begin(); i != b_sliced.end(); ++i) { + float r, g, b; + switch ((*i).first) { + case carve::csg::FACE_IN: r = 0.3; g = 0.3; b = 0.7; break; + case carve::csg::FACE_OUT: r = 0.7; g = 0.3; b = 0.3; break; + case carve::csg::FACE_ON_ORIENT_OUT: r = 0.7; g = 0.7; b = 0.3; break; + case carve::csg::FACE_ON_ORIENT_IN: r = 0.3; g = 0.7; b = 0.7; break; + } + drawPolyhedronWireframe((*i).second); + ++n; + } + } + glEndList(); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/test_spacetree.cpp b/thirdparty/carve-1.4.0/tests/test_spacetree.cpp new file mode 100644 index 00000000..62e1332e --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_spacetree.cpp @@ -0,0 +1,28 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +int main(int argc, char **argv) { + carve::space::SpatialSubdivTree<3, carve::space::nodedata_FaceEdge> + octree(carve::geom::VECTOR(0,0,0), + carve::geom::VECTOR(1,1,1)); +} diff --git a/thirdparty/carve-1.4.0/tests/test_triangulate.cpp b/thirdparty/carve-1.4.0/tests/test_triangulate.cpp new file mode 100644 index 00000000..a630af91 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/test_triangulate.cpp @@ -0,0 +1,152 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include "coords.h" +#include "geom_draw.hpp" +#include "scene.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include + +struct TestScene : public Scene { + GLuint d_list; + + virtual bool key(unsigned char k, int x, int y) { + return true; + } + + virtual GLvoid draw() { + glCallList(d_list); + } + + TestScene(int argc, char **argv) : Scene(argc, argv) { + d_list = glGenLists(1); + } + + virtual ~TestScene() { + glDeleteLists(d_list, 1); + } +}; + +int main(int argc, char **argv) { + TestScene *scene = new TestScene(argc, argv); + + std::vector poly; + + switch (3) { + case 0: { + poly.push_back(carve::geom::VECTOR(0,0)); + poly.push_back(carve::geom::VECTOR(1,0)); + poly.push_back(carve::geom::VECTOR(1,1)); + poly.push_back(carve::geom::VECTOR(0,1)); + break; + } + case 1: { + poly.push_back(carve::geom::VECTOR(0,0)); + poly.push_back(carve::geom::VECTOR(1,0)); + poly.push_back(carve::geom::VECTOR(1,.2)); + poly.push_back(carve::geom::VECTOR(.2,.2)); + poly.push_back(carve::geom::VECTOR(.2,.8)); + poly.push_back(carve::geom::VECTOR(1,.8)); + poly.push_back(carve::geom::VECTOR(1,1)); + poly.push_back(carve::geom::VECTOR(0,1)); + break; + } + case 2: { + size_t N = sizeof(map) / sizeof(map[0]); + poly.reserve(N); + for (size_t i = 0; i < N; ++i) { + poly.push_back(carve::geom::VECTOR(map[i][0], map[i][1])); + } + break; + } + case 3: { + size_t N = sizeof(floral) / sizeof(floral[0]); + poly.reserve(N); + for (size_t i = 0; i < N; ++i) { + poly.push_back(carve::geom::VECTOR(floral[i][0], floral[i][1])); + } + break; + } + } + + + std::vector result; + + try { + result.clear(); + carve::triangulate::triangulate(poly, result); + carve::triangulate::improve(poly, result); + } catch (carve::exception exc) { + std::cerr << "FAIL: " << exc.str() << std::endl; + } + + carve::geom::aabb<2> aabb; + aabb.fit(poly.begin(), poly.end()); + double scale = 20.0 / std::max(aabb.extent.x, aabb.extent.y); + + glNewList(scene->d_list, GL_COMPILE); + glDisable(GL_LIGHTING); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBegin(GL_LINE_LOOP); + for (int i = 0; i < poly.size(); ++i) { + glColor4f(1, 1, 1, 1); + glVertex3f((poly[i].x - aabb.pos.x) * scale, (poly[i].y - aabb.pos.y) * scale, 2.0); + } + glEnd(); + + glBegin(GL_TRIANGLES); + for (int i = 0; i < result.size(); ++i) { + glColor4f(.5 + .5 * sin(i / 1.1), + .5 + .5 * sin(1.3 + i / 3.0), + .5 + .5 * sin(.6 + i / 11.0), 1); + unsigned i1 = result[i].a; + unsigned i2 = result[i].b; + unsigned i3 = result[i].c; + glVertex3f((poly[i1].x - aabb.pos.x) * scale, (poly[i1].y - aabb.pos.y) * scale, 2.1); + glVertex3f((poly[i2].x - aabb.pos.x) * scale, (poly[i2].y - aabb.pos.y) * scale, 2.1); + glVertex3f((poly[i3].x - aabb.pos.x) * scale, (poly[i3].y - aabb.pos.y) * scale, 2.1); + } + glEnd(); + + glDisable(GL_BLEND); + glEnable(GL_LIGHTING); + glEndList(); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/tests/tetrahedron.cpp b/thirdparty/carve-1.4.0/tests/tetrahedron.cpp new file mode 100644 index 00000000..69291390 --- /dev/null +++ b/thirdparty/carve-1.4.0/tests/tetrahedron.cpp @@ -0,0 +1,59 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +double triangularPrismVolume(const carve::geom3d::Vector &a, + const carve::geom3d::Vector &b, + const carve::geom3d::Vector &c, + double z) { + double v1 = carve::geom3d::tetrahedronVolume(carve::geom::VECTOR(a.x, a.y, z), + carve::geom::VECTOR(c.x, c.y, z), + carve::geom::VECTOR(b.x, b.y, z), + a); + double v2 = carve::geom3d::tetrahedronVolume(carve::geom::VECTOR(a.x, a.y, z), + carve::geom::VECTOR(c.x, c.y, z), + b, + a); + double v3 = carve::geom3d::tetrahedronVolume(carve::geom::VECTOR(c.x, c.y, z), + c, + b, + a); + + std::cerr << "[components:" << v1 << "," << v2 << "," << v3 << "]" << std::endl; + return v1 + v2 + v3; +} + +int main(int argc, char **argv) { + std::cerr << "result: " + << triangularPrismVolume(carve::geom::VECTOR(1,0,1), + carve::geom::VECTOR(0,1,1), + carve::geom::VECTOR(0,0,3), + 0) + << std::endl; + std::cerr << "result: " + << triangularPrismVolume(carve::geom::VECTOR(11,10,1), + carve::geom::VECTOR(10,11,1), + carve::geom::VECTOR(10,10,3), + 0) + << std::endl; +} diff --git a/thirdparty/carve-1.4.0/win32/Carve.sln b/thirdparty/carve-1.4.0/win32/Carve.sln new file mode 100644 index 00000000..5fcbf878 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/Carve.sln @@ -0,0 +1,88 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "carvelib", "carvelib\carvelib.vcproj", "{21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B}" + ProjectSection(ProjectDependencies) = postProject + {B74F9D7B-8A9D-45A0-8D09-973D01314D80} = {B74F9D7B-8A9D-45A0-8D09-973D01314D80} + {A50234C1-A40D-4782-81CB-9D4549DC9474} = {A50234C1-A40D-4782-81CB-9D4549DC9474} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gloop", "gloop\gloop.vcproj", "{A50234C1-A40D-4782-81CB-9D4549DC9474}" + ProjectSection(ProjectDependencies) = postProject + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} = {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersect", "intersect\intersect.vcproj", "{FD8895D6-8EE2-4E37-8E76-A642FA1422C1}" + ProjectSection(ProjectDependencies) = postProject + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} = {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} + {A50234C1-A40D-4782-81CB-9D4549DC9474} = {A50234C1-A40D-4782-81CB-9D4549DC9474} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "view", "view\view.vcproj", "{2DCBE71A-A29A-4FE7-A23C-AFA762DF13E1}" + ProjectSection(ProjectDependencies) = postProject + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4} = {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4} + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} = {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} + {A50234C1-A40D-4782-81CB-9D4549DC9474} = {A50234C1-A40D-4782-81CB-9D4549DC9474} + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} = {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew", "glew\glew.vcproj", "{00B985EA-A5CD-4F24-8B62-5DC87CD4D080}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glui32", "glui\glui.vcproj", "{63A9D017-1F43-4F1E-8C04-56F8EAABBFC4}" + ProjectSection(ProjectDependencies) = postProject + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} = {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "texture_example", "texture_example\texture_example.vcproj", "{9633062D-3A3A-4997-8754-8A21CD5A354C}" + ProjectSection(ProjectDependencies) = postProject + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4} = {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4} + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} = {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B} + {A50234C1-A40D-4782-81CB-9D4549DC9474} = {A50234C1-A40D-4782-81CB-9D4549DC9474} + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} = {00B985EA-A5CD-4F24-8B62-5DC87CD4D080} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fileformats", "fileformats\fileformats.vcproj", "{B74F9D7B-8A9D-45A0-8D09-973D01314D80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B}.Debug|Win32.ActiveCfg = Debug|Win32 + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B}.Debug|Win32.Build.0 = Debug|Win32 + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B}.Release|Win32.ActiveCfg = Release|Win32 + {21F77D6E-3E33-4EB0-8BC6-C0C86C7EE45B}.Release|Win32.Build.0 = Release|Win32 + {A50234C1-A40D-4782-81CB-9D4549DC9474}.Debug|Win32.ActiveCfg = Debug|Win32 + {A50234C1-A40D-4782-81CB-9D4549DC9474}.Debug|Win32.Build.0 = Debug|Win32 + {A50234C1-A40D-4782-81CB-9D4549DC9474}.Release|Win32.ActiveCfg = Release|Win32 + {A50234C1-A40D-4782-81CB-9D4549DC9474}.Release|Win32.Build.0 = Release|Win32 + {FD8895D6-8EE2-4E37-8E76-A642FA1422C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {FD8895D6-8EE2-4E37-8E76-A642FA1422C1}.Debug|Win32.Build.0 = Debug|Win32 + {FD8895D6-8EE2-4E37-8E76-A642FA1422C1}.Release|Win32.ActiveCfg = Release|Win32 + {FD8895D6-8EE2-4E37-8E76-A642FA1422C1}.Release|Win32.Build.0 = Release|Win32 + {2DCBE71A-A29A-4FE7-A23C-AFA762DF13E1}.Debug|Win32.ActiveCfg = Debug|Win32 + {2DCBE71A-A29A-4FE7-A23C-AFA762DF13E1}.Debug|Win32.Build.0 = Debug|Win32 + {2DCBE71A-A29A-4FE7-A23C-AFA762DF13E1}.Release|Win32.ActiveCfg = Release|Win32 + {2DCBE71A-A29A-4FE7-A23C-AFA762DF13E1}.Release|Win32.Build.0 = Release|Win32 + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080}.Debug|Win32.ActiveCfg = Debug|Win32 + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080}.Debug|Win32.Build.0 = Debug|Win32 + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080}.Release|Win32.ActiveCfg = Release|Win32 + {00B985EA-A5CD-4F24-8B62-5DC87CD4D080}.Release|Win32.Build.0 = Release|Win32 + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4}.Debug|Win32.ActiveCfg = Debug|Win32 + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4}.Debug|Win32.Build.0 = Debug|Win32 + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4}.Release|Win32.ActiveCfg = Release|Win32 + {63A9D017-1F43-4F1E-8C04-56F8EAABBFC4}.Release|Win32.Build.0 = Release|Win32 + {9633062D-3A3A-4997-8754-8A21CD5A354C}.Debug|Win32.ActiveCfg = Debug|Win32 + {9633062D-3A3A-4997-8754-8A21CD5A354C}.Debug|Win32.Build.0 = Debug|Win32 + {9633062D-3A3A-4997-8754-8A21CD5A354C}.Release|Win32.ActiveCfg = Release|Win32 + {9633062D-3A3A-4997-8754-8A21CD5A354C}.Release|Win32.Build.0 = Release|Win32 + {B74F9D7B-8A9D-45A0-8D09-973D01314D80}.Debug|Win32.ActiveCfg = Debug|Win32 + {B74F9D7B-8A9D-45A0-8D09-973D01314D80}.Debug|Win32.Build.0 = Debug|Win32 + {B74F9D7B-8A9D-45A0-8D09-973D01314D80}.Release|Win32.ActiveCfg = Release|Win32 + {B74F9D7B-8A9D-45A0-8D09-973D01314D80}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/carve-1.4.0/win32/carvelib/carvelib.vcproj b/thirdparty/carve-1.4.0/win32/carvelib/carvelib.vcproj new file mode 100644 index 00000000..a9378225 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/carvelib/carvelib.vcproj @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/fileformats/fileformats.vcproj b/thirdparty/carve-1.4.0/win32/fileformats/fileformats.vcproj new file mode 100644 index 00000000..77f92566 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/fileformats/fileformats.vcproj @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/glew/glew.vcproj b/thirdparty/carve-1.4.0/win32/glew/glew.vcproj new file mode 100644 index 00000000..92adb989 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/glew/glew.vcproj @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/gloop/gloop.vcproj b/thirdparty/carve-1.4.0/win32/gloop/gloop.vcproj new file mode 100644 index 00000000..2e8d33df --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/gloop/gloop.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/glui/glui.vcproj b/thirdparty/carve-1.4.0/win32/glui/glui.vcproj new file mode 100644 index 00000000..4b9db6c6 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/glui/glui.vcproj @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/intersect/intersect.vcproj b/thirdparty/carve-1.4.0/win32/intersect/intersect.vcproj new file mode 100644 index 00000000..b58624f6 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/intersect/intersect.vcproj @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/texture_example/texture_example.vcproj b/thirdparty/carve-1.4.0/win32/texture_example/texture_example.vcproj new file mode 100644 index 00000000..638be790 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/texture_example/texture_example.vcproj @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/win32/view/view.vcproj b/thirdparty/carve-1.4.0/win32/view/view.vcproj new file mode 100644 index 00000000..bd336a48 --- /dev/null +++ b/thirdparty/carve-1.4.0/win32/view/view.vcproj @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

i|0<2<1qCDRg86aJ 5~bXBq! +ĘPlt !J b'xbS`N6+.En8f\ՂʈsȤf2 8͠hrV&HPcN 7?FDi8t +jTT R R*|a +?m|!@.q!28!3ɹ2L°!R L ???;|}}ˉQ#/%ėQ$aZ~35 N|my.k1/>,AF+ }ߌz{驽wtL7(n=.x=)No#or QO㘌xۍzӃz@ NA7'!n=(z'rtE">B~^t%^ E jߵ/thp/AċfC;$~6I_xx֡WȆlqK?!H|.XЊZ`#9@тp!`чq آײpj0E̱ ޟkU4N,ka3,f$,:؜f6{EJ7+֌5sI73ւ1,k`dcIfݴ& F]$bDS&8c1F-lxeX"&J7V"58c#::ʠԏ!"YbH`MQdC"d)(!U"4]ӮU;#t0D4]=\+fha!0ŢJn + 3iZ0C `^C5ATu;uIHV5 ը50B1 Tppp%5FRAAA8rzW]w%_ f<{a{8/o?_>^b}pq؋'3/xB-<}a2, +Gs/FH%Gs,>fL!7LMlpb.e23i V1dN3Fްgw"3L[~D8so*S);e k0sw1ٛ!o+ R!pw8Ŝ'hO#%Ƣ ފ"x3R6{U7G1;<%CpQ<ģuW:ڒTU h*(TbL!*4 , 0AvNܬr[*٨p&e1Fi*la4U[ԫbm.ޚ|l =e{ wx׻|ߜ))^.tUUyvy{;w>/^ڵ +US#x'pvzyIuVh+}8iъ2c_?YfQMb Gd:Ρ"Tp7;(q>?}0س/U;jUjN*WD~e>N9zy%m/Êy.A +EYw/g~)e=.#~(/Ym=l[neRoAH%{nQ* `)I_w%$Ԗ눤įNE Q_H%qXy,IZ,οl]m߰qMjhCzxIYZκc`k{/7Vn[YP̕z>uXMoGz;mZpŶ0 ReKjFVbqՆ@\hph`Z"-|CGεDǜEg:g]8irp\Ӎ~F4RMF[щ(D:B vq5 +Z7 +vލ8~yMtӈ#Йn>wØCZ~8jy:u쨎eРFYShaGj4=,bE,.Q_:u +WbՕ1d2Eő3XE4v* vX;ĮZ0bUTQT"Js=$ociAa;`!Y4(f\QA&M +2) lpcS /&8@ 9/ r '94 j -$#dJd$R +dĻ7;9$ %HsB7_Q\Y[nzDeT\ 7\7D܍ Ⓒ 3f2qƨL3sgSP{կ/|[AL^-,xDe "" L$,{z4"Jr *͆Pl{)̢ Fei+/"2)XM7ࠜ dv7pqʚg dO"eY4y3uZHsfhxtZY4-F;:BhR0#ID5dZ֫D $9A L׸%ũYb`JlJG)$.JXd[$'6RD(XtN#M +ȉrNJ" !2Ʉ`)$$ $.H$`b) $ [ޙ)b2Q*6$CbʀzG1JhX^'4j?FQJAj+<"WS(~ ,6I8 0ǥ2p#0'8 8]!tK%RDX,gFD,y @ϟ?^2n82e,Idճ8~Jҽq%=z$MjhZƛHq{4_OR|`!ًwќo~ywDq^އ3 +o~r/A.? =F/w&/nrߚ {q'' ;o{C|+C6of7L[䋻3ߖIo^l5̈KqfFdԋL*H/D&Ld Tz"E9)2"NKWR*}Ȣ4L. +V(E!*X-DRD*kg5߻н}MϮoxp&ޝoz[uv@Ok{svmϷ8z]}=iy4سu7_7hӐ|]SH/O D`1:W? 9:*ᰀC>p9wqWg<{| Zi(;xMVU.N-<>l~OMukM#62V>m@Yz:﯀\nԳ޿Tikc kV-wU7b%|+F,gU=|ѝ^2۽KeU:Ytw bFշg5 tƛjE0*]UuB@eōӌ +VװAx쫓e'JJ%_vAFzŀ"V`'h8|<@nvFc٠mnEW3]ied^`o\K-Iv0F_NBît k$;N)ʥzn\cdI #6g\h7`cbѫsG)m&$vm5L#9C!g[agx,f>t2A >h>`^N:bgì,[6N+FAl=vnR.F0v}:ӆԺJnl#joِn9AXZlā-7!6 t#mAdGڵц vm7ىm6 Vdl#5yؼ[miëMuvwnݭq aխ~SZ=4,/;6|MgԚy%UDb+dU {ubeXQmf+| [heN#YRaԖӵ̄TS3BLV*)2*{G%FAe9 +Rm|/Y H`y9e;t$''8 izFx!suJǨ qQb'+b&)8*,&B#rIa2B +(zPO!rHX "N&B% `_3xΙ<;!w&T*Pjk޷xR>-7Vxx$.n(fg$1ez~x׾8?ٗi^=N _PG^=L~pǭB͡75׵BІgy~&I5w^|D4.$`׻ (Tn{ a7wS`G l`gV-(K}6Ea?o}J"Xž8kV/z\# +eᣋE/`pUئ3᝱q֝, aɜr ,Bܟ9g߫ +wj;ՐٷXs4+oprEfk5ə38Κvs8kgv9׎尦^=ʚ*257$Is&2|8~82 k4gŲIJY8ckF +Q9QSa#fUSaţq* G̐7(,|E-  g˭Br!+9h-uV;poNRX~ rjE8ɓ{׾ӄjvWS:B' +5c5?zAx#[w@s]+6u=;٭(5೰m}vP 5+PbD,HQJ.(b,ɽ)yɝYupvW~<=;}~՝Cwl6 ޼hګ=04n^mBSkȠztzZ=[no3W4n#|J~ %IvOO=-Mc{%3'GhD4np#f!0lzBD"N&2"pDvFՉ) +3 +VkÌF٠$t8&@X:8Ac]+o֦9벞8z]V׵WsMQjtu5Tr\M\gYsYF)/NQtA*l;PEY\ |}8!xqa?!;9Yi.?#bE-"l.?v" y^rRW9ɏ mzx9% ֆYMLyLԺEıZȄ1ǏVyDRc Fy73ۘ*#1jUjȨU W" W0TrÔTljkx SȇHa!J_XPBY(I$mFJVDY)e6+ч RQƃ{ rوKLB@a 1pA/*Xke~4R16HU|ԧ TRz)@>B"f +Y p +`N2\N0tT.sdwRgIdRT "bϓ@0"POOj1ˇI?zoNֽ +oפ:|2C'Rzx +uTL#dtM;'5~P89јA_=`40w?>(/7nǠ՝A^^67P!C5dP=kq@zZmd +gnCj$^:4v5٦mj@Mm#DQTL:3 ba: .l r`!P̪001ob̤aV*fԉ4-fUZ0< SQF + 1ؤF,JI8zvwӹ.v8uuQQjy&ĩf帚w5Ug:Q,W#봇*'Q2]W+*<:QN Qpلr %qԋ#8PJw6B\a{QSE!fgg؉PIu!#RWrx9ɏYYcgߢ8/mggfXeĆ=&&^[lH +*UwAHG + +6P"&^ss;gesf삏y>93̧ X'< }'6Б Kh߁-I|t Kxؚs[ARa  /w9 $ +HDneˉy>u&yu* +~V aаZX] Z|*P U,m +쪰ʽu5Uz5 \S,rZS8j4035ZksJ&w: Xj֌ڴUiUZ* z;gt RV QMezj,eR8ơSI9Wb1!u%ړѵ'P^xdɩEn3]&lG +X L<ց\#ϵ {w=g١lC̈m 4[eM7BLX9iqfjgƐH1Jwh؎HoO6`e'1tV&NĢ-@g&0*3HC|Dz5.M1LJ +Or4Hbg+)BbJ$tw(6DHcXA:i;al`;N88oI"¶QޠaAҭ4<:z- \AlYoGy/mVci/ŢaWkxԈ R߯RcNEVXózʡ(ZXXPi4@adτ-@,CɅs r9d<9barr,o3ȹsfyr'3d,/ ltO̚&sjO bdkNO6Of"3ӄYFX#ml(XF=%6hFJz !mtNCzF&XJ"HDSJ;B&a>^bO﷼twd,Wpb&)Hڊ&iJ* %;lG%Cb>yf;?n#||LJ^(_T߱?F7TfxͳU/?/G[ag? })&ߣ?#ޗO^ D> ~iއ==듹6;>?L#SpƇ {_y0y`c9}Cs'KfEAtwgX;~yw*,y~GI&_<U5@N {Qd{ȝg}{Bba2EnrWs*RjX)EZo\")"W!EVd6 ֕a{52Ho1"% yO6^9pzۮv^oa5 _k=۸oT4T8T0!|G v w笆zag+Pk5-ډ*᫕*z(Fa +ܡnN8qcG]vAaA19c3YCW"n`O].@|NƓNX>x ;.'m#>sk''y}휤m@6$ H|t IxؚHۤAR9 dNܽf )n( '>N#N\톸[6@@ '":9D g"GB"`up¹}\ظаZ  Z$`+| +%U,GvUX^LTܺWYDWԩ y^-u֩Kqd":j|vwZU0 $M{iث!+U26*3: RG1rTSRi,56 Οb0NʹbM] -39a19kY̼ $!d23Zk7^ ˾,UADwުuoV[֥Lwf[~<9|;S_IvxO+BwzAN&"u606HG Aezde]wY"f FB7'$j# `b &  י a]&q۸$A^w #d;Ak6@bj=佷t*=;o8J=z["o-Z42KuKaN-  t%1Xxil|-d\ ?i,-6fҼؼY3]̙4{53j<L ը!BTb!6)V +f$ \V\ # h dhŽ'+;Q$X82Js"j%i|F\Bd +Rq0_AVfЩ<*}PtZ_o]G,_)K x9??o1ׇEhT^P8``'87!05uaRJJ-P^P**U)UbJI"GY>򖔗LuV(-[>].*ȳW^n{oBgcK^F_œ귑E3P֓_GL_</{%}Gル;^r~=kR̿;?}=cRxsޘRF|d8D@?<<]}7L==bĎOiW$ǂ?f^eY+f!a$|I?dϷ4xpߤwgcWN3bjoV2-@1bTS/Fcwe2&+W(X xJiW;5|TM. Տ|v塭??R>vpȅ#[.ts\V5vHG]J8m xgT~V0@Lu&zN3BN{^77?'30މzHȉn^+rb7tP]#{,V.8IA7]Pr򀞐 .X$+A}Y6xO+B 3pho3Ե]M6El`@g v72H 4m hUB\6EQxVmU,R6ly+Aj*UAj(X} RWBjK;i wAM+&Tƭ"+e&e9lځK0<@hM++΢$hPiE*̠@A#HWfVF 44NnBiDvUL#]dId&R[2H%+]$-bCPh(R""-H$ux.2A,o&p[a0Oqw=ǧ>><=׎8& 3ate?2j 3vU"|4F4fÌbÌ1تhB f  h!R`4 η$Tå0yEf̀%Yr̘L3R2 ؐt#./QfJ2SD*#ՈIO1铬'JB*C$ ,&)L`z-*1 cyMYm< 58FùEk8/MrCqٵ*8T GKB6-DYulլUe1iI̱1Qf6e2hc0zz}tecHFFEӴPft4<h) ;()N jh4Z.j(b +UTTT$)=zUDwuWwuWwx~Oәgb_ -=nyb.67 1r$^87m'c^=Hd~<g)Lk;k~_yi~zA?wtmN4i{xv:hf .2Az["o-7 ͺyt6˷fbGfI ڌ@L~iӄvԫ&+4JH QE&]L3AwA]>b@/(f:ԥf+΄od PمqKQ(?oYȜT-8sl9WPmpԻD:e1\nLKFFFI0y0Ux +utsl/;'yӴ; (FCŅл8cwtN~Wȁ~mxEu[}@-OZh_vf_ !͂n>E{6>Tx9 D۪8JVpD5kjZfIf#3 +aFaFJlH -aV0thHvfH η$Tå0yEf̀%Yr̘L3R2 ؐt#./QfJ2SD*#ՈIO1H}DiYȠCcH$VUr;$%T(1ע0 >(s Zc4y]2!^yt 0;_Q\mvwڝ-le+`E BbLj +6{K"(6lh<1ĂbB=h y!{g]̢9}3k0N;CEhb(բQd!VeedEZpV3DiHZHkP&(B荍 FzF(ဧ1: 87e88c(fh EQ4zhiFQh h4`jF$ᒄE՞=S/{V5 2d?O[VZjZ$U6giM]ӯ':Y֛{YIa'Po +(C&%^Vܷr^>ezU"2 +;zo (=!Ńx(9$e9w*3y=e3Ώꏻe~+DK;*[4VQ8EJv ^ ||fBӛ%n[./4 '@݄J|m'xZjue&TFR;jKzEpl NTwR0ImP@u*٢r"#Tv:NcUqGO"cK,x.բeϬ~P|fu/rj_W{BK9n~vcբu/^ yx0)52 +&9gc_9VV4sSyYpXF$[Q~%ʓq dEdnTveLV](8씱iEe6`YW +6T6؀4zu!Z\~1 o`2V-|`e?VH,`Dv@FY9egA2"-}EE,D9jA;g*=37/ vQ4/`3ss3hSf!3vLO̘v 3}ꯅiS~=>5A&_=7Y$&LrX0Ab}hjqamY6|y ٴCq[va/^uYf.*YSfr/ Dx3Բny2a*sS-?OdSxG- X +Z4t'lZ,̟Mwc2\9SS`E͞쀜f!'EfNt MpEMFj2LcvYipG90F̸v1mfQ٤ȯ }3$JF \$fWV(/# BQ <ЪhĐT f +Bf +7(33bfNEk|lk|dp)DɽLoO3&)$a0M"zw72a#zu3(Jf&v5b`{1ݻI'Yuk.qzLXczk&x1x]O{"qGsZ 60ND9P69!4iqL-XmiYtH!1Ghf#A 4 k5zc#^Qt: jS4,qX' 2l RC34݄(= 4E(Ih4T0jZ#ZpIHjO{Ӟȇ ?_0Dv~w)`}]jix$zWڤ6EJNn 'PZP^W^Wѫ">_|d$ww׼xL{+t3H% $R%n綠PjuJٝ(40'&bĴk8sA *9 H**b@DK% "*(3ޭ^!=Lۼ3·3O?~k?ma3ȁv_BvCO>֚ u )УF`;@ tj'JMĬSFuo?>[Li_D, FE4~btF=DXfvEBB88ql5VE +FWУb=~w5>F+f{U{mسc'hWe cqh +Xt3cbM͍f "6[kThJwX)jbܭPiBĸS)ny" +rfmƫj"SU' +zFtPWщhU u0 +$|J +(ȥ@ ҂ezQ|=Gt>߾sy1;KGd>ə,)̤ 3v0҉4= ǏRHR +]7K#|9bp(;BJԏOٕg+=Jt$c(2)ᐎZpHáj i! ׈cu$(.lPUL؈P =P$*D zh{f!U .]w84d5Rv@;fߦ"l)p ldfOs +cdFض *z/"6j 'slFAm;UJd5߮Tڵc +dWr%jer|RҊ%r|b*@۳|dY®% ` rynhߍC/#p''`msggItϐ!͙.͙)͐2{i&iSc6}#L,N!&{@ţH$oPbD2Q(-A +S<hTDC4^BSY<|3^8&tD<&wL)8p㻠]yr&CPUsȆI$gXcL"g BDP""b."pE8=!t' B@0  >'{@=~YR {&qߟOϦx~ uMl˻N/jు1m@ ӛ Y7!t7>j#?'~'=%=!wꉟć ;%'vMÍm 54Us6isa:Ӹ00%銩N\UR)$ +[qQS/\nэW=m_R1߯0^CaYU;Pdwflc]qjBka;pن2K()VV Y& 8gY"VeDc +8m)(}uol%߁Pԛ0{PܤL~3zuۗ^~ if_ Y?߼sWg/_}c}/kO='wUwC'SdKDo,23Hw dr$ގ^Av + G 3$X+:Yd/ᠵޢ˽lJ^)<֖?2xR@'#oaG$#@/rNaejeZhFhЈ`5 cdE8n1j#Hሀ +Fr|eD)7|ALŌ!; +q:<K~x~? 7>YLF g@qRK$3bFIӕwk/O"`O1̾'f#g7#)Vx@ y9  ]iD0/aߟ`dB + + 019;A @fjla&n^Yrvު\lߪebZU12C:ۤtf-LkG9ݠ]otaȩ:q'k8=ATQ㔴טڪIU&ZCrjZEJx@GH TNA+ K9 "x$ )QeR +RWB!xcvŪ)"'1CR*I*xyt`fH~ +4cUˡlPI(lWa&TANrp%*?,*/䦘IHd L40C"'9jZYf& $E6ETP+PP}/ +R""ZJ[ꎵn j=}U'o28M걿=,11mAU _Xi#*(ImՕ;-3:,(TSF1mԔ Ky%.2KOe!*`:߀TgPnr =d*PDQ0CO0 g6Pqrz"wΥtXNT=$3EHMa:ғ|x,͠Z4v(u!)_x4ji*2k3#QL%dGOD:d<H I,!N7lJ,49Ft+>LV&(()vb"IHtGM9DEQLƇ*gE9D#HA2qx,s$E(aDC2V + Yh@%16ߊ3-'6 dqfbF)\b2`&##A(=10 Z!@׈z{t&rЪ F%rIHGJ&BB&6G* J}AhB" b\$a`b#(Bclb>H(< +B_D|||@x{{h^F*^#HF2ˆW})wb=#MV:MI,믾D} ʿ+ߣ8|Q}w?MOwX{"?G r ҫ?Yޅy=8='lqdCvO'/Aan +[ X/nwhϺm|zѭf=ְoF亍m6?ƸNݪlx`r ٥hٕPq?Ÿ\Uϻzݧ']k$B]ru7E/[ˑC4^F/kXWZeɼ,R/Mz ^r6@ٶNgW8K?ţuiqP?=dl$&00ĤG9^FaCiRN +Ӏj4 +èC%"sy%bBF.d2 #"DP8ɥ&R'' *pzNʇ`(恢AkEP. $bH$GK/0B Mozӛδ\5jGj>VǫZk-5#4-ujF>׌|M||j}Sm◠5 =Cu|w:5z_5B]ՠ2֯gmUP23Po| olt@'Rtě'1㨞 gt\EYW|з"M"8܄5:ù/c^:XMNi",4,U_[87ڈ23QԶ) '"'ƒ3+W ehv:(V},MD= xW'kkUWL$kJ'U%++{dI\Bdİ JPDPA- Qk @vxԉ%W/xtBp{m E9;W6φ[r\E9.m.:/\gY;\gr/(Q}ȇ8. H1|\# + ָn'`o{ ~[ +`cuu.;gUvov +%0˫n26q0U`lUq'Ϯydg,yzc-'q[X7!8Vz,| +G=1z[WڃKYKKݖp,H//]-ccAE?/x,pKWr&-y^ 2{-Kw0gRis)wO)Hc[rf{.:7o3fʟ6Aw=2p*ASrE8d>$"pJ:l$J,8c530 ɀ 1QQ!FfrtyPTb4  HB0PHD\*urXlP".L!e  $cr)hI J1!yh;AP!A EX,F$Kpp0Pzӛ7!eidͧ1O5 DqD?5cYkFi>&i>g>OU T%cMBP]hq Wŵq ЮzW5G]@I 1{W^W|x$-^? r[z(h~Ku};(ozwL3܃h(wHTA;)&ª/732POwDND< +LBI( )ڰꮮW Rw+ +( *`yt MW]Os&'3/}'sBd|>Ɂ#m1x/xF !&C  ۢ!^4ieH[B%5%%abT$UQ&h5,cIJJCT 'Jg4],nWr,7uEBK9gTosar +oS4T8-F9GҼF>'1NrvsqTð *p 02ˣ8X$d+&n`;yc\i=7X[l< +R\ K~|ϑ Ɂ%v]Ɇdw]i{x1:#5 +lŠMmM$$bѭ 6-5Vϳ0b!1sXظn5ck=T3QuYcDީZ{)`-fͭ +j8`NE"n +&qV([εz2ؒKWO0@gy9qсk^ .+|7*bI\HԼOXW29Sjĥre˥^KXNb՝;C| ܟ;;G=U}HhAVU:LS6d!Yy&+J CNs֞FdX^QlHX^9YLQw8XvVGw;m7 f*FD(2 Wd$Xl2"l VÝiHqrM<ܙkڑwcm1 +ږMcm2ْA*J7*LFAy)4Vnr(Vv62 u$,3AˡgWzJ#c膤Kт4 Rbh"iAH}ZD:Xqk5W,$fUj Dظʗ׆ Z鋵~Z :Zб0j2CKQjJb b"5bbE>B5 },{!mg/>$ gOo_䅘O^ 8V!$i4g +k %9g'bt1\abViJČ)*bd%V$lDL p#ʆ& +2)ر 7@!aeܰB\e!\(W闚8Na5a+䈱r? +DTH`&?#eI- QOڡu%1hI1ޗp@BtZՐ_5Ъb_ D6D-k tx{JR<A*3I&qypqV}B])ĉQ!UH d$A1q$2):X*$abX.& faC'Ό̨QphdFfdFfdEM7ӳp@2<Ǿpεlfj^9ݡ> ɳS +w|:T!|;xS+;>' Q܅|Lݿ &BqzAA` C><2?t;px, q+ +&1ѡ7'|+7܁`:ߕwʳ w_uwC|o?'h3}WߛeXe?Nk3jΪM [u6ZD?m4IK6H~:y3xDD ܝHGj vӲw<ڵ/Y_7K!{ɁToK2rd_& Z'?R$2)\D:7h)5JMp7w7֤w](.27pZ9pJ"˝BmXA-*XN%p4801(i,J8qksG9qcAeatJaau8X$d+&n`fg;6[zn1R +(Hyr*,#/Q=##u%u)r &b:$ t #5 +lŠMmM$$bꒀDVtk&HM")F`<`iҁ)lR$ho K4CL*'Ic3րge% Qz+ +1B/b$ Haz2MP,Ű;A4wީ'w$ņ¢BݬDlC· aa;Ր:1o}l;l̏@[ė>H[?fB>Y`oY[D6oB>KěC-Xo"mZElZAyzB6iq9zA֯Vy!D@kWxA,qW/`S<& +tWZ&`eKy?LZ[i" l;$pfܐ>XfiT3}7[Y识,P',nJPE=?C"YhBODb4 !P &d!F=1pQRlWs 0$?% sVI¼i=.(^^JFAn.n4 nn. ڕ3T+ R$qF,#pT8v)TJ@P(T(A +Ѹ"49.q|̛7EjfnfnFz}科~>FY㋕~I;!Xˋ`ϯx0?_ / 2Jy|l}COce{~]%Ǒ=gwn +I\w>]).lo{'3%)=Z,߀L7ީ>\@oH}^#=LJ d:I\wiIP{zb~mUsR;ܜ |NW,,?QwfgáᮼÝ/;V-gl=Pw΢'ڋG; ;^ޘN{V@AFZAyc<fXܱANJ@}V:ZP Q"Tǧe qdUr]DFpLB)2'ԡAA@ x;P,(clƒcv#| G?9"'#!;UN`+o.L628{y tpn΁)=R\ڏ|{_ l^H%ݻJ^@*h.Ξ;RRA _u$پ;y.DNܭD% sbo8q17Z@D[E@Q["AC͠pP`SJ@NPΎkMȾZ^ +ՠMۼ[^ |U~zȵVϪCm(퉂60@6grQ=~i4Ivb^ĨuכgWk DWgsRWVcteuPf*fH{5, d Pk%Z k0ZNh g.q+wLi*7C]c9M4QK͐2Xna1H4QUWBCjOR"s% QsF:[L1T}B|/މX g +Y(q!(/`@dY>!X&eplAP;#C%ydXl@)ʢN}EuaWʔ{1@ +vD4"Kґ(6TĨh=QPM&1q9{S9>|3=8Į]ގ&#VGKM. P[ɆVTki6 \e@Mzjd\nrV}+CKՕjKjJt 5%zHuRUTB=Veέ +DyRsuXenJr4j, LwfCdt5G7(74EN.7ŵkZ*+Iv'5$uʥx(7LS2ĵ +'oR(HX9 YZYZAȧ%nfI +Rܥe EV-QBo|ǵr<o7qxc '$gaˬyya7x/+~寿|.U7bd^}mŲ|)"z3gQW yb;is3?#|~POf0t4'!~x9fs΍8['n~o΀&YFA&ozAN2NalYDLw#I'AM7-6Ont؏a QP{XƩ݅Ǝi3߰nQ;>jǩyz}Fk6@k㫌͕_}hHţAnzFa/^b: ז=̨A޿DbT@%.2*mmBTݹ(/ 2RP%ϕ\qY|FAdN@Y7@V^F:*F# >r*y;z"ڱdF +-ɝC)+5qk@;#]Ppi'iW ˧|W{to5:œZ aE2ЅC'utatn3@Cѹtr#FtC:A=hdai .=}2Xuw =]~ng$\:ic@\:i"1bm#;HaBA>0Mˁ#kɆn$@r f[mȞV aGn68Į]ގ&#VGKM.mF[A(+Zc$qZ f4W(PSa76W\U_Rgu%:R-HMR]Ti!EPUYsQT\VF[Eq4SVvRhTݠtv9*ײSԮ%k$ VfIF +KKP"Ԑ *RN:|KZG02)N l*MBKmX qcD|/ ZZYX#U +Țr'+dXKir7=f j le"JBGˢhb lX)Ŋ`7PT8LdQ "C%("ćD,[/9ÂX"~h$r0P`&BZLY`2_ H?v넫s8df2τ!=K[ZA+Zq* 6mZkϽqgRgg$!FK{N|?o@,xf +bh#)Bf8&=b4@Zb^ ypӱW@N`O3p5TX(L]R3BC0)*X&QҮ +Qbv2R ) fp)#RR@ဤBH`2)\N̅0\ #p0Bfp DIR!>D"' Y~|yl.ӱ?Zk:*?T-Ԯy]xw|~o*U*omܭ:!}RX!myobk"n+ޱ-U[P6EVs[WY[wl[CE[EYzM MR7oz grWü(En"jV)p B>'wNC+ xJ$.'CFU;I]丱 [+[+m966\ڀֱUJyxfك9C[-lIHK-OKwVheRNSԜe[| g{)BwNsUZ*Yx݂['X"3(6fi8~:P`X55bsPf]+03 Ό7Mh"Vش˅B pWLfMXd7b?kKv)3'圚=_I\)ёJxPBIΐ_. '.kA.Z G4yun!D"' Y~|y~ OFhߖn~joaPv޵e{PymnO7:Dmy Tm MCG^ۼT>īnnC(|/~ߏ)Sӭj{@~ʳPzzVmAړ4 #hҀgwI4҂ƛ4xt+jqzRu,,l̸()e"0cLψCR-l/i~fٵ'ԟ;VٺS'NQ\yU`sgD1nET<@s'3f׸I4M֪Kz^OFS[S^׼-OvQ?ґF:˦:KCY_ul 9hi .mC38ΥG#BCa ׁ8R 8Trf*)9qlN@8ɖ ;pc(C8Ɩi+P,gGAG#Y>b+<%? 9ptA&HLI'L1@w{I=T@ +#F2%v s}!OɈE^ f<#%~EK` +g h J յp 7gǚFJ(pO 7Bi#()y{<ޢ1кum΢A$պ@#<6hiE iA.5Ib(@} r% +γz̅:9*Lzj8 uג]0Uª*H9%JCeQ{"mU,j=k9dQZhhLPOp +%kP 'U+4 +OrA?k,+WCjT,j5xu1IcYAU% 5G5,Ś99UT8d'cCj8^U^+ayı\ RJȶ$5RA#Yjgj,*PC +5 ABu~GKUa$7EEr,jRvcJT e&ȉ%$3\F$=89*HZ@JRcTDJ)9J+%1RIP +r^0-6T +CbBdEKDyd&R"lPx RZIe~Rɉ2=R3A= {`Yo=,nf7nod̲w;+F|+k k W,_mw\!_nu1c3H.zHޞ8ٶoOKC yqZ"TH%nFXJ (8D! r)y`H s&R7@J5 L]$3Ih Q``cd/-G;f/zC@BkB" !Dc'p-L01"0!N& MB!DL + +6X[[LfNJ̟?+>S>S>;Կü/p͸]~S_O8h~'^m3'߅ӻTkҰzR;'9Kjȯӫc+ޙ^io yc߉[!,~C-S8}I_XS !~/5ĻzvCyzK y~u{)˝E7TO 5UO'1%~>U±  Jo>XkBfږ:c_oa;p͎],_*u=~z.: iEFJv!8<~E)0L!" <84 c%ϠEQpG(Fal3yPpv8%K?ƥC1FG |2ŀ#a"FCGCBF||4ыhO7Nl&}9b<z*o/DS h"+ D8`3&,FJf1D!L0)IurΠU BCZyJFᔿQ=~2wG>R~2_/;ooSfIyў +w@EO%(9ϋ? +J HJ7ߔ8Bn'"LLa f;7,a?~<X28/)w7٣EW,o'U0Kؼz<ّ6M/RgFw#9ߑx?#|i?r>77H=j~mgLwk$~j_ osu?νn[NHomFw9ޕov/nLϮ'- xr H?ߟ?_y~}קЃW'+ޘcۏjwji}ttOi_u||jwMھ _lu樄# a8­Daa$.:JpW5~ J#|bb3ځ")aAkFUPF': [@6 69QPؚgD1O BP)Z +XWM< GT*ȿwBP2dq;'xqk +rnȾu|U2otC ׏_;wlQ#YNd]I&HәTAH2.0, xP"$aH<,B;I\6\lܹ313lbϵZx*EQcbɋ`"5EQ[Tlyy1DQQ@]%p̽1k}>{oQg*er3M,'Ìn±iF J5pYi&DfeA2;dMRlz(-IϦf:%:& +"=$N^h"1^@Ov!@V/ٵ0pQI1NXQ +FUXa +6k1lZH`V+X5*V`8,+ɬrRKf96 K̢% #(v;ɂ*M|8yAs%oq؜ɷIf791kD7,q72=׎NLMzD2eÑL)!11h q1/U2z}0#a#.ō g8dXPذ%DCRk0lؙAAgKdl(\C6Tр5GƝ*K`ΗٹKeVb9]Cse6V/VqΜGtzol +9Yp!'v;0.V]Nc ]Hp۝aNԑn6vu^P֧h/bjƧhضKuG@Ee_k>il\!H@x%~ aY/,pA^!"?j,r+Ī`u D{jW9>$Kf{yh/dL/ )btT47ϟ!7MNv͙gOr#47;6|X=nE3&P[wӈ=:"Rw>2RN3[~~E?5y)$o:'̛ D;}%zUж;$/۽([^&#wHZDzҪmZ]OTv_xצo;tvewW >ͭөkmAL9skˆg?XjZ_e:עͩJm*Ĺjn(s[ba\m+ub䞖b<*) G' gQ fV.$qNc!#d̸s"=MbYapT-1=yX iQOoR-"ԣD/q#i}VM׍ +_ES]&o)W)*吲Cj(A-p\/ªRJJJi%OrDKkPZNi"-֕B +SV\;Ê 1zؐbuV!C0 QzI{uB{ tn=]:Evjw:mZBAޭj L-ў-݁avmBhvnR;`o"۶Q e=@Zz: VZ0x lZ+qZ`^V{;!Z +E֭X;Zҍ_pV/wV/Q-sX]IV.qX0} +I?wT4jBo.*%Z4ߕB}5EhZ8k ?U`,1ܙ,J̙tP39NLuVΚ5Q9s)Ls6$S'9pLd>dF`/Cczތ\DcyȽ 4I1(ZnBdzi)h(B#VjL&˃RXy!]%Unr:ۏwu},GQȉ8 -g倢%43GTP0`O)&SȭrB&)3^.dǔZǏxQرcqH5fFkFk5nܘ7 >_TR?^U띮s`r>9hѿ`\7yρAyB,1D{H?x{'noۜ ޛ3ݳw$<)99$ zhi,Gw:}88\~~'/803I45Yr9$uD̪kםD:|$w>M$f^ AzשfV|` δ{wiy?U;g^m3`E5o$ p8t)pO]-TZզTCUH\¸J-VJ1s ʐĹ,VjC F1AQrOK1T\S<*A80΢{9g͹l&83C8:$ehy$Ȉ57eB0pD,0Ntw!^:AZ[T'")XId%Z{x`z<"Ibúb\ j͋btYRv2 ؞h bPJ%& +_|h|y9ͬ3㽳3(x9~~=3^VܴllCX|1bG;A 1.C!6j8آA0 `ou6iYQkТuv6`LOH)z] NuK J:Nj?aЂ+k6 Z*JTi@ά*T1#h%5S`e:e2HsQPkjJ)D֖)5Gĩ#4ψ8YB.UhDa# 3#T4ch0CD~JRyEʊVBԾP}۵dIQ[56"[Q[E4/v~ocg~/mlĜEmGle_Io%Eo:yiO=">Yccj{3|A׭R!֮DYX +]{?,B-U+C%`˗x#-tD"/"x' ,dy*XyX-Y×T@,|y6>&i%s0jJ!*)IIAFL7 dT4I1R5RbF)!q`R^\`:- +j"@M j5(?UNڏpA_peP*oo Py:KtqEP:s\$p&8H H H8L)0"ggg'''gqD-ʬYwywywYf7|ƨ|:STZeCT=Zmj5cWZVh;VԊv_?,O.=x_&1<<} 3Sʳ`/a6燋gc&`n ,o͵fu1kzwE)/w>|}wwwޘn7ɘ-0Sc6Z0ɺ/<ƴM +<\X_ iLd`?] +vv'軟a]ᩋ]=p%m1Nt;%S4V^ֽ{evv7dW~VK3`g򤤍ryzsDy)7ϰo=Igg7ݬt]I׺ ^ם^W!IL'D^UK# q_v bG9q2ba1#m1+ќ("["/7aCM0VإAs(+|*B0K>llCX|1GtC"ĥY +`1j8آA0.'8uEKاWkI:ۤߨC5hQ:zPg(`6o8=u:E@kV]5:ɣ]5D)=RCO 8Z 6Z*ʮ*T1#h%5S`e:i9$\fԚhRJ`6@JQ#::YBOɪ.UhDa# 3#T4htP~JRyEʊVB>>H2Eɓ'ˤLd"L4od'<_E8>O1y拄 =ҎՏcP?<;~x[cz8z=%iwOggqį0SͿ> Q?^> ጷES[!}{voxy{q7ݩd9/i뻬A {~IԯY~wu_\߆.}Ρnqڋ7N!/ǼE84|[p}aCaAaΠng u=w؃eͨ]nD؁E󬐲\ 4,SmXDYfmPa{f^~ITY^ٳUV27͂jN1ARa)F 3$cɣFU e.d. $% %H+,h`JN4FYHU`Ȓz:,Z daY\I^]V-jʻ32齓 s_ :F@dnzTg&D%([X(ZԫP5JͣR VJD8q*uR!a +T\I’D R )JF4Q8LJ;O!ELHH$  ՗W@@[o櫾}Woڦhz0E8'4]kl׿ư۶^h1>:Tx`geTw(kdg4B:\Q~9- y<_=ԋ~ +Sy~g'=)I4'ɅU* +̈*LB SoYHؙf?YeG,|a_Jy*9hN~OY}*gC+`*m*̵v*eϱR6>ˎ8cCDGwS8GvIvԡl?ۊfgjcu),;X{lʹ0hخ 3*Πrl 2'!;mi¶ohNFm뭔/[Sm|4,+Ŋ؜bGdyHb`w5M5n +1vOU$_j2&Z5&JFP!F Wz9,+:2DDE`ёsE}1T"c 5l*r +>){7d@kp9X"rip+N=hn$V9aX63j"yhH8f)1(H"z +aБN*1^+ iI1JJ2V#*TRTB*D +&D]THX!Ab7,u4hh$iQ$ .,,%e!`"NAH}&%$`Ey>[o(@ ~D}d-Z&j|(ZZc;e5u–X|]}ybz׺!>ZaՆkP=ܱa;ڕ5+,^ׅX +x|{ܔ}Y̙']E\ꊵ| w;a-[$g9H!{B'Β< c-qB,2ȥ d `d( &\bSX@k Jאpi9Z sШHGZI 4J[RGp@Iͼ$,S*!.Ax<q]]$3qur0svF9rĎeOɥE2؃v)!#q$2)NɬH8H%0GA0cggg/ d8b7e.symW̏bw-{1mt2ac*Q5nʨaγ ,ӛ ]8<>pzq]!e9?'v'Hs?Qգ=YVWnm8%tp|)?1baC;g2͆V͜ yW&F DF:jərȞ, + 1*ET8jC95~ V&ȜUqĆqDi.R8<1\9{粧aߔ~^x|lf~ cHn"bzR% <Jq'>o k]@ /hHE ]E#"0B\iC\n ,|t n5ZZNp='e wWy|N5qK2bu*$&/EBP"۽T f2v%b1ԦAc6ت!`[Ts-tZ&LFu :Do 7;S#z$q봲Z=a 4Tv$f]'ufjzV:,CVjd +ZTch:fQX`53` K+cxNm我ĩ>l X5'QUE +xkE4UyȀC H+0h:zU( < ; VMP~CY4)@wa&Pb +2hā "?Fc,'͇WTW0޼27.V@zoCDP{X(jdwIT0Yf7$kW'3!&g{|ߛ3\ljKX+j9Mly4Vs@^߲ ^;h'IZZ@U89A]cj,Ԏ-ᘚbVuTBSY`SY`>6Vg PkJsL hXq,_qLv&?Æn fA䤣"VD"̅7eHF>׈HK5EsX g`o>ƙ;T #btCXC:=bF2jz1-Q`oOѢ&VR{%S&iL`%ĨX-">FHxEE|Ij/.JFDLĊ yQ㔂ȱX•a,bl8KF1Xaa.8,7Gp9(tiQrza`2l +ar(&Rnb1Q2g6Bf22Qz@VBtj"t*@T(5O.`"eXV?!$n +IAJr&EIhh(̟PqBD(cƌ,of4h"5E:|}3??O0ϒ/Ri_N!Yʨkɒ^%n8UꗧS~ w'a$4?z?=L*H8_ Q`EBֿ>|prۿ>&qC bX;L +3RuCۿwgw_NN(4\~`Y}yh +gݦGц%ow py[% ,ؚbNqMAipsw (7q!v연Gd]+v}I+i 6ll칁 z _[ [ FduWymh +g>|2/Ö/$,޻{R]ޒ;au\ۯ_5sX*+ۯҧ/gx>%,[wJaE>U,HBX`y roɅs/_V^l^ֵvA~,^ÂZoeAQuD\0*ntHi )q@1SՓfDI[v61ŻnEnSw܁u}((إiG8ą#bN!uI{pr(tRRp!w">ίc뵜;Nk;)}[p| .7 vxXGC:E19#mK8s`sh)6np0ٳ{Zk=>4cXjjֶ6'ƣ}x`ԖV FlZfa3.Z' FbuѶղԉVգ8rkE--q`5UۙjT[V5kD4x9IK+ +_}9'+s YmՔ%SS.6J{ > B6Vg PkJsL hXq,_qLv&?Æn fA䤣"VD"̅7eHF>׈HK5EsX g[0(yq4:È3`4=֬:N>3ECLK"&%$(Sz*9A`q:ĔIc5X 1j*!V ^Q'q*rRZ*bԈHUXY@5$/jR9!kB1>E gɈ0+CV"=l07Cx\<'.%N;Mp6J9h |vJOƳ[i9fv ) j"V!%C~f#(d&9(k8:,D&BJ 4JJR!BP% !;'NMdyeIr' :θވx}_≷Ǭ"1; +H:x#^/XhY[˷S~տfySs,"b V`baT4!A)% !DP VH,7ȥ][ҖѪEA_ӣ޹ߺk<}<}~7z>4m?7ջрmC/*Ў7)6ڿv}ߙ҅JzN}rv;hnF~>S$Ž0u]5py~7yvimgLFB;=Nh(!)tS=@GjbCAA.ƃ=8SݤebuYӞ,6*aXOM_W(\x4p2}:!82IEv^*CD2 pԡ8}9 8yEjf?A}$ vH@*{r[.ICe`.k$lmA-uVBelZ lO1 R֓,XVƚ/By> Q%VͿwʕ3y(gC+}$ԞE-} sKf:k4 p +Z(cA >3OGCM: ͝vjSQ6 2D?BTI׎Lz,cԄ+&_>8/#%qDb&0@7ďe$ihf܈LHL1âF%F ƌ>3bHD0|p$ѰA`FE8PpwD8!"1G43ou@D: W?UK6UOշEгStDZWwg7m3=‰Rؔ$-&91D %w uOu SC1 ZQR|&C: %TP|PQ<u t0UX(F9)UgH6Nk'[flfVWYMCb1JSy1*B S1,RRDD!8_t$C"T"8N`"V хEKi5JQxhF ^J3T 3,scypgHT a J)I! +OppB`I$((D.Җ-  ETO<<t{z6y*Wٻ>6MRuZۆ^鍻׮ND`?)sxUL!p^FwvyYDwEa24I]}uTpG hd>U#ٝVyv} ҀD?C[=BS:*ߊ&ڷÛDq'C VmHMk N65\a2{T[USTu`*`UÕs|c2DxNœ9 ǡuk?r+Ek\W0\GQkDyGs݀jV jTdq;<Ճ(OP$)qUJd;/~JC{{OL`EAEe@` + +3 +l&OG˽9wDO~XyyyLiG V@4))06pG5 6GOUsE嚆J>93Cg ?g0}􀿕CxK}rD}ϟb}D~u}?=_r^ .ݸw`mמ];}x"P{zڹŋwڱ}m=ymڲރmwph{6slXne7۫_ɺUnp[+ZY(Ƽ$ xiIn JѪIWyiT@$1jA TrRF +($F._*EO@ 'D.B32|p>/CKy<\,qbg+ML )PHRH$̔|"!v"=.Wʕ8;;,qrrrƉ79Yb[yu^u^ul V88 s/B^>=ynOy/v^ξCiwݽ;98Xv~X?f7m]*O{~0m~f˴477-w3Ӎ%zr/%.'7Gho۩տburLe2h遖燁rý_ iMJńc~xnbxvb5{o aزX磝@gŌh.}f.5 \L;Wa (:P(SjkCjuņb0 cjOy2G*4@| +56\䨶G89p+4 U:pƆ +Ө}ͩ!V9 ʞ6eX9ʜ<(2:duQbCq?TdVQBD +ܳs>Wy\FJ7yȂere\2XI{1ioz =P*#j +BHf}u'DD#s NJcہ9EBEG"G"8yAíŒ͡(d6X hʾ`-C` w  v:%Bd 7)n-Aڤy[e6[9e[I!EAaQzA"HX",-Ĩ@ܒ[sM<3pA$<;9kog0ڬq,l+35-,u!ɪHN7SM Q$V@Ki9YϹ$ L/$F틴`2CT\I ̴qqxF0CT Q;L0zFm3Kh! +wm1E|d[1;? ѴcIM!mq[7; +'*[6c>z '7mZ?yCn}w%uddہ Mwe۫1oizsuXO*? ZŸZ܏(|/CZYɊ>Dy;$z-}K_" E,gDx+^5% %f{if 1١(Lb1a$%Ix pVJX b̔By,&1PKC I !A}S! ԉ Az;r 0"_Ow?7?o1z(p޴ u!P@() 3hZ=// /___͙ n #8m^A/n +nqŁы7jl9Ʊ[ hn"wXl=}tSYOo.>.x2WIIE#N!/hW8r#ޑ a +GW0r]+;4D7I.S&!(t(*kD !YbI3AIȵFIO6wE ' &q$kj%A$ 2s,cDxH+DqiR]*r(^{޹ YY:"-4j;d)ɘ[<%Ir8 I#%eq;!$œM>^Dljzbc>DֹGeCLԍ'1׻Q:%Q""%;w]is)rԮ".5Hmdt!o{ٙm!zL=ݥ`ݕ63Avwۄi. +5a\l7c; vsj &Դԙf&+@vŜjb0"hXJzx:VLALW)zySuײtpN*]g5B:E{ovCPGMh)牚8(ޑ4Wk*0ec\:L[1yI})ꏆ(8-dUS"WuXprBUY8īJ0%ecP \*q4w$ ,ሊYXcgrR'+`E ǥ0?)RXlp,&'Q0X &!#m ʘn$-Ui VJg$+){YJr#baR, +kEmql͊m z0>?-3xݝٙwva{ߝl(vP7**(] + +* \'&kKffxw0_>g~}fJrm\;XIQcl,)̲Vg4d,?kH^ g8@^ +`i6y+ 'ՎS-VY)6YVDz +*-g2Q,dAXZdhJN0eI&D#*,ZģeI Mf #0߀hc8XbA^X#=/ƀ5wGfP TL=V v͙G̞3kjP05oƔP铵rrFiѓ~L@BE'h5^#'cDjeM &3q "4D!bn`]4$vX.;E4T0Fحa%Uv QlfRe{jYLG4Iz1P @9JSC iU>aHE2A*c9 +$ @QCph!$5Բ$TL%B&D3'PhF3NGN՛M_do?qc ?1|:~1>빣F}A|9?fngHgWӃ򏞑^| +,wo/)g5M0?0Lz>~d^D"}7]7ۯjlٶgO.wgPX]_OmCeD0Zj^qߒ`'k4L 'iL&O%jGN ʚALg"22`Exi5/'bn`]4$vX.;E4T0Fحa%Uv QlfReb5SJm$Jਕf#)P@>& #ǠS)pa}(x[:'LiPF1Hb,G(@3jWSGp$7-aKB6}*uiպ + +(**P 7PveVUp!$ֶj{'r$!?{|yfΐbi̴Q8HH2`v"Bh0'|Lx<OOO7xpc+n+؎M&x]J_#% F0EIb^>\\,vR$K:ߟVa5^3̷~hL?t`S~׏Ny23R'SnM~޶<;Iԯw&5/gr;_oXϽF/SocO( iZ*ۣqp!Z+ 4԰P$z;D. .ZDIʾ\5e؛!2 )AekhG +X{v=;4Ϸ SؕEkP*:7]9l"g +9ڡYiJ5LsؤDdmgfTP4+=YғChxF][T-[ ^ B) +D:!NY+HMHWG`ck! kr+_ [[)eRNW cǯPmJXL,Q Cl^TDF. B4خevXXlQ> qҏ3A% Q.x~֢y' G Z8F@ , ?ß#p?*sQDIGJ슉DJޛ-=ˏD̔Q3$X;iĬ~VfNŚ1C>lڻ,T2 1yI^w{;e8/@8po"¼CňwP+LK1ӊjh.Ъ)KhT$QRuA*2B(HL!` +ADd!  +d!$&dB! Y\\F;!&qߺ?Ƃzf<-_{[y:0m~׏O{2`H0Xy?e~Ӎҽɯۖw'9a΄_nG w[7'F?A750Mzx=l + +J{Э2M7hikJ!Dt7^vE;`0~}̳Wz;#Hϑ1|9K%l:'yX 4tȄdIi툄[m;mRy7;RoRlv]osd Z $t @8XA,,56jS ,JcDT hD_la +-@Hh_= 'n+,cCzxAռ ykߪQ]nU^V_׬V +T8VTOդuQ$G4.9AJegę:ÛezQ ګ ێi;WU1P!>UںI#+x e7h,y?ⳏPi/Ƶ>ԆO> ?Z#WuIkWyc}gB֬D^ K֪>X-(~^ DKK{bw勼zY`:֒ +즫>]ۣ@Y{&(&^>^ףeoFLt9?,q8|qyPX7^_0.?>{'ݑܝ7Nsz{?óz,9132VHz>h=m( +?ҳ0_7r{vSái9эC7ˏWg(8k33ӯN,> +=,uhs +80;rEu yv`7RGdXPQ22 U+Q#:g1TR'{"P5*q2c(m%pvc8Q?"H>aC@ƃC=yl^{8y)w\ѝ9s@g}an]3L q3#i#]" xpm'$5fGjvX zێ^kII|u:QFB`6q-XAklզXĕh( @d&D@c,bCDD  Imv{,` ҕ\>o P[5-KVתV4+JyZ@HӬA5d]h*mT6Dwۨ'zt=ˢ:g1H0;zqfjƀE^@:Q ګ ێi;WU1< VNW0kdIk!,QVqXf5g40wGL i)e(-f +V_bBcIY&Ū)45,Ȅ)QfByUGMA +xGavCMiIrj%{5B( ոn{/`l0lp'`8R 6`w9Lh!%$i @h-:ҡ=M5=jwB9mcþ݁YHcP9_a-veU_ԕ%Ֆ#)2z65,ɪ**9R *Mv,rXBiIČ06%X1+i"fyEp-V fjdD`:?䥛d妲ĂdN-` )BV0z]f bu0X!5Fp):1ura"uL"L\Bx GpS aZ  `0]CQ۴"dEl·¶9ر9pܦ ^$tcaml izyca@ (f@z?IVk ygiJ?!YkVӫC$B j/B-V.H +Y+íX!,_`BIKxKHB-e\S¹j‚9^Vcz#sg̸^f aF0n-4L5!8r@L+`*PJXJhHk%d F3h^K Z>HQ:m %D<Wڸck^ODQ!?_Ow)7=켼Hތ40J% 4)FAp P))SR(r< +<$g/777wqjN*YMɚɚ,9}ʴ)_nu_GB4z*5~{<[/O^?}k_*B4OWz5wAnrWdf7d? /qh+>r~^~|XC"_ oWr\W|df^P:/0wB^>';9ߐߕ7^ܟ劗̌q{3'Ńw; w{ߵ܂Bw7z;+D<=}̀mnf0yAސ'j4w|_ޚNA` 3M=U=OxC#5xCFgH?}V{r։n,tU;3bʑHmXJiM+J\Pi -N4;8IN*Fn<ıǡcNpDa'a)AJFQ6:P4tjpbz\}r}!}u{@56_~j݂*GWp_\F*lr|q9 SrJaI}ByBAqRA݋"y/Cy6wzr19sn_dۤg+)߉d$Dzǥ RqRlnv$LHD'nt;qqDb% ڐ蘫6Qb}g"q1WN"zxѽ'#f^Kڏ׺uO(otS}ZEoW)\ҫd{*\oiI^)P (-pWu#n]n3H&[Y +ӛ9RZLlDhb K.4Bsʨ9R8Z@yYҹ,ΟΞfI]XG:jy%t6:pmLa %qhm2# v +pM1ZΙt#'L͍BK[q̩+srEpQ'Yicu9Z˹tthAS GPpNow`7HV#;h*9+̴]Ů+`bqRs nO{BdUXqyf\؏He9,4$bfp%X&BaW׸bt*bոL+`t~奛pjўMe39)&&ddp)BV0z]f<Ϥ%` iBjRub(-F$EDH=ÞM<a`6jlK\l#Pv@L^Rv "DmʊܪEKJ +`qN}EeqWi+t7t T@  f1#uQ33 :kYguvv{#^ռW{|ﻷ/}:c +8KdG`fMLf!jf[843.ʊL@3󟭬O0 V 3:D4i0JJ2nb 3!Ѩh|h";&yt8D2I#D j#ft|xQqaD#c ´Pp`0HRIP&6Fd0l 41.zECt>30DX(/RrRZjHI$4ŻIK4r2V6c1HA!6Fm(P6jֈTH/p& ˜SZEb 1(UOՂ0]h^3p*?c4Xe8-CsòzVCkJAbL4JB)5RK*P* +B$5@R'~}W}W}%_~Brog>J6ɦ|dwG_RL_'b\}?OY$}GaUQ?_ƼC2vO!]k^О0(:λ~k닸w/{ CcPXozEφc_{㗧CW?)F߾!wdSwA{'U ~l{8W޶Xћo,zo#^q);{Fmwjv 6o =7̂ +;-.S.?-%"P_A P";^6 +v߯vmo%)im/Ȩ!FmkRyUʨ@%mӛրnHlV?.Xh'6EP㫨Bъ/ +[l +d_XX'Z|i+뀵eM V?֯|sI顕|__D-_:2$ =jh(a"B0$Ae^ޗչ*LNCeD ʳ$拲Gef>?̼[)Ⱥsz4n4wyWnFhԃZKZ Pj"E?ɮUrƦڡ2UvY*m{N%F=V3fQn^8W7<.̵r'zyW>/sj.sn=<\Rt!pԟq-?K<^œLa: +Ε<܋bJ9#:=WcS|"ڏE܋;ň{؋Ha1GvyI>}x'1C;(v^QJK m@+o["We8hΞݛ"vmv ^̶n-puY (^Ν3ܖn5. dj7*ZbPW8%+ݘ . *Xpr]JuKDk7fKāYЎYKuYc'Zm,v`.cd-o,ir9v9lޜH-AslnAb%Y6&+#C͟d2gy#1sgD9#̞f25" c +8KdG`fMLf!jf[0S̸TkI+&}AM83:ĐLg'33dLH4*df%Ǝ1INcF褑FĄp 5f3:><Ȩ0 0iG w#n2|a6X#CPQ@NW4$J08M%2 u(/dz(J0$4ŻIK4r2V6c1HA!6Fm hCf, g0)HLj"cXhz,\BzSK:}k\ΚIfaKXL}V.; +"("  +XH`Z93Cfw˗w|Er 1\4zArjSHBgDqɉ08boo#;[l[`HS:av5M!3T?O]U>< {ٓ663p4d|`o<{gchwN]TQ êSD{<4Rw^?xx2GVJyp_!mp 1EhPkíaDzl0zFi`h"48MZYxnAxyjbw["Ucd?M}vqRb'w5TRM唪.F5WRL Tc]9-,X~6̊RJzV" + |DI0rDȵ⬈xSCNvFiSVd8 /K "2ﬣqT_BsVO:+6=Y̾Cfo] +լfɴ=n%~xyP͗`cg돜m<#[Ű\lm~UԶ{x/6UvhsN滗hɳ-Ƴl ̆h)S m+NF>j6]P / +VWVA(ZZhm> &c͚"FhMjڪ< 3V_/P_V)F˼dP +RWʐ(PڭjRi5%1(fzj ՜E@4HǸ^g\+~,\+S?yZ W/05uҪs,Ee!?˥z"%3VS$Tq^ +N+6'I,=,Ɨ70.dCvN +pXTQhg3P +Η:Fg,>s>LN2`>4+NX8AR d&ǒH G4`'#H0f-=ĭ9J;b;_H񐒒 (9 {u(~[+'إbwjYmN-!%fi{hڳYK7i%"7k;6J۹A \-\ 5̏j0 `:5`sMkՀ ׀" _GDb+}ik +_"lbr5  +]懅.! ЍSs,(8%UKA+XXw|8˿ ,_X"o KzA- Ŀ_n'(ě/~Bx!_0yP̟f +uRW=y*@3T %Tto4%`T 3CMv@hi]9S20yI\x8ǺȄ1.|rф|(WI]c@B>* +4`T CX=5 CR4V"Z Ae|? E_L(8~r<ިPޞrQ^*J@D JtCUpwq渺'3 '#cC1iQ((j r)Έ GGG'aqF,vb-ΙtC*T?Y'Scwó Og>Qh̵ .X҇Y?M3c0Qw}>tt icC1`oۧXxxh`wy/@:I=o<}/n`OZ</b6iϛ5胶5%]<~,i%Jace +7+SM7/*$Q.%u5VШjl)FVRJE\(a%9zV" + 9ۜ0 FNsVȁ7qaNC"$Ll,' CdZqlgQ##T9qaΊnM?;ŵ, ,[gf{Il)ҥX*E# RdQ`b|VPc^9#3{>|_9{S!-{HA+B -99z2.3^$Ct,/(l[l=݉}͸4 |ZboӮ!;I4Jvn#n5IR)0aK{!Is>YI$ߟCll<$fEȮJ0aQn[TXĕDx- $:B0[JDX` 4^&JiIo2اu Ꭓnî:Pg %uj$Ikem6j$k6"vf԰j U&jVh QsyXˉ +aߖM喑2Ii(P[KKX 8W!%oNqΜdӵ'8"Fb+QU!+QUhX1U*)FR tp:JTzw Xaԩ\~~2#:2Ex6OBK +00a#)8a.?#29G3Xos7<9109{͊,Nс]<"s'ea2vҷ[ ?ՂؗbưZ%{- lO;ɬU͂ؕhư  #ެkCM6+0!cm[%E&DBA|(.L/ fDĆ1!zE[ (Ld0*b[zmDQ i6$7a_ Jτlmr +Bx4AAO X)POvo}>Y3ٸn2OQ_ pa?5~C }_*?uӰ`5h+}+Xre>ZG\#pK|(b|/Ѳ> t/b|M"Z4כ&~ hƼٞ|0-3kDfO%iճz)艘a"jS Q O SIxP*L#XaT#Md6P*F̨)8Eahd4dJQ&?S:B t>D}Un#!.Byk݆xjѪiQi)f44EhgFMihFM 6"J]塂y`q' &gĉnx&be$2n,cXƢq&xӺO`X}r+t~%~xF!Kt~X{dg3b?]1)zd{% f`!loG=t7NK~y8\EfkNh |?c4ioS/z;{ۜz^zMԋ[я̈nL=H?5zD/OiQsF(h(!k>k~`|}΢+γnJ8Q d8U#نQMPDh*"IA9.}QFpډa"Nt0 + 9Q@?ݏ;qGHp 89 z~x\HnölHa;$4${-p m=݉}$i {vAv4JvT f#"dhHb' !~w6E]"{ѵZI4SlV EE^DD\AwÅuVU̖JDX` ^&JiIߜĵاw nîTuz qƠQ^ֈ\f6.LjL.,XmK]5Wu 4WXD]m Tn +h,3N$R QKKX 8W!%buSt$; =$ V39BVh+ѰcUs#R3|\yVң+hND9щl)dzyZReQY ;vg`9%xD^&h k"n23I i `EXPE)RE(6콁 +]]=ֺg[=]w^LpNL@>yoseEkl}+yjbm {ӸFZSMլh2F*ڥa)%(ZQ TIudrZT[F{ )% M(^BRˊI$,-BR* +(;PTTeAiɡ;Pg(+%;Pms8ˊigڀEV /ݢhaȕIzdZ5QNr.l!Py6"#Z`B*mNRg[0.̟ %'7cf(iwIJN$̞og%3xhF\&f aJ&5mYƄO2b(q &SLM5c &Ś1F nGjFMRLT r&5.Dt3vTҘz +E#DF܌ЋJZF#PaN-0AaNB,ƵpK,PCbm*ʆ!VcݦY0l!j?kJ_d1,|K52jQpk6= +2BFA8@?$CA@KWAz?W p1`* g\PTj 7WRTR~"#%f> e,DO 4o1xMĻ73_7hÿG59e?F߿5+ ? =bzݳqn|α__;MgJ@=4uDɯOG=(zF}2 +񧑿/GG#)a_O? `@|?'޾{s9Ow/7zyryuG=}ہ6 ׿]ً;4;[N-C؄ևxzܦ::i]yDc煓 ]vX'x+nyͅ;ZqE`(J}T]WZhF8y]pWqM~Am'>^`7.AM*o'/{ a`lBh +o#(O/ I|Ҿi{#AK_5߫$V +J]<<_pW'Q+S#Xg  +}]Uxt%B)wN +\n*Df Jw'xEr ooDrmsɹ#y o,qY"u%7kd2422.JJo?Kd^KMe~^3)BUW۬757ڂ4,ՕV2VKGlRo.ɥfB]ts-M39{B:s% O"}Owjrr]j/NanZbP.(:Ŏlgopm,޼A:aR73n7hoM# ks?@ڳ }:]k{gg#+ڱAھƷ52, +&li`0 |*شqI +XahRˊ0:XW vi\N#jXhuҰ`d + +G9--ƥjˠRZ^BЊP,+&ʋEPYH@E%cQ<\By$"J +@a (Z8 +s@A,+R~k;ieXtiV W&'N둕j!SlD|G9!<\i/3m H"=)H;\=K$gCɉn2,Jeӡ9 f7!%ƛY Ai&(,2}IH`i dP&4qMا:k&M5acH܌cXRLT )n4ѣ݌4f9DQ#<:h/FEh:7#i%Cu1D+0=9P9 uGrZn .٥&5L23!$3bEn6.V`.(kCEՋ]$k[Ų/s0g2/>yy=`Lc͌A&G,Fـ"f1Q)QA Q(%"9CIDP#2!%:̫ LáV#-I.H*Dp*a(0B&(p$$2 cC1ee(Y!dO.AdB$ar"X,fc"&`Nx(@ $ +D*dxo[4Z}5^I,qek ed@@||4sPC!q:>{}c䱃v/yNf.rfƫl +2* +V4V{Xpe۲˴<׹,끥/K\/вX2Y<XxմsUliJ= + 423U-᱘k2`Bt9OҀٿ-`go[%~;1-VٛM9f%,z-H,Rh׋ؒ$%]+̼z|&K"[b1 rE+S+O\̜ܴ>K{ɮķNЛR\+˅U]9a\lە"rTdb\,4B{Bk݊?nuٷ3M3G,@Ӈ͔C&!+)?h딲Vrj RzS~k}6A?@`'xﶲ|vx.;dC$0c;lNgpVrxr m:Fl _}cF=|dFۙggCw07ؑK@q;e[ٚm¶dYI06ᛳȦLX9KZ+k,xZ;% ظk*+%o&('d2,˭ePqeuK- +KVAk[0N[ (h|XH7sX!+,&fAYZ:L(1 0A! g [4 IO5AR$xOғd̛iM 3ő:2Ct"eQJeVDQV1R2:B!} +HoBˎrYC!BnaŘfAXM(X/E& b2R6P1J&5D",r^'Aeҡ2FdBKtZWCF Z&\K&U_J)%,TP*a*MJQH0I+d# +p9b`P9PBȞ\ȄH)&DX$$$DM'Q H  "D$ +H[[F߷$?]4IOb)m4m-5\c(m-#:a*<+Bﻊ;Nw{g|)?!B|jwM]q0]C;M >p _B^?#Z=>s/AiQOm|yRcrP^޵STw3v/oGS^!oi5H^a$YUXtaKٳ]N*Jr+N}EeqW n:9g Qg ,Qr( $JdGG%*Ό:;&Gw/j]߸|η޽C[pThۡb |9:=h-b˨.8Ԃ*04hE0TO.3eqъjUFv9Vc8LJN9dqaP;S}I}YڔGId1Tʓ[b+iRdrJ~|0QT`*$K;2q8MIȂǻPkcWyōv2B@)bbu&#X.%nH@3EiGE~߆5aq[is%6HlB"‡ZPaP-t)KHcBQ!f(A5!}-ԓwEO4ٌy:wO-b;9/}Wo[Ͳwvef7|z((tFsQ JV] +UKJZw>uw!:k+}h΋*1@pR~/* JUkRͺu + rNͪFri:!ϨY5T@j1 &UZT1Bi-QgjVwRTbj'jNhaBkQƛ*UAJ5fKԬSgK՘34lZe%,VTE̩j{(`N*isՒ| rVXd+ɲYiRfu,SE)P"Լ +545.])OSIU(a\nRIR0xeQ&$ 2AHPb *LZrX)9Z(%IQ +>h9&!_b [ 郉 c0A޼e\XoI\zH)k?r2x 0}S + v`sdf Dڇ;=s4x3K7=,jN7rnw׻p;=̾N 7ݟMhg$B37r秮ۥ݈6[]1mt}+O6K-l"lt%nڲz뤘Mk],l\jj'l*'HnZ+֬p^ha2ʥd|DrيN~f|0Kb_OK 0D haN6jXV(+L,P%&02/1F%y +"3o7LAh.DvnBN8WTq\]YINwhOqv3st9IlM)R'%B 1I"BLߤP,"DB1H x B>v{ʞQv,ekk2-lQ .dU kk拯l,,Yr=.ϳҷ3\~ZGyl뛧[]mIyy8}wǏ۬qIq /J߯g6SiD+=朾Õgb ;aGeߧ73.0^ ݙ\k S 'k>ȫI~Քz +G>?ZQzw۟9 f>*k7~Xj#Lb ;9償H6>%? /ڍ%ɁQ%?Gyq/騂~/ҙ1̨ @<%DgtΧ;b',3to^)6; +g; +f)Ja*6 2w6@ǡ. + |P 85shBM#TqEգK :,.ZQâCUPuqÅy+α8LȬdS4S*Tr89taPvi)J)^--T14)29 +%?T*0{xoǐ NI$Lt9lD?ޅʤō]ˌsH7ڙHE޿ +bu&#T(Gu}*$Mmt8|u(6=*ل7E0Z@S((!!GܪMޚ萾O;P忲G'y:wI[@O By<٩﷨4Qaf{P>{MbIXhb *ePz0 &Klnd5)y,PTeG0@EMVy!;_ePN,ĕe NT:ƐE,L'PTDPT)I^ +ɵRDN2$N@e'Tv2*3WF#+$Mf&D'9^ VVqO#XU)qh*91FCNbpGi +p*:y&H!+dhe` ؃B;`UVt4 +ԑVLTw1Q]1d ݂f 5a"CU 6avKD +~#|g k +nR- 8+3Q/ ![)T;IsK P0۷ms7>m%n| M~cl+kM66>]c~Mh~5ʇܰΛ~Q~1}Ju|+eYacr/=f7jQ%^Q`Y؈Yke =e-]!;ys-¹̂9c̟m@xr+sgP:nLO9E Y6 +3#M8t&ư$J+BrXZe%H-m&dYMzB`,fe$0=Ә7QN;"O/j7W?"_oѨo/,uy[^U\4[ӕ~Z3iՊ^?YZ xdOV(r}oLWC6T5J^,z=jx6ސX&zxb`]%h>\;'Us'_`r8[5xàf)f |CTR%7=3C5ݛݠ M_os ՀPX}o(yv΄JV|V͡ozۻ7_]3Ƿё1ۚ>|&7-Z3A_iIbmI%ajNzrwjzsG͙hR(e+u +jeԌÁJꃪT%^Tʨ@% Q.LA)$K (Rpr +eN/#OA< WA[ʆBYq{22$ҁG=cb\R,NA Jq ߻؝xJrJD@ CwN +t  vg|ԝsRq;b%@oqt#v} S4ڠ(?ԁ=߶@hqYF*r׍^GNCuRJjàЫ5!^*8>$.8f;О;\N鎞{LhVݵ&Zh%63G{L(}OYUoE2ԛ$ꭘ b-И V ]CV^g`0]4euVYLg9_;Wb:* +F^NcQ*`Y 4r`MeX +M%`ʆi,0 %bSWđjjϰj +m,wsD:Qy,`#Tr*sX2#+rYMTaw~,NJ3q%8UUnÜIT6Qi 3lMU^ +ɵc$3o$qDN0YIL&$.!R~EQN=8pdj<+ 8pgRNA1Cc88H"Ifx +^* + +V>}s֣(Xj=U@mwv??L|ɀ]z}>$?N%O!…cjV:Kպr'v9FʜRNZq%b'P(☕Ȋ% A\b:e ǔ;-c;\q(ʱɰ- +~ +gYQ@~]U|4eṟ KKζ{dgp nAeeZ)ϰ̼ZBo~2geEҳM43̚nzmgfjfL6ň$'A6JM1S DR&M08>gS(%I$J'v c `\(QҞ4*cLNB$^E X52\Q@q%16.&ãÀ(OV%P(À(iF"(_*ᝤ( ehqvR9(X֏ݢ>66&&j&Q9R!Q e  #B!!pM0Π"BӅi=hFD I4FPMHK %Q#Ti4Z5!P .T6! +MPPP|dl $ahfhfhO+I}i{̿H4 R=앗/ )9o& 2(8wVD~N36__z ^S/soL~; 3;q˧($?=:5?<|(qܠ}(!,|5 ۃoaD ڷj=˗@Pw]oodU%z~|Ӯw#[oq_=Sw-u#m[ڶtxvmzvuCߵֺ֚oD]}o6j}eۓN@L#קAѳNəN˜Iޛz$8&sWHq(5=^?+v)YsS3]T}CmV-2UOoU~}ͧUۄvɇ^E:I_}"ZUU3+-p Nŵ5{֔?_%޹U2/ϊ*DKW,sneg}ypW|Vr2%%j>oY)YYhElAZ o,݌+ZihuҾXVhAT <#Hyrr:N 99,̻~u٢맲.{KeqWXnnY]NMgGh7l덬&s\k`+2 pI>9'p4'tq$sᄃt\<PGTt8G}|\8>>?CǝԹckG]G2|?@azD0O5Cl>:Un4ݟxnU +=nn^̉]R]`ggzk޾^B[5[ ]@Z^`<5.D7U +mX-P-[3^a.FIm^_. #YWp2.Uʝ*sK9jSTp*@%cV"+80P^-Gwpe7RZ2SP4UpŹv(&êZ*̶)X`SeEYvUym<ɝkW36vL[@ 24.+a0̼ZBo~2geEҳM43̚nzmgfjfL6ň$'A6JM1S DR&M08>gS(%I$JKIMc'F7 3Z/GI{Ҩp1: "D qntNFO(~n ȸaFFa@L'M+(a@q4N#\/NRsr2R8;`PFUn`Yjc5YL(ɨ2D SoQ\mCX.t-`C*j1{ (]lQQt 6@4IP@AE^ӌ4F?gٳ+}]yιg90%WP,(NVBL.f2#ADRRBr)I %IK%H"H$$`BN00s8r!'8=c=0C )~ZDMIZ"u,:ce$P0Y~LNKpR4dZX)4j-{4V[b"p!wym !qԲ}ޭ~5b6nݢI&?Į*l?U=-ʇCks$j:_ ڰLbZ_^A}E8"e[cwI5oW{dfe߬"q“H>x!\iagXVx V.DV}1/<;V,@|K`ӏ|l%܉"ܰ,TZXF. +S8R0t[D,v + EyΌ +$x LA:K`(8\$f;c͝iLg 8p3bN13@/')L9ŸYHEi i"@hH"ԾRڏ@B[A$f>b=!ޞR<$4'Ow1Dp#8Jpsb)]ܜEB(pv + +'r!C&3Hؑ E"))!$d𤉥G$KDNK$q E0!'N9n9k{ 3"wϖy| 2.a\dn3F0D~_wr+cziCʀwa G4AІBMGBP_-m5܋zdz'{=m{Gs/'Gs|,>=u͚D96]~TujZr_LJjO۵6lPut)nD%}rk[sMMu@EN_[-25 Xՙ{ՙl> +Ҋ +ZQnVqъ1Ҍw` waEV\:Q0sga)ZѪ1NI+NXw#+pqliGh MVffsC[od麞Ip+$jRLD+hgο:8#dM[ںu@}U ("&;XEQ}m,ig:SgtΜ#sosB=}yN~LlTS,QNQ()qf:$预@ k"5z*%Z;t-{՚HD|&&FD+QD=}Ev9-ɕ(ȾHQDoC &5L=MȞpЉ"z¢Ò Rgw[{WG0J-Qfp5Ti1(Yp٠ni -S'9d8H0ڮzʮр:SKa0u,TK5(8T5-Î:Zɑһ%Z8RJB,'8j>ByRtUQVWp#rNDՕ2tGm),ȚR;TnJ(:ȻTN}#E )* +9ur̼9f3̇7J1@q.{rNFE;X +s Eyٌ'?&,%Τ JQ+VF)ڑJS(Ie@v(+Y.SgDP@z<&ܠRc nI6 2.)ʈivP "cPE:YV`a"? >1">2}2-vaC\lS0ںtSdC񇁄胀-l~?kӺu&ƵaM إ~M["$k &]פּ֬]WzdX靬\-'W,8i jB=t% eM#v H4 Lh1}5y|d&iŚ3g,{kpfMөgO ԳӧzӦLI)!Lo` +s³$J%1qXZb)`ZRE,*T`4h `V; R!4!jq".hD ez0Y煥@xyzyxeVۑ:DTxkIB' FGQk FJVRdĉ=(e0aa<x:⿤au/otm?{OOGV=nYa7ƍ{cd_׿/]Yk_C磐߿4ax2Vlp47;VA?~=-|8y|5ׅo߿{v郙og {sޛF}#ߤު?fǂ|wqkZ?mz}΃=7}0rdvpdyEвwf.x!*.*+/X_G̏{ ]iŰ _nhvihEyaN-Ia1FQQ!= ;p8ƱQ8a1$;pJ%;{%E$pr)؇~xWD!*n ^2~\n=炪YPbq2";/A "vIe<[9V\ 7\V,;S8ӆT0_tO^59afgaYfVFH31CgL3"e #$3dM54엙fve!&A`$@P1e,-Eb&%&%q: +%9AK;'@ב8xظ"c(0Zqᤔ14&Z-NA3BEDG1xLEGqЈH$* 饑"X*Hzh&`ݔx\$qR1BrH ;X ݂1g5J+?H& F=ыtkHpB Z)hrZJaT20&h)Cqh;y8IP(܄p! p) +L( d2\(E C aCP2 {.LMZ9L?[~xt@ϣ} كCQ?aѽi $^?z7Wx\O4QoK}_z^&廱!1տ?*nz~5M`^?oݭHIp ߴ_gߪ]<O_+zz~{NQ{uar{N㺁5}.]s}۞Զ3p~Vھ 4D@O0'NqcAbuC8 +VE =aJNAlf [p-{6m[] 6j|[Xǫ3Z@`7t E>wyoͳVU7N-~jH-Jz)W;  ҶjмU>_ +~ƫD)싶˭~s/]jp: +;};qݩCn ,Ã.+x!4 BZx,ռ# [q$/y/ iҠƽH~'Nb)I;,wЎlcogC<,-lM}ﳃg{+izWu,dZWm'zKuߖzK= \Ľ+Un۸҃B6psXzrH XfGLU_fPj\t}GjܐK\U"nI-r\蔴YVqC.p8 NI5]Z@MYY<pBro@sRU,(8bREف V|Xi-@+RqvHqMRl+l)iC*a /'/Ԝl cxͰ, 3+L|D31CgL3"e #$3dM54엙fve!&A`$@PMKKC&'$Izu&$iaz:eBINВ;1>^GⴒaƊ {hO|Z@ņRhИhH81z)v:d1Q*HT K#E7U L)DH n)Bc.;䴑AAvR `3cj•V~,&2()L@@z0*t +^A: ZR(j"(Jèpea$MIS wpP0' :BR)EQ "Ad282Q,Æ2 e(R q2l灙'~}Dݳޜ5qqe2ք,p_q_Xo]Z " " +,$A;Dzo"$h]>CIϙLNPJy>}9oy/wĈ=si6]=}PWUu+/mx?^vENV/ԛ^<2(;K6ݟ2aXzo?AqՓcwKۘs[鎎AoS[ K_fP(5J?J|.-% m9U4VYotW3.2{-fCŜm1-[j1idn6黿sqj8T U{^òmefNlnN81Gi&8,~F"`xřMسVa70s~ZG=#i-U\Hnʽ+9N˴w/Ѳ3$΀Le'-K F;Աö>%͓[g[R7>>aՇ5jOHHHx|}ѽ\D.{ݻ@?^ x3u=s=ywv{a}P+یauu:Vus Ec zTQO2"CuVH!-5,ZK,`JRb>94W.X1n4#m*ga8YDKՕ2ΥEYq[>*bJE!8vud9"3"|QqSg|#u)Py,p.ؑ*1Ұ L.#R; wjؾ -68Y*/aYFz6 ٪1ڳŀ3vf;"F";M/+k Jۀ):% v`ڷClNЊx֦8-vH JF%nwEVPеօ>ұkñb> ZiÆ5a0P +~M( [:^*|e$f/!OWY<k@jՊ eO8e`.`+!fْ)C HC('r>^Z(B%`}@f|Ԣyga?:9x j9< +5o?j)f:̝#P͙G}UY|DT3bxg,S*iiɾD5-҇LT#&Gn"9 ++%AW#"X P05'F!B) ZKN(:ވ0Bt\‚a|BT<@%D +P"D4"yy*ޞޞ>>^joZthI)5A4@ +) P) `P(x)0oQya*Oqyj&N#UkkK&? 'MW/|1%A?Z"_%?`ܸ. +=.y5@?̗R~~_6w7~'(_ApCs%|l.n,w} I?D}R~;Yc#A>R~fd6VZ&sǝg{h9?ޚ"dۑ[~dsaGʓp$2xC߿fdw7™@dc!o `䳫S^@(x6|t#c`pww5W YNt90e.yx$`rF:\>`+~`ז-odg?tXq[@kvӂx3Kh:NF#IBCP hPq;VB q1`9}b=C +8 +F2-J%8wJ ł{[`.^HNxY^/M'l;yyrdj{=݂gw |`lg}}2;MO ѶUlu`S&/+[f@/CrKO"6 MW.W,TAVXhK"H$a}b &^\lO 81昘昸:nS4/1:Y#sF]K)BI@o1xd-\%ǪU* h[uZ":f-q Z N^fv2P#H'@\lkFz8`O1XKN205r_c(EXk)԰. afIAX#KGVTKMI\֥x/C籈ùC`GV'(H +w3RKdxe>0vv쮶ٙR$QD0 ^PnATI`C +bl Plvȇ#Yv{ܙ=;ǡ5kxȪjNʏX +4V! lS_ZYb;T]ˬ(a!5>R]"BRV )_ )[ g!eT)ޏ8 )ZA\/d!Y.GՒLX".Naz ܪr`oտ{x)Qh;1ÄC_Gu(8Qܕ݈We|U?~;\O^ڷ% S^3%}7E{!WO ~Әh~w{@oпn_zz[+ yr3H}~>$/Yvt=;s5׎rrKmizFk}ύc =-X /}MZ7ښuѶSQ)Ъn%'8⨂fe)8@ ;w_UA{FT#8]$pqnlhsͷMW6"6 Wd]ZQ7QkVK*ZU'&e.0Ew/Ȕx%NR||]sgkªUT +ֹ7ς* Δ +nVyFR"ZiXgk1hmEBɒ? +ږ}|ђ H,l(ӓ%'@y׏crd_=~"++Bڛ3EWf^j,#sҤK=3.'%vuͭSsգSި˧'YK'|q/U{]<'T}(K_hS!"{p#u'>@!Nrl7'xݼ:T5W;mu[2cjmn=yZ v!;pyȶU&K|ĖC676 ;6І:N /u+8 %`Ԭ!9*?Vc%+LX4TQpL}kePu>/~HuB +}* XHUXe/|7lg!eT)ޏ8 )ZA\/d!Y.GՒLX".Naz ܪr`6*6т5uY`EQڟ2J&Z R̪&Z )c2Ƙ`-T(3VH#Ac͐1#LF'F G S4r1$91")ND4, bJlvAz.qMDdPP gd+LASñ$(K"hPX>7I!a.qjepٵ8N;aӉbV-@Y l& VŤ2ZD Ȭd!V^ ah$i#H)Z:jj.%d-B R\PKmK7[PDYePWPQdMTJ-eEoE=; NL؊{<~s!o$P|!1!D'`<;D8[[[=|@ +SYc5XgS[;&}G.oF 3z7 VVsOڛkÚpFpM+*3cNHzIKrν\1r3/fM&y?ih&ι?{9{Ϣ$ߺ5Ϻgihtկ*6ؿm]ifSn4ҡ47zFc.b]ۗܿhQ.4:{2kUahM7i C-噆,}H׬%F}2RJD)A! t]3:kW)iz+\fp !r0!UDp\QR"Xr@H9BPNQNRߥ$4ɢ9( 3aR\o=(c:J:BZlO-M*)Ltmq)[)Q])UI-HLhVW)1ahޟa(PCm$MeϏ6"ER>.A)/n.7FXHڵ Hwv5\1 +[Hp#0 0>'Hmo} Wkp25j=lid(ɺ[5i %2N)MQ}ܢ"/*amjn(D5w5N&(!7\aDW}M1ʤMUDjm>4UXe$\"z@Y +ML5Tz+TG)<"9vV-*gjV9ތo+gT4jv}F|RmѥǑ.fDYjc8QUԬf␜#*58Lt4!T:9;AJU:RTLD( h +$fs8 d$̤'(TA═Cq + TJ +dG#G:%NV@4JHb !g$3LnGؿ$.L%b=PEQ!^28" i.yX |ifwH;܉)d[72ί=IFo`6wȎo͇mue>IDn7}|ȗli&ͮ- [?u|-ݠ;Ձ6ot|MRO?\I0m\'|/a_a5ΰRl* 3֮@֬pfz%lreN>t4Z`׉в%4N;".r@vtK#-Y ,]/qH }b3>j7⍋ͨU"+1DQ)<(4"B!=< a.H79x w\UʇHi$ą u"I줎<Hفqtrs|#oxBH &`BF1ALH|C BbBN㳱qy .-vp8)zli̳k- gG2\js nry3 }7 ghltѻFl3oτĜZ^6*gNލ+*Ș}'3z)KrN\1]rˁϒ //y9gd?U 8EJG: Jz|r8p&XB;Gz!eb{jhRckDw&:oDuU`LJ$HLhNVWPSAa1?Z5QЇHʞ5mDHR{ՙ\CrMmШޓhbE U MDT H僧au4F#9]inGށ;;w@c s>3}@tQ7cE "Ģ,DJX"{#d6w7#=ua0KW]X|WyX=۩Uwb@+u*9mz)mzZ Nu7C[ z3)(ZAtV_mxԕzRM˵$~(A_J0]!'m.TSvj)*Z Ê*m &ZAm&nb 7Wk: NvJO0q+gjh+VSե+X٣SG8 )S,p:":~ i VV(-˧&16%4^"<FV+pEgӎ(92 N!契ܤ4 +M%Ie' ľ$L4JP@F)a㍲H Fq{wRcI I%sPbN%FHD葝X\5k%à]:;;H@nKNV-]Oo!j'AoEgk֡!@fhGH)ؾ1Km-l)d/iq?߄u6]6>4H|œ׭֮*_Õ5+|^ -` \b+yZZPb,|e8fQ,Y {󔘥`RNjy ^ O؜ `H&`b;,) & +M(ZWz ɨS+ 0ՐV.T(DT6Z"jT<7_ +(hݑ|fib>2=]]==p"RR)+r+91LD3E1$ˣ)4cM H e?!|GD2_$IH0 wD"I`o +$@ {C$AA!2$H﫪] G#Uekpo:Ss]7N> +^wd=zՖ:PjAl{ :)n]^t?xӑ#ԚEbϻŃDTܽOp{q݀g=;`=<#ߝE}s{лb߷bzݎzuN6[?f CyrWS{ve`ӎ$jm:Z"7 O~FRُ-1Mw{+Z6Ե]kk~\Ws7? 1Puc.1a`7Q}{n]%mŭA;ƏP5[&"%o6 +7]z_"j` nίAFͿ``@+]9L0uKsnf:eVw{l>]3hjF^T*oTa̛~jDZ*~m[qlԿwtq&hʵޔXYKSeύnS~n*z̥Bt +]&_9*+|P1eҥC҉ +&1‘K&Tr@`ťW\s:'`KM/.@\j49]l0]8fH?jpᘁA;5 (_1zaD(B=d:sD9`M~X 7[a|wj>ɽ{{[r= ocš]VqvZ ԱVNߎ|cn:C,<[jm16[7Yi~ kF+oٻaz;u6vo+֎fjd*+׹l]i|ڲ +ټ܂iaRsZ%fR+XW6֗5͐5Ӄ]̳+Zl+a|3VmHmd x9&lmZ4.e,iD!3Ld~ѧi&X2σ 2PfM51Y04mb$DT^ +*/uX"Ni:x=;q\$VX]݊D:}5Z՗E a_ +#5s-c@c? z=* (OA +"^Ȱ^n9Zhwu0ȨyjE{{fjhPN);CCO簲2SUaJOV: +A*KI@ *y))^SB U B!X#NJfɸh%$6J@vC[i~!v+fa@L'D# 1(C41"bS0)#d" ʤ:a"Wa@$$A8ZM@4RR)+r+91LD3E1$ˣ)4cM H e?!|GD2_$IH0 wD"I`o +$@ GB$2$Hį5AB<իGٚ9ܛ,T'\,M{ӟ>uGt}RRJ]>m0WHqBt?u:R)dD"#x W N/wWT(eʽ3SŚhƒfBҤ)H5*`A0bbP: DD>Zy^9wQY^볾Fўψa_g|/d6-YeТ} ifĠ<P C=W~S bګ=&nOF5~xWCNtKN ?<-긻HܡbmS6pِghg?V 7Q0trCEh'r L,eJ-8Q0(;g94)X,'8YP:ΥP 98Q#,ْbOIw-oZ.#n3,'5JYR2!+tJeAFliRa1M9.D^JH2ۘȒӀ٭KjEob Y CoioGn"Yip Y c e aWQ*ATZ+)-EW}D[ѝr[hy +ijʍe:/2ZKz !)BKkdXתXiiV$V)(ەJ9qB^.-P"~(W.PwJ2t} "K"9E͢DJU8C[՟SQЃ+oj-VsF>BzSJ@^*OP'dE +P ۢB5օyQVFט(=uڢ-+>:{XI>F:BzJ@D +QdQs*Q! +&g)TPDzTbh&|WߧE\+Ӕl4ѡTP27V~";Ei"+Y$Dd&)r }rl--^%:'G쏕()1r/DrSR)C$Nc扑}`.(6 "eI=XT'"2E)o="xr +T'V@j'f}g7]n;(">wcz$n/ ֮m.[]hfWmvA|K>8=ږ lz uN>^LlZ'ڸ?G ~ֺUv[&YZeYVu^[ĎAt=";lgkg=bP#xLh$)FxD&Jc1qr!O)# +/! ɓK ,'"^R!C` Mx #WwWYn.3"@H  Hmll$]B?OJ^oyQ1?ګ_I^=(y39sf͛mp%3z뱵ҍޗ# ~ͬz9aj~N[a/XV ^p;o9 +G{. 3>72K8fv/F=5=z%3e1[ųҽɡE3%npΟifdĠ7'K;Ob@di xs_5,O)H37d6-#}6֯&րhKF@N ȠFysۦn% c <͆i3*QڶɌVz3"vIBDFlp0 kP +w0ա MᚢC}n~i(|.jUre(bPԊP!"ZFe: +G!OXaʥԊeAK+$i`,web{X* +;2zɢ@xa[H .C Z0Iؼ~Jl,Ԝ +}U͞#5iT_M3 OV5L{k[Ni$#䉴aDoĤ6J(,+O4"'_ +&n^]x- eaЕㅎ{yw>tu1|Ad/s~p)W6vmygہ6?* 5 5 4*0a9Ò:Pq5|FTb?8nث<dHd JvRo.v)r<Rn,Tؑ|㔨@t$,? Q9'|<4"[x,K̄+G e.Ɍst8H _:7u*$E{;#I!1.XlN[M|,~y(N\',Mn3f7v֍v 6|c|Illl@lCDD5GE6G+D"{Q=M풵#XsjϚȾ.V7őfN@2 "&"Efg7:,zmf%Ɛv kN=mq:$w',q1(Z53q}eGtER#sֱ"BKWGi鮷:ky՝}:9th +,[V{Ѷ_PZ+X-[T>+V^j*b;HSEcPT_f)!VR՞%VTw/*wqTE!(©*ٷS;ᕔY ۓjJ9$W`sxd.4#290LF-?Gr.rSXd$IfI[Y%۞`Ұ "33Xr$-3'e{bE`BN,{]P01b1 +IxFP^)ao/T_<7 oB ^A>;zm[4ًH~g:ݜoҜ7]vtA _7[Fwߛ9s2 [.6|V} ny|4mzǗ[{tw}?в$>XsMbV'D=rFjuLTU Ca bV7=a +aڀ!lc۲VҮvfВ7-~pQ^̓k_`=ZSyk5| +PWUyl;gV>Z2P٭ϖZ*_w~P+yUBT~he-bՆhYثUtULo-e_|Ђ/AL^kMV+hrs.e]>ʹxu}!+ [3Eo6j_=eW\k6:Z,e{:ZJP{ vWىڛf~pB.49.ߟ? ;yX/\ +l# 9zg9ೣ.(swO}v갛%yDt< u @"{x{D5sմ 9׃xE5u|hհCᆰvxenWph'V_[l0oHǼc&=ibO>^ήusNB^:wH[V!@`V<#ir7dC-/ss-ښ%ntU5.QuNfӐjde31 +;EW8!4lK҅ K⁈;;;nL`+.83p7݅h EO{GXX1VNNYs {g55g,|>Ɛ9O7hxi1dBzޘ-͑i(`g$oH +MLCo;Ј7^(& ;m#O>c~ax:x:O)E1~3Nk$>HbR/['z)</&y&%i3%*f'zAӢ¦%ԣU.?nj0^22|@gj1tݵz]W^Fmohoyt%(Cj(E(qHgeCġef\t8Kmnq4S'8pe|8T:B#Fȣet>du0֞7n{\CK&(g- +v]:bik6Zv[m~peWʃ+;vВ[32HI?CR[~Hi)j;- a+`K*Hm T66EjBhO}r}C{/oWAH#n9h=i͝2HBC:Z6Aq WoQj)k:*H4J%N +S%5 xCeVohuVo@uPeW(0Z]]!je\!"ݪPڠo7 +fqDiZ +rX9jWکPըUqxE ႚϫFSp|VTqFP-촆% /=E*9qd^rBT|\nEZiacZbjhjl q|!]gqA~Ɓ0Zʉ}vJ!(e"BC2>" @ $4Xē B ( $y BHˇ|xH^|w{Gxy($E,P0#DPL1aIC "bBNh/ǃxx bΎ+XquuEኋ383qpx]<&\Ǹ_?K~,*O|#yc{<ws?9c3ZCb4bȄ61[ #Gid#2~O0GP\t΄ [@#x,?UQH,S?׏'hfk$ +}п3bԿzIl{>ޞ?PVZTbWje +{ {ޤ8++ F鮪dji35Y}_eQQdknξiԈ jΘL43LU U[}>8xSsH'^7gqg/$N7$v@1[鰂8qR%u`7'@viHSIsk '%hCIjeuR$,ɀVGc~$\&F_$.uăv]lq.N+9bnD 2b4GFۉY& k6EH0tņv[IlfP HlS1b(XM ZC@ؠU X4ݔ 1Y>vwn H]z&\h1@ηsmHљhFJ% .m4}f#'8a9hZ)s-i;JKvڈaUQ*JZXe5T2llRFT+vNd,FrZV-r +f?הNEޑR@JhT3CE(`Ŵ`A +a$ɧeϣ e-ڷolO6)"e +3l  ]T~)/U˦䦒RNNvN 3pAVKv"3A qzԠXj%5 iW:i%Fi$tDB)>BfuRq!(֤!ص`"j{ X- M0k Ui[Јvl }%X}+-A29zS W@u8h$-(_n6oA6@;'}(I h'?7G#)td/8~Q/Һ>v֮#kJo +H9| QY bbo/- - ddO%[hR臞l!\'pz\/' hQ#Ke1Ex$D0!(^N*^CtZL^ + VtM=$PAT+9n~%+㣀|#xx)ftsHvj+, +W,c16*%Pz؄RB!MK 1g3k֬ҙ%$3sLG3czgzgzϬ *7 3PxJ0_ο~ZudM'ksxѪa^ +d +yx-__.z\TRȯwK^[_˻$S]P_o}o/7S?ߘ L4 +yzttd=cT,E<өjTG/XWuWǯonvNăGN?4lyo+}o+0ȱ?pZ-k)%%hѾ4|c{)Hqi(ӀT-;6ewfwvlRl(`;(*؉Ů("^lI<\.grbryqg~£&y{>NLgE]Gz0>([)&p94] *ӦQ8j$E[1͢d5Ya +*Q`PBL cɠ 3蔡r!:ՆI"I U W* &c~1 HMF(* SR*Ur” +%H!0Ą OhQf،،HOH@ظP&gS~7Px }hdY_e91983` 3~S LGȋah}Q/VI,uicntSuŌ؏a4`')hդ__:#ިGy%ßySݥ^ų;t#=?+d7ttNͳ;66 CmJI/,W\x6[>hoұ.Ƨ][Zdmw-Chb-,g:L6NqzD8!{\± " Xc$ +  #쓰NڞAZ[-b]emGYҶ"[Xu/6jĪ"kH3O7jEj|[ϫ11G ubw/WϪA}ŝAVq^]PNjPɭ.^K;ybE(f9PivЕY7XE޳BV3<6szZAyNt>ʹru}tVޕ#+.t8R'_({hKuөd׻9=.ȵ'avZuS6-n`W=)ܜKg)6Z`=Σ^wR =ϽCj? rO$?sԺ'N?oG:7lfrj}{"w1v[ήH~#~Y[|18E:l!ؿٷ7b{7!{6Fewc]|,B&`F?gg$ X-iXO/d:Z'غٲ^Hjz ^"oț/D<==AxxxxrNQW\qqA1n^&ݹܝ;BI{|~7R~ϞHy..?z +x/gPϻf B]P61d`7?m[yj΋=x3;|G^2goO ~o>o[ZǽkH<^}iTZ|zxA=h;Caׄl`oh0(u{Tz"k #°|џoRIl*iK[8Yg;.uTZ)ˌkZEnG͒QoɱVZ͖^%9ҜfkadYrs(ʹ:UuV@ G1JVas4(VW㔀'j8*a88ʯ_@vk hk[g5J(j+\-9lɷ/~`mne%ݺHőJl5#/ĖAiM7~ڑ0\*hC@M@)wVֆ $slw(B9ZPڴ_P(愸k fV|rȚ jV_-Łb΁bW՞ڭ[mCP keuaAQUWR/12V^)|bE}QYN +BםWKZBD"XԐjs\#Db)bR VUZFUqL'uRQyNpT/j1~z_Kt_Juo"-@3ӆP 8eD48=svO_;n p4^~̈Tv r#?{؄TrP(^rЄT|A + 0gN:7QHUp*}y&{{R8ǀt8W1 +u8mbm? Y7?ӄx~a_/H2 {kN=,+w0:do70voӏخ$s~-:d-Uddf<-IC#H֎D,-IGv$j!zb&ҶZJIphk-W%^[$j܎~&6Ր'`jϦ8516DIXL&V 1!"~i}tUI=Z2vXB +Xzy0G} awpj+ 7!ʯ +˂˗9|wK!~[H|8f8/вEp/cK !|> pX<h|?矪8~H >QgsUg͟|DQaD(V 3w/93 +Ht_i +ȬR>3fL,wj$ƴ2弦@&OI`rɤ>HɨJBWxX 2ggPR k" FbsQ#t[E(z[*@BQcu CB wP :'y O)(9 +DEQz#)^^ +'5oLIz3RpIq IO#^,`("XJU5|D"7'^xzzƃ18++Cɺ"/1UǸIn}]"U?OWw7RnƟ=\\>ZwЎ](y|P;l61d`7 +[C鼞u :mTw:z)ȇ)Ўɼߙ,8!{>EFWgoPMsFn {Sz w4zʫHR'p!^o>z.&XrIkDPD{M:P1k h#7jx֪Y@ִ)oϊ9kȵ]fX(*r;hzKҒmd-==4[ #z̉L2J2j +(ꮣkEֺbJgNmB'N$ AiZ1'a:q *JoրuVqM?v9#ev'* 3;+ 66QZ$r@] "cdaw_r={43 UU}/Q +d? #R[y VqU&R*H{R 2s"9w.ŠL}R(Hձ2Y,| O2r<ș\H F{,̔NX kJ$]sҒY;W0 얄+vAJ6De[2 >Ȋ +1C{b>j9#o$ +W DD4r"zަ)";v9hI41ԮW;t*tp 6#:TAрݨa!F0\zl&m19]n+g0pl1JZM iYQ?]7PHMfLPrQ^g&IS&ٝ}.Z!`f#VcƌhfD‰fIٝ˱pYRFr8lB46Opq?Rw i]N|lpĩfINV1j7LWDuY.9G+i;ی8\!J8=Ka &+3(eX˾b *aBTR˄[@0.{MI0js٦`I%HjF}L¶n  !|LHdCyc ۴!? |`M냐^6D|~Ha]E_#_+Y&__{&yw5+|P"V-C\)Y|"Yzs.к,Yh|oĢyZ5GoI jAjLl+]k^kTfr +ZD8AibhB…B1OB1@ z\YЇ`By%GoSxm{[Z:wAGoF%c#g +o8+ib };d/yw?k`a-Vcb-Sh$P(`HzX$uN8Z 'aEc2j +GO52%1 Ge)Y0ROá'=? a?,Q>X*J]=z]ٝy VqU&2/啰^*ɜP,ȸsVJ}V(HQhձKz|>,e\2r+HED2S;a@;+]t KKfg$^u,얄+W$] xa A3 +lIyqXV@spg~N ) +WDF4r"zަȘڈ;u9h~'rҪv=66蜊p%uXA `2>^р͈D(D`Vtn+j-FE]&K~\!h50bp>_o✫T63:<ͼ),{-M8j aQvA3A7#ZXѩ5a$5:L嘣aV< EB/Q@E M֬GLT Znnn*v74<~f早qp3فke;.mvɰ ;8G툗;):dC;R΁&ywev;oO#vo0VGHd"ZoGc^IK=ΆhEQՌU6Dc%aH +9[l.4Q[lEYHpT%Un &+ +3cVkQ3* +`YTeef +M(a6%T#M1S9&IIFl`YRF( Fm2x"ec0c.IhfQQ qARB~`SAR|c 1kt`.J'iGZ :Ik" :2%a *hJKT$A+1Z2byU%Wr *<,"4P-gyX ,4@%xa }],G!G,'E-Z8Z0OVlYy|e͝飂͙gOQIF9{:KfNƼ2áAv1MsP +T%Jp0Ncl@Ф$puM[޴P&5b&f!ϠF*YJ^DVS.H*E^@"(@+?oI^^> +'w7Oralyh4 +'QyJE +&UWB R"(TJ5lP(x)0o$*O<Ք)S&k&k&kb0NQx7eL/>m$< xewoϖN,,? קm5y@/!OYrsG[GsߝLF,?|L߿6Qwo?#{}.#"߆l_r7o~5<ŭij/YӈgCFb^਻X(^iQ'V'_^\(㋞{soT&v[%epR:_|d M*Hf^ҵ)䫼dQRG,tx"'J/JGbÉ9Z6lrV^hiF`ǬktǨz1׺-n3ƊmU.uYhN+I6Ӓ>;a%>=ACr> -ֹvl!'cvL;#tewW{D!At!}v^~$;'c7#Fv8mDhwځc )jw:`D!Zm] YqMvɐr4ۿÎ`.{y{$̹(i#v1\gC4բvШjF֎*0.+lrz¶\Ki^]q74؊)C ͒ +LlXUQY@V+3cVkQ3*ۊ(βML TAd%p3Lt4jerMl7  $ 1Q '0 Jd`J a$ %3^Zgk `b c >΀Gl F_CEuQ:Ik?JfuH-&ĬIZёA- coUAcV\µ.f -#VmP]\Uh *U@jm{K$5ýڞ39|sܟr2*I{1~OAb( 1LhMԼHGlFRLQaj%Jp(AlKD(c#ܭB +u3  s+8Lq;.qBrHdabv+[ BA,fRJŀ+@!dP"h !zB  AJ>JHP 0H +@@iri4=jOERa~2睬1?:Rx/:G_N +{n{Izķ-Aҳhi[\/Z%y]4`[OƼ}wJ奞 ++0Ͱwэޠ_Ǐ-޹u_w +BWoaFwfu5XMFv\g5;xgU뚛joZR'ng,n--_Z35_Aݏ/vه~Xv]lEk=gw붂}wSؼӂM@%l-uz`8lNgrn|Z΢bkr,l]\ +!WJPfW+@ٍ8Y 5eK3U-̿ZŪpZr+ 8sTe 2SmU˕YVd";\.;R(3bi_̸p35/pf +f{וNL?WK;W63ۦ?57t3q*dc!W+C + +9P˭ ++YWn gmD_ΔYd;t rUR;H'Q( =lK+v"CvjcENCKRAUp T|H^tS-n#WӉtAÅ.jRN " +ԡv'mA99lV+pRRng {S&oFgh . +T9`G =9(a9 [ +ar@6EV:xWlrG2GROc]bYlEa@YViAr;rMV,X hyEFeYL l d6 Y<"iQ,g0"ff&&{e 0=,L 3v lG楙@̼43H9C@`g&Vd4aqi0DkzTРOC贏LHӧ l i$#=m d#d`'` H[@SeL '}`@pN8^O=TA=R 页Ё& |06PDO{n0RFƍ M$H4z2*I12Q$ ZȈ8$)VB ʄ-)>J͋TyFj$D!* VDWQavD2==*h-tP7h eqиN!9lg01b3X̤41WB ɠD2q@B&<} . a@VV:5&hz +J%)`ary$Rr pBI`J`'픒0 "H!'2_(CEC+C|_|PL&g2?L6xi*3Ect/'p^O xz#s?H>H:){Izķ-Aҳhi[Yk$~o yzWh[OƼ]wC[$%Ƿ4f0~N=1`n-7Di]͎Mv1ݍ:M`!4Y&q=h9GWmknu{S_CK*yNsgpʽV @ +Ľ[70i6irbLw%+k]ޕf>_=4/M(}ܞ}W{-OimECmCƒ񫺒>CDyZ{ĠAUdeG bN pey A5BJF$,WTpB8ɕ ;P>9}cqQFXPhԪ1yp>q(~G1`?g&rJa e;@y䑋yx2n_%g4m,VҭVP&-GUZM#Jj ȡO2piX5 zF5]"VU-(59'mȊdDl" pVhoExw=#,"!,*,lwqGܚN)2#)h R&7D.3ȐLzؤsa* &ݔ^J *t(0 lVB:vu6I"]iTbI.tAɅ.+8H(^jU |gx[-Z2bV(RѝPAZ*Ԑ3G]Mv5Y +\7L#j:qVmy-*1 +-]YCª Pe)Sqľ3%jGͩCj){ЉjT^L̈́/RCR)+-TAJIXeW>p.AQY&,(:VaFB +ҕ4+/U/EFO%ڗ䦐DN!ޫpI@Y9e&)$D9,A IWd8]a%ApOIH4M%EJ%0$1B.g0P|X0K2ErgLD I!Q{9$4sv"`  +:2)tW; Fڳ#س+{gm$hן ;s; }ٟؾm?oM`m?hF?Ȗ|9͟!}/sĦ`7@>[_>H~Gk a'a7d*/Ⱥސ+PĬ5+!˽ĐeV-XfO/,[)^CCw҅޲xd6Bܡ@ B$Bj%!!&9T"q$MT(ebBC2̾`1D$n i-8@/t + b.Y +Yn#px{ 4/7$oOWWo s+$0!E8CļVP,P"%q @n"مgNs—ys\2wv7əy.Nn95Uo_?ӏd'}<_7Y7s'[O^<ͯL ^yͬz59fb5үS~1=?O`W+!Bz3Ƃ{益) +ȫ1ףSV?֣e}?.v ?X4$Ul _.}@^UϪP(ly>m ? 5?co`/PB7`?ܢ[<Z< {1 {9$_^<= th9sa4SW=Vi81a,1wL1}4]|ĠJCeZl&Y3hш`cN 0P +67d`E~^3hb]%Y%򉾪Mij[qȁfF,B #)* +!H@Dxo+[k]o i +K*S@LF%6`$E2Aƙ}I/tr~ҢO0`Z%[ہu(8HHgA*DҨ.7 R OXO(^jU8a;>x[-Z2bV(RѝPAZ*Ԑ3?Sp -[.*.`W:J*( +IԈF +&x1ћ;sYs;w3|ig[C$'C8k9la)TS Ck(#X5vC$^tt//p#UN35}/0mvD_ Δw}S' 1y=(irࠁ|GR}les;{;;m=gOn >f; D=.JzNF ͒C=!j8T4b4plG1(8c AV;B vT(T,řPRƽ +Q] +P]gEgPy +[1!EiAm!זx]Y)3S>k D:NgDiM'e)'DII-@µDT W%$J4%^>~i6]lg:čFsE{,1݂uͬv*#vS6Oٵ.K6\mad$'v%=s5s ܹqP|vt//p(ё*8#ݩrNwS'Q5;8W(%lgݻ 䮌|~e.]J̽*rt{*nǗǗ4=2uW|k$:kŁۋ8w|YM%@qGedJ6(*.lVMW>Oԅ~"}^bﭔۇ(E^D?vdg2Blowȡ:8~VKhs@m6y!}Z6E}B~z$X%;)۾Əض'r_uO g +? ۼ܇ÅЏظF6/"-A]AYE^Zes=XK[2ۍX<+Q+)Z'"{t fsɸs%*BMu#fOIDMu"fMv)ʟ83rIv>oxɴ;Ή55:6e]ĿD8`dv&$6vlpq8X O؏XcF%tbkn(; F#>Ȇ}2̆?66ȡVxnGqa, a[ȰAVd-uC޷Xa}8ЂQ0Jga5c cXz~=MYFDLwDP={iDwCXYzQf.$#͠G7={N@):2=`k[2&I!k%x$I~NB{dX^7#LL)I)!`n'HtQf +ᲑZ#mV&D#g[%ZHj6L +4D ,٨24S 6zVi<h-k xh%XR"!i!(:JAJ4ie`Vaƪ剕%FJ.]&hQJ RŪb*9ؖ;-/n 4qYi6p/UiQQ[_X/%HZA&x'yS?p~kcH +{HzuJK#ݙu Y4e4f;Sjh'Y̐vgj3neCH͵=:%7GbP=k׻E)Zj$x%WSTxT5ޡaur<= Yew>8c(S^: 3L&jb5QӌһD: XT5F"3Y]cnl9}z=ZdF ߫jO >Գ^ԓ>Xcs31֯|}>&SN_OK%Ng}uD(=?[}4^g.[.3NX{y0Xm=E@Ch_0jZ γvUrmTbT8%IQqٶ@2)8*H&7S2 8#0`iRٗ2|B$ݹ۝8tQ.pB~y[rlNɲ`g3`1}gaq}iVX*F +OrX'fȉKĈD ޴3Zs\զ cyb®Z8vQОN$'aE؅ۅمwՅ:kCaNP{M0$h{{e0tJkǕ'vĴm/Rhё-zYwFjV٬hw4j dg?!QhG[tvQm zv^ :=օZq@HBqZ2򑜳֙ +=zB2+XfQ-Z+Lr#Rf@4F|6,U_jf3MK푩Ք dMU(XMISU#*da4!#rf{EfD٬C,LN0JyXGad(|;g|+Eyā\=*(j_7Sc9֞t=+0:?U,7YIE(Nbe%h@(XV?"3AȈhNNI<:Dj-*Z%G54,)R+*1Qа 3+.LMDžj!~0El `ET#@EP+PoQoՀ ݦF; } j/ Z S,+_ԗ~Ԏ/X۷N5ֶ;Զj7[|_oA|73MX_ ۃm7bF/jXo>شw>M뽘$aظ:/rZOO>kPV{ZA|UnӲf+V + z+bR7%8rΊŮr"e ,PZ<_IS *e8 ( 2M26=!@9nYl1ϲő)f#0y Ԩ' :I HGZBi-jqj9B+Ch.0?[%u&>^r> )cyyH9^2 ]pI M)sTJB<@hڅHR$% RB2䤌%#H2G"A"@O&J"qH`.rƔlȫx5k,r)~ Cbx|ǟW3`ֺ)x4c>\#@MȌѕ^?X_SsAYfW#D,2ʺTA//V>>~WŊPJ.kx1{^]?"~ǿ݅_^[S)hxG!n{y^ OCA=Gt.0;<5[t"3؁x6ϧ0SnxLIA $!4. AOw!q{&Efv[?z <کǍԍ/NiS~dbs%wdL=^ےaRhmkFa*v0,֞F"!6I]Z5PT:8֎(plAӑ,hLŠ +2x>iPx 8O :/Ep@Kr(&g/VVUVYCe&sLnVUzIK4iJOdiC.K);M,fv3nwIӞ\rQx3դ*qq]qQ +&X(Fm#~ Da6CKc"nD1 J4YYl4Rզu-|mk""11k#0քc>$ c"dWa">]Yaf +Ua>y?$#)~/EI>|7BwgG>x'Bz;X!ze +V^ƻq, ¼4XD\L4EHV, $V,&'j e ]Z`:f@y1=pt`Nf!bgdfh;3gA!@f0vJU3~3bD[UpMYʠ_ /~{קSNTIG_#^ + +s̋LJ\>r~XtOiCB?<}P`^Ł.Ic@0}Κtݙ9h'ƕ~ǭU|{3V\M^Ačf &!7D׬KϿOLNC"y{hˡu[) ZT5~p +h86|4}Q_W+'W[ǽ]Gz; +{PޣJ\mShu貤ٍ&FP +J.ԩպPPI˘Y  +.p̅R7JJcZ2_*TqTv%w{ P)w.Bw: duyN)7Y(Gi([! į24Kv}4T};| +WOlkΞNvIbvhMNVh ۷\nlժkG 4m7B[l} 2qŢbzZlPL-fڶf뫲VmNPj#f_2,H#\49\t0F `7aVnXM:8"1S!(pVzZ89eͼη5sM24PQөz ]'ꮵP]5ja,JW*D V.m"*Vj)];a4tSEUcH7jk,iԗXH&Uw\XꊭV{PS$B(Pt8yTBSY∈)?,(XH&u@C8,TAQUh9 /X>(plAӑ,s8S0JV@9{9ͪ*3c2vғY]fRv:J.vݵvCw "+; 815Qq\¢LYLsfjjG0QQ(((osXq~ni!ya /M1_i}=~y1#u9#u`sˎ6<}$=pl觧z v(ܽz k'oww꟏^ ('zý2K]7w{9ԛ]w/{;]K7{NMweZy/<}a=Vh;iqaGǵ/R}m筦ڎ;͵y;6s6| dc-9;g1#8#z*t;oN:n8St,G"8qHUSt01E7=^qKjU{ }9+ۮ@x o;6o c oٓkQK_݄xoWy\QXs6 jk}Z[Ժxkc`ὋreKK߹ Uëss/jZ 5Vw[+ye5 +>;'XPp Jn*èZ'(R/UՕo.+~2_w+q]*THٕ37ι~kV_;vJjrQt~O +nwZ]%jtEuI=kg=> uލ_hGgui*><áq.be]8 @7c5E|,@7c?x؏p':w借PP/GdN `gNwjo<74ΉO.?`{?rt 4뀃oID6M>{cxvkuжhO~`*ټc6ن^+E<K3JQt#56̀5f3gGBSad: J"RBI1%ꀡ Zb`V -Jg  -`@ZY^zY> E<n8)5 JV +pIn!U63e5iTV3XLdX8"d`!qM^-bUJN4GQs4s|\ssb)s3 s} ߦl{o8sǟ ww/n;8~^8^-S?+IR;o|t~v5x<>cR7cPw֣5{zQJ<>GY=O?dN)a tr'uyݾk׃n;c_?whw}큓mֺ]Nssꀂ67R>նjT210F9,[*ch[b!J08hbFm #S؏^=Fa6p 1Jh,_dslRo]a)7[Y7m%]?Kw`B6pd'ʊ9> dvȀt' X8 +I<*i]1G?JC.G=Wl:HM +RzU@4᭕za-Qa-U\XhpXHS9+LXPVpS9#l% n*7Ԭn,h5ğ+Z^J\s5xG$i,{!ZPQMX5^5H?p/=jCFBzg+eș*$L%t qꈜe +.ҐrAJFȣX % +ȆCJ1PuX +zD9USTd^%=*DE5ud +PI6h=$NiIޥ۩*:T\$vba){*gQEC[%M6fR,1>*;Y +!bDQ R /Ib@#e敼 -E$FE{" JDGx- Š P/ĺO5k'S8177ዙ)b)bMSZM)VVff~j'Ŏs;Nû3 hb"~^8^-[t'Ka bpbx0(۱x?{\|[>Đg7}'>vOϘTMz;xԣF* ya ?Igl,~5%QxrՃx~YH=p>t}j>~pcEچ ۵WKi5[W[]{m2#WۆSUQ5RQar [׌ҶxbfeJ0q'{@?ÊYxcD8n6s2;` "W>d{ my)7ϳ7[XInMľ3@,4 Ɋ9ŵ> ĉ:H瑶qV*G +uǀ$GD+ xX@,r]{51Kհ8Uh<ֆV"Z(H$"+4sAB5e yT|PDi,nJI۪39BЋmprc0Ʀ\pM6!9%%dMK{W#9|X?o2_H\~+ѭ>]!vGo7܋ ztnS]N=h1I#UvW: V!.]ߊԆ .ň8Hg5E8IgY'xgVO尺jXh%U#:9ex~x$ ZAdZ*y +j*M$NcO4H\Vp~rFjXDuS9RVlN⬪J)ʃV`DXFı"vJ全} tx/S3 +\Fv`eٌ*ʢ! LYI#e0NX{ ,?QX)0v9ɴUvD=*FdP :DF^Rz,*ͬj6(SbX{t$EkE(H-">BTnKh᎙4V1j0-"*T#FMNjV]{Z@IRj·mDV5"tK0b D&!Av;6R;lIbǁ"ԖAX? +6m7 Ά6 Q?Mֿ H~v6ևkX +J+ڕ5+ rr?rU[\Њž".U#p,UA,,~jF̟Q7ּwTBa6%%kFU^0q bT"L %eHMɌҎ'B /S z4 +NM A +O6X ce  + dX<`^kS+xI#w&U + &J|)mJNNE*E($HPL"S /LnrI^^2)^^0OQ<0qww.(D9s&̘t38 SϜ1 ,n3fyy͜aR+fqC߭ӕ|oWno߮zڴ+~ +sſ.^Sev<+ +p~z}=RIWs߸(E(Mo*PS{!wMqwq0.+ _g_ߪ~θx]rmK8nZ=`ٳ;ӻ}9Kg4=]We魭?[f8{r8)(Ct8>ɓ6Zhh M\5a4: (subEOFjm ;Rq +'rQ^ǃc6y`Gr^+|}la쯮;$M A Ű{mݽ/bb)KsVtOr01oɄ%d?MGucji NA|C,I,f=Hp 2r&|&"rѮ`FZ>k Fh:v^ !ѡ NN v:uNد``" qx'Xhw uA\h1Sq!]u$idɾu'{OsX=u xaj)jQ͑(ijS,m'9N*Hjj䱚+8w"j48s޴d|狈G[_Ѕ5[j|n{Sz4 iESja_ދυo?.J'w38~۳[rtwߋgwou <Jtš?_A}(?޴ތ 7DO_I_qϯډW45+캕zzFt)[o$n?k[57V^>UrSrL݊*Zyj(XesGèE\QÜo5}-tHࠈ+E^XE=0^|A.;Dl.m:a~,~ЀXùMa jdЂgA lͼoOsVjh^巒3ޗJ؜`;_`;reY>[3?9f"B_6/`ڵAՕæ\=)R01LN83`%jBZz]5ѩ/LPեL:SRx6Vph0t `q5.*={bQʋ6I;h p3)BC?aA°x܆p xk8f:@s=p 83v3t#pOոx/kP/8Cwg~nQtOpcwur: nn}lÀvyv{4+~Vxж{Unʏc lu9̓ux9\ #9Klqṕ͝pxDa{66۹ލر%akݼ5.0VrbJ'bsK>Dmp"6@mX@-sZa-qvìY~V.tT.ppv7;؀sa-cZZn`KvElZ8[0V4;bTj1wUԜ2TyER;Ċ5sQӊS'Zš2!!Rq<(Zia2Uvx F\x#QfĸqFㆃf\C!F5!F 1 +1#F 22AÆPX0tk/c 4lp?50πuŀ\T=_Aȼl=|Y:Ɨi:+7CIׅEd}T-Ga}$,I楦hDIV#z'4dj*0 9J2dQ!=,fJTEx(FivvE8fFX-xa1SHyIe6rBI" r10q1ZRQZCдjQ5k9FEU;V͡dh6ꈁ4EÔA*) A#N)J ( +\Ld2,T*F*H QQQ8"$H"$t$#*D"(R" \_>=MOOI6G~Yo牞іAL^fp%3ș6Twޔ.9MH/;ձ\EڞV+6D;R,P5vZ(kMr}rg{֙9?]<|̻?_ }V7'(%(,Hz8]X|\!% +ܑY{0yx)L=k@`ތҌ]-2f^uo^v:|^uXݸXzy46 3yYz֢5r^4RRCw Ի;jiRپlV_4]ԥpެ3郷Z􁚪G8]}7@-( 4@N#]LI`c bTZ_PB @|,8J*7!ȕ#℈!]L(M[wD!^bO-&aAxGC:'Z&bo=1@yl7eEw]:/ҠȎb"/"v>IBߓDs xqۚϢbxaMghT(mSBny!+Pr1QA7˶aBo5[x[`)Kb-MEuś+j7n +1jn-jo5^42jB UjhY] +0Ϩ5pj+f5`f5"tj5RݧR\QNktBbB&`.I9}POtl>SU t)Q0<\]e cs} fe't.=7{ql=eB0&0ATq)6Xf#zk E /sꠞǞ:NӨ:L:;W1{tc``֋ڥ4:̑ -pnLi1Rqwjp):}zCD-IРh~Ϛȡx+%=N1ijEƨQ֒(Ho3TRMPJ>јPs{Kݦ…11޸0/LVQT.2؋("؛ Rڱk=Tm^Da<1,ں, Y/-8ls'&pm@~ugM䜵_' +k:#"z: +z1N*霐cN0l] Ѐ]U$;J4&&&QcD}wQPe_}s`M3&3I&̙dޢ_?{Ͻߺ'$fڝJYؾ7[5k3dDV(H691;yaí民FsP9b>r~oꅚ-վ؀A3>HCY*nqd_1+ý2C@.McTt\"4,dgP|=A:@a,Trݨa!2гVrӭSV=FK:JE-4d 63@-rBlP50zAO-u($w2by ujFƬ5X[ Z rF[*4f$5Ul M FA (H]4 S"WSFX>eliSrVYlT +ea24<5*!%gl㌕dL@B2Ha:PA!)? 9奒xn +!)'0 ;e%de&a$#Acb`OKJቑA H=/۫s(6 ~()|Gg?$|G{&{[{G  wm@|!;b;|}?|Ey۶A>zח!}Δl}g7@{{! +ڲG}wBI#'>'es7yސM!>6A + ]Ԇ5޼dB֭]Ylrj'd5K=$\YSeE<5K w v6`\"^l,b! 1ј;G%-؈@&SD(TF* )QzӸ z!5]i\AA@?_krq8\&i\]9>*7_5Gry#. 4gGjO/+KB<E<<oOTxc6=0we@c5j !ZiP4*Vi؆3"777W7(.qvv qrrrI̟?_\e.s\.?o 5v|Ǜ|$ԛo߅z,'oOz:g|2xQ?^h:5կW &V) +'{Sht=G_=R21#@Ѩ]2E1k+6R&-2Eh ѕQN:Z8&Ɓ#*Ü#6rAr\).K$b9(ޅ9~{M)'OA%; _-)Qr .iNH\NS'A٠'D2A3$}1K~/%.泞d@jw"(z+A$dcJ''nR jk3Cb93[AQ66H;Ĝ4s†[a#fsPr~oꅚ-gABR P-0!~BH DHP4Qn +r1ڡ j_:)#isBe gۍrPift+蔕AOђNR,F` h :DKok +lpRzjiFa&xQyLq:jhLX{5#ZEcƁ`ڄJib[Kj9J-GLr0ÌJm4V(pjx9%y5eԌU0bUH%8ZjH15+K`FHEP! +4<@qrHHiqJH^q& !E0t jRI<7lRD 2xg zEi1TNQŀ'G%%Ef H:YA:bÃ@@V$f٩(< Sl(`#DED]%*{AATDc,y@rK fygg>&r_eI0"̌>Ʉ*0&x@Rl8L!Ŧ WV`&egP7dba"dQ< W4˄5l7R8J/il1f1XBi:\-bDN\=,GtT_ fhBIW#4!jDfj>H{+-%$ NQ"%"*r%VjozIIb}H)^e>ayI.F9$F9eNGR8m(6aR$j6#)YIH` +H! $OC!S$tB!e9GSੵ(*5TjZTQVJJŲ 0 4 +B2fQܳ4EEAP\#!I.WHI0( Äŋ'J?QbccqB%&h&~|_#q: /Ծ|u+3μ?\//r"T췮YV}sG;S{F$TX~lO{~x:D>SpgO uRY)}OL8=N}eHH~78M]^yλW,ԋ{Af?~oxH 聇`Å_|y5uԶ=]Nӆ3q:Z1N$N`4:Z8Cp4#8qg35pc }! ~uMnUOovAvB|r';B[ڶ=x lWW7C6-yp%h#m >s6@/#Xoˈ{jօvaE5w/VcX9y+[]88k;ZȁƎV8 X+)X>l]ҹs%9VY6IQ5UVI ̂J> Ͱͭ4g1{5YS-*H3ǂZUٯ$QnTQfFLdBZiXSKL< L)6E&zr אb *+JI\3@B(20Q2ֈ(cI+m/2 p^|bH= =B'b F Ӆ\CuZĈ:zX+/[Ce騾ЄFdiYCԈ4i$,} +@%VZ*KIUID JfETJ,`%S"," | !ȓ\sIn'rN ;pP+)m4fID!lFR$222J-K4rC%IYNG%LZ P58,GQ@Z4jU*ƏQdQJL `y F #(IP8rBArf$\!%A.d$`/N(D h&hB/_l_1򘘸Kg@Hy8_h;~̋E"'Hu?~eEJ:~|~jψtIcwߢ8[;3 wc%ƈQz+*v"cEPXi"ub>O;s9slay}3GV͈w+EFaC+?=SXnb.o3~IdʫE3Å\OԴzޣa#ӳnzڥ"nOzT±.pEf]ۓ4g.>jݾʣݗ22tkm+Gګ!UlJ#*L(mPQbD>rQQȖC\(0 yl]y#Ιp F #ӰIȉġfDǍ84G1FðCLz rzDdtHFjD5@I,aWB\NB_bM߫cİDAwkOawjp"+!alT0B#vo1nU߶R6OkR x5!<Px{z{{k.jh٘ʑ]S +iZWƣZV+VZm* +\D4MtBh,W 4 jFR I#^/Qb +qHc&Bj+ZruPCrH!j 4-Q{ªטTG1H \'(\8?^w3-K`yNϺ3ij*IVi>+O:`ۋ{ 4']V;Ŵ;=>{/eVVVg險hYWiGګ1:J*F1L((ҵ3[lE4E.HEڀ\&3,3d'[ 'aC'` ?p,~q#+&8̈k8g3!o`Q@#z:F,uHlD#J"2ܿ7!W[ˈWSDD0nWCXaT :C'*TAo[9* =b?/̫ax4yx{k.jhlQHܮqt)4~GhuVhsQrj6OKEhT"&QsYaQz6Ic2ACQƭTC#K0bb +qHc&-٩ӯ(4 *]Mo4B/UDAeQ@4"@T@VWPYPK\LQ&1L&'3sLUC? 9T{SV +?O"#h&d +&ƺt#OuPv 1SB3fZ)$k [(V Bg8pRw3ILAH yt4b3I:qi;H8oos'h!5כ!Muft!@jrt,` 촆2M}`ԕ!&jHՅ TUhT* N06ej*1BJ =8OPQ&0C/ OCۣwg7U+'Eޭw(kHߩ 26VZNPjCKIvo"8A'Qc5Xr<ݯI4X_=H6>54`{/$~$.Z c틴ށnR -hK +m~Wš6FڸNŻCTbQkU JoA#Tغp%Rd\;kjMDWx CV ]%BV LB +eVxAV.rD+y!#eD -/rJ +$ sH<ń "L̈{ d|h{`Fd ~z0׈!~>"7WDҨ=4>bwnjc'ÕTK޸;S-U\Jg ‹)3Or!U E˼rK*CK%^<`\001yQ==DtC虧 ww!KAn,EŕNpxb,ZBŅ\hb"EKƬo~}I뷑^%\WϢl,rcs7A[&k~/|^V2&lCϩ`ȋ'Asfi ~AH/goDy +x#_΁w~z2Õ(u_@~zS?߿ZV;o[<,paŷ=ik~49C& H\^[9Ffd2geإIneJoHnɼ4dt/-FWڮk=)Nf^L)}/ɘVt{(yޞn6f1sq渟1gi rm:YЕd =G)fn t5h"4ko$!'!Ҧ fe @3q \o4ՙqБZ4VUC*ͼV Nk(3ԗ&H]R[lrȈT]h@@U&Ie"mtoU|X 1j@ od8 Ag:=} >_Ydzzexx=<ű:%$p+i(tFP$ӒD %Tij N:N %V!1110c䉖,QQQJEI$D >UWUtKZQvٸԎQSOnᐙምp,$msVv^͙6;T'.z*K.Էxsy|S@UF+w^c{~_Ux/݊q +n7̅8R桪w +7Cspm[mn +AU[=JhIWo޻ɣb !.䥔!}U njz)[QkT/bZb7۱څضEP>4ٺMþXmYm^ +ۦeƥog\db[ȉXIV/pL0+²bSĒYΰ--a8  9B?ծhb6w3ٮh$[~&E3'L0c1Ԇ6֊558krTdU4qLrl~ +񣓃7* QyrHcG&C>IXDE~IX[>5%1bQ4r9 IgC,Ԉ0!f4q7l`=LO&"0!O@ $?1fz>5x}SeIAg=%} T>F 2X6RS=d0zYgx#D/ hp<ű:?GrG"P~4M" ISr4H +%BK*Qk5bXu'KBbbb`DGG-KY*H"$'T +b**6jAM ϛ 7?>y}|PS@$Lī^xcأ{ញx2ۀs1ċpeez_-gdåO"CGR3zϳ y#O1bB]Ljj +;ɪĨ*0Ί(e9ϺʲG;K1NgtLᔈ'xp11CmG?m=KX>yr꜔-Eɏn +^ggJ|pp*,/~ ++#͋JKs|@ +,dIȻMȻ7&"oBb߱ab`h=.;k&FDLۄBګ9mUPݼJXH !k9m!e!ZCZO, Jh9V7yyȻ)YOt0YGHj2HjoԿZGܜ(0(F8^c$[IWk + 1+FRuD.W2JrsdwL]4:_fRJYA4ɦ3&Qʘi0D5f&OY՞@ЂIj[cfQUGMTqcRLQ3a1g[( 4E)6nA)6#HXQr!lHʆf*2Q݉Bx̒3RG ^$swr(aŹF#;m@e1EQ`b3XaQf@M5N[^9IzDvaJY zQ:,#@E`DXJ#"u(?DbpT|0/*f6EsaE""R._0H7>/"|'^X't]H>Q}ok76Cٹśܹ͇n)vl`_KпxmAmg;^m<[7z |ٺ m7K!ig6"6s'aI+An]ghpOn5Zĺn>]%?Y&jJ v58iV-U#V. V,V#/lZ[PXJQK+$-D,P|5#]a`6ɼZ\ :ϢD5+fa1Q + %H`%1(=%3H;~^G ('~49ϛ@{ʝa^rgOWQ2goOb!C+SZ]Ey~o; /V /Mu[ -VhZPwcXw5p)Y[ch[CۜaVWCh >vDXo8mnjF;@-F)TrGYÝ@Y尜IΈ((B%S"Nbd 8bsv(m;V1NꓛEl6 J6 7 6 T5֯W֭ PcUkVVOXahh|Wz?jFb/"a?ქ~/Ull5V }EK8d/a<¢rު!-w0N+7S7[;w^ќ^fO赳R4=R)7#Q4'F| KWtfͨ8-M8OJCI)xzha'SFf]s4:u*^nnnS&)_Ƃ7C՟ǂzWgr꛻o +o<^g/0<4\'C E,Iy}j邚s d?J~5 5oxߚFnX^x>Ђoomn2^ HhwVuI2U*p2\sNqąkH\ҳ~S`sZU$ϙzO)ȕ}ܓ}ȗW$6'$~ۏd!^L$%/."6N ] D;?/I'J=(cL(xɁ;#ݶnYclD6фP_z3.j@oTn/v]kDv7qfG_nܖFd*іȶ;zvFY}#4P7,4 7 &J͍Nuèh=f" `a'\U+ꪕ#[̈́VN=VHo 9EM,ȩD.5p.ֳWwu232 X9z2'݈Ȟn5M/*3̀ȘGO1>Y#xRud%Ғu)Z=b$ԉZ$ S+ykxM@iI DbZԄ8*?b09/!'Ī1*hQJ;F3u2H ++Cʢ=JDFD)%hQNJ +8H!\]QxA.F.u04n$/CHg cUU*Dʑ0f)ΘaŤ#%" 5G@1Bn0*%UGիJrt*KZ1 CtF hQU%@j͡ +) ($A arBAd +\Ȥrn"N&J" K`ႄa +%$$$TAF 2rH@1 g8 p6"lԈnF9{cUdWMo׫O %cL iR@d<IqP&WC^m R|~{~};/K~!a@rϯhߋS}@}7Oϻ%2XuV~%x[o;v!F=yzvo2=fO7yYEc]w%܊ގvwn=xqWso:n7vwpzox5^m>ם5<Z[Kk^Mq7^s0Noݣ˼XWx8qaCC8ޚn~GX0> ` x  ۾m8+_` a˾?/6B6\4A;|iÀuUQux=>@͏pJ`7gWn97 ot– YюVu[ oW!U+ +-jK xeWZa[N*Χrs9PrPSu+j8(t(:QR|DIŵ]3wg-#vL~u"iWz֮i>(tqxuwv/\KmN1ą6F^=uE|r%#?::w#D9{̍<ʢ:sxCnnRLO[!l?د퀫~;σ:I@>Na<^'wȉ=nnFrqM7Rr(Gvmw"{:%`[Ծ,M.ލlp Xmd=jsmop(ضuNz{Ks!uj޲EټElwXD4գ+AkX8u]DYZ;֪8j;*CZмe liMTm%#`CU0rrUU`-g gQ)㵰Ђb * Xes-TŜM>Q%fDl*B2c暨<3 +t 9wgN&0)!gH僙m$q D^ʊ@fE}e$gdr2dN= *k^Tf1UHb3}FxH): /-EK%SzI:?X)I"%QVפ&"4x! qcU~*ar^B -OUcTXqJ?chtZe8z;2bw%N1E:v+( 򁔎 0[ $wXt `5pN{:,:q rvrGy!GU#v> 9ķA Oo8۟Te¶= lmv:~i柌]K`$C5]Eliǂ@\Y@"懗wq6R;پAl%`+'AbXJa.lዩ+ ij1g'^1,v]MX 3[{S[S}XQ]hSXq'\UV~dk̿_M>Ֆ,i]7e +LHmZvJv\}IcVSfʴnwJ5[%ZKf)#o]ê*U:A7P +trVX>zAǣG\cH |X`r>;7;wAfu CdHة,ĉLq|?#(gG8P ƾϲӴDv*CŽ t8UP|RTJ!&k~ګY{tDfND-"# AY KKlXMػU3= j~,)^C%Ʃvmcih5Ղvla7)ضX?A *?B%ĨѾ-Q*|lZH_6AĮZEEŊZC8t+{]#(r7b2/RjXxQzC% 4cwyeRy8KzKyE,Y)? =x`-N.X4Co-じ?1rog3;1/ |3'BI wC|qG̚6J0W"" &>Mi4cEӧ(a!|.MBM`9L !\XL y XhΙ/( +'@=Sh) _C" Щ~ЩdD} 1OR?TdB8|e $ބdr;xz2OObY,ptW)]܌؉%WZ=bz SC0pv>sAY;?29cwA28[[iGR1R ɰSoM]iAP &a܍}Wk[kUEVd_EKdP[mmOgڙL;_{.p5n_>y='os)GJl ) ɷ/2Ēn$~ћp{~LDpr$a[pDč[`Rq7;RHbړ b1m!AH;,>j +ab"ZD-AsD 5 6G4G\ O,1ޣ'zu.(z>XA)gנKRtPFpj{#uB!,F@)Yh@7)Im$od]mC]1"Z)Y[Hy4R%pb#mĊarzY= 6]OsXp^^WkRGZyU",5 fQX{ +am .UVhdx&!{A*i&hCPN3Ve4rPuh +5qaUE,IJ'hDU!M +ws* +Xy> 3Vt>%,&(ˣrIDiM*ɢř q"UaD?fDQ]GHDaiB*+U\L5)IǓJd:GM0#zYiA"z" 1RbDrt@#x"J!ʊ=Dq1aZ^0ZD}:GZIiQCO?Z}w^؇Y`!{"oowhRޝ>叿OҞ;El{o0[}0,eV_l{`[7-v/->6n #'d7oz/6FlZظFSֆը46֭T+T+=kVh$^jJDXZҊ7TR`B2XΪ"!,d;5(5ѫlA;lPAJw^0*fa<} ҩAj@SsܴZuVVr0qr|< +}5޾^@õBQyy=5^0Bר=a*Vi*B<0WJ#d0`J wR.g7QKf8.,Y8-d! YBi'EήN999;k\z紐7s6xQ(ᅬ,X<(Ey9&olpHt'3^%<^8:=XO_yQw4~k^լ6WYϯ.#~k7^Usӗ#SFG(_LOnv,Iҝxt3Eq\;wĭ[w+)p:xP4}(?}8֙;O[1XG̬v fVUpgh˛lGozĞF rg {sjaDj;:Ȕ5}CJe!X\ݠ piH,)9ǾV:8uXp"wWB; +//ۑ' ܹHI K2y1 |B )I_ܞ.cC=QXx9NDܸ% U fGɱc@ҜD)1m!H z5kBw7̼;[a( 6 lhV6XcGOꔣ],Qj}:RhA9ң42Xv#"]ANRu fl$Xu uLqL#.5Q"ĊarzMzRػiu1^^WkRGZyU",5 fQX{ bm Ľ\j5шJjb%yp'|h61xS% 7YtvHjiƪFγ;~BԔ2KhbJQUDe:I0I ̘&\10L3f ?3/&l3T,Ɂ3ɂ=HL5i&5'5bqb'g1i3 R%$013̘G:$'ꉙ :%uiZ=fjO"aZVM@Sk1c5IԒ&M3>Fb)ylZ>.Z%jlϘHJ@%=dBQ@TEyH&(I.:ICQHwA>{QM-av5.M§ARw^T݃s6q6j<ڰh=bR=UUBg';_Cmb;Zq M7yLֈe7>oJ*y=guZҫ'|w5#_9UJ.B,-ҍYtU| S)_a^2]<rR - +.B/֎*Bo; ;{}c!Ttr+ܾ|(ڑWyvucfq`/7ߞ.s(w(.9jS\8`u.e>+%Lsˉ9}%DrT9}ܢNvnItp ov7˃.ih ~!>KA)84KRʑ=ހ]4ٵI93!Pyq;"C۽m9c+} 9jӱ53"x66y RhF:({6_[ٽ k-M0H5n5IVӘOWKm Y0ŹVIE6PcU00*2g[$-2cp;,*'r28a,`lϼײgPYL$榇c`O3b2S DfDI d%}j$gD'FL zI)ILGzi?3Qoz@w1ɉzbf%%hxfZV@8E+*aH#G!&~7AДZX f8!cqƨQhJV3&PcF+EE2PT%eQ^%&Ca"<IJR NPb<R0ß.g m~D?r$dB!E MSoQ\k" Swg ݝ]{ŖXDE ^P@1&P^[bA+(F'KҡI'L75~dd܉=UE'+vtĜWƙk*|`:]K9ue&L2:`TE栫)D!…y0'\cj4hHuGӑR7uCG)QU(_zT4sxVH*x1-f}ԡ]^YF)>bb^bOwVC˶y$Em>IdIV/:ŇۖLT7+)}0e<x齛Eسٳɋ7kf;׉X+b񠘭k4ɖ"U̖>P +W=*^yb L2pl6.sSE mX&22V>߃bܠuyڥnf,^$bV-ucV,-uawZ<ft-, +^12V-N䐾0 ]LnV`e"7͠kI,jD7wzH!؜Qde%2&hʜ +bɌI(5}b&cBo^_O+o5 QzuP&E.gWG^S\ RXԵKGV9є⣣:8L${OUXID\4.xh*RL4GZr%HILF?/y#gQDBh9䝂kfsXd-حÏ[b^;y`m6@`K8fG6+Z-VB Zh>,d)F(32Z4E"Mb@/h$`0"T頑pTs S%T-z1L0cH!`5f0|u ) Kw %M wSyPPAj UfK4m}_SgySׇ8GXt7x6!^/xF`O򺶧Wz! +RZD*C>",T!|8(Cc3i!ޤ^rfދi?7{A{֋={cA픡vyvzb;HHVZJ°nl6YδzUK0!mpRW%./[YH"\Pi"v'"\ ,ŜEzga,"4W E : 4*#I8TJ5JR(1>"Goo{`+HeT&$yPd R32.RwD "7W `.bW".c" L"(L8 'l lrrrȇ5 8f{{{سf>k͛Džofnfn9؁vyĕp_?m7O[$o~ f9s;~ +qɛ>L\ǟk>?Ly\1jF6~C?oOmoO}%4=^ѢǾ ς@)1^>Z>$jF@A>#J%H/ͦ-4#ÞlPV!SR{+{͕ϛӦZtXmӱS6i2&{fݤ*v +; 3QRΣKVʣ,}J 2%رɮKi"y\AaPprr tp#OZ873$>jʅqB؝aq(2 1#7 D߿&ҢpHE 6e9yD;ZQ˲Eƥ dFdɸdA&`An3Z87иpNM=7D;#0gRH9̘LgL Oj$?7S' +)TMVv:!S3ANrp!hM,9J|dz8FGXN0:]_j7 _ !" +`CBa!$840 b & +#!LA:(D &Oq@ P4 +#h@ +78AW3$NWXq>qU7NΘ1chEFSF2d$35{ }:߾_lX&zBۿ3C1bkyX/W~>] ǯfa~W˳Mwӷ4t0LI|=_Mx~|o"0ho_rjֽzFb_xӇ35B2,{ B3I <2idm:yo5A=WnTs jZ +z4˞us48^M~ I*NI򞩪@Pq\yϮK8T깆T*~׍T`1eHη];*94iB +a01JۿWC$>HƗ1yKI{gd$ .$s TN]) z I{f;.K r%|וtPr$jJR%K>)HM'n+)SԫAEw1݀$(#] ]Ďdstw(>.>.Xlfׁe-sVÝ [g"Z(Hw1n 7lna +[njueIŊ[9#W[u6k. “8Uͼ芓.;]jbGpVu(-gJơhm5"J͙jrZkHjaZNN8dĈk:@rU*NWR*xUMT0 .剽#<Npc%8dG bޣ} <r~e,UVBw +8U,<4ss0UU%9Mv?簲,+a0,bAƣ,a6f L]64v Iڙf%%;ՎОd;=ɦD2 +6R2ВojR7SPARغ)ܣX !ic8p !&\U H\?x fQ|T,.ڢiS.iךUŬ 1fawWpI)*3견Q1w\i&Tۘb0PC ;%K16BHlZvM6@[=#(p~==GLJX+v6Th܄2 vKLTyF/PqfYcJb"#UVhƔ2*iU\`g0o42M)3\xP˒9fD+bgsAXI27ӄe75d0C҇EHKCSt$k NbDtD xSMC$'j)I>JӪQI^1>%Ji0^Rzx"C@ :R+Js@^^Qhp,:,P@zB:؏K={%Q?v/>'؅ZcSdb:1K݆Plݎ-"9Y}& } }02A>_X3V< +R+,Z&a)4)h bNJY4 BhAV|h^0jk}<ԌͨPͥ>s "/6fAUQi!vuLP-R5(_eסФ#ӧtVվwJ}禢k'O5WN"/O$.SIuD ]$6ٖ js w7\+Ov95%u4{4ܘ/} !}vv#Ӈ(a/%a|ް"QM{}ԛh4O"ulOѝ^ ud:#7hC;O{~Co޻o`mvcnڳ_G~7xBy1;{0ׁ7k;ֽ}-Om_Qp[ WC*@vHHX(\ҙ@xeshC pZpml<0[9l͜0VdљLfB08e pAh:tZ=h-B16$M1"i 5$J!FR"@cT*㔨8Qb% +$:::FhQ%%TDI$N,V((SJ 6m"i Q>Og/yeaV?䄐e(h z~?mпg=cߚ8H23PB 콢{u{UU.Uz/X@V"A$(^uEݿΙ0d0/||Og~W5_xyXeSz7R/b^F{;d4,2󿪷HK?w7}sdߘ$۽L"zho +G4Y(_{8ZdV0FtFK'b[0 2K1scfF*Sէ@#0_f%ºx@$6tVwTЎ{U\Q@JX$^1&;  *X H oAZ`0R \H j(d{KJE7Y'#_ x ^4ۻu +!V! 1DBkQ/y;⒊\d 3M-UDjJa@SRX`&JhU+TFZ5\w\me*^J5Z\%D]FTXyGL*j8E5S& +JOj@CTcū(_ ءU#gr5"A ~^&0NVCRqh'ՈSYN$?룼L%Fx +Xjıt8GӔX +27EHz"{IR1'* +NBe%*HXfr"+#NASR + KQ"R*&BD{b%GyIHݱ(鉕AO%"!BA=yŅy bC= Ɋ `Q8!rTAqEzPr'ߝj<r<FP?Bsr2p;V/22OjWkn7.WN'7=;\=;PC_~t3yG?"wk bvb6gڹUJi ۱ř?:?lbmDl֍Nl"6 ;8߯wڸNuNM>zdhZ ⻵Nk$[AR%0]X&^Xr =Qٍl&`-]@ .,Y`xxE(;¹bs(lG{8^b[< ֐/5AV60/ШD6jF$JpP8=%T.w"eb ʜqܤ23Jsqp΀Hp:Ja3CJq$AI`p4Glo#9;=bH%D$ABBD `P +Ʊ +qmmDН-/kk>Vֳa9d֬Y0SfΜ9d82m*STb>VifLa5}`ڴYtCwbRzGƳYJǿ=ϔ)S>^{zƬ5c֋UF>[M}xr2_ݨ~gYOoKy{gnvg`C_G.~럋x7g\77&!t^Oקث^'hod~~Q# uJW +Έ}D w+#]Wx3un=jMK>f{cU<-PYc߸B7jsnf[e4zޫ2j*w fh'PQQjF o3+̀8B f8ǕqH1ΘqJ)HjYy@“[ @@p r >j``8w\ѽ3aQ28ҁW43R#zXD1I8/'I`uձa:k8XhGM QupL4Qr +'*n%WdP{EĘp"+U +j9X!FZV}-eA@_s)+m. +ߖ"Os_S@٩(<P`w.K[؝޻9XE"J ]QI,;5r3r ; ~?<3Vlm‡iou;57Ϙpf7 vY]f D7:)ĀLu:ziX_%HXO %tQO]mƴzZQ,JܬR;)R~Su LUZNj ;T{57im1UVII{KuJOp +Gr2N1՗sx]ݪC.ag$,fSE,ATr,*2TJ^QFC岈p')ɦ,q<ޱ,FQq& :(deЊ +)0QU:s~ +#KIQn +*'"`ى#(+h238~rL(J1x(%"-sFM(J K6m}Uy/u-͟Qu> 2"c瓵FE1Sa[ w$V{cV1"֮4Y[^e9tj`/b7b"/IJr.@-x-Kj,W`٤^3oNILnN0dwcyfs$"#V!Uӄ;J+sV`$y#/U }t1,K&3y^xKE;{6"wxL2$wnX.^,vg<$.N;#>‹9 (h2Q؍f!X@AHfFX$7k Bz`zxWjxjywZ?JeHlo;&|lV,l3Xs 5LMV h1S&k&E$\KfMBQIԘx&!NH)ixq +?b)eJY\Bhϸ((ŎDŌPD*`<.RJ:@8c'1.' sҹAE8PfVZ5bQYEi44`l4=Cc0G H3 2) :>ԑ bZ,OZV4 +R=jT( T)@(BR PP!z !CN@r! EńE莡IaaRBFF *TFȑ#G k"1jp p pP눐ѡ#H:oу/Ygxz=EʰaG>YҿK +"U YKRa^$b޾o?`o;<. +y ?`(~4?(;r +[GO\}}' +pN҈u;Vwecs^lWw쳂z-dOڈ'cdPIml־\ ]{lҺov ιZ@+Ŵ8)Dk5p\1Ԛ?G8"pD|{WQV \a`oeb4 ?FZcg;?. K>,fɣ61?ғ32ur2dN=]')kVRf>UgiR2RDzƇ>㓖&Ғ5j-fd$D vɓԬU(9*i$ )%M8NgB,c,>V)QMر1P41Q2 /z5MCسa0jA?yyZAIy``/$ 牨=߿/]^{wz}[XgNߚ8k%$3 $3 Z^mZkm"컢( +"HX@e3j"Px]zok{'T1ksr qC=z{2qTΣ,Q7Tʖ>q*M{Y(F:.FMg>"fulI:rٌĻo,2m<ҡc,iԸQ-] +#F#fX04hQMǡHCc#jWǢ"j&~uL^}N]̱vd\GudߵuGur>h{÷ +6^j0~. +Zo(ИfA@JO zJ +iu7RFC uv +ӥ1 JLZl|USIPz^q*nݠ*Am^ǵ\Sa͋ +w9L +tQiQ͋ZN4ԄqVUw> sJeӍ4*̍JJs +g. a* 'qB OѐԂٓ5')rUI%qtTAVv+ИH!&PN+8 )[E(rirDf+DH-d^ZrB(,9LCʥ0Cn =S~ZgKKsSC9处%e' +:JdƇ8I4p sJz !VIQfAb#dL "R Y̑@HB>Q_BRN_σ0r,у._>{%?%PٷW]>=|ه;m sڳ-aF%$yxcvecVON۷xk&O[F/^[7xbSyMkml\&ٰZ&~uj:0]I2̚n6V/!jUURue%bPE+UJ7rZfA)rpi+RD()Wg" -]8" {@_HPop`  !>APw@oxxx'F遑za'd!d()@ʤn\)) IH!1!!(WX]m\E.`b@'"Ċe˖9rqppXƎ+ﱲtR.|Y,f1#ah{s.q8oO/{V_l6NgbEޑ}mzׯ[މ_L}^7~FA?&O3 Ժyﴕ<_k?kαS5V㷫 &A?[6_OS|ě㰅y1#!y6xPnmz tA\f'h +bbb,yU)S.@gi\[bi4%&4V>=ҜH2R Х0kD2;A%A1DT0Eψl:E8(jWCZ(樾,,_WGSsl.j]!Ѣa%PGۃ]:Bģ:9 c{÷ +61jI *Xh+} A)Lf%ѧ^ %k$BzhAݍkTaJuA?{ső\03Ŝ1*" 7 " ވ#(qݬg\27yl@&>gUoUz+3î7ZP=݂ͬ]k+4t.9q-],]RiQ kY0YZ;VK RsturXE"Ĺ4JFҙcB;tCp<ZGq56# vrª.'K ;QBaЈb +q&&* (c6 CT Д F|lڗcjU2iFZL&3;1h 6kM`&!ШѣNJ3uNJרuZ? +T H5BMsTb~0B@$p$tPBNHP|29Gd g/H){7l ^^^N<==p<<<<3AO#iST2xz_iӦM +Qӧ}6:oW~r/9~/F~)S>~:I~ޅ|?, 0хCK$C? .rCn B鶷 f滷 ҕ8MLj㽙=Jp?IլP/A%QlynۧA2"H{N{:ꖁ꜊w7n}T4bΊ;]@wHo{H sr(|U<+] VaەBuֶ^ciõ2m7.Uki;Y+}g;6֊Җ߹*f-}lk3myOcқ_m-pVZ|zBsᢦuk5,95 afY*=Zj<\;Z2S%/Tf5V.ofCmJE}z֣ju0T EU@y {}A=>stvȑ~m>.V/V>\\`gS/g/^]< QABzHQ|ֵ^Y\eWzmٸKpmX!h뗻<-uYąT؉,vV-t-pZ%j|'d\d%Z4$;k~1o]6Ȝiv + 9șSHP!ySd;MGkƇvli[Κ:c#>yϊ4e2 += l] ҇} fkx!fx#2q8քs I1Fȸ cG!o20Ǝ6"Bƍr -1#*=BcևC 7L/hP`Pege j`-tM456$RdʌTJ9Ld iI05R`LT(.+O1I +I_J4]n308 pnkqZ]fe&m{vA`3ڭVaY(zfNb&d f1ބ``PuJzjh:!F"xp5""(8IP8IS!Rb*KRIP*T(rEL12y+L&..N"JˋD"AJL4DM4bcHcb$4ʤ1W2,pl,FO(ƳΨ7# =a],gٽP=qO n1Ooj1ݡ!afWR6 q2babdR@b/,XG+ >݁L}}oea¾dpsgWGWv w +|Ung ݗ7_`/FG +ٹݏrώ>Ď-~brc'hۧ`||cǾؽ=[7{}gO7x/ޓlZkZx۵a#Zۮu+^5=y^1ɪ\%R%n+Hݖg"b.tdG7xLX +kZre-%EŌj C&AZꬢ%t;) !yAf0W&cer`33,0 + @o@/?{<}}xx #H1O'K=PJ%mX)@r#DU6|7Wnc@*egy.yrvvdܹ|rˉSs85{l>jLLL \ӬYsٳ怃,'^^}'?gl3>?oЍgɷfY^֩Q#$+ku812P2@GGvOH{Ud3B<'U(NsW펢mP!Ju +mgfNnlr0 7/lrPCو,(F *uzsM:+&TWTD +k}fY": -2"uXM諏uYpf**cgDv2"5QaM꨽}f%1JZUDRdnv"[axNIx&[(SPT8bz/Cʆ@AbVO#.EԪD]*BHvDdWbyECQjL{iӨ] Ŵ9"tWU ]K% ";""(.&qe&8OUمUWx9suuSú%ﮣe V{aԱv^Z9A'Vqpb5Wr +UF4V:e7lذ?+xx@+9A0!^?QyLOY'`vrpyˁX L ?i`(xxC<>7&yQ?P|W?xL8O48`vc?*O;  _:?=VwEbfܡ?n;>*鞿߲ v&gv|Cy?ttF|ݤ{x[N0?8LW`_[c@GkJzڊ{w?9זk{V0xpi-k)xtYͰǽ&`M@#2`yzuPS+5G59aD@U+87xw;#(te=2^h`=8+Q`P[ݹݼg<]J2ݩ8Wiw,zLaڝӅO@!y)Ny7x.97O!8+g٢]; Y|O3 ]囎m.O2.֞I`W`)q}dȒ;U{E$mMlܒly!Q"{7."/4".1/Dw7 +b".4Eot!áv˝U_jUeWcWpzOo3ZzO8T4VcqQt}!`珳0%ε2j9g[hչl E.$&iYĩ&dqTu #UG+8Q sb?:VIar"Z9D[uVqpb5Wr +UF4V:e}(Qzzz WJO}##[dz1udqy2ݑiܿex?dPCzBBI~<A~Ct*PKw-;td2ZX`;T~QZO*vz0a;/z ;Q~$ɫH/%wyQ8`oTgCs$/>]p+"ٳ'ٽA]; r뼴k=mWF3u bE[= X%Л˼6j +/c6 +ae-"֖xf [͔/qxV-v#ʊ]oee͔.r)Z ҃Z*YZ6߉X:dSx# ˉb8El,;jYXP`a y~fq L#fMs03~j{+3X;SM ]CDLlgdh&`TȴV :"c?Ȫhx =eG79߬hX`AL3#&䚰癨qFE9*?DƎ1R(3"o +w3Ҁ 7` 3YѐQH1|(aNQ`}Á` U zW40Ua@6BF2(=!A%1%tlj"$h, x֤E$@LR+Jh)Ib< k8@!Oc?kcmNVmrJ䶹8Œ.Sbp:$|a9v3,v%l3XPbO g1Yyʙ5z3&F-!XN`xu"N a eu0YFbhm4ň1($HX,/{p\ .HB6ChR]Vq(@آ7u Dme$:uGx ?x<νsL* o/lB7-Ë'ch)OOO;8O+KI%FQc\r]c-ܱ_`{`00/"[lwH޻{3of\\\^Ϣ1cQg䙫3֊仭%K`ʒ}_4+sܾ +L܉2J)ZJ3WIN9p‰#9Jf9BEknj:fdھTcS>=pHj= {;PMe[w}Ux. .ě ;Hrd[:edZe;j7iZ*֚7qVہ VID9FgNoUB\'v`nE*{b#Ѫfჲ0i*X/íi,[CB_: eOƮl.V`RnU(Xת5̫52*CW3Z`Wʙ0%4(>ʦҢᔂ@|VJ TKJ:ͅr9^d]*W@.T\(SCΗH4se*v]@MD9WL&3ǂ _bH|fMaS͘c҉%1OR6 vDp(M2'csxԇp{b8LJhB/$"01PQD(NJ aLVX(`zp +xՈV +*@PE@\$Ȃe +J" A@@Jj/cO>H-RJ$ " +ŁH ^(/ +䉄p:~/\?ϗK}9~D(ᠾT(,L6 &a1YDL;^>L* o/lB7-Ë'ch)OOO;8O+KI%FQc\rMnYa6fvo{;{7=8Gofݛ}30CFc^H4Mǽ"xi4Mya*H}l΄[q@MXB`AVy lKϘ,L (}s{ .:VH*ZBF5.wW`cKmIi2z Cƽq ŸȖ{Kqoƴa7KIޫ:f=7ܛ +"ov$E\o$bxT3"l)@NJ 5@(XYp셆H-A~`M(0`9[ok + 7  7YnF>E;u]zXAh%j?Ohj@. bZŠQZQ- U\kb䰫fZ 53rصFq̊QsC\6#dbxz#NDuֲn:."jv(sFr̕%5sLVF3ܼՖ58OK9Du)B #J~#@!0dUG*O̼gg +i Q<GH9KcYCÔ%!Y QI*ʠu"dacUOy)Ԝr *' Fd'R"3^8"=@EPI)zIQ:DR*1Bggx;0-*TGƄ΃**X֮ȣ?DDGъ +!}xZ2_{ + #-!pG?#1ħ:7q;zO7^C=%wxw4wx(P^=%-5CҞ75!߻SckPڡ47_WxcJmڱE_߬k&LʶlwQ[ֻؼƦJQ_#e"fy ljWIkݜg9Y*VV.fܝYڙ1dQCҜڝԞ<bh-OZǠ^0^4x}8 yh}?[+FF=*oOw7SW +T#H5BM*{n0pUH$](HB9 BNHP\29YbcLJYJ)+^ueŊ6/_.X1˒e˖-dz +X.]*^,f1Yb$-.ye:ip}6ۯdV?_w-Zpw/~ٺn Ϙ6;_ӛ\dra~g?>tǟG<{0y}ﰙv֚9\rF8P!=K2ɿKOm^7:o',EߡdwwwI %tBE>j{ewwizU9^:WS<9ԝ?5ڞ9Y.sfkϝ\09\89 4M933f; dczV35ȞF9T`y kq9=xVJPUԠ99P15TK,I{8; )>NĔⒿ-'}y WK Ha{Wg$ܽ,ȇR&w{+{,3f۞ . NAڬT y],&z[$iF5X1H42D ͂c/41@PE` ̼[aG){V]fSJ=&`TА%vr:T1+VMb@i\1ɆT2" 6T<ނY!S'X SuoriXX`$/0aHyVkc̐&I(HHR(iL%)oQM"y,B 9#HC 2IQYC>5,PIn T HC"d "U4W`J(ꁉzHJNQ$'ky _NK21>=1>l/rb g 6n;CpMM. :(b@#mABV51d%&+a2ZY"MF$ ZI6G}#wOS%}wOJ1PDjwhװۗI>J C_Soxx?w U_߫{>|QQϨ97GŽIąGK?mky''6?ru]w8ܼ}x}W_ڗ~k^\iFFH] 1(]aGDF8ԍPVa_ȪvI]l[xBVD9xkk@Յ̻V ;4U"Vi YRyke9:Zʛi%!UO-XX8ɐ!3oqkR腜t!$$5Bv>I;v%;cG0m^С,- 7 Glfmb{7H{62= ۽۵鱝`!;1>kzm-Iٺ#-u`ͫ|*ƕnFԆ_΄_恬]֚%.;n ]䆬^U ]yNestj\8%-v@vFXTβ )e>4o& ts+H5t8ª~sJiQg쐪2ĎWN*zʡ6qS<,t2 `l^2azٰiH-Xq2u2e\&&5q,fHQI6.߈TGa&1F )m?$PFpрQYdYFArF #"eJ=|0)jX24 @2# NEEJҹ9hDIKi)Z%(5Y'LԃdQzLj6ɂ3fh1p,r|v/uČm@\V؜tfvN!d Fʳ(F!fekbJMVd1)=E"(I@7y^gaV9סhpLjLT5&ARUjBTP%7!ܚB\ E&dqqq! qb"VhѢE&Q ~)?o&~~]`xߙC:j\~"B $ d&kMV[[dwd kq ;KX+$jhzOCw¢yyym^K_=\/}`$~pd֬Yo*5^޽Z5q{+ +e\s1PҰl^ .x90e"1i#K,^O~N#}0k<u,|LwLNֳ{wfO{3IfL>w{C9 A'3v_+gZ 8H[-oڕRVkKx\V/Hx\8 +q/1Z1[F֥cL,-Y$,tx$;b/&l /g!:92Jփp"i'Pru*UmnQr8*c-\<J:DpV0'E=6WE&9;;pqt8prJ"IRLH؈0!AHBD E +0' 9`|fdzg{"Ȟ'[\llbcc3μylL̝;w=si9s0a˿f3f6h[1m,/J8gnLGu +ۇ$fgy`ɚOU3q^WY2_b#Ddipz^Mɋ""wLʋ1a߇H' m>oE4i|hwLNų{wf`"O{ēnͨxܭ]NOkfڣ%a79Yţv7ܩ;ْ m*r#-xFIv#<ikٮM/^eWzJШ j)j+@M!]Q n'& cp6tCnQ)p:͠g:Xjv2eP0K79$(W{rCNlX|M!qnz}QLլ˰&fѝհ* }4Xd{5,.j$Silbۗ9$*!qֲXHLHk)"$F@b\IT h,) #{@(PDBMBt@I.}ŷX|t;k Z+ՂՄ}s٩(413=30w;^$9A[TPT@P5 I4\f]5Cff~jԷyg~jᤰӦsڑzIA_5*gI~\9CF R" Sl!WZj O E4Q Kr '8:w\h@w zc+'r9!@k=> rc찣RTHpH*zǩ*NpJlԻM 6  _5@6 Elm(YW? [ "(wOV%BVFZ- X䣥V.թaGXD'k⠑-].+Z2_BY$aQd1X0b0[\LP b6,b0` +=%Pjԅ) + 6Ce(u.B!z"(S V(F\3j#x*L#`bjZ_0_J_H#N*)L"ɓHkޗԤI({5Q5Q_/T0ؓŃ.<_ߞ-tA?-M0o?.GoY7o.~"otY7rzp;RH r tѺhxhQ~y2\>0/ȝs D4{nwWl-Q@H>a,}ث3|N8HE/NyӼ!3l^㐼=./38b;j\Owwۍ?ޱcZ6ȳ/1^2x''JA-gH/l,ޮGl&gxn;DRwrbzw +o$$D]oNr=^/Z 3쌸ȋuV.&Y(rvDoAa_cz 'wX76uӎN:(YNzDF vV }ƣ\mD jc0VrEv<͈:AOJ`wB.62&`D8FrЀ8XY Q"99$9[BN9]Azb-GњjFCrTH ,-bc߽C: $^ KÇٽz?,Y_f*2 B'x2]ֿOS~t=[G_S!Ɋ=B+Ck`-.$/I/742hw,AWӸ@Yx<@ Ay( }. 9W B7dO<#}&[r|R!]b@@4=o` 74zt\Ջ%oCu[ih94~jogjT~룎ʗKP먓2jrbm5!-׶P-hEGk5pT pw :(?df>^^`GͻCV< $jg"C?ڶehkHoP[D6/}5IΒ6lXz)e*.2ʠ5AAkݻP*{~jVs++B>|\e!oYXq-wSPRx4tS7C@s"\? -D,@VS$evˉ 78T_=VR ͝|RPpF0o)~pvۑ[MuGv'[^cs>E!ם=5Aް>C~Lဠ᰿ |t'&'RUG* {NIP5{a'!nGc;>'2v;ͫVsp:+ifu۾M^ލf/ P!|(ڵ+ig%OxDШmWl]Gز#i*mJ` +.lJ\rf2Nv&;LV֔y$.e.ԉYYW,rIZ^Qbp_b:QnȅYv!*y̢B;n.)pH*cKP<pC`]VQ3Opf3 +ۺ6g]0{fMw)M̉VzH~fȘkL bZ0Swm8IcM3q7 c4a?҈aȐ1#L(Bt&G7brd11"FE#rof3a#ٰY Def2a t4FVV`&lhV0$SvN)#YS d  K JW&L0218F:V'uJ:%Ajur"Ϩ1YA j~C 8o;kl^e^%ǹ<(urvaS4ڭ,v)lc-8cd59z#kVc V44}z>Fգ(RѡhZ)$Mi>A4& JRjVEQŪDƨ@b.VQttS_Qk!,[au ۑt{bIrs5MTTDz +P(H(JUQA + XI:3"{s}w8N rttFh}Bޞlٲe˖hv;~=*WO6 ^Nr [{r-rao-oތϛ?¬ŵwCM2H q^ԫr#`>\ y@={JJ? (_NidIL0>ǽY{ڳ8=^OgCbAO&ѥ]+J+e?A?vO/4PVwgiǛ& +1v҂ +3 Xp7ΚQF&`rƌ@4D8*g 8QvP1*{$aK{mG `| "qʸ߂>|h?6thsRvJ%ݻ \*(0Ң Q~Bog{)+nc.; P6*6=Y2c{2vܺۍHCtצRH骁Q7I X7'FuU흺i"oTam^ ĈŊA0Q[AQPD٨2PdKbV}ckYӑ 2F9Q gެ0̮_z +:ҍijUZV "zANv^jV24fuڄ])qTVq*U8W*V\i,W)5ū/SQx]wF M.VARIIp>bQSqqڤjڎx_}\mSiXU%jR*VEƤX8wT1G4l*gqXxj3U(6J+pNWOS:Wf%d +xh +A)P:Up*؇ + uP+'Pȗ)q*ٗ#'7[(flO;SfRW!)HȧѦHRdԒ$9D''I(Jd&HIeK88_JqRJi;%(WD/+u'P %Hf,1Z%.GImq-&1ٹU"2kG' jt7HEnɶDؖDE|Cj7ޜ-&36Dz/|mw$W7_zl/uփ~ kV{B,ԗ=3q}&YJ@NiJ!u+; LV/|L0ͪeB"&ʥUK Zc.',KC&++,"OYe@!|DX05 5 + 1BX`/ G\S\!zȧ,CAX) F` +CP^xI~"Z$kDrF>jPyk$J@`OK.VIX޾%^R/OHJ!"qyCb,Gw<|w/sxBO*\B7ĕCpx\W!_Pp!p?+׍&`r8ەFa~&Ł,& d0\i. 2N.t0q΅3GNX 9::NCPFH4b>!dooO\vlٲe|4q + Y v~9r,Xd(Pỉ`ϸO忛Xncceų֛cay>n F^:E4^Άlyupzh68T^:cb[ː߼z>Z??ܠO9_N9Wޓͫ'}T^D5m?6ѫtRt|4W,:>^u`&*Qw]D{}jՅnD(BWdӎ_=j卷 }hhN^}B;vUiA|C꜉$LΘqD@4D83t(;T1=ZbTh;Jppf!PFkD0^E!2ؕ*"JwTQ mBoC>%r4@٨`CYF2c{2vܺbMҠT +)1]5d(&" u+1SoM u$3Ñ3\ +ZmZۮm׋#9}@DA bjUl+l_ٙ;L`7}c1:x逴p+2+db$7yx昁fsP`ktƉg 4FMcNz%a'.ݣ9uQփ{A@F .£[Nr/<ē\N!7\L)9躃$&k!Z)U WZ(Ho )@Kr6z(IAYIHVg9-ȹ@{`]g8i1(~B:ZTk-%luFZs i#*4US\zV:#XGP{GĬvgC}'wX֧@^DJn.q&=i$T2(у/.̸ :/\䐘Aͳ:@mᓁYsm׃3Ӡk}_.tpB(5Y2\e|qi@j[6}s*)$R:YϙUgO;tJsade{4z9 x3v,-Q(0bO2 RYZy)d6^(n#L^J 4c8[Y 6N<#fЖpp7hs;H/ ;ql̩5: 2m% wnu␡Nr^/\N!7\L)9躃B@}vrѐk䪍^+-%9=i܈("ɠ!]@j0r.7^D:.ݴ9೐8i!d?K!ҌH[-@:KK-͹tz\CC)FC.P)UJrBϝ$EW jΞ 9u  9SNaBHQ5V)'!e*NYqRUJHHe1d. D9op9Z+!e܍5 4[/J 2 8Ud1`E:HE )t4-X^RnNRN6@I:H23+v,HY Kbi&x5Ej%%NIU{$ +K8e:9jN7nQy!)[ff{ߙ]@tP"&@, Hb」`%LL\$>; ,y~}f|91&QFrBR1ĀxThc?ԋ0 F#JGB0%zQ %EQEZT,01L(~A /2o~߰<:@A#҈0)QC4X~@T^&0Xn a9W+ +^fFt +5RdiY"2SՊTvv2@~KdTBcd&OD˓(<)&(UG(֭gy.N p6ҋs$ Mn'$I&.++സP6!'h:B1,v1z&Xf#cLڨ71 2茴^gtZC0-fhmFIiP ŐƇ;#5JJ#pR #BI$I 8L)0XB N#xI2YY +(&&&@ttOLoQQQ¢'(22RL"… .\-"rS#d?>Y.z2hy]EP'aaa'~KѼ=wg)@ڕN3mPuKq߈8u(GOL )CHzm⟁$Syu{`zV=ަo;ީnCkۀtx {EQM{~Cp{xHq{Zu˽Uwo>cu=/|ryeg^ ˻&^C%yw_:,P"w]Du^9~|D'.Ch6v`+m[aK]mYg3dϢ6 +l-goyήboυ>s'ٷ?N +`Z}ynYާiDW$,[Ss/O,,y_-M~1ډӮ~7ʱ}*V]=fs-dԎ&X aĔK!3!3x(47oN)o;PSvaUYJޤC^ySemS'\W9cOŵq)hu[SVŵvՁrK@qKҥNDqv c.I:XiG8|39Rk0E3l8ӌޟ=F|~CitrӍBDA7eS8`GNe~bn^vK;ґnQ;8yF5mpiVC[8q:^(E4$IIV,!ѡ$صn̹ND+}V3e +kcke;\W3z;bnլ@)sCo7>ګrG:v\]3V.\hk&(r-k#+QlD7&gY:-4YH3I Bp0a3p6%9BpHp,MA@ `SI{NA|UL=!$WG=s.AftO-Aut["!j ]5)d] ๣H$uV'` :q$@H{%ULp[$<" RF'b4hL8Er\pc.,$,dGSQ]r:u{V`w^jezN>V``_V@j&^RL^B!4W+j@UF ¦Pd5TlpSQ@i` +z9 +V(J +UAjau%jywBT/ 朚֥*\9fϪM:9r4T.ʓ(SqBEݑP19*\q;嘚QQʁ\aCs3QSl'!{ PHChU##yJFsJȡ,RNs SAk4۾tno|JA:,?UKS(MIrݑe'ʙ%(yY +Zqr^f 'ǹbeRcXmHxiѮd\Kc$GIa<$-. b]hE9bLN킋lTD $"tt!9 +d)A:vd]?;y vM¥;ގ~&pUǏ71~pH ۿC}`u7;pnQ pot cSfwC|#l gk-7 l\'mp "*6_ !bF@k?n Ш?FW8W2kOŚ$WMZ#bb>c N᲼\//; +c)ZRq_io(rsܜ*LAQ<SȼTAS()1 VcT.*(Q@0(FP2Ga"Q(a2*TnDJG,uQ981;;.d"'3I$1P(p÷؉4 +$"H 'x|illd\ +õ6e!f +XTl+,:+`,-,$d,[ҥKQ%,^,ZBEKpK Ekw|O}?7>>^`?i-L10?[v3^7|;jFoGLЭiߌ̆)oymóc!/s}/k{nŠz.pf<gb⮂Փ>Ws>^Yul0^{>}b63q[yѭ⾺y#pu U tUz̨vC +F4Mj\G7+3} +&(r-tmT% .8o9XYg,4!sr$N2(@f8ű(dS7"Kw Ł~cؓpdy|LAnlo-c[S 3 ƺ +Y:!nXĭTȮK$Ij Y'v\$ ZC3B+ n! j-" ڭ-:A l* ;qe L`؝4ZE !\=VѺvv[ A({ 񆀂nŊUvGumvݝK=$=v|>LXwmhJ1Ґ0f'*pAcvJ=kR>mAGZ/@ˠ +2MO.J4L&7I+8K0h,vƨӪv$\.36x\hc!܌ke!}V9h fwszX7Wi`Ӝi^QgE$|8)d1 N{^bh?)QdӇ a߸Pغ0:Z>|?wzku2H#mX~smj:krjV k@jY^+RU +-WZs[nľŹiURBDqK_VbeV +ce1zQL)TdYbZGw5ܢHZ` œKc,dEd-`,8x<6`q,p&bD  M af9J*D7„7Z!\fBބP:P/A:A"Ik.Eъ"$؃&8(D +4Rk %kj#*L#`Rj$@(^R0$/Z ???wsg޼y3O6ofܹJٙٙ͜>%#GaaĜ%Z'A~}R'B~y}Yf_ >!NhΈ<\և`?VQn\K z9.'͈R_Ɨi~ԫAzqf|xqo/LE3;oϔ.7ky|x6B :pxCzvE=#?N0Wz&o &(_7Gc L-378A[Ca7g78Ͽ4k&jnO,0t+1QSY19Q:<zmꚭtbVST^R{ԸU/$ZݰUHVa^4O 7M^4*hvEpڋS!.+'$NP+QWp7C5:w_P-s%RGrvɾ{IJоJo\8(s`W+ɼ}"vTSKƸ(s*Me8ꃤ}(B(L]PvoHޓr|;W*eL{+[bZ %is/xTFhHKS`H3iR; R%H$yŚdPk2d!vol$ 4'mj$nl%\v 4%iHu8⠱a;5fX6 գvZ}BeH!#=NjAb ;iLj,%àueVN.8L_lg06% k!Xy+7#ZYHU8Z9h\& qze0HE]CNszyHg":Nql'Yv:C3Vq'eNXk '[BtQ9HQ 4ao8 WѐSU,~D% VwXH~:^Ji0AW`=;cA/N/D;l` ++ 8Y03r]O7 ]G|0vzX\iW29l'h:6hEql-fl*ћ5:#maR`3$04F"Zc8^Fa`@j("5' 8Eb8%:|X W5t05 +"4hh@I T(U꫾꫾R~ܿ\ C_r@w-׾yh|"^D3~$/R }dE=KRC +t?OԫY_ƫ߇7O"7ߑ6 ?;N/]cT'cj~Q{4 +(obzPӣA) _=A)]oqw(WѪw@* w~c(o~xTo(Uwo;}>a:.IHptxTwSqaط#?^2؋{NE'-0pc:@41 +; UOzeӆǝ O;=8^+_:r#аO|~h2ɨ&U#*TU>V T)8"pPW"99Zo>ޕ[9{$vV< SjË;`˾&*)o.hfxost/#bBI_ &\ib (Ct';✋ Bww%`QFthq$@e2_ę: i 5,&h!:]ȂSGp4t((!u?F;R@5`},.HU:. d Y' f7K&kveU v#ۙAdΆ9Quhqp+KڿP@}w_CvgZڹO\τXm_ sP bj-|6WxmZWxC6R+<>j2o7- C-r(F]ԣf(X/ P +4e>YJUen +VQB,+9@#./qiW,j +ċKZVh` ]" P 0͒"Ob0TYJ ;SҔ:)99@SPN^| ˉȟ.oCV{/8YٳlLGDY3eڨVYs2{̝a hv)nQN"kGfȜfAdL5G`%,>b&SQSM6mYMd"`i)h ;IoDw!S!ibb1!('lB"MO0rqCRiEc OC@KDh0`88'yctz,~;JO#;XN}7qa62Q"ĦM$%M`i!) զ$0ِ%!fd8'G9WMYYLjFK? ]^?t/>(>]tL+ +L;B9e8K YO[l.ƭ:]r kv% 9vdCIbb1Mh&ڢ¤f2"iM 4iPzF:J#"uJp^I k(pXCbiZTLIrjJХF&9)$F +$!!!QY:D-qK,'!(N$W>I4^>oz %~yYs4؍111_e zޙ_zҿYcNQS6=m<ӥ?,UO:&ڳC5dz|HeG73ި}6JB/7a!" uu5/B~D &#🫞ww{`oʏ]]r<$b?]~3-pZ2X5:v+]c7ʆCKnVud҆k{6_;XtJuQ7Us[Jܫۻd5giEͧ;e[fJ2刦 T*YVb̎6lGj˶'%[ݩNI {^QfCȜ[ˬ;yb-kVKf8*0CVh׏,Y6arӮ~Z +Y8J-l5|[+`$D`^:8R2ɗ́MX=6Bul9>Ɍ æK합vwTظ3 +䞮S`p7dDɘ uyOL w"O YW7qj<ĥC\ڹC<~^qak󵞰s5n^Ե]}^^ՙj.~o<h!x!9U-PE#Ž) UPDđJA "W +\@RU_Xmה 2TD,B!q?^ݧh"o{t{EgC j@Vmhvo|MʍbDH*6򍢢 QO)*]'"J +;a|\#Dرj*m@l]+ڲ dy iO6,"_+Z#-.,ܫp  +}d#?F|hlXF bU-İQ8A96t `Bߟ1L!}3sA9t9fDl֯I~Z%}{Ue0&mtXvwMO$@z 8@ེtѫ!g}R,HIfeZL)= /r^?t/>(>]tL+ +L;B9e8K YO[l.ƭ:]r kv% 9vdCIbb1Mh&ڢ¤f2"iM 4iPzF:J#"uJp^I k(pXCbiZTLIrjJХF&9)$F +$!!!QY:D-qK,'!(.>xO}%N>q?\/AᏖ6?%^vGnz~kQkSwYc)jnOuOti/ΊcQCfǷޜ5uqQDHr$@~KUԪq֊kEJ0nh@Pck73+sυι9 0Jaxs~s5> +C'k^H?xà~j@m;bp =wUշJg8e^dô^ 9bउ~wҫ>1^pZ]PBibSsSMxGMx)mR;[?S[8b)mk(m;j1j00bTٌYmF1*1*prlQ6gr)g Ȗ=b3.Le= ;9lbO[ϰ҇iOZRFPI3N@fa<'*KDU<Ǫ(!Okmkh%zja]));qIq餖xBu8I,x>_sZc>@k VI>/)؜>Bi8Fj'sH;'XdzTr֊2մ iJ~Av$MEc^~!(=0$D5VvJò%?#^*"ɌS!szܴX QJ>,06IL'Fg-!RGHa䂸p'6LJąIFl12ZA)S"‽C_Jς+t?6L:XH|=~0ط׏|/ŧľ~. >/޿P{>E| ;}{j1j/v661C⣭B"BL}3Xh=Xdm·bM".lF!b!o\87P^ЦuwZ56ANp'1ۍ|!Am\ q79SjC u_ڇbA +\R.ѯ@NHhW AJm0R JC` LSr0Mm#өR= +T'Iu)49Eh5 +kSHM (媙)dJ_T#wF.JL'J|E~(9#H}~xEx>bDBo1&M o/!`y8iOLW[=gJU.(znjKH7QszG{ Gm E@MZj01TƬ{J +1D9fpyRL.匶1.²G,vƅI<#]عa px +҇0NiOZ!RFPIN0R:Ζ-k7SmmZ*#rK5-1XGZ»UDO ٢Y$[TWpB nX1f- *2Hge7cIsl쟲N931?,{N9zEsA>pWxOᓬ +ѕr72+ R8.`x:₝wss쨳<?."δ * [EFZ'm"1*@$]k91q@4Xz Ht{wSQQFُ0^t$Njp kȖZF [jdA Ztx@@4UK`X n^WqUyd/ux + +CyYWy! jwBpsǪ. +qC:2JYT *-b27n X|egCC<֫\we9V+Ͷc: +VŨшL.`(L +Mt fjy6Sp~C#Ry1f aBX(Xv3 Jd2-}QAҒ -&ږdpR -@аDltHؠ uݖ XIH%7`m^``ihkn>ZnÚ()[6pM$~nU}.k{@bͻDEZ#U+PG-$`.P#aNV.!^U Kt7.t.o-ҺYXH-YE,Kip Z&$a֣Eo:yZsyjh $/ ޛ \8O?W._0GΊizp`֘733XCcYX[Yhe$!l56fbbcx(2A“$dMA4:E;y3BϙxoX#20e6Zp"MZ1SA/3tQ>2ZiD˝'aQzmd>,"<ʓp]7!:mF`mXFPP-BC4]h!#%a) ++x0(&yAjY޽ ܻrSNUge{`YV.YSl'Y\6W*lR'+R^E!`)7\eۯ R9ʶ]qʆmڕK9!cπmH Mt]IMܦ!KB$^jUl9C-`69$]hM%[7\lL<ܐt!o p#<1i[4WTe];rN +>ɪ].w.z—nkCxW"|']@DQ"L1ӭ"LډS-6h KYB50Q qH DO}L$;qL<*bُU!N"DZAݑCIdK\#-5VT-b5\%0E7 x8*<:jed]%Pv,籪8wssQe,!QU̹[b)dR9.`*-YQyGn4ۂ(XIdrtqUEf +VnB[43V&JPsɳM5aBX(݌"4n[4,-ـbmIF +'5@ VKM4|7qq0EeWuwUHr16lZbc1 {tLB3B0w Ww\OnV֊i$!?wQ9 abQ=>qVXg;Tkh'M%5‰51"vR3FQ b#ʇ#[ٰ>h%YP6ĐRkBXؠ,b` !eXĠb&P_lA:@ׇB0{8} L`B zV'(7:u/3 hVCH'{qi9y>;.sFˢ@@%l9כ%R_T}LWkrO >o ^\Aq[P0^qʜ\(HؽrEnŻqlf坉Ρa08c[0[-xL֖e8XcDaa4Řlb(m4`d@a@ҔH#$AtLu4]>Z4NjZt0KK(5g"S{zD{1uJJJJD彨t'^t3Lg'%{ڢK ))]J_@OܩSm`jSa?/O ?0w#p?޹=;CHk^aw}|g^=}SzmNīGQvˇoj? d{;{?Uޞ{Roƣ^~=t?]ݖ[vKOvg=!/o:ixq}g[cz}|G7>h9q˩M@cǁN?9q(F-Oı_5}{$v.}rgǒǗ+Q.mۦZ簭u.ija06.|p`9٠݆N5gwϭzן|8Yfdf +լۧU,W|٬ZY +Ӛ%_ylqX݌'B,vb ! 8T4S86V}fNٰ-kUuPXƙa3TUQ*4LϤj&\7E5RcHņjU%0RCUOjSu㴇uFL~F"ZE.ff괘r""ZNzHq];!\=rB&|\ºtL9ǒ$% .Ao玠>;,)s ^(Ee' +qA"*1>T'wqrB }Xw)ı݉K*!ȃ[ef?y`kF|侏1lڽ^D\/;IX׊L׶5ܺZQ(C yc + kcHm\)% +z/ "6,IKx.b2^5<0:d4+z+Ġ{s: +lGCc饳XKj=. +V@պE\X k0=n +VW"ּ`+j +Swz4b.4sfOڭv +OfUs]SS83+9hR͘ćLiHhS&&㰪:ہ*pXF;lH. N厈q-GQ6rRnGKb6V(bClMNd`^VfACJ `!`%LKc7b6b@QR_FEhJ +m-0 ).`*eX}|&(D+3Z]0hdNiuXr9.3.C\ [dIb7Kr)?S/KT9!9'7x|.F xE 8٭D(B8eNvJ.CD^^DyaI86sED P0ipm|]1ۭfu{<& kK2V K1[0}bL m61h6L02 +a0 + iʀCP$eߚ88df$@L&aUֵZjq wYEU*,*EԺwB7s=)" )*8tB BPq A;7W7:WF\\\Fpvvr0ə'F&0V{' f!ppb7Z3 (y;?gK(M}+;cz=郼I0wm# œ=^vD010^mac!P =?1 b7p\u'SlE-ǂ~gƏ(z[>'ͺ&@KMYoàݬAZu7G O) +Q4ɑAO50qsW;n̋:ߚ7n;ug2 SZz.EYWKJNp(fQa*d_*S-,*6T@W%,&7z;GkКJBtBܨԊ~*Jg0=KXH=k!$fr崁UUڃ.X]>I]*5B.VJB.Zb0B." t -eHYꐟ Ib#z1 ,4B^"H摣d9nD!hycF,۩c&>ɣF +TzJ9"Qn&A#Y +<`dU +cL5:9Bn;N 8C; v? #b`E[ n!XȞL=l{1® =:Y;:+miښl0GzE̔N6Q6!ěR2u N%k=6PLIjPuD-Nd IM!Q3UjJ-֭@ւ )-yBLY-UU88%-qj +NYDeF;[! FZUB{Pq)Y-Y`0_k<Es[8_0of\97~j_ȷ_xռ_!͙%g>؜gxæ!_M4{7J7KdT)B5+2=V6dZt/c!Scdd)JMD͔h/d$Pib6DIhrtȤHQB=2=, W` +q`Ji +WCzCƨ" + [kBPKA@ XdDEoEM6*#aҒ:$,H34)IJa#u j_it~ZFe#W+5L>*ҏ)|l~rWz>T'[&)A!x3IJaK*xIq/O-bO/:{&=ؠ8& aP:](@ظ ܅B@O͝+#...#8;;[X̌#qttdc+c=؎88O? z4Ù?%yqXwptr̼tOd뮉㊹hWQf=1vlx/;" :=|\ 䘉Q;8߹ǃcƟ nםs0&mqE2y\V2@=h4'ͺqŷ&- +l@ +6h ePwz@y_=Р@zHOn{S+sA\`~zKut"n~VƒԮS@Ijυ|2ٝ(,%*U t޵4Kƨ1јd2n1* +ྂ+"tȎ+ج"&c&13&sOy*$a|}{_jܡҜAُێe=j? |vv +`~}{Ai.K{q;vi;qov&jfk$0yvpn6oн)ˉޘ~!אϔ[H\cq{ρR{kR@zDuW% HDvQtzY8Dt06;쬨v[4#EoZ,لӂ -F`6Nf|$pnY]fA: A:\0ktPv\]&`U9NznAD/(tSHX\Z*)hf +XY +5 7 @P,i8mTBNK;w2$B95'HER1fAJ)A(@ԂVP*hEXC3 N!'}{qC08]h9Å8vԡf9P`; 5ɠN؞3C;P2s lq̐( 3L  ݨggL + T\#,(/٤K1`d=$'٨N2D=M#Id3q 28#$}L3N*ѰX%蔠hMHaB"hbV!AW0FV+ng'=$&B<ѶMZAQ5S" +ںA#N*bFIcaֹ߯@V}Kߛ +Zk_Ț|&ᇮ^+_W¾] [ zF@>WC\ +?SCV-\rYTxfe>K2'9OUX>%llb.RZЋrYf- f`~P_CH& R !UчBVcjO 6Ђ AZ|Cpp bZ  ZJR s{K2 2Po!(b$M;,EZ$Aq4ş4? 4?(W54RZi}5j?_\OWZ#[ZQqSTa^bJOʃ( *0CB"CQ ].̓ϓ 3o;!t6OҜ9sxc^M0{l[f͚ͯYW3g"V3kkKf7k43#yoYj,Pc={ߖzM6o?,y~_>" %JH$?.Rou8v漫(ތ) jxBț07/GC Rsr(DvpoO/c1 xd<L?T"cE?&ȥrBl;D;xpt߿goڽK=ԻA9)w.0v8ɷӊ8IZw +X-|͠y7@FFO6(>'z8g83bե81=@tBwP2'ĉN]HKDuA@gEvvTƂ"6Vt{#&agDoqT69FmE]n Z[q&9OȺfi}-Z3! HxPwl %uu8)LQ.WkIWgqiZJ 9rbȥ\ӑq6JNC`vX'J +6@-P?WW`n/UݸFY 1*l.n, +cQDu&LfQ293T]ͽ{sV:ن:qOY{iıV+6G[hDW :[n:Ђڛ)l;) 88_[# `P)߷"hoɠjfRO2FS=uDs-]m !$Â"9J3TaI ؎123.n vz;EԕZՖD Ù85fV]䮪$(*MH<,,DsQ9F7%AYzfƬ8PiaBEl5 +ӌ."?@=MCz><+I'(s'جsHOԲ#Rt8,eZDW[֫!Z4ѭ!hJڴZЊ?jjUj֭T!֮Pa^k> BX| +V/`)8X4DKnV*q<y0l"KY%* ".cKdbH!2AQQRh 翵0DGHAL8Gb"pZ> 0#Q!+2\#SKõ0$lN2oVbPm<+t6ci ςfL 3ϰ!oPz:0Bt6MJZu7&2B4ŧ&1*D0QIe>N#FЪY:\ +C4rUvHUJ,D**O1ArRyL(\,#2<8H A0, @B0! +$@ %|Mg&DN/c^|||L:Ȕ)S3x<)g}j>Ԃgpg7K`E.t*%5A9]Ӑ 6XzN`Ajj89w2j8ٷa9*Yߜp*geEd~[q IqUSK~sS+ډ]YW#.N`C@7,tXv,LV@ Ζ+<[a/w;R.RX)$%t&]8=Ws,~WZEg1WO[8NlrIBuiz(euMc{,O̲̞eU4?y>{2\!QK9zqnN2Y FՑIaQLF=ӋaKs09dKMISĚJx%f8=|&ÍbtQ.etZiSfD,|vjǦ(Z§1F=RtF^kPFۅiJFШu*JAP*jTu"r%+ L +)BpT¤ D0p`NFBcKIp(Y"$%|IbdfB.IPBBQBPO^D"Qx(x~xKll,JDM4D#vq1ξGLL(&hhAZf_r7[ ETTTʫ>aD{oC&Z}9 ovv^4`W +zk—eϽl{јjezGy֘n hmҐ4MX˝D8ͷR_< +&p-Nw'לS{|͎"yW]c~w.["2`;%%ߓKz%[Jĉ56VY\һfjJޅSKG-gT;wawNVݓ Ǫ7ag6wLBe2iS;ʼalCߊ%̀Msg6f7fq66cͺ{b-5<@3n`Lu|EOi7A]9`9ehҥye⋇az2~=*e?kLθ)PÙa}d%:Le=t75~3YN,]_]05LU(X#OWqUVW7auU~va >zQGgֺpavSr |_>}.;U@!u{nngpbࡃh5֑*'.a'JZ`n*XmKС +sn 9%hVTw3 ٳɅGbFٵ\"QTsʵ khxj7c iJ:"V84''ʖ4T۸GlX@Zb8Zāv1Lvfz!Y5!h傰Hb>p?ͣ88p&D\9w$hl;Ԇ/-!KY3)rQD0g-a'A7͆TVbEvSm¦PvٓlddجI 3-H3̴uٌ"Nli㭂JY +JZȩrXsH aX ţAF&42]ELa?"afa&4fCQ?`0{twߙ 6Ȁ4ta4dP~V } Q `p/oЄÿ\4AT e}O͑>D>Xuӏ<*_%ֿ@_eO +hyv9$ q<2 ӋzĹzm",aNes0<4w/[#ӓ͢29,{'3Ҙs:Ȗ!5Օ +) K +qzLn\&:(ɧ!:Y Mg1YQfOc21z 2(J֠i EZ^QBUZ!2RA%U*<*D(JR!Wr"R&2II`$!E0PD I'K( Ī0]D! D Q?qqq҃XP&hF bD}mpg93ԯ9ʿe3(P^5 #/hzy/m"y^x!mZh})癯 _VD{{A^6hBsZ|~Cy֘ iyC4{ۅz4dWw#rB|;'[u.zzHqVO9aש7EwV)IV hX7T::e낎!v@w#eܾJŬ[nv@v8*b^Q(Hvp G-^Vʈ%|+'i xmwp+*?r"q9 w{1tpGd}zELZ`t`I㓼69z& L#vVH..jUPketT)%L3haDC= D=qMvJ|b~(`3Ьkd1F +3kz)ǜ8tDWB5q謡]0SNb +pDgĜ3,&FP{5M*]1bZ+A-gi\j*5ј3 4;IcjO0;jJiDJiӼQd1#YuUyvRqhCS4:S;]LqIN4:y@P.oUZƔQ czѽAG +\z 9gnWkTG/:;H@<)ʡvxfr0 +gxv4z ^StҜTܮiXVR]fvJ((}i;cJåh1$m畸M̔$a]|%`b#%Eo8[5m!4[Vcg{?&KKռhmU.HDIټQAlި"Q>VbHႊC%>PLrF7r(0Sޕ3#|8| dĆӬ_#sxo_ݻI2"|< ޞýDå@@&B%WzV-XJpJ + Sej@-Y[]\ц/!ePв`n12n⥨%F Y qT0`a?튎P4AKq BTAz+N hj!rU4|d~JJAOT(*gJ!^2d>r_wD-x$^>HaHE(b %HdBBJ!& $"Ĥ)a<\ <_L  +?GÉ4cyLgܹ̙ۜ35f6Ȝ1^^/9.^<^aϬYfe|vWQyk~Xն 9L-x W7W~_2D!*9TA򨅵J䣒Cy\Tpxmwp+*?ԂD6Jsw!R#e"2X>#bc:*vJcn'P*W@]tµ6%z& %:ĊmDZMP\Lw] EYX+cM1-aA #I@v$IXdQ҉p'-&`o")AHV@sJ0AHU +F̋UčG$ĩc2SxGq<"ա3hcHp6b@ iD[##"Bt= +"p0'ap5̎a0D +3!l3mybY3cL`HZ 4 + 6=hM3ƨ79StR*}0SzEFj0~s'HVhAj֝@R#%@PcP+TN0J9T*@ ar*FEIz2BN2B+CL9=4l$y{H~S\L:U5JȔ)S:gSsɓqeD&2LD"GL5꽱yyMJWz6;>Pq?$C|'y4a„ 8?A~>z?Bx(Orxït_(2r(ZH_Jo7ağ[;Ͽ UowmoJުfܡ%=8޶#߿S4t4n?ޢOGo:4~?Těxz=9]vp{ Ե;Ɏ{:ֹm}u׎]CzC` <:[X8.`5×jrGt`|\=<  sw^ËM.jяxQ*(w~Ey`{ETz\32?7Z|SX [Dgԏ+yVp㴨vT ,)Q5/Ʃ'ak'm(O*x_d}y .}YJaYWJx`+-*e^9"/f\9Kᬿܝ;*cúK]nA慎l^j/+`Ms' Wd$ zӌS 'q` 'E?a_ۥ Cc.Qcl8#}^ùx|>deGA鶹CNwqS=#Nv$8vI;l2@.:1#DG^ˑ}j ѷCmݎnajeV;qh NNw~dY:Z8'ѾG63X{h}+Hm,bwhBYI; PN}f`u#jYĶFDZiUVB4U< %jdM ֖4PiEŠ\̂U[jnb.bUZ"ԦB&|#h˸Uy1DYYR,PeJMTqѭlTa Qatn[uAN^j ake#p{jb`aJ-l+ zRStXk5)cV'rb\IY,Q" -[&i 4XWXB,v(QDX8OX0W?G%I JD"0otT9DRR7b^B0'N +g*eOLϬ ?9300<6 2$cİL4DqQ<:Bi?;Ź|vlolߝ.EE%j;X DbM-Z#X5*s}g؅fgTs>gfL_!; @+X@!(GD@XnZ('cnGeu\.a4٭>Fe -fK7Yhth1X4&Yk45)^gi <1ZC#uZKjZBB\T0%NJ>oBcC)p,M!G\)ir>Ԕ40K$Izp܉T*J`$&DNĊ$x'$IIDu&IJ$NW N?^~ќ}՜<Z mzq_A%ySw1\D0ekS[y֘jmW{ڐzvKCvE˭;f赴DzFD[=NGW}ޮ:[=Bs zXAp(Āw ~vS".^_/:͗;r*Y>E rA%-i.S7>8Ls!>W7$~w/j8[Ut@icv`GyٝwN{8 K3v̿}ZDWyIXeTYl-"*86k<5$Pcd}97s15\%׏}u*X`+l% +fY,Q=cd+DM\#E]>zf!dAŚʁ2ؔa&_88wҨffM緌³X?-Y /.qLX=`64lZӻYNE=hS`cOU&s9Y5 2k U*#kjFn+ul\3=Ӡ?5P8߃Ap0`=v[ꭜ牠{)DT{w;ƎpНubvU +CQ5U^>xԡJqpV[h Q«`4!lobFصF\DkiD:j54)r׶iv9U@[VR1Uqئh,9WPdzr%jRKܠi%bbb"7j!%< !HU ܀X9C62Z1.ϲR'EDR\ÇCMQ8cFB~<Ā 3 6 C'G =1d1x1Ci9{tTؠJlP^(-60_ FY SY}}X^krsm޽3z?(sY}b^ {m1n3;lb&hع t!6̰t& ٘3-0fd0kƠ7ŢBT:>Rs`UkIZKUXHj$U0IB#pM(p`1.)Ty+%-UGfd!ɲ2XN;JQl$qIBBXO<#$ IH6RPN&{ܜj)_U/QWO+菻y"rW}/VbxqNUϛzv;s6[ۚ)["w=kwne +zڐI +r+ܭ r3$FH 1Oo cyr=Э_w)ûU_ۭ701=D܂{|5q%IB@HBIۂz6 w`GPQ:X6 M]zw{uUUEV27Z֛馊 Fijǯ7Ot'Ƨ9aEܱ.1Vh'`"ee{GY,[JYw/Fʸ~~`?+%>^D +=@ bOh7bWyNV\Ō"V`[1PJh-DHZPd"yU蜅2g`ɑVQBc{)ghAƐ3d{vUGvyԁNaJw0CE:\AԁB=ɐ1 Cfwl_E";<UC)`ߓ#;[Kֱd 9C6ȋ2ul ܡ +3|0;ҧ+HOPy)Zq:ynD<; &3A+#tekhq)ZLZFTv5&-Z3)5J-OV˓%E#՘m\*^q[o2Լy󦱵ececcc-N}©s95[5[%Rs߱cK;mo_~r>\0?:xœf͚5}b?\jp=X, !o +flh> 1ox3 Yf4Dg! o͢{r7z/PjwgD&L?n +fS>Cȫ[&\>^4 +bwLڋa}^=gHHDy6z: Es= $CSi%U <pǽSB~JeHdLÝڽcgs&V>nowu4'Ƃ]@Z5VTǺ*{%P͋\{RF.@YQ;QIC?Il+NKh-DHkA0|vFvyܸVlI17e>i/g3XLvF:# v:-*-U@ +s +Ċnf[WC".6vY Ġ6wToG[jhPtT6uTEGtD]:л(mWg` n]K6][ +˜D2L&q7-f/* ( +]h$c&d2_2o5]ՠq=9ִ߭b®вvJ/|C6x5IK젰+NV)h36qA\jaQm b+($7Sra8V cq9;dఞF!Y+ 8쬳bR:j9TݘZvqdZ=ZxrEMSd5bQxNR~V2!'1KpX]%8VGВƫ] + +tUW0P9-2%4tPM-`^Đ.*^U!M* (1bOEnH9v,IK*ˣrg\ $gl,d+aIIfҞڙn4妚rRnɦ)fDdLnYIFrHf&<ʰDFDfG7青t2 x=B3' m0!H\[6h58ۦuZtadMjVimXuZƣu!~OVتCTOVJr1ȇ˂EԈKC+&\|I [$H邍q]a+T~gby\`ߥCNqa/>a?ЪzE|cE%" +abk L1@̘1ttB6:"f|'&*r!FDS ,QaQT5,_3GḞY"|)D0c΄魴U8=K̜1RPZNEObd3&)QL14<=,X `|I`ZC `YAj !CDad8"( "=!U_T?pPI +%<e`0?SUH;t|e͝;Osj̚5K0Y>>>#wD5sLD3fkkS)}fr9wƏ>`R峕??^'3<}/oM6U{+_VEWޞXY?xǑ(FܻGPx!Dw^~WFH$^>x _S/KT}>=!pvMwd%i=y~"P c~6yxV[Fŷ);1+փVVMw74J`ӛ[K{sZh<|!zhGH#?k*fKM"/aE#EN +G'8>E#cGW>Qeaί/ՠxՂ.9}p,ˋ]񲿸^U.w[y,lK,^Xӂ2AڭRHIޒ=b"ORw"n_rKfm_:rk%%t=6AfP,C8:ցt`sl@S* d|Oc; ߸ pJTdz5>o% 8.tz94`Ci`/]e]1EaClj4AaW:Y v".2K-,A\leZINK9Nٹ&;"4czӀgE7x8Ygwr1m^kxk=G8Daq<'ƊpTsV'~?+%esR9mБ0F="qV@lВkq:M8;zKX#_;řO.b`Q= {{CPĨAј; %gK.^λYwvg~^||ggQc+̀UҘa +,Q9Ą18%|FQhD `!>)7t0L$0NPGk WGh1P8@ <('xoODX[b0)[IѵQյR„-P- ;# ' {)\_+p[VńEQHܡX +y Qax3 |>'d^1V山$43Rs6q. 8:nN3b4`*l…)q- QTkiR_{j|kCS4`OK(ۓ+'hEg|sa LJѢ.GIؤ GhrAb_73|pAkfgAO8gS//Ӎ^Q<\zԉ}q|' LJ9Gwy#_;uhG]ޤ,޼݃h"n`"jE4lHڿEm=m`E;w=ĞuLRײve:ؾm50)me&زAl^IK[3B$g2ܰ/XJ\)?IŔf[Z@RV2ʅ (reu݈e:ZZdSqIMgE-vP odLW͟ጚ7ݑ0%f1wQS匛[ T9ٕfU';3?#fL@LhOj[V vD8vrUqGY8$oh 9qHMih7!y[T [a K]a5Ԝ!&Ĉ)?66X@#b.̈́oIez tĀR=_>zVG %M 6z:uzeVӢԽ{XI/n8ݻ9n]X_ +_$({"`X 8"EPA 8L+Aob9!*ĝaax3 |>'d^1V山^~$lM㣧} ڗ<<}a>>07KPy^:/ SxZ&^g#թu2NUl$IkLqsQ +&wX)gR1)dJ6rI$"J$E&e#J\\0rfH,pEB7c.L0GY]&a'$# 0  pq13 [As:0-Xhacg`!Hٛdg[`_1vlQ5o޼̚Ǩ3g1T0YZֲ\l?휹6pը]%hX8TIӻGAN,qgGQFft5Ϊ#c z?4)FQ͐?w澥^E׃r2>ӁMB }R8c +K; wS=B;7hN +b!;Щ~rhHW[+rJ<rb3RvB9b5H}MSS >9A,XW=o:8tsHuSm'8,z=BrZT):}Cҩ8 9tDơ*rb?xc>^J8UFM %ij1 H%M(` :TF^u%( )e wҐξb3"R!+ i,2CToەkB*1";Yl,2#gȢ,XaqJ +2Lo-?(K3LJ5)M1Br 9IrGN; L4@2$=I۪w(5^'I*Cbu2zHfJтh $!FCn$&i'o. 7 q35H[ +6N#2СM_@6~܆#L-[S5,b?_W|3ʨ!~Yg5!mVaW09f+nW`jBj\҈/[aV R %/ORX.CB(>*([l DLXD D\DdXDGFR!Tdec0ElXh aQIPJaP92-yiC,l[y-Gq:e,60rV`Q0h˙ :#^kS4J~@ Тk| s;@V8+Q#9' "}'>^>==@ "8Ix`NN +;` 7;dJnBwׅ ܄ \](:4_yٙ;w<+)s̙+Yf2k,f2d&N3[2e '?{pܩxZ7k<~~K^?_3f̘1-o~X|P.~<ױqF"d/cx(i^OIQt46~~6c_S?o}2]ĸ`;&h +#wkTs| {yHyzo=3w #:mI%Gwu/h:тq9O +2 d=kw4U]Z1/jt-N4ɕv1I'KFm@O N:&*z|RݕV XA8HA.Tz>/yx T%hMWlvg?RyMMݾr@YH_UMƝ]限zۦ8]JD½Bal[[MU(f{nC9V;ndZ岶 dAB'4כReR⯝4m%^4K%[5& 6%]Tфqv꣰[Jp7%Cc(z9vp7E# uRP7'b'\d& +ܭpѵZV8hg`mCW[@[YGpYr N6.6s6*,CηXsx!AVH:YXP} 9vsltt/%`C#즄ɒc@JPT)w&2J@vQ R@!U%}fE&hwCVHYYd< )˳+ׄTcDv0YeF*4EYLdZ~QfjRbl7@rr dw(+hdlOIzUPjNU$d[&%o։PRֆ%Fk 1rkt 1I;!~vRQ۠%]Aڲ.PUyuIٛ( S63,l*Qް`/ǮXRԠ=Aƨ(I>/yϘh򷼻.;*/|jk#bF 2H>a )\Rnq~z@}u"=#R= ++(//5(zSFU^A*XQ/;VXuA…ݹ?/̅"o/ q9AO!B|. +6LCyA:13X/sD?'},Gx?*sy`NoN.\y6fA ,y2а[ddgo_پ~b [pq l aUߟmۦHGm1b*b]̜ト f/$ͺynuԪ7ήrv%dEg$͸~z̒ͧM^n?O-N[ݔ\SH/3?*ʫs+͉tOF4 X7HO2r4 Nk1b`\C`|K*7VٮT1]9(طg*9WippfW݈+IM'ikx\>nUUІ\:N0< +i8Fce}sC\_WM+h!6.a(R̍ذA_BwnKj'@ZS&W/b$ZH][X1UNI9$7K94dKYNz6j,[Y8pOwU5Ձ7ŎtWa'V9fWfM#f~j{+3&'6*:"ÆgUGSƢ*?12fh3b39q`i7a&c&"Ən4v dx1̂CMqbD؈AIR1l1?3C >.:O(2NBGDSVaeZ" + 9K Ye)ˠ[Ba}KDb:\ī%?T|w8?p^Pȇ\\0b`;؁ L k|r|0W'\^E9as`Yybh&,n+b&14.悙61nuH1,v1jc[LVlHњ f`Ex4Fʤ5P& 7Ɠ׉`Y:-%ANEt0RׁfkIMCfx:,$86T8FD(1.e eJ,=3C)E  Y +E4EO(iiiƤE IIII'E$''%'%%^5qnqg!̄m&jmZomTTTPPԺ({e B7DEsΘL<jI_C/h6&YZ >=fG(ޜe6u՞N(PD)lcg$'`Y(Y ;f|~8l~`n{ 5mֵ]=϶ѵ}W{l\tel;VAnmVZ.o岲6+.B +.lhS`fEC5b  6,[e%nd9KXeoWfgܪyVןY\WYEea`FL. o.c[pRؼ%׊jkJsod̯-MRH^ဤNTwQ+SsB/rJ+ݾCݩ$6/[UzDysZI]eW{d<b o$ TQgHA+(ĵ3z + C6+( g9QHF`?( Rryvb)śTP 'H8Q/2p:w+l8Wl`TsQS8L!N"RBp'9VvЀ(=@ :D3`%{)N'ta`n=@Ż0VDI#;oq:M :ӁZIA;U[a[t$PioNPG-wm¤z3_رA`z myj@+hkؒyؒA3XZ Ѧl5k"9g(UZbCj"/ 2[#9*AK#kvkU *]++r +WGYH\lt~%"}Bg#Eeas"rt9p ag9:[&c̼YrNsgʀA1g1G4ù 4kz(mipa`7!,~6%1Pl&$ipcS'I&M +0?zblaz 6)?LKOK1ƚh!9fMSR2i2YTS)h2$'0xZ +B%HcB>qo0mBQM P0M\TL XTd "ah2JŦ0 \"(- aj*BIrTz6VQhQ*6 LdS\”*P\2$BFS\da=* + Cd`0pP(Ҡ`< +"@>K`)\$8F| 1&i" E_mx?`+goq>qvemŔiIZ,Z{= M̥E-F |_͑@פmT"MDoA?C!o3~=-ubKs є*ikJ֔qfu8f)z]Vsy=WyVhQ^Y_|u,  +kh' -s팒u''8[m謅;ŵ\Nwewfv +F>*I4`#HS{{.`"hrrwss/ysﻛ5%89y8/xqqI3ROLd!@53NWLDMuXQ_=3}q:Rj9LgC8E5^NŒiT2lmfYfZY2V Ra!!BBE@@WJͤD:LS G65qBW_ 8LCSW +,deKܤ3OYE`&+s6U3cr!vTYVTr84+*=k&a':m2CDI"(+K#ol*8,u91s1D.cGMVt3&2:#oޙC :}DSy&xQщ<]gm`1ae1G4ad'8/:9@{^#&/G@OCDR7ڗ/Ervp)F:{?d%]^&,=я'A?.ޠ(-RvDb%c$%nblߢt\nbWY+ڹwmR֯}em&&Ko +ї6P㴢o"}IRyøM>Ͻ0_u60kGa_u+4^U"o2b%sZC+Ɉr2jR#n; P뗂_QL 뗨)^LX,թV.+eeL⥬sا&f̺EA.!-^(Lh,SH&$0e"c<l 6ϗFYP@3?(*/YyJf"Lf9Zf g|?VIHyu&L(z)N <>Jtސxy`gk\5(C gEkQjW5檦\]l]1+p]P@Ҕ"" +r"Tr889::8ə0$t̙dO>ٳ'̶^fPpf͚ 3j̙3'陞陞YϠyvb7띙3fd%;~%n~~XKM6|&!/ކ< ~}{p~[Ѽ}f4#O0>< :v4#=,޿92_ce-󨈆~zL~,z; ^~U&=y쨩Qļ?Z>$r2h=_clo0&Á?TʫOw8}H/uCzY/ i^ ^iUjcrZd7<~xh5OEF끪C@Eγm%?4AyceyOzB9OJsuT^Xw1;-}SȆBT%.e?F}'\D\@etB;8+;vF4*Q)ö{B'q|oנ|kBR@G{(a;͘d!r%'nA uPT@mv­z(K&_WF:{Wِ +-JAm%lm*(Y*Gm,CEuB; xQc"0}oR8^17IFF֍D(cE} 4=lj j9LgC8E5^NŒi⦊UZȶ +rlj-cy- H3j9"|Rc88X`gK^t%k& A,tP@@`tMbC$5WXܖ57s?rv_9>ٳl+uQ δufjbndDh^g=axXY z;~u0Z'nk;`mX~ƥcX:M᜖:Z\K TCZXD5vQ^j`܁hMK(ƏTS.Iā*$ANvy(VDm`o%%kOIt߮ +@6($6:$bG"hk-EdBrQQ e!,݇;ҍQkoαŹVcl6eyEfD^I,ژjmXo*YgBd5Je1 2S.e6&"=趴$U`&Ez'kVzYI@H^ḰHJ# Uz $&XXuigAe_o@Y Az%8@-}t-Es4BOa A؂>7@̟/#~| clq(|GjgAkns^svkvccY1j1>3mfȬiѡ({tL څ(6*GM!1FTd,2"d: #Ã#d la`a06\" f ,!, lfPvzK٥ 16`%SfZ4QRZt6A0(e +2rzTAr 0.H/G i0s/(@ _ѨdVKh`fU~jxTބ 01b40Tya +T^)S&O)gҔSDnI&+8I%8q &&:?~yxxp|'g,cX2x ?s:a9qܸ Wϒ43}4F1cƌy~##A"D|0mWC3޻ӝɝ#"G`໰Ca[f97Mݴ~1'aM-Yv>#}}ߊykN)owvUw7<)|zm'r V=i2t:^CA7ѰǗÞ&N`oSQ٠х!YG K{q6\t8+=υ:N5M.p?awsN@ LA5;_q=UNƾ/`; %q6:Ƚyf Fg NqBd,S"y$Z'g XqƵEo926}}h/HzrBB6FuWs6˕q欹|ԕ,NJwk&rsluw']t%B=/QNjF^⥦sQ.TWRgHշ]k^ߜd}}䨔Ѣ+`z:h'DwEN2*k m;0q;v+Q;p}E|q1Y%u0L e:QW3u5N72S j`u40XVk8ĺ `cG7 ZhQs-0Աj좦,q#a iBs~jʥU4`58PE9ٿТ};(m'v۹pXV=$}*lIT\+6'ۋ#Y +mMVDE(7C,H1TGCqC1fd 0Bm\ g^Zd +PH8|E d&9@ h + ҁ6 ^0.a;HC$S ʣCno/ߛˌ"' ё` +B PAQپlYȀ7a?3 s2`> `,OeL,ӞIzW4KI}|>({|ѣGwקy1΋qQp'wǡx[orީ׭٢^9>k Z_s8[wB/|1Nw[P7P|A~jEo ~~~fq?{0KԫQwO1ԏް}O!ܣ~WFsĸ Q{:P?49Tc^ܶ%VKm#K(yd<2&?NNS!vGͽ?Q T/r򧗏knemijk||!hy'Y+^ FΪkVD ghKh_ފ1-o ++ob-{tS҇Y!`K\mܿywmޗc ~!ւυC #BLz8٬YqW΄M`Mrh:k s&^.cR3}bCmمS![Y9 +dϻ%H7gݝ_q4ɒ%G!r#Av;:IQ_PtRWN2T'ĥctg0Qv#as|0#,:_K:w"-A;[$uF>@ 0INcDKwgLCcv3]tBGv2;avPi vhnle8[h.t`3Eoro;(Ğ$bw>!!T.ٱdB׺m[CVS*-HbsUmZHbJWbnħ+HĆ +W-sƭ)ozsm QĉXXA\d8*hs&b5ETsZ>AC-ksr̒vYv3I-aG,n-(qO+KnTbV{RX&[9؈]6}%=W67m),B͢&58ƈ#F Lx;KG#'3~Tq#MG;܀Sڹ%zQu1HVlĢQE:Έ:<ʀ +b1c%M!F)."V +viA*@AY +Hi${B 4V ^0*zgPN9Ks<nF؛ eF|,O8ʡ#0DN Ą:Ǐd(E7#~˗|_sfy`/pfr<`L21n&1Erfc"mn!J@#38-M 3ڭB!bmB:)ldY`,Fmԛ4ƶDTQU:ZШu" hjV@#4pRMj\P%B(L!WdrBbd8Ft,L%!K%4IT(5=M"&%-WYpC$ ԐI }v-vWcC *vQ = +EbwȄ;IH7;;g^#X)@`!6vv([ZllltX[[l4XYYYHXB KPXc9c Y2ʂ,- ji Ƅ[\S,ƣlAq"jA}.ENi y?Aлg԰nHIGqA1=b?G>O!o g !Ţ >eP>ިdT8Z9[ċ~k!xǚ^ S$k{F?U?5;Lx;N؄J^w8$C ^p\ZPik =5yc=9/:jaU5T7!%?n@e'wՑGtH2gxPqWvAB;Q?t\ɠIGmW鑺BWEJ6WRllm[m2qSGHag}CnX7Ͳ9ُ=lAAL: hWS70*ܠ:m)(^ t*+ +F-58R-'{NV +J6XYJL +ǚ+]u4˵W( M +e8P>2%VI">kFzǮS`gqQPԜM|ZNJq-\uJUyRq*Nʏ;}ʎ9Q^KJ)Εt=,Eȵ{QiqPHQSEr' eNr~ -/8'(ɕ&[Jq([`ցYEYbLt$҉{DVn<KLS2pI;ggtIid{SIQN҈vvnaX6!E~4"R +(R镼YIQ`Pڱ^}:|hw>jӷƗ%m\Ù%ڰ8_;k뻯(M7<]xQʓbeJc;aWK/,῞/blU[ࡵHk}^+%pVp}!˗/ +vzyxyzxz{\<pwvsӸ8n<7+ύsqՇL8Plg `\36 cs  3rtbQ8XLJ: CbccښdA^^n^>rx{SFx] 7Ww8΄ 0w#1b.09Αɝ0 r'QIhGK@"@(a{O` +ނ?-A;7g… m2?3?3?s-p02vV; %r}<+͛7+l)u6oG|}>Q>]Q$ln.s0ŝ~~N~y,G!6$b6;D0&y~\.p\_ֿ/ ?&i:i{Xyo=G CBWwUq%=_ԄlFj\{}W^s|}$ jbs#?dFM탺ͅOǛ_OxφxOxO=k6j8md!^ANCѓkRE +Z8WdvdaӐGC 'ryp8⇁bTsFF˜Jcrd޿)7:qb9!H,}vt@rR\0!1K}(e0N۝I9Lovou nt _:s:Lڥd{GD֚v v 7Rv!I;;a1M =Wjy1W9 #ph^~X%%7{Y(Qϓ6%׺)c6E[dC]b$ v0"1b0Z@ + 4o9eb3R^R.9}3M0NoLztRovu2Ys̬ϰ6k;`m5,z$hfl[TM P fqY1Ce8P]-YS[I4~l98]A"j) !e$:qP'Q8C-+D-!RU(YWD!䓈C: eyZ3iru-$[HCg!Lt +34t^F&R5.i وe'f$j$e%*YFةӯ(41U, TWW5KtC7j ..*%kE}AcF(&nhdI2d9̭UTW8xy{}o*-c1@fe8KnPZ>LZNHFKT+hT +&SUBIJ(@!Q$ϟ}>aۚ2*??7\#O8G1?^f₈ }LNjPDf17D;0޽pHa z&~۰SߞYciX( oO,~}:LBP8 GկSD<\wGꍿ<$CAEf$*ԙpqQ<4""aXB +Ɵ{uD x_2^h?W0^^Go=ڨ7؛{Ioz"|u_D$oooo%{ug}Ϯi~zu/In.3>oɣ+aKmw%fME}_6;.6mXpˍ ~yֱ^}4^t rk>h20?_F}Ls-k} ^X\PFDZZˣ XPe̟ h8W0GãU?[QW vb5!.W z*L0T5R 3TfMW +fi +eLUa~R?DP,V!*d@i1HB9Ǵ)MOT9s8'`~-ȕ1&ZD('HS0 +sTHA)٬DFADHOf>2i".p3^|#X3I5JLfZ2ʰ-tx, pR.q{93H 34WTtZ'f{ -AR05&-0 n<!͜ӧRF* d] +e6%ROC)!jNcߢ8+vwAQH[,QQ@0c +b͵&*j,EјbK3gY~39;{o$ mp]V7 ܜapZf[\Go5۸tlX`Gmԛ4F :Z3tZC_)=LQxhhpJˡaZTJ5T` +QJ0@0#G?dH2D!K#d\aR>PY@/\D&&T2BIhhh/!!!.tC e*|@ $@NA#a!-{ߜ5IIeG[* `(||,ÓQA:de _ : B5%!}K.xQĽk)NЛDZL CG1G"v>aE睢P1D= }Rt9=Bp6X;z+:Df4pW9󎨻)!8+ !/E烁CH{YKDy^ol:m-u6=EK]eޒۧrdުXynO(9ndXʢ@ d6d$ jOdJ_הQ wtҹKdRTdνZ2h1lVUIeôYWJQfWͬ*ʘ]sl$[Yr}߸^?tV܏g8+Wv#At9Ez#] ^S +RUUNr Tq/"b)!r˅R凲=c\ l1-"QVyvꈸCd$XN~Oىrb?G*K!"d!)r(MŻ|hNב^ޞ<=C-^v`e +Ëp`=lreF7[^;6nA675%,]ezc[ro s\lZ1lj2 +: +׸X +V;1؆l.ʎpt˲㠲e91t.|r'uxr[̎rb,upa(^Nδ1. *β88cB[m6_[9좖̳dε +Z<ذ>[4"*+Pg-i`y3,̝n5Ko6{ s/M jٯ=fL5Ѧn!/XM6|o=I:2ue$ 5B'j1ʴ4* |BѩcX*4}2NLԄN`&&8ظqnd8t8R6DSڔ1'6-a4,&51%5L󥤤Q_Zrdrb +% JD&ų#cGr$¼'!;>:sEcb#aX2#$3=X=`y#HJI>HA=v/~xFM18-6.'hr9 6jq,&1VH4&ڨ7i z3 QtF^gT鴆Rj5zB +jC4=PRjTP 8 09)`(`(G"X9Je9,B&e Fȸ"¥|$a^($LLd6P f%$88D cB#@ $~$S0xP(4|X,hKYњOmi4YD*OF ZK_RΫ%A\?5)Nл}gqFl7c +A}rHv ׻̫)F6P/C{_H :ؤu..`]g,SoMyuLodf©mu֣rxqߗo8pp(Gjv/۽쟲2;d/5||ݟ{0,~i/I)AǦͼ%:JtcɳY/RjzR/0hЊ 4C֊ZXU&-Ɖ烌guFS5'WamqűK>D޼bx^"fe|{Y-:׋V}ǃgw^vQ_aĴ{v]^[?%qLp0Z3PD +x?xvН@Np:22 +FF"aHZDh$wlvXNoc!BB8Ba8E=r[`j[v2$`"&C8a~A 4Hj@#g'X@#ƨOUb끄Xc-QkKi wN"ģݸhK%!ne)Cm* Gy7,m8@+!@-fj5$&@68z 5Kw=raUGPԓ:tҡ%WP[ܮ!imՄEk0C*-5 $xd +adP*ꮨQeUS?v/3ewg˲}gvfaB[XVr, BUn,ĖXKT,丼b䊹ffyAwzy>g&Λ$$?NzuxG 6R:@P`+).B$dbdo3):[HȞf«&#5 H[m?Z$j ;j'ىZ*jD +qVCS_gF h{-cb +S]GaT8Z#_@y:Hyye9ZVMQ#xREЉ*ܬdkR3X^fEmbf#']-M54$U6 +vJ:$)E5 i)k^m ~֭VJ]T ,5Y!c0$㓽KSVK&C|d!]\1d>˵I:ib71JHaaIV[T5֞pݑIc'rXa. +q,XgܘN3sp,NN%Z9 sE4mPQ6X5 + 21HG n$xFkj6d0GbXxL +ׅS0)L&( EB&#ŠLOHIH(%Ci8A2: J +ѪuB R)YjP`hJHRP`e"X `A^A@8A||qIq$g09.D*a#YLGY"YZtDȢ%2tKD-ZX̂E "Y`W_?o<߰eg<lf3idDZϼqsY8w\9Ӎ>*| UQWsxYfz?7)@f׷ѿϑ/#gd!T~~9=?A~~>-1-?>B~z63辩M4)XfKKLHgæwOwS]zX'F~2N%yN#8b!1==3didt8~w Ñ_NnxvB3c;_^gjmbt7at5|{wPO#ƄwQ]^`Տxu|ܱCBnq MaVͳA!Y\cU}}嵽N{x_\euT ׎*ɇ6Tٓ+]/vv|~ R" h=k<h(|xW*xp@(!y s3UpW msWz4 eT)Vx\Q͓B^`oAHn^>+c7qNƍ>N`W.+};/sdՁh흋fكK&eJzIr2)좸O/11;$Λd}!L)qh)jt㬉ff҂X21NѢ#Q3J w$0OR/-b%MO˅. +a8Ny?!1zZRoJv0-;}AwBɧ Ar^~J޳,KC:)A';ow X;6:N@rС„@[IQv$!v${IAMBB4^u4h|XO@S!?Z$j ;j'ىZ*jD +@u8x 2=)5u%AۋxmP8GuySUc zAs+Ѳmq[-NTf5 [U~25o-7C-*o3U9jmiI6'ި!TeW֩&H M)*S'r6Uz5S[Z!(uU0#RPbdGʊ`;NZ,eYNVJ95UIjDoՊ4[gKHлr^̲$ZݶD[cYx治{9s3AؽYy^qg0.v28&f1<4F]V7iqEB0;hcV3Og1Yqf/dcN7LcqzAae *#]YtШ30h(*G#5mRMjBP !B0E*`KNH@*KRӤij_rjGʮK%$I$I`I$&&b%$$$X ...M wV4DM4$6.|=9ĘI};:liaޚJ E/%$>@WIk*Dh[^jm +׈!/$'Mk?[}7 xoxsށ -wZl jwNy 1ngv #)ȅt7 PpG ϟp^u'lꏫΐvgWA'u6+&飫+vGWlҧ΃k&놀'ugi/.Y/=wKᄉ~Ϛƽ^?RںvVBA炚UC,h: TblǙ&`뼦3͐!9 lX?q:'PXͳ +qrL9Sgl#R+ŜI`rEĺ_?`gsqc73¾Yc.5>`f^ tΨs{#L|f& 923Ԏ OWqj+CNEx},WQ__vaiva}r?Q'W;wVboI^̒bOqaogRv_c;0/ -Q$0(e +a@|&?APy<07ճ3'+וys0|Gv&,ۑxa0[{8lZ4ca\>3dpLnbxh6n⊄av:gf>bhF _ Ɯn&Ơ3ZF5@'DЫzUF-LQg` PjU:FjjT)ՄRB*(\A)a2T$(!'#&T&!I)4)$%9]l"J"I(IxILLD$$$$$ qlb1bbcc?J4DM4$6.|=9ĘI}:Qݟ|Kohm.q_Ūn0AQ ! +Q~|2;Hu֦ܮ@-;VOFw y!9xo^Q] w`x!;.^9. ;wzDKyu;Y/| +r!/n1M+>ԟ7`Bg7l!BsaOai]5[㪵3]_GpafzanAAhb6YMÃ>3 reOK`F*YMv_ٮz*zl||~Sg' ƕj1B|B*t {(w"d1R^R7=Rػ[@7n"wrfl_r[ |+Tv 0=vp}7v} s'N;;R!;>s|}9YH|Zn۶ɭ)lU iBj!a_A[<-> Weoo0%'tf+4pgHfPJevSЦ(38`#`<  Al @? [XφS4ޜ~^5~^lj_O? ʇE)l +/y1SIѢ 5E + ` +M#ǹepQgT5ORQ +L*&C9J];R6{Wg7.v.NNnl 3ylج98`/u@سav6vZYKl؄̚MLab X-H(B+!N`iZkNbZKjP:^k[|l1R5k֘S֬^UfU\JJJ->'b`ڵ~*~C3Aoym]bŊAg4g#"]tß'E}wVAѭ#H^?æa=@AL~~c^O~} {2Qo@~c~yC{!?ty4 7{Db>??X{~k "S^'?#w]|HܟB(hi^N)V/(>NʗB^i?/ՂY +ȟOHM9@flfR*PfGV̤+s2Y/ǥ[OdݔJ6fF5}cITo//wzj u}ep~`NPyH?)_7Tp(g/P( ]e .\y~{*aysg!8͖q~&H7$Np([d;[1-yHx+8r2ޜ0)~1/v3[nܭ&HD6#fҘ=ȌGe8H7P &WHDV%DWB"*{ݥX "6b:9P6ԪX;!nhx\y Q5y@ &ߌC~@pǩU+'9u%yu#:kQCBn.E*Sk%!j WTp;{^2YH{^QTTT@E󌂊&  MQ_y39g#z_kf]4gXt+gJ9MHq0ѺYy!N~ +UGDg}&^ +jĴ8@H# 8TOfIup'C%5%jj*ZPcl{vW#PaWN#v!Ā# _`IĒѦ"cبX`  DK,b-bCyACj6?e +B-Eڋ-"#a종x)"!" E CP b d \@!B a`. `@0 =X6ER4m©Y#'DXð(?ի 48=OpVZy~<W)G {b}<|ܽ|?L-K'񄑞7̓pS!B`$(!+%œ]dy2g\y2!N:yJ4 6ٳg#f9s& L>}Rb*b*b1}iei1i.f͚߲xs_SoxlݓSLi{ϏQh"]#"&qs$o~Rn]Čz8z, ~x0QԟcWÐa; +WPM_=F/ !#7>g{?ȁBw pRxod39!糘߿>)G7~:BH\7$/2~g 5`t|zq(Yԯ#z!9rtZWEl^Ӳoe/_oeρ3ٓ/;~Utfo\xOoa--ռF4sFG ΣdgÌ 0~'nL5U7^;vvѡΪkǁѡƮX +_jq|* V6fR:zvjVG !%VAB٬W M/G|>`FX {xw[DCȗ]"sʹʾuVul-PT2T"nUd ISm4^vo_(\zu[&_;BH$ۆlz2 ^͗;1YIǭ2-2xIai[/u&\9r/\3t$q!Yٵ~0>CK~4t_!͕^:!}&>1J\qݬKMK8AXљmI qŘ;9ė'{VYйNvV~7!gXt+gJ9MHq0ѺYy!N~ +HspD>ql/hkda{bZvCma$H=$P=M`%-( ;TgF1;{hAFF2]idCA\9UfDԗpE} xQbuzɫ)Sbͪ B= ,騊|-DgSUP\LQcJg騒laA򊳴‚Rm)ȢL*Кki: +CS,/E&kxd6 +EђR26IjQi*@C&?ZJJR&6q*mv6oTIڠ_KXZ"6V(ia9Htp}t sp`刂޷x"x߷!QAЈb6h%gM6V 3Pt7d7gު[E,,R Z0G"Qg0TH*y(&?[ˍ+%9 +IvU͚emqd0gͰRf8x  LfR&{ $g3S@&mgFjgtO:JKH rTJ. JfSSPL?CI^(I@"0he|6ˋ&8=<,nmq n92X +3dpv!\z`9ڌ4`Ru!.3JmsTR5p)t18ҡb5*-RRjQp&$ZP(hEjb(ylGX*&:#E!bb"J-SBI)R"IP| LJ@RL!LpMgiclS2ݩw95eɓ 5 D`4q 5:5kkk 5i; ?iʀ߄LxTE&=׾FI7nܸKN)9"J7IQGڠSAO_O#oO?y+/D E}A?H̓g^:%)ɂ-x|4 ;U f!o_H3o>EsұoM4<1E??6! A(773Cx) B$?|G'&GV+/=;xeoGKuwcEOXnw_W˞&W _w\|sͭF?C]~u'@˻5}w詯}X_.ysaU/m}C^܅" NWvN#N!NVvB,:8*{~j˗ʞ}x08D*7?i_%On ?w6hM_ :+ P;7}֎iCȆ]ؾk갢GW*Ķu=@n*>Q5Z-y0Ѓ^WQ>`1w0ay+F" LICd!j:.cs!bEVv]ԭvf׍&tFjoc.3kYAW uݷePĥPϰS$ `eǙA`Oi>4cc pN\8¢d!Ch0KbdtP[YGcN٩}6^'ZsbMsX1v0GwZ L-EauJar؈5VlPmUV̾m%foȰ=[-( +]a浫Dbj-e"jyīDU(TU BUn6ں4LF#oV33 *[oʊԖu!E΄)]kP%kpkr +ۼƀ""MTڸJG6Г7uez-r}5u#ZH;dnЪB-b!nyNԲZQKk0Kqs,. tQ-D@ +p |1@Aˏ?[E jessDAnPL|,5U&0G{kds\ &ssTA3sdJOgޙ=;˛ +iYYw L$deg`\b2IPGZbʕsSyHv$RP$o2$l0a.e:|6ˋ&8=b,nGrxq p aӐD8 壣- r08i>ƥӚVEoUu!.3JmsTR5p)t18ҡb5*6,Fƪp`Rc +u"N5ZQqJw'hyx<3;5͒ z<2d%qq838@YLp{D Wq]_yM5Jc䯾8'''SFS_ 7e]dHK̘z=iDi7]Q r8;A"uȼ2E 1\/; P 8 +l3O6<}rSI[cVՈ(`~iQ~V??  +Xb<^YвFT5yݍezRgw֕7ho,.e+3{j +n(e*+RSu(bwg}nSCណ&̮z|FFg|vPG=$^G; 9KmvVh^E= Cm-[wu7K2/2  h16ܿˆ.R5^d$W$Cvm,%i(KZs"crv6ت2Ě:յ-jJ6C6!no--1[YSbMkks֔Vϡn^3 +M)A`j%\Te_cNPE h:Vx ^Q2c/"VFE&`V\9ҀݮsUnQF^tm@\+#KtUE:R,zJn.SKuxb y:6̖ʳVyFUROkVC q{r zDIEgS) +/>NjN`Xq +Vd1-Yx\ +Q6՚?f)ĹCZw搆SA5E>a9,jĩ}ɽjT'h8߭&gkY4Qǁ<"dj{gU,Ҟijv`A2sڗ$)*Ğd;I+䔙ZL +cCEmk[\3FLiS 2yS0sr& +~6!ףvl$czpkm[HZh[IؖՁ}A yie ar@AlXH#m `?jҀAK. V/AZ,kV,G,_ Cysl8m<`\|<|\o-df ;-/D gplp~B 4% x(^&b̟-K|3ۏ:Ax d,}Y1YQqQë/¾4>3|2#|TD3"M>:-֞i!SchSm1MNALa Xd>&*C t"TtBk f1"Cc'u #B"Q"P:pXp> q !Di` @ +RjVE: +4AZ.jM- 8P-SA +`,(M槐q P 0/?XC* C-?G&*/L%m)xxAT,%$b).Il!D$b$D0"1LBf)#<64<`<cqwssc&Lo8W#38g1q-\e<8n.~#7ZϏ1✜N 1XwLYŌݓFJO-7]Q r8;1E:uȼ2E 1R/;G W^> ـs? cSX†'cjVU5j~}E0Z~iQ~V?? ?~zu ^CajQ~h:m}n^GNqVwMebK@ކʌ[Uy +>ӝb{:-2gt74w-誧fWgdt1Χj-:`iuVg`ܔg5gWN8Ic@NATTܤĨ'r (r *(gވbj0٪K{fkzLMmz1j5gCEOoUTӟ ʌeRP쭒ԙAV1(ez(eF˺B4ֻh.Lt;݄{7Ih "5C!Di(4|4O +xi'jbv +P mDJ +k }IA\Qw#j ͢'(5 1*t^!:W{-N#5ݣBu*H[-i9HZ BW +qqs3_TNX5*E%\-Yٕb%" ^VrK8R]T]T +e**.(%<_=rqiR9b!E + t!]U)_R@ +2 9_H0|W^]吼TOA)2HN\\WV"'3)#C)N-s3ZZ$,,%Æ&f%ua3n h `YRHi7̔SR;sM,=!]љ%Ǥ``_J>*t+.K9q ]t&;$E=,Arˢ.cΨ'#᎖4kz &Y>0}2KO})}QO燇3$ﶰ03a!i>{wٺ'dn_(=ߵ=tk({W]^;;MQضc *?G m~"r@^?H'D\> ϭV̛mLET΢*wRɠ@n# `2B*ܕ\RiO7M)/qxqɸݥ|IܹB%. )$aٻl88?WS윝\899:R[@6N<Mp9r80%=fgkؙو!$c6 `E0sX#"a%F@VV\llaIWdaAXަM@7a :֙ce-kYZbF6|A>1X?>mF:uP۟ |dk֬Y_ !vA &|hQmx7?ǻWfq$6׻Wë9KU휁/`=ߪ3-51BAx}J}H/'oo"5:W՟gbZxBL+,;-c ot7Rf:is wiG;h-sZ -/'Z_Of`~D/o~yMFWwY 9s#z5V+:P]aF-lUV F'2O{a=i5SZ\$dOؘF{prcۀށ&ݻIeD,PhiN2AN" +(A2&ytUA(BA\(m&8(HO)t5f(5 1*t^!:¤Z SAj)Hk ARM-Uz4W 7W0%MIe8k(U.)! 8jʮ+y)h8\9B%V/S_),tar!0#x$ArQP f*u[uz=lxntuU?aշIuh iSamZӪE jV1h0>ۚ(Q1mmPR67!*H{ +}6*AB*jZd J^-U +Hs +kTjPICU}Sp+cu%JX1Dw"9VU$0Ze ]E$,ϗ`<)OJs% RKq$Ê|PPa +232$׋Ѽ Xz b^9i"H`Z,Y"dZf$dH6b$-E.9xZ֚`8%cM_@IO iI~hz?F[&)IA@Ϥ"U^+WJUJPЛCma+H +,vCn5$Ms1!FxJxf`Ƹ!6:.,k<iB1,9XS4Haa!4Bp5LsIc +aЛ4b +`S8H )B 6Bz"i !Pt )&H*D00.ȵlDjI&VJ*:H)Q͐1)Ar))H& eL8"@bop/Fv".>A>As3P/x }B "b / E06^OB-{,dr[f22!drs#9iҥ 7N[d m1q%͇{YYYy˔ŋ\.2Ӣ%!qc|_0g2ߓ ,1 [@"!y!pڿzf~ex4//ES'yû@Ϗ?_~~v!<T^)hN`}w|!op/OTԟ*x98\x|,?|+DK~;w'&//x9p7uu7Q:x|Aږ'Sڟ]h:>||MZˋHc/.8>B;¦dRQZ^4?rpe~>Jã1({X=paw2?ORs\/Jͽ{tѪ&uU= T91JlU9M23ʹߏvph4S[oOZi%OZhŷj5Bpl/B`:dx1gC{{tZ.ةCw Hv-:tWRhft]Zץaw0[ jȮ-jXvV}h_]͠z7٠=m*M i@[YŠᵭIF,[+ jHG +^TFZN +ZR4WJ% +Ŝ4Y՗X:R9VWj3Jd0pG)C aUEr! U@(UH!HYA\ dR#sdXQ +*̒UAxFdZz1]/!]+'M^ [+%+ULL2&"AiNIiىNYodC(HZR.1%aAµIީN ! J̑$$kD`R +30'q&Xy!0aM&&g&`sG.0,$$%88`// .]@cG߷;w$I?tS6]R_-i$0otw&w:[u?:[z{ۜo ͛f`iGIo [L/<> ``=?_SC:l^5ύF>"!Gק OE?#=0{ {UzY.39dͳ(]qTAG]EA2FەUm~zccsu򒶺m{j_t)i+c[vꖫ݊^;r{`ՓlEOjax-xtQ?톭xp]n;vɿ~;tnӶ V Ƴ߱-o6m-?Y y[3lk4cS;?V#>m[Gέjɢ7{:^Rcc\UϽq#sckU2sV-S[ ,}Xc"e.k+̸R2yK*k%o9O35wZܩV -yTwԱ8EyuGq㔭{w$]`C\vqK>]yu ;_Es:WI1ӎ8WiC+!jl)Gh^Si6ωvb?/`8ʆ8ԎgCT쵲мPxn~t #vR2aGvP|ۭ.YzlXm +bf ػbFhA`Fkεfbz b:3ܾ̅ضDXKl_cmj3 Rlbx*3敦^69m,4̈&ĺ^8iBZk@UˍV.3pb)ZTDx,֓䊅t(x_Gr% cyFe󵈥4%sxhA.a3>͟1Um51g*jW&m4b7*ԿսL tq=-yDkK*75qD엷!msB24oCA ś'^?,GCǀ1o!@Iz//Ma4"~n4z` DIp<pWW`znVY赪wQAEA3֠+*(;EY(*b@`'bb{ew󪨮{;{݄ྞ$0a,=_ʫfJf +ǚ^M7U CKPwjT k ^ ֪5y=ؿ-\^ˁj*~빳}ʜ!3WQ/\ə~~2KU\'c,s~YƓn ZP'癤=VC%9TT;ldLʄ*6$Qi6TN=:U]@o7< W'~h=1FshYPpء؇ͨ&(ӢTT(%ZS [C:i$$@G5ucq} Ƞ p/wuʸRlCe3f7&860g{8P+tVU_ 1SRh&>^oу&¨F%&%`ـA٠'))ԵoQmѽ[8Ek5WuZpotvn+HeepRō ]/3&>'nnol/Ylf5k֬?/c2~ +ܰ^#dAA~w@6\_c~7oX2:?kenzIܙ1y dO3*Xf#>)c7~xçϹl THxZ\- şoܹ7X'VƇq^O-LʭNH,t08 +=fΕ7Ώ潚ZT C KPwjT ՝+IEkUZO*A: RUUM >Te t͐ޫ@93=/CYϺIzPg>*ɘ,˜_[V)씦?8o@Ic5tN'uu6uu&eB 4MQxP'q*a.T7֢ +tN~ӚruGZּ-FsD6" ,&CQ1MP:E4BZ)i@*DkuH!4kj:ұq}i Ȑ p/guʸRlCe3f7&860oSXj._ve#)喙;3*EM&T" (+"^ֵll]l?%gg/yxy"[_~˪cq vCۊdt::aS Vĩv [X)432ZVA + jJi q"A!ӈ(Qd"Ҳ (FTRDE*`U[y\%hU)Di{IIVqމX֕X __Zǯ1ik8j\[UQ+V_ Y Dq᫂">V-_DEWF1?wEtLpX .0&R<^DDst@)Ⴀ%сQQQp5x˕X-Y[]*#BA5<$ƅS]`BPD_+ +A~0*7H9b`&fc)5Z4`PFƛ6XxQ>άۤ SKTCߟR%7~Uo(Q͓wB* T2Ϗ(P57`?> @! )x_ @lE|y}+o_s¿` +4*{w_X4J^ݦiw)UI5(Qثd EiP? %# +TwP^5=e|wqox?\s9Jv)Vw{=%O{ڳ^5t}{'D{-Y/F;t>i.}4=?k-|2֚|גd\Yx9Da"7<5@EƎS +2d|3ZKWfe?se;] p%"Η)Oʧo %:k(%'w}WA{ B +x{Ir2 \HN•^XK},9.};/θ˘q3 *|GT Eζda$bL\`hh/E{ G[u +mMmlÞcuCkBFð ÁYarr2dѨ<8VpiA\. 0|e,⫓8*c>1ˢNpX+\/pt[5g8LH'`xH;QuV9F4jZ96CY 4s&VFjL.[Hp0812jRՔA-HP8@0 +Ud!0\T]@E4 *$hUo&+-WGS\%hU)Di-%&YF@&(0# +Qi&D~QQ^t3"/Ť*7وI6M;}Y{}dveoNܚ8 ڂ@2319'I $@ A[[9}WQQIUDmkvmLo y>wz5\Śj5T0FkQCWj`Ua-RB!+PC+pT7GɅjg4VS 2*U W@+g)PE ΅|krHLX)+K`8F{KHiQ2JhFYcH*LEdP"d2e)}3?ͪ)\v; +<ßOӭN!~F~ߝ 1,y!^o@F+'fx!fs]g89iFcgYfÓܬ4W%ir\ #!N٭esdl KimiY3A%.dQ\ hi)>4&61(=R7HA4B6*=* NIHnK \. +WIU*T\)|d Ir(Kœ +Ʌ$HSd)d髊ONJISx$ H9@h0$1>MOD% BP KxC% &F#N,B8q"PL\,drlLWtX>Qc a:`͈EGEEK{NT;8qbm7F3g<}OOPk;==G<<u.Vs o56[YMl᱙xog9hp#Тׇۧc,u +vw-`͂/O3V}SmU'+ꮝ``^=rg`i͕cV>՗{hǖT]v%4Rw5bW/4Vv3 h,XȚ;0dAAe>j`w]WolC|{]#>%D\==*)r' KH1I(('H)anj =QS+V@ʊHΠwqIiQe)!R$D( e̚!g`%2酚 + ttt4O[|)ܩf_N*]~Q|) ?$[}^bޜ<%/ c䙽 ;`ڽܬ\s ''-1y 7qxvb8MN dtd:y8)",v,-dc36--rBuZ%!)  SqiA2K%Uj>J+;%$$#n@Q|[ DAA .V1PP)2@pj=rM }=(fJwxr)|r_,z+d> +xI>0\9)za|.DKRK1Ĥ&" 1 0'p4HY!y +S xy`"y|zၳ<|xL+d]#8-qV]T7gO0<ʙsrz?%'H?H,?!?nMc!c&_Ƌן /bøYk7Fuq{c-}BXx2~``c>5~K4^ot֌.]^u[#դ=헶@C!xکw z>?%G0Wm"^_g{{WvwZ?vdaVRZ̤ٱ_DO5#ifѳR#"f1fϚ>3:=%ݚ3`i)iԤ鴈ɈpHXDA@DJ\JXJbjr5ɡh,H +Ie$’⒦& 1 C`xqRq0}LD,K.:FEkCDFZ@Ql0CL52ՂPUdYHiiX^CqQzbѣTzm&P˦T[Q4J@`"(M _0S~ÓLᣔ@g[!VH|K%2o^IԋE##pDFH%2\"ZBI&&%0Ia88Ec- DB +S(@B6'_ŃAw0P4O3;6e͍j]#8-qV];ӏ|0<+pq{Ë4 O/?KrpppO4sHF'qX{m?fBeFGقן /A!5={\Xgo(叇!fԤ[o/-tlӭ.]^u[#դ=헶@C!xکw z>?6pavL$lss=u{KL7\(05Z+ޖҞ^cyqd,{2$qYX^ tr*d<(mdl1NgϾ|Eqq34˲ufE +gbDQY*])RER,.w+737};Ӑ|V~6Īe=dвުe=ɪD|OQA˘3ʗ,KKf \>+\Hy {`8Jwp"@!-qUJNMtLπN< tƏi9l,q-A͈JqbFHrp6P ;Ԓ@1 2ZOю6&Ə'h  qMU ͤA-2ѷq5ދ#;=f).IBFDF: ^zBBsM v 5#XҒ~̨%84+N2DA}-JfIUL݄C: .T +AB_&k 8 eK:p]-!H[ג5ZqZ.8 +55 ԄީTXKq^WJԌҕ՗x]TRbPm +ᐚ j%J :Uc\T* XYTQP +5fB|ȶ4O)Qp]<*^s!G|L|.G 9e +3 +2d +H~\P^ r&M!>*畛"r=ye'Iy:YY8lY('=!'`i'a'R= %XxBc$cf:*H'=` Ò%?wbb>: ptrCMEj9bG⠛p+z8ʝ|%E@E)l)JrO>Q~#yȇ ܾ/leHdȰ}A{"({ط+wVϾݑ;#ݱg4; >]|v0(;wzٶ#D`Z90wXpض P(k{ k! 2?GAD_0 TX*U0m Fpޤ7H /xj!) \I8a2]㦔$ +JWE.Q,rA\2.ēI, eiqpu88{'Wg'W{.on3V3[9A2s@llVl1[JA0TG"j "f-A@V6Kk+. +Kk>[,- ;5m˖-V͛7[Plڴi3eƍ?mذAɺuZֲe5Y̠dݢXS%Rwә@_k_jWak֬Y? +g@ݲ~q_ +~~2Mk!w|lm?ދ_-]ㅏ-9?s}rk?^%/>9?<B7{Dzu攫ͬmF&l_ޫ<|ֿHW)gW3Rewf|7Q,f%j~)'ba덹޹®'Ϯ_)~1\0?ݜ0Nii+Za9(XB_PUjҚG^5ϼe]~>ly> Ѳ jiYO!Oo՘TӲ\|ϪQ1gd3foJYii3V G}Š KhY8J-z +h \&XyI= f䞸tƏddX;ڌ1-#3MեčhӒY1Cm$@"-$zX@;6ʈjclN50 F_ #! E$ 4у#>x/ӣf]ľnwƺX' .$x q + N5 2APЀ`!fttKKBu0ЬDtDx65b%L*i&n!] +AB_&hր/'tŎj LNkIH[ZcU$r\y5WI@+4y52Xj(U/QaTS˾|xEuqZyo(Jޛf`(){/](F,H0`{f&+0üxij=s~~) +ΞV9Dj]mrVh +@G(jR_/쬓NVBk{V+Hՠ* J1T!aX.4K2 R1mGU["US,AUB \UP(w"T^*2*Jr4Dl>p 8!\%D7! IxPzP:>mz76G!xݘ'a5 [)f*5@nz:“pǦ4JR : +a]nI7{ ۲6<8riiWSNuzvCesjV֝л>)^:-+>H%;0A${iR}6nkIlצ`) ffbKbk0d!O%'&Ȓ,F?Kf`!Sbz3 ,jadQk0* 2\6 tz26ADQiA(LVĉ( * R*$ 2_!Ep(#!:>vr҉G.>eqQ1"-1de4 GE.&8QQPdD' ąl.AƂ!.dž80 F8! Xda%aTCYdq(>DXcB.\O`ywϟ?72o޼72e.sMBzY3oB;aa ~ ֣Cho:|E%_'GΙ3g|cDiX}"&}M%V w&~7~3_9{+~z}ЛK O`~x5s,$ g?OL V}yS#=wo%3@V}h&~/L8c?ލ0lQwcE%p#f:xq˺OΊ $vQ=A^ m'ܿ@FW|oPt<;zlOםBgto :S7:pT-IO5Yh?YO喛}[n"z?}P{eoRՓB^b"BO~B=^YWz6].9R7piֆFYw?B8w83Jkt<18@J@b8dt,pF 6*#gPZWp4:;ؗO) K;֥~>%b?hPMI%CE9C=Jt դJhP!3GQ?L |P(S|x 8N:u> +*WN?BL8d'(l'%@tz!P^%tb +8ޅޭ' +ލLqSAh:ցN:ڎLq]1Ρ]r&|_SC BmngO ]-2M*Ý;:RYhe] R +9eu)vJhmje)R%VsD +h0j,ʥp}V]-Ѫ)t⠪Dpu*(;\eP*/  %|@q`"@Q6PYM|.|*o/`=R:h{܍8>wjؙbnfJz)^:-+>H%;0A${iR}6nkIlצ`) ffbKbk0d@%'&Ȓ,F?Kf`!Sbz3 ,jadQk0* 2\6 tz26ADQiAeο8ABy70(Ծy pgE"":V9+">Uh;7$p&axյ]{N~ +͖,6.EJ!/V mbX`jHsQ @P(4i\bR6* j\2аa +M&ר\bJ LKRvS1EQI1Jz#B,(ZJ%2^HI8E +#=pHBE\${CI&$E0Ia88EcDDaDa>`Q|D?2-<2exDx$f>\‡ A $@ ? u ݟ<^P`4|ІD9d>vd9 h#ً>:('O}[ПwS>G]' 9Po%~oZE x >u<@ϿjEwkQ/7[Y˻'jms1ȋۆAy~KQ m_>yr⪁Yݬry~M︡0QϯE̹4an1ױpF˭$h=XlyIǥE?t4T,moXĭqxE%C]@TXG飆KX3=ld|Al^.a,y(+i(~7]{d[tv6wB,xlv(YVFݨwvN3ְsvd%cS +O`urHjز?0rc5PdzSu.æ5UyLrG9MTXR41cZc< .S.;B)n.VL:1B峧7+<\}To_W:s ) +c4.WNh`Mr)6Tk5bOZtRcA4VӨt, 9f\UsUV v҂8SY;ba`nG]Mrv=hq9UN{uO3b وc{)vt[ҭj7MRYfaGv[̘ޅ& $}x'Ea!mQʷAI73[̜o66ӈ(Mf=M (`m0MBZgf12HkMkf߾ Hm+mAl]ed1[V9m^a 0 ݘܼ܄TjDl\f`1a~u֖5%ĪbE>YPf@,_HXVd sZ2O9c[#E5-9fq$qpxJ&:`T=%ŜK0%ْMq%'D_ V;fKmLOs"NgZ61,05e +Y(Rf.FMeNWQWzh0VͦckTZ.1jM%ZPXyw"QĨ% be +IL!EJ- h/D"D$!" .!$"$0"1?0 0(>"2<"<T3aÆ BCCy!!!`Axx TPPРH ҟO/K/ +4|PC]#*gNagG/ ?B3Ȓ^= @|@xRxߖNϻ)CؑkK(/& >u<@ϿjE}hub#/7qzuHg,]zH{;ԐAW6v?v)4`fR$02(Fp69 D28T@AH޺+v v7k:ޚO=|g~jA?jOՂf[ +Hx!k}@C ~ mZG%zߣyMD/4WtKꖀ{⷏gs{"@,8lFT5c2V6oTS0Qv:o>owXsA gsF`gh{gJFhi)]D֓0'`Cs8yRUJrHY[ei7RjKI@3XJ!Fr_`f؁I,EGM&^+s5`*%J$7?eR}{g=hȂXh˞LHcwg]΋;yj_GJa_OJ&nwnm2I$mWOZOv՚L|]ׁwZB]-&Qw !齡4ĀD^P5DPOi6P&j2̘W 3g˨AvtQw/Q`t轔NQ +]g@ܬG,ƹHn\04 k% v<1)8@f%x]=G\"d0vŀt`.Vg&dSz٥JÌ 3OSFINJM#0NcXq=Vs̀?J +:P f-'se:NUZ\)*#*Kts>%a4&?uXpCZ G8c0b (a,ZFiH 5,Z@é4_<-+ Wh e?p0˛^AYԈLTA7OW#Ҽz!oN^=$ONDGϋWf'gy͊W HDCƢR%@$Q"wyS)`qە +mUbl{WN9cϷ +lw +[%B# '=][mݢ|P^11M~ѾMQc"6E +3m5Ze +lڴ9e#D8o +5fymuLk(~#6L#ևL[F[j~kW)kך"AD +X:qU0wU*`X8ceX#G140 f #L,A@?X C \)'13P !Xe#< :!F%`z ESE+:.Mи=4J,7Ӄ͋UPPY)IN3E=w>+]V9pv읝\`r'y8,N0isw`r!0 a2@p.bDFIRXX.-[.t2;Pdd[f -Z`…[[[a6|#̯5e;zڀ)6bre,TZ5o޼y~ 9 m2?_ _9?&s.Q ^ +2Q`NL` ԝ1? +AϣޏiG0xH?74d;r `<<$3`%Abv>Uz3-S,Z@<&BC&hv43(寏=(S5}"P.Z~whg|ȑe#gNZ_ughȟ<[>hțxTCʟ^S4q<8mxp:o:wÚ=yϚ9u˚5wtnx[l*쌑3{=zr5|ge$#sYO@8cgB*2o*Z!eOo ,2R[JRَRn14Hz|Ṭ(QTs VHJʇ%đ&uL$HF@H@::/:C{{|(Bh(RGs]u4i 2tt' fX4]<\8Ci8|VP}aj®J:w\Ag+3:Q9 rSG52drD)VhEUi Uj-~@#2_;@yhU1Pid)!YJ(S!0CgpPQRf iJ=c .rSx^ +$ò( Yɰ#rQI2a9$ 6c/QإYev)|ߊ񷑲cdrw+ce`2)@nw(F%(TJOŊQcXX>vpf Rq+ptc$EKY _qѸG|'~p?=p@a{c o¢ +eno7lbK=["D~ݠ; + - +sP瑟xmsNPЎ-|;6l߼]H`H"l3l gluY9l f>æMB&! ܁0"lc8H  + 4Ab  +$A ub(9eR2")RÔB'_#IՎd?L㫒9J(?LţKB|druRw l o_{# љ#|y[o,nr?ޓABCyBCۃgg5Ѧގ?Xӿu佚h(2=jfeN6};\1;tQ9c|xSDSDS츹ň9uskc͌64M[잍^pSlsfܹsgZfgvfgvfg +33g9~N)u&uG_>-uŸ8Dc[[͚5k|;MזMW}կ܄eۯ/_/zsӔ i<1.<36/1Wpq74Hk>t̮{N4n4hW={_tJ;7#[n~urߩ]Ưwm}6&S#@^\gmy>|e|iCX6>`?5>{i O?(T:zѥSM%' 6[^'{SWJթۣn=.!N-;4#l;ߦ Aj!{;t^~ٮ-fdwUٹI͢jGY͢nۨᴵI-JPՁ'oKis=PCT^M%jLZi!jUIi'hPrj(DŽ*HC/Օ(!̫ (T( (ҭl=TH].>sE!$u*sB֡Ha­(9R-Bd$;Og#A(SAV`H^6faB + (Vaj fUiFӖ["S3I ˓))+˗g8V2m˖Ӭ@e)\ #fv$:@1i i襉K@&>jIB*$%>dJcKfLMhOd Oy`=1Y ᱖8X6lb(viqz`!,QVl@b" ]tD 6*<1QGL0- #@x8%#nCFhi{jի. +WZLij*T#UJfp+UlL1Pl(hbĝ\a +$L:'APipXثϷ&= $FB'! I&AzW +z{z.4]+VA P:ܻ]qg;2p0 d]^ly~yywmBWO(pl+pr&8il_q |!|Ra)sd1C,c ;{G  ֎acðZdkCY,Y[[++++tXb%XbB&'h sJYVt;ӆILf2>^¯cNeaaaUm,lA} 5\#!,&lw.& Myf2$ p2o4g6/S/s^Tо;Rz5W[f..)9[Oj^Hԛ, |_wg,݇>8wO?v. sPa dK\Y<)s_F[?֮)ih5EѦ֪ܱ9#0Ou +Ul<8Rq`@[?F3܊+' .r[qerq쁦IҬfY3&iSF) z\ɔ%i] cRn5n;R:o%?u,b@QʓEɏo];C929`Y2~lT9w2: R&5*?U"H!HNL';Y:'YI2)e$ RH $}7,m7$u7l.Q)"N1$y4bH6=[:zz~XOp 6t6pvnqvlsӴ\dtFc]X76s'#+r8n37o!߉٠oE6ȵ\.hê- Y$&,zILȘek׭_&fRNڕИT !AkBE,]f5(hU~થ+!+,"[NM7TE,#[4ܘKpK QGBGFDFDPQc"@p +aa eH@($? %\ 4Fd $YRYlDxƨŨ&SRBRP%L{+xd^2<"wM%#xHF{$277WcgOwH 'pT^B7WOy.puqwrqv+ +\(8 +I p[p6dDž <.rx 6᰹TXlc +&bYL#{G&~֎,a1E64kE畕YtY,K,1!VדN 4:tkƤ9bm71JX?DYXXX-}}ip)7wA} ?kb$d^}pQz<L A>a8eI~¡6O7K|l/SzAܧOȟ]z3VPs"`g<=>w2tɍz%œ/?,7ϽgSl S1CXă5D ُ>q^Xjϫ89>|r֫Uܱꂑ‘vMhhDS8jr^UeݫmzXa}+*[ 帼ЅVB9̈́s$MZfY3&ӀS=: =%i] c>H80=3DFAbN0w0%(8@ Y!iݭz޿rݽ}Ӵ s*6i*A{I 崔{=e,JiPLwq.PM=I+%O,%NC:hyI %a"d-xk ?όm˘wMH+,-vX":2Cc=WG q-86ȯ]r6a@xV2ۧ׏QS@w{@`dae)ݘY](N%8duћ(2ځAF wȐcelG _`KBiЀu:C |}-8flQ=M8bNw#FҢ;0HGʀs2\8ףC=Ni-p*$hSBZkQ&>H_Z rv7iQ.%+FA$ +jt]T_\RlL*V()Wf].C.(8],VS9]( +9*_9'es̕A*r rayUYTXJ$@řKW!NbH!7͇UNH*䦈!)JNg?.K- La$f&I bȹ3>XxoXr^Drc%$6dğ>3'(S^'='`cno\.$w={1>Dp긜1\;gy1숟$A;7"2r*";\RE""C"" UU0-Du M-(lpP؞0P݇a{9g`o;d };1 f{e.s-;B|w`oNB1# RC@0_Nm[@2m\~? eIb[A-(-fq%SpE}&żBRHQ%L(xDr&/yo[&<"N>1ˇi.4y^$g7Sqrwrvs9nݝ\7;nvq[*gWf.f8 ]ANNG'9{!:xB=O@|!,lyv96v<.ֶ6vLli7Q6lhCZq: )E$X[b5YYY劬ڬڬ2WiiA,S,= i&^|m?:_۹f͚5.t;,׿ކ|Q? ^ էAE|zW{B.^,mKW+z %K󭫁O?>ÿ?V[}x~?_}ъ|Ŏ`~V>m0aqI@a]znxkݷU5 wMܷS-Z +_n.~m1636m~;ҔfXrdg㍕O_j!8rbzaR=]eQHz:H\|r2(y)OnA=<9;w ta^u^PSڃJP^ZC9)^E)I=M*tӝBRMR-q0Ց?/4Y!06#2і}f$ŏ3G2FZςbtёHҥP[L(lQ#dRѐ3О=K&7  +@fQt?ʟ"3}Jn L1L D7j e5֩$ub6zEF;0Ȉ]2`(bK1؆13xwZq4 lE&|V:_~_ Ϊ[TO΄݈Q(>t4 8'uS{= +1&0ȍ(H@jSBZkQ&>H_$]-ir4_(MQHcV h5JHCBY@VBU)hBsL*V()Wf].C.(8],VS9]( +9*_9'es̕A*r rayUYTX_-`A)wmN{gzgX@Ezͮ.F@ WnTl5hnWrsw(&%OO)陞陞1Ó6s,k9t^@r K1>|>oڴiS1Y)>֛Q'{H/f$/Ϣ&#SݧI3 qqBNO"ӏIħ x{Wc`_iG7TL%sO{r.>S]g;Rwxߴç۸<@:uu7%^.y̛{9Åw82гn*pmFOnW׼8`ۋ3cFF/u\jy6r'b -.^:@i~r>^C{\ Rvb {p~d{s iwK/a +sv 3 *nltcCS.7Oq֥ 5e_S\JBZJ}Z1X#kGviWO)[_xHC-ꋽUT_8Tjbo +p/)/,ϽYFY1Wҕvu :OapyVÃ881iAv|Փ+'4 +'H[rk8G|ǵ }$c訖"#$w7pXˇ%l7~/M!lՙnN29ENvL$xwtl?8~@'ۯplI; ] &=ZnѳS;{I;@tmӰlW$D65;!lľj +e*V{(5E`.7kh6ڹQر^in֣ש8}VZF|٦BlmU"hQ08miV"67)TئF% +lHzO:9mM @9V-@sUS%T2DcTxGs"r6N8/+űR9D-FIŨ"SeGTKQ +G0H'iy y8V"$wL087+Z;y̓.MXhیv`c$ZLHzaҙ f> $W!$=dhu=GO0hu I0K5 zu|C 0V#NШ80\QipJj!`Q( LNJ(p#LjU1J8~ ey+-Nolzj31^FHo{T5ƜM96uZF'`k8V2w$ې|~a,y`r'ep`,\ ?eĹ9\l>, e $3a _&Kzj̙Er HN}(TJYS)0K2'YqNtPFcpZ\pY\IO2؄%YvhY 6Fń7.``L2q{K3A6Qד|4VD!j]^W>*NSj5<h :C õaW4J+ Pa>rLXcBcc(Q1ѱ.2:*:"*22<2B&ĀH* %aR !~Z_bq&4 Mh>bE4zQQ ) +< ּ|׾}>A]v߇`=8 +!y[ +(]?y)Lȟ݂ݧBDHnzzυN}?EI=8y{PI kT 9A ʀ + 2Eɠ w{w{wʽ7v 7oW5?̧߰1s +33ƂUY57Sf{݈ [&o~3$BmHajHiraowCN܀77Tһja5eSٳ73f'jgƍy3]o*gګf̜yt3o +7yQ;q`Lv^Gsv t +*ce| QHo>Z +\d #.0RFZΧ6sC%? a$ 5Ns2 ރH?24db]% w`'9Wʉcd[멅2ݷ3t+bjS9Ru0iI#8bFwb:j}R21'iK8fř+vM-C@6UQ0PAܩ lZhAQM 4 ubB\ղP,՗I.i*n^$Uh E4XcF@%juXqо_;ʢgrޕ˧V]ZRZbp+*.Ptᤒ?"hb\GUp08d9T,#*T41Tht9DHAOcK\ 'YjQvM%;IpACY9pDE <#ANu2ϖ'P)Rq~l$,~,z;HXqHYt1J! @-%bAu<0 tE ᐻ1Dq>£2hV;}{G9eǾ{6E7޲Z{^{uQ;iQfa#?k%27C^)^ )^#2aowCN܀77Tһja5APRLdy]©^cpmT7_?UU4| .~p+"k̙GUySPܩ3y݆v t +*ce| QHo+Mh.2[JX#.0RFZ.68JvJj:8e}mE~ *d$=i*472 +h'!}_Yb]%>|F|l [H'JZH!WWpMki0F5.t變 +](d$cf;{EW^YݭC4y}canc19eE4^J)uu5qU^=c&9xX?))2|$|QkʇV*0JRI@I$JtfRA@^Jg,RH,˼>tyΟ?3okJaP +e޳f͚5˵nXwT2h៿`]L3QԒy$^M-vy2rFзd^={k[Y0~""WׯAUy&1?=45o|-|^>}{^<|^]F }=z_pqO|wY热o6~w{'+&o^l詚.k/hkLDM^@Oǚ]8Q2tq U($*r#%dbĮATxɰ0xb}a(С܇8 ʹa>(yZެD{ddUC_ Vg>+Bμ5̸y [PrCzT +_(]vM +Γ1%Ado҉ʂv`uem;G[3S[3-}Fz3tF2ZF\$ qkU|uı.pX7xAΥkgYxRJ]dMaW~3Ǻ4;\ J@1rrX Kݼҝ.N.vp7b1:xYC4?aΝ⥔ qtH/h0-N9N9:}QH/i2KpFc:9LQֵ#C{'8uuh7:3ng(TsCrD0noմ0nfѽSG0 ՌKkdѢz2thWɠ&@B/3HТ}FLm™0{]]d@ + ]|HUo%(TEShQPU˲4K)6h UqFe( *iTUGqyiZLn(QNEJT.5n]t#cc۪b[4#D R-EPA$@z)ؙJH/;E| +twUu:$8q9:8FTsΌY7Nr߲jgU#:{ޏ%,ŌI "Ĕz\BLwOLy{ل@jqm X8!&6roMiUJS]R*/*^ڛ9D(n0WlTDDGGP#z&]ͷ_e)F1bm&?؜?>|j޼|X/2嗗i_҇]F|HƐZ~\!֑U}W:^\w`].E["^n`w= ~d; m<<|G-==:IF` [5; n/W79[k}r%fEٷCnxsn,f8X̼[ Yěql!J|x/Mقiہrpd6o{ +qrƩ6N99gfe ҉{=t,p#CK8됢hΝ3 izNčn&hF+)' ];z^;D\= ú|ɓ10Q !.aX.@*B/t9?d;iٹ.sFp +tq!qS'N*B}:@lgisHgG2<9Gv;0 k8ۉ :vpp>F#[0}b'ٷAnj, ]kv|bCl_mkۚPl*[XWZQ+< +شol ,o"-(b+b +XZd!rb'_BaHfD<[jk@-k1fbiG /i6SM&(hh-m"a f4"2R,7wF`we5݀hG4 q1gcD̞l@4Yz#5}NKΞ!Xٓ,):bd-9cjhjzC6m"7iCVS]3T$gWֺKƧW{V*3gWgWdVjޚZ8Xr7U*@T9q0B,PV*4_H S+K`9Ũ"XzQœD~v>̝åf +I 89l3YL+ q3Dxio𸽈T̞reKKNYݮp,N7ƥ) ”LRX"\&ad8 `X,Hg7,4Ɓ296]H`,oӚ<±j΢5I&ά1a&ڠEZD.-Z OOԡSRS06K21AH穡BDR&"x +FȔr%+erJ!H"0 IP0KJH!`BLT"b%qR11qW_Md}C R&@^lʣ<*ґ*vAPAJ%+uWew[;C'$"s>30б=œt)s 0411aL&xr蒡,>裏>K!-l1XcfFF,xonvܫ Ǚ====EU0EbY}~XQך{ᷲ}>6s/} gô>*\xǒWywZ37ۄ\Kz;&b2*ѩGQB51=)K]y3,WqȕzP՛A5y{* 8a;Ỳvo +X Ƈ}MGw'\^Z_9UY_jxPU]꿬VTz.Mv_*ꭁTLw.ኧ`UEݤ4.Nv*iIpNHxΎxo~m8 [ ]ذ1#Cb7n ٸ y+ [hp-" ڶ?q-[pё-p7G!Q7 Ӊ$Em n +ۄZ{o ۀX.jt<ƒ©քj .֚``*e_Eo _y#|=`_R+w5>07/6bOJF y52*`JBpKQd8'bTDY"2 +)J(urwqtS9?$r!9 bY$rE8 +T"Wd/p&j sqBvvEghұvssΑon-+[;z5 [ l0k- k ʚ˷Xpyì`,˃q6aq\jbfqp,K&, +œmjnfabʔ؄0b3L&xr蒡,>裏>K!-l1Aր>fZ}|8H +.RC. 3,{黀vfjy>L{/S^ >ޱdU+ݤV+5hmBKu\Mk1~# +YӈHK]x3,qfOz=(͠=n|찝,xnf@Ix;3CBĈYhDISW*T jKU*RT6P2[V+BMvW]qpWgsy;ViScr9c'*w+G`'Ԏg i;t(,st0.c6͸rRǷpeRG7pq)GMJp`TWKkR%P^$>M'vs8h%LdOP\QRO T\@Dl"ֺj޿Ό$z{| yB3ҭ-,-mՔ:b1e 2Miά!K6ksvPRpdjP& \x0y^K!ZrmWHȕ^m\ f\ձ=$9X7.MBƺȥNܩ.R5IѡXI_>KPt4`! /V&`EmdYtη$þm&=MC HW#A¹$''pi9H[-i#!ZR;w;s`>j5Ui!HCqޡ'k!4:qPͫREL=e8t|VuhޫAAU{N٭`jȡ2 +:XP0>%*ȁb% +S#HEX{ =Jtkw+OPr +F+˕CJ)%92^f)VjVRlVbl9ʁdxgJL$m#sr3PV6)|)ĴYɞFV&AvJ!ec5Sol&xsT%MkMh&/ +P_|ALYhHO1Fqe)cS6>1N3) $z: +[GYO7R6RցW&bXkdF5$}R"ĐHND%LX Z<&v lE<(<~jP(w:6j*Pʥ\+Y'da9WpޙXݲhڲw#Kg4!zDDyD;GEQ% MxHL:,8 +Յ9\Bp% E\!`trR gH)o( V+H#(q-L T4|j *@PA@ X.R$ 9_Ē9 ]$ , Z,Mo(Q / ]0g?0x"绐P_~ Ę#B*yQ-"qK- xz A<{Q9s̈f6l'sn.6. k..LʌޔSW?ʼnq[3k֬Y~ѿ/OO>Czx1#z:i䭛G3GBp_!N#'?|K|,=zyW1xOw4o_#P;;-m3^3O7e,7R^N(ϧ? +|nQgS***c2Hb*@얯' ϓyLxS)9rkj|xRxd'cg5C6N><m4p,~0Lw:P ^qVݡc!yw\y{Tʽ5p$v?aPAoALS}˾K`'{+L=6{hvɺM۵:lr@ucyVJ'dxW1hx[G!`Yg3.q2ʵɡm̠tk Ȕ6jJ2[L&KMٴTkgvPGVڐ%s9q()`8:5 (^r}<rkӸGB|Dr/J&!!ƺqn2E@.uNv4I֡XI_>KPt4`!/VB V2,r&`4k$ ]8^:N QO0OrZZGB,w8iw8}g8fҚj J@Y'k!4:qPͫREL=e8t|Vuh9RW:[ۥ`jȡ2 +:XP0G*KTJFl_70B%dO۝`ʓ\(|rRJIWY($bOI)̖XAW؝(< RT`l]VMsgX, *klFb F`=k;/&L̝3}Y3|^I֫-h\G>\T u* +  j0'*PY +DCkzB̫V"j=r1gN(d5:S.vƟ3LݟNwTf* +*+KйrG x2^Ursesq\/8^-(ep%.v/'(Y},\^syY݈b[IZOR+e +QXZAv>,Yy\XJN.rIvdYv1YL/C grXvcmiv?lXk fX>-)eK5)T1dc +%I,63$6*V/ƨdt< 0i@` (ڐSI*u8}j@D +@+qxF )UʩDy{ +9/6aOLTy촩00K#=mJ|)SӠ3<{K;FL#.X2&: #bߑbhYTFEBP$BB2XIP0) !?QR "HI) $<2" +6''NL41d /BsQaaaWƍ(ejj~O + 6),$tB(OוOz&{]F1cƌy)[%!FbϬDdT0`heT'4Mg$ P??w>(%J$#~y,~<^=L_L$@ Y@^=0`;qX1`h=fT!H̏w%7~Cc4:uG#yw"_VGQl߿V1^x}?,H|7w~#k#_ i#_Fx #^ G< օ0i(>#Nݙu|е~3Ǘ>thٕ{;_}nHW @=ݘ]mvZ3ol=`n&;g6-=ApO>-z`ϧ`k1kOVYW'xMC'V5:.X鳂pЗl;2AݍK!o-Y(c޵#qmګxK !s/\ 2ҁf"싽> x.5aMz8gq^{msvn g"[,q|:uʀa7~҈vIaW30ITp턉'z܈rr#gD\>".aG0)abo&8LӡVDmZD6ԓ +tXE-`/QZCQ"dk۵lMDL^|dU5lE B&XޢQ˚iG–.RS΅4Lz_mMJIMiD[F`KՈ 4ZjWRjD<5ф&ժ(oaHZ%ɦ +l%q%ޣ󪕈Zȥ9 +ƣxO=).n>]evU&W[g3K3\n9ȘQV*\)vs@%YQVʁpn()J8]9^6.OPʳXܹ Ŷ<8ן"(Vh).f\|X +S \.tƙbL6^2;'81~2T`I"ғ-0}ZR:$JjNiSLb4KXmfpI9m4 T^Qx; K 1hCN'A%mK{ĵ\remSqlK+J7˼00^B5``CMc¼kwٕϜ:U1f#Q8p^.$" @PPkC]]J V ֨B5 N( \AV &U 5P*BP +J)HF +$(`N +<@L3d@LL@L?q~~~@ +NR|Hc#R#򖷼tdD79_f_o4Yþxg^^^^^i>MuJa(DPn2ۧɈ$!AX$zӟ6 bwCHěXw$<8V9NƈQۜ}籇z`{#P.Xb+Rc!d.48{}3 ϟD?xM~w1S-VN bG>@3`:vκ~7Zk4葈k q.qv܁z.]9Jn㗏т.vÎ!DssH5;79E"4N7!{Pv ak:~ށ8DFq:V`GksdMk'E}WcG`iMj8@pwa]4ki9vXvvZзlͭVDVo wuH{6Yl4!.7X[]vXgپ +vA13ض5VBYm`[WQ+-+,@r6-3M,nm6l2F 9ҌXSaB.eU4l+J̈KLe%&zQPUZQdD,/48&AUŃ*o`|zAe:<#k[H/d,4,4N 8U@GF2F0׌5( +8aX< PZ%Ze +sx_H3?3/LOObRϧ̙yve|6(_900Iϙ!(msxf#rBٳ`i} +Kt*"e攙CK1q:,i$!ٜ,49;aZ4ԄYSFdrdXܤI؉|b&Md¢2S ɌJKJIILMHI=9>E@2N%ɶ$DBL"HoBc#``ǛrL1拁C- JDaCVw:°gG،­DP[Eo5,á1EpN&F1f#B0Buz0=,8\ +p"jm QiBա!a00 +0UHF ᙋ"HԪ`A>>#&J=-oy[AIJI$~s?e7]*dYiݳXۧъwҕ^^^^^iH(Fd_OS#@֟՛@ +GǗț>ǎ>b4uǫCD!c<_{l=DDQ궍h첎ګn3EN#r-fOQخ?[IpQQH r!$!CDktQ "(ޢB9T$ܗ"r33{-Pp/VՏOzn6\l ٳ:0{'7p_oDA݉׃ebFuWniEXoqho޹sFMgL׍7'@H6 JmqiJyќJ~p 2MPF(JjJl4P +%W0˨~%T|"*t5-8yfCi 5,Fe}Ru2d#NC'*Q΂D2p 4#^nVD-%RmtK+T03{]Y,aǶV%WϚHѳ:R=58(ZZQYbu֐2ѢN#ū11Zaz5eYyTIAͨUZ+T +򀞅7 j6{C 4L/ՕجjKiLc1=g"USHNӘ +"|QY@D@bUЖ|ٯ߯46sf¼1 za^?_P<xOK8 /U !Xa +߇䟂Oԏ~|jc+C S ^sYuEm/μ[<ʄ }}Ψ«J=P87@Xh>kнbA@h];(H pJyќJ~܂RF&k $5\G%6\KG]+pJ7^B.L9^#t93 Ok,YMw5*O쓪3Ǖ(&I]@t! +,t ceG<͢R5%l)Djh[ +X- TsHÜ=ڬܨmj&kU DOJ➚Tfus7W3o kmV0yk`̠ڸ鴌-w[tFBfdzbf6%#LBYi@HF#L+$5HHqs%B‚"$-" H򏏀qx8Td,lslĄ|âa>Q\Q\ޑ!|"#<ÃL  –3$ ##؟&Qx_XT a^/|9K\0z^<K?ILϸgRďŌ~Flj?zny]߾駝jyuT`@[\ory}Q7{uCj^^g/{`U/X@˫݆Qk@P*x:tL||vUhhG<`=8Lt[!Ji?k}u *ޅ/G`t@wu]wαj;#@U*(gwc(bU^?Ⱥ9y.z#H ;=T3=XB)Ι/̏6LyY?ܛT`_OQ_M9(:̻qþ QBĄFxgu{W1vE +uA5J!n'&]7FI^_W(Exr05}fF<( jrdÚӚ&Ny Ojllb\ ? .Ql)hƤ'(l's(l/iԙ +qW ctp1MƜ>J)ԨN +?A_lC + }/tҬu9"] PF +dX^JEnݞ## a붠m;3c1!14mLztjTDm6%=LBYi@HF#L+$5HHqs%B‚"$-"KH򏏀qx8T٩(,MVPMDꎎaPG(s EFPGgPٝuWguf'[j+|έnV%0gIР sҊr9|R lY[\@^l99\ ^TV: #],.erf%#-nπV aCӬ98Y`hO%:UGYZ !LLy:ఠtIk4jLPRXF7 ׫ *i +m&רu<^hSTZXZJT)X)nj A)t>duA8+111EGG+<**JDFF +"""(p/)<<_%T +UBD"{HLntUse!!!!!yNH3'o?eWtg|V̣.?:]퓴% =(?ϞG}%uj@=7> >W-AW/sԿꁸOg@~*-%㗛ƋFƫuDC!yvKUzNnTw'wd߆M_]uᄐv@}ae7<|qkn`ag;bö]n;ڇ :/;k{탋m5/pmhee#x-reu36+gQQ%CG1Q,-.1163O? UXs ʐ!0Gq^1,(^S' ˖K5ʖˑeEe0bX&gvY22 ٙaҽp61љ vFpaTJ!et3rڠkJЦarZC&9E%DrOHV'ȓU0:SP2y">9I!KJdɡg8&&$$D7ne Hdx@,e,CcIaBL4DE!Y MLϢ8P+ FGGG" %"##p6 no ~ P*T +U#BC #?sTXD.DGE +1?<ϊ̅9W20? B7`5̾1>㩣_uIZty% 7I ؗם6?Cb+7> >W-AW/+,U$% +Ȍ(P0KPnrsF@$ n@P$ g 33߲.x(v/s>}chA ݇Ry?*ލlv6a{!!q+X嚟G/р5!ڱ#]h(%S׺ʬ];ˁi&uey/'K.D^ [:Dsm1(y"}賞u+Ho#eu i۵VUJH ݕQ "y,iHsqP5@Yep$.Fd9^G鲀f$d#.>TBR计$tU;INu",ZWEQC]UX])鰮&֪j+Ge -m!V{Ykqڥ-26lկΘp> x܄S8LipNoƨQFt9gzyͪY6ap]qd:K BW!s6E{WcA3Qj9բFY5> :kTMwp5V`r٬2b98@]Lg84\ۘȸnabټab|NF)qp +Pb[uSvne7ƻs]ƨ⚔ C_.q QrYuIbPE1 "Rx^JyN2qVL#g$(| 'QWD\ rq锈fl!xAD2:?!B  KrSFI!N% +IB~V+Lt%ee)4BRY.,=A0GIFxWD "8* Bu܅f3)qBHJ'qMs$%q੎:𒈮&X{>w,Ξkb1'*\|O~}Gzp($*@оE{0"`$)82aްHž{#'48 c(#ӈa z`q0K8]u2F PА9+CQj9բFY5> :kTMwp5V`S_Mdi[\A$T*& +Hˎ !/" + ⾷ov8No)s+TE +79?޺ϓsotLpAnya~ch^;I;tAddv`9AHt=4L8n38wђ44,Bov{S:$ul5o1iFnpXfCvmmM(qx]hZ7XKBh0!7!VOdm3*RKJj1jjJiTcnC9n eFu$$$D̀+#jmRD?FZ@؀\GT|*/!ʊ(Gx$GOl~DQa9VVV%V^l%3^ThQ[ BWsWkWFdGdGW$')K2&.OK΋M]df2rRcs =vy*19iٜجL XZ>"eԂӒ9i"t mTjR*oeâ>_8ERX҈NH`^R,QtO +OMD-\ [,] MI/ ^Pܸ8rb-1 +X -f'Ή1a%D +PXiX8BK( d,D@- 3e z ,z֌166qH&lO1f?2h_2@`3s_] K9ৃy 9hGO_Z?Hxh}=}}=ZFifٞ"^?~ǤI&Mx5F_<|Rz_F(%`l7>)W߾ +C'`ϫP~:D/BwSv`~3潗spj9|_Zd- +%L;TtOJiǻf%j] ! % '䄀7U2dž QzGOJiǏuvoi{s_7}\>q}77]0Zh}a'GVGlmѷanwˡ` {_yuNWnKP;|y?dX͋+{a/wª_UQ.T>]œ m]U/|t*x88֣Xóael[Klqd gvһxMN 6:и /O4$5׃YMHV-P@54VU@\Upc[&(N`rf˿[+]vWK8˽%.U{0x`9 +wqU{Poь54hQ}&,`շ2n naUg,[Yndyܷ Fxj9O2k'hIWq( HĞX`v?]gհ}~`/ʞ@ݹ,q;s;CbS] ?2d7#PsNt;v`G;1:X;j0PΡ6?t`=fY-b طÌػRԹ$cЄ}nO35jw36Dl& +ik'v6Qk4< u4Q(Ďbz#b[= l7rm%%5M5FDS5X4h2#b:Q_Fu jmzf@ԕ6RVMQ]jNReq QUl@T#*@eE# +M{'+!gqV|nR6'!7piYq9Y19i٩g88+ "dfBd& & -z-VjU٭vnWy >83 7337?%U +̺̚J +•U*,(,` ܥaҊKũE9PO!'Ї*=&dQIQE%d||,Oxd|>D## )':)ɐŤ% HЩTs-%!JAYyP$KcNp$@/K\vs 8E8 vFXub21q6 h`Bb:HhLq RXca48#JEb(m/2VÉB1*$\PGǢ@/FR4QUT$GedD4h2\!P)!RqH"1rTd$APBd +9<j\Fd0SBC&OsCI&JPPШI@@'Jb_k|ѬV D'S xdx mLHt(8;nܸqxWnA*])D禍/S$0 J +Co/%$A ~2fz.iwيZ2нg3ڄAEm=hg᝷vn=gIX`U*J[VhE͹u|93fj)RYntZf:0׻%PõNhE 6 V֌cӯw.˵ƙ}XX3z;?=ޣ^iolU}bKv-}Jܹ^8=O#9ϻ[= Ou!y.r,qƎ43*0kiAWOwҁ;aqHW*)'$ODnRn&&1'#sey> LItdA#zpxӓ|LZR:&Ė*$RP֤x,"ɒKcNp@ &APxcp" gR:1o8QjL4 gZV!1fX48ZSQ10}i "tqzT6FiPFcQ#@Q(**Fho22"EEGCBI8$A9E*Q2P + Eqd +9%˕ +L1H@*BL2!88xثϷ(6hp+o *E06(XbGEDP)DA "ҥX_5DMbYvavY] _w]s9qc`m= +DoƤ@41C 1DטP':) a{P6Yg;#ʧp/¬}l````|y=X ?g~b茶 )I꩷v̟nK?b49}׏w>kɼhjtrr1!1*/4}D~o~Hٰ@/zuR}.7J.,~l-\Ttx18륒򦇧qxgݱxY:5`6/ u:t4dfdWMTo)`nY'1Ǖ0e r󰼱2Xh9Xhs),wߟUi=v:{eX`;I,ep1xl8k< +Ko?iƠQC7IXsDb䦈ĕ1q+7.O y xZbJhbJX: ~YB(H .(qm<0-xCt?-8.*T[N YC*h}$Xð"0.p]VaѫQ+k`~$"paՄsըe`ޫȬ`PWxH8sy0r"eAȸaB´!r <7,'H@$'##!|<|a"ow9ࣁˍK{ "]IIi T-Y|GE%bW,8 B@Hw υ l#Ǖs`pIp4`ۻ:s`v.Nl"[gG `0vwqwa5'-õ60`Z[h°,+b"h,%d`t&Icɰt>FcBT*-Y'ŋ)FĚ1q B؃gabb7cccR zb!kLT(ؓcLͱ"mddanD8˫p_[X_^Ò\yO_,]wA5&ANz)/LxAӤ>Nxi\?dø̋|Ƈ17p6G$ a>z?$kXwCAzhcg5`=⥒mOb\ T)wUyQy+Tyؙ=cHc(zEұW'+:k'U?T4h`B?VNp7rGrFKac-lH-sd 5rOeNe)Le1XF_QXz#ÐCipY7kP~}|P!Q}%_-vL..Ɇܫft2vwglHnB$u֤oNOiTIWUj[.+V)6V*NҴWh` Vb߬=XQ@PDY}YDAdUDQln9=3tLiIj,|oHph/sܼ{ѰhzO 0%hۅ`jFa218.*1(!*>(>&J' DFA ߧo^7"/*\\߃b3' + 6ww.Ϯ;bGrl ڲ3x0aP9+4  + +Ay +av``6?m|AAB}YA(@t[9Ko1:;Bo/>z7eV![2}3tqlrdCP3t+&r4QިU +r!,ţZg⤖iX$Q@tQ9+倓B87*Q22r`.'.fN9VvvVv=͓أklylXI92y$ \\,01a%RHda%[_e2g_~ͺuYXX;+v333ĕgVkVkVkVϜ#gCc"fu_1`YtvއKjժUV}zw% y/?nw[VX_YJ |ioo=ͦy_^/ϯ܁_^ }Ea速39S//ϨO+!ZOHzE~|M%߆+>?M~Agݬ#,nVŒF/|`O`eô˲g.۫EUu7ۋ^o)~gSesu/Ǜ>)z9ʹhD>3)m@ݨG5.VR@Y-ppZ#E(;;4kyjkH TW@M9ğWjsePe:Fgj3GƤ/U*/Ph媖h8JrTDqRPQ(R\d* rAyi2"?M *pKw r쥇Y6Y.Khd8)9xPkQ8@zO"""c#bwDDŽdžƇEDGFEE|kHN͠MB$@ P(clpý;q%&. `;ǸI)\KSngaxW_>oy7)Aosp(X7|AD/y` `M#myhMz0,X*AQ=+uV5\5aeȯ*9++YT0*|r-e0GM)GS)epY~Q0<#es; s! r]8Kgv1e;zܬ/IJJ" yaqqq40@x3|Mtt4 1dkN8pcEP$^T"#b8j{^A]4,,,,˷AJY?r1&׹þqpRctٿWi'cM~zbG|]Zw7k+ -z؋,|ԏXoŝ._ݻ-^m9lB=6Ι 9ήuFku!Ƭka7ik ۿ85l֍0+a3??rXg Kg\?[,,`L ~rugcʕˇ9lF+:wZz'h{}boWsz/o_߼ +€شq܈ذ̀XTXD1vq,2V/sZ@#Vv0a+iFl=blbxբ CK{(b!]X0KΙjVTDg11}jĜ&Dt̲g2HѴ6xڌbrhӚ&{,u|֢ -E-憖zhBnPs Hibx[hzJ4X )nO@5мU 0OCe=PP ys:CZWmP]S>_(.*E#+ro9_sؔr(qx9ŞbXvQ!w}.y |!x|3R6M<7 ׅ; +pfgN>S^ʃv0p9\V [EB̸,nAhlf; 4!c(l,,&-+QCљ1&ƔaP(*ň1L~i Шru&S)5,TjXR¥fC@B6$ӕ) SRY<9=M.MKeȠ3&IMI)i!NbRd@(! 1FDB,"&DB1 _( d>/IJJ7.)!!! &&ԌOwp<sﱉ;c5f@pB G8p4h7K^VPr `GDセ<˧ +aaaaa_N}5,FR^&z`EzAv,kUW"RE ]*]ܙI&s 3g&&?=?Y=sSߞMʄUg%LcⒾ<ϏԾM-]}sT<:)󨜃4O|q>Hzv56é0(nH4-3݀=hL{o75[{mZ(BH^(^/,^XS^]f寺mf ƻ- ƻm=>z9=vXK悜Fcy챦*\id7]e _e4GjC \P`EP@:&jI gA΀R{ORz'8SEqK:AKV;8FKA8aZr!;PP AKhYLڮbP"}"X[ImGk1i_\K)\HKi+Nn-JٜOi.5$6Lm,$rArnM|hc]aoaw r cdCjp6rȃ*Q _%CQlP]"IT{%R^Op\U[Z1j){9W*sܖ5}-9!4b9V[fwRune/!8"Oƨ:F*&2nL[e+8]P%0^eRtIUoV7s2ލ R?'*r,F㓮B~?-ȕSbF$|0K'NHh)1 b ݟAC="@CNAN"Z/l1XHL!X)R;!Վ(ӄ:;*+Hgb?bOg0!$ lL c-D~F=$}$-/7Qb$$%Jy%܄#An*&n{Kȶxl +jH(߈HHkC (BmQHBD@TH$!B%/:$@0IkUlD WB +om SL  + FZ⻍C60L blDڬ@ޛA6n 7<3#}zu uL5Xw y*jSOGoB_ ?'WW>~DrF<]P' :"$7 \.(MDr `(' b92p@nK!26 &&ɾʬ$v!줖b[  AQBkHEH2ZB,l 3+;جZYؠL,i*V$c 3uf|JK1``N2235_ԄfLM`b7^a:F&cMF$oD!| @<.!K2䰹,K@.#`ҥK,Ydŋ)d"oh-jѢEw}}};f:.\8mzzzдf>c>c>t}W ?Dt!#[wѼyy}3^x?.T}N}{#}{p7 >qSy</Oc'ʗ顿3Y)G#G(GJòG؜cH: àDiH4-݀=mlxo75[{m(:*uXzX{ &w&>k%-’`PY8V7-%|.',{@hpC_ eVy> WuS};)RrOW$] ZJ71ZRWe(hOg-vwdpq+I^ @Wi+Ih-&k)@5ƴDlΧ4RJRbn&6&6$ć6ֹ*jeZ)Wр5Ɔ 5t\j9A騆ݯ!(6.W+ +r\U[Z1j){Zk9i-sܖ5ٝ(,"] ";]TU˾@C7`/7UpMQYP!c-$#jr{·~_#C+OAg]ӊY=E &ib.1{R%M:E ]伝?Iϟ ŃM$bO;!s Ag4VRrQ @ zhu]- cl NVKcd,)m'Q.ĸF{ +4te)ӒVnҙ֛kM̩&3P`J4m1&dKf$sN.b3Yy@nQl,TS >Ƞ6 z}-ŐH DC#A볬g 썼6= fl.VF˴%.s},6c"&}mo1e#,jCiiIQ`aMĚDDxjB*,,%++49.OHRl NIM%Wp\T=q|X.2:" +Y7CD#B8H"T\(ô0<\0E!wJoy^ʋ,Joso!XiCII1CID +s1ph+1M.Z1S]\\/_dٲe4θ;͌{ K.]0^tʄ~XXX Gב9̎ɁyR:[VZw_XhѢE{.A0M=71~6V0M=`׫WvuQR%?C ?}!pAs~2L 0?ߙ])!x{$Vʝt08km+ʎ`Ĝ7 }I.X s;n_>'~Wv@f!\>>U| ߕodn6.!{2^yiOgLO>'S~N׷gࣷpћǸp;Vl:U3=~ +UIXNXkWבo*^\? +ZkO]9 +A<mi== +k.y6zrra~VDU#kK `;^PG {Y_c7lZUtVmUnk˝ +~Z9pV/™(yVjWj-ra9(/?[\0[?~mpZgW#&hē)p&Q$A!Qb`BE!9\`vu)w 䐻)ĝ!R틤hbuYChByG0+1> iEWQWzQ̬Qs"FPOb$=Z1r7C/vN%B9oO'H`'a@$o'Jm';N:ۦA3^jsD#Ej!0f LzZbO!J@-PthY6aM*I5 (n~^8RDթ{U{CqykQ165Tjլ*%c_%QͪP2y[D)pTD;Cj[9*wxUl*+r}vXR8T%Bk2:c\AF^9-/uSIgL3F(4&[m$sN.n -d0'$c K1 V٘j IF}."OǑAa%mRZ!h F>SOgYeg00y~.`Kݝ݅e{/IGh"vq v] EbNJw>z;&Nv}1ﳟ[BP`I)ǔ@ŤN/Aas %RPœBĂLT>$gPyBrELIAfI1YYB3S2,;#9SB;Փ.lJbWrB +əLrx⒄c=B3LBL"M`87)N%b1.2E;1F#Z[kt1MKBafg$Hg3f3# +Vųpi2`"zeBuFHJГB#(B0]HxX$ +"h!UFhUP^8R3?ehH QkVBP*R(&P 3%)}(L!WL0a jqA'N @b;6;NHPP, @ Fc4Fc4Fcd0f,gLh@r 䌁؏l؏Tϋ4ըQFo)R`$v_$s!P%vߞ%b ^^=Ǒ{/Dz4wK^ai/Cq7O~yC8rI/2>x(ZԿ%9xC!AdygI8|"vOl2)~k܏|Cw,%p$;F`!~C̷|,c݈o7Q4t'.ŀ1&7`mv⋛ G6 7};]޷aϾ6p㞶[t6?w彾eZ_z[^8kٽa 쳫a ?8sɽnhvmBnwmsg3V' MŷWT(0[2j-{cmu5j)ԪP_\-re_@5];-E,{wfz+:hٗj3`-ґy8G9zګ+{x+{{gn3…XYyFfe]N9AyΥϲ~_qq:~F[P_'N_w%8C]=J;V\`]>z˥,瘓{\:9ƊxGXGY9ucGaƜ=bt}>  +a:86sz sMug@}G'DoqTP>oqȌ>2nĴtv0;)}p;N;мm(ff ;f&MLFl3ٵ.h:cU;fjmkp[W-p-6+MmqUІ& Fׯmr,5Ka?l M`P+\o RNYUgZ4-]ciݲj 6˽zPr4y{p+`2056E]Zu,*nIUtcYF/oYes-LqPTyEb+SS2ޚD*OȜ Ulyi -峊SJg,]Y0y9j:ϘYtTΌ +ҧӄd}Z )sZO&%S0rRZyԲBP`(*K)/䕂4J)-xKTJI&8}$e<9 +x|/He21 \&frsPlRLVjְd̤L dJ`aIܩwaSSRHΤd fOD8c=P`IID , "1K,c\)ډ1"XF6VKBafg$Hg3f3#a1VlF <0|PZC Dâ" (.BO +|tPHD? Qkt!a(0T:LUiByH!a(&DyZJCjJMc*F.SBd4) +S (JBA[Yp "2 !@B"u*B@:( VD +VJ(ku(-0&)C3=-15c2M qd2uux Ƭ͊җ/}M 7ug426056CڲBWQ6^b}5x3Uw568:BR|FQt>ke5:r!a?! |5uQP=ȀT09s l<> lm W$s5;v{j|! YMμS]~t˙z!޵N|y՛.: w:X u[ px&xE`mk#weȬ[hަ _)hn0P M"Bw.2 [PsPWsifwsiRC\SiFsR 88EU鄳)ZH[@:tS&wTIIwNCNI/j`' 'Ho~rzE[Q;,SV&-U*sZ"{z f??K'>AR<h<@~T P- +pt)q"agSyB +`gU]劝M kwojjZjŜU[Y)JٳLmZsD/&PbQOZEGDS:sQ+ҩ0t.Eq*:$B<(DMxֱ HHD y 84N۞423&~H߄/f=z4odfƟݞsj>tɺܧN7],g}z|{?ɛ.:>+[]FigZio9tb)E*Ϭ%T"sGqi˹򸁶R qnIZK9=e9ʲe{js=tU888EUO: )J+Jj R: +;ڂ;! /jNBNx~8'#%~/* &z1GK{p&vanj'y"$tV6²v;V>P+1$c՟s5Lu NQ_!`5l6KO=N!!uF-pnfU Hg&UoqW¹j-h2ݛK12RCa(c̨ +:Ku!T*iT\RA/B+ *^畼 ESzViUI +Rv%#W+̕N+!rJ.d)xˑz%T0 +tr@G&re +$7Mt̪<5jEl +kMt) +$#Edj>,ѫc52~N#Etj#]cFߞ8SD .d[I/!II.iWZ%%Y}*SȉǾsLH +s;Iu0!"4֨GF:7nwθq>`ñG$쏛qy$Ƣq1@sr(+>+h>/pM{@W辝t2H4EoޱלнQ{@llؽm|ڲ 3r'(ξ#0*< +y;hH66 +k&#B"(AdxpĦ &0kA| @8݃BРUP@0$pmHޟ^3y&[\kA~DJ˗k'ga|\<Ů *Isptqwtv[f03qu!.n!tq^jYP", 9:#!wq89;89 +V^mckkdժUKlWN[eҢ+-͊+l lٲYt'XXXsKV0,1}9)g[JV??-ZhѢ#%t6D ۟CP_/2_O1>__O3n@o/}ǹ޽z=+~`_c||cs_}5;k3`!޾X?9ɚOrտ&Oq~y~VOU|cl^zHB~zcя=>g>KjfLlq7m_Ox +&&܏X=:e$xTS?ihNzPsDUOEOY޳ʼ*sީ̞S񼟑5y4g>4(cf|?P>J{w5$q?Wqڣ>V(aoQ+)o@u]bit^L8OgQOtQY9<~F=YO99ڞqͽ6ZΉYd}O4ܜHOi$7hIRo3 եsP 5j 7iC`:a UŽ#&0`bp-bܻCFNEXIBt6²v;V>P+1$c՟s5Lu NQ_I:SSHHwQ< _] +tT*W۷U+p\c4AK +YBݛK12RCa(c̨ +:Ku!T*Pe! +_DV eTJ+y3\;uҪ8_iQQJ>Gr9V+VB.( V]R:#gJ.LQ:z7ϐsH^CyNڹԨQE5*D5ѥ( 04bDFrHڏL!:ѩetI}{R" o'KiBZzZz؅"HUޜ5ufqb f7$5`!AE\k j]q[ql7}<=soc~!k m6lj{-u͹m2OQKYcSP쩬/45yꚝ&(ryz:y UuTJ:${]֖@˪)T9RZW buC*ńplE ky!RVP6Rg)(UBd*v({^+e: Ƃ3 0W dp)rT<[8KHtlGv,DgHgΙf5h-F+ƜeiI0SMɐ 1M eVF0M܀edzaJfh :. LU@b@+R+q2MJJKdj +LJStrB () LHI A @|q %4aRĠ@D' \/pB./5 g|礦)$0Y+ +B@8d +n8L6 A  "fv ey Fc9sGE}EF~/HofϞ=mf͚i~fjfjfj5; *_f:g\L\Lt\mG[G~jd93f̘1ߟr6 Կ~.)WدόWBBϊ3دO3Ϧ痧bF# ߫_~mƻ?(iއCbL_+߫)`eS{ɘ^ޕ|P?OFw"ȋo#z9{mG /o$ /o ~1~&cbNa<-4(Ǹ3f_SjO4ΥOv>xdo+{2ڣ= z\~te`˻;I].ihٽm]w/Pm%,s~һ[ilZrl@wg6ߞވg3i`=~oԧ <#uTC|Ou:EXCZ|sh5U+ n$Xx :a,>׎zq=cݐkGHm#Hm_^Ja ოGAG +>>᎖}η\b]40n_$:f]c5DIa~9 7jCn3N ߜ"6";KzI&0|\Vº|T%]:\8 +a]8K;/kq:ȹCA-3Mۙ>-~shFZBRS!/LމE&rl-N d5lCHiHhrp 9E4*owg +35@ITvWf05SھVٶFֵ-k(V) W6V*!W((TH>W+h V'=rGA@Ik$d(LZTF;ՐNU@E A}~qr:'d-QP$ =~$ &z}>>*666gWYPtC ;C/{ +]Bo6 *"**`,H +Bn]U;da2 eS˦ 0331gѡeX,֬0Y122S0! a` ka`aߋhe4c1ѿm o.poC1xAC\@M y0:36Qx7Ɔ&}7m Η׾ťCjϼr/炥>?W@dA|_$ ~lq}ySpBW+XP/|xJkD0 O'{Ӆ=r>h́w]NoPiפg =G*kdԤn;>o;W0vv__;&eݸAue@+pRTdVd !@fsyv_)XVo։̞T22znJ!)w¤=Y 61:'I3/tv6R{:qd_ߧGo]^rr]mWl]j2qI{t* ijUJu* +T_$֤*[/*);SN4&mnjh|9wO%\Mi$䴺huܖO۲5(&yT/a톜^AI]O+rZ.P +Z:\n͔TP +ۗ.ʸtܛUr2*ҍs2Ra0C!C!+`RM"jl->t ÝvOl-F:P荽N;ӑv'GvY{ꘫ=KJ3_?3L ټA yhU9-59Ud7g5e6NNdܥXsVu{GWw*Ҟ,TOZÎTMa:;LRR; +a)Oatq~( 5X.U  + & AM&.~5x.,A}1^JQ%Ta˘BR]S;EPС9J4` (A$ *`%)(I*bB;+[T5ΰ'}֭9٩SAFH2u&<r&/Q\PL\`$d$% 7hyz?-iZ/ ?ψwz6J7bhnD0 bltb14Y +!Rɜ3tDh`+hcVZRi woOLr&@a<ԔsQwӌFEAHHHIvBx\דggitq0AkrT 0զ:IG$ҚuRʪVk jհZHsl;ZtTUj9J4jZY`}jsP-`\|X +-0NY+KZlZZVWa%>xcE2_`9"g/gwb0|ۮ(׌[v,_qթے3m۰}mfZfR-I2f/JK1`[fWgfd2SӓA[ĖnMN%nI,IJ6Aq-(UtaM*$euHؒUׯzAW\$X`)kWEY\lo*a(|eJ I8 +=)tE +XrP8H2e6- ^ KI%Ċ,I iNJ1q2b0ŇYLts訰h)Tdh "B"`NE3.,(҆МPB4'S@*h! !*@(% ʇpOV'Dt0S㫕xUZ _yЃ㥒k/G]8yGwW/'7WOyHp(\]]ܕ.73#99YD;b,ǔ&(Dcb +A +;v_} [E6-1dY%f=Se,\p,X0'VVVsbii5?ӏB +bZq5ZlkCu16?لfr޼y6"fD:&&JvD|V(efYde99W?#P|+{9웲h7_Oղ9MXl Gڳ`7Wo{.vܰIAQ Nᣑz) +] +_2j8y9 +ܩ 6;,ʪ9UbU +r*2{ gd)yT*qS(~g.H"Nk|yk]ycW 2Ǻ v3kͩNM 7B:&˴0)p)x4Z!g%EڌF!ڬAƤ[4f?G`iI},ziy`& 0a~htS,Fq6p'bltb14Y +A@"CgHd R6o%8 +pGy| ~f4F4&z(\#i4`Q)qף$y:@%fi!auF OZi>F {WmVU >oK/y撖&87~_ +<m>WS9fKr6QMt^w#ks42)jp-/eRO-A: +OMWd婢ՅUj KMY 'הUեwatTL +$cUFleTE(C"PBX_br:QM.(henE(d` fN|ST4Vc>ܒgS n6&=dV\E^0h4P \6YFIs *TNM!Ѫt ,4\E + #&=8H8 Dr"_jO f̘1cY"|~ifoLF9B㘽HyT0{;d ~n LzoxƀyaZs7ᜇU'i??MEOyl~R:PT iHd1#7Xs!X iH`1ܑGrt}XGٜs'2 B"cFwIx@L _ Yq̦(ͤhZQi7Fe$%{ſw;9cwEqcw_dnjdľ-Jx>"3&]mpњ޵ώ/}>t[{ྐ!{/{]OxrһPRP?v=jWNhBˤ/lC%.@l5x3jknCp{Qӌ:Pbl5,t45&/]d[Pu*<J7|W T + +UNj KMը2 +ku)]+(S^>2T^YQ)Pj+!@*֗PNrr6'U.(henE(dg`#i +BMFS &FŠ[(fj3Rs-*ތRsMy9F @y, rvd=$s'rP:5D1вHp%V+4,RO3ٌ2@QRI"X$]%OI4rTT"eISoM] ȸIL2dU+Ѷ_g:@qZԊ +~jŎ{N ^nϓ=ܟ +UȔP"4 "((KrP*# pR $ w*|QD,F,E`' … k4Â(/ D"pqy>q8c&xA?ߗ5ϗ=ɇM1 )/o  .w]}i +}z  Kt/! BxӿyxWa#/YDO`|gF o(ӑbvh9g{GHW]qGp=55#CgD 7=nD p.ӭ +xݥ7=0_:?L+|gڽ~ c]FMJ.&bKmJ]=M(}[%-bf1U +__soįI۬fupsWtFmƽ* ueq65=7jJ@_Հ ޿FVmSUYoUquH]6;}e%;m_m +]@mqqm6AmZrFoY}tlƳWwϬE?*Ȗ9+>YFp8 +RDIC~*λuđ"[Njro+Zv`!{Ʊ芜VTohH lk0!vuS`[kwEgVoҽ+5_14]65^2YݽhƋᬻL~ȰB+#+Bs@AA뛯!_-0-ˏHgee.Ȳd,ɲdCٖ9ϴdϱ,̰,[-rrrR-/]m4ȒA2uI&ؑ/3Rg-$"eQ& 3Ib +qI 梲Is fg$!sV&)33@'jřyYͅNqS@X,;00'zNyOM98)pǘ0  .w]}yV4%:H>3hto7Lu + <7777]_}q՟b]1|x=.wp.Èp*OG0Q?z#ǃw#>?Ѩ>4|r?O@W}ruk'JH~Ln.Q{u?xet*o2mRت쁞u(Z=oVZhV jY=2{ۃ{[e[}w5PF_Sk KkvV}HZ`EO`/p0PWZ]YuQ*ڦޮ˻;;lʎKcH8 f&)yi$Ifu4*3Ca@%Kg IF\uwϰ^ܻ;/-MwWSyo]J=^P75=Bg74SFdO=D7_xW.r\͗<b$gBF[W9#-' 7. 70ѱ[u]@jc% hՃ ܬ9?T0$4LF_).M@8ӏy1@kRг~bId!ɣ7b6ާRvfAk5fRCx͕@@M"w0ni-R_3yeJH]rRB`K)V +.Rf0̢JHeRQ+,SB9yL+͓rݺDA%9 +eelr!7䬂L@,gHK4)@)9$`H^ +}Fh77lCz ToH*ݑek 1Uoц츜)N89cGb]MNS\DHKN>N:}v!:,pXQ xHL©9YssgXgOC"'@g#1Θu64( xS폏]$}v )o}2O!'XJH8!bdqbcr=:>v7shј#GV"paPC ? c@~1hV4@QaHPN'",g ƒiATX`0 +%CxBAj_ rog{` "+ }@@OC2R&!}=oh +H(L%2J ++H /LHqOnA + M(a[!M%wI@bU`!Ƚ"?=+wo-_Y)jfϯߨ |"H|%kW+Zڱ?TW2_JW3j+E%fAo{A~4yBq@?nF:$c}ädnevovl0Jo@y/si}u9kO;9٠P#i9oq8ҒHOz q3p#MHPc*@0ܪSZP+aElf:M!eg2MpMlLB~CLgĒ&)CG5o#mO%=!&x(Fz<&Y4I,S-2A l'3s%6 mG-0C+%fF-yDB4׀IHo#-ܯ]λ8Kj,h[pHU_9 EKqRԕ* J1H-%n b"`,T* JHy¢; +t;'O<,WaѭJT@A(([f+ %gdrUf>CH^ rrӤ(>E5D Ky,'z=![3+StHt93:/Gثﯦ4*2v %~oiBB'@V>V쨻Vg"Xv׺ζ)-{ߐ { 22sx{oN~Y"mo35mX9j9zۯs͵~̟rJ|"__7V\6U-mx On\܆ZVPzkl *&vvwmU\V %嬁Yk˨)rjXJ+iT̕%ruQVT6,gNA$t0apJ%$ID3ۋa"[h s +akA8|K`yvX݂ȰHD( +K1SdP3,z !4,4$ܤpLaYL-ܨ%e` >@44\d4"CIU8BD`4\X9R J2\ɔ0B@1DHIBʒ%)/ኅR + 'JS$q +"r;G +K4!S06˧JHRx@<7i0qyI0IlN\"N %A; b%'˜q`&PćˊcƲb + b0Y3f̘BLDdd"SN%M6mD0g0'OSeҤIeĉcj|g|g|>|x& 0y@Dz҄Ss#r:9a:qʊ7nܸq~cFK X`޾wAk<Ӌ!yASRz ~|"io{dӴъ?K?57WӾƍ&0Vts}i|q7{ `=?:s/M{֩U97O+)Vo7]?NgYR@cTQ%+GHt-,}ݵ0hAW/OoC\>j_= x/ux.kW׻e[…ܨ =hBLEeTMubPHV_76[Js8jЍʀgv*i%ka(a]95xW'0X 21< 0G.iP.b.V\89:߅9"2FLA qv? :S0c``{pc$'!pv)C0t*9P1`)v(Q0&V0! +if9soI!ECؽQصA>e:Ii;uav }m u4֖ըͫ(VHM+Q+ĨRV8JT?Xub֚vHA/HV/C$Ua\(b$ $l|c–ʃkidP{+ Z&^І1Yعm:֜6#q)9k|Lo8Rc8lh~7TkާQYcy%XxݽCWs%wO[qZ?|7uG]|$2Πq< +4tq0}.Lcxy#@Gx'/[ypPUuPIWC5pRo%+C{|RI +U@ŏCja?E>^PQQ^t*C +;]:(-hR]SZVʻnCSCJe eoaF stJ[Ύyf:BK5TLʻYFuj-)Sk'鬆rO@We7W_=Fn>MȹVU}xav󩂬棅U 9u4:5JVUSGY?se9-%ل^R`\S(n7(v^|NAV>NKB17j/P,y399r +Zi3XWOZxw +XpݙػtJ(xRi8!À :Rv19 UwT9*''o2#wpRMsBurLuQ(I1JpdqN l:V.c0K0GĘû%%USD*wI*vJ0J!.&҅ ێۻbڳW%Yէl{CkR, (Me}]BVֵeMĥڼ:.6I4D\hcP֬V)Y!nˊ}D +rF%ʏXH??/1g^Ԭ9f楫f-PR2rTSUesIKӳd4@gr$.Ss2Ԝlq)%c2dN͞HL2-#}1*iʂaI0 @jpbhw0gbbbbY_cd i P#{#0 G?cFz0{1>~szC =O8򜱽 ,!uoP=5rZoȾߒS-9#qtz( {^? ko~W0 ?EN-&R2_Cj?PzP7ڛ͋ f=Wf_ÀaM~~cwо]-~rG麭H+j KG|x+PFTXQj+=~pOc/k^tT*쨃v(-hR]SZVn/nCSڊZ~h٭Ichi9Z-gKT7ϬGSTCŤة&6Ife_$lQdU@p l.(`ebEQYl׵Vmo]jp0IО9Og,BYW[ޓd[|޶<٘}72WstscnɰgpO׀˜װɇ.nws[Y ]:yyNҍNvgW_k,93niNҕSd&A]ngNZq8S*$κ[ew+IsL fZ*PLG# ) s؝iy)qjVG*b(k@ +JOZ(s0cނMeW6lJ62czTʆUb%O4:TҺk%$]Z-$Yj*G-I2g╠b`O[2ne`E +r(n]0de .X)b$/A,NYlOtjRPQ-D^Z[ j~D\JfVrb +nnys捈%&P\bLDJ`bEPs91h♸( ;;)GDƢѳb0Q3Q:a:3,6ADјpIl`- +5L(tv`M8Ahq uFJ*T +׈QaE! 2.!̆P0PiA`7Z@(!7={4?rG3+r)>D|(I[I $ps}6uGnnnNSNu LDh.v lqqq$SLKMfNS&;| usMqr>s"^狹&L0?9iϟ/?<[9G̈wq0C}I4y 'Ic$@?(=Žy{< +Ͽ{;<5^ +{~{4op:Gvf7}Ҏ(̼;Gz_'rO3.>P{r_e">wgx6x|*𿕣0Oxt'pnP{9!{9&{5"{5 {=ѫ@Od? A~aг;O}ܟN /zfˣ!@;-p-yx!4Gaw=P԰_Cuzc_Zpۋh0 PE5ywUPyA mC8m~ԗ;YlՁڃr\v7wY(u3R.3ځ(6\o EB5c j+T{Җ s oۖ7/7v^cJsܚnṋ50r@9|61r8%V`7ns"+ywVBfSNtz#):Xsmg99 +|t+(SU.q6 THn!̔ݭQIsL fZ*PLG#gN0L;]O!GSuU{: +`V1@p zV +QjQdA-j`0ǫ"] UQ_TWP U UPcutS[%PGjHr!a\M +[CSKک!DR aAۡ `?bv]{",+TI]-ҢW_Meki. INHt% k@ZbE((ػ(]Agtѫ_rĽqX_k=ߓ|:q!  ZDKT@4ܺIHuuhLe,MP^XR)+r˔ m&qa9TT +5@yRERVjJR-KTeZUeI)P,>hV--3.lYJm&PIr 5&, AIYv 8D T.D%e%M/ȂQqy&Ry9767=uڔ,P10CESdY)̨L H FJLTzr:JR#2-! $<%. 0e|2*490PP@J +Qqy".&.(>:3Q`\d#LS$XIl&#0IN6#J, È"Ce(1!& ÃeˆH <8H03BB$ & B0>Ra R3$>b-K3?$'||S}4(?w_o?rhrExymOwo+œ9)<. Q s388r(.͌'(#y:<),.leql, =v Z̶,m l^f23̚5kZlll)kkbeeU,--5f̚YYH6' /55豶;ڵnx_O܏lj(ø<_?y{?2+we0 )x)aBDq?0p{ 6ÝaֻaG;0zfqYya8ݣP 7OhB0S< ƼٻAwX׏13 5x3 (so@7qp&̘?$?Df>*d'`Y+` s5gG3c.yowzuo#~_mhs^5~f0dsF/nx3z~ 3qs&=>e\r3qfc}ᩝ֏^j-}nSȹͣv.;e] z4=-KOݼdgsHw~n =Q=6Q=:M}v~]?|V?UwiT{w]hk57Q(׏ֳU}õ+6J.+nj]> +-#eѥE*օP*/P*w6#*`܁Fb;ZڇjzD]C3쭫8-:\[4Y={^;fjUנ}tL3qB'\] \H.`gCփ| Vs@O-6r'`\)ơIjHyZgquFHAUNZ΢uEaEzEIyz@U3J+R*(eEDF(Rt蹌T +%kK=ey%\,lJ1J,Q%OQJ,ʦ+K(T_3Lȥ2P9qy\<'=fcU14)YYb`Fi,C**dtLPMGdZB*"51IxJ\(QadThr&La +0IS_MdmI($3 ! !u: %P `oX^Qwu( + +* +*]tw߲/yLwYKs>{wOLfpθ,[#auس`L 33aT %-%Fړ٤ya7ے>) 66TХ aD+II"Q`ddEg1 +X\,^SfQG1}5EbX)@kd04(ZF)b5zLbԴX7-EQi3XJaBɔ +4JNvSR$HO#Ȉ(,"R&GLJpK% 2&L"f%p#@1DGHeT, #0P\DD"1X,0,,,$88+BA>C8 G,gP?27~@ p 9AOާ_ϲ${2_KzوwO |҉lN]$x$ğ$rܜDLN^&^$=ĻYӥy4l0sĻ_ORw8y(^_uwNn[reےUM[+t]'uꨛ{N떊-n`3KYPzz7lJǡ egoэۧCo Cn6bO}v j+J | tuOGD_h|!QGG{7ZaIO,>i mBکɃG,kgfղတv|YQ@':v{nѼLQ"wfDOwxv#,D 4ԛ0vqL(}ufn1gb~L>sѧ Q;iF|ZƦ~^Է71s#Vڌo[en8lJ#5xS4AٴB: iQƀAp7b÷z +eĺ>.ѱZ8_[G-2 T>XD⫫.,wiӋ@ҦMdO-3IɅL +XeMKsL38ZѰ"q̢QE|TшBDa~az6icG:&1llN K>j(-?7 RG:GRFd%9ϑ׏ᰤY`\\`9 X3=;lYlTaςY2mT +H΄YS2`tiOflKBR0$SA"@HK $%ɋD]Ɠ m9##SbBĐF+LcqxAj Lmғ>UFmaktj=EJt0VQbݴFpc`* UDt&S*TL(9-MI("=F,PJ"#`SSH\!2)-:Ý.D0Ș0HLP)%E +IR d8K0 ÅBaСCCBCC!!! Tp`OAAH``?@ T\.p8A?ݸn|8|.-$(rr}gߢ8#HQ .Reҫ&t "" b(1()1PDYϙ]˾y{;OYo5"܋xsWq0Iw"-B؄ A;Rc{K&$𻊊Wq̋Bh0\èq[ +l!v6R3CNr\f)Q=vrS7;̀~!Pfwx+3ݗzz{Y{yvKǖ5mMMvYyi%ʀ^[+5fo3¤4ifju; =oxUGZya׭ 瓆_EuGUvז@YCXo9\Vw",,-qAiNg}]{R,uv&PD8QK8 )LoWQC8w +pim[kai-wZoI}RzRK|\Uc:&u8K}| vM!BGs`үײI%4]2q3`VfjI $7$fzlcez %-1Ұ_]m\汩%YpR)>Βs&r3? 4X1)s(Qx%a{J'mbymhyhsle +Y,D0dFc"e 0 +Xb ߥ,7K8vЉv8 4A0G&E!]}`Bow07JKO ,AN.0sQI68pv<8daa61|[J88gv\K-%&㐰Q6l {k VlX$05aʎ ffmi [oŴ`:K k)܊Œ`)TfY@fN G_ojXgjF75!z8#1%ÌtS!fb@@n1FFFޚ5kW設]VMWWWmBGK[)rZ՚MhF^8J]]}IVZT*UJURRDIZښ:4ErL-(O5jE:}^b7Î~i<7̘tc|f̏{3>G/.}~܇>?/ޑ [7&UTTTTc^$ )I)}u_Qs#nK-a5;4F13䄘ptD'L ;H9)ڛD 8G9 n`~>=S}BJ3%HB=VgbM~^ +G-ɫ[r曚첦J ʀ^[+5fo3¤4D43].z M@O#twUI@ㅤ@ѧuݵ%@P"zP.ۈ;\VwLvocYVO}YDiNġ9XfwYHqf}DFgH@G-4!^azG P)Hk;Ea tw5Y2tw%dQ$"4J2 +6b$H&H188ܝqsvjꢤy{ԧ*˞h/3q5N;yq8JZ"FƭF!#}>TEiÍԡzP})2K +wz,dvl[1F; nr֭.BH'&d t :}i +l%XZH^frE!d7ׯsHH_#SO=F!"ڵ+8H ݗ1a%u:.ziCRpҬ,"ZҤŠP?r`.W:.U`W*?:W!ר;;wRP\EU.|U92!vRT .!3(rJ.Ud:*JŠ򈜆UI(S䐓2' ]b+)rBJ +]cγJ!dcJWD)(EB+W:)JgQITB8GpXTz>{r\3r|Ss%' ̌Ɋ Ɉ +O͌Hܚ3cKfž͙"2R43w +HJ HsIGrxO +KحD۔#;.{xZpbL|hb쬐.Pp|,N]1wFvvDq +m6HضXHld_.#oTxa[m:M[@>3< @a@7@{k7xyd,csu'\p9( 9<'\N1w@4l f/wd's,rV(AI"ٹ8ImZ.N.v G{gy8X:,:Y0hkg-rI-m̬,m$ k`Y%܌LB?VB B,$bKsD$^f FFF L|ed̋~/C#k!~^+ +V`Q-_,[lQ-,,>#L_&X\@*A: :H,[),߻f{7/~9GYo3;,D{ba߯7HsLŦf$_S$_H>ҋ+0G |x9dɒ%K~Px^AǗy^_}>^~yIP; +tׁ׏S^M:@^N-Øɤ? ۙe٘蔧CtR隺C>yQK{X𦊖_|tq6Q@Mu=uM4hnou}3 彞Ӑ>Z#no%[7=SSN$Nq}dz'@;KA{'K@{hfeӎdn5!bFh+qQHi.䧏4ӆY5h 3XW&eP#7䦩/妫/[rs'U}{[Ѧnۏ ''1d?ng52CB{I!NF@Ʈnwƺ:c0&!H'  wzj#MA@ & ȍŬfRUbN k$ۀs(t +脌˘u]! _!mu zhEXO"Z$nRP?r`.W:.U`W s_WrJBΝH \&16*Gq9[ͫK L)K1ʣR1(Ts8,S䐓2' N}~qalb@H`zE]:!P$zBŘflpwuㆻIpo^6xM{#{Gh{G#lw?;Ͻϼ3':N>:u?:З䴦X͚ðJІzR#(v\O]+\\#蒅غr)NeCٰ`0,1/lm[kfTMRKS`YZkE6#ФM*KK XYkTj1ՑiqYkЈQ7W7g`UWP)hS5:=Q T~M9."Q˫*UJXP"=B++D`L[FFZ)&+Q:be1L\TPH@j0ZT8 +Uy*DAn!,K)/ Pd|i>B+d0^T#<_.!ʅrrW&"ㆌ#" 8[J)ʒDNf` !Zz7zE\F9L,zIfe`櫓t EDљ ) 2tA,1KwHӓ3RRaɉt)n$$%㓉$1Q$]<8 -6:.2&: Ή$* ("*%NҀ(p],XA ]L _h"߅ !#yD|E,X0@D` S~~~wN̏77 }~ ; ,Jb@_(Ч87GS,>tBCIͫ +oU_ɨoĴMzK%T y%^ =޾/vy͛Q2"[z!~}. ߋ>τ{[^?uwYSg|O2^w^yGc\ +9_0ܟg ~;̅?ޣn +O~nxj215DR/n$I._Otz2KB~N]I}v=mq车wV=>{';ݏGzZLc#]u<ہzx~pƇWŌ =}3ۻ;mu;YL3Ͱۧ1 1nڸ nwX~8n-l57cVldž`֛Gqv7Fq׎~>V9WpmWVL.\kta9L˅}n{:1 v_<;[wwwa:/;e#ڎ&k1ek;|rYG&O7(wxn];~];ŷztq.̥QW..=:G?E|}4vgw+;y^;C>6N Hp=𓻹8 +ė\Ab|ζ;Dxj'98A"oxoޭ,iݛn k3 `#G|A\ό 3AqDT:ud-c ۭլ!&Jfju+H2[.6dD ?c)cFW1.eZ2:N>:u?:З䴦X͚pHN .Qu+% ۓEʢttdEZ\cնWZ˭ʶRkhVYZ*Rj.6c،Lfj[f0ZcTmLZc4-5&F?LT+lD z:LACE`jj + +D5D +R5jD%.fPT*ay,WCN/( S^TuD2miT:D]T:oH0qQA'"B; LWjBS@+V,@)3d +xyRJ`|(a\L2T`K.Xl)(K:1B)1|.F #7keߚ88OB6HIH {Y'a D6(&(l([uǺ[օJXw]V}ܙ <{L71H,Fmb&&Y"|@tV Vـ [ԦHJ*7t&AkQ:# H-.CQ4z|3\EhT: +Z4j$S)4dRPaNE"WE+Ah Lj#drIL.Iq f^4,DF& +PJIJ "!,tbY"L39r`3PLD3͆<K {-6/b w"`4L01@*P򧘃 +eCALb58PF33Pz rɠlIBI(y}g_ܮ yd/D^eWQVL\9̲9 f ܢ٠sfWQɘ_953kriWFILYfaAŹEfR +SrfR +&N) ()HΟOebޔ<`YRnv.Yӓfi@98O%LɘB'>;5{Y GVZ&(.3rs 49֕"Ș4ANFŞL&l)D Ȥ=I6 d BL!ɚ 81'&R18Nf x1N`>bm-*裭1Cd6 A$bt67j#Bê10!zIIeԡfΤ4hTQ"Jg$1TzAEy1 +F`kՑJGA&\Ԃd*L*L"۩H᪰p%qL. 2). Daa(X"HEb8LP@:a8Á\.`gb\å}hlX,1@*Psv}R^l7(#4Hs( r9Ux##&+bPvK b̀n$*y5/}Nx2:.` Cѱc.t +vPIXL5&ԅ%sTC_*Ig 0oQdaŲ$Po~_~3#33&Cecy'&dL] Iٓnw˧]|NɻvgC]hfV;Ptdyg3V{dhpZ1FuX邱ʑ*HFhkUȭSE- +Qj'QZ`'͈ +X@\8"x@=@Yn*z᜞:!Tv ATVu؁]7#2;6{F(^Be<*Ew\)wԂ%o\ wܿ(~"P ݽPQni-H/W9Ow5?{iwsZNxe9*X +i}"*[R-b& FOu7ITC]z NLljC2}n.c#"BBU ة|& V!$kso ؉V>>*>Ʊݼ9rתԍYVp)q]`g%;]J.0v{RwE.^AJ$@!;67!'63!'.ĜuY벒sR볷)s+3s,7+*S(23䑊t"=3"CخYtY6yJ*>LX`k#dq  !C'jM$;2G"C % ayay X4?T&  IV$A~0q6AE>B9~^}=/-#|x{ISpy~'1\)+QsE| #Iw;W3E+'p|GwO7sr;pPnj.̞c;q`rvlx6(g5'fjcen# dZ#XvVlY6(;gLU8x k9XӊekimeChf&Ʀ&FRL1 H`` :400A%ʕ eŊKj,|B7'LsVh#GX"l(Vp:%›NeRb(֔&%ʋN@ J!e\4Ƞ%L2Lkv:~2q20/í +<he:ˋ?_fu$Dx_G[c:Td +rG +a{&Tu_lٲeKB_'I{S}$羄>=!7ytLEj><>*xF|q Jh$טП~,q,``%?FRAv}GC,t*1y7J i?6o~u _ +"3l)׃.fʫ~>tL81&1fS]NfO;]Ufoۭgp5d-y\wx5%C.pvrVr|XcrrHᦪVH[Uh[UX[Uh¡fXIT `3@y@`*ov_WMN#èWQyW;m]K+0EbEE&t4xŔK?nf<0({?]'3'@9iSHYGiٰ#à6!J )sVLke5\DKm*$3m :p)F~PH_XJnH֠\u+]5+Pdv83 a\dN14ۋC\u#ȹS=֤u)¼P.m!j2-g5օkh'H; a rs;V(z j#-82Ќ߄1qxFۀAzQ[GS_ԗ1H%y [%!xUebuTU&T} +.TyB +P*ѫx&HON1PrW-L_?y'x&z$IDž/C??y(Eළ`…}#zj !q'fᯏ4I?σ5UVw X__{w+>_yȣl맯#O~z6oyC~xkRBW"ɜ{ҏ껻l%^u7{u+i]>_8▓>/ojwx>l;y2y|tɤ”#nOƝLٛ~;*}3"ܸ0MFuOZW$}u;E+ _d[/ϩ-hټZզ v ]\Ѥ:Cm~(,i(6@[$ o2QvOa{;=a=ֶ*ll$[&IilZJ -%TQgW5(VJS_1j-u&L*\cUةLzPnїթzP^Gv5j=LUW@Y[ZMFQSREցŕ"¦'eWuDDe2J1% YI^3ŹE Y^-4BR r +Ȥф`Qr*LR27MP +ځ +-(I#׼ĜP:KLJrA *3 Bʭ8e听lPlfjA&,93&#)X(˒3@$,ŧĩDi QJB*I'2da"H8'%& A4Fq%b\[FDlj,*Dc;'Ā"Yfp<(\E;0^P.'8\2!Q( ɉ^Ąpؑ@a v( ܙ6`\M(/$ȞdX~A+@hB" +f3qA~6󧱘At?u`a,fAgPhTR_(oϥKa,Ys֤.F{1ŋ.y.x-,Z䂧xzz<<O8CG7IAsA Ɯꫯ{s>SP/BD| I,Cp7>˻eȏ铿D|Tzq'wپμ-pglo\zz# yr= xijk_O|~$2%&dǵ)1m|(VpS{g>5s~WKlGmi{ug_^q;ØTpshΜ +؂i3| nĦNn0MN7<#j>8urLÍAS G{!׏Ù[1]=Y1z8\x0c| t`5Q6U VP0-f]VT~>pO+מЯ@`fwAh=}6cvp < hK3F6 +7f5sj+zg d6㺶o7g;g<@Ag4(`[5*ٿ:5fllPz;}z=1=ZwԯClRZ[77 F]qUCQMTl)i(jj567&Qh6M& !b1M8`mA9R\њ* c^kں:BRH΢F(kK(jJ:]UDUؔ䕰슂2PV(TFi>$++v&8$+@ 4VAt]jAN|u>#JSIU榢 JA;PV%iJPgWT.(ARe$Q Rv8y L"Ȅ%gd$eebYrؙ󷦮47a$;YJzo $EEvAnHRѺZ+nֺ/Xt:UNgӱ2\8&1}%|}mρA,[6ȔN22AF' n-if;-5OޥA)6b"MBzaј c4o!M y: 4hQ +`6uIdZNT:F$&LHd75!QP;؁$JyH(RPJJHr7A(J:|H& K!!B _$ $1n@q'fyb/ "''8lN\\\tTTThtt4Lj"!QS"#}s Ep?B aa~BBC2L0Y'8 dBa`㧰[dQ"E61Rh!ⴱ'Y9nf],N ɷHtK>M!YT:‘3Td"𛃦؟'JY_8yCEK gty3!怼7P.g~{f{~}j=o167aQ')>5צB}F?__f/ܠߩ>D\H;3!38ۗwC%1E/ƒb~xQň|=t&;]9(e]q̓~WR}uzr[ʺ3b8:+ss?߷aʡu||׿[ko+z֌zt/ؽEH؅]T|16ھ նgI=3=#[>$;KBZ1rzf3H-wN66>EnB󭓠 ]o8FZGh~Ta `5a~{/Vjq!+W5^9I:@XyGO:6m8{5v76lbݿƎ9x4l_DYx6ygsnA rkvsen iu,6tA=\;ŃD)Lް_ ` 6̺r\0O`.GYMS.<\<]8bG!!ti3{ +9)<>hN0@kO':e[O89އB7B#{>1x8[0Llá. Nrة}>ޮs=Z`jCW[u>ƓήMZ6@}[[پAa[Vdc}nӥOlҲv8MMRR]̜ukRkWVIW4U4-o+k\RV\(gA)${^ccąEEE1#""x"HFTD$!EFzA+",ܳ&~A &$$dV1a0*8 NpȄ1' +&c#dk/Ȑx-i VKe٥LiK`g: qڣ\k8RtZ$HY:dHC[9Hu7"!To#+|5uqO@dd addXDQSEhU,u2 +Bkт2Jժoޛp9% /y^9s\ܫ<ꇗӓV_? |-X7Dŗqw:hew]-/ūA]1цy3S #>EfG}7=O'9a;55O=fa/S`}QRͽjz.a|6SyK|#xǿ|9>PׂJ;N掛CA 2zgpghYU/CaIecrLv9 &#}Tb"vVd*u.-\ij Ĺ_*-.}P'yΚYGꢁfLr:2ZU kAU*@P0y-qcrA΂5NHԕ{rznzC2tգN2GOrO%C;1iuc?/ML!& QT ns~+/>r܆GVo6!Y&4mPIZ ͑9r>YYnQA T!/5 z(t6A|Hg҅h:| H|siC{@w_;\BH-M> AAri·r0M?s)MWƟxe`_.)PpP1w/rqr· xN zUÃܬCnT^pU OB@^a ![CAClo # `bhHn+H Exp}5p^~x"O_CL 񀰼ow/yP<\ #1 +E<e18(W#paØlwg{7twpqƸsE3@vN. [#s%N G{:k;*8pWؕ~#*]ՇCaQce}I̒Ģ=%)Ż򋕩T$MUTVV +R UJR(H*V(KrJIJ\N>PSQvfR9e2^ E9>A$RTYXb>٫2dR"WR3ꐓ%[#>7L(4,LJ~XLV>Ptf:]]Ծ4F;gnPĞdH]dخtHzrzhZRTB.xgN&;B + +3PpJ\ +H!@щ$D$#򋋀ǒb)x Dŀ|Bi`QHy$,"(X  aAta 4$00 !X*Hʙ| +@ "(~޾y O=~D@%: R +r=bo=Oȃ)E۽݄L\܅4 gOwn/ O'Ճ!]윝\mwh8lVG{g[ )CCÏb``Imͳy6ca:hj?kx ج.+Zf[R\ "elp0ڇm6ŠLXၖH5+08(% %؉뻕JdX;, y$WNrޭ}$xL.E?+ #=mڴiӦ!џ/䟂z}E鯋zwgˢFz9JZs!u`s/O OVO=͗,OYZ~:ŷx8ó ^؝3~__xJ#Uŏ T=*pA4Rʿ])['\R>E =s ݌v8 )2ӥUp)j$vB8H5A9ql'T'@-xaBX+Jh!&R̓ävRpSrTO~iXwqzq. aV(.kc{27.h80Tka{wPz1{PT/KA S2b&Qme2ޅ1։r@[ +x2iGnC w1Phoi bTkhp5x>m7I!}N”QzoIx7HOU7G]'q;oh4vJ׈T!H3ZoA -RHutMWU Wة&5"HiBBBPC + X@]}(rײ{׺{+wfȄs$<={3osG@RatCXhٷD޻8qgB-"NwBl@vo⻵ ىU*=ym8tv}kmkx3lLԵ:ٙYޑ϶uK <ʊ%:[Rmk6W,6Sjɭ6bWj1FEkc)Ђ1WXpJPeҘ1*΀ї =I@PN)2J4teizv04dRJSjh$fLפ5 NMم&&W k^H*4.W7,sR #`Ԃ몝pVTR*\ r;+ ++!K˗򪕰jH:wI*9U*BYvJV",e%/YVTP+ܑ @RPZi$PB2ԒHqbPJQn"XvQraV!IAf $*e@H,$R*9.d!̴YTҔLB, $$BZR%dQ4{ba2(H@qb4Nb< Q ' SaN8~dR,JDbLRDbI(*!.)2>hI ` +D}EёШg!h(ˆ0G(jaآHEPqBÃsCCHa8! C00pL+A>24dOAH~~oR?3{%|||ܚ?{d޼/Uyyy +Fܚ[skn}:hh?4GO$K D +HqVR3EDJHi)R)g{x)s4yf ё Fނd68-&K*I %3eF R1BLQHZI3Äy&&?ϙ3gΜo79Xv鿯< vsǙ?^fΊ";' K)O3>>OE + ߟIB>N>L=?{ps 6@GA{8k{pyOۃvHiqzn n;r g;J˽]-s6GOo9`}f#N?rz[o>EZkO$io$a I]~@n I>ÎiǺ{ e]B{ĐыΒ0Ý (F¸}^쀟!!%1dxP@AdJ(<'vT*7΢3\?-fBS$L;b;WN%̡bJO`'NH.CvL;ێxTp?,PeCBA2r{X3D ,;ǎ}jR^'v8%98A'{Q>rtȭ#3)pB^٤-mCm9n8N}]<\R_ӷENҞM|va=;Jg#ϳ |Žu϶}-m oIV'r::um +ʼfckYc+4X-ufVcXn5VۚM:SdTجgTv̸rʠlm*2J0+YLҠ5̍hi ({}IWU2C4F;EMP2cCA)54zRFkRuL[BBޜ?Eqq07(0 su0 3 3}%7WcP<94*- ފH-&dQܵjkطixߦ{x>toS՞:.% Ӻ䢀 Lp\D'L&8Pf:ɔݜl&;ʀP%m0jKa2XX&BaԎ 7$#:уx6kq-AB+MYF@ar001FXJQīPF˥0"J(2^ H42X!g- Ha4"6!!%3bba3#c1=*"MF$g M&°鑢#` gF N Pf@p6"@O$ fp! M!O2|H S&O&xLyBh2~&|3~~~^}4 5}&ĉ? &__j3~h$A>NcS'q>C7m>n=#2I&U໴Fw*eO~zsSE8,;Vg&?w,7g^ࡃWh_'|}O7O\$GNԀ ^>~'I"W͂>^(q_|da ]Y|AcLˇ^y?b^{-˂#v?ANJ_I},8,t$կwp΋j;(7nĞ8[Þy-e0z?V~V  6F}(6?݌CґV?ސzŏ74؁!݈eb5I}*+# \bR$Bf僄Քy4Cs{VѬ$̹EIi&ed9a} Lj}2JٽO}}<9%b&QGTRN2 PFrap*TNA!aJ,TEkRZq &U)Ba\=bLCtBA1@NH'T,I2@"!LJIDRX$剄\,\$:B'.$BP8s||1/O?oD~~#;:>>>_or>?%/bxxx|Pr߮@,"còl8XFl0fq8e?6VGœyNwj;ك_sr_>??oKw'9"zx;cy}l7])tTO*}7)^;))$a鶹kz,!36 +I|T}Ƌ;#ϧ1ccgg,^=B$AxG yXw#C}! + #ؕ=4"ڀǂ#8~]K݇4Vh^>PhPit(0~+&PFU|sG轭疂QM9Dt+n: +rʓk WC(]ԁĮb eZ2Ѿʫ;NT|uv{۶-l}eZwP"mиV|һ\j԰|C(;Zauwϒ1JZt ΙEOoa֩ o mry| 5 ڏ60X?QJj:!Uѕ]fjRt$\>dCҋJ.t*n;L)xطBiJiym{*kΖW2}-:ޅhvG!yq2;I[E nLϚ fnv)u&Mv:rIdӕ t Mtx -KmGL_؃Nv!Ө6ggLΩ&?\Gp`踰cMFqtɥFT{dݦ!2:C;LF+ 4Fu8`H+}uF{3XVbO~[tvm2aڬwm2;76 g{jB);6( (Mjn +ߩ `_z`AҰU;h$&eCXpzpVqkiIl pN~[i֯0H;9JkV)BUU1dW'J-,_i/.^5YrNZRUR1@邼I!aysa ;<ɝ_T)]:yJd}R eΜ^2cNvLDV!2N/bb3mvF"2΂g2 +g.Iڬ)3 3̂4RgLa2}2i,yڤ4H45䩹¼BXbA.M~,0V3!a D$.aR$+$>?3Jl Yy܌ѰӲ]JA&,&3'3FztzR,*-1FF32'[k +HOE&Y#aIK91.F`&k,0=>.*.6ҢD tqfTLDLmEH1È"~HSIaw0DBMz3LMPaFS&J}80HcPBɵj@)5:ZS9)r.Nr!`R"&Qգ!VT0n^?C7#z9 6z(x;fZjH0| ~6kWBX/ԋ/[CG +0G/>˱zEj $3 1=wRO;YȓwNh 1Ʋnu@=jq x",zX"&CN{-Rsk;OUbgwk`Z@CUq_Cնm=Mަ +e_SEaj޺➺]ue(eO#XQ5Q#] 6߯?L^ݡ{WqQW?2nAKmU+!سj7Q^ˏ]j;QwPێ6P?(bT3ӨbFܒ}|hC6]n,-i[Q{n +mab ݽb ?QDVkBXzDz?HKq+bml,٠\EN(*针znX-t<~NƳȵ3BHi,՟SN !?[ +򽐈\+ A.tV+]8!"qk(:\rR@L@.xt]~(O(4CN|Ǜa.C$9_C ፩(Ŕe{yGKUT: *8Jc{0GJ=iKYfiI($^'sw]1].[v$6L ٺ|+2f(3)NWf)W*,__%SM2- ٔ\ۨf +o$Au@@K7f'a2yk9DqדX1G,2Vedg  Z6:3u )fթD)"җVW-K#dDH؊DTbEbjH"eV E2"Ųe89@,'d!H'&d1^4><~qX$6LђP@Th4?RE GEHÃ(L@a8"8L*% +B \J&D @Kp`?7H JR'@ɼ(O7%AlF-@|_?wzbÇÅ}ݽ=5|fz{8l""7/O`rt9{`yXDn.8w5Yswan(Y(rA1\N. 'G3LG3L'WGg7{G'N10Zd ܜbinalmie%͖ ݧNff155}b݈s/iy,2/̢E2 e(C}u6D1)AN :%VFDZS₩-%VJWsؼtaʙF!Δx)1D!9 ')&LY]xgIӓB\GrD4/}m?38ϳ@D32&WS`&diq1{* + >s0!'r5ZW58hhx?*ޏݨDۑRo1J~=-G~wUF8{9 67gC1 +.^>c?+_՟rz^ ~Qjr>ZpU{Y}I^ճ/Rl"K.O}9zBx@tCwF;Xvw6bMca:|b\iƶiRh:K;Oufgwk`&Frj[ JTqoSVEu +eo]yqO].LR}(g>ܚGARL =P ,)@TlTQE\Ti +HQΆw{wdI&qQ}{xwޙI!;C,V,S)e+Sf{ɼݭr1sr +P>Ewp"mSJJd1JD|R6RK|9:CKRd7)JGӉqQ_ø0shXN0Zřp̏a7!Aⷹ6= Q'ՇsAo#&zpVtۃjc8؆vv 2܆BP?؊A} +@W0v-8QۄiDä́ gtՀ": Q +ش׈iPV-׭U" WP咘"j 4U44wePZ5Tr/5JkjF.)UqV)՗8"u$'bb1RuNvWJ\ 5\kJg:qI&gmsvHeBb==sʗ[T-:g^xBddgg:U=H?8|$^z4>W'?/?#ML~4Z/#?&:pL-2fڛu(C"3ӘDd|-'ӓ3 K;~81IXC@) ɠCД=f?֒I;HH|p?XP} 4P%Ā +LAqQ41q 8U󋍌IdO 5?|âAҨШ+"0AAa @&Z# |%ARFD7ˤ 7o$@ +>2".y0_/&~ZROC]G#z0O7ŃaO-< s8JPu"vXrDH+Z`Bً]0ș"^(uu`d"$9@vΎ0:+';G!3GQu6hp#vZۃ,ḽ-UlPvZVYؽ˚s4eaija٥fI!1I ;&z[HΎF[vF >zm߳۶m ۶kjх~Oe˖js6gs6gs8{Yp},9f$ỉ +8^\NsG 4AFJ2N'B~ך#r"}9Ag/Cpt +ѫ+|7`TrZujK__^߬J d?R5r*J7mڴ/~4ҏv~|i|=TxzGFyxc>֫?K ĎQ{Hl?_? &߹~o\>8[qfG}ujC%{ȋ;v/2Z]!AB.lP )n[+=0!<>n:e{~jNji$S.Lg[ʚʖOLԓM7Qw|f{7H+QjT򗇫 W-^W[T(\]\PQ, W:$gq"gqTЯR#ɓbIb(aBqaԲ% +_̿ZdFK 4, -a/^(8i. +jѢ,,\qBBB>ʂ >5_s(DAG(% +U. hdZIb ?=7Νד須Os-D:?ܧzy/ n4Sp=CAB~yz6v+M +joG0F :ϵc+POGÿ:~]vo|SSîc/wF;\fܓgN \W?}Ey6V9Q{>=O mwNn'P|Znhy z^Gt7^ +0vgmOC^Q W!+=#yXp[u[AFy4q4vl<8>Vuk~feq2;+W\K ^Խ~<~xsuv(3ȍw:oc$7k'8BBDeC9!~}5w('ED]:x=+ ! x~&~ uK>vp{9_:.ltt7W 2N0rhE + E΄ },mL\_le6Оϙݟ1ٵk, hfy&yG?oQ8/yN@diC}Ƚl>W@< +*fgwZPOZ`75zk7y7EǏЗGE ]"f{-hhvvUVv;*Վ +پU,sX\e:Rn;vntn+qw5vCZGfk "Z_fhbm P ѵ5[@K#a&ڦj+†a*l0ت63Z5Ma}VmR[k@ZRVSPkƣ)5#/_t? +KYUKQiDU%P@:L_70 &LgK}S$Fy<-ߨEAҒ1@d(41M4XуD:n6bPV FP$/A!(PkX:~L QR&V"\\!V82-y"?[SW@II $$!ro" UEEKV[7p^\ +SLgƺq:Kuysc.s "a>y{ι%ӝmr2e W&8d1;&}+-isVeA9.XDG4%ۈ4j 3G$hH2Bg6DS*YkLMC+ua3h$ S%k j.!)!)짧tZ==LIkպPhaqj)6AI)rUPg#S*xE d* +B(A)e84./I51r Lh<&2j0a PD",22҇|&9B&YQwF#G^xp#> +n",l|\p8*T +UB5qa8ԣ +r,;`aN V ]Os||8Kɹ)-v+8NIHPp-p,*²,oWSRjߕȞ=)R1/I)/;t髇WKy}^=(+y}V;o^ReJ_<~H>'~>2XxswW̻xv9!=Xnڄm!~W?߱{*why[`4&;0]v{m}pR /hQ7u>σI\׍&kW#7z;ntw>ڵ7nyx]^6ط O6_?IYkvY]=M땞W!Z~YtBVӚ/itJ +`Y5^81 p~?#`)>o.,j8?CZ^ugvP֞>pz;O6>?S|}3v)Sԭ>R2GDa^qφk_j&:8OI G.ǭ.\mcVsG-}{duqFB;}@|s!fw.G}S{͈{ĉf[F;$EPbh_}iFn'89ԑfqx;ԡmfK$NۿՌM vcٳ`ݛL:vm4b߹F 3b3ں6%7u߲4{]ku@ +޽&j§kg~ca_* _ +`Yg23 ߸ZoZ^S]_i~&[ʁ\hWޱ*jgڊE͵T/h^R>u~wIcR]4h.j/j +yA34uac+%) ꀆC15[6&ϣ;X:\+k0yٔ4~P317TeST?QR7k3kΘSX7FešaEsP5U T~&jgC̗0)o4V3+(3`93Ng@S`əEdWW* S*aUʌʲii2*J+@L˪(T2Ly SxY`rX;244gIN(a\(( ^]K*2Plx<bGDD x1Tx(arpޫP*T +U$ I24XC٣|r)2X7{·W +ne.,(*4Ev[Ċ-&vE v &F)J,A]Ͱ3+}99w~srj5n6rG$I$<@i/y"J.A6cZeöF"!Hۼ~CKW[,W苾% +~,p# +@'`ӰѾd#-CdoFp1 H3{VVVVFcjK2hZ}Q_Ի*K0 LmJmћ^9 +pip&u싢{ .CƶdsOy}y?$S$b^~Vf` c^KX %`cv<¬;ѳ;?v +01 +q 6MX͙F < m'@swps)P{ml0{\E6p3fvCܞrʲ5]n +4t77>ްɠ W]vPvH_޶Kb}|6ۭrvkw*bI`-b6Fk$)/:Έa='%i?-!zr6JI)ɕS$%~spḄcb +)sMGTXk"8ɘ#b"rPę3$HN뙜+4qa?$'~qAn!iѝB]bPءBvQ4LoP1ؾzcL1? =[fWz$7 HvmOsCY;և hXGw|/D 4n2Xƺpq׊ kŘРoAR+G7kRnYn][k1\Ú@BjQ]8V_'.T+c׭U׬Vzmd׉5ҋtKKE2 +Pt jt+tY+˫UzJ\YRgg.3j:=PS]FQNvU1PZ/#ˮ,ZZh1 |+E,PaK +`Z^^PbNZقb*t"s%K擤ϛ uQ~9ڢ S axR8]HR8 yas +fy(2+!?7?7g7'ULYayyٙyyLbfM52+67 I1@٩J/`,mL9Q0UzR:eZ|0Ej\ORh$˓R`dXdbLE"&I6Kh`8u<,2N/UL$1QqX%U,L"iT1@4 P D'djs"Q()IJB`rLSАğ,4R$ÅH),Xėxb'Â"@~N0.Dl8B"xAc^p8E?dj'( ϛ o L?#X5 C}|y4r\nN6쌸 ٸ8 ӝA9ΎN99YqrHɨ=4fMc4mv$vvSckk;%666XX +DAR3IR$9 IBfadxOVr F+1Br|%`)d', vY +_\!CrضnF*׃z7P,Óh*ldP>2WySy?>> F g?Í   VVVVoi E18A=T1^%cnĥ ?Mr[P?Mu֫3h'a'?$^3"ƌw,:.>i<o|}fp;f߉v8cn6`axz;Iw0 5t-^])SPs0PWc)|5q@R鐄R^BulReU@haApfggfϞ=}MxeXv~Xs>y潙v_on8$F͖K,q`Aô\gacbiXL<7j0̍:NW ׊G^:3 yFͶRRh7hh[:N>^>Rtpv`FT:jЪZVi[˵faM%~Ax.Qԡ)4[եU+kiTJbdHBYRc +gبA1X6c"5J7kD#e䶀2'6J}Gdm_[b7EkztC/RńnRQ4՘oz=r[ua ^Q֠ti(:U@ݽ@2 +R)PFC.w. hۿcܺ$0RQ (8:Dv!m:Ǹ*:*uqqO#tK:ygmg|h8=oM__!굢[ 0:jx@{=ܱCضv#-\mSƋR_I9[IC0ky"ۺ_F]Qw*Qw2^{*Zx05D'XFhzڑCeeeYEi +徊\|eJ%H(I+*:H-'Rˎf'a) +ג# JIXEr|<#D r +ra9 +T6N*{OnCrG~H`E:nI$up<-2Xt Xa̽QSHI'0SEL!+-8 ?d>a{BSqSa!{SSRBRV'Ig Bv'AcpY0b`D'r1C+& !(ITX4/24 +i\PxW`Qx.Qx^87l84 +„ Y5G~D|d1K*yKD2, ]O<}~ﻊk' ">B-0zU<;!ƒ c{y`<9^\߲e˖?A7 XN,/-o c})tokzD޼|~5?e~xM?cohz6kgg\̼Aֿ6ݟl/>YMYg1{"XXMݴ|ux=ѳ'F-Mp8c,qcL, `~ F\ Q1\J~ZHŰ3 yFͶR\;Nin,=mi=O g!.N+檩Ur96D3ÚJ@#x.F>,^ĭ3W8 +nkzjP@hSܑz9]pDS% Te?쬀)c]+:2^A\,udzlU2WծSQ5*! ezg5s_H/` ~@LB*lبA1X6c"5ɦ΋d{:Q 0=mm} B":].ڰ36ءn{d٥mY9Uٕ9MyUŠ5@uY9)ZXS@WFJQT^%/KHIU% +J%$UeqbB'*TN.$IBq^Abq^!,aknlCdP/Q0+,4rXev>EV^""N@l~f.M[噹02EńlMωڒIdNj6SFEI>+QDf +i,|S!6&27&P'Bh`! iiRBRħgR(B㒵 IIA,dĘDX`B4=6lXOo_\xRFd11 EE|"C`!EJ"3DÃaҰy@R8$`^](LOA0#2I +W2/Ѣ>$O .'0L$<./ pWI8S`x +`^|*w:7'yu 9{{9yi$]=3\<`\Wgppqr;\]Π;灙;avN׎:0#lj#hUsqwl(Q0277g֮].%!à5RYfILM{5Ɔ/ c0ZMz122$VVjVjVjbEȸh_+ρჰV̚a凪'v _G-ZfY;[VbK͊@̌kry,~_{,}ͫb?~ }!^?$7OG1R?~ٿ!=q?]y4J+V?󟧁1 \wO9PiC.GEC/r4Lo{׿вwώUgZ_"b~gj^}ôb´gg[KMw7ܴ,Hϯ ӫjOPLJg4*i +{{k dַl0YL(4{pʛj 5`@DMn̢sbsՁ'29=zOUm6F_SY#:mwp@::DqTi!ʊDT#2;Hi3X(-&+HQa冊t2m9YS&5 )FfbLR&ƨ3"ѩ qRHBVhTrP#RXL *QJU0 4%_O(:?fѹ0Ez0\PIF>-dhB&e`_" +#=PtGP +/,Q VDP陙TT +jV &#}fּp;IIOܴ`sMJ~?gىO:;ٳ +IM}>)))e֬Y/LLLI%L$dUʕdEKP'dd!q(b;!R%5Ī\bFHNIVMN&UkHUTR|5;6d߹d%_ߛh};Cy??D}%ȏʨ!_P&_[B?0̘1c)$AI ϟE#7,>=KRȣtOUT?~&V9⇿ ?y>{?K$͟/T7!;YDR}E{%~TB}nqCȊ#3,ޞ79/W7Iu56(˫\aC_fE}qeؽK $3E& RBn_gܞdgܹ gL2Qw3N03MPBnr6g|ғj~M+nsۨ[ݷN ]e7C /~|3j@7Fpv"^^9:s05:L5X 기8=(pnoĪIdob7fyDe ]K؃Y6 cS1S{;N 8p1w2ie΍['򍓒4dQt}YBWޓB.@3QO2KR"9c\ܜs(pLĎȣ=$k 9{H~er1# 2nOKPҜP.HsbD%G 22ޱ"ѝ2b8$fİR1л$ +hV1dϨ{C,'&dF!dF1#"Bo!$@7 c ! C(BĔ7׉Ɔ1kj ulHĚb\::ۼCۼEf-Y&r哷mFHYC!MC%U枕U K˛z[6-Wtb:VAKq:0uKX$W7E-h =|@Usp:\=DmAWw[ :[q-~"bʏóۉMmf4Kj5zAXz[@V[bi,&RRLA=M8xMk0 sCu"z7fQ 1չ@F6Pg Վ@붻uLf iV"84UueEe"*ّR{mqX0Z@rCEb +YԬ)uxf#3j1&AcTA^ T8tbm)DQN!T+D*FAj)T(*S=W % + O&CD2W"84H|('b +%ObyG,fG1E,4㖀<eG0E/҃ +5uqI @IC@6q7dSMQpkAmk+.uwj-JPغ%sns/7 ?4|sQ7ba,,RC!E Da'(>,dQp +ΏBnd9+44d2$dȴbR쨁*8o;^#:#N{G<#O@oTiT'P(W|5s +dQ$GE:C:1iv<;[`\1I÷q>1\-dXtY05SJ1&s([J&FJYHdGj`\k|i-I\KKwc!9-Fo30 m/)Kvi0@n,ņ{zH?Ux3Q-Λa;hڢQ'ñs7ѿ|y={χm&)$'r/~Y2~4Bn$vnfYnA1??Ż<}'nZz;+f,Γ1 wƮ bF8=*zt o2(0/ \,L`$s2'cYAvbFCC! ̾=ٽ΁wzv6=@W3{:{}]$kyC3n&چY}paյ[6C:w\yXdÊ^F.@oqXxhzF[UaLC͏Nk1Z*_T]oUy\sHs}gW4Xξr^z&v4s +s0?P<Ĺʣ)'rZPU`WN{6xJsʣK}tjҭ +TÆ]Ux\~J +?]< `;,9{HΆZ28I>(:(+£_xv~'wWG)H}-H gAavK d}Ksp˝2RR>fۥ8I8$ޚD E"A6;.jM*C$vu$:D,عY}s2omxVskgLN#g]g^XF3{͆|aBMU-.Y[ZvAkMkYۊ֒u-@SQ[u#T^k.mk&֕6毙6y%PgUR\YWʝ*کxuJDEב)-\V b;5uK. j-'c,^_U1Aed̕ ʗ fZ` ̼ϴlҲdr]D,* ('ʩK*ē 1d+(+$(.+,K+3!}KZiA)c2@F^_ +14RE0CLsR r 㕀I1xt:+ <qG~~phOCR? BV|嫙` ]Y/@r5I> 1PĤlQDZrͧƬ BZFkxV& .6Fբ +@5jP*x 1ӌ&5ɒ#F)J"zR ꅈwJB>@_?*|i.ϲ?h3ײyRparlˢ ǝu ]_TLGӪGvgAʙ.3N<Nu nBlGj@PUJTX+$ Pψ88nɇu(*Q @JM%u`Z>ШkE}-ܾKr +OwCdqqDbb7fW H#ʈHidh'"$$  !GKCP`?0H2" KÕso+"?kyG#)8bĀKL-yܝ(fbx.}'fzz4ptG2arc{xjqP,w@.L6ٝZ 'ȑꎵͅg3 qpqblwvrEpAv]3ɑaÍc+ɆNfaaA275#Y%JB: +=S-zw*%bf355]m0|۶mӭİٲ֭0ٲ㘘|26k6k6+*"PJ"(9ے(_{)N0_H_G-'(~V?R5B|29ŸN +%I;Q~N].q"EHȱ2I|$ƗIq#EKD)Z`Ve6םfbT_/9}mv%?+P+6m*׿>PFVaعֿ^R?m-~[$,jq,I埋> 0s[".t?5^{v_w/ 0$ bc̯P d${X_{} .fcg]~z6r#gmk, r;2,O뽘`RO–&qEYu{@<Ĥ<<{g™t܍le4IJx>BEX>vvԙ(jD][!( Nsl ۶if*?ҨzxAppv,|ҙs=Eݨ:Yr thrWTSALj5[Հ*珷TiUZQ'1NrGo~F$gqbFH> :Q=xUJa%u`Z>Ш׊R)ZT}TUytxf_j7óz+ +lQ Đ^d]jl"6"-jÌu5F;ńF:DHo5EF B%Hh|5)$ (ɽ)K@zh4) %ѡ +ئ8Vpwgq=7s,r}|oLIVdb HyOK,6:Br x|׮$I j8>!18)A#auGIęAF"p҈d@ JF%Fq0jWLC:qH!bFGkb":1@Can1g%: }bޮ`[(8ҵp@AOWt۷'e^LmG^Ls{AQ]{]ڢ:MӪjiͪ:)5ҔVMeZWo:TS)E*u$ˤZ\mGUYPTfk*Lrըrtu۫dnʮV ˪)eZ T14XIFr.t;eŦm+J囖H^RDxkZyIʊ[Qie[R63Iْ_TC6є%ogTG)%)J(ʡ%e! + `,, K77ۘxP5DjVfâҘdYܘMDFbJ'D%4 R iT<9.]L,):41*IC') Ҹ(x$6AD1 GK"âFȣDQ2Dh.((n1zaFd%HFD$b,IaB2P ,@B EY/4oBQP &>fA-0$ 0`D5W_ W~>t|{{KE&n^n==_>:w@y.k9k]l0GGGAőc"282YۣV~ _f Ζ}~ ˰AؼkkbeeZ=g;N@ 鎥ycH/,EᆥE bK CXjOmRx^yo3|^z:Hub8K±ԨXR'$[oΌ2"}1K{[ȼlkrUˋTVY5bv'Y{[HO{jժU~} bEG/# p0ZBKg zA-㟯#WoUE},=O~~>˰^4<._q{)7Y2 3v}geՌӗ3~qa҇3?2?;R^p~<05rfn a[GOk|rɭGwڹë_@A)~z@T?h9B"N&X iV'C="?vPc 6_XD707Jw(L-LDx_'Ol, +t-:忨3Pv`XеGgWLbGGf]%EUi TeU{ESAGNSѨ)5E-556֪Ɯݦ֦z@SҢi*֩"m}SasP5ZOe9J,juf٩< %bIr ;d%!{YX=VjQ=UnZ7PmZ3Smu:H{/R=sN=s޼y5筱5,drWQֆK^3,ɌWSXk'bl4Aj(>ˆcuʲWZd*( /Z^K`)ɲC2esdԖV1ԔTͥ ,髋+A*RWe ,(' 2RBi$J8S)6Bԅ9 Ɉk) &)IY)2YnF) $1dF=#liv:D͢\qFZHdID:U@t\+Hki|O*FWJTx*O!pJ +rL IHȈ$ +IR$Q‡P +b$D3.C| +PpnIxP 7̓E%'p)p"1n1QIDXtbD\KX[h\$$cbfbB#c **"aQHUDBC=ۉWV1A!LZy}h>>>4:‡Nzxh<4 \0||r2j9.l<,,]~,Y^<<<>ŵZ\ %H ġ4AHe b?tGh.K tЊ: 0A'Bā3DA:q0* 4ē6-G~ws! [32_}*D^MsOEț'G2c yd' xT??!o*-ZO ߜBMF'RR>Pv׏R){sx5-{5 0L nR<RAc桐^ '={wG⣗dCIwxXI9w@U"h_*?MXI;ݻn,܉ɞ!KbEGŗ s;sQoF;|7Ed4ɨd܈$_pytmJHÉ@! ӗ'o.KUǟ+h۵Ν'Zo]@}5xgpG퓽-7ƅۧjm'/4LnGi:yV"M7vli~DWõØOIl:ө0Cv6zpu|26ZάGs^rqdxva[!녡VLhkͥVZ6\32jE^J`|9a:{l29&DM.gf}`\?% t$q '+ydq>cB#|Ry~#BaK#|a@G0!A>tf9=g-ĩ<}|{y.^.ʱ=MAD@`3=ͱ?GPͱ=ߔB7q}Gb1}i4_LJ3h:l + GE&[L*_*6)TRTo +BRDŽB@0~/oxyyM*O<OP1ZDH؂dk 6H"D|' H2 _Z?"prX1<0_$VPbLh{S~}qhλ(滾>3g/Fqp笎s 0g3y +4t㔉Ơ_ܺ qt s8 +0A]>ntyإ&#F:CqG̎&Rی Pށη>ٹCF3(t5{nȉ=ۍaLܑ&t%5.}vj46|iuߡwڷ]c AtlО-zz]kb49M[ N tN;h7G :5iM yS(U:5ZxnsTk`5n2k̆ J\Ю64jk9~:q-ʫ߀rךTU>̊Uyk/)SSZ5*w z@V/LʲJ ϖ8e(,*@U%KfTW+(#c +2+ +,!U_ +)+!Q<$cbP\Q^(xAԢ)E p#q# +’1Is](5b9$/0)"P AIrα0g>ydd^\9DfJ370{;͌0 fg3#mxaQCQY)Yф.@љLPTL i4wl c&%$,NI.8,$P=2Om7%FM#cLL-:daJ0GlāИ!K"ƅh}"f3Gj#M#jZ6guݱ4SZP bBנ NmpC/jp:,L & UbTZ\ +)dj0fX-ǺPTIBj2b\MށD +YH(*"X&QR/B@,EBO1b,zqD,r+؜ V c):`мt??)4?}:̏\>n3|ؤPIQ)J +ˆQ!5<O}'I "6)̤Qnd<^hQ} O?'NM]{ +" pNVaDw\>me .P@kU!ȾV ^7yŻs.H$mǙf>;͹sߍDcCW&evo ?>|!{$61D0᱔1"L5Fe ̇Q/9#Իa\P>C;C^669Ƈ$:c< vhnvNDsfp^ys֖뼾۽a,6;zMޘo}%-WQHXsg %&mJDi0Dh&.) ouD"aI )q حb (lلO)ЪQuġ6hoŮDŀb#ccDkDO_QH.|7ju.G2ZZodY#H#B"7Hت 0$ :D + IJBD|eD> }EA a>  ??G2ӗGq +a^")U"Q^3 ;^ Od&b'IOqO!9݅\ 3_b9u\;㺱9: )+H +b:q]g"+l'C r-g3Xbp@̕l<{ +JXΜ˸3lJ&dt{N"YY-,^ligK,5-XYg9%l"--\и,`~F ϛO2777!aiA͛3332Le*S}epb,!{.'ɤs )TbC +dBtDŽx1rF#Ph +'9`Ryr%IA"KH()͒Iv/z˶|5,"<6bz0al8X^S|'r?}|.g4v6>@մ~4Fdƨ Dx0jbbbez??GTCL5+c0Ƈ$y;47b9ɛAüB7xWw=Pq'm7LƢ,1/\3-'xqӑ鶯q7n'r4mR=J(ѓI9M웗Z7u25dCrFٱCm)ctk{ϸǵ}:Ba;k(@h0ُ-h⪐̎>އQEB+>ݍ0ȭH7j\`2D5ԁ@4BPFiP.[ֵ6dV+ +oA WQ)Ho# +Ҁ@2zz$`,PG-Bgu$k (Z-<|VhMU|Kgx 62$@1 QV;ܮWiӒ$fVBt0. 4Cro^*7"'Hfdj.3jY7dMc69:ȵ?g>gݻan +Lc *bazQx2vL{P(v7 z`#(è.!]o2DAv<ԁ1N!1JjtA7آ]oG!ZQH ڌ2Mׄ@zQȕB u# a:QY]#1IX|X-jA(V h9χ4,_7U.,>x5VŸUTvǮ+=U{LcןBXBHF +^l=v;{q8@N5uqfCH¾e% $@ a_ ;**Nb EźQ-Nδ32 $`9<|s{!Pv%Ql퓒7)^uLfUoo6to2i6l: +MXWwڀv +X4=6jv5ەtZ;lefV`%i7hqfz;UkCV׌ӄcx-&BFLJoqf&`0[x(ea%`rȫq) +4rMz"rc.X0 +Ü\}.ǀR})ux95%UDdŕR +&.I40Y% +˲+D$2 Q.)*U,)2 $*2PbMfjX&OVTsR s 2yQpY*`|XJHɊ,0WJ.|||>,/o]=A$A\' +~>ZZx w7PH"zD $IdR6Nh$ ]0ټuvo` wg;eJ,IadB{'$/ǣ)nrɽTJ%޿ )Gڛ?o>O/AO/ +gd<ňg<9~6Y piڊ+V&}RhqG&ހw83ޫ.\e)^=~’!|=>^/\_`Y?oZV/?~~>}Zߊpo"l.xpצ#?~Cϯ!M#^T,x2ԥG3^e + q%x'v/1o?E];ctWu^L ozcxN7Obӧc,7no::92`hr}qmc>O c>%;Lգ^X#1C =xuvjǏؙƆ0C0Aq0pP?/D.\8gU}im՝?Ь?efИ!QuL[Xs2\ ;M-j QNM'O'];w4 vK +\@x'QFNyvcǸ5<:PƎAx;oQޒ;µv30qq p"Ae'#\; +<cGs8%1GgGT=;ͥ rŞ,ً:eg<6~#7B|՟DӗHϧ`=c{Gп=j{qh{``;ꋛ3+ /EcƬ P?!ҶmL+Nm6{ݦmGMOykEOeGIwMwQ[ݣoSuZ-@+ izZFtizl6uզj+ؕw46mgJDnn!Ќmv:&eV3 bx-&BFLJoqf&`0[x(ea%`rȫq) +4rMz"rc.X0 +Ü\}.ǀR})ux95%UDdŕR +&.I40Y% +˲+D$2 Q.)*U,)2 JvVCFJ,B KS +CjNjan!#>Ix.? rL+_׻+۝9heFq#N\8lsi#hNOEќaلEI3LD 9(n!iqo8 2$$fc!H6qHV5Ԟ5\ߟKB_){$2JLD"C f(RzBGy.v}ǟrb]͓DZ_FJ㴶7PZn8G5_;Ǻ(kDZAxe5ThU+}5\Q7yP{(^5>sWٽs{5gwUTXr~{G՗{ZOn;ڽ.YyTv>Tz4!7I7Nab}AL ѕXȵW+#B..E81؅X(#Da6xI=A46x ;Ƙ ovj?:j9ُB؋MƉ=(. N”yvt'# ß2 tp;Kΐ)aYv`߆2ڷ8F'-Ɖyl6P?{{lk^ڹٶ,ۺ$ڶ[73amt XI:"bZ\eIy !9po]_iX]U=====ۺ˖w-^^n#KWWun)k*k(kl/\Q[deCgio{fwYO ]2&M |d%]wC;ͣ*_櫨Qa[-Vc$+h"4mjU V\iZZϠkNc%gӰ2GYuזWՖWSGUQf׌U]VW%T/U[p 9Ur+Ur.VUQRĹ),WbFY ( @cd/11Y:t%9%i%ҋG*gJJ//J +R}42u8llus|Gf,9\93ٕ293\ ";.Չgٳ`[X9 +ϰ;Lk&&Y!ԔtiH5-Q0U+ɮP{Ũ hez2q*Pd|GhRTLtv wbY:w$oy ~1Ts8kX}wtW3A:I:z1 +9Z٢S~^Y%:Ht4]{A+K#5딜h44g6Ji(9lEskG}EgvWkNm;qW˥ANKЛ'9H`R S׻vR +\ٸ+'.xWO)]\9..csᰔu9hQ%|-N @] A;7 mdzp- ݶQcm'CN2`Ծ!mH Эp-륂-e^#Ye34-͚չ%--%[JWW5Դ54ZW5"{㢵uk2V7gլLolJohH[S^>11kMEcvKUU+W4 +kjrWU7䬬ݼF}TIlЩjjV2˫ eԕJ-%U4 賴bBJCհ +re: +J e + +!)KK J.[TZPXZ!%M)&i5#"PRq2CE 騗-ZP[R/Y +J(^R/YҬ:%t$?+bCqybgbCs@Z9Ԝ4HtvjYYY):S"233) E'(iiJ,@TPB RR ɪd6!I1IӢM)b ^Ax\R% ń~J£HcѡXT($""VD҈`+ aOaAaRH`(SHCA XLLR0(@2?."|J;I+¦G yYH @_+/0e.yr3ˏdF:nޞ W/pt9{|7OC7WgWoفs̭mm-Όõ7r9cZ[Ẍg*:;V6;[vY۰Y[[Ϯ9V͙3gVYY%-Ks rZ,,, 0fs133UeZeZǭ9G U8" r>%VGr'DO(*٤x#`31g0ʇK͡3$Y: +1h y"y/c1},u3ៃdž#,}@l!g0^k5w&^ dg9ɫ; X{=1Keĝ(3^c/k9; 8,;?Co׏MW_Myl"=$$tzE"E))tФ(vqAe23!Ruf]qSQ!Knxg{{ϽDw|sl<6_1:&4킰B),3أ 3<ń0 `R4Τ ʂ5q@=8L\xP獀#Q:e^eMYPٛ=PÚHމkk)V6ό7̎ݻ*D١ʓ@k&)ҩ! L%qcZG1E#Z1C1rM_}fP=P2u/J:փ)믑a2U/&+d#]uVɳΥ O3}k QwnPXL_L})|+_>ܾ&L^S'+<bn]ši8SC%>fg3^A>A!T5X qp῕/y8wuuPW/ru9&]ȣVk&jǻ)6ΥOot7 k[;ǵZ<+ʅagQ]-^zx[:k&ovD]W'I@8%_0wO7!Wpx Wy8\O`{`.^n\"*wؽ}Gyp]=L7*'78;`ήlw"ōJ]˙6l\mvNn {&2 LpbNeko1fennbfff Q(e^̷ngS-[ںo˖-צzmެߦM/zmvLLLp7߰lذZ_k}[m'će(ZLChF1bH1)Z%EEӰ@ {0K1 :Dm#*0:%-7ċL6g^봷q9%^DCσzCuQLeAH}8ߗ_E4`֭[R'8 @_>.(s?G͋EwHL3Eњ^<|7fc~~(\OQɀ `~? b,oׯ=?|>XQX2 =3PX.[ww̿s%|ރta<,O͗p̟ΰI-M ,de@mGLqgEyx a,hIͫ#j^zqDͫ16dSoJ0sĞ0J_7}bYL=,5މ|ۇ}˧-3MͲ{7_=S47tdv́Ie;plrILd81AFD a" Nz&j{QұhZ +!S"*aґB6UU #+F/(rU +[!,?rQѣMJu.0|8Egq'2 Q`30rA$ ((``$#T`(*ޚEwW/ުuwu4Zwū}]& ,"c(@BZ(&ِ[W1 F7psC\V`fP*&dP0s#MH S0&Qȗغ^&nr ݐETa! 9l`abȥ2Њ*erJE{,t!R tq:ψHUq@Oٳqw!ьc7X6z{ᄄsΑo=qZObm [OYs[O1ރuyNȽpƨNm:2Os2=' J. SW][@'$'⃴"DDf8(ʣڗI+H!é9asJ;"wܾX*p%1ar1ˢ { Q{@ HȐ9n3ϨÃ\Ã\rK't!!>``_B d9#9yr +i93!˘>-@mP]`HO=3ֈjVtSv_*ah__DyyS R^;ʉKGߟ;s -[l~Mɻ +\Q WsgNެ=uݽ}9OezD͡_KynL:uPkD_`߰sgOon{@N?P^+g~k #2 +(\\轸ͧ`I_< {z\ɜ΂Ax||o GfhƘhx8%\fKz0%Y4}Š+[ҳIn S_OhMO;pgc[ +kko=z&S9#5 @=$!w2\έPeoj5Մ>*rrٳ +PlOnRtBtoiT\ 8}(m 1Y>Q2]@H(eBA +uWtNdXߜAQuo 3;0aJ!!-KIYna_lȭrsn !AXrC(2(QPI S0&Qȗغ^ЃBFȵ.tCv"+QvDaMLo +6h YV1R hE2sb%}"X =isք@Ί \:gD*8AȰڰ瘥ocuqFm| 'z!܀d͍g]X5p0vщ}QA95qIGӋRs K+*+"k"J@ HGHqU1Gsx5ugq%vž%$BH¾e!AD[;]wmN[Lj{///9p9s>w}=7Ӑc&;Y85WjӆTnph꜁M2n]D>)t@ - }ˆiY|v[ֲ];Lfn6}hh4@J6+BFe5+mˌ)z-5f@X&\Hlj h/1W4zPI7ցЬPKF^! 5UVW*usH+Y&Tf4PQcJ\] T"Jj:pƈJ-HTV\jd4>U +d< P -)@|G b)'ȹEB1J)#'@\u"@Ƒ$$ Xa +H}1bPN>_D- dqHEy0v^&K&g9 K:ä!LW`es`RrYDiL `݋ᑘJ%geRS<2ӓь JLK J`OMN#@q)I @;=)蜲61>&!>>.).!>S׬[H"""VSPAUVQTUP?y@a +4VkJVX|y`!˖Ès-,[0AAAjjj~Z +P$K)Gi-E΍u+Gy35nr;E02 |.Bdh":TIr#q|zL2)\I)DSJ4J }/3R(j%մ, o0DznBC~g/__>A4^=??-H y.C~T ~|ta}.{$Bw{Ȣ̃w_2_~5XMaYoyz@YڢS(y"reg֫{mkyi7 ͉g>5~.aζk'0;pWlṛQ 6/!5_mĴ\8 +O.ހNX&z4OlA8>"A'6>k;8~c8瞆{?9t@3{FlW8c[g9Q!γ#a9m< q"ksr#!r zyu@.F@Nq"!'S'LqNc_G9E~G8slCl9h ~6,ÝNJ>E#&s},ȱ=l9{9˄Fc:.vo!Ģ2?4oѭѣRi;1Ӣʤٙ0N6m$+ +}ԭ][47C`@`Ɔڍ꡾>A~&a'vT3V˭jW4䘱ɎqֺΚ^gY5ib*7tU pu@&W[ck7."Cet: ޖNNTLJeô,>i;ͭNkkYዮm3@Z~4k4@J6+BFe5+mˌ)z-5f@X&\Hlj h/1W4zPI7ցЬPKF^! 5UVW*usH+Y&Tf4PQcJ\] T"Jj:pƈJ-HTV\jd4>AjT2j^B%(D%\RL B +(!ȇB,@$qBeD(CG~nLnml^ZU۲-Kn .@w$4kqL%+s3ܮlI^Qɍ3y}wߙ}~Xf@LV24&+Hf̠RY tf}* (-: Pa9ը5Q4TR0/r@?LZ.r-H%x)3p>nqq.Cܯb7$➇h>i|S +Rh!FGS!5"Eijġ v,NEq^=͎ q:_/2yAAAACloުZB[<1c7Co6?C^M,1ny9ϩnZ:Ѿ+/o_ZT z_ʹ0}!ȟ>ͩ~/Ù3?ޕ3)ۻb٣_ߒp#弸-xg7EIO' (Y\z<&BAg!D'h=G^Iv`1E߽w !wf0ܾu> 7>a!qMskg1zv嬎*rFq4K? 2vkr}r\Gx :\8A>Ã<5r!tf?Si!'aSfN^ l{]ѽY- tx..N5t`2%mwh96C;};{w={-I[we%lڙ74޹Zڳ5԰j}m;k6w#87T V U} U>g`φ%ΥkAmR_`KeiI5ε}i5zzIKu8LYRp\R\SNڎ.kimX*^jqW+5-NXO%;JV7wjjt% ѰŸzROm!VԵP4S-l]DeicA&RW#iQ¦%Ͱ|B^S-*l*hYN'.j9(_W D֕/XVYR^;{mY TJܪU*+m%b +PVyQ9(Z-˺xbpM"zTn%d-)(eҋt|X,t*U~NȔgmyif \ +ޞI ϱIvrt4 HC J.M# Y-m9Շ M +R3TC:YJ!Jf-ffN5jMt1ը3\5dFS V D@b\K%R4^ +R&^RA SD +&Q +b+E."zT@&QPb9HF- d@$!_6_"% $>IL ¤</6***EQb!de"t +LcLc(={ + AYf`"~1ȹWDs+4̯Ba0 ! fBBBT0L0o/af$<H) q]aJ.0 vC.yߎ蓦MGlXIDl]"12r!TF..E2\Q,;cߚ8K`IDܹ}[@n + *ݺu"V[!CRQg 0 y|||C҉ Je/fŔ>Fy@}GrikiiiPݻ%/MlEϏ͂,,6Pր>ԫyM3G36_c^W,oUT&mߨ_}R/njeEN|QcMT!k-'SdN1LɓI 8<"?`z8X]Q^qc@ t!u8@sAmPs2;2qfer2:t sEJ-i0lL`ukVvfaG+#bh͗Dznt|r_+&;qt"pS2v vS|Vo|h wcC +{@Ay]܁NT,/;W'Bjʪs"$rUyrNUewVdV.=Yyleֵ3MWZ*;Fe|>Uŭk|x|5kBW8c?6|8W8cy#K\c7xc1p6@#=WSCQ~桮\p!wpq;[).rNA]~ 'z oMF 6<깯Npy!~Q/lԙ/`SA@8]m;Xty8uDhucymy(1uQMK/-$5BҜT֘|!`$&6v0Yr0Z ""*&I9TU${HR kXRJk,Im,FT'*A%5ʕ!$u55jDjmBZW^*T_J+J-$XS\A\YBuxIay'LP|eA=%x9*Ŗeǖ)R%/$8@E|Bq 2*O!/;"o_"rU6":wUT\pXXNNTHxfJFXv~PxfR(l"NxFb:C3%p&'$->HpeA)qk&bI1IAI81A @1D{D)TFā=/6"-&[h(1(gd(r] p(<(L.Ph`H(U"|!*󂼕0d x@ ӟ +l?WЇ͛{)z8DlrrE8 8B#-Xםbqxd;sA w'2#{;#* ;;1] +vΫlpr;2ٱNDltG aikð`mokƀ1 ٣[QwL!"HL111!!C aT06YA62ā3^H-l eMm300,=}7FOOGWOy ]]ݭ(miK[+}z}xv@5)T@! `.᱓$XBD(pE( +%R˭'DDV{^)T…+"Bܻ۬:˜ ?(Ё{X銽v=muBu6`_kF +XoA! $NG?$[2}=[?MKKKxI[f](,xl͢b3^/QoQs[bؔs|xu_up1S{O귻}3~I @2mMy>ϦY7 zvˉ#7YS <$Sdx<$/Oȏ&3x0Fǘ(DzZ+٭'t'eLhn`0@Ù@2{讌'\|Z2:HmMKh-!>+Lٴw$W*֢-‘͠nP쐒FD9T`O` (ov)4 xcfSbL+X30Mk2O ÝƢFДB Ń5T7j!CUB`tKQ$uJ: c|u*B$H" w/;8X.n'sMF9K2,Kfĺ2RM%Ie %u3R %ID Gϊa%yE\IŹ$m,L( K,.%lB$f@ 0s}|"?3ϖ |ȥۘ1KlN:+*NGfqeb2S3aYQ67̈Zi1<-2#9״tXdZ|,"U'u!R|RX:XMk`! D6Q`#Ic9T\4/rmAZBQk:Ș#bBY z ö*ooUn쥵JGzK7Tn3{Y-VʹZ}n2 u操NcpxhJkcxCэS[w\h*҉!y*!{0H:O^å(q:Ř) U1vI% +1zDA^ wq)ݺU^iVZ0]"01E.gVZY+𷮹j%gEImXq\VÊ@۱$88Dђ~_}Q8|D,V{,JicAgFa!ߟ-  {=b]bŊOPZ0z8> CFxޱL? Z1hp28G瀟Aͼ17p%! <,C1`9q!c?}T`#%1=xF#:k D}##O`=~|؉BR0yxyA/A/ $0~~`f " E !=bЋy{~n_=޼޽>c|OwIlGOvxC>ݞ߿/~ ;D ڕ`u +;ի;'˦*@ h iځjkaZ$ShDi45 r[LC%GPX^U[jHTY͵T2j%,MM4TW^R+*(*9Y-,(֗T%uJDM " +RT]?v+,8 J.D@R7 ]9Йn9+ (1,G%2 AD 3X kXwVͽe@w^9[>ԪbXuQ%EEVre2{*!RPrY^ URi.J_SX їd3!BBs]AF>]@|Z6un:Dc!٪4BLT 9 JL1 itC:8x"L 4-Ζ, $KդNё)ZDP +Q FQFĨgؠ&$DɪY I ^2*t V%id$L-4xӈ jT%AxiB”b)Pr1$^&J!,N*b%U/$1 0!&hAN?N-@(>W0H^<Ǎ@1=8EĊ + v:!옐HXTFlEYx4($EΊa"APPXh8a%kJ`XZ`"leĊ_h0;2?pE$`|F򜍻: w\ruN\\\ 죞ev-[6 v-]:7Ւ%K 0b-b-b8.q GTB8hzAs Mґ{L-тK6$ߝMҋG;i9)\:z~nb~fD^5P#!>-K`~ +p;~{(`(E;~g`%ug DZ(a߅˹Kzv5UUN n8a>ܮuno2go4\}<+Σ_ϸ7vc}Ã\=Qy_eLX0G{1Yr/2ҋws4Fk,KS`7 +bwc>3`R]B;1f_: B;ms'ol| ǹ8 +v fxҙcq\Qt +%?}ĆI9NBz +3_ +Al*?t ]#CRA/poۡ8~L/Q %uuGp8bc?۾X|O2Y՟8E]@|Z6un:Dc!٪4BLT 9 JL1 itC:8x"L 4-Ζ, $KդNё)ZDP +Q FQFĨgؠ&$DɪY I ^2*t V%id$L-4xӈ jT%AxiB”b)Pr1$^&J!,N*b%U/$1 cߚ8OB @2 +$! !PCTERتVAAڊ@ںm3wyyYp+EL2,t&Ye6X@J<Qg"qq>tVMԃXJkղXϤ#RI5""Q0Z(GD+$D'SDr*F)DK%rSb0-HQ H + +ǢHH,ZA$q#%(f"#c"PT BBH``DLF@H`,(`\ r?fQ|wb8[3!6̇ņSb*oo]XC8 $G2-$Md(G  Ef>!%fca)$ILDVMʴR =1 m 0iUpOw=Y }}N'/ zhDC_>C_ %=Lr }uߊ~`C3dR?'n,.>6Q2EېB~-Qp5y=Jxdμ|`Щzq?Oe24/nfZN/LS_'AcϷ 2LFϛqhߚ܈#LO]WMͷa.#=F6q~*  2$"pك:.D1s+};w7A7z#x{{}:߁>SPO_jԑSم{oz~K˪K-Ul&|Rs '4 BǶڋ uY9Rsk+vţsIh"՜&bRm$-=s鱁T}c=dɩukXX]NX@P޷ݥIYgeO{ߪf%+}8Z|sr]=COKF8 _L.0lK?r8>ʹccaGЁ=j9j`v(8}u@ہN62?{<: ~O'.Jd!Ac g{q7sѹ٫}CFuAC2Zza.h-zڹ.*G;Z4(w4 ;v؄w$lki¶XJ7F@wvjHm;(!?CE +k߮}B?Pl%Lު .VaKR-ӛ[fGon);/ZUT~fu*779+667.ԼlurnHZ_^jRYS:&%Mεͫ \֌auƕ + @HU~yc1EѺe :'hZz5u]9.+< +j@)@\B+obB%U(0gyE-)oYyǬez캊r,Xun"Ғ,]^2{Iө`UU +ɮ,-ͬ(YDU^ Z葹haF +i$$bmf;j346`Jǩ: IkV Ҥ7EaԙHr\kaA2DUS( ,VhZ:b,3TRH%Hr5L+a1 + T \a +:R\$ EabhD$Eb,B gH(,d"X CBϟL Bx2.^ $0ce0p\3(~e;1bCaXo7x7.,p +4$YH8tAH1 I#"7j"8>,6IOh JQTTVd=ꪫ*( +쫻kY3̄ ` o9>3"o"e\R!2_3 +EUo|_>xs {}wWC>A?l+"ȣB|إ`ȃ.~g0d2]u<DǃpB |ߙD=Q@Gmu:r՟ye2u%'h`^ocn}딯ۍI^S]"׶H-r=rL %MmkwWunGQٚҎMǶVBXѰeG6\qTѴP>FBy۰n o\oEmjIgݢpՄgk퇔_;u?hEQKJ}U-{'7WwW߻=%!Z0R IttR:!q,:,atXF b_dH 3GcG 8wX9{Xj2ΙCMR:sH=$zX4JA쓍k͉){|Ԫct|~'RgptKp`f`#E~#"햚Q`M"!wJ vJyM;$#z. agH?JPBv;Eh!ް]kئJ^ݏnG.oiK'ożmhݶ/aV!,[UxuHwI~nަq&X-ƒ6T_tMImŚUkլ˯^_W]Mƕ5s7ƭjE^m[fV~2ʊU@rA(mhڥ+r)fYR[\ 2gtWU&giEvU)h)e_Uh)PT3*Jhe,+R-ef,-(#d,/H[R(/.X)ˇ. Xh>lb"hzTI fO( I\30?8/;*!/k.9t d5?Vav&)>2K;7+ Nȱ&6;*N͊Jɴ5#yb"eLeXhӓ2}ti43#I?$7 +=!EbHS@#'Q)I Eb\] y|$ē :3 ziBbqX:N!$RC"uhQVZe(BQZ:a*&\ARSS`U"RI'D.V*JP\F$X6,\ @R[0 ! + +GX&PAx@" ECM-8 PEt D4T~`0hJP'MMNL 7eMdq]X,/d<=ܑOx3!LQ0ms`!'N˄  F}~qm?~nl7>nnnc.n.0W 1 cL988ϗ; qASH18H"=$b&!9E DWHFJsZadd$E7 cHILQa3U;%1IQNA2HIWYQ.V6Vp境i>c|G/y{D?<п;}/G3Aз&-?zH,@4IOaB:NNNNc)NZ:Oz,p?׫;jO8t^)le!=2T7 /ncvA vϲ叛QcϮU_  ^iwc OW 2v)K C;V.=Mҽv>mAt<w.:k5dAPCHf¾, +P@ҺԥEAVvP6 .h.ڻ#w&ay$Ho8s=̛y1:O8$J<ȓQ.}q-{<Źhy8JLFq q/j,{q˂rAŷSX3-C<+6F*h8|q\AxJlZ"k)l9rz|BR;8[;ԧS6{fiC*&zI7NzNspTI8A³x':0ҍi4+I z]!E=xp$*H"Mg pzuT)(檼h\6U5f-ʘSs( +sSc Ь +̨*1 ǘ>p1&o1DJLBc}d2rKdڧs&jP jE);f $i{D eX"ewaQxs&V,c>B:DF}o},zf::^,® Y`~2{ٟ {ŗ}OXb +URIA{E$ IEyT 9} +wCg˄̧cHF!t*Zd*[͚X[[ClL_$+UXXdi6jӦMkbadf17?fffj6j6j~0S4sɚ" &-V@ŎXԉ&4sЉ1k{AПGo&-JY'AВBiAlZę&hQh­x l̳iU{i6;x%1|R;?~+BK 3y"y"|I//!oGSHProذaú51.~yג~*ioŤiIS{ydw +?>F٫H&й)(\`o=mY-Y_~?+K?w'ؿ94Y>l)wi>ŔI=;W\c}%(8=\Mz4ā<tp?nkwy _灆C_85NvXgHhv[PmT<欆o36̧1]ÅGǕOjOiɦ-پΖ{- EKn,l 4UDo3|)BXIc*I'xvc#ݸ&P鰲qI^dHQ/"dZP$Ԑ +Wh;K +BNiʋeQUj_,P\?ʼ4B!3ƴJL`RMc{wP q`}5q:$3RBI=RTAD,`&H ]T:Zuuڮz޿r3 |Czy>g?.}\ĝAU23@p rT?! !n}`FNw>7YRZMt,k Gp5ÝpXE:pmP`;jۖvʺ& \WtEB!KfB ^fք5K`X=PPwv_txgRHYCA) _Su*INuֻ w0FRzb*S]T)mW7)\/+]e͢IfRO ֍J?pg<=[PX|:DSEO,)=^Ps:HUNmUuNMuuiFUc_WPʪhYi;k**)UʏS)UY'+u8Yv~$8 +gTWh4*ҎHH,-v˱,H!mR= +VJy1h?g>\g?G)(P> Jqaބ/L&U*poT"[ %9brLC + I< ؝Uyxq9x8wwd6vnvnWgwh뒭.TsvtuhY["w89l[-[]6ZX -1 sĔgxL~F,xlfjA}29܌׍Nf2~neu26^NFFpM|C}>D_魩ZZ1b#[E"|H oDbdb.aH(rpgtbDP$=)@"W2(@B Wғ"e["I=9aD>C8 ;Ȥk_,޼:y.e^Mp@W.h a_Q{܂݅[nݺ ~"w-?ջ>_gޟJzLy<~ڽyJ~_u⯆C_䗧G|5.~,Y<׊ŧ<̹#3ϏP{D۰.Z3/E 9B| pQ4+ZŌ6gSv,r"-{ӛvEO&):xxt+ޓMc6q;ܘhѣ1[:0fmd3=懬yOo6}8h`Td:7b{4lǛŅ}u7KU͞)wۃWg+8o iZVtw mTשTgtU&;NJ&; 7+aGh\hE#ܱ2ZXSYhcYh{Yp롊ڲK7\O!x8LZ>!ްT!Rpge˻C2>Πq:;f٫$dfN_i5rT?! !n}`FNw dVKA.B@~N\8"C8l' C9z2 f֎j.+"h%|I3f /F_XCk՚%B &m`^(AkrC])hE1jRDRƨñ.XрcLH:>>KBxyCOR+R+R!4 iB.Lb#J1!u[(QHX ".[Y,(%?2w.@@D.d{)ku>2&(!^9Dc# +j '"R'E9AeN{6~}Yu!U }3}2ݜË siy/7wnVXbi޽Q߾H 5]|,x]'(Ō rӎߞI zoO%~}&^ߟ/OE '[<(dy_SO{u ύMt_^h=#b=LbS"杳"uV¾9%vƤc|N`ޘ9#~Z܃}A8'q}rr鸐1Q̥ Grpf.Q1-ri0v:?!N` +\:$LcɃBtf ;v_ (WB;'&a_ +恙>W8o`Ϗ#_ß `{{p ܉/xx-Nq v щtbWSυn:%ڕߙ=3%wdRQIѤ5F콣)ݣ}6)t4W10Տul##6[:dښ,#}mzCmLuÃ[-CcͰeb6Fgm>X͌3͸73,=NW;kR=3z A;nH gzrT9WERiiu IBq_ӍRѧu9:I}WTNVRqWL *tk6Hq;lQC4V@Ka[ٝSOMiA !@B}CH: ‘+  +(Ǩ3S"rx#x39㵻Uv4oi'ުO}}燮jd%RZWJRB'ueD]Z`@&BJ\ I))%"}!YrH%ɘ]@U)|0hAELn@\yN.ǖD}&Ё8]z6!>8Z q X i@BlV[kY Y2sZEl*HteHVbғZVpiYE*RAyʜ$%&Ī$HP,PEUH`J)N!ǐ ďЄX9( i$qRH,:B 2~lT("F"# cEbcPHTB$0At$2J/ @!bĖ`QEKb+ A + +  @d~A|*aDR  |gx|CA>A!dށTVV}|-ql0K''G;irpf2XNv.,3f9#nLʼn֣t8;1!L&cLzNfa0sa,G>Kh-Y2 Ŵ/yeoo?'`v };;yZX [v"d1bpDQJIF9HQ " +(n3T(B)ZPJľL ôPY(QE[(b:ޑxxi)S"}x$Q Tc)`8>\=6tϘaMD>ÖW%}WĐ%sxN~/Y6aw鼼⮐]O̰;;ٸ7:/~C8m\mpfa6{ao.6hz 6B'кE~ $c `a3X Ftz/(=zr8cj'O\N+?g;atg irdٴajþ#Q1?,}F}Xao3^WXvŰ&7F1^.#!ܱgpAVL }S|ӕsmeWN}]>ѷz+L5;.`:.4a1mUU^OZyޭTV?-XPYuyչ^\bf@c,4Ǻ7zlʑnF g %#]gqu+--=s<صnhy39ob9$ryƂM18׆ij:(bSrurZM|/POnq@N.A.A珋a'Pq!예P;X2> RDiHr x:*tA \(d'Sݰ '68(~t,"-Gc [\q<æ:Xe-(a IPYʩ!V֒5UkI@+Ȫʫhj*55U$lvm ajڼ:eU1C2aq嶤2*f./\I%XJd.ԥfPZI~19՜WL%`J.ɅMzHJ,P2FpoF]>HUSgf "&7h \H<' cK>LJe@ ].}F|vz6!NZ he4ZH̜dJe`5.=&]KJEVj::MR IC,Pp%"ET, ,1VfBp'Ώg"$|`Qqc0|>ü]q rɇ{*{BxOu>?uTxNqiʔw9<<<މ;~&\krMX,O c,>e%ll2 eő+NOpl +NG`v60j9awy1,yf{Q_2k د~!췇dDxA4{jΫ?r^?1s^ )![B^ E^?1d4iҤ#D0oM4 կ"'}K~Kӽ_wZ pƸ~Cnkqo'cϷWou=`?J^0zrw=&ˢQuI"{|Y; ]h𼀉/9<0(w!B;}*ѭ\7mXtVN}@bO +@Wހϥ~@4ds73z6]:Y^=x v ]!ؔ=q]&\-^|6 +vt/6 Ρ/o&.%nAo)q`'kۿ]إTr:w}6Pm튀xxݹBL€ }ݶ]Զ8_n#Bت ٵUs:x?5ܭ[4O4oN_)aC YkZh)l*i.XuESꦜM375.8S}c+Zkr[sW"ri^Wh(k` V²V"Va†o-RYWEUZ[P[BSrRFJͯtȨ.UU+hai+FI]IJҔ2RXZQP2R_<RWZQ*J.Σ,K\TI\h 9Ks +|؜y4M(X71,!71kq"E9i9~ˆrQi,TXf\*63 vN`F/C`K>gߚ8@$@ ` ar0B @@`p2D@ӧZPp-nE +"~O?{%sn.K>y=s>s/4Ŵ2I`X0beeaXFXYFC0bat277_̜f133F[T2Le+B'>A"dD (:"ђe +HJQA-5tC P'-ZℨQip2B̧w|$ +e 12ļ|+ķjۧw*Ƌqx5vtr )4 +9J;) @qٜ;. a) !tw.vEG$ٜmC!?H[@?~l 9,1(w!pX+d!kЉxc!%y'&[^׾Gu[[?@ڿw|7b~vmC2}_tس?۴/[U/U-ͨl,/kTkV6i,lҘ׼!.w׮ڜzMsS^N{k]꺬=Uu9 uZB̶ZMK !eӎfiMrwmٞXC쬞۠g(j+(#lM󖵣W|FI液jXIh֍$+Pؼ&BNFP9i_^ VNOR*)kKR*JIJ@iBZp)eARJa+J +C6@%o&i}lsI,]C%amN…H, +I + g\ ˀĭ%M{mORg50uv.kFf*(SLVAVE\[9ȌdtPxFr2=iFxZR251 "RSALjXJ(EG">k{+@a˧ZdG%&a1I IN IT%'D%WP*$[YtD,I HMPPBK Rc=:DA(42$Ji@(P  EXBd +*PP"!$`y@oX#er +24 B:R'#BQgL($;$ + z뒊G„^xy`=OHM)"x =0BgsM*q +tvu k[% +ذh5sg,j %5ĚɂX LA,ALÒa+++0򼥥%0A C`43qh4ڢ2Le*S-]:Y!u@T2;D%E\$GK!*#cgsL4#&5aBPK5? P{$Jcr6M%eb4 ĠX|LQ:ajQדJۇwxixs_MsO* &"TMLLLĻ 1x ~z3b,B ^gLn=L//I S# &X#(q y?+, x#*t]%%*AA4u9]af$PaUggO[Ձ{/>ܷ?-}_nFmۻ]z=S2$jOwxg<|ʳSI6“ - f*n q6Z#=![A&vfa#,lnMqif ^?[ح`r ^N蠿ε$cMۏg dSR ,%= ܕ^R᭞fn]JMD6Tjw]zBX'؊v:BhvE¡6QXjHUȥUymJ¡9*r.Wf],k0+3&s} Es"l?n +tȄO7pnM`!:pEZD[Q7QpU!1֋3#DAht w ]Ww}5h}f/b eW5]+_p\H.+\,rV=9b>Tbo:"/G/)D(W{7w:&D.$>$b + \T\gZ'{W΅wr9)Ӟȴ# +VرAdz1\-cGdž +x;`c>#|-mknNC#hh4T*;1z-a!0LO-}}}0}])t(6DWWu_GGu-mGKKkSijjĎ>gl`h#mՂ$6f "3F8nZ3p@d L@nI +oRS혪fA-5ABV.b1B0"{u`014jrG{#&_|t_[_zrĮ_DX}~l陏^& =!Y`m۶mKf0_.?Rxnz|zM}\v_'O7Uy!||ʿĴ=,VKk, pc%="/~:=pRw +;nf0޵To7j9! _z57|5E.4ukb<6tMǀdEz|-D M41[Z6`qwKZacöҠ !p,l<7;"1I rCKo- ֟{>fgHFږgOOvJK:KidIxG*wEZ4B(6&AvQ5 +nv?tI ycJaumJr*GIj(* ]e\{Ts3^̿r9)}Q~ag֓wd|HOu;'!>#ɟIɞJdsUl<&A ֒`C88\Q' 6&p֭ v +ީp/Kba>6*@ራ"3u#VC*3B12ƕ ؚ&p܃q..=ؚ;zW; []Dc M?!mZ3;Z[F!q_[Ccv+VטZې&rZ+2kҏOoFdOo" *4$*)!%@6h_Df& 3_ȅEFhߗETۓ U]LgD鉤4Xjh*$57$%ɱtɰघ$XPrLR`RFPbtZ`BT"''D%LB@|$,^?."ޫ8X@(Vi?FM()/Za8J|"B#`!!b?1E@CUa"СDBR(G v໅!Xna@!+7H5x<܅m| ?w?&P>uE\|o-$g‹=.!|9zi +҅spwyjcNml]m]y{Akg{9ly.t6NX;;@#;|oBmN+܀ij022b뙚X, Ԕ0x&c&4 |WƆ:m!@7pnUni۶ٺuge˖u٪ڢ==jsm͵6ח[z +L0~^\F9#bo8@X3uN5FJRI3)2Z_,ܡ[wbzbž!v=ٌF6F/Kf v0_$~y")_ZLli^ +9oAy@n"/6mڴߋρn}1}&(zzg*8k (ވWU3O:ufؤ7 +T=4^?(./aZn_ͯyBu,;ib˒VL_-9;o;:t*/n,: /kcBzvÎ HS5;U{hFsր-Y9GʃY{ʔ5Ì5[2woΎrƎTX*ɭ;L; š$g+fN\]5W. ,_8]8th*[l- . *]l-1Bj)> 4Jo Ԧ@H)Hm\`E*G. +T(k^#&Ojf)I3)$_+ɝ쩔L6Wuܝ9S8{i`-) +tO#u{`kskgݚa7б!-^98Ӎ1q}umTWG1EB͜4?47!G fUf1bT\ƕ ؚ&p7q..=ؚ;zW; fxFN>JFX vC$ONgȈ2e~;ue!fNN7g NoEҿGHJڳmJZT7յklko?{ƙ\MHs1]tJb @tTM $@c v;-.Tq_cIKqr]i]lw3>I3 tQzG@OP?` thO2d쓚>YoiQf0VU UÝ]CPGoՐc1h$ԘLAMP=jUkʾDе]Uq=m6ݭZJ+7ShʺT:bށ=6e5ImQzuVѰLq{} N%R+[HEm + +W*'b[5[5DV%BԂ*R)rD!I_I~ {ڝtrj4krU2 +yRF'[V!R#eeXTȖkjKa55%5poͪa5UjTFU ҦV^J!ieElRaqAiriMJI~ )8qy0S$ʅHE9"fEŒBĂL,X(q +̋KϋM}]99ffQ 22 I,=*2TF<.@l KMLöǧS㶯"JKdXDBLUx0NX !<CQX +pf+٭`G'nM0o\ `xޝfMik!nL +_'k1k煞  ؤųgSP! gU]=-@\9|J:!.N +p lU'BPc̎S&G1#?!&a񹰳QF9_Dԟ/,E dXF5? ;/1/^^kb_$a  ܃%{SgD>cء\蠦qԤo3`7s8 6dzͲ=ÀY26HF 1Q:#]z i*:CZ@ga1Z^tHg; sAIAmKju65NBSۿL7_Uu  WinբTXES֥%p )$IbmҫK5me[u*ZB*jSTrRU 2f&UTتDZPE*E#Y(D54p+o$uW_Nn]b-rXJF!ϑWd*YrDL˒q-UVm)+xdIB v 佗=,lIP@dsKg[[VTqLg3}/ x'9}%{N9IFEA{j0K f-GY +HsJs)T0#MEyŤŒ. Vp\9i/V$愁>?·sO-ϵePtG&j4f]k8PhlVfsL9KmΆ)LYo3i2`UkX̬0,hHfIKG0΄kL +:&7hzu"):U4I&i1DFRa5JNP)B'J)OȰ/\%48BbSt1) aT$Y +$*!&)*A%bID[ j (YL<]d4ɚhٟkgEJcߍ\j;0.BCCX#rBy| q|d,p\n0Vܐ V!44KdG DdG_ `%+L@@@@X4~~~|Y> NU' 9&\alBTDp33!c"(\D~+uansO^sRL +p8rg=Q.'8wAMqi9<5ǯ4~(FӬCYnGߞE|^=I̒W-OӖ-[xKKO≎˧zooկk| bvy~|xPF !}GJ#50Kz@I>A!}K/؁3ؒ>;r=nʒzK^pq1k[kǿ$ `m+_緲%ND:s;[q~FV >1݈E}vS +FO\"D3ᑾr(> \Z ι1NG2wa ;9H3%ޝpޡN~7ߣܝp?6;poKCnNHCnLRxw&"B {c AeqEQ"!v^v +ZgN v ZfN5_9x`@ ?1då;@b?ox8}8}ģ=^ llkp cdܶ~(e4['>ﮝ<8vU;A\7ig'c;kGw tjzo8ÅoF1(!y,y"v+ja A5ꗘ6scu,|.!Pg1!4.M`bZ.0@L"@M<@|{WGa④ +/ L9CF_V <qbQg"0bnpJ@ qSJr 'SŰJdx?&>${z~?$}~/=3>cٽ6Կ9ngn'e~Wo?K_o>`f}[wTWVzWGS޾}UC]UC[(5٫zg^;^=]^++ ++}QGٲͯU}ӜRmX֍4-E[vSv/P#m9E]6 MѴMA{#]ssC m-^yH͹s +ꛝc)vCnk="\ׄXE5:6ԐcoF5VPIzuoV_^ ˩+ͮ-aUSRYWȪ)eV" ++2+] + +8a +WZJ8a%R$a.FHEI/̥+],2s +^IF 3N}~,KZLkuˠVLh$nq2ج6lSr^*ۜ Sfa5fdpJ)YaY@ eѐ +FaF KטFu: #Ln R4ESt*,Y%iD5Mb:XFRa5JNP)B'J)OȰ/\%gο:8'XB$}MXdQQVMP@*=sf* +T +7Zmک3uik][s%$r`<|Γ<} +kL1IvI*+ V#k2#TI5B"V0Z +RcLʥJ DaOT,_.wķEB`Y;͢8lͦs8Cxik/bCLbPb2XLOJLÃ(5򾇇ӝy7wJ 涤\]]Jw,N_Rrw_.4JģţA4A@K2a݋fB /f, vMЋ`>-&ޡc(tߛ"8F3“C?o/;=7v#?a=xItG9[;jyKE9򱲝8V^T7z|SI9'VPM-yr6 쇯d~C:o%b2u)5Jqlab\hÚsoLIJa,|sI8ۋYGn]n~ /rEthكW쭸zQ`+SjG-'[V4];ފٻj5-˘ѾѾʱf܆+WN4U7UYGll|b7Xqd'b7wGHv7±]֏tn+!|ڀò  %ý C[w\P}5n~poCxP߯#\*7_C! /q6@_ ݞ/Ns\=@XP_+ϊ?>, ?3Ao$ +<ug#}(dZ'PЇϟ0)2k?ף'A Cla^z3Z(@?ץ>X1.-ҡ |÷-GCgNlKJ]eN9C%t,GP=·H_O{߉~}a.L<XU~2.᨜D?uB>AyG:cy'{g-7wTkr6}\Pi[u`ZQ#f*ŇvA*>;@{lmnkO[ 6ow~'(yPnS$Ov*yms$װvWͬ\;7ê$ޚʮ*^²-BMҹ6{X$|3Y斲j{2jKjʫA˪쨴ɨ.m"m[U%A*דmXWHBHچVٓR^PV6GBͱb}M:\rZ$ + +AE IYMbAVxf<9/ d5箂59VAV$[ N&ɊJeDgfa(635dFe2l"Wl(jyDBdzU(HL4s:,1͑ԄTSjXJ| +`&HHr|2(4)1&D'$Є9"Af,q&C|rGc㑘8C,5}tx,HcGQ mDH$D ahx&pC$ ' T!P{U!4C@*`)AaAHHȤj$Z֕zDБ5`{DjJ>&H)QrD(*!**P!U~(>TRXB" TD +Z&QA"Y@ ex{{Ӽ9^8EŁqaԘ,J,ɤbgz2 xzzBdK}I-뢸\.šKYrU +x4f2hIF?{L7!%!Q?lpz. z=A'j85Fs-J1N5umqD 2aaJPAdT@P [m{ +BEEAT je +Q{I977aМ>k=;gP+etf$>6 n,\_HG{1gz-P>AoaH{?,5cWA +AV; z-XTrOfj2/IеAw=D>'L& d=L&`, 3]_D/8?6fPK5փ|2#w%i.+u sn0SPBO.ukS.) 5MU03;*#m,6p;K2f |?fi5jb[q}VJf|z1F+5YC^^\vIhVsYdVuǬ/;\VSMpdz/Ff^H+'چfRLG6X@&`Q$h[[A-- aD {x8?O"+x 玑r%FXq "_%vn^> WO7 / <]B/"y:y bwxwM +8]Wr @q@\q\%q nՉKdHAlJdv!ch第d8NVY4E6IzzRY tT!mWL§ M4ljAiz.zF - o~HH3LOěfҧG̩aczDHy-ҧ<̐o|71(e~r_AO7= 򝣜qgb]|!o̠5-LT ڠ;2]YS&5x70K=>Y}YhD`L̚%GX,MJ㽼2_5gGrK7.+u sOnǥ0#L.uks{~#5ak:d>o٩nUic Al!O`,Zm0TLJ_lCOo5Bh#kKp5ꮷWKH͋Q VSi`HgQ!@H@rx W@r82BM$3; +ގ{xSlwNřay>}NzЇ13fg>cwM'\Tgl=?{LYT}\W]lg]tg}LLiTt^/P_H5yڜie &OK݋L$UMv#& +.` Ae#ev>d6`+UW[x +%-:>ԃ{[CrրAG 4y@}M|Q,f6%6JJȺC:y6\[ ^ 6x\ıjmk~zY5765l)[y$E%>X۪,ݥdK.~%=eA]c5Nԥ}U~^tƗ5SQ__$)1&\/ORϢLr$ޫ$חV&zYeR"Ġ䚒rБ2P©"ꢓ:AVjHBqpű% $ KŠCe$OJ)(zNʴ䁎ŹLj ⊲ +bOdP9!;U-̔RdH3-科Kd77 :'%k5QəTd%eDgQi=GV؝K;L=CSR%E$ǃpIqIAaG@G~86Jȡá ̈Cc1':(0~oA8~q<@'%J[+X჈Y"ؗćz B/ xB`ao-7>\ BA.ޞ|2g%'/y '/7o2GOW./S8{s\WɃN7G ;h.'WtrϝΎ;G{Wh ʚɠYXYt:|9} ڂNbeI|M,,,3EQt3ͷͶmL#ߓ~R[nlٲ.7o^-6l"شi}LLL>ڨڨk+u5-̃h +F YZ!zZ1Pokn[~~choț:o׋:ok}7qu q kXW?^֫<~}]6[7v6w݌u{9BV?r5/n,y~yɳNOoAә1;R`}QU=V+w.cn,:gllΊMGUL9tWTS_Rӏkk4ݵ9LF&W݅Lut '*VT{y̐擠 EiJ^5ڦaL:$Kk)iR19? #ۣӘ# &hnP$gk +0! ha04}0S_ԽTL"Xd7BiB BF`ՉX6_/nS@Vj) Wu@ +%-:>ԃ{[CrրAG 4y@}M|v_wYmB5JJR,BP PG3e?5a + *r#tn 7}&!!p 1z" +293-5;8v4|i(Uz}j?sf~=QxG7K^%3)ViE%uOQ[ma-̨njC(Z]|oz}3H:PJVf#IkMJmZu b>P,IKRUik$f99 ]v}قl}i5 +U)ʬʨ Y +PΤQ] *UEeXjJU)^jHJBV**4"mA(Y#."I*`$JU+IPKDUbErHPAKsP2|D,,XYC'Ĩhq](*/=$MÈʁ3;50+%[F: "3S1"2veIxiR#@ԄT|JA$ǥK $$),w8BDbp( +:q9A Q A „'c#cA1 ~t8/*,'č +2@0DA!'2,HEB(2vX + 'P03 Brq1 @,v + 31&<2^?fB OKȃɀӇ `zz2$ʠ2V@K۝Eݑ`x> w/N7_g;z㶍[X;Ivd{LBl;"[9VL&[fgoEY-Jvm1lmWg,mڴiMmܸqM| 6|k V֟jMϗέpRBRH"#I} QLf"Bh3בm#pv.k*fBXEs]IB$L +gbI6R7ہ^5ӯTooTݫ0W|~X49e!? i?xK!E_hB`sB/׭[aBO{(IEoo0ޮo U#S8~?A_ԛXp¶G6gye_`7lE0;?qwmYc}{^K'aOtG;-|r @Fm?ߢ/0wn򖇙7K<NJκQO_q'e7<{O3K<#0wݟrޅ]wϻʝs;1N` pr|b&0`eilvؠ3gOU8ҩ>`TΞB)4Z>3lRryب2l,1 +2gLZ43#-Z3G5fE4pQAj^95#0P *>\#)<7h"!N'Ч?NVUNWM ӝpNr:Yrk1Q7An|s8]?ucC].1;(WƖp»|BQ@38Q.ƥoEGO@KLb;Q1qng0QA&9+:{GC9¦07Gxa 296391X&m6:mr7Fg818ȦL8')c}tS>lꉾ_ QNw:Km=d5d쫨,յhۊTmIOG;Uiv%tv: m5zFYOSMSgTw5]|o"Yg} (C 큳ԄբHDZӰqۢV]ب3T/KRTՁr+1,mũYNNC9B]_ '[_ZeipJ2k2j4HV3)GeTp{yzUQ#RUZ,!RЦJ@J- *D*hH[PJqAr$RJ%xXbyrP|Aq,+ˆ3 #V)ŐfIb$ 1*Z&wsKr0N}5qEbAJ*3PPB MbAAfY=; kAWTTDֶ-uTWnf z?y=|g~ B r·SN1/,d%8(\c#dpڝ ƩͶqlpwwY m-ɰ2HGbF9KQjWvd)E9$O3y@fե`ڊh1YYȢB&5lz4&ؠ2Az'5&ѩ VB+(t Z%ZxdJX X DI$QbL$˥ +O&0FAb W*H$# $B d,Q2$!I$dO*| ϙKL%_cqY;9>1pEQьZpB @tZ8=N !F {SppO!AD/" + |O6j޼yU``  D~O7n 8/DQAH#ifh b`n$34NK~FxJH9f 7$X$l^KKb<.?O3he6ڼ:A.zϘxnyB y 13 z73sc4 ȜxeyB +g쩑~Μ9sBu3'C@C2̑~y_Dgbq1C{C{C O}%e Q'8(zpĞݪݻ]6W{wVsKOݕkvw5XӂشmG_*ӽݟ~UVܻh;k{yogWyʝ͝5== *[IZ|*|S;hَ6Pv$5ʶns3Ү )NqWSkIgӦ^okoh$q6 +7pZOTT\GҰ.c= uh!P~~%h5io]b5Q AUd5U T+sVW7)*A+I;޽S|(d6seƛڲkJتK*3KɖU%>++@ESWpnPiH呕Jp)%9%A"(Bb..\(z/ +LNT;YƼLKL%XKJM/ ,*3)&Y¸%Kbb? dDN}5V<!IHIHҔkV@(1 +b,( + +Z־r{w{w ++73I`fη<<Q<< ǥPc)LJ,Ih$`2ݝFO涤\]]XEaЉ\ht:}qh4ڒr3 g|Ơ#.1./b` 0:+B9}b!oJ+M'rwF¥`> '|J=XFSi*^DW r@$H]]}ݺ9#ϊR$plT N*prDN#;ŐJmV[ 3Đ*3d9RQ.[bb xE'2>(|t`kق ˜Wl{ t1<K},lSUĢYL@E䁜A+䍩6lgA{XbקO[GXKION'P%Ĥ&kӒ4xNjtJ^j]| +E[aT6kHDJR&铉fH4$*uQ s%Į!f5IԠ4`H#="* YAUTQZZdB'R3</\)&PIÔj%Uk( 䐂$(2*D& GBd9^0) b`T0$ƬDHDJaPCJLa_(ܖ r 0lep@=+VaV[D+|W-[ ,<h9:6ǝ.5/MfRbXL"G,w&9?L7j}277%꺤 Ƣ, +NBCі3 g83ywpx9`z: 0:+B9}ɴEE7vGzzrw`F¥a@w +4bZq\ b 2HR@Qzg乁?6j5BN(QcxZ1j d[a4PBFQ'*?7&C xE"gR )ʅlko켂) .·WRG3OG3(_BW_MY@ +%eݙ j^z J.BWPz c3"MPGeYwgv}Hx`vX9ss{y3 i@c!|!5ynCfl7ʈdfAz_mRkx;e d7rSN[ > +`g^1^ݵ0PaUh*w^-[eNqZC=G=S8ޓ1!Ga3sC\:TA.>13f˦Y>S^]_^783ldWwL 1}Ouoo3<57t^>sB>]<ҩHm̀To^X#1n^9%1?ݵ.F[1h: l]h3.aALH*Ơ6sRK"d) oVkt7Al+"N"\qZوq:EH5u׈9ZN{j.9k|Qjq`XZ/YZkYوZ>fn[.B0GNE%?0a-k`6E#gKPK<{V~"LZ3G*2NTe+N*\B}iUҙҪ%UqKJYu1BqDIjɊS +E:dy92TYU"TQ9T~Vydq9("R' +@-(%Vù*TIPr:NJX[WWW[Q|Yn(,']z'\LqqcDAE^MUp(/3?? +'xZ2|Ay#taB}$<'0^ +NQ!,uB2˳@3d@<ڗDp7=IpZ=6`oٲe:oGY*%,2xoI١ɧy'91 #y ߡɇ9ɚ?KP5uNGI}=,>H*Fd; +5zhp= 50xPw3gٱ 4`PLNYdL +bܐד<'w:mpG=_-޲+ x 5?P qq*Mաbf p 2Ukt^]_^78&%c]VXzz3׿1-л'_H9^T-T=Z6Y!~7Un6k Fk*2j)Q沔e4eNFD1&ePBycar_CA>Fv,xDETyA@(7 ! U("B=;HS:aW-3;;8?쟱$xN*>y9?PQtWaTga i]ޢ !iC=5_( +-G!9kƸ*hqvsQTd(B 2.d~!]B5]E¦^F!3*C_EDUhA:< +Sol0ڏh*#}lCnAʸý.Eމ@;G8d]ݖL<:6~KB((r?qa?<{.'Q%p,k 7䜬/;U~*tu.]֠L4ITV#TJM,m)j1M-rJX^ *SSWZCi(VKWKi\[+WSJX+.K&V\UPJT)*N8UB \B]ˎqV +JDE-< ,;:$&W-S;eAO +Nduȋ>&E`~Ƒ5Bs@GjRArSpYD$C³Sk J&T!Lg&D(4=AC ^%M)ÐC)TXpJl1$$lND\`bRL z\T6#AxaCQCEBP OTXp_TXۉ> +:r<2~BU^#"Dx{#`AZ<1a*7 ~`nV@~5A 4SM@|@|,=plO['G|szjᣃx,Okg; ̃ !janj@P3Bx0!l ߍIOAl +ƌ6& `7A(H,i`=R+7o~x,_r^o򨿮~[|/#0< +~K3_~_2=a{_Ɔ 6||TRg^yE~9>cw~ ^=^=P?Ϗ8:zO!u?>`?v\x=S[׻Nequ{y^tz{cb-[ȟܲg 6dޚ + }YAݣ ` +r_ͽk w&-!_}ݐ2K^½![]{;MSײ,g%e3='fJr*j72.5g,Vg.T_ɛ>:;@țP;w**!sf+A3+`rkeJS%Z2&{ ]S>`_LMv3 zKD')$|YΣ`h*笅ZBnraFDY8h~,ȸ! v}0wj +6{\BT +h.P/ *4A:< +Sol0ڏhCc>cx4pUNw"?Fr>r֞>kP;pc 7+nݮ̾n6TgP#互Ƃ&QLXQz.UhkPj&ZzT*h +Z*%RLD&6 +E͘LsR%ATUJo, N)+ +Z_R JJ+ԥHJ-ĕ)]:kJEeGH֪,M !! !a IX*#jVŭjq.:uj)so >y=?],Cg06{dinڼ1v [Hv5bZ ZD^W,ɋrMD'3轑0RvFN!HRHh/Ɉ $ze^򴘼YHznQ.HvSht +"* tGVqъ+Բeg^-,Y +Yt~,Ykk}R>Jr +%I#(f8EL!B b:INb&u1#dFAA=!3B +&#"N^C$wŭS(ۏRy*g^? Su'ɫ~{~DJMO!S)ߧxO V~_ۓ4E_%$⽱)꿏9A}'Rez9zƅYn^=ͻ]{ 7/VKrwJȻxqg_+MV?nz1n}W.y~=;1\v[ԕ o"rãKG6zBd0GB~ {.͝HR#:r̺rcl-0['#E\_p~b'cV9`$1Skǯ趟o;:diĀuǕGQ}>];Uup_^ zp|hO/{&t*luׅ87e`ePy|NІ)?b|Ӗ}-UOi6:Z;:`}"6΢89< +C O +v z(-]9`DG.W!GXKaG71IM~àN~@$`@=w!5%6~ǎ0ip NBܜf=н;~z8~da6rvl?+tdrsdT2'A~ؑaEԽ=3vWͥ)U-۲^Ӳa{`͎m; wmZIiOwAg?it5iV֭.;zC].EJvcJwʆzJ *ݫ:z@ڻA%m[ZI[0] ,Cg06{dinڼ1v [Hv5bZ Zy}=c3SIa Zd׸Hqj@I@*D$(Ъ5*-i0bXU+X!A*9L$R&*j*rJJ(YJT$wV*,B3 <\- .cE`$(iX(BIb[a|ǙdžlpSp8v&9 `L:g1fb`db0n133G'SsgVgŇhSx'pha@lH0dP*"8 Yas=’qv5w`CMB!2y]΁2,(IAX+֕B}o{NB{C^o}H6GqW^_3:fGr/~:)<|zqG?Os-i<% +g47#֏7 +oߪO>#&S~FF=!K3?տIg3*]SƸ1n+%!`+ЃK"J/ +.={0wEntb>rHJߍFPa~{* ɍQ\tm8bC+'fcAK3!S#ѯ 97P n;Ugk;q='nbcՙ]ͨ3GzjGuՌZ=;WQq`GO;GUaSfɽV*#{P6T uj!Y_> P1aS{Jʇˆv6h(:hw'*5Cڀ+@ MApf:Di4AD_~pT;tp;khgAg 4zX :hxg|i>äj^ݶrs˖u[Z7ұz[wOeoOg%mZA=Emxe3ݶq{pwz*z;+z\mǕlwل)}Tۉ+ETtK+I[%Av͠=7w7S*Ԅi#i%*PqCAgÔ:Z;׻S^`:Jmuf䵮4.۰%dYP `U%57:"WGiqJ5Ek@+*WU`jP(guE;ٵ嫦PSVMd9Q•ŘU+2UŕI_QTA%<QQX6Die9[I)Y֥%DA)ŋȒ:%qN9ED\@bZQ-^f#zn,.,HXl1eQ$܌ETssr3"t&ǔFdJ&="B{CBcfr13ĖiȰf2왠 +}z"ʖfuJ#=]-HbM!%[RIfJxL2Ihpp͘OdG{ cS[ $4%b"6%8-")L!~ +&QO$7hM#b`^"C =ӫ 'tX@ ֨Da%.VpBb`0H)DD%*B *ɢd1 +*RYDHI4pq,,6J &RX%Ic$HIH`.? `A<VT8f]8 l&zf$YaX1n1t [L:hy?@ό?yoN)YۋfkNy'x&C_7p + ;*AY@㬰M`a6U듩o&a[\Ȣg\.JCI,`( ^%#aM el *Je6X7F+^^+$bi7aZ AIObO̻i >MA/fnJ@\o1n aCtu\)#m=/Fl5k琭F @Xgl4{ߚ>oZirPw-XSwhLZ*MX6<@Qq uZyaAjTaf}dXU+d[ Cm6@9͜+utM3fsC͎eLi)<+;{JWSQs#,H"8JO@$0i|(T T2;q)axHhj\6BRb@; N%.8 +JFz$(12|/hG^Pn{\XP`Gǐ;fDE"E7LwD^2^!pr&sNhwp3简ݘ] Q؎0QX G_Gh@l{(0$X[0Hr$MA x*qE/P($ȏ#z8>z }@.$y=Ƀ+RUȳWHsuw糑q] euQq<[.O:sA6.Njَ2Vl{ -3ɘ;X;;jݱvB+m۶nf33a`lLh:}dobbcdDhfD*FEt*OB hF}Vh4fTT 5450@fذa`fDׯ_U֭[U+"0=]謪ZZzR_] +ŋ1p7R|])~<%qkn^وAs"f0 w|f oIh7̠t8btw𾧄P|(:`E7LDYWvfp_mrbńW?83YO֧Y_ÄӬ5k|^+$bi7aZ >r'5?y?21`67~ '0sS04MU&}ǀgW 6LV8{f}qQ1yb/:}S:qX4j^jװʟC1hy>` ~hZirPw-XSwhLZLX6Jq>/Uq.O*G&).+(r/t4ķ^j>#+XC +wa2dHm>E`BLثﯦ- -.&tB7iKIHt|FdP@}+2{oq)˻p%g}w{ʽ1grY]lrmiҗ EE[gbX۱_ChtMF(vӟve!]f 0SCmM tfL ;N8yC8iu~m?H +z%ဴ[8  3JhP݉)9">ӡBS8ЮV+ +%J]֭`J{uT8q/U#miIy}j^O+)U0Ž +RݦN.AIE6PaGs+H+loj!*P7U5`2PzC^)mkILo4+44l%GVϖVd7WׁN6I`r2ʰ^ BPV=Z/TE3$%U0$VX J`*P^%U +MImR+ɥD%p1"Dqp; "|~ IE?t"BL|Q6OB⋲ +@ a\c P^\~1yؼ\PLn:$6i9DL͎Ia '0YR D NF&Ƅ%G'B8i i NZX P^hTpg8dxФcIII!Q!1ID#0 脠Qz'3>bGŃqqFb1@HlVLA3XL0&A"öF!(fDPcZ@x0aDBA!0H( 5fx!!gH 3 7ʓvF ȓy!8Ɠ;C<~,l0+{ԟgow_}7äG]xg7c!g׃NT-EQHds +ƌL&}L6l [{ EkؘfemIVVV&Y[¶giieaao>?}}P{ݑ={^s3sΘ}P[['] ah&E|BAh4qE1ZO, a:Q8sqH ƨ$bóH?)/G|aҏq?0w!".wớnobgjc.gל!O OA֏]pyg9mCOMԝ+O^p=pw ڬe<{{a +e{y{9م<xeKpcTƿ1䭌)ECCnladi"^ +i8 d`nX +h5 6 +4̜ 5`si]=^nRJNϊcnޛ hgYgȝi;} uv*nL"tpel%dyvɵ QK_2hK{L[g,6 M7Q23ʄ]@`]Ah`0qz0Y }prXplrqXl{@6+`?s&l6h#+Qtt4#V,NTT_t$ f}jge޼y2?6/,>;aaaܙ;sg̝F%H$1a #4I(s?eb}Hz4g7|x~zb/bE2N 3*ay" 11)<$W$)I+#VE~FbđD 5X_+~.I ygs̙̿~3JiL>2Be;f1/Kb~'?}P6kbfPv7 +d|P;p:Y>+?yMڴrٟo,Ḕ8o~ F?WS9O,-؄'S)Ǘ)'Sl&.@^L<)'X|{.%L$GKfbԘtwuTɅ'HNpoN^O-<("K_s'NLs&]\\yW`ӕ[l:6|K.'[Z/l3ah={=Gz&F{h)g<;&t"O 4N|p6όv95оotmB!9Wn[cWr rOkx8IxF#L})\> % 4 _H.|}{'K&FO 0qƎ0m9ŝE xSx&>&|;Q>!Ow +">Pd(ޞm C#hT.G=m=uWˁ <5ߎi7ݎټ0Ҳo0ni歠}>{I{I{H5ym'[gЫۧgeWƝ]H ;A#4݌ln +DW3{G r S=5ô[6tw1qmn޴>uNT%lYWISѽmke;lU{Yg[P+g@eIk)V%k`zjc]a4ڜk<@MmLW5 aTR h[݄fLh!&WLXA U+)u>K]^!P~-RSs\\ev@d.s%^+ˋ+LE "cPn(s)ҕ%N[I0:ՙA8b( -4yR +,~{]c7j\[Vj"ߘ[ "Oof%3y4 ̬2iIQcҁLx3FA rBWleEg&ѩ VnZFeZfQJ旡`Of*@U4JD.%*U2d!*&-:jH^Xz({ +y/]PddSpEpںnc tR[e:7Dvfy/!>P='Ϲ|)-p PP +Rg T(H"XE/(),_iW*#P>9/]ひ( +wpq.qP>q7W6GQhxZ\.9˞qaf!7hP\\\Xɜtb@qrrZPp#w,!?y#bE&Y4nf;8B3"7bTMIA\$g0I ߩr:œj_i=X'QC=IAכoĈ&}`䈑Ez;hr4J<9'(1Fc9rwհ=B;DWĐΦ} æ0B wA2>HѯLxy'r8d_ y1<(4>B$~twpQ;i={{WwP7[SYzrOwro  æh wr ֈ !VVqĦG77$`MUc7бo%Aolo9IdojHeYz|wCg.N?K6kmܾmrm7^RJjZ-{p#`Cu7Tu;PӱXsʙWi]uXCUg͎u<]l}EҮ3{N*jR5e'RsҎ]j:֮mk5)8\cZSRStekaڍmfލz;0mZ;a5[8FfN\?q'xX+p9Ӻ7 9ؕ/TZsQunUlڥjH)i\HYXSCI"SjI~ +NjL.jALlqYMPA>.79߬ y^hQZU&'[?vchZҲMBP{#{xccZ+k'*~VTqxO,t߇ ?5Ia>PY)~hG w6Z#fQa]cqS]tV^OU֪5];m߳T׸uZA,;@Pmʫlժ]դZ[rwn"m˩8-"g+oɮ*̛ADr(kjM[neoeUWleVP|czP*;*d/YZb5"}]!rH[[PJ(,'ԚHji5kl(N)Ƀ$Y5KRqEєդĢ",%eCV@ Wز E'b(nrH|.s2s1ȉ] 2@el[bҩ@+fZš̔1S!љ) b&Ӑ ʰ/KȐ,",q>mi>-˜KH"K'S“c-uIq)Dc2E(lil",:Qe&>"GL0>,G`q:l¢X.V +ET("rZ$YHJ&@ +=nG`i:4Y8M5:ZU5!eThB )n!`*``m$TTr +) QϐM PHC P5~ %Hg 4PF P~ +\*W$ +_EKDnLWWAQ*#P-|( +\;0cr!<=,lΜp8vͦⲠɢb ɜtb@qrrZPp#w,!?y#1"Ĉ bX,7z1|MU^HɈB5#:qKG86{ތa/e<_<_yN ků#DoD~~+ ^_3m*2?v3xM@"M dUAE uvZ$VNJB6DDU*(vs/{oH|ߛ b9sxy<)|IdnK籝7cW=hv#rpƸta/'`gIteg?|T/G} /{C}l?/ۈr1>uؓ/Cݍz66A:NI]w>7W.a{qSX:ԩ[.4S&{!7Yƻzc큆E_ijg*W (F䎐.ؠ| ӑ:pcQ7SG`PC6{*UE9*Q}Uu+Ĩӹ=k{N/4:oT%vqꪸ@}U,R_6W~/_%)۪ITaD ukeP&)+priH&g.T+kV AnXƷ'gwր_[|H 5=q1GVav_E hR])9SqW-Xa:KR?fE +ђq6L~"wÂ/Н=:%̎߸^҉.9vf䬭5Jz + Vlr<İl=AhiYbXo˖&[_.(y&3ߜ8 B&?jX/OHt@)?[ 9SBb}!}Δ}'NTlq(:\/@(QJ +cjcVK#H:HPRs v,TrE1VЬr^\^Dt(, (4sCy@E%(6eׁ"HB}:EY&%f )" eoDN\n:$v^19i: aSѺٗړiLFTF){A{ ihMML#gWjD4PxT:bLhdPےw NK +M$%ЙDX.1. wDԊ١=!(! ,>0>"O"#DĆ +b"@1 aѰh~6R`v(!qÃ"Ah`‘@X(nHP7T P~Va6O^0@B_!/A>A;'y @?W`@Ɠs xOVW`m&`s]}=9y +qJK棫.lCΞ,wG/W-,O ustuaz`PjˠQL3LbЩB!4fyzT 4Kz"4++Ory-LXsseX37[Yjy>rVY9Q,O +kmN9(!(B=%aR¹Z0V{X@ p:0M(Q|%6eE4O1;^E%1^-^77nv2r`4=013yXeh>ݣ(L8j~m+V?L"\? +K>-Xz3O/˫i7O~ OI䑚.́;_#zo``j'a7;g12gjKj!8Zd1{g~$|T/G} G7v}o#^ +C=~$ːAw< ?=OI=w?y趋14t3nK:u˅fd3d&xYoLâ=а7vPb5t20*׺ߥ5"w w[p:z70co\wAl:7vnP*7;,v")묲xʮ\)dž6\Fj/Q^ԉEݗnJVqDU$5r +Ѳ|GBi3?͝@>$c=;aku's|6:˞Ǟ>|7ꍛ=kMMyk9buCv1}f22`K?18gA`c0#*6ȀcC7753e1,KJ+U%C}=Ňz@h|ڔ:@_vdSO *uЬ$]RUk'HҡOA_,NҦK^w5^CܩQGL^i"i%ӐZMRIe6*2˱^ BPF,VWZʨCzM RSAZ%T(' (,%KI +%IJ|DbPBI|#b8y^H.$ /ʅhf$ +01,gBb$؂|PL~X= L^t^>ܴPdN*$*Y)TYI aVbdFd$a2t OO$K&Q IO OMħЙ8P2!()6(812I-$# +EE  "Xtx > +% b#A18XXX_t(%~TfI4 +T AQj!H4E +0B$"/,(.(A'8 A3w0`@^{<p!<~w?*n|ow?.črGp|& 4\|x gOw^h8z9xxSp":;z rCy;ʉm֊mɴ4XLl͜Ť[YZhh׏ezזX,Ɏ aL;v@絘nM6D?cc㏊`l]/:}sn320nG]۵]۵] h Ia_cCi-gE"VZ"xja߶OR[υ\A4¦E!wlJhj<- "lJoϳ_?ؼ}ʷ}ijcowZ`Ouh$h!*T3m۶z$dA7~{uMz(z%vbt#~އ9٫:lM9ϣ'PM'F^%:bw~R1t.\w< gלY~p< yr {G*fG GYyx^˃fYwwɁrg^ !wg̩ݞ59az/ Tڹϙ9Q[\ca9=oo:Ў-]j_8]0hy]zRzyleSEݠ½`[ͺA2%Uv$-5+{({1$mu7`Zs5ĝZZ@yuddZJ95&F]۪1 YU$Y-$zPfsy.IA) 4e4ȪAiuUZB%(S"J^J)6POrEQDQX +J*JA %eTyE" ˣR4(W%VM+HО d@N8qq%b\#@HkwNt@ .q 06M]7 _i}rvlI}c7iӦ4!j%83g}OI3;]jʪɩ.%TeWR VW,Ek9^ݮr:Bdv!xTZ@(XOU2;}d9]"cbp] ǥ+@|KlR4֙:farh',ANPۭ8]g"s-vfΣel0ME 9 Ԫfy fud3EM0& ̨ 1hMQmRT%׫ NՔ꩖Y&)݌,˧ ,~O4Կ߆7#;aT= +yr5$dv / .&a@u| 'T,sI_; +3= +52y6rR]Fqz h yL.dT\8.EgGSGLc5=ƻzO 5]8]d} {W?>~̫uXo#=/uL v^5Gsw86DL=qgBؾi#;tԎX3<Թzxφ}c-ϣqcHaeg#GЭrcO*!`kI4+'0哰KRG q1ֹHc쨒??rAq +P3$2W=CQS˜>ٗ9C{^.~ Qwń>ExdLJ/Áذw Dy g sBW]};v7ݾ@x6ݶ᷽;@5=_woտR{KvWW_@W/v@즪U}a+m$tUmTճ{k )߲ݵګ½yEPYgzJ6uւJ7AזlXZCUu5dm *BfZ~nZ rjlE[ +V@[Amu!+j-8[A؛5U58A*\uJH^}ܺrR[e[m)$wd)'P]UH%ZY TAEm)/(n(3J1S NYEb:zX\vq +@$mAn!&3.R0-?u8N+٩q vаv+lWHy\(rA9&`Sfg¬zBE6jYtYkY fQ̨I3B ZbTujHSe$z~1ϢKuAu ehJWp + $Q&W2&+&WĨF!24s0%(UA!FR"ҽ%b9^!ɒ4H M%IR*A^S%dJ{eB RaF.HKNIH\(،(.0x\v("06# sF@n@yo@l6E,09 $22bF&SYɑt!r*7( 7x(5캮3x8p7"%:89emЙ:I#ª|>oo;;z\.wVq8شaXVa3a,dZ`*[i=x" ȝ*A +$WLҡb{CE=*Dxq*$uc]@7^6È#`g; q(U!(p;G$=J9||xvp׉)Rxh1xF9%aT;% +21fccWn4rHLisg^YgXL͐׃J֫!U^^  D4SF/&9z`/soɒCs{$T}z! 0̀kD@Xo;~fkq/O趯Y]>[|ME&F{Spyzz ] vzeɻOq݋9K Z` =-;}Èu8Zûyѓ'{/Gp㢻]St^xkw۶ 퍻._Uyʹz\s+;t֨Ί;J;ON9ZWXWX7ImǷ.jIiQ\Q{cma۷M'p5e'5)m:^Sr|sA5M7nsv*zTa3N3 +jRȭT$1ֹ~u{%ؕT&:I.GMtSP(~5BrZIh=2HqͧPiNBj:%[ȥS!'e ks>ܑENjAw_qqrwt@B8_LhLvhGXm+^1>!c56z!{ա[qev/g> Ǯ=ҿH;Tzn:%_)ڿ9RᾭE{ٲΊ/j +j߽b%y6.hPގ TT֛l:\ fKrmٺ("gjꍠڪ Uj\AXn(kSz̍+Ak26TeZ(makVVVONꪒJҪ"%+ HT旃+ +ʦT_jNbY^IJY~)(4SlAQRrHb2 E)+p9ؘ /̂$)d[8? Ig9(vy$fY:$67}YLNZ9Ԝܥ CΒVg-eY*H1aNdZRztz2DjҴTfiB*&s 풘HK&iRhRb) )X\I8uR,Ɛ'%b@DPb}<yIxBC( '>ى) "'IGpBy  h VG0 j=~==j ;nFqYpbbgbŸ́Li1la [s,= ߗY8hn&TP bP!zCrmc9')a\;MG a5B.ŤQ2P!{G推Np)S%HLD"9^s΁2ù>p};f2N"5Fcjqy79 t$t v$z6?՛9z(:*g:o{=jHi?^  L`D9F/rmɋz~rZwXdSdI~ ^z O$΄9jE?wfrޢ諳GeM֔HjcW5I?PWOzk.Tu3fT6gDD:>L2oĠ'z2VѸ2s#H,~:PZoa{c7V?ƤL@G +̡&0"5 a$H.3 $1^'I- i8Dl n]\ĿvQpw&t#zM;/\ +\>]zX6y=*fw ؽ-KZf`UvӔu7iZ:ԝ:J4\ó e튔\jj_ll.X9G䃆3ZRsuڢ&Pakm#C-5 T6;M8cO*BAeMVjAy'j6@qB5i{r#T]KS{hᓰʓ6e>L au{lw((XPqRGՕ# +[YR(.9\Dq^^P嗂R5jGRJU$J*P*WlGQJAHr+r- +;DH*~HRa6dPR|{vgve9RI< QfHȵEoNb\"'='d!dNۗf%63u-1)񙩐 ޓ7"jْE'Y"}IҲ]iQiJ +EZdjBjdjblg )%N`;1H +ەK SvQ%$D\JsMGۅE%  q8Pptx,(0&<=bKEc1H4FD"Q"e;HL"B#!aHyp-~XP<⇅A( #!$ ؃e>!h{p?-/?v,#;7D-ߚ߶|ϙ hG:AV\\Wˊp8*6:L-keL檰aL'g899Z[kkm~חaDcQ!2Hqd9Yy 'wӝ +I +LDxD;'"띔fH ˆXt3[ϊ!9+ p#%HF e)=07_I~:MBM~/W +@ݫhٻwoo͚5~y*F +s_EGd45# O/S?sDJ\La^9^`4g([q_ | S$ٞѣΣֿ}J Yl "=.yJԄ3i|;H['Y4D45~'ȁy?w9ǰg}`s?=vG>|V^=fW <—H/yZp_yq |ʳ)ײfO"^| +.3'Vb| +7tܹbz ǝm./Gc11Ntw4a˓cEJzjLK(ՖNi5kMަrJӵFPciQcޠ24M43D_:ڢɞB՚2Im&UBC]oQ݅.crƌ挈h^'w_ЇI DBfu؊<Cf`O R١c(0Ƚ1ݛr*ǘMS7PN +2"C#MaDjHa9db$daB@Nja IFxG: +;~yu.$L3΅w^iWۄ$<"9KV-|vo;Ek^Onf>Ui1=_Ve1MYwCCyJs;ϵA>< +R]֮HɥPfWSgCH U@- !   H adAqљZnZѶKڢvθVۙsf^{/ttfΙ{<} lSV2 C^b1oi ̛ۺ v2mj: :5v` DD]Iu-Tu@H`h!jV6U7[H+ACz 5Vϫ#P^ ՗ԕj +UٵjZJ:Y%8UJ AQQQ+#ҔJaBbKMV2idD%b +|R-Fy^2kz"C!LUkb::e^6N1;Oi(r Jc0dpH\ $2t0YfluxmzvbGMm\V, #L͂XPfIdQI5)&@Uձj/YM"'!1irL$UQ)Ra)rL%NN %JRa¤98@!MS"R(X8JT.Hȣd1K/"b`a1YYx('V +6 +va,|F3IT,N@B/R*!" +Gᄈ"ŰP!J"PQ!3uaXPP𐨷F"'0,8.(`Ra50tV}qx>\/b1<==\f{2,& #lXlZ.I<&ӝq~7_}n=WW89rvuމ##qppxZ^ky7 Ɂ`x{0RJFxCa(<+xI"FB8b2R%,B 0l5Y{z7l& g~/fc}剄xūYϳR?$sXy=ྙQX#Oa/ry |~}²eONJX>OGC!oGt_Bս>GKC!oPz9MT^^{yO!^̈h+^b?+쎀p)8{8t7(=y~[@%ߎ݊@=6oPؙZ;!hKEyҏ7?]CX4=Ƣ\ !ǫKJ`ԣK/] f? u w_eyU 2u?y|bf;8N}3`wsŸ֍3k@!ϟy}| kc7F]>Εӫ)a3N~hwX 'ߺ| p=sG!5~Ds31jP$w`C |p؁~:k5Εs۷ +ٷ^-^Bpjf]\7]{:ǃ^ջt 4T-0$m̀ug/fpf:% v Xw)ֵ 8 oY:z阷X{`mh2mj: :YA_*nWFJߵT^g=BL`όu(C{-H`h!jV6U7[H+AC2}NP^ ՗ԕtkm8k"*dUTT2+-E8et4RжRLDc3YajkA b +|R-F3Pj5Tf},PS暨@ArO')?GK2"ՠ5QfL#La0 3\\ Xfd99dىjVM0`&.+ H3S=2s1sTvRM +"IPǪإӧ(<= 0'0 {aNRN֨ ^ Ƭ bE9xk>b6FL4=DWyϷt,=AslS;dtedR24,Czj&}-A:K3s[)iRP͍,0ɭs]8Ѡvu:1VZX FW[6T̚lF-^&W3g23̐NkR4F& +:EiAzHzՐuj ++ABAd%V^KU) +U%j@S4Ӓ51DMV߇ĝ*&9!IIR''&(8e<SM:5rJL*# DD҄{tX8.b"| +>D̎<.>x<ބ + + +X@VrJ` 3?rH\"4A,h0D"vm(BeD;&gbRrĦ v52 #cS#7p +& q)zCI~*!C]'ǘ}c{W?d=I9g]}mu]4Bu>o:ahOe`jB@w+&5Cw5CD:dOseߧK6_qv^3_;v>Fry.qEF8L;j`=%d_X}yH9wvN9s@4zVׅCÇz1oex.߫ o 'aItrB/P.l`?vxWbȡOvIzGn,lkg׽9X B}" fG`xqa<oBM,n ro%0@ÙPw9|7Ax8 ~4"!kCJv,2?wN NLz3DíߝذLSЅ!ة&5$%`C @H]iJ Rź* EAl{UQ + +һ"EFݽɝ83 9{9;yߟ3v$A|M +9z:iF^;0)Lf8D~f4I[|x2<0#vXc|x㕌vNx=.`>'C@_N\F0h``%x_?ݴgvJ{}-O~QK>,O-M2- VY[7[<fSbxgt^6xrAzxׯC/Q}PW#Zvupr=t|4Jt5;Q 3(6 !C4&{`יD x7s.ǝLأ֚3Hm0H&\-_ĆoF@z'P3p5ƍ@o3 78ؔ:6ud+E-Oچ ZMcB֊̮ R{,Rya%%Py~GR-Hn2x:(/4r[/@sks+Zd4Um:WtPNP+zIDin"?h voA5 ݻ- t6ZOBC)X'>P|Z |ǡ7_3YhϡG.;v?qZ5ְmYַ.o{#st+%YE{k@vHbX]=mJ)k*US +I;UTWORͯTMTP.WY>/ࢲ*B'NUIU$cH9wOY @Ҏ3G#e.+'8UUUz IqQ TYYdTJ?Q9QҎm/?V~X1J+~H1F&K-K)ݫv(#]K +>T WbQ!ԿA3C([{lݗ)a?-{sw#%٥E!;Qv(@+DݙO$ =):?#WE$KMAgT!Iq$!IcƬ%z+--H A QjhF񏋈W$V"T-vEL($M cF㈂B@(`Hq< +7\! + # $[!|?\,|e`?9T"[ ??/| !q$H^h}o0O AH<b gb_L+vq| }E<7!W. !n|̕&@ ׋xb7{>pr˕qbyk.Ӆ`{AXnA pyz8Y,9m-T5fbM%㲥[k^J:PdVR  +`I ;N,-0Љ'effi25Ս^LLQcddIP2>gY߯bN" THH2=,X%H` FdBŊ,U{thFEΣ[ރ+B}I*`I*@0,P/'o[Rς!$B$0ٷ,xof syҜtmyҏnZB0H}NJl?}iB r* gݴgvJ{}-O~QK>("BK";k#$8qNl;tfv^gOxZx;g{WO~}YC/Q}Puj]n~~Cn]a.+\s.f~$}6ʳ̈́9CjSwYL`יD x7s.ǝLg֚3ѶML`uᖯfbC7xg#laHlopX@oFkt0op2Ŷc7] گ, uw5 6g[wŖUtV+uAJEREKe]* aʂ@;jjycJ8 +R-A]( -(VtvEBEtU,zݻvνs{ 'pHdevg|yw;o)ǵ+˛UNPʱ]Mh*[W]p:oaě3?*EqawG$ ޜNY[2JfHC2n^$F\b\u킌7}^J92Sg8R&NygsR> +ێ+;%0GB/FOsu!7vG6}NnC Xqd=6BZIӰN:Bހ8ᒏiv=mêWMU'4LGʊ5jzڻGں +;AP8*8Ԃ,0&`s;<^ݤ& hǾVP^W}1uyfPnGm&iWaBYmհzCZhDe5W2*jqTx{ 7jpq YZ}"UZU"PR.eUI;ae+^Q\ +J*/^VXnܶRnP➂v;'FɎb]y89;+*e+M)* ̏Sfb 2 XA^L~FerDD"ss@Q9٠씬Dd%23>YX "}[:(, &$*Ҷ %4y)ɠ$Pen'-d[,FpbL" HF%.IoJ@` +Wl GEE@q~Nx,oLDRĀ|"8Q P(YxP$iX`p$OO + 2b?W!%~ +JPQOȧ|@@,|3@' %~b_#[kMCU&aJ2!."OXP 9yyฉ=]E8܄Ar9xk"x8y2WGW[ijRLfCө$Ab2&FM'Շ~O|z/v#" 8OO$o>KY$1~$xػp}6 +E,4PboW`}e=M~&}}'Xk}ԯSf?] 'pc|o]0^qa/%tdbQż3d=}ޛzNƇ2 )wInЙ9<ĸH?yOYb3xX`[N#=ij:uk}1͆ Xv:(rv@N:}#Y@>ᒏw2} aիY#eE5E=]#m]G՝ (`n(8Ԃq &5mDhǾVP^W}1uyfPnGm&iWaBYmհzCZhDe5Wԁ2*jqTx{ 7jpq YZ}"UZ?v3x=@Ԏ3.HJ=d#HHؗ}Dq:`բ ZmL[usf&7orIP99|y=iꄵt:7w7u- u{W#}6E m {G=dh +\oP 6VԇP^Wx1ו>>B -p>Hl #&bbbUtt +)*DFFEȈEE^MDDļZX ka-:W,BQbJH^Q1j [u}1jľ{o 7g1FbT%$%r\:Ic 5$$!\WɦYs `G84YD4 |Qfߥ/#=?Fx@j?*kEʂ _ɂ+|`ų@YO~UO=#&}>  wr[#Ka|TJ8w?YEAn[Ϭͩ!8?sz% + 맖oL9um|Փ!WN.茚sI^c+3ɗ/-#_g/LP'R.X;QZܵfQcTD܅cO(Gl6ufo {q}&D_ّɑM3quSQ#}sЋ>spCԁ Q=^{=UF{*u?.Y>$z}\Șȡ]?%M!'?;C4&ŏ( ;v1~ ' P@ gBzr}>?EG!g:Ӧg3&E8<6zFܻ{ľz:yw=uMZ;cJIّ9ݙȎ$d\$v7\y{05`"fd{bJCԨ} ?óoێAH6V{ݳy0AMDjwoCa9fƭ}[BTnUm߰)UQ oFm m])҅-ܵѧЋ+Թ!@OJ6v\}gon+sCk.PqOS'ӱ kAHqtػQ)lh;!Eu [GhmFS(-P~SuJ>:M)AwY-YTkK! jWCX]\2T9*AJgPQ\>rL_f3]iQ)H[RXҹ괹h ZW qZdvgV;HYDQh)"" U@茬|f UY &6h Qz #R6"*4Mw1jpuˆ`UaQpU.,*<"42=T!JdbPGb!$t9*eIB!2M,H { +x@'>xA\ߨ#p cb1!L:ACh`+X3CL mlV"8 R70J InLPл+)B vT +7u}Yu1 XHZdBx<*M R]'9㔴4{4NX¸H^d1#hÕՋcDWJ8QWeP| yN|h mS^ !/Y&f} |AȹgF¯a/Fb׀7r}=0rO]W [uƿnǾS?݊ ?Wc_W7}Fo"zr=BZ$pʴ}Nxx9.0.p7 rpo{Fu\(INpgC}gzNOuovM9̮ͩ|bg$Z$lFƿuRB?폅\>!@={S/R +P:c +Q;*\$:wbIYUW._vvgsMOGގGWWf̺ڞkIε7joʞk*YSuPsfW=@}uW{}}tm]ʴ獲g .;Nw$wCq7]&kf8";^=i܈&9@A!1qt<…&zG8wɧFFKOJ:cŧLjO |)#;'Prm&cU>#Suhv1'"ۄ[xg="7 о#0~ek{7cgmBB{eno.b$`$di3XZ[]-[jvl2o6B>Іi%Uo_O<U4Pllkn޺n7U݈9iGM@[RlmhUl^ԃ7l*\E#'+ݰ0{ +RCY&@[t5T~լe(nh +-.,4coKjf,^_/Y8b$w~y/9ue@ٵ5d+&*]]ZQTfU͆dΝ5BFeI7s2*gV+2g&WZZ8f) f\gRJ^<Ů8̀Ey^ s AI9#$gx0#+?9?e |>=4m:.>/c:3=ו7,;,IɅ9smَ<[+EΚqfY2Lk+ dIwfRdItoL) i^)a.;)eX28a.K8 lwƐ0$[$KXI ݒR')b3Ax=f"G\F ݡ!X.#)&)`MRzYH4dSCßS Y ZBO8!cFt' {]DC8/ZQ8CŠ̐SoMeiA%4]Q[AR ;(QAB (*QwqT;{I2\]y_~I>L&El9Κ1i!a0.|sBa0]???&|x qqػ sQi$u=w{椁ˊ;Jщ ;>qKif^#M_4yV׏m4iЖЫAk^[^<#h +}V C˯AAM?bz-ȓM&Y4~| \(us,Q']T9ND3D w:6) 7G`O6sc&`F@F;KmZɏZM&yђ7q}MVw(=R3zOV|ńpmyEj`M -uZ/%TGR~(ʕ^du/Ĵ].̔H/IO-`vCR{͕9.d X~ UbK]Y +XŕwGbaf![ARrIk8h Tu3  SzѨΖ%9 l Ic맍~<ѿqXq#ԕt'_;M׻~ErAk맙Oug"[c,j8,j&TwETK#]L0Y 5tҥt*izuJ*j{sr/9_Uu6\e UCCՙ~Sp*AY'We8TJ +$VVWH?VzV[RN$V]|zT^U*CTT)US%$P(N>|P"WthN!^bw*m+݇:S%)'uWs?l؃T)؉@H s`j:s@1r {#5/k7h˞]$;cdWz.(rgvHĎ"٠,MB3U JJe&eFZhF"$$}2i oNKnoO%99J&lۺ - % q|D<$. +Sũ 򋉈F/5,Z-[A| +Q" R+B$P!bIBgfD@L提TE ġn! +!P[8'7X0{ + AB%[{$M,@}=~<_7 rr9z}'/7Crx9x=܅Jn0j<M[@vew)Y8AV8v|K'[ޟ앸v.HpmAV6|e۔C)z$-:`еXL#-#N!`Xt A4C_%4 +MCBL@xB6 _FhMazzzD".]BFGGgEttA֭[mmUvY;kwuuZ؇vk L|G]́h?{͚5#}h GA~G۩|t7i?¬;^/D)3ޜ3)^WzYf8_f1!?O,Nqg$ObΧ>/Y #g0_f|,ΈY/i _Av(}FNJ|r_)"g1XD>L0J_ uE}̤TA̍ OW10z7!`q 4d]7#j{ݡ/v}M *A-c;B? B9`y5{9` " +YBAM?bz-(^K}.f5Gp!c=Kȳn2Oe*=2_fs9ecY2a&`eZ̔lPw(Wm#2g +&3rm+YVSW}Zi^Eq{mMNDYWJ8SCH(iC'7B04T"(؅uf)ˌsf{!<7μ9s=W9髐OuʹiWa&/cgeUJTD7&sG5ܩm->h0D{pMH_31(k9r3s[WxUU#BaCƐw27(fi%>b9\l+Pȗ;>#AtڤirNkΟ$]hcʀ?Aqt}]o m]O%iin4&`aH7F6Z`:1= LW#հޔYg`cӦP8S"?n_6y$Ym۶O}cIh uǓ zL͙΄~y*KD +4c cV ?_yu?/~zin! mR:r?<`,67Ri+8~?A{9|A{@K1niPr܃yz~ݓvI-h8p^˃i;BLjzr7-( +]jt7d.-Ww{rgd'ßS4l0 1wRn9P/|68@oWƛSkfK㧧=UY]bW8ʜP#*}򴙶5*EblbL>*cWJdN(;U%sg&h cbq>4?&AwDŽ !w wFpr#<0r +JjDȸ9,vEļ1$rrcȝ# 5ϳB\Z,AW܀ k͘sscGM.3;Ȩ6KMۙ&O2H褾VLZ':;Nam鐞&FK1^WtLoSt5R lvYt4崩g3;[͙@5 y[u(GkZU8QU'?&~TԀR˫AiMH64YB:]JT%(Pbm \NRu1&H(A]XċDڴ$&Pg-@SC{Z|D;*%"jQS()"EF&FD&#`d" B"MS1""qjfTll쌊Qs̙Qkvͮ5ኙ@!  +cj|NH')ҡ|֬YޒY(VG~O<(bq+KZ'K|3yeZq{dCz|1nf' C>|`ˇJ @f!;PB^g͚x@CXT)俫 &cgI863O +{OLz`oߙ_||? #9_oqߙ_nr~OI;o#mFn-Os!:ѵŐW&_u) + Å l$ gBul:"rL,ȭә!n!=Nf4 Eźq"5oF ׏vtߕ (zyxKGR/wp*P_S/ S/ NQ&8fo??2aى]k=n9u`M˩h9z_>5(=ZGNiޯyt_w=#W 7;7|c2֍"&q1ꈈr\b!rry㨈4, 8"u+12,a^8"b]J:XܐC@0}Pp:;$ڼ3_QsOKAP'?e~C9476{!wb?Μshb!"By#1~>`JπBws2$$~7'ޒo#ʹ?mِ{|r- nn=ջk`K a jo_۶v\MuA}@y Wæ4ׂ.ݨ~P݆ոW0րM\^"^Pne;WGR7zU(WoIgR導*W!Uބce˱rE{T,o9Z 5YT(ac-ڂJ;`i,[a%u-A:_4fWTs{A6omO&qbT7] xW\ǨU)t;EšʰL0cME P]^ 2tJ;K HWEi+K*Ar[U\$HtXRKPk(݌dDe/(KLv,Ef@I-HfVMn1Z +-fP1M"<" $0e%֫'t*@ 2O/ urDԇ#(tLHoi@JQsRȅJ,LÖxL(K!|)\O$Ġ<\AJF"-qv,n>O&'|sl!BId1LF2HHJMHNJ S63@Hp⩡=->"5(Q)"##"QH02!)85qqq3*66vFj*~AH PAj P@BBDGe(Ql(38:#Y"=+uУ[x"~^}'dýkJOOoMBЅ.1Ǯ>o!萔cH"DmlƥB&P>· kwSwĴz>|1nBGѬH k~Ə97Fz>(:::_YN6jJD3nFH(_ k>SM}Uo'ڙ2֛Iz=tJD3ěq?cJ?ϋ T^qPo(j 4y^LWW0;n]G] o<)\>w6Qa*Q3PӷU(3]fG7 M\w9Ư9Ʈ99H^8Q +N݊F;#vlQC6-QZm PZ,QCv+K.J(W(wShuFUw+Hv_ VTS{tYAo}9LW A}A-oD/TVO +;sPz.C +[Vt*^vbۃ~]`>ϼg` w:X}8m|&V+OOU_UD]clq_EY[޼ʷ~mfdw6s67dKEn&] +f0*$DS= {SN1>iх8 5~O_rpQ3C_xu 0uM#㳵3G+ <xc~48\JPڡR +4J[S[B)=e)U%i]$rW)"x@R.}Xe;&|WD(};U+@^ζ%X { +v٥exkI^ޖ]X;U6֪({VάBP vGz& +b +VK$*/5gS^Z.VLnjedE$pR"3Dd&eDe&gbEf$ecE'-'<-!-"5!5|{RA۷m +Iٚ -DB㒱IIx$!.q XXA6oFD%zk0xsʖEH8GDqalXN,^PB1!HghiL`tXL@Th4Ȑ(X4_4 +'K. Gᇊ aqCPJ(W*/pNOʓp%` '/x|DAXB?1| '@<,W/ǏGgr-qz#&<>^\,oO5l'/wƆywN^Vv6fLc2Q`&TIf4H3EA4 +՘އM(FQV`ll +FFFZ"iF6ԈL&kdD I3jdh5aÆ5֔.t ]b~mЇƁH r, I8&(7k%J1Sa|"! +It(Z?gm 1b8Ag( A^F,b2;cltSO+c#ż"bn69?@|PYE kaVZ SBjP 3ZUBA Q*-utt"O\=݌'\ mM}Uo'ڙ%bZo&o-W8\/K14y^Zy~zvc-?w=]G] o nD)\>w6Qa*Q3PӷU(ӷLtNp$4q x~#{=jv8PGxĝ.vF5fKjWlY%;@-%Ψ.=fS:|An&z. /iM,}lyqOcUaOk 7~ɲNrdy]d*wt4~,U +:+r+ry](U]PVzT٫ﯦ-$@ ERЫH -)PVAgT(RDa>q|}ןy3ü{1䜛g}ޜh#zNMp9"ȝ)!YC &,N 'pA. W!ܼ(‐ \FDŽAĂ|18 q'$ZEDI ꅣDBIP4ƗJ0Hht5>!P?wozB@^ ~( <|ze0McUKE#d" %IFr{v{C>^nzN|g/g7;Kwdu6&6c0m) k ƔdL6t*: }*΍emC[Vw tKR5XYYb 󖖖F΂J‚% fAAhȜJJ8lCn( YYY]3Sd0 829oyEx30R/[0o2>wӦMH6Y!i$k9P$HN(-SJBIPm5Lƻ{߸~|#Vb&׷__p~2˫2"AF~z]oX?>CxV^Oݻ{g~Z`w?z|Ƿ+z_J=ț{ ~ gūEgۻ1/n91^Xfz~솃 'k2O;Z?Yp Gyȣy'wsF^s U{#~coDgv{Hݙ܉YcvoO$tq'n̝1q;-v6Ąe1ud"srk CڢkCMf`cBw9oW(gF5S %Wף +3C+:Q3c5څƈ9w{~G3BrgJ9b>7C'EF[cn^q@Hx7ƅF_@n^][sG<9skn]OwZ.;bw 5ҳ`1ÃOpi=lȹ\Rgq _e 9s:Zņ v D;l:6fHgd`9NStSLjn+Mݭtuʓ.UO['Hyݢ)7w8Fcv Oqp#Q +?iu54;'Qv-4עAm ZkPPNAvs5F"Sjél<@(CSQXvL ^6(ՕTWԕK dRWTUTʓ+Ut%WR+ + *"zI2%^ ^RTW-/ R_J,+@ TlZbU2e<^)SYrȋCbp2^}~7qaIV fJVz܋1`1 6BBJ,!B!YBdw$#ٲG=w{f́&<&)r71@Wջ +k+g嬃9j+jA#,V]J AU%T,ŕ sE r_c܂&ȌvXROX٤ cMXR1;K0E\:=Eh|aZͧ:}:ËG{P^e`AV [4BN¡ Q a 4Ee56=Dne6Mi!m6 +ުhrdF$5hL ]7Ҁ%*x) jOJV&Ԡ\4H-'e$ +PT ɐ8$%|Eq9bsdLB3+&=x?xN4bt*!:NAѩ4⨄U +%drTHMlbؼA_$ + #WIDX"*ؤ !Vٜ rY|LL rf9d!ybA[1*o"Me4ˎG4Y\$"f)1HNS8z0nNx|KG}Ⓡ'M ݳ{I 8C}}KӠ)7ļbgq=k]=}Q D/ۚ_ +m5a$R?A$!?}wg'o_ܐ +kz^4p#۵\_@\B?@~ y4{x% JB_ w!{&v!wΥ`{>3[gp}U**rL3oOp4\ߜJ)kc)&"v22~" \|3Hf]<ׅcYf,uX2Ih&kBBaE4_<2}\%Q>R24ҽlwUm59_h;@ؤ}# +k>ulB5Ac:n?Q_ggOǿ +o㯎D+#j*!JviM(\:\<>C<1FgjQJrHùӇfFqOKagC;aD~ Fh{"w +ȁw }"ȾSnnB f=fu0d/d07d&Qa,ڇ(];t0ܱkv8 jM؎ CwobX{p}Fmp{Բu`yKzP0C}6 투kܴ:h-a*\o `7LkX2~p>Pݺ5j׾f`ꚵKWVZ9m)Ŀc +P=UKpUK RrWXcYz\ +ZROwXrHWv%Xema]pYҲT)^԰HQg}ȷ=oG}O{]kQ{}V׊eǨiv7@ohgSX_U磌+樭kk@[u( lb?VTGPTWE3}xer 3aJ=aeJ%n4]cI!P,(9p|` i6</AyA̓Z1n£r q8A +.Di796hW]k46UgX (z¢˳fԠ1$Fv=ߠ2BtJDk:Ԃ +3<9*YSrr U<%(@R1$C&VKa$yLq,#+S ))- +\6a|. Py_ +Ê.6A/.65g3 @X BLf 9шѩt:! F 4KRO\\\TQ("QE"*6Mlb +}(w9A8 $*DU IB9 ɥ"6q!gߢH8 T0 a$KPk3a (`ZP *ªx{\u=p<3﷪fjk,C+Ostp/;݊jl(+,[TBl L211Y [IGҍ5+4'? }#BYO=A(X2!`ZF]%߁5324cß] 2L`zJ )K&6d]-le4Ц_ -ֱjN8[S{P{tIn͉5 ٵ#jOoɭ:^RX}hSٽ{w<7=O5֚ tXF<Qj~2XCW+~RhV]Z^W_V"j:j8ONfZ^QAK?Y#r 8"1%>a1!ш2Vg"bę2PN'wj{jqrDK + Ttttrtb/x"c39-Xq|wOe =uspX6ŤݰerN+mtò- jE =Ŵ=2[`6J۹Q>!}FRZ6%)Pl[Gkֵ[m[*ecm"$nT\Djl閂WZ`}ul7[a%VMXf HXv"aM1" +ΥZE(V0faav%[zUWd2W`3/?-"=א:rr`943ȊNF.OXI':3)#639AN_$*-1-:515*e TTDJB +Ll2XD2I.L'/H'!Xx₥$–_ M7I:Eq@U1F-$hĀ.BϏ\@1*h^x=Q +EFc8X@."NMG SE|c"~qp^ B(.@G똨BUapeh@ؗjBa!0O-{@`*O*G2U)踪}AEwʛvQz9x`s=N>*Gow'Ξʹn>vr_$|L$bb7&"!L &&0HB3a_8;ic|G7`EApf̘a~KK˯ega‚%eaEpSdf똙M+SSiebb28δ2.2.2qbkKq QUR,\) p+RJD +t##Gx[*[o{&0cE+(YC-zsoIm/vZ +(> +V jP@J>Pſ^jz=AC{F !>Hý!FFF';e;5%H0ч. k> @3) [ u3lu~ 1KFP3z˚Ob6hS1zBɚ޿`gs%w|XB +3/Fo[=A&oz_A@fĝ1. &{hU#7F]'yz*xBY{j}ć@I]u'hvIZo;zzkAOnNh'=lZh4_T=- ـ-9+vx},^LA%pq6xa6-5+xeW,z᧪}]\xWoM]yBlP@% Pٷ Dְ5₊.(pڙLgl;:v9JEt8ǃ@rB&X8'o!pDxߕeյ >=c5kpEN-_Cʅ6>JIio:"Ĝ;!=ΧuD9t70MV$| Pk +u5LN=t%kѴTӢg7gkR3(:\kmJբkD)IO4ǗSY)*rIRE^ X[$#rHr¸R &$:_W*-ʂS+GΤgUɍWiȢTtm0CȜlsPjLԾT25YD\E%\ܯPT)J#2Hҡeb*<#!F%4-A +S$(HRx()qɱ)d{Rp!1ɨ$TH" QDYDYط"ġcĢb//_TDt  7Zp 5{`O$2!CQ^}((+,NZGxIP{HRq KaJM@2EnA~F*I12c$>A@ qgr +@zp侳[K%SLy^]eŞT\=@ŀ(] qvHQ;\\1 ]  Q +;;@;-m 6 -8 @Yq-i;Xǒ*+g^% s |ːlی89 0_k 333J,hafƤb2VߠcՔIib`2zoĄ҆  V:~zJ֭3{W6Xk# 3uL0 FDs2!u#!PbErY=ɜrؼ\ߖroe3`Cp^'۽{#ȑd06D2eο_{^>q{_ߞ^Pѿ~SjK慯syonz3/^? ļz&#~f͚Wۼ3RYѫ?{~}ø~~=+zP~#w9[p.28p@V5?}9GJpѨ?uN=wwRzqgN0n[OoܴEسXPy|hݗvo'1\[kL|Ɨ]N? Ŧ37sm,JĨf?%L_ƾ5=5ps`3v?pɆ={ц}޾M5V5O&μP^pV݈xճ괉r3Gz=^J=S,W&ƺP[Ѯ +HV3R&NMZMJsC^|@xM3Nkf3;Fa f1Ӄ!pn]k7=ȰրD ʇ&z;p[umgay r]u锐p \hCLޓ&AG)BŗBqebKrėhh +bfc +Q13D`rd<*`2]2&*2'=[gIīX@™drpCH ^lkm]^EQj@};? R,JdiT$j&rd\@T7H"n5\6 5x] [O5? 8 <"'PXWa:[l5> VD_]Z TLb,"cpWdAsDrb\9TDcTV1JvL H.ƍ9 \NJ`q EdTS!G(FTV +.imJ7bA,+*,钛t̨5rM0b=Ϩ2AJ#Q!U`BszR dZ2*4e)'d"2Jȣ$@2 +YReciR%*rl]jfz &%|!iq"L(~S03 j} .753846MbŬM`b)`Ϡf$Ť3hL&0>*t:T|||T%..Ԝ9sb֦ Yͮ5fzI+>F|8OCwļ̀Y"U!#O#\MʦUUPDޱl?kU4'G?!>H"~I1̒'m1y֬Y/1mS0 랕h})~zo7U))v#* 3mn 3f2[S oHȟ]|" r^~E_2QQfMӕLȽQ)j&Wf^B~ɀ /ܹp1- *ΧAnK|E$7ΦF}{6͙I{*>uJ_pk'Sp\*ׇCr<%jth@F-d+.",^LL;ua ;|hww0{P*AiyKB~f`wp}Wѽ[Ny:=ێqHjc$̵*Ih:!ӈq#Րᣰ!qhFtiP%xD9QdJtT9|qIF?,=RO~;ڿB}03c`;WLABg"йlwLO$Ov!#|3҇o' 9DH@B1{> IDvs߶Dޅ][ݶeOOox-끽޵e;`RowN~{62Mou0onmvtm5Tf +ht6 +lR5 ܲ."y-؃(5Duݯݸ{P ]+c|+MXv$h[ i_NƳ5y-^ۊy-5K!խ@UYX YQbeWi9xse塥zH`+Pqkq5JaPqC#wj`!g@[j5z P\a({u8?Q樫k+kA VSʈoEڏzʨx@ե KU$*2 +we>A4Gd.w*ƕcLeN4ALeciAA)AJ_lǔtn[1Hr`8rnmEi +\DF0(!}n90j9Je5r֦|-b":¢͟.IgɌZ3(#*D4R9Z 4)ul 2IZ%kAsjPrB&"è<*JJ!UKd9leZn<5'SȑW3RS-H q&i"L=g~S03 jhO;˦%)lR,+fmsŞ *l&LRL:d2g`DEBIǬQ^}5mP@"H !@E@A@4WPIJ>-JAAiZ {'C4_r>{ιw~/ĄF[;01Daj gF3GL Qm *}& +QZl= EB%ZVQ%Dʜ3+ˣEHh?$^nl4‡N HblF̚~G9/o)V{- Nܷa"@a\ |Sc"4𽑑QB 4P+ (w9ގ/7#~Q!53"IpȰd~@l _!^!-|{OyqkI}KkȃOȟgnAw7J֓}n^WX*xh KHx|gS ytCHiÙr]Δ^w;`Cmsn:P}Z!k۴hW_Sov58 .B­Zպv8z8Zڠݵl6^kkVS/KaW5M.i:[Rt:\ivǥmwbʋVU^;Wo+ɽw▟7,)i;u?! 5rp[e<@RU?H_ďmCzaM~Yهẽ݄J5XQd;(߾/V祗mكK+ݼ{VHj]u6lL[LeǺ=RvoZ]Em Ys#$e{VmTh%ml^,iK>hVM^[o)w#,"}7f⊲ +b 3dd3Jl^$fCj.,=7:7-JTNjvLNZ(:;5$ .d>Y+,"~zPXtPxS@iZuiai dԤ9) xkR J]e +'h%J%Dc9 + QH YMNIĪ@p\V@t(RǐD"CIT(*H + I Sj9Р0:" PE$D^D* C>((@U`侏RQHdJ^b<& yItxTe"?,C!.>HA"o1_˵U^OCU&u[YE(bɴ@X,+"5ǂ/e\k+BaZŴDa^(%#-,,(1{b3cٜNnftC; S133djj`Oߙ/ĄF[;01Dab 4[nBGLit +Y#Hh9E]cCP8xFFFKb!fβyB4d\$X§,y/C^Q~pGEKIʣ[N}j>K]fa*X޻He&vYR H Җnf!DM,y{|3r{<~Μ3Lb_-Eq}A1?.\Q/QN>;ZrtOUνyC$X +7Ƃ?/!ܝAI!ks2_AfUlyRŭļi  17';knOf/\އ_ru fN Ø2&t.!drPM 7 L_c~ alaD˶sz5ڒ.y] Rηv佚NP!I8gJ~Jᙦ6`oV^#߭ր +XjשZhP@9pԸM-!Ơ؃QVsDItRFc2ٸ%C]QKo(R ISUՀR2\uԺ2HJm9U5ŸSI.TWNQ0HT%VA K!%r!N_]:ZC +ʖSUd+堣BMW^-HˇeQKˍK䀢sRq9*;%;:+%;*3 ,2  +8HjZ"( ,xzxzY$-ǥ$ +I> +N7thĸ!XcYXMq 1X&DAE&#󏏠w4 ; +ƄbI8X,*$8FMEE!$# "pҰ #Ih`(& mG* +  yU^ { Bd"JG|2?&8,rH%*ˤ-D8AosĠw=rsO;k3z]\CPPێp9lǵGٶo C٢ò 6(Lͷlll~>ɤ`0m1&9L:VVNe&gAuʊ嶽 h4ڶ=p϶vY;--’X,SyH7 `/&ގ;~+7kŧiIP$WD9{,=hA$ȓa"26ǦEJ"JFH #4U)'y/%z&9s;޸d[K+o#CY?}&88lҋGzT-ze/}P 'aSd/xN&M`o_y)!;l׻ svwwRz~gk`Bڂ]O "A=Bj~\!_~PWBlqƂy'6fQ= +wgnYKimzѪnYk:ªsBoM'1SЕqgte]wDWvc̄zc]߇km0k\1⸫?rq*ѶgxfVUUUV.hJ:0 uuˆ:q m/pQɹҙ>U: `cI*ܘ<yΜ6'J z2ڌݞpS"ފN[2ڌݚ,]s_rv qz/sj+5nrGn0!C5yqO,YIxTEB ְVҊSZAĵUj[>̙d{/o".p=yIODҶx0_OK QOiWVوky;!:`Vjhô9hyZ-wKi4M&L#XK'H*] 5\QY_UsUP@<p~" +̓jm5xj`jtʒ*: +oTdrODEX9sB}SYS+(u28H0^3z$oyW{0n؆E.:FL4RSFilf^P: ]oWیdEe)ҢNlMB܌y&aTpr0QjlN5EVQ@EL UOQ4ʼx԰EKY +<XJYpnVfT >`<$EĒJ,H"!;!>{: *@%'sbH~X&s\Z'fohq#.T;`bhQ#9XRRĘ=%!!Ɍكg5f̚Y/i1(I\F"H"]aQKbOX&(a3fJ&(CQcVKIe +Ө3M_dfyjU1;ɘ+I("lI.bT0lb=U5}xZу/e?d򟇅3fxiL caR0zhD/~/ G>I<x)~pO[Z?ռ?Q+O_#`]ޏתi6ǯPwP|m4b(L&×ya(__a,|K?+ʥOsŴz39?_FF6g jj|ᕅ|73)?ɀ,|/ ݻɃݽYs!qBė2l?^0 QY@uz~ԧub>I'&];>/cs)w4r|q,b|tq}xq|`e|8䨌8ʧY2Y#YqE6@\ppFFT)CcVܷ?t[L{2o9C 8}P_=}kOojxA%u^zk,"n!"!Аtǵc+2|\U\QX|p9?~?wb KcE9?3a萄 {1jȻYwR)Gʢ#G>#R`.)%?ס7 o FJ9Ie{¤CIC;zwmڷmgǻ;B{ػm־g{Xhז`m)7o5UM贽q \Z_0 +kٹ~ u_6DZi:FX㶵kHiJYOjܼܲ*zM+0p_Uaźqka&խ__zrowv]fm/ieS֮鍪YC^VT$K.D͊尪W:,XXZ׋XD/m teݍv;`%v#ioh+m`%6LkB޶@+oAյ[t\&Osn7aaZ:ARq&j WG4Pz ꯀ"G#Q`TkSVU,USVT1Wx+, {"*IfT+Fʊ|2\AA*$y# ñz݃qt6ŭ-*t84`*v"$0Jc3;Tap(zft &{,*KMe5ؔufof3iڄTd-̈R`u)rJ=B*dZXzR*Vţe)r Pgs92%sgi2G0|S"0eb#5E̐,"!w=3>L  # ܣAɜ8 ى\.ÉٛsO@ *Mb'?;E:Ӂ8 :iD$1#GgxT$$v"8{EUaXֳ=;߽/ǣE ˥ph{乩f)X,<3G8(XlqX| JBo9';x)5َoLF6 ߺ)z@h=CYkda'Jb%/{a}$ވK^ވ&sޓs3߁ݭ3 ]-v7ϸ3jnPlth8ÞOΗpCtarpUvUqr&EI7ѕ:vJ.h; ^<QI]:S3]k֤l_wa+M-7j\Y†6lܻa]˖K:e0uWIIh S:τ#:כMJT8Lu1L kG5T˧4.Z~%m>%=u`Ww3C?7!j<9ʩ4M@8&R-<npGj‰}*?(= _*UO*>?(?}@[FǾ(qt7#r]2%(_+TJsΫڳvX|߶݋UA}}|϶`e$m voRk+ۦj` 益 T \ +ڱRaIo_ ؈+ڶPuM5lYd=Y/)mZ>o +uM6._˭^f +DΆ$UuUU!]ܗkT2W/լVf^Nƪ%W2XDeMJIJ+*Ȫҗ*m/+϶t)l^eT1bҢL,)\K[\DVAJJEAٜrXZyAIϖRJsJPy%% $-)NY\SLRK*ʦRK,*L**Lϴ) ]Jȇ-ȃ%䂜˵˞7A فy\vl<&Y̹0sƜ eP1.f5)6Vqy '!Lƹ%@)2-7fHKE$Rm 95").$KbND%4Ha6LImpaqvx]\BoEc#18::sT.5Gļ+`#aA&l 5!"FSAG)0B(EX@n0mPM8P Bp`&z9|VH']%8H1D%bR&.r dL,bKEBL,.2L&|,}Н! t_,rB Ev"'>P(Y8 B%@@LL \|ǣr-o0`C:l6wX,<3G8(X,6cs&*̠Wb&H!&4J̨)Vmq#J˱[%y_Gݞv}Ȥ}z8Zף8a~0сPh^Ablj0A_fߏQ?T 7FC~o !alH'x5d26I倁߀3؇(h0` 7OXА3,zCi=g3} 3ңóH/gt-'nѐ>,Nm]oHi83R +XߺqR+g+ɯ72gؿn=#<wa/>}fI`C׼zxB'KLS-^B\%mwݝ}Γs3I<ŷΤ!yƝэ&Jgd&wB{ Zaο:81@r@!+ ]@QQ P\XŰ$V@1uEj]L;cm?c39|[7XZu>7n\0^w+=nxjf+cTҹ1}H=:mgxž(i\nRb23sF5 +Hsb]cTg*?o(5d +9S^ʺkbMlܰ75$z'7ipQ)8anX8=KL +A!LM κɸvagU4yg@!ϹPT:pkkP?;,Mr 3O)PI Ť-vf6R u`s8삖'B)1&;a68PԳZ66MݨhE: (sX#HRʶ0YTSB3L&Nq.*50ҪԠc}JHD2k2+3ꕘ*Pz]4u)(^[K)6f03K>&hyj%U\UT4T^QP2T^h!WW J*+]=%y.>xx~ģ}6;p$-$(@|"; +2H~APB޾ ?ٶ?=B4؜4h"9ۺTH\< o>y&̤Ly&hkFRtPLEIIݓ;u!Q-)]-]rLdNdLHyB$iz7|O5{@aCB!vmK$3nQf)dGwv`=& m=(>PඨAqQ؈mL[#A{$&"VP@tЭ⨐"-Ѩ(k[qH8"L)#I0<0&  ¤PI0/X +IB$H ,m +JXY L(m +#Kxxh#4x EbpW+aD^|_&&f^:y`_!~}X扌=iۓP`C2OCع5=^? Yl< ř=6{H@-գ?/} sXb7B7?܏_ӽ#1 } ?Ջ;>; 3g600c7I9ތLyz6魍 @כ==Xooxb-=Z >_oըUFIVnչ2tn>n۩pZ'?1ݐnRf/h1jp*pd2v3x!,da ""{=d#$aO!@W7PPZw3mЎU[mnu^[C@\.29<|j{޼yT|$gJ;(J$4E2KHR5)|=txr p~zlg&#C/4_??^ޒVr^35Ce)IS &͛7oAOTOx_zqO:د7w%!{6*<# +ӻ0d?2_'A<:7ݟ +U뫬?̜M?``Q$^Oxڤti? +X4Ѓ?K )g͕e;R .dSx>NXFB2//ՍdALNvnɌ%A>?vf)IN-!tBӓI+Ǔ)cLp ba؉8œ /=5t"'j踈z>qw`iM7xGu.)X_#}5o=쮞3795 #6yVVE7hۿao=ȼg`n?-Au7oy1ߵ RsVP;7ԽqV_?0O}w fH ҷlSm&Fu>P@7.w^gT>Mkz*7^OčUTXruti[;Xߎ +)_ײnCVHږ kWNk (Y >OfMҕ)lhSQ߆Oa46-5M0\H4V5`c7X+zw%V :kAZG UcqV1U;"$2! ),59 Il_T XPR{?υ݌`1 HAkQ^'+U쉑HG1܏cTi39O `X?#ᩐ*E~RJ?!)DrB(!Gљ@*})Eks0g [KS wyg9^BCI& \WO]sqt[beεt +DcP!: +14#&F0cFf œ ! <OkN}:Qp!gj/BE%Gk?LP(yPȸdHE4ejOgބ"q\&&!xA e(CoTc٘t"|AADuƳe@>"$2! ),59 Il_T XTBڴ2 DfCP l5tBAnVP zÅL J_Kj3h"H0%^,y3g9 +L>s>> 掫Ėr*pZ{UQ49#xhg~,? KSM |QL zeŧxP? z@xYf{|U%0?ի{n˻zq>g :ҟhl'deփFYq׺;W[re-N0oO8ݺzqs%;[j9ijĂ4=jI"ϞDQZQ̜ )S< +9G!wxwM90׵! ry :.sP͜?`G:emiL5cFᨡ3jXP⪍St.qX(o-Rʆ=dTd'T "k!U)9Yq*#P~o3@v8)mga7 `4^PQMtPvsބBP-P#SPvL&XD^$~:wH܂^;cddAjvkvk +-fc5##:kM#ل@ j!|!НC2Ԃٻv%|B0߂fjK.VF"KpAA"Dq   0Љ`$K%Ӿ{|ؗ󟟣-~!PWO< "K?,dSѺpO#7< [}ms_j> ڵk;i߱|!W>78^?޶Wcm'^:^=ܶ=y?w~m??`~|$;3[n؎V]Tx༥w{g)]3rQGp=o?ll%obS;-{ȣ[ ?qP=7ZÎ`a/[7Wʌ-<ڝiM}>el6au5k[W?.^EQo.].,s(Wl$,^.^xс0ud=uJ2Z~ôB0ȸyёpdBc`SdwLwuwօ:Za/fc߽7K= +Z`3wo5'{wc-LaCM~*zXAS TN_e_ 9~W⨭kʩԀlebV۪JdUdQ~'rBR^v7R^1 `2Si!)cT*=*"gP1!( E:WRhΑ[j rJޡAŽQ[Mv`WYA6` f!J +R1i-\LcPWaB3#Lce'ҩdZe\i:PZV)YܐlUE֥32g%H"g#%HDD"ѽCD=Q磢"e:On+0R}o p}]6G^CjpґzxSR}kz[KMh:|~%~=>-~&_ڼWWa,2_Q?7!|% Ӹ<+r3IݻޥL݋Kܾ|z2n,ԭӸ>π,r㳹IQ6: 'sH}yvvXWG携2<yp*Pʔ.~ +t +lJNBP8a_>"}D{NƎ'rNHK( TI,ұdcO}48zҐTMS6/5|hM#kvtSڨ6Ɛ\|s$[|^7~FzF2+$rO^8)878?~cS؟Mf}/uH"kpkP b9ŒN Jd Lx@ & SG yr_<)}wxȇ{d|ԱݒI%1)#0)HCLr ءH&d&ak̾nV<;[}=6m{m{-η!7o:`77B:vn +B3L [wlA}76Z}Md__,ijzPUW5mƭ4nZkظq0ּv Tly?*x7mOckأ`!7|* J)?+= +[5ޛ>9u̪W> ~*>Ek~Vv?a<_Jq&\#t'<=rv/ 5zg>gk[~ذp/qM_[8>l27Y7|}ng]3kmޔyYfɋԽVO5sO7n +fwٝ&BWU@ܺ⎺I0QYh2w׹EuB:U'XݵnLZwF[bC Kj˙}W6%lh<|`UәkZn_xlGe۾֫zI_T i -!-JB%~G^?{ևyf빹3n\[aZϹ! 49 h:wCh&8ɏ\a4ؕo]L I bsą)j:LЍ"[:;"N36}W'u A쁓5\©bӷ_i8T~tՇJOT,>﯁~](9 /`+-LQrdEGv/>{ʿ2aE_V탭8QTǃ;Y=d9 + lv +o%_Lpa'Pw3!&ΙH)y6l#[~knU6XήʭdWݒs?Ddm_klۚMF+6,RܼfMPft|6Ve/%}]Z2K+K*H[H[[\NfI5xDh5lPeTRV# +J-XZT_L&$oeJI~1,8g%<ĢE+IXU<{9,0rHaB2L|~f~B^f~|nF5qyt $&g),'&+-^jbg[Bd-Eg. HES)QK-%Y\dfXDŽ4Xx65nTTB&%Txr\fQ\ +, C͢fN`3Y(Aϲ̩ɴX<Ϥ3 5>=4mf99Srv6Ӵ8988f͚If}ٗ}ٗ},gް1Y4s#RbjyNâ]ĘF#DvvvQ 2=,L0(F,)s$O폦uqތTgHƇ],ebX'WLJբPhrDA'GTFH&5w]"ur$Rlggy?R"28ܪCjL3y7FYP R?;DFT X?X_I7Ͱ#`Q-| <~ʫ>%>MªWuaϚ?~ Z)?X3\+85>ӪPg{_J/-c=#<^@3mnYbF Ý>?M_ o`be_1`|zxՇ۪m^Y"uӦ^&ODw'ۈu`v5 #&q;겧Y%l:)u5HFE7Fy=.zzwp~Af\Ƶ tF=c:jJ` +*Z-a'" K$}߷ (PAEPpRwVm:l3Ӟ3Ǽo6}}HǙsx{ߛrmIKgHBdKU +elUMõk܇7<+.+׼98Xwgmo]&mte:a[\#jiXBgԐFg5a6.&qg;hpSC;Ц)mWrۺA6B׵0]#ݠ.:QޖNŧ*`(;@ðMs;HރtuSV̄Akv֫H:$kjFIj$5M fFY-X UU x2PGJ,h.7Ԋ j,@k@RT Uu%wU*0Jί׺ZYPnIJE~Cy#,נDT(6`)s +a2$, + +%i>F(._ Jȃf(˂)rP\ȉgb٠HfN4]jJ$M&L2%2  +8ke 'b d$TzhZ{ I= +NIH"Bŧ N;a%& LI +JN&F%#A aQEƃcð~18S|b1b@>Q1ޑAx"Q A$3\h 2 + @~aaaP 8 T5f03  }$+)rr=d0O?;{}8{y{{:{} +Py/d{Y{ +>q9۾͞jcMd0lxl1X[a1ZP[mbC6Ϛ.4ytЩ4h5QfQd(YTyd2"Hf{lb֖-kyjӦMbeeAmFmFmN!ϼHZV" +Kz0 B+K+؍Cs|V;sÆ X3ƒNu4=!z1u9-*čB#!%VVa- BB[~X06`;!s|_ +?B}9o~zU7OYo_q6lx<ЂKؖ_}_|?> k&gLK~xeҏOxWb0@+oc?⯃Ô=th_^[-?WC ~ !սOm nŲσWQWd"jm5IV׀,Ue ZYZERQRIᙽDL"<./X^ʜX.r%e }Lȁ(m/)i\6K&r\07 p J1PA*ɡ0Cfڕ6j!MamXY̤F9, $+x:|鱔:Lb<\K$W%d tJ6OPT +9J)B +D0J t)9iBX B<P ~ϙR\vDl9+"6E $dI1 RL:9FAT,^y^oխ+\3YK}O{3X^ 1ptisG3Os$)q>9$;:}01S'>>8f2}I|D^$$?#&(؉+WqlI}#cGv1|0Лqu{!ؑ@hvmv! +Y#&FQmnSN]y{{漷e{M=swwyg 7ou -~nwT]fܸgnD onn+` j{gfPo_Ȭmk7e6l]lh^Ei˪NXN'e3j=yJT55nXԄi\sP}גV!|Wկ_ʷnQJ:8ԭ]k!F+@u!OU 1jV.zecU-|g󖂪]J9T.h2*w,|i»}A` f < ZaY˼͠xe0J6BlvFiG};Fv_7{V]K,,PQK] wsmD\M5Mƚ&WCuD + U G}%ӇaUkZ[gҬ5 KUY5VVTTexfoqk+@& 2z@2g9\IaH_l'S+r J&uۋq@ R.4&̍)Ba p"vsfr( CٵvMl`SXu6E``$3, QkAeIJ#^NA(_+Ggz,4S'O-U4|u t*-.7G{v+ 9[8ںZm\.VVۍ4\$i2H cTe2H(m%X |{Lbh7DILScC45u4iPEJ#DQQTB4 +1} +d2!:~OVS_uu%Tڶmۆlڪڪ_,u6 +U$;Kr`|$?[׎C<{-[g@|t1ٓ`X؝v#|$K]R%)ɐjIRİC~z*y9hoˡ?zsɇe˖?^{+ {=xf`Ypn.:33 OϜ 6 BR>,:=j~}l;[??׀g!UU0ݷva'J ͂wg eE%W^̘)x~ay6mK=,N dҌ8aG&rLMp=S da[qosHƃ]5}rKlDhVlfۑn@֗\2IanIL1;`HEP ɨ~CBs@szKdt*A'3>22l19OAPQzԉ>}>$E].Q׻ c]k6zQsSwE>j+ʣFڸkK%u<ٔ\` 2pM;&{#EieOݧؘ,ERڸ:LrAgTH1ۅZzFCQNk(BPR-nked6AՐ )>LU(d:TzSete]Ʃ +Z`ׂODe5F K6Ter*A) +*$#*䔃Rj0eLR R`3"%%NJ$-J(/W(DŕƗƕJĕ"٩&4kbi%iV]$7U-˽M$$)0 Ii$@r\.w!f?nwm]V씻3yo !6pX_?雥vcﺇcj6t gT{h.5]T:0$dUQ3phf^HOTeo3' )n"C3 )hh)kJۂV_k%)m |`9O.m {k)ikAj;Dh# +ɂ`U>w^[YTԂ{uy [UY5UFf VQ}k[=2U+aze% cN•ţ:KI| AbiK^*Ńx@*v8qX\* t\ +ީv]ISLPQv`zkBL ب6T +J|4S@kuY +J=5Nnaj> HjUEjuZy쬜lD"Ab1"HSҤ2DrRBEE"AũJ,.HJ/U oHKO/'%Dx<->y?]TM/;!l,Z,VbLb0 d%+Y~a"A(bHF#fy:bR\,Cř[4b훆dĚSXbFnC0ʘ,piR^*,&8BܘvI C;Ӹ786"}My[gKJ5=)),s0%-Q ~G˹[h&[oc~Zʸncq}z9d)}Zޜ>~1᥇> ,+`/ })/kA9K|wRl_y1;woO͸zz% g.F8u*G4u:C0uFŰϟQ0k'9N.]8˻p.>S9 ټg.?3'ǽv" rD]|6̇eC^95˿ˤ}H c(DqG&ۛA8>NGHه-a5sx|wNvzz7 PS;qڱ9foTlO;:28m'?-j7O j{ :.P>lغJ-;2Ȟͳ4oF%{t d Ex׼sޱ1j+Ѓ-4m[JغMcCA ۆ6QŅG m mr@pRo#(i!Yj7{;fC08zA뺇R35Hzs34c0ч E{0}=Ez*{Ad=aHywsI:@aHyGC;&HY{ Tl5ZC-T-HiK#txuaoS]XOIXr5TC!BC!WOb\?o:ثkتʪ22k X* ̕%~] ++Kt >,YJ<O[bRѸ-R%8iR9MR8NN +frҦ=(,Hn[bX@FȠTW eFZSRUꩬ(tغUب,6ju +δF%W\/Di2JE 2T$2AHPq "K,H@HOO/'%Dx<->y?]TM/;!l,Z,VbLb0 d%+Yb2M`1yM 12Elrt,OGLJ`KW)D>MJ*G 6` bX*U +bQަ3: ådXi)ՂS_Mdmd$THK(^TEXA]bE{W: +(J("kaտ7L&9Ͻf%pM-LrI_{$ v ޖRBMMveڡmwO2㯒/_G)E?Ɨ!z#/U?5>gϖiԏ?G|ID0Cl,@3h&><~Ht?B{֟=HI,>|Z>O~) zyݯG7/]IDuᾚq&v@uhg]N;jΐN'i dY'6'QAG@GzoLylG4Q3Cݲt 6SitϣJ48a vzkZ6AfEO4Ùwԉ8VGګ]8뚘:⸃el@Yiia׊QR%v]2R +UUYJk-hk .T&[M(4O,IM)%V[W-yEB񲘥pILhRqAȪ ԜA~kg8P" tYyN8)dvbJqWiBjD 'Jy\|ƥ"F/x0u @k=\>suP!F6h@9y@AY'k2; ,kCTVs*rqtASI;3_K>(0i!R{=9mϪ?零2뮕wRoEa'!%?og꾼){s5vs@MwsM;6N|SMZm<Zuf}mYGe\f@Z.hI^&ܬ=A6en%l\g5oH> h]Z-9zds S譂,J-L^K]&e5 Ve$gЉMOJ%&mEZi1+%z,j岕ԥR)) ڒ!K&E$%W$|WB/–.ZF%t¥T6e%TBK@! 1 Űz A ", +$,E@K?&\Kh_2oTH .VK HM ֈ"E('D# ȀHEOx`$$,8B8A. *4€=M y+3  䮐5g0|4R?Ro?7V cl9r.^|c9q3^< #P%92 njM3gΈ0-Eia,zY,wd2if{)cF =LLiΌwell<'FFFߕaaao- 1L1 !^<$C@ +!^"$H#)$>OI#zqIa^lR@ +وR +S5&BBD)ǟ'g!B}B.@2QX!JE1>6a!H;$"W$#_D[}S _^#u,Eo3h㣊97|O~|:i/-bg>3e0<7|r,t}x#.=؃nН9ӰϤC10#wS_:͛>7~7.>)n_^4}54xLzp< GH#w՜8p2ӓv~{HӠA#{Ձңz=lq7CZPG_^26_{ l!эݕnkeGrkT6w,=T-y:ڟj)o繬 T,m^2%uD+{ݸfSی`iq5L50'9qEMP)lpԁN"7)tWҫZ]|VYWc&c8ՠCx ^yR-ųx92KgF0") ar$Ðg ,cѢE~x4Pd%205ta.]c%/T$>^|犙{粞:-yݫ|Ϸ~5Iҿn8NxrIy<+J,um= ܇WHM~|C sAR}st ɢ b|*̩WcNY9Etx L4ë1_Zz?XI/9qp%RW{ˣ͉P,v +C>۟ҐOsˢ[`[0G=\̇3ɘ#HvBx%ÿڕ 9HN  #]p'RPGȎͽdlT9CTx@+Y{aO' ++[ ]u6?RQsYcYJdJZ</Ƶ5̞V쭁T7LN&@cQ@h @ 7cR讬SPkl.PRʫ@U!yNQᠢ UvVli+0k Uc5Y uU*7=7uYQ9HUj,#RQePLFfқ2ؤ3Es$FmJZc$F(HR3j:< )DhP@zQ^Nn #׊uj1jy@% + iB-_%@R5 xJ*[!)~\eD +P,&d$C̗xf"MG&sB4XY)Kd +^}EqqwPe.]"v@cWF5z-Xb7hQ{ĝvyQ%}yg2 + +WQ0%<"BBC2遞bЁ@<." 29B?<[ƃa6MbIɤb06E 9y<SϏJ)'''rtt)P(e/{} +*_zȑd\(h>@ qBHC(mЅQ0.ԁZoZjͷ}Hxz\3 ѭޘFT@5/R ՞﯎xPE~4biv +*PLĽJO +fFݹ8Ţrw nfSNn̚Q ķ\κ; +y p+iٵS Lj7.fWN)Â3:QK.ӫTMţ"zנ#b@9΅Ò1:&R<ƿT#ep8 ψBZ~iScx{%#'sR *]qlO鲣YȮX,= }Z҃;|KD{ؾgɿJLvcŻnۅ$hlc4f7cmGTB${bX N1V.6D Mbflf`e#Dn*.ڌh%Ņl+ܘpVfPƦY6ckG-7n>X5w򢏙fY!EK `8x&V! +J/.^+uU.V ["S=<=܅.RPx\6qQ, kSDžᒃxp9,fcIX,b0I1tR æt:A#?Gt*9R6dS6` +bSeO!_eK989 @7H,t<:DMMRpQPg:E /yCzOqȈDe_vez g:@R+JW%}Lz/FGA{GD-|oW9GՍ1{tF#χ{ Su%FND4C]?͛N55ء GYKHf=Hn6!'֪@Ga+rH`W-A4}*SA^8)~}@藇@McyclvbdBo7tt]>{p@=ﲵhaoYg3ie^mu-5JZ/SRg'R䨵!86<քjt Dk5W54Md +ͨz_ &HAv5Ե&+Z^C&)-<ڇ겪*J}%TjRUƒ +_r*p:#HQP> <=DiQeR&/),Ɋ%xҢb"]~Q-kU:""RKԁ JX"P+ +Q%F9j?ON_&pU<\PR'G"VRs0B '[^lH 0Ll!*X2~6D*)]|)(Sē2D !|/1. M(ҲX<7sS Y*CpYLNRzpgnƶĝx:- CP#QbQiToOWEGFXp X0H ++4TXXP +  _ ڸq_U@@lذg}g}gWy)C@,z."Hӣ!(}ݺu;~JAFS$4IHqyN$q;EF)i*%@u7QB?~{[$' +.t߉Osh|(%{Y\/\.KR̋%G,sT߯[UV/ճ{_ӻYkK]ۍC6l"H̚bzzktԗWoѫߧ_N! R!=גa7Dw=# +ZRԣ%C2 v5JR$h+1xͧ'.O!w.ܺ('n]EK;!_*>IR.n|yq߾=em;;0Wra0ao|vnG(c>}R-HVB9%, Nm!w2ЯOlvp!M^/#6^?_K̈́= t!Hαxd?$stoyh\a!o=™:ӇS+1G # aSe1^'c1 TT4fn,et|"*5hv"!63<0;:Ywtdzdhvfb=44N`̇}Ӄc8@51(h~`wt,Sɾae!"Uc=DU ̣]DL#ND?T9C:0v^`;*z@&4v1:[NG7i*wzmDca.[;6u6v4Pغޫ<PIke[D6dž[=ݚPZ[MahհFLCaU)7ԮdXk!gWʫ2ʭWQ̾(M&UEIi,%Ǩ3ZU!۠C:/yU&+lRX]'-*(&"u"V#"(DѠ.%,PbjMd +x٨e2W%e)%+pr*"lHP(A,?-p +\Ŗl)r%gCB9)ȘR!zHE̗2E< (Cā ( g xLHRx >(-C)H0." Ia3{Xl$9) =I T +5:+EDѐo(d;D|i$!df&,E""6^ GbW`NE +b;b;)pfwwC~6^<3c\=8lmmecc(6UX,e-kYZ^eXl[|b!\{($Z +!J*J SJN8] NE? OA*9;+^Jp-oFb,]o0q:&ڃ)s)N`J:,pL>Sr6՘}|ZCbί?OQNe1c_Jo<i~ z#~M&¼|%zyeO<\)f=I'@ OМFZO'4=duѵc$Z-u +J&]Q;TQ;5n<Œuq"ݼJ2+ϹI:cxg\h5֫?LI*gՓNFuUrޕNU:.?p鸓Ej;qk)UWNQ;Ppas`JgPreNs$0hFĩhG\ +8Q,J%=b\e\osL=V"T9s/(.=4ȮeGʈr,=T9B.ݿ[%pŘ;s(^wn¬W^({hq"2nE%dN o7doN%cBvBEEm]p;l%̬;m!ٔ^XhMoZ-c<@ DiASXgW#aZWhκij>[he_2gun>KP$yd)9F$-YR H_ Z(i":g,3'qy aYf.RK$.!JY%逄lŴ0YXN\Lsb3e->w91 IS҉$fcD +HM11/i"ΚG1'q.nv*)3gSeq)T’b2$L,=$1z&4 $4#1D!t4303GEqxDcMhEŢHbCbpQh\((",:( 4(.4BFDtp0iCtD4DaP5FkF?PMըwA: Aa05O5M RU/?_]b qlbTXlF1A3J"^DO$^({2B>@hBHK 0ǧsixܣ1CQ=Z^a9wš w#~bl,Bv5LpN?c:=$ 39j#D; FY }j7a6y^DNa~${W. H͗Z7Ppܩqݮv3fܭT 7λR ᬳSƅVQM\?V zɨJrɼJg'.wHq'n19 +ة\<*|>.?,7qLAJ8s6qzҩ}͈8U{ܣWU.5:Q`TY*UJp{ĸ x{D©(s**_^Q\{twi٩&4Ŗl0` ,7KZu˒-ٖ%r/{ƅQҀ9H )H%\w@r\KN]3ywe6&0κS8;A50(ޑ=#5&"^א:}=Vbu}0{ok0:{ZuʺQҮ !%m}kl7G_i+kFZk^W kj6Wi,hotC zȯsׂ2uyAy^{5K:ʁ"[i$c{12UZNN2:m0G1#Qg؋B 6Tp e }I~)ZBD[d)&`d#@œB`o,@A& SC,9 eU,Cf]N.(ˤ]D1զ3 $1*s0*,[e4!R(5 qP˜i%ze6D2УZD/)Zys4J(CЂ2J҄NG4D!"9LDL%LdL PH3d2 ==U%99.am4/OT.GR%N"Sbcx>M21|nD\K^.Q{yL{6)Y &)&N`DN0hx4 B&_ZzuDZ*^JrVY9;JP武Ec]'cQi)HI i+VDt*"SB +{ЬIP=EAӣ$Kъ:z>#MKhE(D&E@JRDW̓9}{x"~_'GwLqxhwO>Pfa̛A-XoK>ˏ?UDy=#,̣[2LN"w`On o{t[V$E*/_}Ad~8:c~*5Rx_"_;D~w#; m턾g!tv<+0.g{o G[H0r-n]Nܼ[@lI}ui3N2ˋC {Isݼ,7o"u\m +$'oo ŚD]=Ȃ2 M+ga 0QވTbȘ!zv XOWc^¹Zq:R_]x%މuw'@ΟXrx|Z;քw4s:ۿX 9{d͒YC?r}dKy}x&!l&k6&0κS8;A50(ޑ=#5&"^א:}=Vbu}0{ok0:{ZeͨPiWS6>5JRV#Rk jZ5l5E~/櫆T5 ++44yP 7!O=Nr׹kAZg K b<ډɫrr+d̞rO8&w\Q6J+ɩq@F (F9pd; +{Q܆*ח. //[Kh,D,Xc3QlDHYSRA(5ȄAay%'3*rQzܬer4f"R`1$Fe&[e&DW#V3 rD̆TzX:>S+yFeZPZSQ0@D%RCR\N$g*a $%Kdbe4S* +7nJ +*á8\J,?*_%Sbcx>f28˂~).{YVDqXa3!EؤX,Vd1L:)Qt: h4ȿ٫&-H2Kѥ$@B +HP`W]|OvQAQA@]  I~}9~y䗄eFޟ,.kR&pLfO 2)s0_',BxE%s$@B\u!!;Y (AT~BDoDKG2KfG9!2ۚ,Q8":;י/AmX"Ha%E"{[I_{:~{/kHtPhS# uF pZ=辙`g8R JC2j; 0q>]o !* K{4Ц2kSLI;3[G3*cD4ǃE3sK0Oowfv;ׁO3^ɦJqK)ɏXaٟ|`}56x><>ـ꽍:@x4ۇ?"av:{3l16wZ$"$4 ><pÓƃڝ4=JOfzr*A{X5̀Ԅٽ+.W.\r]rɄڋN Όjns: Yq\qWqUsrWGȵSWO9NJ)U@Jq ( +BrtKQJ` ?c?$t|=CR+Il :{P; 6*/7:OD(gG8q@H8W:~[ɽvEw-;}Gw-=k?NȒû Ga/ڱGPτ=Cܾ'mzDYnPⲭ@yoN*nAѣ M=Q޽s=!{:-@ h-ܾv3(lUzcVi&P涒t2J7fn-ސPI\ h4,ذr`+pk@-_=jܵHo*мKK3wUa1%Eb"z+p)E+RK )ŋa+AW-,<NҲlB%ĥ9Ld 2$gA@3^LТً2 rs,ȡ=?;~츬y .$Jd2p423!FQ Rp "'OXԼ9AsRHMHfiSS'ǥP@dfuR& Nb@QLfEFEBBuERj(b0$q y*!(51("2%eFޟ,.kR&pLfO 2)s0_'X8m7Hh  Z=D "FߩH+"%zQ2!5S"i-}=2;tүpt[UIuvuF_z] +KR툇#$C]:t3Bgp>w+ff;i}0N/o?ē1J-qn +tZs}RĨuj> }oL٧`O{=Oo ]c|jOt>4B>Awd|8 !-CH&? Fxg{/Q}}(6x {l zzlzUmBǣ>?̀ݟi/[=iֳj΄Wu$^/k=)5ne'7<({tk ӌx@VC\6Vw ܩp*V+Mp•ҽ+.W.\rԑ^tܾ{;Ans8D)wTqvuWGµSv@U'<=K\ qWuLbTy58"U`(Gc\:o+@Dq/  $:B4!*tqqoK;ɦyq;dKvrؙ xO9}8ÃNT؎p7aqlG( etyvqqnCHw`mdnx!w Pݞ!HaHͮq +.cS.1Py֩M:G@V7jodTzpޙuc@]T#NT?d9̃NҮzٿer:Ae.:Fi{ +1)lw4m#+jolWO(lkgO*jw,NQkCIld{W&VdpX!z{k42ho6I,u +*4jfH^MY5Yn`"XѽdXKTT1t-&Y%؜U^l֘ʁY^T1L uf,0fuJ U,֕,(,) +0$rCn92XvLe"i($e0|DI4|D yhL8G$Oɝl@(]#&K˔eQTW3q\JF(j +ze)*a_))$* +JLQ*DK2,AI4Dѐ&!H/% |I8 |IT H E'Hŧ%K$_T:: Y(Hn{1)jmtXp86'"lBCY778vG +f4TP@ @JvhF#%g3#'c?_fKiժUXJ+W\R+Vx&>>>KjkkwʇYY + pb װ,!$˖-[Ay$D)O%p9a,d+Xd +i"גݵ1hJ6CϪ"G=#UD=%=! nj<~޽ߕ;UogQf<2Y%=V@x4+[nKB5dA~#<=7ufRt+ٍgM3 N wfdOS(|mA!L~*˄KL\cJ/᾿;K.R{i+g^;n]% ^Jɋo>~G[ T׭7^` +͘ 9 H6~&JWx́ҕ77Rft.߀tn=!#68_G3'g7P`>>u^@ZؙuNSkPk9{\ yd 1y4$ +rH4(ءZo@Ԣv 3Lw™<#N(«{"nHF'vǧ"pvsM`S9=}Fd(xnrEzC|LwNOİm'GuFkO AjwCjv SptwγN Oo9aU} GxאWgAX7fT1O-YHXɒD|ul؟&.@ʤC + B@HHB(*"V@׮X׆JqWbU@,(( +v3ޙ &Cl9s|sNT1>A~RO9,7!C"A(^R1M28p"%os7B(9> Qan\ shq\p8.f8,z{{X,J6wBp$b2`0Yrbb `" :C IS{A2$ ctrrrATR0P/ tFrJ<A`)"uJFVԇB,ּ) +v뭙 +{|hMTtyiu?׸F'e(h'FyxyO{^&L3'v`H$[OmpEkb>cۇGLBy_EJ޷8&=엘NwADAH 7͡^ ){0ˆa!:EwB2ѳ`\7(=ʬڮ -WpRZ-u-I.Sjo{ޟR9?̖ƳZܝ~۵؃gU/\ ܪnV`nT fJoPZ7^oI/JOxu$+yZqqp'a%pt@iәv;OtL^9cUGFn]RLNjS;}.&ul wtwd;s86C+((aX9^S!X'mrlPK8cvY_sU7M۱ +P}5hٰ۪xu$knpˊEWbҋ&N%95 V s +'Й695ٖԂ tRې7./eҸlFLʞ%J hCNbN YP2+!{8dqcFƒFRec@cL)YTə,L"}ƈ Th Cz&vU2j!cn9OK3*&55x4]JUj/blN%aJM2&#RH4IXLU 7&i HĘ DM@!i6G7IGa1@:cA P5D*&6LShqa:M0M^1F1QFքõ0TPȇb!M"by?Pp"%l@<Ç>}xf0$d]۩%ҡ=2ֻzW9a/ ^؀inWM^6^6 h ,B$ !={z3'7TUDZ j@܃h+>u${)5_7_=OefKY_LCY?Z_og|՗nRQ7}07Xq 3z7z|ʛJ/7|'<:KǕ|15{VTS-jvI{!)U!ߕHJ;Clj2mrZǶGHqG6֌pMvh;`cڸ8`B!q/:KBH!:Lѫܽ%NݍNqK۱d-:w!031Iѽ{y藙1NMq'wj" ?1Ŏ<> g4tL O0^s`h`T}p{XjQ&TNr`A2./j rtyÝCXY^{{ؼm6oK|.tY-^O'+nXҮvPIg^"KGCۼV[Az4<Df;iN#\hnqAL*XS%lQ_Q)8kAu255vH( +нTVZ1TreN:َRĞ]Qb7,*,җ`"L9kH+5a%ҥY +K@ (SLa#ˊ`9EjSh0&ܘe( z2?)Td~,p>qB<ˆqύˉ&a(w;lzZQQa1!X DEEb2%db2#hEFFH$>D#_pRk֬-J + [Q%$$dEjjN"aH kPŊ@iDcQ E +JZj.95ŜAߩ丅\)䅨DŞYQG4M.5Q'C :e څ E:$l_ߎWOo?VlIŘuQ9k~U b=T +0y{^ƿgU+!vbY}'Ml19Txz_^2@9?辄sy|_ yrowE+_,pE=4-=ǷåO_%Z8K/vͤE^._$;8?|g;0k;A?ڎOCxۏBȲnAmܻrvܝ+p?[3-D,W7la}fRĺͷ7&ҌK/.n &g!q))ļG4|r! mf܇go`^=ԕ/3?xRᅱLޫw_I I3_NRv p<r~FAc.!;T;g>omGx꡸ErPt@,@^1Na/prqc8;=8Sq)7;7|f*|xd~fW{lt}tWwtdT{dx +Tsx>4: ;yۺmޖP@K7]5Z eNVܱ]MƽDyuAٟշ,mu-)n)jiFyw@ӜFₘ7y熽krIqC މfCXvtԊb- a-_v $$@)H: EA +ػb  ^, +v~731üdk=gs<7ޙ^< zg&<.30rFp\u +aǂu;?Qob0)L 6dW2Xle 삸h;A*(!A%Eȅ&&&&?z.|Ӓ P9%alM|E0o[Ji| 1Y1=y8{e9|HO&KFzb_^J~-T-|҉Ҙ|0j> 0㑐EOS Wcf6P=zBH_]/=h6!fvۮ 6pW Mgp3pm޴?< xvK +MeIPadmO@-]O;nL{N:]Md|MnGhu\uw\q?F+mOF܃gFW݋ΆBHԻA0qjtwT焴:ҺQrDw|ivp>\:WO.UQ+'t{Džpʎœp5R@1 Ʌ#R\a k<ʖpts%9_B'^\j,SGWیqr |\WpUeBr5|\;S +!O[[(imq.ILsf蓐=+'qtL6sYiYdqsRA30sȌLaF2P1gELN5c&*2mj%Ф&щHIHEQħ`ӵTq84tU2Hd2)3uT4@E5,,!2*4^H'$."H@UBub4舸.H'V EchDc"UAQHN҄GD(##BAjFG* VTj LBSjYX?4X Q!N.vB[W(@"mXhfY ,!+K$CBk+ `Aߌرb>c"Θ,y#1x<-A;Lx\far03> 3!,,,h띑w~$333b߄b)La +Sf,s +le `;A*(!A%"B"=p6PxeII{QL`E{r>X +?>+V,LR٘%ll@*=EC*?'sx;4`ǁl$۾h^EK>}ziJ%211<a σ@_9 u.'>)~aRRs}o2B]8A8Km8bY]7X3~")<}/C ;|zg?|^yzK7=/2gTdOj ޙL tGyz[<=7,[&nx:{4NwVWW|MnGhu\uw\q?F+mOF܃gFW݋ΆBHԻA0qjtwT焴:ҺQrDw|ivp=.Օj;KUvI.ޫ6u$'l vTp\8 +?"%pj\Qc;(= 5ؙ\>^*\GWNu\We"Lv+x@%Qp +Bv! }I@vHط[q..M[mkmuKtulg{9zsGgΓO{{sOؘ㉘S}13SIaFg|{G'k wpuF ;')L0^}hdTcsx= V==08p8a$TMrA/h%#݃./3k69 OrdCw^*VO{Ux=X<W@^XyOk(n:4J;27SVRkEHZɌZ\ˬfvB jXKDhXdG5k8AE v*ulڊ J(p"8TTYPU;t2{ ٮ45VFWiXV*ZʍU4Je*6:Ie"1g3+ Z#^c@I >OItjAKt0NRsQsVAV Z*Yj%рjq&WTrBRRI0<\HbBDr$JB@'+@2Q+B<WI4 _*DYT! xl+KRy6%Y4~IT\4#̉ ZXQv#.bc_:]#fLT4=7EtT l"YȧD>%"" +3t"XpZL& +0 J)$$$`'-Y +~.AAA/Z\kq-$(F*dC0a"_ I:!OK@$ YzEW& 7!`#Hn00RY /!d3H-y$Z$28 )7!&˃E7 +Og04\,g#.'y|$_q<ߓI;Enmm|84Y%ܑ?h>$<?n +_xt#{D({tS@‡]<7(vAv?x, j!w5}*MpftF]; zz]$kIE~ZJ?^yu~ҥPxj5曓_Zpr5W-DVXEz/OB}q|c+qLƜ;v|%>;)y+u7 `$Hד!N"Y +9uhz%3OLe/]wHN@g; go"ī=ǐ(YJx{7)oJ`oHٞ!G|LD80,|q[ņNؘ㉘S}13SIaFg|{G'k wpuF ;')L0^}hdTcsx= V==08p(Y A& 9{Q Xmۃx@Ap;3k69 OrdCw^*VO{Ux=X<W@^XyOk'Iy }N <{m S{{>m.*%VŵjFZkn'આTA͎&MvTC FT`R@)!+';NPNuAUHAGk/=lV g#˫4UBF+H]aYJPXr-zzFPRe 2ARTQR2sٌJ`%rHEFHӣ~#-iPL䧓A*:E\T%DU59dgb0N{F*_W_hNDG6NtGiUA>Vi`'RURH+hb%Mt d*!M$2(!FYup&~:_@oϒM'xc/lzE_jPYLE(G2irT'rΡK#szar28uNZ̫`ļ||ޛ=rEHH)f[ +~r>,ɔx )Rۓɀ~ x +6t- rf%.=%AR7zZ$^iK b"C)XKdݏ; w6+OXR5PG@HB!$kc4"vD܋(H}{@9_RRGIGI_'#f~WB-|tdG}W=[J?w_v/>}C+nݵm{*V[T«8Ď7Rv`[;?޼lߦlT]wR{{u)5lmwߊ7o:*[JvEm+޾f'Eի7l[urUe[Oe6X;wGٸh P /Y(XW +p-`ҕ#1kx3WU~Dr! fY3V,/_H̃*V-[`)QnUOrU.+]S5d d1EYQ L_T^XRUQ px2}AQ9ѴeB9DxSJ ̟25䒂*ųɘfgΝYdOj9s2f +PIf&(亥)@̞LY33er˛o̝3^d\!'3טk2>>{r.kRS6J;=%Y$L Hh!Ӑ4CRə&)xIfd"$C'z3"NO0 I4}*M Jdħ%'L4RQ*6UeҤ]L!ńz5 N2(Ixx} d\WjuSt&&EKDgFKATi$*1K$"H,h2 +D,|UB; 7"0<><GGr1<vccx\׍ p8.{daGͦbl&5b~?&%&s~FUt:+4mTW:Es :q; 22Jce& +qb/t"V)[RG(h Z22*6 9b '[$\ۭ ewqKǪVxE=6ӝ.{ՙ&{aiVS=M44>'䌓sb^ul&tk&^ v轠u[{oxK:}dR~ ﵂vyޞDj e% %@ BqATO[›VdmQ[ "*6+O?oM1~m'b܍&cm.ܭf8lf +@=\ -p@k-&lWCZ i4#=^ӥ (>Q`~PL̽N}5q@B D^&-$R I @wtaApuE!*w]uׂuݽn]KL„̌={9so3'3VܞZnpkƤqO,#u}\;_=]9E< dK\Ɨ/:?I?9wfgxٿ>wQJqF=QDNسBaFLfS:˝NsǾd: 92Ƴar &tp pFj_h w ㌲zgў.G]3F н=.EC=zрpxkgP[v3l !m m+D{^_SM_s{ަ MmF$c4] 휕QoeuQiQעA5MDmՍj}uӇZ03Pʖlz*u %ڛh,GԐIoС%RNWR5%sV]\J*ڂ',,oR-Ƭ"+/)%äiA%ɥy:<.$HZ)ItE,H]H@TBI*PBj-HUKSrss NSNRīj*q42UfHf2! PLHFPD+8 +\j&"Si+B&J Rdd,B*2(H7=dF )/ +qRHEH%pQ!pb0#!2 E$bp &9I <+ + +bqD68!((:,(7Db0XDxHT/D?, |yA y~A\_&ư@>>~B}CCx>6/p=,3Ɂrq-.ΖnN4g$+99+Gr,Zz{ωL q4:-X`%Ao2=75UtZ"r#*O`slˣbǷ/]~|$g^U!~ty$/rH?x "Hgw_,p1Ӱ9{\.t&Fts">6#ΠF?sF1ΛGAǛR~,O엇z׷‘龯l7?+9|ȏ6]9 uzu{ë[ `bQ/ey~m 5'VAȵN@NEVTZxֶcWQAMH~M4;43!Yr=y ,%77s ƸBs6mt}v,kˤ{p KQxAz`9q? hV։\&itf imCk7946cR[M6ʪ-F ڢ7 ,ݬ$ M̤]3ʤ3֔aVjӭCGKKܟ+PG$KID%y"Aߣ/  FO |.zB(Fƥ@QԏˁC~\Aѡ!6;;>2~qGQ\\bX}d +SK,;atA&Q0CaP)bT%!x1 JbS +k:T;&E-OՉ[tkX gJ)BX{dhas]s;VEl1˟bfL^ohI/[iY/ncdw6_ 11(a YoTGxdz$|הWӢrѐ{R!]ݽFp|* 9?>#-Fώi=r:%NN4?u<dž/!׉Ci]=:wp՟pǡ.0bXȥ#C.r 9wht ̷C :8 _ 9q`@_u@W ~2/K@Y2OAfAG&pxObDѡ{DZ~ $AٝHܥؕDZw*2ȗ;/ޗQ(|o6YX'z{$A l'|\f']nH#?qvo$QNߵn[ε}PTsfPՎZHu@ג6j[Hn_RmVof}X[VlYWQ*Ul^zUn6u)VM޸<5V/Snɪ%5SvqЪ.+Ik v`"I.Ϛ&Obi8%+琖 )Z>g1xhEјdB3P.1۴q l:pysi 74<[EMU0rSg̭ʟ3e&ddHLϝQFNRH޴jPnuRP%UveTHE1D +PVEQ$S&&Y^TlBY8eIK L*X0.ɇ%Q*+(8'&){axm\N!16^mlv` dQ@}<_ s9z@X;(?Kton9,7qlb'۔1TY זI>:n.'s~::nLn90IA0nrhl ;pl UQ[$8YOD D,2R1SFJDLPyD,|"A }J(_0>7*| +s)xhD\."@972.~\04p8ʎ~ 쨰ّ%$$@Q{(>>JSL&W F%Xb 0 " !4L)Dpďt1bbbbJѫI#E*OU RD"C#yTӢLDT!JASSYTܟ)xpL d-%I{uRg^_?|~yg`wuhhcb[Q?[h>ESB#& ;M [n56Ai)\?rNab)cRWOHWƄ.7B D4FX:o0cBHLCt@vSOuƉN ZX2ݞ v&u27whW@s-XSHk{@FT-Y=V2 QO}%KzTfHYYA&Q{- + 5Mm5j2 –*T=HpRJ\Q'lnEXPo(ULZ}i5ԺDQN2)@$\K,(ێĊRPByܒ ٘RI1˻H|Iv1NBb e +Db +2xE|PLaF$?'%CW" ")L4H(U%ɈHOF+.L $ + 'JŧARyXr,*EdH +HNX_\T<( 6:ޟǍďw8?^x,q +1.|c@>;*X!Z.U";"'>AH&+<g?^#/=F-7 +rrdqB\}]ٰ `@ϠC0@(W?vW?x}@}a>(uq?v pr pt8z<]z⸰\<S}ԩ&GLL!wΛl[n5ư J u^ȵ_@:!&㧌I]="5vb+_|\4&9:``i^8fL|r KC#2e{ I6 umT>;4NtʝngȜ\7’Aw24ۙԁN3ۼ9ݒcM Is;( "mnIzQJdH[d6`D=-.Q:!]fQgDX*6d4e4[4[P J)~sEBAcBݺZV2i >#RJEU8ʤ*k +ErPr,l;+KA yGrK6dcJ%.r %8E +% ( +)A1ytHt0D7WV&*J@\HVT/R KDREQdT2$!0A@P~ ,-Tة&,O-iQl1`lUVFՒ{ۘfJS d! ! BB - fK0&pOvflyņ{o槙&HcWbh!u(wm >/guQUQM V;Ájge(pQJaA "BXS؃%!*[bF*,^7ZLS b;J>G 3{>GeX`nTunW"0TF,CPaE/ D؉h!04J@!0$ +B"(|A\v|>"HfG%)UrrxI&ǛP\.w\8΄J$DI7} +[xV|~9*7b:mTq]FZpwn6yحs|{vVϟ癸Yog3P +э33yfǩzjQWN.1'HND?N|a3A".OO:l*r4S=69TNgG':TFB~{2# LSSG9V +Leu>} +_R!JC5|±^Ka N~5䏿ShbzgttjLo$3v+an%Hftx{*{},PZppwZ֢v-@S GkCuWMy95Tj*YY.ki#\R LB#c_D } +{$De qk7"8GPa)Ҹ!2O/g%g\IWJe9J Řk4>*R<sc"Vs۽:1{ &Os \9ͮB)IY,NAo7l&e5R,E|Rh5l3X.3g2gkҧj@bW&)$J2 P*d@\(r?Y +"?dRtBI%A%4bh+}H BXND I$Q!QD(BA|G "A2;(IɬKb4x<ބrp&T"$H"pFxxT1(j#?r'ǫ X+5_M< ǘ-계"Hn%gIMDd *EpT0ŶT$GgFAgvg*BݳssVS?tw Hhf|z^qԁ̈=řa>vQ?Y,L!@3_AkȻ+OA+K~+O, ?>ZW}|4kΛ3#3CS$#H7C^vAF{`#ݦs 3j16BT*[\г[&FƸ.#k'] UJ}W Q KËdj.Wz:=V듺׹}>U r39N)nԃ\X !u+&u֕cs]NNQB*'b` -2E\Ij4)T%7WIl*%4T%,Jl(TWTi(H/!rB<%|X]P :Ni|UWyLlEnQ|yn|bKkW@'$'[SSTtDv*QYȂL@6$"?k?(2q sBlݕڶ?c/Q=_F^֜4H$ԶNe2d'C²v LN +ڙٵN#-8=J%(- +N%Ǣ&$! +J$&D'" AeS|D<qTbl1&< +EnAEQ "DἷFlV@[A^-<6#9`+#la(P00`?P`Pl +o SAP _Y~` +A.>8:oߓ(cFw2}~?Yn0owF{o+M eee Գ]Of&] sR啳˔׾R˄)_*V66焫SJ)weW>wH)H~G~Ct~pqgR@ỷvPf9H^n3vDt>\Oi|)wG!9B;(}͌/ +wPy?N4=l-~Ry܆rbw~}fQI@Zg_l0?Z݀?[o,½yj9'V{- ,T9Ϝ7k&@M!(7C^vAF{`#ݦF@F1m#RC yC7Q\ +F\:׍q]F qOqՀFܾ+Gְ]2^4zl2.a!ؠWCCu=Kz=3;W}JOUz(6FJ +zyzJR]9!WO`+y9JEƺdlQ3ɜmm2a2& !MSoq ^LDyAa׊uPmYRubZ]fKÕui-U )G*P嘴C*k`)MeKŴJq %UIK+)Ua9S[XTUbuA؎|:UyP\R%+ۯVR-W^H,擉.ړ]MtU,̅eEgA"`bο8-}!aI[m Yh,l-l;/}@ !$I6JJMBIiФ-ؒ 8'鉾|Λ{}o~{KMDݒ} z 5 zwϧ1`f~ zs*2':#C>H$K'!=U=ݠPwk(ՒNe)xC!jlo mL*Z[[Zk[M;(#oS iy°X5A 5P $W] =)G4X TEANF jTj(iDX,KcA* k TyB0!Ƞ2Kfd*O=wb;rtxl>6{GYa.wc^ѹ,0S2N3auptvS09= +3;@6Tb3@zR(0Uk6lz k:TZsLs\eFif Ua+!r!I4B"&I&T"J+XVbH0!" +P ((+y@|PN@(Ix$ +CPχOMǎBxvVM~*YYYiI&d'Yc$9t2b)V""1(S"6 jE-WYFFF/ltDFZ!ɤ'ՓHVu>N`j)T"-HvЌpV栧??Zu5?)Ϳ]wT0/{MW_+uӥ|xۣ|tǫzxۥm-M0UFn~,%=c}uS:(~kFVrFӺfx{WdrB& +w ^.ctOLJD3?&Kj~Jz%o.iII:2bW`%9_4\qҟ?/JgŐ;gfCn-:3K|,337?)y +|LF>zj&ǰ˧gus'`_Gi]p3t.3NiI{SYtw f*OL=gS3S@~dSГoM~b'~U9ɴ>z7ՇO|p^$Zxo_~[WaG^gu=Pޝygw -\ _:h"/.[@] NY5 ֣Ht{>A5ACT8?!<jA ^= P7i[@U͝t*Mq|T:@U q\Ǹ&P{e{#$^f^-FhcRZR\om5FyMH#Ū bX"$gmI9Z* +rՕ4Q{PCQM#B=`A_B }-TY^AU^ +7#sUix*MAT/3c@; +sa$\6eM2ѭwaSg8undR* +znfj\oٵF]o3m&L/LJlJƑ˥HAC. Ji*DLL*N+DV0B;`BDB"PQV"FEQ%H&>AyC=˛˅8)r98 e^999iT*L2$OlE^.OK +ZĈLX5R G׌_"ZH+VTV4 WHSE%\\6P"R1R^"Cʵ.=SU٩ﯦ-RJQ"UC0TE( E+*'AP\(`pDl0` %X.qzǻ &sss)23o^[眽?nU xׂVl*ĝ>༗ưx93)`waz~~7؁ԑiʙԋYŚqp44M>Js>LyO ֒Lzގx7D/ތVX +xo5SWN*^`^wXvXs_޳+б9_u<lN![Aа-!9Jبxt 27ϣM hT-(<*&}րkѾոzWF{@ܽ+ݫFXPG.[)P _5tJiR 2s y༅\H[,H7; FJWTtt3Ӧ{ʌs&03\Wam&rZeJMی1ubV1.͠fC\Gڛ Utt4rgg7!n(\ClZ'9r' vZR"ab:&fֲ MĐ;&f1[Z$l#b^Chm;\)ng5Vf4T +Y`"C*k@e֕Šq՗*֕T,J-TK\T*QaBz͜ꂲ-5T)AJ܇)"$e{*I*S#rxKvdgXvO(Cۇ_ +bEݗg16oߍq]h1{2w*l؝ebvf@ÐFΆHE#mWI +ݲ }3 r[J6,dL;+<+))23%)"#YE֤X/KMų%tsfuBRbS'oJV'(icrpƤc HQ2jEƣb6EnܴP˜H>c|aaJ>!2P +JDGDG "p;2$ ++" +P#@2 +D#AT%")D"@", +}¢=|~zIGYVDKKkYiBЄ&wB Җ ]0[Ӂ` yq [:$tbCvte% }(e8f"-ckOLӖ; ZȀ,r3w\][u>$pІ iE!^ms67ь#oB́3#a%3#|ioi?Ο` ƿGRUy.ʇ)IoZ 7\qWy*&f|jWLǜagfF z|^:^(;,+u3_޳+U9_uP|ӳa;![Aа-!9Jبxt 27ϣM h2T-(< k5`0v 4ڷX*h~{=VJwZbbAlDAdk`R ytR>VF %hZ6Ըt`I? <аw>$c8Pp/ Lu ;!Ȃ`3ޟF_? +c>W_[ ܽtݭ/ qutMju:;[  O]{=ckk [l-~\V+4{azT39iB$S726zn\~1P8:TF}XCvcܶ:/HB.fCqf\*ɩrX:IFnrjm:,UgOƢf5N3b:̤LjYij +fИj̠4J +|:TUAZ9DUj*TrM\.H +]VeQ+ RPRYZ5} SBa!<ITX@FyxܻM\;8*`acX,b3LHa111 F c'b #-3h!R;GK +{5d&S|9w-߽~}AKDmὛ +*Û qU[7OC8I&T7 H7 ㊴8l~B~qƔ@{q9Gc5│#x _{65)仿?J+~Q~VIjC} եRȝ%˥]*t4+I姥 %|RR}a^ҭ ntlGs0!7> ?W ;;r91'1}vz3Ӻ fJǘͺάfB>=5 }rr&z3NI׋b>׼ohAgKiOY#~:!MYi=BURc!ir)R)kђDW& ):De"򍏌ąǡĆbBb ňD#ECDXȐ(4ψH=R½AR +<  H8#?3?#O.#D !J}᭔kWkOKkXhN~Xxvehޮ2A^0o_{/w{/7N/go= n/e=ݼ.^;=!{py +vxٹ;v9{9 +<.Nn|[kk#cGFgH,6Ӆq,fuI"phk3fӺȿߢŤo*&AA[N0ht*!4 Rt1J(  QAT@PT`WI^2&A {^V B뤾֭K]]}SmȖ-[6T*US[Hj0iAMum6,E$YkҬ=^/gv–nC;\/~V缸o9iy׋v?mp>e m +4e|Rf +gw@/wL'_! |%D xےpk%lnXfGA3#f1,!3ƽ릸0O]1se3Ġ) cBwL!4K&77er7SnnFz?]7|y9#YC\Hvp@v[vr>n=?vuu#wJWI ]r ' '8\tsag[uai|cf&\bC id:lMCXWGXGd.6g7e73O6fC2jV6k@8~!WZKTe=jDrKU]걪ʣJ+jђ@9|\jÚ DJ UhGq%U%)ĚBU各r$@kRZTaaȂ,<G{ι (_{  kx{[zHtGyzB.ºvt<82U06B  w{C> VqSj ZqԷPqB؛kCf{c ![S oY|`5!%m B1:_=T{Vƀdq@ʀEwjأaN9ïأ|zt^  < 56KBjJVq&HH N2AԪe26F 3#J,zҬ*Ee-6WXJLjQkNDiИFPeWAE:T+jTfQ*(JrdϘ.K%4PHbD"!bcDZGD<." #>1F$ +s2 %sˣL +Bx.Jx@(P(ax1 +CcP͆!ʚZjj*ŤFdNAZt:}J<6d%+Y/Oѐa` Vt }AUCQMJ"YRRR#uӾB1"y8ј|>Sp#(]5O +{Ks*/dcr66Ϡfi|6b)b"|QFjyp{&oVۨUJBv-,)eB?'}tSC--ejovC5EO`g +ȣ_G7*b\/<{p]%HƕFJ 3޵" /IٿwE\~J o'" ])maB`Jy(z.|gHNjy.¾|1w܅ˍs<\w_Aύu.?z>Gpܜg@gfCn9 ]?5r4ʩٔ& @Od|Ke.}~u|c.~qج/eR;:Y/D(3ܟfg92e\bÿC+Ӈa>HAN7=tR3 3cBi28Lc?Ա}q>ޛ΀C:=#{Ҩ>}􄎼9[`w:il2vYvI ECvYDt fl>[aH,&gX(bfi*l|kX|s({83w=7 wްsM]; wDmkǺkIul[YJ51mVoo]}˪^ԶFGlZ.*<4}`QYӲa)n5(RnYxDBkE|jy9-ҴzWLKW4- . ,[ \_6 .X_ҿp2-.}(5?fA|p=uC^%$1@ͫ~"@oA|z!}ooK(OOEXw@ޮN3A*FHUnoc5ڪ!z*\A\k"Ζ*P]({smTlo $dk +4A k5$ AH?\ǙjuԂ 5TS0VHN\{T5̉>u{OrDzav'F`IH2W]*R9p\rITf;ȔZuv TfQhaf}DEoSuVY +KI 3jLiИFPeWAE:T+iզ2BEьib XH2L&A$M,0DB>]* 2.2dR>IH@J(#ؽS +"^(;\5gRx\.pQJG.EƋaEpPBl6eM|T֤XRSS!,&58 &%&s J ԢS*%%h)d%+Yz*e <O4 aD0L1'Q)ӑr+Td C T +S@M"=ah*ޛ+z E@]] + ʂ +6:(Rt9 d;L&s~癧{C2+37.Z??`- 9䒿&EOS5))}B,N˵0#yH:rHzF]IkAfq4? +seaA>R:aĉ0q̎98V3Z1ayfFAPM53 Iٗ-93/k=}Qْz܎ԻgۘrhBg0~{juЖˀ o[3Bqz\_3Ǜ~dzozhLZ4z-2=VnKB]nP9`ӜԋN3[zz0x!3 'G[@m~Z.ߺLJ-}M=MFYb3 2/!MM+LM(aDj4`lo0Z ݻnzC:U:jk5k﫹4Z5.j}pڃ- +tY[n^EݸȁU.ZCJzU_P*+u@]P[)#wUZj.r5%,b-KRrEai⒴ Ee))ʼUR+r)J9@*<TU \O&BҳyD&#WP*H\ɬ=!snYXLeg4c8f=M$ܑLȳO8sT'"2 +?u8(ޓa9~q,+PR@z,v$0!bNJ9|0kLЁA2 +M'JL +d,H4$G_b`Wb8T|V<θp8,ؽ0OLhoLhOt\!рeQ0 hDDH$RψH@x0J7(cO^=d<P0X.K )v%|'A# q%8ic͌}a/nf}Ғgv۾w϶0~{juЖˀ APM֫L?[ibBM=DLY`X&z-}Vc0hccےhc4ec4' V{f5 1 f؊xnzzԾfJ%2[p|زwli2%Q=M&0eH لdt݄rFF ƨFU~ΐн +ݭ7ܩ3XKFQcHmfڮj h׸Z!\mhV뷠+z+\@eUn}yIpZQat UR׫بJZW^Q?^Rԕ:2rW,Du6V\EԔTT/I9Ԓ +SK.THӫKpd*VI-&r>(|9BXRYVLr)s$JI(>_tZX\a& 3'>T6Yk{B٩3׶,Y,k!0l'>/G =%MN +Gu'Ғ9lRİ{s͈$6+̈bcJ b2X& gP` +QLt)F<a0Bӟ-ZVh*v +<Ot Bur"_d'"$D4D,+9****d88Y&/@SfbU9M.Q0i!Me.k*3{u˟vs?<2)ݿ%^G?c>>!<|3-p:@{rK7># (>hm)?F0WoJ_G7$ONJp{@wrʃ9z q"7YP wi^- yx_+䒹{}J{W WBgsrgﳟʿ ˂lϗp729?]̘~:c AsaU/CnO Xy.r*tR׿Hc?N4ճ+gVA^I?[x%G˂ɭxj9B>˰(u ++AL,<wTܹKB. H*&1?1C2Y2 yy%é̿Zr0C/EbGpj +2O[pE!ޛr N[pR.D@>Dvo@o. 抁9rhһ{!wQB܁] +!v !vP;1omOݖƸ1kYz箭;^6+;;gΜs5w}HLܬ |-!(ؗܺ`0&I_k̘/{~\[?_O8s? 8 D(xvɄ&Oz/̿v[0**JkWoEʘG}/kޏx~SsCfx7aqW̰à'jvȝq^jzeJhfH'z7$35@޾75Y)? z O_gP/r{=Odyl#ÛLkvXZvY&cp~;Pi.4~ʘԕ\FKǹʠ36r(]hd7p0uQ\-R4RkH1Q-L-ĩYbTeyC[l=^%>v6:\BPM%LFV}i̺#uE +`2W"k*2jK +I.(#Zu(!*%ɕԊd}R +% +5wJBq E{/ܓO`A*qwQrhܱKimyx۶wI6&&/k1y9=ٻ v)/fw zWxۥ"woڕڑ=-y^D.(|[Rl,$adB3223B3t9BҶIŤ![6'b1A1I1A r&D'FJ%a[El%lˆ6GnAobbc6 +7 +AD0((Ax\!x>ﰀ< Da rymzm凈7.x 6y +H"9ṋDX" pygMp-rE~R[/ 0t"v]|<||XDeAzluC@f1\C H֔zrYiȷӕ3VOV@WH&CA:H +t󴵵Wg-)DєuihRTƊZj7,jjj+JP*T wEAUpntb@|GAcC{`;2飼 QuO+5׵Nzͽs&}8&bX +>KEkWoEʘG}5Aiv؃EjP3n!wJyef]nȕӃ.+gLD@ ?_8.ϝ/qۀ~{ꗧ [>=ώH#;>[C[}(3A4|Zw-c ^kЫ^+km+J/o[^Zx~ӒҳVdtXb{֡v[`w]hT_Z<:vM(,DU"j1JĮDkhKُwCUQyރʜB M( z|K#Jwea<'===cĘ$%=5r2zxK\=)OΨQ ?]?ܿ.O)2ޓ)Oqqŀ=|]Of *p%_F\-˕qX-/ +&煰D{EܽsE1?ɇx&V1G o~Ϲqiы 9.`!څ0 _?W-\}wn<c幹1_}~n\JE.b}zz6wfA>>50;棓&YK'g;1+pXb̘ a{a?9G&ޑwț\R:w0/*rcξ=v`.r0w^ρkِSBNC+aoKr|V;ODG dGbwd=(] @vpp =0C1qe2<4O=:g=[w}s][vt#28gv)6 ExĆX,Hx֤yiii BDILEia2OWJ*IIII(L'B*HF2[ +zMCRyf6)/" DZ"*1ъUQIIIIIρ\ Se#lg +hy\2?f̡)$3Yti1&-DaJ1QrS_Md_L! Tťޭ ]Db[DteAE, unaLB&&"s6Ϲ_<%*_9|`7l2\RRK^|AhV:GEoλ;\)}sp.x?,aօJ}%~铼ub3ě'cJʼy2C/jڞ +մ-vSr۰Oٰ~Cj2޳V]Є5>wMXI,ݶ,[޲,[摌\7wBos~̒ܨsf dԜ03bNшkf\5L Rћ6Lm?h7;4`JCf|o=ƭu817{LIc=M0=襵h u.kعԵc _0V0t^HjMa 3e~8+/ ڌ焤 +B3@FB@)F' 闎}VC<>Vt6:Ry7pmixz.X &蜭39QϧL-w54g6f6WSnRtLc*Tb2A7VTd4PKTǂ*|Wy/s>̹y 9sg8Qz7ǯJo8Pz؁`+ayzЎҫi{6@ ֫i[ż{~߆|ʆۤR_ڀ&~#lJb%fq +%`a܊5Lo +%Q ɨ9`fĜң3(=j6G0Л6Lm?h7;4`JCf|o=ƭu817{L6c=M0=襵h u.kعԵc _0V0t^HjMa 3F +hg6cz9!p=sJ ֺOa.0_:n +w.)uuf>P/~TB#.QĹz.X &蜭39QϧL-w54g6f6WSnRtLc*Tb2A7VTd4TPIEBQek| /P d/!+WL%l/=Ex%{ +bwQY[0'W} 7sSW'Y7d z,ےbKM6ލI(ɒ]J @ 0eلl3߱={co:3s#}xq1t;!U ;D} v?KkDUx[`ݠʞ& 醹::;@v%p}86W6 hZўֺV--`"1M!Pl b҆X Qo(;|u:H>j*jq!D Ao21WyA* +d <`%d:1~́3T}FOvDyg%HC.p`$\rf%rEi,2[i-3CT&2P$(+ock)9@V}f1{Eo+haV5:H)ШԖg(EfĦ7zGĒ==c/ + -5U`2 "R #].C" ?+dB.E$b!"hi(DJ JD aoըL6&W͘LBoR |`+FxJr|ygRqb'f6=.,dT)))*:>!4mR%#HF2~OA}O4 ah.M@JSb%}.fJ}*IIIIIR ""=9R\nCy/Ks8u)ޣ!Nr3\G7ڥ-?۔@iߏhR=V)=,Lz/7y̗F|D%}vK'{q$vϨx6u(خx~@# ֓^ݳ{ZRP#2:C[?GTuC dV11I<=ԏcOj~ 2?,>YD)+!!7H=*T~ꕈI\Z\`oRk(%~QU +웫9GWc~,<ˁ]&~9op?d }s̘;As#>X, jb&bW̓<sܗ|ynN܇b0czf.9gf}|̕sp=5;|*$w,el=9u,@y&O3af.?#E]8D]82sLGf;xܡߝD:Aμ3rzRsO9w*>sb=Q{3B1=oq=tJ! rtȑ7(ޕ +9Sa`K:SJeء9vu;2Ⱦm#Cfܞ-b! sp{xǜ̞훆vmڱk7 uڸ0Թsf `ԱcKڷےHoֳv5m6 DԺuՆ \H눚6/ԸiZPek6,]H%_EúŘU+#Vԯ]J5 1I,]5Y`)Њ~HpyPhYbPpi"X7%]ŝ݃E]Q :0`@tuBv.:ÿy@=Q=Xos7 jyaN*nox+\N *j@:L+ZHYK0昦pnv6A @PZwHىju-I!O AAgDU{0c +@F+2&_YBFG*>gp;dg%HC.p`$\rfuєY*4e +ZgJMDeITl7$4ߦRs(bY BVh¬j[Ee-0kt"ӨBVαl& *C\dT[K,:RU`Csf̀m|YerP&Br N.*&%'F"$&L"&$ HkID$^6pޤB5 1ăp\˦Ù=>,kRgq,%L0IB&U2d$QDR)HI~*R!|!#L)˒!Z8))))7VѼ QD'Gx:x21!l9d#:%ALyثϯ5Q$HE`UQz4齫"gpF@ 2bCvsC9'$prֳ޽W*-d0bʇ/}8,՗X/nc-!X>۰>ڳsS'+{yia֑f\pp})pB7Ǎ`9oìנ{mIDEb{d#5)<))r,K=jĶ1z`7ȒXyR s +t*/'͕A/&`'͔M +=Cm3ظ) f1>Dh1dfJd}jf25fDQ#W F=1Xe}KB.@{ Bѳ>dİ>szBw%M_XhgQo@7~!u}@r6l@6vF[Fs +hVhJHfWsgХSZJbD Oj2ܩ!^\&dCHlf:@/ȝ ( ׀iS'u'GuH1V5HO [@ȩVBM-:;ȂtT!y*N.Sgȶsm<Z&:SQJ:RIl,IԀJ%IT/ċ;L*_STW]XN$l-b*Q+J+d%8Š\XYEِB2ř@ +2H/Hd 䥢Q)ق(KeBS3#8+((3 ^$}f&gǦ2`1idҢSA) U&E%%G&|"@~QD1|"!{ˆ Ņpݱaq8]1c`!B>1}Ƌ ‰DGzE  3aa(0= \B@{C܂r ܍ +&#;5`WO8!~^ '_~{a~8uks;nn<oB^hB27{GfWGkwgw-7ztE9ۺnwAy8x۸;Yj*+0(bq|*aRa*oA'PV["tEB C_'%%WH&h44h* +QIQ%PPPI˯7%/'Elٲ嫒6o޼!6mKKimCM-Y$c7Ql)646%"ٔEq2Q83 f*+#`4>\dg@T(JK:a;coA3ӢPl)VG@iMKQW?cyvşh}~fI+O^">6;i?:2وsG&|p8!pYZYξsChx{oBz=Ƀq$0ٻ'? ű߇:*Ᵹb^z0фC oD-:4؟ֻo@{:uضNt۲Jkw1bfB۫-6PX_yzr葬mZڸJkk7,CԬ_N`V#.YZӷCru7lEŪ.+}$,#Wt,.D򮥰ep/Xs9z}Z{-XYo s ]tl]0Ggc0Ji[]VVZh)mETQik5EUM$†TPX﮷ֹ:Hj5ZsYmvԐT#*gXYapTB5ӗ+`n[9.)׻)8nzV?]U(tVg ZGQLc 6)%;d DUl,UKE POV ˷-:J2ȅ0gM*eyt\֜kTLJsQa1yz @m(Y*i:@Sj M9j6eQ9 +qa@&2$1  =0L S&RyBA{^:!8ӊeO+' Oޓ$0QjzBuZޯgO)a&L}ݳ%yn?آeK6oÞ/Y=m5M+Rݰ-Z~.ˢ%5 㫖bX~d^6W_[[`D)=-tl{M%.{ތ99SY33[gLTEn)ƴ Cdq.ƔL"uypZbcaFXnKNύ/fnjT._8aHL !gPb !g ӃS,1},&& N9>=Jc}; dTDNI2Q;T{tFaÇ`ǻ!dڀN7ԡp5:z*SV3w 6c:i pCp NC+sU'Ե:kei"^Hn;H)Rn'TQjI6e5ՠRX] UɵŐJ*ՅT@ +A e\J|H\9[[)-cbJE$AJxE͈).Er +8vMRScl)UUa0h@B! +% 4RV9_H EE-(99-}> a?OS@{5eqc"vj~kn@|Y6fm۶m'i.6BwK5۪pnh/oa5ى8>G qsTD\?my?AV]kqE< =-U-OK ه(1+g>f{:~/͊7A=ē8߶m3;޹}*fս[s +:y&$u~RWެEʫ5G~$fewpoVȁw^٫G>w >_JS~mžϴοk-Zm Xzd65-7HvhE/',VW-qX~d^6W_[[a)=\BRݟ5ES 7#astքL)* ?npcDCdq.ƔL1jc1ncaFXnNύ/fnjT._8aHL !g43Ē40LJL p14!XIMգMeA)Nr[}#zv@F{uQev 芍tÆw1!C`s6nCK/`Ꮅk* th) T=yݭ~_[gN_[H{m&4mN{{Nl9TiZ Z@YͲdv4hn$bZhj`7W֓IoiRȲjPJ})sPbHRMQ%BY* U堄2X. +~:/+aJ%rKc"%e9bLLivdQT'U E!Qt>("OQ "rҳAiqSdB9)0n2I²R0YRdf&CB2dAlsFpz  LI JI L/{uĵ|B VQ$ %+Y! +Uq߰ui}ϥZժZVmpaskk[-b>ofBda{ɹM@v*W5A]e($c-wUX+ ++ *hOe)+˜K p{|T,ry%\RYXd/*.6:@ 9Exz+(g<d-Dk599>Z#Xr)$I TB@@r T"D,5H@J$X t6\ *C sI9?0C[l%gdlǰYԼ}bB*,,,Lb0!EtA_){ aURH,9^ C鱐.^"F * 9 =9 ("E 2N! |+AŃI0f$ i|H(`h%̩2fd)C;-L(Ȑ( FF*J:.y~{Sx}+^hBA^vgDhHOW`;= 5JüL$HyxvSu1A޾o#^hz%n0M%0h;>ړ0Va+!l젶M6H9MFm* +߿M-Ӷ+.~m-{loڳeG[ٴyFmxM6 1{d_ ОuQ 굩u3&Yl fغj=Qw)m^oƦ7XKnaXS~֚uK[y$`^%ŨwXYfrT*V-f9`ex+-͡Teeͨ%~s,mZ\ ^2{w5J7/+YԴ`$ g+^85oWѼYs] f͘W4jk+r6S)hi+l];DAcM#ꆂƪFYըY̟YȝYNfO}^=<#/Tqf׸kى\UJwUa($=rc.-*9S/]Pgv畘sIerPnjc80t1vVwN m%_kX̀lQ.^#+(n$f3k6s[v=bĨF{`K@V-ŒiU4cF4&:%-.aJl(@*xBJQh)C2 +LXRH"D,5H@J$X t6\ *C sAY0C[l%gdlvȅYbB*,,,Lb0!EtA_){ yJ +iPZ+aȖ2NC:Fho;FBON!4Ay SH 'cvR“1{$&\#L_#y +T]?lF QHu^Mg⢵څU{m晸 =g s֊Ć@!kwk kZ7P\ ~K.) FWOZBZAWNX ,[`Fs/D s5?g#;9ܑfܑ#K}(6j9tbaSJ{Mt)l :` +6 0"9moc7f4Ϙ}g#J{ 'CN1bt'CȱF 2uJ86 ]jbΡBoPU 9A2Vc6 Q{TƘMfj4AjlIjlMԬow֑5vΓQDE^ݨh\S݀UaRZ+qrUeI=(n!Tjw0Jh(%՗V'֕TQI-5EJ\\ua%iVI@U|1y&Qe9bPTiv($(XY( /JGe*qai<]y:üz:z߲3-nk=lt,H,C3#HWe "H_C_ez,}X$dDd#g/jB@Ovwy/~ tuK|.Māϸ"w0,@G::L[[{IiiiA5մ44i-XR}7bŊ%˱˱K5,Mr"eamg<"`ٲe˖-[4W{= 38~zI";OÌ9f vʑ֟61Ηz7721SQ4 3̛Gcr!o&asBܫG ZF|Ȍ?~YK&!,ꎗ?~b{o`^ܝ;5obϻܱWu^$g7AXͧ1ץfAJIV]?b B&GmQjRFl /M"2 a⢵ąUr 9kFwnYcxtnnts76`N$\ kVB[ᮞ KFsGZrGX.g >3aS^Z# ɦ=&z9#X ~c>c6?-^c‰=F?3cF2d2)ai4B N$vmb́V@¨,ikF!=^HkwHkonT٤B([(vԎ&*FE{%Զj + WU2T-$TKj*CBKj$4WKJ$W.$2_ST.kLua9IY\U|1y\HLF1#U],*e0(VB‹ @J\~Da*^^~:Y.(,/J<9$$7% dP&.8+)((39dLLg"KOH%R)Tr"FGAXT +dH*I8(P"N/{uę|a=@E$BHB8} x+hh[nn[kzݶ^+ )E} ;3T>|5Mlye kd+gc-EY/\*"(d +\|gA>sa L>6'Ȑp2rA"]VT M4g:YZE%i˄͐ f8(5fhfHJ3emQzʪ#J%ZRmD f-xS +vZAhJ0&hlzʬ4 YM)zө1:!yB}.N2Ʀ$ZթkAk@1;<$4d +"HH2&#rg2>D +%0t-b?ɼD,$% (k!#PDbAG(/A|DH BϥLJˣB0bs9M 'fA|b^I0LK`0&?` CEHM Q)8u$IFsJ߸%#9A(\FS_|<^8x!)SN픐6U`J[I߻vɳ.iJC#֙,)0OѹbmxΌ2>g N-sÝP/Ig + ͋Ov5n#od5ЦC=jMDƿt}7Rh^ !kzt؋y{pXHXGǣ)'}1ަ4.41w|qUryDOUyNοxbiTdu5O㻣a4^~TG d9Sqa %/7P/ }`/O6"١R-;S(}c1h[ +gG#F}_` ܑr={EA4;W:_:o*ꃻ,}g>n^В;-~{omE@UЪ_Uo+ʽ[-ڳyؽ ݣ|FHś)}TsC}َ[ɔn{wm)ھΫdۺk7ϸ6o%Ue6nlZ )܈[O+x}U(u+–r-[R []c{bL &s,!Z ʩYLf5ՋVW +r׊'\^ \Vci:%Ať Gu*2E*PFeA%ȾBEFE!$\n++#(YK% [I8Sl)zaBWA! ДU@Ƙ7; !XO+cpgN=A gHllz/m9+i:,.*)N[&n$g0 AI7;`F;4CFR)Cm3CTVQ(ђj#J0kIśR +BsP1L'Nv IxƜΠ ]Lq.VdFf4hHiU訨3B +IHD"!I_a{H%"ʚD +%0t-b?ɼD,$% (k!#PDbAG(/A|DH BϥLJˣB0bs9M 'fA|b^I0LK`0&?D3@\z2$*\hbdJǩ#v>S-5F +MJQ\iKd3Ø_Y3@]k_m\?fr5r +.&Os]>ꂻ4 83:?Dcag.#r42zv 2#pv3_8:5H:g80E}j9p` LzpG]tǖtBV:pN+ S lL{lL9]"Qn_{`nT Ij$wOK;}on}o#ܞf Kf'(};Am{M.C3H9Nf} iդBzsU㚫)қ*i5Vv04CR :\ 5KQjԖT5UBV*C$:*TU*TUyrLren9QYE>U(]OGK=HKՁ9iٲl $V%d(6:SE Pe3HQ鉘tiZhiHj&2%!XL(R)R ،ZDq +J8L +OM +K$B% 8I":"@d +@+Lb"d12hqp_TU h44WBk[d0GL +Il IE%Ek0 7Î],\Sbj<&&&k֬YZzjժUVZYKdy>ѫ5hEs !"mXbŊB dz? GB6"ނ Hr(f_w|Y >/o=dH?\٭73>Ÿ.Ǔ  >ǽ{ + aPBpo.Ϗ)v}x;k,כ?GۗfdTmzO7G"x@3 /lŽ#r4}Z0,?ċ'S~E?lǐ݁0 ]ow6-M&# yzs#9\1z|#,Ս+^ dz d6=!2E=sEҽ Kys{@n&G&[cnQwZߞuq 7lv僮}rQFzȕ.oNК8?qw z&Kޣ5]4^4\_4֟fu9OtT:qiO ݭSS!uj'=8)cHj\փr\ĤdN3L\z2aw}t+73t}9_7w g>sq9!7ʉr:o7ѱo?J8z7L"BGINGa9{QIPW{Ր/J8K-<[)| j: ,nrl*U\o ʽՔ=[ql!ݛwl&ҝ1!eeGUtcV6sWmMɎ-Rl[TRf3='TİdjV[V6Xh tV+HXgAVay]ek-][)jdڅ,^ziUޚ٫+W{j! +Y+Ynܕ吜.eetKHKKsF7sIbťd.K¹ 2+0UfTTI//.Ϩ(K//,˘_oAYzYdFi>RRڼy4un6JMV3T*VG8`5^ջfTJ3RQ!J6B2g.\= + r'rYL8d9IR%$ۈbD4 +;$HBnx-BMDN0 d@^9::N( +7a{ ÿgG=E +" *DbB@/@0h;;;;;;EhP3}20OMR"UPWW7hx@H !rQ`PN`I=UQkw&QˈѢvGotq^'#d70G2~6ü1Z!C:ox vD~~HKTcağn=A9 36ݟ> 9EkMZA^{Jy:iKg9cQCx0Y#"{_)DG +uh $OBg͸I>cǹ|ؤ7;'fyk8vQ8}f,5=^65498F*F(A;(cnfT6K`v3t 8c,C6u{km^exNQB*k"{m042u7h3v5tҎ1tc\vjghm- ]kM3^ )hh隫MFms9ST@ɮPN΁ڼRWVP5!R fT[@*K%UeqeEQ9H]SR)mfETi3@RC)HYb”8`UXlUSE^+(ej A|R9c4oLj5Q!U&VJLFH5)LX%u$Y-ρ($E&èP&fKU0ґtEBV"^.~- JȩbbZ؞ B;(J$,55>s8V%%.-6=)5A"C)$ب!C]y.`\+]( @q9HbqiqxG@904sh}ށ3Lf~>6~~~z||:xy3^///4<==/3lf1X,֢xzXqww]-[ruu]ZZKki/-~h ˠdU/A6$>$ ,YdɒIa?D%@RHl/UE85\$>B7D"CE>r={d4qc/|Q:%h[ yz"xI$|,^__I\ 3/'Aop/ߣyGwq܏}3b8?op?cF9q}_o}#?[8@AgEy~g3݅~FnG~ 8OߟoD`ذH7Azz?̓/ v;u D|ӵW!bͥ}eWHw?^{b[Ӆ5W;Fun դ]? +wWӺvjϗC1ޤSp_\a7+!W?\#|vB4C. ~#^Y9 tn6/Z>!lo" Zp'w =D:>#{_)DG +tN. IS;WA3nnO@386) Nqy}c|F{Gakv3nf>=u fMM F*wQaP&&z&lc=mLA%#]X;AP bǤhdl-hSov<`6 +Z.0z;):=MLݍvڌ] vCg=`:`v:;HVҵ4êi핐&ITIh6c0Me ę+A tk(hKj@yu^kUrk,`&:PN +T2QUW0QV0UY!UfQJ6 (5%&LVɶXYzP1%[Eb"Pf$/'e0fIƤ\b3f5:]^W(lFäkspijV|(eSjh1yd$qTԈU\GR +IRda2ebT(IJW$de( qTYXY*F* $IRP E$Y/ْ-OM3ӓ37'D2$r  <6bg>\; +. q8l?Si`<ݓH*y`9%(YsDy窻A1((i1sϸnmںWO?Tu=1c5whA1~{} UqBJs6V)T"fR+ J@!R(G&˭#rPR)"3֐H$Vڃ$b{ub񰲳RCfXD!%G8;qD;/C7g"j$z 3pE5 $؄"!~9lR" +$CH/*wDF( uAb_IFlJɉ.m>< u4L;LK טz; A-錰,IOa$*o=l Vv|h k <4o Vw4Bjq%Z0^=Al?a]SUz5 q4MӀ׍td{ϫ~~؋%SS=gRxd<#=k"="t!Q9UgyQj7hVTLJk޴W׌@Q骧wyx/ZC'%՞{U*=^tWܭtSܩp.3λʙnsԝwT<:ȍ3X\OT{j)7yIWڵh5G#WjGGЪЪ;ӑ˥CNTtpT0u%LYesd.MYY60uI"ꙮ-Ŷiʢ\𘟱p<x_46p.3jLaJS8&ev,Yg2Nc+M./TW\[”TS̔<#0GQRQ.`RaBĂlV^8=e:S´iLӦ3y,.7-%;!;=9+-ۜÒ fҲI?LMd;%%4里ISƧOHȀEOKIMHNO8L +'H2' >qBRXyҀ &2$Es +E&hc +fJ:!d|9?Ǹ0g T :T8$1i1Ġ"*`jNcC4\l 9g--~'|/oiw@9P'T1g``3jAUj(b* +j<{(PJ +B>29\nLK-x"JD"$#ݐR666J$ )G8!>L$Bl{ciQSS15YTLOҺoꌼ:o:|Ux`Uu4oxjkޤF@s-'%ƛIʕjW=YyPEk$ݿAWW驨tN+袻7RyW97ͳ$*B083 +p']9];1j#WOq|˕c.R #.Tvt鐓e]d9Us\ pa#ACrnrv^G_N}7u-ㄍH-Oִ5,IdIxO2%2d@) #$%{H Ǧ9$t|&ͱh:bLPGwI!Gc1wFDBkAr` ++&ybq'ދ9uS5 Uv|R9S1ָ>P`{/|h [+duEmiY{:AFLGPig];ҁ;j1vwJZk4T4 ej6 +7;@{=C}u|kjAwHp9˝z9˜ }My )[$>VP5k, M,TWbEOKe3 e6SF`UXLVXF``;g.} +4J f[\PBPS_BFn.TɍlHQ ӫ +A:g 0RҴ +4m$Rr-Q*T2 S2U2Mr^F )̼M4 YMY2UR(99 ,0" +!1.Z8K,`DB!B&Q#V7Hu$5 LB"2݀0NY~pGFhUoJ^"w7eN< Yw$wqɁ|w7;W-SNbTNVB'9Fj`7Sxx}7/|SAk m|lSypeI=U؃+ _]/.~i'>$ v9K?B{>a>q"t|w||@w>X }>{ ?Jy.{\Qp+ &%z}X =ˋ읐v{D{21_`wyQ(nzt`;vàqjhsMb:=T@58zF@mTv c=Cգ݃dF(4l͋u duEmiY{:AFLGPig];ҁ;j1vwJZk4T4 ej6 +7;@{=C}u|kjAwHp9˝z9˜ }My )[$>VP5k,U M,TWbEOKe3 e6SF + +v,& &\-5h0])(4(ܤ-N]*5E),W2uJ#L1(P` += &=?ԥi>i\H) ZU6de5 gyE &yRUe3ǯ\*}>)#a +-%Dy0"!q !_I \R|' Y.pa\p\Áp9,J9Xljl&%6=?L%k~L悰0&1/ E04mQEFF>S*<< + [TE(B_RDA ΰS I]/A8Hj $ "Kjnf !;@@eDPdZ٠"KgQ +"* + o^^.)־49sCdbNl\+,+2ޚhkRk,kɊdR7+yh+8Rý8^4tO4_MsXY9?=q.Nk./qW8q]9/7w5W.٨s_Ybw385cXv_6SILٮ\ɭ5C +m ֐W+Dq+ȋG-WܷY0W!3#|dzt\3!SB sCY$ MiLV fMŦ`S@MH4g i"6~X_I4vXlsPl6cjD6$tˀz[e@sE3€r ^[- Rק#s5:6C~Lٱ w㬮T7A{FPitW[tuC@N WNj|RGR3s{mB"S;ߤMܷZRuІt4j!Ĵ㊨7 = 9;]$q 9V!Vȧ骨ZmLTViUk7QY'#jBPfcu-QP5ҏUjD*exG@biué2IvזVKrPrM1 +rRCEIՅD +ʤ^W_P_*QE^ (<W#샠EbL: +𳘃 @EAQ{q֑YE!;Y"9ylTDnzr2³3_ǾTH{Aa/Pd7]ߤIΒ$(+)St4"qiiԘTPݒBv&GHّ JQI8 HB_|XJ|cCpb!1a>ѡ<塚`hHT* + ,dWxP$, Nd{t1]ۃB݃!q u y@9B8{t 9yrldzu'df?2|ܼ}SNNNNNNf.?!|:‚q"vVE{+ETl!yn!yH|VD'$<%[鯞-xj@s\4rxl/ vNyW;wy }]_qe#8az?QlYqG6c/ >G,Moü !7S_7O7[ed͐dqJq5 +Qr +blQK 4߷X5fx6_DO- hGw!- 1 27dNE*̠9mnД6{dՀf3=HcD>cM c~n$5Cc^#C^pduېн.n=X} 0/co.n \>;ױSf͎M"gu޾ rMw3:zNkUڢCBurRwإfO|6sjIyBѨE:{\~+ހz.Lt=GZ%"[{ι7/qm^r&JU^JPʦ +oG8呰7lmmdֺV*kdiiYkñ4y e^w_ic5܍$ *"UO0:랖%@j\CPCw;jvjAp}tv*=A*s)rVP)t]3hˍB{Sk39B)aVc9(bL[VM[)Xb2Tf,)*#) +dF-CK@xZV2 *S!2s:QU +T $D!T*Fe L&A$b! @%bL +ӑJD%@$"1 a)΋E(%P*( @AAxܰ|~dxpq`\6'"NdlvtŠUL&󹊍`DtA`N"^ bEt N!t)\"EԩTi4F:@e(ٓ:uq >Lq&KK12rBDRQ$c,MB9K8([̋)ΜeR .Չ~);*7\*[fll0_:1RMVcok|~N)~cG?|ȣaM4Ȟ[MLI#`H?}H 2>MY\37)=#~3Rwo,_vj|-= LXlw)>؝~O;מjΔKt-M'WA{9 Ϸ +2oRn2U +֥T&P }H]L \\yx P/,} tqXdQX>^H8E>ߝ[p<$ȕ/]H3Io·I}ႀKH + (} _7ri) Nͅ\gq 5{Z ߜE,Jg9F"p>x}VG}[BHUNyp" ɩ os/A|8уA<;##g;Q:-cN9х-a##J9-e9ܽ$nBkzp]nC{H^'H+AZ { ֳ+N‹-;jھw:M/oݿeͻixsȻoˮƽwRiӹc:u{a7mkmjwg@5nyl\yaM'zj{*pCPٱTi{#>o}v:B冶uu~9ZPźv*kBXZqm^r&JU^JPʦ +oG8呰7lmmdֺV*kdiiYkò4yAe^w_ic5܍$ *"UO0:랖%@j\5j'Cw;J_Ϡ +[R ҹʂ9K+:̮Fgĩ0o1a&-h,ui1`Q~e*RLf\R% f8ʠ5t"N47^"!8&2dV<$bXĄBD.@%bUb D""H(gfBgEQ@ ^X|TC>SNapyaxraqxByONÉ ͎.V\Xqq3bd>WQ\1:I|b^,dY N! JTi4F:@e(ٓ:uF(St!DrSETȦ:bFL ݽ,`:Ps]сIg"T2 LXlw)>؝~OgBP%8"ETj !$@BBKHB^E(3耂`A #**StWwf){/(99ry?=y ޚb:{2[ =[<<:7 0x:yr=x: ^CfW`S)+-N; soKFxǤ 8s>q/y̘7[^cQ/*9Oow^g= ];!S8Irƒ#뗙v|?N<q7.\t[f+\(] }EBFp!sC=jp9 ǤS_v'{9N|b!dDžu 3tg;ԍԀ.X7h3<"ԯs&踘=#Hlzl:zuڞv*P[vlYF{ԮnB4i 4j])mVsT)k5- վfSV5m5M٭ՍDZh!J*@嵠QԗJj@ZLU|Oq(".)DTQ.ʯV敃dNy^"UJ-זφ^Y^ (4HEɥj$\"!q(MI[ QnV.(Qj24DtPЀj$I7IR2^|v(W+Yl,P\L1HDŦK2>TBȓi/J&VD8i%CEJ0REz($"S0A*hWrJ +H)O!CO6/ ")FC'H]ć c@h,h0,!&%$ @G"!(.h[xPp>֘B[9b!;CC#a; Bx{\T3$$WZ.mHrf2H,f2vt8;}N*G#0 Op߁I'd;΀00:t=nO5FPi(&hPMRWBdG}؜j0w(f٭ L^]6&~UvzUY泲ZU%,aX{l09)$Ҧ@iRF)$`aaaaab;N FwkR/sDYؤm~V6i'F + p_:,cIJ +1H[)ۙcks:ՙrpT9XZzzl;"0̟Ϸc4Z8?< +TNmU?~OhΛGP[0K1c-= +Ys3=p7B^?0M`~k~_ޫE~piҽ//06`{;wa/Q]x<K4bb:{2[ [<<1ob0x:yr=x: ^CfW`SW1SWL[ݝܹGh//4`ns{`v63=C&tkԋvs6E8 ΋z'kg; ,Y6N(.S +ge$gb%*F!NQ@4 J%G8i%CEJ0REz($"S0A*hWr'u$>1?ټXQ$"1Vlv&I EXT°S^Qyga-3[X@.HۅH +  0sޙ&M^NK@5w~37̻y߷fTB& 1m:aHM0K7g"S`ɱLI1MTN^2,41=:1<U2\)T#I 9T۹(BR&4rTّjQJ/?B!g2s !CpEHDŽ 8yH2\*%JGG,%X,%s%u!VD4y9:ø +~\M(@0la [Rߢ=0=ك.°))$fЪizͨE\Qza0*PA3OMQcz%f Z*{`1AXvEj0cf +tLAXtB(Dڛtn(31a!$s_veO{ɡ^`$_E^h{KDsze3Lm xeqB4x|#rBY{pk<35C4s^m=f[;wCCm#߈ziOQ7gb^mSp hS-)ZP[Q)OnSf@[w@zb8\_3\tޫZDwը#:A~Goq.#.wAa8SE?ԅ?s~;g}y>gq/)QOy#n^?qoiӉɨc^ >Ɵ% GX]92yˇ=~//Of!.phA s߹9{qfucuu':w 8q+W :ő=ΌZ0kەqЗ\8Q™vsNPCדowW38;A[vWWt^HٻݕN尻^ghw]r׶:J՗[@l->-bom3عX)~EŎ O +}k>[˪t`fX٧f#tn`3wszkJ֮J6Bm\6gÊ5˙)ZW1pհ5Z5^Kk`W/A.fX +XaE~MJجU W +VUfW.TSf6- fV/`ÒrDayKA^R*gq)[#،Vɪp4]˪,dʬS&<Q^X˜_+h>,EYڼٰy4un<>)%ԒsRPs缯b"Da^a\JCqBANqBوJez Zlagf2ffdg]Ěܘ.TTf XtFb6*!3*=) "bL$fR Ȕt4XDrl*SxR DS` N +6Fy{y*ݝjvVaJBT1Tȅ.*%Q07&;R`jbB++P +?>}`%3xgLB(B:&A pGD1R1/T::b /dtb1/ŜKD(!B$''qlƕP(PnB qe [pBѠ +9GEy` 3$XVE666666>z[:PbZgA +6 ޫvtx鿟ǠWIMw_MwD0/;UoI#_w%C"_7zxUˮh9DAǨFtG!;b,^t@6NNow>LŠgEpz;wRrPjn(޹76CA3=;@[}F촆 3h:%m2|İƟ&KzB,,|?Syp% $$BG !%gPS1z8\; +;;댺cv~NUUyUz&tuCvlᘫa+]>KCQ^x^ ]Mz?BdNcΌNON!?1 st?:T`/rd'<Ms7+e=)ɏi +^<0^ '^'z?ҹs܋>`ϧc^<2'D^|y9o{9{8 ~=.pI'  $Hx sӇq34?}k6>ꇼg/V-Ky[>8rw6~ g`M|O\>؏_oWѤeb#_DnF.`_nFoEnF<5#7w=F4(R?d=Z ^]|wl}y=o/%:>skoYڟVCn.kV3 }Q8akè[h8la+]>BP;/2gB aS^:7!3ASば|1 {~; $S9>;_9dȑ>l(Aff$>ϘAwæl\ơ!A.cÌ1SAt06pw-ecp2:`+;`UA*F ^=]y*ݍ3ۺP;MCT@eV*viTY *Cxgs7]bm!Uی"\Dg;vaY +:ZAHnk!VL[k $^5+@FJTɂm,XuF[gԖkkLd4ezvYJQU ueUT,Rle̅f2&Ie.02L&@) 4JI%zP lJȊA"-NVS$3I !R~A. #iEz5$i,Q:k3\]+lLF8)N%NQ˲R#j9L%%e0)*URI"JPcivJS8NJQWRPdY"ML!AOEܜSSTDy&2 ܰ`vp5ǥqh<KPυG|~EƆptҋ 45vcb(1(b(Hw|wdϱ0g=njh#Q@: A~ BP(_H# ?oJe4{p < (!bmw)|xx9xџy$]5bWW +S +3>tʏÁʿAFpXrt89BN9w2CvCFHO*߀- F@3&䓀̻!!' !cFw8#~V{;Nw ڛۼzu֤{odnoܫޙ7=F"{;c=ӭo@wAL<=C--lMPVۼ][#wycТ 0# _ {۽H]D{/{ K^ž]vݢ<̺s)}ì[&nv OM5 e|V7.8S0q\;sw!wl +j+J r˸K\BcF"|Bsc;1~QȽx^."$vs +N ٩R!r)I0\rxjyUdrRrdRɤbHVJDHBEE@m" x,|78\R\RulUX7L) g2'W:F MtE&*TPQ>qUAZ_+t>O#P( +iD0B鼌vTAf(H ;2bZq(O{$O3^܏P>7?> Wy"UT#~A?B(}8,R9:k !N};!D#|5>m`4~8蓐OQt֒!52E3$~_֐Ye>Ыޙ7=FcgwEt~];`OozrK x|ԥuK#2tkD.õZSwxc;}DCZB5kvo@W]$"=Q== ݻ1oI=a֝0O3f2q}j*&RutYpm*̈́+ _\'vb\qˎM\mqE]iv\n]jv\ C?\ TZؑjVPsTq4WָWiRb*&TJBJ%Jj(s`#j0)Bª:j ! +* +uW!!I F.Q.]jmVv['ZGʺ߱`` vڙg^9}Lf SCcu3#c X;~kj3 +;vNQUSq ;ǺIUv Wv tR)1$U>ԁ'R6J@.H[ꓒޖn.cZ{;w7u@Fa'6{G];^Fdmhjߵֶ4 +[dX4U d, ;3+@:X^mE/r7(*u1:N2: SdUWARWn-te^҂2LSRX$G>D]bqP*.pKȨlbLd϶zm{5FFUdlBU3e dXtx3\e)if̤s0 &w *DˆIgtY,DmzP&CIVϋU4xm)Iجd}&ӀRg6%lM ^'#! + " "JDPB0r +1L&z:b %VX'"Z'_B<s8x!p~B8bS +M If jLl9h3H1ht`N?W4mEH   mhY#CbaHR$)0 w')}p1R\F-EHBT(-n} z +IWF"$a#n(G29Wκ?ܮ|\{*[76+澋S^bV?yICh]uP^E^=:B(3 ++Ca/(_ e9_:1'{/MHNpcXSRuxB:2)bX˙P7LNgƦk O͌LjCc5^(ofk9GeT=K53&U=5\959H|wrkbTPo)e;1TJwAz@VttIlw5Bl ;I/;A6"k[݂v7SV齻fPaL jWc~z{Q+@:X^mE/r7(*u1:N2: SdUWARWn-te^҂2LSRX$G>D]bqP*.pKȨlb ɶAjŞcͳQ((hU(g(ɰ +JSgR:IJ5aLL)U.%< )h%j3 a4O2YN7ĪRq)xU.QMIf ʨ0D!P)M."2B)2*#XD +<}oJ軭(F(H("0?|D\!xm eGg-8{<|7ö(lU}+_o7צ>H6xnQxl=]|b67zx wx;#rf +)W`(pzG V걩<.GA(B.J !h|g}8BY=.)Gwa؜Yt e..Kgq,K c2!MJg9 "1 KEJKkhtRthѤ _ z|w>ػ(pOWfz*k +RHX#Go `]bpk˒ЋN klC 谘R}fnY04'R^7%䚙R"̙)eSȥދ+tzp}%ݶDŽuy33Au5/1w[MPwZ1[jYyƈԍh_o6\;ekZ}+' s!R8Qsg}L1Aj?fikG]8*R`(;*"s^T!:LvDuNH'\+5FpTç5x8*>< XF5kxM?.5Te2WߴJi]EuO%)ueUJ +p NQEҡB@1&HVpT]I*H* SO*24"P|yni\yn hb21@qeE9bJ +q +*)Ed,H<\P>$ٞ;h + IK TPfxvJ(,+5/43,)&$3)IHHFr:PpWoMy'M$($g.B‘@n<jUK{kkjz!vt@ɤycOyD[:@R5Li턊0] WWs'IV W{c;-3X`]@V?-GK]+B95m&:ֆF`l,uU=$:Vm穣Ruז\bo9WT$n_iMJIW9jfEeՅ{2: TaSIF4W.2 <gnYIy'&^3ڊBELmZXfd lk g/̦쒼bR`+)˷Y2ssu3% +4\j*!Q)!GԈJXŚQx>&J-R>1Qe1'H G*#IdRq\b =(d$b0NbH4BZBaZAl|~Lxg9*fiB c +v u2S&Dx>h2u;^nDo 2=^2*AgF3Y((4|o<NGK7.&~1*E{K"A/]|;~\r>O."9w0o-,$y3Yg\(dDB§Ǔqגŧ/Wh}t1 JãI$Ov1/'Qz? w#fR CG`]Cmt#{w:faj{n `!83HP۳[ -CD+{ Zv4l<~Ƨm5ִc=0[l5l{2ܦ)-}AkcRi͆0 Sh߸z= Q@^')yu }mkNRcMՠ5TVE[: +T5Li턊WW3ֻ@$hꈅTRqg.rj gTmboͶFokCM#PEW6X sO_Q)kK|.B+q^KU򂊫5auQ-zFYu^EmB0U=.TnqGﲑ9RL"%"KID$D!#qD% +bcE=qd\qPÉ ~X,֜b)b)28(id\H4 2 C IagpY|B6pt!dI;`ȘrRqyVA}-gO|3 q??&N*LO`7 1x[X&rwt2=V}b _Қˉh6 5UJ Ar皞$<إﯦ4ࡅH t (*:HR" +8(X:*("bf]w=g?cp{ssq9sy}䇨<?r7nzFo=̓utKvނ;&kiϱ;SFh:/רj]On$B^OAr5Ř+m̋Q#2E=uv>u>͎8Cfn`p&< 9AaI;b9h4yre{2!/ac&0xi`x碽F8c〱8VjtbdJ[ 67q6|2tvbz-Z jz!W[@.&c_" $ t[!G ,5iwX;ag;!sߛSN@6'VD8n>$ f:nN!f6x절uLJO)M!=-HRV G]*!t7X`[^G3OSgneT>- MFUơZYVlk"iԒT7fd-ըX^PƾjLU#m\z$k*6Q4։JkA{Kj)K1iu%b +*Rjv*pEh!3XU!$|1+HJAI,rK~~V /́ĕdPT_() b  p1` +2I@ɓ悢r%90YNd4JD$ +J"Q”b*TT+#b̴̅SЌ Y2JF" &ICd2P4A + +$ +NOqĸxPƥOMDRbR5JLH#>2a߸xЎpTn{L(F M'" ja~>aޡ~l m# m +NB!1 [0jSOA(9>4C~[77p%05a:B!`K9Bg13fF&|1!K1q1xO˄o{|/#ޢ{4\c34XC=G g\S`ghXKԧ8L&sQa գGO [hYmm%ۡ-r-r-Oi1102]- O'6Ùlٲe˖4k>wwbֻ" 1 ˅r6Dv^f/;7rw=хЍ bjKVrL{vg[El1ㅯ菗>g釧y +zm&&7|Uo!%$X_oSek0?򄼟ϗJm3MoS}~)K:Zo}7|ߦ(Քm 1(!%7lкSZ0:$4yٹIZ\]zn|NZ.MhE3ITstœiYܐ0D"$`"10T"19! 1b=B߁kϫA$cU{$R EP+s1xŵUypy }esqX8n8Al&%NOg,zLJL J wtW g)S Y@Jh>?<0@F ȸ\u8!IJ&Q%IVq1xO)$dxS +N\$G9'^&%FH\$5VhbBx st +f@=~;gll69ll$[~xl$%Q?ax|(Q~{qg*#R4i$|(m0W@Dٹ'"360iUOƿ +/܉7Oz>GsHr;[a7a?@F ~ El̃:|нNx?vx#*pu5d]j ^S0CW`+;0}^CnWuNN9ӑ()G8]'#q݀83\?6 ~t&tõ#3(]7ʷ!z阋.ݡL2uTܙ/Ng99GM!1urR'q90R +< so1aovP7? 櫝!/}rW2O c4$%uM1o*akbl !A { oNokgXckkîmmmikݲq;[Z >Bi[q vlr +!Mm>۾j[׷k۶T斚[@?\J7joTd#j Dwشj=Xz+7X4y2K׀{AK 5%&Ս@UM+JV6aK`V,\N T;ꖂ +.-Xb]RLEŠE4Xj]̍ M +k/^8KCU\_YOaΎrWkd_^ 2擨qɭ.UC +d,+ ++J]yQGv+$NО]j-'e+(*@2mRPvI%*!Զ"S mf,ΰW`(cg[ͺO,X^N>(Քm 1(!%7lк5hּMI #c&7͘eHgRsQT֤%%kUS""X*BbYIňC)L HD$aOX$p)9v."!"znIN /8v˃8\.CâqÙf3)9vz:c(֛`Rb2}DgPb0Cӽ̀M8L)8Z (͢R + F Վ?04Q CCUaHR$)YD/'Y=aN *8EsQlL"B{y89# F|$I%E2"iH|Ghr$PW0hNYx0Y:~?]l8Y:֟(u I|0A6>'{`쿏4Gҥ~_i>H|(m0bo){x:;"̣9~ٰ{b ?݈Ģy6Aw ~WSُ*H7ܡp] iWAڣ!Ըe% +(%Υ(LEGnp'HsMH{ܣnwn@׉YN3!׏͂I0ľvdcN8,d% IجʢSEY!$@FɮDT" +j].vZe8Zg[%xy==sw='vt$ը[3n7#P7f]\;z<ve* uX(Ҥvy2rha 㡸Ώi㰳c"kG"\ +bGD3QS"\' 9:q0d!!HAy SH5!C|\<ʄ66v!OFyyl8P ETYpmdi=봍 GvC* b lz1=(pK?s/Ⱥeqv1u.nidl32[{A{[ziwx*m2uxv7u3t5;ڗCQ߆ +Bz{ţfiމiԨm74MFF&[GQYCe=F޶HysD\B0Ϝ, f!\BB0_`qL9E8,ŀgZI a0FOAtbt!"%0!AATBhER}DPL&/K 7 [EX@( 7>!έJJO݀ yHclҶh*)!FaXbŊ1yy|hXBԜxd-;O0'J'&%m׳IאIqkI'o H'";BҖ RfڪmAwg _ֱ_?/~L"Uo?}*z|6@{ Q~z~,ՃX1L?[yu7^ 矬 y~;hWݞ܌un_^u ?\YˀEA>ZD㳋z kQ_Cq{{k wϾ j o~1HSQf"nNGn>v" #rx"WP.M.O@8F06;;;&v}$5!F="B@vz1*LL=5*upC!"!#!@.SkTHٞnPy_qw+.]гQf ո lh_]G}F+H u0ϚAz'P49 l E0g uzԙkAF]cƣ6U!AUU,hP;**ю'r)J[ g5X1,R+¬GRK̠\Bgɍ +Fr-2M9lCqHf(DeE+S 3jFU"*!<-(8E!)R1YQ(&^ +ɋ9xRUIQ)YTe:%O&Y)fv(20)V(I.špIp.Kn irЎ vi"QLӤDIt\Za/"qف +L +\|n+/~r|%.98,6$`3Y0',&7 &IgAt :%/Bj|~I A@EdQQQj (pUAe[l]m%}ߛi{k߱)Zmlػ<RKBRJ?!OAR޼h?.inWNܴ`;hBlZ-w+,kּb2IŹ[PŠ[rl9gsRQv՛6&0 eFt6VSJIg6Y +"2Sfen\.cyڍ'C%Sڰ&}ijr 1%)RAKׯ6H1YZO8,Yk}b-褸5[[zYrtblU˓,J\D@cVH0\I<Q<(,:.fEĒ|g1T̔HW.vҝED"!.2 C*qFHfw cg1%ﱉaH B'Nw|x1'R8Ը&B!2cBHVZY,J Cm  vG•bZ҅BB8FӰgt3# eHl } GK##7oo&3b%L-{>5hb2 #~ގG< S gڿXrtק!^^/Fayw%3`#O ?<!`ݐeSCj雁@T29`&Ԑ^d6ګ$PQbFn+,<< @9F"vLl;V#2H[=ZKI%(TTKբbꅘj7Lc%b6 zd7S+-l6 j$)8R8˯0 ՕY +[_ʯݧ˫K*T]]Z 9TrJ=,] &L^9wWd4#i$W0`{-[\$KdW\` ] I6I J d[6tHv;-h403\޽o~S1*QQ 7c}aY7yChȣv{{ p4Թ~`4OUĀϣݽ^PU38=nPewsew1t6w:AMLM톶6: NPyQsi٭2kf+#]ThjQ`5PFmIUyUڊն"KU_V#b2:&CmY3A5.&j=Rt5Lr+հcIl2"BcؘU^d'SV +"rPFi>U KzI[6ף4$WJ攺K+*MJώ]J10) HA *V!a!pd\i +# DR+(䘛R?g1= gIen 3_{4IrE>>:u'.N ><)`qohd:z{ֈ% F4>٣~U#|kZ@+* xs +rh_"hTT7vP +LB`.p$o's r2[۹k-mtٶg+L/o޲{`c׸6؋ƽ\^ VP cdž Zۆ' o58I 㠆!ƭÐFȳM-cTAu1Կd h0Ⱥz@C#C`= 4h@~'}-}`Rzw*`.c hhgbloj75ѩhmh Dw[l-2GK Sg:HgʚtMfPiFGI@&ŶzVU\Wi+Vۊ,Uu~YBʨZ`6Z f=$TnT<Jmʫ0ɭVJs%Ut * +bcVyLVVXZ+ÊATe4t.%yni\Ԓ\(ESZ<'SW2-quHTFxZѨaaj5#"8jBfW8B(DR+(D#W0I!r\ gIe{>d_2TI% |TP1#T"b&0 0/!b +BȵߙH$ /P@|# 8|>?(XPFB0($$daN$]O$~NV{*KlտsPp&[flTt[yW߾! ޭ9gm, RI1PD һtiҖޑ&cC#Ů 1RUc$&a7sf~oܬ {({j{ qNڽ6쎿ջ;>NhrF+o,*S6r>%L 0솖O\D<;6,$' C#:x/DD""h EpC!L%JÜ}B + Ay|L)3hinN~8{|voUK=OWOn:sW?9 ?H?pCBl3+Ի'.{07@"88 +c^aU>HV^kJݱV7VO-͔͊>:_oS؊y~ry^OlAߣ8/y??iܚ֫1+QKīQkV^ܷX#~B<ԠB2dw7q!ɐ-) Zp%3`fw;sԀ|=ntA2)0kBiǘ;KzLan6%tM]Ƅp1aF r ^\>oD?gu,h7;(unuRn1B9kqƐ}5 Q0ݪt[ \;)%jy.'\:..Ӄ3/|#?G׺úTptj[3C"m:$D6 +(l:S'6SM,U XzO#ՍR)`ɇ$TZ r\-T^#n,PJI5, +&/J+_[X[[X )@ġ*b Յb +`{+Kɢ+JdJ^6CE/GDIvp^L~l^UH%( 8^S+H OG`%ƥ3x4/{uĵ|;aWe_"`  u_QծU KT*zyǛad2"0s>~ޜ3@VSU*0Y/K__Ȭ-#E0zS)YSZk.՛MD"t(rاWWi*褕i JsJRsKm*1B4%tR b4ِB +0)yZɹ|:I9$-c!UcG{5GFبcr$Y-{<!7Gɞ(Dx:+1(ktZ69)Oga4s0> L ܔY <3mN܌`<Ͳg8nr(~z&c_#5{( (ܓH=w tVv{ԇKO?olw{9FDG2уYwtV(p3r3LtPJwo ^f Mg`jF`1JWCWf] + \ _]Bsֹ9>@?uڏҭS8>):wuw5|q7}RoPp1W.|wEs'|:wb1E|Z 9}lS@~teXpQop'#/=_ڷz޸q'}OJ_SxϓwT0VX; >{GO' ++Gʭ|> +v/v+%n۴j{oim >@Td6;޾68;1`[նok:ŔT&n۲ԶyWM׺bo +rFvVZZܸl[D[,JoB[jm&*ڼ[m"h%h7mRiMKՐM66A +Z"*ڸ +6ollh\Oaֆf=5ׯ#Y_ff箫r֬!YSf¬W٫-k iDY /Yd֖բLSYӛMD"}u -]Uq5QFeABJ"my^r"-AZiNYZI^YjqnM%F8NjSlC \YhC&%@+9WO')G[aLϥ͙[*.!KcL42Sm7hazMfӥRRghP)$z*m[CsFlzZdX2=&!6aIB)Gd +)=2D)R%9yl\e;fKe6(TC$b3lEbX$'#͋|=.kp<7`wrp |wXrww_XnJ>V;@\\L1NNN Ŧfۇb-(&` &Faeb9 +D"HQ@`0ZLQ< ^Hbg$j)$"{a=-{%5@]l|DhqrFS<^ ')^ '2''zol| B|D%2G˧a4s0> L ܔY <3mN܌`<ͲgCvR1_^#5z( (ȓHCN})pvr?ԉ/>>ѽ~dPbFx8בA$A6s)1H p!Gxf氙8пm$N4 ҽ=F2&a g: ^X[Ho -Ȉ]VAS3}ͤ4MƢަ.PaO#YAnThllt5YjuԷ u;A{Zk4;LnsU\i*d76T@P +ɮ/UW:PSku%5̺j(jue 5BQeVi*a:TJ^dThp^^\2l^FiQ)*}IK +P\>Iuy4-LS@m$ը)IUPjQv1+YE q(_QDy"2?YȳI-Uj*9rʆ\av$1;-BvRF)Q!ɢ=S*) +2%҅xHa6&[DdRBDR)(&%15Z]B)H'BVQTr|ƤQBZsi nL\8<3˦8|6&p\ ~rXvbcͱ}>)6$,E0ޱqazQfRzͰ7%o/Oj /xy21 0<== Vg *t}<<< wݚcJ%77;-wj/[Y|\QZli\\\>-'gJqrr81G΂lb XKơE0ha޴ۖ>5L o +m e68Ge;ǬsB6qiY-!LZWZe. ӇR/_|}9+2Yl87sqm漝f88.\)E,.EŻz"b.q|bql=l?Ϣ?[P>Z*ߞnd]tix]^=!;0~A~yL wlQz'kL?g3u6<Ix9yjw0܏ӽHw#0/%<2{{ HZ5{3 o!Onzk/+a]LMOd.0f.1C ]x8y!]=pj{ +{.pՐgWAnYI(:Ʃ]?Dv"r}lhWүѯ|< 4q,rh [s'J9}Rn~>_!}|J{ȸŌ p#H̓|mR:s#5<2[af+@*8bh2[JvJɘp.PaO?$vwzam= G7NJF ҘZ Ũk&m26u +{!Ű΢] BwBcc;Z~P+.xi RնCZL މ&2UJHnsE(XPAzPVC)$ZV]zC-NY3ՖԀ2JQa50W0Z E +YP(yQ{Lzyq"@yE’%-)@pi|^à{LT:DI5jJbZ]lES +s@E)Yq(_QDy"2?YȳI-Uj*9rʆ\av$1;-JRʶ%Q!ɢ=S*) +2%҅xHa6&[DdRBY$) J;1)Q*u[jJ+."KOnOi۪|MpX|KrX},ʏˆ |\l%bK^%;_Md_' NHBH@i",(]k[U꺮w(TZY9~| K}7293~ TH&0å6Jpf +.K(W g XlH(%!"b$ +G_H =ov{!178\F\m8Έb 6`_^V)ׄ3!z@ Ʊ0 aX,5B}bAZ#-!V>44h0 ʻ6{ ~ɸ8φ4uxU^_=6zHOG5 eg @B=_D}힞V]?i/Vnꀧ7} 5ƫZ7^Һ+Z3R%o<oRsދ\%JԜ#y8 oY/P{ړѝSĤ[' ʍFQn@\?.~C|;G+.vC\rr[Dp~+pj~ >FgRNNuZY8Dž ı.r# TWD9\FjT1*w2,S&U%j`Q0e1E9˲MJv,SjSVSYX]U^Hڎڴ m,ܖUVӹEϏDV (X*PYVuE +K߶eяkHuҋn-ܺf[m4_z#kͫ~TiWg2bݰb뗯M۰ 1w}؜uK.6wM>Zz*KVYS`*A w%l$bd+Qz $eErPY|RL`F~RhL_x(4=7=wrryR*!+- 971Q Xܢً-d@Ǧρ-MY$zABX $zRLKK߯yɈLLJܨ3Sf'a255l6))|73&:996Τ1369=*yRRtrdJn! ?Vx\T҄8Jx3aB ѓ#b$N&ỤƏ&qQquu4gI0'#Tp]TJ#9VTJP2R*FQ>$;0rK,26R#T D*b+DG,HDg_1bmD"ĖDȊP(Y|#F|F|m#퇈gnhxu籆)\MPAL&_|j ćСrd%ևAy24m +w͌B@{hM,߳y2n@5gCFzoi7P^h|'#^k2f[hk&'7Hiѡnw>[k3'tj+޴/{I뮠/ka87pQ_R. @y/KR 97Fp@ޔg;3q';FķN[=78\?nrC|;G+.vC\ru"z {sх+\J98jIH:rb ?94c]LG@: T+r\ըbTU8dT#F5Ǩ|hтҘҜe&ywrw)5˩ ++ɩ,,ɮ B*/$mGm6n{uԕ&};AED YHXaŽ,:ֵө[[uVתN;mU;:̽pN'Fdp{͓s8 ׎9͛o!sfslhumȹ~[&X>Djc^ʈ~ѾaX h5#=CpOg ]uT'k#zau6{=-ʻ4vlݞ.YWS'i-\.7`DѹtMuu:(7biw6'Zֆ Z`)fYj)R1k)tft;<4038 v'U6xO*Gptk-)smBfFn)P3V86#_U_Ȇ*Y6WkZVuBLVPɏ3 .W J)%>*9}nq1O5fie-HLOVqؘ(R!#"r"!&"T2)裔 +vJɉQX~JArϦ0*J,B.L2;RL*ƓHK%Ј%XO$X(  SB!o3fC  Gx(?~? -nVDD¹X\nh%NVXp8bc١aXs)bQl#HϔyJbILY `0 EHKE`b X@ +e1!XKDb1Id"Ңj"#Q +\(!xL ^`,&필>: -V?S ~7\׸K xt"xB <~0>|_{bUj/KA!s%o+.{Y03E03G_S.FfeXޝ`R_,U3C嫌6$7"OK7}~Tҥ_M K%#T ^Ϸ$L_\L@ +&н/k"5qn_IyJP>td餀J_;(!iO%Dk'D7NhD׏'\;HO.k!yKA%|q"p}.|2c/>xvg&g;p<̡'>;ЧH Nz/Apr~+룷b}|Fϱ7k,1GtQ}X^ +$rH^5{`C߭FKw$]j;;UvMڿ] +x{K⿱初cEm{Fm4杰WG nmo;ݳgǽ{ a+̳kd{p@s7B0(=68>s[hM}-Xu}ðM96 jFzaCa^O^R5glGT *[}-`Um2끕6#*zZw7Oiٺ=]pNXYwZ +]n։skg#`d]ꀕu8QnJmNZ+L A,-SSS]ӳ24Ricp4Rvx(&O-`p038 v'ˋ9*'#jmu8:VՔ9t6GZq -\SXigP0#+J+ Yo՗)+Jlybk Ee䚴F%n + >P1=ЇM7#cY/QPAP/yY)T1oy{ZcS} ۠#l#_: 8B~yDx7Ё EM>@oOCkh@joMܳ޳܅ B^-m[RoX+4xJw6xӆ 3pÚ9m첑am2]&만&:k'!WOQr„p1ҏFpw` l6qԐ MHɐvl>LF}ROZ}\w>.Iwd7bIZAR]qT,'Q'#h +k*r!@ S-ր%e5dR1( +į+J-"r*YNRMA%h/":SNRJ*(/SXq4BLtP*,^"* X_pQ&(ِ|Ю}؂<|?&?#)#X'D҄7N 㢅 |\t.a?-" "sRrd,LDv*.<+Ef5Bؾ2AK330aI_*8}H&M&!;SRA) vO%Rٻ#i&yI $pOtĨ=ݑ щQ2|ABn_|x7. +@_l8;6.PL"Q;cl EmA+m6~̑ԯOPNO!pD~Ns.f=dd.lvnY/nےz~7c@d"̡́n[` Y7쩜']֌׭\V B'YL[>X1EbD;@jmdhX$u;uf$Y h8*ҏTՓ4UjMi~c9XIk@뒲2 IMRWRWJ9TX,'V\)' )%UT)K8PJfwy^ !X R&:J(D|Inh,/SWlH\QV>hW>HlAP\~VHɋe,eEiB'EqQB>.: +p9)9ra|L&";+{ ,m{/.t)le)һ%=vLD0&&y1E. +k;x30wvv39Νaʼ Z7R[Z0ה|(cMq5VVU J@`ȯ22ceɔe!J'ҋm%dE9X铊K􅶢 +KtB|3 -ϊ(p#_gYdRl&ݝC.t(ӶĚA(ђ:kIoMJoJufrzs!D$6S/1fdMe$udc>L1ڤ Uxh߼OI|_!P@RĜ\$8KńJ"Hc&I% "$S' @5K[˛q@l%96MqLbQfX>d|||H1M /oRyzsFyxx<Sa0+:蠃:Ar83${@*)B*HMh4miq\H Z*6rW9C4O' +]3"B،1lތxJ{scCv߱'Fp/u/$#%OgٿƆ>vJ͒THŒ5#TH~u#}ݣEbJzyFxDD쯞oRCIPHp. 3\= w`w4gQOoi C X0p#0ءsvv5kz('{MiSxxU9zJ.ݿt_ qy1uA|ժD;s5}6LntƩO\;LX_ڎ\=r4s\Bρ.2ԅp9z 3#uN#p;;ǾC8}~|K9W +,{/?Hܣ`"'tY-Ño[~le}lnJXz_csվƖov 4M޻kWޭ܂ Ug+ +lQכ|Nb73%Φ%)13ՐO6Ʀ&fGFGRXdS@2W*$&rl,JDn{( K@$ gX$F(BO n/ x`v x|W|.9o0\8x.˞.bs(pȱlR<f8,6a(&CMn]xyӋ53 +[At +8'EPZE"5Fh٦Uq!-kUHCI]){"xvY - PRh` xJZAK4 +u5*yӧ(F#"ѧQŲ'Ѳ }RDmq&HXC,ɾHHE }okmj[ֻ׶z;3!9dsy}yC~p#akS!W'!Wٗ'(]EC.uP(l;-κ,jHҧPZ`I`jBV_OPr3fB^yٿ-ǥoK +@v'Vۋ)T,Őnb܋obOo|Bxu4h:zzhW{~#W8FMp#akS!W'!Wٗ'(]EC.uP(l˸]=d s{ &fns9m;*v9@{(l#=AH`ٶN@7:܅ + 99@t*#Y tekKo1I@s]߄"*m4utto؎VA:majkcނֶMn-Ӛ1yhV7r[ ͠jT26V64Thջ3P3Իd[q:& pzZK-I ̊kJqj[3(hˋWzy QV@- +[MҼRPL+d锤bg@4":م 9?0l(T <2A* ژsy*ޘA'w!cd}vZuY,ՐOVddԄDJ63Yy&SKWi%kԙTSU$mbʆm*)}ɪV,^$ (T*Fri\&EL$D",#2)L!qz wJD$o{IJiD$3ySHȧ'O|L3SiLJ!sy0> Ý.́qXa3a,Wlz, c +c1 + +_󭉬${BǕ+KQP@J@EIZQ + +*vA [mXwf ²a뺯9ɷ ےD`aIrX,,bM+& a1ޟGE]t*[&ޠ+A]HZUh4F0?7JBj.⧱D|L=w = /@| +Ge9⼵,K *⥶B _9_c݁3[ 2]+,B  @2;AOBdE? +=Pyx72W鹏޳yO?*>, Ͱ# \o>3nt}C~3fy_ݐ/HjBBϤKx$tƤCx75,2yz=^㑧{SCRhQ= ӊy^=%@nn$ njF7( j\J6zBOH=FQ+{ͬKv #5. !_09%s')q\JgˆpMp8)a+baVVVؖ&z KJSIJda15,kZ1LAD ?.袋P1 2!7 ]I*EU"$@-F|"Fh3MS $8 7G#sἵ\!bdZQ hGsTY)@]p' ] -NkN-4; ')]>kr"\:k?0\F{#v{ȅvl);dO8{w-rzfcvg[}v[J-{mȰX pb5xTtΚ}VIFA8\Te;wgXqfT.ɨ/5פ6UT-)&Qe/U+SwJ)uŘ]BHj-$\]XA(%UR˒+H%-K43VX)&RJ()ŗf(ZWmh`(k(032b Qہ-F9hπm?{ę|%YK+ɕaCpݘȒ$[SB6% @H$H6.\.wl}ﻖ^p}f>}]hFUm8tnUsf^9rw1Uu,o{J_GbuuQ=M$̭bu+ؼ"m ٺ[( ^]Zͤ +rX-b喙l9V̰d*.(%XWl4gYW'F--&U1F)p`zq# zlNEjq~J-0(N AqY\IQhD;` +fQ+)J@TwQ ̜qR)da硐R4r$H2&?DK"b$&a !bH&PHB>Z #A -). qИp8-bQq<mGb [cXFKSX,znq2%$ūV*(kdx%9N%źi s2h&3.)9VIWs&谤>GcXf4ƭ+„qٕ n\tN!&T!E&!2̠ܝJ;\OGd@w k{4TC"ݾFM X +Y3ג 2խQ4虫IA58o?/^Yr"*/' ?*ͯ)7JM){M~6E<8VL|/?>o8 c> Ǐc}sbW/}boD/xKwW@r̙3~[ˤLF!]x#rHڅ OEA>9%TO DA>|-܉ثQ^}9rx8b{/A}!io?FyX( D ={㏡ן >tY/BG #“ i'ꄯH _t|8v rPACێ i{ ڏ aWὠ}mwk= : l'u8/-v>aԼ ȵ`˾m>5?u-{AM=O vӆ"5 nrɰ~松Aty$vgQgJD߾kRDTo0ql  ̼rcXekPy_;V{hHę[OVy#C7E@uP5xFt51ul $K{C*iwJ[}i*sA\%HqKu T@i*l"5.S}dh0TW4ڝ5^@k-j FB(Ue$?ŕ(vXQeЧ\TP+X2-OvVb,YedK3cz5ԩCa:>Tz-5Ac=q,Ly8t[ͻg"gq'F7it- 03GӨZ@Sj *3H9>\SȂNB.EɑRكId)L*~ R&E"AH2L$B "((b!L$.)&|@/G A + [R\.1p8[l[z-^sMaXRKc),b5?)-6KZRcq,#Q$.wsJᯣ]i1:ý7TV? w'\ňfho]"x>{=3w#{߹IܙM&||n*@5ΐ6627d_w2IZ?4rw"ï;ӑR &5;̗fFS9@jv7?Ƅn~Lz̐az3M,FEl"c&ۉ&7*'0z*0&bFnCf-%܍pnn703JSð7Ԉ3lxoܔ ݿ 7Ug+.JK1^vVT1~i=c좓Zw-qߑ r aFbgEy#jρk ANiv-} {am?ڥl-}Md?f #fJ_}Ɇ\8j95 9wĆB21Ý=l`cuZczZa31ǝDQ9nÊ +:n iciԭ`"ҭt0 N4[b6 +~WvՉ.ou[; +١̃VPFG}8Y{I^Ӕ~P$mCDUFik~uZejqJP>\-IcYd$Dm UKAIu%dU%*Q5ʊ! E@Š,('#އ|\٢R<UYN (,",́J0{q,PqlI&DXUD&XVH(SQJA10A~:'̓IrArSi99\607;( RLDq3322QHd%MDk C8i4PDL/ɤ%ǡRTb!I1dBIP@H, @!"( DAh0L\@LJpb5P}#a~ wgD w'=ܟr89!@nX̞`[|l,XڋYL-K &łeFibLV썙LLMMV؄apeI1Vb0W=C:0X3#/N3X*`94}FF[* +#/G__B#G_1]=R0=e讈 +iYmm?jjjJ{Bi-KGW^kP(攭nF\׬Yf͚56?͕M3xRݍ)>4ʖm(=Qڥp4xy?pEAWnW[Ms~n's/_/xu0/C,~u֏~nSևg/v?ߩ4?`.Ϛavs~ f0ܮU؉c~;2l_-/ˣm3o%C"oأV嗇H~zd)o48C͐6A{{^&wp&!o&U^Oxa^Tz9aLKŘ'v4C'!@3B=A703JS GԚq .5҃!Wל!\4l4ypbEi`b)J*c3/g]tR%n;8An#wry{sDggp}t^{Hlr=}蔝f' WOkt3m.\f#l]lu Pl!ddC.;bC!F1g`:zZAg<#:as +rrEҭXE=Xps9w1hG[͡afY5Sjh<(oetԷьׁd5MJ6NATiVW'A]'iK+ӚՒ4KW@RHԦP5+TWIF{^\URmXSXϪP]$*Xʂr2}HǕ-*EJY唀ʲ!',ǖdBYEdbe2!1 A4SCy<$W^n*"-':GB&N%T3S2Q܌䌏%K"Ő(i"*]i4I"$bRx (! ?t ^1=Jat?YݣPKIHWfx%$&Mi!sBt-f`iCzy ^ {9a/AQ/i쮯o>Bb~zO{|v=ȣހpQ[^f R tzz2kރv~;^YWU6~>cWz zz/z.tHw3+v fgf'y7/8ѽ#™wl]ottuk?`ZYWr:%žzJi +G=(C|NJvl,$c3mJcv[ژ:[0rpJh8"׫MP*&VY'+`VCBxRۤCdؽ5%4juBUwVk}ߢ +VۦWceֽnȶVn+`2nM$;ܳkNݛv!۰kԝi;E\}َ|@uۈ,۞ж|ҭk`lٌt (es.`ɦMflHޘސ!zx밒$H\zT-[(78gF9 9逅iX YfgaůI%zeUKWY ++#f 2 SV`Ť-NK4%`y2V7IED_X# pyKM3)2)V#g91ɑc#-HE,F$%Dk$K|~R\Jtr||Dy .H \?30Y !La-,Ӏr$f@D]S`_%T""D,HL Ep}O@HH(Y/x|k\!e8\b$l936bbaX6?& `YIcXb0A֓b`D"dee:Eh/j'6itnMxI OP( +24ϝOCY~P' B!*)4[Eha>,Z +| Z *3b6㌏>? |pˡYycQHOg'u$IIgGu"ޫ1G0:0,?== +#!_՛Y 0ӤC [`)C1Y;3Hy5H@ ே?L⾿!Fi쮯^!1?=Zcw|Rw{F}<  K0|ˬZ]*NOB;AUF~{Юpk0׏gw^oA7^e7^%Wnqqnq! yݻ;"y79ip5@7M3Nk f]wj{n)9Z ӏJ@ ;?b(۱P翷E(i5 jL tpDq +I: +J +.T%}ܕU^4<"؁%XkL(EU:WUt8H!>JY^!Pѡƒd0P*݋ī+KYɞ@@Ed_YeG 5}G6\pN3VmmQ[VmE-Nk[:G&/Gr+j{N=:tؤާ (ٱ}ڰzvڻլՅ*e>[{-mXN";`tی}A*|j[rkڶZ@^V3m[5VKNk@R R\nl4ArP٣+UՕfaj2kJTVYU%UʥRVT`eJC!C!VWA뱶haJSsQ%V9bBMV +FrUSYk +:L[͒rUXy,@6&7>[Z4i90[bU6d48j{3U1dUtFRREf$#ҌR2#Q鉙1Fxe:6-Qᵒ!t#TBI(% GxoH'# p>7Aq {ypﹰ9  bL1,b0Lb I;B g8jt R2$, #yxͣ(‡e#l$FΧćxߝW&E' GZܽp<&ufދpɋH8&%ϧb"-D47 zthƳ("lVO'6Qs%"bvlWAh10B$X*Gwr᝵o~M9!P3>F(aC!׃xp!\ kz009 60M `_8ѯP\[F7{rɝKҏ{/ŭ ~ܛ}7.5w9_a8}cqյϽ9?\;Ʀg<g ^pV> S|h5ǞWNz.Xt剕\p%OWuJsGW,gǬ0Z>]2;sd% ϿyNn0<2'1?~anPrE1><+[RWRw|&G0۷o %`@}Wso*a=)px{7hnþ]igC~ 0W&>N@Ύ%KU(ڃUޭfEͨ.T.k4ou7uf f Pym泵Wۊ^жZMi۪ZrZږf&*@vSe#Ѐ4zU]QY]V+KUmUURʬ,\*eEAVF40ieyeXzTZikK48UbH).I.a`$QI:U+9OJ˴%,)Wi3`r㳕(U: NY%/VjSLV +JƊʹQ&PIYfQJMiʈ tָ٬LΊH_z'U&Ed2WCƔI""RB"(71櫄Û$ <8ܼ%LJy.pyP<.gy\.^{.l"fXl8}6E `9¤L(&`t?O3͉''4(myTkEP^+2dȐ!G +u|(  f r_! a~|D"H2@)/(AOJYlvG" +o>)XDEFQB=JBMـ8T3gcG3Jdqɔ\2;*BL&˩(8ɋ͒SFOg"l\=o:T4 dޘ5;wdtë 4[xāuddwÖш]0ȣ;%.;k?tˁr7B@áXCr,ރƞrB,_Xܻl2s5Ȯ@`":kJ=la'@P@j"aMH!!}Mv]BAEA@kU +jUj<3Y3?er79rsCL<=n5xq'KFmz+Pbт| y! 0< `<BrCX#0iswbzL` +=B%DZB@İC([a-f=l3l,bgg!7E&SֲeYVu| F` =`!C& `YYYYYYY BTRh #fnMH!$/$tB|@9׉BEDIH/^'ݎϗ2Xo^gs"l?ͫO:w{? {1Wa>U5/#{ +fr&Z׋Uo8oDͪ^ޮ{tJm \?>ٱ)xJOC8Gf< [ EQYac=e`?.me 66 ˻p}Vw ϿaA[zO VODO X3/99@9!I+73+ѿ&4X1͏tՏ~/{>ܝܙ!6 =w=u  /ha2?9;kǚ1/ȍ&]ЛqߴFWF:3>w9L{8 +/>@&O] \:F2*6C]s8>Crf;Gr$ C!{2ž!òiM 3f1,d̳a0 1[_Mdm'dPB WTp-("*X^U(]]Q`C,Kl4eײL211wy}y Ab"H` py Q}|P(j>@ypy[x<G98څ˵ V,kX1SL1o*XF܀Y  ˑp?`0@E/fG(ؑA2Vh%gP7Nޅ iXQ:O$vF|H7 "HAt+)nCNT=QU S}U}~;J'Z`8Fq ӧGǾ6VcTV(m5?iG h]O([mO$>;bHucotEX3uW#Fa 9ǪaP:^v^<yφw-Xf$%  2h $|>x<>o7rpõ k'66=X,ְb)bTl#C9ay:`2wBH`0 ?,buru!J"^ʀcNw@1)V8~;ʪGB5z}##mwUo"} += +7V +o B^uY#T#̦WB-zy?D~({!y7 g!gmR'mA2?nJ~o 2h $19u%pA f~ ~W=;QbRtZr|^g=V7QJU4NP%jBEB'R D;R*B{ &gYj" +I9e[Mi$%xA@EJ!BH}# ֶۮUUZjVv.u#;3LwHyyg7? &j NT hoU8lp=5kg]bk#aܓ:aPX0nrtA*;@,m#W c0m}W뀔 o2)keeߎBWE}FHIwC'u]:wԀfiն,mPQ+[\jRa s227U5\MF *zW):jj@vHS.u]6HF8J!YV6ULO1ȑQQ8@rK(`*+Ĕ>2Vhm)%AH5M<'ffZUDbΤ c(̛LtLWvjA&>1{K.=dS9-;ݖ5?acʈeRN( +Dt&TX'=Az-`mC4ύN^pZFdJQTJ9cTA=t +cPK{$QRώy#HL +ԓIV tF*ВČ=D#;؈s# b!;?B" +dG3A +_0'x * `Aq\p[ +'|uzA*>&ր$j51*p8=.G ѝ2|GFFAcUFcnQ$uQ|~rڈO?_y0c=3BN +yt{癭'w5?^ۤ~x#UuXd?Mo&߻?_zï +]͇K,}kfuk_Wƚ~V?\O`?\]M+]Y _VAW+I\ +K+!Rܻ/╠o/Q }s!7s>_-=By\<7ϗCn}i,ōOgcH7.]?vHqڙhQ>h͕SFW_~ 1rХQ'qfS|q" +#\<%#\8Lze2Ѕr%sS,|~| c!XHw>y;wҙG|8H#)LJ"!ތ|FO"ڇ:y A¥l"*?z029j(*\Ho*51FxTKjȾLͽK=@xhwtpZOa`u`WnǡI0]R2SKESM{F'kNUUκG@{GvҘ$M=".q{j`1j#aܓ:aPX0nrtA*;@,m#W c0m}W뀔 o2)keeߎBWE}FHIwC'u]:wԀfiն,mPQ+[\jRa s227U5\MF *zTWPW˯uՔՀr94K6U1(0*ŜIkSABQJ'70ɹ|<)#5ZYf*ژŌgSab IKc! C Å<µBg6Hebzi NQҨ=wJQTJ9cTA=t +cPK{$QRώy#HLLdR1%$"1c$A$06b܈D"XȎ:P(QLJ ̉@0G<>+>~x<ނ +XP\p\"k#K3M$F&Fp8vޟ+1Z[Ky()JĭdHrh@Vņe .1z`]x). +A3o(yHFьSnE빡Ly|/ڇ$V[$H(brU@!BҤ邸*bR]]w}qg}'.Wy>y{Μ' Ϲvxq|vy/%z?c%m[?m[af|1xK̦/Rԛ +>Xܛ(2zrՏn2b^uMA^BOꁞ@q:I!U(9V]rTJnP4Wj%IGqk$+׈SI/H Q] %+&UQVW*iTK QKWU/š 4"U)),]{$,͡RDQTI6-!g +e +P.!it sQ + OD@Yx 7 +g²H"dQ0R ~FbFp(F((-,O%c$%Ё$!$PJRB ' + "!*Q B/>No\$*^.8X;:_ȗ +%y B *Q|`_D0dO: DE@vR +% Gyywz%''xg>v!~7s:CCf0L<c wsC1ϡs 25͢}\W ?;C=JJ{tLO2ǡV#){rXJ{.=*apXlJl+"C`ÔCvg 3:LmJZL=D{1LM :LhiiAԄhG_6մ44aW/bƲhh,*ZVgYꨎQQxT`k.ܑY`op7dlUQQQQQQWrޒy."agلCfX &Eb8;1\L羜f桧g[M?>l酇᧧F>q7kvOwp?{,+ah۲hef|Qx̦/rԛJL鿞y̫{w]& /]!'\@] O8~s"q!4y2aGܰ3G?8)xx2{ 6ssR78!{#gjp A_597` {Վ{62s-7O`^^hCiZp5ro-^kȭ֬Vr 7ZXX{Cݰ.KXnKJ׺,VӖ wZҺaArv]I6 2o)GT*'s_p̳gЙ xcfrݺuԔTN0k1F0qMpZ#Ɛ&. FcL[ӂ:&QGdyF7YZ'i6$J%ǪSJ@-UpJP6H nBzd5qCa*T$+Uuڢ**J*PBuQ%xi!| + e8VĕVJP19%]Ar9T(*ɦ%<,\LJPYY:$0-Qc" +RAy)\( ϓr@rA9,PX6RIL1*&RHNH%r))8:ɠ@It I Ǡ HHJTB񋏠 Ć CP1|Ph D++k l/ , RfDĎQ,hQ|bF,,1c$blyɛݝ;;3(&9gs~Y d# +2Df%ZgJMG䑰"sҬ iTkbVj."%wuufzRfjf\zr~)i1 S#j[U*9GVxzy!ViJHs*ᣲSudVHR|T?;BFJ!Rf"Ӄ{2 )TLYHe{H%"F"gCF"R0b $IľH "[DB>AO2/ H x|FFw|.=bh\.I6'-9 +[87=hyx|6=X,ָb &`o,;Gb;\o*14j AE `0a,&*D"ڨkb*1eBQ<>e6JQPMmz),L:ˢWcq VlX d B^s%Z *BO*5zTC)^# ūy0cP|7SRbJI ^O~X;C!εo'3 zc~f^ܵ,h <dm< =2IxN`<@NQPI-.nMz(~!AѺ*l +d 0JzPbt7pn7ӡѩA/u\ +~1vAg u!^pNt>sl3:T@T)W-uNpϵSB:As]d@PrܟV1?@C?q?;%8v+; "eJ\T0az&}"1&{K4ulFv7g}1x]6s=s}~p@0l&J|Zg&3P!So0'ě`Ajt 292;9< A&zFu9n=nD0nf\"80! i.s5V9wUM pdH^@?1Ʃza}Î]t*F{zLn pw*F:؇;컺AC \U:)hbӍ)k&joR4SDuYȶ]v:HAGm^v,5j:ATC򚫚@͎FP^+$sd/7WԂk˩j@2\vU)ڇ*P ʬAŘJBHzaa*|BY`ʼ!ƒ! RNb +^Ld gu!Vʹ[=})4+{Pyvo_lkWjF-k~~ߠ醗'E|{=k&\ӣu  B¾j-Ʃ] y8sgwbIގQ}{+כonŪQ*_n(=?X1?^[>*WcOFt>Fes/}rl |4\xdi}8B]89?JzP*T'; }'֙L T["}Ads@T0 wl:ttOҋޝ +Ę:!ЄB731g֭͌K&c11~vN*]νC{\cQnsr4 '9&8U0o1ֻNh]rUtұw wu ʇ::0}/tR2 *rBOI SM^+biډ򡳰m' kgC;Q{{u6bm Xk@mKkM oui5W5r&47V*IfT_^oϩ1eזSՀL5^9eRB5*P ʬAŘJBHzaa*|BY`ʼ!ƒg$ʽy] `㽤2nz!P'1t +B XnD!Bc:!6O z! %X }<_ M R&xrGzb$aVi1+R9nzmz}jgoSMQsߺ's4LDST@;\:-\P&*җw#^1uLS_ڃMQpd;g^xF|>Y ^5_i Ļr<_j }/?C?f_VM>fIw輇M'%;zBmIv~ϼ5GC,pWܵ;q95;g1RܭLܪ-dnmCފB+b׊͜~1ci\쮍;X[XsvX̎_H1;aۖmOClKJԖmKmekbͰ%[6nqS"$1 *jC OXalѺxtXTz:!1H-LY[X +"i~ҊdXdb,b~B\"!2~1\Y[k 1wR59ͅY[5;.h9qY ^)f1""f3._XI 6#tQM_<&6%jnn*ωhNԅ̎6mRUmTgaR4 +9"Va5- + r4jGU*|L)1K9qe3ldR1g q3a"ز()B* =L$bkB7aGcb-#[ȎbD$b"'J(!vpxf|# G·F;F7a3}Yde7Kbe,,9YZ 1Ɣ7 4 gaE<%k j O`/"H+r25o?^ORiZ{2G+¼3{vO |띡z! W~랪3I۩މnzwoHyUߛi7S__{f" wT w=BuG0#Sz'~4Y#&j"g@gg`!c#U_{b=1Ё2I_:9 ˿!Cw>w!w$xkC9S;Q/܋ F>ogo{@ I`K`oM>~fIwğ]| ::zj'ƉYؾsyYHMi׋[-u=%< 2yt"^š/{P^K=Xݯu^\Ewk@Hs >;+8>!~3j υ8\\.ÃM99 +~lb4;,kN19E]tET,uM ĐM`3> +~(ZHHh4FKB/Tr2],JH ',b%.1D12&q+ ޿B{|tPz|wm/P (džV+ ?^+ZZ/M:I&l^rd8Mh8ބ!5at006Ixڟ|:V2JT}#I0i/'k2tFW=E'Y5k6Q ؕ܁=bZ#}z|kt;I@&=ף[0lG +W -ɧX6|SZ"o$YB[ +D𕥐ˋ`@$./$RbݯA| 뻸ЯBȗ%t|`ߝ\?8rlO)38qgbW }t &S(D,'1KW'./xUc>}т)>p>"Z>|wW ޏ +{= +CQ~FԻS<șQ")N:y`u҉C$qQ~GOaD@9?rpzo(=a2 z#* v8wrw[ا˯zko-o~k{/w* ڰR{=;Iotйֽóu_{;vulyvwl&N 훶RLJn?JvJt{I=\QwVxq|qCf q͹\s8s*$$7B + +((hvX,֜b2s.袋X @|!dg|Yb$bb$4F$J)Iq.9^B -K┄9rlwE<6t,XX)dgiܼP!}0V7FҨFժ!rF1җ)2+{>?Z|<nL %nl ]96P$l>z/ovlxD4!# UŎeꊨB{_D݅]A6J/3&39rq}yOs{晟vKG|裂|޳>Ԯӝ+ߘLlW0?.3;A'ef&}[̍ ̌oCBt"QޏoQ0;*a BcB{7h{c%=aᗇJy z}ߎē'u{1d+fA;ȳ!o@$7m!OooLR41`4~Ӛ0vju5k+ +2Og#7k1kb%G=l)s^9r˂4sٜ0xif +n" p7qn!ݸh +3εVS-& 6FH9c.k6b6od_i2MуS3R#?BzY FFE XUFCV{#HL .Wp>@>|su!gkjUWZڀP'*uԛtkl<' KkUq'+Z +=QR +BbcPTI!VX!)(G/CdTeȪRPU+YC*qYv2YE4 +"J2 ATaET\.0%/fiTHp~J.B쐼dHpnD\U`vV!X +Ȋg&@3rq )?-IKRhB|Sb|R$ cXMDy'IpIHZ^DĨDτ%Ab8W"OiNL,=&$ qiHJ!X0.&DAGIp?1PoE8%' t(O%7%;` K7@U0&t0 s#=J}S}ؗ+/W}|gza{=}zcs|}{=uۡ@_G4y- `-Q448< Wahp4 a->`39 6"ԑXL5ڞ|R̈́ԙjNb2Y2 +RSS6l?T+~ʨu֭Z[_R!_gךU TT3m~lL Gs!\s͚5k֬Ybɒ*Xir GZJ c)$Lx] gje8Y0_[8ol5blce0_㿝){_WG]w~UwnbǩHBܟ_ | |3fp#S@wSPY>NYR1?o5tJh/jfb;d~\fv2'ܶ,&BvfƷ!QI&t}:Ƿ@fGe>a3Z(Lߍ9ɌbsO~츤9@~Gz;,ZC{Zo8h^߷^߷'u '<{vۖlHěcMa3S7C&oM (iMa HjRO=V +2Og#7k1kb%G=lIxctc eA uSXݹlN3ML887̐n\4Up Z)*vsJ]lmȾdLf3F +:24X]: Yz TVF Tm ]<)=HiH)}Hk\ }:=ZB)T̏BSO8S-$4U7W2' j5򪸓X-Ğ(Ub +!DZZ[($E[_+DU!22PdU^)HRWU[B,S%be"J +iDd‹3 +ŠIaE<\haJ_ !\!yɐ$A9,P`vV!X +Ȋg&@3rq )?-IKRhB|Sb|R$ cXMDy'IpIHZ^DĨDτ%Ab8W"OiNL,=&$ qiHJ!X0.&DAGIS_Mk' } E kTDDeZWܷR[uW*!j Mk[[K?rgdw 39><)%K)2P%fMEYIFfydɖ,@%*gk$$F.&!ǀcJ1zfYYi&xc*) 3%>kHF?՜=;#=3&'V#D sS p 6-J pEQ)hrƝZ1M9U!`wQZQR*dc#WY)h)0Ӟ\&P2X)X"IVbztqN76B;H筂'cX, 8L<&RhZ@"Ar\L;Eз*0(#{Hdhj7A:WiH>{XcV%==㯧 n W퉊ȇD}W<*y3y E!Ӑ7Vq׽񸁞Xq?g`HTxzxxP֫Ωˎ)W#hwD^GE͏푀G=8D~~m cKk(J0Zed? TOojqM!`9BJB3]MǍAΛA: 7tG׵Cґ<@z^VOQHh]IZ/iG;iݾ +g"4k٠[pMg5sSS o +_>Mw?:ɢK'1@qSg6 Lگ=,z9=TAWÜR 8ؗ=߯fn5j׸i|Sc}]}*8y`Ck*n݋B*l XPE5IYy5M@ջmIgM;hfT;lN66 ;m%fl_F5%To]h*ME[V`6b +6J@MUhg`r@e_JcY=ܵW,XVV,"[`^`ZXSŨ`,|93\>d!kY9fqiRK3-c1YREdEC2+K0T[X̰ 0Ayzy@oc(-ڤ璕甒J(ɒ R +r䂬¤|#dK AʳI5YF#c1ۘI=nv\3E٬44S\V*!8dff)&u9ΐd`L˚mH6M;+=Ɉ9) }ts\)DPC(w+QAIR\CT +Z*qg*쎉TFK!Ǖ\&P2X)X"IQ4b -H I%"HA, H$1v + +H" "8O(y\999M,..ol\p8-bRqqó : +kTPbX,'&\h3K GjeNJqӂ;scܹ~J^Fѹ}ePy@Q^H?5'[Ej (& CۜD=KV}2uL4w:RxT,g +7yBz!ozcp{q= > v+oWS?SF(hG{$}hFnzna~>_U0Zed? OZB}p߭P) 4ݷBHB ]h)1"y3h@B ukLWu#=H_#ܫ) uҶ:I%!@r?PkD͵lЭs~Fg|yڇV)oqi)_ZO s7qZWpj2]Hb16 6H!"@E7`[1r69nIN;גk.WnwÊV%d2ۙ]aD(A9Bkؼ`P\E` \9¿v0K~TοECν#;ҙCN@NBN گu;/wbRjȱ 5KdBLO(pGTQ5g|2N=S<;߿ǹxw`}Iı5Z5 M3s{T QddCAPHfS>f\O:GEu*o%+k!5a1%nb=5C{ . +^tw7@,]̝uTMkZAƶZV j.juBC ɉi14:v + .7T*vL=+]NWWQ_[^KWc#;g[U\ʩ@r%J/;JH`*96Hy ɲeE kfY QjK +JAŅnCiz$͢\P J7!;LydVR?FfGana'q +$} ːt۪%?Ð*ܞiLgt99M[_*Vix2PV! +IHJ4J$@t*R!GP+`r;×r2ɲ¾ _JD#,D$B%@EE /$$B<{>~G[oq\OVX8oh- )SL1SL998?cBCH|I2 I@HAO{xtO֐ă$dZɟ}u'Nߌql&rd&1{עa>C蓫>ܽI&\ RH}1wBW7χy*J7ή8.lά$aNɕfO3Ch73,>*6<9#\>;A+GBtp"/`ȹ7xdgR:s(ȩCZɃSn'NLj:W 9655x̑ %35;<SvG՜8AdN@~H`}Iı5Z5 M3s{T QddCAPHfS>܉ u cl:zJ0ݘWc7Ϛ!ŽMKOcN/: z:Jvsg@E5 c[-Ԋkqk5:!jT4z@a*nz;VV˯-QʫUtV3QFʭ*TZ Lvs%dY0J.2tKiؚaHE ;2Su7ƯX)IňR!C4j T#A@V `h +HjTJ9%콼$e _RȥK#Ӓ$ +^|I*-X(&#S ED!" E$//BGޒRg|Z|.oQxr>ZbŲp84l6ۧX,O1SL1k*6;ck` +iji7ŝR:O9Q+uVTab֊0ǫqkc&{Č*:'VAݖE5 %ʤ e{A հbH|OY_[(ޣW$QX SV- S]XN#*EWb*1<\TyZ:JDPR(,V"J‹3 +Ë1ʴ~: +JȣV + MK&879'$/AA9@ɐ,\Fv(#(+1L'b(%@~HM@XnX4)Q)SbR%G'Eڞ4m[b$&7!Nhk|X6t_l&ABs3TG"!"!:2Tka*E"!Dl35͊&")}jjB>c. _/%)1wN8 +Åq$l)p9YᰙL)X"ӈaHY0`1f##9ehh200疮-=;ttt_k~ͯ~1z*5GS}Y-QEKw޼y͛7-G+w9B;eKوt5VN\B"q3bggld2D1EvHQ}R\ѫX ӷ񵢏WbaSnhOֈ5JчMx>.l%ΓËGJ>g2KeՔ1)_DZ!: "Ӽnx)m &ֿvwZ炯vh?=i=%T ,S0~؃zh!^=pw[܍3+]޳^7W5^gh2vhqF9 HinbuG5 +c +W3ő] +N{H״N;nF_ߡ]b/A]Cz۩ْ`XNtQc{RZ 7-a-6֤Kk&+Hש:OZ`X]',X- .=ĜZ1shi zTk;jTk=b;L=L!!s +gdP14(c9{rtP9} 8]o;U'b'j5H 1Ǫpkc\cDԨը~[R~ĆĆ{=$S_U%SV(IV”{*T h\ GEWhTEW䕒*-A#J"r0J +EJPDIVQxqftʴ<( ++J嫅Q +H!$/Tf'CpILP`FR։SWfa@  (  p#Gt1IvsILt&xTPxڭ3ݼ7t |Uz}ꚥ&kSVc%X27:Ag~X9ɴعxRZ9uZ5ncC5(zXvU XY̤UQP,CrErHifǔ2҅|HF^ *I/:@iE\V`%"C0՞C/\2 v +P;,f[lb^h`3eX@ITsi9:+`J6edeIds9˔a7?9-FQ*H:e;@D0Jz +tQ\T(lU,kBL(ox)X8uÿx9>FtU|$6D'JlxBC9,8*uShp1N".B PtA 0>CHT&g4Nt~awA qCU;_k|gw2ԿJQ?Ɋ[sY9t{ 4/f\%?&An&A<c=yuP'3ޜDF^F2]w&0b;Z: QzXF!u~jӺ+sEOrEݰѐ[c }b$1Qo1}6VיH\iSQ'#!'R7 8%]$kZV#ImǴcZQшQpo ]<6jz# +ŝ:d 90v0Dx4J +S=L i| +M&;r!x1D:iCL}qz>T}Gn؞oA<_yL0B w ]wg;xڻ'\̞ =[5-}[vkweWW߼jݛV=tܵzVBfPK斊B(LaX{0=m]Kw e lMWmxw %V`{hdfPe<_vXq xv喬T `_HXEcez}WՁVV֢k=-宨Y---%--]Vd[RdY +i6Uai5VB, sdip6ꇕLG*S˩+ˮ-QVM08j |.3~>>7{ +:c|5de= AT"dz xyyyyyyCE&5@*!š=P%\&C"DX p1.!8 C#H^wFLك>^I3ؿP?C/U YOrc$4zioV?鞥z;WmD5ELo[KoKߜ?3Gxv3DU+t'3~{]w'|GxܙΫz9}̀^;`A\etr]6=?PR̝+z܏=H.H.%/]:#= !<zQQD:Ok8 8$â׿tU z1^Gnnnob&B/3o6#syv{`6ErQA\. L{zPwEQ0\qwwܖǕc8ΒrqqYRp3_Sp:ZE7n؁U AVːP0ņ{q12*LHY@¼$)D + "p)!*$&B|d]~9 +A\!zq^$}mg~/~ww^>(ӍҟI_=$7?gx'F/~`l[G!vO`%eEw@~ǎ6CW] ۗ_f;1Xo?~~{M]nE ݌>=*ȷף OnD __|}mV~{xu] ܿ|ޥ{W@#deg+}9+(waswF.F@n :9tM8TwT] ate"j2ybK'Cl\<L ra<` xtcsAG!g49ꤛ>ou0 82>hjKȟ䉛P>9{{plo!c~Avd(%p`@L8lEeY1fQ{LӠale1wc9bg!@A| нTĠf"Z:w2@XmvRJ}mLt;Z{jlzZp4&;{M.yS]x:]vfGiV j![՚Ay-M UsDDh4A yMFR6Bs :* ʺ:=D;kKkQk5JʪUgUVgVTeT茠,LC1ΐQQĦ^-i \m2HZJIi:HV]>$XDGJ)@ɅbPRANM!(YKI( [4YhAIlH:C %/ NT/D.!7YrB|VM.(.;U ژJ͉L􄌔$՚־$KED&Fd2 M.IW,`wؒ8JHDTu7I"qLN,^r"!#o/==L0z؞y^<ˈۣ>v-BxrOOOeGgze{ (:q"xx,[涴8\]p˒r3 gC89[s؝qnbĆIPح&5!$A" {@Hk[7@Eeߔ } @"UA" +h *;bETK$̄E=wΓ{y䗜Hl|}?ݼlTyra@ޮLAY.,Hʀ"#} ׈x\#u9[A>8Z8d5:^1H~oE4@Tgfpv4?_} ލ>L<ߨIsMs~oQT wcgގ.1ʙufUތ[c>(M>3fx-wC(bMh>!roUjӃߞy~}/O$Wb~^ xO?x^> Szɚꓰ~[`</z<{=-&z^d< @T*'ŋI dgK2J4@,^,vYIYsR0!jK7#1c4H J NWI% owjl*^PJ `w>D +])ĨdP "I#(3!#>LF`\$^|`\x^x<}qb11acCm 'D`m"5<%lF3 ax!7Gm + +5MJY\.CkHA| al9@V|.@Sr8Ț 8-ٹK8jT}> +(`[ZdÑF>fYRਨaY0){!caΠzfY1Yj̙fL (L +* A'03a(  g2AfNLMMtn4 +9&4-f0 D> +q/ ٹ&&cll?eddiiŊchhI|R??t Qȯ3bk| spn336$\BOOOOOOF\/g1eȃؐ CE߉f +P.xڳ %v>\?W!Yb93 | u5qqioz`OOp͆q>rgǶ>Llgj+xo>L<ߨIsMs1' C֟{7~9pﲙSYGjvXuy=fF` %n]Q|ffA,%bz3oOtj@/\͛^=Ĕy${ TE'yD'flNc@)sC ͹%nv<)2vs D w.לhtDz#.;`kȸ{ɁԝZnp͞U vm![@]v5GpLYy]9cKGt|M J-'xBH|~b%qB]<&vLhJhkbZ v^5^3V4D;9-Q>TvV |ZB`ҢĴƽ/Ҧ*Vޤ8iFjOV/W-)H(kNRV#HT  ŨJ2 +HjTW +xqyeDsKdce%\U)!-+ֈ)iQ(-]WU,\Nj,8Cbr"x99xal)BFI %#da<+)kN٩&<䞙p +j=Q@@VAEv[Zmu[vj}mJvۿcȄ 3<|72+g{`\ K++kk)OWv݀%ڬ2)5\\UNHR%½]TpaNJ%+X*qr/,wqsr{:JSsJRrR9,"VJa6cAApRg-fpisssǕqfNW`0sbd(Y@q%(fBd6I ǁSD 41!`fLn~~=\αDFIX݌ 0200*0`F AGZ`3<{ZHP{uњ̘^N'*la8}||||||~g" +<1"W+yLwtN<=J +&qww&Ҟt$A'CؾW w$aO`l6/w!?߱Kv-oA޲{1xڽa屉kgxp?f|w%rj#֫粕4UR%XQi 8i&1FhAwLYƭ3_E{svDI_ + N|~huϰS'{zx/| H|n AcB:?>˰}(^ H,ȡȇ-{LP9<gC6_RWǦ;kj;мγª\\w ]=M65t"e r+g{`\ K++kk)OWv݀%ڬ2)5\\UNHR%½]TpaNJ%+X*qr/,wqsr{:JSsJRrR9,"VJa6cAApRg-fpisss5?=%wN܅ j-*#g!p3h +41q@c0`&S_ï1XaQ3 :<{ZHP{uњ̘xtVͣ_QDk^jDa&s#D=J(BT*E!(Lh^DB n +Brd +k?~FG.+L6| _Ө3σ~[Sr1)Q- pL\V-\#ZGƀaD=fŅc#fati( D!:&dPg#0`#H`dIA(3C5(fXH @1fK7=czyo?}sghfz17n&E1E$yjx=}(&>;$OGItȠ ;`O!`R{ ^z:`ړ!; {ԕ5= #'a"`܍|.ql~yx ?|kgd\Y!]ܻbl%M} u1FThZ)j"]DHTuW +H' I( !BhҔU`A.ذuݻwܿDfLzsx;3!sD@R=39wN/[ 7O,8G/Z/&q+Ǽ1\> ;pċÞ =Iiwܙnkhlݢ$Nu#5unLPw].f̣;\!}]X#ߊ3qx361Vgȡn1`ɁN3w8SphO'=mn][D=mݭ"FO61}sgؚؑҦnmG!:T&ju[Z0FfE^L&Ͱ IZ#h¨[kPj\fsuzSUUSe= Fh@)f4AeDiub\)kASERYSQTO"U`R*s, r" $-υYYv)HZ/%B%٨"JE:HrT)%j + +2 ̴|MdjJ y̼\utrY|v*;NnhXM*JKAQ#B)QA*9$*CJFL2"%*І PDjR:AhRP$E(S IJPDJ"d}J.KIcCZ/1Y#M&EK $ĨdPв`?7;ȁr;DNB+{;;QHsi|g>E(ri"r,D,@7OGZ &8|E|b_syV#ų"! sq({3CƎ˦YOű'Bc +y6pLRlcq!l& L0tkL&`@tL [:`tg3`k;3666SY[dm=;>5ܚ[?jezyŘoMvx̙3gΜ _ڒ,΢%>FC*ؗ;5n?m<v{ZkoB|, +rYU =rΏ#}82Rǫ/{|?? +ǧ+EB|Z^~|*dhJчՎ޽Xe2zgL~cl L~۳UՇQzt%+C@ogWX:{)?OBy3y BOxo +7Bލ.} BqRqB=8R/#_~5{='y}o AWw^# ȫ;oۃ~k 䇛AE׃@Ϯ-]]D镅xyr9R "Gzx>ps'< s!Cܻg9;pn5[HsٍS'@n/Zqo$}qW\9MĦBQ/R<xĝ Dpz4>Aj;>J=!$, R1{КINtb=S΍]&v:C'o ȷb\\dzMnu69n1 !t:wza:!=N3C`f Fiw2iu&o b}W}-=#ӆ4Zu֬-v 355M,m[5$Фn5bT-ՍՍMUzUSe=,h@PF + F@mz} `VfL+5+ƥ HBR%5C1Q5HY[\00*eMDQ_I$U`R*s, r" RKWʲKA}ŒlTFJ )h!ɅBXVaRLb&25"5(>cPdgY ö0(69XL r X0L^t3fɤ0 Bt: cFih4hf |ό雙-SRz21]T*ՠa cN?65PAhKtd}85ŧ&]B(d!w͈~?|A)sS)b-bWQ'X궯ٯ{~X6]No_K}) t>u"H`Ѹ:P4F F`?Ę:1b/1x/11e\`p Dcwd:}nL uyF;|Ý>nOo~~^vrYov/vOOAx|@ -ng\,E:J }tˍJEGMgR7p\OOS8 8.Gם9ڮ,@<FhrEnrir 29y9)t9]U+e5uD58jƓQ7nT9 'TڞUʁur,`*q.C5K']"5(>cPdgY ö0(69XL r X0L^t3fɤ0 Bt: cFih4hf |ό雙-SRz21]T*ՠa cN?65PA`Ctd}85ŧ&]B(d!t R>19oF)u8(^r>roG6GƤԥNj~d}d˷=1V{,R +rR,| _,_N{C} Ȋ)ZT<10LBgSԁM}.}%sfOB}tι::}PD}@`QNBY7ݞS wj uxFAov/;?^? 4XxhS^=}Z/Z!PϚݹXwύP]WB=w\ .[nܮ&WB.::n:jx xRz܀SxtkNlW<zU劜zy!Bd8rԽ2sR"ܩs$tցuVh:hq T'e5V9nVkݨr@4O=z|Zk8ޥv.g3/bGq[Ĺm$ְmg2j>*AU0FՔKU3*k2+)*ˬV3rT(Cְ%V"kze~̃ +U*sK"8`IFy ]OX#,(4(\G9R N# '8WI,a +R/@vN﫲mOںwoVoljV^;30üɴBs9gyw_(g n-kنAVJ)ݎ ,6tht4a:gXL]qN-MFv"cWc o3v d]k5pHHRMIRLilѨn@4`4$rR@^}I=>JNmI53DvM&ڌΩgj*ʢJP.„,ϧSNQf,#J/5`%eRJҋDif] Ȁ(H H-P)¤ +SNb+$J6 HL$x2TS!oEk$Jt9YL6yٸDM.IJԀ-iӵy-iMlʸ)'EUN3$䥙sR 3t]:SjM\.@ L y)v˖LPr!gD ɤ%J":;"E' +JPn]v[>x\.cA\888 ̙;;/--'';شb)bN؜o;w6 ] + Dv V +p!~n  UJĨHCQJA~9dCo޿-Hf=^ދs̝`zD;e3cq 0yй +_ҺeI@3BgID]?vPjܥ]ҧk?YM>#}|{ʗ7'W >D?;w|M珑):6ˣPgt3>pš$+'.;>+g9A}eN <2܉zN?ʱ7qG:oQؑ/=q P;t`^C<}rԡQoψwz{q澾?9QYyk_@O@ު}{+EнSB']%{;;1e${{:DŻ{;;ȊZ)3=ݸņ.P5oi; l$k'2v5:06cG^Jo!ڎѵVýgۈ۫Zt-Tq*-D& +DFCn(')՗ԃsJԖZ3SAdk͘*x&"ʮ,*L|:De2RQ_+$X_Jf֕ b "LJ0D)BdDg*CIe1%1VFdJCe$i3KdzD$hZ8nQkҵ[r0ƫӴ5:k6nrt MJ^Fa|ZRVpdh'_(H=dlKE/\ ¡qdyih99ىŦf/.PL1SLu5ىY.ǪP`0 cA+!~nXR~xB\/Zba9]@! BVˡ0?oTr*j2(:PE(PJpvF .n<OorG%_IquB>3>3I13جq# );QsbPs6&0YRy1I̫QSѨ {UF6)ox5#R:F7l ћ!`2!}r+77Bmzt=Z0+!WA~RMg:8_ SF $j4F3ޤ΀ + 1QPA^@ +6ujf71fw=W}\"?s9T4dRȣKTËQ\u|*r\lD$;n gttEX8hG#ӧy' N!;YSǃyBiH0p t~$ֹa@ā~ZCTҙYqchR8C3}hf?rCNoh=77ސ> ړ 蝵۝@}^vwIp>7fW;݃5jI-6 =sgqo[gQo+Nj/2|el#跛h43ٚلB(w4B:rۛ@fBζFs͹[0fžfLZuR[-4c(cUkҵgU2Mhd@:FXըi5M ڦrJP +#K^AM u]q-HU[BVՀՆjU"L%AA!,C2*+`tdeerbKsPyi%Y1:P 9X)H)PɤZ5Lj~&F?<ʇi0ys]V!$eAJed, +%h2t Z.^Nȴި%T2@@ttR"M(OUcg)RUJ"EtwֈZ)yˍn<\#*gWJ_M½ӊpxɌ5 ~G`^jw%y/|~b1Ջ{Ovɋha Kr_o}@뗛0B_n2z>Rs@~{v5J ϗǩhܓ(ɥGT/FA\u|*r\lD$;n gttEX8h?=MF!y',\;ʻ +r<'fM]> +:hH0p .HsܳÁ&3CNoԀid/5?14:ۇ֑]o/>΋O77ސ>{5'4G;k_no;iOnH;}p;o̮Nw\kÓ;ܓZl5vzZ; =޶΢VHaO BA ^ej/hFo7hf5 P@hu47̄m漭s4`T9m ͘f0-Zi5&PVk5EIRcUE4U6inAZcU@P7U4h!Ʋz*uC)/A{96uŵ Um &ZY[TRTTɫ0BɨȯTl,חӑYʥSI/A啦Jd VBQ J7`Y"hCa&BPj +0SzPr*!w}.[A'%eC;(I Jʳ(td%hexM:!ӂzJPiBrճIq4UKOfjoeܧ F{K<]bD$"nGwWdT,D^EV% `jF +]ȺDBU ]V􆋀|UyVr̙ l# Xp٫(- , w^$OԧX"]7{.PN4DA +b$6Z1*"$ț曝[ќw;ߝ{o=gBFֈP`|ǔX X 汲,a>fԷ,,?.7 .`!|lЂah8p$@#1)P+R405Js`k^<L yl+/⯓#1!C}T~ o%O+y-`OQ}_d#EJb +nH=Q|\ti،aH:>19 G Ƈ`GcoGB?w_3dƆ~o| 6сٟśYS30Sftph!!fyU_^)~gn 罁g?~+~'.?ң-:9~`|!>k~_F}]f~7^#'mHV䲷pŋ< <=j4Ns}ރU9Y-FGyF 8$:$ך4SnF:4w W܀ZHZ1\ +ҴԹP[\!Όq܏.?83:s 8#Cj;Gѩj'H'1FD8yQh`kV-j8AAGVM:Q'aW_U@]3pqG*쁺2rZ/̯ɮ-ή).Ϯ)ȩ-̪-ʬ)bRNȨ.*ˬ*,h?!A>}iy \Hjy~iJYU !ynI=){wJKwz$Ʀ8d'TWhBAҞmTkl/L,V0a iM|섬)ܚGX`$*`Kn|f݄M6Bs7좋۽j'!v:j;vlݾ6Ҏl1۳QEobKԖ,fB4MLtMi`ޘɪ i0Y[>~źºU9X&jevr6l-iEV".ky6T YL²xB.2m .݄eqTKSb`TRY$xmUZ:jQBZD:1"aU5FNZ]E"0f9qMXIwEQ`5 6<[ WҘ@ V.v^2vd#˞WOCm^GGc#aP`f0k0^`:>0{=}2 V}7.{K wZ{}渞K/=67r"5}(:uPMi>$6sBk\j!#VM:Q'aW_U@]3pqG*쁺2rZ/̯ɮ-ή).Ϯ)ȩ-̪-ʬ)bRNȨ.*ˬ*,h?!W˧O/"A^ I-/M)ˣ*!$-Iݗ'en\ MirRC':j> uf(@p RAEv}An˫=.{[kHzޟf&w23KOO|Ν~Ɏ\Co3AWnm枦I Xw7vڍdmCG]`li2UUX`df2}s&dyMdƊF چr\=AG/r,uҺZk-Kb:ո"LIufU1*(*ɲ**@f\yFY>2RS,j$-8+KZJXoq% S ut +dHɜ[HѤ-0S8r)\s)ۜl";16bR$FBr^ 62F\'pui6-yI65i:>U.-9'2.* + #z+(29JhJ0H!"+TL)aB`+ߡL +%IfL*Ul;I~J,*BvBK|+%N|3#@|>/1#>ѣx: f`;]_Z|3ppсuww0yZ'3}pGKCo3U7`{`[#Eseiu;\c Nfjh7v2tԵ:jȌ5Tj +,R 7WQ5cV557+i4 d: +m}[gZkdXj;ɪ.TYU\SURM]Y\EQIUQT*p,73-TFQJa5[tJLlK2I-l.("l*Вn"&sn!F`RS9٘Ȑc"KgSd) y$YtXMntz< 42r;I٩u3 TĄu% yJH CJT 6] G]BYrcm&9˥;KLj12[Qˤb+B"% k3ϡ#0֦n>]BvB >]#`s|}}<3{><'G.b¤NzZ6Mr M8kD0>&.B- zT e(gi q6Y!V1~#)G#{cbUOīs@) I+sJJ!c0~BƇ`G {1  Zꗐ:dj7j/GX w#s{恌 +`[a0[1[>)h'Ӄ),ݥvҎD삙v`=&J.P.DԥIy;w;q]DHQG=AEހiSס̨BKr u\gLJs-)EkIZR-&وjR4U@FFDnT/k,oIaAezH^VZ[&S]YRie5\S1T %X.\*,+tZFWf +dҵ*]Vi:@C(Tb&U~RyTU:E]"WJd)RdlR`6dMl9Bܕ. 7MPme)(rlMFx|hB`Hn_T/D$\rB)aHh#3 +"KI^T|wQs,o.rXs: tXs;f.a10qa `V 8 E5<`o=<~[+(X@nݗےX^ky-Yn9# V!EK.[lٲewC8oaܷjB缁7P>0UB8Tb6?1O))#xMDKӒC}%kW"9UL-6NbYB[RX۪@!RZDD[_aTFy؟A7oN}dxqO}~|/_[-'}xͯ!5{[|7B@jj$σ$;#{I}lFN݊}7_~3ۍ_ǿs < +5o+q'Wy| h6v1pf%ӱV/@r{S1;ѐS\d,D D ֹhnsL$Y3맣 s")];Az"sxcaN4b͎gH L aόGBqFmΏؙ: <Bi +qsA` S)'}K{"{Ծ^p72ǟ?aȨ0 :z ]v2=~ ]aj+8n 3VDI*ehw4;Z:ɔt5oGӐTqgS;)'h0m:Uh5c{[nL U[Ii%h1Z[@JSU3Ԅ7X Ar@ +HԈhm3e zC=:L~]9 @ɫJkrdrtU4v+K*m,ƘkVr*4F +P+eQeN(U2 ]LVK*4\SRZ"ӂhH`6僊 YW ڤ/rV2OQ( R@,%Q,X@)rl2W1/]!ksAJn,y# !-5c,I}i|!'=_#]% P@GwXs:#<{y8tR8.:-:ϛlR\a26aYdos ɢbŤLJL Ig,aN^ rCcN8O@vaKl}j=<}ں/Pv +Xb*+ֺ"=ța0;~߽s17VVV S Q[P'h4cs|G}:[l cfffff?oR'5w/cS2yR.F)QypI)ev(G)Pb`'@-P2(CǛɆ٢>,( +cCr&@>%r1-Ӎtт$2/> j_ 9lz|pr|ѯES; +ߏ-]>g?9"ގ _[!|;B85_ ߌ-ĖF|򣚼}ǫOjb(h> AmДŔ^͋@{@ w쟁xO(=W*ԟǷARqT~UPz 5v(Qq Ύ"aڛ d6fBv.$-5[X6l`2k0 kkk1?}&Y1(1sceeEa 25o--?.% y) F}P09a'hz3o]a\5rq(K؟5Se\j$cGJE)%pP*[Vo  +8ܠ}oZKl!_%/e@*/Tɥ+eٍ{ANR'(HD tыا{<{6)xr/^81%|0L01 D89/%7cK=XY)|5[-L~ȗ"ԛϟWPB7xq?51Ar&ɽ"|d1x ~1hd.ܻ`.7'JS'}iUǷ?nxn**(=;3M'W;3;I*rҬfkREQiRTWU +i&LyjY(JRKL)%tVZ+-y%d+̹ E9l3"eYdJ̴l1` LI S!=ߥL#YRnE*1'$$;Ͱ8'g$;%IL_^bi "RI$b(W  +P"BG\넠\ƈ)I lB I{ 9KH%N!SR.є iE .{ d03>x0< ̝p\ ˌ7#..ႜb{1 =yX,֔<)O?Ųa`߶۶o(6T$fܝO0s¤6> NvG< +=>L؈pqa9 ũP38 +AQ* q>{.z ŇsUgC g-B_86~+v`|o%o?%"=^쟋X~1Q"zoȯ ߱N^?7oK_;5;g20C񸑾z轼`3 7Co} ro'0du^t;{ޥH<<+}vGxzG^B.=nTgڴh@ՙzhq/GT.E(@Ws$%R h^w^ݽNn 'twh?u gt"pn]kRP ۚ„'Bi]=vz ]HBWՄG.5 4WŨ[ !\$ph*p 33:u?3L_99e /'H?y @ 0@\g'pxud/>~^О`W5=~CйO)U߶b=v)? P+vvmYz̮Q[ %6`vOl|l]+qük';oNhǦu6L[ ;6P5>Z(VCu]ik5߰~xVTʯ%3W۲ָef2CMTy6nC V +jr6'ˮQmU]N.Ʀ ΡjmZP5%kd.^$BHVKYFJQI^QT* 0ecRj,(%K-1Yi1䕐0 XȒ 4d&+2ӪBƬJ22%3L|2dIiĜTt’4Lݒ\Lb.'=?;/9+hia!W!E䧐s|2?`B9K)bϠ@gO)܌2s,9v +\&1,"fLL3t&XHK,6Hw#gP3 O!@0͌ s|3^&ffO5-<)OySOl3-B(6T$fܝO(F-q$Q4.LADtjfaG׈G myQPZj4;B͊C"\'.LTr(6DƊSjPJUA 4мH_4AzkLyE_"͓ʗ .Dޭ^?7oe\w +j_6~KxFzLP<`o6~,Hhs3{n'7OvKR=S<<x[/!{rKG뇎XZcu7c ވ#}]4Ƈk6-5{u&+ZQJޥHjtDZ݋Q΋Q"]}>ɭsᄎ43nPn uZV )Lz"j'F]= ^iT.uԨrr$vī+ Y $(,v:sPoId%!l ŲTX֥ڙV[Rq.jLϙd{^}yy8|wݗs8IatˇIgPɐ3SIB&%2:uP {3IpDZ9kZW5NŽMj G'@f&!&5#ӯg l<43MCFՋrhTI@ט#j:w8o,/jtN9##>Hx/a}j_ %Q0d.k {q0C Ӡb0O4е a;{IT~vH]om'{#ց3O7 C۫uz -@zosnWPBs = u6Bj:\TvN'ShUynBjr;<we[-h-:e` M ev,MFT49au(n]"*EZuEgd􌶛-mUf&Ba]%~AƊzЋʺ*W e|}imHrDO_] (%m*?W]=?okUQ &WBqag7gHe+╈R)g*DC4q*~Tc%J"A2[TFkU*VRejVȗLzT2i !(rc^R* 2iS%$6BwShc!k͡#=I$3O!`|#ڳ|>"#</$>wif\. ]hF\,\? s8OWD(FQQKbHD"'X{}ܚHN$"""""H(;5g-҅"F٩y!Hec9UJ.%37=!2[ΐs2sV pkSju*dJ9~%=iduR46Cڜڒeψ=썙*֗lJONPr"dJ.%ADXNm }z*Eq&ſ]sonR>o?>ѽ-}kҏ_=_τb)A`?% 6Lo`wӲ +;Q0dףּ<=zr{3/C߆=. О:n}wkۛke!Hz.A~-$T47\́< ӕ\Wlpk}rrȝ!Գf`z?yaL b,V[̐>{oeO]A^w3bY rzONeP||2i?Msxl4ZN%31ţigRI x&%ȅd#).`p2T*rf*IDFjao& NH '^0}M@"dvR 96ݟ D 3[ґ WгxDnz<73MCFՋrhTI@ט#j:w8o,/jtN9##>Hx/a}j_ % 10d.k {q0C Ӡb0O4е3BHh4Any(:vB׍ajm>b8t=Z 2z_-]wݲ 6wQv5: 5].4@г ]g#EՁj't<vP&T*pW5`lVk+ZbkSlmfRdj +J\fW*k4(ANVG*q1+(b^da1XwXt6K+LocTmm20 +*A *4Vԃ^4T-TX`(3KkCҕ@5e%z +C~u1\u{~֪L~%:)+]IM*╈T%CJ9+.NɎW* +9/429URe2$N*EZJ}8Q2FL=*4L1`/F)3B&},XX~9t1Љ B$ ݧ +x0Y > KBr7%aOEp9?.af‚aEKĊb4,+$,HD"OP yr$'UdHp:7]eȐ4IyaN'o# H85;;ܠܗʩ"(׬Ρ#ޢ$x茂PUolw'k6 nU}{UIw=K0gij i2cv̍1f3{!+]pdn,.P>R6W `y%$ss[KY: )qH0;H!q@K ) +SUJU;6Rryؾy‰ao|HΛ9MjO0?~ЮL89fa$T093 S +zzpІ}҄ 0%jbdqmY5u>@ Xy7ǐ9Pw#aO9oQCYo(HxG +ԯP_c#^ 9x/}r~l_ȳ{>2X/`g2w- cjn{o-GX]nkۤYMjYeGiկi,iSӰOXs@v})5Yux +U֡rJL +UQp +^6aO6sfXlr~613L9B?IsFtA#G7AD :;}LQF{6TP(Ն@YJF@\?m?0Xt)dCư)K,.&|RZZhќZpՂ uXuXu ?1uB>nHF!IywL=su++K0gi?c^aWgvC~.\r~PLH9A"@&y 9pn2b11r) {0PƺeRi>L(X)$(HJ2hA'3hiA6Dva9ΛImpj$X4 MjB`|8n03 bj,g۷ǔh^ +>h>GMiSP51ƵaߤVI YA2 c +WyC?yG +ԯP_as^(8/xس{>2X/`g2w- cjn{#X÷P]nkۤ/.aOMN>uncdUੲk+TYq*1+Tp=x-igd3wn:za-m9u3Hĸҹ[ mWKkUpi]ΦNRa9:4웨m~Tm m>^NSll[NVVUl4ol2YDm[U6JeViAz=#Z_*k]m9jAf T[*3j,e&Ԩ2RnИ@ZWg,{gM=zU(}ڎ2T5(kIMSi-Z3J3$%rylt<ɐDG'I"EeK.̫8x^ɤ0D! )E{tgH@HT/# Asy0åes>T8,6BCfbAaX6dBX18$scF#{EGG#1Q'*2VTԓ9"""~R c^#G8~=&FSE!*@ӄHB0> y?,,)X ~BeT@}f +]$e l!f6d)o ;;;aY$ItK,XD28R,W,Kd,"+\)TF0V!Q+Tl{uָjU*[!J`"_23^(5 37d?Nm(MOɦVzlzqų<9X +)BUjW*WnJ2WԃѕO|r{7r JL<밿^%YjWB_̙;Wq/gyݺg,JgA`LO..y1K0I& RZ|GK8[ڇ{];\= +^WN+\~OJu]S>Q8}"H>= +;\<r"p1VR!J\xqtȹc 9E$)G~:}~ v$Ȼ%A~ +$ɴN6))R|)HJq0>!GǑijB}Rܑd5wdw<U͇7ܺC;F50=!}C/ {0@h ľw6ҿ62qn=}]}ƝP[1{vtlsvtY݄A˰ 31uk_d\} Ӡ8Ig2u{ [@=}'r COf~sK7ۉqХsAڮ.#.ɫҺ`M0;sth67QQY|VRZ$ UKC Ϋقid*h8lf;FҦ6X6zFHE^kU`׺su=xԃTf)5XLjKQeܠ1k^ezYOXWJRƊkQ2RZ[]vcRV]{zmA~Jz*O""b!ĸX$!V$%HHl~ɥy'+&ESP84XXHI,ܣ;DB~pBzz^ +˃8x.%.a.6 +łdL&Š!!/f4= +(::^^a39{wN{kg{^?^NXObMr6cl<?N~ƉE}?c~4彨9n$hhH,ODzr;|"ӷ1S7W&PS0R<FU&2.@ܻ LjCu mhCxx: GNuؚ#:,|Tgu^M5&W6Y9DZCFR j7W7Tj0ڦj~m2c4z>ѼFۀh*@&Hv=jz_=+Ed-ԕSR ʬ-)V֔T)k3BQ]dZq%HYS&hI+ Mʢ +TX+(Vl2 eVIv2vBJ KJ@b=&XgaiE"Z) +Sviwh +fSϒʷ4 )|8Om%ra9JDN^1g:GJ*uȎlf&] ڮАATlж,\3Tv)Jq~SKmQix]%LjWIR֧ɪ8iJUu_sK8m4U I|`D?ËBg3yO@plW/kɣfpos9ʋ^T<.xa=μO,0Yp,&}~Lr~&}~yaat7r~t7wB47 +ݝ0oq(nԅ! hBR!4Wr~x"z:zj?mFϙuߧsF̓76fnMo} +֟}̛y7?~LgmÅ&׽W>^;?a^?^Nhb~zCn"j<DhXc1ѨۻQg#<A9`M +G0S7WS0RYzx-WVA&2] +Amw1s?2z!yhHoN_voCn>@ aZ@NOBw W WN 'apDN?RJT'Br/1_{rK!/|qVҺ =K;sH9}ЇԩjNyS9't-oHg3v@9EuZa:sԦh51/%1m%b!"6jPAw +P6U#=mTk,Uٍ}6FDPYR7A*{MDXLUW^[V+%Y[SZ)RflJ +0M y$3VE VP.de-%䕀$Ź k ZKJ#"XgaiE"Z) +Sviwh +fSϒʷ4 )|8Om%ra9JDN^1g:GJ*uȎlf&] ڮАATlж,\3Tv)Jq~SKmQix] йCC7743!( (Bx~6fz~{{{Q3lX/[[eccp8 ְ5 ?Zj, z,a:W3?Շ+Sd6Շ׫HZj|  1{+ӉB%%Ĭ,Ն !^StRR s=~jZ"gNz!2N !Zoܫ߿Z|l٫7&"d=\"}=ir|쭕ɉO,?Z&|!O 9kǗ[,5391 |A¿9rWjF1q|W/F=1p(P P0E(1׻_~'wI?<<43q;-Ec7!"F‡DFU_ +Wܻ #d2tɛ4xd2x#ܵN8ŨlkZݥnujݤ:1qѡ5ޮb:4I_)@NQ'&WԐmKՐ0j1 +5ՃONn5wEeQX%Q% +NEr;z[3()юC*ZCJA7F'fJ:B9ި`tiWBKI0&|N+!W\ڐTQTin2kHfc9Z2PMf}YMƁR@Iz]a?ו թ%k(j )5UE}{EtK]AHUnRUX(7 ",4 йCC7743!( (Bx~&L,;vDͼceg7lmmߊ,(kXְƿ'|U|]B$P#FB VVs`|Yϟջ"??>tL^-@bV4=cb=($hubVAZ_q%jHN8䣶G<$L/9>\NFo݅yɑ0/)Cr!6yjޅ 'K[+}xO_>Y.3LQ`|MƗLSu;x=t>H_GXSԫK]sď.b^͋?{cPȳ#'!ӡ`Po!b_!hƞ $<`x ?ZKpbhzhHzX=Kr/d%oE/ovׂ;: +oy/Z`];u.vS&wVcrCKޮy֡茄}Z{Z;E#Ԓ!< !='`cjHOB;#JȹJQa%=љoh!J!W +%A7Z'fJ:bģ:ި`uZpZ *a|Mh1(H5ZW^]C012'!6Ґ\eאr:F er:"W^W(P\f(N-g^CQ[I)%/CL.2x/]&U吽eeFgο߄eY@YM9 +"$$@H +j>8m:U[h]V +* +ڱ?@½01u9{/9{k=k9P6/mdizZ7*-ݨn&X_y c0kWXNDA}]Gcǐ}YG]@i{m[YFZP-Tͮ7U7M (8=OM4ŠPEB:HjakݎBMeM͵Ƶ [,w1@T[k`ʜb,b X0WXI,nAJ+ay)+l%<ٱN'j^T| PD`9:.^xwƈn ,R2\s{Q-U=h&rcP:bǞ!|8~ DOՃf``߿0fƽ̮*q +ܿ1w$'(w.1[l!vk$B쀟.~&KיW>7.|!q|4׾L4EڌF?OMNL~.r.i.:ѥO摤"x>C "3t&ƀ)073QI$qFQNL9 Aq=It>;n»zѹc:Aw$}zD8wD/<b@|r8a-̡DQ391j'$:f<qߌ`'O8\ޟizIvxJG_Îy-xX_8>/~|C{8+ +3.ρx`ρmx1{ +߻i{̓ kDݞ*jwöV2A^wr lu m{v/¹g /F暭^Kxn֪to"TmҹdRG?rS;Igcï1F%[{X{чya6oEo+%kOӺVmF5w[76ʻ=]Y774t":=:;`e iڶ6Tik]+ʍ(iqj[,멘]͸('YsqSuӔ"c4̍NI#UPT ԯZa-tT\k\ܰr +DA + )sTgVȳ+*tE\AțTXQf-vX+e//HIKMTD5ƀXV)8*Ǵx,>: +ĪT>qjoQ4*Q+A*(!R +B-C!R$93OL*^*͍XŒT/ F$P )BJBLDB,8} +x0 >xd<2ϓq\Zett ?Ìy"88'+"""lobTxGxGx~FQ2tRL jE,ЉÞa~}$ {_س,-QLxIJ1'$g,,t~sa98!ˈd$ }ҌdLdpzIDl rRXd:Z%a̫|4f?J՚kԷ/eBTnhfk.zoT=}A9>Lxtѵ`<{IS0]LE'W2! +r~7˹{WfENCƐ;ClƼ\K9~.{5!n159E-tv,x$ĄHrkj7C07'7&1n ",o8 Cg\ b B •!s~$07,IJ. +\@.0gB "2=g 1"35LbA!-C{蠱>^_̙>a6Ń{Nwh._|*>CN[u+/mߢyC\c_Z7p!vp@K3.1kzZ|]mf>ģAí,j3q1-QTcGB~:Sng}:HNG-Y&׌i1@UFMsud܇n26@LUSMU zKT*.SJPQԗj uZ+j{ :=Iiրז(YM͙"WdƒJ2XlRZU\ʬ,*VH* +-(ו!3@==yR`>ݐoX4}>͐%8 i`ݩ-J)X*$K.P I:.U.t$y<%IV~RF.*1G`JJsHl6A#hZݥITehl˄+%j4(ĀT%.N׋H¤,P,Z*HSљ2@h.RD&j(^$IeN$'bӓTiI8QX*cv%Fn9o +·퀠=ax^a幪8Ufy|P,w=Vpw]un.2>[6W7;ދM.tYƤFϤ3VA{+jLaY%c DSiY%Π T*uEhζq '׏{W>Y)Oد?EG]V_mxWÝ-y?m߄a!d76AZU/F`χGBE@_ _G /\ ]ǹޟ ܛ F wg* +}~#Ԣo·`nNnp-Lר  7Ð:2#dƂ: ?Ĝ;-AG憅+#BaUNB. N +C!a  +3QEB1"35#L2a&ca3^x4g69'uFxtn%|͇ !|i:ė6toщݐoX4}>͐%8 i`ݩ-J)X*$K.P I:.U.t$<%IV~RF.*1G`JJsHl6A#hZݥITehl˄+%j4(ĀT%.N׋H¤,P,Z*HSљ2@b%RT\L}TS픊$Y(!-1SGD~<{/#M)z//ʿ٭&5 $ HLdrIHU+ *;VrmE@@DA(WoUzZz/8w]̻y7 3d9Ț|,5R*.'L:2 #sJD.' ޚHcV"F"!vBnj2_;ψ:ă91饮eC<.̌X\.)0qF< +džf㼽 ֌ǛLX,fy3}Wĺ^,3%///|<<<\]r):)dЊqF +Ag +i=ws{ČA"777ZYwsE`.G~/E"iY1"<i8="E, :d[m!0.LBJ4+=L!*| !ȁB0́kٞBL#fOT]K/*O-?0PדdR&r|2+ѻ,}k&|P/, ٻx1y>%gc] }z;ڡ'u"<6y4sH%!1d{k"1#lY" @3|><#>@|nj#0 03^b p\fήes(86MƑ3G8f'Eb 6˛]b4\p)w]rߧT"D$>HbȨC<4 Ә渹FG0Knn6B>@(bs}>w]}s9ˈpD#R,AB`\4"ę8g*-P2 A'C{d1L¥P^}2Ly,y:{2#yqś}_[rj QϓۑK{2+ѻ[,u+w}H/, ^/z-/ptE;gth܊Mh$ +xDx4d>16RDI2IDodGҺ̀7'> 0&rJ`2ΥpE=a?B 5pY Enun~%bF;4|!0t>X890kn4`;CgAm6:6J+B2-R xhItS*۬7#Z A{ M] ' 9VPκYGM{?\q^`sW[gk mh(ZRS-G5:(ԀG~xXkVឨg*B}Ww栊P{@ɭ9$UhpkLm\;PiW.̩.+ϩ[aQȮ?uT%i}OMi"di6miٺoI.ZGE6QPADYGGqfs/^xɽGS +NoTeUyI@UM$ m-nB=-ͮb@g3IT\ʽ@oG)k{A<2llؚϺu$WZ RWL]v8\b@m'ʍj,]氹*ݫ^t%Oj%R)jը,Lר4 +9RQTFk:2JERad1)2ZjybT2颒$I')I%{&®PZ  E0H L@BE|8>T<"ũ!</!|.D8\Z.peӛO6M)-- ᤱiū]0V-3-&TL&b0IT"V $Ase F1! ՙ? +둤,XKE8b-X JY2\ F!]('cd3jwyBF:$G +hMQ)6ߓ1j" +)2QR\A.}07˘'L4#i6T;*K8a3jэ ]o*oj~M4|FywnO駹FoI%"HXWO,|Gkî?{mEb>&\Y~+b[X$r1KE$ 2̿.Ko/IA|^?>gǹB@n~fMܧuL>ڇI!{ [&љF97MCFșC7a9A׳Saܟ;q h lȉc{pɌ: v2bvgafB̸z9$LJo?$Ƌ鐃/z܁]bx4wp{whclvPd^U^A{f}zܶ"^xgE[#-Ƨ[vMDCw +̎1;ƷǶqf|3#Sf+ijuxowjhgy4M' c}㨱8F7 AQX0ń1ў01Hp +#Cp%psgu;#ˁmA[ }P |[u`m0K4n_7,mSa`NoTeUyI@UM$ m-nB=-ͮb@g3IT\ʽ@oG)k{A<2llؚϺu$WZ RWL]v8\`@mڍj(;lΊ Վg /dd#*V)C! 2 : 5S)Fӫ#Us`=IT$F!_TJZL2IɤbJR(޼Ik<D,|8"qBBL$G:/#?P$s!_@/N->x|zqj=|KK/~<˽Ù7.|zlJiii'M+^B`cagJ*&H1JE*RT~B#@l!$Ase @ +bĚ#GGF~]K=)]QVRa o H/0J#g %G  )4c5fRlFcȤBrof 0O,\İ +,krYb6#E FIƴr3ʂ + Ο,ߺjSܹNÍ?iέTߺ\ͧ꧹FZM٭&<rCBL @gFkwv%I !\$Q@tfD9DAAF@kJp9[C'ﵝ*c.S#IURi_R7[~gr_O7+λu!~o⼺Oݸ7 yy;|旹XXs1q fcQ^K?ފp3ڡg70Og"m<<"E@^=i8Y Gܟe{ᐻcacXd/mj72{!dJysDáRP9̐y}H¼6(v*Yʀr95 Hl&O!~d'1&$6b)!4 bs[l|BF;頑. >s߮#G:. ~G~#p| 1Gc<>zHW::QQHFV<@Lg 0ds $ot"kF5jnKnշ6뚬j!mt5FTn Q! (쐶Ԡmn4r4!CzgMcTRWb*pZŁeZAyRVZJQfČ6@ +s$.5fKHerSI(X\ +ʨ*$^YPT2*C Pe-W!ϐVkH5JqiԒX$X[ '!%+ҢEDIB;uAr$W䃒TYJ\=jWB @rDN\S'Cu.]}mGkV* YB)S5KmS$YVy2A.SnLR^mt.Sޑ!Aq)n@@S"U\+noq +H?ge>(7{y{Hyזvb&kEX &IwIg V :Ia98K ASi98kFPy:N <=pݹGZncSήZ(w7}۪ruuK6X;ßN)B%Z̦JyE abՊk1;q׬Y~k{<0lHt7$" [k({?}srDJpL+)G1q!VB.%>$J#``bK$,zܑB%*%Vu幊)I %,s໅pa%F(lJ)A>-R7MbGoOu^}^\,l |,8gO(%ox~гQ36DCLGA_\G" \ ]Y,LD' dFD8XF"xQ6`.ڍn^!-9"e̜bI13CvӃ! ڠءDgE+b3bԀ <-F@&E~1kOĴ0'zSBhj/3vJĸb3#\Ơn!ﺂBhg04e79R`3r6{Νu @A:5 6pL@Q>;c0=uqAT$Վglٜlvb:~Nd 4Pm#խF}{]U-$B \#*HwrlvHdj6U7hp9!S3ڃzM@eE+1u8Kv}y-@M2HVFi)U+-(3JQSbQVL W3%2LF +i,UeTVI,@*@@!2 {˖+͐gH+5tRXjIn ,R-銓搒iQ{a"BUfw @S AIy*z%.o+W`Js t]9J]VAjF۩ݓڡN: ٮЀNS5+}ޚd)a,Pn̫dX*men]jI{>䮬˩^YQ=v 95k[x9lъ9+.g3{y2b99|F7K!KIU*gU-YU3+K*ܲ*`3.Cf,.Z +Yxߏƨ~y^_')}\z(/{]zާn?R~"t{ƪܝk gmwpoFASwpzy'>,#M*NaHVg3U3ӳDܞ9rJI +לtc%؃NV{KHO+:tNτqnn5DZy.ltgsq:~*֣[{cGhy1^'F6NDbPǣ!WE֣6#ak=^dSr&*Ph`=rΐG1=*n9f[eew==WND.2g_эsc'2 {uJ[m]]n\'˺Qiњ2 zZ^_`2 +Yz]_ngFF/cy~t'_:c%WK=\%J鋇+dﯔ^[#}qMD:˼<^,ٸ񵘟 _>o +?zzw/CL=j<“[+=%ē[+ď^NǏc'\I׍n.izMkK۫"o\}K@W5{p9ͯ{W@w//|틩[b؅En~pE/G0/$\GkH]pW%|qnbʙIO`.J'.)_N$x$ޅ㉄O%.OFrO&E<:p"C }j a>C31@Gkt >=ŝz?si;t|_ ~%E >`d/^%ad;үSFS(GT0a~OUh`=rΐG1=*n9f[==kY~mFcOnWND A!d|Iq쓺J[m]]n-d;ZOղy4mAY7aq$[yBYyk=mR-^&߽:7moQRf2FQլk5MhD7U4LVprfe L66՗ueuzgQւ45PT]Z rT7iVVk +UTJF(,VxIAd*wqeN3ʅw\4rz'<љ[jpɱ96kqi -:YYk%6kmY&ui, 5@Ld齲K&kqА+~$a^Ϸd +Jo KrZ}Nm]B!bcUJK*oO!̚\I-aFJy3tL,$QЙ@HE€HQPHLK,Ab`v DB%wkY)xZ x|Hb ~$ҧHn`SDraf0' 0 pCyg'i=.p8l6ĉ`A+"GDLbН8VX8pj yY + c6BCC\HH-4f*F0 n(OC)hqJK@Pz + &% W'NMY[n} +ʎ訣& @@p.-s`<@ +fjj4_ӀѢjW{]J#|0"WVv} +o>ԧ|Vv|:sfwai-N;VP; wm$хJ4\y;,x3};Abb'+zfGYFyb,b7ZϏ"Ʒs\@bҗrC̍mSʝ^alD8s9˥ ZUta?%̌&^ 7 > G1nI=_z¦̰&x ՏD/uy/h4 }.oH&]^NOBC=`^^x mD@ (kpT38yzNzxJZ TueJB6g Z]m :[pt"Tf>貓K{(|u@v=ɞhGy[Z9Эp'`G@U=Yek;-k[@i@)P)kTI+js5rK0k:6X(]B4XתQe6&Pch!lLimzA|diuJ}q, +K\W'RˎˤdʤbXIe ) +cGXYtHBEe*W-@W)Qaĕi--QAŔfKBM"Ŋ-cHsDgkSUYYR(_) =?XQpM)2?MVġ<\2?䥐MC $AX.r@lP2@VRHv0PhfRVxfĀL aJXz"*4-!jdBRi)*!xյ>q `(ZLf_rxoR'F$D$nad"֮xAxA⮸0w={ kGLbZҮF +G++r,32$껨И={c xuZ1x\‚Y[p(֞3Ȃk"r\3'g68{VkZ27cb S7$Xϋ 0{YL:C'`35&1:A`5iKyt)Ȕ28T9eEhT231{&/J( +!bLNG #cBƆFZ{3U }f=h)/kڵ_ܚ5k)ާ//үE] /gs qaBN& v4|E,#F[Wjn====OgZ`ɟ׉3?g&!r$ӊ +C[=! ݐճ)_x)̄M￿=Vb,v\v*&})76Y9UFĜ<137U5;I溚y]H i13~@ԇ?ב}:~RaM=bM>#50^_4>e7bK&ދ./p'0/O}/<6y"z58qGvc< +sc=pN8]v2Qý|pɁF{ZG=Ns[hOvr'{ĵvvXi[ĕ386SSրz:+Zke͆P VKZs5ʢ#D* +/Sh"HJ…(4p. $L֙,laITPԣVEPA$-Z|lZ^ "E_mw? L&i{{wdʪ*W9pr[y&tX+ \VY+J-l2K +2K +Xn/(K/+[^Wn-CYfͶgXs XԺn%t ^8nQnF_W)̶as8+ƂfKd͝%Q<!?LB)\v Ei 5J9"JF ᮧV* D {Q BJ)W@J7 +tjmV.1bTw2k$,dRO=,,@3b H">D$&zE, + EawI H BV0> b UPm L P$?x&j)K`x|N|x. zo?lj`Lt2ȨC vA& %jEP '$d 2?1Oi~KRrߗd2G^WR'gbQP(A̺ȬW@J)Tq{SF|?} /Dž Ƈ:c&,dl`.2?u`z6%/BG棣4 9Ws@y{ksѾHܩzSÏL{R9IE&PrI|ꗇ'uR~JQk&ff~0sznR=oqo {2};1|R{;>+ݻCOJ>⏶n#}TgDz}%nدƍV^WrC[}=]>{܃T>5E+(>/IDmbv%su}gv:mcцlo 趢:uY5=-AL[5]^}񒙶z:ɌަFN귓mhoh hҊ)omD3fzTPm!+Rw[5 j) MFw# hJ edz:k]N(Ւjk \P]`0\9`(vUwNYdXgX 6u\f'5Z Me8[ch6OZeVf2t5FRo_o-7EE˗,צ"RqHƣbJJr RZK"TriXd̨r2v)$bH&ë́C.E&BRD$$bad "75ҬHG!|f!IH(ECC#3)(}>>᡾qfP$r9r!iq8f3f"`iY!{ {f, `wƚe7G(6Q\܊s111{SшF4_OQI(S'2SPv=P^q\pLOFEGEEEE_?$[')+orSE~_n b ӄE!{+'] eqT8vA(6;C3O#YO@ +(?M-σCq+8=+7ʅ$/W_<*T<{;'-KGq÷&Vy+i<{܋wp-ٛx9Ńz~٬x12zvoBJ!ag?,!.%?.;v;iV?\(&{z#ۅd"x=_<“~܏@&d|ٸ{^Y/-ub&* p۟gQ B[2 nOyn&oηg3P|3g<µO3pWOJctdʉtZ8OR.}BxL44hJ/xJTv젎օ(X2ʹQ-rfLjB:;2$ّd4kikɄSkq'?ҐqP 8O8OE8pd/^h:ȑ!`"J=4w6H@ $b1ad`~qc>%nدƍVܱ~-_x >>מ.Po +=dn*"dw{}dn$qwwyv%su}gv:mcцlo 趢:uY5=-AL[5]^}񒙶z:ɌަFA^;٦)J4oBs@Ek --xQs ݞ2)*kt7 AIPVLVZo*k[-1)ր5L%n +e +ֻbWz]0+E +@u +;Y`#[g1 eizZSTC{5jU&=8iRGaEU^/杢ŋպ$5$Ԥ$vD’lRi Bƒ)qxB%웡zrYĔ +B. Ku^.Rf؎P=D ɤ̰pŢ$RH*ВĐD, X$]BF (L `;!_ {hx`|d0OGx 7<<. Âp9 Y.{\.0-lfL$,6-v<+daόbxX 1[s.&&zo*шF4 6*5IePfNgK@9)NrЙIaο88%!{@Y JHS*;\(k(DZťhAE.UˢܙL&r=yoy}Ỹ㺸 5!P(D+`QCӽ!c2g!4)󇌁r(U2ht%@!S@w" h,LכC%H>}m3Iycf#̓{`~}A}ߨwH5l3m,FgKthI9cw30L r|gƤw0b4%S D#I"EuE{Ex R~Ыa_(E/9x~7THI%P=0yv˄yz3C~MznՓ )55=5ëz+T"tX |D@{h]8DG5(8- +NsCZ=@Wj9OI8sjo= +@2 +倣;Av@;䴎G!u2̡Zze:?֗pnZ)*4Z}rLCX-g7V+s9:ByGYmf}e.JN5\WFNMV* nlMͪDiU6 nJΤn)D'hG@%oހIT+OF2y4%m$VI(/K/˱^,4,ޒ[L$C#{1ȬlUq6EVʢ c +Q+6+\*$q+ VȐ^D,/g&/.?#/6Ϝd˲ӲAi-JˎJliVJՒq1R Kצ#xɒ5kAkLYD}gN_͈,6`mzBx3E|"m"&L%:).laR\׉)b &Af&,KBOUB U"j~._*<٢fPh!\%a(@*|! IW&İrÙ,4O=1L*fh#B13tDBHDbH, Hȟ B;=^PpLj >{Rsh'X9<.͞l3kB8l/=1$e{>=6bX '3td`gxxtp8#x:A@y5!w0qwn>S~rSL.Gkkk} 'v2H`529P U1.......oR JP`!TO(p8X@u"($HA yc:}Q0Y0achMJ_K}oْO%"%maߟ Β vEokG|É!T$<83PFlђpLzf0IfG`'R銠"~gA&p{av^t +qc>crFv('F VFZ7 4vBn \kGݪw`AW+U=`Kz*`Fu^NGy~ι n:ZլC5w7fs:LCmS:n@Z4i\?\kPShWkh]9s +pۙT.T"FRE8ߨ5(8Ҩ47ײ`tfp'*S{{vQ(st'풍#͎9\/k}r/TUW+gjjdVXkzZ]5ejDMf},c{y53וmCז5[q242@:IZu tK6 JNlJRL+F0I +qH&Ċ; r e9r=˳%敐[r'buI`Uqv(hez܆1eΟ70wL p)0 +11XKka.q$5fn6dhU}G!fQVeglwC7zzzd*ߪOvOݸ5% L)Tf}Se_Ք†FwCATX+s<ut<dW:7V2nm )y53[eYs*-\w9V{R U:\lKkŀEȲVZ@Xep+-yu. v.(zxߊ|벒\<;W֯-YZ]V;>KNiťIPF EP4 DTP DiƄ4n\QzJiՠ*VY#9l*%U!A|f?}`(a5 +%<B>`',c00 r,0ɥ2n2"F1O&ag%$I xrBьr +C + Q=a  +>$ DN0Űgp Pp1<b+jP~/ m`fI+Eh?ÃcFfP10_{3Hς w~2;te~rgM~香a.~g;̔{7LJ(fb5tՈ1 \6d`a]4(z/Rz8uKu6ŧ;gI0gRN'N7O}ql6I>];:[~HOW'd4ˇHKL$\& _.~(er`!كzxٙ/X\g$cUc1.Gڣ>0r#БGs&|Ylb_~?~MD>3Ƚ1Vǻ^> {uE +qmZý{V-irX6{{\hܿr6:;;[kqν)=;"9vtѺ -su?^U-l^e g{}3fNqMt;_mXw5yl>R~5Y7l+k:%[=[@[l m׌+\\P\ʹɟMUMl7U6XM)lj(lt74I:73YG\NVyOAs#]^mE-SR~W]QC?9.Uj:Bu*q9.k%'ek]n.N{fԹ^ X]Q䘌,[nUy! _U| Ғg[m)`ʰVZYTo]^g_յ(ۆ+s[,+m/*]VSbz!=!!%I hЬp]pVj(͘pҍР3*UO)-T +U#>k$9Z*dR4gB%FQ"Da3œǠTȧऀe fAser\X(Q"aBNBa`0Va5'?@@g!  . +2UPPЌ>BN%Ր!Q^ (5V c118\x<8sj!ِa&`?S<<- #c"NcBZbLD려)>25!8hQ2TY#lo]"Rx2AGziG^֌W`ҍK>< y؝|ԓ<Zb(to!ax@8Yh_{3gHς@5=ueQw:<.˝y s9|+ M3\4V?v ntwQ|jc ^1yldh ^H%7p>S/w&`6Ϥxu:y©T͓)8/' P::ܠmkGgSIrp"3Hn5q IF.,מSHCB&-,*Z jk*TnW־W_{?y3f;L&9{{̙\ܝsPOu +}2Gt넍) 7&ק@&-$VٔppEfJ&Lp.LQM:gǍq9d;:&ܩ')M3'q`YcGf82w&FLQСjPFC7 +#˹1G4c8/ DC$@-0G }HIF~PwwWF ogywtS좲³U'lmgp>׊kZ8B UGZiln5uUu5b:u *;:6TuԓmIrK];qp] WG+%imh5ʚ|MDeMMdFLyWV_@c5:uz~}ȅ+ Bw[cJՀugN\P):*J_2xDk5HvW`jW*W;+֫Og{r +O{os^/_b9/Ǡgՙ*HC*԰:mIe4(KԪ9U)gFx=L6R!4 +yRrA|B.$Ip29@.)!#IųK"%H$>XBK"Ԑ扅"z"A<R4O$z^R }~oNx p3hedRs38ᤥ{ƙe3褧F+-b/ŚSL0L~ ˔qfgC ,bʷPfII7,hJ `9ZO_k~~PSخ-Q=}`WѲ=z]?>FB (PLGks_-K"UOan__,/%|׋h"߾,^ܵcdDO>+0;O +gxqGw)G}+/fq=Go- }}u!,Bq<..@ݽ0wy/H>(ٹyO>9#)0u-['sDN(ݜpc2p} +tmBb]=M1 X\c|(,Fގhhlp6wh. !y'Q0 |C=]݃D=MvV +NTͶLΞXNW h\+%Bj7CTiN UՈցlDRQO%-uT6j9uaG[0\b` k7)5+ʚjJ=/jtJ< w SWAƔ +WRuUdTyV8kԮv#iH  !' ?9$ ޜfH :åMgq82IKh3gIOO;VZf_*5` &ry&%gSB ,BTE*0KbLrTYc0P"5A^g0 ƫIw1XE*'*56YJ +Th9BnW {6B ,!k;D@*k%XЪRQQ+..j=Z<73a0)By=s~~''?]Q+6Jبb7Vʅpfx,MSahyLZ P"3eyբr;4?z?WigWO^\nOW~ al*jx|Zpf|t1~Y9 59+-#o/y x0ѫK h("/LE~8=]? =>œ[jZc7haj0ZCWC qyx%փˡK!_ u/&S]ܧw^{.pK}6ѭ*3J8 +8uS1ŵNPOBr"֏S\>tTεZ2$ h͟&&et;)3dJ1=I>yPJp"%c_~I|8"577{ZLU:$6Qm cmZRݢ5ZZv6 Zdu @\Kej!ęhMfVL$Ɔ*D.Þj;ɌvcUI+sgj;6(rL2\z[PJV^_:fR!Պt5UdiE3ZUH,W$W'sR(rړ5ҬJrbm8\ -I&c\D+>XoBO%9=^cl,,FszZ̩&&e1L'Ɛj1$g&g"Zl ќˌJO@QtiBz]A5"y6ְQo"k"X0 xC2/He_1&| DlF +zSb?E`O='3|O$ gK@g0/ +h =ܧ<̘< +n  y +jȝC8vQPy<e >aqƞ} +ۼrsŕ`3]h89O#θL@g=Vsc789͒##G?ßbͫXX $B"(XńyL `x qf ,X1?#{,\.%\>'”@p%QBH1jF)ԁ +A: + ;(/*_)\w@Jg-E@ C͞܁޿_>_>T<_j 0~l~t5(誙GVλw+c6| FʯC˄H( <$~Ճ%_4Kx~y~OcOwi=FhdOoO䖚0jho`3|-P{BznJxx%dCBh_ u/&S]ܧq*p\wTg:"!=qIk̍ +@@ލJZ;S\\t)+'hx\>cKG\{..CA]hj2:*;GN!R̩o}V?vA āE_KǾaHNqEj joan&Z%6vIim\$)ڴƥEk5/k4﫵fl@4f[,{(lTC07}3YkѼbH U]= *wwWǰV +vm4Q嘌e:=<6c[ t +]]Iͤ"BZma5yoWjҪ*g"RYPʯHÕO(C%疥P$Pm'ikv)ͥY%vKqb-%Z(Ld + sA|cAbi Y|~f>U\>k dxI\>1KˎdPYkIl0ZĚt 43C)Ɛ Xdh},*C Fsz".3*=G#6eu[K̈NdJ7K3OǤ$l^'M `X:j|$lMB9 gG3NZ/,ԋC U-ZVzޠRL/[Kf4 ളgϻk2f&0qGzZp_>gUU!^6N3b/ȨFU#&"z@g;ըXi؈=ZШ bFTyJ90'BQb0T R*S*Pn< )CPE>Q҈eT>=!&J!d"iN-jWPvaV mS1ɣxǡ`UrJ~v%7N,jDuTF#٩ztjMԓTD&=MLZ$Չ"ĜIj ,H}I)2-ELv DDX>vޞ{>/_ßeR eOCH阞 Nt`"pp61$8=꟨ +ǷN۝L3 f=ꠟny?^V_2TL]a5xA6pCB:ו&FuOscwΦ3)nINtz!=ADGrdƉ];aLW%)|"GIa(#N@w |8եvgmvPWDr:w~"l:[DA:[mS-[,`d3܎Ҏ|atI`R@k&Yn ] =f̀NK;L!7A &P qF,' 2z\gZj_?M\Ք7m%ԕ7m35BSRi擠R53 %gNNeINv +B9$!iNs$ABvݶR( miX$@KJvfHSd!;}{<ׁɣ}+s{ǖ@9ٷX6s%ضl"YZ)=6|1LMKo=M]i ̽/dv0w6P^򴕴Q6i%om-e)iak UM5Њޢ&j5 +, L W}JNg}r#Sa˫Q +j{-sOUj@U1:QdR1P'(wȇi! +k >~:X /j4- 5Z>#$y,Zjr54j%]gQy*J"N)4H^!gH"8EK螈$ I{2'd;H+,ϕH$RB!By"< !(ńAi&N!Q e')DiRMRч!Pg@ aT$9ɻ.fT;dN NVzJe&kbN'ՌTfaЬXCĝ u;n {CKofa<``_7^-޻<Xrk˱  -Fr/#gwGK mp n!Edp3444?3 bt~<5҃seo}2ټuFYZtLoyz~_XsZc6LfMq6rY#V͵܆7kn|`]6skߘ39]=1N.EM{TP3t8;:O'ΝL4N?#u>8I_g%4ڙc)?Nwt#)o(9<%q:}8q>L|A"P2!l +N8`|>{F9ۉ i싓g|n;񼎽c}vi 886W0zdc4dLX,od^@{ _W9sL zۻ }w1K";h_gNܮ^ݼȹw2 vpQ&wv\;;vtm|ӿ[;ɾm}[kf&VR/dkZ{A&Kos7[EOS׸FZywC'sy;*L,\#S+H+mQJu̦1MZIKVZVR檦j^B[z]ƢFl`P 6Vr8 ==vK]^VPPkJXkU[jWUPVBaRE=Sֹk]en^Rˏ\G` *Z⠬8VY+V:m,οs,+Yo]YoYc+:r+ +l+KWY +yR{#(bE+MKF(H7}@T<=E9`>؈4/x  "0贜tfZu,Fˢh5)Q+RETTIRʧR! \P"@r,8ȠȤHiHED 9C)"\21_"ЈIX8'sIOxxaBC_M,?w"hJ !B0/uPI J(;I e%*LnҐ2>D?;@ Lh 'A)d6'iY&ɜ$LŜO$^*{:MEEi"Qz$Z fBMNE;yWޞ2E=i<Bp2:{rEk1ex.AA}|k>h`)! .-=\0f>hh.if`CŞݳzpu+sBrlvҬ \ Bv3_~9uD<OBpgڪ s'!>vugw]fnHoAv+oէ~OX^MIGx~;l2%2K$F25=5 )dj2'W<`R+;BD6s &:7Hj?upl +6hBWNF9|"pxh8pq8pa( +u~41; +8"f"Pcpa1C.9$F>!u@b50sB;_DбNX8? g>7tɀu?>498'[EtU8'B"l="'ijY}ځ&[͊ڃdnԭm܅Z4ti;5,uw`ڗ'kWvpZTh35+- @ZӌUbj+ji\R*l` тUhl*Tj:8+h@Ѻh"3,wg9l@Ֆ#rMe1~qsy8|^U\=l[8,6\QlcUt0& +w?Fw:__U㳪˻˻gJ)F, I)r\&@k9=)@֙X1KFXX7FbGAFb\=M(OD. .GE. Ea1&@パsGAG "Ę-tX 8c`PKgQF FG|f9S8t"'ڋODd@:J :'tYGvla#tUH?'B"l="'ijY}ځ&[͊ڃdnԭm܅Z4ti;5,uw`ڗ'kWvpZTh35+- @ZӌUbj+ji\R*l` тUhl*T1pj:8+h@Ѻh"3,wg9l@ՖrMe)D,$ 3s@hkBrxs@ۄ;+%(܏&qks. >e*.6-f(6XLgLpA[ANu FQi5 i'-yx(C@B_FA(}IP]E̘3UF@w +%nM%`솂uk2ӫ߂m䊌M蒌E1p1RO݁)1½@@\y̝s~:D:@7,8+tµRSPJtR*1c]j[Ā'@=":&!YHlu\Af'hsi42 b CzMcAPU00iב2ZXJIm(j梩+Wͭ(r>+$DU2TRe&"׬4B_$ŗ喐,)Q86tED;uD;&Gk w +2ͶgyzT]8}&`[^HNGKek6g^9(*FIE4f1Qlz?R@ow)mLɊT&ڒI9#dܖ$$'fmIOetMڝfiSPZ&Mvf׿If{U)q(_'o=).k]¶dW&KlLڪFrhM1 [b6Gk?ۼ1V.%{́dbx[o>_V|ނx𸀅_*wۂy ⺱9c>m<8l° f@,Ʋb1+p]:p[Gwt?ua\ $..Kl`k8:Qrrp9YG5ih2Ca쭲_^4mE٭(['hȶ|  +RāB"a@J1X`#sP1llll>_ڧll-Y(f"dYP"43(%E Df\Ws$ r KxPI !M'T/H%01RPeϢח:x4f|<9Q'GU#!Pqpg/(z:xz4Ο#0]y7A]̷Գ[wC{4j oQz(C@B_FA(}IP]Eyo3g2֫4g2qG Pn),Tn(( ][&#Q`^[xrEff!5"r6ѣK2C`J=At{dHt w;}Ip1w`nlp㬔3 NKWOI@m~6I)rAt +n.4snһM:|M]?|:L;wTBw,=g*g PD::HrHv{Vw۵ o{>f'hsi42 b CzMcAPU00iב2ZXJIm(j梩+Wͭ(r>+$DU2TRe&"׬4B_$ŗ喐,)Q86tED;uD;&Gk w +2ͶgyzT]8}mydydyiTjs敓ҡbtiT]NcEIn85rI'@ D՝ّ +.eTGAGgjfw\>-9:] eQ pVZtB"X%,z1o3HbLFY :*Q!#&vĆX$ !˘ ISsC{$ѫK<+t߿$_NB~; qMW흎KEOF%"o).)8t17ozFK6ZOPM˻T/Lv°݊z3ێ/O+NBxq^#<.yic:l;]^\^/ VJ[;g`%=k9cv52٭Sf!MTIX/7N@h6QSkc Wی^:4  +G1 +.6@.]<!=u^CEH3g!dvN쎂kooZ.;@viۡ%A;O5>T~p| ]ߪ ]Eػ-g;l6Ոv}>֭a\ks(n[TܝJ\feߴe:q[vۆ-ʷm،jz]Yֵ=@-k6aͫ)6T޼+ƍqn^ѹi嗥_5o d%WI)96,[adpk0KqE떸.ZװR~5Y%<寮_9d1!oբFUk$_Y,HYL -XQC]^-gB"bPfU մr*=-4i*׏Sɮˮ/˪s-^#ZTVڒZ6RFuImVui YFCM"̪bBFcafU$NzEAner\g+9eyreJr1a*^-ͧ)&QK+t03p~1fvNzѴ>cl5GO=֒)xֳHw}Ճ4'M>Df]'Ȼ[L_*?#җ{ӟs~MS#'z}ʄzuoCsJ/Lzz~;B=fi vSz'!F<8 GqwR{aLj:l^\^/ VJ[;g?oCpw7852٭Sf!MTIX/7N@h6QSkc Wی:4 2:pWF9b]>l\:x8˅CzJ꼜;ݯ틆yCNN통9 ު9ު!ym;~x5u dCB6@@$ ZLӣE"t--(njk[jw393ɼwɋt;~!Njr]ҹi}wt3oko%aN`$ġ$~jαESꠣ*Ȥާ +ivB `f 潱D̨=3Ʒ߸};E9'FIchd t8Ǻ9p죝!^x#DÝX:B X|$}DAL/`hzj}VHu_KQUok7YeOKע栊&?q>*D~:5\ygcPYWYJ|nJ>YYI[]k([-/P8E^;%*jr4lMD<Sh ])r +7'WXou/h(pY +k z*uU.֞$AҒDI'DZ.bN"&=1Lc3xx1111k$Z[/&3KǧvsQ+xN|I'% 9E,aTLbJFB$Y'E2)]34=IOA_:9OtU\:e1Y2uRFrl-lL! t4 [Lm/o4қWszZ³&K6`Ȟݭ-_-|WVT)EM ڃUzˑ߹4ABs!_[9'7:7'7Ct=GLG_r_[/y%.4у/̔~n3?5C\1tq[ /1.07?1b~8 0B>}AfH/f,13Wҗv~]X_v0M]tf4ggDN])CHO,qرTQ䣹чG``I|pvqV%Bs¬.{==»:i-s0gsJœ:p'щCI5$ԜcUAG'U)ؑI5dnJ$Gtx +2;'qf41fzBWUgFV8`?Ou}"D( slX^"G?}s>5docvs PGHː:,mV\OM +k!m&iZT's^?Qe\Ǣfv+l *pJ= |@ɞz_M"k#+ik ew%uk57۽DEMfh{ +m!k=En[#Q&7@aսei(U򜕸|G5U`tԽr2mRV +Zjް,.쨚_&v[/* +_CbZN(rDLD +D%! +J:qXO_~Hi?R RJRIXr@pdbeJDaIBg(X$XU"!ye0oE UqAx.5.;&,,6bG͎EŊv34Ǥj=gq1VڃJ||qCâhzX"']W~_c#Y)2Ĭ!F-1'3Lc3xxQLLLh111kŔ>OlgNL3g~98͜"@@ b4bJS?'E61T>Ƙ R eP"YrdHfH!ƕVG>Ꮟ+xokⓇ~5qQ{E u=;dLȾ+>mqAPqdQZzNm*#of d"j{{~d:Tvf&Go?濛ϟ >\fjf>j3اWg6 h՟(KzJgO9êQ֗z5>2d> @A~'~03L4 +L1` g{-M9`FrR^YNjjg &3rٟ5r9_/cݻCLݾ;װ/aɐܟnGi[>f]~n?֏]L27:}sޤJ-\; zZ +:"ԯb&y1NH<9oÓ>6j4ä爻Mxtt}nUnr59{Pbr.@r>JNw1kluou&NZbc39"mc%-eqMIZ׈hWӄ[HERenl iأk.hv[75{ʬk(S.VU_BJYW\/!SaPBLzMQezMQV_ZUPAR_ng\[ 䲜R%fyxI%%zF񻲌.#d (HO)((0̎]M(*ΐab Q^\l4x19!W5xQz%}t +,E%2#5(BaM3Su] xaD@[ S%)a7;PmxܞIQp8%8֤-_KMFΉHD$Ĥ&|揥>^, ,H$ANH,A"{8;BD"֝X~I|_J<ΒqKpAq̥bfHLb,I'dЬ= h FIDOw- aAh Eqt\=5b- Coaj bVBZ +z%5b٭rҲVXA-<SB9B2 +@t(Ћ=iP' x̑{00HٲeW-lٲ yݖy0w1#79M)PʱE|o΢}lr1Al܇ 2>lZoO 7HʃBH + dOhGۄ̱ +Γ7pg_N^N(įB^N?U㽞z3эg6g'6M{ &ߌoNmjrω ŷՋ(=ԳP<#!?(By!owxQf BV03CxИx0&G@S7&IXxxMDf9+2l2~s u?vo-5 ~H.CbRZݻSbnuunvX?vD7:}0y8+p7i)Prp G +;]:ŜƌO:{;<@^&{zS:Ӥ;w:upكJgNtuG'8 b&19B;L hsX3:B^g@{+ sE9,ƴ7JM-[ZE-p[Eќ O\@FTG\6n, 7kYPR]jKVY_TCPT*P :/(2,$" /e9$JJKK& ;we]F^QbRBQ&Q!Q|aF|3QT!5`<؀irbr9 8':[C*JΉkJ*,jY: *3-JdFj&Q.ԦD@ڮMIZ0M" \Є۔0Uz2^M5Fsd_vMR*"u&#YUrrkbdFxJ6<)&mk=ܼ=B yrsw^Yh*AC",xCȝ$ @ nU5NJxsPED.%AAKgtp@tF gtuuk~NLk[}?䥢  +z*9WCqaqOUxlFɤB*dRJ%$$gM/ `B`a`HևP2 gH<\y?\.#p\=l6U﯐E\`-kzϨL0'[)Apm(dш!ZYȬC& K 8zVq;a=`0~? Ƨb֊&mE~z}&z_,:0-b1%|i%$KzdxDo` RȠWBFmΤAiu\2D hdC,C$R9WWcS%_Y|? ?_ [e/Bߏ%~-{7(}&B\U:Uoθ7s%_fR|Fdz(O&Ry顕$Y~KݳM"FXcI^$JQgFz,7OooC7-o) t(=nt趠k&H?bBv0 Z_wR[_(ݽhp#}{o'\uݦ jkňnq7P>pl D_=ҬtԢtf% %tl`t4AZ\q 5X4 4nmGո֯j*#sU9$9>1Av>0d47Dz8i59qGT0\cX-tԧ8 + eZ3@(gZ:ud98Kَo5}Y{KWTEYSKeFu]Յ${2p.* +A&ZWlI֔m-!>+(֔l)P4iѮśV幭ܵiK΍NtpUavNe +6`1)).RoJ-[@-6gQZey^fytmlXaF:Krm [Ym}2{M"lY2qv/f,H_b}ʆXBR̅+fb̿,X65-%sMK3ex=G.ARH +SG)!aArH)Br.RRMMxy3NbRPٌ +I?*TQɤi% K,H1H (1"^0")B€"%557e/ =D/〸xrC! `A伯z,zzhX+88xF(&` &8.!FY4bȬB2yI4Τ`\N@g0߫@O񩘵wۨFsd_xB_2NL {?:q@z -_mZ .IcD0/Q'8C2蕐Q3iPZUAIz)dC4+bѹfB,+w>8F_ߏ. !I *SzۉZ$FΓ5W&g8h +wkUkܒPȃS_UrpSK'܃ݹ{,Gg) QR㍽ƾ:kow2k}̨.^2dQF^vé+JB] T39M&9cc0*$E¢klpb;%{;^⻹+طZ x&g{0̼ު>P+rCTP܅_yn@yWS'1-xeE yK6/Qh1Qbg+uqynD.8܅n;+lvlx j@F|WmSֈUPX4 +__|( ȳ[5bók+̭EC֔T>//p}YYT[SRϩ.v~a-H̵ϭ,."g}gH(TB%45=6VňU+j} L\S4wR4r1W*dDZL:R?(D4$bb$'H(Xp\BL + !̏,!H 8!w"3<Fˎ9Qp"fVxX, 1L "G*&&dG1th*O!:K (Y+ub(-QPJ< 2'¨D!ʬh(,(E{?BP(c )U g`g[t " B(3HPf CAۛă,&_]礪ii%-%!AF=Ӣ@YZ)13W8/7^޷*_ߛz>Oߣ?)͑?!{32CfvoƤz}wzxugG /nz~3; ٍ,ْ'ײH=ѕ 1˙23^{x>gt(=4/C"A9 ٴ wXH9mɥnuҌbnHŃo7 K\#M{WL!H/N!uД &.0#>0/ 08; 'H8ۈ:@N}S; mF!?8E;td f&БD< ?%uZԁcb=OiC}\4v|]ZlVݶ>v:Mֵܭ5-bQj6}1'a q@aӀaaug쮵Eokz._3fi?^KVX>л竺nke(՝+Wؾ +mUrڕYVTe+K ,G!-FU-mV-ZK~qOu^iYP^R5YSttL)JAS)x +JP8UHQj=1NMGzxo/UJ9 VF~@-J&TJRHT"PpboQb$C*?"`bq 0)/0?jGJ"CˋX ~.;"\ DÉ pXblfd0L&7q>btFX Ģ铊FM**~?.)A 0CS☐9F$ +QfEGaG))WBN@荽MZ_@G9;ۢNATGn,FA2,*]~F$d11ϧrzvH'] ecҦPB}>bt67%Ε=,iW#TYs'ތIhI#δrH=FLlɓkY_ JLKYы_/yx73:`ꗡ hplZg,6nuҌXH 0v6=&N&Aa#a۱c}wNÉn&鑶KW d!gf>ӈ7v rb&ڢ`\?It!+2#.5.f}LHaCQ Cgb3+氈ӳXĩ Npr#8B9~-d!#-53xPMZ Q`%2sC4!:0r13 + BT4opҾݾ xƛ'&m1Q Hm464uCGT #Ct]uC~x@ WtQ#U{È9*_ݷVk롫qu3m Tz\JSú*pUE f;-n{;U9dϊ&HYkc[,;] t;;ax+sRmkT[5m-$< +Z[ d\|E T7sMFǮ֦=k];L\ Ӱ*^*hrRZM +b,h4J0רY`JXx>_RĤ*>6Z.{T23%I֕L/|$E%0 hY|m$x}!h\aEDICBFb jP&"!?j"0>ظ0~yOEKυI |nlp\U9FOTzz:Î>aiX,ֆJURTp*tv%$fE`3R^&J7.)0H|DIJd)0d TaD/+0@,eAdKIV[ϜMaf,$ؤX" y&(A@&!(|oѲ s1VE& (0kl-(5@vVnEŷ',=~Q} ~,Z|_4__?lGK!}VBYRF|Z?)R=򗏊iJ!_+^D<"FS& B _y^*_[;sBɗo007Qn[!o[%Oo!ːX>iE>Vw-՜8r#>}KĝK9/Z`s?\0zb8 Y9o^sYΚagaY7NE,fS'M['`73˄T̈kWbr,3Q#k.t.!lst"0b^'X'g3VagAb1b":'6A^B£oml@][] 6xS_(3'[(S)BN2zT*`hҌ*50(UkSjVAf<ԗ\Q+!0%_R0REU&Fo(\LdgJ.+]_9DJ`FDCϓ#A AB#D$("J"2QD0 Q%Dalęqa"sa<~Rx<}}<\.$tÁxcOX;&6{}m(RT*U?J#v"QPd\,g"Lo\R`ډ)))?^?))))kS`G`5!jXE}&t%y,l)j1"s ),|#T<_ZsB|9(#cb +s1ٯﯦ4$PЋuWwΔDz +: +`A] qFGC撄 r,sfOs>>|ޟrN\/WDC"$XE"9:zDz!Ȇ|2eRszjγ/ÝOXar?ջ a[aq>3Z#O#$\ayy('p߆BMzz9 +y ' 2u?0/B1/`z~;zv' 21v#,9r-ӫ'  УKb%1SOW3.hztK^ =8{Y?̝3F{ z|a7{}Dz|h:7Ny~ĵސ^.n~zryB.v.h8P_|QQ߿=(-:sDdtgY=!ީ&NttP(VY'wkuCV>xJ@> ts=6Ӯa71G.F>QHmj^X/I_,o)oRmDiU{@=U(+Mȵ DdM廕2ycINԼZd!5bBiE5iuj*SVSI7HT!)Uyry9F٥~N^),XUBx^(dWq|(( 0P=&^.i 4xx|";y KՉU)rs919\Pt"&ȒfYwmSKղ]m4K3$:R!S2,R%dlU&D)RʓUEm'(@dR &IdcZ<ͤO39:u$.%JDkEĆ +CxB3F%P !NA @4q+9~3`0hbz@\ aA|Uxthh"ڻ/ ]DghE7htroE}g0w;vV~z|7Oah'Aԁ4Ѝ>^f]]\ƣ.\w' 9!\ht5͓G9wԋ9"4awʙ#"Ӈ=0? "H!QA!!!AwBC ݭAW DlA[ -#7!mZ]F{:G.F>AHjs,ۤj)jVlRoDiU{@=U(+MȵYSyR[h*7GXR/o(.5"/ũju$I]q5(NSB3::i5jAPCR*@ɕ堤yyy3;sANL2ȁɲA;Y0y]2BR{ RۨH%i' gX$pPD K $fO+|0LåeS:8 rX8Spql6܃x+^,J,{,OjrI2d(1<< ט9 +N#G)`4a״Fh4{.LsU^tBy>U~iܣUP:6XT W H4W +WCp8^>o] ~xIJy> |xo㤯H^[I~/ϣ/B~\3: .D^X&ڍZЇ C 1K,2f 77!a|["ŌC{/b!%Ww^FIF@9ً1v#wߎ~cnEH0O"IbOnuK?FǽŏzMz=A)-©{WXpf[\։{K:;un_b.n΅A8%tv]+F:H4k߅ஞjw5w%xR[5ة}RE Ԭ\hV7֨kP&uPS*k^@1 ƴ t|ۏ]:}TivDkFNVlN'CN5}7}h<h:`4kfN|GP[8n՚}qGY+ԕyf"vaub&T]Ta*-GM{+ҪSI,rbMTfcUf.OZQPJJy~iJYaqkeyCi>b"cin$ǩ}%y{6d!B36Ewr6ͦaOnE;v۝U8iQ̢ +%lw"DIyyDf\R/fm朵ٙdDN' ؙ3qάJJJ{1kVoKٶz[vU[S[Vn1llYѩ噆-2_]Z)se!sI7l̴>li:"͒$Ӳu)IiúT I}fXIY2aY2θj󦍟$1,^7C$Sצ~iuGW%"mq|!P@ yS2dZ"iES&[ +y#mT{Ѵ3J,G(Fʋ%R +x3JN>`[`R)qpp9,J)886 qXv/%=^^^'5rm9czRMg2gQ3.袋?Q1u4r&Az%p!4r +4Fsط3Z.Phl*.hܣUP:x + *a }Cz9^퉾;{f8J˹М,f[+}|gɽXG|Y# FJG1_ bw|z#dbdlx>* cHT8`Z1K8 .8ù8PCꄄy΍024;sߎ~#nEH0O"IbOnuh?F{/Z7þ(#H"E8uj=."Y.D=I%z:J/h1Bksa?hgή u0@_gp#7wB]n "i vE-9etT.5Uv盂5Tdgy<t t|k?*wpҮ@ h98ٜ:$O͇jn*xti4ҏR]?p쏫5⎠=1 WWǩ+E +SMnTUZ2VU)ZY żX,\(ԕҔ}$DbCIScN8s2=W sp1nZr5rn&oѨ[ ¡#*ei4XIU^wuWuka+Qau cRZk)jQR(ffLjT%Qi=C\DTH.>@]_VOI:Һ,JZBV -ͬ):MTaWq&ʌʢ* +s%XAVn(S7)-ƍ Sie2%T_6$\bdsNZs. ŔS01F$Cn. cK2$LW7Dž%K7),H/)Я-`^R{1b/ K&@ro{CQr5} @dn\&u B=nL*wRhQIİkDbz~H8`-침``^z@@ǧ;x<qh@} . 8f66 x#-y<<蹳As/*77EbL0pCv/(_E*=!JiH E8 4<v#2 ݜר`J@YܷPA)mdi`4F%ş.f(.+* ņq!C~0 A[ +sΈM$ʞߍWLKyq;Q69 y>Tjt%by5!25O@&bPQɉ%2drlnKAl^.y[2'Ӝq/Gq32ijQgu# gOou8Hd($x0ң8;cg~/?Nr/X]t߽ףIb$wESj+:xOX7ޫhfM1n_n]ҺyQ9_P0C#miDg3gڙH"xK $QNG̸q*oa'Bg\ {,=tR>.\< p(t0p@0'ѹA3f? pz +^ims7AS Z 8jpQǾ P~R)8?C?~C|ڿ/Kk.?ޝo;p{;9nv_޾mJώͻ3wYeG[wڲygSfmvu4Jdi{ci[s&v6V"c{}ka+Qau 3`F KfMr7W5֨jPsUQNSy# +KQv}Y='J벬2+k Y-67QY_eeT*3*+̕ cQZd*Ohb(O7NZ R}٬R:kJRr9k͹SNk$m 95F,.`lc\KkV3 3k +SyI eW$jrH"y!#2 W GRȽW>^ "Wt32y!RJuT<Ѣa׈Hbp~"Z"sQB)/8O%Oϥwx<́6\.q\x+l-5l6G[=hyxsgww_Tnnnb-*&` &D~D?@:(:@q5V# `0FsNT4*xAhE.QF,~!9l.PEIq'+܏ +eAZŁ”<(R%"dH=ǵ=ŢCJT<Z_{>tL'}=MD Xrt9rdnjc8dN:/F^v"I=IpV7h: x2J<w@Fyc,}рq}݈qpz4IεhJ?]r0qEƍD){ͬn݌Z/.iiݼ/EvC#EC4jF;c Z; Rc`H5tƩpoa'Bg\;_=>JgxJXs}$# +|8pp0¡ [OMy7d%$$!A"iݍ DCxA @VUSV[=탂w^λSna~e&Lg߳糟l~ɸL@tu2>Xf pi<<8pHĿ&pD8tsp@Ý>O'Rx_ OxO :1ƆcF4c>-fħF{~G}Jh7ګ|چ +]PGks 'rvq tcl{}D֞Zzmݶ}D=n"kO^."[DɲenCT$BgʻQMe{< kvַhM W^KJQV +͸-5Dfw3oyI&\QSeSM! k4V56T6P)/w::f[WYGQ W[A-l6[ݶ] ˂UVJK՜2J:\;+%D.\صQȳ;_-`^gmlZ7Z:7Y\RkyW&;ScbbbTVRVKɗjZBlZ:ӯ2r%N Uu7K_31 ?dII_og>Ay}zDY2}=uεO<$ 'fZ_'^諏RD_^Ms +x0ݽ޻ ;ݙL&I! o_J +bb^ޭ?%`n_t|Ġ&8 ~vkgEO2+||4G9'7 W\L7.G@AF"0م#G A1g?gT=:!|`,āXo|?hl8p] A-`d@8bF|*awԧČix:Ϸ.m5p u{P>О~"`g@t7s0~*a줎09Bˑע#'@ZChС!i C`=jo'rC5. S 9cz*I,;mWܾ6-n߷;Sivcޅ^j#;Y쵭 sGMZL-fck bl5 -G)@Ɩ&CsM9UTh8XNwU +9PRʪ/=B֩YWY]%PFMA5*ҁBPeF +t2*) +RzE^Ez< R_VWJg_InIZu {LEbОBsXJ-0Li +،a9kJ϶lrAvcbʥJd k9lʰ@ fN ti19{mY)YLHWfHV(r$_*ߟ9*K'C*$ @{J[U0Rb`3PL32'Ғ$nc#7T"T="13JX$XB#tC1yoEQf\3/# RÈkE3ވǛMc{3ffo*6'< Ox(X:acP "j !1:!"}$pE 䱇c D]r$󣃄*&X䖨DW1z:DVUrvTfaCVkXq0Vl+{V[u*$1TJa9CB$N ""½0z$l?_>yO> =;$o{gۙaޅ4=NnS26ѫ`M*/|7A^,ǃ/ ?~\J~2Ab<仅8ȷoh}};[qgqmuf,l6N +Klfcďfcވqz,FEDkݫQW|Xb1FDZ 'PDQ8k " '"n]|} sascc™0Z™szFH  G 7#z5]C⃮@.&! {ag '>twt:nM㧂NjA'tq-:rB5822tLǠ57p 9Q_۩kv$Ý+ }jn_o[۝avwXZ1vkwcYdG,Ve-S[m +h1UIM cKeVFPvsyikCvSPc9U)`CI(`C:j2ja%ZQSPMtTQe̯aJJ^W^n*/ϥ*嗥W[Vb)]SWl&-2YA{ +E0c!(P3>lf({tf8gR y9N r1IfR%[2AVNs5Ŝ I6eX L3nqcS:δH˘j4fO*B"DR ߟQ(JTJ?L*F +9jPR_UJ7L%m(Jm +?'Ғ$nc6T"T="13JX$XB#tC1yoEQf\3/# RÈkE3ވǛMc{3ffo*6'?EqoafsaC.5d@NanS.A`` EN(r$lUv4CUzGt +%,dAJvC*)R=-[bث,Rơh4F3)+daʍfrQ*#皬kY[&XnG "e<-yK1JRug.Q!_IPX~xp=4?9\)~9%zLe oŋru#g>gOwNpx3{ۙ-w[EogC73!"t貭˶- z*Ĥ`:;ڒ` $Wp_&oO6^> + ;S~Dx(x~?3?aOb4X ?]??;~۾5fv03Z#U[j59 R*ܱ+ޤF6rPw.yl w{n]0r7f^=x.΍NwR +`z;Z0ftU?#vVF \ivc+^o0=#e^:2ibzꆹxZpJ"Gwur}-eu|iRi;8)7Ӡq &WTKuuVL:wD55DRhmjJkj`r@b}Q ^B] +Z} ^A|D} ڢ*S5UEUTi +TWWh*HUUVpOAlEnYlE^ّr]i9Ҝc$ J2{X6 XvQTqNFAdQ:*hQ& =? ߔTD^x^.HwXL M I!u(;97,;1 DPV` `fbށLP|:t 6x4 聴x8ƦOդ}jt$o_r ID{ v'D&Ѯi]G'FMsڿi"wŅ=7!J3vWb45={b'D$<;2hkU)!Pd)Cx{{C8AEfa/BNbQ$ s8"Q kJh7GJ皬{1 O).Åx\Y;Lոin=qLP`c1m!E̠\ `0,aC +;B  3>J66ٰaƚy+YYSBPZj]YZZ+ uEtA(,ZCq@*RI9ҕ )\laPJFh4|lRޮ,52y*7.BTGEkj{ee%v"r^V\ 9A*!_w !_(a@A +:/ɸvY}9Ev!P0QfݳOC C=!_zfw3~.ٟf L +'EofB"t貭˶- ]멐d2t3ɭG旉 Mǁ—VAM`/F)͏ +~ |.;~۾5fv032U[j&|C3xrC}<=ZwJ5f| >\;vśhFw%O^nOԭ NӀt'5ء {*mFW[n8rJW=ge8r@AopٍT)7LO $W72̅S9b4+k)+WL@IP{ $hmt…Z+^:W9wIP&8h;Zj\-R^mqCXmRc~]RCimR}U LPH/#K+]A/6=V/>P[TeJ[]\ȴJcIâӓ$J&M*QP|{G_7f"1-H8%"cO7.|yрzA\. rhqC"r3jl-'RǹDѻ$̵3 #!WOO7h;}<Ԉ+'>OCZO /0Sj9ntL& xi>:#鰁HAe#99?ou3paр=׺5r7_k_b!ǿ۫ +97rZz{xvB4b615 *̡Z:AC=vzݳqwMd;wm n@ϵ힆/w{Ǻm\_n{V"u_l!rm[Źu /Vo)ZtjZ+ݲjS5J6JH6kTX]Mh +UUUpEŪE+<+IVPYX[ɫqxjr\ˉr9I>˲,ͭ&+ *:Y]YV5UQLVI[TA)$//fx9 \sJ-)GRWvy;Y]P0ם[zABw^q3kI"xN$P(d FZMTF͊Q*F&*jF=>Vjb\N^~XdҰ(2ɸIaa*14GǷ}jD$% " + "#`E(}p>whqy|=h \.q9!sAtt4 W(Djf!(z=^|{ذ,քP &`QDu`GGDXu $cաB`19`0 cbYtJIq`> %Q4*VSx,FG*ԵZ6RAj0JÄ5ȁz]1XL1baRL1,K<+ t? vKx. ^ ~,~ٗ.{;uptϐ6?Q᧲=Hnpmt٫ ˞4ہ 9ڰf ^M7}o+/=SɘA^N=NAt))uM=yr33#!:Rqo\wZ2d7n @ڒah_M!wT_j K6"NUDt-@V;5[ ]MV& XI:%p7&Һ$̵3 #!WOO7N'NC4$ /^:ar$l9騙L@t |tą#FLaօH٫</!}'xݭvgVQQ;w@(j(V]]k=j[w]p^6 +8vw=䗙Wr:enJk{EϪŠն"תuG{].9|*R)i4VMjT +ArJaO-R*BfN+X&(/8%b*iXW,R(i0,% b qszO@EDx3 /ӊ8LtrXIIa3!:#v6b,FB)L&x9yD 'FON0hc h=%9hO")tP̚WJ* +2 2_G^t*CfB˅t<(S`Bk4 +I)D"H$kƬ e࿐L3TV0$s|9ɡ2ӂ,F5rN*Q2Oc,&FA YJȢ5`KSA PQPF嚔z>b\ֱ]׉+<[wޒ>ѕw.X&eb9bqu>N0dқ$ y2{>٭7 zzkjOn.ESzt}!`3 {x%./ X{[{*6yk4uu7oL_#QNT^단+յj|mUZZ"5D^ J@KuKasULM-MfQ.gHw#޺zWQ_gu뜱ԮqʯWkV٪#*k*ˉV{*ܥxUO3.w:+mծrJkBB{^yQZ](gXL0,t: UCS( G(V#9R*`ZQ#Gle( +!ΓIIKEdzIY' b qsg@ of%ӆ8p9%㰙NÚ2#6Śf1bM)2dFa1^Nx 'FON0hc h=%9hO")tPT>%啢RB*2 2~=AI"oDCthejyY˅tϨ ZyThMzM$D"^3f}g\-gZO,?iƙa6 ^TaI +14$L 9@F96lB=A1d+!րA-&AJ5 d(l2O C0 V:QW 1 +w/>﯑kÏ-x[Rٿ#IM,%I{v;w:HPO&Bk8nzj~ ϼ $!v;;άBބŶZ-GqY[yn7aⰙ$O5 +fpl-^,f0d2b  B0;ބG:IAAAXpwΚՀ灙Q$` R/QHߟ`086s??ʷ|˷|˷#J)`:9 ccp6`e*@y'b"<cYofw*6kD@VH6`С:.[_r$EHx HXǒNqj!)tR,A+f$jC:%#AЇbUR JVg~rgϜW}qw`pMbZKZ&-1swC~wel 5Zr3Ft17z ^{Dz4(x2<ꇹ$kﯾ$.ǻ&"$fHK3K{|qGu!ƽ9enuGZsz„q}BOasКw=in<6M+g\FOC̎z7sJGHKQ:gzDǹ0IkjH˙!bk.5I5Dչj +-0q\Sjg{լ/#hSS{5zT:Ցҩ*5?r5|8 +1Y8i0!`1pߣ1O~+p# 8G;@C+CTlkOUڎsXFvQk#;YuaVOL5VZڪ[`5(a֪ܖJZ99-M;!e7W4f7W6f5<+Gd65fo} ]6RTC^SXRLS]TQm$rOeFe}lϣ@TTJ-˫H+S(uJ-5KL%Rخbs X K)E,4: wٌ9dR +rm;s +\;2aۭY¬ 6 쟹YiRg4gw2m[2RsQ z"B W0D)bJ.g(B,B*Hdj4P%dr,4T"L B\L)[,#Ξ(ՑIk<XZ^$" u7R$xj|@(Z|I|.q$>(p٫<Ⱉo+!zY!$j{]։SWa`{f[&YMĈܧȍr}DO@riV >*q298,A>97l 1簫99N_5bv _w~`?%ᯚ_z}]b6Bqz$ FwyLI0.Yd@BH}7{d Lb$O6ک'G>ҽ@;9XOktky9k⹸t0,x9 y><(Z#gay:{r'0Pq/Bzy>VPÞpȿ)܊@I? ܻƯ/ݽ2;2ֵҢ]3Ԍ^ ь\qTÝ!NP.;A;* Y;.R_u@n pP+{iD`RO{@Z7Nடq"rx+]mW+-~ Egr/KGKG RA퐎35pgF!+i?h>`9`:,?*csbMv{+ myVokim2![vtv%#4oI5j45@zz֙pjj,X\԰&e{^]JCqMJ}E56\_BU J+%v+P*TSX$""YU~9(`E(",YyRLʴĬNҥDk2 Foi@<|'f2!^&Nf7x x |/;D|,= Øӈ3+ wc"FC{#~NC"bLFMg͗Ni5*{y ZɘkU +[RJNPgxYTJ9WE1Rȥυ!IHt3&pL*fv_*I`#H$"$ A69D"F$P Eg<~}@n~p|>D +8{!x-nq[," ![4H]YHY|@GsaQzp8=7_NlSrL Cf̽.kͪU65-e%;EvmB",H̥GIz/)&gi^:OÓ??MGik'\;.ɡPSO098u#ӑHG!ډ(=icp~{1tW_GF]&G^g%{>=%Ŵ F@ɝHh/h=_|;4o4}kHH/ȁO\s w^7C.8!.q{i5!aKuj}QmJC)$ZRTW\XTEHR\[T J)dX]PXUTPYȬ*RY _QPJ+/ϥ-,<[S +BkHe%e%Jsm:qj"HB r:3;:@p$$$r +\;x((kj<pj?dkAHUu:UJzMd rF:e:Pq-QN]qȥ)&FVM'ڊʬ*tU}Qi!@]+̔֕`*HAFLfme*[Sjt(%\2JL `uq~ њ"#FQ@GņYmEV9X ׸tKhUᗅN+,9f%n[ҌQlƴ\[-Wca!Ӏe+ѾS>#/#/ˤ/̷f.Yt6*2O!0+" +]}3*@.Q2-H.d"e>7 r 9XKCKnJDN"R $ "@<r>u"!PͦCEfӅ͜m|CMtfVqgJ8o3}(i3ggL=y͞///sb~wyzz)YbfSL1SbA^86aC:TiB(2LiBx6?*XY}k`0 cnrP[L}K:hND O%bR\tRlB(!+^ y&j o:{Poޏ= Ƞ=C~G8M'Hb_#}7dxgCI@Q}Y Ǽ'#gIFpbz?wIɔv%MͣD $IDJ/$`#}q?##^n8`Oo<5Of Ōs=#[c]m1GCW+N`o">j=D=E_ҢDut$Ls$Э7ipUD:hT{ŽS.MḶ*Mj@p q5'rT'rDIr|XoF.Vкt^Oa(Aۯta#;c8h~ԩB)5}:mw:M G[Cj hۿ7wpDgf pv >ۇۛ6s }D3n{J='FwU,kV1SL1)B}Џ1Q0 A` "s `0 P[L}K:hND db^!NӐ(dkV\QX@|(^c%X|β$^e]%@4ًTˮϐO_ٵ۾(mZ<e6A Eu@B׃*~BϥCPfs񸡤ߙepBB%4;TM?lv` f- +8V + + +ZQL&sY1eE]tEoP0&KZjPb͌f=Cdz$p3=n&Aѝ5D Gꇛ߬逿}4 + + Bjj2J4v5U4z%gU+ɀ1Bϒ01{xw/%4@\ID̷'$Շq/ `_/"7ίy]?+qv31k}\9:XRyǣyx}>=]D>>jA k}>"njI]x_=xD-pHw:tz_$~}jJ'F`Q}[y#CJ!ؠ +s9쒸9ùtk!Ӵ*j/s8-Cx2W[? +0;Mmx}^Ɓ־^<󀃒cuPwz =]xƞ.Cw#ݶn;@mC:]ouکvuԵZVjRZ r8@fb^\5^Sd+l@54ϳUvʈ +Bj{])dBբެ5"̵5&\2j*Jj[L%*B0T斗xU昭e +Юr-bTjsifm&sF۟L^7,GͦB&C%ؒg(4lؾŐ~]&)-RPLC*e8.g,\Mᡒ˖R&]R +)%Fe0$J"`XR+&-\B$ O"D&\va")OyPB1{]$g ʟP#%s)@8/\n :1*JEDP +f*8LI +)Z CY1"(] 12W!{7n_o<=*ȅ&7Kg'_=yA65%ϣs`?'~Ḱuo=ff%xfwd6"~:6O^D_OMdO&31ODzH~-39lRSY㻙YGw֐zx;{F̏2x?/ƕ|$P]U%D1rss$ +؀$$zwNb'qlq7Sv3wn2]9DL|f~޾{߮3ڑ4"1\ÝU};-з7Szz#0;OMגhM($0y#=b#>l=d< 1@^w{.$&%> u&DF܍ӱ'cTk1‰ Gkt,6JWX_aҐwq,84ѺpdAY3̋ot+$N3,rK=s "##{ =z{t|4@D MGЀp`@i1e|*^3ӷP=9w"|={(C5\g_Q7؝Eꭧrv7t:uvۉ:ڈ5myՔr۽mo+RVՒVݲL(2Ƭ +TrP}Y=(UW/-%U`K!"^nJ[+Q$ '܁po.ssLF l*+%\D((rR)Bm*A}\+$1=9 lg}~߇nnGy] LG#p3p#ۙky}|rFV@r%R VЩU, +d:BiU4yW(!~PR*`H!QRNF3`O&E*-;XHI,b"񒈅"r& +( @Phss \J|6hϲ<wIȠ`="98Hڜ$DFgQ?{IaX630r}L把XV cY#G8ޞ`@l䈼;#oAV78J qƟ[3 + H]?A~:~XXXXH+m h +(H-$\Qf0 Fƿ,b?r)noTI"RUPH"zfL5vdjd%%6 J1BPVY!(=Md& u?*M˟M?gfSO}'̋3/f ͦ/gRӫsS@y>{t˩5tdo‹'kesk(=~ztղ>x?/{i()oM'x7HL:pgoط7Sh= HYdfl%*@R:~XXXXH+g!*x#pE%E$~EI0J^Yfcۍ8K2ɡ8=roJȪ0$Űecο[ Y';de', +yg jIHط;kJ +.T޺ kcP8'da0ys>s ׁ^'xplb;I-Mߠ?upg)SN=[Xٓwḙ3 >c7;03PtHBk)ǸfBOON?M45~qᯏ)0a?>#py`5߉ħU^܋t;q~ y6Gir$aT pajc7q\kD'W\W!h<ECyp1$6sps֘n Ab.#gB9 n܆C!7B` tD{]=c]ג.iٗ@bw]F G5nHsٯPEv2ԫW*Ad`r`Z' ߧ ۫XXrGRwڄRfoڽA_c6w]9=[Emk$:ݵSw}Y۞UFdꬦej3״ڪW@ڪZ MY-2M-k#qh*kh*ohW +PRG^_ڴL bXuQ5(HʟSYZj**I*Ŕ,ϙc#}n,sg%٘RSQlLۋ.EkܶBSI)*$ڞoߖg ɤIdq[,99[6,DX6:}jJ5c6S[ =vm3lMQSc$IňT"Br"D +}%Dd2D25&H 9Ȝεd"tII(" )PmQ\J TL܇z.76+O[hϲ +`BރOߏAs{c! g[?,\)ZV+ce2>o'ĨDd"jb"J6.\$W\π푈`֊+V; +byc7;d':; b Dvaz" EړDJC7IּO!=N Y#Q"_&ՐW'0/;0 '*ȋ{$?ݍN۱[gq&G1ɑXqmu{:CuMyrU%z|%bL(=H(H1"ν aXXcn su62: 匞329s  + ~2ҵ!uMt_Ksܧe_}Zw5ո] 9D;ϹJgVcs 6SURBz53Ը_pTJȩi2w| Eo h0Ɏ!Gzd.pwM-evj{L6N+b{m D[]b0v:k۳jڈLմUmVC[5H[u3QVkU)Rf)bm$5nMe M {J!J duiu%:ŰjXAQ:V?-TUTU)Y3ǚGf%j!+#YR3J1$%0#]׸m"RUH=߈)-@I%dmt%\X2ras6sd;l6Y\6S-Xp>51 gjH5doIۑxJፊD&f(R2XrD.!2(2/LR* +HLA.s9)$%m)a{)I(" )PmE.RB|Xr?<%76qypa KaShsf>sYXLB{UXG J~ ڜׇSY!Nb L" iDtU֮,"0 dr]] +PTv1`\ɘ֜gt +w_կ{ ořׂxy-'5rww_RnnnK +*?S@Mw: ww!`LDԁ1QtByo3/bJ õ@6BP(\rY;tsQqIkFr.?q*)㣄E-4 +1ct`j9ΑTP{01M) c4THc>u$u̝{6a>Y#z2W `aT7wb'_~x3DJnc۱XԄV;ww?F[1B5ѕN/FV ۳倧8'gy|K8ÿn +r<%z,uZ N,BwDrr`r ڵK5??~QCj/ +0ګHpG4^5ЅHy wH3*m(7 ܂x7OGnp"Vt[C}S[ɹ]|2 \:4d +ӹ,6َgڃ=A_N ߯p%prԉ=rgKMr8զZ9c?XAGwIGv:} ww:3c= h Hi̶FCjUQnYiV4vSkM3N^R0T5+ *3Ʀx3fk,l/5btEDl5%Xi,d *:z[\ :҅-r2)y2P6`+dKiVSISJqvIJI&^1VXQre-ˆ*tH*4p + ͅ +L3`8 ӷyz1/1@jc1$dr lY38D2a 4.s%#֛ӬXR̨ ԼDkz&Đ`JXgHYnʔbZl^gjdݖd&5ɔf^/+dt$]l-@,}iD}A~>ZrW>>(L8bHȧ XP#-KZÏ#qHkxs rؤ5'׵9{,%ka> bb|p,&MZ{_:cQ A{EM :KdskQ3.'5XrHkxDTPAş);C3軑N Viar&"BF˘(:I +2\RJ)MP( +e$,}dF(>"B\T + "RG ߋZ.hb4r +#`-LF҆Т?-F87m3s&)jΛ{k'V^}6tT!|9*|=#|5Dv|gScME45Rv,Vz$ZxhjB+z1#u؊+^@<gCOokqO鷛qG7j =;k18{Wcݽ=˝QɁh.i&(E (hƁGdOUs ] pΩnAA%rj#7zT8?+]֭>pn% +'rdDɹt"i+ @s?8 !uX3T0 CI?ҹ,َgڃ=A_N ߯p%pj_^K' uɰX?J]m +:չttpd7. C"~!qsa:hb0a)b]<ٟhhY*j5 ; -֊Fnjii2+w`Z*ƖFCs%!}SEcFs9TϰtFcy~{l%euXZ,}CqHz&+VAVUoU+VVTP2VN&"T[ll)*u*qJ).I)+& ++J.̰ebPlfN!Vr!%g +pAoc^bc.HH`%f`$6fq҉di]KG7Y<6:㖌͖5djcq5ղnMM_M\yEk%cIVqeKr]r7sa&`rGLq/j\qo.qSbcT^!0J $?rkiovIg}VIOܴ"=-ݱ,qi"CFBC=ߨ E CF }Ȭ% i5*TVf CP Q|V)srF1 +_\ +%Is$<=L*DXJ"X$ >b=!B'|>ϊi GoxA + + +ZtPﱘ .=vn +;ΰu|$"Af!g5LyoįF1+[ px|=?cZ6W-",wQLYX`7)]oaF=8-RIePO&-UHGc#J8#HQXCTUEޱ")ıDX,?N4trxTlf+t&E^Wl'דB_HEIENF_š?L)x1|"7l,n2R;)Po'zt3$6Fo'zxx-&QjW=ܿ743PΌ)/:M &n +ab|!`wqcg l6>i;`,p+k6Fvd4NFɮ`#Vpx4a +͹pJ0t*up$Ñ93p`ϬS-P0Œv[H"'N@ e}fwY Iܻӗ{{AG1:pc=E LDn:uTz-HjӉZ#McK;s;rv7b ;kZ +:;;hZ]TUj֪f]sZv6e7Wzj)o4W6Pe5UݲKa2J22KꨈJjn)fQz;n'mʭ̀u*H[Heˋʘ|XWpNIU ܿK +JhvPفPڞ+!}-mFi[r6gmZ)lL"ܪn) dlĭ̟VHK+ؐ2osn_0gW~>}QN{XwKt_(RD#4:]^At(5ZgЂ!jJQZAUPZU>qQ9o}`%S^Ts ï +vX $9LnI&{G"T,ID~% N,@|{Bx!_`~|>gŴ|ߣ7 vz_-@BXL\p\;7):>n#Vhj +_YbV0$z~#(a?lfZE׵YԳhnRߊÌB9-BIePO&-UsZ$&Bذp%T#f=0)D D!v$hjTOf~6 ڧqڗ4?ġoG^Nī_M7wWOIDdTobrD*z6xz7f)ɝǷTJ"= FSb#7=<@|p5+_gwIu(gFCN*İS1>Ì];帱sݳ9l}&ívX;Ʃl Փn2€Mva.blKǣIVjXl4 g FZTDduP`O8A ~a`-'Y< e`Sw/ܗ{{AG1:pc=E 0":*Fn$twhfD]¦履9Z1텝5-um4TX.*@n{MKN[5TvkUK^N@nke3]ή9-;ܲ+-區 +@vSYCVci=LfCI]fcy=UFcIQQ6vC]I bu5,V:qj"Kt!S*wwvkr/< WoV*0)vo1G(i9'ՠqQ =>d')fVh>@FoD ݥFUߏ9Տ櫟?Pw󰧣YؓLHrb.%s`fE4ҏ#? gS ޝɝl +v[وonf! zE Z__MՕ4ėC]v&ʉ4%iX?Bwo˩F~lC7g' y]8ҹEjl[6ͳ)[{P׺Q=VdZWX +d) !pN5x2I6ԅ3MmwD8O cct# o $a(:F +0L 0UX^L`քFvR!cMi%W(\JC 21z@29>L2dRH"KPѴN, Da!B ,|Z<?$o ~rШኌq8cng$6` 6~KB?GFfXL"`d8G gM%A5NnJX,z\q$&))Oi)fMrϓT޼臅nRq>:0j}TaR$c`1-A-`!E[\ þ$ǀܔh4$#A U@yYT*˕=Gس}'ˇS<6{qo6r/#ܷ9cI~ ǑY)rO +ɝl,·B5%i= Lk+i/C M ٕiKF +ܽb.ˇm y>;a ‘Ν/R>gCMQxoM!Jރ֝ʮv'ӺrYO'NYsI`'I,AN$[T%.M HB Hw3pvƓ6#b {I=A⃜oFD٭&;$w%Ydsd$S %Y}[XH .P0`HANӖHGwטLg3>_xL98{ȑrc;N.ҙ9Nt@NegupM+9SMZdG&rpxA8:aHȧFsdW&CQxdHxw"490F3JeTHp/eWuPG❳Fc)}]`@;#u QU:q)XPp ʡ@p o8:@Ed|>v-=͐^=͸n6e=M.X=SYIh wuDnŵjpz=ҴRjոfXɏ 66X4a~Hq}UUi]WϢ$⧩d0U5)[k+#ض=P,jWhw$XQ#7RZ{߲pjaF L`nM&`vs V 0P`3 V̜@Oz}>7.%!Yd-a@sX [ ײ֨.\N3TNf-|%'iaF@4j9'0e0j ]ۼ$Z*(U R(aJR*dKN!2$煯 xak,T*$R^I$Fb1vg!?Bddd@"n<_"h BFX=S[[E2O<Sm&=Fҿno: |߿YOkj_`c:g/Í"5?~^gx*WswV_-du* !w/Cwjo_.Фܺ2| +5T>, _sz&!o/CGO3[/~Kqyop!Wy/O`r!%]?!{&ήP_avLꌇѕ3+O{TL>>NVcT$EB2l%vq:q71v`sIȆ?nһu1:7!ܔ[q;N.șNȩNNis~~+<ؤJvd*M 1|j4G5m24ŌL'z'Bc4TX&Nⁱ^FўxXUpk] 9k; {Hxs?1k_UUskndR9 GLo7ֿw ǮRˡͦ T`;:I ];]m5NGQV]XbB v41`#)j* YԕD4L"Z*2vkmeⶇJ{Cۂᭁ "U_vIVKlYlNYh76Yf `ٌFEVQYjF"Μ-"8Rb4,+]R1d030zJ :`Bkb0AZ5Å+i束1iլłﱤ4z- h5* +IC *ZC4rYUQDP”%TȖB.e$IXk _""XT IHH$b b ',C ~ƅȀEyD"Ѳ +km{,tKtKt)51dxT+nxJ%^4INIb˥-C)ΓMɓתe?----g '{0lw\jYJ\{t2)$72OLAE 乵4zF.-"[i `kr:[EXтB{6 ؄yv(Ǥ2E ذccr +VɛQ"'U 4Wgr?>Ƀȣ[ElF;ѧe!LzrwSY! $ 7"03[V;UUxIn}㌨}\ :lwB~Mwr6ߪO}}T 7рQ81_E=;zA(?m^G"DXD~гшE" fD0Tar`Dv`Vjf(jF`ΏLE\ ܿ0wJ@%݋z!R >G Ld7? ?H H:Syyyu\]k.?ԕN-IrW5ZԥExԅZcB}jo>k9G5z~Pszg|CaͩCJ %uT ?-W^*)<\#3eIfA, #"DFŀDĂ؞Kl3'9oIO imvSgl5[KHMlڱyAB$W*h2JD4LQ(Z(U%ApP|60ߏ#sY.oEx.^U\kqLBl +d9L&`:\!Ãesg8Jtj~g5FF},kp+\ +s`,4Rhk`jMcWs|Y....)g-I..AuF ~qe݁<(}Oҷs׳ߦ7Jm:#~7-~8Lzɛɻ_{ S16o& ‰( +(1֫P߀y,y19< F7DFS E C F L qXS[ayx=#Z`J Ư(${)5zQ!u(5ҧc9 {C=zps:`7h;tN?C:3[n_.F̟{ρsSG]oqC܋']89LC]iziAբа{kGԀ3:}Xx|H9}P8uh*B6d +uślRohOHcomV&ずs[E5 +RShl.'dh*kLi.m2549KcXQ/J+2$Z$T%Uc!50kEBU.VA|en־ryXerdKs{KK@)(^]YȂW춚 ,8V\ -kw>R MA䂌9;r 0Sn\++6˔ 2g&gae2b-Im-qIXs%)>-+wKBږVKbfvciOjyWRi7_E/J!LPy* ,B2x*)RJ^2eJ%PEJ":E,*3DB +xkL<'Wj rgl&rͦaLA$5SLjdsA  'QQI!w7RZz7F-h +WyheΟ7$(G.$ KٙugCn wPn3#r)x5)x[j jVi{MbcʫԷ}ѿ$14g"at`/2vg}~;O~ؼEmkȱ{%bձcXaC1r[$AwM!Y&n$,6طN!\(D|"$\DB% $q]8UUYzvTo~#:뉍~go/хW/g7prNs_OigH˙PLS4f& }>'DOD,l<$v ['7"_'< {+BM .뵵f#aánGB Cwq3AT0dj+ tJ drdRU/n]P!7@n)(]?[4zN=ϹvFN9-Xd䔔3+g {d^)d6tRKvWM*2䬨Hڷ%-0)Oܛ_YQPrA ;5_塁2.EVy +/{P|M BŃϥg>~6@+&nj7Wa}PT{rb|T,&Pa2h6c%:¢نNSb`thVŅakc+WD\j%gg面ZsŊ#̐{S + O'?q\|vqB 2 8"S_&d(H4;;;?('Fvv2=y2֐XVǖaqm5wM!Y&n$,6ط{O pAB.$@"|j$aT:{"4-gnc=v}qW>?7ՃﷇAܔ=)z6}5ODr7q_N}fL8I$wa3&s_[o:7>}6ZO݉$I@RJ՗ׁRHtureu 2U]YmicE&*Pruq%HY]X\gʂUE@I`{ tfX?_gEyBE-% JU +)e-[YlM)*+Ґ \Vm)h!ZuhgAP,Y#/ $"lUbRsT\PTvJL ٖ Te43A[3-`cmI(uf[zI7جo s5[Չ[TqTƦHOʌNuT@ܐgvtjښZu" g3: + 1S5Z#;ʾ<^nw޷Sow䇮m} ˔r(L!dR1.@jE8 +rٚRȤ $!I&LQ@br2pUE  a(ͅ +xkL< .0{b+0l6b3Y kI,r f@Lr  !Ԭ*88xEIӡ`ɑ_F[QAtВk @Pꣂ +*OCzwA(T 4lE4\6Q͢P(Sߵ}P~ށ#?o$t|n+/LMۤqҹ1xnldwS >$&?L27N|"LLOύ$X"O<>IqͣD _F8tFr:|}Z :tRڿk֤ĉ\܎cPӽeOۖw(p{W9i\9T̗)0G#xx[;RmL%c?^?3 esؒ/c^f&}ؙs|HZ.\ޯR6ܼK" )BP*09VӐO))L099LB*\TL*LQ@br2pUE  a(ͅ +xkL< .0{b+0l6b3Y kI,r f@Lr  !Ԭ*88xEIӡ`ɑ_F[QAtВk @Pꣂ +*OCzw?Aj@&-2yIÆ,j7ƥP( +BPVQY@ޯdY#d8$"Ȣ,Un y5^B%,.06&CEM'pC]b4Me +wNDEAbw+:7f^?&nzSgxٻ6^%H6'> '{6 LN| +ۀT47$X"O>IqͣD _F8O#(!ޫ c^ _^ Őz~LĠ1{1v_dݱ}6܎F=eű~ xk%U0k!4r,nCp]i9߂NiԀo"jZi?5)q"O.ڤ"rBii@.Txs.%Z:۠FwI(Vk5r4U֥hHot\>\xRB)u%i5xj_ jRc4WST ++RU$W_w<(W~_xN.G鞲'ngv)ޞ\%9bvgv/uD%I:w: ;\$ ^nnV*8^\ +F)PQ~Ȑ$ H#0~$#~P|fx3fI*aaa kL`s p c 6`-x1z9J(6 {^BbX,kY_̠(0!&sx {6B'Ɂ( 6;Қ\oQ(и(3C$ˁ$" ^8hpxMpi,X(M#.=\``.]qrvh:>~s2)xtbĂ2C_x M$c^H*f13rwC')?O{,%OS!o@P~,'{(a23`Հ /{ٗ${ٟ/}77o'o'2|/2tM%e -!{֓Ƿ$.O7!:tJ;n%6c#+VIe;F&ܿdhYm]Z/Njnջ.Xhn2c,[fD+q~Ι6i]9k"\>cq 8ktƀ1 O mp䃴}oDON 'ZjV"4$:ȅずii5 Gt8z-^#5 zzW]L]?Grs=}t#`UGq,~A;(v̮I+ЎuO}fʁ|#D@5l^}5{ȲU[ -{*[ ^rLM_WvMcݥ6*Iqgَ ;JqۧZXa)E~Յ=TUZFU>!2ϧ2SEQ ̫ [W,˶Z[+(e)*]SSVSB(YUYDVMUHڳh~]P@lY']a˜r7fxq FT5ęQ1j*d J j1j4@hԪyR{O*Q24*QBH&X\6riH2ɜb:C&;D4ΔN,B>)PQ~Ȑ$ H#0~$#~P|fx3fI*aaa kL`s p c 6`\CvN,1$Az/AbX,b֌zϯLfnrxK/a5Q4{GZ >2 +E3]emPa59pa[|xbAUq1 >`m86&X-d4-: +,4jR,69}re≱ ?_ψSUj|,M&aRщKЉ(0Ta8Uadp|bhń穐wR ?M}yCqͣ~ . $ȫ ˃SKOܗh֛7ړ@xq7ғ릒2y~y햐=rMx[N䧛GNFo:%Z7쒁ȃkv6~tX%Rħ&$vXL_{mzڬ.DwZ~tƉ~lu7B.Xhn2c,[fagEc,y k0];g +"`u嬉pVirIqHtƀ1 O mpi? k;ajN[-r\4Ӑ j:xT4>dzد&<O-iWmlƆ.~] H[^ $HHtmJ@lvW*a3wh]B{|&N˯ +$a4ϐ3ֽlۏohJTm4=R_k?k9<7zM`}-=TŽT%=H:{MGHaW=ӱP뼳hQi^Gն:[k [[`3khVVTٴMHέk,'xB< FS@QÖzzRBM-̉8kjJpNBM$\հH~eq +']%*wQE +RН_^^YɝT¹hceiZܿfZ`5ŠZFXzE*Sah5j5ʠQ/(3j}7bn0A~2Ӟƈvo3vH7~#pא7 {|&N˧Gv}:@ސ^5oP6wS6vx")n,i"r4!]8Ow;jT5T6Zgqk d}Ku ruӪ +*7i¹uOYHx>jROUPu#Z[[J9Ԕ\HVUa%*NJU*ʕ +7Cw;нl; |MyQ )']RRt*c19fVhPEÀYLFӪ9 +ojA^Pz*&Z 3cߧUJFZ,6%H&jT1<&B6~\&YPL{ʤ'^+9b0f9BD#A0D Q 1{6 Q*ǿVqqqӚ<qaD 7~|.`QÙll/`xC Ūv` `<.,fX,k?X,'*aNkSCMbY(,RFµ'$<{ڤYe4 +E,XSc2d6j/㤤taHY&'7$Z @pW,?Y-؊󽎆Jjۖyq%u{[kⵐ)mƔ0{+1Z@Isj&B44!kc> W7}ED +zPPպꨔ4x}eh*9-__\uqyʽ:J +ee^Ϻ%7h5 U: $W BV1j dhFBt5@z7TJIGT@ZHJ)Q$G-QR*|J&%J \LTQRfHBoX$H + &'O $EIԸդ[6j16!Vb[ nO[<%xmɋ6+~??%{Sқ(|h嗻?)'_l;0?>َ!Ɉh;໇(}`+Ȍ[q[--nfiV7w6Qz1v&鳛'F<'t'B/"sQxO._]<\ȡ"B6Y{zΖН3Yy5FD| swst}6t&6c]=Liթ JW&- ]0#,KfNHӓ̅f& +cfRgV83f͍V8q&GHQG 02A:n}<}XO&41#5~( 1'C:"񰎏c aUHl8z+vܣCC=#U@e( yB{st H9:=Dxe}1>bZAD"g_KM@Osk}]1u5 DeQyS#;h ^[mWZ׺&^ ҖjL +_ (iUDȝ&&dm A5RsՐH]r +^Z*Յ5j +"YBTU,WPQ[r#Xvq=CFHUA*ժT-ˤBF2NRijՆJU))Qh +HVRRP)42JJErVRɤR K)eJ&o(DZHBLoX$x-DB^>5XK +F|>'S8xr'9976C f[JJ +)U: BkT)Wg2U h;`^tAtB^= 4Rd3( AL>"BLNh4zŸG4/?5ƚ.aJkVY($H"XseQRAN-ڗ7R1nPE19ƈlIee1!R#Yv3[PNTf:ߵݬ6 (FAѥvYsOOe/SY"w@ vݩvkڪt@9 +g8DqEGDR)u*wn_ӑ ߪO~})|sjDū YGS{WmUJ: +xs7bW P f:ō4FϗR/S /<_Ll~ N"t>ѓkɀI+)sɴ&Υ&trɽK$9B;ݹ@TT7&-]],-3Iz?c\\ӹ2a&̍bfO@ǢAb%Fc3LFK~: 9hzHI25I&1CQ^x܄9,ֹ4LG"ip8Ùpa`߇.0-.Aqc(nɯ҉N\q@*=`䠧:ZCDCn=J;ґ uBȀses+„тnחve=g1Pvu9\%ng?EY~2k_s7iMOKcFPws'YaWSYQWCGaΞv2FA +zܾZ G޾'YAEr[kZ(y]U͠J9MMkl]T T9 el{)!^Ȯ/d_#ˮCZ;kQ,E5;5YUjo2m*P FUaaQVPY<І҂ +Dy(c۹8*8"]ϷhZH +sBB`HC B1,ZHÐPTSVžV1BgV+Q*U5+rR)J!n*,xɤB,p[" ~~PA'P,HLHCPPAI@ @f ogfx<׳s>֘p _ |ށ8b 6`!6#c֯Y,=G,kA[ ~'ezp =G X;2/.\J2*% ͔vQI4«48d2k +T 5I0I +>2'1R%U &1Rș $ Pj ڮktCia WTol1)ߞlQ[ەݮxuc}g{[oSl#v:d?LR*2z* )o!?O{$#< LFx8}"c"77vȈFZ:#8Fz>5?L4֣.['D 0G\F17b L8-v}ow[]}ng^UvS@k/kw*k-o!5wSYztኺ9Viu7wv5uu5tvo+ll'CkDaoooE9pq:dyZT+.nn!\ TѴFnlXN@P!^ɱW{i=W{Ȳ됵ΚbT-3 aGuQ͎jkMVڛL +TȨ,eUXe)˪@ +k3 +Y[ʌ҂򼪒\[qi~̿g&L`]WUC*R@P-׆@z0d5N7U(fԣU i`#t?`Q?Z_QBNK-A*R!r醓˂ 2dIńn`" B "A( b$P(  > AAAA- Q` 3tϧ񼞽/ Ƅn(p8lppxwuAhKP^E%P>1 ~bXHz5b! eΟ?!7 Dt֪ewE@Q p&r_Aq PDpa89y}߷~@߅R?`ރ:jo*EL)m.E,⡌FII|d `TURۢsʙ@@<$#g.bbеl +Aԇ2|*挜}tm׫?޽!ylŘw0V?!ϠAvܛ kWw ~.ryKWKh;鄗/~O[`~*x>J\ +m#l6Ud&ŧF4ܣTt +-#_Ey0 4BO${7Sx+F>XOˣZKn,ބ-H,R,\C%BFmmv$03M_MM n îS +o/&/њ5ޯEc}Zh?E_u~8qYkjYp/_hCg簡*i%{=?SxB N* D|;!g(0,NyaasNBԥ[g9wl=dKDswA<$w!eБUNfk2wz׷Z{<^kk!km&3V7ؚ|9\՘RD(JPcCd젽PNVO7֓+xW[\QJȩ)_SDUMSUd +V$˩D犣>)T3l$ydE4.I)j!0h-:ctXNV R\FT U@gYHF Zvn aݵ{.%/Wwʞ,ɾ(vۇ;DV?q/3(v~f%mBˀ\FR:ZN:NjPn +ϧz6yzM,\%BFmo. O!K'SO">zE'B<߃0J9 +wG-gv3ۜ r|~iwqtQt;KwCadlo'tֵQ;j=[Lmu=kյ6ZZlMijki"bDpS%x +\Nv^ipm('[וJ-(%Ԕ)&W]HV ɩ*AlUd{UTsQc* VSyRUfYj) KJɲʹKLEGQh_YU(,rJV%XY$"*%Ԉ<\&bb0a +,$V,X ŐI12-e.E)qq?TTzHJՠ-ђJ衿ņ +a=IQ@$XBDQ|.H~T|/BqFrrX9 lbL ŠdF0,$0  ~TIAoizDDD:j~dH dO !s/Z.$(/aMd߂7@UKY +Xq֞n͛ɽd@)]{'w9QQQ$<#p8ך(FZ?d?bqPk,` &}Bf|`EV+ aU3 /IG ƟS:>NH +Pyo:(5Gp~A^D!Ad}z* Rb]/$D8JL"!&UnЁTd tSuRVV 2GgRSdl5cR86d2YR@.Ym wm§w$/t/'[Iz:\y $t:P3i{ӎiݩT D'ZVİ; ;/P&R7n\!nFp㊕|نXƒ(¸4?f͍[EX=`~57jA] +gGI3G,/Q3hM#4aibb &}~Lv޴~f>;c q߀?7CFGX!j>@9ZZ) b1t*`&j@ z5؉v:=aw5vt7t\]Tκ68'jVX^[] ,%Αꦼf^ k0CM'5Uxx=J\c +X%oPW_V* .[[RxX}w1"ȍpVޫ>V˭ʣa(UsvW.wU*sGUG(+*vzJ):\=RW·mo?x\ZVH%@#1&8e<+_ $ +eK&nA"G% t8C$䓨o<*}/ x|#jrck>bccIX.=hP?z7fcfbbbhF[s? ** +~ogp8ך(FZ?d?bqPk,` &}Bf|`EV+ aU3 /IG ƟSK:>NH +Pyo:z~([lzʎE' Rb]/$DNZ%&،O*f6Yvm<;ː6)Y: ˡe%%ŲRR$#ݢV`W@B2FNVڂ=c Ow&p|+>܎c5Kݭ9(^"}U-d#^`3ne zv# _klwKY8,#YLC-dHϧzbB si5Tй?@ͤ!M;TwRq?hu.ZJL:'V@ݚHAܼqՆױ5˨q+j,Y,D 6U47nbQܨu*I&\ +F\L5=dhjЄ1 'LA#$ $/ ΛHԜ9YSX1o@AC|!c#i#,5zZ/k-}-tO:jOI5W\i`snGG8*_Q-vvwkrl)vy|G{]iDy;ݞ; :`v*gg]PGC[@~{}ZT{}+,VӒnHKuS^km3 QUwӡ*q<OTxaAO%1@c7o(o/G[W\TJʭ-W[DU[sr]ȭ.r#܅հUrhX{* +p]ʜ,u;JJaet=>nEg^ߚ {2!W@$nawtö^hrh֪U +xVԧ@붻ٙ >O;sf==avmןo5=bBjN@:2ExFȄQQ(:Bu:H@ZBzc$OCQE"lDFf*H vFNDVJ Df0԰R"X*+d8\J"r+:N.,(bL*&C0QgI%%߄"$"1N,#0 "P׿|"P( H d݉tYthO l32#,, + `~g.@X /~/B {@H .<GPBGcĐ8Af5r8o&18"eLR@QTlf+Lr.>JEXz' ެde3!5E%,Bi(7 .ѬOΨ~E_7Q۪}~gSOm3qxŋi_'2T/ӕπ;|Λ0y1Ft20D&QNdja2M9}@iƓg &ى$d֛!@e!$=yk +N#ImmkuAԺUJK}1of`M&Cs|Νw9VF:ۚdr|4V65U ԗ9sdَ +'Y (#ˮCrm -5ŨZzE,{aMZȾNmZMUUXт++UU 3vdxci^ˋryw7~LJHQCjmDhd'ÐFhUJڋR))E*PZI߳BXM +yP2ZJ(L%[YrezK^d yDD/^} Bf$b!%H෷R3WHȧ$^gPEOO ݋QqoQ,!!!@,` &3G#W (ӈ(JZ`0 zt|@^4:! A+*O8d^ H$Y/I1&L) aANˤWb5]8dsth`Ȣ>H SpLRգ+6~}x?(:zyw;=J^zޖz3]t2MN&ur^b&SzYyIX&oS Me 'CfcᦑRxr G7?_OI4q<p-wB&ݽb^% fs t=f̜7nhs ah:ZZZwХ!~P:~s7vm0:VuwW_geRWOՊYZzKzZ)Y{[z{Ȭ}M^zz =̈́]H4 +v5v,ru>t kp;vwbhkk#ZJg{Ku mfMdMU>r+ql܆@rɜ9zlG,smu֑e!ҖbT-"B&n\]ddf&˪*lV`#q7VTn,ϯb+*Ϯ**\o./ȳ:mkg#Q,X-jPɡix +BiU^JI)R"JZ zjPȃJ-R*F!*ʒˤNKIO_"C6k^*-`X<"JA\m"!P{]A<>=>_&tO>GAfxZEhQ\q8J~{AN }/4lIV;VhhlBh=l0*6 ,b &`!{\aȒTb#PlJ#P҂D`e0דH ?~x!5 \^ H,Y/I &# aANˤWqB12EJuq;q(C' S vs9@IZ)g/e(^[`g7D& 4Lgݼ5 „m*s[ D:d1s,xL94RBjOr3FdR~H#8Jx8z0n-ǽ2 .Y0̈́;L8o3fΛd1`z405buhl2nI"1~N&\?(8L?$"*WO"DdW.]> ri(> Q0CFnppP\"Fu~o:M4^{c_G +~[ 7G90Gdϵû5(KCέt.=[9o ?`t.:-=fWNՇR7Y6vz M (iu7uj$+UY$}@rQמlkwĴ:jn9 ܛ rs%H +μ3}ob nZAD{LzPT|vC۩sSs螹TdAxo&27(z);g&+tz {wSQqAx>ltxr{]ǷdҀGöݰ^|7dLl4TĀUؕ~+]{9J?pR2ʊ2ς`q|lSu,"&n%,"3fJ7N'-S &zItjD0+A.3͋'\6.ţ.?luIxp NǝRGb!]ZAONzud>6y>_>ڕo~l\^ס΂-{|Eoۄ pu7uv5w;(:;] d umZP[}+Y2灚VO[\ٽ=}^Ypa45W5jlΎued%!rvԖrkJjsk-FM@N^2Ol{>l[uQ*4WRW@.wVd*UF2'`Si~)fs_vps.Vb'ooA_۱!#YoVP6&4jH4*%KVCs8ZΣ w6yZU*"/JK!-Ҋw)duIeeRʒH=RD, [[-̵& (pRag(x'|JeaJ0yfF_>G):::lmDEža9BFE$*jqܕpBp,^S ,b &`lG/.*]IȠx2k(33 cehh:TGV@+IAD,Y(%DԌHAdIRr\;'fBp)&L +ZiF%Is$!{|"fB):IOR3bYJCe&HD6.qK `Mf#CFGPNg)>xO>72;v}Yt*2 o<7țt y=3~hFgf|=XtOwÑQqԁ{>l4;oɤm ao$dSik+񫠱+){Vvr2CJ;ы), fIhNFEL9(3nlf_x" +yE~*1D&zItjDЄ>|2lJOBcoC+ ~ Z }@z=!6Z -\nR6^=KUY_ʄ4۩S<Ax\pş9${~B Tz%0Akp8(K7q8z~ FHX,2,2y6GURCL qUJ`8M2YHnd# Ѧ3dU3צ` &$٥dYFKjϷYH@Rm2Lj?5^zP$Ɂ nGp_9.}eÿ=/9o_o9ѧv| N,~-162:иѡ <Cb#؛re{K!A^,,ի;TDO {ޗz>?5g}iSxr+NIy֓7R~ Ih4PʩN|"hB -t2bDH7>s܃{Zvkjۂ_Kإ&=,3%(!bm}szQPA -6AYdyֶGE}Zpcjjkޝ!` y;e''l]͝E{8:;:\{tvz: + +)訃fob+hݕغL^kuK^%f'#o'9f-MUM|67ljh`u׳ԗ͑-26ՕԖԕxA2kwy=lkJ< 5۪6VSVeBʂLwaE0]no+ +hk֖ܳS2K˳J˷w\*CQΠEQ:`!$ZQ%61@MQ ЧDèZA)FΈf~wՄE NKB ťaѐ{# uX3{,*0Oઅ\V) u懦Rb +4h}Q{.(LQ DQN ̠2^P^\gB.L&`""yQwǜ!Xd)/4<$(XH^|߿I"D$Z\B!B|!x,Tՠ" &ŨI @ >i EL1H Τ-J?E0fâ$尾'Rڹ,zi5 8,qcu f `GRFsXtlDFn4"q:FRIn!djh:53+|y3|1$^%JS~ωgifF^{1{+H~g(0FN;$tANgw38=N> HF 1NG oiǷRY!nT6s^B:!WY 4v)Yet(Iaɐ$Ew{1vDN;EŸy&MnNٕO&r儍vxK9klW@qKK::4y`/MC>8%~;8șV^N@N; F96@1>ߙ !G{MrHeQJvBv%{{z]] +w{oc綞.>E=M= Ww#[gqWsgў&N΢6מ9 +;ŽJy:`ۼ +j[w{8mUjU &%ӒRDSnsu3ۖ&>ݍ|65T4mry~rj˼9u%82kwy=lkJ<j 5 l*UYT5U~+\ +Bu%²"ZwA9W%8tMI^I掭\emݑ[b(S,: #Q-֠GQQw@S`L=`b1aօ&Ju /NKŠG!طZ 2 p$DઠBUypSTJ,hoPgR(P*PN +L)B@w~EQ&* Er9' eۛ̏)22"8*zi4h?R)pI$T/p>\b`bDB!p$!} `5H Gl1*E}l@ G` +͌AB_p&GE1ˬf"LrX4pfӜqY-4")&, `GRFsXtlDF-jEz_#RQ%"kW#:)?'cSS+77S)g/&$_N}Ě.'9jb%Uߣ_FΌciH"L_w38=N> HF 1N࿏߆hoCLl8u\KL]uB&O\q)s]J%qHܽ` &.:w@$ۃ9F'%ru)*3lʀ\u vʮ~2/'lk8]XYcj \_ֱѥA|C}l*:`8%~;8șV^N@N; F96@1>ߙ !G{MrHeQJvBv%{{z]]cNHwHs'I8BVe3+ x0MnF 83:: x5Ue}C~;1 USTsvųu_`wszc*=¦r 39\91D=Ftups6 +l*h룪h+3No/ET)%%tGеM͎ΆN6;;v5Sׅ)i ZR5m4 ZH%-{%m?ĿGU쫆l󂳹ˤ9fw֦FOw#?u/n5 U@ j ++|Q[VeMuuEEeז2b%Y7 _"z]!EEzϨ*8F#!$YVCRl5D>$*.:5HiOV)>;RHE+`>\2 #[+$R H#B0IL$(:0,&(B0qbF"q΍%NJ!L` Ff֖P(>/@?+Gxo}q\p;3:2)k @2+p8LXfׅI`, 4 +9̤\Sv*l:$7nJV٩!K0rA&⴨G* hY}r$7MDp𲳒Ed5HAؓT, TȻ/kws^ [4إ{y$GKSBׅe%8d&cwe"cʼn,̈~<t*5$t4"#dHi4 #:( r`*`gZ ÝD<`$oL3GF71j&ڠHhpv3?/;9\=1ZaS9օGvR WtWbkn# :p9Tj SQU } +"*{v#fGgC'T;کJ”Նlo)m֚6V-=Tm 6_*UCy\eRTMa;dkSESaikTXWь+w{<% Սj=M5n_QuY}idwymqUY[w:6;*Q5јOI1 :A%kpHN:2j.N%¿%:&.5j6)>}tIU\tjvLhOV)>;RHE+`>\2 #[+$R H#B0IL$(ܹ: b(GXQX,f$HHHQ;|F a^h&am B l!}>^|>`|\p AL NLd5Ymp8@YOc5cέ$>1(,fF!knVJEMȍUvj|wj8 qZT# JY4ì .9&"سH5HAo+= q<s2 &$a?ĘMvڢSKM|.Cb>S~c6E +a)bҲ͐6y3_K&/tjjjER^ήx1$#7!; ʇ<`uj^+$9t\Ƚِ KvSaf/3lvtJJeZagқm~>e%8d&cwe"cʼn,̈~<t*5BBt4"#dHi4 ?9w0C3-N}gfN~k"L0f7&ȉF CGSGF71j&|?qg_vUW$D5>]n2dnn2)$E QL$c;nqcpS\B<*vb37w= WLNo CPMDa/3K jz51*^wGuFգ;농F|CT#]CU^Z:1Hr*;*{H{UwS}fgoK/?U)N19_kʺ4H]./[IR:m5)jwGmon+jmoqJZkEM@ÎFг]Eͥ U?fDm IfƨEfdDLѠ&u"@h6р'EO/d\voĠrbҭQu΋4b5'\j%-JX0*5DTު}1TJS*drQdrn %ä(L.2cvMba낢(BW"RD)'LvnD$]lzgh%ČhO lbD]l?WB `BD.>>!aAzɰ({@Gx<2̛"$ӊ:{, *fshY(aVrpSZEvfjVY)IF妨V$=fքeZ4ԝ6n,zA(ȵ 3-ߖ(tG%|(=[YOU/mվ,/oDo-xAدK[!ˋq~֫սB-^@I?t78?ΣR]7 OoB|y|=գk9q^͎$ @~o!nRp"$ݬ@IqDy<x*ü,RN2(+׳ϰ0n2nz_B r W {[X+-\rRdřvp*.:hݽ`y<殸};:i{SnLe樮Nd&dD+A?0{,xKGS)ңfAI!A.J?!كɐ3_NeN}i :`!Sl/-?OmW:@ڕ4LtL3O/$Lan!Ӵ}6cq܉4cZ+wZA%3}3~{W{PҒvpLO‘Y+i\@Rl)7Lͽ$d[r(snp59&PCtH<43*tX@>~!?;IɄT%R<xW^yqXN_rZXdY\;\V9 fQ۪{sirPq|V*xmVUe|3_fV. jφbRvxJĀBj{|jzF3[Es޻=Ӥy/>|[OW8jZF.Ǖ/o`hVF8}PK[UQ]!}sOS VMn锔/oTu?jȃO>Z }{L w/yI+=|KZ:77yOs^7p'MPPnvgSNI ώ;I׏9X];jg]s+pHsC.q*"Eva9Me}rvo'8v2ȉ%t#39rͰ=VB8Ι)I3B82k%+#Hꟙ-E&wܑd0p"3lKw ζ&G\BsÄJpv.ޚfYCPbp.8G)SA$e*6Is]dtey"jxsY56EF4&d1}w0ơ!. ݃tѮ]}3C]#a`WZ}g14D;L"u~m}HnkNȶ^ne'es8gswgSWeWgsgKtkg \j +yG}=o߰z`1QA/"FLJ(7`ezD# :@|g,1]d0=c4>"ܨl..ԝ_6/&^<&Vѣը +FVtjJTdRQaJ~Y_'LWbrY/#L@$8L*KYB@+x<{/Ìr /,-BiEcgs2UYT嶪!|eTlt΃-㹥 noڝ nlᬋ3N:3Ίn.VwsvΚ(W3; Y]:Tdu@د&,H:g9\Ygw֟fvvvTp ^3偷}-l9Slw4 f :3>| )d׎0XhWSr|$pp +!3 A[#)A}|Q~>=hN('zac}ztH5QiBzG/`ɾ`}Mƞ fRwXIOS,(nfUh +0t7,Pui$u] kzoO=(%6&b/m[|[ZöDѼfO3MUM\ +6 +*#5+hhu*a +R}AHuau;|:Mޝ>o; [T[ղXSYO1m}fCuI ^"C]X~!"AQH1) ”da.25BV'0iJҨD5iĪ@$-NP!:]H6DFGB)Z :hԱƂ|_p1$* UqݳPD +Q)斍 + J8H!2DJ48_GF/?BJ!F-r'<6D f%JhRْ`)I`%JaTX ^ I$Vb1Kb7)!! YTTQ<8Q]D"<XDBn ++*NB@~|AF/-XAF$+  dx<uJ7&(n/*ڽg1bi@8eUjDc#˄0nf`5&6Ċq6 fQ͠ j_-d*5g(y=dKI2(#x~=9SQhmZAǷowS_aǾ>\DA=X:;@~Q͎U27c6ݳ#bQ2=DFg.͓lh:>3|F]ΐF]#95!k)s!WNpr(25BHj xq x><p~޹;ړٴǷMj⦝BM4~=+]9vjjr +h0r) 0| +dU)'(\Ȉ>##w.Mvl<3iĚ8svmteީE< ԨK!4bڟJH2]9j.[h.I?d\8l\<&fكtv&H b~SS{$8dIߗN > xo"|,GzL4_OuO}{5{z6ze@iw3@S4ظa?kN'ɽpwuulk;mEmumm֭<-\iny6V72mW  +w +ꨜ~g=L|_E&N-2xʽ5eyڲ ROЦԖ֮⚯=꯫k7T*ܻ +vy +߳YA.0kudEN^QZ $p⚡ИiQV8а(4(7f6l0TlPDQATR?*JlEqTȥ+N.L*t2bF !FpaxI$ &߂,3b1$I c9%$$|PH$>:B@ [.>pB:2D +BP, +Ȣ4}(d$x<~"(?IccFz2 'xg0XM*J-Q fP"ϟiV)HǞL7P>AԭIá?f!vh?B'V㳣.|v́{OBf'1UOOW#Dnz܉# ^RF>#|ΌAgrP'sN.efhMZtz 1o8WEz9]Nm~6`p^u8\w.voY=iSMܴ)KUoԴF/Fݼ8\ WTTWJ>W ׮*h ( n'뎆t*H}r@W4/ u0`fD 7`n`|r!^D`÷TXXؖ + vBBBhq8悅` 6g#" !`|MAX!m\ުXaX,cqXQ)AW>?0 +AD$A@(>Q|ݒg6D)[JZ0#>z +HFI J#!SڡA(=>JBN|E 8><<#~Xeiؿ^/풾[:ߏ?F.~$y1>}183зK{7}?!˳BV*:WY܃Z܉./dLTZ/gMt\l5#ABy:eM*tOS&)g5z0~Ox"IDҽ$]dN-mu 7ƌ~G ^FܘADgv4QQ͌}ԉ| 7za =`rHx8`HKM5[U-{W4 4;ZpZխPV0ާ1z)^0EנTՀ>aRjvWAk\GIݮv+xq0C _T}r@W4?0 +AD$A@(k>Qx31JRZW@V39RȨCX1)!(C A!h +9x +E<./jEoD^/^;I-޸˳{<3vi7@_vo o\wKK~ydeI2+++=諅^ΝBj> ]KrքOG^̥y>Jz1&IBt*tOS&)g5z0;O'z<$n"Jk^`Gu'Qr cFZUFܘADgv4QQ͌}n?qq_ յt C'鴝NL|}@ !.se00;52]!}e)3;Ff !^3,w6%36K"Dts8h~3~}1&Vӗ@SAFD 0k >c=F:x7kW!#(pN8ح)n@cK QvMuyݹk +El +(>Z:Fy5mtyAr]>^-6f ٜhbT٘\ltxd52VRn׳pddԖֲ9YSVC*T9*T_SsѥWbIss9t_UqEtʴv񊂊c|{ GٿKGKsO䖟8𯜴CHMRF:5|JըxQpFRBjUH~4jR;UFRl3r,d>JE0 "1`#d +C +*)T|H%=6S"FX*" 9c GBfGaB~AfDFFBBAhI 쫈}>ψmY-Ԍą .\~muT;! ) M+ KDu+khu6!ጅʬE< a4/&IL?if8AHt fMG [WM#mn^ @⌮ ĒeC 777udQ4}5&zL^1  D^z^h@}tnLv<UC]Zxȭ }n#yw;|cWڶ®rdSUG)pҵtַw1kmiijU䵹XV7e9-fG*&_f/Аyrvt@v@Fmi-5e5tj@uIMU;=5]zՙ*N4i:GIUQ8QYXIn/L+/8a(8fϷul _*>e/(/,,-gWn1+F/*JC jՐZ + QHC*,ZBհӐ3Z24bc!۪RA +w +c'd%0Tz2ɞIT"Sl3%bdωE! 3p$av0 P( ԟaOdd$$걛W*,,x<ޖBO\p'_ԽJ-!W"t/hp8=Bf=IHN' I$ "(XLGQ3%#^dxx󰐳(8@!\BB!s"Lj0j!ܠlx ת z-φGAhd3*xdCU/U y^<{D_,܆n%}aZ2!T7=^{(k6D7+)dFKIث:4Ճd4Ev/%^,?,$w=Ud>q+RVҵVF,ҵ9lBKYty&Adi:^L= rhq,lj3F̀;cnFۚ&ݼ31KC⌮ Ē:\?N o?o/0udM_2.&{`@A6HXao"  hQ?F_=7:u@ >a5V_{_u־j_K/UUs>oXOH7˨ tw;u:ʻHe7(&djQݨ&Y4 +NJJ9(4A(s"\x Ǒ G}*'\ƚU|/ doVmT#ޭY=yRY.$}\(áR~ i ՏK~x~1b^.Ex\Zs$syz#W~'mxlm#:뀬9˳v'3B-Σ)+MxMHuk 8i,\z0i!ݟ0G[?h~B5sBwGB,;#fZpNvY'Xs٫Y3W2#cW&e#i 2} 6uyq@GH/ >d&0Zz1*HP&Ȁ4 ~to9U]ʁN]6 a5V_{_u־j_K/UUs>oXOH7˨ tw;u:ʻ::=';ܐ'Ϲ碜Nm:sBJ[ϴ29BU= i<1騦/"J<䞗's]>:wCu#ZUU|1sƚ"g3YцMEUNth12 P)\R t +EV*#iZir՘&UWJZQg(ErrٶbIcʣD@.cFa"C% +D$b" vSMdK ?@H Cg Qx<HNl45222/=9DvUjjr{NJJ +-po5vlHC7$ ɁY'f=X:ɢm BbX,WìHJ~8+0b:c3&HUO@HaMz -N(ua٘GY3b3AINparsBg.f>nlIDaDI/¿ML3oQU xzg3 5F55àgV pd7iA + } +yuPi6CT#ޭY=yRY.$}\( !~iq4%f?<̇|n|H˅K||'I@ͽӻ;9n;`ks9Yde!^<DTmqMYaK7-G7K7l =[BG=Oƭ4?fu92&rw"3bu{8 gs᭫fA4b #ffE\ɄLFedlr v(q2Q!_! _h6Ĩx2#c~id@E"dԏ!WFan3P5[{k-`ImVouƝ|0=| `Õv[uJ+Ӫچ+ 9 +66͑I-JB 9ihҤMk 󤏾ɶv_fdwk;Oj;l0dP51P*܀gRuU(}N:[Xi; jjbSIw 4EtȚ++v48z@AWV(im+j :^e[M[VPqKPI}e4P,E봩SS*5Sk𜗪QA*)PHCTeVAdQ++J#hwmZ.[ rv6rtOP+DAmX$|D .m X5CB̎~Qf|HnJIIS{*))iO%&&~px<BK\p\OHIP GBeP2uIp82KxX,#z$D I,= F)b@Y4 +QP((gd ))V}PL;2R &!egDh&'w3H7!IrZȪRBj9Ϗ ަOw./B?~ˍl-WW7 +xz^|x_fwS'諕?K_ʞPSɞV.I)>^ch)/Kozx3>Om׬46VZ%t?.6m+VeCMYŸh}>G@VI+DĮj㣫p\JIE(s*$o voyo[/#==wtXtu/_JҤ!F Uj 1*U$NVANUAʴ _ZNcQ+YQ۾OT0(1kr# Y{[ +9*<BrY|j2TĝJqa!}!a{G,SwIĈ F,YqK`@՟afχ)!z aKNN [=ǶGbb;6=\p8DGQ PN0ip8È_LHfb臋EA:)#VBUNݑl,"Bd=Q +%,L +srF`E(#YC}0 );=ɃBL2Mwi\P4<^J>_o<%G=z|{X\٫|ϥo6?ՠW+d/;@z^({V@yxVxZZُ\H' {|@x9գ\V,~\(?]_Xݻj\6XRB6` ?s$k $1au>r1+LDIs(w.>o>gFBa"",͘)Mfʍt)[6i"]=L+.3 g(a~<#}!!sNObF)p F=iqBkpqp! &Lc:F8!5`?4r3H/P}~+P79\?ên;@W; avfs a!vU]P5UL*}.@yP%yc{{zitSyGN@.HB t秝کuFPn};3ʥx88Zm盤o4`fU}SޫJ*G;Ro3a%&Tn$@CUs39uABG⬁8κVBSAS -Gmq8o.ht%-v5_݆)*DB4jWC^tIR+UQ$>F2DR|RlURef_T2K.2ΊJ7pn~JD1a! |~S"aB$g1"BF C[c"e(#|>box<&g3Y\KLLSL3>Y*..pl|8$qJ"i C~bX,]wLZ4Y'cd"' #`8`Nh;)pfz $]/, Ll6(rq \gC b> Ъ& 0)U * IUs$4e@9\$#)9`P"">[(_ixD~ݓ/er^X%ok + }%g?Mn%X_.B,C~[ʃ=:@ͧ~'y^ˎ^.9^Ɇo\=\9kc z _Te''Y)o7UyR.vv)r,rAJO:!e@&Nuuh=AXGKGVHWkx|o7R~T9U䈫qC +uNR; +nQ=k%MGZ6V9 *] ǚvgcsl*T+$QABIJQg;TL*ŎrVI +y\F&QDRA}2zR "w.vRQLzH-TEخ H  1Ċ2CyP6>ņVx<ύ yT\.w%&&) }p8 6`?q>KPE4!F ? S +bX,bel.{&- +1Hź>!hQ?1)fkdy^I׋I$J^C +H~ +U?.u6<3}@VX5ILdP)HF +8Z.ї1$xd%K[‚p>7# ރ_ ߯]__LEjQ{܄xb?2?ʕXΗ[֗HorIo!-O% {0Oz1/ae^͒ nw!ogAݲAd B&dmYn] Z$= ۈlxy,ff,aBc`q:=ëfZD.o"?ޤ3=i"ݺdޚ0oqpqS ?E0 i]F0AG lv4-7`3îC5t Y=JPM1 .Қ8La-dlXc#j␆`FxۆNwWt CF~~@Gu;U_XUzKUerVˬ┷quw;u9Nu 'Ns'::KOs#vX+gRkQx`obOw#r"wW ⬇:g awP9knl+lvyJ 4T8Ք4Tֺ֕ gΟw‘rtNt'$$p:[;[[USSS[x(*n¥8#2;?_t$5yUNRHTi z1߿#`5 AFoL%Z zH[Cɨ_AY-?AtZHzEjF-1PHz$:WG&ԓר-]FYo~4hʰ~j@vR)R8$$0QJDHD`ptCpZ@ BQTؘGR(4~c"-/Г6X'&&f[E&m+)B +)~x #Sq, +E-*8,4A%D"H>*Nce3+$8EcQfu@#ipY L9BVu%Ӛh#¨ nrvuI +=K-p* p?GMxl{FCyCi <צ Q8Zm6=l1dZHF2 "SeeOY\nwws{tot, N'٬w3lț,nOSX5gqzq*ciAGa/'/fB~A:e}/5]q?B@SU|󷽐[KRF=X*;z=IQ͎ʀ0=!yM2oM^ORNE= #Cn+$ȽךO\uh;G$vSЭ+Vd u|& +yN y v rvF ]d% 6];o}ߟ = 8} ߙ]V=r(:Yޝ_U?߱:XG_ok/m׈9{:&ٚíՐ#-B+5 TB򚀦457j,kr!W%2Hn:19%Ӱ5rT +;k|NT;TCUTAVV(*[vd_IA)|ߩ~l&!rՂXz$A[ D}f~1zݺ%藘t-gR;ҬQ[>6H^FTPնӨ[JZEn:1$HTJDHD`ptCXrD`& +EQQbcVϧP(A7F&T...nSQbbb\.qd2ٶB +)WǼ<bd`*U*D#" CPD"H$,m+Ѽiŀ$sئp3B4d? r[QLkh#0*&,ٮ< NU!^:hi=Xl'V~ @2cR/Ne -h23 tDLȏ^@i@_ ee.|ZG{;](묃u4 |6|G۫Z9m⎜i;Z 9k9R,$L^rL%$ hZAc^SyӡƲF!J"}U_R+֝S[ɭ>] 9Y)xIթ>VwD>He1d_ʼnJHedoEa߾B۰V$"΋pzLě]yH>ReX01Ob>9 -Y"xi$[kx!a ?A#bc +y#d޻E~=( +_M G(>J= +PƹihH7~j3f%jv#_ yOkA9s1pc_n(7Wfx1["Ry̔"-AS<.2m,IM#ǣ)`YޥpF3CXDш~Ǣ7=Sn[Bi7G+vc8\?jˀH6\ b&N Q/]>&}>c.b.xȗ6zK@Ѕ>ܧIOF#'GAdpG^?24`G! hz7~=_u#kw_Kbo_sJ5 =MDPwJUwS.D㻺y)U]*7tTv;vvԶgR^s=qSцeZvmGL>j9"wP՘m1 4m?`ږ8 m_'qL}M5{ku95j`?7E/0+l,zJ8쀃LkR6Eӣ⟡nlIvR|m^xN6N%+ 6KNlVsVVI2ϳMYLFj{'$<rϗXd̍gj z:-5V}ńX+z C\)B2kh@TFARGHH]NH":&-5r# AHjN!'&/H͉$=&TJd~5=Q(7_zC9]y>W+~?5oBBҝ;!;([U?(x @$ 08ꀠ*1^ݝk: ZߪO:ɫ~ *Fy8$F!D"HI7D/"`A |v"y9-HD*9_aFNBEqsr[4\XPmV$j:Ry2p?ӊ\V/%"u <^jC/ Xݫˬ))=Mtyfzy~Cu㬝uL>yTkc\WO۔<֕S6\%`8tʺ}.w#| GT`8B"K"%, e¸i' K*d¸閙 JqM"|T2226b! 0:׿LAV3Y d#o3Qf *Fy8$F!D"HI7Do$_g e' ٯ󟶱<}8$prB;̪jJt(BZ(GB  +*3=f)7=8{ћj6I3%_~sdɊMf:5CX,Xu׊φ׎9P~B.=/}x zZ;3EB'[QL^kE6gU6?mK3<6{7y=Y@ڄMtn:}͏^̍,ϧ͎mHxu/?<3/G_v.#ќ' 379`$4IlW㴔W˾8 kNM5~#sL{KsvgĽh }v%Ҍ5θ׍.)7.'OYK\9Y ;K'Nڅcv ǜԨrf$>j[b?>&O i *3ƒvEWoסHt@s_@kwo+=GZhe'0SE4u wW^H.j<N( +R:vv:vt: lRжڸֶmo94JYG63kmCd:D)[¤ChAZauMdw]e-ym{-/kj* Woާ~?f{kUVeǦZ3^Bs%K"Vgﵢa#|$('t|6|<;8lfb\^e-sbP?Ϩ:(KZ!Q})ه?.>٨x#f:БwN ~?M|A*Mhob^O6asEtnEgxhㅴ1sc ic'9P>NsٞО +fnf'<'=C<͒<jvr6}a.yi|/cdy=P {z@îѳY!WR7qq]?N SWN:+'.w—N:@' 1N\vI42H>j mK0I}jL;OP9HYE9s +]_"}ъ޽ikz[ަL#']qxCL7u,:w)q;;;:C ̷۹5h'Ǻ6.l[%5R푃L%&@@m[xYo3FƸ08>Zq*iX@]S3"\\'R_SPU[Z/osn 2Hg!ٝY$zL:6b Lx=?ɘlefzTLzbuΠ8e`hZP*\C8a6imPlE0gXz)Zh>)D ;FI҅c-jhUT% %U**U + +%?2%%?Br9@!O;L^R cD"H&?+"h] !BG1MDCIOaF C4ǩb@ +YK~YۺǦJ L^BgiE`,z>|6׎`!:N {+>ǎiq=-ۚ ]wjqa̢M/1(@GmL0^*\@@DQ*mqE} ".+hSҝ6:,NM_眾&ջ +Kbm9g_,b}Z &,CYsANfw/x1OgSI/ +~6U>ɸ1#h ,c`I9y!1lvs\X܈2;속8fM6}Ùu!';n+nf]ql0zٞpAQR_+ dܻw75s_l +֠rP?9KkDGz >rp&)j h-h7T: mBzZd݌Ʈde8Yֵdǻ;J;# 0-DigCkP\yjrX[-ִr9rpfX ٦d g!S Cd?\@)êZUq$p(ԓ9@2D9XG;WQ}dMquyXuEKIRdk6[刌bNXt:dR+<jS͑D0js 9[N4Ur*Ԭ=v>k.nÃR!X[ΧZp>`5FZC +ocބ|ț K>z..e/fqϧ)2%deϦJtP=sz0 6`D~/O17AHb|%ZSD_3) +iGu3ʺ{E#Z'xwCgYj(%:JI%$!J;rX{=jrX[-ִr9rpfX ٦d g!S Cd?\@)êZUq$p(ԓ9@2D9XpMeTۙ%P- IXFd#Dl b1^/2h\L:-`c1kץr6i-kӨwVMp!OEfPq"𬔽Bp#TY0"eoPgl%*"YuДP\ cI7BLO.%OKO*%m/T +ecoL^+##)Ǟl!Ǟlb"vB!"|X*jR"&)`724@  |ߗI%]fyJn%=yr}aL*ƪ3,/MYYZ|3g4w|qۈ4 +K5Hܗ%~W< ֫J\d3`r *U\&-pX͊uZeG\Z_1YOw gUkӾ%֖k ˻IȒ rz5 +O3x6V&LM鄏%z2xȢ<XRafZZ;O6 r1dv q ;.l3.^CN7d+nd]ql0zٞp,x wҹN: 9NYUnn??(AF!B@HB  ފ' 3s( Z[GNt::pkU}}GR6U_=큝B{ OziNx2}ܭTLw2+kM im*QMUXVS`Ү&qdxG$՞nDMX1O4{8#=T,IaJpl1=ԐB8rU1u FIc]u@x?bR9 +zxe_﷽Al7~$ζp R;˲'z8Tum:ڮH+5]Y;;[;a- I|MA|ɪAmkw[wi۷JqjFt Kj"ŊLf n ٌ fE0wnry +lLV Ⱈٴnl&Gj4l8AɬGqa:NzTV;lV'ZV,kMRUA*BKRBKQLK.__2 "//:i J ?vI$T̏_lb"60! a0$QC`2AQ@ ⽰09w*8\ʼߋ8)+XTNU& A4G It$ky:~.-RVnYFZi@ʝ#? |؟ǏyHl&{sojZ3#elm'*qe + +`2E,&*H݆,FqnUe` U8hDr0(Yۮ_\gmG[ˏ7Ge +&ms.-Tg=LZߒ5) ^U^ͅVnejN?߫Bb3Pw+w*Hö́@<г~URf7)Z“!ke cNz( x_ A@iR50 ݿhO!&)dy_^yL A nn^ȍKٴO{5Sk^)*W='K'V*c8+45Mfp҅6&F4SI;S=6$;"tK&hRx!ݓlNy4b H2hL0 ScÍ!D‘w 6 r~{n0J +#@R9 +zxe_﷽Al7~$ζp R;˲'z8Tum:ڮH+5]Y;;[;a- I|MA|ɪAmkw_O-:dVXFhy6ρ'#nUlrVyUB+a1YaV b7g3yT_oVaY zNf=3 kϠqңڼBܹP&/V[/⎍ը8iʼb!XKj"/R[T0P!Jer? ?\d2D^_t^%%%J!%~bH$bGE$m(aCaI XF9cjć+&C6)R+C.@ S|>-s*8]J$`nď)YY-?F_q +:Ѽ5= \z^AŒr)UN]hMpWE177 +q?Y 8L ZY̫.5߱ Ӓ+pReWjvK$T|.RV'!o7<zv+6ty/.?F<]OBGA2ۣM7O>-=܂rJ8 Jy=F_V*Hj^?ݫn%ŝ +ȳ~UΙczz\ +H.%<"=VF0ܮk] qZ\if/yO N dI}oʧa{ʝ>s~ @9v}f"@uOyGuttR^sN:U\Ny!W='\:Qq>V*c8+GΥuC&38lMH2F:?T?#DK&jRx!ݓhNS,I#=) IiJŘ~57qen[ZRkZْ b!3JLMea x_%,ɻ&$`̎ E jZ-woR>U_{գRMD1gJRX1?''qXp|QXt? ! lCL!"h%rDw.jczhWDۣl5xۺH:ܞxQ5/e2=+g-]g e% p{.݋ngC;&>͝wnsn}<3SAqڡ~tvp[W)~m`˧l=WVxpi.Hr 4=aOF/™TT444N%&Td"Òf:1ҔL)ՔNSq$%%[{(x7e +EG8-Bpha86"`h˱^" pOt']qP6 gvŘj~@=VtЪٌgsDG6R]ND +='p3n;Zj 6G>b9ҙ L91bȱslk0d6䘌܌k6QRgk9u覵|1jmɾq;tZM^iQjT4jdN޹U]B{ +Q{JBr,˥hr F29/%\ä2~2 /ٖd$R^RH$i?vމxX,M$ąVXX)!B!~QH*X#"VYFaeC%Đ`a@  Ol[vz>eY%$7Mk9fTySjQ2 +d*/,:-xlmUkrϦUsx<_9MW_jj])‘6$j` c m6GC}4iҖJ+7k00*+}~B[P(@M0qkb.}ev>k\^ynE;wϱkrLjHXmMz]16j]hh^yD֢|ə-,2IzL&lԧ/5Ѹ u +(ޅ0 Y&8{),'rǂ3XX@&+   %Y">RE6E32̢3[k2`*|J!> ++g>۠\ {s +8 ! +XsQ`Zd U;d/gX,e517a2|%aZLRIu~ 6|u&x5[p0[ϓ??o7 s5Xf&` rfsQ 6A~A/tW y~Zȳ5ުtƮɍj *%JFj*M.W2s +̥͂ +]scBTr#Y1۝sT?ԥvDȃA-{c@˞~IXdW!݉}JzBm = +jrҧmw}t~ڳ9oow[W}W[ǮmݭaƂ;.s8Le&ڂBjyn[u+k^Js+"q%xp8]eVtFmk늱QF%E{P&3RM$WGຈ%p.um8ZKlelXLf2 f>| `0+(P@.Qf2Kaa?,1c!/E|4$`EAADX$VR!d^aΪ)ó ̢3[e[ + Lկ; >R%jSוٳp^,E6h-9ŪN9gޅ:oUY [_;g p$rO ` 5QVEB,aMm{7zm׳!j}VǛ[^ղf/g6/!}VXx ~_ŽZ5BݮVJ]͚Eܨa~^cVZT?ԥvDȃA-{c@˞~IXdW!݉}JzBm = +=YېlO6$%~1^۞7ۻ"\Q,D 8y<,+#0&$R_" +zg )k^Js+ +ϱkrLj΄+vjlo늱QF%E{P&呔afRM$WGຈ%p.um8ZKlelXLf2 f>| `0+(P@.Qf2DpX0_Znj8 AAA~=7mdYݺ*;7Rfvt:ζݾA$MBH%$Z-PBin@˴IʒeȲӄo9\4XR5Bxⴵ."TDb G9_j$h|}1HO2 AuPO{ܚ5q,Vg\+ NO:#] q2^x޺ +"bx8D B$zE &1s]511?Tǡjת Cs|Ovfʌx4keCoWs/Ͽ^Y?+ŦF|y_ۊ/n +n){m/5ia# +Vw!J~&&Qnu:);E%7Fàsa"~F̜ }ܟ?7wMeS瓃yqVڙ_6]t +v1ԁ=l[Hk޶L{{[|N?4xI{ qig%fQ :\?\*RaD̙C䮜fj1 2}*<ł&B ()q>3A .M!xù}S|T&9581}>9W;%]\k|0יʍI:2cGOTӑK >KINtp\Dzx]mth3үtL =tdha?4uҮlotВ*JfZR=Gie%;@wJng@k-G}ȾT@wvgow|&_2dv IdoyBg\ǏK?XF ye/ }"#JUH(߷ +M㪚۵&7]"[/=A){=Y#kqbȆrpM(&]۪J5J`T]EPufk[5WefiXV`hSל٢b- )kd2FmZ3`Pzӛ?C3 + E&~V%,mB +PB1{>Nt:Nt:"J$D(HUBqZdQp*"1MjZ/)I$hdeoQnn@Al^d3Ijjvl~HMTnTb2($PIK7ʪ$wmm6)|չ}sOI;٘=a'3<':<2"'iKywc&t/rQ^͈\tL bh 6?`aa4f$f[a Z_2JWnW>Pvtx|c\z&}:*;"ϖX6mf@L g{ER&%C8RTJQ*0N +lDɒup I`PrPedI{ RN,,^ _qK¼,0$R~R1/鮤^I:?vKK畞{-55&Ǯk"HIII9TB!BB%d2(!@ F YR]B,2k%؂?c.[,8H@IRLDr̄WE$tKBȢQrɦwӻq:9`~ +Me'@ +WP̮ǣ (͒gQr +`ӁԌiy[HdP.lZEݐ&۟2қãяKEe/S}zsZ'^b_۱Ͱݘ6fʏs'U-8FqYl= ~r"nmމᓴMZ;hfgQyݩSQigT>me2/ny±q;:V9-aKyػ1חv9ez;8sz5.ll\ivЂ~+`kOeE6&g&pɡX&YhOs3cR44m= 1MLo vB]$2xiӘ?h HZO'A izZ_ zhD|ޠ,?SY'@ǸL~iZ\muiVZv.|n-J;wXX姆 E\/tSRxb +o2_2%wE=SzR-k~t_7kjʪ~t}FiEyM?SB,5Dh"RA4JWL~zuPef(F bOS +M +Kɏ4 +;P9{T";knԻ{Bv$E) aI"J~I$#E,i*--HIMM=RD"ёrB!=hK-!dPB$@, DfIidY+,8Tsb1F +$Hb"c&I!u@NYYT6JXNp^VB锼ȡSTO;=[(J$Y(;t +5Ai^6R:+%7[ ȦD6JH|ߐd:|)||-l}6ߜ*>UF|^,?I9}Z(6 )Y|= ~r"nmIm"ڇ{t%ڗ6Y@[vƭNV&N8|NcyxnҞfHzP.s!+A :;`ƞm湅bLYLZ8MPq,9_l1)cz }6\&&x 7 q.g4iL4$v=ӄt=4"Uʎkuo^lSc\z&_I pmLV&/A[l]榕ƴ]m r7:j";ѹ:QakkggkvkjpgVE@AB*kq.O@9]Eogj; 4q`V}ovuUعnAAFgVu}]}<\LwƅugR=iiOIrEjUjpUNyB\5L:[)|0v:E5y틮PmtxDٿ!'u)M&ZLRe)[Rb6.3SO& 2[bFl+̫l{j5DeCCs#rCFVyڄR6S!6f%Q aH-AQ! EEP5\^P2TZT$IA!bBAJI]h +3 fR*5cD;&*BΪbH!9qQqShNhrS)(ذ4/Y,o( ~@6mV*SM^gHNB5ɣ䳯 P:1F_kdR pߊ88ԠI.TmП/+5ſf~}2_ս7|g.5CrT~Voо^G+aK~֫|a|9\b||XN-ȵ%\[vW=ZW.hu, +bmfrr$5ߓ AeXpT`ҟ)zy'hi«^,A8k*^2͗aWн+/m/k{o6r[Ze؝o`/ah!xʭ..l OLw&i|+c 7F!ueb]u&kc.|k'ޟ3><r$:8>9ڛ`C< =CDJPka( +iLDN$3 'B )TdtfUUxg\XG.~1!3Q6H+W\5WuT'wE`s`SC-w6k:C]"- =m]V+VKjZF`5j%\f!LF{e1dǯ7tekĤˍ^V:7OjևTLG$TE`έ|SQ P*4P +qNu8NxN G1!9¶EQdǯnBQryAdRRRRTRiQH$%b!n+y'!iÌ +xL(3GD"ю +*D-jHN\TnچTdžfUy䣈gSA62+mڬ2^c`NB5ɣ䳯 P:1F_kX4Z"8:fDBP峁NTX(G8^Ry ɇڜ]O{_zXA]KRy>j*ȗWˁ>Fr֋*|%|a/|\[kK4`=H{:v|SeA3Oe)j'w)<)˰r+ T)?)zy'hi«^,Axk*^2͗aWн+/m/k{o6r[Ze؝o`/ah!xʭ..l 皼Lw4>K1gͺ2F:Yvֵ1>Oڙhi~9mM0!!F"q(504&\'a R!VÅ|Bu 2:er3.h#V?(_MOO{ROJu+RdP[:t*;"p9tdHOk枃۪;µg_*-@Q X-&`1Š&v}a6dԿW̆_o4 +ʠnIBl+̫l{j5DeCCs#rCFyVyQ*1zF +ߜr;p4+(1b Crm  Ɏ_)* +dEHҢ"H +J 1C 2VO3K h +N +Ἆ]ME2N<MZ% fg9+3e<ħT2T4%gy>< <z2Req,GÌXņXHtX`!sL~ZL`2Ӝ{O6y =셍߆za7=bд7fqnxunW.'$uS.' t\hkpU鎺]'Z`.;*ڎ7B*Í muW2sǯ8Ǯ֦]JeXZQ5@uNG.]$WrsuM4irUC6JhH;P3_! X{&!$PCgBGN]:Y{T_wW]k&Ոz$K;eC,ff6]8Ib +[+wbU$hSJL[#dqkLbG座A]>.+hNct0Vy* +lPsB7nVCF"ͦjF~TR\\\ЊJTBQPryAdy%RH!ŗ%' +GܤqԈDMR⵨D"\$>Ἆ]ME2N<MZ% fg9+3e9-O2A|e\dr _ ѽgy>< <z2R +ٌVhк 2l &l?-j0i='Lhoz1hhO3z #7=u7:'tCh50Th4-lZhT 뷛J*((JeAQ(E.LWRH!R| !OQr +AማphJxm%\̍%RYK$ClMHCRjDsI]0h91~SJI2d$_#'mNq$)#N=sR&e7lILv>7&8QV S umA!VF[Z<F5(_>"X{ B#f){7hcy?gu~:X#g漚 fg9+3eZpA|e\dr _ z1 =@YE=):NXf3FXݣaFT,BbC,$:@27dE&c>͙dw;-^mXv#MqiFonpk 52D=nD:_'>mdggƞ6dVVmUmնi$@DBplcls ٜٜα$#Iv/;ac)I?{C/\vC"\رDx:91,O3ן2ylёIrg8F;X#vhut$wȹ0*>tx8&m( +EDje:ҒM'%9y:;8ŕh%WS;u ~'uϋo1Db{NF>vz5&`M;@-6;V`56YA۬C;nc4OZ5meϯ6Dz׫W +xeD(=MFRrb0RQbdA`;ByN^^C: a2a%tL+iڊh*ZJ(J(RUU%)9C9>PlP?C 80VI!.~)Ĥ~/I'`+ɤuT6]#s~.*l']XI䈢M +:%s&<pPshߵ#"Pkb]fDFvR6?c> x\*֒U>78mW[mnVXwA ;ՠ^?B@韀vI~rԫoԫ u?mx_So^?juW>jyWos`.4b-5|+.A/fä}F_zAmj3BO OO n- +o 7_X3l+^WP_.yy.z{a߆<.x/˞$jIByͰjw'OĹy 1ƁhWwVo0v׭XLlZZ顝aW65t;Z5meϯ6f)jxw`bv؞&#)9s)(R_H z|KzVp\':^b E1gPC`LXIt:ӊoZh4V%R*R( +TUUIJ9C!T,(ā&ώA;VۖdVbR?Nɤj"e2)yCb\{__~c\^\~6.HƫEQi=O {ka{׳ɕcmv/z~qm~qunqu[Zkxg+.A/f~:a=!a.T=zv4B< +ndtdPB)dV +n7 ffK2{xxՇxp'_u[pi^`\S8#y&'jS9 7k2b<_ e>dz&r}c\x:91u Wg? e: $#jruG;r.:ux86$PPDP`/tvgmHZHK7՚>jIjNޤ;aJJ4Ò)ޝ:?Wog?ڕ98;k;iI>;lOEO9o:VN+ϳYK"6Zc):N,fP_lr]U[Lel*HEl #e({}fJFA1b9=^t>#%^%!a\' +/ +/a2a3l5#V+9FSjΠR>JRr +UUUIJ9C!T,(0UY>;gNF 0%˒lؒ-6In;鴟_:̶&$@fC/!c$er97LOUkdaǰL}W=#`v_"|*^N/V(OK$b" ¬z9Tۿ͠D9 jM':GOQDi{Wt?Z7Fd^E5,Q p@4/n"%ZO Pf.8¤څ̘E kYMJ]Ad>s?|#Rb{Xq&?wapVkϫ'7K'criR kk8i | WbA7:٬{3.i`c xp֧z^tƬN8bVXzdg8P14jYx`g߷$xRE%Us#`vcSܡ"M[S.$,0l 䠕Āeq X53m[u_k^*;U>f;FUqݼTzA^ʛ=\-x{nĻp:˻x]g4^UΆN>:;:\jXי6=+\mguۦltu-Q[Q=Zr+e=^pW1ApQ~^W A~ut lQF*jKV~&-yZ"h5xFؑ p5T8 Lb%[*5J)E Ȉ(!Bң"M'Q*,X!,Zw +EF-777#d2Qd쌖%*)B +)>%c9%dC(= DȮ}D"{;D"R'OK$b" ¬z9Tۿ͠D9 ݇{P m>mFa?Q6h#<{cE淛@6s<2jY_Dk3Y6#?l,E0d- T3egYr¿(IEn/J?6"vB!C7+P H㯗ī EIy^;wKnlg^*am-'m{ۚ/*X"f=sQ=u'tp ڜv6'`}jZg=RM:cV'1+t, =3( X Z|H,<߷%-xRE%Us#`vccܡ"n[V+0l 䠕Āeq X53m[u_k^*;U>f;FUqݼTzA^ʛ=\-=Q7]tna ʮ3*brgC'seuLus5L{T}L:RŌK2UO6q\}uZRRXoM<(P Cd,, +Et /&ڣO.OOaZMsӤ%OKd 8;t9̱2SbRMEbRJ E6H !z8Rr $=JX +LT +aâP(2\.hG&*'''cdggg,QI!RH9D.+2j!҈@N QzdD"T +ϝ_"E%1aVpP}fP +o!6=*nP ؁קͨ"R4s5]cJDl-錰i`c xp֧@kp&1q:ky,-> 1mI ޣTQswI!X3w(m&"nY4D"V^}Eb"֤C-no Z{Vx^*ٯ6<{g<&l~iժ]RծRil6\1^I &8IAMz$vflx\aߧxLb΋,ƥzHԛKEbsR󜹼1Bݳ3R]3cF;:9#S&:'\H qyPV{r7!ՖOykRv.KǥΏ^qk.ۢWb]K F}.dk6gr5(c,a?VǍ+mVEJ}VKmج暲Zf1L$P$.*q PnRaR%q " KσŠВ"1U) ĤL&S]1u`0^_S:hںhjJ 5PCyA'yY0c(ȠPFIRU6Vjﻮ맪)D:Le0F@77D;B^` ^dɢcbc&YV +<",`\psZAVY@j*vbwZ9sqab9a-'qljg(]E  92|јrvx)rߣ^m7[!o6׃f3sY*oUiou|*F j͂EGce//֚gB5n&˄&wC+A1ym<pe!7AW6Iay_x{>{~qYxe=mEWozd=>be ܿZv Vnx[wthzpR,}zr)r=[\څR}KEN:/ZYL"iPo:6/YIΏs<37VhPTX #ӝQYSÜR\NESr.M Ot<(=9jK'AD5x;R^陊&;<;9r5:=y~_1[)` vvpNeA]@puEz;i v"Vn+ZsX-V[6"V U,fn)Pe"I@ Ѻc"a "9"RQU "V +)_ +#21d;F ^)NWwZm]h45jim^<=ct!/B^|  +6T**U5U}zT5DTSTc_~Cd#6Gc"?.'!+ȒEkdž@%Pe 1Car^8#fE 㚜@@8GV!WGS&C8 1g DDkͱk츐Ǣ垫 +MՆ6BPK#sao{1r=?owDi&/;<`zDo +{~]G=;4s-dny՛YoXY>,o݂եF]7<$\K_\\O'vTRb΋,ƥzHԛKEbsR󜹞19gGgfJLr*sibx#5AYބT[? %.ƯI۹,6? $wj"p.;vcEq+xE!!BσaXbRVl\L&S]25e0z}MtjF)5PC 5NChs~ ya PApmJ/m2XUS^w]OU S/NRZx#ZB:r,Gc?-$dYhذ,!4NKN^l^?H0|.Jb̂y~=GFnKR~ڧT6$Tf}`08޵ۜl/>oc|;,=i!`ŕxG_ZL|b~?xy/E&{L`2$y''PQffɞH6DqԉR(UU9(qgWUťNDW.mڕ!/5rzpe-Bڌ0 VRRd϶˨ҬGw ;·EoB9 KEDY +A^L!dv&l<>H[lVd<#ҖǾG޼Rx>7Cf<|=.Sw9=𔉻n,  z.~.}%8/p&EqI?G wۣ_FkWzU꾶hgJUǛb@4*(SkTEa RU= ]RowWvwЙVԥV'VQQщRR(s(EIj*Bv=±(ގ"~;l(h +!شL8V}$ +gK/] |=7Bj0ކCvb|,AU,˻7z_vXe` !)ϵב20 yXad^˃s  ~I& .TYE>Y'qN 98eS6 s Rbt 9UIUY)+A"X >;bk,tf~YW}+etrhk)gۋeBiV#Իoâ7s!)Zzz&,EB#y5 +A^L! 1m"D>F:է> Yy,yah/m72 !d{]r{$n,  z.~.}%8/p&EqI?G wۣ_FkWzU꾶hgJUǛb@4*(SkTEa RU= ]R]@W6:A }R:k/o❛@ݝ mRmnmB͖?]h|sM7a5K5Թ7! ʦ_ⷧ6Xk"-8"n-1[4ƀ8 0&$º,ZlXKBfbRQ6~rl&yVMsͦe221 +Rz?j MDSl(@ +HO0Q G.$BX#GeGA؃Yl`ey䛏a,Eeazy(+|~^N#V+? +F9juNŲ ȥH6~=d*X)E)JQR>J!N %,nqt!M:xlCW(_J[ S()+HwG!^K%w0ÐQd uˈ| vcv!ɷo޹7ǧ>K#8ڬ". +fAnUſ5B7%_^`^mfj|;8Z>,OK!휏~7立 NZ gC@lΆItb2@D ~  @BikA@N+OD&IxBHYa󏽰G>bW +O}sCٟ=!.S{.]8,~7 +`rFxѣd#zƆA|y*~fXc?}-1 z9!*UoT!@_hC7vWʮl*:ou"Iww.hTԵ_S^_v+ 5<<NKWՖj+퇢J/U$vHyc' 78Oa !/;ۙ;{T̕~{ν(9%s\"9Jdd}$=b@gcxF(c=#lo`_ +{Stw cA, %cgϝ>m6;Fq8lna"s;4aN>m5^f Wb=TL>lD늮3wE% +yr(NEh1$*J92q}H!pCX) 3Hr[8=T«"0L_# CzI(VjPCCiuUt%G4ZVj$Jh40|qjz_ST e(C@FA]mǩE|.1znN +B^Pɜ/_]|/7PU\tTvUbbL59,pk"}M;SyQz~Tr@I}{^N tB i;>;Dаzk{LLMo0!ri)0S\|s9|ݖC6J+^.pA[K ?yVQz^Q+|6!I?0ll0PEBc)@ Ew;廰;~x/Dou/duOk)U"wZ3o~˻?݂{W|?6pSKg/Lg)IӗӐoR"`Щ иq).­ 8]r\Qk4`ѱd.K䢣"#B0gX$v&#Hl<K3BT+ԞvN6R`O*ME{Ρ .op H :;}\iFN;bYi`3d9sح;{&\FYbL>lD늮3wE% HT0Q40c$qI$Ur&vp~)n+DU8)MveUXuVWz$E+v +5 (롡tUV_h{HҨԈFZ V5JPP2o +tjA5o3806 P::3( +{0Bkcx] +C%~UN|4 Ɛ,2ftxasI1t~@̀ۼ,X`.T+͈iE3ÉlfA!5QH EVD ?5dc|W./ͯWYU d^"P oNd.lv;@. E>b, Y{tSZ%z<-3wfz0ݾ̛OwA~sƏ \g:1}~*u0yf:}9 f*9). L L}q"!ܚPllpӵ-FXK"D.:?*2"s6ɊE2lH2{" HlXpMcxNd7ݞa.d:R=ɳ# 61tj8ζ?/p[H`j6" ijr!NqrnFŀgkoaJ,½Z^YbLbCU$L.߃;`jpYxU:`FX] P)70VY}-Z#IR#&j-L._܃Z~?5?y'&$<6/Ni3δ3_n^z*€ s/BG ׺!qϒ D/p2{&%h4Uj &=èeA|.3`E)1n!nqQz0q%GA> ƪwp5N|̞VD~g?x">.bc!6ć\1}xyXc>,?s1,kX>s[O[=>el+՜[Mb[N, /M=wV v* +Y-y<[|hiIcʰDK'#pInG!!(A3`Aث-^ŽwE =of${6G&; p<\K[o/F~K]CDؽ[BFz!7DۆzMvp{B̓9-8Ts +4؝jLu 5k_wQPcoW3}캩jJvpzIHO{)~%ޜ舟Mv$v$N'$_N~sLJ⻮ -D.6oGҡ6[y nSSScyhRvt:ؚua+ZY~U YA_D!MGX1۩(dioY'aQkd77.M²!5($2h,}?}{u?_[bn@ Lz>fFgc~d?Xkw[϶u]uvrx(秱؈Ѕ 8Mݻ%tng2|cHdmP97dW']NJx@ȅ@w1 ǥ?>>ezgB~3'|85`zV ۘk `Y3uz5{[M.gEdU-de&Y~+z7a oڒ7cgъF eDED$7 N`٭6;׾lNjKJ'Rb %B$p\.J:fz%l #}4|^ڸ/Kb} bQ^\#QvWNmt^R 56Y잿Kla𾪪ϖk=X~U~CIGU'XנLIYf߯E[(I.\3?=6]Mku͎ #:u`bTФ #Vz|h\־((cbj[Ŷ1Q( CB{>SH OR+\Zs}9lOmF-כW l`Pz.J1g$ʺxi +Aq 0LAF\Ϻ86ↀL`baM;`"!i MfaCE(H㢭uT FENJ"qS$!('LAEs9}BXPa|q ?<f7{m>)klNMMz+5>Q -ϟ8ǔs*r\N!iފӍ;>ǩVmVmVm_sqA'1bg> rn 5@UW-,dq{_.#y>[SVۿ{.ᇒ䉏N m_)u/}NI1^shz%r-H5'91F+ZR!T4BJ}(1xJ㴣9?Yy]~7BLkyI u%y%CrYG @S8.4lboȝ/ovzV})jgAѼLqzmSt޾hD[k@}V0~\MA V߯4yڠx@}B|NBbQ]٫eGI:bAR Wmܗ%bz(Vx~/([+Vxv'Gq#+ qyQbm:x2ǖa?$wdfGgdWrzZ]#+3ÈNuy:;93994icbp9+:bX.3bml`LgT+= +c̨|=)sy\ҧh).{eyVk'6|#ߖ-@xƲ݃-3ߞ  G9i?1aUrh>Z8 15T,l&2&p¡ϗt;*^A0@*M`5@,Sl̄lF rmLOiLQ[ATHڋ$ Y ALFaM +Z~ki/rM-M/iDV[22j/#9!scQ!1}_1Oo-rrDQLZۓpopP{˃KÉAC=z. vC.tAg~TyrltNV[}] ٹDDK=ќ5'm͸^dѶXK=Ӗ8;mJ)ޖ֞hgYSnlOk?'.w\߿8EW09Uuxp9*˪Q/zc` +;8r,taa HkVcK,OZCft1}(BEQU#H]$, +AexYa,'a +Ηj`}%gXld2!Y0Y`ZkP3aCQH3#0sS@S,2bXcG|PѴX1_x}bZi.5!yz 5 *|x)/rlԽ)IV+vs(JDR_C!u< +v :d4=BCG'ȏ^ v=)2] 2l:{$9u??,lDiLXmQ6glc&¤O鵙0:H5۩AI:0+Ú^? iY~Ѳx Zj ~@F_F?e$`"dn 6;*yU3 9~sI49Ui(Eų!m|dG>:F.\:ek`pbP2PKj H}?]wnwoi:wCZs߭>Yˮ\"f%ޞhNDSf\OszSbh[%kih^W]{oľCTohwt}?sZ\uۥN>s=zFo +CNZ`DdUuxp9*˪Q/zc` +;8r,taa HkVc0] m+)z(%FQTzl6B)zlRIE"BDY8^Vc²fZ!E_v}ə-,g6 7 f?l(iFaF|a҄*,HC;px`( CIx9&p`$oDy\Qw*393(NrƸY +yz 5 B|*ʵy_״Z3P8&U8ێp1 +CpbI@5:ҁ +4\!V7k7_1[N`1c_X/5 z5Wq}lPճu@mc&¤̈́sN2֧۩AI:0+Ú^? i0cI@CHF˖&4jq"@-aG~%S$`"dn 6;*yU3 gޞڶ_u|,ɀ&̾tvvf_ٝ}v `!ʆ܍@\bn mi \]HM!>8$o7w1!["WÆVC,/4෗Dl_˅!n.ŮLgvd^泦FsΎ@:u+r3iACSFcS;C/&2rROf69-OOI+G)gip7{@TAG@T@@WDbX,#-@,僨+,#"bJ1㉲򣊋Q2AWD^4 y5UYi3`u $mфg֞)_3DHՄy (M=WWY)AL :[B |Y7W=vɇn yuy}«zy,A f3S''Ayt\;~>?a&9̞_m. vϯ:ӔY]ⴛ/ + 6vYaVX9ݐM#G! R!QAͻAD,5T$,-5X>a)pVj*R[,Oׇ,I1㉲򣊋ԾY6̕Z :4h@bUV(Oi",, +){(P Ց0|󈈌⹼&!,sy,r "$,H}sCٛC E4 Hv~2gm'q[Co] z3S0OOѪONҿo<:N~xl[?F3zՆ͔jg Zb5ahA LdDI?ٺIHճw{'wd;1VQȣ"? +D}5KQjb %Q>,/{WQB Xzr9)׽ )fgMuύ +t(cW +ug 3CzӃ:Ʀ +%''UwdU_NMd kmrZn0WRfxjKK̦sUԧ93'H$3;sn}lt#;p뿝/vK?4 , ޤSz1cA@KTF^9 +ű>﯌z~oY}y#롏CbhaaD+5RQ)#<E@ʿLA*#GMQ|$0BXEP)AjʍŠn7qjs\Ӝ~~9r8ݜ~~NXQn8l0}l# ++Š9ly> +: +n1KM!gXo{/{aMJTUoU՟IWH$^B8Bb0G̕W0!45ﺻzYCiGh~g<3gUl9%=+Vi}٪R [ϭg|}?I!\hD" [Z#tE} +)ø!40ƳP1*_fE,dECbR%,L^ 4xĸ$˚be|> I Ib,?Kv|߿l1۬`+Ew"񿗿!^">o7I? t]"*Iy)٧|/8/>D ^.yKV>Wf%VrT!.$btw)),F` Q5T|='@a93NA8/ޘ C֟c^SnӃHVCYV9Vydh&i:ttݚveS7'̤h]Y!*b#8dL}OShVۨRH߈-Sr/:ܓid3ݙk ud(-i~؝n}ؓny--+2t7}9}GW]8|37{gp)E>FX|/ %!0Sg$(MxI1JRr9䪊+QWv',nC6:^k6 bSלŪj=rj֧f+,n6C,&:~L&әf(F5& Kw>v0m2ԕ*nĉ_\ ^냭)kv!s6SO&d?ĕ Ǎa-&J@rq\y7+1MEq &y\KQLig1[J/Ð95e6q +¡]El{ԑijjUj~eJeZ{2-صLs;smް!N %+Cw]NIsl=tǁ־[~;*SqMn;2vZ'DsVՑGksCT*`'.Vc(VEpK}N.Q%WUNg]9;aeqZlU:,V]VX,2Y_)[ `i3LgQb\̚L2,E> 8ŒPWPW6s꒞zxlH9Vz`8*OzgXጯ'=x\hD" vjya" HY_-Xi"0*s*``r/X7c".!@:e^&p}~DH$X/gz] gH| gP5q~MmG1K$) +R \`. ̗3Ļ8J_v/>o7~~qPMʓ|'e)V[i?ĕ Ǎa-&J@rq\yXެĎz9.$btw)),F` Q5T|='@a93NA8񔇮0d=5f8 V !,+O +܌<噰;uk'ەMOݜLg;3S&tNfO܇m:1>MmZmJ-#}#֯2Lɽ_Om\wW^oWj%#iu|6!I;LLn869<8sB''00N;m]$[vQZw3x~WⱩP3HSpRNgƇJEk[|b`ǹxo&z#`|R^7B74;3cӥg6cF/.a\.Xi~E<ATἸ,"+1+0i4HߦPU8Eh4"YΘwEB,`b_<,UB^DA/U{ +{SR@K]7ciN+ +y/CA|({{w|++hT̳@({`pU]+h#4/?=Y+>m8i|rQWN? llkw)f\Zn7WZE'+ǩGyQ\ Y ެDy2?^j˥fȋţ?B^.DȎg 6üht.B>%DXG"(Q^XIzx/ r Vq]NR .Y Bgna3<|Or[|~6лa|v+3Cӗ3lLf߭DɖNL띎)1>Ufgj,/Sf{rtRʅHFj\Wz4- :SC:䰠3QN +]Lǵo2]ɡTwz$ޖ:q6?q>5J d'bʼnLׯ&2_tgMM>r aՆxݮ.'q#Χt@8R~aHv:lu[F7Xi KU띦HSKjRD@ H*y$^WdRA`R%qJx? WdEv`XPY(Zgf*K̲e2 f<3eLoe0ԗ^oh:iZh!~?0Y&|y, }J&}~5XT\FϘ^_)("!eqT[x + za~BԤВ*jWMX" +C˪W~ +vEOA_VqE~My%4q2 knB 1IXfz+f2Ho? 6[YzkVߗOQK'cԻ\ x+>&Y}~y_O~k\i6WOޮޮEr-dF"~/x5x^W -R3QYD!/|ddz]a^4{:!Gsl,x#O\(/D$=8H~m.')}}~AV!˳YK`e9>?˻͡wgWf/ec3gbޙ;[,?)-ח.;Srrc|dX^T褔 \hZ$Nu$u$SaAg;>\ȴ]}+9NL%SɑȗׯwįNuƾ8>0yOONӬߋXjzӉ܌xݮ.'q#Χt@.uvPG*aP籡ج+ $YuQ$ +@YETIޏ>A1Y$jc:T֙٢Rg&,`L&(O FYFd NkhZhZ|H10Y&|y, }J&}~5XT\FϘ^_)(<,jORޠq^\VUPQR@CK؂aQaQ1$.^^XX G^E?Eدӧ6+͡c5d`loʩlUVK|wػ F)6`/€$N_h͵Neh@0=GlbϫU߼RIJ[AY9P/ʞ_ܘ~Y+?}FuYӗě 9%v~5?z˲SY{d7Y}dkYr)b'ɀ(j(:YAl.Tz,f"p (Ef 6Yxh)jǀb-H= >bmF Vg""%eזҏy"ȇH=)4U8Q{%sS<+$ ^<1)I?=rv3v#_cmĹRL-7&:.f1zoDfe'gHpp!MC]CP!YP}#Z I4 "YMz whO.MN}w:-}oi9v|q+g<,36`Y4Uq<9@Nmɞ_hW>!X6:֒ɾ>ScaA4Es}O HX$H@AB:/)2 0^>4ͧ ƌ"&`ژ̪341J`Te4_aT/JUYy*//?4=C=>(?#38y p& >i^ΨAuRkD`t:N;*plԱ&>T%q~W.WA n\UD^oQ)Uk_~0yX +wS +^,UnԻWot%w3l?"L0 Z`/3m]3i/|V^"?eK$%[N;Tw;l-UK,%Bς|n&^yYdDƜrOQ?kA"gIXk3:oe)1W.<-~G>DꡀHNIʼn*T+d YIфMO[㝱pz<ks\[oLu,\(bވ\HϰHpp!MC]CP!YP}#Z I4 "YM#pS4'aZo{XmwỽΡpkDݡ]}v 97k93X9xdIujW #6z3k[Kn)6+}X-GBÂh|^d{*HE H&Bu$^RdRA`R#e|Dh>OSEMS1U%f4ib2h| XN_r*+߳ +UU^^~iz衇z|JQ~$w G"z,>$]:NWNft:y:DS;J!A(A$4#"C)#@q|pm̘*l:0mLfUfد4-߶.K aMajgmjak_v%M%!L`NI fp&K`kdj!a }U*-՘k[cn)dneN?.S. s8M9p*A4;;pS^A2N W1fym6f }ڹQ[ͣ~T7G`85 yxTq`nHk@kh\e<DžCtX1dY8! [e]GwT9!= "U($L(RA գ| 4p~{ xښ}37rm{1.Y^ ?.#6K)|{(緜p(6Gmb޸* +*MUiY%|=s4Q)q)H +Xi'a4aK1!Hia E@a1J!\($!>""E8oh7_V@λ Ԡ^d;sbt)^Vr]*8.*^v[9Ycټg٘͘zK97 +w3 )0z!IckQN0Wע-_ ] -Mry3CT 9tC&8Hi5UKbz"XQ-OcwssݣOZ='r]'՚{<2]0dkHy7;x0`Ԧu_' ^˶jk^P4udd}{jGz~u_]-?|N7~7__@I€IɄbb! ƑӮ8CiʙbF (8 +:-*f>_5Қ!5|G#!6 ՙOV8a\Ӱ  S8iގb"^-"D6vQڙiG*BR hׁ | .4o>}xXO[K EV3!vJe).]&dge[K.|t0'k,l!SIC6gFAnfz!%&[/3il  +ZԵQK]y!SI] o&yQj9.< Oy)cIX$DB,Zg1?9B;ǚͷnGo廟{򭣽ONN5xDeapאVnv1`MzgN֑m7 kC2v%v|h-/mtC6WB1/6!@B"cK8}wꕝ;=gjHnJsj$93~mjK#'Fo-pT(Hݲ hp8 +PHt[0ʑ0 +ю& +kF +LdGmf#᠉BpҮ$39hQYK<4;,ZF8F 51%.`˲h RLIƦ|&E2D#q$)@"p[p|_>ƷNjgn^n\.ב g8(=>/CHDyq@1:aSwt6{ׯv/ѹ|]Jx$HS^T9XLiN^(2i8㬉3ש2WRS.֒䩡(ղC}QlKE̛E9̚IR簑xif\$PV?I]LQ}`m!THIE?>a77w~o[Bro +q½+3or)U)m{ ְu[m/64eb=e/*^dp )|l 1g%g0OeۛOReڰXF?Nͬ=R-*t᫄NKR~b$ +U0>R'Wg.g.͏e.O_\TW½fܽer~\sf C37fKf NjHN&g.JLjoL JL==9Tlha(dѴ& +i cY@QD*V*֠,$p HOFVh8WHZ;>8-GK0$ k3k-kƷۃn+u9p3:i+J\K q0@1:aSwt6{oL?hqpt.h6&H@4EM"T/!1jE)Kj"Ш^=Κ0xYTSJ%xEbΨc0~(6ť +E+I\f$[ޟX,Sa("@!xO9EĴo  ++1ETBGDz($'ԫOЯ7;;C7j9ɽΧ}N[^R4^jvs|[m/64eke{^.U&.SRb ϾK2Ͼa6$j76s_' fj8#RBJ>PT,,Lr .Qu q: 㳋*~]<prflXŅ/zL{.k[&n:7;Zm04sczofn =\W'&Gfn¸'ASg7ݞ:5;BEx ǻ0Ij$D-r$¡%{Z(pR85;BA[s&?(T?ίh%c+#1 cYMA`i҄ ֬i(GJ%$Ε$[" +A pIaч٣h)a0/Zz&>Zm|˹=HO{r\G3 g8pUTQ("R#ljwf-.8s8U› DD(Kqe2SHtH!YLH̾)Q +M&2U\ y`OՔ(Y"Y0ȵ҄\{[anٞX7P11P-(pL`uDtp !Ftߝs$x{ ,Ļ~m;on!P8*/"usB[M~vwx]ҧ^mhidg)ng{^.U&~?_ddc[I:i:7L5ov.tnxc!$GH[ɖly#A;]~_ 0`U RzѠÜB?nk}`K2xUZk|Ϲ=HOr\gӜ49<5+uAyb>K@0 nSwo~3&s80(OqFHXMV6HAދGǞ?is?x@lI6[oJݬT}]h1WEEm#+KUښDn鵑DfPQ)G+m8nU+ϭꍮ,,^+-M͹%⴬pqRquqw++W3ߔxv7o#bCK'@2<ax R"EBш~ⱈ-r(h +?Z׭?H8&S gV(t-T`_KX:ULh4`MAhgEQ.LI184ED5 N~pA 4~IaZf|C¼hVz>Zk|Ϲ=HOr\gӜ49<5+%8Lx?xpSoK;; s8ap8Fu4"ohA[Xɴ@NjGhʳt!>CN>EӐp8OC.Ԡ^k{iEVÿ6#$H 0y5\RN3s{ }̇/qN q4⤁# ZUG)D]7hA[Xɴ@Nj;O&od r ۏaΚٮ^^C>Hl(/[,Kl.L*%YS^T f$Qe_^R 54<6V/\-KWHvqt7+n-,,,L ߘo647i4<{}x^5Tʹ0}iz\383q?=<;uwh~b/yR'h ~,*/"|%JDxx.$~NX4oNzM茵vcm_j03;-ҧ +PNJiM4cPйCQe0:!Q=Z [$F5T8"h@G {8p" hvH||>ߋEahv0y<6mn;K ;P>#07@&!hd }0H <8syOD.'^<)_&u|d5_6U~eaofws&{9fm~}9u-gs4kI װ?J3YS454ҫ4rUT}(SieKeͥI$k+jAl$ K +&Ɗㅫ|J1_).܃f­Eż)͆&tgcF3/Mkg&L\[n\8krAW$" b4P#!,>D q$wV2η&rh<Ebho%a_Z* 5c@)fvcm_j0;-b'X8AdKE#8Tv5Q $IkS5Ԑ$Հwa"q[D:AxgNnS>)#\ߋfw?Gz||0 jmns` 5@ݫ иHѯDr\.ש(:n9M($ $M9"inyM2iɴ״mحקı,A!$y#BL~/[LWo|iw9lՎ->F֚|?N7h!mwV{=D"z@Y"qKI.ݱ4ߺ-Yi:go0`|{<{R81st,#p\3j3c9 ҧ[! +OxGs2aOZq]t@T=B!]X}х\aE1J}@ri;\ j:X @JHݷܥbPiۋKo [ ,؜.ldYD. ky?? 2;4hv 2L6>b\??9+Ǐ+jMfFӯґtT$%M\wr$)ru'1IN;ٮ896sb$ruUB;JDGchxv`r8/^<r8l]N9LsJ^&R=I[8WaIr[Sz~-Ҝf7Js&˽!Uk2UI<: Cߨ@p`hRArͳ%B PDٵjA@WDS@ )-TO*.Q$I"#Rl7*[LTFFPnl\'*_o̚dp6!F\Rx454|^^Ӈ>}|À5T0 +@ߗ4an jhBt:;@t~q.VnmVa\ +y2Z]Ebz@Y"qKI.ݱ[$_Wiݛswm=g\z x0ư3| 3mο}6N0htׅ~<`a;vx'Axr>mwu?wV +k9t +sB.+:] VZZ{NJPrH\[vrB +;A%l/..l- -/vh#˂<ڛR a |4;}X?CJs1^g͌Gr]3WH\O*&QLQ;93xel$9=NMLJMLFb?~#?z=E;KWgVi&vb^ :Xi@E~W 8J\辵8Uk}\znKKsvސ*ٚ,WiTZu-NXFZೂUiJ$QGk>(V5 +\ "ԃH*UʧJREQHQD}:Uk"BTWq,"pmR^98T)J}^&IIyeĕ*_9Ѩh]ASCe05}C; XHe=zFbς M!t:N}qt:kQnƹ+nXP3EPnO1sYouJeFĹsî"i^ºwJZ<ԟ=wŇ"FwDG:oF1/m _~hg>~˜|aN6GOc8x-X(8ͅj})}ւHXtmqAsOwO: +p%`9$jW.-EoKK!Š pX)le-]>(Ȳ BD{2 d|_&е\'gqYm}3c3rѴ\h;ГI#bR#IT4b;5蝙@猣  ':'GR&Cӣ^ۛ0͊vZ|^¼Nr^9"!V_a$[}ܴZ9{vj9K-ώB'[PTZ'՚xg, }j@Y*4 +(֣\j5PjE]jHA $*S%H@)PTe$Ibq3ZPi&Gd&*{f#j JW3Lp6yu_?mdW93wf3IXh}RU~JViJ$Q16l @@Iv~m66AH?3{Lljv7bb9[u5(P@q~M P{鰂G90o$GAh? yOS% d+*M-i4_~1ǘE $? C,}㼮xHit!;+ ++O)u&y5@P! y*lɻ,_Qo.Sw|%sP{Y/??ĨG1p2|Ux9،kn^ '_~rpCUz$nq,E65^*j/6ʞG5{岵jhMV#e䒝e`'+4{٨f;/_X+q8<8<No榳\27]RFKlbDv`h\"34OWȌoJRc)r?BG2NM]7w@z2s}~t_#iµ;Ӄ Sܚ?@6g-ch ΀_|x'Z<TA(UD3)n<]uw5YI#BCQwR5xkp)M9 Nw4n(vf:U6QV)tYYLY,g ð +(o`S1TYv  6  |v ;'/qD[d4 S52OyKKB}56u\h.ED TE,G⼮xHRghNBQPNUujwφ}B a@0+hbB㗬1.^a\ sA .h{]9WgD?~{z+/f~KG4[=*v:;ҫۺxG>Nճ_BU͓ <ڈ\^l=_jek1ըњF%;+R˲N^WX iQv^%%Wplypx87Mgdn(?JCٙJТDf"Si0=6*0Z^u# SDfj~0=?76}gSwfffnό'G翹/ΐyQ0gz` +>X +OJd}miϒzi%4nS䞄jK'kq3mi6e<4C)]HSI՜640P@?vi$l$Z fh¨Q>Y$#xg5a[;L8nIiN'Q1jnpջ6Q;f`NZ Xa]  +(PESgCcwm 46  |v ;Y'/qD[d4 SKd:QjZx>ڔ$uEDs!."R*hdA=uE:SFwZu`uU+V֧!|.̔qt œYA XlYļ>Abx&pEX~%?+~` +a:,\|~ھ@/[J7Gz8U~! =T7O{XɫhqFf\3]Ij\"O咝e J~a9Jpn${;;&rP~vIY-%3IEsD`z<]m 5V)UtcaNS G'陹Df*s}\"59?'357᡻o\!c>0Ā"~< XpעxXM +uIj +>o|?9uf>kx=q3g݀E*Q֧PCEh @9mh_aF$~^HH)3 Fd4G;XJu:m8>Kr]{" "}EPPm҇Ʊ-4Hrt٢eɒ嘊Ç;;+J\j9$u|o曏rI20H4i:] ՞F(P|hd?*$QFZ#2ܞ'-w6" +/ :8px!W@ ] +hNrH DQ@Wi 0 >8$aGҎv2{,! +dȼmBoS@k5S dB>*uiQz=fFOKU V)HN9,LT?Tj 'BF&L5Id1"Нb 0,qEMgW2o~JVf?VW»gW[B\oֺ=KcytOYZ-}\yz`ab|9?[9trm?0,}-%\7m,,דyӵ1,f]۶Z3 +__ṛvqvtwnl͌ڵzZEO4ZqjhVZ2'JnKeRZyks~rxз=ccMwo_}eS|BjZdRR$ZHkJXu EN5Ug(H˒˙oD[SM%}dlIDGK%%uDaX#?jwCfO2c*B#k? t^>@*4k\:FZhQz=fFOK,rJ.te5Q_,QV85PtqdΧO'9%9ubD%"MYJSNAa`FAiŒ o;?v\_o]lnfSY(\W$)@jz͹:I2hx\ś3J!V85E8vK{9<6q8589aU<x=_\e[Rh/0HN0̻ +4MMR}sԥCyq \ѷW\w ^X]EyT^=hAg+zαhl7%cX0,yRt&z2okB[^(3gݜsc3ofԮkL*w|zъSCSz&oO*8Qw\*;Oʃ.g!';p+uk3woߞ5ZoׯRL)M"H&==iliRDR"-wd"j3! +%*gJl p>bxpr$k6;aYևc`c߯a|~?c{g|/cmRUUO+O}XV\sQ6M!hM_=cCt>;;F=[:aY1ֳb8\Sa0,_ixYwvwǺnQ.[.٢(H ApZ$*y +}KшE?Au5a 8wuATBuS{K(j/ Jj|kzRSzU휆*Xa)Qj|hH#G&u04o]~\Z%ѥtSE;v! +DU9S=Êƙj!hJ d.@x `]R9ͽ`g FD{fx7ݦں%ٯ_ +nb1ooTK'4ZJ:%+ėjJ|lo5Qw qg)a#]Z)ECBR[Y[QX6?QOgh+OeK2qLh/376h+4uvj~4_q0? űlߓf/=Savxax΃Sw7GC TUeNVŎӥˡR" +%9Zn;$[Qx.A(`$",y;gKq M g{bݯ0<#eݯe1k=+5e+1Ǟu~< )`hwwv;r- $H|AE +TU[F x!*nX  Gg?AD{1i)ms +o+K(-CTin~MbP6:$VĴ* nah:kq帿t.3ŀv"xbd*U9֪KUϤb*MQ*+@@G (Dd]/7wo'HO=ܾ?~gHrP|,!=R+ߍA/uH81ooTK'4ZJ%M/bjJjnw%..DIbj̴WN/֖RҍµRf~r>0UFc\y([_l)cE{FÅ\Q&+|ͥۅwf͌ +ק\gҏ?oƒ't  P+)"rT˟]pȡ~G |{|>ɖG>/t$*K +a; bD^ْx\BI#8ó=[:aY1#p<`X{E4س5= u}ng\\EQ A7(2HTʷ +}шFk~4TH k,AAݣ ʴU趹O)%V\PD[ +ZEzk14P:$VĴ*!&nah^SH\9老ڷ1 {1*,JqN0R3X@.'9 x +@XFBn0 {A4!xk@]g7_ /zn_p#?O?oy>45-nFOҘ7z׏Hj-e%{ +Ѵ¼XIVeng)BX3S狆jl-A15pt4pm~.LW,5ʖeJl^fnlp!WhɣhjJa4_s9/u.`8G/M+|f3񑙱?~q/`,LыEu@,‡~VdSDE堩?-+d#:WO%0PE1"/tGlI<|y$pg{Rcqq-~,k{‘Nja8\Sa0,_ixYwvwǺnQ.[.٢(H ApZ$Lg6)u$"y$%R$t6l+P +P`59cv'$[~Ɖcuqh1 ):ZI=ޗ&U] \-IQEQÍ(E|_ ̍cJ y,RF5O ؁%ݳ`!=iB S %d]W w]?q̓G3!}y#s:H QNcLMÁrI ޷3o3G7?SwQoM}?R_>zJxnUySك2V%<ݮ {=٪Ƚ F>*uoz2a=W*G랼mTu=( 끽-wR=Z=<o7ٍڵͫͅ+ |LZYln"Ԛ(^KzDž:ƿpʕL㳹?ݾ{՜k +i-r2\6͘,&:6r>lC?UM]ƚ +˱ͤ&.V\>BDi>)%VR|) +$1R@ Kp4PJaHHJH4Q 0&^o(^C B4^$?㧿T.$eM 8bf-]clMU|ՠt4y$>=N]ƚJ.l&5Q:֜i\eB)%VR|) +$1R@ Kp4PJaE/e( c$i$($aL") 뉼`P} DEұ<nq>-\?$O:O& \b4H$a#b&hРA `}}>Mxbx \@QEQԹÍ(E|_ ̽kIo%CTDJrTjLBv)-l뷗3JV[xHqrq4Y(M_,cT`9f r7;ɏ=?Bsss3OJ_<.P"d]4UCs&'0UQ"TH#.|SY$)IU:M_'R~թ„5V/N&J3Xiʚi;F}Edi0[7<\-,^/Ll?MM΍ܿm/L-~Q/ayY$Q Ihj@IʄYJTE"RD$%1"^:mi$1~Dl%сEΕM"ĢD#¥ "]~ hl9,/G=aK=0x]05(h6DyBwAQ!OB'$y $pμAA-\*~~1 jA$8`fо:ZvYzwF` ;,^δN[U۪fN Y֑JYh%.kZ%-LVN k4V./Xc٢+k:4ZTt[cFo}>YSaMc>gʼn׿Il*dM@ǣ@@:IUXRϔ*&z"KI:50@Eg*.H!*,M@gQgpL9q {X'1,\uA}E(Ȑ'PIOH|A Iy'u+ Z T?x{#cH{O@y0$络tw3Ԝ&&Ҙk|g61c:SXLZ1tA uuR^S8=޿;C'2$x!tVNv4_1.%}\$}"*&h}#A8A`*@*qa H@F?nʏz23g&|fO n½!> Vsh۶ACHkY49ب d˙C|mU|J,F%W4l5n&S 9kšd+K3Xiʚizmۺ~IyIQ>%Q8i1d[7`aqgΰK%v&ql=,I`KʲI&Ѵsħݜtkޟ=֘i۳/vt~soa󯟡svgl~zam|A"JYEC&PI2*[IUΕȑ~"Sbj)r!b>Պ\ҹWJN%+BeEj" ||FdA?_< AgCpL (f01Qt,4  E]L&A^y? +ˏ$T#J? p xv+ y`ij T ðKpTU w8avgΙ* L_͇>$k@<ǽ4Qս*Q.m8,Qy`!:p㢉K~Q3jvJڻLq{0>Vd Tϕ˜SZU΁J z!,%E] +(ҹ?krweۉٷw؍-qscqăWݵ[+C5qeM_9X_;ޣZcw qwigbck\.!ni n/k3 +y\s+%'钕IY!ղ"L5 +>Yz\| ǟ/?³!8&Ph MD3b(:NX.V&H/IyGEdqot<@;P 4T5X*a%QX*};0 ;3LzIy8k;̆UxGU15V ֣\BqYO ,#i.xA=ت,ULT_Y9/)CPQ׹,%t9B@}ڶ@GRV.UUy)S g$zޠg 2r ȏorv$_7~)%wׯCzqֳZw_r_GvW),uz.:VM<$bc;x8xh9]XƗ-4OZ㭧 HљlOǝ@-Ӛj6'ݚs= d3>vts=~ ʝ̣Ͼ_?-  TQnT1hUWH]Wah@UP.I%Cʠ+Gׂr EDSG5йOb!jYz\| ǟ/?³!8&Ph MD3b(:NX.V&H/IyGEd*8p ׀hzǢO^QA$KgAUc0 .}.cX A.? ð3E~S>!/gY,:K=T!~?g*54TzuMtLܪJ6+cxJ蚻 t e@E=St8bd!\P@9o8 >>^Lߋ/?6>=Րߵ!a[nVo[k%^Mak"l՚~MA\;ջAnw %˱ݩ;6j 'g㭧.B:nskMZ}I_ό&oOޛ{,< 7L>xx޿nV9 ](J ]Ge(r$N/|*U):f\H5ݿX +y)P앖X֐BY)FeEx >!q-#A. #^O< }\& }MD3b(:NX?dP{4$Q L o?#"pLJ [mwIy$-Q8At?lY60l+K,;h(v=cvWɏ)otTRɩ4#/H](:c:p tsq`1X 6' KTcnq2t&b8K D,.YcX .y(,9[IcYk5qʩ'zˠ59]dzx@6@7EרFl*5K'A&L$\ ~!ݿſ~c᠝w-vio[Woc*Rwא^Ko^7dϒNv{E;vp(ucuZ'scװW- ;n_<K+Rq^ruXm"UTvNG=վJ٩rw_uy{~Ҹ`d׵w6Y]ܯ<W\` 9z5vʯ Uǃj;~VJj)}ҩI۟T2iJ&䙖K#.}qO>f, S%Eѓ$򁈾K '!0a$/#p>D8a#p>|gcbPl@4Ä,JBrگFtymޏ3pD $.WP 9*\(:c:p tC9% wM{ 2՘d\F ]=󅉘*.Rp&t%ky(e-PNZ>qf;ؾjYXQ:MK|4VVj՗k덥RcTSRs>-VNR֝ڣƧuY/m+[+ll}z?ŭ9L3TI}+u=pWQ]5v_ UGA5=pV,RLSw.JxyK%&m?dBi*1߇cɒ0UQ=I"t8` (ITS P D@&.p= 5?~}v=?jeGϊ+=2*ˇ9cJv;ٳly[hk-`;E۞* E'qq3l_^,(b%lR\+5˵RImDHݩT_TT+e?or/6T6n<m7/"(qeu )PQ_5v_Cݠγ󢤓4S O?odӤ'L3-B5F\z}2YJ!'I}E}'!0w>oO>Zpf(|ϑEc ?u)uo(iyJrU\{NF7+{FIfhz4 2ئ(@yASkD>2>BBPg2Ghz AUhJ}NIQTH˿>EQ|}\}~rBQ$G)%2S$EO%$CP(.7^/ҊR8nTըF5<)P8 ]w*96D"hrRT*X|cSUJJR9{< 积RFЖBۇDǣŵ켖P-cY%}Nl͒"_05v(;4UAf oH0 5B7Ck:W<.4]n EV\|`%U s^P:H;=T?n}'ͫeD}!WUqzNuM+kW⤿F:gm 7{oem=QcV}v`{O/[=Y;r-puj pl|O=<8\x k{Gk*tT,>\;5iδYek"ɹ,cڻHr.#(]\vެj&2e4b`&R_BLT:TSIm΄`Z=AM_ +,E.@U#4EMQNAQTH˿΢*(J*M&`ETY!IN%I{YSt~|j-Q"$A I %r "h~Y6#jH+!/v W*ʂ%-JeƘyJr.|iybjXO_-AǣBiCϟU#K5KӉȟƊ5.Wg= +Z7dKTi#a۬ȷd`<kڤpFjׄ |῜g!5u?[ Ýϔ}y=~tUe޼:;\EgWk:92*Ƣ Gϯ_wq<诞Eps1xw>XwGޏu[Yzt?{-B(Jjd2,3e{ZDHxAJ A`EZx_j-jTը7wp'2 +$| mGԐ:"_@T*KZt"-XyJ۪4OhO_ͤ媥Mnt<~B4*% +ؚDGc\HZVAcEtZ竎߃3pCtN%6"I -Rw@5w#@A|'v5.t,n‡!o\e^G;}=߯?FLJ+y1tvb׈5trpeUl +q~8ǃY7zG{7{;z{u7{Y{zX7{g흭W ?ZE2L ¨.u:{nԹVSx yLOke{DX$SK[c٬yIc[|YW?Λ=ZͤYRLTiLeY=M m Kw~T1QYFPM%IB:k5B)]U5E:mFQ!-:(6\}~ZQeP$9&edYf:NeD$-(ˍ(Ƌeo(gxȷ-RXlh{ |$iS$y'uRrd7qqRRb<2c>j=X(*H AeDO/AEy +$pZ@QF4AA_SNEbL$DqI3,%驤>eeJ.}"뛳Θ aÌ;`B$kqdhA*+i~CEgp4|Lt( +(=BP)čoeJlߺƿ+UtmuޞAGi3 ?<ŦQ{۷N 9nt{&]GMwYӞۓ5_\Vk7rY}jwk77i?߳ת JVu]nTwgvm1W]Yg +Zesa}ɝj~ͥ|s"@`ZyBER  c5hR49ljWmXP }{}ak|>; C(P0PC#.PX!>XHf}?"t~ax87wZuxd"{/,}(ln^&cS:͝KRɤo85MӱH$b V $H̑5h7o @S-R(#`jXJ  1HY")A\Lړ$}22Lu> u(c;Ž/Ikǒ9O%Uvy*}psr_W 0T>D9F,lh) h`$E;]@If!U s&c]e2ۙvcJh[4_|>t:jOaYBmLkמ;Y=k\qiMWnZz\{Vkb}sܹ/kK'x^}{sX}{͞[{ۿ|ٙ)YSe r@/ ChQSM6*8{pOSѤhד%!VjBl߇_>A<&|ߞ~_ؚS>=\\]ly/64GgB·`# x87w:d2 ~r#p^X6$Q:0L +? 0t:;/N qJ<%Iyqj3c-HEQF $.s$zzA (SM;8MP!4AA1cʩD&S"$Bߙ'KIeGKmȺ]%` SGTX(\ +hOss0){\B#eH\D(.‘"E;(.':瑧|xH!G<4P3*H||nW_ß׿%ޱ~,/4}%o _Ith뮝t\{)V MnR/ەb}P[XmZjF9xcQ=,oT+muow|\0PQU4UN, dN Θ>"I '^uIb!6jr×j ":;g$c.E*x Ya&):^8͝'/ ܈y=\M>D~/ O1 )N΋SCܥR)Od7w^⌦XK$FQT A^P(vFS-@ 0T,%MAD̘rj,Ĕ .w&Rz{dDaGac/Ydnd*KW{.PQ4ܧ9ȔE|2$."HHiEuE&J-(5RF> B 0! +@$g&@hu_./_g_}ͽD/ 7ٽNk"o _Ith뮝΄\{)V MnR/ەb}P[Xm~R[o}j}Ҽ~oRtoRPʁ ,SOEQd1MnSUęz$Ě$bM_[ "1g_mW}sT_H"E([~hI%2Fl'Xג)mFO쒔Dڕ\se~yLD*WfWib3#uƑ$Թ)8V*ڣGS玈8qL\9YThSBi|C,$tw43k54 -k0c;3V9*P GWOfħ_J͏5ԗnh{u%5:ؼ]VWS߷.vWRϷbg;KZލo6oמĸm/m܋>ol-7h}Ӻ~9ڃoZ?޼ ^,ދB:~122u\EiԒ z]zmNT\(VNTvҒ=?i:>;&VSx,s)rWjQl#"MR,ʪ!IBYrDǭTF>.zQ Ijdcgq+LY9^_TRX͔0LE%53+JCU $Hx#{"Yu%bZl|#M 3>ˤ%sy~~#ԩߩrR*< +>";[rr*0[8!ϬA`9sA uM8 +j" +M<>fO O,>tk/*{L`vY9h_M}ߺ^I= +R/69q䝎%-t7WZkObܶ6\|^|U|}'m^޸_u'Fm5LϵF%y!c7:|}OmS UQ2]&VSx,s)rWjQl#"MR,ʪ!IBYrDǭTF>.zQ Ijdcgq+LY9^_TRX͔0LE%53+JCU $Hx#{"Yu%bZl|#M 3q|eNE'V3唫"'p]!pȩ#ҐyHl.m9"S.UH/S)4B8QLUCP)tJch<Àm਀,~(05nog_O?w+%eokVyuP^Wv;WRufR/Z~{ViHjsqٺ xec\|ԝ|z/uﴖ-YF{e: +]f=7nuv1OmSٹfJ3JDjeqN4TZ\-m$_UR +eTY5$I(~R#KV(J28^/b!I,},nR<)+JjT˲rɽyFtQUiJ#A rP}@yQWqO\SAL͟o~~l&S>? "̤<.s?-O8OZsVwT9z'ڟ%b#ЕFCNOdKCBKu_gʥ +T>~e}OSR!z|C(0 ,|KAF +|FB#gj`* +ؚ|E&y + /ԁ|"X~u/){[֭+W۹3zѺ۳N{F|ϵVk8^Xh+[+ۏn)P-Au0D?i5̺3͵! <w:vXgfno3٭')2===3Tb~Z~KLhH"!hcnK &eO{vvifw۹_\?<373J@W}uuFc5 7cm2)o%KgZ͈'LF:TC5=X4ğ:l4M}TPZ 横J]*g4j#2u=A&IRk ~yKN摗9I(⸐De8 +ZiZ~/W)~{NmnU(|&-뵭u~s,&Nl|?mP3 &E^bQf%Qz-T!YMSi(J5 #IRk ZԇTukgE$-)})~$OKp1z>>"y=IӤ_4Pmn.W⢒G'N%\p15tgb|E= m  $x(7a׷^0nn7;uXu1!uן7h|NkO7mپyfS'7޽z~re;lj_D|hQ0h⸐De8 +" +R໵Qܪ=QMZk[XL~ġgfL,*b=1MĢ w0PKvt][2}B1^;2:!5UU{MQjAG^EA5}yr7No]Õs~?MG +u R0é +(`~ZU |6>S['{&~g5gv{ cm6r(hYʢXdGL ߌ'?_r7~>~_{x#䓏~[0MATU +RGd0F32e*yFN=?U* fq;Q#6-$+pR2cn(P͊fƵ0{ Rs^ +-gV6o]EpUm뺛8EM`cY֦ial:txHav0dζ]lXr4Mh]Dk1ot~s?GS6_iWٟjFq8rEʆ-vJ7 +cfnc=ݔOA:n#{^ONP =Y540 Ρ!2ABp$f!`ibdmXO+;Ň?_Yg?׾7s\ʉ9u2<3VN9- +t8#G1GswJܥ=<(8QBȺ|&l|VHVd|eQ$8ekaD3CA`-(Z3 +!4l2<4u7q{DzM3Ms 4:tta ȜmٰH%.9;iv)4MJѥ4McV6_qp**llSM럿ӖW|5{q8rEʆNZk%FWnU U3nʉߠ-'',2c"k1(Fz 0 A$2mcrz7eM&ϑ%Qi)HSn\'EJx-K[i'[(l!ߕcţTq %hRknsp(!d]X>6M>T$+pR2cn(P͊fƵ0{ Rs^ +-gV6o]EpUm뺛8EM`cY֦ial:tx8atFee^ׇA\M4M4M4;7W_1Q0EvU%is=Q$nOzyWQ֎jT +&'HIL+2 g g!aS(sz8k3,uDoXC)}`=\ NkMꉒp|\S#'+_<8deXzItVəqؓ(wnQ4 ѕHQ0-'%A\}x qlθ @= }7 B4N^M sI-lmeYfLs[ 4:tp\9Ѝ"˼2iii voc``^OI;G=%8YZ0_xzHI.ܞ"& sF&Z{J4*z;y% RR& +o/&?{+'YRZ{͓moSN4U$\f~\7[2YMvU)yN$L# HA", ! >e0F@"DUDȺTUj棔eny*u|0 $?Eeqtmm B!z v4Л;4vo}ae/1<^u9(?7`b2V?sy;Ş5y+g`V̏ӝ벽W&mh3YѬQdt9Oq/-s}S̨͞TSu͢m4rFTכ&\}}qk}R@HJ(GDX B-NA|-`cE(7uj6G)rTa0 I~rIԕť^2:,A!B!/`i7wh -ny9(?7`= zA?װb䭜YE3?~Ow^eo~kǫ춡)gGF +4]Էk>1}_kM5{>0Rm_L%5ֶuK[ZIQu(^oΚDV P'Cszƭ=Iu")ep!X@ +a^8Y(1b J߬" B֥Ul6,u PQK竆`0'%ERWzA B!z v f]5<>9('Z,O24W~NkJ|Ff;e{wYh m]wO9?5jUf)fz0}'v{GH1{8罵齽Jtկk-m@(6Pޜ5$N+[{DRDJYXmb\h.7Q2i%_jV&[1aYld|tc][\UzV9Kڮs@A&w45TYTwFU.6;:4JRZHݞSO{(J*vU,sKȝooE{C67_L@/g^wscqY@@zΰZzʈW*{.B(&^^ B4}++I%C;"qDûk;%1hEWllkJv7dJlUj2 Z6CƐk0>.fYS`M,nG,L?U~gy5=,ku#b 2x5սA'syݾzTYTwFU.6ԃZ?6ЌoG+1KjBޛHj]w~S@wUŮen(xtI̫ⶵNbn23Ks^cvP[]VeE^ċC cAZot:[x%ɱq|h'W$hxwuI<ӎhtʶV1a1 +}C&\5ݦ&3ɠhC/|m Y* 3bF:5 fdr?jfi;̫g9X>=s_ī}[Ouԣʢ4w5!Qf|;ZYJV{̽7Զ|`onDbW2TVW:DnsŤrUqZ}~'_17f%9d1j ;ŭgxe"ԏb/JkaEȋ! -Mӷr:-NX8>4+G4ƺ$htʶV1t(4D񨮚o2h5-_C֯ŒfMY>4靻?o3ţ]Fm_wρ9Fejez}Misn(;(w>k&d0:e4M!1J}utQvNk]keud#רI{Sy܃Lo%=ԫUU++\S2뭭(Qi/n@[ΝL9˲i@Yj2 Tcs?'ދP7(ĉ! v-Mӯ$ɾa_85OĿMgo!T4J ?ΗiMi| k<^*_G,{29K4wbݴ9./ɬnkD'5ܱűzOQꝹtgwhq +ԕ8+butw9Dc֐!P!7/Em7KٵV_G6ª+|kiTK<=XDV"CXU5U ڊ"ܩtAa,˘&eY Ω&@5f>qb^u؉R-LN Bh4*I[|p:%]lϯ9oītS?R˿cDǑmmBv cV|Yi8IC6I,}83݁lϬ9mxCnG|حA\%uz}, +#!jzE*”Lgsn *sr{ u ӕpܠg81-BP-BȮa +/ X!4M>i&Iű pjq} g|n1ﯫ/Ѧ:_vk:WIn8KdRoi:&sGks+lԫoh=xS]]_!QRh]FNDǾm7-^6a멕א4ªHkϪd1Ghӊ .Kg^ "> +#!jE*”Lgsn Te{B6ėZ:銸o~>1bфmmBv cV|Yi8IC6I,mikWx c8>xu%tS?R˿i&Iű =pjq} gp~U>l|ɿ\ k{95Ⱥ-s^k:x4?7 $Zvseڋ0՞S+iCVQIۍq+wheJ;F87*睤c 5ީ~UA\52_ 5B|\),Ϲ[Au<7ݲ9|龖/p|ƘC)j]o +8B,94M>i&Iű- pjq} gpUb #M]/98kdkN_KJQBlwyDe"z~PhY Б~owPG]&hvW{^NCWޯ}ƶ|T* }h'"jSJwLTQf4ԯn5KҎ3,!%)8CN4̽fE=lg*K,Krn곬wK=smI~@uq95ئQJW1 EJzFj~B&s1& ܷlxܵ cC{)B!B᪮7|̩˧C#N "O{5n{ HHF]ŸWFujc^gSWUyYAmT鎩J2jӌpխfIq%?$gIx_׌ȼ =V^eYsTe=P[^ޟNk_'IS;q95ئQJW1 EJzFj~B&s1& 7{lxܵcC}s\TB!pUWeꛁ H)~߇82;+rWCݽǀdU{ՌkTr2~3ÈԷo2 +@}ϳȃڔS6AeԦ-7M+E-LvIYzX3D$zz4$s:3i8f^ĩ=-cl(m" %=#5?!ojd[Ggg~ ʯݸjO0uQB!B?tAwF]EY3wV8ҎH.[,sRt2w6|Ƽo3\=]SK-$8a?yUACwg)ʨ6QFMJ8)ngz,kwo{^D$6,})2/ŗyj)<}Z%n9AYQi/,䞟$S08f3ū +cl(DQdg6|b緆+anxܕ+USc!B!C~<ϿJTy|k$M(fָls~Op5YN:՚9[ׯa^ηQ߾k?$8a?yUACwg)ʨ6QFMJ8)ngz,kw\% +'1eKy),SK?Ӳ,q˹ ϲJxa'$ធ1)^|WcF)%"~p>[?5] pӎ]x7.*zjv!Bx6HvQ2qY[n~;]EX.o[IѻZԿ0/cjAo+KS +>{a {VU_Cwg߾eP&0J7h)Z ' T%8u D$6,})2/ŗyj)<}Z%n9AYQi/$P$ធ1)^|WcF)%"~p>[?5] pӎ]x7.*\5}0mOB!?M~<ϿJTy|k$M(fָlMx7u~`ɝ"{H,7YҭQSw}y+KS +>{a 3*H}, *:FF-7E+ꕲ篮qAҗ(Ɣe/E>*Mㅤs$S08f3ū +cl(DQdg6|b緆+anxܕ+F#EEwWM3z7B!BhtAwM(fָlMh~dT:g?8):Pk6iXϼV A'J6*d{"'#.C LUE{?o2h_av`WvG׋r0P$ y|*MP&ٝ93l6S17cv7coF%Z2T)RxR#<, rX> 2' 㜆_Gԟ`%Qg\U#̂1]?ٟ&Bq~mЪe)nS ~ǶvxpvdיPmhɝcdNk;P|lB͡"zK;}-#jوfm-w}rhI{#e߿N8S^o$QRtz.u#/K]t8_x_w8kw1almow178F ;F%Z2T)RxR#<,B u> 2' 㜆y#u$/1DysQJW2 80wdܿ +jSBVvMm ۪8Y<8;2:p(O64Utw}K#ou08diG|ޣ>sjC!G:6V)2^󢳲*:os~p^wKYkfqw՛*f&edZ/,O&""q~sj& H--,uf!!^s,-9ʲ0Z#y~KFI!dYrJuA2-,7em +oCҢ8yV;^[\|x:8]qM9G|?{~KE8K&?>ޅLNZhL;Gw9O8aIkf8[D8}3UǮ357^⁕ETy[+k_-Z34w;ޔ֨U13i-&za|Z5(KO%\T4YOhDRoi4\zhM^t/[2噖Yo574yo-kPPiNHP/i})QF}ph= +!\ݔ_s"yw_[ +cVgtTVJUmQ͌Vf֖fKIrSu]GKo"BlsLomw(0PJ#uZ$osd`#KZUUr8v@ W#Bc:ZΞ?;'G/k"~@d_3vkϣ9uW?Ehyxyeĝk|[EBŷ)QF}ph= +!\ݔ_s"yw_[ +cVgtTVJUmQ͌Vf֖fZI%T])㢈G+[<"TY,Ji1.Bm,B~qTyOjWî@ jk @F at;ͳ:`Ε=A~vhi&7v4onsgE(g7B!Y}Ez%ް]w`j;M[orgfo.;|im-%r=lϹ:*7v~cLB.=b2ַSMی'5jeFm7ui;>Iy/"M-%r|grdͳYŸ("Djx+ʲE(غ-9Lyjκx=y8v@ WC/_e44:5:ч&o{w'J| +GK#o"wz[NW,lK$IscgŽMh YאTM?ve$5+VI$J:K' 1,Vj3}<$IZ)}IJi2~;L >{?"xE|yy3̻v6s-ss,,(ӎ+gmc)"5MBc&QjmgM>{\:{|b,8M*^CJy%pn0.@SGYq[&ݚ(kUU6L2eʔu鿍99"oIcdI>3}C+I!hI$DbׯbgGpځ:w3}(?flws9>B;%YX,k-QWƠSEjί5J]w3Ɯ5F3Fbw}Zg@ II)o=Hp9B<(~?2c?Rz3VzԷMvUL2e:$yN! [R%<%u3W(%reX`WEQ3!6<}wX蟹I k\~|c(#91A]3}Iqb˵|VX٬K6y]k8Z\1 okmA|c&jofP'1FbN~WzhFK΂R(Z`%8J{H\t(S(9{_L[VNOf)(Z> $*%} +$nUckg1smԽ?ϻWpyvc{(mۂPǶ1hM>zUu]Z?Q73zݵhFK΂R(Z`R>D G~B$Lp::|LEc1@rRVͽy?нvB2eʔ)sГ& [R%9t>3.eŦDv((=ȿ_9C`bSZ|/PPy](wtފ p:G'xَ,,哮$ZERא}Oacحjr,V6ufA;ok7aڅfYx|QڶamcК |~2\Uk$n$uhFK΂R(Z`S{$I!ؙtYu5\+(PWaOeA@@@@@ :٨ +FЯD7X~t~+#cGW{n $&Cb/a7j4ě{ 뭥{g,Zo K2ijDؾCOٓHۄG[OUEWV-w,P*4ji4Z:cNbEGDk 8^E'oGmS^S+*Xzw^݃*e2Y!QQ')9*g +_XEL_J$pW;1ƼwYS'K0(ɽJ7;{a$bDa<g_3Ye7g*(t.}FQo24)W_㱣=_i>M$b7j4ě{ 뭥{zw)}4,!" +Ib ?fO"Ilfj[n?%_W}]Yܱ@}Р+4FkPgIlh}(h'ܫDϠmkjTW7wKgTEĆ9{JLVFHTIJW{"?N !`A"*\8N1o]Na;Q{s9n,wGH$;yɯp;-g:,N bo D@7L~]ʈŞ/1}ܨo]6l= Zy%G"ؘ$k $mLbb;ʪ[]h4Z:cNbEGDk 8^E'}mS^S+*Xz}[˨G-߂NCKiHXM7= Z^ohjy5;\6aOU~Uir*?buZͿ +uV33veM&H' +:FH虽mSkjB{U\qf*rTU&*":G8IQ9?Sj&bH#XI8A9&8Ib0S*iUXO{YiŐ괚oF}gدgY%(wS +e{I483Ԯ36uu쟜odϿjjshaM]qdF,UgXut@WLJ%G$%Gcu83qG($pΣb9&8qF 8*CI|Rzp0Bao*rsLqy(C7HuD29m/.'Ofؾwl//5} tj$4uš ߩ2<[b$X5_ǵ͙r-]5%U|2s!o7:Pߵ{hֺ:epMO7ֈi2#GSC~XkS#3Ze{MzfKURQKIJ7Vq2*UC%g"`Q"IdGrcMp8#QˡL>O) Lgvm~8d!07eN9":Eqh)^hZ:й-=ۗ-}28֦oћN \{Yf\-.so-e/F_u\kݜ)g.~|U^]R'3VF}kPymZWGL1Mhڤ9b=O5h0_s{,V++URQKIJ7Vq2aY!RoL#Frg/90ƒ?#X%eyJi`:k$ !1,͵w1x W"(C7Fs'Quhpܲɓٹ^o>iItvTΕ^D?/~%ƞo7 6V{m ZCoɟO9IT|&^{o3GqDLRC{b|4[:Pߵ{?95PZmG:4ա_tHUJTUU(LPI)HXgdFSQJ? +!$@qugZY\ĭMQqoBN!Dٹe 's/ }=34SMg'կsehя{yF4<[u-@߫3x;$34uڟ3K ͐b|4[:Pߵ{?95PZmG:4ա_tHUJTUU(LPI)HXgdFSQJ? +!$@qugZY\ĭMQqoBN!Dٹe 's/Ãg~3Nhа_N51}R:W#paguc`-$j_95ҙEjkL&ʠ޵u9:3$*53K ͐b|4[:Pߵ{?95PZmG:4ա6U]E%_]RJ&(Py֤QJ$HE&[B$$XHpY+6ۄ1مQTҏB Pg]0ƇVeqwSšA@@@@@%:wu A瞠s/.'Of6<_28fCјaSM'կse;2qvVg]/WoN$j_95ҙEjo߼&Qm.ռik'GqDLRC35֠;w-ϦkmuGq=6V[Qhu(MUfQɗjT JV;->8Crg{pfk]o G~ȻoP?9"x/ǻ8WjC߽誙NAw_)KiwQJEtCmj6IɌVimI)#Zi%OYr!DD2z8Nw<cPJ#{6BH0Ҥm4MT @ [CB/$ +Alj5+'V!ї"]zuFb 쪩?Wv7: ^4ڴk&OW\Vb1eW5r"22:!ФI=.ן?3[zk8Du(xBph5,]&Wf~9 oپ*v0UFWt[t5Jn_JkR* %jV۶IJfHoKJѢL+y̒!"+9Ep gcoRa̶޳B1&m;ijܚSN :X>CX=?gB a1aH.F!`sp2SiH|>{vm4ѐRkIhgCgső$C4ѣчiUj oپ*v0UFWt[t5Jn "Z]Rd!^D.MViH)#PE"z1XF8#OK4-(Al="A$4M 5§GN :X>CX=?gB a1aH.F!`sp[n,Ɗk@޿?&֧jd_ZS Z\qPihauw[qLՆ{+U3]wMR&BzTD+YQK:Eb.RH+T)y+!DDȶn?S1ƒ8M˭6JiD2z1fC48 4MS5@n驇ѡF8q4yЇ++GBvj̮aX!R0 CBqX(w~Y4r&㵵!$t8q?=}6WAدeu wz7@_v-r^jM58t$c0(EGtu.E_G wj3j֨c]m!QDkRjA+YQI׊"mv)B+T) Evc8]<c,Ӽg.Rf=8& t!oYץiA ro>Q: ctJ :>.ЫмV:tK 7-=gںv;85h=;-ٜ[OMh`CGIA)Zԧ>>w)>J]UUs(UFUn "Z]R ZBR&OViH)ZH7?%X-gcYm?tA2y1Yy3 ¸.MT @ {̔(yGC$hCε1q y3FOni>_/4:VfǮ#?uoz癒o-8N JѢ>41]KW-Q❭G鬮5*Ƙ?6Eb.RʅVoJ y,N8#O4o( Y{6@țjpuijܛf%/qhSbչ69F>3vpC oi-gcFܹ:PӎjLcxKgE'Q hQߥ(wUVutVWUcL3{ۗZZJzd׊"mv)B+H7?%Xzn? beqlFʬ=n M58 4MS5@M3ky8p4DF)1t +\#P!7^bppWcGc+Fܱm}i[?yd[ 13(RO }D}LWRU}໪xg:Q:fN%ݾzԂV ۼViH)ZQFJA)!Ăevc8]<c,Ӽg.0Rf=0"58 4MS5@M3ky8p4DF)1t +\#P!7^bppWcGcv"ietL;fdmO;fo%Dd13(RO }D}LWRU}໪xg:Q:fN%ݾzԂV ۼViH)ZQFJA)!Ăevc8]<c,Ӽg.0Rf=0"58 4MS5@ -E]SW^\#P4&"C_j |˻G58Rdk~:&g[-SZ$X;_ʛqE'Q hNj>}>\R9m?ڴCN3R;uOgԬj֨ۙ0j\+q9FM+ٯK(6Lgܪ8jPe5ք'zl QW.PoVykޙ]q+9ۂ5(.5 6S-Z1VjP#~PYʑT%HL<ނ~o?˵ﰞRQ`0̣߄dxJH9ZNN?QN}5rg!B݅#h:Z_=8K8Ub|XRS5Ο=)|S,ӏ\ڱQJ,iOm4-ic_ OzSՈʮk O5ԣ\v߬v׼3M݊z4\{"kʅ׀+UMk`6Ȱ',T%Hg.^jfVa0 h7!$R;Fc"#_ALj9:E1c3B!2{~ t-հSyp6V,k* +:xOi]Yx&~pCjFK+Ebm<9qf҄ib;1T3~sԕ۽]욳:Z53v)E-݌)LƘ_Z_@fcR^Qf}goV?̤DaKRʻ(1`/%IK%0@NRQ}@)k{^܃(v`0Gӿ &RҵF@)2ĤS36!B.,ӻGArK] ;U?u,KᚊSZGWxi& \ڱQJ,iOm4)X4{ ǃ =uvv׼3Τl ]?ױ<Ę2d +d6, eq{oV?̤DaKRʻ(1`/%IK.1@NRQ}(Wvk߫@E{ ؛қX4Q`0̣)fSYJ %_ALj9:E1c3B!2{~ t-_i+q3бYkj35!S?c۴,SPp(z)-c3AbH 4ё Ff*3 = R?4gA+9?wfלՙԂu5}N2[mn2%|\cJ +d591 Mel,տ,MJ 9t_'49_T> SBdf$Kjl/H^Jڿ5M1'f|ʯ{V})( + + +ta`0 Ѱub-# ȱaӊ,fWB!=n< H/ztC: KH~X|=ٗ99VTInّ4K_r'Ѳ'#M) U=^B <f~S _7Cn8gͮAeM0JoR=ӲU}_(:K)IeIn_{nb/$Yv\)xSJ,]zI𾾞}Ks1^1k]cdvd!uݡ`0 Ў'9818F +o?_WGzQCL!BSF~ߵ~OteN2Uwv$җ6IHc۽@`{ Ly1<ñnGCn8gͮAeM0JoR=ӲU}_(:K)IeIn_{nb/$YvJ +V/6 }Ks1^1k]cdvd!uݡ`0 ,zYc(́i)3z}W5ʴB!+;e]dKg_X]&Md"ݷ;hYw +-毂!:1F ?Lc1ku-1c{p(Κ] iF6`ޤz8ve.Zg)6IW"IUk-B,e$Ջ==bcl(r&BvC`0 YN$418̑9gBq􊣆CB!ze{/sr.OFG2h[hY%}@_Ctb00v?ԺΖñjgCn8gͮAeM0JoR=ӲU\hR\+!OmwKuRzٷ>E8cF)5FkG6+] +`0?r'9a΁-_#!BrBEZGw 9uO<--riSHShi ME6>ITwூ!:1若։eϴTKޯ5CqtU6iF70JoR=Ӳ*DJZ?R^H&e!n=챬R!%*ѳ$ً;ߗUs1^cF)=4FkG6+] +`0?r'9a΁-_#!BrBEZGw 9uO<--riSHShi ME% 􉺦l a)RkgZ#x[oךwá8kvA4^7iiYR"C%iI)A/kOϐI[XXH)?g퐒{N +^Y629}.Ƌpcl(r&BvC`0 YN$4њ8̑9xE~}W!BhWNH΁2gIgU\]EN~۔1+GD_|GLi*IuMy' +*10S֊eϴTCޯ5CqtU6iF70JoR=Ӳ*DJZ?R^H&e!n=챬R!%*ѳ$/=xNW=xbYDBȮt]w( 4i䰞&Z<98#/Bq#B i90B>WoFM_k 5;mҌzmo`ޤz8veUJ ~8&?M>C&znbcY#t_ @KH[lkBpң2Όsn=C}%JI'$쵆;b[Cc_BDP!`0_3LasMaCKD +.ʻmRB!Ȭ_J]"Gh7[>b |U_WWe<5~ğRyzB" y1Xh&]HџZ K]oowξU^e*7e&Ϩ2L:˨BZfYfIUFU)_K2 IؔZGEBN`0msMaCKD +.ʻmRB!/.#݌[~1ޯ2m`?j~{Y@1E@ +b$mGM +?ZN)ξU^e:Yk3,2YzVYRQbUJzR).6%Ķ8绖1v~fQz,S`0 !pndEN%R&6wQ}ǽozB~)ufl6U~]]i;>CO_$  Mr6qԤ )S~M|]F[9[U*JϿ6O<2YZ, +ig%U%V$-!,'bSBlskcGhB9 `Y6Mmp5s=}G#B-KKF7cGLܾ/uu5[t lyDt =!|,4AQ.O-֮7Cuu*olWC*=nõ.ʻmmG!b[Dzn-}_jHDDg<_J5j]'/W&9h8jR؅P&xwXNv*shՇf*;}FeYF2Kϲe*Ī%d`S\lJmqw-#c͢X!`0_C`6M mp5s=}GB!.#^u#&nߗk-x:6DzRMZWf'c ዀ`I&v!Ej1/v S}+gZeʎ6?rQoef,uQҳl(*%k Yfa=)b[];?B(=Bȩ`0 f#0MaDB8\;} pMl \{&zB->Kflzf4NKuf:V;>CO_$  Mr6qԤ )S~Mp|]V[9[U*TvL֨2L:˨BZfYTeX,lM -zdY !T0 k ܦ0" >D +$\'A !ZlwB+flzf4NK5gf:V;>CO_$  Mr6qԤ )S~MP|]v6;U^eUYk>f=)3di*eeHUFU)_K2 IؔZGEBN`0f0#* +mTpm-%5!B!5ٺTS3Ϸh<ەUX?zݡWѪ@yg@O>zVcڹ e |[u?]>ݙYze}֟ +^I"2$Y"xTwi۶o;s,rƮ;Ym1Ҳzf}-Ռ]XT/뒢Ly6HџJ/رX%/c|\تXoPVchJOta0 SoI~OQh"@iB!e*Fة$(S?wߊq*FvFst]ZZ, T֢e]R=)S;e [mʪb`-BɑnU}6 `JӽI% -4!B!|Jtn~TbT|L>ߊq*Fv`0^tߑzr4%ȳ;lZ#B!_U*ѹP!SI.jk[g[u?]>ݑYze}֟ +^I"2$Y"xTwi۶o;s,rƮ;Ym1Ҳzf}-Ռ]XT/뒢Ly6HџJ/رX%/c|\تXoPVchJOta0 S!)r4[h6B!B }D6G@%.%$i,DDz>MOy/$ {,pI<hkg޶|SޙcYה3vmmjQm(]EsR Z綘_.)ԞgUB2WɅzΏ6eU^(kQ. Z:tJ7bAdJ<֔ $AN&)w^i@!U`o%Jd~G7UrQً|¼$FIR4ʮ9R5_wf]-e ?f5Dk&U/ۡUmU)%4s3@rSJE/!^^cu臲Y1NBƑWQ LIǚ ȩ9%qa2m?D +Z)Ж?]tFJ5*{qU\(ITb#R0 ޾ά˺E9cYGڌcԲFchۤe;*ӿ*弤f~HQnJ)غ%ċ1Kv sP6+VVI(8R*}CA)iޓXʊ"#ߑ6nsx#[mST_+ڒg;yWɱFe/n ^%Iѐ*ZlRf{+r~QޙuY(gl?5HVqZ~ruTlVuW)M)[x1{Ɏzf +: G^Eo 2%{rk _YCdx;me6P0E"qR-~ߑ|kT6߫`颼$FIR4ʮ9F_wf]-e ?f5Dk&U/ۡUmU)%4s3@rSJE/!^^cu臲Y1NBƑWQ LMq%9!9%ߑ6ns-ӶC)9mE]:aU-e ?f5Dk&U/ۡUmU)%4s3@rSJE/!^^cu臲Y1NBƑWQ L-^rUMSA$_'K#?˻9>Ʃ!2RE{Gq;txk~CU`Oנ}OdOAIǮǵC[=O[rl۬$ZpWcʎ*Or +$X،{:b}_<ygϰ*gYm2Jk$C '~=>OxGnReIT)7|֤u\<]{RMBcC?ws=]]19cg?3xk 2%x=xWV5AN}L/>U$$ȴbwDAɞ>]==\Q]k;귮{ضY1Itᮾ I?ܦt$$~IW^ ܘpC Μ +ϠqSPy uc]v2Boy4fl}S{X62NTt57#| ɥ%&&$%&I.Z3O0>*Ӈ9Obb}W7 b(!m)c>ÞeYkxN2), eA%+'φ9#ZV듇_58p \u4ԥl5NB6T[:CiHU}NC7<gjs4i&+N Fh^R:2v=Yeg%.ÑʂˀiB97>yɷ.M wyX?B}]86t4nӐ$9txoxXG7i>dMxVB]h*on+׎[{\=fql-/cYbfQi:_ +.ԺF7c \yz&OSjr"{㣹"8}h$&nMͿS6:c룔"=(b{eٮa`````|>Yɺp0@cOߺ4%* *%4N@mwCkYBYՖ"T$ןR{& c9hO?5~"PW[ʵz{flgIQbSb=3:̬ T"׏5TWk^sSb뙘?QOJ!(!%eZ7tU4ΓbկQJRs!m)S-gY# G + 4VA;cyB˪4^j|lS|:˹i|tpn +8V.Z9G; k6t4%jT%YGڣ7Y>ιE{8Ma02%TނwXW{~5fK=KjןkxS|h9^܏cpn1{G; k6t4%jT%YGڣ7Y>ιE{8Ma02%TނwXW{~5fK=Kjןk4~|y^ݻ?B]!=,)U*=<q-oMiAe%ԕ.ƺreDž5[EjX~gFzuQrqYT7Wb~ FTz=H 1\'pK3,o0cuJiRj!1ej,˲o QڎfX8ZN189sBhUGo ^|j/GÍGz:X8Nu/û_CGZ}h|w=B8:%]߭-ݴCwCn~ +#a߰ &ioB7ԠҧkN}wddw0t 60_8x# 8{}}&2۝;w0C3E~(Msey{1']-ˠ!8 ׶s.So\Cx[%pn<N4ʨ;@d˳t#BUoaVTbȰ4a@lN7apFB5Tep^KoLne;w`чfP +(y-2+ZTmdY?9 4~-)4!,QӄXsl0.~k!O`0 ݛ=ji\ax@~xG!iۮpnJx=5v:5Ǻ7wu?nvW٤?!be3=e*M|wddw0t 60_8x# 8{}}&2۝;w0C3E~(Msey1VkuL/ N)gM/Pz UYw۾>[;k"?Bg3Tҹ(y"%"ߟfJוm-O*նT2̬WRj)y+"ApEp:Me$G|[(N6JB `~DWinj/8+Bmq\sk[)Zk¥iŒKSӻͽ{Z~Bݩ,'}޳{UkuL/ N)gM/Pz UYw۾>[;k"?Bg3Tҹ(y"%"ߟfJוm-O*նT2̬WRj)y+"ApEp:M<'k|[(N6JB `~DWinj/8+Bm)\sk[)Zk¥i¤K~7P>^^x_a^0/9Yr+Zwj#Zp3L&HZv&_B٩,}sUtjsJ7sN'=)m"("kJ\z۝ݙ+0ЋV(F<*$HEI)y}!niligyy4Caiai#(V~ŵش(Q;B-I`0o?aK!'S=f`"Fs`aۖ𶪏6k 벻u X{}&:M;+9;=}}BMb?b?#+{0:6sa!V8YEE*dr$94@ 8W}WšWɼQ +B*zp?3XFf \2`o8JDQTLࢍ#@VB(RF|QbR\Y@|A2ϖ٢e,R1F) \ԏ?5&F J_!dђ$Y4 `~t[ +9QB9T64T!5 6Mu ۶U}Զ]Sm[ݵwm]+X9/ҳօo=}}BMb?b?#+ 2ܤoXHg~U:N<)zaVy + zh3Pz`{ߕoq{2ot[)zp?3[wo3ꡌ1Q6Z~t4G(*" \<`DJ(E! 1JL < xP9 Y>HF4[ZJ Ƞ4Dk#,Z$`0o?aK!'S=f`"Fs`aۖ𶪏6k Xuv¦.:@YsKK=}}BMb?b?#+ 2ܤoXHg~U:N<)zaVy + zh+ف++dBq_}ZkQz(cLmlj-e\)MQ"He:WH-#εJF6B#D>HBuegR9눜Y>HF4[ZJ Ƞ4Dk#,Z$`0o?aK9*2'P*uu*ZURǦݺm[۪>j6tcU jvK/=}}BMw f32 #Mt?Xsfɑ'w~pJo=x-}rOf ''+6_o5\\Ϩ2Dv[Vεt%h*Ts2"\)d)o#H>B(1).T\< x- d-OEX b JSjMA6BȢ%Ih 6 a#9ٗOdNr9T64T!5 6Mu ۶U}Զ]Smv릻M¦.`Ujh<~R)xàiB!,Qj37iY_`i^UH(dr$94@ 8W}WšWnl<~Qet%hjZOJJPB#D>H9 Zf/-cϖR612(Mi~d161BQ!$ɢa0 $d_>Y͠:i +֩,Bh)>k4WlJ + +vm om +lйߍvwt JB9.þrGMϞ!&giRIްB~'B&, ;dUkKKp/"pr&2y>+Q`FeأyЁ{H +z@S+`ƌu]O{kOhy#݋͛=)PJyI>+L,H&8p Ra h-VrJLR?A8cD\G AвAZQo-G9rjXYƔ=5&˲w~l~jgӂݺۡnodnǪl{;kz!7˲l J4%OC<>YiY3. ͋=3@M3u=1=e켞i|\ox(Լ$L&D$tVby8`UbE)0ZU4KHh%&A럍 1 "y.# +Bh o(#G9r|5 +Ox,@cJOZeٻ{_g?U 6 V5in݁ЀU7 ]z_Wj|mzt`O~mCoei4Jҩxj}?X+Ӝe f\={ gtXZk50fl-zc\{>y=.swo=.C)%d2F$"?ciX{(J2A^ZEE+1 J]l a!s1?7gQB!|kEQ9rȑ(оu;[\K\1%hz'ɲ,^A4ZϦl_w`]zyIV6}woڭWg >z֭C-@o9ϜFP+<>F#ʲ,[F$5=_UBA|u?~'Y"6+QP##hËU=ܽ΀5X'ƘI=hyst3iD+/,u}TDl}f̱d%&? +A؇a袞48B֊X9rȑ(оu;[\K\1%hz'ɲ,^AX  ~jvhֽ=R| U^{窞l]NuP tҞA{}(˲l ~>7u +FV:xؓ,}?(ibߍ{qV4CsݪVT^gcurrk|޳hD+/,u}TDl}5?KPe"5&I!|>=kA|u?~'Y"6+QP##hËU=ܽ΀5X'Ƙ5OtH~DP$熯6x~(^))GLJ9+!XH(~8 gU5DMC J*hXE1ǒ(aIp!((X?Aв@ZQ#G9r|=ܹ Ԏ;[\K\OZeYN ^7sՂ8{݁m{v}%9u.5޺`թIƝIht4}L,˲Ej4L^C|z>\өV+ZbOElVF7F[ ݇u{XQ{kVO1kh98Dk%j%'<7|uݷOEDOI=jfRY DBDi \V۳-7RWOI5RV d&VQvUBsHPf~01v].:xF1Ɏ9¿ +("(c(_Bw |.m>iJMMMMM! F`$E1vMu3O!)i8'6)zn]8Kw`3Z0 M|G)1XdԷu7XAݻv&&ERڜzY&7Y=:)|N^Y 36rVF>ڔo\iosgݹ2ק3rB?SJ$t!+Yt:I*_JJ^DR*_ +VDs !NBEꗒ<%_" Z(3?eE$Eg$I\'QJO"$GhS#*j lݷ\§ҶCk|?alQ氲iK"oP4ت.(o=x `绠i{o~HcJݍ㷼)M0f$2u`،L|ρH4:|_XUUz,2[Ë}kgkR$Ux)er?+۟%C1#2kwi?a$ u9Yk#gud)h*qi(7ΜseOgׅ=~HBV\])uT&:W*$,Tֿ$:WBą/%yJ0E8Pf~ʊH"I(ѹODH"FU0D)AEBTڶ}hM<'-C`V8`I [UUUmr϶;O!)puƋ۔h7!<ԁw6SO#0:Ko`tVUU=޴7.+q~pڙIޟks +.eg P 눦]s8I{g%pDY QVMFEV']83mj^_-s}:#7>?.3DB%uTB*גQќ$u!D ג<%_" Z(3?eE$E H1L$kDH"FU0D)AEyB-?mКy*555555OX7[9,0 + +m6O=.'xӆ!nvGCnӃyà7tԛࢿ9*3jX/4*r~p4&ERڜzY&7Y=:)|N^Y 3Qg-ӦHn=Xiu/33ڦ2ק3rB?SJ$t!+Yb^WJ%2y}-)yUHJY)XIb^B$Py}-Su8-9Ϡ2SVDR$c Db^II-B1yj_CBmAZ_A>mZ4OiBPxioD z@,;vނMSx}3LZ?̑~nי*/~L7vlk0v" N5찞{ahp zw5p`IgSUW4]g[>.uu{AnkE>3@ph\ +$z%ÚXm:az,\G1f1+hyS:K/R|JSJ%U !)yB N,~[a$` SZ~ 2fc c +B(w~o!|*m>iJMMMMMͷ`ӆߐ!0Xx"oHqUUUou:|w >wAxC٢mM0 W.;+&>B~#¨Cϳ >r5Zx ]g%:Rߖ:W|w_;z,yk8ou/;%:mK6/"Ne,H AdS8U', W{ã6଎X qQ$⺹bߍAUIzg|JWV7TKi)h9"7fF֛BK)ERrrrrrr~ sx(o +eΒ3:|\gYej.n~׏sDBuyvaGIpk?^îS߫5AOޔ] 8Kݚ'ۿ_7:ڶ_dKV HOp)Zܪ[Q ~+=тCVpVGQ(q\1̠$=J3}ir>%J)u_JJ.JP`x3Oj2+,XZcnVTKi)h9"7fF֛BK)ERrrrrrr~ ss-(tA0:˲,{Vwq,޷kE;ӇX>׏sDBuyvaGpu~xߵ`[u +з:*A\qbg̲lk)Gk${bDm%Yĩ쒕ei=!S3l'Vd%VbOvxks=.r5D\7WL13h*=IRL_ORJݗ䫒RKB<<"ތ # +4ӗ&S⡔R%쮄967$-" JS՟._մڔqJc@UUPJ#SMo !䥔eԊx)999999?NέCO7kx; +%gtL=β,]28 -y0hթ[Q6."C*I>!Ly!\-\-.?6t70|ǡ :BlϾXţq^įӼBK-ڜ@XY3@&g8~jKu"{W62J5*a|.q|< 9 +JJRd\f%ت8wKp:,.C=A-K5m%M"zBض!!W'ƛ4RS꥔:w(ڿBA`QopQ/b-l{=삃RϸLZa a[gm}6s~mmu.~Ο׾GFknc~ ^xZ‹-ڜ@XY3@&g8~jKu"j|ldkTh\y&:sX&ɸ']I)oKU !Mq1tk'Yl]-]6 z&ZMXKbBK!O H`T]l`s?KUURJJJJJJ~;}_ϝ,ޠ< +}EQ\ 8M֏އvg\&I0iu0-|9?6  uF'GQܒ(W"|lK6'"Vnj3f(Rhw^3W62J5*a|.q|< 9 +JJRd\f%ت8wKp:,.C=A-K]6hISLh0y)i mrqbnyGz)u]?^JIIIIIɯS|g+3tGA7(b x¶W>Xzvg\&I0iu0-X6Cj]"xངkf4]yu +/Ƕtks-beq̈:i. lgldkTh\y&:sX&ɸ']I)oKU !Mq1tk'Yl]-]6 z&Z:'m?Ӓ`Rp=U6!*x!R~jUU_:N=)3tGA7(b xIx,]pC*I~!Ly!z /͐B AC + umk={KkXzZWE:c[:98fDL^p4CEO7`EK<"IlQQ ss\c䙴O̹6WPbUj$>6۟w%-V%X79+Xfut$ hY*6jISLh0y)i mrqbnyGz)u]?^JIIIIIɯS|}=vz(fu_Eq=T,) ޶q 6}a| +}eDv_gނ?kk38cMm;ނ N{-{KN>t}cy_1m/Ƕtks-beq̈:i. o6~xܯD<x5`#4XF3i]ЙsmĪ,5I5}l?JJy[J.Nos~W3X;bj2I4Ѳq_i\KbBK!O H`T]l`s?KUURJJJJJJ~;3tGA7(ح.UU([ǜ5 +N)bʽ%@ oZu +63gC;§u1'D?qn nًu{87ې t34U夹ͪu=gla_m H#1#$|㗦z*]^A#j,q_ N3JCcThZ{y"3:qJJR_cIPRlUBuqzWbE8Il[WMUžڡU}5 &o < 3 Qq"!7G?[)EVrȑ#GoP A'8p +gYe 0l: {gϦmӺ]" &f휽hk{f\8pl`mHXם>ܛk_߫坡I5֞la_m H#1#$|㗦z*]^A#j,q_ N3JCcThZ{y"3:qJJR_cIPRlUBuqzWbE8Il[WMUhU_Uj26*L +Ax.g@jmEBn176RK+ȑ#GIr. +SV!e V0hgYeiZ + [ ;o`v9MJ6~^'UKk#H﷓$ʘD[fYec?wKumuM_MZYDq*b':ƨ( Zv"I^+`4`>>92 4|Zhyrh?kcR4IBUqa"I"Ջ3lHO~ VQ(wx%W~}դz+&o >92 4|Zhyrh?kcR4IBUqa"I"Ջ3lHO~ VQ(:}դz+&o W !Dodp}qF& h`M cP~3;ЇVxi b4sTC!2B 𦀓oB9eZ^<\}E.V,9%4iMΝS!4 +|-ZK gW?KB葶^14Mt]{bQmW?&Z[P*z('sV˸]WymR[ģ3>IY=!''l{GzdgǜQFkיM]gcN-7ZKC)6feN &BO_&|(\OUUUFxVJ +lї{qgd2ܤ90^ +7c}QZ!o(`0~!C+ߋo7y-q˹KN;j.mLk:wiI BߠW ;M|gk_tO߽?YiUer2gU1뺌 &*>54Mjxtf'3;'Ĵd=>y[kWMQFkי~ZˌٙXJJ)+-sJȜ6zbm2!ErgBQ[)+Mf{spFf@h1;&]y1^]Dk!(^`0#SQ5o9WBotϝ,)BtCá7p_t ou +˂8{ts +mrur][uSˤw:[[8$!o+ĝ&3/n:ߧޟ4YԪx2VC9u]}PﺊC Mm:p&&L 91?pOdg;zzc"Zuf2cv>RJJ˜2'M'rXLrܙ)zHxVJ +lޜ&0Z̎IsaBQZ!o(`0~!Nլz쫇:j_aYu;_v-_VxloCUj m6BҾLj{?m zM=uDqj9I,{1edS3#-#p[a?P8Y?խQ#b_e0Zҳ%(%-Aő|SRm|UbPp6j5ɮh=22  k$΀`u#3x-Q +0rc7QWzmi#(J(:'(uԝ$ߔr["yg.&pBD_ ò-og}G| c{[뢐NU' ndzHIͅ"!6&uK#'_yV +{0w_ǽz-ۗ$Zt>oQhڀQ:cDsU\W\ZB/UdRD)yUQ)sB *!ĺPE\ L8W/s">Y+f|owonWVo̢m3=BYOh:BȮ4Mk ò-og}G_xg禟159ot?q%$^]BBdLQBl9* 7M,+h2>KYqo|fh2V\W$Zt>oQhڀQ:cDsU\W\ZB/UdRD)yUQ)sB *!ĺPE\ L8W/s">Y+f|owonWVo̢m3=BYOh:BȮ4Mk !;Z{p!VI`B2_?gXѻE¼mdOsW$I&nd`q +ja$.t(W i>xڻyy~v?zlݟ},ꌂڌhۗ$Ѣ#{0hLQ0z\ܽz4-װV)*yo'تb<LJ;;z ߖc}S[~WzJMmd^Y!4ͮa0 VH܆jn'"ZQ'>NnS|yTaYGuUY?%]yx`U'ndy/ɤZ.t" i{skNnS|yTaYGuUY?%3W:9D*#OaI5Ne5,}}zrRC|o֍d3 +b>k3Yo_fd[8$Dē0: +FmqsҴ\W\Z$IiRJ|`B7|[6UcOgf6ߕvҵt(}/mf(Wֿ:BȮ4Mk .IqUVPMl+BhEAp +~:8 N!.S}e[! VOf8$0&\Xrf5LI{e'f>By9!NGcFI2V]W1,/M3-IEF`F[6`չ{fiZ+a [SJU$4)e%>OU !xwtw-**?/뇷2tەF{i6CɼBvi]`0 fw!(Lè:Bmd^QB+ +z$WMp +!wp/3,ݢa^2\aJn6ja^ls\^vtfH[Dv_ /%-.4ͼaYԤdqB|ۭuN8OmV6NE@Ɍl8謄/)۵UxK-z!9MMSJ-$I^..J(7b[z>wpߵ:}J]i)4ƞ ȴGGٕiv `0Z9xOanK,f!*JAGyc= R +o1kZK :i)E❅ Y8x#yyD-0>K7,Lsv=Bh_Aӛn=s\IV~jYp-2-Hfd Vu`Ag% Όg,X}/Miޮͨ3\hԴ iJlRj!1M򪤔uqQvFY/i[s~W_]ەRi=Jii+M`0rz Sb%dhTQ3B% #y<Ʊ xOt5%UҴ"Bkr1|5AAp<]+M5t3i!W߳Aӛn=s\IV~jYp-2-Hfd Vu`Ag% Όg,X}/Miޮͨ3\hԴ iJlRj!1M򪤔uqQvFY/i[s~W5Z}J]i)4ƞ ȴGGٕiv `0Z9xO)V1A24 Be<|xT:[wêiZ~xg!_ YyM.;:@ 2odQII7>B{=4IP:Hedu]6+u '" ӂdF`UvtVjpƂ՗ޔڌk<%OMkĦ)$JJY%hg-=ƻE8nr'kwl{.#Ӯ!dW5 `j!8!jB;E:Nqc%HS*B-ƻzMzaU4/E_YaƐ~Z[[gݙYD~{`8da7n~TB[uS5hzۭuN8OmV6NE@Ɍl8謄oO V_ xS7rNF=43Ck9lzk%6M)&yURʺ(~F;߈m4-9_Wvkw칵$Cv]!4ͮa0 S+P6`eq8XQ0)RU2e8JT:[wêi^G1 Œ!ϾͻL87@޶~}Nuڪu&A=[c"/quڬl%C3lL قUqY 3c V_ xSk3ꡙZIf M_+iJ4ɫREI3eFlKϧn]}C7X+-eOB)-02Bvi]`0 VNoXCpCjr5C"U%^ /y){JC(xWi]/1ܟ; 4- +1,x ~P/ӕ4-|{^uSA9A=[c"/quڬl%C3lL قUqY 3c V_ xSk3ꡙZIf M_+iJ4ɫREI3eFlKϧ֋EH=!/gL*l ܠ+h(!!9?sq֠4 +[uCɸa#JUU`0Z9pC E"ʖ_^w9K_)=g^G:i9Rlﶝk,>L\ƖwǠ-!?N?6`)>g!긞^\[ۣu^k09U-K/ +-:FU n)h-G:p|`Ҭ~iv1j8cL7Znz&9NU)%d؄~"qE(yh=lWXM葉J _!dW5 `-(S-dD]u!SdUٲ~4K~b;v+HqQ<-pSݶs͓J}6MP~G;zum΂z55C~oyMz+xT,Y4+ȶHI:V1pW.zwgr4g~go-f'Fٍ34>~igXRj]BI>M+r['Y_sq֠4 +[uCɸa#JUU`0Z9pCpuu E"ʖu.! s+mRzϼur +7m;"?9w}WJOyZNۻm'MJvON? :m: BӺyҚ!:IOPxE5ڜ%f #I*N7E~r4g~go-f'Fٍ34>~igXRj]BI>M+r['Yqsq֠4 +[uCɸa#JUU`0Z98d!,B;EV-+p]088C,/ι]J>>R\!OeoIvyܤW*,mY*g'W8ˇ|!NkNBn~ȟzt>k<^u Ƴ6eYAEBHұ r;h[lT{z{qS3Fgi|FMZ$)*Ժ|ЯWp1N4!f4 *􀆲]a5}ku]qS5]j0 Y3e+!` `KB*jHhW>c|\bӲRlG]?({?ڟNh[[pte?۪: ĖvZ=~.N;B/bJߋW=`d$ :JV n: Ϋ=+{H _re_`C6}e҆0JOv-?6诖꿥Ī䫒Rqy*!Ī/*􀆲]a5JꞺ.GJobm{AnBv*t`05S^PN!Jpk<|03ƧH+Q9-+vUb!akدuLud`},) Ћ8/٭Y% nNh$hӝ/v8h ^Qh*L&9X#y>Y93h 6q.YXm.pjިJ_o(}[Z6UߔR^⪤m\ OST ~`݇s>*BS`0 2^ABFNvPD8oc\uL^S\5柕Ӱ1z~k={cZO]'!$[MNgMJD_tυ<+vpYEvdb4k8]zE4{pA(9 ºMKVn~*V ܧ3F:7#UFҲ)RmrW%lKwm *]c>TQBZuh`0)􂀵  +BS`0 2^ABFNvX$8r^uL^S\5柕Ӱ1z~k=6W.)Ij? N.DVe[# Bt}8Wo ^Qh*L&9X# !8s7 u8cT6uߪzҷeSZM):)JJٖZ@0T8eO@y۫R# < `0-SZ/kD+ y: jlWPA!yxEc-Uǔꐯ5UcY9 \Q*kcXֳץz_s$x5'cKG{q:>ƫXfh(i4g &ZJ烆xo ι ºMKVn~*V}oUFҲ)RmrW%lb}SCK){*BPJڹZ̺C3 t㐽v @B7.u z8$oP2pLiCrvs\u\87cwe<>8X^w + +X>='ѱɟ,?B:QnTW܈Ekkk^!gl''V0P_(Z>ּ53y/fWd;+XUFVu +C$1sdM4jߴb=_KUG]SBKu#1,JQ9/òx? ](}ZM)M1F +!W( +BTҧ{MDŽB^T/k9ZoIH>br)k4g'ǣk!_ʻg7-Ā6Ϊ3}!Xk kwoT1Jr۞ԯĮ)!%\l%(aYȂ?cض~z1HA4 +BP(J41D4dѶ !4Uv.k) 7y=Cr21ZWc4L\ ʻ%>3lJq,D{_yr!l2%Ҿԣ]3zbV==Z )pZX@^Ͻ5uШ}ӦQ+\X;fZ:Jr]ŶaQB"y,hC:nJm]m{oc4MCP( +OSADNX7-!4Uvi=fT p +}n/;Cr2(W(>\ ʻ%1G~f7fqLm4^9g\Y!l2k"Ѹ˗zT+xpF}_R,Ӫ@+y?`ӂfD;YS7mh2~񆖪\뺫Gr-bXs^$e~ P;R[S[#MӐ+ +Bl*ԵtVdMK!%M]Z8A0#F8yۋN'Lc(>JƹBz7w coLSZsB +EɦgL\ۃOsgsˬG;G._QͮvV놹U +T8| +f_HLp{fX;`̀}bV=uΫ҂km[MԱF6Uu46&VV϶QQДĶP +Z+)&!&9K #2zw31F6t]GP( +>,cϵ넒C0&kL!mtKW /:Ope%>=*oe3ǩƆFI9t.ɁC|_Oe2SХ?Ko?6^?!D]zm]ַ3rcUWpCJKR: .m=s&VJvWԱF6U4ۃiTR)mh + R+[_Bl0p*OgT8?Ua엃nSם BP(2\[N(9#a2fl˄Fwjѱtp +r?]VSC\:s,mloKmT۟Owr\{/߯'śy!K+U:;klR2^R`LIplٜ3VWr5شbަOڗ/MIl ESXRP4&] b%hSxj=u +ct\( +Bi1uB! 5`\&6S+Sp'BX2יTgicC ~[jFHmMVrM2 NdS,\x 7<[<;_-^?!D]zzx(aƪ[ 9Ӄu\:xo9Yo{%+gXM*Fm4})ҔĶP4)eEcrܕ@YX_-9bɎ~83~*\Ǫ0A΅BP(ac}-_'0^3eBi;X8~yk.+)!Tyu.s9Nu66෥6jOѭ%lSdnyl-c=7_-^?!D]zzx(U]5)d/IZs0$tނs&VJvWԱF6U4ۃiTR)mh + R+[r;0p*OgT8?Ua엃nSם BP(2\[N(9#a2fl˄tBt,]\x<5O::KbR5Bj'7sY ¤a +Cpn|ZL~S)U]5)d/IZs0$tަ}ɬշݕ3uQǦM6`|վ|iJb[(BĂ19J"(Hv4é ?S:V_M]w. +Bsm:pA}.Bӑ +ѱtp +r?]VSC\:s,mloKmT۟y4l Ig$lZ:y^5rLQ=9X\cAvp5czNKg-8g2k|dwLkԱiS(M=F/%_ ,hL(! +r0p*OgT8?Ua엃nSם BP(2\[N(9#a2fl˄tBt,]\x<5O::KbR5Bj'h47 &äa*>{8?9h~BY Ivf` +uH ;8xIJ}К}u\:xod[^ʙ:֨cӦQzc{0>j_J4%-M!bAJY@јw"cbɎEU +pGi?AdPP?S!mOeͩ5 +c#4 M `0C6|: kfoBA xxô}ga3!x-1~R|j?"n\d8+n@)}?񝝕?B|S?le$ [z>($)X-c9s& cԽx/eeueݔ΢ڦDv֧*/w=5[#IJiA+/I+ӂku5e,͡c9L,ZmJmg}JcI$e(!Ds}a˲zO𮬾Ё=5Pv*U,m~!?7}`0 Br5Nm`x\ !T9PF Kpw=hZ z y1Ocl|'c68{}YAb}ﬗdQz@/;Mg#[z>($)b`L rNsZ<״4:X3h)Q)!%K\% yBP}]Y}ۡuM{*-kNTY( B ~n `0Cj>kPBղ X1p +.ii%$.-|c>{v'+clq;ʏ>n߯bp0nQtq;o"B|sV2F-l=҂V^WJ10c9X'9xO-kZXCYsYT۔ǒI.}QBX5A3Z"T7PS;CxgaTi۽Ϟ8Ʀ1~J\~#?~n}c0ԋItt{vތ&JrJw>1$lar𒤼R1-:V{jX_ZO)z#T'L_ސ8u8{xJH}Lc1 +=m168O˝oǫ~3)]` +'Ypp] ]MoD!TNP|f+c$IA)-h%IycZ0u3`Ȿ9y<ǚ)EKMO y,_,%Hp/w>niyctM{*-kNTY( B ~n `0ÇSt`WN{:Td*=D4y޼?=L+!19[30|*xgOcWGȝoǫ~3)k`b6BhTj3ߤI|PJ Z9xIR^)` X=xi-cieu3ϱfJgRmSn;SBK&(KE ! ݡO.mw7_?+8=5~h'+a\IuwGhee+E_볬I Rv(U(ݷ37FZ49 `0N7cMAߖSc8|B<99 Cw:瑴Fo(ig- xb/ i=:>;9Bh;Q=ە̑iO6Iw$.f`m pI5/OTԱc{MtTϥğܖ6%Bnc}2^tM;UWw'[[-oa8eZ}?{cHE#`0 fxskz=FhTںm9,Ih>sp0?!g<-ęq3cPoG1wǮsIkf֨ύ;V[/> φS}|6D~%A0-{БE=h~oWJ; 7Ɩ9#ԅ m:3%cTiʙ:vqϴb.r깔Ӕےݦ3BmLUDu]kڙC<ٲjys( );v*#@z- `0ۅPsuܝX*Aogް#!{ɢp590 x_#̭}07D_%ʷBJ>5]_5}=>)=3 +zA|nZUe*I%F5 o&:˔l@6=#)pV_Ym(뻖Σʃ-]%ZRR[%db\ |a9hُhm *h?4N/c/ChBP`0ۅPsuܝX*Aogް#!{ɢp590 x_#̭}07D_%ʷBJ>Nd歘뾎  3Aљ^/(^ WKC +кL=HdYg hՂ5 +WV0J`}{K@깔֩_ YGv&;1_X#(Z#Ejy +Sn06G)rޟAh{!`0Bg(:N,Ti^xTں&V©p>&$}0O}*[i+X~JހONz%M~^q5͂jIvhVZЂ,,SZFjF\ߵtUo|o(R=:+!nd'6&wE{!DѲvO5-PT0~h2t9J鏖 B;wEA l:C)qwbZNsvp#vO7YNsp9x80&a|WBHs^DzW։fk$x+7M~^q5͂?z_dfuJ{Qh -țɲ2%Ъk86`]KQF-s)QSٿvMvbcjrg\wɽB-mT]Ӣ A )C7޵'Zt +0 .tDӋj8!X0B[MS|1LIX*an!*1UҜWuM)pVd>M4*(ZrnK*LFR҂,,SZf|&WV0J`}{K@깔VeJ:5ىMO%(Z#Ejy +Sn06G)}h;"oBP`0ۅruܝhz 9xBɢp590 x_#zNTs!+sIdXDI_+md$=t]wk*m\7l)-s|nZWrEA$$/; ?ʆ-B]4ռA4EOd00푷ʝ՟Xm^˨Vo^G˷ٔx)Ԭi=Jȗ@ ޠ  `[UC*߽OAA30 zVZՉ?tC!X1B?mkE .ͣnIi}>t]wk*m\7l)=Oy+RN`п)hUŭB?_XK_JNSDVi;+nw}=ց3>VӿkUhִT?/5G R"4aW㔡~*]e~B`0L3:N +rH! lS^.Z8u muLJs]Vis\墿fKu=hBs z;c0<ҫ[#~f7蕜艬"FvV݀5<[XN?s6eT]+7J[RlJRjִ%KFoЌ_SN0vRzrezmr>}0 zaXi @t `DK#c&Hv +``Ev鯥~u6]X]^(T1{x:AC +R/: k~lBϋiNxEN-YE> 0kxg}=ց3jٍʦl-ߊֺ.%RwB^%qܣ> ޠ h `nyzqf`0 S/°4 @2Ȟ5 GnjHЬ.'`ӨE>Ev韥cv]MW9VJ)?dБW-4ڒUh +FwG:pƖ5\mV51c[ٴ]ԣ[ZץDU.UQȫd#n{'>4aMQ:1Z/B `^auH,9x - G:9(Aw~b'`ӨE>EvҒw]MW9VJ)M712BP(rwj?+!{ D?JB)" 0l Mۘ)8kziS:8!/2|5&L)U_ī!y"'I!NtEY@.䅜!sX 뢃 +C^y֗pYk-l\|ȏzL+Ƙ*J9t^#82>.SGUUWs:?P I&H.7|b[ncdBP(`=~ VBr6RD@vaD'1Sp̩,4tq]Iw59gJ)*ikG֕]r,\N_Mh}4!ɫNY@.䅜!sX 뢃 +C^y֗pYk-l\|ȏzL+Ƙ*J9t^#82>.SGUUWs:?P I&H.7|!2@P(ʫzZ%D!/S -_dkhCtp91.&ǢL)M7]kh5{>ePcj?l 7pN91UR8ƅXT)m?ٙh;1^Ctu;שn(~WgW=nʈ5'+rjf7^4XTցCۭom͚] zx]Aą,XظLYZRuYu5P+9O>P I&H.7]B?>\0 +BP^ֻn-!Z |Ztni$[C SpiUq49gJ)l*i[Ov&N ^w5V9o/3^w|l[F|9Y3dMV7蠩jglbuv[r[fBރzWq!=16'SVET]V] JSdE&TB `|W8B<'12BP(Wn#py۵`%D˗AIȎJL54!:8ǜVuHqZXOcQy¦bdg[אzUd{Nt}&E~G' ȶeG9Cd5{3 +,*۹^yַfͮم = Bzc,l\O,mRMɊL$$p~#o @P(ʫzZ] V +"JB)rM54!:8ǜVuHqZXOcQy¦bdY!u';d!'&l[F|9Y3dMV7蠩W:ph-Ykv!tCA+Řz )KCz[.j%GS"*!F0+$'cdBP( +G_7JJh@MvNO$٘u3):-SZkt^CD %!9>:8K7ui*UӗTY)nW,U} +v/3F<$u[ G-{10b@袿>@@?ݡJA{(Xɮ✙|ڲ)ݗ6m5a\G鷦" d +'7w# ( +B-|>Z#"*H( ! ɝ )]:8SNTJ9wJe'_ĉ'o?QIQu[ G-{10b@袿>@@?ݡJA{(Xɮ✙|ڲ)ݗ6m5a\G鷦" d + !w# ( +B-|>Z#"*H( ! ɝ )]:8SNTJ9wJe'uNgqob#ˉ-' +l[b`4:5ĀE}~)ͻC0L=݃P]93ʵeuS)[ƌ0Z[RJH@rA1B<}&Q( +Sa[Xe7J'tJBwyNȷuȆkr3!{O\N9MS~*+*e{ߟK }xy]9A 0jl1߄xv9VdC-y^ u1@_ib@袿>@@?ݡJA{(Xɮ✙|ڲ)] gk2jhoMKE(!#)9# ( +B-|fOkNB$o % .gJCN)>Mr8J%5UVʹU*?9t28(1\ࡏJ}̤+!erDɆ#[bNĀE}~)ͻC0L=݃P]93ʵeuS)șQFu~kZ*@ IH.K}^=Y@P(On3cJ9H( !9!  R?}sɛ:4qN*KjsT}r,rNR.@W% ;Կj=_ /ˉ-' +l[b`4:NBU7W0tCAJv66+זM٧"gQFu~kZ*@ IH.K}^=Y@P(On3cJୀ-$okbPC~u %o9U/RݮRYɱ9I)B)1 %}Ωz_!ۗo%ZN6ْh^t +&.C}Oaoa*Ι llW-OELYmŨ :J5-Y$ $`>/c,P( +Fnkť썄5$$j?Z_'gA Ω˹Op.yS&ΩRe?}IMrvʲO% ?Ї0Q٫Zl':drDɆ#[by*PS؛w+az b%sfkSv37V1jhoMKE(!#'w8'cdBP(?6όUv[+.eo$ y^%!U{I%Ժ:}>Cbv2Qï׋r(5 "dtg6<ex7x)mK<|!UJ+ӡBo*嶭%^n]')%ZěܝRZYŶUd߉ty7{L H"[ +[#<5ZɇN{[V'<3r\g9Y]F-ͯff SAɎ=ddp8">"'KG߮,4$xyJND B7{,5x =[VZ?~S)m}v.*)OXr{u SaFrploJjk3vfgUd߉ty7{L H"[ +[#<5ZɇN{[V'<3r\25XW3J)֠dtBRGBp8^woW{A +ub^l%X_'"@ = ^TyK+ܟKN C۶>;x 'R2K,AZw9@7nտkvJt};.F|PC]Ӹ|KakF+PݩxWr ڊ?trPnk3)ͬ]X]F-cYkPc:!)#!kp8g/t@cy5uEX^i/y<ؔ;ZèCT{\ +؍(ySR*غk}o8ÎW걫D'ٖ !oGqVV)!XB#"KLό6v=G-tsdzR>h+զr}8Llm~oιCY4&77&kTj {`f NXC'${ %[BVp8g/t ^0;@@x'9 +J[C^XmCaNM>H0L_˥8Ȏ7)5v{.3q8-cWN-lC⬬SQC(#GDޗvmzZ`ksg)}VM Mq™ +tޜsh*MX)onM֨& %V(Нb (ٱNH@Jp8nϺX c$GUikҺ_2yw5I)1vڇwCJ_˥o WQNJ%'.w+UllKې8++x;A B#"KLό6v=G-tsdz>h?ͳ{ACr^!>̧<[ܡ,sOXfl5 P_dFUl)kddK! +1.ˏ5 +k`1v:OrP=H+%/~WÜc'~ahr)`] +Rq5xboGŕz*I@@%rm[Qt +-C+AIKZO1K;63OSM-)V% }_NyC2r#y/-v #y@Nӥ7䬤Bp+-9sgTOV<՗f=3Ҍ1'SuZ)]wR6 c :  +?Ӷ\Ɂ4:'(.=_+9:zb6w[mgƧZRJNhw7ߤC-v #y@Nӥ7䬤5`(ޒs:lyF5dn[Y}iړ:.siYtV{iPBrT 1  O +TOr%N X||ג}Y:ܩoyyjjI*\X;)op_MlC;v؈‘ap RrVRb0[yoɹ|W<hZᬾ4ktQf9USJ+Qeԏ4l(!a9A* at@An$QK J䬠`97C;~S*N6Ouos7ح~55[1T#-lWɻO ?jr4.{ R zxq{78Mf4ԊmX#YIkPn%̹C9~ɚguU0[z[h*vgQΜKC5OcVN/F $8tX0T^1x0A9%p#ZJxPr k + !uOrǯq}Ji;_mN7Z1*<Mw&>2*9WG7R/nxҌС|Z k9+)xM1 +Y9_;Y +fUo ^zN1j^\yߙsiyiZ:Z{%$<t|Ёs1  n$WK Jd@r87D1=_[ɂRB6nO;m+;<սfߔRCk8C%'[M)yt +b5exq{7ҌС|Z k9+)x ΰޒsfm{_|!d*V-{}g;ݳ_ƨ {q~gΥ婜JIUJU\JHx 9 ơc  AAN +H>i9Iɚpo(Dѱ,(厷ӯ4nO;m+;<սfߔRCk8C%'ߘ2Mo1TA|@c/Q\Ύ^ 4Nӥ͡Cc0[yo9=B/swY]VZz5~\ר {2_f9rBV RյOB@rA: C+< *x3\M[_!$Iϼk=*. [X] +pH!@9Dǖ+sS>!o0B ip!L7wUw5 +B\iӴnj師ܑR8T&@)Eu +|9NIQ.SBei`o;tV7!$gguv%^j R3tų|xb mV?h'Rοkd 2fss/}U +44kvkw +"zc{Ӳ +!9OK/PdBV4P +2꛼  ;~u<H)'p`9=^>c)|u40^yX +J bJo,xKΖMzEj;dX]Xj78-"RDw;FyvhhiHE&+Ƙe1#9OK/PdBV4P +27꛼k  ;~uK)'p`9=^>c)|u40^yX +J bJo,xKΖ`~"5{2. mV?h'RοkdQg677Weͬ@CKfFz׈.2Ǩ]1Ƽ7-h>d3{<-@*M Z@ ( {z7꛼z's  {eﺜ<1gY-V }x_}u4ztyX +J b0W-NȁHcoܷ9~Aނg-_yvX*"Oy#sUYsgsss^\y"٭5"*L1jW1MYVm1TJH6-hE.+c鳛)o>~P<  {u<#x-'c&[fLBi;tV`$=o:[ӓɶHPB[E|wQyvX*"Oy#sUYsgsss^\y"٭5"*L1jW1MѪ<-@*M Z@ ( /ZMAd/al cf~qˢ,9>b`)W_] 3]{}n^7ª҂=,HஂΖer}LUPB[Wq;g,?h'R*9qԳ`j.<hhiHE&+Ƙ˴j!9OK/PdBV4P +2Ƌp~V}1AK{'؃s5yܲh5KΰgwW*HL^ߡ׍ F Y n/{c$or:ǿ9`Y>iF ?}V1g͉{WsY@CKfFz׈.2Ǩ]1Ƽ7-_U[yZ*xj%T$ + P@1^5꛼` +AAI=`ƜgM,Z͒3#Յ +7ӵwuc)*-BzlX<%rHǞ~/~4~L~uus4TDHF>Q悽D[[#kDTHcԮcޛߦU[yZ*xj%T$ + P@1^MGAAI=`ƜgM,Z͒3#Յ +7ӵwuc)*-BzltYK |/='bG!w#=orӌP)~"EbΚG= :onQ!]dRQbyoZ~V*HR T+"ٴP hB"?VT  Ȼfi$`ɘ3EYr}>SznU, 01Z5sҼZʊ i*U'R +o+ǞLd /G[?n=u YRe73^C4F\h u4х7}1_}\zvؾ4*WCѱY5jX?fLaAZP +*(!+kD![c  Ql +,`щi<꾷MrɞsGN?NqyRuwz4)c~rncaX/{9JZ)vc{}~x{ JXqe/YxG{[|t|#r{s{cҘru?d^ +Yezx7X?fLaAZP +*(!+kD!nZcݻ7@AWM` ;$&Qt9'_i"T*S\)o+T)F?Km?cI{ч+N~"S/\/k{dz쿇TzvsuETijêJ_F dϱ؞w[#~l׽0srb32Uom񐱇l6oʹLJ R$E6wj !U\UW4MAA^5%kG|#PwNqQ¦R,%r>CE:u{rƴP}MS@AWM` ;$&Qt9'_i"T*S\)o+T)F?Km?cIcE|0^ǒO"R\oE*=޹:̢Dδ\aUd%Y#Xl;[ح?6^ +y*Ʒxؗbykp`ZV*XR%),JUK>ƴP}MS@AW'1 +,`#n;N7 9MJes:m6*gp,b!Psx`{Es{_mD*=޹:̢Dδ\aUd%Y#Xl;[ح?6^ +y*Ʒxؗbykp`ZV*XR%),JUK⪊^ƴ`}x|EAUIKێ9GNRYNy[9MJ1YjK*}8>ܔ¥|ri + q“Es򅏜&B9Er +Jb8Tȱ})Kk(9ؒ7ϵ={,/Ra%Ru"+~1=z`{nUa^U]=OT`{0dLǷxؗbykp`ZV*XR%),JUKJMS@AW<^` +^oQt9'_i"T*S\)o+T)F?Km?cI7x}x(ͥpbZWHvbxl= ]ҳ띫,JLUVEV5b {ݪcüWED=E2R6oʹLJ R$E6wj !U\ޟcZ>ܘ)  ȫoD/](:ݜ/|4*).ꔷSTr>{Hg;WYHՙ֛?5k@yGٯVY- +YQn%u1akpEW]u/ιUQAir}{){(V0JÁiBRH~nK׫W5fr75kk?  Ȼ*Ƽe,z|.c1P { mUG[^x_AH޷qCM3ϬuFؕ_3Vgo{D❾IȭL *gL֧@ջ~|( )!aCRS\8ʡm=2 򮱊1o^&x:C!n3vM.>.qaX'']pw[Xlo3I^W"Rnm9m3ϬuFؕ_3fɿvHW6  V,ՑiB3Z_cz_$?.`T#%$lHʝqqjB <3\9rXAA5V1-cˤs"o؊|7&~]8Y0oBq~nYKzW$:Hv_AH޷qH)[h<[bW~eņ;D❾IȭL *gL0.o7[{,Vɜ6wOFi8-H rg\9 W/l~0AAwyX2H2_}(M}Ʈɥ_%N1PonLẽmߎ{}xd3k]:+vW _d/9D❾IȭL *gL0.o7[{,V齃&ڍQFK;RB†&Ĺp3ÕC+ zeA]c$c0L:'s؂|7&~]8Y0oBq~ssg6vngvljFus#Rnm9m3ϬuFꬨiv:fOW6  V,ՑiBZo6>2X׏XmL]`T#%$lHʝqqjB <3\9rXAA5F2 cˤsx;-W +qSkrqe} z/>w>7Wngv:aSTrۿc^"{9#٦o[ZomDΊ*kAfd&;}ei[;@nUR&TlufsS c}]ayVfR!)wũ q.p¶cAyɘ3uNe:9lAeP]KK,c7{8 ͵?.TWƉæ}u7ױg/rsoϑlSyf6"VgE5|UH2x❾IȭL *gLs7[{,VkfR( )!aCRS\8ʡm=2 т1g`t ӱ*` *ՇBg>PuU}\dYü šOnngv}z%8fܿ"{9#٦o[ZomDΊ*kHIVMfOW6  V,ՑiBWs}ufsS c]Ym&kp,Z*ؑ6$θ85!΅sZ9_`,  1 +I gS,zL[쪼u]_W䫏M>.wUn:/>_|իxGa|.{*\=/dny|o+M8P2߳[3s,/x+^!͒:O%Wsu]TG֧@n*V*30@T#%$+Ԅ~/ +u(Xd;]5<)xTrl`p8OM + +!s9Φc= +:;%1;4hS|mbw*[ZBY?fEsM1Rc{94Wa0?#s-e-}+!z>}3p\Z1 dnEF.UpVCǒκ=ؿ.'FD1}<}GNa9Y`+XO]x V tc[Z orUsO8SjވQ6&Iow bW`5@-p8wb^!NW:c0^)E9AT EmSR֚1+Jݜk~cG:wAε\<ؿ.'FD1}}<)d`=-2Bw1 H8[=7V2omi}&u˙"W=Z;L {#FiBZ*Fژ&ݽ/]9X0p8ΧcId#jhNW:c0^)E9AT EmSR֚1+Jݜk~cөpVCG$tw-sXwd*v$V7 APѭu+|Ƕ>޺LfL {#FiBZ*Fژ&ݽ/]9X0p8ΧcId#jhNW:c0^)E9AT EmSR֚1+Jݜk~clcY C|֐lglu߈(ƺo# ^TPxٿֳm\"#t4*ճyún/ؖg[)rCcao(^HKވRФܷ+B kF8}Y W@NBΛ!0{ uvJtcvNif&UjCQĢTT&~̊R7b\w XоnǸ6ϲWc#z,xQ6UЊu_^''д݅,  nlް[A˼=.g\5Z#gXm1JR7Ƅ<4)}Aȱp>5}sV@ &h($11u]ĘS٩IUP6;-oI͹h15om1&͢7؈(ƺo# ^ubShS9lOMYG3}K]x V tc[Z orUsEވQ6&Iow bW`5@-p8b@Qv*Φc= +:n9%imf&UjCQĢTT&~̊R7b{=7o::ի=QyulXPVyUgvC]x V tc[Z or{X/<) {#FiBZ*Fژ&ݽ/]9X0p8ΧcFjB"?Gٝ|[W:g1(L+xS׶xNmvjR s:}77ҠG<Ih2ŘPXuLusזSk,(1ZyQ}iߛ@W:wls>xټ B0D"+؎Ңɝ!u^k6_׵:mn}FкL]+ku^wؗڰ 1JR QjeB~4)f vE C}8y״V4`!yD~.Bwc zs+%+5pN9=Є&Ǫc뿶B]fA}c|vW}@.^E4g>WcP9}z,  +#+xrgH@{ڟMu-g[o9SWJ9Z gKYm؆ i؆(2!?v3_"{ȡ>k}L+BHE(H^>c{Ao|]wX|9_}N1)PXuLusזSk,(1ZyӾ3Ȟv.gezo?H G;YEV7XK'w {竮ٴ~]B~A3ueSՓ}) 4{!-V&Grn bW`94`p8wMi@ x4卄3Ն1=7;p, N1wW_)2rzʡ UMUT7m9͂RsI1;yh}ΧeO;Q:{w*gԟ^!CDs)d4ZZt<3N ߋ=_uϦrXͭZ+spb<}) 4{!-V&Grn bW`94`p8wMi@ x4卄3Ն1=7;p, N1WJsWb>)&T59VS\6 Je%論~c$桹7￧ (=Jpqٻ^!CD"UTY6 O bW]i֡ls3-g\)X)ؗڰ 1JR QjeB~4)f vE C}8y״V +7ICh(J]Hx;Smczs#|9w)泜rhBUc1_[NmT\Rj1Nb6{zs0Diz.ԟ!~#hrrZRV!FiBZ*!JLȏ&Įrhp8v +PA"imE /tg c{@o|]wN1WJsWb>)&T59VS\6 Je%論~c$is￧7zC}YHǣ{!CD"ONVҢɝ!u^k6_׵:mn}FкL]+ku1 +6UU=-4{!-V&Grn bW`94`p8wN ODA)D1أ߫?T'Ci| B)s)Ehr1Ū&ՎYSڤ'@7'9Ooyv|>YHg];,Pơ}sG9\֝ ,럌5dǓFer*n]k쌽ڰ3J R S97 $ !r^ vap8gO)?7੔(;(]>3{{$4p( R#C(e.8尨cM;X䡜²1kJx>1I!u}c^Ł($hN[Wȯl3ުSN;(PvC?VS[Yǽ}s?߫Õ5dYؿqZag;XV۝a0Ӫ k SjI=!aERb~ؕAA="k(xMyKe5Fw=3޷_46B6 +6Le&I s&EbWgBA=T"k(xMyKe5>;<fߖ<7_k= |gC9c}>Xm*hذF*0V$%̙] AASĮ5y.-qLTGg\RUr>ʂϔ+g:H]eeCh.Ym)9IOBw7%uXzEzQ'yo5dYؿqZag;XV/jsa UH2zBŠ9"+B3! ȞR~*т5&et2 WJNGY}L ̵taU]mץ8C9u55)bܸ~Z(Yg:@,*wX![;<fߖ<7_k= |gC9c}Xm.L/j|خF*0V$%̙] AAIT8/zl dxxMo)r`goghXʷF}[O8~3u},jSF?B6 +6Le&I s&EbWgBA=om!F;U'Nh8|t]W[L:H]e幥Ch.Ym)9IOBkϋ^":[%vs51;^S:vy13 &{|klĮٷ%+};YPDzz߾]6i4#j``ÔZfROHX0g_$vEx&AS֦"k$SUpFGupzhjϔCԅP\[:䰪.6R桜ºsʚM1dn\?-,v=P΋3]LD/B7w[Oʿw_/@' Ln`Zߢ8df?,<ǯ5;۔3v[V[96LMhUUR)]=!aER”EPgBA#km"F;U'z4rg>>WTmERqcn_taUMu֤8C9uu5sR?B[g߅q+ME +mͫGQlO x"gGc#~,Yx=7_kvnY)g춬>4̀4*رJ*1'$HJrwHL rtMWDHbDFgy;*R*N1RB{N9I~Ӛ'y(vNG1ظ~Z(v,v=X&ύ|N߰#B3}}=?584dY8~~eݦ۲Ь6LhUUR)]=!aER”EPgBA#km"F;U'z4rg>>WTmERqcn_taUMu֤8C9uu5sR?B[gz;x +|t.}}=?584dY8~~eݦ۲LL +v +vLe +]/"< )]k5ة"8ѣ8uzh+SԄsSj&Iu)9Q |76: ].Hx|ony{tm,~~oO x"gGc#~,Yx=73FagurnC33*رJ*1'$HJrwHL rtMWDHbDFgy;*R*N1RB{N9I~Ӛ'y(vNG1ظ~Z(v,v="qy?p"?584dY8~~eݦ۲LL +v +vLe +]/"< )]k5NQpb<xDη:%O_9P=&J55)9j?43qU9Uܭq#F?)u/C{?ϱ>l'w]QEgĮf..㰽˽\ߙ~羾vmxKDʏFa4M{f;«n[̮c6匝#3~+OL27UuhSSjګ7!M͗rohmHoMA9RV)"k$9+$泹yoə5 y}NIhҴ:UVFrƍkn̽^'w]QEgĮf]E?o['rV~46 iG0^wbgvͽ[)g o!XSi3TޘVG*^OR^ yhzdn{C mGxkB  ȑҵJ-YI'[*ǟ0=:s輑Y)yʁ1WIqөPSWSX]A'o̭=:!B/:[$vEvCq^knTgw}x/o_Y؈C3Is9lGxUm5blݦ3xdfo͚jHIƴ>N%շW7{{JM{f/鑹R -I {  GK$v-O9jdtHʬ|ф@|wLtG|qgq9Mrf+F?)͘{R!uԻ"+ö."XӫL_ު߿ s:}7{kPw +YR#7=䡑:QGV\fqYvU>ٗg2r(zgRYQVEKUYz޽^VSj׽~!w4zRn LM|$?M%-Z FOx +3둍zy'o)c82cG6q#` HpINQFN1|;q:C +K&IewA8ckkW$髀Cб`5a LL4>kЬ<.,_קsPC7:ٚ;gWYjQ퀖RBF^ʭ>&p9k8+ 4>8cf9\A.qS s5PS?0b#y=6GV<|?=~"BDVeF?zAt@Gߵ~?t,{##+vuX+G=WYy\ؓק?d_0 ہ7::_azNC3J?NKvJ!يLW/D _Cm p8{5 +Nwq1F3n d .{ 8)9׌rfUl?5OJK|o˟cl^~UUDVeF?zAt@Gߵ~?t,{##+vuX+G]WYy\Xޞ{cIM1?V/6ff%%8>:gcz)&Z@lK8KJURn*B | +o^3{TB~<;p.1m:P9'?nZ~HaQ)Ib#9Q Tl7G2/ED7ӵ&hlY{##+vͭχhݡojܦF]s|V_9cgga?df;b;TlEѫr^J$rЄ`[p8^Rv+=5T@Vw)y5c]P y#9ĘCj!E'T|G9/S#0cg t-n4u[Ȋ]s+:D!Z rw&)e=kxpѫosf3vVV4-:d+2^R&O&pg[Q@h!5{z5c]P VBB y!%ƼMW* T),*E?Il~.Q;7? 'PתHAAm>þ/) [ ~]}hH}2oŮYCW-0[Bkr> +3oe?Ch̭`g&93v5VQvDK; !aC1^u)INMx%  }֐ =<[FRpSyUY夏L+2Qbuͬr|"ϼǰ/b`8VB6'3GS׿EVG-<y+vmjDْB_{(qVyS/Bcnؙ3gm]( ;Qj!Ә[/应Eb +&AK>kP݆YM-EWF#)ة<܋*JʬrGCROrfw9>TNagcE10a|a`+!fj +7V}e.9M3!W1S|êu9U3R(U1yG9޻؎Pux/C}Aپbl~b-汸Ԯ6?W{rvιOeaGTFZHHؒ&|m$vMx' p$Ϛ+eQ|,si꘩Rwv+VH)ʞE!ܭҌ{'$>vUz0hÛ)}0Kh/+l-bkKm#ؘ[>s'n眫TVXQvDKoD-IzkRFbׄw  {ɩ GYJ)2ZQFjM2+ugOraU]麜ª_O*͘|y| wpvozߘ;|6mXX̶rk=/8~3i624숖 +ވR [֤Į AAS]YSpeԐ#> +7V}e.9M3!W1S|êu9U3R(U1?$SnvoƟ 5ߘ;|6mXX̶K-=/yιˌ} + 2}t!fꓯrXU"}.yF*{bsJ39$8]V5J`byXEy,f[bcn} WRW/y,EF<;>h(%IoMJHNAd/9յ(YI5WF+H 989EG::L}Cr\OV?~p)ja l6c:=MeԘuk]ƍ` +tAg WkJ  ߻B$+%\ܝV|~7@jDV+z>EnpyOq_q 3'su\t]#aM6MkH}4`KASo_?upɋU>REO(Kļ'3 Q){/T>6m} +OU/Hj^NKnn xW“$6ws,>Cos4}-{9?]XYj_ߪSDssξ[)uxL=mFw!]HiXMZ7RM)AO?kb(|dT9 +1uLC_JG;:Ğ ><ծMt[S R&F?+ZWR?![&$ ۉPub'əIn QͿϭ~7@j$Qwbe}}O\z ξ[)uxL=mFw!]HiXMZ7RM)AV?υl)yT9}t8viO !!|L}uڽv},)Ҧp~?xgYYuv?i*K=~~[nӘ!*bFwE:~i4H5Qu! ȧgyd(8Mɛ|e+U=uL|b1cL_bBC}!K1q.iRs8>~ޝDDž$PakM^L~y]k' +6}z>Ҧp~?xgټqV4 +Uy?|-i7vU3ŌtJҴiZujmBAOϸi\VQp7H=:G]8viO !!8G ɿĮ>muCO b\Ҥ/,#l#7It\H +uލ-38u]*yVa!6;s4M3Z~(T?{Vܦ1scWe;_H4/M^&J[.A􌻝V?ϕl)yT9}ѕz^hb}!Ч}niA} A\|w={7 I\ûvf.H~V(P?ȳ s_)ޙs63]XSx>VO?U|P\|j]'q6E*^g&>_sNtG%<+X&|J~ꭹq 彻Z4 +Uy?|-vf]3ŌtJҴiZujmBAOϸi\VQp7H=:<%JN[! +!>=g<>muS M.5XGتuWaSruf5^ftG%<+X&|J~ꭹq פ޻IPYj[3r 6벝/ft_SMZTnk-}X |zNJӔG]),Qrv>0 Q< !Lk]] } +) +A\9{k[N +1l\qޅLJwʳ9hRϧ-aޚY޻IPYj[3r_'cٯ%ey% +ݹu'A/{߄pdٻjD up`X8CfY"Ӗ^? AA>=k]T歃sX6%vi0cJêc}mGA tu#) A m|KsʝKnz&cj49>-'yH5,f8(5 ,WMa"*~Z~JM~=oUsvyGgtӤEq_(ɻ_܉?7[挅l`K Z)*sB5SWE|h̰ek3w> |lקkQ LI R^Qmdzv-pSvI@30ҁS4rһJ9-s)R/jdOEV?_nTlEJ+xA"u* ftnx>~íh_po%> o3IJ-1kL̍7 0daḚe<8c} rp)P*uKQ,N@30ҁ?Skw)Jus*R/jdOEV?_nTlEJ-+xA"u* ftnx>~íh_po%>T⭃sX6%viȄbX3l)X :cʾDꉒJ.!Lcr9KNfDsk+M~^NIQnmkI;Ib, {$m4ILخy$ѹ]磪}!½  bڵRUƛ03İ"f2S>A9rشY"D10%_kj/^O]s* z͈4C)VL/zSR{&['ߑ:ێdФ&lWF1]S/p`;Ob:Z5~sQ[`Ez! r ƻMwQ6OSIeAY)}<"ψ %)yR +o)`R?Gf`âTs~u#TC&kLÁxILVKx/q5j _6AAnxWI8)v*);fޣӥSUyF̍n(%%M;Rxy_J!+E P0~**:ذ$Bp~ZظoYGQzp 1|ӡՒ17Ks uۆ  -<6)QG~=`AG]&;(H=sht/"}aF;sJzIqSΥI̭B\&s/L:܈Ja6,ɺP#6.-[f֑ET}C&kLÁxILVKx/q5ׯl  hۤxGQeg1 .%R23bgnsCI/)9nJ޹?uW`RD{-%0Sd]|To~ƥ֞:opDwM {8>j֘w%ιкmCA]s&ϵ +Q0EQnM`\۳y)E* ^Rrܔs)|շQ J!*.ΔQ= [;'InL%+?TX}fxvDM {8`ET^LwqwAA[xty']ִε=!*Rp8_i(%%M;RxKW}{`Z}?⪲BLSl:;#InL%+?TX}fOTzp 1L1~h  6YKOR! +ƕH7ʭi,@k{6OCT:H_%ӟtq^PKJw.𖘯X:ltJJ?|7%\J-1_y]p5XH!*~;_NDqTK,u7'LaKi|~B_."4T~0a^#8!Z{HEMۛC9p 0,1AG|z{1Ԧ=AAd;g,'yG…ę4$}D_i2{r¦QFD ]%^\=RAjW}-YϿ/Вs +MS]H?4oc b tw׋ɼCm:AAsƟRzwD*\Iy-@Z9_ObiN1gN5&c!_)lJڹo)+lAUle},%4vǙxؒk-7Ф>E\{#C9p 0,1AG|z{1Ԧ=AAdNde%RaO0sernTkXH\J;O[ MNq1*.]=^ 2 'IjYD=w5h}}}NۢU /ƴFܧ=MyuHM >[YJL3o}a2/eL1u/ )SD*LifT|6$sI,}H_CrBWibT]ec{"/IRY߇m ]Eƚh>mQ]_k}~YbxcZ~#oȮ5H]}9Oᕘ#f޴d^ʘ6c0Ua_AS*1czsgT$̜D[alIvkXHLy(<}n169Ũtk A.R9,~Ѯo_UEGt_|ei፩Gۺz>"+a gc 4k^ :bM[/L楌i<C]AA93v7qHI@-&Uڸ`~BIZ*؏ U= +rU>,-1Uvh|[WGDvE]sslf +1AG̼iɼ1m`þ  2TbN20I9S[I_-qLkN]c{rڷq1*[*T Ae==DGt_|e Gۺz>"+*n"^xϳ̱x5 1&RƴiZ  ȜR;՛8K$&aLmy^&yղGt>s*N]c{rڷq1*[*T Ae==DGt_|e Gۺz>"/V gM&[YJL3o}a2/eL1u/ )SD*LifԖeX-qL3b(D)5'}Kb!(eT ]'v=%h}}ТU /T٣m]=o/ gdy&[YJL3o}a2_ʍ:%[g>gs 8a>?ӯ  rM=qϛ()*???OeW8Gv +}/?%Cyos9'c|⏧ѐlT Y~UV{"nՋy>Zg{g|өp`)>_̺LÍF7׾B6 ,JBDkzbgg`U{?AAZCC|iJJ'٘R$Ju*Jm;}h(޵rp9'CҌmQJJ-kT'n+ǰw'WIFgA:bf+|fm?uBC,J,=!AyM^%DAia*q L++EngcJ(m:G6*YxK3F))qTLGN]g kRW+aO.1.ς&uJV}>X66 ,pOvPgEkzbWk` b8AAZCC|iJJ'٘R$Ju*Jm;}h(޵rp9'CҌmK:Qt?3XX5vcX䓫K $T&uJV}>X66 ,pOvPgEkzbWk` b8AAZCC|iJJ'٘R$Ju*Jm;}h(޵rp9'C^7O:* :u퇟,LwK]1]%CQ{:bf+|fm>ZK,NiE ';("ҵy 1ܫ5W1  -̡^r>ɴq%x͓lL)MgF_W>K^4Z9ib k~n06-uRv~K$["S"fQf M"^p" 0z8&ƕ"7OƳ1H6U#} ^v,yPkrNReѐDg06-uRv~K$["S"fQf M"^p" 0z8&ƕ"7OƳ1H6U#} ^v,yPkrNT.?n<(kSa06-uZv~K$T&uJV}Tu) `(`H&pib8AAZCC|iJJ'٘R$Ju*Jm;}h(޵rp9'S*߲ȓQ1 kRWun7pH2JuoRPlϬ'ƸȢNhE 'oLD67!{LxÉ  r|k>+g(SRxMVbΏl5gɋ}R缳)K6bP滥d1SK.ѯZ|R)}{fݨu3=?YY`&]׻_`#" ȹ#Zn0++End*OF_C}h(޵rp9'S[v{ Lpom[Jxh +>D+}>o2JuoR2=FU'osykiE nҵy 1fG ȷ3Rc”Gc^T(''U݀hLlggQ$uW^?) i\3еb yNVPߕ( !De;%*EDYm~o%19fR_èkNAC9$WHN8كؓԙ!/\?)6RZzs1zBBRqNVPߕ( !De;%*EDYu>S>8h9K}!; ;X   b]Iu9R vy6$uf \`8}R҆=A{Ta|w% +4 +K*/SҼjs;*c5|.q Ќ4sB^=uXZ  C9%WHN8كؓԙ!/\rC!-mÊK[WI97[A}WGS"$B;/{=7s6NQ>8h9K}!/Vd,`-5 ԡŜ;ksb'A AlBf \dH}Kb"x  +0+l]MŠ۳?Ҍ=z-4QB|q Ќ4sNEdV9gY'~85%bG  EGi*1={=Q y  1 +6hG_ +pb|6H +|"x$ RTVPߕ(hNB$x&P萗1@3&Y:YgfEᘟה`ϋZv eBQgb;{P<{%14b])RmR]bR{lE2I + +[A}W0b0!Z}̶zaBC^R͘@3g\Ξ̪7m[P:,扟sToU:s`xxC!X!BK㦏JgL)WNsK=i0eΊܾJVH CѤg3?"ء!F``1O\ݤzҙۇu +r!Z7}H}P:]ݙpuޱȮ/NuaHvHo[uNq(UT=,pVwUҮX DZȽL}"أ>L_Ky\&[>70^/PC!Ҹ&hX&u^_$з4}JVw*>L'˿<*zj`?lkiUxkvG?D]p hQ-Hh^ 4i5Bܕb=]x4 z.v"a1\?PC!Ҹ&hXV~}ٹ$4xcg\N܇bws}GEzROsGm-*o}+V.BZ=*% b$K`.O,剧y=Izs`xxC!X!BK㦏R`d nkaip%;sUUsK=i0eR?d]p 7KB$41N/{<4Wb7)Ron 7vt(D!BhiQUj4Hh6c$a_?Z\&E:|zPC!Ҹ&hXƄ&7'%t_ip%;sUUsK=i0eB^xhE|gn_%Շc~ z?-u>Hh^ 8)0IBܕb=|Ϡb7)Ron cGBB!M5 s:6dTe7{λeKT}N*7R g9י\|~}M:NS_>?QJ Kv55%FS!t#RIJVFoIb4I?U_HF~ 4Sǽ]=lHV +6xs +xƎ|ܛ!B_/ʍJ@[~ '?"3aw* +A /IϐLJT,}.s;a;8'^LgP.Cgiah\x/e*&JSZ?t]'^m{Y ㏜]t6n&̻r]12Q**CHn.}xbE:4 ӄ3td;IN]ޘNc!6tj)9AA=:iQB/en>l'2ċvֆge,m2t5 [KwT~G˽~wev^Q`G_LO-̻r]12Q**CHn.}xb:]]^fxpl'ɩөqw ;ƔN-%8:G! 'X'->C2Q(QЇ\xf~ViRk3 2}K-1)܊k~O-[~+춽,"k].jw(!$7]>kxKtltUoḱm0EpLg?n^猯<1RטI}1qw(gV>AAEgH& +%*s iQyVktq4D骔w]Ԛۺ]Fԣ7ErL?n^猯CAdOxNZ}dPbK=w fugvL7,AMCJiR|{gԚۺ-4Z](*<^Z?3_!;xRTu$pnz-r⾘ĸ;~mR3sQ  {‹u҂Ӽp! +%*cum'Hmy2]}7 Q*e7E5o]!(*joDWB2 6nh_QxI5z[4 9 MNӘ/ b45\BX] fugvL7,AMCJMfczsWhʩ[1ѕ ?ȴM7 /i~fcY/B gnr}̰%8~AAoyBJT,MO4ۨ@!xR|3֞-ŌKɣRn34?Sq.}ޯʯV:3 2gXҕLgZ')Y$en2Rܙr_[@!xR|3֞-ŌKɣRn34?Sq.}ޯ/0 _u;͟g3.dϰ-+3ϴOPB^f=[qGW-fi<\j_K) +_`>*ZQw?Dg\2t/(te&|e\)4~dNU3WDU- ']%bCA~ՆMWDv?/cjs1xi:E.V}sqxqJUf9ۙ,$TfN25E-7z?֩lDwi'IRx\]NI}'a3! rPxn IL&BWpy WK)T"ֹLqN*3u>)cbE'':8^\5,qh^q$IRx\]NIn6daQ3! rPxn IL&BWpy WK)CR&SЕ+!~^~+CDbtt]. g+Uvoj[)L6a+BCQ{i ~0ӽjX Zg} =b0IqwK24,؁:b:AA +/^IL\*d8f"p~ym蹡NtBbU?>ߋ +Ӏ?޿ c;,W3џMs/=JNBt+'oy0:QNޘߝK"L A:@ЋOJ)XLm(˱ ػ}It%y J6O  Faj%7gWl +,B-9u9ͪ嵖WF?Gfmllђ:m#x61Ʀ̎sى뱘(Pc:4wo$K0@%H| \BZiJW,X<EkdrRj[&H;wNU@b+ 뤴3wefw e96Cwa_g f"D  Q,BnDhl^#E̹ŘjL]Njy?z{ϧd?ࡶBZ+-ZsY&HJ}X)kr~d|?~Y$@BؐNJ;sIfvj\v(& +6؄M.s}It%y J6O  syt-Ur/9$%*?n.J-d_IWeO']mmRWJ$Y)$l\áT~- W2T4~ u/9~x,xʲ/!xo%y J6OK_  6ytmUr/9X D5>m|돛 u1w9Rg+WuRnMjZ$9%؞D_`c5y8ӁCϗ%sjC&Ϝ0!NZ;%uoDކK$l fgg  M][K)/QO,B]L]NJtIOj.JPB&ukD윒QlOT!;:t-~- W2T4~ _r^1FLm(˾I`(xڸ?,qx  ѵUYȍb.?n.J-d_IWI=ڑ2\]muoڵV"rvN('Q}V*g8TLP_~_ L*{{?sb„:iיoDކK$l fRաLBB} ʹ*k=CІK AAurܚJ:PP~UN- +deHB])%ufj6oj OzOX XPu%" +g4%YᙖgYG+m}Cmdbх Ĺ@ AY'έ8 %[X %:[KWԢOVTln tN4m!?"+ER;7k~EӑK~EhK³,3-ϲ4+nV4oOo#?'x3߅.]_O%Z  :unI%X(y\(Y_z*x2gsӿFgB әi^8f)݉}tuz{^s-Wky=Q8Y. ϲ ϴ4>$ӂz۴7&F&~.N f ]=K AAurܚJ:PP~UN- +deHiԣHӖ2M5>"-ER;^okj~~1" +g4%YᙖgdZZu[믨&w|3ܰS4qy"4˷sRYᙖIAiFo}K E ̳r?FD)<_C%Z  :un{}!1QgE-rj%ʐMgVMMkhզEY?w(qpߊoh\Eio ³,3-oLҦַQcýzmxuQE1Ch'vK AAurڟCbVIu~ %[KWJN!?y8HVMhj)Y+ESPS<幊,IgYgZE?$Ӡimo+u D w#Txz,/m7#khiViKC-Փ~~2/dbز 8x bo_O[`h^+AAurڟCbVIuoҮupr˩#LKbGi^=ԃvV d;RC qַ>9,!˱74z -_2ʜ6m~蠟jI 1(Ömch3zxF?_ [JJ{}WvmGo[N7aZvX\B ּT[bZm +^$J-1|ٷbQ *|rܷYC4K —c ohZ8d9mRAՒ~c21ljT690Di)xbm>  Aaꩄ`:yc]MrEȅX,)3k.[3tٲG|g&4 NHDzɵ) l$Lc46FݿDGV(f|.V/W\Y p"x4q<6AA}xߠ0TB0Zgb ;{   Ϗu6 YzRR&'.\sn:*{)%rQ5ߙS6apbߢ,D~1iFo5|*_ո)f~ 6!NpƮ,8 cjp߸X  >yo@z*!-|XWi`;*)Sj.y\ueVF_QJlىk3?>-ziI01iFo5|*tO^S}u'8cW1 58oOGAd<7h L=L>Ox~մINR':-)gWj.ҭQԱKٲG|g&ORJO}UHD/MY`#S ӊ%H79f~inp?GןO 90Di)xbm>  Aaꩄ`:yc]MrEȱ%Ssҭ|v?_q7_BΖ8J;3!~^238RW՞LҔHyL+B#݄gЈ)B?s3ve1aPS=|AA}S th`մINdB/wIͥY))lu-nOI#3 c>Q'񳙮~O"/cZd~=U}r_Iz/0h>1g7;{  iyZ,iͥY))lu-%_$YfW$DYLf^=iE%Tɽ~%`u_;`qNp,8 cjp߸X  >yo@z*!-쯚6 ~-:qRͥY))lu-%߇$YfW$eyx5~&? +#^hUKs`u?;`qNp,8 cjp߸X  >yo@z*!-쯚6 FTS\vrjدa$ +3?0@1hI$jǔR| m9$y'Ggq'OsD,cb.?$?!q&W&0;SҝW#Bgx&>1%r۷6.%Z Vs 5l[uf5Zom9܂vW:rwXP-ɒ؝9wM3Kg\>9vX~gkteB 0 3>0w!yu>B!~ iS"} ?osRx +'~isfxH,352!qwb;:!B?4)۾u)+R{[%lWRjBr9 t?l\m)H>?3hcf7Tu;NoX~gkteB 0 3>0w!yu>B!~ iS"} ?osRgl5P˟:,ŷжcA+;,(-W[%/ROO ژ U=I,;ȣOFo#0ʄ`fx}aC|B=H|wS#,dJ0֥圯_Hs}"Akr([ui[׼sZb T;wN\wQZ=&J,sꢉ;. 1`3D9v!BkaqԈ<  u)ym9GOޓRJ +Vk͡m%^bj!jb~~b`˻f';Kz(SIS{tg% uK?@z0Maa"uk;ǏB5j08CjDL ܺ+R)E\k-uo⧕՚5om[s>rv3swfI?QIS{tg% uK?@z0Maa"uk;ǏB5j08CjDL ܺS ~km{+5kS|Zw@Cg,?0[7ẳ'Q.6^kenB]4ze8!~s%13,LDN߿ĽFϱs!Z4FYȔ`ͭKksw9_㦔r˹ym)y $օڼOY9p%/RIS[i܄`Ub45fQBgFYȔ`ͭKksw9_pH m/P [kok"ڼOY9gz3:K +_$ F?&>,p45fQBgFYȔ`ͭKks3TJCǕ+צf>ekcYR"$MV51Gb! 13 Bh=w/5"Bln]J^9h)Cʕ|z1ݲf>ekcYR"$MV51Gb! 13 Bh${3 U<lRZuoK%笁1}2ny|I>|JoXR"eS +$IyJ[=ʏ`{]U l*^BDDDl_K )&bbE;vռE{mZˡ=00L^~6'f?+7YcAx\IFm%RJx^Ϧrh*DDDteb"*VmWRkyO O)NMZk 3K㟕(}{|,dxRIFm%RJx^Ϧrh*DDDteb"*VmWt{zkm/}RqjndLοo:WRi[I|Wb䳩zwYǻXʢXJH1s+ණusjŸy_֭^,y_q3;yoOCo/AĬMVo-vQu}cca7\&߷r~+)Hִ$>TJ P+1Tmy]BDDDS_E\=zl. n/ռ>KGռ>}8^{m 7|812Sw-Y-7rJJVXHxNIޔ&] TJ|6C/8U}Vظ\ͥ׵RoƬVCM91g>]5ljN'V-OZVXHxNIޔ&] TJ|6C/8U}Vظ\ͥ{½PU."*^nB%X uè\Ц:b.o5<@ڕ{2Uҕb# gJ~(']U :#rhzGلY_bUDXa4 y Yaаm._s\e.d>,yl +ʺ('CJ&Tu&FM! ߏK5:!R(CmjF ˘_\e.d>,f'nJye]!U :#rhzGلY_bUDXa5edCmjha5lRoss!Us3Y-na3%e༲.IҪ UsS94qlBDDDǬc*"D0aR# 5~ |iYxKiU„ȹQ8D6!""cb"V{0uq{uJC%XK.an~Mk噬 MNYl}w?SR>Vִ, *aBUgbTM(p"1X쿊H1+= qTz! ZwiU5 8署H]j@ns}ퟬ7),6#w%eceM˒[J&Tu&FM! ߏK5J.6ԉ86nTe.dN q7),6#w%eceM˒[J&Tu&FM! WOŊvJ!.\S}v')w6Q qvS3뮗UYRҌYe/𶒶8?9Țv~XP=}ts%zj})>X{t[oKY:gh?rbE;h%n.n*ΩΟBS:Fèy~j]u̺}EVh4crċ=q/ky`}JCy~t =.{ZLΖo:֞}V&,VVWۯwrn )`j1ZkW=1zy_eU;Z~?pd3鯽 Vޫ$>TpG7}Sꢸǩl{[=ޯcghmrbE;h%_ qk&ԐB?y4[, ܱěJKs62WjvDr.}~<&Mmמ=^6*%2xsyN|#( ܱjԢ^efv o(Ws5;e mgY>` Z&ڶkχyHMGsߤ'a)oh;MκyNК<4vֶ_{>DDDx{@nږv8QR~ޥhfu˲j(YYiSDl&=> U\ N(~MVGO>;ٖ}[6yh"m|n Tiݴ-q4ǣ6䍾cD?-Zd-&5WS&_pU~NmVMp;kz="""z=[l UZ7mKx;d qj7{%gEDۖMz(WS&_pU~NmVMp;kz="""z=[l UZ7mKx;d qk(,z1F-Oǫ>kYj2-=N +_q5;e79ϪGO>;ٖ}[6yh"m|1sl!1,p%F7[|#1F1R̴Mqq C]N2ϛjvDEYn.}?{' +MVnk\rs87"""Gn-D=6\d Mzja=117y3hiqg K~Rg`Lt_7Sҽ`&5B.9#7R,mx%ä19j2)E1. +w&3WS&/r?url!Q,UڨF=]"+UeL)-"vw w$3WS&/r?uru*2K>>^U Iߋb)2.vp7a\ Nru&S6;{'<"<6ېk^` CDDD 0CmXpCF_Xa}<8/߀U%=6v!3/oc~씉)Wl2iSw#"l piɾiQU`&Hl '"""%ܾ:}rc~=?]5¬xG<ʑc{MH+ WTS35yjvDdߴӨ*0OL$Yن\ݒikn_ ~>8^ʣi9:vbBEJԕL숉>ɾiQU`&Hl '"""%ܾ:};= +:nouNGƉW;1F^#QYx55gi)js5&\& FUy`"ϲ6LϹ~pMcd#?-O\~]+"Wx*w?cfRj|uLj#`O0ot4q?./;@Mp+Dl+'"""%sn&|ʰ=={da{ck{^[fW]dzPLp7&M>`|;PIƋ8:ݓ5U*0ޔ1C.+C9mhhrsl!UY{}rFUob;hsx$WzEet\t M&ie~LGȓ<Ҕe8i64rZDY71WjOT&Vi&0~߁J|7^QI_L/HF&'&ud>{DS"7yȥ)pymȫ6r9W T g _[P̖Tua}`ٳ wW%/(bODDDtOZgngm+ WLMyi{x[v%1w{}"""G֞CL—W$]*0JQYNro\aL5vQj{Qi7rxZ^!w>ѵ +362혈caDi~j;kUr t-+C(k48Ro^A:{"""[kgngm;bt.i2/"GGÈa9oSW*Ӗk3)̯ro({iEq!G9i{g7|ϐ3$맬)E]~ׯ͵f~ ޡh yhZsSZfk15:7'f̚4~l2Wڂl I/x^w/'"""V[I +OYSh_ikF@C+kr%rS.Ft`0QO=Hcfi2_3l~Z˔~ +Wi7^._ODDDtVsu^7׎[GH}H40EV>V?hjR93;~jg͹.(w5<A/x^w/'"""V[I +OYSh_ik#[zQF(H"(`f񰜿YڡJPV#D{48V[kB"1)mR'ߦՏXw/+bf~|IY[& +GT\zy wΎ?!Bȫd&.ROD> `j֛{K6dY\jDCq] ?au?6\L7*/[G@!Bo%{7)uѴ-Jd}zuOVb.yX}EjZkIKtVs&^f'wuD~ +uT/x_NB!VqR]MKѢL֧W{G'$j>y }5 t^Zk}X%ecj]BI' f6r2Q>Wߠ઼lWӷv>B!EܤTERj(9>u䞱S=ân֪iy }uBF RLƺu'3b{چ_RpU^+[B!dLĤTql1тLuw'H?U7z7zmNŚiIm^=e-LtE9-M3\ +uT/x_N>]OB!3c &cy#gf`m&O3=Ab`URow4S ? 6xmR/$w|j i|xKS W઼lWwwדB!̘7Ib^񙬙'Gun3و=FF'uTaH>i+l],Y)gswΧ0E!9Do W઼lWwwדB!̘7Ib^񙬙'Gun3و=Fzm!ipࡆzzmk=Itj4E rw|j&Vd3NpE*Q<};}g|w= !BΌi|:-5Zɚp?}wd?t"o ,浧^[j+uykYV'4,b*0Q:G+RpU^+;g>qtB!O4ALJu=Fd\s;2Z{YKk^z5l_-Y!$3;& +\CpE*Q<};}g0n@!7Ib^񙬙_8]<{nER5'B_c|]iK6aB8pز62Q+RpU^+;g>qtB!O4ALJu=Fd\d{>g^?\SjZ8XӖu Z<`CHgpwN[F& +\CpE*Q<};}g0n@!?$^Rcl1q-df7v!RU^FeEϕ-l? !B^6[ R"5O|r<^gA;$ihjf+ kn,5ljgSSk'4V|:`&U`rF>[et^V\L2B!UiE{0-%Xd+z&]ɊtYFSNٷ 6-gASU^FeEϕ-l? !B^6[ R"5Oj~,I]sN]wNkOSCO5Nzj6\SqK,Fu>kQlY΀ߧ`ˊ+=[~B!*"1KnRj'+WZ\X'l>Em?kݴ\ߛsG$sKzZn;+rOfѫu{;I[>/2W/+||ZoT[=$B9XrR8Y9j:f: Fg5,Cr$($g@SU^FeEϕ]=$Byy"IBF:ܤt%Os!3*FOgaڄk#4}-b\쓙=u#YRU^FeEϕ}wj!BŰ ӓڅuMq5 soG̦*ai6{#rOfVL[lF*/{"gzϮeϽ|B!\ +3LOJ k%*jD\(5YS=<ұ?5Yjo)[pAd\쓙=$g/(ٙRU^FeEϕJϽ|B!\ +3LOJ k%*+ҬjE\:b:CW1.հH,\5wMu>Cr*v<'=n}7GOG;=*/{"gzn^SC!Lڼ3L ݪjŞ)nhzM ;˳MwߚmdaIRV\aJޫ;^JUɼ"g={}rQFMd ߐ/|" k%s*_Tu{a|e7]l麐|)nR_&^}xϼ,5I؊%_%w ^p~~G(_;/\HkxΦx : ZK)nR)\0G1D/gomVi|ffQ_z7,㝝86pQw^"""Ms0]2uOb^JqZz0au}𑕼e2ޑ w١Tu&ݝl㝝86pQw^"""Ms0]2uϙ&l)D ї_`G&C]o:SofG8|U{lQ;|86pQw^"""Ms0]2u7{a1_b1 YS]̬=θZuFZ΃-ה6'؛ϟ.ԌpMw^"""Ms0]2u7 a>q YS]Y[jK2z/טr1݅[;pm|ap! DDDDGW;a.dn,}n",\^ᅏiȞ3,i-mכ\&hY$q݅[;pm|ap! DDDDGW;a.dn,פa'0jODWpCyp_Qά+ٛ/h |a:ۈv6t]YjCkn"Iõ,&IC=~1ק2j%oS{^1{ <8˙s*+Euwv <EyLuw{3]l麐}eH#R O|ϖ'qL}rmu.o7_-r_&.΋`j۫jg\sp΢JvZ_lצ_^x2o "vK·WRs[۱m}/$Vq*5 5z{7l,Vzms%/*RYZVxTq-3/?g?64?pxS{09Vp*fccpdDDDDh9I7^Tdi-r'=y]:}&ZD^{{hsk. $s`7`w1 +[7z{?~rd! ?ElֳMYۉޯה%j`2EܻK0P8n0cn~F"""|-Bތ?} +/ȘlYNv^rm;l)ZD^{{h3k. $s`7`w1 +[7z{?~rd!oF5 +M<3olQ Oq6>Mk.~fK"% _C;_sa Fpw`3u7M-kI2RŇS-Y(^l +̻"3+ad 8fōG'"""zŖ$ dxLZ*'Ť]d4EfEϷg*@Uy"""wl_ ҅_izL6""-ǨJ^#Ԁ6}>L}D<;ޯL53쇑6C=bG̋-2>r;mLQU0؛'"""zTa1)V/+Zdx8@ hc@}D<;ޯLUM%Ji, yĪXϸ;q;mLQU0؛'"""zTi%H,w"81""""VsvK W[aȑOh,_XDȚtVw{?jF& +Q}DpbDDDDt&WaQn9r<:~K j=ڨ +H>"81""""VsǶZMt~KywnyOg&HD> +ѵ;"pqXrƈFO*/:?٤Onn5nC=9}7=)[l˿ُV6 "o&&I/tgƶv=z߸CUU~~ f  |S&EE01I$W%%*Нum=c}cNǫx ~ f  |S&EE01I$W%%Mwr:qwxUm d\T$IzU3_a/m뱷{x*>Um d\T$IzU]wUmTu{ǽOs`F"4$I^|E/toF߫]>3 + &&I?U/FwjU| &&I?U_:.C*vEi2.*I$i*UxP}]*>Um ۧQ8K&EE01I$W%7/ۨnS&/`Y,,"$I֫[כ*>Um2.*I$i*8CIwpE*6lˊda$I^KwpE*6lˊda$I^Os`eEL`b$IZJu7:nS&)`Y,,"$I֫3u\QŧM0S"YX&EE01I$W%|7u\QŧM0c ue\T$IzU0yW7[?hVTTy'T<8M$IzU0QW?hVTTy'T<8M$IzU0tW?8U&p 9N$I^̤띬~o{5L/*N 'yBs~D01I$W%edw[E(vB&رdCY \EYv `NTv`8$I##˷߮`X^WҎY G$I`%# 0kx]'*H;f}0I$W +ԣm=Agh}0I$׶ǥy|9j^L`Ñ\ G$IqzpO2|.kj #I}=8G}K`Ñ\ G$Iqzp?`Ñ\ G$IqzpZfwp>,3mpE$I4_Kfvp>,3W@+*&I}=8G=T- :8ƙ9 pE} bh$ImK s|puO$|Xg07I$i;] +M~u>`8$IN`f-ɯ*]M!pMp$I4_.GUez!UpMp$I4_.'3xv=o2-kj #It)>ʺJK~WY<79{^pHU\Sk0I$~KQ-KuC +ZH$i;] +n{t`8$IN`fh[Oz% i[pMp$I4_.'3{=fGk\Sk0I$~K[F2|-kj #It)f<6 0Cx]U\$I|w3[?]Wg6`^W`F#It)f[OY^i `F#It)f[OY/ g`F#It)f޻nN1 uUpMF$IRli9G;z+-^WU G$IRLmK$C +ZΩ=I$~K0u;Wn,7g*kj :z|$I4_.֭^aI+ p.sgG$IRLm蕻/IxT5pIS={>$INܺp\ܕgO*kj #It)ɭ[ ^!-ΞRU G$IR[=r#-ΞRU G$IRcv\( +d'.bܢYmG7뫆+"[TODZǑ$I~.`Q_LP}Ygj G$I5n E}U2CfID5xI$׸2U%pq$I_XW?,;ToDZǑ$I~.`Q_j7?P~?X"i/!T#I{.`Q_j7?P~?X"i/!T#I{.`Q_j7?P~?X"i/!T#I{.`Q_j7?P~?X"i/!T#Ic96n L }O^}?@I$Ikyl쬟@Ȼ_H$I\7w̋&dcgEU}guWPE$Iҧڸ3`^D0!;'(;W*$I>-͝" Y?U}$IOqsg`B6vO wU߇{; I$rpm0/"l]*H$I\7w̋&dcgZ~{; I$rpm0/"0PD$Iҧڸ3`^D0!;'`nВPD$Iҧڸ3`^D0!;'`nВPD$Iҧڸ3`^D0!;'`nВPD$Iҧڸ3`^D0!;'(ZTWgPA$Iҧڸ3`^D0!;'(ZTWgPA$Iҧڸ3`^D0!;'(ZTWgPA$Iҧڸ3`^D0!;'(ZTW| *H$I>[= +pl쬟0#6$Itoq}{Y?aGzlj'I$""o()~O$IҽEE!2QSdcg$I{Ceܣ  $I-".qq";' H$I>[= +pl쬟0"I$""o()~8$I-o۠' `#$I)"Z!ANF$I$SDCo(;' H$Iڧhه<|8Q6vO$IOQ]nT_V}_"I$I:i(=BDLݜ+%]uz${Q^и +pI$I.]Od7* ^__"I$Ittե FxAK 5I$I$(xbc +E$I$iF۾W,$I$I3 +Y$I$If,`l{U,$I$I3 +VR$$I$I3 +VR$$I$I3 +VR$$I$I3 +VR$$I$I3 +rk}$I$I3 +r&I$I4`!*`$I$I3 + +8$I$IҌܫ I$I4`!UL$I$iFB~$I$IҌ|U"I$I +m[$I$IV(xBc{ +x$I$I +Ohl{O$I$IZIm?*Q$I$I+> endobj 9 0 obj <> endobj 10 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <>stream +H|TyTT*i=jcC1'Q[5nQꉎ0(2833u`\j`MqRMcIzoԦw!N7iբU+8,[,y֒eGjI\8*99%_n]y=sbx$M^Q㰕?6/oW8]mNBE3yNsiuTjOmN*:Zbӎ;EfRdfql5S+ +O&ܬe/.mind)(w9lV猙9TXͯ~4dBiHY ҐC!4\-ne鎧5/d|C~l1X1` 3tWNɩ'QIf81$ =pRo<S"5 nL? i?y X ٵYp17M`p%̃WAp:P&1LW@v:t Ř@0 + Mzahi3ɒ )dޏWE7cp[BƋGl#y(eNiRDEdoZrkNܐw0Rn0x'='iц*B dNZ %p dP$+$#b^fy]LCʔW?$ZYػg7ٽ~?s@P0?x{XpaO]|ȹd?7J 2We?,]NQexeMq qaF92?>vO L ZX?cV9G!Zfh+FGV-&cB()Q#vuNφFl=uDn˶8SVOC^k> Ś6WNx.;.6 6;B^zz?,sd]w2xNO%TZ!xр P*x#)0PrsYhyX?zwa|CNa_j-xpRb)Gpp=V! Qqā7ln[_ܛ +) s!eS")R d֪ #A(26f(G'-I44FV`?<7㱘(! r=Y:^&Cm3M4es7&efW'igiٛ*. uz&+[ l~ UJ͠\peJaAIv"..R;võK.i'B:z"vgy3[IfNiYш k}DžnZX;DL;wl6) I-\f -IHZ`E0JE)~g cAw K ԽMO$*ӏr uCCIO[zr]%G&TQRZhwUU+oZbe32oIu5ZZZ\h+C? zƹ5q +!U!sPq k6D`Whxzuk_rz6>+qjϦU:o<\)ȍW HdT20hv.qЖ*<{0D]* ˅)MlZWwYx>x%VA7vyt&s4H^TZsDFVhX[ KT֢PJe pTxF$rl8:TnBXPYRd0.c⯅*Qb*&s2G aUB '5_-x꫺ʰP+س;̂[vGNv^s)1Y%VբXO:eً44Z`vt'{50^hDTgU#F$9MF kMhDqqˮ:l;:Ok&&&Wx`DTHWU`ݙsXXjZbTaJIZMg }#1;ߛBP +kPT[^^w(,\" FnUL0b.k2& .?<QEu#$J@NHjuj"Z@edVe2 +eHh`G3֗<+PQ^R1݁CT8EG%%0#u< ph?DL KX? 鼇W}: +ݏ$MfeFY<2qDub ѥYڼo9m뚳N-9J0O"%. F +(Z5yo#!t-Nb@l?:lltM&&&`p^eo;lB̘l_a\S@q)O#\STY$V|9Cl:ΨŌp|Is_]apg0Y~%\q Mr,S*9C.#KTAF52YnľaZRn̻kigp 4F63;\u"Dmh9$8fHaA'9#ʩc#(?97CF*I +-$ +h(>ѓջsAP&˜0d@.%rAh _5@3[Y+Ե5dV=L0SQ??MQa/Y)Wno^9{YqNp l-˪#UjC6 WoakHZ*Ed(Ag(Yyn_&r!br$ñ_yt0 +/D٪ZI!&#VD}LLo:ǡD@Yiz@}\SтAf2aHv. NvcJתO]'..^w [a*i5U*sifGV-NMسȥ3m; rsZM+{0Eoie9?C{#iQ5w > +l>۽Oڰ˾*GP#@7e[xJy*(5Pao4Ώdh'Ԡ/t|_Tj| *l9b_D69eTJp4YY$Q}^GFbC(YjcSb#d̰'ÓmGM5V52SR4o nzH endstream endobj 13 0 obj <> endobj 16 0 obj <>stream +HVPwMQI֍E=EZ@QIH08(V^9g"?ğNq.Q(c>szn}w,I$+歰LYFk|J͠[cӛ}ǼȒ?q?x?/RıSǜV2%ƒ_b5eeۄ.X, CG׈`!,44LXjl5 +%6c^gΰX-Vh +k|cZs֍`*ͪ7)McVwZ/6fa`=#Td-rMFs ز¬l!dJfUo-Vm f/&,ԦU +2 զgVSa3Y!W$Dc&A*Sb:AˈHb9Iʈ$eħQOZ tɗDsmr +y/'#Fy~N׊Yg"E)vq֙2?pA +MC^R(`'>cB9BmblJvThVapP%o T9Ru ^8_!uz ]:0Sр:Ϋq@2(AY{0ʄ~r߯LH O=Lh}?jniI8yYRn%)^c,7-V(@﯏ +&_ҡ4kQfkܴ[)JA?Ƚy T2:/ ?p>@Iq-[- P Ju@+jNJŻYTZ+/WR%V/UM ckn;>$Q-Gŋ}W3}.2DdKәhNA-%ٔ.OcQء}צU9)*gfd5Xp#E+/2H# +;I +Q*Qs:z]N8%@#ߐʾv+M{;Y? G7#M3 iD¨HLDc@4$' +UE4> endobj 17 0 obj <>stream +H|Typ_ٖ!QXKvU pL@ZB +!e[[2{W{i/!_hsف&!4h`:-Rɐ'g=MGgy{}}**t:ڲj=΍n7] 9D{(7hV9,}FK#pj*QM +tot5ŋ-ugVzFunr yǺ[᭷V}Cmzյj^+[*YN˺{^cv.ԲUqwzgUMvkZ{*AoB[ +ށPm)jA)(|(j/[௞Wf.~1W~0^'6N f ժAޙ' ; U K漥潒?'^]? z|,JRNu>uO?\{ YoS_ȆtkVO0`YQ!Bi07RY@iٔCӂQQ9)"w!#{cKUeѻhՆ-e}=A O3 e)R3ͽ2rc:+͢~Wl9NQ=;w +vlBmkΣXt#yBVdCl|? Glh1¡gbK5{JDQ.l,=8 H]dr4Pɸ,lZ^ڍnUԶ0D4Ia*ׇjо.bٳsv )&eKM12h>Һ?GuiS8ܧG,%N0]J>>sQeϢYCߖҴ#P<diQ dE u/0L'zC"?f!8*!)CMJO'$̿/IY'¬O\ +~$fJ/ld=+Q sMqj7Y]g.4C]6GBGF[J"%E-v Lߺgs| 3"2D4q*1ff{-@0$.1tSXO,A_`-=1E̔ wxh %) +$v>i+"D9PN x G6^m)}𾎔/$er/h EL4e!%O㠔GS,<d7֤s3H@pS0+&'^vj2~;݇a;hy2 iuwCeㅰbP`k8D;YVzTn@˄Oj s!l&r`-e Rҙ8َኟJN̤ 0nꋠT pH4a$ǮXjcCH\a33uіQmB/en% >=mz007/`-*P`V{gܧ; 1?PԁKO4^5Z밒t7`ρs|,3) ~o">ߢM"EjRdoܵd'w}BbIl]HSa5q\9SAmM]tA6?\mtێM 2ԑe"D_u#Q!14J|Eԙ6ș +8EP;H]9<0~;0e 01փ` o4+ ZYJGz29:mj0PÉ7"V P/M!X}o*giJʍ7r"XÃLf$wwR I e=@$bB$LP qX 0^Cvfp؈[H&y-&F[]>@vQ>h +>%}~u=%&J֤6wܓ:21/_Wd)#D.e&=W8u\粮 +N**uMUX=bJԡ5C-SR~(@o Eo~U7e(s`IGtq,J%O8,Dx1@{ǾIES?Q!nw CƞсU Q{<]cVC&?c·4u 'QgZ'P$͗[<ߥGnc?s0f̐X bmcL{R))L*UJ-͔۴`5 endstream endobj 7 0 obj <> endobj 18 0 obj <> endobj xref 0 19 0000000000 65535 f +0000000016 00000 n +0000000076 00000 n +0000027679 00000 n +0000000000 00000 f +0000027730 00000 n +0000028176 00000 n +0003209514 00000 n +0003198868 00000 n +0003199226 00000 n +0003199713 00000 n +0000028673 00000 n +0003206391 00000 n +0003203923 00000 n +0003200087 00000 n +0003200410 00000 n +0003204287 00000 n +0003206695 00000 n +0003209626 00000 n +trailer <<060C95E340164235AB610D1431D10B68>]>> startxref 3209800 %%EOF \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/examples/CMakeLists.txt b/thirdparty/carve-1.4.0/examples/CMakeLists.txt new file mode 100644 index 00000000..c5171f97 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/CMakeLists.txt @@ -0,0 +1,17 @@ +include_directories("${carve_SOURCE_DIR}/include") +include_directories("${carve_SOURCE_DIR}/external/GLOOP/include") +include_directories("${carve_SOURCE_DIR}/external/GLEW/include") +include_directories("${carve_SOURCE_DIR}/external/GLUI/include") +include_directories("${carve_SOURCE_DIR}/common") +include_directories(${OPENGL_INCLUDE_DIR}) + +link_directories("${gloop_BINARY_DIR}") +link_directories("${carve_BINARY_DIR}/common") + +if(CARVE_WITH_GUI) + add_executable (custom_collector custom_collector.cpp) + target_link_libraries(custom_collector carve carve_ui carve_misc glui carve_fileformats gloop_model ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) + + add_executable (texture_example texture_example.cpp) + target_link_libraries(texture_example carve carve_ui carve_misc glui carve_fileformats gloop_model ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}) +endif(CARVE_WITH_GUI) diff --git a/thirdparty/carve-1.4.0/examples/Makefile.am b/thirdparty/carve-1.4.0/examples/Makefile.am new file mode 100644 index 00000000..f8f754f8 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/Makefile.am @@ -0,0 +1,17 @@ +noinst_PROGRAMS = +noinst_HEADERS = brick_texture.h carve_texture.h leaf_texture.h + +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/include @GL_CFLAGS@ @GLUT_CFLAGS@ +CPPFLAGS += -I$(top_srcdir)/external/GLOOP/include + +if with_GUI + CPPFLAGS += -I$(top_srcdir)/external/GLEW/include + CPPFLAGS += -I$(top_srcdir)/external/GLUI/include + noinst_PROGRAMS += custom_collector texture_example +endif + +custom_collector_SOURCES=custom_collector.cpp +custom_collector_LDADD=../common/libcarve_fileformats.la ../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ + +texture_example_SOURCES=texture_example.cpp +texture_example_LDADD=../common/libcarve_fileformats.la ../common/libcarve_ui.la ../common/libcarve_misc.la ../lib/libintersect.la @GL_LIBS@ @GLUT_LIBS@ diff --git a/thirdparty/carve-1.4.0/examples/brick_texture.h b/thirdparty/carve-1.4.0/examples/brick_texture.h new file mode 100644 index 00000000..adab5ea2 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/brick_texture.h @@ -0,0 +1,3074 @@ +const unsigned char brick_texture[] = { + 0x5a, 0x39, 0x29, 0x8b, 0x6a, 0x4a, 0xa4, 0x83, 0x6a, 0x9c, 0x7b, 0x6a, 0x94, 0x73, 0x52, 0x8b, + 0x7b, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x8b, 0x73, + 0x62, 0x73, 0x62, 0x4a, 0x62, 0x52, 0x31, 0x9c, 0x7b, 0x52, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, + 0x83, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, + 0x73, 0x62, 0x83, 0x7b, 0x62, 0x4a, 0x31, 0x29, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x52, 0x83, 0x73, + 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x5a, 0x41, 0x31, 0x83, 0x62, 0x4a, + 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x73, + 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, + 0x94, 0x8b, 0x73, 0x83, 0x62, 0x4a, 0x62, 0x4a, 0x39, 0x6a, 0x52, 0x39, 0x73, 0x5a, 0x4a, 0x83, + 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x5a, 0x52, 0x39, 0x29, 0x6a, 0x52, + 0x39, 0x5a, 0x41, 0x39, 0x5a, 0x41, 0x31, 0x73, 0x5a, 0x52, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, + 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x73, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x73, 0x83, 0x73, 0x73, 0x83, + 0x73, 0x6a, 0x7b, 0x5a, 0x52, 0x83, 0x6a, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x94, 0x7b, + 0x52, 0x83, 0x6a, 0x5a, 0x52, 0x4a, 0x41, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, + 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, + 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0xa4, 0x8b, 0x73, 0x9c, 0x83, + 0x6a, 0x73, 0x62, 0x52, 0x62, 0x4a, 0x41, 0x5a, 0x41, 0x31, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x39, + 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x41, 0x52, 0x4a, 0x39, 0x62, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x7b, + 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x52, 0x41, 0x39, + 0x83, 0x6a, 0x5a, 0x6a, 0x4a, 0x39, 0x7b, 0x62, 0x52, 0x94, 0x73, 0x52, 0x8b, 0x6a, 0x5a, 0x73, + 0x5a, 0x52, 0x73, 0x5a, 0x4a, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x6a, 0x5a, 0x94, 0x73, + 0x52, 0x8b, 0x73, 0x62, 0x62, 0x4a, 0x39, 0x5a, 0x39, 0x29, 0x7b, 0x5a, 0x52, 0x6a, 0x4a, 0x39, + 0x5a, 0x39, 0x29, 0x7b, 0x5a, 0x52, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x62, 0x83, 0x73, 0x73, 0x83, + 0x7b, 0x73, 0x83, 0x7b, 0x73, 0x83, 0x7b, 0x73, 0x83, 0x83, 0x73, 0x83, 0x7b, 0x73, 0x83, 0x7b, + 0x73, 0x6a, 0x5a, 0x52, 0x52, 0x4a, 0x41, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x83, 0x73, + 0x83, 0x8b, 0x73, 0x8b, 0x8b, 0x6a, 0x83, 0x8b, 0x73, 0x83, 0x83, 0x73, 0x83, 0x7b, 0x6a, 0x83, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x4a, 0x39, 0x29, 0x6a, 0x4a, 0x41, 0x83, 0x73, 0x5a, 0x83, 0x7b, + 0x62, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x62, 0x4a, 0x5a, 0x41, 0x39, + 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, + 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, + 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x8b, 0x7b, 0x73, 0x8b, 0x7b, 0x6a, 0x8b, 0x83, 0x62, + 0x7b, 0x62, 0x52, 0x52, 0x39, 0x31, 0x52, 0x41, 0x39, 0x7b, 0x5a, 0x52, 0x83, 0x62, 0x4a, 0x9c, + 0x83, 0x6a, 0x83, 0x62, 0x4a, 0x8b, 0x73, 0x62, 0x94, 0x73, 0x52, 0x73, 0x62, 0x52, 0x62, 0x4a, + 0x39, 0x5a, 0x41, 0x31, 0x73, 0x62, 0x4a, 0x8b, 0x73, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x6a, + 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x83, + 0x73, 0x6a, 0x83, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x6a, + 0x4a, 0x6a, 0x62, 0x4a, 0x52, 0x4a, 0x41, 0x73, 0x62, 0x5a, 0x8b, 0x8b, 0x7b, 0x73, 0x6a, 0x5a, + 0x6a, 0x62, 0x52, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x9c, 0x7b, 0x52, 0x94, 0x7b, + 0x6a, 0x94, 0x7b, 0x62, 0xa4, 0x8b, 0x73, 0x7b, 0x62, 0x52, 0x6a, 0x4a, 0x41, 0x62, 0x4a, 0x39, + 0x7b, 0x6a, 0x52, 0x8b, 0x83, 0x6a, 0x62, 0x52, 0x41, 0x8b, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x73, + 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x62, 0x4a, 0x83, 0x6a, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x6a, 0x94, 0x73, 0x62, 0x62, 0x52, 0x41, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, 0x62, + 0x8b, 0x73, 0x62, 0x8b, 0x6a, 0x5a, 0x62, 0x4a, 0x31, 0x73, 0x52, 0x4a, 0x8b, 0x73, 0x5a, 0x83, + 0x62, 0x4a, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x6a, + 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, + 0x6a, 0x52, 0x39, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x5a, 0x83, + 0x7b, 0x73, 0x8b, 0x7b, 0x73, 0x83, 0x7b, 0x73, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x8b, 0x7b, + 0x73, 0x83, 0x7b, 0x6a, 0x52, 0x4a, 0x39, 0x83, 0x6a, 0x52, 0x83, 0x7b, 0x6a, 0x83, 0x8b, 0x6a, + 0x83, 0x8b, 0x73, 0x83, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, + 0x73, 0x6a, 0x94, 0x7b, 0x62, 0x5a, 0x4a, 0x31, 0x73, 0x62, 0x4a, 0x94, 0x6a, 0x6a, 0x8b, 0x7b, + 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x62, 0x62, 0x41, 0x31, + 0x4a, 0x31, 0x29, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x73, 0x83, + 0x7b, 0x6a, 0x8b, 0x7b, 0x73, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x7b, + 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x73, 0x83, 0x7b, 0x73, 0x7b, 0x6a, 0x5a, 0x94, 0x8b, 0x6a, + 0x52, 0x39, 0x31, 0x52, 0x41, 0x39, 0x73, 0x5a, 0x4a, 0x7b, 0x5a, 0x52, 0x94, 0x7b, 0x6a, 0x9c, + 0x83, 0x6a, 0x7b, 0x62, 0x5a, 0x7b, 0x62, 0x5a, 0x83, 0x62, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x5a, + 0x4a, 0x62, 0x4a, 0x41, 0x73, 0x5a, 0x4a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x6a, + 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x73, 0x83, 0x62, 0x62, 0x6a, 0x5a, 0x52, 0x7b, + 0x5a, 0x52, 0x8b, 0x6a, 0x5a, 0x83, 0x62, 0x5a, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x7b, 0x6a, + 0x4a, 0x73, 0x62, 0x52, 0x62, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x73, 0x6a, 0x62, 0x5a, + 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, + 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, + 0x52, 0x73, 0x5a, 0x52, 0x9c, 0x83, 0x62, 0x94, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x62, 0x52, 0x4a, + 0x62, 0x52, 0x41, 0x73, 0x6a, 0x52, 0x5a, 0x52, 0x4a, 0x94, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x73, + 0x6a, 0x8b, 0x73, 0x6a, 0x5a, 0x52, 0x4a, 0x62, 0x4a, 0x41, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, + 0x83, 0x73, 0x5a, 0xa4, 0x83, 0x6a, 0x7b, 0x62, 0x52, 0x62, 0x41, 0x31, 0x73, 0x5a, 0x4a, 0x7b, + 0x62, 0x52, 0x83, 0x62, 0x5a, 0x8b, 0x73, 0x62, 0x94, 0x7b, 0x6a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, + 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, + 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, + 0x7b, 0x6a, 0x83, 0x7b, 0x73, 0x83, 0x7b, 0x73, 0x83, 0x83, 0x73, 0x83, 0x8b, 0x73, 0x83, 0x7b, + 0x6a, 0x7b, 0x73, 0x6a, 0x83, 0x6a, 0x6a, 0x94, 0x7b, 0x6a, 0x7b, 0x8b, 0x62, 0x8b, 0x83, 0x7b, + 0x83, 0x83, 0x73, 0x83, 0x7b, 0x73, 0x83, 0x83, 0x73, 0x7b, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x8b, + 0x7b, 0x62, 0x94, 0x83, 0x62, 0x5a, 0x4a, 0x41, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x6a, + 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x62, 0x62, + 0x62, 0x52, 0x41, 0x62, 0x4a, 0x41, 0x5a, 0x41, 0x39, 0x5a, 0x4a, 0x41, 0x5a, 0x4a, 0x39, 0x6a, + 0x52, 0x52, 0x73, 0x5a, 0x52, 0x62, 0x52, 0x4a, 0x73, 0x5a, 0x4a, 0x62, 0x4a, 0x41, 0x73, 0x6a, + 0x5a, 0x7b, 0x62, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x52, 0x4a, 0x73, 0x5a, 0x52, + 0x6a, 0x52, 0x4a, 0x7b, 0x62, 0x5a, 0x94, 0x83, 0x7b, 0x8b, 0x7b, 0x73, 0x73, 0x62, 0x5a, 0x83, + 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x94, 0x7b, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x8b, + 0x7b, 0x8b, 0x7b, 0x73, 0x62, 0x5a, 0x52, 0x6a, 0x52, 0x52, 0x73, 0x62, 0x5a, 0x83, 0x6a, 0x6a, + 0x7b, 0x73, 0x6a, 0x83, 0x73, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x62, 0x62, 0x52, 0x73, + 0x6a, 0x62, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x52, 0x7b, 0x6a, 0x6a, 0x7b, 0x83, 0x73, 0x8b, 0x83, + 0x5a, 0x5a, 0x52, 0x52, 0x73, 0x73, 0x6a, 0x7b, 0x7b, 0x73, 0x7b, 0x73, 0x73, 0x6a, 0x6a, 0x62, + 0x6a, 0x6a, 0x62, 0x7b, 0x7b, 0x73, 0x7b, 0x7b, 0x73, 0x73, 0x73, 0x6a, 0x73, 0x6a, 0x6a, 0x7b, + 0x7b, 0x73, 0x83, 0x7b, 0x6a, 0x6a, 0x5a, 0x5a, 0x6a, 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x8b, 0x7b, + 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x83, 0x73, 0x73, 0x6a, 0x5a, + 0x62, 0x5a, 0x4a, 0x5a, 0x4a, 0x41, 0x73, 0x6a, 0x5a, 0x94, 0x7b, 0x7b, 0x7b, 0x7b, 0x73, 0x7b, + 0x73, 0x62, 0x73, 0x73, 0x6a, 0x8b, 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, + 0x62, 0x5a, 0x4a, 0x41, 0x73, 0x62, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x62, 0x5a, 0x83, 0x73, 0x6a, + 0x94, 0x7b, 0x73, 0x8b, 0x7b, 0x73, 0x94, 0x7b, 0x73, 0x94, 0x8b, 0x7b, 0x62, 0x52, 0x4a, 0x6a, + 0x52, 0x4a, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x94, 0x83, 0x73, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, + 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, + 0x83, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x9c, 0x83, 0x73, 0x94, + 0x7b, 0x73, 0x94, 0x7b, 0x73, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x6a, 0x62, 0x5a, 0x83, 0x7b, 0x73, 0x9c, 0x83, 0x62, 0x7b, 0x83, 0x73, 0x83, 0x8b, 0x73, + 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x73, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x8b, + 0x7b, 0x6a, 0x9c, 0x83, 0x62, 0x52, 0x4a, 0x39, 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x9c, 0x8b, 0x73, + 0x94, 0x7b, 0x73, 0x62, 0x4a, 0x41, 0x62, 0x4a, 0x41, 0x62, 0x52, 0x41, 0x8b, 0x8b, 0x7b, 0x9c, + 0x9c, 0x7b, 0x8b, 0x73, 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, + 0x6a, 0x8b, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x6a, 0x52, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x62, + 0x73, 0x5a, 0x5a, 0x62, 0x52, 0x4a, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x5a, 0x73, 0x62, 0x5a, 0x73, + 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x94, 0x7b, 0x73, 0x83, 0x6a, 0x6a, 0x8b, 0x7b, 0x73, 0x9c, 0x8b, + 0x7b, 0x62, 0x6a, 0x52, 0x52, 0x39, 0x31, 0x73, 0x52, 0x4a, 0x73, 0x52, 0x4a, 0x5a, 0x41, 0x41, + 0x5a, 0x41, 0x41, 0x62, 0x41, 0x31, 0x5a, 0x41, 0x41, 0x6a, 0x52, 0x52, 0x73, 0x6a, 0x62, 0x7b, + 0x6a, 0x6a, 0x73, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x73, 0x7b, 0x83, 0x73, 0x8b, 0x83, + 0x5a, 0x5a, 0x5a, 0x52, 0x6a, 0x6a, 0x62, 0x73, 0x73, 0x6a, 0x83, 0x7b, 0x73, 0x6a, 0x6a, 0x62, + 0x73, 0x6a, 0x6a, 0x7b, 0x7b, 0x73, 0x7b, 0x73, 0x73, 0x6a, 0x6a, 0x62, 0x73, 0x73, 0x6a, 0x7b, + 0x73, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x8b, 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x8b, 0x7b, + 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x9c, 0x8b, 0x73, 0x83, 0x73, 0x6a, + 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x39, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, + 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x62, 0x62, + 0x5a, 0x73, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x6a, + 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x5a, 0x18, 0x18, 0x18, 0x29, + 0x29, 0x29, 0x31, 0x29, 0x20, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x83, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x9c, 0x83, 0x73, 0x83, + 0x73, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x6a, 0x6a, + 0x5a, 0x62, 0x62, 0x4a, 0x8b, 0x6a, 0x6a, 0x9c, 0x83, 0x62, 0x7b, 0x83, 0x73, 0x83, 0x6a, 0x6a, + 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x62, 0xa4, + 0x8b, 0x6a, 0x94, 0x7b, 0x5a, 0x5a, 0x52, 0x41, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x73, + 0x62, 0x83, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x94, 0x83, 0x73, + 0x94, 0x94, 0x73, 0x8b, 0x7b, 0x6a, 0x62, 0x52, 0x41, 0x5a, 0x41, 0x39, 0x83, 0x7b, 0x73, 0xa4, + 0x9c, 0x83, 0x94, 0x94, 0x73, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, + 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, + 0x8b, 0x83, 0x7b, 0x62, 0x4a, 0x41, 0x6a, 0x5a, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x8b, + 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x8b, 0x73, 0x6a, 0x73, 0x5a, 0x5a, 0x7b, 0x73, 0x62, 0x9c, 0x8b, + 0x7b, 0x83, 0x73, 0x62, 0x52, 0x41, 0x39, 0x7b, 0x6a, 0x6a, 0x83, 0x73, 0x73, 0x83, 0x73, 0x6a, + 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x5a, 0x6a, 0x4a, 0x41, 0x62, 0x4a, 0x4a, 0x6a, 0x52, 0x4a, 0x7b, + 0x6a, 0x6a, 0x83, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x73, 0x8b, 0x83, + 0x5a, 0x5a, 0x5a, 0x39, 0x6a, 0x62, 0x62, 0x73, 0x6a, 0x6a, 0x8b, 0x8b, 0x7b, 0x7b, 0x73, 0x73, + 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x62, 0x6a, 0x6a, 0x62, 0x5a, 0x5a, 0x5a, 0x62, 0x62, 0x5a, 0x6a, + 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, + 0x6a, 0x7b, 0x73, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x7b, 0x83, 0x6a, + 0x62, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x62, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x62, 0x52, 0x4a, 0x6a, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x94, 0x83, 0x7b, 0x7b, 0x6a, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x6a, 0x6a, + 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x7b, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x29, 0x29, 0x29, 0x29, + 0x29, 0x29, 0x62, 0x4a, 0x41, 0x5a, 0x41, 0x39, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, + 0x62, 0x8b, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, + 0x83, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x83, + 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, + 0x62, 0x62, 0x52, 0x4a, 0x73, 0x73, 0x5a, 0x9c, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0xa4, + 0x8b, 0x6a, 0x9c, 0x83, 0x62, 0x31, 0x29, 0x20, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, + 0x94, 0x8b, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x62, 0x4a, 0x4a, 0x62, 0x52, 0x41, 0x9c, + 0x8b, 0x7b, 0x9c, 0x83, 0x73, 0x83, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x83, 0x7b, + 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x6a, + 0x7b, 0x73, 0x6a, 0x6a, 0x5a, 0x52, 0x62, 0x52, 0x4a, 0x7b, 0x6a, 0x6a, 0x7b, 0x73, 0x62, 0x83, + 0x6a, 0x73, 0x8b, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x8b, 0x7b, 0x73, 0xa4, 0x8b, + 0x73, 0x52, 0x4a, 0x41, 0x52, 0x39, 0x39, 0x8b, 0x7b, 0x73, 0x94, 0x7b, 0x73, 0x8b, 0x7b, 0x73, + 0x94, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x73, 0x5a, 0x5a, 0x62, + 0x4a, 0x41, 0x6a, 0x5a, 0x5a, 0x73, 0x6a, 0x62, 0x62, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x9c, 0x94, + 0x5a, 0x5a, 0x5a, 0x4a, 0x6a, 0x62, 0x62, 0x6a, 0x73, 0x6a, 0x9c, 0x83, 0x73, 0x73, 0x73, 0x62, + 0x5a, 0x5a, 0x52, 0x62, 0x62, 0x5a, 0x62, 0x62, 0x5a, 0x62, 0x5a, 0x5a, 0x62, 0x5a, 0x5a, 0x7b, + 0x73, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x62, 0x52, 0x4a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, + 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x6a, 0x7b, 0x6a, 0x6a, 0x83, 0x73, 0x73, 0x94, 0x7b, 0x7b, 0x83, 0x73, 0x6a, + 0x8b, 0x6a, 0x6a, 0x8b, 0x73, 0x6a, 0x7b, 0x62, 0x5a, 0x7b, 0x62, 0x5a, 0x18, 0x18, 0x18, 0x73, + 0x6a, 0x62, 0x8b, 0x7b, 0x6a, 0x73, 0x5a, 0x52, 0x6a, 0x4a, 0x41, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, + 0x6a, 0x8b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x83, 0x73, 0x62, + 0x7b, 0x62, 0x52, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, + 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x73, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x62, + 0x52, 0x5a, 0x4a, 0x41, 0x5a, 0x4a, 0x39, 0x9c, 0x83, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x62, + 0x7b, 0x83, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x8b, 0x6a, 0x83, 0x8b, 0x6a, 0x9c, + 0x83, 0x5a, 0x9c, 0x83, 0x62, 0x31, 0x29, 0x20, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, + 0x8b, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x52, 0x4a, 0x7b, + 0x62, 0x5a, 0xa4, 0x9c, 0x83, 0x94, 0x83, 0x7b, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x62, 0x52, + 0x4a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x6a, + 0x73, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x4a, 0x73, 0x62, 0x5a, 0x6a, 0x73, 0x62, 0x8b, + 0x73, 0x73, 0x8b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x7b, 0x6a, 0xa4, 0x94, + 0x73, 0x62, 0x52, 0x4a, 0x4a, 0x41, 0x39, 0x8b, 0x7b, 0x73, 0x83, 0x73, 0x6a, 0x83, 0x62, 0x62, + 0x7b, 0x62, 0x5a, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x83, 0x73, 0x8b, 0x7b, 0x6a, 0x7b, + 0x73, 0x62, 0x73, 0x73, 0x62, 0x52, 0x41, 0x39, 0x29, 0x18, 0x10, 0x52, 0x39, 0x29, 0x5a, 0x4a, + 0x31, 0x29, 0x18, 0x10, 0x5a, 0x52, 0x39, 0x62, 0x5a, 0x5a, 0x8b, 0x7b, 0x6a, 0x5a, 0x5a, 0x52, + 0x5a, 0x5a, 0x52, 0x62, 0x62, 0x5a, 0x62, 0x62, 0x5a, 0x6a, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x73, + 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x62, 0x7b, + 0x62, 0x73, 0x6a, 0x6a, 0x6a, 0x73, 0x6a, 0x83, 0x73, 0x73, 0x94, 0x73, 0x62, 0x7b, 0x6a, 0x6a, + 0x73, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x62, 0x5a, 0x73, 0x5a, 0x52, 0x7b, 0x73, 0x62, 0x83, + 0x6a, 0x62, 0x94, 0x83, 0x73, 0x6a, 0x62, 0x52, 0x52, 0x41, 0x39, 0x5a, 0x4a, 0x41, 0x8b, 0x73, + 0x6a, 0x8b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x6a, 0x52, + 0x7b, 0x5a, 0x52, 0x83, 0x6a, 0x52, 0x94, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x6a, 0x62, 0x83, + 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x6a, + 0x5a, 0x73, 0x62, 0x4a, 0x62, 0x4a, 0x41, 0x94, 0x7b, 0x5a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, + 0x83, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x94, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x9c, + 0x83, 0x62, 0x8b, 0x6a, 0x5a, 0x4a, 0x41, 0x31, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x62, 0x5a, 0x4a, + 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x9c, 0x8b, 0x73, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x52, 0x73, + 0x5a, 0x52, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x94, 0x83, 0x7b, 0x73, 0x73, 0x62, + 0x73, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x6a, 0x62, 0x5a, 0x62, 0x52, 0x4a, 0x73, 0x6a, 0x5a, 0x7b, + 0x62, 0x6a, 0x7b, 0x6a, 0x6a, 0x83, 0x6a, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x94, 0x83, + 0x6a, 0x5a, 0x4a, 0x41, 0x41, 0x31, 0x20, 0x6a, 0x6a, 0x5a, 0x94, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, + 0x8b, 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x83, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x83, + 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x62, 0x5a, 0x41, 0x31, 0x20, 0x29, 0x18, + 0x10, 0x31, 0x29, 0x20, 0x5a, 0x4a, 0x31, 0x62, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, + 0x6a, 0x73, 0x62, 0x62, 0x52, 0x41, 0x62, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, + 0x7b, 0x6a, 0x62, 0x5a, 0x52, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, + 0x62, 0x62, 0x62, 0x5a, 0x73, 0x6a, 0x6a, 0x6a, 0x6a, 0x62, 0x73, 0x62, 0x62, 0x62, 0x52, 0x52, + 0x6a, 0x52, 0x52, 0x73, 0x62, 0x5a, 0x6a, 0x5a, 0x52, 0x7b, 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x83, + 0x73, 0x62, 0x9c, 0x83, 0x73, 0x94, 0x83, 0x73, 0x73, 0x5a, 0x5a, 0x5a, 0x41, 0x39, 0x83, 0x6a, + 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x8b, 0x6a, 0x5a, + 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x5a, 0x73, + 0x5a, 0x52, 0x6a, 0x52, 0x4a, 0x73, 0x5a, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x73, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x9c, 0x8b, 0x62, 0x8b, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, + 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x94, 0x8b, 0x7b, 0x83, 0x83, 0x6a, 0x9c, 0x7b, 0x6a, 0x94, + 0x83, 0x5a, 0x83, 0x73, 0x62, 0x52, 0x39, 0x31, 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x9c, 0x94, 0x73, 0x8b, 0x7b, 0x6a, 0x7b, + 0x62, 0x52, 0x62, 0x52, 0x41, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, + 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x62, 0x62, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x52, 0x4a, 0x62, 0x52, 0x4a, 0x73, + 0x62, 0x62, 0x83, 0x62, 0x62, 0x83, 0x6a, 0x73, 0x83, 0x6a, 0x6a, 0x83, 0x73, 0x62, 0x94, 0x7b, + 0x62, 0x62, 0x4a, 0x41, 0x5a, 0x41, 0x41, 0x94, 0x83, 0x6a, 0x94, 0x83, 0x73, 0x8b, 0x7b, 0x6a, + 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x83, 0x83, 0x6a, 0x83, + 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x5a, 0x62, 0x5a, + 0x39, 0x39, 0x31, 0x18, 0x5a, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x83, 0x83, 0x62, 0x6a, 0x5a, 0x4a, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, + 0x7b, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, + 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x5a, 0x73, 0x62, 0x5a, 0x73, + 0x62, 0x62, 0x62, 0x5a, 0x6a, 0x73, 0x6a, 0x73, 0x6a, 0x6a, 0x6a, 0x6a, 0x62, 0x6a, 0x62, 0x62, + 0x83, 0x73, 0x73, 0x73, 0x5a, 0x52, 0x8b, 0x6a, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x94, + 0x73, 0x62, 0x8b, 0x73, 0x73, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x94, 0x7b, 0x73, 0x73, 0x5a, + 0x52, 0x7b, 0x62, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x94, 0x73, 0x62, + 0x8b, 0x73, 0x62, 0x94, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x6a, 0x52, 0x4a, 0x6a, 0x52, 0x4a, 0x6a, + 0x5a, 0x4a, 0x73, 0x62, 0x4a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x94, 0x7b, + 0x5a, 0x7b, 0x62, 0x52, 0x73, 0x6a, 0x52, 0xa4, 0x83, 0x5a, 0x94, 0x83, 0x6a, 0x8b, 0x83, 0x6a, + 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x8b, 0x7b, 0x5a, 0x7b, 0x6a, 0x6a, 0x8b, + 0x7b, 0x5a, 0x83, 0x73, 0x6a, 0x41, 0x31, 0x20, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, + 0x7b, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0xa4, 0x9c, 0x83, 0x73, + 0x62, 0x52, 0x73, 0x62, 0x52, 0x62, 0x52, 0x41, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, + 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x6a, 0x6a, 0x62, 0x62, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x62, 0x5a, 0x6a, 0x5a, 0x4a, 0x6a, + 0x52, 0x52, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x62, 0x9c, 0x83, + 0x6a, 0x6a, 0x5a, 0x52, 0x6a, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, + 0x8b, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x83, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, + 0x62, 0x7b, 0x83, 0x62, 0x6a, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x4a, + 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x83, 0x7b, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x62, 0x6a, 0x5a, 0x5a, 0x4a, 0x41, 0x6a, + 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x62, 0x7b, 0x62, 0x5a, 0x73, + 0x62, 0x52, 0x6a, 0x62, 0x73, 0x6a, 0x6a, 0x73, 0x73, 0x6a, 0x73, 0x73, 0x6a, 0x73, 0x73, 0x6a, + 0x6a, 0x52, 0x52, 0x83, 0x6a, 0x73, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x6a, 0x6a, 0x8b, + 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x73, 0x5a, 0x52, 0x94, 0x83, 0x73, 0x83, 0x73, 0x62, 0x8b, 0x73, + 0x62, 0x73, 0x5a, 0x52, 0x83, 0x6a, 0x5a, 0x8b, 0x6a, 0x5a, 0x8b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, + 0x83, 0x6a, 0x5a, 0x83, 0x62, 0x4a, 0x73, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x83, + 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x94, 0x73, 0x62, 0x8b, 0x7b, + 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x94, 0x7b, 0x6a, 0xac, 0x94, 0x7b, 0xa4, 0x8b, 0x6a, + 0x94, 0x83, 0x6a, 0x94, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0xa4, + 0x8b, 0x6a, 0x73, 0x73, 0x5a, 0x29, 0x18, 0x10, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, + 0x5a, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, + 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x8b, + 0x83, 0x6a, 0x62, 0x4a, 0x39, 0x5a, 0x4a, 0x39, 0x6a, 0x52, 0x4a, 0x83, 0x73, 0x62, 0x83, 0x7b, + 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x6a, 0x62, 0x62, 0x62, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x62, 0x52, 0x4a, 0x73, + 0x5a, 0x52, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x5a, 0x73, 0x6a, 0x62, 0x9c, 0x83, + 0x6a, 0x7b, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x73, 0x62, + 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x94, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x73, + 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x8b, 0x7b, 0x5a, 0x73, 0x6a, 0x52, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, + 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, + 0x94, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x41, 0x39, 0x31, 0x29, 0x29, 0x29, 0x6a, 0x62, 0x52, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x83, 0x62, 0x6a, 0x83, 0x62, 0x62, 0x7b, + 0x62, 0x5a, 0x73, 0x62, 0x7b, 0x83, 0x73, 0x73, 0x73, 0x6a, 0x73, 0x73, 0x6a, 0x62, 0x52, 0x52, + 0x73, 0x6a, 0x62, 0x83, 0x6a, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x6a, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, + 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x94, 0x8b, 0x7b, 0x9c, 0x83, 0x73, 0x83, 0x73, + 0x6a, 0x5a, 0x41, 0x39, 0x73, 0x5a, 0x4a, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x52, 0x94, 0x73, 0x62, + 0x52, 0x39, 0x31, 0x6a, 0x52, 0x4a, 0x62, 0x52, 0x41, 0x6a, 0x52, 0x4a, 0x73, 0x6a, 0x5a, 0x73, + 0x6a, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x6a, 0x5a, 0x4a, 0x7b, 0x73, 0x62, 0xa4, 0x8b, 0x6a, 0xac, 0x94, 0x7b, 0x8b, 0x73, 0x62, + 0x73, 0x62, 0x5a, 0x7b, 0x62, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x94, + 0x7b, 0x62, 0x73, 0x5a, 0x4a, 0x4a, 0x31, 0x29, 0x62, 0x52, 0x41, 0x62, 0x62, 0x4a, 0x52, 0x5a, + 0x41, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x6a, + 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x62, 0x4a, 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x94, + 0x83, 0x6a, 0x83, 0x73, 0x62, 0x5a, 0x41, 0x39, 0x5a, 0x41, 0x39, 0x62, 0x52, 0x41, 0x83, 0x73, + 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x5a, 0x62, 0x52, 0x52, 0x6a, + 0x52, 0x52, 0x73, 0x5a, 0x5a, 0x6a, 0x52, 0x52, 0x73, 0x5a, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x7b, + 0x62, 0x62, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, + 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, + 0x5a, 0x8b, 0x83, 0x62, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x8b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, + 0x8b, 0x73, 0x5a, 0x4a, 0x4a, 0x41, 0x31, 0x31, 0x29, 0x62, 0x5a, 0x52, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, + 0x6a, 0x73, 0x7b, 0x6a, 0x94, 0x94, 0x73, 0x73, 0x7b, 0x6a, 0x62, 0x52, 0x52, 0x6a, 0x62, 0x5a, + 0x6a, 0x6a, 0x62, 0x83, 0x6a, 0x73, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, + 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x94, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x8b, 0x7b, 0x73, 0x5a, + 0x52, 0x62, 0x62, 0x4a, 0x83, 0x73, 0x6a, 0x5a, 0x39, 0x29, 0x52, 0x39, 0x31, 0x52, 0x39, 0x31, + 0x52, 0x31, 0x29, 0x62, 0x52, 0x41, 0x73, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, + 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x41, 0x41, 0x31, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, 0x73, 0x62, 0x6a, 0x52, 0x4a, + 0x62, 0x52, 0x41, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x5a, 0x4a, 0x6a, 0x5a, 0x39, 0x6a, + 0x5a, 0x52, 0x6a, 0x52, 0x39, 0x5a, 0x4a, 0x39, 0x62, 0x4a, 0x39, 0x5a, 0x4a, 0x39, 0x62, 0x4a, + 0x39, 0x62, 0x4a, 0x41, 0x73, 0x62, 0x52, 0x73, 0x62, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, + 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, + 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x62, 0x4a, 0x39, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x39, 0x73, 0x5a, + 0x52, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x6a, + 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x62, 0x5a, 0x5a, 0x73, 0x62, 0x62, 0x6a, + 0x5a, 0x5a, 0x6a, 0x52, 0x52, 0x62, 0x4a, 0x4a, 0x83, 0x6a, 0x6a, 0x73, 0x7b, 0x62, 0x8b, 0x7b, + 0x62, 0x5a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, + 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x83, + 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x62, 0x62, + 0x52, 0x8b, 0x83, 0x6a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x94, 0x83, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x73, + 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x83, + 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, + 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, + 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, + 0x6a, 0x94, 0x94, 0x73, 0x83, 0x8b, 0x73, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, + 0x6a, 0x73, 0x5a, 0x83, 0x73, 0x73, 0x83, 0x73, 0x73, 0x8b, 0x73, 0x73, 0x83, 0x73, 0x6a, 0x73, + 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x52, 0x39, + 0x31, 0x7b, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x6a, 0x4a, 0x83, 0x62, 0x4a, 0x4a, 0x52, 0x31, + 0xa4, 0x83, 0x5a, 0x62, 0x41, 0x31, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x6a, + 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x5a, 0x4a, + 0x41, 0x4a, 0x4a, 0x31, 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x73, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, + 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0xa4, 0x94, 0x73, 0x9c, 0x8b, 0x7b, 0x9c, + 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x62, + 0x52, 0x5a, 0x4a, 0x39, 0x5a, 0x4a, 0x31, 0x52, 0x39, 0x31, 0x52, 0x41, 0x31, 0x6a, 0x52, 0x39, + 0x83, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x83, + 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x9c, 0x83, 0x73, 0x6a, 0x5a, 0x52, 0x52, 0x39, + 0x31, 0x73, 0x5a, 0x52, 0x83, 0x73, 0x6a, 0x9c, 0x8b, 0x7b, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, + 0x6a, 0x6a, 0x62, 0x6a, 0x6a, 0x62, 0x6a, 0x62, 0x62, 0x6a, 0x6a, 0x62, 0x73, 0x6a, 0x6a, 0x83, + 0x62, 0x62, 0x62, 0x52, 0x52, 0x6a, 0x52, 0x52, 0x7b, 0x62, 0x5a, 0x6a, 0x73, 0x62, 0x8b, 0x7b, + 0x62, 0x5a, 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, + 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x8b, + 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x62, 0x62, + 0x52, 0x94, 0x83, 0x6a, 0x62, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x9c, 0x83, 0x62, + 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x7b, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x62, 0x6a, 0x52, 0x5a, 0x5a, 0x52, 0x73, 0x73, 0x62, + 0x94, 0x83, 0x62, 0x73, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x8b, 0x8b, + 0x73, 0x8b, 0x8b, 0x73, 0x7b, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, + 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x8b, 0x6a, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x73, + 0x62, 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x62, + 0x62, 0x83, 0x6a, 0x62, 0x94, 0x73, 0x52, 0x9c, 0x73, 0x5a, 0x8b, 0x6a, 0x5a, 0x83, 0x73, 0x62, + 0x9c, 0x73, 0x5a, 0x83, 0x62, 0x4a, 0x7b, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, + 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x73, 0x94, 0x83, 0x62, 0x5a, 0x41, + 0x39, 0x41, 0x31, 0x20, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, + 0x8b, 0x73, 0x62, 0xa4, 0x8b, 0x6a, 0x9c, 0x8b, 0x7b, 0x8b, 0x7b, 0x6a, 0x94, 0x83, 0x6a, 0x8b, + 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x6a, + 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x52, 0x41, 0x52, 0x39, 0x31, + 0x62, 0x4a, 0x39, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x6a, + 0x62, 0x4a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x73, 0x6a, 0x62, 0x52, 0x62, 0x52, + 0x41, 0x6a, 0x5a, 0x52, 0x7b, 0x62, 0x5a, 0x94, 0x94, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x6a, 0x52, + 0x73, 0x6a, 0x62, 0x6a, 0x5a, 0x5a, 0x5a, 0x62, 0x52, 0x62, 0x62, 0x5a, 0x7b, 0x6a, 0x6a, 0x7b, + 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x5a, 0x52, 0x52, 0x5a, 0x4a, 0x41, 0x73, 0x7b, 0x62, 0x8b, 0x83, + 0x62, 0x52, 0x52, 0x41, 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, + 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x83, 0x7b, + 0x62, 0x9c, 0x83, 0x73, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, + 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x6a, 0x73, + 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x62, 0x6a, + 0x52, 0x62, 0x6a, 0x52, 0x5a, 0x5a, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, + 0x8b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x52, 0x41, 0x39, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x8b, 0x8b, + 0x6a, 0x7b, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x5a, 0x5a, 0x73, 0x62, 0x5a, 0x7b, + 0x73, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x52, 0x5a, 0x4a, 0x41, 0x83, 0x73, + 0x62, 0x9c, 0x83, 0x62, 0x9c, 0x7b, 0x62, 0x9c, 0x73, 0x5a, 0x94, 0x73, 0x62, 0x9c, 0x7b, 0x62, + 0x7b, 0x7b, 0x62, 0x8b, 0x73, 0x4a, 0x52, 0x31, 0x29, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x5a, 0x52, + 0x41, 0x5a, 0x39, 0x29, 0x8b, 0x7b, 0x73, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, + 0x94, 0x83, 0x6a, 0x9c, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x94, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, + 0x62, 0x8b, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x62, + 0x5a, 0x4a, 0x39, 0x62, 0x52, 0x4a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, + 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x73, 0x6a, + 0x5a, 0x62, 0x5a, 0x4a, 0x73, 0x62, 0x5a, 0x83, 0x6a, 0x6a, 0x9c, 0x9c, 0x7b, 0x73, 0x73, 0x62, + 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x5a, 0x5a, 0x5a, 0x73, 0x62, 0x62, 0x7b, 0x73, 0x73, 0x62, + 0x5a, 0x5a, 0x7b, 0x5a, 0x52, 0x62, 0x5a, 0x5a, 0x62, 0x52, 0x4a, 0x7b, 0x73, 0x5a, 0x8b, 0x83, + 0x6a, 0x52, 0x4a, 0x41, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x73, + 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, + 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x9c, 0x83, + 0x6a, 0x94, 0x83, 0x6a, 0x6a, 0x62, 0x4a, 0x52, 0x4a, 0x41, 0x6a, 0x5a, 0x39, 0x8b, 0x73, 0x5a, + 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x8b, 0x73, 0x6a, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x5a, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, + 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x52, 0x41, 0x31, 0x83, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x8b, 0x6a, 0x94, 0x94, 0x73, 0x7b, 0x83, + 0x6a, 0x5a, 0x41, 0x39, 0x6a, 0x6a, 0x5a, 0x62, 0x6a, 0x52, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x7b, + 0x73, 0x62, 0x73, 0x62, 0x5a, 0x7b, 0x73, 0x62, 0x5a, 0x52, 0x4a, 0x83, 0x6a, 0x5a, 0x6a, 0x6a, + 0x5a, 0xa4, 0x83, 0x6a, 0x9c, 0x73, 0x5a, 0x9c, 0x73, 0x5a, 0x94, 0x73, 0x62, 0x9c, 0x73, 0x5a, + 0x83, 0x62, 0x5a, 0x94, 0x73, 0x52, 0x6a, 0x52, 0x39, 0x62, 0x52, 0x4a, 0x7b, 0x73, 0x62, 0x73, + 0x6a, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x8b, 0x7b, 0x5a, 0x62, 0x5a, + 0x52, 0x5a, 0x41, 0x39, 0x83, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, + 0x9c, 0x83, 0x6a, 0xa4, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x6a, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, + 0x5a, 0x6a, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x8b, 0x83, 0x62, + 0x62, 0x52, 0x41, 0x52, 0x39, 0x31, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, + 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x6a, 0x6a, + 0x5a, 0x62, 0x5a, 0x52, 0x73, 0x62, 0x52, 0x83, 0x73, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, + 0x73, 0x62, 0x73, 0x62, 0x62, 0x7b, 0x73, 0x6a, 0x83, 0x73, 0x5a, 0x52, 0x41, 0x39, 0x8b, 0x7b, + 0x62, 0x4a, 0x41, 0x39, 0x41, 0x39, 0x31, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, + 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, + 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x8b, 0x6a, 0x8b, 0x83, + 0x6a, 0x83, 0x73, 0x6a, 0x62, 0x52, 0x41, 0x4a, 0x41, 0x39, 0x7b, 0x6a, 0x5a, 0xa4, 0x8b, 0x6a, + 0x9c, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x62, 0x6a, 0x52, 0x6a, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x4a, 0x4a, + 0x41, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x52, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, + 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x52, 0x4a, 0x39, 0x83, 0x8b, 0x6a, 0x83, 0x83, 0x6a, 0x73, + 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x9c, 0x9c, 0x7b, 0x73, 0x6a, 0x5a, 0x5a, 0x52, + 0x41, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x6a, 0x73, 0x6a, 0x62, 0x73, + 0x62, 0x5a, 0x73, 0x6a, 0x62, 0x5a, 0x4a, 0x41, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, + 0x5a, 0x8b, 0x7b, 0x62, 0x9c, 0x73, 0x5a, 0x9c, 0x7b, 0x6a, 0x94, 0x73, 0x62, 0x7b, 0x6a, 0x5a, + 0x7b, 0x7b, 0x5a, 0x94, 0x73, 0x52, 0x8b, 0x73, 0x62, 0x52, 0x39, 0x31, 0x73, 0x6a, 0x5a, 0x73, + 0x62, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x6a, 0x6a, + 0x52, 0x4a, 0x31, 0x29, 0x6a, 0x5a, 0x4a, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, + 0x94, 0x83, 0x73, 0x94, 0x7b, 0x6a, 0x8b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, + 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x62, + 0x8b, 0x83, 0x62, 0x62, 0x4a, 0x39, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x52, 0x83, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x5a, 0x5a, 0x39, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x62, + 0x52, 0x73, 0x6a, 0x52, 0x73, 0x5a, 0x52, 0x5a, 0x52, 0x4a, 0x5a, 0x52, 0x4a, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x7b, + 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, + 0x52, 0x39, 0x39, 0x29, 0x5a, 0x4a, 0x41, 0x83, 0x7b, 0x62, 0x94, 0x8b, 0x6a, 0x7b, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x73, + 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x41, 0x41, 0x39, 0x9c, 0x7b, 0x52, 0xa4, 0x8b, 0x6a, + 0x8b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x73, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, + 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x4a, 0x41, 0x39, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x62, + 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x94, 0x94, 0x73, 0x83, 0x83, 0x6a, 0x5a, 0x52, 0x39, 0x6a, 0x62, + 0x52, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, + 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x6a, 0x83, 0x73, 0x73, 0x73, 0x62, 0x62, 0x6a, + 0x62, 0x52, 0x5a, 0x52, 0x41, 0x73, 0x62, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x6a, 0x5a, + 0x52, 0x8b, 0x6a, 0x5a, 0x9c, 0x73, 0x5a, 0x9c, 0x73, 0x5a, 0x9c, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x7b, 0x73, 0x5a, 0x8b, 0x6a, 0x4a, 0x94, 0x73, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x4a, 0x41, 0x73, + 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x9c, 0x83, 0x62, 0x73, 0x73, + 0x5a, 0x5a, 0x39, 0x29, 0x62, 0x52, 0x4a, 0x8b, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x83, 0x73, 0x62, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x7b, + 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x9c, 0x94, 0x73, + 0xa4, 0x9c, 0x83, 0x83, 0x73, 0x5a, 0x52, 0x4a, 0x31, 0x41, 0x31, 0x20, 0x83, 0x73, 0x62, 0x83, + 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x73, 0x62, 0x7b, 0x73, + 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x4a, 0x5a, 0x52, 0x4a, 0x73, 0x5a, 0x5a, 0x6a, 0x62, 0x5a, + 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, + 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x62, 0x52, + 0x41, 0x29, 0x29, 0x29, 0x31, 0x31, 0x29, 0x94, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x73, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, + 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x5a, 0x52, 0x52, 0x41, 0x41, 0x39, 0xa4, 0x83, 0x6a, 0x9c, 0x7b, 0x62, + 0x94, 0x7b, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x73, 0x73, + 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x4a, + 0x73, 0x73, 0x62, 0x4a, 0x41, 0x39, 0x41, 0x41, 0x41, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x94, 0x94, 0x73, 0x7b, 0x83, 0x62, 0x62, 0x52, 0x41, 0x5a, 0x52, 0x4a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x73, + 0x62, 0x5a, 0x5a, 0x52, 0x4a, 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x5a, 0x83, 0x6a, 0x62, 0x73, 0x73, + 0x5a, 0x8b, 0x73, 0x6a, 0x94, 0x7b, 0x62, 0x8b, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x62, 0x5a, 0x4a, + 0x73, 0x6a, 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x6a, 0x4a, 0x73, 0x7b, 0x6a, 0x62, 0x52, 0x41, 0x6a, + 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x94, 0x83, 0x62, 0x6a, 0x6a, + 0x5a, 0x5a, 0x41, 0x41, 0x6a, 0x5a, 0x52, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, + 0x83, 0x6a, 0x62, 0x9c, 0x83, 0x6a, 0x9c, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x73, + 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x8b, 0x7b, 0x62, + 0x9c, 0x9c, 0x7b, 0x73, 0x5a, 0x4a, 0x52, 0x39, 0x29, 0x5a, 0x39, 0x29, 0x6a, 0x5a, 0x4a, 0x83, + 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x62, 0x5a, 0x41, 0x62, 0x62, 0x52, 0x62, 0x5a, + 0x4a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x73, 0x62, 0x62, + 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, + 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x83, 0x6a, + 0x5a, 0x29, 0x29, 0x29, 0x29, 0x29, 0x18, 0x7b, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x52, + 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x6a, 0x62, 0x83, 0x83, + 0x62, 0x7b, 0x7b, 0x62, 0x41, 0x41, 0x41, 0x39, 0x39, 0x39, 0x94, 0x73, 0x52, 0x83, 0x73, 0x5a, + 0x8b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x7b, 0x83, 0x6a, 0x4a, 0x41, 0x41, 0x4a, 0x41, 0x39, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x83, + 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x62, 0x52, 0x41, 0x5a, 0x52, 0x41, 0x41, 0x41, 0x39, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, + 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x62, + 0x5a, 0x4a, 0x83, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, + 0x62, 0x7b, 0x6a, 0x5a, 0x9c, 0x83, 0x5a, 0x52, 0x4a, 0x39, 0x52, 0x4a, 0x31, 0x52, 0x4a, 0x39, + 0x5a, 0x5a, 0x4a, 0x83, 0x62, 0x4a, 0x94, 0x73, 0x52, 0x7b, 0x83, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, + 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x62, 0x62, + 0x52, 0x41, 0x31, 0x20, 0x6a, 0x62, 0x5a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x62, + 0x94, 0x83, 0x6a, 0xa4, 0x83, 0x6a, 0x9c, 0x83, 0x73, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, + 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x7b, + 0x62, 0x6a, 0x73, 0x5a, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x8b, 0x6a, + 0x73, 0x6a, 0x52, 0x7b, 0x7b, 0x5a, 0xa4, 0x8b, 0x6a, 0x5a, 0x4a, 0x41, 0x62, 0x5a, 0x41, 0x6a, + 0x62, 0x4a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x5a, 0x5a, 0x39, 0x7b, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x52, + 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0xa4, 0x9c, + 0x83, 0x73, 0x62, 0x52, 0x29, 0x29, 0x29, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, + 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x83, + 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x8b, 0x8b, + 0x73, 0x41, 0x41, 0x41, 0x29, 0x29, 0x18, 0x31, 0x31, 0x31, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x5a, + 0x94, 0x7b, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, + 0x83, 0x8b, 0x73, 0x73, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x4a, 0x41, 0x31, 0x29, 0x18, 0x10, 0x62, + 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x41, 0x41, 0x39, 0x5a, 0x62, 0x52, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, + 0x73, 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x62, 0x52, 0x4a, 0x73, + 0x6a, 0x5a, 0x94, 0x8b, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x8b, 0x73, + 0x62, 0x73, 0x62, 0x4a, 0x5a, 0x5a, 0x4a, 0x52, 0x52, 0x41, 0x62, 0x62, 0x41, 0x5a, 0x5a, 0x39, + 0x5a, 0x52, 0x41, 0x7b, 0x62, 0x62, 0x94, 0x7b, 0x52, 0x8b, 0x73, 0x62, 0x7b, 0x83, 0x73, 0x7b, + 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x5a, + 0x52, 0x4a, 0x52, 0x41, 0x7b, 0x73, 0x62, 0x7b, 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, 0x62, + 0x94, 0x83, 0x6a, 0x94, 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, + 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x62, 0x83, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x62, 0x5a, 0x4a, + 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x94, 0x94, 0x73, 0x83, 0x73, 0x62, 0x5a, 0x4a, 0x39, 0x6a, + 0x5a, 0x4a, 0x7b, 0x73, 0x4a, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x52, 0x7b, 0x73, 0x62, 0x7b, 0x7b, + 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x62, 0x52, 0x4a, 0x39, + 0x6a, 0x5a, 0x52, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, + 0x5a, 0x52, 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x9c, 0x94, + 0x73, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, + 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x9c, 0x8b, 0x73, 0x9c, 0x8b, 0x73, 0x7b, 0x7b, + 0x6a, 0x4a, 0x41, 0x39, 0x41, 0x41, 0x39, 0x39, 0x39, 0x31, 0x5a, 0x4a, 0x41, 0x7b, 0x6a, 0x52, + 0x6a, 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x41, + 0x4a, 0x39, 0x7b, 0x7b, 0x73, 0x62, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x8b, 0x73, + 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x5a, 0x52, 0x4a, 0x41, 0x39, 0x39, 0x5a, + 0x4a, 0x39, 0x5a, 0x41, 0x39, 0x52, 0x52, 0x4a, 0x39, 0x31, 0x29, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, + 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x5a, 0x4a, 0x39, 0x6a, 0x6a, 0x52, 0x73, + 0x6a, 0x52, 0x8b, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x73, 0x62, + 0x4a, 0x52, 0x41, 0x39, 0x7b, 0x7b, 0x6a, 0x8b, 0x6a, 0x5a, 0x8b, 0x6a, 0x4a, 0x73, 0x5a, 0x52, + 0x52, 0x52, 0x41, 0x52, 0x52, 0x41, 0x94, 0x7b, 0x52, 0x94, 0x7b, 0x5a, 0x6a, 0x6a, 0x5a, 0x5a, + 0x41, 0x39, 0x5a, 0x4a, 0x39, 0x5a, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x94, 0x73, 0x62, 0x8b, 0x6a, + 0x5a, 0x6a, 0x6a, 0x52, 0x94, 0x83, 0x73, 0x94, 0x83, 0x73, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, + 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, + 0x7b, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x83, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, + 0x7b, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x62, 0x52, 0x41, 0x62, + 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x6a, 0x6a, 0x52, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x5a, 0x73, 0x6a, + 0x52, 0x73, 0x73, 0x4a, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, + 0x5a, 0x52, 0x41, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x5a, 0x73, + 0x62, 0x5a, 0x73, 0x62, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x73, + 0x62, 0x73, 0x6a, 0x52, 0x62, 0x52, 0x41, 0x41, 0x41, 0x31, 0x73, 0x5a, 0x4a, 0x6a, 0x73, 0x5a, + 0x7b, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, + 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x5a, 0x52, + 0x41, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x41, + 0x83, 0x73, 0x5a, 0x4a, 0x4a, 0x39, 0x52, 0x52, 0x41, 0x6a, 0x73, 0x5a, 0x41, 0x41, 0x39, 0x52, + 0x52, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x62, 0x62, 0x52, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x83, 0x62, 0x73, + 0x7b, 0x62, 0x5a, 0x5a, 0x52, 0x39, 0x39, 0x31, 0x5a, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x73, 0x73, + 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x5a, 0x4a, 0x41, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, + 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x5a, 0x4a, + 0x41, 0x7b, 0x5a, 0x52, 0x9c, 0x83, 0x62, 0x9c, 0x7b, 0x52, 0x8b, 0x73, 0x4a, 0x6a, 0x4a, 0x41, + 0x4a, 0x4a, 0x31, 0x52, 0x52, 0x41, 0x8b, 0x6a, 0x4a, 0x8b, 0x6a, 0x4a, 0x62, 0x4a, 0x39, 0x6a, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x83, 0x6a, 0x6a, 0x7b, 0x62, + 0x5a, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x94, 0x83, 0x73, 0x83, 0x73, 0x62, 0x41, 0x41, 0x39, + 0x4a, 0x41, 0x41, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x73, + 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x52, 0x52, 0x4a, 0x62, 0x5a, 0x52, 0x94, 0x83, 0x62, 0x83, 0x7b, + 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x94, 0x83, 0x62, + 0x83, 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x5a, + 0x5a, 0x39, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, + 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x52, + 0x52, 0x4a, 0x31, 0x4a, 0x39, 0x29, 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x94, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x7b, 0x83, 0x62, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x39, 0x62, 0x5a, 0x4a, + 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, + 0x7b, 0x62, 0x94, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x73, 0x62, + 0x52, 0x6a, 0x62, 0x4a, 0x62, 0x62, 0x4a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x62, 0x5a, 0x52, + 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x62, 0x52, 0x4a, 0x41, 0x41, 0x39, 0x52, 0x52, 0x4a, 0x62, + 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x6a, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, + 0x62, 0x62, 0x52, 0x83, 0x7b, 0x5a, 0x8b, 0x7b, 0x5a, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x6a, 0x6a, + 0x6a, 0x5a, 0x4a, 0x4a, 0x39, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x7b, 0x5a, 0x83, 0x6a, 0x4a, 0x6a, 0x5a, 0x4a, 0x73, 0x62, + 0x5a, 0x94, 0x7b, 0x5a, 0x94, 0x83, 0x5a, 0x9c, 0x7b, 0x52, 0x83, 0x6a, 0x4a, 0x83, 0x6a, 0x52, + 0x73, 0x52, 0x4a, 0x5a, 0x5a, 0x39, 0x62, 0x41, 0x31, 0x6a, 0x52, 0x4a, 0x94, 0x7b, 0x5a, 0x8b, + 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x94, 0x83, 0x73, 0x94, 0x83, 0x6a, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x52, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, + 0x62, 0x52, 0x94, 0x83, 0x62, 0x94, 0x83, 0x6a, 0x8b, 0x83, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x83, + 0x6a, 0x7b, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x6a, + 0x6a, 0x52, 0x5a, 0x5a, 0x39, 0x62, 0x5a, 0x52, 0x7b, 0x83, 0x5a, 0x83, 0x83, 0x62, 0x7b, 0x7b, + 0x5a, 0x7b, 0x7b, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x41, 0x31, 0x20, 0x41, 0x31, 0x20, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x62, 0x8b, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, + 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x9c, 0x83, 0x6a, 0x6a, 0x5a, 0x39, 0x62, 0x5a, 0x4a, + 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x94, 0x7b, 0x6a, 0x8b, + 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x62, + 0x52, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, + 0x29, 0x29, 0x29, 0x41, 0x41, 0x39, 0x41, 0x39, 0x31, 0x41, 0x41, 0x39, 0x5a, 0x5a, 0x4a, 0x6a, + 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x83, + 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, + 0x62, 0x6a, 0x52, 0x94, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x39, 0x41, 0x39, 0x73, 0x73, 0x62, 0x52, + 0x52, 0x41, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x5a, 0x4a, 0x39, 0x6a, 0x62, 0x52, 0x7b, 0x83, + 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x62, + 0x6a, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x9c, 0x94, 0x7b, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, + 0x62, 0x5a, 0x83, 0x73, 0x52, 0x83, 0x6a, 0x52, 0x73, 0x5a, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x6a, + 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x62, + 0x8b, 0x6a, 0x4a, 0x5a, 0x62, 0x52, 0x62, 0x62, 0x4a, 0x6a, 0x5a, 0x52, 0x94, 0x7b, 0x5a, 0x9c, + 0x8b, 0x62, 0x8b, 0x7b, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x94, 0x8b, 0x73, 0x83, 0x73, 0x62, 0x39, 0x39, 0x39, + 0x41, 0x39, 0x39, 0x39, 0x39, 0x39, 0x83, 0x73, 0x6a, 0x5a, 0x52, 0x41, 0x4a, 0x4a, 0x4a, 0x8b, + 0x7b, 0x62, 0x9c, 0x83, 0x73, 0x9c, 0x8b, 0x62, 0x9c, 0x83, 0x73, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, + 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x83, 0x8b, 0x62, 0x83, + 0x83, 0x6a, 0x62, 0x5a, 0x4a, 0x7b, 0x83, 0x62, 0x7b, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, + 0x4a, 0x8b, 0x8b, 0x6a, 0x94, 0x94, 0x73, 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x5a, 0x5a, 0x39, 0x41, 0x31, 0x20, 0x73, 0x7b, 0x62, 0x8b, + 0x8b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x94, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x62, 0x52, 0x4a, + 0x6a, 0x5a, 0x4a, 0x7b, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x8b, + 0x7b, 0x62, 0x73, 0x62, 0x52, 0x7b, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x6a, 0x62, + 0x4a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x62, 0x29, 0x29, 0x18, 0x41, 0x39, 0x39, 0x5a, 0x52, 0x4a, 0x62, 0x62, 0x52, 0x6a, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, + 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x5a, 0x41, 0x39, 0x39, 0x52, 0x4a, 0x39, 0x41, + 0x41, 0x41, 0x7b, 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x62, 0x6a, 0x52, 0x62, 0x52, 0x41, 0x83, 0x83, + 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x5a, 0x41, 0x31, 0x94, 0x94, 0x73, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x62, 0x5a, 0x8b, + 0x83, 0x5a, 0x94, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, + 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x6a, 0x83, 0x62, 0x4a, 0x7b, 0x62, 0x5a, 0x83, 0x6a, 0x6a, + 0x83, 0x6a, 0x52, 0x5a, 0x5a, 0x39, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x5a, 0x52, 0x8b, + 0x73, 0x5a, 0x8b, 0x7b, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x62, 0x5a, 0x52, 0x52, 0x4a, + 0x4a, 0x41, 0x41, 0x62, 0x52, 0x41, 0x52, 0x41, 0x39, 0x52, 0x4a, 0x39, 0x31, 0x29, 0x20, 0x9c, + 0x8b, 0x62, 0x9c, 0x8b, 0x73, 0x9c, 0x8b, 0x73, 0x94, 0x83, 0x6a, 0x8b, 0x7b, 0x6a, 0x6a, 0x6a, + 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x6a, 0x52, + 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, + 0x73, 0x5a, 0x8b, 0x8b, 0x6a, 0x73, 0x6a, 0x52, 0x7b, 0x7b, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, + 0x5a, 0x8b, 0x8b, 0x6a, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x5a, 0x62, 0x62, 0x4a, 0x7b, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x8b, 0x6a, 0x52, 0x41, 0x29, 0x5a, 0x5a, 0x4a, 0x83, + 0x83, 0x6a, 0x9c, 0x83, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, + 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x5a, + 0x73, 0x6a, 0x52, 0x4a, 0x41, 0x39, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x62, + 0x52, 0x41, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x62, 0x5a, + 0x41, 0x7b, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x52, + 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x29, 0x29, 0x29, 0x41, 0x41, 0x41, 0x62, 0x62, 0x52, 0x6a, + 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x6a, + 0x6a, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x4a, 0x4a, 0x39, 0x62, 0x5a, 0x52, 0x73, + 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x62, 0x52, + 0x41, 0x7b, 0x7b, 0x6a, 0x4a, 0x4a, 0x39, 0x62, 0x52, 0x4a, 0x52, 0x52, 0x41, 0x4a, 0x41, 0x39, + 0x73, 0x73, 0x62, 0x8b, 0x8b, 0x6a, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x8b, + 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, + 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x6a, 0x83, 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x7b, 0x62, 0x5a, + 0x7b, 0x62, 0x52, 0x73, 0x5a, 0x4a, 0x4a, 0x4a, 0x31, 0x73, 0x73, 0x62, 0x62, 0x5a, 0x52, 0x8b, + 0x73, 0x5a, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x94, 0x83, 0x62, 0x94, 0x7b, 0x7b, 0x7b, 0x6a, + 0x6a, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, 0x5a, 0x9c, 0x8b, 0x73, 0x5a, 0x5a, 0x52, + 0x73, 0x62, 0x5a, 0x83, 0x7b, 0x5a, 0x7b, 0x73, 0x5a, 0x4a, 0x41, 0x31, 0x41, 0x41, 0x31, 0x7b, + 0x73, 0x62, 0x94, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x6a, 0x73, + 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, + 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, + 0x7b, 0x52, 0x8b, 0x8b, 0x73, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x83, 0x5a, 0x83, 0x7b, + 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x52, + 0x73, 0x62, 0x52, 0x9c, 0x8b, 0x62, 0x83, 0x8b, 0x73, 0x73, 0x73, 0x5a, 0x5a, 0x52, 0x39, 0x73, + 0x73, 0x5a, 0x94, 0x83, 0x62, 0x94, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x6a, + 0x94, 0x7b, 0x5a, 0x7b, 0x62, 0x52, 0x41, 0x39, 0x31, 0x5a, 0x52, 0x4a, 0x62, 0x52, 0x41, 0x73, + 0x62, 0x52, 0xa4, 0x8b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, + 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x5a, 0x62, 0x52, 0x73, 0x73, 0x5a, + 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x4a, 0x4a, 0x41, 0x39, 0x39, 0x31, 0x5a, 0x62, 0x52, 0x73, + 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x6a, 0x6a, 0x73, + 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x5a, + 0x6a, 0x62, 0x52, 0x83, 0x83, 0x6a, 0xa4, 0x8b, 0x6a, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, + 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, + 0x5a, 0x5a, 0x41, 0x31, 0x41, 0x41, 0x39, 0x62, 0x62, 0x4a, 0x41, 0x39, 0x39, 0x5a, 0x5a, 0x4a, + 0x94, 0x94, 0x73, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x62, + 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, + 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x73, 0x62, 0x5a, + 0x73, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x52, 0x4a, 0x31, 0x5a, 0x5a, 0x4a, 0x7b, 0x7b, 0x62, 0x83, + 0x7b, 0x6a, 0x83, 0x7b, 0x5a, 0x73, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x94, 0x83, 0x73, 0x62, 0x4a, + 0x41, 0x6a, 0x62, 0x5a, 0x62, 0x52, 0x4a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x5a, 0x4a, 0x41, 0x73, + 0x6a, 0x52, 0x94, 0x83, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, + 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, + 0x6a, 0x5a, 0x83, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x62, 0x5a, 0x41, 0x73, 0x73, 0x4a, 0x83, 0x7b, + 0x62, 0x8b, 0x7b, 0x5a, 0x94, 0x8b, 0x73, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x5a, + 0x52, 0x52, 0x41, 0x94, 0x83, 0x62, 0x9c, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x62, + 0x4a, 0x41, 0x83, 0x73, 0x5a, 0xa4, 0x94, 0x73, 0x94, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x94, 0x83, 0x6a, + 0x8b, 0x73, 0x62, 0xa4, 0x8b, 0x6a, 0x9c, 0x7b, 0x62, 0x39, 0x31, 0x31, 0x7b, 0x73, 0x5a, 0x8b, + 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x73, 0x6a, 0x52, 0x7b, 0x83, 0x62, 0x83, 0x7b, + 0x62, 0x5a, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x31, 0x31, 0x31, 0x4a, 0x4a, 0x39, 0x6a, + 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x52, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x52, 0x9c, 0x83, 0x62, 0x8b, 0x83, 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x73, + 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x6a, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x94, 0x94, 0x73, + 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x62, + 0x52, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x8b, 0x7b, 0x73, 0x83, 0x73, 0x62, + 0x94, 0x73, 0x62, 0x8b, 0x7b, 0x52, 0x7b, 0x62, 0x52, 0x52, 0x4a, 0x41, 0x7b, 0x6a, 0x62, 0x73, + 0x62, 0x5a, 0x6a, 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x7b, 0x62, 0x5a, 0x73, 0x62, 0x52, 0x5a, 0x4a, + 0x41, 0x6a, 0x5a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x62, 0x83, 0x83, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x62, 0x62, 0x7b, 0x7b, 0x62, 0x4a, + 0x41, 0x39, 0x8b, 0x8b, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x94, 0x8b, 0x73, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x4a, 0x39, 0x39, 0x31, 0x6a, 0x6a, + 0x52, 0x83, 0x7b, 0x62, 0x9c, 0x83, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, + 0x6a, 0x73, 0x52, 0x62, 0x62, 0x4a, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x5a, 0x39, 0x62, 0x52, 0x41, 0x7b, 0x83, 0x6a, 0xa4, 0x94, 0x73, 0x7b, 0x73, 0x5a, 0x83, 0x7b, + 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x8b, 0x73, 0x6a, + 0x94, 0x83, 0x6a, 0x9c, 0x8b, 0x62, 0x8b, 0x7b, 0x62, 0x62, 0x52, 0x41, 0x94, 0x83, 0x6a, 0x94, + 0x83, 0x62, 0x94, 0x83, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x73, 0x7b, + 0x62, 0x73, 0x6a, 0x5a, 0x62, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, + 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x29, 0x29, 0x29, 0x52, + 0x52, 0x4a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x5a, + 0x8b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x52, 0x5a, 0x41, 0x31, 0x31, 0x31, 0x62, 0x6a, 0x5a, 0x94, 0x94, 0x73, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, + 0x52, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x7b, 0x73, 0x5a, + 0x8b, 0x73, 0x4a, 0x7b, 0x7b, 0x62, 0x5a, 0x52, 0x41, 0x62, 0x52, 0x4a, 0x73, 0x6a, 0x62, 0x62, + 0x5a, 0x52, 0x62, 0x4a, 0x4a, 0x62, 0x4a, 0x4a, 0x52, 0x4a, 0x41, 0x5a, 0x4a, 0x41, 0x73, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x83, 0x62, 0x62, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x6a, + 0x7b, 0x6a, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x7b, 0x62, 0x6a, 0x83, 0x6a, 0x62, 0x7b, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x5a, 0xa4, 0x9c, 0x83, + 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, + 0x73, 0x4a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x9c, 0x94, 0x73, 0x41, 0x39, 0x39, 0x39, 0x39, + 0x31, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x5a, 0x39, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x5a, 0x41, 0x39, 0x73, 0x62, 0x52, 0xa4, 0x9c, 0x83, 0x9c, 0x8b, 0x62, 0x83, 0x7b, + 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x5a, 0x9c, 0x8b, 0x62, + 0x83, 0x73, 0x6a, 0x94, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x9c, + 0x83, 0x62, 0x94, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, + 0x5a, 0x73, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x5a, 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x83, 0x8b, 0x73, 0x5a, 0x5a, 0x4a, 0x29, + 0x29, 0x29, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x62, + 0x83, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, + 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x83, 0x6a, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x41, 0x39, 0x31, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x9c, 0x9c, 0x7b, 0x73, 0x73, 0x62, 0x62, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x73, + 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x62, + 0x5a, 0x83, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x7b, 0x73, 0x5a, + 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x62, 0x52, 0x52, 0x5a, 0x4a, 0x41, 0x5a, + 0x41, 0x41, 0x5a, 0x4a, 0x4a, 0x62, 0x52, 0x52, 0x5a, 0x4a, 0x4a, 0x8b, 0x7b, 0x62, 0x73, 0x73, + 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x83, 0x83, 0x73, 0x73, 0x6a, 0x62, + 0x7b, 0x62, 0x6a, 0x7b, 0x73, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x7b, + 0x73, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x6a, + 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x62, 0xa4, 0x9c, 0x83, + 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x8b, 0x83, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x7b, 0x52, 0x52, 0x4a, 0x41, 0x4a, 0x52, + 0x41, 0x52, 0x4a, 0x41, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x73, 0x6a, 0x52, + 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, + 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x5a, 0x52, 0x39, 0xa4, 0x8b, 0x6a, 0x9c, 0x83, 0x6a, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, + 0x7b, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x6a, + 0x6a, 0x5a, 0x9c, 0x83, 0x62, 0x83, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, + 0x52, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x62, 0x62, 0x4a, 0x6a, 0x73, 0x52, 0x6a, 0x6a, 0x5a, + 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, 0x6a, 0x52, 0x41, + 0x41, 0x39, 0x4a, 0x4a, 0x41, 0x9c, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x5a, 0x94, 0x7b, 0x5a, + 0x6a, 0x6a, 0x5a, 0x41, 0x39, 0x39, 0x52, 0x52, 0x4a, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, + 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x83, + 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x4a, 0x41, 0x39, 0x62, 0x6a, 0x52, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, + 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, + 0x52, 0x8b, 0x7b, 0x73, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x73, 0x94, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x5a, 0x4a, 0x39, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, + 0x6a, 0x6a, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x62, 0x73, 0x62, 0x62, 0x83, 0x83, 0x62, 0x83, 0x6a, + 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, 0x83, 0x73, 0x83, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, + 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, + 0x62, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x6a, + 0x5a, 0x52, 0x5a, 0x41, 0x73, 0x73, 0x6a, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x9c, 0x9c, 0x7b, + 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, + 0x7b, 0x6a, 0x94, 0x94, 0x73, 0x83, 0x83, 0x73, 0x41, 0x41, 0x41, 0x6a, 0x6a, 0x52, 0x83, 0x7b, + 0x6a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x8b, 0x7b, 0x5a, + 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x4a, 0x4a, 0x39, 0x62, 0x62, 0x52, 0x8b, + 0x7b, 0x5a, 0x94, 0x7b, 0x5a, 0x73, 0x5a, 0x4a, 0x73, 0x62, 0x4a, 0x8b, 0x7b, 0x62, 0x7b, 0x62, + 0x62, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x62, + 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x62, 0x62, 0x8b, 0x7b, 0x5a, 0x5a, 0x52, 0x4a, 0x6a, + 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x9c, 0x83, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x62, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x62, 0x62, 0x4a, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x4a, 0x4a, 0x41, 0x39, 0x39, 0x31, 0x5a, 0x52, 0x41, 0x62, 0x52, 0x41, 0x5a, 0x52, + 0x41, 0x52, 0x4a, 0x41, 0x41, 0x41, 0x39, 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, 0x5a, 0x62, 0x4a, + 0x6a, 0x6a, 0x5a, 0x39, 0x39, 0x39, 0x5a, 0x5a, 0x52, 0x83, 0x8b, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x5a, 0x52, 0x4a, 0x41, 0x41, 0x39, + 0x5a, 0x62, 0x4a, 0x52, 0x52, 0x41, 0x41, 0x41, 0x39, 0x4a, 0x4a, 0x39, 0x41, 0x39, 0x31, 0x41, + 0x31, 0x20, 0x39, 0x31, 0x31, 0x52, 0x41, 0x39, 0x5a, 0x41, 0x31, 0x62, 0x5a, 0x4a, 0x73, 0x6a, + 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x8b, 0x73, 0x73, 0x9c, 0x83, 0x62, + 0x62, 0x52, 0x4a, 0x52, 0x41, 0x31, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x6a, 0x8b, + 0x7b, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x6a, 0x6a, 0x73, 0x73, 0x6a, 0x83, 0x83, 0x62, 0x7b, 0x6a, + 0x62, 0x8b, 0x83, 0x73, 0x83, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, + 0x5a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x62, 0x62, + 0x5a, 0x5a, 0x52, 0x4a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x62, + 0x73, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x8b, + 0x8b, 0x73, 0x6a, 0x6a, 0x5a, 0x4a, 0x52, 0x41, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x62, 0x83, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x41, 0x41, 0x39, 0x62, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, + 0x8b, 0x8b, 0x6a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x62, 0x62, 0x52, 0x39, 0x39, 0x29, 0x9c, + 0x7b, 0x52, 0x8b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x62, 0x52, 0x41, 0x5a, 0x52, 0x41, 0x94, 0x83, + 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x9c, 0x7b, 0x62, 0x8b, 0x7b, 0x62, + 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x5a, 0x7b, 0x6a, 0x5a, 0x5a, + 0x52, 0x4a, 0x7b, 0x7b, 0x62, 0x94, 0x7b, 0x5a, 0x94, 0x7b, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, + 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x5a, 0x62, 0x4a, + 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x39, 0x31, 0x31, 0x7b, 0x73, 0x62, 0x9c, 0x8b, 0x73, 0x8b, 0x83, + 0x6a, 0x6a, 0x6a, 0x5a, 0x62, 0x5a, 0x52, 0x62, 0x5a, 0x41, 0x6a, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, + 0x5a, 0x52, 0x41, 0x52, 0x52, 0x4a, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x52, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x52, 0x52, 0x4a, + 0x31, 0x31, 0x31, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x73, 0x8b, + 0x83, 0x73, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x73, 0x6a, + 0x5a, 0x83, 0x8b, 0x73, 0x94, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x73, 0x83, 0x62, 0x5a, + 0x52, 0x39, 0x31, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x83, + 0x6a, 0x73, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, + 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x62, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x7b, 0x7b, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x4a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, + 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x6a, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x8b, 0x83, 0x6a, 0x6a, + 0x62, 0x4a, 0x41, 0x41, 0x39, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x83, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x5a, + 0x83, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x83, + 0x73, 0x52, 0x9c, 0x83, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x4a, 0x39, 0x29, 0x5a, 0x52, + 0x4a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x5a, + 0x62, 0x4a, 0x4a, 0x62, 0x52, 0x41, 0x62, 0x5a, 0x4a, 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, 0x39, + 0x39, 0x31, 0x6a, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x7b, 0x83, + 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x52, 0x62, 0x62, 0x52, + 0x62, 0x5a, 0x4a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x62, + 0x62, 0x52, 0x52, 0x41, 0x31, 0x4a, 0x4a, 0x41, 0x7b, 0x73, 0x62, 0x8b, 0x8b, 0x73, 0x83, 0x83, + 0x6a, 0x73, 0x73, 0x62, 0x5a, 0x5a, 0x39, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x73, 0x5a, + 0x83, 0x83, 0x73, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x7b, 0x7b, 0x62, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x52, 0x41, 0x5a, 0x52, 0x41, + 0x31, 0x31, 0x29, 0x41, 0x41, 0x39, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, + 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x4a, 0x41, + 0x31, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x4a, 0x7b, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x6a, 0x5a, 0x52, + 0x5a, 0x41, 0x31, 0x8b, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x73, 0x83, + 0x7b, 0x73, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, + 0x62, 0x7b, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, + 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x83, 0x6a, 0x62, 0x8b, 0x8b, 0x73, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, + 0x6a, 0x8b, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, + 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x4a, 0x4a, 0x39, 0x52, + 0x4a, 0x4a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, + 0x5a, 0x8b, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x62, 0x62, 0x4a, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x4a, + 0x41, 0x31, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x41, 0x4a, 0x39, 0x39, 0x39, 0x39, 0x4a, 0x4a, + 0x41, 0x83, 0x83, 0x6a, 0x4a, 0x41, 0x31, 0x31, 0x31, 0x29, 0x18, 0x18, 0x18, 0x8, 0x8, 0x8, + 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x6a, + 0x73, 0x62, 0x62, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x94, 0x7b, 0x5a, 0x9c, 0x83, 0x62, 0x94, 0x83, + 0x6a, 0x6a, 0x73, 0x5a, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, + 0x62, 0x62, 0x4a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x5a, + 0x52, 0x41, 0x39, 0x39, 0x39, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x7b, 0x7b, + 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x5a, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, + 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x73, 0x7b, 0x6a, + 0x39, 0x39, 0x31, 0x73, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, + 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x4a, 0x31, + 0x29, 0x5a, 0x4a, 0x41, 0x73, 0x62, 0x62, 0x7b, 0x6a, 0x4a, 0x73, 0x62, 0x52, 0x5a, 0x41, 0x31, + 0x7b, 0x5a, 0x52, 0x83, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x73, 0x73, 0x6a, 0x6a, 0x7b, + 0x83, 0x73, 0x73, 0x73, 0x6a, 0x62, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x7b, 0x6a, + 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, + 0x6a, 0x62, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x83, 0x6a, 0x6a, 0x62, 0x5a, 0x52, 0x73, 0x6a, + 0x5a, 0x8b, 0x8b, 0x73, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x52, 0x4a, 0x41, 0x5a, 0x52, 0x4a, 0x8b, + 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x7b, 0x7b, 0x5a, 0x83, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x5a, + 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, + 0x7b, 0x62, 0x4a, 0x41, 0x31, 0x4a, 0x4a, 0x31, 0x41, 0x39, 0x39, 0x6a, 0x6a, 0x5a, 0x9c, 0x94, + 0x73, 0xa4, 0x9c, 0x83, 0xa4, 0x9c, 0x83, 0xa4, 0x9c, 0x83, 0x94, 0x94, 0x73, 0xa4, 0x9c, 0x83, + 0x9c, 0x94, 0x73, 0x83, 0x83, 0x73, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x94, 0x94, 0x73, 0x8b, + 0x8b, 0x73, 0x73, 0x6a, 0x5a, 0x5a, 0x4a, 0x39, 0x8b, 0x7b, 0x62, 0x9c, 0x83, 0x62, 0x8b, 0x73, + 0x5a, 0x8b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x7b, 0x83, 0x6a, 0x62, 0x6a, 0x52, 0x8b, 0x7b, 0x5a, 0x73, 0x73, 0x62, 0x5a, 0x52, 0x41, 0x52, + 0x52, 0x4a, 0x5a, 0x62, 0x52, 0x8b, 0x83, 0x6a, 0x83, 0x8b, 0x73, 0x8b, 0x7b, 0x62, 0x7b, 0x73, + 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, + 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x5a, 0x62, 0x6a, 0x5a, 0x5a, 0x5a, 0x52, 0x73, + 0x73, 0x5a, 0x6a, 0x6a, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, + 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, + 0x62, 0x4a, 0x39, 0x29, 0x73, 0x62, 0x52, 0x9c, 0x83, 0x62, 0x8b, 0x6a, 0x5a, 0x5a, 0x41, 0x31, + 0x6a, 0x52, 0x39, 0x7b, 0x62, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x73, 0x6a, 0x6a, 0x7b, + 0x7b, 0x73, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x73, 0x6a, + 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x62, 0x7b, 0x6a, 0x62, + 0x7b, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x73, 0x6a, 0x52, 0x52, + 0x41, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, + 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, 0x7b, 0x73, 0x62, 0x8b, + 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, + 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x5a, 0x5a, 0x4a, + 0x73, 0x73, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, + 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x31, 0x31, 0x20, 0x62, 0x5a, 0x4a, 0x8b, 0x83, 0x6a, 0x73, 0x62, + 0x52, 0x8b, 0x83, 0x62, 0x9c, 0x8b, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x6a, 0x62, 0x4a, + 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x8b, + 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0xa4, 0x83, 0x5a, 0x83, 0x7b, + 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x6a, + 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x5a, 0x4a, 0x39, 0x52, + 0x52, 0x41, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x83, + 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, + 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x94, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x5a, 0x62, + 0x5a, 0x52, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, + 0x6a, 0x62, 0x62, 0x52, 0x6a, 0x62, 0x5a, 0x73, 0x6a, 0x52, 0x62, 0x52, 0x4a, 0x52, 0x52, 0x4a, + 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x7b, + 0x6a, 0x62, 0x52, 0x4a, 0x5a, 0x39, 0x29, 0x83, 0x6a, 0x5a, 0x52, 0x41, 0x31, 0x73, 0x52, 0x4a, + 0x73, 0x52, 0x4a, 0x6a, 0x52, 0x4a, 0x94, 0x73, 0x62, 0x83, 0x7b, 0x73, 0x94, 0x8b, 0x7b, 0x7b, + 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, + 0x5a, 0x7b, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x5a, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x83, 0x62, 0x62, 0x7b, 0x73, 0x62, 0x41, 0x39, + 0x39, 0x4a, 0x41, 0x39, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, + 0x6a, 0x6a, 0x5a, 0x41, 0x41, 0x39, 0x62, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x8b, + 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, + 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x5a, 0x5a, 0x4a, + 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, + 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x4a, 0x41, 0x31, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, + 0x5a, 0x6a, 0x5a, 0x4a, 0x62, 0x5a, 0x52, 0x73, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x62, 0x52, + 0x73, 0x62, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x8b, + 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x4a, 0x4a, 0x39, 0x39, 0x31, 0x29, 0x83, 0x73, 0x5a, 0x94, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, + 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x4a, 0x41, 0x31, 0x52, 0x4a, 0x39, 0x5a, 0x5a, 0x4a, 0x6a, + 0x62, 0x52, 0x9c, 0x8b, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x94, 0x83, 0x62, 0x7b, 0x62, + 0x52, 0x6a, 0x62, 0x52, 0x8b, 0x8b, 0x73, 0x73, 0x6a, 0x52, 0x6a, 0x5a, 0x52, 0x6a, 0x6a, 0x52, + 0x73, 0x6a, 0x52, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x4a, 0x4a, 0x4a, 0x52, + 0x52, 0x4a, 0x62, 0x4a, 0x41, 0x6a, 0x73, 0x5a, 0x62, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, + 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x6a, 0x5a, 0x39, 0x52, 0x52, 0x4a, 0x8b, 0x83, 0x6a, + 0x94, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x83, + 0x73, 0x94, 0x83, 0x73, 0x52, 0x41, 0x31, 0x5a, 0x39, 0x29, 0x5a, 0x4a, 0x39, 0x73, 0x52, 0x4a, + 0x6a, 0x62, 0x5a, 0x5a, 0x4a, 0x41, 0x94, 0x83, 0x7b, 0x73, 0x6a, 0x6a, 0x6a, 0x73, 0x62, 0x83, + 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x73, + 0x73, 0x62, 0x83, 0x8b, 0x6a, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x83, 0x7b, 0x6a, 0x62, 0x62, + 0x52, 0x29, 0x29, 0x29, 0x4a, 0x41, 0x39, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x41, 0x41, 0x39, 0x62, 0x62, 0x52, 0x8b, 0x83, 0x62, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x7b, + 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x62, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x7b, + 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x52, + 0x52, 0x52, 0x41, 0x62, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x6a, 0x62, 0x52, 0x62, + 0x5a, 0x4a, 0x52, 0x52, 0x41, 0x7b, 0x7b, 0x62, 0x6a, 0x5a, 0x4a, 0x94, 0x83, 0x6a, 0x73, 0x62, + 0x52, 0x73, 0x62, 0x52, 0x73, 0x62, 0x52, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, + 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x7b, + 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x8b, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x39, 0x39, 0x31, 0x8b, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, + 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x62, 0x62, 0x4a, 0x4a, 0x41, 0x31, 0x52, 0x52, 0x4a, 0xa4, + 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x52, + 0x73, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x62, 0x5a, + 0x5a, 0x5a, 0x4a, 0x4a, 0x4a, 0x62, 0x62, 0x52, 0x5a, 0x62, 0x4a, 0x5a, 0x62, 0x4a, 0x62, 0x6a, + 0x52, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x73, 0x73, 0x62, 0x94, 0x8b, 0x73, + 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x7b, + 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x9c, 0x8b, + 0x73, 0x5a, 0x41, 0x39, 0x4a, 0x39, 0x29, 0x4a, 0x31, 0x29, 0x94, 0x8b, 0x73, 0x9c, 0x83, 0x73, + 0x52, 0x4a, 0x41, 0x5a, 0x4a, 0x39, 0x73, 0x62, 0x52, 0x83, 0x73, 0x73, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x73, 0x73, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x7b, + 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x8b, 0x8b, 0x6a, 0x83, 0x73, 0x6a, 0x7b, 0x62, 0x62, 0x6a, 0x6a, 0x5a, 0x83, + 0x83, 0x62, 0x94, 0x8b, 0x73, 0x8b, 0x7b, 0x73, 0x73, 0x6a, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, + 0x5a, 0x31, 0x31, 0x31, 0x31, 0x31, 0x29, 0x4a, 0x41, 0x41, 0x6a, 0x6a, 0x5a, 0x4a, 0x41, 0x39, + 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x83, + 0x7b, 0x73, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, + 0x62, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x62, + 0x62, 0x5a, 0x4a, 0x5a, 0x5a, 0x39, 0x62, 0x5a, 0x52, 0x62, 0x62, 0x4a, 0x62, 0x5a, 0x4a, 0x6a, + 0x62, 0x4a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x62, + 0x4a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, + 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x7b, 0x6a, 0x5a, 0x73, + 0x62, 0x4a, 0x7b, 0x6a, 0x52, 0x94, 0x7b, 0x5a, 0x4a, 0x4a, 0x41, 0x39, 0x31, 0x31, 0x73, 0x6a, + 0x52, 0x83, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x52, 0x4a, 0x39, 0x8b, 0x7b, 0x62, 0x9c, + 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x62, + 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, + 0x6a, 0x62, 0x52, 0x8b, 0x8b, 0x73, 0x94, 0x94, 0x73, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x83, + 0x83, 0x6a, 0x73, 0x73, 0x62, 0x4a, 0x4a, 0x39, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, + 0x4a, 0x5a, 0x62, 0x4a, 0x62, 0x5a, 0x4a, 0x4a, 0x4a, 0x41, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, + 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x73, + 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x7b, 0x6a, + 0x62, 0x4a, 0x39, 0x29, 0x62, 0x4a, 0x4a, 0x9c, 0x7b, 0x6a, 0xa4, 0x8b, 0x73, 0x8b, 0x7b, 0x62, + 0x62, 0x5a, 0x4a, 0x52, 0x4a, 0x39, 0x62, 0x4a, 0x41, 0x73, 0x6a, 0x6a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x73, 0x73, 0x6a, 0x6a, 0x83, 0x62, 0x6a, 0x73, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x73, + 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x62, + 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x6a, 0x6a, 0x5a, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x52, 0x52, 0x41, 0x5a, 0x5a, + 0x52, 0x52, 0x52, 0x41, 0x62, 0x62, 0x52, 0x4a, 0x4a, 0x39, 0x4a, 0x4a, 0x41, 0x62, 0x62, 0x52, + 0x8b, 0x83, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, + 0x73, 0x5a, 0x8b, 0x83, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x83, + 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0xa4, 0x9c, 0x83, + 0x7b, 0x73, 0x62, 0x52, 0x4a, 0x41, 0x5a, 0x52, 0x41, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x73, + 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x73, 0x62, + 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x8b, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x62, + 0x83, 0x73, 0x62, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, + 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x6a, 0x6a, 0x5a, 0x62, 0x5a, + 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x8b, 0x6a, 0x73, 0x7b, 0x6a, 0x83, 0x73, 0x5a, + 0x5a, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x9c, 0x94, 0x73, 0x83, + 0x7b, 0x6a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x73, 0x5a, 0x7b, 0x83, + 0x62, 0x9c, 0x94, 0x7b, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x7b, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x8b, + 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x5a, 0x5a, 0x4a, 0x52, 0x5a, 0x41, 0x52, 0x52, 0x41, 0x52, 0x5a, + 0x41, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x39, 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x73, 0x7b, 0x62, + 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, + 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x4a, 0x31, 0x29, 0x7b, 0x62, 0x52, 0x9c, 0x8b, 0x7b, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, + 0x7b, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x52, 0x4a, 0x41, 0x52, 0x4a, 0x4a, 0x7b, 0x73, 0x6a, 0x6a, + 0x73, 0x62, 0x62, 0x62, 0x5a, 0x62, 0x62, 0x5a, 0x6a, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x62, 0x62, + 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x7b, + 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x5a, 0x5a, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x73, + 0x5a, 0x8b, 0x7b, 0x6a, 0x9c, 0x83, 0x73, 0x5a, 0x5a, 0x52, 0x5a, 0x52, 0x4a, 0x94, 0x8b, 0x73, + 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, + 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x73, 0x6a, 0x62, 0x5a, 0xa4, 0x94, 0x73, 0x94, 0x8b, + 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0xa4, 0x94, 0x73, + 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x31, 0x31, 0x29, 0x41, 0x39, 0x31, 0x7b, 0x7b, 0x6a, 0x94, + 0x8b, 0x73, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, + 0x52, 0x73, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x52, + 0x94, 0x8b, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, + 0x73, 0x5a, 0x94, 0x7b, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x94, 0x83, 0x6a, 0x6a, 0x73, + 0x62, 0x5a, 0x41, 0x31, 0x39, 0x41, 0x31, 0x7b, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x83, 0x73, 0x5a, + 0x4a, 0x4a, 0x41, 0x6a, 0x5a, 0x4a, 0x7b, 0x7b, 0x62, 0x94, 0x83, 0x73, 0x83, 0x6a, 0x52, 0x83, + 0x7b, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x73, 0x7b, 0x83, + 0x6a, 0x7b, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x62, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, + 0x8b, 0x73, 0x8b, 0x83, 0x62, 0x7b, 0x83, 0x62, 0x52, 0x52, 0x41, 0x52, 0x52, 0x4a, 0x52, 0x52, + 0x41, 0x52, 0x52, 0x4a, 0x41, 0x41, 0x31, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, + 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, + 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x6a, 0x6a, + 0x5a, 0x62, 0x5a, 0x4a, 0x83, 0x6a, 0x5a, 0xa4, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x62, + 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x6a, 0x62, 0x62, 0x7b, + 0x7b, 0x6a, 0x6a, 0x6a, 0x62, 0x62, 0x62, 0x5a, 0x5a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x6a, + 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x8b, 0x83, 0x6a, 0x8b, + 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x52, 0x52, 0x4a, 0x5a, 0x52, 0x41, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, + 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x7b, 0x7b, 0x6a, + 0xa4, 0x94, 0x73, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, + 0x73, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, + 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x31, 0x29, 0x20, 0x6a, 0x62, 0x52, 0x9c, 0x9c, 0x7b, 0x7b, + 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x8b, 0x83, 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, + 0x4a, 0x83, 0x7b, 0x6a, 0x9c, 0x94, 0x7b, 0x62, 0x5a, 0x4a, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x5a, + 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, + 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x52, 0x4a, 0x41, 0x62, 0x62, 0x4a, 0x8b, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x6a, 0x62, 0x52, + 0x52, 0x4a, 0x39, 0x6a, 0x6a, 0x5a, 0x9c, 0x8b, 0x62, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x8b, + 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, + 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, + 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x6a, 0x52, 0x7b, + 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x4a, 0x39, 0x41, 0x41, + 0x31, 0x39, 0x39, 0x29, 0x5a, 0x5a, 0x4a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, + 0x5a, 0x62, 0x5a, 0x41, 0x83, 0x73, 0x62, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, + 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x52, 0x73, 0x62, 0x5a, 0x83, + 0x73, 0x73, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x62, 0x6a, 0x62, 0x5a, 0x7b, 0x83, 0x62, 0x73, 0x6a, + 0x62, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, + 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x52, 0x52, 0x4a, 0x5a, 0x52, 0x41, 0x5a, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x5a, 0x83, 0x6a, 0x52, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x5a, 0x52, 0x41, + 0x8b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x6a, 0x73, + 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x83, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, + 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x41, 0x39, 0x31, 0x94, 0x8b, 0x6a, 0x8b, 0x83, 0x6a, 0x73, + 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, 0x73, 0x6a, + 0x52, 0xa4, 0x94, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, + 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, 0x6a, 0x52, 0x83, + 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x4a, 0x41, 0x39, + 0x52, 0x4a, 0x41, 0x83, 0x83, 0x6a, 0x9c, 0x83, 0x73, 0x7b, 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x83, + 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, + 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x6a, + 0x6a, 0x52, 0x6a, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x41, 0x41, 0x39, 0x18, 0x18, + 0x18, 0x52, 0x52, 0x41, 0x9c, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, + 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, + 0x6a, 0x5a, 0x41, 0x39, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, + 0x83, 0x73, 0x62, 0x83, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x62, 0x52, 0x52, 0x73, + 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x6a, 0x8b, 0x83, 0x73, 0x8b, 0x83, + 0x73, 0x7b, 0x6a, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x62, 0x62, 0x73, 0x62, 0x62, + 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x41, + 0x41, 0x39, 0x52, 0x52, 0x4a, 0x5a, 0x52, 0x4a, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x8b, 0x7b, + 0x62, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x94, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x62, 0x52, + 0x73, 0x6a, 0x5a, 0x94, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x7b, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x7b, + 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x83, 0x8b, + 0x6a, 0x8b, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, + 0x9c, 0x9c, 0x7b, 0x7b, 0x73, 0x5a, 0x39, 0x39, 0x31, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x73, + 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x8b, 0x83, 0x62, 0x73, 0x62, 0x52, 0x8b, 0x83, 0x62, 0x7b, 0x6a, + 0x62, 0x94, 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x8b, 0x8b, 0x6a, 0x62, 0x5a, 0x4a, 0x7b, 0x73, 0x5a, + 0x94, 0x8b, 0x6a, 0x8b, 0x8b, 0x73, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x4a, 0x8b, 0x73, 0x5a, 0x8b, + 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x5a, 0x52, + 0x41, 0xa4, 0x83, 0x5a, 0x83, 0x7b, 0x6a, 0x52, 0x41, 0x39, 0x39, 0x39, 0x31, 0x4a, 0x41, 0x39, + 0x52, 0x5a, 0x41, 0x9c, 0x8b, 0x7b, 0x94, 0x83, 0x6a, 0x7b, 0x62, 0x62, 0x8b, 0x73, 0x62, 0x83, + 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x83, + 0x6a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x83, 0x94, 0x6a, 0x7b, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, + 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x4a, 0x39, 0x39, 0x39, + 0x39, 0x5a, 0x5a, 0x4a, 0x83, 0x83, 0x73, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x73, + 0x62, 0x52, 0x39, 0x31, 0x8b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, + 0x83, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x5a, 0x7b, 0x7b, 0x62, 0x62, 0x52, 0x52, 0x5a, + 0x52, 0x52, 0x73, 0x62, 0x62, 0x83, 0x73, 0x73, 0x7b, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, + 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x62, 0x4a, 0x29, 0x29, 0x29, 0x29, + 0x29, 0x29, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x8b, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x9c, 0x8b, 0x73, 0x7b, 0x83, 0x6a, + 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x9c, 0x8b, 0x7b, 0x7b, 0x7b, 0x6a, 0x7b, + 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, + 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x8b, 0x8b, 0x6a, 0x83, 0x7b, 0x62, 0x39, 0x39, 0x29, 0x6a, 0x62, 0x4a, 0x83, 0x7b, 0x62, 0x73, + 0x62, 0x52, 0x94, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, + 0x5a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x5a, 0x6a, 0x5a, 0x52, 0x7b, 0x6a, 0x5a, + 0x83, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x83, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x8b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x5a, 0x4a, 0x94, 0x83, + 0x6a, 0x8b, 0x83, 0x6a, 0xa4, 0x83, 0x5a, 0x62, 0x62, 0x52, 0x31, 0x31, 0x31, 0x39, 0x39, 0x39, + 0x62, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x62, 0x62, 0x7b, 0x6a, 0x52, 0x73, + 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x6a, 0x7b, 0x6a, 0x6a, 0x73, 0x7b, 0x6a, 0x83, 0x83, + 0x6a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, + 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x73, 0x8b, 0x8b, 0x73, 0x73, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x83, + 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x5a, 0x4a, 0x31, 0x52, 0x52, + 0x4a, 0xa4, 0x8b, 0x73, 0x94, 0x94, 0x73, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, + 0x6a, 0x5a, 0x41, 0x39, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, + 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x5a, 0x73, 0x6a, 0x5a, 0x5a, + 0x5a, 0x52, 0x52, 0x4a, 0x4a, 0x83, 0x73, 0x6a, 0x6a, 0x73, 0x6a, 0x6a, 0x6a, 0x62, 0x6a, 0x73, + 0x62, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x7b, 0x62, + 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x29, 0x31, 0x29, 0x39, 0x31, 0x31, 0x29, + 0x29, 0x18, 0x83, 0x73, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x62, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x73, + 0x73, 0x6a, 0x62, 0x5a, 0x4a, 0x39, 0x7b, 0x73, 0x62, 0x94, 0x8b, 0x73, 0xa4, 0x94, 0x73, 0x83, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, + 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x39, 0x39, 0x31, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, + 0x83, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x94, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x73, + 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0xa4, 0x9c, + 0x83, 0x94, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x9c, 0x7b, 0x62, 0x39, 0x39, 0x31, 0x41, 0x41, 0x39, + 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, + 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, + 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, + 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x6a, 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x8b, 0x8b, 0x73, 0x6a, + 0x6a, 0x52, 0x7b, 0x83, 0x62, 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x6a, 0x5a, 0x4a, 0x5a, 0x4a, + 0x41, 0x62, 0x52, 0x41, 0x73, 0x6a, 0x5a, 0x8b, 0x8b, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, + 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x8b, + 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x83, 0x8b, 0x73, 0x8b, 0x8b, 0x6a, 0x9c, 0x94, 0x7b, 0x9c, 0x83, + 0x73, 0x52, 0x41, 0x39, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x5a, 0x6a, + 0x62, 0x52, 0x5a, 0x5a, 0x52, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x5a, 0x73, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, + 0x52, 0x52, 0x41, 0x4a, 0x4a, 0x41, 0x41, 0x41, 0x39, 0x62, 0x5a, 0x4a, 0x83, 0x83, 0x6a, 0x62, + 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x7b, + 0x62, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x62, 0x52, + 0x94, 0x83, 0x6a, 0x62, 0x62, 0x52, 0x5a, 0x4a, 0x39, 0x5a, 0x52, 0x41, 0x83, 0x73, 0x6a, 0x7b, + 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x73, + 0x5a, 0x9c, 0x8b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, + 0x83, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x39, 0x31, 0x29, 0x83, 0x73, 0x52, 0x73, 0x6a, 0x52, 0x94, + 0x8b, 0x73, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x8b, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x6a, 0x5a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, + 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x73, + 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x8b, 0x83, 0x5a, 0x83, 0x73, + 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x52, 0x62, 0x62, 0x52, 0x31, 0x31, 0x29, + 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x62, 0x6a, 0x83, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, + 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, + 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x8b, 0x8b, 0x6a, 0x6a, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x83, 0x62, 0x62, 0x52, 0x4a, 0x52, 0x41, + 0x31, 0x39, 0x39, 0x39, 0x4a, 0x41, 0x39, 0x4a, 0x41, 0x41, 0x62, 0x5a, 0x4a, 0x73, 0x62, 0x52, + 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x4a, 0x5a, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x52, 0x62, + 0x62, 0x52, 0x62, 0x5a, 0x52, 0x52, 0x4a, 0x41, 0x4a, 0x4a, 0x4a, 0x4a, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x31, 0x31, 0x29, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, + 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, + 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x5a, 0x52, 0x41, 0x6a, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x62, + 0x52, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x52, 0x5a, 0x41, 0x5a, 0x52, 0x52, + 0x4a, 0x4a, 0x39, 0x4a, 0x4a, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x5a, + 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x7b, 0x6a, + 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x52, 0x5a, 0x41, + 0x6a, 0x6a, 0x52, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x62, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x41, + 0x41, 0x39, 0x6a, 0x62, 0x52, 0x83, 0x83, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, + 0x73, 0x73, 0x5a, 0x4a, 0x52, 0x41, 0x31, 0x29, 0x20, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x9c, 0x8b, 0x73, 0x7b, 0x6a, + 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, + 0x73, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x4a, 0x83, + 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x4a, 0x4a, 0x41, 0x94, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x6a, 0x5a, + 0x52, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x41, 0x41, 0x39, + 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, + 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, + 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, 0x6a, 0x5a, 0x94, 0x83, 0x62, 0x94, 0x83, 0x6a, + 0x9c, 0x9c, 0x7b, 0x83, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x6a, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x41, 0x41, + 0x41, 0x52, 0x4a, 0x41, 0x41, 0x4a, 0x39, 0x52, 0x4a, 0x4a, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x5a, 0x52, 0x52, 0x52, 0x4a, 0x73, + 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x4a, 0x4a, 0x41, 0x41, 0x39, 0x39, 0x41, 0x41, 0x39, 0x41, 0x41, + 0x39, 0x41, 0x39, 0x39, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, + 0x6a, 0x5a, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, + 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x5a, 0x4a, 0x39, 0x52, 0x41, 0x39, 0x62, 0x52, + 0x41, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x52, 0x4a, 0x41, 0x4a, 0x41, 0x41, + 0x62, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, + 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, + 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x62, 0x62, 0x52, + 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0xa4, 0x94, 0x73, 0x6a, 0x5a, 0x5a, 0x41, 0x41, 0x39, 0x4a, + 0x41, 0x31, 0x41, 0x41, 0x39, 0x62, 0x52, 0x4a, 0x62, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x6a, 0x62, + 0x52, 0x6a, 0x62, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, + 0x62, 0x5a, 0x4a, 0x29, 0x29, 0x29, 0x8, 0x8, 0x8, 0x8b, 0x7b, 0x62, 0x6a, 0x62, 0x4a, 0x7b, + 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x62, + 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x52, + 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x8b, + 0x7b, 0x62, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x73, + 0x5a, 0x7b, 0x7b, 0x6a, 0x94, 0x83, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x41, 0x39, 0x31, + 0x83, 0x73, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x5a, 0x52, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x83, + 0x62, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x62, 0x6a, 0x83, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x73, 0x62, 0x4a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, + 0x83, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x73, + 0x73, 0x62, 0x62, 0x52, 0x41, 0x83, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x5a, 0x52, 0x4a, 0x62, 0x62, + 0x52, 0xa4, 0x9c, 0x83, 0x8b, 0x8b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, + 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, + 0x73, 0x62, 0x62, 0x62, 0x52, 0x62, 0x62, 0x5a, 0x73, 0x73, 0x5a, 0x8b, 0x8b, 0x73, 0x8b, 0x8b, + 0x73, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, + 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x4a, 0x41, + 0x39, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x4a, 0x4a, 0x41, 0x41, 0x41, 0x39, 0x73, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, + 0x62, 0x52, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x62, 0x52, + 0x62, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x4a, + 0x41, 0x39, 0x62, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, + 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x31, 0x31, 0x29, 0x94, 0x83, 0x62, 0x62, 0x5a, 0x4a, 0x7b, + 0x7b, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x7b, 0x73, + 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x62, 0x5a, + 0x83, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x6a, + 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0xa4, 0x9c, 0x83, 0x6a, 0x5a, 0x39, 0x8b, 0x73, 0x62, 0x8b, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x94, 0x83, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x39, 0x31, 0x29, + 0x9c, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x7b, + 0x62, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x6a, + 0x52, 0x73, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, + 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, + 0x7b, 0x6a, 0x83, 0x8b, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x4a, 0x41, 0x39, 0x83, 0x83, + 0x62, 0x9c, 0x94, 0x73, 0x83, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, + 0x62, 0x5a, 0x52, 0x4a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, + 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x6a, 0x5a, 0x5a, 0x52, 0x4a, 0x73, 0x6a, + 0x5a, 0x7b, 0x83, 0x62, 0x4a, 0x52, 0x41, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x62, + 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x83, 0x6a, + 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x5a, 0x62, 0x4a, + 0x62, 0x62, 0x52, 0x73, 0x73, 0x4a, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x4a, 0x62, + 0x52, 0x4a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x73, 0x7b, 0x83, + 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x52, 0x4a, 0x41, 0x9c, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, + 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x7b, + 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, + 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x62, + 0x5a, 0x4a, 0x9c, 0x8b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, + 0x5a, 0x6a, 0x62, 0x52, 0x9c, 0x83, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x39, 0x31, 0x29, + 0x94, 0x83, 0x6a, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, + 0x62, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x52, 0x73, 0x6a, + 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, + 0x7b, 0x62, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x62, 0x4a, 0x4a, 0x39, 0x31, 0x31, 0x31, 0x83, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, + 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x5a, 0x4a, 0x4a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x83, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x83, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x8b, 0x8b, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, + 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x7b, 0x73, + 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x9c, 0x8b, 0x73, 0x62, 0x5a, 0x4a, 0x62, + 0x52, 0x41, 0x8b, 0x8b, 0x73, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, + 0x7b, 0x83, 0x6a, 0x4a, 0x39, 0x29, 0x62, 0x5a, 0x4a, 0x94, 0x8b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, + 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, + 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x4a, 0x41, 0x41, 0x83, + 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x73, 0x62, + 0x4a, 0x7b, 0x6a, 0x52, 0x94, 0x7b, 0x62, 0x73, 0x7b, 0x52, 0x73, 0x73, 0x62, 0x29, 0x18, 0x10, + 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x6a, 0x62, 0x83, 0x62, 0x62, 0x7b, + 0x6a, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x7b, 0x62, 0x5a, 0x83, 0x73, 0x5a, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, + 0x6a, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x73, 0x6a, 0x73, 0x62, 0x8b, + 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x5a, 0x62, 0x52, 0x4a, 0x4a, 0x39, 0x31, 0x31, 0x29, 0x31, 0x31, + 0x29, 0x8b, 0x8b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x6a, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, + 0x6a, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x94, 0x83, 0x73, 0x7b, 0x83, 0x6a, 0x73, 0x7b, + 0x6a, 0x52, 0x4a, 0x41, 0x8b, 0x73, 0x62, 0x83, 0x83, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x62, 0x52, + 0x94, 0x83, 0x73, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, + 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x52, 0x52, 0x41, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x83, 0x6a, 0x52, 0x73, 0x62, 0x4a, + 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x52, + 0x52, 0x41, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x73, + 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x52, + 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x9c, 0x83, 0x73, 0x62, 0x62, 0x4a, 0x6a, + 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x83, 0x62, + 0x73, 0x7b, 0x6a, 0x5a, 0x4a, 0x41, 0x62, 0x5a, 0x41, 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x5a, 0x8b, 0x73, + 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x8b, 0x73, 0x5a, + 0x5a, 0x5a, 0x52, 0x73, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x52, 0x52, 0x41, 0x94, + 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x73, 0x62, + 0x52, 0x7b, 0x6a, 0x52, 0x9c, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x18, 0x18, 0x18, + 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x7b, + 0x62, 0x62, 0x7b, 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, 0x4a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x6a, 0x73, 0x5a, 0x7b, 0x62, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, + 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x62, 0x6a, 0x52, 0x41, 0x39, 0x29, 0x5a, 0x5a, 0x4a, 0x52, 0x41, + 0x39, 0x8b, 0x8b, 0x6a, 0x7b, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, + 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x73, 0x7b, + 0x6a, 0x4a, 0x4a, 0x41, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x62, 0x5a, 0x4a, + 0x7b, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x4a, 0x41, 0x39, 0x73, 0x73, + 0x5a, 0x7b, 0x83, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, 0x5a, 0x4a, + 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x73, 0x7b, 0x52, 0x6a, 0x6a, 0x62, 0x62, + 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x8b, 0x8b, 0x6a, 0x8b, 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x6a, + 0x62, 0x4a, 0x6a, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x62, 0x62, + 0x52, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x73, + 0x7b, 0x7b, 0x62, 0x62, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x73, 0x62, 0x5a, 0x6a, + 0x5a, 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x41, 0x41, 0x41, 0x8b, 0x73, 0x5a, 0x83, + 0x73, 0x5a, 0xa4, 0x8b, 0x6a, 0xa4, 0x8b, 0x73, 0x9c, 0x83, 0x6a, 0x94, 0x83, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x18, 0x18, 0x18, + 0x73, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, + 0x62, 0x5a, 0x73, 0x62, 0x4a, 0x7b, 0x62, 0x52, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x83, 0x7b, + 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x6a, 0x5a, + 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x73, 0x6a, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x41, 0x41, 0x31, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x52, 0x52, 0x41, 0x8b, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, + 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x7b, + 0x6a, 0x4a, 0x41, 0x39, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, + 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x39, 0x39, 0x31, 0x73, 0x7b, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x52, + 0x8b, 0x83, 0x6a, 0x94, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x62, 0x62, 0x4a, 0x5a, + 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x73, + 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x62, + 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x62, + 0x6a, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x52, 0x4a, 0x39, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x6a, + 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x73, 0x62, + 0x52, 0x83, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x52, 0x8b, 0x7b, 0x62, 0x94, + 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x62, + 0x52, 0xa4, 0x9c, 0x83, 0x8b, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x73, 0x7b, 0x52, 0x18, 0x18, 0x18, + 0x29, 0x18, 0x10, 0x7b, 0x6a, 0x62, 0x9c, 0x94, 0x73, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x5a, 0x7b, + 0x62, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x73, 0x62, + 0x4a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x62, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, + 0x7b, 0x62, 0x62, 0x5a, 0x41, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x39, 0x6a, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x52, 0x83, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x83, 0x83, + 0x6a, 0x41, 0x39, 0x39, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x52, + 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x31, 0x31, 0x31, 0x62, 0x62, + 0x52, 0x83, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x6a, + 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x6a, + 0x62, 0x52, 0x9c, 0x83, 0x73, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x62, 0x52, 0x73, 0x73, + 0x5a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, + 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x62, + 0x5a, 0x41, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, + 0x6a, 0x73, 0x5a, 0x6a, 0x52, 0x4a, 0x39, 0x39, 0x29, 0x4a, 0x4a, 0x41, 0x83, 0x7b, 0x62, 0x7b, + 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x62, 0x5a, 0x52, 0x7b, 0x6a, 0x5a, 0x73, 0x62, + 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x83, 0x83, 0x6a, 0x5a, 0x52, 0x4a, 0x4a, 0x4a, 0x41, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x8b, + 0x73, 0x62, 0x8b, 0x7b, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, + 0x5a, 0x8b, 0x83, 0x62, 0x9c, 0x8b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x29, 0x29, 0x18, + 0x41, 0x41, 0x39, 0x73, 0x6a, 0x5a, 0x83, 0x6a, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, + 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x5a, 0x73, 0x62, 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, + 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x7b, 0x62, + 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x62, 0x52, 0x4a, 0x4a, 0x39, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x5a, 0x62, + 0x4a, 0x6a, 0x6a, 0x5a, 0x5a, 0x5a, 0x4a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, 0x7b, 0x7b, + 0x6a, 0x39, 0x39, 0x39, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x52, + 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x6a, 0x6a, 0x52, 0x6a, + 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x39, 0x39, 0x31, 0x52, 0x4a, + 0x41, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, + 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x5a, 0x4a, 0x6a, + 0x6a, 0x5a, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x73, + 0x5a, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, + 0x62, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x5a, 0x52, 0x41, 0x5a, + 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x4a, 0x39, 0x29, 0x29, 0x29, 0x29, 0x5a, 0x5a, 0x4a, 0x9c, + 0x8b, 0x62, 0x9c, 0x83, 0x6a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x5a, 0x73, 0x5a, + 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x9c, 0x83, 0x6a, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x6a, + 0x83, 0x73, 0x62, 0x52, 0x4a, 0x4a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x6a, 0x52, 0x8b, + 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x73, + 0x5a, 0x7b, 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x31, 0x31, 0x29, 0x8, 0x8, 0x8, 0x6a, 0x6a, 0x5a, + 0x7b, 0x83, 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x94, 0x8b, 0x6a, 0x7b, + 0x6a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x8b, 0x73, + 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x5a, 0x52, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x52, + 0x4a, 0x41, 0x52, 0x5a, 0x41, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x62, 0x4a, 0x4a, 0x41, 0x39, 0x8b, 0x8b, 0x73, 0x6a, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x83, + 0x73, 0x39, 0x39, 0x39, 0x8b, 0x73, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x62, + 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x41, 0x41, 0x39, 0x31, 0x31, 0x31, 0x4a, 0x4a, + 0x41, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, + 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x52, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x62, + 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, + 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x52, + 0x73, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x41, 0x41, 0x31, 0x52, + 0x4a, 0x41, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x73, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x41, 0x39, 0x31, 0x41, 0x41, 0x39, 0x4a, 0x41, 0x41, 0x83, + 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, + 0x52, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x5a, + 0x4a, 0x4a, 0x41, 0x6a, 0x62, 0x52, 0x94, 0x83, 0x62, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, + 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x9c, 0x9c, + 0x7b, 0xa4, 0x8b, 0x73, 0x73, 0x73, 0x5a, 0x31, 0x29, 0x20, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, + 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x5a, 0x52, 0x94, 0x7b, 0x73, 0x83, + 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x62, 0x7b, 0x62, + 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x5a, 0x52, 0x7b, 0x62, 0x6a, 0x83, 0x62, 0x62, 0x73, 0x6a, 0x6a, + 0x7b, 0x7b, 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x6a, 0x62, 0x6a, 0x73, 0x62, 0x52, 0x52, 0x41, 0x6a, + 0x6a, 0x5a, 0x73, 0x73, 0x4a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x62, 0x62, + 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x94, 0x94, 0x73, + 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, + 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x7b, + 0x6a, 0x39, 0x39, 0x31, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x8b, 0x73, 0x6a, 0x7b, 0x6a, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x8b, 0x62, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4a, 0x4a, + 0x41, 0x41, 0x41, 0x39, 0x7b, 0x83, 0x6a, 0x83, 0x6a, 0x6a, 0x6a, 0x62, 0x52, 0x73, 0x5a, 0x4a, + 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x41, 0x39, 0x39, 0x5a, + 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x6a, + 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x73, 0x62, + 0xa4, 0x94, 0x73, 0x94, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x6a, 0x5a, 0x52, 0x39, 0x39, 0x31, 0x83, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x6a, + 0x52, 0x73, 0x7b, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x6a, 0x62, 0x52, 0x41, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x5a, + 0x52, 0x41, 0x52, 0x52, 0x4a, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x7b, + 0x62, 0x94, 0x83, 0x62, 0x83, 0x62, 0x62, 0x94, 0x83, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x62, 0x52, + 0x4a, 0x41, 0x39, 0x94, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x52, 0x83, 0x6a, 0x5a, 0x6a, + 0x5a, 0x4a, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0xa4, 0x8b, + 0x6a, 0x83, 0x8b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, + 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x94, + 0x83, 0x6a, 0x8b, 0x8b, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x5a, 0x7b, 0x62, + 0x62, 0x7b, 0x62, 0x6a, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x6a, 0x73, 0x7b, 0x6a, + 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x6a, 0x7b, 0x73, 0x62, 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, 0x7b, + 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x62, 0x6a, 0x52, 0x5a, 0x5a, + 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x4a, + 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, + 0x6a, 0x39, 0x31, 0x31, 0x6a, 0x62, 0x52, 0x73, 0x5a, 0x4a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x62, 0x62, 0x5a, 0x41, 0x39, 0x39, 0x39, 0x39, 0x31, 0x52, 0x52, + 0x4a, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x5a, + 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x52, 0x39, 0x31, 0x31, 0x41, + 0x41, 0x39, 0x6a, 0x62, 0x52, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, + 0x62, 0x83, 0x73, 0x62, 0x94, 0x83, 0x73, 0x9c, 0x8b, 0x73, 0x9c, 0x8b, 0x73, 0x94, 0x83, 0x6a, + 0x8b, 0x83, 0x73, 0x5a, 0x52, 0x41, 0x41, 0x41, 0x39, 0x52, 0x4a, 0x41, 0x4a, 0x41, 0x39, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x6a, + 0x52, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x62, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x52, 0x41, 0x39, 0x52, 0x5a, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x5a, + 0x5a, 0x4a, 0x7b, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x62, 0x7b, 0x6a, + 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x8b, 0x73, 0x62, 0x73, 0x62, 0x52, 0x4a, 0x41, 0x39, + 0x9c, 0x8b, 0x62, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x62, 0x52, 0x41, 0x6a, + 0x62, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x94, 0x83, 0x62, 0x83, 0x83, + 0x6a, 0x6a, 0x6a, 0x52, 0x5a, 0x4a, 0x39, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x62, + 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x62, + 0x62, 0x7b, 0x5a, 0x52, 0x7b, 0x62, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x7b, 0x6a, 0x62, + 0x7b, 0x62, 0x6a, 0x7b, 0x6a, 0x62, 0x5a, 0x52, 0x41, 0x41, 0x39, 0x39, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, + 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x62, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x52, 0x52, 0x41, + 0x5a, 0x4a, 0x39, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, + 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x6a, + 0x5a, 0x39, 0x41, 0x39, 0x5a, 0x4a, 0x41, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x83, 0x62, 0x5a, + 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x5a, 0x6a, + 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x41, 0x4a, 0x39, 0x4a, 0x41, 0x41, 0x6a, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x62, 0x5a, 0x4a, 0x5a, 0x4a, 0x39, 0x52, 0x4a, 0x39, 0x6a, 0x5a, 0x39, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x41, 0x41, 0x39, 0x31, 0x31, 0x29, 0x29, + 0x29, 0x29, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x41, 0x41, + 0x41, 0x52, 0x52, 0x4a, 0x73, 0x73, 0x4a, 0x4a, 0x41, 0x41, 0x39, 0x39, 0x39, 0x5a, 0x52, 0x41, + 0x39, 0x31, 0x31, 0x41, 0x4a, 0x39, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x4a, 0x4a, 0x39, 0x5a, + 0x4a, 0x41, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, + 0x6a, 0x62, 0x4a, 0x5a, 0x52, 0x41, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x4a, 0x4a, 0x41, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, + 0x6a, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x52, 0x4a, 0x39, 0x4a, 0x4a, 0x41, + 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, + 0x62, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, + 0x5a, 0x62, 0x52, 0x41, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x83, 0x83, 0x62, 0x83, 0x83, 0x62, 0x8b, 0x8b, 0x6a, 0x73, + 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x9c, 0x8b, 0x73, 0x7b, 0x6a, 0x62, 0x73, 0x6a, + 0x5a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x6a, + 0x7b, 0x6a, 0x62, 0x4a, 0x41, 0x39, 0x29, 0x18, 0x10, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, + 0x4a, 0x41, 0x39, 0x62, 0x5a, 0x4a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x5a, 0x4a, + 0x41, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x73, 0x73, 0x5a, 0x41, 0x7b, 0x62, 0x52, 0x83, 0x83, 0x62, + 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x4a, 0x41, 0x41, 0x62, 0x5a, 0x4a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x5a, 0x52, 0x41, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x6a, 0x62, 0x52, 0x62, 0x62, 0x4a, 0x4a, 0x4a, 0x41, 0x62, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x4a, + 0x41, 0x39, 0x6a, 0x62, 0x4a, 0x62, 0x52, 0x41, 0x5a, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x62, 0x62, + 0x52, 0x5a, 0x5a, 0x4a, 0x4a, 0x41, 0x41, 0x39, 0x39, 0x39, 0x41, 0x41, 0x41, 0x6a, 0x6a, 0x52, + 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x41, + 0x41, 0x39, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x62, 0x52, + 0x5a, 0x4a, 0x41, 0x4a, 0x41, 0x39, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, + 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x41, 0x41, 0x39, 0x52, 0x4a, 0x41, 0x8b, 0x83, 0x62, 0x94, 0x83, + 0x62, 0x83, 0x73, 0x62, 0xa4, 0x94, 0x73, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x9c, 0x8b, 0x62, + 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x52, 0x52, 0x4a, 0x73, + 0x73, 0x62, 0x5a, 0x62, 0x52, 0x73, 0x73, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x5a, 0x4a, + 0x31, 0x52, 0x52, 0x4a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, + 0x6a, 0x73, 0x62, 0x4a, 0x41, 0x31, 0x73, 0x62, 0x52, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x83, + 0x83, 0x62, 0x5a, 0x5a, 0x4a, 0x52, 0x52, 0x41, 0x73, 0x6a, 0x52, 0x83, 0x83, 0x62, 0x83, 0x6a, + 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x6a, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, + 0x73, 0x7b, 0x62, 0x8, 0x8, 0x8, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, + 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, + 0x52, 0x52, 0x41, 0x4a, 0x41, 0x39, 0x29, 0x29, 0x29, 0x39, 0x39, 0x31, 0x5a, 0x52, 0x41, 0x5a, + 0x52, 0x41, 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x5a, 0x4a, 0x4a, 0x5a, 0x52, 0x41, 0x4a, 0x41, + 0x41, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x52, 0x4a, 0x31, 0x7b, 0x62, 0x52, + 0x83, 0x6a, 0x52, 0x8b, 0x83, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x5a, 0x5a, 0x52, 0x4a, + 0x4a, 0x41, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, + 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, + 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x62, 0x62, + 0x5a, 0x6a, 0x62, 0x5a, 0x5a, 0x62, 0x52, 0x41, 0x41, 0x41, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, + 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x62, 0x62, 0x4a, 0x5a, 0x52, 0x41, 0x8b, 0x83, 0x6a, 0x39, + 0x39, 0x39, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, + 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x62, 0x5a, 0x41, 0x62, 0x52, 0x4a, 0x52, 0x52, 0x41, + 0x5a, 0x4a, 0x41, 0x41, 0x41, 0x41, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x39, 0x39, 0x31, 0x6a, 0x62, 0x52, 0x94, 0x83, + 0x6a, 0x8b, 0x83, 0x62, 0x83, 0x73, 0x5a, 0x52, 0x4a, 0x39, 0x73, 0x6a, 0x5a, 0x73, 0x62, 0x52, + 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x62, 0x62, 0x52, 0x7b, + 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x62, 0x52, 0x41, 0x5a, 0x62, + 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, + 0x83, 0x83, 0x6a, 0x5a, 0x52, 0x4a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x39, 0x31, 0x29, 0x4a, 0x41, 0x31, 0x5a, 0x52, + 0x41, 0x6a, 0x62, 0x4a, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, + 0x18, 0x18, 0x18, 0x8, 0x8, 0x8, 0x6a, 0x73, 0x52, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x7b, + 0x62, 0x73, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x62, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x39, 0x39, 0x31, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, + 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x5a, + 0x4a, 0x73, 0x62, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x73, 0x5a, 0x4a, 0x62, 0x4a, 0x41, + 0x73, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x4a, 0x4a, 0x41, 0x52, 0x4a, 0x41, 0x6a, + 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x9c, 0x8b, 0x7b, 0x83, 0x83, 0x6a, 0x83, 0x83, + 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x94, 0x83, 0x6a, + 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x83, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, + 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, + 0x52, 0x6a, 0x6a, 0x52, 0x62, 0x62, 0x52, 0x5a, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, + 0x83, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x9c, 0x83, 0x6a, 0x83, + 0x83, 0x6a, 0x39, 0x31, 0x31, 0x94, 0x83, 0x73, 0xa4, 0x9c, 0x83, 0xac, 0x94, 0x7b, 0x6a, 0x6a, + 0x52, 0x8b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x39, 0x39, 0x39, + 0x62, 0x5a, 0x41, 0x52, 0x5a, 0x41, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x31, 0x31, 0x29, 0x83, 0x73, + 0x5a, 0x8b, 0x73, 0x62, 0x62, 0x52, 0x4a, 0x52, 0x52, 0x41, 0x52, 0x4a, 0x39, 0x83, 0x73, 0x5a, + 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x5a, 0x62, 0x52, 0x83, 0x83, 0x6a, 0x9c, + 0x83, 0x6a, 0x9c, 0x83, 0x62, 0x4a, 0x41, 0x41, 0x52, 0x41, 0x39, 0x62, 0x62, 0x52, 0x7b, 0x7b, + 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x7b, 0x6a, + 0x83, 0x73, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x7b, 0x83, 0x62, 0x8b, 0x83, 0x6a, 0x31, 0x31, 0x29, 0x4a, 0x41, 0x41, 0x4a, 0x41, + 0x39, 0x52, 0x52, 0x41, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x52, 0x52, 0x52, 0x4a, 0x5a, 0x52, 0x4a, + 0x41, 0x39, 0x31, 0x41, 0x41, 0x31, 0x62, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x73, 0x73, + 0x5a, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x62, 0x62, 0x52, 0x62, 0x6a, 0x52, 0x52, 0x52, 0x41, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x94, 0x8b, + 0x73, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x62, 0x5a, 0x41, + 0x5a, 0x4a, 0x31, 0x62, 0x52, 0x41, 0x4a, 0x4a, 0x41, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x7b, + 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x94, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x7b, 0x7b, + 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x73, + 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x5a, 0x5a, 0x39, 0x7b, 0x83, 0x73, 0x83, + 0x83, 0x6a, 0x94, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, + 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x5a, 0x6a, 0x62, 0x5a, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x73, 0x6a, + 0x62, 0x52, 0x5a, 0x52, 0x41, 0xa4, 0x83, 0x6a, 0xa4, 0x8b, 0x6a, 0xac, 0x94, 0x7b, 0xa4, 0x83, + 0x5a, 0x9c, 0x83, 0x6a, 0x9c, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, + 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x62, 0x6a, 0x52, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, + 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x41, 0x41, 0x31, 0x41, 0x39, + 0x39, 0x7b, 0x6a, 0x52, 0x31, 0x31, 0x29, 0x4a, 0x4a, 0x39, 0xa4, 0x94, 0x73, 0xa4, 0x83, 0x6a, + 0x9c, 0x8b, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x52, 0x52, 0x41, 0x73, 0x6a, 0x52, 0x9c, + 0x83, 0x62, 0x73, 0x6a, 0x52, 0x18, 0x18, 0x18, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x4a, 0x8, 0x8, 0x8, 0x39, 0x39, 0x29, 0x52, 0x4a, + 0x41, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, + 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x5a, 0x52, 0x4a, 0x73, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, + 0x5a, 0x62, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x4a, 0x4a, 0x39, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, + 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, + 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x52, 0x4a, + 0x4a, 0x31, 0x29, 0x41, 0x39, 0x31, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x8b, + 0x83, 0x73, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x73, 0x94, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x94, 0x8b, 0x73, + 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x5a, 0x52, 0x4a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x8b, + 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, + 0x5a, 0x6a, 0x62, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x5a, 0x52, 0x52, 0x41, 0x5a, 0x62, 0x52, + 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x6a, + 0x6a, 0x52, 0x7b, 0x73, 0x62, 0xa4, 0x8b, 0x6a, 0x8b, 0x7b, 0x62, 0x9c, 0x83, 0x62, 0x94, 0x7b, + 0x62, 0x94, 0x83, 0x62, 0x9c, 0x83, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0xa4, 0x8b, 0x6a, + 0x73, 0x6a, 0x52, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x62, 0x5a, 0x41, 0x7b, 0x7b, 0x62, 0x83, + 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x29, 0x29, + 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x18, 0xa4, 0x8b, 0x73, 0xa4, 0x94, 0x73, 0x83, 0x73, 0x62, + 0x83, 0x83, 0x62, 0x52, 0x52, 0x4a, 0x62, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x62, + 0x5a, 0x52, 0x31, 0x29, 0x20, 0x5a, 0x5a, 0x4a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x7b, + 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x8b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x52, 0x4a, 0x39, 0x41, 0x39, 0x39, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, + 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x83, 0x83, 0x6a, 0x83, 0x8b, 0x6a, 0x52, 0x5a, 0x41, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x6a, + 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x6a, 0x52, 0x39, + 0x39, 0x39, 0x29, 0x4a, 0x41, 0x31, 0x6a, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x6a, + 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, + 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, + 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x83, + 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x73, + 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x52, 0x52, 0x4a, 0x41, 0x41, 0x41, + 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x4a, 0x39, 0x29, 0x52, 0x52, 0x41, 0x5a, + 0x52, 0x41, 0x94, 0x83, 0x6a, 0xa4, 0x83, 0x5a, 0xa4, 0x8b, 0x73, 0x9c, 0x8b, 0x62, 0x8b, 0x7b, + 0x62, 0x94, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x94, 0x83, 0x62, + 0xa4, 0x8b, 0x6a, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x83, + 0x8b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x31, 0x31, + 0x31, 0x29, 0x29, 0x29, 0x31, 0x31, 0x31, 0x5a, 0x52, 0x41, 0x4a, 0x4a, 0x41, 0x52, 0x52, 0x4a, + 0x52, 0x4a, 0x41, 0x4a, 0x4a, 0x39, 0x4a, 0x4a, 0x41, 0x4a, 0x4a, 0x41, 0x62, 0x52, 0x4a, 0x4a, + 0x41, 0x39, 0x18, 0x18, 0x18, 0x41, 0x41, 0x39, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x94, 0x8b, + 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, + 0x83, 0x6a, 0x73, 0x73, 0x62, 0x39, 0x31, 0x31, 0x52, 0x52, 0x41, 0x9c, 0x8b, 0x73, 0x7b, 0x83, + 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x62, 0x62, 0x52, 0x52, 0x52, 0x4a, 0x6a, + 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x62, 0x6a, + 0x52, 0x73, 0x62, 0x52, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, + 0x73, 0x7b, 0x52, 0x73, 0x7b, 0x6a, 0x62, 0x62, 0x5a, 0x52, 0x52, 0x4a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x62, 0x41, 0x31, + 0x73, 0x62, 0x52, 0x39, 0x31, 0x29, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, + 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x83, + 0x6a, 0x94, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x41, 0x41, 0x39, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x73, + 0x62, 0x7b, 0x7b, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x29, 0x29, 0x18, + 0x52, 0x5a, 0x41, 0x73, 0x62, 0x5a, 0x62, 0x5a, 0x4a, 0x4a, 0x41, 0x31, 0x31, 0x31, 0x29, 0x52, + 0x4a, 0x39, 0x8b, 0x8b, 0x73, 0x8b, 0x8b, 0x73, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x83, 0x7b, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x4a, 0x8b, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x62, 0x6a, 0x5a, 0x4a, 0x7b, 0x83, 0x6a, 0x62, + 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x4a, 0x41, 0x39, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x62, 0x52, 0x4a, 0x41, 0x4a, 0x52, 0x41, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x62, 0x5a, 0x4a, 0x4a, 0x4a, 0x41, 0x52, 0x4a, 0x41, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x41, 0x41, 0x39, 0x41, 0x41, 0x41, 0x52, 0x52, 0x41, 0x73, 0x7b, 0x62, 0x7b, 0x7b, + 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, + 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, + 0x73, 0x62, 0x52, 0x4a, 0x39, 0x52, 0x52, 0x41, 0x39, 0x39, 0x29, 0x83, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x7b, 0x62, 0x52, 0x73, 0x62, 0x52, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x8b, 0x73, 0x62, + 0x94, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x5a, 0x5a, 0x39, 0x62, + 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x62, + 0x52, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, + 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x5a, 0x62, 0x52, 0x39, 0x39, 0x31, 0x73, 0x73, 0x5a, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x94, 0x83, 0x6a, + 0x8b, 0x7b, 0x62, 0x4a, 0x41, 0x31, 0x4a, 0x4a, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x7b, + 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x83, + 0x73, 0x8b, 0x8b, 0x73, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, + 0x5a, 0x5a, 0x52, 0x62, 0x5a, 0x41, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x18, 0x18, 0x18, + 0x8, 0x8, 0x8, 0x52, 0x4a, 0x39, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x41, 0x39, 0x29, 0x52, + 0x52, 0x41, 0x9c, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, + 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, + 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0xa4, 0x94, 0x73, 0x94, 0x83, 0x73, 0x52, 0x4a, 0x41, 0x6a, + 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x6a, 0x6a, 0x52, 0x83, 0x7b, + 0x6a, 0x73, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x4a, 0x4a, 0x39, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, + 0x83, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x52, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, + 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x62, 0x5a, 0x52, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, + 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, + 0x6a, 0x52, 0x41, 0x39, 0x31, 0x52, 0x52, 0x41, 0x29, 0x29, 0x18, 0x39, 0x39, 0x29, 0x83, 0x6a, + 0x5a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x94, 0x7b, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, + 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x62, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x7b, + 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x31, 0x31, 0x31, 0x52, 0x52, 0x41, 0x73, 0x7b, 0x62, 0x73, + 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x73, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x62, + 0x7b, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x39, 0x31, 0x29, 0x62, 0x6a, 0x5a, 0x83, 0x83, 0x73, 0x8b, + 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x73, 0x8b, 0x83, + 0x6a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, + 0x41, 0x39, 0x31, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x18, 0x18, 0x18, + 0x29, 0x18, 0x10, 0x7b, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x83, 0x73, 0x6a, 0x62, 0x5a, 0x4a, 0x52, + 0x4a, 0x31, 0x52, 0x4a, 0x41, 0x6a, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, + 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, + 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x52, + 0x4a, 0x41, 0x4a, 0x4a, 0x39, 0x41, 0x39, 0x31, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x6a, 0x6a, + 0x5a, 0x62, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x5a, 0x5a, 0x39, 0x41, 0x41, 0x39, 0x7b, 0x73, 0x62, + 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x4a, 0x4a, 0x41, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, + 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x52, 0x4a, + 0x39, 0x52, 0x52, 0x4a, 0x7b, 0x83, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x7b, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x5a, + 0x52, 0x4a, 0x52, 0x5a, 0x41, 0x62, 0x62, 0x4a, 0x8b, 0x73, 0x62, 0x4a, 0x41, 0x31, 0x8b, 0x73, + 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x94, 0x73, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x52, + 0x83, 0x73, 0x5a, 0x8b, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x7b, 0x62, 0x83, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x5a, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x29, 0x29, 0x18, 0x29, 0x29, 0x29, 0x31, 0x31, 0x31, 0x39, + 0x39, 0x31, 0x41, 0x41, 0x39, 0x5a, 0x5a, 0x4a, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x73, 0x62, + 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x41, 0x41, 0x39, 0x62, 0x7b, 0x62, 0x94, + 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x94, 0x8b, 0x73, 0x8b, 0x83, + 0x73, 0x9c, 0x94, 0x7b, 0x94, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x4a, 0x4a, 0x41, + 0x5a, 0x5a, 0x4a, 0x94, 0x83, 0x73, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x52, 0x52, 0x41, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x73, 0x6a, 0x5a, 0x62, 0x52, + 0x41, 0x41, 0x31, 0x7b, 0x73, 0x4a, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x73, + 0x62, 0x52, 0x62, 0x52, 0x41, 0x94, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x8b, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, + 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x7b, + 0x73, 0x5a, 0x41, 0x41, 0x39, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x62, 0x62, + 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x5a, 0x4a, 0x41, 0x73, 0x6a, 0x5a, + 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x52, 0x4a, 0x41, 0x62, 0x5a, 0x4a, 0x73, + 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x4a, 0x4a, 0x39, 0x39, 0x31, 0x31, 0x5a, 0x5a, 0x4a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x52, + 0x4a, 0x41, 0x7b, 0x7b, 0x6a, 0x8b, 0x8b, 0x6a, 0x8b, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, + 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x4a, + 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x8b, + 0x83, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0x4a, 0x4a, 0x39, 0x41, 0x39, + 0x31, 0x39, 0x39, 0x31, 0x41, 0x39, 0x31, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x5a, 0x4a, + 0x62, 0x62, 0x4a, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, + 0x7b, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x62, 0x4a, 0x39, 0x6a, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x8b, 0x8b, 0x73, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x73, 0x83, 0x83, + 0x6a, 0x8b, 0x83, 0x73, 0x73, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x41, 0x41, 0x39, + 0x83, 0x7b, 0x6a, 0x94, 0x8b, 0x73, 0x94, 0x8b, 0x73, 0x8b, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, 0x94, + 0x8b, 0x73, 0x9c, 0x8b, 0x7b, 0x83, 0x83, 0x62, 0x62, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, + 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x18, 0x18, 0x18, + 0x73, 0x6a, 0x4a, 0x73, 0x73, 0x4a, 0x7b, 0x83, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x7b, + 0x6a, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x7b, 0x6a, + 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x9c, + 0x83, 0x6a, 0x73, 0x62, 0x52, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x4a, 0x41, 0x39, + 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x52, 0x4a, 0x41, 0x73, + 0x73, 0x4a, 0x7b, 0x73, 0x6a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x7b, + 0x62, 0x6a, 0x73, 0x62, 0x5a, 0x5a, 0x52, 0x29, 0x29, 0x18, 0x41, 0x41, 0x39, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x52, 0x4a, 0x39, 0x5a, + 0x52, 0x41, 0x73, 0x73, 0x62, 0xa4, 0x8b, 0x73, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x52, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x62, 0x52, + 0x83, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x83, + 0x83, 0x62, 0x73, 0x73, 0x5a, 0x62, 0x52, 0x41, 0x5a, 0x5a, 0x4a, 0x4a, 0x39, 0x29, 0x7b, 0x7b, + 0x6a, 0x8b, 0x8b, 0x6a, 0x83, 0x8b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, + 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x52, 0x4a, 0x39, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x6a, 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x9c, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x62, + 0x62, 0x52, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, + 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x5a, 0x52, 0x41, + 0x83, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x7b, 0x83, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x83, 0x83, 0x6a, 0x94, 0x94, 0x73, 0x52, 0x4a, 0x41, + 0x5a, 0x5a, 0x39, 0x7b, 0x73, 0x4a, 0x7b, 0x6a, 0x6a, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x83, + 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x8b, 0x73, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, + 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x62, 0x83, + 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x6a, + 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, + 0x52, 0x4a, 0x41, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x4a, 0x41, 0x39, 0x7b, + 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, + 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x52, 0x4a, 0x4a, 0x31, 0x31, 0x31, 0x41, 0x41, 0x39, + 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x41, 0x39, 0x31, 0x73, + 0x73, 0x62, 0x62, 0x6a, 0x5a, 0xa4, 0x8b, 0x6a, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x52, 0x62, 0x52, 0x41, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x52, + 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x83, + 0x83, 0x6a, 0x73, 0x6a, 0x52, 0x62, 0x62, 0x52, 0xa4, 0x9c, 0x83, 0x83, 0x8b, 0x6a, 0x8b, 0x8b, + 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x6a, 0x73, 0x6a, 0x83, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, + 0x8b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0xa4, 0x8b, 0x6a, 0x94, 0x83, 0x73, 0x41, 0x31, 0x20, 0x6a, + 0x62, 0x5a, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x52, 0x52, 0x41, 0x41, 0x41, 0x39, 0x83, 0x73, 0x5a, + 0x9c, 0x83, 0x73, 0x6a, 0x62, 0x52, 0x94, 0x8b, 0x73, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x83, 0x83, + 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x9c, 0x94, 0x7b, 0x6a, 0x6a, 0x52, + 0x31, 0x29, 0x20, 0x7b, 0x73, 0x4a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x62, 0x83, + 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x94, 0x7b, + 0x62, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x52, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x62, + 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x94, + 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, + 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, + 0x52, 0x4a, 0x41, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x6a, 0x7b, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x5a, + 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x5a, 0x83, 0x73, 0x5a, 0x52, 0x4a, 0x41, + 0x52, 0x41, 0x39, 0x4a, 0x4a, 0x39, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x6a, + 0x73, 0x5a, 0xa4, 0x8b, 0x6a, 0x83, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x62, + 0x52, 0x7b, 0x6a, 0x52, 0x62, 0x52, 0x41, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, + 0x83, 0x6a, 0x6a, 0x62, 0x52, 0x62, 0x6a, 0x52, 0x8b, 0x8b, 0x6a, 0x94, 0x94, 0x73, 0x7b, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x52, 0x83, 0x8b, 0x73, 0x7b, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x7b, + 0x6a, 0x52, 0x94, 0x7b, 0x73, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x62, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x8b, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x62, + 0x52, 0x4a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, + 0x62, 0x41, 0x41, 0x39, 0x41, 0x41, 0x39, 0x41, 0x41, 0x41, 0x29, 0x29, 0x29, 0x52, 0x4a, 0x41, + 0x6a, 0x5a, 0x52, 0x94, 0x83, 0x6a, 0xa4, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x7b, 0x7b, 0x62, 0x83, + 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, + 0x62, 0x94, 0x8b, 0x73, 0x94, 0x8b, 0x7b, 0x83, 0x8b, 0x6a, 0x8b, 0x7b, 0x6a, 0x4a, 0x41, 0x31, + 0x52, 0x52, 0x41, 0x62, 0x5a, 0x41, 0x73, 0x73, 0x4a, 0x62, 0x5a, 0x41, 0x7b, 0x73, 0x5a, 0x7b, + 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x8b, 0x73, + 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, + 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x94, + 0x7b, 0x62, 0x52, 0x52, 0x41, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, + 0x6a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x62, + 0x5a, 0x4a, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, + 0x5a, 0x52, 0x4a, 0x5a, 0x52, 0x4a, 0x73, 0x7b, 0x62, 0x52, 0x52, 0x4a, 0x52, 0x41, 0x39, 0x52, + 0x4a, 0x41, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, + 0x5a, 0x94, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x5a, + 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, + 0x83, 0x62, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x8b, 0x8b, 0x73, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, + 0x62, 0x5a, 0x83, 0x7b, 0x62, 0xac, 0x94, 0x7b, 0x7b, 0x62, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x6a, 0x5a, + 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x5a, + 0x52, 0x41, 0x5a, 0x39, 0x29, 0x5a, 0x4a, 0x41, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x39, 0x31, + 0x31, 0x4a, 0x4a, 0x39, 0x4a, 0x4a, 0x41, 0x39, 0x41, 0x39, 0x62, 0x5a, 0x4a, 0x52, 0x4a, 0x41, + 0x39, 0x39, 0x39, 0x6a, 0x5a, 0x4a, 0x9c, 0x8b, 0x73, 0x83, 0x73, 0x62, 0x94, 0x7b, 0x6a, 0xa4, + 0x8b, 0x73, 0x9c, 0x94, 0x7b, 0x9c, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x5a, 0x62, + 0x4a, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x41, 0x31, 0x20, + 0x4a, 0x4a, 0x39, 0x9c, 0x94, 0x73, 0x6a, 0x62, 0x4a, 0x7b, 0x73, 0x4a, 0x6a, 0x5a, 0x4a, 0x7b, + 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, + 0x4a, 0x7b, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, + 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x9c, + 0x83, 0x6a, 0x4a, 0x4a, 0x41, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, + 0x62, 0x62, 0x62, 0x4a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x7b, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x6a, 0x62, 0x62, + 0x5a, 0x4a, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x8b, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, + 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x41, 0x41, 0x39, 0x31, 0x31, 0x31, 0x5a, + 0x4a, 0x39, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, + 0x5a, 0x8b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x62, 0x5a, 0x41, 0x73, 0x62, 0x52, 0x83, 0x73, 0x52, + 0x7b, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x62, 0x4a, 0x83, 0x6a, 0x5a, 0x8b, + 0x83, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x9c, 0x9c, 0x7b, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x94, 0x83, 0x6a, + 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x9c, 0x94, 0x73, 0x83, 0x6a, 0x5a, 0x7b, + 0x62, 0x5a, 0x83, 0x73, 0x62, 0x94, 0x94, 0x73, 0x83, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, + 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x83, + 0x73, 0x62, 0x5a, 0x41, 0x39, 0x62, 0x5a, 0x41, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x62, + 0x4a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x4a, 0x4a, 0x41, 0x62, 0x62, 0x52, + 0x6a, 0x73, 0x62, 0x5a, 0x4a, 0x39, 0x83, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x6a, + 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, + 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x5a, 0x62, 0x4a, 0x73, 0x7b, 0x62, 0x5a, 0x41, 0x39, + 0x94, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x73, 0x4a, 0x62, + 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x6a, + 0x62, 0x52, 0x4a, 0x39, 0x73, 0x6a, 0x52, 0x94, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x7b, 0x7b, 0x62, + 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x94, + 0x83, 0x62, 0x52, 0x52, 0x41, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x62, 0x62, 0x4a, 0x73, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x73, + 0x73, 0x5a, 0x6a, 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x5a, 0x5a, 0x52, 0x41, 0x52, 0x41, 0x31, 0x4a, + 0x41, 0x39, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, 0x6a, + 0x52, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x62, 0x52, 0x62, 0x52, 0x41, 0x83, 0x6a, 0x5a, + 0x7b, 0x6a, 0x52, 0x8b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x52, 0x8b, + 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x6a, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x73, + 0x7b, 0x73, 0x62, 0x7b, 0x62, 0x52, 0x8b, 0x6a, 0x5a, 0x9c, 0x8b, 0x62, 0x83, 0x8b, 0x73, 0x7b, + 0x73, 0x62, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x83, 0x73, 0x5a, 0x4a, 0x39, 0x62, 0x52, + 0x41, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, + 0x83, 0x73, 0x62, 0x83, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x8b, + 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, + 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x83, + 0x83, 0x6a, 0x83, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x83, 0x73, + 0x5a, 0x62, 0x5a, 0x4a, 0x39, 0x39, 0x39, 0x39, 0x31, 0x31, 0x41, 0x41, 0x39, 0x5a, 0x4a, 0x39, + 0x8b, 0x7b, 0x62, 0x94, 0x8b, 0x73, 0x8b, 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x73, + 0x73, 0x4a, 0x5a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, + 0x62, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x39, 0x8b, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x8b, 0x73, 0x62, + 0x7b, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x8b, + 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x52, + 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x4a, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x83, + 0x7b, 0x6a, 0x62, 0x5a, 0x52, 0x41, 0x39, 0x31, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x73, + 0x8b, 0x7b, 0x6a, 0x94, 0x8b, 0x73, 0x9c, 0x94, 0x7b, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, + 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x8b, 0x83, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, + 0x62, 0x8b, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x5a, 0x52, 0x39, + 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x6a, 0x52, 0x83, + 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x73, 0x62, + 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x7b, + 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x94, 0x9c, 0x7b, 0xac, 0x94, 0x7b, 0x62, 0x52, 0x4a, 0x5a, 0x52, + 0x4a, 0x5a, 0x4a, 0x41, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, + 0x94, 0x83, 0x73, 0x8b, 0x8b, 0x73, 0x83, 0x7b, 0x6a, 0x5a, 0x41, 0x39, 0x52, 0x4a, 0x41, 0x73, + 0x5a, 0x4a, 0xa4, 0x8b, 0x73, 0x73, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x8b, 0x83, + 0x6a, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, + 0x62, 0x5a, 0x52, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x4a, 0x83, + 0x73, 0x62, 0x9c, 0x83, 0x62, 0x8b, 0x83, 0x62, 0x83, 0x73, 0x5a, 0x9c, 0x83, 0x62, 0x9c, 0x83, + 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x5a, 0x4a, 0x41, + 0x8b, 0x73, 0x5a, 0x94, 0x8b, 0x6a, 0x9c, 0x94, 0x7b, 0x9c, 0x83, 0x62, 0x94, 0x8b, 0x73, 0x7b, + 0x62, 0x5a, 0x83, 0x7b, 0x5a, 0x7b, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, + 0x5a, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x5a, 0x6a, 0x62, 0x4a, 0x8b, 0x73, 0x62, 0x8b, 0x7b, 0x5a, + 0x83, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x8b, + 0x83, 0x62, 0x52, 0x4a, 0x41, 0x7b, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x6a, 0x52, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x6a, 0x83, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x41, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x7b, + 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x94, 0x94, 0x73, 0x8b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, + 0x94, 0x8b, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x6a, + 0x5a, 0x4a, 0x83, 0x6a, 0x5a, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x73, + 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x52, + 0x73, 0x5a, 0x4a, 0x8b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x62, 0x52, 0x83, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x7b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x73, 0x7b, + 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x6a, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x83, 0x73, 0x6a, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, + 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x9c, 0x7b, 0x6a, 0x73, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x18, 0x18, + 0x18, 0x6a, 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x52, + 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x5a, 0x52, 0x4a, 0x6a, 0x5a, 0x4a, 0x94, + 0x83, 0x73, 0x8b, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x83, + 0x6a, 0x8b, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x73, 0x5a, 0x5a, 0x5a, 0x4a, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x6a, 0x94, 0x8b, 0x7b, 0x5a, + 0x52, 0x41, 0x83, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x83, + 0x62, 0x83, 0x7b, 0x62, 0x9c, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x41, + 0x9c, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x94, + 0x8b, 0x73, 0x8b, 0x73, 0x62, 0x8b, 0x83, 0x62, 0x52, 0x4a, 0x39, 0x6a, 0x5a, 0x4a, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x73, 0x6a, 0x5a, + 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x8b, + 0x7b, 0x62, 0x4a, 0x41, 0x39, 0x7b, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x7b, 0x73, + 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x7b, 0x73, 0x6a, 0x7b, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x7b, + 0x73, 0x62, 0x83, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x73, + 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x9c, 0x94, 0x7b, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, + 0x94, 0x8b, 0x73, 0x73, 0x62, 0x4a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x62, + 0x5a, 0x4a, 0x73, 0x62, 0x4a, 0x94, 0x83, 0x6a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, + 0x5a, 0x73, 0x5a, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, + 0x62, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, + 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x83, 0x8b, 0x73, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, + 0x6a, 0x62, 0x9c, 0x73, 0x5a, 0x83, 0x8b, 0x73, 0x4a, 0x41, 0x39, 0x62, 0x5a, 0x4a, 0x4a, 0x4a, + 0x39, 0x5a, 0x52, 0x39, 0x62, 0x5a, 0x41, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, + 0x73, 0x62, 0x4a, 0x73, 0x6a, 0x52, 0x5a, 0x4a, 0x41, 0x83, 0x73, 0x62, 0xac, 0x94, 0x7b, 0x83, + 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x73, 0x94, 0x83, + 0x73, 0x8b, 0x83, 0x73, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, + 0x83, 0x8b, 0x6a, 0x5a, 0x52, 0x4a, 0x7b, 0x73, 0x5a, 0x9c, 0x8b, 0x73, 0x9c, 0x8b, 0x7b, 0x6a, + 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x8b, 0x83, + 0x6a, 0x9c, 0x83, 0x62, 0x94, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x73, 0x62, 0x5a, 0x4a, 0x41, + 0x94, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x52, 0x94, + 0x8b, 0x73, 0x94, 0x94, 0x73, 0x94, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x6a, 0x5a, 0x39, 0x5a, 0x52, + 0x4a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x52, + 0x62, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, + 0x7b, 0x62, 0x39, 0x39, 0x31, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, + 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x4a, 0x52, 0x52, 0x41, 0x7b, + 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x52, 0x94, 0x8b, 0x73, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x52, + 0x8b, 0x8b, 0x6a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x9c, 0x8b, 0x62, 0x7b, 0x6a, 0x5a, 0x5a, + 0x52, 0x4a, 0x73, 0x73, 0x62, 0x94, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x73, 0x62, + 0x52, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x52, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x5a, + 0x83, 0x6a, 0x5a, 0x62, 0x5a, 0x41, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x8b, + 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x5a, 0x4a, 0x39, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x9c, + 0x7b, 0x6a, 0x8b, 0x8b, 0x7b, 0x5a, 0x52, 0x4a, 0x5a, 0x4a, 0x41, 0x83, 0x7b, 0x5a, 0x8b, 0x8b, + 0x6a, 0x5a, 0x52, 0x41, 0x5a, 0x52, 0x41, 0x8b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, + 0x7b, 0x62, 0x52, 0x52, 0x41, 0x29, 0x5a, 0x41, 0x31, 0xac, 0x94, 0x7b, 0x83, 0x6a, 0x62, 0x9c, + 0x8b, 0x73, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x73, 0x8b, 0x83, 0x6a, 0x94, 0x8b, + 0x73, 0x94, 0x8b, 0x73, 0x94, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x5a, 0x5a, 0x4a, 0x9c, 0x94, 0x7b, 0x7b, 0x7b, 0x62, 0x5a, + 0x5a, 0x52, 0x52, 0x52, 0x41, 0x62, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x9c, 0x83, + 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x39, 0x39, 0x31, 0x31, 0x31, 0x31, + 0x83, 0x7b, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x73, + 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x94, 0x83, 0x6a, 0x41, 0x41, + 0x31, 0x62, 0x5a, 0x41, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x62, 0x5a, 0x4a, + 0x4a, 0x4a, 0x39, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x94, + 0x7b, 0x62, 0x41, 0x39, 0x31, 0x83, 0x83, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x52, 0x7b, 0x6a, + 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x6a, + 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x52, 0x4a, 0x4a, 0x41, 0x73, + 0x6a, 0x5a, 0x73, 0x6a, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x94, 0x8b, 0x6a, 0x83, 0x73, + 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x7b, 0x6a, 0x52, + 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x52, + 0x4a, 0x41, 0x7b, 0x83, 0x62, 0x94, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x73, 0x62, + 0x52, 0x7b, 0x6a, 0x52, 0x94, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x52, 0x52, 0x41, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x5a, 0x8b, + 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x9c, 0x7b, 0x6a, 0x9c, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x94, 0x94, 0x73, 0x94, 0x8b, 0x6a, 0x83, 0x94, + 0x6a, 0xa4, 0x9c, 0x83, 0x62, 0x62, 0x41, 0x73, 0x62, 0x4a, 0x8b, 0x83, 0x5a, 0x83, 0x73, 0x5a, + 0x4a, 0x39, 0x29, 0x5a, 0x39, 0x29, 0x9c, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x83, + 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x8b, + 0x73, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x94, 0x8b, 0x6a, 0x83, 0x7b, 0x5a, + 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x8b, 0x73, 0x5a, 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x73, + 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x7b, 0x6a, + 0x5a, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x5a, 0x5a, 0x4a, 0x39, 0x31, 0x31, 0x39, 0x39, 0x39, + 0x7b, 0x73, 0x4a, 0x9c, 0x94, 0x7b, 0x7b, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x83, + 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x94, 0x8b, 0x73, 0x83, 0x73, + 0x62, 0x73, 0x62, 0x52, 0x5a, 0x52, 0x39, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, + 0x62, 0x62, 0x4a, 0x4a, 0x4a, 0x39, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x4a, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x6a, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x4a, + 0x4a, 0x41, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x83, + 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x83, 0x6a, + 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x52, + 0x4a, 0x41, 0x7b, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, + 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x7b, + 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, + 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x6a, 0x6a, 0x94, 0x6a, 0x6a, 0x73, + 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x94, 0x6a, 0x73, 0x73, 0x5a, 0x83, 0x94, + 0x6a, 0x94, 0x94, 0x73, 0x83, 0x94, 0x6a, 0x7b, 0x62, 0x52, 0x94, 0x83, 0x62, 0x6a, 0x52, 0x39, + 0x5a, 0x41, 0x31, 0x83, 0x6a, 0x5a, 0x9c, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x73, + 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x8b, 0x83, + 0x6a, 0x94, 0x8b, 0x7b, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0xa4, 0x8b, 0x73, 0x83, 0x83, 0x6a, + 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x94, 0x94, 0x73, 0x7b, 0x7b, 0x62, 0x52, 0x52, 0x41, 0x6a, + 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x5a, 0x62, + 0x52, 0x94, 0x8b, 0x73, 0x62, 0x62, 0x52, 0x52, 0x52, 0x4a, 0x6a, 0x6a, 0x5a, 0x39, 0x39, 0x39, + 0x83, 0x6a, 0x52, 0x94, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, + 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x7b, 0x6a, + 0x52, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x5a, 0x52, 0x41, 0x62, 0x6a, 0x52, 0x6a, 0x73, 0x5a, + 0x7b, 0x7b, 0x6a, 0x52, 0x4a, 0x39, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x52, + 0x4a, 0x39, 0x5a, 0x5a, 0x4a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x73, + 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x8b, 0x6a, 0x83, 0x83, 0x6a, + 0x73, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x5a, + 0x52, 0x41, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x73, + 0x6a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x4a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0xa4, 0x83, 0x6a, 0x52, + 0x52, 0x41, 0x83, 0x7b, 0x6a, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x6a, + 0x52, 0x8b, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x62, 0x52, 0x73, + 0x73, 0x5a, 0x62, 0x62, 0x4a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, + 0x6a, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x8b, 0x62, + 0x73, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x5a, + 0x4a, 0x41, 0x62, 0x62, 0x4a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x83, 0x8b, 0x62, 0x6a, 0x62, 0x41, 0x52, 0x41, 0x31, 0x4a, 0x39, 0x29, + 0x7b, 0x6a, 0x52, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x6a, 0x73, 0x62, 0x52, 0x83, + 0x6a, 0x62, 0x8b, 0x73, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x9c, 0x8b, + 0x73, 0x8b, 0x83, 0x73, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0xac, 0x94, 0x7b, 0x8b, 0x83, 0x6a, + 0x8b, 0x83, 0x73, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0xa4, 0x9c, 0x83, 0x4a, 0x52, 0x41, 0x6a, + 0x6a, 0x52, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x5a, 0x5a, 0x4a, 0x7b, 0x73, 0x5a, 0x83, 0x8b, + 0x6a, 0x83, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x62, 0x5a, 0x4a, + 0x5a, 0x52, 0x41, 0x9c, 0x83, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x62, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x83, 0x73, 0x5a, 0x94, 0x8b, 0x6a, 0x83, 0x7b, 0x62, 0x39, 0x39, 0x31, 0x73, 0x73, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x52, 0x52, 0x41, 0x5a, 0x52, 0x39, 0x83, 0x73, 0x5a, 0x41, + 0x41, 0x39, 0x39, 0x39, 0x31, 0x83, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, + 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, + 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, + 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x94, 0x83, 0x62, 0x73, 0x7b, 0x6a, + 0x7b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x4a, + 0x4a, 0x39, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, + 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, + 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, 0x41, 0x6a, + 0x6a, 0x52, 0x62, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x8b, 0x8b, 0x73, 0x8b, 0x8b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x62, + 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x6a, 0x62, + 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x8b, 0x6a, 0x83, 0x7b, 0x5a, 0x52, 0x4a, 0x31, 0x5a, 0x4a, 0x31, + 0x9c, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x73, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x8b, 0x7b, 0x6a, 0x8b, + 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x83, 0x7b, + 0x6a, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x8b, 0x83, 0x6a, + 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x5a, 0x5a, 0x52, 0x6a, + 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x5a, 0x7b, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, + 0x5a, 0x62, 0x5a, 0x4a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0xa4, 0x83, 0x6a, 0x9c, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x6a, + 0x52, 0x8b, 0x7b, 0x6a, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x4a, 0x4a, 0x39, + 0x5a, 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x62, 0x5a, 0x4a, 0x41, 0x39, 0x29, 0x4a, 0x41, 0x31, 0x31, + 0x31, 0x29, 0x39, 0x39, 0x31, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x7b, + 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x73, 0x6a, 0x52, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x73, + 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x94, 0x73, 0x52, 0x83, 0x83, 0x73, + 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x52, + 0x4a, 0x41, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, + 0x8b, 0x7b, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x4a, + 0x4a, 0x31, 0x4a, 0x41, 0x31, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x5a, 0x4a, 0x39, 0x6a, + 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x62, 0x62, + 0x52, 0x62, 0x5a, 0x52, 0x7b, 0x7b, 0x62, 0x8b, 0x8b, 0x6a, 0x62, 0x52, 0x31, 0x8b, 0x7b, 0x62, + 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, + 0x62, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x7b, + 0x5a, 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x52, 0x83, 0x83, 0x62, 0x8b, 0x8b, 0x73, 0x7b, 0x83, 0x6a, + 0x73, 0x7b, 0x6a, 0x94, 0x83, 0x73, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x62, + 0x62, 0x52, 0x73, 0x6a, 0x52, 0x5a, 0x52, 0x41, 0x73, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x52, 0x4a, + 0x39, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x94, 0x8b, 0x73, 0x73, + 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x6a, + 0x52, 0x94, 0x8b, 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x8b, 0x8b, 0x73, 0x83, 0x83, 0x6a, + 0x4a, 0x41, 0x39, 0x6a, 0x62, 0x4a, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x39, 0x39, 0x29, 0x31, + 0x31, 0x29, 0x39, 0x39, 0x31, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x62, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x6a, 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x83, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x5a, 0x52, 0x41, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x5a, 0x52, + 0x41, 0x62, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, + 0x73, 0x7b, 0x62, 0x94, 0x8b, 0x73, 0x8b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, + 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x9c, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, + 0x8b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x41, + 0x39, 0x31, 0x4a, 0x4a, 0x31, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x62, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x5a, 0x41, 0x39, 0x6a, 0x5a, 0x4a, 0x62, + 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x83, 0x83, 0x52, 0x62, 0x5a, 0x39, 0x83, 0x7b, 0x5a, + 0x8b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, + 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x5a, 0x7b, 0x83, 0x6a, 0x83, 0x8b, 0x73, 0x7b, 0x7b, 0x6a, + 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x52, + 0x4a, 0x39, 0x52, 0x4a, 0x4a, 0x5a, 0x5a, 0x39, 0x83, 0x7b, 0x6a, 0x52, 0x41, 0x39, 0x52, 0x52, + 0x41, 0x52, 0x52, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x94, 0x83, 0x62, + 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x52, 0x4a, 0x41, 0x8b, 0x83, 0x6a, 0x9c, + 0x94, 0x7b, 0x8b, 0x83, 0x73, 0x83, 0x8b, 0x6a, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x7b, + 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x94, 0x94, 0x73, 0x83, 0x73, 0x5a, + 0x8b, 0x83, 0x6a, 0x52, 0x4a, 0x31, 0x5a, 0x5a, 0x39, 0x62, 0x5a, 0x41, 0x41, 0x39, 0x31, 0x39, + 0x39, 0x31, 0x39, 0x31, 0x31, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x83, 0x6a, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x62, 0x62, 0x4a, 0x83, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, + 0x6a, 0x6a, 0x52, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, + 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0xa4, 0x8b, 0x73, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x5a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x41, + 0x39, 0x31, 0x62, 0x62, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x62, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x62, + 0x62, 0x52, 0x6a, 0x73, 0x52, 0x73, 0x7b, 0x52, 0x83, 0x6a, 0x62, 0x7b, 0x8b, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x62, 0x83, 0x8b, 0x62, 0x7b, 0x7b, 0x4a, 0x62, 0x52, 0x41, 0xa4, 0x8b, 0x73, + 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x94, 0x8b, 0x73, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, + 0x62, 0x94, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x8b, 0x62, 0x62, 0x5a, 0x5a, 0x9c, 0x83, 0x62, 0x8b, + 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x6a, 0x5a, 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x5a, 0x52, + 0x39, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x62, + 0x94, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x4a, 0x4a, 0x39, 0x41, 0x41, 0x39, 0x9c, + 0x83, 0x73, 0x9c, 0x94, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x83, + 0x62, 0x73, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x9c, 0x83, 0x6a, 0x9c, 0x8b, 0x73, 0x83, 0x73, 0x5a, + 0x8b, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x5a, 0x5a, 0x52, 0x31, 0x31, 0x29, 0x41, 0x41, 0x31, 0x52, + 0x52, 0x41, 0x5a, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x6a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x83, 0x73, 0x5a, + 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x7b, 0x73, 0x6a, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x62, 0x62, 0x4a, 0x73, 0x73, + 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, + 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x94, 0x7b, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x62, + 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x9c, 0x83, 0x73, 0xa4, 0x94, 0x73, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, + 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x52, 0x4a, 0x41, 0x5a, + 0x52, 0x41, 0x4a, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0x62, 0x62, 0x4a, 0x6a, 0x6a, 0x52, 0x6a, + 0x73, 0x5a, 0x62, 0x6a, 0x4a, 0x8b, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x7b, 0x83, 0x62, 0x83, 0x6a, + 0x62, 0x83, 0x7b, 0x62, 0x83, 0x8b, 0x73, 0x7b, 0x73, 0x4a, 0x62, 0x5a, 0x39, 0xa4, 0x94, 0x73, + 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x9c, 0x83, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, + 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x8b, 0x7b, 0x5a, 0x83, + 0x7b, 0x62, 0x9c, 0x8b, 0x73, 0x62, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x62, 0x62, + 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, + 0x94, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x52, 0x52, 0x4a, 0x39, 0x39, 0x31, 0x52, + 0x52, 0x41, 0x62, 0x52, 0x4a, 0x94, 0x83, 0x6a, 0x94, 0x83, 0x62, 0x94, 0x83, 0x6a, 0x94, 0x83, + 0x6a, 0x8b, 0x73, 0x5a, 0x9c, 0x83, 0x62, 0x94, 0x8b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, + 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x4a, + 0x4a, 0x39, 0x39, 0x39, 0x31, 0x6a, 0x62, 0x52, 0x5a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, + 0x83, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, + 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x52, 0x52, 0x41, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x4a, 0x41, 0x31, 0x73, 0x62, 0x52, 0x83, 0x73, 0x52, 0x83, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x5a, + 0x52, 0x41, 0x4a, 0x41, 0x39, 0x94, 0x83, 0x73, 0x9c, 0x83, 0x6a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, + 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, + 0x8b, 0x73, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x41, 0x39, 0x31, 0x4a, 0x4a, 0x39, 0x73, + 0x6a, 0x5a, 0x41, 0x39, 0x29, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x73, + 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x83, 0x62, 0x7b, + 0x83, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x73, + 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x4a, 0x83, 0x7b, 0x62, 0x94, 0x83, 0x6a, + 0x83, 0x73, 0x5a, 0x94, 0x83, 0x73, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, + 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x9c, 0x83, 0x62, 0x83, 0x73, + 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, + 0x83, 0x8b, 0x6a, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x83, + 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x5a, 0x52, 0x41, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x62, 0x5a, + 0x4a, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x6a, + 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x39, 0x39, 0x31, 0x31, + 0x31, 0x31, 0x62, 0x52, 0x41, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x62, 0x5a, 0x4a, 0x5a, 0x4a, + 0x41, 0x5a, 0x4a, 0x41, 0x6a, 0x62, 0x4a, 0x62, 0x52, 0x4a, 0x6a, 0x5a, 0x4a, 0x4a, 0x41, 0x41, + 0x52, 0x5a, 0x41, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x39, 0x39, 0x31, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, + 0x6a, 0x6a, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x8b, 0x6a, + 0x7b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, + 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x5a, 0x52, + 0x41, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x52, 0x4a, 0x39, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, + 0x6a, 0x6a, 0x52, 0x73, 0x62, 0x4a, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x5a, 0xac, 0x94, 0x7b, 0x52, + 0x4a, 0x41, 0x41, 0x41, 0x31, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x62, + 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x31, 0x31, 0x29, 0x31, 0x31, 0x29, 0x73, + 0x6a, 0x52, 0x41, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x94, 0x8b, 0x6a, 0x94, 0x94, + 0x73, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, + 0x52, 0x41, 0x39, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x7b, + 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x52, 0x7b, 0x8b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x83, + 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x52, 0x6a, 0x62, 0x4a, 0x73, 0x62, 0x4a, 0x8b, 0x83, 0x6a, + 0x83, 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x7b, + 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0xa4, 0x94, 0x73, 0x94, 0x83, 0x7b, 0x7b, + 0x83, 0x62, 0x41, 0x39, 0x31, 0x73, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x73, + 0x6a, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x5a, 0x4a, 0x39, 0x31, 0x29, 0x5a, 0x5a, 0x4a, 0x8b, + 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x83, 0x83, + 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x41, 0x41, 0x39, + 0x62, 0x62, 0x52, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, + 0x83, 0x6a, 0x83, 0x83, 0x73, 0x73, 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x31, 0x31, 0x29, 0x5a, 0x5a, + 0x4a, 0x4a, 0x41, 0x39, 0x7b, 0x7b, 0x62, 0x94, 0x8b, 0x73, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x39, 0x39, + 0x31, 0x6a, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x52, 0x41, 0x39, 0x6a, 0x62, 0x4a, 0x52, 0x52, 0x41, + 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x9c, 0x83, 0x62, 0x8b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x41, + 0x39, 0x31, 0x6a, 0x62, 0x52, 0x5a, 0x4a, 0x39, 0x9c, 0x8b, 0x7b, 0x7b, 0x6a, 0x52, 0x83, 0x73, + 0x52, 0x8b, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x52, 0x52, 0x4a, 0x39, 0x6a, 0x62, 0x52, 0x4a, + 0x41, 0x31, 0x52, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x94, 0x94, 0x73, 0x9c, 0x94, 0x73, 0x8b, 0x8b, + 0x6a, 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x31, + 0x7b, 0x62, 0x52, 0x8b, 0x8b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x5a, 0x6a, 0x62, 0x52, 0x6a, + 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x7b, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x6a, 0x73, + 0x52, 0x7b, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x6a, 0x4a, 0x6a, 0x5a, 0x39, 0x94, 0x8b, 0x73, + 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x62, 0x4a, 0x6a, 0x52, 0x52, 0x6a, 0x5a, 0x4a, 0x7b, + 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x73, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x6a, 0x5a, 0x94, 0x7b, 0x5a, + 0x6a, 0x62, 0x4a, 0x5a, 0x52, 0x4a, 0x5a, 0x5a, 0x52, 0x7b, 0x7b, 0x6a, 0x5a, 0x62, 0x52, 0x31, + 0x29, 0x20, 0x4a, 0x4a, 0x4a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, + 0x6a, 0x73, 0x62, 0x5a, 0x4a, 0x41, 0x29, 0x29, 0x29, 0x5a, 0x5a, 0x4a, 0x94, 0x83, 0x62, 0x8b, + 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x9c, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0xa4, 0x8b, 0x73, 0x94, 0x8b, + 0x7b, 0x9c, 0x83, 0x73, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x62, 0x5a, 0x4a, + 0x62, 0x5a, 0x4a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x39, 0x39, 0x39, 0x39, 0x31, + 0x31, 0x4a, 0x41, 0x39, 0x9c, 0x94, 0x73, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x6a, + 0x83, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x73, + 0x73, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x39, 0x39, + 0x31, 0x52, 0x4a, 0x39, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x52, 0x41, 0x39, 0x4a, 0x52, 0x31, + 0x4a, 0x4a, 0x39, 0x62, 0x5a, 0x4a, 0x8b, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x4a, 0x4a, 0x39, 0x73, + 0x73, 0x5a, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x5a, 0x5a, 0x4a, 0x8b, 0x7b, 0x6a, 0x94, 0x73, + 0x52, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, + 0x7b, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, + 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, + 0x52, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x8b, 0x6a, 0x52, 0x41, 0x39, 0x6a, 0x62, 0x4a, + 0x94, 0x8b, 0x6a, 0x8b, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x62, + 0x5a, 0x52, 0x83, 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x52, 0x73, 0x7b, 0x62, 0x6a, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x4a, 0x7b, 0x6a, 0x4a, 0x8b, 0x83, 0x6a, + 0x5a, 0x4a, 0x31, 0x62, 0x52, 0x41, 0x6a, 0x52, 0x4a, 0x7b, 0x62, 0x52, 0x73, 0x62, 0x52, 0x7b, + 0x62, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x52, 0x41, 0x39, 0x5a, 0x52, 0x4a, 0x73, 0x62, + 0x52, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x5a, 0x5a, 0x4a, 0x41, 0x41, 0x39, + 0x5a, 0x52, 0x4a, 0x4a, 0x4a, 0x4a, 0x52, 0x4a, 0x41, 0x4a, 0x41, 0x39, 0x41, 0x39, 0x39, 0x52, + 0x4a, 0x41, 0x5a, 0x62, 0x4a, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x6a, 0x6a, 0x5a, + 0x62, 0x5a, 0x4a, 0x39, 0x41, 0x31, 0x62, 0x62, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, + 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, + 0x6a, 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x52, 0x52, + 0x41, 0x62, 0x5a, 0x41, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, + 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x73, 0x7b, 0x62, 0x73, 0x6a, + 0x5a, 0x31, 0x31, 0x29, 0x62, 0x52, 0x41, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x31, 0x31, 0x29, + 0x39, 0x31, 0x29, 0x4a, 0x41, 0x31, 0x52, 0x4a, 0x39, 0x52, 0x52, 0x41, 0x83, 0x73, 0x5a, 0x8b, + 0x73, 0x62, 0x83, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0xa4, 0x94, + 0x73, 0x8b, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, + 0x7b, 0x6a, 0x52, 0x4a, 0x41, 0x31, 0x62, 0x5a, 0x4a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, + 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x62, + 0x52, 0x7b, 0x7b, 0x5a, 0x8b, 0x83, 0x6a, 0x52, 0x4a, 0x39, 0x52, 0x41, 0x39, 0x7b, 0x83, 0x6a, + 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x5a, 0x7b, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x6a, + 0x62, 0x52, 0x83, 0x83, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, + 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x4a, 0x6a, 0x5a, 0x4a, 0x83, 0x7b, 0x5a, + 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x94, 0x83, 0x73, 0x94, 0x83, 0x73, 0x94, + 0x83, 0x73, 0x8b, 0x7b, 0x6a, 0x5a, 0x4a, 0x39, 0x52, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, + 0x62, 0x52, 0x4a, 0x4a, 0x41, 0x39, 0x4a, 0x4a, 0x39, 0x5a, 0x52, 0x41, 0x52, 0x52, 0x41, 0x5a, + 0x52, 0x41, 0x4a, 0x41, 0x41, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x7b, 0x7b, + 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x62, 0x62, 0x4a, + 0x52, 0x4a, 0x4a, 0x41, 0x41, 0x39, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x5a, 0x52, + 0x4a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, + 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x8b, 0x73, 0x73, 0x6a, + 0x5a, 0x4a, 0x39, 0x29, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x5a, + 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x73, + 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x8b, 0x7b, + 0x5a, 0x41, 0x41, 0x39, 0x39, 0x39, 0x31, 0x6a, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x73, 0x7b, 0x52, + 0x31, 0x29, 0x20, 0x31, 0x31, 0x20, 0x41, 0x41, 0x29, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, + 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, + 0x52, 0x8b, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x4a, + 0x5a, 0x52, 0x41, 0x62, 0x5a, 0x41, 0x52, 0x4a, 0x39, 0x73, 0x62, 0x52, 0x8b, 0x83, 0x6a, 0x8b, + 0x83, 0x73, 0x8b, 0x7b, 0x6a, 0x73, 0x6a, 0x62, 0x6a, 0x62, 0x52, 0x62, 0x52, 0x4a, 0x5a, 0x52, + 0x41, 0x7b, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x4a, 0x41, 0x31, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x62, + 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x7b, + 0x73, 0x6a, 0x83, 0x83, 0x73, 0x7b, 0x73, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x73, 0x62, 0x4a, 0x62, 0x52, 0x41, 0x8b, 0x83, 0x6a, + 0x9c, 0x83, 0x62, 0xa4, 0x8b, 0x6a, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x62, 0x83, 0x7b, 0x62, 0x83, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x4a, 0x39, 0x29, 0x5a, 0x52, 0x41, 0x94, 0x7b, 0x73, 0x83, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x94, 0x83, 0x62, 0x6a, 0x62, 0x5a, 0x7b, 0x7b, 0x6a, + 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x5a, 0x52, 0x4a, 0x52, 0x52, 0x41, 0x5a, 0x52, 0x4a, 0x5a, + 0x52, 0x41, 0x5a, 0x52, 0x41, 0x4a, 0x41, 0x31, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x8b, + 0x73, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x62, 0x5a, 0x4a, + 0x6a, 0x73, 0x62, 0x62, 0x62, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x52, 0x52, 0x4a, 0x73, + 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, + 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, + 0x5a, 0x52, 0x52, 0x41, 0x5a, 0x52, 0x4a, 0x83, 0x83, 0x62, 0x9c, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, + 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, + 0x62, 0x41, 0x39, 0x31, 0x31, 0x31, 0x29, 0x52, 0x4a, 0x39, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, + 0x41, 0x41, 0x31, 0x4a, 0x41, 0x31, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, + 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x7b, + 0x62, 0x52, 0x52, 0x41, 0x52, 0x52, 0x4a, 0x62, 0x5a, 0x52, 0x62, 0x52, 0x41, 0x7b, 0x6a, 0x52, + 0x62, 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x62, 0x5a, 0x41, 0x4a, 0x41, 0x31, 0x73, 0x7b, 0x62, 0x7b, + 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x52, 0x8b, 0x8b, 0x73, 0x39, 0x31, + 0x29, 0x41, 0x39, 0x31, 0x41, 0x39, 0x31, 0x6a, 0x5a, 0x4a, 0x8b, 0x8b, 0x73, 0x73, 0x73, 0x62, + 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x7b, + 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x6a, 0x6a, + 0x5a, 0x7b, 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x6a, 0x5a, 0x39, 0x5a, 0x4a, 0x39, 0x8b, 0x83, 0x6a, + 0x94, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x9c, + 0x83, 0x73, 0x52, 0x4a, 0x39, 0x52, 0x4a, 0x39, 0x83, 0x83, 0x6a, 0x9c, 0x83, 0x73, 0x83, 0x73, + 0x62, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x94, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x62, 0x6a, 0x52, 0x5a, 0x5a, 0x52, 0x5a, 0x52, 0x4a, 0x5a, 0x52, 0x4a, 0x5a, + 0x52, 0x4a, 0x62, 0x5a, 0x52, 0x41, 0x41, 0x31, 0x62, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x83, 0x8b, + 0x73, 0x7b, 0x83, 0x6a, 0x6a, 0x6a, 0x62, 0x7b, 0x83, 0x6a, 0x62, 0x52, 0x4a, 0x73, 0x73, 0x62, + 0x73, 0x7b, 0x62, 0x5a, 0x5a, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, + 0x62, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x6a, 0x62, 0x5a, + 0x52, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x62, 0x52, 0x41, 0x73, 0x73, 0x62, 0x7b, + 0x7b, 0x6a, 0x83, 0x8b, 0x6a, 0x9c, 0x83, 0x73, 0x83, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x52, 0x5a, 0x41, 0x41, 0x41, 0x41, 0x31, 0x31, 0x29, 0x62, 0x5a, 0x41, 0x6a, 0x62, 0x4a, + 0x4a, 0x4a, 0x39, 0x5a, 0x52, 0x41, 0x73, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x52, 0x4a, 0x41, 0x5a, + 0x52, 0x41, 0x5a, 0x52, 0x41, 0x5a, 0x4a, 0x41, 0x41, 0x41, 0x31, 0x39, 0x31, 0x29, 0x39, 0x31, + 0x29, 0x31, 0x31, 0x29, 0x31, 0x31, 0x29, 0x29, 0x29, 0x29, 0x4a, 0x4a, 0x31, 0x39, 0x39, 0x29, + 0x6a, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, + 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x52, 0x52, 0x41, 0x39, 0x39, 0x39, 0x31, 0x31, 0x29, 0x5a, 0x41, 0x39, + 0x7b, 0x6a, 0x52, 0x9c, 0x94, 0x73, 0x7b, 0x6a, 0x5a, 0x4a, 0x4a, 0x39, 0x52, 0x4a, 0x39, 0x8b, + 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x7b, 0x73, 0x8b, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x6a, 0x6a, + 0x52, 0x52, 0x4a, 0x41, 0x5a, 0x4a, 0x41, 0x8b, 0x73, 0x5a, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x52, + 0x83, 0x62, 0x62, 0x8b, 0x6a, 0x5a, 0x73, 0x62, 0x62, 0x73, 0x5a, 0x5a, 0x6a, 0x52, 0x52, 0x73, + 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x62, + 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x6a, 0x5a, 0x4a, 0x62, 0x52, 0x41, 0x83, 0x7b, 0x62, + 0xa4, 0x8b, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x73, + 0x6a, 0x5a, 0x4a, 0x41, 0x31, 0x73, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x9c, 0x83, 0x62, 0x94, 0x7b, + 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x73, 0x7b, 0x6a, + 0x6a, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, + 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x83, + 0x6a, 0x73, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x52, 0x4a, 0x39, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, + 0x94, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x73, + 0x6a, 0x5a, 0x52, 0x5a, 0x41, 0x62, 0x5a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x83, 0x83, 0x6a, + 0x83, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x5a, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x83, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0xa4, 0x83, 0x6a, 0x6a, 0x6a, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x7b, + 0x62, 0x41, 0x41, 0x39, 0x5a, 0x52, 0x4a, 0x6a, 0x73, 0x5a, 0x39, 0x31, 0x29, 0x29, 0x31, 0x29, + 0x29, 0x29, 0x29, 0x39, 0x39, 0x31, 0x94, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, + 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x83, + 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x29, 0x29, 0x29, 0x31, 0x31, 0x29, 0x4a, 0x41, 0x31, + 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, + 0x62, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, + 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x31, 0x31, 0x29, 0x52, 0x52, 0x4a, 0x8b, 0x83, 0x62, + 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x83, 0x83, 0x6a, 0x73, 0x6a, 0x52, 0x83, + 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x73, 0x9c, 0x83, + 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x7b, 0x73, 0x5a, 0x94, 0x7b, 0x6a, + 0x7b, 0x5a, 0x52, 0x73, 0x62, 0x62, 0x62, 0x4a, 0x4a, 0x62, 0x52, 0x52, 0x73, 0x5a, 0x5a, 0x83, + 0x73, 0x6a, 0x7b, 0x6a, 0x6a, 0x7b, 0x6a, 0x6a, 0x73, 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x6a, 0x5a, + 0x5a, 0x94, 0x83, 0x73, 0x83, 0x7b, 0x6a, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x39, 0x83, 0x73, 0x62, + 0x8b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x73, 0x7b, 0x73, 0x5a, 0x52, + 0x4a, 0x39, 0x7b, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x9c, 0x83, 0x62, 0x94, 0x83, 0x5a, 0x94, 0x7b, + 0x62, 0x7b, 0x73, 0x6a, 0x6a, 0x62, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x73, 0x73, 0x7b, 0x62, + 0x6a, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x5a, 0x83, 0x73, 0x5a, 0x7b, + 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x6a, 0x6a, + 0x5a, 0x62, 0x62, 0x4a, 0x52, 0x41, 0x31, 0x52, 0x52, 0x4a, 0x83, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, + 0x73, 0x6a, 0x5a, 0x5a, 0x5a, 0x4a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x7b, + 0x6a, 0x62, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, + 0x52, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, + 0x7b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x8b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x5a, 0x4a, 0x4a, 0x4a, + 0x41, 0x39, 0x7b, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, + 0x62, 0x39, 0x39, 0x39, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x39, 0x39, 0x31, + 0x31, 0x31, 0x29, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x41, 0x39, 0x31, 0x6a, 0x6a, 0x52, + 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x83, 0x7b, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, + 0x52, 0x94, 0x83, 0x6a, 0x52, 0x52, 0x4a, 0x41, 0x39, 0x31, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x52, + 0x73, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x8b, 0x6a, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x73, + 0x6a, 0x52, 0x8b, 0x7b, 0x62, 0x8b, 0x73, 0x73, 0x8b, 0x6a, 0x6a, 0x94, 0x73, 0x62, 0x94, 0x7b, + 0x73, 0x94, 0x73, 0x62, 0x73, 0x62, 0x5a, 0x83, 0x73, 0x5a, 0x6a, 0x52, 0x52, 0x9c, 0x7b, 0x6a, + 0x7b, 0x6a, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x83, + 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x5a, 0x7b, 0x6a, 0x6a, 0x8b, 0x73, + 0x6a, 0xa4, 0x8b, 0x73, 0x83, 0x73, 0x6a, 0x6a, 0x52, 0x4a, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x5a, + 0x7b, 0x6a, 0x52, 0x94, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x73, 0x62, 0x52, 0x52, 0x41, 0x39, 0x6a, + 0x5a, 0x52, 0x83, 0x83, 0x6a, 0x94, 0x7b, 0x62, 0x9c, 0x7b, 0x52, 0x8b, 0x73, 0x62, 0x7b, 0x73, + 0x6a, 0x7b, 0x6a, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x9c, 0x8b, 0x7b, 0x83, 0x7b, 0x73, + 0x6a, 0x62, 0x4a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x83, + 0x6a, 0x52, 0x8b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x5a, 0x41, + 0x39, 0x4a, 0x41, 0x31, 0x4a, 0x52, 0x41, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x62, 0x6a, 0x6a, 0x52, + 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x7b, + 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x4a, 0x8b, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, + 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x83, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x94, 0x8b, 0x73, 0x7b, 0x73, 0x62, 0x39, + 0x39, 0x31, 0x52, 0x52, 0x41, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x5a, 0x5a, + 0x52, 0x41, 0x41, 0x39, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, + 0x52, 0x52, 0x4a, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x73, + 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x41, 0x31, 0x20, 0x73, 0x73, 0x6a, + 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x5a, 0x83, + 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x6a, 0x62, 0x4a, 0x83, 0x6a, 0x52, 0x8b, 0x73, + 0x62, 0x62, 0x5a, 0x4a, 0x41, 0x41, 0x39, 0x5a, 0x52, 0x4a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, + 0x8b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x73, 0x62, 0x52, 0x7b, + 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x8b, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x8b, 0x73, + 0x73, 0x8b, 0x6a, 0x6a, 0x94, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x62, 0x5a, 0x4a, + 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, + 0x5a, 0x5a, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x6a, 0x94, 0x73, 0x62, 0x8b, 0x73, + 0x73, 0x94, 0x83, 0x7b, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x83, 0x6a, 0x5a, + 0x94, 0x73, 0x52, 0x94, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, 0x52, 0x41, 0x39, 0x5a, 0x52, 0x41, 0x7b, + 0x83, 0x6a, 0x94, 0x7b, 0x5a, 0x94, 0x7b, 0x62, 0x8b, 0x7b, 0x5a, 0x7b, 0x6a, 0x62, 0x83, 0x6a, + 0x62, 0x7b, 0x62, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x8b, 0x73, 0x6a, 0x6a, 0x5a, 0x5a, + 0x5a, 0x52, 0x41, 0x5a, 0x52, 0x4a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x94, + 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x9c, 0x8b, 0x73, 0x5a, 0x4a, + 0x39, 0x52, 0x52, 0x4a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, + 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x7b, + 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, + 0x7b, 0x73, 0x5a, 0x73, 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, + 0x6a, 0x62, 0x41, 0x39, 0x31, 0x4a, 0x4a, 0x39, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x41, 0x39, + 0x39, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x52, 0x4a, 0x39, 0x52, 0x5a, 0x41, 0x83, 0x7b, 0x73, 0x7b, 0x7b, 0x6a, 0x7b, 0x73, 0x6a, 0x73, + 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, + 0x62, 0x7b, 0x62, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x73, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, + 0x62, 0x52, 0x41, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x83, 0x6a, 0x5a, 0x83, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0xa4, 0x8b, 0x73, 0x7b, 0x6a, + 0x5a, 0x31, 0x31, 0x29, 0x73, 0x7b, 0x62, 0x41, 0x41, 0x39, 0x8b, 0x8b, 0x6a, 0x83, 0x73, 0x62, + 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x94, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, + 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x8b, 0x6a, 0x6a, 0x94, 0x6a, + 0x6a, 0x83, 0x6a, 0x73, 0x8b, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, + 0x5a, 0x5a, 0x4a, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x7b, + 0x6a, 0x62, 0x83, 0x6a, 0x6a, 0x83, 0x6a, 0x6a, 0x83, 0x6a, 0x6a, 0x8b, 0x73, 0x73, 0x83, 0x62, + 0x62, 0x83, 0x6a, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x5a, 0x4a, 0x39, 0x29, 0x73, 0x62, 0x52, + 0x7b, 0x5a, 0x52, 0x83, 0x73, 0x5a, 0x6a, 0x5a, 0x39, 0x52, 0x41, 0x39, 0x73, 0x73, 0x62, 0x8b, + 0x7b, 0x5a, 0x8b, 0x7b, 0x5a, 0x8b, 0x7b, 0x5a, 0x7b, 0x62, 0x5a, 0x73, 0x62, 0x62, 0x83, 0x6a, + 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x4a, + 0x62, 0x5a, 0x4a, 0x8b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, + 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x94, 0x8b, 0x73, 0x7b, 0x83, 0x6a, 0x52, 0x4a, + 0x41, 0x6a, 0x6a, 0x52, 0x94, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, + 0x5a, 0x5a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x94, 0x83, 0x73, 0x73, 0x62, 0x52, 0x52, + 0x52, 0x41, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x7b, + 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, + 0x73, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, + 0x7b, 0x6a, 0x6a, 0x62, 0x5a, 0x31, 0x31, 0x31, 0x6a, 0x5a, 0x4a, 0x73, 0x7b, 0x52, 0x39, 0x31, + 0x31, 0x7b, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x52, 0x52, 0x4a, 0x4a, 0x4a, 0x41, 0x7b, 0x6a, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, + 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, + 0x62, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x62, 0x62, 0x7b, 0x6a, 0x62, + 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x83, + 0x6a, 0x5a, 0x7b, 0x73, 0x4a, 0x7b, 0x62, 0x52, 0x8b, 0x73, 0x5a, 0x4a, 0x4a, 0x41, 0x52, 0x52, + 0x41, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x62, 0x52, 0x52, 0x4a, 0x41, 0x8b, 0x7b, 0x62, + 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x83, + 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x73, + 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x83, 0x73, 0x6a, + 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, + 0x62, 0x62, 0x83, 0x6a, 0x6a, 0x7b, 0x62, 0x6a, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x7b, 0x62, + 0x62, 0x83, 0x6a, 0x6a, 0x9c, 0x83, 0x73, 0x94, 0x7b, 0x6a, 0x52, 0x39, 0x29, 0x62, 0x4a, 0x39, + 0x73, 0x5a, 0x41, 0x7b, 0x62, 0x52, 0x5a, 0x39, 0x29, 0x7b, 0x73, 0x73, 0x9c, 0x83, 0x6a, 0x94, + 0x7b, 0x6a, 0x9c, 0x83, 0x62, 0x7b, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x73, 0x5a, 0x5a, 0x83, 0x73, + 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x52, 0x52, 0x73, 0x62, 0x52, + 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x62, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x83, + 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x9c, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x52, 0x52, + 0x41, 0x6a, 0x62, 0x4a, 0x9c, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x7b, 0x6a, + 0x5a, 0x5a, 0x4a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x83, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x8b, 0x73, 0x5a, 0x83, 0x6a, + 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, + 0x73, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x94, + 0x83, 0x6a, 0x6a, 0x62, 0x52, 0x52, 0x52, 0x41, 0x39, 0x39, 0x29, 0x41, 0x39, 0x39, 0x41, 0x39, + 0x39, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x7b, 0x6a, 0x5a, 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x7b, + 0x73, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x73, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x6a, + 0x62, 0x7b, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x6a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x62, + 0x7b, 0x62, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x73, + 0x73, 0x62, 0x6a, 0x73, 0x62, 0x62, 0x62, 0x52, 0x5a, 0x5a, 0x4a, 0x41, 0x41, 0x31, 0x6a, 0x6a, + 0x5a, 0x7b, 0x83, 0x6a, 0x94, 0x8b, 0x6a, 0x83, 0x7b, 0x62, 0x62, 0x52, 0x4a, 0x5a, 0x5a, 0x4a, + 0x6a, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x9c, 0x8b, 0x73, 0x8b, 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, + 0x73, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x62, 0x52, + 0x41, 0x73, 0x6a, 0x52, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x73, 0x94, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, + 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x7b, + 0x5a, 0x52, 0x94, 0x73, 0x62, 0x83, 0x62, 0x62, 0x73, 0x5a, 0x5a, 0x8b, 0x6a, 0x6a, 0x83, 0x62, + 0x62, 0x94, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x7b, 0x73, 0x62, 0x5a, 0x4a, 0x41, 0x5a, 0x39, 0x29, + 0x5a, 0x41, 0x31, 0x5a, 0x41, 0x39, 0x73, 0x5a, 0x4a, 0xa4, 0x8b, 0x73, 0x8b, 0x73, 0x73, 0x94, + 0x83, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x6a, 0x6a, 0x73, 0x5a, + 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x6a, 0x52, 0x52, 0x7b, 0x6a, 0x52, + 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x83, 0x73, 0x52, 0x8b, + 0x73, 0x5a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x62, 0x52, + 0x4a, 0x8b, 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x62, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x94, 0x8b, 0x73, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x7b, + 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, + 0x52, 0x6a, 0x5a, 0x52, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, + 0x73, 0x62, 0x52, 0x62, 0x52, 0x41, 0x62, 0x52, 0x4a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x73, 0x73, + 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x41, 0x39, 0x29, 0x31, 0x31, 0x29, 0x39, 0x31, 0x31, 0x5a, 0x5a, + 0x4a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x5a, + 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x62, 0x5a, 0x52, 0x62, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, + 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x7b, 0x6a, 0x62, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, + 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, + 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x62, 0x5a, 0x4a, 0x73, + 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x52, 0x52, 0x41, 0x41, 0x41, 0x39, 0x62, 0x62, 0x5a, 0x73, 0x7b, + 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x94, 0x83, 0x6a, + 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x7b, + 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, + 0x5a, 0x6a, 0x62, 0x4a, 0x62, 0x5a, 0x41, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x62, + 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x83, 0x6a, 0x52, 0x41, 0x39, 0x7b, + 0x5a, 0x52, 0x83, 0x6a, 0x73, 0x83, 0x62, 0x62, 0x7b, 0x62, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x73, + 0x73, 0x94, 0x83, 0x73, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x52, 0x41, 0x31, 0x4a, 0x39, 0x29, + 0x5a, 0x41, 0x31, 0x73, 0x52, 0x4a, 0x8b, 0x8b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x52, 0x83, + 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x6a, 0x5a, + 0x52, 0x7b, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x62, 0x62, 0x83, 0x6a, 0x5a, + 0x8b, 0x73, 0x5a, 0x62, 0x52, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x62, 0x8b, + 0x73, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x62, 0x6a, 0x5a, 0x31, 0x31, + 0x29, 0x7b, 0x6a, 0x5a, 0xa4, 0x83, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x62, 0x62, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x6a, 0x5a, 0x52, 0x7b, 0x6a, 0x52, 0x73, + 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x62, 0x5a, + 0x4a, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x73, 0x5a, 0x52, 0x73, 0x62, 0x52, 0x6a, 0x52, 0x4a, 0x6a, 0x62, 0x52, 0x73, + 0x62, 0x5a, 0x6a, 0x5a, 0x4a, 0x62, 0x4a, 0x39, 0x4a, 0x41, 0x41, 0x39, 0x39, 0x31, 0x7b, 0x7b, + 0x62, 0x62, 0x5a, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x6a, + 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x5a, 0x5a, 0x4a, 0x7b, 0x73, 0x62, 0x7b, + 0x62, 0x62, 0x7b, 0x73, 0x6a, 0x7b, 0x6a, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, + 0x6a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x6a, 0x5a, 0x6a, + 0x62, 0x52, 0x52, 0x4a, 0x41, 0x39, 0x39, 0x31, 0x5a, 0x5a, 0x52, 0x41, 0x41, 0x39, 0x73, 0x7b, + 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x62, + 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x83, + 0x73, 0x62, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x39, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x52, + 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x6a, 0x8b, 0x6a, 0x6a, 0x94, 0x7b, 0x7b, 0x7b, + 0x62, 0x6a, 0x73, 0x52, 0x4a, 0x62, 0x4a, 0x4a, 0x62, 0x4a, 0x4a, 0x83, 0x6a, 0x62, 0x8b, 0x73, + 0x6a, 0x7b, 0x6a, 0x5a, 0x73, 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x52, 0x39, 0x31, 0x83, 0x62, 0x5a, + 0x6a, 0x4a, 0x41, 0x5a, 0x4a, 0x31, 0x8b, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, + 0x62, 0x5a, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x6a, 0x5a, + 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x6a, 0x6a, 0x7b, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x62, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x8b, 0x7b, 0x6a, 0x7b, + 0x7b, 0x62, 0x52, 0x52, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x39, 0x29, 0x29, 0x29, 0x29, 0x29, + 0x29, 0x5a, 0x52, 0x4a, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x62, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x5a, 0x52, 0x41, 0x6a, 0x62, 0x52, 0x73, 0x62, 0x52, 0x6a, + 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x62, 0x5a, + 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, + 0x62, 0x52, 0x5a, 0x41, 0x39, 0x73, 0x6a, 0x62, 0x41, 0x41, 0x39, 0x83, 0x83, 0x6a, 0x7b, 0x7b, + 0x62, 0x62, 0x5a, 0x4a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x7b, 0x6a, + 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x6a, 0x73, 0x62, 0x7b, + 0x6a, 0x62, 0x7b, 0x73, 0x6a, 0x7b, 0x62, 0x62, 0x7b, 0x73, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, + 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x62, 0x39, + 0x39, 0x31, 0x31, 0x29, 0x20, 0x4a, 0x4a, 0x41, 0x73, 0x7b, 0x62, 0x52, 0x52, 0x41, 0x52, 0x4a, + 0x41, 0x8b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, + 0x6a, 0x73, 0x62, 0x62, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x8b, + 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x6a, 0x73, + 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x6a, 0x5a, 0x62, 0x5a, 0x41, 0x7b, 0x6a, 0x52, + 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x6a, 0x7b, 0x5a, 0x52, 0x94, 0x73, 0x62, 0x83, 0x6a, 0x73, 0x94, + 0x7b, 0x7b, 0x94, 0x73, 0x62, 0x5a, 0x41, 0x41, 0x73, 0x52, 0x4a, 0x73, 0x52, 0x4a, 0x8b, 0x73, + 0x73, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x41, 0x39, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, + 0x83, 0x6a, 0x5a, 0x5a, 0x41, 0x39, 0x62, 0x52, 0x41, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x94, + 0x7b, 0x73, 0x8b, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x5a, + 0x52, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x6a, 0x52, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x62, 0x6a, 0x5a, 0x62, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x41, + 0x41, 0x39, 0x52, 0x5a, 0x41, 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x52, 0x5a, 0x41, 0x29, 0x29, + 0x29, 0x4a, 0x4a, 0x41, 0x62, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, + 0x5a, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x5a, 0x52, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, + 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x5a, 0x6a, 0x6a, + 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, + 0x7b, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x6a, + 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x4a, 0x4a, 0x39, 0x5a, 0x52, 0x41, 0x83, 0x83, 0x6a, 0x6a, 0x6a, + 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x73, 0x62, 0x6a, 0x62, 0x52, 0x52, 0x52, 0x41, 0x7b, + 0x73, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x62, 0x62, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, + 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x6a, 0x41, 0x41, 0x39, 0x52, 0x52, 0x4a, 0x7b, 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x62, + 0x52, 0x6a, 0x62, 0x4a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x4a, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, + 0x73, 0x6a, 0x5a, 0x52, 0x4a, 0x41, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x83, + 0x6a, 0x5a, 0x73, 0x62, 0x52, 0x83, 0x6a, 0x52, 0x7b, 0x7b, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x62, + 0x52, 0x7b, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x62, 0x5a, 0x41, + 0x7b, 0x6a, 0x6a, 0x8b, 0x6a, 0x6a, 0x94, 0x6a, 0x6a, 0x8b, 0x73, 0x73, 0x94, 0x7b, 0x7b, 0x9c, + 0x7b, 0x6a, 0xac, 0x94, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, 0x52, 0x52, 0x7b, 0x62, 0x5a, 0x73, 0x5a, + 0x52, 0x73, 0x6a, 0x5a, 0x5a, 0x4a, 0x39, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x62, 0x94, 0x73, 0x52, + 0x83, 0x73, 0x62, 0x73, 0x5a, 0x4a, 0x52, 0x39, 0x31, 0x6a, 0x6a, 0x5a, 0x94, 0x83, 0x6a, 0x9c, + 0x83, 0x73, 0x94, 0x8b, 0x73, 0x8b, 0x73, 0x6a, 0x83, 0x8b, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x62, + 0x5a, 0x8b, 0x83, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, + 0x94, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x52, 0x4a, 0x39, 0x6a, + 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x5a, 0x4a, + 0x39, 0x5a, 0x62, 0x52, 0x5a, 0x5a, 0x52, 0x5a, 0x5a, 0x4a, 0x7b, 0x83, 0x6a, 0x62, 0x52, 0x4a, + 0x52, 0x52, 0x41, 0x62, 0x5a, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x6a, + 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x62, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, + 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x4a, 0x41, 0x39, 0x4a, 0x4a, 0x41, 0x7b, 0x73, 0x62, 0x6a, 0x62, + 0x52, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x62, 0x5a, 0x52, 0x7b, + 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, + 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, + 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x7b, + 0x7b, 0x6a, 0x41, 0x39, 0x31, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x6a, 0x5a, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, + 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, + 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x52, 0x83, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x6a, + 0x5a, 0x52, 0x4a, 0x83, 0x6a, 0x6a, 0x94, 0x83, 0x7b, 0x8b, 0x62, 0x5a, 0x8b, 0x6a, 0x6a, 0x94, + 0x7b, 0x7b, 0xa4, 0x8b, 0x73, 0x8b, 0x7b, 0x73, 0x8b, 0x73, 0x6a, 0x52, 0x39, 0x31, 0x6a, 0x5a, + 0x4a, 0x62, 0x52, 0x4a, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x5a, 0x8b, 0x73, 0x62, 0xa4, 0x83, 0x6a, + 0xa4, 0x83, 0x6a, 0x8b, 0x7b, 0x6a, 0x6a, 0x4a, 0x41, 0x5a, 0x4a, 0x39, 0x83, 0x6a, 0x6a, 0xa4, + 0x8b, 0x73, 0x8b, 0x73, 0x6a, 0x8b, 0x83, 0x73, 0x8b, 0x73, 0x62, 0x94, 0x83, 0x73, 0x7b, 0x6a, + 0x5a, 0x8b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x8b, 0x6a, + 0x83, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x5a, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x62, 0x6a, 0x5a, 0x6a, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x52, 0x52, 0x4a, 0x6a, 0x62, 0x52, 0x4a, 0x4a, 0x41, + 0x5a, 0x52, 0x41, 0x5a, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, + 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x62, 0x62, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, + 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0xa4, + 0x9c, 0x83, 0x52, 0x4a, 0x39, 0x41, 0x41, 0x39, 0x4a, 0x41, 0x39, 0x6a, 0x62, 0x52, 0x73, 0x73, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x73, 0x62, + 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x62, 0x4a, 0x62, + 0x62, 0x5a, 0x73, 0x7b, 0x6a, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, + 0x73, 0x62, 0x5a, 0x7b, 0x5a, 0x52, 0x7b, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x7b, + 0x6a, 0x5a, 0x41, 0x39, 0x39, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, + 0x5a, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x5a, + 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x4a, 0x83, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x83, 0x73, + 0x5a, 0x8b, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x6a, 0x6a, 0x83, 0x73, 0x6a, + 0x8b, 0x73, 0x6a, 0x4a, 0x41, 0x31, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x73, 0x8b, 0x6a, 0x6a, 0x7b, + 0x62, 0x6a, 0x8b, 0x73, 0x73, 0x94, 0x83, 0x7b, 0x94, 0x83, 0x7b, 0x83, 0x6a, 0x62, 0x52, 0x39, + 0x31, 0x7b, 0x62, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x62, 0x4a, 0x8b, 0x7b, 0x62, 0x94, 0x7b, 0x62, + 0xa4, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x5a, 0x4a, 0x52, 0x41, 0x39, 0x5a, 0x4a, 0x39, 0x7b, + 0x73, 0x62, 0x9c, 0x83, 0x73, 0x94, 0x8b, 0x73, 0x94, 0x8b, 0x73, 0x94, 0x8b, 0x73, 0x7b, 0x6a, + 0x52, 0x94, 0x7b, 0x73, 0x94, 0x7b, 0x6a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x83, 0x6a, + 0x8b, 0x7b, 0x6a, 0x41, 0x39, 0x31, 0x4a, 0x4a, 0x41, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x52, 0x52, 0x41, 0x5a, 0x5a, 0x4a, + 0x4a, 0x41, 0x31, 0x83, 0x7b, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x73, + 0x73, 0x4a, 0x7b, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x5a, 0x52, 0x4a, 0x6a, 0x62, 0x52, 0x73, 0x73, + 0x62, 0x62, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x73, 0x6a, + 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x73, 0x73, 0x5a, 0x9c, 0x83, 0x6a, 0x7b, + 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x52, 0x4a, 0x41, 0x5a, 0x5a, 0x4a, 0x5a, 0x5a, 0x39, 0x73, 0x73, + 0x62, 0x73, 0x6a, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, + 0x73, 0x6a, 0x62, 0x7b, 0x83, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x5a, + 0x5a, 0x4a, 0x9c, 0x9c, 0x7b, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, + 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x94, 0x9c, 0x7b, 0x7b, 0x62, 0x62, 0x7b, 0x6a, 0x5a, + 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x6a, 0x83, + 0x6a, 0x62, 0x52, 0x4a, 0x39, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x41, 0x41, 0x41, 0x6a, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x5a, 0x4a, 0x73, 0x62, 0x52, 0x83, + 0x7b, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x7b, 0x6a, 0x6a, 0x73, 0x6a, 0x62, 0x83, 0x73, 0x6a, + 0x94, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x73, 0x62, 0x5a, 0x7b, 0x73, 0x6a, 0x73, + 0x5a, 0x5a, 0x83, 0x73, 0x6a, 0x94, 0x73, 0x62, 0x8b, 0x7b, 0x73, 0x7b, 0x62, 0x52, 0x6a, 0x5a, + 0x4a, 0x83, 0x6a, 0x62, 0x8b, 0x7b, 0x6a, 0x9c, 0x7b, 0x62, 0x9c, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, + 0x7b, 0x62, 0x52, 0x83, 0x83, 0x6a, 0x73, 0x5a, 0x4a, 0x83, 0x73, 0x6a, 0x52, 0x41, 0x39, 0x6a, + 0x5a, 0x52, 0x8b, 0x7b, 0x6a, 0x9c, 0x83, 0x6a, 0x83, 0x7b, 0x73, 0x83, 0x7b, 0x6a, 0x5a, 0x41, + 0x39, 0x73, 0x5a, 0x4a, 0x9c, 0x83, 0x6a, 0x8b, 0x8b, 0x6a, 0xa4, 0x8b, 0x6a, 0x94, 0x7b, 0x62, + 0x5a, 0x52, 0x41, 0x52, 0x4a, 0x41, 0x73, 0x7b, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x62, 0x73, + 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x83, 0x6a, 0x62, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x4a, 0x4a, 0x41, + 0x41, 0x41, 0x39, 0x73, 0x62, 0x4a, 0x7b, 0x73, 0x5a, 0x73, 0x7b, 0x52, 0x73, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x62, 0x7b, + 0x62, 0x6a, 0x73, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x8b, 0x7b, 0x73, 0xa4, 0x8b, 0x73, + 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0xac, 0x94, 0x7b, 0x52, + 0x5a, 0x41, 0x6a, 0x5a, 0x52, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x62, 0x62, + 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x7b, 0x8b, 0x62, 0x62, + 0x52, 0x4a, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x6a, + 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x8b, 0x8b, 0x7b, 0x73, 0x62, 0x62, 0x7b, 0x6a, 0x62, + 0x7b, 0x62, 0x5a, 0x73, 0x62, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x83, + 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x83, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, + 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x5a, 0x52, 0x4a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, + 0x83, 0x6a, 0x62, 0x7b, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x83, + 0x73, 0x62, 0x73, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x8b, 0x73, 0x5a, 0x7b, 0x7b, + 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x5a, 0x94, 0x73, 0x62, + 0x9c, 0x83, 0x73, 0x83, 0x7b, 0x73, 0x62, 0x52, 0x4a, 0x62, 0x52, 0x4a, 0x62, 0x52, 0x41, 0x83, + 0x6a, 0x62, 0x9c, 0x7b, 0x6a, 0x83, 0x6a, 0x6a, 0x94, 0x7b, 0x73, 0x62, 0x4a, 0x41, 0x83, 0x6a, + 0x5a, 0x8b, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x5a, 0x94, 0x73, 0x62, 0x8b, 0x73, 0x62, + 0x83, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x6a, 0x9c, 0x8b, 0x73, 0x7b, 0x6a, 0x5a, 0x6a, + 0x52, 0x39, 0x73, 0x5a, 0x4a, 0x29, 0x18, 0x10, 0x29, 0x18, 0x10, 0x29, 0x18, 0x10, 0x29, 0x18, + 0x10, 0x41, 0x41, 0x29, 0x9c, 0x83, 0x62, 0x94, 0x83, 0x6a, 0x94, 0x7b, 0x6a, 0x62, 0x52, 0x41, + 0x62, 0x5a, 0x52, 0x62, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x62, 0x62, 0x52, 0x7b, 0x7b, 0x62, 0x6a, 0x6a, + 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x52, 0x5a, 0x41, + 0x4a, 0x41, 0x39, 0x52, 0x52, 0x41, 0x8b, 0x7b, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x8b, + 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x6a, 0x6a, 0x5a, 0x7b, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x62, 0x52, + 0x62, 0x62, 0x4a, 0x73, 0x62, 0x5a, 0x6a, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x83, 0x7b, 0x62, 0x5a, + 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x62, 0x62, + 0x4a, 0x6a, 0x6a, 0x52, 0x7b, 0x83, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x6a, 0x62, 0x52, + 0x73, 0x6a, 0x52, 0x6a, 0x6a, 0x52, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x39, 0x39, 0x31, 0x52, + 0x4a, 0x41, 0x6a, 0x62, 0x52, 0x94, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x73, 0x62, 0x73, 0x62, 0x5a, 0x83, 0x73, 0x62, + 0x73, 0x5a, 0x52, 0x6a, 0x5a, 0x52, 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, 0x62, + 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x4a, 0x39, 0x29, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x73, + 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x5a, 0x52, 0x62, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, + 0x7b, 0x6a, 0x52, 0x6a, 0x73, 0x62, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x6a, + 0x6a, 0x52, 0x7b, 0x6a, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, + 0x73, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x73, 0x5a, 0x5a, 0x8b, 0x73, 0x73, + 0x94, 0x83, 0x7b, 0x83, 0x6a, 0x6a, 0x7b, 0x6a, 0x62, 0x6a, 0x52, 0x52, 0x5a, 0x4a, 0x41, 0x73, + 0x62, 0x5a, 0x94, 0x83, 0x7b, 0x8b, 0x73, 0x6a, 0x73, 0x5a, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x6a, + 0x62, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x6a, 0x7b, 0x62, 0x52, 0x83, 0x62, 0x4a, + 0x8b, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x7b, 0x73, + 0x5a, 0x52, 0x5a, 0x41, 0x39, 0x41, 0x31, 0x20, 0x5a, 0x41, 0x31, 0x52, 0x4a, 0x31, 0x4a, 0x41, + 0x31, 0x5a, 0x41, 0x31, 0x52, 0x41, 0x39, 0x5a, 0x41, 0x31, 0x5a, 0x41, 0x39, 0x7b, 0x6a, 0x5a, + 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, + 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, + 0x6a, 0x62, 0x52, 0x62, 0x62, 0x52, 0x62, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x9c, + 0x83, 0x62, 0x5a, 0x5a, 0x5a, 0x52, 0x52, 0x4a, 0x5a, 0x5a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, + 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, + 0x94, 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x94, 0x7b, 0x62, 0x4a, 0x41, 0x39, 0x73, + 0x62, 0x52, 0x7b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x73, + 0x5a, 0x83, 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x41, + 0x31, 0x20, 0x5a, 0x4a, 0x41, 0x7b, 0x6a, 0x5a, 0x94, 0x94, 0x73, 0x94, 0x8b, 0x6a, 0x73, 0x6a, + 0x52, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x4a, 0x41, 0x39, 0x73, 0x73, 0x62, 0x7b, 0x6a, 0x6a, + 0x7b, 0x73, 0x62, 0x6a, 0x5a, 0x52, 0x5a, 0x52, 0x41, 0x6a, 0x5a, 0x52, 0x62, 0x5a, 0x52, 0x39, + 0x39, 0x31, 0x41, 0x31, 0x20, 0x41, 0x41, 0x39, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, + 0x62, 0x73, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x5a, 0x52, 0x4a, 0x73, 0x62, 0x52, + 0x73, 0x7b, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x6a, + 0x5a, 0x52, 0x83, 0x73, 0x52, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x73, 0x8b, 0x7b, 0x6a, 0x83, 0x73, + 0x62, 0x83, 0x6a, 0x62, 0x8b, 0x83, 0x73, 0x83, 0x73, 0x6a, 0x94, 0x73, 0x62, 0xa4, 0x83, 0x6a, + 0x9c, 0x83, 0x73, 0x8b, 0x73, 0x73, 0x7b, 0x62, 0x62, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x6a, 0x73, + 0x62, 0x52, 0x52, 0x4a, 0x39, 0x4a, 0x41, 0x31, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x62, 0x8b, 0x7b, + 0x6a, 0x94, 0x7b, 0x73, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x7b, 0x62, 0x5a, 0x83, 0x6a, 0x5a, + 0x8b, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x94, + 0x7b, 0x73, 0x52, 0x41, 0x31, 0x6a, 0x52, 0x4a, 0x8b, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x73, + 0x5a, 0x62, 0x4a, 0x41, 0x83, 0x73, 0x62, 0x94, 0x7b, 0x6a, 0x83, 0x8b, 0x73, 0x83, 0x7b, 0x62, + 0x62, 0x62, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, 0x7b, + 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x83, 0x6a, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x6a, 0x6a, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x52, + 0x62, 0x62, 0x52, 0x62, 0x52, 0x41, 0x41, 0x39, 0x31, 0x73, 0x6a, 0x5a, 0x7b, 0x7b, 0x6a, 0x7b, + 0x73, 0x73, 0x41, 0x41, 0x31, 0x4a, 0x52, 0x31, 0x7b, 0x73, 0x73, 0x73, 0x73, 0x6a, 0x83, 0x7b, + 0x73, 0x83, 0x83, 0x73, 0x7b, 0x73, 0x6a, 0x62, 0x5a, 0x52, 0x7b, 0x6a, 0x62, 0x94, 0x7b, 0x73, + 0x7b, 0x6a, 0x62, 0x5a, 0x4a, 0x4a, 0x62, 0x52, 0x41, 0x62, 0x4a, 0x41, 0x6a, 0x6a, 0x5a, 0x83, + 0x83, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x4a, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x6a, 0x7b, 0x6a, + 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, + 0x6a, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x4a, 0x52, + 0x52, 0x41, 0x31, 0x29, 0x20, 0x39, 0x39, 0x31, 0x5a, 0x4a, 0x39, 0x62, 0x52, 0x4a, 0x62, 0x5a, + 0x4a, 0x5a, 0x4a, 0x39, 0x31, 0x31, 0x29, 0x29, 0x29, 0x18, 0x41, 0x39, 0x31, 0x73, 0x62, 0x52, + 0x62, 0x52, 0x4a, 0x52, 0x41, 0x39, 0x41, 0x41, 0x39, 0x4a, 0x4a, 0x39, 0x41, 0x41, 0x31, 0x39, + 0x39, 0x39, 0x4a, 0x39, 0x29, 0x5a, 0x5a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x7b, 0x62, 0x73, 0x73, + 0x62, 0x73, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x41, 0x4a, 0x39, + 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x8b, 0x73, 0x62, 0x8b, + 0x7b, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x39, 0x39, 0x94, 0x7b, 0x6a, 0x8b, 0x6a, 0x6a, 0x94, 0x7b, + 0x73, 0x9c, 0x7b, 0x6a, 0x83, 0x6a, 0x6a, 0x73, 0x5a, 0x5a, 0x94, 0x7b, 0x7b, 0x94, 0x7b, 0x7b, + 0x8b, 0x6a, 0x6a, 0x83, 0x6a, 0x73, 0x94, 0x73, 0x62, 0x94, 0x73, 0x62, 0x9c, 0x83, 0x73, 0x83, + 0x6a, 0x6a, 0x52, 0x4a, 0x39, 0x73, 0x62, 0x52, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x94, 0x7b, + 0x73, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x62, 0x52, + 0x83, 0x7b, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x73, 0x83, + 0x73, 0x62, 0x52, 0x39, 0x39, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x73, + 0x6a, 0x73, 0x5a, 0x4a, 0xa4, 0x8b, 0x73, 0x8b, 0x7b, 0x6a, 0x8b, 0x7b, 0x73, 0x94, 0x7b, 0x6a, + 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x73, + 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x6a, 0x73, 0x7b, 0x62, 0x6a, 0x73, + 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x62, 0x52, + 0x6a, 0x5a, 0x4a, 0x4a, 0x4a, 0x41, 0x39, 0x39, 0x31, 0x41, 0x41, 0x39, 0x7b, 0x6a, 0x6a, 0x4a, + 0x4a, 0x31, 0x4a, 0x41, 0x31, 0x4a, 0x41, 0x39, 0x73, 0x62, 0x5a, 0x6a, 0x5a, 0x5a, 0x7b, 0x62, + 0x6a, 0x73, 0x5a, 0x5a, 0x6a, 0x52, 0x52, 0x62, 0x4a, 0x4a, 0x6a, 0x52, 0x52, 0x62, 0x4a, 0x4a, + 0x5a, 0x41, 0x41, 0x4a, 0x39, 0x29, 0x52, 0x39, 0x39, 0x4a, 0x41, 0x39, 0x8b, 0x8b, 0x73, 0x83, + 0x7b, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, + 0x5a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x6a, 0x62, 0x52, 0x52, 0x4a, 0x39, 0x5a, 0x5a, 0x39, + 0x5a, 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x52, 0x4a, + 0x4a, 0x41, 0x31, 0x31, 0x31, 0x5a, 0x52, 0x41, 0x94, 0x7b, 0x6a, 0x94, 0x7b, 0x6a, 0x73, 0x5a, + 0x52, 0x73, 0x62, 0x52, 0x52, 0x39, 0x39, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x6a, 0xa4, 0x94, 0x73, + 0x9c, 0x8b, 0x7b, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x52, 0x73, 0x62, 0x52, 0x5a, 0x52, 0x41, 0x62, + 0x5a, 0x4a, 0x52, 0x41, 0x39, 0x62, 0x6a, 0x5a, 0x62, 0x62, 0x5a, 0x62, 0x62, 0x52, 0x73, 0x7b, + 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, + 0x62, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, 0x83, + 0x7b, 0x6a, 0x62, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x4a, 0x41, 0x39, 0x62, 0x4a, 0x4a, 0x73, 0x5a, + 0x5a, 0x73, 0x52, 0x4a, 0x5a, 0x41, 0x41, 0x73, 0x5a, 0x5a, 0x9c, 0x73, 0x5a, 0x83, 0x62, 0x62, + 0x73, 0x52, 0x4a, 0x73, 0x52, 0x4a, 0x73, 0x5a, 0x5a, 0x73, 0x5a, 0x5a, 0x73, 0x52, 0x4a, 0x6a, + 0x52, 0x52, 0x62, 0x41, 0x31, 0x62, 0x52, 0x4a, 0x5a, 0x4a, 0x39, 0x7b, 0x62, 0x52, 0x83, 0x6a, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x6a, 0x62, + 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x6a, 0x6a, 0x4a, + 0x31, 0x29, 0x83, 0x7b, 0x6a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, 0x5a, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, + 0x6a, 0x7b, 0x5a, 0x52, 0xa4, 0x8b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x9c, 0x83, 0x6a, + 0x7b, 0x7b, 0x6a, 0x6a, 0x6a, 0x52, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x62, + 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x6a, 0x73, + 0x5a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x6a, 0x62, 0x52, + 0x73, 0x62, 0x52, 0x7b, 0x62, 0x5a, 0x52, 0x52, 0x41, 0x5a, 0x41, 0x41, 0x39, 0x39, 0x31, 0x39, + 0x31, 0x29, 0x41, 0x39, 0x31, 0x41, 0x39, 0x29, 0x31, 0x29, 0x20, 0x5a, 0x41, 0x41, 0x62, 0x41, + 0x31, 0x62, 0x4a, 0x4a, 0x5a, 0x4a, 0x4a, 0x62, 0x52, 0x52, 0x7b, 0x6a, 0x5a, 0x7b, 0x62, 0x62, + 0x62, 0x52, 0x52, 0x41, 0x39, 0x39, 0x6a, 0x5a, 0x4a, 0x62, 0x62, 0x52, 0x9c, 0x9c, 0x7b, 0x8b, + 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x83, 0x62, 0x7b, 0x7b, 0x5a, 0x7b, 0x73, + 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x5a, 0x52, 0x41, + 0x5a, 0x52, 0x41, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x4a, 0x62, 0x5a, 0x52, 0x52, 0x52, 0x41, 0x31, + 0x31, 0x29, 0x4a, 0x4a, 0x39, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x94, 0x7b, 0x6a, 0x52, 0x41, 0x31, 0x7b, 0x6a, 0x5a, 0x9c, 0x94, 0x7b, 0xa4, 0x9c, 0x83, + 0x8b, 0x7b, 0x73, 0x7b, 0x6a, 0x62, 0x8b, 0x83, 0x73, 0xa4, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x7b, + 0x6a, 0x5a, 0x52, 0x52, 0x4a, 0x6a, 0x62, 0x5a, 0x6a, 0x6a, 0x5a, 0x62, 0x62, 0x52, 0x7b, 0x7b, + 0x6a, 0x7b, 0x83, 0x6a, 0x7b, 0x7b, 0x6a, 0x62, 0x7b, 0x62, 0x73, 0x7b, 0x6a, 0x7b, 0x7b, 0x6a, + 0x4a, 0x4a, 0x4a, 0x6a, 0x73, 0x5a, 0x94, 0x8b, 0x73, 0x8b, 0x8b, 0x73, 0x83, 0x7b, 0x6a, 0x6a, + 0x6a, 0x5a, 0x62, 0x5a, 0x4a, 0x73, 0x6a, 0x52, 0x6a, 0x62, 0x52, 0x5a, 0x4a, 0x39, 0x5a, 0x4a, + 0x41, 0x6a, 0x52, 0x52, 0x62, 0x4a, 0x4a, 0x73, 0x5a, 0x5a, 0x7b, 0x5a, 0x52, 0x6a, 0x4a, 0x41, + 0x5a, 0x41, 0x41, 0x6a, 0x52, 0x52, 0x73, 0x52, 0x4a, 0x83, 0x6a, 0x73, 0x83, 0x62, 0x62, 0x73, + 0x62, 0x5a, 0x5a, 0x41, 0x39, 0x5a, 0x41, 0x41, 0x6a, 0x5a, 0x52, 0x83, 0x6a, 0x5a, 0x7b, 0x62, + 0x5a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x73, 0x62, + 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x8b, 0x83, 0x6a, 0x6a, 0x5a, 0x4a, 0x6a, + 0x52, 0x4a, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x94, 0x7b, 0x73, 0x9c, 0x7b, + 0x6a, 0x6a, 0x52, 0x4a, 0x94, 0x83, 0x73, 0x83, 0x83, 0x73, 0x73, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, + 0x9c, 0x83, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x7b, 0x62, 0x73, + 0x73, 0x62, 0x6a, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x73, 0x7b, 0x52, 0x73, 0x7b, 0x6a, 0x7b, 0x73, + 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, + 0x7b, 0x62, 0x5a, 0x94, 0x94, 0x73, 0x8b, 0x83, 0x6a, 0x8b, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x8b, + 0x8b, 0x73, 0x94, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x8b, 0x83, 0x7b, 0x8b, 0x8b, 0x7b, 0x8b, 0x83, + 0x7b, 0x7b, 0x73, 0x73, 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x6a, 0x7b, 0x6a, 0x5a, + 0x73, 0x6a, 0x5a, 0x62, 0x52, 0x41, 0x4a, 0x41, 0x39, 0x62, 0x5a, 0x52, 0x83, 0x83, 0x6a, 0x83, + 0x83, 0x6a, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x7b, + 0x62, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x4a, 0x62, 0x5a, 0x52, 0x73, 0x6a, 0x5a, + 0x5a, 0x5a, 0x4a, 0x62, 0x5a, 0x52, 0x73, 0x73, 0x5a, 0x62, 0x62, 0x52, 0x39, 0x39, 0x31, 0x73, + 0x62, 0x52, 0x73, 0x5a, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x8b, 0x73, 0x5a, 0x39, 0x31, 0x29, 0x5a, 0x4a, 0x41, 0x94, 0x83, 0x7b, 0x7b, 0x73, 0x73, + 0x73, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x6a, 0x62, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, + 0x83, 0x73, 0x6a, 0x5a, 0x4a, 0x39, 0x39, 0x31, 0x62, 0x62, 0x5a, 0x6a, 0x62, 0x5a, 0x7b, 0x7b, + 0x6a, 0x7b, 0x83, 0x6a, 0x73, 0x7b, 0x6a, 0x73, 0x73, 0x62, 0x7b, 0x7b, 0x6a, 0x7b, 0x83, 0x6a, + 0x52, 0x52, 0x4a, 0x83, 0x83, 0x6a, 0x9c, 0x9c, 0x7b, 0x83, 0x7b, 0x6a, 0x62, 0x62, 0x4a, 0x5a, + 0x5a, 0x52, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x83, 0x62, 0x5a, 0x52, 0x41, 0x4a, 0x52, + 0x31, 0x73, 0x62, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x62, 0x7b, 0x5a, 0x52, 0x62, 0x4a, 0x4a, + 0x62, 0x52, 0x52, 0x62, 0x4a, 0x4a, 0x73, 0x52, 0x4a, 0x83, 0x62, 0x62, 0x83, 0x6a, 0x5a, 0x6a, + 0x4a, 0x41, 0x5a, 0x41, 0x41, 0x83, 0x73, 0x62, 0x62, 0x4a, 0x39, 0x8b, 0x7b, 0x6a, 0x73, 0x5a, + 0x52, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x6a, + 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x62, 0x52, 0x39, 0x31, 0xa4, + 0x9c, 0x83, 0x94, 0x7b, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x83, 0x6a, + 0x62, 0x5a, 0x39, 0x29, 0x94, 0x83, 0x7b, 0x83, 0x7b, 0x73, 0x73, 0x73, 0x5a, 0x83, 0x73, 0x62, + 0x83, 0x7b, 0x6a, 0xa4, 0x8b, 0x73, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x7b, 0x7b, 0x6a, 0x73, + 0x73, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x73, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x62, + 0x94, 0x8b, 0x73, 0x8b, 0x83, 0x73, 0x73, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x6a, + 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, + 0x5a, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x6a, + 0x7b, 0x73, 0x6a, 0x83, 0x83, 0x73, 0x7b, 0x6a, 0x5a, 0x6a, 0x5a, 0x4a, 0x83, 0x73, 0x62, 0x7b, + 0x83, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x83, 0x7b, + 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x6a, + 0x7b, 0x7b, 0x62, 0x4a, 0x41, 0x39, 0x4a, 0x4a, 0x39, 0x4a, 0x41, 0x41, 0x62, 0x5a, 0x4a, 0x8b, + 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x6a, 0x6a, 0x52, 0x83, 0x73, 0x62, 0x7b, 0x73, + 0x62, 0x7b, 0x6a, 0x52, 0x41, 0x31, 0x20, 0x62, 0x5a, 0x52, 0x8b, 0x8b, 0x73, 0x7b, 0x73, 0x6a, + 0x62, 0x5a, 0x52, 0x6a, 0x5a, 0x52, 0x62, 0x5a, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x9c, + 0x94, 0x7b, 0x83, 0x7b, 0x73, 0x4a, 0x41, 0x39, 0x5a, 0x5a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, + 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x62, 0x73, 0x7b, 0x62, 0x73, 0x7b, 0x62, 0x7b, 0x7b, 0x6a, + 0x6a, 0x6a, 0x5a, 0x8b, 0x7b, 0x6a, 0x7b, 0x6a, 0x62, 0x6a, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x7b, + 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x4a, 0x31, 0x29, 0x5a, 0x41, 0x41, 0x8b, 0x7b, + 0x73, 0x8b, 0x73, 0x6a, 0x9c, 0x9c, 0x7b, 0xa4, 0x9c, 0x83, 0xa4, 0x9c, 0x83, 0x9c, 0x94, 0x7b, + 0x9c, 0x8b, 0x7b, 0x83, 0x73, 0x73, 0x9c, 0x83, 0x73, 0x9c, 0x83, 0x73, 0x8b, 0x73, 0x6a, 0x7b, + 0x6a, 0x62, 0x73, 0x62, 0x5a, 0x83, 0x6a, 0x62, 0x73, 0x5a, 0x52, 0x62, 0x4a, 0x4a, 0x62, 0x4a, + 0x41, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x73, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x6a, + 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x8b, 0x7b, 0x6a, 0x52, 0x39, 0x31, 0x7b, 0x62, 0x5a, 0xa4, + 0x8b, 0x73, 0x8b, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x6a, 0x52, + 0x4a, 0x5a, 0x41, 0x41, 0x8b, 0x8b, 0x7b, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x6a, + 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x62, 0x62, 0x62, 0x52, 0x6a, 0x73, 0x5a, 0x6a, + 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, + 0x62, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, 0x8b, 0x8b, 0x73, + 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, + 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x73, 0x62, + 0x62, 0x62, 0x52, 0x83, 0x7b, 0x6a, 0x94, 0x8b, 0x73, 0x94, 0x83, 0x6a, 0x73, 0x62, 0x52, 0x7b, + 0x7b, 0x62, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x8b, 0x6a, 0x8b, 0x7b, + 0x6a, 0x83, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x8b, 0x6a, 0x83, 0x83, 0x6a, + 0x73, 0x73, 0x5a, 0x6a, 0x62, 0x52, 0x4a, 0x41, 0x39, 0x5a, 0x52, 0x41, 0x8b, 0x7b, 0x5a, 0x7b, + 0x73, 0x62, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x62, 0x7b, 0x7b, 0x62, 0x8b, 0x83, 0x73, 0x83, 0x83, + 0x6a, 0x83, 0x73, 0x5a, 0x4a, 0x39, 0x29, 0x8b, 0x7b, 0x73, 0xa4, 0x94, 0x73, 0x7b, 0x7b, 0x73, + 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x6a, 0x7b, 0x6a, 0x62, 0x73, 0x6a, 0x62, 0x7b, + 0x73, 0x6a, 0x8b, 0x83, 0x73, 0x73, 0x73, 0x5a, 0x52, 0x4a, 0x4a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x62, 0x62, 0x52, 0x6a, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x83, 0x7b, 0x6a, + 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x8b, 0x8b, 0x73, 0x83, + 0x83, 0x6a, 0x7b, 0x73, 0x62, 0x52, 0x39, 0x39, 0x5a, 0x52, 0x4a, 0xa4, 0x9c, 0x83, 0x9c, 0x83, + 0x73, 0x83, 0x7b, 0x6a, 0x83, 0x6a, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x73, 0x83, 0x73, 0x73, + 0x83, 0x73, 0x6a, 0x9c, 0x83, 0x73, 0x94, 0x7b, 0x7b, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x73, + 0x62, 0x5a, 0x8b, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, 0x94, 0x7b, 0x73, 0x73, 0x52, 0x4a, 0x62, 0x4a, + 0x41, 0x7b, 0x6a, 0x5a, 0x94, 0x7b, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x73, 0x62, + 0x8b, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x94, 0x83, 0x6a, 0x52, 0x39, 0x29, 0x9c, 0x8b, 0x7b, 0x94, + 0x83, 0x7b, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x73, 0x5a, + 0x52, 0x52, 0x39, 0x31, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, + 0x7b, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x94, 0x83, 0x62, 0x62, 0x6a, 0x5a, 0x5a, 0x62, 0x4a, 0x6a, + 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x73, 0x73, 0x62, 0x73, 0x6a, + 0x5a, 0x73, 0x73, 0x62, 0x6a, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x94, 0x8b, 0x7b, 0x83, 0x7b, 0x62, + 0x73, 0x6a, 0x62, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x7b, + 0x73, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, + 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x62, + 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x9c, 0x9c, 0x7b, 0x94, 0x83, 0x6a, 0x83, 0x6a, 0x5a, 0x6a, + 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, 0x62, 0x83, 0x83, 0x6a, 0x8b, 0x83, 0x6a, 0x8b, 0x83, 0x6a, + 0x73, 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x52, 0x52, 0x41, 0x8b, 0x73, 0x5a, 0x7b, 0x7b, 0x6a, 0x83, + 0x83, 0x62, 0x7b, 0x7b, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x8b, 0x8b, + 0x6a, 0x8b, 0x7b, 0x62, 0x52, 0x41, 0x39, 0x8b, 0x83, 0x7b, 0x8b, 0x83, 0x7b, 0x7b, 0x73, 0x6a, + 0x73, 0x6a, 0x6a, 0x7b, 0x73, 0x6a, 0x7b, 0x73, 0x6a, 0x73, 0x6a, 0x62, 0x6a, 0x6a, 0x62, 0x73, + 0x62, 0x5a, 0x7b, 0x73, 0x6a, 0x94, 0x8b, 0x7b, 0x73, 0x6a, 0x5a, 0x5a, 0x5a, 0x52, 0x6a, 0x62, + 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x6a, 0x5a, 0x6a, 0x62, 0x52, 0x73, 0x6a, 0x5a, + 0x83, 0x8b, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x6a, 0x83, 0x83, 0x73, 0x94, 0x8b, 0x73, 0x83, + 0x83, 0x73, 0x6a, 0x62, 0x52, 0x4a, 0x31, 0x29, 0x8b, 0x8b, 0x7b, 0xa4, 0x9c, 0x83, 0x83, 0x6a, + 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, + 0x94, 0x7b, 0x7b, 0x9c, 0x8b, 0x7b, 0x7b, 0x6a, 0x5a, 0x62, 0x52, 0x52, 0x7b, 0x6a, 0x5a, 0x83, + 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x8b, 0x73, 0x62, 0x62, 0x4a, + 0x41, 0x5a, 0x41, 0x31, 0x83, 0x6a, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x6a, 0x94, 0x7b, 0x6a, + 0x83, 0x7b, 0x6a, 0x8b, 0x73, 0x62, 0x6a, 0x52, 0x4a, 0x4a, 0x31, 0x29, 0xa4, 0x83, 0x6a, 0x8b, + 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, + 0x52, 0x52, 0x39, 0x29, 0x83, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, + 0x73, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x6a, 0x6a, 0x52, 0x62, 0x5a, 0x41, 0x6a, + 0x62, 0x4a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, + 0x52, 0x7b, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x7b, 0x6a, 0x52, 0x94, 0x83, 0x6a, 0x83, 0x7b, 0x5a, + 0x73, 0x6a, 0x52, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, + 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x6a, 0x6a, + 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0x8b, 0x7b, 0x62, + 0x7b, 0x62, 0x52, 0x7b, 0x6a, 0x52, 0xa4, 0x94, 0x73, 0x94, 0x7b, 0x5a, 0x73, 0x62, 0x4a, 0x62, + 0x52, 0x41, 0x73, 0x62, 0x4a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x5a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, + 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x83, 0x7b, 0x5a, + 0x7b, 0x73, 0x4a, 0x73, 0x6a, 0x52, 0x83, 0x6a, 0x52, 0x94, 0x73, 0x52, 0x7b, 0x73, 0x4a, 0x73, + 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x5a, 0x6a, 0x5a, 0x4a, 0x8b, 0x7b, + 0x5a, 0x8b, 0x73, 0x4a, 0x4a, 0x39, 0x29, 0x83, 0x73, 0x62, 0x8b, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x62, 0x52, 0x6a, + 0x5a, 0x4a, 0x83, 0x6a, 0x52, 0x94, 0x83, 0x6a, 0x73, 0x5a, 0x4a, 0x5a, 0x52, 0x41, 0x62, 0x62, + 0x4a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x6a, 0x5a, 0x4a, 0x73, 0x62, 0x52, + 0x83, 0x7b, 0x5a, 0x83, 0x7b, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x8b, 0x83, 0x62, 0x83, + 0x73, 0x5a, 0x62, 0x5a, 0x4a, 0x52, 0x31, 0x29, 0x8b, 0x83, 0x62, 0xac, 0x94, 0x7b, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, + 0x94, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x7b, 0x62, 0x52, 0x6a, 0x52, 0x39, 0x7b, 0x62, 0x5a, 0x83, + 0x62, 0x4a, 0x83, 0x73, 0x62, 0x8b, 0x6a, 0x5a, 0x8b, 0x73, 0x62, 0x8b, 0x6a, 0x5a, 0x5a, 0x41, + 0x31, 0x52, 0x39, 0x29, 0x7b, 0x5a, 0x52, 0x83, 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x94, 0x7b, 0x62, + 0x94, 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x52, 0x31, 0x29, 0x7b, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x73, + 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x5a, 0x73, 0x6a, + 0x5a, 0x52, 0x41, 0x31, 0x7b, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x9c, 0x83, 0x5a, 0x62, 0x52, 0x41, 0x73, + 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, 0x52, 0x73, 0x6a, + 0x52, 0x6a, 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, 0x6a, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x52, + 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x62, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, + 0x73, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, 0x73, + 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, + 0x8b, 0x7b, 0x62, 0x83, 0x6a, 0x52, 0x94, 0x83, 0x62, 0x62, 0x4a, 0x39, 0x7b, 0x6a, 0x52, 0x62, + 0x4a, 0x39, 0x52, 0x41, 0x31, 0x73, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x83, 0x73, + 0x5a, 0x83, 0x73, 0x5a, 0x83, 0x7b, 0x5a, 0x8b, 0x7b, 0x62, 0x94, 0x8b, 0x6a, 0x83, 0x7b, 0x62, + 0x6a, 0x62, 0x4a, 0x8b, 0x73, 0x5a, 0x94, 0x7b, 0x52, 0x73, 0x6a, 0x52, 0x83, 0x73, 0x5a, 0x83, + 0x7b, 0x62, 0x83, 0x7b, 0x5a, 0x83, 0x7b, 0x62, 0x73, 0x6a, 0x52, 0x62, 0x5a, 0x4a, 0x73, 0x6a, + 0x4a, 0x7b, 0x62, 0x52, 0x41, 0x31, 0x20, 0x83, 0x73, 0x62, 0x83, 0x7b, 0x6a, 0x83, 0x7b, 0x6a, + 0x83, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x6a, 0x62, 0x5a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x7b, + 0x62, 0x52, 0x8b, 0x7b, 0x62, 0x94, 0x83, 0x62, 0x9c, 0x8b, 0x73, 0x62, 0x52, 0x4a, 0x6a, 0x62, + 0x4a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x62, 0x5a, 0x4a, 0x6a, 0x62, 0x4a, 0x7b, 0x6a, 0x5a, + 0x8b, 0x83, 0x62, 0x94, 0x83, 0x6a, 0x8b, 0x8b, 0x6a, 0x7b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x73, + 0x62, 0x4a, 0x52, 0x4a, 0x39, 0x83, 0x83, 0x6a, 0xa4, 0x83, 0x6a, 0x8b, 0x73, 0x62, 0x8b, 0x7b, + 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x6a, 0x62, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x5a, 0x8b, 0x6a, 0x5a, + 0x8b, 0x83, 0x6a, 0x62, 0x52, 0x4a, 0x5a, 0x4a, 0x39, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x83, + 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x6a, 0x5a, 0x6a, 0x4a, + 0x41, 0x52, 0x39, 0x29, 0x5a, 0x39, 0x29, 0x73, 0x5a, 0x52, 0x83, 0x6a, 0x5a, 0x8b, 0x73, 0x62, + 0x9c, 0x7b, 0x62, 0x4a, 0x31, 0x29, 0x4a, 0x31, 0x29, 0x9c, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x73, + 0x73, 0x5a, 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, + 0x5a, 0x52, 0x41, 0x31, 0x7b, 0x62, 0x52, 0xa4, 0x83, 0x6a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, + 0x6a, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x8b, 0x7b, 0x62, 0x9c, 0x83, 0x5a, 0x6a, + 0x62, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x6a, 0x5a, 0x4a, 0x73, 0x5a, + 0x4a, 0x7b, 0x62, 0x52, 0x62, 0x52, 0x31, 0x5a, 0x41, 0x39, 0x83, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, + 0x8b, 0x83, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, + 0x73, 0x4a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, 0x83, 0x7b, 0x62, 0x8b, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x94, 0x73, 0x62, + 0x8b, 0x7b, 0x5a, 0x83, 0x6a, 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x7b, 0x62, 0x52, 0x6a, + 0x52, 0x4a, 0x62, 0x4a, 0x39, 0x62, 0x4a, 0x39, 0x73, 0x5a, 0x4a, 0x83, 0x7b, 0x62, 0x8b, 0x83, + 0x6a, 0x94, 0x83, 0x62, 0x8b, 0x83, 0x62, 0x8b, 0x83, 0x62, 0x83, 0x7b, 0x5a, 0x5a, 0x52, 0x41, + 0x8b, 0x73, 0x4a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, + 0x73, 0x5a, 0x7b, 0x73, 0x62, 0x7b, 0x7b, 0x5a, 0x62, 0x5a, 0x41, 0x5a, 0x4a, 0x39, 0x52, 0x52, + 0x41, 0x73, 0x62, 0x41, 0x41, 0x39, 0x31, 0x83, 0x73, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x7b, 0x6a, + 0x73, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x7b, + 0x6a, 0x62, 0x8b, 0x7b, 0x62, 0x7b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x94, 0x83, 0x62, 0x5a, 0x4a, + 0x41, 0x62, 0x52, 0x41, 0x62, 0x5a, 0x41, 0x6a, 0x5a, 0x4a, 0x62, 0x62, 0x4a, 0x8b, 0x7b, 0x62, + 0x9c, 0x8b, 0x62, 0x94, 0x8b, 0x73, 0x8b, 0x83, 0x6a, 0x7b, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x6a, + 0x62, 0x4a, 0x83, 0x6a, 0x62, 0xa4, 0x83, 0x6a, 0x8b, 0x73, 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, + 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x9c, 0x73, 0x5a, + 0x83, 0x7b, 0x62, 0x5a, 0x52, 0x41, 0x83, 0x6a, 0x5a, 0x7b, 0x62, 0x52, 0x7b, 0x73, 0x62, 0x83, + 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x7b, 0x73, 0x62, 0x83, 0x6a, 0x62, 0x94, 0x73, + 0x52, 0x62, 0x4a, 0x39, 0x5a, 0x39, 0x29, 0x5a, 0x41, 0x31, 0x83, 0x62, 0x4a, 0x94, 0x7b, 0x62, + 0x62, 0x41, 0x31, 0x4a, 0x31, 0x29, 0x73, 0x52, 0x4a, 0x94, 0x7b, 0x62, 0x6a, 0x6a, 0x5a, 0x73, + 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x73, 0x5a, 0x7b, 0x6a, 0x5a, 0x73, 0x62, + 0x52, 0x52, 0x41, 0x31, 0x6a, 0x5a, 0x4a, 0x9c, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x6a, 0x73, 0x5a, + 0x73, 0x6a, 0x5a, 0x6a, 0x73, 0x5a, 0x73, 0x73, 0x5a, 0x83, 0x73, 0x62, 0x9c, 0x7b, 0x62, 0x5a, + 0x52, 0x41, 0x62, 0x5a, 0x41, 0x6a, 0x5a, 0x52, 0x62, 0x5a, 0x41, 0x6a, 0x5a, 0x4a, 0x8b, 0x73, + 0x5a, 0x83, 0x6a, 0x52, 0x8b, 0x6a, 0x5a, 0x6a, 0x4a, 0x41, 0x7b, 0x62, 0x52, 0x94, 0x73, 0x52, + 0x7b, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x8b, 0x83, 0x6a, 0x94, 0x83, 0x62, 0x8b, 0x7b, 0x6a, 0x8b, + 0x83, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x73, 0x73, 0x5a, 0x7b, 0x73, + 0x5a, 0x8b, 0x83, 0x6a, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, + 0x6a, 0x52, 0x4a, 0x73, 0x62, 0x4a, 0x8b, 0x83, 0x6a, 0x6a, 0x4a, 0x39, 0x62, 0x4a, 0x39, 0x73, + 0x5a, 0x4a, 0x6a, 0x5a, 0x4a, 0x6a, 0x52, 0x39, 0x62, 0x4a, 0x39, 0x52, 0x41, 0x31, 0x73, 0x5a, + 0x41, 0x8b, 0x83, 0x6a, 0x83, 0x73, 0x5a, 0x6a, 0x5a, 0x4a, 0x83, 0x6a, 0x4a, 0x83, 0x73, 0x52, + 0x8b, 0x6a, 0x4a, 0x6a, 0x73, 0x5a, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x62, 0x8b, + 0x7b, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x83, 0x73, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x62, + 0x52, 0x8b, 0x73, 0x4a, 0x5a, 0x4a, 0x39, 0x8b, 0x7b, 0x6a, 0x7b, 0x73, 0x62, 0x8b, 0x7b, 0x62, + 0x73, 0x62, 0x52, 0x62, 0x62, 0x52, 0x62, 0x5a, 0x52, 0x73, 0x6a, 0x62, 0x7b, 0x6a, 0x5a, 0x8b, + 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x73, 0x62, 0x52, 0x7b, 0x62, 0x52, 0x83, 0x7b, 0x62, 0x8b, 0x73, + 0x62, 0x5a, 0x4a, 0x39, 0x73, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x6a, 0x62, 0x52, 0x83, 0x7b, 0x5a, + 0x8b, 0x83, 0x62, 0x7b, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x62, 0x62, 0x4a, 0x62, 0x5a, 0x4a, 0x83, + 0x83, 0x6a, 0xa4, 0x83, 0x6a, 0xa4, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x6a, 0x83, 0x73, + 0x62, 0x83, 0x6a, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x8b, 0x83, 0x6a, 0x83, 0x6a, 0x62, + 0x52, 0x41, 0x31, 0x7b, 0x62, 0x52, 0x8b, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, + 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x8b, 0x73, + 0x62, 0x8b, 0x6a, 0x5a, 0x52, 0x39, 0x31, 0x52, 0x39, 0x31, 0x62, 0x4a, 0x39, 0x8b, 0x73, 0x5a, + 0x52, 0x39, 0x29, 0x52, 0x39, 0x31, 0x94, 0x7b, 0x62, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x7b, + 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x5a, 0x73, 0x6a, 0x52, 0x7b, 0x62, 0x5a, 0x73, 0x62, + 0x4a, 0x5a, 0x41, 0x31, 0x52, 0x41, 0x31, 0x9c, 0x7b, 0x52, 0x7b, 0x73, 0x62, 0x7b, 0x73, 0x5a, + 0x73, 0x73, 0x5a, 0x73, 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x83, 0x73, 0x5a, 0x7b, 0x73, 0x5a, 0x7b, + 0x6a, 0x5a, 0x7b, 0x73, 0x5a, 0x5a, 0x4a, 0x39, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x52, 0x7b, 0x6a, + 0x52, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x6a, 0x52, 0x39, 0x5a, 0x39, 0x29, 0x94, 0x83, 0x6a, + 0x8b, 0x73, 0x62, 0x7b, 0x7b, 0x62, 0x7b, 0x62, 0x52, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x8b, + 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x83, 0x62, 0x83, 0x7b, 0x62, 0x8b, 0x7b, 0x62, 0x8b, 0x7b, + 0x62, 0x83, 0x7b, 0x62, 0x73, 0x62, 0x52, 0x83, 0x73, 0x5a, 0x7b, 0x62, 0x52, 0x6a, 0x5a, 0x4a, + 0x5a, 0x52, 0x41, 0x7b, 0x6a, 0x52, 0x5a, 0x4a, 0x31, 0x62, 0x41, 0x31, 0x73, 0x5a, 0x4a, 0x62, + 0x4a, 0x39, 0x7b, 0x6a, 0x52, 0x8b, 0x6a, 0x5a, 0x5a, 0x41, 0x39, 0x52, 0x41, 0x31, 0x6a, 0x4a, + 0x41, 0x73, 0x5a, 0x4a, 0x73, 0x5a, 0x41, 0x52, 0x4a, 0x31, 0x83, 0x6a, 0x5a, 0x94, 0x73, 0x52, + 0x6a, 0x6a, 0x5a, 0x6a, 0x6a, 0x52, 0x83, 0x62, 0x62, 0x7b, 0x6a, 0x62, 0x8b, 0x73, 0x5a, 0x8b, + 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x7b, 0x6a, 0x5a, 0x7b, 0x7b, 0x62, 0x7b, 0x83, 0x62, 0x9c, 0x83, + 0x5a, 0x94, 0x7b, 0x5a, 0x5a, 0x52, 0x41, 0x8b, 0x83, 0x73, 0x7b, 0x6a, 0x5a, 0x7b, 0x6a, 0x62, + 0x73, 0x6a, 0x5a, 0x6a, 0x62, 0x5a, 0x73, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x73, 0x6a, 0x62, 0x7b, + 0x73, 0x5a, 0x83, 0x6a, 0x5a, 0x83, 0x73, 0x62, 0x83, 0x73, 0x62, 0x83, 0x6a, 0x5a, 0x8b, 0x73, + 0x5a, 0x73, 0x5a, 0x4a, 0x62, 0x4a, 0x31, 0x62, 0x5a, 0x4a, 0x7b, 0x6a, 0x52, 0x7b, 0x6a, 0x5a, + 0x73, 0x6a, 0x52, 0x73, 0x62, 0x52, 0x73, 0x62, 0x4a, 0x73, 0x62, 0x52, 0x73, 0x6a, 0x52, 0x9c, + 0x7b, 0x6a, 0xa4, 0x83, 0x6a, 0x83, 0x73, 0x6a, 0x8b, 0x7b, 0x62, 0x83, 0x7b, 0x6a, 0x8b, 0x73, + 0x6a, 0x83, 0x7b, 0x6a, 0x83, 0x73, 0x62, 0x94, 0x73, 0x62, 0x73, 0x6a, 0x5a, 0x5a, 0x4a, 0x39, + 0x5a, 0x41, 0x39, 0x6a, 0x52, 0x4a, 0x8b, 0x73, 0x5a, 0x8b, 0x73, 0x5a, 0x94, 0x73, 0x62, 0x8b, + 0x73, 0x62, 0x94, 0x73, 0x62, 0x94, 0x7b, 0x62, 0x8b, 0x73, 0x62, 0x8b, 0x73, 0x5a, 0x94, 0x7b, + 0x6a, 0x94, 0x7b, 0x62, 0x62, 0x4a, 0x39, 0x52, 0x39, 0x31, 0x52, 0x39, 0x31, 0x6a, 0x4a, 0x41 +}; diff --git a/thirdparty/carve-1.4.0/examples/carve_texture.h b/thirdparty/carve-1.4.0/examples/carve_texture.h new file mode 100644 index 00000000..40332990 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/carve_texture.h @@ -0,0 +1,3074 @@ +const unsigned char carve_texture[] = { + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, + 0x60, 0x74, 0xa2, 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0x8b, 0x9a, + 0xbb, 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0xc5, 0xcc, 0xdd, 0x8b, + 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, + 0xc5, 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, + 0xa2, 0x8b, 0x9a, 0xbb, 0xb7, 0xc0, 0xd5, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, + 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0x8b, 0x9a, 0xbb, 0x6e, + 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, + 0xbb, 0xa8, 0xb3, 0xcc, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, + 0xa8, 0xb3, 0xcc, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0x8b, 0x9a, 0xbb, 0xb7, 0xc0, + 0xd5, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xa8, 0xb3, 0xcc, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, + 0x9a, 0xa6, 0xc4, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, + 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xe2, 0xe6, + 0xee, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xa8, 0xb3, 0xcc, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0x9a, 0xa6, 0xc4, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xc5, + 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xe2, 0xe6, 0xee, + 0xff, 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x9a, 0xa6, 0xc4, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x9a, 0xa6, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, + 0xbb, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe6, 0xee, 0x8b, + 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0xd4, 0xd9, 0xe6, 0xf1, 0xf2, + 0xf7, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x8d, + 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xe2, 0xe6, 0xee, 0xc5, + 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x9a, 0xa6, 0xc4, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xc5, 0xcc, 0xdd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xe2, 0xe6, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xd4, 0xd9, + 0xe6, 0xff, 0xff, 0xff, 0x60, 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, + 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x9a, 0xa6, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x6e, 0x80, 0xaa, 0xc5, + 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xf1, + 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, + 0xff, 0xe2, 0xe6, 0xee, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x6e, 0x80, + 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, + 0x74, 0xa2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe6, 0xee, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, + 0xc0, 0xd5, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x8d, 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, + 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7d, 0x8d, 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, + 0xff, 0x7d, 0x8d, 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, + 0xc0, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, + 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0x7d, 0x8d, 0xb3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, + 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xf1, 0xf2, 0xf7, 0xf1, 0xf2, + 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xe2, 0xe6, 0xee, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, + 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, + 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x7d, 0x8d, 0xb3, 0xff, 0xff, 0xff, 0x8b, 0x9a, + 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x6e, 0x80, 0xaa, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, + 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, + 0xc0, 0xd5, 0xff, 0xff, 0xff, 0xb7, 0xc0, 0xd5, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xd4, 0xd9, 0xe6, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xa6, 0xc4, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0x43, 0x5a, + 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, + 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0xb7, 0xc0, 0xd5, 0xff, 0xff, 0xff, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, + 0x43, 0x5a, 0x91, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0xff, + 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x7d, 0x8d, 0xb3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe6, 0xee, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, 0xff, 0xa8, 0xb3, 0xcc, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0xc5, + 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xd4, 0xd9, 0xe6, 0xc5, 0xcc, + 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x43, 0x5a, 0x91, 0xff, 0xff, 0xff, 0xb7, 0xc0, 0xd5, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xb7, 0xc0, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x8d, 0xb3, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0xd4, 0xd9, 0xe6, 0xd4, + 0xd9, 0xe6, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, + 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0x51, 0x67, 0x99, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe6, 0xee, 0x8b, + 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0xe2, 0xe6, 0xee, 0x8b, 0x9a, + 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x7d, 0x8d, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, + 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x9a, 0xa6, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x34, 0x4e, 0x88, 0xf1, 0xf2, 0xf7, 0xc5, 0xcc, 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0x8b, 0x9a, + 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0xe2, 0xe6, 0xee, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, 0xc5, 0xcc, 0xdd, + 0xc5, 0xcc, 0xdd, 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51, + 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0x6e, 0x80, 0xaa, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x43, 0x5a, 0x91, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x4e, 0x88, 0x26, + 0x41, 0x80, 0x7d, 0x8d, 0xb3, 0xff, 0xff, 0xff, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x6e, 0x80, + 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xa6, 0xc4, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x6e, 0x80, + 0xaa, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, + 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0xc5, 0xcc, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, + 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc5, 0xcc, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, + 0x41, 0x80, 0xd4, 0xd9, 0xe6, 0xe2, 0xe6, 0xee, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, + 0xc0, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, 0xc0, + 0xd5, 0xff, 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x9a, 0xa6, 0xc4, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x6e, 0x80, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x51, + 0x67, 0x99, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, + 0x74, 0xa2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xa6, 0xc4, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, + 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0xff, 0xff, + 0xff, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7d, 0x8d, 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xd4, + 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xe2, 0xe6, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, + 0xd9, 0xe6, 0xf1, 0xf2, 0xf7, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x8d, + 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, + 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, + 0xff, 0x7d, 0x8d, 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, + 0x5a, 0x91, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9a, 0xa6, 0xc4, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xcc, 0xdd, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xb7, + 0xc0, 0xd5, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xe2, 0xe6, 0xee, 0xff, 0xff, + 0xff, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x34, 0x4e, 0x88, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x6e, 0x80, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x8d, + 0xb3, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x43, 0x5a, 0x91, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe6, 0xee, 0x7d, 0x8d, 0xb3, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0x8b, + 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x8b, 0x9a, 0xbb, 0xff, 0xff, 0xff, 0xc5, 0xcc, + 0xdd, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xb7, 0xc0, 0xd5, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x7d, 0x8d, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xb7, + 0xc0, 0xd5, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xb7, 0xc0, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, + 0x9a, 0xbb, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0xb7, 0xc0, + 0xd5, 0xa8, 0xb3, 0xcc, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x43, 0x5a, 0x91, 0xa8, 0xb3, + 0xcc, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, 0xf7, 0x51, + 0x67, 0x99, 0x8b, 0x9a, 0xbb, 0xa8, 0xb3, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf2, + 0xf7, 0x8b, 0x9a, 0xbb, 0x60, 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0xc5, 0xcc, 0xdd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x8b, 0x9a, 0xbb, 0x6e, 0x80, + 0xaa, 0x8b, 0x9a, 0xbb, 0xd4, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe2, 0xe6, 0xee, 0x8b, 0x9a, 0xbb, 0x6e, 0x80, 0xaa, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xd4, 0xd9, 0xe6, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xd4, 0xd9, 0xe6, 0x8b, 0x9a, 0xbb, 0x51, 0x67, 0x99, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, 0xff, 0xff, 0xff, 0x60, + 0x74, 0xa2, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x60, 0x74, 0xa2, + 0x8b, 0x9a, 0xbb, 0xf1, 0xf2, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x8b, 0x9a, 0xbb, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x51, 0x67, 0x99, 0x7d, 0x8d, 0xb3, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, + 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x8b, 0x9a, 0xbb, 0x60, 0x74, 0xa2, 0x34, 0x4e, 0x88, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x7d, 0x8d, 0xb3, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x51, 0x67, 0x99, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0x60, 0x74, 0xa2, 0x60, 0x74, + 0xa2, 0x34, 0x4e, 0x88, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf8, + 0xf8, 0xf1, 0xf3, 0xf3, 0xee, 0xf0, 0xf0, 0xee, 0xf0, 0xf0, 0xf2, 0xf4, 0xf4, 0xf6, 0xf7, 0xf7, + 0xfa, 0xfa, 0xfa, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf9, 0xf9, 0xf3, 0xf4, 0xf4, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, + 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, + 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf2, 0xf3, 0xf4, 0xf6, 0xf6, 0xf7, 0xf9, 0xfa, 0xfa, 0xfc, + 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf9, 0xfa, 0xf3, + 0xf4, 0xf4, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, + 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, + 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, 0xf1, 0xf2, 0xf0, + 0xf1, 0xf2, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf5, 0xf7, 0xf8, 0xf9, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfd, 0xfd, 0xfd, 0xf9, 0xf9, 0xfa, 0xf4, 0xf4, 0xf5, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, + 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, + 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, + 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, + 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, 0xf3, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfa, 0xfa, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfe, 0xf9, 0xfa, 0xfa, 0xf4, 0xf5, 0xf6, + 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, + 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, + 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, + 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, + 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, + 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf1, 0xf3, 0xf4, 0xf2, 0xf4, 0xf5, + 0xf5, 0xf7, 0xf7, 0xf8, 0xf9, 0xf9, 0xfb, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, + 0xfe, 0xf9, 0xfa, 0xfa, 0xf4, 0xf6, 0xf6, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, + 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, + 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, + 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, + 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, + 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, + 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, + 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf2, 0xf4, 0xf4, 0xf4, 0xf6, 0xf6, 0xf8, + 0xf9, 0xf9, 0xfa, 0xfb, 0xfb, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf9, 0xfa, 0xf4, 0xf6, 0xf7, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf4, 0xf5, 0xf6, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, + 0xfb, 0xfc, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, + 0xf9, 0xf9, 0xf4, 0xf5, 0xf6, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, + 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, + 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, + 0xf5, 0xf2, 0xf4, 0xf5, 0xf2, 0xf4, 0xf5, 0xf5, 0xf7, 0xf8, 0xf8, 0xf9, 0xf9, 0xfb, 0xfc, 0xfc, + 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf9, 0xfb, 0xf5, 0xf6, 0xf8, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf5, 0xf6, 0xf8, 0xf8, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfd, 0xfd, 0xfd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xf8, 0xf9, 0xfb, + 0xf5, 0xf6, 0xf8, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, + 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, + 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, 0xf5, 0xf7, 0xf3, + 0xf5, 0xf7, 0xf6, 0xf8, 0xf9, 0xf9, 0xfa, 0xfb, 0xfb, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfd, 0xfd, 0xfe, 0xf9, 0xfa, 0xfb, 0xf5, 0xf7, 0xf9, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf5, 0xf7, + 0xf9, 0xf8, 0xf9, 0xfb, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfe, 0xf9, 0xfa, 0xfb, 0xf5, 0xf7, + 0xf9, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, + 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, + 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, + 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf4, 0xf6, 0xf8, 0xf5, 0xf7, 0xf8, 0xf7, 0xf8, 0xfa, + 0xf9, 0xfa, 0xfc, 0xfc, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, + 0xfe, 0xfe, 0xf9, 0xfb, 0xfc, 0xf6, 0xf9, 0xfa, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, + 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, + 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, + 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, + 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, + 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, + 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, 0xf5, 0xf8, 0xf9, + 0xdf, 0xdd, 0xde, 0x86, 0x71, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0xf9, 0xfb, 0xfc, 0xf6, 0xf9, 0xfb, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, + 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, + 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, + 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, + 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, + 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, + 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, + 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xf5, 0xf8, 0xfa, 0xbe, 0xb5, 0xb6, 0x70, 0x58, 0x57, + 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfe, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xfd, + 0xfa, 0xfb, 0xfd, 0xf7, 0xfa, 0xfc, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xeb, 0xeb, 0xed, 0xb3, 0xa8, 0xa9, 0x5b, 0x3d, 0x3d, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, + 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, + 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0x97, 0xa1, 0xce, + 0xbd, 0xc4, 0xe0, 0xed, 0xf0, 0xf7, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, + 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, + 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, + 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xf6, 0xf9, 0xfb, 0xe0, 0xde, 0xe0, 0x93, 0x80, + 0x81, 0x51, 0x2f, 0x2f, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, + 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, + 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xff, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x5d, 0x6b, 0xb2, + 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x7b, 0x87, 0xc1, 0xab, 0xb3, 0xd7, 0xda, 0xdf, 0xee, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, + 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, + 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, + 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, + 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, + 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, + 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, + 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, + 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, + 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, + 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xf7, + 0xfa, 0xfc, 0xf7, 0xfa, 0xfc, 0xcb, 0xc4, 0xc5, 0x89, 0x73, 0x73, 0x47, 0x23, 0x22, 0x46, 0x22, + 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, + 0x42, 0x21, 0x20, 0x59, 0x3c, 0x3c, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, + 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, 0xfd, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfd, 0xfe, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfe, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfd, 0xfd, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, + 0xfd, 0xfd, 0xfe, 0xfd, 0xfe, 0xfd, 0xfd, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfe, 0xfd, + 0xfe, 0xfd, 0xfe, 0xfd, 0xfd, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfe, 0xfd, 0xfe, 0x5c, 0x6b, 0xb2, + 0x5d, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x6a, + 0x77, 0xb9, 0x99, 0xa3, 0xd0, 0xbf, 0xc6, 0xe2, 0xe4, 0xe9, 0xf4, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, + 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, + 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, + 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, + 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, + 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, + 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, + 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, + 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, + 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, + 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, + 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, + 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, + 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, + 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xf7, 0xfa, 0xfd, 0xb6, + 0xaa, 0xab, 0x69, 0x4c, 0x4c, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, + 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, 0x20, + 0x42, 0x20, 0x20, 0x70, 0x57, 0x57, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfd, 0xfe, 0xfd, + 0xfd, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfe, 0xfd, 0xfd, 0xfe, 0xfd, 0xfe, 0xfd, + 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, 0xfd, 0xfe, 0xfd, 0xfd, 0xfd, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, + 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, + 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0x5b, 0x6a, 0xb2, + 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, + 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x7f, 0x8a, 0xc3, 0xa4, 0xad, + 0xd5, 0xd2, 0xd8, 0xeb, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, + 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, + 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, + 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, + 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, + 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, + 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, + 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, + 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, + 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, + 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, + 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, + 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, + 0xf7, 0xfb, 0xfd, 0xf7, 0xfb, 0xfd, 0xed, 0xed, 0xf0, 0xa1, 0x90, 0x91, 0x60, 0x40, 0x40, 0x49, + 0x24, 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, 0x22, + 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, + 0x41, 0x20, 0x20, 0x70, 0x57, 0x57, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, + 0xfd, 0xfd, 0xfc, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, + 0xfd, 0xfc, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, + 0xfd, 0xfc, 0xfc, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0xfd, 0xfc, 0xfc, 0xfd, + 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfc, 0x79, 0x85, 0xbf, + 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, + 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x62, 0x70, 0xb5, 0x63, 0x70, + 0xb5, 0x64, 0x71, 0xb6, 0x6e, 0x7b, 0xbb, 0x93, 0x9d, 0xcd, 0xb8, 0xc0, 0xdf, 0xe6, 0xeb, 0xf5, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xd8, 0xd4, 0xd6, 0x8d, 0x77, 0x77, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, 0x49, 0x24, 0x24, 0x48, + 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, + 0x21, 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, + 0x41, 0x20, 0x20, 0x6f, 0x57, 0x57, 0xfc, 0xfc, 0xfd, 0xfd, 0xfc, 0xfd, 0xfd, 0xfc, 0xfc, 0xfd, + 0xfc, 0xfc, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, + 0xfc, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfb, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0x83, 0x8e, 0xc4, + 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, + 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, + 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x67, 0x74, 0xb7, + 0x79, 0x85, 0xc1, 0xa7, 0xb0, 0xd7, 0xcb, 0xd2, 0xe8, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xc4, 0xba, 0xbb, 0x7a, 0x5d, 0x5d, + 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x23, 0x23, 0x47, + 0x23, 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, + 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, + 0x40, 0x20, 0x1f, 0x6e, 0x56, 0x56, 0xfc, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfb, 0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfb, 0xfb, + 0xfb, 0xfc, 0xfc, 0xfb, 0xfc, 0xfb, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb, 0xfc, 0xfb, 0xfb, 0xfc, 0xfc, + 0xfb, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0x83, 0x8d, 0xc3, + 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, + 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, + 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, + 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb9, 0x8e, 0x98, 0xca, 0xba, + 0xc2, 0xe0, 0xde, 0xe3, 0xf1, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xee, 0xef, 0xf1, 0xb0, 0xa0, 0xa1, 0x66, 0x43, 0x43, 0x50, 0x28, 0x28, 0x4e, 0x27, 0x27, + 0x4d, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x46, + 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, + 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, + 0x3f, 0x1f, 0x1f, 0x9d, 0x8d, 0x8d, 0xfc, 0xfc, 0xfc, 0xfb, 0xfc, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, + 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfb, + 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfb, 0xfc, 0xfb, 0xfb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfb, 0xfb, 0xfb, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfa, 0xfb, 0xfa, + 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, + 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0x82, 0x8d, 0xc2, + 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, + 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, + 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x72, 0xb6, + 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, + 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x7e, 0x89, 0xc2, 0xa1, 0xab, 0xd4, 0xcd, 0xd3, 0xe9, 0xef, 0xf4, + 0xfa, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xe4, 0xe2, 0xe4, 0x9c, 0x86, + 0x87, 0x5e, 0x37, 0x37, 0x52, 0x29, 0x29, 0x50, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, 0x26, 0x26, + 0x4b, 0x25, 0x25, 0x4a, 0x25, 0x24, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, 0x46, + 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, + 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, 0x1f, + 0x3f, 0x1f, 0x1f, 0x9c, 0x8d, 0x8c, 0xfb, 0xfb, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, + 0xfa, 0xfb, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, + 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfa, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfa, 0xfb, 0xfb, 0xfb, 0xfa, 0xfb, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfa, 0xfb, + 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfa, 0xfb, 0xfb, 0xfa, 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, + 0xfa, 0xfb, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfa, 0x96, 0x9e, 0xcb, + 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, + 0x6a, 0xb2, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, + 0xb3, 0x5f, 0x6d, 0xb3, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, + 0x64, 0x71, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x68, 0x75, 0xb8, 0x69, + 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7a, + 0xbb, 0x89, 0x94, 0xc8, 0xb4, 0xbc, 0xdd, 0xdf, 0xe4, 0xf2, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xd0, 0xc8, 0xca, 0x89, 0x6d, 0x6e, 0x55, 0x2b, 0x2b, 0x54, 0x2a, + 0x2a, 0x52, 0x29, 0x29, 0x51, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, 0x27, 0x26, 0x4b, 0x25, 0x25, + 0x4a, 0x25, 0x25, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, + 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, + 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, + 0x3e, 0x1f, 0x1e, 0x9c, 0x8c, 0x8c, 0xfb, 0xfa, 0xfb, 0xfa, 0xfa, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, + 0xfa, 0xfb, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, + 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xfa, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xf9, 0xf9, + 0xfa, 0xfa, 0xf9, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, 0xfa, 0xfa, + 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xf9, 0xfa, 0xf9, 0xa8, 0xb0, 0xd3, + 0x58, 0x66, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, + 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, + 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x62, 0x70, 0xb5, + 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x67, + 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x79, + 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7c, 0xbc, 0x7a, 0x85, 0xc1, 0xa4, 0xad, 0xd5, + 0xc6, 0xcd, 0xe6, 0xe8, 0xed, 0xf6, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xbd, + 0xaf, 0xb0, 0x77, 0x53, 0x54, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x53, 0x2a, + 0x29, 0x51, 0x28, 0x28, 0x4f, 0x28, 0x27, 0x4d, 0x27, 0x26, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, + 0x49, 0x24, 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, + 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, 0x20, 0x42, 0x20, + 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, + 0x3e, 0x1f, 0x1f, 0x9b, 0x8c, 0x8c, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, + 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, + 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xf9, 0xfa, 0xfa, 0xf9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf9, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, + 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0xf9, + 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xa8, 0xaf, 0xd2, + 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x68, 0xb0, 0x5a, 0x68, 0xb0, 0x5a, + 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, + 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, + 0x61, 0x6f, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x73, 0xb7, 0x67, + 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6c, 0x78, + 0xba, 0x6d, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6f, 0x7b, 0xbb, 0x70, 0x7c, 0xbc, 0x71, 0x7d, 0xbc, + 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x8d, 0x98, 0xcb, 0xae, 0xb7, 0xdb, 0xd8, 0xde, 0xee, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xee, 0xef, 0xf1, 0xaa, 0x95, 0x96, 0x65, 0x3b, 0x3b, 0x59, + 0x2d, 0x2d, 0x58, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2b, 0x2a, 0x53, 0x2a, 0x29, 0x51, 0x29, + 0x28, 0x4f, 0x28, 0x27, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, 0x49, 0x24, 0x24, + 0x48, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, + 0x22, 0x21, 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, + 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, + 0x3d, 0x1f, 0x1e, 0xb2, 0xa7, 0xa7, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xf9, + 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, + 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xf9, 0xf9, 0xf9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf8, 0xf8, 0xf9, 0xf9, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, + 0xf8, 0xf9, 0xf8, 0xf8, 0xf9, 0xf9, 0xf8, 0xf9, 0xf8, 0xf9, 0xf8, 0xf8, 0xf9, 0xf8, 0xf9, 0xf8, + 0xf8, 0xf8, 0xf9, 0xf8, 0xf9, 0xf9, 0xf8, 0xf9, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xa7, 0xae, 0xd1, + 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x68, 0xaf, 0x59, + 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, + 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, + 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, + 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb9, 0x6b, 0x77, + 0xb9, 0x6b, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6f, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, + 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, 0x80, 0xbf, 0x75, 0x81, 0xbf, 0x7e, + 0x8a, 0xc4, 0xa0, 0xa9, 0xd4, 0xc0, 0xc8, 0xe3, 0xe8, 0xed, 0xf7, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xdb, 0xd6, 0xd7, 0x98, 0x7c, 0x7d, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, + 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x29, 0x51, 0x29, 0x28, 0x50, 0x28, + 0x28, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x23, 0x23, + 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, + 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, + 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, + 0x3d, 0x1f, 0x1e, 0xc9, 0xc2, 0xc2, 0xf9, 0xf9, 0xf8, 0xf9, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, + 0xf9, 0xf9, 0xf8, 0xf9, 0xf9, 0xf8, 0xf9, 0xf8, 0xf9, 0xf8, 0xf8, 0xf9, 0xf9, 0xf8, 0xf8, 0xf9, + 0xf8, 0xf8, 0xf9, 0xf9, 0xf8, 0xf9, 0xf9, 0xf9, 0xf8, 0xf9, 0xf8, 0xf8, 0xf9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf8, 0xf8, 0xf8, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, + 0xf8, 0xf8, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf7, 0xf8, 0xf8, 0xf7, 0xf8, 0xf8, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf7, 0xf8, 0xf8, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xbb, 0xc0, 0xda, + 0x57, 0x64, 0xaa, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, + 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, + 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, + 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, + 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, + 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7b, 0xbb, + 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x72, 0x7f, 0xbe, 0x74, 0x80, 0xbe, 0x75, + 0x81, 0xbf, 0x76, 0x83, 0xc0, 0x77, 0x83, 0xc0, 0x78, 0x85, 0xc1, 0x8a, 0x95, 0xc9, 0xb1, 0xba, + 0xdc, 0xd1, 0xd8, 0xec, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xc9, 0xbd, 0xbe, 0x86, 0x63, 0x64, + 0x5e, 0x30, 0x30, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, 0x2c, 0x56, + 0x2b, 0x2c, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x2a, 0x52, 0x29, 0x28, 0x50, 0x28, 0x28, 0x4e, 0x27, + 0x27, 0x4d, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, + 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, + 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, + 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, + 0x3d, 0x1f, 0x1e, 0xc9, 0xc1, 0xc1, 0xf8, 0xf8, 0xf8, 0xf7, 0xf8, 0xf7, 0xf7, 0xf8, 0xf8, 0xf7, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, + 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, + 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xcf, 0xd2, 0xe3, + 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, + 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, + 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, + 0x5e, 0x6d, 0xb3, 0x5f, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, + 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x68, 0x75, + 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, 0xba, 0x6d, 0x7a, 0xbb, + 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x71, 0x7e, 0xbd, 0x72, 0x7f, 0xbe, 0x74, + 0x80, 0xbe, 0x75, 0x81, 0xbf, 0x76, 0x82, 0xbf, 0x77, 0x83, 0xc0, 0x78, 0x85, 0xc1, 0x7a, 0x86, + 0xc2, 0x7b, 0x87, 0xc2, 0x7c, 0x88, 0xc3, 0x9c, 0xa6, 0xd2, 0xc2, 0xca, 0xe5, 0xe1, 0xe7, 0xf3, + 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, + 0xfe, 0xef, 0xef, 0xf1, 0xb7, 0xa4, 0xa5, 0x75, 0x4b, 0x4b, 0x61, 0x31, 0x31, 0x5f, 0x30, 0x30, + 0x5d, 0x2f, 0x2f, 0x5c, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, 0x2d, 0x57, 0x2b, 0x2c, 0x55, + 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x52, 0x29, 0x29, 0x50, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, 0x26, + 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, + 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, + 0x21, 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, + 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, + 0x3c, 0x1e, 0x1d, 0xc9, 0xc1, 0xc0, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, + 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf8, + 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf7, 0xf6, 0xf7, 0xf7, 0xf6, 0xf7, 0xf7, 0xf7, 0xf6, 0xf7, 0xf7, 0xf7, 0xf6, + 0xf6, 0xf6, 0xf7, 0xf6, 0xf6, 0xf7, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf6, 0xf7, 0xf7, 0xf6, 0xf6, + 0xf6, 0xf7, 0xf6, 0xf6, 0xf7, 0xf6, 0xf7, 0xf6, 0xf7, 0xf6, 0xf6, 0xf6, 0xf6, 0xce, 0xd2, 0xe3, + 0x55, 0x62, 0xa8, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, + 0x66, 0xac, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, + 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, + 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb5, 0x62, + 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, + 0xb7, 0x67, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, + 0x6d, 0x7a, 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7c, 0xbc, 0x71, 0x7e, 0xbd, 0x72, + 0x7e, 0xbd, 0x73, 0x80, 0xbe, 0x74, 0x81, 0xbf, 0x75, 0x82, 0xbf, 0x77, 0x83, 0xc0, 0x78, 0x84, + 0xc1, 0x79, 0x85, 0xc2, 0x7a, 0x87, 0xc2, 0x7c, 0x88, 0xc3, 0x7d, 0x89, 0xc4, 0x7e, 0x8a, 0xc5, + 0x8f, 0x99, 0xcc, 0xad, 0xb6, 0xdb, 0xd3, 0xd9, 0xed, 0xf1, 0xf5, 0xfb, 0xf8, 0xfc, 0xfe, 0xf8, + 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xf8, 0xfc, 0xfe, 0xe6, 0xe3, 0xe5, 0xa6, 0x8b, + 0x8c, 0x6e, 0x3f, 0x3f, 0x63, 0x32, 0x32, 0x61, 0x31, 0x31, 0x5f, 0x30, 0x30, 0x5e, 0x2f, 0x2f, + 0x5c, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x59, 0x2c, 0x2d, 0x57, 0x2c, 0x2c, 0x55, 0x2b, 0x2b, 0x54, + 0x2a, 0x2a, 0x52, 0x29, 0x29, 0x51, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, 0x27, 0x26, 0x4b, 0x25, + 0x25, 0x4a, 0x25, 0x25, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, + 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, + 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, 0x1f, 0x3f, 0x1f, + 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, + 0x3c, 0x1e, 0x1d, 0xc8, 0xc0, 0xc0, 0xf7, 0xf6, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, + 0xf6, 0xf7, 0xf7, 0xf6, 0xf7, 0xf6, 0xf7, 0xf6, 0xf6, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf6, + 0xf7, 0xf7, 0xf7, 0xf6, 0xf7, 0xf7, 0xf6, 0xf7, 0xf6, 0xf7, 0xf7, 0xf7, 0xf6, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, + 0xf6, 0xf6, 0xf5, 0xf6, 0xf5, 0xf6, 0xf5, 0xf6, 0xf6, 0xf5, 0xf6, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, + 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xcd, 0xd0, 0xe1, + 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa8, 0x56, 0x64, 0xa9, 0x57, 0x65, 0xaa, 0x57, + 0x65, 0xab, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, + 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, + 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, + 0x6f, 0xb4, 0x61, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x73, + 0xb7, 0x67, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x77, 0xb9, + 0x6c, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6e, 0x7a, 0xbb, 0x6f, 0x7b, 0xbb, 0x70, 0x7c, 0xbc, 0x71, + 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, 0x81, 0xbf, 0x75, 0x82, 0xbf, 0x77, 0x83, + 0xc0, 0x78, 0x84, 0xc1, 0x79, 0x85, 0xc2, 0x7a, 0x86, 0xc2, 0x7b, 0x88, 0xc3, 0x7d, 0x89, 0xc4, + 0x7e, 0x8a, 0xc4, 0x7f, 0x8b, 0xc5, 0x81, 0x8d, 0xc6, 0x82, 0x8e, 0xc7, 0xa0, 0xaa, 0xd5, 0xbe, + 0xc6, 0xe3, 0xe3, 0xe8, 0xf4, 0xd4, 0xca, 0xcc, 0x95, 0x73, 0x73, 0x67, 0x33, 0x33, 0x65, 0x33, + 0x32, 0x63, 0x32, 0x32, 0x62, 0x31, 0x31, 0x5f, 0x30, 0x30, 0x5e, 0x2f, 0x2f, 0x5c, 0x2f, 0x2f, + 0x5b, 0x2e, 0x2e, 0x59, 0x2d, 0x2d, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x53, + 0x2a, 0x29, 0x51, 0x28, 0x28, 0x4f, 0x28, 0x27, 0x4d, 0x27, 0x26, 0x4c, 0x26, 0x26, 0x4a, 0x25, + 0x25, 0x49, 0x24, 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, + 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, 0x20, 0x42, + 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, + 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3c, 0x1e, 0x1d, + 0x3b, 0x1e, 0x1d, 0xf5, 0xf6, 0xf6, 0xf5, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, + 0xf6, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf5, 0xf6, 0xf5, 0xf6, 0xf6, + 0xf6, 0xf5, 0xf6, 0xf6, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf6, + 0xf6, 0xf5, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, + 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xd7, 0xd9, 0xe6, + 0x54, 0x61, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa8, 0x56, 0x64, 0xa9, 0x57, + 0x65, 0xaa, 0x57, 0x65, 0xab, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x68, + 0xaf, 0x5a, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, + 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, + 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, + 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x6a, 0x76, 0xb9, + 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6f, 0x7b, 0xbb, 0x6f, + 0x7c, 0xbc, 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, 0x80, 0xbf, 0x75, 0x82, + 0xbf, 0x77, 0x83, 0xc0, 0x78, 0x84, 0xc1, 0x79, 0x85, 0xc1, 0x7a, 0x86, 0xc2, 0x7b, 0x88, 0xc3, + 0x7d, 0x88, 0xc3, 0x7e, 0x8a, 0xc4, 0x7f, 0x8b, 0xc5, 0x80, 0x8d, 0xc6, 0x82, 0x8d, 0xc6, 0x83, + 0x8f, 0xc7, 0x84, 0x90, 0xc8, 0x69, 0x35, 0x34, 0x67, 0x34, 0x33, 0x65, 0x33, 0x32, 0x64, 0x32, + 0x32, 0x62, 0x31, 0x31, 0x60, 0x30, 0x30, 0x5e, 0x2f, 0x2f, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, + 0x59, 0x2d, 0x2d, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x53, 0x2a, 0x29, 0x51, + 0x29, 0x28, 0x4f, 0x28, 0x27, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, 0x49, 0x24, + 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, 0x22, 0x22, + 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, + 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3e, 0x1f, + 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, + 0x3a, 0x1e, 0x1d, 0xf5, 0xf5, 0xf6, 0xf5, 0xf6, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, + 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, + 0xf5, 0xf5, 0xf6, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf4, 0xf5, 0xf4, 0xf4, 0xf5, 0xf4, 0xf5, + 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf4, 0xf5, 0xf5, 0xf4, 0xf4, + 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf4, 0xf5, 0xf5, 0xf4, 0xf4, + 0x53, 0x61, 0xa4, 0x54, 0x61, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x55, 0x63, 0xa8, 0x56, + 0x64, 0xa9, 0x57, 0x64, 0xaa, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, + 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, + 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, + 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x71, + 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, + 0x69, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, + 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, 0x80, + 0xbf, 0x75, 0x81, 0xbf, 0x76, 0x83, 0xc0, 0x77, 0x83, 0xc0, 0x78, 0x85, 0xc1, 0x7a, 0x86, 0xc2, + 0x7b, 0x87, 0xc2, 0x7c, 0x88, 0xc3, 0x7d, 0x8a, 0xc4, 0x7f, 0x8b, 0xc5, 0x80, 0x8c, 0xc6, 0x81, + 0x8d, 0xc6, 0x83, 0x8f, 0xc7, 0x67, 0x34, 0x34, 0x66, 0x33, 0x33, 0x64, 0x32, 0x32, 0x62, 0x31, + 0x31, 0x60, 0x30, 0x30, 0x5e, 0x30, 0x30, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, + 0x58, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x29, 0x51, 0x29, 0x28, 0x50, + 0x28, 0x28, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x24, 0x24, 0x48, 0x23, + 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, + 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, + 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, + 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, + 0x3a, 0x1e, 0x1d, 0xf4, 0xf5, 0xf5, 0xf4, 0xf5, 0xf5, 0xf5, 0xf4, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, + 0xf5, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf4, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf4, 0xf4, 0xf4, 0xf4, + 0xf5, 0xf5, 0xf5, 0xf4, 0xf5, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf4, 0xf4, 0xf5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, + 0xf3, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, + 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf3, 0xf3, + 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x55, + 0x63, 0xa8, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, + 0xad, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, + 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, + 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, + 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, + 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, 0xba, 0x6d, + 0x7a, 0xbb, 0x6e, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x71, 0x7e, 0xbd, 0x72, 0x7f, + 0xbe, 0x74, 0x80, 0xbe, 0x75, 0x81, 0xbf, 0x76, 0x82, 0xbf, 0x77, 0x83, 0xc0, 0x78, 0x85, 0xc1, + 0x7a, 0x86, 0xc2, 0x7a, 0x87, 0xc2, 0x7c, 0x88, 0xc3, 0x7d, 0x89, 0xc4, 0x7e, 0x8b, 0xc5, 0x80, + 0x8c, 0xc6, 0x7f, 0x88, 0xbd, 0x66, 0x33, 0x33, 0x64, 0x32, 0x32, 0x62, 0x31, 0x31, 0x61, 0x31, + 0x31, 0x5e, 0x30, 0x30, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, 0x2c, + 0x56, 0x2b, 0x2c, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x2a, 0x52, 0x29, 0x28, 0x50, 0x28, 0x28, 0x4e, + 0x27, 0x27, 0x4d, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x23, 0x23, 0x47, 0x23, + 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, + 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, + 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, + 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, + 0x39, 0x1d, 0x1d, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf4, 0xf3, 0xf3, + 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, + 0xf4, 0xf3, 0xf4, 0xf3, 0xf4, 0xf3, 0xf4, 0xf3, 0xf4, 0xf3, 0xf3, 0xf3, 0xf4, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, + 0xf3, 0xf3, 0xf3, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, + 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, + 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x55, 0x62, 0xa5, 0x55, + 0x62, 0xa7, 0x55, 0x63, 0xa8, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, 0x57, 0x65, 0xab, 0x57, 0x65, + 0xac, 0x58, 0x66, 0xac, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, + 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, + 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, + 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x66, 0x73, 0xb7, + 0x67, 0x74, 0xb7, 0x67, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, + 0x78, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7c, 0xbc, 0x71, 0x7e, + 0xbd, 0x72, 0x7e, 0xbd, 0x73, 0x80, 0xbe, 0x75, 0x81, 0xbf, 0x76, 0x82, 0xbf, 0x77, 0x83, 0xc0, + 0x78, 0x84, 0xc1, 0x79, 0x85, 0xc2, 0x7a, 0x87, 0xc2, 0x7c, 0x88, 0xc3, 0x7d, 0x89, 0xc4, 0x7e, + 0x8a, 0xc5, 0x79, 0x75, 0xa1, 0x64, 0x32, 0x32, 0x63, 0x32, 0x32, 0x61, 0x31, 0x31, 0x5f, 0x30, + 0x30, 0x5d, 0x2f, 0x2f, 0x5c, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, 0x2d, 0x57, 0x2b, 0x2c, + 0x55, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x52, 0x29, 0x29, 0x50, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, + 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, + 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, + 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, + 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, + 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, + 0x50, 0x38, 0x38, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, + 0xf3, 0xf3, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf2, 0xf3, + 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf2, 0xf2, + 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2, + 0x5c, 0x68, 0xa5, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x54, + 0x62, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa9, 0x56, 0x64, 0xa9, 0x57, 0x65, + 0xaa, 0x57, 0x65, 0xac, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, + 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, + 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, + 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, + 0x65, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, + 0x77, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6e, 0x7a, 0xbb, 0x6f, 0x7b, 0xbb, 0x70, 0x7c, + 0xbc, 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x80, 0xbe, 0x74, 0x81, 0xbf, 0x75, 0x82, 0xbf, + 0x77, 0x83, 0xc0, 0x78, 0x84, 0xc1, 0x79, 0x85, 0xc2, 0x7a, 0x86, 0xc2, 0x7b, 0x88, 0xc3, 0x7d, + 0x89, 0xc4, 0x77, 0x74, 0xa0, 0x63, 0x32, 0x32, 0x61, 0x31, 0x31, 0x5f, 0x30, 0x30, 0x5e, 0x2f, + 0x2f, 0x5c, 0x2e, 0x2e, 0x5a, 0x2e, 0x2e, 0x59, 0x2c, 0x2d, 0x57, 0x2c, 0x2c, 0x55, 0x2b, 0x2b, + 0x54, 0x2a, 0x2a, 0x52, 0x29, 0x29, 0x51, 0x28, 0x28, 0x4f, 0x27, 0x27, 0x4d, 0x27, 0x26, 0x4b, + 0x25, 0x25, 0x4a, 0x25, 0x25, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x47, 0x23, 0x22, 0x46, 0x22, + 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, + 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, 0x1f, 0x3f, + 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, + 0x1d, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x39, 0x1d, 0x1d, + 0x67, 0x52, 0x52, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf3, 0xf2, 0xf3, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf2, 0xf2, 0xf2, 0xf2, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf1, 0xf2, 0xf2, 0xf1, 0xf2, 0xf1, 0xf2, 0xf1, 0xf2, 0xf2, 0xf2, 0xf1, 0xf2, 0xf2, 0xf1, 0xf2, + 0xf2, 0xf2, 0xf1, 0xf1, 0xf2, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf1, 0xf2, 0xf1, 0xf2, 0xf1, 0xf1, + 0x79, 0x83, 0xb4, 0x52, 0x5f, 0xa0, 0x52, 0x5f, 0xa1, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa3, 0x54, + 0x61, 0xa4, 0x54, 0x61, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa8, 0x56, 0x64, + 0xa9, 0x57, 0x65, 0xaa, 0x57, 0x65, 0xab, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, + 0x59, 0x68, 0xaf, 0x5a, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, + 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, + 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x64, 0x71, 0xb6, + 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x6a, + 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6f, 0x7b, + 0xbb, 0x6f, 0x7c, 0xbc, 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, 0x80, 0xbf, + 0x75, 0x82, 0xbf, 0x77, 0x83, 0xc0, 0x78, 0x84, 0xc1, 0x79, 0x85, 0xc1, 0x7a, 0x86, 0xc2, 0x7b, + 0x88, 0xc3, 0x76, 0x73, 0x9f, 0x61, 0x31, 0x31, 0x5f, 0x30, 0x30, 0x5e, 0x2f, 0x2f, 0x5c, 0x2e, + 0x2e, 0x5b, 0x2e, 0x2e, 0x59, 0x2d, 0x2d, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, + 0x53, 0x2a, 0x29, 0x51, 0x28, 0x28, 0x4f, 0x28, 0x27, 0x4d, 0x27, 0x26, 0x4c, 0x26, 0x26, 0x4a, + 0x25, 0x25, 0x49, 0x24, 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, + 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x21, 0x20, + 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, + 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3c, 0x1e, + 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, + 0x67, 0x52, 0x52, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf1, 0xf1, 0xf2, 0xf1, 0xf2, 0xf1, + 0xf2, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf1, 0xf2, 0xf1, 0xf1, 0xf2, 0xf1, 0xf1, 0xf2, 0xf1, 0xf1, + 0xf1, 0xf1, 0xf2, 0xf1, 0xf2, 0xf1, 0xf2, 0xf2, 0xf1, 0xf1, 0xf2, 0xf1, 0xf1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf1, 0xf0, 0xf0, 0xf1, 0xf0, 0xf1, 0xf1, 0xf1, 0xf0, 0xf1, 0xf1, 0xf0, 0xf0, + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf0, 0xf1, 0xf1, + 0xf1, 0xf1, 0xf1, 0xf0, 0xf0, 0xf0, 0xf1, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf0, 0xf1, 0xf1, 0xf1, + 0x79, 0x83, 0xb3, 0x51, 0x5e, 0x9f, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa1, 0x53, 0x60, 0xa1, 0x53, + 0x60, 0xa3, 0x53, 0x61, 0xa4, 0x54, 0x61, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x55, 0x63, + 0xa8, 0x56, 0x64, 0xa9, 0x57, 0x64, 0xaa, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, + 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, + 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, + 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, + 0x63, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, + 0x75, 0xb8, 0x69, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, 0xba, 0x6d, 0x7a, + 0xbb, 0x6e, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, + 0x74, 0x80, 0xbf, 0x75, 0x81, 0xbf, 0x76, 0x83, 0xc0, 0x77, 0x84, 0xc0, 0x79, 0x85, 0xc1, 0x7a, + 0x86, 0xc2, 0x74, 0x72, 0x9e, 0x60, 0x30, 0x30, 0x5e, 0x2f, 0x2f, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, + 0x2e, 0x59, 0x2d, 0x2d, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x54, 0x2a, 0x2a, 0x53, 0x2a, 0x29, + 0x51, 0x29, 0x28, 0x4f, 0x28, 0x27, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, 0x49, + 0x24, 0x24, 0x47, 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x45, 0x22, + 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, + 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3e, + 0x1f, 0x1f, 0x3d, 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, + 0x1d, 0x3a, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, + 0x66, 0x51, 0x51, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf0, 0xf0, + 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf0, 0xf0, 0xf1, 0xf0, 0xf0, 0xf1, 0xf1, 0xf0, 0xf1, 0xf1, 0xf1, 0xf0, 0xf1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xef, 0xf0, + 0xef, 0xf0, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x78, 0x82, 0xb1, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa1, 0x53, + 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x55, 0x62, 0xa6, 0x55, 0x62, + 0xa7, 0x55, 0x63, 0xa8, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xaa, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, + 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, + 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5d, 0x6b, + 0xb2, 0x5e, 0x6c, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, + 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, + 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x79, + 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x71, 0x7e, 0xbd, + 0x72, 0x7f, 0xbe, 0x74, 0x80, 0xbe, 0x75, 0x81, 0xbf, 0x76, 0x82, 0xbf, 0x77, 0x83, 0xc0, 0x78, + 0x85, 0xc1, 0x73, 0x70, 0x9d, 0x5e, 0x30, 0x30, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x59, 0x2d, + 0x2d, 0x58, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x29, 0x51, 0x29, 0x28, + 0x50, 0x28, 0x27, 0x4e, 0x27, 0x27, 0x4c, 0x26, 0x26, 0x4a, 0x25, 0x25, 0x49, 0x24, 0x24, 0x48, + 0x23, 0x23, 0x47, 0x23, 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, + 0x21, 0x43, 0x21, 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, + 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3e, 0x1f, 0x1f, 0x3d, + 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, + 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, + 0x65, 0x51, 0x51, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xf0, 0xef, 0xef, 0xef, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, + 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, + 0xef, 0xef, 0xef, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xef, 0xef, 0xf0, 0xf0, 0xef, + 0x81, 0x8a, 0xb5, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, + 0x5f, 0xa0, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x55, 0x62, + 0xa5, 0x55, 0x62, 0xa7, 0x55, 0x63, 0xa8, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, 0x57, 0x65, 0xab, + 0x57, 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, + 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, + 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, + 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x65, 0x72, 0xb6, 0x66, + 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, + 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7c, 0xbc, + 0x71, 0x7e, 0xbd, 0x72, 0x7f, 0xbd, 0x74, 0x80, 0xbe, 0x75, 0x81, 0xbf, 0x76, 0x82, 0xbf, 0x77, + 0x83, 0xc0, 0x71, 0x6f, 0x9d, 0x5d, 0x2f, 0x2f, 0x5b, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, + 0x2c, 0x56, 0x2b, 0x2c, 0x55, 0x2b, 0x2a, 0x53, 0x2a, 0x2a, 0x52, 0x29, 0x28, 0x50, 0x28, 0x28, + 0x4e, 0x27, 0x27, 0x4d, 0x26, 0x26, 0x4b, 0x25, 0x25, 0x49, 0x25, 0x24, 0x48, 0x23, 0x23, 0x47, + 0x23, 0x22, 0x46, 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x43, 0x21, + 0x21, 0x43, 0x21, 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x41, 0x20, 0x20, + 0x40, 0x20, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x40, 0x23, 0x25, 0x3d, 0x1f, 0x1e, 0x3d, + 0x1f, 0x1e, 0x3d, 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, + 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, + 0x93, 0x86, 0x85, 0xef, 0xf0, 0xef, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, + 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, + 0xef, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xef, + 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xee, + 0xef, 0xef, 0xef, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, + 0x9e, 0xa4, 0xc4, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, 0x51, 0x5e, 0x9e, 0x51, + 0x5e, 0x9f, 0x52, 0x5f, 0xa0, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, + 0xa4, 0x55, 0x62, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa9, 0x57, 0x64, 0xa9, + 0x57, 0x65, 0xaa, 0x57, 0x65, 0xac, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xaf, 0x59, + 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, + 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, + 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, + 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x76, + 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6e, 0x7a, 0xbb, 0x6f, 0x7b, 0xbc, + 0x70, 0x7c, 0xbc, 0x71, 0x7d, 0xbd, 0x72, 0x7e, 0xbd, 0x73, 0x80, 0xbe, 0x74, 0x81, 0xbf, 0x75, + 0x82, 0xbf, 0x70, 0x6e, 0x9c, 0x5c, 0x2e, 0x2e, 0x5a, 0x2d, 0x2d, 0x58, 0x2c, 0x2d, 0x56, 0x2b, + 0x2c, 0x55, 0x2b, 0x2b, 0x5d, 0x34, 0x33, 0x65, 0x3d, 0x3b, 0x61, 0x3a, 0x39, 0x5b, 0x34, 0x33, + 0x58, 0x32, 0x31, 0x51, 0x2c, 0x2b, 0x4e, 0x2a, 0x29, 0x48, 0x24, 0x23, 0x47, 0x23, 0x22, 0x46, + 0x22, 0x22, 0x46, 0x22, 0x22, 0x45, 0x22, 0x22, 0x44, 0x22, 0x21, 0x44, 0x22, 0x21, 0x43, 0x21, + 0x21, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, + 0x40, 0x20, 0x1f, 0x3f, 0x22, 0x23, 0x45, 0x39, 0x46, 0x53, 0x57, 0x73, 0x3d, 0x1f, 0x1e, 0x3d, + 0x1f, 0x1e, 0x3c, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, + 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1c, + 0x92, 0x85, 0x84, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, + 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, + 0xef, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xee, 0xee, 0xef, 0xee, 0xef, 0xee, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xee, 0xed, 0xed, 0xee, 0xee, 0xed, 0xee, 0xee, 0xed, 0xed, 0xee, 0xee, 0xee, + 0xed, 0xed, 0xed, 0xee, 0xed, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xed, 0xee, + 0xed, 0xed, 0xed, 0xee, 0xed, 0xed, 0xee, 0xed, 0xed, 0xee, 0xed, 0xee, 0xee, 0xed, 0xed, 0xed, + 0x9e, 0xa4, 0xc3, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9a, 0x50, 0x5c, 0x9b, 0x50, 0x5d, 0x9d, 0x51, + 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa0, 0x52, 0x5f, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, + 0xa3, 0x54, 0x61, 0xa4, 0x54, 0x62, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, 0x56, 0x63, 0xa8, + 0x56, 0x64, 0xa9, 0x57, 0x65, 0xaa, 0x57, 0x65, 0xab, 0x58, 0x66, 0xac, 0x58, 0x66, 0xad, 0x59, + 0x67, 0xae, 0x59, 0x68, 0xb0, 0x5a, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, + 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, + 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x63, 0x70, 0xb5, 0x64, + 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x67, 0x74, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, + 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6d, 0x7a, 0xbb, + 0x6f, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, 0x7f, 0xbe, 0x74, + 0x80, 0xbf, 0x6f, 0x6d, 0x9b, 0x5a, 0x2e, 0x2e, 0x59, 0x2c, 0x2d, 0x57, 0x2b, 0x2c, 0x55, 0x2b, + 0x2b, 0x59, 0x2f, 0x2e, 0x69, 0x41, 0x3f, 0x69, 0x42, 0x40, 0x68, 0x40, 0x3f, 0x66, 0x40, 0x3e, + 0x64, 0x3f, 0x3d, 0x63, 0x3e, 0x3c, 0x61, 0x3d, 0x3c, 0x60, 0x3d, 0x3b, 0x5e, 0x3b, 0x39, 0x58, + 0x36, 0x34, 0x56, 0x34, 0x32, 0x51, 0x2f, 0x2e, 0x4f, 0x2d, 0x2c, 0x49, 0x28, 0x27, 0x47, 0x26, + 0x25, 0x42, 0x21, 0x20, 0x42, 0x20, 0x20, 0x41, 0x20, 0x20, 0x40, 0x20, 0x1f, 0x40, 0x20, 0x1f, + 0x40, 0x30, 0x3a, 0x45, 0x48, 0x5e, 0x4c, 0x51, 0x6c, 0x54, 0x5a, 0x79, 0x3d, 0x1f, 0x1e, 0x3c, + 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x39, 0x1d, + 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, + 0x91, 0x84, 0x84, 0xed, 0xee, 0xee, 0xed, 0xed, 0xee, 0xed, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, + 0xed, 0xed, 0xee, 0xed, 0xed, 0xed, 0xee, 0xed, 0xee, 0xed, 0xee, 0xed, 0xee, 0xee, 0xee, 0xed, + 0xee, 0xee, 0xee, 0xee, 0xed, 0xed, 0xee, 0xee, 0xee, 0xed, 0xee, 0xee, 0xee, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xec, 0xed, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, 0xed, 0xed, 0xec, + 0xed, 0xed, 0xed, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xed, 0xec, 0xed, 0xec, + 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xec, 0xec, 0xed, 0xed, 0xed, 0xec, 0xed, 0xec, 0xed, + 0x9d, 0xa3, 0xc2, 0x4e, 0x5b, 0x98, 0x4f, 0x5b, 0x9a, 0x4f, 0x5b, 0x9a, 0x50, 0x5c, 0x9b, 0x50, + 0x5d, 0x9c, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5e, 0xa0, 0x52, 0x5f, 0xa1, 0x53, 0x60, + 0xa1, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x54, 0x61, 0xa5, 0x55, 0x62, 0xa6, 0x55, 0x62, 0xa7, + 0x55, 0x63, 0xa8, 0x56, 0x59, 0x91, 0x57, 0x64, 0xaa, 0x57, 0x65, 0xab, 0x57, 0x65, 0xac, 0x58, + 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x68, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5b, 0x69, + 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, + 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, + 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, + 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xb9, 0x6d, 0x79, 0xba, + 0x6d, 0x7a, 0xbb, 0x6e, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x71, 0x7d, 0xbc, 0x72, 0x7e, 0xbd, 0x73, + 0x7f, 0xbe, 0x6d, 0x6b, 0x9a, 0x59, 0x2d, 0x2d, 0x57, 0x2c, 0x2c, 0x55, 0x2b, 0x2b, 0x59, 0x2f, + 0x2e, 0x69, 0x40, 0x3f, 0x68, 0x41, 0x3f, 0x67, 0x40, 0x3f, 0x65, 0x3f, 0x3e, 0x64, 0x3e, 0x3c, + 0x62, 0x3d, 0x3c, 0x61, 0x3d, 0x3b, 0x60, 0x3c, 0x3b, 0x5f, 0x3c, 0x3a, 0x5f, 0x3c, 0x3a, 0x5d, + 0x3b, 0x39, 0x5d, 0x3b, 0x39, 0x5d, 0x3b, 0x39, 0x5c, 0x3b, 0x39, 0x5c, 0x3b, 0x39, 0x5b, 0x3a, + 0x38, 0x5a, 0x3a, 0x39, 0x58, 0x38, 0x37, 0x53, 0x33, 0x32, 0x7d, 0x56, 0x53, 0x79, 0x64, 0x67, + 0x41, 0x45, 0x5b, 0x46, 0x4a, 0x62, 0x4c, 0x51, 0x6c, 0x54, 0x5a, 0x79, 0x3c, 0x1e, 0x1d, 0x3c, + 0x1e, 0x1d, 0x3b, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, + 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, + 0x90, 0x83, 0x84, 0xed, 0xed, 0xed, 0xec, 0xed, 0xed, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, + 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, 0xed, 0xec, 0xed, 0xec, 0xed, 0xed, 0xed, 0xec, 0xed, + 0xec, 0xec, 0xed, 0xed, 0xed, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xec, 0xed, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xeb, 0xec, 0xec, 0xeb, 0xec, 0xeb, 0xec, 0xec, 0xeb, 0xec, 0xeb, 0xec, 0xec, + 0xec, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xec, + 0xec, 0xec, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xeb, + 0x9c, 0xa2, 0xc1, 0x4d, 0x5a, 0x97, 0x4e, 0x5b, 0x98, 0x4f, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, + 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x51, 0x5e, 0x9f, 0x52, 0x5f, + 0xa1, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, 0x55, 0x62, 0xa6, + 0x55, 0x62, 0xa7, 0x55, 0x31, 0x3a, 0x4e, 0x2e, 0x36, 0x4a, 0x3f, 0x5d, 0x4e, 0x52, 0x87, 0x57, + 0x65, 0xac, 0x58, 0x66, 0xad, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, 0xb0, 0x5a, 0x69, + 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, + 0x5d, 0x6b, 0xb2, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, + 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x73, + 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, 0x78, 0xb9, + 0x6c, 0x79, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7b, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, 0x7d, 0xbc, 0x71, + 0x7e, 0xbd, 0x6c, 0x6a, 0x99, 0x57, 0x2c, 0x2c, 0x56, 0x2b, 0x2b, 0x56, 0x2c, 0x2b, 0x66, 0x3d, + 0x3c, 0x68, 0x41, 0x3f, 0x67, 0x3f, 0x3e, 0x65, 0x3f, 0x3e, 0x64, 0x3e, 0x3c, 0x62, 0x3d, 0x3b, + 0x60, 0x3c, 0x3b, 0x5f, 0x3c, 0x3a, 0x5f, 0x3b, 0x3a, 0x5d, 0x3b, 0x39, 0x5d, 0x3b, 0x39, 0x5d, + 0x3b, 0x39, 0x5c, 0x3b, 0x39, 0x5c, 0x3b, 0x39, 0x5b, 0x3a, 0x38, 0x5a, 0x3a, 0x38, 0x5a, 0x39, + 0x38, 0x59, 0x39, 0x37, 0x84, 0x5e, 0x5a, 0xc0, 0x92, 0x8c, 0xd1, 0xa4, 0x9e, 0xd5, 0xac, 0xa7, + 0xb3, 0x9a, 0x9c, 0x6c, 0x68, 0x79, 0x4c, 0x51, 0x6c, 0x54, 0x5a, 0x79, 0x3c, 0x1e, 0x1d, 0x3b, + 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1c, + 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, + 0xa7, 0x9d, 0x9d, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xeb, 0xec, 0xeb, 0xec, + 0xeb, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xec, 0xec, + 0xec, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xeb, 0xec, 0xec, 0xeb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, + 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, + 0xeb, 0xeb, 0xeb, 0xea, 0xeb, 0xeb, 0xea, 0xeb, 0xeb, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, + 0xc3, 0xc6, 0xd5, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5a, 0x98, 0x4f, 0x5b, 0x99, 0x4f, + 0x5b, 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, 0x51, 0x5e, 0x9e, 0x51, 0x5e, + 0x9f, 0x52, 0x5f, 0xa1, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, 0x54, 0x61, 0xa4, + 0x55, 0x62, 0xa5, 0x55, 0x38, 0x49, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x2a, + 0x18, 0x1e, 0x33, 0x30, 0x4d, 0x51, 0x51, 0x83, 0x59, 0x67, 0xae, 0x59, 0x67, 0xaf, 0x59, 0x68, + 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6a, 0xb2, + 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x61, + 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x65, 0x72, + 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, + 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x7a, 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, 0x7c, 0xbc, 0x70, + 0x7c, 0xbc, 0x6b, 0x69, 0x98, 0x56, 0x2b, 0x2b, 0x56, 0x2c, 0x2c, 0x65, 0x3c, 0x3b, 0x67, 0x40, + 0x3e, 0x66, 0x3f, 0x3d, 0x65, 0x3e, 0x3d, 0x63, 0x3d, 0x3c, 0x61, 0x3c, 0x3b, 0x60, 0x3c, 0x3a, + 0x5f, 0x3b, 0x3a, 0x5f, 0x3b, 0x39, 0x5d, 0x3a, 0x39, 0x5c, 0x3a, 0x38, 0x5c, 0x3a, 0x38, 0x5b, + 0x3a, 0x38, 0x5b, 0x3a, 0x38, 0x5a, 0x39, 0x38, 0x5a, 0x39, 0x38, 0x59, 0x39, 0x37, 0x85, 0x5e, + 0x5b, 0xc0, 0x92, 0x8c, 0xd2, 0xa5, 0x9f, 0xd5, 0xad, 0xa8, 0xd9, 0xb6, 0xb1, 0xdc, 0xbe, 0xba, + 0xe0, 0xc7, 0xc4, 0xe3, 0xd0, 0xce, 0xc0, 0xb6, 0xbd, 0x67, 0x6b, 0x86, 0x3b, 0x1e, 0x1d, 0x3a, + 0x1e, 0x1d, 0x3a, 0x1e, 0x1d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1d, 0x1c, 0x37, 0x1c, + 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, + 0xbd, 0xb7, 0xb7, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, + 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, + 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb, 0xea, + 0xea, 0xea, 0xea, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xc2, 0xc5, 0xd4, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5a, 0x98, 0x4f, + 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, 0x51, 0x5e, + 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa0, 0x53, 0x60, 0xa1, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa3, + 0x54, 0x61, 0xa4, 0x55, 0x38, 0x48, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x4d, 0x28, 0x2b, 0x61, 0x35, 0x3b, 0x60, 0x46, 0x62, 0x5d, 0x57, + 0x89, 0x59, 0x68, 0xb0, 0x5a, 0x69, 0xb1, 0x5a, 0x69, 0xb1, 0x5b, 0x69, 0xb1, 0x5b, 0x69, 0xb1, + 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, 0x6d, 0xb3, 0x5f, + 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x62, 0x70, 0xb5, 0x63, 0x70, 0xb5, 0x64, 0x71, + 0xb6, 0x64, 0x72, 0xb6, 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x67, 0x75, 0xb8, 0x69, 0x76, 0xb8, + 0x6a, 0x76, 0xb9, 0x6b, 0x78, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x79, 0xbb, 0x6e, 0x7a, 0xbb, 0x6f, + 0x7c, 0xbc, 0x69, 0x68, 0x98, 0x55, 0x2b, 0x2a, 0x61, 0x38, 0x37, 0x67, 0x3f, 0x3e, 0x66, 0x3e, + 0x3d, 0x65, 0x3e, 0x3d, 0x63, 0x3d, 0x3c, 0x61, 0x3c, 0x3b, 0x5f, 0x3b, 0x3a, 0x5e, 0x3a, 0x39, + 0x5e, 0x3a, 0x39, 0x5d, 0x3a, 0x39, 0x5c, 0x39, 0x38, 0x5b, 0x39, 0x38, 0x5b, 0x3a, 0x38, 0x5a, + 0x39, 0x37, 0x5a, 0x39, 0x37, 0x59, 0x38, 0x37, 0x76, 0x52, 0x4f, 0xb2, 0x87, 0x81, 0xd2, 0xa6, + 0xa0, 0xd6, 0xaf, 0xa9, 0xd9, 0xb7, 0xb2, 0xdd, 0xc0, 0xbc, 0xe0, 0xc8, 0xc5, 0xe4, 0xd0, 0xcf, + 0xe7, 0xd8, 0xd7, 0xea, 0xde, 0xde, 0xed, 0xe4, 0xe4, 0xf0, 0xea, 0xeb, 0xaf, 0xa2, 0xa2, 0x51, + 0x39, 0x38, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, + 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, + 0xbc, 0xb6, 0xb6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, + 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, + 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, + 0xc1, 0xc4, 0xd3, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x94, 0x4d, 0x59, 0x96, 0x4d, 0x59, 0x97, 0x4e, + 0x5a, 0x97, 0x4f, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9a, 0x50, 0x5c, 0x9c, 0x50, 0x5d, + 0x9d, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa0, 0x52, 0x5f, 0xa1, 0x53, 0x60, 0xa2, + 0x53, 0x60, 0xa3, 0x55, 0x38, 0x48, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x4c, 0x27, 0x2a, 0x60, 0x31, 0x33, 0x62, 0x32, 0x34, 0x64, 0x33, + 0x35, 0x6b, 0x3b, 0x40, 0x6b, 0x52, 0x70, 0x63, 0x6e, 0xae, 0x5f, 0x6f, 0xb4, 0x5f, 0x6e, 0xb4, + 0x5b, 0x69, 0xb1, 0x5b, 0x6a, 0xb2, 0x5c, 0x6b, 0xb2, 0x5d, 0x6b, 0xb2, 0x5e, 0x6c, 0xb3, 0x5e, + 0x6d, 0xb3, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, 0xb5, 0x63, 0x70, + 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x73, 0xb7, 0x67, 0x74, 0xb7, 0x67, 0x74, 0xb8, + 0x68, 0x76, 0xb8, 0x6a, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6c, 0x78, 0xba, 0x6d, 0x79, 0xba, 0x6d, + 0x7a, 0xbb, 0x68, 0x67, 0x97, 0x61, 0x38, 0x36, 0x67, 0x3e, 0x3d, 0x65, 0x3d, 0x3c, 0x64, 0x3d, + 0x3c, 0x62, 0x3c, 0x3b, 0x61, 0x3b, 0x3a, 0x5f, 0x3a, 0x39, 0x5e, 0x3a, 0x38, 0x5d, 0x39, 0x38, + 0x5c, 0x39, 0x37, 0x5b, 0x39, 0x37, 0x5b, 0x38, 0x37, 0x5a, 0x39, 0x37, 0x5a, 0x39, 0x37, 0x59, + 0x38, 0x36, 0x76, 0x51, 0x4f, 0xb3, 0x87, 0x82, 0xd3, 0xa7, 0xa1, 0xd6, 0xb0, 0xaa, 0xda, 0xb8, + 0xb3, 0xdd, 0xc1, 0xbd, 0xe1, 0xc9, 0xc7, 0xe4, 0xd2, 0xd1, 0xe7, 0xd8, 0xd8, 0xea, 0xdf, 0xdf, + 0xed, 0xe5, 0xe5, 0xf1, 0xeb, 0xec, 0xf4, 0xf1, 0xf1, 0xf5, 0xf4, 0xf6, 0xf3, 0xf6, 0xf7, 0xf2, + 0xf6, 0xf7, 0x95, 0x89, 0x8a, 0x44, 0x2a, 0x2a, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, + 0x1c, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, + 0xbb, 0xb6, 0xb6, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, + 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xea, 0xea, 0xe9, 0xe9, 0xe9, 0xea, + 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe9, 0xe8, 0xe8, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe8, 0xe8, 0xe8, 0xe9, + 0xe9, 0xe8, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe9, 0xe9, 0xe8, 0xe9, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xc1, 0xc4, 0xd3, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, + 0x59, 0x96, 0x4e, 0x5a, 0x97, 0x4e, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5b, 0x9a, 0x50, 0x5c, + 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x52, 0x5f, 0xa0, 0x52, 0x5f, 0xa1, + 0x53, 0x60, 0xa1, 0x54, 0x38, 0x48, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x4b, 0x27, 0x2a, 0x5e, 0x30, 0x32, 0x60, 0x31, 0x34, 0x62, 0x32, + 0x35, 0x6b, 0x37, 0x38, 0x74, 0x3c, 0x3c, 0x7e, 0x49, 0x49, 0x9a, 0x8a, 0x9f, 0x9d, 0xa9, 0xd2, + 0x72, 0x82, 0xbf, 0x69, 0x7a, 0xbb, 0x66, 0x77, 0xb9, 0x65, 0x75, 0xb8, 0x64, 0x73, 0xb7, 0x62, + 0x71, 0xb6, 0x62, 0x71, 0xb5, 0x5f, 0x6d, 0xb3, 0x60, 0x6e, 0xb4, 0x61, 0x6f, 0xb4, 0x61, 0x6f, + 0xb5, 0x62, 0x70, 0xb5, 0x64, 0x71, 0xb6, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, 0x66, 0x74, 0xb7, + 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb9, 0x6b, 0x77, 0xb9, 0x6b, 0x78, 0xba, 0x6d, + 0x79, 0xba, 0x6a, 0x6a, 0x9a, 0x66, 0x3e, 0x3c, 0x65, 0x3d, 0x3c, 0x63, 0x3c, 0x3b, 0x62, 0x3b, + 0x3a, 0x60, 0x3a, 0x39, 0x5e, 0x39, 0x38, 0x5d, 0x39, 0x38, 0x5c, 0x38, 0x37, 0x5b, 0x38, 0x37, + 0x5b, 0x38, 0x37, 0x5a, 0x37, 0x36, 0x59, 0x37, 0x36, 0x59, 0x38, 0x36, 0x76, 0x51, 0x4e, 0xb3, + 0x88, 0x83, 0xd3, 0xa9, 0xa3, 0xd7, 0xb1, 0xab, 0xda, 0xb9, 0xb5, 0xde, 0xc2, 0xbe, 0xe1, 0xcb, + 0xc8, 0xe4, 0xd2, 0xd2, 0xe8, 0xd9, 0xd9, 0xeb, 0xe0, 0xe0, 0xee, 0xe6, 0xe6, 0xf1, 0xec, 0xed, + 0xf2, 0xf2, 0xf3, 0xf2, 0xf4, 0xf6, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xe5, 0xe7, 0xe9, 0x94, 0x89, 0x8a, 0x37, 0x1c, 0x1c, 0x36, 0x1c, + 0x1b, 0x35, 0x1b, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, + 0xbb, 0xb4, 0xb4, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, + 0xe8, 0xe8, 0xe9, 0xe9, 0xe8, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe8, 0xe9, 0xe8, 0xe8, + 0xe9, 0xe8, 0xe8, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe7, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe7, 0xe8, 0xe8, 0xe7, 0xe8, 0xe7, + 0xe7, 0xe8, 0xe8, 0xe7, 0xe8, 0xe8, 0xe8, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe7, 0xe8, 0xe7, 0xe8, + 0xe7, 0xe7, 0xe8, 0xe7, 0xe8, 0xe7, 0xe8, 0xe8, 0xe7, 0xe7, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe8, + 0xe7, 0xe8, 0xe7, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x4d, + 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5b, 0x98, 0x4f, 0x5b, 0x9a, 0x4f, 0x5b, + 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5e, 0x9e, 0x51, 0x5e, 0x9f, 0x51, 0x5e, 0x9f, + 0x52, 0x5f, 0xa1, 0x54, 0x37, 0x48, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x49, 0x27, 0x29, 0x5c, 0x2f, 0x32, 0x5f, 0x31, 0x33, 0x61, 0x32, + 0x34, 0x69, 0x36, 0x37, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x9f, 0x77, 0x78, + 0xea, 0xea, 0xec, 0xc6, 0xcf, 0xe4, 0x9a, 0xa8, 0xd2, 0x6f, 0x81, 0xbf, 0x67, 0x7a, 0xbb, 0x68, + 0x7b, 0xbc, 0x6a, 0x7c, 0xbc, 0x6b, 0x7c, 0xbc, 0x6a, 0x7c, 0xbc, 0x69, 0x79, 0xbb, 0x68, 0x78, + 0xba, 0x67, 0x77, 0xb9, 0x65, 0x75, 0xb8, 0x66, 0x74, 0xb8, 0x64, 0x72, 0xb6, 0x65, 0x72, 0xb6, + 0x66, 0x73, 0xb7, 0x67, 0x74, 0xb8, 0x68, 0x75, 0xb8, 0x69, 0x76, 0xb8, 0x6a, 0x77, 0xb9, 0x6b, + 0x78, 0xb9, 0x6a, 0x6a, 0x9a, 0x64, 0x3c, 0x3b, 0x62, 0x3b, 0x3a, 0x61, 0x3a, 0x39, 0x5f, 0x39, + 0x39, 0x5d, 0x38, 0x38, 0x5c, 0x38, 0x37, 0x5b, 0x37, 0x36, 0x5b, 0x37, 0x36, 0x5b, 0x37, 0x36, + 0x59, 0x37, 0x35, 0x59, 0x36, 0x35, 0x67, 0x44, 0x42, 0xb3, 0x89, 0x84, 0xd4, 0xaa, 0xa4, 0xd7, + 0xb2, 0xad, 0xda, 0xbb, 0xb6, 0xde, 0xc3, 0xc0, 0xe2, 0xcc, 0xca, 0xe5, 0xd4, 0xd3, 0xe8, 0xda, + 0xda, 0xeb, 0xe0, 0xe1, 0xee, 0xe8, 0xe9, 0xf0, 0xef, 0xf0, 0xf1, 0xf3, 0xf5, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xda, 0xda, 0xdc, 0x7c, 0x6d, + 0x6e, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x1a, + 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe7, 0xe8, + 0xe7, 0xe8, 0xe7, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, + 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe7, 0xe7, 0xe8, 0xe8, 0xe7, 0xe8, 0xe7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe6, 0xe7, 0xe6, 0xe7, 0xe6, 0xe6, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, + 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe6, 0xe7, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, + 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe7, 0xe6, 0xe7, 0xe6, 0xe7, 0xe6, 0xe7, 0xe6, 0xe7, + 0xe6, 0xe6, 0xe7, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, + 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5a, 0x98, 0x4f, 0x5b, + 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, 0x51, 0x5e, 0x9e, + 0x51, 0x5e, 0x9f, 0x54, 0x37, 0x47, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x48, 0x26, 0x29, 0x5a, 0x2e, 0x31, 0x5d, 0x30, 0x32, 0x5f, 0x31, + 0x33, 0x67, 0x35, 0x37, 0x70, 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, 0x78, 0x3d, 0x3d, + 0x89, 0x56, 0x56, 0xd4, 0xc8, 0xc9, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xce, 0xd6, 0xe8, 0xa2, + 0xaf, 0xd5, 0x77, 0x89, 0xc2, 0x66, 0x7a, 0xbb, 0x67, 0x7b, 0xbc, 0x67, 0x7b, 0xbc, 0x69, 0x7c, + 0xbc, 0x69, 0x7d, 0xbd, 0x6a, 0x7e, 0xbd, 0x6a, 0x7e, 0xbd, 0x6b, 0x7f, 0xbe, 0x6c, 0x7e, 0xbe, + 0x6b, 0x7c, 0xbd, 0x6b, 0x7c, 0xbc, 0x6b, 0x7b, 0xbc, 0x6b, 0x7a, 0xbb, 0x6b, 0x79, 0xbb, 0x6b, + 0x78, 0xba, 0x69, 0x69, 0x99, 0x62, 0x3a, 0x39, 0x60, 0x39, 0x38, 0x5f, 0x38, 0x37, 0x5d, 0x38, + 0x36, 0x5c, 0x37, 0x36, 0x5a, 0x36, 0x35, 0x5a, 0x36, 0x35, 0x59, 0x35, 0x35, 0x58, 0x35, 0x34, + 0x66, 0x43, 0x41, 0xa4, 0x7c, 0x78, 0xd4, 0xab, 0xa5, 0xd7, 0xb3, 0xae, 0xdb, 0xbc, 0xb8, 0xdf, + 0xc4, 0xc1, 0xe2, 0xcd, 0xcb, 0xe5, 0xd5, 0xd4, 0xe8, 0xdb, 0xdb, 0xec, 0xe6, 0xe7, 0xef, 0xed, + 0xef, 0xf1, 0xf3, 0xf5, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xc5, 0xcb, 0xd9, 0x99, 0xa0, 0xbb, 0x6c, 0x76, 0x9d, 0x40, 0x4b, + 0x7e, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, + 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe7, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, + 0xe7, 0xe6, 0xe7, 0xe7, 0xe7, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe7, + 0xe6, 0xe6, 0xe7, 0xe7, 0xe6, 0xe7, 0xe7, 0xe6, 0xe7, 0xe6, 0xe6, 0xe6, 0xe7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe6, 0xe6, 0xe6, 0xe5, 0xe5, 0xe6, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, 0xe6, 0xe6, 0xe5, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, 0xe6, 0xe6, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, + 0xe6, 0xe6, 0xe6, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, 0x57, 0x92, 0x4b, + 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5a, + 0x98, 0x4f, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5d, 0x9c, 0x51, 0x5d, 0x9d, + 0x51, 0x5e, 0x9e, 0x53, 0x41, 0x5d, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x36, 0x1e, 0x21, 0x59, 0x2e, 0x30, 0x5b, 0x2f, 0x31, 0x5d, 0x31, + 0x33, 0x65, 0x34, 0x35, 0x6d, 0x39, 0x38, 0x70, 0x3a, 0x3a, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, + 0x78, 0x3e, 0x3e, 0x7b, 0x3f, 0x3f, 0xb0, 0x8f, 0x90, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xd7, 0xde, 0xec, 0xa2, 0xaf, 0xd5, 0x76, 0x88, 0xc2, 0x65, 0x79, + 0xbb, 0x66, 0x79, 0xbb, 0x67, 0x7a, 0xbb, 0x67, 0x7b, 0xbc, 0x68, 0x7c, 0xbc, 0x69, 0x7d, 0xbd, + 0x6a, 0x7d, 0xbd, 0x6a, 0x7e, 0xbe, 0x6c, 0x7f, 0xbe, 0x6d, 0x80, 0xbf, 0x6e, 0x81, 0xbf, 0x6e, + 0x82, 0xc0, 0x70, 0x78, 0xaa, 0x60, 0x38, 0x38, 0x5e, 0x38, 0x37, 0x5c, 0x36, 0x36, 0x5b, 0x36, + 0x35, 0x5a, 0x35, 0x34, 0x59, 0x35, 0x34, 0x58, 0x35, 0x34, 0x67, 0x42, 0x41, 0xa4, 0x7c, 0x78, + 0xd5, 0xac, 0xa6, 0xd8, 0xb4, 0xaf, 0xdc, 0xbd, 0xb9, 0xdf, 0xc5, 0xc3, 0xe3, 0xce, 0xcd, 0xe7, + 0xd9, 0xd9, 0xeb, 0xe4, 0xe5, 0xef, 0xee, 0xef, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xc5, 0xcb, 0xda, 0x99, 0xa1, 0xbd, 0x6d, + 0x77, 0x9f, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, + 0x7d, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, 0xe6, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, 0xe6, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, + 0xe5, 0xe5, 0xe4, 0xe4, 0xe5, 0xe5, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe5, 0xe5, 0xe5, + 0xe5, 0xe5, 0xe5, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe5, 0xe5, 0xe5, + 0xe5, 0xe5, 0xe5, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, + 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x94, 0x4d, 0x59, 0x96, 0x4d, 0x59, + 0x97, 0x4e, 0x5a, 0x97, 0x4f, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9b, 0x50, 0x5c, 0x9c, + 0x50, 0x5d, 0x9d, 0x53, 0x44, 0x63, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x36, 0x1e, 0x21, 0x58, 0x2d, 0x30, 0x5a, 0x2e, 0x31, 0x5c, 0x30, + 0x32, 0x64, 0x34, 0x35, 0x6b, 0x37, 0x37, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, 0x73, 0x3c, 0x3b, + 0x75, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7b, 0x3f, 0x3f, 0x93, 0x62, 0x63, 0xdc, 0xd3, 0xd5, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xd6, 0xde, + 0xec, 0xa0, 0xae, 0xd4, 0x7d, 0x8f, 0xc5, 0x62, 0x78, 0xba, 0x63, 0x78, 0xba, 0x65, 0x79, 0xbb, + 0x66, 0x7a, 0xbb, 0x67, 0x7b, 0xbc, 0x67, 0x7b, 0xbc, 0x68, 0x7d, 0xbd, 0x69, 0x7d, 0xbd, 0x6a, + 0x7e, 0xbd, 0x6c, 0x72, 0xa1, 0x5e, 0x37, 0x36, 0x5c, 0x36, 0x36, 0x5a, 0x35, 0x35, 0x59, 0x34, + 0x34, 0x58, 0x34, 0x33, 0x67, 0x42, 0x41, 0xa5, 0x7d, 0x79, 0xd5, 0xad, 0xa8, 0xd9, 0xb6, 0xb1, + 0xdc, 0xbe, 0xba, 0xe0, 0xc7, 0xc4, 0xe5, 0xd5, 0xd4, 0xec, 0xe6, 0xe7, 0xef, 0xef, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xd1, 0xd6, 0xe2, + 0xa5, 0xac, 0xc6, 0x79, 0x83, 0xa9, 0x4e, 0x58, 0x8b, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, + 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3d, 0x43, + 0x70, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, 0x31, 0x19, 0x19, + 0xe5, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, + 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, + 0xe5, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe5, 0xe4, 0xe5, 0xe5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe4, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe4, 0xe4, 0xe4, 0x65, 0x6f, 0x9e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x49, + 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x4d, 0x58, + 0x95, 0x4d, 0x59, 0x97, 0x4e, 0x5a, 0x97, 0x4e, 0x5b, 0x99, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9a, + 0x50, 0x5c, 0x9b, 0x52, 0x43, 0x63, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x35, 0x1e, 0x22, 0x57, 0x2e, 0x30, 0x59, 0x2f, 0x31, 0x5c, 0x30, + 0x32, 0x63, 0x33, 0x34, 0x69, 0x36, 0x36, 0x6c, 0x38, 0x38, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, + 0x73, 0x3c, 0x3c, 0x76, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x86, 0x4c, 0x4c, 0xc0, + 0xa7, 0xa8, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xdf, 0xe5, 0xef, 0xb1, 0xbd, 0xdc, 0x7b, 0x8e, 0xc5, + 0x61, 0x76, 0xb9, 0x63, 0x77, 0xba, 0x63, 0x78, 0xba, 0x64, 0x79, 0xbb, 0x65, 0x7a, 0xbb, 0x66, + 0x7b, 0xbc, 0x68, 0x6e, 0x9e, 0x5c, 0x35, 0x35, 0x5a, 0x35, 0x34, 0x58, 0x33, 0x33, 0x5f, 0x3a, + 0x39, 0x95, 0x6f, 0x6c, 0xce, 0xa7, 0xa2, 0xd9, 0xb7, 0xb2, 0xde, 0xc2, 0xbf, 0xe6, 0xd6, 0xd5, + 0xeb, 0xe5, 0xe5, 0xf0, 0xf3, 0xf4, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xd1, 0xd7, 0xe3, 0xa6, 0xae, 0xc7, 0x7b, 0x84, 0xab, 0x50, 0x5a, 0x8e, 0x44, 0x4f, 0x86, + 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, + 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3b, 0x3d, + 0x63, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x1a, 0x31, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x47, 0x32, 0x32, + 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe4, 0xe4, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0x6e, 0x77, 0xa2, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, + 0x56, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, + 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5b, 0x98, 0x4f, 0x5b, 0x9a, + 0x4f, 0x5b, 0x9a, 0x52, 0x43, 0x62, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x35, 0x1f, 0x22, 0x57, 0x2e, 0x31, 0x59, 0x2f, 0x32, 0x5c, 0x31, + 0x33, 0x61, 0x33, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x36, 0x6c, 0x38, 0x38, 0x6f, 0x39, 0x39, + 0x71, 0x3b, 0x3a, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x7f, + 0x41, 0x41, 0xa4, 0x7a, 0x7b, 0xea, 0xea, 0xec, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xdf, 0xe5, 0xef, 0xb1, 0xbd, 0xdc, 0x7a, 0x8d, 0xc4, 0x5f, 0x76, 0xb9, 0x60, 0x76, 0xb9, 0x62, + 0x77, 0xba, 0x64, 0x6b, 0x9c, 0x59, 0x33, 0x33, 0x5f, 0x3a, 0x3a, 0x96, 0x6f, 0x6c, 0xce, 0xa8, + 0xa3, 0xdd, 0xc2, 0xbe, 0xe5, 0xd5, 0xd4, 0xec, 0xe8, 0xe9, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xdc, 0xe1, 0xea, 0xb2, 0xb9, 0xd0, 0x87, 0x90, 0xb5, 0x5c, 0x67, + 0x99, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, 0x45, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x85, + 0x42, 0x4d, 0x83, 0x42, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, + 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7a, 0x3b, 0x3c, + 0x62, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x5d, 0x4c, 0x4c, + 0xe3, 0xe3, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe2, 0xe2, 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, + 0xe3, 0xe2, 0xe2, 0xe2, 0xe3, 0xe2, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, + 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe2, 0xe2, 0xe2, + 0xe3, 0xe2, 0xe3, 0x6d, 0x76, 0xa1, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, + 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, + 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5a, 0x98, + 0x4f, 0x5b, 0x99, 0x52, 0x42, 0x62, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x35, 0x1f, 0x22, 0x57, 0x2f, 0x31, 0x59, 0x30, 0x33, 0x5c, 0x32, + 0x34, 0x5f, 0x33, 0x35, 0x65, 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x37, 0x6d, 0x38, 0x38, + 0x6f, 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, 0x3f, 0x3f, 0x7d, + 0x40, 0x40, 0x80, 0x41, 0x41, 0x89, 0x4e, 0x4e, 0xd6, 0xc9, 0xca, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xdf, 0xe5, 0xef, 0xb1, 0xbd, 0xdb, 0x8c, + 0x9d, 0xcc, 0x66, 0x6e, 0xa1, 0x96, 0x70, 0x6d, 0xd6, 0xbd, 0xba, 0xe6, 0xd8, 0xd7, 0xee, 0xee, + 0xef, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xdd, 0xe1, 0xeb, 0xb3, 0xba, 0xd1, 0x89, + 0x92, 0xb7, 0x5f, 0x6a, 0x9d, 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, + 0x8a, 0x45, 0x51, 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, + 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4c, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, + 0x4a, 0x7d, 0x3f, 0x4a, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3a, 0x3c, + 0x61, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x5c, 0x4c, 0x4b, + 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe2, 0xe3, 0xe3, 0xe2, 0xe2, 0xe3, + 0xe2, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, + 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe1, 0xe1, + 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe1, 0xe1, 0xe1, + 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe2, 0xe1, 0xe1, 0xe2, 0xe1, 0xe2, 0xe1, 0xe2, 0xe1, + 0xe1, 0xe1, 0xe2, 0x6c, 0x76, 0xa1, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, + 0x54, 0x8e, 0x49, 0x54, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, + 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, + 0x4e, 0x5a, 0x98, 0x51, 0x42, 0x61, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x35, 0x1f, 0x23, 0x58, 0x30, 0x32, 0x5a, 0x31, 0x33, 0x5c, 0x32, + 0x34, 0x5f, 0x33, 0x35, 0x63, 0x33, 0x33, 0x65, 0x34, 0x34, 0x68, 0x36, 0x35, 0x6a, 0x37, 0x37, + 0x6d, 0x38, 0x38, 0x6f, 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, + 0x3f, 0x3f, 0x7d, 0x40, 0x40, 0x80, 0x42, 0x42, 0x83, 0x43, 0x43, 0xb4, 0x91, 0x92, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xef, 0xf1, 0xf2, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xe7, 0xeb, 0xf1, + 0xbe, 0xc5, 0xd9, 0x95, 0x9e, 0xc0, 0x6c, 0x76, 0xa7, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, + 0x56, 0x90, 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8c, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, + 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, + 0x41, 0x4d, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, + 0x49, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x79, 0x3d, 0x47, 0x78, 0x3a, 0x3b, + 0x60, 0x31, 0x19, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x5c, 0x4b, 0x4a, + 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe1, 0xe2, 0xe1, 0xe1, 0xe1, 0xe2, + 0xe1, 0xe1, 0xe1, 0xe2, 0xe1, 0xe1, 0xe1, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, + 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xe1, 0xe1, 0xe0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe1, 0xe1, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, + 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe1, 0x8a, 0x90, 0xb0, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, + 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, + 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x94, 0x4d, 0x59, 0x96, + 0x4d, 0x59, 0x97, 0x51, 0x42, 0x60, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x35, 0x20, 0x23, 0x57, 0x31, 0x33, 0x59, 0x32, 0x34, 0x5c, 0x33, + 0x35, 0x5e, 0x33, 0x35, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x34, 0x34, 0x68, 0x36, 0x36, + 0x6b, 0x37, 0x37, 0x6d, 0x39, 0x38, 0x70, 0x3a, 0x3a, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, 0x78, + 0x3e, 0x3e, 0x7b, 0x3f, 0x3f, 0x7e, 0x40, 0x40, 0x80, 0x42, 0x42, 0x83, 0x43, 0x43, 0x9a, 0x65, + 0x66, 0xdd, 0xd4, 0xd6, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, + 0xf7, 0xe7, 0xec, 0xf2, 0xbf, 0xc6, 0xdb, 0x97, 0x9f, 0xc4, 0x6e, 0x79, 0xab, 0x4f, 0x5b, 0x98, + 0x4e, 0x5a, 0x96, 0x4d, 0x59, 0x94, 0x4c, 0x58, 0x92, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x8f, 0x49, + 0x55, 0x8e, 0x48, 0x53, 0x8c, 0x46, 0x52, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x50, 0x88, 0x44, 0x4f, + 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, + 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, + 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x37, 0x32, + 0x4e, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, 0x5b, 0x4a, 0x4a, + 0xe1, 0xe1, 0xe0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe1, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xe1, 0xe0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe1, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xdf, 0xe0, 0xdf, 0xe0, 0xdf, 0xe0, 0xe0, 0xdf, + 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, + 0xe0, 0xdf, 0xe0, 0xdf, 0xe0, 0xdf, 0xe0, 0xdf, 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0x92, 0x98, 0xb4, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, + 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, + 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, + 0x4d, 0x59, 0x95, 0x4e, 0x4d, 0x7b, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x25, 0x18, 0x1c, 0x58, 0x31, 0x33, 0x59, 0x32, 0x34, 0x5c, 0x33, + 0x35, 0x5e, 0x33, 0x35, 0x5f, 0x30, 0x31, 0x61, 0x32, 0x32, 0x64, 0x33, 0x33, 0x66, 0x35, 0x35, + 0x69, 0x36, 0x36, 0x6b, 0x37, 0x37, 0x6e, 0x39, 0x39, 0x70, 0x3a, 0x3a, 0x73, 0x3b, 0x3b, 0x75, + 0x3d, 0x3d, 0x78, 0x3e, 0x3e, 0x7b, 0x3f, 0x3f, 0x7e, 0x41, 0x41, 0x81, 0x42, 0x42, 0x84, 0x43, + 0x43, 0x8d, 0x4f, 0x50, 0xc3, 0xa8, 0xa9, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, + 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xca, 0xd0, 0xe2, 0xa2, 0xab, 0xcc, 0x70, 0x7b, + 0xb0, 0x51, 0x5e, 0x9e, 0x51, 0x5d, 0x9c, 0x50, 0x5c, 0x9a, 0x4f, 0x5a, 0x98, 0x4e, 0x5a, 0x96, + 0x4d, 0x58, 0x94, 0x4c, 0x58, 0x92, 0x4b, 0x56, 0x90, 0x4a, 0x55, 0x8f, 0x49, 0x54, 0x8d, 0x47, + 0x53, 0x8c, 0x46, 0x52, 0x8a, 0x46, 0x51, 0x89, 0x45, 0x50, 0x87, 0x44, 0x4f, 0x86, 0x43, 0x4f, + 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, + 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, + 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x36, 0x2f, + 0x47, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x86, 0x7b, 0x7b, + 0xe0, 0xdf, 0xdf, 0xe0, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xdf, 0xdf, 0xe0, 0xdf, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, + 0xe0, 0xe0, 0xdf, 0xe0, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xe0, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xdf, 0xde, 0xde, + 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xdf, 0xde, + 0xde, 0xde, 0xdf, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0x91, 0x97, 0xb3, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, + 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, + 0x8f, 0x49, 0x56, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, + 0x4c, 0x58, 0x94, 0x4e, 0x4c, 0x7a, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x25, 0x18, 0x1c, 0x58, 0x32, 0x34, 0x5a, 0x33, 0x35, 0x5c, 0x34, + 0x37, 0x5e, 0x34, 0x36, 0x5d, 0x2f, 0x30, 0x5f, 0x31, 0x31, 0x62, 0x32, 0x32, 0x64, 0x33, 0x34, + 0x67, 0x35, 0x35, 0x69, 0x36, 0x36, 0x6c, 0x38, 0x37, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, 0x73, + 0x3c, 0x3c, 0x76, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x7f, 0x41, 0x41, 0x81, 0x42, + 0x42, 0x84, 0x43, 0x44, 0x87, 0x45, 0x45, 0xaa, 0x7c, 0x7d, 0xeb, 0xea, 0xec, 0xf1, 0xf5, 0xf7, + 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xf1, 0xf5, 0xf7, 0xca, 0xd1, 0xe4, 0xa3, + 0xac, 0xd0, 0x7c, 0x87, 0xba, 0x54, 0x61, 0xa4, 0x53, 0x60, 0xa2, 0x52, 0x5f, 0xa0, 0x51, 0x5e, + 0x9e, 0x50, 0x5d, 0x9c, 0x4f, 0x5b, 0x99, 0x4f, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4d, 0x58, 0x93, + 0x4b, 0x57, 0x92, 0x4a, 0x56, 0x90, 0x49, 0x55, 0x8f, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, + 0x52, 0x8a, 0x45, 0x51, 0x88, 0x45, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x42, 0x4d, + 0x83, 0x42, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7e, + 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, + 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x35, 0x2f, + 0x47, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x85, 0x7b, 0x7a, + 0xde, 0xdf, 0xde, 0xde, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xdf, 0xde, + 0xde, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xde, 0xdf, 0xdf, 0xdf, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xde, 0xde, 0xdd, 0xdd, 0xde, 0xde, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, + 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xde, 0xde, + 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xde, 0xde, + 0xde, 0xdd, 0xde, 0x8f, 0x96, 0xb2, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, + 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, + 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, + 0x4b, 0x57, 0x93, 0x4e, 0x4c, 0x79, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x25, 0x18, 0x1c, 0x58, 0x33, 0x35, 0x59, 0x34, 0x36, 0x5c, 0x36, + 0x37, 0x5d, 0x34, 0x36, 0x5a, 0x2e, 0x2e, 0x5d, 0x2f, 0x30, 0x60, 0x31, 0x31, 0x62, 0x32, 0x33, + 0x64, 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x36, 0x6c, 0x38, 0x38, 0x6f, 0x39, 0x39, 0x71, + 0x3b, 0x3a, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x7f, 0x41, + 0x41, 0x82, 0x42, 0x42, 0x85, 0x44, 0x44, 0x88, 0x45, 0x45, 0x91, 0x51, 0x51, 0xd8, 0xc9, 0xcb, + 0xd5, 0xdb, 0xea, 0xae, 0xb7, 0xd7, 0x88, 0x93, 0xc4, 0x57, 0x65, 0xab, 0x56, 0x63, 0xa8, 0x55, + 0x62, 0xa6, 0x54, 0x61, 0xa4, 0x53, 0x60, 0xa1, 0x52, 0x5f, 0x9f, 0x51, 0x5d, 0x9d, 0x50, 0x5d, + 0x9b, 0x4f, 0x5b, 0x99, 0x4e, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, + 0x4a, 0x56, 0x90, 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x8a, 0x45, + 0x51, 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, + 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4c, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, + 0x3f, 0x4a, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, + 0x47, 0x78, 0x3b, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x35, 0x2f, + 0x46, 0x2f, 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x85, 0x7a, 0x7a, + 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xde, 0xdd, 0xdd, 0xde, 0xdd, 0xde, 0xde, 0xde, + 0xde, 0xde, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xde, 0xde, 0xdd, 0xde, 0xdd, 0xde, 0xde, + 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdc, 0xdd, 0xdd, 0xa3, 0xa7, 0xbc, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, + 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, + 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x54, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, + 0x4b, 0x57, 0x92, 0x4d, 0x4c, 0x78, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x1d, 0x10, 0x14, 0x25, 0x18, 0x1d, 0x58, 0x35, 0x36, 0x5a, 0x36, 0x37, 0x5d, 0x37, + 0x38, 0x5d, 0x35, 0x36, 0x58, 0x2d, 0x2d, 0x5b, 0x2e, 0x2f, 0x5d, 0x30, 0x30, 0x60, 0x31, 0x31, + 0x62, 0x32, 0x33, 0x65, 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x37, 0x6d, 0x38, 0x38, 0x6f, + 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, 0x3f, 0x3f, 0x7d, 0x40, + 0x40, 0x80, 0x41, 0x41, 0x82, 0x42, 0x43, 0x85, 0x44, 0x44, 0x88, 0x45, 0x45, 0x8b, 0x46, 0x46, + 0x59, 0x67, 0xae, 0x58, 0x66, 0xac, 0x57, 0x65, 0xaa, 0x56, 0x63, 0xa8, 0x55, 0x62, 0xa5, 0x54, + 0x61, 0xa3, 0x53, 0x60, 0xa1, 0x52, 0x5f, 0x9f, 0x51, 0x5d, 0x9d, 0x50, 0x5c, 0x9b, 0x4f, 0x5b, + 0x99, 0x4e, 0x5a, 0x96, 0x4d, 0x59, 0x95, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x90, + 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, + 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, + 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, + 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x79, 0x3d, 0x47, 0x78, 0x3d, 0x46, 0x77, 0x3b, + 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x34, 0x2e, + 0x45, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x84, 0x7a, 0x7a, + 0xdd, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdc, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, + 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, + 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, + 0xdc, 0xdc, 0xdc, 0xb5, 0xb8, 0xc6, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, + 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, + 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, + 0x4a, 0x56, 0x91, 0x4c, 0x4b, 0x78, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x34, 0x1b, 0x1a, 0x27, + 0x13, 0x14, 0x29, 0x1d, 0x20, 0x4f, 0x46, 0x48, 0x59, 0x35, 0x37, 0x5b, 0x36, 0x38, 0x5d, 0x38, + 0x39, 0x5c, 0x36, 0x37, 0x56, 0x2c, 0x2c, 0x59, 0x2d, 0x2d, 0x5b, 0x2f, 0x2f, 0x5e, 0x30, 0x30, + 0x60, 0x31, 0x32, 0x63, 0x33, 0x33, 0x65, 0x34, 0x34, 0x68, 0x36, 0x35, 0x6a, 0x37, 0x37, 0x6d, + 0x38, 0x38, 0x6f, 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, 0x3f, + 0x3f, 0x7d, 0x40, 0x40, 0x80, 0x42, 0x42, 0x83, 0x43, 0x43, 0x86, 0x44, 0x44, 0x89, 0x45, 0x45, + 0x58, 0x66, 0xac, 0x57, 0x64, 0xaa, 0x55, 0x63, 0xa7, 0x55, 0x62, 0xa5, 0x53, 0x60, 0xa3, 0x53, + 0x60, 0xa1, 0x52, 0x5e, 0x9e, 0x51, 0x5d, 0x9d, 0x50, 0x5c, 0x9a, 0x4f, 0x5b, 0x98, 0x4e, 0x5a, + 0x96, 0x4d, 0x59, 0x94, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x8f, 0x49, 0x55, 0x8e, + 0x48, 0x54, 0x8c, 0x46, 0x52, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, 0x4f, 0x86, 0x43, + 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, + 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, + 0x3e, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, + 0x45, 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x39, 0x44, 0x73, 0x39, 0x44, 0x72, 0x32, 0x26, + 0x34, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x9a, 0x91, 0x91, + 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, + 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, + 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdc, 0xdc, 0xdb, 0xdc, 0xdb, 0xdc, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, + 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, + 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, + 0xdb, 0xdb, 0xdb, 0xb4, 0xb7, 0xc5, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, + 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, + 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, + 0x49, 0x56, 0x90, 0x4c, 0x4b, 0x77, 0x4d, 0x27, 0x26, 0x40, 0x21, 0x20, 0x3a, 0x22, 0x22, 0x63, + 0x5b, 0x5c, 0x8c, 0x8e, 0x8e, 0x89, 0x89, 0x89, 0x4e, 0x2a, 0x2a, 0x50, 0x2b, 0x2b, 0x53, 0x2c, + 0x2d, 0x55, 0x2d, 0x2d, 0x55, 0x2b, 0x2b, 0x57, 0x2d, 0x2c, 0x59, 0x2d, 0x2e, 0x5c, 0x2f, 0x2f, + 0x5e, 0x30, 0x31, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x34, 0x34, 0x68, 0x36, 0x36, 0x6b, + 0x37, 0x37, 0x6d, 0x39, 0x38, 0x70, 0x3a, 0x3a, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, 0x78, 0x3e, + 0x3d, 0x7b, 0x3f, 0x3f, 0x7e, 0x40, 0x40, 0x80, 0x42, 0x42, 0x83, 0x43, 0x43, 0x86, 0x44, 0x45, + 0x56, 0x64, 0xa9, 0x55, 0x63, 0xa7, 0x54, 0x61, 0xa5, 0x53, 0x60, 0xa2, 0x53, 0x60, 0xa0, 0x51, + 0x5e, 0x9e, 0x51, 0x5d, 0x9c, 0x50, 0x5c, 0x9a, 0x4f, 0x5a, 0x98, 0x4e, 0x5a, 0x96, 0x4d, 0x58, + 0x94, 0x4c, 0x58, 0x92, 0x4a, 0x56, 0x91, 0x4a, 0x56, 0x8f, 0x49, 0x54, 0x8e, 0x47, 0x53, 0x8c, + 0x46, 0x52, 0x8a, 0x45, 0x52, 0x89, 0x45, 0x50, 0x88, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, + 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, + 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, + 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, + 0x45, 0x74, 0x3a, 0x45, 0x74, 0x39, 0x44, 0x73, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x31, 0x23, + 0x2e, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0xaf, 0xaa, 0xaa, + 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, + 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdc, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, + 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xda, 0xda, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, + 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, + 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, + 0xdb, 0xda, 0xda, 0xb3, 0xb6, 0xc4, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, + 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, + 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, + 0x49, 0x55, 0x8f, 0x4b, 0x4d, 0x7c, 0x53, 0x2f, 0x2e, 0x74, 0x65, 0x65, 0x9c, 0x9d, 0x9d, 0xa2, + 0xa5, 0xa6, 0xa2, 0xa5, 0xa6, 0xa2, 0xa5, 0xa6, 0x49, 0x24, 0x24, 0x4b, 0x26, 0x25, 0x4d, 0x27, + 0x27, 0x50, 0x29, 0x28, 0x53, 0x2a, 0x2a, 0x55, 0x2c, 0x2b, 0x57, 0x2d, 0x2c, 0x5a, 0x2e, 0x2e, + 0x5c, 0x2f, 0x30, 0x5f, 0x30, 0x31, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x35, 0x34, 0x69, + 0x36, 0x36, 0x6b, 0x37, 0x37, 0x6e, 0x39, 0x39, 0x70, 0x3a, 0x3a, 0x73, 0x3b, 0x3b, 0x75, 0x3d, + 0x3d, 0x78, 0x3e, 0x3e, 0x7b, 0x3f, 0x3f, 0x7e, 0x41, 0x41, 0x81, 0x42, 0x42, 0x84, 0x43, 0x43, + 0x55, 0x62, 0xa6, 0x54, 0x61, 0xa4, 0x53, 0x60, 0xa2, 0x52, 0x5f, 0xa0, 0x51, 0x5e, 0x9e, 0x50, + 0x5d, 0x9c, 0x4f, 0x5c, 0x99, 0x4f, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4d, 0x58, 0x94, 0x4b, 0x57, + 0x92, 0x4a, 0x56, 0x90, 0x4a, 0x55, 0x8f, 0x49, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, 0x52, 0x8a, + 0x45, 0x51, 0x89, 0x45, 0x50, 0x87, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, + 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7e, 0x40, 0x4a, + 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, + 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x74, 0x3a, + 0x45, 0x74, 0x39, 0x44, 0x72, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x30, 0x22, + 0x2d, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0xae, 0xa9, 0xa9, + 0xda, 0xda, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xda, 0xda, 0xda, 0xda, + 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xda, 0xda, 0xda, + 0xdb, 0xda, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, + 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, + 0xd9, 0xda, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, + 0xd9, 0xd9, 0xda, 0xc6, 0xc7, 0xce, 0x40, 0x4c, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, + 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x45, 0x51, + 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8d, + 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x9a, 0x9c, 0xa8, 0xb6, 0xb8, 0xba, 0xb6, 0xb8, 0xba, 0xb6, + 0xb8, 0xba, 0xb6, 0xb8, 0xba, 0xb6, 0xb8, 0xba, 0x80, 0x6f, 0x70, 0x49, 0x25, 0x24, 0x4b, 0x26, + 0x26, 0x4e, 0x27, 0x27, 0x50, 0x29, 0x29, 0x53, 0x2a, 0x2a, 0x55, 0x2c, 0x2b, 0x57, 0x2d, 0x2d, + 0x5a, 0x2e, 0x2e, 0x5c, 0x2f, 0x30, 0x5f, 0x30, 0x31, 0x62, 0x32, 0x32, 0x64, 0x33, 0x34, 0x66, + 0x35, 0x35, 0x69, 0x36, 0x36, 0x6c, 0x38, 0x37, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, 0x73, 0x3c, + 0x3c, 0x76, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x7e, 0x41, 0x41, 0x81, 0x42, 0x42, + 0x54, 0x61, 0xa4, 0x53, 0x60, 0xa2, 0x52, 0x5f, 0x9f, 0x51, 0x5e, 0x9d, 0x50, 0x5d, 0x9b, 0x4f, + 0x5b, 0x99, 0x4e, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4d, 0x58, 0x93, 0x4b, 0x57, 0x92, 0x4a, 0x56, + 0x90, 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, + 0x45, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, + 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, + 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, + 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, + 0x44, 0x72, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x6f, 0x37, 0x42, 0x6f, 0x2f, 0x22, + 0x2d, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0xad, 0xa8, 0xa8, + 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xd9, 0xda, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, + 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xd9, 0xd9, 0xd9, + 0xd9, 0xd9, 0xda, 0xd9, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd9, 0xd8, 0xd9, 0xd8, 0xd8, 0xd9, 0xd8, 0xd9, 0xd8, 0xd9, 0xd8, 0xd8, 0xd8, + 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd8, + 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd8, 0xd8, 0xd9, 0xd9, 0xd8, 0xd8, 0xd9, 0xd8, 0xd9, 0xd9, + 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, + 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, + 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, + 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x54, 0x8f, 0x5f, 0x6a, 0x99, 0x95, 0x9c, 0xb3, 0xbd, + 0xc0, 0xc6, 0xc5, 0xc8, 0xca, 0xc5, 0xc8, 0xca, 0xc5, 0xc8, 0xca, 0x97, 0x8b, 0x8d, 0x52, 0x2f, + 0x2f, 0x4c, 0x26, 0x26, 0x4e, 0x28, 0x27, 0x51, 0x29, 0x29, 0x53, 0x2a, 0x2a, 0x55, 0x2c, 0x2c, + 0x58, 0x2d, 0x2d, 0x5a, 0x2e, 0x2e, 0x5d, 0x2f, 0x30, 0x60, 0x31, 0x31, 0x62, 0x32, 0x33, 0x64, + 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x36, 0x6c, 0x38, 0x38, 0x6f, 0x39, 0x39, 0x71, 0x3b, + 0x3a, 0x73, 0x3c, 0x3c, 0x76, 0x3d, 0x3d, 0x79, 0x3e, 0x3e, 0x7c, 0x40, 0x40, 0x7f, 0x41, 0x41, + 0x53, 0x60, 0xa1, 0x52, 0x5f, 0x9f, 0x51, 0x5d, 0x9d, 0x50, 0x5c, 0x9b, 0x4f, 0x5b, 0x99, 0x4e, + 0x5a, 0x96, 0x4d, 0x59, 0x95, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x90, 0x49, 0x55, + 0x8e, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, 0x50, 0x87, + 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, + 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x49, + 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x79, 0x3d, 0x47, 0x79, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, + 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, 0x39, + 0x43, 0x72, 0x38, 0x42, 0x70, 0x38, 0x42, 0x6f, 0x37, 0x42, 0x6f, 0x36, 0x41, 0x6e, 0x2f, 0x21, + 0x2d, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0xad, 0xa8, 0xa8, + 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd8, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd8, + 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd8, 0xd8, 0xd9, 0xd9, 0xd8, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, + 0xd9, 0xd9, 0xd9, 0xd9, 0xd8, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd9, 0xd8, 0xd8, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd8, 0xd8, 0xd8, 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd7, + 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd8, 0xd7, 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, + 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, + 0xd7, 0xd7, 0xd8, 0xd7, 0xd8, 0xd7, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, + 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, + 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, + 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x90, 0x51, + 0x5d, 0x94, 0x7b, 0x84, 0xaa, 0xb7, 0xbb, 0xc9, 0xd1, 0xd4, 0xd7, 0xd1, 0xd4, 0xd7, 0xb8, 0xb3, + 0xb6, 0x5b, 0x3c, 0x3c, 0x4c, 0x27, 0x26, 0x4f, 0x28, 0x28, 0x51, 0x29, 0x29, 0x54, 0x2b, 0x2b, + 0x56, 0x2c, 0x2c, 0x58, 0x2d, 0x2d, 0x5b, 0x2e, 0x2f, 0x5d, 0x30, 0x30, 0x60, 0x31, 0x31, 0x62, + 0x32, 0x33, 0x65, 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x37, 0x6c, 0x38, 0x38, 0x6f, 0x3a, + 0x39, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, 0x3f, 0x3f, 0x7d, 0x40, 0x40, + 0x52, 0x5e, 0x9f, 0x51, 0x5d, 0x9d, 0x50, 0x5c, 0x9a, 0x4f, 0x5b, 0x98, 0x4e, 0x5a, 0x96, 0x4d, + 0x59, 0x94, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x8f, 0x49, 0x55, 0x8e, 0x48, 0x54, + 0x8c, 0x47, 0x52, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, + 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, + 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, + 0x7a, 0x3d, 0x48, 0x79, 0x3d, 0x47, 0x78, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, 0x3b, 0x45, 0x76, + 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, 0x38, 0x43, 0x71, 0x38, + 0x42, 0x70, 0x38, 0x42, 0x6f, 0x37, 0x42, 0x6f, 0x36, 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x2c, 0x16, + 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0xd7, 0xd8, 0xd8, + 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, 0xd8, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, + 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd7, 0xd7, 0xd8, 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, + 0xd7, 0xd8, 0xd7, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd7, 0xd7, 0xd8, 0xd8, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd7, 0xd6, 0xd6, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, + 0xd7, 0xd6, 0xd7, 0xd6, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, + 0xd6, 0xd7, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd6, 0xd7, + 0xd6, 0xd7, 0xd6, 0xd7, 0xd7, 0xd6, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, + 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, + 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, + 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x5c, 0x67, 0x9c, 0x9a, 0xa2, 0xbe, 0xd0, 0xd5, + 0xdd, 0xd1, 0xd2, 0xd6, 0x6f, 0x54, 0x55, 0x4c, 0x27, 0x26, 0x4f, 0x28, 0x28, 0x52, 0x2a, 0x29, + 0x54, 0x2b, 0x2b, 0x56, 0x2c, 0x2c, 0x59, 0x2d, 0x2d, 0x5b, 0x2f, 0x2f, 0x5e, 0x30, 0x30, 0x60, + 0x31, 0x32, 0x63, 0x33, 0x33, 0x65, 0x34, 0x34, 0x68, 0x36, 0x35, 0x6a, 0x37, 0x37, 0x6d, 0x38, + 0x38, 0x6f, 0x3a, 0x39, 0x72, 0x3b, 0x3b, 0x74, 0x3c, 0x3c, 0x77, 0x3d, 0x3d, 0x7a, 0x3f, 0x3f, + 0x51, 0x5d, 0x9c, 0x50, 0x5c, 0x9a, 0x4f, 0x5b, 0x98, 0x4e, 0x5a, 0x96, 0x4d, 0x58, 0x94, 0x4c, + 0x58, 0x92, 0x4a, 0x56, 0x91, 0x4a, 0x56, 0x8f, 0x49, 0x55, 0x8e, 0x48, 0x53, 0x8c, 0x46, 0x52, + 0x8a, 0x45, 0x52, 0x89, 0x45, 0x50, 0x88, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, + 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, + 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, + 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x75, + 0x3a, 0x45, 0x74, 0x39, 0x44, 0x73, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x38, + 0x42, 0x6f, 0x37, 0x41, 0x6e, 0x36, 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x36, 0x40, 0x6c, 0x2c, 0x16, + 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0xd6, 0xd6, 0xd6, + 0xd6, 0xd7, 0xd6, 0xd7, 0xd6, 0xd7, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, + 0xd6, 0xd6, 0xd7, 0xd6, 0xd7, 0xd7, 0xd7, 0xd6, 0xd7, 0xd7, 0xd6, 0xd6, 0xd7, 0xd6, 0xd6, 0xd6, + 0xd7, 0xd7, 0xd7, 0xd6, 0xd6, 0xd6, 0xd7, 0xd6, 0xd6, 0xd7, 0xd7, 0xd6, 0xd7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd5, 0xd6, 0xd5, 0xd6, 0xd5, 0xd6, + 0xd5, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, + 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd5, 0xd6, 0xd5, + 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0x48, 0x54, 0x86, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, + 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, + 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, + 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, + 0x93, 0x83, 0x8c, 0xb3, 0xbb, 0xc1, 0xd3, 0x8c, 0x7a, 0x7b, 0x4d, 0x27, 0x27, 0x50, 0x28, 0x28, + 0x52, 0x2a, 0x29, 0x55, 0x2b, 0x2b, 0x57, 0x2d, 0x2c, 0x59, 0x2d, 0x2d, 0x5c, 0x2f, 0x2f, 0x5e, + 0x30, 0x31, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x34, 0x34, 0x68, 0x36, 0x36, 0x6b, 0x37, + 0x37, 0x6d, 0x39, 0x38, 0x70, 0x3a, 0x3a, 0x72, 0x3b, 0x3b, 0x75, 0x3c, 0x3c, 0x78, 0x3e, 0x3e, + 0x50, 0x5c, 0x9a, 0x4f, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4d, 0x58, 0x94, 0x4c, 0x57, 0x92, 0x4a, + 0x56, 0x90, 0x4a, 0x55, 0x8f, 0x49, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, 0x52, 0x8a, 0x46, 0x51, + 0x89, 0x45, 0x50, 0x87, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x82, + 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, + 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, + 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x74, 0x3a, 0x45, 0x74, + 0x39, 0x44, 0x72, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x37, 0x42, 0x6f, 0x37, + 0x41, 0x6e, 0x36, 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x35, 0x40, 0x6b, 0x35, 0x3f, 0x6a, 0x2b, 0x16, + 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0xd5, 0xd5, 0xd6, + 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, + 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, + 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd5, 0xd6, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xd5, 0xd5, + 0xd4, 0xd5, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xd5, 0xd5, 0xd5, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, + 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x65, 0x6e, 0x96, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, 0x4c, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, + 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, + 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, + 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, + 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x5f, 0x6a, 0x9f, 0x4b, 0x30, 0x3a, 0x4d, 0x27, 0x27, + 0x50, 0x29, 0x28, 0x52, 0x2a, 0x2a, 0x55, 0x2b, 0x2b, 0x57, 0x2d, 0x2c, 0x59, 0x2e, 0x2e, 0x5c, + 0x2f, 0x2f, 0x5e, 0x30, 0x31, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x35, 0x34, 0x68, 0x36, + 0x36, 0x6b, 0x37, 0x37, 0x6e, 0x39, 0x39, 0x70, 0x3a, 0x3a, 0x73, 0x3b, 0x3b, 0x75, 0x3d, 0x3c, + 0x4e, 0x5a, 0x97, 0x4e, 0x59, 0x95, 0x4d, 0x58, 0x93, 0x4b, 0x57, 0x92, 0x4a, 0x56, 0x90, 0x49, + 0x55, 0x8f, 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, 0x45, 0x50, + 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x42, 0x4d, 0x82, 0x41, 0x4d, 0x81, + 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7d, 0x3e, + 0x49, 0x7c, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, + 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, + 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x37, 0x42, 0x6f, 0x36, 0x41, 0x6e, 0x36, + 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x35, 0x3f, 0x6b, 0x35, 0x3f, 0x6a, 0x35, 0x3f, 0x6a, 0x2b, 0x16, + 0x16, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x28, 0x14, 0x14, 0xd5, 0xd5, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, + 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, + 0xd4, 0xd4, 0xd5, 0xd4, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, + 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0x64, 0x6d, 0x96, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, + 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, + 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, + 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, + 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x39, 0x4f, + 0x4e, 0x27, 0x27, 0x50, 0x29, 0x29, 0x53, 0x2a, 0x2a, 0x55, 0x2c, 0x2b, 0x57, 0x2d, 0x2d, 0x5a, + 0x2e, 0x2e, 0x5c, 0x2f, 0x30, 0x5f, 0x30, 0x31, 0x61, 0x32, 0x32, 0x64, 0x33, 0x33, 0x66, 0x35, + 0x35, 0x69, 0x36, 0x36, 0x6b, 0x38, 0x37, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, 0x73, 0x3c, 0x3c, + 0x4d, 0x59, 0x95, 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x90, 0x49, 0x55, 0x8e, 0x48, + 0x54, 0x8d, 0x47, 0x53, 0x8b, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, + 0x86, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4b, 0x80, + 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, + 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, 0x3b, 0x46, + 0x76, 0x3b, 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, 0x39, 0x43, 0x72, + 0x38, 0x42, 0x70, 0x38, 0x42, 0x6f, 0x37, 0x42, 0x6f, 0x36, 0x41, 0x6e, 0x36, 0x41, 0x6d, 0x36, + 0x40, 0x6c, 0x35, 0x3f, 0x6b, 0x35, 0x3f, 0x6a, 0x35, 0x3f, 0x6a, 0x34, 0x3e, 0x68, 0x2a, 0x15, + 0x15, 0x29, 0x14, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x3d, 0x2b, 0x2c, 0xd4, 0xd4, 0xd4, + 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd4, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd4, 0xd4, + 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, + 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd4, 0xd4, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd3, 0xd4, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, 0xd4, + 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd4, 0xd3, + 0xd3, 0xd4, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, + 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0x64, 0x6d, 0x96, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, + 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, + 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x54, 0x8e, 0x49, 0x55, + 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, + 0x4d, 0x46, 0x6b, 0x4e, 0x28, 0x27, 0x51, 0x29, 0x29, 0x53, 0x2a, 0x2a, 0x55, 0x2c, 0x2c, 0x58, + 0x2d, 0x2d, 0x5a, 0x2e, 0x2e, 0x5d, 0x2f, 0x30, 0x5f, 0x31, 0x31, 0x62, 0x32, 0x33, 0x64, 0x34, + 0x34, 0x67, 0x35, 0x35, 0x69, 0x36, 0x36, 0x6c, 0x38, 0x38, 0x6e, 0x39, 0x39, 0x71, 0x3a, 0x3a, + 0x4c, 0x58, 0x93, 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x90, 0x49, 0x55, 0x8e, 0x48, 0x54, 0x8c, 0x47, + 0x52, 0x8b, 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, 0x4f, 0x87, 0x43, 0x4f, 0x85, 0x43, 0x4e, + 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, + 0x40, 0x4b, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, + 0x48, 0x79, 0x3d, 0x47, 0x78, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, + 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, + 0x38, 0x42, 0x6f, 0x37, 0x42, 0x6f, 0x36, 0x41, 0x6e, 0x36, 0x40, 0x6d, 0x36, 0x40, 0x6c, 0x35, + 0x3f, 0x6b, 0x35, 0x3f, 0x6a, 0x34, 0x3f, 0x69, 0x33, 0x3e, 0x68, 0x2f, 0x2c, 0x44, 0x29, 0x14, + 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x27, 0x13, 0x14, 0x52, 0x43, 0x44, 0xd3, 0xd4, 0xd3, + 0xd3, 0xd3, 0xd4, 0xd4, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, + 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd3, + 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd2, 0xd3, 0xd2, 0xd2, 0xd2, 0xd3, 0xd2, 0xd3, 0xd3, 0xd2, 0xd3, 0xd2, 0xd2, + 0xd3, 0xd3, 0xd2, 0xd2, 0xd3, 0xd2, 0xd3, 0xd3, 0xd3, 0xd2, 0xd3, 0xd2, 0xd3, 0xd3, 0xd3, 0xd3, + 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd2, 0xd2, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, + 0xd2, 0xd3, 0xd3, 0xd2, 0xd3, 0xd2, 0x6d, 0x75, 0x9b, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, + 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, + 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, + 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, + 0x4c, 0x58, 0x94, 0x4d, 0x4f, 0x80, 0x4f, 0x2b, 0x2e, 0x51, 0x29, 0x29, 0x54, 0x2b, 0x2b, 0x56, + 0x2c, 0x2c, 0x58, 0x2d, 0x2d, 0x5b, 0x2e, 0x2f, 0x5d, 0x2f, 0x30, 0x60, 0x31, 0x31, 0x62, 0x32, + 0x33, 0x65, 0x34, 0x34, 0x67, 0x35, 0x35, 0x6a, 0x37, 0x36, 0x6c, 0x38, 0x38, 0x6f, 0x3a, 0x39, + 0x4b, 0x57, 0x91, 0x4a, 0x56, 0x8f, 0x49, 0x55, 0x8e, 0x48, 0x53, 0x8c, 0x46, 0x52, 0x8b, 0x46, + 0x52, 0x89, 0x45, 0x50, 0x88, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, + 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, + 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, + 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x75, 0x3a, 0x45, + 0x74, 0x39, 0x44, 0x73, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x38, 0x42, 0x6f, + 0x37, 0x42, 0x6e, 0x36, 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x36, 0x40, 0x6c, 0x35, 0x3f, 0x6b, 0x34, + 0x3a, 0x60, 0x31, 0x30, 0x4a, 0x2e, 0x23, 0x30, 0x2b, 0x18, 0x1a, 0x2a, 0x15, 0x15, 0x29, 0x14, + 0x15, 0x28, 0x14, 0x14, 0x27, 0x13, 0x14, 0x27, 0x13, 0x14, 0x51, 0x42, 0x43, 0xd3, 0xd3, 0xd2, + 0xd2, 0xd3, 0xd2, 0xd2, 0xd2, 0xd3, 0xd2, 0xd2, 0xd2, 0xd3, 0xd2, 0xd2, 0xd3, 0xd3, 0xd2, 0xd3, + 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd2, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, + 0xd3, 0xd2, 0xd3, 0xd2, 0xd2, 0xd3, 0xd3, 0xd2, 0xd2, 0xd3, 0xd2, 0xd2, 0xd2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd2, 0xd2, 0xd1, 0xd1, + 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd2, 0xd1, 0xd2, 0xd1, 0xd2, + 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd2, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, + 0xd2, 0xd2, 0xd2, 0xd1, 0xd2, 0xd1, 0x88, 0x8e, 0xa9, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, + 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, + 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x47, 0x53, + 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, + 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x55, 0x8d, 0x4f, 0x31, 0x3c, 0x52, 0x2a, 0x29, 0x54, + 0x2b, 0x2b, 0x56, 0x2c, 0x2c, 0x59, 0x2d, 0x2d, 0x5b, 0x2f, 0x2f, 0x5e, 0x30, 0x30, 0x60, 0x31, + 0x32, 0x63, 0x33, 0x33, 0x65, 0x34, 0x34, 0x68, 0x36, 0x35, 0x6a, 0x37, 0x37, 0x6d, 0x38, 0x38, + 0x4a, 0x55, 0x8f, 0x49, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, 0x52, 0x8a, 0x46, 0x51, 0x89, 0x45, + 0x50, 0x87, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, + 0x81, 0x41, 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, + 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, + 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x74, 0x3a, 0x45, 0x74, 0x39, 0x44, + 0x73, 0x39, 0x43, 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x37, 0x42, 0x6f, 0x37, 0x41, 0x6e, + 0x36, 0x41, 0x6d, 0x36, 0x40, 0x6d, 0x33, 0x36, 0x57, 0x30, 0x29, 0x3c, 0x2e, 0x1e, 0x26, 0x2c, + 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, + 0x14, 0x27, 0x13, 0x14, 0x27, 0x13, 0x14, 0x26, 0x12, 0x13, 0x50, 0x42, 0x43, 0xd2, 0xd2, 0xd2, + 0xd2, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd2, 0xd1, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, + 0xd2, 0xd1, 0xd2, 0xd2, 0xd1, 0xd1, 0xd2, 0xd2, 0xd1, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd2, + 0xd2, 0xd1, 0xd2, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, + 0xd0, 0xd0, 0xd1, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd0, 0xd1, 0xd0, + 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd0, 0xd1, 0xd1, 0xd0, 0xd1, + 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0x88, 0x8e, 0xa8, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, 0x4c, 0x82, 0x40, 0x4c, 0x83, + 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, + 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, + 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x49, 0x56, 0x91, + 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x4f, 0x3a, 0x51, 0x52, + 0x2a, 0x29, 0x54, 0x2b, 0x2b, 0x56, 0x2c, 0x2c, 0x59, 0x2d, 0x2d, 0x5c, 0x2f, 0x2f, 0x5e, 0x30, + 0x31, 0x61, 0x31, 0x32, 0x63, 0x33, 0x33, 0x66, 0x34, 0x34, 0x68, 0x36, 0x36, 0x6b, 0x37, 0x37, + 0x48, 0x54, 0x8d, 0x47, 0x53, 0x8c, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, 0x45, 0x50, 0x87, 0x43, + 0x4f, 0x86, 0x43, 0x4e, 0x85, 0x42, 0x4d, 0x83, 0x42, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x41, 0x4c, + 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, + 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, 0x3b, + 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x74, 0x3a, 0x45, 0x74, 0x39, 0x44, 0x72, 0x39, 0x43, + 0x72, 0x38, 0x43, 0x71, 0x38, 0x42, 0x70, 0x37, 0x42, 0x6f, 0x36, 0x3f, 0x69, 0x33, 0x32, 0x4d, + 0x31, 0x27, 0x38, 0x2e, 0x1a, 0x1c, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, + 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x28, 0x14, + 0x14, 0x27, 0x13, 0x14, 0x26, 0x12, 0x13, 0x51, 0x42, 0x43, 0xbb, 0xb9, 0xb9, 0xd1, 0xd1, 0xd1, + 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd1, + 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd1, 0xd1, 0xd1, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xd0, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xd0, + 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, + 0xd0, 0xcf, 0xd0, 0xcf, 0xd0, 0xd0, 0x87, 0x8d, 0xa8, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, 0x4c, 0x82, + 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x86, 0x43, + 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, + 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, + 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4e, + 0x46, 0x6c, 0x52, 0x2a, 0x2a, 0x55, 0x2b, 0x2b, 0x57, 0x2d, 0x2c, 0x59, 0x2e, 0x2e, 0x5c, 0x2f, + 0x2f, 0x5e, 0x30, 0x31, 0x61, 0x32, 0x32, 0x63, 0x33, 0x33, 0x66, 0x34, 0x34, 0x68, 0x36, 0x36, + 0x47, 0x53, 0x8b, 0x46, 0x52, 0x8a, 0x45, 0x51, 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, + 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4c, 0x80, 0x40, 0x4b, + 0x7f, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, + 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, + 0x45, 0x75, 0x3a, 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x44, 0x72, 0x39, 0x43, 0x72, 0x38, 0x43, + 0x71, 0x37, 0x3a, 0x5f, 0x34, 0x2e, 0x44, 0x31, 0x21, 0x28, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, + 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, + 0x16, 0x16, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x28, 0x14, 0x14, 0x27, 0x13, + 0x14, 0x31, 0x1e, 0x1f, 0x90, 0x88, 0x89, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xd0, 0xcf, 0xd0, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xd0, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, + 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x90, 0x95, 0xad, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, + 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, + 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x54, 0x8f, + 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, + 0x58, 0x94, 0x4e, 0x4f, 0x80, 0x53, 0x2d, 0x31, 0x55, 0x2c, 0x2b, 0x57, 0x2d, 0x2d, 0x5a, 0x2e, + 0x2e, 0x5c, 0x2f, 0x30, 0x5f, 0x30, 0x31, 0x61, 0x32, 0x32, 0x64, 0x33, 0x33, 0x66, 0x35, 0x35, + 0x46, 0x52, 0x89, 0x45, 0x51, 0x88, 0x44, 0x50, 0x87, 0x43, 0x4f, 0x86, 0x43, 0x4e, 0x84, 0x42, + 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, + 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3d, 0x48, 0x79, + 0x3d, 0x47, 0x78, 0x3d, 0x46, 0x77, 0x3b, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3a, + 0x45, 0x74, 0x3a, 0x44, 0x73, 0x39, 0x41, 0x6d, 0x36, 0x34, 0x51, 0x34, 0x29, 0x3a, 0x31, 0x1c, + 0x1e, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, + 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, + 0x15, 0x15, 0x29, 0x14, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x27, 0x13, 0x14, 0x5b, 0x4d, + 0x4e, 0xc4, 0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xd0, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcf, 0xce, 0xcf, 0xcf, 0xce, 0xcf, 0xce, 0xce, 0xce, 0xcf, 0xce, 0xce, 0xce, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xce, 0xce, 0xcf, 0xcf, + 0xce, 0xce, 0xcf, 0xce, 0xce, 0xce, 0xcf, 0xce, 0xcf, 0xcf, 0xce, 0xce, 0xcf, 0xce, 0xce, 0xce, + 0xce, 0xcf, 0xcf, 0xce, 0xce, 0xce, 0xaa, 0xae, 0xbb, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, + 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, + 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, + 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, + 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x55, 0x8e, 0x52, 0x33, 0x3e, 0x55, 0x2c, 0x2c, 0x58, 0x2d, + 0x2d, 0x5a, 0x2e, 0x2e, 0x5d, 0x2f, 0x30, 0x5f, 0x31, 0x31, 0x62, 0x32, 0x32, 0x64, 0x34, 0x34, + 0x45, 0x50, 0x88, 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, + 0x4d, 0x82, 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x3f, 0x4a, + 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, + 0x3c, 0x46, 0x77, 0x3b, 0x46, 0x76, 0x3b, 0x45, 0x75, 0x3b, 0x45, 0x75, 0x39, 0x3d, 0x63, 0x37, + 0x32, 0x4c, 0x34, 0x25, 0x30, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, + 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, + 0x2d, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x29, + 0x14, 0x15, 0x29, 0x14, 0x15, 0x28, 0x14, 0x14, 0x32, 0x1f, 0x20, 0x9a, 0x93, 0x94, 0xcf, 0xcf, + 0xcf, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xce, 0xcf, 0xcf, 0xcf, 0xce, 0xce, 0xcf, 0xce, 0xce, 0xce, + 0xcf, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, + 0xce, 0xce, 0xcf, 0xce, 0xce, 0xcf, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xce, 0xce, 0xcf, 0xce, 0xce, + 0xce, 0xcf, 0xce, 0xce, 0xcf, 0xce, 0xcf, 0xce, 0xce, 0xcf, 0xcf, 0xce, 0xce, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xce, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcd, 0xce, 0xcd, 0xcd, 0xce, 0xcd, 0xce, + 0xcd, 0xce, 0xce, 0xcd, 0xce, 0xce, 0xcd, 0xce, 0xcd, 0xce, 0xce, 0xcd, 0xce, 0xcd, 0xcd, 0xce, + 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xcd, 0xcd, 0xce, 0xce, 0xcd, 0xcd, 0xce, 0xcd, 0xcd, 0xcd, 0xcd, + 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xb2, 0xb5, 0xc0, 0x51, 0x5b, 0x8b, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, + 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, + 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, + 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, + 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x55, 0x8e, 0x51, 0x3c, 0x53, 0x56, 0x2c, + 0x2c, 0x58, 0x2d, 0x2d, 0x5b, 0x2e, 0x2f, 0x5d, 0x2f, 0x30, 0x60, 0x31, 0x31, 0x62, 0x32, 0x33, + 0x44, 0x4f, 0x86, 0x43, 0x4f, 0x85, 0x43, 0x4e, 0x84, 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x81, 0x41, + 0x4c, 0x80, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4a, 0x7e, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, + 0x7c, 0x3e, 0x48, 0x7b, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3d, 0x47, 0x78, 0x3c, 0x46, 0x77, + 0x3b, 0x43, 0x71, 0x39, 0x38, 0x59, 0x37, 0x2b, 0x3d, 0x35, 0x20, 0x26, 0x33, 0x1b, 0x1a, 0x33, + 0x1a, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, + 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, 0x17, + 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x29, + 0x14, 0x15, 0x28, 0x14, 0x14, 0x5b, 0x4e, 0x4e, 0xc3, 0xc2, 0xc1, 0xcd, 0xce, 0xce, 0xcd, 0xce, + 0xcd, 0xce, 0xce, 0xce, 0xcd, 0xce, 0xce, 0xce, 0xcd, 0xce, 0xce, 0xcd, 0xce, 0xcd, 0xce, 0xcd, + 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xcd, 0xce, 0xce, 0xcd, 0xcd, 0xce, 0xce, 0xcd, 0xcd, 0xce, + 0xcd, 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xce, 0xcd, 0xce, 0xce, 0xcd, 0xce, 0xce, 0xce, 0xcd, + 0xce, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xcd, 0xce, 0xcd, 0xcd, 0xce, 0xcd, 0xcd, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcc, 0xcd, 0xcc, 0xcd, 0xcc, 0xcd, 0xcd, 0xcc, 0xcd, 0xcc, 0xcc, 0xcd, 0xa0, 0xa4, 0xb5, 0x63, + 0x6c, 0x94, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, 0x4c, 0x83, 0x40, + 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x50, + 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, + 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x49, + 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x50, 0x45, + 0x67, 0x56, 0x2c, 0x2c, 0x59, 0x2d, 0x2d, 0x5b, 0x2e, 0x2f, 0x5d, 0x30, 0x30, 0x60, 0x31, 0x32, + 0x43, 0x4f, 0x85, 0x42, 0x4d, 0x83, 0x42, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x41, 0x4c, 0x80, 0x40, + 0x4b, 0x80, 0x40, 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7d, 0x3e, 0x49, 0x7c, 0x3e, 0x48, + 0x7a, 0x3d, 0x48, 0x7a, 0x3d, 0x47, 0x79, 0x3c, 0x41, 0x6c, 0x3a, 0x34, 0x4f, 0x37, 0x27, 0x32, + 0x35, 0x1b, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, + 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, + 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x16, 0x16, + 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x32, + 0x20, 0x20, 0x99, 0x93, 0x93, 0xcc, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcc, 0xcd, 0xcc, 0xcc, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, + 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xba, 0xbc, 0xc3, 0x7d, 0x84, 0xa2, 0x48, 0x53, 0x86, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, + 0x4c, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, + 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, + 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, + 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4b, 0x57, 0x93, 0x4c, 0x58, + 0x94, 0x4f, 0x4d, 0x7a, 0x56, 0x2f, 0x33, 0x59, 0x2d, 0x2d, 0x5c, 0x2f, 0x2f, 0x5e, 0x30, 0x31, + 0x42, 0x4d, 0x83, 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4c, 0x80, 0x40, 0x4b, 0x7f, 0x40, + 0x4b, 0x7e, 0x40, 0x4a, 0x7d, 0x3f, 0x4a, 0x7c, 0x3e, 0x49, 0x7b, 0x3e, 0x48, 0x7a, 0x3c, 0x3b, + 0x5d, 0x3a, 0x2f, 0x45, 0x38, 0x22, 0x28, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, + 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x32, 0x1a, 0x1a, 0x32, + 0x1a, 0x19, 0x31, 0x19, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, + 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, + 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x2a, 0x15, 0x15, 0x29, 0x14, 0x15, 0x66, 0x59, 0x59, 0xc2, + 0xc0, 0xc0, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcc, 0xcc, 0xcd, 0xcc, 0xcc, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcb, 0xcb, 0xcc, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcc, 0xcc, 0xcb, 0xcc, + 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcb, 0xcb, + 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcc, 0xcb, 0xcc, 0xcb, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, + 0xcc, 0xcb, 0xcc, 0xcc, 0xcc, 0xcb, 0xcb, 0xcc, 0xc2, 0xc3, 0xc6, 0x96, 0x9b, 0xb0, 0x59, 0x63, + 0x8f, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, + 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, + 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, + 0x54, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, 0x4b, 0x57, + 0x93, 0x4c, 0x58, 0x94, 0x4e, 0x53, 0x88, 0x55, 0x35, 0x40, 0x59, 0x2e, 0x2e, 0x5c, 0x2f, 0x2f, + 0x41, 0x4d, 0x82, 0x41, 0x4d, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x40, 0x4b, 0x7e, 0x40, + 0x4a, 0x7d, 0x3f, 0x48, 0x79, 0x3c, 0x36, 0x52, 0x3b, 0x2a, 0x3a, 0x38, 0x1d, 0x1c, 0x38, 0x1d, + 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, + 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, + 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, 0x2e, 0x18, + 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, + 0x2b, 0x16, 0x16, 0x2a, 0x15, 0x15, 0x3d, 0x2b, 0x2c, 0xa3, 0x9e, 0x9d, 0xcb, 0xcc, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb, 0xcc, + 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, + 0xcb, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xcb, 0xca, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xca, 0xcb, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xca, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, + 0xcb, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xca, + 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, + 0xcb, 0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xa8, 0xaa, 0xb8, 0x74, 0x7b, 0x9c, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, + 0x85, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, + 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, + 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, 0x4a, 0x57, + 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x55, 0x8e, 0x54, 0x3d, 0x54, 0x5a, 0x2e, 0x2e, + 0x41, 0x4c, 0x81, 0x40, 0x4b, 0x80, 0x40, 0x4b, 0x7f, 0x44, 0x4f, 0x85, 0x49, 0x54, 0x8e, 0x4e, + 0x5b, 0x99, 0x48, 0x46, 0x6e, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1d, 0x1c, 0x38, 0x1c, + 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, + 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, 0x31, + 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, + 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, + 0x2a, 0x15, 0x15, 0x70, 0x64, 0x64, 0xc1, 0xc0, 0xc0, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, + 0xcb, 0xca, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xca, 0xcb, 0xcb, 0xca, 0xcb, + 0xca, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xca, 0xca, + 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xca, 0xca, 0xcb, + 0xcb, 0xcb, 0xca, 0xca, 0xca, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xca, 0xcb, + 0xcb, 0xca, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xc9, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xc9, + 0xca, 0xca, 0xca, 0xc9, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc1, 0xc2, 0xc5, 0x84, 0x8a, 0xa5, 0x50, 0x5b, 0x8a, + 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, + 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, + 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, + 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, 0x4a, 0x56, + 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, 0x52, 0x45, 0x68, + 0x45, 0x51, 0x88, 0x49, 0x55, 0x90, 0x4e, 0x5a, 0x97, 0x4f, 0x5b, 0x9a, 0x4f, 0x5c, 0x9a, 0x50, + 0x5c, 0x9b, 0x45, 0x3d, 0x5d, 0x39, 0x1d, 0x1d, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, + 0x1c, 0x36, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, + 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, + 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, + 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x3e, 0x2c, 0x2c, + 0xa2, 0x9d, 0x9c, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xc9, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0xc9, 0xca, 0xca, 0xca, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xca, 0xc9, 0xca, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, + 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0x9e, 0xa2, 0xb2, 0x62, 0x6b, 0x93, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x40, 0x4c, + 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4f, 0x87, + 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, + 0x53, 0x8c, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, + 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, 0x58, 0x94, + 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4e, 0x5a, 0x97, 0x4e, 0x5b, 0x98, 0x4f, 0x5b, 0x9a, 0x4f, + 0x5b, 0x9a, 0x44, 0x3d, 0x5c, 0x38, 0x1d, 0x1c, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, + 0x1c, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, + 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, + 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, + 0x17, 0x2c, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x2b, 0x16, 0x16, 0x70, 0x64, 0x64, 0xbf, 0xbf, 0xbe, + 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xca, + 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xc9, 0xc9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc8, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, + 0xc9, 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xc9, + 0xc8, 0xc9, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc8, + 0xc9, 0xc8, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc8, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, + 0xc8, 0xc8, 0xc9, 0xc8, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc8, 0xc9, + 0xc9, 0xc8, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, + 0xc8, 0xc9, 0xc8, 0xc8, 0xc9, 0xc9, 0xb8, 0xb9, 0xc0, 0x7b, 0x82, 0xa0, 0x48, 0x53, 0x85, 0x3f, + 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x40, 0x4c, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, + 0x42, 0x4f, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, + 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x55, + 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4b, 0x58, 0x94, + 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, 0x5b, 0x98, 0x4f, + 0x5b, 0x99, 0x43, 0x3c, 0x5b, 0x38, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, + 0x1b, 0x35, 0x1b, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, + 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, + 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x16, + 0x16, 0x2c, 0x16, 0x16, 0x3f, 0x2c, 0x2c, 0xa1, 0x9b, 0x9c, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc8, + 0xc8, 0xc8, 0xc9, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, + 0xc8, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc9, 0xc8, 0xc8, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, + 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc9, 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, + 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc8, 0xc8, 0xc8, 0xc9, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, + 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, + 0xc8, 0xc7, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc8, 0xc8, 0xc7, 0xc8, + 0xc8, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xbf, 0xc0, 0xc4, 0x94, + 0x99, 0xad, 0x59, 0x62, 0x8e, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, + 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, 0x89, 0x45, + 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, + 0x8e, 0x49, 0x54, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x92, + 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, 0x5a, 0x97, 0x4e, + 0x5a, 0x98, 0x43, 0x3c, 0x5b, 0x37, 0x1c, 0x1c, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x35, 0x1b, + 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x32, 0x1a, 0x1a, + 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, + 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x2c, 0x16, + 0x16, 0x79, 0x6e, 0x6f, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, + 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc7, 0xc8, 0xc7, 0xc7, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc7, 0xc7, 0xc8, 0xc8, 0xc7, 0xc8, 0xc7, + 0xc7, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, + 0xc7, 0xc8, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc8, 0xc8, 0xc7, 0xc7, 0xc8, 0xc8, 0xc7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xa5, 0xa8, 0xb5, 0x72, 0x7a, 0x9b, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, + 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, + 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, + 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, + 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x91, + 0x4a, 0x57, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x95, 0x4d, 0x59, 0x96, 0x4d, + 0x5a, 0x97, 0x42, 0x3b, 0x5a, 0x37, 0x1c, 0x1c, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, + 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, + 0x31, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, 0x2e, + 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x49, 0x38, 0x37, 0xaa, 0xa6, + 0xa6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc8, 0xc7, 0xc7, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, + 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, + 0xc7, 0xc6, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, + 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xbe, 0xbe, 0xc3, 0x8b, 0x91, + 0xa8, 0x50, 0x5b, 0x8a, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, 0x40, 0x4c, 0x83, + 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x43, + 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x53, + 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x56, 0x90, + 0x4a, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4d, 0x58, 0x94, 0x4d, + 0x59, 0x96, 0x42, 0x3b, 0x59, 0x36, 0x1c, 0x1b, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, + 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, + 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, + 0x17, 0x17, 0x2d, 0x17, 0x17, 0x2c, 0x17, 0x17, 0x79, 0x6e, 0x6e, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, + 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, + 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, + 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, + 0xc6, 0xc6, 0xc7, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc7, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, + 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0x9c, 0x9f, 0xb0, 0x69, 0x72, 0x97, 0x3f, 0x4b, 0x81, 0x3f, 0x4b, 0x82, + 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, + 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, + 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, + 0x49, 0x56, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, 0x58, 0x94, 0x4c, + 0x58, 0x94, 0x41, 0x3a, 0x58, 0x36, 0x1c, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x34, 0x1b, + 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, 0x31, 0x19, 0x19, + 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2e, 0x18, 0x18, 0x2e, 0x17, 0x17, 0x2d, + 0x17, 0x17, 0x4a, 0x38, 0x38, 0xa9, 0xa4, 0xa5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc5, + 0xc6, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, + 0xc5, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc6, 0xc6, 0xc5, 0xb4, 0xb6, 0xbc, 0x7a, 0x81, 0x9f, + 0x47, 0x53, 0x85, 0x40, 0x4c, 0x82, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, + 0x4e, 0x86, 0x42, 0x4f, 0x87, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, + 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, + 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x91, 0x4a, 0x56, 0x92, 0x4b, 0x57, 0x93, 0x4c, + 0x58, 0x94, 0x41, 0x3a, 0x58, 0x35, 0x1b, 0x1b, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, + 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, + 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x2d, 0x17, 0x17, 0x79, + 0x6e, 0x6e, 0xc5, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc6, 0xc5, + 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc5, 0xc6, + 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, + 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc4, 0xc5, + 0xc4, 0xc5, 0xc5, 0x92, 0x97, 0xac, 0x59, 0x63, 0x8f, 0x40, 0x4c, 0x83, 0x41, 0x4d, 0x84, 0x42, + 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, 0x88, 0x44, 0x51, + 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, + 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, 0x56, 0x92, 0x4b, + 0x57, 0x92, 0x40, 0x39, 0x57, 0x35, 0x1b, 0x1b, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1a, + 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, + 0x2f, 0x19, 0x18, 0x2f, 0x18, 0x18, 0x2e, 0x18, 0x18, 0x53, 0x43, 0x43, 0xb1, 0xaf, 0xaf, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, + 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, + 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, + 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, + 0xc5, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc4, 0xc4, 0xc5, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, + 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, + 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, + 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, 0xac, 0xad, 0xb8, 0x72, 0x79, 0x9c, 0x41, + 0x4d, 0x84, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x42, 0x4e, 0x86, 0x43, 0x4f, 0x87, 0x44, 0x50, + 0x88, 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, + 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x49, 0x54, 0x8e, 0x49, 0x55, 0x90, 0x49, 0x56, 0x90, 0x4a, + 0x56, 0x91, 0x3f, 0x39, 0x57, 0x34, 0x1b, 0x1b, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x32, 0x1a, + 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, + 0x2f, 0x19, 0x18, 0x37, 0x23, 0x23, 0x82, 0x78, 0x78, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc4, 0xc5, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc4, 0xc5, + 0xc4, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, + 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc4, 0xc3, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc3, 0xc4, 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc4, 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, + 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, + 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, + 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xbc, + 0xbd, 0xbf, 0x8a, 0x90, 0xa8, 0x51, 0x5c, 0x8c, 0x42, 0x4e, 0x85, 0x42, 0x4e, 0x86, 0x43, 0x4f, + 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, + 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x48, 0x54, 0x8e, 0x48, 0x54, 0x8e, 0x49, 0x55, 0x8f, 0x49, + 0x56, 0x90, 0x3f, 0x39, 0x56, 0x33, 0x1b, 0x1a, 0x33, 0x1b, 0x1a, 0x32, 0x1a, 0x1a, 0x32, 0x1a, + 0x19, 0x31, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x2f, 0x19, 0x18, + 0x54, 0x43, 0x43, 0xb1, 0xae, 0xae, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc3, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc4, 0xc4, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, + 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, + 0xc4, 0xc4, 0xc3, 0xc4, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, + 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc4, + 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, + 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x9b, 0x9e, 0xb0, 0x6a, 0x73, 0x98, 0x42, 0x4e, + 0x86, 0x43, 0x4f, 0x87, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, 0x45, 0x51, 0x8a, + 0x45, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, 0x53, 0x8d, 0x47, 0x53, 0x8e, 0x48, 0x54, 0x8e, 0x49, + 0x55, 0x8f, 0x3e, 0x38, 0x55, 0x33, 0x1b, 0x1a, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, + 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x2f, 0x19, 0x18, 0x38, 0x24, 0x23, 0x82, 0x78, 0x78, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, + 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, + 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc3, + 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, + 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, + 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, + 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, + 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, + 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, + 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, + 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xb3, 0xb4, + 0xba, 0x7a, 0x81, 0xa0, 0x4a, 0x56, 0x8b, 0x43, 0x50, 0x88, 0x44, 0x50, 0x88, 0x45, 0x51, 0x89, + 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x47, 0x53, 0x8c, 0x47, 0x53, 0x8e, 0x48, + 0x54, 0x8e, 0x3e, 0x38, 0x54, 0x33, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x1a, 0x19, 0x31, 0x19, + 0x19, 0x30, 0x19, 0x19, 0x30, 0x19, 0x19, 0x54, 0x44, 0x43, 0xb0, 0xae, 0xad, 0xc2, 0xc2, 0xc3, + 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, + 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, + 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, + 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, + 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, + 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, + 0xc3, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc2, 0xc3, + 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, + 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0x93, 0x97, 0xac, 0x5b, 0x65, 0x92, 0x44, 0x50, 0x88, + 0x44, 0x51, 0x89, 0x45, 0x51, 0x8a, 0x45, 0x52, 0x8b, 0x46, 0x52, 0x8b, 0x46, 0x53, 0x8c, 0x47, + 0x53, 0x8d, 0x3d, 0x37, 0x54, 0x32, 0x1a, 0x1a, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, + 0x19, 0x39, 0x24, 0x24, 0x8b, 0x82, 0x82, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc2, + 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, + 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, + 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc2, + 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, + 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, + 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xaa, 0xad, 0xb7, + 0x73, 0x7b, 0x9e, 0x4c, 0x58, 0x8d, 0x45, 0x51, 0x8a, 0x45, 0x51, 0x8a, 0x46, 0x52, 0x8b, 0x46, + 0x53, 0x8c, 0x3c, 0x37, 0x53, 0x32, 0x1a, 0x19, 0x31, 0x19, 0x19, 0x30, 0x19, 0x19, 0x5d, 0x4e, + 0x4e, 0xb8, 0xb6, 0xb6, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, + 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, + 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, + 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, + 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, + 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, + 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xb9, 0xba, 0xbd, 0x8a, 0x90, 0xa8, 0x55, 0x5f, 0x90, 0x45, 0x51, 0x8a, 0x45, + 0x52, 0x8b, 0x3c, 0x36, 0x53, 0x31, 0x19, 0x19, 0x3a, 0x24, 0x24, 0x94, 0x8c, 0x8d, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, + 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, + 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xa1, 0xa5, 0xb3, 0x6c, + 0x74, 0x9b, 0x3b, 0x35, 0x52, 0x5e, 0x4e, 0x4e, 0xb8, 0xb7, 0xb6, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, + 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, + 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, + 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, + 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, + 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, + 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, + 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc1, + 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, + 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xc1, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, + 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, + 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, + 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80, 0x26, 0x41, 0x80 +}; diff --git a/thirdparty/carve-1.4.0/examples/custom_collector.cpp b/thirdparty/carve-1.4.0/examples/custom_collector.cpp new file mode 100644 index 00000000..b16b78eb --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/custom_collector.cpp @@ -0,0 +1,175 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include + +#include "scene.hpp" +#include "geom_draw.hpp" +#include "geometry.hpp" + +#include + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (int i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +#define DIM 60 + + +class Between : public carve::csg::CSG::Collector { + Between(); + Between(const Between &); + Between &operator=(const Between &); + +public: + std::list > faces; + const carve::poly::Polyhedron *src_a; + const carve::poly::Polyhedron *src_b; + + Between(const carve::poly::Polyhedron *_src_a, + const carve::poly::Polyhedron *_src_b) : carve::csg::CSG::Collector(), src_a(_src_a), src_b(_src_b) { + } + + virtual ~Between() { + } + + virtual void collect(carve::csg::FaceLoopGroup *grp, carve::csg::CSG::Hooks &hooks) { + if (grp->face_loops.head->orig_face->owner != src_a) return; + if (grp->classificationAgainst(src_b, 1) != carve::csg::FACE_IN) return; + if (grp->classificationAgainst(src_b, 0) != carve::csg::FACE_OUT) return; + + for (carve::csg::FaceLoop *f = grp->face_loops.head; f; f = f->next) { + faces.push_back(carve::poly::Face<3>()); + faces.back().init(f->orig_face, f->vertices, false); + } + } + + virtual carve::poly::Polyhedron *done(carve::csg::CSG::Hooks &hooks) { + return new carve::poly::Polyhedron(faces); + } +}; + + +int main(int argc, char **argv) { + carve::poly::Polyhedron *a = makeTorus(30, 30, 2.0, 0.8, carve::math::Matrix::ROT(0.5, 1.0, 1.0, 1.0)); + + + carve::input::PolyhedronData data; + + for (int i = 0; i < DIM; i++) { + double x = -3.0 + 6.0 * i / double(DIM - 1); + for (int j = 0; j < DIM; j++) { + double y = -3.0 + 6.0 * j / double(DIM - 1); + double z = -1.0 + 2.0 * cos(sqrt(x * x + y * y) * 2.0) / sqrt(1.0 + x * x + y * y); + size_t n = data.addVertex(carve::geom::VECTOR(x, y, z)); + if (i && j) { + data.addFace(n - DIM - 1, n - 1, n - DIM); + data.addFace(n - 1, n, n - DIM); + } + } + } + + for (int i = 0; i < DIM; i++) { + double x = -3.0 + 6.0 * i / double(DIM - 1); + for (int j = 0; j < DIM; j++) { + double y = -3.0 + 6.0 * j / double(DIM - 1); + double z = 1.0 + 2.0 * cos(sqrt(x * x + y * y) * 2.0) / sqrt(1.0 + x * x + y * y); + size_t n = data.addVertex(carve::geom::VECTOR(x, y, z)); + if (i && j) { + data.addFace(n - DIM - 1, n - 1, n - DIM); + data.addFace(n - 1, n, n - DIM); + } + } + } + + carve::poly::Polyhedron *b = data.create(); + + Between between_collector(a, b); + carve::poly::Polyhedron *c = carve::csg::CSG().compute(a, b, between_collector, NULL, carve::csg::CSG::CLASSIFY_EDGE); + + TestScene *scene = new TestScene(argc, argv, 3); + + glNewList(scene->draw_list_base + 0, GL_COMPILE); + drawPolyhedron(a, .4, .6, .8, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 1, GL_COMPILE); + drawPolyhedron(b, .8, .6, .4, 1.0, false); + glEndList(); + + glNewList(scene->draw_list_base + 2, GL_COMPILE); + drawPolyhedron(c, .2, .2, .8, 1.0, true); + drawPolyhedronWireframe(c); + glEndList(); + + scene->run(); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/examples/leaf_texture.h b/thirdparty/carve-1.4.0/examples/leaf_texture.h new file mode 100644 index 00000000..300f9be1 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/leaf_texture.h @@ -0,0 +1,3074 @@ +const unsigned char leaf_texture[] = { + 0x41, 0x41, 0x08, 0x41, 0x41, 0x08, 0x39, 0x31, 0x10, 0x4a, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x39, + 0x39, 0x20, 0x18, 0x39, 0x00, 0x31, 0x4a, 0x20, 0x4a, 0x52, 0x29, 0x41, 0x52, 0x20, 0x39, 0x4a, + 0x29, 0x4a, 0x52, 0x29, 0x4a, 0x52, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x6a, 0x29, 0x41, 0x7b, 0x08, + 0x41, 0x7b, 0x08, 0x31, 0x6a, 0x08, 0x52, 0x7b, 0x10, 0x4a, 0x6a, 0x29, 0x4a, 0x5a, 0x20, 0x39, + 0x52, 0x18, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x41, 0x6a, 0x18, 0x39, 0x62, + 0x10, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x5a, 0x20, 0x39, 0x39, 0x08, 0x39, 0x41, 0x10, 0x31, + 0x39, 0x10, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x10, 0x31, 0x39, 0x10, 0x31, 0x31, 0x20, 0x31, 0x39, + 0x10, 0x39, 0x39, 0x10, 0x31, 0x31, 0x10, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x4a, 0x4a, 0x18, 0x31, 0x29, 0x08, 0x52, 0x4a, 0x18, 0x6a, + 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x62, 0x6a, 0x20, 0x31, 0x5a, + 0x08, 0x4a, 0x73, 0x18, 0x52, 0x6a, 0x20, 0x31, 0x5a, 0x08, 0x52, 0x7b, 0x10, 0x5a, 0x83, 0x29, + 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x41, 0x52, 0x08, 0x41, + 0x73, 0x08, 0x41, 0x41, 0x10, 0x39, 0x31, 0x20, 0x31, 0x31, 0x08, 0x4a, 0x52, 0x08, 0x31, 0x31, + 0x08, 0x41, 0x41, 0x18, 0x29, 0x31, 0x10, 0x29, 0x31, 0x00, 0x39, 0x39, 0x08, 0x29, 0x31, 0x00, + 0x29, 0x31, 0x10, 0x41, 0x41, 0x08, 0x39, 0x39, 0x10, 0x29, 0x31, 0x08, 0x29, 0x29, 0x18, 0x29, + 0x31, 0x08, 0x31, 0x39, 0x00, 0x52, 0x5a, 0x08, 0x4a, 0x52, 0x08, 0x39, 0x41, 0x08, 0x31, 0x41, + 0x08, 0x18, 0x39, 0x00, 0x31, 0x52, 0x10, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x83, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x18, + 0x41, 0x41, 0x08, 0x41, 0x41, 0x08, 0x39, 0x31, 0x10, 0x4a, 0x31, 0x18, 0x5a, 0x5a, 0x20, 0x41, + 0x4a, 0x20, 0x39, 0x41, 0x20, 0x41, 0x5a, 0x29, 0x39, 0x5a, 0x20, 0x4a, 0x62, 0x29, 0x62, 0x7b, + 0x39, 0x62, 0x62, 0x39, 0x52, 0x73, 0x31, 0x6a, 0x73, 0x20, 0x52, 0x73, 0x31, 0x41, 0x7b, 0x08, + 0x39, 0x62, 0x10, 0x31, 0x62, 0x08, 0x4a, 0x73, 0x08, 0x41, 0x52, 0x20, 0x31, 0x41, 0x20, 0x52, + 0x6a, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, + 0x18, 0x41, 0x6a, 0x18, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x5a, + 0x83, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x4a, 0x18, 0x39, + 0x39, 0x08, 0x41, 0x41, 0x10, 0x41, 0x41, 0x08, 0x41, 0x41, 0x18, 0x39, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x5a, 0x08, 0x4a, 0x41, 0x20, 0x4a, 0x4a, 0x29, 0x6a, 0x62, 0x31, 0x6a, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x41, 0x31, 0x18, 0x39, 0x31, 0x20, 0x52, 0x4a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x7b, + 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x7b, 0x29, 0x39, 0x5a, 0x18, 0x52, + 0x6a, 0x20, 0x4a, 0x39, 0x18, 0x4a, 0x31, 0x18, 0x39, 0x31, 0x29, 0x29, 0x29, 0x10, 0x31, 0x31, + 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x10, 0x29, 0x29, 0x08, 0x41, 0x4a, 0x08, 0x41, 0x41, 0x10, + 0x29, 0x31, 0x08, 0x41, 0x41, 0x08, 0x52, 0x52, 0x20, 0x39, 0x41, 0x18, 0x4a, 0x52, 0x29, 0x52, + 0x52, 0x20, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x39, 0x39, 0x08, 0x52, 0x52, 0x08, 0x29, 0x31, + 0x10, 0x20, 0x20, 0x10, 0x18, 0x31, 0x08, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x52, + 0x20, 0x41, 0x39, 0x20, 0x52, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x31, 0x18, 0x31, 0x29, 0x18, + 0x39, 0x39, 0x08, 0x41, 0x41, 0x08, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x08, 0x4a, 0x52, 0x08, 0x39, + 0x39, 0x10, 0x29, 0x39, 0x18, 0x29, 0x41, 0x10, 0x29, 0x41, 0x10, 0x41, 0x73, 0x08, 0x4a, 0x6a, + 0x29, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x29, 0x52, 0x52, 0x29, 0x39, 0x4a, 0x29, 0x6a, 0x6a, 0x31, + 0x41, 0x5a, 0x29, 0x29, 0x39, 0x00, 0x29, 0x4a, 0x10, 0x18, 0x39, 0x00, 0x52, 0x73, 0x20, 0x4a, + 0x62, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x7b, + 0x20, 0x29, 0x52, 0x08, 0x29, 0x52, 0x08, 0x39, 0x62, 0x08, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x73, 0x20, 0x52, + 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, + 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, + 0x62, 0x18, 0x31, 0x31, 0x20, 0x39, 0x31, 0x18, 0x39, 0x29, 0x10, 0x52, 0x52, 0x18, 0x41, 0x41, + 0x10, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x62, 0x62, 0x29, + 0x52, 0x5a, 0x18, 0x41, 0x41, 0x08, 0x39, 0x29, 0x18, 0x52, 0x39, 0x20, 0x5a, 0x52, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x73, + 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x5a, 0x29, 0x52, 0x7b, 0x10, 0x41, + 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x4a, 0x41, 0x29, 0x39, 0x31, 0x29, 0x41, 0x39, 0x20, 0x31, 0x29, + 0x18, 0x39, 0x39, 0x20, 0x41, 0x39, 0x20, 0x4a, 0x4a, 0x10, 0x31, 0x31, 0x08, 0x29, 0x31, 0x08, + 0x39, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x52, 0x5a, 0x08, 0x39, 0x39, 0x18, 0x31, 0x31, 0x08, 0x41, + 0x4a, 0x18, 0x4a, 0x52, 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x18, 0x52, 0x5a, 0x08, 0x29, 0x20, + 0x10, 0x29, 0x20, 0x10, 0x4a, 0x4a, 0x10, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x39, 0x39, + 0x20, 0x4a, 0x39, 0x18, 0x4a, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x31, 0x18, 0x4a, 0x31, 0x18, + 0x4a, 0x41, 0x10, 0x41, 0x4a, 0x08, 0x31, 0x31, 0x08, 0x39, 0x41, 0x08, 0x39, 0x41, 0x08, 0x39, + 0x39, 0x08, 0x29, 0x41, 0x10, 0x29, 0x39, 0x18, 0x20, 0x4a, 0x08, 0x31, 0x62, 0x08, 0x39, 0x52, + 0x20, 0x4a, 0x52, 0x29, 0x39, 0x4a, 0x29, 0x39, 0x4a, 0x29, 0x39, 0x4a, 0x29, 0x5a, 0x5a, 0x29, + 0x4a, 0x4a, 0x29, 0x39, 0x4a, 0x20, 0x5a, 0x73, 0x20, 0x5a, 0x5a, 0x29, 0x5a, 0x6a, 0x20, 0x4a, + 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, + 0x29, 0x29, 0x4a, 0x00, 0x29, 0x52, 0x08, 0x41, 0x6a, 0x08, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x31, 0x52, 0x7b, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x7b, 0x29, 0x62, 0x7b, 0x20, 0x6a, + 0x73, 0x20, 0x62, 0x73, 0x20, 0x39, 0x31, 0x10, 0x4a, 0x39, 0x18, 0x5a, 0x5a, 0x08, 0x41, 0x41, + 0x18, 0x39, 0x29, 0x18, 0x41, 0x39, 0x20, 0x62, 0x62, 0x39, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x6a, 0x62, 0x31, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, + 0x6a, 0x20, 0x5a, 0x52, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x52, 0x62, + 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x20, 0x39, 0x62, 0x10, 0x31, 0x5a, 0x08, 0x31, + 0x4a, 0x18, 0x39, 0x52, 0x20, 0x41, 0x4a, 0x20, 0x41, 0x4a, 0x18, 0x31, 0x31, 0x08, 0x39, 0x41, + 0x08, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x39, 0x41, 0x20, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, + 0x39, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x52, 0x5a, 0x08, 0x41, 0x41, 0x10, 0x31, 0x39, 0x18, 0x41, + 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x29, 0x31, 0x08, 0x39, 0x41, 0x10, 0x4a, 0x4a, 0x10, 0x39, 0x31, + 0x10, 0x31, 0x29, 0x18, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x7b, 0x20, 0x52, 0x6a, 0x20, 0x5a, 0x52, 0x20, 0x62, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x5a, 0x52, 0x20, 0x4a, 0x41, + 0x10, 0x41, 0x31, 0x18, 0x41, 0x41, 0x20, 0x5a, 0x52, 0x20, 0x4a, 0x41, 0x29, 0x4a, 0x31, 0x18, + 0x52, 0x52, 0x08, 0x41, 0x4a, 0x08, 0x31, 0x31, 0x08, 0x41, 0x41, 0x08, 0x39, 0x41, 0x08, 0x31, + 0x31, 0x08, 0x39, 0x62, 0x10, 0x4a, 0x6a, 0x29, 0x41, 0x5a, 0x29, 0x31, 0x52, 0x10, 0x29, 0x52, + 0x08, 0x29, 0x4a, 0x10, 0x39, 0x5a, 0x20, 0x29, 0x52, 0x08, 0x29, 0x52, 0x08, 0x31, 0x41, 0x20, + 0x41, 0x5a, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x39, 0x52, 0x20, 0x52, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x73, + 0x20, 0x52, 0x52, 0x18, 0x29, 0x41, 0x00, 0x39, 0x62, 0x10, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, + 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x8b, 0x31, 0x5a, 0x7b, 0x29, 0x62, 0x83, 0x29, 0x5a, + 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x10, 0x52, 0x73, 0x10, 0x4a, 0x52, 0x08, 0x4a, 0x4a, + 0x10, 0x41, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x73, 0x20, 0x5a, 0x5a, 0x29, 0x52, 0x62, 0x29, 0x62, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, + 0x39, 0x4a, 0x18, 0x18, 0x20, 0x08, 0x18, 0x20, 0x08, 0x29, 0x39, 0x18, 0x29, 0x41, 0x10, 0x31, + 0x4a, 0x18, 0x31, 0x4a, 0x10, 0x31, 0x4a, 0x18, 0x39, 0x4a, 0x18, 0x18, 0x39, 0x00, 0x31, 0x31, + 0x08, 0x39, 0x41, 0x10, 0x62, 0x62, 0x18, 0x41, 0x4a, 0x10, 0x29, 0x31, 0x08, 0x29, 0x31, 0x08, + 0x39, 0x41, 0x08, 0x4a, 0x4a, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x18, 0x4a, + 0x41, 0x18, 0x39, 0x39, 0x10, 0x39, 0x31, 0x08, 0x41, 0x41, 0x10, 0x52, 0x5a, 0x18, 0x31, 0x31, + 0x10, 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x29, 0x39, 0x10, 0x4a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x41, 0x20, 0x29, 0x39, + 0x00, 0x39, 0x39, 0x10, 0x4a, 0x41, 0x29, 0x39, 0x39, 0x20, 0x41, 0x39, 0x18, 0x39, 0x31, 0x10, + 0x52, 0x52, 0x08, 0x4a, 0x52, 0x10, 0x31, 0x31, 0x08, 0x41, 0x4a, 0x08, 0x4a, 0x4a, 0x10, 0x39, + 0x4a, 0x18, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x6a, 0x29, 0x41, 0x62, + 0x20, 0x29, 0x52, 0x08, 0x31, 0x62, 0x08, 0x41, 0x6a, 0x18, 0x31, 0x62, 0x08, 0x39, 0x62, 0x10, + 0x39, 0x4a, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x20, 0x52, + 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x62, + 0x18, 0x41, 0x41, 0x18, 0x39, 0x4a, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, + 0x6a, 0x94, 0x31, 0x62, 0x8b, 0x31, 0x6a, 0x8b, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x83, 0x29, 0x6a, 0x8b, 0x39, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x62, 0x08, 0x41, 0x73, 0x08, 0x4a, 0x5a, + 0x08, 0x4a, 0x6a, 0x08, 0x31, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x62, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x62, 0x5a, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, + 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, + 0x29, 0x39, 0x18, 0x18, 0x20, 0x08, 0x29, 0x29, 0x18, 0x29, 0x39, 0x18, 0x31, 0x41, 0x18, 0x31, + 0x4a, 0x18, 0x29, 0x4a, 0x10, 0x41, 0x4a, 0x20, 0x41, 0x4a, 0x20, 0x41, 0x6a, 0x10, 0x41, 0x4a, + 0x10, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x7b, 0x9c, 0x41, 0x4a, 0x41, 0x10, 0x41, 0x41, 0x08, + 0x41, 0x41, 0x10, 0x20, 0x20, 0x08, 0x39, 0x39, 0x08, 0x31, 0x29, 0x08, 0x31, 0x29, 0x18, 0x39, + 0x39, 0x10, 0x39, 0x29, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x39, 0x20, 0x4a, 0x5a, + 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x39, 0x62, 0x10, + 0x18, 0x31, 0x08, 0x39, 0x52, 0x18, 0x41, 0x4a, 0x18, 0x5a, 0x5a, 0x18, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x41, 0x39, 0x18, 0x39, 0x41, + 0x18, 0x52, 0x52, 0x29, 0x4a, 0x41, 0x29, 0x4a, 0x4a, 0x20, 0x29, 0x29, 0x08, 0x39, 0x39, 0x18, + 0x52, 0x5a, 0x08, 0x62, 0x62, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x5a, 0x5a, 0x18, 0x39, + 0x39, 0x18, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, + 0x29, 0x4a, 0x6a, 0x20, 0x31, 0x41, 0x20, 0x20, 0x52, 0x00, 0x31, 0x41, 0x20, 0x39, 0x5a, 0x20, + 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, + 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x29, 0x4a, + 0x00, 0x31, 0x4a, 0x20, 0x31, 0x4a, 0x18, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x29, + 0x6a, 0x8b, 0x29, 0x6a, 0x94, 0x31, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x6a, 0x8b, 0x29, 0x6a, + 0x94, 0x39, 0x6a, 0x94, 0x31, 0x6a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x7b, 0x10, 0x20, 0x4a, 0x08, 0x29, 0x4a, 0x00, 0x29, 0x4a, 0x00, 0x5a, 0x7b, 0x29, 0x5a, + 0x83, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x5a, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x73, 0x08, 0x52, 0x62, + 0x20, 0x4a, 0x62, 0x10, 0x4a, 0x62, 0x10, 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x29, 0x52, 0x52, 0x20, + 0x6a, 0x62, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x41, 0x41, + 0x20, 0x62, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, + 0x39, 0x52, 0x20, 0x20, 0x29, 0x00, 0x29, 0x29, 0x18, 0x29, 0x39, 0x18, 0x39, 0x5a, 0x20, 0x39, + 0x41, 0x20, 0x41, 0x4a, 0x20, 0x4a, 0x52, 0x29, 0x29, 0x52, 0x08, 0x39, 0x4a, 0x18, 0x4a, 0x4a, + 0x18, 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x29, 0x39, 0x10, + 0x18, 0x31, 0x08, 0x20, 0x18, 0x08, 0x31, 0x39, 0x10, 0x39, 0x31, 0x08, 0x39, 0x39, 0x10, 0x4a, + 0x41, 0x10, 0x39, 0x39, 0x18, 0x41, 0x39, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x39, 0x18, 0x4a, 0x5a, + 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x52, 0x62, 0x29, 0x29, 0x41, 0x00, + 0x29, 0x39, 0x10, 0x29, 0x39, 0x10, 0x31, 0x39, 0x10, 0x52, 0x52, 0x18, 0x6a, 0x6a, 0x20, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x31, 0x31, 0x18, 0x31, 0x31, + 0x08, 0x39, 0x31, 0x29, 0x39, 0x31, 0x29, 0x41, 0x39, 0x18, 0x29, 0x29, 0x08, 0x31, 0x39, 0x08, + 0x29, 0x29, 0x08, 0x52, 0x5a, 0x08, 0x41, 0x4a, 0x10, 0x41, 0x41, 0x08, 0x5a, 0x5a, 0x20, 0x31, + 0x39, 0x18, 0x52, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, + 0x29, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x31, 0x5a, 0x10, 0x39, 0x52, 0x18, + 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x4a, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x29, 0x5a, + 0x00, 0x39, 0x4a, 0x18, 0x39, 0x4a, 0x18, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x31, + 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x31, 0x5a, 0x83, 0x29, 0x73, 0x94, 0x41, 0x62, + 0x8b, 0x29, 0x6a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x73, 0x20, + 0x29, 0x52, 0x08, 0x41, 0x6a, 0x10, 0x39, 0x62, 0x10, 0x29, 0x41, 0x10, 0x31, 0x4a, 0x00, 0x39, + 0x52, 0x18, 0x29, 0x52, 0x00, 0x29, 0x41, 0x00, 0x39, 0x52, 0x18, 0x41, 0x62, 0x08, 0x62, 0x5a, + 0x18, 0x52, 0x4a, 0x18, 0x41, 0x52, 0x08, 0x31, 0x31, 0x08, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, + 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x29, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x41, 0x41, + 0x20, 0x73, 0x6a, 0x20, 0x62, 0x73, 0x20, 0x6a, 0x7b, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x83, 0x29, 0x31, 0x39, 0x18, 0x31, 0x41, 0x20, 0x39, 0x41, 0x20, 0x41, 0x41, 0x29, 0x31, + 0x52, 0x10, 0x41, 0x4a, 0x20, 0x41, 0x52, 0x20, 0x29, 0x41, 0x10, 0x31, 0x4a, 0x20, 0x29, 0x52, + 0x08, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x6a, 0x9c, 0x29, 0x73, 0x94, 0x41, + 0x18, 0x39, 0x00, 0x18, 0x31, 0x08, 0x39, 0x52, 0x18, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x4a, + 0x73, 0x20, 0x41, 0x4a, 0x18, 0x31, 0x41, 0x20, 0x31, 0x39, 0x18, 0x39, 0x39, 0x20, 0x52, 0x62, + 0x20, 0x62, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x73, 0x20, 0x4a, 0x41, 0x29, 0x41, 0x41, 0x29, + 0x31, 0x31, 0x08, 0x29, 0x29, 0x10, 0x31, 0x41, 0x08, 0x29, 0x31, 0x08, 0x62, 0x62, 0x20, 0x6a, + 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x41, 0x31, 0x18, 0x31, 0x31, + 0x10, 0x4a, 0x31, 0x18, 0x39, 0x31, 0x29, 0x39, 0x31, 0x20, 0x39, 0x29, 0x10, 0x39, 0x41, 0x08, + 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x4a, 0x4a, 0x08, 0x41, 0x4a, 0x08, 0x5a, 0x5a, 0x18, 0x39, + 0x39, 0x18, 0x62, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, + 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, 0x41, 0x6a, 0x18, 0x31, 0x52, 0x10, + 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x39, + 0x5a, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x39, 0x5a, + 0x18, 0x4a, 0x52, 0x29, 0x39, 0x52, 0x20, 0x62, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x31, + 0x6a, 0x8b, 0x29, 0x62, 0x94, 0x31, 0x62, 0x83, 0x29, 0x52, 0x73, 0x31, 0x6a, 0x8b, 0x29, 0x62, + 0x94, 0x31, 0x6a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x6a, + 0x29, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, + 0x41, 0x62, 0x20, 0x31, 0x62, 0x08, 0x39, 0x5a, 0x18, 0x31, 0x5a, 0x10, 0x39, 0x4a, 0x08, 0x18, + 0x31, 0x08, 0x29, 0x31, 0x10, 0x31, 0x62, 0x08, 0x41, 0x62, 0x08, 0x39, 0x52, 0x08, 0x41, 0x41, + 0x10, 0x4a, 0x4a, 0x18, 0x4a, 0x52, 0x18, 0x52, 0x5a, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x52, 0x20, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x62, 0x83, 0x29, 0x29, 0x39, 0x18, 0x39, 0x41, 0x20, 0x39, 0x41, 0x20, 0x4a, 0x4a, 0x29, 0x39, + 0x52, 0x20, 0x31, 0x52, 0x10, 0x4a, 0x52, 0x29, 0x4a, 0x5a, 0x29, 0x29, 0x39, 0x18, 0x41, 0x5a, + 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x73, 0x94, 0x41, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x31, 0x4a, 0x5a, 0x18, 0x7b, 0x9c, 0x41, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, + 0x73, 0x20, 0x62, 0x73, 0x20, 0x39, 0x39, 0x18, 0x41, 0x41, 0x20, 0x41, 0x4a, 0x18, 0x39, 0x52, + 0x08, 0x5a, 0x5a, 0x08, 0x52, 0x52, 0x20, 0x52, 0x52, 0x29, 0x52, 0x52, 0x29, 0x39, 0x39, 0x10, + 0x31, 0x31, 0x10, 0x39, 0x31, 0x20, 0x39, 0x41, 0x08, 0x20, 0x29, 0x00, 0x52, 0x52, 0x18, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x41, 0x20, 0x41, 0x39, + 0x08, 0x31, 0x29, 0x10, 0x31, 0x29, 0x18, 0x39, 0x39, 0x20, 0x31, 0x31, 0x10, 0x29, 0x29, 0x00, + 0x31, 0x31, 0x00, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x10, 0x39, + 0x39, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, + 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x6a, 0x29, 0x31, 0x4a, 0x18, + 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x41, + 0x5a, 0x18, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, + 0x29, 0x41, 0x52, 0x20, 0x39, 0x52, 0x18, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x31, + 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x18, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x62, + 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, + 0x29, 0x52, 0x73, 0x29, 0x52, 0x6a, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, + 0x4a, 0x6a, 0x29, 0x41, 0x6a, 0x18, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x20, 0x41, 0x52, 0x18, 0x29, + 0x31, 0x08, 0x18, 0x39, 0x00, 0x31, 0x41, 0x08, 0x52, 0x5a, 0x08, 0x52, 0x62, 0x10, 0x62, 0x5a, + 0x18, 0x41, 0x41, 0x08, 0x41, 0x31, 0x18, 0x62, 0x83, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x52, 0x52, + 0x20, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, + 0x6a, 0x73, 0x20, 0x31, 0x52, 0x10, 0x39, 0x4a, 0x18, 0x39, 0x41, 0x20, 0x52, 0x52, 0x29, 0x39, + 0x4a, 0x29, 0x29, 0x4a, 0x10, 0x4a, 0x52, 0x29, 0x39, 0x4a, 0x29, 0x41, 0x5a, 0x29, 0x39, 0x52, + 0x20, 0x31, 0x52, 0x10, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x39, + 0x6a, 0x94, 0x39, 0x73, 0x9c, 0x41, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x6a, 0x94, 0x31, 0x52, + 0x73, 0x29, 0x5a, 0x73, 0x20, 0x39, 0x41, 0x18, 0x41, 0x41, 0x18, 0x31, 0x39, 0x18, 0x39, 0x31, + 0x10, 0x41, 0x4a, 0x08, 0x31, 0x31, 0x10, 0x52, 0x52, 0x29, 0x52, 0x52, 0x18, 0x39, 0x41, 0x18, + 0x41, 0x41, 0x08, 0x52, 0x5a, 0x08, 0x31, 0x39, 0x10, 0x29, 0x4a, 0x00, 0x41, 0x4a, 0x10, 0x6a, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x20, 0x52, 0x5a, 0x29, 0x39, 0x39, + 0x10, 0x39, 0x41, 0x20, 0x29, 0x29, 0x08, 0x39, 0x41, 0x10, 0x4a, 0x52, 0x08, 0x39, 0x39, 0x08, + 0x29, 0x31, 0x08, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x31, 0x31, 0x08, 0x39, 0x39, 0x20, 0x52, + 0x4a, 0x20, 0x41, 0x41, 0x18, 0x62, 0x62, 0x20, 0x62, 0x6a, 0x20, 0x5a, 0x73, 0x20, 0x52, 0x73, + 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x41, 0x5a, 0x18, + 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x4a, + 0x6a, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x20, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x52, 0x73, 0x29, 0x39, 0x52, 0x18, 0x18, 0x20, 0x08, 0x73, 0x9c, 0x41, 0x62, 0x8b, 0x31, 0x6a, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x52, 0x73, 0x20, 0x52, 0x62, 0x29, 0x62, 0x62, + 0x39, 0x31, 0x62, 0x08, 0x4a, 0x52, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, + 0x4a, 0x62, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x4a, + 0x73, 0x20, 0x31, 0x4a, 0x10, 0x4a, 0x52, 0x10, 0x4a, 0x4a, 0x10, 0x52, 0x52, 0x08, 0x52, 0x52, + 0x08, 0x39, 0x39, 0x08, 0x31, 0x29, 0x08, 0x62, 0x5a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x52, + 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x52, + 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x62, 0x62, 0x20, + 0x5a, 0x52, 0x20, 0x31, 0x39, 0x18, 0x52, 0x52, 0x29, 0x31, 0x41, 0x20, 0x4a, 0x5a, 0x29, 0x39, + 0x52, 0x20, 0x29, 0x41, 0x10, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x29, 0x29, 0x52, 0x08, 0x31, 0x52, + 0x10, 0x31, 0x4a, 0x20, 0x41, 0x5a, 0x18, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x7b, 0x9c, 0x41, + 0x7b, 0xa4, 0x41, 0x6a, 0x94, 0x39, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x7b, 0xa4, 0x41, 0x52, + 0x73, 0x31, 0x4a, 0x5a, 0x29, 0x39, 0x41, 0x18, 0x29, 0x52, 0x08, 0x31, 0x31, 0x18, 0x39, 0x31, + 0x20, 0x39, 0x31, 0x08, 0x31, 0x31, 0x10, 0x52, 0x5a, 0x18, 0x39, 0x41, 0x20, 0x4a, 0x4a, 0x08, + 0x52, 0x4a, 0x18, 0x39, 0x31, 0x20, 0x31, 0x31, 0x08, 0x31, 0x52, 0x10, 0x4a, 0x5a, 0x20, 0x39, + 0x31, 0x20, 0x39, 0x29, 0x10, 0x41, 0x39, 0x20, 0x41, 0x41, 0x10, 0x41, 0x41, 0x18, 0x41, 0x31, + 0x18, 0x39, 0x31, 0x20, 0x31, 0x31, 0x10, 0x41, 0x31, 0x18, 0x29, 0x31, 0x10, 0x39, 0x39, 0x08, + 0x31, 0x31, 0x10, 0x39, 0x29, 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x10, 0x52, + 0x4a, 0x20, 0x31, 0x29, 0x18, 0x62, 0x62, 0x29, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x7b, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x41, 0x62, 0x20, + 0x41, 0x5a, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, + 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, + 0x20, 0x41, 0x5a, 0x20, 0x41, 0x62, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x62, 0x20, 0x20, 0x29, 0x00, 0x20, 0x29, 0x00, 0x7b, 0xa4, 0x41, 0x62, 0x8b, 0x31, 0x62, + 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x52, 0x73, 0x31, 0x6a, 0x6a, 0x31, 0x62, 0x62, + 0x39, 0x41, 0x62, 0x20, 0x5a, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x52, 0x7b, 0x20, + 0x4a, 0x62, 0x29, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x4a, + 0x73, 0x20, 0x41, 0x41, 0x20, 0x31, 0x31, 0x10, 0x31, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x4a, 0x4a, + 0x08, 0x41, 0x4a, 0x08, 0x29, 0x31, 0x08, 0x29, 0x31, 0x08, 0x31, 0x31, 0x08, 0x39, 0x31, 0x08, + 0x29, 0x29, 0x08, 0x29, 0x29, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x39, 0x10, 0x6a, 0x6a, 0x31, 0x52, + 0x52, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x62, 0x62, + 0x20, 0x4a, 0x4a, 0x20, 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x41, 0x41, 0x20, + 0x41, 0x41, 0x18, 0x41, 0x52, 0x20, 0x52, 0x5a, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x4a, + 0x73, 0x20, 0x41, 0x6a, 0x18, 0x41, 0x5a, 0x29, 0x39, 0x4a, 0x29, 0x31, 0x4a, 0x20, 0x29, 0x39, + 0x18, 0x31, 0x41, 0x18, 0x29, 0x41, 0x10, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x41, + 0x73, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x83, 0xac, 0x4a, 0x4a, + 0x62, 0x29, 0x5a, 0x5a, 0x29, 0x31, 0x41, 0x18, 0x29, 0x31, 0x10, 0x29, 0x31, 0x10, 0x31, 0x20, + 0x10, 0x39, 0x31, 0x20, 0x41, 0x4a, 0x20, 0x4a, 0x4a, 0x10, 0x39, 0x39, 0x10, 0x62, 0x62, 0x20, + 0x5a, 0x5a, 0x20, 0x41, 0x41, 0x18, 0x41, 0x4a, 0x08, 0x39, 0x4a, 0x08, 0x4a, 0x5a, 0x08, 0x4a, + 0x4a, 0x20, 0x39, 0x39, 0x18, 0x41, 0x39, 0x18, 0x39, 0x31, 0x10, 0x39, 0x29, 0x18, 0x4a, 0x31, + 0x18, 0x31, 0x31, 0x20, 0x39, 0x29, 0x18, 0x39, 0x29, 0x18, 0x29, 0x31, 0x10, 0x29, 0x31, 0x08, + 0x39, 0x31, 0x18, 0x52, 0x39, 0x20, 0x31, 0x31, 0x10, 0x29, 0x31, 0x10, 0x39, 0x31, 0x29, 0x4a, + 0x4a, 0x29, 0x20, 0x18, 0x08, 0x18, 0x20, 0x08, 0x62, 0x62, 0x29, 0x62, 0x62, 0x20, 0x62, 0x6a, + 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, + 0x31, 0x52, 0x10, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x52, + 0x7b, 0x20, 0x41, 0x5a, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x41, 0x5a, 0x20, 0x52, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x62, 0x20, + 0x39, 0x52, 0x18, 0x18, 0x29, 0x08, 0x41, 0x5a, 0x29, 0x7b, 0x9c, 0x41, 0x62, 0x8b, 0x31, 0x62, + 0x8b, 0x31, 0x6a, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x5a, + 0x29, 0x4a, 0x73, 0x20, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x31, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x4a, + 0x73, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x41, 0x18, 0x20, 0x29, 0x00, 0x41, 0x41, 0x10, 0x39, 0x39, + 0x08, 0x39, 0x39, 0x08, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x41, 0x39, 0x08, 0x41, 0x41, 0x08, + 0x52, 0x52, 0x08, 0x29, 0x31, 0x10, 0x31, 0x29, 0x10, 0x20, 0x29, 0x00, 0x62, 0x5a, 0x20, 0x52, + 0x52, 0x20, 0x62, 0x62, 0x29, 0x62, 0x62, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x62, 0x20, 0x52, 0x52, + 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x62, 0x5a, 0x20, + 0x41, 0x41, 0x18, 0x39, 0x41, 0x10, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x4a, 0x52, 0x29, 0x4a, + 0x5a, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x39, 0x52, + 0x20, 0x29, 0x39, 0x10, 0x18, 0x31, 0x08, 0x4a, 0x6a, 0x20, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x39, + 0x7b, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x73, 0x94, 0x41, 0x41, + 0x5a, 0x18, 0x52, 0x52, 0x18, 0x31, 0x39, 0x10, 0x39, 0x39, 0x18, 0x41, 0x39, 0x20, 0x29, 0x31, + 0x10, 0x41, 0x41, 0x20, 0x39, 0x41, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x41, 0x29, 0x41, 0x39, 0x20, + 0x62, 0x5a, 0x20, 0x39, 0x39, 0x10, 0x39, 0x31, 0x10, 0x31, 0x31, 0x08, 0x29, 0x52, 0x08, 0x31, + 0x52, 0x10, 0x62, 0x62, 0x18, 0x5a, 0x52, 0x18, 0x29, 0x29, 0x10, 0x29, 0x20, 0x10, 0x31, 0x29, + 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x29, 0x31, 0x08, 0x39, 0x39, 0x08, + 0x4a, 0x52, 0x20, 0x39, 0x52, 0x18, 0x31, 0x4a, 0x00, 0x31, 0x31, 0x10, 0x39, 0x39, 0x20, 0x31, + 0x29, 0x18, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x6a, 0x62, 0x31, 0x62, 0x62, 0x20, 0x62, 0x6a, + 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, + 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x52, + 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, + 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x41, 0x62, 0x20, + 0x41, 0x6a, 0x10, 0x29, 0x31, 0x10, 0x41, 0x62, 0x20, 0x6a, 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x6a, + 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x5a, 0x7b, 0x31, 0x29, 0x52, 0x08, 0x52, 0x7b, + 0x29, 0x5a, 0x7b, 0x31, 0x62, 0x8b, 0x31, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x4a, + 0x73, 0x20, 0x39, 0x5a, 0x08, 0x52, 0x52, 0x10, 0x29, 0x29, 0x08, 0x41, 0x41, 0x20, 0x31, 0x31, + 0x10, 0x41, 0x41, 0x08, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x4a, 0x41, 0x08, 0x5a, 0x52, 0x18, + 0x5a, 0x5a, 0x08, 0x39, 0x39, 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x52, 0x52, 0x29, 0x6a, + 0x6a, 0x20, 0x6a, 0x62, 0x31, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x41, + 0x18, 0x73, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x52, 0x52, 0x20, 0x4a, 0x41, 0x20, 0x62, 0x62, 0x20, + 0x52, 0x52, 0x20, 0x4a, 0x52, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x7b, + 0x29, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x31, 0x7b, 0xa4, 0x41, + 0x7b, 0xa4, 0x41, 0x6a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x52, 0x83, 0x18, 0x31, + 0x4a, 0x20, 0x39, 0x52, 0x08, 0x31, 0x4a, 0x00, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, + 0x18, 0x39, 0x41, 0x20, 0x39, 0x39, 0x10, 0x31, 0x31, 0x10, 0x39, 0x31, 0x18, 0x41, 0x39, 0x20, + 0x4a, 0x41, 0x20, 0x41, 0x39, 0x10, 0x29, 0x20, 0x10, 0x39, 0x31, 0x10, 0x29, 0x39, 0x00, 0x4a, + 0x73, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x6a, 0x20, 0x31, 0x31, 0x10, 0x20, 0x20, + 0x08, 0x31, 0x31, 0x10, 0x31, 0x31, 0x08, 0x39, 0x41, 0x08, 0x41, 0x4a, 0x08, 0x29, 0x31, 0x08, + 0x41, 0x6a, 0x08, 0x29, 0x52, 0x08, 0x20, 0x4a, 0x08, 0x41, 0x4a, 0x10, 0x41, 0x39, 0x20, 0x41, + 0x41, 0x29, 0x20, 0x18, 0x08, 0x18, 0x18, 0x08, 0x41, 0x41, 0x20, 0x62, 0x62, 0x20, 0x62, 0x73, + 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x83, 0x18, + 0x5a, 0x7b, 0x29, 0x39, 0x5a, 0x18, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x5a, + 0x7b, 0x29, 0x52, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, + 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x18, + 0x31, 0x52, 0x10, 0x31, 0x41, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x73, 0x9c, 0x41, 0x62, + 0x8b, 0x31, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x41, 0x6a, 0x18, 0x5a, 0x7b, + 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x31, + 0x5a, 0x10, 0x31, 0x5a, 0x08, 0x5a, 0x5a, 0x20, 0x31, 0x31, 0x10, 0x4a, 0x41, 0x20, 0x41, 0x41, + 0x18, 0x4a, 0x52, 0x18, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, 0x5a, 0x52, 0x08, + 0x5a, 0x5a, 0x08, 0x39, 0x39, 0x10, 0x18, 0x18, 0x08, 0x31, 0x29, 0x18, 0x4a, 0x4a, 0x20, 0x73, + 0x6a, 0x20, 0x62, 0x6a, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x39, 0x39, + 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, + 0x62, 0x62, 0x20, 0x4a, 0x41, 0x18, 0x62, 0x62, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x20, 0x6a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, + 0x29, 0x52, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x7b, 0x9c, 0x41, + 0x73, 0x9c, 0x41, 0x73, 0x9c, 0x41, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x62, 0x10, 0x39, + 0x5a, 0x18, 0x31, 0x5a, 0x08, 0x41, 0x6a, 0x10, 0x39, 0x41, 0x08, 0x4a, 0x52, 0x08, 0x52, 0x52, + 0x10, 0x52, 0x5a, 0x08, 0x31, 0x31, 0x20, 0x39, 0x31, 0x10, 0x31, 0x29, 0x08, 0x39, 0x31, 0x18, + 0x4a, 0x41, 0x20, 0x39, 0x39, 0x10, 0x31, 0x20, 0x10, 0x41, 0x31, 0x18, 0x39, 0x39, 0x10, 0x52, + 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x7b, 0x29, 0x39, 0x41, + 0x10, 0x31, 0x31, 0x10, 0x29, 0x31, 0x08, 0x29, 0x29, 0x08, 0x39, 0x52, 0x08, 0x39, 0x62, 0x08, + 0x18, 0x39, 0x00, 0x41, 0x5a, 0x29, 0x31, 0x52, 0x08, 0x29, 0x4a, 0x00, 0x39, 0x39, 0x10, 0x31, + 0x31, 0x10, 0x4a, 0x41, 0x29, 0x20, 0x20, 0x10, 0x31, 0x29, 0x18, 0x62, 0x62, 0x20, 0x5a, 0x7b, + 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, + 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x4a, + 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, + 0x20, 0x52, 0x7b, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x73, 0x08, 0x31, 0x52, 0x10, + 0x39, 0x5a, 0x18, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x29, 0x62, + 0x83, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, + 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x18, + 0x39, 0x00, 0x39, 0x52, 0x20, 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x62, 0x62, 0x20, 0x52, 0x52, + 0x20, 0x41, 0x41, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x10, 0x5a, 0x5a, 0x08, + 0x41, 0x4a, 0x10, 0x62, 0x62, 0x08, 0x29, 0x20, 0x08, 0x39, 0x41, 0x18, 0x52, 0x52, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x5a, 0x52, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, + 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x62, 0x62, 0x20, 0x39, 0x41, 0x18, 0x52, 0x4a, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x6a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x4a, 0x6a, + 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, + 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x29, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x73, 0x20, 0x62, 0x62, 0x18, 0x41, 0x41, + 0x10, 0x31, 0x31, 0x10, 0x39, 0x41, 0x08, 0x39, 0x31, 0x08, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, + 0x31, 0x39, 0x08, 0x29, 0x29, 0x08, 0x31, 0x20, 0x10, 0x41, 0x39, 0x10, 0x39, 0x39, 0x20, 0x52, + 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x4a, 0x73, 0x18, 0x29, 0x4a, 0x10, 0x29, 0x41, 0x10, 0x18, 0x31, 0x08, 0x31, 0x5a, 0x08, + 0x29, 0x5a, 0x00, 0x41, 0x62, 0x08, 0x4a, 0x52, 0x20, 0x29, 0x41, 0x10, 0x39, 0x39, 0x20, 0x39, + 0x39, 0x18, 0x4a, 0x41, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x52, 0x7b, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x4a, + 0x6a, 0x29, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x41, 0x62, 0x18, 0x4a, 0x62, 0x20, 0x41, 0x6a, 0x18, 0x31, 0x62, 0x08, 0x4a, 0x6a, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, + 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, + 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x31, 0x4a, 0x20, 0x39, + 0x41, 0x20, 0x29, 0x31, 0x10, 0x4a, 0x5a, 0x29, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x62, 0x62, + 0x29, 0x39, 0x41, 0x08, 0x5a, 0x5a, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x4a, 0x08, 0x41, 0x4a, 0x10, + 0x31, 0x29, 0x08, 0x52, 0x4a, 0x08, 0x39, 0x31, 0x08, 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x18, 0x73, + 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x31, 0x31, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, + 0x6a, 0x6a, 0x20, 0x39, 0x39, 0x08, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, 0x62, + 0x62, 0x20, 0x5a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, + 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, + 0x20, 0x41, 0x41, 0x18, 0x31, 0x31, 0x08, 0x31, 0x39, 0x08, 0x29, 0x29, 0x08, 0x39, 0x39, 0x10, + 0x41, 0x31, 0x18, 0x39, 0x29, 0x18, 0x29, 0x29, 0x18, 0x31, 0x31, 0x10, 0x39, 0x41, 0x18, 0x52, + 0x5a, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x29, 0x5a, 0x7b, 0x20, 0x41, 0x6a, 0x18, 0x41, 0x5a, 0x18, 0x18, 0x39, 0x00, 0x18, 0x31, 0x08, + 0x29, 0x52, 0x08, 0x31, 0x5a, 0x10, 0x4a, 0x52, 0x29, 0x41, 0x62, 0x08, 0x41, 0x4a, 0x18, 0x4a, + 0x4a, 0x18, 0x62, 0x5a, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x41, 0x5a, 0x18, 0x52, 0x7b, + 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, + 0x62, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, + 0x29, 0x5a, 0x5a, 0x29, 0x4a, 0x52, 0x29, 0x52, 0x62, 0x29, 0x39, 0x62, 0x08, 0x4a, 0x6a, 0x29, + 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, + 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, + 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, + 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x41, 0x62, 0x18, 0x20, 0x4a, 0x08, 0x41, + 0x62, 0x20, 0x29, 0x31, 0x10, 0x39, 0x52, 0x20, 0x41, 0x41, 0x20, 0x5a, 0x52, 0x20, 0x6a, 0x6a, + 0x31, 0x39, 0x41, 0x08, 0x31, 0x31, 0x08, 0x20, 0x29, 0x00, 0x41, 0x41, 0x08, 0x20, 0x29, 0x00, + 0x29, 0x31, 0x10, 0x52, 0x5a, 0x08, 0x41, 0x4a, 0x20, 0x41, 0x41, 0x18, 0x41, 0x4a, 0x20, 0x6a, + 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x4a, 0x4a, 0x20, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x39, 0x39, 0x00, 0x41, 0x4a, 0x10, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x18, 0x52, + 0x4a, 0x20, 0x5a, 0x7b, 0x29, 0x4a, 0x73, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, + 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x62, 0x29, 0x52, 0x83, 0x18, 0x62, + 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x94, 0x39, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, + 0x31, 0x73, 0x73, 0x20, 0x41, 0x41, 0x18, 0x20, 0x20, 0x10, 0x29, 0x29, 0x08, 0x29, 0x29, 0x10, + 0x29, 0x31, 0x10, 0x29, 0x41, 0x10, 0x18, 0x31, 0x08, 0x31, 0x41, 0x18, 0x4a, 0x52, 0x10, 0x52, + 0x5a, 0x29, 0x5a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x73, 0x18, 0x29, 0x41, 0x10, 0x29, 0x41, 0x00, + 0x20, 0x4a, 0x00, 0x18, 0x41, 0x00, 0x39, 0x62, 0x08, 0x41, 0x6a, 0x08, 0x41, 0x5a, 0x08, 0x41, + 0x4a, 0x18, 0x52, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, + 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, + 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x39, 0x5a, 0x18, 0x39, 0x62, + 0x10, 0x41, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x41, 0x52, 0x18, 0x41, 0x5a, 0x08, 0x52, 0x73, 0x29, + 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, + 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, + 0x52, 0x83, 0x18, 0x52, 0x73, 0x29, 0x39, 0x62, 0x10, 0x31, 0x52, 0x10, 0x39, 0x5a, 0x18, 0x39, + 0x4a, 0x29, 0x29, 0x31, 0x10, 0x41, 0x5a, 0x29, 0x4a, 0x5a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x29, 0x29, 0x10, 0x29, 0x31, 0x08, 0x39, 0x39, 0x10, 0x41, 0x4a, 0x08, 0x41, 0x41, 0x10, + 0x41, 0x4a, 0x08, 0x52, 0x52, 0x10, 0x39, 0x39, 0x08, 0x4a, 0x41, 0x18, 0x31, 0x31, 0x18, 0x31, + 0x29, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x29, 0x29, 0x10, 0x5a, 0x5a, 0x20, 0x52, 0x5a, + 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x6a, 0x6a, 0x31, + 0x6a, 0x6a, 0x10, 0x5a, 0x5a, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x41, 0x10, 0x31, 0x39, 0x08, 0x39, + 0x4a, 0x18, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x18, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x29, 0x7b, 0xa4, 0x41, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x83, 0x7b, + 0x31, 0x73, 0x8b, 0x39, 0x73, 0x6a, 0x20, 0x20, 0x20, 0x10, 0x29, 0x29, 0x18, 0x20, 0x20, 0x08, + 0x4a, 0x52, 0x18, 0x39, 0x62, 0x10, 0x18, 0x41, 0x00, 0x41, 0x62, 0x18, 0x29, 0x4a, 0x10, 0x4a, + 0x5a, 0x29, 0x4a, 0x5a, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x62, 0x31, 0x39, 0x4a, 0x18, + 0x31, 0x31, 0x08, 0x31, 0x41, 0x08, 0x31, 0x52, 0x08, 0x31, 0x5a, 0x08, 0x20, 0x4a, 0x08, 0x41, + 0x52, 0x08, 0x41, 0x62, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, + 0x4a, 0x73, 0x20, 0x41, 0x62, 0x20, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x41, + 0x5a, 0x18, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x62, 0x20, 0x39, 0x52, + 0x18, 0x39, 0x73, 0x08, 0x4a, 0x73, 0x08, 0x41, 0x62, 0x08, 0x41, 0x5a, 0x08, 0x52, 0x73, 0x20, + 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x52, + 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, + 0x18, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, + 0x52, 0x73, 0x20, 0x41, 0x52, 0x20, 0x52, 0x52, 0x29, 0x4a, 0x5a, 0x29, 0x52, 0x52, 0x29, 0x31, + 0x5a, 0x10, 0x39, 0x5a, 0x18, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, + 0x20, 0x29, 0x29, 0x10, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x5a, 0x5a, 0x08, 0x29, 0x31, 0x08, + 0x41, 0x4a, 0x08, 0x52, 0x52, 0x08, 0x52, 0x5a, 0x08, 0x52, 0x4a, 0x20, 0x31, 0x31, 0x18, 0x4a, + 0x52, 0x29, 0x39, 0x31, 0x10, 0x41, 0x41, 0x18, 0x29, 0x29, 0x10, 0x62, 0x62, 0x20, 0x4a, 0x73, + 0x20, 0x52, 0x6a, 0x20, 0x52, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x4a, 0x5a, 0x18, 0x4a, 0x41, 0x08, 0x39, 0x31, 0x20, 0x31, 0x31, 0x10, 0x29, + 0x4a, 0x00, 0x31, 0x5a, 0x10, 0x39, 0x5a, 0x18, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x29, 0x6a, 0x94, + 0x29, 0x73, 0x9c, 0x39, 0x62, 0x94, 0x31, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x52, 0x20, 0x41, + 0x62, 0x18, 0x52, 0x7b, 0x20, 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x41, 0x73, 0x9c, 0x39, 0x6a, 0x7b, + 0x29, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x31, 0x29, 0x10, 0x20, 0x29, 0x00, + 0x31, 0x39, 0x18, 0x41, 0x6a, 0x10, 0x41, 0x5a, 0x29, 0x39, 0x5a, 0x20, 0x41, 0x62, 0x18, 0x41, + 0x52, 0x20, 0x41, 0x52, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x18, 0x41, 0x00, + 0x39, 0x39, 0x00, 0x31, 0x31, 0x08, 0x39, 0x41, 0x08, 0x31, 0x4a, 0x10, 0x52, 0x62, 0x20, 0x41, + 0x73, 0x08, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, + 0x52, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x20, 0x52, + 0x62, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x73, 0x20, 0x41, 0x62, + 0x20, 0x41, 0x73, 0x08, 0x62, 0x8b, 0x29, 0x31, 0x62, 0x08, 0x29, 0x52, 0x08, 0x39, 0x62, 0x10, + 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, + 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, + 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, + 0x41, 0x5a, 0x29, 0x31, 0x39, 0x10, 0x4a, 0x4a, 0x18, 0x39, 0x41, 0x10, 0x52, 0x5a, 0x18, 0x4a, + 0x62, 0x20, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, + 0x20, 0x29, 0x31, 0x10, 0x4a, 0x4a, 0x10, 0x39, 0x41, 0x08, 0x52, 0x4a, 0x08, 0x41, 0x39, 0x18, + 0x41, 0x41, 0x10, 0x52, 0x52, 0x10, 0x4a, 0x52, 0x08, 0x5a, 0x52, 0x20, 0x39, 0x39, 0x20, 0x5a, + 0x5a, 0x20, 0x4a, 0x4a, 0x10, 0x41, 0x41, 0x10, 0x41, 0x4a, 0x18, 0x39, 0x4a, 0x08, 0x4a, 0x62, + 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x6a, 0x20, 0x62, 0x62, 0x20, + 0x6a, 0x6a, 0x31, 0x39, 0x39, 0x00, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, 0x52, 0x08, 0x52, + 0x5a, 0x29, 0x41, 0x4a, 0x20, 0x31, 0x52, 0x10, 0x5a, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x7b, 0xa4, + 0x41, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x52, 0x18, 0x31, + 0x39, 0x10, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x29, 0x6a, 0x8b, 0x39, 0x6a, 0x94, 0x39, 0x5a, 0x83, + 0x29, 0x62, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x62, 0x29, 0x31, 0x29, 0x10, + 0x41, 0x41, 0x10, 0x41, 0x6a, 0x08, 0x41, 0x73, 0x08, 0x41, 0x6a, 0x18, 0x29, 0x52, 0x08, 0x41, + 0x6a, 0x10, 0x52, 0x73, 0x10, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x41, 0x6a, 0x18, + 0x41, 0x4a, 0x08, 0x20, 0x29, 0x00, 0x41, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x52, 0x73, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x83, 0x18, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x83, + 0x18, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, + 0x62, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x52, + 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, + 0x20, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x18, 0x39, 0x00, 0x18, 0x41, 0x00, + 0x4a, 0x73, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, + 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, + 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x20, + 0x29, 0x52, 0x08, 0x18, 0x41, 0x00, 0x41, 0x62, 0x08, 0x41, 0x73, 0x08, 0x41, 0x62, 0x08, 0x41, + 0x5a, 0x29, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x6a, 0x6a, + 0x10, 0x31, 0x29, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x39, 0x18, 0x39, 0x31, 0x20, 0x39, 0x29, 0x18, + 0x39, 0x20, 0x10, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x10, 0x31, 0x31, 0x10, 0x41, + 0x39, 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x39, 0x18, 0x41, 0x41, 0x08, 0x4a, 0x52, 0x20, 0x41, 0x62, + 0x20, 0x39, 0x62, 0x10, 0x52, 0x73, 0x20, 0x52, 0x73, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, + 0x6a, 0x6a, 0x20, 0x39, 0x41, 0x10, 0x39, 0x39, 0x08, 0x39, 0x41, 0x10, 0x4a, 0x4a, 0x08, 0x41, + 0x41, 0x20, 0x41, 0x41, 0x29, 0x62, 0x62, 0x39, 0x4a, 0x73, 0x20, 0x6a, 0x94, 0x29, 0x7b, 0xa4, + 0x41, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, + 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x31, 0x52, 0x10, 0x39, 0x4a, 0x18, 0x31, + 0x4a, 0x18, 0x52, 0x62, 0x29, 0x4a, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x73, 0x20, 0x6a, 0x94, + 0x39, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x20, + 0x39, 0x39, 0x20, 0x31, 0x39, 0x18, 0x4a, 0x52, 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x20, 0x5a, + 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, + 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, 0x83, 0x20, 0x52, 0x7b, 0x20, + 0x29, 0x31, 0x08, 0x41, 0x41, 0x08, 0x39, 0x41, 0x10, 0x6a, 0x6a, 0x20, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x73, + 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x20, 0x62, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x6a, 0x94, + 0x31, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x41, 0x73, 0x08, 0x31, 0x5a, 0x10, + 0x29, 0x4a, 0x00, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x6a, 0x20, 0x52, + 0x73, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x73, + 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, + 0x5a, 0x7b, 0x20, 0x18, 0x41, 0x00, 0x31, 0x5a, 0x10, 0x20, 0x4a, 0x08, 0x29, 0x4a, 0x00, 0x41, + 0x62, 0x20, 0x4a, 0x62, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, + 0x20, 0x29, 0x31, 0x10, 0x31, 0x31, 0x20, 0x39, 0x31, 0x29, 0x31, 0x31, 0x08, 0x31, 0x29, 0x18, + 0x41, 0x39, 0x20, 0x39, 0x39, 0x20, 0x4a, 0x39, 0x18, 0x31, 0x31, 0x20, 0x31, 0x31, 0x20, 0x4a, + 0x41, 0x18, 0x31, 0x39, 0x18, 0x31, 0x39, 0x10, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x29, 0x5a, 0x83, + 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x73, 0x18, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, + 0x73, 0x6a, 0x20, 0x4a, 0x52, 0x10, 0x52, 0x5a, 0x08, 0x41, 0x41, 0x08, 0x41, 0x4a, 0x08, 0x41, + 0x41, 0x08, 0x41, 0x52, 0x08, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x6a, 0x94, + 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x41, 0x62, 0x20, + 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x4a, 0x62, 0x29, 0x39, 0x5a, 0x10, 0x4a, + 0x62, 0x18, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x73, + 0x31, 0x4a, 0x62, 0x29, 0x41, 0x5a, 0x20, 0x31, 0x39, 0x18, 0x31, 0x39, 0x18, 0x39, 0x31, 0x20, + 0x41, 0x62, 0x20, 0x31, 0x52, 0x10, 0x41, 0x4a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x62, 0x29, 0x4a, + 0x62, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, + 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x52, 0x08, 0x5a, 0x5a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x39, 0x62, 0x10, 0x4a, 0x52, 0x20, 0x4a, 0x73, + 0x18, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x20, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x31, 0x52, 0x73, 0x31, 0x31, 0x62, 0x08, + 0x18, 0x39, 0x00, 0x20, 0x4a, 0x08, 0x29, 0x4a, 0x00, 0x4a, 0x6a, 0x29, 0x4a, 0x73, 0x20, 0x4a, + 0x62, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, + 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x52, 0x73, 0x29, 0x4a, 0x73, 0x18, 0x18, 0x41, 0x00, 0x29, 0x52, 0x08, 0x39, 0x4a, 0x18, 0x4a, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x7b, + 0x10, 0x29, 0x31, 0x10, 0x29, 0x29, 0x10, 0x41, 0x41, 0x08, 0x39, 0x31, 0x20, 0x39, 0x31, 0x18, + 0x31, 0x31, 0x08, 0x29, 0x29, 0x18, 0x41, 0x41, 0x29, 0x41, 0x41, 0x29, 0x4a, 0x4a, 0x20, 0x5a, + 0x5a, 0x18, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x18, 0x52, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x29, 0x52, 0x73, 0x20, 0x52, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x62, 0x20, + 0x52, 0x62, 0x20, 0x52, 0x52, 0x10, 0x39, 0x39, 0x08, 0x39, 0x39, 0x08, 0x41, 0x41, 0x10, 0x41, + 0x41, 0x10, 0x52, 0x5a, 0x08, 0x52, 0x5a, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x4a, 0x62, 0x29, 0x31, 0x41, 0x20, + 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x62, + 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x31, 0x5a, 0x6a, 0x20, + 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x52, 0x6a, 0x29, 0x41, 0x4a, 0x20, 0x52, 0x5a, 0x18, 0x6a, + 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x52, 0x6a, 0x20, 0x4a, 0x6a, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x31, 0x62, 0x08, 0x29, 0x4a, 0x00, 0x31, 0x5a, 0x08, 0x39, 0x73, + 0x08, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x6a, 0x20, + 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x41, 0x73, 0x08, 0x31, 0x52, 0x10, + 0x29, 0x4a, 0x00, 0x31, 0x41, 0x08, 0x41, 0x6a, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, + 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, + 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x18, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x7b, + 0x20, 0x29, 0x29, 0x18, 0x29, 0x29, 0x10, 0x31, 0x31, 0x10, 0x31, 0x29, 0x18, 0x31, 0x31, 0x18, + 0x31, 0x31, 0x10, 0x41, 0x41, 0x10, 0x4a, 0x52, 0x08, 0x41, 0x41, 0x29, 0x62, 0x5a, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x62, 0x7b, 0x20, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x52, 0x52, 0x10, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, 0x39, 0x20, 0x41, + 0x41, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x31, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x29, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, + 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, + 0x6a, 0x73, 0x20, 0x5a, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x6a, 0x20, 0x6a, + 0x94, 0x31, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x8b, 0x20, 0x52, + 0x7b, 0x20, 0x41, 0x73, 0x08, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x73, 0x20, 0x31, 0x62, + 0x08, 0x39, 0x62, 0x08, 0x52, 0x7b, 0x20, 0x5a, 0x6a, 0x20, 0x62, 0x5a, 0x18, 0x41, 0x5a, 0x20, + 0x52, 0x62, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x52, 0x7b, 0x10, 0x39, 0x62, 0x10, + 0x4a, 0x4a, 0x18, 0x41, 0x52, 0x18, 0x4a, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, + 0x7b, 0x29, 0x52, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x73, + 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, + 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x4a, 0x62, 0x29, 0x62, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x7b, + 0x20, 0x31, 0x31, 0x10, 0x29, 0x29, 0x10, 0x31, 0x29, 0x10, 0x29, 0x29, 0x10, 0x39, 0x31, 0x18, + 0x52, 0x4a, 0x20, 0x39, 0x39, 0x20, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x10, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x10, + 0x52, 0x52, 0x10, 0x39, 0x41, 0x08, 0x41, 0x41, 0x08, 0x41, 0x4a, 0x10, 0x41, 0x41, 0x10, 0x31, + 0x39, 0x08, 0x41, 0x41, 0x18, 0x52, 0x62, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, + 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x73, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x83, + 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x73, 0x20, 0x52, 0x62, 0x29, 0x5a, 0x5a, 0x29, + 0x52, 0x52, 0x29, 0x5a, 0x5a, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, + 0x7b, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x94, 0x31, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, + 0x20, 0x31, 0x4a, 0x00, 0x31, 0x41, 0x08, 0x41, 0x41, 0x18, 0x41, 0x5a, 0x18, 0x52, 0x5a, 0x29, + 0x52, 0x5a, 0x29, 0x4a, 0x62, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x31, 0x52, 0x10, + 0x39, 0x4a, 0x08, 0x41, 0x5a, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, + 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x29, 0x52, 0x7b, + 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x6a, 0x20, 0x5a, + 0x83, 0x29, 0x6a, 0x94, 0x31, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, + 0x29, 0x39, 0x41, 0x10, 0x31, 0x31, 0x18, 0x31, 0x39, 0x10, 0x39, 0x39, 0x10, 0x29, 0x29, 0x10, + 0x20, 0x20, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x6a, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, + 0x29, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x41, 0x4a, 0x18, + 0x41, 0x41, 0x08, 0x29, 0x31, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x4a, 0x08, 0x52, 0x52, 0x10, 0x39, + 0x39, 0x08, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x29, 0x41, 0x5a, + 0x18, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, + 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x6a, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x29, 0x4a, 0x00, 0x31, 0x62, + 0x08, 0x39, 0x62, 0x10, 0x52, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x20, 0x52, 0x5a, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, + 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x6a, 0x8b, 0x29, 0x6a, + 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x7b, + 0x20, 0x4a, 0x4a, 0x18, 0x39, 0x4a, 0x08, 0x4a, 0x5a, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x4a, + 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x20, + 0x39, 0x62, 0x10, 0x41, 0x62, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x52, + 0x7b, 0x20, 0x52, 0x62, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x6a, + 0x29, 0x52, 0x73, 0x20, 0x62, 0x8b, 0x31, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x8b, 0x20, 0x6a, 0x94, 0x39, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x41, 0x62, 0x08, 0x4a, 0x4a, 0x20, 0x52, 0x4a, 0x18, 0x31, 0x39, 0x08, 0x31, 0x31, 0x10, + 0x31, 0x31, 0x20, 0x41, 0x41, 0x18, 0x62, 0x5a, 0x29, 0x4a, 0x4a, 0x20, 0x4a, 0x52, 0x20, 0x52, + 0x73, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, + 0x29, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x6a, 0x62, 0x20, 0x41, 0x41, 0x10, + 0x4a, 0x4a, 0x10, 0x31, 0x39, 0x18, 0x29, 0x29, 0x08, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, + 0x41, 0x10, 0x4a, 0x4a, 0x20, 0x52, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x62, 0x18, 0x52, 0x5a, + 0x29, 0x31, 0x52, 0x10, 0x62, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, + 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x62, 0x94, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x18, 0x41, 0x00, 0x31, 0x5a, + 0x08, 0x31, 0x52, 0x08, 0x62, 0x62, 0x08, 0x4a, 0x52, 0x10, 0x4a, 0x4a, 0x10, 0x6a, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x52, 0x73, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x9c, + 0x29, 0x62, 0x94, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, 0x94, 0x41, 0x62, + 0x94, 0x20, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x5a, + 0x08, 0x4a, 0x52, 0x10, 0x52, 0x52, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x73, 0x20, 0x5a, 0x7b, 0x29, + 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x6a, 0x94, + 0x31, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x7b, 0x29, + 0x5a, 0x73, 0x20, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x52, + 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x52, 0x73, + 0x29, 0x52, 0x73, 0x20, 0x6a, 0x94, 0x31, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, + 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, + 0x29, 0x4a, 0x73, 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x52, 0x20, 0x52, 0x5a, 0x18, 0x31, 0x31, 0x08, + 0x39, 0x31, 0x10, 0x4a, 0x41, 0x10, 0x52, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x52, + 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, + 0x20, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x29, 0x4a, 0x4a, 0x20, 0x62, 0x5a, 0x20, 0x39, 0x31, 0x10, + 0x4a, 0x4a, 0x10, 0x31, 0x31, 0x18, 0x39, 0x41, 0x08, 0x41, 0x39, 0x18, 0x41, 0x39, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x4a, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, + 0x20, 0x31, 0x4a, 0x10, 0x39, 0x5a, 0x18, 0x4a, 0x5a, 0x29, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x29, + 0x62, 0x8b, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x94, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x20, 0x29, 0x52, 0x08, 0x39, 0x52, + 0x18, 0x39, 0x39, 0x10, 0x41, 0x41, 0x08, 0x41, 0x41, 0x08, 0x29, 0x31, 0x08, 0x29, 0x31, 0x08, + 0x31, 0x39, 0x08, 0x4a, 0x4a, 0x10, 0x62, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, + 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, 0x83, 0x31, 0x73, + 0x8b, 0x39, 0x62, 0x83, 0x20, 0x52, 0x73, 0x10, 0x31, 0x52, 0x08, 0x41, 0x52, 0x08, 0x29, 0x31, + 0x10, 0x41, 0x4a, 0x18, 0x5a, 0x52, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, + 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x29, 0x52, 0x08, 0x5a, 0x83, 0x20, 0x39, 0x4a, 0x18, 0x62, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, + 0x4a, 0x73, 0x18, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, + 0x29, 0x52, 0x7b, 0x20, 0x6a, 0x94, 0x39, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x31, 0x7b, 0x9c, 0x41, 0x73, 0x94, 0x41, 0x6a, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x6a, 0x8b, + 0x39, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x73, 0x20, + 0x29, 0x39, 0x18, 0x31, 0x52, 0x10, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, + 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x5a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x62, 0x62, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x52, 0x10, 0x4a, 0x41, 0x10, 0x4a, 0x4a, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x52, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, + 0x18, 0x41, 0x6a, 0x18, 0x39, 0x5a, 0x10, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, + 0x94, 0x31, 0x62, 0x94, 0x29, 0x52, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x41, 0x62, 0x08, 0x39, 0x41, + 0x20, 0x39, 0x39, 0x10, 0x39, 0x41, 0x08, 0x29, 0x31, 0x08, 0x41, 0x4a, 0x08, 0x29, 0x29, 0x08, + 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x52, 0x52, 0x18, 0x52, 0x62, 0x29, 0x4a, 0x5a, 0x18, 0x4a, + 0x6a, 0x18, 0x52, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x10, 0x41, 0x4a, 0x18, 0x52, 0x52, + 0x20, 0x5a, 0x52, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x6a, 0x20, 0x52, 0x7b, 0x29, + 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x5a, + 0x83, 0x29, 0x41, 0x6a, 0x10, 0x29, 0x52, 0x00, 0x4a, 0x6a, 0x20, 0x29, 0x39, 0x18, 0x5a, 0x83, + 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x41, 0x62, 0x20, 0x41, 0x62, 0x08, + 0x52, 0x83, 0x18, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x7b, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, + 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x6a, + 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x73, 0x9c, 0x41, 0x73, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x73, 0x9c, + 0x41, 0x5a, 0x83, 0x31, 0x4a, 0x62, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, + 0x4a, 0x6a, 0x20, 0x31, 0x4a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x52, + 0x73, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x73, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x39, 0x39, 0x20, 0x41, 0x41, 0x08, 0x41, 0x41, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x62, 0x83, 0x29, 0x52, 0x62, 0x20, 0x4a, 0x39, + 0x08, 0x31, 0x31, 0x10, 0x41, 0x41, 0x08, 0x41, 0x39, 0x08, 0x31, 0x20, 0x10, 0x29, 0x29, 0x08, + 0x4a, 0x39, 0x08, 0x39, 0x29, 0x18, 0x4a, 0x5a, 0x29, 0x41, 0x52, 0x20, 0x39, 0x5a, 0x10, 0x39, + 0x52, 0x18, 0x39, 0x52, 0x18, 0x31, 0x4a, 0x00, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x94, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x20, 0x62, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x52, 0x20, 0x4a, 0x6a, 0x18, + 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x41, 0x52, 0x20, 0x52, 0x7b, 0x20, 0x52, + 0x83, 0x18, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x18, 0x5a, 0x83, + 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, + 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x5a, + 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x39, + 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x39, 0x5a, 0x8b, 0x29, 0x4a, 0x6a, 0x18, 0x5a, 0x8b, 0x20, 0x7b, + 0x9c, 0x41, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x6a, 0x8b, 0x39, 0x7b, 0xa4, 0x41, 0x7b, 0x9c, + 0x41, 0x62, 0x83, 0x31, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x5a, 0x7b, 0x29, 0x41, 0x5a, 0x20, 0x39, 0x52, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, + 0x6a, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, + 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x4a, 0x4a, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x52, + 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x62, 0x7b, 0x39, 0x62, 0x7b, + 0x39, 0x4a, 0x6a, 0x29, 0x41, 0x62, 0x18, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x62, 0x20, + 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x5a, 0x18, 0x39, 0x29, + 0x10, 0x29, 0x29, 0x08, 0x39, 0x39, 0x08, 0x31, 0x31, 0x10, 0x31, 0x29, 0x08, 0x31, 0x31, 0x08, + 0x39, 0x39, 0x10, 0x39, 0x39, 0x10, 0x41, 0x5a, 0x08, 0x41, 0x5a, 0x08, 0x41, 0x52, 0x18, 0x39, + 0x5a, 0x10, 0x39, 0x52, 0x18, 0x39, 0x5a, 0x10, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x31, 0x52, 0x7b, + 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, + 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x5a, + 0x5a, 0x29, 0x52, 0x52, 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, 0x52, 0x52, 0x20, 0x62, 0x62, + 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x18, + 0x31, 0x4a, 0x20, 0x39, 0x4a, 0x20, 0x39, 0x4a, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, 0x62, + 0x62, 0x29, 0x62, 0x62, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x52, 0x20, 0x52, 0x83, + 0x18, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x20, 0x62, 0x94, 0x29, 0x5a, + 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x9c, 0x29, + 0x73, 0x9c, 0x41, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x7b, + 0xa4, 0x41, 0x73, 0x94, 0x41, 0x6a, 0x94, 0x41, 0x73, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x7b, 0xa4, + 0x41, 0x5a, 0x83, 0x31, 0x52, 0x73, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x39, 0x18, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x52, + 0x6a, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, + 0x20, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x62, 0x29, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x29, + 0x52, 0x52, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x4a, + 0x73, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x52, 0x73, 0x20, 0x62, 0x7b, 0x39, 0x62, 0x7b, + 0x39, 0x52, 0x73, 0x31, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x41, 0x62, 0x20, + 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, + 0x8b, 0x29, 0x41, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x62, 0x20, 0x31, 0x29, + 0x08, 0x4a, 0x4a, 0x08, 0x29, 0x29, 0x08, 0x39, 0x29, 0x10, 0x39, 0x29, 0x10, 0x20, 0x29, 0x00, + 0x31, 0x31, 0x08, 0x41, 0x39, 0x10, 0x41, 0x39, 0x10, 0x39, 0x5a, 0x18, 0x39, 0x52, 0x18, 0x39, + 0x52, 0x08, 0x52, 0x73, 0x29, 0x62, 0x7b, 0x39, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x83, + 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x7b, 0x7b, 0x29, 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x52, + 0x4a, 0x20, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x08, 0x31, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x41, 0x20, + 0x39, 0x4a, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x5a, 0x5a, 0x18, 0x62, + 0x62, 0x20, 0x62, 0x62, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x29, 0x62, 0x73, + 0x20, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x5a, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, + 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x5a, + 0x83, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, + 0x29, 0x62, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x73, 0x9c, 0x41, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x52, 0x83, 0x18, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x7b, + 0x9c, 0x41, 0x7b, 0x9c, 0x41, 0x62, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x73, 0x94, 0x41, 0x7b, 0x9c, + 0x41, 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x31, 0x62, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x4a, 0x52, 0x29, 0x41, 0x5a, 0x20, 0x52, 0x73, 0x20, 0x4a, + 0x6a, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, + 0x29, 0x4a, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x4a, 0x18, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x52, + 0x7b, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x31, 0x4a, 0x6a, + 0x29, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x18, 0x41, 0x5a, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x7b, 0x29, + 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x31, + 0x41, 0x18, 0x39, 0x39, 0x20, 0x62, 0x5a, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x4a, 0x20, 0x31, 0x20, + 0x10, 0x29, 0x29, 0x10, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x39, 0x31, 0x18, 0x31, 0x31, 0x08, + 0x39, 0x39, 0x08, 0x39, 0x31, 0x10, 0x41, 0x39, 0x10, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x6a, + 0x73, 0x20, 0x52, 0x62, 0x29, 0x41, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, + 0x29, 0x52, 0x83, 0x18, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x7b, + 0x7b, 0x29, 0x5a, 0x5a, 0x20, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x10, 0x4a, 0x52, 0x20, 0x62, 0x5a, + 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x52, 0x20, + 0x41, 0x5a, 0x18, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x6a, + 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x41, 0x18, 0x41, 0x4a, 0x20, 0x52, 0x62, + 0x29, 0x73, 0x83, 0x31, 0x62, 0x5a, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x62, 0x20, + 0x62, 0x6a, 0x20, 0x5a, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x20, 0x52, + 0x73, 0x20, 0x4a, 0x73, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x7b, 0xa4, 0x41, 0x83, 0xac, + 0x4a, 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x39, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, + 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x52, 0x83, 0x18, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x73, + 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x73, 0x94, + 0x41, 0x5a, 0x7b, 0x31, 0x52, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x73, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x73, 0x20, 0x39, 0x52, 0x20, 0x52, 0x6a, 0x20, 0x4a, + 0x73, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, + 0x20, 0x52, 0x7b, 0x29, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x62, 0x62, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x41, 0x39, 0x10, 0x31, + 0x31, 0x10, 0x4a, 0x41, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, + 0x18, 0x52, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x62, 0x6a, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x20, 0x6a, 0x9c, 0x29, 0x5a, 0x7b, 0x29, 0x41, + 0x39, 0x18, 0x39, 0x39, 0x18, 0x39, 0x41, 0x18, 0x62, 0x5a, 0x29, 0x4a, 0x31, 0x18, 0x4a, 0x31, + 0x18, 0x31, 0x31, 0x20, 0x4a, 0x41, 0x08, 0x41, 0x41, 0x18, 0x39, 0x29, 0x10, 0x39, 0x31, 0x10, + 0x39, 0x41, 0x08, 0x4a, 0x41, 0x08, 0x31, 0x29, 0x10, 0x39, 0x29, 0x18, 0x73, 0x6a, 0x20, 0x52, + 0x52, 0x29, 0x4a, 0x4a, 0x29, 0x5a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, + 0x29, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, + 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x83, + 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x5a, 0x5a, 0x18, 0x39, 0x41, 0x18, 0x39, 0x39, 0x08, 0x5a, 0x5a, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x5a, 0x18, + 0x41, 0x5a, 0x18, 0x39, 0x5a, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x62, + 0x62, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x52, 0x4a, + 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x62, 0x6a, 0x20, 0x62, 0x62, 0x20, + 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x41, 0x62, 0x20, 0x29, + 0x41, 0x10, 0x39, 0x4a, 0x08, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x39, 0x73, 0x9c, 0x41, 0x6a, 0x9c, + 0x29, 0x7b, 0x9c, 0x41, 0x7b, 0xa4, 0x41, 0x6a, 0x94, 0x39, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x5a, + 0x8b, 0x29, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x31, 0x6a, 0x8b, + 0x39, 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x31, 0x5a, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x41, 0x4a, 0x18, 0x41, 0x5a, 0x20, 0x52, + 0x73, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, + 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x20, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x18, 0x31, 0x20, 0x10, 0x39, 0x29, 0x10, 0x31, + 0x31, 0x08, 0x31, 0x31, 0x08, 0x4a, 0x5a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x52, 0x5a, + 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x6a, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x4a, 0x4a, 0x18, 0x73, 0x83, 0x31, 0x4a, 0x41, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x29, 0x18, 0x4a, 0x31, + 0x18, 0x41, 0x39, 0x10, 0x41, 0x4a, 0x10, 0x4a, 0x4a, 0x10, 0x62, 0x62, 0x08, 0x4a, 0x41, 0x10, + 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x39, 0x29, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x4a, + 0x4a, 0x29, 0x5a, 0x5a, 0x29, 0x6a, 0x73, 0x20, 0x5a, 0x7b, 0x31, 0x62, 0x83, 0x31, 0x6a, 0x8b, + 0x39, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x7b, 0x7b, 0x29, 0x7b, + 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x41, 0x39, 0x20, 0x41, 0x41, 0x20, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, + 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x20, 0x62, 0x62, 0x20, 0x41, 0x41, + 0x20, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x6a, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x18, + 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x18, 0x29, + 0x4a, 0x00, 0x29, 0x41, 0x10, 0x52, 0x6a, 0x20, 0x62, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x6a, 0x94, + 0x31, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, + 0x6a, 0x94, 0x31, 0x6a, 0x8b, 0x29, 0x4a, 0x52, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x31, 0x5a, 0x83, 0x31, 0x5a, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x5a, 0x83, + 0x31, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x4a, 0x5a, 0x20, 0x41, 0x5a, 0x18, 0x5a, + 0x83, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x4a, 0x4a, 0x08, 0x39, 0x29, 0x10, 0x39, 0x29, 0x18, 0x39, + 0x31, 0x08, 0x52, 0x52, 0x08, 0x4a, 0x52, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x5a, 0x20, 0x52, 0x52, + 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x62, 0x62, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x08, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x41, + 0x08, 0x31, 0x39, 0x10, 0x39, 0x39, 0x18, 0x52, 0x5a, 0x08, 0x5a, 0x5a, 0x08, 0x29, 0x31, 0x08, + 0x29, 0x31, 0x08, 0x41, 0x41, 0x10, 0x41, 0x31, 0x18, 0x52, 0x52, 0x29, 0x41, 0x41, 0x20, 0x4a, + 0x4a, 0x29, 0x52, 0x52, 0x29, 0x62, 0x62, 0x39, 0x62, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x62, 0x83, + 0x31, 0x73, 0x83, 0x31, 0x39, 0x5a, 0x20, 0x5a, 0x7b, 0x31, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, + 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x4a, 0x20, 0x52, + 0x52, 0x20, 0x5a, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x4a, 0x4a, 0x29, 0x41, 0x41, 0x20, 0x4a, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x4a, 0x41, 0x20, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x4a, 0x20, 0x4a, + 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x4a, + 0x10, 0x41, 0x41, 0x20, 0x5a, 0x52, 0x18, 0x4a, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x39, 0x39, 0x18, + 0x39, 0x39, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x5a, 0x20, 0x39, 0x5a, 0x18, 0x39, + 0x73, 0x08, 0x31, 0x52, 0x10, 0x29, 0x41, 0x10, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x52, 0x73, 0x31, 0x4a, 0x52, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, + 0x73, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, + 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x41, 0x62, 0x20, 0x31, 0x41, 0x08, 0x41, + 0x62, 0x18, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x41, 0x39, 0x20, 0x41, 0x4a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x4a, 0x41, 0x29, 0x31, 0x39, 0x08, 0x29, 0x20, 0x08, 0x39, 0x29, 0x10, 0x39, + 0x29, 0x10, 0x41, 0x41, 0x08, 0x39, 0x4a, 0x08, 0x39, 0x62, 0x10, 0x41, 0x41, 0x18, 0x4a, 0x4a, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x18, + 0x5a, 0x5a, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x31, 0x31, 0x18, 0x31, 0x31, 0x08, 0x29, 0x29, + 0x18, 0x29, 0x31, 0x08, 0x29, 0x31, 0x10, 0x31, 0x31, 0x10, 0x41, 0x41, 0x10, 0x39, 0x41, 0x08, + 0x41, 0x39, 0x18, 0x41, 0x39, 0x20, 0x39, 0x31, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x20, 0x4a, + 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x41, 0x20, 0x41, 0x5a, 0x29, 0x4a, 0x5a, 0x29, 0x4a, 0x62, + 0x29, 0x41, 0x5a, 0x29, 0x39, 0x52, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, + 0x5a, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x41, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x41, + 0x41, 0x20, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x4a, + 0x18, 0x4a, 0x41, 0x18, 0x39, 0x39, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x20, + 0x39, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x4a, 0x20, 0x5a, 0x7b, 0x20, 0x52, + 0x7b, 0x20, 0x41, 0x62, 0x18, 0x41, 0x5a, 0x08, 0x39, 0x52, 0x18, 0x52, 0x83, 0x18, 0x41, 0x6a, + 0x18, 0x41, 0x6a, 0x10, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x5a, 0x5a, 0x29, 0x4a, 0x52, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x52, + 0x73, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, + 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x39, 0x52, 0x18, 0x29, + 0x41, 0x00, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x20, 0x6a, 0x6a, 0x31, + 0x73, 0x6a, 0x20, 0x52, 0x52, 0x18, 0x39, 0x39, 0x10, 0x31, 0x39, 0x10, 0x39, 0x31, 0x10, 0x39, + 0x39, 0x10, 0x39, 0x41, 0x18, 0x41, 0x52, 0x08, 0x4a, 0x5a, 0x08, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x39, 0x41, 0x10, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x20, 0x29, 0x31, + 0x10, 0x29, 0x29, 0x18, 0x39, 0x41, 0x10, 0x41, 0x31, 0x18, 0x41, 0x31, 0x18, 0x41, 0x41, 0x08, + 0x52, 0x5a, 0x08, 0x5a, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x52, + 0x52, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x5a, 0x20, 0x41, 0x5a, 0x29, 0x41, 0x5a, + 0x29, 0x39, 0x5a, 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x52, + 0x5a, 0x18, 0x5a, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x18, + 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x5a, 0x18, 0x5a, 0x83, 0x29, 0x5a, + 0x7b, 0x20, 0x41, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x41, 0x62, 0x08, 0x41, 0x6a, + 0x18, 0x41, 0x62, 0x18, 0x41, 0x6a, 0x10, 0x5a, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, + 0x31, 0x62, 0x08, 0x41, 0x52, 0x20, 0x62, 0x62, 0x39, 0x62, 0x5a, 0x20, 0x52, 0x73, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, + 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x31, 0x4a, 0x00, 0x5a, + 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, + 0x20, 0x52, 0x6a, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x62, 0x6a, 0x20, 0x4a, 0x4a, 0x18, + 0x5a, 0x5a, 0x20, 0x52, 0x5a, 0x18, 0x29, 0x31, 0x08, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x41, + 0x4a, 0x10, 0x41, 0x41, 0x08, 0x41, 0x52, 0x08, 0x31, 0x39, 0x10, 0x52, 0x52, 0x18, 0x6a, 0x62, + 0x31, 0x6a, 0x62, 0x31, 0x62, 0x62, 0x39, 0x41, 0x41, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, + 0x41, 0x41, 0x18, 0x4a, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x10, 0x41, 0x41, 0x10, 0x4a, 0x41, + 0x20, 0x39, 0x41, 0x10, 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x41, 0x20, 0x29, 0x31, 0x08, + 0x4a, 0x4a, 0x08, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x29, 0x5a, 0x52, 0x20, 0x52, + 0x52, 0x20, 0x5a, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x29, 0x39, 0x10, 0x18, 0x31, 0x08, 0x41, 0x52, + 0x20, 0x39, 0x4a, 0x18, 0x5a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x4a, + 0x41, 0x18, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, + 0x18, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, + 0x41, 0x41, 0x20, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x20, 0x62, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x52, 0x73, 0x20, 0x41, 0x62, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, + 0x18, 0x41, 0x6a, 0x10, 0x41, 0x6a, 0x18, 0x41, 0x6a, 0x10, 0x41, 0x73, 0x08, 0x31, 0x62, 0x08, + 0x31, 0x5a, 0x10, 0x29, 0x52, 0x08, 0x52, 0x6a, 0x29, 0x41, 0x6a, 0x18, 0x52, 0x73, 0x20, 0x5a, + 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x31, 0x52, 0x6a, 0x29, 0x4a, 0x6a, + 0x20, 0x4a, 0x62, 0x29, 0x41, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, + 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, + 0x83, 0x31, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, + 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x29, + 0x62, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x41, 0x41, 0x10, 0x39, 0x39, 0x18, 0x41, 0x4a, 0x08, 0x41, + 0x41, 0x08, 0x52, 0x5a, 0x08, 0x52, 0x52, 0x10, 0x39, 0x39, 0x08, 0x62, 0x62, 0x31, 0x62, 0x62, + 0x39, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x39, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x18, 0x62, 0x62, 0x31, 0x73, 0x6a, 0x20, 0x5a, 0x52, 0x20, 0x52, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x31, 0x20, 0x41, 0x39, 0x20, 0x39, 0x31, + 0x29, 0x39, 0x39, 0x10, 0x41, 0x4a, 0x10, 0x52, 0x52, 0x10, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, + 0x52, 0x62, 0x10, 0x5a, 0x5a, 0x08, 0x4a, 0x41, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x52, + 0x52, 0x29, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x10, 0x29, 0x39, 0x10, 0x20, 0x29, 0x00, 0x20, 0x29, + 0x00, 0x39, 0x31, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x62, 0x7b, 0x20, + 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x73, 0x20, 0x52, 0x52, 0x29, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x31, 0x29, 0x18, 0x31, 0x31, 0x18, 0x4a, + 0x4a, 0x18, 0x52, 0x4a, 0x20, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x62, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x73, 0x18, 0x41, 0x6a, + 0x18, 0x41, 0x62, 0x18, 0x41, 0x6a, 0x10, 0x52, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x41, 0x73, 0x08, + 0x39, 0x5a, 0x10, 0x41, 0x62, 0x08, 0x31, 0x62, 0x08, 0x52, 0x7b, 0x10, 0x52, 0x7b, 0x29, 0x4a, + 0x62, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x39, 0x52, 0x73, + 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, + 0x4a, 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x31, 0x6a, 0x9c, 0x29, 0x6a, + 0x94, 0x31, 0x73, 0x94, 0x41, 0x6a, 0x8b, 0x39, 0x73, 0x94, 0x41, 0x6a, 0x94, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, + 0x5a, 0x7b, 0x31, 0x5a, 0x7b, 0x29, 0x39, 0x39, 0x18, 0x52, 0x52, 0x08, 0x52, 0x52, 0x18, 0x4a, + 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x62, 0x62, + 0x31, 0x62, 0x62, 0x39, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x20, + 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x29, 0x52, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x18, 0x39, 0x39, 0x20, 0x31, 0x31, 0x20, 0x39, 0x29, + 0x18, 0x41, 0x31, 0x18, 0x39, 0x39, 0x10, 0x29, 0x31, 0x10, 0x41, 0x41, 0x08, 0x52, 0x5a, 0x08, + 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x62, 0x5a, 0x20, 0x41, + 0x41, 0x18, 0x39, 0x39, 0x18, 0x29, 0x31, 0x10, 0x52, 0x52, 0x29, 0x4a, 0x52, 0x29, 0x39, 0x39, + 0x20, 0x31, 0x31, 0x20, 0x62, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, + 0x6a, 0x62, 0x31, 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x20, 0x20, 0x10, 0x31, 0x31, 0x18, 0x4a, + 0x4a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x20, 0x41, 0x39, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x73, 0x20, 0x41, 0x4a, 0x18, 0x52, 0x6a, 0x20, 0x52, 0x83, 0x18, 0x52, 0x7b, 0x29, 0x4a, + 0x6a, 0x20, 0x62, 0x83, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, + 0x31, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x20, + 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x62, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x8b, 0x39, 0x73, 0x94, 0x41, 0x73, 0x8b, 0x39, 0x6a, 0x94, 0x41, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, + 0x5a, 0x8b, 0x20, 0x4a, 0x73, 0x18, 0x39, 0x4a, 0x18, 0x4a, 0x41, 0x18, 0x39, 0x41, 0x18, 0x4a, + 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, + 0x18, 0x52, 0x4a, 0x18, 0x4a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x62, 0x62, 0x39, 0x6a, 0x6a, 0x31, 0x6a, 0x62, 0x31, 0x52, + 0x52, 0x29, 0x52, 0x4a, 0x18, 0x4a, 0x52, 0x10, 0x39, 0x39, 0x10, 0x39, 0x39, 0x20, 0x31, 0x29, + 0x10, 0x31, 0x29, 0x10, 0x31, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x10, + 0x39, 0x41, 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x41, + 0x39, 0x18, 0x52, 0x39, 0x20, 0x41, 0x39, 0x20, 0x29, 0x39, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x41, + 0x20, 0x31, 0x31, 0x18, 0x73, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x62, 0x62, 0x20, 0x52, 0x5a, 0x18, 0x4a, 0x5a, 0x29, 0x52, 0x52, 0x29, 0x62, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x20, 0x20, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x20, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, + 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x4a, + 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x73, 0x9c, + 0x41, 0x62, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x7b, 0x29, + 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x94, 0x41, 0x6a, 0x94, 0x41, 0x6a, 0x94, 0x41, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x20, + 0x4a, 0x6a, 0x20, 0x39, 0x4a, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x62, + 0x62, 0x31, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x4a, 0x4a, + 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x20, 0x6a, 0x62, 0x31, 0x6a, 0x6a, 0x31, 0x52, + 0x52, 0x29, 0x41, 0x41, 0x10, 0x39, 0x39, 0x20, 0x41, 0x41, 0x29, 0x39, 0x39, 0x20, 0x39, 0x39, + 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x08, 0x39, 0x41, 0x08, 0x4a, 0x52, 0x08, + 0x41, 0x39, 0x08, 0x29, 0x29, 0x08, 0x31, 0x31, 0x08, 0x41, 0x39, 0x10, 0x52, 0x4a, 0x08, 0x41, + 0x39, 0x20, 0x4a, 0x41, 0x29, 0x39, 0x39, 0x20, 0x4a, 0x52, 0x08, 0x52, 0x52, 0x18, 0x39, 0x39, + 0x18, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, + 0x39, 0x29, 0x08, 0x62, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x52, + 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x4a, 0x20, 0x31, 0x31, 0x18, 0x31, 0x29, 0x10, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x31, 0x31, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x18, + 0x41, 0x39, 0x20, 0x39, 0x39, 0x20, 0x4a, 0x52, 0x20, 0x4a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x4a, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, + 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x31, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x29, 0x73, 0x9c, 0x39, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x20, + 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, + 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x31, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x18, + 0x41, 0x62, 0x18, 0x39, 0x52, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x39, 0x6a, + 0x6a, 0x31, 0x62, 0x62, 0x39, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x39, 0x41, 0x18, 0x52, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x29, 0x62, 0x5a, 0x29, 0x4a, + 0x4a, 0x18, 0x29, 0x31, 0x10, 0x39, 0x31, 0x20, 0x39, 0x31, 0x20, 0x4a, 0x41, 0x29, 0x41, 0x31, + 0x18, 0x39, 0x39, 0x20, 0x4a, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, + 0x29, 0x31, 0x08, 0x39, 0x41, 0x08, 0x41, 0x39, 0x10, 0x4a, 0x31, 0x18, 0x4a, 0x39, 0x18, 0x4a, + 0x41, 0x29, 0x4a, 0x41, 0x29, 0x4a, 0x39, 0x18, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x41, 0x41, + 0x18, 0x39, 0x39, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, + 0x39, 0x31, 0x08, 0x5a, 0x5a, 0x20, 0x52, 0x73, 0x10, 0x39, 0x4a, 0x08, 0x41, 0x52, 0x08, 0x4a, + 0x62, 0x20, 0x41, 0x52, 0x20, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x73, 0x20, + 0x5a, 0x52, 0x20, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x31, 0x31, 0x18, 0x29, 0x29, + 0x18, 0x41, 0x4a, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x62, 0x5a, 0x20, + 0x41, 0x39, 0x18, 0x41, 0x39, 0x20, 0x62, 0x62, 0x31, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x52, + 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x4a, + 0x62, 0x20, 0x5a, 0x83, 0x31, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x73, 0x9c, 0x39, 0x62, 0x8b, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, + 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x6a, + 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, + 0x39, 0x4a, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x62, 0x18, 0x6a, 0x62, 0x31, 0x6a, + 0x6a, 0x31, 0x5a, 0x5a, 0x29, 0x39, 0x39, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x20, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, + 0x4a, 0x4a, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x31, + 0x31, 0x10, 0x31, 0x31, 0x18, 0x31, 0x20, 0x10, 0x41, 0x39, 0x20, 0x4a, 0x41, 0x29, 0x39, 0x29, + 0x18, 0x39, 0x31, 0x29, 0x39, 0x39, 0x10, 0x39, 0x41, 0x08, 0x39, 0x39, 0x08, 0x29, 0x31, 0x08, + 0x4a, 0x4a, 0x08, 0x31, 0x39, 0x08, 0x41, 0x39, 0x10, 0x4a, 0x39, 0x18, 0x52, 0x4a, 0x20, 0x62, + 0x5a, 0x29, 0x4a, 0x4a, 0x20, 0x39, 0x31, 0x10, 0x39, 0x41, 0x10, 0x31, 0x39, 0x10, 0x41, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, + 0x41, 0x4a, 0x08, 0x39, 0x5a, 0x08, 0x39, 0x62, 0x08, 0x41, 0x4a, 0x18, 0x39, 0x4a, 0x08, 0x39, + 0x73, 0x08, 0x4a, 0x73, 0x08, 0x4a, 0x6a, 0x29, 0x4a, 0x5a, 0x20, 0x4a, 0x5a, 0x18, 0x52, 0x62, + 0x20, 0x4a, 0x62, 0x18, 0x4a, 0x62, 0x18, 0x52, 0x62, 0x20, 0x31, 0x52, 0x08, 0x5a, 0x6a, 0x20, + 0x62, 0x62, 0x20, 0x41, 0x41, 0x18, 0x31, 0x31, 0x10, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x29, 0x29, 0x18, 0x18, 0x18, + 0x08, 0x5a, 0x52, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, + 0x5a, 0x5a, 0x20, 0x29, 0x39, 0x10, 0x18, 0x31, 0x08, 0x29, 0x29, 0x10, 0x29, 0x31, 0x10, 0x29, + 0x31, 0x10, 0x4a, 0x6a, 0x18, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, + 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x8b, + 0x31, 0x5a, 0x83, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, + 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, + 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x20, 0x41, 0x6a, 0x18, 0x39, 0x52, 0x20, + 0x41, 0x5a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x5a, 0x29, 0x52, + 0x52, 0x20, 0x41, 0x39, 0x20, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x62, 0x5a, + 0x29, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x31, + 0x31, 0x08, 0x39, 0x31, 0x20, 0x31, 0x29, 0x18, 0x31, 0x39, 0x18, 0x4a, 0x4a, 0x29, 0x39, 0x31, + 0x29, 0x41, 0x31, 0x18, 0x29, 0x31, 0x10, 0x39, 0x31, 0x29, 0x39, 0x39, 0x18, 0x29, 0x31, 0x08, + 0x41, 0x41, 0x08, 0x39, 0x39, 0x08, 0x52, 0x52, 0x10, 0x4a, 0x52, 0x10, 0x62, 0x62, 0x18, 0x52, + 0x52, 0x20, 0x39, 0x39, 0x08, 0x41, 0x41, 0x08, 0x41, 0x39, 0x10, 0x39, 0x31, 0x29, 0x39, 0x39, + 0x20, 0x39, 0x39, 0x18, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, + 0x39, 0x4a, 0x08, 0x31, 0x62, 0x08, 0x20, 0x4a, 0x08, 0x29, 0x5a, 0x00, 0x41, 0x6a, 0x08, 0x39, + 0x73, 0x08, 0x31, 0x62, 0x08, 0x4a, 0x5a, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, + 0x18, 0x52, 0x52, 0x18, 0x4a, 0x52, 0x18, 0x4a, 0x4a, 0x08, 0x41, 0x4a, 0x08, 0x5a, 0x5a, 0x18, + 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x31, 0x31, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x29, 0x20, 0x10, 0x29, 0x29, + 0x10, 0x31, 0x39, 0x18, 0x52, 0x52, 0x18, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x20, 0x52, 0x52, 0x29, + 0x31, 0x29, 0x10, 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x20, 0x20, 0x10, 0x39, 0x31, 0x18, 0x31, + 0x31, 0x10, 0x31, 0x41, 0x18, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x9c, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x8b, + 0x29, 0x6a, 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x5a, 0x8b, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x73, 0x20, + 0x52, 0x73, 0x29, 0x52, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x52, + 0x73, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x39, 0x4a, 0x18, + 0x39, 0x52, 0x20, 0x41, 0x5a, 0x18, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x39, + 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x6a, 0x62, 0x31, 0x6a, 0x6a, + 0x31, 0x5a, 0x5a, 0x29, 0x41, 0x41, 0x18, 0x52, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x62, 0x62, 0x39, + 0x5a, 0x5a, 0x29, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x41, + 0x41, 0x08, 0x39, 0x39, 0x18, 0x31, 0x39, 0x18, 0x41, 0x62, 0x20, 0x52, 0x39, 0x20, 0x39, 0x31, + 0x29, 0x4a, 0x39, 0x18, 0x31, 0x29, 0x18, 0x39, 0x39, 0x18, 0x39, 0x31, 0x18, 0x4a, 0x4a, 0x08, + 0x5a, 0x5a, 0x08, 0x41, 0x4a, 0x10, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x08, 0x52, 0x4a, 0x18, 0x41, + 0x39, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x52, 0x10, 0x39, 0x39, 0x18, 0x29, 0x29, 0x18, 0x41, 0x41, + 0x20, 0x39, 0x39, 0x18, 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x62, 0x29, + 0x41, 0x52, 0x18, 0x39, 0x41, 0x18, 0x29, 0x4a, 0x10, 0x29, 0x52, 0x08, 0x20, 0x4a, 0x08, 0x41, + 0x6a, 0x08, 0x31, 0x62, 0x08, 0x20, 0x4a, 0x08, 0x39, 0x5a, 0x18, 0x4a, 0x5a, 0x29, 0x4a, 0x52, + 0x18, 0x4a, 0x4a, 0x08, 0x4a, 0x52, 0x08, 0x29, 0x29, 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x08, + 0x52, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x41, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, 0x20, 0x52, 0x52, 0x18, 0x62, 0x62, 0x20, 0x4a, 0x41, 0x29, + 0x41, 0x39, 0x20, 0x29, 0x29, 0x18, 0x20, 0x20, 0x08, 0x31, 0x29, 0x10, 0x41, 0x39, 0x10, 0x39, + 0x31, 0x20, 0x41, 0x4a, 0x20, 0x5a, 0x5a, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x52, 0x73, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x29, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, + 0x29, 0x62, 0x8b, 0x29, 0x7b, 0xa4, 0x41, 0x62, 0x8b, 0x31, 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x29, + 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, + 0x73, 0x29, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x39, 0x41, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x62, + 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x6a, 0x18, 0x4a, 0x73, 0x20, 0x52, 0x73, 0x20, 0x41, 0x62, 0x18, 0x41, 0x41, 0x18, 0x41, + 0x41, 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x5a, 0x5a, 0x29, 0x6a, 0x6a, 0x31, 0x62, 0x62, + 0x39, 0x52, 0x52, 0x29, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x39, 0x6a, 0x6a, 0x31, + 0x31, 0x31, 0x20, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x39, 0x41, 0x10, 0x39, 0x41, 0x10, 0x41, + 0x41, 0x20, 0x52, 0x52, 0x29, 0x4a, 0x4a, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x41, 0x29, 0x4a, 0x41, + 0x29, 0x39, 0x31, 0x20, 0x29, 0x31, 0x10, 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, + 0x41, 0x41, 0x08, 0x41, 0x4a, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x4a, 0x41, 0x10, 0x4a, + 0x41, 0x10, 0x5a, 0x5a, 0x08, 0x4a, 0x41, 0x10, 0x39, 0x31, 0x18, 0x31, 0x29, 0x10, 0x41, 0x39, + 0x18, 0x39, 0x31, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x4a, 0x41, 0x29, + 0x31, 0x41, 0x18, 0x39, 0x41, 0x20, 0x31, 0x52, 0x08, 0x31, 0x5a, 0x08, 0x31, 0x62, 0x08, 0x39, + 0x62, 0x10, 0x29, 0x41, 0x10, 0x20, 0x52, 0x00, 0x39, 0x4a, 0x29, 0x39, 0x41, 0x10, 0x39, 0x39, + 0x08, 0x31, 0x31, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, 0x41, 0x4a, 0x08, + 0x5a, 0x52, 0x08, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, 0x31, 0x31, 0x10, + 0x39, 0x41, 0x18, 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x31, 0x29, 0x18, 0x31, 0x31, 0x18, 0x39, + 0x41, 0x10, 0x41, 0x4a, 0x08, 0x52, 0x5a, 0x29, 0x41, 0x5a, 0x18, 0x52, 0x7b, 0x20, 0x52, 0x7b, + 0x20, 0x52, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x7b, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x7b, 0xa4, 0x41, 0x5a, 0x7b, + 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x39, 0x6a, 0x8b, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, + 0x52, 0x73, 0x29, 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, + 0x94, 0x29, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x5a, + 0x20, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x20, + 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x7b, 0x20, 0x5a, 0x52, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x5a, 0x5a, 0x29, 0x6a, 0x62, 0x31, 0x62, 0x62, + 0x39, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x6a, 0x62, 0x31, 0x6a, 0x6a, 0x31, + 0x41, 0x41, 0x29, 0x4a, 0x41, 0x10, 0x31, 0x39, 0x18, 0x31, 0x31, 0x08, 0x31, 0x39, 0x08, 0x62, + 0x62, 0x18, 0x4a, 0x4a, 0x18, 0x62, 0x83, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x52, 0x52, + 0x08, 0x4a, 0x52, 0x10, 0x4a, 0x52, 0x08, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x4a, 0x52, 0x10, + 0x4a, 0x52, 0x08, 0x4a, 0x4a, 0x10, 0x62, 0x62, 0x08, 0x52, 0x4a, 0x08, 0x52, 0x4a, 0x08, 0x52, + 0x4a, 0x18, 0x52, 0x39, 0x20, 0x52, 0x4a, 0x08, 0x4a, 0x41, 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, + 0x20, 0x31, 0x31, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x41, 0x18, + 0x41, 0x4a, 0x20, 0x52, 0x62, 0x29, 0x52, 0x62, 0x29, 0x41, 0x6a, 0x10, 0x39, 0x62, 0x10, 0x29, + 0x52, 0x08, 0x20, 0x4a, 0x08, 0x41, 0x6a, 0x10, 0x4a, 0x62, 0x18, 0x29, 0x31, 0x08, 0x29, 0x31, + 0x08, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, 0x31, 0x20, 0x10, 0x31, 0x29, 0x10, 0x39, 0x31, 0x08, + 0x31, 0x39, 0x10, 0x5a, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x41, 0x39, 0x20, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, + 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x52, 0x4a, 0x20, 0x4a, 0x52, 0x20, 0x4a, 0x4a, 0x20, + 0x31, 0x31, 0x10, 0x29, 0x31, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x31, 0x29, 0x10, 0x31, + 0x31, 0x10, 0x39, 0x39, 0x10, 0x39, 0x62, 0x08, 0x41, 0x6a, 0x10, 0x41, 0x62, 0x20, 0x4a, 0x62, + 0x20, 0x4a, 0x6a, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, + 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x6a, 0x94, + 0x39, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, + 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x39, 0x6a, + 0x94, 0x29, 0x6a, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x5a, + 0x20, 0x4a, 0x62, 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x62, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x52, 0x52, + 0x20, 0x31, 0x29, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x20, 0x62, 0x62, 0x39, + 0x52, 0x52, 0x20, 0x20, 0x20, 0x08, 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x5a, 0x5a, 0x18, 0x4a, + 0x4a, 0x18, 0x52, 0x5a, 0x18, 0x5a, 0x7b, 0x29, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, + 0x18, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x10, 0x52, 0x52, 0x18, 0x62, 0x62, 0x08, 0x62, 0x62, 0x08, + 0x52, 0x5a, 0x08, 0x5a, 0x5a, 0x08, 0x5a, 0x5a, 0x08, 0x62, 0x62, 0x18, 0x62, 0x6a, 0x08, 0x41, + 0x31, 0x18, 0x39, 0x29, 0x10, 0x52, 0x4a, 0x08, 0x5a, 0x5a, 0x08, 0x5a, 0x5a, 0x18, 0x5a, 0x5a, + 0x18, 0x31, 0x31, 0x10, 0x5a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x41, 0x41, 0x08, + 0x5a, 0x7b, 0x31, 0x6a, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x52, 0x7b, 0x20, 0x29, 0x52, 0x08, 0x31, + 0x5a, 0x08, 0x52, 0x5a, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, + 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x39, 0x18, 0x39, 0x29, 0x10, 0x52, 0x39, 0x20, + 0x29, 0x29, 0x00, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x5a, 0x52, 0x18, 0x4a, + 0x41, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x39, 0x10, + 0x39, 0x39, 0x10, 0x31, 0x31, 0x08, 0x39, 0x39, 0x10, 0x39, 0x31, 0x08, 0x52, 0x52, 0x08, 0x31, + 0x31, 0x18, 0x31, 0x31, 0x18, 0x31, 0x4a, 0x10, 0x41, 0x7b, 0x08, 0x20, 0x4a, 0x08, 0x39, 0x52, + 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x5a, 0x7b, 0x29, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x31, + 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, + 0x29, 0x62, 0x83, 0x31, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, + 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x73, 0x94, 0x41, 0x73, 0x8b, 0x39, 0x6a, + 0x94, 0x41, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x52, 0x73, + 0x29, 0x39, 0x4a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x39, 0x4a, 0x20, 0x41, 0x52, 0x20, + 0x4a, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x6a, 0x20, 0x73, + 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x29, 0x29, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x31, 0x31, 0x10, 0x52, 0x52, 0x18, 0x39, + 0x39, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x6a, 0x7b, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x20, 0x31, 0x31, 0x08, 0x4a, 0x41, 0x20, 0x4a, 0x41, 0x29, 0x62, 0x6a, 0x08, 0x5a, 0x5a, 0x08, + 0x52, 0x52, 0x10, 0x41, 0x41, 0x18, 0x52, 0x4a, 0x08, 0x62, 0x5a, 0x18, 0x52, 0x52, 0x08, 0x41, + 0x41, 0x08, 0x52, 0x52, 0x08, 0x5a, 0x52, 0x08, 0x4a, 0x4a, 0x10, 0x5a, 0x5a, 0x20, 0x31, 0x31, + 0x10, 0x31, 0x31, 0x18, 0x52, 0x4a, 0x20, 0x5a, 0x52, 0x20, 0x39, 0x29, 0x18, 0x41, 0x39, 0x10, + 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x52, 0x7b, 0x29, 0x29, 0x4a, 0x00, 0x4a, + 0x52, 0x10, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x62, 0x62, 0x18, 0x52, 0x5a, 0x08, 0x52, 0x4a, 0x08, 0x39, 0x29, 0x18, 0x4a, 0x31, 0x18, + 0x31, 0x29, 0x10, 0x39, 0x31, 0x08, 0x20, 0x20, 0x08, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x20, 0x39, + 0x39, 0x18, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x4a, 0x20, + 0x31, 0x31, 0x18, 0x29, 0x31, 0x08, 0x5a, 0x52, 0x18, 0x52, 0x5a, 0x18, 0x52, 0x4a, 0x18, 0x41, + 0x39, 0x20, 0x31, 0x31, 0x20, 0x31, 0x52, 0x10, 0x39, 0x73, 0x08, 0x29, 0x52, 0x08, 0x39, 0x62, + 0x10, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x5a, 0x83, 0x31, 0x62, 0x83, 0x31, 0x6a, 0x94, 0x29, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, + 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x41, 0x73, 0x8b, 0x39, 0x6a, + 0x94, 0x41, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x4a, 0x6a, + 0x20, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x73, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x20, + 0x39, 0x52, 0x20, 0x52, 0x73, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x6a, + 0x73, 0x20, 0x41, 0x41, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, + 0x18, 0x29, 0x29, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x41, 0x39, 0x10, 0x41, 0x39, 0x10, 0x31, 0x31, 0x10, 0x41, 0x41, 0x18, 0x4a, + 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x39, 0x52, 0x18, 0x62, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x4a, 0x39, 0x18, 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x10, 0x4a, 0x52, 0x10, 0x52, 0x5a, 0x08, + 0x31, 0x31, 0x18, 0x41, 0x31, 0x18, 0x52, 0x4a, 0x08, 0x4a, 0x41, 0x10, 0x4a, 0x4a, 0x08, 0x41, + 0x41, 0x08, 0x52, 0x52, 0x10, 0x4a, 0x41, 0x10, 0x52, 0x4a, 0x08, 0x39, 0x31, 0x20, 0x39, 0x29, + 0x18, 0x31, 0x31, 0x18, 0x41, 0x39, 0x20, 0x39, 0x29, 0x18, 0x39, 0x29, 0x18, 0x41, 0x31, 0x18, + 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x4a, 0x10, 0x52, + 0x52, 0x10, 0x6a, 0x6a, 0x10, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, + 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x41, 0x4a, 0x08, 0x39, 0x31, 0x08, 0x39, 0x31, 0x10, + 0x29, 0x20, 0x08, 0x39, 0x39, 0x10, 0x29, 0x29, 0x08, 0x31, 0x31, 0x18, 0x39, 0x31, 0x18, 0x41, + 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x41, 0x39, 0x20, 0x41, 0x4a, 0x10, 0x52, 0x52, 0x08, + 0x39, 0x41, 0x08, 0x31, 0x39, 0x18, 0x39, 0x31, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x20, 0x41, + 0x41, 0x20, 0x41, 0x41, 0x08, 0x31, 0x62, 0x08, 0x31, 0x52, 0x08, 0x4a, 0x52, 0x20, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x5a, 0x83, 0x29, + 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x29, 0x6a, 0x94, 0x39, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x73, + 0x94, 0x41, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, + 0x73, 0x9c, 0x39, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x41, 0x6a, 0x8b, 0x39, 0x6a, + 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x4a, 0x62, + 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x29, 0x41, 0x52, 0x20, 0x41, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, + 0x18, 0x31, 0x29, 0x10, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x31, 0x31, 0x10, 0x4a, 0x41, 0x20, 0x39, 0x52, 0x20, 0x4a, + 0x62, 0x29, 0x41, 0x5a, 0x18, 0x4a, 0x5a, 0x20, 0x62, 0x8b, 0x20, 0x62, 0x7b, 0x20, 0x6a, 0x73, + 0x20, 0x41, 0x31, 0x18, 0x41, 0x41, 0x10, 0x41, 0x41, 0x08, 0x4a, 0x52, 0x10, 0x39, 0x39, 0x10, + 0x41, 0x4a, 0x08, 0x4a, 0x41, 0x10, 0x4a, 0x41, 0x18, 0x52, 0x4a, 0x08, 0x62, 0x62, 0x20, 0x62, + 0x5a, 0x20, 0x62, 0x62, 0x08, 0x4a, 0x39, 0x18, 0x31, 0x31, 0x18, 0x39, 0x31, 0x29, 0x41, 0x39, + 0x20, 0x31, 0x29, 0x18, 0x29, 0x29, 0x10, 0x31, 0x29, 0x10, 0x39, 0x31, 0x18, 0x62, 0x83, 0x29, + 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x39, 0x52, 0x18, 0x39, 0x39, 0x08, 0x4a, + 0x41, 0x18, 0x52, 0x5a, 0x18, 0x62, 0x62, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, + 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x20, + 0x52, 0x52, 0x20, 0x5a, 0x52, 0x20, 0x29, 0x29, 0x10, 0x4a, 0x4a, 0x20, 0x41, 0x41, 0x20, 0x5a, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x31, 0x31, 0x08, 0x20, 0x29, 0x00, 0x31, 0x39, 0x18, 0x52, 0x4a, 0x08, 0x41, 0x41, 0x29, + 0x52, 0x52, 0x18, 0x39, 0x41, 0x08, 0x31, 0x31, 0x10, 0x52, 0x4a, 0x18, 0x5a, 0x5a, 0x08, 0x41, + 0x4a, 0x10, 0x4a, 0x4a, 0x08, 0x41, 0x73, 0x08, 0x4a, 0x52, 0x20, 0x4a, 0x5a, 0x29, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x31, + 0x5a, 0x7b, 0x29, 0x6a, 0x8b, 0x39, 0x6a, 0x94, 0x39, 0x6a, 0x9c, 0x29, 0x73, 0x94, 0x41, 0x73, + 0x94, 0x41, 0x62, 0x83, 0x31, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x31, 0x6a, 0x94, + 0x31, 0x6a, 0x94, 0x31, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, + 0x62, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x73, 0xa4, 0x39, 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x41, 0x6a, + 0x94, 0x39, 0x73, 0x9c, 0x39, 0x73, 0x9c, 0x39, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x20, 0x52, 0x7b, + 0x29, 0x31, 0x41, 0x18, 0x31, 0x41, 0x20, 0x52, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x41, 0x5a, 0x20, 0x39, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, + 0x18, 0x39, 0x39, 0x18, 0x29, 0x29, 0x10, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x52, 0x20, + 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x29, 0x29, 0x10, 0x39, 0x4a, 0x20, 0x39, 0x52, 0x18, 0x41, + 0x62, 0x08, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x7b, + 0x29, 0x4a, 0x4a, 0x18, 0x4a, 0x52, 0x20, 0x31, 0x31, 0x10, 0x39, 0x41, 0x08, 0x41, 0x41, 0x10, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, + 0x4a, 0x18, 0x41, 0x41, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x18, 0x41, 0x39, + 0x20, 0x31, 0x20, 0x10, 0x29, 0x20, 0x10, 0x52, 0x52, 0x29, 0x4a, 0x6a, 0x18, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x5a, 0x18, 0x39, 0x39, 0x10, 0x39, + 0x41, 0x08, 0x41, 0x41, 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x10, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x5a, 0x5a, 0x20, + 0x39, 0x39, 0x18, 0x31, 0x39, 0x18, 0x4a, 0x41, 0x20, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x62, + 0x62, 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x41, + 0x18, 0x39, 0x39, 0x08, 0x29, 0x31, 0x08, 0x31, 0x39, 0x10, 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x20, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x08, 0x5a, 0x5a, 0x08, 0x5a, 0x5a, 0x20, 0x4a, + 0x4a, 0x18, 0x39, 0x41, 0x10, 0x41, 0x6a, 0x10, 0x62, 0x62, 0x31, 0x41, 0x73, 0x08, 0x41, 0x62, + 0x20, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x5a, 0x7b, 0x31, 0x5a, 0x7b, 0x29, + 0x52, 0x7b, 0x29, 0x73, 0x94, 0x41, 0x6a, 0x94, 0x39, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x73, + 0x94, 0x41, 0x6a, 0x94, 0x41, 0x62, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x62, 0x83, 0x31, 0x6a, 0x94, + 0x41, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x52, + 0x73, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x62, 0x7b, + 0x20, 0x5a, 0x6a, 0x20, 0x39, 0x39, 0x18, 0x29, 0x31, 0x10, 0x41, 0x62, 0x20, 0x41, 0x62, 0x20, + 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x41, 0x5a, 0x20, 0x39, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x62, 0x5a, 0x29, 0x52, 0x52, 0x20, + 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x29, 0x31, 0x10, 0x41, 0x5a, 0x20, 0x5a, 0x83, 0x20, 0x5a, + 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x20, 0x31, 0x39, 0x18, 0x39, 0x39, 0x10, 0x41, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x41, 0x39, 0x20, 0x41, 0x41, 0x29, 0x31, 0x29, + 0x18, 0x39, 0x29, 0x18, 0x41, 0x41, 0x29, 0x6a, 0x6a, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x62, 0x83, 0x29, 0x4a, 0x5a, 0x29, 0x4a, 0x5a, 0x29, 0x31, 0x31, 0x08, 0x39, + 0x39, 0x08, 0x39, 0x41, 0x08, 0x41, 0x39, 0x08, 0x39, 0x29, 0x18, 0x41, 0x39, 0x18, 0x6a, 0x62, + 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x5a, 0x52, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x6a, 0x7b, 0x29, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, + 0x20, 0x39, 0x31, 0x10, 0x4a, 0x41, 0x18, 0x31, 0x39, 0x08, 0x41, 0x41, 0x10, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, 0x29, 0x62, 0x62, 0x20, 0x52, + 0x52, 0x18, 0x41, 0x52, 0x18, 0x31, 0x62, 0x08, 0x31, 0x62, 0x08, 0x39, 0x5a, 0x18, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x20, + 0x62, 0x94, 0x29, 0x73, 0x94, 0x41, 0x6a, 0x94, 0x31, 0x73, 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x73, + 0x8b, 0x39, 0x5a, 0x7b, 0x31, 0x6a, 0x94, 0x41, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, + 0x31, 0x62, 0x8b, 0x29, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, + 0x52, 0x73, 0x20, 0x52, 0x6a, 0x20, 0x39, 0x5a, 0x20, 0x4a, 0x6a, 0x29, 0x39, 0x4a, 0x20, 0x31, + 0x41, 0x18, 0x41, 0x5a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x62, 0x73, 0x20, 0x6a, 0x6a, + 0x31, 0x52, 0x52, 0x10, 0x29, 0x29, 0x10, 0x20, 0x18, 0x08, 0x29, 0x29, 0x10, 0x41, 0x5a, 0x18, + 0x4a, 0x6a, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x31, 0x4a, 0x18, 0x41, 0x5a, 0x18, 0x52, 0x62, 0x20, 0x52, 0x4a, 0x18, 0x41, 0x41, + 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x52, 0x62, 0x20, 0x39, 0x39, 0x10, 0x31, 0x4a, 0x18, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, + 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x41, 0x39, 0x10, 0x39, 0x41, 0x10, 0x20, 0x29, 0x00, 0x4a, 0x41, 0x29, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x31, 0x31, 0x18, 0x4a, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x29, 0x41, 0x39, 0x20, 0x29, 0x29, + 0x18, 0x41, 0x39, 0x20, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x08, 0x73, 0x73, 0x20, 0x6a, 0x8b, 0x29, + 0x6a, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x73, 0x20, 0x39, 0x39, 0x20, 0x31, 0x39, 0x10, 0x41, + 0x41, 0x08, 0x52, 0x5a, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x39, 0x08, 0x31, 0x29, 0x08, 0x4a, 0x41, + 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, + 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x73, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x73, 0x6a, + 0x20, 0x39, 0x39, 0x18, 0x31, 0x39, 0x10, 0x4a, 0x4a, 0x10, 0x52, 0x5a, 0x08, 0x62, 0x62, 0x20, + 0x52, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x4a, 0x4a, 0x29, 0x4a, + 0x4a, 0x29, 0x5a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x41, 0x62, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x73, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, + 0x52, 0x6a, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x41, 0x73, 0x94, 0x41, 0x6a, + 0x94, 0x41, 0x5a, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x8b, + 0x31, 0x62, 0x7b, 0x39, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x31, 0x52, 0x73, 0x29, + 0x4a, 0x73, 0x20, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x4a, + 0x62, 0x20, 0x41, 0x52, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x6a, 0x62, + 0x20, 0x41, 0x41, 0x10, 0x29, 0x20, 0x10, 0x29, 0x31, 0x10, 0x31, 0x29, 0x18, 0x29, 0x29, 0x10, + 0x18, 0x31, 0x08, 0x41, 0x5a, 0x08, 0x39, 0x62, 0x10, 0x41, 0x6a, 0x10, 0x4a, 0x73, 0x18, 0x41, + 0x6a, 0x10, 0x31, 0x41, 0x18, 0x39, 0x4a, 0x20, 0x41, 0x62, 0x18, 0x39, 0x41, 0x18, 0x39, 0x39, + 0x18, 0x62, 0x5a, 0x20, 0x6a, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x73, 0x73, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x62, + 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x6a, + 0x20, 0x41, 0x31, 0x18, 0x39, 0x39, 0x20, 0x41, 0x4a, 0x08, 0x41, 0x41, 0x20, 0x5a, 0x5a, 0x20, + 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x39, + 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x41, 0x39, 0x20, 0x62, 0x62, + 0x31, 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x62, 0x62, 0x29, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x62, 0x5a, 0x29, 0x4a, 0x4a, 0x18, 0x41, + 0x41, 0x10, 0x52, 0x52, 0x10, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x08, 0x31, 0x31, 0x10, 0x31, 0x20, + 0x10, 0x39, 0x39, 0x18, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x39, 0x31, 0x18, 0x5a, 0x5a, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x6a, + 0x31, 0x31, 0x39, 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x20, 0x31, 0x39, 0x08, 0x73, 0x6a, 0x20, + 0x52, 0x52, 0x29, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x5a, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, + 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, + 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x31, 0x5a, + 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x62, 0x83, 0x31, 0x5a, 0x83, + 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x62, 0x7b, 0x39, 0x4a, 0x6a, 0x29, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x7b, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x5a, 0x20, 0x6a, 0x62, + 0x31, 0x39, 0x31, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x18, 0x31, 0x31, 0x10, 0x31, 0x31, 0x18, + 0x39, 0x31, 0x18, 0x31, 0x41, 0x20, 0x39, 0x4a, 0x20, 0x31, 0x52, 0x10, 0x29, 0x52, 0x08, 0x31, + 0x4a, 0x10, 0x29, 0x41, 0x10, 0x29, 0x39, 0x10, 0x39, 0x4a, 0x18, 0x4a, 0x73, 0x18, 0x52, 0x62, + 0x20, 0x52, 0x62, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x7b, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, + 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x73, 0x20, 0x62, 0x7b, 0x20, 0x6a, 0x6a, + 0x31, 0x39, 0x39, 0x08, 0x41, 0x4a, 0x10, 0x41, 0x41, 0x20, 0x41, 0x41, 0x10, 0x5a, 0x5a, 0x20, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x41, + 0x41, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x41, 0x4a, 0x18, 0x7b, 0x7b, + 0x31, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, + 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x4a, + 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x20, 0x31, 0x31, 0x10, 0x31, 0x29, 0x08, 0x31, 0x29, + 0x10, 0x31, 0x29, 0x10, 0x29, 0x20, 0x10, 0x29, 0x29, 0x10, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x31, 0x62, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x6a, + 0x20, 0x62, 0x62, 0x18, 0x52, 0x4a, 0x20, 0x41, 0x39, 0x18, 0x41, 0x4a, 0x08, 0x73, 0x6a, 0x20, + 0x62, 0x62, 0x29, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x62, + 0x5a, 0x29, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x29, 0x5a, 0x73, + 0x20, 0x52, 0x73, 0x31, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x20, 0x5a, 0x7b, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x5a, + 0x7b, 0x31, 0x5a, 0x7b, 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x31, 0x62, 0x83, 0x31, 0x7b, 0x7b, 0x31, 0x6a, 0x8b, 0x39, 0x41, 0x62, 0x20, 0x5a, 0x83, 0x31, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x20, 0x31, 0x31, 0x18, 0x31, 0x31, + 0x18, 0x31, 0x31, 0x10, 0x29, 0x29, 0x10, 0x20, 0x20, 0x10, 0x39, 0x39, 0x10, 0x41, 0x39, 0x10, + 0x39, 0x39, 0x18, 0x52, 0x52, 0x29, 0x52, 0x52, 0x29, 0x39, 0x52, 0x20, 0x29, 0x41, 0x10, 0x29, + 0x4a, 0x00, 0x29, 0x4a, 0x10, 0x29, 0x4a, 0x10, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, + 0x20, 0x52, 0x73, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x20, + 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, + 0x73, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x6a, 0x73, 0x20, 0x6a, 0x6a, + 0x20, 0x39, 0x39, 0x08, 0x41, 0x41, 0x20, 0x31, 0x39, 0x18, 0x39, 0x39, 0x10, 0x5a, 0x5a, 0x20, + 0x5a, 0x52, 0x20, 0x52, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x4a, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x7b, 0x7b, + 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x41, + 0x41, 0x20, 0x39, 0x41, 0x18, 0x29, 0x29, 0x08, 0x29, 0x31, 0x08, 0x39, 0x39, 0x10, 0x39, 0x39, + 0x10, 0x29, 0x29, 0x10, 0x29, 0x29, 0x08, 0x39, 0x41, 0x18, 0x41, 0x41, 0x20, 0x6a, 0x6a, 0x20, + 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, + 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x52, + 0x20, 0x4a, 0x4a, 0x29, 0x52, 0x4a, 0x20, 0x62, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x6a, 0x62, 0x31, + 0x6a, 0x6a, 0x20, 0x62, 0x5a, 0x20, 0x4a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x52, + 0x62, 0x29, 0x62, 0x5a, 0x29, 0x5a, 0x52, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x31, 0x52, 0x73, + 0x31, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x39, 0x52, 0x20, 0x6a, 0x9c, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x52, 0x73, 0x29, 0x52, + 0x73, 0x20, 0x52, 0x73, 0x29, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x31, 0x5a, 0x83, 0x31, 0x62, 0x83, + 0x31, 0x62, 0x83, 0x31, 0x62, 0x83, 0x31, 0x5a, 0x7b, 0x31, 0x4a, 0x6a, 0x29, 0x5a, 0x8b, 0x29, + 0x73, 0x9c, 0x39, 0x62, 0x94, 0x31, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x8b, 0x39, 0x73, + 0x8b, 0x39, 0x6a, 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x52, 0x7b, 0x29, 0x5a, 0x6a, 0x20, 0x29, 0x29, + 0x10, 0x29, 0x29, 0x10, 0x29, 0x20, 0x10, 0x20, 0x20, 0x08, 0x41, 0x41, 0x18, 0x39, 0x31, 0x08, + 0x39, 0x31, 0x10, 0x39, 0x4a, 0x20, 0x29, 0x39, 0x18, 0x39, 0x52, 0x20, 0x31, 0x4a, 0x20, 0x29, + 0x41, 0x10, 0x29, 0x5a, 0x00, 0x39, 0x62, 0x10, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, + 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, 0x41, + 0x73, 0x08, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x52, 0x62, 0x20, 0x52, 0x4a, 0x20, 0x52, 0x52, + 0x20, 0x4a, 0x4a, 0x20, 0x31, 0x39, 0x18, 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x10, 0x5a, 0x5a, 0x20, + 0x5a, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x29, 0x5a, 0x52, 0x20, 0x52, + 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x5a, 0x18, 0x4a, 0x41, 0x18, 0x62, 0x62, + 0x20, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, + 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x52, 0x4a, 0x20, 0x31, + 0x31, 0x18, 0x39, 0x39, 0x08, 0x31, 0x31, 0x08, 0x29, 0x31, 0x08, 0x39, 0x31, 0x10, 0x39, 0x29, + 0x10, 0x31, 0x29, 0x08, 0x20, 0x29, 0x00, 0x39, 0x31, 0x20, 0x41, 0x41, 0x20, 0x62, 0x7b, 0x20, + 0x6a, 0x7b, 0x29, 0x6a, 0x6a, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x52, + 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x4a, + 0x29, 0x31, 0x39, 0x18, 0x39, 0x39, 0x20, 0x41, 0x41, 0x29, 0x4a, 0x52, 0x18, 0x62, 0x62, 0x20, + 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x62, + 0x62, 0x29, 0x5a, 0x5a, 0x29, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x73, + 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x39, 0x4a, 0x20, 0x6a, 0x94, 0x29, + 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x4a, + 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x31, 0x5a, 0x83, 0x31, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x31, 0x5a, 0x83, 0x31, + 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x41, 0x6a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x6a, + 0x8b, 0x39, 0x73, 0x94, 0x41, 0x73, 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x52, 0x73, 0x29, 0x41, 0x41, + 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x29, 0x29, 0x08, 0x29, 0x29, 0x10, 0x39, 0x29, 0x10, + 0x31, 0x29, 0x08, 0x39, 0x52, 0x18, 0x39, 0x52, 0x18, 0x4a, 0x41, 0x29, 0x31, 0x41, 0x20, 0x29, + 0x52, 0x08, 0x31, 0x62, 0x08, 0x52, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x83, + 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x41, + 0x6a, 0x10, 0x52, 0x73, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x52, 0x20, 0x52, 0x52, 0x29, 0x5a, 0x5a, + 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x29, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x52, 0x18, + 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x62, 0x62, 0x29, 0x62, 0x5a, 0x29, 0x52, 0x62, 0x20, 0x5a, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x52, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x18, 0x73, 0x6a, 0x20, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x6a, 0x62, 0x20, 0x62, 0x62, 0x29, 0x39, 0x39, 0x10, 0x39, + 0x41, 0x10, 0x31, 0x31, 0x10, 0x31, 0x31, 0x08, 0x41, 0x4a, 0x10, 0x39, 0x39, 0x10, 0x62, 0x5a, + 0x20, 0x6a, 0x6a, 0x20, 0x39, 0x39, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x52, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x5a, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x10, 0x52, + 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x39, 0x5a, 0x20, 0x39, 0x62, 0x10, 0x52, 0x5a, 0x29, 0x4a, 0x5a, + 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x52, 0x52, 0x29, 0x52, 0x52, 0x29, 0x62, 0x73, 0x20, + 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x5a, + 0x5a, 0x29, 0x62, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x62, 0x18, 0x52, 0x73, + 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x29, 0x41, 0x5a, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, + 0x62, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x31, 0x62, 0x83, 0x31, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x31, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x20, 0x6a, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x6a, 0x94, 0x41, 0x62, 0x83, 0x29, 0x5a, + 0x8b, 0x29, 0x73, 0x8b, 0x39, 0x6a, 0x94, 0x41, 0x6a, 0x8b, 0x39, 0x4a, 0x6a, 0x29, 0x5a, 0x6a, + 0x20, 0x31, 0x31, 0x18, 0x29, 0x29, 0x10, 0x20, 0x20, 0x10, 0x20, 0x20, 0x08, 0x29, 0x29, 0x08, + 0x31, 0x31, 0x08, 0x41, 0x52, 0x18, 0x39, 0x41, 0x08, 0x4a, 0x4a, 0x18, 0x41, 0x62, 0x08, 0x39, + 0x62, 0x08, 0x29, 0x52, 0x08, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, + 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, + 0x73, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x5a, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x52, 0x5a, 0x08, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, + 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x29, 0x62, 0x5a, 0x29, 0x52, + 0x52, 0x18, 0x4a, 0x62, 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x5a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x31, 0x29, 0x10, 0x73, 0x73, 0x20, + 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x39, 0x39, 0x08, 0x31, + 0x39, 0x08, 0x31, 0x20, 0x10, 0x31, 0x20, 0x10, 0x39, 0x39, 0x08, 0x52, 0x52, 0x18, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x73, 0x29, 0x52, 0x5a, 0x18, 0x6a, 0x6a, 0x31, 0x4a, 0x52, 0x29, 0x31, 0x52, 0x08, 0x39, + 0x62, 0x08, 0x31, 0x39, 0x18, 0x29, 0x31, 0x10, 0x41, 0x6a, 0x18, 0x31, 0x52, 0x10, 0x41, 0x6a, + 0x18, 0x41, 0x73, 0x08, 0x5a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x5a, 0x29, 0x5a, 0x83, 0x31, + 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x52, 0x62, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x52, 0x18, 0x52, 0x73, + 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x20, 0x41, 0x52, 0x20, 0x41, 0x62, 0x20, + 0x4a, 0x5a, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x62, 0x29, 0x4a, + 0x6a, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x7b, + 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x73, 0x20, + 0x5a, 0x8b, 0x29, 0x6a, 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x6a, 0x94, 0x39, 0x6a, 0x8b, 0x39, 0x62, + 0x8b, 0x31, 0x5a, 0x83, 0x31, 0x6a, 0x8b, 0x39, 0x6a, 0x8b, 0x39, 0x4a, 0x6a, 0x29, 0x52, 0x73, + 0x29, 0x5a, 0x5a, 0x20, 0x52, 0x4a, 0x18, 0x31, 0x31, 0x10, 0x29, 0x20, 0x10, 0x31, 0x31, 0x20, + 0x39, 0x39, 0x08, 0x31, 0x62, 0x08, 0x31, 0x4a, 0x10, 0x4a, 0x52, 0x18, 0x41, 0x62, 0x08, 0x41, + 0x73, 0x08, 0x52, 0x5a, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, + 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x29, 0x4a, + 0x6a, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x39, 0x41, 0x08, 0x31, 0x31, 0x10, + 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, 0x5a, 0x73, 0x20, 0x4a, + 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x31, 0x31, 0x08, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, + 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x31, 0x31, 0x10, 0x39, 0x39, 0x08, 0x39, + 0x39, 0x10, 0x29, 0x29, 0x18, 0x39, 0x29, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x5a, 0x18, 0x6a, 0x6a, + 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x20, + 0x4a, 0x6a, 0x29, 0x5a, 0x6a, 0x20, 0x62, 0x62, 0x39, 0x39, 0x4a, 0x29, 0x29, 0x52, 0x08, 0x29, + 0x52, 0x08, 0x4a, 0x6a, 0x08, 0x31, 0x41, 0x20, 0x31, 0x4a, 0x18, 0x41, 0x7b, 0x08, 0x29, 0x41, + 0x10, 0x31, 0x52, 0x10, 0x62, 0x62, 0x39, 0x4a, 0x62, 0x29, 0x39, 0x52, 0x20, 0x4a, 0x73, 0x20, + 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x62, 0x29, 0x4a, + 0x41, 0x20, 0x39, 0x39, 0x20, 0x39, 0x39, 0x18, 0x39, 0x31, 0x18, 0x41, 0x4a, 0x20, 0x4a, 0x62, + 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x20, + 0x4a, 0x52, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x5a, + 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x62, 0x29, 0x52, 0x73, + 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x39, 0x52, 0x18, 0x18, 0x18, 0x08, + 0x52, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x8b, 0x39, 0x6a, 0x8b, 0x39, 0x73, 0x9c, 0x41, 0x6a, + 0x8b, 0x39, 0x62, 0x8b, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x4a, 0x62, 0x29, 0x52, 0x73, + 0x20, 0x52, 0x62, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x39, 0x31, 0x18, 0x39, 0x41, 0x10, + 0x39, 0x52, 0x18, 0x41, 0x73, 0x08, 0x29, 0x52, 0x08, 0x41, 0x62, 0x08, 0x41, 0x6a, 0x18, 0x4a, + 0x5a, 0x20, 0x41, 0x52, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x94, 0x31, 0x5a, 0x7b, 0x20, 0x4a, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x7b, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x29, 0x29, 0x08, 0x20, 0x20, 0x10, + 0x41, 0x5a, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, + 0x6a, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x10, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x62, 0x62, 0x20, 0x4a, 0x41, 0x29, 0x31, 0x31, 0x18, 0x4a, 0x39, 0x18, 0x41, + 0x41, 0x10, 0x39, 0x39, 0x10, 0x39, 0x31, 0x18, 0x41, 0x39, 0x20, 0x41, 0x41, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, + 0x5a, 0x83, 0x29, 0x62, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x6a, 0x29, 0x31, 0x5a, 0x10, 0x41, + 0x6a, 0x18, 0x4a, 0x4a, 0x29, 0x31, 0x4a, 0x10, 0x18, 0x41, 0x00, 0x29, 0x52, 0x08, 0x18, 0x4a, + 0x00, 0x29, 0x4a, 0x10, 0x18, 0x31, 0x08, 0x4a, 0x52, 0x29, 0x41, 0x5a, 0x29, 0x4a, 0x6a, 0x20, + 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, 0x52, 0x73, 0x31, 0x5a, + 0x73, 0x20, 0x52, 0x5a, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x5a, 0x18, 0x41, 0x6a, + 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x41, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, 0x52, + 0x73, 0x10, 0x41, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x18, 0x20, 0x08, + 0x39, 0x52, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x8b, 0x39, 0x73, + 0x94, 0x41, 0x62, 0x8b, 0x31, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, + 0x20, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, 0x62, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x39, 0x4a, 0x20, + 0x31, 0x41, 0x20, 0x41, 0x6a, 0x18, 0x41, 0x73, 0x08, 0x29, 0x5a, 0x00, 0x31, 0x4a, 0x18, 0x41, + 0x4a, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, + 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x41, + 0x5a, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x18, 0x29, 0x39, 0x00, 0x20, 0x20, 0x10, + 0x39, 0x41, 0x20, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x73, 0x20, 0x4a, + 0x6a, 0x20, 0x41, 0x5a, 0x18, 0x4a, 0x62, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x39, 0x39, 0x10, 0x6a, 0x6a, 0x20, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x62, 0x62, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x20, 0x4a, 0x41, 0x29, 0x31, + 0x52, 0x10, 0x41, 0x4a, 0x10, 0x41, 0x39, 0x20, 0x41, 0x41, 0x20, 0x52, 0x5a, 0x18, 0x5a, 0x73, + 0x20, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, + 0x5a, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x31, 0x4a, 0x6a, 0x20, 0x39, + 0x62, 0x08, 0x39, 0x5a, 0x18, 0x31, 0x52, 0x10, 0x29, 0x41, 0x10, 0x29, 0x4a, 0x00, 0x29, 0x39, + 0x18, 0x31, 0x4a, 0x20, 0x29, 0x41, 0x10, 0x31, 0x4a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, + 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x31, 0x5a, 0x73, 0x20, 0x52, + 0x6a, 0x29, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x20, 0x31, 0x41, 0x20, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x5a, 0x29, 0x4a, + 0x5a, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x39, 0x4a, 0x18, 0x29, 0x39, 0x18, + 0x31, 0x39, 0x18, 0x41, 0x62, 0x20, 0x62, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x62, + 0x8b, 0x31, 0x83, 0xac, 0x4a, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x6a, + 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x39, 0x5a, 0x18, + 0x31, 0x52, 0x10, 0x41, 0x6a, 0x18, 0x41, 0x73, 0x08, 0x29, 0x52, 0x08, 0x4a, 0x5a, 0x20, 0x52, + 0x73, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x20, + 0x62, 0x83, 0x29, 0x83, 0xac, 0x4a, 0x73, 0x9c, 0x41, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x39, + 0x4a, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, + 0x29, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x29, 0x41, 0x5a, 0x18, 0x18, 0x31, 0x08, + 0x29, 0x31, 0x10, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x5a, 0x7b, 0x29, 0x4a, + 0x6a, 0x20, 0x41, 0x5a, 0x18, 0x4a, 0x62, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, + 0x18, 0x31, 0x31, 0x00, 0x4a, 0x52, 0x18, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x4a, 0x41, 0x29, 0x39, 0x41, 0x18, 0x18, + 0x31, 0x08, 0x39, 0x41, 0x08, 0x41, 0x41, 0x10, 0x39, 0x52, 0x08, 0x41, 0x6a, 0x08, 0x31, 0x62, + 0x08, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x39, + 0x5a, 0x18, 0x31, 0x5a, 0x10, 0x20, 0x4a, 0x08, 0x20, 0x4a, 0x08, 0x41, 0x6a, 0x10, 0x29, 0x52, + 0x08, 0x29, 0x41, 0x10, 0x29, 0x52, 0x08, 0x29, 0x41, 0x10, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, + 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x41, + 0x6a, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x62, + 0x18, 0x41, 0x62, 0x20, 0x41, 0x52, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x52, 0x20, 0x41, 0x41, 0x18, 0x39, + 0x31, 0x29, 0x31, 0x31, 0x18, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x29, 0x39, 0x18, 0x39, 0x4a, 0x20, + 0x41, 0x52, 0x20, 0x31, 0x31, 0x18, 0x4a, 0x41, 0x20, 0x52, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, + 0x20, 0x4a, 0x73, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, + 0x39, 0x4a, 0x29, 0x39, 0x62, 0x10, 0x31, 0x62, 0x08, 0x29, 0x52, 0x08, 0x52, 0x73, 0x29, 0x52, + 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x73, 0x20, 0x52, 0x73, 0x29, + 0x6a, 0x94, 0x39, 0x7b, 0xa4, 0x41, 0x7b, 0xa4, 0x41, 0x6a, 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x39, + 0x4a, 0x20, 0x39, 0x4a, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x7b, + 0x29, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x41, 0x62, 0x18, + 0x29, 0x39, 0x18, 0x39, 0x4a, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x29, 0x4a, + 0x6a, 0x18, 0x41, 0x5a, 0x18, 0x4a, 0x62, 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x31, 0x31, + 0x08, 0x39, 0x39, 0x08, 0x41, 0x41, 0x08, 0x5a, 0x5a, 0x08, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, + 0x7b, 0x7b, 0x29, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x18, 0x41, + 0x52, 0x08, 0x41, 0x41, 0x08, 0x39, 0x39, 0x10, 0x29, 0x39, 0x18, 0x29, 0x41, 0x10, 0x20, 0x4a, + 0x08, 0x41, 0x73, 0x08, 0x62, 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, 0x52, + 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, + 0x29, 0x52, 0x7b, 0x20, 0x29, 0x4a, 0x10, 0x29, 0x39, 0x18, 0x52, 0x7b, 0x20, 0x41, 0x62, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x4a, 0x20, 0x41, + 0x5a, 0x20, 0x31, 0x41, 0x20, 0x41, 0x4a, 0x18, 0x4a, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x29, + 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x10, 0x29, + 0x29, 0x00, 0x41, 0x41, 0x18, 0x73, 0x6a, 0x20, 0x4a, 0x52, 0x20, 0x62, 0x6a, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x31, 0x39, 0x18, 0x31, 0x41, 0x18, + 0x39, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x31, 0x31, 0x18, 0x31, 0x31, 0x18, 0x41, 0x41, 0x18, 0x4a, + 0x62, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x6a, + 0x20, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, + 0x29, 0x5a, 0x00, 0x29, 0x52, 0x08, 0x29, 0x52, 0x08, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x52, + 0x73, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x52, 0x73, + 0x20, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x20, + 0x6a, 0x94, 0x31, 0x7b, 0xa4, 0x41, 0x62, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x39, + 0x4a, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, + 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x41, 0x62, 0x18, 0x5a, 0x7b, 0x31, 0x52, 0x6a, 0x29, 0x4a, + 0x6a, 0x18, 0x39, 0x5a, 0x20, 0x52, 0x62, 0x20, 0x52, 0x52, 0x18, 0x41, 0x39, 0x10, 0x39, 0x39, + 0x08, 0x39, 0x39, 0x08, 0x29, 0x31, 0x08, 0x6a, 0x6a, 0x20, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, + 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x4a, 0x4a, 0x10, 0x52, + 0x52, 0x18, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x4a, 0x5a, 0x29, 0x4a, 0x52, 0x29, 0x39, 0x5a, + 0x20, 0x20, 0x4a, 0x08, 0x52, 0x73, 0x10, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x4a, + 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x39, 0x5a, 0x18, 0x52, 0x83, 0x18, 0x4a, 0x73, 0x20, + 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x31, + 0x4a, 0x20, 0x39, 0x4a, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x4a, 0x52, + 0x18, 0x52, 0x5a, 0x18, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x6a, 0x20, + 0x5a, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x31, + 0x39, 0x08, 0x4a, 0x41, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x7b, + 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, 0x31, 0x41, 0x18, 0x41, 0x41, 0x18, + 0x41, 0x41, 0x10, 0x4a, 0x52, 0x10, 0x4a, 0x41, 0x18, 0x41, 0x41, 0x20, 0x39, 0x39, 0x18, 0x4a, + 0x52, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x62, + 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, + 0x29, 0x52, 0x08, 0x18, 0x41, 0x00, 0x39, 0x5a, 0x18, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x18, 0x41, + 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x18, 0x4a, 0x62, 0x20, 0x39, 0x4a, 0x20, 0x31, 0x4a, + 0x20, 0x39, 0x4a, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x83, 0x29, 0x7b, 0xa4, 0x41, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x39, + 0x4a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x62, + 0x18, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, + 0x41, 0x6a, 0x18, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x62, 0x7b, 0x39, 0x62, 0x7b, 0x39, 0x52, + 0x73, 0x29, 0x39, 0x52, 0x18, 0x41, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, + 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x62, 0x62, 0x18, 0x7b, 0x7b, 0x31, 0x83, 0x7b, 0x31, + 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x52, 0x18, 0x4a, + 0x4a, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x4a, 0x62, 0x29, 0x39, 0x41, 0x20, 0x62, 0x62, + 0x39, 0x41, 0x6a, 0x18, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x29, + 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, + 0x8b, 0x29, 0x52, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x18, 0x39, 0x4a, 0x20, 0x39, 0x52, 0x20, 0x41, + 0x5a, 0x18, 0x39, 0x52, 0x20, 0x41, 0x5a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x5a, 0x18, 0x39, 0x41, + 0x10, 0x52, 0x5a, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x62, 0x29, 0x62, 0x62, 0x29, 0x5a, 0x5a, 0x29, + 0x62, 0x5a, 0x29, 0x41, 0x41, 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, + 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x41, 0x41, 0x20, 0x6a, 0x73, + 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x41, 0x6a, 0x10, 0x29, 0x31, 0x10, 0x39, 0x39, 0x10, + 0x4a, 0x4a, 0x10, 0x52, 0x52, 0x18, 0x52, 0x5a, 0x08, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x5a, + 0x5a, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x6a, + 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x41, 0x5a, 0x08, + 0x31, 0x5a, 0x10, 0x39, 0x5a, 0x10, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, + 0x62, 0x20, 0x41, 0x5a, 0x20, 0x41, 0x52, 0x20, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x39, 0x4a, + 0x20, 0x41, 0x5a, 0x18, 0x39, 0x4a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x73, 0x20, 0x5a, 0x7b, 0x29, + 0x5a, 0x8b, 0x20, 0x73, 0x94, 0x41, 0x62, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x41, + 0x5a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x31, 0x41, + 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, + 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x29, 0x62, 0x7b, 0x39, 0x62, 0x7b, 0x39, 0x39, + 0x52, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x73, 0x73, 0x20, 0x52, 0x52, 0x20, + 0x41, 0x39, 0x20, 0x52, 0x4a, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x08, 0x52, 0x52, 0x10, 0x41, + 0x41, 0x18, 0x4a, 0x4a, 0x29, 0x41, 0x41, 0x29, 0x41, 0x4a, 0x20, 0x4a, 0x5a, 0x29, 0x4a, 0x5a, + 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x20, + 0x62, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x52, 0x6a, 0x20, 0x4a, + 0x6a, 0x18, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x18, 0x52, 0x5a, 0x29, 0x4a, 0x52, 0x18, 0x41, 0x5a, + 0x08, 0x52, 0x52, 0x20, 0x4a, 0x5a, 0x18, 0x62, 0x5a, 0x29, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x29, + 0x5a, 0x5a, 0x20, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x20, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x5a, 0x5a, 0x20, 0x52, 0x4a, 0x20, 0x6a, 0x6a, + 0x31, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x20, 0x41, 0x6a, 0x18, 0x31, 0x41, 0x08, 0x39, 0x39, 0x08, + 0x41, 0x4a, 0x08, 0x5a, 0x5a, 0x08, 0x62, 0x6a, 0x20, 0x39, 0x41, 0x08, 0x52, 0x4a, 0x18, 0x62, + 0x62, 0x29, 0x52, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x10, + 0x41, 0x6a, 0x08, 0x41, 0x6a, 0x18, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x4a, + 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x39, 0x4a, 0x20, 0x4a, 0x6a, + 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x20, 0x39, 0x52, 0x18, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, + 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x52, 0x7b, 0x20, 0x39, 0x4a, 0x20, 0x4a, + 0x62, 0x20, 0x4a, 0x73, 0x20, 0x4a, 0x73, 0x20, 0x39, 0x52, 0x20, 0x29, 0x31, 0x10, 0x29, 0x39, + 0x18, 0x31, 0x41, 0x08, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, + 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x31, 0x52, 0x73, 0x31, 0x39, + 0x52, 0x20, 0x4a, 0x62, 0x18, 0x4a, 0x62, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, + 0x39, 0x39, 0x10, 0x4a, 0x52, 0x08, 0x4a, 0x52, 0x08, 0x4a, 0x4a, 0x18, 0x39, 0x41, 0x08, 0x4a, + 0x4a, 0x08, 0x62, 0x62, 0x08, 0x52, 0x5a, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x52, 0x7b, + 0x10, 0x5a, 0x7b, 0x31, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x29, + 0x52, 0x73, 0x29, 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, + 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, + 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x39, + 0x52, 0x18, 0x52, 0x52, 0x29, 0x31, 0x41, 0x08, 0x39, 0x4a, 0x18, 0x31, 0x52, 0x08, 0x31, 0x5a, + 0x08, 0x4a, 0x62, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x5a, 0x5a, 0x29, + 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, + 0x52, 0x20, 0x31, 0x31, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, + 0x18, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x52, 0x18, 0x41, 0x41, 0x08, 0x41, 0x4a, 0x08, + 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x52, 0x52, 0x08, 0x5a, 0x5a, 0x08, 0x39, 0x41, 0x20, 0x62, + 0x62, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, + 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x10, + 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x20, 0x41, + 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x5a, 0x7b, 0x29, 0x41, 0x6a, + 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x18, 0x52, 0x6a, 0x29, 0x52, 0x73, 0x20, + 0x4a, 0x62, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x29, 0x41, + 0x5a, 0x20, 0x29, 0x39, 0x18, 0x39, 0x52, 0x18, 0x31, 0x41, 0x18, 0x31, 0x41, 0x18, 0x29, 0x41, + 0x10, 0x29, 0x39, 0x18, 0x31, 0x39, 0x18, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x39, 0x5a, 0x20, + 0x41, 0x62, 0x18, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, + 0x52, 0x20, 0x39, 0x5a, 0x18, 0x52, 0x62, 0x20, 0x62, 0x5a, 0x29, 0x5a, 0x5a, 0x20, 0x5a, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x08, + 0x41, 0x31, 0x18, 0x4a, 0x41, 0x29, 0x52, 0x4a, 0x08, 0x41, 0x4a, 0x20, 0x31, 0x39, 0x08, 0x41, + 0x41, 0x10, 0x62, 0x6a, 0x08, 0x6a, 0x6a, 0x10, 0x52, 0x6a, 0x20, 0x41, 0x6a, 0x10, 0x39, 0x62, + 0x10, 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x52, 0x7b, + 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x41, + 0x62, 0x18, 0x52, 0x62, 0x29, 0x31, 0x39, 0x18, 0x39, 0x5a, 0x10, 0x31, 0x62, 0x08, 0x31, 0x62, + 0x08, 0x4a, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x62, 0x5a, 0x29, 0x5a, 0x5a, 0x20, + 0x4a, 0x4a, 0x18, 0x31, 0x29, 0x18, 0x31, 0x31, 0x18, 0x39, 0x31, 0x10, 0x41, 0x41, 0x10, 0x29, + 0x29, 0x18, 0x39, 0x39, 0x18, 0x62, 0x62, 0x29, 0x5a, 0x5a, 0x20, 0x5a, 0x52, 0x20, 0x5a, 0x52, + 0x20, 0x5a, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x31, 0x39, 0x10, 0x41, 0x4a, 0x08, 0x52, 0x5a, 0x08, + 0x5a, 0x5a, 0x08, 0x29, 0x29, 0x18, 0x4a, 0x4a, 0x08, 0x4a, 0x52, 0x10, 0x5a, 0x52, 0x18, 0x5a, + 0x5a, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, + 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x5a, 0x73, 0x20, 0x5a, 0x7b, 0x31, 0x4a, 0x6a, + 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x18, 0x62, 0x6a, 0x20, 0x52, 0x73, 0x29, + 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x39, + 0x4a, 0x20, 0x29, 0x41, 0x10, 0x39, 0x41, 0x20, 0x39, 0x5a, 0x18, 0x39, 0x52, 0x18, 0x39, 0x41, + 0x18, 0x31, 0x41, 0x18, 0x39, 0x52, 0x18, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x18, + 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x18, 0x39, + 0x52, 0x20, 0x39, 0x52, 0x20, 0x52, 0x62, 0x20, 0x62, 0x62, 0x29, 0x62, 0x62, 0x29, 0x62, 0x62, + 0x29, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x08, + 0x4a, 0x41, 0x20, 0x41, 0x41, 0x29, 0x52, 0x5a, 0x08, 0x5a, 0x5a, 0x08, 0x39, 0x41, 0x10, 0x41, + 0x41, 0x10, 0x39, 0x39, 0x18, 0x62, 0x5a, 0x29, 0x6a, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x7b, + 0x29, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x39, + 0x52, 0x20, 0x41, 0x5a, 0x18, 0x41, 0x4a, 0x20, 0x41, 0x5a, 0x08, 0x41, 0x6a, 0x10, 0x39, 0x73, + 0x08, 0x41, 0x6a, 0x18, 0x52, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x5a, 0x5a, 0x20, + 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x29, 0x29, 0x18, 0x31, 0x29, 0x18, 0x41, 0x39, 0x18, 0x31, + 0x31, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x5a, + 0x18, 0x52, 0x5a, 0x29, 0x41, 0x73, 0x08, 0x29, 0x31, 0x10, 0x41, 0x41, 0x08, 0x31, 0x39, 0x10, + 0x5a, 0x5a, 0x08, 0x4a, 0x52, 0x10, 0x39, 0x41, 0x08, 0x31, 0x39, 0x08, 0x62, 0x62, 0x18, 0x39, + 0x41, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x5a, 0x7b, 0x31, 0x5a, + 0x7b, 0x29, 0x41, 0x6a, 0x18, 0x4a, 0x62, 0x29, 0x5a, 0x7b, 0x31, 0x5a, 0x7b, 0x29, 0x52, 0x7b, + 0x29, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x4a, 0x18, 0x4a, 0x62, 0x20, + 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x20, 0x41, 0x52, 0x20, 0x39, + 0x52, 0x20, 0x41, 0x52, 0x20, 0x39, 0x5a, 0x18, 0x41, 0x5a, 0x20, 0x39, 0x52, 0x18, 0x39, 0x52, + 0x20, 0x39, 0x52, 0x18, 0x39, 0x52, 0x18, 0x4a, 0x62, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x39, + 0x4a, 0x18, 0x39, 0x52, 0x18, 0x4a, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x62, 0x62, + 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x10, 0x4a, 0x4a, 0x10, + 0x29, 0x31, 0x08, 0x20, 0x29, 0x00, 0x52, 0x52, 0x10, 0x52, 0x52, 0x10, 0x5a, 0x5a, 0x08, 0x4a, + 0x4a, 0x08, 0x41, 0x4a, 0x10, 0x41, 0x41, 0x18, 0x62, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x29, + 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x52, 0x6a, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x73, + 0x20, 0x4a, 0x6a, 0x29, 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x41, + 0x62, 0x18, 0x52, 0x52, 0x29, 0x39, 0x4a, 0x20, 0x39, 0x62, 0x10, 0x41, 0x6a, 0x10, 0x41, 0x7b, + 0x08, 0x41, 0x62, 0x08, 0x4a, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x62, 0x5a, 0x29, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x39, 0x31, 0x20, 0x31, 0x31, 0x18, 0x4a, 0x41, 0x29, 0x39, 0x39, 0x18, 0x6a, + 0x62, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x41, 0x20, 0x52, 0x5a, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, + 0x18, 0x41, 0x4a, 0x20, 0x39, 0x52, 0x18, 0x41, 0x41, 0x08, 0x52, 0x52, 0x08, 0x39, 0x41, 0x08, + 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x08, 0x5a, 0x5a, 0x08, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x10, 0x29, + 0x4a, 0x10, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x18, 0x39, 0x5a, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x7b, 0x29, 0x5a, + 0x7b, 0x31, 0x4a, 0x5a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x73, 0x29, 0x5a, 0x7b, + 0x31, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x5a, 0x10, 0x52, 0x73, 0x29, + 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x5a, 0x20, 0x41, 0x5a, 0x20, 0x4a, + 0x62, 0x29, 0x4a, 0x4a, 0x29, 0x29, 0x4a, 0x00, 0x41, 0x62, 0x20, 0x41, 0x52, 0x18, 0x41, 0x62, + 0x18, 0x41, 0x62, 0x18, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, + 0x31, 0x4a, 0x20, 0x39, 0x62, 0x10, 0x41, 0x52, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x39, + 0x39, 0x18, 0x39, 0x41, 0x20, 0x39, 0x41, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, + 0x20, 0x5a, 0x5a, 0x29, 0x52, 0x4a, 0x08, 0x4a, 0x52, 0x10, 0x31, 0x31, 0x18, 0x29, 0x31, 0x10, + 0x31, 0x31, 0x08, 0x39, 0x41, 0x08, 0x41, 0x41, 0x10, 0x4a, 0x41, 0x29, 0x52, 0x4a, 0x20, 0x4a, + 0x41, 0x29, 0x6a, 0x62, 0x20, 0x73, 0x6a, 0x20, 0x41, 0x41, 0x18, 0x39, 0x5a, 0x18, 0x62, 0x7b, + 0x20, 0x5a, 0x73, 0x20, 0x62, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x73, 0x20, 0x52, + 0x73, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, + 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x29, 0x31, 0x52, 0x10, 0x39, 0x62, 0x10, 0x20, 0x4a, + 0x08, 0x39, 0x5a, 0x10, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x31, 0x31, 0x18, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x62, 0x62, 0x20, 0x41, + 0x4a, 0x20, 0x41, 0x41, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, + 0x18, 0x4a, 0x52, 0x18, 0x31, 0x39, 0x10, 0x41, 0x4a, 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x10, + 0x4a, 0x4a, 0x10, 0x52, 0x5a, 0x08, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x29, 0x5a, 0x5a, 0x29, 0x31, + 0x41, 0x18, 0x39, 0x4a, 0x18, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, + 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x10, 0x41, 0x5a, 0x20, + 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x5a, + 0x7b, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x29, 0x52, 0x73, + 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, + 0x4a, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x6a, 0x29, 0x41, 0x5a, 0x20, 0x39, + 0x52, 0x18, 0x4a, 0x4a, 0x29, 0x31, 0x41, 0x18, 0x39, 0x5a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, + 0x20, 0x4a, 0x62, 0x18, 0x52, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x5a, 0x20, 0x41, 0x52, 0x18, + 0x29, 0x4a, 0x00, 0x41, 0x4a, 0x10, 0x31, 0x31, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x41, + 0x41, 0x18, 0x39, 0x31, 0x18, 0x31, 0x39, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x4a, + 0x18, 0x41, 0x41, 0x29, 0x31, 0x31, 0x10, 0x31, 0x39, 0x08, 0x39, 0x39, 0x10, 0x29, 0x31, 0x08, + 0x52, 0x4a, 0x20, 0x41, 0x39, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, 0x20, 0x41, 0x39, 0x20, 0x4a, + 0x41, 0x29, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x5a, 0x5a, 0x20, 0x41, 0x4a, 0x20, 0x39, 0x39, + 0x18, 0x4a, 0x4a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x20, 0x52, + 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x41, 0x62, 0x20, 0x39, 0x5a, 0x20, 0x4a, 0x5a, + 0x29, 0x52, 0x62, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x62, 0x20, 0x52, 0x52, 0x18, + 0x5a, 0x5a, 0x20, 0x31, 0x31, 0x18, 0x29, 0x29, 0x10, 0x5a, 0x52, 0x20, 0x5a, 0x73, 0x20, 0x5a, + 0x83, 0x29, 0x52, 0x52, 0x20, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x52, 0x4a, 0x18, 0x4a, 0x4a, + 0x18, 0x41, 0x5a, 0x18, 0x39, 0x41, 0x10, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x08, 0x31, 0x39, 0x18, + 0x29, 0x31, 0x10, 0x41, 0x39, 0x18, 0x39, 0x41, 0x10, 0x39, 0x39, 0x20, 0x4a, 0x4a, 0x29, 0x31, + 0x39, 0x18, 0x52, 0x52, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, + 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x08, 0x52, 0x6a, 0x20, 0x39, 0x52, 0x18, + 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x41, 0x52, 0x20, 0x41, 0x52, 0x20, 0x41, 0x6a, 0x18, 0x41, 0x5a, + 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x31, 0x5a, 0x10, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x41, 0x5a, 0x29, 0x39, + 0x5a, 0x10, 0x31, 0x41, 0x18, 0x29, 0x41, 0x10, 0x31, 0x5a, 0x10, 0x39, 0x52, 0x18, 0x4a, 0x6a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x31, 0x39, 0x18, 0x39, 0x4a, 0x08, + 0x39, 0x39, 0x10, 0x31, 0x31, 0x10, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x41, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x39, 0x31, 0x20, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, + 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x10, 0x31, 0x39, 0x10, 0x31, 0x31, 0x08, + 0x41, 0x41, 0x29, 0x41, 0x41, 0x29, 0x39, 0x31, 0x29, 0x39, 0x39, 0x20, 0x31, 0x31, 0x20, 0x4a, + 0x41, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x31, 0x31, 0x10, 0x29, 0x29, + 0x10, 0x29, 0x29, 0x10, 0x39, 0x31, 0x18, 0x4a, 0x4a, 0x18, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x20, + 0x52, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, + 0x62, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x4a, + 0x6a, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x39, 0x5a, 0x18, 0x41, 0x5a, + 0x20, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x62, 0x73, 0x20, + 0x4a, 0x5a, 0x20, 0x39, 0x39, 0x20, 0x20, 0x29, 0x00, 0x4a, 0x6a, 0x29, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x52, 0x6a, 0x20, 0x39, 0x39, 0x10, 0x31, 0x29, 0x10, 0x39, 0x41, 0x08, 0x39, 0x52, + 0x18, 0x31, 0x4a, 0x00, 0x39, 0x39, 0x10, 0x41, 0x41, 0x08, 0x52, 0x62, 0x10, 0x39, 0x39, 0x08, + 0x39, 0x39, 0x10, 0x62, 0x62, 0x08, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x39, 0x39, 0x20, 0x39, + 0x52, 0x20, 0x39, 0x5a, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x7b, + 0x20, 0x5a, 0x8b, 0x29, 0x41, 0x5a, 0x18, 0x39, 0x4a, 0x08, 0x4a, 0x73, 0x08, 0x41, 0x52, 0x20, + 0x39, 0x52, 0x20, 0x41, 0x5a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x62, 0x20, 0x4a, + 0x62, 0x20, 0x41, 0x62, 0x20, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x41, 0x52, 0x20, 0x41, 0x5a, + 0x20, 0x41, 0x5a, 0x20, 0x39, 0x62, 0x10, 0x41, 0x6a, 0x10, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x4a, 0x62, 0x29, 0x31, + 0x41, 0x18, 0x31, 0x52, 0x10, 0x29, 0x41, 0x10, 0x31, 0x52, 0x08, 0x39, 0x5a, 0x18, 0x4a, 0x5a, + 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x41, 0x31, 0x18, 0x4a, 0x41, 0x08, + 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x39, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x20, + 0x41, 0x41, 0x29, 0x41, 0x39, 0x20, 0x41, 0x39, 0x20, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x4a, + 0x4a, 0x29, 0x62, 0x62, 0x20, 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x29, 0x52, 0x52, + 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x20, + 0x41, 0x41, 0x18, 0x39, 0x5a, 0x18, 0x52, 0x83, 0x18, 0x6a, 0x94, 0x31, 0x62, 0x8b, 0x29, 0x41, + 0x62, 0x20, 0x41, 0x62, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x52, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x52, + 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x62, 0x8b, 0x29, 0x4a, 0x6a, + 0x20, 0x6a, 0x9c, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x6a, 0x20, + 0x39, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x29, 0x41, 0x10, 0x4a, 0x62, 0x29, 0x62, 0x7b, 0x20, 0x6a, + 0x73, 0x20, 0x31, 0x31, 0x18, 0x41, 0x39, 0x10, 0x31, 0x31, 0x08, 0x31, 0x39, 0x08, 0x29, 0x31, + 0x08, 0x31, 0x39, 0x08, 0x29, 0x31, 0x08, 0x41, 0x39, 0x18, 0x5a, 0x5a, 0x18, 0x41, 0x41, 0x08, + 0x39, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x62, 0x20, 0x41, + 0x62, 0x18, 0x41, 0x52, 0x18, 0x39, 0x52, 0x20, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x62, 0x83, + 0x29, 0x5a, 0x83, 0x20, 0x41, 0x4a, 0x20, 0x41, 0x4a, 0x20, 0x41, 0x73, 0x08, 0x39, 0x4a, 0x20, + 0x39, 0x52, 0x18, 0x31, 0x4a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, + 0x5a, 0x20, 0x41, 0x62, 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x6a, 0x18, 0x31, 0x5a, 0x08, 0x31, 0x5a, + 0x08, 0x41, 0x6a, 0x08, 0x41, 0x7b, 0x08, 0x41, 0x6a, 0x10, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x73, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x41, 0x4a, 0x20, 0x39, + 0x4a, 0x20, 0x29, 0x52, 0x08, 0x31, 0x4a, 0x10, 0x39, 0x52, 0x20, 0x39, 0x4a, 0x18, 0x39, 0x39, + 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x10, 0x31, 0x39, 0x10, + 0x31, 0x31, 0x10, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x39, 0x39, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, + 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x29, + 0x4a, 0x4a, 0x20, 0x4a, 0x41, 0x29, 0x52, 0x52, 0x29, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x41, 0x39, 0x20, 0x39, 0x31, 0x20, 0x52, 0x52, + 0x10, 0x31, 0x31, 0x10, 0x4a, 0x41, 0x18, 0x41, 0x41, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, + 0x20, 0x20, 0x08, 0x5a, 0x83, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x4a, + 0x6a, 0x20, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, + 0x52, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x52, + 0x6a, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x9c, 0x29, 0x52, 0x6a, + 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, + 0x31, 0x31, 0x10, 0x39, 0x39, 0x18, 0x29, 0x20, 0x10, 0x39, 0x39, 0x18, 0x31, 0x31, 0x10, 0x31, + 0x39, 0x10, 0x31, 0x31, 0x08, 0x52, 0x52, 0x10, 0x41, 0x4a, 0x08, 0x31, 0x31, 0x10, 0x39, 0x39, + 0x08, 0x29, 0x29, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x41, 0x29, 0x52, 0x4a, 0x18, 0x4a, 0x52, 0x08, + 0x41, 0x39, 0x18, 0x52, 0x4a, 0x20, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x6a, 0x20, 0x52, + 0x73, 0x20, 0x4a, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x41, 0x52, 0x18, 0x52, 0x7b, 0x20, 0x62, 0x83, + 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x4a, 0x29, 0x41, 0x52, 0x20, 0x31, 0x52, 0x10, 0x39, 0x52, 0x20, + 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, + 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x20, 0x4a, + 0x08, 0x20, 0x52, 0x00, 0x41, 0x7b, 0x08, 0x41, 0x6a, 0x10, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, + 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, 0x52, 0x29, 0x31, + 0x41, 0x20, 0x29, 0x4a, 0x10, 0x41, 0x4a, 0x10, 0x4a, 0x6a, 0x18, 0x4a, 0x5a, 0x20, 0x52, 0x52, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x10, + 0x31, 0x39, 0x10, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x29, 0x29, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, + 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x41, 0x41, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x4a, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x41, 0x10, 0x29, 0x29, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, + 0x18, 0x39, 0x39, 0x10, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x29, 0x31, 0x08, 0x20, 0x18, 0x08, + 0x29, 0x29, 0x08, 0x73, 0x83, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x4a, + 0x6a, 0x20, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x62, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x4a, 0x6a, 0x29, + 0x52, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x7b, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x29, 0x4a, + 0x6a, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, + 0x29, 0x4a, 0x6a, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x4a, 0x73, 0x18, + 0x41, 0x39, 0x10, 0x39, 0x39, 0x18, 0x39, 0x39, 0x10, 0x29, 0x29, 0x10, 0x29, 0x31, 0x10, 0x31, + 0x31, 0x08, 0x4a, 0x52, 0x08, 0x52, 0x52, 0x10, 0x4a, 0x4a, 0x10, 0x31, 0x31, 0x08, 0x41, 0x41, + 0x08, 0x52, 0x52, 0x10, 0x52, 0x52, 0x08, 0x41, 0x41, 0x10, 0x4a, 0x41, 0x10, 0x41, 0x41, 0x08, + 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x62, 0x62, 0x29, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x29, 0x52, + 0x5a, 0x18, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x39, 0x5a, 0x20, 0x4a, 0x6a, + 0x18, 0x41, 0x52, 0x18, 0x39, 0x62, 0x10, 0x31, 0x52, 0x10, 0x39, 0x41, 0x18, 0x41, 0x5a, 0x18, + 0x5a, 0x7b, 0x31, 0x52, 0x73, 0x31, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, + 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x39, 0x5a, + 0x10, 0x31, 0x52, 0x10, 0x29, 0x52, 0x08, 0x41, 0x6a, 0x08, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, + 0x6a, 0x94, 0x29, 0x7b, 0xa4, 0x41, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x41, 0x41, 0x29, 0x4a, + 0x52, 0x29, 0x29, 0x52, 0x08, 0x4a, 0x5a, 0x18, 0x41, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, + 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x31, 0x31, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x31, 0x29, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, + 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x10, 0x39, 0x31, 0x10, 0x41, 0x39, 0x10, 0x29, 0x31, + 0x08, 0x31, 0x39, 0x18, 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x31, 0x31, 0x08, 0x29, 0x29, 0x08, + 0x4a, 0x41, 0x10, 0x7b, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x7b, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x4a, + 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x7b, 0x20, + 0x4a, 0x41, 0x18, 0x39, 0x31, 0x29, 0x31, 0x29, 0x08, 0x29, 0x31, 0x08, 0x39, 0x39, 0x10, 0x31, + 0x29, 0x10, 0x39, 0x39, 0x08, 0x52, 0x52, 0x10, 0x4a, 0x41, 0x29, 0x4a, 0x41, 0x18, 0x29, 0x20, + 0x10, 0x39, 0x31, 0x10, 0x39, 0x39, 0x08, 0x52, 0x39, 0x20, 0x4a, 0x31, 0x18, 0x41, 0x41, 0x20, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, + 0x5a, 0x20, 0x52, 0x62, 0x20, 0x52, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x4a, 0x5a, + 0x18, 0x4a, 0x52, 0x20, 0x39, 0x4a, 0x18, 0x39, 0x4a, 0x18, 0x39, 0x41, 0x18, 0x4a, 0x6a, 0x20, + 0x62, 0x7b, 0x39, 0x62, 0x7b, 0x39, 0x4a, 0x62, 0x20, 0x4a, 0x5a, 0x18, 0x52, 0x5a, 0x18, 0x52, + 0x5a, 0x18, 0x4a, 0x62, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x39, 0x5a, + 0x18, 0x29, 0x41, 0x10, 0x31, 0x62, 0x08, 0x4a, 0x73, 0x18, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, + 0x6a, 0x9c, 0x29, 0x7b, 0xa4, 0x41, 0x5a, 0x83, 0x29, 0x5a, 0x6a, 0x20, 0x41, 0x4a, 0x20, 0x4a, + 0x4a, 0x29, 0x52, 0x62, 0x29, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x39, 0x31, 0x18, 0x39, 0x31, 0x18, 0x4a, 0x41, 0x29, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x29, 0x29, 0x10, 0x39, 0x39, 0x10, 0x52, 0x52, + 0x08, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x31, 0x29, 0x18, 0x41, 0x39, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, + 0x10, 0x31, 0x31, 0x08, 0x41, 0x39, 0x20, 0x39, 0x31, 0x18, 0x31, 0x29, 0x08, 0x39, 0x31, 0x08, + 0x62, 0x62, 0x20, 0x73, 0x73, 0x20, 0x5a, 0x6a, 0x20, 0x62, 0x94, 0x31, 0x62, 0x8b, 0x29, 0x62, + 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, + 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, + 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x4a, + 0x6a, 0x29, 0x52, 0x7b, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x7b, 0xa4, 0x41, 0x6a, 0x9c, + 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x52, 0x62, 0x29, + 0x39, 0x31, 0x18, 0x31, 0x31, 0x18, 0x39, 0x41, 0x10, 0x39, 0x39, 0x08, 0x31, 0x31, 0x08, 0x4a, + 0x31, 0x18, 0x41, 0x31, 0x18, 0x52, 0x52, 0x10, 0x41, 0x41, 0x18, 0x41, 0x39, 0x10, 0x39, 0x31, + 0x20, 0x29, 0x20, 0x10, 0x29, 0x20, 0x10, 0x5a, 0x52, 0x18, 0x4a, 0x41, 0x29, 0x52, 0x4a, 0x08, + 0x4a, 0x41, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x62, + 0x5a, 0x29, 0x62, 0x62, 0x29, 0x52, 0x62, 0x20, 0x62, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x4a, 0x4a, 0x18, 0x31, 0x39, 0x18, 0x41, 0x39, 0x20, 0x39, 0x39, 0x18, 0x52, 0x5a, 0x18, + 0x62, 0x7b, 0x39, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x5a, 0x18, 0x39, 0x52, 0x20, 0x4a, 0x62, 0x18, 0x39, 0x52, + 0x20, 0x31, 0x52, 0x10, 0x39, 0x52, 0x18, 0x39, 0x5a, 0x18, 0x52, 0x6a, 0x20, 0x6a, 0x9c, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x73, 0x9c, 0x41, 0x52, 0x73, 0x29, 0x41, 0x4a, 0x20, 0x5a, + 0x52, 0x20, 0x62, 0x83, 0x31, 0x52, 0x7b, 0x29, 0x52, 0x62, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x39, 0x39, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x10, 0x41, 0x39, 0x18, 0x52, 0x4a, 0x08, 0x52, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x31, 0x31, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x31, 0x31, 0x10, 0x41, 0x41, 0x20, 0x39, 0x29, 0x18, 0x4a, 0x41, + 0x10, 0x52, 0x62, 0x10, 0x4a, 0x41, 0x10, 0x41, 0x39, 0x18, 0x39, 0x31, 0x08, 0x52, 0x5a, 0x18, + 0x6a, 0x6a, 0x31, 0x62, 0x5a, 0x20, 0x62, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, + 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x31, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, + 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x73, 0xa4, 0x39, 0x83, 0xac, + 0x4a, 0x7b, 0xa4, 0x41, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x4a, 0x4a, 0x20, + 0x39, 0x39, 0x20, 0x31, 0x29, 0x10, 0x31, 0x31, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x41, 0x10, 0x31, + 0x31, 0x18, 0x41, 0x39, 0x10, 0x52, 0x52, 0x10, 0x41, 0x41, 0x20, 0x39, 0x39, 0x08, 0x31, 0x29, + 0x18, 0x41, 0x39, 0x18, 0x39, 0x31, 0x20, 0x4a, 0x41, 0x18, 0x52, 0x4a, 0x08, 0x41, 0x41, 0x10, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x39, 0x31, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x5a, + 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x4a, 0x4a, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, + 0x5a, 0x5a, 0x29, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x52, 0x4a, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x18, 0x39, 0x5a, 0x20, 0x39, 0x4a, + 0x20, 0x41, 0x52, 0x20, 0x31, 0x41, 0x20, 0x39, 0x52, 0x18, 0x52, 0x7b, 0x29, 0x73, 0x9c, 0x39, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x41, 0x62, 0x20, 0x5a, 0x5a, 0x29, 0x6a, + 0x6a, 0x31, 0x62, 0x8b, 0x31, 0x52, 0x7b, 0x29, 0x52, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x41, 0x41, + 0x20, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x4a, 0x18, + 0x41, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x41, 0x39, 0x18, 0x41, + 0x39, 0x10, 0x41, 0x39, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x29, 0x20, 0x10, 0x39, 0x39, + 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x29, 0x6a, + 0x62, 0x31, 0x5a, 0x5a, 0x29, 0x41, 0x41, 0x29, 0x4a, 0x4a, 0x10, 0x31, 0x29, 0x08, 0x4a, 0x41, + 0x10, 0x52, 0x52, 0x08, 0x4a, 0x41, 0x08, 0x39, 0x31, 0x10, 0x31, 0x29, 0x10, 0x6a, 0x6a, 0x20, + 0x5a, 0x5a, 0x20, 0x6a, 0x62, 0x31, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x31, 0x73, + 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x73, 0x94, 0x41, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, + 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x62, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, + 0x31, 0x73, 0x9c, 0x39, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x31, 0x5a, 0x7b, 0x29, 0x52, 0x62, 0x20, + 0x41, 0x41, 0x18, 0x39, 0x41, 0x10, 0x41, 0x41, 0x08, 0x20, 0x20, 0x08, 0x29, 0x29, 0x08, 0x31, + 0x31, 0x10, 0x39, 0x31, 0x18, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x29, 0x29, 0x10, 0x39, 0x31, + 0x10, 0x41, 0x31, 0x18, 0x39, 0x39, 0x20, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x29, 0x52, 0x52, 0x18, + 0x31, 0x31, 0x08, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, + 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x20, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x10, 0x52, + 0x52, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x20, 0x41, 0x5a, 0x18, 0x31, 0x4a, + 0x18, 0x29, 0x41, 0x10, 0x29, 0x39, 0x18, 0x18, 0x29, 0x08, 0x62, 0x8b, 0x29, 0x73, 0xa4, 0x39, + 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x41, 0x62, 0x20, 0x5a, 0x5a, 0x29, 0x62, + 0x62, 0x39, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x73, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x4a, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, + 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x39, 0x31, 0x18, 0x39, + 0x31, 0x20, 0x39, 0x39, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, + 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x29, 0x6a, 0x6a, 0x31, 0x6a, + 0x6a, 0x31, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x39, + 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x10, 0x4a, 0x41, 0x29, 0x6a, 0x62, 0x20, 0x52, 0x52, 0x20, + 0x73, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x73, 0x94, 0x41, 0x6a, + 0x94, 0x39, 0x6a, 0x94, 0x41, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x20, + 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x62, 0x29, 0x5a, + 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x73, 0x73, 0x20, + 0x5a, 0x5a, 0x20, 0x31, 0x31, 0x00, 0x31, 0x39, 0x08, 0x29, 0x29, 0x08, 0x39, 0x39, 0x10, 0x41, + 0x39, 0x20, 0x31, 0x29, 0x18, 0x31, 0x31, 0x08, 0x29, 0x29, 0x08, 0x29, 0x29, 0x10, 0x39, 0x29, + 0x18, 0x39, 0x29, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x41, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, + 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x5a, 0x52, 0x20, 0x5a, + 0x5a, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x41, 0x39, 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, + 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, + 0x52, 0x20, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x5a, 0x20, 0x4a, 0x6a, + 0x29, 0x5a, 0x7b, 0x29, 0x31, 0x41, 0x20, 0x29, 0x39, 0x18, 0x6a, 0x94, 0x31, 0x7b, 0xa4, 0x41, + 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x7b, 0x9c, 0x41, 0x41, 0x62, 0x20, 0x4a, 0x5a, 0x29, 0x52, + 0x73, 0x31, 0x5a, 0x83, 0x31, 0x5a, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x20, 0x41, 0x39, + 0x20, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x39, 0x39, 0x18, + 0x41, 0x41, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x31, 0x31, 0x18, 0x39, + 0x31, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x18, 0x4a, 0x39, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, + 0x20, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x20, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x39, 0x62, + 0x62, 0x39, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x5a, 0x18, 0x52, 0x62, + 0x10, 0x41, 0x4a, 0x10, 0x41, 0x39, 0x18, 0x4a, 0x41, 0x29, 0x62, 0x5a, 0x20, 0x62, 0x62, 0x29, + 0x62, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x8b, 0x31, 0x62, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, + 0x29, 0x7b, 0x9c, 0x41, 0x6a, 0x94, 0x41, 0x5a, 0x83, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x29, + 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x4a, + 0x6a, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x6a, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x6a, 0x73, 0x20, + 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x18, 0x29, 0x29, 0x10, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x39, + 0x31, 0x18, 0x39, 0x39, 0x10, 0x39, 0x39, 0x08, 0x31, 0x29, 0x10, 0x39, 0x39, 0x20, 0x41, 0x31, + 0x18, 0x39, 0x29, 0x18, 0x39, 0x39, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x29, 0x62, 0x62, 0x29, 0x62, + 0x5a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x62, + 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x18, 0x52, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x5a, 0x8b, + 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x39, 0x4a, 0x20, 0x62, 0x94, 0x29, 0x7b, 0xa4, 0x41, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x7b, 0xa4, 0x41, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x31, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x6a, 0x73, 0x20, 0x5a, 0x52, 0x20, 0x39, 0x39, + 0x20, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, + 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x31, 0x20, 0x39, 0x31, 0x18, 0x41, + 0x41, 0x18, 0x31, 0x29, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, 0x4a, 0x4a, + 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x39, 0x62, 0x62, 0x39, 0x52, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x6a, + 0x08, 0x62, 0x62, 0x31, 0x5a, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x62, 0x8b, 0x29, + 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x4a, + 0x6a, 0x20, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x62, 0x8b, + 0x31, 0x7b, 0xa4, 0x41, 0x73, 0x94, 0x41, 0x5a, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x20, + 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, + 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x6a, 0x73, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x31, 0x31, 0x08, 0x39, 0x41, 0x08, 0x4a, 0x52, 0x08, 0x41, + 0x41, 0x08, 0x4a, 0x41, 0x10, 0x31, 0x29, 0x10, 0x52, 0x39, 0x20, 0x41, 0x31, 0x18, 0x41, 0x41, + 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x29, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x4a, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, + 0x52, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x39, 0x4a, 0x20, 0x62, 0x8b, 0x29, 0x7b, 0xa4, 0x41, + 0x6a, 0x9c, 0x29, 0x73, 0x9c, 0x41, 0x6a, 0x9c, 0x29, 0x52, 0x6a, 0x29, 0x5a, 0x8b, 0x29, 0x62, + 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x20, 0x39, 0x41, 0x20, 0x5a, 0x52, + 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x41, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x31, 0x39, 0x18, 0x39, 0x39, 0x18, 0x31, + 0x31, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x39, 0x41, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x39, 0x6a, 0x62, 0x31, 0x52, + 0x5a, 0x29, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, + 0x18, 0x62, 0x62, 0x39, 0x52, 0x6a, 0x29, 0x62, 0x83, 0x29, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, + 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, 0x52, 0x6a, 0x29, 0x5a, + 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x62, 0x29, 0x5a, 0x7b, 0x20, 0x62, 0x8b, + 0x31, 0x6a, 0x8b, 0x39, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x31, 0x41, 0x18, 0x4a, 0x6a, 0x20, + 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x94, 0x20, 0x73, 0x9c, + 0x39, 0x7b, 0x9c, 0x41, 0x73, 0x9c, 0x41, 0x6a, 0x9c, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x73, 0x20, + 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x18, 0x4a, 0x4a, 0x08, 0x31, 0x31, 0x08, 0x41, 0x41, 0x10, 0x41, + 0x41, 0x08, 0x29, 0x20, 0x10, 0x31, 0x29, 0x10, 0x39, 0x29, 0x10, 0x52, 0x39, 0x20, 0x4a, 0x41, + 0x29, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x10, 0x39, 0x39, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x41, 0x39, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x4a, 0x41, 0x18, 0x62, 0x62, 0x31, 0x5a, 0x5a, 0x29, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x52, 0x62, 0x29, 0x62, 0x5a, 0x20, 0x52, + 0x52, 0x18, 0x62, 0x62, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x52, 0x73, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, + 0x73, 0xa4, 0x39, 0x73, 0x9c, 0x39, 0x5a, 0x7b, 0x31, 0x5a, 0x7b, 0x31, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x62, 0x83, 0x29, 0x52, 0x5a, + 0x18, 0x39, 0x39, 0x20, 0x41, 0x39, 0x20, 0x41, 0x41, 0x18, 0x39, 0x4a, 0x20, 0x41, 0x4a, 0x18, + 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, + 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x39, 0x39, 0x18, 0x39, 0x41, 0x10, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x5a, + 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x39, 0x39, 0x08, 0x41, 0x31, + 0x18, 0x52, 0x39, 0x20, 0x62, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, + 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x52, 0x18, 0x5a, + 0x83, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x41, 0x62, 0x18, 0x5a, 0x83, 0x20, 0x5a, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x29, 0x39, 0x18, 0x41, 0x52, 0x20, + 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x6a, + 0x94, 0x29, 0x52, 0x73, 0x29, 0x6a, 0x94, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, + 0x41, 0x7b, 0x9c, 0x41, 0x6a, 0x9c, 0x29, 0x73, 0x9c, 0x41, 0x52, 0x73, 0x31, 0x5a, 0x73, 0x20, + 0x73, 0x6a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x41, 0x18, 0x41, 0x39, 0x20, 0x31, + 0x29, 0x18, 0x31, 0x29, 0x10, 0x31, 0x20, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x41, 0x20, 0x4a, 0x41, + 0x29, 0x31, 0x29, 0x10, 0x4a, 0x41, 0x08, 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, + 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, + 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x41, 0x39, + 0x18, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x31, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, + 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x62, 0x62, 0x29, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x41, 0x20, 0x31, 0x4a, 0x18, 0x52, 0x7b, 0x20, 0x62, 0x8b, + 0x29, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x9c, 0x29, + 0x6a, 0x94, 0x29, 0x7b, 0xa4, 0x41, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x62, 0x83, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x8b, + 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x5a, 0x20, + 0x52, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x39, + 0x39, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x20, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, + 0x18, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x20, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, + 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x10, 0x18, 0x18, 0x08, 0x29, 0x20, + 0x10, 0x4a, 0x41, 0x29, 0x6a, 0x6a, 0x31, 0x52, 0x7b, 0x20, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x20, + 0x4a, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x31, 0x52, 0x08, 0x5a, 0x83, 0x20, 0x62, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x6a, 0x18, 0x20, 0x29, 0x00, 0x52, 0x7b, 0x29, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x73, 0x20, 0x31, 0x39, 0x18, 0x4a, 0x73, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x73, 0x9c, 0x41, 0x7b, 0x9c, 0x41, 0x73, 0x94, 0x41, 0x62, + 0x94, 0x29, 0x52, 0x73, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x6a, 0x94, + 0x31, 0x73, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, + 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x5a, 0x08, 0x31, 0x39, 0x08, 0x41, 0x39, 0x18, 0x4a, + 0x39, 0x18, 0x39, 0x20, 0x10, 0x31, 0x29, 0x10, 0x39, 0x41, 0x20, 0x5a, 0x5a, 0x18, 0x52, 0x4a, + 0x20, 0x41, 0x41, 0x18, 0x5a, 0x5a, 0x08, 0x31, 0x39, 0x10, 0x41, 0x41, 0x10, 0x52, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x08, 0x41, + 0x4a, 0x10, 0x41, 0x39, 0x10, 0x39, 0x31, 0x18, 0x31, 0x31, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, + 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x39, 0x62, 0x5a, 0x29, 0x52, 0x52, 0x20, 0x29, 0x20, 0x10, + 0x20, 0x20, 0x10, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x29, 0x62, 0x62, 0x31, 0x5a, 0x5a, 0x29, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x5a, 0x18, 0x31, 0x41, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x83, + 0x20, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x20, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, + 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x20, 0x4a, 0x73, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, + 0x4a, 0x5a, 0x18, 0x41, 0x41, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, + 0x4a, 0x18, 0x4a, 0x41, 0x20, 0x41, 0x41, 0x20, 0x4a, 0x41, 0x18, 0x4a, 0x41, 0x18, 0x39, 0x39, + 0x10, 0x29, 0x29, 0x10, 0x29, 0x29, 0x08, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x10, 0x41, 0x41, 0x10, + 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x10, 0x18, 0x18, 0x08, 0x31, 0x31, + 0x20, 0x41, 0x41, 0x10, 0x52, 0x62, 0x10, 0x4a, 0x62, 0x20, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, + 0x62, 0x83, 0x29, 0x52, 0x73, 0x20, 0x39, 0x52, 0x18, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x4a, 0x62, 0x20, 0x18, 0x31, 0x08, 0x29, 0x29, 0x10, 0x31, 0x4a, 0x10, 0x5a, 0x7b, + 0x20, 0x62, 0x7b, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x20, 0x29, 0x00, 0x5a, 0x73, 0x20, + 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x94, 0x41, 0x7b, 0x9c, 0x41, 0x7b, 0x9c, 0x41, 0x6a, + 0x9c, 0x29, 0x52, 0x73, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x20, 0x29, 0x00, 0x4a, 0x6a, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x20, + 0x62, 0x83, 0x29, 0x73, 0x6a, 0x20, 0x41, 0x4a, 0x10, 0x20, 0x20, 0x08, 0x29, 0x29, 0x08, 0x31, + 0x39, 0x08, 0x20, 0x18, 0x08, 0x41, 0x31, 0x18, 0x39, 0x41, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x4a, + 0x20, 0x41, 0x41, 0x10, 0x52, 0x52, 0x18, 0x39, 0x41, 0x08, 0x52, 0x52, 0x10, 0x52, 0x5a, 0x08, + 0x39, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x52, 0x5a, 0x08, 0x31, 0x31, 0x18, 0x39, 0x39, 0x08, 0x41, + 0x41, 0x10, 0x31, 0x31, 0x10, 0x29, 0x29, 0x08, 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x4a, 0x4a, + 0x20, 0x62, 0x62, 0x39, 0x62, 0x62, 0x39, 0x62, 0x62, 0x39, 0x52, 0x52, 0x18, 0x18, 0x18, 0x08, + 0x29, 0x29, 0x10, 0x52, 0x52, 0x18, 0x62, 0x62, 0x31, 0x62, 0x62, 0x31, 0x5a, 0x5a, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x5a, 0x18, 0x41, 0x5a, 0x20, 0x62, 0x8b, 0x20, 0x39, 0x52, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x5a, 0x83, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x5a, + 0x7b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x5a, 0x7b, 0x29, 0x39, 0x52, 0x18, + 0x31, 0x31, 0x18, 0x31, 0x31, 0x10, 0x31, 0x29, 0x10, 0x31, 0x31, 0x10, 0x41, 0x41, 0x18, 0x41, + 0x39, 0x20, 0x39, 0x4a, 0x18, 0x39, 0x4a, 0x08, 0x39, 0x41, 0x18, 0x18, 0x31, 0x08, 0x31, 0x29, + 0x10, 0x29, 0x29, 0x10, 0x39, 0x39, 0x10, 0x31, 0x29, 0x18, 0x39, 0x39, 0x20, 0x39, 0x31, 0x20, + 0x31, 0x31, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, + 0x39, 0x20, 0x39, 0x31, 0x20, 0x39, 0x31, 0x29, 0x41, 0x39, 0x20, 0x20, 0x20, 0x10, 0x39, 0x39, + 0x20, 0x39, 0x39, 0x10, 0x39, 0x41, 0x10, 0x39, 0x62, 0x10, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x6a, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, + 0x62, 0x20, 0x29, 0x29, 0x10, 0x39, 0x31, 0x10, 0x39, 0x31, 0x18, 0x29, 0x29, 0x08, 0x39, 0x41, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x10, 0x20, 0x18, 0x08, 0x62, 0x62, 0x31, + 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x62, + 0x94, 0x31, 0x52, 0x6a, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x31, 0x41, 0x20, 0x31, 0x4a, + 0x18, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, + 0x62, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x39, 0x41, 0x10, 0x08, 0x18, 0x00, 0x18, 0x18, 0x08, 0x39, + 0x39, 0x08, 0x39, 0x41, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x08, 0x31, 0x39, 0x10, 0x4a, 0x4a, + 0x20, 0x31, 0x39, 0x18, 0x31, 0x31, 0x18, 0x31, 0x39, 0x08, 0x41, 0x41, 0x08, 0x62, 0x62, 0x08, + 0x31, 0x41, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x10, 0x41, 0x39, 0x08, 0x41, 0x39, 0x10, 0x41, + 0x41, 0x10, 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x62, 0x62, + 0x31, 0x62, 0x62, 0x39, 0x6a, 0x62, 0x31, 0x5a, 0x5a, 0x20, 0x39, 0x39, 0x18, 0x39, 0x31, 0x18, + 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x4a, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x73, + 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x41, 0x41, 0x18, 0x31, 0x39, 0x18, + 0x31, 0x31, 0x10, 0x31, 0x31, 0x10, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x31, 0x29, 0x18, 0x39, + 0x31, 0x20, 0x39, 0x41, 0x18, 0x18, 0x31, 0x08, 0x29, 0x31, 0x10, 0x31, 0x4a, 0x10, 0x52, 0x39, + 0x20, 0x39, 0x29, 0x10, 0x31, 0x29, 0x18, 0x39, 0x39, 0x20, 0x41, 0x39, 0x20, 0x39, 0x31, 0x18, + 0x31, 0x31, 0x08, 0x41, 0x41, 0x08, 0x52, 0x4a, 0x08, 0x39, 0x31, 0x18, 0x39, 0x31, 0x10, 0x39, + 0x29, 0x18, 0x39, 0x31, 0x29, 0x41, 0x39, 0x10, 0x31, 0x39, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x41, + 0x29, 0x41, 0x41, 0x29, 0x29, 0x31, 0x10, 0x39, 0x5a, 0x18, 0x52, 0x62, 0x29, 0x4a, 0x52, 0x29, + 0x4a, 0x62, 0x29, 0x52, 0x73, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x6a, 0x7b, 0x29, 0x4a, + 0x4a, 0x20, 0x20, 0x20, 0x08, 0x29, 0x29, 0x08, 0x31, 0x31, 0x08, 0x29, 0x29, 0x08, 0x41, 0x41, + 0x18, 0x4a, 0x52, 0x10, 0x39, 0x39, 0x20, 0x31, 0x31, 0x18, 0x29, 0x31, 0x10, 0x6a, 0x62, 0x31, + 0x6a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x94, 0x31, 0x73, 0x94, 0x41, 0x4a, + 0x73, 0x20, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x83, 0x29, 0x39, 0x52, 0x18, 0x39, 0x52, + 0x20, 0x41, 0x5a, 0x18, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, + 0x5a, 0x83, 0x20, 0x4a, 0x6a, 0x29, 0x18, 0x20, 0x08, 0x10, 0x10, 0x00, 0x18, 0x41, 0x00, 0x20, + 0x20, 0x08, 0x52, 0x5a, 0x08, 0x41, 0x4a, 0x08, 0x4a, 0x4a, 0x08, 0x52, 0x52, 0x20, 0x4a, 0x4a, + 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x4a, 0x08, 0x39, 0x41, 0x10, 0x41, 0x4a, 0x10, + 0x41, 0x4a, 0x08, 0x4a, 0x4a, 0x08, 0x41, 0x41, 0x08, 0x31, 0x31, 0x08, 0x41, 0x39, 0x08, 0x5a, + 0x5a, 0x08, 0x41, 0x41, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x52, 0x4a, 0x18, 0x62, 0x5a, + 0x29, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x41, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x10, + 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x5a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x62, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x62, 0x62, + 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x62, 0x20, 0x52, 0x52, 0x20, 0x29, 0x29, 0x18, 0x29, 0x29, 0x10, 0x31, 0x31, 0x18, 0x29, + 0x29, 0x10, 0x4a, 0x41, 0x10, 0x20, 0x29, 0x00, 0x29, 0x31, 0x10, 0x41, 0x62, 0x18, 0x52, 0x52, + 0x20, 0x41, 0x31, 0x18, 0x31, 0x29, 0x18, 0x41, 0x41, 0x10, 0x29, 0x31, 0x08, 0x39, 0x39, 0x08, + 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x39, 0x31, 0x20, 0x31, 0x29, 0x18, 0x39, + 0x29, 0x18, 0x31, 0x29, 0x18, 0x4a, 0x41, 0x10, 0x29, 0x31, 0x08, 0x41, 0x39, 0x10, 0x31, 0x31, + 0x20, 0x4a, 0x41, 0x29, 0x41, 0x41, 0x18, 0x41, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x39, 0x52, 0x20, + 0x4a, 0x5a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x18, 0x4a, + 0x4a, 0x20, 0x29, 0x29, 0x08, 0x41, 0x4a, 0x08, 0x31, 0x31, 0x08, 0x29, 0x31, 0x10, 0x39, 0x41, + 0x10, 0x4a, 0x4a, 0x29, 0x41, 0x41, 0x10, 0x41, 0x41, 0x29, 0x39, 0x31, 0x18, 0x5a, 0x5a, 0x20, + 0x73, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x41, + 0x5a, 0x20, 0x41, 0x52, 0x20, 0x31, 0x4a, 0x20, 0x52, 0x7b, 0x20, 0x39, 0x4a, 0x18, 0x41, 0x5a, + 0x20, 0x41, 0x5a, 0x20, 0x52, 0x7b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, + 0x41, 0x6a, 0x18, 0x20, 0x20, 0x10, 0x18, 0x41, 0x00, 0x39, 0x5a, 0x20, 0x31, 0x5a, 0x10, 0x31, + 0x31, 0x08, 0x10, 0x10, 0x00, 0x29, 0x20, 0x08, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x18, 0x5a, 0x5a, + 0x29, 0x31, 0x31, 0x18, 0x62, 0x62, 0x29, 0x52, 0x52, 0x20, 0x41, 0x41, 0x08, 0x39, 0x41, 0x08, + 0x52, 0x52, 0x08, 0x31, 0x39, 0x08, 0x41, 0x41, 0x10, 0x4a, 0x52, 0x08, 0x41, 0x4a, 0x10, 0x39, + 0x39, 0x08, 0x29, 0x29, 0x08, 0x29, 0x29, 0x10, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, + 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, + 0x6a, 0x20, 0x41, 0x6a, 0x18, 0x52, 0x73, 0x10, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, + 0x20, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x62, + 0x29, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x6a, 0x62, 0x31, 0x39, 0x39, 0x18, 0x31, 0x29, 0x18, 0x29, 0x29, 0x10, 0x29, 0x29, 0x08, 0x29, + 0x29, 0x10, 0x29, 0x31, 0x10, 0x29, 0x39, 0x10, 0x29, 0x39, 0x18, 0x41, 0x73, 0x08, 0x52, 0x52, + 0x29, 0x29, 0x20, 0x10, 0x31, 0x31, 0x20, 0x41, 0x41, 0x10, 0x31, 0x39, 0x18, 0x4a, 0x4a, 0x08, + 0x20, 0x29, 0x00, 0x39, 0x41, 0x08, 0x52, 0x5a, 0x08, 0x4a, 0x41, 0x18, 0x39, 0x39, 0x10, 0x31, + 0x39, 0x08, 0x4a, 0x39, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x08, 0x29, 0x29, 0x10, 0x39, 0x29, + 0x18, 0x41, 0x39, 0x20, 0x39, 0x39, 0x20, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x29, 0x41, 0x5a, 0x29, + 0x52, 0x52, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x41, 0x41, 0x20, 0x41, + 0x4a, 0x08, 0x39, 0x39, 0x08, 0x31, 0x39, 0x18, 0x41, 0x41, 0x08, 0x29, 0x31, 0x08, 0x29, 0x29, + 0x10, 0x4a, 0x52, 0x29, 0x39, 0x31, 0x18, 0x41, 0x31, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x52, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x20, 0x41, + 0x5a, 0x20, 0x31, 0x41, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x39, 0x4a, 0x18, 0x41, 0x62, + 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x62, 0x18, + 0x18, 0x31, 0x08, 0x29, 0x4a, 0x10, 0x29, 0x52, 0x08, 0x31, 0x52, 0x10, 0x29, 0x5a, 0x00, 0x41, + 0x52, 0x08, 0x52, 0x62, 0x10, 0x41, 0x41, 0x08, 0x20, 0x20, 0x10, 0x18, 0x18, 0x08, 0x20, 0x20, + 0x10, 0x20, 0x20, 0x10, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x29, 0x31, 0x08, 0x39, 0x39, 0x08, + 0x41, 0x4a, 0x10, 0x41, 0x41, 0x08, 0x31, 0x31, 0x08, 0x41, 0x41, 0x08, 0x41, 0x4a, 0x08, 0x39, + 0x31, 0x10, 0x41, 0x41, 0x10, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x31, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x62, 0x62, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x62, 0x20, 0x41, 0x4a, 0x18, 0x4a, 0x41, 0x29, 0x4a, 0x52, 0x29, 0x52, + 0x62, 0x29, 0x41, 0x6a, 0x18, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x62, 0x8b, 0x29, 0x62, + 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x6a, 0x29, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x18, + 0x4a, 0x41, 0x20, 0x31, 0x31, 0x18, 0x31, 0x29, 0x18, 0x20, 0x20, 0x08, 0x31, 0x31, 0x10, 0x39, + 0x39, 0x10, 0x41, 0x41, 0x08, 0x41, 0x41, 0x10, 0x31, 0x31, 0x08, 0x41, 0x41, 0x10, 0x39, 0x29, + 0x10, 0x31, 0x29, 0x08, 0x39, 0x39, 0x10, 0x29, 0x31, 0x08, 0x52, 0x4a, 0x08, 0x41, 0x4a, 0x10, + 0x41, 0x41, 0x08, 0x31, 0x31, 0x08, 0x52, 0x52, 0x10, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x39, + 0x39, 0x08, 0x4a, 0x41, 0x20, 0x29, 0x29, 0x10, 0x41, 0x39, 0x10, 0x4a, 0x4a, 0x10, 0x4a, 0x4a, + 0x18, 0x41, 0x39, 0x20, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x29, 0x5a, 0x5a, 0x29, 0x4a, 0x5a, 0x29, + 0x5a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x39, 0x39, 0x10, 0x39, + 0x41, 0x10, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x41, 0x10, 0x31, 0x31, 0x18, 0x39, 0x39, + 0x10, 0x41, 0x41, 0x10, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, + 0x52, 0x4a, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x29, + 0x31, 0x10, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x20, 0x31, 0x41, 0x18, 0x4a, 0x6a, + 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x73, 0x20, 0x41, 0x62, 0x20, 0x52, 0x73, 0x29, 0x41, 0x62, 0x18, + 0x18, 0x20, 0x08, 0x31, 0x5a, 0x10, 0x41, 0x6a, 0x08, 0x31, 0x62, 0x08, 0x29, 0x52, 0x08, 0x31, + 0x52, 0x08, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x41, 0x41, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x20, 0x39, 0x39, 0x10, 0x29, 0x29, 0x08, + 0x31, 0x31, 0x08, 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x08, 0x39, 0x31, 0x08, 0x4a, 0x39, 0x08, 0x52, + 0x39, 0x20, 0x41, 0x39, 0x18, 0x41, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x39, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x39, 0x39, 0x10, + 0x39, 0x39, 0x10, 0x41, 0x39, 0x20, 0x31, 0x39, 0x18, 0x31, 0x39, 0x18, 0x39, 0x52, 0x20, 0x41, + 0x62, 0x20, 0x39, 0x52, 0x18, 0x5a, 0x83, 0x20, 0x52, 0x73, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x62, 0x62, + 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x62, 0x62, 0x18, 0x5a, 0x52, 0x18, 0x41, 0x39, 0x20, + 0x20, 0x20, 0x10, 0x29, 0x29, 0x18, 0x41, 0x39, 0x20, 0x41, 0x39, 0x20, 0x31, 0x31, 0x10, 0x31, + 0x31, 0x10, 0x29, 0x31, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x41, 0x41, + 0x08, 0x31, 0x39, 0x08, 0x39, 0x41, 0x10, 0x39, 0x39, 0x18, 0x41, 0x31, 0x18, 0x39, 0x29, 0x10, + 0x52, 0x52, 0x08, 0x41, 0x39, 0x08, 0x4a, 0x41, 0x10, 0x4a, 0x4a, 0x20, 0x41, 0x41, 0x10, 0x41, + 0x4a, 0x10, 0x39, 0x31, 0x10, 0x39, 0x39, 0x20, 0x4a, 0x41, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, + 0x20, 0x4a, 0x41, 0x20, 0x41, 0x39, 0x20, 0x31, 0x41, 0x20, 0x41, 0x52, 0x20, 0x4a, 0x52, 0x29, + 0x5a, 0x52, 0x20, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x29, 0x4a, 0x41, 0x20, 0x31, 0x31, 0x10, 0x31, + 0x31, 0x08, 0x41, 0x41, 0x20, 0x29, 0x31, 0x08, 0x39, 0x39, 0x10, 0x39, 0x41, 0x08, 0x31, 0x39, + 0x08, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, + 0x39, 0x39, 0x18, 0x52, 0x5a, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x6a, 0x20, 0x29, 0x39, 0x18, 0x4a, + 0x73, 0x20, 0x4a, 0x6a, 0x18, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x31, 0x4a, 0x20, 0x4a, 0x62, + 0x20, 0x4a, 0x73, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, + 0x08, 0x18, 0x00, 0x31, 0x52, 0x08, 0x29, 0x52, 0x08, 0x18, 0x41, 0x00, 0x41, 0x6a, 0x10, 0x52, + 0x73, 0x10, 0x41, 0x62, 0x08, 0x41, 0x4a, 0x20, 0x41, 0x4a, 0x18, 0x41, 0x4a, 0x18, 0x41, 0x4a, + 0x18, 0x52, 0x5a, 0x29, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x41, 0x4a, 0x10, 0x31, 0x39, 0x10, + 0x29, 0x29, 0x08, 0x41, 0x39, 0x08, 0x39, 0x29, 0x08, 0x41, 0x41, 0x10, 0x52, 0x52, 0x08, 0x39, + 0x39, 0x10, 0x41, 0x41, 0x10, 0x39, 0x39, 0x18, 0x41, 0x39, 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, + 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, + 0x31, 0x39, 0x18, 0x41, 0x41, 0x10, 0x31, 0x31, 0x10, 0x31, 0x41, 0x18, 0x39, 0x41, 0x20, 0x41, + 0x52, 0x20, 0x52, 0x52, 0x29, 0x52, 0x6a, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x4a, 0x6a, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x62, 0x94, 0x29, 0x73, 0x8b, 0x39, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x41, 0x39, 0x08, 0x52, 0x52, 0x10, 0x52, 0x52, 0x20, 0x39, 0x39, 0x18, + 0x29, 0x29, 0x10, 0x31, 0x31, 0x10, 0x4a, 0x41, 0x20, 0x4a, 0x41, 0x29, 0x31, 0x39, 0x10, 0x29, + 0x29, 0x10, 0x29, 0x29, 0x10, 0x41, 0x41, 0x10, 0x52, 0x52, 0x10, 0x39, 0x41, 0x08, 0x29, 0x31, + 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, 0x39, 0x29, 0x18, 0x4a, 0x39, 0x18, 0x31, 0x29, 0x08, + 0x31, 0x31, 0x08, 0x4a, 0x41, 0x18, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x29, 0x5a, 0x5a, 0x29, 0x31, + 0x31, 0x18, 0x31, 0x29, 0x18, 0x39, 0x39, 0x20, 0x39, 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x41, 0x4a, + 0x10, 0x41, 0x41, 0x18, 0x4a, 0x41, 0x29, 0x41, 0x5a, 0x29, 0x4a, 0x4a, 0x29, 0x52, 0x52, 0x29, + 0x4a, 0x4a, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x39, 0x29, 0x18, 0x39, 0x31, 0x18, 0x41, + 0x4a, 0x08, 0x41, 0x41, 0x08, 0x39, 0x31, 0x08, 0x29, 0x29, 0x10, 0x41, 0x4a, 0x10, 0x31, 0x39, + 0x08, 0x4a, 0x4a, 0x10, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x20, 0x41, 0x4a, 0x20, 0x4a, 0x6a, 0x20, 0x39, 0x52, 0x20, 0x31, 0x41, 0x18, 0x4a, + 0x6a, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x4a, 0x6a, + 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x20, 0x52, 0x83, 0x18, 0x4a, 0x5a, 0x29, + 0x29, 0x41, 0x10, 0x39, 0x41, 0x20, 0x39, 0x52, 0x08, 0x39, 0x5a, 0x08, 0x31, 0x4a, 0x00, 0x52, + 0x6a, 0x20, 0x4a, 0x6a, 0x08, 0x39, 0x52, 0x18, 0x39, 0x52, 0x18, 0x39, 0x52, 0x20, 0x41, 0x5a, + 0x18, 0x62, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x41, 0x5a, 0x08, 0x39, 0x4a, 0x18, + 0x29, 0x4a, 0x00, 0x4a, 0x41, 0x10, 0x52, 0x4a, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x39, 0x10, 0x4a, + 0x39, 0x18, 0x4a, 0x4a, 0x29, 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, 0x10, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x10, + 0x29, 0x29, 0x10, 0x31, 0x31, 0x10, 0x29, 0x31, 0x10, 0x29, 0x39, 0x18, 0x29, 0x39, 0x18, 0x52, + 0x62, 0x29, 0x52, 0x6a, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, + 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x29, 0x6a, 0x94, 0x31, 0x6a, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x73, + 0x9c, 0x39, 0x6a, 0x94, 0x29, 0x73, 0x8b, 0x39, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x83, 0x7b, + 0x31, 0x52, 0x62, 0x29, 0x5a, 0x52, 0x18, 0x5a, 0x52, 0x08, 0x41, 0x41, 0x18, 0x41, 0x39, 0x20, + 0x39, 0x41, 0x10, 0x31, 0x31, 0x10, 0x52, 0x5a, 0x18, 0x41, 0x52, 0x20, 0x4a, 0x52, 0x10, 0x41, + 0x39, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x52, 0x10, 0x4a, 0x4a, 0x10, 0x4a, 0x41, 0x10, 0x41, 0x31, + 0x18, 0x31, 0x39, 0x00, 0x41, 0x41, 0x08, 0x39, 0x29, 0x10, 0x41, 0x31, 0x18, 0x39, 0x39, 0x20, + 0x39, 0x31, 0x08, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x39, 0x31, 0x20, 0x18, 0x18, 0x08, 0x20, 0x18, 0x08, 0x4a, 0x52, 0x18, 0x52, 0x52, + 0x10, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x4a, 0x62, 0x29, 0x41, 0x41, 0x18, 0x4a, 0x52, 0x18, + 0x52, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x41, 0x41, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x10, 0x31, + 0x31, 0x18, 0x39, 0x29, 0x10, 0x31, 0x29, 0x18, 0x39, 0x39, 0x08, 0x29, 0x31, 0x00, 0x39, 0x41, + 0x08, 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x20, 0x5a, 0x5a, 0x29, 0x29, 0x29, 0x18, 0x29, 0x31, 0x10, 0x39, 0x5a, 0x18, 0x4a, + 0x62, 0x20, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x52, 0x73, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x29, 0x5a, 0x00, + 0x39, 0x52, 0x18, 0x4a, 0x52, 0x29, 0x4a, 0x5a, 0x29, 0x6a, 0x62, 0x31, 0x39, 0x4a, 0x08, 0x31, + 0x52, 0x08, 0x31, 0x62, 0x08, 0x4a, 0x62, 0x29, 0x41, 0x5a, 0x18, 0x39, 0x52, 0x18, 0x39, 0x5a, + 0x20, 0x7b, 0x9c, 0x41, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x73, 0x08, 0x39, 0x52, 0x20, + 0x31, 0x52, 0x10, 0x29, 0x4a, 0x00, 0x29, 0x39, 0x00, 0x52, 0x52, 0x10, 0x6a, 0x6a, 0x20, 0x6a, + 0x73, 0x20, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x10, 0x4a, 0x4a, 0x08, 0x4a, 0x4a, + 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, + 0x39, 0x39, 0x20, 0x29, 0x29, 0x10, 0x29, 0x39, 0x10, 0x29, 0x39, 0x18, 0x4a, 0x6a, 0x20, 0x62, + 0x8b, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x6a, 0x9c, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x31, 0x52, 0x73, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x9c, 0x29, 0x73, 0x9c, 0x39, 0x73, 0x8b, 0x39, 0x83, 0x7b, 0x31, 0x73, 0x8b, 0x39, 0x83, 0x7b, + 0x31, 0x83, 0x7b, 0x31, 0x52, 0x4a, 0x18, 0x41, 0x41, 0x20, 0x39, 0x29, 0x18, 0x39, 0x39, 0x20, + 0x31, 0x29, 0x18, 0x39, 0x31, 0x29, 0x39, 0x5a, 0x10, 0x41, 0x6a, 0x10, 0x5a, 0x5a, 0x08, 0x31, + 0x29, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x31, 0x29, 0x10, 0x41, 0x31, + 0x18, 0x29, 0x31, 0x08, 0x31, 0x39, 0x08, 0x39, 0x29, 0x18, 0x39, 0x29, 0x18, 0x52, 0x39, 0x20, + 0x39, 0x29, 0x10, 0x5a, 0x5a, 0x18, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x18, 0x18, 0x08, 0x18, 0x20, 0x08, 0x5a, 0x5a, 0x08, 0x62, 0x62, + 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x73, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x29, + 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x31, 0x29, 0x08, 0x41, 0x31, 0x18, 0x39, 0x39, 0x20, 0x29, + 0x31, 0x10, 0x29, 0x29, 0x10, 0x39, 0x39, 0x18, 0x41, 0x41, 0x10, 0x41, 0x41, 0x10, 0x41, 0x41, + 0x10, 0x41, 0x41, 0x20, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x20, 0x62, 0x62, 0x31, 0x4a, 0x41, 0x20, 0x18, 0x20, 0x08, 0x41, 0x41, 0x20, 0x4a, + 0x52, 0x20, 0x4a, 0x5a, 0x20, 0x4a, 0x62, 0x18, 0x41, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x52, 0x73, + 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x31, 0x62, 0x08, + 0x52, 0x7b, 0x10, 0x62, 0x62, 0x39, 0x4a, 0x4a, 0x29, 0x52, 0x52, 0x20, 0x41, 0x5a, 0x08, 0x41, + 0x52, 0x20, 0x29, 0x41, 0x00, 0x20, 0x4a, 0x08, 0x39, 0x52, 0x20, 0x41, 0x5a, 0x18, 0x39, 0x52, + 0x20, 0x6a, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x62, 0x10, + 0x29, 0x39, 0x10, 0x20, 0x4a, 0x08, 0x41, 0x5a, 0x18, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, + 0x73, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x18, 0x41, 0x41, 0x08, 0x39, 0x39, + 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x20, + 0x4a, 0x41, 0x20, 0x39, 0x39, 0x20, 0x31, 0x4a, 0x10, 0x4a, 0x73, 0x18, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, + 0x29, 0x62, 0x94, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x7b, 0x20, 0x73, 0xa4, 0x39, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x39, 0x52, 0x6a, 0x20, 0x41, 0x5a, 0x20, 0x62, + 0x94, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x73, 0x8b, + 0x39, 0x73, 0x8b, 0x39, 0x83, 0x7b, 0x31, 0x52, 0x4a, 0x18, 0x41, 0x39, 0x20, 0x39, 0x29, 0x18, + 0x29, 0x29, 0x18, 0x41, 0x41, 0x18, 0x39, 0x62, 0x08, 0x39, 0x52, 0x08, 0x31, 0x31, 0x10, 0x39, + 0x41, 0x10, 0x31, 0x31, 0x10, 0x29, 0x31, 0x08, 0x4a, 0x4a, 0x08, 0x39, 0x31, 0x08, 0x31, 0x31, + 0x00, 0x39, 0x41, 0x08, 0x39, 0x39, 0x10, 0x39, 0x29, 0x18, 0x41, 0x39, 0x08, 0x31, 0x29, 0x08, + 0x31, 0x20, 0x10, 0x4a, 0x4a, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x83, 0x31, 0x83, + 0x7b, 0x31, 0x52, 0x52, 0x29, 0x52, 0x52, 0x29, 0x52, 0x4a, 0x18, 0x52, 0x4a, 0x18, 0x6a, 0x73, + 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x39, 0x4a, 0x18, 0x31, 0x29, 0x18, 0x41, 0x41, 0x10, + 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x10, 0x39, 0x39, 0x10, 0x31, 0x31, 0x18, 0x41, + 0x41, 0x29, 0x31, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x41, 0x10, 0x41, 0x41, 0x18, 0x5a, 0x5a, + 0x20, 0x41, 0x39, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x29, 0x5a, 0x5a, 0x20, + 0x62, 0x5a, 0x29, 0x62, 0x62, 0x31, 0x52, 0x52, 0x20, 0x20, 0x18, 0x08, 0x41, 0x41, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x41, 0x5a, 0x18, 0x41, 0x5a, 0x20, 0x52, 0x7b, + 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x4a, 0x73, 0x18, 0x41, 0x6a, 0x08, + 0x39, 0x5a, 0x08, 0x39, 0x39, 0x18, 0x52, 0x4a, 0x20, 0x41, 0x41, 0x18, 0x31, 0x31, 0x10, 0x4a, + 0x41, 0x20, 0x31, 0x4a, 0x10, 0x29, 0x5a, 0x00, 0x41, 0x5a, 0x20, 0x39, 0x52, 0x18, 0x41, 0x5a, + 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x41, 0x73, 0x08, + 0x29, 0x39, 0x18, 0x31, 0x39, 0x18, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x5a, + 0x8b, 0x29, 0x62, 0x62, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x18, 0x39, 0x39, 0x10, 0x4a, 0x39, + 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x20, 0x31, 0x31, 0x10, + 0x18, 0x39, 0x00, 0x39, 0x52, 0x18, 0x41, 0x62, 0x18, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, + 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x31, 0x4a, 0x6a, 0x29, 0x41, 0x5a, 0x20, 0x41, + 0x5a, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x73, 0x83, 0x31, 0x83, 0x7b, + 0x31, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x73, 0x6a, 0x20, 0x4a, 0x52, 0x20, 0x39, 0x31, 0x18, + 0x29, 0x29, 0x08, 0x52, 0x52, 0x08, 0x29, 0x5a, 0x00, 0x41, 0x4a, 0x10, 0x29, 0x31, 0x08, 0x41, + 0x4a, 0x08, 0x31, 0x29, 0x10, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x31, + 0x08, 0x41, 0x41, 0x08, 0x41, 0x41, 0x18, 0x29, 0x31, 0x10, 0x39, 0x39, 0x18, 0x31, 0x20, 0x10, + 0x31, 0x31, 0x08, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x62, + 0x7b, 0x39, 0x73, 0x83, 0x31, 0x73, 0x6a, 0x20, 0x4a, 0x41, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x83, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20, 0x10, 0x41, 0x41, 0x08, + 0x41, 0x39, 0x18, 0x41, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, 0x39, 0x20, 0x39, + 0x39, 0x20, 0x52, 0x4a, 0x08, 0x41, 0x39, 0x18, 0x4a, 0x31, 0x18, 0x39, 0x39, 0x20, 0x52, 0x4a, + 0x18, 0x31, 0x39, 0x10, 0x31, 0x31, 0x18, 0x52, 0x4a, 0x18, 0x6a, 0x62, 0x31, 0x6a, 0x6a, 0x31, + 0x6a, 0x62, 0x31, 0x62, 0x62, 0x39, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, + 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x4a, 0x62, 0x20, 0x41, 0x4a, 0x08, + 0x52, 0x4a, 0x08, 0x41, 0x41, 0x20, 0x4a, 0x41, 0x18, 0x31, 0x31, 0x10, 0x31, 0x31, 0x20, 0x31, + 0x31, 0x08, 0x41, 0x6a, 0x10, 0x31, 0x5a, 0x08, 0x41, 0x5a, 0x18, 0x39, 0x5a, 0x20, 0x41, 0x5a, + 0x20, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, + 0x29, 0x39, 0x18, 0x39, 0x4a, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x62, 0x7b, 0x20, 0x7b, 0x7b, 0x31, 0x41, 0x39, 0x18, 0x39, 0x29, 0x10, 0x5a, 0x52, + 0x18, 0x41, 0x4a, 0x18, 0x4a, 0x39, 0x18, 0x4a, 0x39, 0x18, 0x41, 0x31, 0x18, 0x41, 0x4a, 0x18, + 0x29, 0x4a, 0x00, 0x41, 0x6a, 0x10, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, + 0x8b, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, + 0x29, 0x31, 0x41, 0x20, 0x41, 0x5a, 0x20, 0x5a, 0x83, 0x29, 0x83, 0xac, 0x4a, 0x62, 0x94, 0x29, + 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x41, + 0x52, 0x20, 0x52, 0x73, 0x20, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x83, 0x7b, + 0x31, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x18, + 0x39, 0x39, 0x18, 0x39, 0x41, 0x10, 0x31, 0x52, 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x08, 0x31, + 0x31, 0x08, 0x39, 0x29, 0x10, 0x31, 0x29, 0x08, 0x41, 0x4a, 0x10, 0x4a, 0x4a, 0x10, 0x41, 0x31, + 0x18, 0x39, 0x39, 0x20, 0x41, 0x41, 0x29, 0x39, 0x41, 0x18, 0x31, 0x31, 0x18, 0x31, 0x39, 0x18, + 0x39, 0x41, 0x08, 0x5a, 0x5a, 0x18, 0x41, 0x39, 0x10, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x62, + 0x83, 0x20, 0x6a, 0x94, 0x39, 0x73, 0x94, 0x41, 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x73, + 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x7b, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, + 0x41, 0x31, 0x18, 0x39, 0x29, 0x10, 0x41, 0x4a, 0x08, 0x4a, 0x52, 0x08, 0x4a, 0x4a, 0x20, 0x4a, + 0x4a, 0x29, 0x39, 0x41, 0x08, 0x39, 0x29, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x29, 0x52, 0x52, + 0x18, 0x31, 0x31, 0x08, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x5a, 0x5a, 0x29, 0x62, 0x62, 0x39, + 0x62, 0x62, 0x39, 0x62, 0x62, 0x39, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x52, + 0x4a, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x5a, 0x20, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x5a, 0x18, 0x31, 0x31, 0x10, + 0x31, 0x29, 0x18, 0x4a, 0x31, 0x18, 0x31, 0x31, 0x18, 0x31, 0x31, 0x10, 0x39, 0x29, 0x18, 0x31, + 0x29, 0x10, 0x31, 0x39, 0x08, 0x39, 0x5a, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, + 0x31, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x73, 0xa4, 0x39, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, + 0x52, 0x73, 0x20, 0x52, 0x73, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x5a, + 0x83, 0x29, 0x62, 0x83, 0x29, 0x83, 0x7b, 0x31, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x52, 0x52, + 0x18, 0x5a, 0x5a, 0x08, 0x52, 0x52, 0x29, 0x4a, 0x41, 0x29, 0x4a, 0x4a, 0x18, 0x41, 0x4a, 0x20, + 0x31, 0x52, 0x10, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x4a, 0x62, 0x20, 0x4a, 0x5a, 0x29, 0x4a, 0x6a, 0x20, 0x41, 0x52, + 0x20, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x20, 0x62, 0x94, 0x29, 0x73, 0x9c, 0x39, 0x73, 0x9c, 0x41, + 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x39, 0x5a, 0x83, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x41, 0x62, + 0x18, 0x5a, 0x7b, 0x20, 0x6a, 0x7b, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, + 0x39, 0x39, 0x10, 0x39, 0x39, 0x10, 0x29, 0x41, 0x00, 0x20, 0x20, 0x10, 0x31, 0x39, 0x08, 0x41, + 0x39, 0x08, 0x31, 0x29, 0x18, 0x41, 0x39, 0x08, 0x39, 0x31, 0x10, 0x41, 0x39, 0x10, 0x52, 0x39, + 0x20, 0x4a, 0x39, 0x18, 0x52, 0x52, 0x29, 0x41, 0x4a, 0x10, 0x39, 0x39, 0x10, 0x29, 0x29, 0x18, + 0x31, 0x39, 0x10, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, 0x52, 0x4a, 0x18, 0x6a, 0x73, 0x20, 0x5a, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x73, 0x9c, 0x41, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x18, 0x41, 0x41, 0x10, 0x52, 0x52, 0x08, 0x20, 0x29, 0x00, 0x39, + 0x39, 0x10, 0x31, 0x31, 0x08, 0x4a, 0x31, 0x18, 0x39, 0x39, 0x10, 0x39, 0x4a, 0x29, 0x31, 0x4a, + 0x18, 0x41, 0x41, 0x20, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x29, 0x29, 0x18, 0x52, 0x52, 0x20, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x39, 0x31, 0x18, 0x31, + 0x31, 0x10, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, + 0x20, 0x52, 0x5a, 0x18, 0x52, 0x7b, 0x29, 0x6a, 0x73, 0x20, 0x62, 0x5a, 0x29, 0x41, 0x39, 0x08, + 0x41, 0x31, 0x18, 0x31, 0x29, 0x18, 0x52, 0x52, 0x10, 0x31, 0x31, 0x08, 0x31, 0x31, 0x10, 0x39, + 0x31, 0x10, 0x39, 0x31, 0x10, 0x41, 0x62, 0x08, 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x7b, + 0x39, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x73, 0xa4, 0x39, 0x5a, 0x83, 0x29, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, + 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x4a, 0x5a, 0x18, 0x41, 0x4a, 0x18, 0x39, 0x39, + 0x10, 0x4a, 0x4a, 0x10, 0x41, 0x39, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x62, 0x29, 0x41, 0x4a, 0x20, + 0x31, 0x41, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x4a, + 0x62, 0x29, 0x52, 0x73, 0x29, 0x29, 0x39, 0x18, 0x29, 0x39, 0x10, 0x29, 0x41, 0x10, 0x4a, 0x73, + 0x18, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x83, 0xac, 0x4a, + 0x6a, 0x94, 0x31, 0x73, 0x9c, 0x39, 0x52, 0x73, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x62, + 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x52, 0x83, 0x18, 0x52, 0x5a, 0x29, 0x52, 0x52, + 0x29, 0x41, 0x5a, 0x20, 0x4a, 0x62, 0x20, 0x62, 0x62, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x62, 0x62, 0x20, 0x29, 0x39, 0x10, 0x20, 0x20, 0x10, 0x31, 0x39, 0x08, 0x29, 0x20, 0x08, 0x41, + 0x41, 0x10, 0x41, 0x31, 0x18, 0x4a, 0x41, 0x18, 0x31, 0x29, 0x10, 0x31, 0x29, 0x18, 0x4a, 0x41, + 0x29, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x52, 0x52, 0x10, 0x31, 0x39, 0x10, 0x39, 0x39, 0x18, + 0x5a, 0x5a, 0x20, 0x31, 0x39, 0x10, 0x41, 0x41, 0x08, 0x41, 0x4a, 0x10, 0x5a, 0x7b, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x6a, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x7b, 0x31, 0x7b, 0x9c, 0x41, 0x7b, 0x9c, 0x41, + 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x6a, 0x6a, 0x31, 0x29, 0x31, 0x08, 0x4a, 0x4a, 0x10, 0x4a, + 0x52, 0x10, 0x4a, 0x41, 0x10, 0x4a, 0x41, 0x20, 0x52, 0x5a, 0x29, 0x31, 0x39, 0x18, 0x39, 0x41, + 0x18, 0x41, 0x39, 0x20, 0x31, 0x31, 0x18, 0x29, 0x29, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, + 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x39, 0x39, 0x18, 0x31, 0x31, 0x10, 0x41, + 0x39, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x20, 0x4a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x41, 0x39, 0x10, + 0x31, 0x31, 0x20, 0x41, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x41, 0x10, 0x41, 0x41, 0x10, 0x31, + 0x29, 0x08, 0x39, 0x39, 0x10, 0x41, 0x52, 0x20, 0x4a, 0x6a, 0x20, 0x62, 0x94, 0x29, 0x7b, 0xa4, + 0x41, 0x6a, 0x94, 0x31, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x39, + 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, 0x7b, 0xa4, 0x41, 0x5a, + 0x83, 0x29, 0x6a, 0x8b, 0x29, 0x6a, 0x94, 0x31, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x5a, + 0x29, 0x39, 0x41, 0x18, 0x41, 0x4a, 0x18, 0x31, 0x4a, 0x20, 0x4a, 0x52, 0x29, 0x41, 0x5a, 0x29, + 0x4a, 0x62, 0x18, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x4a, 0x73, 0x18, 0x39, 0x52, 0x18, 0x29, 0x39, 0x18, 0x29, 0x39, 0x18, 0x5a, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, + 0x6a, 0x94, 0x29, 0x5a, 0x8b, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x6a, 0x20, 0x5a, 0x8b, 0x29, 0x62, + 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, 0x29, 0x41, 0x41, 0x29, 0x4a, 0x4a, 0x29, 0x41, 0x4a, + 0x18, 0x39, 0x52, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x20, 0x31, 0x31, 0x18, 0x5a, 0x52, 0x18, + 0x6a, 0x6a, 0x20, 0x4a, 0x52, 0x20, 0x31, 0x31, 0x18, 0x20, 0x20, 0x10, 0x29, 0x29, 0x18, 0x41, + 0x31, 0x18, 0x4a, 0x31, 0x18, 0x39, 0x39, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x18, 0x52, 0x4a, + 0x20, 0x31, 0x52, 0x10, 0x31, 0x5a, 0x10, 0x52, 0x5a, 0x29, 0x52, 0x5a, 0x18, 0x62, 0x62, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x41, 0x41, 0x08, 0x52, 0x52, 0x10, 0x52, 0x7b, 0x10, 0x6a, + 0x94, 0x39, 0x6a, 0x94, 0x31, 0x73, 0x9c, 0x41, 0x7b, 0xa4, 0x41, 0x5a, 0x83, 0x29, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x73, 0x9c, 0x41, 0x62, 0x83, 0x31, 0x62, 0x83, 0x29, 0x62, 0x83, 0x31, + 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x4a, 0x6a, 0x18, 0x52, 0x5a, 0x18, 0x41, + 0x52, 0x20, 0x41, 0x41, 0x18, 0x41, 0x4a, 0x20, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, + 0x18, 0x41, 0x41, 0x18, 0x41, 0x4a, 0x10, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x41, 0x41, 0x20, 0x52, 0x4a, 0x18, 0x5a, 0x5a, 0x20, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x31, + 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, 0x6a, 0x6a, 0x20, 0x39, 0x31, 0x18, + 0x31, 0x31, 0x08, 0x4a, 0x4a, 0x18, 0x31, 0x39, 0x10, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x20, 0x52, + 0x52, 0x20, 0x52, 0x5a, 0x18, 0x41, 0x5a, 0x29, 0x39, 0x52, 0x18, 0x52, 0x7b, 0x20, 0x5a, 0x83, + 0x29, 0x7b, 0xa4, 0x41, 0x62, 0x94, 0x29, 0x73, 0x9c, 0x31, 0x7b, 0xa4, 0x41, 0x6a, 0x94, 0x39, + 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x73, 0x9c, 0x41, 0x6a, 0x9c, 0x29, 0x73, 0x9c, 0x39, 0x62, + 0x83, 0x29, 0x73, 0xa4, 0x39, 0x52, 0x73, 0x31, 0x52, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x73, + 0x20, 0x39, 0x41, 0x10, 0x31, 0x52, 0x08, 0x20, 0x4a, 0x08, 0x31, 0x5a, 0x08, 0x39, 0x52, 0x18, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x41, + 0x62, 0x18, 0x31, 0x4a, 0x10, 0x31, 0x52, 0x10, 0x31, 0x41, 0x08, 0x29, 0x4a, 0x00, 0x5a, 0x83, + 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x20, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, + 0x62, 0x94, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x7b, 0x29, 0x41, 0x52, 0x20, 0x5a, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x4a, 0x73, 0x18, 0x31, 0x41, 0x18, 0x39, 0x62, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x10, 0x52, 0x52, 0x10, 0x5a, 0x5a, 0x08, 0x73, 0x6a, 0x20, 0x52, 0x52, 0x20, 0x31, 0x31, 0x20, + 0x41, 0x41, 0x20, 0x52, 0x52, 0x20, 0x31, 0x31, 0x18, 0x31, 0x31, 0x08, 0x29, 0x29, 0x10, 0x31, + 0x20, 0x10, 0x4a, 0x31, 0x18, 0x4a, 0x31, 0x18, 0x39, 0x29, 0x18, 0x41, 0x39, 0x20, 0x41, 0x4a, + 0x20, 0x31, 0x52, 0x10, 0x39, 0x62, 0x10, 0x52, 0x7b, 0x29, 0x62, 0x7b, 0x20, 0x6a, 0x7b, 0x29, + 0x62, 0x7b, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x5a, 0x83, 0x31, 0x62, + 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x7b, 0xa4, 0x41, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x7b, 0xa4, 0x41, 0x62, 0x8b, 0x31, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x39, + 0x5a, 0x20, 0x4a, 0x62, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x20, 0x4a, 0x4a, 0x18, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, + 0x4a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x62, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x52, 0x4a, 0x08, + 0x41, 0x39, 0x10, 0x4a, 0x41, 0x10, 0x4a, 0x41, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x62, 0x7b, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x73, 0x20, 0x62, 0x83, + 0x29, 0x5a, 0x8b, 0x29, 0x7b, 0xa4, 0x41, 0x6a, 0x9c, 0x29, 0x7b, 0x9c, 0x41, 0x6a, 0x9c, 0x29, + 0x62, 0x94, 0x31, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x73, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x6a, + 0x8b, 0x39, 0x52, 0x73, 0x31, 0x4a, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x7b, + 0x29, 0x41, 0x52, 0x20, 0x31, 0x41, 0x08, 0x29, 0x52, 0x08, 0x29, 0x4a, 0x00, 0x5a, 0x83, 0x29, + 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x4a, 0x73, 0x20, 0x39, 0x4a, 0x18, 0x31, + 0x5a, 0x08, 0x31, 0x5a, 0x08, 0x31, 0x39, 0x10, 0x52, 0x52, 0x20, 0x39, 0x5a, 0x08, 0x5a, 0x83, + 0x29, 0x62, 0x83, 0x20, 0x62, 0x94, 0x29, 0x52, 0x73, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x31, + 0x5a, 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x39, 0x52, 0x20, 0x4a, 0x6a, 0x20, 0x39, + 0x62, 0x08, 0x31, 0x62, 0x08, 0x39, 0x4a, 0x18, 0x4a, 0x62, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x4a, 0x39, 0x18, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x20, + 0x4a, 0x41, 0x20, 0x39, 0x39, 0x18, 0x31, 0x29, 0x18, 0x39, 0x31, 0x20, 0x31, 0x29, 0x08, 0x4a, + 0x31, 0x18, 0x4a, 0x31, 0x18, 0x31, 0x20, 0x10, 0x39, 0x29, 0x18, 0x39, 0x4a, 0x08, 0x31, 0x52, + 0x10, 0x39, 0x52, 0x20, 0x41, 0x52, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, + 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x7b, 0x9c, 0x41, 0x62, 0x8b, 0x31, 0x62, 0x8b, + 0x29, 0x7b, 0x9c, 0x41, 0x6a, 0x94, 0x41, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x62, 0x83, 0x31, + 0x73, 0x94, 0x41, 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, 0x4a, + 0x6a, 0x18, 0x41, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x29, 0x52, 0x4a, 0x18, 0x62, 0x62, 0x29, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x39, 0x31, 0x18, 0x52, 0x52, 0x18, 0x39, 0x39, 0x10, 0x4a, 0x41, 0x18, 0x52, 0x4a, + 0x18, 0x41, 0x41, 0x18, 0x62, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x20, 0x52, 0x4a, 0x18, + 0x41, 0x41, 0x10, 0x39, 0x31, 0x10, 0x4a, 0x4a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, + 0x20, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, + 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x31, 0x62, 0x8b, 0x29, 0x52, 0x7b, 0x29, 0x4a, + 0x6a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, + 0x29, 0x4a, 0x6a, 0x20, 0x39, 0x5a, 0x20, 0x20, 0x4a, 0x08, 0x4a, 0x4a, 0x29, 0x4a, 0x52, 0x29, + 0x52, 0x83, 0x18, 0x5a, 0x83, 0x29, 0x41, 0x5a, 0x20, 0x39, 0x4a, 0x18, 0x52, 0x5a, 0x29, 0x29, + 0x52, 0x08, 0x31, 0x5a, 0x10, 0x29, 0x31, 0x10, 0x4a, 0x52, 0x20, 0x31, 0x62, 0x08, 0x5a, 0x8b, + 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x29, + 0x52, 0x62, 0x29, 0x62, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x39, 0x52, 0x20, 0x41, 0x5a, 0x20, 0x41, + 0x52, 0x08, 0x39, 0x4a, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x31, 0x31, 0x08, 0x39, 0x39, 0x10, 0x41, 0x39, 0x18, + 0x41, 0x41, 0x10, 0x31, 0x39, 0x10, 0x39, 0x39, 0x18, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x39, + 0x31, 0x20, 0x4a, 0x31, 0x18, 0x39, 0x31, 0x18, 0x39, 0x41, 0x18, 0x31, 0x62, 0x08, 0x39, 0x4a, + 0x20, 0x4a, 0x52, 0x29, 0x41, 0x41, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x5a, + 0x8b, 0x29, 0x62, 0x83, 0x20, 0x73, 0x9c, 0x41, 0x6a, 0x94, 0x39, 0x7b, 0xa4, 0x41, 0x5a, 0x83, + 0x29, 0x7b, 0xa4, 0x41, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x7b, 0x29, 0x4a, 0x62, 0x20, 0x4a, 0x62, 0x29, 0x41, + 0x6a, 0x18, 0x4a, 0x5a, 0x18, 0x41, 0x41, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x41, 0x18, + 0x4a, 0x4a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x5a, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x5a, 0x5a, 0x18, 0x5a, 0x5a, 0x20, 0x4a, 0x4a, 0x20, + 0x39, 0x31, 0x08, 0x29, 0x31, 0x08, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x31, 0x62, 0x8b, 0x20, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, + 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, + 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x62, 0x94, 0x29, 0x62, 0x8b, 0x20, 0x52, 0x6a, 0x29, 0x5a, + 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, + 0x20, 0x41, 0x62, 0x18, 0x31, 0x41, 0x20, 0x18, 0x41, 0x00, 0x4a, 0x5a, 0x29, 0x62, 0x62, 0x39, + 0x52, 0x6a, 0x29, 0x31, 0x4a, 0x20, 0x41, 0x5a, 0x20, 0x52, 0x73, 0x29, 0x4a, 0x6a, 0x29, 0x31, + 0x31, 0x18, 0x39, 0x4a, 0x18, 0x29, 0x39, 0x10, 0x29, 0x39, 0x00, 0x29, 0x4a, 0x00, 0x5a, 0x83, + 0x29, 0x62, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x8b, 0x29, 0x52, 0x62, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x41, + 0x39, 0x18, 0x31, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x41, 0x4a, 0x08, 0x31, 0x29, 0x08, 0x31, 0x31, 0x10, + 0x31, 0x31, 0x20, 0x31, 0x31, 0x08, 0x31, 0x29, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x41, 0x18, 0x41, + 0x31, 0x18, 0x39, 0x29, 0x18, 0x4a, 0x39, 0x18, 0x39, 0x4a, 0x29, 0x39, 0x62, 0x10, 0x41, 0x4a, + 0x20, 0x4a, 0x4a, 0x29, 0x39, 0x52, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, + 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x73, 0x94, 0x41, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x7b, 0x29, 0x4a, + 0x6a, 0x20, 0x52, 0x62, 0x20, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x18, + 0x52, 0x52, 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x62, 0x62, 0x29, 0x5a, 0x5a, 0x20, 0x52, + 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x39, 0x31, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x41, 0x4a, 0x18, + 0x4a, 0x52, 0x08, 0x4a, 0x4a, 0x08, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x6a, + 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, + 0x29, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, 0x29, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x29, 0x5a, + 0x83, 0x20, 0x39, 0x52, 0x18, 0x5a, 0x83, 0x20, 0x62, 0x83, 0x29, 0x62, 0x7b, 0x20, 0x4a, 0x62, + 0x29, 0x4a, 0x73, 0x20, 0x31, 0x52, 0x10, 0x41, 0x62, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x6a, 0x29, + 0x41, 0x5a, 0x29, 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x20, 0x31, 0x4a, 0x18, 0x31, + 0x41, 0x18, 0x39, 0x4a, 0x08, 0x39, 0x4a, 0x08, 0x39, 0x4a, 0x18, 0x18, 0x39, 0x00, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x5a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x41, 0x41, 0x20, 0x39, 0x29, 0x10, 0x31, + 0x29, 0x10, 0x39, 0x39, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x08, 0x39, 0x41, 0x10, + 0x4a, 0x4a, 0x29, 0x62, 0x62, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x20, 0x52, + 0x39, 0x20, 0x4a, 0x39, 0x18, 0x4a, 0x4a, 0x29, 0x39, 0x52, 0x20, 0x52, 0x73, 0x31, 0x31, 0x52, + 0x10, 0x29, 0x4a, 0x10, 0x41, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x52, 0x73, 0x31, 0x62, 0x83, 0x29, + 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x62, 0x83, 0x20, 0x6a, 0x8b, 0x29, 0x73, 0x9c, 0x39, 0x6a, 0x94, 0x39, 0x62, 0x8b, + 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x94, 0x39, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x8b, 0x29, 0x52, 0x5a, 0x18, 0x52, 0x4a, 0x20, 0x41, 0x39, 0x18, 0x39, 0x31, 0x18, 0x20, 0x20, + 0x10, 0x31, 0x31, 0x10, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x62, 0x62, 0x29, 0x62, 0x62, 0x29, 0x62, 0x5a, 0x29, 0x5a, + 0x5a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x4a, 0x10, 0x4a, 0x4a, 0x20, 0x4a, + 0x5a, 0x20, 0x52, 0x73, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x83, 0x20, 0x62, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x29, 0x62, + 0x94, 0x29, 0x62, 0x8b, 0x29, 0x62, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x20, 0x52, 0x83, + 0x18, 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x20, 0x39, 0x52, 0x20, 0x29, + 0x4a, 0x00, 0x31, 0x52, 0x10, 0x29, 0x31, 0x10, 0x4a, 0x6a, 0x08, 0x31, 0x52, 0x10, 0x52, 0x7b, + 0x10, 0x52, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x62, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, + 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x20, 0x4a, 0x41, 0x18, 0x39, 0x31, 0x10, 0x20, + 0x18, 0x08, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x10, 0x31, 0x39, 0x08, 0x41, 0x41, 0x18, + 0x52, 0x52, 0x29, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x52, + 0x52, 0x29, 0x39, 0x52, 0x20, 0x41, 0x6a, 0x18, 0x39, 0x5a, 0x20, 0x41, 0x5a, 0x29, 0x41, 0x7b, + 0x08, 0x5a, 0x6a, 0x20, 0x4a, 0x52, 0x29, 0x39, 0x4a, 0x29, 0x4a, 0x41, 0x29, 0x5a, 0x83, 0x29, + 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x31, 0x6a, 0x94, 0x31, 0x6a, 0x94, + 0x31, 0x6a, 0x94, 0x31, 0x62, 0x8b, 0x29, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, + 0x52, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, 0x4a, + 0x6a, 0x29, 0x52, 0x62, 0x29, 0x62, 0x5a, 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x41, 0x29, 0x31, 0x31, + 0x18, 0x18, 0x18, 0x08, 0x20, 0x20, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x5a, 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x5a, 0x5a, 0x20, 0x5a, + 0x5a, 0x20, 0x62, 0x5a, 0x29, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x39, 0x39, 0x18, 0x39, 0x39, + 0x18, 0x29, 0x29, 0x10, 0x20, 0x20, 0x10, 0x39, 0x39, 0x18, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x18, + 0x52, 0x52, 0x18, 0x4a, 0x52, 0x10, 0x52, 0x52, 0x10, 0x31, 0x39, 0x08, 0x52, 0x4a, 0x20, 0x41, + 0x5a, 0x20, 0x41, 0x5a, 0x29, 0x4a, 0x5a, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x8b, 0x20, 0x6a, 0x8b, + 0x39, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x31, 0x5a, 0x83, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, + 0x94, 0x29, 0x73, 0x83, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x52, 0x73, + 0x29, 0x4a, 0x62, 0x29, 0x52, 0x73, 0x20, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x29, 0x5a, 0x7b, 0x20, 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x29, 0x31, 0x52, 0x10, 0x29, + 0x52, 0x08, 0x18, 0x41, 0x00, 0x31, 0x4a, 0x18, 0x29, 0x39, 0x10, 0x52, 0x6a, 0x20, 0x41, 0x7b, + 0x08, 0x52, 0x73, 0x20, 0x5a, 0x7b, 0x29, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x10, 0x52, 0x52, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, 0x08, 0x41, + 0x41, 0x08, 0x4a, 0x4a, 0x18, 0x39, 0x31, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, + 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x20, 0x4a, 0x5a, 0x18, 0x18, 0x39, 0x00, 0x39, 0x4a, 0x18, + 0x4a, 0x5a, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x41, + 0x62, 0x20, 0x5a, 0x83, 0x31, 0x41, 0x6a, 0x18, 0x39, 0x52, 0x20, 0x39, 0x52, 0x20, 0x4a, 0x62, + 0x29, 0x52, 0x62, 0x29, 0x4a, 0x52, 0x29, 0x31, 0x41, 0x20, 0x39, 0x39, 0x20, 0x41, 0x62, 0x20, + 0x41, 0x62, 0x18, 0x52, 0x83, 0x18, 0x5a, 0x7b, 0x29, 0x52, 0x73, 0x20, 0x52, 0x5a, 0x29, 0x5a, + 0x73, 0x20, 0x52, 0x6a, 0x29, 0x6a, 0x94, 0x31, 0x62, 0x94, 0x31, 0x6a, 0x8b, 0x29, 0x62, 0x94, + 0x31, 0x6a, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x31, 0x4a, 0x6a, 0x29, 0x5a, 0x7b, 0x29, + 0x4a, 0x62, 0x20, 0x39, 0x5a, 0x18, 0x41, 0x62, 0x18, 0x41, 0x62, 0x20, 0x4a, 0x62, 0x20, 0x4a, + 0x62, 0x20, 0x5a, 0x6a, 0x20, 0x41, 0x31, 0x18, 0x5a, 0x5a, 0x18, 0x41, 0x41, 0x08, 0x39, 0x39, + 0x08, 0x20, 0x20, 0x10, 0x41, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x62, 0x5a, 0x29, 0x62, + 0x62, 0x29, 0x5a, 0x5a, 0x29, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, + 0x18, 0x39, 0x39, 0x18, 0x29, 0x29, 0x10, 0x39, 0x31, 0x18, 0x41, 0x41, 0x18, 0x41, 0x31, 0x18, + 0x41, 0x39, 0x18, 0x39, 0x39, 0x08, 0x52, 0x5a, 0x08, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x20, 0x41, + 0x5a, 0x29, 0x41, 0x5a, 0x20, 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x7b, 0xa4, 0x41, 0x73, 0x9c, + 0x41, 0x73, 0x9c, 0x41, 0x6a, 0x94, 0x31, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, + 0x62, 0x7b, 0x39, 0x62, 0x8b, 0x31, 0x6a, 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x73, 0x8b, 0x39, 0x83, + 0x7b, 0x31, 0x73, 0x8b, 0x39, 0x83, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x73, 0x83, 0x31, 0x5a, 0x83, + 0x29, 0x5a, 0x83, 0x29, 0x52, 0x6a, 0x29, 0x4a, 0x6a, 0x20, 0x52, 0x6a, 0x29, 0x5a, 0x83, 0x20, + 0x5a, 0x7b, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x08, 0x29, 0x4a, 0x00, 0x31, + 0x5a, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x31, 0x39, 0x10, 0x41, 0x62, 0x08, 0x39, 0x73, + 0x08, 0x39, 0x62, 0x10, 0x5a, 0x83, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x4a, 0x41, 0x20, 0x39, 0x39, 0x18, 0x31, 0x39, 0x08, 0x31, + 0x39, 0x08, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x31, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x62, 0x18, 0x31, 0x52, 0x10, 0x31, 0x41, 0x20, + 0x52, 0x52, 0x29, 0x5a, 0x83, 0x29, 0x52, 0x73, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x52, + 0x6a, 0x29, 0x4a, 0x62, 0x29, 0x4a, 0x62, 0x29, 0x41, 0x5a, 0x29, 0x41, 0x5a, 0x29, 0x41, 0x62, + 0x20, 0x39, 0x5a, 0x20, 0x4a, 0x6a, 0x29, 0x39, 0x5a, 0x20, 0x41, 0x4a, 0x20, 0x31, 0x52, 0x10, + 0x18, 0x41, 0x00, 0x31, 0x4a, 0x10, 0x39, 0x39, 0x10, 0x31, 0x39, 0x08, 0x39, 0x41, 0x18, 0x39, + 0x41, 0x20, 0x41, 0x6a, 0x08, 0x73, 0x94, 0x41, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x6a, 0x8b, + 0x29, 0x62, 0x94, 0x31, 0x6a, 0x94, 0x39, 0x73, 0x94, 0x41, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, + 0x41, 0x62, 0x20, 0x41, 0x5a, 0x20, 0x41, 0x62, 0x18, 0x39, 0x5a, 0x18, 0x31, 0x52, 0x10, 0x41, + 0x4a, 0x08, 0x39, 0x31, 0x20, 0x41, 0x39, 0x20, 0x31, 0x31, 0x10, 0x39, 0x41, 0x08, 0x52, 0x52, + 0x10, 0x20, 0x20, 0x10, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x20, 0x31, 0x31, 0x10, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x5a, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x31, 0x29, + 0x18, 0x31, 0x29, 0x10, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x39, 0x29, 0x10, 0x31, 0x29, 0x10, + 0x41, 0x39, 0x20, 0x31, 0x29, 0x18, 0x31, 0x29, 0x10, 0x39, 0x31, 0x10, 0x39, 0x4a, 0x18, 0x4a, + 0x5a, 0x20, 0x4a, 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x7b, 0xa4, 0x41, 0x6a, 0x8b, 0x29, 0x5a, 0x83, + 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x31, + 0x62, 0x7b, 0x39, 0x62, 0x83, 0x31, 0x6a, 0x8b, 0x29, 0x7b, 0x7b, 0x31, 0x7b, 0x9c, 0x41, 0x83, + 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x73, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x73, 0x8b, 0x39, 0x6a, 0x94, + 0x29, 0x6a, 0x9c, 0x29, 0x62, 0x94, 0x29, 0x5a, 0x83, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x20, + 0x41, 0x62, 0x20, 0x39, 0x52, 0x20, 0x39, 0x41, 0x20, 0x62, 0x62, 0x31, 0x41, 0x62, 0x18, 0x31, + 0x52, 0x10, 0x39, 0x41, 0x20, 0x4a, 0x52, 0x29, 0x31, 0x4a, 0x00, 0x18, 0x41, 0x00, 0x4a, 0x6a, + 0x20, 0x29, 0x52, 0x08, 0x39, 0x41, 0x08, 0x6a, 0x6a, 0x10, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x5a, 0x52, 0x20, 0x41, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x08, 0x39, + 0x39, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x41, 0x41, 0x18, 0x5a, 0x52, + 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x5a, 0x18, 0x31, 0x5a, 0x10, + 0x39, 0x4a, 0x29, 0x5a, 0x7b, 0x29, 0x52, 0x7b, 0x20, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x29, 0x5a, + 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x4a, 0x6a, 0x20, 0x39, 0x5a, 0x20, 0x39, 0x5a, + 0x20, 0x29, 0x41, 0x10, 0x18, 0x41, 0x00, 0x29, 0x4a, 0x10, 0x41, 0x52, 0x20, 0x39, 0x4a, 0x29, + 0x29, 0x4a, 0x00, 0x29, 0x52, 0x08, 0x39, 0x52, 0x08, 0x31, 0x31, 0x08, 0x41, 0x41, 0x10, 0x39, + 0x39, 0x10, 0x52, 0x5a, 0x08, 0x73, 0x73, 0x20, 0x6a, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x6a, 0x94, + 0x31, 0x62, 0x8b, 0x31, 0x6a, 0x94, 0x31, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x29, + 0x5a, 0x73, 0x20, 0x31, 0x41, 0x20, 0x18, 0x31, 0x08, 0x20, 0x29, 0x00, 0x18, 0x20, 0x08, 0x41, + 0x41, 0x10, 0x41, 0x39, 0x20, 0x39, 0x39, 0x18, 0x41, 0x39, 0x20, 0x4a, 0x4a, 0x18, 0x4a, 0x39, + 0x18, 0x39, 0x39, 0x18, 0x52, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x29, 0x20, 0x08, 0x41, + 0x41, 0x18, 0x41, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x39, 0x39, 0x08, 0x29, 0x29, 0x10, 0x39, 0x29, + 0x10, 0x39, 0x39, 0x18, 0x41, 0x4a, 0x08, 0x39, 0x39, 0x18, 0x31, 0x31, 0x18, 0x31, 0x29, 0x08, + 0x39, 0x31, 0x20, 0x39, 0x31, 0x18, 0x31, 0x31, 0x08, 0x31, 0x29, 0x08, 0x20, 0x29, 0x00, 0x39, + 0x31, 0x18, 0x6a, 0x6a, 0x20, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x5a, 0x8b, 0x29, 0x5a, 0x83, + 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x20, 0x62, 0x7b, 0x39, 0x62, 0x73, 0x20, + 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x7b, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x83, + 0x7b, 0x31, 0x83, 0x7b, 0x31, 0x73, 0x8b, 0x39, 0x7b, 0x9c, 0x41, 0x7b, 0xa4, 0x41, 0x6a, 0x94, + 0x29, 0x6a, 0x94, 0x29, 0x62, 0x94, 0x29, 0x52, 0x73, 0x20, 0x4a, 0x6a, 0x29, 0x4a, 0x62, 0x20, + 0x41, 0x52, 0x20, 0x4a, 0x5a, 0x29, 0x41, 0x52, 0x20, 0x39, 0x4a, 0x20, 0x52, 0x62, 0x29, 0x4a, + 0x4a, 0x29, 0x39, 0x41, 0x20, 0x62, 0x5a, 0x29, 0x39, 0x52, 0x18, 0x31, 0x52, 0x10, 0x31, 0x4a, + 0x20, 0x31, 0x39, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x4a, 0x20, 0x62, 0x62, 0x20, 0x62, 0x62, 0x20, + 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x39, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, + 0x20, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x41, 0x29, + 0x41, 0x4a, 0x20, 0x52, 0x62, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x52, 0x7b, 0x20, 0x41, 0x62, 0x20, 0x41, 0x62, + 0x20, 0x29, 0x41, 0x10, 0x31, 0x41, 0x20, 0x31, 0x5a, 0x10, 0x29, 0x52, 0x08, 0x31, 0x5a, 0x10, + 0x31, 0x62, 0x08, 0x4a, 0x5a, 0x08, 0x62, 0x5a, 0x20, 0x4a, 0x39, 0x18, 0x31, 0x29, 0x08, 0x41, + 0x41, 0x29, 0x62, 0x5a, 0x29, 0x62, 0x6a, 0x20, 0x7b, 0x7b, 0x31, 0x6a, 0x8b, 0x29, 0x62, 0x8b, + 0x31, 0x6a, 0x94, 0x31, 0x6a, 0x8b, 0x29, 0x62, 0x8b, 0x29, 0x73, 0x9c, 0x41, 0x5a, 0x8b, 0x29, + 0x5a, 0x7b, 0x29, 0x4a, 0x62, 0x29, 0x29, 0x39, 0x18, 0x31, 0x4a, 0x18, 0x52, 0x5a, 0x08, 0x4a, + 0x52, 0x10, 0x5a, 0x5a, 0x08, 0x52, 0x52, 0x10, 0x41, 0x4a, 0x10, 0x41, 0x39, 0x20, 0x52, 0x39, + 0x20, 0x41, 0x41, 0x18, 0x4a, 0x6a, 0x18, 0x52, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x52, 0x52, 0x18, 0x20, 0x20, 0x08, 0x18, + 0x18, 0x08, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x31, 0x29, 0x10, 0x39, 0x39, + 0x10, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x41, 0x39, 0x20, 0x39, 0x39, 0x20, 0x39, 0x39, 0x10, + 0x41, 0x31, 0x18, 0x39, 0x31, 0x29, 0x29, 0x20, 0x10, 0x29, 0x20, 0x10, 0x41, 0x41, 0x10, 0x6a, + 0x6a, 0x31, 0x7b, 0x7b, 0x29, 0x73, 0x6a, 0x20, 0x62, 0x7b, 0x20, 0x62, 0x7b, 0x20, 0x6a, 0x73, + 0x20, 0x6a, 0x73, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x6a, 0x31, 0x6a, 0x62, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x6a, 0x8b, 0x39, 0x62, 0x7b, 0x39, 0x6a, 0x8b, 0x39, 0x73, 0x8b, 0x39, 0x6a, + 0x94, 0x29, 0x6a, 0x9c, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x6a, 0x94, 0x29, 0x62, 0x8b, + 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x7b, 0x20, 0x52, 0x73, 0x29, 0x52, 0x73, 0x29, + 0x4a, 0x6a, 0x20, 0x39, 0x4a, 0x29, 0x39, 0x4a, 0x18, 0x41, 0x6a, 0x08, 0x41, 0x5a, 0x08, 0x39, + 0x4a, 0x20, 0x31, 0x41, 0x08, 0x39, 0x4a, 0x29, 0x39, 0x5a, 0x20, 0x52, 0x73, 0x20, 0x41, 0x6a, + 0x10, 0x31, 0x31, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, + 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, 0x31, 0x31, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x39, 0x31, 0x18, 0x4a, 0x41, + 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x20, + 0x41, 0x4a, 0x20, 0x4a, 0x52, 0x29, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x52, 0x7b, 0x20, 0x4a, 0x52, 0x29, 0x39, 0x4a, + 0x20, 0x29, 0x39, 0x18, 0x39, 0x41, 0x20, 0x31, 0x41, 0x20, 0x29, 0x41, 0x10, 0x29, 0x5a, 0x00, + 0x18, 0x41, 0x00, 0x4a, 0x4a, 0x18, 0x62, 0x5a, 0x18, 0x4a, 0x52, 0x18, 0x31, 0x20, 0x10, 0x41, + 0x39, 0x20, 0x4a, 0x4a, 0x29, 0x5a, 0x5a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x8b, + 0x29, 0x62, 0x8b, 0x31, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x29, 0x62, 0x8b, 0x31, 0x62, 0x8b, 0x29, + 0x5a, 0x83, 0x20, 0x39, 0x5a, 0x10, 0x52, 0x52, 0x29, 0x29, 0x29, 0x18, 0x4a, 0x41, 0x29, 0x4a, + 0x41, 0x18, 0x5a, 0x5a, 0x08, 0x4a, 0x4a, 0x10, 0x39, 0x31, 0x10, 0x52, 0x4a, 0x08, 0x41, 0x41, + 0x08, 0x41, 0x41, 0x18, 0x52, 0x5a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x62, 0x18, 0x52, 0x5a, 0x18, + 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x6a, 0x6a, 0x31, 0x29, 0x29, 0x08, 0x31, + 0x31, 0x10, 0x41, 0x39, 0x18, 0x41, 0x41, 0x20, 0x39, 0x39, 0x08, 0x41, 0x4a, 0x08, 0x31, 0x29, + 0x08, 0x4a, 0x4a, 0x10, 0x31, 0x31, 0x10, 0x39, 0x39, 0x18, 0x39, 0x39, 0x10, 0x39, 0x31, 0x10, + 0x52, 0x39, 0x20, 0x4a, 0x31, 0x18, 0x4a, 0x31, 0x18, 0x39, 0x29, 0x18, 0x6a, 0x62, 0x31, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x29, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, + 0x73, 0x83, 0x31, 0x73, 0x9c, 0x41, 0x73, 0x94, 0x41, 0x62, 0x7b, 0x39, 0x62, 0x83, 0x31, 0x6a, + 0x9c, 0x29, 0x73, 0x94, 0x41, 0x73, 0x94, 0x41, 0x6a, 0x7b, 0x29, 0x6a, 0x73, 0x20, 0x6a, 0x73, + 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x5a, 0x5a, 0x18, 0x39, 0x39, 0x18, 0x52, 0x52, 0x29, 0x52, 0x52, 0x20, 0x41, + 0x39, 0x20, 0x39, 0x39, 0x18, 0x31, 0x31, 0x10, 0x4a, 0x4a, 0x18, 0x62, 0x62, 0x18, 0x52, 0x52, + 0x20, 0x29, 0x29, 0x10, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x4a, 0x4a, 0x20, + 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x39, 0x41, 0x18, 0x39, 0x39, 0x18, 0x5a, 0x52, 0x18, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x20, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x5a, + 0x20, 0x6a, 0x6a, 0x31, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, + 0x41, 0x4a, 0x20, 0x41, 0x62, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, + 0x83, 0x20, 0x62, 0x83, 0x29, 0x6a, 0x7b, 0x29, 0x62, 0x5a, 0x18, 0x52, 0x52, 0x20, 0x73, 0x73, + 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x52, 0x18, 0x29, 0x31, 0x10, 0x29, 0x31, 0x10, 0x29, 0x31, 0x10, + 0x31, 0x39, 0x08, 0x39, 0x4a, 0x08, 0x39, 0x4a, 0x18, 0x41, 0x52, 0x08, 0x39, 0x39, 0x10, 0x31, + 0x31, 0x20, 0x31, 0x29, 0x18, 0x41, 0x41, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x73, + 0x20, 0x73, 0x83, 0x31, 0x6a, 0x8b, 0x29, 0x6a, 0x94, 0x39, 0x62, 0x8b, 0x29, 0x62, 0x94, 0x31, + 0x5a, 0x83, 0x20, 0x41, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x18, 0x20, 0x08, 0x39, 0x39, 0x20, 0x4a, + 0x4a, 0x29, 0x52, 0x4a, 0x08, 0x39, 0x29, 0x18, 0x4a, 0x31, 0x18, 0x52, 0x4a, 0x18, 0x29, 0x29, + 0x08, 0x39, 0x39, 0x18, 0x4a, 0x52, 0x18, 0x4a, 0x6a, 0x18, 0x4a, 0x6a, 0x18, 0x41, 0x6a, 0x18, + 0x52, 0x5a, 0x18, 0x41, 0x41, 0x18, 0x52, 0x52, 0x18, 0x73, 0x6a, 0x20, 0x62, 0x5a, 0x20, 0x20, + 0x29, 0x00, 0x31, 0x31, 0x18, 0x31, 0x39, 0x08, 0x39, 0x41, 0x08, 0x39, 0x39, 0x10, 0x4a, 0x31, + 0x18, 0x39, 0x29, 0x18, 0x39, 0x39, 0x18, 0x39, 0x39, 0x08, 0x39, 0x41, 0x08, 0x31, 0x29, 0x10, + 0x41, 0x31, 0x18, 0x39, 0x31, 0x29, 0x39, 0x31, 0x29, 0x39, 0x31, 0x29, 0x6a, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, + 0x20, 0x6a, 0x62, 0x31, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, + 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x31, 0x73, + 0x73, 0x20, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x6a, 0x6a, 0x10, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, + 0x73, 0x6a, 0x20, 0x62, 0x62, 0x20, 0x52, 0x52, 0x29, 0x4a, 0x41, 0x29, 0x4a, 0x41, 0x29, 0x39, + 0x39, 0x20, 0x39, 0x31, 0x20, 0x5a, 0x52, 0x08, 0x6a, 0x6a, 0x10, 0x62, 0x6a, 0x08, 0x39, 0x41, + 0x18, 0x29, 0x29, 0x10, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x39, 0x31, 0x18, 0x4a, 0x4a, 0x20, 0x52, + 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x73, 0x6a, 0x20, 0x62, 0x6a, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x62, 0x20, 0x5a, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x29, 0x6a, + 0x7b, 0x29, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x62, 0x62, 0x29, 0x6a, 0x6a, + 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x20, 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x31, 0x31, 0x00, + 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x41, 0x41, 0x20, 0x39, 0x41, 0x18, 0x39, 0x41, 0x08, 0x31, + 0x29, 0x10, 0x31, 0x29, 0x10, 0x29, 0x31, 0x10, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x31, 0x73, 0x6a, + 0x20, 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x73, 0x94, 0x41, 0x6a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, + 0x62, 0x83, 0x29, 0x39, 0x5a, 0x20, 0x31, 0x4a, 0x20, 0x29, 0x29, 0x18, 0x29, 0x31, 0x10, 0x31, + 0x31, 0x18, 0x31, 0x31, 0x18, 0x4a, 0x31, 0x18, 0x4a, 0x39, 0x18, 0x41, 0x41, 0x29, 0x39, 0x39, + 0x08, 0x39, 0x39, 0x10, 0x4a, 0x4a, 0x08, 0x41, 0x6a, 0x18, 0x4a, 0x6a, 0x20, 0x4a, 0x6a, 0x18, + 0x41, 0x5a, 0x20, 0x4a, 0x52, 0x18, 0x5a, 0x52, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x39, + 0x41, 0x20, 0x31, 0x31, 0x10, 0x39, 0x39, 0x10, 0x31, 0x29, 0x10, 0x39, 0x31, 0x18, 0x39, 0x20, + 0x10, 0x31, 0x31, 0x20, 0x31, 0x31, 0x18, 0x31, 0x31, 0x08, 0x31, 0x29, 0x08, 0x4a, 0x31, 0x18, + 0x52, 0x4a, 0x18, 0x39, 0x31, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, 0x10, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, + 0x20, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x73, + 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x29, 0x52, 0x4a, 0x20, 0x4a, 0x4a, 0x29, 0x41, 0x39, 0x20, 0x52, + 0x52, 0x20, 0x39, 0x31, 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x4a, 0x08, 0x4a, 0x52, 0x18, 0x29, 0x29, + 0x10, 0x39, 0x39, 0x18, 0x4a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x52, + 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x5a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x73, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x6a, + 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x5a, 0x5a, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x73, 0x73, 0x20, 0x62, 0x62, 0x20, 0x4a, 0x4a, 0x10, 0x41, 0x31, 0x18, 0x39, 0x39, 0x00, + 0x39, 0x41, 0x08, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x31, 0x41, 0x08, 0x52, 0x5a, 0x08, 0x4a, + 0x52, 0x10, 0x39, 0x39, 0x20, 0x39, 0x39, 0x20, 0x41, 0x4a, 0x08, 0x73, 0x6a, 0x20, 0x6a, 0x6a, + 0x31, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x73, 0x8b, 0x39, 0x62, 0x8b, 0x29, + 0x5a, 0x8b, 0x29, 0x5a, 0x73, 0x20, 0x31, 0x41, 0x08, 0x52, 0x52, 0x18, 0x39, 0x41, 0x08, 0x29, + 0x29, 0x10, 0x31, 0x29, 0x18, 0x39, 0x29, 0x18, 0x39, 0x31, 0x10, 0x4a, 0x41, 0x10, 0x62, 0x62, + 0x08, 0x39, 0x41, 0x08, 0x31, 0x39, 0x10, 0x41, 0x73, 0x08, 0x41, 0x52, 0x20, 0x39, 0x52, 0x20, + 0x41, 0x62, 0x18, 0x4a, 0x6a, 0x18, 0x5a, 0x73, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x5a, + 0x5a, 0x18, 0x41, 0x41, 0x29, 0x39, 0x31, 0x20, 0x39, 0x29, 0x18, 0x39, 0x29, 0x18, 0x39, 0x31, + 0x29, 0x39, 0x29, 0x18, 0x39, 0x29, 0x18, 0x39, 0x31, 0x10, 0x31, 0x29, 0x10, 0x39, 0x31, 0x10, + 0x41, 0x41, 0x18, 0x41, 0x39, 0x20, 0x29, 0x29, 0x10, 0x29, 0x29, 0x10, 0x52, 0x52, 0x18, 0x52, + 0x52, 0x20, 0x41, 0x41, 0x18, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x41, 0x41, + 0x20, 0x5a, 0x5a, 0x29, 0x41, 0x41, 0x20, 0x39, 0x39, 0x08, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x52, 0x52, 0x29, 0x52, + 0x4a, 0x20, 0x62, 0x62, 0x39, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, + 0x20, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, 0x20, 0x52, 0x52, 0x20, 0x52, 0x52, 0x20, 0x5a, 0x5a, 0x20, + 0x52, 0x52, 0x20, 0x52, 0x4a, 0x20, 0x39, 0x31, 0x29, 0x39, 0x31, 0x29, 0x39, 0x39, 0x20, 0x31, + 0x31, 0x08, 0x4a, 0x4a, 0x10, 0x31, 0x39, 0x08, 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x29, 0x20, + 0x10, 0x4a, 0x52, 0x08, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x39, 0x31, 0x18, 0x29, 0x29, 0x10, 0x29, + 0x29, 0x10, 0x52, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x5a, 0x52, 0x18, 0x52, 0x52, + 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x5a, 0x20, 0x4a, 0x5a, 0x18, + 0x4a, 0x6a, 0x18, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, + 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x20, 0x5a, 0x5a, 0x18, 0x4a, 0x41, 0x08, 0x31, 0x20, 0x10, 0x39, 0x39, 0x08, + 0x39, 0x39, 0x08, 0x31, 0x39, 0x08, 0x39, 0x41, 0x08, 0x29, 0x31, 0x08, 0x41, 0x41, 0x08, 0x62, + 0x62, 0x08, 0x39, 0x41, 0x08, 0x31, 0x39, 0x18, 0x39, 0x39, 0x20, 0x62, 0x62, 0x18, 0x6a, 0x6a, + 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x4a, 0x4a, 0x29, 0x62, 0x83, 0x29, 0x62, 0x83, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x29, 0x29, 0x4a, 0x00, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x18, 0x39, + 0x39, 0x20, 0x39, 0x39, 0x20, 0x31, 0x29, 0x10, 0x41, 0x41, 0x08, 0x39, 0x41, 0x08, 0x41, 0x41, + 0x10, 0x41, 0x52, 0x08, 0x41, 0x6a, 0x08, 0x29, 0x4a, 0x10, 0x31, 0x4a, 0x18, 0x4a, 0x62, 0x18, + 0x4a, 0x73, 0x20, 0x52, 0x7b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, + 0x83, 0x29, 0x31, 0x41, 0x18, 0x39, 0x31, 0x18, 0x39, 0x29, 0x18, 0x31, 0x29, 0x18, 0x4a, 0x31, + 0x18, 0x39, 0x31, 0x20, 0x31, 0x29, 0x18, 0x41, 0x31, 0x18, 0x39, 0x29, 0x18, 0x41, 0x39, 0x10, + 0x4a, 0x4a, 0x18, 0x39, 0x39, 0x10, 0x39, 0x39, 0x18, 0x31, 0x31, 0x10, 0x31, 0x31, 0x18, 0x39, + 0x39, 0x10, 0x39, 0x39, 0x18, 0x39, 0x39, 0x18, 0x4a, 0x4a, 0x20, 0x4a, 0x4a, 0x20, 0x62, 0x5a, + 0x20, 0x52, 0x5a, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x5a, + 0x5a, 0x29, 0x4a, 0x4a, 0x29, 0x52, 0x52, 0x20, 0x62, 0x62, 0x29, 0x5a, 0x5a, 0x20, 0x5a, 0x5a, + 0x29, 0x4a, 0x4a, 0x10, 0x39, 0x41, 0x20, 0x4a, 0x4a, 0x20, 0x39, 0x41, 0x20, 0x39, 0x31, 0x10, + 0x31, 0x31, 0x10, 0x52, 0x52, 0x18, 0x62, 0x62, 0x29, 0x62, 0x62, 0x20, 0x39, 0x41, 0x10, 0x31, + 0x31, 0x08, 0x31, 0x39, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x08, 0x39, 0x39, 0x10, 0x31, 0x39, + 0x08, 0x52, 0x52, 0x10, 0x4a, 0x4a, 0x18, 0x41, 0x39, 0x18, 0x52, 0x52, 0x20, 0x52, 0x52, 0x18, + 0x5a, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x39, 0x39, 0x18, 0x29, 0x29, 0x10, 0x39, 0x39, 0x18, 0x29, + 0x29, 0x10, 0x31, 0x29, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x41, 0x39, 0x18, 0x39, 0x31, + 0x18, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x73, 0x20, 0x62, 0x83, 0x29, 0x52, 0x73, 0x20, + 0x4a, 0x6a, 0x18, 0x5a, 0x83, 0x20, 0x6a, 0x7b, 0x29, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, + 0x31, 0x6a, 0x6a, 0x20, 0x4a, 0x4a, 0x08, 0x41, 0x41, 0x20, 0x4a, 0x41, 0x08, 0x52, 0x5a, 0x08, + 0x52, 0x52, 0x10, 0x41, 0x41, 0x18, 0x4a, 0x4a, 0x08, 0x39, 0x41, 0x08, 0x52, 0x52, 0x10, 0x62, + 0x6a, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x41, 0x08, 0x39, 0x41, 0x10, 0x31, 0x31, 0x10, 0x52, 0x5a, + 0x18, 0x4a, 0x4a, 0x20, 0x52, 0x52, 0x29, 0x4a, 0x52, 0x29, 0x52, 0x7b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x4a, 0x62, 0x20, 0x29, 0x4a, 0x10, 0x29, 0x31, 0x10, 0x39, 0x41, 0x18, 0x31, + 0x31, 0x20, 0x29, 0x31, 0x10, 0x31, 0x31, 0x18, 0x4a, 0x52, 0x10, 0x31, 0x41, 0x08, 0x31, 0x6a, + 0x08, 0x18, 0x41, 0x00, 0x41, 0x73, 0x08, 0x4a, 0x6a, 0x20, 0x39, 0x4a, 0x18, 0x31, 0x41, 0x08, + 0x5a, 0x7b, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, + 0x8b, 0x29, 0x39, 0x62, 0x10, 0x41, 0x4a, 0x10, 0x52, 0x39, 0x20, 0x4a, 0x39, 0x18, 0x41, 0x39, + 0x20, 0x52, 0x4a, 0x18, 0x39, 0x31, 0x18, 0x39, 0x31, 0x18, 0x31, 0x39, 0x08, 0x41, 0x52, 0x18, + 0x52, 0x62, 0x20, 0x4a, 0x5a, 0x20, 0x52, 0x62, 0x20, 0x4a, 0x4a, 0x18, 0x31, 0x31, 0x20, 0x39, + 0x39, 0x18, 0x41, 0x39, 0x20, 0x52, 0x52, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x4a, 0x52, + 0x10, 0x5a, 0x5a, 0x08, 0x5a, 0x5a, 0x08, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, + 0x6a, 0x73, 0x20, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x7b, 0x7b, 0x31, 0x73, 0x73, 0x20, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x52, 0x52, 0x18, 0x39, 0x39, 0x18, 0x31, 0x31, 0x18, 0x29, 0x31, + 0x10, 0x41, 0x41, 0x20, 0x41, 0x41, 0x18, 0x41, 0x41, 0x20, 0x41, 0x41, 0x10, 0x41, 0x39, 0x08, + 0x6a, 0x62, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x62, 0x62, 0x18, 0x41, + 0x4a, 0x08, 0x41, 0x41, 0x08, 0x31, 0x39, 0x08, 0x4a, 0x4a, 0x08, 0x29, 0x31, 0x10, 0x41, 0x4a, + 0x08, 0x41, 0x41, 0x10, 0x4a, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, + 0x4a, 0x41, 0x18, 0x39, 0x41, 0x18, 0x41, 0x41, 0x18, 0x39, 0x39, 0x10, 0x39, 0x31, 0x08, 0x41, + 0x41, 0x20, 0x29, 0x29, 0x10, 0x31, 0x31, 0x18, 0x41, 0x41, 0x10, 0x41, 0x31, 0x18, 0x4a, 0x4a, + 0x18, 0x41, 0x4a, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x20, + 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x29, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x10, 0x52, 0x52, 0x20, 0x4a, 0x52, 0x18, 0x62, 0x62, 0x18, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x52, 0x62, 0x20, 0x41, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x4a, + 0x4a, 0x10, 0x52, 0x62, 0x10, 0x41, 0x52, 0x08, 0x4a, 0x5a, 0x18, 0x52, 0x5a, 0x29, 0x31, 0x41, + 0x20, 0x39, 0x39, 0x20, 0x39, 0x5a, 0x20, 0x31, 0x4a, 0x20, 0x41, 0x6a, 0x10, 0x31, 0x5a, 0x08, + 0x20, 0x4a, 0x08, 0x4a, 0x4a, 0x29, 0x39, 0x41, 0x20, 0x39, 0x4a, 0x29, 0x31, 0x39, 0x18, 0x31, + 0x31, 0x20, 0x31, 0x31, 0x20, 0x29, 0x31, 0x10, 0x39, 0x41, 0x18, 0x31, 0x5a, 0x08, 0x39, 0x5a, + 0x08, 0x41, 0x73, 0x08, 0x62, 0x83, 0x31, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x29, 0x52, 0x62, 0x29, + 0x5a, 0x7b, 0x29, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x5a, 0x83, 0x20, 0x41, 0x52, 0x18, 0x62, 0x5a, 0x29, 0x5a, 0x52, 0x20, 0x5a, 0x5a, + 0x18, 0x4a, 0x52, 0x10, 0x52, 0x39, 0x20, 0x41, 0x41, 0x20, 0x31, 0x41, 0x18, 0x52, 0x7b, 0x20, + 0x5a, 0x8b, 0x20, 0x4a, 0x62, 0x20, 0x52, 0x7b, 0x20, 0x39, 0x39, 0x08, 0x31, 0x31, 0x20, 0x31, + 0x31, 0x10, 0x31, 0x31, 0x10, 0x5a, 0x5a, 0x08, 0x52, 0x52, 0x18, 0x52, 0x62, 0x10, 0x41, 0x41, + 0x08, 0x41, 0x4a, 0x10, 0x41, 0x41, 0x08, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, + 0x73, 0x73, 0x20, 0x83, 0x7b, 0x31, 0x7b, 0x7b, 0x29, 0x73, 0x73, 0x20, 0x62, 0x62, 0x29, 0x52, + 0x4a, 0x18, 0x41, 0x4a, 0x18, 0x4a, 0x4a, 0x20, 0x31, 0x31, 0x10, 0x4a, 0x52, 0x10, 0x39, 0x39, + 0x18, 0x41, 0x4a, 0x08, 0x31, 0x39, 0x10, 0x41, 0x41, 0x10, 0x29, 0x39, 0x10, 0x5a, 0x5a, 0x18, + 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x41, + 0x4a, 0x10, 0x52, 0x52, 0x08, 0x18, 0x31, 0x08, 0x39, 0x39, 0x08, 0x39, 0x39, 0x08, 0x31, 0x31, + 0x10, 0x31, 0x31, 0x10, 0x52, 0x52, 0x18, 0x52, 0x4a, 0x18, 0x4a, 0x4a, 0x18, 0x41, 0x41, 0x18, + 0x41, 0x41, 0x18, 0x5a, 0x5a, 0x08, 0x39, 0x39, 0x10, 0x41, 0x39, 0x08, 0x4a, 0x41, 0x20, 0x29, + 0x29, 0x18, 0x39, 0x31, 0x29, 0x39, 0x29, 0x10, 0x31, 0x31, 0x10, 0x39, 0x29, 0x10, 0x4a, 0x52, + 0x18, 0x39, 0x62, 0x10, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x83, 0x29, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x5a, 0x5a, + 0x20, 0x52, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x4a, 0x4a, 0x29, 0x4a, 0x4a, 0x20, 0x31, + 0x39, 0x08, 0x41, 0x41, 0x20, 0x41, 0x5a, 0x29, 0x31, 0x39, 0x18, 0x39, 0x52, 0x20, 0x29, 0x4a, + 0x10, 0x31, 0x4a, 0x20, 0x39, 0x52, 0x20, 0x41, 0x5a, 0x20, 0x31, 0x62, 0x08, 0x39, 0x52, 0x20, + 0x29, 0x4a, 0x10, 0x31, 0x41, 0x20, 0x29, 0x52, 0x08, 0x29, 0x41, 0x10, 0x31, 0x52, 0x10, 0x39, + 0x41, 0x20, 0x39, 0x41, 0x20, 0x29, 0x41, 0x10, 0x39, 0x62, 0x08, 0x31, 0x41, 0x08, 0x39, 0x41, + 0x18, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, 0x83, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x7b, 0x29, + 0x52, 0x6a, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x62, + 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x7b, 0x29, 0x52, 0x5a, 0x18, 0x52, 0x62, 0x20, 0x52, 0x7b, + 0x10, 0x4a, 0x6a, 0x08, 0x4a, 0x52, 0x18, 0x4a, 0x52, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x5a, 0x83, 0x29, 0x41, 0x62, 0x18, 0x52, 0x5a, 0x18, 0x31, 0x31, 0x08, 0x39, 0x39, 0x18, 0x31, + 0x31, 0x08, 0x39, 0x39, 0x08, 0x4a, 0x4a, 0x29, 0x41, 0x41, 0x29, 0x41, 0x41, 0x10, 0x41, 0x4a, + 0x08, 0x5a, 0x52, 0x08, 0x4a, 0x41, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, + 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x7b, 0x7b, 0x29, 0x41, 0x31, 0x18, 0x4a, 0x39, 0x18, 0x4a, + 0x4a, 0x29, 0x41, 0x41, 0x18, 0x41, 0x41, 0x10, 0x39, 0x39, 0x08, 0x4a, 0x52, 0x10, 0x41, 0x41, + 0x18, 0x41, 0x41, 0x08, 0x31, 0x39, 0x08, 0x29, 0x4a, 0x00, 0x39, 0x4a, 0x08, 0x6a, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x4a, + 0x52, 0x08, 0x52, 0x52, 0x08, 0x31, 0x31, 0x08, 0x4a, 0x4a, 0x08, 0x4a, 0x52, 0x08, 0x39, 0x41, + 0x10, 0x29, 0x31, 0x08, 0x41, 0x41, 0x10, 0x52, 0x52, 0x18, 0x52, 0x52, 0x18, 0x52, 0x52, 0x20, + 0x4a, 0x4a, 0x10, 0x52, 0x5a, 0x08, 0x39, 0x39, 0x10, 0x4a, 0x41, 0x10, 0x39, 0x39, 0x18, 0x4a, + 0x4a, 0x10, 0x4a, 0x41, 0x18, 0x41, 0x31, 0x18, 0x39, 0x39, 0x08, 0x31, 0x29, 0x10, 0x4a, 0x52, + 0x10, 0x41, 0x6a, 0x08, 0x39, 0x73, 0x08, 0x5a, 0x7b, 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, + 0x5a, 0x8b, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x39, 0x31, 0x20, 0x31, 0x29, 0x18, 0x4a, + 0x4a, 0x29, 0x41, 0x52, 0x08, 0x29, 0x4a, 0x10, 0x31, 0x52, 0x10, 0x4a, 0x5a, 0x29, 0x39, 0x5a, + 0x20, 0x39, 0x5a, 0x18, 0x4a, 0x52, 0x29, 0x4a, 0x6a, 0x20, 0x4a, 0x5a, 0x29, 0x29, 0x52, 0x08, + 0x18, 0x41, 0x00, 0x29, 0x39, 0x18, 0x39, 0x5a, 0x18, 0x41, 0x6a, 0x08, 0x20, 0x4a, 0x08, 0x31, + 0x41, 0x18, 0x52, 0x4a, 0x08, 0x41, 0x4a, 0x18, 0x62, 0x5a, 0x20, 0x6a, 0x62, 0x20, 0x5a, 0x6a, + 0x20, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x4a, 0x73, 0x18, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, + 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x8b, 0x20, 0x52, 0x73, + 0x20, 0x5a, 0x5a, 0x18, 0x6a, 0x62, 0x20, 0x5a, 0x7b, 0x20, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x41, 0x62, 0x20, 0x4a, 0x4a, 0x29, 0x4a, 0x52, 0x08, 0x52, 0x52, 0x10, 0x52, + 0x52, 0x08, 0x39, 0x41, 0x10, 0x31, 0x39, 0x18, 0x29, 0x31, 0x10, 0x31, 0x39, 0x18, 0x39, 0x39, + 0x18, 0x31, 0x31, 0x08, 0x5a, 0x5a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x62, 0x31, 0x41, 0x41, 0x08, 0x4a, 0x4a, 0x20, 0x4a, + 0x4a, 0x10, 0x62, 0x62, 0x20, 0x6a, 0x62, 0x20, 0x41, 0x41, 0x10, 0x31, 0x29, 0x10, 0x29, 0x31, + 0x08, 0x29, 0x31, 0x10, 0x29, 0x41, 0x10, 0x18, 0x41, 0x00, 0x31, 0x4a, 0x10, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x31, + 0x31, 0x08, 0x39, 0x41, 0x08, 0x41, 0x4a, 0x08, 0x41, 0x4a, 0x10, 0x31, 0x31, 0x10, 0x41, 0x41, + 0x08, 0x31, 0x31, 0x08, 0x39, 0x31, 0x08, 0x39, 0x39, 0x08, 0x41, 0x39, 0x10, 0x4a, 0x4a, 0x08, + 0x39, 0x41, 0x08, 0x52, 0x52, 0x10, 0x41, 0x41, 0x18, 0x39, 0x41, 0x10, 0x39, 0x39, 0x10, 0x4a, + 0x4a, 0x08, 0x39, 0x31, 0x08, 0x39, 0x29, 0x10, 0x39, 0x31, 0x08, 0x39, 0x29, 0x10, 0x41, 0x39, + 0x10, 0x41, 0x7b, 0x08, 0x31, 0x62, 0x08, 0x52, 0x7b, 0x10, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x29, + 0x62, 0x83, 0x29, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, + 0x20, 0x6a, 0x73, 0x20, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x52, 0x5a, 0x18, 0x31, 0x31, 0x10, 0x31, 0x39, 0x10, 0x4a, + 0x52, 0x10, 0x41, 0x5a, 0x08, 0x20, 0x4a, 0x08, 0x5a, 0x5a, 0x29, 0x52, 0x5a, 0x29, 0x52, 0x5a, + 0x29, 0x52, 0x62, 0x29, 0x62, 0x62, 0x39, 0x41, 0x62, 0x20, 0x52, 0x83, 0x18, 0x39, 0x73, 0x08, + 0x31, 0x62, 0x08, 0x29, 0x41, 0x10, 0x31, 0x52, 0x10, 0x20, 0x4a, 0x08, 0x20, 0x4a, 0x08, 0x29, + 0x39, 0x00, 0x29, 0x41, 0x10, 0x41, 0x52, 0x08, 0x62, 0x62, 0x20, 0x52, 0x5a, 0x08, 0x52, 0x83, + 0x18, 0x62, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, 0x83, 0x29, 0x62, 0x8b, 0x20, + 0x5a, 0x83, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, 0x20, 0x5a, + 0x83, 0x29, 0x62, 0x8b, 0x29, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x29, 0x5a, 0x8b, + 0x20, 0x41, 0x5a, 0x08, 0x52, 0x7b, 0x29, 0x62, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x5a, 0x83, 0x20, + 0x62, 0x8b, 0x29, 0x31, 0x41, 0x08, 0x31, 0x39, 0x10, 0x41, 0x41, 0x18, 0x31, 0x39, 0x10, 0x52, + 0x5a, 0x18, 0x41, 0x41, 0x18, 0x41, 0x41, 0x18, 0x29, 0x31, 0x08, 0x31, 0x31, 0x18, 0x39, 0x41, + 0x10, 0x31, 0x29, 0x10, 0x5a, 0x52, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, + 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x10, 0x52, 0x52, 0x18, 0x4a, 0x41, 0x18, 0x73, + 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x4a, 0x52, 0x18, 0x29, 0x52, + 0x08, 0x41, 0x52, 0x08, 0x4a, 0x41, 0x18, 0x18, 0x41, 0x00, 0x41, 0x62, 0x08, 0x6a, 0x73, 0x20, + 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, 0x62, 0x62, 0x18, 0x4a, + 0x52, 0x08, 0x29, 0x31, 0x08, 0x4a, 0x41, 0x10, 0x39, 0x39, 0x08, 0x39, 0x39, 0x08, 0x31, 0x39, + 0x08, 0x39, 0x39, 0x08, 0x31, 0x39, 0x10, 0x4a, 0x4a, 0x08, 0x31, 0x39, 0x08, 0x39, 0x41, 0x08, + 0x39, 0x41, 0x10, 0x41, 0x41, 0x08, 0x31, 0x39, 0x18, 0x31, 0x39, 0x18, 0x39, 0x41, 0x08, 0x4a, + 0x4a, 0x08, 0x39, 0x41, 0x08, 0x29, 0x31, 0x08, 0x31, 0x31, 0x08, 0x39, 0x39, 0x08, 0x41, 0x52, + 0x08, 0x31, 0x62, 0x08, 0x52, 0x83, 0x18, 0x5a, 0x83, 0x20, 0x5a, 0x8b, 0x29, 0x62, 0x83, 0x20, + 0x62, 0x83, 0x29, 0x6a, 0x6a, 0x31, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, + 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, 0x20, 0x6a, 0x6a, 0x31, 0x73, 0x6a, + 0x20, 0x6a, 0x6a, 0x31, 0x6a, 0x6a, 0x20, 0x73, 0x73, 0x20, 0x6a, 0x6a, 0x20, 0x73, 0x6a, 0x20, +}; diff --git a/thirdparty/carve-1.4.0/examples/texture_example.cpp b/thirdparty/carve-1.4.0/examples/texture_example.cpp new file mode 100644 index 00000000..43e92c30 --- /dev/null +++ b/thirdparty/carve-1.4.0/examples/texture_example.cpp @@ -0,0 +1,354 @@ +// Begin License: +// Copyright (C) 2006-2008 Tobias Sargeant (tobias.sargeant@gmail.com). +// All rights reserved. +// +// This file is part of the Carve CSG Library (http://carve-csg.com/) +// +// This file may be used under the terms of the GNU General Public +// License version 2.0 as published by the Free Software Foundation +// and appearing in the file LICENSE.GPL2 included in the packaging of +// this file. +// +// This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE. +// End: + + +#if defined(HAVE_CONFIG_H) +# include +#endif + +#include +#include + +#include + +#include "carve_texture.h" +#include "brick_texture.h" +#include "leaf_texture.h" + +#include "scene.hpp" + +#if defined(__APPLE__) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include + +#if defined(__GNUC__) +#define __stdcall +#endif + +#if defined(GLU_TESS_CALLBACK_VARARGS) + typedef GLvoid (__stdcall *GLUTessCallback)(...); +#else + typedef void (__stdcall *GLUTessCallback)(); +#endif + +typedef carve::poly::Polyhedron poly_t; + +carve::geom3d::Vector g_translation; +double g_scale; + +static inline void glVertex(const carve::geom3d::Vector &v) { + glVertex3f(g_scale * (v.x + g_translation.x), + g_scale * (v.y + g_translation.y), + g_scale * (v.z + g_translation.z)); +} + +struct tex_t { + float u; + float v; + + tex_t() : u(0.0f), v(0.0f) { } + tex_t(float _u, float _v) : u(_u), v(_v) { } +}; + +tex_t operator*(double s, const tex_t &t) { + return tex_t(t.u * s, t.v * s); +} + +tex_t &operator+=(tex_t &t1, const tex_t &t2) { + t1.u += t2.u; + t1.v += t2.v; + return t1; +} + +struct vt_t { + double x, y, z; + float u, v; +}; + +void __stdcall tess_vertex(vt_t *v, bool *is_textured) { + if (*is_textured) { + glTexCoord2f(v->u, v->v); + } + glVertex3d(v->x, v->y, v->z); +} + +void drawTexturedPolyhedron(poly_t *poly, + carve::interpolate::FaceVertexAttr &fv_tex, + carve::interpolate::FaceAttr &f_tex_num) { + glEnable(GL_TEXTURE_2D); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + GLUtesselator *tess = gluNewTess(); + + gluTessCallback(tess, GLU_TESS_BEGIN, (GLUTessCallback)glBegin); + gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (GLUTessCallback)tess_vertex); + gluTessCallback(tess, GLU_TESS_END, (GLUTessCallback)glEnd); + + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + poly_t::face_t &f = poly->faces[i]; + std::vector vc(f.nVertices()); + + bool textured = true; + for (size_t j = 0; j < f.nVertices(); ++j) { + vc[j].x = g_scale * (f.vertex(j)->v.x + g_translation.x); + vc[j].y = g_scale * (f.vertex(j)->v.y + g_translation.y); + vc[j].z = g_scale * (f.vertex(j)->v.z + g_translation.z); + + if (fv_tex.hasAttribute(&f, j)) { + tex_t t = fv_tex.getAttribute(&f, j); + vc[j].u = t.u; + vc[j].v = t.v; + } else { + textured = false; + } + } + + if (textured) { + GLuint tex_num = f_tex_num.getAttribute(&f, 0); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, tex_num); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + } else { + glColor4f(0.5f, 0.6f, 0.7f, 1.0f); + } + + glNormal3dv(f.plane_eqn.N.v); + + gluTessBeginPolygon(tess, (void *)&textured); + gluTessBeginContour(tess); + + for (size_t j = 0; j != vc.size(); ++j) { + gluTessVertex(tess, (GLdouble *)&vc[j], (GLvoid *)&vc[j]); + } + + gluTessEndContour(tess); + gluTessEndPolygon(tess); + + } + + gluDeleteTess(tess); + + glDisable(GL_TEXTURE_2D); +} + +void drawWireframePolyhedron(poly_t *poly) { + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glDisable(GL_LIGHTING); + + for (size_t i = 0, l = poly->faces.size(); i != l; ++i) { + poly_t::face_t &f = poly->faces[i]; + + glBegin(GL_LINE_LOOP); + for (size_t j = 0; j < f.nVertices(); ++j) { + double x = g_scale * (f.vertex(j)->v.x + g_translation.x); + double y = g_scale * (f.vertex(j)->v.y + g_translation.y); + double z = g_scale * (f.vertex(j)->v.z + g_translation.z); + glVertex3d(x, y, z); + } + glEnd(); + } + + glEnable(GL_LIGHTING); +} + +poly_t *texturedCube( + carve::interpolate::FaceVertexAttr &fv_tex, + carve::interpolate::FaceAttr &f_tex_num, + GLuint tex, + const carve::math::Matrix &transform = carve::math::Matrix::IDENT()) { + + std::vector v; + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, +1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, +1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, -1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, -1.0, +1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, +1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, +1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(-1.0, -1.0, -1.0))); + v.push_back(poly_t::vertex_t(transform * carve::geom::VECTOR(+1.0, -1.0, -1.0))); + + std::vector faces; + + faces.reserve(6); + faces.push_back(poly_t::face_t(&v[0], &v[1], &v[2], &v[3])); + faces.push_back(poly_t::face_t(&v[7], &v[6], &v[5], &v[4])); + faces.push_back(poly_t::face_t(&v[0], &v[4], &v[5], &v[1])); + faces.push_back(poly_t::face_t(&v[1], &v[5], &v[6], &v[2])); + faces.push_back(poly_t::face_t(&v[2], &v[6], &v[7], &v[3])); + faces.push_back(poly_t::face_t(&v[3], &v[7], &v[4], &v[0])); + + for (size_t i = 0; i < 6; ++i) { + fv_tex.setAttribute(&faces[i], 0, tex_t(0.0f, 1.0f)); + fv_tex.setAttribute(&faces[i], 1, tex_t(1.0f, 1.0f)); + fv_tex.setAttribute(&faces[i], 2, tex_t(1.0f, 0.0f)); + fv_tex.setAttribute(&faces[i], 3, tex_t(0.0f, 0.0f)); + f_tex_num.setAttribute(&faces[i], tex); + } + + poly_t *poly = new poly_t(faces); + + return poly; +} + +struct TestScene : public Scene { + GLuint draw_list_base; + std::vector draw_flags; + + virtual bool key(unsigned char k, int x, int y) { + const char *t; + static const char *l = "1234567890!@#$%^&*()"; + t = strchr(l, k); + if (t != NULL) { + int layer = t - l; + if (layer < draw_flags.size()) { + draw_flags[layer] = !draw_flags[layer]; + } + } + return true; + } + + virtual GLvoid draw() { + for (size_t i = 0; i < draw_flags.size(); ++i) { + if (draw_flags[i]) glCallList(draw_list_base + i); + } + } + + TestScene(int argc, char **argv, int n_dlist) : Scene(argc, argv) { + draw_list_base = glGenLists(n_dlist); + + draw_flags.resize(n_dlist, false); + } + + virtual ~TestScene() { + glDeleteLists(draw_list_base, draw_flags.size()); + } +}; + +GLuint initTexture(GLuint w, GLuint h, const unsigned char *data) { + GLuint tex; + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGB, + w, + h, + 0, + GL_RGB, + GL_UNSIGNED_BYTE, + data); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + return tex; +} + +void destroyTexture(GLuint tex) { + glDeleteTextures(1, &tex); +} + +int main(int argc, char **argv) { + TestScene *scene = new TestScene(argc, argv, 2); + + GLuint tex_1 = initTexture(128, 128, carve_texture); + GLuint tex_2 = initTexture(128, 128, brick_texture); + GLuint tex_3 = initTexture(128, 128, leaf_texture); + + g_scale = 10.0; + + carve::interpolate::FaceVertexAttr fv_tex; + carve::interpolate::FaceAttr f_tex_num; + poly_t *base = NULL; + + bool b = true; + for (int x = -10; x <= +10; x += 5) { + for (int y = -10; y <= +10; y += 5) { + for (int z = -10; z <= +10; z += 5) { + double rot = x * .17 + y * .06 + z * .09; + poly_t *r = texturedCube(fv_tex, f_tex_num, b ? tex_2 : tex_3, + carve::math::Matrix::TRANS(x/2.5, y/2.5, z/2.5) * + carve::math::Matrix::ROT(rot, 1,2,3)); + b = !b; + if (base) { + poly_t *temp = base; + carve::csg::CSG csg; + fv_tex.installHooks(csg); + f_tex_num.installHooks(csg); + + base = csg.compute(temp, r, carve::csg::CSG::UNION); + delete temp; + delete r; + } else { + base = r; + } + } + } + } + + poly_t *r1 = texturedCube(fv_tex, f_tex_num, tex_1, + carve::math::Matrix::TRANS(0,0,4) * + carve::math::Matrix::SCALE(4,4,4)); + + poly_t *r2 = texturedCube(fv_tex, f_tex_num, tex_1, + carve::math::Matrix::TRANS(0,0,5) * + carve::math::Matrix::SCALE(2, 2, 2)); + + carve::csg::CSG csg; + fv_tex.installHooks(csg); + f_tex_num.installHooks(csg); + + poly_t *r3 = csg.compute(base, r1, carve::csg::CSG::INTERSECTION); + poly_t *r4 = csg.compute(r3, r2, carve::csg::CSG::UNION); + + glNewList(scene->draw_list_base, GL_COMPILE); + drawTexturedPolyhedron(r4, fv_tex, f_tex_num); + glEndList(); + + glNewList(scene->draw_list_base+1, GL_COMPILE); + drawWireframePolyhedron(r3); + glEndList(); + + scene->draw_flags[0] = true; + scene->draw_flags[1] = true; + + scene->run(); + + destroyTexture(tex_1); + destroyTexture(tex_2); + destroyTexture(tex_3); + + delete scene; + + return 0; +} diff --git a/thirdparty/carve-1.4.0/external/GLEW/CMakeLists.txt b/thirdparty/carve-1.4.0/external/GLEW/CMakeLists.txt new file mode 100644 index 00000000..32f3ae51 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.6) + +project(glew) + +find_package(OpenGL) + +include_directories("${glew_SOURCE_DIR}/include") + +add_library(glew STATIC src/glew.c) + +add_definitions(-DGLEW_STATIC) + +include_directories(${OPENGL_INCLUDE_DIR}) + +target_link_libraries(glew ${OPENGL_LIBRARIES}) diff --git a/thirdparty/carve-1.4.0/external/GLEW/Makefile.am b/thirdparty/carve-1.4.0/external/GLEW/Makefile.am new file mode 100644 index 00000000..dfee1eab --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/Makefile.am @@ -0,0 +1,8 @@ +if with_GUI + noinst_LTLIBRARIES = libglew.la + noinst_HEADERS = include/GL/glew.h + libglew_la_CPPFLAGS=@CPPFLAGS@ -Iinclude + libglew_la_CFLAGS=@CFLAGS@ @GL_CFLAGS@ + libglew_la_LIBADD= + libglew_la_SOURCES=src/glew.c +endif diff --git a/thirdparty/carve-1.4.0/external/GLEW/include/GL/glew.h b/thirdparty/carve-1.4.0/external/GLEW/include/GL/glew.h new file mode 100644 index 00000000..2c9e06aa --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/include/GL/glew.h @@ -0,0 +1,10783 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * Mesa 3-D graphics library + * Version: 7.0 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* +** Copyright (c) 2007 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __glew_h__ +#define __glew_h__ +#define __GLEW_H__ + +#if defined(__gl_h_) || defined(__GL_H__) +#error gl.h included before glew.h +#endif +#if defined(__glext_h_) || defined(__GLEXT_H_) +#error glext.h included before glew.h +#endif +#if defined(__gl_ATI_h_) +#error glATI.h included before glew.h +#endif + +#define __gl_h_ +#define __GL_H__ +#define __glext_h_ +#define __GLEXT_H_ +#define __gl_ATI_h_ + +#if defined(_WIN32) + +/* + * GLEW does not include to avoid name space pollution. + * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t + * defined properly. + */ +/* */ +#ifndef APIENTRY +#define GLEW_APIENTRY_DEFINED +# if defined(__MINGW32__) +# define APIENTRY __stdcall +# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +#endif +#ifndef GLAPI +# if defined(__MINGW32__) +# define GLAPI extern +# endif +#endif +/* */ +#ifndef CALLBACK +#define GLEW_CALLBACK_DEFINED +# if defined(__MINGW32__) +# define CALLBACK __attribute__ ((__stdcall__)) +# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +#endif +/* and */ +#ifndef WINGDIAPI +#define GLEW_WINGDIAPI_DEFINED +#define WINGDIAPI __declspec(dllimport) +#endif +/* */ +#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +#endif +/* */ +#if !defined(_W64) +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif +#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) +# ifdef _WIN64 +typedef __int64 ptrdiff_t; +# else +typedef _W64 int ptrdiff_t; +# endif +# define _PTRDIFF_T_DEFINED +# define _PTRDIFF_T_ +#endif + +#ifndef GLAPI +# if defined(__MINGW32__) +# define GLAPI extern +# else +# define GLAPI WINGDIAPI +# endif +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY APIENTRY +#endif + +/* + * GLEW_STATIC needs to be set when using the static version. + * GLEW_BUILD is set when building the DLL version. + */ +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# ifdef GLEW_BUILD +# define GLEWAPI extern __declspec(dllexport) +# else +# define GLEWAPI extern __declspec(dllimport) +# endif +#endif + +#else /* _UNIX */ + +/* + * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO + * C. On my system, this amounts to _3 lines_ of included code, all of + * them pretty much harmless. If you know of a way of detecting 32 vs + * 64 _targets_ at compile time you are free to replace this with + * something that's portable. For now, _this_ is the portable solution. + * (mem, 2004-01-04) + */ + +#include + +#define GLEW_APIENTRY_DEFINED +#define APIENTRY +#define GLEWAPI extern + +/* */ +#ifndef GLAPI +#define GLAPI extern +#endif +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#endif /* _WIN32 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ + +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 + +#if defined(__APPLE__) +typedef unsigned long GLenum; +typedef unsigned long GLbitfield; +typedef unsigned long GLuint; +typedef long GLint; +typedef long GLsizei; +#else +typedef unsigned int GLenum; +typedef unsigned int GLbitfield; +typedef unsigned int GLuint; +typedef int GLint; +typedef int GLsizei; +#endif +typedef unsigned char GLboolean; +typedef signed char GLbyte; +typedef short GLshort; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned long GLulong; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void GLvoid; +#if defined(_MSC_VER) && _MSC_VER < 1400 +typedef __int64 GLint64EXT; +typedef unsigned __int64 GLuint64EXT; +#else +typedef signed long long GLint64EXT; +typedef unsigned long long GLuint64EXT; +#endif + +#define GL_ACCUM 0x0100 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000fffff +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_TRUE 1 +#define GL_FALSE 0 +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A +#define GL_NONE 0 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LIST_MODE 0x0B30 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_SHADE_MODEL 0x0B54 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_FOG 0x0B60 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_INDEX_BITS 0x0D51 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_COLOR_INDEX 0x1900 +#define GL_STENCIL_INDEX 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_BITMAP 0x1A00 +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV 0x2300 +#define GL_EYE_LINEAR 0x2400 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_SPHERE_MAP 0x2402 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_PLANE 0x2502 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_CLAMP 0x2900 +#define GL_REPEAT 0x2901 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_LOGIC_OP GL_INDEX_LOGIC_OP +#define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 + +GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); +GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); +GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void GLAPIENTRY glArrayElement (GLint i); +GLAPI void GLAPIENTRY glBegin (GLenum mode); +GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); +GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); +GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GLAPI void GLAPIENTRY glCallList (GLuint list); +GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); +GLAPI void GLAPIENTRY glClear (GLbitfield mask); +GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); +GLAPI void GLAPIENTRY glClearIndex (GLfloat c); +GLAPI void GLAPIENTRY glClearStencil (GLint s); +GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); +GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); +GLAPI void GLAPIENTRY glColor3iv (const GLint *v); +GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); +GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void GLAPIENTRY glColor4iv (const GLint *v); +GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); +GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); +GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); +GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); +GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glCullFace (GLenum mode); +GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); +GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GLAPI void GLAPIENTRY glDepthFunc (GLenum func); +GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); +GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); +GLAPI void GLAPIENTRY glDisable (GLenum cap); +GLAPI void GLAPIENTRY glDisableClientState (GLenum array); +GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); +GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); +GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); +GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); +GLAPI void GLAPIENTRY glEnable (GLenum cap); +GLAPI void GLAPIENTRY glEnableClientState (GLenum array); +GLAPI void GLAPIENTRY glEnd (void); +GLAPI void GLAPIENTRY glEndList (void); +GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); +GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); +GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); +GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); +GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); +GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); +GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); +GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); +GLAPI void GLAPIENTRY glFinish (void); +GLAPI void GLAPIENTRY glFlush (void); +GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glFrontFace (GLenum mode); +GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); +GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); +GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); +GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); +GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); +GLAPI GLenum GLAPIENTRY glGetError (void); +GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); +GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); +GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); +GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); +GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); +GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); +GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); +GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); +GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); +GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); +GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); +GLAPI void GLAPIENTRY glIndexMask (GLuint mask); +GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glIndexd (GLdouble c); +GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); +GLAPI void GLAPIENTRY glIndexf (GLfloat c); +GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); +GLAPI void GLAPIENTRY glIndexi (GLint c); +GLAPI void GLAPIENTRY glIndexiv (const GLint *c); +GLAPI void GLAPIENTRY glIndexs (GLshort c); +GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); +GLAPI void GLAPIENTRY glIndexub (GLubyte c); +GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); +GLAPI void GLAPIENTRY glInitNames (void); +GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); +GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); +GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); +GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); +GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); +GLAPI void GLAPIENTRY glLineWidth (GLfloat width); +GLAPI void GLAPIENTRY glListBase (GLuint base); +GLAPI void GLAPIENTRY glLoadIdentity (void); +GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glLoadName (GLuint name); +GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); +GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); +GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); +GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); +GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); +GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); +GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); +GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); +GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); +GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void GLAPIENTRY glPassThrough (GLfloat token); +GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); +GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); +GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); +GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); +GLAPI void GLAPIENTRY glPointSize (GLfloat size); +GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); +GLAPI void GLAPIENTRY glPopAttrib (void); +GLAPI void GLAPIENTRY glPopClientAttrib (void); +GLAPI void GLAPIENTRY glPopMatrix (void); +GLAPI void GLAPIENTRY glPopName (void); +GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); +GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushMatrix (void); +GLAPI void GLAPIENTRY glPushName (GLuint name); +GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); +GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); +GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); +GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); +GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); +GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); +GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); +GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); +GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); +GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); +GLAPI void GLAPIENTRY glShadeModel (GLenum mode); +GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GLAPI void GLAPIENTRY glStencilMask (GLuint mask); +GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); +GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); +GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord1i (GLint s); +GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); +GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); +GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); +GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); +GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) + +#endif /* GL_VERSION_1_1 */ + +/* ---------------------------------- GLU ---------------------------------- */ + +/* this is where we can safely include GLU */ +#if defined(__APPLE__) && defined(__MACH__) +#include +#else +#include +#endif + +/* ----------------------------- GL_VERSION_1_2 ---------------------------- */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 + +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_RESCALE_NORMAL 0x803A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E + +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); + +#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D) +#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements) +#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D) +#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D) + +#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2) + +#endif /* GL_VERSION_1_2 */ + +/* ----------------------------- GL_VERSION_1_3 ---------------------------- */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 + +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_SUBTRACT 0x84E7 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_MULTISAMPLE_BIT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); + +#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture) +#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture) +#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D) +#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D) +#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D) +#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D) +#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D) +#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D) +#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage) +#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd) +#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf) +#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd) +#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf) +#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d) +#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv) +#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f) +#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv) +#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i) +#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv) +#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s) +#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv) +#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d) +#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv) +#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f) +#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv) +#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i) +#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv) +#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s) +#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv) +#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d) +#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv) +#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f) +#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv) +#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i) +#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv) +#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s) +#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv) +#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d) +#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv) +#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f) +#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv) +#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i) +#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv) +#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s) +#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv) +#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage) + +#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3) + +#endif /* GL_VERSION_1_3 */ + +/* ----------------------------- GL_VERSION_1_4 ---------------------------- */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 + +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_COMPARE_R_TO_TEXTURE 0x884E + +typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); +typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC) (GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p); + +#define glBlendColor GLEW_GET_FUN(__glewBlendColor) +#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation) +#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate) +#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer) +#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd) +#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv) +#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf) +#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv) +#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays) +#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements) +#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf) +#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv) +#define glPointParameteri GLEW_GET_FUN(__glewPointParameteri) +#define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv) +#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b) +#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv) +#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d) +#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv) +#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f) +#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv) +#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i) +#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv) +#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s) +#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv) +#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub) +#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv) +#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui) +#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv) +#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us) +#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv) +#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer) +#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d) +#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv) +#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f) +#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv) +#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i) +#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv) +#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s) +#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv) +#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d) +#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv) +#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f) +#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv) +#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i) +#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv) +#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s) +#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv) + +#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4) + +#endif /* GL_VERSION_1_4 */ + +/* ----------------------------- GL_VERSION_1_5 ---------------------------- */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 + +#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE +#define GL_FOG_COORD GL_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY +#define GL_SRC0_RGB GL_SOURCE0_RGB +#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER +#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE +#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA +#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE +#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA +#define GL_SRC1_RGB GL_SOURCE1_RGB +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING +#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA +#define GL_SRC2_RGB GL_SOURCE2_RGB +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 + +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; + +typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer); +typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id); +typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target); + +#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery) +#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer) +#define glBufferData GLEW_GET_FUN(__glewBufferData) +#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData) +#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers) +#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries) +#define glEndQuery GLEW_GET_FUN(__glewEndQuery) +#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers) +#define glGenQueries GLEW_GET_FUN(__glewGenQueries) +#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv) +#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv) +#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData) +#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv) +#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv) +#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv) +#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer) +#define glIsQuery GLEW_GET_FUN(__glewIsQuery) +#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer) +#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer) + +#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5) + +#endif /* GL_VERSION_1_5 */ + +/* ----------------------------- GL_VERSION_2_0 ---------------------------- */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 + +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 + +typedef char GLchar; + +typedef void (GLAPIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum, GLenum); +typedef void (GLAPIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (GLAPIENTRY * PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROC) (GLenum type); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (GLAPIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum* bufs); +typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint); +typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); +typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint* param); +typedef void (GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEPROC) (GLint obj, GLsizei maxLength, GLsizei* length, GLchar* source); +typedef void (GLAPIENTRY * PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint* param); +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC) (GLint programObj, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint, GLenum, GLvoid*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC) (GLuint, GLenum, GLdouble*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC) (GLuint, GLenum, GLfloat*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC) (GLuint, GLenum, GLint*); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (GLAPIENTRY * PFNGLISSHADERPROC) (GLuint shader); +typedef void (GLAPIENTRY * PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths); +typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + +#define glAttachShader GLEW_GET_FUN(__glewAttachShader) +#define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation) +#define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate) +#define glCompileShader GLEW_GET_FUN(__glewCompileShader) +#define glCreateProgram GLEW_GET_FUN(__glewCreateProgram) +#define glCreateShader GLEW_GET_FUN(__glewCreateShader) +#define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram) +#define glDeleteShader GLEW_GET_FUN(__glewDeleteShader) +#define glDetachShader GLEW_GET_FUN(__glewDetachShader) +#define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray) +#define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers) +#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray) +#define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib) +#define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform) +#define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders) +#define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation) +#define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog) +#define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv) +#define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog) +#define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource) +#define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv) +#define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation) +#define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv) +#define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv) +#define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv) +#define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv) +#define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv) +#define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv) +#define glIsProgram GLEW_GET_FUN(__glewIsProgram) +#define glIsShader GLEW_GET_FUN(__glewIsShader) +#define glLinkProgram GLEW_GET_FUN(__glewLinkProgram) +#define glShaderSource GLEW_GET_FUN(__glewShaderSource) +#define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate) +#define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate) +#define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate) +#define glUniform1f GLEW_GET_FUN(__glewUniform1f) +#define glUniform1fv GLEW_GET_FUN(__glewUniform1fv) +#define glUniform1i GLEW_GET_FUN(__glewUniform1i) +#define glUniform1iv GLEW_GET_FUN(__glewUniform1iv) +#define glUniform2f GLEW_GET_FUN(__glewUniform2f) +#define glUniform2fv GLEW_GET_FUN(__glewUniform2fv) +#define glUniform2i GLEW_GET_FUN(__glewUniform2i) +#define glUniform2iv GLEW_GET_FUN(__glewUniform2iv) +#define glUniform3f GLEW_GET_FUN(__glewUniform3f) +#define glUniform3fv GLEW_GET_FUN(__glewUniform3fv) +#define glUniform3i GLEW_GET_FUN(__glewUniform3i) +#define glUniform3iv GLEW_GET_FUN(__glewUniform3iv) +#define glUniform4f GLEW_GET_FUN(__glewUniform4f) +#define glUniform4fv GLEW_GET_FUN(__glewUniform4fv) +#define glUniform4i GLEW_GET_FUN(__glewUniform4i) +#define glUniform4iv GLEW_GET_FUN(__glewUniform4iv) +#define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv) +#define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv) +#define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv) +#define glUseProgram GLEW_GET_FUN(__glewUseProgram) +#define glValidateProgram GLEW_GET_FUN(__glewValidateProgram) +#define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d) +#define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv) +#define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f) +#define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv) +#define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s) +#define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv) +#define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d) +#define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv) +#define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f) +#define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv) +#define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s) +#define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv) +#define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d) +#define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv) +#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) +#define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv) +#define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s) +#define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv) +#define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv) +#define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv) +#define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv) +#define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub) +#define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv) +#define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv) +#define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv) +#define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv) +#define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d) +#define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv) +#define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f) +#define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv) +#define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv) +#define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s) +#define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv) +#define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv) +#define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv) +#define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv) +#define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer) + +#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0) + +#endif /* GL_VERSION_2_0 */ + +/* ----------------------------- GL_VERSION_2_1 ---------------------------- */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 + +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B + +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); + +#define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv) +#define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv) +#define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv) +#define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv) +#define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv) +#define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv) + +#define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1) + +#endif /* GL_VERSION_2_1 */ + +/* -------------------------- GL_3DFX_multisample -------------------------- */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 + +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 + +#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample) + +#endif /* GL_3DFX_multisample */ + +/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 + +typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); + +#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX) + +#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer) + +#endif /* GL_3DFX_tbuffer */ + +/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 + +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 + +#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1) + +#endif /* GL_3DFX_texture_compression_FXT1 */ + +/* ------------------------ GL_APPLE_client_storage ------------------------ */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 + +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 + +#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage) + +#endif /* GL_APPLE_client_storage */ + +/* ------------------------- GL_APPLE_element_array ------------------------ */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 + +#define GL_ELEMENT_ARRAY_APPLE 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A + +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void* pointer); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount); + +#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE) +#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE) +#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE) +#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE) +#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE) + +#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array) + +#endif /* GL_APPLE_element_array */ + +/* ----------------------------- GL_APPLE_fence ---------------------------- */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 + +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B + +typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences); +typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences); +typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); + +#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE) +#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE) +#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE) +#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE) +#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE) +#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE) +#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE) +#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE) + +#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence) + +#endif /* GL_APPLE_fence */ + +/* ------------------------- GL_APPLE_float_pixels ------------------------- */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 + +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F + +#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels) + +#endif /* GL_APPLE_float_pixels */ + +/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 + +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 + +typedef void (GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); + +#define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE) +#define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE) + +#define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range) + +#endif /* GL_APPLE_flush_buffer_range */ + +/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ + +#ifndef GL_APPLE_pixel_buffer +#define GL_APPLE_pixel_buffer 1 + +#define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 + +#define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer) + +#endif /* GL_APPLE_pixel_buffer */ + +/* ------------------------ GL_APPLE_specular_vector ----------------------- */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 + +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 + +#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector) + +#endif /* GL_APPLE_specular_vector */ + +/* ------------------------- GL_APPLE_texture_range ------------------------ */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 + +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF + +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params); +typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer); + +#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE) +#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE) + +#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range) + +#endif /* GL_APPLE_texture_range */ + +/* ------------------------ GL_APPLE_transform_hint ------------------------ */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 + +#define GL_TRANSFORM_HINT_APPLE 0x85B1 + +#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint) + +#endif /* GL_APPLE_transform_hint */ + +/* ---------------------- GL_APPLE_vertex_array_object --------------------- */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 + +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 + +typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); +typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); +typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); + +#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE) +#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE) +#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE) +#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE) + +#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object) + +#endif /* GL_APPLE_vertex_array_object */ + +/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 + +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF + +typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); + +#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) +#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) +#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE) + +#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range) + +#endif /* GL_APPLE_vertex_array_range */ + +/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 + +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB + +#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422) + +#endif /* GL_APPLE_ycbcr_422 */ + +/* ----------------------- GL_ARB_color_buffer_float ----------------------- */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 + +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D + +typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); + +#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB) + +#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float) + +#endif /* GL_ARB_color_buffer_float */ + +/* -------------------------- GL_ARB_depth_texture ------------------------- */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 + +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B + +#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture) + +#endif /* GL_ARB_depth_texture */ + +/* -------------------------- GL_ARB_draw_buffers -------------------------- */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB) + +#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers) + +#endif /* GL_ARB_draw_buffers */ + +/* ------------------------ GL_ARB_fragment_program ------------------------ */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 + +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 + +#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program) + +#endif /* GL_ARB_fragment_program */ + +/* --------------------- GL_ARB_fragment_program_shadow -------------------- */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 + +#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow) + +#endif /* GL_ARB_fragment_program_shadow */ + +/* ------------------------- GL_ARB_fragment_shader ------------------------ */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 + +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B + +#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader) + +#endif /* GL_ARB_fragment_shader */ + +/* ------------------------ GL_ARB_half_float_pixel ------------------------ */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 + +#define GL_HALF_FLOAT_ARB 0x140B + +#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel) + +#endif /* GL_ARB_half_float_pixel */ + +/* ----------------------------- GL_ARB_imaging ---------------------------- */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_FUNC_ADD 0x8006 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_BLEND_EQUATION 0x8009 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_IGNORE_BORDER 0x8150 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_WRAP_BORDER 0x8152 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 + +typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); + +#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable) +#define glColorTable GLEW_GET_FUN(__glewColorTable) +#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv) +#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv) +#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D) +#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D) +#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf) +#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv) +#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri) +#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv) +#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable) +#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable) +#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D) +#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D) +#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable) +#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv) +#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv) +#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter) +#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv) +#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv) +#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram) +#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv) +#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv) +#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax) +#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv) +#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv) +#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter) +#define glHistogram GLEW_GET_FUN(__glewHistogram) +#define glMinmax GLEW_GET_FUN(__glewMinmax) +#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram) +#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax) +#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D) + +#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging) + +#endif /* GL_ARB_imaging */ + +/* ------------------------- GL_ARB_matrix_palette ------------------------- */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 + +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 + +typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices); + +#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB) +#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB) +#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB) +#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB) +#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB) + +#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette) + +#endif /* GL_ARB_matrix_palette */ + +/* --------------------------- GL_ARB_multisample -------------------------- */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 + +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); + +#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB) + +#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample) + +#endif /* GL_ARB_multisample */ + +/* -------------------------- GL_ARB_multitexture -------------------------- */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB) +#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB) +#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB) +#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB) +#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB) +#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB) +#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB) +#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB) +#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB) +#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB) +#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB) +#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB) +#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB) +#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB) +#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB) +#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB) +#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB) +#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB) +#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB) +#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB) +#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB) +#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB) +#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB) +#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB) +#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB) +#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB) +#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB) +#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB) +#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB) +#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB) +#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB) +#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB) +#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB) +#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB) + +#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture) + +#endif /* GL_ARB_multitexture */ + +/* ------------------------- GL_ARB_occlusion_query ------------------------ */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 + +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 + +typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id); + +#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB) +#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB) +#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB) +#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB) +#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB) +#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB) +#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB) +#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB) + +#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query) + +#endif /* GL_ARB_occlusion_query */ + +/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 + +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF + +#define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object) + +#endif /* GL_ARB_pixel_buffer_object */ + +/* ------------------------ GL_ARB_point_parameters ------------------------ */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 + +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, GLfloat* params); + +#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB) +#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB) + +#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters) + +#endif /* GL_ARB_point_parameters */ + +/* -------------------------- GL_ARB_point_sprite -------------------------- */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 + +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 + +#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite) + +#endif /* GL_ARB_point_sprite */ + +/* ------------------------- GL_ARB_shader_objects ------------------------- */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 + +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 + +typedef char GLcharARB; +typedef unsigned int GLhandleARB; + +typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj); +typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog); +typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source); +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params); +typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); + +#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB) +#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB) +#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB) +#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB) +#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB) +#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB) +#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB) +#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB) +#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB) +#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB) +#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB) +#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB) +#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB) +#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB) +#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB) +#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB) +#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB) +#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB) +#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB) +#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB) +#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB) +#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB) +#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB) +#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB) +#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB) +#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB) +#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB) +#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB) +#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB) +#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB) +#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB) +#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB) +#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB) +#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB) +#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB) +#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB) +#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB) +#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB) +#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB) + +#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects) + +#endif /* GL_ARB_shader_objects */ + +/* ---------------------- GL_ARB_shading_language_100 ---------------------- */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 + +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C + +#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100) + +#endif /* GL_ARB_shading_language_100 */ + +/* ----------------------------- GL_ARB_shadow ----------------------------- */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 + +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E + +#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow) + +#endif /* GL_ARB_shadow */ + +/* ------------------------- GL_ARB_shadow_ambient ------------------------- */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 + +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF + +#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient) + +#endif /* GL_ARB_shadow_ambient */ + +/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 + +#define GL_CLAMP_TO_BORDER_ARB 0x812D + +#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp) + +#endif /* GL_ARB_texture_border_clamp */ + +/* ----------------------- GL_ARB_texture_compression ---------------------- */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 + +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 + +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, void* img); + +#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) +#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) +#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB) +#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB) +#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB) +#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB) +#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB) + +#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression) + +#endif /* GL_ARB_texture_compression */ + +/* ------------------------ GL_ARB_texture_cube_map ------------------------ */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 + +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C + +#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map) + +#endif /* GL_ARB_texture_cube_map */ + +/* ------------------------- GL_ARB_texture_env_add ------------------------ */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 + +#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add) + +#endif /* GL_ARB_texture_env_add */ + +/* ----------------------- GL_ARB_texture_env_combine ---------------------- */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 + +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A + +#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine) + +#endif /* GL_ARB_texture_env_combine */ + +/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 + +#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar) + +#endif /* GL_ARB_texture_env_crossbar */ + +/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 + +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF + +#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3) + +#endif /* GL_ARB_texture_env_dot3 */ + +/* -------------------------- GL_ARB_texture_float ------------------------- */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 + +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 + +#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float) + +#endif /* GL_ARB_texture_float */ + +/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 + +#define GL_MIRRORED_REPEAT_ARB 0x8370 + +#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat) + +#endif /* GL_ARB_texture_mirrored_repeat */ + +/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 + +#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two) + +#endif /* GL_ARB_texture_non_power_of_two */ + +/* ------------------------ GL_ARB_texture_rectangle ----------------------- */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 + +#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle) + +#endif /* GL_ARB_texture_rectangle */ + +/* ------------------------ GL_ARB_transpose_matrix ------------------------ */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 + +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 + +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); + +#define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB) +#define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB) +#define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB) +#define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB) + +#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix) + +#endif /* GL_ARB_transpose_matrix */ + +/* -------------------------- GL_ARB_vertex_blend -------------------------- */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 + +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F + +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count); +typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights); + +#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB) +#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB) +#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB) +#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB) +#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB) +#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB) +#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB) +#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB) +#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB) +#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB) + +#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend) + +#endif /* GL_ARB_vertex_blend */ + +/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 + +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA + +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; + +typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data); +typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target); + +#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB) +#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB) +#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB) +#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB) +#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB) +#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB) +#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB) +#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB) +#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB) +#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB) +#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB) + +#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object) + +#endif /* GL_ARB_vertex_buffer_object */ + +/* ------------------------- GL_ARB_vertex_program ------------------------- */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 + +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF + +typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs); +typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void* string); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); + +#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) +#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) +#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB) +#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB) +#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB) +#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB) +#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB) +#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB) +#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB) +#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB) +#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB) +#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB) +#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB) +#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB) +#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB) +#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB) +#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB) +#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB) +#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB) +#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB) +#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB) +#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB) +#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB) +#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB) +#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB) +#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB) +#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB) +#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB) +#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB) +#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB) +#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB) +#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB) +#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB) +#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB) +#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB) +#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB) +#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB) +#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB) +#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB) +#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB) +#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB) +#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB) +#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB) +#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB) +#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB) +#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB) +#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB) +#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB) +#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB) +#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB) +#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB) +#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB) +#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB) +#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB) +#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB) +#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB) +#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB) +#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB) +#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB) +#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB) +#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB) +#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB) + +#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program) + +#endif /* GL_ARB_vertex_program */ + +/* -------------------------- GL_ARB_vertex_shader ------------------------- */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 + +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A + +typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name); +typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); + +#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB) +#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB) +#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB) + +#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader) + +#endif /* GL_ARB_vertex_shader */ + +/* --------------------------- GL_ARB_window_pos --------------------------- */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 + +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p); + +#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB) +#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB) +#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB) +#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB) +#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB) +#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB) +#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB) +#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB) +#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB) +#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB) +#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB) +#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB) +#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB) +#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB) +#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB) +#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB) + +#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos) + +#endif /* GL_ARB_window_pos */ + +/* ------------------------- GL_ATIX_point_sprites ------------------------- */ + +#ifndef GL_ATIX_point_sprites +#define GL_ATIX_point_sprites 1 + +#define GL_TEXTURE_POINT_MODE_ATIX 0x60B0 +#define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 +#define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 +#define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 +#define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 +#define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 + +#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites) + +#endif /* GL_ATIX_point_sprites */ + +/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ + +#ifndef GL_ATIX_texture_env_combine3 +#define GL_ATIX_texture_env_combine3 1 + +#define GL_MODULATE_ADD_ATIX 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745 +#define GL_MODULATE_SUBTRACT_ATIX 0x8746 + +#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3) + +#endif /* GL_ATIX_texture_env_combine3 */ + +/* ----------------------- GL_ATIX_texture_env_route ----------------------- */ + +#ifndef GL_ATIX_texture_env_route +#define GL_ATIX_texture_env_route 1 + +#define GL_SECONDARY_COLOR_ATIX 0x8747 +#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 +#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 + +#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route) + +#endif /* GL_ATIX_texture_env_route */ + +/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ + +#ifndef GL_ATIX_vertex_shader_output_point_size +#define GL_ATIX_vertex_shader_output_point_size 1 + +#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E + +#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size) + +#endif /* GL_ATIX_vertex_shader_output_point_size */ + +/* -------------------------- GL_ATI_draw_buffers -------------------------- */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI) + +#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers) + +#endif /* GL_ATI_draw_buffers */ + +/* -------------------------- GL_ATI_element_array ------------------------- */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 + +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A + +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void* pointer); + +#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) +#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) +#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI) + +#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array) + +#endif /* GL_ATI_element_array */ + +/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 + +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C + +typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); + +#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI) +#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI) +#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI) +#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI) + +#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap) + +#endif /* GL_ATI_envmap_bumpmap */ + +/* ------------------------- GL_ATI_fragment_shader ------------------------ */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 + +#define GL_RED_BIT_ATI 0x00000001 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B + +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value); + +#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI) +#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI) +#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI) +#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI) +#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI) +#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI) +#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI) +#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI) +#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI) +#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI) +#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI) +#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI) +#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI) +#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI) + +#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader) + +#endif /* GL_ATI_fragment_shader */ + +/* ------------------------ GL_ATI_map_object_buffer ----------------------- */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 + +typedef void* (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); + +#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI) +#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI) + +#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer) + +#endif /* GL_ATI_map_object_buffer */ + +/* -------------------------- GL_ATI_pn_triangles -------------------------- */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 + +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 + +typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); + +#define glPNTrianglesfATI GLEW_GET_FUN(__glPNTrianglewesfATI) +#define glPNTrianglesiATI GLEW_GET_FUN(__glPNTrianglewesiATI) + +#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles) + +#endif /* GL_ATI_pn_triangles */ + +/* ------------------------ GL_ATI_separate_stencil ------------------------ */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 + +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 + +typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI) +#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI) + +#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil) + +#endif /* GL_ATI_separate_stencil */ + +/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ + +#ifndef GL_ATI_shader_texture_lod +#define GL_ATI_shader_texture_lod 1 + +#define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod) + +#endif /* GL_ATI_shader_texture_lod */ + +/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 + +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 + +#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader) + +#endif /* GL_ATI_text_fragment_shader */ + +/* --------------------- GL_ATI_texture_compression_3dc -------------------- */ + +#ifndef GL_ATI_texture_compression_3dc +#define GL_ATI_texture_compression_3dc 1 + +#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 + +#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc) + +#endif /* GL_ATI_texture_compression_3dc */ + +/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 + +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 + +#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3) + +#endif /* GL_ATI_texture_env_combine3 */ + +/* -------------------------- GL_ATI_texture_float ------------------------- */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 + +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F + +#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float) + +#endif /* GL_ATI_texture_float */ + +/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 + +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 + +#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once) + +#endif /* GL_ATI_texture_mirror_once */ + +/* ----------------------- GL_ATI_vertex_array_object ---------------------- */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 + +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 + +typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void* pointer, GLenum usage); +typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve); +typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) +#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI) +#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI) +#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI) +#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI) +#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI) +#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI) +#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI) +#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI) +#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI) +#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI) +#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI) + +#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object) + +#endif /* GL_ATI_vertex_array_object */ + +/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 + +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); + +#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI) +#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI) +#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI) + +#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object) + +#endif /* GL_ATI_vertex_attrib_array_object */ + +/* ------------------------- GL_ATI_vertex_streams ------------------------- */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 + +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_SOURCE_ATI 0x876C +#define GL_VERTEX_STREAM0_ATI 0x876D +#define GL_VERTEX_STREAM1_ATI 0x876E +#define GL_VERTEX_STREAM2_ATI 0x876F +#define GL_VERTEX_STREAM3_ATI 0x8770 +#define GL_VERTEX_STREAM4_ATI 0x8771 +#define GL_VERTEX_STREAM5_ATI 0x8772 +#define GL_VERTEX_STREAM6_ATI 0x8773 +#define GL_VERTEX_STREAM7_ATI 0x8774 + +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *v); + +#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI) +#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI) +#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI) +#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI) +#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI) +#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI) +#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI) +#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI) +#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI) +#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI) +#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI) +#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI) +#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI) +#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI) +#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI) +#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI) +#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI) +#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI) +#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI) +#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI) +#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI) +#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI) +#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI) +#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI) +#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI) +#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI) +#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI) +#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI) +#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI) +#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI) +#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI) +#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI) +#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI) +#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI) +#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI) +#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI) +#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI) + +#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams) + +#endif /* GL_ATI_vertex_streams */ + +/* --------------------------- GL_EXT_422_pixels --------------------------- */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 + +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF + +#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels) + +#endif /* GL_EXT_422_pixels */ + +/* ---------------------------- GL_EXT_Cg_shader --------------------------- */ + +#ifndef GL_EXT_Cg_shader +#define GL_EXT_Cg_shader 1 + +#define GL_CG_VERTEX_SHADER_EXT 0x890E +#define GL_CG_FRAGMENT_SHADER_EXT 0x890F + +#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader) + +#endif /* GL_EXT_Cg_shader */ + +/* ------------------------------ GL_EXT_abgr ------------------------------ */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 + +#define GL_ABGR_EXT 0x8000 + +#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr) + +#endif /* GL_EXT_abgr */ + +/* ------------------------------ GL_EXT_bgra ------------------------------ */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 + +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 + +#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra) + +#endif /* GL_EXT_bgra */ + +/* ------------------------ GL_EXT_bindable_uniform ------------------------ */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 + +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF + +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +typedef void (GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); + +#define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT) +#define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT) +#define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT) + +#define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform) + +#endif /* GL_EXT_bindable_uniform */ + +/* --------------------------- GL_EXT_blend_color -------------------------- */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 + +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 + +typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + +#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT) + +#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color) + +#endif /* GL_EXT_blend_color */ + +/* --------------------- GL_EXT_blend_equation_separate -------------------- */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 + +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D + +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); + +#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT) + +#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate) + +#endif /* GL_EXT_blend_equation_separate */ + +/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 + +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB + +typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT) + +#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate) + +#endif /* GL_EXT_blend_func_separate */ + +/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 + +#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op) + +#endif /* GL_EXT_blend_logic_op */ + +/* -------------------------- GL_EXT_blend_minmax -------------------------- */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 + +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_BLEND_EQUATION_EXT 0x8009 + +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); + +#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT) + +#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax) + +#endif /* GL_EXT_blend_minmax */ + +/* ------------------------- GL_EXT_blend_subtract ------------------------- */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 + +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B + +#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract) + +#endif /* GL_EXT_blend_subtract */ + +/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 + +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 + +#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint) + +#endif /* GL_EXT_clip_volume_hint */ + +/* ------------------------------ GL_EXT_cmyka ----------------------------- */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 + +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F + +#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka) + +#endif /* GL_EXT_cmyka */ + +/* ------------------------- GL_EXT_color_subtable ------------------------- */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 + +typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) +#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT) + +#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable) + +#endif /* GL_EXT_color_subtable */ + +/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 + +typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); + +#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT) +#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT) + +#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array) + +#endif /* GL_EXT_compiled_vertex_array */ + +/* --------------------------- GL_EXT_convolution -------------------------- */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 + +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 + +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* image); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span); +typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column); + +#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) +#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) +#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT) +#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT) +#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT) +#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT) +#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT) +#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT) +#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT) +#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT) +#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT) +#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT) +#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT) + +#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution) + +#endif /* GL_EXT_convolution */ + +/* ------------------------ GL_EXT_coordinate_frame ------------------------ */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 + +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 + +typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); + +#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) +#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) + +#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame) + +#endif /* GL_EXT_coordinate_frame */ + +/* -------------------------- GL_EXT_copy_texture -------------------------- */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 + +typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT) +#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT) +#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT) +#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT) +#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT) + +#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture) + +#endif /* GL_EXT_copy_texture */ + +/* --------------------------- GL_EXT_cull_vertex -------------------------- */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 + +typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); + +#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT) +#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT) + +#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex) + +#endif /* GL_EXT_cull_vertex */ + +/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 + +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 + +typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); + +#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT) + +#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test) + +#endif /* GL_EXT_depth_bounds_test */ + +/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 + +typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); + +#define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT) +#define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT) +#define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT) +#define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT) +#define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT) +#define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT) + +#define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2) + +#endif /* GL_EXT_draw_buffers2 */ + +/* ------------------------- GL_EXT_draw_instanced ------------------------- */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); + +#define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT) +#define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT) + +#define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced) + +#endif /* GL_EXT_draw_instanced */ + +/* ----------------------- GL_EXT_draw_range_elements ---------------------- */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 + +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 + +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); + +#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT) + +#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements) + +#endif /* GL_EXT_draw_range_elements */ + +/* ---------------------------- GL_EXT_fog_coord --------------------------- */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 + +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 + +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); + +#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT) +#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT) +#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT) +#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT) +#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT) + +#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord) + +#endif /* GL_EXT_fog_coord */ + +/* ------------------------ GL_EXT_fragment_lighting ----------------------- */ + +#ifndef GL_EXT_fragment_lighting +#define GL_EXT_fragment_lighting 1 + +#define GL_FRAGMENT_LIGHTING_EXT 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 +#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 +#define GL_LIGHT_ENV_MODE_EXT 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B +#define GL_FRAGMENT_LIGHT0_EXT 0x840C +#define GL_FRAGMENT_LIGHT7_EXT 0x8413 + +typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param); + +#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT) +#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT) +#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT) +#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT) +#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT) +#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT) +#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT) +#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT) +#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT) +#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT) +#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT) +#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT) +#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT) +#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT) +#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT) +#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT) +#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT) +#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT) + +#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting) + +#endif /* GL_EXT_fragment_lighting */ + +/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 + +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA + +typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +#define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT) + +#define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit) + +#endif /* GL_EXT_framebuffer_blit */ + +/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 + +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT) + +#define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample) + +#endif /* GL_EXT_framebuffer_multisample */ + +/* ----------------------- GL_EXT_framebuffer_object ----------------------- */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 + +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 + +typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +#define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT) +#define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT) +#define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT) +#define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT) +#define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT) +#define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT) +#define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT) +#define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT) +#define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT) +#define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT) +#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT) +#define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT) +#define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT) +#define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT) +#define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT) +#define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT) +#define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT) + +#define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object) + +#endif /* GL_EXT_framebuffer_object */ + +/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 + +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA + +#define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB) + +#endif /* GL_EXT_framebuffer_sRGB */ + +/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 + +#define GL_LINES_ADJACENCY_EXT 0xA +#define GL_LINE_STRIP_ADJACENCY_EXT 0xB +#define GL_TRIANGLES_ADJACENCY_EXT 0xC +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); + +#define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT) +#define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT) +#define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT) +#define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT) + +#define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4) + +#endif /* GL_EXT_geometry_shader4 */ + +/* --------------------- GL_EXT_gpu_program_parameters --------------------- */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 + +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); + +#define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT) +#define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT) + +#define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters) + +#endif /* GL_EXT_gpu_program_parameters */ + +/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 + +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 + +typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); + +#define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT) +#define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT) +#define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT) +#define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT) +#define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT) +#define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT) +#define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT) +#define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT) +#define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT) +#define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT) +#define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT) +#define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT) +#define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT) +#define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT) +#define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT) +#define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT) +#define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT) +#define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT) +#define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT) +#define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT) +#define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT) +#define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT) +#define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT) +#define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT) +#define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT) +#define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT) +#define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT) +#define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT) +#define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT) +#define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT) +#define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT) +#define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT) +#define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT) +#define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT) + +#define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4) + +#endif /* GL_EXT_gpu_shader4 */ + +/* ---------------------------- GL_EXT_histogram --------------------------- */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 + +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 + +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); + +#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT) +#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT) +#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT) +#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT) +#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT) +#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT) +#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT) +#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT) +#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT) +#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT) + +#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram) + +#endif /* GL_EXT_histogram */ + +/* ----------------------- GL_EXT_index_array_formats ---------------------- */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 + +#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats) + +#endif /* GL_EXT_index_array_formats */ + +/* --------------------------- GL_EXT_index_func --------------------------- */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 + +typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref); + +#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT) + +#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func) + +#endif /* GL_EXT_index_func */ + +/* ------------------------- GL_EXT_index_material ------------------------- */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 + +typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); + +#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT) + +#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material) + +#endif /* GL_EXT_index_material */ + +/* -------------------------- GL_EXT_index_texture ------------------------- */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 + +#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture) + +#endif /* GL_EXT_index_texture */ + +/* -------------------------- GL_EXT_light_texture ------------------------- */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 + +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 + +typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); + +#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT) +#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT) +#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT) + +#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture) + +#endif /* GL_EXT_light_texture */ + +/* ------------------------- GL_EXT_misc_attribute ------------------------- */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 + +#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute) + +#endif /* GL_EXT_misc_attribute */ + +/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint* first, GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount); + +#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) +#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) + +#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays) + +#endif /* GL_EXT_multi_draw_arrays */ + +/* --------------------------- GL_EXT_multisample -------------------------- */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 + +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); + +#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT) +#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT) + +#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample) + +#endif /* GL_EXT_multisample */ + +/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 + +#define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil) + +#endif /* GL_EXT_packed_depth_stencil */ + +/* -------------------------- GL_EXT_packed_float -------------------------- */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 + +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C + +#define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float) + +#endif /* GL_EXT_packed_float */ + +/* -------------------------- GL_EXT_packed_pixels ------------------------- */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 + +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 + +#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels) + +#endif /* GL_EXT_packed_pixels */ + +/* ------------------------ GL_EXT_paletted_texture ------------------------ */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 + +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 +#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B + +typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void* data); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); + +#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT) +#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT) +#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT) +#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT) + +#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture) + +#endif /* GL_EXT_paletted_texture */ + +/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 + +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF + +#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object) + +#endif /* GL_EXT_pixel_buffer_object */ + +/* ------------------------- GL_EXT_pixel_transform ------------------------ */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 + +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 + +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT) +#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT) +#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT) +#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT) +#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT) +#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT) + +#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform) + +#endif /* GL_EXT_pixel_transform */ + +/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 + +#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table) + +#endif /* GL_EXT_pixel_transform_color_table */ + +/* ------------------------ GL_EXT_point_parameters ------------------------ */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 + +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); + +#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT) +#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT) + +#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters) + +#endif /* GL_EXT_point_parameters */ + +/* ------------------------- GL_EXT_polygon_offset ------------------------- */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 + +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 + +typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); + +#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT) + +#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset) + +#endif /* GL_EXT_polygon_offset */ + +/* ------------------------- GL_EXT_rescale_normal ------------------------- */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 + +#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal) + +#endif /* GL_EXT_rescale_normal */ + +/* -------------------------- GL_EXT_scene_marker -------------------------- */ + +#ifndef GL_EXT_scene_marker +#define GL_EXT_scene_marker 1 + +typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void); + +#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT) +#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT) + +#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker) + +#endif /* GL_EXT_scene_marker */ + +/* ------------------------- GL_EXT_secondary_color ------------------------ */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 + +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E + +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); + +#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT) +#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT) +#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT) +#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT) +#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT) +#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT) +#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT) +#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT) +#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT) +#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT) +#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT) +#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT) +#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT) +#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT) +#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT) +#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT) +#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT) + +#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color) + +#endif /* GL_EXT_secondary_color */ + +/* --------------------- GL_EXT_separate_specular_color -------------------- */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 + +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA + +#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color) + +#endif /* GL_EXT_separate_specular_color */ + +/* -------------------------- GL_EXT_shadow_funcs -------------------------- */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 + +#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs) + +#endif /* GL_EXT_shadow_funcs */ + +/* --------------------- GL_EXT_shared_texture_palette --------------------- */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 + +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB + +#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette) + +#endif /* GL_EXT_shared_texture_palette */ + +/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 + +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 + +#define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag) + +#endif /* GL_EXT_stencil_clear_tag */ + +/* ------------------------ GL_EXT_stencil_two_side ------------------------ */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 + +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 + +typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); + +#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT) + +#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side) + +#endif /* GL_EXT_stencil_two_side */ + +/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 + +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 + +#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap) + +#endif /* GL_EXT_stencil_wrap */ + +/* --------------------------- GL_EXT_subtexture --------------------------- */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 + +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); + +#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) +#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) +#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT) + +#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture) + +#endif /* GL_EXT_subtexture */ + +/* ----------------------------- GL_EXT_texture ---------------------------- */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 + +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 + +#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture) + +#endif /* GL_EXT_texture */ + +/* ---------------------------- GL_EXT_texture3D --------------------------- */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 + +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 + +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); + +#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) + +#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D) + +#endif /* GL_EXT_texture3D */ + +/* -------------------------- GL_EXT_texture_array ------------------------- */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 + +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D + +#define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array) + +#endif /* GL_EXT_texture_array */ + +/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 + +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E + +typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); + +#define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT) + +#define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object) + +#endif /* GL_EXT_texture_buffer_object */ + +/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ + +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 + +#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1) + +#endif /* GL_EXT_texture_compression_dxt1 */ + +/* -------------------- GL_EXT_texture_compression_latc -------------------- */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 + +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 + +#define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc) + +#endif /* GL_EXT_texture_compression_latc */ + +/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 + +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE + +#define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc) + +#endif /* GL_EXT_texture_compression_rgtc */ + +/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 + +#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc) + +#endif /* GL_EXT_texture_compression_s3tc */ + +/* ------------------------ GL_EXT_texture_cube_map ------------------------ */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 + +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C + +#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map) + +#endif /* GL_EXT_texture_cube_map */ + +/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ + +#ifndef GL_EXT_texture_edge_clamp +#define GL_EXT_texture_edge_clamp 1 + +#define GL_CLAMP_TO_EDGE_EXT 0x812F + +#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp) + +#endif /* GL_EXT_texture_edge_clamp */ + +/* --------------------------- GL_EXT_texture_env -------------------------- */ + +#ifndef GL_EXT_texture_env +#define GL_EXT_texture_env 1 + +#define GL_TEXTURE_ENV0_EXT 0 +#define GL_ENV_BLEND_EXT 0 +#define GL_TEXTURE_ENV_SHIFT_EXT 0 +#define GL_ENV_REPLACE_EXT 0 +#define GL_ENV_ADD_EXT 0 +#define GL_ENV_SUBTRACT_EXT 0 +#define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0 +#define GL_ENV_REVERSE_SUBTRACT_EXT 0 +#define GL_ENV_REVERSE_BLEND_EXT 0 +#define GL_ENV_COPY_EXT 0 +#define GL_ENV_MODULATE_EXT 0 + +#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) + +#endif /* GL_EXT_texture_env */ + +/* ------------------------- GL_EXT_texture_env_add ------------------------ */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 + +#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add) + +#endif /* GL_EXT_texture_env_add */ + +/* ----------------------- GL_EXT_texture_env_combine ---------------------- */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 + +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A + +#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine) + +#endif /* GL_EXT_texture_env_combine */ + +/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 + +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 + +#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3) + +#endif /* GL_EXT_texture_env_dot3 */ + +/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 + +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF + +#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic) + +#endif /* GL_EXT_texture_filter_anisotropic */ + +/* ------------------------- GL_EXT_texture_integer ------------------------ */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 + +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E + +typedef void (GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); + +#define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT) +#define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT) +#define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT) +#define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT) +#define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT) +#define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT) + +#define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer) + +#endif /* GL_EXT_texture_integer */ + +/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 + +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 + +#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias) + +#endif /* GL_EXT_texture_lod_bias */ + +/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 + +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 + +#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp) + +#endif /* GL_EXT_texture_mirror_clamp */ + +/* ------------------------- GL_EXT_texture_object ------------------------- */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 + +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A + +typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences); +typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures); +typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures); +typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities); + +#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT) +#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT) +#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT) +#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT) +#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT) +#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT) + +#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object) + +#endif /* GL_EXT_texture_object */ + +/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 + +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF + +typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); + +#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT) + +#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal) + +#endif /* GL_EXT_texture_perturb_normal */ + +/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ + +#ifndef GL_EXT_texture_rectangle +#define GL_EXT_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_EXT 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 + +#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle) + +#endif /* GL_EXT_texture_rectangle */ + +/* -------------------------- GL_EXT_texture_sRGB -------------------------- */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 + +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F + +#define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB) + +#endif /* GL_EXT_texture_sRGB */ + +/* --------------------- GL_EXT_texture_shared_exponent -------------------- */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 + +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F + +#define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent) + +#endif /* GL_EXT_texture_shared_exponent */ + +/* --------------------------- GL_EXT_timer_query -------------------------- */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 + +#define GL_TIME_ELAPSED_EXT 0x88BF + +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); + +#define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT) +#define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT) + +#define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query) + +#endif /* GL_EXT_timer_query */ + +/* -------------------------- GL_EXT_vertex_array -------------------------- */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 + +#define GL_DOUBLE_EXT 0x140A +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 + +typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer); +typedef void (GLAPIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, void** params); +typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); + +#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) +#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) +#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT) +#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT) +#define glGetPointervEXT GLEW_GET_FUN(__glewGetPointervEXT) +#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT) +#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT) +#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT) +#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT) + +#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array) + +#endif /* GL_EXT_vertex_array */ + +/* -------------------------- GL_EXT_vertex_shader ------------------------- */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 + +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED + +typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components); +typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data); +typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr); +typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT) +#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT) +#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT) +#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT) +#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT) +#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT) +#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT) +#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT) +#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT) +#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT) +#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT) +#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT) +#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT) +#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT) +#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT) +#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT) +#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT) +#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT) +#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT) +#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT) +#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT) +#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT) +#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT) +#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT) +#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT) +#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT) +#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT) +#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT) +#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT) +#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT) +#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT) +#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT) +#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT) +#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT) +#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT) +#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT) +#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT) +#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT) +#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT) +#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT) +#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT) +#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT) + +#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader) + +#endif /* GL_EXT_vertex_shader */ + +/* ------------------------ GL_EXT_vertex_weighting ------------------------ */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 + +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 + +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); + +#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT) +#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT) +#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT) + +#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting) + +#endif /* GL_EXT_vertex_weighting */ + +/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 + +typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void); + +#define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY) + +#define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator) + +#endif /* GL_GREMEDY_frame_terminator */ + +/* ------------------------ GL_GREMEDY_string_marker ----------------------- */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 + +typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void* string); + +#define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) + +#define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker) + +#endif /* GL_GREMEDY_string_marker */ + +/* --------------------- GL_HP_convolution_border_modes -------------------- */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 + +#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes) + +#endif /* GL_HP_convolution_border_modes */ + +/* ------------------------- GL_HP_image_transform ------------------------- */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 + +typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP) +#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP) +#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP) +#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP) +#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP) +#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP) + +#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform) + +#endif /* GL_HP_image_transform */ + +/* -------------------------- GL_HP_occlusion_test ------------------------- */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 + +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 + +#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) + +#endif /* GL_HP_occlusion_test */ + +/* ------------------------- GL_HP_texture_lighting ------------------------ */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 + +#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting) + +#endif /* GL_HP_texture_lighting */ + +/* --------------------------- GL_IBM_cull_vertex -------------------------- */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 + +#define GL_CULL_VERTEX_IBM 103050 + +#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex) + +#endif /* GL_IBM_cull_vertex */ + +/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 + +typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride); + +#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM) +#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM) + +#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays) + +#endif /* GL_IBM_multimode_draw_arrays */ + +/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 + +#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010 + +#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip) + +#endif /* GL_IBM_rasterpos_clip */ + +/* --------------------------- GL_IBM_static_data -------------------------- */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 + +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 + +#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data) + +#endif /* GL_IBM_static_data */ + +/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 + +#define GL_MIRRORED_REPEAT_IBM 0x8370 + +#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat) + +#endif /* GL_IBM_texture_mirrored_repeat */ + +/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 + +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 + +typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); + +#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM) +#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM) +#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM) +#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM) +#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM) +#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM) +#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM) +#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM) + +#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists) + +#endif /* GL_IBM_vertex_array_lists */ + +/* -------------------------- GL_INGR_color_clamp -------------------------- */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 + +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 + +#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp) + +#endif /* GL_INGR_color_clamp */ + +/* ------------------------- GL_INGR_interlace_read ------------------------ */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 + +#define GL_INTERLACE_READ_INGR 0x8568 + +#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read) + +#endif /* GL_INGR_interlace_read */ + +/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 + +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 + +typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); + +#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL) +#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL) +#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL) +#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL) + +#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays) + +#endif /* GL_INTEL_parallel_arrays */ + +/* ------------------------ GL_INTEL_texture_scissor ----------------------- */ + +#ifndef GL_INTEL_texture_scissor +#define GL_INTEL_texture_scissor 1 + +typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc); +typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh); + +#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL) +#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL) + +#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor) + +#endif /* GL_INTEL_texture_scissor */ + +/* -------------------------- GL_KTX_buffer_region ------------------------- */ + +#ifndef GL_KTX_buffer_region +#define GL_KTX_buffer_region 1 + +#define GL_KTX_FRONT_REGION 0x0 +#define GL_KTX_BACK_REGION 0x1 +#define GL_KTX_Z_REGION 0x2 +#define GL_KTX_STENCIL_REGION 0x3 + +typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONEXTPROC) (GLenum region); +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest); +typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONEXTPROC) (GLenum region); +typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height); + +#define glBufferRegionEnabledEXT GLEW_GET_FUN(__glewBufferRegionEnabledEXT) +#define glDeleteBufferRegionEXT GLEW_GET_FUN(__glewDeleteBufferRegionEXT) +#define glDrawBufferRegionEXT GLEW_GET_FUN(__glewDrawBufferRegionEXT) +#define glNewBufferRegionEXT GLEW_GET_FUN(__glewNewBufferRegionEXT) +#define glReadBufferRegionEXT GLEW_GET_FUN(__glewReadBufferRegionEXT) + +#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region) + +#endif /* GL_KTX_buffer_region */ + +/* ------------------------- GL_MESAX_texture_stack ------------------------ */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 + +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E + +#define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack) + +#endif /* GL_MESAX_texture_stack */ + +/* -------------------------- GL_MESA_pack_invert -------------------------- */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 + +#define GL_PACK_INVERT_MESA 0x8758 + +#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert) + +#endif /* GL_MESA_pack_invert */ + +/* ------------------------- GL_MESA_resize_buffers ------------------------ */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 + +typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); + +#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA) + +#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers) + +#endif /* GL_MESA_resize_buffers */ + +/* --------------------------- GL_MESA_window_pos -------------------------- */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 + +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); + +#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA) +#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA) +#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA) +#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA) +#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA) +#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA) +#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA) +#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA) +#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA) +#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA) +#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA) +#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA) +#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA) +#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA) +#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA) +#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA) +#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA) +#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA) +#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA) +#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA) +#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA) +#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA) +#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA) +#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA) + +#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos) + +#endif /* GL_MESA_window_pos */ + +/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 + +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 + +#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture) + +#endif /* GL_MESA_ycbcr_texture */ + +/* --------------------------- GL_NV_blend_square -------------------------- */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 + +#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square) + +#endif /* GL_NV_blend_square */ + +/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 + +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F + +#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color) + +#endif /* GL_NV_copy_depth_to_color */ + +/* ------------------------ GL_NV_depth_buffer_float ----------------------- */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 + +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF + +typedef void (GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); + +#define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV) +#define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV) +#define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV) + +#define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float) + +#endif /* GL_NV_depth_buffer_float */ + +/* --------------------------- GL_NV_depth_clamp --------------------------- */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 + +#define GL_DEPTH_CLAMP_NV 0x864F + +#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp) + +#endif /* GL_NV_depth_clamp */ + +/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ + +#ifndef GL_NV_depth_range_unclamped +#define GL_NV_depth_range_unclamped 1 + +#define GL_SAMPLE_COUNT_BITS_NV 0x8864 +#define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 +#define GL_QUERY_RESULT_NV 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_NV 0x8867 +#define GL_SAMPLE_COUNT_NV 0x8914 + +#define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped) + +#endif /* GL_NV_depth_range_unclamped */ + +/* ---------------------------- GL_NV_evaluators --------------------------- */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 + +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 + +typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points); +typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points); +typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV) +#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV) +#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV) +#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV) +#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV) +#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV) +#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV) +#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV) +#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV) + +#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators) + +#endif /* GL_NV_evaluators */ + +/* ------------------------------ GL_NV_fence ------------------------------ */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 + +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 + +typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences); +typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences); +typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence); + +#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV) +#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV) +#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV) +#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV) +#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV) +#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV) +#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV) + +#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence) + +#endif /* GL_NV_fence */ + +/* --------------------------- GL_NV_float_buffer -------------------------- */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 + +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E + +#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer) + +#endif /* GL_NV_float_buffer */ + +/* --------------------------- GL_NV_fog_distance -------------------------- */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 + +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C + +#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance) + +#endif /* GL_NV_fog_distance */ + +/* ------------------------- GL_NV_fragment_program ------------------------ */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 + +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 + +typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]); + +#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV) +#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV) +#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV) +#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV) +#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV) +#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV) + +#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program) + +#endif /* GL_NV_fragment_program */ + +/* ------------------------ GL_NV_fragment_program2 ------------------------ */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 + +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 + +#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2) + +#endif /* GL_NV_fragment_program2 */ + +/* ------------------------ GL_NV_fragment_program4 ------------------------ */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 + +#define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4) + +#endif /* GL_NV_fragment_program4 */ + +/* --------------------- GL_NV_fragment_program_option --------------------- */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 + +#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option) + +#endif /* GL_NV_fragment_program_option */ + +/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 + +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV) + +#define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage) + +#endif /* GL_NV_framebuffer_multisample_coverage */ + +/* ------------------------ GL_NV_geometry_program4 ------------------------ */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 + +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 + +typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); + +#define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV) + +#define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4) + +#endif /* GL_NV_geometry_program4 */ + +/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 + +#define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4) + +#endif /* GL_NV_geometry_shader4 */ + +/* --------------------------- GL_NV_gpu_program4 -------------------------- */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 + +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 + +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); + +#define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV) +#define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV) +#define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV) +#define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV) +#define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV) +#define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV) +#define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV) +#define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV) +#define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV) +#define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV) +#define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV) +#define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV) + +#define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4) + +#endif /* GL_NV_gpu_program4 */ + +/* ---------------------------- GL_NV_half_float --------------------------- */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 + +#define GL_HALF_FLOAT_NV 0x140B + +typedef unsigned short GLhalf; + +typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); +typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha); +typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLhalf fog); +typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLhalf* fog); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLhalf nx, GLhalf ny, GLhalf nz); +typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLhalf s); +typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLhalf s, GLhalf t); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLhalf s, GLhalf t, GLhalf r); +typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLhalf s, GLhalf t, GLhalf r, GLhalf q); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLhalf x, GLhalf y); +typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLhalf x, GLhalf y, GLhalf z); +typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLhalf x, GLhalf y, GLhalf z, GLhalf w); +typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalf x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalf x, GLhalf y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLhalf weight); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); + +#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV) +#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV) +#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV) +#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV) +#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV) +#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV) +#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV) +#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV) +#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV) +#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV) +#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV) +#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV) +#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV) +#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV) +#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV) +#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV) +#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV) +#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV) +#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV) +#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV) +#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV) +#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV) +#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV) +#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV) +#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV) +#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV) +#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV) +#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV) +#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV) +#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV) +#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV) +#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV) +#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV) +#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV) +#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV) +#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV) +#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV) +#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV) +#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV) +#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV) +#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV) +#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV) +#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV) +#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV) +#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV) +#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV) + +#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float) + +#endif /* GL_NV_half_float */ + +/* ------------------------ GL_NV_light_max_exponent ----------------------- */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 + +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 + +#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent) + +#endif /* GL_NV_light_max_exponent */ + +/* --------------------- GL_NV_multisample_filter_hint --------------------- */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 + +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 + +#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint) + +#endif /* GL_NV_multisample_filter_hint */ + +/* ------------------------- GL_NV_occlusion_query ------------------------- */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 + +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 + +typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); + +#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV) +#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV) +#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV) +#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV) +#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV) +#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV) +#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV) + +#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query) + +#endif /* GL_NV_occlusion_query */ + +/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA + +#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil) + +#endif /* GL_NV_packed_depth_stencil */ + +/* --------------------- GL_NV_parameter_buffer_object --------------------- */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 + +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 + +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); + +#define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV) +#define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV) +#define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV) + +#define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object) + +#endif /* GL_NV_parameter_buffer_object */ + +/* ------------------------- GL_NV_pixel_data_range ------------------------ */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 + +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D + +typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, void* pointer); + +#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) +#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) + +#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range) + +#endif /* GL_NV_pixel_data_range */ + +/* --------------------------- GL_NV_point_sprite -------------------------- */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 + +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params); + +#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV) +#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV) + +#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite) + +#endif /* GL_NV_point_sprite */ + +/* ------------------------ GL_NV_primitive_restart ------------------------ */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 + +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 + +typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void); + +#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV) +#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV) + +#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart) + +#endif /* GL_NV_primitive_restart */ + +/* ------------------------ GL_NV_register_combiners ----------------------- */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 + +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 + +typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params); + +#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV) +#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV) +#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV) +#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV) +#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV) +#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV) +#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV) +#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV) +#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV) +#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV) +#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV) +#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV) +#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV) + +#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners) + +#endif /* GL_NV_register_combiners */ + +/* ----------------------- GL_NV_register_combiners2 ----------------------- */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 + +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 + +typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params); + +#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV) +#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV) + +#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2) + +#endif /* GL_NV_register_combiners2 */ + +/* -------------------------- GL_NV_texgen_emboss -------------------------- */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 + +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F + +#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss) + +#endif /* GL_NV_texgen_emboss */ + +/* ------------------------ GL_NV_texgen_reflection ------------------------ */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 + +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 + +#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection) + +#endif /* GL_NV_texgen_reflection */ + +/* --------------------- GL_NV_texture_compression_vtc --------------------- */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 + +#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc) + +#endif /* GL_NV_texture_compression_vtc */ + +/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 + +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B + +#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4) + +#endif /* GL_NV_texture_env_combine4 */ + +/* ---------------------- GL_NV_texture_expand_normal ---------------------- */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 + +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F + +#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal) + +#endif /* GL_NV_texture_expand_normal */ + +/* ------------------------ GL_NV_texture_rectangle ------------------------ */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 + +#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle) + +#endif /* GL_NV_texture_rectangle */ + +/* -------------------------- GL_NV_texture_shader ------------------------- */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 + +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F + +#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader) + +#endif /* GL_NV_texture_shader */ + +/* ------------------------- GL_NV_texture_shader2 ------------------------- */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 + +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D + +#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2) + +#endif /* GL_NV_texture_shader2 */ + +/* ------------------------- GL_NV_texture_shader3 ------------------------- */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 + +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 + +#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3) + +#endif /* GL_NV_texture_shader3 */ + +/* ------------------------ GL_NV_transform_feedback ----------------------- */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 + +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F + +typedef void (GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef GLint (GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); + +#define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV) +#define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV) +#define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV) +#define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV) +#define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV) +#define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV) +#define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV) +#define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV) +#define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV) +#define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV) +#define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV) + +#define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback) + +#endif /* GL_NV_transform_feedback */ + +/* ------------------------ GL_NV_vertex_array_range ----------------------- */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 + +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 + +typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, void* pointer); + +#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) +#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) + +#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range) + +#endif /* GL_NV_vertex_array_range */ + +/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 + +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 + +#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2) + +#endif /* GL_NV_vertex_array_range2 */ + +/* -------------------------- GL_NV_vertex_program ------------------------- */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 + +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F + +typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences); +typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint num, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint num, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v); + +#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV) +#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV) +#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV) +#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV) +#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV) +#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV) +#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV) +#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV) +#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV) +#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV) +#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV) +#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV) +#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV) +#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV) +#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV) +#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV) +#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV) +#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV) +#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV) +#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV) +#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV) +#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV) +#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV) +#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV) +#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV) +#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV) +#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV) +#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV) +#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV) +#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV) +#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV) +#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV) +#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV) +#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV) +#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV) +#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV) +#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV) +#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV) +#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV) +#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV) +#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV) +#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV) +#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV) +#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV) +#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV) +#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV) +#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV) +#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV) +#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV) +#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV) +#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV) +#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV) +#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV) +#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV) +#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV) +#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV) +#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV) +#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV) +#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV) +#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV) +#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV) +#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV) +#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV) +#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV) + +#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program) + +#endif /* GL_NV_vertex_program */ + +/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 + +#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1) + +#endif /* GL_NV_vertex_program1_1 */ + +/* ------------------------- GL_NV_vertex_program2 ------------------------- */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 + +#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2) + +#endif /* GL_NV_vertex_program2 */ + +/* ---------------------- GL_NV_vertex_program2_option --------------------- */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 + +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 + +#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option) + +#endif /* GL_NV_vertex_program2_option */ + +/* ------------------------- GL_NV_vertex_program3 ------------------------- */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 + +#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C + +#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3) + +#endif /* GL_NV_vertex_program3 */ + +/* ------------------------- GL_NV_vertex_program4 ------------------------- */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 + +#define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4) + +#endif /* GL_NV_vertex_program4 */ + +/* ------------------------ GL_OES_byte_coordinates ------------------------ */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 + +#define GL_BYTE 0x1400 + +#define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) + +#endif /* GL_OES_byte_coordinates */ + +/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 + +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 + +#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) + +#endif /* GL_OES_compressed_paletted_texture */ + +/* --------------------------- GL_OES_read_format -------------------------- */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 + +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B + +#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) + +#endif /* GL_OES_read_format */ + +/* ------------------------ GL_OES_single_precision ------------------------ */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 + +typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampd depth); +typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); +typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) +#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) +#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) +#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) +#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) +#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) + +#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) + +#endif /* GL_OES_single_precision */ + +/* ---------------------------- GL_OML_interlace --------------------------- */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 + +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 + +#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace) + +#endif /* GL_OML_interlace */ + +/* ---------------------------- GL_OML_resample ---------------------------- */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 + +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 + +#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample) + +#endif /* GL_OML_resample */ + +/* ---------------------------- GL_OML_subsample --------------------------- */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 + +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 + +#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample) + +#endif /* GL_OML_subsample */ + +/* --------------------------- GL_PGI_misc_hints --------------------------- */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 + +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 +#define GL_CONSERVE_MEMORY_HINT_PGI 107005 +#define GL_RECLAIM_MEMORY_HINT_PGI 107006 +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 +#define GL_ALWAYS_FAST_HINT_PGI 107020 +#define GL_ALWAYS_SOFT_HINT_PGI 107021 +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 +#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023 +#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030 +#define GL_STRICT_LIGHTING_HINT_PGI 107031 +#define GL_STRICT_SCISSOR_HINT_PGI 107032 +#define GL_FULL_STIPPLE_HINT_PGI 107033 +#define GL_CLIP_NEAR_HINT_PGI 107040 +#define GL_CLIP_FAR_HINT_PGI 107041 +#define GL_WIDE_LINE_HINT_PGI 107042 +#define GL_BACK_NORMALS_HINT_PGI 107043 + +#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints) + +#endif /* GL_PGI_misc_hints */ + +/* -------------------------- GL_PGI_vertex_hints -------------------------- */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 + +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_VERTEX_DATA_HINT_PGI 107050 +#define GL_VERTEX_CONSISTENT_HINT_PGI 107051 +#define GL_MATERIAL_SIDE_HINT_PGI 107052 +#define GL_MAX_VERTEX_HINT_PGI 107053 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 + +#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints) + +#endif /* GL_PGI_vertex_hints */ + +/* ----------------------- GL_REND_screen_coordinates ---------------------- */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 + +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 + +#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates) + +#endif /* GL_REND_screen_coordinates */ + +/* ------------------------------- GL_S3_s3tc ------------------------------ */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 + +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 + +#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc) + +#endif /* GL_S3_s3tc */ + +/* -------------------------- GL_SGIS_color_range -------------------------- */ + +#ifndef GL_SGIS_color_range +#define GL_SGIS_color_range 1 + +#define GL_EXTENDED_RANGE_SGIS 0x85A5 +#define GL_MIN_RED_SGIS 0x85A6 +#define GL_MAX_RED_SGIS 0x85A7 +#define GL_MIN_GREEN_SGIS 0x85A8 +#define GL_MAX_GREEN_SGIS 0x85A9 +#define GL_MIN_BLUE_SGIS 0x85AA +#define GL_MAX_BLUE_SGIS 0x85AB +#define GL_MIN_ALPHA_SGIS 0x85AC +#define GL_MAX_ALPHA_SGIS 0x85AD + +#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range) + +#endif /* GL_SGIS_color_range */ + +/* ------------------------- GL_SGIS_detail_texture ------------------------ */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 + +typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); +typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points); + +#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS) +#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS) + +#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture) + +#endif /* GL_SGIS_detail_texture */ + +/* -------------------------- GL_SGIS_fog_function ------------------------- */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 + +typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points); +typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points); + +#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS) +#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS) + +#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function) + +#endif /* GL_SGIS_fog_function */ + +/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 + +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 + +#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap) + +#endif /* GL_SGIS_generate_mipmap */ + +/* -------------------------- GL_SGIS_multisample -------------------------- */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 + +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); + +#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS) +#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS) + +#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample) + +#endif /* GL_SGIS_multisample */ + +/* ------------------------- GL_SGIS_pixel_texture ------------------------- */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 + +#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture) + +#endif /* GL_SGIS_pixel_texture */ + +/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 + +typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points); +typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); + +#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS) +#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS) + +#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture) + +#endif /* GL_SGIS_sharpen_texture */ + +/* --------------------------- GL_SGIS_texture4D --------------------------- */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 + +typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels); + +#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) +#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) + +#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D) + +#endif /* GL_SGIS_texture4D */ + +/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 + +#define GL_CLAMP_TO_BORDER_SGIS 0x812D + +#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp) + +#endif /* GL_SGIS_texture_border_clamp */ + +/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 + +#define GL_CLAMP_TO_EDGE_SGIS 0x812F + +#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp) + +#endif /* GL_SGIS_texture_edge_clamp */ + +/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 + +typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights); +typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights); + +#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS) +#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS) + +#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4) + +#endif /* GL_SGIS_texture_filter4 */ + +/* -------------------------- GL_SGIS_texture_lod -------------------------- */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 + +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D + +#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod) + +#endif /* GL_SGIS_texture_lod */ + +/* ------------------------- GL_SGIS_texture_select ------------------------ */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 + +#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select) + +#endif /* GL_SGIS_texture_select */ + +/* ----------------------------- GL_SGIX_async ----------------------------- */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 + +#define GL_ASYNC_MARKER_SGIX 0x8329 + +typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp); +typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); + +#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX) +#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX) +#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX) +#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX) +#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX) +#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX) + +#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async) + +#endif /* GL_SGIX_async */ + +/* ------------------------ GL_SGIX_async_histogram ------------------------ */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 + +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D + +#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram) + +#endif /* GL_SGIX_async_histogram */ + +/* -------------------------- GL_SGIX_async_pixel -------------------------- */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 + +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 + +#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel) + +#endif /* GL_SGIX_async_pixel */ + +/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 + +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 + +#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax) + +#endif /* GL_SGIX_blend_alpha_minmax */ + +/* ---------------------------- GL_SGIX_clipmap ---------------------------- */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 + +#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap) + +#endif /* GL_SGIX_clipmap */ + +/* ------------------------- GL_SGIX_depth_texture ------------------------- */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 + +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 + +#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture) + +#endif /* GL_SGIX_depth_texture */ + +/* -------------------------- GL_SGIX_flush_raster ------------------------- */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 + +typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); + +#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX) + +#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster) + +#endif /* GL_SGIX_flush_raster */ + +/* --------------------------- GL_SGIX_fog_offset -------------------------- */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 + +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 + +#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset) + +#endif /* GL_SGIX_fog_offset */ + +/* -------------------------- GL_SGIX_fog_texture -------------------------- */ + +#ifndef GL_SGIX_fog_texture +#define GL_SGIX_fog_texture 1 + +#define GL_TEXTURE_FOG_SGIX 0 +#define GL_FOG_PATCHY_FACTOR_SGIX 0 +#define GL_FRAGMENT_FOG_SGIX 0 + +typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname); + +#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX) + +#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture) + +#endif /* GL_SGIX_fog_texture */ + +/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ + +#ifndef GL_SGIX_fragment_specular_lighting +#define GL_SGIX_fragment_specular_lighting 1 + +typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data); + +#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX) +#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX) +#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX) +#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX) +#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX) +#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX) +#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX) +#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX) +#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX) +#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX) +#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX) +#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX) +#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX) +#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX) +#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX) +#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX) +#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX) + +#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting) + +#endif /* GL_SGIX_fragment_specular_lighting */ + +/* --------------------------- GL_SGIX_framezoom --------------------------- */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 + +typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); + +#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX) + +#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom) + +#endif /* GL_SGIX_framezoom */ + +/* --------------------------- GL_SGIX_interlace --------------------------- */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 + +#define GL_INTERLACE_SGIX 0x8094 + +#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace) + +#endif /* GL_SGIX_interlace */ + +/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 + +#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1) + +#endif /* GL_SGIX_ir_instrument1 */ + +/* ------------------------- GL_SGIX_list_priority ------------------------- */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 + +#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority) + +#endif /* GL_SGIX_list_priority */ + +/* ------------------------- GL_SGIX_pixel_texture ------------------------- */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 + +typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); + +#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX) + +#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture) + +#endif /* GL_SGIX_pixel_texture */ + +/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ + +#ifndef GL_SGIX_pixel_texture_bits +#define GL_SGIX_pixel_texture_bits 1 + +#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits) + +#endif /* GL_SGIX_pixel_texture_bits */ + +/* ------------------------ GL_SGIX_reference_plane ------------------------ */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 + +typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation); + +#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX) + +#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane) + +#endif /* GL_SGIX_reference_plane */ + +/* ---------------------------- GL_SGIX_resample --------------------------- */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 + +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 + +#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample) + +#endif /* GL_SGIX_resample */ + +/* ----------------------------- GL_SGIX_shadow ---------------------------- */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 + +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D + +#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow) + +#endif /* GL_SGIX_shadow */ + +/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 + +#define GL_SHADOW_AMBIENT_SGIX 0x80BF + +#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient) + +#endif /* GL_SGIX_shadow_ambient */ + +/* ----------------------------- GL_SGIX_sprite ---------------------------- */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 + +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params); + +#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX) +#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX) +#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX) +#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX) + +#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite) + +#endif /* GL_SGIX_sprite */ + +/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 + +typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); + +#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX) + +#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer) + +#endif /* GL_SGIX_tag_sample_buffer */ + +/* ------------------------ GL_SGIX_texture_add_env ------------------------ */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 + +#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env) + +#endif /* GL_SGIX_texture_add_env */ + +/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 + +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B + +#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp) + +#endif /* GL_SGIX_texture_coordinate_clamp */ + +/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 + +#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias) + +#endif /* GL_SGIX_texture_lod_bias */ + +/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 + +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E + +#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer) + +#endif /* GL_SGIX_texture_multi_buffer */ + +/* ------------------------- GL_SGIX_texture_range ------------------------- */ + +#ifndef GL_SGIX_texture_range +#define GL_SGIX_texture_range 1 + +#define GL_RGB_SIGNED_SGIX 0x85E0 +#define GL_RGBA_SIGNED_SGIX 0x85E1 +#define GL_ALPHA_SIGNED_SGIX 0x85E2 +#define GL_LUMINANCE_SIGNED_SGIX 0x85E3 +#define GL_INTENSITY_SIGNED_SGIX 0x85E4 +#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 +#define GL_RGB16_SIGNED_SGIX 0x85E6 +#define GL_RGBA16_SIGNED_SGIX 0x85E7 +#define GL_ALPHA16_SIGNED_SGIX 0x85E8 +#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 +#define GL_INTENSITY16_SIGNED_SGIX 0x85EA +#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB +#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC +#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED +#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE +#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF +#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 +#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 +#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 +#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 +#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 +#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 +#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 +#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 +#define GL_MIN_LUMINANCE_SGIS 0x85F8 +#define GL_MAX_LUMINANCE_SGIS 0x85F9 +#define GL_MIN_INTENSITY_SGIS 0x85FA +#define GL_MAX_INTENSITY_SGIS 0x85FB + +#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range) + +#endif /* GL_SGIX_texture_range */ + +/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 + +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C + +#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias) + +#endif /* GL_SGIX_texture_scale_bias */ + +/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 + +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF + +#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip) + +#endif /* GL_SGIX_vertex_preclip */ + +/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ + +#ifndef GL_SGIX_vertex_preclip_hint +#define GL_SGIX_vertex_preclip_hint 1 + +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF + +#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint) + +#endif /* GL_SGIX_vertex_preclip_hint */ + +/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 + +#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb) + +#endif /* GL_SGIX_ycrcb */ + +/* -------------------------- GL_SGI_color_matrix -------------------------- */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 + +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB + +#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix) + +#endif /* GL_SGI_color_matrix */ + +/* --------------------------- GL_SGI_color_table -------------------------- */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 + +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF + +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void* table); + +#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) +#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) +#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI) +#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI) +#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI) +#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI) +#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI) + +#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table) + +#endif /* GL_SGI_color_table */ + +/* ----------------------- GL_SGI_texture_color_table ---------------------- */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 + +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD + +#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table) + +#endif /* GL_SGI_texture_color_table */ + +/* ------------------------- GL_SUNX_constant_data ------------------------- */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 + +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 + +typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); + +#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX) + +#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data) + +#endif /* GL_SUNX_constant_data */ + +/* -------------------- GL_SUN_convolution_border_modes -------------------- */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 + +#define GL_WRAP_BORDER_SUN 0x81D4 + +#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes) + +#endif /* GL_SUN_convolution_border_modes */ + +/* -------------------------- GL_SUN_global_alpha -------------------------- */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 + +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA + +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); + +#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN) +#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN) +#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN) +#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN) +#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN) +#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN) +#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN) +#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN) + +#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha) + +#endif /* GL_SUN_global_alpha */ + +/* --------------------------- GL_SUN_mesh_array --------------------------- */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 + +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 + +#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array) + +#endif /* GL_SUN_mesh_array */ + +/* ------------------------ GL_SUN_read_video_pixels ----------------------- */ + +#ifndef GL_SUN_read_video_pixels +#define GL_SUN_read_video_pixels 1 + +typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); + +#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN) + +#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels) + +#endif /* GL_SUN_read_video_pixels */ + +/* --------------------------- GL_SUN_slice_accum -------------------------- */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 + +#define GL_SLICE_ACCUM_SUN 0x85CC + +#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum) + +#endif /* GL_SUN_slice_accum */ + +/* -------------------------- GL_SUN_triangle_list ------------------------- */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 + +#define GL_RESTART_SUN 0x01 +#define GL_REPLACE_MIDDLE_SUN 0x02 +#define GL_REPLACE_OLDEST_SUN 0x03 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB + +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code); + +#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN) +#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN) +#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN) +#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN) +#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN) +#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN) +#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN) + +#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list) + +#endif /* GL_SUN_triangle_list */ + +/* ----------------------------- GL_SUN_vertex ----------------------------- */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 + +typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v); + +#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN) +#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN) +#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN) +#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN) +#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN) +#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN) +#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN) +#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN) +#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN) +#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN) +#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN) +#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN) +#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN) +#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN) +#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN) +#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN) +#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN) +#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN) +#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN) +#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN) +#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN) +#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN) +#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN) +#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN) +#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN) +#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN) +#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN) +#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN) +#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN) +#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN) +#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN) +#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN) +#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN) +#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN) + +#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex) + +#endif /* GL_SUN_vertex */ + +/* -------------------------- GL_WIN_phong_shading ------------------------- */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 + +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB + +#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading) + +#endif /* GL_WIN_phong_shading */ + +/* -------------------------- GL_WIN_specular_fog -------------------------- */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 + +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC + +#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog) + +#endif /* GL_WIN_specular_fog */ + +/* ---------------------------- GL_WIN_swap_hint --------------------------- */ + +#ifndef GL_WIN_swap_hint +#define GL_WIN_swap_hint 1 + +typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height); + +#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN) + +#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint) + +#endif /* GL_WIN_swap_hint */ + +/* ------------------------------------------------------------------------- */ + +#if defined(GLEW_MX) && defined(_WIN32) +#define GLEW_FUN_EXPORT +#else +#define GLEW_FUN_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#if defined(GLEW_MX) +#define GLEW_VAR_EXPORT +#else +#define GLEW_VAR_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#if defined(GLEW_MX) && defined(_WIN32) +struct GLEWContextStruct +{ +#endif /* GLEW_MX */ + +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements; +GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D; + +GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture; +GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv; +GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage; + +GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation; +GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate; +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer; +GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd; +GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv; +GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf; +GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv; +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv; + +GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery; +GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer; +GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData; +GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers; +GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries; +GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery; +GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers; +GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries; +GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv; +GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv; +GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv; +GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv; +GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer; +GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery; +GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer; +GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer; + +GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader; +GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate; +GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader; +GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram; +GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram; +GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader; +GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader; +GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray; +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers; +GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray; +GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib; +GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform; +GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders; +GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation; +GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv; +GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog; +GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource; +GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv; +GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation; +GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv; +GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv; +GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram; +GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader; +GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram; +GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource; +GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate; +GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate; +GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate; +GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f; +GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv; +GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i; +GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv; +GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f; +GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv; +GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i; +GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv; +GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f; +GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv; +GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i; +GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv; +GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f; +GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv; +GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i; +GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv; +GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram; +GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer; + +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv; + +GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; + +GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE; + +GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE; +GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE; +GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE; +GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE; +GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE; +GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE; +GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE; +GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; + +GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; +GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; +GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE; +GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE; +GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE; + +GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB; + +GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv; +GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable; +GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv; +GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv; +GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter; +GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram; +GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax; +GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; +GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; +GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; + +GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; + +GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB; + +GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB; +GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB; + +GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB; +GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB; +GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB; +GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB; +GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB; +GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; + +GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB; +GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB; +GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB; +GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB; +GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB; +GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB; +GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB; +GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB; +GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB; +GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB; +GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB; +GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB; +GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB; +GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB; +GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB; +GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB; + +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB; + +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB; + +GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB; +GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB; +GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB; +GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB; + +GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB; +GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB; +GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB; +GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB; +GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB; +GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB; +GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB; + +GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB; +GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB; +GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB; +GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB; +GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB; + +GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB; +GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB; +GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB; + +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI; + +GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI; +GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI; + +GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI; +GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI; +GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI; +GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI; + +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI; +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI; +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI; +GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI; +GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI; +GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI; +GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI; +GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI; + +GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI; +GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI; + +GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glPNTrianglewesfATI; +GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glPNTrianglewesiATI; + +GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI; +GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI; + +GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI; +GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI; +GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI; +GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI; +GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI; +GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI; +GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI; +GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI; + +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI; + +GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI; +GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI; +GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; + +GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; +GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; +GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; + +GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; + +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; + +GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; + +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; + +GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; +GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; + +GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT; +GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT; + +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT; +GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; + +GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; +GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; + +GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT; + +GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT; +GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT; + +GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT; + +GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; +GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; +GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; +GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; +GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; +GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; + +GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; + +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; + +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT; + +GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT; +GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT; + +GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT; + +GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT; +GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT; +GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT; +GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT; +GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT; +GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT; +GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT; +GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT; +GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT; + +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT; + +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT; + +GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT; +GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT; + +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT; +GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT; +GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT; +GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT; +GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT; + +GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; + +GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; + +GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; +GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; + +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; + +GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; +GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; + +GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT; + +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT; + +GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT; + +GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT; +GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT; + +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; + +GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; + +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT; + +GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT; + +GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT; + +GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT; +GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT; + +GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT; +GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT; +GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT; +GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT; +GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; + +GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; + +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; + +GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT; +GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT; +GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT; +GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT; +GLEW_FUN_EXPORT PFNGLGETPOINTERVEXTPROC __glewGetPointervEXT; +GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT; +GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; + +GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT; +GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT; +GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT; +GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT; +GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT; +GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT; +GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT; +GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT; +GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT; +GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT; +GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT; +GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT; +GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT; +GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT; +GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT; +GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT; +GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT; + +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; + +GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY; + +GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY; + +GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP; +GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP; + +GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM; +GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM; + +GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM; +GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM; +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM; +GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM; +GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; + +GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; +GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL; + +GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL; +GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL; + +GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDEXTPROC __glewBufferRegionEnabledEXT; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONEXTPROC __glewDeleteBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONEXTPROC __glewDrawBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONEXTPROC __glewNewBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONEXTPROC __glewReadBufferRegionEXT; + +GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA; + +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; + +GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; +GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; + +GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; +GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; +GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV; +GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV; +GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV; +GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV; +GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV; + +GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV; +GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV; +GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV; +GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV; +GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV; +GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV; +GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV; + +GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV; + +GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV; +GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV; +GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV; +GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV; +GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV; +GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV; +GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV; +GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV; +GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV; +GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV; +GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; + +GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; +GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; +GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; +GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV; +GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV; +GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV; +GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV; + +GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV; +GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; + +GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV; +GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV; + +GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV; +GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV; +GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV; +GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV; + +GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV; + +GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV; +GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV; +GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV; +GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV; +GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV; +GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV; + +GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV; + +GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV; +GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV; +GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV; +GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV; +GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV; +GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV; +GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV; +GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV; +GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV; + +GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; +GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; +GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; +GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; +GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; + +GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; +GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; + +GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS; +GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; + +GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; +GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; + +GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; +GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; + +GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS; + +GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS; +GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS; + +GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX; +GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX; +GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX; +GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; +GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; +GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; + +GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; + +GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; + +GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX; + +GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; + +GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; + +GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; + +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; + +GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; + +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; +GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; +GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; + +GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; + +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN; + +GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN; + +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN; + +GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN; + +GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN; + +#if defined(GLEW_MX) && !defined(_WIN32) +struct GLEWContextStruct +{ +#endif /* GLEW_MX */ + +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; +GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; +GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; +GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; +GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; +GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region; +GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; +GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; +GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; + +#ifdef GLEW_MX +}; /* GLEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------- */ + +/* error codes */ +#define GLEW_OK 0 +#define GLEW_NO_ERROR 0 +#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ +#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* GL 1.1 and up are not supported */ +#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* GLX 1.2 and up are not supported */ + +/* string codes */ +#define GLEW_VERSION 1 +#define GLEW_VERSION_MAJOR 2 +#define GLEW_VERSION_MINOR 3 +#define GLEW_VERSION_MICRO 4 + +/* API */ +#ifdef GLEW_MX + +typedef struct GLEWContextStruct GLEWContext; +GLEWAPI GLenum glewContextInit (GLEWContext* ctx); +GLEWAPI GLboolean glewContextIsSupported (GLEWContext* ctx, const char* name); + +#define glewInit() glewContextInit(glewGetContext()) +#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) +#define glewIsExtensionSupported(x) glewIsSupported(x) + +#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) +#ifdef _WIN32 +# define GLEW_GET_FUN(x) glewGetContext()->x +#else +# define GLEW_GET_FUN(x) x +#endif + +#else /* GLEW_MX */ + +GLEWAPI GLenum glewInit (); +GLEWAPI GLboolean glewIsSupported (const char* name); +#define glewIsExtensionSupported(x) glewIsSupported(x) + +#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define GLEW_GET_FUN(x) x + +#endif /* GLEW_MX */ + +GLEWAPI GLboolean glewExperimental; +GLEWAPI GLboolean glewGetExtension (const char* name); +GLEWAPI const GLubyte* glewGetErrorString (GLenum error); +GLEWAPI const GLubyte* glewGetString (GLenum name); + +#ifdef __cplusplus +} +#endif + +#ifdef GLEW_APIENTRY_DEFINED +#undef GLEW_APIENTRY_DEFINED +#undef APIENTRY +#undef GLAPIENTRY +#endif + +#ifdef GLEW_CALLBACK_DEFINED +#undef GLEW_CALLBACK_DEFINED +#undef CALLBACK +#endif + +#ifdef GLEW_WINGDIAPI_DEFINED +#undef GLEW_WINGDIAPI_DEFINED +#undef WINGDIAPI +#endif + +#undef GLAPI +/* #undef GLEWAPI */ + +#endif /* __glew_h__ */ diff --git a/thirdparty/carve-1.4.0/external/GLEW/include/GL/glxew.h b/thirdparty/carve-1.4.0/external/GLEW/include/GL/glxew.h new file mode 100644 index 00000000..4b6bc994 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/include/GL/glxew.h @@ -0,0 +1,1267 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * Mesa 3-D graphics library + * Version: 7.0 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* +** Copyright (c) 2007 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __glxew_h__ +#define __glxew_h__ +#define __GLXEW_H__ + +#ifdef __glxext_h_ +#error glxext.h included before glxew.h +#endif +#ifdef GLX_H +#error glx.h included before glxew.h +#endif + +#define __glxext_h_ +#define __GLX_glx_h__ +#define GLX_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ + +#ifndef GLX_VERSION_1_0 +#define GLX_VERSION_1_0 1 + +#define GLX_USE_GL 1 +#define GLX_BUFFER_SIZE 2 +#define GLX_LEVEL 3 +#define GLX_RGBA 4 +#define GLX_DOUBLEBUFFER 5 +#define GLX_STEREO 6 +#define GLX_AUX_BUFFERS 7 +#define GLX_RED_SIZE 8 +#define GLX_GREEN_SIZE 9 +#define GLX_BLUE_SIZE 10 +#define GLX_ALPHA_SIZE 11 +#define GLX_DEPTH_SIZE 12 +#define GLX_STENCIL_SIZE 13 +#define GLX_ACCUM_RED_SIZE 14 +#define GLX_ACCUM_GREEN_SIZE 15 +#define GLX_ACCUM_BLUE_SIZE 16 +#define GLX_ACCUM_ALPHA_SIZE 17 +#define GLX_BAD_SCREEN 1 +#define GLX_BAD_ATTRIBUTE 2 +#define GLX_NO_EXTENSION 3 +#define GLX_BAD_VISUAL 4 +#define GLX_BAD_CONTEXT 5 +#define GLX_BAD_VALUE 6 +#define GLX_BAD_ENUM 7 + +typedef XID GLXDrawable; +typedef XID GLXPixmap; +#ifdef __sun +typedef struct __glXContextRec *GLXContext; +#else +typedef struct __GLXcontextRec *GLXContext; +#endif + +extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); +extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); +extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); +extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); +extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); +extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); +extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); +extern void glXDestroyContext (Display *dpy, GLXContext ctx); +extern Bool glXIsDirect (Display *dpy, GLXContext ctx); +extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); +extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); +extern GLXContext glXGetCurrentContext (void); +extern GLXDrawable glXGetCurrentDrawable (void); +extern void glXWaitGL (void); +extern void glXWaitX (void); +extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); +extern void glXUseXFont (Font font, int first, int count, int listBase); + +#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) + +#endif /* GLX_VERSION_1_0 */ + +/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ + +#ifndef GLX_VERSION_1_1 +#define GLX_VERSION_1_1 + +#define GLX_VENDOR 0x1 +#define GLX_VERSION 0x2 +#define GLX_EXTENSIONS 0x3 + +extern const char* glXQueryExtensionsString (Display *dpy, int screen); +extern const char* glXGetClientString (Display *dpy, int name); +extern const char* glXQueryServerString (Display *dpy, int screen, int name); + +#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) + +#endif /* GLX_VERSION_1_1 */ + +/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */ + +#ifndef GLX_VERSION_1_2 +#define GLX_VERSION_1_2 1 + +typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void); + +#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay) + +#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2) + +#endif /* GLX_VERSION_1_2 */ + +/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */ + +#ifndef GLX_VERSION_1_3 +#define GLX_VERSION_1_3 1 + +#define GLX_RGBA_BIT 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 +#define GLX_WINDOW_BIT 0x00000001 +#define GLX_COLOR_INDEX_BIT 0x00000002 +#define GLX_PIXMAP_BIT 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 +#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 +#define GLX_PBUFFER_BIT 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 +#define GLX_AUX_BUFFERS_BIT 0x00000010 +#define GLX_CONFIG_CAVEAT 0x20 +#define GLX_DEPTH_BUFFER_BIT 0x00000020 +#define GLX_X_VISUAL_TYPE 0x22 +#define GLX_TRANSPARENT_TYPE 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE 0x24 +#define GLX_TRANSPARENT_RED_VALUE 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 +#define GLX_STENCIL_BUFFER_BIT 0x00000040 +#define GLX_ACCUM_BUFFER_BIT 0x00000080 +#define GLX_NONE 0x8000 +#define GLX_SLOW_CONFIG 0x8001 +#define GLX_TRUE_COLOR 0x8002 +#define GLX_DIRECT_COLOR 0x8003 +#define GLX_PSEUDO_COLOR 0x8004 +#define GLX_STATIC_COLOR 0x8005 +#define GLX_GRAY_SCALE 0x8006 +#define GLX_STATIC_GRAY 0x8007 +#define GLX_TRANSPARENT_RGB 0x8008 +#define GLX_TRANSPARENT_INDEX 0x8009 +#define GLX_VISUAL_ID 0x800B +#define GLX_SCREEN 0x800C +#define GLX_NON_CONFORMANT_CONFIG 0x800D +#define GLX_DRAWABLE_TYPE 0x8010 +#define GLX_RENDER_TYPE 0x8011 +#define GLX_X_RENDERABLE 0x8012 +#define GLX_FBCONFIG_ID 0x8013 +#define GLX_RGBA_TYPE 0x8014 +#define GLX_COLOR_INDEX_TYPE 0x8015 +#define GLX_MAX_PBUFFER_WIDTH 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT 0x8017 +#define GLX_MAX_PBUFFER_PIXELS 0x8018 +#define GLX_PRESERVED_CONTENTS 0x801B +#define GLX_LARGEST_PBUFFER 0x801C +#define GLX_WIDTH 0x801D +#define GLX_HEIGHT 0x801E +#define GLX_EVENT_MASK 0x801F +#define GLX_DAMAGED 0x8020 +#define GLX_SAVED 0x8021 +#define GLX_WINDOW 0x8022 +#define GLX_PBUFFER 0x8023 +#define GLX_PBUFFER_HEIGHT 0x8040 +#define GLX_PBUFFER_WIDTH 0x8041 +#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 +#define GLX_DONT_CARE 0xFFFFFFFF + +typedef XID GLXFBConfigID; +typedef XID GLXWindow; +typedef XID GLXPbuffer; +typedef struct __GLXFBConfigRec *GLXFBConfig; + +typedef struct { + int event_type; + int draw_type; + unsigned long serial; + Bool send_event; + Display *display; + GLXDrawable drawable; + unsigned int buffer_mask; + unsigned int aux_buffer; + int x, y; + int width, height; + int count; +} GLXPbufferClobberEvent; +typedef union __GLXEvent { + GLXPbufferClobberEvent glxpbufferclobber; + long pad[24]; +} GLXEvent; + +typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); +typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); +typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); +typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); +typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); +typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); +typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); +typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void); +typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); +typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); +typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); +typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); +typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); +typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); +typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); + +#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig) +#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext) +#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer) +#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap) +#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow) +#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer) +#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap) +#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow) +#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable) +#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib) +#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs) +#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent) +#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig) +#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent) +#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext) +#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable) +#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent) + +#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3) + +#endif /* GLX_VERSION_1_3 */ + +/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */ + +#ifndef GLX_VERSION_1_4 +#define GLX_VERSION_1_4 1 + +#define GLX_SAMPLE_BUFFERS 100000 +#define GLX_SAMPLES 100001 + +extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); + +#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4) + +#endif /* GLX_VERSION_1_4 */ + +/* -------------------------- GLX_3DFX_multisample ------------------------- */ + +#ifndef GLX_3DFX_multisample +#define GLX_3DFX_multisample 1 + +#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 +#define GLX_SAMPLES_3DFX 0x8051 + +#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample) + +#endif /* GLX_3DFX_multisample */ + +/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */ + +#ifndef GLX_ARB_fbconfig_float +#define GLX_ARB_fbconfig_float 1 + +#define GLX_RGBA_FLOAT_BIT 0x00000004 +#define GLX_RGBA_FLOAT_TYPE 0x20B9 + +#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float) + +#endif /* GLX_ARB_fbconfig_float */ + +/* ------------------------ GLX_ARB_get_proc_address ----------------------- */ + +#ifndef GLX_ARB_get_proc_address +#define GLX_ARB_get_proc_address 1 + +extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); + +#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address) + +#endif /* GLX_ARB_get_proc_address */ + +/* -------------------------- GLX_ARB_multisample -------------------------- */ + +#ifndef GLX_ARB_multisample +#define GLX_ARB_multisample 1 + +#define GLX_SAMPLE_BUFFERS_ARB 100000 +#define GLX_SAMPLES_ARB 100001 + +#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample) + +#endif /* GLX_ARB_multisample */ + +/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */ + +#ifndef GLX_ATI_pixel_format_float +#define GLX_ATI_pixel_format_float 1 + +#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100 + +#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float) + +#endif /* GLX_ATI_pixel_format_float */ + +/* ------------------------- GLX_ATI_render_texture ------------------------ */ + +#ifndef GLX_ATI_render_texture +#define GLX_ATI_render_texture 1 + +#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 +#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 +#define GLX_TEXTURE_FORMAT_ATI 0x9802 +#define GLX_TEXTURE_TARGET_ATI 0x9803 +#define GLX_MIPMAP_TEXTURE_ATI 0x9804 +#define GLX_TEXTURE_RGB_ATI 0x9805 +#define GLX_TEXTURE_RGBA_ATI 0x9806 +#define GLX_NO_TEXTURE_ATI 0x9807 +#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808 +#define GLX_TEXTURE_1D_ATI 0x9809 +#define GLX_TEXTURE_2D_ATI 0x980A +#define GLX_MIPMAP_LEVEL_ATI 0x980B +#define GLX_CUBE_MAP_FACE_ATI 0x980C +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 +#define GLX_FRONT_LEFT_ATI 0x9813 +#define GLX_FRONT_RIGHT_ATI 0x9814 +#define GLX_BACK_LEFT_ATI 0x9815 +#define GLX_BACK_RIGHT_ATI 0x9816 +#define GLX_AUX0_ATI 0x9817 +#define GLX_AUX1_ATI 0x9818 +#define GLX_AUX2_ATI 0x9819 +#define GLX_AUX3_ATI 0x981A +#define GLX_AUX4_ATI 0x981B +#define GLX_AUX5_ATI 0x981C +#define GLX_AUX6_ATI 0x981D +#define GLX_AUX7_ATI 0x981E +#define GLX_AUX8_ATI 0x981F +#define GLX_AUX9_ATI 0x9820 +#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 +#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 + +typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); +typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list); +typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); + +#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI) +#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI) +#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI) + +#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture) + +#endif /* GLX_ATI_render_texture */ + +/* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */ + +#ifndef GLX_EXT_fbconfig_packed_float +#define GLX_EXT_fbconfig_packed_float 1 + +#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 +#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 + +#define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float) + +#endif /* GLX_EXT_fbconfig_packed_float */ + +/* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */ + +#ifndef GLX_EXT_framebuffer_sRGB +#define GLX_EXT_framebuffer_sRGB 1 + +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 + +#define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB) + +#endif /* GLX_EXT_framebuffer_sRGB */ + +/* ------------------------- GLX_EXT_import_context ------------------------ */ + +#ifndef GLX_EXT_import_context +#define GLX_EXT_import_context 1 + +#define GLX_SHARE_CONTEXT_EXT 0x800A +#define GLX_VISUAL_ID_EXT 0x800B +#define GLX_SCREEN_EXT 0x800C + +typedef XID GLXContextID; + +typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context); +typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); +typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID); +typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value); + +#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT) +#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT) +#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT) +#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT) + +#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context) + +#endif /* GLX_EXT_import_context */ + +/* -------------------------- GLX_EXT_scene_marker ------------------------- */ + +#ifndef GLX_EXT_scene_marker +#define GLX_EXT_scene_marker 1 + +#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker) + +#endif /* GLX_EXT_scene_marker */ + +/* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */ + +#ifndef GLX_EXT_texture_from_pixmap +#define GLX_EXT_texture_from_pixmap 1 + +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_Y_INVERTED_EXT 0x20D4 +#define GLX_TEXTURE_FORMAT_EXT 0x20D5 +#define GLX_TEXTURE_TARGET_EXT 0x20D6 +#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 +#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 +#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 +#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA +#define GLX_TEXTURE_1D_EXT 0x20DB +#define GLX_TEXTURE_2D_EXT 0x20DC +#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD +#define GLX_FRONT_LEFT_EXT 0x20DE +#define GLX_FRONT_RIGHT_EXT 0x20DF +#define GLX_BACK_LEFT_EXT 0x20E0 +#define GLX_BACK_RIGHT_EXT 0x20E1 +#define GLX_AUX0_EXT 0x20E2 +#define GLX_AUX1_EXT 0x20E3 +#define GLX_AUX2_EXT 0x20E4 +#define GLX_AUX3_EXT 0x20E5 +#define GLX_AUX4_EXT 0x20E6 +#define GLX_AUX5_EXT 0x20E7 +#define GLX_AUX6_EXT 0x20E8 +#define GLX_AUX7_EXT 0x20E9 +#define GLX_AUX8_EXT 0x20EA +#define GLX_AUX9_EXT 0x20EB + +typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list); +typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer); + +#define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT) +#define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT) + +#define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap) + +#endif /* GLX_EXT_texture_from_pixmap */ + +/* -------------------------- GLX_EXT_visual_info -------------------------- */ + +#ifndef GLX_EXT_visual_info +#define GLX_EXT_visual_info 1 + +#define GLX_X_VISUAL_TYPE_EXT 0x22 +#define GLX_TRANSPARENT_TYPE_EXT 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 +#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 +#define GLX_NONE_EXT 0x8000 +#define GLX_TRUE_COLOR_EXT 0x8002 +#define GLX_DIRECT_COLOR_EXT 0x8003 +#define GLX_PSEUDO_COLOR_EXT 0x8004 +#define GLX_STATIC_COLOR_EXT 0x8005 +#define GLX_GRAY_SCALE_EXT 0x8006 +#define GLX_STATIC_GRAY_EXT 0x8007 +#define GLX_TRANSPARENT_RGB_EXT 0x8008 +#define GLX_TRANSPARENT_INDEX_EXT 0x8009 + +#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info) + +#endif /* GLX_EXT_visual_info */ + +/* ------------------------- GLX_EXT_visual_rating ------------------------- */ + +#ifndef GLX_EXT_visual_rating +#define GLX_EXT_visual_rating 1 + +#define GLX_VISUAL_CAVEAT_EXT 0x20 +#define GLX_SLOW_VISUAL_EXT 0x8001 +#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D + +#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating) + +#endif /* GLX_EXT_visual_rating */ + +/* -------------------------- GLX_MESA_agp_offset -------------------------- */ + +#ifndef GLX_MESA_agp_offset +#define GLX_MESA_agp_offset 1 + +typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer); + +#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA) + +#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset) + +#endif /* GLX_MESA_agp_offset */ + +/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */ + +#ifndef GLX_MESA_copy_sub_buffer +#define GLX_MESA_copy_sub_buffer 1 + +typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height); + +#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA) + +#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer) + +#endif /* GLX_MESA_copy_sub_buffer */ + +/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */ + +#ifndef GLX_MESA_pixmap_colormap +#define GLX_MESA_pixmap_colormap 1 + +typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); + +#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA) + +#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap) + +#endif /* GLX_MESA_pixmap_colormap */ + +/* ------------------------ GLX_MESA_release_buffers ----------------------- */ + +#ifndef GLX_MESA_release_buffers +#define GLX_MESA_release_buffers 1 + +typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d); + +#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA) + +#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers) + +#endif /* GLX_MESA_release_buffers */ + +/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */ + +#ifndef GLX_MESA_set_3dfx_mode +#define GLX_MESA_set_3dfx_mode 1 + +#define GLX_3DFX_WINDOW_MODE_MESA 0x1 +#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 + +typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode); + +#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA) + +#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode) + +#endif /* GLX_MESA_set_3dfx_mode */ + +/* -------------------------- GLX_NV_float_buffer -------------------------- */ + +#ifndef GLX_NV_float_buffer +#define GLX_NV_float_buffer 1 + +#define GLX_FLOAT_COMPONENTS_NV 0x20B0 + +#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer) + +#endif /* GLX_NV_float_buffer */ + +/* ----------------------- GLX_NV_vertex_array_range ----------------------- */ + +#ifndef GLX_NV_vertex_array_range +#define GLX_NV_vertex_array_range 1 + +typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); +typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer); + +#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV) +#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV) + +#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range) + +#endif /* GLX_NV_vertex_array_range */ + +/* -------------------------- GLX_OML_swap_method -------------------------- */ + +#ifndef GLX_OML_swap_method +#define GLX_OML_swap_method 1 + +#define GLX_SWAP_METHOD_OML 0x8060 +#define GLX_SWAP_EXCHANGE_OML 0x8061 +#define GLX_SWAP_COPY_OML 0x8062 +#define GLX_SWAP_UNDEFINED_OML 0x8063 + +#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method) + +#endif /* GLX_OML_swap_method */ + +/* -------------------------- GLX_OML_sync_control ------------------------- */ + +#if !defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include +#define GLX_OML_sync_control 1 + +typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator); +typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc); +typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); +typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc); +typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc); + +#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML) +#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML) +#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML) +#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML) +#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML) + +#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control) + +#endif /* GLX_OML_sync_control */ + +/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */ + +#ifndef GLX_SGIS_blended_overlay +#define GLX_SGIS_blended_overlay 1 + +#define GLX_BLENDED_RGBA_SGIS 0x8025 + +#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay) + +#endif /* GLX_SGIS_blended_overlay */ + +/* -------------------------- GLX_SGIS_color_range ------------------------- */ + +#ifndef GLX_SGIS_color_range +#define GLX_SGIS_color_range 1 + +#define GLX_MIN_RED_SGIS 0 +#define GLX_MAX_GREEN_SGIS 0 +#define GLX_MIN_BLUE_SGIS 0 +#define GLX_MAX_ALPHA_SGIS 0 +#define GLX_MIN_GREEN_SGIS 0 +#define GLX_MIN_ALPHA_SGIS 0 +#define GLX_MAX_RED_SGIS 0 +#define GLX_EXTENDED_RANGE_SGIS 0 +#define GLX_MAX_BLUE_SGIS 0 + +#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) + +#endif /* GLX_SGIS_color_range */ + +/* -------------------------- GLX_SGIS_multisample ------------------------- */ + +#ifndef GLX_SGIS_multisample +#define GLX_SGIS_multisample 1 + +#define GLX_SAMPLE_BUFFERS_SGIS 100000 +#define GLX_SAMPLES_SGIS 100001 + +#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample) + +#endif /* GLX_SGIS_multisample */ + +/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */ + +#ifndef GLX_SGIS_shared_multisample +#define GLX_SGIS_shared_multisample 1 + +#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 +#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 + +#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample) + +#endif /* GLX_SGIS_shared_multisample */ + +/* --------------------------- GLX_SGIX_fbconfig --------------------------- */ + +#ifndef GLX_SGIX_fbconfig +#define GLX_SGIX_fbconfig 1 + +#define GLX_WINDOW_BIT_SGIX 0x00000001 +#define GLX_RGBA_BIT_SGIX 0x00000001 +#define GLX_PIXMAP_BIT_SGIX 0x00000002 +#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 +#define GLX_SCREEN_EXT 0x800C +#define GLX_DRAWABLE_TYPE_SGIX 0x8010 +#define GLX_RENDER_TYPE_SGIX 0x8011 +#define GLX_X_RENDERABLE_SGIX 0x8012 +#define GLX_FBCONFIG_ID_SGIX 0x8013 +#define GLX_RGBA_TYPE_SGIX 0x8014 +#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 + +typedef XID GLXFBConfigIDSGIX; +typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; + +typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); +typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap); +typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value); +typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis); +typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config); + +#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX) +#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX) +#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX) +#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX) +#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX) +#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX) + +#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig) + +#endif /* GLX_SGIX_fbconfig */ + +/* --------------------------- GLX_SGIX_hyperpipe -------------------------- */ + +#ifndef GLX_SGIX_hyperpipe +#define GLX_SGIX_hyperpipe 1 + +#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 +#define GLX_PIPE_RECT_SGIX 0x00000001 +#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 +#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 +#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 +#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 +#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 +#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 +#define GLX_BAD_HYPERPIPE_SGIX 92 +#define GLX_HYPERPIPE_ID_SGIX 0x8030 + +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int networkId; +} GLXHyperpipeNetworkSGIX; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int XOrigin; + int YOrigin; + int maxHeight; + int maxWidth; +} GLXPipeRectLimits; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int channel; + unsigned int participationType; + int timeSlice; +} GLXHyperpipeConfigSGIX; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int srcXOrigin; + int srcYOrigin; + int srcWidth; + int srcHeight; + int destXOrigin; + int destYOrigin; + int destWidth; + int destHeight; +} GLXPipeRect; + +typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); +typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); +typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); +typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); +typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); +typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); +typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); +typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); + +#define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX) +#define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX) +#define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX) +#define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX) +#define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX) +#define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX) +#define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX) +#define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX) + +#define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe) + +#endif /* GLX_SGIX_hyperpipe */ + +/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */ + +#ifndef GLX_SGIX_pbuffer +#define GLX_SGIX_pbuffer 1 + +#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 +#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 +#define GLX_PBUFFER_BIT_SGIX 0x00000004 +#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 +#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 +#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 +#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 +#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 +#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 +#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 +#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 +#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 +#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A +#define GLX_PRESERVED_CONTENTS_SGIX 0x801B +#define GLX_LARGEST_PBUFFER_SGIX 0x801C +#define GLX_WIDTH_SGIX 0x801D +#define GLX_HEIGHT_SGIX 0x801E +#define GLX_EVENT_MASK_SGIX 0x801F +#define GLX_DAMAGED_SGIX 0x8020 +#define GLX_SAVED_SGIX 0x8021 +#define GLX_WINDOW_SGIX 0x8022 +#define GLX_PBUFFER_SGIX 0x8023 +#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 + +typedef XID GLXPbufferSGIX; +typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; + +typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list); +typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf); +typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask); +typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value); +typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask); + +#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX) +#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX) +#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX) +#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX) +#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX) + +#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer) + +#endif /* GLX_SGIX_pbuffer */ + +/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */ + +#ifndef GLX_SGIX_swap_barrier +#define GLX_SGIX_swap_barrier 1 + +typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); +typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); + +#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX) +#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX) + +#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier) + +#endif /* GLX_SGIX_swap_barrier */ + +/* -------------------------- GLX_SGIX_swap_group -------------------------- */ + +#ifndef GLX_SGIX_swap_group +#define GLX_SGIX_swap_group 1 + +typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); + +#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX) + +#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group) + +#endif /* GLX_SGIX_swap_group */ + +/* ------------------------- GLX_SGIX_video_resize ------------------------- */ + +#ifndef GLX_SGIX_video_resize +#define GLX_SGIX_video_resize 1 + +#define GLX_SYNC_FRAME_SGIX 0x00000000 +#define GLX_SYNC_SWAP_SGIX 0x00000001 + +typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window); +typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h); +typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype); +typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h); +typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); + +#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX) +#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX) +#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX) +#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX) +#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX) + +#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize) + +#endif /* GLX_SGIX_video_resize */ + +/* ---------------------- GLX_SGIX_visual_select_group --------------------- */ + +#ifndef GLX_SGIX_visual_select_group +#define GLX_SGIX_visual_select_group 1 + +#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 + +#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group) + +#endif /* GLX_SGIX_visual_select_group */ + +/* ---------------------------- GLX_SGI_cushion ---------------------------- */ + +#ifndef GLX_SGI_cushion +#define GLX_SGI_cushion 1 + +typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion); + +#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI) + +#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion) + +#endif /* GLX_SGI_cushion */ + +/* ----------------------- GLX_SGI_make_current_read ----------------------- */ + +#ifndef GLX_SGI_make_current_read +#define GLX_SGI_make_current_read 1 + +typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); +typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI) +#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI) + +#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read) + +#endif /* GLX_SGI_make_current_read */ + +/* -------------------------- GLX_SGI_swap_control ------------------------- */ + +#ifndef GLX_SGI_swap_control +#define GLX_SGI_swap_control 1 + +typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval); + +#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI) + +#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control) + +#endif /* GLX_SGI_swap_control */ + +/* --------------------------- GLX_SGI_video_sync -------------------------- */ + +#ifndef GLX_SGI_video_sync +#define GLX_SGI_video_sync 1 + +typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (uint* count); +typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count); + +#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI) +#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI) + +#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync) + +#endif /* GLX_SGI_video_sync */ + +/* --------------------- GLX_SUN_get_transparent_index --------------------- */ + +#ifndef GLX_SUN_get_transparent_index +#define GLX_SUN_get_transparent_index 1 + +typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex); + +#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN) + +#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index) + +#endif /* GLX_SUN_get_transparent_index */ + +/* -------------------------- GLX_SUN_video_resize ------------------------- */ + +#ifndef GLX_SUN_video_resize +#define GLX_SUN_video_resize 1 + +#define GLX_VIDEO_RESIZE_SUN 0x8171 +#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD + +typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor); +typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor); + +#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN) +#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN) + +#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize) + +#endif /* GLX_SUN_video_resize */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX +#define GLXEW_EXPORT +#else +#define GLXEW_EXPORT extern +#endif /* GLEW_MX */ + +extern PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay; + +extern PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig; +extern PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext; +extern PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer; +extern PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap; +extern PFNGLXCREATEWINDOWPROC __glewXCreateWindow; +extern PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer; +extern PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap; +extern PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow; +extern PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable; +extern PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib; +extern PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs; +extern PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent; +extern PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig; +extern PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent; +extern PFNGLXQUERYCONTEXTPROC __glewXQueryContext; +extern PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; +extern PFNGLXSELECTEVENTPROC __glewXSelectEvent; + +extern PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; +extern PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI; +extern PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI; + +extern PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT; +extern PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT; +extern PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT; +extern PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT; + +extern PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT; +extern PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT; + +extern PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA; + +extern PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA; + +extern PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA; + +extern PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA; + +extern PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA; + +extern PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; +extern PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; + +#ifdef GLX_OML_sync_control +extern PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML; +extern PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML; +extern PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML; +extern PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML; +extern PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML; +#endif + +extern PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX; +extern PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX; +extern PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX; +extern PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX; +extern PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX; +extern PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX; + +extern PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX; +extern PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX; +extern PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX; +extern PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX; +extern PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX; +extern PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX; +extern PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX; +extern PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX; + +extern PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX; +extern PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX; +extern PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX; +extern PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX; +extern PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX; + +extern PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX; +extern PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX; + +extern PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX; + +extern PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX; +extern PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX; +extern PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX; +extern PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX; +extern PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX; + +extern PFNGLXCUSHIONSGIPROC __glewXCushionSGI; + +extern PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI; +extern PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI; + +extern PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI; + +extern PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI; +extern PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI; + +extern PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN; + +extern PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN; +extern PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN; + +#if defined(GLEW_MX) +struct GLXEWContextStruct +{ +#endif /* GLEW_MX */ + +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_0; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_1; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_2; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_3; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_4; +GLXEW_EXPORT GLboolean __GLXEW_3DFX_multisample; +GLXEW_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; +GLXEW_EXPORT GLboolean __GLXEW_ARB_get_proc_address; +GLXEW_EXPORT GLboolean __GLXEW_ARB_multisample; +GLXEW_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; +GLXEW_EXPORT GLboolean __GLXEW_ATI_render_texture; +GLXEW_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; +GLXEW_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB; +GLXEW_EXPORT GLboolean __GLXEW_EXT_import_context; +GLXEW_EXPORT GLboolean __GLXEW_EXT_scene_marker; +GLXEW_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap; +GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_info; +GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_rating; +GLXEW_EXPORT GLboolean __GLXEW_MESA_agp_offset; +GLXEW_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer; +GLXEW_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap; +GLXEW_EXPORT GLboolean __GLXEW_MESA_release_buffers; +GLXEW_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode; +GLXEW_EXPORT GLboolean __GLXEW_NV_float_buffer; +GLXEW_EXPORT GLboolean __GLXEW_NV_vertex_array_range; +GLXEW_EXPORT GLboolean __GLXEW_OML_swap_method; +GLXEW_EXPORT GLboolean __GLXEW_OML_sync_control; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_color_range; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_multisample; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_shared_multisample; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_fbconfig; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_hyperpipe; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_pbuffer; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_barrier; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_group; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_video_resize; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_visual_select_group; +GLXEW_EXPORT GLboolean __GLXEW_SGI_cushion; +GLXEW_EXPORT GLboolean __GLXEW_SGI_make_current_read; +GLXEW_EXPORT GLboolean __GLXEW_SGI_swap_control; +GLXEW_EXPORT GLboolean __GLXEW_SGI_video_sync; +GLXEW_EXPORT GLboolean __GLXEW_SUN_get_transparent_index; +GLXEW_EXPORT GLboolean __GLXEW_SUN_video_resize; + +#ifdef GLEW_MX +}; /* GLXEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------ */ + +#ifdef GLEW_MX + +typedef struct GLXEWContextStruct GLXEWContext; +extern GLenum glxewContextInit (GLXEWContext* ctx); +extern GLboolean glxewContextIsSupported (GLXEWContext* ctx, const char* name); + +#define glxewInit() glxewContextInit(glxewGetContext()) +#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) + +#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) +#define GLXEW_GET_FUN(x) x + +#else /* GLEW_MX */ + +#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) +#define GLXEW_GET_FUN(x) x + +extern GLboolean glxewIsSupported (const char* name); + +#endif /* GLEW_MX */ + +extern GLboolean glxewGetExtension (const char* name); + +#ifdef __cplusplus +} +#endif + +#endif /* __glxew_h__ */ diff --git a/thirdparty/carve-1.4.0/external/GLEW/include/GL/wglew.h b/thirdparty/carve-1.4.0/external/GLEW/include/GL/wglew.h new file mode 100644 index 00000000..cce92c5d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/include/GL/wglew.h @@ -0,0 +1,1026 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* +** Copyright (c) 2007 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __wglew_h__ +#define __wglew_h__ +#define __WGLEW_H__ + +#ifdef __wglext_h_ +#error wglext.h included before wglew.h +#endif + +#define __wglext_h_ + +#if !defined(APIENTRY) && !defined(__CYGWIN__) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +#include +#endif + +/* + * GLEW_STATIC needs to be set when using the static version. + * GLEW_BUILD is set when building the DLL version. + */ +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# ifdef GLEW_BUILD +# define GLEWAPI extern __declspec(dllexport) +# else +# define GLEWAPI extern __declspec(dllimport) +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* -------------------------- WGL_3DFX_multisample ------------------------- */ + +#ifndef WGL_3DFX_multisample +#define WGL_3DFX_multisample 1 + +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 + +#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample) + +#endif /* WGL_3DFX_multisample */ + +/* ------------------------- WGL_3DL_stereo_control ------------------------ */ + +#ifndef WGL_3DL_stereo_control +#define WGL_3DL_stereo_control 1 + +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 + +typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); + +#define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL) + +#define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control) + +#endif /* WGL_3DL_stereo_control */ + +/* ------------------------- WGL_ARB_buffer_region ------------------------- */ + +#ifndef WGL_ARB_buffer_region +#define WGL_ARB_buffer_region 1 + +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 + +typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); +typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); +typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); + +#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB) +#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB) +#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB) +#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB) + +#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region) + +#endif /* WGL_ARB_buffer_region */ + +/* ----------------------- WGL_ARB_extensions_string ----------------------- */ + +#ifndef WGL_ARB_extensions_string +#define WGL_ARB_extensions_string 1 + +typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); + +#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB) + +#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string) + +#endif /* WGL_ARB_extensions_string */ + +/* ----------------------- WGL_ARB_make_current_read ----------------------- */ + +#ifndef WGL_ARB_make_current_read +#define WGL_ARB_make_current_read 1 + +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 + +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB) +#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB) + +#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read) + +#endif /* WGL_ARB_make_current_read */ + +/* -------------------------- WGL_ARB_multisample -------------------------- */ + +#ifndef WGL_ARB_multisample +#define WGL_ARB_multisample 1 + +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 + +#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample) + +#endif /* WGL_ARB_multisample */ + +/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */ + +#ifndef WGL_ARB_pbuffer +#define WGL_ARB_pbuffer 1 + +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 + +DECLARE_HANDLE(HPBUFFERARB); + +typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); + +#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB) +#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB) +#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB) +#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB) +#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB) + +#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer) + +#endif /* WGL_ARB_pbuffer */ + +/* -------------------------- WGL_ARB_pixel_format ------------------------- */ + +#ifndef WGL_ARB_pixel_format +#define WGL_ARB_pixel_format 1 + +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues); + +#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB) +#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB) +#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB) + +#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format) + +#endif /* WGL_ARB_pixel_format */ + +/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */ + +#ifndef WGL_ARB_pixel_format_float +#define WGL_ARB_pixel_format_float 1 + +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 + +#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float) + +#endif /* WGL_ARB_pixel_format_float */ + +/* ------------------------- WGL_ARB_render_texture ------------------------ */ + +#ifndef WGL_ARB_render_texture +#define WGL_ARB_render_texture 1 + +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 + +typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList); + +#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB) +#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB) +#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB) + +#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture) + +#endif /* WGL_ARB_render_texture */ + +/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ + +#ifndef WGL_ATI_pixel_format_float +#define WGL_ATI_pixel_format_float 1 + +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 + +#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float) + +#endif /* WGL_ATI_pixel_format_float */ + +/* -------------------- WGL_ATI_render_texture_rectangle ------------------- */ + +#ifndef WGL_ATI_render_texture_rectangle +#define WGL_ATI_render_texture_rectangle 1 + +#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 + +#define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle) + +#endif /* WGL_ATI_render_texture_rectangle */ + +/* -------------------------- WGL_EXT_depth_float -------------------------- */ + +#ifndef WGL_EXT_depth_float +#define WGL_EXT_depth_float 1 + +#define WGL_DEPTH_FLOAT_EXT 0x2040 + +#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float) + +#endif /* WGL_EXT_depth_float */ + +/* ---------------------- WGL_EXT_display_color_table ---------------------- */ + +#ifndef WGL_EXT_display_color_table +#define WGL_EXT_display_color_table 1 + +typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length); + +#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT) +#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT) +#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT) +#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT) + +#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table) + +#endif /* WGL_EXT_display_color_table */ + +/* ----------------------- WGL_EXT_extensions_string ----------------------- */ + +#ifndef WGL_EXT_extensions_string +#define WGL_EXT_extensions_string 1 + +typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); + +#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT) + +#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string) + +#endif /* WGL_EXT_extensions_string */ + +/* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */ + +#ifndef WGL_EXT_framebuffer_sRGB +#define WGL_EXT_framebuffer_sRGB 1 + +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 + +#define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB) + +#endif /* WGL_EXT_framebuffer_sRGB */ + +/* ----------------------- WGL_EXT_make_current_read ----------------------- */ + +#ifndef WGL_EXT_make_current_read +#define WGL_EXT_make_current_read 1 + +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 + +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT) +#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT) + +#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read) + +#endif /* WGL_EXT_make_current_read */ + +/* -------------------------- WGL_EXT_multisample -------------------------- */ + +#ifndef WGL_EXT_multisample +#define WGL_EXT_multisample 1 + +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_SAMPLES_EXT 0x2042 + +#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample) + +#endif /* WGL_EXT_multisample */ + +/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */ + +#ifndef WGL_EXT_pbuffer +#define WGL_EXT_pbuffer 1 + +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 + +DECLARE_HANDLE(HPBUFFEREXT); + +typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); + +#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT) +#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT) +#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT) +#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT) +#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT) + +#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer) + +#endif /* WGL_EXT_pbuffer */ + +/* -------------------------- WGL_EXT_pixel_format ------------------------- */ + +#ifndef WGL_EXT_pixel_format +#define WGL_EXT_pixel_format 1 + +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_EXT 0x202C + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues); + +#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT) +#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT) +#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT) + +#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format) + +#endif /* WGL_EXT_pixel_format */ + +/* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */ + +#ifndef WGL_EXT_pixel_format_packed_float +#define WGL_EXT_pixel_format_packed_float 1 + +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 + +#define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float) + +#endif /* WGL_EXT_pixel_format_packed_float */ + +/* -------------------------- WGL_EXT_swap_control ------------------------- */ + +#ifndef WGL_EXT_swap_control +#define WGL_EXT_swap_control 1 + +typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); +typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); + +#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT) +#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT) + +#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control) + +#endif /* WGL_EXT_swap_control */ + +/* --------------------- WGL_I3D_digital_video_control --------------------- */ + +#ifndef WGL_I3D_digital_video_control +#define WGL_I3D_digital_video_control 1 + +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 + +typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); +typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); + +#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D) +#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D) + +#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control) + +#endif /* WGL_I3D_digital_video_control */ + +/* ----------------------------- WGL_I3D_gamma ----------------------------- */ + +#ifndef WGL_I3D_gamma +#define WGL_I3D_gamma 1 + +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F + +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); + +#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D) +#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D) +#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D) +#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D) + +#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma) + +#endif /* WGL_I3D_gamma */ + +/* ---------------------------- WGL_I3D_genlock ---------------------------- */ + +#ifndef WGL_I3D_genlock +#define WGL_I3D_genlock 1 + +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C + +typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource); +typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay); + +#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D) +#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D) +#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D) +#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D) +#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D) +#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D) +#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D) +#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D) +#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D) +#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D) +#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D) +#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D) + +#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock) + +#endif /* WGL_I3D_genlock */ + +/* -------------------------- WGL_I3D_image_buffer ------------------------- */ + +#ifndef WGL_I3D_image_buffer +#define WGL_I3D_image_buffer 1 + +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 + +typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count); +typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); +typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); +typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count); + +#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D) +#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D) +#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D) +#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D) + +#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer) + +#endif /* WGL_I3D_image_buffer */ + +/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */ + +#ifndef WGL_I3D_swap_frame_lock +#define WGL_I3D_swap_frame_lock 1 + +typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag); + +#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D) +#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D) +#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D) +#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D) + +#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock) + +#endif /* WGL_I3D_swap_frame_lock */ + +/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */ + +#ifndef WGL_I3D_swap_frame_usage +#define WGL_I3D_swap_frame_usage 1 + +typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); + +#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D) +#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D) +#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D) +#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D) + +#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage) + +#endif /* WGL_I3D_swap_frame_usage */ + +/* -------------------------- WGL_NV_float_buffer -------------------------- */ + +#ifndef WGL_NV_float_buffer +#define WGL_NV_float_buffer 1 + +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 + +#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer) + +#endif /* WGL_NV_float_buffer */ + +/* -------------------------- WGL_NV_gpu_affinity -------------------------- */ + +#ifndef WGL_NV_gpu_affinity +#define WGL_NV_gpu_affinity 1 + +#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 + +DECLARE_HANDLE(HGPUNV); +typedef struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +} GPU_DEVICE, *PGPU_DEVICE; + +typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); +typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); +typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); + +#define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV) +#define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV) +#define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV) +#define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV) +#define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV) + +#define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity) + +#endif /* WGL_NV_gpu_affinity */ + +/* ---------------------- WGL_NV_render_depth_texture ---------------------- */ + +#ifndef WGL_NV_render_depth_texture +#define WGL_NV_render_depth_texture 1 + +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 + +#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture) + +#endif /* WGL_NV_render_depth_texture */ + +/* -------------------- WGL_NV_render_texture_rectangle -------------------- */ + +#ifndef WGL_NV_render_texture_rectangle +#define WGL_NV_render_texture_rectangle 1 + +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 + +#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle) + +#endif /* WGL_NV_render_texture_rectangle */ + +/* ----------------------- WGL_NV_vertex_array_range ----------------------- */ + +#ifndef WGL_NV_vertex_array_range +#define WGL_NV_vertex_array_range 1 + +typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); +typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); + +#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV) +#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV) + +#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range) + +#endif /* WGL_NV_vertex_array_range */ + +/* -------------------------- WGL_OML_sync_control ------------------------- */ + +#ifndef WGL_OML_sync_control +#define WGL_OML_sync_control 1 + +typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator); +typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc); +typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc); + +#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML) +#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML) +#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML) +#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML) +#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML) +#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML) + +#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control) + +#endif /* WGL_OML_sync_control */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX +#define WGLEW_EXPORT +#else +#define WGLEW_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#ifdef GLEW_MX +struct WGLEWContextStruct +{ +#endif /* GLEW_MX */ + +WGLEW_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL; + +WGLEW_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB; +WGLEW_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB; +WGLEW_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB; +WGLEW_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB; + +WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB; + +WGLEW_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB; +WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB; + +WGLEW_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB; +WGLEW_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB; +WGLEW_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB; +WGLEW_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB; +WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB; + +WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB; + +WGLEW_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB; +WGLEW_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB; +WGLEW_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB; + +WGLEW_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT; + +WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT; + +WGLEW_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT; +WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT; + +WGLEW_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT; +WGLEW_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT; +WGLEW_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT; +WGLEW_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT; +WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT; + +WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT; + +WGLEW_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT; +WGLEW_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT; + +WGLEW_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D; +WGLEW_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D; + +WGLEW_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D; +WGLEW_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D; +WGLEW_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D; +WGLEW_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D; + +WGLEW_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D; +WGLEW_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D; +WGLEW_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D; +WGLEW_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D; +WGLEW_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D; + +WGLEW_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D; +WGLEW_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D; +WGLEW_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D; +WGLEW_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D; + +WGLEW_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D; +WGLEW_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D; +WGLEW_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D; +WGLEW_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D; + +WGLEW_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D; +WGLEW_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D; +WGLEW_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D; +WGLEW_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D; + +WGLEW_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV; +WGLEW_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV; +WGLEW_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV; +WGLEW_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV; +WGLEW_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV; + +WGLEW_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV; +WGLEW_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV; + +WGLEW_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML; +WGLEW_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML; +WGLEW_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML; +WGLEW_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML; +WGLEW_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML; +WGLEW_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML; +WGLEW_EXPORT GLboolean __WGLEW_3DFX_multisample; +WGLEW_EXPORT GLboolean __WGLEW_3DL_stereo_control; +WGLEW_EXPORT GLboolean __WGLEW_ARB_buffer_region; +WGLEW_EXPORT GLboolean __WGLEW_ARB_extensions_string; +WGLEW_EXPORT GLboolean __WGLEW_ARB_make_current_read; +WGLEW_EXPORT GLboolean __WGLEW_ARB_multisample; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pbuffer; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; +WGLEW_EXPORT GLboolean __WGLEW_ARB_render_texture; +WGLEW_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; +WGLEW_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; +WGLEW_EXPORT GLboolean __WGLEW_EXT_depth_float; +WGLEW_EXPORT GLboolean __WGLEW_EXT_display_color_table; +WGLEW_EXPORT GLboolean __WGLEW_EXT_extensions_string; +WGLEW_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB; +WGLEW_EXPORT GLboolean __WGLEW_EXT_make_current_read; +WGLEW_EXPORT GLboolean __WGLEW_EXT_multisample; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pbuffer; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float; +WGLEW_EXPORT GLboolean __WGLEW_EXT_swap_control; +WGLEW_EXPORT GLboolean __WGLEW_I3D_digital_video_control; +WGLEW_EXPORT GLboolean __WGLEW_I3D_gamma; +WGLEW_EXPORT GLboolean __WGLEW_I3D_genlock; +WGLEW_EXPORT GLboolean __WGLEW_I3D_image_buffer; +WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock; +WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage; +WGLEW_EXPORT GLboolean __WGLEW_NV_float_buffer; +WGLEW_EXPORT GLboolean __WGLEW_NV_gpu_affinity; +WGLEW_EXPORT GLboolean __WGLEW_NV_render_depth_texture; +WGLEW_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle; +WGLEW_EXPORT GLboolean __WGLEW_NV_vertex_array_range; +WGLEW_EXPORT GLboolean __WGLEW_OML_sync_control; + +#ifdef GLEW_MX +}; /* WGLEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX + +typedef struct WGLEWContextStruct WGLEWContext; +GLEWAPI GLenum wglewContextInit (WGLEWContext* ctx); +GLEWAPI GLboolean wglewContextIsSupported (WGLEWContext* ctx, const char* name); + +#define wglewInit() wglewContextInit(wglewGetContext()) +#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) + +#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) +#define WGLEW_GET_FUN(x) wglewGetContext()->x + +#else /* GLEW_MX */ + +#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define WGLEW_GET_FUN(x) x + +GLEWAPI GLboolean wglewIsSupported (const char* name); + +#endif /* GLEW_MX */ + +GLEWAPI GLboolean wglewGetExtension (const char* name); + +#ifdef __cplusplus +} +#endif + +#undef GLEWAPI + +#endif /* __wglew_h__ */ diff --git a/thirdparty/carve-1.4.0/external/GLEW/src/glew.c b/thirdparty/carve-1.4.0/external/GLEW/src/glew.c new file mode 100644 index 00000000..61af495b --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLEW/src/glew.c @@ -0,0 +1,10835 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#if defined(_WIN32) +# include +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +# include +#endif + +/* + * Define glewGetContext and related helper macros. + */ +#ifdef GLEW_MX +# define glewGetContext() ctx +# ifdef _WIN32 +# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx +# define GLEW_CONTEXT_ARG_VAR_INIT ctx +# define wglewGetContext() ctx +# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx +# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx +# else /* _WIN32 */ +# define GLEW_CONTEXT_ARG_DEF_INIT void +# define GLEW_CONTEXT_ARG_VAR_INIT +# define glxewGetContext() ctx +# define GLXEW_CONTEXT_ARG_DEF_INIT void +# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx +# endif /* _WIN32 */ +# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx +#else /* GLEW_MX */ +# define GLEW_CONTEXT_ARG_DEF_INIT void +# define GLEW_CONTEXT_ARG_VAR_INIT +# define GLEW_CONTEXT_ARG_DEF_LIST void +# define WGLEW_CONTEXT_ARG_DEF_INIT void +# define WGLEW_CONTEXT_ARG_DEF_LIST void +# define GLXEW_CONTEXT_ARG_DEF_INIT void +# define GLXEW_CONTEXT_ARG_DEF_LIST void +#endif /* GLEW_MX */ + +#if defined(__APPLE__) +#include +#include +#include + +void* NSGLGetProcAddress (const GLubyte *name) +{ + static const struct mach_header* image = NULL; + NSSymbol symbol; + char* symbolName; + if (NULL == image) + { + image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); + } + /* prepend a '_' for the Unix C symbol mangling convention */ + symbolName = malloc(strlen((const char*)name) + 2); + strcpy(symbolName+1, (const char*)name); + symbolName[0] = '_'; + symbol = NULL; + /* if (NSIsSymbolNameDefined(symbolName)) + symbol = NSLookupAndBindSymbol(symbolName); */ + symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; + free(symbolName); + return symbol ? NSAddressOfSymbol(symbol) : NULL; +} +#endif /* __APPLE__ */ + +#if defined(__sgi) || defined (__sun) +#include +#include +#include + +void* dlGetProcAddress (const GLubyte* name) +{ + static void* h = NULL; + static void* gpa; + + if (h == NULL) + { + if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; + gpa = dlsym(h, "glXGetProcAddress"); + } + + if (gpa != NULL) + return ((void*(*)(const GLubyte*))gpa)(name); + else + return dlsym(h, (const char*)name); +} +#endif /* __sgi || __sun */ + +/* + * Define glewGetProcAddress. + */ +#if defined(_WIN32) +# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) +#else +# if defined(__APPLE__) +# define glewGetProcAddress(name) NSGLGetProcAddress(name) +# else +# if defined(__sgi) || defined(__sun) +# define glewGetProcAddress(name) dlGetProcAddress(name) +# else /* __linux */ +# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) +# endif +# endif +#endif + +/* + * Define GLboolean const cast. + */ +#define CONST_CAST(x) (*(GLboolean*)&x) + +/* + * GLEW, just like OpenGL or GLU, does not rely on the standard C library. + * These functions implement the functionality required in this file. + */ +static GLuint _glewStrLen (const GLubyte* s) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0') i++; + return i; +} + +static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0' && s[i] != c) i++; + return s[i] == c ? i : 0; +} + +static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) +{ + GLuint i=0; + if(a == NULL || b == NULL) + return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; + while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; + return i == n ? GL_TRUE : GL_FALSE; +} + +static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) + { + (*a)++; + (*na)--; + } + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +#if !defined(_WIN32) || !defined(GLEW_MX) + +PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL; +PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL; +PFNGLTEXIMAGE3DPROC __glewTexImage3D = NULL; +PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D = NULL; + +PFNGLACTIVETEXTUREPROC __glewActiveTexture = NULL; +PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage = NULL; +PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd = NULL; +PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf = NULL; +PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd = NULL; +PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf = NULL; +PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d = NULL; +PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv = NULL; +PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f = NULL; +PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv = NULL; +PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i = NULL; +PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv = NULL; +PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s = NULL; +PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv = NULL; +PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d = NULL; +PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv = NULL; +PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f = NULL; +PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv = NULL; +PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i = NULL; +PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv = NULL; +PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s = NULL; +PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv = NULL; +PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d = NULL; +PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv = NULL; +PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f = NULL; +PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv = NULL; +PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i = NULL; +PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv = NULL; +PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s = NULL; +PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv = NULL; +PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d = NULL; +PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv = NULL; +PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f = NULL; +PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv = NULL; +PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i = NULL; +PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv = NULL; +PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s = NULL; +PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv = NULL; +PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage = NULL; + +PFNGLBLENDCOLORPROC __glewBlendColor = NULL; +PFNGLBLENDEQUATIONPROC __glewBlendEquation = NULL; +PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate = NULL; +PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer = NULL; +PFNGLFOGCOORDDPROC __glewFogCoordd = NULL; +PFNGLFOGCOORDDVPROC __glewFogCoorddv = NULL; +PFNGLFOGCOORDFPROC __glewFogCoordf = NULL; +PFNGLFOGCOORDFVPROC __glewFogCoordfv = NULL; +PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays = NULL; +PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements = NULL; +PFNGLPOINTPARAMETERFPROC __glewPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC __glewPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv = NULL; +PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b = NULL; +PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv = NULL; +PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d = NULL; +PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv = NULL; +PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f = NULL; +PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv = NULL; +PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i = NULL; +PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv = NULL; +PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s = NULL; +PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv = NULL; +PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub = NULL; +PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv = NULL; +PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui = NULL; +PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv = NULL; +PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us = NULL; +PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv = NULL; +PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer = NULL; +PFNGLWINDOWPOS2DPROC __glewWindowPos2d = NULL; +PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv = NULL; +PFNGLWINDOWPOS2FPROC __glewWindowPos2f = NULL; +PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv = NULL; +PFNGLWINDOWPOS2IPROC __glewWindowPos2i = NULL; +PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv = NULL; +PFNGLWINDOWPOS2SPROC __glewWindowPos2s = NULL; +PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv = NULL; +PFNGLWINDOWPOS3DPROC __glewWindowPos3d = NULL; +PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv = NULL; +PFNGLWINDOWPOS3FPROC __glewWindowPos3f = NULL; +PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv = NULL; +PFNGLWINDOWPOS3IPROC __glewWindowPos3i = NULL; +PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv = NULL; +PFNGLWINDOWPOS3SPROC __glewWindowPos3s = NULL; +PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv = NULL; + +PFNGLBEGINQUERYPROC __glewBeginQuery = NULL; +PFNGLBINDBUFFERPROC __glewBindBuffer = NULL; +PFNGLBUFFERDATAPROC __glewBufferData = NULL; +PFNGLBUFFERSUBDATAPROC __glewBufferSubData = NULL; +PFNGLDELETEBUFFERSPROC __glewDeleteBuffers = NULL; +PFNGLDELETEQUERIESPROC __glewDeleteQueries = NULL; +PFNGLENDQUERYPROC __glewEndQuery = NULL; +PFNGLGENBUFFERSPROC __glewGenBuffers = NULL; +PFNGLGENQUERIESPROC __glewGenQueries = NULL; +PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData = NULL; +PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC __glewGetQueryiv = NULL; +PFNGLISBUFFERPROC __glewIsBuffer = NULL; +PFNGLISQUERYPROC __glewIsQuery = NULL; +PFNGLMAPBUFFERPROC __glewMapBuffer = NULL; +PFNGLUNMAPBUFFERPROC __glewUnmapBuffer = NULL; + +PFNGLATTACHSHADERPROC __glewAttachShader = NULL; +PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate = NULL; +PFNGLCOMPILESHADERPROC __glewCompileShader = NULL; +PFNGLCREATEPROGRAMPROC __glewCreateProgram = NULL; +PFNGLCREATESHADERPROC __glewCreateShader = NULL; +PFNGLDELETEPROGRAMPROC __glewDeleteProgram = NULL; +PFNGLDELETESHADERPROC __glewDeleteShader = NULL; +PFNGLDETACHSHADERPROC __glewDetachShader = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray = NULL; +PFNGLDRAWBUFFERSPROC __glewDrawBuffers = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray = NULL; +PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib = NULL; +PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform = NULL; +PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation = NULL; +PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC __glewGetProgramiv = NULL; +PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog = NULL; +PFNGLGETSHADERSOURCEPROC __glewGetShaderSource = NULL; +PFNGLGETSHADERIVPROC __glewGetShaderiv = NULL; +PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation = NULL; +PFNGLGETUNIFORMFVPROC __glewGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC __glewGetUniformiv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv = NULL; +PFNGLISPROGRAMPROC __glewIsProgram = NULL; +PFNGLISSHADERPROC __glewIsShader = NULL; +PFNGLLINKPROGRAMPROC __glewLinkProgram = NULL; +PFNGLSHADERSOURCEPROC __glewShaderSource = NULL; +PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate = NULL; +PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate = NULL; +PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate = NULL; +PFNGLUNIFORM1FPROC __glewUniform1f = NULL; +PFNGLUNIFORM1FVPROC __glewUniform1fv = NULL; +PFNGLUNIFORM1IPROC __glewUniform1i = NULL; +PFNGLUNIFORM1IVPROC __glewUniform1iv = NULL; +PFNGLUNIFORM2FPROC __glewUniform2f = NULL; +PFNGLUNIFORM2FVPROC __glewUniform2fv = NULL; +PFNGLUNIFORM2IPROC __glewUniform2i = NULL; +PFNGLUNIFORM2IVPROC __glewUniform2iv = NULL; +PFNGLUNIFORM3FPROC __glewUniform3f = NULL; +PFNGLUNIFORM3FVPROC __glewUniform3fv = NULL; +PFNGLUNIFORM3IPROC __glewUniform3i = NULL; +PFNGLUNIFORM3IVPROC __glewUniform3iv = NULL; +PFNGLUNIFORM4FPROC __glewUniform4f = NULL; +PFNGLUNIFORM4FVPROC __glewUniform4fv = NULL; +PFNGLUNIFORM4IPROC __glewUniform4i = NULL; +PFNGLUNIFORM4IVPROC __glewUniform4iv = NULL; +PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv = NULL; +PFNGLUSEPROGRAMPROC __glewUseProgram = NULL; +PFNGLVALIDATEPROGRAMPROC __glewValidateProgram = NULL; +PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer = NULL; + +PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv = NULL; + +PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX = NULL; + +PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; +PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; +PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; +PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE = NULL; +PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE = NULL; + +PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE = NULL; +PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE = NULL; +PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE = NULL; +PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE = NULL; +PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE = NULL; +PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE = NULL; +PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE = NULL; +PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE = NULL; + +PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE = NULL; + +PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE = NULL; +PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE = NULL; + +PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE = NULL; +PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE = NULL; +PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE = NULL; +PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE = NULL; + +PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE = NULL; +PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE = NULL; +PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE = NULL; + +PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; + +PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB = NULL; + +PFNGLCOLORSUBTABLEPROC __glewColorSubTable = NULL; +PFNGLCOLORTABLEPROC __glewColorTable = NULL; +PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv = NULL; +PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv = NULL; +PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D = NULL; +PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D = NULL; +PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf = NULL; +PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv = NULL; +PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri = NULL; +PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv = NULL; +PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable = NULL; +PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable = NULL; +PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D = NULL; +PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D = NULL; +PFNGLGETCOLORTABLEPROC __glewGetColorTable = NULL; +PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv = NULL; +PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv = NULL; +PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter = NULL; +PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv = NULL; +PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv = NULL; +PFNGLGETHISTOGRAMPROC __glewGetHistogram = NULL; +PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv = NULL; +PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv = NULL; +PFNGLGETMINMAXPROC __glewGetMinmax = NULL; +PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv = NULL; +PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv = NULL; +PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter = NULL; +PFNGLHISTOGRAMPROC __glewHistogram = NULL; +PFNGLMINMAXPROC __glewMinmax = NULL; +PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; +PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; +PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; + +PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB = NULL; +PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB = NULL; +PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; +PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; +PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; + +PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB = NULL; + +PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB = NULL; +PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB = NULL; +PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB = NULL; +PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB = NULL; +PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB = NULL; +PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB = NULL; +PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB = NULL; +PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB = NULL; +PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB = NULL; +PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB = NULL; +PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB = NULL; +PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB = NULL; +PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB = NULL; +PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB = NULL; +PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB = NULL; +PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB = NULL; +PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB = NULL; +PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB = NULL; +PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB = NULL; +PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB = NULL; +PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB = NULL; +PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB = NULL; +PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB = NULL; +PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB = NULL; +PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB = NULL; +PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB = NULL; +PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB = NULL; +PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB = NULL; +PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB = NULL; +PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB = NULL; +PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB = NULL; +PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB = NULL; +PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB = NULL; +PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB = NULL; + +PFNGLBEGINQUERYARBPROC __glewBeginQueryARB = NULL; +PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB = NULL; +PFNGLENDQUERYARBPROC __glewEndQueryARB = NULL; +PFNGLGENQUERIESARBPROC __glewGenQueriesARB = NULL; +PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB = NULL; +PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB = NULL; +PFNGLGETQUERYIVARBPROC __glewGetQueryivARB = NULL; +PFNGLISQUERYARBPROC __glewIsQueryARB = NULL; + +PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB = NULL; +PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB = NULL; + +PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB = NULL; +PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB = NULL; +PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB = NULL; +PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB = NULL; +PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB = NULL; +PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB = NULL; +PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB = NULL; +PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB = NULL; +PFNGLGETHANDLEARBPROC __glewGetHandleARB = NULL; +PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB = NULL; +PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB = NULL; +PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB = NULL; +PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB = NULL; +PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB = NULL; +PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB = NULL; +PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB = NULL; +PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB = NULL; +PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB = NULL; +PFNGLUNIFORM1FARBPROC __glewUniform1fARB = NULL; +PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB = NULL; +PFNGLUNIFORM1IARBPROC __glewUniform1iARB = NULL; +PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB = NULL; +PFNGLUNIFORM2FARBPROC __glewUniform2fARB = NULL; +PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB = NULL; +PFNGLUNIFORM2IARBPROC __glewUniform2iARB = NULL; +PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB = NULL; +PFNGLUNIFORM3FARBPROC __glewUniform3fARB = NULL; +PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB = NULL; +PFNGLUNIFORM3IARBPROC __glewUniform3iARB = NULL; +PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB = NULL; +PFNGLUNIFORM4FARBPROC __glewUniform4fARB = NULL; +PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB = NULL; +PFNGLUNIFORM4IARBPROC __glewUniform4iARB = NULL; +PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB = NULL; +PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB = NULL; +PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB = NULL; +PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB = NULL; +PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB = NULL; +PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB = NULL; + +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB = NULL; + +PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB = NULL; +PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB = NULL; +PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB = NULL; +PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB = NULL; + +PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB = NULL; +PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB = NULL; +PFNGLWEIGHTBVARBPROC __glewWeightbvARB = NULL; +PFNGLWEIGHTDVARBPROC __glewWeightdvARB = NULL; +PFNGLWEIGHTFVARBPROC __glewWeightfvARB = NULL; +PFNGLWEIGHTIVARBPROC __glewWeightivARB = NULL; +PFNGLWEIGHTSVARBPROC __glewWeightsvARB = NULL; +PFNGLWEIGHTUBVARBPROC __glewWeightubvARB = NULL; +PFNGLWEIGHTUIVARBPROC __glewWeightuivARB = NULL; +PFNGLWEIGHTUSVARBPROC __glewWeightusvARB = NULL; + +PFNGLBINDBUFFERARBPROC __glewBindBufferARB = NULL; +PFNGLBUFFERDATAARBPROC __glewBufferDataARB = NULL; +PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB = NULL; +PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB = NULL; +PFNGLGENBUFFERSARBPROC __glewGenBuffersARB = NULL; +PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB = NULL; +PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB = NULL; +PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB = NULL; +PFNGLISBUFFERARBPROC __glewIsBufferARB = NULL; +PFNGLMAPBUFFERARBPROC __glewMapBufferARB = NULL; +PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB = NULL; + +PFNGLBINDPROGRAMARBPROC __glewBindProgramARB = NULL; +PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB = NULL; +PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB = NULL; +PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB = NULL; +PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB = NULL; +PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB = NULL; +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB = NULL; +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB = NULL; +PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB = NULL; +PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB = NULL; +PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB = NULL; +PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB = NULL; +PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB = NULL; +PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB = NULL; +PFNGLISPROGRAMARBPROC __glewIsProgramARB = NULL; +PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB = NULL; +PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB = NULL; +PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB = NULL; +PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB = NULL; +PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB = NULL; +PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB = NULL; +PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB = NULL; +PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB = NULL; +PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB = NULL; +PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB = NULL; +PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB = NULL; +PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB = NULL; +PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB = NULL; +PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB = NULL; +PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB = NULL; +PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB = NULL; +PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB = NULL; +PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB = NULL; +PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB = NULL; +PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB = NULL; +PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB = NULL; +PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB = NULL; +PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB = NULL; +PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB = NULL; +PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB = NULL; +PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB = NULL; +PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB = NULL; +PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB = NULL; +PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB = NULL; +PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB = NULL; +PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB = NULL; +PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB = NULL; +PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB = NULL; +PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB = NULL; +PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB = NULL; +PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB = NULL; +PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB = NULL; +PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB = NULL; +PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB = NULL; +PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB = NULL; +PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB = NULL; +PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB = NULL; + +PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB = NULL; +PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB = NULL; +PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB = NULL; + +PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB = NULL; +PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB = NULL; +PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB = NULL; +PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB = NULL; +PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB = NULL; +PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB = NULL; +PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB = NULL; +PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB = NULL; +PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB = NULL; +PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB = NULL; +PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB = NULL; +PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB = NULL; +PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB = NULL; +PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB = NULL; +PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB = NULL; +PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB = NULL; + +PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI = NULL; + +PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI = NULL; +PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI = NULL; +PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI = NULL; + +PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI = NULL; +PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI = NULL; +PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI = NULL; +PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI = NULL; + +PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI = NULL; +PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI = NULL; +PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI = NULL; +PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI = NULL; +PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI = NULL; +PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI = NULL; +PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI = NULL; +PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI = NULL; +PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI = NULL; +PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI = NULL; +PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI = NULL; +PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI = NULL; +PFNGLSAMPLEMAPATIPROC __glewSampleMapATI = NULL; +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI = NULL; + +PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI = NULL; +PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI = NULL; + +PFNGLPNTRIANGLESFATIPROC __glPNTrianglewesfATI = NULL; +PFNGLPNTRIANGLESIATIPROC __glPNTrianglewesiATI = NULL; + +PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI = NULL; +PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI = NULL; + +PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI = NULL; +PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI = NULL; +PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI = NULL; +PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI = NULL; +PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI = NULL; +PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI = NULL; +PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI = NULL; +PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI = NULL; +PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI = NULL; +PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI = NULL; +PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI = NULL; +PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI = NULL; + +PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI = NULL; +PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI = NULL; +PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI = NULL; + +PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI = NULL; +PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI = NULL; +PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI = NULL; +PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI = NULL; +PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI = NULL; +PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI = NULL; +PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI = NULL; +PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI = NULL; +PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI = NULL; +PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI = NULL; +PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI = NULL; +PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI = NULL; +PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI = NULL; +PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI = NULL; +PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI = NULL; +PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI = NULL; +PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI = NULL; +PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI = NULL; +PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI = NULL; +PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI = NULL; +PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI = NULL; +PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI = NULL; +PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI = NULL; +PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI = NULL; +PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI = NULL; +PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI = NULL; +PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI = NULL; +PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI = NULL; +PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI = NULL; +PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI = NULL; +PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI = NULL; +PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI = NULL; +PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI = NULL; +PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI = NULL; +PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI = NULL; +PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI = NULL; +PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI = NULL; + +PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT = NULL; +PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT = NULL; +PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT = NULL; + +PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT = NULL; + +PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT = NULL; + +PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT = NULL; + +PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT = NULL; + +PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT = NULL; +PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT = NULL; + +PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT = NULL; +PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT = NULL; + +PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT = NULL; +PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT = NULL; +PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT = NULL; +PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT = NULL; +PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT = NULL; +PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT = NULL; +PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT = NULL; + +PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT = NULL; +PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT = NULL; + +PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT = NULL; +PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT = NULL; + +PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT = NULL; +PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT = NULL; + +PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT = NULL; + +PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT = NULL; +PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT = NULL; +PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT = NULL; +PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT = NULL; +PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT = NULL; +PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT = NULL; + +PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT = NULL; +PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT = NULL; + +PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT = NULL; + +PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT = NULL; +PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT = NULL; +PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT = NULL; +PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT = NULL; +PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT = NULL; + +PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT = NULL; +PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT = NULL; +PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT = NULL; +PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT = NULL; +PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT = NULL; +PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT = NULL; +PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT = NULL; +PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT = NULL; +PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT = NULL; +PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT = NULL; +PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT = NULL; +PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT = NULL; +PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT = NULL; +PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT = NULL; +PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT = NULL; +PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT = NULL; +PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT = NULL; +PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT = NULL; + +PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT = NULL; + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT = NULL; + +PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT = NULL; +PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT = NULL; +PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT = NULL; +PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT = NULL; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT = NULL; +PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT = NULL; +PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT = NULL; +PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT = NULL; +PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT = NULL; +PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT = NULL; +PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT = NULL; + +PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT = NULL; +PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT = NULL; +PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT = NULL; +PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT = NULL; + +PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT = NULL; +PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT = NULL; + +PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT = NULL; +PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT = NULL; +PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT = NULL; +PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT = NULL; +PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT = NULL; +PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT = NULL; +PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT = NULL; +PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT = NULL; +PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT = NULL; +PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT = NULL; +PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT = NULL; +PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT = NULL; +PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT = NULL; +PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT = NULL; +PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT = NULL; +PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT = NULL; +PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT = NULL; +PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT = NULL; +PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT = NULL; +PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT = NULL; +PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT = NULL; +PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT = NULL; +PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT = NULL; +PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT = NULL; +PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT = NULL; +PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT = NULL; +PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT = NULL; +PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT = NULL; +PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT = NULL; +PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT = NULL; +PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT = NULL; +PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT = NULL; +PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT = NULL; +PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT = NULL; + +PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT = NULL; +PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT = NULL; +PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT = NULL; +PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT = NULL; +PFNGLHISTOGRAMEXTPROC __glewHistogramEXT = NULL; +PFNGLMINMAXEXTPROC __glewMinmaxEXT = NULL; +PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT = NULL; +PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT = NULL; + +PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT = NULL; + +PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT = NULL; + +PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT = NULL; +PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT = NULL; +PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT = NULL; + +PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT = NULL; +PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT = NULL; + +PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT = NULL; +PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT = NULL; + +PFNGLCOLORTABLEEXTPROC __glewColorTableEXT = NULL; +PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT = NULL; + +PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT = NULL; +PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT = NULL; + +PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT = NULL; +PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT = NULL; + +PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT = NULL; + +PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT = NULL; +PFNGLENDSCENEEXTPROC __glewEndSceneEXT = NULL; + +PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT = NULL; +PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT = NULL; +PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT = NULL; +PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT = NULL; +PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT = NULL; +PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT = NULL; +PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT = NULL; +PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT = NULL; +PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT = NULL; +PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT = NULL; +PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT = NULL; +PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT = NULL; +PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT = NULL; +PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT = NULL; +PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT = NULL; +PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT = NULL; +PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT = NULL; + +PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT = NULL; + +PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT = NULL; +PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT = NULL; +PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT = NULL; + +PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT = NULL; + +PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT = NULL; + +PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT = NULL; +PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT = NULL; +PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT = NULL; +PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT = NULL; +PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT = NULL; +PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT = NULL; + +PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT = NULL; +PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT = NULL; +PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT = NULL; +PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT = NULL; +PFNGLISTEXTUREEXTPROC __glewIsTextureEXT = NULL; +PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT = NULL; + +PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT = NULL; + +PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT = NULL; +PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT = NULL; + +PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT = NULL; +PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT = NULL; +PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT = NULL; +PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT = NULL; +PFNGLGETPOINTERVEXTPROC __glewGetPointervEXT = NULL; +PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT = NULL; +PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT = NULL; +PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT = NULL; +PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT = NULL; + +PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT = NULL; +PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT = NULL; +PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT = NULL; +PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT = NULL; +PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT = NULL; +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT = NULL; +PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT = NULL; +PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT = NULL; +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT = NULL; +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT = NULL; +PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT = NULL; +PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT = NULL; +PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT = NULL; +PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT = NULL; +PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT = NULL; +PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT = NULL; +PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT = NULL; +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT = NULL; +PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT = NULL; +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT = NULL; +PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT = NULL; +PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT = NULL; +PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT = NULL; +PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT = NULL; +PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT = NULL; +PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT = NULL; +PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT = NULL; +PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT = NULL; +PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT = NULL; +PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT = NULL; +PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT = NULL; +PFNGLSWIZZLEEXTPROC __glewSwizzleEXT = NULL; +PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT = NULL; +PFNGLVARIANTBVEXTPROC __glewVariantbvEXT = NULL; +PFNGLVARIANTDVEXTPROC __glewVariantdvEXT = NULL; +PFNGLVARIANTFVEXTPROC __glewVariantfvEXT = NULL; +PFNGLVARIANTIVEXTPROC __glewVariantivEXT = NULL; +PFNGLVARIANTSVEXTPROC __glewVariantsvEXT = NULL; +PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT = NULL; +PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT = NULL; +PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT = NULL; +PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT = NULL; + +PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL; +PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL; +PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL; + +PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL; + +PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY = NULL; + +PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP = NULL; +PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP = NULL; + +PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM = NULL; +PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM = NULL; + +PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM = NULL; +PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM = NULL; +PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM = NULL; +PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM = NULL; +PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM = NULL; +PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; +PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; +PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; + +PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; +PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; +PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; +PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL = NULL; + +PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL = NULL; +PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL = NULL; + +PFNGLBUFFERREGIONENABLEDEXTPROC __glewBufferRegionEnabledEXT = NULL; +PFNGLDELETEBUFFERREGIONEXTPROC __glewDeleteBufferRegionEXT = NULL; +PFNGLDRAWBUFFERREGIONEXTPROC __glewDrawBufferRegionEXT = NULL; +PFNGLNEWBUFFERREGIONEXTPROC __glewNewBufferRegionEXT = NULL; +PFNGLREADBUFFERREGIONEXTPROC __glewReadBufferRegionEXT = NULL; + +PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA = NULL; + +PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA = NULL; +PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA = NULL; +PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA = NULL; +PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA = NULL; +PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA = NULL; +PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA = NULL; +PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA = NULL; +PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA = NULL; +PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA = NULL; +PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA = NULL; +PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA = NULL; +PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA = NULL; +PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA = NULL; +PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA = NULL; +PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA = NULL; +PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA = NULL; +PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA = NULL; +PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA = NULL; +PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA = NULL; +PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA = NULL; +PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA = NULL; +PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; +PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; +PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; + +PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; +PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; +PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; + +PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; +PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; +PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; +PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV = NULL; +PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV = NULL; +PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV = NULL; +PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV = NULL; +PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV = NULL; +PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV = NULL; + +PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV = NULL; +PFNGLFINISHFENCENVPROC __glewFinishFenceNV = NULL; +PFNGLGENFENCESNVPROC __glewGenFencesNV = NULL; +PFNGLGETFENCEIVNVPROC __glewGetFenceivNV = NULL; +PFNGLISFENCENVPROC __glewIsFenceNV = NULL; +PFNGLSETFENCENVPROC __glewSetFenceNV = NULL; +PFNGLTESTFENCENVPROC __glewTestFenceNV = NULL; + +PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV = NULL; +PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV = NULL; + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV = NULL; + +PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL; + +PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL; +PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV = NULL; +PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV = NULL; + +PFNGLCOLOR3HNVPROC __glewColor3hNV = NULL; +PFNGLCOLOR3HVNVPROC __glewColor3hvNV = NULL; +PFNGLCOLOR4HNVPROC __glewColor4hNV = NULL; +PFNGLCOLOR4HVNVPROC __glewColor4hvNV = NULL; +PFNGLFOGCOORDHNVPROC __glewFogCoordhNV = NULL; +PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV = NULL; +PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV = NULL; +PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV = NULL; +PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV = NULL; +PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV = NULL; +PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV = NULL; +PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV = NULL; +PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV = NULL; +PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV = NULL; +PFNGLNORMAL3HNVPROC __glewNormal3hNV = NULL; +PFNGLNORMAL3HVNVPROC __glewNormal3hvNV = NULL; +PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV = NULL; +PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV = NULL; +PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV = NULL; +PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV = NULL; +PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV = NULL; +PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV = NULL; +PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV = NULL; +PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV = NULL; +PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV = NULL; +PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV = NULL; +PFNGLVERTEX2HNVPROC __glewVertex2hNV = NULL; +PFNGLVERTEX2HVNVPROC __glewVertex2hvNV = NULL; +PFNGLVERTEX3HNVPROC __glewVertex3hNV = NULL; +PFNGLVERTEX3HVNVPROC __glewVertex3hvNV = NULL; +PFNGLVERTEX4HNVPROC __glewVertex4hNV = NULL; +PFNGLVERTEX4HVNVPROC __glewVertex4hvNV = NULL; +PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV = NULL; +PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV = NULL; +PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV = NULL; +PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV = NULL; +PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV = NULL; +PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV = NULL; +PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV = NULL; +PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV = NULL; +PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV = NULL; +PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV = NULL; +PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV = NULL; +PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV = NULL; +PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV = NULL; +PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV = NULL; + +PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV = NULL; +PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV = NULL; +PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV = NULL; +PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV = NULL; +PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV = NULL; +PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV = NULL; +PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV = NULL; + +PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV = NULL; + +PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV = NULL; +PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV = NULL; + +PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV = NULL; +PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV = NULL; + +PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV = NULL; +PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV = NULL; + +PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV = NULL; +PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV = NULL; +PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV = NULL; +PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV = NULL; +PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV = NULL; +PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV = NULL; +PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV = NULL; +PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV = NULL; +PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV = NULL; + +PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV = NULL; +PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV = NULL; + +PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV = NULL; +PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV = NULL; +PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV = NULL; +PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV = NULL; +PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV = NULL; +PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV = NULL; +PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV = NULL; +PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV = NULL; +PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV = NULL; + +PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV = NULL; +PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV = NULL; + +PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV = NULL; +PFNGLBINDPROGRAMNVPROC __glewBindProgramNV = NULL; +PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV = NULL; +PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV = NULL; +PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV = NULL; +PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV = NULL; +PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV = NULL; +PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV = NULL; +PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV = NULL; +PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV = NULL; +PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV = NULL; +PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV = NULL; +PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV = NULL; +PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV = NULL; +PFNGLISPROGRAMNVPROC __glewIsProgramNV = NULL; +PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV = NULL; +PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV = NULL; +PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV = NULL; +PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV = NULL; +PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV = NULL; +PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV = NULL; +PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV = NULL; +PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV = NULL; +PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV = NULL; +PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV = NULL; +PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV = NULL; +PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV = NULL; +PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV = NULL; +PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV = NULL; +PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV = NULL; +PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV = NULL; +PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV = NULL; +PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV = NULL; +PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV = NULL; +PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV = NULL; +PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV = NULL; +PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV = NULL; +PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV = NULL; +PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV = NULL; +PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV = NULL; +PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV = NULL; +PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV = NULL; +PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV = NULL; +PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV = NULL; +PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV = NULL; +PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV = NULL; +PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV = NULL; +PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV = NULL; +PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV = NULL; +PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV = NULL; +PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV = NULL; +PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV = NULL; +PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV = NULL; +PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV = NULL; +PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV = NULL; +PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV = NULL; +PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV = NULL; +PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV = NULL; +PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV = NULL; +PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV = NULL; +PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV = NULL; +PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV = NULL; +PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV = NULL; +PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV = NULL; + +PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL; +PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL; +PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL; +PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; +PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; +PFNGLORTHOFOESPROC __glewOrthofOES = NULL; + +PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; +PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; + +PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS = NULL; +PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS = NULL; + +PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS = NULL; +PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS = NULL; + +PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS = NULL; +PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS = NULL; + +PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS = NULL; +PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS = NULL; + +PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS = NULL; +PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS = NULL; + +PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX = NULL; +PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX = NULL; +PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX = NULL; +PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX = NULL; +PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX = NULL; +PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX = NULL; + +PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX = NULL; + +PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX = NULL; + +PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX = NULL; +PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX = NULL; +PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX = NULL; +PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX = NULL; +PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX = NULL; +PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX = NULL; +PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX = NULL; +PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX = NULL; +PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX = NULL; +PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX = NULL; +PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX = NULL; +PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX = NULL; +PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX = NULL; + +PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX = NULL; + +PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX = NULL; + +PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX = NULL; + +PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX = NULL; +PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX = NULL; +PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX = NULL; +PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX = NULL; + +PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX = NULL; + +PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI = NULL; +PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI = NULL; +PFNGLCOLORTABLESGIPROC __glewColorTableSGI = NULL; +PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI = NULL; +PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI = NULL; +PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI = NULL; +PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI = NULL; + +PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX = NULL; + +PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN = NULL; +PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN = NULL; +PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN = NULL; +PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN = NULL; +PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN = NULL; +PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN = NULL; +PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN = NULL; +PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN = NULL; + +PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN = NULL; + +PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN = NULL; +PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN = NULL; +PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN = NULL; +PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN = NULL; +PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN = NULL; +PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN = NULL; +PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN = NULL; + +PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN = NULL; +PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN = NULL; +PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN = NULL; +PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN = NULL; +PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN = NULL; +PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN = NULL; +PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN = NULL; +PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL; + +PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL; + +#endif /* !WIN32 || !GLEW_MX */ + +#if !defined(GLEW_MX) + +GLboolean __GLEW_VERSION_1_1 = GL_FALSE; +GLboolean __GLEW_VERSION_1_2 = GL_FALSE; +GLboolean __GLEW_VERSION_1_3 = GL_FALSE; +GLboolean __GLEW_VERSION_1_4 = GL_FALSE; +GLboolean __GLEW_VERSION_1_5 = GL_FALSE; +GLboolean __GLEW_VERSION_2_0 = GL_FALSE; +GLboolean __GLEW_VERSION_2_1 = GL_FALSE; +GLboolean __GLEW_3DFX_multisample = GL_FALSE; +GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; +GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; +GLboolean __GLEW_APPLE_client_storage = GL_FALSE; +GLboolean __GLEW_APPLE_element_array = GL_FALSE; +GLboolean __GLEW_APPLE_fence = GL_FALSE; +GLboolean __GLEW_APPLE_float_pixels = GL_FALSE; +GLboolean __GLEW_APPLE_flush_buffer_range = GL_FALSE; +GLboolean __GLEW_APPLE_pixel_buffer = GL_FALSE; +GLboolean __GLEW_APPLE_specular_vector = GL_FALSE; +GLboolean __GLEW_APPLE_texture_range = GL_FALSE; +GLboolean __GLEW_APPLE_transform_hint = GL_FALSE; +GLboolean __GLEW_APPLE_vertex_array_object = GL_FALSE; +GLboolean __GLEW_APPLE_vertex_array_range = GL_FALSE; +GLboolean __GLEW_APPLE_ycbcr_422 = GL_FALSE; +GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; +GLboolean __GLEW_ARB_depth_texture = GL_FALSE; +GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; +GLboolean __GLEW_ARB_fragment_program = GL_FALSE; +GLboolean __GLEW_ARB_fragment_program_shadow = GL_FALSE; +GLboolean __GLEW_ARB_fragment_shader = GL_FALSE; +GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; +GLboolean __GLEW_ARB_imaging = GL_FALSE; +GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; +GLboolean __GLEW_ARB_multisample = GL_FALSE; +GLboolean __GLEW_ARB_multitexture = GL_FALSE; +GLboolean __GLEW_ARB_occlusion_query = GL_FALSE; +GLboolean __GLEW_ARB_pixel_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_point_parameters = GL_FALSE; +GLboolean __GLEW_ARB_point_sprite = GL_FALSE; +GLboolean __GLEW_ARB_shader_objects = GL_FALSE; +GLboolean __GLEW_ARB_shading_language_100 = GL_FALSE; +GLboolean __GLEW_ARB_shadow = GL_FALSE; +GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; +GLboolean __GLEW_ARB_texture_border_clamp = GL_FALSE; +GLboolean __GLEW_ARB_texture_compression = GL_FALSE; +GLboolean __GLEW_ARB_texture_cube_map = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_add = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_combine = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; +GLboolean __GLEW_ARB_texture_float = GL_FALSE; +GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; +GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; +GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; +GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; +GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; +GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_vertex_program = GL_FALSE; +GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; +GLboolean __GLEW_ARB_window_pos = GL_FALSE; +GLboolean __GLEW_ATIX_point_sprites = GL_FALSE; +GLboolean __GLEW_ATIX_texture_env_combine3 = GL_FALSE; +GLboolean __GLEW_ATIX_texture_env_route = GL_FALSE; +GLboolean __GLEW_ATIX_vertex_shader_output_point_size = GL_FALSE; +GLboolean __GLEW_ATI_draw_buffers = GL_FALSE; +GLboolean __GLEW_ATI_element_array = GL_FALSE; +GLboolean __GLEW_ATI_envmap_bumpmap = GL_FALSE; +GLboolean __GLEW_ATI_fragment_shader = GL_FALSE; +GLboolean __GLEW_ATI_map_object_buffer = GL_FALSE; +GLboolean __GLEW_ATI_pn_triangles = GL_FALSE; +GLboolean __GLEW_ATI_separate_stencil = GL_FALSE; +GLboolean __GLEW_ATI_shader_texture_lod = GL_FALSE; +GLboolean __GLEW_ATI_text_fragment_shader = GL_FALSE; +GLboolean __GLEW_ATI_texture_compression_3dc = GL_FALSE; +GLboolean __GLEW_ATI_texture_env_combine3 = GL_FALSE; +GLboolean __GLEW_ATI_texture_float = GL_FALSE; +GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE; +GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE; +GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE; +GLboolean __GLEW_ATI_vertex_streams = GL_FALSE; +GLboolean __GLEW_EXT_422_pixels = GL_FALSE; +GLboolean __GLEW_EXT_Cg_shader = GL_FALSE; +GLboolean __GLEW_EXT_abgr = GL_FALSE; +GLboolean __GLEW_EXT_bgra = GL_FALSE; +GLboolean __GLEW_EXT_bindable_uniform = GL_FALSE; +GLboolean __GLEW_EXT_blend_color = GL_FALSE; +GLboolean __GLEW_EXT_blend_equation_separate = GL_FALSE; +GLboolean __GLEW_EXT_blend_func_separate = GL_FALSE; +GLboolean __GLEW_EXT_blend_logic_op = GL_FALSE; +GLboolean __GLEW_EXT_blend_minmax = GL_FALSE; +GLboolean __GLEW_EXT_blend_subtract = GL_FALSE; +GLboolean __GLEW_EXT_clip_volume_hint = GL_FALSE; +GLboolean __GLEW_EXT_cmyka = GL_FALSE; +GLboolean __GLEW_EXT_color_subtable = GL_FALSE; +GLboolean __GLEW_EXT_compiled_vertex_array = GL_FALSE; +GLboolean __GLEW_EXT_convolution = GL_FALSE; +GLboolean __GLEW_EXT_coordinate_frame = GL_FALSE; +GLboolean __GLEW_EXT_copy_texture = GL_FALSE; +GLboolean __GLEW_EXT_cull_vertex = GL_FALSE; +GLboolean __GLEW_EXT_depth_bounds_test = GL_FALSE; +GLboolean __GLEW_EXT_draw_buffers2 = GL_FALSE; +GLboolean __GLEW_EXT_draw_instanced = GL_FALSE; +GLboolean __GLEW_EXT_draw_range_elements = GL_FALSE; +GLboolean __GLEW_EXT_fog_coord = GL_FALSE; +GLboolean __GLEW_EXT_fragment_lighting = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_blit = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_multisample = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_object = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __GLEW_EXT_geometry_shader4 = GL_FALSE; +GLboolean __GLEW_EXT_gpu_program_parameters = GL_FALSE; +GLboolean __GLEW_EXT_gpu_shader4 = GL_FALSE; +GLboolean __GLEW_EXT_histogram = GL_FALSE; +GLboolean __GLEW_EXT_index_array_formats = GL_FALSE; +GLboolean __GLEW_EXT_index_func = GL_FALSE; +GLboolean __GLEW_EXT_index_material = GL_FALSE; +GLboolean __GLEW_EXT_index_texture = GL_FALSE; +GLboolean __GLEW_EXT_light_texture = GL_FALSE; +GLboolean __GLEW_EXT_misc_attribute = GL_FALSE; +GLboolean __GLEW_EXT_multi_draw_arrays = GL_FALSE; +GLboolean __GLEW_EXT_multisample = GL_FALSE; +GLboolean __GLEW_EXT_packed_depth_stencil = GL_FALSE; +GLboolean __GLEW_EXT_packed_float = GL_FALSE; +GLboolean __GLEW_EXT_packed_pixels = GL_FALSE; +GLboolean __GLEW_EXT_paletted_texture = GL_FALSE; +GLboolean __GLEW_EXT_pixel_buffer_object = GL_FALSE; +GLboolean __GLEW_EXT_pixel_transform = GL_FALSE; +GLboolean __GLEW_EXT_pixel_transform_color_table = GL_FALSE; +GLboolean __GLEW_EXT_point_parameters = GL_FALSE; +GLboolean __GLEW_EXT_polygon_offset = GL_FALSE; +GLboolean __GLEW_EXT_rescale_normal = GL_FALSE; +GLboolean __GLEW_EXT_scene_marker = GL_FALSE; +GLboolean __GLEW_EXT_secondary_color = GL_FALSE; +GLboolean __GLEW_EXT_separate_specular_color = GL_FALSE; +GLboolean __GLEW_EXT_shadow_funcs = GL_FALSE; +GLboolean __GLEW_EXT_shared_texture_palette = GL_FALSE; +GLboolean __GLEW_EXT_stencil_clear_tag = GL_FALSE; +GLboolean __GLEW_EXT_stencil_two_side = GL_FALSE; +GLboolean __GLEW_EXT_stencil_wrap = GL_FALSE; +GLboolean __GLEW_EXT_subtexture = GL_FALSE; +GLboolean __GLEW_EXT_texture = GL_FALSE; +GLboolean __GLEW_EXT_texture3D = GL_FALSE; +GLboolean __GLEW_EXT_texture_array = GL_FALSE; +GLboolean __GLEW_EXT_texture_buffer_object = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_dxt1 = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_latc = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_rgtc = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_s3tc = GL_FALSE; +GLboolean __GLEW_EXT_texture_cube_map = GL_FALSE; +GLboolean __GLEW_EXT_texture_edge_clamp = GL_FALSE; +GLboolean __GLEW_EXT_texture_env = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_add = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_combine = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_dot3 = GL_FALSE; +GLboolean __GLEW_EXT_texture_filter_anisotropic = GL_FALSE; +GLboolean __GLEW_EXT_texture_integer = GL_FALSE; +GLboolean __GLEW_EXT_texture_lod_bias = GL_FALSE; +GLboolean __GLEW_EXT_texture_mirror_clamp = GL_FALSE; +GLboolean __GLEW_EXT_texture_object = GL_FALSE; +GLboolean __GLEW_EXT_texture_perturb_normal = GL_FALSE; +GLboolean __GLEW_EXT_texture_rectangle = GL_FALSE; +GLboolean __GLEW_EXT_texture_sRGB = GL_FALSE; +GLboolean __GLEW_EXT_texture_shared_exponent = GL_FALSE; +GLboolean __GLEW_EXT_timer_query = GL_FALSE; +GLboolean __GLEW_EXT_vertex_array = GL_FALSE; +GLboolean __GLEW_EXT_vertex_shader = GL_FALSE; +GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE; +GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE; +GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE; +GLboolean __GLEW_HP_convolution_border_modes = GL_FALSE; +GLboolean __GLEW_HP_image_transform = GL_FALSE; +GLboolean __GLEW_HP_occlusion_test = GL_FALSE; +GLboolean __GLEW_HP_texture_lighting = GL_FALSE; +GLboolean __GLEW_IBM_cull_vertex = GL_FALSE; +GLboolean __GLEW_IBM_multimode_draw_arrays = GL_FALSE; +GLboolean __GLEW_IBM_rasterpos_clip = GL_FALSE; +GLboolean __GLEW_IBM_static_data = GL_FALSE; +GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; +GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; +GLboolean __GLEW_INGR_color_clamp = GL_FALSE; +GLboolean __GLEW_INGR_interlace_read = GL_FALSE; +GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; +GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; +GLboolean __GLEW_KTX_buffer_region = GL_FALSE; +GLboolean __GLEW_MESAX_texture_stack = GL_FALSE; +GLboolean __GLEW_MESA_pack_invert = GL_FALSE; +GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; +GLboolean __GLEW_MESA_window_pos = GL_FALSE; +GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; +GLboolean __GLEW_NV_blend_square = GL_FALSE; +GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; +GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; +GLboolean __GLEW_NV_depth_clamp = GL_FALSE; +GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; +GLboolean __GLEW_NV_evaluators = GL_FALSE; +GLboolean __GLEW_NV_fence = GL_FALSE; +GLboolean __GLEW_NV_float_buffer = GL_FALSE; +GLboolean __GLEW_NV_fog_distance = GL_FALSE; +GLboolean __GLEW_NV_fragment_program = GL_FALSE; +GLboolean __GLEW_NV_fragment_program2 = GL_FALSE; +GLboolean __GLEW_NV_fragment_program4 = GL_FALSE; +GLboolean __GLEW_NV_fragment_program_option = GL_FALSE; +GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE; +GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; +GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; +GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; +GLboolean __GLEW_NV_half_float = GL_FALSE; +GLboolean __GLEW_NV_light_max_exponent = GL_FALSE; +GLboolean __GLEW_NV_multisample_filter_hint = GL_FALSE; +GLboolean __GLEW_NV_occlusion_query = GL_FALSE; +GLboolean __GLEW_NV_packed_depth_stencil = GL_FALSE; +GLboolean __GLEW_NV_parameter_buffer_object = GL_FALSE; +GLboolean __GLEW_NV_pixel_data_range = GL_FALSE; +GLboolean __GLEW_NV_point_sprite = GL_FALSE; +GLboolean __GLEW_NV_primitive_restart = GL_FALSE; +GLboolean __GLEW_NV_register_combiners = GL_FALSE; +GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; +GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; +GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; +GLboolean __GLEW_NV_texture_compression_vtc = GL_FALSE; +GLboolean __GLEW_NV_texture_env_combine4 = GL_FALSE; +GLboolean __GLEW_NV_texture_expand_normal = GL_FALSE; +GLboolean __GLEW_NV_texture_rectangle = GL_FALSE; +GLboolean __GLEW_NV_texture_shader = GL_FALSE; +GLboolean __GLEW_NV_texture_shader2 = GL_FALSE; +GLboolean __GLEW_NV_texture_shader3 = GL_FALSE; +GLboolean __GLEW_NV_transform_feedback = GL_FALSE; +GLboolean __GLEW_NV_vertex_array_range = GL_FALSE; +GLboolean __GLEW_NV_vertex_array_range2 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program = GL_FALSE; +GLboolean __GLEW_NV_vertex_program1_1 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program2 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program2_option = GL_FALSE; +GLboolean __GLEW_NV_vertex_program3 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program4 = GL_FALSE; +GLboolean __GLEW_OES_byte_coordinates = GL_FALSE; +GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE; +GLboolean __GLEW_OES_read_format = GL_FALSE; +GLboolean __GLEW_OES_single_precision = GL_FALSE; +GLboolean __GLEW_OML_interlace = GL_FALSE; +GLboolean __GLEW_OML_resample = GL_FALSE; +GLboolean __GLEW_OML_subsample = GL_FALSE; +GLboolean __GLEW_PGI_misc_hints = GL_FALSE; +GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; +GLboolean __GLEW_REND_screen_coordinates = GL_FALSE; +GLboolean __GLEW_S3_s3tc = GL_FALSE; +GLboolean __GLEW_SGIS_color_range = GL_FALSE; +GLboolean __GLEW_SGIS_detail_texture = GL_FALSE; +GLboolean __GLEW_SGIS_fog_function = GL_FALSE; +GLboolean __GLEW_SGIS_generate_mipmap = GL_FALSE; +GLboolean __GLEW_SGIS_multisample = GL_FALSE; +GLboolean __GLEW_SGIS_pixel_texture = GL_FALSE; +GLboolean __GLEW_SGIS_sharpen_texture = GL_FALSE; +GLboolean __GLEW_SGIS_texture4D = GL_FALSE; +GLboolean __GLEW_SGIS_texture_border_clamp = GL_FALSE; +GLboolean __GLEW_SGIS_texture_edge_clamp = GL_FALSE; +GLboolean __GLEW_SGIS_texture_filter4 = GL_FALSE; +GLboolean __GLEW_SGIS_texture_lod = GL_FALSE; +GLboolean __GLEW_SGIS_texture_select = GL_FALSE; +GLboolean __GLEW_SGIX_async = GL_FALSE; +GLboolean __GLEW_SGIX_async_histogram = GL_FALSE; +GLboolean __GLEW_SGIX_async_pixel = GL_FALSE; +GLboolean __GLEW_SGIX_blend_alpha_minmax = GL_FALSE; +GLboolean __GLEW_SGIX_clipmap = GL_FALSE; +GLboolean __GLEW_SGIX_depth_texture = GL_FALSE; +GLboolean __GLEW_SGIX_flush_raster = GL_FALSE; +GLboolean __GLEW_SGIX_fog_offset = GL_FALSE; +GLboolean __GLEW_SGIX_fog_texture = GL_FALSE; +GLboolean __GLEW_SGIX_fragment_specular_lighting = GL_FALSE; +GLboolean __GLEW_SGIX_framezoom = GL_FALSE; +GLboolean __GLEW_SGIX_interlace = GL_FALSE; +GLboolean __GLEW_SGIX_ir_instrument1 = GL_FALSE; +GLboolean __GLEW_SGIX_list_priority = GL_FALSE; +GLboolean __GLEW_SGIX_pixel_texture = GL_FALSE; +GLboolean __GLEW_SGIX_pixel_texture_bits = GL_FALSE; +GLboolean __GLEW_SGIX_reference_plane = GL_FALSE; +GLboolean __GLEW_SGIX_resample = GL_FALSE; +GLboolean __GLEW_SGIX_shadow = GL_FALSE; +GLboolean __GLEW_SGIX_shadow_ambient = GL_FALSE; +GLboolean __GLEW_SGIX_sprite = GL_FALSE; +GLboolean __GLEW_SGIX_tag_sample_buffer = GL_FALSE; +GLboolean __GLEW_SGIX_texture_add_env = GL_FALSE; +GLboolean __GLEW_SGIX_texture_coordinate_clamp = GL_FALSE; +GLboolean __GLEW_SGIX_texture_lod_bias = GL_FALSE; +GLboolean __GLEW_SGIX_texture_multi_buffer = GL_FALSE; +GLboolean __GLEW_SGIX_texture_range = GL_FALSE; +GLboolean __GLEW_SGIX_texture_scale_bias = GL_FALSE; +GLboolean __GLEW_SGIX_vertex_preclip = GL_FALSE; +GLboolean __GLEW_SGIX_vertex_preclip_hint = GL_FALSE; +GLboolean __GLEW_SGIX_ycrcb = GL_FALSE; +GLboolean __GLEW_SGI_color_matrix = GL_FALSE; +GLboolean __GLEW_SGI_color_table = GL_FALSE; +GLboolean __GLEW_SGI_texture_color_table = GL_FALSE; +GLboolean __GLEW_SUNX_constant_data = GL_FALSE; +GLboolean __GLEW_SUN_convolution_border_modes = GL_FALSE; +GLboolean __GLEW_SUN_global_alpha = GL_FALSE; +GLboolean __GLEW_SUN_mesh_array = GL_FALSE; +GLboolean __GLEW_SUN_read_video_pixels = GL_FALSE; +GLboolean __GLEW_SUN_slice_accum = GL_FALSE; +GLboolean __GLEW_SUN_triangle_list = GL_FALSE; +GLboolean __GLEW_SUN_vertex = GL_FALSE; +GLboolean __GLEW_WIN_phong_shading = GL_FALSE; +GLboolean __GLEW_WIN_specular_fog = GL_FALSE; +GLboolean __GLEW_WIN_swap_hint = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef GL_VERSION_1_2 + +static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3D")) == NULL) || r; + r = ((glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElements")) == NULL) || r; + r = ((glTexImage3D = (PFNGLTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexImage3D")) == NULL) || r; + r = ((glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3D")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_2 */ + +#ifdef GL_VERSION_1_3 + +static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveTexture = (PFNGLACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glActiveTexture")) == NULL) || r; + r = ((glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTexture")) == NULL) || r; + r = ((glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1D")) == NULL) || r; + r = ((glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2D")) == NULL) || r; + r = ((glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3D")) == NULL) || r; + r = ((glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1D")) == NULL) || r; + r = ((glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2D")) == NULL) || r; + r = ((glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3D")) == NULL) || r; + r = ((glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImage")) == NULL) || r; + r = ((glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixd")) == NULL) || r; + r = ((glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixf")) == NULL) || r; + r = ((glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixd")) == NULL) || r; + r = ((glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixf")) == NULL) || r; + r = ((glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1d")) == NULL) || r; + r = ((glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dv")) == NULL) || r; + r = ((glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1f")) == NULL) || r; + r = ((glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fv")) == NULL) || r; + r = ((glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1i")) == NULL) || r; + r = ((glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iv")) == NULL) || r; + r = ((glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1s")) == NULL) || r; + r = ((glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sv")) == NULL) || r; + r = ((glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2d")) == NULL) || r; + r = ((glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dv")) == NULL) || r; + r = ((glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2f")) == NULL) || r; + r = ((glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fv")) == NULL) || r; + r = ((glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2i")) == NULL) || r; + r = ((glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iv")) == NULL) || r; + r = ((glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2s")) == NULL) || r; + r = ((glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sv")) == NULL) || r; + r = ((glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3d")) == NULL) || r; + r = ((glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dv")) == NULL) || r; + r = ((glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3f")) == NULL) || r; + r = ((glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fv")) == NULL) || r; + r = ((glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3i")) == NULL) || r; + r = ((glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iv")) == NULL) || r; + r = ((glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3s")) == NULL) || r; + r = ((glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sv")) == NULL) || r; + r = ((glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4d")) == NULL) || r; + r = ((glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dv")) == NULL) || r; + r = ((glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4f")) == NULL) || r; + r = ((glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fv")) == NULL) || r; + r = ((glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4i")) == NULL) || r; + r = ((glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iv")) == NULL) || r; + r = ((glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4s")) == NULL) || r; + r = ((glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sv")) == NULL) || r; + r = ((glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverage")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_3 */ + +#ifdef GL_VERSION_1_4 + +static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendColor = (PFNGLBLENDCOLORPROC)glewGetProcAddress((const GLubyte*)"glBlendColor")) == NULL) || r; + r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; + r = ((glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparate")) == NULL) || r; + r = ((glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointer")) == NULL) || r; + r = ((glFogCoordd = (PFNGLFOGCOORDDPROC)glewGetProcAddress((const GLubyte*)"glFogCoordd")) == NULL) || r; + r = ((glFogCoorddv = (PFNGLFOGCOORDDVPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddv")) == NULL) || r; + r = ((glFogCoordf = (PFNGLFOGCOORDFPROC)glewGetProcAddress((const GLubyte*)"glFogCoordf")) == NULL) || r; + r = ((glFogCoordfv = (PFNGLFOGCOORDFVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfv")) == NULL) || r; + r = ((glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArrays")) == NULL) || r; + r = ((glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElements")) == NULL) || r; + r = ((glPointParameterf = (PFNGLPOINTPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glPointParameterf")) == NULL) || r; + r = ((glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfv")) == NULL) || r; + r = ((glPointParameteri = (PFNGLPOINTPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPointParameteri")) == NULL) || r; + r = ((glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriv")) == NULL) || r; + r = ((glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3b")) == NULL) || r; + r = ((glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bv")) == NULL) || r; + r = ((glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3d")) == NULL) || r; + r = ((glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dv")) == NULL) || r; + r = ((glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3f")) == NULL) || r; + r = ((glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fv")) == NULL) || r; + r = ((glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3i")) == NULL) || r; + r = ((glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iv")) == NULL) || r; + r = ((glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3s")) == NULL) || r; + r = ((glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sv")) == NULL) || r; + r = ((glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ub")) == NULL) || r; + r = ((glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubv")) == NULL) || r; + r = ((glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ui")) == NULL) || r; + r = ((glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiv")) == NULL) || r; + r = ((glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3us")) == NULL) || r; + r = ((glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usv")) == NULL) || r; + r = ((glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointer")) == NULL) || r; + r = ((glWindowPos2d = (PFNGLWINDOWPOS2DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2d")) == NULL) || r; + r = ((glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dv")) == NULL) || r; + r = ((glWindowPos2f = (PFNGLWINDOWPOS2FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2f")) == NULL) || r; + r = ((glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fv")) == NULL) || r; + r = ((glWindowPos2i = (PFNGLWINDOWPOS2IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2i")) == NULL) || r; + r = ((glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iv")) == NULL) || r; + r = ((glWindowPos2s = (PFNGLWINDOWPOS2SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2s")) == NULL) || r; + r = ((glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sv")) == NULL) || r; + r = ((glWindowPos3d = (PFNGLWINDOWPOS3DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3d")) == NULL) || r; + r = ((glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dv")) == NULL) || r; + r = ((glWindowPos3f = (PFNGLWINDOWPOS3FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3f")) == NULL) || r; + r = ((glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fv")) == NULL) || r; + r = ((glWindowPos3i = (PFNGLWINDOWPOS3IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3i")) == NULL) || r; + r = ((glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iv")) == NULL) || r; + r = ((glWindowPos3s = (PFNGLWINDOWPOS3SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3s")) == NULL) || r; + r = ((glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sv")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_4 */ + +#ifdef GL_VERSION_1_5 + +static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginQuery = (PFNGLBEGINQUERYPROC)glewGetProcAddress((const GLubyte*)"glBeginQuery")) == NULL) || r; + r = ((glBindBuffer = (PFNGLBINDBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindBuffer")) == NULL) || r; + r = ((glBufferData = (PFNGLBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferData")) == NULL) || r; + r = ((glBufferSubData = (PFNGLBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferSubData")) == NULL) || r; + r = ((glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffers")) == NULL) || r; + r = ((glDeleteQueries = (PFNGLDELETEQUERIESPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueries")) == NULL) || r; + r = ((glEndQuery = (PFNGLENDQUERYPROC)glewGetProcAddress((const GLubyte*)"glEndQuery")) == NULL) || r; + r = ((glGenBuffers = (PFNGLGENBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenBuffers")) == NULL) || r; + r = ((glGenQueries = (PFNGLGENQUERIESPROC)glewGetProcAddress((const GLubyte*)"glGenQueries")) == NULL) || r; + r = ((glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteriv")) == NULL) || r; + r = ((glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointerv")) == NULL) || r; + r = ((glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubData")) == NULL) || r; + r = ((glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectiv")) == NULL) || r; + r = ((glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuiv")) == NULL) || r; + r = ((glGetQueryiv = (PFNGLGETQUERYIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryiv")) == NULL) || r; + r = ((glIsBuffer = (PFNGLISBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsBuffer")) == NULL) || r; + r = ((glIsQuery = (PFNGLISQUERYPROC)glewGetProcAddress((const GLubyte*)"glIsQuery")) == NULL) || r; + r = ((glMapBuffer = (PFNGLMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glMapBuffer")) == NULL) || r; + r = ((glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glUnmapBuffer")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_5 */ + +#ifdef GL_VERSION_2_0 + +static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAttachShader = (PFNGLATTACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glAttachShader")) == NULL) || r; + r = ((glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocation")) == NULL) || r; + r = ((glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparate")) == NULL) || r; + r = ((glCompileShader = (PFNGLCOMPILESHADERPROC)glewGetProcAddress((const GLubyte*)"glCompileShader")) == NULL) || r; + r = ((glCreateProgram = (PFNGLCREATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glCreateProgram")) == NULL) || r; + r = ((glCreateShader = (PFNGLCREATESHADERPROC)glewGetProcAddress((const GLubyte*)"glCreateShader")) == NULL) || r; + r = ((glDeleteProgram = (PFNGLDELETEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgram")) == NULL) || r; + r = ((glDeleteShader = (PFNGLDELETESHADERPROC)glewGetProcAddress((const GLubyte*)"glDeleteShader")) == NULL) || r; + r = ((glDetachShader = (PFNGLDETACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glDetachShader")) == NULL) || r; + r = ((glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArray")) == NULL) || r; + r = ((glDrawBuffers = (PFNGLDRAWBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffers")) == NULL) || r; + r = ((glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArray")) == NULL) || r; + r = ((glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttrib")) == NULL) || r; + r = ((glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniform")) == NULL) || r; + r = ((glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedShaders")) == NULL) || r; + r = ((glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocation")) == NULL) || r; + r = ((glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInfoLog")) == NULL) || r; + r = ((glGetProgramiv = (PFNGLGETPROGRAMIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramiv")) == NULL) || r; + r = ((glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetShaderInfoLog")) == NULL) || r; + r = ((glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSource")) == NULL) || r; + r = ((glGetShaderiv = (PFNGLGETSHADERIVPROC)glewGetProcAddress((const GLubyte*)"glGetShaderiv")) == NULL) || r; + r = ((glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocation")) == NULL) || r; + r = ((glGetUniformfv = (PFNGLGETUNIFORMFVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfv")) == NULL) || r; + r = ((glGetUniformiv = (PFNGLGETUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformiv")) == NULL) || r; + r = ((glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointerv")) == NULL) || r; + r = ((glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdv")) == NULL) || r; + r = ((glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfv")) == NULL) || r; + r = ((glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribiv")) == NULL) || r; + r = ((glIsProgram = (PFNGLISPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glIsProgram")) == NULL) || r; + r = ((glIsShader = (PFNGLISSHADERPROC)glewGetProcAddress((const GLubyte*)"glIsShader")) == NULL) || r; + r = ((glLinkProgram = (PFNGLLINKPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glLinkProgram")) == NULL) || r; + r = ((glShaderSource = (PFNGLSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glShaderSource")) == NULL) || r; + r = ((glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparate")) == NULL) || r; + r = ((glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilMaskSeparate")) == NULL) || r; + r = ((glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparate")) == NULL) || r; + r = ((glUniform1f = (PFNGLUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glUniform1f")) == NULL) || r; + r = ((glUniform1fv = (PFNGLUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glUniform1fv")) == NULL) || r; + r = ((glUniform1i = (PFNGLUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glUniform1i")) == NULL) || r; + r = ((glUniform1iv = (PFNGLUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glUniform1iv")) == NULL) || r; + r = ((glUniform2f = (PFNGLUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glUniform2f")) == NULL) || r; + r = ((glUniform2fv = (PFNGLUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glUniform2fv")) == NULL) || r; + r = ((glUniform2i = (PFNGLUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glUniform2i")) == NULL) || r; + r = ((glUniform2iv = (PFNGLUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glUniform2iv")) == NULL) || r; + r = ((glUniform3f = (PFNGLUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glUniform3f")) == NULL) || r; + r = ((glUniform3fv = (PFNGLUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glUniform3fv")) == NULL) || r; + r = ((glUniform3i = (PFNGLUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glUniform3i")) == NULL) || r; + r = ((glUniform3iv = (PFNGLUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glUniform3iv")) == NULL) || r; + r = ((glUniform4f = (PFNGLUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glUniform4f")) == NULL) || r; + r = ((glUniform4fv = (PFNGLUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glUniform4fv")) == NULL) || r; + r = ((glUniform4i = (PFNGLUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glUniform4i")) == NULL) || r; + r = ((glUniform4iv = (PFNGLUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glUniform4iv")) == NULL) || r; + r = ((glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fv")) == NULL) || r; + r = ((glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fv")) == NULL) || r; + r = ((glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fv")) == NULL) || r; + r = ((glUseProgram = (PFNGLUSEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glUseProgram")) == NULL) || r; + r = ((glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glValidateProgram")) == NULL) || r; + r = ((glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1d")) == NULL) || r; + r = ((glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dv")) == NULL) || r; + r = ((glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1f")) == NULL) || r; + r = ((glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fv")) == NULL) || r; + r = ((glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1s")) == NULL) || r; + r = ((glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sv")) == NULL) || r; + r = ((glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2d")) == NULL) || r; + r = ((glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dv")) == NULL) || r; + r = ((glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2f")) == NULL) || r; + r = ((glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fv")) == NULL) || r; + r = ((glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2s")) == NULL) || r; + r = ((glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sv")) == NULL) || r; + r = ((glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3d")) == NULL) || r; + r = ((glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dv")) == NULL) || r; + r = ((glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3f")) == NULL) || r; + r = ((glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fv")) == NULL) || r; + r = ((glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3s")) == NULL) || r; + r = ((glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sv")) == NULL) || r; + r = ((glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nbv")) == NULL) || r; + r = ((glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Niv")) == NULL) || r; + r = ((glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nsv")) == NULL) || r; + r = ((glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nub")) == NULL) || r; + r = ((glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nubv")) == NULL) || r; + r = ((glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nuiv")) == NULL) || r; + r = ((glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nusv")) == NULL) || r; + r = ((glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bv")) == NULL) || r; + r = ((glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4d")) == NULL) || r; + r = ((glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dv")) == NULL) || r; + r = ((glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4f")) == NULL) || r; + r = ((glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fv")) == NULL) || r; + r = ((glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4iv")) == NULL) || r; + r = ((glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4s")) == NULL) || r; + r = ((glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sv")) == NULL) || r; + r = ((glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubv")) == NULL) || r; + r = ((glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uiv")) == NULL) || r; + r = ((glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usv")) == NULL) || r; + r = ((glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointer")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_2_0 */ + +#ifdef GL_VERSION_2_1 + +static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3fv")) == NULL) || r; + r = ((glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4fv")) == NULL) || r; + r = ((glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2fv")) == NULL) || r; + r = ((glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4fv")) == NULL) || r; + r = ((glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2fv")) == NULL) || r; + r = ((glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3fv")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_2_1 */ + +#ifdef GL_3DFX_multisample + +#endif /* GL_3DFX_multisample */ + +#ifdef GL_3DFX_tbuffer + +static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)glewGetProcAddress((const GLubyte*)"glTbufferMask3DFX")) == NULL) || r; + + return r; +} + +#endif /* GL_3DFX_tbuffer */ + +#ifdef GL_3DFX_texture_compression_FXT1 + +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifdef GL_APPLE_client_storage + +#endif /* GL_APPLE_client_storage */ + +#ifdef GL_APPLE_element_array + +static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayAPPLE")) == NULL) || r; + r = ((glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayAPPLE")) == NULL) || r; + r = ((glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)glewGetProcAddress((const GLubyte*)"glElementPointerAPPLE")) == NULL) || r; + r = ((glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementArrayAPPLE")) == NULL) || r; + r = ((glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawRangeElementArrayAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_element_array */ + +#ifdef GL_APPLE_fence + +static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesAPPLE")) == NULL) || r; + r = ((glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceAPPLE")) == NULL) || r; + r = ((glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishObjectAPPLE")) == NULL) || r; + r = ((glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenFencesAPPLE")) == NULL) || r; + r = ((glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsFenceAPPLE")) == NULL) || r; + r = ((glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glSetFenceAPPLE")) == NULL) || r; + r = ((glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestFenceAPPLE")) == NULL) || r; + r = ((glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestObjectAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_fence */ + +#ifdef GL_APPLE_float_pixels + +#endif /* GL_APPLE_float_pixels */ + +#ifdef GL_APPLE_flush_buffer_range + +static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBufferParameteriAPPLE")) == NULL) || r; + r = ((glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_flush_buffer_range */ + +#ifdef GL_APPLE_pixel_buffer + +#endif /* GL_APPLE_pixel_buffer */ + +#ifdef GL_APPLE_specular_vector + +#endif /* GL_APPLE_specular_vector */ + +#ifdef GL_APPLE_texture_range + +static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterPointervAPPLE")) == NULL) || r; + r = ((glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTextureRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_texture_range */ + +#ifdef GL_APPLE_transform_hint + +#endif /* GL_APPLE_transform_hint */ + +#ifdef GL_APPLE_vertex_array_object + +static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArrayAPPLE")) == NULL) || r; + r = ((glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArraysAPPLE")) == NULL) || r; + r = ((glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArraysAPPLE")) == NULL) || r; + r = ((glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArrayAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_vertex_array_object */ + +#ifdef GL_APPLE_vertex_array_range + +static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeAPPLE")) == NULL) || r; + r = ((glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayParameteriAPPLE")) == NULL) || r; + r = ((glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_vertex_array_range */ + +#ifdef GL_APPLE_ycbcr_422 + +#endif /* GL_APPLE_ycbcr_422 */ + +#ifdef GL_ARB_color_buffer_float + +static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClampColorARB = (PFNGLCLAMPCOLORARBPROC)glewGetProcAddress((const GLubyte*)"glClampColorARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_color_buffer_float */ + +#ifdef GL_ARB_depth_texture + +#endif /* GL_ARB_depth_texture */ + +#ifdef GL_ARB_draw_buffers + +static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_draw_buffers */ + +#ifdef GL_ARB_fragment_program + +#endif /* GL_ARB_fragment_program */ + +#ifdef GL_ARB_fragment_program_shadow + +#endif /* GL_ARB_fragment_program_shadow */ + +#ifdef GL_ARB_fragment_shader + +#endif /* GL_ARB_fragment_shader */ + +#ifdef GL_ARB_half_float_pixel + +#endif /* GL_ARB_half_float_pixel */ + +#ifdef GL_ARB_imaging + +static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; + r = ((glColorSubTable = (PFNGLCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorSubTable")) == NULL) || r; + r = ((glColorTable = (PFNGLCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorTable")) == NULL) || r; + r = ((glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfv")) == NULL) || r; + r = ((glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameteriv")) == NULL) || r; + r = ((glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1D")) == NULL) || r; + r = ((glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2D")) == NULL) || r; + r = ((glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterf")) == NULL) || r; + r = ((glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfv")) == NULL) || r; + r = ((glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteri")) == NULL) || r; + r = ((glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriv")) == NULL) || r; + r = ((glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTable")) == NULL) || r; + r = ((glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTable")) == NULL) || r; + r = ((glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1D")) == NULL) || r; + r = ((glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2D")) == NULL) || r; + r = ((glGetColorTable = (PFNGLGETCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glGetColorTable")) == NULL) || r; + r = ((glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfv")) == NULL) || r; + r = ((glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameteriv")) == NULL) || r; + r = ((glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilter")) == NULL) || r; + r = ((glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfv")) == NULL) || r; + r = ((glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameteriv")) == NULL) || r; + r = ((glGetHistogram = (PFNGLGETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glGetHistogram")) == NULL) || r; + r = ((glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfv")) == NULL) || r; + r = ((glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameteriv")) == NULL) || r; + r = ((glGetMinmax = (PFNGLGETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glGetMinmax")) == NULL) || r; + r = ((glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfv")) == NULL) || r; + r = ((glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameteriv")) == NULL) || r; + r = ((glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilter")) == NULL) || r; + r = ((glHistogram = (PFNGLHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glHistogram")) == NULL) || r; + r = ((glMinmax = (PFNGLMINMAXPROC)glewGetProcAddress((const GLubyte*)"glMinmax")) == NULL) || r; + r = ((glResetHistogram = (PFNGLRESETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glResetHistogram")) == NULL) || r; + r = ((glResetMinmax = (PFNGLRESETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glResetMinmax")) == NULL) || r; + r = ((glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2D")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_imaging */ + +#ifdef GL_ARB_matrix_palette + +static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)glewGetProcAddress((const GLubyte*)"glCurrentPaletteMatrixARB")) == NULL) || r; + r = ((glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexPointerARB")) == NULL) || r; + r = ((glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexubvARB")) == NULL) || r; + r = ((glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexuivARB")) == NULL) || r; + r = ((glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexusvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_matrix_palette */ + +#ifdef GL_ARB_multisample + +static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverageARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_multisample */ + +#ifdef GL_ARB_multitexture + +static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glActiveTextureARB")) == NULL) || r; + r = ((glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTextureARB")) == NULL) || r; + r = ((glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dARB")) == NULL) || r; + r = ((glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dvARB")) == NULL) || r; + r = ((glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fARB")) == NULL) || r; + r = ((glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fvARB")) == NULL) || r; + r = ((glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iARB")) == NULL) || r; + r = ((glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1ivARB")) == NULL) || r; + r = ((glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sARB")) == NULL) || r; + r = ((glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1svARB")) == NULL) || r; + r = ((glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dARB")) == NULL) || r; + r = ((glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dvARB")) == NULL) || r; + r = ((glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fARB")) == NULL) || r; + r = ((glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fvARB")) == NULL) || r; + r = ((glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iARB")) == NULL) || r; + r = ((glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2ivARB")) == NULL) || r; + r = ((glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sARB")) == NULL) || r; + r = ((glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2svARB")) == NULL) || r; + r = ((glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dARB")) == NULL) || r; + r = ((glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dvARB")) == NULL) || r; + r = ((glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fARB")) == NULL) || r; + r = ((glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fvARB")) == NULL) || r; + r = ((glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iARB")) == NULL) || r; + r = ((glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3ivARB")) == NULL) || r; + r = ((glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sARB")) == NULL) || r; + r = ((glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3svARB")) == NULL) || r; + r = ((glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dARB")) == NULL) || r; + r = ((glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dvARB")) == NULL) || r; + r = ((glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fARB")) == NULL) || r; + r = ((glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fvARB")) == NULL) || r; + r = ((glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iARB")) == NULL) || r; + r = ((glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4ivARB")) == NULL) || r; + r = ((glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sARB")) == NULL) || r; + r = ((glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4svARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_multitexture */ + +#ifdef GL_ARB_occlusion_query + +static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryARB")) == NULL) || r; + r = ((glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesARB")) == NULL) || r; + r = ((glEndQueryARB = (PFNGLENDQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glEndQueryARB")) == NULL) || r; + r = ((glGenQueriesARB = (PFNGLGENQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesARB")) == NULL) || r; + r = ((glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivARB")) == NULL) || r; + r = ((glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivARB")) == NULL) || r; + r = ((glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivARB")) == NULL) || r; + r = ((glIsQueryARB = (PFNGLISQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glIsQueryARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_occlusion_query */ + +#ifdef GL_ARB_pixel_buffer_object + +#endif /* GL_ARB_pixel_buffer_object */ + +#ifdef GL_ARB_point_parameters + +static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfARB")) == NULL) || r; + r = ((glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_point_parameters */ + +#ifdef GL_ARB_point_sprite + +#endif /* GL_ARB_point_sprite */ + +#ifdef GL_ARB_shader_objects + +static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glAttachObjectARB")) == NULL) || r; + r = ((glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderARB")) == NULL) || r; + r = ((glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateProgramObjectARB")) == NULL) || r; + r = ((glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderObjectARB")) == NULL) || r; + r = ((glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteObjectARB")) == NULL) || r; + r = ((glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDetachObjectARB")) == NULL) || r; + r = ((glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformARB")) == NULL) || r; + r = ((glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedObjectsARB")) == NULL) || r; + r = ((glGetHandleARB = (PFNGLGETHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetHandleARB")) == NULL) || r; + r = ((glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetInfoLogARB")) == NULL) || r; + r = ((glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterfvARB")) == NULL) || r; + r = ((glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivARB")) == NULL) || r; + r = ((glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSourceARB")) == NULL) || r; + r = ((glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocationARB")) == NULL) || r; + r = ((glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfvARB")) == NULL) || r; + r = ((glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformivARB")) == NULL) || r; + r = ((glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glLinkProgramARB")) == NULL) || r; + r = ((glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glShaderSourceARB")) == NULL) || r; + r = ((glUniform1fARB = (PFNGLUNIFORM1FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fARB")) == NULL) || r; + r = ((glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fvARB")) == NULL) || r; + r = ((glUniform1iARB = (PFNGLUNIFORM1IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1iARB")) == NULL) || r; + r = ((glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1ivARB")) == NULL) || r; + r = ((glUniform2fARB = (PFNGLUNIFORM2FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fARB")) == NULL) || r; + r = ((glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fvARB")) == NULL) || r; + r = ((glUniform2iARB = (PFNGLUNIFORM2IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2iARB")) == NULL) || r; + r = ((glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2ivARB")) == NULL) || r; + r = ((glUniform3fARB = (PFNGLUNIFORM3FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fARB")) == NULL) || r; + r = ((glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fvARB")) == NULL) || r; + r = ((glUniform3iARB = (PFNGLUNIFORM3IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3iARB")) == NULL) || r; + r = ((glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3ivARB")) == NULL) || r; + r = ((glUniform4fARB = (PFNGLUNIFORM4FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fARB")) == NULL) || r; + r = ((glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fvARB")) == NULL) || r; + r = ((glUniform4iARB = (PFNGLUNIFORM4IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4iARB")) == NULL) || r; + r = ((glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4ivARB")) == NULL) || r; + r = ((glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fvARB")) == NULL) || r; + r = ((glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fvARB")) == NULL) || r; + r = ((glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fvARB")) == NULL) || r; + r = ((glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glUseProgramObjectARB")) == NULL) || r; + r = ((glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_shader_objects */ + +#ifdef GL_ARB_shading_language_100 + +#endif /* GL_ARB_shading_language_100 */ + +#ifdef GL_ARB_shadow + +#endif /* GL_ARB_shadow */ + +#ifdef GL_ARB_shadow_ambient + +#endif /* GL_ARB_shadow_ambient */ + +#ifdef GL_ARB_texture_border_clamp + +#endif /* GL_ARB_texture_border_clamp */ + +#ifdef GL_ARB_texture_compression + +static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1DARB")) == NULL) || r; + r = ((glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2DARB")) == NULL) || r; + r = ((glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3DARB")) == NULL) || r; + r = ((glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1DARB")) == NULL) || r; + r = ((glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2DARB")) == NULL) || r; + r = ((glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3DARB")) == NULL) || r; + r = ((glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImageARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_texture_compression */ + +#ifdef GL_ARB_texture_cube_map + +#endif /* GL_ARB_texture_cube_map */ + +#ifdef GL_ARB_texture_env_add + +#endif /* GL_ARB_texture_env_add */ + +#ifdef GL_ARB_texture_env_combine + +#endif /* GL_ARB_texture_env_combine */ + +#ifdef GL_ARB_texture_env_crossbar + +#endif /* GL_ARB_texture_env_crossbar */ + +#ifdef GL_ARB_texture_env_dot3 + +#endif /* GL_ARB_texture_env_dot3 */ + +#ifdef GL_ARB_texture_float + +#endif /* GL_ARB_texture_float */ + +#ifdef GL_ARB_texture_mirrored_repeat + +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifdef GL_ARB_texture_non_power_of_two + +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifdef GL_ARB_texture_rectangle + +#endif /* GL_ARB_texture_rectangle */ + +#ifdef GL_ARB_transpose_matrix + +static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixdARB")) == NULL) || r; + r = ((glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixfARB")) == NULL) || r; + r = ((glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixdARB")) == NULL) || r; + r = ((glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixfARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_transpose_matrix */ + +#ifdef GL_ARB_vertex_blend + +static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendARB")) == NULL) || r; + r = ((glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glWeightPointerARB")) == NULL) || r; + r = ((glWeightbvARB = (PFNGLWEIGHTBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightbvARB")) == NULL) || r; + r = ((glWeightdvARB = (PFNGLWEIGHTDVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightdvARB")) == NULL) || r; + r = ((glWeightfvARB = (PFNGLWEIGHTFVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightfvARB")) == NULL) || r; + r = ((glWeightivARB = (PFNGLWEIGHTIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightivARB")) == NULL) || r; + r = ((glWeightsvARB = (PFNGLWEIGHTSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightsvARB")) == NULL) || r; + r = ((glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightubvARB")) == NULL) || r; + r = ((glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightuivARB")) == NULL) || r; + r = ((glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightusvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_blend */ + +#ifdef GL_ARB_vertex_buffer_object + +static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindBufferARB = (PFNGLBINDBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glBindBufferARB")) == NULL) || r; + r = ((glBufferDataARB = (PFNGLBUFFERDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferDataARB")) == NULL) || r; + r = ((glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferSubDataARB")) == NULL) || r; + r = ((glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffersARB")) == NULL) || r; + r = ((glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glGenBuffersARB")) == NULL) || r; + r = ((glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterivARB")) == NULL) || r; + r = ((glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointervARB")) == NULL) || r; + r = ((glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubDataARB")) == NULL) || r; + r = ((glIsBufferARB = (PFNGLISBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glIsBufferARB")) == NULL) || r; + r = ((glMapBufferARB = (PFNGLMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glMapBufferARB")) == NULL) || r; + r = ((glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glUnmapBufferARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_buffer_object */ + +#ifdef GL_ARB_vertex_program + +static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glBindProgramARB")) == NULL) || r; + r = ((glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsARB")) == NULL) || r; + r = ((glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArrayARB")) == NULL) || r; + r = ((glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArrayARB")) == NULL) || r; + r = ((glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsARB")) == NULL) || r; + r = ((glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterdvARB")) == NULL) || r; + r = ((glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterfvARB")) == NULL) || r; + r = ((glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterdvARB")) == NULL) || r; + r = ((glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterfvARB")) == NULL) || r; + r = ((glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringARB")) == NULL) || r; + r = ((glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivARB")) == NULL) || r; + r = ((glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervARB")) == NULL) || r; + r = ((glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvARB")) == NULL) || r; + r = ((glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvARB")) == NULL) || r; + r = ((glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivARB")) == NULL) || r; + r = ((glIsProgramARB = (PFNGLISPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glIsProgramARB")) == NULL) || r; + r = ((glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dARB")) == NULL) || r; + r = ((glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dvARB")) == NULL) || r; + r = ((glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fARB")) == NULL) || r; + r = ((glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fvARB")) == NULL) || r; + r = ((glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dARB")) == NULL) || r; + r = ((glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dvARB")) == NULL) || r; + r = ((glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fARB")) == NULL) || r; + r = ((glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fvARB")) == NULL) || r; + r = ((glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glProgramStringARB")) == NULL) || r; + r = ((glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dARB")) == NULL) || r; + r = ((glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvARB")) == NULL) || r; + r = ((glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fARB")) == NULL) || r; + r = ((glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvARB")) == NULL) || r; + r = ((glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sARB")) == NULL) || r; + r = ((glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svARB")) == NULL) || r; + r = ((glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dARB")) == NULL) || r; + r = ((glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvARB")) == NULL) || r; + r = ((glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fARB")) == NULL) || r; + r = ((glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvARB")) == NULL) || r; + r = ((glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sARB")) == NULL) || r; + r = ((glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svARB")) == NULL) || r; + r = ((glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dARB")) == NULL) || r; + r = ((glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvARB")) == NULL) || r; + r = ((glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fARB")) == NULL) || r; + r = ((glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvARB")) == NULL) || r; + r = ((glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sARB")) == NULL) || r; + r = ((glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svARB")) == NULL) || r; + r = ((glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NbvARB")) == NULL) || r; + r = ((glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NivARB")) == NULL) || r; + r = ((glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NsvARB")) == NULL) || r; + r = ((glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubARB")) == NULL) || r; + r = ((glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubvARB")) == NULL) || r; + r = ((glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NuivARB")) == NULL) || r; + r = ((glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NusvARB")) == NULL) || r; + r = ((glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bvARB")) == NULL) || r; + r = ((glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dARB")) == NULL) || r; + r = ((glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvARB")) == NULL) || r; + r = ((glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fARB")) == NULL) || r; + r = ((glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvARB")) == NULL) || r; + r = ((glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ivARB")) == NULL) || r; + r = ((glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sARB")) == NULL) || r; + r = ((glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svARB")) == NULL) || r; + r = ((glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvARB")) == NULL) || r; + r = ((glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uivARB")) == NULL) || r; + r = ((glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usvARB")) == NULL) || r; + r = ((glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_program */ + +#ifdef GL_ARB_vertex_shader + +static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocationARB")) == NULL) || r; + r = ((glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttribARB")) == NULL) || r; + r = ((glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocationARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_shader */ + +#ifdef GL_ARB_window_pos + +static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dARB")) == NULL) || r; + r = ((glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvARB")) == NULL) || r; + r = ((glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fARB")) == NULL) || r; + r = ((glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvARB")) == NULL) || r; + r = ((glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iARB")) == NULL) || r; + r = ((glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivARB")) == NULL) || r; + r = ((glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sARB")) == NULL) || r; + r = ((glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svARB")) == NULL) || r; + r = ((glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dARB")) == NULL) || r; + r = ((glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvARB")) == NULL) || r; + r = ((glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fARB")) == NULL) || r; + r = ((glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvARB")) == NULL) || r; + r = ((glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iARB")) == NULL) || r; + r = ((glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivARB")) == NULL) || r; + r = ((glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sARB")) == NULL) || r; + r = ((glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_window_pos */ + +#ifdef GL_ATIX_point_sprites + +#endif /* GL_ATIX_point_sprites */ + +#ifdef GL_ATIX_texture_env_combine3 + +#endif /* GL_ATIX_texture_env_combine3 */ + +#ifdef GL_ATIX_texture_env_route + +#endif /* GL_ATIX_texture_env_route */ + +#ifdef GL_ATIX_vertex_shader_output_point_size + +#endif /* GL_ATIX_vertex_shader_output_point_size */ + +#ifdef GL_ATI_draw_buffers + +static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_draw_buffers */ + +#ifdef GL_ATI_element_array + +static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayATI")) == NULL) || r; + r = ((glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayATI")) == NULL) || r; + r = ((glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)glewGetProcAddress((const GLubyte*)"glElementPointerATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_element_array */ + +#ifdef GL_ATI_envmap_bumpmap + +static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterfvATI")) == NULL) || r; + r = ((glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterivATI")) == NULL) || r; + r = ((glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterfvATI")) == NULL) || r; + r = ((glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterivATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_envmap_bumpmap */ + +#ifdef GL_ATI_fragment_shader + +static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp1ATI")) == NULL) || r; + r = ((glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp2ATI")) == NULL) || r; + r = ((glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp3ATI")) == NULL) || r; + r = ((glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBeginFragmentShaderATI")) == NULL) || r; + r = ((glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBindFragmentShaderATI")) == NULL) || r; + r = ((glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp1ATI")) == NULL) || r; + r = ((glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp2ATI")) == NULL) || r; + r = ((glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp3ATI")) == NULL) || r; + r = ((glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glDeleteFragmentShaderATI")) == NULL) || r; + r = ((glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glEndFragmentShaderATI")) == NULL) || r; + r = ((glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)glewGetProcAddress((const GLubyte*)"glGenFragmentShadersATI")) == NULL) || r; + r = ((glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)glewGetProcAddress((const GLubyte*)"glPassTexCoordATI")) == NULL) || r; + r = ((glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)glewGetProcAddress((const GLubyte*)"glSampleMapATI")) == NULL) || r; + r = ((glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)glewGetProcAddress((const GLubyte*)"glSetFragmentShaderConstantATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_fragment_shader */ + +#ifdef GL_ATI_map_object_buffer + +static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glMapObjectBufferATI")) == NULL) || r; + r = ((glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUnmapObjectBufferATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_map_object_buffer */ + +#ifdef GL_ATI_pn_triangles + +static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesfATI")) == NULL) || r; + r = ((glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesiATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_pn_triangles */ + +#ifdef GL_ATI_separate_stencil + +static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparateATI")) == NULL) || r; + r = ((glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparateATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_separate_stencil */ + +#ifdef GL_ATI_shader_texture_lod + +#endif /* GL_ATI_shader_texture_lod */ + +#ifdef GL_ATI_text_fragment_shader + +#endif /* GL_ATI_text_fragment_shader */ + +#ifdef GL_ATI_texture_compression_3dc + +#endif /* GL_ATI_texture_compression_3dc */ + +#ifdef GL_ATI_texture_env_combine3 + +#endif /* GL_ATI_texture_env_combine3 */ + +#ifdef GL_ATI_texture_float + +#endif /* GL_ATI_texture_float */ + +#ifdef GL_ATI_texture_mirror_once + +#endif /* GL_ATI_texture_mirror_once */ + +#ifdef GL_ATI_vertex_array_object + +static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glArrayObjectATI")) == NULL) || r; + r = ((glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glFreeObjectBufferATI")) == NULL) || r; + r = ((glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectfvATI")) == NULL) || r; + r = ((glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectivATI")) == NULL) || r; + r = ((glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferfvATI")) == NULL) || r; + r = ((glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferivATI")) == NULL) || r; + r = ((glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectfvATI")) == NULL) || r; + r = ((glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectivATI")) == NULL) || r; + r = ((glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glIsObjectBufferATI")) == NULL) || r; + r = ((glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glNewObjectBufferATI")) == NULL) || r; + r = ((glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUpdateObjectBufferATI")) == NULL) || r; + r = ((glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVariantArrayObjectATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_array_object */ + +#ifdef GL_ATI_vertex_attrib_array_object + +static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectfvATI")) == NULL) || r; + r = ((glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectivATI")) == NULL) || r; + r = ((glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribArrayObjectATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifdef GL_ATI_vertex_streams + +static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)glewGetProcAddress((const GLubyte*)"glClientActiveVertexStreamATI")) == NULL) || r; + r = ((glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bATI")) == NULL) || r; + r = ((glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bvATI")) == NULL) || r; + r = ((glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dATI")) == NULL) || r; + r = ((glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dvATI")) == NULL) || r; + r = ((glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fATI")) == NULL) || r; + r = ((glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fvATI")) == NULL) || r; + r = ((glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3iATI")) == NULL) || r; + r = ((glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3ivATI")) == NULL) || r; + r = ((glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3sATI")) == NULL) || r; + r = ((glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3svATI")) == NULL) || r; + r = ((glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnvfATI")) == NULL) || r; + r = ((glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnviATI")) == NULL) || r; + r = ((glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dATI")) == NULL) || r; + r = ((glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dvATI")) == NULL) || r; + r = ((glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fATI")) == NULL) || r; + r = ((glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fvATI")) == NULL) || r; + r = ((glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2iATI")) == NULL) || r; + r = ((glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2ivATI")) == NULL) || r; + r = ((glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2sATI")) == NULL) || r; + r = ((glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2svATI")) == NULL) || r; + r = ((glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dATI")) == NULL) || r; + r = ((glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dvATI")) == NULL) || r; + r = ((glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fATI")) == NULL) || r; + r = ((glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fvATI")) == NULL) || r; + r = ((glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3iATI")) == NULL) || r; + r = ((glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3ivATI")) == NULL) || r; + r = ((glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3sATI")) == NULL) || r; + r = ((glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3svATI")) == NULL) || r; + r = ((glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dATI")) == NULL) || r; + r = ((glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dvATI")) == NULL) || r; + r = ((glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fATI")) == NULL) || r; + r = ((glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fvATI")) == NULL) || r; + r = ((glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4iATI")) == NULL) || r; + r = ((glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4ivATI")) == NULL) || r; + r = ((glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4sATI")) == NULL) || r; + r = ((glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4svATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_streams */ + +#ifdef GL_EXT_422_pixels + +#endif /* GL_EXT_422_pixels */ + +#ifdef GL_EXT_Cg_shader + +#endif /* GL_EXT_Cg_shader */ + +#ifdef GL_EXT_abgr + +#endif /* GL_EXT_abgr */ + +#ifdef GL_EXT_bgra + +#endif /* GL_EXT_bgra */ + +#ifdef GL_EXT_bindable_uniform + +static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBufferSizeEXT")) == NULL) || r; + r = ((glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformOffsetEXT")) == NULL) || r; + r = ((glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUniformBufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_bindable_uniform */ + +#ifdef GL_EXT_blend_color + +static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)glewGetProcAddress((const GLubyte*)"glBlendColorEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_color */ + +#ifdef GL_EXT_blend_equation_separate + +static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_equation_separate */ + +#ifdef GL_EXT_blend_func_separate + +static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_func_separate */ + +#ifdef GL_EXT_blend_logic_op + +#endif /* GL_EXT_blend_logic_op */ + +#ifdef GL_EXT_blend_minmax + +static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_minmax */ + +#ifdef GL_EXT_blend_subtract + +#endif /* GL_EXT_blend_subtract */ + +#ifdef GL_EXT_clip_volume_hint + +#endif /* GL_EXT_clip_volume_hint */ + +#ifdef GL_EXT_cmyka + +#endif /* GL_EXT_cmyka */ + +#ifdef GL_EXT_color_subtable + +static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorSubTableEXT")) == NULL) || r; + r = ((glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTableEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_color_subtable */ + +#ifdef GL_EXT_compiled_vertex_array + +static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glLockArraysEXT")) == NULL) || r; + r = ((glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glUnlockArraysEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_compiled_vertex_array */ + +#ifdef GL_EXT_convolution + +static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1DEXT")) == NULL) || r; + r = ((glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2DEXT")) == NULL) || r; + r = ((glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfEXT")) == NULL) || r; + r = ((glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfvEXT")) == NULL) || r; + r = ((glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriEXT")) == NULL) || r; + r = ((glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterivEXT")) == NULL) || r; + r = ((glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1DEXT")) == NULL) || r; + r = ((glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2DEXT")) == NULL) || r; + r = ((glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilterEXT")) == NULL) || r; + r = ((glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfvEXT")) == NULL) || r; + r = ((glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterivEXT")) == NULL) || r; + r = ((glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilterEXT")) == NULL) || r; + r = ((glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_convolution */ + +#ifdef GL_EXT_coordinate_frame + +static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glBinormalPointerEXT")) == NULL) || r; + r = ((glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTangentPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_coordinate_frame */ + +#ifdef GL_EXT_copy_texture + +static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage1DEXT")) == NULL) || r; + r = ((glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage2DEXT")) == NULL) || r; + r = ((glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage1DEXT")) == NULL) || r; + r = ((glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage2DEXT")) == NULL) || r; + r = ((glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_copy_texture */ + +#ifdef GL_EXT_cull_vertex + +static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterdvEXT")) == NULL) || r; + r = ((glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_cull_vertex */ + +#ifdef GL_EXT_depth_bounds_test + +static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_depth_bounds_test */ + +#ifdef GL_EXT_draw_buffers2 + +static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glColorMaskIndexedEXT")) == NULL) || r; + r = ((glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableIndexedEXT")) == NULL) || r; + r = ((glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableIndexedEXT")) == NULL) || r; + r = ((glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetBooleanIndexedvEXT")) == NULL) || r; + r = ((glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerIndexedvEXT")) == NULL) || r; + r = ((glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledIndexedEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_buffers2 */ + +#ifdef GL_EXT_draw_instanced + +static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedEXT")) == NULL) || r; + r = ((glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_instanced */ + +#ifdef GL_EXT_draw_range_elements + +static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_range_elements */ + +#ifdef GL_EXT_fog_coord + +static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerEXT")) == NULL) || r; + r = ((glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddEXT")) == NULL) || r; + r = ((glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddvEXT")) == NULL) || r; + r = ((glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfEXT")) == NULL) || r; + r = ((glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_fog_coord */ + +#ifdef GL_EXT_fragment_lighting + +static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFragmentColorMaterialEXT = (PFNGLFRAGMENTCOLORMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialEXT")) == NULL) || r; + r = ((glFragmentLightModelfEXT = (PFNGLFRAGMENTLIGHTMODELFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfEXT")) == NULL) || r; + r = ((glFragmentLightModelfvEXT = (PFNGLFRAGMENTLIGHTMODELFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvEXT")) == NULL) || r; + r = ((glFragmentLightModeliEXT = (PFNGLFRAGMENTLIGHTMODELIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliEXT")) == NULL) || r; + r = ((glFragmentLightModelivEXT = (PFNGLFRAGMENTLIGHTMODELIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivEXT")) == NULL) || r; + r = ((glFragmentLightfEXT = (PFNGLFRAGMENTLIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfEXT")) == NULL) || r; + r = ((glFragmentLightfvEXT = (PFNGLFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvEXT")) == NULL) || r; + r = ((glFragmentLightiEXT = (PFNGLFRAGMENTLIGHTIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiEXT")) == NULL) || r; + r = ((glFragmentLightivEXT = (PFNGLFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivEXT")) == NULL) || r; + r = ((glFragmentMaterialfEXT = (PFNGLFRAGMENTMATERIALFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfEXT")) == NULL) || r; + r = ((glFragmentMaterialfvEXT = (PFNGLFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvEXT")) == NULL) || r; + r = ((glFragmentMaterialiEXT = (PFNGLFRAGMENTMATERIALIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiEXT")) == NULL) || r; + r = ((glFragmentMaterialivEXT = (PFNGLFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivEXT")) == NULL) || r; + r = ((glGetFragmentLightfvEXT = (PFNGLGETFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvEXT")) == NULL) || r; + r = ((glGetFragmentLightivEXT = (PFNGLGETFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivEXT")) == NULL) || r; + r = ((glGetFragmentMaterialfvEXT = (PFNGLGETFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvEXT")) == NULL) || r; + r = ((glGetFragmentMaterialivEXT = (PFNGLGETFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivEXT")) == NULL) || r; + r = ((glLightEnviEXT = (PFNGLLIGHTENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glLightEnviEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_fragment_lighting */ + +#ifdef GL_EXT_framebuffer_blit + +static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_blit */ + +#ifdef GL_EXT_framebuffer_multisample + +static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_multisample */ + +#ifdef GL_EXT_framebuffer_object + +static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindFramebufferEXT")) == NULL) || r; + r = ((glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbufferEXT")) == NULL) || r; + r = ((glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatusEXT")) == NULL) || r; + r = ((glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffersEXT")) == NULL) || r; + r = ((glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffersEXT")) == NULL) || r; + r = ((glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbufferEXT")) == NULL) || r; + r = ((glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1DEXT")) == NULL) || r; + r = ((glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2DEXT")) == NULL) || r; + r = ((glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3DEXT")) == NULL) || r; + r = ((glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffersEXT")) == NULL) || r; + r = ((glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffersEXT")) == NULL) || r; + r = ((glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmapEXT")) == NULL) || r; + r = ((glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameterivEXT")) == NULL) || r; + r = ((glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameterivEXT")) == NULL) || r; + r = ((glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsFramebufferEXT")) == NULL) || r; + r = ((glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbufferEXT")) == NULL) || r; + r = ((glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_object */ + +#ifdef GL_EXT_framebuffer_sRGB + +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifdef GL_EXT_geometry_shader4 + +static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureEXT")) == NULL) || r; + r = ((glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceEXT")) == NULL) || r; + r = ((glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerEXT")) == NULL) || r; + r = ((glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_geometry_shader4 */ + +#ifdef GL_EXT_gpu_program_parameters + +static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameters4fvEXT")) == NULL) || r; + r = ((glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameters4fvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_gpu_program_parameters */ + +#ifdef GL_EXT_gpu_shader4 + +static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationEXT")) == NULL) || r; + r = ((glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocationEXT")) == NULL) || r; + r = ((glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuivEXT")) == NULL) || r; + r = ((glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIivEXT")) == NULL) || r; + r = ((glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuivEXT")) == NULL) || r; + r = ((glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiEXT")) == NULL) || r; + r = ((glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uivEXT")) == NULL) || r; + r = ((glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiEXT")) == NULL) || r; + r = ((glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uivEXT")) == NULL) || r; + r = ((glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiEXT")) == NULL) || r; + r = ((glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uivEXT")) == NULL) || r; + r = ((glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiEXT")) == NULL) || r; + r = ((glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uivEXT")) == NULL) || r; + r = ((glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iEXT")) == NULL) || r; + r = ((glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ivEXT")) == NULL) || r; + r = ((glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiEXT")) == NULL) || r; + r = ((glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uivEXT")) == NULL) || r; + r = ((glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iEXT")) == NULL) || r; + r = ((glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ivEXT")) == NULL) || r; + r = ((glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiEXT")) == NULL) || r; + r = ((glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uivEXT")) == NULL) || r; + r = ((glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iEXT")) == NULL) || r; + r = ((glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ivEXT")) == NULL) || r; + r = ((glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiEXT")) == NULL) || r; + r = ((glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uivEXT")) == NULL) || r; + r = ((glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bvEXT")) == NULL) || r; + r = ((glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iEXT")) == NULL) || r; + r = ((glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ivEXT")) == NULL) || r; + r = ((glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4svEXT")) == NULL) || r; + r = ((glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubvEXT")) == NULL) || r; + r = ((glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiEXT")) == NULL) || r; + r = ((glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uivEXT")) == NULL) || r; + r = ((glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usvEXT")) == NULL) || r; + r = ((glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_gpu_shader4 */ + +#ifdef GL_EXT_histogram + +static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramEXT")) == NULL) || r; + r = ((glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfvEXT")) == NULL) || r; + r = ((glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterivEXT")) == NULL) || r; + r = ((glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxEXT")) == NULL) || r; + r = ((glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfvEXT")) == NULL) || r; + r = ((glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterivEXT")) == NULL) || r; + r = ((glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glHistogramEXT")) == NULL) || r; + r = ((glMinmaxEXT = (PFNGLMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glMinmaxEXT")) == NULL) || r; + r = ((glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glResetHistogramEXT")) == NULL) || r; + r = ((glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glResetMinmaxEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_histogram */ + +#ifdef GL_EXT_index_array_formats + +#endif /* GL_EXT_index_array_formats */ + +#ifdef GL_EXT_index_func + +static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexFuncEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_index_func */ + +#ifdef GL_EXT_index_material + +static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexMaterialEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_index_material */ + +#ifdef GL_EXT_index_texture + +#endif /* GL_EXT_index_texture */ + +#ifdef GL_EXT_light_texture + +static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glApplyTextureEXT")) == NULL) || r; + r = ((glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureLightEXT")) == NULL) || r; + r = ((glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureMaterialEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_light_texture */ + +#ifdef GL_EXT_misc_attribute + +#endif /* GL_EXT_misc_attribute */ + +#ifdef GL_EXT_multi_draw_arrays + +static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysEXT")) == NULL) || r; + r = ((glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_multi_draw_arrays */ + +#ifdef GL_EXT_multisample + +static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskEXT")) == NULL) || r; + r = ((glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_multisample */ + +#ifdef GL_EXT_packed_depth_stencil + +#endif /* GL_EXT_packed_depth_stencil */ + +#ifdef GL_EXT_packed_float + +#endif /* GL_EXT_packed_float */ + +#ifdef GL_EXT_packed_pixels + +#endif /* GL_EXT_packed_pixels */ + +#ifdef GL_EXT_paletted_texture + +static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorTableEXT")) == NULL) || r; + r = ((glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableEXT")) == NULL) || r; + r = ((glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvEXT")) == NULL) || r; + r = ((glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_paletted_texture */ + +#ifdef GL_EXT_pixel_buffer_object + +#endif /* GL_EXT_pixel_buffer_object */ + +#ifdef GL_EXT_pixel_transform + +static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterfvEXT")) == NULL) || r; + r = ((glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterivEXT")) == NULL) || r; + r = ((glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfEXT")) == NULL) || r; + r = ((glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfvEXT")) == NULL) || r; + r = ((glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameteriEXT")) == NULL) || r; + r = ((glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_pixel_transform */ + +#ifdef GL_EXT_pixel_transform_color_table + +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifdef GL_EXT_point_parameters + +static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfEXT")) == NULL) || r; + r = ((glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_point_parameters */ + +#ifdef GL_EXT_polygon_offset + +static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_polygon_offset */ + +#ifdef GL_EXT_rescale_normal + +#endif /* GL_EXT_rescale_normal */ + +#ifdef GL_EXT_scene_marker + +static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginSceneEXT = (PFNGLBEGINSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginSceneEXT")) == NULL) || r; + r = ((glEndSceneEXT = (PFNGLENDSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glEndSceneEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_scene_marker */ + +#ifdef GL_EXT_secondary_color + +static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bEXT")) == NULL) || r; + r = ((glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bvEXT")) == NULL) || r; + r = ((glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dEXT")) == NULL) || r; + r = ((glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dvEXT")) == NULL) || r; + r = ((glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fEXT")) == NULL) || r; + r = ((glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fvEXT")) == NULL) || r; + r = ((glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iEXT")) == NULL) || r; + r = ((glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ivEXT")) == NULL) || r; + r = ((glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sEXT")) == NULL) || r; + r = ((glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3svEXT")) == NULL) || r; + r = ((glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubEXT")) == NULL) || r; + r = ((glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubvEXT")) == NULL) || r; + r = ((glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiEXT")) == NULL) || r; + r = ((glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uivEXT")) == NULL) || r; + r = ((glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usEXT")) == NULL) || r; + r = ((glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usvEXT")) == NULL) || r; + r = ((glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_secondary_color */ + +#ifdef GL_EXT_separate_specular_color + +#endif /* GL_EXT_separate_specular_color */ + +#ifdef GL_EXT_shadow_funcs + +#endif /* GL_EXT_shadow_funcs */ + +#ifdef GL_EXT_shared_texture_palette + +#endif /* GL_EXT_shared_texture_palette */ + +#ifdef GL_EXT_stencil_clear_tag + +#endif /* GL_EXT_stencil_clear_tag */ + +#ifdef GL_EXT_stencil_two_side + +static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveStencilFaceEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_stencil_two_side */ + +#ifdef GL_EXT_stencil_wrap + +#endif /* GL_EXT_stencil_wrap */ + +#ifdef GL_EXT_subtexture + +static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage1DEXT")) == NULL) || r; + r = ((glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage2DEXT")) == NULL) || r; + r = ((glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_subtexture */ + +#ifdef GL_EXT_texture + +#endif /* GL_EXT_texture */ + +#ifdef GL_EXT_texture3D + +static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture3D */ + +#ifdef GL_EXT_texture_array + +#endif /* GL_EXT_texture_array */ + +#ifdef GL_EXT_texture_buffer_object + +static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexBufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_buffer_object */ + +#ifdef GL_EXT_texture_compression_dxt1 + +#endif /* GL_EXT_texture_compression_dxt1 */ + +#ifdef GL_EXT_texture_compression_latc + +#endif /* GL_EXT_texture_compression_latc */ + +#ifdef GL_EXT_texture_compression_rgtc + +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifdef GL_EXT_texture_compression_s3tc + +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifdef GL_EXT_texture_cube_map + +#endif /* GL_EXT_texture_cube_map */ + +#ifdef GL_EXT_texture_edge_clamp + +#endif /* GL_EXT_texture_edge_clamp */ + +#ifdef GL_EXT_texture_env + +#endif /* GL_EXT_texture_env */ + +#ifdef GL_EXT_texture_env_add + +#endif /* GL_EXT_texture_env_add */ + +#ifdef GL_EXT_texture_env_combine + +#endif /* GL_EXT_texture_env_combine */ + +#ifdef GL_EXT_texture_env_dot3 + +#endif /* GL_EXT_texture_env_dot3 */ + +#ifdef GL_EXT_texture_filter_anisotropic + +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifdef GL_EXT_texture_integer + +static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIiEXT")) == NULL) || r; + r = ((glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIuiEXT")) == NULL) || r; + r = ((glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIivEXT")) == NULL) || r; + r = ((glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuivEXT")) == NULL) || r; + r = ((glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIivEXT")) == NULL) || r; + r = ((glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_integer */ + +#ifdef GL_EXT_texture_lod_bias + +#endif /* GL_EXT_texture_lod_bias */ + +#ifdef GL_EXT_texture_mirror_clamp + +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifdef GL_EXT_texture_object + +static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)glewGetProcAddress((const GLubyte*)"glAreTexturesResidentEXT")) == NULL) || r; + r = ((glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureEXT")) == NULL) || r; + r = ((glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteTexturesEXT")) == NULL) || r; + r = ((glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glGenTexturesEXT")) == NULL) || r; + r = ((glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glIsTextureEXT")) == NULL) || r; + r = ((glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glPrioritizeTexturesEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_object */ + +#ifdef GL_EXT_texture_perturb_normal + +static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureNormalEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_perturb_normal */ + +#ifdef GL_EXT_texture_rectangle + +#endif /* GL_EXT_texture_rectangle */ + +#ifdef GL_EXT_texture_sRGB + +#endif /* GL_EXT_texture_sRGB */ + +#ifdef GL_EXT_texture_shared_exponent + +#endif /* GL_EXT_texture_shared_exponent */ + +#ifdef GL_EXT_timer_query + +static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vEXT")) == NULL) || r; + r = ((glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_timer_query */ + +#ifdef GL_EXT_vertex_array + +static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glArrayElementEXT")) == NULL) || r; + r = ((glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glColorPointerEXT")) == NULL) || r; + r = ((glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysEXT")) == NULL) || r; + r = ((glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerEXT")) == NULL) || r; + r = ((glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointervEXT")) == NULL) || r; + r = ((glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerEXT")) == NULL) || r; + r = ((glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerEXT")) == NULL) || r; + r = ((glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerEXT")) == NULL) || r; + r = ((glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_array */ + +#ifdef GL_EXT_vertex_shader + +static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBeginVertexShaderEXT")) == NULL) || r; + r = ((glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindLightParameterEXT")) == NULL) || r; + r = ((glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindMaterialParameterEXT")) == NULL) || r; + r = ((glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindParameterEXT")) == NULL) || r; + r = ((glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTexGenParameterEXT")) == NULL) || r; + r = ((glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureUnitParameterEXT")) == NULL) || r; + r = ((glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindVertexShaderEXT")) == NULL) || r; + r = ((glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexShaderEXT")) == NULL) || r; + r = ((glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVariantClientStateEXT")) == NULL) || r; + r = ((glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVariantClientStateEXT")) == NULL) || r; + r = ((glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glEndVertexShaderEXT")) == NULL) || r; + r = ((glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glExtractComponentEXT")) == NULL) || r; + r = ((glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenSymbolsEXT")) == NULL) || r; + r = ((glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenVertexShadersEXT")) == NULL) || r; + r = ((glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantBooleanvEXT")) == NULL) || r; + r = ((glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantFloatvEXT")) == NULL) || r; + r = ((glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantIntegervEXT")) == NULL) || r; + r = ((glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantBooleanvEXT")) == NULL) || r; + r = ((glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantFloatvEXT")) == NULL) || r; + r = ((glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantIntegervEXT")) == NULL) || r; + r = ((glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantBooleanvEXT")) == NULL) || r; + r = ((glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantFloatvEXT")) == NULL) || r; + r = ((glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantIntegervEXT")) == NULL) || r; + r = ((glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantPointervEXT")) == NULL) || r; + r = ((glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glInsertComponentEXT")) == NULL) || r; + r = ((glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsVariantEnabledEXT")) == NULL) || r; + r = ((glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetInvariantEXT")) == NULL) || r; + r = ((glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetLocalConstantEXT")) == NULL) || r; + r = ((glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp1EXT")) == NULL) || r; + r = ((glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp2EXT")) == NULL) || r; + r = ((glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp3EXT")) == NULL) || r; + r = ((glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)glewGetProcAddress((const GLubyte*)"glSwizzleEXT")) == NULL) || r; + r = ((glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVariantPointerEXT")) == NULL) || r; + r = ((glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantbvEXT")) == NULL) || r; + r = ((glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantdvEXT")) == NULL) || r; + r = ((glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantfvEXT")) == NULL) || r; + r = ((glVariantivEXT = (PFNGLVARIANTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantivEXT")) == NULL) || r; + r = ((glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantsvEXT")) == NULL) || r; + r = ((glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantubvEXT")) == NULL) || r; + r = ((glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantuivEXT")) == NULL) || r; + r = ((glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantusvEXT")) == NULL) || r; + r = ((glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glWriteMaskEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_shader */ + +#ifdef GL_EXT_vertex_weighting + +static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightPointerEXT")) == NULL) || r; + r = ((glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfEXT")) == NULL) || r; + r = ((glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_weighting */ + +#ifdef GL_GREMEDY_frame_terminator + +static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glFrameTerminatorGREMEDY")) == NULL) || r; + + return r; +} + +#endif /* GL_GREMEDY_frame_terminator */ + +#ifdef GL_GREMEDY_string_marker + +static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glStringMarkerGREMEDY")) == NULL) || r; + + return r; +} + +#endif /* GL_GREMEDY_string_marker */ + +#ifdef GL_HP_convolution_border_modes + +#endif /* GL_HP_convolution_border_modes */ + +#ifdef GL_HP_image_transform + +static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterfvHP")) == NULL) || r; + r = ((glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterivHP")) == NULL) || r; + r = ((glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfHP")) == NULL) || r; + r = ((glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfvHP")) == NULL) || r; + r = ((glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameteriHP")) == NULL) || r; + r = ((glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterivHP")) == NULL) || r; + + return r; +} + +#endif /* GL_HP_image_transform */ + +#ifdef GL_HP_occlusion_test + +#endif /* GL_HP_occlusion_test */ + +#ifdef GL_HP_texture_lighting + +#endif /* GL_HP_texture_lighting */ + +#ifdef GL_IBM_cull_vertex + +#endif /* GL_IBM_cull_vertex */ + +#ifdef GL_IBM_multimode_draw_arrays + +static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawArraysIBM")) == NULL) || r; + r = ((glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawElementsIBM")) == NULL) || r; + + return r; +} + +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifdef GL_IBM_rasterpos_clip + +#endif /* GL_IBM_rasterpos_clip */ + +#ifdef GL_IBM_static_data + +#endif /* GL_IBM_static_data */ + +#ifdef GL_IBM_texture_mirrored_repeat + +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifdef GL_IBM_vertex_array_lists + +static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glColorPointerListIBM")) == NULL) || r; + r = ((glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerListIBM")) == NULL) || r; + r = ((glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerListIBM")) == NULL) || r; + r = ((glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerListIBM")) == NULL) || r; + r = ((glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerListIBM")) == NULL) || r; + r = ((glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerListIBM")) == NULL) || r; + r = ((glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerListIBM")) == NULL) || r; + r = ((glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerListIBM")) == NULL) || r; + + return r; +} + +#endif /* GL_IBM_vertex_array_lists */ + +#ifdef GL_INGR_color_clamp + +#endif /* GL_INGR_color_clamp */ + +#ifdef GL_INGR_interlace_read + +#endif /* GL_INGR_interlace_read */ + +#ifdef GL_INTEL_parallel_arrays + +static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glColorPointervINTEL")) == NULL) || r; + r = ((glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glNormalPointervINTEL")) == NULL) || r; + r = ((glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointervINTEL")) == NULL) || r; + r = ((glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glVertexPointervINTEL")) == NULL) || r; + + return r; +} + +#endif /* GL_INTEL_parallel_arrays */ + +#ifdef GL_INTEL_texture_scissor + +static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexScissorFuncINTEL = (PFNGLTEXSCISSORFUNCINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorFuncINTEL")) == NULL) || r; + r = ((glTexScissorINTEL = (PFNGLTEXSCISSORINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorINTEL")) == NULL) || r; + + return r; +} + +#endif /* GL_INTEL_texture_scissor */ + +#ifdef GL_KTX_buffer_region + +static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBufferRegionEnabledEXT = (PFNGLBUFFERREGIONENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glBufferRegionEnabledEXT")) == NULL) || r; + r = ((glDeleteBufferRegionEXT = (PFNGLDELETEBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteBufferRegionEXT")) == NULL) || r; + r = ((glDrawBufferRegionEXT = (PFNGLDRAWBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawBufferRegionEXT")) == NULL) || r; + r = ((glNewBufferRegionEXT = (PFNGLNEWBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glNewBufferRegionEXT")) == NULL) || r; + r = ((glReadBufferRegionEXT = (PFNGLREADBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glReadBufferRegionEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_KTX_buffer_region */ + +#ifdef GL_MESAX_texture_stack + +#endif /* GL_MESAX_texture_stack */ + +#ifdef GL_MESA_pack_invert + +#endif /* GL_MESA_pack_invert */ + +#ifdef GL_MESA_resize_buffers + +static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glResizeBuffersMESA")) == NULL) || r; + + return r; +} + +#endif /* GL_MESA_resize_buffers */ + +#ifdef GL_MESA_window_pos + +static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dMESA")) == NULL) || r; + r = ((glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvMESA")) == NULL) || r; + r = ((glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fMESA")) == NULL) || r; + r = ((glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvMESA")) == NULL) || r; + r = ((glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iMESA")) == NULL) || r; + r = ((glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivMESA")) == NULL) || r; + r = ((glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sMESA")) == NULL) || r; + r = ((glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svMESA")) == NULL) || r; + r = ((glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dMESA")) == NULL) || r; + r = ((glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvMESA")) == NULL) || r; + r = ((glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fMESA")) == NULL) || r; + r = ((glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvMESA")) == NULL) || r; + r = ((glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iMESA")) == NULL) || r; + r = ((glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivMESA")) == NULL) || r; + r = ((glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sMESA")) == NULL) || r; + r = ((glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svMESA")) == NULL) || r; + r = ((glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dMESA")) == NULL) || r; + r = ((glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dvMESA")) == NULL) || r; + r = ((glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fMESA")) == NULL) || r; + r = ((glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fvMESA")) == NULL) || r; + r = ((glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4iMESA")) == NULL) || r; + r = ((glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4ivMESA")) == NULL) || r; + r = ((glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4sMESA")) == NULL) || r; + r = ((glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4svMESA")) == NULL) || r; + + return r; +} + +#endif /* GL_MESA_window_pos */ + +#ifdef GL_MESA_ycbcr_texture + +#endif /* GL_MESA_ycbcr_texture */ + +#ifdef GL_NV_blend_square + +#endif /* GL_NV_blend_square */ + +#ifdef GL_NV_copy_depth_to_color + +#endif /* GL_NV_copy_depth_to_color */ + +#ifdef GL_NV_depth_buffer_float + +static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)glewGetProcAddress((const GLubyte*)"glClearDepthdNV")) == NULL) || r; + r = ((glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsdNV")) == NULL) || r; + r = ((glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangedNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_depth_buffer_float */ + +#ifdef GL_NV_depth_clamp + +#endif /* GL_NV_depth_clamp */ + +#ifdef GL_NV_depth_range_unclamped + +#endif /* GL_NV_depth_range_unclamped */ + +#ifdef GL_NV_evaluators + +static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glEvalMapsNV = (PFNGLEVALMAPSNVPROC)glewGetProcAddress((const GLubyte*)"glEvalMapsNV")) == NULL) || r; + r = ((glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterfvNV")) == NULL) || r; + r = ((glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterivNV")) == NULL) || r; + r = ((glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapControlPointsNV")) == NULL) || r; + r = ((glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterfvNV")) == NULL) || r; + r = ((glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterivNV")) == NULL) || r; + r = ((glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glMapControlPointsNV")) == NULL) || r; + r = ((glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterfvNV")) == NULL) || r; + r = ((glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_evaluators */ + +#ifdef GL_NV_fence + +static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesNV")) == NULL) || r; + r = ((glFinishFenceNV = (PFNGLFINISHFENCENVPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceNV")) == NULL) || r; + r = ((glGenFencesNV = (PFNGLGENFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glGenFencesNV")) == NULL) || r; + r = ((glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFenceivNV")) == NULL) || r; + r = ((glIsFenceNV = (PFNGLISFENCENVPROC)glewGetProcAddress((const GLubyte*)"glIsFenceNV")) == NULL) || r; + r = ((glSetFenceNV = (PFNGLSETFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSetFenceNV")) == NULL) || r; + r = ((glTestFenceNV = (PFNGLTESTFENCENVPROC)glewGetProcAddress((const GLubyte*)"glTestFenceNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_fence */ + +#ifdef GL_NV_float_buffer + +#endif /* GL_NV_float_buffer */ + +#ifdef GL_NV_fog_distance + +#endif /* GL_NV_fog_distance */ + +#ifdef GL_NV_fragment_program + +static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterdvNV")) == NULL) || r; + r = ((glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterfvNV")) == NULL) || r; + r = ((glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dNV")) == NULL) || r; + r = ((glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dvNV")) == NULL) || r; + r = ((glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fNV")) == NULL) || r; + r = ((glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_fragment_program */ + +#ifdef GL_NV_fragment_program2 + +#endif /* GL_NV_fragment_program2 */ + +#ifdef GL_NV_fragment_program4 + +#endif /* GL_NV_fragment_program4 */ + +#ifdef GL_NV_fragment_program_option + +#endif /* GL_NV_fragment_program_option */ + +#ifdef GL_NV_framebuffer_multisample_coverage + +static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleCoverageNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifdef GL_NV_geometry_program4 + +static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)glewGetProcAddress((const GLubyte*)"glProgramVertexLimitNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_geometry_program4 */ + +#ifdef GL_NV_geometry_shader4 + +#endif /* GL_NV_geometry_shader4 */ + +#ifdef GL_NV_gpu_program4 + +static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4iNV")) == NULL) || r; + r = ((glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4ivNV")) == NULL) || r; + r = ((glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uiNV")) == NULL) || r; + r = ((glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uivNV")) == NULL) || r; + r = ((glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4ivNV")) == NULL) || r; + r = ((glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4uivNV")) == NULL) || r; + r = ((glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4iNV")) == NULL) || r; + r = ((glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4ivNV")) == NULL) || r; + r = ((glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uiNV")) == NULL) || r; + r = ((glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uivNV")) == NULL) || r; + r = ((glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4ivNV")) == NULL) || r; + r = ((glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4uivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_gpu_program4 */ + +#ifdef GL_NV_half_float + +static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColor3hNV = (PFNGLCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hNV")) == NULL) || r; + r = ((glColor3hvNV = (PFNGLCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hvNV")) == NULL) || r; + r = ((glColor4hNV = (PFNGLCOLOR4HNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hNV")) == NULL) || r; + r = ((glColor4hvNV = (PFNGLCOLOR4HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hvNV")) == NULL) || r; + r = ((glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhNV")) == NULL) || r; + r = ((glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhvNV")) == NULL) || r; + r = ((glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hNV")) == NULL) || r; + r = ((glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hvNV")) == NULL) || r; + r = ((glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hNV")) == NULL) || r; + r = ((glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hvNV")) == NULL) || r; + r = ((glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hNV")) == NULL) || r; + r = ((glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hvNV")) == NULL) || r; + r = ((glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hNV")) == NULL) || r; + r = ((glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hvNV")) == NULL) || r; + r = ((glNormal3hNV = (PFNGLNORMAL3HNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hNV")) == NULL) || r; + r = ((glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hvNV")) == NULL) || r; + r = ((glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hNV")) == NULL) || r; + r = ((glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hvNV")) == NULL) || r; + r = ((glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hNV")) == NULL) || r; + r = ((glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hvNV")) == NULL) || r; + r = ((glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hNV")) == NULL) || r; + r = ((glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hvNV")) == NULL) || r; + r = ((glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hNV")) == NULL) || r; + r = ((glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hvNV")) == NULL) || r; + r = ((glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hNV")) == NULL) || r; + r = ((glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hvNV")) == NULL) || r; + r = ((glVertex2hNV = (PFNGLVERTEX2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hNV")) == NULL) || r; + r = ((glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hvNV")) == NULL) || r; + r = ((glVertex3hNV = (PFNGLVERTEX3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hNV")) == NULL) || r; + r = ((glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hvNV")) == NULL) || r; + r = ((glVertex4hNV = (PFNGLVERTEX4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hNV")) == NULL) || r; + r = ((glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hvNV")) == NULL) || r; + r = ((glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hNV")) == NULL) || r; + r = ((glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hvNV")) == NULL) || r; + r = ((glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hNV")) == NULL) || r; + r = ((glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hvNV")) == NULL) || r; + r = ((glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hNV")) == NULL) || r; + r = ((glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hvNV")) == NULL) || r; + r = ((glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hNV")) == NULL) || r; + r = ((glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hvNV")) == NULL) || r; + r = ((glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1hvNV")) == NULL) || r; + r = ((glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2hvNV")) == NULL) || r; + r = ((glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3hvNV")) == NULL) || r; + r = ((glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4hvNV")) == NULL) || r; + r = ((glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthNV")) == NULL) || r; + r = ((glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_half_float */ + +#ifdef GL_NV_light_max_exponent + +#endif /* GL_NV_light_max_exponent */ + +#ifdef GL_NV_multisample_filter_hint + +#endif /* GL_NV_multisample_filter_hint */ + +#ifdef GL_NV_occlusion_query + +static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glBeginOcclusionQueryNV")) == NULL) || r; + r = ((glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteOcclusionQueriesNV")) == NULL) || r; + r = ((glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glEndOcclusionQueryNV")) == NULL) || r; + r = ((glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glGenOcclusionQueriesNV")) == NULL) || r; + r = ((glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryivNV")) == NULL) || r; + r = ((glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryuivNV")) == NULL) || r; + r = ((glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glIsOcclusionQueryNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_occlusion_query */ + +#ifdef GL_NV_packed_depth_stencil + +#endif /* GL_NV_packed_depth_stencil */ + +#ifdef GL_NV_parameter_buffer_object + +static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIivNV")) == NULL) || r; + r = ((glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIuivNV")) == NULL) || r; + r = ((glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersfvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_parameter_buffer_object */ + +#ifdef GL_NV_pixel_data_range + +static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushPixelDataRangeNV")) == NULL) || r; + r = ((glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glPixelDataRangeNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_pixel_data_range */ + +#ifdef GL_NV_point_sprite + +static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriNV")) == NULL) || r; + r = ((glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_point_sprite */ + +#ifdef GL_NV_primitive_restart + +static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndexNV")) == NULL) || r; + r = ((glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_primitive_restart */ + +#ifdef GL_NV_register_combiners + +static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerInputNV")) == NULL) || r; + r = ((glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerOutputNV")) == NULL) || r; + r = ((glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfNV")) == NULL) || r; + r = ((glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfvNV")) == NULL) || r; + r = ((glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameteriNV")) == NULL) || r; + r = ((glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterivNV")) == NULL) || r; + r = ((glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glFinalCombinerInputNV")) == NULL) || r; + r = ((glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterfvNV")) == NULL) || r; + r = ((glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterivNV")) == NULL) || r; + r = ((glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterfvNV")) == NULL) || r; + r = ((glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterivNV")) == NULL) || r; + r = ((glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterfvNV")) == NULL) || r; + r = ((glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_register_combiners */ + +#ifdef GL_NV_register_combiners2 + +static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerStageParameterfvNV")) == NULL) || r; + r = ((glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerStageParameterfvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_register_combiners2 */ + +#ifdef GL_NV_texgen_emboss + +#endif /* GL_NV_texgen_emboss */ + +#ifdef GL_NV_texgen_reflection + +#endif /* GL_NV_texgen_reflection */ + +#ifdef GL_NV_texture_compression_vtc + +#endif /* GL_NV_texture_compression_vtc */ + +#ifdef GL_NV_texture_env_combine4 + +#endif /* GL_NV_texture_env_combine4 */ + +#ifdef GL_NV_texture_expand_normal + +#endif /* GL_NV_texture_expand_normal */ + +#ifdef GL_NV_texture_rectangle + +#endif /* GL_NV_texture_rectangle */ + +#ifdef GL_NV_texture_shader + +#endif /* GL_NV_texture_shader */ + +#ifdef GL_NV_texture_shader2 + +#endif /* GL_NV_texture_shader2 */ + +#ifdef GL_NV_texture_shader3 + +#endif /* GL_NV_texture_shader3 */ + +#ifdef GL_NV_transform_feedback + +static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glActiveVaryingNV")) == NULL) || r; + r = ((glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackNV")) == NULL) || r; + r = ((glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseNV")) == NULL) || r; + r = ((glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetNV")) == NULL) || r; + r = ((glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeNV")) == NULL) || r; + r = ((glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackNV")) == NULL) || r; + r = ((glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveVaryingNV")) == NULL) || r; + r = ((glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingNV")) == NULL) || r; + r = ((glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)glewGetProcAddress((const GLubyte*)"glGetVaryingLocationNV")) == NULL) || r; + r = ((glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackAttribsNV")) == NULL) || r; + r = ((glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_transform_feedback */ + +#ifdef GL_NV_vertex_array_range + +static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeNV")) == NULL) || r; + r = ((glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_vertex_array_range */ + +#ifdef GL_NV_vertex_array_range2 + +#endif /* GL_NV_vertex_array_range2 */ + +#ifdef GL_NV_vertex_program + +static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glAreProgramsResidentNV")) == NULL) || r; + r = ((glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glBindProgramNV")) == NULL) || r; + r = ((glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsNV")) == NULL) || r; + r = ((glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glExecuteProgramNV")) == NULL) || r; + r = ((glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsNV")) == NULL) || r; + r = ((glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterdvNV")) == NULL) || r; + r = ((glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterfvNV")) == NULL) || r; + r = ((glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringNV")) == NULL) || r; + r = ((glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivNV")) == NULL) || r; + r = ((glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetTrackMatrixivNV")) == NULL) || r; + r = ((glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervNV")) == NULL) || r; + r = ((glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvNV")) == NULL) || r; + r = ((glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvNV")) == NULL) || r; + r = ((glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivNV")) == NULL) || r; + r = ((glIsProgramNV = (PFNGLISPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glIsProgramNV")) == NULL) || r; + r = ((glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glLoadProgramNV")) == NULL) || r; + r = ((glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dNV")) == NULL) || r; + r = ((glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dvNV")) == NULL) || r; + r = ((glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fNV")) == NULL) || r; + r = ((glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fvNV")) == NULL) || r; + r = ((glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4dvNV")) == NULL) || r; + r = ((glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4fvNV")) == NULL) || r; + r = ((glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glRequestResidentProgramsNV")) == NULL) || r; + r = ((glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)glewGetProcAddress((const GLubyte*)"glTrackMatrixNV")) == NULL) || r; + r = ((glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dNV")) == NULL) || r; + r = ((glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvNV")) == NULL) || r; + r = ((glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fNV")) == NULL) || r; + r = ((glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvNV")) == NULL) || r; + r = ((glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sNV")) == NULL) || r; + r = ((glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svNV")) == NULL) || r; + r = ((glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dNV")) == NULL) || r; + r = ((glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvNV")) == NULL) || r; + r = ((glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fNV")) == NULL) || r; + r = ((glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvNV")) == NULL) || r; + r = ((glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sNV")) == NULL) || r; + r = ((glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svNV")) == NULL) || r; + r = ((glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dNV")) == NULL) || r; + r = ((glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvNV")) == NULL) || r; + r = ((glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fNV")) == NULL) || r; + r = ((glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvNV")) == NULL) || r; + r = ((glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sNV")) == NULL) || r; + r = ((glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svNV")) == NULL) || r; + r = ((glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dNV")) == NULL) || r; + r = ((glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvNV")) == NULL) || r; + r = ((glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fNV")) == NULL) || r; + r = ((glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvNV")) == NULL) || r; + r = ((glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sNV")) == NULL) || r; + r = ((glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svNV")) == NULL) || r; + r = ((glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubNV")) == NULL) || r; + r = ((glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvNV")) == NULL) || r; + r = ((glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerNV")) == NULL) || r; + r = ((glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1dvNV")) == NULL) || r; + r = ((glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1fvNV")) == NULL) || r; + r = ((glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1svNV")) == NULL) || r; + r = ((glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2dvNV")) == NULL) || r; + r = ((glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2fvNV")) == NULL) || r; + r = ((glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2svNV")) == NULL) || r; + r = ((glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3dvNV")) == NULL) || r; + r = ((glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3fvNV")) == NULL) || r; + r = ((glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3svNV")) == NULL) || r; + r = ((glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4dvNV")) == NULL) || r; + r = ((glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4fvNV")) == NULL) || r; + r = ((glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4svNV")) == NULL) || r; + r = ((glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4ubvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_vertex_program */ + +#ifdef GL_NV_vertex_program1_1 + +#endif /* GL_NV_vertex_program1_1 */ + +#ifdef GL_NV_vertex_program2 + +#endif /* GL_NV_vertex_program2 */ + +#ifdef GL_NV_vertex_program2_option + +#endif /* GL_NV_vertex_program2_option */ + +#ifdef GL_NV_vertex_program3 + +#endif /* GL_NV_vertex_program3 */ + +#ifdef GL_NV_vertex_program4 + +#endif /* GL_NV_vertex_program4 */ + +#ifdef GL_OES_byte_coordinates + +#endif /* GL_OES_byte_coordinates */ + +#ifdef GL_OES_compressed_paletted_texture + +#endif /* GL_OES_compressed_paletted_texture */ + +#ifdef GL_OES_read_format + +#endif /* GL_OES_read_format */ + +#ifdef GL_OES_single_precision + +static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)glewGetProcAddress((const GLubyte*)"glClearDepthfOES")) == NULL) || r; + r = ((glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glClipPlanefOES")) == NULL) || r; + r = ((glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)glewGetProcAddress((const GLubyte*)"glDepthRangefOES")) == NULL) || r; + r = ((glFrustumfOES = (PFNGLFRUSTUMFOESPROC)glewGetProcAddress((const GLubyte*)"glFrustumfOES")) == NULL) || r; + r = ((glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanefOES")) == NULL) || r; + r = ((glOrthofOES = (PFNGLORTHOFOESPROC)glewGetProcAddress((const GLubyte*)"glOrthofOES")) == NULL) || r; + + return r; +} + +#endif /* GL_OES_single_precision */ + +#ifdef GL_OML_interlace + +#endif /* GL_OML_interlace */ + +#ifdef GL_OML_resample + +#endif /* GL_OML_resample */ + +#ifdef GL_OML_subsample + +#endif /* GL_OML_subsample */ + +#ifdef GL_PGI_misc_hints + +#endif /* GL_PGI_misc_hints */ + +#ifdef GL_PGI_vertex_hints + +#endif /* GL_PGI_vertex_hints */ + +#ifdef GL_REND_screen_coordinates + +#endif /* GL_REND_screen_coordinates */ + +#ifdef GL_S3_s3tc + +#endif /* GL_S3_s3tc */ + +#ifdef GL_SGIS_color_range + +#endif /* GL_SGIS_color_range */ + +#ifdef GL_SGIS_detail_texture + +static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glDetailTexFuncSGIS")) == NULL) || r; + r = ((glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetDetailTexFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_detail_texture */ + +#ifdef GL_SGIS_fog_function + +static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glFogFuncSGIS")) == NULL) || r; + r = ((glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetFogFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_fog_function */ + +#ifdef GL_SGIS_generate_mipmap + +#endif /* GL_SGIS_generate_mipmap */ + +#ifdef GL_SGIS_multisample + +static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskSGIS")) == NULL) || r; + r = ((glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_multisample */ + +#ifdef GL_SGIS_pixel_texture + +#endif /* GL_SGIS_pixel_texture */ + +#ifdef GL_SGIS_sharpen_texture + +static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetSharpenTexFuncSGIS")) == NULL) || r; + r = ((glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glSharpenTexFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_sharpen_texture */ + +#ifdef GL_SGIS_texture4D + +static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexImage4DSGIS")) == NULL) || r; + r = ((glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage4DSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_texture4D */ + +#ifdef GL_SGIS_texture_border_clamp + +#endif /* GL_SGIS_texture_border_clamp */ + +#ifdef GL_SGIS_texture_edge_clamp + +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifdef GL_SGIS_texture_filter4 + +static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetTexFilterFuncSGIS")) == NULL) || r; + r = ((glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glTexFilterFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_texture_filter4 */ + +#ifdef GL_SGIS_texture_lod + +#endif /* GL_SGIS_texture_lod */ + +#ifdef GL_SGIS_texture_select + +#endif /* GL_SGIS_texture_select */ + +#ifdef GL_SGIX_async + +static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glAsyncMarkerSGIX")) == NULL) || r; + r = ((glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glDeleteAsyncMarkersSGIX")) == NULL) || r; + r = ((glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glFinishAsyncSGIX")) == NULL) || r; + r = ((glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glGenAsyncMarkersSGIX")) == NULL) || r; + r = ((glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glIsAsyncMarkerSGIX")) == NULL) || r; + r = ((glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glPollAsyncSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_async */ + +#ifdef GL_SGIX_async_histogram + +#endif /* GL_SGIX_async_histogram */ + +#ifdef GL_SGIX_async_pixel + +#endif /* GL_SGIX_async_pixel */ + +#ifdef GL_SGIX_blend_alpha_minmax + +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifdef GL_SGIX_clipmap + +#endif /* GL_SGIX_clipmap */ + +#ifdef GL_SGIX_depth_texture + +#endif /* GL_SGIX_depth_texture */ + +#ifdef GL_SGIX_flush_raster + +static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)glewGetProcAddress((const GLubyte*)"glFlushRasterSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_flush_raster */ + +#ifdef GL_SGIX_fog_offset + +#endif /* GL_SGIX_fog_offset */ + +#ifdef GL_SGIX_fog_texture + +static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTextureFogSGIX = (PFNGLTEXTUREFOGSGIXPROC)glewGetProcAddress((const GLubyte*)"glTextureFogSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_fog_texture */ + +#ifdef GL_SGIX_fragment_specular_lighting + +static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialSGIX")) == NULL) || r; + r = ((glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfSGIX")) == NULL) || r; + r = ((glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvSGIX")) == NULL) || r; + r = ((glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliSGIX")) == NULL) || r; + r = ((glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivSGIX")) == NULL) || r; + r = ((glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfSGIX")) == NULL) || r; + r = ((glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvSGIX")) == NULL) || r; + r = ((glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiSGIX")) == NULL) || r; + r = ((glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivSGIX")) == NULL) || r; + r = ((glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfSGIX")) == NULL) || r; + r = ((glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvSGIX")) == NULL) || r; + r = ((glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiSGIX")) == NULL) || r; + r = ((glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivSGIX")) == NULL) || r; + r = ((glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvSGIX")) == NULL) || r; + r = ((glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivSGIX")) == NULL) || r; + r = ((glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvSGIX")) == NULL) || r; + r = ((glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_fragment_specular_lighting */ + +#ifdef GL_SGIX_framezoom + +static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)glewGetProcAddress((const GLubyte*)"glFrameZoomSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_framezoom */ + +#ifdef GL_SGIX_interlace + +#endif /* GL_SGIX_interlace */ + +#ifdef GL_SGIX_ir_instrument1 + +#endif /* GL_SGIX_ir_instrument1 */ + +#ifdef GL_SGIX_list_priority + +#endif /* GL_SGIX_list_priority */ + +#ifdef GL_SGIX_pixel_texture + +static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)glewGetProcAddress((const GLubyte*)"glPixelTexGenSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_pixel_texture */ + +#ifdef GL_SGIX_pixel_texture_bits + +#endif /* GL_SGIX_pixel_texture_bits */ + +#ifdef GL_SGIX_reference_plane + +static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)glewGetProcAddress((const GLubyte*)"glReferencePlaneSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_reference_plane */ + +#ifdef GL_SGIX_resample + +#endif /* GL_SGIX_resample */ + +#ifdef GL_SGIX_shadow + +#endif /* GL_SGIX_shadow */ + +#ifdef GL_SGIX_shadow_ambient + +#endif /* GL_SGIX_shadow_ambient */ + +#ifdef GL_SGIX_sprite + +static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfSGIX")) == NULL) || r; + r = ((glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfvSGIX")) == NULL) || r; + r = ((glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameteriSGIX")) == NULL) || r; + r = ((glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterivSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_sprite */ + +#ifdef GL_SGIX_tag_sample_buffer + +static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glTagSampleBufferSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifdef GL_SGIX_texture_add_env + +#endif /* GL_SGIX_texture_add_env */ + +#ifdef GL_SGIX_texture_coordinate_clamp + +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifdef GL_SGIX_texture_lod_bias + +#endif /* GL_SGIX_texture_lod_bias */ + +#ifdef GL_SGIX_texture_multi_buffer + +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifdef GL_SGIX_texture_range + +#endif /* GL_SGIX_texture_range */ + +#ifdef GL_SGIX_texture_scale_bias + +#endif /* GL_SGIX_texture_scale_bias */ + +#ifdef GL_SGIX_vertex_preclip + +#endif /* GL_SGIX_vertex_preclip */ + +#ifdef GL_SGIX_vertex_preclip_hint + +#endif /* GL_SGIX_vertex_preclip_hint */ + +#ifdef GL_SGIX_ycrcb + +#endif /* GL_SGIX_ycrcb */ + +#ifdef GL_SGI_color_matrix + +#endif /* GL_SGI_color_matrix */ + +#ifdef GL_SGI_color_table + +static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfvSGI")) == NULL) || r; + r = ((glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterivSGI")) == NULL) || r; + r = ((glColorTableSGI = (PFNGLCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableSGI")) == NULL) || r; + r = ((glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTableSGI")) == NULL) || r; + r = ((glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvSGI")) == NULL) || r; + r = ((glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivSGI")) == NULL) || r; + r = ((glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableSGI")) == NULL) || r; + + return r; +} + +#endif /* GL_SGI_color_table */ + +#ifdef GL_SGI_texture_color_table + +#endif /* GL_SGI_texture_color_table */ + +#ifdef GL_SUNX_constant_data + +static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)glewGetProcAddress((const GLubyte*)"glFinishTextureSUNX")) == NULL) || r; + + return r; +} + +#endif /* GL_SUNX_constant_data */ + +#ifdef GL_SUN_convolution_border_modes + +#endif /* GL_SUN_convolution_border_modes */ + +#ifdef GL_SUN_global_alpha + +static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorbSUN")) == NULL) || r; + r = ((glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactordSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorfSUN")) == NULL) || r; + r = ((glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoriSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorsSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorubSUN")) == NULL) || r; + r = ((glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoruiSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorusSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_global_alpha */ + +#ifdef GL_SUN_mesh_array + +#endif /* GL_SUN_mesh_array */ + +#ifdef GL_SUN_read_video_pixels + +static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReadVideoPixelsSUN = (PFNGLREADVIDEOPIXELSSUNPROC)glewGetProcAddress((const GLubyte*)"glReadVideoPixelsSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_read_video_pixels */ + +#ifdef GL_SUN_slice_accum + +#endif /* GL_SUN_slice_accum */ + +#ifdef GL_SUN_triangle_list + +static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodePointerSUN")) == NULL) || r; + r = ((glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubSUN")) == NULL) || r; + r = ((glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubvSUN")) == NULL) || r; + r = ((glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiSUN")) == NULL) || r; + r = ((glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuivSUN")) == NULL) || r; + r = ((glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusSUN")) == NULL) || r; + r = ((glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusvSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_triangle_list */ + +#ifdef GL_SUN_vertex + +static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fSUN")) == NULL) || r; + r = ((glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fvSUN")) == NULL) || r; + r = ((glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fSUN")) == NULL) || r; + r = ((glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fvSUN")) == NULL) || r; + r = ((glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fSUN")) == NULL) || r; + r = ((glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fSUN")) == NULL) || r; + r = ((glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fSUN")) == NULL) || r; + r = ((glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fvSUN")) == NULL) || r; + r = ((glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fSUN")) == NULL) || r; + r = ((glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fvSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_vertex */ + +#ifdef GL_WIN_phong_shading + +#endif /* GL_WIN_phong_shading */ + +#ifdef GL_WIN_specular_fog + +#endif /* GL_WIN_specular_fog */ + +#ifdef GL_WIN_swap_hint + +static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAddSwapHintRectWIN = (PFNGLADDSWAPHINTRECTWINPROC)glewGetProcAddress((const GLubyte*)"glAddSwapHintRectWIN")) == NULL) || r; + + return r; +} + +#endif /* GL_WIN_swap_hint */ + +/* ------------------------------------------------------------------------- */ + +/* + * Search for name in the extensions string. Use of strstr() + * is not sufficient because extension names can be prefixes of + * other extension names. Could use strtok() but the constant + * string returned by glGetString might be in read-only memory. + */ +GLboolean glewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); + p = (GLubyte*)glGetString(GL_EXTENSIONS); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +/* ------------------------------------------------------------------------- */ + +#ifndef GLEW_MX +static +#endif +GLenum glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) +{ + const GLubyte* s; + GLuint dot, major, minor; + /* query opengl version */ + s = glGetString(GL_VERSION); + dot = _glewStrCLen(s, '.'); + major = dot-1; + minor = dot+1; + if (dot == 0 || s[minor] == '\0') + return GLEW_ERROR_NO_GL_VERSION; + if (s[major] == '1' && s[minor] == '0') + { + return GLEW_ERROR_GL_VERSION_10_ONLY; + } + else + { + CONST_CAST(GLEW_VERSION_1_1) = GL_TRUE; + if (s[major] >= '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; + CONST_CAST(GLEW_VERSION_2_0) = GL_TRUE; + if (s[minor] >= '1') + { + CONST_CAST(GLEW_VERSION_2_1) = GL_TRUE; + } + } + else + { + if (s[minor] >= '5') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '4') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '3') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] < '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + } + } + /* initialize extensions */ +#ifdef GL_VERSION_1_2 + if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_2 */ +#ifdef GL_VERSION_1_3 + if (glewExperimental || GLEW_VERSION_1_3) CONST_CAST(GLEW_VERSION_1_3) = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_3 */ +#ifdef GL_VERSION_1_4 + if (glewExperimental || GLEW_VERSION_1_4) CONST_CAST(GLEW_VERSION_1_4) = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_4 */ +#ifdef GL_VERSION_1_5 + if (glewExperimental || GLEW_VERSION_1_5) CONST_CAST(GLEW_VERSION_1_5) = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_5 */ +#ifdef GL_VERSION_2_0 + if (glewExperimental || GLEW_VERSION_2_0) CONST_CAST(GLEW_VERSION_2_0) = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_2_0 */ +#ifdef GL_VERSION_2_1 + if (glewExperimental || GLEW_VERSION_2_1) CONST_CAST(GLEW_VERSION_2_1) = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_2_1 */ +#ifdef GL_3DFX_multisample + CONST_CAST(GLEW_3DFX_multisample) = glewGetExtension("GL_3DFX_multisample"); +#endif /* GL_3DFX_multisample */ +#ifdef GL_3DFX_tbuffer + CONST_CAST(GLEW_3DFX_tbuffer) = glewGetExtension("GL_3DFX_tbuffer"); + if (glewExperimental || GLEW_3DFX_tbuffer) CONST_CAST(GLEW_3DFX_tbuffer) = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_3DFX_tbuffer */ +#ifdef GL_3DFX_texture_compression_FXT1 + CONST_CAST(GLEW_3DFX_texture_compression_FXT1) = glewGetExtension("GL_3DFX_texture_compression_FXT1"); +#endif /* GL_3DFX_texture_compression_FXT1 */ +#ifdef GL_APPLE_client_storage + CONST_CAST(GLEW_APPLE_client_storage) = glewGetExtension("GL_APPLE_client_storage"); +#endif /* GL_APPLE_client_storage */ +#ifdef GL_APPLE_element_array + CONST_CAST(GLEW_APPLE_element_array) = glewGetExtension("GL_APPLE_element_array"); + if (glewExperimental || GLEW_APPLE_element_array) CONST_CAST(GLEW_APPLE_element_array) = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_element_array */ +#ifdef GL_APPLE_fence + CONST_CAST(GLEW_APPLE_fence) = glewGetExtension("GL_APPLE_fence"); + if (glewExperimental || GLEW_APPLE_fence) CONST_CAST(GLEW_APPLE_fence) = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_fence */ +#ifdef GL_APPLE_float_pixels + CONST_CAST(GLEW_APPLE_float_pixels) = glewGetExtension("GL_APPLE_float_pixels"); +#endif /* GL_APPLE_float_pixels */ +#ifdef GL_APPLE_flush_buffer_range + CONST_CAST(GLEW_APPLE_flush_buffer_range) = glewGetExtension("GL_APPLE_flush_buffer_range"); + if (glewExperimental || GLEW_APPLE_flush_buffer_range) CONST_CAST(GLEW_APPLE_flush_buffer_range) = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_flush_buffer_range */ +#ifdef GL_APPLE_pixel_buffer + CONST_CAST(GLEW_APPLE_pixel_buffer) = glewGetExtension("GL_APPLE_pixel_buffer"); +#endif /* GL_APPLE_pixel_buffer */ +#ifdef GL_APPLE_specular_vector + CONST_CAST(GLEW_APPLE_specular_vector) = glewGetExtension("GL_APPLE_specular_vector"); +#endif /* GL_APPLE_specular_vector */ +#ifdef GL_APPLE_texture_range + CONST_CAST(GLEW_APPLE_texture_range) = glewGetExtension("GL_APPLE_texture_range"); + if (glewExperimental || GLEW_APPLE_texture_range) CONST_CAST(GLEW_APPLE_texture_range) = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_texture_range */ +#ifdef GL_APPLE_transform_hint + CONST_CAST(GLEW_APPLE_transform_hint) = glewGetExtension("GL_APPLE_transform_hint"); +#endif /* GL_APPLE_transform_hint */ +#ifdef GL_APPLE_vertex_array_object + CONST_CAST(GLEW_APPLE_vertex_array_object) = glewGetExtension("GL_APPLE_vertex_array_object"); + if (glewExperimental || GLEW_APPLE_vertex_array_object) CONST_CAST(GLEW_APPLE_vertex_array_object) = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_vertex_array_object */ +#ifdef GL_APPLE_vertex_array_range + CONST_CAST(GLEW_APPLE_vertex_array_range) = glewGetExtension("GL_APPLE_vertex_array_range"); + if (glewExperimental || GLEW_APPLE_vertex_array_range) CONST_CAST(GLEW_APPLE_vertex_array_range) = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_vertex_array_range */ +#ifdef GL_APPLE_ycbcr_422 + CONST_CAST(GLEW_APPLE_ycbcr_422) = glewGetExtension("GL_APPLE_ycbcr_422"); +#endif /* GL_APPLE_ycbcr_422 */ +#ifdef GL_ARB_color_buffer_float + CONST_CAST(GLEW_ARB_color_buffer_float) = glewGetExtension("GL_ARB_color_buffer_float"); + if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_color_buffer_float */ +#ifdef GL_ARB_depth_texture + CONST_CAST(GLEW_ARB_depth_texture) = glewGetExtension("GL_ARB_depth_texture"); +#endif /* GL_ARB_depth_texture */ +#ifdef GL_ARB_draw_buffers + CONST_CAST(GLEW_ARB_draw_buffers) = glewGetExtension("GL_ARB_draw_buffers"); + if (glewExperimental || GLEW_ARB_draw_buffers) CONST_CAST(GLEW_ARB_draw_buffers) = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_draw_buffers */ +#ifdef GL_ARB_fragment_program + CONST_CAST(GLEW_ARB_fragment_program) = glewGetExtension("GL_ARB_fragment_program"); +#endif /* GL_ARB_fragment_program */ +#ifdef GL_ARB_fragment_program_shadow + CONST_CAST(GLEW_ARB_fragment_program_shadow) = glewGetExtension("GL_ARB_fragment_program_shadow"); +#endif /* GL_ARB_fragment_program_shadow */ +#ifdef GL_ARB_fragment_shader + CONST_CAST(GLEW_ARB_fragment_shader) = glewGetExtension("GL_ARB_fragment_shader"); +#endif /* GL_ARB_fragment_shader */ +#ifdef GL_ARB_half_float_pixel + CONST_CAST(GLEW_ARB_half_float_pixel) = glewGetExtension("GL_ARB_half_float_pixel"); +#endif /* GL_ARB_half_float_pixel */ +#ifdef GL_ARB_imaging + CONST_CAST(GLEW_ARB_imaging) = glewGetExtension("GL_ARB_imaging"); + if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_imaging */ +#ifdef GL_ARB_matrix_palette + CONST_CAST(GLEW_ARB_matrix_palette) = glewGetExtension("GL_ARB_matrix_palette"); + if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multisample + CONST_CAST(GLEW_ARB_multisample) = glewGetExtension("GL_ARB_multisample"); + if (glewExperimental || GLEW_ARB_multisample) CONST_CAST(GLEW_ARB_multisample) = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_multisample */ +#ifdef GL_ARB_multitexture + CONST_CAST(GLEW_ARB_multitexture) = glewGetExtension("GL_ARB_multitexture"); + if (glewExperimental || GLEW_ARB_multitexture) CONST_CAST(GLEW_ARB_multitexture) = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_multitexture */ +#ifdef GL_ARB_occlusion_query + CONST_CAST(GLEW_ARB_occlusion_query) = glewGetExtension("GL_ARB_occlusion_query"); + if (glewExperimental || GLEW_ARB_occlusion_query) CONST_CAST(GLEW_ARB_occlusion_query) = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_occlusion_query */ +#ifdef GL_ARB_pixel_buffer_object + CONST_CAST(GLEW_ARB_pixel_buffer_object) = glewGetExtension("GL_ARB_pixel_buffer_object"); +#endif /* GL_ARB_pixel_buffer_object */ +#ifdef GL_ARB_point_parameters + CONST_CAST(GLEW_ARB_point_parameters) = glewGetExtension("GL_ARB_point_parameters"); + if (glewExperimental || GLEW_ARB_point_parameters) CONST_CAST(GLEW_ARB_point_parameters) = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_point_parameters */ +#ifdef GL_ARB_point_sprite + CONST_CAST(GLEW_ARB_point_sprite) = glewGetExtension("GL_ARB_point_sprite"); +#endif /* GL_ARB_point_sprite */ +#ifdef GL_ARB_shader_objects + CONST_CAST(GLEW_ARB_shader_objects) = glewGetExtension("GL_ARB_shader_objects"); + if (glewExperimental || GLEW_ARB_shader_objects) CONST_CAST(GLEW_ARB_shader_objects) = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_shader_objects */ +#ifdef GL_ARB_shading_language_100 + CONST_CAST(GLEW_ARB_shading_language_100) = glewGetExtension("GL_ARB_shading_language_100"); +#endif /* GL_ARB_shading_language_100 */ +#ifdef GL_ARB_shadow + CONST_CAST(GLEW_ARB_shadow) = glewGetExtension("GL_ARB_shadow"); +#endif /* GL_ARB_shadow */ +#ifdef GL_ARB_shadow_ambient + CONST_CAST(GLEW_ARB_shadow_ambient) = glewGetExtension("GL_ARB_shadow_ambient"); +#endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_texture_border_clamp + CONST_CAST(GLEW_ARB_texture_border_clamp) = glewGetExtension("GL_ARB_texture_border_clamp"); +#endif /* GL_ARB_texture_border_clamp */ +#ifdef GL_ARB_texture_compression + CONST_CAST(GLEW_ARB_texture_compression) = glewGetExtension("GL_ARB_texture_compression"); + if (glewExperimental || GLEW_ARB_texture_compression) CONST_CAST(GLEW_ARB_texture_compression) = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_texture_compression */ +#ifdef GL_ARB_texture_cube_map + CONST_CAST(GLEW_ARB_texture_cube_map) = glewGetExtension("GL_ARB_texture_cube_map"); +#endif /* GL_ARB_texture_cube_map */ +#ifdef GL_ARB_texture_env_add + CONST_CAST(GLEW_ARB_texture_env_add) = glewGetExtension("GL_ARB_texture_env_add"); +#endif /* GL_ARB_texture_env_add */ +#ifdef GL_ARB_texture_env_combine + CONST_CAST(GLEW_ARB_texture_env_combine) = glewGetExtension("GL_ARB_texture_env_combine"); +#endif /* GL_ARB_texture_env_combine */ +#ifdef GL_ARB_texture_env_crossbar + CONST_CAST(GLEW_ARB_texture_env_crossbar) = glewGetExtension("GL_ARB_texture_env_crossbar"); +#endif /* GL_ARB_texture_env_crossbar */ +#ifdef GL_ARB_texture_env_dot3 + CONST_CAST(GLEW_ARB_texture_env_dot3) = glewGetExtension("GL_ARB_texture_env_dot3"); +#endif /* GL_ARB_texture_env_dot3 */ +#ifdef GL_ARB_texture_float + CONST_CAST(GLEW_ARB_texture_float) = glewGetExtension("GL_ARB_texture_float"); +#endif /* GL_ARB_texture_float */ +#ifdef GL_ARB_texture_mirrored_repeat + CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = glewGetExtension("GL_ARB_texture_mirrored_repeat"); +#endif /* GL_ARB_texture_mirrored_repeat */ +#ifdef GL_ARB_texture_non_power_of_two + CONST_CAST(GLEW_ARB_texture_non_power_of_two) = glewGetExtension("GL_ARB_texture_non_power_of_two"); +#endif /* GL_ARB_texture_non_power_of_two */ +#ifdef GL_ARB_texture_rectangle + CONST_CAST(GLEW_ARB_texture_rectangle) = glewGetExtension("GL_ARB_texture_rectangle"); +#endif /* GL_ARB_texture_rectangle */ +#ifdef GL_ARB_transpose_matrix + CONST_CAST(GLEW_ARB_transpose_matrix) = glewGetExtension("GL_ARB_transpose_matrix"); + if (glewExperimental || GLEW_ARB_transpose_matrix) CONST_CAST(GLEW_ARB_transpose_matrix) = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_transpose_matrix */ +#ifdef GL_ARB_vertex_blend + CONST_CAST(GLEW_ARB_vertex_blend) = glewGetExtension("GL_ARB_vertex_blend"); + if (glewExperimental || GLEW_ARB_vertex_blend) CONST_CAST(GLEW_ARB_vertex_blend) = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_blend */ +#ifdef GL_ARB_vertex_buffer_object + CONST_CAST(GLEW_ARB_vertex_buffer_object) = glewGetExtension("GL_ARB_vertex_buffer_object"); + if (glewExperimental || GLEW_ARB_vertex_buffer_object) CONST_CAST(GLEW_ARB_vertex_buffer_object) = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_buffer_object */ +#ifdef GL_ARB_vertex_program + CONST_CAST(GLEW_ARB_vertex_program) = glewGetExtension("GL_ARB_vertex_program"); + if (glewExperimental || GLEW_ARB_vertex_program) CONST_CAST(GLEW_ARB_vertex_program) = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_program */ +#ifdef GL_ARB_vertex_shader + CONST_CAST(GLEW_ARB_vertex_shader) = glewGetExtension("GL_ARB_vertex_shader"); + if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_window_pos + CONST_CAST(GLEW_ARB_window_pos) = glewGetExtension("GL_ARB_window_pos"); + if (glewExperimental || GLEW_ARB_window_pos) CONST_CAST(GLEW_ARB_window_pos) = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_window_pos */ +#ifdef GL_ATIX_point_sprites + CONST_CAST(GLEW_ATIX_point_sprites) = glewGetExtension("GL_ATIX_point_sprites"); +#endif /* GL_ATIX_point_sprites */ +#ifdef GL_ATIX_texture_env_combine3 + CONST_CAST(GLEW_ATIX_texture_env_combine3) = glewGetExtension("GL_ATIX_texture_env_combine3"); +#endif /* GL_ATIX_texture_env_combine3 */ +#ifdef GL_ATIX_texture_env_route + CONST_CAST(GLEW_ATIX_texture_env_route) = glewGetExtension("GL_ATIX_texture_env_route"); +#endif /* GL_ATIX_texture_env_route */ +#ifdef GL_ATIX_vertex_shader_output_point_size + CONST_CAST(GLEW_ATIX_vertex_shader_output_point_size) = glewGetExtension("GL_ATIX_vertex_shader_output_point_size"); +#endif /* GL_ATIX_vertex_shader_output_point_size */ +#ifdef GL_ATI_draw_buffers + CONST_CAST(GLEW_ATI_draw_buffers) = glewGetExtension("GL_ATI_draw_buffers"); + if (glewExperimental || GLEW_ATI_draw_buffers) CONST_CAST(GLEW_ATI_draw_buffers) = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_draw_buffers */ +#ifdef GL_ATI_element_array + CONST_CAST(GLEW_ATI_element_array) = glewGetExtension("GL_ATI_element_array"); + if (glewExperimental || GLEW_ATI_element_array) CONST_CAST(GLEW_ATI_element_array) = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_element_array */ +#ifdef GL_ATI_envmap_bumpmap + CONST_CAST(GLEW_ATI_envmap_bumpmap) = glewGetExtension("GL_ATI_envmap_bumpmap"); + if (glewExperimental || GLEW_ATI_envmap_bumpmap) CONST_CAST(GLEW_ATI_envmap_bumpmap) = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_envmap_bumpmap */ +#ifdef GL_ATI_fragment_shader + CONST_CAST(GLEW_ATI_fragment_shader) = glewGetExtension("GL_ATI_fragment_shader"); + if (glewExperimental || GLEW_ATI_fragment_shader) CONST_CAST(GLEW_ATI_fragment_shader) = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_fragment_shader */ +#ifdef GL_ATI_map_object_buffer + CONST_CAST(GLEW_ATI_map_object_buffer) = glewGetExtension("GL_ATI_map_object_buffer"); + if (glewExperimental || GLEW_ATI_map_object_buffer) CONST_CAST(GLEW_ATI_map_object_buffer) = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_map_object_buffer */ +#ifdef GL_ATI_pn_triangles + CONST_CAST(GLEW_ATI_pn_triangles) = glewGetExtension("GL_ATI_pn_triangles"); + if (glewExperimental || GLEW_ATI_pn_triangles) CONST_CAST(GLEW_ATI_pn_triangles) = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_pn_triangles */ +#ifdef GL_ATI_separate_stencil + CONST_CAST(GLEW_ATI_separate_stencil) = glewGetExtension("GL_ATI_separate_stencil"); + if (glewExperimental || GLEW_ATI_separate_stencil) CONST_CAST(GLEW_ATI_separate_stencil) = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_separate_stencil */ +#ifdef GL_ATI_shader_texture_lod + CONST_CAST(GLEW_ATI_shader_texture_lod) = glewGetExtension("GL_ATI_shader_texture_lod"); +#endif /* GL_ATI_shader_texture_lod */ +#ifdef GL_ATI_text_fragment_shader + CONST_CAST(GLEW_ATI_text_fragment_shader) = glewGetExtension("GL_ATI_text_fragment_shader"); +#endif /* GL_ATI_text_fragment_shader */ +#ifdef GL_ATI_texture_compression_3dc + CONST_CAST(GLEW_ATI_texture_compression_3dc) = glewGetExtension("GL_ATI_texture_compression_3dc"); +#endif /* GL_ATI_texture_compression_3dc */ +#ifdef GL_ATI_texture_env_combine3 + CONST_CAST(GLEW_ATI_texture_env_combine3) = glewGetExtension("GL_ATI_texture_env_combine3"); +#endif /* GL_ATI_texture_env_combine3 */ +#ifdef GL_ATI_texture_float + CONST_CAST(GLEW_ATI_texture_float) = glewGetExtension("GL_ATI_texture_float"); +#endif /* GL_ATI_texture_float */ +#ifdef GL_ATI_texture_mirror_once + CONST_CAST(GLEW_ATI_texture_mirror_once) = glewGetExtension("GL_ATI_texture_mirror_once"); +#endif /* GL_ATI_texture_mirror_once */ +#ifdef GL_ATI_vertex_array_object + CONST_CAST(GLEW_ATI_vertex_array_object) = glewGetExtension("GL_ATI_vertex_array_object"); + if (glewExperimental || GLEW_ATI_vertex_array_object) CONST_CAST(GLEW_ATI_vertex_array_object) = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_array_object */ +#ifdef GL_ATI_vertex_attrib_array_object + CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = glewGetExtension("GL_ATI_vertex_attrib_array_object"); + if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_attrib_array_object */ +#ifdef GL_ATI_vertex_streams + CONST_CAST(GLEW_ATI_vertex_streams) = glewGetExtension("GL_ATI_vertex_streams"); + if (glewExperimental || GLEW_ATI_vertex_streams) CONST_CAST(GLEW_ATI_vertex_streams) = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_streams */ +#ifdef GL_EXT_422_pixels + CONST_CAST(GLEW_EXT_422_pixels) = glewGetExtension("GL_EXT_422_pixels"); +#endif /* GL_EXT_422_pixels */ +#ifdef GL_EXT_Cg_shader + CONST_CAST(GLEW_EXT_Cg_shader) = glewGetExtension("GL_EXT_Cg_shader"); +#endif /* GL_EXT_Cg_shader */ +#ifdef GL_EXT_abgr + CONST_CAST(GLEW_EXT_abgr) = glewGetExtension("GL_EXT_abgr"); +#endif /* GL_EXT_abgr */ +#ifdef GL_EXT_bgra + CONST_CAST(GLEW_EXT_bgra) = glewGetExtension("GL_EXT_bgra"); +#endif /* GL_EXT_bgra */ +#ifdef GL_EXT_bindable_uniform + CONST_CAST(GLEW_EXT_bindable_uniform) = glewGetExtension("GL_EXT_bindable_uniform"); + if (glewExperimental || GLEW_EXT_bindable_uniform) CONST_CAST(GLEW_EXT_bindable_uniform) = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_bindable_uniform */ +#ifdef GL_EXT_blend_color + CONST_CAST(GLEW_EXT_blend_color) = glewGetExtension("GL_EXT_blend_color"); + if (glewExperimental || GLEW_EXT_blend_color) CONST_CAST(GLEW_EXT_blend_color) = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_color */ +#ifdef GL_EXT_blend_equation_separate + CONST_CAST(GLEW_EXT_blend_equation_separate) = glewGetExtension("GL_EXT_blend_equation_separate"); + if (glewExperimental || GLEW_EXT_blend_equation_separate) CONST_CAST(GLEW_EXT_blend_equation_separate) = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_equation_separate */ +#ifdef GL_EXT_blend_func_separate + CONST_CAST(GLEW_EXT_blend_func_separate) = glewGetExtension("GL_EXT_blend_func_separate"); + if (glewExperimental || GLEW_EXT_blend_func_separate) CONST_CAST(GLEW_EXT_blend_func_separate) = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_func_separate */ +#ifdef GL_EXT_blend_logic_op + CONST_CAST(GLEW_EXT_blend_logic_op) = glewGetExtension("GL_EXT_blend_logic_op"); +#endif /* GL_EXT_blend_logic_op */ +#ifdef GL_EXT_blend_minmax + CONST_CAST(GLEW_EXT_blend_minmax) = glewGetExtension("GL_EXT_blend_minmax"); + if (glewExperimental || GLEW_EXT_blend_minmax) CONST_CAST(GLEW_EXT_blend_minmax) = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_minmax */ +#ifdef GL_EXT_blend_subtract + CONST_CAST(GLEW_EXT_blend_subtract) = glewGetExtension("GL_EXT_blend_subtract"); +#endif /* GL_EXT_blend_subtract */ +#ifdef GL_EXT_clip_volume_hint + CONST_CAST(GLEW_EXT_clip_volume_hint) = glewGetExtension("GL_EXT_clip_volume_hint"); +#endif /* GL_EXT_clip_volume_hint */ +#ifdef GL_EXT_cmyka + CONST_CAST(GLEW_EXT_cmyka) = glewGetExtension("GL_EXT_cmyka"); +#endif /* GL_EXT_cmyka */ +#ifdef GL_EXT_color_subtable + CONST_CAST(GLEW_EXT_color_subtable) = glewGetExtension("GL_EXT_color_subtable"); + if (glewExperimental || GLEW_EXT_color_subtable) CONST_CAST(GLEW_EXT_color_subtable) = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_color_subtable */ +#ifdef GL_EXT_compiled_vertex_array + CONST_CAST(GLEW_EXT_compiled_vertex_array) = glewGetExtension("GL_EXT_compiled_vertex_array"); + if (glewExperimental || GLEW_EXT_compiled_vertex_array) CONST_CAST(GLEW_EXT_compiled_vertex_array) = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_compiled_vertex_array */ +#ifdef GL_EXT_convolution + CONST_CAST(GLEW_EXT_convolution) = glewGetExtension("GL_EXT_convolution"); + if (glewExperimental || GLEW_EXT_convolution) CONST_CAST(GLEW_EXT_convolution) = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_convolution */ +#ifdef GL_EXT_coordinate_frame + CONST_CAST(GLEW_EXT_coordinate_frame) = glewGetExtension("GL_EXT_coordinate_frame"); + if (glewExperimental || GLEW_EXT_coordinate_frame) CONST_CAST(GLEW_EXT_coordinate_frame) = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_coordinate_frame */ +#ifdef GL_EXT_copy_texture + CONST_CAST(GLEW_EXT_copy_texture) = glewGetExtension("GL_EXT_copy_texture"); + if (glewExperimental || GLEW_EXT_copy_texture) CONST_CAST(GLEW_EXT_copy_texture) = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_copy_texture */ +#ifdef GL_EXT_cull_vertex + CONST_CAST(GLEW_EXT_cull_vertex) = glewGetExtension("GL_EXT_cull_vertex"); + if (glewExperimental || GLEW_EXT_cull_vertex) CONST_CAST(GLEW_EXT_cull_vertex) = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_cull_vertex */ +#ifdef GL_EXT_depth_bounds_test + CONST_CAST(GLEW_EXT_depth_bounds_test) = glewGetExtension("GL_EXT_depth_bounds_test"); + if (glewExperimental || GLEW_EXT_depth_bounds_test) CONST_CAST(GLEW_EXT_depth_bounds_test) = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_depth_bounds_test */ +#ifdef GL_EXT_draw_buffers2 + CONST_CAST(GLEW_EXT_draw_buffers2) = glewGetExtension("GL_EXT_draw_buffers2"); + if (glewExperimental || GLEW_EXT_draw_buffers2) CONST_CAST(GLEW_EXT_draw_buffers2) = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_buffers2 */ +#ifdef GL_EXT_draw_instanced + CONST_CAST(GLEW_EXT_draw_instanced) = glewGetExtension("GL_EXT_draw_instanced"); + if (glewExperimental || GLEW_EXT_draw_instanced) CONST_CAST(GLEW_EXT_draw_instanced) = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_instanced */ +#ifdef GL_EXT_draw_range_elements + CONST_CAST(GLEW_EXT_draw_range_elements) = glewGetExtension("GL_EXT_draw_range_elements"); + if (glewExperimental || GLEW_EXT_draw_range_elements) CONST_CAST(GLEW_EXT_draw_range_elements) = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_range_elements */ +#ifdef GL_EXT_fog_coord + CONST_CAST(GLEW_EXT_fog_coord) = glewGetExtension("GL_EXT_fog_coord"); + if (glewExperimental || GLEW_EXT_fog_coord) CONST_CAST(GLEW_EXT_fog_coord) = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_fog_coord */ +#ifdef GL_EXT_fragment_lighting + CONST_CAST(GLEW_EXT_fragment_lighting) = glewGetExtension("GL_EXT_fragment_lighting"); + if (glewExperimental || GLEW_EXT_fragment_lighting) CONST_CAST(GLEW_EXT_fragment_lighting) = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_fragment_lighting */ +#ifdef GL_EXT_framebuffer_blit + CONST_CAST(GLEW_EXT_framebuffer_blit) = glewGetExtension("GL_EXT_framebuffer_blit"); + if (glewExperimental || GLEW_EXT_framebuffer_blit) CONST_CAST(GLEW_EXT_framebuffer_blit) = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_blit */ +#ifdef GL_EXT_framebuffer_multisample + CONST_CAST(GLEW_EXT_framebuffer_multisample) = glewGetExtension("GL_EXT_framebuffer_multisample"); + if (glewExperimental || GLEW_EXT_framebuffer_multisample) CONST_CAST(GLEW_EXT_framebuffer_multisample) = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_multisample */ +#ifdef GL_EXT_framebuffer_object + CONST_CAST(GLEW_EXT_framebuffer_object) = glewGetExtension("GL_EXT_framebuffer_object"); + if (glewExperimental || GLEW_EXT_framebuffer_object) CONST_CAST(GLEW_EXT_framebuffer_object) = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_object */ +#ifdef GL_EXT_framebuffer_sRGB + CONST_CAST(GLEW_EXT_framebuffer_sRGB) = glewGetExtension("GL_EXT_framebuffer_sRGB"); +#endif /* GL_EXT_framebuffer_sRGB */ +#ifdef GL_EXT_geometry_shader4 + CONST_CAST(GLEW_EXT_geometry_shader4) = glewGetExtension("GL_EXT_geometry_shader4"); + if (glewExperimental || GLEW_EXT_geometry_shader4) CONST_CAST(GLEW_EXT_geometry_shader4) = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_geometry_shader4 */ +#ifdef GL_EXT_gpu_program_parameters + CONST_CAST(GLEW_EXT_gpu_program_parameters) = glewGetExtension("GL_EXT_gpu_program_parameters"); + if (glewExperimental || GLEW_EXT_gpu_program_parameters) CONST_CAST(GLEW_EXT_gpu_program_parameters) = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_gpu_program_parameters */ +#ifdef GL_EXT_gpu_shader4 + CONST_CAST(GLEW_EXT_gpu_shader4) = glewGetExtension("GL_EXT_gpu_shader4"); + if (glewExperimental || GLEW_EXT_gpu_shader4) CONST_CAST(GLEW_EXT_gpu_shader4) = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_gpu_shader4 */ +#ifdef GL_EXT_histogram + CONST_CAST(GLEW_EXT_histogram) = glewGetExtension("GL_EXT_histogram"); + if (glewExperimental || GLEW_EXT_histogram) CONST_CAST(GLEW_EXT_histogram) = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_histogram */ +#ifdef GL_EXT_index_array_formats + CONST_CAST(GLEW_EXT_index_array_formats) = glewGetExtension("GL_EXT_index_array_formats"); +#endif /* GL_EXT_index_array_formats */ +#ifdef GL_EXT_index_func + CONST_CAST(GLEW_EXT_index_func) = glewGetExtension("GL_EXT_index_func"); + if (glewExperimental || GLEW_EXT_index_func) CONST_CAST(GLEW_EXT_index_func) = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_index_func */ +#ifdef GL_EXT_index_material + CONST_CAST(GLEW_EXT_index_material) = glewGetExtension("GL_EXT_index_material"); + if (glewExperimental || GLEW_EXT_index_material) CONST_CAST(GLEW_EXT_index_material) = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_index_material */ +#ifdef GL_EXT_index_texture + CONST_CAST(GLEW_EXT_index_texture) = glewGetExtension("GL_EXT_index_texture"); +#endif /* GL_EXT_index_texture */ +#ifdef GL_EXT_light_texture + CONST_CAST(GLEW_EXT_light_texture) = glewGetExtension("GL_EXT_light_texture"); + if (glewExperimental || GLEW_EXT_light_texture) CONST_CAST(GLEW_EXT_light_texture) = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_light_texture */ +#ifdef GL_EXT_misc_attribute + CONST_CAST(GLEW_EXT_misc_attribute) = glewGetExtension("GL_EXT_misc_attribute"); +#endif /* GL_EXT_misc_attribute */ +#ifdef GL_EXT_multi_draw_arrays + CONST_CAST(GLEW_EXT_multi_draw_arrays) = glewGetExtension("GL_EXT_multi_draw_arrays"); + if (glewExperimental || GLEW_EXT_multi_draw_arrays) CONST_CAST(GLEW_EXT_multi_draw_arrays) = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_multi_draw_arrays */ +#ifdef GL_EXT_multisample + CONST_CAST(GLEW_EXT_multisample) = glewGetExtension("GL_EXT_multisample"); + if (glewExperimental || GLEW_EXT_multisample) CONST_CAST(GLEW_EXT_multisample) = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_multisample */ +#ifdef GL_EXT_packed_depth_stencil + CONST_CAST(GLEW_EXT_packed_depth_stencil) = glewGetExtension("GL_EXT_packed_depth_stencil"); +#endif /* GL_EXT_packed_depth_stencil */ +#ifdef GL_EXT_packed_float + CONST_CAST(GLEW_EXT_packed_float) = glewGetExtension("GL_EXT_packed_float"); +#endif /* GL_EXT_packed_float */ +#ifdef GL_EXT_packed_pixels + CONST_CAST(GLEW_EXT_packed_pixels) = glewGetExtension("GL_EXT_packed_pixels"); +#endif /* GL_EXT_packed_pixels */ +#ifdef GL_EXT_paletted_texture + CONST_CAST(GLEW_EXT_paletted_texture) = glewGetExtension("GL_EXT_paletted_texture"); + if (glewExperimental || GLEW_EXT_paletted_texture) CONST_CAST(GLEW_EXT_paletted_texture) = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_paletted_texture */ +#ifdef GL_EXT_pixel_buffer_object + CONST_CAST(GLEW_EXT_pixel_buffer_object) = glewGetExtension("GL_EXT_pixel_buffer_object"); +#endif /* GL_EXT_pixel_buffer_object */ +#ifdef GL_EXT_pixel_transform + CONST_CAST(GLEW_EXT_pixel_transform) = glewGetExtension("GL_EXT_pixel_transform"); + if (glewExperimental || GLEW_EXT_pixel_transform) CONST_CAST(GLEW_EXT_pixel_transform) = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_pixel_transform */ +#ifdef GL_EXT_pixel_transform_color_table + CONST_CAST(GLEW_EXT_pixel_transform_color_table) = glewGetExtension("GL_EXT_pixel_transform_color_table"); +#endif /* GL_EXT_pixel_transform_color_table */ +#ifdef GL_EXT_point_parameters + CONST_CAST(GLEW_EXT_point_parameters) = glewGetExtension("GL_EXT_point_parameters"); + if (glewExperimental || GLEW_EXT_point_parameters) CONST_CAST(GLEW_EXT_point_parameters) = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_point_parameters */ +#ifdef GL_EXT_polygon_offset + CONST_CAST(GLEW_EXT_polygon_offset) = glewGetExtension("GL_EXT_polygon_offset"); + if (glewExperimental || GLEW_EXT_polygon_offset) CONST_CAST(GLEW_EXT_polygon_offset) = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_polygon_offset */ +#ifdef GL_EXT_rescale_normal + CONST_CAST(GLEW_EXT_rescale_normal) = glewGetExtension("GL_EXT_rescale_normal"); +#endif /* GL_EXT_rescale_normal */ +#ifdef GL_EXT_scene_marker + CONST_CAST(GLEW_EXT_scene_marker) = glewGetExtension("GL_EXT_scene_marker"); + if (glewExperimental || GLEW_EXT_scene_marker) CONST_CAST(GLEW_EXT_scene_marker) = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_scene_marker */ +#ifdef GL_EXT_secondary_color + CONST_CAST(GLEW_EXT_secondary_color) = glewGetExtension("GL_EXT_secondary_color"); + if (glewExperimental || GLEW_EXT_secondary_color) CONST_CAST(GLEW_EXT_secondary_color) = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_secondary_color */ +#ifdef GL_EXT_separate_specular_color + CONST_CAST(GLEW_EXT_separate_specular_color) = glewGetExtension("GL_EXT_separate_specular_color"); +#endif /* GL_EXT_separate_specular_color */ +#ifdef GL_EXT_shadow_funcs + CONST_CAST(GLEW_EXT_shadow_funcs) = glewGetExtension("GL_EXT_shadow_funcs"); +#endif /* GL_EXT_shadow_funcs */ +#ifdef GL_EXT_shared_texture_palette + CONST_CAST(GLEW_EXT_shared_texture_palette) = glewGetExtension("GL_EXT_shared_texture_palette"); +#endif /* GL_EXT_shared_texture_palette */ +#ifdef GL_EXT_stencil_clear_tag + CONST_CAST(GLEW_EXT_stencil_clear_tag) = glewGetExtension("GL_EXT_stencil_clear_tag"); +#endif /* GL_EXT_stencil_clear_tag */ +#ifdef GL_EXT_stencil_two_side + CONST_CAST(GLEW_EXT_stencil_two_side) = glewGetExtension("GL_EXT_stencil_two_side"); + if (glewExperimental || GLEW_EXT_stencil_two_side) CONST_CAST(GLEW_EXT_stencil_two_side) = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_stencil_two_side */ +#ifdef GL_EXT_stencil_wrap + CONST_CAST(GLEW_EXT_stencil_wrap) = glewGetExtension("GL_EXT_stencil_wrap"); +#endif /* GL_EXT_stencil_wrap */ +#ifdef GL_EXT_subtexture + CONST_CAST(GLEW_EXT_subtexture) = glewGetExtension("GL_EXT_subtexture"); + if (glewExperimental || GLEW_EXT_subtexture) CONST_CAST(GLEW_EXT_subtexture) = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_subtexture */ +#ifdef GL_EXT_texture + CONST_CAST(GLEW_EXT_texture) = glewGetExtension("GL_EXT_texture"); +#endif /* GL_EXT_texture */ +#ifdef GL_EXT_texture3D + CONST_CAST(GLEW_EXT_texture3D) = glewGetExtension("GL_EXT_texture3D"); + if (glewExperimental || GLEW_EXT_texture3D) CONST_CAST(GLEW_EXT_texture3D) = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture3D */ +#ifdef GL_EXT_texture_array + CONST_CAST(GLEW_EXT_texture_array) = glewGetExtension("GL_EXT_texture_array"); +#endif /* GL_EXT_texture_array */ +#ifdef GL_EXT_texture_buffer_object + CONST_CAST(GLEW_EXT_texture_buffer_object) = glewGetExtension("GL_EXT_texture_buffer_object"); + if (glewExperimental || GLEW_EXT_texture_buffer_object) CONST_CAST(GLEW_EXT_texture_buffer_object) = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_buffer_object */ +#ifdef GL_EXT_texture_compression_dxt1 + CONST_CAST(GLEW_EXT_texture_compression_dxt1) = glewGetExtension("GL_EXT_texture_compression_dxt1"); +#endif /* GL_EXT_texture_compression_dxt1 */ +#ifdef GL_EXT_texture_compression_latc + CONST_CAST(GLEW_EXT_texture_compression_latc) = glewGetExtension("GL_EXT_texture_compression_latc"); +#endif /* GL_EXT_texture_compression_latc */ +#ifdef GL_EXT_texture_compression_rgtc + CONST_CAST(GLEW_EXT_texture_compression_rgtc) = glewGetExtension("GL_EXT_texture_compression_rgtc"); +#endif /* GL_EXT_texture_compression_rgtc */ +#ifdef GL_EXT_texture_compression_s3tc + CONST_CAST(GLEW_EXT_texture_compression_s3tc) = glewGetExtension("GL_EXT_texture_compression_s3tc"); +#endif /* GL_EXT_texture_compression_s3tc */ +#ifdef GL_EXT_texture_cube_map + CONST_CAST(GLEW_EXT_texture_cube_map) = glewGetExtension("GL_EXT_texture_cube_map"); +#endif /* GL_EXT_texture_cube_map */ +#ifdef GL_EXT_texture_edge_clamp + CONST_CAST(GLEW_EXT_texture_edge_clamp) = glewGetExtension("GL_EXT_texture_edge_clamp"); +#endif /* GL_EXT_texture_edge_clamp */ +#ifdef GL_EXT_texture_env + CONST_CAST(GLEW_EXT_texture_env) = glewGetExtension("GL_EXT_texture_env"); +#endif /* GL_EXT_texture_env */ +#ifdef GL_EXT_texture_env_add + CONST_CAST(GLEW_EXT_texture_env_add) = glewGetExtension("GL_EXT_texture_env_add"); +#endif /* GL_EXT_texture_env_add */ +#ifdef GL_EXT_texture_env_combine + CONST_CAST(GLEW_EXT_texture_env_combine) = glewGetExtension("GL_EXT_texture_env_combine"); +#endif /* GL_EXT_texture_env_combine */ +#ifdef GL_EXT_texture_env_dot3 + CONST_CAST(GLEW_EXT_texture_env_dot3) = glewGetExtension("GL_EXT_texture_env_dot3"); +#endif /* GL_EXT_texture_env_dot3 */ +#ifdef GL_EXT_texture_filter_anisotropic + CONST_CAST(GLEW_EXT_texture_filter_anisotropic) = glewGetExtension("GL_EXT_texture_filter_anisotropic"); +#endif /* GL_EXT_texture_filter_anisotropic */ +#ifdef GL_EXT_texture_integer + CONST_CAST(GLEW_EXT_texture_integer) = glewGetExtension("GL_EXT_texture_integer"); + if (glewExperimental || GLEW_EXT_texture_integer) CONST_CAST(GLEW_EXT_texture_integer) = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_integer */ +#ifdef GL_EXT_texture_lod_bias + CONST_CAST(GLEW_EXT_texture_lod_bias) = glewGetExtension("GL_EXT_texture_lod_bias"); +#endif /* GL_EXT_texture_lod_bias */ +#ifdef GL_EXT_texture_mirror_clamp + CONST_CAST(GLEW_EXT_texture_mirror_clamp) = glewGetExtension("GL_EXT_texture_mirror_clamp"); +#endif /* GL_EXT_texture_mirror_clamp */ +#ifdef GL_EXT_texture_object + CONST_CAST(GLEW_EXT_texture_object) = glewGetExtension("GL_EXT_texture_object"); + if (glewExperimental || GLEW_EXT_texture_object) CONST_CAST(GLEW_EXT_texture_object) = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_object */ +#ifdef GL_EXT_texture_perturb_normal + CONST_CAST(GLEW_EXT_texture_perturb_normal) = glewGetExtension("GL_EXT_texture_perturb_normal"); + if (glewExperimental || GLEW_EXT_texture_perturb_normal) CONST_CAST(GLEW_EXT_texture_perturb_normal) = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_perturb_normal */ +#ifdef GL_EXT_texture_rectangle + CONST_CAST(GLEW_EXT_texture_rectangle) = glewGetExtension("GL_EXT_texture_rectangle"); +#endif /* GL_EXT_texture_rectangle */ +#ifdef GL_EXT_texture_sRGB + CONST_CAST(GLEW_EXT_texture_sRGB) = glewGetExtension("GL_EXT_texture_sRGB"); +#endif /* GL_EXT_texture_sRGB */ +#ifdef GL_EXT_texture_shared_exponent + CONST_CAST(GLEW_EXT_texture_shared_exponent) = glewGetExtension("GL_EXT_texture_shared_exponent"); +#endif /* GL_EXT_texture_shared_exponent */ +#ifdef GL_EXT_timer_query + CONST_CAST(GLEW_EXT_timer_query) = glewGetExtension("GL_EXT_timer_query"); + if (glewExperimental || GLEW_EXT_timer_query) CONST_CAST(GLEW_EXT_timer_query) = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_timer_query */ +#ifdef GL_EXT_vertex_array + CONST_CAST(GLEW_EXT_vertex_array) = glewGetExtension("GL_EXT_vertex_array"); + if (glewExperimental || GLEW_EXT_vertex_array) CONST_CAST(GLEW_EXT_vertex_array) = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_array */ +#ifdef GL_EXT_vertex_shader + CONST_CAST(GLEW_EXT_vertex_shader) = glewGetExtension("GL_EXT_vertex_shader"); + if (glewExperimental || GLEW_EXT_vertex_shader) CONST_CAST(GLEW_EXT_vertex_shader) = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_shader */ +#ifdef GL_EXT_vertex_weighting + CONST_CAST(GLEW_EXT_vertex_weighting) = glewGetExtension("GL_EXT_vertex_weighting"); + if (glewExperimental || GLEW_EXT_vertex_weighting) CONST_CAST(GLEW_EXT_vertex_weighting) = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_weighting */ +#ifdef GL_GREMEDY_frame_terminator + CONST_CAST(GLEW_GREMEDY_frame_terminator) = glewGetExtension("GL_GREMEDY_frame_terminator"); + if (glewExperimental || GLEW_GREMEDY_frame_terminator) CONST_CAST(GLEW_GREMEDY_frame_terminator) = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_GREMEDY_frame_terminator */ +#ifdef GL_GREMEDY_string_marker + CONST_CAST(GLEW_GREMEDY_string_marker) = glewGetExtension("GL_GREMEDY_string_marker"); + if (glewExperimental || GLEW_GREMEDY_string_marker) CONST_CAST(GLEW_GREMEDY_string_marker) = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_GREMEDY_string_marker */ +#ifdef GL_HP_convolution_border_modes + CONST_CAST(GLEW_HP_convolution_border_modes) = glewGetExtension("GL_HP_convolution_border_modes"); +#endif /* GL_HP_convolution_border_modes */ +#ifdef GL_HP_image_transform + CONST_CAST(GLEW_HP_image_transform) = glewGetExtension("GL_HP_image_transform"); + if (glewExperimental || GLEW_HP_image_transform) CONST_CAST(GLEW_HP_image_transform) = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_HP_image_transform */ +#ifdef GL_HP_occlusion_test + CONST_CAST(GLEW_HP_occlusion_test) = glewGetExtension("GL_HP_occlusion_test"); +#endif /* GL_HP_occlusion_test */ +#ifdef GL_HP_texture_lighting + CONST_CAST(GLEW_HP_texture_lighting) = glewGetExtension("GL_HP_texture_lighting"); +#endif /* GL_HP_texture_lighting */ +#ifdef GL_IBM_cull_vertex + CONST_CAST(GLEW_IBM_cull_vertex) = glewGetExtension("GL_IBM_cull_vertex"); +#endif /* GL_IBM_cull_vertex */ +#ifdef GL_IBM_multimode_draw_arrays + CONST_CAST(GLEW_IBM_multimode_draw_arrays) = glewGetExtension("GL_IBM_multimode_draw_arrays"); + if (glewExperimental || GLEW_IBM_multimode_draw_arrays) CONST_CAST(GLEW_IBM_multimode_draw_arrays) = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_IBM_multimode_draw_arrays */ +#ifdef GL_IBM_rasterpos_clip + CONST_CAST(GLEW_IBM_rasterpos_clip) = glewGetExtension("GL_IBM_rasterpos_clip"); +#endif /* GL_IBM_rasterpos_clip */ +#ifdef GL_IBM_static_data + CONST_CAST(GLEW_IBM_static_data) = glewGetExtension("GL_IBM_static_data"); +#endif /* GL_IBM_static_data */ +#ifdef GL_IBM_texture_mirrored_repeat + CONST_CAST(GLEW_IBM_texture_mirrored_repeat) = glewGetExtension("GL_IBM_texture_mirrored_repeat"); +#endif /* GL_IBM_texture_mirrored_repeat */ +#ifdef GL_IBM_vertex_array_lists + CONST_CAST(GLEW_IBM_vertex_array_lists) = glewGetExtension("GL_IBM_vertex_array_lists"); + if (glewExperimental || GLEW_IBM_vertex_array_lists) CONST_CAST(GLEW_IBM_vertex_array_lists) = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_IBM_vertex_array_lists */ +#ifdef GL_INGR_color_clamp + CONST_CAST(GLEW_INGR_color_clamp) = glewGetExtension("GL_INGR_color_clamp"); +#endif /* GL_INGR_color_clamp */ +#ifdef GL_INGR_interlace_read + CONST_CAST(GLEW_INGR_interlace_read) = glewGetExtension("GL_INGR_interlace_read"); +#endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_parallel_arrays + CONST_CAST(GLEW_INTEL_parallel_arrays) = glewGetExtension("GL_INTEL_parallel_arrays"); + if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_INTEL_parallel_arrays */ +#ifdef GL_INTEL_texture_scissor + CONST_CAST(GLEW_INTEL_texture_scissor) = glewGetExtension("GL_INTEL_texture_scissor"); + if (glewExperimental || GLEW_INTEL_texture_scissor) CONST_CAST(GLEW_INTEL_texture_scissor) = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_INTEL_texture_scissor */ +#ifdef GL_KTX_buffer_region + CONST_CAST(GLEW_KTX_buffer_region) = glewGetExtension("GL_KTX_buffer_region"); + if (glewExperimental || GLEW_KTX_buffer_region) CONST_CAST(GLEW_KTX_buffer_region) = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_KTX_buffer_region */ +#ifdef GL_MESAX_texture_stack + CONST_CAST(GLEW_MESAX_texture_stack) = glewGetExtension("GL_MESAX_texture_stack"); +#endif /* GL_MESAX_texture_stack */ +#ifdef GL_MESA_pack_invert + CONST_CAST(GLEW_MESA_pack_invert) = glewGetExtension("GL_MESA_pack_invert"); +#endif /* GL_MESA_pack_invert */ +#ifdef GL_MESA_resize_buffers + CONST_CAST(GLEW_MESA_resize_buffers) = glewGetExtension("GL_MESA_resize_buffers"); + if (glewExperimental || GLEW_MESA_resize_buffers) CONST_CAST(GLEW_MESA_resize_buffers) = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_MESA_resize_buffers */ +#ifdef GL_MESA_window_pos + CONST_CAST(GLEW_MESA_window_pos) = glewGetExtension("GL_MESA_window_pos"); + if (glewExperimental || GLEW_MESA_window_pos) CONST_CAST(GLEW_MESA_window_pos) = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_MESA_window_pos */ +#ifdef GL_MESA_ycbcr_texture + CONST_CAST(GLEW_MESA_ycbcr_texture) = glewGetExtension("GL_MESA_ycbcr_texture"); +#endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NV_blend_square + CONST_CAST(GLEW_NV_blend_square) = glewGetExtension("GL_NV_blend_square"); +#endif /* GL_NV_blend_square */ +#ifdef GL_NV_copy_depth_to_color + CONST_CAST(GLEW_NV_copy_depth_to_color) = glewGetExtension("GL_NV_copy_depth_to_color"); +#endif /* GL_NV_copy_depth_to_color */ +#ifdef GL_NV_depth_buffer_float + CONST_CAST(GLEW_NV_depth_buffer_float) = glewGetExtension("GL_NV_depth_buffer_float"); + if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_depth_buffer_float */ +#ifdef GL_NV_depth_clamp + CONST_CAST(GLEW_NV_depth_clamp) = glewGetExtension("GL_NV_depth_clamp"); +#endif /* GL_NV_depth_clamp */ +#ifdef GL_NV_depth_range_unclamped + CONST_CAST(GLEW_NV_depth_range_unclamped) = glewGetExtension("GL_NV_depth_range_unclamped"); +#endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_evaluators + CONST_CAST(GLEW_NV_evaluators) = glewGetExtension("GL_NV_evaluators"); + if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_evaluators */ +#ifdef GL_NV_fence + CONST_CAST(GLEW_NV_fence) = glewGetExtension("GL_NV_fence"); + if (glewExperimental || GLEW_NV_fence) CONST_CAST(GLEW_NV_fence) = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_fence */ +#ifdef GL_NV_float_buffer + CONST_CAST(GLEW_NV_float_buffer) = glewGetExtension("GL_NV_float_buffer"); +#endif /* GL_NV_float_buffer */ +#ifdef GL_NV_fog_distance + CONST_CAST(GLEW_NV_fog_distance) = glewGetExtension("GL_NV_fog_distance"); +#endif /* GL_NV_fog_distance */ +#ifdef GL_NV_fragment_program + CONST_CAST(GLEW_NV_fragment_program) = glewGetExtension("GL_NV_fragment_program"); + if (glewExperimental || GLEW_NV_fragment_program) CONST_CAST(GLEW_NV_fragment_program) = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_fragment_program */ +#ifdef GL_NV_fragment_program2 + CONST_CAST(GLEW_NV_fragment_program2) = glewGetExtension("GL_NV_fragment_program2"); +#endif /* GL_NV_fragment_program2 */ +#ifdef GL_NV_fragment_program4 + CONST_CAST(GLEW_NV_fragment_program4) = glewGetExtension("GL_NV_fragment_program4"); +#endif /* GL_NV_fragment_program4 */ +#ifdef GL_NV_fragment_program_option + CONST_CAST(GLEW_NV_fragment_program_option) = glewGetExtension("GL_NV_fragment_program_option"); +#endif /* GL_NV_fragment_program_option */ +#ifdef GL_NV_framebuffer_multisample_coverage + CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = glewGetExtension("GL_NV_framebuffer_multisample_coverage"); + if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_framebuffer_multisample_coverage */ +#ifdef GL_NV_geometry_program4 + CONST_CAST(GLEW_NV_geometry_program4) = glewGetExtension("GL_NV_geometry_program4"); + if (glewExperimental || GLEW_NV_geometry_program4) CONST_CAST(GLEW_NV_geometry_program4) = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_geometry_program4 */ +#ifdef GL_NV_geometry_shader4 + CONST_CAST(GLEW_NV_geometry_shader4) = glewGetExtension("GL_NV_geometry_shader4"); +#endif /* GL_NV_geometry_shader4 */ +#ifdef GL_NV_gpu_program4 + CONST_CAST(GLEW_NV_gpu_program4) = glewGetExtension("GL_NV_gpu_program4"); + if (glewExperimental || GLEW_NV_gpu_program4) CONST_CAST(GLEW_NV_gpu_program4) = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_gpu_program4 */ +#ifdef GL_NV_half_float + CONST_CAST(GLEW_NV_half_float) = glewGetExtension("GL_NV_half_float"); + if (glewExperimental || GLEW_NV_half_float) CONST_CAST(GLEW_NV_half_float) = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_half_float */ +#ifdef GL_NV_light_max_exponent + CONST_CAST(GLEW_NV_light_max_exponent) = glewGetExtension("GL_NV_light_max_exponent"); +#endif /* GL_NV_light_max_exponent */ +#ifdef GL_NV_multisample_filter_hint + CONST_CAST(GLEW_NV_multisample_filter_hint) = glewGetExtension("GL_NV_multisample_filter_hint"); +#endif /* GL_NV_multisample_filter_hint */ +#ifdef GL_NV_occlusion_query + CONST_CAST(GLEW_NV_occlusion_query) = glewGetExtension("GL_NV_occlusion_query"); + if (glewExperimental || GLEW_NV_occlusion_query) CONST_CAST(GLEW_NV_occlusion_query) = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_occlusion_query */ +#ifdef GL_NV_packed_depth_stencil + CONST_CAST(GLEW_NV_packed_depth_stencil) = glewGetExtension("GL_NV_packed_depth_stencil"); +#endif /* GL_NV_packed_depth_stencil */ +#ifdef GL_NV_parameter_buffer_object + CONST_CAST(GLEW_NV_parameter_buffer_object) = glewGetExtension("GL_NV_parameter_buffer_object"); + if (glewExperimental || GLEW_NV_parameter_buffer_object) CONST_CAST(GLEW_NV_parameter_buffer_object) = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_parameter_buffer_object */ +#ifdef GL_NV_pixel_data_range + CONST_CAST(GLEW_NV_pixel_data_range) = glewGetExtension("GL_NV_pixel_data_range"); + if (glewExperimental || GLEW_NV_pixel_data_range) CONST_CAST(GLEW_NV_pixel_data_range) = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_pixel_data_range */ +#ifdef GL_NV_point_sprite + CONST_CAST(GLEW_NV_point_sprite) = glewGetExtension("GL_NV_point_sprite"); + if (glewExperimental || GLEW_NV_point_sprite) CONST_CAST(GLEW_NV_point_sprite) = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_point_sprite */ +#ifdef GL_NV_primitive_restart + CONST_CAST(GLEW_NV_primitive_restart) = glewGetExtension("GL_NV_primitive_restart"); + if (glewExperimental || GLEW_NV_primitive_restart) CONST_CAST(GLEW_NV_primitive_restart) = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_primitive_restart */ +#ifdef GL_NV_register_combiners + CONST_CAST(GLEW_NV_register_combiners) = glewGetExtension("GL_NV_register_combiners"); + if (glewExperimental || GLEW_NV_register_combiners) CONST_CAST(GLEW_NV_register_combiners) = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_register_combiners */ +#ifdef GL_NV_register_combiners2 + CONST_CAST(GLEW_NV_register_combiners2) = glewGetExtension("GL_NV_register_combiners2"); + if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_texgen_emboss + CONST_CAST(GLEW_NV_texgen_emboss) = glewGetExtension("GL_NV_texgen_emboss"); +#endif /* GL_NV_texgen_emboss */ +#ifdef GL_NV_texgen_reflection + CONST_CAST(GLEW_NV_texgen_reflection) = glewGetExtension("GL_NV_texgen_reflection"); +#endif /* GL_NV_texgen_reflection */ +#ifdef GL_NV_texture_compression_vtc + CONST_CAST(GLEW_NV_texture_compression_vtc) = glewGetExtension("GL_NV_texture_compression_vtc"); +#endif /* GL_NV_texture_compression_vtc */ +#ifdef GL_NV_texture_env_combine4 + CONST_CAST(GLEW_NV_texture_env_combine4) = glewGetExtension("GL_NV_texture_env_combine4"); +#endif /* GL_NV_texture_env_combine4 */ +#ifdef GL_NV_texture_expand_normal + CONST_CAST(GLEW_NV_texture_expand_normal) = glewGetExtension("GL_NV_texture_expand_normal"); +#endif /* GL_NV_texture_expand_normal */ +#ifdef GL_NV_texture_rectangle + CONST_CAST(GLEW_NV_texture_rectangle) = glewGetExtension("GL_NV_texture_rectangle"); +#endif /* GL_NV_texture_rectangle */ +#ifdef GL_NV_texture_shader + CONST_CAST(GLEW_NV_texture_shader) = glewGetExtension("GL_NV_texture_shader"); +#endif /* GL_NV_texture_shader */ +#ifdef GL_NV_texture_shader2 + CONST_CAST(GLEW_NV_texture_shader2) = glewGetExtension("GL_NV_texture_shader2"); +#endif /* GL_NV_texture_shader2 */ +#ifdef GL_NV_texture_shader3 + CONST_CAST(GLEW_NV_texture_shader3) = glewGetExtension("GL_NV_texture_shader3"); +#endif /* GL_NV_texture_shader3 */ +#ifdef GL_NV_transform_feedback + CONST_CAST(GLEW_NV_transform_feedback) = glewGetExtension("GL_NV_transform_feedback"); + if (glewExperimental || GLEW_NV_transform_feedback) CONST_CAST(GLEW_NV_transform_feedback) = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_transform_feedback */ +#ifdef GL_NV_vertex_array_range + CONST_CAST(GLEW_NV_vertex_array_range) = glewGetExtension("GL_NV_vertex_array_range"); + if (glewExperimental || GLEW_NV_vertex_array_range) CONST_CAST(GLEW_NV_vertex_array_range) = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_vertex_array_range */ +#ifdef GL_NV_vertex_array_range2 + CONST_CAST(GLEW_NV_vertex_array_range2) = glewGetExtension("GL_NV_vertex_array_range2"); +#endif /* GL_NV_vertex_array_range2 */ +#ifdef GL_NV_vertex_program + CONST_CAST(GLEW_NV_vertex_program) = glewGetExtension("GL_NV_vertex_program"); + if (glewExperimental || GLEW_NV_vertex_program) CONST_CAST(GLEW_NV_vertex_program) = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_vertex_program */ +#ifdef GL_NV_vertex_program1_1 + CONST_CAST(GLEW_NV_vertex_program1_1) = glewGetExtension("GL_NV_vertex_program1_1"); +#endif /* GL_NV_vertex_program1_1 */ +#ifdef GL_NV_vertex_program2 + CONST_CAST(GLEW_NV_vertex_program2) = glewGetExtension("GL_NV_vertex_program2"); +#endif /* GL_NV_vertex_program2 */ +#ifdef GL_NV_vertex_program2_option + CONST_CAST(GLEW_NV_vertex_program2_option) = glewGetExtension("GL_NV_vertex_program2_option"); +#endif /* GL_NV_vertex_program2_option */ +#ifdef GL_NV_vertex_program3 + CONST_CAST(GLEW_NV_vertex_program3) = glewGetExtension("GL_NV_vertex_program3"); +#endif /* GL_NV_vertex_program3 */ +#ifdef GL_NV_vertex_program4 + CONST_CAST(GLEW_NV_vertex_program4) = glewGetExtension("GL_NV_vertex_program4"); +#endif /* GL_NV_vertex_program4 */ +#ifdef GL_OES_byte_coordinates + CONST_CAST(GLEW_OES_byte_coordinates) = glewGetExtension("GL_OES_byte_coordinates"); +#endif /* GL_OES_byte_coordinates */ +#ifdef GL_OES_compressed_paletted_texture + CONST_CAST(GLEW_OES_compressed_paletted_texture) = glewGetExtension("GL_OES_compressed_paletted_texture"); +#endif /* GL_OES_compressed_paletted_texture */ +#ifdef GL_OES_read_format + CONST_CAST(GLEW_OES_read_format) = glewGetExtension("GL_OES_read_format"); +#endif /* GL_OES_read_format */ +#ifdef GL_OES_single_precision + CONST_CAST(GLEW_OES_single_precision) = glewGetExtension("GL_OES_single_precision"); + if (glewExperimental || GLEW_OES_single_precision) CONST_CAST(GLEW_OES_single_precision) = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_OES_single_precision */ +#ifdef GL_OML_interlace + CONST_CAST(GLEW_OML_interlace) = glewGetExtension("GL_OML_interlace"); +#endif /* GL_OML_interlace */ +#ifdef GL_OML_resample + CONST_CAST(GLEW_OML_resample) = glewGetExtension("GL_OML_resample"); +#endif /* GL_OML_resample */ +#ifdef GL_OML_subsample + CONST_CAST(GLEW_OML_subsample) = glewGetExtension("GL_OML_subsample"); +#endif /* GL_OML_subsample */ +#ifdef GL_PGI_misc_hints + CONST_CAST(GLEW_PGI_misc_hints) = glewGetExtension("GL_PGI_misc_hints"); +#endif /* GL_PGI_misc_hints */ +#ifdef GL_PGI_vertex_hints + CONST_CAST(GLEW_PGI_vertex_hints) = glewGetExtension("GL_PGI_vertex_hints"); +#endif /* GL_PGI_vertex_hints */ +#ifdef GL_REND_screen_coordinates + CONST_CAST(GLEW_REND_screen_coordinates) = glewGetExtension("GL_REND_screen_coordinates"); +#endif /* GL_REND_screen_coordinates */ +#ifdef GL_S3_s3tc + CONST_CAST(GLEW_S3_s3tc) = glewGetExtension("GL_S3_s3tc"); +#endif /* GL_S3_s3tc */ +#ifdef GL_SGIS_color_range + CONST_CAST(GLEW_SGIS_color_range) = glewGetExtension("GL_SGIS_color_range"); +#endif /* GL_SGIS_color_range */ +#ifdef GL_SGIS_detail_texture + CONST_CAST(GLEW_SGIS_detail_texture) = glewGetExtension("GL_SGIS_detail_texture"); + if (glewExperimental || GLEW_SGIS_detail_texture) CONST_CAST(GLEW_SGIS_detail_texture) = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_detail_texture */ +#ifdef GL_SGIS_fog_function + CONST_CAST(GLEW_SGIS_fog_function) = glewGetExtension("GL_SGIS_fog_function"); + if (glewExperimental || GLEW_SGIS_fog_function) CONST_CAST(GLEW_SGIS_fog_function) = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_fog_function */ +#ifdef GL_SGIS_generate_mipmap + CONST_CAST(GLEW_SGIS_generate_mipmap) = glewGetExtension("GL_SGIS_generate_mipmap"); +#endif /* GL_SGIS_generate_mipmap */ +#ifdef GL_SGIS_multisample + CONST_CAST(GLEW_SGIS_multisample) = glewGetExtension("GL_SGIS_multisample"); + if (glewExperimental || GLEW_SGIS_multisample) CONST_CAST(GLEW_SGIS_multisample) = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_multisample */ +#ifdef GL_SGIS_pixel_texture + CONST_CAST(GLEW_SGIS_pixel_texture) = glewGetExtension("GL_SGIS_pixel_texture"); +#endif /* GL_SGIS_pixel_texture */ +#ifdef GL_SGIS_sharpen_texture + CONST_CAST(GLEW_SGIS_sharpen_texture) = glewGetExtension("GL_SGIS_sharpen_texture"); + if (glewExperimental || GLEW_SGIS_sharpen_texture) CONST_CAST(GLEW_SGIS_sharpen_texture) = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_sharpen_texture */ +#ifdef GL_SGIS_texture4D + CONST_CAST(GLEW_SGIS_texture4D) = glewGetExtension("GL_SGIS_texture4D"); + if (glewExperimental || GLEW_SGIS_texture4D) CONST_CAST(GLEW_SGIS_texture4D) = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_texture4D */ +#ifdef GL_SGIS_texture_border_clamp + CONST_CAST(GLEW_SGIS_texture_border_clamp) = glewGetExtension("GL_SGIS_texture_border_clamp"); +#endif /* GL_SGIS_texture_border_clamp */ +#ifdef GL_SGIS_texture_edge_clamp + CONST_CAST(GLEW_SGIS_texture_edge_clamp) = glewGetExtension("GL_SGIS_texture_edge_clamp"); +#endif /* GL_SGIS_texture_edge_clamp */ +#ifdef GL_SGIS_texture_filter4 + CONST_CAST(GLEW_SGIS_texture_filter4) = glewGetExtension("GL_SGIS_texture_filter4"); + if (glewExperimental || GLEW_SGIS_texture_filter4) CONST_CAST(GLEW_SGIS_texture_filter4) = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_texture_filter4 */ +#ifdef GL_SGIS_texture_lod + CONST_CAST(GLEW_SGIS_texture_lod) = glewGetExtension("GL_SGIS_texture_lod"); +#endif /* GL_SGIS_texture_lod */ +#ifdef GL_SGIS_texture_select + CONST_CAST(GLEW_SGIS_texture_select) = glewGetExtension("GL_SGIS_texture_select"); +#endif /* GL_SGIS_texture_select */ +#ifdef GL_SGIX_async + CONST_CAST(GLEW_SGIX_async) = glewGetExtension("GL_SGIX_async"); + if (glewExperimental || GLEW_SGIX_async) CONST_CAST(GLEW_SGIX_async) = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_async */ +#ifdef GL_SGIX_async_histogram + CONST_CAST(GLEW_SGIX_async_histogram) = glewGetExtension("GL_SGIX_async_histogram"); +#endif /* GL_SGIX_async_histogram */ +#ifdef GL_SGIX_async_pixel + CONST_CAST(GLEW_SGIX_async_pixel) = glewGetExtension("GL_SGIX_async_pixel"); +#endif /* GL_SGIX_async_pixel */ +#ifdef GL_SGIX_blend_alpha_minmax + CONST_CAST(GLEW_SGIX_blend_alpha_minmax) = glewGetExtension("GL_SGIX_blend_alpha_minmax"); +#endif /* GL_SGIX_blend_alpha_minmax */ +#ifdef GL_SGIX_clipmap + CONST_CAST(GLEW_SGIX_clipmap) = glewGetExtension("GL_SGIX_clipmap"); +#endif /* GL_SGIX_clipmap */ +#ifdef GL_SGIX_depth_texture + CONST_CAST(GLEW_SGIX_depth_texture) = glewGetExtension("GL_SGIX_depth_texture"); +#endif /* GL_SGIX_depth_texture */ +#ifdef GL_SGIX_flush_raster + CONST_CAST(GLEW_SGIX_flush_raster) = glewGetExtension("GL_SGIX_flush_raster"); + if (glewExperimental || GLEW_SGIX_flush_raster) CONST_CAST(GLEW_SGIX_flush_raster) = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_flush_raster */ +#ifdef GL_SGIX_fog_offset + CONST_CAST(GLEW_SGIX_fog_offset) = glewGetExtension("GL_SGIX_fog_offset"); +#endif /* GL_SGIX_fog_offset */ +#ifdef GL_SGIX_fog_texture + CONST_CAST(GLEW_SGIX_fog_texture) = glewGetExtension("GL_SGIX_fog_texture"); + if (glewExperimental || GLEW_SGIX_fog_texture) CONST_CAST(GLEW_SGIX_fog_texture) = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_fog_texture */ +#ifdef GL_SGIX_fragment_specular_lighting + CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = glewGetExtension("GL_SGIX_fragment_specular_lighting"); + if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_fragment_specular_lighting */ +#ifdef GL_SGIX_framezoom + CONST_CAST(GLEW_SGIX_framezoom) = glewGetExtension("GL_SGIX_framezoom"); + if (glewExperimental || GLEW_SGIX_framezoom) CONST_CAST(GLEW_SGIX_framezoom) = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_framezoom */ +#ifdef GL_SGIX_interlace + CONST_CAST(GLEW_SGIX_interlace) = glewGetExtension("GL_SGIX_interlace"); +#endif /* GL_SGIX_interlace */ +#ifdef GL_SGIX_ir_instrument1 + CONST_CAST(GLEW_SGIX_ir_instrument1) = glewGetExtension("GL_SGIX_ir_instrument1"); +#endif /* GL_SGIX_ir_instrument1 */ +#ifdef GL_SGIX_list_priority + CONST_CAST(GLEW_SGIX_list_priority) = glewGetExtension("GL_SGIX_list_priority"); +#endif /* GL_SGIX_list_priority */ +#ifdef GL_SGIX_pixel_texture + CONST_CAST(GLEW_SGIX_pixel_texture) = glewGetExtension("GL_SGIX_pixel_texture"); + if (glewExperimental || GLEW_SGIX_pixel_texture) CONST_CAST(GLEW_SGIX_pixel_texture) = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_pixel_texture */ +#ifdef GL_SGIX_pixel_texture_bits + CONST_CAST(GLEW_SGIX_pixel_texture_bits) = glewGetExtension("GL_SGIX_pixel_texture_bits"); +#endif /* GL_SGIX_pixel_texture_bits */ +#ifdef GL_SGIX_reference_plane + CONST_CAST(GLEW_SGIX_reference_plane) = glewGetExtension("GL_SGIX_reference_plane"); + if (glewExperimental || GLEW_SGIX_reference_plane) CONST_CAST(GLEW_SGIX_reference_plane) = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_reference_plane */ +#ifdef GL_SGIX_resample + CONST_CAST(GLEW_SGIX_resample) = glewGetExtension("GL_SGIX_resample"); +#endif /* GL_SGIX_resample */ +#ifdef GL_SGIX_shadow + CONST_CAST(GLEW_SGIX_shadow) = glewGetExtension("GL_SGIX_shadow"); +#endif /* GL_SGIX_shadow */ +#ifdef GL_SGIX_shadow_ambient + CONST_CAST(GLEW_SGIX_shadow_ambient) = glewGetExtension("GL_SGIX_shadow_ambient"); +#endif /* GL_SGIX_shadow_ambient */ +#ifdef GL_SGIX_sprite + CONST_CAST(GLEW_SGIX_sprite) = glewGetExtension("GL_SGIX_sprite"); + if (glewExperimental || GLEW_SGIX_sprite) CONST_CAST(GLEW_SGIX_sprite) = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_sprite */ +#ifdef GL_SGIX_tag_sample_buffer + CONST_CAST(GLEW_SGIX_tag_sample_buffer) = glewGetExtension("GL_SGIX_tag_sample_buffer"); + if (glewExperimental || GLEW_SGIX_tag_sample_buffer) CONST_CAST(GLEW_SGIX_tag_sample_buffer) = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_tag_sample_buffer */ +#ifdef GL_SGIX_texture_add_env + CONST_CAST(GLEW_SGIX_texture_add_env) = glewGetExtension("GL_SGIX_texture_add_env"); +#endif /* GL_SGIX_texture_add_env */ +#ifdef GL_SGIX_texture_coordinate_clamp + CONST_CAST(GLEW_SGIX_texture_coordinate_clamp) = glewGetExtension("GL_SGIX_texture_coordinate_clamp"); +#endif /* GL_SGIX_texture_coordinate_clamp */ +#ifdef GL_SGIX_texture_lod_bias + CONST_CAST(GLEW_SGIX_texture_lod_bias) = glewGetExtension("GL_SGIX_texture_lod_bias"); +#endif /* GL_SGIX_texture_lod_bias */ +#ifdef GL_SGIX_texture_multi_buffer + CONST_CAST(GLEW_SGIX_texture_multi_buffer) = glewGetExtension("GL_SGIX_texture_multi_buffer"); +#endif /* GL_SGIX_texture_multi_buffer */ +#ifdef GL_SGIX_texture_range + CONST_CAST(GLEW_SGIX_texture_range) = glewGetExtension("GL_SGIX_texture_range"); +#endif /* GL_SGIX_texture_range */ +#ifdef GL_SGIX_texture_scale_bias + CONST_CAST(GLEW_SGIX_texture_scale_bias) = glewGetExtension("GL_SGIX_texture_scale_bias"); +#endif /* GL_SGIX_texture_scale_bias */ +#ifdef GL_SGIX_vertex_preclip + CONST_CAST(GLEW_SGIX_vertex_preclip) = glewGetExtension("GL_SGIX_vertex_preclip"); +#endif /* GL_SGIX_vertex_preclip */ +#ifdef GL_SGIX_vertex_preclip_hint + CONST_CAST(GLEW_SGIX_vertex_preclip_hint) = glewGetExtension("GL_SGIX_vertex_preclip_hint"); +#endif /* GL_SGIX_vertex_preclip_hint */ +#ifdef GL_SGIX_ycrcb + CONST_CAST(GLEW_SGIX_ycrcb) = glewGetExtension("GL_SGIX_ycrcb"); +#endif /* GL_SGIX_ycrcb */ +#ifdef GL_SGI_color_matrix + CONST_CAST(GLEW_SGI_color_matrix) = glewGetExtension("GL_SGI_color_matrix"); +#endif /* GL_SGI_color_matrix */ +#ifdef GL_SGI_color_table + CONST_CAST(GLEW_SGI_color_table) = glewGetExtension("GL_SGI_color_table"); + if (glewExperimental || GLEW_SGI_color_table) CONST_CAST(GLEW_SGI_color_table) = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGI_color_table */ +#ifdef GL_SGI_texture_color_table + CONST_CAST(GLEW_SGI_texture_color_table) = glewGetExtension("GL_SGI_texture_color_table"); +#endif /* GL_SGI_texture_color_table */ +#ifdef GL_SUNX_constant_data + CONST_CAST(GLEW_SUNX_constant_data) = glewGetExtension("GL_SUNX_constant_data"); + if (glewExperimental || GLEW_SUNX_constant_data) CONST_CAST(GLEW_SUNX_constant_data) = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUNX_constant_data */ +#ifdef GL_SUN_convolution_border_modes + CONST_CAST(GLEW_SUN_convolution_border_modes) = glewGetExtension("GL_SUN_convolution_border_modes"); +#endif /* GL_SUN_convolution_border_modes */ +#ifdef GL_SUN_global_alpha + CONST_CAST(GLEW_SUN_global_alpha) = glewGetExtension("GL_SUN_global_alpha"); + if (glewExperimental || GLEW_SUN_global_alpha) CONST_CAST(GLEW_SUN_global_alpha) = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_global_alpha */ +#ifdef GL_SUN_mesh_array + CONST_CAST(GLEW_SUN_mesh_array) = glewGetExtension("GL_SUN_mesh_array"); +#endif /* GL_SUN_mesh_array */ +#ifdef GL_SUN_read_video_pixels + CONST_CAST(GLEW_SUN_read_video_pixels) = glewGetExtension("GL_SUN_read_video_pixels"); + if (glewExperimental || GLEW_SUN_read_video_pixels) CONST_CAST(GLEW_SUN_read_video_pixels) = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_read_video_pixels */ +#ifdef GL_SUN_slice_accum + CONST_CAST(GLEW_SUN_slice_accum) = glewGetExtension("GL_SUN_slice_accum"); +#endif /* GL_SUN_slice_accum */ +#ifdef GL_SUN_triangle_list + CONST_CAST(GLEW_SUN_triangle_list) = glewGetExtension("GL_SUN_triangle_list"); + if (glewExperimental || GLEW_SUN_triangle_list) CONST_CAST(GLEW_SUN_triangle_list) = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_triangle_list */ +#ifdef GL_SUN_vertex + CONST_CAST(GLEW_SUN_vertex) = glewGetExtension("GL_SUN_vertex"); + if (glewExperimental || GLEW_SUN_vertex) CONST_CAST(GLEW_SUN_vertex) = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_vertex */ +#ifdef GL_WIN_phong_shading + CONST_CAST(GLEW_WIN_phong_shading) = glewGetExtension("GL_WIN_phong_shading"); +#endif /* GL_WIN_phong_shading */ +#ifdef GL_WIN_specular_fog + CONST_CAST(GLEW_WIN_specular_fog) = glewGetExtension("GL_WIN_specular_fog"); +#endif /* GL_WIN_specular_fog */ +#ifdef GL_WIN_swap_hint + CONST_CAST(GLEW_WIN_swap_hint) = glewGetExtension("GL_WIN_swap_hint"); + if (glewExperimental || GLEW_WIN_swap_hint) CONST_CAST(GLEW_WIN_swap_hint) = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_WIN_swap_hint */ + + return GLEW_OK; +} + + +#if defined(_WIN32) + +#if !defined(GLEW_MX) + +PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL; + +PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL; +PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB = NULL; +PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB = NULL; +PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB = NULL; + +PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB = NULL; + +PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB = NULL; +PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB = NULL; + +PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB = NULL; +PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB = NULL; +PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB = NULL; +PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB = NULL; +PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB = NULL; + +PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB = NULL; +PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB = NULL; +PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB = NULL; + +PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB = NULL; +PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB = NULL; +PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB = NULL; + +PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT = NULL; +PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT = NULL; +PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT = NULL; +PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT = NULL; + +PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT = NULL; + +PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT = NULL; +PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT = NULL; + +PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT = NULL; +PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT = NULL; +PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT = NULL; +PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT = NULL; +PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT = NULL; + +PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT = NULL; +PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT = NULL; +PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT = NULL; + +PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT = NULL; +PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT = NULL; + +PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D = NULL; +PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D = NULL; + +PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D = NULL; +PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D = NULL; +PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D = NULL; +PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D = NULL; + +PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D = NULL; +PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D = NULL; +PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D = NULL; +PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D = NULL; +PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D = NULL; +PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D = NULL; +PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D = NULL; +PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D = NULL; +PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D = NULL; +PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D = NULL; +PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D = NULL; +PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D = NULL; + +PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D = NULL; +PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D = NULL; +PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D = NULL; +PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D = NULL; + +PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D = NULL; +PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D = NULL; +PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D = NULL; +PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D = NULL; + +PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D = NULL; +PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D = NULL; +PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D = NULL; +PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D = NULL; + +PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV = NULL; +PFNWGLDELETEDCNVPROC __wglewDeleteDCNV = NULL; +PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV = NULL; +PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV = NULL; +PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV = NULL; + +PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; +PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; + +PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML = NULL; +PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML = NULL; +PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML = NULL; +PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML = NULL; +PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML = NULL; +PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML = NULL; +GLboolean __WGLEW_3DFX_multisample = GL_FALSE; +GLboolean __WGLEW_3DL_stereo_control = GL_FALSE; +GLboolean __WGLEW_ARB_buffer_region = GL_FALSE; +GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; +GLboolean __WGLEW_ARB_make_current_read = GL_FALSE; +GLboolean __WGLEW_ARB_multisample = GL_FALSE; +GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; +GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; +GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; +GLboolean __WGLEW_ARB_render_texture = GL_FALSE; +GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; +GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; +GLboolean __WGLEW_EXT_depth_float = GL_FALSE; +GLboolean __WGLEW_EXT_display_color_table = GL_FALSE; +GLboolean __WGLEW_EXT_extensions_string = GL_FALSE; +GLboolean __WGLEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __WGLEW_EXT_make_current_read = GL_FALSE; +GLboolean __WGLEW_EXT_multisample = GL_FALSE; +GLboolean __WGLEW_EXT_pbuffer = GL_FALSE; +GLboolean __WGLEW_EXT_pixel_format = GL_FALSE; +GLboolean __WGLEW_EXT_pixel_format_packed_float = GL_FALSE; +GLboolean __WGLEW_EXT_swap_control = GL_FALSE; +GLboolean __WGLEW_I3D_digital_video_control = GL_FALSE; +GLboolean __WGLEW_I3D_gamma = GL_FALSE; +GLboolean __WGLEW_I3D_genlock = GL_FALSE; +GLboolean __WGLEW_I3D_image_buffer = GL_FALSE; +GLboolean __WGLEW_I3D_swap_frame_lock = GL_FALSE; +GLboolean __WGLEW_I3D_swap_frame_usage = GL_FALSE; +GLboolean __WGLEW_NV_float_buffer = GL_FALSE; +GLboolean __WGLEW_NV_gpu_affinity = GL_FALSE; +GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; +GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; +GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; +GLboolean __WGLEW_OML_sync_control = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef WGL_3DFX_multisample + +#endif /* WGL_3DFX_multisample */ + +#ifdef WGL_3DL_stereo_control + +static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)glewGetProcAddress((const GLubyte*)"wglSetStereoEmitterState3DL")) == NULL) || r; + + return r; +} + +#endif /* WGL_3DL_stereo_control */ + +#ifdef WGL_ARB_buffer_region + +static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateBufferRegionARB")) == NULL) || r; + r = ((wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglDeleteBufferRegionARB")) == NULL) || r; + r = ((wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglRestoreBufferRegionARB")) == NULL) || r; + r = ((wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglSaveBufferRegionARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_buffer_region */ + +#ifdef WGL_ARB_extensions_string + +static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_extensions_string */ + +#ifdef WGL_ARB_make_current_read + +static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCARB")) == NULL) || r; + r = ((wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_make_current_read */ + +#ifdef WGL_ARB_multisample + +#endif /* WGL_ARB_multisample */ + +#ifdef WGL_ARB_pbuffer + +static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferARB")) == NULL) || r; + r = ((wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferARB")) == NULL) || r; + r = ((wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCARB")) == NULL) || r; + r = ((wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferARB")) == NULL) || r; + r = ((wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_pbuffer */ + +#ifdef WGL_ARB_pixel_format + +static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatARB")) == NULL) || r; + r = ((wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvARB")) == NULL) || r; + r = ((wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_pixel_format */ + +#ifdef WGL_ARB_pixel_format_float + +#endif /* WGL_ARB_pixel_format_float */ + +#ifdef WGL_ARB_render_texture + +static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglBindTexImageARB")) == NULL) || r; + r = ((wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglReleaseTexImageARB")) == NULL) || r; + r = ((wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"wglSetPbufferAttribARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_render_texture */ + +#ifdef WGL_ATI_pixel_format_float + +#endif /* WGL_ATI_pixel_format_float */ + +#ifdef WGL_ATI_render_texture_rectangle + +#endif /* WGL_ATI_render_texture_rectangle */ + +#ifdef WGL_EXT_depth_float + +#endif /* WGL_EXT_depth_float */ + +#ifdef WGL_EXT_display_color_table + +static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglBindDisplayColorTableEXT")) == NULL) || r; + r = ((wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglCreateDisplayColorTableEXT")) == NULL) || r; + r = ((wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyDisplayColorTableEXT")) == NULL) || r; + r = ((wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglLoadDisplayColorTableEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_display_color_table */ + +#ifdef WGL_EXT_extensions_string + +static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_extensions_string */ + +#ifdef WGL_EXT_framebuffer_sRGB + +#endif /* WGL_EXT_framebuffer_sRGB */ + +#ifdef WGL_EXT_make_current_read + +static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCEXT")) == NULL) || r; + r = ((wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_make_current_read */ + +#ifdef WGL_EXT_multisample + +#endif /* WGL_EXT_multisample */ + +#ifdef WGL_EXT_pbuffer + +static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferEXT")) == NULL) || r; + r = ((wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferEXT")) == NULL) || r; + r = ((wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCEXT")) == NULL) || r; + r = ((wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferEXT")) == NULL) || r; + r = ((wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_pbuffer */ + +#ifdef WGL_EXT_pixel_format + +static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatEXT")) == NULL) || r; + r = ((wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvEXT")) == NULL) || r; + r = ((wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_pixel_format */ + +#ifdef WGL_EXT_pixel_format_packed_float + +#endif /* WGL_EXT_pixel_format_packed_float */ + +#ifdef WGL_EXT_swap_control + +static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetSwapIntervalEXT")) == NULL) || r; + r = ((wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglSwapIntervalEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_swap_control */ + +#ifdef WGL_I3D_digital_video_control + +static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetDigitalVideoParametersI3D")) == NULL) || r; + r = ((wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetDigitalVideoParametersI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_digital_video_control */ + +#ifdef WGL_I3D_gamma + +static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableI3D")) == NULL) || r; + r = ((wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableParametersI3D")) == NULL) || r; + r = ((wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableI3D")) == NULL) || r; + r = ((wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableParametersI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_gamma */ + +#ifdef WGL_I3D_genlock + +static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableGenlockI3D")) == NULL) || r; + r = ((wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableGenlockI3D")) == NULL) || r; + r = ((wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSampleRateI3D")) == NULL) || r; + r = ((wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceDelayI3D")) == NULL) || r; + r = ((wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceEdgeI3D")) == NULL) || r; + r = ((wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceI3D")) == NULL) || r; + r = ((wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSampleRateI3D")) == NULL) || r; + r = ((wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceDelayI3D")) == NULL) || r; + r = ((wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceEdgeI3D")) == NULL) || r; + r = ((wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceI3D")) == NULL) || r; + r = ((wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledGenlockI3D")) == NULL) || r; + r = ((wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryGenlockMaxSourceDelayI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_genlock */ + +#ifdef WGL_I3D_image_buffer + +static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglAssociateImageBufferEventsI3D")) == NULL) || r; + r = ((wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglCreateImageBufferI3D")) == NULL) || r; + r = ((wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglDestroyImageBufferI3D")) == NULL) || r; + r = ((wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglReleaseImageBufferEventsI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_image_buffer */ + +#ifdef WGL_I3D_swap_frame_lock + +static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableFrameLockI3D")) == NULL) || r; + r = ((wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableFrameLockI3D")) == NULL) || r; + r = ((wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledFrameLockI3D")) == NULL) || r; + r = ((wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameLockMasterI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_swap_frame_lock */ + +#ifdef WGL_I3D_swap_frame_usage + +static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglBeginFrameTrackingI3D")) == NULL) || r; + r = ((wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglEndFrameTrackingI3D")) == NULL) || r; + r = ((wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetFrameUsageI3D")) == NULL) || r; + r = ((wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameTrackingI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_swap_frame_usage */ + +#ifdef WGL_NV_float_buffer + +#endif /* WGL_NV_float_buffer */ + +#ifdef WGL_NV_gpu_affinity + +static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglCreateAffinityDCNV")) == NULL) || r; + r = ((wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)glewGetProcAddress((const GLubyte*)"wglDeleteDCNV")) == NULL) || r; + r = ((wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpuDevicesNV")) == NULL) || r; + r = ((wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusFromAffinityDCNV")) == NULL) || r; + r = ((wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_gpu_affinity */ + +#ifdef WGL_NV_render_depth_texture + +#endif /* WGL_NV_render_depth_texture */ + +#ifdef WGL_NV_render_texture_rectangle + +#endif /* WGL_NV_render_texture_rectangle */ + +#ifdef WGL_NV_vertex_array_range + +static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglAllocateMemoryNV")) == NULL) || r; + r = ((wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglFreeMemoryNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_vertex_array_range */ + +#ifdef WGL_OML_sync_control + +static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetMscRateOML")) == NULL) || r; + r = ((wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetSyncValuesOML")) == NULL) || r; + r = ((wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapBuffersMscOML")) == NULL) || r; + r = ((wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapLayerBuffersMscOML")) == NULL) || r; + r = ((wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForMscOML")) == NULL) || r; + r = ((wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForSbcOML")) == NULL) || r; + + return r; +} + +#endif /* WGL_OML_sync_control */ + +/* ------------------------------------------------------------------------- */ + +static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; +static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; + +GLboolean wglewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); + if (_wglewGetExtensionsStringARB == NULL) + if (_wglewGetExtensionsStringEXT == NULL) + return GL_FALSE; + else + p = (GLubyte*)_wglewGetExtensionsStringEXT(); + else + p = (GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +GLenum wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) +{ + GLboolean crippled; + /* find wgl extension string query functions */ + _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); + _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); + /* initialize extensions */ + crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; +#ifdef WGL_3DFX_multisample + CONST_CAST(WGLEW_3DFX_multisample) = wglewGetExtension("WGL_3DFX_multisample"); +#endif /* WGL_3DFX_multisample */ +#ifdef WGL_3DL_stereo_control + CONST_CAST(WGLEW_3DL_stereo_control) = wglewGetExtension("WGL_3DL_stereo_control"); + if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) CONST_CAST(WGLEW_3DL_stereo_control)= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_3DL_stereo_control */ +#ifdef WGL_ARB_buffer_region + CONST_CAST(WGLEW_ARB_buffer_region) = wglewGetExtension("WGL_ARB_buffer_region"); + if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) CONST_CAST(WGLEW_ARB_buffer_region)= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_buffer_region */ +#ifdef WGL_ARB_extensions_string + CONST_CAST(WGLEW_ARB_extensions_string) = wglewGetExtension("WGL_ARB_extensions_string"); + if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) CONST_CAST(WGLEW_ARB_extensions_string)= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_extensions_string */ +#ifdef WGL_ARB_make_current_read + CONST_CAST(WGLEW_ARB_make_current_read) = wglewGetExtension("WGL_ARB_make_current_read"); + if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) CONST_CAST(WGLEW_ARB_make_current_read)= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_make_current_read */ +#ifdef WGL_ARB_multisample + CONST_CAST(WGLEW_ARB_multisample) = wglewGetExtension("WGL_ARB_multisample"); +#endif /* WGL_ARB_multisample */ +#ifdef WGL_ARB_pbuffer + CONST_CAST(WGLEW_ARB_pbuffer) = wglewGetExtension("WGL_ARB_pbuffer"); + if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) CONST_CAST(WGLEW_ARB_pbuffer)= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_pbuffer */ +#ifdef WGL_ARB_pixel_format + CONST_CAST(WGLEW_ARB_pixel_format) = wglewGetExtension("WGL_ARB_pixel_format"); + if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) CONST_CAST(WGLEW_ARB_pixel_format)= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_pixel_format */ +#ifdef WGL_ARB_pixel_format_float + CONST_CAST(WGLEW_ARB_pixel_format_float) = wglewGetExtension("WGL_ARB_pixel_format_float"); +#endif /* WGL_ARB_pixel_format_float */ +#ifdef WGL_ARB_render_texture + CONST_CAST(WGLEW_ARB_render_texture) = wglewGetExtension("WGL_ARB_render_texture"); + if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_render_texture */ +#ifdef WGL_ATI_pixel_format_float + CONST_CAST(WGLEW_ATI_pixel_format_float) = wglewGetExtension("WGL_ATI_pixel_format_float"); +#endif /* WGL_ATI_pixel_format_float */ +#ifdef WGL_ATI_render_texture_rectangle + CONST_CAST(WGLEW_ATI_render_texture_rectangle) = wglewGetExtension("WGL_ATI_render_texture_rectangle"); +#endif /* WGL_ATI_render_texture_rectangle */ +#ifdef WGL_EXT_depth_float + CONST_CAST(WGLEW_EXT_depth_float) = wglewGetExtension("WGL_EXT_depth_float"); +#endif /* WGL_EXT_depth_float */ +#ifdef WGL_EXT_display_color_table + CONST_CAST(WGLEW_EXT_display_color_table) = wglewGetExtension("WGL_EXT_display_color_table"); + if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) CONST_CAST(WGLEW_EXT_display_color_table)= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_display_color_table */ +#ifdef WGL_EXT_extensions_string + CONST_CAST(WGLEW_EXT_extensions_string) = wglewGetExtension("WGL_EXT_extensions_string"); + if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) CONST_CAST(WGLEW_EXT_extensions_string)= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_extensions_string */ +#ifdef WGL_EXT_framebuffer_sRGB + CONST_CAST(WGLEW_EXT_framebuffer_sRGB) = wglewGetExtension("WGL_EXT_framebuffer_sRGB"); +#endif /* WGL_EXT_framebuffer_sRGB */ +#ifdef WGL_EXT_make_current_read + CONST_CAST(WGLEW_EXT_make_current_read) = wglewGetExtension("WGL_EXT_make_current_read"); + if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) CONST_CAST(WGLEW_EXT_make_current_read)= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_make_current_read */ +#ifdef WGL_EXT_multisample + CONST_CAST(WGLEW_EXT_multisample) = wglewGetExtension("WGL_EXT_multisample"); +#endif /* WGL_EXT_multisample */ +#ifdef WGL_EXT_pbuffer + CONST_CAST(WGLEW_EXT_pbuffer) = wglewGetExtension("WGL_EXT_pbuffer"); + if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) CONST_CAST(WGLEW_EXT_pbuffer)= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_pbuffer */ +#ifdef WGL_EXT_pixel_format + CONST_CAST(WGLEW_EXT_pixel_format) = wglewGetExtension("WGL_EXT_pixel_format"); + if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) CONST_CAST(WGLEW_EXT_pixel_format)= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_pixel_format */ +#ifdef WGL_EXT_pixel_format_packed_float + CONST_CAST(WGLEW_EXT_pixel_format_packed_float) = wglewGetExtension("WGL_EXT_pixel_format_packed_float"); +#endif /* WGL_EXT_pixel_format_packed_float */ +#ifdef WGL_EXT_swap_control + CONST_CAST(WGLEW_EXT_swap_control) = wglewGetExtension("WGL_EXT_swap_control"); + if (glewExperimental || WGLEW_EXT_swap_control|| crippled) CONST_CAST(WGLEW_EXT_swap_control)= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_swap_control */ +#ifdef WGL_I3D_digital_video_control + CONST_CAST(WGLEW_I3D_digital_video_control) = wglewGetExtension("WGL_I3D_digital_video_control"); + if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) CONST_CAST(WGLEW_I3D_digital_video_control)= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_digital_video_control */ +#ifdef WGL_I3D_gamma + CONST_CAST(WGLEW_I3D_gamma) = wglewGetExtension("WGL_I3D_gamma"); + if (glewExperimental || WGLEW_I3D_gamma|| crippled) CONST_CAST(WGLEW_I3D_gamma)= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_gamma */ +#ifdef WGL_I3D_genlock + CONST_CAST(WGLEW_I3D_genlock) = wglewGetExtension("WGL_I3D_genlock"); + if (glewExperimental || WGLEW_I3D_genlock|| crippled) CONST_CAST(WGLEW_I3D_genlock)= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_genlock */ +#ifdef WGL_I3D_image_buffer + CONST_CAST(WGLEW_I3D_image_buffer) = wglewGetExtension("WGL_I3D_image_buffer"); + if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) CONST_CAST(WGLEW_I3D_image_buffer)= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_image_buffer */ +#ifdef WGL_I3D_swap_frame_lock + CONST_CAST(WGLEW_I3D_swap_frame_lock) = wglewGetExtension("WGL_I3D_swap_frame_lock"); + if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_lock)= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_swap_frame_lock */ +#ifdef WGL_I3D_swap_frame_usage + CONST_CAST(WGLEW_I3D_swap_frame_usage) = wglewGetExtension("WGL_I3D_swap_frame_usage"); + if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_usage)= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_swap_frame_usage */ +#ifdef WGL_NV_float_buffer + CONST_CAST(WGLEW_NV_float_buffer) = wglewGetExtension("WGL_NV_float_buffer"); +#endif /* WGL_NV_float_buffer */ +#ifdef WGL_NV_gpu_affinity + CONST_CAST(WGLEW_NV_gpu_affinity) = wglewGetExtension("WGL_NV_gpu_affinity"); + if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) CONST_CAST(WGLEW_NV_gpu_affinity)= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_gpu_affinity */ +#ifdef WGL_NV_render_depth_texture + CONST_CAST(WGLEW_NV_render_depth_texture) = wglewGetExtension("WGL_NV_render_depth_texture"); +#endif /* WGL_NV_render_depth_texture */ +#ifdef WGL_NV_render_texture_rectangle + CONST_CAST(WGLEW_NV_render_texture_rectangle) = wglewGetExtension("WGL_NV_render_texture_rectangle"); +#endif /* WGL_NV_render_texture_rectangle */ +#ifdef WGL_NV_vertex_array_range + CONST_CAST(WGLEW_NV_vertex_array_range) = wglewGetExtension("WGL_NV_vertex_array_range"); + if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) CONST_CAST(WGLEW_NV_vertex_array_range)= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_vertex_array_range */ +#ifdef WGL_OML_sync_control + CONST_CAST(WGLEW_OML_sync_control) = wglewGetExtension("WGL_OML_sync_control"); + if (glewExperimental || WGLEW_OML_sync_control|| crippled) CONST_CAST(WGLEW_OML_sync_control)= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_OML_sync_control */ + + return GLEW_OK; +} + +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + +PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; + +PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig = NULL; +PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext = NULL; +PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer = NULL; +PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap = NULL; +PFNGLXCREATEWINDOWPROC __glewXCreateWindow = NULL; +PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer = NULL; +PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap = NULL; +PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow = NULL; +PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable = NULL; +PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib = NULL; +PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs = NULL; +PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent = NULL; +PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig = NULL; +PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent = NULL; +PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; +PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; +PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; + +PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; +PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI = NULL; +PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI = NULL; + +PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT = NULL; +PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT = NULL; +PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT = NULL; +PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT = NULL; + +PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT = NULL; +PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT = NULL; + +PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA = NULL; + +PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA = NULL; + +PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA = NULL; + +PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA = NULL; + +PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA = NULL; + +PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; +PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; + +#ifdef GLX_OML_sync_control +PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML = NULL; +PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML = NULL; +PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML = NULL; +PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML = NULL; +PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML = NULL; +#endif + +PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX = NULL; +PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX = NULL; +PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX = NULL; +PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX = NULL; +PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX = NULL; +PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX = NULL; + +PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX = NULL; +PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX = NULL; +PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX = NULL; +PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX = NULL; +PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX = NULL; +PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX = NULL; +PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX = NULL; +PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX = NULL; + +PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX = NULL; +PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX = NULL; +PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX = NULL; +PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX = NULL; +PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX = NULL; + +PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX = NULL; +PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX = NULL; + +PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX = NULL; + +PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX = NULL; +PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX = NULL; +PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX = NULL; +PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX = NULL; +PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX = NULL; + +PFNGLXCUSHIONSGIPROC __glewXCushionSGI = NULL; + +PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI = NULL; +PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI = NULL; + +PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI = NULL; + +PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI = NULL; +PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI = NULL; + +PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL; + +PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL; +PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL; + +#if !defined(GLEW_MX) + +GLboolean __GLXEW_VERSION_1_0 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_1 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_2 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_3 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_4 = GL_FALSE; +GLboolean __GLXEW_3DFX_multisample = GL_FALSE; +GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; +GLboolean __GLXEW_ARB_get_proc_address = GL_FALSE; +GLboolean __GLXEW_ARB_multisample = GL_FALSE; +GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; +GLboolean __GLXEW_ATI_render_texture = GL_FALSE; +GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; +GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __GLXEW_EXT_import_context = GL_FALSE; +GLboolean __GLXEW_EXT_scene_marker = GL_FALSE; +GLboolean __GLXEW_EXT_texture_from_pixmap = GL_FALSE; +GLboolean __GLXEW_EXT_visual_info = GL_FALSE; +GLboolean __GLXEW_EXT_visual_rating = GL_FALSE; +GLboolean __GLXEW_MESA_agp_offset = GL_FALSE; +GLboolean __GLXEW_MESA_copy_sub_buffer = GL_FALSE; +GLboolean __GLXEW_MESA_pixmap_colormap = GL_FALSE; +GLboolean __GLXEW_MESA_release_buffers = GL_FALSE; +GLboolean __GLXEW_MESA_set_3dfx_mode = GL_FALSE; +GLboolean __GLXEW_NV_float_buffer = GL_FALSE; +GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; +GLboolean __GLXEW_OML_swap_method = GL_FALSE; +#ifdef GLX_OML_sync_control +GLboolean __GLXEW_OML_sync_control = GL_FALSE; +#endif +GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; +GLboolean __GLXEW_SGIS_color_range = GL_FALSE; +GLboolean __GLXEW_SGIS_multisample = GL_FALSE; +GLboolean __GLXEW_SGIS_shared_multisample = GL_FALSE; +GLboolean __GLXEW_SGIX_fbconfig = GL_FALSE; +GLboolean __GLXEW_SGIX_hyperpipe = GL_FALSE; +GLboolean __GLXEW_SGIX_pbuffer = GL_FALSE; +GLboolean __GLXEW_SGIX_swap_barrier = GL_FALSE; +GLboolean __GLXEW_SGIX_swap_group = GL_FALSE; +GLboolean __GLXEW_SGIX_video_resize = GL_FALSE; +GLboolean __GLXEW_SGIX_visual_select_group = GL_FALSE; +GLboolean __GLXEW_SGI_cushion = GL_FALSE; +GLboolean __GLXEW_SGI_make_current_read = GL_FALSE; +GLboolean __GLXEW_SGI_swap_control = GL_FALSE; +GLboolean __GLXEW_SGI_video_sync = GL_FALSE; +GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE; +GLboolean __GLXEW_SUN_video_resize = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef GLX_VERSION_1_2 + +static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentDisplay")) == NULL) || r; + + return r; +} + +#endif /* GLX_VERSION_1_2 */ + +#ifdef GLX_VERSION_1_3 + +static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfig")) == NULL) || r; + r = ((glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXCreateNewContext")) == NULL) || r; + r = ((glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXCreatePbuffer")) == NULL) || r; + r = ((glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXCreatePixmap")) == NULL) || r; + r = ((glXCreateWindow = (PFNGLXCREATEWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXCreateWindow")) == NULL) || r; + r = ((glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPbuffer")) == NULL) || r; + r = ((glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPixmap")) == NULL) || r; + r = ((glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXDestroyWindow")) == NULL) || r; + r = ((glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawable")) == NULL) || r; + r = ((glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttrib")) == NULL) || r; + r = ((glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigs")) == NULL) || r; + r = ((glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEvent")) == NULL) || r; + r = ((glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfig")) == NULL) || r; + r = ((glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)glewGetProcAddress((const GLubyte*)"glXMakeContextCurrent")) == NULL) || r; + r = ((glXQueryContext = (PFNGLXQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContext")) == NULL) || r; + r = ((glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXQueryDrawable")) == NULL) || r; + r = ((glXSelectEvent = (PFNGLXSELECTEVENTPROC)glewGetProcAddress((const GLubyte*)"glXSelectEvent")) == NULL) || r; + + return r; +} + +#endif /* GLX_VERSION_1_3 */ + +#ifdef GLX_VERSION_1_4 + +#endif /* GLX_VERSION_1_4 */ + +#ifdef GLX_3DFX_multisample + +#endif /* GLX_3DFX_multisample */ + +#ifdef GLX_ARB_fbconfig_float + +#endif /* GLX_ARB_fbconfig_float */ + +#ifdef GLX_ARB_get_proc_address + +#endif /* GLX_ARB_get_proc_address */ + +#ifdef GLX_ARB_multisample + +#endif /* GLX_ARB_multisample */ + +#ifdef GLX_ATI_pixel_format_float + +#endif /* GLX_ATI_pixel_format_float */ + +#ifdef GLX_ATI_render_texture + +static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindTexImageATI = (PFNGLXBINDTEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageATI")) == NULL) || r; + r = ((glXDrawableAttribATI = (PFNGLXDRAWABLEATTRIBATIPROC)glewGetProcAddress((const GLubyte*)"glXDrawableAttribATI")) == NULL) || r; + r = ((glXReleaseTexImageATI = (PFNGLXRELEASETEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageATI")) == NULL) || r; + + return r; +} + +#endif /* GLX_ATI_render_texture */ + +#ifdef GLX_EXT_fbconfig_packed_float + +#endif /* GLX_EXT_fbconfig_packed_float */ + +#ifdef GLX_EXT_framebuffer_sRGB + +#endif /* GLX_EXT_framebuffer_sRGB */ + +#ifdef GLX_EXT_import_context + +static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXFreeContextEXT")) == NULL) || r; + r = ((glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)glewGetProcAddress((const GLubyte*)"glXGetContextIDEXT")) == NULL) || r; + r = ((glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXImportContextEXT")) == NULL) || r; + r = ((glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContextInfoEXT")) == NULL) || r; + + return r; +} + +#endif /* GLX_EXT_import_context */ + +#ifdef GLX_EXT_scene_marker + +#endif /* GLX_EXT_scene_marker */ + +#ifdef GLX_EXT_texture_from_pixmap + +static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageEXT")) == NULL) || r; + r = ((glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageEXT")) == NULL) || r; + + return r; +} + +#endif /* GLX_EXT_texture_from_pixmap */ + +#ifdef GLX_EXT_visual_info + +#endif /* GLX_EXT_visual_info */ + +#ifdef GLX_EXT_visual_rating + +#endif /* GLX_EXT_visual_rating */ + +#ifdef GLX_MESA_agp_offset + +static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetAGPOffsetMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_agp_offset */ + +#ifdef GLX_MESA_copy_sub_buffer + +static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)glewGetProcAddress((const GLubyte*)"glXCopySubBufferMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_copy_sub_buffer */ + +#ifdef GLX_MESA_pixmap_colormap + +static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_pixmap_colormap */ + +#ifdef GLX_MESA_release_buffers + +static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glXReleaseBuffersMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_release_buffers */ + +#ifdef GLX_MESA_set_3dfx_mode + +static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)glewGetProcAddress((const GLubyte*)"glXSet3DfxModeMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_set_3dfx_mode */ + +#ifdef GLX_NV_float_buffer + +#endif /* GLX_NV_float_buffer */ + +#ifdef GLX_NV_vertex_array_range + +static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXAllocateMemoryNV = (PFNGLXALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXAllocateMemoryNV")) == NULL) || r; + r = ((glXFreeMemoryNV = (PFNGLXFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXFreeMemoryNV")) == NULL) || r; + + return r; +} + +#endif /* GLX_NV_vertex_array_range */ + +#ifdef GLX_OML_swap_method + +#endif /* GLX_OML_swap_method */ + +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + +static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetMscRateOML")) == NULL) || r; + r = ((glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetSyncValuesOML")) == NULL) || r; + r = ((glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML")) == NULL) || r; + r = ((glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForMscOML")) == NULL) || r; + r = ((glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForSbcOML")) == NULL) || r; + + return r; +} + +#endif /* GLX_OML_sync_control */ + +#ifdef GLX_SGIS_blended_overlay + +#endif /* GLX_SGIS_blended_overlay */ + +#ifdef GLX_SGIS_color_range + +#endif /* GLX_SGIS_color_range */ + +#ifdef GLX_SGIS_multisample + +#endif /* GLX_SGIS_multisample */ + +#ifdef GLX_SGIS_shared_multisample + +#endif /* GLX_SGIS_shared_multisample */ + +#ifdef GLX_SGIX_fbconfig + +static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfigSGIX")) == NULL) || r; + r = ((glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextWithConfigSGIX")) == NULL) || r; + r = ((glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapWithConfigSGIX")) == NULL) || r; + r = ((glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttribSGIX")) == NULL) || r; + r = ((glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigFromVisualSGIX")) == NULL) || r; + r = ((glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfigSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_fbconfig */ + +#ifdef GLX_SGIX_hyperpipe + +static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindHyperpipeSGIX")) == NULL) || r; + r = ((glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeAttribSGIX")) == NULL) || r; + r = ((glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeAttribSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeBestAttribSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeNetworkSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_hyperpipe */ + +#ifdef GLX_SGIX_pbuffer + +static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPbufferSGIX")) == NULL) || r; + r = ((glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyGLXPbufferSGIX")) == NULL) || r; + r = ((glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEventSGIX")) == NULL) || r; + r = ((glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryGLXPbufferSGIX")) == NULL) || r; + r = ((glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXSelectEventSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_pbuffer */ + +#ifdef GLX_SGIX_swap_barrier + +static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierSGIX")) == NULL) || r; + r = ((glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapBarriersSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_swap_barrier */ + +#ifdef GLX_SGIX_swap_group + +static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_swap_group */ + +#ifdef GLX_SGIX_video_resize + +static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindChannelToWindowSGIX")) == NULL) || r; + r = ((glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSGIX")) == NULL) || r; + r = ((glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSyncSGIX")) == NULL) || r; + r = ((glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelDeltasSGIX")) == NULL) || r; + r = ((glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelRectSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_video_resize */ + +#ifdef GLX_SGIX_visual_select_group + +#endif /* GLX_SGIX_visual_select_group */ + +#ifdef GLX_SGI_cushion + +static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCushionSGI = (PFNGLXCUSHIONSGIPROC)glewGetProcAddress((const GLubyte*)"glXCushionSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_cushion */ + +#ifdef GLX_SGI_make_current_read + +static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawableSGI")) == NULL) || r; + r = ((glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)glewGetProcAddress((const GLubyte*)"glXMakeCurrentReadSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_make_current_read */ + +#ifdef GLX_SGI_swap_control + +static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_swap_control */ + +#ifdef GLX_SGI_video_sync + +static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI")) == NULL) || r; + r = ((glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_video_sync */ + +#ifdef GLX_SUN_get_transparent_index + +static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)glewGetProcAddress((const GLubyte*)"glXGetTransparentIndexSUN")) == NULL) || r; + + return r; +} + +#endif /* GLX_SUN_get_transparent_index */ + +#ifdef GLX_SUN_video_resize + +static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetVideoResizeSUN = (PFNGLXGETVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoResizeSUN")) == NULL) || r; + r = ((glXVideoResizeSUN = (PFNGLXVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXVideoResizeSUN")) == NULL) || r; + + return r; +} + +#endif /* GLX_SUN_video_resize */ + +/* ------------------------------------------------------------------------ */ + +GLboolean glxewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); +/* if (glXQueryExtensionsString == NULL || glXGetCurrentDisplay == NULL) return GL_FALSE; */ +/* p = (GLubyte*)glXQueryExtensionsString(glXGetCurrentDisplay(), DefaultScreen(glXGetCurrentDisplay())); */ + if (glXGetClientString == NULL || glXGetCurrentDisplay == NULL) return GL_FALSE; + p = (GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) +{ + int major, minor; + /* initialize core GLX 1.2 */ + if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; + /* initialize flags */ + CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; + /* query GLX version */ + glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); + if (major == 1 && minor <= 3) + { + switch (minor) + { + case 3: + CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; + break; + case 2: + CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; + break; + default: + return GLEW_ERROR_GLX_VERSION_11_ONLY; + break; + } + } + /* initialize extensions */ +#ifdef GLX_VERSION_1_3 + if (glewExperimental || GLXEW_VERSION_1_3) CONST_CAST(GLXEW_VERSION_1_3) = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_VERSION_1_3 */ +#ifdef GLX_3DFX_multisample + CONST_CAST(GLXEW_3DFX_multisample) = glxewGetExtension("GLX_3DFX_multisample"); +#endif /* GLX_3DFX_multisample */ +#ifdef GLX_ARB_fbconfig_float + CONST_CAST(GLXEW_ARB_fbconfig_float) = glxewGetExtension("GLX_ARB_fbconfig_float"); +#endif /* GLX_ARB_fbconfig_float */ +#ifdef GLX_ARB_get_proc_address + CONST_CAST(GLXEW_ARB_get_proc_address) = glxewGetExtension("GLX_ARB_get_proc_address"); +#endif /* GLX_ARB_get_proc_address */ +#ifdef GLX_ARB_multisample + CONST_CAST(GLXEW_ARB_multisample) = glxewGetExtension("GLX_ARB_multisample"); +#endif /* GLX_ARB_multisample */ +#ifdef GLX_ATI_pixel_format_float + CONST_CAST(GLXEW_ATI_pixel_format_float) = glxewGetExtension("GLX_ATI_pixel_format_float"); +#endif /* GLX_ATI_pixel_format_float */ +#ifdef GLX_ATI_render_texture + CONST_CAST(GLXEW_ATI_render_texture) = glxewGetExtension("GLX_ATI_render_texture"); + if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_fbconfig_packed_float + CONST_CAST(GLXEW_EXT_fbconfig_packed_float) = glxewGetExtension("GLX_EXT_fbconfig_packed_float"); +#endif /* GLX_EXT_fbconfig_packed_float */ +#ifdef GLX_EXT_framebuffer_sRGB + CONST_CAST(GLXEW_EXT_framebuffer_sRGB) = glxewGetExtension("GLX_EXT_framebuffer_sRGB"); +#endif /* GLX_EXT_framebuffer_sRGB */ +#ifdef GLX_EXT_import_context + CONST_CAST(GLXEW_EXT_import_context) = glxewGetExtension("GLX_EXT_import_context"); + if (glewExperimental || GLXEW_EXT_import_context) CONST_CAST(GLXEW_EXT_import_context) = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_EXT_import_context */ +#ifdef GLX_EXT_scene_marker + CONST_CAST(GLXEW_EXT_scene_marker) = glxewGetExtension("GLX_EXT_scene_marker"); +#endif /* GLX_EXT_scene_marker */ +#ifdef GLX_EXT_texture_from_pixmap + CONST_CAST(GLXEW_EXT_texture_from_pixmap) = glxewGetExtension("GLX_EXT_texture_from_pixmap"); + if (glewExperimental || GLXEW_EXT_texture_from_pixmap) CONST_CAST(GLXEW_EXT_texture_from_pixmap) = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_EXT_texture_from_pixmap */ +#ifdef GLX_EXT_visual_info + CONST_CAST(GLXEW_EXT_visual_info) = glxewGetExtension("GLX_EXT_visual_info"); +#endif /* GLX_EXT_visual_info */ +#ifdef GLX_EXT_visual_rating + CONST_CAST(GLXEW_EXT_visual_rating) = glxewGetExtension("GLX_EXT_visual_rating"); +#endif /* GLX_EXT_visual_rating */ +#ifdef GLX_MESA_agp_offset + CONST_CAST(GLXEW_MESA_agp_offset) = glxewGetExtension("GLX_MESA_agp_offset"); + if (glewExperimental || GLXEW_MESA_agp_offset) CONST_CAST(GLXEW_MESA_agp_offset) = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_agp_offset */ +#ifdef GLX_MESA_copy_sub_buffer + CONST_CAST(GLXEW_MESA_copy_sub_buffer) = glxewGetExtension("GLX_MESA_copy_sub_buffer"); + if (glewExperimental || GLXEW_MESA_copy_sub_buffer) CONST_CAST(GLXEW_MESA_copy_sub_buffer) = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_copy_sub_buffer */ +#ifdef GLX_MESA_pixmap_colormap + CONST_CAST(GLXEW_MESA_pixmap_colormap) = glxewGetExtension("GLX_MESA_pixmap_colormap"); + if (glewExperimental || GLXEW_MESA_pixmap_colormap) CONST_CAST(GLXEW_MESA_pixmap_colormap) = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_pixmap_colormap */ +#ifdef GLX_MESA_release_buffers + CONST_CAST(GLXEW_MESA_release_buffers) = glxewGetExtension("GLX_MESA_release_buffers"); + if (glewExperimental || GLXEW_MESA_release_buffers) CONST_CAST(GLXEW_MESA_release_buffers) = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_release_buffers */ +#ifdef GLX_MESA_set_3dfx_mode + CONST_CAST(GLXEW_MESA_set_3dfx_mode) = glxewGetExtension("GLX_MESA_set_3dfx_mode"); + if (glewExperimental || GLXEW_MESA_set_3dfx_mode) CONST_CAST(GLXEW_MESA_set_3dfx_mode) = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_set_3dfx_mode */ +#ifdef GLX_NV_float_buffer + CONST_CAST(GLXEW_NV_float_buffer) = glxewGetExtension("GLX_NV_float_buffer"); +#endif /* GLX_NV_float_buffer */ +#ifdef GLX_NV_vertex_array_range + CONST_CAST(GLXEW_NV_vertex_array_range) = glxewGetExtension("GLX_NV_vertex_array_range"); + if (glewExperimental || GLXEW_NV_vertex_array_range) CONST_CAST(GLXEW_NV_vertex_array_range) = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_vertex_array_range */ +#ifdef GLX_OML_swap_method + CONST_CAST(GLXEW_OML_swap_method) = glxewGetExtension("GLX_OML_swap_method"); +#endif /* GLX_OML_swap_method */ +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + CONST_CAST(GLXEW_OML_sync_control) = glxewGetExtension("GLX_OML_sync_control"); + if (glewExperimental || GLXEW_OML_sync_control) CONST_CAST(GLXEW_OML_sync_control) = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_OML_sync_control */ +#ifdef GLX_SGIS_blended_overlay + CONST_CAST(GLXEW_SGIS_blended_overlay) = glxewGetExtension("GLX_SGIS_blended_overlay"); +#endif /* GLX_SGIS_blended_overlay */ +#ifdef GLX_SGIS_color_range + CONST_CAST(GLXEW_SGIS_color_range) = glxewGetExtension("GLX_SGIS_color_range"); +#endif /* GLX_SGIS_color_range */ +#ifdef GLX_SGIS_multisample + CONST_CAST(GLXEW_SGIS_multisample) = glxewGetExtension("GLX_SGIS_multisample"); +#endif /* GLX_SGIS_multisample */ +#ifdef GLX_SGIS_shared_multisample + CONST_CAST(GLXEW_SGIS_shared_multisample) = glxewGetExtension("GLX_SGIS_shared_multisample"); +#endif /* GLX_SGIS_shared_multisample */ +#ifdef GLX_SGIX_fbconfig + CONST_CAST(GLXEW_SGIX_fbconfig) = glxewGetExtension("GLX_SGIX_fbconfig"); + if (glewExperimental || GLXEW_SGIX_fbconfig) CONST_CAST(GLXEW_SGIX_fbconfig) = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_fbconfig */ +#ifdef GLX_SGIX_hyperpipe + CONST_CAST(GLXEW_SGIX_hyperpipe) = glxewGetExtension("GLX_SGIX_hyperpipe"); + if (glewExperimental || GLXEW_SGIX_hyperpipe) CONST_CAST(GLXEW_SGIX_hyperpipe) = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_hyperpipe */ +#ifdef GLX_SGIX_pbuffer + CONST_CAST(GLXEW_SGIX_pbuffer) = glxewGetExtension("GLX_SGIX_pbuffer"); + if (glewExperimental || GLXEW_SGIX_pbuffer) CONST_CAST(GLXEW_SGIX_pbuffer) = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_pbuffer */ +#ifdef GLX_SGIX_swap_barrier + CONST_CAST(GLXEW_SGIX_swap_barrier) = glxewGetExtension("GLX_SGIX_swap_barrier"); + if (glewExperimental || GLXEW_SGIX_swap_barrier) CONST_CAST(GLXEW_SGIX_swap_barrier) = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_swap_barrier */ +#ifdef GLX_SGIX_swap_group + CONST_CAST(GLXEW_SGIX_swap_group) = glxewGetExtension("GLX_SGIX_swap_group"); + if (glewExperimental || GLXEW_SGIX_swap_group) CONST_CAST(GLXEW_SGIX_swap_group) = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_swap_group */ +#ifdef GLX_SGIX_video_resize + CONST_CAST(GLXEW_SGIX_video_resize) = glxewGetExtension("GLX_SGIX_video_resize"); + if (glewExperimental || GLXEW_SGIX_video_resize) CONST_CAST(GLXEW_SGIX_video_resize) = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_video_resize */ +#ifdef GLX_SGIX_visual_select_group + CONST_CAST(GLXEW_SGIX_visual_select_group) = glxewGetExtension("GLX_SGIX_visual_select_group"); +#endif /* GLX_SGIX_visual_select_group */ +#ifdef GLX_SGI_cushion + CONST_CAST(GLXEW_SGI_cushion) = glxewGetExtension("GLX_SGI_cushion"); + if (glewExperimental || GLXEW_SGI_cushion) CONST_CAST(GLXEW_SGI_cushion) = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_cushion */ +#ifdef GLX_SGI_make_current_read + CONST_CAST(GLXEW_SGI_make_current_read) = glxewGetExtension("GLX_SGI_make_current_read"); + if (glewExperimental || GLXEW_SGI_make_current_read) CONST_CAST(GLXEW_SGI_make_current_read) = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_make_current_read */ +#ifdef GLX_SGI_swap_control + CONST_CAST(GLXEW_SGI_swap_control) = glxewGetExtension("GLX_SGI_swap_control"); + if (glewExperimental || GLXEW_SGI_swap_control) CONST_CAST(GLXEW_SGI_swap_control) = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_swap_control */ +#ifdef GLX_SGI_video_sync + CONST_CAST(GLXEW_SGI_video_sync) = glxewGetExtension("GLX_SGI_video_sync"); + if (glewExperimental || GLXEW_SGI_video_sync) CONST_CAST(GLXEW_SGI_video_sync) = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_video_sync */ +#ifdef GLX_SUN_get_transparent_index + CONST_CAST(GLXEW_SUN_get_transparent_index) = glxewGetExtension("GLX_SUN_get_transparent_index"); + if (glewExperimental || GLXEW_SUN_get_transparent_index) CONST_CAST(GLXEW_SUN_get_transparent_index) = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SUN_get_transparent_index */ +#ifdef GLX_SUN_video_resize + CONST_CAST(GLXEW_SUN_video_resize) = glxewGetExtension("GLX_SUN_video_resize"); + if (glewExperimental || GLXEW_SUN_video_resize) CONST_CAST(GLXEW_SUN_video_resize) = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SUN_video_resize */ + + return GLEW_OK; +} + +#endif /* !__APPLE__ || GLEW_APPLE_GLX */ + +/* ------------------------------------------------------------------------ */ + +const GLubyte* glewGetErrorString (GLenum error) +{ + static const GLubyte* _glewErrorString[] = + { + (const GLubyte*)"No error", + (const GLubyte*)"Missing GL version", + (const GLubyte*)"GL 1.1 and up are not supported", + (const GLubyte*)"GLX 1.2 and up are not supported", + (const GLubyte*)"Unknown error" + }; + const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; + return _glewErrorString[(int)error > max_error ? max_error : (int)error]; +} + +const GLubyte* glewGetString (GLenum name) +{ + static const GLubyte* _glewString[] = + { + (const GLubyte*)NULL, + (const GLubyte*)"1.5.0", + (const GLubyte*)"1", + (const GLubyte*)"5", + (const GLubyte*)"0" + }; + const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; + return _glewString[(int)name > max_string ? 0 : (int)name]; +} + +/* ------------------------------------------------------------------------ */ + +GLboolean glewExperimental = GL_FALSE; + +#if !defined(GLEW_MX) + +#if defined(_WIN32) +extern GLenum wglewContextInit (void); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ +extern GLenum glxewContextInit (void); +#endif /* _WIN32 */ + +GLenum glewInit () +{ + GLenum r; + if ( (r = glewContextInit()) ) return r; +#if defined(_WIN32) + return wglewContextInit(); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ + return glxewContextInit(); +#else + return r; +#endif /* _WIN32 */ +} + +#endif /* !GLEW_MX */ +#ifdef GLEW_MX +GLboolean glewContextIsSupported (GLEWContext* ctx, const char* name) +#else +GLboolean glewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) + { +#ifdef GL_VERSION_1_2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) + { + ret = GLEW_VERSION_1_2; + continue; + } +#endif +#ifdef GL_VERSION_1_3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) + { + ret = GLEW_VERSION_1_3; + continue; + } +#endif +#ifdef GL_VERSION_1_4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) + { + ret = GLEW_VERSION_1_4; + continue; + } +#endif +#ifdef GL_VERSION_1_5 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3)) + { + ret = GLEW_VERSION_1_5; + continue; + } +#endif +#ifdef GL_VERSION_2_0 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_0", 3)) + { + ret = GLEW_VERSION_2_0; + continue; + } +#endif +#ifdef GL_VERSION_2_1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_1", 3)) + { + ret = GLEW_VERSION_2_1; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef GL_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_3DFX_multisample; + continue; + } +#endif +#ifdef GL_3DFX_tbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"tbuffer", 7)) + { + ret = GLEW_3DFX_tbuffer; + continue; + } +#endif +#ifdef GL_3DFX_texture_compression_FXT1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_FXT1", 24)) + { + ret = GLEW_3DFX_texture_compression_FXT1; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) + { +#ifdef GL_APPLE_client_storage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_storage", 14)) + { + ret = GLEW_APPLE_client_storage; + continue; + } +#endif +#ifdef GL_APPLE_element_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) + { + ret = GLEW_APPLE_element_array; + continue; + } +#endif +#ifdef GL_APPLE_fence + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) + { + ret = GLEW_APPLE_fence; + continue; + } +#endif +#ifdef GL_APPLE_float_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_pixels", 12)) + { + ret = GLEW_APPLE_float_pixels; + continue; + } +#endif +#ifdef GL_APPLE_flush_buffer_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_buffer_range", 18)) + { + ret = GLEW_APPLE_flush_buffer_range; + continue; + } +#endif +#ifdef GL_APPLE_pixel_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer", 12)) + { + ret = GLEW_APPLE_pixel_buffer; + continue; + } +#endif +#ifdef GL_APPLE_specular_vector + if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_vector", 15)) + { + ret = GLEW_APPLE_specular_vector; + continue; + } +#endif +#ifdef GL_APPLE_texture_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) + { + ret = GLEW_APPLE_texture_range; + continue; + } +#endif +#ifdef GL_APPLE_transform_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_hint", 14)) + { + ret = GLEW_APPLE_transform_hint; + continue; + } +#endif +#ifdef GL_APPLE_vertex_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) + { + ret = GLEW_APPLE_vertex_array_object; + continue; + } +#endif +#ifdef GL_APPLE_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLEW_APPLE_vertex_array_range; + continue; + } +#endif +#ifdef GL_APPLE_ycbcr_422 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_422", 9)) + { + ret = GLEW_APPLE_ycbcr_422; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef GL_ARB_color_buffer_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) + { + ret = GLEW_ARB_color_buffer_float; + continue; + } +#endif +#ifdef GL_ARB_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) + { + ret = GLEW_ARB_depth_texture; + continue; + } +#endif +#ifdef GL_ARB_draw_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) + { + ret = GLEW_ARB_draw_buffers; + continue; + } +#endif +#ifdef GL_ARB_fragment_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) + { + ret = GLEW_ARB_fragment_program; + continue; + } +#endif +#ifdef GL_ARB_fragment_program_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_shadow", 23)) + { + ret = GLEW_ARB_fragment_program_shadow; + continue; + } +#endif +#ifdef GL_ARB_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) + { + ret = GLEW_ARB_fragment_shader; + continue; + } +#endif +#ifdef GL_ARB_half_float_pixel + if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_pixel", 16)) + { + ret = GLEW_ARB_half_float_pixel; + continue; + } +#endif +#ifdef GL_ARB_imaging + if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) + { + ret = GLEW_ARB_imaging; + continue; + } +#endif +#ifdef GL_ARB_matrix_palette + if (_glewStrSame3(&pos, &len, (const GLubyte*)"matrix_palette", 14)) + { + ret = GLEW_ARB_matrix_palette; + continue; + } +#endif +#ifdef GL_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_ARB_multisample; + continue; + } +#endif +#ifdef GL_ARB_multitexture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multitexture", 12)) + { + ret = GLEW_ARB_multitexture; + continue; + } +#endif +#ifdef GL_ARB_occlusion_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) + { + ret = GLEW_ARB_occlusion_query; + continue; + } +#endif +#ifdef GL_ARB_pixel_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) + { + ret = GLEW_ARB_pixel_buffer_object; + continue; + } +#endif +#ifdef GL_ARB_point_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) + { + ret = GLEW_ARB_point_parameters; + continue; + } +#endif +#ifdef GL_ARB_point_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) + { + ret = GLEW_ARB_point_sprite; + continue; + } +#endif +#ifdef GL_ARB_shader_objects + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_objects", 14)) + { + ret = GLEW_ARB_shader_objects; + continue; + } +#endif +#ifdef GL_ARB_shading_language_100 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_100", 20)) + { + ret = GLEW_ARB_shading_language_100; + continue; + } +#endif +#ifdef GL_ARB_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) + { + ret = GLEW_ARB_shadow; + continue; + } +#endif +#ifdef GL_ARB_shadow_ambient + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) + { + ret = GLEW_ARB_shadow_ambient; + continue; + } +#endif +#ifdef GL_ARB_texture_border_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) + { + ret = GLEW_ARB_texture_border_clamp; + continue; + } +#endif +#ifdef GL_ARB_texture_compression + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression", 19)) + { + ret = GLEW_ARB_texture_compression; + continue; + } +#endif +#ifdef GL_ARB_texture_cube_map + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) + { + ret = GLEW_ARB_texture_cube_map; + continue; + } +#endif +#ifdef GL_ARB_texture_env_add + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) + { + ret = GLEW_ARB_texture_env_add; + continue; + } +#endif +#ifdef GL_ARB_texture_env_combine + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) + { + ret = GLEW_ARB_texture_env_combine; + continue; + } +#endif +#ifdef GL_ARB_texture_env_crossbar + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_crossbar", 20)) + { + ret = GLEW_ARB_texture_env_crossbar; + continue; + } +#endif +#ifdef GL_ARB_texture_env_dot3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) + { + ret = GLEW_ARB_texture_env_dot3; + continue; + } +#endif +#ifdef GL_ARB_texture_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) + { + ret = GLEW_ARB_texture_float; + continue; + } +#endif +#ifdef GL_ARB_texture_mirrored_repeat + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) + { + ret = GLEW_ARB_texture_mirrored_repeat; + continue; + } +#endif +#ifdef GL_ARB_texture_non_power_of_two + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_non_power_of_two", 24)) + { + ret = GLEW_ARB_texture_non_power_of_two; + continue; + } +#endif +#ifdef GL_ARB_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_ARB_texture_rectangle; + continue; + } +#endif +#ifdef GL_ARB_transpose_matrix + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transpose_matrix", 16)) + { + ret = GLEW_ARB_transpose_matrix; + continue; + } +#endif +#ifdef GL_ARB_vertex_blend + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_blend", 12)) + { + ret = GLEW_ARB_vertex_blend; + continue; + } +#endif +#ifdef GL_ARB_vertex_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) + { + ret = GLEW_ARB_vertex_buffer_object; + continue; + } +#endif +#ifdef GL_ARB_vertex_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) + { + ret = GLEW_ARB_vertex_program; + continue; + } +#endif +#ifdef GL_ARB_vertex_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) + { + ret = GLEW_ARB_vertex_shader; + continue; + } +#endif +#ifdef GL_ARB_window_pos + if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) + { + ret = GLEW_ARB_window_pos; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATIX_", 5)) + { +#ifdef GL_ATIX_point_sprites + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprites", 13)) + { + ret = GLEW_ATIX_point_sprites; + continue; + } +#endif +#ifdef GL_ATIX_texture_env_combine3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) + { + ret = GLEW_ATIX_texture_env_combine3; + continue; + } +#endif +#ifdef GL_ATIX_texture_env_route + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_route", 17)) + { + ret = GLEW_ATIX_texture_env_route; + continue; + } +#endif +#ifdef GL_ATIX_vertex_shader_output_point_size + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_output_point_size", 31)) + { + ret = GLEW_ATIX_vertex_shader_output_point_size; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef GL_ATI_draw_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) + { + ret = GLEW_ATI_draw_buffers; + continue; + } +#endif +#ifdef GL_ATI_element_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) + { + ret = GLEW_ATI_element_array; + continue; + } +#endif +#ifdef GL_ATI_envmap_bumpmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"envmap_bumpmap", 14)) + { + ret = GLEW_ATI_envmap_bumpmap; + continue; + } +#endif +#ifdef GL_ATI_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) + { + ret = GLEW_ATI_fragment_shader; + continue; + } +#endif +#ifdef GL_ATI_map_object_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_object_buffer", 17)) + { + ret = GLEW_ATI_map_object_buffer; + continue; + } +#endif +#ifdef GL_ATI_pn_triangles + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pn_triangles", 12)) + { + ret = GLEW_ATI_pn_triangles; + continue; + } +#endif +#ifdef GL_ATI_separate_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_stencil", 16)) + { + ret = GLEW_ATI_separate_stencil; + continue; + } +#endif +#ifdef GL_ATI_shader_texture_lod + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) + { + ret = GLEW_ATI_shader_texture_lod; + continue; + } +#endif +#ifdef GL_ATI_text_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"text_fragment_shader", 20)) + { + ret = GLEW_ATI_text_fragment_shader; + continue; + } +#endif +#ifdef GL_ATI_texture_compression_3dc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_3dc", 23)) + { + ret = GLEW_ATI_texture_compression_3dc; + continue; + } +#endif +#ifdef GL_ATI_texture_env_combine3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) + { + ret = GLEW_ATI_texture_env_combine3; + continue; + } +#endif +#ifdef GL_ATI_texture_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) + { + ret = GLEW_ATI_texture_float; + continue; + } +#endif +#ifdef GL_ATI_texture_mirror_once + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_once", 19)) + { + ret = GLEW_ATI_texture_mirror_once; + continue; + } +#endif +#ifdef GL_ATI_vertex_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) + { + ret = GLEW_ATI_vertex_array_object; + continue; + } +#endif +#ifdef GL_ATI_vertex_attrib_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_array_object", 26)) + { + ret = GLEW_ATI_vertex_attrib_array_object; + continue; + } +#endif +#ifdef GL_ATI_vertex_streams + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_streams", 14)) + { + ret = GLEW_ATI_vertex_streams; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef GL_EXT_422_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"422_pixels", 10)) + { + ret = GLEW_EXT_422_pixels; + continue; + } +#endif +#ifdef GL_EXT_Cg_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"Cg_shader", 9)) + { + ret = GLEW_EXT_Cg_shader; + continue; + } +#endif +#ifdef GL_EXT_abgr + if (_glewStrSame3(&pos, &len, (const GLubyte*)"abgr", 4)) + { + ret = GLEW_EXT_abgr; + continue; + } +#endif +#ifdef GL_EXT_bgra + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bgra", 4)) + { + ret = GLEW_EXT_bgra; + continue; + } +#endif +#ifdef GL_EXT_bindable_uniform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindable_uniform", 16)) + { + ret = GLEW_EXT_bindable_uniform; + continue; + } +#endif +#ifdef GL_EXT_blend_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_color", 11)) + { + ret = GLEW_EXT_blend_color; + continue; + } +#endif +#ifdef GL_EXT_blend_equation_separate + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_separate", 23)) + { + ret = GLEW_EXT_blend_equation_separate; + continue; + } +#endif +#ifdef GL_EXT_blend_func_separate + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_separate", 19)) + { + ret = GLEW_EXT_blend_func_separate; + continue; + } +#endif +#ifdef GL_EXT_blend_logic_op + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_logic_op", 14)) + { + ret = GLEW_EXT_blend_logic_op; + continue; + } +#endif +#ifdef GL_EXT_blend_minmax + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax", 12)) + { + ret = GLEW_EXT_blend_minmax; + continue; + } +#endif +#ifdef GL_EXT_blend_subtract + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_subtract", 14)) + { + ret = GLEW_EXT_blend_subtract; + continue; + } +#endif +#ifdef GL_EXT_clip_volume_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_volume_hint", 16)) + { + ret = GLEW_EXT_clip_volume_hint; + continue; + } +#endif +#ifdef GL_EXT_cmyka + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cmyka", 5)) + { + ret = GLEW_EXT_cmyka; + continue; + } +#endif +#ifdef GL_EXT_color_subtable + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_subtable", 14)) + { + ret = GLEW_EXT_color_subtable; + continue; + } +#endif +#ifdef GL_EXT_compiled_vertex_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compiled_vertex_array", 21)) + { + ret = GLEW_EXT_compiled_vertex_array; + continue; + } +#endif +#ifdef GL_EXT_convolution + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution", 11)) + { + ret = GLEW_EXT_convolution; + continue; + } +#endif +#ifdef GL_EXT_coordinate_frame + if (_glewStrSame3(&pos, &len, (const GLubyte*)"coordinate_frame", 16)) + { + ret = GLEW_EXT_coordinate_frame; + continue; + } +#endif +#ifdef GL_EXT_copy_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_texture", 12)) + { + ret = GLEW_EXT_copy_texture; + continue; + } +#endif +#ifdef GL_EXT_cull_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) + { + ret = GLEW_EXT_cull_vertex; + continue; + } +#endif +#ifdef GL_EXT_depth_bounds_test + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_bounds_test", 17)) + { + ret = GLEW_EXT_depth_bounds_test; + continue; + } +#endif +#ifdef GL_EXT_draw_buffers2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers2", 13)) + { + ret = GLEW_EXT_draw_buffers2; + continue; + } +#endif +#ifdef GL_EXT_draw_instanced + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) + { + ret = GLEW_EXT_draw_instanced; + continue; + } +#endif +#ifdef GL_EXT_draw_range_elements + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_range_elements", 19)) + { + ret = GLEW_EXT_draw_range_elements; + continue; + } +#endif +#ifdef GL_EXT_fog_coord + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_coord", 9)) + { + ret = GLEW_EXT_fog_coord; + continue; + } +#endif +#ifdef GL_EXT_fragment_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_lighting", 17)) + { + ret = GLEW_EXT_fragment_lighting; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_blit + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) + { + ret = GLEW_EXT_framebuffer_blit; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) + { + ret = GLEW_EXT_framebuffer_multisample; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) + { + ret = GLEW_EXT_framebuffer_object; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef GL_EXT_geometry_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) + { + ret = GLEW_EXT_geometry_shader4; + continue; + } +#endif +#ifdef GL_EXT_gpu_program_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_parameters", 22)) + { + ret = GLEW_EXT_gpu_program_parameters; + continue; + } +#endif +#ifdef GL_EXT_gpu_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader4", 11)) + { + ret = GLEW_EXT_gpu_shader4; + continue; + } +#endif +#ifdef GL_EXT_histogram + if (_glewStrSame3(&pos, &len, (const GLubyte*)"histogram", 9)) + { + ret = GLEW_EXT_histogram; + continue; + } +#endif +#ifdef GL_EXT_index_array_formats + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_array_formats", 19)) + { + ret = GLEW_EXT_index_array_formats; + continue; + } +#endif +#ifdef GL_EXT_index_func + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_func", 10)) + { + ret = GLEW_EXT_index_func; + continue; + } +#endif +#ifdef GL_EXT_index_material + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_material", 14)) + { + ret = GLEW_EXT_index_material; + continue; + } +#endif +#ifdef GL_EXT_index_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_texture", 13)) + { + ret = GLEW_EXT_index_texture; + continue; + } +#endif +#ifdef GL_EXT_light_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_texture", 13)) + { + ret = GLEW_EXT_light_texture; + continue; + } +#endif +#ifdef GL_EXT_misc_attribute + if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_attribute", 14)) + { + ret = GLEW_EXT_misc_attribute; + continue; + } +#endif +#ifdef GL_EXT_multi_draw_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_arrays", 17)) + { + ret = GLEW_EXT_multi_draw_arrays; + continue; + } +#endif +#ifdef GL_EXT_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_EXT_multisample; + continue; + } +#endif +#ifdef GL_EXT_packed_depth_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) + { + ret = GLEW_EXT_packed_depth_stencil; + continue; + } +#endif +#ifdef GL_EXT_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_float", 12)) + { + ret = GLEW_EXT_packed_float; + continue; + } +#endif +#ifdef GL_EXT_packed_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_pixels", 13)) + { + ret = GLEW_EXT_packed_pixels; + continue; + } +#endif +#ifdef GL_EXT_paletted_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"paletted_texture", 16)) + { + ret = GLEW_EXT_paletted_texture; + continue; + } +#endif +#ifdef GL_EXT_pixel_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) + { + ret = GLEW_EXT_pixel_buffer_object; + continue; + } +#endif +#ifdef GL_EXT_pixel_transform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform", 15)) + { + ret = GLEW_EXT_pixel_transform; + continue; + } +#endif +#ifdef GL_EXT_pixel_transform_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform_color_table", 27)) + { + ret = GLEW_EXT_pixel_transform_color_table; + continue; + } +#endif +#ifdef GL_EXT_point_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) + { + ret = GLEW_EXT_point_parameters; + continue; + } +#endif +#ifdef GL_EXT_polygon_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"polygon_offset", 14)) + { + ret = GLEW_EXT_polygon_offset; + continue; + } +#endif +#ifdef GL_EXT_rescale_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"rescale_normal", 14)) + { + ret = GLEW_EXT_rescale_normal; + continue; + } +#endif +#ifdef GL_EXT_scene_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) + { + ret = GLEW_EXT_scene_marker; + continue; + } +#endif +#ifdef GL_EXT_secondary_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"secondary_color", 15)) + { + ret = GLEW_EXT_secondary_color; + continue; + } +#endif +#ifdef GL_EXT_separate_specular_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_specular_color", 23)) + { + ret = GLEW_EXT_separate_specular_color; + continue; + } +#endif +#ifdef GL_EXT_shadow_funcs + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_funcs", 12)) + { + ret = GLEW_EXT_shadow_funcs; + continue; + } +#endif +#ifdef GL_EXT_shared_texture_palette + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_texture_palette", 22)) + { + ret = GLEW_EXT_shared_texture_palette; + continue; + } +#endif +#ifdef GL_EXT_stencil_clear_tag + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_clear_tag", 17)) + { + ret = GLEW_EXT_stencil_clear_tag; + continue; + } +#endif +#ifdef GL_EXT_stencil_two_side + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_two_side", 16)) + { + ret = GLEW_EXT_stencil_two_side; + continue; + } +#endif +#ifdef GL_EXT_stencil_wrap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_wrap", 12)) + { + ret = GLEW_EXT_stencil_wrap; + continue; + } +#endif +#ifdef GL_EXT_subtexture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"subtexture", 10)) + { + ret = GLEW_EXT_subtexture; + continue; + } +#endif +#ifdef GL_EXT_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture", 7)) + { + ret = GLEW_EXT_texture; + continue; + } +#endif +#ifdef GL_EXT_texture3D + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture3D", 9)) + { + ret = GLEW_EXT_texture3D; + continue; + } +#endif +#ifdef GL_EXT_texture_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_array", 13)) + { + ret = GLEW_EXT_texture_array; + continue; + } +#endif +#ifdef GL_EXT_texture_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) + { + ret = GLEW_EXT_texture_buffer_object; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_dxt1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) + { + ret = GLEW_EXT_texture_compression_dxt1; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_latc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_latc", 24)) + { + ret = GLEW_EXT_texture_compression_latc; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_rgtc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) + { + ret = GLEW_EXT_texture_compression_rgtc; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_s3tc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_s3tc", 24)) + { + ret = GLEW_EXT_texture_compression_s3tc; + continue; + } +#endif +#ifdef GL_EXT_texture_cube_map + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) + { + ret = GLEW_EXT_texture_cube_map; + continue; + } +#endif +#ifdef GL_EXT_texture_edge_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) + { + ret = GLEW_EXT_texture_edge_clamp; + continue; + } +#endif +#ifdef GL_EXT_texture_env + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env", 11)) + { + ret = GLEW_EXT_texture_env; + continue; + } +#endif +#ifdef GL_EXT_texture_env_add + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) + { + ret = GLEW_EXT_texture_env_add; + continue; + } +#endif +#ifdef GL_EXT_texture_env_combine + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) + { + ret = GLEW_EXT_texture_env_combine; + continue; + } +#endif +#ifdef GL_EXT_texture_env_dot3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) + { + ret = GLEW_EXT_texture_env_dot3; + continue; + } +#endif +#ifdef GL_EXT_texture_filter_anisotropic + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter_anisotropic", 26)) + { + ret = GLEW_EXT_texture_filter_anisotropic; + continue; + } +#endif +#ifdef GL_EXT_texture_integer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_integer", 15)) + { + ret = GLEW_EXT_texture_integer; + continue; + } +#endif +#ifdef GL_EXT_texture_lod_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) + { + ret = GLEW_EXT_texture_lod_bias; + continue; + } +#endif +#ifdef GL_EXT_texture_mirror_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp", 20)) + { + ret = GLEW_EXT_texture_mirror_clamp; + continue; + } +#endif +#ifdef GL_EXT_texture_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_object", 14)) + { + ret = GLEW_EXT_texture_object; + continue; + } +#endif +#ifdef GL_EXT_texture_perturb_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_perturb_normal", 22)) + { + ret = GLEW_EXT_texture_perturb_normal; + continue; + } +#endif +#ifdef GL_EXT_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_EXT_texture_rectangle; + continue; + } +#endif +#ifdef GL_EXT_texture_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB", 12)) + { + ret = GLEW_EXT_texture_sRGB; + continue; + } +#endif +#ifdef GL_EXT_texture_shared_exponent + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shared_exponent", 23)) + { + ret = GLEW_EXT_texture_shared_exponent; + continue; + } +#endif +#ifdef GL_EXT_timer_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) + { + ret = GLEW_EXT_timer_query; + continue; + } +#endif +#ifdef GL_EXT_vertex_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array", 12)) + { + ret = GLEW_EXT_vertex_array; + continue; + } +#endif +#ifdef GL_EXT_vertex_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) + { + ret = GLEW_EXT_vertex_shader; + continue; + } +#endif +#ifdef GL_EXT_vertex_weighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_weighting", 16)) + { + ret = GLEW_EXT_vertex_weighting; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"GREMEDY_", 8)) + { +#ifdef GL_GREMEDY_frame_terminator + if (_glewStrSame3(&pos, &len, (const GLubyte*)"frame_terminator", 16)) + { + ret = GLEW_GREMEDY_frame_terminator; + continue; + } +#endif +#ifdef GL_GREMEDY_string_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"string_marker", 13)) + { + ret = GLEW_GREMEDY_string_marker; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"HP_", 3)) + { +#ifdef GL_HP_convolution_border_modes + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) + { + ret = GLEW_HP_convolution_border_modes; + continue; + } +#endif +#ifdef GL_HP_image_transform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_transform", 15)) + { + ret = GLEW_HP_image_transform; + continue; + } +#endif +#ifdef GL_HP_occlusion_test + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_test", 14)) + { + ret = GLEW_HP_occlusion_test; + continue; + } +#endif +#ifdef GL_HP_texture_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lighting", 16)) + { + ret = GLEW_HP_texture_lighting; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"IBM_", 4)) + { +#ifdef GL_IBM_cull_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) + { + ret = GLEW_IBM_cull_vertex; + continue; + } +#endif +#ifdef GL_IBM_multimode_draw_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multimode_draw_arrays", 21)) + { + ret = GLEW_IBM_multimode_draw_arrays; + continue; + } +#endif +#ifdef GL_IBM_rasterpos_clip + if (_glewStrSame3(&pos, &len, (const GLubyte*)"rasterpos_clip", 14)) + { + ret = GLEW_IBM_rasterpos_clip; + continue; + } +#endif +#ifdef GL_IBM_static_data + if (_glewStrSame3(&pos, &len, (const GLubyte*)"static_data", 11)) + { + ret = GLEW_IBM_static_data; + continue; + } +#endif +#ifdef GL_IBM_texture_mirrored_repeat + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) + { + ret = GLEW_IBM_texture_mirrored_repeat; + continue; + } +#endif +#ifdef GL_IBM_vertex_array_lists + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_lists", 18)) + { + ret = GLEW_IBM_vertex_array_lists; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"INGR_", 5)) + { +#ifdef GL_INGR_color_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_clamp", 11)) + { + ret = GLEW_INGR_color_clamp; + continue; + } +#endif +#ifdef GL_INGR_interlace_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace_read", 14)) + { + ret = GLEW_INGR_interlace_read; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) + { +#ifdef GL_INTEL_parallel_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) + { + ret = GLEW_INTEL_parallel_arrays; + continue; + } +#endif +#ifdef GL_INTEL_texture_scissor + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scissor", 15)) + { + ret = GLEW_INTEL_texture_scissor; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4)) + { +#ifdef GL_KTX_buffer_region + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) + { + ret = GLEW_KTX_buffer_region; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESAX_", 6)) + { +#ifdef GL_MESAX_texture_stack + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stack", 13)) + { + ret = GLEW_MESAX_texture_stack; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) + { +#ifdef GL_MESA_pack_invert + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_invert", 11)) + { + ret = GLEW_MESA_pack_invert; + continue; + } +#endif +#ifdef GL_MESA_resize_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resize_buffers", 14)) + { + ret = GLEW_MESA_resize_buffers; + continue; + } +#endif +#ifdef GL_MESA_window_pos + if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) + { + ret = GLEW_MESA_window_pos; + continue; + } +#endif +#ifdef GL_MESA_ycbcr_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_texture", 13)) + { + ret = GLEW_MESA_ycbcr_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef GL_NV_blend_square + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) + { + ret = GLEW_NV_blend_square; + continue; + } +#endif +#ifdef GL_NV_copy_depth_to_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19)) + { + ret = GLEW_NV_copy_depth_to_color; + continue; + } +#endif +#ifdef GL_NV_depth_buffer_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) + { + ret = GLEW_NV_depth_buffer_float; + continue; + } +#endif +#ifdef GL_NV_depth_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) + { + ret = GLEW_NV_depth_clamp; + continue; + } +#endif +#ifdef GL_NV_depth_range_unclamped + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_range_unclamped", 21)) + { + ret = GLEW_NV_depth_range_unclamped; + continue; + } +#endif +#ifdef GL_NV_evaluators + if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) + { + ret = GLEW_NV_evaluators; + continue; + } +#endif +#ifdef GL_NV_fence + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) + { + ret = GLEW_NV_fence; + continue; + } +#endif +#ifdef GL_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = GLEW_NV_float_buffer; + continue; + } +#endif +#ifdef GL_NV_fog_distance + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_distance", 12)) + { + ret = GLEW_NV_fog_distance; + continue; + } +#endif +#ifdef GL_NV_fragment_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) + { + ret = GLEW_NV_fragment_program; + continue; + } +#endif +#ifdef GL_NV_fragment_program2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program2", 17)) + { + ret = GLEW_NV_fragment_program2; + continue; + } +#endif +#ifdef GL_NV_fragment_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program4", 17)) + { + ret = GLEW_NV_fragment_program4; + continue; + } +#endif +#ifdef GL_NV_fragment_program_option + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_option", 23)) + { + ret = GLEW_NV_fragment_program_option; + continue; + } +#endif +#ifdef GL_NV_framebuffer_multisample_coverage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_coverage", 32)) + { + ret = GLEW_NV_framebuffer_multisample_coverage; + continue; + } +#endif +#ifdef GL_NV_geometry_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_program4", 17)) + { + ret = GLEW_NV_geometry_program4; + continue; + } +#endif +#ifdef GL_NV_geometry_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) + { + ret = GLEW_NV_geometry_shader4; + continue; + } +#endif +#ifdef GL_NV_gpu_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12)) + { + ret = GLEW_NV_gpu_program4; + continue; + } +#endif +#ifdef GL_NV_half_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float", 10)) + { + ret = GLEW_NV_half_float; + continue; + } +#endif +#ifdef GL_NV_light_max_exponent + if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_max_exponent", 18)) + { + ret = GLEW_NV_light_max_exponent; + continue; + } +#endif +#ifdef GL_NV_multisample_filter_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_filter_hint", 23)) + { + ret = GLEW_NV_multisample_filter_hint; + continue; + } +#endif +#ifdef GL_NV_occlusion_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) + { + ret = GLEW_NV_occlusion_query; + continue; + } +#endif +#ifdef GL_NV_packed_depth_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) + { + ret = GLEW_NV_packed_depth_stencil; + continue; + } +#endif +#ifdef GL_NV_parameter_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object", 23)) + { + ret = GLEW_NV_parameter_buffer_object; + continue; + } +#endif +#ifdef GL_NV_pixel_data_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_data_range", 16)) + { + ret = GLEW_NV_pixel_data_range; + continue; + } +#endif +#ifdef GL_NV_point_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) + { + ret = GLEW_NV_point_sprite; + continue; + } +#endif +#ifdef GL_NV_primitive_restart + if (_glewStrSame3(&pos, &len, (const GLubyte*)"primitive_restart", 17)) + { + ret = GLEW_NV_primitive_restart; + continue; + } +#endif +#ifdef GL_NV_register_combiners + if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners", 18)) + { + ret = GLEW_NV_register_combiners; + continue; + } +#endif +#ifdef GL_NV_register_combiners2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners2", 19)) + { + ret = GLEW_NV_register_combiners2; + continue; + } +#endif +#ifdef GL_NV_texgen_emboss + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_emboss", 13)) + { + ret = GLEW_NV_texgen_emboss; + continue; + } +#endif +#ifdef GL_NV_texgen_reflection + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_reflection", 17)) + { + ret = GLEW_NV_texgen_reflection; + continue; + } +#endif +#ifdef GL_NV_texture_compression_vtc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_vtc", 23)) + { + ret = GLEW_NV_texture_compression_vtc; + continue; + } +#endif +#ifdef GL_NV_texture_env_combine4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine4", 20)) + { + ret = GLEW_NV_texture_env_combine4; + continue; + } +#endif +#ifdef GL_NV_texture_expand_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_expand_normal", 21)) + { + ret = GLEW_NV_texture_expand_normal; + continue; + } +#endif +#ifdef GL_NV_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_NV_texture_rectangle; + continue; + } +#endif +#ifdef GL_NV_texture_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader", 14)) + { + ret = GLEW_NV_texture_shader; + continue; + } +#endif +#ifdef GL_NV_texture_shader2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader2", 15)) + { + ret = GLEW_NV_texture_shader2; + continue; + } +#endif +#ifdef GL_NV_texture_shader3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader3", 15)) + { + ret = GLEW_NV_texture_shader3; + continue; + } +#endif +#ifdef GL_NV_transform_feedback + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) + { + ret = GLEW_NV_transform_feedback; + continue; + } +#endif +#ifdef GL_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLEW_NV_vertex_array_range; + continue; + } +#endif +#ifdef GL_NV_vertex_array_range2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range2", 19)) + { + ret = GLEW_NV_vertex_array_range2; + continue; + } +#endif +#ifdef GL_NV_vertex_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) + { + ret = GLEW_NV_vertex_program; + continue; + } +#endif +#ifdef GL_NV_vertex_program1_1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program1_1", 17)) + { + ret = GLEW_NV_vertex_program1_1; + continue; + } +#endif +#ifdef GL_NV_vertex_program2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2", 15)) + { + ret = GLEW_NV_vertex_program2; + continue; + } +#endif +#ifdef GL_NV_vertex_program2_option + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2_option", 22)) + { + ret = GLEW_NV_vertex_program2_option; + continue; + } +#endif +#ifdef GL_NV_vertex_program3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program3", 15)) + { + ret = GLEW_NV_vertex_program3; + continue; + } +#endif +#ifdef GL_NV_vertex_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program4", 15)) + { + ret = GLEW_NV_vertex_program4; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4)) + { +#ifdef GL_OES_byte_coordinates + if (_glewStrSame3(&pos, &len, (const GLubyte*)"byte_coordinates", 16)) + { + ret = GLEW_OES_byte_coordinates; + continue; + } +#endif +#ifdef GL_OES_compressed_paletted_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_paletted_texture", 27)) + { + ret = GLEW_OES_compressed_paletted_texture; + continue; + } +#endif +#ifdef GL_OES_read_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_format", 11)) + { + ret = GLEW_OES_read_format; + continue; + } +#endif +#ifdef GL_OES_single_precision + if (_glewStrSame3(&pos, &len, (const GLubyte*)"single_precision", 16)) + { + ret = GLEW_OES_single_precision; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef GL_OML_interlace + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) + { + ret = GLEW_OML_interlace; + continue; + } +#endif +#ifdef GL_OML_resample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) + { + ret = GLEW_OML_resample; + continue; + } +#endif +#ifdef GL_OML_subsample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"subsample", 9)) + { + ret = GLEW_OML_subsample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"PGI_", 4)) + { +#ifdef GL_PGI_misc_hints + if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_hints", 10)) + { + ret = GLEW_PGI_misc_hints; + continue; + } +#endif +#ifdef GL_PGI_vertex_hints + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_hints", 12)) + { + ret = GLEW_PGI_vertex_hints; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"REND_", 5)) + { +#ifdef GL_REND_screen_coordinates + if (_glewStrSame3(&pos, &len, (const GLubyte*)"screen_coordinates", 18)) + { + ret = GLEW_REND_screen_coordinates; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"S3_", 3)) + { +#ifdef GL_S3_s3tc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"s3tc", 4)) + { + ret = GLEW_S3_s3tc; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) + { +#ifdef GL_SGIS_color_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) + { + ret = GLEW_SGIS_color_range; + continue; + } +#endif +#ifdef GL_SGIS_detail_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"detail_texture", 14)) + { + ret = GLEW_SGIS_detail_texture; + continue; + } +#endif +#ifdef GL_SGIS_fog_function + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_function", 12)) + { + ret = GLEW_SGIS_fog_function; + continue; + } +#endif +#ifdef GL_SGIS_generate_mipmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"generate_mipmap", 15)) + { + ret = GLEW_SGIS_generate_mipmap; + continue; + } +#endif +#ifdef GL_SGIS_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_SGIS_multisample; + continue; + } +#endif +#ifdef GL_SGIS_pixel_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) + { + ret = GLEW_SGIS_pixel_texture; + continue; + } +#endif +#ifdef GL_SGIS_sharpen_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sharpen_texture", 15)) + { + ret = GLEW_SGIS_sharpen_texture; + continue; + } +#endif +#ifdef GL_SGIS_texture4D + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture4D", 9)) + { + ret = GLEW_SGIS_texture4D; + continue; + } +#endif +#ifdef GL_SGIS_texture_border_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) + { + ret = GLEW_SGIS_texture_border_clamp; + continue; + } +#endif +#ifdef GL_SGIS_texture_edge_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) + { + ret = GLEW_SGIS_texture_edge_clamp; + continue; + } +#endif +#ifdef GL_SGIS_texture_filter4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter4", 15)) + { + ret = GLEW_SGIS_texture_filter4; + continue; + } +#endif +#ifdef GL_SGIS_texture_lod + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod", 11)) + { + ret = GLEW_SGIS_texture_lod; + continue; + } +#endif +#ifdef GL_SGIS_texture_select + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_select", 14)) + { + ret = GLEW_SGIS_texture_select; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) + { +#ifdef GL_SGIX_async + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async", 5)) + { + ret = GLEW_SGIX_async; + continue; + } +#endif +#ifdef GL_SGIX_async_histogram + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_histogram", 15)) + { + ret = GLEW_SGIX_async_histogram; + continue; + } +#endif +#ifdef GL_SGIX_async_pixel + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_pixel", 11)) + { + ret = GLEW_SGIX_async_pixel; + continue; + } +#endif +#ifdef GL_SGIX_blend_alpha_minmax + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_alpha_minmax", 18)) + { + ret = GLEW_SGIX_blend_alpha_minmax; + continue; + } +#endif +#ifdef GL_SGIX_clipmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"clipmap", 7)) + { + ret = GLEW_SGIX_clipmap; + continue; + } +#endif +#ifdef GL_SGIX_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) + { + ret = GLEW_SGIX_depth_texture; + continue; + } +#endif +#ifdef GL_SGIX_flush_raster + if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_raster", 12)) + { + ret = GLEW_SGIX_flush_raster; + continue; + } +#endif +#ifdef GL_SGIX_fog_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_offset", 10)) + { + ret = GLEW_SGIX_fog_offset; + continue; + } +#endif +#ifdef GL_SGIX_fog_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_texture", 11)) + { + ret = GLEW_SGIX_fog_texture; + continue; + } +#endif +#ifdef GL_SGIX_fragment_specular_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_specular_lighting", 26)) + { + ret = GLEW_SGIX_fragment_specular_lighting; + continue; + } +#endif +#ifdef GL_SGIX_framezoom + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framezoom", 9)) + { + ret = GLEW_SGIX_framezoom; + continue; + } +#endif +#ifdef GL_SGIX_interlace + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) + { + ret = GLEW_SGIX_interlace; + continue; + } +#endif +#ifdef GL_SGIX_ir_instrument1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ir_instrument1", 14)) + { + ret = GLEW_SGIX_ir_instrument1; + continue; + } +#endif +#ifdef GL_SGIX_list_priority + if (_glewStrSame3(&pos, &len, (const GLubyte*)"list_priority", 13)) + { + ret = GLEW_SGIX_list_priority; + continue; + } +#endif +#ifdef GL_SGIX_pixel_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) + { + ret = GLEW_SGIX_pixel_texture; + continue; + } +#endif +#ifdef GL_SGIX_pixel_texture_bits + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture_bits", 18)) + { + ret = GLEW_SGIX_pixel_texture_bits; + continue; + } +#endif +#ifdef GL_SGIX_reference_plane + if (_glewStrSame3(&pos, &len, (const GLubyte*)"reference_plane", 15)) + { + ret = GLEW_SGIX_reference_plane; + continue; + } +#endif +#ifdef GL_SGIX_resample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) + { + ret = GLEW_SGIX_resample; + continue; + } +#endif +#ifdef GL_SGIX_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) + { + ret = GLEW_SGIX_shadow; + continue; + } +#endif +#ifdef GL_SGIX_shadow_ambient + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) + { + ret = GLEW_SGIX_shadow_ambient; + continue; + } +#endif +#ifdef GL_SGIX_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sprite", 6)) + { + ret = GLEW_SGIX_sprite; + continue; + } +#endif +#ifdef GL_SGIX_tag_sample_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"tag_sample_buffer", 17)) + { + ret = GLEW_SGIX_tag_sample_buffer; + continue; + } +#endif +#ifdef GL_SGIX_texture_add_env + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_add_env", 15)) + { + ret = GLEW_SGIX_texture_add_env; + continue; + } +#endif +#ifdef GL_SGIX_texture_coordinate_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_coordinate_clamp", 24)) + { + ret = GLEW_SGIX_texture_coordinate_clamp; + continue; + } +#endif +#ifdef GL_SGIX_texture_lod_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) + { + ret = GLEW_SGIX_texture_lod_bias; + continue; + } +#endif +#ifdef GL_SGIX_texture_multi_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multi_buffer", 20)) + { + ret = GLEW_SGIX_texture_multi_buffer; + continue; + } +#endif +#ifdef GL_SGIX_texture_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) + { + ret = GLEW_SGIX_texture_range; + continue; + } +#endif +#ifdef GL_SGIX_texture_scale_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scale_bias", 18)) + { + ret = GLEW_SGIX_texture_scale_bias; + continue; + } +#endif +#ifdef GL_SGIX_vertex_preclip + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip", 14)) + { + ret = GLEW_SGIX_vertex_preclip; + continue; + } +#endif +#ifdef GL_SGIX_vertex_preclip_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip_hint", 19)) + { + ret = GLEW_SGIX_vertex_preclip_hint; + continue; + } +#endif +#ifdef GL_SGIX_ycrcb + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycrcb", 5)) + { + ret = GLEW_SGIX_ycrcb; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) + { +#ifdef GL_SGI_color_matrix + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_matrix", 12)) + { + ret = GLEW_SGI_color_matrix; + continue; + } +#endif +#ifdef GL_SGI_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_table", 11)) + { + ret = GLEW_SGI_color_table; + continue; + } +#endif +#ifdef GL_SGI_texture_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_color_table", 19)) + { + ret = GLEW_SGI_texture_color_table; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUNX_", 5)) + { +#ifdef GL_SUNX_constant_data + if (_glewStrSame3(&pos, &len, (const GLubyte*)"constant_data", 13)) + { + ret = GLEW_SUNX_constant_data; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) + { +#ifdef GL_SUN_convolution_border_modes + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) + { + ret = GLEW_SUN_convolution_border_modes; + continue; + } +#endif +#ifdef GL_SUN_global_alpha + if (_glewStrSame3(&pos, &len, (const GLubyte*)"global_alpha", 12)) + { + ret = GLEW_SUN_global_alpha; + continue; + } +#endif +#ifdef GL_SUN_mesh_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"mesh_array", 10)) + { + ret = GLEW_SUN_mesh_array; + continue; + } +#endif +#ifdef GL_SUN_read_video_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_video_pixels", 17)) + { + ret = GLEW_SUN_read_video_pixels; + continue; + } +#endif +#ifdef GL_SUN_slice_accum + if (_glewStrSame3(&pos, &len, (const GLubyte*)"slice_accum", 11)) + { + ret = GLEW_SUN_slice_accum; + continue; + } +#endif +#ifdef GL_SUN_triangle_list + if (_glewStrSame3(&pos, &len, (const GLubyte*)"triangle_list", 13)) + { + ret = GLEW_SUN_triangle_list; + continue; + } +#endif +#ifdef GL_SUN_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex", 6)) + { + ret = GLEW_SUN_vertex; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"WIN_", 4)) + { +#ifdef GL_WIN_phong_shading + if (_glewStrSame3(&pos, &len, (const GLubyte*)"phong_shading", 13)) + { + ret = GLEW_WIN_phong_shading; + continue; + } +#endif +#ifdef GL_WIN_specular_fog + if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_fog", 12)) + { + ret = GLEW_WIN_specular_fog; + continue; + } +#endif +#ifdef GL_WIN_swap_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_hint", 9)) + { + ret = GLEW_WIN_swap_hint; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#if defined(_WIN32) + +#if defined(GLEW_MX) +GLboolean wglewContextIsSupported (WGLEWContext* ctx, const char* name) +#else +GLboolean wglewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef WGL_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_3DFX_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DL_", 4)) + { +#ifdef WGL_3DL_stereo_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_control", 14)) + { + ret = WGLEW_3DL_stereo_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef WGL_ARB_buffer_region + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) + { + ret = WGLEW_ARB_buffer_region; + continue; + } +#endif +#ifdef WGL_ARB_extensions_string + if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) + { + ret = WGLEW_ARB_extensions_string; + continue; + } +#endif +#ifdef WGL_ARB_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = WGLEW_ARB_make_current_read; + continue; + } +#endif +#ifdef WGL_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_ARB_multisample; + continue; + } +#endif +#ifdef WGL_ARB_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = WGLEW_ARB_pbuffer; + continue; + } +#endif +#ifdef WGL_ARB_pixel_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) + { + ret = WGLEW_ARB_pixel_format; + continue; + } +#endif +#ifdef WGL_ARB_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = WGLEW_ARB_pixel_format_float; + continue; + } +#endif +#ifdef WGL_ARB_render_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) + { + ret = WGLEW_ARB_render_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef WGL_ATI_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = WGLEW_ATI_pixel_format_float; + continue; + } +#endif +#ifdef WGL_ATI_render_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) + { + ret = WGLEW_ATI_render_texture_rectangle; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef WGL_EXT_depth_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_float", 11)) + { + ret = WGLEW_EXT_depth_float; + continue; + } +#endif +#ifdef WGL_EXT_display_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"display_color_table", 19)) + { + ret = WGLEW_EXT_display_color_table; + continue; + } +#endif +#ifdef WGL_EXT_extensions_string + if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) + { + ret = WGLEW_EXT_extensions_string; + continue; + } +#endif +#ifdef WGL_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = WGLEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef WGL_EXT_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = WGLEW_EXT_make_current_read; + continue; + } +#endif +#ifdef WGL_EXT_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_EXT_multisample; + continue; + } +#endif +#ifdef WGL_EXT_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = WGLEW_EXT_pbuffer; + continue; + } +#endif +#ifdef WGL_EXT_pixel_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) + { + ret = WGLEW_EXT_pixel_format; + continue; + } +#endif +#ifdef WGL_EXT_pixel_format_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_packed_float", 25)) + { + ret = WGLEW_EXT_pixel_format_packed_float; + continue; + } +#endif +#ifdef WGL_EXT_swap_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) + { + ret = WGLEW_EXT_swap_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"I3D_", 4)) + { +#ifdef WGL_I3D_digital_video_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"digital_video_control", 21)) + { + ret = WGLEW_I3D_digital_video_control; + continue; + } +#endif +#ifdef WGL_I3D_gamma + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gamma", 5)) + { + ret = WGLEW_I3D_gamma; + continue; + } +#endif +#ifdef WGL_I3D_genlock + if (_glewStrSame3(&pos, &len, (const GLubyte*)"genlock", 7)) + { + ret = WGLEW_I3D_genlock; + continue; + } +#endif +#ifdef WGL_I3D_image_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_buffer", 12)) + { + ret = WGLEW_I3D_image_buffer; + continue; + } +#endif +#ifdef WGL_I3D_swap_frame_lock + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_lock", 15)) + { + ret = WGLEW_I3D_swap_frame_lock; + continue; + } +#endif +#ifdef WGL_I3D_swap_frame_usage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_usage", 16)) + { + ret = WGLEW_I3D_swap_frame_usage; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef WGL_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = WGLEW_NV_float_buffer; + continue; + } +#endif +#ifdef WGL_NV_gpu_affinity + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_affinity", 12)) + { + ret = WGLEW_NV_gpu_affinity; + continue; + } +#endif +#ifdef WGL_NV_render_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_depth_texture", 20)) + { + ret = WGLEW_NV_render_depth_texture; + continue; + } +#endif +#ifdef WGL_NV_render_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) + { + ret = WGLEW_NV_render_texture_rectangle; + continue; + } +#endif +#ifdef WGL_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = WGLEW_NV_vertex_array_range; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef WGL_OML_sync_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) + { + ret = WGLEW_OML_sync_control; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + +#if defined(GLEW_MX) +GLboolean glxewContextIsSupported (GLXEWContext* ctx, const char* name) +#else +GLboolean glxewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) + { +#ifdef GLX_VERSION_1_2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) + { + ret = GLXEW_VERSION_1_2; + continue; + } +#endif +#ifdef GLX_VERSION_1_3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) + { + ret = GLXEW_VERSION_1_3; + continue; + } +#endif +#ifdef GLX_VERSION_1_4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) + { + ret = GLXEW_VERSION_1_4; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef GLX_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_3DFX_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef GLX_ARB_fbconfig_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) + { + ret = GLXEW_ARB_fbconfig_float; + continue; + } +#endif +#ifdef GLX_ARB_get_proc_address + if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_proc_address", 16)) + { + ret = GLXEW_ARB_get_proc_address; + continue; + } +#endif +#ifdef GLX_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_ARB_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef GLX_ATI_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = GLXEW_ATI_pixel_format_float; + continue; + } +#endif +#ifdef GLX_ATI_render_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) + { + ret = GLXEW_ATI_render_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef GLX_EXT_fbconfig_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_packed_float", 21)) + { + ret = GLXEW_EXT_fbconfig_packed_float; + continue; + } +#endif +#ifdef GLX_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLXEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef GLX_EXT_import_context + if (_glewStrSame3(&pos, &len, (const GLubyte*)"import_context", 14)) + { + ret = GLXEW_EXT_import_context; + continue; + } +#endif +#ifdef GLX_EXT_scene_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) + { + ret = GLXEW_EXT_scene_marker; + continue; + } +#endif +#ifdef GLX_EXT_texture_from_pixmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19)) + { + ret = GLXEW_EXT_texture_from_pixmap; + continue; + } +#endif +#ifdef GLX_EXT_visual_info + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_info", 11)) + { + ret = GLXEW_EXT_visual_info; + continue; + } +#endif +#ifdef GLX_EXT_visual_rating + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_rating", 13)) + { + ret = GLXEW_EXT_visual_rating; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) + { +#ifdef GLX_MESA_agp_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"agp_offset", 10)) + { + ret = GLXEW_MESA_agp_offset; + continue; + } +#endif +#ifdef GLX_MESA_copy_sub_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_sub_buffer", 15)) + { + ret = GLXEW_MESA_copy_sub_buffer; + continue; + } +#endif +#ifdef GLX_MESA_pixmap_colormap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_colormap", 15)) + { + ret = GLXEW_MESA_pixmap_colormap; + continue; + } +#endif +#ifdef GLX_MESA_release_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"release_buffers", 15)) + { + ret = GLXEW_MESA_release_buffers; + continue; + } +#endif +#ifdef GLX_MESA_set_3dfx_mode + if (_glewStrSame3(&pos, &len, (const GLubyte*)"set_3dfx_mode", 13)) + { + ret = GLXEW_MESA_set_3dfx_mode; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef GLX_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = GLXEW_NV_float_buffer; + continue; + } +#endif +#ifdef GLX_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLXEW_NV_vertex_array_range; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef GLX_OML_swap_method + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_method", 11)) + { + ret = GLXEW_OML_swap_method; + continue; + } +#endif +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) + { + ret = GLXEW_OML_sync_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) + { +#ifdef GLX_SGIS_blended_overlay + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blended_overlay", 15)) + { + ret = GLXEW_SGIS_blended_overlay; + continue; + } +#endif +#ifdef GLX_SGIS_color_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) + { + ret = GLXEW_SGIS_color_range; + continue; + } +#endif +#ifdef GLX_SGIS_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_SGIS_multisample; + continue; + } +#endif +#ifdef GLX_SGIS_shared_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_multisample", 18)) + { + ret = GLXEW_SGIS_shared_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) + { +#ifdef GLX_SGIX_fbconfig + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig", 8)) + { + ret = GLXEW_SGIX_fbconfig; + continue; + } +#endif +#ifdef GLX_SGIX_hyperpipe + if (_glewStrSame3(&pos, &len, (const GLubyte*)"hyperpipe", 9)) + { + ret = GLXEW_SGIX_hyperpipe; + continue; + } +#endif +#ifdef GLX_SGIX_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = GLXEW_SGIX_pbuffer; + continue; + } +#endif +#ifdef GLX_SGIX_swap_barrier + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_barrier", 12)) + { + ret = GLXEW_SGIX_swap_barrier; + continue; + } +#endif +#ifdef GLX_SGIX_swap_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) + { + ret = GLXEW_SGIX_swap_group; + continue; + } +#endif +#ifdef GLX_SGIX_video_resize + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) + { + ret = GLXEW_SGIX_video_resize; + continue; + } +#endif +#ifdef GLX_SGIX_visual_select_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_select_group", 19)) + { + ret = GLXEW_SGIX_visual_select_group; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) + { +#ifdef GLX_SGI_cushion + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cushion", 7)) + { + ret = GLXEW_SGI_cushion; + continue; + } +#endif +#ifdef GLX_SGI_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = GLXEW_SGI_make_current_read; + continue; + } +#endif +#ifdef GLX_SGI_swap_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) + { + ret = GLXEW_SGI_swap_control; + continue; + } +#endif +#ifdef GLX_SGI_video_sync + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_sync", 10)) + { + ret = GLXEW_SGI_video_sync; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) + { +#ifdef GLX_SUN_get_transparent_index + if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_transparent_index", 21)) + { + ret = GLXEW_SUN_get_transparent_index; + continue; + } +#endif +#ifdef GLX_SUN_video_resize + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) + { + ret = GLXEW_SUN_video_resize; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#endif /* _WIN32 */ diff --git a/thirdparty/carve-1.4.0/external/GLOOP/CMakeLists.txt b/thirdparty/carve-1.4.0/external/GLOOP/CMakeLists.txt new file mode 100644 index 00000000..a6e83b75 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 2.6) + +project(gloop) + +include_directories("${gloop_SOURCE_DIR}/include") +include_directories("${glew_SOURCE_DIR}/include") + +find_package(OpenGL) +include_directories(${OPENGL_INCLUDE_DIR}) + +add_library(gloop_math STATIC src/matrix.cpp src/quaternion.cpp) + +add_library(gloop_image STATIC src/radiance.cpp) + +add_library(gloop_model STATIC src/model/stream.cpp src/model/ply_format.cpp src/model/obj_format.cpp src/model/vtk_format.cpp) + +if(CARVE_WITH_GUI) + add_library(gloop STATIC src/shader.cpp src/surface.cpp src/texparam.cpp src/vbo.cpp src/fbo.cpp) + target_link_libraries(gloop ${OPENGL_LIBRARIES}) +endif(CARVE_WITH_GUI) diff --git a/thirdparty/carve-1.4.0/external/GLOOP/Makefile.am b/thirdparty/carve-1.4.0/external/GLOOP/Makefile.am new file mode 100644 index 00000000..ca6a88d2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/Makefile.am @@ -0,0 +1,31 @@ +noinst_LTLIBRARIES=libgloop-math.la libgloop-image.la libgloop-model.la + +noinst_HEADERS= include/gloop/exceptions.hpp include/gloop/fbo.hpp \ + include/gloop/gloop.hpp include/gloop/gloopgl.hpp \ + include/gloop/gloopglu.hpp include/gloop/gloopglut.hpp \ + include/gloop/matrix.hpp include/gloop/model/obj_format.hpp \ + include/gloop/model/ply_format.hpp \ + include/gloop/model/stream.hpp \ + include/gloop/model/vtk_format.hpp \ + include/gloop/quaternion.hpp include/gloop/radiance.hpp \ + include/gloop/ref.hpp include/gloop/shader.hpp \ + include/gloop/stringfuncs.hpp include/gloop/surface.hpp \ + include/gloop/texparam.hpp include/gloop/vbo.hpp \ + include/gloop/vector.hpp include/gloop/vertexformat.hpp + +AM_CPPFLAGS=@CPPFLAGS@ -Iinclude -I@top_srcdir@/external/GLEW/include + +libgloop_math_la_SOURCES=src/matrix.cpp src/quaternion.cpp + +libgloop_image_la_SOURCES=src/radiance.cpp + +libgloop_model_la_SOURCES=src/model/ply_format.cpp \ + src/model/stream.cpp src/model/obj_format.cpp \ + src/model/vtk_format.cpp + +if with_GUI + noinst_LTLIBRARIES+=libgloop.la + + libgloop_la_CXXFLAGS= -Iinclude -I@top_srcdir@/external/GLEW/include @GL_CFLAGS@ + libgloop_la_SOURCES=src/shader.cpp src/surface.cpp src/texparam.cpp src/vbo.cpp src/fbo.cpp +endif diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/exceptions.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/exceptions.hpp new file mode 100644 index 00000000..dc1a2b75 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/exceptions.hpp @@ -0,0 +1,50 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +namespace gloop { + + struct exception { + private: + mutable std::string err; + + public: + exception(const std::string &e) : err(e) { } + exception() : err() { } + + const std::string &str() const { + return err; + } + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/fbo.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/fbo.hpp new file mode 100644 index 00000000..f941731e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/fbo.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include +#include + +#include +#include + +namespace gloop { + class FrameBuffer { + static std::vector s_bound_fbo; + + GLuint fbo; + unsigned width; + unsigned height; + + std::pair depth; + std::pair stencil; + std::vector > colour; + + bool _attach(GLenum target, const Surface::Ptr &surf, GLenum attachment, int mipmap_level); + + public: + FrameBuffer(unsigned _width, unsigned _height); + + void add(GLenum target, const Surface::Ptr &surf); + void add(const Surface::Ptr &surf); + void init(); + void pushBind(); + void bind(); + static void popBind(); + void attach(int mipmap_level = 0); + }; +} \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloop.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloop.hpp new file mode 100644 index 00000000..58159b60 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloop.hpp @@ -0,0 +1,55 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include + +#include + +#include + +#include +#include diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopgl.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopgl.hpp new file mode 100644 index 00000000..80ddfe18 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopgl.hpp @@ -0,0 +1,33 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglu.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglu.hpp new file mode 100644 index 00000000..a5d7c535 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglu.hpp @@ -0,0 +1,8 @@ +#pragma once + +#if defined(__APPLE__) +#include +#else +#include +#endif + diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglut.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglut.hpp new file mode 100644 index 00000000..9aec7582 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/gloopglut.hpp @@ -0,0 +1,8 @@ +#pragma once + +#if defined(__APPLE__) +#include +#else +#include +#endif + diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/matrix.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/matrix.hpp new file mode 100644 index 00000000..82ee3faa --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/matrix.hpp @@ -0,0 +1,175 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +namespace gloop { + + // matrices are column major, as per OpenGL. accessed as .m[col][row], or ._cr + struct M3 { + union { + float v[9]; + float m[3][3]; + struct { + float _11, _12, _13, // n.b. these are transposed + _21, _22, _23, + _31, _32, _33; + }; + }; + + M3(float m11, float m21, float m31, + float m12, float m22, float m32, + float m13, float m23, float m33) { + // this initializer gives data in row-major form, hence the swizzle. + _11 = m11; _12 = m12; _13 = m13; + _21 = m21; _22 = m22; _23 = m23; + _31 = m31; _32 = m32; _33 = m33; + } + M3(const float *_v) { + memcpy(v, _v, sizeof(v)); + } + M3(const float _m[3][3]) { + memcpy(m, _m, sizeof(m)); + } + M3() { } + + static M3 IDENTITY() { + M3 r; + r._11 = 1.0f; r._21 = 0.0f; r._31 = 0.0f; + r._12 = 0.0f; r._22 = 1.0f; r._32 = 0.0f; + r._13 = 0.0f; r._23 = 0.0f; r._33 = 1.0f; + return r; + } + }; + + + + static inline M3 &operator+=(M3 &a, const M3 &b) { for (unsigned i = 0; i < 9; ++i) a.v[i] += b.v[i]; return a; } + static inline M3 operator+(const M3 &a, const M3 &b) { M3 r(a); return r += b; } + + static inline M3 &operator-=(M3 &a, const M3 &b) { for (unsigned i = 0; i < 9; ++i) a.v[i] -= b.v[i]; return a; } + static inline M3 operator-(const M3 &a, const M3 &b) { M3 r(a); return r -= b; } + + static inline M3 &operator*=(M3 &a, float b) { for (unsigned i = 0; i < 9; ++i) a.v[i] *= b; return a; } + static inline M3 operator*(const M3 &a, float b) { M3 r(a); return r *= b; } + + static inline V3 operator*(const M3 &a, const V3 &b) { + return V3(a._11 * b.x + a._21 * b.y + a._31 * b.z, + a._12 * b.x + a._22 * b.y + a._32 * b.z, + a._13 * b.x + a._23 * b.y + a._33 * b.z); + } + + + + struct M4 { + union { + float v[16]; + float m[4][4]; + struct { + float _11, _12, _13, _14, // n.b. these are transposed. + _21, _22, _23, _24, + _31, _32, _33, _34, + _41, _42, _43, _44; + }; + }; + + M4(float m11, float m21, float m31, float m41, + float m12, float m22, float m32, float m42, + float m13, float m23, float m33, float m43, + float m14, float m24, float m34, float m44) { + // this initializer gives data in row-major form, hence the swizzle. + _11 = m11; _12 = m12; _13 = m13; _14 = m14; + _21 = m21; _22 = m22; _23 = m23; _24 = m24; + _31 = m31; _32 = m32; _33 = m33; _34 = m34; + _41 = m41; _42 = m42; _43 = m43; _44 = m44; + } + M4(const float *_v) { + memcpy(v, _v, sizeof(v)); + } + M4(const float _m[4][4]) { + memcpy(m, _m, sizeof(m)); + } + M4() { } + + static M4 IDENTITY() { + M4 r; + r._11 = 1.0f; r._21 = 0.0f; r._31 = 0.0f; r._41 = 0.0f; + r._12 = 0.0f; r._22 = 1.0f; r._32 = 0.0f; r._42 = 0.0f; + r._13 = 0.0f; r._23 = 0.0f; r._33 = 1.0f; r._43 = 0.0f; + r._14 = 0.0f; r._24 = 0.0f; r._34 = 0.0f; r._44 = 1.0f; + return r; + } + + static M4 ROT(float a, float x, float y, float z) { + return (M4)QUAT(V3(x, y, z), a); + } + + static M4 TRANS(float x, float y, float z) { + return M4(1.0f, 0.0f, 0.0f, x, + 0.0f, 1.0f, 0.0f, y, + 0.0f, 0.0f, 1.0f, z, + 0.0f, 0.0f, 0.0f, 1.0f); + } + + static M4 SCALE(float x, float y, float z) { + return M4( x, 0.0f, 0.0f, 0.0f, + 0.0f, y, 0.0f, 0.0f, + 0.0f, 0.0f, z, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f); + } + }; + + + + static inline M4 &operator+=(M4 &a, const M4 &b) { for (unsigned i = 0; i < 16; ++i) a.v[i] += b.v[i]; return a; } + static inline M4 operator+(const M4 &a, const M4 &b) { M4 r(a); return r += b; } + + static inline M4 &operator-=(M4 &a, const M4 &b) { for (unsigned i = 0; i < 16; ++i) a.v[i] -= b.v[i]; return a; } + static inline M4 operator-(const M4 &a, const M4 &b) { M4 r(a); return r -= b; } + + static inline M4 &operator*=(M4 &a, float b) { for (unsigned i = 0; i < 16; ++i) a.v[i] *= b; return a; } + static inline M4 operator*(const M4 &a, float b) { M4 r(a); return r *= b; } + + static inline V3 operator*(const M4 &a, const V3 &b) { + return V3(a._11 * b.x + a._21 * b.y + a._31 * b.z + a._41, + a._12 * b.x + a._22 * b.y + a._32 * b.z + a._42, + a._13 * b.x + a._23 * b.y + a._33 * b.z + a._43); + } + + static inline V4 operator*(const M4 &a, const V4 &b) { + return V4(a._11 * b.x + a._21 * b.y + a._31 * b.z + a._41 * b.w, + a._12 * b.x + a._22 * b.y + a._32 * b.z + a._42 * b.w, + a._13 * b.x + a._23 * b.y + a._33 * b.z + a._43 * b.w, + a._14 * b.x + a._24 * b.y + a._34 * b.z + a._44 * b.w); + } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/obj_format.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/obj_format.hpp new file mode 100644 index 00000000..6d0d10a5 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/obj_format.hpp @@ -0,0 +1,83 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +#include +#include + +namespace gloop { + namespace obj { + + // an obj file is an ascii format. + // comment lines are denoted by # + // primitives are presented one per line, with \ representing a continuation. + // the first whitespace delimted token on each line denotes the type of element represented on the line. + + class ObjReader : public stream::model_reader { + + bool readDoubles(std::istream &in, + stream::reader_base *e_rd, + stream::reader_base **v_rd, + size_t min_count, + size_t rd_count, + const double *defaults); + bool readIntLists(std::istream &in, + stream::reader_base *e_rd, + stream::reader_base **v_rd, + size_t rd_count); + + public: + ObjReader() : stream::model_reader() { + } + + virtual ~ObjReader() { + } + + virtual bool read(std::istream &in); + }; + + class ObjWriter : public stream::model_writer { + + public: + + ObjWriter() : stream::model_writer() { + } + + virtual ~ObjWriter() { + } + + virtual bool write(std::ostream &in); + }; + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/ply_format.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/ply_format.hpp new file mode 100644 index 00000000..be608586 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/ply_format.hpp @@ -0,0 +1,68 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + +#include + +#include +#include + +namespace gloop { + namespace ply { + + class PlyReader : public stream::model_reader { + public: + PlyReader() : stream::model_reader() { + } + + virtual ~PlyReader() { + } + + virtual bool read(std::istream &in); + }; + + class PlyWriter : public stream::model_writer { + public: + bool binary; + bool byteswap; + + PlyWriter(bool _binary, bool _byteswap) : stream::model_writer(), binary(_binary), byteswap(_byteswap) { + } + + virtual ~PlyWriter() { + } + + virtual bool write(std::ostream &in); + }; + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/stream.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/stream.hpp new file mode 100644 index 00000000..c2b695e6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/stream.hpp @@ -0,0 +1,324 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +#ifdef WIN32 + +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; + +#else + +#include + +#endif + +#include + +#include +#include +#include + +namespace gloop { + namespace stream { + + enum Type { + I8 = 0x00, + U8 = 0x01, + I16 = 0x02, + U16 = 0x03, + I32 = 0x04, + U32 = 0x05, + F32 = 0x06, + F64 = 0x07 + }; + + static inline Type smallest_type(int32_t min, int32_t max) { + if (max < 0x80 && min >= -0x80) return I8; + if (max < 0x8000 && min >= -0x8000) return I16; + return I32; + } + + static inline Type smallest_type(uint32_t max) { + if (max < 0x100) return U8; + if (max < 0x10000) return U16; + return U32; + } + + static inline int type_size(int type) { + switch (type) { + case I8: case U8: return 1; + case I16: case U16: return 2; + case I32: case U32: case F32: return 4; + case F64: return 8; + default: throw gloop::exception("unknown type"); + } + } + + + + struct reader_base : public virtual RefObj { + virtual void _val(int8_t t) =0; + virtual void _val(uint8_t t) =0; + virtual void _val(int16_t t) =0; + virtual void _val(uint16_t t) =0; + virtual void _val(int32_t t) =0; + virtual void _val(uint32_t t) =0; + virtual void _val(float t) =0; + virtual void _val(double t) =0; + + virtual void begin() { } + virtual void next() { } + virtual void fail() { } + virtual void end() { } + + virtual void length(int l) { } + }; + + + + struct null_reader : public reader_base { + virtual void _val(int8_t t) { } + virtual void _val(uint8_t t) { } + virtual void _val(int16_t t) { } + virtual void _val(uint16_t t) { } + virtual void _val(int32_t t) { } + virtual void _val(uint32_t t) { } + virtual void _val(float t) { } + virtual void _val(double t) { } + }; + + + + template + struct reader : public reader_base { + virtual void value(T val) =0; + virtual void _val(int8_t t) { value((T)t); } + virtual void _val(uint8_t t) { value((T)t); } + virtual void _val(int16_t t) { value((T)t); } + virtual void _val(uint16_t t) { value((T)t); } + virtual void _val(int32_t t) { value((T)t); } + virtual void _val(uint32_t t) { value((T)t); } + virtual void _val(float t) { value((T)t); } + virtual void _val(double t) { value((T)t); } + }; + + template + void send_scalar(reader_base *rd, const T &v) { + if (rd) { + rd->begin(); + rd->length(1); + rd->next(); + rd->_val(v); + rd->end(); + } + } + + template + void send_sequence(reader_base *rd, size_t n, iter_t begin, iter_t end) { + if (rd) { + rd->begin(); + rd->length(n); + while (begin != end) { + rd->next(); + rd->_val(*begin++); + } + rd->end(); + } + } + + struct writer_base : public virtual RefObj { + virtual void _val(int8_t &t) =0; + virtual void _val(uint8_t &t) =0; + virtual void _val(int16_t &t) =0; + virtual void _val(uint16_t &t) =0; + virtual void _val(int32_t &t) =0; + virtual void _val(uint32_t &t) =0; + virtual void _val(float &t) =0; + virtual void _val(double &t) =0; + + virtual bool isList() { return false; } + virtual Type dataType() { return F64; } + + virtual void begin() { } + virtual void next() { } + virtual void fail() { } + virtual void end() { } + + virtual int length() { return 0; } + virtual int maxLength() { return 0; } + }; + + + + struct null_writer : public writer_base { + virtual void _val(int8_t &t) { } + virtual void _val(uint8_t &t) { } + virtual void _val(int16_t &t) { } + virtual void _val(uint16_t &t) { } + virtual void _val(int32_t &t) { } + virtual void _val(uint32_t &t) { } + virtual void _val(float &t) { } + virtual void _val(double &t) { } + }; + + + + template + struct writer : public writer_base { + virtual T value() =0; + virtual void _val(int8_t &t) { t = (int8_t)value(); } + virtual void _val(uint8_t &t) { t = (uint8_t)value(); } + virtual void _val(int16_t &t) { t = (int16_t)value(); } + virtual void _val(uint16_t &t) { t = (uint16_t)value(); } + virtual void _val(int32_t &t) { t = (int32_t)value(); } + virtual void _val(uint32_t &t) { t = (uint32_t)value(); } + virtual void _val(float &t) { t = (float)value(); } + virtual void _val(double &t) { t = (double)value(); } + }; + + // a specification string has the form: + // block_type.element.property + + // for example: + // polyhedron.face.vertex_indices + + // for readers, the ordering of specifications is unimportant. + + // for writers, within a block there should be a single block type. + + // within that block, specifications should be ordered by order of + // addition of element and then by order of addition of property. + + struct named_prop_t { + std::string name; + + Ref rd; + Ref wt; + + named_prop_t(const std::string &n) : name(n), rd(NULL), wt(NULL) {} + }; + + typedef std::list named_prop_list_t; + + struct named_element_t { + std::string name; + named_prop_list_t props; + + Ref rd; + Ref wt; + + named_element_t(const std::string &n) : name(n), props(), rd(NULL), wt(NULL) {} + + named_prop_t *findProp(const std::string &n) const; + named_prop_t &findOrCreateProp(const std::string &n); + }; + + typedef std::list named_element_list_t; + + struct block_t { + std::string name; + named_element_list_t elems; + + Ref rd; + Ref wt; + + block_t(const std::string &n) : name(n), elems(), rd(NULL), wt(NULL) {} + + named_element_t *findElem(const std::string &n) const; + named_element_t &findOrCreateElem(const std::string &n); + }; + + typedef std::list block_list_t; + + + class model_reader { + public: + block_list_t blocks; + + block_t *findBlock(const std::string &n) const; + block_t &findOrCreateBlock(const std::string &n); + + named_element_t *findElem(const std::string &b, const std::string &e) const; + named_element_t &findOrCreateElem(const std::string &b, const std::string &e); + + named_prop_t *findProp(const std::string &b, const std::string &e, const std::string &p) const; + named_prop_t &findOrCreateProp(const std::string &b, const std::string &e, const std::string &p); + + reader_base *findReader(const std::string &b, const std::string &e, const std::string &p) const { + named_prop_t *prop = findProp(b, e, p); if (prop) return prop->rd.ptr(); + return NULL; + } + reader_base *findReader(const std::string &b, const std::string &e) const { + named_element_t *elem = findElem(b, e); if (elem) return elem->rd.ptr(); + return NULL; + } + reader_base *findReader(const std::string &b) const { + block_t *blk = findBlock(b); if (blk) return blk->rd.ptr(); + return NULL; + } + + model_reader() { + } + + virtual ~model_reader() { + } + + bool addReader(const std::string &spec, reader_base *rd); + + virtual bool read(std::istream &in) =0; + }; + + + struct model_writer { + std::list > blocks; + public: + model_writer() { + } + + virtual ~model_writer() { + } + + bool newBlock(const std::string &name); + bool addWriter(const std::string &spec, writer_base *wt); + + virtual bool write(std::ostream &out) =0; + }; + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/vtk_format.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/vtk_format.hpp new file mode 100644 index 00000000..f3f5a5e0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/model/vtk_format.hpp @@ -0,0 +1,79 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +#include +#include + +namespace gloop { + namespace vtk { + + class VtkReader : public stream::model_reader { + struct point_t { double x, y, z; }; + + void emitPoints(const std::vector &point_data, const std::string &base); + + bool readASCII(std::istream &in); + bool readBinary(std::istream &in); + bool readPlain(std::istream &in); + bool readXML(std::istream &in); + + public: + VtkReader() : stream::model_reader() { + } + + virtual ~VtkReader() { + } + + virtual bool read(std::istream &in); + }; + + class VtkWriter : public stream::model_writer { + public: + enum Fmt { ASCII, BINARY, XML }; + + protected: + Fmt fmt; + + public: + VtkWriter(Fmt _fmt) : stream::model_writer(), fmt(_fmt) { + } + + virtual ~VtkWriter() { + } + + virtual bool write(std::ostream &in); + }; + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/quaternion.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/quaternion.hpp new file mode 100644 index 00000000..fb98bce9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/quaternion.hpp @@ -0,0 +1,101 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "vector.hpp" + +namespace gloop { + + struct M3; + struct M4; + + struct QUAT { + float x, y, z, w; + + QUAT() { } + QUAT(const V3 &axis, float angle); + QUAT(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { } + + QUAT &conjugate() { + x = -x; y = -y; z = -z; return *this; + } + + QUAT &invert() { + float norme = sqrtf(x*x + y*y + z*z + w*w); + if (norme == 0.0f) norme = 1.0f; + float recip = 1.0f / norme; + x = -x * recip; + y = -y * recip; + z = -z * recip; + w = +w * recip; + return *this; + } + + QUAT &normalize() { + float norme = sqrtf(x*x + y*y + z*z + w*w); + if (norme == 0.0f) { + x = y = z = 0.0f; + w = 1.0f; + } else { + float recip = 1.0f / norme; + x *= recip; + y *= recip; + z *= recip; + w *= recip; + } + return *this; + } + + operator M3(); + operator M4(); + + static QUAT slerp(const QUAT &a, const QUAT &b, float t); + }; + + + static inline QUAT operator*(const QUAT &a, const QUAT &b) { + return QUAT((a.w * b.x) + (a.x * b.w) + (a.y * b.z) - (a.z * b.y), + (a.w * b.y) - (a.x * b.z) + (a.y * b.w) + (a.z * b.x), + (a.w * b.z) + (a.x * b.y) - (a.y * b.x) + (a.z * b.w), + (a.w * b.w) - (a.x * b.x) - (a.y * b.y) - (a.z * b.z)); + } + static inline QUAT &operator*=(QUAT &a, const QUAT &b) { a = a * b; return a; } + + static inline QUAT &operator*=(QUAT &a, float b) { + a.x *= b; a.y *= b; a.z *= b; a.w *= b; return a; + } + static inline QUAT operator*(const QUAT &a, float b) { QUAT r(a); return r *= b; } + + static inline QUAT operator~(const QUAT &a) { QUAT r(a); return r.conjugate(); } + static inline QUAT operator-(const QUAT &a) { QUAT r(a); return r.invert(); } + + QUAT slerp(const QUAT &a, const QUAT &b, float t); + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/radiance.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/radiance.hpp new file mode 100644 index 00000000..b77346e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/radiance.hpp @@ -0,0 +1,235 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#if (defined WIN32) || (defined _WIN32) + typedef char int8_t; + typedef short int16_t; + typedef long int32_t; + + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned long uint32_t; +#else +#include +#endif + + +#include +#include +#include +#include + +#include "vector.hpp" +#include "matrix.hpp" + +#ifdef NTSC +# define CIE_x_r 0.670 // standard NTSC primaries +# define CIE_y_r 0.330 +# define CIE_x_g 0.210 +# define CIE_y_g 0.710 +# define CIE_x_b 0.140 +# define CIE_y_b 0.080 +# define CIE_x_w 0.3333 // use true white +# define CIE_y_w 0.3333 +#else +# define CIE_x_r 0.640 // nominal CRT primaries +# define CIE_y_r 0.330 +# define CIE_x_g 0.290 +# define CIE_y_g 0.600 +# define CIE_x_b 0.150 +# define CIE_y_b 0.060 +# define CIE_x_w 0.3333 // use true white +# define CIE_y_w 0.3333 +#endif + + +#define CIE_D (CIE_x_r * (CIE_y_g - CIE_y_b) + CIE_x_g * (CIE_y_b - CIE_y_r) + CIE_x_b*(CIE_y_r - CIE_y_g)) +#define CIE_C_rD ((1.0f / CIE_y_w) * (CIE_x_w * (CIE_y_g - CIE_y_b) - CIE_y_w * (CIE_x_g - CIE_x_b) + CIE_x_g * CIE_y_b - CIE_x_b * CIE_y_g)) +#define CIE_C_gD ((1.0f / CIE_y_w) * (CIE_x_w * (CIE_y_b - CIE_y_r) - CIE_y_w * (CIE_x_b - CIE_x_r) - CIE_x_r * CIE_y_b + CIE_x_b * CIE_y_r)) +#define CIE_C_bD ((1.0f / CIE_y_w) * (CIE_x_w * (CIE_y_r - CIE_y_g) - CIE_y_w * (CIE_x_r - CIE_x_g) + CIE_x_r * CIE_y_g - CIE_x_g * CIE_y_r)) + +#define CIE_rf (CIE_y_r * CIE_C_rD / CIE_D) +#define CIE_gf (CIE_y_g * CIE_C_gD / CIE_D) +#define CIE_bf (CIE_y_b * CIE_C_bD / CIE_D) + + +// luminous efficacies over visible spectrum +#define MAXEFFICACY 683.0f // defined maximum at 550 nm +#define WHTEFFICACY 179.0f // uniform white light +#define D65EFFICACY 203.0f // standard illuminant D65 +#define INCEFFICACY 160.0f // illuminant A (incand.) +#define SUNEFFICACY 208.0f // illuminant B (solar dir.) +#define SKYEFFICACY D65EFFICACY // skylight (should be 110) +#define DAYEFFICACY D65EFFICACY // combined sky and solar + + +namespace gloop { + + struct chromacity { + static const chromacity stdprims; + V2 r, g, b, w; + + M3 xyz_to_rgb() const; + M3 rgb_to_xyz() const; + + }; + + + + static inline double bright(const V3 &col) { + return CIE_rf * col.r + CIE_gf * col.g + CIE_bf * col.b; + } + + static inline double luminance(const V3 &col) { + return WHTEFFICACY * bright(col); + } + + static inline float intens(const V3 &col) { + return std::max(std::max(col.r, col.g), col.b); + } + + + + extern const V3 WHITE; + extern const V3 BLACK; + + extern const M3 RGB_to_XYZ; + extern const M3 XYZ_to_RGB; + + + + struct packed_colour { + static const int excess = 128; + union { + struct { + union { + struct { uint8_t r,g,b; }; + struct { uint8_t x,y,z; }; + }; + uint8_t e; + }; + uint8_t v[4]; + uint32_t val; + }; + + packed_colour() { } + packed_colour(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _e) { r = _r; g = _g; b = _b; e = _e; } + packed_colour(uint32_t _val) { val = _val; } + packed_colour(const void *mem) { memcpy(&v, mem, 4); } + packed_colour(const V3 &col); + + const static packed_colour white; + const static packed_colour black; + + V3 unpack() const { + if (e) { + return V3(ldexp(r + 0.5f, (int)e - (excess + 8)), + ldexp(g + 0.5f, (int)e - (excess + 8)), + ldexp(b + 0.5f, (int)e - (excess + 8))); + } else { + return V3(0.0f, 0.0f, 0.0f); + } + } + + long normbright() { + return ((long)(CIE_rf * 256.0f + 0.5f) * r + (long)(CIE_gf * 256.0f + 0.5f) * g + (long)(CIE_bf * 256.0f + 0.5f) * b) >> 8; + } + + const static packed_colour BLACK; + const static packed_colour WHITE; + }; + + template + static inline void unpack_scanline(T begin, T end, U out) { + while (begin != end) { + *out = (*begin).unpack(); + ++out; ++begin; + } + } + + + + enum radiance_colour_format { + RADIANCE_FMT_UNKNOWN = -1, + RADIANCE_FMT_RGB = 0, + RADIANCE_FMT_CIE = 1 + }; + + + + struct radiance_reader { + virtual void header(radiance_colour_format fmt, + float exposure, + float pixaspect, + chromacity prim, + V3 colour_correction) = 0; + virtual void image_size(int width, int height, int depth) = 0; + virtual void scanline(int scan_axis, + int X, int Y, int Z, + std::vector &scanline) = 0; + virtual ~radiance_reader() { + } + }; + + struct floatbuf_radiance_reader : public radiance_reader { + float *target; + int width, height, depth; + M3 cvt; + bool cvt_set; + + int stride(int axis) { + int stride = 3; + if (axis > 0) stride *= width; + if (axis > 1) stride *= height; + return stride; + } + float *pixel(int X = 0, int Y = 0, int Z = 0) { + return target + 3 * (X + width * (Y + height * Z)); + } + virtual void header(radiance_colour_format fmt, + float exposure, + float pixaspect, + chromacity prim, + V3 colour_correction); + virtual void image_size(int _width, int _height, int _depth); + virtual void scanline(int scan_axis, + int X, int Y, int Z, + std::vector &scanline); + float *take_buffer(); + floatbuf_radiance_reader(); + virtual ~floatbuf_radiance_reader(); + }; + + + + void read_radiance(std::istream &in, radiance_reader &reader, bool invert_X = false, bool invert_Y = true, bool invert_Z = false); + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/ref.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/ref.hpp new file mode 100644 index 00000000..061b7311 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/ref.hpp @@ -0,0 +1,193 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +namespace gloop { + + template + struct RefCounter { + typedef T *ptr_type; + typedef T ref_type; + + static void incref(T * const &t) { t->incref(); } + static void decref(T * const &t) { t->decref(); } + static T &deref(T * const &t) { return *t; } + }; + + class RefObj { + mutable int __refcount; + + RefObj(const RefObj &); + RefObj &operator=(const RefObj &); + + protected: + virtual ~RefObj() { + } + + public: + void incref() const { + __refcount++; + } + void decref() const { + --__refcount; + if (!__refcount) { + delete this; + } + } + + int refcount() const { + return __refcount; + } + RefObj() : __refcount(0) { + } + }; + + class MonitoredRefObj { + mutable int __refcount; + + MonitoredRefObj(const MonitoredRefObj &); + MonitoredRefObj &operator=(const MonitoredRefObj &); + + protected: + virtual void refcountIncreased(int refcount) const { + } + virtual void refcountDecreased(int refcount) const { + } + + virtual ~MonitoredRefObj() { + } + + public: + void incref() const { + __refcount++; + refcountIncreased(__refcount); + } + void decref() const { + // refcountDecreased() could potentially cause other changes to + // the refcount, so after the initial decrease, we keep a copy of + // the value so the object can only be deleted in one place. + + // XXX: if the refcount drops to zero, it can't be rescued inside + // refcountDecreased. This isn't a problem for what we initially + // want to use MonitoredMonitoredRefObj for, whereas the above scenario is. + int r = --__refcount; + refcountDecreased(r); + if (!r) { + delete this; + } + } + + int refcount() const { + return __refcount; + } + MonitoredRefObj() : __refcount(0) { + } + }; + + #ifdef __OBJC__ + #import + + template<> + struct RefCounter { + typedef id ptr_type; + typedef id ref_type; + + static void incref(id const &t) { [t retain]; } + static void decref(id const &t) { [t release]; } + static id deref(id const &t) { return const_cast(t); } + }; + + #endif + + template > + class Ref { + typename R::ptr_type pointee; + public: + Ref() : pointee(NULL) { + } + template + Ref(const Ref &p) : pointee(NULL) { + *this = p; + } + Ref(const Ref &p) : pointee(NULL) { + *this = p; + } + Ref(typename R::ptr_type p) : pointee(p) { + if (pointee) R::incref(pointee); + } + ~Ref() { + if (pointee) R::decref(pointee); + } + + inline bool operator<(const Ref &rhs) const { + return pointee < rhs.pointee; + } + + template + Ref &operator=(const Ref &p) { + if (p.ptr()) S::incref(p.ptr()); + if (pointee) R::decref(pointee); + pointee = p.ptr(); + return *this; + } + Ref &operator=(const Ref &p) { + if (p.pointee) R::incref(p.pointee); + if (pointee) R::decref(pointee); + pointee = p.pointee; + return *this; + } + Ref &operator=(typename R::ptr_type p) { + if (p) R::incref(p); + if (pointee) R::decref(pointee); + pointee = p; + return *this; + } + + typename R::ref_type &operator*() const { return R::deref(pointee); } + + typename R::ptr_type operator->() const { return pointee; } + + typename R::ptr_type ptr() const { return pointee; } + + int refcount() const { return pointee->refcount(); } + + template + bool operator==(const Ref &r) const { return r.ptr() == pointee; } + template + bool operator!=(const Ref &r) const { return r.ptr() != pointee; } + + bool operator==(const typename R::ptr_type r) const { return r == pointee; } + bool operator!=(const typename R::ptr_type r) const { return r != pointee; } + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/shader.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/shader.hpp new file mode 100644 index 00000000..6b9f3164 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/shader.hpp @@ -0,0 +1,199 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include "ref.hpp" +#include "exceptions.hpp" +#include "surface.hpp" + +namespace gloop { + + class Shader : public virtual RefObj { + private: + Shader(); + Shader(const Shader &); + Shader &operator=(const Shader &); + + protected: + static int s_tag; + + public: + typedef Ref Ptr; + + const std::string name; + const std::string prog; + GLuint shader; + mutable int tag; + std::list dependencies; + + protected: + void _source(std::list &result) const; + + virtual GLenum shaderType() = 0; + + void _compile(); + void _attachTo(GLuint program, bool compile = true); + + public: + Shader(const std::string &_name, const std::string &_prog); + Shader(const std::string &_name, std::istream &_stream); + virtual ~Shader(); + virtual void destroy(); + + bool isCompiled() const { + return shader != 0; + } + + void addDependency(const Ptr &dep); + void compileFlat(); + void compile(); + void attachFlat(GLuint program, bool compile = true); + void attachTo(GLuint program, bool compile = true); + }; + + + + class VertexShader : public Shader { + public: + typedef Ref Ptr; + + protected: + virtual GLenum shaderType(); + + public: + VertexShader(const std::string &_name, const std::string &_prog); + VertexShader(const std::string &_name, std::istream &_stream); + + virtual ~VertexShader(); + }; + + + + class FragmentShader : public Shader { + public: + typedef Ref Ptr; + + protected: + virtual GLenum shaderType(); + + public: + FragmentShader(const std::string &_name, const std::string &_prog); + FragmentShader(const std::string &_name, std::istream &_stream); + + virtual ~FragmentShader(); + }; + + + + class ShaderProgram : public virtual RefObj { + VertexShader::Ptr vertex_shader; + FragmentShader::Ptr fragment_shader; + GLuint program; + + public: + ShaderProgram(); + virtual void destroy(); + virtual ~ShaderProgram(); + + virtual ShaderProgram &connect(VertexShader *shader); + virtual ShaderProgram &connect(FragmentShader *shader); + virtual ShaderProgram &connect(const VertexShader::Ptr &shader); + virtual ShaderProgram &connect(const FragmentShader::Ptr &shader); + virtual ShaderProgram &connect(Shader *shader); + virtual ShaderProgram &connect(Shader::Ptr &shader); + + ShaderProgram &link(); + GLuint prog() { return program; } + ShaderProgram &install() { + if (program) glUseProgramObjectARB(program); + return *this; + } + static void uninstall() { + glUseProgramObjectARB(0); + } + int uniform(const char *var) { + return glGetUniformLocationARB(program, var); + } + + ShaderProgram &u(const char *var, GLfloat x) { glUniform1fARB(uniform(var), x); return *this; } + ShaderProgram &u(const char *var, GLfloat x, GLfloat y) { glUniform2fARB(uniform(var), x, y); return *this; } + ShaderProgram &u(const char *var, GLfloat x, GLfloat y, GLfloat z) { glUniform3fARB(uniform(var), x, y, z); return *this; } + ShaderProgram &u(const char *var, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { glUniform4fARB(uniform(var), x, y, z, w); return *this; } + + ShaderProgram &u(const char *var, GLint x) { glUniform1iARB(uniform(var), x); return *this; } + ShaderProgram &u(const char *var, GLint x, GLint y) { glUniform2iARB(uniform(var), x, y); return *this; } + ShaderProgram &u(const char *var, GLint x, GLint y, GLint z) { glUniform3iARB(uniform(var), x, y, z); return *this; } + ShaderProgram &u(const char *var, GLint x, GLint y, GLint z, GLint w) { glUniform4iARB(uniform(var), x, y, z, w); return *this; } + + ShaderProgram &u1(const char *var, GLfloat *f) { glUniform1fvARB(uniform(var), 1, f); return *this; } + ShaderProgram &u2(const char *var, GLfloat *f) { glUniform2fvARB(uniform(var), 1, f); return *this; } + ShaderProgram &u3(const char *var, GLfloat *f) { glUniform3fvARB(uniform(var), 1, f); return *this; } + ShaderProgram &u4(const char *var, GLfloat *f) { glUniform4fvARB(uniform(var), 1, f); return *this; } + + ShaderProgram &u1(const char *var, GLint *f) { glUniform1ivARB(uniform(var), 1, f); return *this; } + ShaderProgram &u2(const char *var, GLint *f) { glUniform2ivARB(uniform(var), 1, f); return *this; } + ShaderProgram &u3(const char *var, GLint *f) { glUniform3ivARB(uniform(var), 1, f); return *this; } + ShaderProgram &u4(const char *var, GLint *f) { glUniform4ivARB(uniform(var), 1, f); return *this; } + + ShaderProgram &um2(const char *var, GLfloat *m) { glUniformMatrix2fvARB(uniform(var), 1, GL_FALSE, m); return *this; } + ShaderProgram &um3(const char *var, GLfloat *m) { glUniformMatrix3fvARB(uniform(var), 1, GL_FALSE, m); return *this; } + ShaderProgram &um4(const char *var, GLfloat *m) { glUniformMatrix4fvARB(uniform(var), 1, GL_FALSE, m); return *this; } + + ShaderProgram &umt2(const char *var, GLfloat *m) { glUniformMatrix2fvARB(uniform(var), 1, GL_TRUE, m); return *this; } + ShaderProgram &umt3(const char *var, GLfloat *m) { glUniformMatrix3fvARB(uniform(var), 1, GL_TRUE, m); return *this; } + ShaderProgram &umt4(const char *var, GLfloat *m) { glUniformMatrix4fvARB(uniform(var), 1, GL_TRUE, m); return *this; } + + + ShaderProgram &ut(const char *var, int u) { + glUniform1iARB(uniform(var), u); + return *this; + } + ShaderProgram &ut(const char *var, int u, Surface *s) { + glUniform1iARB(uniform(var), u); + s->bind(u); + return *this; + } + ShaderProgram &ut(const char *var, int u, GLenum tgt, GLuint tex) { + glUniform1iARB(uniform(var), u); + glActiveTexture(GL_TEXTURE0 + u); + glBindTexture(tgt, tex); + return *this; + } + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/stringfuncs.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/stringfuncs.hpp new file mode 100644 index 00000000..f739e20a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/stringfuncs.hpp @@ -0,0 +1,202 @@ +// Copyright 2006 Tobias Sargeant (toby@permuted.net). +// All rights reserved. + +#pragma once + +#include +#include +namespace gloop { + namespace str { + + class format { + mutable std::ostringstream accum; + + public: + template + format &operator<<(const T &t) { + accum << t; + return *this; + } + operator std::string() const { return accum.str(); } + }; + + + template + static inline bool startswith( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const std::basic_string<_CharT, _Traits, _Alloc> &b) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + if (b.size() > a.size()) return false; + return a.compare(0, b.size(), b) == 0; + } + + template + static inline bool startswith( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const _CharT *b) { + return startswith(a, std::basic_string<_CharT, _Traits, _Alloc>(b)); + } + + template + static inline bool endswith( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const std::basic_string<_CharT, _Traits, _Alloc> &b) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + if (b.size() > a.size()) return false; + return a.compare(a.size() - b.size(), b.size(), b) == 0; + } + + template + static inline bool endswith( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const _CharT *b) { + return endswith(a, std::basic_string<_CharT, _Traits, _Alloc>(b)); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> rstrip( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const strip_t stripchars) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = a.find_last_not_of(stripchars); + if (p == str_t::npos) return ""; + return a.substr(0, p + 1); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> rstrip( + const std::basic_string<_CharT, _Traits, _Alloc> &a) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = a.size(); + while (p && isspace(a[p-1])) p--; + if (!p) return ""; + return a.substr(0, p); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> lstrip( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const strip_t stripchars) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = a.find_first_not_of(stripchars); + if (p == str_t::npos) return ""; + return a.substr(p); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> lstrip( + const std::basic_string<_CharT, _Traits, _Alloc> &a) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = 0; + while (p < a.size() && isspace(a[p])) p++; + if (p == a.size()) return ""; + return a.substr(p); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> strip( + const std::basic_string<_CharT, _Traits, _Alloc> &a, + const strip_t stripchars) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = a.find_first_not_of(stripchars); + if (p == str_t::npos) return ""; + typename str_t::size_type q = a.find_last_not_of(stripchars); + return a.substr(p, q-p); + } + + template + static inline std::basic_string<_CharT, _Traits, _Alloc> strip( + const std::basic_string<_CharT, _Traits, _Alloc> &a) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + typename str_t::size_type p = 0; + while (p < a.size() && isspace(a[p])) p++; + if (p == a.size()) return ""; + typename str_t::size_type q = a.size(); + while (q>p && isspace(a[q-1])) q--; + return a.substr(p, q-p); + } + + template + static inline void split( + _OutputIter iter, + const std::basic_string<_CharT, _Traits, _Alloc> &s, + _CharT split, + int nsplits = -1) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + + int x = 0, rx = 0; + while (x < (int)s.size()) { + if (s[x] == (_CharT)split) { + *iter++ = str_t(s, rx, x - rx); + rx = x + 1; + if (!--nsplits) { + *iter++ = str_t(s, rx); + return; + } + } + x++; + } + if (rx < (int)s.size()) { + *iter++ = str_t(s, rx); + } + } + + template + static inline void split( + _OutputIter iter, + const std::basic_string<_CharT, _Traits, _Alloc> &s, + int nsplits = -1) { + typedef std::basic_string<_CharT, _Traits, _Alloc> str_t; + + int x = 0, rx = 0; + + int y = (int)s.size() - 1; + while (isspace(s[x])) x++; + rx = x; + while (y >= 0 && isspace(s[y])) y--; + y++; + + while (x < y) { + if (isspace(s[x])) { + *iter++ = str_t(s, rx, x - rx); + while (x < y && isspace(s[x])) x++; + rx = x; + if (!--nsplits) { + *iter++ = str_t(s, rx); + return; + } + } else { + x++; + } + } + if (rx != y) { + *iter++ = str_t(s, rx, y - rx); + } + } + + + + + template + static inline std::vector > split( + const std::basic_string<_CharT, _Traits, _Alloc> &s, + _CharT split, + int nsplits = -1) { + std::vector > r; + if (nsplits != -1) r.reserve(nsplits + 1); + split(std::back_inserter(r), s, split, nsplits); + return r; + } + + template + static inline std::vector > split( + const std::basic_string<_CharT, _Traits, _Alloc> &s, + int nsplits = -1) { + std::vector > r; + if (nsplits != -1) r.reserve(nsplits + 1); + split(std::back_inserter(r), s, nsplits); + return r; + } + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/surface.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/surface.hpp new file mode 100644 index 00000000..3cfe931f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/surface.hpp @@ -0,0 +1,112 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include + +#include + +#include +#include +#include + +namespace gloop { + + static inline void P2(unsigned &x) { + x--; + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + x++; + } + + + enum SurfaceType { + SURF_NONE = 0, + SURF_COLOUR = 1, + SURF_DEPTH = 2, + SURF_STENCIL = 3, + SURF_DEPTH_STENCIL = 4 + }; + + class SurfP; + + class Surface : public virtual RefObj { + public: + typedef Ref Ptr; + + struct Desc { + SurfaceType surface_type; + GLenum gl_tgt; + GLenum gl_fmt; + bool is_texture; + bool is_mipmapped; + TextureParam param; + + Desc(SurfaceType _surface_type, GLenum _gl_tgt, GLenum _gl_fmt, bool _is_texture, bool _is_mipmapped, const TextureParam &_param) : + surface_type(_surface_type), gl_tgt(_gl_tgt), gl_fmt(_gl_fmt), is_texture(_is_texture), is_mipmapped(_is_mipmapped), param(_param) { + } + } desc; + GLuint gl_id; + unsigned width, height, depth; + + static std::map, std::vector > s_bind; + const static Desc s_desc[5]; + + Surface(const Desc &d); + ~Surface(); + + void pushBind(int texunit = 0); + void bind(int texunit = 0); + void unbind(int texunit = 0); + void init(unsigned w = 0, unsigned h = 0, unsigned d = 0, GLenum ext_fmt = 0, GLenum ext_type = GL_BYTE, GLvoid **ext_data = NULL); + }; + + class SurfP { + SurfP(); + SurfP(const SurfP &); + SurfP &operator=(const SurfP &); + + public: + Surface::Desc d; + + SurfP(int base) : d(Surface::s_desc[base]) {} + SurfP &tgt(GLenum gl_tgt) { d.gl_tgt = gl_tgt; return *this; } + SurfP &fmt(GLenum gl_fmt) { d.gl_fmt = gl_fmt; return *this; } + SurfP &tex(bool tex) { d.is_texture = tex; return *this; } + SurfP &mipmap(bool mipmap) { d.is_mipmapped = mipmap; return *this; } + SurfP ¶m(const TextureParam ¶m) { d.param = param; return *this; } + operator Surface::Desc &() { return d; } + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/texparam.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/texparam.hpp new file mode 100644 index 00000000..d67296b0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/texparam.hpp @@ -0,0 +1,118 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + +#include "exceptions.hpp" + +namespace gloop { + + struct TextureParam { + static GLfloat s_max_anisotropy; + + enum { + FILTER = 1, + LOD = 2, + MIPMAP = 4, + WRAP = 8, + BORDER = 16, + PRIORITY = 32, + ALL = 63 + }; + + GLenum min_filter; + GLenum mag_filter; + GLfloat min_lod; + GLfloat max_lod; + GLint min_mipmap; + GLint max_mipmap; + GLenum wrap_s; + GLenum wrap_t; + GLenum wrap_r; + GLfloat priority; + GLfloat anisotropy; + GLfloat border_colour[4]; + + TextureParam(GLenum _wrap = GL_REPEAT, GLenum _filter = GL_LINEAR, GLenum _min_filter = 0) { + if (s_max_anisotropy == 0.0f) { + if (GLEW_EXT_texture_filter_anisotropic) { + glGetFloatv(GL_TEXTURE_MAX_ANISOTROPY_EXT, &s_max_anisotropy); + } else { + s_max_anisotropy = 1.0f; + } + } + if (_min_filter == 0) _min_filter = _filter; + min_filter = _min_filter; + mag_filter = _filter; + min_lod = -1000; + max_lod = 1000; + min_mipmap = 0; + max_mipmap = 1000; + wrap_s = wrap_t = wrap_r = _wrap; + priority = 0.0f; + anisotropy = 1.0f; + border_colour[0] = border_colour[1] = border_colour[2] = border_colour[3] = 0.0f; + } + + ~TextureParam() { + } + + void apply(GLenum target, int flags = ALL) { + if (flags & FILTER) { + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, min_filter); + glTexParameteri(target, GL_TEXTURE_MAG_FILTER, mag_filter); + if (s_max_anisotropy > 1.0f) { + glTexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy); + } + } + if (flags & LOD) { + glTexParameterf(target, GL_TEXTURE_MIN_LOD, min_lod); + glTexParameterf(target, GL_TEXTURE_MAX_LOD, max_lod); + } + if (flags & MIPMAP) { + glTexParameteri(target, GL_TEXTURE_BASE_LEVEL, min_mipmap); + glTexParameteri(target, GL_TEXTURE_MAX_LEVEL, max_mipmap); + } + if (flags & WRAP) { + glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap_s); + glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap_t); + glTexParameteri(target, GL_TEXTURE_WRAP_R, wrap_r); + } + if (flags & BORDER) { + glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, border_colour); + } + if (flags & PRIORITY) { + glTexParameterf(target, GL_TEXTURE_PRIORITY, priority); + } + } + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vbo.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vbo.hpp new file mode 100644 index 00000000..6230003b --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vbo.hpp @@ -0,0 +1,118 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "vertexformat.hpp" + +namespace gloop { + + namespace buffer { + enum XferType { + STATIC = GL_STATIC_DRAW_ARB, + DYNAMIC = GL_DYNAMIC_DRAW_ARB, + STREAM = GL_STREAM_DRAW_ARB + }; + + enum AccessType { + RO = GL_READ_ONLY_ARB, + RW = GL_READ_WRITE_ARB, + WO = GL_WRITE_ONLY_ARB + }; + + template + struct VBO { + typedef Transfer FMT; + + size_t vbo_size; + XferType xfer_type; + GLuint vbo; + Transfer *buf; + Transfer *base; + + VBO(size_t buflen, XferType xfer) : vbo_size(buflen), xfer_type(xfer), vbo(0), buf(NULL) { + glGenBuffersARB(1 , &vbo); + } + + ~VBO() { + glDeleteBuffersARB(1, &vbo); + } + + void bind() { + glBindBufferARB(BUFTYPE, vbo); + } + + void data(size_t size, void *mem = NULL) { + glBufferDataARB(BUFTYPE, sizeof(Transfer) * (vbo_size = size), mem, xfer_type); + } + + void data(void *mem = NULL) { + glBufferDataARB(BUFTYPE, sizeof(Transfer) * vbo_size, mem, xfer_type); + } + + void map(AccessType access = WO) { + buf = base = (Transfer *)glMapBufferARB(BUFTYPE, access); + } + + void push(const Transfer *data) { + *buf++ = *data; + } + void push(const Transfer *data, int count) { + while (count--) *buf++ = *data; + } + void pull(Transfer *data) { + *data = *buf++; + } + void pull(const Transfer *data, int count) { + while (count--) *data = *buf++; + } + + Transfer &operator[](int i) { + return base[i]; + } + + void unmap() { + glUnmapBufferARB(BUFTYPE); + buf = base = NULL; + } + + void unbind() { + glBindBufferARB(BUFTYPE, 0); + } + private: + VBO(); + VBO(const VBO &); + VBO &operator=(const VBO &); + }; + + typedef VBO IBO32; + typedef VBO IBO16; + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vector.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vector.hpp new file mode 100644 index 00000000..6e531ea4 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vector.hpp @@ -0,0 +1,129 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include +#include +#include + +namespace gloop { + + struct V2 { + union { + struct { float x, y; }; + struct { float r, g; }; + struct { float s, t; }; + float v[2]; + }; + + V2(float _x, float _y) : x(_x), y(_y) { } + V2() : x(0.0f), y(0.0f) { } + V2(const float *_v) { memcpy(v, _v, sizeof(v)); } + }; + + static inline V2 &operator+=(V2 &a, const V2 &b) { a.x += b.x; a.y += b.y; return a; } + static inline V2 operator+(const V2 &a, const V2 &b) { V2 r(a); return r += b; } + + static inline V2 &operator-=(V2 &a, const V2 &b) { a.x -= b.x; a.y -= b.y; return a; } + static inline V2 operator-(const V2 &a, const V2 &b) { V2 r(a); return r -= b; } + + static inline V2 &operator*=(V2 &a, float &b) { a.x *= b; a.y *= b; return a; } + static inline V2 operator*(const V2 &a, float b) { V2 r(a); return r *= b; } + + static inline V2 &operator/=(V2 &a, float &b) { a.x /= b; a.y /= b; return a; } + static inline V2 operator/(const V2 &a, float b) { V2 r(a); return r /= b; } + + static inline float dot(const V2 &a, const V2 &b) { return a.x * b.x + a.y * b.y; } + static inline float cross(const V2 &a, const V2 &b) { + return a.x * b.y - a.y * b.x; + } + + + + struct V3 { + union { + struct { float x, y, z; }; + struct { float r, g, b; }; + struct { float s, t, p; }; + float v[3]; + }; + + V3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } + V3() : x(0.0f), y(0.0f), z(0.0f) { } + V3(const float *_v) { memcpy(v, _v, sizeof(v)); } + }; + + static inline V3 &operator+=(V3 &a, const V3 &b) { a.x += b.x; a.y += b.y; a.z += b.z; return a; } + static inline V3 operator+(const V3 &a, const V3 &b) { V3 r(a); return r += b; } + + static inline V3 &operator-=(V3 &a, const V3 &b) { a.x -= b.x; a.y -= b.y; a.z -= b.z; return a; } + static inline V3 operator-(const V3 &a, const V3 &b) { V3 r(a); return r -= b; } + + static inline V3 &operator*=(V3 &a, float &b) { a.x *= b; a.y *= b; a.z *= b; return a; } + static inline V3 operator*(const V3 &a, float b) { V3 r(a); return r *= b; } + + static inline V3 &operator/=(V3 &a, float &b) { a.x /= b; a.y /= b; a.z /= b; return a; } + static inline V3 operator/(const V3 &a, float b) { V3 r(a); return r /= b; } + + static inline float dot(const V3 &a, const V3 &b) { return a.x * b.x + a.y * b.y + a.z * b.z; } + static inline V3 cross(const V3 &a, const V3 &b) { + return V3(+(a.y * b.z - a.z * b.y), -(a.x * b.z - a.z * b.x), +(a.x * b.y - a.y * b.x)); + } + + + + struct V4 { + union { + struct { float x, y, z, w; }; + struct { float r, g, b, a; }; + struct { float s, t, p, q; }; + float v[4]; + }; + + V4(float _x, float _y, float _z, float _w = 1.0f) : x(_x), y(_y), z(_z), w(_w) { } + V4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { } + V4(const float *_v) { memcpy(v, _v, sizeof(v)); } + }; + + static inline V4 &operator+=(V4 &a, const V4 &b) { a.x += b.x; a.y += b.y; a.z += b.z; a.w += b.w; return a; } + static inline V4 operator+(const V4 &a, const V4 &b) { V4 r(a); return r += b; } + + static inline V4 &operator-=(V4 &a, const V4 &b) { a.x -= b.x; a.y -= b.y; a.z -= b.z; a.w -= b.w; return a; } + static inline V4 operator-(const V4 &a, const V4 &b) { V4 r(a); return r -= b; } + + static inline V4 &operator*=(V4 &a, float &b) { a.x *= b; a.y *= b; a.z *= b; a.w *= b; return a; } + static inline V4 operator*(const V4 &a, float b) { V4 r(a); return r *= b; } + + static inline V4 &operator/=(V4 &a, float &b) { a.x /= b; a.y /= b; a.z /= b; a.w /= b; return a; } + static inline V4 operator/(const V4 &a, float b) { V4 r(a); return r /= b; } + + static inline float dot(const V4 &a, const V4 &b) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vertexformat.hpp b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vertexformat.hpp new file mode 100644 index 00000000..763ccd4f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/include/gloop/vertexformat.hpp @@ -0,0 +1,62 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include + +#include + +#include + +namespace gloop { + + namespace vf { + struct V3F_N3F { + typedef V3F_N3F self; + + V3 v, n; + + static inline void install() { + const static void *_off_v = (const void *)offsetof(self, v); + const static void *_off_n = (const void *)offsetof(self, n); + glEnableClientState(GL_NORMAL_ARRAY); + glNormalPointer(GL_FLOAT, sizeof(self), _off_n); + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3, GL_FLOAT, sizeof(self), _off_v); + } + static inline void uninstall() { + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + } + }; + }; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/fbo.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/fbo.cpp new file mode 100644 index 00000000..058024d2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/fbo.cpp @@ -0,0 +1,107 @@ +#include + +namespace gloop { + + std::vector FrameBuffer::s_bound_fbo(1, 0); + + bool FrameBuffer::_attach(GLenum target, const Surface::Ptr &surf, GLenum attachment, int mipmap_level) { + if (surf == NULL || surf->gl_id == 0) return false; + if (surf->desc.is_texture) { + glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, target, surf->gl_id, mipmap_level); + } else { + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, attachment, target, surf->gl_id); + } + return true; + } + + FrameBuffer::FrameBuffer(unsigned _width, unsigned _height) : width(_width), height(_height), fbo(0) { + } + + void FrameBuffer::add(GLenum target, const Surface::Ptr &surf) { + if (target != GL_TEXTURE_2D && + target != GL_TEXTURE_RECTANGLE_ARB && + target != GL_RENDERBUFFER_EXT && + !(GL_TEXTURE_CUBE_MAP_POSITIVE_X <= target && target < GL_TEXTURE_CUBE_MAP_POSITIVE_X + 6)) { + throw std::runtime_error("Invalid target"); + } + + switch (surf->desc.surface_type) { + case SURF_NONE: + throw std::runtime_error("Invalid surface"); + case SURF_COLOUR: + colour.push_back(std::make_pair(target, surf)); + break; + case SURF_DEPTH: + depth = std::make_pair(target, surf); + break; + case SURF_STENCIL: + stencil = std::make_pair(target, surf); + break; + case SURF_DEPTH_STENCIL: + depth = stencil = std::make_pair(target, surf); + break; + } + } + + void FrameBuffer::add(const Surface::Ptr &surf) { + add(surf->desc.gl_tgt, surf); + } + + void FrameBuffer::init() { + for (unsigned i = 0; i < colour.size(); ++i) { + colour[i].second->init(width, height); + } + + if (depth.second != NULL) depth.second->init(width, height); + if (stencil.second != NULL && depth.second != stencil.second) stencil.second->init(width, height); + + glGenFramebuffersEXT(1, &fbo); + if (fbo == 0) { + throw std::runtime_error("Failed to create Framebuffer"); + } + } + + void FrameBuffer::pushBind() { + if (fbo != s_bound_fbo.back()) { + glFlush(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); + } + s_bound_fbo.push_back(fbo); + } + + void FrameBuffer::bind() { + if (s_bound_fbo.size() == 1) { + pushBind(); + } else { + if (fbo != s_bound_fbo.back()) { + glFlush(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); + s_bound_fbo.back() = fbo; + } + } + } + + void FrameBuffer::popBind() { + if (s_bound_fbo.size() > 1) { + GLuint cur_fbo = s_bound_fbo.back(); + s_bound_fbo.pop_back(); + if (cur_fbo != s_bound_fbo.back()) { + glFlush(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, s_bound_fbo.back()); + } + } + } + + void FrameBuffer::attach(int mipmap_level) { + if (fbo == 0) throw std::runtime_error("Not initialized"); + + bind(); + + for (unsigned i = 0; i < colour.size(); ++i) { + _attach(colour[i].first, colour[i].second, GL_COLOR_ATTACHMENT0_EXT + i, mipmap_level); + } + _attach(depth.first, depth.second, GL_DEPTH_ATTACHMENT_EXT, mipmap_level); + _attach(stencil.first, stencil.second, GL_STENCIL_ATTACHMENT_EXT, mipmap_level); + } + +} \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/matrix.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/matrix.cpp new file mode 100644 index 00000000..becb2b2f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/matrix.cpp @@ -0,0 +1,35 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +namespace gloop { + + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/model/obj_format.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/model/obj_format.cpp new file mode 100644 index 00000000..09ed3ede --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/model/obj_format.cpp @@ -0,0 +1,450 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include + +#include +#include + + + +namespace gloop { + namespace obj { + + bool ObjReader::readDoubles(std::istream &in, + stream::reader_base *e_rd, + stream::reader_base **v_rd, + size_t min_count, + size_t rd_count, + const double *defaults) { + size_t i = 0; + if (e_rd) e_rd->next(); + while (in.good() && i < rd_count) { + double d; + in >> d; + if (v_rd[i]) { + v_rd[i]->begin(); + v_rd[i]->length(1); + v_rd[i]->next(); + v_rd[i]->_val(d); + v_rd[i]->end(); + } + ++i; + } + if (i < min_count) return false; + while (i < rd_count) { + if (v_rd[i]) { + v_rd[i]->begin(); + v_rd[i]->length(1); + v_rd[i]->next(); + v_rd[i]->_val(defaults[i]); + v_rd[i]->end(); + } + ++i; + } + return true; + } + + bool ObjReader::readIntLists(std::istream &in, + stream::reader_base *e_rd, + stream::reader_base **v_rd, + size_t rd_count) { + if (e_rd) e_rd->next(); + + std::string s; + std::getline(in, s); + std::vector blocks; + str::split(std::back_inserter(blocks), s); + + if (!blocks.size()) return false; + + std::vector r1, r2; + str::split(std::back_inserter(r1), blocks[0], '/'); + if (r1.size() > rd_count) return false; + + for (size_t i = 1; i < blocks.size(); ++i) { + r2.clear(); + str::split(std::back_inserter(r2), blocks[i], '/'); + if (r1.size() != r2.size()) return false; + for (size_t j = 0; j < r1.size(); ++j) { + if ((r1[j]=="") != (r2[j]=="")) return false; + } + } + + for (size_t i = 0; i < std::min(rd_count, r1.size()); ++i) { + if (v_rd[i] && r1[i].size()) { + v_rd[i]->begin(); + v_rd[i]->length(blocks.size()); + } + } + + for (size_t i = 0; i < blocks.size(); ++i) { + r1.clear(); + str::split(std::back_inserter(r1), blocks[i], '/'); + for (size_t j = 0; j < std::min(rd_count, r1.size()); ++j) { + if (v_rd[j]) { + size_t v = strtoul(r1[j].c_str(), NULL, 10); + v_rd[j]->next(); + v_rd[j]->_val((uint32_t)v - 1); + } + } + } + + for (size_t j = 0; j < std::min(rd_count, r1.size()); ++j) { + if (v_rd[j]) { + v_rd[j]->end(); + } + } + + return true; + } + + bool ObjReader::read(std::istream &in) { + stream::reader_base *v_rd[5]; + stream::reader_base *vp_rd[4]; + stream::reader_base *vn_rd[4]; + stream::reader_base *vt_rd[4]; + + stream::reader_base *p_rd[2]; + stream::reader_base *l_rd[3]; + stream::reader_base *f_rd[4]; + + stream::reader_base *rd = findReader("polyhedron"); + if (rd) { + rd->begin(); + } + + v_rd[0] = findReader("polyhedron", "vertex"); + v_rd[1] = findReader("polyhedron", "vertex", "x"); + v_rd[2] = findReader("polyhedron", "vertex", "y"); + v_rd[3] = findReader("polyhedron", "vertex", "z"); + v_rd[4] = findReader("polyhedron", "vertex", "w"); + + vp_rd[0] = findReader("polyhedron", "parameter"); + vp_rd[1] = findReader("polyhedron", "parameter", "u"); + vp_rd[2] = findReader("polyhedron", "parameter", "v"); + vp_rd[3] = findReader("polyhedron", "parameter", "w"); + + vn_rd[0] = findReader("polyhedron", "normal"); + vn_rd[1] = findReader("polyhedron", "normal", "x"); + vn_rd[2] = findReader("polyhedron", "normal", "y"); + vn_rd[3] = findReader("polyhedron", "normal", "z"); + + vt_rd[0] = findReader("polyhedron", "texture"); + vt_rd[1] = findReader("polyhedron", "texture", "u"); + vt_rd[2] = findReader("polyhedron", "texture", "v"); + vt_rd[3] = findReader("polyhedron", "texture", "w"); + + p_rd[0] = findReader("polyhedron", "point"); + p_rd[1] = findReader("polyhedron", "point", "vertex_indices"); + + l_rd[0] = findReader("polyhedron", "line"); + l_rd[1] = findReader("polyhedron", "line", "vertex_indices"); + l_rd[2] = findReader("polyhedron", "line", "texture_indices"); + + f_rd[0] = findReader("polyhedron", "face"); + f_rd[1] = findReader("polyhedron", "face", "vertex_indices"); + f_rd[2] = findReader("polyhedron", "face", "texture_indices"); + f_rd[3] = findReader("polyhedron", "face", "normal_indices"); + + while (in.good()) { + std::string s = ""; + while (1) { + std::string t; + std::getline(in, t); + if (t.size() && t[0] == '#') continue; + t.erase(t.begin() + t.find_last_not_of("\r\n") + 1, t.end()); + s += t; + if (s[s.size() - 1] != '\\') break; + s.erase(s.end() - 1); + } + if (str::strip(s) == "") continue; + std::istringstream inl(s); + std::string cmd; + inl >> cmd; + bool result; + // doesn't call element.begin/end/fail/length + if (cmd == "v") { + static const double defaults[] = { 0.0, 0.0, 0.0, 1.0 }; + result = readDoubles(inl, v_rd[0] , v_rd+1, 3, 4, defaults); + } else if (cmd == "vp") { + static const double defaults[] = { 0.0, 0.0, 1.0 }; + result = readDoubles(inl, vp_rd[0], vp_rd+1, 2, 3, defaults); + } else if (cmd == "vn") { + static const double defaults[] = { 0.0, 0.0, 0.0 }; + result = readDoubles(inl, vn_rd[0], vn_rd+1, 3, 3, defaults); + } else if (cmd == "vt") { + static const double defaults[] = { 0.0, 0.0, 0.0 }; + result = readDoubles(inl, vt_rd[0], vt_rd+1, 1, 3, defaults); + } else if (cmd == "p") { + result = readIntLists(inl, p_rd[0], p_rd+1, 1); + } else if (cmd == "l") { + result = readIntLists(inl, p_rd[0], l_rd+1, 2); + } else if (cmd == "f") { + result = readIntLists(inl, p_rd[0], f_rd+1, 3); + } else { + std::cerr << "warning: unhandled OBJ element [" << cmd << "]" << std::endl; + result = true; + } + if (result == false) { + if (rd) rd->fail(); + return false; + } + } + + if (rd) rd->end(); + return true; + } + + } +} + + +namespace { + + struct prop { + virtual bool setup(const gloop::stream::named_element_t *) const =0; + virtual std::string next() const =0; + virtual ~prop() {} + }; + + struct dbl : public prop { + bool has_default; + std::string def; + mutable gloop::stream::named_prop_t *prop; + std::string propname; + + dbl(const char *pn, const char *defval = NULL) : has_default(false), def(), prop(NULL), propname(pn) { + if (defval) { + def = defval; + has_default = true; + } + } + virtual ~dbl() {} + virtual bool setup(const gloop::stream::named_element_t *elem) const { + prop = elem->findProp(propname); + if (prop == NULL && !has_default) return false; + if (prop != NULL && prop->wt == NULL) return false; + return true; + } + virtual std::string next() const { + double v; + std::ostringstream s; + if (prop == NULL) { + return def; + } + prop->wt->begin(); + prop->wt->next(); + prop->wt->_val(v); + prop->wt->end(); + s<< std::setprecision(30); + s << v; + return s.str(); + } + }; + + struct face : public prop { + mutable gloop::stream::named_prop_t *v_prop; + mutable gloop::stream::named_prop_t *vt_prop; + mutable gloop::stream::named_prop_t *vn_prop; + int n; + size_t v_base, vt_base, vn_base; + + face(size_t _v_base, size_t _vt_base, size_t _vn_base) : + v_prop(NULL), vt_prop(NULL), vn_prop(NULL), + n(0), + v_base(_v_base), vt_base(_vt_base), vn_base(_vn_base) { + } + virtual ~face() {} + + virtual bool setup(const gloop::stream::named_element_t *elem) const { + v_prop = elem->findProp("vertex_indices"); + if (v_prop == NULL || v_prop->wt == NULL) return false; + vt_prop = elem->findProp("texture_indices"); + if (vt_prop != NULL && vt_prop->wt == NULL) return false; + vn_prop = elem->findProp("normal_indices"); + if (vn_prop != NULL && vn_prop->wt == NULL) return false; + return true; + } + virtual std::string next() const { + std::ostringstream s; + + v_prop->wt->begin(); + if (vt_prop) vt_prop->wt->begin(); + if (vn_prop) vn_prop->wt->begin(); + + + int n = v_prop->wt->length(); + int n_t = vt_prop ? vt_prop->wt->length() : -1; + int n_n = vn_prop ? vn_prop->wt->length() : -1; + + if (n_t == -1) n_t = n; + if (n_n == -1) n_n = n; + if (n_n != n || n_t != n) { + std::cerr << "warning: face vertex/normal/texture indices are of different length" << std::endl; + n = std::min(std::min(n, n_n), n_t); + } + + for (int i = 0; i < n; ++i) { + if (i) s << " "; + uint32_t idx; + v_prop->wt->next(); + v_prop->wt->_val(idx); + idx += v_base; + s << idx; + if (vt_prop || vn_prop) s << "/"; + if (vt_prop) { + vt_prop->wt->next(); + vt_prop->wt->_val(idx); + idx += vt_base; + s << idx; + } + if (vn_prop) { + vn_prop->wt->next(); + vn_prop->wt->_val(idx); + idx += vn_base; + s << "/" << idx; + } + } + + v_prop->wt->end(); + if (vt_prop) vt_prop->wt->end(); + if (vn_prop) vn_prop->wt->end(); + + return s.str(); + } + }; + + struct null : public prop { + virtual ~null() {} + + virtual bool setup(const gloop::stream::named_element_t *elem) const { + return true; + } + virtual std::string next() const { + return ""; + } + }; + + int writeElems(std::ostream &out, + const gloop::stream::block_t &block, + const char *objtype, + const char *elem_name, + const prop &p1, + const prop &p2 = null(), + const prop &p3 = null(), + const prop &p4 = null()) { + gloop::stream::named_element_t *elem = block.findElem(elem_name); + if (elem == NULL) return 0; + if (elem->wt == NULL) return -1; + size_t n = elem->wt->length(); + elem->wt->begin(); + if (!p1.setup(elem)) { elem->wt->fail(); return -1; } + if (!p2.setup(elem)) { elem->wt->fail(); return -1; } + if (!p3.setup(elem)) { elem->wt->fail(); return -1; } + if (!p4.setup(elem)) { elem->wt->fail(); return -1; } + for (size_t i = 0; i < n; ++i) { + std::string s; + elem->wt->next(); + out << objtype; + s = p1.next(); if (s != "") out << " " << s; + s = p2.next(); if (s != "") out << " " << s; + s = p3.next(); if (s != "") out << " " << s; + s = p4.next(); if (s != "") out << " " << s; + out << std::endl; + } + elem->wt->end(); + return (int)n; + } + +} + +namespace gloop { + namespace obj { + + bool ObjWriter::write(std::ostream &out) { + size_t v_base = 1; + size_t vt_base = 1; + size_t vn_base = 1; + + int v_count; + int vt_count; + int vn_count; + int f_count; + + for (std::list >::iterator i = blocks.begin(); i != blocks.end(); ++i) { + stream::block_t &block = (*i).second; + + if (block.wt != NULL) block.wt->begin(); + out << "g " << (*i).first << std::endl; + + if (block.name == "polyhedron") { + v_count = writeElems(out, block, "v", "vertex", dbl("x"), dbl("y"), dbl("z"), dbl("w", "")); + if (v_count == -1) goto fail; + vn_count = writeElems(out, block, "vn", "normal", dbl("x"), dbl("y"), dbl("z")); + if (vn_count == -1) goto fail; + vt_count = writeElems(out, block, "vt", "texture", dbl("u"), dbl("v"), dbl("w", "")); + if (vt_count == -1) goto fail; + + f_count = writeElems(out, block, "f", "face", face(v_base, vt_base, vn_base)); + if (f_count == -1) goto fail; + + v_base += v_count; + vn_base += vn_count; + vt_base += vt_count; + + } else if (block.name == "polyline") { + v_count = writeElems(out, block, "v", "vertex", dbl("x"), dbl("y"), dbl("z"), dbl("w", "")); + if (v_count == -1) goto fail; + vt_count = writeElems(out, block, "vt", "texture", dbl("u"), dbl("v"), dbl("w", "")); + if (vt_count == -1) goto fail; + + v_base += v_count; + vt_base += vt_count; + + } else { + std::cerr << "unhandled block type: " << block.name << std::endl; + + } + + if (block.wt != NULL) block.wt->end(); + continue; + + fail: + if (block.wt != NULL) block.wt->fail(); + return false; + } + return true; + } + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/model/ply_format.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/model/ply_format.cpp new file mode 100644 index 00000000..2c4453af --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/model/ply_format.cpp @@ -0,0 +1,756 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include + +#include +#include +#include + +#ifdef WIN32 + +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; + +#else + +#include +#include + +#endif + +namespace { + + const char *typestr(int t) { + static const char *_typestr[] = { "char", "uchar", "short", "ushort", "int", "uint", "float", "double" }; + return _typestr[t]; + } + + int strtype(const char *s) { + if (s[0] == 'u') { + if (!std::strcmp(s, "uchar" ) || !std::strcmp(s, "uint8" )) return gloop::stream::U8; + if (!std::strcmp(s, "ushort" ) || !std::strcmp(s, "uint16" )) return gloop::stream::U16; + if (!std::strcmp(s, "uint" ) || !std::strcmp(s, "uint32" )) return gloop::stream::U32; + } else if (s[0] == 'i') { + if (!std::strcmp(s, "int8" ) ) return gloop::stream::I8; + if (!std::strcmp(s, "int16" ) ) return gloop::stream::I16; + if (!std::strcmp(s, "int" ) || !std::strcmp(s, "int32" )) return gloop::stream::I32; + } else { + if (!std::strcmp(s, "char" ) ) return gloop::stream::I8; + if (!std::strcmp(s, "short" ) ) return gloop::stream::I16; + if (!std::strcmp(s, "float" ) || !std::strcmp(s, "float32")) return gloop::stream::F32; + if (!std::strcmp(s, "double" ) || !std::strcmp(s, "float64")) return gloop::stream::F64; + } + return -1; + } + + inline int is_big_endian() { + long one= 1; + return !(*((char *)(&one))); + } + + inline void _copy(char *a, const char *b, int size, bool swap) { + if (swap) { + for (b += size; size--; *a++ = *--b); + } else { + for (; size--; *a++ = *b++); + } + } + + template + bool _parse(std::istream &in, T &val); + + template<> + bool _parse(std::istream &in, int8_t &val) { + int32_t v; in >> v; if (v < -128 || v > 127) return false; val = (int8_t)v; return true; + } + + template<> + bool _parse(std::istream &in, uint8_t &val) { + uint32_t v; in >> v; if (v > 255) return false; val = (uint8_t)v; return true; + } + + template<> + bool _parse(std::istream &in, int16_t &val) { + int32_t v; in >> v; if (v < -32768 || v > 32767) return false; val = (int16_t)v; return true; + } + + template<> + bool _parse(std::istream &in, uint16_t &val) { + uint32_t v; in >> v; if (v > 65535) return false; val = (uint16_t)v; return true; + } + + template<> + bool _parse(std::istream &in, int32_t &val) { + in >> val; return true; + } + + template<> + bool _parse(std::istream &in, uint32_t &val) { + in >> val; return true; + } + + template<> + bool _parse(std::istream &in, float &val) { + in >> val; return true; + } + + template<> + bool _parse(std::istream &in, double &val) { + in >> val; return true; + } + + template + bool _parse(std::istream &in, int type, T &out) { + switch (type) { + case gloop::stream::I8: { int8_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::I16: { int16_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::I32: { int32_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::U8: { uint8_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::U16: { uint16_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::U32: { uint32_t c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::F32: { float c; if (!_parse(in, c)) return false; out = T(c); return true; } + case gloop::stream::F64: { double c; if (!_parse(in, c)) return false; out = T(c); return true; } + default: return false; + } + } + + template + inline void _read(const char *mem, bool byteswap, int type, T &out) { + switch (type) { + case gloop::stream::I8: { int8_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::U8: { uint8_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::I16: { int16_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::U16: { uint16_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::I32: { int32_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::U32: { uint32_t c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::F32: { float c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + case gloop::stream::F64: { double c; _copy((char *)&c, mem, sizeof(c), byteswap); out = (T)c; return; } + } + } + + template + inline void _write(char *mem, bool byteswap, int type, T &in) { + switch (type) { + case gloop::stream::I8: { int8_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::U8: { uint8_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::I16: { int16_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::U16: { uint16_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::I32: { int32_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::U32: { uint32_t c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::F32: { float c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + case gloop::stream::F64: { double c(in); _copy(mem, (const char *)&c, sizeof(c), byteswap); return; } + } + } + + bool prop_read(const char *mem, int type, bool byteswap, gloop::stream::reader_base *rd) { + switch (type) { + case gloop::stream::I8: { int8_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::U8: { uint8_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::I16: { int16_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::U16: { uint16_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::I32: { int32_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::U32: { uint32_t c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::F32: { float c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + case gloop::stream::F64: { double c; _copy((char *)&c, mem, sizeof(c), byteswap); rd->_val(c); return true; } + default: return false; + } + } + + bool prop_read(std::istream &in, int type, gloop::stream::reader_base *rd) { + switch (type) { + case gloop::stream::I8: { int8_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::I16: { int16_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::I32: { int32_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::U8: { uint8_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::U16: { uint16_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::U32: { uint32_t c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::F32: { float c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + case gloop::stream::F64: { double c; if (!_parse(in, c)) return false; rd->_val(c); return true; } + default: return false; + } + } + + bool prop_write(char *mem, int type, bool byteswap, gloop::stream::writer_base *wt) { + switch (type) { + case gloop::stream::I8: { int8_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::U8: { uint8_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::I16: { int16_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::U16: { uint16_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::I32: { int32_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::U32: { uint32_t c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::F32: { float c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + case gloop::stream::F64: { double c; wt->_val(c); _copy(mem, (char *)&c, sizeof(c), byteswap); return true; } + default: return false; + } + } + + bool prop_write(std::ostream &out, int type, gloop::stream::writer_base *wt) { + switch (type) { + case gloop::stream::I8: { int8_t c; wt->_val(c); out << (int32_t)c; return true; } + case gloop::stream::U8: { uint8_t c; wt->_val(c); out << (uint32_t)c; return true; } + case gloop::stream::I16: { int16_t c; wt->_val(c); out << (int32_t)c; return true; } + case gloop::stream::U16: { uint16_t c; wt->_val(c); out << (uint32_t)c; return true; } + case gloop::stream::I32: { int32_t c; wt->_val(c); out << (int32_t)c; return true; } + case gloop::stream::U32: { uint32_t c; wt->_val(c); out << (uint32_t)c; return true; } + case gloop::stream::F32: { float c; wt->_val(c); out << (float)c; return true; } + case gloop::stream::F64: { double c; wt->_val(c); out << (double)c; return true; } + default: return false; + } + } + + bool _skip(std::istream &in, int type) { + switch (type) { + case gloop::stream::I8: case gloop::stream::I16: case gloop::stream::I32: { int32_t v; in >> v; return true; } + case gloop::stream::U8: case gloop::stream::U16: case gloop::stream::U32: { uint32_t v; in >> v; return true; } + case gloop::stream::F32: case gloop::stream::F64: { double v; in >> v; return true; } + default: + return false; + } + } + + struct prop_info { + std::string name; + int count_type; + int type; + bool is_list; + gloop::stream::reader_base *rd; + gloop::stream::writer_base *wt; + + prop_info(const std::string &s) : name(), count_type(0), type(0), is_list(false), rd(NULL), wt(NULL) { + char s_count_type[32], s_type[32], s_name[128]; + if (sscanf(s.c_str(), "property list %s %s %s", s_count_type, s_type, s_name) == 3) { + name = s_name; + count_type = strtype(s_count_type); + type = strtype(s_type); + is_list = true; + } else if (sscanf(s.c_str(), "property %s %s", s_type, s_name) == 2) { + name = s_name; + if (name == "vertex_index") name = "vertex_indices"; + count_type = -1; + type = strtype(s_type); + is_list = false; + } else { + name = ""; + count_type = -1; + type = -1; + is_list = false; + } + } + + bool writeBinary(std::ostream &out, bool byteswap) const { + if (wt == NULL) { + return false; + } + char buf[8]; + size_t sz = gloop::stream::type_size(type); + size_t len = 1; + + wt->begin(); + if (is_list) { + size_t cts = gloop::stream::type_size(count_type); + len = wt->length(); + _write(buf, byteswap, count_type, len); + out.write(buf, cts); + if (out.fail()) { + wt->fail(); + return false; + } + } + for (size_t i = 0; i < len; ++i) { + wt->next(); + prop_write(buf, type, byteswap, wt); + out.write(buf, sz); + if (out.fail()) { + wt->fail(); + return false; + } + } + wt->end(); + return true; + } + + bool writeAscii(std::ostream &out) const { + if (wt == NULL) { + return false; + } + size_t sz = gloop::stream::type_size(type); + size_t len = 1; + bool first = true; + + wt->begin(); + if (is_list) { + len = wt->length(); + out << len; first = false; + } + for (size_t i = 0; i < len; ++i) { + wt->next(); + if (first) { first = false; } else { out << " "; } + prop_write(out, type, wt); + } + wt->end(); + return true; + } + + bool readBinary(std::istream &in, bool byteswap) const { + size_t len = 1; + size_t sz = gloop::stream::type_size(type); + + char buf[8]; + if (is_list) { + size_t cts = gloop::stream::type_size(count_type); + in.read(buf, cts); if (in.gcount() != cts) return false; + _read(buf, byteswap, count_type, len); + } + if (rd == NULL) { + in.seekg(len * sz, std::ios_base::cur); + } else { + rd->begin(); + rd->length(len); + for (size_t i = 0; i < len; ++i) { + rd->next(); + in.read(buf, sz); + if (in.gcount() != sz) { + rd->fail(); + return false; + } + prop_read(buf, type, byteswap, rd); + } + rd->end(); + } + return true; + } + + bool readAscii(std::istream &in) const { + size_t len = 1; + size_t sz = gloop::stream::type_size(type); + + if (is_list) { + if (!_parse(in, count_type, len)) return false; + } + if (rd != NULL) { + rd->begin(); + rd->length(len); + for (size_t i = 0; i < len; ++i) { + rd->next(); + if (!prop_read(in, type, rd)) { + rd->fail(); + return false; + } + } + rd->end(); + } else { + for (size_t i = 0; i < len; ++i) { + if (!_skip(in, type)) { + return false; + } + } + } + return true; + } + + std::string header() const { + std::ostringstream s; + if (is_list) { + s << "property list " << typestr(count_type) << " " << typestr(type) << " " << name; + } else { + s << "property " << typestr(type) << " " << name; + } + + return s.str(); + } + }; + + + + struct elem_info { + std::string name; + int count; + std::vector props; + gloop::stream::reader_base *rd; + gloop::stream::writer_base *wt; + + bool match(const char *elem_name, ...) const { + if (elem_name != name) { + return false; + } + bool ok = true; + va_list args; + va_start(args, elem_name); + while (ok) { + const char *prop = va_arg(args, const char *); + if (!prop) break; + ok = false; + for (size_t i = 0; i < props.size(); ++i) { + if (props[i].name == prop) { + ok = true; + break; + } + } + } + va_end(args); + return ok; + } + + elem_info(const std::string &s) : name(), count(0), props(), rd(NULL), wt(NULL) { + char s_elem_name[128]; + unsigned long elem_count; + if (sscanf(s.c_str(), "element %s %lu", s_elem_name, &elem_count) == 2) { + name = s_elem_name; + count = elem_count; + } else { + name = ""; + count = -1; + } + } + + std::string header() const { + std::ostringstream s; + s << "element " << name << " " << count; + return s.str(); + } + }; + + + + std::list::iterator matchPolyhedronElements(std::list::iterator b, + std::list::iterator e) { + std::list::iterator i = b; + if (i == e || !(*i).match("vertex", "x", "y", "z", NULL)) return b; + ++i; + int face_elem_count = 0; + while (i != e) { + if ((*i).match("face", "vertex_indices", NULL) || + (*i).match("tristrips", "vertex_indices", NULL)) { + ++i; + ++face_elem_count; + } else { + break; + } + } + if (face_elem_count == 0) return b; + return i; + } + + + + std::list::iterator matchPolylineElements(std::list::iterator b, + std::list::iterator e) { + std::list::iterator i = b; + if (i == e || !(*i).match("vertex", "x", "y", "z", NULL)) return b; + ++i; + if (i == e || !(*i).match("polyline", "closed", "vertex_indices", NULL)) { + return b; + } + return ++i; + } + + + + std::list::iterator matchPointSetElements(std::list::iterator b, + std::list::iterator e) { + std::list::iterator i = b; + if (i == e || !(*i).match("vertex", "x", "y", "z", NULL)) return b; + return ++i; + } + + + + bool readBlock(std::istream &in, + bool binary, + bool byteswap, + gloop::ply::PlyReader &reader, + gloop::stream::block_t *base, + std::list::iterator b, + std::list::iterator e) { + bool result = true; + if (base && base->rd != NULL) base->rd->begin(); + while (b != e) { + gloop::stream::named_element_t *elem = NULL; + if (base) elem = base->findElem((*b).name); + + if (elem != NULL && elem->rd != NULL) { + (*b).rd = elem->rd.ptr(); + elem->rd->begin(); + elem->rd->length((*b).count); + } + + for (size_t j = 0; j < (*b).props.size(); ++j) { + prop_info &pi = (*b).props[j]; + gloop::stream::named_prop_t *prop = NULL; + if (elem) prop = elem->findProp(pi.name); + if (prop) pi.rd = prop->rd.ptr(); + } + + for (int i = 0; i < (*b).count; ++i) { + if ((*b).rd) (*b).rd->next(); + for (size_t j = 0; j < (*b).props.size(); ++j) { + prop_info &pi = (*b).props[j]; + bool ok; + if (binary) { + ok = pi.readBinary(in, byteswap); + } else { + ok = pi.readAscii(in); + } + if (!ok) { + if ((*b).rd) (*b).rd->fail(); + result = false; + goto done; + } + } + } + + if ((*b).rd) (*b).rd->end(); + + ++b; + } + + done:; + if (base && base->rd != NULL) { + if (result) { + base->rd->end(); + } else { + base->rd->fail(); + } + } + + return result; + } + + bool readPolyhedron(std::istream &in, + bool binary, + bool byteswap, + gloop::ply::PlyReader &reader, + std::list::iterator b, + std::list::iterator e) { + return readBlock(in, + binary, + byteswap, + reader, + reader.findBlock("polyhedron"), + b, + e); + } + + + + bool readPolyline(std::istream &in, + bool binary, + bool byteswap, + gloop::ply::PlyReader &reader, + std::list::iterator b, + std::list::iterator e) { + return readBlock(in, + binary, + byteswap, + reader, + reader.findBlock("polyline"), + b, + e); + } + + + + bool readPointSet(std::istream &in, + bool binary, + bool byteswap, + gloop::ply::PlyReader &reader, + std::list::iterator b, + std::list::iterator e) { + return readBlock(in, + binary, + byteswap, + reader, + reader.findBlock("pointset"), + b, + e); + } + +} + +namespace gloop { + namespace ply { + + bool PlyReader::read(std::istream &in) { + bool binary = false; + bool byteswap = false; + + std::string s; + std::getline(in, s); + if (str::rstrip(s) != "ply") { + throw exception("bad PLY header"); + } + + char fmt[128], ver[128]; + std::getline(in, s); + if (sscanf(s.c_str(), "format %s %s", fmt, ver) == 2) { + if (!std::strcmp(fmt, "ascii")) binary = false; + else if (!std::strcmp(fmt, "binary_big_endian")) { binary = true; byteswap = !is_big_endian(); } + else if (!std::strcmp(fmt, "binary_little_endian")) { binary = true; byteswap = is_big_endian(); } + else { + throw exception(str::format() << "bad PLY format [" << fmt << "]"); + } + } else { + throw exception(str::format() << "bad PLY header [" << s << "]"); + } + + std::list elements; + + while (1) { + std::getline(in, s); + if (str::startswith(s, "end_header")) break; + else if (str::startswith(s, "comment")) continue; + else if (str::startswith(s, "element")) { + elements.push_back(elem_info(s)); + if (elements.back().name == "") { + throw exception(str::format() << "bad PLY header [" << s << "]"); + } + } else if (str::startswith(s, "property")) { + elements.back().props.push_back(prop_info(s)); + if (elements.back().props.back().name == "") { + throw exception(str::format() << "bad PLY header [" << s << "]"); + } + } else { + throw exception(str::format() << "bad PLY header [" << s << "]"); + } + } + + std::list::iterator i = elements.begin(); + std::list::iterator e = elements.end(); + std::list::iterator j; + while (i != e) { + j = matchPolyhedronElements(i, e); + if (j != i) { + readPolyhedron(in, binary, byteswap, *this, i, j); + i = j; + continue; + } + j = matchPolylineElements(i, e); + if (j != i) { + readPolyline(in, binary, byteswap, *this, i, j); + i = j; + continue; + } + j = matchPointSetElements(i, e); + if (j != i) { + readPointSet(in, binary, byteswap, *this, i, j); + i = j; + continue; + } + std::cerr << "warning: unhandled PLY element [" << (*i).name << "]" << std::endl; + ++i; + } + + return true; + } + + bool PlyWriter::write(std::ostream &out) { + out << "ply" << std::endl; + if (!binary) { + out << "format ascii 1.0" << std::endl; + } else { + bool be = is_big_endian(); + if (byteswap) be = !be; + if (be) { + out << "format binary_big_endian 1.0" << std::endl; + } else { + out << "format binary_little_endian 1.0" << std::endl; + } + } + + std::list elements; + + for (std::list >::iterator i = blocks.begin(); i != blocks.end(); ++i) { + stream::block_t &block = (*i).second; + + for (stream::named_element_list_t::iterator j = block.elems.begin(); j != block.elems.end(); ++j) { + stream::named_element_t &elem = *j; + if (elem.wt == NULL) continue; + + elements.push_back(elem_info(elem.name)); + elem_info &ei = elements.back(); + ei.name = elem.name; + ei.wt = elem.wt.ptr(); + ei.count = elem.wt->length(); + out << ei.header() << std::endl; + + for (stream::named_prop_list_t::iterator k = elem.props.begin(); k != elem.props.end(); ++k) { + stream::named_prop_t &prop = *k; + if (prop.wt == NULL) continue; + + ei.props.push_back(prop_info(prop.name)); + prop_info &pi = elements.back().props.back(); + pi.name = prop.name; + pi.wt = prop.wt.ptr(); + pi.type = prop.wt->dataType(); + pi.is_list = prop.wt->isList(); + if (pi.is_list) { + pi.count_type = stream::smallest_type((uint32_t)prop.wt->maxLength()); + } + out << pi.header() << std::endl; + } + } + } + + out << "end_header" << std::endl; + + for (std::list::iterator b = elements.begin(); b != elements.end(); ++b) { + (*b).wt->begin(); + for (int i = 0; i < (*b).count; ++i) { + (*b).wt->next(); + if (binary) { + for (size_t j = 0; j < (*b).props.size(); ++j) { + prop_info &pi = (*b).props[j]; + pi.writeBinary(out, byteswap); + } + } else { + for (size_t j = 0; j < (*b).props.size(); ++j) { + prop_info &pi = (*b).props[j]; + if (j) out << " "; + pi.writeAscii(out); + } + out << std::endl; + } + } + (*b).wt->end(); + } + + return true; + } + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/model/stream.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/model/stream.cpp new file mode 100644 index 00000000..ce800e20 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/model/stream.cpp @@ -0,0 +1,176 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include + +#ifdef WIN32 + +#include + +#endif + +namespace gloop { + namespace stream { + + named_prop_t *named_element_t::findProp(const std::string &n) const { + for (named_prop_list_t::const_iterator i = props.begin(); i != props.end(); ++i) { + if ((*i).name == n) return const_cast(&*i); + } + return NULL; + } + + named_prop_t &named_element_t::findOrCreateProp(const std::string &n) { + named_prop_t *p = findProp(n); + if (p == NULL) { + props.push_back(named_prop_t(n)); + p = &props.back(); + } + return *p; + } + + + named_element_t *block_t::findElem(const std::string &n) const { + for (named_element_list_t::const_iterator i = elems.begin(); i != elems.end(); ++i) { + if ((*i).name == n) return const_cast(&*i); + } + return NULL; + } + + named_element_t &block_t::findOrCreateElem(const std::string &n) { + named_element_t *e = findElem(n); + if (e == NULL) { + elems.push_back(named_element_t(n)); + e = &elems.back(); + } + return *e; + } + + + block_t *model_reader::findBlock(const std::string &n) const { + for (std::list::const_iterator i = blocks.begin(); i != blocks.end(); ++i) { + if ((*i).name == n) return const_cast(&*i); + } + return NULL; + } + + block_t &model_reader::findOrCreateBlock(const std::string &n) { + block_t *b = findBlock(n); + if (b == NULL) { + blocks.push_back(block_t(n)); + b = &blocks.back(); + } + return *b; + } + + named_element_t *model_reader::findElem(const std::string &b, const std::string &e) const { + block_t *block = findBlock(b); + if (!block) return NULL; + return block->findElem(e); + } + named_element_t &model_reader::findOrCreateElem(const std::string &b, const std::string &e) { + return findOrCreateBlock(b).findOrCreateElem(e); + } + + named_prop_t *model_reader::findProp(const std::string &b, const std::string &e, const std::string &p) const { + block_t *block = findBlock(b); + if (!block) return NULL; + named_element_t *elem = block->findElem(e); + if (!elem) return NULL; + return elem->findProp(p); + } + named_prop_t &model_reader::findOrCreateProp(const std::string &b, const std::string &e, const std::string &p) { + return findOrCreateBlock(b).findOrCreateElem(e).findOrCreateProp(p); + } + + bool model_reader::addReader(const std::string &spec, reader_base *rd) { + std::vector splitspec; + str::split(std::back_inserter(splitspec), spec, '.', 2); + +// std::cerr << "addReader("; +// for (size_t i = 0; i < splitspec.size(); ++i) { +// std::cerr << "[" << splitspec[i] << "]"; +// } +// std::cerr << ")=" << rd << std::endl; + + switch(splitspec.size()) { + case 1: { + findOrCreateBlock(splitspec[0]).rd = rd; + return true; + } + case 2: { + findOrCreateElem(splitspec[0], splitspec[1]).rd = rd; + return true; + } + case 3: { + findOrCreateProp(splitspec[0], splitspec[1], splitspec[2]).rd = rd; + return true; + } + default: { + return false; + } + } + } + + + bool model_writer::newBlock(const std::string &name) { + blocks.push_back(std::make_pair(name, block_t(""))); + return true; + } + + bool model_writer::addWriter(const std::string &spec, writer_base *wt) { + if (!blocks.size()) return false; + std::vector splitspec; + str::split(std::back_inserter(splitspec), spec, '.', 2); + + block_t &block(blocks.back().second); + if (splitspec.size() < 1) return false; + if (block.name != "" && block.name != splitspec[0]) return false; + block.name = splitspec[0]; + switch(splitspec.size()) { + case 1: { + block.wt = wt; + return true; + } + case 2: { + block.findOrCreateElem(splitspec[1]).wt = wt; + return true; + } + case 3: { + block.findOrCreateElem(splitspec[1]).findOrCreateProp(splitspec[2]).wt = wt; + return true; + } + default: { + return false; + } + } + } + + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/model/vtk_format.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/model/vtk_format.cpp new file mode 100644 index 00000000..d884d8ce --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/model/vtk_format.cpp @@ -0,0 +1,492 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace { + + bool asUnsigned(const std::string &s, size_t &val) { + char *c; + val = strtoul(s.c_str(), &c, 10); + if (c == s.c_str()) { + return false; + } + return true; + } + + bool readIndexBlock(std::istream &in, size_t cnt, std::vector &blk, size_t &num) { + blk.clear(); + blk.reserve(cnt); + num = 0; + + while (blk.size() < cnt) { + std::string s; + std::getline(in, s); + std::istringstream l(s); + uint32_t n; + + l >> n; + if (l.fail() || blk.size() + n + 1 > cnt) return false; + + blk.push_back(n); + + for (size_t i = 0; i < n; ++i) { + uint32_t v; + l >> v; + blk.push_back(v); + } + + if (l.fail()) return false; + ++num; + } + return true; + } + +} + +namespace gloop { + namespace vtk { + + void VtkReader::emitPoints(const std::vector &point_data, const std::string &base) { + stream::reader_base *e_rd = findReader(base, "vertex"); + stream::reader_base *x_rd = findReader(base, "vertex", "x"); + stream::reader_base *y_rd = findReader(base, "vertex", "y"); + stream::reader_base *z_rd = findReader(base, "vertex", "z"); + if (e_rd) { + e_rd->begin(); + e_rd->length(point_data.size()); + } + // std::cerr << "emitting " << point_data.size() << " points" << std::endl; + for (size_t i = 0; i < point_data.size(); ++i) { + if (e_rd) e_rd->next(); + stream::send_scalar(x_rd, point_data[i].x); + stream::send_scalar(y_rd, point_data[i].y); + stream::send_scalar(z_rd, point_data[i].z); + } + if (e_rd) e_rd->end(); + } + + bool VtkReader::readASCII(std::istream &in) { + std::string s; + std::vector v; + std::vector point_data; + + bool polyhedron_points_done = false; + bool polyline_points_done = false; + + std::string dataset_type; + + while (in.good()) { + std::getline(in, s); + if (str::strip(s) == "") continue; + + if (str::startswith(s, "DATASET")) { + dataset_type = str::split(s)[1]; + + if (dataset_type == "STRUCTURED_POINTS") { + } else if (dataset_type == "STRUCTURED_GRID") { + } else if (dataset_type == "RECTILINEAR_GRID") { + } else if (dataset_type == "UNSTRUCTURED_GRID") { + } else if (dataset_type == "POLYDATA") { + } else { + std::cerr << "unhandled dataset type: [" << str::strip(s) << "]" << std::endl; + return false; + } + + point_data.clear(); + + } else if (str::startswith(s, "POINTS")) { + v = str::split(s); + if (v.size() != 3) goto syntax_error; + + size_t n_points; + if (!asUnsigned(v[1], n_points)) goto syntax_error; + std::string data_type = v[2]; + point_data.resize(n_points); + for (size_t i = 0; i < n_points; ++i) { + std::getline(in, s); + + std::istringstream l(s); + l >> point_data[i].x >> point_data[i].y >> point_data[i].z; + if (l.fail()) goto syntax_error; + } + + if (polyhedron_points_done) { + stream::reader_base *p_rd = findReader("polyhedron"); + if (p_rd != NULL) p_rd->end(); + polyhedron_points_done = false; + } + if (polyline_points_done) { + stream::reader_base *p_rd = findReader("polyline"); + if (p_rd != NULL) p_rd->end(); + polyline_points_done = false; + } + + } else if (str::startswith(s, "VERTICES") || + str::startswith(s, "LINES") || + str::startswith(s, "POLYGONS") || + str::startswith(s, "TRIANGLE_STRIPS")) { + std::vector blk; + v = str::split(s); + if (v.size() != 3) goto syntax_error; + + size_t n_vertices; + if (!asUnsigned(v[1], n_vertices)) goto syntax_error; + size_t n_vals, num; + if (!asUnsigned(v[2], n_vals)) goto syntax_error; + if (!readIndexBlock(in, n_vals, blk, num)) goto block_syntax_error; + + if (str::startswith(s, "VERTICES")) { + // vertices aren't handled + + } else if (str::startswith(s, "LINES")) { + if (!polyline_points_done) { + stream::reader_base *p_rd = findReader("polyline"); + if (p_rd != NULL) p_rd->begin(); + emitPoints(point_data, "polyline"); + polyline_points_done = true; + } + stream::reader_base *e_rd = findReader("polyline", "polyline"); + stream::reader_base *v_rd = findReader("polyline", "vertex_indices"); + stream::reader_base *c_rd = findReader("polyline", "closed"); + + if (e_rd) { + e_rd->begin(); + e_rd->length(num); + } + + size_t x = 0; + for (size_t i = 0; i < num; ++i) { + if (e_rd) { + e_rd->next(); + } + uint32_t n = blk[x++]; + uint32_t closed = blk[x] == blk[x + n - 1] ? 1 : 0; + // std::copy(blk.begin() + x, blk.begin() + x + n - closed, std::ostream_iterator(std::cerr, " ")); std::cerr << std::endl; + stream::send_sequence(v_rd, n, blk.begin() + x, blk.begin() + x + n - closed); + x += n; + stream::send_scalar(c_rd, closed); + } + + if (e_rd) { + e_rd->end(); + } + + } else if (str::startswith(s, "POLYGONS") || str::startswith(s, "TRIANGLE_STRIPS")) { + if (!polyhedron_points_done) { + stream::reader_base *p_rd = findReader("polyhedron"); + if (p_rd != NULL) p_rd->begin(); + // std::cerr << "p_rd=" << p_rd << std::endl; + emitPoints(point_data, "polyhedron"); + polyhedron_points_done = true; + } + + std::string t; + if (str::startswith(s, "POLYGONS")) { + t = "face"; + } else { + t = "tristrips"; + } + stream::reader_base *e_rd = findReader("polyhedron", t); + stream::reader_base *v_rd = findReader("polyhedron", t, "vertex_indices"); + // std::cerr << "e_rd=" << e_rd << std::endl; + // std::cerr << "v_rd=" << v_rd << std::endl; + + if (e_rd) { + e_rd->begin(); + e_rd->length(num); + } + + size_t x = 0; + for (size_t i = 0; i < num; ++i) { + if (e_rd) { + e_rd->next(); + } + size_t n = blk[x++]; + // std::copy(blk.begin() + x, blk.begin() + x + n, std::ostream_iterator(std::cerr, " ")); std::cerr << std::endl; + stream::send_sequence(v_rd, n, blk.begin() + x, blk.begin() + x + n); + x += n; + } + + if (e_rd) { + e_rd->end(); + } + + } + + } else { + std::cerr << "unhandled line: [" << str::strip(s) << "]" << std::endl; + } + + } + if (polyhedron_points_done) { + stream::reader_base *p_rd = findReader("polyhedron"); + if (p_rd != NULL) p_rd->end(); + polyhedron_points_done = false; + } + if (polyline_points_done) { + stream::reader_base *p_rd = findReader("polyline"); + if (p_rd != NULL) p_rd->end(); + polyline_points_done = false; + } + + return true; + syntax_error: + std::cerr << "syntax error: [" << str::strip(s) << "]" << std::endl; + goto error; + block_syntax_error: + std::cerr << "syntax error in block following: [" << str::strip(s) << "]" << std::endl; + goto error; + error: + + if (polyhedron_points_done) { + stream::reader_base *p_rd = findReader("polyhedron"); + if (p_rd != NULL) p_rd->fail(); + polyhedron_points_done = false; + } + if (polyline_points_done) { + stream::reader_base *p_rd = findReader("polyline"); + if (p_rd != NULL) p_rd->fail(); + polyline_points_done = false; + } + return false; + } + + bool VtkReader::readBinary(std::istream &in) { + std::string s; + std::getline(in, s); + return false; + } + + bool VtkReader::readPlain(std::istream &in) { + std::string s; + std::getline(in, s); // data description. + std::getline(in, s); // ASCII | BINARY + if (str::startswith(s, "ASCII")) { + return readASCII(in); + } else if (str::startswith(s, "BINARY")) { + return readBinary(in); + } else { + return false; + } + } + + bool VtkReader::readXML(std::istream &in) { + return false; + } + + bool VtkReader::read(std::istream &in) { + std::string s; + std::getline(in, s); + int ver_maj, ver_min; + if (sscanf(s.c_str(), "# vtk DataFile Version %d.%d", &ver_maj, &ver_min) == 2) { + return readPlain(in); + } else if (s.substr(0, 5) == " >::iterator i = blocks.begin(); i != blocks.end(); ++i) { + std::string &blockname = (*i).first; + stream::block_t &block = (*i).second; + if (block.name == "polyhedron") { + if (block.wt != NULL) block.wt->begin(); + + { + stream::named_element_t *elem = block.findElem("vertex"); + if (!elem || elem->wt == NULL) continue; + stream::named_prop_t *px = elem->findProp("x"); + stream::named_prop_t *py = elem->findProp("y"); + stream::named_prop_t *pz = elem->findProp("z"); + if (!px || px->wt == NULL || + !py || py->wt == NULL || + !pz || pz->wt == NULL) continue; + + elem->wt->begin(); + size_t n_verts = elem->wt->length(); + out << "DATASET POLYDATA" << std::endl; + out << "POINTS " << n_verts << " double" << std::endl; + for (size_t i = 0; i < n_verts; ++i) { + double x, y, z; + elem->wt->next(); + px->wt->begin(); px->wt->next(); px->wt->_val(x); px->wt->end(); + py->wt->begin(); py->wt->next(); py->wt->_val(y); py->wt->end(); + pz->wt->begin(); pz->wt->next(); pz->wt->_val(z); pz->wt->end(); + out << x << " " << y << " " << z << std::endl; + } + elem->wt->end(); + } + + { + std::vector vv; + stream::named_element_t *elem = block.findElem("face"); + if (!elem || elem->wt == NULL) continue; + stream::named_prop_t *v = elem->findProp("vertex_indices"); + + elem->wt->begin(); + size_t n_faces = elem->wt->length(); + for (size_t i = 0; i < n_faces; ++i) { + uint32_t nv, vi; + elem->wt->next(); + v->wt->begin(); + nv = v->wt->length(); + vv.push_back(nv); + vv.reserve(vv.size() + nv); + for (size_t j = 0; j < nv; ++j) { + v->wt->next(); + v->wt->_val(vi); + vv.push_back(vi); + } + v->wt->end(); + } + elem->wt->end(); + out << "POLYGONS " << n_faces << " " << vv.size() << std::endl; + for (size_t i = 0; i < vv.size(); ) { + out << vv[i]; + for (size_t j = 0; j < vv[i]; ++j) { + out << " " << vv[i+1+j]; + } + out << std::endl; + i += vv[i]+1; + } + } + + if (block.wt != NULL) block.wt->end(); + + } else if (block.name == "polyline") { + if (block.wt != NULL) block.wt->begin(); + + { + stream::named_element_t *elem = block.findElem("vertex"); + if (!elem || elem->wt == NULL) continue; + stream::named_prop_t *px = elem->findProp("x"); + stream::named_prop_t *py = elem->findProp("y"); + stream::named_prop_t *pz = elem->findProp("z"); + if (!px || px->wt == NULL || + !py || py->wt == NULL || + !pz || pz->wt == NULL) continue; + + elem->wt->begin(); + size_t n_verts = elem->wt->length(); + out << "DATASET POLYDATA" << std::endl; + out << "POINTS " << n_verts << " double" << std::endl; + for (size_t i = 0; i < n_verts; ++i) { + double x, y, z; + elem->wt->next(); + px->wt->begin(); px->wt->next(); px->wt->_val(x); px->wt->end(); + py->wt->begin(); py->wt->next(); py->wt->_val(y); py->wt->end(); + pz->wt->begin(); pz->wt->next(); pz->wt->_val(z); pz->wt->end(); + out << x << " " << y << " " << z << std::endl; + } + elem->wt->end(); + } + + { + std::vector vv; + stream::named_element_t *elem = block.findElem("polyline"); + if (!elem || elem->wt == NULL) continue; + stream::named_prop_t *v = elem->findProp("vertex_indices"); + stream::named_prop_t *c = elem->findProp("closed"); + + elem->wt->begin(); + size_t n_lines = elem->wt->length(); + for (size_t i = 0; i < n_lines; ++i) { + uint32_t nv, vi, vi_first; + uint32_t closed; + elem->wt->next(); + + c->wt->begin(); + c->wt->next(); + c->wt->_val(closed); + closed = closed ? 1 : 0; + c->wt->end(); + + v->wt->begin(); + nv = v->wt->length(); + vv.push_back(nv + closed); + vv.reserve(vv.size() + nv +closed); + + v->wt->next(); + v->wt->_val(vi_first); + vv.push_back(vi_first); + for (size_t j = 1; j < nv; ++j) { + v->wt->next(); + v->wt->_val(vi); + vv.push_back(vi); + } + if (closed) vv.push_back(vi_first); + v->wt->end(); + } + elem->wt->end(); + + out << "LINES " << n_lines << " " << vv.size() << std::endl; + for (size_t i = 0; i < vv.size(); ) { + out << vv[i]; + for (size_t j = 0; j < vv[i]; ++j) { + out << " " << vv[i+1+j]; + } + out << std::endl; + i += vv[i]+1; + } + } + + if (block.wt != NULL) block.wt->end(); + + } + } + return true; + } + } +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/quaternion.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/quaternion.cpp new file mode 100644 index 00000000..9729267c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/quaternion.cpp @@ -0,0 +1,82 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include + +#include +#include + +namespace gloop { + + QUAT::operator M3() { + return M3(1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w, + 2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w, + 2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y); + } + + QUAT::operator M4() { + return M4(1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w, 0.0, + 2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w, 0.0, + 2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y, 0.0, + 0.0, 0.0, 0.0, 1.0); + } + + QUAT QUAT::slerp(const QUAT &a, const QUAT &b, float t) { + float cosom, s0, s1; + + cosom = a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; + + if ((1.0f + cosom) > FLT_EPSILON) { + if ((1.0f - cosom) > FLT_EPSILON) { + float omega = acosf(cosom); + float sinom = sinf(omega); + s0 = sinf((1.0f - t) * omega) / sinom; + s1 = sinf(t * omega) / sinom; + } else { + s0 = 1.0f - t; + s1 = t; + } + + return QUAT(s0 * a.x + s1 * b.x, + s0 * a.y + s1 * b.y, + s0 * a.z + s1 * b.z, + s0 * a.w + s1 * b.w); + } else { + s0 = sinf((1.0f - t) * (float)(M_PI * 0.5)); + s1 = sinf(t * (float)(M_PI * 0.5)); + + return QUAT(s0 * a.x + s1 * -b.y, + s0 * a.y + s1 * +b.x, + s0 * a.z + s1 * -b.w, + s0 * a.w + s1 * +b.z); + } + } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/radiance.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/radiance.cpp new file mode 100644 index 00000000..f09f89bc --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/radiance.cpp @@ -0,0 +1,383 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include + +namespace gloop { + + const chromacity chromacity::stdprims = { + V2(CIE_x_r,CIE_y_r), + V2(CIE_x_g,CIE_y_g), + V2(CIE_x_b,CIE_y_b), + V2(CIE_x_w,CIE_y_w) + }; + + static inline bool eq(float a, float b, float epsilon) { return fabs(a - b) < epsilon; } + static inline bool zero(float a, float epsilon) { return fabs(a) < epsilon; } + + M3 chromacity::xyz_to_rgb() const { + double C_rD, C_gD, C_bD; + + if (zero(w.x, 1e-4) | zero(w.y, 1e-4)) + throw std::runtime_error("bad chromacity primaries"); + + C_rD = (1.0f / w.y) * (w.x * (g.y - b.y) - w.y * (g.x - b.x) + g.x * b.y - b.x * g.y); + C_gD = (1.0f / w.y) * (w.x * (b.y - r.y) - w.y * (b.x - r.x) - r.x * b.y + b.x * r.y); + C_bD = (1.0f / w.y) * (w.x * (r.y - g.y) - w.y *(r.x - g.x) + r.x * g.y - g.x * r.y); + + if (zero(C_rD, 1e-4) || zero(C_gD, 1e-4) || zero(C_bD, 1e-4)) + throw std::runtime_error("bad chromacity primaries"); + + return M3((g.y - b.y - b.x * g.y + b.y * g.x) / C_rD, (b.x - g.x - b.x * g.y + g.x * b.y) / C_rD, (g.x * b.y - b.x * g.y) / C_rD, + (b.y - r.y - b.y * r.x + r.y * b.x) / C_gD, (r.x - b.x - r.x * b.y + b.x * r.y) / C_gD, (b.x * r.y - r.x * b.y) / C_gD, + (r.y - g.y - r.y * g.x + g.y * r.x) / C_bD, (g.x - r.x - g.x * r.y + r.x * g.y) / C_bD, (r.x * g.y - g.x * r.y) / C_bD); + } + + + + M3 chromacity::rgb_to_xyz() const { + double C_rD, C_gD, C_bD, D; + + if (zero(w.x, 1e-4) | zero(w.y, 1e-4)) + throw std::runtime_error("bad chromacity primaries"); + + C_rD = (1.0f / w.y) * (w.x * (g.y - b.y) - w.y * (g.x - b.x) + g.x * b.y - b.x * g.y); + C_gD = (1.0f / w.y) * (w.x * (b.y - r.y) - w.y * (b.x - r.x) - r.x * b.y + b.x * r.y); + C_bD = (1.0f / w.y) * (w.x * (r.y - g.y) - w.y * (r.x - g.x) + r.x * g.y - g.x * r.y); + D = r.x * (g.y - b.y) + g.x * (b.y - r.y) + b.x * (r.y - g.y); + + if (zero(D, 1e-4)) + throw std::runtime_error("bad chromacity primaries"); + + return M3( r.x * C_rD / D, g.x * C_gD / D, b.x * C_bD / D, + r.y * C_rD / D, g.y * C_gD / D, b.y * C_bD / D, + (1.0f - r.x - r.y) * C_rD / D, (1.0f - g.x - g.y) * C_gD / D, (1.0f - b.x - b.y) * C_bD / D); + } + + + + const V3 WHITE(1.0, 1.0, 1.0); + const V3 BLACK(0.0, 0.0, 0.0); + + const M3 RGB_to_XYZ(chromacity::stdprims.rgb_to_xyz()); + const M3 XYZ_to_RGB(chromacity::stdprims.xyz_to_rgb()); + + + + packed_colour::packed_colour(const V3 &col) { + float d; + + d = std::max(std::max(col.r, col.g), col.b); + + r = g = b = e = 0; + if (d > 1e-30f) { + int exp; + d = frexpf(d, &exp) * 255.0f / d; + + if (col.r > 0.0) r = (uint8_t)(col.r * d + 0.5f); + if (col.g > 0.0) g = (uint8_t)(col.g * d + 0.5f); + if (col.b > 0.0) b = (uint8_t)(col.b * d + 0.5f); + + e = exp + excess; + } + } + + const packed_colour packed_colour::BLACK(0, 0, 0, 0); + const packed_colour packed_colour::WHITE(128, 128, 128, packed_colour::excess + 1); + + + + #define MINELEN 8 + #define MAXELEN 0x7fff + #define MINRUN 4 + + + + static void read_scanline_old(std::istream &in, std::vector &scanline, size_t i = 0) { + int rshift = 0; + while (i < scanline.size()) { + in.read((char *)&scanline[i].val, 4); + if (in.gcount() != 4) + throw std::runtime_error("premature EOF"); + if (scanline[i].r == 1 && scanline[i].g == 1 && scanline[i].b == 1) { + size_t j = i + (scanline[i].e << rshift); + if (j > scanline.size()) + throw std::runtime_error("RLE overflow"); + uint32_t copy = scanline[i - 1].val; + for (; i < j; i++) { scanline[i].val = copy; } + rshift += 8; + } else { + i++; + rshift = 0; + } + } + } + + static void read_scanline(std::istream &in, std::vector &scanline) { + uint8_t buf[0x80]; + + if (scanline.size() < MINELEN || scanline.size() > MAXELEN) { + return read_scanline_old(in, scanline); + } + + in.read((char *)&scanline[0].val, 4); + if (in.gcount() != 4) + throw std::runtime_error("premature EOF"); + + if (scanline[0].r != 2 || scanline[0].g != 2 || (scanline[0].b & 0x80)) + return read_scanline_old(in, scanline, 1); + + if ((scanline[0].b << 8 | scanline[0].e) != scanline.size()) + throw std::runtime_error("length mismatch"); + + for (size_t component = 0; component < 4; component++) { + size_t i, j; + for (i = 0; i < scanline.size(); ) { + int code, val; + code = in.get(); + if (code == std::istream::traits_type::eof()) + throw std::runtime_error("premature EOF"); + bool run = code > 0x80; + if (run) code &= 0x7f; + j = i + code; + if (j > scanline.size()) + throw std::runtime_error("RLE overflow"); + if (run) { + val = in.get(); + if (val == std::istream::traits_type::eof()) + throw std::runtime_error("premature EOF"); + while (i < j) scanline[i++].v[component] = (uint8_t)val; + } else { + in.read((char *)buf, code); + if (in.gcount() != code) + throw std::runtime_error("premature EOF"); + size_t k = 0; + while (i < j) scanline[i++].v[component] = buf[k++]; + } + } + } + } + + void read_radiance(std::istream &in, radiance_reader &reader, bool invert_X, bool invert_Y, bool invert_Z) { + std::string str; + const char *c; + + std::getline(in, str); + if (str != "#?RADIANCE") throw std::runtime_error("not radiance format"); + + float exposure = 1.0; + float pixaspect = 1.0; + chromacity prim = chromacity::stdprims; + V3 colour_correction(1.0, 1.0, 1.0); + radiance_colour_format fmt = RADIANCE_FMT_UNKNOWN; + + while (in.good()) { + std::getline(in, str); + if (str == "") break; + if (str[0] == '#') continue; + + if (sscanf(str.c_str(), "EXPOSURE= %e", + &exposure) == 1) continue; + + if (sscanf(str.c_str(), "PIXASPECT= %f", + &pixaspect) == 1) continue; + + if (sscanf(str.c_str(), "PRIMARIES= %f %f %f %f %f %f %f %f", + &prim.r.x, &prim.r.y, + &prim.g.x, &prim.g.y, + &prim.b.x, &prim.b.y, + &prim.w.x, &prim.w.y) == 8) continue; + + if (sscanf(str.c_str(), "COLORCORR= %f %f %f", + &colour_correction.r, + &colour_correction.g, + &colour_correction.b) == 3) continue; + + if (!str.compare(0, 7, "FORMAT=", 7)) { + c = str.c_str() + 7; + while (*c && isspace(*c)) c++; + if (!std::strcmp(c, "32-bit_rle_rgbe")) { + fmt = RADIANCE_FMT_RGB; + } else if (!std::strcmp(c, "32-bit_rle_xyze")) { + fmt = RADIANCE_FMT_CIE; + } else { + throw std::runtime_error("bad image format: " + std::string(c)); + } + continue; + } + + throw std::runtime_error("strange header line: " + str); + } + reader.header(fmt, + exposure, + pixaspect, + prim, + colour_correction); + + int dim = 0; + char dir[3]; + char axis[3]; + int size[3], curr[3]; + + std::getline(in, str); + c = str.c_str(); + for (dim = 0; *c && dim < 3; dim++) { + switch (c[0]) { + case '-': dir[dim] = -1; break; + case '+': dir[dim] = +1; break; + default: throw std::runtime_error("strange image dimensions: " + str); + } + switch (c[1]) { + case 'X':axis[dim] = 0; if (invert_X) dir[dim] = -dir[dim]; break; + case 'Y':axis[dim] = 1; if (invert_Y) dir[dim] = -dir[dim]; break; + case 'Z':axis[dim] = 2; if (invert_Z) dir[dim] = -dir[dim]; break; + default: throw std::runtime_error("strange image dimensions: " + str); + } + + c += 2; + while (*c && isspace(*c)) c++; + + if (sscanf(c, "%u", &size[dim]) != 1) + throw std::runtime_error("strange image dimensions: " + str); + + while (*c && !isspace(*c)) c++; + while (*c && isspace(*c)) c++; + } + + int s[3]; + s[0] = s[1] = s[2] = 1; + for (int i = 0; i < dim; i++) + s[axis[i]] = size[i]; + + reader.image_size(s[0], s[1], s[2]); + + std::vector scanline; + scanline.resize(size[dim - 1]); + + curr[0] = curr[1] = curr[2] = 0; + for (int i = 0; i < dim - 1; i++) + curr[axis[i]] = dir[i] == +1 ? 0 : size[i] - 1; + curr[axis[dim - 1]] = 0; + + next: + read_scanline(in, scanline); + reader.scanline(axis[dim - 1], curr[0], curr[1], curr[2], scanline); + + for (int d = dim - 2; d >= 0; d--) { + if (dir[d] == -1) { + if (curr[axis[d]]-- > 0) goto next; + curr[axis[d]] = size[d] - 1; + } else { + if (++curr[axis[d]] < size[d]) goto next; + curr[axis[d]] = 0; + } + } + } + + + + struct floatbuf_iter { + float *p; + unsigned s; + + floatbuf_iter(int scan_axis, int X, int Y, int Z, floatbuf_radiance_reader *tgt) { + p = tgt->pixel(X, Y, Z); + s = tgt->stride(scan_axis); + } + V3 &operator*() { + return *reinterpret_cast(p); + } + floatbuf_iter &operator++() { p += s; return *this; } + }; + + + + struct floatbuf_iter_cvt { + float *p; + unsigned s; + M3 &cvt; + + floatbuf_iter_cvt(int scan_axis, int X, int Y, int Z, floatbuf_radiance_reader *tgt) : cvt(tgt->cvt) { + p = tgt->pixel(X, Y, Z); + s = tgt->stride(scan_axis); + } + V3 operator*() { + return cvt * *reinterpret_cast(p); + } + floatbuf_iter_cvt &operator++() { p += s; return *this; } + }; + + + + floatbuf_radiance_reader::floatbuf_radiance_reader() : + target(NULL), width(0), height(0), depth(0), cvt(M3::IDENTITY()), cvt_set(false) { + } + + void floatbuf_radiance_reader::header(radiance_colour_format fmt, + float exposure, + float pixaspect, + chromacity prim, + V3 colour_correction) { + if (fmt == RADIANCE_FMT_CIE) { + cvt = prim.xyz_to_rgb(); + } + } + + void floatbuf_radiance_reader::image_size(int _width, int _height, int _depth) { + width = _width; + height = _height; + depth = _depth; + target = new float[width * height * depth * 3]; + } + + void floatbuf_radiance_reader::scanline(int scan_axis, + int X, int Y, int Z, + std::vector &scanline) { + if (!cvt_set) { + unpack_scanline(scanline.begin(), scanline.end(), floatbuf_iter(scan_axis, X, Y, Z, this)); + } else { + unpack_scanline(scanline.begin(), scanline.end(), floatbuf_iter_cvt(scan_axis, X, Y, Z, this)); + } + } + + float *floatbuf_radiance_reader::take_buffer() { + float *result = target; + target = NULL; + return result; + } + + floatbuf_radiance_reader::~floatbuf_radiance_reader() { + if (target) delete [] target; + } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/shader.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/shader.cpp new file mode 100644 index 00000000..2c8dd264 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/shader.cpp @@ -0,0 +1,297 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +namespace gloop { + + int Shader::s_tag = 0; + + static inline std::string glsl_log(GLuint handle) { + if (handle == 0) return ""; + + GLint log_len; + glGetObjectParameterivARB(handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_len); + if (log_len == 0) return ""; + + std::string log(log_len, '\0'); + GLsizei written; + glGetInfoLogARB(handle, log_len, &written, (GLcharARB *)log.c_str()); + log.resize(written); + return log; + } + + void Shader::_source(std::list &result) const { + if (tag == s_tag) return; + tag = s_tag; + + for (std::list::const_iterator i = dependencies.begin(), e = dependencies.end(); i != e; ++i) { + (*i)->_source(result); + } + result.push_back(prog); + } + + void Shader::_compile() { + if (shader != 0) return; + + shader = glCreateShaderObjectARB(shaderType()); + if (shader == 0) { + throw std::runtime_error("failed to create shader object"); + } + + const char *_prog = prog.c_str(); + GLint length = prog.size(); + + glShaderSourceARB(shader, 1, &_prog, &length); + glCompileShaderARB(shader); + + GLint compile_status = 0; + glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compile_status); + if (compile_status == 0) { + std::ostringstream err; + err << "failed to compile shader:" << std::endl << glsl_log(shader) << std::endl; + + glDeleteObjectARB(shader); + shader = 0; + throw std::runtime_error(err.str()); + } + } + + void Shader::_attachTo(GLuint program, bool compile) { + if (tag == s_tag) return; + tag = s_tag; + + for (std::list::const_iterator i = dependencies.begin(), e = dependencies.end(); i != e; ++i) { + (*i)->_attachTo(program, compile); + } + if (compile && shader == 0) _compile(); + if (shader != 0) { + glAttachObjectARB(program, shader); + } + } + + Shader::Shader(const std::string &_name, const std::string &_prog) : + name(_name), prog(_prog), shader(0), tag(-1), dependencies() { + } + + static inline std::string _read_stream(std::istream &_stream) { + char buf[1024]; + std::string r; + while (_stream.good()) { + _stream.read(buf, 1024); + r.append(buf, _stream.gcount()); + } + return r; + } + + Shader::Shader(const std::string &_name, std::istream &_stream) : + name(_name), prog(_read_stream(_stream)), shader(0), tag(-1), dependencies() { + } + + Shader::~Shader() { + destroy(); + } + + void Shader::addDependency(const Ptr &dep) { + dependencies.push_back(dep); + } + + void Shader::compileFlat() { + if (shader != 0) return; + + shader = glCreateShaderObjectARB(shaderType()); + if (shader == 0) { + throw std::runtime_error("failed to create shader object"); + } + + std::list all_source; + s_tag++; + _source(all_source); + + std::ostringstream _prog; + std::copy(all_source.begin(), all_source.end(), std::ostream_iterator(_prog, "\n")); + + GLint length = _prog.str().size(); + const char *_p = _prog.str().c_str(); + glShaderSourceARB(shader, 1, &_p, &length); + glCompileShaderARB(shader); + + GLint compile_status = 0; + glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compile_status); + if (compile_status == 0) { + std::ostringstream err; + err << "failed to compile shader:" << std::endl << "----" << std::endl << glsl_log(shader) << std::endl << "----" << std::endl; + + glDeleteObjectARB(shader); + shader = 0; + throw std::runtime_error(err.str()); + } + } + + void Shader::compile() { + if (shader != 0) return; + + for (std::list::const_iterator i = dependencies.begin(), e = dependencies.end(); i != e; ++i) { + (*i)->compile(); + } + _compile(); + } + + void Shader::attachFlat(GLuint program, bool compile) { + if (shader == 0 && compile) { + compileFlat(); + } + if (shader != 0) { + glAttachObjectARB(program, shader); + } + } + + void Shader::attachTo(GLuint program, bool compile) { + s_tag++; + _attachTo(program, compile); + } + + void Shader::destroy() { + if (shader != 0) { + glDeleteObjectARB(shader); + shader = 0; + } + } + + GLenum VertexShader::shaderType() { + return GL_VERTEX_SHADER_ARB; + } + + VertexShader::VertexShader(const std::string &_name, const std::string &_prog) : + Shader(_name, _prog) { + } + + VertexShader::VertexShader(const std::string &_name, std::istream &_stream) : + Shader(_name, _stream) { + } + + VertexShader::~VertexShader() { + } + + GLenum FragmentShader::shaderType() { + return GL_FRAGMENT_SHADER_ARB; + } + + FragmentShader::FragmentShader(const std::string &_name, const std::string &_prog) : + Shader(_name, _prog) { + } + + FragmentShader::FragmentShader(const std::string &_name, std::istream &_stream) : + Shader(_name, _stream) { + } + + FragmentShader::~FragmentShader() { + } + + + ShaderProgram::ShaderProgram() : vertex_shader(NULL), fragment_shader(NULL), program(0) { + } + + void ShaderProgram::destroy() { + if (program != 0) { + glDeleteObjectARB(program); + program = 0; + } + } + + ShaderProgram::~ShaderProgram() { + destroy(); + } + + ShaderProgram &ShaderProgram::connect(VertexShader *shader) { + destroy(); + vertex_shader = shader; + return *this; + } + + ShaderProgram &ShaderProgram::connect(FragmentShader *shader) { + destroy(); + fragment_shader = shader; + return *this; + } + + ShaderProgram &ShaderProgram::connect(const VertexShader::Ptr &shader) { + destroy(); + vertex_shader = shader; + return *this; + } + + ShaderProgram &ShaderProgram::connect(const FragmentShader::Ptr &shader) { + destroy(); + fragment_shader = shader; + return *this; + } + + ShaderProgram &ShaderProgram::connect(Shader *shader) { + VertexShader *v; + FragmentShader *f; + v = dynamic_cast(shader); if (v) connect(v); + f = dynamic_cast(shader); if (f) connect(f); + return *this; + } + + ShaderProgram &ShaderProgram::connect(Shader::Ptr &shader) { + VertexShader *v; + FragmentShader *f; + v = dynamic_cast(shader.ptr()); if (v) connect(v); + f = dynamic_cast(shader.ptr()); if (f) connect(f); + return *this; + } + + ShaderProgram &ShaderProgram::link() { + if (vertex_shader != NULL) vertex_shader->compileFlat(); + if (fragment_shader != NULL) fragment_shader->compileFlat(); + + program = glCreateProgramObjectARB(); + if (program == 0) { + throw std::runtime_error("failed to create program object"); + } + + if (vertex_shader != NULL) vertex_shader->attachFlat(program); + if (fragment_shader != NULL) fragment_shader->attachFlat(program); + + glLinkProgramARB(program); + + GLint link_status = 0; + glGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &link_status); + + if (link_status == 0) { + std::string err = glsl_log(program); + destroy(); + throw std::runtime_error(err); + } + return *this; + } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/surface.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/surface.cpp new file mode 100644 index 00000000..47f77355 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/surface.cpp @@ -0,0 +1,218 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +namespace gloop { + + std::map, std::vector > Surface::s_bind; + + const Surface::Desc Surface::s_desc[5] = { + Surface::Desc(SURF_NONE, 0, 0, false, false, TextureParam()), + Surface::Desc(SURF_COLOUR, GL_TEXTURE_2D, GL_RGBA, true, false, TextureParam()), + Surface::Desc(SURF_DEPTH, GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, false, false, TextureParam()), + Surface::Desc(SURF_STENCIL, GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX8_EXT, false, false, TextureParam()), + Surface::Desc(SURF_DEPTH_STENCIL, GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, false, false, TextureParam()) + }; + + static inline GLenum externalFormatForInternal(GLenum internal) { + switch (internal) { + case GL_ALPHA: + case GL_ALPHA4: + case GL_ALPHA8: + case GL_ALPHA12: + case GL_ALPHA16: + return GL_ALPHA; + + case GL_LUMINANCE: + case GL_LUMINANCE4: + case GL_LUMINANCE8: + case GL_LUMINANCE12: + case GL_LUMINANCE16: + return GL_LUMINANCE; + + case GL_LUMINANCE_ALPHA: + case GL_LUMINANCE4_ALPHA4: + case GL_LUMINANCE8_ALPHA8: + case GL_LUMINANCE12_ALPHA12: + case GL_LUMINANCE16_ALPHA16: + return GL_LUMINANCE_ALPHA; + + case GL_INTENSITY: + case GL_INTENSITY4: + case GL_INTENSITY8: + case GL_INTENSITY12: + case GL_INTENSITY16: + return GL_INTENSITY; + + case GL_R3_G3_B2: + case GL_RGB: + case GL_RGB4: + case GL_RGB5: + case GL_RGB8: + case GL_RGB10: + case GL_RGB12: + case GL_RGB16: + return GL_RGB; + + case GL_RGBA: + case GL_RGBA2: + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGBA8: + case GL_RGB10_A2: + case GL_RGBA12: + case GL_RGBA16: + return GL_RGBA; + + case GL_DEPTH_COMPONENT16_ARB: + case GL_DEPTH_COMPONENT24_ARB: + case GL_DEPTH_COMPONENT32_ARB: + case GL_TEXTURE_DEPTH_SIZE_ARB: + case GL_DEPTH_TEXTURE_MODE_ARB: + return GL_DEPTH_COMPONENT; + + default: + return GL_RGBA; + } + } + + Surface::Surface(const Desc &d) : desc(d), gl_id(0), width(0), height(0), depth(0) { + } + + Surface::~Surface() { + if (gl_id) { + if (desc.is_texture) { + glDeleteTextures(1, &gl_id); + } else { + glDeleteRenderbuffersEXT(1, &gl_id); + } + } + } + + void Surface::pushBind(int texunit) { + std::vector &b(s_bind[std::make_pair(desc.gl_tgt, texunit)]); + if (!b.size()) b.push_back(0); + + if (gl_id != b.back()) { + glActiveTexture(GL_TEXTURE0_ARB + texunit); + glBindTexture(desc.gl_tgt, gl_id); + } + b.push_back(gl_id); + } + + void Surface::bind(int texunit) { + std::vector &b(s_bind[std::make_pair(desc.gl_tgt, texunit)]); + if (!b.size()) b.push_back(0); + + if (gl_id != b.back()) { + glActiveTexture(GL_TEXTURE0_ARB + texunit); + glBindTexture(desc.gl_tgt, gl_id); + if (b.size() == 1) { + b.push_back(gl_id); + } else { + b.back() = gl_id; + } + } + } + + void Surface::unbind(int texunit) { + std::vector &b(s_bind[std::make_pair(desc.gl_tgt, texunit)]); + if (b.size() > 1) { + b.pop_back(); + if (b.back() != gl_id) { + glActiveTexture(GL_TEXTURE0_ARB + texunit); + glBindTexture(desc.gl_tgt, b.back()); + } + } + } + + void Surface::init(unsigned w, unsigned h, unsigned d, GLenum ext_fmt, GLenum ext_type, GLvoid **ext_data) { + if (gl_id > 0) { + throw std::runtime_error("Already initialized"); + } + + switch (desc.surface_type) { + case SURF_NONE: + throw std::invalid_argument("SURF_NONE"); + case SURF_COLOUR: + if (!desc.is_texture) return throw std::invalid_argument("Colour buffers must be textures"); + break; + case SURF_STENCIL: + if (desc.is_texture) return throw std::invalid_argument("Stencil buffers must not be textures"); + break; + } + + if (desc.is_texture) { + if (desc.gl_tgt != GL_TEXTURE_RECTANGLE_ARB) { + P2(w); P2(h); P2(d); + } + glGenTextures(1, &gl_id); + glBindTexture(desc.gl_tgt, gl_id); + glGetError(); + if (ext_fmt == 0) ext_fmt = externalFormatForInternal(desc.gl_fmt); + switch (desc.gl_tgt) { + case GL_TEXTURE_1D: + glTexImage1D(desc.gl_tgt, 0, desc.gl_fmt, w, 0, ext_fmt, ext_type, ext_data ? ext_data[0] : NULL); + break; + case GL_TEXTURE_2D: + case GL_TEXTURE_RECTANGLE_ARB: + glTexImage2D(desc.gl_tgt, 0, desc.gl_fmt, w, h, 0, ext_fmt, ext_type, ext_data ? ext_data[0] : NULL); + break; + case GL_TEXTURE_CUBE_MAP: + for (int i = 0; i < 6; ++i) { + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, desc.gl_fmt, w, h, 0, ext_fmt, ext_type, ext_data ? ext_data[i] : NULL); + } + break; + case GL_TEXTURE_3D: + glTexImage3D(desc.gl_tgt, 0, desc.gl_fmt, w, h, d, 0, ext_fmt, ext_type, ext_data ? ext_data[0] : NULL); + break; + } + GLuint err = glGetError(); + if (err) { + glDeleteTextures(1, &gl_id); + gl_id = 0; + throw std::runtime_error("failed to initialize texture"); + } + if (desc.is_mipmapped) + glGenerateMipmapEXT(desc.gl_tgt); + desc.param.apply(desc.gl_tgt); + glBindTexture(desc.gl_tgt, 0); + } else { + glGenRenderbuffersEXT(1, &gl_id); + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, gl_id); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, desc.gl_fmt, w, h); + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); + } + width = w; + height = h; + depth = d; + } + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/texparam.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/texparam.cpp new file mode 100644 index 00000000..e61b016c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/texparam.cpp @@ -0,0 +1,36 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +namespace gloop { + + GLfloat TextureParam::s_max_anisotropy = 0.0; + +} diff --git a/thirdparty/carve-1.4.0/external/GLOOP/src/vbo.cpp b/thirdparty/carve-1.4.0/external/GLOOP/src/vbo.cpp new file mode 100644 index 00000000..a1c94e42 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLOOP/src/vbo.cpp @@ -0,0 +1,34 @@ +// Copyright (c) 2006, Tobias Sargeant +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. The names of its contributors may be used to endorse +// or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +namespace gloop { + +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/CMakeLists.txt b/thirdparty/carve-1.4.0/external/GLUI/CMakeLists.txt new file mode 100644 index 00000000..e51b461e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 2.6) + +find_package(OpenGL) +find_package(GLUT) + +project(glui) + +include_directories("${glui_SOURCE_DIR}/include") + +add_definitions(-DGLUI_NO_LIB_PRAGMA) +add_definitions(-DGLUI_USE_STATIC_LIB) + +include_directories(${OPENGL_INCLUDE_DIR}) +include_directories(${GLUT_INCLUDE_DIR}) + +add_library(glui STATIC + src/algebra3.cpp + src/arcball.cpp + src/arcball.h + src/glui.cpp + src/glui_add_controls.cpp + src/glui_bitmap_img_data.cpp + src/glui_bitmaps.cpp + src/glui_button.cpp + src/glui_checkbox.cpp + src/glui_column.cpp + src/glui_commandline.cpp + src/glui_control.cpp + src/glui_edittext.cpp + src/glui_filebrowser.cpp + src/glui_list.cpp + src/glui_listbox.cpp + src/glui_mouse_iaction.cpp + src/glui_node.cpp + src/glui_panel.cpp + src/glui_radio.cpp + src/glui_rollout.cpp + src/glui_rotation.cpp + src/glui_scrollbar.cpp + src/glui_separator.cpp + src/glui_spinner.cpp + src/glui_statictext.cpp + src/glui_string.cpp + src/glui_textbox.cpp + src/glui_translation.cpp + src/glui_tree.cpp + src/glui_treepanel.cpp + src/glui_window.cpp + src/quaternion.cpp + src/viewmodel.cpp) + +target_link_libraries(glui ${OPENGL_LIBRARIES} ${GLUT_LIBRARY}) diff --git a/thirdparty/carve-1.4.0/external/GLUI/Makefile.am b/thirdparty/carve-1.4.0/external/GLUI/Makefile.am new file mode 100644 index 00000000..545151ad --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/Makefile.am @@ -0,0 +1,26 @@ +if with_GUI + noinst_LTLIBRARIES=libglui.la + + noinst_HEADERS= ./include/GL/glui.h ./src/algebra3.h ./src/arcball.h \ + ./src/glui_internal.h ./src/glui_internal_control.h \ + ./src/quaternion.h ./src/viewmodel.h + + libglui_la_CPPFLAGS=-Iinclude + libglui_la_CFLAGS=-Iinclude @GL_CFLAGS@ @GLUT_CFLAGS@ + + libglui_la_SOURCES= src/algebra3.cpp src/arcball.cpp src/arcball.h \ + src/glui.cpp src/glui_add_controls.cpp \ + src/glui_bitmap_img_data.cpp src/glui_bitmaps.cpp \ + src/glui_button.cpp src/glui_checkbox.cpp src/glui_column.cpp \ + src/glui_commandline.cpp src/glui_control.cpp \ + src/glui_edittext.cpp src/glui_filebrowser.cpp \ + src/glui_list.cpp src/glui_listbox.cpp \ + src/glui_mouse_iaction.cpp src/glui_node.cpp \ + src/glui_panel.cpp src/glui_radio.cpp src/glui_rollout.cpp \ + src/glui_rotation.cpp src/glui_scrollbar.cpp \ + src/glui_separator.cpp src/glui_spinner.cpp \ + src/glui_statictext.cpp src/glui_string.cpp \ + src/glui_textbox.cpp src/glui_translation.cpp \ + src/glui_tree.cpp src/glui_treepanel.cpp src/glui_window.cpp \ + src/quaternion.cpp src/viewmodel.cpp +endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/include/GL/Makefile.am b/thirdparty/carve-1.4.0/external/GLUI/include/GL/Makefile.am new file mode 100644 index 00000000..a15cd05a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/include/GL/Makefile.am @@ -0,0 +1,3 @@ +includedir=@includedir@/GL + +include_HEADERS=glui.h diff --git a/thirdparty/carve-1.4.0/external/GLUI/include/GL/glui.h b/thirdparty/carve-1.4.0/external/GLUI/include/GL/glui.h new file mode 100644 index 00000000..a1ba8585 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/include/GL/glui.h @@ -0,0 +1,2615 @@ +/**************************************************************************** + + GLUI User Interface Toolkit (LGPL) + ---------------------------------- + + glui.h - Main (and only) external header for + GLUI User Interface Toolkit + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#ifndef GLUI_GLUI_H +#define GLUI_GLUI_H + +#if defined(GLUI_FREEGLUT) + + // FreeGLUT does not yet work perfectly with GLUI + // - use at your own risk. + + #include + +#elif defined(GLUI_OPENGLUT) + + // OpenGLUT does not yet work properly with GLUI + // - use at your own risk. + + #include + +#else + + #ifdef __APPLE__ + #include + #else + #if defined(_WIN32) + #include + #endif + #include + #endif + +#endif + +#include +#include +#include +#include +#include + +#define GLUI_VERSION 2.3f /********** Current version **********/ + +//#define GLUI_USE_STATIC_LIB + +#ifdef GLUI_USE_STATIC_LIB + +#define GLUI_API + +#ifndef GLUI_NO_LIB_PRAGMA +#pragma comment(lib, "glui32.lib") // Link automatically with GLUI library +#endif + +#else + +#ifdef _WIN32 + +#ifdef GLUIDLL_EXPORTS +#define GLUI_API __declspec(dllexport) +#else +#define GLUI_API __declspec(dllimport) + +#ifndef GLUI_NO_LIB_PRAGMA +#pragma comment(lib, "gluidll32.lib") // Link automatically with GLUI library +#endif + +#endif +#else +#define GLUI_API +#endif + +#endif + + +/********** Do some basic defines *******/ + +#ifndef Byte +#define Byte unsigned char +#endif + +#ifndef _RGBC_ +class RGBc { +public: + Byte r, g, b; + + void set(Byte r,Byte g,Byte b) {this->r=r;this->g=g;this->b=b;} + + RGBc( void ) {} + RGBc( Byte r, Byte g, Byte b ) { set( r, g, b ); } +}; +#define _RGBC_ +#endif + +/********** List of GLUT callbacks ********/ + +enum GLUI_Glut_CB_Types +{ + GLUI_GLUT_RESHAPE, + GLUI_GLUT_KEYBOARD, + GLUI_GLUT_DISPLAY, + GLUI_GLUT_MOUSE, + GLUI_GLUT_MOTION, + GLUI_GLUT_SPECIAL, + GLUI_GLUT_PASSIVE_MOTION, + GLUI_GLUT_ENTRY, + GLUI_GLUT_VISIBILITY +}; + +/********* Constants for window placement **********/ + +#define GLUI_XOFF 6 +#define GLUI_YOFF 6 +#define GLUI_ITEMSPACING 3 +#define GLUI_CHECKBOX_SIZE 13 +#define GLUI_RADIOBUTTON_SIZE 13 +#define GLUI_BUTTON_SIZE 20 +#define GLUI_STATICTEXT_SIZE 13 +#define GLUI_SEPARATOR_HEIGHT 8 +#define GLUI_DEFAULT_CONTROL_WIDTH 100 +#define GLUI_DEFAULT_CONTROL_HEIGHT 13 +#define GLUI_EDITTEXT_BOXINNERMARGINX 3 +#define GLUI_EDITTEXT_HEIGHT 20 +#define GLUI_EDITTEXT_WIDTH 130 +#define GLUI_EDITTEXT_MIN_INT_WIDTH 35 +#define GLUI_EDITTEXT_MIN_TEXT_WIDTH 50 +#define GLUI_PANEL_NAME_DROP 8 +#define GLUI_PANEL_EMBOSS_TOP 4 +/* #define GLUI_ROTATION_WIDTH 60 */ +/* #define GLUI_ROTATION_HEIGHT 78 */ +#define GLUI_ROTATION_WIDTH 50 +#define GLUI_ROTATION_HEIGHT (GLUI_ROTATION_WIDTH+18) +#define GLUI_MOUSE_INTERACTION_WIDTH 50 +#define GLUI_MOUSE_INTERACTION_HEIGHT (GLUI_MOUSE_INTERACTION_WIDTH)+18 + +/** Different panel control types **/ +#define GLUI_PANEL_NONE 0 +#define GLUI_PANEL_EMBOSSED 1 +#define GLUI_PANEL_RAISED 2 + +/** Max # of els in control's float_array **/ +#define GLUI_DEF_MAX_ARRAY 30 + +/********* The control's 'active' behavior *********/ +#define GLUI_CONTROL_ACTIVE_MOUSEDOWN 1 +#define GLUI_CONTROL_ACTIVE_PERMANENT 2 + +/********* Control alignment types **********/ +#define GLUI_ALIGN_CENTER 1 +#define GLUI_ALIGN_RIGHT 2 +#define GLUI_ALIGN_LEFT 3 + +/********** Limit types - how to limit spinner values *********/ +#define GLUI_LIMIT_NONE 0 +#define GLUI_LIMIT_CLAMP 1 +#define GLUI_LIMIT_WRAP 2 + +/********** Translation control types ********************/ +#define GLUI_TRANSLATION_XY 0 +#define GLUI_TRANSLATION_Z 1 +#define GLUI_TRANSLATION_X 2 +#define GLUI_TRANSLATION_Y 3 + +#define GLUI_TRANSLATION_LOCK_NONE 0 +#define GLUI_TRANSLATION_LOCK_X 1 +#define GLUI_TRANSLATION_LOCK_Y 2 + +/********** How was a control activated? *****************/ +#define GLUI_ACTIVATE_MOUSE 1 +#define GLUI_ACTIVATE_TAB 2 + +/********** What type of live variable does a control have? **********/ +#define GLUI_LIVE_NONE 0 +#define GLUI_LIVE_INT 1 +#define GLUI_LIVE_FLOAT 2 +#define GLUI_LIVE_TEXT 3 +#define GLUI_LIVE_STRING 6 +#define GLUI_LIVE_DOUBLE 4 +#define GLUI_LIVE_FLOAT_ARRAY 5 + +/************* Textbox and List Defaults - JVK ******************/ +#define GLUI_TEXTBOX_HEIGHT 130 +#define GLUI_TEXTBOX_WIDTH 130 +#define GLUI_LIST_HEIGHT 130 +#define GLUI_LIST_WIDTH 130 +#define GLUI_DOUBLE_CLICK 1 +#define GLUI_SINGLE_CLICK 0 +#define GLUI_TAB_WIDTH 50 /* In pixels */ +#define GLUI_TEXTBOX_BOXINNERMARGINX 3 +#define GLUI_TEXTBOX_MIN_TEXT_WIDTH 50 +#define GLUI_LIST_BOXINNERMARGINX 3 +#define GLUI_LIST_MIN_TEXT_WIDTH 50 + +/*********************** TreePanel Defaults - JVK *****************************/ +#define GLUI_TREEPANEL_DEFAULTS 0 // bar, standard bar color +#define GLUI_TREEPANEL_ALTERNATE_COLOR 1 // Alternate between 8 different bar colors +#define GLUI_TREEPANEL_ENABLE_BAR 2 // enable the bar +#define GLUI_TREEPANEL_DISABLE_BAR 4 // disable the bar +#define GLUI_TREEPANEL_DISABLE_DEEPEST_BAR 8 // disable only the deepest bar +#define GLUI_TREEPANEL_CONNECT_CHILDREN_ONLY 16 // disable only the bar of the last child of each root +#define GLUI_TREEPANEL_DISPLAY_HIERARCHY 32 // display some sort of hierachy in the tree node title +#define GLUI_TREEPANEL_HIERARCHY_NUMERICDOT 64 // display hierarchy in 1.3.2 (etc... ) format +#define GLUI_TREEPANEL_HIERARCHY_LEVEL_ONLY 128 // display hierarchy as only the level depth + +/******************* GLUI Scrollbar Defaults - JVK ***************************/ +#define GLUI_SCROLL_ARROW_WIDTH 16 +#define GLUI_SCROLL_ARROW_HEIGHT 16 +#define GLUI_SCROLL_BOX_MIN_HEIGHT 5 +#define GLUI_SCROLL_BOX_STD_HEIGHT 16 +#define GLUI_SCROLL_STATE_NONE 0 +#define GLUI_SCROLL_STATE_UP 1 +#define GLUI_SCROLL_STATE_DOWN 2 +#define GLUI_SCROLL_STATE_BOTH 3 +#define GLUI_SCROLL_STATE_SCROLL 4 +#define GLUI_SCROLL_DEFAULT_GROWTH_EXP 1.05f +#define GLUI_SCROLL_VERTICAL 0 +#define GLUI_SCROLL_HORIZONTAL 1 + + +/** Size of the character width hash table for faster lookups. + Make sure to keep this a power of two to avoid the slow divide. + This is also a speed/memory tradeoff; 128 is enough for low ASCII. +*/ +#define CHAR_WIDTH_HASH_SIZE 128 + +/********** Translation codes **********/ + +enum TranslationCodes +{ + GLUI_TRANSLATION_MOUSE_NONE = 0, + GLUI_TRANSLATION_MOUSE_UP, + GLUI_TRANSLATION_MOUSE_DOWN, + GLUI_TRANSLATION_MOUSE_LEFT, + GLUI_TRANSLATION_MOUSE_RIGHT, + GLUI_TRANSLATION_MOUSE_UP_LEFT, + GLUI_TRANSLATION_MOUSE_UP_RIGHT, + GLUI_TRANSLATION_MOUSE_DOWN_LEFT, + GLUI_TRANSLATION_MOUSE_DOWN_RIGHT +}; + +/************ A string type for us to use **********/ + +typedef std::string GLUI_String; +GLUI_String& glui_format_str(GLUI_String &str, const char* fmt, ...); + +/********* Pre-declare classes as needed *********/ + +class GLUI; +class GLUI_Control; +class GLUI_Listbox; +class GLUI_StaticText; +class GLUI_EditText; +class GLUI_Panel; +class GLUI_Spinner; +class GLUI_RadioButton; +class GLUI_RadioGroup; +class GLUI_Glut_Window; +class GLUI_TreePanel; +class GLUI_Scrollbar; +class GLUI_List; + +class Arcball; + +/*** Flags for GLUI class constructor ***/ +#define GLUI_SUBWINDOW ((long)(1<<1)) +#define GLUI_SUBWINDOW_TOP ((long)(1<<2)) +#define GLUI_SUBWINDOW_BOTTOM ((long)(1<<3)) +#define GLUI_SUBWINDOW_LEFT ((long)(1<<4)) +#define GLUI_SUBWINDOW_RIGHT ((long)(1<<5)) + +/*** Codes for different type of edittext boxes and spinners ***/ +#define GLUI_EDITTEXT_TEXT 1 +#define GLUI_EDITTEXT_INT 2 +#define GLUI_EDITTEXT_FLOAT 3 +#define GLUI_SPINNER_INT GLUI_EDITTEXT_INT +#define GLUI_SPINNER_FLOAT GLUI_EDITTEXT_FLOAT +#define GLUI_SCROLL_INT GLUI_EDITTEXT_INT +#define GLUI_SCROLL_FLOAT GLUI_EDITTEXT_FLOAT +// This is only for deprecated interface +#define GLUI_EDITTEXT_STRING 4 + +/*** Definition of callbacks ***/ +typedef void (*GLUI_Update_CB) (int id); +typedef void (*GLUI_Control_CB)(GLUI_Control *); +typedef void (*Int1_CB) (int); +typedef void (*Int2_CB) (int, int); +typedef void (*Int3_CB) (int, int, int); +typedef void (*Int4_CB) (int, int, int, int); + +/************************************************************/ +/** + Callback Adapter Class + Allows us to support different types of callbacks; + like a GLUI_Update_CB function pointer--which takes an int; + and a GLUI_Control_CB function pointer--which takes a GUI_Control object. +*/ +class GLUI_API GLUI_CB +{ +public: + GLUI_CB() : idCB(0),objCB(0) {} + GLUI_CB(GLUI_Update_CB cb) : idCB(cb),objCB(0) {} + GLUI_CB(GLUI_Control_CB cb) : idCB(0),objCB(cb) {} + // (Compiler generated copy constructor) + + /** This control just activated. Fire our callback.*/ + void operator()(GLUI_Control *ctrl) const; + bool operator!() const { return !idCB && !objCB; } + operator bool() const { return !(!(*this)); } +private: + GLUI_Update_CB idCB; + GLUI_Control_CB objCB; +}; + +/************************************************************/ +/* */ +/* Base class, for hierarchical relationships */ +/* */ +/************************************************************/ + +class GLUI_Control; + +/** + GLUI_Node is a node in a sort of tree of GLUI controls. + Each GLUI_Node has a list of siblings (in a circular list) + and a linked list of children. + + Everything onscreen is a GLUI_Node--windows, buttons, etc. + The nodes are traversed for event processing, sizing, redraws, etc. +*/ +class GLUI_API GLUI_Node +{ + friend class GLUI_Tree; /* JVK */ + friend class GLUI_Rollout; + friend class GLUI_Main; + +public: + GLUI_Node(); + virtual ~GLUI_Node() {} + + GLUI_Node *first_sibling(); + GLUI_Node *last_sibling(); + GLUI_Node *prev(); + GLUI_Node *next(); + + GLUI_Node *first_child() { return child_head; } + GLUI_Node *last_child() { return child_tail; } + GLUI_Node *parent() { return parent_node; } + + /** Link in a new child control */ + virtual int add_control( GLUI_Control *control ); + + void link_this_to_parent_last (GLUI_Node *parent ); + void link_this_to_parent_first(GLUI_Node *parent ); + void link_this_to_sibling_next(GLUI_Node *sibling ); + void link_this_to_sibling_prev(GLUI_Node *sibling ); + void unlink(); + + void dump( FILE *out, const char *name ); + +protected: + static void add_child_to_control(GLUI_Node *parent,GLUI_Control *child); + GLUI_Node *parent_node; + GLUI_Node *child_head; + GLUI_Node *child_tail; + GLUI_Node *next_sibling; + GLUI_Node *prev_sibling; +}; + + +/************************************************************/ +/* */ +/* Standard Bitmap stuff */ +/* */ +/************************************************************/ + +enum GLUI_StdBitmaps_Codes +{ + GLUI_STDBITMAP_CHECKBOX_OFF = 0, + GLUI_STDBITMAP_CHECKBOX_ON, + GLUI_STDBITMAP_RADIOBUTTON_OFF, + GLUI_STDBITMAP_RADIOBUTTON_ON, + GLUI_STDBITMAP_UP_ARROW, + GLUI_STDBITMAP_DOWN_ARROW, + GLUI_STDBITMAP_LEFT_ARROW, + GLUI_STDBITMAP_RIGHT_ARROW, + GLUI_STDBITMAP_SPINNER_UP_OFF, + GLUI_STDBITMAP_SPINNER_UP_ON, + GLUI_STDBITMAP_SPINNER_DOWN_OFF, + GLUI_STDBITMAP_SPINNER_DOWN_ON, + GLUI_STDBITMAP_CHECKBOX_OFF_DIS, /*** Disactivated control bitmaps ***/ + GLUI_STDBITMAP_CHECKBOX_ON_DIS, + GLUI_STDBITMAP_RADIOBUTTON_OFF_DIS, + GLUI_STDBITMAP_RADIOBUTTON_ON_DIS, + GLUI_STDBITMAP_SPINNER_UP_DIS, + GLUI_STDBITMAP_SPINNER_DOWN_DIS, + GLUI_STDBITMAP_LISTBOX_UP, + GLUI_STDBITMAP_LISTBOX_DOWN, + GLUI_STDBITMAP_LISTBOX_UP_DIS, + GLUI_STDBITMAP_NUM_ITEMS +}; + +/************************************************************/ +/* */ +/* Class GLUI_Bitmap */ +/* */ +/************************************************************/ + +/** + GLUI_Bitmap is a simple 2D texture map. It's used + to represent small textures like checkboxes, arrows, etc. + via the GLUI_StdBitmaps class. +*/ +class GLUI_Bitmap +{ + friend class GLUI_StdBitmaps; + +public: + GLUI_Bitmap(); + ~GLUI_Bitmap(); + + /** Create bitmap from greyscale byte image */ + void init_grey(unsigned char *array); + + /** Create bitmap from color int image */ + void init(int *array); + +private: + /** RGB pixel data */ + unsigned char *pixels; + int w, h; +}; + + +/************************************************************/ +/* */ +/* Class GLUI_StdBitmap */ +/* */ +/************************************************************/ + +/** + Keeps an array of GLUI_Bitmap objects to represent all the + images used in the UI: checkboxes, arrows, etc. +*/ +class GLUI_StdBitmaps +{ +public: + GLUI_StdBitmaps(); + ~GLUI_StdBitmaps(); + + /** Return the width (in pixels) of the n'th standard bitmap. */ + int width (int n) const; + /** Return the height (in pixels) of the n'th standard bitmap. */ + int height(int n) const; + + /** Draw the n'th standard bitmap (one of the enums + listed in GLUI_StdBitmaps_Codes) at pixel corner (x,y). + */ + void draw(int n, int x, int y) const; + +private: + GLUI_Bitmap bitmaps[GLUI_STDBITMAP_NUM_ITEMS]; +}; + +/************************************************************/ +/* */ +/* Master GLUI Class */ +/* */ +/************************************************************/ + +/** + The master manages our interaction with GLUT. + There's only one GLUI_Master_Object. +*/ +class GLUI_API GLUI_Master_Object +{ + + friend void glui_idle_func(); + +public: + + GLUI_Master_Object(); + ~GLUI_Master_Object(); + + GLUI_Node gluis; + GLUI_Control *active_control, *curr_left_button_glut_menu; + GLUI *active_control_glui; + int glui_id_counter; + + GLUI_Glut_Window *find_glut_window( int window_id ); + + void set_glutIdleFunc(void (*f)(void)); + + /************** + void (*glut_keyboard_CB)(unsigned char, int, int); + void (*glut_reshape_CB)(int, int); + void (*glut_special_CB)(int, int, int); + void (*glut_mouse_CB)(int,int,int,int); + + void (*glut_passive_motion_CB)(int,int); + void (*glut_visibility_CB)(int); + void (*glut_motion_CB)(int,int); + void (*glut_display_CB)(void); + void (*glut_entry_CB)(int); + **********/ + + void set_left_button_glut_menu_control( GLUI_Control *control ); + + /********** GLUT callthroughs **********/ + /* These are the glut callbacks that we do not handle */ + + void set_glutReshapeFunc (void (*f)(int width, int height)); + void set_glutKeyboardFunc(void (*f)(unsigned char key, int x, int y)); + void set_glutSpecialFunc (void (*f)(int key, int x, int y)); + void set_glutMouseFunc (void (*f)(int, int, int, int )); + void set_glutMotionFunc(void (*f)(int x, int y)); + + void set_glutDisplayFunc(void (*f)(void)) {glutDisplayFunc(f);} + void set_glutTimerFunc(unsigned int millis, void (*f)(int value), int value) + { ::glutTimerFunc(millis,f,value);} + void set_glutOverlayDisplayFunc(void(*f)(void)){glutOverlayDisplayFunc(f);} + void set_glutSpaceballMotionFunc(Int3_CB f) {glutSpaceballMotionFunc(f);} + void set_glutSpaceballRotateFunc(Int3_CB f) {glutSpaceballRotateFunc(f);} + void set_glutSpaceballButtonFunc(Int2_CB f) {glutSpaceballButtonFunc(f);} + void set_glutTabletMotionFunc(Int2_CB f) {glutTabletMotionFunc(f);} + void set_glutTabletButtonFunc(Int4_CB f) {glutTabletButtonFunc(f);} + /* void set_glutWindowStatusFunc(Int1_CB f) {glutWindowStatusFunc(f);} */ + void set_glutMenuStatusFunc(Int3_CB f) {glutMenuStatusFunc(f);} + void set_glutMenuStateFunc(Int1_CB f) {glutMenuStateFunc(f);} + void set_glutButtonBoxFunc(Int2_CB f) {glutButtonBoxFunc(f);} + void set_glutDialsFunc(Int2_CB f) {glutDialsFunc(f);} + + + GLUI *create_glui( const char *name, long flags=0, int x=-1, int y=-1, int w=-1, int h=-1 ); + GLUI *create_glui_subwindow( int parent_window, long flags=0 ); + GLUI *find_glui_by_window_id( int window_id ); + void get_viewport_area( int *x, int *y, int *w, int *h ); + void auto_set_viewport(); + void close_all(); + void sync_live_all(); + + void reshape(); + + float get_version() { return GLUI_VERSION; } + + void glui_setIdleFuncIfNecessary(void); + +private: + GLUI_Node glut_windows; + void (*glut_idle_CB)(void); + + void add_cb_to_glut_window(int window,int cb_type,void *cb); +}; + +/** + This is the only GLUI_Master_Object in existence. +*/ +extern GLUI_API GLUI_Master_Object GLUI_Master; + +/************************************************************/ +/* */ +/* Class for managing a GLUT window */ +/* */ +/************************************************************/ + +/** + A top-level window. The GLUI_Master GLUT callback can route events + to the callbacks in this class, for arbitrary use by external users. + (see GLUI_Master_Object::set_glutKeyboardFunc). + + This entire approach seems to be superceded by the "subwindow" flavor + of GLUI. +*/ +class GLUI_Glut_Window : public GLUI_Node +{ +public: + GLUI_Glut_Window(); + + int glut_window_id; + + /*********** Pointers to GLUT callthrough functions *****/ + void (*glut_keyboard_CB)(unsigned char, int, int); + void (*glut_special_CB)(int, int, int); + void (*glut_reshape_CB)(int, int); + void (*glut_passive_motion_CB)(int,int); + void (*glut_mouse_CB)(int,int,int,int); + void (*glut_visibility_CB)(int); + void (*glut_motion_CB)(int,int); + void (*glut_display_CB)(void); + void (*glut_entry_CB)(int); +}; + +/************************************************************/ +/* */ +/* Main Window GLUI class (not user-level) */ +/* */ +/************************************************************/ + +/** + A GLUI_Main handles GLUT events for one window, routing them to the + appropriate controls. The central user-visible "GLUI" class + inherits from this class; users should not allocate GLUT_Main objects. + + There's a separate GLUI_Main object for: + - Each top-level window with GUI stuff in it. + - Each "subwindow" of another top-level window. + + All the GLUI_Main objects are listed in GLUI_Master.gluis. + A better name for this class might be "GLUI_Environment"; + this class provides the window-level context for every control. +*/ +class GLUI_Main : public GLUI_Node +{ + /********** Friend classes *************/ + + friend class GLUI_Control; + friend class GLUI_Rotation; + friend class GLUI_Translation; + friend class GLUI; + friend class GLUI_Master_Object; + + /*********** Friend functions **********/ + + friend void glui_mouse_func(int button, int state, int x, int y); + friend void glui_keyboard_func(unsigned char key, int x, int y); + friend void glui_special_func(int key, int x, int y); + friend void glui_passive_motion_func(int x, int y); + friend void glui_reshape_func( int w, int h ); + friend void glui_visibility_func(int state); + friend void glui_motion_func(int x, int y); + friend void glui_entry_func(int state); + friend void glui_display_func( void ); + friend void glui_idle_func(void); + + friend void glui_parent_window_reshape_func( int w, int h ); + friend void glui_parent_window_keyboard_func( unsigned char, int, int ); + friend void glui_parent_window_special_func( int, int, int ); + friend void glui_parent_window_mouse_func( int, int, int, int ); + +protected: + /*** Variables ***/ + int main_gfx_window_id; + int mouse_button_down; + int glut_window_id; + int top_level_glut_window_id; + GLUI_Control *active_control; + GLUI_Control *mouse_over_control; + GLUI_Panel *main_panel; + enum buffer_mode_t { + buffer_front=1, ///< Draw updated controls directly to screen. + buffer_back=2 ///< Double buffering: postpone updates until next redraw. + }; + buffer_mode_t buffer_mode; ///< Current drawing mode + int curr_cursor; + int w, h; + long flags; + bool closing; + int parent_window; + int glui_id; + + /********** Misc functions *************/ + + GLUI_Control *find_control( int x, int y ); + GLUI_Control *find_next_control( GLUI_Control *control ); + GLUI_Control *find_next_control_rec( GLUI_Control *control ); + GLUI_Control *find_next_control_( GLUI_Control *control ); + GLUI_Control *find_prev_control( GLUI_Control *control ); + void create_standalone_window( const char *name, int x=-1, int y=-1, int w=100, int h=100 ); + void create_subwindow( int parent,int window_alignment ); + void setup_default_glut_callbacks( void ); + + void mouse(int button, int state, int x, int y); + void keyboard(unsigned char key, int x, int y); + void special(int key, int x, int y); + void passive_motion(int x, int y); + void reshape( int w, int h ); + void visibility(int state); + void motion(int x, int y); + void entry(int state); + void display( void ); + void idle(void); + int needs_idle(void); + + void (*glut_mouse_CB)(int, int, int, int); + void (*glut_keyboard_CB)(unsigned char, int, int); + void (*glut_special_CB)(int, int, int); + void (*glut_reshape_CB)(int, int); + + + /*********** Controls ************/ + + virtual int add_control( GLUI_Node *parent, GLUI_Control *control ); + + + /********** Constructors and Destructors ***********/ + + GLUI_Main( void ); + +public: + GLUI_StdBitmaps std_bitmaps; + GLUI_String window_name; + RGBc bkgd_color; + float bkgd_color_f[3]; + + void *font; + int curr_modifiers; + + void adjust_glut_xy( int &x, int &y ) { y = h-y; } + void activate_control( GLUI_Control *control, int how ); + void align_controls( GLUI_Control *control ); + void deactivate_current_control( void ); + + /** Draw a 3D-look pushed-out box around this rectangle */ + void draw_raised_box( int x, int y, int w, int h ); + /** Draw a 3D-look pushed-in box around this rectangle */ + void draw_lowered_box( int x, int y, int w, int h ); + + /** Return true if this control should redraw itself immediately (front buffer); + Or queue up a redraw and return false if it shouldn't (back buffer). + */ + bool should_redraw_now(GLUI_Control *ctl); + + /** Switch to the appropriate draw buffer now. Returns the old draw buffer. + This routine should probably only be called from inside the GLUI_DrawingSentinal, + in glui_internal_control.h + */ + int set_current_draw_buffer(); + /** Go back to using this draw buffer. Undoes set_current_draw_buffer. */ + void restore_draw_buffer( int buffer_state ); + + /** Pack, resize the window, and redraw all the controls. */ + void refresh(); + + /** Redraw the main graphics window */ + void post_update_main_gfx(); + + /** Recompute the sizes and positions of all controls */ + void pack_controls(); + + void close_internal(); + void check_subwindow_position(); + void set_ortho_projection(); + void set_viewport(); + int get_glut_window_id( void ) { return glut_window_id; } /* JVK */ +}; + +/************************************************************/ +/* */ +/* GLUI_Control: base class for all controls */ +/* */ +/************************************************************/ + +/** + All the GUI objects inherit from GLUI_Control: buttons, + checkboxes, labels, edit boxes, scrollbars, etc. + Most of the work of this class is in routing events, + like keystrokes, mouseclicks, redraws, and sizing events. + + Yes, this is a huge and hideous class. It needs to be + split up into simpler subobjects. None of the data members + should be directly accessed by users (they should be protected, + not public); only subclasses. +*/ +class GLUI_API GLUI_Control : public GLUI_Node +{ +public: + +/** Onscreen coordinates */ + int w, h; /* dimensions of control */ + int x_abs, y_abs; + int x_off, y_off_top, y_off_bot; /* INNER margins, by which child + controls are indented */ + int contain_x, contain_y; + int contain_w, contain_h; + /* if this is a container control (e.g., + radiogroup or panel) this indicated dimensions + of inner area in which controls reside */ + +/** "activation" for tabbing between controls. */ + int active_type; ///< "GLUI_CONTROL_ACTIVE_..." + bool active; ///< If true, we've got the focus + bool can_activate; ///< If false, remove from tab order. + bool spacebar_mouse_click; ///< Spacebar simulates click. + +/** Callbacks */ + long user_id; ///< Integer to pass to callback function. + GLUI_CB callback; ///< User callback function, or NULL. + +/** Variable value storage */ + float float_val; /**< Our float value */ + int int_val; /**< Our integer value */ + float float_array_val[GLUI_DEF_MAX_ARRAY]; + int float_array_size; + GLUI_String text; /**< The text inside this control */ + +/** "Live variable" updating */ + void *ptr_val; /**< A pointer to the user's live variable value */ + int live_type; + bool live_inited; + /* These variables store the last value that live variable was known to have. */ + int last_live_int; + float last_live_float; + GLUI_String last_live_text; + float last_live_float_array[GLUI_DEF_MAX_ARRAY]; + +/** Properties of our control */ + GLUI *glui; /**< Our containing event handler (NEVER NULL during event processing!) */ + bool is_container; /**< Is this a container class (e.g., panel) */ + int alignment; + bool enabled; /**< Is this control grayed out? */ + GLUI_String name; /**< The name of this control */ + void *font; /**< Our glutbitmap font */ + bool collapsible, is_open; + GLUI_Node collapsed_node; + bool hidden; /* Collapsed controls (and children) are hidden */ + int char_widths[CHAR_WIDTH_HASH_SIZE][2]; /* Character width hash table */ + +public: + /*** Get/Set values ***/ + virtual void set_name( const char *string ); + virtual void set_int_val( int new_int ) { int_val = new_int; output_live(true); } + virtual void set_float_val( float new_float ) { float_val = new_float; output_live(true); } + virtual void set_ptr_val( void *new_ptr ) { ptr_val = new_ptr; output_live(true); } + virtual void set_float_array_val( float *array_ptr ); + + virtual float get_float_val( void ) { return float_val; } + virtual int get_int_val( void ) { return int_val; } + virtual void get_float_array_val( float *array_ptr ); + virtual int get_id( void ) const { return user_id; } + virtual void set_id( int id ) { user_id=id; } + + virtual int mouse_down_handler( int local_x, int local_y ) { return false; } + virtual int mouse_up_handler( int local_x, int local_y, bool inside ) { return false; } + virtual int mouse_held_down_handler( int local_x, int local_y, bool inside) { return false; } + virtual int key_handler( unsigned char key, int modifiers ) { return false; } + virtual int special_handler( int key,int modifiers ) { return false; } + + virtual void update_size( void ) { } + virtual void idle( void ) { } + virtual int mouse_over( int state, int x, int y ) { return false; } + + virtual void enable( void ); + virtual void disable( void ); + virtual void activate( int how ) { active = true; } + virtual void deactivate( void ) { active = false; } + + /** Hide (shrink into a rollout) and unhide (expose from a rollout) */ + void hide_internal( int recurse ); + void unhide_internal( int recurse ); + + /** Return true if it currently makes sense to draw this class. */ + int can_draw( void ) { return (glui != NULL && hidden == false); } + + /** Redraw this control. + In single-buffering mode (drawing to GL_FRONT), this is just + a call to translate_and_draw_front (after a can_draw() check). + In double-buffering mode (drawing to GL_BACK), this queues up + a redraw and returns false, since you shouldn't draw yet. + */ + void redraw(void); + + /** Redraw everybody in our window. */ + void redraw_window(void); + + virtual void align( void ); + void pack( int x, int y ); /* Recalculate positions and offsets */ + void pack_old( int x, int y ); + void draw_recursive( int x, int y ); + int set_to_glut_window( void ); + void restore_window( int orig ); + void translate_and_draw_front( void ); + void translate_to_origin( void ) + {glTranslatef((float)x_abs+.5,(float)y_abs+.5,0.0);} + virtual void draw( int x, int y )=0; + void set_font( void *new_font ); + void *get_font( void ); + int string_width( const char *text ); + int string_width( const GLUI_String &str ) + { return string_width(str.c_str()); } + int char_width( char c ); + + void draw_name( int x, int y ); + void draw_box_inwards_outline( int x_min, int x_max, + int y_min, int y_max ); + void draw_box( int x_min, int x_max, int y_min, int y_max, + float r, float g, float b ); + void draw_bkgd_box( int x_min, int x_max, int y_min, int y_max ); + void draw_emboss_box( int x_min, int x_max,int y_min,int y_max); + void draw_string( const char *text ); + void draw_string( const GLUI_String &s ) + { draw_string(s.c_str()); } + void draw_char( char c ); + void draw_active_box( int x_min, int x_max, int y_min, int y_max ); + void set_to_bkgd_color( void ); + + void set_w( int new_w ); + void set_h( int new_w ); + void set_alignment( int new_align ); + void sync_live( int recurse, int draw ); /* Reads live variable */ + void init_live( void ); + void output_live( int update_main_gfx ); /** Writes live variable **/ + virtual void set_text( const char *t ) {} + void execute_callback( void ); + void get_this_column_dims( int *col_x, int *col_y, + int *col_w, int *col_h, + int *col_x_off, int *col_y_off ); + virtual bool needs_idle( void ) const; + virtual bool wants_tabs() const { return false; } + + GLUI_Control(void) + { + x_off = GLUI_XOFF; + y_off_top = GLUI_YOFF; + y_off_bot = GLUI_YOFF; + x_abs = GLUI_XOFF; + y_abs = GLUI_YOFF; + active = false; + enabled = true; + int_val = 0; + last_live_int = 0; + float_array_size = 0; + glui_format_str(name, "Control: %p", this); + float_val = 0.0; + last_live_float = 0.0; + ptr_val = NULL; + glui = NULL; + w = GLUI_DEFAULT_CONTROL_WIDTH; + h = GLUI_DEFAULT_CONTROL_HEIGHT; + font = NULL; + active_type = GLUI_CONTROL_ACTIVE_MOUSEDOWN; + alignment = GLUI_ALIGN_LEFT; + is_container = false; + can_activate = true; /* By default, you can activate a control */ + spacebar_mouse_click = true; /* Does spacebar simulate a mouse click? */ + live_type = GLUI_LIVE_NONE; + text = ""; + last_live_text == ""; + live_inited = false; + collapsible = false; + is_open = true; + hidden = false; + memset(char_widths, -1, sizeof(char_widths)); /* JVK */ + int i; + for( i=0; iint_val = 1; set_color(red, green, blue); } } + void disable_bar() { if (column) { column->int_val = 0; } } + void set_child_number(int c) { child_number = c; } + void set_level_color(float r, float g, float b) { + lred = r; + lgreen = g; + lblue = b; + } + void set_color(float r, float g, float b) { + red = r; + green = g; + blue = b; + } +protected: + void common_init() + { + currently_inside = false; + initially_inside = false; + can_activate = true; + is_container = true; + h = GLUI_DEFAULT_CONTROL_HEIGHT + 7; + w = GLUI_DEFAULT_CONTROL_WIDTH; + y_off_top = 21; + collapsible = true; + red = .5; + green = .5; + blue = .5; + lred = 0; + lgreen = 0; + lblue = 0; + column = NULL; + is_current = 0; + child_number = 0; + format = 0; + panel = NULL; + name = ""; + level_name = ""; + level = 0; + + }; +}; + + +/************************************************************/ +/* */ +/* TreePanel class (container) JVK */ +/* */ +/************************************************************/ + +/** + Manages, maintains, and formats a tree of GLUI_Tree objects. + These are shown in a heirarchical, collapsible display. + + FIXME: There's an infinite loop in the traversal code (OSL 2006/06) +*/ +class GLUI_TreePanel : public GLUI_Panel +{ +public: + GLUI_TreePanel(GLUI_Node *parent, const char *name, + bool open=false, int inset=0); + + int max_levels; + int next_id; + int format; + float red; + float green; + float blue; + float lred; + float lgreen; + float lblue; + int root_children; + /* These variables allow the tree panel to traverse the tree + using only two function calls. (Well, four, if you count + going in reverse */ + + GLUI_Tree *curr_branch; /* Current Branch */ + GLUI_Panel *curr_root; /* Current Root */ + +public: + void set_color(float r, float g, float b); + void set_level_color(float r, float g, float b); + void set_format(int f) { format = f; } + + /* Adds branch to curr_root */ + GLUI_Tree * ab(const char *name, GLUI_Tree *root = NULL); + /* Goes up one level, resets curr_root and curr_branch to parents*/ + void fb(GLUI_Tree *branch= NULL); + /* Deletes the curr_branch, goes up one level using fb */ + void db(GLUI_Tree *branch = NULL); + /* Finds the very last branch of curr_root, resets vars */ + void descendBranch(GLUI_Panel *root = NULL); + /* Resets curr_root and curr branch to TreePanel and lastChild */ + void resetToRoot(GLUI_Panel *new_root = NULL); + void next( void ); + void refresh( void ); + void expand_all( void ); + void collapse_all( void ); + void update_all( void ); + void initNode(GLUI_Tree *temp); + void formatNode(GLUI_Tree *temp); + +protected: + int uniqueID( void ) { next_id++; return next_id - 1; } + void common_init() + { + GLUI_Panel(); + next_id = 0; + curr_root = this; + curr_branch = NULL; + red = .5; + green = .5; + blue = .5; + root_children = 0; + } +}; + +/************************************************************/ +/* */ +/* User-Level GLUI class */ +/* */ +/************************************************************/ + +class GLUI_Rotation; +class GLUI_Translation; + +/** + The main user-visible interface object to GLUI. + +*/ +class GLUI : public GLUI_Main +{ +public: +/** DEPRECATED interface for creating new GLUI objects */ + int add_control( GLUI_Control *control ) { return main_panel->add_control(control); } + + void add_column( int draw_bar = true ); + void add_column_to_panel( GLUI_Panel *panel, int draw_bar = true ); + + void add_separator( void ); + void add_separator_to_panel( GLUI_Panel *panel ); + + GLUI_RadioGroup + *add_radiogroup( int *live_var=NULL, + int user_id=-1,GLUI_CB callback=GLUI_CB()); + + GLUI_RadioGroup + *add_radiogroup_to_panel( GLUI_Panel *panel, + int *live_var=NULL, + int user_id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_RadioButton + *add_radiobutton_to_group( GLUI_RadioGroup *group, + const char *name ); + + GLUI_Listbox *add_listbox( const char *name, int *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Listbox *add_listbox_to_panel( GLUI_Panel *panel, + const char *name, int *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB()); + + GLUI_Rotation *add_rotation( const char *name, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Rotation *add_rotation_to_panel( GLUI_Panel *panel, + const char *name, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB()); + + GLUI_Translation *add_translation( const char *name, + int trans_type, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Translation *add_translation_to_panel( + GLUI_Panel *panel, const char *name, + int trans_type, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB()); + + GLUI_Checkbox *add_checkbox( const char *name, + int *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB()); + GLUI_Checkbox *add_checkbox_to_panel( GLUI_Panel *panel, const char *name, + int *live_var=NULL, int id=-1, + GLUI_CB callback=GLUI_CB()); + + GLUI_Button *add_button( const char *name, int id=-1, + GLUI_CB callback=GLUI_CB()); + GLUI_Button *add_button_to_panel( GLUI_Panel *panel, const char *name, + int id=-1, GLUI_CB callback=GLUI_CB() ); + + GLUI_StaticText *add_statictext( const char *name ); + GLUI_StaticText *add_statictext_to_panel( GLUI_Panel *panel, const char *name ); + + GLUI_EditText *add_edittext( const char *name, + int data_type=GLUI_EDITTEXT_TEXT, + void*live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_EditText *add_edittext_to_panel( GLUI_Panel *panel, + const char *name, + int data_type=GLUI_EDITTEXT_TEXT, + void *live_var=NULL, int id=-1, + GLUI_CB callback=GLUI_CB() ); + GLUI_EditText *add_edittext( const char *name, GLUI_String& live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_EditText *add_edittext_to_panel( GLUI_Panel *panel, const char *name, + GLUI_String& live_var, int id=-1, + GLUI_CB callback=GLUI_CB() ); + + GLUI_Spinner *add_spinner( const char *name, + int data_type=GLUI_SPINNER_INT, + void *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Spinner *add_spinner_to_panel( GLUI_Panel *panel, + const char *name, + int data_type=GLUI_SPINNER_INT, + void *live_var=NULL, + int id=-1, + GLUI_CB callback=GLUI_CB() ); + + GLUI_Panel *add_panel( const char *name, int type=GLUI_PANEL_EMBOSSED ); + GLUI_Panel *add_panel_to_panel( GLUI_Panel *panel, const char *name, + int type=GLUI_PANEL_EMBOSSED ); + + + GLUI_Rollout *add_rollout( const char *name, int open=true, + int type=GLUI_PANEL_EMBOSSED); + GLUI_Rollout *add_rollout_to_panel( GLUI_Panel *panel, const char *name, + int open=true, + int type=GLUI_PANEL_EMBOSSED); + + +/** Set the window where our widgets should be displayed. */ + void set_main_gfx_window( int window_id ); + int get_glut_window_id( void ) { return glut_window_id; } + + void enable( void ) { main_panel->enable(); } + void disable( void ); + + void sync_live( void ); + + void close( void ); + + void show( void ); + void hide( void ); + + /***** GLUT callback setup functions *****/ + /* + void set_glutDisplayFunc(void (*f)(void)); + void set_glutReshapeFunc(void (*f)(int width, int height)); + void set_glutKeyboardFunc(void (*f)(unsigned char key, int x, int y)); + void set_glutSpecialFunc(void (*f)(int key, int x, int y)); + void set_glutMouseFunc(void (*f)(int button, int state, int x, int y)); + void set_glutMotionFunc(void (*f)(int x, int y)); + void set_glutPassiveMotionFunc(void (*f)(int x, int y)); + void set_glutEntryFunc(void (*f)(int state)); + void set_glutVisibilityFunc(void (*f)(int state)); + void set_glutInit( int *argcp, const char **argv ); + void set_glutInitWindowSize(int width, int height); + void set_glutInitWindowPosition(int x, int y); + void set_glutInitDisplayMode(unsigned int mode); + int set_glutCreateWindow(const char *name); + */ + + /***** Constructors and desctructors *****/ + + int init( const char *name, long flags, int x, int y, int parent_window, int w=-1, int h=-1 ); +protected: + virtual int add_control( GLUI_Node *parent, GLUI_Control *control ) { + return GLUI_Main::add_control( parent, control ); + } +}; + +/************************************************************/ +/* */ +/* EditText class */ +/* */ +/************************************************************/ + +class GLUI_EditText : public GLUI_Control +{ +public: + int has_limits; + int data_type; + GLUI_String orig_text; + int insertion_pt; + int title_x_offset; + int text_x_offset; + int substring_start; /*substring that gets displayed in box*/ + int substring_end; + int sel_start, sel_end; /* current selection */ + int num_periods; + int last_insertion_pt; + float float_low, float_high; + int int_low, int_high; + GLUI_Spinner *spinner; + int debug; + int draw_text_only; + + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key, int modifiers ); + + void activate( int how ); + void deactivate( void ); + + void draw( int x, int y ); + + int mouse_over( int state, int x, int y ); + + int find_word_break( int start, int direction ); + int substring_width( int start, int end ); + void clear_substring( int start, int end ); + int find_insertion_pt( int x, int y ); + int update_substring_bounds( void ); + void update_and_draw_text( void ); + void draw_text( int x, int y ); + void draw_insertion_pt( void ); + void set_numeric_text( void ); + void update_x_offsets( void ); + void update_size( void ); + + void set_float_limits( float low,float high,int limit_type=GLUI_LIMIT_CLAMP); + void set_int_limits( int low, int high, int limit_type=GLUI_LIMIT_CLAMP ); + void set_float_val( float new_val ); + void set_int_val( int new_val ); + void set_text( const char *text ); + void set_text( const GLUI_String &s) { set_text(s.c_str()); } + const char *get_text() { return text.c_str(); } + + void dump( FILE *out, const char *text ); + + // Constructor, no live variable + GLUI_EditText( GLUI_Node *parent, const char *name, + int text_type=GLUI_EDITTEXT_TEXT, + int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, int live variable + GLUI_EditText( GLUI_Node *parent, const char *name, + int *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, float live variable + GLUI_EditText( GLUI_Node *parent, const char *name, + float *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, char* live variable + GLUI_EditText( GLUI_Node *parent, const char *name, + char *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, std::string live variable + GLUI_EditText( GLUI_Node *parent, const char *name, + std::string &live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + + // Deprecated constructor, only called internally + GLUI_EditText( GLUI_Node *parent, const char *name, + int text_type, void *live_var, + int id, GLUI_CB callback ); + // Deprecated constructor, only called internally + GLUI_EditText( void ) { common_init(); } + +protected: + void common_init( void ) { + h = GLUI_EDITTEXT_HEIGHT; + w = GLUI_EDITTEXT_WIDTH; + title_x_offset = 0; + text_x_offset = 55; + insertion_pt = -1; + last_insertion_pt = -1; + name = ""; + substring_start = 0; + data_type = GLUI_EDITTEXT_TEXT; + substring_end = 2; + num_periods = 0; + has_limits = GLUI_LIMIT_NONE; + sel_start = 0; + sel_end = 0; + active_type = GLUI_CONTROL_ACTIVE_PERMANENT; + can_activate = true; + spacebar_mouse_click = false; + spinner = NULL; + debug = false; + draw_text_only = false; + } + void common_construct( GLUI_Node *parent, const char *name, + int data_type, int live_type, void *live_var, + int id, GLUI_CB callback ); +}; + +/************************************************************/ +/* */ +/* CommandLine class */ +/* */ +/************************************************************/ + +class GLUI_CommandLine : public GLUI_EditText +{ +public: + typedef GLUI_EditText Super; + + enum { HIST_SIZE = 100 }; + std::vector hist_list; + int curr_hist; + int oldest_hist; + int newest_hist; + bool commit_flag; + +public: + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + void deactivate( void ); + + virtual const char *get_history( int command_number ) const + { return hist_list[command_number - oldest_hist].c_str(); } + virtual GLUI_String& get_history_str( int command_number ) + { return hist_list[command_number - oldest_hist]; } + virtual const GLUI_String& get_history_str( int command_number ) const + { return hist_list[command_number - oldest_hist]; } + virtual void recall_history( int history_number ); + virtual void scroll_history( int direction ); + virtual void add_to_history( const char *text ); + virtual void reset_history( void ); + + void dump( FILE *out, const char *text ); + + + GLUI_CommandLine( GLUI_Node *parent, const char *name, void *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_CommandLine( void ) { common_init(); } +protected: + void common_init() { + hist_list.resize(HIST_SIZE); + curr_hist = 0; + oldest_hist = 0; + newest_hist = 0; + commit_flag = false; + } +}; + +/************************************************************/ +/* */ +/* RadioGroup class (container) */ +/* */ +/************************************************************/ + +class GLUI_RadioGroup : public GLUI_Control +{ +public: + int num_buttons; + + void draw( int x, int y ); + void set_name( const char *text ); + void set_int_val( int int_val ); + void set_selected( int int_val ); + + void draw_group( int translate ); + + GLUI_RadioGroup( GLUI_Node *parent, int *live_var=NULL, + int user_id=-1,GLUI_CB callback=GLUI_CB() ); + GLUI_RadioGroup( void ) { common_init(); } + +protected: + void common_init( void ) { + x_off = 0; + y_off_top = 0; + y_off_bot = 0; + is_container = true; + w = 300; + h = 300; + num_buttons = 0; + name = ""; + can_activate = false; + live_type = GLUI_LIVE_INT; + } +}; + +/************************************************************/ +/* */ +/* RadioButton class (container) */ +/* */ +/************************************************************/ + +class GLUI_RadioButton : public GLUI_Control +{ +public: + int orig_value; + bool currently_inside; + int text_x_offset; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + + void draw( int x, int y ); + void update_size( void ); + + void draw_active_area( void ); + void draw_checked( void ); + void draw_unchecked( void ); + void draw_O( void ); + + GLUI_RadioButton( GLUI_RadioGroup *group, const char *name ); + GLUI_RadioGroup *group; + +protected: + void common_init() + { + glui_format_str( name, "RadioButton: %p", (void *) this ); + h = GLUI_RADIOBUTTON_SIZE; + group = NULL; + orig_value = -1; + text_x_offset = 18; + can_activate = true; + } +}; + + +/************************************************************/ +/* */ +/* Separator class (container) */ +/* */ +/************************************************************/ + +class GLUI_Separator : public GLUI_Control +{ +public: + void draw( int x, int y ); + + GLUI_Separator( GLUI_Node *parent ); + GLUI_Separator( void ) { common_init(); } + +protected: + void common_init() { + w = 100; + h = GLUI_SEPARATOR_HEIGHT; + can_activate = false; + } +}; + +#define GLUI_SPINNER_ARROW_WIDTH 12 +#define GLUI_SPINNER_ARROW_HEIGHT 8 +#define GLUI_SPINNER_ARROW_Y 2 + +#define GLUI_SPINNER_STATE_NONE 0 +#define GLUI_SPINNER_STATE_UP 1 +#define GLUI_SPINNER_STATE_DOWN 2 +#define GLUI_SPINNER_STATE_BOTH 3 + +#define GLUI_SPINNER_DEFAULT_GROWTH_EXP 1.05f + +/************************************************************/ +/* */ +/* Spinner class (container) */ +/* */ +/************************************************************/ + +class GLUI_Spinner : public GLUI_Control +{ +public: + // Constructor, no live var + GLUI_Spinner( GLUI_Node* parent, const char *name, + int data_type=GLUI_SPINNER_INT, int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, int live var + GLUI_Spinner( GLUI_Node* parent, const char *name, + int *live_var, int id=-1, GLUI_CB callback=GLUI_CB() ); + // Constructor, float live var + GLUI_Spinner( GLUI_Node* parent, const char *name, + float *live_var, int id=-1, GLUI_CB callback=GLUI_CB() ); + // Deprecated constructor + GLUI_Spinner( GLUI_Node* parent, const char *name, + int data_type, + void *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() ); + // Deprecated constructor + GLUI_Spinner( void ) { common_init(); } + + bool currently_inside; + int state; + float growth, growth_exp; + int last_x, last_y; + int data_type; + int callback_count; + int last_int_val; + float last_float_val; + int first_callback; + float user_speed; + + GLUI_EditText *edittext; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + + void draw( int x, int y ); + void draw_pressed( void ); + void draw_unpressed( void ); + void draw_text( int sunken ); + + void update_size( void ); + + void set_float_limits( float low,float high,int limit_type=GLUI_LIMIT_CLAMP); + void set_int_limits( int low, int high,int limit_type=GLUI_LIMIT_CLAMP); + int find_arrow( int local_x, int local_y ); + void do_drag( int x, int y ); + void do_callbacks( void ); + void do_click( void ); + void idle( void ); + bool needs_idle( void ) const; + + const char *get_text( void ); + + void set_float_val( float new_val ); + void set_int_val( int new_val ); + float get_float_val( void ); + int get_int_val( void ); + void increase_growth( void ); + void reset_growth( void ); + + void set_speed( float speed ) { user_speed = speed; } + +protected: + void common_init() { + glui_format_str( name, "Spinner: %p", this ); + h = GLUI_EDITTEXT_HEIGHT; + w = GLUI_EDITTEXT_WIDTH; + x_off = 0; + y_off_top = 0; + y_off_bot = 0; + can_activate = true; + state = GLUI_SPINNER_STATE_NONE; + edittext = NULL; + growth_exp = GLUI_SPINNER_DEFAULT_GROWTH_EXP; + callback_count = 0; + first_callback = true; + user_speed = 1.0; + } + void common_construct( GLUI_Node* parent, const char *name, + int data_type, void *live_var, + int id, GLUI_CB callback ); +}; + +/************************************************************/ +/* */ +/* StaticText class */ +/* */ +/************************************************************/ + +class GLUI_StaticText : public GLUI_Control +{ +public: + void set_text( const char *text ); + void draw( int x, int y ); + void draw_text( void ); + void update_size( void ); + void erase_text( void ); + + GLUI_StaticText(GLUI_Node *parent, const char *name); + GLUI_StaticText( void ) { common_init(); } + +protected: + void common_init() { + h = GLUI_STATICTEXT_SIZE; + name = ""; + can_activate = false; + } +}; + +/************************************************************/ +/* */ +/* TextBox class - JVK */ +/* */ +/************************************************************/ + +class GLUI_TextBox : public GLUI_Control +{ +public: + /* GLUI Textbox - JVK */ + GLUI_TextBox(GLUI_Node *parent, GLUI_String &live_var, + bool scroll = false, int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_TextBox( GLUI_Node *parent, + bool scroll = false, int id=-1, + GLUI_CB callback=GLUI_CB() ); + + GLUI_String orig_text; + int insertion_pt; + int substring_start; /*substring that gets displayed in box*/ + int substring_end; + int sel_start, sel_end; /* current selection */ + int last_insertion_pt; + int debug; + int draw_text_only; + int tab_width; + int start_line; + int num_lines; + int curr_line; + int visible_lines; + int insert_x; /* Similar to "insertion_pt", these variables keep */ + int insert_y; /* track of where the ptr is, but in pixels */ + int keygoal_x; /* where up down keys would like to put insertion pt*/ + GLUI_Scrollbar *scrollbar; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + + void activate( int how ); + void deactivate( void ); + + void enable( void ); + void disable( void ); + + void draw( int x, int y ); + + int mouse_over( int state, int x, int y ); + + int get_box_width(); + int find_word_break( int start, int direction ); + int substring_width( int start, int end, int initial_width=0 ); + void clear_substring( int start, int end ); + int find_insertion_pt( int x, int y ); + int update_substring_bounds( void ); + void update_and_draw_text( void ); + void draw_text( int x, int y ); + void draw_insertion_pt( void ); + void update_x_offsets( void ); + void update_size( void ); + + void set_text( const char *text ); + const char *get_text( void ) { return text.c_str(); } + + void dump( FILE *out, char *text ); + void set_tab_w(int w) { tab_width = w; } + void set_start_line(int l) { start_line = l; } + static void scrollbar_callback(GLUI_Control*); + + bool wants_tabs( void ) const { return true; } + +protected: + void common_init() + { + h = GLUI_TEXTBOX_HEIGHT; + w = GLUI_TEXTBOX_WIDTH; + tab_width = GLUI_TAB_WIDTH; + num_lines = 0; + visible_lines = 0; + start_line = 0; + curr_line = 0; + insert_y = -1; + insert_x = -1; + insertion_pt = -1; + last_insertion_pt = -1; + name[0] = '\0'; + substring_start = 0; + substring_end = 2; + sel_start = 0; + sel_end = 0; + active_type = GLUI_CONTROL_ACTIVE_PERMANENT; + can_activate = true; + spacebar_mouse_click = false; + scrollbar = NULL; + debug = false; + draw_text_only = false; + } + void common_construct( + GLUI_Node *parent, GLUI_String *live_var, + bool scroll, int id, GLUI_CB callback); +}; + +/************************************************************/ +/* */ +/* List class - JVK */ +/* */ +/************************************************************/ + +class GLUI_List_Item : public GLUI_Node +{ +public: + GLUI_String text; + int id; +}; + +/************************************************************/ +/* */ +/* List class - JVK */ +/* */ +/************************************************************/ + +class GLUI_List : public GLUI_Control +{ +public: + /* GLUI List - JVK */ + GLUI_List( GLUI_Node *parent, bool scroll = false, + int id=-1, GLUI_CB callback=GLUI_CB() ); + /*, GLUI_Control *object = NULL + ,GLUI_InterObject_CB obj_cb = NULL);*/ + + GLUI_List( GLUI_Node *parent, + GLUI_String& live_var, bool scroll = false, + int id=-1, + GLUI_CB callback=GLUI_CB() + /*,GLUI_Control *object = NULL */ + /*,GLUI_InterObject_CB obj_cb = NULL*/); + + + GLUI_String orig_text; + int debug; + int draw_text_only; + int start_line; + int num_lines; + int curr_line; + int visible_lines; + GLUI_Scrollbar *scrollbar; + GLUI_List_Item items_list; + GLUI_Control *associated_object; + GLUI_CB obj_cb; + int cb_click_type; + int last_line; + int last_click_time; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + + void activate( int how ); + void deactivate( void ); + + void draw( int x, int y ); + + int mouse_over( int state, int x, int y ); + + int get_box_width(); + int find_word_break( int start, int direction ); + int substring_width( const char *t, int start, int end ); + int find_line( int x, int y ); + void update_and_draw_text( void ); + void draw_text( const char *t, int selected, int x, int y ); + void update_size( void ); + + + int add_item( int id, const char *text ); + int delete_item( const char *text ); + int delete_item( int id ); + int delete_all(); + + GLUI_List_Item *get_item_ptr( const char *text ); + GLUI_List_Item *get_item_ptr( int id ); + + void dump( FILE *out, const char *text ); + void set_start_line(int l) { start_line = l; } + static void scrollbar_callback(GLUI_Control*); + int get_current_item() { return curr_line; } + void set_click_type(int d) { + cb_click_type = d; } + void set_object_callback(GLUI_CB cb=GLUI_CB(), GLUI_Control*obj=NULL) + { obj_cb=cb; associated_object=obj; } + +protected: + void common_init() + { + h = GLUI_LIST_HEIGHT; + w = GLUI_LIST_WIDTH; + num_lines = 0; + visible_lines = 0; + start_line = 0; + curr_line = 0; + name[0] = '\0'; + active_type = GLUI_CONTROL_ACTIVE_PERMANENT; + can_activate = true; + spacebar_mouse_click = false; + scrollbar = NULL; + debug = false; + draw_text_only = false; + cb_click_type = GLUI_SINGLE_CLICK; + last_line = -1; + last_click_time = 0; + associated_object = NULL; + }; + void common_construct( + GLUI_Node *parent, + GLUI_String* live_var, bool scroll, + int id, + GLUI_CB callback + /*,GLUI_Control *object*/ + /*,GLUI_InterObject_CB obj_cb*/); +}; + +/************************************************************/ +/* */ +/* Scrollbar class - JVK */ +/* */ +/************************************************************/ + +class GLUI_Scrollbar : public GLUI_Control +{ +public: + // Constructor, no live var + GLUI_Scrollbar( GLUI_Node *parent, + const char *name, + int horz_vert=GLUI_SCROLL_HORIZONTAL, + int data_type=GLUI_SCROLL_INT, + int id=-1, GLUI_CB callback=GLUI_CB() + /*,GLUI_Control *object = NULL*/ + /*,GLUI_InterObject_CB obj_cb = NULL*/ + ); + + // Constructor, int live var + GLUI_Scrollbar( GLUI_Node *parent, const char *name, int horz_vert, + int *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() + /*,GLUI_Control *object = NULL*/ + /*,GLUI_InterObject_CB obj_cb = NULL*/ + ); + + // Constructor, float live var + GLUI_Scrollbar( GLUI_Node *parent, const char *name, int horz_vert, + float *live_var, + int id=-1, GLUI_CB callback=GLUI_CB() + /*,GLUI_Control *object = NULL*/ + /*,GLUI_InterObject_CB obj_cb = NULL*/ + ); + + bool currently_inside; + int state; + float growth, growth_exp; + int last_x, last_y; + int data_type; + int callback_count; + int last_int_val; ///< Used to prevent repeated callbacks. + float last_float_val; + int first_callback; + float user_speed; + float float_min, float_max; + int int_min, int_max; + int horizontal; + double last_update_time; ///< GLUI_Time() we last advanced scrollbar. + double velocity_limit; ///< Maximum distance to advance per second. + int box_length; + int box_start_position; + int box_end_position; + int track_length; + + + /* Rather than directly access an Editbox or Textbox for + changing variables, a pointer to some object is defined + along with a static callback in the form func(void *, int) - + the int is the new value, the void * must be cast to that + particular object type before use. + */ + void * associated_object; /* Lets the Spinner manage it's own callbacks */ + GLUI_CB object_cb; /* function pointer to object call_back */ + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + + void draw( int x, int y ); + void draw_pressed( void ); + void draw_unpressed( void ); + void draw_text( int sunken ); + + void update_size( void ); + + void set_int_limits( int low, int high,int limit_type=GLUI_LIMIT_CLAMP); + void set_float_limits( float low,float high,int limit_type=GLUI_LIMIT_CLAMP); + int find_arrow( int local_x, int local_y ); + void do_drag( int x, int y ); + void do_callbacks( void ); + void draw_scroll( void ); + void do_click( void ); + void idle( void ); + bool needs_idle( void ) const; + void set_int_val( int new_val ); + void set_float_val( float new_val ); + void increase_growth( void ); + void reset_growth( void ); + + void set_speed( float speed ) { user_speed = speed; }; + void update_scroll_parameters(); + void set_object_callback(GLUI_CB cb=GLUI_CB(), GLUI_Control*obj=NULL) + { object_cb=cb; associated_object=obj; } + +protected: + void common_init ( void ); + void common_construct( + GLUI_Node *parent, + const char *name, + int horz_vert, + int data_type, void* live_var, + int id, GLUI_CB callback + /*,GLUI_Control *object + ,GLUI_InterObject_CB obj_cb*/ + ); + + virtual void draw_scroll_arrow(int arrowtype, int x, int y); + virtual void draw_scroll_box(int x, int y, int w, int h); +}; + +/************************************************************/ +/* */ +/* Listbox class */ +/* */ +/************************************************************/ + +class GLUI_Listbox_Item : public GLUI_Node +{ +public: + GLUI_String text; + int id; +}; + +class GLUI_Listbox : public GLUI_Control +{ +public: + GLUI_String curr_text; + GLUI_Listbox_Item items_list; + int depressed; + + int orig_value; + bool currently_inside; + int text_x_offset, title_x_offset; + int glut_menu_id; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int key_handler( unsigned char key,int modifiers ); + int special_handler( int key,int modifiers ); + + void update_size( void ); + void draw( int x, int y ); + int mouse_over( int state, int x, int y ); + + void set_int_val( int new_val ); + void dump( FILE *output ); + + int add_item( int id, const char *text ); + int delete_item( const char *text ); + int delete_item( int id ); + int sort_items( void ); + + int do_selection( int item ); + + GLUI_Listbox_Item *get_item_ptr( const char *text ); + GLUI_Listbox_Item *get_item_ptr( int id ); + + + GLUI_Listbox( GLUI_Node *parent, + const char *name, int *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Listbox( void ) { common_init(); } + +protected: + /** Change w and return true if we need to be widened to fit the current item. */ + bool recalculate_item_width( void ); + void common_init() { + glui_format_str( name, "Listbox: %p", this ); + w = GLUI_EDITTEXT_WIDTH; + h = GLUI_EDITTEXT_HEIGHT; + orig_value = -1; + title_x_offset = 0; + text_x_offset = 55; + can_activate = true; + curr_text = ""; + live_type = GLUI_LIVE_INT; /* This has an integer live var */ + depressed = false; + glut_menu_id = -1; + } + + ~GLUI_Listbox(); +}; + +/************************************************************/ +/* */ +/* Mouse_Interaction class */ +/* */ +/************************************************************/ + +/** + This is the superclass of translation and rotation widgets. +*/ +class GLUI_Mouse_Interaction : public GLUI_Control +{ +public: + /*int get_main_area_size( void ) { return MIN( h-18, */ + int draw_active_area_only; + + int mouse_down_handler( int local_x, int local_y ); + int mouse_up_handler( int local_x, int local_y, bool inside ); + int mouse_held_down_handler( int local_x, int local_y, bool inside ); + int special_handler( int key, int modifiers ); + void update_size( void ); + void draw( int x, int y ); + void draw_active_area( void ); + + /*** The following methods (starting with "iaction_") need to + be overloaded ***/ + virtual int iaction_mouse_down_handler( int local_x, int local_y ) = 0; + virtual int iaction_mouse_up_handler( int local_x, int local_y, bool inside )=0; + virtual int iaction_mouse_held_down_handler( int local_x, int local_y, bool inside )=0; + virtual int iaction_special_handler( int key, int modifiers )=0; + virtual void iaction_draw_active_area_persp( void )=0; + virtual void iaction_draw_active_area_ortho( void )=0; + virtual void iaction_dump( FILE *output )=0; + virtual void iaction_init( void ) = 0; + + GLUI_Mouse_Interaction( void ) { + glui_format_str( name, "Mouse_Interaction: %p", this ); + w = GLUI_MOUSE_INTERACTION_WIDTH; + h = GLUI_MOUSE_INTERACTION_HEIGHT; + can_activate = true; + live_type = GLUI_LIVE_NONE; + alignment = GLUI_ALIGN_CENTER; + draw_active_area_only = false; + } +}; + +/************************************************************/ +/* */ +/* Rotation class */ +/* */ +/************************************************************/ + +/** + An onscreen rotation controller--allows the user to interact with + a 3D rotation via a spaceball-like interface. +*/ +class GLUI_Rotation : public GLUI_Mouse_Interaction +{ +public: + Arcball *ball; + GLUquadricObj *quadObj; + bool can_spin, spinning; + float damping; + + int iaction_mouse_down_handler( int local_x, int local_y ); + int iaction_mouse_up_handler( int local_x, int local_y, bool inside ); + int iaction_mouse_held_down_handler( int local_x, int local_y, bool inside ); + int iaction_special_handler( int key, int modifiers ); + void iaction_init( void ) { init_ball(); } + void iaction_draw_active_area_persp( void ); + void iaction_draw_active_area_ortho( void ); + void iaction_dump( FILE *output ); + + /* void update_size( void ); */ + /* void draw( int x, int y ); */ + /* int mouse_over( int state, int x, int y ); */ + + void setup_texture( void ); + void setup_lights( void ); + void draw_ball( float radius ); + + void init_ball( void ); + + void reset( void ); + + bool needs_idle( void ) const; + void idle( void ); + + void copy_float_array_to_ball( void ); + void copy_ball_to_float_array( void ); + + void set_spin( float damp_factor ); + + GLUI_Rotation( GLUI_Node *parent, const char *name, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Rotation(void) { common_init(); } + +protected: + void common_init(); +}; + +/************************************************************/ +/* */ +/* Translation class */ +/* */ +/************************************************************/ + +/** + An onscreen translation controller--allows the user to interact with + a 3D translation. +*/ +class GLUI_Translation : public GLUI_Mouse_Interaction +{ +public: + int trans_type; /* Is this an XY or a Z controller? */ + int down_x, down_y; + float scale_factor; + GLUquadricObj *quadObj; + int trans_mouse_code; + float orig_x, orig_y, orig_z; + int locked; + + int iaction_mouse_down_handler( int local_x, int local_y ); + int iaction_mouse_up_handler( int local_x, int local_y, bool inside ); + int iaction_mouse_held_down_handler( int local_x, int local_y, bool inside ); + int iaction_special_handler( int key, int modifiers ); + void iaction_init( void ) { } + void iaction_draw_active_area_persp( void ); + void iaction_draw_active_area_ortho( void ); + void iaction_dump( FILE *output ); + + void set_speed( float s ) { scale_factor = s; } + + void setup_texture( void ); + void setup_lights( void ); + void draw_2d_arrow( int radius, int filled, int orientation ); + void draw_2d_x_arrows( int radius ); + void draw_2d_y_arrows( int radius ); + void draw_2d_z_arrows( int radius ); + void draw_2d_xy_arrows( int radius ); + + int get_mouse_code( int x, int y ); + + /* Float array is either a single float (for single-axis controls), + or two floats for X and Y (if an XY controller) */ + + float get_z( void ) { return float_array_val[0]; } + float get_x( void ) { return float_array_val[0]; } + float get_y( void ) { + if ( trans_type == GLUI_TRANSLATION_XY ) return float_array_val[1]; + else return float_array_val[0]; + } + + void set_z( float val ); + void set_x( float val ); + void set_y( float val ); + void set_one_val( float val, int index ); + + GLUI_Translation( GLUI_Node *parent, const char *name, + int trans_type, float *live_var=NULL, + int id=-1, GLUI_CB callback=GLUI_CB() ); + GLUI_Translation( void ) { common_init(); } + +protected: + void common_init() { + locked = GLUI_TRANSLATION_LOCK_NONE; + glui_format_str( name, "Translation: %p", this ); + w = GLUI_MOUSE_INTERACTION_WIDTH; + h = GLUI_MOUSE_INTERACTION_HEIGHT; + can_activate = true; + live_type = GLUI_LIVE_FLOAT_ARRAY; + float_array_size = 0; + alignment = GLUI_ALIGN_CENTER; + trans_type = GLUI_TRANSLATION_XY; + scale_factor = 1.0; + quadObj = NULL; + trans_mouse_code = GLUI_TRANSLATION_MOUSE_NONE; + } +}; + +/********** Misc functions *********************/ +int _glutBitmapWidthString( void *font, const char *s ); +void _glutBitmapString( void *font, const char *s ); + +/********** Our own callbacks for glut *********/ +/* These are the callbacks that we pass to glut. They take + some action if necessary, then (possibly) call the user-level + glut callbacks. +*/ + +void glui_display_func( void ); +void glui_reshape_func( int w, int h ); +void glui_keyboard_func(unsigned char key, int x, int y); +void glui_special_func(int key, int x, int y); +void glui_mouse_func(int button, int state, int x, int y); +void glui_motion_func(int x, int y); +void glui_passive_motion_func(int x, int y); +void glui_entry_func(int state); +void glui_visibility_func(int state); +void glui_idle_func(void); + +void glui_parent_window_reshape_func( int w, int h ); +void glui_parent_window_keyboard_func(unsigned char key, int x, int y); +void glui_parent_window_mouse_func(int, int, int, int ); +void glui_parent_window_special_func(int key, int x, int y); + +#endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/include/Makefile.am b/thirdparty/carve-1.4.0/external/GLUI/include/Makefile.am new file mode 100644 index 00000000..ea0f22e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/include/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=GL diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.cpp new file mode 100644 index 00000000..ddc18f4f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.cpp @@ -0,0 +1,1609 @@ +/* + + algebra3.cpp, algebra3.h - C++ Vector and Matrix Algebra routines + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/************************************************************************** + + There are three vector classes and two matrix classes: vec2, vec3, + vec4, mat3, and mat4. + + All the standard arithmetic operations are defined, with '*' + for dot product of two vectors and multiplication of two matrices, + and '^' for cross product of two vectors. + + Additional functions include length(), normalize(), homogenize for + vectors, and print(), set(), apply() for all classes. + + There is a function transpose() for matrices, but note that it + does not actually change the matrix, + + When multiplied with a matrix, a vector is treated as a row vector + if it precedes the matrix (v*M), and as a column vector if it + follows the matrix (M*v). + + Matrices are stored in row-major form. + + A vector of one dimension (2d, 3d, or 4d) can be cast to a vector + of a higher or lower dimension. If casting to a higher dimension, + the new component is set by default to 1.0, unless a value is + specified: + vec3 a(1.0, 2.0, 3.0 ); + vec4 b( a, 4.0 ); // now b == {1.0, 2.0, 3.0, 4.0}; + When casting to a lower dimension, the vector is homogenized in + the lower dimension. E.g., if a 4d {X,Y,Z,W} is cast to 3d, the + resulting vector is {X/W, Y/W, Z/W}. It is up to the user to + insure the fourth component is not zero before casting. + + There are also the following function for building matrices: + identity2D(), translation2D(), rotation2D(), + scaling2D(), identity3D(), translation3D(), + rotation3D(), rotation3Drad(), scaling3D(), + perspective3D() + + + --------------------------------------------------------------------- + + Author: Jean-Francois DOUEg + Revised: Paul Rademacher + Version 3.2 - Feb 1998 + Revised: Nigel Stewart (GLUI Code Cleaning) + +**************************************************************************/ + +#include "algebra3.h" +#include "glui_internal.h" +#include + +#ifdef VEC_ERROR_FATAL +#ifndef VEC_ERROR +#define VEC_ERROR(E) { printf( "VERROR %s\n", E ); exit(1); } +#endif +#else +#ifndef VEC_ERROR +#define VEC_ERROR(E) { printf( "VERROR %s\n", E ); } +#endif +#endif + +/**************************************************************** + * * + * vec2 Member functions * + * * + ****************************************************************/ + +/******************** vec2 CONSTRUCTORS ********************/ + +vec2::vec2() +{ + n[VX] = n[VY] = 0.0; +} + +vec2::vec2(float x, float y) +{ + n[VX] = x; + n[VY] = y; +} + +vec2::vec2(const vec2 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; +} + +vec2::vec2(const vec3 &v) // it is up to caller to avoid divide-by-zero +{ + n[VX] = v.n[VX]/v.n[VZ]; + n[VY] = v.n[VY]/v.n[VZ]; +} + +vec2::vec2(const vec3 &v, int dropAxis) +{ + switch (dropAxis) + { + case VX: n[VX] = v.n[VY]; n[VY] = v.n[VZ]; break; + case VY: n[VX] = v.n[VX]; n[VY] = v.n[VZ]; break; + default: n[VX] = v.n[VX]; n[VY] = v.n[VY]; break; + } +} + +/******************** vec2 ASSIGNMENT OPERATORS ******************/ + +vec2 & vec2::operator=(const vec2 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + return *this; +} + +vec2 & vec2::operator+=(const vec2 &v) +{ + n[VX] += v.n[VX]; + n[VY] += v.n[VY]; + return *this; +} + +vec2 & vec2::operator-=(const vec2 &v) +{ + n[VX] -= v.n[VX]; + n[VY] -= v.n[VY]; + return *this; +} + +vec2 &vec2::operator*=(float d) +{ + n[VX] *= d; + n[VY] *= d; + return *this; +} + +vec2 &vec2::operator/=(float d) +{ + float d_inv = 1.0f/d; + n[VX] *= d_inv; + n[VY] *= d_inv; + return *this; +} + +float &vec2::operator[](int i) +{ + if (i < VX || i > VY) + //VEC_ERROR("vec2 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec2 [] operator: illegal access" ); + return n[i]; +} + +const float &vec2::operator[](int i) const +{ + if (i < VX || i > VY) + //VEC_ERROR("vec2 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec2 [] operator: illegal access" ); + + return n[i]; +} + +/******************** vec2 SPECIAL FUNCTIONS ********************/ + +float vec2::length() const +{ + return (float) sqrt(length2()); +} + +float vec2::length2() const +{ + return n[VX]*n[VX] + n[VY]*n[VY]; +} + +vec2 &vec2::normalize() // it is up to caller to avoid divide-by-zero +{ + *this /= length(); + return *this; +} + +vec2 &vec2::apply(V_FCT_PTR fct) +{ + n[VX] = (*fct)(n[VX]); + n[VY] = (*fct)(n[VY]); + return *this; +} + +void vec2::set( float x, float y ) +{ + n[VX] = x; n[VY] = y; +} + +/******************** vec2 FRIENDS *****************************/ + +vec2 operator-(const vec2 &a) +{ + return vec2(-a.n[VX],-a.n[VY]); +} + +vec2 operator+(const vec2 &a, const vec2& b) +{ + return vec2(a.n[VX]+b.n[VX], a.n[VY]+b.n[VY]); +} + +vec2 operator-(const vec2 &a, const vec2& b) +{ + return vec2(a.n[VX]-b.n[VX], a.n[VY]-b.n[VY]); +} + +vec2 operator*(const vec2 &a, float d) +{ + return vec2(d*a.n[VX], d*a.n[VY]); +} + +vec2 operator*(float d, const vec2 &a) +{ + return a*d; +} + +vec2 operator*(const mat3 &a, const vec2 &v) +{ + vec3 av; + + av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ]; + av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ]; + av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ]; + + return av; +} + +vec2 operator*(const vec2 &v, const mat3 &a) +{ + return a.transpose() * v; +} + +vec3 operator*(const mat3 &a, const vec3 &v) +{ + vec3 av; + + av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ]*v.n[VZ]; + av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ]*v.n[VZ]; + av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ]*v.n[VZ]; + + return av; +} + +vec3 operator*(const vec3 &v, const mat3 &a) +{ + return a.transpose() * v; +} + +float operator*(const vec2 &a, const vec2 &b) +{ + return a.n[VX]*b.n[VX] + a.n[VY]*b.n[VY]; +} + +vec2 operator/(const vec2 &a, float d) +{ + float d_inv = 1.0f/d; + return vec2(a.n[VX]*d_inv, a.n[VY]*d_inv); +} + +vec3 operator^(const vec2 &a, const vec2 &b) +{ + return vec3(0.0, 0.0, a.n[VX] * b.n[VY] - b.n[VX] * a.n[VY]); +} + +int operator==(const vec2 &a, const vec2 &b) +{ + return (a.n[VX] == b.n[VX]) && (a.n[VY] == b.n[VY]); +} + +int operator!=(const vec2 &a, const vec2 &b) +{ + return !(a == b); +} + +/*ostream& operator << (ostream& s, vec2& v) +{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << " |"; } +*/ + +/*istream& operator >> (istream& s, vec2& v) { + vec2 v_tmp; + char c = ' '; + + while (isspace(c)) + s >> c; + // The vectors can be formatted either as x y or | x y | + if (c == '|') { + s >> v_tmp[VX] >> v_tmp[VY]; + while (s >> c && isspace(c)) ; + if (c != '|') + ;//s.set(_bad); + } + else { + s.putback(c); + s >> v_tmp[VX] >> v_tmp[VY]; + } + if (s) + v = v_tmp; + return s; +} +*/ + +void swap(vec2 &a, vec2 &b) +{ + vec2 tmp(a); + a = b; + b = tmp; +} + +vec2 min_vec(const vec2 &a, const vec2 &b) +{ + return vec2(MIN(a.n[VX], b.n[VX]), MIN(a.n[VY], b.n[VY])); +} + +vec2 max_vec(const vec2 &a, const vec2 &b) +{ + return vec2(MAX(a.n[VX], b.n[VX]), MAX(a.n[VY], b.n[VY])); +} + +vec2 prod(const vec2 &a, const vec2 &b) +{ + return vec2(a.n[VX] * b.n[VX], a.n[VY] * b.n[VY]); +} + +/**************************************************************** + * * + * vec3 Member functions * + * * + ****************************************************************/ + +// CONSTRUCTORS + +vec3::vec3() +{ + n[VX] = n[VY] = n[VZ] = 0.0; +} + +vec3::vec3(float x, float y, float z) +{ + n[VX] = x; + n[VY] = y; + n[VZ] = z; +} + +vec3::vec3(const vec3 &v) +{ + n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VZ]; +} + +vec3::vec3(const vec2 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = 1.0; +} + +vec3::vec3(const vec2 &v, float d) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = d; +} + +vec3::vec3(const vec4 &v) // it is up to caller to avoid divide-by-zero +{ + n[VX] = v.n[VX] / v.n[VW]; + n[VY] = v.n[VY] / v.n[VW]; + n[VZ] = v.n[VZ] / v.n[VW]; +} + +vec3::vec3(const vec4 &v, int dropAxis) +{ + switch (dropAxis) + { + case VX: n[VX] = v.n[VY]; n[VY] = v.n[VZ]; n[VZ] = v.n[VW]; break; + case VY: n[VX] = v.n[VX]; n[VY] = v.n[VZ]; n[VZ] = v.n[VW]; break; + case VZ: n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VW]; break; + default: n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VZ]; break; + } +} + + +// ASSIGNMENT OPERATORS + +vec3 &vec3::operator=(const vec3 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = v.n[VZ]; + return *this; +} + +vec3 &vec3::operator+=(const vec3 &v) +{ + n[VX] += v.n[VX]; + n[VY] += v.n[VY]; + n[VZ] += v.n[VZ]; + return *this; +} + +vec3 &vec3::operator-=(const vec3& v) +{ + n[VX] -= v.n[VX]; + n[VY] -= v.n[VY]; + n[VZ] -= v.n[VZ]; + return *this; +} + +vec3 &vec3::operator*=(float d) +{ + n[VX] *= d; + n[VY] *= d; + n[VZ] *= d; + return *this; +} + +vec3 &vec3::operator/=(float d) +{ + float d_inv = 1.0f/d; + n[VX] *= d_inv; + n[VY] *= d_inv; + n[VZ] *= d_inv; + return *this; +} + +float &vec3::operator[](int i) +{ + if (i < VX || i > VZ) + //VEC_ERROR("vec3 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec3 [] operator: illegal access" ); + + return n[i]; +} + +const float &vec3::operator[](int i) const +{ + if (i < VX || i > VZ) + //VEC_ERROR("vec3 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec3 [] operator: illegal access" ); + + return n[i]; +} + +// SPECIAL FUNCTIONS + +float vec3::length() const +{ + return (float) sqrt(length2()); +} + +float vec3::length2() const +{ + return n[VX]*n[VX] + n[VY]*n[VY] + n[VZ]*n[VZ]; +} + +vec3 &vec3::normalize() // it is up to caller to avoid divide-by-zero +{ + *this /= length(); + return *this; +} + +vec3 &vec3::homogenize(void) // it is up to caller to avoid divide-by-zero +{ + n[VX] /= n[VZ]; + n[VY] /= n[VZ]; + n[VZ] = 1.0; + return *this; +} + +vec3 &vec3::apply(V_FCT_PTR fct) +{ + n[VX] = (*fct)(n[VX]); + n[VY] = (*fct)(n[VY]); + n[VZ] = (*fct)(n[VZ]); + return *this; +} + +void vec3::set(float x, float y, float z) // set vector +{ + n[VX] = x; + n[VY] = y; + n[VZ] = z; +} + +void vec3::print(FILE *file, const char *name) const // print vector to a file +{ + fprintf( file, "%s: <%f, %f, %f>\n", name, n[VX], n[VY], n[VZ] ); +} + +// FRIENDS + +vec3 operator-(const vec3 &a) +{ + return vec3(-a.n[VX],-a.n[VY],-a.n[VZ]); +} + +vec3 operator+(const vec3 &a, const vec3 &b) +{ + return vec3(a.n[VX]+ b.n[VX], a.n[VY] + b.n[VY], a.n[VZ] + b.n[VZ]); +} + +vec3 operator-(const vec3 &a, const vec3 &b) +{ + return vec3(a.n[VX]-b.n[VX], a.n[VY]-b.n[VY], a.n[VZ]-b.n[VZ]); +} + +vec3 operator*(const vec3 &a, float d) +{ + return vec3(d*a.n[VX], d*a.n[VY], d*a.n[VZ]); +} + +vec3 operator*(float d, const vec3 &a) +{ + return a*d; +} + +vec3 operator*(const mat4 &a, const vec3 &v) +{ + return a*vec4(v); +} + +vec3 operator*(const vec3 &v, mat4 &a) +{ + return a.transpose()*v; +} + +float operator*(const vec3 &a, const vec3 &b) +{ + return a.n[VX]*b.n[VX] + a.n[VY]*b.n[VY] + a.n[VZ]*b.n[VZ]; +} + +vec3 operator/(const vec3 &a, float d) +{ + float d_inv = 1.0f/d; + return vec3(a.n[VX]*d_inv, a.n[VY]*d_inv, a.n[VZ]*d_inv); +} + +vec3 operator^(const vec3 &a, const vec3 &b) +{ + return + vec3(a.n[VY]*b.n[VZ] - a.n[VZ]*b.n[VY], + a.n[VZ]*b.n[VX] - a.n[VX]*b.n[VZ], + a.n[VX]*b.n[VY] - a.n[VY]*b.n[VX]); +} + +int operator==(const vec3 &a, const vec3 &b) +{ + return (a.n[VX] == b.n[VX]) && (a.n[VY] == b.n[VY]) && (a.n[VZ] == b.n[VZ]); +} + +int operator!=(const vec3 &a, const vec3 &b) +{ + return !(a == b); +} + +/*ostream& operator << (ostream& s, vec3& v) +{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << ' ' << v.n[VZ] << " |"; } + +istream& operator >> (istream& s, vec3& v) { + vec3 v_tmp; + char c = ' '; + + while (isspace(c)) + s >> c; + // The vectors can be formatted either as x y z or | x y z | + if (c == '|') { + s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ]; + while (s >> c && isspace(c)) ; + if (c != '|') + ;//s.set(_bad); + } + else { + s.putback(c); + s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ]; + } + if (s) + v = v_tmp; + return s; +} +*/ + +void swap(vec3 &a, vec3 &b) +{ + vec3 tmp(a); + a = b; + b = tmp; +} + +vec3 min_vec(const vec3 &a, const vec3 &b) +{ + return vec3( + MIN(a.n[VX], b.n[VX]), + MIN(a.n[VY], b.n[VY]), + MIN(a.n[VZ], b.n[VZ])); +} + +vec3 max_vec(const vec3 &a, const vec3 &b) +{ + return vec3( + MAX(a.n[VX], b.n[VX]), + MAX(a.n[VY], b.n[VY]), + MAX(a.n[VZ], b.n[VZ])); +} + +vec3 prod(const vec3 &a, const vec3 &b) +{ + return vec3(a.n[VX]*b.n[VX], a.n[VY]*b.n[VY], a.n[VZ]*b.n[VZ]); +} + +/**************************************************************** + * * + * vec4 Member functions * + * * + ****************************************************************/ + +// CONSTRUCTORS + +vec4::vec4() +{ + n[VX] = n[VY] = n[VZ] = 0.0; + n[VW] = 1.0; +} + +vec4::vec4(float x, float y, float z, float w) +{ + n[VX] = x; + n[VY] = y; + n[VZ] = z; + n[VW] = w; +} + +vec4::vec4(const vec4 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = v.n[VZ]; + n[VW] = v.n[VW]; +} + +vec4::vec4(const vec3 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = v.n[VZ]; + n[VW] = 1.0; +} + +vec4::vec4(const vec3 &v, float d) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = v.n[VZ]; + n[VW] = d; +} + +// ASSIGNMENT OPERATORS + +vec4 &vec4::operator=(const vec4 &v) +{ + n[VX] = v.n[VX]; + n[VY] = v.n[VY]; + n[VZ] = v.n[VZ]; + n[VW] = v.n[VW]; + return *this; +} + +vec4 &vec4::operator+=(const vec4 &v) +{ + n[VX] += v.n[VX]; + n[VY] += v.n[VY]; + n[VZ] += v.n[VZ]; + n[VW] += v.n[VW]; + return *this; +} + +vec4 &vec4::operator-=(const vec4 &v) +{ + n[VX] -= v.n[VX]; + n[VY] -= v.n[VY]; + n[VZ] -= v.n[VZ]; + n[VW] -= v.n[VW]; + return *this; +} + +vec4 &vec4::operator*=(float d) +{ + n[VX] *= d; + n[VY] *= d; + n[VZ] *= d; + n[VW] *= d; + return *this; +} + +vec4 &vec4::operator/=(float d) +{ + float d_inv = 1.0f/d; + n[VX] *= d_inv; + n[VY] *= d_inv; + n[VZ] *= d_inv; + n[VW] *= d_inv; + return *this; +} + +float &vec4::operator[](int i) +{ + if (i < VX || i > VW) + //VEC_ERROR("vec4 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec4 [] operator: illegal access" ); + + return n[i]; +} + +const float &vec4::operator[](int i) const +{ + if (i < VX || i > VW) + //VEC_ERROR("vec4 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("vec4 [] operator: illegal access" ); + + return n[i]; +} + +// SPECIAL FUNCTIONS + +float vec4::length() const +{ + return (float) sqrt(length2()); +} + +float vec4::length2() const +{ + return n[VX]*n[VX] + n[VY]*n[VY] + n[VZ]*n[VZ] + n[VW]*n[VW]; +} + +vec4 &vec4::normalize() // it is up to caller to avoid divide-by-zero +{ + *this /= length(); + return *this; +} + +vec4 &vec4::homogenize() // it is up to caller to avoid divide-by-zero +{ + n[VX] /= n[VW]; + n[VY] /= n[VW]; + n[VZ] /= n[VW]; + n[VW] = 1.0; + return *this; +} + +vec4 &vec4::apply(V_FCT_PTR fct) +{ + n[VX] = (*fct)(n[VX]); + n[VY] = (*fct)(n[VY]); + n[VZ] = (*fct)(n[VZ]); + n[VW] = (*fct)(n[VW]); + return *this; +} + +void vec4::print(FILE *file, const char *name) const // print vector to a file +{ + fprintf( file, "%s: <%f, %f, %f, %f>\n", name, n[VX], n[VY], n[VZ], n[VW]); +} + +void vec4::set(float x, float y, float z, float a) +{ + n[0] = x; + n[1] = y; + n[2] = z; + n[3] = a; +} + + +// FRIENDS + +vec4 operator-(const vec4 &a) +{ + return vec4(-a.n[VX],-a.n[VY],-a.n[VZ],-a.n[VW]); +} + +vec4 operator+(const vec4 &a, const vec4 &b) +{ + return vec4( + a.n[VX] + b.n[VX], + a.n[VY] + b.n[VY], + a.n[VZ] + b.n[VZ], + a.n[VW] + b.n[VW]); +} + +vec4 operator-(const vec4 &a, const vec4 &b) +{ + return vec4( + a.n[VX] - b.n[VX], + a.n[VY] - b.n[VY], + a.n[VZ] - b.n[VZ], + a.n[VW] - b.n[VW]); +} + +vec4 operator*(const vec4 &a, float d) +{ + return vec4(d*a.n[VX], d*a.n[VY], d*a.n[VZ], d*a.n[VW]); +} + +vec4 operator*(float d, const vec4 &a) +{ + return a*d; +} + +vec4 operator*(const mat4 &a, const vec4 &v) +{ + #define ROWCOL(i) \ + a.v[i].n[0]*v.n[VX] + \ + a.v[i].n[1]*v.n[VY] + \ + a.v[i].n[2]*v.n[VZ] + \ + a.v[i].n[3]*v.n[VW] + + return vec4(ROWCOL(0), ROWCOL(1), ROWCOL(2), ROWCOL(3)); + + #undef ROWCOL +} + +vec4 operator*(const vec4 &v, const mat4 &a) +{ + return a.transpose()*v; +} + +float operator*(const vec4 &a, const vec4 &b) +{ + return + a.n[VX]*b.n[VX] + + a.n[VY]*b.n[VY] + + a.n[VZ]*b.n[VZ] + + a.n[VW]*b.n[VW]; +} + +vec4 operator/(const vec4 &a, float d) +{ + float d_inv = 1.0f/d; + return vec4( + a.n[VX]*d_inv, + a.n[VY]*d_inv, + a.n[VZ]*d_inv, + a.n[VW]*d_inv); +} + +int operator==(const vec4 &a, const vec4 &b) +{ + return + (a.n[VX] == b.n[VX]) && + (a.n[VY] == b.n[VY]) && + (a.n[VZ] == b.n[VZ]) && + (a.n[VW] == b.n[VW]); +} + +int operator!=(const vec4 &a, const vec4 &b) +{ + return !(a == b); +} + +/*ostream& operator << (ostream& s, vec4& v) +{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << ' ' << v.n[VZ] << ' ' + << v.n[VW] << " |"; } + +istream& operator >> (istream& s, vec4& v) { + vec4 v_tmp; + char c = ' '; + + while (isspace(c)) + s >> c; + // The vectors can be formatted either as x y z w or | x y z w | + if (c == '|') { + s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ] >> v_tmp[VW]; + while (s >> c && isspace(c)) ; + if (c != '|') + ;//s.set(_bad); + } + else { + s.putback(c); + s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ] >> v_tmp[VW]; + } + if (s) + v = v_tmp; + return s; +} +*/ + +void swap(vec4 &a, vec4 &b) +{ + vec4 tmp(a); + a = b; + b = tmp; +} + +vec4 min_vec(const vec4 &a, const vec4 &b) +{ + return vec4( + MIN(a.n[VX], b.n[VX]), + MIN(a.n[VY], b.n[VY]), + MIN(a.n[VZ], b.n[VZ]), + MIN(a.n[VW], b.n[VW])); +} + +vec4 max_vec(const vec4 &a, const vec4 &b) +{ + return vec4( + MAX(a.n[VX], b.n[VX]), + MAX(a.n[VY], b.n[VY]), + MAX(a.n[VZ], b.n[VZ]), + MAX(a.n[VW], b.n[VW])); +} + +vec4 prod(const vec4 &a, const vec4 &b) +{ + return vec4( + a.n[VX] * b.n[VX], + a.n[VY] * b.n[VY], + a.n[VZ] * b.n[VZ], + a.n[VW] * b.n[VW]); +} + +/**************************************************************** + * * + * mat3 member functions * + * * + ****************************************************************/ + +// CONSTRUCTORS + +mat3::mat3() +{ + *this = identity2D(); +} + +mat3::mat3(const vec3 &v0, const vec3 &v1, const vec3 &v2) +{ + set(v0, v1, v2); +} + +mat3::mat3(const mat3 &m) +{ + v[0] = m.v[0]; + v[1] = m.v[1]; + v[2] = m.v[2]; +} + +// ASSIGNMENT OPERATORS + +mat3 &mat3::operator=(const mat3 &m) +{ + v[0] = m.v[0]; + v[1] = m.v[1]; + v[2] = m.v[2]; + return *this; +} + +mat3 &mat3::operator+=(const mat3& m) +{ + v[0] += m.v[0]; + v[1] += m.v[1]; + v[2] += m.v[2]; + return *this; +} + +mat3 &mat3::operator-=(const mat3& m) +{ + v[0] -= m.v[0]; + v[1] -= m.v[1]; + v[2] -= m.v[2]; + return *this; +} + +mat3 &mat3::operator*=(float d) +{ + v[0] *= d; + v[1] *= d; + v[2] *= d; + return *this; +} + +mat3 &mat3::operator/=(float d) +{ + v[0] /= d; + v[1] /= d; + v[2] /= d; + return *this; +} + +vec3 &mat3::operator[](int i) +{ + if (i < VX || i > VZ) + //VEC_ERROR("mat3 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("mat3 [] operator: illegal access" ); + + return v[i]; +} + +const vec3 &mat3::operator[](int i) const +{ + if (i < VX || i > VZ) + //VEC_ERROR("mat3 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("mat3 [] operator: illegal access" ); + + return v[i]; +} + +void mat3::set(const vec3 &v0, const vec3 &v1, const vec3 &v2) +{ + v[0] = v0; + v[1] = v1; + v[2] = v2; +} + +// SPECIAL FUNCTIONS + +mat3 mat3::transpose() const +{ + return mat3( + vec3(v[0][0], v[1][0], v[2][0]), + vec3(v[0][1], v[1][1], v[2][1]), + vec3(v[0][2], v[1][2], v[2][2])); +} + +mat3 mat3::inverse() const // Gauss-Jordan elimination with partial pivoting +{ + mat3 a(*this); // As a evolves from original mat into identity + mat3 b(identity2D()); // b evolves from identity into inverse(a) + int i, j, i1; + + // Loop over cols of a from left to right, eliminating above and below diag + for (j=0; j<3; j++) // Find largest pivot in column j among rows j..2 + { + i1 = j; // Row with largest pivot candidate + for (i=j+1; i<3; i++) + if (fabs(a.v[i].n[j]) > fabs(a.v[i1].n[j])) + i1 = i; + + // Swap rows i1 and j in a and b to put pivot on diagonal + swap(a.v[i1], a.v[j]); + swap(b.v[i1], b.v[j]); + + // Scale row j to have a unit diagonal + if (a.v[j].n[j]==0.) + VEC_ERROR("mat3::inverse: singular matrix; can't invert\n"); + + b.v[j] /= a.v[j].n[j]; + a.v[j] /= a.v[j].n[j]; + + // Eliminate off-diagonal elems in col j of a, doing identical ops to b + for (i=0; i<3; i++) + if (i!=j) + { + b.v[i] -= a.v[i].n[j]*b.v[j]; + a.v[i] -= a.v[i].n[j]*a.v[j]; + } + } + + return b; +} + +mat3 &mat3::apply(V_FCT_PTR fct) +{ + v[VX].apply(fct); + v[VY].apply(fct); + v[VZ].apply(fct); + return *this; +} + + +// FRIENDS + +mat3 operator-(const mat3 &a) +{ + return mat3(-a.v[0], -a.v[1], -a.v[2]); +} + +mat3 operator+(const mat3 &a, const mat3 &b) +{ + return mat3(a.v[0]+b.v[0], a.v[1]+b.v[1], a.v[2]+b.v[2]); +} + +mat3 operator-(const mat3 &a, const mat3 &b) +{ + return mat3(a.v[0]-b.v[0], a.v[1]-b.v[1], a.v[2]-b.v[2]); +} + +mat3 operator*(const mat3 &a, const mat3 &b) +{ + #define ROWCOL(i, j) \ + a.v[i].n[0]*b.v[0][j] + a.v[i].n[1]*b.v[1][j] + a.v[i].n[2]*b.v[2][j] + + return mat3( + vec3(ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2)), + vec3(ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2)), + vec3(ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2))); + + #undef ROWCOL +} + +mat3 operator*(const mat3 &a, float d) +{ + return mat3(a.v[0]*d, a.v[1]*d, a.v[2]*d); +} + +mat3 operator*(float d, const mat3 &a) +{ + return a*d; +} + +mat3 operator/(const mat3 &a, float d) +{ + return mat3(a.v[0]/d, a.v[1]/d, a.v[2]/d); +} + +int operator==(const mat3 &a, const mat3 &b) +{ + return + (a.v[0] == b.v[0]) && + (a.v[1] == b.v[1]) && + (a.v[2] == b.v[2]); +} + +int operator!=(const mat3 &a, const mat3 &b) +{ + return !(a == b); +} + +/*ostream& operator << (ostream& s, mat3& m) +{ return s << m.v[VX] << '\n' << m.v[VY] << '\n' << m.v[VZ]; } + +istream& operator >> (istream& s, mat3& m) { + mat3 m_tmp; + + s >> m_tmp[VX] >> m_tmp[VY] >> m_tmp[VZ]; + if (s) + m = m_tmp; + return s; +} +*/ + +void swap(mat3 &a, mat3 &b) +{ + mat3 tmp(a); + a = b; + b = tmp; +} + +void mat3::print(FILE *file, const char *name) const +{ + int i, j; + + fprintf( stderr, "%s:\n", name ); + + for( i = 0; i < 3; i++ ) + { + fprintf( stderr, " " ); + for( j = 0; j < 3; j++ ) + { + fprintf( stderr, "%f ", v[i][j] ); + } + fprintf( stderr, "\n" ); + } +} + + + +/**************************************************************** + * * + * mat4 member functions * + * * + ****************************************************************/ + +// CONSTRUCTORS + +mat4::mat4() +{ + *this = identity3D(); +} + +mat4::mat4(const vec4& v0, const vec4& v1, const vec4& v2, const vec4& v3) +{ + v[0] = v0; + v[1] = v1; + v[2] = v2; + v[3] = v3; +} + +mat4::mat4(const mat4 &m) +{ + v[0] = m.v[0]; + v[1] = m.v[1]; + v[2] = m.v[2]; + v[3] = m.v[3]; +} + +mat4::mat4( + float a00, float a01, float a02, float a03, + float a10, float a11, float a12, float a13, + float a20, float a21, float a22, float a23, + float a30, float a31, float a32, float a33 ) +{ + v[0][0] = a00; v[0][1] = a01; v[0][2] = a02; v[0][3] = a03; + v[1][0] = a10; v[1][1] = a11; v[1][2] = a12; v[1][3] = a13; + v[2][0] = a20; v[2][1] = a21; v[2][2] = a22; v[2][3] = a23; + v[3][0] = a30; v[3][1] = a31; v[3][2] = a32; v[3][3] = a33; +} + +// ASSIGNMENT OPERATORS + +mat4 &mat4::operator=(const mat4 &m) +{ + v[0] = m.v[0]; + v[1] = m.v[1]; + v[2] = m.v[2]; + v[3] = m.v[3]; + return *this; +} + +mat4 &mat4::operator+=(const mat4 &m) +{ + v[0] += m.v[0]; + v[1] += m.v[1]; + v[2] += m.v[2]; + v[3] += m.v[3]; + return *this; +} + +mat4 &mat4::operator-=(const mat4 &m) +{ + v[0] -= m.v[0]; + v[1] -= m.v[1]; + v[2] -= m.v[2]; + v[3] -= m.v[3]; + return *this; +} + +mat4 &mat4::operator*=(float d) +{ + v[0] *= d; + v[1] *= d; + v[2] *= d; + v[3] *= d; + return *this; +} + +mat4 &mat4::operator/=(float d) +{ + v[0] /= d; + v[1] /= d; + v[2] /= d; + v[3] /= d; + return *this; +} + +vec4 &mat4::operator[](int i) +{ + if (i < VX || i > VW) + //VEC_ERROR("mat4 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("mat4 [] operator: illegal access" ); + return v[i]; +} + +const vec4 &mat4::operator[](int i) const +{ + if (i < VX || i > VW) + //VEC_ERROR("mat4 [] operator: illegal access; index = " << i << '\n') + VEC_ERROR("mat4 [] operator: illegal access" ); + return v[i]; +} + +// SPECIAL FUNCTIONS; + +mat4 mat4::transpose() const +{ + return mat4( + vec4(v[0][0], v[1][0], v[2][0], v[3][0]), + vec4(v[0][1], v[1][1], v[2][1], v[3][1]), + vec4(v[0][2], v[1][2], v[2][2], v[3][2]), + vec4(v[0][3], v[1][3], v[2][3], v[3][3])); +} + +mat4 mat4::inverse() const // Gauss-Jordan elimination with partial pivoting +{ + mat4 a(*this); // As a evolves from original mat into identity + mat4 b(identity3D()); // b evolves from identity into inverse(a) + int i, j, i1; + + // Loop over cols of a from left to right, eliminating above and below diag + for (j=0; j<4; j++) // Find largest pivot in column j among rows j..3 + { + i1 = j; // Row with largest pivot candidate + for (i=j+1; i<4; i++) + if (fabs(a.v[i].n[j]) > fabs(a.v[i1].n[j])) + i1 = i; + + // Swap rows i1 and j in a and b to put pivot on diagonal + swap(a.v[i1], a.v[j]); + swap(b.v[i1], b.v[j]); + + // Scale row j to have a unit diagonal + if (a.v[j].n[j]==0.) + VEC_ERROR("mat4::inverse: singular matrix; can't invert\n"); + + b.v[j] /= a.v[j].n[j]; + a.v[j] /= a.v[j].n[j]; + + // Eliminate off-diagonal elems in col j of a, doing identical ops to b + for (i=0; i<4; i++) + if (i!=j) + { + b.v[i] -= a.v[i].n[j]*b.v[j]; + a.v[i] -= a.v[i].n[j]*a.v[j]; + } + } + + return b; +} + +mat4 &mat4::apply(V_FCT_PTR fct) +{ + v[VX].apply(fct); + v[VY].apply(fct); + v[VZ].apply(fct); + v[VW].apply(fct); + return *this; +} + +void mat4::print(FILE *file, const char *name) const +{ + int i, j; + + fprintf( stderr, "%s:\n", name ); + + for( i = 0; i < 4; i++ ) + { + fprintf( stderr, " " ); + for( j = 0; j < 4; j++ ) + { + fprintf( stderr, "%f ", v[i][j] ); + } + fprintf( stderr, "\n" ); + } +} + +void mat4::swap_rows(int i, int j) +{ + vec4 t; + + t = v[i]; + v[i] = v[j]; + v[j] = t; +} + +void mat4::swap_cols(int i, int j) +{ + float t; + int k; + + for (k=0; k<4; k++) + { + t = v[k][i]; + v[k][i] = v[k][j]; + v[k][j] = t; + } +} + + +// FRIENDS + +mat4 operator-(const mat4 &a) +{ + return mat4(-a.v[0],-a.v[1],-a.v[2],-a.v[3]); +} + +mat4 operator+(const mat4 &a, const mat4 &b) +{ + return mat4( + a.v[0] + b.v[0], + a.v[1] + b.v[1], + a.v[2] + b.v[2], + a.v[3] + b.v[3]); +} + +mat4 operator-(const mat4 &a, const mat4 &b) +{ + return mat4( + a.v[0] - b.v[0], + a.v[1] - b.v[1], + a.v[2] - b.v[2], + a.v[3] - b.v[3]); +} + +mat4 operator*(const mat4 &a, const mat4 &b) +{ + #define ROWCOL(i, j) \ + a.v[i].n[0]*b.v[0][j] + \ + a.v[i].n[1]*b.v[1][j] + \ + a.v[i].n[2]*b.v[2][j] + \ + a.v[i].n[3]*b.v[3][j] + + return mat4( + vec4(ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2), ROWCOL(0,3)), + vec4(ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2), ROWCOL(1,3)), + vec4(ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2), ROWCOL(2,3)), + vec4(ROWCOL(3,0), ROWCOL(3,1), ROWCOL(3,2), ROWCOL(3,3)) + ); + + #undef ROWCOL +} + +mat4 operator*(const mat4 &a, float d) +{ + return mat4(a.v[0]*d, a.v[1]*d, a.v[2]*d, a.v[3]*d); +} + +mat4 operator*(float d, const mat4 &a) +{ + return a*d; +} + +mat4 operator/(const mat4 &a, float d) +{ + return mat4(a.v[0]/d, a.v[1]/d, a.v[2]/d, a.v[3]/d); +} + +int operator==(const mat4 &a, const mat4 &b) +{ + return + (a.v[0] == b.v[0]) && + (a.v[1] == b.v[1]) && + (a.v[2] == b.v[2]) && + (a.v[3] == b.v[3]); +} + +int operator!=(const mat4 &a, const mat4 &b) +{ + return !(a == b); +} + +/*ostream& operator << (ostream& s, mat4& m) +{ return s << m.v[VX] << '\n' << m.v[VY] << '\n' << m.v[VZ] << '\n' << m.v[VW]; } + +istream& operator >> (istream& s, mat4& m) +{ + mat4 m_tmp; + + s >> m_tmp[VX] >> m_tmp[VY] >> m_tmp[VZ] >> m_tmp[VW]; + if (s) + m = m_tmp; + return s; +} +*/ + +void swap(mat4 &a, mat4 &b) +{ + mat4 tmp(a); + a = b; + b = tmp; +} + +/**************************************************************** + * * + * 2D functions and 3D functions * + * * + ****************************************************************/ + +mat3 identity2D() +{ + return mat3( + vec3(1.0, 0.0, 0.0), + vec3(0.0, 1.0, 0.0), + vec3(0.0, 0.0, 1.0)); +} + +mat3 translation2D(const vec2 &v) +{ + return mat3( + vec3(1.0, 0.0, v[VX]), + vec3(0.0, 1.0, v[VY]), + vec3(0.0, 0.0, 1.0)); +} + +mat3 rotation2D(const vec2 &Center, float angleDeg) +{ + float angleRad = (float) (angleDeg * M_PI / 180.0); + float c = (float) cos(angleRad); + float s = (float) sin(angleRad); + + return mat3( + vec3(c, -s, Center[VX] * (1.0f-c) + Center[VY] * s), + vec3(s, c, Center[VY] * (1.0f-c) - Center[VX] * s), + vec3(0.0, 0.0, 1.0)); +} + +mat3 scaling2D(const vec2 &scaleVector) +{ + return mat3( + vec3(scaleVector[VX], 0.0, 0.0), + vec3(0.0, scaleVector[VY], 0.0), + vec3(0.0, 0.0, 1.0)); +} + +mat4 identity3D() +{ + return mat4( + vec4(1.0, 0.0, 0.0, 0.0), + vec4(0.0, 1.0, 0.0, 0.0), + vec4(0.0, 0.0, 1.0, 0.0), + vec4(0.0, 0.0, 0.0, 1.0)); +} + +mat4 translation3D(const vec3 &v) +{ + return mat4( + vec4(1.0, 0.0, 0.0, v[VX]), + vec4(0.0, 1.0, 0.0, v[VY]), + vec4(0.0, 0.0, 1.0, v[VZ]), + vec4(0.0, 0.0, 0.0, 1.0)); +} + +mat4 rotation3D(const vec3 &Axis, float angleDeg) +{ + float angleRad = (float) (angleDeg * M_PI / 180.0); + float c = (float) cos(angleRad); + float s = (float) sin(angleRad); + float t = 1.0f - c; + + vec3 axis(Axis); + axis.normalize(); + + return mat4( + vec4(t * axis[VX] * axis[VX] + c, + t * axis[VX] * axis[VY] - s * axis[VZ], + t * axis[VX] * axis[VZ] + s * axis[VY], + 0.0), + vec4(t * axis[VX] * axis[VY] + s * axis[VZ], + t * axis[VY] * axis[VY] + c, + t * axis[VY] * axis[VZ] - s * axis[VX], + 0.0), + vec4(t * axis[VX] * axis[VZ] - s * axis[VY], + t * axis[VY] * axis[VZ] + s * axis[VX], + t * axis[VZ] * axis[VZ] + c, + 0.0), + vec4(0.0, 0.0, 0.0, 1.0)); +} + +mat4 rotation3Drad(const vec3 &Axis, float angleRad) +{ + float c = (float) cos(angleRad); + float s = (float) sin(angleRad); + float t = 1.0f - c; + + vec3 axis(Axis); + axis.normalize(); + + return mat4( + vec4(t * axis[VX] * axis[VX] + c, + t * axis[VX] * axis[VY] - s * axis[VZ], + t * axis[VX] * axis[VZ] + s * axis[VY], + 0.0), + vec4(t * axis[VX] * axis[VY] + s * axis[VZ], + t * axis[VY] * axis[VY] + c, + t * axis[VY] * axis[VZ] - s * axis[VX], + 0.0), + vec4(t * axis[VX] * axis[VZ] - s * axis[VY], + t * axis[VY] * axis[VZ] + s * axis[VX], + t * axis[VZ] * axis[VZ] + c, + 0.0), + vec4(0.0, 0.0, 0.0, 1.0)); +} + +mat4 scaling3D(const vec3 &scaleVector) +{ + return mat4( + vec4(scaleVector[VX], 0.0, 0.0, 0.0), + vec4(0.0, scaleVector[VY], 0.0, 0.0), + vec4(0.0, 0.0, scaleVector[VZ], 0.0), + vec4(0.0, 0.0, 0.0, 1.0)); +} + +mat4 perspective3D(float d) +{ + return mat4( + vec4(1.0f, 0.0f, 0.0f, 0.0f), + vec4(0.0f, 1.0f, 0.0f, 0.0f), + vec4(0.0f, 0.0f, 1.0f, 0.0f), + vec4(0.0f, 0.0f, 1.0f/d, 0.0f)); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.h b/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.h new file mode 100644 index 00000000..7849673d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/algebra3.h @@ -0,0 +1,475 @@ +/* + + algebra3.cpp, algebra3.h - C++ Vector and Matrix Algebra routines + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/************************************************************************** + + There are three vector classes and two matrix classes: vec2, vec3, + vec4, mat3, and mat4. + + All the standard arithmetic operations are defined, with '*' + for dot product of two vectors and multiplication of two matrices, + and '^' for cross product of two vectors. + + Additional functions include length(), normalize(), homogenize for + vectors, and print(), set(), apply() for all classes. + + There is a function transpose() for matrices, but note that it + does not actually change the matrix, + + When multiplied with a matrix, a vector is treated as a row vector + if it precedes the matrix (v*M), and as a column vector if it + follows the matrix (M*v). + + Matrices are stored in row-major form. + + A vector of one dimension (2d, 3d, or 4d) can be cast to a vector + of a higher or lower dimension. If casting to a higher dimension, + the new component is set by default to 1.0, unless a value is + specified: + vec3 a(1.0, 2.0, 3.0 ); + vec4 b( a, 4.0 ); // now b == {1.0, 2.0, 3.0, 4.0}; + When casting to a lower dimension, the vector is homogenized in + the lower dimension. E.g., if a 4d {X,Y,Z,W} is cast to 3d, the + resulting vector is {X/W, Y/W, Z/W}. It is up to the user to + insure the fourth component is not zero before casting. + + There are also the following function for building matrices: + identity2D(), translation2D(), rotation2D(), + scaling2D(), identity3D(), translation3D(), + rotation3D(), rotation3Drad(), scaling3D(), + perspective3D() + + NOTE: When compiling for Windows, include this file first, to avoid + certain name conflicts + + --------------------------------------------------------------------- + + Author: Jean-Francois DOUEg + Revised: Paul Rademacher + Version 3.2 - Feb 1998 + Revised: Nigel Stewart (GLUI Code Cleaning) + +**************************************************************************/ + +#ifndef GLUI_ALGEBRA3_H +#define GLUI_ALGEBRA3_H + +#include +#include +#include + +// this line defines a new type: pointer to a function which returns a +// float and takes as argument a float +typedef float (*V_FCT_PTR)(float); + +class vec2; +class vec3; +class vec4; +class mat3; +class mat4; + +#ifndef M_PI +#define M_PI 3.141592654 +#endif + +enum {VX, VY, VZ, VW}; // axes +enum {PA, PB, PC, PD}; // planes +enum {RED, GREEN, BLUE, ALPHA}; // colors +enum {KA, KD, KS, ES}; // phong coefficients + +/**************************************************************** + * * + * 2D Vector * + * * + ****************************************************************/ + +class vec2 +{ + friend class vec3; + +protected: + + float n[2]; + +public: + + // Constructors + + vec2(); + vec2(float x, float y); + vec2(const vec2 &v); // copy constructor + vec2(const vec3 &v); // cast v3 to v2 + vec2(const vec3 &v, int dropAxis); // cast v3 to v2 + + // Assignment operators + + vec2 &operator = (const vec2 &v); // assignment of a vec2 + vec2 &operator += (const vec2 &v); // incrementation by a vec2 + vec2 &operator -= (const vec2 &v); // decrementation by a vec2 + vec2 &operator *= (float d); // multiplication by a constant + vec2 &operator /= (float d); // division by a constant + + // special functions + + float length() const; // length of a vec2 + float length2() const; // squared length of a vec2 + vec2 &normalize(); // normalize a vec2 + vec2 &apply(V_FCT_PTR fct); // apply a func. to each component + void set(float x, float y); // set vector + + float &operator [] (int i); // indexing + const float &operator [] (int i) const; // indexing + + // friends + + friend vec2 operator - (const vec2 &v); // -v1 + friend vec2 operator + (const vec2 &a, const vec2 &b); // v1 + v2 + friend vec2 operator - (const vec2 &a, const vec2 &b); // v1 - v2 + friend vec2 operator * (const vec2 &a, float d); // v1 * 3.0 + friend vec2 operator * (float d, const vec2 &a); // 3.0 * v1 + friend vec2 operator * (const mat3 &a, const vec2 &v); // M . v + friend vec2 operator * (const vec2 &v, const mat3 &a); // v . M + friend float operator * (const vec2 &a, const vec2 &b); // dot product + friend vec2 operator / (const vec2 &a, float d); // v1 / 3.0 + friend vec3 operator ^ (const vec2 &a, const vec2 &b); // cross product + friend int operator == (const vec2 &a, const vec2 &b); // v1 == v2 ? + friend int operator != (const vec2 &a, const vec2 &b); // v1 != v2 ? + //friend ostream& operator << (ostream& s, vec2& v); // output to stream + //friend istream& operator >> (istream& s, vec2& v); // input from strm. + friend void swap(vec2 &a, vec2 &b); // swap v1 & v2 + friend vec2 min_vec(const vec2 &a, const vec2 &b); // min(v1, v2) + friend vec2 max_vec(const vec2 &a, const vec2 &b); // max(v1, v2) + friend vec2 prod (const vec2 &a, const vec2 &b); // term by term * +}; + +/**************************************************************** + * * + * 3D Vector * + * * + ****************************************************************/ + +class vec3 +{ + friend class vec2; + friend class vec4; + friend class mat3; + +protected: + + float n[3]; + +public: + + // Constructors + + vec3(); + vec3(float x, float y, float z); + vec3(const vec3 &v); // copy constructor + vec3(const vec2 &v); // cast v2 to v3 + vec3(const vec2 &v, float d); // cast v2 to v3 + vec3(const vec4 &v); // cast v4 to v3 + vec3(const vec4 &v, int dropAxis); // cast v4 to v3 + + // Assignment operators + + vec3 &operator = (const vec3 &v); // assignment of a vec3 + vec3 &operator += (const vec3 &v); // incrementation by a vec3 + vec3 &operator -= (const vec3 &v); // decrementation by a vec3 + vec3 &operator *= (float d); // multiplication by a constant + vec3 &operator /= (float d); // division by a constant + + // special functions + + float length() const; // length of a vec3 + float length2() const; // squared length of a vec3 + vec3& normalize(); // normalize a vec3 + vec3& homogenize(); // homogenize (div by Z) + vec3& apply(V_FCT_PTR fct); // apply a func. to each component + void set(float x, float y, float z); // set vector + + void print(FILE *file, const char *name) const; // print vector to a file + + + float &operator [] (int i); // indexing + const float &operator [] (int i) const; // indexing + + // friends + + friend vec3 operator - (const vec3 &v); // -v1 + friend vec3 operator + (const vec3 &a, const vec3 &b); // v1 + v2 + friend vec3 operator - (const vec3 &a, const vec3 &b); // v1 - v2 + friend vec3 operator * (const vec3 &a, float d); // v1 * 3.0 + friend vec3 operator * (float d, const vec3 &a); // 3.0 * v1 + friend vec3 operator * (const mat4 &a, const vec3 &v); // M . v + friend vec3 operator * (const vec3 &v, const mat4 &a); // v . M + friend float operator * (const vec3 &a, const vec3 &b); // dot product + friend vec3 operator / (const vec3 &a, float d); // v1 / 3.0 + friend vec3 operator ^ (const vec3 &a, const vec3 &b); // cross product + friend int operator == (const vec3 &a, const vec3 &b); // v1 == v2 ? + friend int operator != (const vec3 &a, const vec3 &b); // v1 != v2 ? + //friend ostream& operator << (ostream& s, vec3& v); // output to stream + //friend istream& operator >> (istream& s, vec3& v); // input from strm. + friend void swap(vec3 &a, vec3 &b); // swap v1 & v2 + friend vec3 min_vec(const vec3 &a, const vec3 &b); // min(v1, v2) + friend vec3 max_vec(const vec3 &a, const vec3 &b); // max(v1, v2) + friend vec3 prod(const vec3 &a, const vec3 &b); // term by term * + + // necessary friend declarations + + friend vec2 operator * (const mat3 &a, const vec2 &v); // linear transform + friend vec3 operator * (const mat3 &a, const vec3 &v); // linear transform + friend mat3 operator * (const mat3 &a, const mat3 &b); // matrix 3 product +}; + +/**************************************************************** + * * + * 4D Vector * + * * + ****************************************************************/ + +class vec4 +{ + friend class vec3; + friend class mat4; + +protected: + + float n[4]; + +public: + + // Constructors + + vec4(); + vec4(float x, float y, float z, float w); + vec4(const vec4 &v); // copy constructor + vec4(const vec3 &v); // cast vec3 to vec4 + vec4(const vec3 &v, float d); // cast vec3 to vec4 + + // Assignment operators + + vec4 &operator = (const vec4 &v); // assignment of a vec4 + vec4 &operator += (const vec4 &v); // incrementation by a vec4 + vec4 &operator -= (const vec4 &v); // decrementation by a vec4 + vec4 &operator *= (float d); // multiplication by a constant + vec4 &operator /= (float d); // division by a constant + + // special functions + + float length() const; // length of a vec4 + float length2() const; // squared length of a vec4 + vec4 &normalize(); // normalize a vec4 + vec4 &apply(V_FCT_PTR fct); // apply a func. to each component + vec4 &homogenize(); + + void print(FILE *file, const char *name) const; // print vector to a file + + void set(float x, float y, float z, float a); + + float &operator [] (int i); // indexing + const float &operator [] (int i) const; // indexing + + // friends + + friend vec4 operator - (const vec4 &v); // -v1 + friend vec4 operator + (const vec4 &a, const vec4 &b); // v1 + v2 + friend vec4 operator - (const vec4 &a, const vec4 &b); // v1 - v2 + friend vec4 operator * (const vec4 &a, float d); // v1 * 3.0 + friend vec4 operator * (float d, const vec4 &a); // 3.0 * v1 + friend vec4 operator * (const mat4 &a, const vec4 &v); // M . v + friend vec4 operator * (const vec4 &v, const mat4 &a); // v . M + friend float operator * (const vec4 &a, const vec4 &b); // dot product + friend vec4 operator / (const vec4 &a, float d); // v1 / 3.0 + friend int operator == (const vec4 &a, const vec4 &b); // v1 == v2 ? + friend int operator != (const vec4 &a, const vec4 &b); // v1 != v2 ? + //friend ostream& operator << (ostream& s, vec4& v); // output to stream + //friend istream& operator >> (istream& s, vec4& v); // input from strm. + friend void swap(vec4 &a, vec4 &b); // swap v1 & v2 + friend vec4 min_vec(const vec4 &a, const vec4 &b); // min(v1, v2) + friend vec4 max_vec(const vec4 &a, const vec4 &b); // max(v1, v2) + friend vec4 prod (const vec4 &a, const vec4 &b); // term by term * + + // necessary friend declarations + + friend vec3 operator * (const mat4 &a, const vec3 &v); // linear transform + friend mat4 operator * (const mat4 &a, const mat4 &b); // matrix 4 product +}; + +/**************************************************************** + * * + * 3x3 Matrix * + * * + ****************************************************************/ + +class mat3 +{ +protected: + + vec3 v[3]; + +public: + + // Constructors + + mat3(); + mat3(const vec3 &v0, const vec3 &v1, const vec3 &v2); + mat3(const mat3 &m); + + // Assignment operators + + mat3 &operator = (const mat3 &m); // assignment of a mat3 + mat3 &operator += (const mat3 &m); // incrementation by a mat3 + mat3 &operator -= (const mat3 &m); // decrementation by a mat3 + mat3 &operator *= (float d); // multiplication by a constant + mat3 &operator /= (float d); // division by a constant + + // special functions + + mat3 transpose() const; // transpose + mat3 inverse() const; // inverse + mat3 &apply(V_FCT_PTR fct); // apply a func. to each element + + void print(FILE *file, const char *name ) const; // print matrix to a file + + void set(const vec3 &v0, const vec3 &v1, const vec3 &v2); + + vec3 &operator [] (int i); // indexing + const vec3 &operator [] (int i) const; // indexing + + // friends + + friend mat3 operator - (const mat3 &a); // -m1 + friend mat3 operator + (const mat3 &a, const mat3 &b); // m1 + m2 + friend mat3 operator - (const mat3 &a, const mat3 &b); // m1 - m2 + friend mat3 operator * (const mat3 &a, const mat3 &b); // m1 * m2 + friend mat3 operator * (const mat3 &a, float d); // m1 * 3.0 + friend mat3 operator * (float d, const mat3 &a); // 3.0 * m1 + friend mat3 operator / (const mat3 &a, float d); // m1 / 3.0 + friend int operator == (const mat3 &a, const mat3 &b); // m1 == m2 ? + friend int operator != (const mat3 &a, const mat3 &b); // m1 != m2 ? + //friend ostream& operator << (ostream& s, mat3& m); // output to stream + //friend istream& operator >> (istream& s, mat3& m); // input from strm. + friend void swap(mat3 &a, mat3 &b); // swap m1 & m2 + + // necessary friend declarations + + friend vec3 operator * (const mat3 &a, const vec3 &v); // linear transform + friend vec2 operator * (const mat3 &a, const vec2 &v); // linear transform +}; + +/**************************************************************** + * * + * 4x4 Matrix * + * * + ****************************************************************/ + +class mat4 +{ +protected: + + vec4 v[4]; + +public: + + // Constructors + + mat4(); + mat4(const vec4 &v0, const vec4 &v1, const vec4 &v2, const vec4 &v3); + mat4(const mat4 &m); + mat4(float a00, float a01, float a02, float a03, + float a10, float a11, float a12, float a13, + float a20, float a21, float a22, float a23, + float a30, float a31, float a32, float a33 ); + + + // Assignment operators + + mat4 &operator = (const mat4 &m); // assignment of a mat4 + mat4 &operator += (const mat4 &m); // incrementation by a mat4 + mat4 &operator -= (const mat4 &m); // decrementation by a mat4 + mat4 &operator *= (float d); // multiplication by a constant + mat4 &operator /= (float d); // division by a constant + + // special functions + + mat4 transpose() const; // transpose + mat4 inverse() const; // inverse + mat4 &apply(V_FCT_PTR fct); // apply a func. to each element + + void print(FILE *file, const char *name) const; // print matrix to a file + + vec4 &operator [] (int i); // indexing + const vec4 &operator [] (int i) const; // indexing + + void swap_rows(int i, int j); // swap rows i and j + void swap_cols(int i, int j); // swap cols i and j + + // friends + + friend mat4 operator - (const mat4 &a); // -m1 + friend mat4 operator + (const mat4 &a, const mat4 &b); // m1 + m2 + friend mat4 operator - (const mat4 &a, const mat4 &b); // m1 - m2 + friend mat4 operator * (const mat4 &a, const mat4 &b); // m1 * m2 + friend mat4 operator * (const mat4 &a, float d); // m1 * 4.0 + friend mat4 operator * (float d, const mat4 &a); // 4.0 * m1 + friend mat4 operator / (const mat4 &a, float d); // m1 / 3.0 + friend int operator == (const mat4 &a, const mat4 &b); // m1 == m2 ? + friend int operator != (const mat4 &a, const mat4 &b); // m1 != m2 ? + //friend ostream& operator << (ostream& s, mat4& m); // output to stream + //friend istream& operator >> (istream& s, mat4& m); // input from strm. + friend void swap(mat4 &a, mat4 &b); // swap m1 & m2 + + // necessary friend declarations + + friend vec4 operator * (const mat4 &a, const vec4 &v); // linear transform + //friend vec4 operator * (const vec4& v, const mat4& a); // linear transform + friend vec3 operator * (const mat4 &a, const vec3 &v); // linear transform + friend vec3 operator * (const vec3 &v, const mat4 &a); // linear transform +}; + +/**************************************************************** + * * + * 2D functions and 3D functions * + * * + ****************************************************************/ + +mat3 identity2D (); // identity 2D +mat3 translation2D(const vec2 &v); // translation 2D +mat3 rotation2D (const vec2 &Center, float angleDeg); // rotation 2D +mat3 scaling2D (const vec2 &scaleVector); // scaling 2D +mat4 identity3D (); // identity 3D +mat4 translation3D(const vec3 &v); // translation 3D +mat4 rotation3D (const vec3 &Axis, float angleDeg); // rotation 3D +mat4 rotation3Drad(const vec3 &Axis, float angleRad); // rotation 3D +mat4 scaling3D (const vec3 &scaleVector); // scaling 3D +mat4 perspective3D(float d); // perspective 3D + +vec3 operator * (const vec3 &v, const mat3 &a); +vec2 operator * (const vec2 &v, const mat3 &a); +vec3 operator * (const vec3 &v, const mat4 &a); +vec4 operator * (const vec4 &v, const mat4 &a); + +#endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/arcball.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/arcball.cpp new file mode 100644 index 00000000..d233c7fc --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/arcball.cpp @@ -0,0 +1,237 @@ +/********************************************************************** + + arcball.cpp + + + -------------------------------------------------- + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + Feb 1998, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +**********************************************************************/ + +#include "arcball.h" + +#include + + +/**************************************** Arcball::Arcball() ****/ +/* Default (void) constructor for Arcball */ + +Arcball::Arcball() +{ + rot_ptr = &rot; + init(); +} + +/**************************************** Arcball::Arcball() ****/ +/* Takes as argument a mat4 to use instead of the internal rot */ + +Arcball::Arcball(mat4 *mtx) +{ + rot_ptr = mtx; +} + + +/**************************************** Arcball::Arcball() ****/ +/* A constructor that accepts the screen center and arcball radius*/ + +Arcball::Arcball(const vec2 &_center, float _radius) +{ + rot_ptr = &rot; + init(); + set_params(_center, _radius); +} + + +/************************************** Arcball::set_params() ****/ + +void Arcball::set_params(const vec2 &_center, float _radius) +{ + center = _center; + radius = _radius; +} + +/*************************************** Arcball::init() **********/ + +void Arcball::init() +{ + center.set( 0.0, 0.0 ); + radius = 1.0; + q_now = quat_identity(); + *rot_ptr = identity3D(); + q_increment = quat_identity(); + rot_increment = identity3D(); + is_mouse_down = false; + is_spinning = false; + damp_factor = 0.0; + zero_increment = true; +} + +/*********************************** Arcball::mouse_to_sphere() ****/ + +vec3 Arcball::mouse_to_sphere(const vec2 &p) +{ + float mag; + vec2 v2 = (p - center) / radius; + vec3 v3( v2[0], v2[1], 0.0 ); + + mag = v2*v2; + + if ( mag > 1.0 ) + v3.normalize(); + else + v3[VZ] = (float) sqrt( 1.0 - mag ); + + /* Now we add constraints - X takes precedence over Y */ + if ( constraint_x ) + { + v3 = constrain_vector( v3, vec3( 1.0, 0.0, 0.0 )); + } + else if ( constraint_y ) + { + v3 = constrain_vector( v3, vec3( 0.0, 1.0, 0.0 )); + } + + return v3; +} + + +/************************************ Arcball::constrain_vector() ****/ + +vec3 Arcball::constrain_vector(const vec3 &vector, const vec3 &axis) +{ + return (vector-(vector*axis)*axis).normalize(); +} + +/************************************ Arcball::mouse_down() **********/ + +void Arcball::mouse_down(int x, int y) +{ + down_pt.set( (float)x, (float) y ); + is_mouse_down = true; + + q_increment = quat_identity(); + rot_increment = identity3D(); + zero_increment = true; +} + + +/************************************ Arcball::mouse_up() **********/ + +void Arcball::mouse_up() +{ + q_now = q_drag * q_now; + is_mouse_down = false; +} + + +/********************************** Arcball::mouse_motion() **********/ + +void Arcball::mouse_motion(int x, int y, int shift, int ctrl, int alt) +{ + /* Set the X constraint if CONTROL key is pressed, Y if ALT key */ + set_constraints( ctrl != 0, alt != 0 ); + + vec2 new_pt( (float)x, (float) y ); + vec3 v0 = mouse_to_sphere( down_pt ); + vec3 v1 = mouse_to_sphere( new_pt ); + + vec3 cross = v0^v1; + + q_drag.set( cross, v0 * v1 ); + + // *rot_ptr = (q_drag * q_now).to_mat4(); + mat4 temp = q_drag.to_mat4(); + *rot_ptr = *rot_ptr * temp; + + down_pt = new_pt; + + /* We keep a copy of the current incremental rotation (= q_drag) */ + q_increment = q_drag; + rot_increment = q_increment.to_mat4(); + + set_constraints(false, false); + + if ( q_increment.s < .999999 ) + { + is_spinning = true; + zero_increment = false; + } + else + { + is_spinning = false; + zero_increment = true; + } +} + + +/********************************** Arcball::mouse_motion() **********/ + +void Arcball::mouse_motion(int x, int y) +{ + mouse_motion(x, y, 0, 0, 0); +} + + +/***************************** Arcball::set_constraints() **********/ + +void Arcball::set_constraints(bool _constraint_x, bool _constraint_y) +{ + constraint_x = _constraint_x; + constraint_y = _constraint_y; +} + +/***************************** Arcball::idle() *********************/ + +void Arcball::idle() +{ + if (is_mouse_down) + { + is_spinning = false; + zero_increment = true; + } + + if (damp_factor < 1.0f) + q_increment.scale_angle(1.0f - damp_factor); + + rot_increment = q_increment.to_mat4(); + + if (q_increment.s >= .999999f) + { + is_spinning = false; + zero_increment = true; + } +} + + +/************************ Arcball::set_damping() *********************/ + +void Arcball::set_damping(float d) +{ + damp_factor = d; +} + + + + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/arcball.h b/thirdparty/carve-1.4.0/external/GLUI/src/arcball.h new file mode 100644 index 00000000..ef69afc9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/arcball.h @@ -0,0 +1,97 @@ +/********************************************************************** + + arcball.h + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + Feb 1998, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + --------------------------------------------------------------------- + + A C++ class that implements the Arcball, as described by Ken + Shoemake in Graphics Gems IV. + This class takes as input mouse events (mouse down, mouse drag, + mouse up), and creates the appropriate quaternions and 4x4 matrices + to represent the rotation given by the mouse. + + This class is used as follows: + - initialize [either in the constructor or with set_params()], the + center position (x,y) of the arcball on the screen, and the radius + - on mouse down, call mouse_down(x,y) with the mouse position + - as the mouse is dragged, repeatedly call mouse_motion() with the + current x and y positions. One can optionally pass in the current + state of the SHIFT, ALT, and CONTROL keys (passing zero if keys + are not pressed, non-zero otherwise), which constrains + the rotation to certain axes (X for CONTROL, Y for ALT). + - when the mouse button is released, call mouse_up() + + Axis constraints can also be explicitly set with the + set_constraints() function. + + The current rotation is stored in the 4x4 float matrix 'rot'. + It is also stored in the quaternion 'q_now'. + +**********************************************************************/ + +#ifndef GLUI_ARCBALL_H +#define GLUI_ARCBALL_H + +#include "glui_internal.h" +#include "algebra3.h" +#include "quaternion.h" + +class Arcball +{ +public: + Arcball(); + Arcball(mat4 *mtx); + Arcball(const vec2 ¢er, float radius); + + void set_damping(float d); + void idle(); + void mouse_down(int x, int y); + void mouse_up(); + void mouse_motion(int x, int y, int shift, int ctrl, int alt); + void mouse_motion(int x, int y); + void set_constraints(bool constrain_x, bool constrain_y); + void set_params(const vec2 ¢er, float radius); + void reset_mouse(); + void init(); + + vec3 constrain_vector(const vec3 &vector, const vec3 &axis); + vec3 mouse_to_sphere(const vec2 &p); + + //public: + int is_mouse_down; /* true for down, false for up */ + int is_spinning; + quat q_now, q_down, q_drag, q_increment; + vec2 down_pt; + mat4 rot, rot_increment; + mat4 *rot_ptr; + + bool constraint_x, constraint_y; + vec2 center; + float radius, damp_factor; + int zero_increment; +}; + +#endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui.cpp new file mode 100644 index 00000000..1a525372 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui.cpp @@ -0,0 +1,2131 @@ +/**************************************************************************** + + GLUI User Interface Toolkit (LGPL) + --------------------------- + + glui.cpp + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ +#include "glui_internal_control.h" + + +/** + Note: moving this routine here from glui_add_controls.cpp prevents the linker + from touching glui_add_controls.o in non-deprecated programs, which + descreases the linked size of small GLUI programs substantially (100K+). (OSL 2006/06) +*/ +void GLUI_Node::add_child_to_control(GLUI_Node *parent,GLUI_Control *child) +{ + GLUI_Control *parent_control; + + /*** Collapsible nodes have to be handled differently, b/c the first and + last children are swapped in and out ***/ + parent_control = ((GLUI_Control*)parent); + if ( parent_control->collapsible == true ) { + if ( NOT parent_control->is_open ) { + /** Swap in the original first and last children **/ + parent_control->child_head = parent_control->collapsed_node.child_head; + parent_control->child_tail = parent_control->collapsed_node.child_tail; + + /*** Link this control ***/ + child->link_this_to_parent_last( parent_control ); + + /** Swap the children back out ***/ + parent_control->collapsed_node.child_head = parent_control->child_head; + parent_control->collapsed_node.child_tail = parent_control->child_tail; + parent_control->child_head = NULL; + parent_control->child_tail = NULL; + } + else { + child->link_this_to_parent_last( parent_control ); + } + } + else { + child->link_this_to_parent_last( parent_control ); + } + child->glui = (GLUI*) parent_control->glui; + child->update_size(); + child->enabled = parent_control->enabled; + child->glui->refresh(); + + /** Now set the 'hidden' var based on the parent **/ + if ( parent_control->hidden OR + (parent_control->collapsible AND NOT parent_control->is_open ) ) + { + child->hidden = true; + } +} + + +/************************************ GLUI_Node::add_control() **************/ + +int GLUI_Node::add_control( GLUI_Control *child ) +{ + add_child_to_control(this,child); + return true; +} + +/************************************ GLUI_Main::add_control() **************/ + +int GLUI_Main::add_control( GLUI_Node *parent, GLUI_Control *control ) +{ + add_child_to_control(parent,control); + return true; +} + + + +/*** This object must be used to create a GLUI ***/ + +GLUI_Master_Object GLUI_Master; + +/************************************ finish_drawing() *********** + Probably a silly routine. Called after all event handling callbacks. +*/ + +static void finish_drawing(void) +{ + glFinish(); +} + +/************************************ GLUI_CB::operator()() ************/ +void GLUI_CB::operator()(GLUI_Control*ctrl) const +{ + if (idCB) idCB(ctrl->user_id); + if (objCB) objCB(ctrl); +} + + +/************************************************ GLUI::GLUI() **********/ + +int GLUI::init( const char *text, long flags, int x, int y, int parent_window, int w, int h ) +{ + int old_glut_window; + + this->flags = flags; + + window_name = text; + + buffer_mode = buffer_back; ///< New smooth way + //buffer_mode = buffer_front; ///< Old flickery way (a bit faster). + + /*** We copy over the current window callthroughs ***/ + /*** (I think this might actually only be needed for subwindows) ***/ + /* glut_keyboard_CB = GLUI_Master.glut_keyboard_CB; + glut_reshape_CB = GLUI_Master.glut_reshape_CB; + glut_special_CB = GLUI_Master.glut_special_CB; + glut_mouse_CB = GLUI_Master.glut_mouse_CB;*/ + + + if ( (flags & GLUI_SUBWINDOW) != GLUI_SUBWINDOW ) { /* not a subwindow, creating a new top-level window */ + old_glut_window = glutGetWindow(); + + if (w > 0 && h > 0) { + create_standalone_window( window_name.c_str(), x, y, w, h ); + } else { + create_standalone_window( window_name.c_str(), x, y ); + } + setup_default_glut_callbacks(); + + if ( old_glut_window > 0 ) + glutSetWindow( old_glut_window ); + + top_level_glut_window_id = glut_window_id; + } + else /* *is* a subwindow */ + { + old_glut_window = glutGetWindow(); + + create_subwindow( parent_window, flags ); + setup_default_glut_callbacks(); + + if ( old_glut_window > 0 ) + glutSetWindow( old_glut_window ); + + top_level_glut_window_id = parent_window; + + /* + glutReshapeFunc( glui_parent_window_reshape_func ); + glutSpecialFunc( glui_parent_window_special_func ); + glutKeyboardFunc( glui_parent_window_keyboard_func ); + glutMouseFunc( glui_parent_window_mouse_func ); + */ + + } + + return true; +} + + +/**************************** GLUI_Main::create_standalone_window() ********/ + +void GLUI_Main::create_standalone_window( const char *name, int x, int y, int w, int h ) +{ + glutInitWindowSize( w, h ); + if ( x >= 0 OR y >= 0 ) + glutInitWindowPosition( x, y ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + glut_window_id = glutCreateWindow( name ); +} + + +/******************************** GLUI_Main::create_subwindow() **********/ + +void GLUI_Main::create_subwindow( int parent_window, int window_alignment ) +{ + glut_window_id = glutCreateSubWindow(parent_window, 0,0, 100, 100); + this->parent_window = parent_window; +} + + +/**************************** GLUI_Main::setup_default_glut_callbacks() *****/ + +void GLUI_Main::setup_default_glut_callbacks( void ) +{ + glutDisplayFunc( glui_display_func ); + glutReshapeFunc( glui_reshape_func ); + glutKeyboardFunc( glui_keyboard_func ); + glutSpecialFunc( glui_special_func ); + glutMouseFunc( glui_mouse_func ); + glutMotionFunc( glui_motion_func ); + glutPassiveMotionFunc( glui_passive_motion_func ); + glutEntryFunc( glui_entry_func ); + glutVisibilityFunc( glui_visibility_func ); + /* glutIdleFunc( glui_idle_func ); // FIXME! 100% CPU usage! */ +} + + +/********************************************** glui_display_func() ********/ + +void glui_display_func(void) +{ + GLUI *glui; + + /* printf( "display func\n" ); */ + + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->display(); + /* + Do not do anything after the above line, b/c the GLUI + window might have just closed itself + */ + } +} + + +/********************************************** glui_reshape_func() ********/ + +void glui_reshape_func(int w,int h ) +{ + GLUI *glui; + GLUI_Glut_Window *glut_window; + int current_window; + + /*printf( "glui_reshape_func(): %d w/h: %d/%d\n", glutGetWindow(), w, h ); */ + + current_window = glutGetWindow(); + + /*** First check if this is main glut window ***/ + glut_window = GLUI_Master.find_glut_window( current_window ); + if ( glut_window ) { + if (glut_window->glut_reshape_CB) glut_window->glut_reshape_CB(w,h); + + /*** Now send reshape events to all subwindows ***/ + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while(glui) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window ) { + glutSetWindow( glui->get_glut_window_id()); + glui->reshape(w,h); + /* glui->check_subwindow_position(); */ + } + glui = (GLUI*) glui->next(); + } + } + else { + /*** A standalone GLUI window ***/ + + glui = GLUI_Master.find_glui_by_window_id( current_window ); + + if ( glui ) { + glui->reshape(w,h); + } + } +} + +/********************************************** glui_keyboard_func() ********/ + +void glui_keyboard_func(unsigned char key, int x, int y) +{ + GLUI *glui; + int current_window; + GLUI_Glut_Window *glut_window; + + current_window = glutGetWindow(); + glut_window = GLUI_Master.find_glut_window( current_window ); + + /*printf( "key: %d\n", current_window ); */ + + if ( glut_window ) { /** Was event in a GLUT window? **/ + if ( GLUI_Master.active_control_glui AND GLUI_Master.active_control ) { + glutSetWindow( GLUI_Master.active_control_glui->get_glut_window_id() ); + + GLUI_Master.active_control_glui->keyboard(key,x,y); + finish_drawing(); + + glutSetWindow( current_window ); + } + else { + if (glut_window->glut_keyboard_CB) + glut_window->glut_keyboard_CB( key, x, y ); + } + } + else { /*** Nope, event was in a standalone GLUI window **/ + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->keyboard(key,x,y); + finish_drawing(); + } + } +} + + +/************************************************ glui_special_func() ********/ + +void glui_special_func(int key, int x, int y) +{ + GLUI *glui; + int current_window; + GLUI_Glut_Window *glut_window; + + current_window = glutGetWindow(); + glut_window = GLUI_Master.find_glut_window( current_window ); + + if (glut_window) /** Was event in a GLUT window? **/ + { + if ( GLUI_Master.active_control_glui AND GLUI_Master.active_control ) + { + glutSetWindow( GLUI_Master.active_control_glui->get_glut_window_id() ); + + GLUI_Master.active_control_glui->special(key,x,y); + finish_drawing(); + + glutSetWindow( current_window ); + } + else + { + if (glut_window->glut_special_CB) + glut_window->glut_special_CB( key, x, y ); + } + } + else /*** Nope, event was in a standalone GLUI window **/ + { + glui = GLUI_Master.find_glui_by_window_id(glutGetWindow()); + + if ( glui ) + { + glui->special(key,x,y); + finish_drawing(); + } + } +} + +/********************************************** glui_mouse_func() ********/ + +void glui_mouse_func(int button, int state, int x, int y) +{ + GLUI *glui; + int current_window; + GLUI_Glut_Window *glut_window; + + current_window = glutGetWindow(); + glut_window = GLUI_Master.find_glut_window( current_window ); + + if ( glut_window ) { /** Was event in a GLUT window? **/ + if ( GLUI_Master.active_control_glui != NULL ) + GLUI_Master.active_control_glui->deactivate_current_control(); + + if (glut_window->glut_mouse_CB) + glut_window->glut_mouse_CB( button, state, x, y ); + finish_drawing(); + } + else { /** Nope - event was in a GLUI standalone window **/ + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + if ( glui ) { + glui->passive_motion( 0,0 ); + glui->mouse( button, state, x, y ); + finish_drawing(); + } + } +} + + +/********************************************** glui_motion_func() ********/ + +void glui_motion_func(int x, int y) +{ + GLUI *glui; + int current_window; + GLUI_Glut_Window *glut_window; + + current_window = glutGetWindow(); + glut_window = GLUI_Master.find_glut_window( current_window ); + + if ( glut_window ) { /** Was event in a GLUT window? **/ + if ( GLUI_Master.active_control_glui != NULL ) + GLUI_Master.active_control_glui->deactivate_current_control(); + + if (glut_window->glut_motion_CB) + glut_window->glut_motion_CB( x, y ); + finish_drawing(); + } else { + /** Nope - event was in a GLUI standalone window **/ + + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->motion(x,y); + finish_drawing(); + } + } +} + + +/**************************************** glui_passive_motion_func() ********/ + +void glui_passive_motion_func(int x, int y) +{ + GLUI *glui; + + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->passive_motion(x,y); + finish_drawing(); + } +} + + +/********************************************** glui_entry_func() ********/ + +void glui_entry_func(int state) +{ + GLUI *glui; + + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->entry(state); + } +} + + +/******************************************** glui_visibility_func() ********/ + +void glui_visibility_func(int state) +{ + GLUI *glui; + + /* printf( "IN GLUI VISIBILITY()\n" ); */ + /* fflush( stdout ); */ + + glui = GLUI_Master.find_glui_by_window_id( glutGetWindow() ); + + if ( glui ) { + glui->visibility(state); + } +} + + +/********************************************** glui_idle_func() ********/ +/* Send idle event to each glui, then to the main window */ + +void glui_idle_func(void) +{ + GLUI *glui; + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + glui->idle(); + finish_drawing(); + + glui = (GLUI*) glui->next(); + } + + if ( GLUI_Master.glut_idle_CB ) { + /*** We set the current glut window before calling the user's + idle function, even though glut explicitly says the window id is + undefined in an idle callback. ***/ + + /** Check what the current window is first ***/ + + /*** Arbitrarily set the window id to the main gfx window of the + first glui window ***/ + /* int current_window, new_window; */ + /* current_window = glutGetWindow(); */ + /* if (GLUI_Master.gluis.first_child() != NULL ) { */ + /* new_window = ((GLUI_Main*)GLUI_Master.gluis.first_child())-> */ + /* main_gfx_window_id; */ + /* if ( new_window > 0 AND new_window != old_window ) { */ + /* --- Window is changed only if its not already the current window ---*/ + /* glutSetWindow( new_window ); */ + /* } */ + /*} */ + + GLUI_Master.glut_idle_CB(); + } +} + +/*********************************** GLUI_Master_Object::GLUI_Master_Object() ******/ + +GLUI_Master_Object::GLUI_Master_Object() +: glui_id_counter(1), + glut_idle_CB(NULL) +{ +} + +GLUI_Master_Object::~GLUI_Master_Object() +{ +} + +/*********************************** GLUI_Master_Object::create_glui() ******/ + +GLUI *GLUI_Master_Object::create_glui( const char *name, long flags,int x,int y, int w, int h ) +{ + GLUI *new_glui = new GLUI; + new_glui->init( name, flags, x, y, -1, w, h ); + new_glui->link_this_to_parent_last( &this->gluis ); + return new_glui; +} + + +/************************** GLUI_Master_Object::create_glui_subwindow() ******/ + +GLUI *GLUI_Master_Object::create_glui_subwindow( int parent_window, + long flags ) +{ + GLUI *new_glui = new GLUI; + GLUI_String new_name; + glui_format_str( new_name, "subwin_%p", this ); + + new_glui->init( new_name.c_str(), flags | GLUI_SUBWINDOW, 0,0, + parent_window ); + new_glui->main_panel->set_int_val( GLUI_PANEL_EMBOSSED ); + new_glui->link_this_to_parent_last( &this->gluis ); + return new_glui; +} + + +/********************** GLUI_Master_Object::find_glui_by_window_id() ********/ + +GLUI *GLUI_Master_Object::find_glui_by_window_id( int window_id ) +{ + GLUI_Node *node; + + node = gluis.first_child(); + while( node ) { + if ( ((GLUI*)node)->get_glut_window_id() == window_id ) + return (GLUI*) node; + + node = node->next(); + } + return NULL; +} + + +/******************************************** GLUI_Main::display() **********/ + +void GLUI_Main::display( void ) +{ + int win_w, win_h; + + /* SUBTLE: on freeGLUT, the correct window is always already set. + But older versions of GLUT need this call, or else subwindows + don't update properly when resizing or damage-painting. + */ + glutSetWindow( glut_window_id ); + + /* Set up OpenGL state for widget drawing */ + glDisable( GL_DEPTH_TEST ); + glCullFace( GL_BACK ); + glDisable( GL_CULL_FACE ); + glDisable( GL_LIGHTING ); + set_current_draw_buffer(); + + /**** This function is used as a special place to do 'safe' processing, + e.g., handling window close requests. + That is, we can't close the window directly in the callback, so + we set a flag, post a redisplay message (which eventually calls + this function), then close the window safely in here. ****/ + if ( closing ) { + close_internal(); + return; + } + + /* if ( TEST_AND( this->flags, GLUI_SUBWINDOW )) + check_subwindow_position(); + */ + + win_w = glutGet( GLUT_WINDOW_WIDTH ); + win_h = glutGet( GLUT_WINDOW_HEIGHT ); + + /*** Check here if the window needs resizing ***/ + if ( win_w != main_panel->w OR win_h != main_panel->h ) { + glutReshapeWindow( main_panel->w, main_panel->h ); + return; + } + + /******* Draw GLUI window ******/ + glClearColor( (float) bkgd_color.r / 255.0, + (float) bkgd_color.g / 255.0, + (float) bkgd_color.b / 255.0, + 1.0 ); + glClear( GL_COLOR_BUFFER_BIT ); /* | GL_DEPTH_BUFFER_BIT ); */ + + set_ortho_projection(); + + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + /*** Rotate image so y increases downward. + In normal OpenGL, y increases upward. ***/ + glTranslatef( (float) win_w/2.0, (float) win_h/2.0, 0.0 ); + glRotatef( 180.0, 0.0, 1.0, 0.0 ); + glRotatef( 180.0, 0.0, 0.0, 1.0 ); + glTranslatef( (float) -win_w/2.0, (float) -win_h/2.0, 0.0 ); + + // Recursively draw the main panel + // main_panel->draw_bkgd_box( 0, 0, win_w, win_h ); + main_panel->draw_recursive( 0, 0 ); + + switch (buffer_mode) { + case buffer_front: /* Make sure drawing gets to screen */ + glFlush(); + break; + case buffer_back: /* Bring back buffer to front */ + glutSwapBuffers(); + break; + } +} + + + + +/*************************************** _glutBitmapWidthString() **********/ + +int _glutBitmapWidthString( void *font, const char *s ) +{ + const char *p = s; + int width = 0; + + while( *p != '\0' ) { + width += glutBitmapWidth( font, *p ); + p++; + } + + return width; +} + +/************************************ _glutBitmapString *********************/ +/* Displays the contents of a string using GLUT's bitmap character function */ +/* Does not handle newlines */ + +void _glutBitmapString( void *font, const char *s ) +{ + const char *p = s; + + while( *p != '\0' ) { + glutBitmapCharacter( font, *p ); + p++; + } +} + + + +/****************************** GLUI_Main::reshape() **************/ + +void GLUI_Main::reshape( int reshape_w, int reshape_h ) +{ + int new_w, new_h; + + pack_controls(); + + new_w = main_panel->w;/* + 1; */ + new_h = main_panel->h;/* + 1; */ + + if ( reshape_w != new_w OR reshape_h != new_h ) { + this->w = new_w; + this->h = new_h; + + glutReshapeWindow( new_w, new_h ); + } + else { + } + + if ( TEST_AND( this->flags, GLUI_SUBWINDOW ) ) { + check_subwindow_position(); + + /***** if ( TEST_AND(this->flags,GLUI_SUBWINDOW_LEFT )) { + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_LEFT )) { + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_LEFT )) { + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_RIGHT )) { + } + ****/ + } + + glViewport( 0, 0, new_w, new_h ); + + /* printf( "%d: %d\n", glutGetWindow(), this->flags ); */ + + glutPostRedisplay(); +} + + +/****************************** GLUI_Main::keyboard() **************/ + +void GLUI_Main::keyboard(unsigned char key, int x, int y) +{ + GLUI_Control *new_control; + + curr_modifiers = glutGetModifiers(); + + /*** If it's a tab or shift tab, we don't pass it on to the controls. + Instead, we use it to cycle through active controls ***/ + if ( key == '\t' AND !mouse_button_down AND + (!active_control || !active_control->wants_tabs())) { + if ( curr_modifiers & GLUT_ACTIVE_SHIFT ) { + new_control = find_prev_control( active_control ); + } + else { + new_control = find_next_control( active_control ); + } + + /* if ( new_control ) + printf( "new_control: %s\n", new_control->name ); + */ + + deactivate_current_control(); + activate_control( new_control, GLUI_ACTIVATE_TAB ); + } + else if ( key == ' ' AND active_control + AND active_control->spacebar_mouse_click ) { + /*** If the user presses the spacebar, and a non-edittext control + is active, we send it a mouse down event followed by a mouse up + event (simulated mouse-click) ***/ + + active_control->mouse_down_handler( 0, 0 ); + active_control->mouse_up_handler( 0, 0, true ); + } else { + /*** Pass the keystroke onto the active control, if any ***/ + if ( active_control != NULL ) + active_control->key_handler( key, curr_modifiers ); + } +} + + +/****************************** GLUI_Main::special() **************/ + +void GLUI_Main::special(int key, int x, int y) +{ + curr_modifiers = glutGetModifiers(); + + /*** Pass the keystroke onto the active control, if any ***/ + if ( active_control != NULL ) + active_control->special_handler( key, glutGetModifiers() ); +} + + + +/****************************** GLUI_Main::mouse() **************/ + +void GLUI_Main::mouse(int button, int state, int x, int y) +{ + int callthrough; + GLUI_Control *control; + + /* printf( "MOUSE: %d %d\n", button, state ); */ + + callthrough = true; + + curr_modifiers = glutGetModifiers(); + + if ( button == GLUT_LEFT ) { + control = find_control( x, y ); + + /*if ( control ) printf( "control: %s\n", control->name.c_str() ); */ + + if ( mouse_button_down AND active_control != NULL AND + state == GLUT_UP ) + { + /** We just released the mouse, which was depressed at some control **/ + + callthrough = active_control-> + mouse_up_handler( x, y, control==active_control); + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + + if ( active_control AND + active_control->active_type == GLUI_CONTROL_ACTIVE_MOUSEDOWN AND 0) + { + /*** This is a control that needs to be deactivated when the + mouse button is released ****/ + deactivate_current_control(); + } + } + else { + if ( control ) { + if ( NOT mouse_button_down AND state == GLUT_DOWN ) { + /*** We just pressed the mouse down at some control ***/ + + if ( active_control != control ) { + if ( active_control != NULL ) { + /** There is an active control still - deactivate it ***/ + deactivate_current_control(); + } + } + + if ( control->enabled ) { + activate_control( control, GLUI_ACTIVATE_MOUSE ); + callthrough = control->mouse_down_handler( x, y ); + } + } + } + } + + if ( state == GLUT_DOWN ) + mouse_button_down = true; + else if ( state == GLUT_UP ) + mouse_button_down = false; + } + + /** + NO CALLTHROUGH NEEDED FOR MOUSE EVENTS + if ( callthrough AND glut_mouse_CB ) + glut_mouse_CB( button, state, x, y ); + **/ + + callthrough=callthrough; /* To get rid of compiler warnings */ +} + + +/****************************** GLUI_Main::motion() **************/ + +void GLUI_Main::motion(int x, int y) +{ + int callthrough; + GLUI_Control *control; + + /* printf( "MOTION: %d %d\n", x, y ); */ + + callthrough = true; + + control = find_control(x,y); + + if ( mouse_button_down AND active_control != NULL ) { + callthrough = + active_control->mouse_held_down_handler(x,y,control==active_control); + } + + /** + NO CALLTHROUGH NEEDED FOR MOUSE EVENTS + + if ( callthrough AND glut_motion_CB ) + glut_motion_CB(x,y); + **/ + + callthrough=callthrough; /* To get rid of compiler warnings */ +} + + +/*********************** GLUI_Main::passive_motion() **************/ + +void GLUI_Main::passive_motion(int x, int y) +{ + GLUI_Control *control; + + control = find_control( x, y ); + + /* printf( "%p %p\n", control, mouse_over_control ); */ + + if ( control != mouse_over_control ) { + if ( mouse_over_control ) { + mouse_over_control->mouse_over( false, x, y ); + } + + if ( control ) { + control->mouse_over( true, x, y ); + mouse_over_control = control; + } + } + + /* + if ( curr_cursor != GLUT_CURSOR_INHERIT ) { + curr_cursor = GLUT_CURSOR_INHERIT; + glutSetCursor( GLUT_CURSOR_INHERIT ); + }*/ + +} + + +/****************************** GLUI_Main::entry() **************/ + +void GLUI_Main::entry(int state) +{ + /*if ( NOT active_control OR ( active_control AND ( active_control->type == GLUI_CONTROL_EDITTEXT + OR active_control->type == GLUI_CONTROL_SPINNER) ) )*/ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); +} + + +/****************************** GLUI_Main::visibility() **************/ + +void GLUI_Main::visibility(int state) +{ +} + + +/****************************** GLUI_Main::idle() **************/ + +void GLUI_Main::idle(void) +{ + /*** Pass the idle event onto the active control, if any ***/ + + /* printf( "IDLE \t" ); */ + + if ( active_control != NULL ) { + /* First we check if the control actually needs the idle right now. + Otherwise, let's avoid wasting cycles and OpenGL context switching */ + + if ( active_control->needs_idle() ) { + /*** Set the current glut window to the glui window */ + /*** But don't change the window if we're already at that window ***/ + + if ( glut_window_id > 0 AND glutGetWindow() != glut_window_id ) { + glutSetWindow( glut_window_id ); + } + + active_control->idle(); + } + } +} + +int GLUI_Main::needs_idle( void ) +{ + return active_control != NULL && active_control->needs_idle(); +} + + +/******************************************* GLUI_Main::find_control() ******/ + +GLUI_Control *GLUI_Main::find_control( int x, int y ) +{ + GLUI_Control *node, *last_container; + + last_container = NULL; + + node = main_panel; + while( node != NULL ) { + if ( !dynamic_cast(node) AND + PT_IN_BOX( x, y, + node->x_abs, node->x_abs + node->w, + node->y_abs, node->y_abs + node->h ) + ) + { + /*** Point is inside current node ***/ + + if ( node->first_child() == NULL ) { + /*** SPECIAL CASE: for edittext boxes, we make sure click is + in box, and not on name string. This should be generalized + for all controls later... ***/ + if ( dynamic_cast(node) ) { + if ( x < node->x_abs + ((GLUI_EditText*)node)->text_x_offset ) + return (GLUI_Control*) node->parent(); + } + + return node; /* point is inside this node, and node has no children, + so return this node as the selected node */ + } + else { + /*** This is a container class ***/ + last_container = node; + node = (GLUI_Control*) node->first_child(); /* Descend into child */ + } + + } + else { + node = (GLUI_Control*) node->next(); + } + } + + /** No leaf-level nodes found to accept the mouse click, so + return the last container control found which DOES accept the click **/ + + if ( last_container ) { + /* printf( "ctrl: '%s'\n", last_container->name ); */ + + return last_container; + } + else { + return NULL; + } +} + + +/************************************* GLUI_Main::pack_controls() ***********/ + +void GLUI_Main::pack_controls( void ) +{ + main_panel->pack(0,0); + + /**** Now align controls within their bounds ****/ + align_controls( main_panel ); + + /*** If this is a subwindow, expand panel to fit parent window ***/ + if ( TEST_AND( this->flags, GLUI_SUBWINDOW ) ) { + int parent_h, parent_w; + int orig_window; + + orig_window = glutGetWindow(); + glutSetWindow( this->top_level_glut_window_id ); + parent_h = glutGet( GLUT_WINDOW_HEIGHT ); + parent_w = glutGet( GLUT_WINDOW_WIDTH ); + + glutSetWindow( orig_window ); + + /* printf( "%d %d\n", parent_h, parent_w ); */ + + if ( 1 ) { + if ( TEST_AND(this->flags,GLUI_SUBWINDOW_TOP )) { + main_panel->w = MAX( main_panel->w, parent_w ); + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_LEFT )) { + main_panel->h = MAX( main_panel->h, parent_h ); + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_BOTTOM )) { + main_panel->w = MAX( main_panel->w, parent_w ); + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_RIGHT )) { + main_panel->h = MAX( main_panel->h, parent_h ); + } + } + } + + this->w = main_panel->w; + this->h = main_panel->h; +} + + +/************************************ GLUI_Main::align_controls() **********/ + +void GLUI_Main::align_controls( GLUI_Control *control ) +{ + GLUI_Control *child; + + control->align(); + + child = (GLUI_Control*) control->first_child(); + + while( child != NULL ) { + align_controls( child ); + + child = (GLUI_Control*)child->next(); + } +} + + + +/*********************************** GLUI::set_main_gfx_window() ************/ + +void GLUI::set_main_gfx_window( int window_id ) +{ + main_gfx_window_id = window_id; +} + + +/********************************* GLUI_Main::post_update_main_gfx() ********/ + +void GLUI_Main::post_update_main_gfx( void ) +{ + int old_window; + + if ( main_gfx_window_id > 0 ) { + old_window = glutGetWindow(); + glutSetWindow( main_gfx_window_id ); + glutPostRedisplay(); + if( old_window > 0 ) + glutSetWindow( old_window ); + } +} + +/********************************* GLUI_Main::should_redraw_now() ********/ +/** Return true if this control should redraw itself immediately (front buffer); + Or queue up a redraw and return false if it shouldn't (back buffer). + + Called from GLUI_Control::redraw. +*/ +bool GLUI_Main::should_redraw_now(GLUI_Control *ctl) +{ + switch (buffer_mode) { + case buffer_front: return true; /* always draw in front-buffer mode */ + case buffer_back: { + int orig = ctl->set_to_glut_window(); + glutPostRedisplay(); /* redraw soon */ + ctl->restore_window(orig); + return false; /* don't draw now. */ + } + } + return false; /* never executed */ +} + +/********************************* GLUI_Main::set_current_draw_buffer() ********/ + +int GLUI_Main::set_current_draw_buffer( void ) +{ + /* Save old buffer */ + GLint state; + glGetIntegerv( GL_DRAW_BUFFER, &state ); + /* Switch to new buffer */ + switch (buffer_mode) { + case buffer_front: glDrawBuffer(GL_FRONT); break; + case buffer_back: glDrawBuffer(GL_BACK); break; /* might not be needed... */ + } + return (int)state; +} + + +/********************************* GLUI_Main::restore_draw_buffer() **********/ + +void GLUI_Main::restore_draw_buffer( int buffer_state ) +{ + glDrawBuffer( buffer_state ); +} + + +/******************************************** GLUI_Main::GLUI_Main() ********/ + +GLUI_Main::GLUI_Main( void ) +{ + mouse_button_down = false; + w = 0; + h = 0; + active_control = NULL; + mouse_over_control = NULL; + main_gfx_window_id = -1; + glut_window_id = -1; + curr_modifiers = 0; + closing = false; + parent_window = -1; + glui_id = GLUI_Master.glui_id_counter; + GLUI_Master.glui_id_counter++; + + font = GLUT_BITMAP_HELVETICA_12; + curr_cursor = GLUT_CURSOR_LEFT_ARROW; + + int r=200, g=200, b=200; + bkgd_color.set( r,g,b ); + bkgd_color_f[0] = r / 255.0; + bkgd_color_f[1] = g / 255.0; + bkgd_color_f[2] = b / 255.0; + + /*** Create the main panel ***/ + main_panel = new GLUI_Panel; + main_panel->set_int_val( GLUI_PANEL_NONE ); + main_panel->glui = (GLUI*) this; + main_panel->name = "\0"; +} + +/************************************ GLUI_Main::draw_raised_box() **********/ + +void GLUI_Main::draw_raised_box( int x, int y, int w, int h ) +{ + w = w+x; + h = h+y; + + glColor3ub( bkgd_color.r, bkgd_color.g, bkgd_color.b ); + glBegin( GL_LINE_LOOP ); + glVertex2i( x+1, y+1 ); glVertex2i( w-1, y+1 ); + glVertex2i( w-1, h-1 ); glVertex2i( x+1, h-1 ); + glEnd(); + + glColor3d( 1.0, 1.0, 1.0 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( x, h ); glVertex2i( x, y ); glVertex2i( w, y ); + glEnd(); + + glColor3d( 0.0, 0.0, 0.0 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( w, y ); glVertex2i( w, h ); glVertex2i( x, h ); + glEnd(); + + glColor3d( .5, .5, .5 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( w-1, y+1 ); glVertex2i( w-1, h-1 ); glVertex2i( x+1, h-1 ); + glEnd(); +} + + +/************************************ GLUI_Main::draw_lowered_box() **********/ +/* Not quite perfect... **/ + +void GLUI_Main::draw_lowered_box( int x, int y, int w, int h ) +{ + w = w+x; + h = h+y; + + glColor3ub( bkgd_color.r, bkgd_color.g, bkgd_color.b ); + glBegin( GL_LINE_LOOP ); + glVertex2i( x+1, y+1 ); glVertex2i( w-1, y+1 ); + glVertex2i( w-1, h-1 ); glVertex2i( x+1, h-1 ); + glEnd(); + + glColor3d( 0.0, 0.0, 0.0 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( x, h ); glVertex2i( x, y ); glVertex2i( w, y ); + glEnd(); + + glColor3d( 1.0, 1.0, 1.0 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( w, y ); glVertex2i( w, h ); glVertex2i( x, h ); + glEnd(); + + glColor3d( .5, .5, .5 ); + glBegin( GL_LINE_STRIP ); + glVertex2i( w-1, y+1 ); glVertex2i( w-1, h-1 ); glVertex2i( x+1, h-1 ); + glEnd(); +} + + +/************************************* GLUI_Main::activate_control() *********/ + +void GLUI_Main::activate_control( GLUI_Control *control, int how ) +{ + /** Are we not activating a control in the same window as the + previous active control? */ + if ( GLUI_Master.active_control_glui AND + this != (GLUI_Main*) GLUI_Master.active_control_glui ) { + GLUI_Master.active_control_glui->deactivate_current_control(); + } + + /******* Now activate it *****/ + if ( control != NULL AND control->can_activate AND control->enabled ) { + active_control = control; + + control->activate(how); + + /*if ( NOT active_control->is_container OR */ + /* active_control->type == GLUI_CONTROL_ROLLOUT) { */ + active_control->redraw(); + /*} */ + } + else { + active_control = NULL; + } + + /* printf( "activate: %d\n", glutGetWindow() ); */ + GLUI_Master.active_control = active_control; + GLUI_Master.active_control_glui = (GLUI*) this; +} + + +/************************* GLUI_Main::deactivate_current_control() **********/ + +void GLUI_Main::deactivate_current_control( void ) +{ + int orig; + + if ( active_control != NULL ) { + orig = active_control->set_to_glut_window(); + + active_control->deactivate(); + + /** If this isn't a container control, then redraw it in its + deactivated state. Container controls, such as panels, look + the same activated or not **/ + + /*if ( NOT active_control->is_container OR */ + /* active_control->type == GLUI_CONTROL_ROLLOUT ) { */ + active_control->redraw(); + /*} */ + + active_control->restore_window( orig ); + + active_control = NULL; + } + + /* printf( "deactivate: %d\n", glutGetWindow() ); */ + GLUI_Master.active_control = NULL; + GLUI_Master.active_control_glui = NULL; +} + + +/****************************** GLUI_Main::find_next_control() **************/ + +GLUI_Control *GLUI_Main::find_next_control_( GLUI_Control *control ) +{ + /*** THIS IS NOT find_next_control()! This is an unused older + version (look at the underscore at the end) ***/ + + if ( control == NULL ) + return find_next_control_rec( main_panel ); + else + return find_next_control_rec( control ); +} + +/****************************** GLUI_Main::find_next_control() **************/ + +GLUI_Control *GLUI_Main::find_next_control_rec( GLUI_Control *control ) +{ + GLUI_Control *child = NULL, *rec_control, *sibling; + + /*** Recursively investigate children ***/ + child = (GLUI_Control*) control->first_child(); + if ( child ) { + /*** If we can activate the first child, then do so ***/ + if ( child->can_activate AND child->enabled ) + return child; + else /*** Recurse into first child ***/ + rec_control = find_next_control_rec( child ); + + if ( rec_control ) + return rec_control; + } + + /*** At this point, either we don't have children, or the child cannot + be activated. So let's try the next sibling ***/ + + sibling = (GLUI_Control*) control->next(); + if ( sibling ) { + if ( sibling->can_activate AND sibling->enabled ) + return sibling; + else /*** Recurse into sibling ***/ + rec_control = find_next_control_rec( sibling ); + + if ( rec_control ) + return rec_control; + } + + return NULL; +} + + +/****************************** GLUI_Main::find_next_control() **************/ + +GLUI_Control *GLUI_Main::find_next_control( GLUI_Control *control ) +{ + GLUI_Control *tmp_control = NULL; + int back_up; + + if ( control == NULL ) + control = main_panel; + + while( control != NULL ) { + /** see if this control has a child **/ + tmp_control = (GLUI_Control*) control->first_child(); + + if ( tmp_control != NULL ) { + if ( tmp_control->can_activate AND tmp_control->enabled ) + return tmp_control; + + control = tmp_control; /* Descend into child */ + continue; + } + + /*** At this point, control has no children ***/ + + /** see if this control has a next sibling **/ + tmp_control = (GLUI_Control*) control->next(); + + if ( tmp_control != NULL ) { + if ( tmp_control->can_activate AND tmp_control->enabled ) + return tmp_control; + + control = tmp_control; + continue; + } + + /** back up until we find a sibling of an ancestor **/ + back_up = true; + while ( control->parent() AND back_up ) { + control = (GLUI_Control*) control->parent(); + + if ( control->next() ) { + control = (GLUI_Control*) control->next(); + if ( control->can_activate AND control->enabled ) + return control; + else + back_up = false; + + /*** if ( control->is_container ) { + tmp_control = control; + control = NULL; + break; + } + else { + back_up = false; + } + ***/ + } + } + + /** Check if we've cycled back to the top... if so, return NULL **/ + if ( control == main_panel ) { + return NULL; + } + } + /* + if ( tmp_control != NULL AND tmp_control->can_activate AND + tmp_control->enabled ) { + return tmp_control; + }*/ + + return NULL; +} + + +/****************************** GLUI_Main::find_prev_control() **************/ + +GLUI_Control *GLUI_Main::find_prev_control( GLUI_Control *control ) +{ + GLUI_Control *tmp_control, *next_control; + + if ( control == NULL ) { /* here we find the last valid control */ + next_control = main_panel; + + do { + tmp_control = next_control; + next_control = find_next_control( tmp_control ); + } while( next_control != NULL ); + + return tmp_control; + } + else { /* here we find the actual previous control */ + next_control = main_panel; + + do { + tmp_control = next_control; + next_control = find_next_control( tmp_control ); + } while( next_control != NULL AND next_control != control ); + + if ( next_control == NULL OR tmp_control == main_panel ) + return NULL; + else + return tmp_control; + } +} + +/************************* GLUI_Master_Object::set_glutIdleFunc() ***********/ + +void GLUI_Master_Object::set_glutIdleFunc(void (*f)(void)) +{ + glut_idle_CB = f; + GLUI_Master.glui_setIdleFuncIfNecessary(); +} + + +/**************************************** GLUI::disable() ********************/ + +void GLUI::disable( void ) +{ + deactivate_current_control(); + main_panel->disable(); +} + + +/******************************************** GLUI::sync_live() **************/ + +void GLUI::sync_live( void ) +{ + main_panel->sync_live(true, true); +} + + +/********************************* GLUI_Master_Object::sync_live_all() *****/ + +void GLUI_Master_Object::sync_live_all( void ) +{ + GLUI *glui; + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + + glui->sync_live(); /** sync it **/ + + glui = (GLUI*) glui->next(); + } +} + + +/************************************* GLUI_Master_Object::close() **********/ + +void GLUI_Master_Object::close_all( void ) +{ + GLUI *glui; + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + + glui->close(); /** Set flag to close **/ + + glui = (GLUI*) glui->next(); + } +} + + +/************************************* GLUI_Main::close_internal() **********/ + +void GLUI_Main::close_internal( void ) +{ + glutDestroyWindow(glutGetWindow()); /** Close this window **/ + + this->unlink(); + + if ( GLUI_Master.active_control_glui == this ) { + GLUI_Master.active_control = NULL; + GLUI_Master.active_control_glui = NULL; + } + + if ( parent_window != -1 ) { + glutSetWindow( parent_window ); + int win_w = glutGet( GLUT_WINDOW_WIDTH ); + int win_h = glutGet( GLUT_WINDOW_HEIGHT ); + glutReshapeWindow(win_w+1, win_h); + glutReshapeWindow(win_w-1, win_h); + } + + delete this->main_panel; + + delete this; +} + + +/************************************************** GLUI::close() **********/ + +void GLUI::close( void ) +{ + int old_glut_window; + + closing = true; + + old_glut_window = glutGetWindow(); + glutSetWindow( get_glut_window_id() ); + glutPostRedisplay(); + + glutSetWindow( old_glut_window ); +} + + +/************************** GLUI_Main::check_subwindow_position() **********/ + +void GLUI_Main::check_subwindow_position( void ) +{ + /*** Reposition this window if subwindow ***/ + if ( TEST_AND( this->flags, GLUI_SUBWINDOW ) ) { + + int parent_w, parent_h, new_x, new_y; + int old_window = glutGetWindow(); + + glutSetWindow( glut_window_id ); + + glutSetWindow( glutGet( GLUT_WINDOW_PARENT )); + parent_w = glutGet( GLUT_WINDOW_WIDTH ); + parent_h = glutGet( GLUT_WINDOW_HEIGHT ); + + glutSetWindow( glut_window_id ); + + if ( TEST_AND(this->flags,GLUI_SUBWINDOW_RIGHT )) { + new_x = parent_w - this->w; + new_y = 0; + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_LEFT )) { + new_x = 0; + new_y = 0; + } + else if ( TEST_AND(this->flags,GLUI_SUBWINDOW_BOTTOM )) { + new_x = 0; + new_y = parent_h - this->h; + } + else { /*** GLUI_SUBWINDOW_TOP ***/ + new_x = 0; + new_y = 0; + } + + /** Now make adjustments based on presence of other subwindows **/ + GLUI *curr_glui; + curr_glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( curr_glui ) { + if ( TEST_AND( curr_glui->flags, GLUI_SUBWINDOW) AND + curr_glui->parent_window == this->parent_window ) { + + if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_LEFT ) ) { + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_BOTTOM ) ) { + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_RIGHT ) ) { + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_TOP ) AND + ( TEST_AND( this->flags,GLUI_SUBWINDOW_LEFT ) OR + TEST_AND( this->flags,GLUI_SUBWINDOW_RIGHT ) ) ) { + /** If we are a RIGHT or LEFT subwindow, and there exists some + TOP subwindow, bump our position down **/ + + new_y += curr_glui->h; + } + + /** CHeck multiple subwins at same position **/ + /** We check the glui_id's: only the glui with the higher + ID number (meaning it was created later) gets bumped over **/ + if ( curr_glui != this AND this->glui_id > curr_glui->glui_id ) { + if ( TEST_AND( this->flags,GLUI_SUBWINDOW_LEFT ) AND + TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_LEFT ) ) { + new_x += curr_glui->w; + } + else if ( TEST_AND( this->flags,GLUI_SUBWINDOW_TOP ) AND + TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_TOP ) ) { + new_y += curr_glui->h; + } + else if ( TEST_AND( this->flags,GLUI_SUBWINDOW_BOTTOM ) AND + TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_BOTTOM ) ) { + new_y -= curr_glui->h; + } + else if ( TEST_AND( this->flags,GLUI_SUBWINDOW_RIGHT ) AND + TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_RIGHT ) ) { + new_x -= curr_glui->w; + } + + } + } + + curr_glui = (GLUI*) curr_glui->next(); + } + + + + CLAMP( new_x, 0, new_x ); + CLAMP( new_y, 0, new_y ); + + glutPositionWindow( new_x, new_y ); + /* glutPostRedisplay(); */ + + glutSetWindow( old_window ); + } +} + + +/********************************* GLUI_Master_Object::reshape() **********/ +/* This gets called by the user from a GLUT reshape callback. So we look */ +/* for subwindows that belong to the current window */ + +void GLUI_Master_Object::reshape( void ) +{ + GLUI *glui; + int current_window; + + current_window = glutGetWindow(); + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window ) { + glutSetWindow( glui->get_glut_window_id()); + glui->check_subwindow_position(); + } + + glui = (GLUI*) glui->next(); + } + + glutSetWindow(current_window); +} + + +/**************************** GLUI_Master_Object::set_glutReshapeFunc() *****/ + +void GLUI_Master_Object::set_glutReshapeFunc(void (*f)(int width, int height)) +{ + glutReshapeFunc( glui_reshape_func ); + add_cb_to_glut_window( glutGetWindow(), GLUI_GLUT_RESHAPE, (void*) f); +} + + +/**************************** GLUI_Master_Object::set_glutKeyboardFunc() ****/ + +void GLUI_Master_Object::set_glutKeyboardFunc(void (*f)(unsigned char key, + int x, int y)) +{ + glutKeyboardFunc( glui_keyboard_func ); + add_cb_to_glut_window( glutGetWindow(), GLUI_GLUT_KEYBOARD, (void*) f); +} + + +/*********************** GLUI_Master_Object::set_glutSpecialFunc() **********/ + +void GLUI_Master_Object::set_glutSpecialFunc(void (*f)(int key, + int x, int y)) +{ + glutSpecialFunc( glui_special_func ); + add_cb_to_glut_window( glutGetWindow(), GLUI_GLUT_SPECIAL, (void*) f); +} + + +/*********************** GLUI_Master_Object::set_glutMouseFunc() **********/ + +void GLUI_Master_Object::set_glutMouseFunc(void (*f)(int button, int state, + int x, int y)) +{ + glutMouseFunc( glui_mouse_func ); + add_cb_to_glut_window( glutGetWindow(), GLUI_GLUT_MOUSE, (void*) f); +} + +/*********************** GLUI_Master_Object::set_glutMotionFunc() **********/ + +void GLUI_Master_Object::set_glutMotionFunc(void (*f)(int x, int y)) +{ + glutMotionFunc( glui_motion_func ); + add_cb_to_glut_window( glutGetWindow(), GLUI_GLUT_MOTION, (void*) f); +} + +/****************************** glui_parent_window_reshape_func() **********/ +/* This is the reshape callback for a window that contains subwindows */ + +void glui_parent_window_reshape_func( int w, int h ) +{ + int current_window; + GLUI *glui; + int first = true; + + /* printf( "glui_parent_window_reshape_func: %d\n", glutGetWindow() ); */ + + current_window = glutGetWindow(); + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window ) { + glutSetWindow( glui->get_glut_window_id()); + glui->check_subwindow_position(); + glutSetWindow( current_window ); + + if ( first ) { + if (glui->glut_reshape_CB) glui->glut_reshape_CB( w, h ); + + first = false; + } + } + + glui = (GLUI*) glui->next(); + } +} + + +/****************************** glui_parent_window_keyboard_func() **********/ + +void glui_parent_window_keyboard_func(unsigned char key, int x, int y) +{ + /* printf( "glui_parent_window_keyboard_func: %d\n", glutGetWindow() ); */ + + int current_window; + GLUI *glui; + + current_window = glutGetWindow(); + + if ( GLUI_Master.active_control_glui AND GLUI_Master.active_control ) { + glutSetWindow( GLUI_Master.active_control_glui->get_glut_window_id() ); + + GLUI_Master.active_control_glui->keyboard(key,x,y); + + glutSetWindow( current_window ); + } + else { + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window AND + glui->glut_keyboard_CB ) + { + glui->glut_keyboard_CB( key, x, y ); + break; + } + + glui = (GLUI*) glui->next(); + } + } +} + + +/****************************** glui_parent_window_special_func() **********/ + +void glui_parent_window_special_func(int key, int x, int y) +{ + /*printf( "glui_parent_window_special_func: %d\n", glutGetWindow() ); */ + + int current_window; + GLUI *glui; + + /** If clicking in the main area of a window w/subwindows, + deactivate any current control **/ + if ( GLUI_Master.active_control_glui != NULL ) + GLUI_Master.active_control_glui->deactivate_current_control(); + + /*** Now pass on the mouse event ***/ + + current_window = glutGetWindow(); + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window ) + { + glutSetWindow( glui->get_glut_window_id()); + if (glui->glut_special_CB) glui->glut_special_CB( key, x, y ); + break; + } + + glui = (GLUI*) glui->next(); + } +} + + +/****************************** glui_parent_window_mouse_func() **********/ + +void glui_parent_window_mouse_func(int button, int state, int x, int y) +{ + int current_window; + GLUI *glui; + + /** If clicking in the main area of a window w/subwindows, + deactivate any current control **/ + if ( GLUI_Master.active_control_glui != NULL ) + GLUI_Master.active_control_glui->deactivate_current_control(); + + + /*** Now pass on the mouse event ***/ + + current_window = glutGetWindow(); + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + while( glui ) { + if ( TEST_AND( glui->flags, GLUI_SUBWINDOW) AND + glui->parent_window == current_window AND + glui->glut_mouse_CB) + { + glutSetWindow( glui->get_glut_window_id()); + glui->glut_mouse_CB( button, state, x, y ); + break; + } + + glui = (GLUI*) glui->next(); + } +} + + +/************************** GLUI_Master_Object::find_glut_window() **********/ + +GLUI_Glut_Window *GLUI_Master_Object::find_glut_window( int window_id ) +{ + GLUI_Glut_Window *window; + + window = (GLUI_Glut_Window*) glut_windows.first_child(); + while( window ) { + if ( window->glut_window_id == window_id ) + return window; + + window = (GLUI_Glut_Window*) window->next(); + } + + /*** Window not found - return NULL ***/ + return NULL; +} + + +/******************** GLUI_Master_Object::add_cb_to_glut_window() **********/ + +void GLUI_Master_Object::add_cb_to_glut_window(int window_id, + int cb_type,void *cb) +{ + GLUI_Glut_Window *window; + + window = find_glut_window( window_id ); + if ( NOT window ) { + /*** Allocate new window structure ***/ + + window = new GLUI_Glut_Window; + window->glut_window_id = window_id; + window->link_this_to_parent_last( (GLUI_Node*) &this->glut_windows ); + } + + switch( cb_type ) { + case GLUI_GLUT_RESHAPE: + window->glut_reshape_CB = (void(*)(int,int)) cb; + break; + case GLUI_GLUT_DISPLAY: + window->glut_display_CB = (void(*)()) cb; + break; + case GLUI_GLUT_KEYBOARD: + window->glut_keyboard_CB = (void(*)(unsigned char,int,int)) cb; + break; + case GLUI_GLUT_SPECIAL: + window->glut_special_CB = (void(*)(int,int,int)) cb; + break; + case GLUI_GLUT_MOUSE: + window->glut_mouse_CB = (void(*)(int,int,int,int)) cb; + break; + case GLUI_GLUT_MOTION: + window->glut_motion_CB = (void(*)(int,int)) cb; + break; + case GLUI_GLUT_PASSIVE_MOTION: + window->glut_passive_motion_CB = (void(*)(int,int)) cb; + break; + case GLUI_GLUT_ENTRY: + window->glut_entry_CB = (void(*)(int)) cb; + break; + case GLUI_GLUT_VISIBILITY: + window->glut_visibility_CB= (void(*)(int)) cb; + break; + } +} + + +/************* GLUI_Master_Object::set_left_button_glut_menu_control() *****/ + +void GLUI_Master_Object::set_left_button_glut_menu_control( + GLUI_Control *control ) +{ + curr_left_button_glut_menu = control; +} + + +/******************************* GLUI_Main::set_ortho_projection() **********/ + +void GLUI_Main::set_ortho_projection( void ) +{ + int win_h, win_w; + + win_w = glutGet( GLUT_WINDOW_WIDTH ); + win_h = glutGet( GLUT_WINDOW_HEIGHT ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + /* gluOrtho2D( 0.0, (float) win_w, 0.0, (float) win_h ); */ + glOrtho( 0.0, (float)win_w, 0.0, (float) win_h, -1000.0, 1000.0 ); + + glMatrixMode( GL_MODELVIEW ); + + return; /****-----------------------------------------------***/ + + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + /*** Rotate image so y increases upwards, contrary to OpenGL axes ***/ + glTranslatef( (float) win_w/2.0, (float) win_h/2.0, 0.0 ); + glRotatef( 180.0, 0.0, 1.0, 0.0 ); + glRotatef( 180.0, 0.0, 0.0, 1.0 ); + glTranslatef( (float) -win_w/2.0, (float) -win_h/2.0, 0.0 ); +} + + +/******************************* GLUI_Main::set_viewport() **********/ + +void GLUI_Main::set_viewport( void ) +{ + glViewport( 0, 0, main_panel->w, main_panel->h ); +} + + +/****************************** GLUI_Main::refresh() ****************/ + +void GLUI_Main::refresh( void ) +{ + int orig; + + /****** GLUI_Glut_Window *glut_window; + int current_window; + current_window = glutGetWindow(); + glut_window = GLUI_Master.find_glut_window( current_window ); + if ( glut_window ) { + glut_window->glut_reshape_CB(w,h); + ******/ + + orig = glutGetWindow(); + + pack_controls(); + + if ( glut_window_id > 0 ) + glutSetWindow( glut_window_id ); + + + if ( TEST_AND( this->flags, GLUI_SUBWINDOW ) ) { + /*** GLUI subwindow ***/ + + check_subwindow_position(); + } + else { + /*** Standalone GLUI window ***/ + + glutReshapeWindow( this->h, this->w ); + + } + + glutPostRedisplay(); + glutSetWindow( orig); +} + + + +/***************** GLUI_Master_Object::get_main_gfx_viewport() ***********/ + +void GLUI_Master_Object::get_viewport_area( int *x, int *y, + int *w, int *h ) +{ + GLUI *curr_glui; + int curr_x, curr_y, curr_w, curr_h; + int curr_window; + + curr_window = glutGetWindow(); + curr_x = 0; + curr_y = 0; + curr_w = glutGet( GLUT_WINDOW_WIDTH ); + curr_h = glutGet( GLUT_WINDOW_HEIGHT ); + + curr_glui = (GLUI*) gluis.first_child(); + while( curr_glui ) { + if ( TEST_AND( curr_glui->flags, GLUI_SUBWINDOW) AND + curr_glui->parent_window == curr_window ) { + + /* printf( "%s -> %d %d %d\n", curr_glui->window_name.c_str(), curr_glui->flags, + curr_glui->w, curr_glui->h );*/ + + if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_LEFT ) ) { + curr_x += curr_glui->w; + curr_w -= curr_glui->w; + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_BOTTOM ) ) { + curr_y += curr_glui->h; + curr_h -= curr_glui->h; + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_RIGHT ) ) { + curr_w -= curr_glui->w; + } + else if ( TEST_AND( curr_glui->flags,GLUI_SUBWINDOW_TOP ) ) { + curr_h -= curr_glui->h; + } + } + + curr_glui = (GLUI*) curr_glui->next(); + } + + curr_x = MAX( 0, curr_x ); + curr_y = MAX( 0, curr_y ); + curr_w = MAX( 0, curr_w ); + curr_h = MAX( 0, curr_h ); + + *x = curr_x; + *y = curr_y; + *w = curr_w; + *h = curr_h; +} + + +/*****************GLUI_Master_Object::auto_set_main_gfx_viewport() **********/ + +void GLUI_Master_Object::auto_set_viewport( void ) +{ + int x, y, w, h; + + get_viewport_area( &x, &y, &w, &h ); + glViewport( MAX(x,0), MAX(y,0), MAX(w,0), MAX(h,0) ); +} + + + +/***************************************** GLUI::show() **********************/ + +void GLUI::show( void ) +{ + int orig_window; + + orig_window = main_panel->set_to_glut_window(); + + glutShowWindow(); + + main_panel->restore_window(orig_window); +} + + + +/***************************************** GLUI::hide() **********************/ + +void GLUI::hide( void ) +{ + int orig_window; + + this->deactivate_current_control(); + + orig_window = main_panel->set_to_glut_window(); + + glutHideWindow(); + + main_panel->restore_window(orig_window); +} + + +/**************** GLUI_DrawingSentinal **************/ +GLUI_DrawingSentinal::GLUI_DrawingSentinal(GLUI_Control *c_) + :c(c_) +{ + orig_win = c->set_to_glut_window(); + orig_buf = c->glui->set_current_draw_buffer(); +} +GLUI_DrawingSentinal::~GLUI_DrawingSentinal() { + c->glui->restore_draw_buffer(orig_buf); + c->restore_window(orig_win); +} + + +void GLUI_Master_Object::glui_setIdleFuncIfNecessary( void ) +{ + GLUI *glui; + + glui = (GLUI*) GLUI_Master.gluis.first_child(); + int necessary; + if (this->glut_idle_CB) + necessary = true; + else { + necessary = false; + while( glui ) { + if( glui->needs_idle() ) { + necessary = true; + break; + } + glui = (GLUI*) glui->next(); + } + } + if( necessary ) + glutIdleFunc( glui_idle_func ); + else + glutIdleFunc( NULL ); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_add_controls.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_add_controls.cpp new file mode 100644 index 00000000..b1d52f43 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_add_controls.cpp @@ -0,0 +1,319 @@ +/**************************************************************************** + + GLUI User Interface Toolkit (LGPL) + --------------------------- + + glui_add_controls.cpp - Routines for adding controls to a GLUI window + +Note: these routines are all deprecated. Keeping them all here +prevents the linker from dragging in all the .o files, even for controls +that aren't used. + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" + + +/*********************************** GLUI:: add_checkbox() ************/ + +GLUI_Checkbox *GLUI:: add_checkbox( const char *name, int *value_ptr, + int id, GLUI_CB callback ) +{ + return add_checkbox_to_panel( main_panel, + name, value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_checkbox_to_panel() **********/ + +GLUI_Checkbox *GLUI::add_checkbox_to_panel( GLUI_Panel *panel, + const char *name, int *value_ptr, + int id, + GLUI_CB callback ) +{ + return new GLUI_Checkbox( panel, name, value_ptr, id, callback ); +} + +/********************************************* GLUI::add_panel() *************/ + +GLUI_Panel *GLUI::add_panel( const char *name, int type ) +{ + return add_panel_to_panel( main_panel, name, type ); +} + + +/**************************************** GLUI::add_panel_to_panel() *********/ + +GLUI_Panel *GLUI::add_panel_to_panel( GLUI_Panel *parent_panel, + const char *name, int type ) +{ + return new GLUI_Panel( parent_panel, name, type ); +} + + +/***************************** GLUI::add_radiogroup() ***************/ + +GLUI_RadioGroup *GLUI::add_radiogroup( int *value_ptr, + int user_id, GLUI_CB callback) +{ + return add_radiogroup_to_panel( main_panel, value_ptr, + user_id, callback ); +} + + +/***************************** GLUI::add_radiogroup_to_panel() ***************/ + +GLUI_RadioGroup *GLUI::add_radiogroup_to_panel( + GLUI_Panel *panel, int *value_ptr, + int user_id, GLUI_CB callback + ) +{ + return new GLUI_RadioGroup( panel, value_ptr, user_id, callback ); +} + + +/***************************** GLUI::add_radiobutton_to_group() *************/ + +GLUI_RadioButton *GLUI::add_radiobutton_to_group( GLUI_RadioGroup *group, + const char *name ) +{ + return new GLUI_RadioButton( group, name ); +} + + +/********************************** GLUI::add_statictext() ************/ + +GLUI_StaticText *GLUI::add_statictext( const char *name ) +{ + return add_statictext_to_panel( main_panel, name ); +} + + +/******************************* GLUI::add_statictext_to_panel() **********/ + +GLUI_StaticText *GLUI::add_statictext_to_panel( GLUI_Panel *panel, + const char *name ) +{ + return new GLUI_StaticText( panel, name ); +} + + +/***************************************** GLUI:: add_button() ************/ + +GLUI_Button *GLUI:: add_button( const char *name, + int id, GLUI_CB callback ) +{ + return add_button_to_panel( main_panel, + name, id, callback ); +} + +/*********************************** GLUI:: add_button_to_panel() **********/ + +GLUI_Button *GLUI::add_button_to_panel( GLUI_Panel *panel, + const char *name, + int id, + GLUI_CB callback ) +{ + return new GLUI_Button( panel, name, id, callback ); +} + +/********************************** GLUI::add_separator() ************/ + +void GLUI::add_separator( void ) +{ + add_separator_to_panel( main_panel ); +} + + +/******************************* GLUI::add_separator_to_panel() **********/ + +void GLUI::add_separator_to_panel( GLUI_Panel *panel ) +{ + new GLUI_Separator( panel ); +} + + +/********************************** GLUI::add_edittext() ************/ + +GLUI_EditText *GLUI::add_edittext( const char *name, + int data_type, void *data, + int id, GLUI_CB callback) +{ + return add_edittext_to_panel( main_panel, name, data_type, data, + id, callback ); +} + + +/******************************* GLUI::add_edittext_to_panel() **********/ + +GLUI_EditText *GLUI::add_edittext_to_panel( GLUI_Panel *panel, + const char *name, + int data_type, void *data, + int id, GLUI_CB callback) +{ + return new GLUI_EditText( panel, name, data_type, data, id, callback ); +} + +/********************************** GLUI::add_edittext() ************/ + +GLUI_EditText *GLUI::add_edittext( const char *name, + GLUI_String & data, + int id, GLUI_CB callback) +{ + return add_edittext_to_panel( main_panel, name, data, id, callback ); +} + + +/******************************* GLUI::add_edittext_to_panel() **********/ + +GLUI_EditText* +GLUI::add_edittext_to_panel( GLUI_Panel *panel, const char *name, + GLUI_String& data, + int id, GLUI_CB callback) +{ + return new GLUI_EditText( panel, name, GLUI_EDITTEXT_STRING, &data, id, callback ); +} + +/********************************** GLUI::add_spinner() ************/ + +GLUI_Spinner *GLUI::add_spinner( const char *name, + int data_type, void *data, + int id, GLUI_CB callback) +{ + return add_spinner_to_panel( main_panel, name, data_type, data, + id, callback ); +} + + +/******************************* GLUI::add_spinner_to_panel() **********/ + +GLUI_Spinner *GLUI::add_spinner_to_panel( + GLUI_Panel *panel, const char *name, + int data_type, void *data, + int id, GLUI_CB callback +) +{ + return new GLUI_Spinner( panel, name, data_type, data, id, callback ); +} + + +/********************************** GLUI::add_column() ************/ + +void GLUI::add_column( int draw_bar ) +{ + add_column_to_panel( main_panel, draw_bar ); +} + + +/******************************* GLUI::add_column_to_panel() **********/ + +void GLUI::add_column_to_panel( GLUI_Panel *panel, int draw_bar ) +{ + new GLUI_Column( panel, draw_bar ); +} + + +/*********************************** GLUI:: add_listbox() ************/ + +GLUI_Listbox *GLUI:: add_listbox( const char *name, int *value_ptr, + int id, GLUI_CB callback ) +{ + return add_listbox_to_panel( main_panel, + name, value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_listbox_to_panel() **********/ + +GLUI_Listbox *GLUI::add_listbox_to_panel( GLUI_Panel *panel, + const char *name, int *value_ptr, + int id, + GLUI_CB callback ) +{ + return new GLUI_Listbox( panel, name, value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_rotation() ************/ + +GLUI_Rotation *GLUI:: add_rotation( const char *name, float *value_ptr, + int id, GLUI_CB callback ) +{ + return add_rotation_to_panel( main_panel, name, value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_rotation_to_panel() **********/ + +GLUI_Rotation *GLUI::add_rotation_to_panel( GLUI_Panel *panel, + const char *name, float *value_ptr, + int id, + GLUI_CB callback ) +{ + return new GLUI_Rotation( panel, name, value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_translation() ************/ + +GLUI_Translation *GLUI:: add_translation( const char *name, int trans_type, + float *value_ptr, int id, + GLUI_CB callback ) +{ + return add_translation_to_panel( main_panel,name,trans_type, + value_ptr, id, callback ); +} + + +/*********************************** GLUI:: add_translation_to_panel() **********/ + +GLUI_Translation *GLUI::add_translation_to_panel( + GLUI_Panel *panel, const char *name, + int trans_type, float *value_ptr, + int id, GLUI_CB callback + ) +{ + return new GLUI_Translation(panel, name, trans_type, value_ptr, id, callback); +} + + +/********************************** GLUI::add_rollout() **************/ + +GLUI_Rollout *GLUI::add_rollout( const char *name, int open, int type) +{ + return add_rollout_to_panel( main_panel, name, open, type); +} + + +/****************************** GLUI::add_rollout_to_panel() *********/ + +GLUI_Rollout *GLUI::add_rollout_to_panel(GLUI_Panel *panel, const char *name, + int open, int type) +{ + return new GLUI_Rollout( panel, name, open, type ); +} + + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmap_img_data.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmap_img_data.cpp new file mode 100644 index 00000000..6ec7e6df --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmap_img_data.cpp @@ -0,0 +1,138 @@ +/** + Bitmaps for all GLUI images. + + These were converted from original PPM images + (mostly lost) with the tools/ppm2array program. + + The images here are extracted in typical OpenGL + bottom-to-top fashion. + + FIXME: don't use greyscale brightness here--this prevents + people changing the background color. Instead, use a code + indicating the underlying purpose of the pixel: + 0 = shadows; outlines; UI elements (check boxes, arrows) + 64 = disabled shadows and UI elements + 128 = shadowing, disabled + 192 = disabled white; background + 255 = highlights; checkbox/radio background + + I'm thinking the way to do this would be to have an +enum { + BG = 0, // Background shines through-- totally alpha transparent + BS, // Background of scrollbar/spin box-- opaque gray + SB, // Shadowed-black element-- strong alpha blend to black + SD, // Shadowed-dark element-- weak alpha blend to black + HL, // Highlight-light-- weak alpha blend to white + HW, // Highlight-white-- strong alpha blend to white + UB, // User-interface black-- arrows, checkboxes, radio buttons + UW, // User-interface white-- backgrounds of checkboxes and radio buttons +}; + + Orion Sky Lawlor, olawlor@acm.org, 2006/05/04 (LGPL) +*/ + +/*----------------------- checkboxes --------------------------*/ +unsigned char glui_img_checkbox_0[] = { 13, 13, /* width, height */ +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, +}; + + +unsigned char glui_img_checkbox_0_dis[] = { 13, 13, /* width, height */ +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, +}; + + +unsigned char glui_img_checkbox_1[] = { 13, 13, /* width, height */ +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 192, 255, 128, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 192, 255, 128, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 192, 255, 128, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 192, 255, 128, 0, 255, 0, 255, 255, 255, 0, 0, 0, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 192, 255, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, +}; + + +unsigned char glui_img_checkbox_1_dis[] = { 13, 13, /* width, height */ +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 192, 64, 192, 192, 192, 192, 192, 192, 255, 128, 64, 192, 192, 64, 64, 64, 192, 192, 192, 192, 192, 255, 128, 64, 192, 64, 64, 64, 64, 64, 192, 192, 192, 192, 255, 128, 64, 192, 64, 64, 192, 64, 64, 64, 192, 192, 192, 255, 128, 64, 192, 64, 192, 192, 192, 64, 64, 64, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 64, 64, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 64, 192, 192, 255, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, +}; + + +/*------------------------------- arrows -------------------------------------*/ +unsigned char glui_img_downarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 0, 0, 0, 0, 0, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 0, 0, 0, 0, 0, 0, 0, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, +}; + + +unsigned char glui_img_leftarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 0, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, +}; + +unsigned char glui_img_rightarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 0, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, +}; + +unsigned char glui_img_uparrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 0, 0, 0, 0, 0, 0, 0, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 0, 0, 0, 0, 0, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 0, 0, 0, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 0, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 192, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, +}; + +/*------------------ listboxes ---------------------*/ +unsigned char glui_img_listbox_down[] = { 11, 17, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 127, 191, 191, 191, 127, 0, 127, 191, 191, 191, 127, 127, 127, 191, 191, 127, 0, 127, 191, 191, 127, 127, 127, 127, 127, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, +}; + + +unsigned char glui_img_listbox_up[] = { 11, 17, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 0, 191, 191, 191, 127, 0, 191, 255, 191, 191, 0, 0, 0, 191, 191, 127, 0, 191, 255, 191, 0, 0, 0, 0, 0, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 0, 191, 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 0, +}; + +unsigned char glui_img_listbox_up_dis[] = { 11, 17, /* width, height */ +127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 191, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 254, 191, 191, 191, 127, 127, 191, 255, 191, 191, 127, 127, 254, 191, 191, 127, 127, 191, 255, 191, 127, 127, 127, 127, 254, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 191, 191, 191, 191, 191, 191, 191, 127, 127, 191, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, +}; + +/*--------------------------- radio buttons -------------------------*/ +unsigned char glui_img_radiobutton_0[] = { 14, 14, /* width, height */ +192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 255, 255, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 192, 128, 192, 192, 255, 255, 255, 255, 192, 192, 255, 192, 192, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 192, 192, 128, 0, 0, 255, 255, 255, 255, 0, 0, 255, 192, 192, 192, 192, 192, 128, 128, 0, 0, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, +}; + + +unsigned char glui_img_radiobutton_0_dis[] = { 14, 14, /* width, height */ +192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 255, 255, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 192, 128, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 192, 128, 64, 64, 192, 192, 192, 192, 64, 64, 255, 192, 192, 192, 192, 192, 128, 128, 64, 64, 64, 64, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, +}; + + +unsigned char glui_img_radiobutton_1[] = { 14, 14, /* width, height */ +192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 255, 255, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 192, 128, 192, 192, 255, 255, 255, 255, 192, 192, 255, 192, 192, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 192, 128, 0, 255, 255, 255, 0, 0, 255, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 0, 0, 0, 0, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 0, 0, 0, 0, 255, 255, 192, 255, 192, 192, 128, 0, 255, 255, 255, 0, 0, 255, 255, 255, 192, 255, 192, 192, 192, 128, 0, 255, 255, 255, 255, 255, 255, 192, 255, 192, 192, 192, 192, 128, 0, 0, 255, 255, 255, 255, 0, 0, 255, 192, 192, 192, 192, 192, 128, 128, 0, 0, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, +}; + + +unsigned char glui_img_radiobutton_1_dis[] = { 14, 14, /* width, height */ +192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 255, 255, 192, 192, 192, 192, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 255, 255, 192, 192, 192, 192, 192, 128, 192, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 128, 64, 192, 192, 192, 64, 64, 192, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 64, 64, 64, 64, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 64, 64, 64, 64, 192, 192, 192, 255, 192, 192, 128, 64, 192, 192, 192, 64, 64, 192, 192, 192, 192, 255, 192, 192, 192, 128, 64, 192, 192, 192, 192, 192, 192, 192, 255, 192, 192, 192, 192, 128, 64, 64, 192, 192, 192, 192, 64, 64, 255, 192, 192, 192, 192, 192, 128, 128, 64, 64, 64, 64, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, +}; + + + +/*----------------- spinners ----------------------------*/ +unsigned char glui_img_spindown_0[] = { 12, 8, /* width, height */ +255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 255, 191, 191, 191, 191, 0, 127, 191, 191, 191, 127, 0, 255, 191, 191, 191, 0, 0, 0, 127, 191, 191, 127, 0, 255, 191, 191, 0, 0, 0, 0, 0, 127, 191, 127, 0, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, +}; + + +unsigned char glui_img_spindown_1[] = { 12, 8, /* width, height */ +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 255, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 255, 0, 127, 191, 191, 191, 127, 0, 191, 191, 191, 191, 255, 0, 127, 191, 191, 127, 0, 0, 0, 191, 191, 191, 255, 0, 127, 191, 127, 0, 0, 0, 0, 0, 191, 191, 255, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 255, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 191, 255, +}; + + +unsigned char glui_img_spindown_dis[] = { 12, 8, /* width, height */ +255, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 255, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 64, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 64, 255, 191, 191, 191, 191, 127, 255, 191, 191, 191, 127, 64, 255, 191, 191, 191, 127, 127, 127, 255, 191, 191, 127, 64, 255, 191, 191, 127, 127, 127, 127, 127, 255, 191, 127, 64, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, +}; + + +unsigned char glui_img_spinup_0[] = { 12, 8, /* width, height */ +255, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 255, 191, 191, 0, 0, 0, 0, 0, 127, 191, 127, 0, 255, 191, 191, 191, 0, 0, 0, 127, 191, 191, 127, 0, 255, 191, 191, 191, 191, 0, 127, 191, 191, 191, 127, 0, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 0, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +}; + + +unsigned char glui_img_spinup_1[] = { 12, 8, /* width, height */ + 0, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 255, 0, 127, 191, 127, 0, 0, 0, 0, 0, 191, 191, 255, 0, 127, 191, 191, 127, 0, 0, 0, 191, 191, 191, 255, 0, 127, 191, 191, 191, 127, 0, 191, 191, 191, 191, 255, 0, 127, 191, 191, 191, 191, 191, 191, 191, 191, 191, 255, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 191, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, +}; + + +unsigned char glui_img_spinup_dis[] = { 12, 8, /* width, height */ +255, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 64, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 64, 255, 191, 191, 127, 127, 127, 127, 127, 255, 191, 127, 64, 255, 191, 191, 191, 127, 127, 127, 255, 191, 191, 127, 64, 255, 191, 191, 191, 191, 127, 255, 191, 191, 191, 127, 64, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 127, 64, 255, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +}; + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmaps.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmaps.cpp new file mode 100644 index 00000000..8bebf5d8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_bitmaps.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_bitmaps.cpp + +Draws the hardcoded images listed in glui_bitmap_img_data with OpenGL. + +FIXME: upload the images to a texture. This will allow them to be: + - Drawn with alpha blending + - Drawn at random sizes and angles onscreen + - Drawn much faster than with glDrawPixels + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" +#include + +/************ Image Bitmap arrays **********/ + +extern unsigned char glui_img_checkbox_0[]; +extern unsigned char glui_img_checkbox_1[]; +extern unsigned char glui_img_radiobutton_0[]; +extern unsigned char glui_img_radiobutton_1[]; +extern unsigned char glui_img_uparrow[]; +extern unsigned char glui_img_downarrow[]; +extern unsigned char glui_img_leftarrow[]; +extern unsigned char glui_img_rightarrow[]; +extern unsigned char glui_img_spinup_0[]; +extern unsigned char glui_img_spinup_1[]; +extern unsigned char glui_img_spindown_0[]; +extern unsigned char glui_img_spindown_1[]; +extern unsigned char glui_img_checkbox_0_dis[]; +extern unsigned char glui_img_checkbox_1_dis[]; +extern unsigned char glui_img_radiobutton_0_dis[]; +extern unsigned char glui_img_radiobutton_1_dis[]; +extern unsigned char glui_img_spinup_dis[]; +extern unsigned char glui_img_spindown_dis[]; +extern unsigned char glui_img_listbox_up[]; +extern unsigned char glui_img_listbox_down[]; +extern unsigned char glui_img_listbox_up_dis[]; + + +// These must be in the same order as the GLUI_STDBITMAP enums from glui.h! +unsigned char *bitmap_arrays[] = { + glui_img_checkbox_0, + glui_img_checkbox_1, + glui_img_radiobutton_0, + glui_img_radiobutton_1, + glui_img_uparrow, + glui_img_downarrow, + glui_img_leftarrow, + glui_img_rightarrow, + glui_img_spinup_0, + glui_img_spinup_1, + glui_img_spindown_0, + glui_img_spindown_1, + glui_img_checkbox_0_dis, + glui_img_checkbox_1_dis, + glui_img_radiobutton_0_dis, + glui_img_radiobutton_1_dis, + glui_img_spinup_dis, + glui_img_spindown_dis, + glui_img_listbox_up, + glui_img_listbox_down, + glui_img_listbox_up_dis, +}; + + +/************************************ GLUI_Bitmap::load_from_array() ********/ + +GLUI_Bitmap::GLUI_Bitmap() +: pixels(NULL), + w(0), + h(0) +{ +} + +GLUI_Bitmap::~GLUI_Bitmap() +{ + if (pixels) + { + free(pixels); + pixels = NULL; + } +} + +/* Create bitmap from greyscale byte array */ +void GLUI_Bitmap::init_grey(unsigned char *array) +{ + w = array[0]; h = array[1]; + pixels = (unsigned char *) malloc(w*h*3); + assert(pixels); + + for(int i = 0; i=0 && i=0 && i=0 && iadd_control( this ); +} + + +/****************************** GLUI_Button::mouse_down_handler() **********/ + +int GLUI_Button::mouse_down_handler( int local_x, int local_y ) +{ + int_val = 1; /** A button always in unpressed before here, so + now we invariably set it to 'depressed' **/ + + currently_inside = true; + redraw(); + + return false; +} + + +/****************************** GLUI_Button::mouse_up_handler() **********/ + +int GLUI_Button::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + set_int_val( 0 ); /** A button always turns off after you press it **/ + + currently_inside = false; + redraw(); + + if ( inside ) { + /*** Invoke the user's callback ***/ + execute_callback(); + } + + return false; +} + + +/****************************** GLUI_Button::mouse_held_down_handler() ******/ + +int GLUI_Button::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + if (new_inside != currently_inside) { + currently_inside = new_inside; + redraw(); + } + + return false; +} + + +/****************************** GLUI_Button::key_handler() **********/ + +int GLUI_Button::key_handler( unsigned char key,int modifiers ) +{ + return false; +} + +/********************************************** GLUI_Button::draw() **********/ + +void GLUI_Button::draw( int x, int y ) +{ + if (currently_inside) draw_pressed(); + else { + glui->draw_raised_box( 0, 0, w, h ); + draw_text( 0 ); + } +} + + +/************************************** GLUI_Button::draw_pressed() ******/ + +void GLUI_Button::draw_pressed( void ) +{ + glColor3f( 0.0, 0.0, 0.0 ); + + draw_text( 1 ); + + glBegin( GL_LINE_LOOP ); + glVertex2i( 0, 0 ); glVertex2i( w, 0 ); + glVertex2i( w, h ); glVertex2i( 0, h ); + glEnd(); + + glBegin( GL_LINE_LOOP ); + glVertex2i( 1, 1 ); glVertex2i( w-1, 1 ); + glVertex2i( w-1, h-1 ); glVertex2i( 1, h-1 ); + glEnd(); +} + + +/**************************************** GLUI_Button::draw_text() **********/ + +void GLUI_Button::draw_text( int sunken ) +{ + int string_width; + + glColor3ub( glui->bkgd_color.r, glui->bkgd_color.g, glui->bkgd_color.b ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( 2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i( 2, h-2 ); + glEnd(); + + glColor3ub( 0,0,0 ); + + string_width = _glutBitmapWidthString( glui->font, + this->name.c_str() ); + if ( NOT sunken ) { + draw_name( MAX((w-string_width),0)/2, 13); + } + else { + draw_name( MAX((w-string_width),0)/2 + 1, 13 + 1); + } + + if ( active ) { + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + + glColor3f( 0., 0., 0. ); + + glBegin( GL_LINE_LOOP ); + glVertex2i( 3, 3 ); glVertex2i( w-3, 3 ); + glVertex2i( w-3, h-3 ); glVertex2i( 3, h-3 ); + glEnd(); + + glDisable( GL_LINE_STIPPLE ); + } +} + + +/************************************** GLUI_Button::update_size() **********/ + +void GLUI_Button::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = string_width( name ); + + if ( w < text_size + 16 ) + w = text_size + 16 ; +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_checkbox.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_checkbox.cpp new file mode 100644 index 00000000..3bf3984d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_checkbox.cpp @@ -0,0 +1,188 @@ + +/**************************************************************************** + + GLUI User Interface Toolkit (LGPL) + --------------------------- + + glui_checkbox - GLUI_Checkbox control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/****************************** GLUI_Checkbox::GLUI_Checkbox() **********/ + +GLUI_Checkbox::GLUI_Checkbox( GLUI_Node *parent, + const char *name, int *value_ptr, + int id, + GLUI_CB cb ) +{ + common_init(); + + set_ptr_val( value_ptr ); + set_name( name ); + user_id = id; + callback = cb; + + parent->add_control( this ); + + init_live(); +} + +/****************************** GLUI_Checkbox::mouse_down_handler() **********/ + +int GLUI_Checkbox::mouse_down_handler( int local_x, int local_y ) +{ + orig_value = int_val; + int_val = !int_val; + + currently_inside = true; + redraw(); + + return false; +} + + +/****************************** GLUI_Checkbox::mouse_up_handler() **********/ + +int GLUI_Checkbox::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + if ( NOT inside ) { /* undo effect on value */ + int_val = orig_value; + } + else { + set_int_val( int_val ); + + /*** Invoke the callback ***/ + execute_callback(); + } + + return false; +} + + +/****************************** GLUI_Checkbox::mouse_held_down_handler() ******/ + +int GLUI_Checkbox::mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + /********** Toggle checked and unchecked bitmap if we're entering or + leaving the checkbox area **********/ + if ( inside != currently_inside ) { + int_val = !int_val; + currently_inside = inside; + redraw(); + } + + return false; +} + + +/****************************** GLUI_Checkbox::key_handler() **********/ + +int GLUI_Checkbox::key_handler( unsigned char key,int modifiers ) +{ + return false; +} + + +/****************************** GLUI_Checkbox::draw() **********/ + +void GLUI_Checkbox::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( int_val != 0 ) { + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_CHECKBOX_ON, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_CHECKBOX_ON_DIS, 0, 0 ); + } + else { + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_CHECKBOX_OFF, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_CHECKBOX_OFF_DIS, 0, 0 ); + } + + draw_active_area(); + + draw_name( text_x_offset, 10); +} + +/**************************** GLUI_Checkbox::draw_active_area() **************/ + +void GLUI_Checkbox::draw_active_area( void ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int text_width, left, right; + + text_width = _glutBitmapWidthString( glui->font, name.c_str() ); + left = text_x_offset-3; + right = left + 7 + text_width; + + if ( active ) { + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + glColor3f( 0., 0., 0. ); + } else { + glColor3ub( glui->bkgd_color.r, glui->bkgd_color.g, glui->bkgd_color.b ); + } + + glBegin( GL_LINE_LOOP ); + glVertex2i(left,0); glVertex2i( right,0); + glVertex2i(right,h+1); glVertex2i( left,h+1); + glEnd(); + + glDisable( GL_LINE_STIPPLE ); +} + + +/************************************ GLUI_Checkbox::update_size() **********/ + +void GLUI_Checkbox::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = _glutBitmapWidthString( glui->font, name.c_str() ); + + /* if ( w < text_x_offset + text_size + 6 ) */ + w = text_x_offset + text_size + 6 ; +} + + +/********************************* GLUI_Checkbox::set_int_val() **************/ + +void GLUI_Checkbox::set_int_val( int new_val ) +{ + int_val = new_val; + + /*** Update the variable we're (possibly) pointing to ***/ + output_live(true); + redraw(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_column.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_column.cpp new file mode 100644 index 00000000..172d3c1e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_column.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** + GLUI User Interface Toolkit + --------------------------- + + glui_column.cpp - GLUI_Column control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/******************************** GLUI_Column::GLUI_Column() ************/ + +GLUI_Column::GLUI_Column( GLUI_Node *parent, int draw_bar ) +{ + common_init(); + int_val = draw_bar; /* Whether to draw vertical bar or not */ + + parent->add_control( this ); +} + +/**************************************** GLUI_Column::draw() ************/ + +void GLUI_Column::draw( int x, int y ) +{ + int panel_x, panel_y, panel_w, panel_h, panel_x_off, panel_y_off; + int y_diff; + + if ( int_val == 1 ) { /* Draw a vertical bar */ + GLUI_DRAWINGSENTINAL_IDIOM + if ( parent() != NULL ) { + get_this_column_dims(&panel_x, &panel_y, &panel_w, &panel_h, + &panel_x_off, &panel_y_off); + + y_diff = y_abs - panel_y; + + if ( 0 ) { + glLineWidth(1.0); + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( -GLUI_XOFF+1, -y_diff + GLUI_SEPARATOR_HEIGHT/2 ); + glVertex2i( -GLUI_XOFF+1, -y_diff + panel_h - GLUI_SEPARATOR_HEIGHT/2); + + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i( -GLUI_XOFF+2, -y_diff + GLUI_SEPARATOR_HEIGHT/2 ); + glVertex2i( -GLUI_XOFF+2, -y_diff + panel_h - GLUI_SEPARATOR_HEIGHT/2); + glEnd(); + } + else { + glLineWidth(1.0); + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( -2, 0 ); + glVertex2i( -2, h ); + /*glVertex2i( 0, -y_diff + GLUI_SEPARATOR_HEIGHT/2 ); */ + /*glVertex2i( 0, -y_diff + panel_h - GLUI_SEPARATOR_HEIGHT/2); */ + + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i( -1, 0 ); + glVertex2i( -1, h ); + /*glVertex2i( 1, -y_diff + GLUI_SEPARATOR_HEIGHT/2 ); */ + /*glVertex2i( 1, -y_diff + panel_h - GLUI_SEPARATOR_HEIGHT/2); */ + glEnd(); + } + } + } +} + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_commandline.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_commandline.cpp new file mode 100644 index 00000000..9f823d99 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_commandline.cpp @@ -0,0 +1,197 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_commandline.cpp - GLUI_CommandLine control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher, 2005 William Baxter + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA + + This program is -not- in the public domain. + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" + +/****************************** GLUI_CommandLine::GLUI_CommandLine() **********/ +GLUI_CommandLine::GLUI_CommandLine( GLUI_Node *parent, const char *name, + void *data, int id, GLUI_CB cb ) +{ + common_init(); + set_name( name ); + + data_type = GLUI_EDITTEXT_TEXT; + ptr_val = data; + user_id = id; + callback = cb; + + live_type = GLUI_LIVE_TEXT; + + parent->add_control( this ); + + init_live(); +} + +/****************************** GLUI_CommandLine::key_handler() **********/ + +int GLUI_CommandLine::key_handler( unsigned char key,int modifiers ) +{ + int ret; + + if ( NOT glui ) + return false; + + if ( debug ) + dump( stdout, "-> CMD_TEXT KEY HANDLER" ); + + if ( key == 13 ) { /* RETURN */ + commit_flag = true; + } + + ret = Super::key_handler( key, modifiers ); + + if ( debug ) + dump( stdout, "<- CMD_TEXT KEY HANDLER" ); + + return ret; +} + + +/****************************** GLUI_CommandLine::deactivate() **********/ + +void GLUI_CommandLine::deactivate( void ) +{ + // if the commit_flag is set, add the current command to + // history and call deactivate as normal + + // Trick deactivate into calling callback if and only if commit_flag set. + // A bit subtle, but deactivate checks that orig_text and text + // are the same to decide whether or not to call the callback. + // Force them to be different for commit, and the same for no commit. + if (commit_flag) { + add_to_history(text.c_str()); + orig_text = ""; + Super::deactivate( ); + set_text( "" ); + commit_flag = false; + } + else { + orig_text = text; + } +} + +/**************************** GLUI_CommandLine::special_handler() **********/ + +int GLUI_CommandLine::special_handler( int key,int modifiers ) +{ + if ( NOT glui ) + return false; + + if ( debug ) + printf( "CMD_TEXT SPECIAL:%d - mod:%d subs:%d/%d ins:%d sel:%d/%d\n", + key, modifiers, substring_start, substring_end,insertion_pt, + sel_start, sel_end ); + + if ( key == GLUT_KEY_UP ) // PREVIOUS HISTORY + { + scroll_history(-1); + } + else if ( key == GLUT_KEY_DOWN ) // NEXT HISTORY + { + scroll_history(+1); + } + else { + return Super::special_handler( key, modifiers ); + } + return false; +} + + + +/**************************** GLUI_CommandLine::scroll_history() ********/ + +void GLUI_CommandLine::scroll_history( int direction ) +{ + recall_history(curr_hist + direction); +} + +/**************************** GLUI_CommandLine::recall_history() ********/ + +void GLUI_CommandLine::recall_history( int hist_num ) +{ + if (hist_num < oldest_hist OR + hist_num > newest_hist OR + hist_num == curr_hist) + return; + + // Commit the current text first before we blow it away! + if (curr_hist == newest_hist) { + get_history_str(newest_hist) = text; + } + + curr_hist = hist_num; + set_text(get_history_str(curr_hist)); + sel_end = sel_start = insertion_pt = (int)text.length(); + update_and_draw_text(); +} + +/**************************** GLUI_CommandLine::add_to_history() ********/ + +void GLUI_CommandLine::add_to_history( const char *cmd ) +{ + if (cmd[0]=='\0') return; // don't add if it's empty + + curr_hist = newest_hist; + get_history_str(newest_hist) = text; + + newest_hist = ++curr_hist; + if ( newest_hist >= HIST_SIZE ) + { + // bump oldest off the list + hist_list.erase(hist_list.begin()); + hist_list.push_back(""); + + oldest_hist++; + } +} + +/**************************** GLUI_CommandLine::reset_history() ********/ + +void GLUI_CommandLine::reset_history( void ) +{ + oldest_hist = newest_hist = curr_hist = 0; +} + + + +/*************************************** GLUI_CommandLine::dump() **************/ + +void GLUI_CommandLine::dump( FILE *out, const char *name ) +{ + fprintf( out, + "%s (commandline@%p): ins_pt:%d subs:%d/%d sel:%d/%d len:%d\n", + name, this, + insertion_pt, substring_start, substring_end, sel_start, sel_end, + (int)text.length()); +} + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_control.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_control.cpp new file mode 100644 index 00000000..056916f3 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_control.cpp @@ -0,0 +1,1203 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_control.cpp - top-level GLUI_Control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +int _glui_draw_border_only = 0; + +/*************************** Drawing Utility routines *********************/ + +/* Redraw this control. */ +void GLUI_Control::redraw(void) { + if (glui==NULL || hidden) return; + if (glui->should_redraw_now(this)) + translate_and_draw_front(); +} + +/** Redraw everybody in our window. */ +void GLUI_Control::redraw_window(void) { + if (glui==NULL || hidden) return; + if ( glui->get_glut_window_id() == -1 ) return; + int orig = set_to_glut_window(); + glutPostRedisplay(); + restore_window(orig); +} + + + +/* GLUI_Control::translate_and_draw_front() ********/ + +void GLUI_Control::translate_and_draw_front() +{ + GLUI_DRAWINGSENTINAL_IDIOM + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + translate_to_origin(); + draw(0,0); + glPopMatrix(); +} + + +/********** GLUI_Control::set_to_bkgd_color() ********/ + +void GLUI_Control::set_to_bkgd_color( void ) +{ + if ( NOT glui ) + return; + + glColor3ub( glui->bkgd_color.r, glui->bkgd_color.g, glui->bkgd_color.b ); +} + +/******** GLUI_Control::draw_box_inwards_outline() ********/ + +void GLUI_Control::draw_box_inwards_outline( int x_min, int x_max, int y_min, int y_max ) +{ + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( x_min, y_min ); glVertex2i( x_max, y_min ); + glVertex2i( x_min, y_min ); glVertex2i( x_min, y_max ); + + glColor3f( 1., 1., 1. ); + glVertex2i( x_min, y_max ); glVertex2i( x_max, y_max ); + glVertex2i( x_max, y_max ); glVertex2i( x_max, y_min ); + + if ( enabled ) + glColor3f( 0., 0., 0. ); + else + glColor3f( .25, .25, .25 ); + + glVertex2i( x_min+1, y_min+1 ); glVertex2i( x_max-1, y_min+1 ); + glVertex2i( x_min+1, y_min+1 ); glVertex2i( x_min+1, y_max-1 ); + + glColor3f( .75, .75, .75 ); + glVertex2i( x_min+1, y_max-1 ); glVertex2i( x_max-1, y_max-1 ); + glVertex2i( x_max-1, y_max-1 ); glVertex2i( x_max-1, y_min+1 ); + glEnd(); +} + + +/******* GLUI_Control::draw_box() **********/ + +void GLUI_Control::draw_box( int x_min, int x_max, int y_min, int y_max, float r, float g, float b) +{ + if ( r == 1.0 AND g == 1.0 AND b == 1.0 AND NOT enabled AND glui ) { + draw_bkgd_box( x_min, x_max, y_min, y_max ); + return; + } + + glColor3f( r, g, b ); + glBegin( GL_QUADS ); + glVertex2i( x_min, y_min ); glVertex2i( x_max, y_min ); + glVertex2i( x_max, y_max ); glVertex2i( x_min, y_max ); + glEnd(); +} + + +/******* GLUI_Control::draw_bkgd_box() **********/ + +void GLUI_Control::draw_bkgd_box( int x_min, int x_max, int y_min, int y_max ) +{ + set_to_bkgd_color(); + + glBegin( GL_QUADS ); + glVertex2i( x_min, y_min ); glVertex2i( x_max, y_min ); + glVertex2i( x_max, y_max ); glVertex2i( x_min, y_max ); + glEnd(); +} + + +/**** GLUI_Control::draw_active_area() ********/ + +void GLUI_Control::draw_active_box( int x_min, int x_max, int y_min, int y_max ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( active ) { + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + glColor3f( 0., 0., 0. ); + } else { + set_to_bkgd_color(); + } + + glBegin( GL_LINE_LOOP ); + glVertex2i(x_min, y_min); glVertex2i( x_max, y_min ); + glVertex2i(x_max, y_max); glVertex2i( x_min, y_max ); + glEnd(); + + glDisable( GL_LINE_STIPPLE ); +} + + +/**** GLUI_Control::draw_emboss_box() ********/ + +void GLUI_Control::draw_emboss_box(int x_min,int x_max,int y_min,int y_max) +{ + glLineWidth( 1.0 ); + glColor3f( 1.0, 1.0, 1.0 ); + + glBegin( GL_LINE_LOOP ); + glVertex2i( x_min, y_min ); glVertex2i( x_max, y_min ); + glVertex2i( x_max, y_max ); glVertex2i( x_min, y_max ); + glEnd(); + + glBegin( GL_LINE_LOOP ); + glVertex2i( x_min+1, y_min+1 ); glVertex2i( x_max-1, y_min+1 ); + glVertex2i( x_max-1, y_max-1 ); glVertex2i( x_min+1, y_max-1 ); + glEnd(); + + glColor3f( .5, .5, .5 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( x_min, y_min ); + glVertex2i( x_max-1, y_min ); + glVertex2i( x_max-1, y_max-1 ); + glVertex2i( x_min, y_max-1 ); + glEnd(); +} + + + +/******* GLUT_Control::draw_recursive() **********/ + +void GLUI_Control::draw_recursive( int x, int y ) +{ + GLUI_Control *node; + + /* printf( "%s %d\n", this->name.c_str(), this->hidden );*/ + if ( NOT can_draw() ) + return; + + /*if ( 1 ) { -- Debugging to check control width + glColor3f( 1.0, 0.0, 0.0 ); + glBegin( GL_LINES ); + glVertex2i( x_abs, y_abs );00 + glVertex2i( x_abs+w, y_abs ); + + glEnd(); + }*/ + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + + glTranslatef( (float) this->x_abs + .5, + (float) this->y_abs + .5, + 0.0 ); + + if ( NOT _glui_draw_border_only ) { + if ( NOT strcmp( name.c_str(), "Rollout" ) ) { + } + + this->draw( this->x_off, this->y_off_top ); + } + else + { + if ( dynamic_cast(this) ) { + /* printf( "%s w/h: %d/%d\n", (char*) name, w, h ); */ + /*w = 2; */ + } + + /* The following draws the area of each control */ + glColor3f( 1.0, 0.0, 0.0 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( 0, 0 ); glVertex2i( w, 0 ); + glVertex2i( w, h ); glVertex2i( 0, h ); + glEnd(); + } + glPopMatrix(); + + node = (GLUI_Control*) first_child(); + while( node ) { + node->draw_recursive( node->x_abs, node->y_abs ); + node = (GLUI_Control*) node->next(); + } +} + + +/****** GLUI_Control::set_to_glut_window() *********/ +/* Sets the current window to the glut window associated with this control */ + +int GLUI_Control::set_to_glut_window() +{ + int orig_window; + + if ( NOT glui) + return 1; + + orig_window = glutGetWindow(); + + glutSetWindow( glui->get_glut_window_id()); + + return orig_window; +} + + +/********** GLUI_Control::restore_window() *********/ + +void GLUI_Control::restore_window(int orig) +{ + if ( orig > 0 ) + glutSetWindow( orig ); +} + + + +/****************************** Text ***************************/ + +/*************** GLUI_Control::set_font() **********/ + +void GLUI_Control::set_font(void *new_font) +{ + font = new_font; + redraw(); +} + + +/********** GLUI_Control::draw_string() ************/ + +void GLUI_Control::draw_string( const char *text ) +{ + _glutBitmapString( get_font(), text ); +} + + +/**************** GLUI_Control::draw_char() ********/ + +void GLUI_Control::draw_char(char c) +{ + glutBitmapCharacter( get_font(), c ); +} + + +/*********** GLUI_Control::string_width() **********/ + +int GLUI_Control::string_width(const char *text) +{ + return _glutBitmapWidthString( get_font(), text ); +} + + +/************* GLUI_Control::char_width() **********/ + +int GLUI_Control::char_width(char c) +{ /* Hash table for faster character width lookups - JVK + Speeds up the textbox a little bit. + */ + int hash_index = c % CHAR_WIDTH_HASH_SIZE; + if (char_widths[hash_index][0] != c) { + char_widths[hash_index][0] = c; + char_widths[hash_index][1] = glutBitmapWidth( get_font(), c ); + } + return char_widths[hash_index][1]; +} + + +/*************** GLUI_Control::get_font() **********/ + +void *GLUI_Control::get_font( void ) +{ + /*** Does this control have its own font? ***/ + if ( this->font != NULL ) + return this->font; + + /*** Does the parent glui have a font? ***/ + if ( glui ) + return glui->font; + + /*** Return the default font ***/ + return GLUT_BITMAP_HELVETICA_12; +} + + +/************* GLUI_Control::draw_name() ***********/ +/* This draws the name of the control as either black (if enabled), or */ +/* embossed if disabled. */ + +void GLUI_Control::draw_name(int x, int y) +{ + if ( NOT can_draw() ) + return; + + if ( enabled ) + { + set_to_bkgd_color(); + glRasterPos2i(x+1, y+1); + draw_string(name); + glColor3b( 0, 0, 0 ); + glRasterPos2i(x, y); + draw_string(name); + } + else + { /* Control is disabled - emboss the string */ + glColor3f( 1.0f, 1.0f, 1.0f ); + glRasterPos2i(x+1, y+1); + draw_string(name); + glColor3f( .4f, .4f, .4f ); + glRasterPos2i(x, y); + draw_string(name); + } +} + + +/**************************** Layout and Packing *********************/ + +/****** GLUI_Control::align() **************/ + +void GLUI_Control::align() +{ + int col_x, col_y, col_w, col_h, col_x_off, col_y_off; + int orig_x_abs; + + orig_x_abs = x_abs; + + /* Fix alignment bug relating to columns */ + /*return; */ + + if ( NOT parent() ) + return; /* Clearly this shouldn't happen, though */ + + get_this_column_dims(&col_x, &col_y, &col_w, &col_h, + &col_x_off, &col_y_off); + + if ( dynamic_cast(this) ) { + /* if ( this->prev() != NULL ) { + ((GLUI_Control*)prev())->get_this_column_dims(&col_x, &col_y, &col_w, &col_h, + &col_x_off, &col_y_off); + + x_abs = col_x + col_w; + } + else { + x_abs = ((GLUI_Control*)parent())->x_abs; + } + */ + return; + } + + if ( alignment == GLUI_ALIGN_LEFT ) { + x_abs = col_x + col_x_off; + } + else if ( alignment == GLUI_ALIGN_RIGHT ) { + x_abs = col_x + col_w - col_x_off - this->w; + } + else if ( alignment == GLUI_ALIGN_CENTER ) { + x_abs = col_x + (col_w - this->w) / 2; + } + + if ( this->is_container ) { + /*** Shift all child columns ***/ + int delta = x_abs - orig_x_abs; + + GLUI_Control *node; + + node = (GLUI_Control*) this->first_child(); + while( node != NULL ) { + if ( dynamic_cast(node) ) { + node->x_abs += delta; + } + + node = (GLUI_Control*) node->next(); + } + } + +} + + +/************** GLUI_Control::pack() ************/ +/* Recalculate positions and offsets */ + +void GLUI_Control::pack_old(int x, int y) +{ + GLUI_Control *node; + int max_w, curr_y, curr_x, max_y; + int x_in = x, y_in =y; + int x_margin, y_margin_top, y_margin_bot; + int y_top_column; + int column_x; + GLUI_Column *curr_column = NULL; + this->update_size(); + x_margin = this->x_off; + y_margin_top = this->y_off_top; + y_margin_bot = this->y_off_bot; + this->x_abs = x_in; + this->y_abs = y_in; + max_w = -1; + max_y = -1; + curr_x = this->x_abs + x_margin; + curr_y = this->y_abs + y_margin_top; + /*** Record start of this set of columns ***/ + y_top_column = curr_y; + column_x = 0; + if ( this == glui->main_panel ) { + x=x; + } + /*** Iterate over children, packing them first ***/ + node = (GLUI_Control*) this->first_child(); + while( node != NULL ) { + if ( dynamic_cast(node) && !node->collapsible) { + /* Pad some space above fixed size panels */ + curr_y += GLUI_ITEMSPACING; + } + else if ( dynamic_cast(node)) { + curr_column = (GLUI_Column*) node; + if ( 1 ) { + column_x += max_w + 2 * x_margin; + curr_x += max_w + 2 * x_margin; + } + else { + column_x += max_w + 0 * x_margin; + curr_x += max_w + 0 * x_margin; + } + /*node->pack( curr_x, curr_y ); */ + node->x_abs = curr_x; + node->y_abs = y_top_column; + node->w = 2; + node->h = curr_y - y_top_column; + curr_x += x_margin * 3 + 40; + curr_y = y_top_column; + max_w = 0; + node = (GLUI_Control*) node->next(); + continue; + } + node->pack( curr_x, curr_y ); + if ( dynamic_cast(node) && !node->collapsible) + /* Pad some space below fixed size panels */ + curr_y += GLUI_ITEMSPACING; + curr_y += node->h; + if ( node->w > max_w ) { + max_w = node->w; + if ( curr_column != NULL ) + curr_column->w = max_w; + } + node = (GLUI_Control*) node->next(); + if ( node ) { + curr_y += GLUI_ITEMSPACING; + } + if ( curr_y > max_y ) + max_y = curr_y; + } + if ( this->is_container ) { + max_y += y_margin_bot; /*** Add bottom border inside box */ + if ( this->first_child() ) { + if ( dynamic_cast(this) ) { + /** We don't want the rollout to shrink in width when it's + closed **/ + this->w = MAX(this->w, column_x + max_w + 2 * x_margin ); + } + else { + this->w = column_x + max_w + 2 * x_margin; + } + this->h = (max_y - y_in); + } + else { /* An empty container, so just assign default w & h */ + this->w = GLUI_DEFAULT_CONTROL_WIDTH; + this->h = GLUI_DEFAULT_CONTROL_HEIGHT; + } + /** Expand panel if necessary (e.g., to include all the text in + a panel label) **/ + this->update_size(); + } +} + +/*** GLUI_Control::get_this_column_dims() **********/ +/* Gets the x,y,w,h,and x/y offsets of the column to which a control belongs */ + +void GLUI_Control::get_this_column_dims( int *col_x, int *col_y, + int *col_w, int *col_h, + int *col_x_off, int *col_y_off ) +{ + GLUI_Control *node, *parent_ptr; + int parent_h, parent_y_abs; + + parent_ptr = (GLUI_Control*) parent(); + + if ( parent_ptr==NULL ) + return; + + parent_h = parent_ptr->h; + parent_y_abs = parent_ptr->y_abs; + + if ( dynamic_cast(parent_ptr) AND + parent_ptr->int_val == GLUI_PANEL_EMBOSSED AND + parent_ptr->name != "" ) { + parent_h -= GLUI_PANEL_EMBOSS_TOP; + parent_y_abs += GLUI_PANEL_EMBOSS_TOP; + } + + if ( 0 ) { + GLUI_Node *first, *last, *curr; + + /** Look for first control in this column **/ + first = this; + while (first->prev() AND !dynamic_cast(first->prev()) ) + first = first->prev(); + + /** Look for last control in this column **/ + last = this; + while ( last->next() AND !dynamic_cast(first->next()) ) + last = last->next(); + + curr = first; + int max_w = -1; + do { + if ( ((GLUI_Control*)curr)->w > max_w ) + max_w = ((GLUI_Control*)curr)->w; + + if ( curr == last ) + break; + + curr = curr->next(); + } while( curr != NULL ); + + *col_x = ((GLUI_Control*)first)->x_abs; + *col_y = ((GLUI_Control*)first)->y_abs; + *col_w = max_w; + if ( parent() ) { + *col_h = ((GLUI_Control*)parent())->h; + *col_x_off = ((GLUI_Control*)parent())->x_off; + } + else { + *col_h = 10; + *col_x_off = 0; + } + *col_y_off = 0; + + return; + } + + if ( 1 ) { /* IS THIS WRONG? */ + /*** Look for preceding column ***/ + node = (GLUI_Control*) this->prev(); + while( node ) { + if ( dynamic_cast(node) ) { + *col_x = node->x_abs; + *col_y = parent_y_abs; + *col_w = node->w; + *col_h = parent_h; + *col_x_off = node->x_off; + *col_y_off = 0; + + return; + } + + node = (GLUI_Control*) node->prev(); + } + + /*** Nope, Look for next column ***/ + node = (GLUI_Control*) this->next(); + while( node ) { + if ( dynamic_cast(node) ) { + *col_x = parent_ptr->x_abs; + *col_y = parent_y_abs; + *col_w = node->x_abs - parent_ptr->x_abs; + *col_h = parent_h; + *col_x_off = node->x_off; + *col_y_off = 0; + + return; + } + + node = (GLUI_Control*) node->next(); + } + + /*** This is single-column panel, so return panel dims ***/ + *col_x = parent_ptr->x_abs; + *col_y = parent_y_abs; + *col_w = parent_ptr->w; + *col_h = parent_h; + *col_x_off = parent_ptr->x_off; + *col_y_off = 0; + } +} + + +void GLUI_Control::pack( int x, int y ) +{ + GLUI_Control *node; + int max_w, curr_y, curr_x, max_y; + int x_in = x, y_in =y; + int x_margin, y_margin_top, y_margin_bot; + int y_top_column; + int column_x; + GLUI_Column *curr_column = NULL; + + this->update_size(); + + x_margin = this->x_off; + y_margin_top = this->y_off_top; + y_margin_bot = this->y_off_bot; + + this->x_abs = x_in; + this->y_abs = y_in; + + max_w = 0; + max_y = 0; + curr_x = this->x_abs + x_margin; + curr_y = this->y_abs + y_margin_top; + + /*** Record start of this set of columns ***/ + + y_top_column = curr_y; + column_x = curr_x; + + /*** Iterate over children, packing them first ***/ + + node = (GLUI_Control*) this->first_child(); + while( node != NULL ) { + if ( dynamic_cast(node) && !node->collapsible) { + /* Pad some space above fixed-size panels */ + curr_y += GLUI_ITEMSPACING; + } + else if ( dynamic_cast(node) ) { + curr_column = (GLUI_Column*) node; + curr_x += max_w + 1 * x_margin; + column_x = curr_x; + + node->x_abs = curr_x; + node->y_abs = y_top_column; + node->w = 2; + node->h = curr_y - y_top_column; + + curr_x += x_margin * 1; + curr_y = y_top_column; + max_w = 0; + + node = (GLUI_Control*) node->next(); + continue; + } + + node->pack( curr_x, curr_y ); + + if ( dynamic_cast(node) && !node->collapsible) + /* Pad some space below fixed-size panels */ + curr_y += GLUI_ITEMSPACING; + + curr_y += node->h; + + if ( node->w > max_w ) { + max_w = node->w; + if ( curr_column != NULL ) + curr_column->w = max_w + x_margin; + } + + if ( curr_y > max_y ) { + max_y = curr_y; + if ( curr_column != NULL ) + curr_column->h = max_y - y_top_column; + } + + node = (GLUI_Control*) node->next(); + + if ( node ) { + curr_y += GLUI_ITEMSPACING; + } + + } + + if ( this->is_container ) { + max_y += y_margin_bot; /*** Add bottom border inside box */ + + if ( this->first_child() ) { + this->w = column_x + max_w + 2 * x_margin - x_in; + this->h = (max_y - y_in); + } + else { /* An empty container, so just assign default w & h */ + if ( !dynamic_cast(this) && + !dynamic_cast(this) ) { + this->w = GLUI_DEFAULT_CONTROL_WIDTH; + this->h = GLUI_DEFAULT_CONTROL_HEIGHT; + } + } + + /** Expand panel if necessary (e.g., to include all the text in + a panel label) **/ + this->update_size(); + + + /*** Now we step through the GLUI_Columns, setting the 'h' ***/ + node = (GLUI_Control*) this->first_child(); + while( node != NULL ) { + if ( dynamic_cast(node) ) { + node->h = this->h - y_margin_bot - y_margin_top; + } + + node = (GLUI_Control*) node->next(); + } + } +} + + + +/******************************** Live Variables **************************/ +/*********** GLUI_Control::sync_live() ************/ +/* Reads live variable and sets control to its current value */ +/* This function is recursive, and operates on control's children */ + +void GLUI_Control::sync_live(int recurse, int draw_it) +{ + GLUI_Node *node; + int sync_it=true; + int i; + float *fp; + bool changed = false; + + /*** If this is currently active control, and mouse button is down, + don't sync ***/ + if ( glui ) + { + if ( this == glui->active_control AND glui->mouse_button_down ) + sync_it = false; + + /*** Actually, just disable syncing if button is down ***/ + /*** Nope, go ahead and sync if mouse is down - this allows syncing in + callbacks ***/ + if ( 0 ) { /* THIS CODE BELOW SHOULD NOT BE EXECUTED */ + if ( glui->mouse_button_down ) { + /* printf( "Can't sync\n" ); */ + return; + } + } + } + + /*** If this control has a live variable, we check its current value + against the stored value in the control ***/ + + if ( ptr_val != NULL ) { + if ( live_type == GLUI_LIVE_NONE OR NOT sync_it ) { + } + else if ( live_type == GLUI_LIVE_INT ) { + if ( *((int*)ptr_val) != last_live_int ) { + set_int_val( *((int*)ptr_val) ); + last_live_int = *((int*)ptr_val); + changed = true; + } + } + else if ( live_type == GLUI_LIVE_FLOAT ) { + if ( *((float*)ptr_val) != last_live_float ) { + set_float_val( *((float*)ptr_val) ); + last_live_float = *((float*)ptr_val); + changed = true; + } + } + else if ( live_type == GLUI_LIVE_TEXT ) { + if ( last_live_text.compare((const char*)ptr_val) != 0 ) { + set_text( (char*) ptr_val ); + last_live_text = (const char*)ptr_val; + changed = true; + } + } + else if ( live_type == GLUI_LIVE_STRING ) { + if ( last_live_text.compare(((std::string*) ptr_val)->c_str()) != 0 ) { + set_text( ((std::string*) ptr_val)->c_str()); + last_live_text = *((std::string*) ptr_val); + changed = true; + } + } + else if ( live_type == GLUI_LIVE_FLOAT_ARRAY ) { + /*** Step through the arrays, and see if they're the same ***/ + + fp = (float*) ptr_val; + for ( i=0; ifirst_child(); + while( node ) { + ((GLUI_Control*) node)->sync_live(true, true); + node = node->next(); + } + + if ( collapsible == true AND is_open == false ) { + /** Here we have a collapsed control (e.g., a rollout that is closed **/ + /** We need to go in and sync all the collapsed controls inside **/ + + node = this->collapsed_node.first_child(); + while( node ) { + ((GLUI_Control*) node)->sync_live(true, false); + node = node->next(); + } + } + } +} + + +/********** GLUI_Control::output_live() ************/ +/* Writes current value of control to live variable. */ + +void GLUI_Control::output_live(int update_main_gfx) +{ + int i; + float *fp; + + if ( ptr_val == NULL ) + return; + + if ( NOT live_inited ) + return; + + if ( live_type == GLUI_LIVE_NONE ) { + } + else if ( live_type == GLUI_LIVE_INT ) { + *((int*)ptr_val) = int_val; + last_live_int = int_val; + } + else if ( live_type == GLUI_LIVE_FLOAT ) { + *((float*)ptr_val) = float_val; + last_live_float = float_val; + } + else if ( live_type == GLUI_LIVE_TEXT ) { + strncpy( (char*) ptr_val, text.c_str(), text.length()+1); + last_live_text = text; + } + else if ( live_type == GLUI_LIVE_STRING ) { + (*(std::string*)ptr_val)= text.c_str(); + last_live_text = text; + } + else if ( live_type == GLUI_LIVE_FLOAT_ARRAY ) { + fp = (float*) ptr_val; + + for( i=0; iglui != NULL ) { + this->glui->post_update_main_gfx(); + } +} + + +/****** GLUI_Control::execute_callback() **********/ + +void GLUI_Control::execute_callback() +{ + int old_window; + + old_window = glutGetWindow(); + + if ( glui AND glui->main_gfx_window_id != -1 ) + glutSetWindow( glui->main_gfx_window_id ); + + this->callback( this ); +// if ( this->callback ) +// this->callback( this->user_id ); + + glutSetWindow( old_window ); +} + + +/************** GLUI_Control::init_live() **********/ +/* Reads in value of a live variable. Called once, when ctrl is created */ + +void GLUI_Control::init_live() +{ + int i; + float *fp; + + if ( ptr_val == NULL ) + return; + + if ( live_type == GLUI_LIVE_NONE ) { + } + else if ( live_type == GLUI_LIVE_INT ) { + set_int_val( *((int*)ptr_val) ); + last_live_int = *((int*)ptr_val); + } + else if ( live_type == GLUI_LIVE_FLOAT ) { + set_float_val( *((float*)ptr_val) ); + last_live_float = *((float*)ptr_val); + } + else if ( live_type == GLUI_LIVE_TEXT ) { + set_text( (const char*) ptr_val ); + last_live_text = (const char*) ptr_val; + } + else if ( live_type == GLUI_LIVE_STRING ) { + set_text( ((std::string*) ptr_val)->c_str() ); + last_live_text = ((std::string*) ptr_val)->c_str(); + } + else if ( live_type == GLUI_LIVE_FLOAT_ARRAY ) { + set_float_array_val( (float*) ptr_val ); + + fp = (float*) ptr_val; + + for( i=0; ienable(); + node = (GLUI_Control*) node->next(); + } +} + + +/***** GLUI_Control::disable() ****************/ + +void GLUI_Control::disable() +{ + GLUI_Control *node; + + enabled = false; + + if ( NOT glui ) + return; + + if ( glui->active_control == this ) + glui->deactivate_current_control(); + redraw(); + + /*** Now recursively disable all buttons below it ***/ + node = (GLUI_Control*) first_child(); + while(node) { + node->disable(); + node = (GLUI_Control*) node->next(); + } +} + +/******* GLUI_Control::set_w() **************/ + +void GLUI_Control::set_w(int new_w) +{ + w = new_w; + update_size(); /* Make sure control is big enough to fit text */ + if (glui) glui->refresh(); +} + + +/**** GLUI_Control::set_h() **************/ + +void GLUI_Control::set_h(int new_h) +{ + h = new_h; + update_size(); /* Make sure control is big enough to fit text */ + if (glui) glui->refresh(); +} + + +/***** GLUI_Control::set_alignment() ******/ + +void GLUI_Control::set_alignment(int new_align) +{ + alignment = new_align; + + if ( glui ) + { + glui->align_controls(this); + redraw_window(); + } +} + + +/***** GLUI_Control::needs_idle() *********/ +/* This method gets overloaded by specific classes, e.g. Spinner. */ +/* It returns whether or not a control needs to receive an idle event or not */ +/* For example, a spinner only needs idle events when the user is holding */ +/* the mouse down in one of the arrows. Otherwise, don't waste cycles */ +/* and OpenGL context switching by calling its idle. */ + +bool GLUI_Control::needs_idle() const +{ + return false; +} + + +/********* GLUI_Control::~GLUI_Control() **********/ + +GLUI_Control::~GLUI_Control() +{ + GLUI_Control *item = (GLUI_Control*) this->first_child(); + + while (item) + { + GLUI_Control *tmp = item; + item = (GLUI_Control*) item->next(); + delete tmp; + } +} + +/********* GLUI_Control::hide_internal() ********/ +/** Sets hidden==true for this control and all its siblings. */ +/** If recurse is true, we go to children as well */ + +void GLUI_Control::hide_internal( int recurse ) +{ + GLUI_Node *node; + + node = (GLUI_Node *) this; + while( node != NULL ) { + ((GLUI_Control*)node)->hidden = true; + + if ( recurse AND node->first_child() != NULL ) + ((GLUI_Control*) node->first_child())->hide_internal(true); + + node = node->next(); + } + + node = this->collapsed_node.first_child(); + while( node != NULL ) { + ((GLUI_Control*)node)->hidden = true; + + if ( recurse AND node->first_child() != NULL ) + ((GLUI_Control*) node->first_child())->hide_internal(true); + + node = node->next(); + } +} + + +/********* GLUI_Control::unhide_internal() ********/ +/** Sets hidden==false for this control and all its siblings. */ +/** If recurse is true, we go to children as well */ + +void GLUI_Control::unhide_internal( int recurse ) +{ + GLUI_Node *node; + + node = (GLUI_Node *) this; + while( node != NULL ) { + /* printf( "unhide: %s [%d]\n", ((GLUI_Control*)node)->name.c_str(), + ((GLUI_Control*)node)->hidden );*/ + ((GLUI_Control*)node)->hidden = false; + + if ( recurse AND node->first_child() != NULL ) + ((GLUI_Control*) node->first_child())->unhide_internal(true); + + node = node->next(); + } + + node = this->collapsed_node.first_child(); + while( node != NULL ) { + ((GLUI_Control*)node)->hidden = false; + + if ( recurse AND node->first_child() != NULL ) + ((GLUI_Control*) node->first_child())->unhide_internal(true); + + node = node->next(); + } +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_edittext.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_edittext.cpp new file mode 100644 index 00000000..5f2a1d84 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_edittext.cpp @@ -0,0 +1,1198 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_edittext.cpp - GLUI_EditText control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + int data_type, void *live_var, + int id, GLUI_CB callback ) +{ + if (data_type == GLUI_EDITTEXT_TEXT) { + live_type = GLUI_LIVE_TEXT; + } + else if (data_type == GLUI_EDITTEXT_STRING) { + data_type = GLUI_EDITTEXT_TEXT; // EDITTEXT_STRING doesn't really exist. + // Except as a signal to make a string. + // It's a backwards-compat hack. + live_type = GLUI_LIVE_STRING; + } + else if (data_type == GLUI_EDITTEXT_INT) { + live_type = GLUI_LIVE_INT; + } + else if (data_type == GLUI_EDITTEXT_FLOAT) { + live_type = GLUI_LIVE_FLOAT; + } + common_construct( parent, name, data_type, live_type, live_var, id, callback ); +} + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + int text_type, int id, GLUI_CB callback ) +{ + common_construct( parent, name, text_type, GLUI_LIVE_NONE, 0, id, callback); +} + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + int *live_var, + int id, GLUI_CB callback ) +{ + common_construct( parent, name, GLUI_EDITTEXT_INT, GLUI_LIVE_INT, live_var, id, callback); +} + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + float *live_var, + int id, GLUI_CB callback ) +{ + common_construct( parent, name, GLUI_EDITTEXT_FLOAT, GLUI_LIVE_FLOAT, live_var, id, callback); +} + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + char *live_var, + int id, GLUI_CB callback ) +{ + common_construct( parent, name, GLUI_EDITTEXT_TEXT, GLUI_LIVE_TEXT, live_var, id, callback); +} + +/****************************** GLUI_EditText::GLUI_EditText() **********/ + +GLUI_EditText::GLUI_EditText( GLUI_Node *parent, const char *name, + std::string &live_var, + int id, GLUI_CB callback ) +{ + common_construct( parent, name, GLUI_EDITTEXT_TEXT, GLUI_LIVE_STRING, &live_var, id, callback); +} + +/****************************** GLUI_EditText::common_construct() **********/ + +void GLUI_EditText::common_construct( GLUI_Node *parent, const char *name, + int data_t, int live_t, void *data, int id, + GLUI_CB cb ) +{ + common_init(); + set_name( name ); + + live_type = live_t; + data_type = data_t; + ptr_val = data; + user_id = id; + callback = cb; + + + if ( live_type == GLUI_LIVE_INT) { + if ( data == NULL ) + set_int_val(int_val); /** Set to some default, in case of no live var **/ + } + else if ( live_type == GLUI_LIVE_FLOAT ) { + num_periods = 1; + if ( data == NULL ) + set_float_val(float_val); /** Set to some default, in case of no live var **/ + } + + parent->add_control( this ); + + init_live(); +} + +/****************************** GLUI_EditText::mouse_down_handler() **********/ + +int GLUI_EditText::mouse_down_handler( int local_x, int local_y ) +{ + int tmp_insertion_pt; + + if ( debug ) dump( stdout, "-> MOUSE DOWN" ); + + tmp_insertion_pt = find_insertion_pt( local_x, local_y ); + if ( tmp_insertion_pt == -1 ) { + if ( glui ) + glui->deactivate_current_control( ); + return false; + } + + insertion_pt = tmp_insertion_pt; + + sel_start = sel_end = insertion_pt; + + if ( can_draw()) + update_and_draw_text(); + + if ( debug ) dump( stdout, "<- MOUSE UP" ); + + return true; +} + + +/******************************** GLUI_EditText::mouse_up_handler() **********/ + +int GLUI_EditText::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + return false; +} + + +/***************************** GLUI_EditText::mouse_held_down_handler() ******/ + +int GLUI_EditText::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + int tmp_pt; + + if ( NOT new_inside ) + return false; + + if ( debug ) dump( stdout, "-> HELD DOWN" ); + + tmp_pt = find_insertion_pt( local_x, local_y ); + + if ( tmp_pt == -1 AND sel_end != 0 ) { /* moved mouse past left edge */ + special_handler( GLUT_KEY_LEFT, GLUT_ACTIVE_SHIFT ); + } + else if ( tmp_pt == substring_end+1 AND sel_end != (int) text.length()) { + /* moved mouse past right edge */ + special_handler( GLUT_KEY_RIGHT, GLUT_ACTIVE_SHIFT ); + } + else if ( tmp_pt != -1 AND tmp_pt != sel_end ) { + sel_end = insertion_pt = tmp_pt; + + update_and_draw_text(); + } + + if ( debug ) + dump( stdout, "<- HELD DOWN" ); + + return false; +} + + +/****************************** GLUI_EditText::key_handler() **********/ + +int GLUI_EditText::key_handler( unsigned char key,int modifiers ) +{ + int i, regular_key; + /* int has_selection; */ + + if ( NOT glui ) + return false; + + if ( debug ) + dump( stdout, "-> KEY HANDLER" ); + + regular_key = false; + bool ctrl_down = (modifiers & GLUT_ACTIVE_CTRL)!=0; + /* has_selection = (sel_start != sel_end); */ + + if ( key == CTRL('m') ) { /* RETURN */ + /* glui->deactivate_current_control(); */ + deactivate(); /** Force callbacks, etc **/ + activate(GLUI_ACTIVATE_TAB); /** Reselect all text **/ + redraw(); + return true; + } + else if ( key == CTRL('[')) { /* ESCAPE */ + glui->deactivate_current_control(); + return true; + } + else if ( (key == 127 AND !ctrl_down) OR /* FORWARD DELETE */ + ( key == CTRL('d') AND modifiers == GLUT_ACTIVE_CTRL) ) + { + if ( sel_start == sel_end ) { /* no selection */ + if ( insertion_pt < (int)text.length() ) { + /*** See if we're deleting a period in a float data-type box ***/ + if ( data_type == GLUI_EDITTEXT_FLOAT AND text[insertion_pt]=='.' ) + num_periods--; + + /*** Shift over string first ***/ + text.erase(insertion_pt,1); + } + } + else { /* There is a selection */ + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + } + else if ( ((key == 127) AND ctrl_down) OR // Delete word forward + ((key == 'd') AND (modifiers == GLUT_ACTIVE_ALT)) ) + { + if ( sel_start == sel_end ) { /* no selection */ + sel_start = insertion_pt; + sel_end = find_word_break( insertion_pt, +1 ); + } + + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + else if ( key == CTRL('h') ) { /* BACKSPACE */ + if ( sel_start == sel_end ) { /* no selection */ + if ( insertion_pt > 0 ) { + /*** See if we're deleting a period in a float data-type box ***/ + if ( data_type == GLUI_EDITTEXT_FLOAT AND text[insertion_pt-1]=='.' ) + num_periods--; + + /*** Shift over string first ***/ + insertion_pt--; + text.erase(insertion_pt,1); + } + } + else { /* There is a selection */ + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + } + else if ( modifiers == GLUT_ACTIVE_CTRL ) /* CTRL ONLY */ + { + /* Ctrl-key bindings */ + if ( key == CTRL('a') ) { + return special_handler( GLUT_KEY_HOME, 0 ); + } + else if ( key == CTRL('e') ) { + return special_handler( GLUT_KEY_END, 0 ); + } + else if ( key == CTRL('b') ) { + return special_handler( GLUT_KEY_LEFT, 0 ); + } + else if ( key == CTRL('f') ) { + return special_handler( GLUT_KEY_RIGHT, 0 ); + } + else if ( key == CTRL('p') ) { + return special_handler( GLUT_KEY_UP, 0 ); + } + else if ( key == CTRL('n') ) { + return special_handler( GLUT_KEY_DOWN, 0 ); + } + else if ( key == CTRL('u') ) { /* ERASE LINE */ + insertion_pt = 0; + text.erase(0,text.length()); + sel_start = sel_end = 0; + } + else if ( key == CTRL('k') ) { /* KILL TO END OF LINE */ + sel_start = sel_end = insertion_pt; + text.erase(insertion_pt,GLUI_String::npos); + } + } + else if ( modifiers == GLUT_ACTIVE_ALT ) /* ALT ONLY */ + { + if ( key == 'b' ) { // Backward word + return special_handler ( GLUT_KEY_LEFT, GLUT_ACTIVE_CTRL ); + } + if ( key == 'f' ) { // Forward word + return special_handler ( GLUT_KEY_RIGHT, GLUT_ACTIVE_CTRL ); + } + } + else if ( (modifiers & GLUT_ACTIVE_CTRL) OR + (modifiers & GLUT_ACTIVE_ALT) ) + { + /** ignore other keys with modifiers */ + return true; + } + else { /* Regular key */ + regular_key = true; + + /** Check if we only accept numbers **/ + if (data_type == GLUI_EDITTEXT_FLOAT ) { + if ( (key < '0' OR key > '9') AND key != '.' AND key != '-' ) + return true; + + if ( key == '-' ) { /* User typed a '-' */ + + /* If user has first character selected, then '-' is allowed */ + if ( NOT ( MIN(sel_start,sel_end) == 0 AND + MAX(sel_start,sel_end) > 0 ) ) { + + /* User does not have 1st char selected */ + if (insertion_pt != 0 OR text[0] == '-' ) { + return true; /* Can only place negative at beginning of text, + and only one of them */ + } + } + } + + if ( key == '.' ) { + /*printf( "PERIOD: %d\n", num_periods ); */ + + if ( num_periods > 0 ) { + /** We're trying to type a period, but the text already contains + a period. Check whether the period is contained within + is current selection (thus it will be safely replaced) **/ + + int period_found = false; + if ( sel_start != sel_end ) { + for( i=MIN(sel_end,sel_start); i '9') AND key != '-' ) + return true; + + if ( key == '-' ) { /* User typed a '-' */ + + /* If user has first character selected, then '-' is allowed */ + if ( NOT ( MIN(sel_start,sel_end) == 0 AND + MAX(sel_start,sel_end) > 0 ) ) { + + /* User does not have 1st char selected */ + if (insertion_pt != 0 OR text[0] == '-' ) { + return true; /* Can only place negative at beginning of text, + and only one of them */ + } + } + } + } + + /** This is just to get rid of warnings - the flag regular_key is + set if the key was not a backspace, return, whatever. But I + believe if we're here, we know it was a regular key anyway */ + if ( regular_key ) { + } + + /**** If there's a current selection, erase it ******/ + if ( sel_start != sel_end ) { + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + + /******** We insert the character into the string ***/ + + text.insert(insertion_pt,1,key); + + /******** Move the insertion point and substring_end one over ******/ + insertion_pt++; + substring_end++; + + sel_start = sel_end = insertion_pt; + } + + /******** Now redraw text ***********/ + /* Hack to prevent text box from being cleared first **/ + /** int substring_change = update_substring_bounds(); + draw_text_only = + (NOT substring_change AND NOT has_selection AND regular_key ); + */ + + draw_text_only = false; /** Well, hack is not yet working **/ + update_and_draw_text(); + draw_text_only = false; + + + if ( debug ) + dump( stdout, "<- KEY HANDLER" ); + + /*** Now look to see if this string has a period ***/ + num_periods = 0; + for( i=0; i<(int)text.length(); i++ ) + if ( text[i] == '.' ) + num_periods++; + + return true; +} + + +/****************************** GLUI_EditText::activate() **********/ + +void GLUI_EditText::activate( int how ) +{ + if ( debug ) + dump( stdout, "-> ACTIVATE" ); + + active = true; + + if ( how == GLUI_ACTIVATE_MOUSE ) + return; /* Don't select everything if activated with mouse */ + + orig_text = text; + + sel_start = 0; + sel_end = (int)text.length(); + insertion_pt = 0; + + if ( debug ) + dump( stdout, "<- ACTIVATE" ); +} + + +/****************************** GLUI_EditText::deactivate() **********/ + +void GLUI_EditText::deactivate( void ) +{ + int new_int_val; + float new_float_val; + + active = false; + + if ( NOT glui ) + return; + + if ( debug ) + dump( stdout, "-> DISACTIVATE" ); + + sel_start = sel_end = insertion_pt = -1; + + /***** Retrieve the current value from the text *****/ + /***** The live variable will be updated by set_text() ****/ + if ( data_type == GLUI_EDITTEXT_FLOAT ) { + if ( text.length() == 0 ) /* zero-length string - make it "0.0" */ + text = "0.0"; + + new_float_val = atof( text.c_str() ); + + set_float_val( new_float_val ); + } + else if ( data_type == GLUI_EDITTEXT_INT ) { + if ( text.length() == 0 ) /* zero-length string - make it "0" */ + text = "0"; + + new_int_val = atoi( text.c_str() ); + + set_int_val( new_int_val ); + } + else + if ( data_type == GLUI_EDITTEXT_TEXT ) { + set_text(text); /* This will force callbacks and gfx refresh */ + } + + update_substring_bounds(); + + /******** redraw text without insertion point ***********/ + redraw(); + + /***** Now do callbacks if value changed ******/ + if ( orig_text != text ) { + this->execute_callback(); + + if ( 0 ) { + /* THE CODE BELOW IS FROM WHEN SPINNER ALSO MAINTAINED CALLBACKS */ + if ( spinner == NULL ) { /** Are we independent of a spinner? **/ + if ( callback ) { + callback( this ); + } + } + else { /* We're attached to a spinner */ + spinner->do_callbacks(); /* Let the spinner do the callback stuff */ + } + } + } + + if ( debug ) + dump( stdout, "<- DISACTIVATE" ); +} + +/****************************** GLUI_EditText::draw() **********/ + +void GLUI_EditText::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int name_x; + + name_x = MAX(text_x_offset - string_width(this->name) - 3,0); + draw_name( name_x , 13); + + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( text_x_offset, 0 ); glVertex2i( w, 0 ); + glVertex2i( text_x_offset, 0 ); glVertex2i( text_x_offset, h ); + + glColor3f( 1., 1., 1. ); + glVertex2i( text_x_offset, h ); glVertex2i( w, h ); + glVertex2i( w, h ); glVertex2i( w, 0 ); + + if ( enabled ) + glColor3f( 0., 0., 0. ); + else + glColor3f( .25, .25, .25 ); + glVertex2i( text_x_offset+1, 1 ); glVertex2i( w-1, 1 ); + glVertex2i( text_x_offset+1, 1 ); glVertex2i( text_x_offset+1, h-1 ); + + glColor3f( .75, .75, .75 ); + glVertex2i( text_x_offset+1, h-1 ); glVertex2i( w-1, h-1 ); + glVertex2i( w-1, h-1 ); glVertex2i( w-1, 1 ); + glEnd(); + + /** Find where to draw the text **/ + update_substring_bounds(); + draw_text(0,0); + + draw_insertion_pt(); +} + + + +/************************** GLUI_EditText::update_substring_bounds() *********/ + +int GLUI_EditText::update_substring_bounds( void ) +{ + int box_width; + int text_len = (int)text.length(); + int old_start, old_end; + + old_start = substring_start; + old_end = substring_end; + + /*** Calculate the width of the usable area of the edit box ***/ + box_width = MAX( this->w - this->text_x_offset + - 4 /* 2 * the two-line box border */ + - 2 * GLUI_EDITTEXT_BOXINNERMARGINX, 0 ); + + CLAMP( substring_end, 0, MAX(text_len-1,0) ); + CLAMP( substring_start, 0, MAX(text_len-1,0) ); + + if ( debug ) dump( stdout, "-> UPDATE SS" ); + + if ( insertion_pt >= 0 AND + insertion_pt < substring_start ) { /* cursor moved left */ + substring_start = insertion_pt; + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + } + else if ( insertion_pt > substring_end ) { /* cursor moved right */ + substring_end = insertion_pt-1; + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_start++; + } + else { /* cursor is within old substring bounds */ + if ( last_insertion_pt > insertion_pt ) { /* cursor moved left */ + } + else { + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + + while(substring_end < text_len-1 + AND substring_width( substring_start, substring_end ) <= box_width) + substring_end++; + } + } + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + + last_insertion_pt = insertion_pt; + + /*** No selection if not enabled ***/ + if ( NOT enabled ) { + sel_start = sel_end = 0; + } + + if ( debug ) dump( stdout, "<- UPDATE SS" ); + + if ( substring_start == old_start AND substring_end == old_end ) + return false; /*** bounds did not change ***/ + else + return true; /*** bounds did change ***/ +} + + +/********************************* GLUI_EditText::update_x_offsets() *********/ + +void GLUI_EditText::update_x_offsets( void ) +{ +} + + +/********************************* GLUI_EditText::draw_text() ****************/ + +void GLUI_EditText::draw_text( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int text_x, i, sel_lo, sel_hi; + + if ( debug ) dump( stdout, "-> DRAW_TEXT" ); + + if ( NOT draw_text_only ) { + if ( enabled ) + glColor3f( 1., 1., 1. ); + else + set_to_bkgd_color(); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( text_x_offset+2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i( text_x_offset+2, h-2 ); + glEnd(); + } + + /** Find where to draw the text **/ + + text_x = text_x_offset + 2 + GLUI_EDITTEXT_BOXINNERMARGINX; + + /*printf( "text_x: %d substr_width: %d start/end: %d/%d\n", + text_x, substring_width( substring_start, substring_end ), + substring_start, substring_end ); + */ + /** Find lower and upper selection bounds **/ + sel_lo = MIN(sel_start, sel_end ); + sel_hi = MAX(sel_start, sel_end ); + + int sel_x_start, sel_x_end, delta; + + /** Draw selection area dark **/ + if ( sel_start != sel_end ) { + sel_x_start = text_x; + sel_x_end = text_x; + for( i=substring_start; i<=substring_end; i++ ) { + delta = char_width( text[i] ); + + if ( i < sel_lo ) { + sel_x_start += delta; + sel_x_end += delta; + } + else if ( i < sel_hi ) { + sel_x_end += delta; + } + } + + glColor3f( 0.0f, 0.0f, .6f ); + glBegin( GL_QUADS ); + glVertex2i( sel_x_start, 2 ); glVertex2i( sel_x_end, 2 ); + glVertex2i( sel_x_end, h-2 ); glVertex2i( sel_x_start, h-2 ); + glEnd(); + } + + + if ( sel_start == sel_end ) { /* No current selection */ + if ( enabled ) + glColor3b( 0, 0, 0 ); + else + glColor3b( 32, 32, 32 ); + + glRasterPos2i( text_x, 13); + for( i=substring_start; i<=substring_end; i++ ) { + glutBitmapCharacter( get_font(), this->text[i] ); + } + } + else { /* There is a selection */ + int x = text_x; + for( i=substring_start; i<=substring_end; i++ ) { + if ( IN_BOUNDS( i, sel_lo, sel_hi-1)) { /* This character is selected */ + glColor3f( 1., 1., 1. ); + glRasterPos2i( x, 13); + glutBitmapCharacter( get_font(), this->text[i] ); + } + else { + glColor3f( 0., 0., 0. ); + glRasterPos2i( x, 13); + glutBitmapCharacter( get_font(), this->text[i] ); + } + + x += char_width( text[i] ); + } + } + + if ( debug ) dump( stdout, "<- DRAW_TEXT" ); +} + + +/******************************** GLUI_EditText::find_insertion_pt() *********/ +/* This function returns the character numer *before which* the insertion */ +/* point goes */ + +int GLUI_EditText::find_insertion_pt( int x, int y ) +{ + int curr_x, i; + + /*** See if we clicked outside box ***/ + if ( x < this->x_abs + text_x_offset ) + return -1; + + /* We move from right to left, looking to see if the mouse was clicked + to the right of the ith character */ + + curr_x = this->x_abs + text_x_offset + + substring_width( substring_start, substring_end ) + + 2 /* The edittext box has a 2-pixel margin */ + + GLUI_EDITTEXT_BOXINNERMARGINX; /** plus this many pixels blank space + between the text and the box **/ + + /*** See if we clicked in an empty box ***/ + if ( (int) text.length() == 0 ) + return 0; + + /** find mouse click in text **/ + for( i=substring_end; i>=substring_start; i-- ) { + curr_x -= char_width( text[i] ); + + if ( x > curr_x ) { + /* printf( "-> %d\n", i ); */ + + return i+1; + } + } + + return 0; + + /* Well, the mouse wasn't after any of the characters...see if it's + before the beginning of the substring */ + if ( 0 ) { + if ( x > (x_abs + text_x_offset + 2 ) ) + return substring_start; + + return -1; /* Nothing found */ + } +} + + +/******************************** GLUI_EditText::draw_insertion_pt() *********/ + +void GLUI_EditText::draw_insertion_pt( void ) +{ + int curr_x, i; + + if ( NOT can_draw() ) + return; + + /*** Don't draw insertion pt if control is disabled ***/ + if ( NOT enabled ) + return; + + if ( debug ) dump( stdout, "-> DRAW_INS_PT" ); + + if ( sel_start != sel_end OR insertion_pt < 0 ) { + return; /* Don't draw insertion point if there is a current selection */ + } + + /* printf( "insertion pt: %d\n", insertion_pt ); */ + + curr_x = this->x_abs + text_x_offset + + substring_width( substring_start, substring_end ) + + 2 /* The edittext box has a 2-pixel margin */ + + GLUI_EDITTEXT_BOXINNERMARGINX; /** plus this many pixels blank space + between the text and the box **/ + + for( i=substring_end; i>=insertion_pt; i-- ) { + curr_x -= char_width( text[i] ); + } + + glColor3f( 0.0, 0.0, 0.0 ); + glBegin( GL_LINE_LOOP ); + /*** + glVertex2i( curr_x, y_abs + 4 ); + glVertex2i( curr_x, y_abs + 4 ); + glVertex2i( curr_x, y_abs + h - 3 ); + glVertex2i( curr_x, y_abs + h - 3 ); + ***/ + curr_x -= x_abs; + glVertex2i( curr_x, 0 + 4 ); + glVertex2i( curr_x, 0 + 4 ); + glVertex2i( curr_x, 0 + h - 3 ); + glVertex2i( curr_x, 0 + h - 3 ); + glEnd(); + + if ( debug ) dump( stdout, "-> DRAW_INS_PT" ); +} + + + +/******************************** GLUI_EditText::substring_width() *********/ + +int GLUI_EditText::substring_width( int start, int end ) +{ + int i, width; + + width = 0; + + for( i=start; i<=end; i++ ) + width += char_width( text[i] ); + + return width; +} + + +/***************************** GLUI_EditText::update_and_draw_text() ********/ + +void GLUI_EditText::update_and_draw_text( void ) +{ + if ( NOT can_draw() ) + return; + + update_substring_bounds(); + /* printf( "ss: %d/%d\n", substring_start, substring_end ); */ + + redraw(); +} + + +/********************************* GLUI_EditText::special_handler() **********/ + +int GLUI_EditText::special_handler( int key,int modifiers ) +{ + if ( NOT glui ) + return false; + + if ( debug ) + printf( "SPECIAL:%d - mod:%d subs:%d/%d ins:%d sel:%d/%d\n", + key, modifiers, substring_start, substring_end,insertion_pt, + sel_start, sel_end ); + + if ( key == GLUT_KEY_LEFT ) { + if ( (modifiers & GLUT_ACTIVE_CTRL) != 0 ) { + insertion_pt = find_word_break( insertion_pt, -1 ); + } + else { + insertion_pt--; + } + } + else if ( key == GLUT_KEY_RIGHT ) { + if ( (modifiers & GLUT_ACTIVE_CTRL) != 0 ) { + insertion_pt = find_word_break( insertion_pt, +1 ); + } + else { + insertion_pt++; + } + } + else if ( key == GLUT_KEY_HOME ) { + insertion_pt = 0; + } + else if ( key == GLUT_KEY_END ) { + insertion_pt = (int) text.length(); + } + + /*** Update selection if shift key is down ***/ + if ( (modifiers & GLUT_ACTIVE_SHIFT ) != 0 ) + sel_end = insertion_pt; + else + sel_start = sel_end = insertion_pt; + + + CLAMP( insertion_pt, 0, (int) text.length()); /* Make sure insertion_pt + is in bounds */ + CLAMP( sel_start, 0, (int) text.length()); /* Make sure insertion_pt + is in bounds */ + CLAMP( sel_end, 0, (int) text.length()); /* Make sure insertion_pt + is in bounds */ + + /******** Now redraw text ***********/ + if ( can_draw()) + update_and_draw_text(); + + return true; +} + + +/****************************** GLUI_EditText::find_word_break() **********/ +/* It looks either left or right (depending on value of 'direction' */ +/* for the beginning of the next 'word', where word are characters */ +/* separated by one of the following tokens: " :-.," */ +/* If there is no next word in the specified direction, this returns */ +/* the beginning of 'text', or the very end. */ + +int GLUI_EditText::find_word_break( int start, int direction ) +{ + int i, j; + char *breaks = " :-.,"; + int num_break_chars = (int)strlen(breaks), text_len = (int)text.length(); + int new_pt; + + /** If we're moving left, we have to start two back, in case we're either + already at the beginning of a word, or on a separating token. + Otherwise, this function would just return the word we're already at **/ + if ( direction == -1 ) { + start -= 2; + } + + /***** Iterate over text in the specified direction *****/ + for ( i=start; i >= 0 AND i < text_len; i += direction ) { + + /** For each character in text, iterate over list of separating tokens **/ + for( j=0; j 0 ) /* Return the end of string */ + return text_len; + else /* Return the beginning of the text */ + return 0; +} + + +/********************************** GLUI_EditText::clear_substring() ********/ + +void GLUI_EditText::clear_substring( int start, int end ) +{ + int i; + + /* + printf( "clearing: %d-%d '", start,end); + for(i=start;ifloat_val = this->float_val; + spinner->int_val = this->int_val; + } + + /*** Now update the live variable ***/ + output_live(true); +} + + +/******************************* GLUI_EditText::set_float_val() ************/ + +void GLUI_EditText::set_float_val( float new_val ) +{ + if ( has_limits == GLUI_LIMIT_CLAMP ) { + /*** Clamp the new value to the existing limits ***/ + + CLAMP( new_val, float_low, float_high ); + } + else if ( has_limits == GLUI_LIMIT_WRAP ) { + /*** Clamp the value cyclically to the limits - that is, if the + value exceeds the max, set it the the minimum, and conversely ***/ + + if ( new_val < float_low ) + new_val = float_high; + if ( new_val > float_high ) + new_val = float_low; + } + + float_val = new_val; + int_val = (int) new_val; /* Mirror the value as an int, too */ + + set_numeric_text(); +} + + +/********************************** GLUI_EditText::set_int_val() ************/ + +void GLUI_EditText::set_int_val( int new_val ) +{ + if ( has_limits == GLUI_LIMIT_CLAMP ) { + /*** Clamp the new value to the existing limits ***/ + + CLAMP( new_val, int_low, int_high ); + } + else if ( has_limits == GLUI_LIMIT_WRAP ) { + /*** Clamp the value cyclically to the limits - that is, if the + value exceeds the max, set it the the minimum, and conversely ***/ + + if ( new_val < int_low ) + new_val = int_high; + if ( new_val > int_high ) + new_val = int_low; + } + + int_val = new_val; + float_val = (float) new_val; /* We mirror the value as a float, too */ + + set_numeric_text(); +} + + +/********************************* GLUI_EditText::set_float_limits() *********/ + +void GLUI_EditText::set_float_limits( float low, float high, int limit_type ) +{ + has_limits = limit_type; + float_low = low; + float_high = high; + + if ( NOT IN_BOUNDS( float_val, float_low, float_high )) + set_float_val( float_low ); + + int_low = (int) float_low; + int_high = (int) float_high; +} + + +/*********************************** GLUI_EditText::set_int_limits() *********/ + +void GLUI_EditText::set_int_limits( int low, int high, int limit_type ) +{ + has_limits = limit_type; + int_low = low; + int_high = high; + + if ( NOT IN_BOUNDS( int_val, int_low, int_high )) + set_int_val( int_low ); + + float_low = (float) int_low; + float_high = (float) int_high; +} + + +/************************************ GLUI_EditText::set_numeric_text() ******/ + +void GLUI_EditText::set_numeric_text( void ) +{ + char buf_num[200]; + int i, text_len; + + if ( data_type == GLUI_EDITTEXT_FLOAT ) { + sprintf( buf_num, "%#g", float_val ); + + num_periods = 0; + text_len = (int) strlen(buf_num); + for ( i=0; i 0 ) { + text_len = (int) strlen(buf_num); + for ( i=text_len-1; i>0; i-- ) { + if ( buf_num[i] == '0' AND buf_num[i-1] != '.' ) + buf_num[i] = '\0'; + else + break; + } + } + set_text( buf_num ); + } + else { + sprintf( buf_num, "%d", int_val ); + set_text( buf_num ); + } + +} + + +/*************************************** GLUI_EditText::dump() **************/ + +void GLUI_EditText::dump( FILE *out, const char *name ) +{ + fprintf( out, + "%s (edittext@%p): ins_pt:%d subs:%d/%d sel:%d/%d len:%d\n", + name, this, + insertion_pt, + substring_start, + substring_end, + sel_start, + sel_end, + (int) text.length()); +} + + +/**************************************** GLUI_EditText::mouse_over() ********/ + +int GLUI_EditText::mouse_over( int state, int x, int y ) +{ + if ( state ) { + /* curr_cursor = GLUT_CURSOR_TEXT; */ + glutSetCursor( GLUT_CURSOR_TEXT ); + } + else { + /* printf( "OUT\n" ); */ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + } + + return true; +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_filebrowser.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_filebrowser.cpp new file mode 100644 index 00000000..434133b1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_filebrowser.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_filebrowser.cpp - GLUI_FileBrowser control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" +#include + +#ifdef __GNUC__ +#include +#include +#endif + +#ifdef _WIN32 +#include +#endif + +#include + +GLUI_FileBrowser::GLUI_FileBrowser( GLUI_Node *parent, + const char *name, + int type, + int id, + GLUI_CB cb) +{ + common_init(); + + set_name( name ); + user_id = id; + int_val = type; + callback = cb; + + parent->add_control( this ); + list = new GLUI_List(this, true, 1); + list->set_object_callback( GLUI_FileBrowser::dir_list_callback, this ); + list->set_click_type(GLUI_DOUBLE_CLICK); + this->fbreaddir(this->current_dir.c_str()); +} + +/****************************** GLUI_FileBrowser::draw() **********/ + +void GLUI_FileBrowser::dir_list_callback(GLUI_Control *glui_object) { + GLUI_List *list = dynamic_cast(glui_object); + if (!list) + return; + GLUI_FileBrowser* me = dynamic_cast(list->associated_object); + if (!me) + return; + int this_item; + const char *selected; + this_item = list->get_current_item(); + if (this_item > 0) { /* file or directory selected */ + selected = list->get_item_ptr( this_item )->text.c_str(); + if (selected[0] == '/' || selected[0] == '\\') { + if (me->allow_change_dir) { +#ifdef __GNUC__ + chdir(selected+1); +#endif +#ifdef _WIN32 + SetCurrentDirectoryA(selected+1); +#endif + me->fbreaddir("."); + } + } else { + me->file = selected; + me->execute_callback(); + } + } +} + + + +void GLUI_FileBrowser::fbreaddir(const char *d) { + GLUI_String item; + int i = 0; + + if (!d) + return; + +#ifdef _WIN32 + + WIN32_FIND_DATAA FN; + HANDLE hFind; + //char search_arg[MAX_PATH], new_file_path[MAX_PATH]; + //sprintf(search_arg, "%s\\*.*", path_name); + + hFind = FindFirstFileA("*.*", &FN); + if (list) { + list->delete_all(); + if (hFind != INVALID_HANDLE_VALUE) { + do { + int len = strlen(FN.cFileName); + if (FN.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + item = '\\'; + item += FN.cFileName; + } else { + item = FN.cFileName; + } + list->add_item(i,item.c_str()); + i++; + } while (FindNextFileA(hFind, &FN) != 0); + + if (GetLastError() == ERROR_NO_MORE_FILES) + FindClose(&FN); + else + perror("fbreaddir"); + } + } + +#elif defined(__GNUC__) + + DIR *dir; + struct dirent *dirp; + struct stat dr; + + if (list) { + list->delete_all(); + if ((dir = opendir(d)) == NULL) + perror("fbreaddir:"); + else { + while ((dirp = readdir(dir)) != NULL) /* open directory */ + { + if (!lstat(dirp->d_name,&dr) && S_ISDIR(dr.st_mode)) /* dir is directory */ + item = dirp->d_name + GLUI_String("/"); + else + item = dirp->d_name; + + list->add_item(i,item.c_str()); + i++; + } + closedir(dir); + } + } +#endif +} + +void ProcessFiles(const char *path_name) +{ + +} + + +void GLUI_FileBrowser::set_w(int w) +{ + if (list) list->set_w(w); +} + +void GLUI_FileBrowser::set_h(int h) +{ + if (list) list->set_h(h); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0.c new file mode 100644 index 00000000..02930207 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0.c @@ -0,0 +1,38 @@ + + +int glui_img_checkbox_0[] = { 13, 13, /* width, height */ + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 192,192,192, 255,255,255, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 255,255,255, + 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 192,192,192, + 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 192,192,192, 255,255,255, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 255,255,255, + 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, + 255,255,255, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0_dis.c new file mode 100644 index 00000000..37a5d5c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_0_dis.c @@ -0,0 +1,38 @@ + + +int glui_img_checkbox_0_dis[] = { 13, 13, /* width, height */ + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 255,255,255, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 255,255,255, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,192,192, + 255,255,255, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1.c new file mode 100644 index 00000000..a0ae25eb --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1.c @@ -0,0 +1,38 @@ + + +int glui_img_checkbox_1[] = { 13, 13, /* width, height */ + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 192,192,192, 255,255,255, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, + 255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 255,255,255, + 128,128,128, 0, 0, 0, 255,255,255, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, + 255,255,255, 0, 0, 0, 0, 0, 0, 255,255,255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255,255,255, 255,255,255, 192,192,192, + 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255,255,255, 192,192,192, 255,255,255, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 0, 0, 0, 0, 0, 0, 255,255,255, + 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 0, 0, 0, 255,255,255, 192,192,192, 255,255,255, + 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 128,128,128, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, + 255,255,255, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1_dis.c new file mode 100644 index 00000000..ae0feae2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_checkbox_1_dis.c @@ -0,0 +1,38 @@ + + +int glui_img_checkbox_1_dis[] = { 13, 13, /* width, height */ + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 255,255,255, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, + 192,192,192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 128,128,128, 64, 64, 64, 192,192,192, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, + 192,192,192, 64, 64, 64, 64, 64, 64, 192,192,192, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 192,192,192, 192,192,192, 255,255,255, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 64, 64, 64, 64, 64, 64, 192,192,192, + 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 64, 64, 64, 192,192,192, 192,192,192, 255,255,255, + 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 128,128,128, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,192,192, + 255,255,255, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_downarrow.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_downarrow.c new file mode 100644 index 00000000..97d5905d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_downarrow.c @@ -0,0 +1,56 @@ + + +int glui_img_downarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_leftarrow.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_leftarrow.c new file mode 100644 index 00000000..48d325e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_leftarrow.c @@ -0,0 +1,56 @@ + + +int glui_img_leftarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_down.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_down.c new file mode 100644 index 00000000..81bc53ee --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_down.c @@ -0,0 +1,42 @@ + + +int glui_img_listbox_down[] = { 11, 17, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 127,127,127, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 191,191,191, 127,127,127, 0, 0, 0, + 127,127,127, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 127,127,127, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up.c new file mode 100644 index 00000000..160812ac --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up.c @@ -0,0 +1,42 @@ + + +int glui_img_listbox_up[] = { 11, 17, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 191,191,191, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 191,191,191, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 0, 0, 0, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, + 255,255,255, 191,191,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191,191,191, 127,127,127, 0, 0, 0, + 191,191,191, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 191,191,191, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 191,191,191, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,252, 255,255,255, 127,127,127, + 0, 0, 0, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up_dis.c new file mode 100644 index 00000000..a7a58432 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_listbox_up_dis.c @@ -0,0 +1,42 @@ + + +int glui_img_listbox_up_dis[] = { 11, 17, /* width, height */ + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 127,127,127, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 191,191,191, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 127,127,127, + 191,191,191, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 127,127,127, 191,191,191, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 127,127,127, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 254,254,254, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 127,127,127, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 254,254,254, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 191,191,191, + 255,255,255, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 254,254,254, 191,191,191, 127,127,127, 127,127,127, + 191,191,191, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 127,127,127, 191,191,191, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 127,127,127, 191,191,191, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 127,127,127, 191,191,191, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 191,191,191, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 127,127,127, + 191,191,191, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,252, 255,255,255, 127,127,127, + 127,127,127, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0.c new file mode 100644 index 00000000..1b890875 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0.c @@ -0,0 +1,44 @@ + + +int glui_img_radiobutton_0[] = { 14, 14, /* width, height */ + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 0, 0, 0, + 0, 0, 0, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 128,128,128, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,128,128, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0_dis.c new file mode 100644 index 00000000..c1ba1161 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_0_dis.c @@ -0,0 +1,44 @@ + + +int glui_img_radiobutton_0_dis[] = { 14, 14, /* width, height */ + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 64, 64, 64, + 64, 64, 64, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 128,128,128, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128,128,128, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1.c new file mode 100644 index 00000000..f98109e7 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1.c @@ -0,0 +1,44 @@ + + +int glui_img_radiobutton_1[] = { 14, 14, /* width, height */ + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 0, 0, 0, 0, 0, 0, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 255,255,255, 255,255,255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,255,255, 255,255,255, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 255,255,255, 255,255,255, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255,255,255, 255,255,255, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 0, 0, 0, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 0, 0, 0, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 0, 0, 0, + 0, 0, 0, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 128,128,128, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,128,128, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1_dis.c new file mode 100644 index 00000000..e40f8f3d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_radiobutton_1_dis.c @@ -0,0 +1,44 @@ + + +int glui_img_radiobutton_1_dis[] = { 14, 14, /* width, height */ + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 64, 64, 64, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 128,128,128, 64, 64, 64, 192,192,192, 192,192,192, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,192,192, 192,192,192, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 128,128,128, + 64, 64, 64, 192,192,192, 192,192,192, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 192,192,192, 192,192,192, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 64, 64, 64, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 64, 64, 64, 64, 64, 64, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 64, 64, 64, + 64, 64, 64, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 128,128,128, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128,128,128, 128,128,128, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_rightarrow.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_rightarrow.c new file mode 100644 index 00000000..25c30b80 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_rightarrow.c @@ -0,0 +1,56 @@ + + +int glui_img_rightarrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 0, 0, 0, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_0.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_0.c new file mode 100644 index 00000000..9ef71364 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_0.c @@ -0,0 +1,24 @@ + + +int glui_img_spindown_0[] = { 12, 8, /* width, height */ + 255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255,255,255, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 0, 0, 0, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 0, 0, 0, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 127,127,127, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 255,255,255, 191,191,191, 191,191,191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 127,127,127, 191,191,191, + 127,127,127, 0, 0, 0, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_1.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_1.c new file mode 100644 index 00000000..a84d5431 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_1.c @@ -0,0 +1,24 @@ + + +int glui_img_spindown_1[] = { 12, 8, /* width, height */ + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 255,255,255, 0, 0, 0, + 127,127,127, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 255,255,255, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 255,255,255, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 191,191,191, 191,191,191, 191,191,191, 255,255,255, + 0, 0, 0, 127,127,127, 191,191,191, 127,127,127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191,191,191, + 191,191,191, 255,255,255, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 255,255,255, 0, 0, 0, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 191,191,191, + 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_dis.c new file mode 100644 index 00000000..2d07b408 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spindown_dis.c @@ -0,0 +1,24 @@ + + +int glui_img_spindown_dis[] = { 12, 8, /* width, height */ + 255,255,255, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 255,255,255, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 64, 64, 64, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 127,127,127, + 64, 64, 64, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 127,127,127, 64, 64, 64, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 255,255,255, 191,191,191, 191,191,191, 127,127,127, 64, 64, 64, + 255,255,255, 191,191,191, 191,191,191, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 255,255,255, 191,191,191, + 127,127,127, 64, 64, 64, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 64, 64, 64, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 64, 64, 64, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_0.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_0.c new file mode 100644 index 00000000..589071b1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_0.c @@ -0,0 +1,24 @@ + + +int glui_img_spinup_0[] = { 12, 8, /* width, height */ + 255,255,255, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 0, 0, 0, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, 255,255,255, + 191,191,191, 191,191,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 127,127,127, 191,191,191, 127,127,127, + 0, 0, 0, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 127,127,127, 0, 0, 0, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 0, 0, 0, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_1.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_1.c new file mode 100644 index 00000000..78ba70bf --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_1.c @@ -0,0 +1,24 @@ + + +int glui_img_spinup_1[] = { 12, 8, /* width, height */ + 0, 0, 0, 127,127,127, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 0, 0, 0, 127,127,127, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 255,255,255, 0, 0, 0, + 127,127,127, 191,191,191, 127,127,127, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 191,191,191, 191,191,191, + 255,255,255, 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, + 127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191,191,191, + 191,191,191, 191,191,191, 255,255,255, 0, 0, 0, 127,127,127, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 0, 0, 0, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 255,255,255, + 0, 0, 0, 127,127,127, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 255,255,255, 0, 0, 0, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 191,191,191, 255,255,255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_dis.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_dis.c new file mode 100644 index 00000000..a910840c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_spinup_dis.c @@ -0,0 +1,24 @@ + + +int glui_img_spinup_dis[] = { 12, 8, /* width, height */ + 255,255,255, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 64, 64, 64, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 127,127,127, 64, 64, 64, 255,255,255, + 191,191,191, 191,191,191, 127,127,127, 127,127,127, 127,127,127, + 127,127,127, 127,127,127, 255,255,255, 191,191,191, 127,127,127, + 64, 64, 64, 255,255,255, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 127,127,127, 127,127,127, 255,255,255, 191,191,191, + 191,191,191, 127,127,127, 64, 64, 64, 255,255,255, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 255,255,255, + 191,191,191, 191,191,191, 191,191,191, 127,127,127, 64, 64, 64, + 255,255,255, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 127,127,127, 64, 64, 64, 255,255,255, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 191,191,191, 191,191,191, + 191,191,191, 191,191,191, 191,191,191, 64, 64, 64, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_uparrow.c b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_uparrow.c new file mode 100644 index 00000000..746f8ca4 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_img_uparrow.c @@ -0,0 +1,56 @@ + + +int glui_img_uparrow[] = { 16, 16, /* width, height */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192,192,192, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 128,128,128, 128,128,128, 128,128,128, 128,128,128, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 0, 0, 0, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, + 192,192,192, 255,255,255, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 128,128,128, + 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, 255,255,255, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 128,128,128, 0, 0, 0, 192,192,192, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 255,255,255, 255,255,255, + 255,255,255, 255,255,255, 255,255,255, 128,128,128, 0, 0, 0, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 192,192,192, 192,192,192, 192,192,192, 192,192,192, 192,192,192, + 0, 0, 0, +}; diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal.h b/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal.h new file mode 100644 index 00000000..20efc6f9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal.h @@ -0,0 +1,105 @@ +#ifndef GLUI_INTERNAL_H +#define GLUI_INTERNAL_H + +#include +#include + +#ifndef AND +#define AND && +#define OR || +#define NOT ! +#endif + +#ifndef MAX +#define MAX(a,b) ((a)>(b) ? (a) : (b)) +#define MIN(a,b) ((a)<(b) ? (a) : (b)) +#endif + +#ifndef ABS +#define ABS(a) ((a)>=0 ? (a) : (-(a))) +#endif + +/******************** bit comparisons and operations ***************/ +#ifndef TEST_BIT +#define TEST_BIT( x, b ) (((x) & (1<<(b))) != 0 ) +#define SET_BIT( x, b ) ((x) |= (1 << (b))) +#define CLEAR_BIT( x, b ) ((x) &= ~(1 << (b))) +#define TOGGLE_BIT( x, b ) ((TEST_BIT(x,b)) ?(CLEAR_BIT(x,b)):(SET_BIT(x,b))) +#endif + +#ifndef TEST_AND +#define TEST_AND( a, b ) ((a&b)==b) +#endif + + +#ifndef M_PI +#define M_PI 3.141592654 +#endif + +/*********** flush the stdout and stderr output streams *************/ +#ifndef flushout +#define flushout fflush(stdout) +#define flusherr fflush(stderr) +#endif + +/********** Debugging functions *************************************/ +#ifndef error_return +#define error_return( c ); {fprintf(stderr,c);return;} +#endif + +/************************* floating-point random ********************/ +#ifndef randf +#define randf() ((float) rand() / (float)RAND_MAX ) +#endif + +#ifndef SIGN +#define SIGN(x) ((x)>=0 ? 1 : -1) +#endif + +/****************** conversion between degrees and radians **********/ +#ifndef DEG2RAD +#define DEG2RAD(x) ((x)/180.0*M_PI) +#define RAD2DEG(x) ((x)/M_PI*180.0) +#endif + +/***************** clamp a value to some fixed interval *************/ +#ifndef CLAMP +#define CLAMP(x,lo,hi) {if ((x) < (lo)) {(x)=(lo);} else if((x) > (hi)) {(x)=(hi);}} +#endif + +/************ check if a value lies within a closed interval *********/ +#ifndef IN_BOUNDS +#define IN_BOUNDS( x, lo, hi ) ( (x) >= (lo) AND (x) <= (hi) ) +#endif + +/************ check if a 2D point lies within a 2D box ***************/ +#ifndef PT_IN_BOX +#define PT_IN_BOX( x, y, lo_x, hi_x, lo_y, hi_y ) \ +( IN_BOUNDS(x,lo_x,hi_x) AND IN_BOUNDS(y,lo_y,hi_y) ) +#endif + +/****** check if value lies on proper side of another value *****/ +/*** if side is positive => proper side is positive, else negative **/ +#ifndef CHECK_PROPER_SIDE +#define CHECK_PROPER_SIDE(x,val,side) ((side) > 0 ? (x) > (val) : (x) < (val)) +#endif + + +/***** Small value when we want to do a comparison to 'close to zero' *****/ +#ifndef FUDGE +#define FUDGE .00001 +#endif + + +/******************* swap two values, using a temp variable *********/ +#ifndef SWAP2 +#define SWAP2(a,b,t) {t=a;a=b;b=t;} +#endif + +#define VEC3_TO_ARRAY(v,a) a[0]=v[0], a[1]=v[1], a[2]=v[2] + +/**** Return the ASCII control code given the non-control ASCII character */ +#define CTRL(c) ( (c>=('a'-1)) ? (c-'a'+1) : (c-'A'+1) ) + + +#endif /* GLUI_INTERNAL_H */ diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal_control.h b/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal_control.h new file mode 100644 index 00000000..e6f97355 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_internal_control.h @@ -0,0 +1,45 @@ +/* + Header file for use by GLUI controls. + Everything you need is right here. + + +*/ +#ifndef __GLUI_INTERNAL_CONTROL_H +#define __GLUI_INTERNAL_CONTROL_H + +/* This is the main GLUI external header */ +#include "GL/glui.h" + +/* Here's some utility routines */ +#include "glui_internal.h" + + +/** + A GLUI_Control-drawing sentinal object. + On creation, saves the current draw buffer and window. + On destruction, restores draw buffer and window. + This is way nicer than calling save/restore manually. +*/ +class GLUI_DrawingSentinal { + int orig_buf, orig_win; + GLUI_Control *c; +public: + /** The constructor sets up the drawing system */ + GLUI_DrawingSentinal(GLUI_Control *c_); + /** The destructor cleans up drawing back how it was */ + ~GLUI_DrawingSentinal(); + + // Do-nothing routine to avoid compiler warning about unused variable + inline void avoid_warning(void) {} +}; +/** Just drop a GLUI_DRAWINGSENTINAL_IDIOM at the start of your draw methods, +and they'll return if we can't be drawn, and +automatically save and restore all needed state. +*/ +#define GLUI_DRAWINGSENTINAL_IDIOM if (NOT can_draw()) return; GLUI_DrawingSentinal drawSentinal(this); drawSentinal.avoid_warning(); + + +/** Return the time, in seconds. */ +inline double GLUI_Time(void) {return 0.001*glutGet(GLUT_ELAPSED_TIME);} + +#endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_list.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_list.cpp new file mode 100644 index 00000000..a5b09393 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_list.cpp @@ -0,0 +1,540 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_list.cpp - GLUI_List control class + + + -------------------------------------------------- + + Copyright (c) 2004 John Kew + + This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include +#include + +/****************************** GLUI_List::GLUI_List() **********/ + +GLUI_List::GLUI_List( GLUI_Node *parent, bool scroll, + int id, GLUI_CB callback + /*,GLUI_Control *object + GLUI_InterObject_CB obj_cb*/) +{ + common_construct(parent, NULL, scroll, id, callback/*, object, obj_cb*/); +} + +/****************************** GLUI_List::GLUI_List() **********/ + +GLUI_List::GLUI_List( GLUI_Node *parent, + GLUI_String& live_var, bool scroll, + int id, + GLUI_CB callback + /* ,GLUI_Control *object + ,GLUI_InterObject_CB obj_cb*/ ) +{ + common_construct(parent, &live_var, scroll, id, callback/*, object, obj_cb*/); +} + +/****************************** GLUI_List::common_construct() **********/ + +void GLUI_List::common_construct( + GLUI_Node *parent, + GLUI_String* data, bool scroll, + int id, + GLUI_CB callback + /*,GLUI_Control *object + , GLUI_InterObject_CB obj_cb*/) +{ + common_init(); + GLUI_Node *list_panel = parent; + + if (scroll) { + GLUI_Panel *p = new GLUI_Panel(parent,"",GLUI_PANEL_NONE); + p->x_off = 1; + list_panel = p; + } + this->ptr_val = data; + if (data) { + this->live_type = GLUI_LIVE_STRING; + } + this->user_id = id; + this->callback = callback; + this->name = "list"; + list_panel->add_control( this ); + if (scroll) + { + new GLUI_Column(list_panel, false); + scrollbar = + new GLUI_Scrollbar(list_panel, + "scrollbar", + GLUI_SCROLL_VERTICAL, + GLUI_SCROLL_INT); + scrollbar->set_object_callback(GLUI_List::scrollbar_callback, this); + scrollbar->set_alignment(GLUI_ALIGN_LEFT); + // scrollbar->can_activate = false; //kills ability to mouse drag too + } + init_live(); +} + +/****************************** GLUI_List::mouse_down_handler() **********/ +int GLUI_List::mouse_down_handler( int local_x, int local_y ) +{ + int tmp_line; + unsigned long int ms; + timeb time; + ftime(&time); + ms = time.millitm + (time.time)*1000; + + tmp_line = find_line( local_x-x_abs, local_y-y_abs-5 ); + if ( tmp_line == -1 ) { + if ( glui ) + glui->deactivate_current_control( ); + return false; + } + + if (tmp_line < num_lines) { + curr_line = tmp_line; + if (scrollbar) + scrollbar->set_int_val(curr_line); + this->execute_callback(); + if (associated_object != NULL) + if (cb_click_type == GLUI_SINGLE_CLICK) { + if (obj_cb) { + // obj_cb(associated_object, user_id); + obj_cb(this); + } + } else { + if (last_line == curr_line && (ms - last_click_time) < 300) { + //obj_cb(associated_object, user_id); + obj_cb(this); + } else { + last_click_time = ms; + last_line = curr_line; + } + } + if ( can_draw()) + update_and_draw_text(); + } + + return true; +} + + + + +/******************************** GLUI_List::mouse_up_handler() **********/ + +int GLUI_List::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + return false; +} + + +/***************************** GLUI_List::mouse_held_down_handler() ******/ + +int GLUI_List::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + return false; +} + + +/****************************** GLUI_List::key_handler() **********/ + +int GLUI_List::key_handler( unsigned char key,int modifiers ) +{ + + + draw_text_only = false; /** Well, hack is not yet working **/ + update_and_draw_text(); + draw_text_only = false; + + return true; +} + + +/****************************** GLUI_List::activate() **********/ + +void GLUI_List::activate( int how ) +{ +// if ( debug ) +// dump( stdout, "-> ACTIVATE" ); + active = true; + + if ( how == GLUI_ACTIVATE_MOUSE ) + return; /* Don't select everything if activated with mouse */ + +} + + +/****************************** GLUI_List::deactivate() **********/ + +void GLUI_List::deactivate( void ) +{ + active = false; + redraw(); +} + +/****************************** GLUI_List::draw() **********/ + +void GLUI_List::draw( int x, int y ) +{ + int line = 0; + int box_width; + GLUI_List_Item *item; + + GLUI_DRAWINGSENTINAL_IDIOM + + /* Bevelled Border */ + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( 0, 0 ); glVertex2i( w, 0 ); + glVertex2i( 0, 0 ); glVertex2i( 0, h ); + + glColor3f( 1., 1., 1. ); + glVertex2i( 0, h ); glVertex2i( w, h ); + glVertex2i( w, h ); glVertex2i( w, 0 ); + + if ( enabled ) + glColor3f( 0., 0., 0. ); + else + glColor3f( .25, .25, .25 ); + glVertex2i( 1, 1 ); glVertex2i( w-1, 1 ); + glVertex2i( 1, 1 ); glVertex2i( 1, h-1 ); + + glColor3f( .75, .75, .75 ); + glVertex2i( 1, h-1 ); glVertex2i( w-1, h-1 ); + glVertex2i( w-1, h-1 ); glVertex2i( w-1, 1 ); + glEnd(); + + /* Draw Background if enabled*/ + if (enabled) { + glColor3f( 1., 1., 1. ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( 2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i(2, h-2 ); + glEnd(); + } else { + glColor3f( .8, .8, .8 ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( 2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i(2, h-2 ); + glEnd(); + } + + /* Figure out how wide the box is */ + box_width = get_box_width(); + + /* Figure out which lines are visible*/ + + visible_lines = (int)(h-20)/15; + + item = (GLUI_List_Item *) items_list.first_child(); + + line = 0; + while (item) { + if (line < start_line) { + line++; + item = (GLUI_List_Item *) item->next(); + continue; + } + if (line >= start_line && line <= (start_line+visible_lines)) { + if (curr_line == line) + draw_text(item->text.c_str(),1,0,(line - start_line)*15); + else + draw_text(item->text.c_str(),0,0,(line - start_line)*15); + } + line++; + item = (GLUI_List_Item *) item->next(); + } + + if (scrollbar) { + scrollbar->set_int_limits(MAX(0,num_lines-visible_lines), 0); + glPushMatrix(); + glTranslatef(scrollbar->x_abs-x_abs, scrollbar->y_abs-y_abs,0.0); + scrollbar->draw_scroll(); + glPopMatrix(); + } +} + +/********************************* GLUI_List::draw_text() ****************/ + +void GLUI_List::draw_text(const char *t, int selected, int x, int y ) +{ + int text_x, i, x_pos; + int box_width; + + GLUI_DRAWINGSENTINAL_IDIOM + + /** Find where to draw the text **/ + + text_x = 2 + GLUI_LIST_BOXINNERMARGINX; + + /** Draw selection area dark **/ + if ( enabled && selected ) { + glColor3f( 0.0f, 0.0f, .6f ); + glBegin( GL_QUADS ); + glVertex2i(text_x, y+5 ); glVertex2i( w-text_x, y+5 ); + glVertex2i(w-text_x, y+19 ); glVertex2i(text_x, y+19 ); + glEnd(); + } + box_width = get_box_width(); + + if ( !selected || !enabled ) { /* No current selection */ + x_pos = text_x; /* or control disabled */ + if ( enabled ) + glColor3b( 0, 0, 0 ); + else + glColor3b( 32, 32, 32 ); + + glRasterPos2i( text_x, y+15); + i = 0; + while( t[i] != '\0' && substring_width(t,0,i) < box_width) { + glutBitmapCharacter( get_font(), t[i] ); + x_pos += char_width( t[i] ); + i++; + } + } + else { /* There is a selection */ + i = 0; + x_pos = text_x; + glColor3f( 1., 1., 1. ); + glRasterPos2i( text_x, y+15); + while( t[i] != '\0' && substring_width(t,0,i) < box_width) { + glutBitmapCharacter( get_font(), t[i] ); + x_pos += char_width( t[i] ); + i++; + } + } +} + + +int GLUI_List::find_line(int x, int y) { + return start_line + ((int)(y/15)); +} + +int GLUI_List::get_box_width() { + return MAX( this->w + - 6 /* 2 * the two-line box border */ + - 2 * GLUI_LIST_BOXINNERMARGINX, 0 ); + +} + +/******************************** GLUI_List::substring_width() *********/ +int GLUI_List::substring_width( const char *t, int start, int end ) +{ + int i, width; + + width = 0; + + for( i=start; i<=end; i++ ) + width += char_width( t[i] ); + + return width; +} + + +/***************************** GLUI_List::update_and_draw_text() ********/ + +void GLUI_List::update_and_draw_text( void ) +{ + if ( NOT can_draw() ) + return; + + //update_substring_bounds(); + /* printf( "ss: %d/%d\n", substring_start, substring_end ); */ + + redraw(); +} + + +/********************************* GLUI_List::special_handler() **********/ + +int GLUI_List::special_handler( int key,int modifiers ) +{ + if ( NOT glui ) + return false; + + if ( key == GLUT_KEY_DOWN ) { + if (curr_line < num_lines) { + curr_line++; + if (curr_line > start_line+visible_lines) + start_line++; + } + } else if ( key == GLUT_KEY_UP ) { + if (curr_line > 0) { + curr_line--; + if (curr_line < start_line) + start_line--; + } + } + + if (scrollbar) + scrollbar->set_int_val(curr_line); + redraw(); + return true; +} + + +/************************************ GLUI_List::update_size() **********/ + +void GLUI_List::update_size( void ) +{ + if ( NOT glui ) + return; + + if ( w < GLUI_LIST_MIN_TEXT_WIDTH ) + w = GLUI_LIST_MIN_TEXT_WIDTH; +} + +/**************************************** GLUI_Listbox::add_item() **********/ + +int GLUI_List::add_item( int id, const char *new_text ) +{ + GLUI_List_Item *new_node = new GLUI_List_Item; + GLUI_List_Item *head; + + new_node->text = new_text; + new_node->id = id; + + head = (GLUI_List_Item*) items_list.first_child(); + new_node->link_this_to_parent_last( &items_list ); + + if ( head == NULL ) { + /*** This is first item added ***/ + + int_val = id+1; /** Different than id **/ + // do_selection( id ); + last_live_int = id; + + if( glui ) + glui->post_update_main_gfx(); + } + num_lines++; + if (scrollbar) + scrollbar->set_int_limits(MAX(num_lines-visible_lines,0), 0); + + return true; +} + +/************************************** GLUI_Listbox::delete_() **********/ + +int GLUI_List::delete_all() +{ + GLUI_List_Item *item; + + item = (GLUI_List_Item *) items_list.first_child(); + while( item ) { + item->unlink(); + delete item; + item = (GLUI_List_Item *) items_list.first_child(); + } + + num_lines = 0; + curr_line = 0; + + return true; +} + + +/************************************** GLUI_Listbox::delete_item() **********/ + +int GLUI_List::delete_item( const char *text ) +{ + GLUI_List_Item *node = get_item_ptr( text ); + + if ( node ) { + node->unlink(); + delete node; + num_lines--; + return true; + } + else { + return false; + } +} + + +/************************************** GLUI_Listbox::delete_item() **********/ + +int GLUI_List::delete_item( int id ) +{ + GLUI_List_Item *node = get_item_ptr( id ); + + if ( node ) { + node->unlink(); + delete node; + num_lines--; + return true; + } + else { + return false; + } +} + + +/************************************ GLUI_Listbox::get_item_ptr() **********/ + +GLUI_List_Item *GLUI_List::get_item_ptr( const char *text ) +{ + GLUI_List_Item *item; + + item = (GLUI_List_Item *) items_list.first_child(); + while( item ) { + if ( item->text == text ) + return item; + + item = (GLUI_List_Item *) item->next(); + } + + return NULL; +} + + +/************************************ GLUI_Listbox::get_item_ptr() **********/ + +GLUI_List_Item *GLUI_List::get_item_ptr( int id ) +{ + GLUI_List_Item *item; + + item = (GLUI_List_Item *) items_list.first_child(); + while( item ) { + if ( item->id == id ) + return item; + + item = (GLUI_List_Item *) item->next(); + } + + return NULL; +} + +/**************************************** GLUI_List::mouse_over() ********/ + +int GLUI_List::mouse_over( int state, int x, int y ) +{ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + + return true; +} + +void GLUI_List::scrollbar_callback(GLUI_Control *my_scrollbar) { + GLUI_Scrollbar *sb = dynamic_cast(my_scrollbar); + if (!sb) return; + GLUI_List* me = (GLUI_List*) sb->associated_object; + if (me->scrollbar == NULL) + return; + int new_start_line = sb->get_int_val(); // TODO!! + me->start_line = new_start_line; + + if ( me->can_draw() ) + me->update_and_draw_text(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_listbox.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_listbox.cpp new file mode 100644 index 00000000..3eda3107 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_listbox.cpp @@ -0,0 +1,448 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_listbox - GLUI_ListBox control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/****************************** GLUI_Listbox::GLUI_Listbox() **********/ +GLUI_Listbox::GLUI_Listbox( GLUI_Node *parent, + const char *name, int *value_ptr, + int id, + GLUI_CB cb) +{ + common_init(); + set_ptr_val( value_ptr ); + user_id = id; + set_name( name ); + callback = cb; + + parent->add_control( this ); + + init_live(); +} + + +/****************************** GLUI_Listbox::mouse_down_handler() **********/ + +int GLUI_Listbox::mouse_down_handler( int local_x, int local_y ) +{ + return false; +} + + +/****************************** GLUI_Listbox::mouse_up_handler() **********/ + +int GLUI_Listbox::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + + return false; +} + + +/****************************** GLUI_Listbox::mouse_held_down_handler() ******/ + +int GLUI_Listbox::mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + + return false; +} + + +/****************************** GLUI_Listbox::key_handler() **********/ + +int GLUI_Listbox::key_handler( unsigned char key,int modifiers ) +{ + return false; +} + + +/****************************** GLUI_Listbox::draw() **********/ + +void GLUI_Listbox::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int name_x; + + /* draw_active_area(); */ + + name_x = MAX(text_x_offset - string_width(this->name) - 3,0); + draw_name( name_x , 13); + draw_box_inwards_outline( text_x_offset, w, + 0, h ); + + if ( NOT active ) { + draw_box( text_x_offset+3, w-2, 2, h-2, 1.0, 1.0, 1.0 ); + if ( NOT enabled ) + glColor3b( 32, 32, 32 ); + else + glColor3f( 0.0, 0.0, 0.0 ); + glRasterPos2i( text_x_offset+5, 13 ); + draw_string( curr_text ); + } + else { + draw_box( text_x_offset+3, w-2, 2, h-2, .0, .0, .6 ); + glColor3f( 1.0, 1.0, 1.0 ); + glRasterPos2i( text_x_offset+5, 13 ); + draw_string( curr_text ); + } + + + if ( enabled ) { + glui->std_bitmaps. + draw(GLUI_STDBITMAP_LISTBOX_UP, + w-glui->std_bitmaps.width(GLUI_STDBITMAP_LISTBOX_UP)-1, + 2 ); + } + else { + glui->std_bitmaps. + draw(GLUI_STDBITMAP_LISTBOX_UP_DIS, + w-glui->std_bitmaps.width(GLUI_STDBITMAP_LISTBOX_UP)-1, + 2 ); + } +} + + +/************************************ GLUI_Listbox::update_si() **********/ +void GLUI_Listbox::update_size( void ) +{ + recalculate_item_width(); +} + +/********************************* GLUI_Listbox::set_int_val() **************/ + +void GLUI_Listbox::set_int_val( int new_val ) +{ + /* int_val = new_val; */ + + do_selection( new_val ); + + /*** Update the variable we're (possibly) pointing to, and update the main gfx ***/ + output_live(true); +} + +/**************************************** GLUI_Listbox::add_item() **********/ + +int GLUI_Listbox::add_item( int id, const char *new_text ) +{ + GLUI_Listbox_Item *new_node = new GLUI_Listbox_Item; + GLUI_Listbox_Item *head; + + new_node->text = new_text; + new_node->id = id; + + head = (GLUI_Listbox_Item*) items_list.first_child(); + new_node->link_this_to_parent_last( &items_list ); + + if ( head == NULL ) { + /*** This is first item added ***/ + + int_val = id+1; /** Different than id **/ + do_selection( id ); + last_live_int = id; + + if( glui ) + glui->post_update_main_gfx(); + } + if (recalculate_item_width()) glui->refresh(); + + return true; +} + + +/************************************** GLUI_Listbox::delete_item() **********/ + +int GLUI_Listbox::delete_item( const char *text ) +{ + GLUI_Listbox_Item *node = get_item_ptr(text); + + if (node) + { + node->unlink(); + delete node; + return true; + } + if (recalculate_item_width()) glui->refresh(); + + return false; +} + + +/************************************** GLUI_Listbox::delete_item() **********/ + +int GLUI_Listbox::delete_item(int id) +{ + GLUI_Listbox_Item *node = get_item_ptr(id); + + if (node) + { + node->unlink(); + delete node; + return true; + } + if (recalculate_item_width()) glui->refresh(); + + return false; +} + + +/************************************** GLUI_Listbox::sort_items() **********/ + +int GLUI_Listbox::sort_items( void ) +{ + return false; +} + + +/********************************************* GLUI_Listbox::dump() **********/ + +void GLUI_Listbox::dump( FILE *output ) +{ + GLUI_Listbox_Item *item; + + /* printf( "%p\n", (char*) name ); */ + + fprintf( output, "Listbox: %s\n", name.c_str() ); + + item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + fprintf( output, " %3d : %s\n", item->id, item->text.c_str() ); + + item = (GLUI_Listbox_Item *) item->next(); + } +} + + +/************************************ GLUI_Listbox::get_item_ptr() **********/ + +GLUI_Listbox_Item *GLUI_Listbox::get_item_ptr( const char *text ) +{ + GLUI_Listbox_Item *item; + + item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + if ( item->text == text ) + return item; + + item = (GLUI_Listbox_Item *) item->next(); + } + + return NULL; +} + + +/************************************ GLUI_Listbox::get_item_ptr() **********/ + +GLUI_Listbox_Item *GLUI_Listbox::get_item_ptr( int id ) +{ + GLUI_Listbox_Item *item; + + item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + if ( item->id == id ) + return item; + + item = (GLUI_Listbox_Item *) item->next(); + } + + return NULL; +} + + +/************************************ GLUI_Listbox::mouse_over() **********/ + +static void listbox_callback( int i ) +{ + int old_val; + + if ( NOT GLUI_Master.curr_left_button_glut_menu OR + !dynamic_cast(GLUI_Master.curr_left_button_glut_menu) ) + return; + + old_val = ((GLUI_Listbox*)GLUI_Master.curr_left_button_glut_menu)->int_val; + ((GLUI_Listbox*)GLUI_Master.curr_left_button_glut_menu)->set_int_val(i); + + /**** If value changed, execute callback ****/ + if ( old_val != + ((GLUI_Listbox*)GLUI_Master.curr_left_button_glut_menu)->int_val ) { + ((GLUI_Listbox*)GLUI_Master.curr_left_button_glut_menu)->execute_callback(); + } +} + + +/*************************************** GLUI_Listbox::mouse_over() **********/ + +int GLUI_Listbox::mouse_over( int state, int x, int y ) +{ + GLUI_Listbox_Item *item; + + /* printf( "x/y: %d/%d\n", x, y ); */ + + if ( state AND enabled AND x > x_abs + text_x_offset) { + /**** Build a GLUT menu for this listbox ***/ + + /* printf( "%d %d\n", x, y ); */ + + glut_menu_id = glutCreateMenu(listbox_callback); + + item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + glutAddMenuEntry( item->text.c_str(), item->id ); + item = (GLUI_Listbox_Item *) item->next(); + } + + glutAttachMenu( GLUT_LEFT_BUTTON); + + GLUI_Master.set_left_button_glut_menu_control( this ); + } + else if ( glut_menu_id != -1 ) { + /* printf( "OUT\n" ); */ + glutDetachMenu( GLUT_LEFT_BUTTON ); + glutDestroyMenu( glut_menu_id ); + glut_menu_id = -1; + } + + return true; +} + + +/************************************ GLUI_Listbox::do_selection() **********/ + +int GLUI_Listbox::do_selection( int item_num ) +{ + GLUI_Listbox_Item *item, *sel_item; + + /*** Is this item already selected? ***/ + if ( item_num == int_val ) + return false; + + sel_item = NULL; + item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + if ( item->id == item_num ) { + sel_item = item; + break; + } + + item = (GLUI_Listbox_Item *) item->next(); + } + + if ( NOT sel_item ) + return false; + + /* printf( "-> %s\n", (char*) sel_item->text ); */ + + int_val = item_num; + curr_text = sel_item->text; + redraw(); + + return true; +} + + +/*********************************** GLUI_Listbox::~GLUI_Listbox() **********/ + +GLUI_Listbox::~GLUI_Listbox() +{ + GLUI_Listbox_Item *item = (GLUI_Listbox_Item *) items_list.first_child(); + + while (item) + { + GLUI_Listbox_Item *tmp = item; + item = (GLUI_Listbox_Item *) item->next(); + delete tmp; + } +} + +/****************************** GLUI_Listbox::special_handler() **********/ + +int GLUI_Listbox::special_handler( int key,int modifiers ) +{ + GLUI_Listbox_Item *node, *new_node; + + node = get_item_ptr( int_val ); + new_node = NULL; + + if ( key == GLUT_KEY_DOWN ) { + new_node = (GLUI_Listbox_Item*) node->next(); + } + else if ( key == GLUT_KEY_UP ) { + new_node = (GLUI_Listbox_Item*) node->prev(); + } + else if ( key == GLUT_KEY_HOME ) { + new_node = (GLUI_Listbox_Item*) items_list.first_child(); + } + else if ( key == GLUT_KEY_END ) { + new_node = (GLUI_Listbox_Item*) items_list.last_child(); + } + + if ( new_node != NULL AND new_node != node ) { + node = new_node; + set_int_val( node->id ); + execute_callback(); + return true; + } + else { + return false; + } +} + + +/************************* GLUI_Listbox::recalculate_item_width( void ) ***********/ +/** Change w and return true if we need to be widened to fit the current items. */ +bool GLUI_Listbox::recalculate_item_width( void ) +{ + int item_text_size; + + if ( NOT glui ) + return false; + + /* Find the title size */ + text_x_offset = string_width( name ); + + /* Find the longest item string ***/ + item_text_size = 0; + + GLUI_Listbox_Item *item = (GLUI_Listbox_Item *) items_list.first_child(); + while( item ) { + item_text_size = MAX(item_text_size,string_width(item->text)); + item = (GLUI_Listbox_Item *) item->next(); + } + + /* Sum up our layout: name, item, and drop-down marker */ + int new_wid=text_x_offset+MAX(GLUI_EDITTEXT_MIN_TEXT_WIDTH,item_text_size)+20; + if ( w != new_wid) { + w = new_wid; + return true; /* we gotta be shortened or widened */ + } + else { + return false; /* our current width is OK */ + } +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_mouse_iaction.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_mouse_iaction.cpp new file mode 100644 index 00000000..bc9f0610 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_mouse_iaction.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_mouse_iaction - GLUI Mouse Interaction control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/********************** GLUI_Mouse_Interaction::mouse_down_handler() ******/ + +int GLUI_Mouse_Interaction::mouse_down_handler( int local_x, int local_y ) +{ + /* int win_h = glutGet( GLUT_WINDOW_HEIGHT ); */ + + /* iaction_mouse_down_handler( local_x, local_y ); */ + iaction_mouse_down_handler( local_x-x_abs, local_y-y_abs ); + /*local_x-x_abs, ((glui->h-local_y)-y_abs) ); */ + redraw(); + + return false; +} + + +/**************************** GLUI_Mouse_Interaction::mouse_up_handler() */ + +int GLUI_Mouse_Interaction::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + iaction_mouse_up_handler( local_x-x_abs, local_y-y_abs, inside ); + return false; +} + + +/****************************** GLUI_Mouse_Interaction::mouse_held_down_handler() ******/ + +int GLUI_Mouse_Interaction::mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + iaction_mouse_held_down_handler( local_x-x_abs, local_y-y_abs , inside ); + + redraw(); + + /** Tell the main graphics window to update iteself **/ + if( glui ) + glui->post_update_main_gfx(); + + execute_callback(); + + return false; +} + + + +/****************************** GLUI_Mouse_Interaction::draw() **********/ + +void GLUI_Mouse_Interaction::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int text_width = string_width( this->name ); + int x_left = this->w/2 - text_width/2; + + if ( NOT draw_active_area_only ) { + draw_name( x_left, h-4 ); + draw_active_box( x_left-4, x_left+string_width( name )+4, + h, h-14 ); + } + + draw_active_area(); +} + + +/************************************ GLUI_Mouse_Interaction::update_size() **********/ + +void GLUI_Mouse_Interaction::update_size( void ) +{ + if ( NOT glui ) + return; + + int text_width = string_width( this->name ); + + if ( w < text_width+6 ) + w = text_width+6; + + if ( h - 18 > w ) + w = h - 18; + + iaction_init(); +} + + +/****************************** GLUI_Mouse_Interaction::special_handler() **********/ + +int GLUI_Mouse_Interaction::special_handler( int key,int modifiers ) +{ + int center_x, center_y; + int drag_x, drag_y; + + center_x = w/2; + center_y = (h-18)/2; + drag_x = 0; + drag_y = 0; + + if ( key == GLUT_KEY_LEFT ) + drag_x = -6; + else if ( key == GLUT_KEY_RIGHT ) + drag_x = 6; + else if ( key == GLUT_KEY_UP ) + drag_y = -6; + else if ( key == GLUT_KEY_DOWN ) + drag_y = 6; + + if ( drag_x != 0 OR drag_y != 0 ) { + mouse_down_handler( center_x, center_y ); + mouse_held_down_handler( center_x + drag_x, center_y + drag_y,true ); + mouse_up_handler( center_x + drag_x, center_y + drag_y, true ); + } + + return false; +} + + +/****************************** GLUI_Mouse_Interaction::draw_active_area() **********/ + +void GLUI_Mouse_Interaction::draw_active_area( void ) +{ + int win_h = glutGet( GLUT_WINDOW_HEIGHT ), win_w = glutGet(GLUT_WINDOW_WIDTH); + + int text_height = 18; /* what a kludge */ + + int viewport_size = h-text_height; /*MIN(w,h); */ + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glLoadIdentity(); + glTranslatef( (float) win_w/2.0, (float) win_h/2.0, 0.0 ); + glRotatef( 180.0, 0.0, 1.0, 0.0 ); + glRotatef( 180.0, 0.0, 0.0, 1.0 ); + glTranslatef( (float) -win_w/2.0, (float) -win_h/2.0, 0.0 ); + + glTranslatef( (float) this->x_abs + .5, (float) this->y_abs + .5, 0.0 ); + + glTranslatef( (float)this->w/2.0, (float)viewport_size/2.0 + 2.0 , 0.0 ); + + /*** Draw the interaction control's orthographic elements ***/ + iaction_draw_active_area_ortho(); + + /*** Setup and draw the interaction control's perspective elements ***/ + + /*** Set the viewport to just the square of the drawing area ***/ + /* glViewport( this->x_abs , glui->main_panel->h - this->y_abs - this->h,*/ + /*glViewport( this->x_abs+1+(this->w/2-viewport_size/2), + this->h-this->y_abs-viewport_size-1, + viewport_size, viewport_size );*/ + + viewport_size -= 4; + int offset = 0; + if ( ((this->w-viewport_size) % 2) == 1 ) + offset = 1; + + glViewport( this->x_abs + (this->w-viewport_size)/2 + offset, + win_h - this->y_abs - this->h + text_height, + viewport_size, viewport_size ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + double xy=1.00,zc=50.0; /* X-Y size, and Z origin */ + glFrustum( -1.0*xy, 1.0*xy, -xy, xy, zc*0.7, zc*1.3 ); + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -zc ); + glScalef(xy,xy,1.0); // xy); + + /* glutSolidTeapot( 1.0 ); */ + iaction_draw_active_area_persp(); + + glMatrixMode( GL_MODELVIEW ); + glPopMatrix(); + + glui->set_viewport(); + glui->set_ortho_projection(); + + glMatrixMode( GL_MODELVIEW ); + glPopMatrix(); +} + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_node.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_node.cpp new file mode 100644 index 00000000..4cfd71df --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_node.cpp @@ -0,0 +1,212 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_node.cpp - linked-list tree structure + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" + +/********************************************* GLUI_Node::GLUI_Node() *******/ + +GLUI_Node::GLUI_Node() +: + parent_node(NULL), + child_head(NULL), + child_tail(NULL), + next_sibling(NULL), + prev_sibling(NULL) +{ +} + +/********************************************* GLUI_Node::first() *******/ +/* Returns first sibling in 'this' node's sibling list */ + +GLUI_Node *GLUI_Node::first_sibling( void ) +{ + if ( parent_node == NULL ) + return this; /* root node has no siblings */ + else + return parent_node->child_head; +} + + +/******************************************** GLUI_Node::next() ********/ +/* Returns next sibling in 'this' node's sibling list */ + +GLUI_Node *GLUI_Node::next( void ) +{ + return next_sibling; +} + + +/******************************************** GLUI_Node::prev() ********/ +/* Returns prev sibling in 'this' node's sibling list */ + +GLUI_Node *GLUI_Node::prev( void ) +{ + return prev_sibling; +} + + +/********************************************* GLUI_Node::last() *******/ +/* Returns last sibling in 'this' node's sibling list */ + +GLUI_Node *GLUI_Node::last_sibling( void ) +{ + if ( parent_node == NULL ) + return this; /* root node has no siblings */ + else + return parent_node->child_tail; +} + + +/*************************** GLUI_Node::link_this_to_parent_last() *******/ +/* Links as last child of parent */ + +void GLUI_Node::link_this_to_parent_last( GLUI_Node *new_parent ) +{ + if ( new_parent->child_tail == NULL ) { /* parent has no children */ + new_parent->child_head = this; + new_parent->child_tail = this; + this->parent_node = new_parent; + } + else { /* parent has children */ + new_parent->child_tail->next_sibling = this; + this->prev_sibling = new_parent->child_tail; + new_parent->child_tail = this; + this->parent_node = new_parent; + } +} + + +/*************************** GLUI_Node::link_this_to_parent_first() *******/ +/* Links as first child of parent */ + +void GLUI_Node::link_this_to_parent_first( GLUI_Node *new_parent ) +{ + if ( new_parent->child_head == NULL ) { /* parent has no children */ + new_parent->child_head = this; + new_parent->child_tail = this; + this->parent_node = new_parent; + } + else { /* parent has children */ + new_parent->child_head->prev_sibling = this; + this->next_sibling = new_parent->child_head; + new_parent->child_head = this; + this->parent_node = new_parent; + } +} + +/**************************** GLUI_Node::link_this_to_sibling_next() *****/ + +void GLUI_Node::link_this_to_sibling_next( GLUI_Node *sibling ) +{ + if ( sibling->next_sibling == NULL ) { /* node has no next sibling */ + sibling->next_sibling = this; + this->prev_sibling = sibling; + + /* This was the parent's last child, so update that as well */ + if ( sibling->parent_node != NULL ) { + sibling->parent_node->child_tail = this; + } + } + else { /* node already has a next sibling */ + sibling->next_sibling->prev_sibling = this; + this->next_sibling = sibling->next_sibling; + sibling->next_sibling = this; + this->prev_sibling = sibling; + } + + this->parent_node = sibling->parent_node; +} + + +/**************************** GLUI_Node::link_this_to_sibling_prev() *****/ + +void GLUI_Node::link_this_to_sibling_prev( GLUI_Node *sibling ) +{ + if ( sibling->prev_sibling == NULL ) { /* node has no prev sibling */ + sibling->prev_sibling = this; + this->next_sibling = sibling; + + /* This was the parent's first child, so update that as well */ + if ( sibling->parent_node != NULL ) { + sibling->parent_node->child_head = this; + } + } + else { /* node already has a prev sibling */ + sibling->prev_sibling->next_sibling = this; + this->prev_sibling = sibling->prev_sibling; + sibling->prev_sibling = this; + this->next_sibling = sibling; + } + + this->parent_node = sibling->parent_node; +} + +/**************************************** GLUI_Node::unlink() **************/ + +void GLUI_Node::unlink( void ) +{ + /* Unlink from prev sibling */ + if ( this->prev_sibling != NULL ) { + this->prev_sibling->next_sibling = this->next_sibling; + } + else { /* No prev sibling: this was parent's first child */ + this->parent_node->child_head = this->next_sibling; + } + + /* Unlink from next sibling */ + if ( this->next_sibling != NULL ) { + this->next_sibling->prev_sibling = this->prev_sibling; + } + else { /* No next sibling: this was parent's last child */ + this->parent_node->child_tail = this->prev_sibling; + } + + this->parent_node = NULL; + this->next_sibling = NULL; + this->prev_sibling = NULL; + this->child_head = NULL; + this->child_tail = NULL; +} + +/**************************************** GLUI_Node::dump() **************/ + +void GLUI_Node::dump( FILE *out, const char *name ) +{ + fprintf( out, "GLUI_node: %s\n", name ); + fprintf( out, " parent: %p child_head: %p child_tail: %p\n", + (void *) parent_node, + (void *) child_head, + (void *) child_tail ); + fprintf( out, " next: %p prev: %p\n", + (void *) next_sibling, + (void *) prev_sibling ); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_panel.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_panel.cpp new file mode 100644 index 00000000..687b7797 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_panel.cpp @@ -0,0 +1,186 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_panel.cpp - GLUI_Panel control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +GLUI_Panel::GLUI_Panel( GLUI_Node *parent, const char *name, int type ) +{ + common_init(); + set_name( name ); + user_id = -1; + int_val = type; + + parent->add_control( this ); +} + +/****************************** GLUI_Panel::draw() **********/ + +void GLUI_Panel::draw( int x, int y ) +{ + int top; + GLUI_DRAWINGSENTINAL_IDIOM + + if ( int_val == GLUI_PANEL_RAISED ) { + top = 0; + glLineWidth( 1.0 ); + glColor3f( 1.0, 1.0, 1.0 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( 0, top ); glVertex2i( w, top ); + glVertex2i( 0, top ); glVertex2i( 0, h ); + glEnd(); + + glColor3f( .5, .5, .5 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( w, top ); + glVertex2i( w, h ); + glVertex2i( 0, h ); + glVertex2i( w, h ); + glEnd(); + + /** ORIGINAL RAISED PANEL METHOD - A LITTLE TOO HIGH ** + glLineWidth(1.0); + glBegin( GL_LINES ); + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i( 1, 1 ); glVertex2i( w-2, 1 ); + glVertex2i( 1, 1 ); glVertex2i( 1, h-2 ); + + glColor3f( .5, .5, .5 ); + glVertex2i( w-1, 1 ); glVertex2i( w-1, h-1 ); + glVertex2i( 1, h-1 ); glVertex2i( w-1, h-1 ); + + glColor3f( 0.0, 0.0, 0.0 ); + glVertex2i( 0, h ); glVertex2i( w, h ); + glVertex2i( w, 0 ); glVertex2i( w, h ); + glEnd(); + + -- Touch up the lines a bit (needed in some opengl implementations + glBegin( GL_POINTS ); + glColor3f( .5, .5, .5 ); + glVertex2i( w-1, h-1 ); + glColor3f( 0.0, 0.0, 0.0 ); + glVertex2i( w, h ); + glEnd(); + **/ + } + else if ( int_val == GLUI_PANEL_EMBOSSED ) { + if ( parent_node == NULL || name == "" ) { + top = 0; + } + else { + top = GLUI_PANEL_EMBOSS_TOP; + } + + glLineWidth( 1.0 ); + glColor3f( 1.0, 1.0, 1.0 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( 0, top ); glVertex2i( w, top ); + glVertex2i( w, h ); glVertex2i( 0, h ); + + glVertex2i( 1, top+1 ); glVertex2i( w-1, top+1 ); + glVertex2i( w-1, h-1 ); glVertex2i( 1, h-1 ); + glEnd(); + + glColor3f( .5, .5, .5 ); + glBegin( GL_LINE_LOOP ); + glVertex2i( 0, top ); + glVertex2i( w-1, top ); + glVertex2i( w-1, h-1 ); + glVertex2i( 0, h-1 ); + glEnd(); + + /**** Only display text in embossed panel ****/ + if ( parent_node != NULL && name != "" ) { /* Only draw non-null strings */ + int left = 7, height=GLUI_PANEL_NAME_DROP+1; + int str_width; + + str_width = string_width(name); + + if ( glui ) + glColor3ub(glui->bkgd_color.r,glui->bkgd_color.g,glui->bkgd_color.b); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( left-3, 0 ); glVertex2i( left+str_width+3, 0 ); + glVertex2i( left+str_width+3, height ); glVertex2i( left-3, height ); + glEnd(); + + draw_name( left, GLUI_PANEL_NAME_DROP ); + } + } + + glLineWidth( 1.0 ); +} + +/****************************** GLUI_Panel::set_name() **********/ + +void GLUI_Panel::set_name( const char *new_name ) +{ + name = new_name ? new_name : ""; + + update_size(); + + if ( glui ) + glui->refresh(); +} + + +/****************************** GLUI_Panel::set_type() **********/ + +void GLUI_Panel::set_type( int new_type ) +{ + if ( new_type != int_val ) { + int_val = new_type; + update_size(); + redraw(); + } +} + + +/************************************** GLUI_Panel::update_size() **********/ + +void GLUI_Panel::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = string_width(name); + + if ( w < text_size + 16 ) + w = text_size + 16 ; + + if ( name != "" AND int_val == GLUI_PANEL_EMBOSSED ) { + this->y_off_top = GLUI_YOFF + 8; + } + else { + this->y_off_top = GLUI_YOFF; + } +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_radio.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_radio.cpp new file mode 100644 index 00000000..157d18e8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_radio.cpp @@ -0,0 +1,362 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_radio.cpp - GLUI_RadioGroup and GLUI_RadioButton control classes + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include + +/****************************** GLUI_RadioGroup::GLUI_RadioGroup() **********/ + +GLUI_RadioGroup::GLUI_RadioGroup(GLUI_Node *parent, + int *value_ptr, + int id, GLUI_CB cb) +{ + common_init(); + GLUI_String buf; + + set_ptr_val( value_ptr ); + if ( value_ptr ) { + int_val = *value_ptr; /** Can't call set_int_val(), b/c that + function will try to call the + callback, etc */ + /** Actually, maybe not **/ + last_live_int = *value_ptr; + } + + user_id = id; + glui_format_str( buf, "RadioGroup: %p", this ); + set_name( buf.c_str() ); + callback = cb; + + parent->add_control( this ); + + init_live(); +} + + +/****************************** GLUI_RadioGroup::draw() **********/ + +void GLUI_RadioGroup::draw( int x, int y ) +{ + if ( NOT can_draw() ) + return; + + draw_group(false); +} + + +/********************* GLUI_RadioGroup::draw_group(int translate) **********/ + +void GLUI_RadioGroup::draw_group( int translate ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + GLUI_RadioButton *button; + this->int_val = int_val; + + glMatrixMode(GL_MODELVIEW ); + + button = (GLUI_RadioButton*) first_child(); + while( button != NULL ) { + glPushMatrix(); + if (translate) { + button->translate_to_origin(); + } + else { + glTranslatef(button->x_abs-x_abs, + button->y_abs-y_abs,0.0); + } + + if ( button->int_val ) + button->draw_checked(); + else + button->draw_unchecked(); + + glPopMatrix(); + + button = (GLUI_RadioButton*) button->next(); + } +} + + +/****************************** GLUI_RadioGroup::set_name() **********/ + +void GLUI_RadioGroup::set_name( const char *text ) +{ + name = text; + + if ( glui ) + glui->refresh(); +} + + +/********************************* GLUI_RadioGroup::set_selected() **********/ + +void GLUI_RadioGroup::set_selected( int int_val ) +{ + GLUI_RadioButton *button; + + this->int_val = int_val; + + button = (GLUI_RadioButton*) first_child(); + while( button != NULL ) { + if ( int_val == -1 ) { /*** All buttons in group are deselected ***/ + button->set_int_val(0); + } + else if ( int_val == button->user_id ) { /*** This is selected button ***/ + button->set_int_val(1); + } + else { /*** This is NOT selected button ***/ + button->set_int_val(0); + + } + button = (GLUI_RadioButton*) button->next(); + } + redraw(); +} + + +/************************ GLUI_RadioButton::GLUI_RadioButton() **********/ + +GLUI_RadioButton::GLUI_RadioButton( GLUI_RadioGroup *grp, const char *name ) +{ + common_init(); + + set_int_val( 0 ); + + /** A radio button's user id is always its ordinal number (zero-indexed) + within the group */ + user_id = grp->num_buttons; + set_name( name ); + group = grp; + + group->num_buttons++; /* Increments radiogroup's button count */ + group->add_control( this ); + + /*** Now update button states ***/ + group->set_int_val( group->int_val ); /* This tells the group to + reset itself to its + current value, thereby + updating all its buttons */ +} + + +/************************ GLUI_RadioButton::mouse_down_handler() **********/ + +int GLUI_RadioButton::mouse_down_handler( int local_x, int local_y ) +{ + if ( NOT group ) + return false; + + orig_value = group->int_val; + + currently_inside = true; + + group->set_selected( this->user_id ); + redraw(); + + return false; +} + +/********************** GLUI_RadioButton::mouse_held_down_handler() ******/ + +int GLUI_RadioButton::mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + if (inside != currently_inside) { + if (inside) group->set_selected( this->user_id ); + else group->set_selected( orig_value ); + currently_inside = inside; + redraw(); + } + + return false; +} + + +/*************************** GLUI_RadioButton::mouse_up_handler() **********/ + +int GLUI_RadioButton::mouse_up_handler( int local_x, int local_y, + bool inside ) +{ + if ( NOT group ) + return false; + + if ( NOT inside ) { + group->set_selected( orig_value ); + redraw(); + } + else { + /** Now we update the radio button group. We tell the group + handler to set the currently-selected item to this button, which + is reference by its user_id/ordinal number within group **/ + + group->set_selected( this->user_id ); + redraw(); + + /*** Now update the linked variable, and call the callback, + but ONLY if the value of the radio group actually changed ***/ + if ( group->int_val != orig_value ) { + group->output_live(true); /** Output live and update gfx ***/ + + group->execute_callback(); + } + } + + return false; +} + +/****************************** GLUI_RadioButton::draw() **********/ + +void GLUI_RadioButton::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( NOT group OR NOT can_draw() ) + return; + + /*** See if we're the currently-selected button. If so, draw ***/ + if ( group->int_val == this->user_id ) { + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_ON, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_ON_DIS, 0, 0 ); + } + else { + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_OFF, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_OFF_DIS, 0, 0 ); + } + + draw_active_area(); + + draw_name( text_x_offset, 10 ); +} + + +/************************************ GLUI_RadioButton::draw_checked() ******/ + +void GLUI_RadioButton::draw_checked( void ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_ON, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_ON_DIS, 0, 0 ); + draw_active_area(); +} + + +/*********************************** GLUI_RadioButton::draw_unchecked() ******/ + +void GLUI_RadioButton::draw_unchecked( void ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( enabled ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_OFF, 0, 0 ); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_RADIOBUTTON_OFF_DIS, 0, 0 ); + draw_active_area(); +} + + +/**************************************** GLUI_RadioButton::draw_O() ********/ + +void GLUI_RadioButton::draw_O( void ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int i, j; + + glBegin( GL_POINTS ); + for(i=3; i<=GLUI_RADIOBUTTON_SIZE-3; i++ ) + for(j=3; j<=GLUI_RADIOBUTTON_SIZE-3; j++ ) + glVertex2i(i,j); + glEnd(); +} + + +/******************************** GLUI_RadioButton::update_size() **********/ + +void GLUI_RadioButton::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = _glutBitmapWidthString( glui->font, name.c_str() ); + + /* if ( w < text_x_offset + text_size + 6 ) */ + w = text_x_offset + text_size + 6 ; +} + + +/************************* GLUI_RadioButton::draw_active_area() **************/ + +void GLUI_RadioButton::draw_active_area( void ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int text_width, left, right; + + text_width = _glutBitmapWidthString( glui->font, name.c_str() ); + left = text_x_offset-3; + right = left + 7 + text_width; + + if ( active ) { + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + glColor3f( 0., 0., 0. ); + } else { + glColor3ub( glui->bkgd_color.r, glui->bkgd_color.g, glui->bkgd_color.b ); + } + + glBegin( GL_LINE_LOOP ); + glVertex2i(left,0); glVertex2i( right,0); + glVertex2i(right,h+1); glVertex2i( left,h+1); + glEnd(); + + glDisable( GL_LINE_STIPPLE ); +} + + +/********************************* GLUI_RadioGroup::set_int_val() **********/ + +void GLUI_RadioGroup::set_int_val( int new_val ) +{ + if ( new_val == int_val ) + return; + + set_selected( new_val ); + redraw(); + + output_live(true); + +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_rollout.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_rollout.cpp new file mode 100644 index 00000000..4823e177 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_rollout.cpp @@ -0,0 +1,281 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_panel.cpp - GLUI_Panel control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +enum {rollout_height_pixels=GLUI_DEFAULT_CONTROL_HEIGHT + 7}; + +/****************************** GLUI_Rollout::GLUI_Rollout() **********/ + +GLUI_Rollout::GLUI_Rollout( GLUI_Node *parent, const char *name, + int open, int type ) +{ + common_init(); + set_name( name ); + user_id = -1; + int_val = type; + + if ( NOT open ) { + is_open = false; + h = rollout_height_pixels; + } + + parent->add_control( this ); +} + +/****************************** GLUI_Rollout::open() **********/ + +void GLUI_Rollout::open( void ) +{ + if ( NOT glui ) + return; + + if ( is_open ) + return; + is_open = true; + + GLUI_DRAWINGSENTINAL_IDIOM + + /* Copy hidden children into our private list "collapsed_node" */ + child_head = collapsed_node.child_head; + child_tail = collapsed_node.child_tail; + collapsed_node.child_head = NULL; + collapsed_node.child_tail = NULL; + + if ( child_head != NULL ) { + ((GLUI_Control*) child_head)->unhide_internal( true ); + } + + glui->refresh(); +} + + +/****************************** GLUI_Rollout::close() **********/ + +void GLUI_Rollout::close( void ) +{ + if ( NOT glui ) + return; + + if ( NOT is_open ) + return; + is_open = false; + + GLUI_DRAWINGSENTINAL_IDIOM + + if ( child_head != NULL ) { + ((GLUI_Control*) child_head)->hide_internal( true ); + } + + /* Move all children into a private list of hidden children */ + collapsed_node.child_head = first_child(); + collapsed_node.child_tail = last_child(); + child_head = NULL; + child_tail = NULL; + + this->h = rollout_height_pixels; + + glui->refresh(); +} + + +/**************************** GLUI_Rollout::mouse_down_handler() **********/ + + +int GLUI_Rollout::mouse_down_handler( int local_x, int local_y ) +{ + if ( local_y - y_abs > rollout_height_pixels ) { + initially_inside = currently_inside = false; + return false; + } + + currently_inside = true; + initially_inside = true; + redraw(); + + return false; +} + + +/**************************** GLUI_Rollout::mouse_held_down_handler() ****/ + +int GLUI_Rollout::mouse_held_down_handler( + int local_x, int local_y, + bool new_inside ) +{ + if ( NOT initially_inside ) + return false; + + if ( local_y - y_abs> rollout_height_pixels ) + new_inside = false; + + if (new_inside != currently_inside) { + currently_inside = new_inside; + redraw(); + } + + return false; +} + + +/**************************** GLUI_Rollout::mouse_down_handler() **********/ + +int GLUI_Rollout::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + if ( currently_inside ) { + if ( is_open ) + close(); + else + open(); + } + + currently_inside = false; + initially_inside = false; + redraw(); + + return false; +} + +static int clamp(int value, int min, int max) { + if (value < min) return min; + if (value > max) return max; + return value; +} + +/********************************* GLUI_Rollout::draw() ***********/ + +void GLUI_Rollout::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + int left, right, top, bottom; + + left = 5; + right = w-left; + top = 3; + bottom = 3+16; + + if ( is_open ) + draw_emboss_box( 0, w, top+3, h ); + else + draw_emboss_box( 0, w, top+3, h-7 ); + + glui->draw_raised_box( left, top, w-left*2, 16 ); + + if ( glui ) + glColor3ub(glui->bkgd_color.r,glui->bkgd_color.g,glui->bkgd_color.b); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( left+1, top+1 ); glVertex2i( right-1, top+1 ); + glColor3ub(clamp(glui->bkgd_color.r+20, 0, 255),clamp(glui->bkgd_color.g+20, 0, 255),clamp(glui->bkgd_color.b+20, 0, 255)); + glVertex2i( right-1, bottom-1 ); glVertex2i( left+1, bottom-1 ); + glEnd(); + + draw_name( left+8, top+11 ); + + if ( active ) + /*draw_active_box( left+4, left+string_width( name.c_str() )+12, */ + draw_active_box( left+4, right-17, + top+2, bottom-2 ); + + + /** Draw '+' or '-' **/ + + glBegin( GL_LINES ); + if ( is_open ) { + if ( enabled ) glColor3f( 0.0, 0.0, 0.0 ); + else glColor3f( 0.5, 0.5, 0.5 ); + glVertex2i(right-14,(top+bottom)/2); glVertex2i(right-5,(top+bottom)/2); + + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i(right-14,1+(top+bottom)/2);glVertex2i(right-5,1+(top+bottom)/2); + } + else + { + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i(right-9,top+3); glVertex2i(right-9,bottom-4); + glVertex2i(right-14,(top+bottom)/2); glVertex2i(right-5,(top+bottom)/2); + + if ( enabled ) glColor3f( 0.0, 0.0, 0.0 ); + else glColor3f( 0.5, 0.5, 0.5 ); + glVertex2i(right-14,-1+(top+bottom)/2); + glVertex2i(right-5,-1+(top+bottom)/2); + glVertex2i(right-10,top+3); + glVertex2i(right-10,bottom-4); + } + glEnd(); + + glLineWidth( 1.0 ); + + if (currently_inside) {draw_pressed(); /* heavy black outline when pressed */ } +} + + +/***************************** GLUI_Rollout::update_size() **********/ + +void GLUI_Rollout::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = string_width(name); + + if ( w < text_size + 36 ) + w = text_size + 36; +} + + +/**************************** GLUI_Rollout::draw_pressed() ***********/ + +void GLUI_Rollout::draw_pressed( void ) +{ + int left, right, top, bottom; + + left = 5; + right = w-left; + top = 3; + bottom = 3+16; + + + glColor3f( 0.0, 0.0, 0.0 ); + + glBegin( GL_LINE_LOOP ); + glVertex2i( left, top ); glVertex2i( right, top ); + glVertex2i( right, bottom ); glVertex2i( left,bottom ); + glEnd(); + + glBegin( GL_LINE_LOOP ); + glVertex2i( left+1, top+1 ); glVertex2i( right-1, top+1 ); + glVertex2i( right-1, bottom-1 ); glVertex2i( left+1,bottom-1 ); + glEnd(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_rotation.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_rotation.cpp new file mode 100644 index 00000000..15654376 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_rotation.cpp @@ -0,0 +1,473 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_rotation - GLUI_Rotation control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "GL/glui.h" +#include "arcball.h" +#include "algebra3.h" + +/*************************** GLUI_Rotation::iaction_mouse_down_handler() ***/ + +int GLUI_Rotation::iaction_mouse_down_handler( int local_x, int local_y ) +{ + copy_float_array_to_ball(); + + init_ball(); + + local_y = (int) floor(2.0 * ball->center[1] - local_y); + + ball->mouse_down( local_x, local_y ); + + /* printf( "%d %d - %f %f\n", local_x, local_y, ball->center[0], ball->center[1] ); */ + + copy_ball_to_float_array(); + + spinning = false; + + return false; +} + + +/*********************** GLUI_Rotation::iaction_mouse_up_handler() **********/ + +int GLUI_Rotation::iaction_mouse_up_handler( int local_x, int local_y, + bool inside ) +{ + copy_float_array_to_ball(); + + ball->mouse_up(); + + return false; +} + + +/******************* GLUI_Rotation::iaction_mouse_held_down_handler() ******/ + +int GLUI_Rotation::iaction_mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + if ( NOT glui ) + return 0; + + copy_float_array_to_ball(); + + local_y = (int) floor(2.0 * ball->center[1] - local_y); + + /* printf( "%d %d\n", local_x, local_y ); */ + + ball->mouse_motion( local_x, local_y, 0, + (glui->curr_modifiers & GLUT_ACTIVE_ALT) != 0, + (glui->curr_modifiers & GLUT_ACTIVE_CTRL) != 0 ); + + copy_ball_to_float_array(); + + if ( can_spin ) + spinning = true; + + return false; +} + + +/******************** GLUI_Rotation::iaction_draw_active_area_persp() **************/ + +void GLUI_Rotation::iaction_draw_active_area_persp( void ) +{ + /********** arcball *******/ + copy_float_array_to_ball(); + + setup_texture(); + setup_lights(); + + glEnable(GL_CULL_FACE ); + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + + mat4 tmp_rot = *ball->rot_ptr; + glMultMatrixf( (float*) &tmp_rot[0][0] ); + + /*** Draw the checkered box ***/ + /*glDisable( GL_TEXTURE_2D ); */ + draw_ball(1.35); // 1.96 ); + + glPopMatrix(); + + glBindTexture(GL_TEXTURE_2D,0); /* unhook our checkerboard texture */ + glDisable( GL_TEXTURE_2D ); + glDisable( GL_LIGHTING ); + glDisable( GL_CULL_FACE ); +} + + +/******************** GLUI_Rotation::iaction_draw_active_area_ortho() **********/ + +void GLUI_Rotation::iaction_draw_active_area_ortho( void ) +{ + float radius; + radius = (float)(h-22)/2.0; /*MIN((float)w/2.0, (float)h/2.0); */ + + /********* Draw emboss circles around arcball control *********/ + int k; + glLineWidth( 1.0 ); + glBegin( GL_LINE_LOOP); + for( k=0; k<60; k++ ) { + float phi = 2*M_PI*(float)k/60.0; + vec2 p( cos(phi) * (2.0 + radius), sin(phi) * (2.0 + radius)); + if ( p[1] < -p[0] ) glColor3ub( 128,128,128 ); + else glColor3ub( 255,255,255 ); + glVertex2fv((float*)&p[0]); + } + glEnd(); + + glBegin( GL_LINE_LOOP); + for( k=0; k<60; k++ ) { + float phi = 2*M_PI*(float)k/60.0; + vec2 p( cos(phi) * (1.0 + radius), sin(phi) * (1.0 + radius)); + if ( enabled ) { + if ( p[1] < -p[0] ) glColor3ub( 0,0,0); + else glColor3ub( 192,192,192); + } + else + { + if ( p[1] < -p[0] ) glColor3ub( 180,180,180); + else glColor3ub( 192,192,192); + } + glVertex2fv((float*)&p[0]); + } + glEnd(); +} + + +/******************************** GLUI_Rotation::iaction_dump() **********/ + +void GLUI_Rotation::iaction_dump( FILE *output ) +{ +} + + +/******************** GLUI_Rotation::iaction_special_handler() **********/ + +int GLUI_Rotation::iaction_special_handler( int key,int modifiers ) +{ + + return false; +} + +/********************************** GLUI_Rotation::init_ball() **********/ + +void GLUI_Rotation::init_ball( void ) +{ + /*printf( "%f %f %f", float( MIN(w/2,h/2)), (float) w/2, (float) h/2 ); */ + + ball->set_params( vec2( (float)(w/2), (float)((h-18)/2)), + (float) 2.0*(h-18) ); + /*ball->set_damping( .05 ); */ + /*float( MIN(w/2,h/2))*2.0 ); */ + /* ball->reset_mouse(); */ +} + + +/****************************** GLUI_Rotation::setup_texture() *********/ + +void GLUI_Rotation::setup_texture( void ) +{ + static GLuint tex=0u; + GLenum t=GL_TEXTURE_2D; + glEnable(t); + glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + glColor3f( 1.0, 1.0, 1.0 ); + if (tex!=0u) { + /* (OSL 2006/06) Just use glBindTexture to avoid having to re-upload the whole checkerboard every frame. */ + glBindTexture(t,tex); + return; + } /* Else need to make a new checkerboard texture */ + glGenTextures(1,&tex); + glBindTexture(t,tex); + glEnable(t); + + unsigned int i, j; + int dark, light; /*** Dark and light colors for ball checkerboard ***/ + +/* Note: you can change the number of checkers across there sphere in draw_ball */ +#define CHECKBOARD_SIZE 64 /* pixels across whole texture */ +#define CHECKBOARD_REPEAT 32u /* pixels across one black/white sector */ + unsigned char texture_image[CHECKBOARD_SIZE] [CHECKBOARD_SIZE] [3]; + unsigned char c; + for( i=0; iinit(); /** reset quaternion, etc. **/ + ball->set_params( vec2( (float)(w/2), (float)((h-18)/2)), + (float) 2.0*(h-18) ); + + set_spin( this->damping ); + + copy_ball_to_float_array(); + + translate_and_draw_front(); + + output_live(true); /*** Output live and draw main grx window ***/ +} + + +/****************************** GLUI_Rotation::needs_idle() *********/ + +bool GLUI_Rotation::needs_idle( void ) const +{ + return can_spin; +} + + +/****************************** GLUI_Rotation::idle() ***************/ + +void GLUI_Rotation::idle( void ) +{ + spinning = ball->is_spinning?true:false; + + if ( can_spin AND spinning ) { + copy_float_array_to_ball(); + ball->idle(); + + *ball->rot_ptr = *ball->rot_ptr * ball->rot_increment; + + mat4 tmp_rot; + tmp_rot = *ball->rot_ptr; + + copy_ball_to_float_array(); + + draw_active_area_only = true; + translate_and_draw_front(); + draw_active_area_only = false; + + output_live(true); /** output live and update gfx **/ + } + else { + } +} + + +/********************** GLUI_Rotation::copy_float_array_to_ball() *********/ + +void GLUI_Rotation::copy_float_array_to_ball( void ) +{ + int i; + float *fp_src, *fp_dst; + + fp_src = &float_array_val[0]; + fp_dst = &((*ball->rot_ptr)[0][0]); + + for( i=0; i<16; i++ ) { + *fp_dst = *fp_src; + + fp_src++; + fp_dst++; + } +} + + +/********************** GLUI_Rotation::copy_ball_to_float_array() *********/ + +void GLUI_Rotation::copy_ball_to_float_array( void ) +{ + mat4 tmp_rot; + tmp_rot = *ball->rot_ptr; + + set_float_array_val( (float*) &tmp_rot[0][0] ); +} + + +/************************ GLUI_Rotation::set_spin() **********************/ + +void GLUI_Rotation::set_spin( float damp_factor ) +{ + if ( damp_factor == 0.0 ) + can_spin = false; + else + can_spin = true; + + ball->set_damping( 1.0 - damp_factor ); + + this->damping = damp_factor; +} + + +/************** GLUI_Rotation::GLUI_Rotation() ********************/ + +GLUI_Rotation::GLUI_Rotation( GLUI_Node *parent, + const char *name, float *value_ptr, + int id, + GLUI_CB cb ) +{ + common_init(); + set_ptr_val( value_ptr ); + user_id = id; + set_name( name ); + callback = cb; + parent->add_control( this ); + init_live(); + + /*** Init the live 4x4 matrix. This is different than the standard + live variable behavior, since the original value of the 4x4 matrix + is ignored and reset to Identity ***/ +/* +NO! WVB + if ( value_ptr != NULL ) { + int i, j, index; + for( i=0; i<4; i++ ) { + for( j=0; j<4; j++ ) { + index = i*4+j; + if ( i==j ) + value_ptr[index] = 1.0; + else + value_ptr[index] = 0.0; + } + } + } +*/ + /*init_ball(); */ + + +} + + +/************** GLUI_Rotation::common_init() ********************/ + +void GLUI_Rotation::common_init( void ) +{ + glui_format_str( name, "Rotation: %p", this ); +// type = GLUI_CONTROL_ROTATION; + w = GLUI_ROTATION_WIDTH; + h = GLUI_ROTATION_HEIGHT; + can_activate = true; + live_type = GLUI_LIVE_FLOAT_ARRAY; + float_array_size = 16; + quadObj = NULL; + alignment = GLUI_ALIGN_CENTER; + can_spin = false; + spinning = false; + damping = 0.0; + ball = new Arcball; + + reset(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_scrollbar.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_scrollbar.cpp new file mode 100644 index 00000000..9540d407 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_scrollbar.cpp @@ -0,0 +1,832 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_scrollbar.cpp - GLUI_Scrollbar class + + -------------------------------------------------- + + Copyright (c) 2004 John Kew, 1998 Paul Rademacher + + This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include +#include + +/*static int __debug=0; */ + +#define GLUI_SCROLL_GROWTH_STEPS 800 +#define GLUI_SCROLL_MIN_GROWTH_STEPS 100 +#define GLUI_SCROLL_CALLBACK_INTERVAL 1 /* Execute the user's callback every this many clicks */ + +enum { + GLUI_SCROLL_ARROW_UP, + GLUI_SCROLL_ARROW_DOWN, + GLUI_SCROLL_ARROW_LEFT, + GLUI_SCROLL_ARROW_RIGHT +}; + + +/****************************** GLUI_Scrollbar::GLUI_Scrollbar() **********/ +// Constructor, no live var +GLUI_Scrollbar::GLUI_Scrollbar( GLUI_Node *parent, + const char *name, + int horz_vert, + int data_type, + int id, GLUI_CB callback + /*,GLUI_Control *object + ,GLUI_InterObject_CB obj_cb*/ + ) +{ + common_construct(parent, name, horz_vert, data_type, NULL, id, callback/*, object, obj_cb*/); +} + +/****************************** GLUI_Scrollbar::GLUI_Scrollbar() **********/ +// Constructor, int live var +GLUI_Scrollbar::GLUI_Scrollbar( GLUI_Node *parent, const char *name, + int horz_vert, + int *live_var, + int id, GLUI_CB callback + /*,GLUI_Control *object + ,GLUI_InterObject_CB obj_cb*/ + ) +{ + common_construct(parent, name, horz_vert, GLUI_SCROLL_INT, live_var, id, callback/*, object, obj_cb*/); +} + +/****************************** GLUI_Scrollbar::GLUI_Scrollbar() **********/ +// Constructor, float live var +GLUI_Scrollbar::GLUI_Scrollbar( GLUI_Node *parent, const char *name, + int horz_vert, + float *live_var, + int id, GLUI_CB callback + /*,GLUI_Control *object + ,GLUI_InterObject_CB obj_cb*/ + ) +{ + common_construct(parent, name, horz_vert, GLUI_SCROLL_FLOAT, live_var, id, callback/*, object, obj_cb*/); +} + +/****************************** GLUI_Scrollbar::common_init() **********/ +void GLUI_Scrollbar::common_init(void) +{ + horizontal = true; + h = GLUI_SCROLL_ARROW_HEIGHT; + w = GLUI_TEXTBOX_WIDTH; + alignment = GLUI_ALIGN_CENTER; + x_off = 0; + y_off_top = 0; + y_off_bot = 0; + can_activate = true; + state = GLUI_SCROLL_STATE_NONE; + growth_exp = GLUI_SCROLL_DEFAULT_GROWTH_EXP; + callback_count = 0; + first_callback = true; + user_speed = 1.0; + float_min = 0.0; + float_max = 0.0; + int_min = 0; + int_max = 0; + associated_object = NULL; + last_update_time=0; + velocity_limit=50.0; /* Change value by at most 50 per second */ + box_length = 0; + box_start_position = 0; + box_end_position = 0; + track_length = 0; +} + +/****************************** GLUI_Scrollbar::common_construct() **********/ +void GLUI_Scrollbar::common_construct( + GLUI_Node *parent, + const char *name, + int horz_vert, + int data_type, + void *data, + int id, GLUI_CB callback + /*,GLUI_Control *object, + GLUI_InterObject_CB obj_cb*/ + ) +{ + common_init(); + + // make sure limits are wide enough to hold live value + if (data_type==GLUI_SCROLL_FLOAT) { + float lo = 0.0f, hi=1.0f; + if (data) { + float d = *(float*)(data); + lo = MIN(lo, d); + hi = MAX(hi, d); + } + this->set_float_limits(lo,hi); + this->set_float_val(lo); + this->live_type = GLUI_LIVE_FLOAT; + } else { + int lo = 0, hi=100; + if (data) { + int d = *(int*)(data); + lo = MIN(lo, d); + hi = MAX(hi, d); + } + this->set_int_limits(lo,hi); + this->set_int_val(0); + this->live_type = GLUI_LIVE_INT; + } + this->data_type = data_type; + this->set_ptr_val( data ); + this->set_name(name); + this->user_id = id; + this->callback = callback; + //this->associated_object = object; + //this->object_cb = obj_cb; + this->horizontal=(horz_vert==GLUI_SCROLL_HORIZONTAL); + if (this->horizontal) { + this->h = GLUI_SCROLL_ARROW_HEIGHT; + this->w = GLUI_TEXTBOX_WIDTH; + } else { + this->h = GLUI_TEXTBOX_HEIGHT; + this->w = GLUI_SCROLL_ARROW_WIDTH; + } + parent->add_control( this ); + this->init_live(); +} + +/****************************** GLUI_Scrollbar::mouse_down_handler() **********/ + +int GLUI_Scrollbar::mouse_down_handler( int local_x, int local_y ) +{ + last_update_time=GLUI_Time()-1.0; + this->state = find_arrow( local_x, local_y ); + GLUI_Master.glui_setIdleFuncIfNecessary(); + + /* printf( "spinner: mouse down : %d/%d arrow:%d\n", local_x, local_y, + find_arrow( local_x, local_y )); + */ + + if ( state != GLUI_SCROLL_STATE_UP AND state != GLUI_SCROLL_STATE_DOWN) + return true; + + reset_growth(); + + /*** ints and floats behave a bit differently. When you click on + an int spinner, you expect the value to immediately go up by 1, whereas + for a float it'll go up only by a fractional amount. Therefore, we + go ahead and increment by one for int spinners ***/ +#if 1 + if ( data_type == GLUI_SCROLL_INT ) { + // Allow for possibility of reversed limits + int lo = MIN(int_min,int_max); + int hi = MAX(int_min,int_max); + int increase = int_min < int_max ? 1 : -1; + int new_val = int_val; + if ( state == GLUI_SCROLL_STATE_UP ) { + new_val += increase; + } else if ( state == GLUI_SCROLL_STATE_DOWN ) { + new_val -= increase; + } + if (new_val >= lo && new_val <= hi && new_val!=int_val) { + set_int_val(new_val); + do_callbacks(); + } + } +#endif + do_click(); + redraw(); + + return false; +} + + +/******************************** GLUI_Scrollbar::mouse_up_handler() **********/ + +int GLUI_Scrollbar::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + state = GLUI_SCROLL_STATE_NONE; + GLUI_Master.glui_setIdleFuncIfNecessary(); + + /* printf("spinner: mouse up : %d/%d inside: %d\n",local_x,local_y,inside); */ + + /*glutSetCursor( GLUT_CURSOR_INHERIT ); */ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + + redraw(); + + /* do_callbacks(); --- stub */ + /* if ( callback ) */ + /* callback( this->user_id ); */ + + return false; +} + + +/***************************** GLUI_Scrollbar::mouse_held_down_handler() ******/ + +int GLUI_Scrollbar::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + int new_state; + if ( state == GLUI_SCROLL_STATE_NONE ) + return false; + + /* printf("spinner: mouse held: %d/%d inside: %d\n",local_x,local_y, + new_inside); + */ + + if ( state == GLUI_SCROLL_STATE_SCROLL) { /* dragging? */ + do_drag( local_x-x_abs, local_y-y_abs ); + } + else { /* not dragging */ + new_state = find_arrow( local_x, local_y ); + + if ( new_state == state ) { + /** Still in same arrow **/ + do_click(); + } + } + redraw(); + + return false; +} + + +/****************************** GLUI_Scrollbar::key_handler() **********/ + +int GLUI_Scrollbar::key_handler( unsigned char key,int modifiers ) +{ + return true; +} + + +/****************************** GLUI_Scrollbar::draw() **********/ + +void GLUI_Scrollbar::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( horizontal ) { + draw_scroll_arrow(GLUI_SCROLL_ARROW_LEFT, 0, 0); + draw_scroll_arrow(GLUI_SCROLL_ARROW_RIGHT, w-GLUI_SCROLL_ARROW_WIDTH, 0); + } else { + draw_scroll_arrow(GLUI_SCROLL_ARROW_UP, 0, 0); + draw_scroll_arrow(GLUI_SCROLL_ARROW_DOWN, 0, h-GLUI_SCROLL_ARROW_HEIGHT); + } + draw_scroll(); +} + + +/****************************** GLUI_Scrollbar::draw_scroll_arrow() **********/ + +void GLUI_Scrollbar::draw_scroll_arrow(int arrowtype, int x, int y) +{ + float offset=0; + float L=3.5f,HC=7.f,R=10.5f; + float T=4.5f,VC=8.f,B=11.5; + const float verts[][6]={ + { L,10.5f, R, 10.5f, HC, 6.5f }, // up arrow + { L,6.5f, R, 6.5f, HC,10.5f }, // down arrow + { R-2,T, R-2, B, L+1, VC }, // left arrow + { L+2,T, L+2, B, R-1, VC } // right arrow + }; + + const float *tri = NULL; + + switch (arrowtype) + { + case GLUI_SCROLL_ARROW_UP: + tri = verts[0]; + if (state & GLUI_SCROLL_STATE_UP) offset = 1; + break; + + case GLUI_SCROLL_ARROW_DOWN: + tri = verts[1]; + if (state & GLUI_SCROLL_STATE_DOWN) offset = 1; + break; + + case GLUI_SCROLL_ARROW_LEFT: + tri = verts[2]; + if (state & GLUI_SCROLL_STATE_DOWN) offset = 1; + break; + + case GLUI_SCROLL_ARROW_RIGHT: + tri = verts[3]; + if (state & GLUI_SCROLL_STATE_UP) offset = 1; + break; + + default: + return; /* tri is NULL */ + } + + glColor3ubv(&glui->bkgd_color.r); + glRecti(x,y,x+GLUI_SCROLL_ARROW_WIDTH,y+GLUI_SCROLL_ARROW_HEIGHT); + if (!offset) { + glui->draw_raised_box(x,y+1,GLUI_SCROLL_ARROW_WIDTH-1,GLUI_SCROLL_ARROW_HEIGHT-1); + } else { + glColor3ub(128,128,128); + glBegin(GL_LINE_LOOP); + int x2=x+GLUI_SCROLL_ARROW_WIDTH, y2=y+GLUI_SCROLL_ARROW_HEIGHT; + glVertex2i(x ,y); + glVertex2i(x2,y); + glVertex2i(x2,y2); + glVertex2i(x ,y2); + glEnd(); + } + + GLubyte black[]={0,0,0}; + GLubyte white[]={255,255,255}; + GLubyte gray[]={128,128,128}; + GLubyte *color=black; + if (!enabled) { + offset = 1; + color = white; + } + glTranslatef(x+offset,y+offset,0); + glColor3ubv(color); + glBegin(GL_TRIANGLES); + glVertex2fv(tri); glVertex2fv(tri+2), glVertex2fv(tri+4); + glEnd(); + glTranslatef(-(x+offset),-(y+offset),0); + + if (!enabled) { // once more! + glTranslatef(x,y,0); + glColor3ubv(gray); + glBegin(GL_TRIANGLES); + glVertex2fv(tri); glVertex2fv(tri+2), glVertex2fv(tri+4); + glEnd(); + glTranslatef(-x,-y,0); + } +} + + +void GLUI_Scrollbar::draw_scroll() { + update_scroll_parameters(); + + // Draw track using a checkerboard background + const unsigned char scroll_bg[] = { + 0xD4, 0xD0, 0xC8, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD4, 0xD0, 0xC8 + }; + glColor3f( 1.0, 1.0, 1.0 ); + glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); + glEnable( GL_TEXTURE_2D); + glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, + scroll_bg); + + float y0 = horizontal? 0 : GLUI_SCROLL_ARROW_HEIGHT; + float y1 = horizontal? h : h-GLUI_SCROLL_ARROW_HEIGHT; + float x0 = horizontal? GLUI_SCROLL_ARROW_WIDTH : 0; + float x1 = horizontal? w-GLUI_SCROLL_ARROW_WIDTH : w; + x0-=0.5; y0+=0.5; + x1-=0.5; y1+=0.5; + float dy = y1-y0; + float dx = x1-x0; + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(x0,y0); + glTexCoord2f(dx*0.5f,0); glVertex2f(x1,y0); + glTexCoord2f(dx*0.5f,dy*0.5f); glVertex2f(x1,y1); + glTexCoord2f(0, dy*0.5f); glVertex2f(x0,y1); + glEnd(); + glDisable(GL_TEXTURE_2D); + + // Draw scroll box + int box = box_start_position; + if (horizontal) { + box += GLUI_SCROLL_ARROW_WIDTH; + draw_scroll_box(box,1,box_length,h); + } else { + box += GLUI_SCROLL_ARROW_HEIGHT+1; + draw_scroll_box(0,box,w,box_length); + } +} + +/****************************** GLUI_Scrollbar::draw_scroll_box() **********/ + +void GLUI_Scrollbar::draw_scroll_box(int x, int y, int w, int h) +{ + if (!enabled) return; + glColor3ubv(&glui->bkgd_color.r); + glRecti(x,y,x+w,y+h); + glui->draw_raised_box(x,y, w-1, h-1); + + if (active) { + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + glColor3f( 0., 0., 0. ); + glBegin(GL_LINE_LOOP); + int x1 = x+2, y1 = y+2, x2 = x+w-4, y2 = y+h-4; + glVertex2i(x1,y1); + glVertex2i(x2,y1); + glVertex2i(x2,y2); + glVertex2i(x1,y2); + glEnd(); + glDisable( GL_LINE_STIPPLE ); + } +} + + + +/**************************** update_scroll_parameters ***********/ + +void GLUI_Scrollbar::update_scroll_parameters() { + track_length = horizontal? + this->w-GLUI_SCROLL_ARROW_WIDTH*2 : + this->h-GLUI_SCROLL_ARROW_HEIGHT*2; + if (data_type==GLUI_SCROLL_INT) + { + if (int_max==int_min) + box_length=track_length; + else { + const int MIN_TAB = GLUI_SCROLL_BOX_STD_HEIGHT; + //box_length = int(track_length/float(visible_range)); + //if (box_length < MIN_TAB) + box_length = MIN_TAB; + } + float pixels_per_unit = (track_length-box_length)/float(int_max-int_min); + if (horizontal) + box_start_position = int((int_val-int_min)*pixels_per_unit); + else + box_start_position = int((int_max-int_val)*pixels_per_unit); + box_end_position = box_start_position+box_length; + } + else if (data_type==GLUI_SCROLL_FLOAT) + { + if (float_max==float_min) + box_length=track_length; + else { + box_length = GLUI_SCROLL_BOX_STD_HEIGHT; + } + float pixels_per_unit = (track_length-box_length)/float(float_max-float_min); + if (horizontal) + box_start_position = int((float_val-float_min)*pixels_per_unit); + else + box_start_position = int((float_max-float_val)*pixels_per_unit); + box_end_position = box_start_position+box_length; + } +} + + +/********************************* GLUI_Scrollbar::special_handler() **********/ + +int GLUI_Scrollbar::special_handler( int key,int modifiers ) +{ + if ( !horizontal && key == GLUT_KEY_UP ) { + mouse_down_handler( x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs + 1 ); + mouse_up_handler( x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs + 1, true ); + } + else if ( !horizontal && key == GLUT_KEY_DOWN ) { + mouse_down_handler(x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs+1+GLUI_SCROLL_ARROW_HEIGHT); + mouse_up_handler( x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs+1 +GLUI_SCROLL_ARROW_HEIGHT, + true ); + } + if ( horizontal && key == GLUT_KEY_LEFT ) { + mouse_down_handler( x_abs + 1,y_abs + 1 ); + mouse_up_handler( x_abs + 1, y_abs + 1, true ); + } + else if ( horizontal && key == GLUT_KEY_RIGHT ) { + mouse_down_handler(x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs+1); + mouse_up_handler( x_abs + w - GLUI_SCROLL_ARROW_WIDTH + 1, + y_abs+1, + true ); + } + else if ( key == GLUT_KEY_HOME ) { /** Set value to limit top - + or increment by 10 **/ + } + else if ( key == GLUT_KEY_END ) { + } + + return true; +} + + +/************************************ GLUI_Scrollbar::update_size() **********/ + +void GLUI_Scrollbar::update_size( void ) +{ + if (horizontal) { + h = GLUI_SCROLL_ARROW_HEIGHT; + if (associated_object) { + this->w = ((GLUI_Control *)associated_object)->w; + } + } + else { + w = GLUI_SCROLL_ARROW_WIDTH; + if (associated_object) { + this->h = ((GLUI_Control *)associated_object)->h; + } + } +} + + +/************************************ GLUI_Scrollbar::find_arrow() ************/ + +int GLUI_Scrollbar::find_arrow( int local_x, int local_y ) +{ + + local_x = local_x-x_abs; + local_y = local_y-y_abs; + + if (horizontal) + { + if ( local_y >= h-GLUI_SCROLL_ARROW_HEIGHT-3 && local_y <= h) + { + update_scroll_parameters(); + if ( local_x >= 0 AND local_x <= (GLUI_SCROLL_ARROW_WIDTH+box_start_position) ) + { + return GLUI_SCROLL_STATE_DOWN; + } + if ( local_x >= (GLUI_SCROLL_ARROW_WIDTH+box_end_position) + AND local_x <= (w+GLUI_SCROLL_ARROW_WIDTH) ) + { + return GLUI_SCROLL_STATE_UP; + } + return GLUI_SCROLL_STATE_SCROLL; + } + } + else + { + if ( local_x >= w-GLUI_SCROLL_ARROW_WIDTH-3 && local_x <= w) + { + update_scroll_parameters(); + if ( local_y >= 0 AND local_y <= (GLUI_SCROLL_ARROW_HEIGHT+box_start_position) ) + { + return GLUI_SCROLL_STATE_UP; + } + if ( local_y >= (GLUI_SCROLL_ARROW_HEIGHT+box_end_position) + AND local_y <= (h+GLUI_SCROLL_ARROW_HEIGHT) ) + { + return GLUI_SCROLL_STATE_DOWN; + } + return GLUI_SCROLL_STATE_SCROLL; + } + } + + return GLUI_SCROLL_STATE_NONE; +} + +/***************************************** GLUI_Scrollbar::do_click() **********/ + +void GLUI_Scrollbar::do_click( void ) +{ + int direction = 0; + + if ( state == GLUI_SCROLL_STATE_UP ) + direction = +1; + else if ( state == GLUI_SCROLL_STATE_DOWN ) + direction = -1; + + if (data_type==GLUI_SCROLL_INT&&int_min>int_max) direction*=-1; + if (data_type==GLUI_SCROLL_FLOAT&&float_min>float_max) direction*=-1; + + increase_growth(); + + float modifier_factor = 1.0; + float incr = growth * modifier_factor * user_speed ; + + double frame_time=GLUI_Time()-last_update_time; + double frame_limit=velocity_limit*frame_time; + if (incr>frame_limit) incr=frame_limit; /* don't scroll faster than limit */ + last_update_time=GLUI_Time(); + + float new_val = float_val; + + new_val += direction * incr; + if (1 || data_type==GLUI_SCROLL_FLOAT) set_float_val(new_val); + if (0 && data_type==GLUI_SCROLL_INT) set_int_val((int)new_val); + //printf("do_click: incr %f val=%f float_val=%f\n",incr,new_val,float_val); + + /*** Now update live variable and do callback. We don't want + to do the callback on each iteration of this function, just on every + i^th iteration, where i is given by GLUI_SCROLL_CALLBACK_INTERVAL ****/ + callback_count++; + if ( (callback_count % GLUI_SCROLL_CALLBACK_INTERVAL ) == 0 ) + do_callbacks(); + +} + + +/***************************************** GLUI_Scrollbar::do_drag() **********/ + +void GLUI_Scrollbar::do_drag( int x, int y ) +{ + int direction = 0; + float incr, modifier_factor; + /* int delta_x; */ + int new_int_val = int_val; + float new_float_val = float_val; + + int free_len = track_length-box_length; + if (free_len == 0) return; + + modifier_factor = 1.0; + if ( state == GLUI_SCROLL_STATE_SCROLL) { + update_scroll_parameters(); + + int hbox = box_length/2; + if (horizontal) { + int track_v = x-GLUI_SCROLL_ARROW_WIDTH; + new_int_val = int_min + (track_v-hbox)*(int_max-int_min)/free_len; + new_float_val = float_min + (track_v-hbox)*(float_max-float_min)/float(free_len); + } else { + int track_v = y-GLUI_SCROLL_ARROW_HEIGHT; + new_int_val = int_max - (track_v-hbox)*(int_max-int_min)/free_len; + new_float_val = float_max - (track_v-hbox)*(float_max-float_min)/float(free_len); + } + } + else { + if ( state == GLUI_SCROLL_STATE_UP ) + direction = +1; + else if ( state == GLUI_SCROLL_STATE_DOWN ) + direction = -1; + incr = growth * direction * modifier_factor * user_speed; + new_int_val += direction; + new_float_val += direction * (float_max-float_min)/free_len; + } + last_y = y; + last_x = x; + + /*** Now update live variable and do callback. We don't want + to do the callback on each iteration of this function, just on every + i^th iteration, where i is given by GLUI_SCROLL_CALLBACK_INTERVAL ****/ + if(data_type==GLUI_SCROLL_INT) + set_int_val(new_int_val); + else if (data_type==GLUI_SCROLL_FLOAT) + set_float_val(new_float_val); + + callback_count++; + if ( (callback_count % GLUI_SCROLL_CALLBACK_INTERVAL ) == 0 ) + do_callbacks(); +} + + +/***************************************** GLUI_Scrollbar::needs_idle() ******/ + +bool GLUI_Scrollbar::needs_idle( void ) const +{ + if (state == GLUI_SCROLL_STATE_UP OR state == GLUI_SCROLL_STATE_DOWN ) { + return true; + } + else { + return false; + } +} + +/***************************************** GLUI_Scrollbar::idle() **********/ + +void GLUI_Scrollbar::idle( void ) +{ + if ( NOT needs_idle() ) + return; + else + do_click(); +} + + +/************************************ GLUI_Scrollbar::do_callbacks() **********/ + +void GLUI_Scrollbar::do_callbacks( void ) +{ + + /* *******************************************/ + + if ( NOT first_callback ) { + if ( data_type == GLUI_SCROLL_INT AND int_val == last_int_val ) { + return; + } + if ( data_type == GLUI_SPINNER_FLOAT AND float_val == last_float_val ) { + return; + } + } + + if (associated_object == NULL) { + this->execute_callback(); + } + else { // Use internal Callbacks + if (object_cb) { + //object_cb(associated_object, int_val); + object_cb(this); + } + } + last_int_val = int_val; + last_float_val = float_val; + first_callback = false; +} + + +/********************************** GLUI_Scrollbar::set_float_val() ************/ + +void GLUI_Scrollbar::set_float_val( float new_val ) +{ + // Allow for the possibility that the limits are reversed + float hi = MAX(float_min,float_max); + float lo = MIN(float_min,float_max); + if (new_val > hi) + new_val = hi; + if (new_val < lo) + new_val = lo; + last_float_val = float_val; + float_val = new_val; + int_val = (int)new_val; + + redraw(); + + /*** Now update the live variable ***/ + output_live(true); +} + + +/********************************** GLUI_Scrollbar::set_int_val() ************/ + +void GLUI_Scrollbar::set_int_val( int new_val ) +{ + // Allow for the possibility that the limits are reversed + int hi = MAX(int_min,int_max); + int lo = MIN(int_min,int_max); + if (new_val > hi) + new_val = hi; + if (new_val < lo) + new_val = lo; + last_int_val = int_val; + float_val = int_val = new_val; + + redraw(); + + /*** Now update the live variable ***/ + output_live(true); +} + +/*********************************** GLUI_Scrollbar::set_float_limits() *********/ + +void GLUI_Scrollbar::set_float_limits( float low, float high, int limit_type ) +{ + if (limit_type != GLUI_LIMIT_CLAMP) { + // error! + } + float_min = low; + float_max = high; + // Allow for possiblitly of reversed limits + float lo = MIN(low,high); + float hi = MAX(low,high); + if (float_valhi) set_float_val(hi); +} + + +/*********************************** GLUI_Scrollbar::set_int_limits() *********/ + +void GLUI_Scrollbar::set_int_limits( int low, int high, int limit_type ) +{ + if (limit_type != GLUI_LIMIT_CLAMP) { + // error! + } + int_min = low; + int_max = high; + // Allow for possiblitly of reversed limits + int lo = MIN(low,high); + int hi = MAX(low,high); + if (int_valhi) set_int_val(hi); + float_min = low; + float_max = high; +} + + +/*********************************** GLUI_Scrollbar::reset_growth() *************/ + +void GLUI_Scrollbar::reset_growth( void ) +{ + growth = fabs(float_max - float_min) / float(GLUI_SCROLL_GROWTH_STEPS); + if (data_type == GLUI_SCROLL_INT && growth<1) growth=1; +} + + +/******************************* GLUI_Scrollbar::increase_growth() *************/ + +void GLUI_Scrollbar::increase_growth( void ) +{ + float range=0; + if (data_type==GLUI_SCROLL_FLOAT) + range = fabs(float_max-float_min); + else + range = fabs(float(int_max-int_min)); + if ( growth < (range / float(GLUI_SCROLL_MIN_GROWTH_STEPS)) ) + growth *= growth_exp; + return; +} + + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_separator.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_separator.cpp new file mode 100644 index 00000000..b10cf361 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_separator.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_separator.cpp - GLUI_Separator control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/****************************** GLUI_Separator::GLUI_Separator() **********/ + +GLUI_Separator::GLUI_Separator( GLUI_Node *parent ) +{ + common_init(); + parent->add_control( this ); +} + +/****************************** GLUI_Separator::draw() **********/ + +void GLUI_Separator::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + int width, indent; + int cont_x, cont_y, cont_w, cont_h, cont_x_off, cont_y_off; + + if ( parent() != NULL ) { + get_this_column_dims(&cont_x, &cont_y, &cont_w, &cont_h, + &cont_x_off, &cont_y_off); + + width = cont_w - cont_x_off*2; + } + else { + width = this->w; + } + + indent = (int) floor(width * .05); + + glLineWidth( 1.0 ); + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( indent, GLUI_SEPARATOR_HEIGHT/2-1 ); + glVertex2i( width-indent, GLUI_SEPARATOR_HEIGHT/2-1 ); + + glColor3f( 1., 1., 1. ); + glVertex2i( indent, GLUI_SEPARATOR_HEIGHT/2 ); + glVertex2i( width-indent, GLUI_SEPARATOR_HEIGHT/2 ); + glEnd(); +} + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_spinner.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_spinner.cpp new file mode 100644 index 00000000..85e7e3e0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_spinner.cpp @@ -0,0 +1,647 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_spinner.cpp - GLUI_Spinner class + + + notes: + spinner does not explicitly keep track of the current value - this is all + handled by the underlying edittext control + -> thus, spinner->sync_live() has no meaning, nor spinner->output_live + -> BUT, edittext will alter this spinner's float_val and int_val, + so that spinner->get/set will work + + +FIXME: there's a heck of a lot of duplication between this and glui_scrollbar.cpp. + (OSL, 2006/06) + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include +#include + +/*static int __debug=0; */ + +#define GLUI_SPINNER_GROWTH_STEPS 800 +#define GLUI_SPINNER_MIN_GROWTH_STEPS 100 +#define GLUI_SPINNER_CALLBACK_INTERVAL 1 + + +/****************************** spinner_edittext_callback() ******************/ +/* This function is not used anymore. It has been replaced by directly */ +/* Including an optional pointer to a spinner from an edittext box */ + +void spinner_edittext_callback( int id ) +{ + GLUI_Spinner *spinner; + + putchar( '.' ); flushout; + + spinner = (GLUI_Spinner*) id; + + if ( NOT spinner ) + return; + + spinner->do_callbacks(); +} + + +/****************************** GLUI_Spinner::GLUI_Spinner() ****************/ + +GLUI_Spinner::GLUI_Spinner( GLUI_Node* parent, const char *name, + int data_type, int id, GLUI_CB callback ) +{ + common_construct(parent, name, data_type, NULL, id, callback); +} + +/****************************** GLUI_Spinner::GLUI_Spinner() ****************/ + +GLUI_Spinner::GLUI_Spinner( GLUI_Node* parent, const char *name, + int *live_var, int id, GLUI_CB callback ) +{ + common_construct(parent, name, GLUI_SPINNER_INT, live_var, id, callback); +} + +/****************************** GLUI_Spinner::GLUI_Spinner() ****************/ + +GLUI_Spinner::GLUI_Spinner( GLUI_Node* parent, const char *name, + float *live_var, int id, GLUI_CB callback ) +{ + common_construct(parent, name, GLUI_SPINNER_FLOAT, live_var, id, callback); +} + +/****************************** GLUI_Spinner::GLUI_Spinner() ****************/ + +GLUI_Spinner::GLUI_Spinner( GLUI_Node *parent, const char *name, + int data_t, void *live_var, + int id, GLUI_CB callback ) +{ + common_construct(parent, name, data_t, live_var, id, callback); +} + +/****************************** GLUI_Spinner::common_construct() ************/ + +void GLUI_Spinner::common_construct( GLUI_Node* parent, const char *name, + int data_t, void *data, + int id, GLUI_CB cb ) +{ + common_init(); + + if ( NOT strcmp( name, "Spinner Test" )) + id=id; + + int text_type; + if ( data_t == GLUI_SPINNER_INT ) { + text_type = GLUI_EDITTEXT_INT; + } + else if ( data_t == GLUI_SPINNER_FLOAT ) { + text_type = GLUI_EDITTEXT_FLOAT; + } + else { + assert(0); /* Did not pass in a valid data type */ + } + + user_id = id; + data_type = data_t; + callback = cb; + set_name( name ); + //glui = parent->get_glui(); + + parent->add_control( this ); + + GLUI_EditText *txt = + new GLUI_EditText( this, name, text_type, data, id, cb); + + edittext = txt; /* Link the edittext to the spinner */ + /* control->ptr_val = data; */ + + edittext->spinner = this; /* Link the spinner to the edittext */ + +} + +/****************************** GLUI_Spinner::mouse_down_handler() **********/ + +int GLUI_Spinner::mouse_down_handler( int local_x, int local_y ) +{ + this->state = find_arrow( local_x, local_y ); + GLUI_Master.glui_setIdleFuncIfNecessary(); + + /* printf( "spinner: mouse down : %d/%d arrow:%d\n", local_x, local_y, + find_arrow( local_x, local_y )); + */ + + if ( state != GLUI_SPINNER_STATE_UP AND state != GLUI_SPINNER_STATE_DOWN ) + return true; + + reset_growth(); + redraw(); + + /*** ints and floats behave a bit differently. When you click on + an int spinner, you expect the value to immediately go up by 1, whereas + for a float it'll go up only by a fractional amount. Therefore, we + go ahead and increment by one for int spinners ***/ + if ( data_type == GLUI_SPINNER_INT ) { + if ( state == GLUI_SPINNER_STATE_UP ) + edittext->set_float_val( edittext->float_val + 1.0 ); + else if ( state == GLUI_SPINNER_STATE_DOWN ) + edittext->set_float_val( edittext->float_val - .9 ); + } + + do_click(); + + return false; +} + + +/******************************** GLUI_Spinner::mouse_up_handler() **********/ + +int GLUI_Spinner::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + state = GLUI_SPINNER_STATE_NONE; + GLUI_Master.glui_setIdleFuncIfNecessary(); + + /* printf("spinner: mouse up : %d/%d inside: %d\n",local_x,local_y,inside); */ + + /*glutSetCursor( GLUT_CURSOR_INHERIT ); */ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + redraw(); + + /* do_callbacks(); --- stub */ + /* if ( callback ) */ + /* callback( this->user_id ); */ + + return false; +} + + +/***************************** GLUI_Spinner::mouse_held_down_handler() ******/ + +int GLUI_Spinner::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + int new_state; + + if ( state == GLUI_SPINNER_STATE_NONE ) + return false; + + /* printf("spinner: mouse held: %d/%d inside: %d\n",local_x,local_y, + new_inside); + */ + + if ( state == GLUI_SPINNER_STATE_BOTH ) { /* dragging? */ + do_drag( local_x, local_y ); + } + else { /* not dragging */ + new_state = find_arrow( local_x, local_y ); + + if ( new_state == state ) { + /** Still in same arrow **/ + do_click(); + } + else { + if ( new_inside OR 1) { + /** The state changed, but we're still inside - that + means we moved off the arrow: begin dragging **/ + state = GLUI_SPINNER_STATE_BOTH; + } + else { + /*** Here check y of mouse position to determine whether to + drag ***/ + + /* ... */ + } + } + + /*** We switched to up/down dragging ***/ + if ( state == GLUI_SPINNER_STATE_BOTH ) { + glutSetCursor( GLUT_CURSOR_UP_DOWN ); + last_x = local_x; + last_y = local_y; + + /** If the spinner has limits, we reset the growth value, since + reset_growth() will compute a new growth value for dragging + vs. clicking. If the spinner has no limits, then we just let the + growth remain at whatever the user has incremented it up to **/ + if ( edittext->has_limits != GLUI_LIMIT_NONE ) + reset_growth(); + } + + redraw(); + } + + return false; +} + + +/****************************** GLUI_Spinner::key_handler() **********/ + +int GLUI_Spinner::key_handler( unsigned char key,int modifiers ) +{ + + + return true; +} + + +/****************************** GLUI_Spinner::draw() **********/ + +void GLUI_Spinner::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + if ( enabled ) { + /*** Draw the up arrow either pressed or unrpessed ***/ + if ( state == GLUI_SPINNER_STATE_UP OR state == GLUI_SPINNER_STATE_BOTH ) + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_UP_ON, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_Y); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_UP_OFF, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_Y); + + /*** Draw the down arrow either pressed or unrpessed ***/ + if (state == GLUI_SPINNER_STATE_DOWN OR state == GLUI_SPINNER_STATE_BOTH) + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_DOWN_ON, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_HEIGHT+GLUI_SPINNER_ARROW_Y); + else + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_DOWN_OFF, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_HEIGHT+GLUI_SPINNER_ARROW_Y); + } + else { /**** The spinner is disabled ****/ + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_UP_DIS, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_Y); + glui->std_bitmaps.draw( GLUI_STDBITMAP_SPINNER_DOWN_DIS, + w-GLUI_SPINNER_ARROW_WIDTH-1, + GLUI_SPINNER_ARROW_HEIGHT+GLUI_SPINNER_ARROW_Y); + } + + if ( active ) { + glColor3ub( 0, 0, 0 ); + glEnable( GL_LINE_STIPPLE ); + glLineStipple( 1, 0x5555 ); + } + else { + glColor3ub( glui->bkgd_color.r,glui->bkgd_color.g,glui->bkgd_color.b ); + } + + glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( w-GLUI_SPINNER_ARROW_WIDTH-2, 0 ); + glVertex2i( w, 0 ); + glVertex2i( w, h ); + glVertex2i( w-GLUI_SPINNER_ARROW_WIDTH-2, h ); + glEnd(); + glDisable( GL_LINE_STIPPLE ); + glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); +} + + +/********************************* GLUI_Spinner::special_handler() **********/ + +int GLUI_Spinner::special_handler( int key,int modifiers ) +{ + if ( key == GLUT_KEY_UP ) { /** Simulate a click in the up arrow **/ + mouse_down_handler( x_abs + w - GLUI_SPINNER_ARROW_WIDTH + 1, + y_abs + GLUI_SPINNER_ARROW_Y+1 ); + mouse_up_handler( x_abs + w - GLUI_SPINNER_ARROW_WIDTH + 1, + y_abs + GLUI_SPINNER_ARROW_Y+1, true ); + } + else if ( key == GLUT_KEY_DOWN ) { /** Simulate a click in the up arrow **/ + mouse_down_handler(x_abs + w - GLUI_SPINNER_ARROW_WIDTH + 1, + y_abs+GLUI_SPINNER_ARROW_Y+1+GLUI_SPINNER_ARROW_HEIGHT); + mouse_up_handler( x_abs + w - GLUI_SPINNER_ARROW_WIDTH + 1, + y_abs+GLUI_SPINNER_ARROW_Y+1 +GLUI_SPINNER_ARROW_HEIGHT, + true ); + } + else if ( key == GLUT_KEY_HOME ) { /** Set value to limit top - + or increment by 10 **/ + } + else if ( key == GLUT_KEY_END ) { + } + + return true; +} + + +/******************************* GLUI_Spinner::set_float_val() ************/ + +void GLUI_Spinner::set_float_val( float new_val ) +{ + if ( NOT edittext ) + return; + + edittext->set_float_val( new_val ); +} + + +/********************************** GLUI_Spinner::set_int_val() ************/ + +void GLUI_Spinner::set_int_val( int new_val ) +{ + if ( NOT edittext ) + return; + + edittext->set_int_val( new_val ); +} + + +/************************************ GLUI_Spinner::update_size() **********/ + +void GLUI_Spinner::update_size( void ) +{ + if (!edittext) return; + /*edittext->w = this->w - GLUI_SPINNER_ARROW_WIDTH-3; */ + this->w = edittext->w + GLUI_SPINNER_ARROW_WIDTH + 3; +} + + +/************************************ GLUI_Spinner::find_arrow() ************/ + +int GLUI_Spinner::find_arrow( int local_x, int local_y ) +{ + local_x -= x_abs; + local_y -= y_abs; + + if ( local_x >= (w - GLUI_SPINNER_ARROW_WIDTH) AND + local_x <= w ) { + + if ( local_y >= GLUI_SPINNER_ARROW_Y AND + local_y <= (GLUI_SPINNER_ARROW_Y+GLUI_SPINNER_ARROW_HEIGHT) ) + return GLUI_SPINNER_STATE_UP; + + if ( local_y >= GLUI_SPINNER_ARROW_Y+GLUI_SPINNER_ARROW_HEIGHT AND + local_y <= (GLUI_SPINNER_ARROW_Y+GLUI_SPINNER_ARROW_HEIGHT*2) ) + return GLUI_SPINNER_STATE_DOWN; + + } + + return GLUI_SPINNER_STATE_NONE; +} + + +/***************************************** GLUI_Spinner::do_click() **********/ + +void GLUI_Spinner::do_click( void ) +{ + int direction = 0; + float incr; + float modifier_factor; + + if ( state == GLUI_SPINNER_STATE_UP ) + direction = +1; + else if ( state == GLUI_SPINNER_STATE_DOWN ) + direction = -1; + + increase_growth(); + + modifier_factor = 1.0; + if ( glui ) { + if ( glui->curr_modifiers & GLUT_ACTIVE_SHIFT ) + modifier_factor = 100.0f; + else if ( glui->curr_modifiers & GLUT_ACTIVE_CTRL ) + modifier_factor = .01f; + } + + if ( this->data_type == GLUI_SPINNER_FLOAT OR 1) { + incr = growth * direction * modifier_factor * user_speed; + edittext->set_float_val( edittext->float_val + incr ); + /** Remember, edittext mirrors the float and int values ***/ + } + + /*** Now update live variable and do callback. We don't want + to do the callback on each iteration of this function, just on every + i^th iteration, where i is given by GLUI_SPINNER_CALLBACK_INTERVAL ****/ + callback_count++; + if ( (callback_count % GLUI_SPINNER_CALLBACK_INTERVAL ) == 0 ) + do_callbacks(); +} + + +/***************************************** GLUI_Spinner::do_drag() **********/ + +void GLUI_Spinner::do_drag( int x, int y ) +{ + int delta_y; + float incr, modifier_factor; + /* int delta_x; */ + + modifier_factor = 1.0f; + if ( glui ) { + if ( glui->curr_modifiers & GLUT_ACTIVE_SHIFT ) + modifier_factor = 100.0f; + else if ( glui->curr_modifiers & GLUT_ACTIVE_CTRL ) + modifier_factor = .01f; + } + + /* delta_x = x - last_x; */ + delta_y = -(y - last_y); + + if ( this->data_type == GLUI_SPINNER_FLOAT OR 1 ) { + incr = growth * delta_y * modifier_factor * user_speed; + edittext->set_float_val( edittext->float_val + incr ); + /** Remember, edittext mirrors the float and int values ***/ + } + + last_x = x; + last_y = y; + + /*** Now update live variable and do callback. We don't want + to do the callback on each iteration of this function, just on every + i^th iteration, where i is given by GLUI_SPINNER_CALLBACK_INTERVAL ****/ + + callback_count++; + if ( (callback_count % GLUI_SPINNER_CALLBACK_INTERVAL ) == 0 ) + do_callbacks(); +} + + +/***************************************** GLUI_Spinner::needs_idle() ******/ + +bool GLUI_Spinner::needs_idle( void ) const +{ + if (state == GLUI_SPINNER_STATE_UP OR state == GLUI_SPINNER_STATE_DOWN ) { + return true; + } + else { + return false; + } +} + +/***************************************** GLUI_Spinner::idle() **********/ + +void GLUI_Spinner::idle( void ) +{ + if ( NOT needs_idle() ) + return; + else + do_click(); +} + + +/************************************ GLUI_Spinner::do_callbacks() **********/ + +void GLUI_Spinner::do_callbacks( void ) +{ + /*** This is not necessary, b/c edittext automatically updates us ***/ + if ( NOT edittext ) + return; + this->float_val = edittext->float_val; + this->int_val = edittext->int_val; + /* *******************************************/ + + if ( NOT first_callback ) { + if ( data_type == GLUI_SPINNER_INT AND int_val == last_int_val ) { + return; + } + + if ( data_type == GLUI_SPINNER_FLOAT AND float_val == last_float_val ) { + return; + } + } + + this->execute_callback(); + + last_int_val = int_val; + last_float_val = float_val; + first_callback = false; +} + + +/********************************* GLUI_Spinner::set_float_limits() *********/ + +void GLUI_Spinner::set_float_limits( float low, float high, int limit_type ) +{ + if ( NOT edittext ) + return; + + edittext->set_float_limits( low, high, limit_type ); +} + + +/*********************************** GLUI_Spinner::set_int_limits() *********/ + +void GLUI_Spinner::set_int_limits( int low, int high, int limit_type ) +{ + if ( NOT edittext ) + return; + + edittext->set_int_limits( low, high, limit_type ); +} + + +/*********************************** GLUI_Spinner:reset_growth() *************/ + +void GLUI_Spinner::reset_growth( void ) +{ + float lo, hi; + + if ( edittext->has_limits == GLUI_LIMIT_NONE ) { + if ( data_type == GLUI_SPINNER_FLOAT ) + growth = sqrt(ABS(edittext->float_val)) * .05f; + else if ( data_type == GLUI_SPINNER_INT ) + growth = .4f; + } + else { + if ( data_type == GLUI_SPINNER_FLOAT ) { + lo = edittext->float_low; + hi = edittext->float_high; + growth = (hi-lo) / GLUI_SPINNER_GROWTH_STEPS; + } + else if ( data_type == GLUI_SPINNER_INT ) { + lo = (float) edittext->int_low; + hi = (float) edittext->int_high; + + growth = (hi-lo) / GLUI_SPINNER_GROWTH_STEPS; + } + } + + if ( growth == 0.0f ) + growth = .001f; +} + + +/******************************* GLUI_Spinner:increase_growth() *************/ + +void GLUI_Spinner::increase_growth( void ) +{ + float hi = 0.0,lo = 0.0; + + if ( data_type == GLUI_SPINNER_FLOAT ) { + lo = edittext->float_low; + hi = edittext->float_high; + } + else if ( data_type == GLUI_SPINNER_INT ) { + lo = (float) edittext->int_low; + hi = (float) edittext->int_high; + } + + if ( growth < (hi-lo) / GLUI_SPINNER_MIN_GROWTH_STEPS ) + growth *= growth_exp; + + /* printf( "growth: %f\n", growth ); */ +} + + +/*************************************** GLUI_Spinner:get_text() *************/ + +const char *GLUI_Spinner::get_text( void ) +{ + if (edittext) + return edittext->text.c_str(); + else + return ""; +} + + +/********************************** GLUI_Spinner:get_float_val() *************/ + +float GLUI_Spinner::get_float_val( void ) +{ + if (edittext) + return edittext->float_val; + else + return 0.0f; +} + + +/********************************** GLUI_Spinner:get_int_val() *************/ + +int GLUI_Spinner::get_int_val( void ) +{ + if (edittext) + return edittext->int_val; + else + return 0; +} + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_statictext.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_statictext.cpp new file mode 100644 index 00000000..b0db4b94 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_statictext.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_statictext.cpp - GLUI_StaticText Control + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" + +/****************************** GLUI_StaticText::GLUI_StaticText() **********/ +GLUI_StaticText::GLUI_StaticText( GLUI_Node *parent, const char *name ) +{ + common_init(); + set_name( name ); + parent->add_control( this ); +} + +/****************************** GLUI_StaticText::draw() **********/ + +void GLUI_StaticText::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + + draw_text(); +} + + +/****************************** GLUI_StaticText::set_text() **********/ + +void GLUI_StaticText::set_text( const char *text ) +{ + set_name( text ); + redraw(); +} + + +/************************************ GLUI_StaticText::update_size() **********/ + +void GLUI_StaticText::update_size( void ) +{ + int text_size; + + if ( NOT glui ) + return; + + text_size = string_width( name ); + + if ( w < text_size ) + w = text_size; +} + + +/****************************** GLUI_StaticText::draw_text() **********/ + +void GLUI_StaticText::draw_text( void ) +{ + if ( NOT can_draw() ) + return; + + erase_text(); + draw_name( 0, 9 ); +} + + +/****************************** GLUI_StaticText::erase_text() **********/ + +void GLUI_StaticText::erase_text( void ) +{ + if ( NOT can_draw() ) + return; + + set_to_bkgd_color(); + glDisable( GL_CULL_FACE ); + glBegin( GL_TRIANGLES ); + glVertex2i( 0,0 ); glVertex2i( w, 0 ); glVertex2i( w, h ); + glVertex2i( 0, 0 ); glVertex2i( w, h ); glVertex2i( 0, h ); + glEnd(); +} + + + diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_string.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_string.cpp new file mode 100644 index 00000000..06a08bc3 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_string.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui.cpp + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher (this file, Bill Baxter 2005) + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA + + This program is -not- in the public domain. + +*****************************************************************************/ + +#include "GL/glui.h" +#include + +#ifdef _MSC_VER +#define vsnprintf _vsnprintf +#endif + +GLUI_String& glui_format_str(GLUI_String& str, const char* fmt, ...) +{ + const size_t ISIZE = 128; + char stackbuf[ISIZE]; + size_t bufsz = ISIZE; + char *buf = stackbuf; + str = ""; + va_list arg; + while (1) { + va_start(arg, fmt); + int ret = vsnprintf(buf,299,fmt,arg); + va_end(arg); + if (ret>=0) { + break; + } + // else make a bigger buf, try again + bufsz <<= 1; + if (buf==stackbuf) buf = (char*)malloc(sizeof(char)*bufsz); + else buf = (char*)realloc(buf, sizeof(char)*bufsz); + } + if (buf!=stackbuf) free(buf); + str=buf; + return str; +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_textbox.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_textbox.cpp new file mode 100644 index 00000000..bc0e2f1e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_textbox.cpp @@ -0,0 +1,1108 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_textbox.cpp - GLUI_TextBox control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher, 2004 John Kew + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "glui_internal_control.h" +#include + + +static const int LINE_HEIGHT = 15; + +/****************************** GLUI_TextBox::GLUI_TextBox() **********/ + +GLUI_TextBox::GLUI_TextBox(GLUI_Node *parent, GLUI_String &live_var, + bool scroll, int id, GLUI_CB callback ) +{ + common_construct(parent, &live_var, scroll, id, callback); +} + +/****************************** GLUI_TextBox::GLUI_TextBox() **********/ + +GLUI_TextBox::GLUI_TextBox( GLUI_Node *parent, bool scroll, int id, + GLUI_CB callback ) +{ + common_construct(parent, NULL, scroll, id, callback); +} + +/****************************** GLUI_TextBox::common_construct() **********/ +void GLUI_TextBox::common_construct( + GLUI_Node *parent, GLUI_String *data, + bool scroll, int id, GLUI_CB callback) +{ + common_init(); + + GLUI_Node *tb_panel = parent; + + if (scroll) { + GLUI_Panel *p = new GLUI_Panel(parent,"",GLUI_PANEL_NONE); + p->x_off = 1; + tb_panel = p; + } + this->ptr_val = data; + if (data) { + this->live_type = GLUI_LIVE_STRING; + } else { + this->live_type = GLUI_LIVE_NONE; + } + this->user_id = id; + this->callback = callback; + this->name = "textbox"; + tb_panel->add_control( this ); + if (scroll) { + new GLUI_Column(tb_panel, false); + scrollbar = + new GLUI_Scrollbar(tb_panel, + "scrollbar", + GLUI_SCROLL_VERTICAL, + GLUI_SCROLL_INT); + scrollbar->set_object_callback(GLUI_TextBox::scrollbar_callback, this); + scrollbar->set_alignment(GLUI_ALIGN_LEFT); + // scrollbar->can_activate = false; //kills ability to mouse drag too + } + init_live(); +} + +/****************************** GLUI_TextBox::mouse_down_handler() **********/ + +int GLUI_TextBox::mouse_down_handler( int local_x, int local_y ) +{ + int tmp_insertion_pt; + + if ( debug ) dump( stdout, "-> MOUSE DOWN" ); + + tmp_insertion_pt = find_insertion_pt( local_x, local_y ); + if ( tmp_insertion_pt == -1 ) { + if ( glui ) + glui->deactivate_current_control( ); + return false; + } + + insertion_pt = tmp_insertion_pt; + + sel_start = sel_end = insertion_pt; + + keygoal_x = insert_x; + + if ( can_draw()) + update_and_draw_text(); + + if ( debug ) dump( stdout, "<- MOUSE UP" ); + + return true; +} + + +/******************************** GLUI_TextBox::mouse_up_handler() **********/ + +int GLUI_TextBox::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + return false; +} + + +/***************************** GLUI_TextBox::mouse_held_down_handler() ******/ + +int GLUI_TextBox::mouse_held_down_handler( int local_x, int local_y, + bool new_inside) +{ + int tmp_pt; + + if ( NOT new_inside ) return false; + + if ( debug ) dump( stdout, "-> HELD DOWN" ); + + tmp_pt = find_insertion_pt( local_x, local_y ); + keygoal_x = insert_x; + + if ( tmp_pt == -1 AND sel_end != 0 ) { /* moved mouse past left edge */ + special_handler( GLUT_KEY_LEFT, GLUT_ACTIVE_SHIFT ); + } + else if ( tmp_pt == substring_end+1 AND sel_end != (int) text.length()) { + /* moved mouse past right edge */ + special_handler( GLUT_KEY_RIGHT, GLUT_ACTIVE_SHIFT ); + } + else if ( tmp_pt != -1 AND tmp_pt != sel_end ) { + sel_end = insertion_pt = tmp_pt; + + update_and_draw_text(); + } + + if ( debug ) + dump( stdout, "<- HELD DOWN" ); + + return false; +} + + +/****************************** GLUI_TextBox::key_handler() **********/ +int GLUI_TextBox::key_handler( unsigned char key,int modifiers ) +{ + int regular_key; + /* int has_selection; */ + + if ( NOT glui ) + return false; + + if ( debug ) + dump( stdout, "-> KEY HANDLER" ); + + regular_key = false; + bool ctrl_down = (modifiers & GLUT_ACTIVE_CTRL)!=0; + /* has_selection = (sel_start != sel_end); */ + + if ( key == CTRL('[')) { /* ESCAPE */ + glui->deactivate_current_control(); + return true; + } + else if ( (key == 127 AND !ctrl_down) OR /* FORWARD DELETE */ + ( key == CTRL('d') AND modifiers == GLUT_ACTIVE_CTRL) ) + { + if ( sel_start == sel_end ) { /* no selection */ + if ( insertion_pt < (int)text.length() ) { + text.erase(insertion_pt,1); + } + } + else { /* There is a selection */ + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + } + else if ( ((key == 127) AND ctrl_down) OR // Delete word forward + ((key == 'd') AND (modifiers == GLUT_ACTIVE_ALT)) ) + { + if ( sel_start == sel_end ) { /* no selection */ + sel_start = insertion_pt; + sel_end = find_word_break( insertion_pt, +1 ); + } + + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + else if ( key == CTRL('h') ) { /* BACKSPACE */ + if ( sel_start == sel_end ) { /* no selection */ + if ( insertion_pt > 0 ) { + insertion_pt--; + text.erase(insertion_pt,1); + } + } + else { /* There is a selection */ + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + } + else if ( modifiers == GLUT_ACTIVE_CTRL ) /* CTRL ONLY */ + { + /* Ctrl-key bindings */ + if ( key == CTRL('a') ) { + return special_handler( GLUT_KEY_HOME, 0 ); + } + else if ( key == CTRL('e') ) { + return special_handler( GLUT_KEY_END, 0 ); + } + else if ( key == CTRL('b') ) { + return special_handler( GLUT_KEY_LEFT, 0 ); + } + else if ( key == CTRL('f') ) { + return special_handler( GLUT_KEY_RIGHT, 0 ); + } + else if ( key == CTRL('p') ) { + return special_handler( GLUT_KEY_UP, 0 ); + } + else if ( key == CTRL('n') ) { + return special_handler( GLUT_KEY_DOWN, 0 ); + } + else if ( key == CTRL('u') ) { /* ERASE LINE */ + insertion_pt = 0; + text.erase(0,text.length()); + sel_start = sel_end = 0; + } + else if ( key == CTRL('k') ) { /* KILL TO END OF LINE */ + sel_start = sel_end = insertion_pt; + text.erase(insertion_pt,GLUI_String::npos); + } + } + else if ( modifiers == GLUT_ACTIVE_ALT ) /* ALT ONLY */ + { + if ( key == 'b' ) { // Backward word + return special_handler ( GLUT_KEY_LEFT, GLUT_ACTIVE_CTRL ); + } + if ( key == 'f' ) { // Forward word + return special_handler ( GLUT_KEY_RIGHT, GLUT_ACTIVE_CTRL ); + } + } + else if ( (modifiers & GLUT_ACTIVE_CTRL) OR + (modifiers & GLUT_ACTIVE_ALT) ) + { + /** ignore other keys with modifiers */ + return true; + } + else { /* Regular key */ + if ( key == 13 ) /* RETURNS are written as newlines*/ + key = '\n'; + + regular_key = true; + + /** This is just to get rid of warnings - the flag regular_key is + set if the key was not a backspace, return, whatever. But I + believe if we're here, we know it was a regular key anyway */ + if ( regular_key ) { + } + + /**** If there's a current selection, erase it ******/ + if ( sel_start != sel_end ) { + clear_substring( MIN(sel_start,sel_end), MAX(sel_start,sel_end )); + insertion_pt = MIN(sel_start,sel_end); + sel_start = sel_end = insertion_pt; + } + + /******** We insert the character into the string ***/ + + text.insert(insertion_pt,1,key); + + /******** Move the insertion point and substring_end one over ******/ + insertion_pt++; + substring_end++; + + sel_start = sel_end = insertion_pt; + } + + /******** Now redraw text ***********/ + /* Hack to prevent text box from being cleared first **/ + /** int substring_change = update_substring_bounds(); + draw_text_only = + (NOT substring_change AND NOT has_selection AND regular_key ); + */ + + draw_text_only = false; /** Well, hack is not yet working **/ + update_and_draw_text(); + draw_text_only = false; + + + if ( debug ) + dump( stdout, "<- KEY HANDLER" ); + + return true; +} + +/****************************** GLUI_TextBox::enable() **********/ + +void GLUI_TextBox::enable( void ) +{ + GLUI_Control::enable(); + scrollbar->enable(); +} + +/****************************** GLUI_TextBox::disable() **********/ + +void GLUI_TextBox::disable( void ) +{ + GLUI_Control::disable(); + scrollbar->disable(); +} + +/****************************** GLUI_TextBox::activate() **********/ + +void GLUI_TextBox::activate( int how ) +{ + if ( debug ) + dump( stdout, "-> ACTIVATE" ); + active = true; + + if ( how == GLUI_ACTIVATE_MOUSE ) + return; /* Don't select everything if activated with mouse */ + + orig_text = text; + + sel_start = 0; + sel_end = text.length(); + insertion_pt = 0; + if ( debug ) + dump( stdout, "<- ACTIVATE" ); +} + + +/****************************** GLUI_TextBox::deactivate() **********/ + +void GLUI_TextBox::deactivate( void ) +{ + active = false; + + if ( NOT glui ) + return; + + if ( debug ) + dump( stdout, "-> DISACTIVATE" ); + + sel_start = sel_end = insertion_pt = -1; + + /***** Retrieve the current value from the text *****/ + /***** The live variable will be updated by set_text() ****/ + set_text(text.c_str()); /* This will force callbacks and gfx refresh */ + + update_substring_bounds(); + + /******** redraw text without insertion point ***********/ + redraw(); + + /***** Now do callbacks if value changed ******/ + if ( orig_text != text ) { + this->execute_callback(); + + + } + + + if ( debug ) + dump( stdout, "<- DISACTIVATE" ); +} + +/****************************** GLUI_TextBox::draw() **********/ + +void GLUI_TextBox::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int line = 0; + int text_length; + int box_width; + int i; + + /* Bevelled Border */ + glBegin( GL_LINES ); + glColor3f( .5, .5, .5 ); + glVertex2i( 0, 0 ); glVertex2i( w, 0 ); + glVertex2i( 0, 0 ); glVertex2i( 0, h ); + + glColor3f( 1., 1., 1. ); + glVertex2i( 0, h ); glVertex2i( w, h ); + glVertex2i( w, h ); glVertex2i( w, 0 ); + + if ( enabled ) + glColor3f( 0., 0., 0. ); + else + glColor3f( .25, .25, .25 ); + glVertex2i( 1, 1 ); glVertex2i( w-1, 1 ); + glVertex2i( 1, 1 ); glVertex2i( 1, h-1 ); + + glColor3f( .75, .75, .75 ); + glVertex2i( 1, h-1 ); glVertex2i( w-1, h-1 ); + glVertex2i( w-1, h-1 ); glVertex2i( w-1, 1 ); + glEnd(); + + /* Draw Background if enabled*/ + if (enabled) { + glColor3f( 1., 1., 1. ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( 2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i(2, h-2 ); + glEnd(); + } else { + glColor3f( .8f, .8f, .8f ); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( 2, 2 ); glVertex2i( w-2, 2 ); + glVertex2i( w-2, h-2 ); glVertex2i(2, h-2 ); + glEnd(); + } + + /* Begin Drawing Lines of Text */ + substring_start = 0; + substring_end = 0; + text_length = text.length()-1; + + /* Figure out how wide the box is */ + box_width = get_box_width(); + + /* Get the first line substring */ + while (substring_width(substring_start, substring_end+1 ) < box_width && + substring_end < text_length && text[substring_end+1] != '\n') + substring_end++; + + /* Figure out which lines are visible*/ + + visible_lines = (int)(h-20)/LINE_HEIGHT; + if (start_line < (curr_line-visible_lines)) { + for (i = 0; ((curr_line-i)*LINE_HEIGHT+20) > h; i++); + start_line = i; + } else if ( start_line > curr_line) { + start_line = curr_line; + } + line = 0; + do { + if (line && substring_end < text_length) { + substring_start = substring_end+1; + while (substring_width(substring_start, substring_end+1 ) < box_width && + substring_end < text_length && text[substring_end+1] != '\n') + substring_end++; + } + if (text[substring_end+1] == '\n') { /* Skip newline */ + substring_end++; + } + if (line < start_line || (line > curr_line && curr_line > (start_line + visible_lines))) { + line++; + continue; + } + if ((line - start_line) <= visible_lines) + draw_text(0,(line - start_line)*LINE_HEIGHT); /* tabs and other nasties are handled by substring_width */ + line++; + } while (substring_end < text_length); + + num_lines = line; + + draw_insertion_pt(); + if (scrollbar) { + scrollbar->set_int_limits(MAX(0,num_lines/*-1*/-visible_lines),0); + glPushMatrix(); + glTranslatef(scrollbar->x_abs-x_abs, scrollbar->y_abs-y_abs,0.0); + scrollbar->draw_scroll(); + glPopMatrix(); + } +} + + + +/************************** GLUI_TextBox::update_substring_bounds() *********/ + +int GLUI_TextBox::update_substring_bounds( void ) +{ + int box_width; + int text_len = text.length(); + int old_start, old_end; + + old_start = substring_start; + old_end = substring_end; + + /*** Calculate the width of the usable area of the edit box ***/ + box_width = get_box_width(); + + CLAMP( substring_end, 0, MAX(text_len-1,0) ); + CLAMP( substring_start, 0, MAX(text_len-1,0) ); + + if ( debug ) dump( stdout, "-> UPDATE SS" ); + + if ( insertion_pt >= 0 AND + insertion_pt < substring_start ) { /* cursor moved left */ + substring_start = insertion_pt; + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + } + else if ( insertion_pt > substring_end ) { /* cursor moved right */ + substring_end = insertion_pt-1; + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_start++; + } + else { /* cursor is within old substring bounds */ + if ( last_insertion_pt > insertion_pt ) { /* cursor moved left */ + } + else { + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + + while(substring_width( substring_start, substring_end+1 ) <= box_width + AND substring_end < text_len-1 ) + substring_end++; + } + } + + while ( substring_width( substring_start, substring_end ) > box_width ) + substring_end--; + + last_insertion_pt = insertion_pt; + + /*** No selection if not enabled ***/ + if ( NOT enabled ) { + sel_start = sel_end = 0; + } + + if ( debug ) dump( stdout, "<- UPDATE SS" ); + + if ( substring_start == old_start AND substring_end == old_end ) + return false; /*** bounds did not change ***/ + else + return true; /*** bounds did change ***/ + +} + + +/********************************* GLUI_TextBox::update_x_offsets() *********/ + +void GLUI_TextBox::update_x_offsets( void ) +{ +} + + +/********************************* GLUI_TextBox::draw_text() ****************/ + +void GLUI_TextBox::draw_text( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int text_x, i, sel_lo, sel_hi, x_pos; + + if ( debug ) dump( stdout, "-> DRAW_TEXT" ); + + /** Find where to draw the text **/ + + text_x = 2 + GLUI_TEXTBOX_BOXINNERMARGINX; + + /** Find lower and upper selection bounds **/ + sel_lo = MIN(sel_start, sel_end ); + sel_hi = MAX(sel_start, sel_end ); + + int sel_x_start, sel_x_end, delta; + + /** Draw selection area dark **/ + if ( sel_start != sel_end ) { + sel_x_start = text_x; + sel_x_end = text_x; + delta = 0; + for( i=substring_start; sel_x_end < (w - text_x) && i<=substring_end; i++ ) { + delta = 0; + if (text[i] == '\t') // Character is a tab, go to next tab stop + while (((delta + sel_x_end) < (w - text_x)) && + (delta == 0 || delta % tab_width)) + delta++; + else + delta = char_width( text[i] ); + + if ( i < sel_lo ) { + sel_x_start += delta; + sel_x_end += delta; + } + else if ( i < sel_hi ) { + sel_x_end += delta; + } + } + + glColor3f( 0.0f, 0.0f, .6f ); + glRecti(sel_x_start, y+5, sel_x_end, y+20); + } + + + if ( sel_start == sel_end ) { // No current selection + x_pos = text_x; + if ( enabled ) + glColor3b( 0, 0, 0 ); + else + glColor3b( 32, 32, 32 ); + + glRasterPos2i( text_x, y+LINE_HEIGHT); + for( i=substring_start; i<=substring_end; i++ ) { + if (this->text[i] == '\t') { // Character is a tab, go to next tab stop + x_pos = ((x_pos-text_x)/tab_width)*tab_width+tab_width+text_x; + glRasterPos2i( x_pos, y+LINE_HEIGHT); // Reposition pen after tab + } else { + glutBitmapCharacter( get_font(), this->text[i] ); + x_pos += char_width( this->text[i] ); + } + } + } + else { // There is a selection + x_pos = text_x; + for( i=substring_start; i<=substring_end; i++ ) { + if ( IN_BOUNDS( i, sel_lo, sel_hi-1)) { // This character is selected + glColor3f( 1., 1., 1. ); + glRasterPos2i( x_pos, y+LINE_HEIGHT); + if (this->text[i] == '\t') { // Character is a tab, go to next tab stop + x_pos = ((x_pos-text_x)/tab_width)*tab_width+tab_width+text_x; + } + else + glutBitmapCharacter( get_font(), this->text[i] ); + } + else { + glColor3f( 0., 0., 0. ); + glRasterPos2i( x_pos, y+LINE_HEIGHT); + if (this->text[i] == '\t') { // Character is a tab, go to next tab stop + x_pos = ((x_pos-text_x)/tab_width)*tab_width+tab_width+text_x; + glRasterPos2i( x_pos, y+LINE_HEIGHT); // Reposition pen after tab + } else + glutBitmapCharacter( get_font(), this->text[i] ); + } + + x_pos += char_width( text[i] ); + } + } + + if ( debug ) dump( stdout, "<- DRAW_TEXT" ); +} + + +/******************************** GLUI_TextBox::find_insertion_pt() *********/ +/* This function returns the character number *before which* the insertion */ +/* point goes */ + +int GLUI_TextBox::find_insertion_pt( int x, int y ) +{ + /*** See if we clicked outside box ***/ + if ( x < this->x_abs || y < this->y_abs) + return -1; + + /*** See if we clicked in an empty box ***/ + if ( text.empty() ) + return 0; + + /* update insert variables */ + insert_x = x; + insert_y = y; + + int text_length = text.length()-1; + int box_width = get_box_width(); + + int sol = 0; + int eol = 0; + int line = 0; + + int y_off = y - (y_abs + 2 + GLUI_TEXTBOX_BOXINNERMARGINX); + int x_off = x - (x_abs + 2 + GLUI_TEXTBOX_BOXINNERMARGINX); + + /* Find the line clicked, + The possibility of long lines getting wrapped complicates this. */ + while ((line-start_line+1)*LINE_HEIGHT < y_off && eol < text_length) + { + while (eol < text_length && text[eol] != '\n' && + substring_width(sol, eol+1) <= box_width) + { + eol++; + } + if (text[eol]=='\n' && eol=x_off) { + // did we go far enough? (see if click was >1/2 width of last char) + int decision_pt = prev_w+(total_w-prev_w)/2; + if (x_off>decision_pt) eol++; + } + return eol; + +#if 0 + while (eol < text_length && text[eol] != '\n' && + substring_width(sol, eol+1) < box_width ) + { + eol++; + } + + + /* We move from right to left, looking to see if the mouse was clicked + to the right of the ith character */ +#if 0 + int curr_x = this->x_abs + + substring_width( sol, eol ) + + 2 /* The edittext box has a 2-pixel margin */ + + GLUI_TEXTBOX_BOXINNERMARGINX; /** plus this many pixels blank space + between the text and the box **/ +#endif + + /** find mouse click in text **/ + + if (x_off > substring_width(sol, eol)) + return eol; + + for(i = sol; i <= eol+1; i++) { + if (x_off <= substring_width(sol, i)) + return i+1; + } + return 0; +#endif +} + + +int GLUI_TextBox::get_box_width() +{ + return MAX( this->w + - 4 /* 2 * the two-line box border */ + - 2 * GLUI_TEXTBOX_BOXINNERMARGINX, 0 ); + +} + +/******************************** GLUI_TextBox::draw_insertion_pt() *********/ + +void GLUI_TextBox::draw_insertion_pt( void ) +{ + int curr_x, box_width, text_length, eol, sol, line; + + if ( NOT can_draw() ) + return; + + /*** Don't draw insertion pt if control is disabled ***/ + if ( NOT enabled ) + return; + + if ( sel_start != sel_end OR insertion_pt < 0 ) { + return; /* Don't draw insertion point if there is a current selection */ + } + + if ( debug ) dump( stdout, "-> DRAW_INS_PT" ); + + /* printf( "insertion pt: %d\n", insertion_pt ); */ + + box_width = get_box_width(); + + // This function is unable to distinguish whether an insertion + // point on a line break should be drawn on the line before or the line after. + // This depends on the sequence of operations used to get there, and this + // function just doesn't have that information. If curr_line were kept up + // to date elsewhere that could be used here to disambiguate, but arrow keys + // and such do not update it. + + sol = 0; + eol = 0; + text_length = text.length()-1; + + //while (eol < text_length && text[eol] != '\n' + // && substring_width(sol, eol + 1) < box_width ) + // eol++; + line = 0; + while (eol < insertion_pt && eol <= text_length) + { + if (text[eol] == '\n' || substring_width(sol, eol + 1) >= box_width) + { + eol++; + if (text[eol]=='\n'||eol!=insertion_pt + ||(eol==insertion_pt && eol>0 && text[eol-1]=='\n')) { + sol = eol; + line++; + } + } + else { + eol++; + } + } + + //glColor3f(1,0,0); + //glRecti(0, curr_line*LINE_HEIGHT, 3, (curr_line+1)*LINE_HEIGHT); + + curr_line = line; + + if (scrollbar) + scrollbar->set_int_val(start_line); + if (curr_line < start_line || curr_line > (start_line + visible_lines)) /* Insertion pt out of draw area */ + return; + + curr_x = this->x_abs + + 2 /* The edittext box has a 2-pixel margin */ + + GLUI_TEXTBOX_BOXINNERMARGINX; /** plus this many pixels blank space + between the text and the box **/ + + curr_x += substring_width(sol,insertion_pt-1); + if (insertion_pt == text.length() && text[text.length()-1] == '\n' + || curr_x-this->x_abs > (w - 2 - GLUI_TEXTBOX_BOXINNERMARGINX)) { // Insert on the next line + curr_x = this->x_abs + GLUI_TEXTBOX_BOXINNERMARGINX; + line++; + } + /* update insertion coordinates */ + insert_x = curr_x+5; /* I hate magic numbers too, these offset the imagined insertion point */ + insert_y = (curr_line-start_line+2)*LINE_HEIGHT; + + + glColor3f( 0.0, 0.0, 0.0 ); + glBegin( GL_LINE_LOOP ); + + curr_x -= x_abs; + glVertex2i( curr_x+1, (curr_line-start_line)*LINE_HEIGHT + 4 ); + glVertex2i( curr_x, (curr_line-start_line)*LINE_HEIGHT + 4 ); + glVertex2i( curr_x+1, (curr_line-start_line)*LINE_HEIGHT + 16 ); + glVertex2i( curr_x, (curr_line-start_line)*LINE_HEIGHT + 16 ); + glEnd(); + + + if ( debug ) dump( stdout, "-> DRAW_INS_PT" ); +} + + + + +/******************************** GLUI_TextBox::substring_width() *********/ +int GLUI_TextBox::substring_width( int start, int end, int initial_width ) +{ + // This function only works properly if start is really the start of a line. + // Otherwise tabs will be messed up. + int i, width = initial_width; + + for( i=start; i<=end; i++ ) + if (text[i] == '\t') { // Character is a tab, jump to next tab stop + width += tab_width-(width%tab_width); + //while (width == 0 || width % tab_width) + // width++; + } + else + width += char_width( text[i] ); + + return width; +} + + +/***************************** GLUI_TextBox::update_and_draw_text() ********/ + +void GLUI_TextBox::update_and_draw_text( void ) +{ + //update_substring_bounds(); + /* printf( "ss: %d/%d\n", substring_start, substring_end ); */ + + redraw(); +} + + +/********************************* GLUI_TextBox::special_handler() **********/ + +int GLUI_TextBox::special_handler( int key,int modifiers ) +{ + int tmp_insertion_pt; + if ( NOT glui ) + return false; + + if ( debug ) + printf( "SPECIAL:%d - mod:%d subs:%d/%d ins:%d sel:%d/%d\n", + key, modifiers, substring_start, substring_end,insertion_pt, + sel_start, sel_end ); + + if ( key == GLUT_KEY_DOWN ) { + if (insert_x == -1 || insert_y == -1) + return false; + tmp_insertion_pt = find_insertion_pt( keygoal_x, insert_y+LINE_HEIGHT); + if (tmp_insertion_pt < 0) + return false; + insertion_pt = tmp_insertion_pt; + sel_end = insertion_pt; + if (!(modifiers & GLUT_ACTIVE_SHIFT)) { + sel_start = sel_end; + } + if ( can_draw()) + update_and_draw_text(); + } else if ( key == GLUT_KEY_UP ) { + if (insert_x == -1 || insert_y == -1) + return false; + tmp_insertion_pt = find_insertion_pt( keygoal_x, insert_y-LINE_HEIGHT); + if (tmp_insertion_pt < 0) + return false; + insertion_pt = tmp_insertion_pt; + sel_end = insertion_pt; + if (!(modifiers & GLUT_ACTIVE_SHIFT)) { + sel_start = sel_end; + } + if ( can_draw()) + update_and_draw_text(); + } else if ( key == GLUT_KEY_LEFT ) { + if ( (modifiers & GLUT_ACTIVE_CTRL) != 0 ) { + insertion_pt = find_word_break( insertion_pt, -1 ); + } + else { + insertion_pt--; + } + // update keygoal_x! + } + else if ( key == GLUT_KEY_RIGHT ) { + if ( (modifiers & GLUT_ACTIVE_CTRL) != 0 ) { + insertion_pt = find_word_break( insertion_pt, +1 ); + } + else { + insertion_pt++; + } + // update keygoal_x! + } + else if ( key == GLUT_KEY_HOME ) { + insertion_pt = 0; + // update keygoal_x! + } + else if ( key == GLUT_KEY_END ) { + insertion_pt = text.length(); + // update keygoal_x! + } + + /*** Update selection if shift key is down ***/ + if ( (modifiers & GLUT_ACTIVE_SHIFT ) != 0 ) + sel_end = insertion_pt; + else + sel_start = sel_end = insertion_pt; + + + CLAMP( insertion_pt, 0, text.length()); /* Make sure insertion_pt + is in bounds */ + CLAMP( sel_start, 0, text.length()); /* Make sure insertion_pt + is in bounds */ + CLAMP( sel_end, 0, text.length()); /* Make sure insertion_pt + is in bounds */ + + /******** Now redraw text ***********/ + if ( can_draw()) + update_and_draw_text(); + + return true; +} + + +/****************************** GLUI_TextBox::find_word_break() **********/ +/* It looks either left or right (depending on value of 'direction' */ +/* for the beginning of the next 'word', where word are characters */ +/* separated by one of the following tokens: " :-.," */ +/* If there is no next word in the specified direction, this returns */ +/* the beginning of 'text', or the very end. */ + +int GLUI_TextBox::find_word_break( int start, int direction ) +{ + int i, j; + char breaks[] = " \n\t:-.,"; + int num_break_chars = (int)strlen(breaks), text_len = text.length(); + int new_pt; + + /** If we're moving left, we have to start two back, in case we're either + already at the beginning of a word, or on a separating token. + Otherwise, this function would just return the word we're already at **/ + if ( direction == -1 ) { + start -= 2; + } + + /***** Iterate over text in the specified direction *****/ + for ( i=start; i >= 0 AND i < text_len; i += direction ) { + + /** For each character in text, iterate over list of separating tokens **/ + for( j=0; j 0 ) /* Return the end of string */ + return text_len; + else /* Return the beginning of the text */ + return 0; +} + + +/********************************** GLUI_TextBox::clear_substring() ********/ + +void GLUI_TextBox::clear_substring( int start, int end ) +{ + text.erase(start,end-start); +} + + + +/************************************ GLUI_TextBox::update_size() **********/ + +void GLUI_TextBox::update_size( void ) +{ + if ( NOT glui ) + return; + + if ( w < GLUI_TEXTBOX_MIN_TEXT_WIDTH ) + w = GLUI_TEXTBOX_MIN_TEXT_WIDTH; +} + + +/****************************** GLUI_TextBox::set_text() **********/ + +void GLUI_TextBox::set_text( const char *new_text ) +{ + text = new_text; + + substring_start = 0; + substring_end = text.length() - 1; + insertion_pt = -1; + sel_start = 0; + sel_end = 0; + visible_lines = 0; + start_line = 0; + curr_line = 0; + num_lines = 0; + + if ( can_draw() ) + update_and_draw_text(); + + /*** Now update the live variable ***/ + output_live(true); +} + + +/*************************************** GLUI_TextBox::dump() **************/ + +void GLUI_TextBox::dump( FILE *out, char *name ) +{ + fprintf( out, + "%s (edittext@%p): line:%d ins_pt:%d subs:%d/%d sel:%d/%d len:%d\n", + name, this, curr_line, + insertion_pt, substring_start, substring_end, sel_start, sel_end, + text.length()); +} + + +/**************************************** GLUI_TextBox::mouse_over() ********/ + +int GLUI_TextBox::mouse_over( int state, int x, int y ) +{ + if ( state && enabled) { + /* curr_cursor = GLUT_CURSOR_TEXT; */ + glutSetCursor( GLUT_CURSOR_TEXT ); + } + else { + /* printf( "OUT\n" ); */ + glutSetCursor( GLUT_CURSOR_LEFT_ARROW ); + } + + return true; +} + +void GLUI_TextBox::scrollbar_callback(GLUI_Control *my_scrollbar) { + GLUI_Scrollbar *sb = dynamic_cast(my_scrollbar); + if (!sb) return; + GLUI_TextBox* me = (GLUI_TextBox*) sb->associated_object; + if (me->scrollbar == NULL) + return; + int new_start_line = sb->get_int_val(); // ?? + me->start_line = new_start_line; + if (new_start_line < (me->curr_line - me->visible_lines)) + me->curr_line = new_start_line + me->visible_lines; + if (new_start_line > me->curr_line) + me->curr_line = new_start_line; + if ( me->can_draw() ) + me->update_and_draw_text(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_translation.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_translation.cpp new file mode 100644 index 00000000..9581b50e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_translation.cpp @@ -0,0 +1,559 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_translation - GLUI_Translation control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#include "GL/glui.h" +#include "glui_internal.h" +#include "algebra3.h" + +/********************** GLUI_Translation::GLUI_Translation() ***/ + +GLUI_Translation::GLUI_Translation( + GLUI_Node *parent, const char *name, + int trans_t, float *value_ptr, + int id, GLUI_CB cb ) +{ + common_init(); + + set_ptr_val( value_ptr ); + user_id = id; + set_name( name ); + callback = cb; + parent->add_control( this ); + //init_live(); + + trans_type = trans_t; + + if ( trans_type == GLUI_TRANSLATION_XY ) { + float_array_size = 2; + } + else if ( trans_type == GLUI_TRANSLATION_X ) { + float_array_size = 1; + } + else if ( trans_type == GLUI_TRANSLATION_Y ) { + float_array_size = 1; + } + else if ( trans_type == GLUI_TRANSLATION_Z ) { + float_array_size = 1; + } + init_live(); +} + +/********************** GLUI_Translation::iaction_mouse_down_handler() ***/ +/* These are really in local coords (5/10/99) */ + +int GLUI_Translation::iaction_mouse_down_handler( int local_x, + int local_y ) +{ + int center_x, center_y; + + down_x = local_x; + down_y = local_y; + + if ( trans_type == GLUI_TRANSLATION_XY ) { + orig_x = float_array_val[0]; + orig_y = float_array_val[1]; + + /** Check if the Alt key is down, which means lock to an axis **/ + + center_x = w/2; + center_y = (h-18)/2; + + if ( glui->curr_modifiers & GLUT_ACTIVE_ALT ) { + if ( ABS(local_y-center_y) > ABS(local_x-center_x) ) { + locked = GLUI_TRANSLATION_LOCK_Y; + glutSetCursor( GLUT_CURSOR_UP_DOWN ); + } + else { + locked = GLUI_TRANSLATION_LOCK_X; + glutSetCursor( GLUT_CURSOR_LEFT_RIGHT ); + } + } + else { + locked = GLUI_TRANSLATION_LOCK_NONE; + glutSetCursor( GLUT_CURSOR_SPRAY ); + } + } + else if ( trans_type == GLUI_TRANSLATION_X ) { + glutSetCursor( GLUT_CURSOR_LEFT_RIGHT ); + orig_x = float_array_val[0]; + } + else if ( trans_type == GLUI_TRANSLATION_Y ) { + glutSetCursor( GLUT_CURSOR_UP_DOWN ); + orig_y = float_array_val[0]; + } + else if ( trans_type == GLUI_TRANSLATION_Z ) { + glutSetCursor( GLUT_CURSOR_UP_DOWN ); + orig_z = float_array_val[0]; + } + + trans_mouse_code = 1; + redraw(); + + return false; +} + + +/*********************** GLUI_Translation::iaction_mouse_up_handler() **********/ + +int GLUI_Translation::iaction_mouse_up_handler( int local_x, int local_y, + bool inside ) +{ + trans_mouse_code = GLUI_TRANSLATION_MOUSE_NONE; + locked = GLUI_TRANSLATION_LOCK_NONE; + + redraw(); + + return false; +} + + +/******************* GLUI_Translation::iaction_mouse_held_down_handler() ******/ + +int GLUI_Translation::iaction_mouse_held_down_handler( int local_x, int local_y, + bool inside) +{ + float x_off, y_off; + float off_array[2]; + + x_off = scale_factor * (float)(local_x - down_x); + y_off = -scale_factor * (float)(local_y - down_y); + + if ( glui->curr_modifiers & GLUT_ACTIVE_SHIFT ) { + x_off *= 100.0f; + y_off *= 100.0f; + } + else if ( glui->curr_modifiers & GLUT_ACTIVE_CTRL ) { + x_off *= .01f; + y_off *= .01f; + } + + + if ( trans_type == GLUI_TRANSLATION_XY ) { + + if ( locked == GLUI_TRANSLATION_LOCK_X ) + y_off = 0.0; + else if ( locked == GLUI_TRANSLATION_LOCK_Y ) + x_off = 0.0; + + off_array[0] = x_off + orig_x; + off_array[1] = y_off + orig_y; + } + else if ( trans_type == GLUI_TRANSLATION_X ) { + off_array[0] = x_off + orig_x; + } + else if ( trans_type == GLUI_TRANSLATION_Y ) { + off_array[0] = y_off + orig_y; + } + else if ( trans_type == GLUI_TRANSLATION_Z ) { + off_array[0] = y_off + orig_z; + } + + set_float_array_val( (float*) &off_array[0] ); + + return false; +} + + +/******************** GLUI_Translation::iaction_draw_active_area_persp() **************/ + +void GLUI_Translation::iaction_draw_active_area_persp( void ) +{ +} + + +/******************** GLUI_Translation::iaction_draw_active_area_ortho() **********/ + +void GLUI_Translation::iaction_draw_active_area_ortho( void ) +{ + /********* Draw emboss circles around arcball control *********/ + float radius; + radius = (float)(h-22)/2.0; /* MIN((float)w/2.0, (float)h/2.0); */ + glLineWidth( 1.0 ); + + draw_emboss_box( (int) -radius-2, (int)radius+2, + (int)-radius-2, (int)radius+2 ); + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glTranslatef( .5, .5, .5 ); + /* glScalef( radius-1.0, radius-1.0, radius-1.0 ); */ + if ( trans_type == GLUI_TRANSLATION_Z ) + draw_2d_z_arrows((int)radius-1); + else if ( trans_type == GLUI_TRANSLATION_XY ) + draw_2d_xy_arrows((int)radius-1); + else if ( trans_type == GLUI_TRANSLATION_X ) + draw_2d_x_arrows((int)radius-1); + else if ( trans_type == GLUI_TRANSLATION_Y ) + draw_2d_y_arrows((int)radius-1); + + glPopMatrix(); +} + + +/******************************** GLUI_Translation::iaction_dump() **********/ + +void GLUI_Translation::iaction_dump( FILE *output ) +{ +} + + +/******************** GLUI_Translation::iaction_special_handler() **********/ + +int GLUI_Translation::iaction_special_handler( int key,int modifiers ) +{ + + return false; +} + + + +/*************************** GLUI_Translation::draw_2d_z_arrows() **************/ + +void GLUI_Translation::draw_2d_z_arrows( int radius ) +{ + if ( trans_mouse_code != GLUI_TRANSLATION_MOUSE_NONE ) { + draw_2d_arrow(radius, true, 2); + draw_2d_arrow(radius, true, 0); + } + else { + draw_2d_arrow(radius, false, 2); + draw_2d_arrow(radius, false, 0); + } +} + + +/*************************** GLUI_Translation::draw_2d_x_arrows() **************/ + +void GLUI_Translation::draw_2d_x_arrows( int radius ) +{ + if ( trans_mouse_code != GLUI_TRANSLATION_MOUSE_NONE ) { + draw_2d_arrow(radius, true, 1); + draw_2d_arrow(radius, true, 3); + } + else { + draw_2d_arrow(radius, false, 1); + draw_2d_arrow(radius, false, 3); + } +} + + +/*************************** GLUI_Translation::draw_2d_y_arrows() **************/ + +void GLUI_Translation::draw_2d_y_arrows( int radius ) +{ + if ( trans_mouse_code != GLUI_TRANSLATION_MOUSE_NONE ) { + draw_2d_arrow(radius, true, 0); + draw_2d_arrow(radius, true, 2); + } + else { + draw_2d_arrow(radius, false, 0); + draw_2d_arrow(radius, false, 2); + } +} + + +/************************** GLUI_Translation::draw_2d_xy_arrows() **************/ + +void GLUI_Translation::draw_2d_xy_arrows( int radius) +{ + if ( trans_mouse_code != GLUI_TRANSLATION_MOUSE_NONE ) { + if ( locked == GLUI_TRANSLATION_LOCK_X ) { + draw_2d_arrow(radius, false, 0); + draw_2d_arrow(radius, false, 2); + draw_2d_arrow(radius, true, 1); + draw_2d_arrow(radius, true, 3); + } + else if ( locked == GLUI_TRANSLATION_LOCK_Y ) { + draw_2d_arrow(radius, false, 1); + draw_2d_arrow(radius, false, 3); + draw_2d_arrow(radius, true, 0); + draw_2d_arrow(radius, true, 2); + } + else { + draw_2d_arrow(radius, true, 0); + draw_2d_arrow(radius, true, 1); + draw_2d_arrow(radius, true, 2); + draw_2d_arrow(radius, true, 3); + } + } + else { + draw_2d_arrow(radius, false, 0); + draw_2d_arrow(radius, false, 1); + draw_2d_arrow(radius, false, 2); + draw_2d_arrow(radius, false, 3); + } + + return; +} + + +/*************************** GLUI_Translation::draw_2d_arrow() **************/ +/* ori: 0=up, 1=left, 2=down, 3=right */ +/* */ +/* */ +/* 0, y2 */ +/* / \ */ +/* / \ */ +/* / \ */ +/* / \ */ +/* / \ */ +/* / \ */ +/* / \ */ +/* / \ */ +/* -x2,y1 -x1b,y1 x1b,y1 x2,y1 */ +/* | | */ +/* | | */ +/* | | */ +/* | | */ +/* | | */ +/* -x1a,y0 x1a,y0 */ +/* */ + + +void GLUI_Translation::draw_2d_arrow( int radius, int filled, int orientation ) +{ + float x1 = .2f, x2 = .4f, y1 = .54f, y2 = .94f, y0; + float x1a, x1b; +/* + vec3 col1( 0.0, 0.0, 0.0 ), col2( .45, .45, .45 ), + col3( .7, .7, .7 ), col4( 1.0, 1.0, 1.0 ); + vec3 c1, c2, c3, c4, c5, c6; +*/ + vec3 white(1.0f,1.0f,1.0f), black(0.0f,0.0f,0.0f), gray(.45f,.45f,.45f), + bkgd(.7f,.7f,.7f); + int c_off=0; /* color index offset */ + + if ( glui ) + bkgd.set(glui->bkgd_color_f[0], + glui->bkgd_color_f[1], + glui->bkgd_color_f[2]); + + /* bkgd[0] = 255.0; bkgd[1] = 0; */ + + /** The following 8 colors define the shading of an octagon, in + clockwise order, starting from the upstroke on the left **/ + /** This is for an outside and inside octagons **/ + vec3 colors_out[]={white, white, white, gray, black, black, black, gray}; + vec3 colors_in[] ={bkgd,white,bkgd,gray,gray,gray,gray,gray}; + +#define SET_COL_OUT(i) glColor3fv((float*) &colors_out[(i)%8][0]); +#define SET_COL_IN(i) glColor3fv((float*) &colors_in[(i)%8][0]); + + x1 = (float)radius * .2; + x2 = x1 * 2; + y1 = (float)radius * .54; + y2 = y1 + x2; + x1a = x1; + x1b = x1; + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + +#define DRAW_SEG( xa,ya,xb,yb ) glVertex2f(xa,ya); glVertex2f(xb,yb); + + glScalef( -1.0, 1.0, 1.0 ); + + if ( orientation == 2 ) { + c_off = 4; + } + else if ( orientation == 0 ) { + c_off = 0; + glRotatef( 180.0, 0.0, 0.0, 1.0 ); + } + else if ( orientation == 1 ) { + c_off = 2; + glRotatef( 90.0, 0.0, 0.0, 1.0 ); + } + else if ( orientation == 3 ) { + c_off = 6; + glRotatef( -90.0, 0.0, 0.0, 1.0 ); + } + + if ( trans_type == GLUI_TRANSLATION_Z ) + y0 = 0.0; + else if ( trans_type == GLUI_TRANSLATION_XY ) + y0 = x1; + else + y0 = 0.0; + + + if ( trans_type == GLUI_TRANSLATION_Z ) { + if ( orientation == 0 ) { + y1 += 2.0; + y2 += 0.0; + + x1b -= 2.0; + x2 -= 2.0; + x1a += 2.0; + } + else if ( orientation == 2 ) { + y1 -= 6.0; + x1a += 2.0; + x1b += 4.0; + x2 += 6.0; + } + } + + /*** Fill in inside of arrow ***/ + if ( NOT filled ) { /*** Means button is up - control is not clicked ***/ + /*glColor3f( .8, .8, .8 ); */ + set_to_bkgd_color(); + glColor3f( bkgd[0]+.07, bkgd[1]+.07, bkgd[2]+.07 ); + } + else { /*** Button is down on control ***/ + glColor3f( .6f, .6f, .6f ); + c_off += 4; /* Indents the shadows - goes from a raised look to embossed */ + } + + /*** Check if control is enabled or not ***/ + if ( NOT enabled ) { + set_to_bkgd_color(); + /*c_off += 4; -- Indents the shadows - goes from a raised look to embossed */ + colors_out[0] = colors_out[1] = colors_out[2] = colors_out[7] = gray; + colors_out[3] = colors_out[4] = colors_out[5] = colors_out[6] = white; + colors_in[0] = colors_in[1] = colors_in[2] = colors_in[7] = white; + colors_in[3] = colors_in[4] = colors_in[5] = colors_in[6] = gray; + + } + + glBegin( GL_POLYGON ); + glVertex2f( 0.0, 0.0 ); glVertex2f( -x1a, 0.0 ); + glVertex2f( -x1a, 0.0 ); glVertex2f( -x1b, y1 ); + glVertex2f( x1b, y1); glVertex2f( x1a, 0.0 ); + glVertex2f( x1a, 0.0 ); glVertex2f( 0.0, 0.0 ); + glEnd(); + glBegin( GL_TRIANGLES ); + glVertex2f( -x2, y1 ); glVertex2f( 0.0, y2 ); glVertex2f( x2, y1 ); + glEnd(); + + glLineWidth( 1.0 ); + /*** Draw arrow outline ***/ + glBegin( GL_LINES ); + + SET_COL_IN(1+c_off); DRAW_SEG( 0.0, y2-1.0, -x2, y1-1.0 ); + SET_COL_IN(6+c_off); DRAW_SEG( -x2+2.0, y1+1.0, -x1b+1.0, y1+1.0 ); + SET_COL_IN(0+c_off); DRAW_SEG( -x1b+1.0, y1+1.0, -x1a+1.0, y0 ); + SET_COL_IN(3+c_off); DRAW_SEG( 0.0, y2-1.0, x2, y1-1.0 ); + SET_COL_IN(6+c_off); DRAW_SEG( x2-1.0, y1+1.0, x1b-1.0, y1+1.0 ); + SET_COL_IN(4+c_off); DRAW_SEG( x1b-1.0, y1+1.0, x1a-1.0, y0 ); + + SET_COL_OUT(0+c_off); DRAW_SEG( -x1a, y0, -x1b, y1 ); + SET_COL_OUT(6+c_off); DRAW_SEG( -x1b, y1, -x2, y1 ); + SET_COL_OUT(1+c_off); DRAW_SEG( -x2, y1, 0.0, y2 ); + SET_COL_OUT(3+c_off); DRAW_SEG( 0.0, y2, x2, y1 ); + SET_COL_OUT(6+c_off); DRAW_SEG( x2, y1, x1b, y1 ); + SET_COL_OUT(4+c_off); DRAW_SEG( x1b, y1, x1a, y0 ); + + glEnd(); + +#undef DRAW_SEG + + glPopMatrix(); +} + + +/*************************** GLUI_Translation::get_mouse_code() *************/ + +int GLUI_Translation::get_mouse_code( int x, int y ) +{ + if ( x == 0 AND y < 0 ) + return GLUI_TRANSLATION_MOUSE_DOWN; + else if ( x == 0 AND y > 0 ) + return GLUI_TRANSLATION_MOUSE_UP; + else if ( x > 0 AND y == 0 ) + return GLUI_TRANSLATION_MOUSE_LEFT; + else if ( x < 0 AND y == 0 ) + return GLUI_TRANSLATION_MOUSE_RIGHT; + else if ( x < 0 AND y < 0 ) + return GLUI_TRANSLATION_MOUSE_DOWN_LEFT; + else if ( x < 0 AND y > 0 ) + return GLUI_TRANSLATION_MOUSE_DOWN_RIGHT; + else if ( x > 0 AND y < 0 ) + return GLUI_TRANSLATION_MOUSE_UP_LEFT; + else if ( x > 0 AND y > 0 ) + return GLUI_TRANSLATION_MOUSE_UP_RIGHT; + + + return GLUI_TRANSLATION_MOUSE_NONE; +} + + +/*********************************** GLUI_Translation::set_x() ******/ + +void GLUI_Translation::set_x( float val ) +{ + set_one_val( val, 0 ); +} + + +/*********************************** GLUI_Translation::set_y() ******/ + +void GLUI_Translation::set_y( float val ) +{ + if ( trans_type == GLUI_TRANSLATION_XY ) + set_one_val( val, 1 ); + else + set_one_val( val, 0 ); +} + + +/*********************************** GLUI_Translation::set_z() ******/ + +void GLUI_Translation::set_z( float val ) +{ + set_one_val( val, 0 ); +} + + +/******************************* GLUI_Translation::set_one_val() ****/ + +void GLUI_Translation::set_one_val( float val, int index ) +{ + float *fp; + + float_array_val[index] = val; /* set value in array */ + + /*** The code below is like output_live, except it only operates on + a single member of the float array (given by 'index') instead of + outputting the entire array ****/ + + if ( ptr_val == NULL OR NOT live_inited ) + return; + + fp = (float*) ptr_val; + fp[index] = float_array_val[index]; + last_live_float_array[index] = float_array_val[index]; + + /** Update the main gfx window? **/ + if ( this->glui != NULL ) { + this->glui->post_update_main_gfx(); + } +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_tree.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_tree.cpp new file mode 100644 index 00000000..1ed456d5 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_tree.cpp @@ -0,0 +1,278 @@ +/**************************************************************************** + + GLUI User Interface Toolkit + --------------------------- + + glui_panel.cpp - GLUI_Panel control class + + + -------------------------------------------------- + + Copyright (c) 1998 Paul Rademacher + + This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. + +*****************************************************************************/ + +#include "glui_internal_control.h" + + +/****************************** GLUI_Tree::GLUI_Tree() **********/ +GLUI_Tree::GLUI_Tree(GLUI_Node *parent, const char *name, + int open, int inset) +{ + common_init(); + GLUI_StaticText *inset_label; + GLUI_Column *col; + + this->set_name( name ); + this->user_id = -1; + + if ( NOT open ) { + this->is_open = false; + this->h = GLUI_DEFAULT_CONTROL_HEIGHT + 7; + } + + parent->add_control( this ); + inset_label = new GLUI_StaticText(this,""); + inset_label->set_w(inset); + col = new GLUI_Column(this,true); + this->set_column(col); + this->set_alignment(GLUI_ALIGN_LEFT); +} + + +/****************************** GLUI_Tree::open() **********/ + +void GLUI_Tree::open( void ) +{ + if ( is_open ) + return; + is_open = true; + + GLUI_DRAWINGSENTINAL_IDIOM + + child_head = collapsed_node.child_head; + child_tail = collapsed_node.child_tail; + + collapsed_node.child_head = NULL; + collapsed_node.child_tail = NULL; + + if ( child_head != NULL ) { + ((GLUI_Control*) child_head)->unhide_internal( true ); + } + + glui->refresh(); +} + + +/****************************** GLUI_Tree::close() **********/ + +void GLUI_Tree::close( void ) +{ + if ( NOT glui ) + return; + + if ( NOT is_open ) + return; + is_open = false; + + GLUI_DRAWINGSENTINAL_IDIOM + + if ( child_head != NULL ) { + ((GLUI_Control*) child_head)->hide_internal( true ); + } + + collapsed_node.child_head = first_child(); + collapsed_node.child_tail = last_child(); + + child_head = NULL; + child_tail = NULL; + + this->h = GLUI_DEFAULT_CONTROL_HEIGHT + 7; + + glui->refresh(); +} + + +/**************************** GLUI_Tree::mouse_down_handler() **********/ + + +int GLUI_Tree::mouse_down_handler( int local_x, int local_y ) +{ + if ( local_y - y_abs > 18 ) { + initially_inside = currently_inside = false; + return false; + } + + currently_inside = true; + initially_inside = true; + redraw(); + + return false; +} + +/**************************** GLUI_Tree::mouse_held_down_handler() ****/ + +int GLUI_Tree::mouse_held_down_handler( + int local_x, int local_y, + bool new_inside ) +{ + if ( NOT initially_inside ) + return false; + + if ( local_y - y_abs> 18 ) + new_inside = false; + + if (currently_inside != new_inside) + redraw(); + + return false; +} + + +/**************************** GLUI_Tree::mouse_down_handler() **********/ + +int GLUI_Tree::mouse_up_handler( int local_x, int local_y, bool inside ) +{ + if ( currently_inside ) { + if ( is_open ) + close(); + else + open(); + } + + currently_inside = false; + initially_inside = false; + redraw(); + + return false; +} + + +/********************************* GLUI_Tree::draw() ***********/ + +void GLUI_Tree::draw( int x, int y ) +{ + GLUI_DRAWINGSENTINAL_IDIOM + int left, right, top, bottom, delta_x; + + left = 5; + right = w-left; + top = 3; + bottom = 3+16; + delta_x = 0; + + glui->draw_raised_box( left, top, 16, 16 ); + + if ( glui ) + glColor3ub(glui->bkgd_color.r,glui->bkgd_color.g,glui->bkgd_color.b); + glDisable( GL_CULL_FACE ); + glBegin( GL_QUADS ); + glVertex2i( left+17, top+1 ); glVertex2i( right-1, top+1 ); + glVertex2i( right-1, bottom-1 ); glVertex2i( left+17, bottom-1 ); + glEnd(); + + if (format & GLUI_TREEPANEL_DISPLAY_HIERARCHY) { + delta_x = string_width( level_name ) + char_width(' '); + glColor3f( lred, lgreen, lblue); /* The hierarchy is drawn in bold */ + glRasterPos2i(left + 25, top + 11); + draw_string(level_name); + glRasterPos2i(left + 24, top + 11); + draw_string(level_name); + } + + draw_name( delta_x+left+24, top+11 ); + + if ( active ) + draw_active_box( left+22, delta_x+left+string_width( name )+32, + top, bottom-2 ); + + + /** Draw '+' or '-' **/ + + glBegin( GL_LINES ); + if ( is_open ) { + if ( enabled ) + if (is_current) + glColor3f( 0, 0, 1 ); + else + glColor3f( 0.0, 0.0, 0.0 ); + else + glColor3f( 0.5, 0.5, 0.5 ); + glVertex2i(left+4,(top+bottom)/2); glVertex2i(left+13,(top+bottom)/2); + + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i(left+4,1+(top+bottom)/2);glVertex2i(left+13,1+(top+bottom)/2); + } + else + { + glColor3f( 1.0, 1.0, 1.0 ); + glVertex2i(left+9,top+3); glVertex2i(left+9,bottom-4); + glVertex2i(left+4,(top+bottom)/2); glVertex2i(left+13,(top+bottom)/2); + + if ( enabled ) + if (is_current) + glColor3f( 0, 0, 1 ); + else + glColor3f( 0.0, 0.0, 0.0 ); + else + glColor3f( 0.5, 0.5, 0.5 ); + glVertex2i(left+4,-1+(top+bottom)/2); + glVertex2i(left+13,-1+(top+bottom)/2); + glVertex2i(left+8,top+3); + glVertex2i(left+8,bottom-4); + } + glEnd(); + + glLineWidth( 1.0 ); + + if (currently_inside) draw_pressed(); +} + + +/***************************** GLUI_Tree::update_size() **********/ + +void GLUI_Tree::update_size( void ) +{ + int text_size = 0, delta_x = 0; + + if ( NOT glui ) + return; + + text_size = string_width(name); + + if (format & GLUI_TREEPANEL_DISPLAY_HIERARCHY) { + delta_x = string_width( level_name ); + } + + if ( w < text_size + 36 + delta_x) + w = text_size + 36 + delta_x; +} + + +/**************************** GLUI_Tree::draw_pressed() ***********/ + +void GLUI_Tree::draw_pressed( void ) +{ + int left, right, top, bottom; + + left = 5; + right = w-left; + top = 3; + bottom = 3+16; + + glColor3f( 0.0, 0.0, 0.0 ); + + glBegin( GL_LINE_LOOP ); + glVertex2i( left, top ); glVertex2i( right, top ); + glVertex2i( right, bottom ); glVertex2i( left,bottom ); + glEnd(); + + glBegin( GL_LINE_LOOP ); + glVertex2i( left+1, top+1 ); glVertex2i( right-1, top+1 ); + glVertex2i( right-1, bottom-1 ); glVertex2i( left+1,bottom-1 ); + glEnd(); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_treepanel.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_treepanel.cpp new file mode 100644 index 00000000..86c2e5e1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_treepanel.cpp @@ -0,0 +1,387 @@ +#include "GL/glui.h" + + +/****************************** GLUI_TreePanel::GLUI_TreePanel() *********/ + +GLUI_TreePanel::GLUI_TreePanel(GLUI_Node *parent, const char *name, + bool open, int inset) +{ + common_init(); + + set_name( name ); + user_id = -1; + + if ( !open ) { + is_open = false; + h = GLUI_DEFAULT_CONTROL_HEIGHT + 7; + } + + parent->add_control( this ); +} + +/****************************** GLUI_TreePanel::set_color() *********/ + +void GLUI_TreePanel::set_color(float r, float g, float b) +{ + red = r; + green = g; + blue = b; + redraw(); +} + +/************************ GLUI_TreePanel::set_level_color() *********/ + +void GLUI_TreePanel::set_level_color(float r, float g, float b) +{ + lred = r; + lgreen = g; + lblue = b; + redraw(); +} + +/****************************** GLUI_TreePanel::ab() *********/ + +/* Adds branch to curr_root */ +GLUI_Tree *GLUI_TreePanel::ab(const char *name, GLUI_Tree *root) +{ + GLUI_Tree *temp; + + + if (root != NULL) { + resetToRoot(root); + } + + temp = new GLUI_Tree(curr_root, name); + initNode(temp); + formatNode(temp); + + curr_root = temp; + curr_branch = NULL; /* Currently at leaf */ + + if (dynamic_cast(temp)) + ((GLUI_Tree *)temp)->set_current(true); + //refresh(); + // glui->deactivate_current_control(); + //glui->activate_control( temp, GLUI_ACTIVATE_TAB ); + return temp; + +} + +/****************************** GLUI_TreePanel::fb() *********/ + +/* Goes up one level, resets curr_root and curr_branch to parents*/ +void GLUI_TreePanel::fb(GLUI_Tree *branch) +{ + if (((GLUI_Panel *)branch) == ((GLUI_Panel *)this)) + return; + + if (((GLUI_Panel *)curr_branch) == ((GLUI_Panel *)this)) { + resetToRoot(); + return; + } + if (((GLUI_Panel *)curr_root) == ((GLUI_Panel *)this)) { + resetToRoot(); + return; + } + + if (branch != NULL) { + + if ( dynamic_cast(branch) ) + ((GLUI_Tree *)branch)->set_current(false); + + curr_branch = (GLUI_Tree *)branch->next(); + curr_root = (GLUI_Panel *)branch->parent(); + + if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) + curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); + + if ( dynamic_cast(curr_root) ) + ((GLUI_Tree *)curr_root)->set_current(true); + + } else { + if (curr_root != NULL) { /* up one parent */ + + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->set_current(false); + + curr_branch = (GLUI_Tree *) curr_root->next(); + curr_root = (GLUI_Panel *) curr_root->parent(); + + if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) + curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); + + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->set_current(true); + + } + + } + //refresh(); +} + + +/****************************** GLUI_TreePanel::refresh() *********/ + +void GLUI_TreePanel::refresh() +{ + glui->deactivate_current_control(); + glui->activate_control( curr_root, GLUI_ACTIVATE_TAB ); + + redraw(); +} + +/****************************** GLUI_TreePanel::initNode() *********/ + +void GLUI_TreePanel::initNode(GLUI_Tree *temp) +{ + if (temp == NULL) + return; + int level = temp->get_level(); + int child_number = 1; + + GLUI_Tree *ptree = dynamic_cast(temp->parent()); + if (ptree) { + level = ptree->get_level() + 1; + GLUI_Tree *prevTree = dynamic_cast(temp->prev()); + if (prevTree) { + child_number = prevTree->get_child_number() + 1; + } + } else if (dynamic_cast(temp) && + dynamic_cast(temp->parent())) { + child_number = ++root_children; + } + temp->set_id(uniqueID()); // -1 if unset + temp->set_level(level); + temp->set_child_number(child_number); +} + +/****************************** GLUI_TreePanel::formatNode() *********/ + +void GLUI_TreePanel::formatNode(GLUI_Tree *temp) +{ + if (temp == NULL) + return; + int level = temp->get_level(); + int child_number = temp->get_child_number(); + GLUI_String level_name=""; + GLUI_String full_name=""; + + temp->level_name == ""; + + if (format & GLUI_TREEPANEL_DISPLAY_HIERARCHY) { + if (format & GLUI_TREEPANEL_HIERARCHY_LEVEL_ONLY) { + glui_format_str(level_name, "%d", level); + } + if (format & GLUI_TREEPANEL_HIERARCHY_NUMERICDOT) { + if ( dynamic_cast(temp->parent()) ) + glui_format_str(level_name, "%s.%d", + ((GLUI_Tree *)(temp->parent()))->level_name.c_str(), + child_number); + else + glui_format_str(level_name, "%d", child_number); + } + } + + temp->set_level_color(lred, lgreen, lblue); + temp->set_format(format); + temp->level_name = level_name; + + if (format & GLUI_TREEPANEL_ALTERNATE_COLOR) { + switch (level%8) { + case (7): temp->set_color(.5f,.5f,.5f); break; + case (6): temp->set_color(.3f,.5f,.5f); break; + case (5): temp->set_color(.5f,.3f,.5f); break; + case (4): temp->set_color(.3f,.3f,.5f); break; + case (3): temp->set_color(.5f,.5f,.3f); break; + case (2): temp->set_color(.3f,.5f,.3f); break; + case (1): temp->set_color(.5f,.3f,.3f); break; + default: temp->set_color(.3f,.3f,.3f); + } + } else { + temp->set_color(red,green,blue); + } + + if (format & GLUI_TREEPANEL_DISABLE_BAR) { + temp->disable_bar(); + } else { + if (format & GLUI_TREEPANEL_DISABLE_DEEPEST_BAR) { + temp->disable_bar(); + if ( dynamic_cast(curr_root) ) + ((GLUI_Tree *)curr_root)->enable_bar(); + } else + if (format & GLUI_TREEPANEL_CONNECT_CHILDREN_ONLY) { + temp->disable_bar(); + if (temp->prev() && dynamic_cast(temp->prev()) ) + { + ((GLUI_Tree *)temp->prev())->enable_bar(); + } + } + } +} + +/****************************** GLUI_TreePanel::update_all() *********/ + +void GLUI_TreePanel::update_all() +{ + printf("GLUI_TreePanel::update_all() doesn't work yet. - JVK\n"); + return; + GLUI_Panel *saved_root = curr_root; + GLUI_Tree *saved_branch = curr_branch; + root_children = 0; + resetToRoot(this); + if (curr_branch && dynamic_cast(curr_branch)) + formatNode((GLUI_Tree *)curr_branch); + next(); + while (curr_root && curr_branch != this->first_child()) { + if (curr_branch && dynamic_cast(curr_branch)) { + formatNode((GLUI_Tree *)curr_branch); + } + next(); + } + curr_root = saved_root; + curr_branch = saved_branch; +} + +/****************************** GLUI_TreePanel::expand_all() *********/ + +void GLUI_TreePanel::expand_all() +{ + GLUI_Panel *saved_root = curr_root; + GLUI_Tree *saved_branch = curr_branch; + + resetToRoot(this); + if (dynamic_cast(curr_root)) + ((GLUI_Tree*)curr_root)->open(); + next(); + while (curr_root != NULL && curr_branch != this->first_child()) { + if (dynamic_cast(curr_root)) + ((GLUI_Tree*)curr_root)->open(); + next(); + } + + curr_root = saved_root; + curr_branch = saved_branch; +} + +/****************************** GLUI_TreePanel::collapse_all() *********/ + +void GLUI_TreePanel::collapse_all() +{ + GLUI_Panel *saved_root = curr_root; + GLUI_Tree *saved_branch = curr_branch; + + resetToRoot(this); + next(); + while (curr_root != NULL && curr_branch != this->first_child()) { + if (dynamic_cast(curr_root) && + curr_branch == NULL) { /* we want to close everything leaf-first */ + ((GLUI_Tree*)curr_root)->close(); + /* Rather than simply next(), we need to manually move the + curr_root because this node has been moved to the + collapsed_node list */ + curr_branch = (GLUI_Tree *)curr_root->next(); + curr_root = (GLUI_Panel *)curr_root->parent(); + } else + next(); + } + + curr_root = saved_root; + curr_branch = saved_branch; + +} + +/****************************** GLUI_TreePanel::db() *********/ + +/* Deletes the curr_root */ +void GLUI_TreePanel::db(GLUI_Tree *root) +{ + GLUI_Tree *temp_branch; + GLUI_Panel *temp_root; + + if (((GLUI_Control *)root) == ((GLUI_Control *)this)) + return; + + if (root != NULL) { + curr_root = (GLUI_Tree *)root; + curr_branch = NULL; + } + + if (curr_root == NULL || ((GLUI_Panel *)curr_root) == ((GLUI_Panel *)this)) { + resetToRoot(); + return; + } + + + temp_branch = (GLUI_Tree *)curr_root->next(); /* Next branch, if any */ + temp_root = (GLUI_Panel *)curr_root->parent(); /* new root */ + curr_root->unlink(); + delete curr_root; + curr_branch = (GLUI_Tree *) temp_branch; + curr_root = (GLUI_Panel *) temp_root; + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->open(); + + if ((format & GLUI_TREEPANEL_DISABLE_DEEPEST_BAR) == GLUI_TREEPANEL_DISABLE_DEEPEST_BAR) { + if (dynamic_cast(curr_root) && ((GLUI_Tree *)curr_root->next()) == NULL) + ((GLUI_Tree *)curr_root)->disable_bar(); + } + //refresh(); +} + +/****************************** GLUI_TreePanel::descendBranch() *********/ + +/* Finds the very last branch of curr_root, resets vars */ +void GLUI_TreePanel::descendBranch(GLUI_Panel *root) { + if (root) + resetToRoot(root); + else + resetToRoot(curr_root); + if (curr_branch != NULL && curr_branch != ((GLUI_Panel *)this)) { + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->set_current(false); + descendBranch(curr_branch); + } +} + +/****************************** GLUI_TreePanel::next() *********/ + +void GLUI_TreePanel::next() +{ + if (curr_root == NULL) + resetToRoot(this); + + if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) + curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); + + + if (curr_branch != NULL && curr_branch != ((GLUI_Panel *)this)) { /* Descend into branch */ + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->set_current(false); + resetToRoot(curr_branch); + } else if (curr_branch == NULL) { + fb(NULL); /* Backup and move on */ + } +} + +/****************************** GLUI_TreePanel::resetToRoot() *********/ + +/* Resets curr_root and curr branch to TreePanel and lastChild */ +void GLUI_TreePanel::resetToRoot(GLUI_Panel *new_root) +{ + GLUI_Panel *root = this; + if (new_root != NULL) + root = new_root; + curr_root = root; + if (dynamic_cast(curr_root)) + ((GLUI_Tree *)curr_root)->set_current(true); + curr_branch = (GLUI_Tree *)root->first_child(); + + /* since Trees are collapsable, we need to check the collapsed nodes + in case the curr_root is collapsed */ + if (curr_branch == NULL && (root->collapsed_node).first_child() != NULL) { + curr_branch = (GLUI_Tree *)(root->collapsed_node).first_child(); + } + while (curr_branch && dynamic_cast(curr_branch)) { + curr_branch=(GLUI_Tree *)curr_branch->next(); + } +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/glui_window.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/glui_window.cpp new file mode 100644 index 00000000..c028e248 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/glui_window.cpp @@ -0,0 +1,44 @@ +/* + + glui_window.cpp - GLUI_Button control class + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "GL/glui.h" +#include "glui_internal.h" + +GLUI_Glut_Window::GLUI_Glut_Window() +: GLUI_Node(), + + glut_window_id(0), + glut_keyboard_CB(NULL), + glut_special_CB(NULL), + glut_reshape_CB(NULL), + glut_passive_motion_CB(NULL), + glut_mouse_CB(NULL), + glut_visibility_CB(NULL), + glut_motion_CB(NULL), + glut_display_CB(NULL), + glut_entry_CB(NULL) +{ +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.cpp new file mode 100644 index 00000000..3e80242a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.cpp @@ -0,0 +1,243 @@ +/*********************************************************************** + + quaternion.cpp - A quaternion class + + ------------------------------------------------------------------- + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +************************************************************************ + + Feb 1998, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + +************************************************************************/ + +#include "quaternion.h" +#include +#include "glui_internal.h" + +/******************************************* constructors **************/ + +quat::quat() +{ + *this = quat_identity(); +} + +quat::quat(const float x, const float y, const float z, const float w) +{ + v.set( x, y, z ); + s = w; +} + +quat::quat(const vec3 &_v, const float _s) +{ + set( _v, _s ); +} + +quat::quat(const float _s, const vec3 &_v) +{ + set( _v, _s ); +} + +quat::quat(const float *d) +{ + v[0] = d[0]; + v[1] = d[1]; + v[2] = d[2]; + s = d[3]; +} + +quat::quat(const double *d) +{ + v[0] = (float) d[0]; + v[1] = (float) d[1]; + v[2] = (float) d[2]; + s = (float) d[3]; +} + +quat::quat(const quat &q) +{ + v = q.v; + s = q.s; +} + +void quat::set(const vec3 &_v, const float _s) +{ + v = _v; + s = _s; +} + +quat &quat::operator=(const quat &q) +{ + v = q.v; + s = q.s; + return *this; +} + +/******** quat friends ************/ + +quat operator + (const quat &a, const quat &b) +{ + return quat( a.s+b.s, a.v+b.v ); +} + +quat operator - (const quat &a, const quat &b) +{ + return quat( a.s-b.s, a.v-b.v ); +} + +quat operator - (const quat &a ) +{ + return quat( -a.s, -a.v ); +} + +quat operator * ( const quat &a, const quat &b) +{ + return quat( a.s*b.s - a.v*b.v, a.s*b.v + b.s*a.v + a.v^b.v ); +} + +quat operator * ( const quat &a, const float t) +{ + return quat( a.v * t, a.s * t ); +} + +quat operator * ( const float t, const quat &a ) +{ + return quat( a.v * t, a.s * t ); +} + +mat4 quat::to_mat4() const +{ + float xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz; + + float t = 2.0f / (v*v + s*s); + + xs = v[VX]*t; ys = v[VY]*t; zs = v[VZ]*t; + wx = s*xs; wy = s*ys; wz = s*zs; + xx = v[VX]*xs; xy = v[VX]*ys; xz = v[VX]*zs; + yy = v[VY]*ys; yz = v[VY]*zs; zz = v[VZ]*zs; + + mat4 matrix( + 1.0f-(yy+zz), xy+wz, xz-wy, 0.0f, + xy-wz, 1.0f-(xx+zz), yz+wx, 0.0f, + xz+wy, yz-wx, 1.0f-(xx+yy), 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f ); + + return matrix; +} + +/************************************************* quat_identity() *****/ +/* Returns quaternion identity element */ + +quat quat_identity() +{ + return quat( vec3( 0.0, 0.0, 0.0 ), 1.0 ); +} + +/************************************************ quat_slerp() ********/ +/* Quaternion spherical interpolation */ + +quat quat_slerp(const quat &from, const quat &to, float t) +{ + quat to1; + float omega, cosom, sinom, scale0, scale1; + + /* calculate cosine */ + cosom = from.v * to.v + from.s + to.s; + + /* Adjust signs (if necessary) */ + if ( cosom < 0.0 ) + { + cosom = -cosom; + to1 = -to; + } + else + { + to1 = to; + } + + /* Calculate coefficients */ + if ((1.0 - cosom) > FUDGE ) + { + /* standard case (slerp) */ + omega = (float) acos( cosom ); + sinom = (float) sin( omega ); + scale0 = (float) sin((1.0 - t) * omega) / sinom; + scale1 = (float) sin(t * omega) / sinom; + } + else + { + /* 'from' and 'to' are very close - just do linear interpolation */ + scale0 = 1.0f - t; + scale1 = t; + } + + return scale0 * from + scale1 * to1; +} + +/********************************************** set_angle() ************/ +/* set rot angle (degrees) */ + +void quat::set_angle(float f) +{ + vec3 axis = get_axis(); + + s = (float) cos( DEG2RAD( f ) / 2.0 ); + + v = axis * (float) sin(DEG2RAD(f) / 2.0); +} + +/********************************************** scale_angle() ************/ +/* scale rot angle (degrees) */ + +void quat::scale_angle(float f) +{ + set_angle( f * get_angle() ); +} + +/********************************************** get_angle() ************/ +/* get rot angle (degrees). Assumes s is between -1 and 1 */ + +float quat::get_angle() const +{ + return (float) RAD2DEG( 2.0 * acos( s ) ); +} + +/********************************************* get_axis() **************/ + +vec3 quat::get_axis() const +{ + float scale = (float) sin( acos( s ) ); + + if ( scale < FUDGE AND scale > -FUDGE ) + return vec3( 0.0, 0.0, 0.0 ); + else + return v / scale; +} + +/******************************************* quat::print() ************/ + +void quat::print(FILE *dest, const char *name) const +{ + fprintf( dest, "%s: v:<%3.2f %3.2f %3.2f> s:%3.2f\n", + name, v[0], v[1], v[2], s ); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.h b/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.h new file mode 100644 index 00000000..8bd45823 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/quaternion.h @@ -0,0 +1,114 @@ +/**************************************************************************** + + quaternion.h - A quaternion class + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + --------------------------------------------------------------------- + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +#ifndef GLUI_QUATERNION_H +#define GLUI_QUATERNION_H + +#include "algebra3.h" +#include + +/* this line defines a new type: pointer to a function which returns a */ +/* float and takes as argument a float */ +typedef float (*V_FCT_PTR)(float); + +/**************************************************************** + * Quaternion * + ****************************************************************/ + +class quat +{ + /*protected: */ +public: + + vec3 v; /* vector component */ + float s; /* scalar component */ + + /*public: */ + + /* Constructors */ + + quat(); + quat(float x, float y, float z, float w); + quat(const vec3 &v, float s); + quat(float s, const vec3 &v); + quat(const float *d); /* copy from four-element float array */ + quat(const double *f); /* copy from four-element double array */ + quat(const quat &q); /* copy from other quat */ + + /* Assignment operators */ + + quat &operator = (const quat &v); /* assignment of a quat */ + quat &operator += (const quat &v); /* incrementation by a quat */ + quat &operator -= (const quat &v); /* decrementation by a quat */ + quat &operator *= (float d); /* multiplication by a constant */ + quat &operator /= (float d); /* division by a constant */ + + /* special functions */ + + float length() const; /* length of a quat */ + float length2() const; /* squared length of a quat */ + quat &normalize(); /* normalize a quat */ + quat &apply(V_FCT_PTR fct); /* apply a func. to each component */ + vec3 xform(const vec3 &v ); /* q*v*q-1 */ + mat4 to_mat4() const; + void set_angle(float f); /* set rot angle (degrees) */ + void scale_angle(float f); /* scale rot angle (degrees) */ + float get_angle() const; /* set rot angle (degrees) */ + vec3 get_axis() const; /* get axis */ + + void print( FILE *file, const char *name ) const; /* print to a file */ + + float &operator [] (int i); /* indexing */ + const float &operator [] (int i) const; /* indexing */ + + void set(float x, float y, float z); /* set quat */ + void set(const vec3 &v, float s); /* set quat */ + + /* friends */ + + friend quat operator - (const quat &v); /* -q1 */ + friend quat operator + (const quat &a, const quat &b); /* q1 + q2 */ + friend quat operator - (const quat &a, const quat &b); /* q1 - q2 */ + friend quat operator * (const quat &a, float d); /* q1 * 3.0 */ + friend quat operator * (float d, const quat &a); /* 3.0 * q1 */ + friend quat operator * (const quat &a, const quat &b); /* q1 * q2 */ + friend quat operator / (const quat &a, float d); /* q1 / 3.0 */ + friend int operator == (const quat &a, const quat &b); /* q1 == q2 ? */ + friend int operator != (const quat &a, const quat &b); /* q1 != q2 ? */ + friend void swap(quat &a, quat &b); /* swap q1 &q2 */ + /*friend quat min(const quat &a, const quat &b); -- min(q1, q2) */ + /*friend quat max(const quat &a, const quat &b); -- max(q1, q2) */ + friend quat prod(const quat &a, const quat &b); /* term by term mult*/ +}; + +/* Utility functions */ + +quat quat_identity(); /* Returns quaternion identity element */ +quat quat_slerp(const quat &from, const quat &to, float t); + +#endif diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.cpp b/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.cpp new file mode 100644 index 00000000..8f6ff0ae --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.cpp @@ -0,0 +1,355 @@ +/* + + viewmodel.cpp + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/*********************************************************************** + + 1996, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + +************************************************************************/ + +#include "viewmodel.h" + +#include "GL/glui.h" + +#include +#include + +void +ViewModel::set_distance(const float new_distance) +{ + if ( new_distance <= 0.0 ) /* Distance has to be positive */ + return; + + /* We find the current forward vector */ + forward = lookat - eye; + forward.normalize(); + + /* Set distance */ + distance = new_distance; + + /* Find new eye point */ + eye = lookat - forward * distance; +} + +void +ViewModel::set_up(const vec3 &new_up) +{ + up = new_up; + update(); +} + +void +ViewModel::set_up(const float x, const float y, const float z) +{ + set_up(vec3(x,y,z)); +} + +void +ViewModel::set_eye(const vec3 &new_eye) +{ + eye = new_eye; + update(); +} + +void +ViewModel::set_eye(const float x, const float y, const float z) +{ + set_eye(vec3(x,y,z)); +} + +void +ViewModel::set_lookat(const vec3 &new_lookat) +{ + lookat = new_lookat; + update(); +} + +void +ViewModel::set_lookat(const float x, const float y, const float z) +{ + set_lookat(vec3(x,y,z)); +} + + +void +ViewModel::roll(const float angle) +{ + mat4 rot = rotation3D( forward, angle ); + up = rot * up; + update(); +} + +void +ViewModel::eye_yaw(const float angle) +{ + vec3 eye_pt = eye - lookat; /* eye w/lookat at center */ + mat4 rot = rotation3D( up, angle ); + + eye_pt = rot * eye_pt; + eye = lookat + eye_pt; + + update(); +} + +void +ViewModel::eye_yaw_abs(const float angle, const vec3 &axis) +{ + vec3 eye_pt = eye - lookat; /* eye w/lookat at center */ + mat4 rot = rotation3D( axis, angle ); + + eye_pt = rot * eye_pt; + eye = lookat + eye_pt; + + up = rot * up; + + update(); +} + + +void +ViewModel::eye_pitch(const float angle) +{ + vec3 eye_pt = eye - lookat; /* eye w/lookat at center */ + mat4 rot = rotation3D( side, angle ); + + eye_pt = rot * eye_pt; + eye = lookat + eye_pt; + + up = rot * up; + + update(); +} + +void +ViewModel::lookat_yaw(const float angle) +{ + vec3 lookat_pt = lookat - eye; /* lookat w/eye at center */ + mat4 rot = rotation3D( up, -angle ); + + lookat_pt = rot * lookat_pt; + lookat = eye + lookat_pt; + + update(); +} + +void +ViewModel::lookat_pitch(const float angle) +{ + vec3 lookat_pt = lookat - eye; /* lookat w/eye at center */ + mat4 rot = rotation3D( side, -angle ); + + lookat_pt = rot * lookat_pt; + lookat = eye + lookat_pt; + + up = rot * up; + + update(); +} + +void +ViewModel::reset_up(const int axis_num) +{ + float eye_distance = (lookat - eye).length(); + eye[axis_num] = lookat[axis_num]; + /* Bring eye to same level as lookat */ + + vec3 vector = eye - lookat; + vector.normalize(); + vector *= eye_distance; + + eye = lookat + vector; + up.set( 0.0, 0.0, 0.0 ); + up[axis_num] = 1.0; + + update(); +} + +void +ViewModel::reset_up() +{ + reset_up( VY ); /* Resets to the Y axis */ +} + +void +ViewModel::move(const float side_move, const float up_move, const float forw_move) +{ + eye += forward * forw_move; + eye += side * side_move; + eye += up * up_move; + lookat += forward * forw_move; + lookat += side * side_move; + lookat += up * up_move; + update(); +} + +void +ViewModel::move(const vec3 &v) /* A vector version of the above command */ +{ + move( v[VX], v[VY], v[VZ] ); +} + +void +ViewModel::move_by_eye(const vec3 &new_eye) +{ + vec3 diff = new_eye - eye; + + eye += diff; + lookat += diff; + + update(); +} + +void +ViewModel::move_by_lookat(const vec3 &new_lookat) +{ + vec3 diff = new_lookat - lookat; + + lookat += diff; + eye += diff; + + update(); +} + +void +ViewModel::move_abs(const vec3 &v) +{ + eye += v; + lookat += v; + + update(); +} + +void +ViewModel::rot_about_eye(const mat4 &rot) +{ + vec3 view = lookat - eye; + + view = rot * view; + up = rot * up; + + lookat = eye + view; + + update(); +} + +void +ViewModel::rot_about_lookat(const mat4 &rot) +{ + // NOT QUITE RIGHT YET + + vec3 view = eye - lookat; + + view = rot * view; + up = rot * up; + + eye = lookat + view; + + update(); +} + +void +ViewModel::make_mtx() +{ + update(); + + mtx[0][0]=side[VX]; mtx[0][1]=up[VX]; mtx[0][2]=forward[VX]; mtx[0][3]=0.0; + mtx[1][0]=side[VY]; mtx[1][1]=up[VY]; mtx[1][2]=forward[VY]; mtx[1][3]=0.0; + mtx[2][0]=side[VZ]; mtx[2][1]=up[VZ]; mtx[2][2]=forward[VZ]; mtx[2][3]=0.0; + mtx[3][0]=0.0; mtx[3][1]=0.0; mtx[3][2]= 0.0; mtx[3][3]=1.0; +} + +void +ViewModel::load_to_openGL() +{ + mat4 m; + + make_mtx(); + + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glMultMatrixf( (float*) &mtx[0][0]); + glTranslatef( -eye[VX], -eye[VY], -eye[VZ] ); +} + +void +ViewModel::load_to_openGL_noident() +{ + mat4 m; + + make_mtx(); + + glMatrixMode( GL_MODELVIEW ); + glMultMatrixf( (float*) &mtx[0][0]); + glTranslatef( -eye[VX], -eye[VY], -eye[VZ] ); +} + +void +ViewModel::reset() +{ + up.set( 0.0, 1.0, 0.0 ); + + eye.set(0.0,0.0,10.0); + lookat.set(0.0,0.0,0.0); + + mtx = identity3D(); + + update(); +} + +ViewModel::ViewModel() +{ + reset(); +} + +void +ViewModel::update() +{ + /* get proper side and forward vectors, and distance */ + forward = -(lookat - eye); + distance = forward.length(); + forward /= distance; + + side = up ^ forward; + up = forward ^ side; + + forward.normalize(); + up.normalize(); + side.normalize(); +} + + +void +ViewModel::dump(FILE *output) const +{ + fprintf( output, "Viewmodel: \n" ); + eye.print( output, " eye" ); + lookat.print( output, " lookat" ); + up.print( output, " up" ); + side.print( output, " side" ); + forward.print(output, " forward"); + mtx.print( output, " mtx" ); +} diff --git a/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.h b/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.h new file mode 100644 index 00000000..3a2db039 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/GLUI/src/viewmodel.h @@ -0,0 +1,246 @@ +/********************************************************************* + + ViewModel.h + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/********************************************************************* + + The ViewModel class implements a camera model, minus the perspective + transformation. It maintains the coordinate system of the camera + as three vectors (forward, up, and side), which are themselves + derived from two points (eye and lookat). + + Apart from simplifying camera translation, this class provides + three rotation methods: yaw (rotation about the up axis), + roll (about the forward axis), and pitch (about the side axis). + Also, these rotations can take place about the eye (in which + case the eye location is fixed but the lookat point changes - + like rotating your head), or about the lookat point (in which + case your eye rotates around the point of interest). + + There is also a routine for rotating the eye about an arbitrary + axis, which is quite useful in conjuction with the world up axis. + + This class is heavily-dependent on the vec3 class in + the file algebra3.h. + + The function update() sets the side and forward vectors based + on the lookat, eye, and up vectors. Remember to call this + function if you change the side or forward directly. + + Sample use: + ViewModel vm; + vm.eye.set( 0.0, 0.0, 20.0 ); + vm.lookat.set( 0.0, 0.0, 0.0 ); + vm.update(); // updates the three vectors + + vm.move( 0.0, 2.0, 0.0 ); // Moves the eye and lookat + // by 2 units in the world + // Y direction + vm.roll( 5.0 ); // rolls 5 degrees about the forward axis + vm.lookat_yaw( -25.0 ); // Yaws about the eye (lookat is + // fixed) by -25 degrees + vm.load_to_openGL(); // Sets OpenGL modelview matrix + + .. render ... + + + ---------- List of member functions ----------------------------- + set_distance() - Sets the distance from the eye to the lookat + set_up() - Sets the current up vector + set_eye() - Sets the current eye point + set_lookat() - Sets the current lookat point + roll() - Rolls about forward axis + eye_yaw() - Rotates eye about up vector + eye_yaw_abs() - Rotates eye about arbitrary axis + eye_pitch() - Rotates eye about side vector + lookat_yaw() - Rotates lookat about up vector + lookat_pitch() - Rotates lookat about side vector + reset_up_level() - Resets the up vector (after unwanted rolls), and + sets the eye level with the lookat point + move() - Moves eye and lookat by some amount + move_by_eye() - Moves eye to new position, lookat follows + move_by_lookat() - Moves lookat to new position, eye follows + move_abs() - Moves eye and lookat in world coordinates + rot_about_eye() - Rotates about the eye point by a given 4x4 matrix + rot_about_lookat() - Rotates about the lookat point by a given 4x4 matrix + make_mtx() - Constructs 4x4 matrix, used by load_to_openGL() + load_to_openGL() - Loads current camera description in openGL + load_to_openGL_noident() - Loads camera into OpenGL without first + resetting the OpenGL matrix to identity + reset() - Resets class values + ViewModel() - constructor + update() - Recalculates side and forward based on eye, + lookat, and up + dump() - Prints class contents to a file + + + 1996, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + +*********************************************************************/ + +#ifndef GLUI_VIEWMODEL_H +#define GLUI_VIEWMODEL_H + +#include "algebra3.h" + +class ViewModel +{ +public: + vec3 eye, lookat; + vec3 up, side, forward; + mat4 mtx; + float distance; + + /******************************* set_distance() ***********/ + /* This readjusts the distance from the eye to the lookat */ + /* (changing the eye point in the process) */ + /* The lookat point is unaffected */ + void set_distance(float new_distance); + + /******************************* set_up() ***************/ + void set_up(const vec3 &new_up); + + void set_up(float x, float y, float z); + + /******************************* set_eye() ***************/ + void set_eye(const vec3 &new_eye ); + + void set_eye(float x, float y, float z); + + /******************************* set_lookat() ***************/ + void set_lookat(const vec3 &new_lookat); + + void set_lookat(float x, float y, float z); + + /******************************* roll() *****************/ + /* Rotates about the forward vector */ + /* eye and lookat remain unchanged */ + void roll(float angle); + + /******************************* eye_yaw() *********************/ + /* Rotates the eye about the lookat point, using the up vector */ + /* Lookat is unaffected */ + void eye_yaw(float angle); + + /******************************* eye_yaw_abs() ******************/ + /* Rotates the eye about the lookat point, with a specific axis */ + /* Lookat is unaffected */ + void eye_yaw_abs(float angle, const vec3 &axis); + + + /******************************* eye_pitch() ************/ + /* Rotates the eye about the side vector */ + /* Lookat is unaffected */ + void eye_pitch(float angle); + + /******************************* lookat_yaw()************/ + /* This assumes the up vector is correct. */ + /* Rotates the lookat about the side vector */ + /* Eye point is unaffected */ + void lookat_yaw(float angle); + + /******************************* lookat_pitch() *********/ + /* Rotates the lookat point about the side vector */ + /* This assumes the side vector is correct. */ + /* Eye point is unaffected */ + void lookat_pitch(float angle); + + /******************************* reset_up() ******************/ + /* Resets the up vector to a specified axis (0=X, 1=Y, 2=Z) */ + /* Also sets the eye point level with the lookat point, */ + /* along the specified axis */ + void reset_up(int axis_num); + + void reset_up(); + + /******************************* move() ********************/ + /* Moves a specified distance in the forward, side, and up */ + /* directions. This function does NOT move by world */ + /* coordinates. To move by world coords, use the move_abs */ + /* function. */ + void move(float side_move, float up_move, float forw_move); + + void move(const vec3 &v); + + /******************************* move_by_eye() ***********/ + /* Sets the eye point, AND moves the lookat point by the */ + /* same amount as the eye is moved. */ + void move_by_eye(const vec3 &new_eye); + + /******************************* move_by_lookat() *********/ + /* Sets the lookat point, AND moves the eye point by the */ + /* same amount as the lookat is moved. */ + void move_by_lookat(const vec3 &new_lookat); + + /******************************* move_abs() *****************/ + /* Move the eye and lookat in world coordinates */ + void move_abs(const vec3 &v); + + /****************************** rot_about_eye() ************/ + /* Rotates the lookat point about the eye, based on a 4x4 */ + /* (pure) rotation matrix */ + void rot_about_eye(const mat4 &rot); + + /****************************** rot_about_lookat() ************/ + /* Rotates the lookat point about the lookat, based on a 4x4 */ + /* (pure) rotation matrix */ + void rot_about_lookat(const mat4 &rot); + + /******************************* make_mtx() *************/ + /* Constructs a 4x4 matrix - used by load_to_openGL() */ + void make_mtx(); + + /******************************* load_to_openGL() ********/ + /* Sets the OpenGL modelview matrix based on the current */ + /* camera coordinates */ + void load_to_openGL(); + + /******************************* load_to_openGL_noident() ******/ + /* Multiplies the current camera matrix by the existing openGL */ + /* modelview matrix. This is same as above function, but */ + /* does not set the OpenGL matrix to identity first */ + void load_to_openGL_noident(); + + /******************************* reset() ****************/ + /* Resets the parameters of this class */ + void reset(); + + /******************************* ViewModel() ************/ + /* Constructor */ + ViewModel(); + + /******************************* update() ****************/ + /* updates the view params. Call this after making */ + /* direct changes to the vectors or points of this class */ + void update(); + + /******************************* dump() *******************/ + /* Prints the contents of this class to a file, typically */ + /* stdin or stderr */ + void dump(FILE *output) const; +}; + +#endif diff --git a/thirdparty/carve-1.4.0/external/Makefile.am b/thirdparty/carve-1.4.0/external/Makefile.am new file mode 100644 index 00000000..d6512bd8 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=GLEW GLOOP GLUI diff --git a/thirdparty/carve-1.4.0/external/README.GLEW b/thirdparty/carve-1.4.0/external/README.GLEW new file mode 100644 index 00000000..f73f7914 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/README.GLEW @@ -0,0 +1,34 @@ +GLEW 1.5.0 + +http://glew.sourceforge.net + +distributed under the following license: + +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. diff --git a/thirdparty/carve-1.4.0/external/README.GLOOP b/thirdparty/carve-1.4.0/external/README.GLOOP new file mode 100644 index 00000000..7b0a81d9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/README.GLOOP @@ -0,0 +1,32 @@ +GLOOP + +Copyright (c) 2006, Tobias Sargeant +All rights reserved. + +Distributed under the following license: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the +distribution. The names of its contributors may be used to endorse +or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/thirdparty/carve-1.4.0/external/README.GLUI b/thirdparty/carve-1.4.0/external/README.GLUI new file mode 100644 index 00000000..b0423208 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/README.GLUI @@ -0,0 +1,29 @@ +GLUI 2.3 + +http://glui.sourceforge.net/ + +Distributed under the following license: + + GLUI User Interface Toolkit (LGPL) + Copyright (c) 1998 Paul Rademacher + Feb 1998, Paul Rademacher (rademach@cs.unc.edu) + Oct 2003, Nigel Stewart - GLUI Code Cleaning + + + WWW: http://sourceforge.net/projects/glui/ + Forums: http://sourceforge.net/forum/?group_id=92496 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/CHANGES b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CHANGES new file mode 100644 index 00000000..e574415e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CHANGES @@ -0,0 +1,98 @@ +Changes for 1.5.0: + + * New feature: assertions can be safely called in multiple threads + where the pthreads library is available. + * New feature: predicates used inside EXPECT_TRUE() and friends + can now generate custom failure messages. + * New feature: Google Test can now be compiled as a DLL. + * New feature: fused source files are included. + * New feature: prints help when encountering unrecognized Google Test flags. + * Experimental feature: CMake build script (requires CMake 2.6.4+). + * Experimental feature: the Pump script for meta programming. + * double values streamed to an assertion are printed with enough precision + to differentiate any two different values. + * Google Test now works on Solaris and AIX. + * Build and test script improvements. + * Bug fixes and implementation clean-ups. + + Potentially breaking changes: + + * Stopped supporting VC++ 7.1 with exceptions disabled. + * Dropped support for 'make install'. + +Changes for 1.4.0: + + * New feature: the event listener API + * New feature: test shuffling + * New feature: the XML report format is closer to junitreport and can + be parsed by Hudson now. + * New feature: when a test runs under Visual Studio, its failures are + integrated in the IDE. + * New feature: /MD(d) versions of VC++ projects. + * New feature: elapsed time for the tests is printed by default. + * New feature: comes with a TR1 tuple implementation such that Boost + is no longer needed for Combine(). + * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends. + * New feature: the Xcode project can now produce static gtest + libraries in addition to a framework. + * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile, + Symbian, gcc, and C++Builder. + * Bug fixes and implementation clean-ups. + +Changes for 1.3.0: + + * New feature: death tests on Windows, Cygwin, and Mac. + * New feature: ability to use Google Test assertions in other testing + frameworks. + * New feature: ability to run disabled test via + --gtest_also_run_disabled_tests. + * New feature: the --help flag for printing the usage. + * New feature: access to Google Test flag values in user code. + * New feature: a script that packs Google Test into one .h and one + .cc file for easy deployment. + * New feature: support for distributing test functions to multiple + machines (requires support from the test runner). + * Bug fixes and implementation clean-ups. + +Changes for 1.2.1: + + * Compatibility fixes for Linux IA-64 and IBM z/OS. + * Added support for using Boost and other TR1 implementations. + * Changes to the build scripts to support upcoming release of Google C++ + Mocking Framework. + * Added Makefile to the distribution package. + * Improved build instructions in README. + +Changes for 1.2.0: + + * New feature: value-parameterized tests. + * New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS) + macros. + * Changed the XML report format to match JUnit/Ant's. + * Added tests to the Xcode project. + * Added scons/SConscript for building with SCons. + * Added src/gtest-all.cc for building Google Test from a single file. + * Fixed compatibility with Solaris and z/OS. + * Enabled running Python tests on systems with python 2.3 installed, + e.g. Mac OS X 10.4. + * Bug fixes. + +Changes for 1.1.0: + + * New feature: type-parameterized tests. + * New feature: exception assertions. + * New feature: printing elapsed time of tests. + * Improved the robustness of death tests. + * Added an Xcode project and samples. + * Adjusted the output format on Windows to be understandable by Visual Studio. + * Minor bug fixes. + +Changes for 1.0.1: + + * Added project files for Visual Studio 7.1. + * Fixed issues with compiling on Mac OS X. + * Fixed issues with compiling on Cygwin. + +Changes for 1.0.0: + + * Initial Open Source release of Google Test diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/CMakeLists.txt b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CMakeLists.txt new file mode 100644 index 00000000..7910b5df --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CMakeLists.txt @@ -0,0 +1,384 @@ +######################################################################## +# Experimental CMake build script for Google Test. +# +# Consider this a prototype. It will change drastically. For now, +# this is only for people on the cutting edge. +# +# To run the tests for Google Test itself on Linux, use 'make test' or +# ctest. You can select which tests to run using 'ctest -R regex'. +# For more options, run 'ctest --help'. + +# For hermetic builds, we may need to tell CMake to use compiler in a +# specific location. +if (gtest_compiler) + include(CMakeForceCompiler) + cmake_force_c_compiler("${gtest_compiler}" "") + cmake_force_cxx_compiler("${gtest_compiler}" "") +endif() + +######################################################################## +# +# Project-wide settings + +# Name of the project. +# +# CMake files in this project can refer to the root source directory +# as ${gtest_SOURCE_DIR} and to the root binary directory as +# ${gtest_BINARY_DIR}. +# Language "C" is required for find_package(Threads). +project(gtest CXX C) +cmake_minimum_required(VERSION 2.6.4) + +if (MSVC) + # For MSVC, CMake sets certain flags to defaults we want to override. + # This replacement code is taken from sample in the CMake Wiki at + # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace. + foreach (flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + # In hermetic build environments, tests may not have access to MS runtime + # DLLs, so this replaces /MD (CRT libraries in DLLs) with /MT (static CRT + # libraries). + string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}") + # We prefer more strict warning checking for building Google Test. + # Replaces /W3 with /W4 in defaults. + string(REPLACE "/W3" "-W4" ${flag_var} "${${flag_var}}") + endforeach() +endif() + +# Where gtest's .h files can be found. +include_directories( + ${gtest_SOURCE_DIR}/include + ${gtest_SOURCE_DIR}) + +# Where the gtest libraries can be found. +link_directories( + ${gtest_BINARY_DIR}/src) + +# Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT. +find_package(Threads) + +# Defines the compiler/linker flags used to build gtest. You can +# tweak these definitions to suit your need. A variable's value is +# empty before it's explicitly assigned to. + +if (MSVC) + # Newlines inside flags variables break CMake's NMake generator. + set(cxx_base_flags "-GS -W4 -WX -wd4275 -nologo -J -Zi") + set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32") + set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN") + set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1") + set(cxx_no_exception_flags "-D_HAS_EXCEPTIONS=0") + set(cxx_no_rtti_flags "-GR-") +elseif (CMAKE_COMPILER_IS_GNUCXX) + set(cxx_base_flags "-Wall -Wshadow") + set(cxx_exception_flags "-fexceptions") + set(cxx_no_exception_flags "-fno-exceptions") + # Until version 4.3.2, GCC doesn't define a macro to indicate + # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI + # explicitly. + set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0") + set(cxx_strict_flags "-Wextra") +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") + set(cxx_exception_flags "-features=except") + # Sun Pro doesn't provide macros to indicate whether exceptions and + # RTTI are enabled, so we define GTEST_HAS_* explicitly. + set(cxx_no_exception_flags "-features=no%except -DGTEST_HAS_EXCEPTIONS=0") + set(cxx_no_rtti_flags "-features=no%rtti -DGTEST_HAS_RTTI=0") +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "VisualAge" OR + CMAKE_CXX_COMPILER_ID STREQUAL "XL") + # CMake 2.8 changes Visual Age's compiler ID to "XL". + set(cxx_exception_flags "-qeh") + set(cxx_no_exception_flags "-qnoeh") + # Until version 9.0, Visual Age doesn't define a macro to indicate + # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI + # explicitly. + set(cxx_no_rtti_flags "-qnortti -DGTEST_HAS_RTTI=0") +endif() + +if (CMAKE_USE_PTHREADS_INIT) # The pthreads library is available. + set(cxx_base_flags "${cxx_base_flags} -DGTEST_HAS_PTHREAD=1") +endif() + +# For building gtest's own tests and samples. +set(cxx_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_exception_flags}") +set(cxx_no_exception + "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_no_exception_flags}") +set(cxx_default "${cxx_exception}") +set(cxx_no_rtti "${cxx_default} ${cxx_no_rtti_flags}") +set(cxx_use_own_tuple "${cxx_default} -DGTEST_USE_OWN_TR1_TUPLE=1") + +# For building the gtest libraries. +set(cxx_strict "${cxx_default} ${cxx_strict_flags}") + +######################################################################## +# +# Defines the gtest & gtest_main libraries. User tests should link +# with one of them. +function(cxx_library_with_type name type cxx_flags) + # type can be either STATIC or SHARED to denote a static or shared library. + # ARGN refers to additional arguments after 'cxx_flags'. + add_library(${name} ${type} ${ARGN}) + set_target_properties(${name} + PROPERTIES + COMPILE_FLAGS "${cxx_flags}") + if (CMAKE_USE_PTHREADS_INIT) + target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT}) + endif() +endfunction() + +function(cxx_static_library name cxx_flags) + cxx_library_with_type(${name} STATIC "${cxx_flags}" ${ARGN}) +endfunction() + +function(cxx_shared_library name cxx_flags) + cxx_library_with_type(${name} SHARED "${cxx_flags}" ${ARGN}) +endfunction() + +function(cxx_library name cxx_flags) + # TODO(vladl@google.com): Make static/shared a user option. + cxx_static_library(${name} "${cxx_flags}" ${ARGN}) +endfunction() + +# Static versions of Google Test libraries. We build them using more +# strict warnings than what are used for other targets, to ensure that +# gtest can be compiled by a user aggressive about warnings. +cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc) +cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc) +target_link_libraries(gtest_main gtest) + +######################################################################## +# +# Samples on how to link user tests with gtest or gtest_main. +# +# They are not built by default. To build them, set the +# build_gtest_samples option to ON. You can do it by running ccmake +# or specifying the -Dbuild_gtest_samples=ON flag when running cmake. + +option(build_gtest_samples "Build gtest's sample programs." OFF) + +# cxx_executable_with_flags(name cxx_flags lib srcs...) +# +# creates a named C++ executable that depends on the given library and +# is built from the given source files with the given compiler flags. +function(cxx_executable_with_flags name cxx_flags lib) + add_executable(${name} ${ARGN}) + if (cxx_flags) + set_target_properties(${name} + PROPERTIES + COMPILE_FLAGS "${cxx_flags}") + endif() + target_link_libraries(${name} ${lib}) +endfunction() + +# cxx_executable(name dir lib srcs...) +# +# creates a named target that depends on the given lib and is built +# from the given source files. dir/name.cc is implicitly included in +# the source file list. +function(cxx_executable name dir lib) + cxx_executable_with_flags( + ${name} "${cxx_default}" ${lib} "${dir}/${name}.cc" ${ARGN}) +endfunction() + +if (build_gtest_samples) + cxx_executable(sample1_unittest samples gtest_main samples/sample1.cc) + cxx_executable(sample2_unittest samples gtest_main samples/sample2.cc) + cxx_executable(sample3_unittest samples gtest_main) + cxx_executable(sample4_unittest samples gtest_main samples/sample4.cc) + cxx_executable(sample5_unittest samples gtest_main samples/sample1.cc) + cxx_executable(sample6_unittest samples gtest_main) + cxx_executable(sample7_unittest samples gtest_main) + cxx_executable(sample8_unittest samples gtest_main) + cxx_executable(sample9_unittest samples gtest) + cxx_executable(sample10_unittest samples gtest) +endif() + +######################################################################## +# +# Google Test's own tests. +# +# You can skip this section if you aren't interested in testing +# Google Test itself. +# +# Most of the tests are not built by default. To build them, set the +# build_all_gtest_tests option to ON. You can do it by running ccmake +# or specifying the -Dbuild_all_gtest_tests=ON flag when running cmake. + +option(build_all_gtest_tests "Build all of gtest's own tests." OFF) + +# This must be set in the root directory for the tests to be run by +# 'make test' or ctest. +enable_testing() + +# Sets PYTHONINTERP_FOUND and PYTHON_EXECUTABLE. +find_package(PythonInterp) + +############################################################ +# C++ tests built with standard compiler flags. + +# cxx_test_with_flags(name cxx_flags libs srcs...) +# +# creates a named C++ test that depends on the given libs and is built +# from the given source files with the given compiler flags. +function(cxx_test_with_flags name cxx_flags libs) + add_executable(${name} ${ARGN}) + set_target_properties(${name} + PROPERTIES + COMPILE_FLAGS "${cxx_flags}") + # To support mixing linking in static and dynamic libraries, link each + # library in with an extra call to target_link_libraries. + foreach (lib "${libs}") + target_link_libraries(${name} ${lib}) + endforeach() + add_test(${name} ${name}) +endfunction() + +# cxx_test(name libs srcs...) +# +# creates a named test target that depends on the given libs and is +# built from the given source files. Unlike cxx_test_with_flags, +# test/name.cc is already implicitly included in the source file list. +function(cxx_test name libs) + cxx_test_with_flags("${name}" "${cxx_default}" "${libs}" + "test/${name}.cc" ${ARGN}) +endfunction() + +cxx_test(gtest_unittest gtest_main) + +if (build_all_gtest_tests) + cxx_test(gtest-death-test_test gtest_main) + cxx_test(gtest_environment_test gtest) + cxx_test(gtest-filepath_test gtest_main) + cxx_test(gtest-linked_ptr_test gtest_main) + cxx_test(gtest-listener_test gtest_main) + cxx_test(gtest_main_unittest gtest_main) + cxx_test(gtest-message_test gtest_main) + cxx_test(gtest_no_test_unittest gtest) + cxx_test(gtest-options_test gtest_main) + cxx_test(gtest-param-test_test gtest + test/gtest-param-test2_test.cc) + cxx_test(gtest-port_test gtest_main) + cxx_test(gtest_pred_impl_unittest gtest_main) + cxx_test(gtest_prod_test gtest_main + test/production.cc) + cxx_test(gtest_repeat_test gtest) + cxx_test(gtest_sole_header_test gtest_main) + cxx_test(gtest_stress_test gtest) + cxx_test(gtest-test-part_test gtest_main) + cxx_test(gtest_throw_on_failure_ex_test gtest) + cxx_test(gtest-typed-test_test gtest_main + test/gtest-typed-test2_test.cc) + cxx_test(gtest-unittest-api_test gtest) +endif() + +############################################################ +# C++ tests built with non-standard compiler flags. + +if (build_all_gtest_tests) + cxx_library(gtest_no_exception "${cxx_no_exception}" + src/gtest-all.cc) + cxx_library(gtest_main_no_rtti "${cxx_no_rtti}" + src/gtest-all.cc src/gtest_main.cc) + + cxx_test_with_flags(gtest_no_rtti_unittest "${cxx_no_rtti}" + gtest_main_no_rtti test/gtest_unittest.cc) + + set(cxx_use_shared_gtest "${cxx_default} -DGTEST_LINKED_AS_SHARED_LIBRARY=1") + set(cxx_build_shared_gtest "${cxx_default} -DGTEST_CREATE_SHARED_LIBRARY=1") + if (MSVC) + # Disables the "class 'X' needs to have dll-interface to be used + # by clients of class 'Y'" warning. This particularly concerns generic + # classes like vector that MS doesn't mark as exported. + set(cxx_use_shared_gtest "${cxx_use_shared_gtest} -wd4251") + set(cxx_build_shared_gtest "${cxx_build_shared_gtest} -wd4251") + endif() + + cxx_shared_library(gtest_dll "${cxx_build_shared_gtest}" + src/gtest-all.cc) + + # TODO(vladl): This and the next tests may not run in the hermetic + # environment on Windows. Re-evaluate and possibly make them + # platform-conditional after implementing hermetic builds. + cxx_executable_with_flags(gtest_dll_test_ "${cxx_use_shared_gtest}" + gtest_dll test/gtest_all_test.cc) + + if (NOT(MSVC AND (MSVC_VERSION EQUAL 1600))) + # The C++ Standard specifies tuple_element. + # Yet MSVC 10's declares tuple_element. + # That declaration conflicts with our own standard-conforming + # tuple implementation. Therefore using our own tuple with + # MSVC 10 doesn't compile. + cxx_library(gtest_main_use_own_tuple "${cxx_use_own_tuple}" + src/gtest-all.cc src/gtest_main.cc) + + cxx_test_with_flags(gtest-tuple_test "${cxx_use_own_tuple}" + gtest_main_use_own_tuple test/gtest-tuple_test.cc) + + cxx_test_with_flags(gtest_use_own_tuple_test "${cxx_use_own_tuple}" + gtest_main_use_own_tuple + test/gtest-param-test_test.cc test/gtest-param-test2_test.cc) + endif() + +endif() + +############################################################ +# Python tests. + +# py_test(name) +# +# creates a Python test with the given name whose main module is in +# test/name.py. It does nothing if Python is not installed. +function(py_test name) + if (PYTHONINTERP_FOUND) + # ${gtest_BINARY_DIR} is known at configuration time, so we can + # directly bind it from cmake. ${CTEST_CONFIGURATION_TYPE} is known + # only at ctest runtime (by calling ctest -c ), so + # we have to escape $ to delay variable substitution here. + add_test(${name} + ${PYTHON_EXECUTABLE} ${gtest_SOURCE_DIR}/test/${name}.py + --gtest_build_dir=${gtest_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE}) + endif() +endfunction() + +if (build_all_gtest_tests) + cxx_executable(gtest_break_on_failure_unittest_ test gtest) + py_test(gtest_break_on_failure_unittest) + + cxx_executable(gtest_color_test_ test gtest) + py_test(gtest_color_test) + + cxx_executable(gtest_env_var_test_ test gtest) + py_test(gtest_env_var_test) + + cxx_executable(gtest_filter_unittest_ test gtest) + py_test(gtest_filter_unittest) + + cxx_executable(gtest_help_test_ test gtest_main) + py_test(gtest_help_test) + + cxx_executable(gtest_list_tests_unittest_ test gtest) + py_test(gtest_list_tests_unittest) + + cxx_executable(gtest_output_test_ test gtest) + py_test(gtest_output_test) + + cxx_executable(gtest_shuffle_test_ test gtest) + py_test(gtest_shuffle_test) + + cxx_executable(gtest_throw_on_failure_test_ test gtest_no_exception) + set_target_properties(gtest_throw_on_failure_test_ + PROPERTIES + COMPILE_FLAGS "${cxx_no_exception}") + py_test(gtest_throw_on_failure_test) + + cxx_executable(gtest_uninitialized_test_ test gtest) + py_test(gtest_uninitialized_test) + + cxx_executable(gtest_xml_outfile1_test_ test gtest_main) + cxx_executable(gtest_xml_outfile2_test_ test gtest_main) + py_test(gtest_xml_outfiles_test) + + cxx_executable(gtest_xml_output_unittest_ test gtest) + py_test(gtest_xml_output_unittest) +endif() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/CONTRIBUTORS b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CONTRIBUTORS new file mode 100644 index 00000000..0934ae13 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/CONTRIBUTORS @@ -0,0 +1,36 @@ +# This file contains a list of people who've made non-trivial +# contribution to the Google C++ Testing Framework project. People +# who commit code to the project are encouraged to add their names +# here. Please keep the list sorted by first names. + +Ajay Joshi +Balázs Dán +Bharat Mediratta +Chandler Carruth +Chris Prince +Chris Taylor +Dan Egnor +Eric Roman +Hady Zalek +Jeffrey Yasskin +Jói Sigurðsson +Keir Mierle +Keith Ray +Kenton Varda +Manuel Klimek +Markus Heule +Mika Raento +Miklós Fazekas +Patrick Hanna +Patrick Riley +Peter Kaminski +Preston Jackson +Rainer Klaffenboeck +Russ Cox +Russ Rufer +Sean Mcafee +Sigurður Ásgeirsson +Tracy Bialik +Vadim Berman +Vlad Losev +Zhanyong Wan diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/COPYING b/thirdparty/carve-1.4.0/external/gtest-1.5.0/COPYING new file mode 100644 index 00000000..1941a11f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/COPYING @@ -0,0 +1,28 @@ +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/Makefile.am b/thirdparty/carve-1.4.0/external/gtest-1.5.0/Makefile.am new file mode 100644 index 00000000..8d75e32c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/Makefile.am @@ -0,0 +1,284 @@ +# Automake file + +# Nonstandard package files for distribution +EXTRA_DIST = \ + CHANGES \ + CONTRIBUTORS \ + include/gtest/gtest-param-test.h.pump \ + include/gtest/internal/gtest-tuple.h.pump \ + include/gtest/internal/gtest-type-util.h.pump \ + include/gtest/internal/gtest-param-util-generated.h.pump \ + make/Makefile \ + scripts/fuse_gtest_files.py \ + scripts/gen_gtest_pred_impl.py \ + scripts/pump.py \ + scripts/test/Makefile + +# gtest source files that we don't compile directly. They are +# #included by gtest-all.cc. +GTEST_SRC = \ + src/gtest.cc \ + src/gtest-death-test.cc \ + src/gtest-filepath.cc \ + src/gtest-internal-inl.h \ + src/gtest-port.cc \ + src/gtest-test-part.cc \ + src/gtest-typed-test.cc + +EXTRA_DIST += $(GTEST_SRC) + +# Sample files that we don't compile. +EXTRA_DIST += \ + samples/prime_tables.h \ + samples/sample2_unittest.cc \ + samples/sample3_unittest.cc \ + samples/sample4_unittest.cc \ + samples/sample5_unittest.cc \ + samples/sample6_unittest.cc \ + samples/sample7_unittest.cc \ + samples/sample8_unittest.cc \ + samples/sample9_unittest.cc + +# C++ test files that we don't compile directly. +EXTRA_DIST += \ + test/gtest-death-test_test.cc \ + test/gtest_environment_test.cc \ + test/gtest-filepath_test.cc \ + test/gtest-linked_ptr_test.cc \ + test/gtest-message_test.cc \ + test/gtest_no_test_unittest.cc \ + test/gtest-options_test.cc \ + test/gtest-param-test_test.cc \ + test/gtest-param-test2_test.cc \ + test/gtest-param-test_test.h \ + test/gtest-port_test.cc \ + test/gtest_pred_impl_unittest.cc \ + test/gtest_prod_test.cc \ + test/production.cc \ + test/production.h \ + test/gtest_repeat_test.cc \ + test/gtest_sole_header_test.cc \ + test/gtest_stress_test.cc \ + test/gtest-test-part_test.cc \ + test/gtest_throw_on_failure_ex_test.cc \ + test/gtest-typed-test_test.cc \ + test/gtest-typed-test2_test.cc \ + test/gtest-typed-test_test.h \ + test/gtest_unittest.cc \ + test/gtest-unittest-api_test.cc \ + test/gtest-listener_test.cc \ + test/gtest_main_unittest.cc \ + test/gtest_unittest.cc \ + test/gtest-tuple_test.cc \ + test/gtest-param-test_test.cc \ + test/gtest-param-test2_test.cc \ + test/gtest_break_on_failure_unittest_.cc \ + test/gtest_color_test_.cc \ + test/gtest_env_var_test_.cc \ + test/gtest_filter_unittest_.cc \ + test/gtest_help_test_.cc \ + test/gtest_list_tests_unittest_.cc \ + test/gtest_output_test_.cc \ + test/gtest_shuffle_test_.cc \ + test/gtest_throw_on_failure_test_.cc \ + test/gtest_uninitialized_test_.cc \ + test/gtest_xml_outfile1_test_.cc \ + test/gtest_xml_outfile2_test_.cc \ + test/gtest_xml_output_unittest_.cc + +# Python tests that we don't run. +EXTRA_DIST += \ + test/gtest_test_utils.py \ + test/gtest_xml_test_utils.py \ + test/gtest_break_on_failure_unittest.py \ + test/gtest_color_test.py \ + test/gtest_env_var_test.py \ + test/gtest_filter_unittest.py \ + test/gtest_help_test.py \ + test/gtest_list_tests_unittest.py \ + test/gtest_output_test.py \ + test/gtest_output_test_golden_lin.txt \ + test/gtest_output_test_golden_win.txt \ + test/gtest_shuffle_test.py \ + test/gtest_throw_on_failure_test.py \ + test/gtest_uninitialized_test.py \ + test/gtest_xml_outfiles_test.py \ + test/gtest_xml_output_unittest.py \ + test/run_tests_util.py \ + test/run_tests_util_test.py + +# CMake script +EXTRA_DIST += \ + CMakeLists.txt + +# MSVC project files +EXTRA_DIST += \ + msvc/gtest-md.sln \ + msvc/gtest.sln \ + msvc/gtest-md.vcproj \ + msvc/gtest.vcproj \ + msvc/gtest_main-md.vcproj \ + msvc/gtest_main.vcproj \ + msvc/gtest_prod_test-md.vcproj \ + msvc/gtest_prod_test.vcproj \ + msvc/gtest_unittest-md.vcproj \ + msvc/gtest_unittest.vcproj + +# xcode project files +EXTRA_DIST += \ + xcode/Config/DebugProject.xcconfig \ + xcode/Config/FrameworkTarget.xcconfig \ + xcode/Config/General.xcconfig \ + xcode/Config/ReleaseProject.xcconfig \ + xcode/Config/StaticLibraryTarget.xcconfig \ + xcode/Config/TestTarget.xcconfig \ + xcode/Resources/Info.plist \ + xcode/Scripts/versiongenerate.py \ + xcode/Scripts/runtests.sh \ + xcode/gtest.xcodeproj/project.pbxproj + +# xcode sample files +EXTRA_DIST += \ + xcode/Samples/FrameworkSample/Info.plist \ + xcode/Samples/FrameworkSample/runtests.sh \ + xcode/Samples/FrameworkSample/widget_test.cc \ + xcode/Samples/FrameworkSample/widget.cc \ + xcode/Samples/FrameworkSample/widget.h \ + xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj + +# C++Builder project files +EXTRA_DIST += \ + codegear/gtest_all.cc \ + codegear/gtest_link.cc \ + codegear/gtest.cbproj \ + codegear/gtest_main.cbproj \ + codegear/gtest_unittest.cbproj \ + codegear/gtest.groupproj + +# Scripts and utilities +bin_SCRIPTS = scripts/gtest-config +CLEANFILES = $(bin_SCRIPTS) + +# Distribute and install M4 macro +m4datadir = $(datadir)/aclocal +m4data_DATA = m4/gtest.m4 +EXTRA_DIST += $(m4data_DATA) + +# We define the global AM_CPPFLAGS as everything we compile includes from these +# directories. +AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include + +# Modifies compiler and linker flags for pthreads compatibility. +if HAVE_PTHREADS + AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 + AM_LIBS = @PTHREAD_LIBS@ +else + AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0 +endif + +# Build rules for libraries. +lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la + +lib_libgtest_la_SOURCES = src/gtest-all.cc + +pkginclude_HEADERS = include/gtest/gtest.h \ + include/gtest/gtest-death-test.h \ + include/gtest/gtest-message.h \ + include/gtest/gtest-param-test.h \ + include/gtest/gtest_pred_impl.h \ + include/gtest/gtest_prod.h \ + include/gtest/gtest-spi.h \ + include/gtest/gtest-test-part.h \ + include/gtest/gtest-typed-test.h + +pkginclude_internaldir = $(pkgincludedir)/internal +pkginclude_internal_HEADERS = \ + include/gtest/internal/gtest-death-test-internal.h \ + include/gtest/internal/gtest-filepath.h \ + include/gtest/internal/gtest-internal.h \ + include/gtest/internal/gtest-linked_ptr.h \ + include/gtest/internal/gtest-param-util-generated.h \ + include/gtest/internal/gtest-param-util.h \ + include/gtest/internal/gtest-port.h \ + include/gtest/internal/gtest-string.h \ + include/gtest/internal/gtest-tuple.h \ + include/gtest/internal/gtest-type-util.h + +lib_libgtest_main_la_SOURCES = src/gtest_main.cc +lib_libgtest_main_la_LIBADD = lib/libgtest.la + +# Bulid rules for samples and tests. Automake's naming for some of +# these variables isn't terribly obvious, so this is a brief +# reference: +# +# TESTS -- Programs run automatically by "make check" +# check_PROGRAMS -- Programs built by "make check" but not necessarily run + +noinst_LTLIBRARIES = samples/libsamples.la + +samples_libsamples_la_SOURCES = samples/sample1.cc \ + samples/sample1.h \ + samples/sample2.cc \ + samples/sample2.h \ + samples/sample3-inl.h \ + samples/sample4.cc \ + samples/sample4.h + +TESTS= +TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ + GTEST_BUILD_DIR="$(top_builddir)/test" +check_PROGRAMS= + +# A simple sample on using gtest. +TESTS += samples/sample1_unittest +check_PROGRAMS += samples/sample1_unittest +samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc +samples_sample1_unittest_LDADD = lib/libgtest_main.la \ + samples/libsamples.la + +# Another sample. It also verifies that libgtest works. +TESTS += samples/sample10_unittest +check_PROGRAMS += samples/sample10_unittest +samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc +samples_sample10_unittest_LDADD = lib/libgtest.la + +# This tests most constructs of gtest and verifies that libgtest_main +# works. +TESTS += test/gtest_all_test +check_PROGRAMS += test/gtest_all_test +test_gtest_all_test_SOURCES = test/gtest_all_test.cc +test_gtest_all_test_LDADD = lib/libgtest_main.la + +# Tests that fused gtest files compile and work. +FUSED_GTEST_SRC = \ + fused-src/gtest/gtest-all.cc \ + fused-src/gtest/gtest_main.cc \ + fused-src/gtest/gtest.h + +TESTS += test/fused_gtest_test +check_PROGRAMS += test/fused_gtest_test +test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \ + samples/sample1.cc samples/sample1_unittest.cc +test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src" + +# Build rules for putting fused Google Test files into the distribution +# package. The user can also create those files by manually running +# scripts/fuse_gtest_files.py. +$(test_fused_gtest_test_SOURCES): fused-gtest + +fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ + $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \ + scripts/fuse_gtest_files.py + mkdir -p "$(srcdir)/fused-src" + chmod -R u+w "$(srcdir)/fused-src" + rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc" + rm -f "$(srcdir)/fused-src/gtest/gtest.h" + "$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src" + cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/" + +maintainer-clean-local: + rm -rf "$(srcdir)/fused-src" + +# Death tests may produce core dumps in the build directory. In case +# this happens, clean them to keep distcleancheck happy. +CLEANFILES += core diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/README b/thirdparty/carve-1.4.0/external/gtest-1.5.0/README new file mode 100644 index 00000000..ec611900 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/README @@ -0,0 +1,417 @@ +Google C++ Testing Framework +============================ + +http://code.google.com/p/googletest/ + +Overview +-------- + +Google's framework for writing C++ tests on a variety of platforms +(Linux, Mac OS X, Windows, Windows CE, Symbian, etc). Based on the +xUnit architecture. Supports automatic test discovery, a rich set of +assertions, user-defined assertions, death tests, fatal and non-fatal +failures, various options for running the tests, and XML test report +generation. + +Please see the project page above for more information as well as the +mailing list for questions, discussions, and development. There is +also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please +join us! + +Requirements for End Users +-------------------------- + +Google Test is designed to have fairly minimal requirements to build +and use with your projects, but there are some. Currently, we support +Linux, Windows, Mac OS X, and Cygwin. We will also make our best +effort to support other platforms (e.g. Solaris, AIX, and z/OS). +However, since core members of the Google Test project have no access +to these platforms, Google Test may have outstanding issues there. If +you notice any problems on your platform, please notify +googletestframework@googlegroups.com. Patches for fixing them are +even more welcome! + +### Linux Requirements ### + +These are the base requirements to build and use Google Test from a source +package (as described below): + * GNU-compatible Make or gmake + * POSIX-standard shell + * POSIX(-2) Regular Expressions (regex.h) + * A C++98-standard-compliant compiler + +### Windows Requirements ### + + * Microsoft Visual C++ 7.1 or newer + +### Cygwin Requirements ### + + * Cygwin 1.5.25-14 or newer + +### Mac OS X Requirements ### + + * Mac OS X 10.4 Tiger or newer + * Developer Tools Installed + +Also, you'll need CMake 2.6.4 or higher if you want to build the +samples using the provided CMake script, regardless of the platform. + +Requirements for Contributors +----------------------------- + +We welcome patches. If you plan to contribute a patch, you need to +build Google Test and its own tests from an SVN checkout (described +below), which has further requirements: + + * Python version 2.3 or newer (for running some of the tests and + re-generating certain source files from templates) + * CMake 2.6.4 or newer + +Getting the Source +------------------ + +There are two primary ways of getting Google Test's source code: you +can download a stable source release in your preferred archive format, +or directly check out the source from our Subversion (SVN) repositary. +The SVN checkout requires a few extra steps and some extra software +packages on your system, but lets you track the latest development and +make patches much more easily, so we highly encourage it. + +### Source Package ### + +Google Test is released in versioned source packages which can be +downloaded from the download page [1]. Several different archive +formats are provided, but the only difference is the tools used to +manipulate them, and the size of the resulting file. Download +whichever you are most comfortable with. + + [1] http://code.google.com/p/googletest/downloads/list + +Once the package is downloaded, expand it using whichever tools you +prefer for that type. This will result in a new directory with the +name "gtest-X.Y.Z" which contains all of the source code. Here are +some examples on Linux: + + tar -xvzf gtest-X.Y.Z.tar.gz + tar -xvjf gtest-X.Y.Z.tar.bz2 + unzip gtest-X.Y.Z.zip + +### SVN Checkout ### + +To check out the main branch (also known as the "trunk") of Google +Test, run the following Subversion command: + + svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn + +Setting up the Build +-------------------- + +To build Google Test and your tests that use it, you need to tell your +build system where to find its headers and source files. The exact +way to do it depends on which build system you use, and is usually +straightforward. + +### Generic Build Instructions ### + +Suppose you put Google Test in directory ${GTEST_DIR}. To build it, +create a library build target (or a project as called by Visual Studio +and Xcode) to compile + + ${GTEST_DIR}/src/gtest-all.cc + +with + + ${GTEST_DIR}/include and ${GTEST_DIR} + +in the header search path. Assuming a Linux-like system and gcc, +something like the following will do: + + g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc + ar -rv libgtest.a gtest-all.o + +Next, you should compile your test source file with +${GTEST_DIR}/include in the header search path, and link it with gtest +and any other necessary libraries: + + g++ -I${GTEST_DIR}/include path/to/your_test.cc libgtest.a -o your_test + +As an example, the make/ directory contains a Makefile that you can +use to build Google Test on systems where GNU make is available +(e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google +Test's own tests. Instead, it just builds the Google Test library and +a sample test. You can use it as a starting point for your own build +script. + +If the default settings are correct for your environment, the +following commands should succeed: + + cd ${GTEST_DIR}/make + make + ./sample1_unittest + +If you see errors, try to tweak the contents of make/Makefile to make +them go away. There are instructions in make/Makefile on how to do +it. + +### Using CMake ### + +Google Test comes with a CMake build script (CMakeLists.txt) that can +be used on a wide range of platforms ("C" stands for cross-platofrm.). +If you don't have CMake installed already, you can download it for +free from http://www.cmake.org/. + +CMake works by generating native makefiles or build projects that can +be used in the compiler environment of your choice. The typical +workflow starts with: + + mkdir mybuild # Create a directory to hold the build output. + cd mybuild + cmake ${GTEST_DIR} # Generate native build scripts. + +If you want to build Google Test's samples, you should replace the +last command with + + cmake -Dbuild_gtest_samples=ON ${GTEST_DIR} + +If you are on a *nix system, you should now see a Makefile in the +current directory. Just type 'make' to build gtest. + +If you use Windows and have Vistual Studio installed, a gtest.sln file +and several .vcproj files will be created. You can then build them +using Visual Studio. + +On Mac OS X with Xcode installed, a .xcodeproj file will be generated. + +### Legacy Build Scripts ### + +Before settling on CMake, we have been providing hand-maintained build +projects/scripts for Visual Studio, Xcode, and Autotools. While we +continue to provide them for convenience, they are not actively +maintained any more. We highly recommend that you follow the +instructions in the previous two sections to integrate Google Test +with your existing build system. + +If you still need to use the legacy build scripts, here's how: + +The msvc\ folder contains two solutions with Visual C++ projects. +Open the gtest.sln or gtest-md.sln file using Visual Studio, and you +are ready to build Google Test the same way you build any Visual +Studio project. Files that have names ending with -md use DLL +versions of Microsoft runtime libraries (the /MD or the /MDd compiler +option). Files without that suffix use static versions of the runtime +libraries (the /MT or the /MTd option). Please note that one must use +the same option to compile both gtest and the test code. If you use +Visual Studio 2005 or above, we recommend the -md version as /MD is +the default for new projects in these versions of Visual Studio. + +On Mac OS X, open the gtest.xcodeproj in the xcode/ folder using +Xcode. Build the "gtest" target. The universal binary framework will +end up in your selected build directory (selected in the Xcode +"Preferences..." -> "Building" pane and defaults to xcode/build). +Alternatively, at the command line, enter: + + xcodebuild + +This will build the "Release" configuration of gtest.framework in your +default build location. See the "xcodebuild" man page for more +information about building different configurations and building in +different locations. + +Tweaking Google Test +-------------------- + +Google Test can be used in diverse environments. The default +configuration may not work (or may not work well) out of the box in +some environments. However, you can easily tweak Google Test by +defining control macros on the compiler command line. Generally, +these macros are named like GTEST_XYZ and you define them to either 1 +or 0 to enable or disable a certain feature. + +We list the most frequently used macros below. For a complete list, +see file include/gtest/internal/gtest-port.h. + +### Choosing a TR1 Tuple Library ### + +Some Google Test features require the C++ Technical Report 1 (TR1) +tuple library, which is not yet available with all compilers. The +good news is that Google Test implements a subset of TR1 tuple that's +enough for its own need, and will automatically use this when the +compiler doesn't provide TR1 tuple. + +Usually you don't need to care about which tuple library Google Test +uses. However, if your project already uses TR1 tuple, you need to +tell Google Test to use the same TR1 tuple library the rest of your +project uses, or the two tuple implementations will clash. To do +that, add + + -DGTEST_USE_OWN_TR1_TUPLE=0 + +to the compiler flags while compiling Google Test and your tests. If +you want to force Google Test to use its own tuple library, just add + + -DGTEST_USE_OWN_TR1_TUPLE=1 + +to the compiler flags instead. + +If you don't want Google Test to use tuple at all, add + + -DGTEST_HAS_TR1_TUPLE=0 + +and all features using tuple will be disabled. + +### Multi-threaded Tests ### + +Google Test is thread-safe where the pthread library is available. +After #include , you can check the GTEST_IS_THREADSAFE +macro to see whether this is the case (yes if the macro is #defined to +1, no if it's undefined.). + +If Google Test doesn't correctly detect whether pthread is available +in your environment, you can force it with + + -DGTEST_HAS_PTHREAD=1 + +or + + -DGTEST_HAS_PTHREAD=0 + +When Google Test uses pthread, you may need to add flags to your +compiler and/or linker to select the pthread library, or you'll get +link errors. If you use the CMake script or the deprecated Autotools +script, this is taken care of for you. If you use your own build +script, you'll need to read your compiler and linker's manual to +figure out what flags to add. + +### As a Shared Library (DLL) ### + +Google Test is compact, so most users can build and link it as a +static library for the simplicity. You can choose to use Google Test +as a shared library (known as a DLL on Windows) if you prefer. + +To compile gtest as a shared library, add + + -DGTEST_CREATE_SHARED_LIBRARY=1 + +to the compiler flags. You'll also need to tell the linker to produce +a shared library instead - consult your linker's manual for how to do +it. + +To compile your tests that use the gtest shared library, add + + -DGTEST_LINKED_AS_SHARED_LIBRARY=1 + +to the compiler flags. + +### Avoiding Macro Name Clashes ### + +In C++, macros don't obey namespaces. Therefore two libraries that +both define a macro of the same name will clash if you #include both +definitions. In case a Google Test macro clashes with another +library, you can force Google Test to rename its macro to avoid the +conflict. + +Specifically, if both Google Test and some other code define macro +FOO, you can add + + -DGTEST_DONT_DEFINE_FOO=1 + +to the compiler flags to tell Google Test to change the macro's name +from FOO to GTEST_FOO. Currently FOO can be FAIL, SUCCEED, or TEST. +For example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write + + GTEST_TEST(SomeTest, DoesThis) { ... } + +instead of + + TEST(SomeTest, DoesThis) { ... } + +in order to define a test. + +Upgrating from an Earlier Version +--------------------------------- + +We strive to keep Google Test releases backward compatible. +Sometimes, though, we have to make some breaking changes for the +users' long-term benefits. This section describes what you'll need to +do if you are upgrading from an earlier version of Google Test. + +### Upgrading from 1.3.0 or Earlier ### + +You may need to explicitly enable or disable Google Test's own TR1 +tuple library. See the instructions in section "Choosing a TR1 Tuple +Library". + +### Upgrading from 1.4.0 or Earlier ### + +The Autotools build script (configure + make) is no longer officially +supportted. You are encouraged to migrate to your own build system or +use CMake. If you still need to use Autotools, you can find +instructions in the README file from Google Test 1.4.0. + +On platforms where the pthread library is available, Google Test uses +it in order to be thread-safe. See the "Multi-threaded Tests" section +for what this means to your build script. + +If you use Microsoft Visual C++ 7.1 with exceptions disabled, Google +Test will no longer compile. This should affect very few people, as a +large portion of STL (including ) doesn't compile in this mode +anyway. We decided to stop supporting it in order to greatly simplify +Google Test's implementation. + +Developing Google Test +---------------------- + +This section discusses how to make your own changes to Google Test. + +### Testing Google Test Itself ### + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test's own tests. +For that you can use CMake: + + mkdir mybuild + cd mybuild + cmake -Dbuild_all_gtest_tests=ON ${GTEST_DIR} + +Make sure you have Python installed, as some of Google Test's tests +are written in Python. If the cmake command complains about not being +able to find Python ("Could NOT find PythonInterp (missing: +PYTHON_EXECUTABLE)"), try telling it explicitly where your Python +executable can be found: + + cmake -DPYTHON_EXECUTABLE=path/to/python -Dbuild_all_gtest_tests=ON \ + ${GTEST_DIR} + +Next, you can build Google Test and all of its own tests. On *nix, +this is usually done by 'make'. To run the tests, do + + make test + +All tests should pass. + +### Regenerating Source Files ### + +Some of Google Test's source files are generated from templates (not +in the C++ sense) using a script. A template file is named FOO.pump, +where FOO is the name of the file it will generate. For example, the +file include/gtest/internal/gtest-type-util.h.pump is used to generate +gtest-type-util.h in the same directory. + +Normally you don't need to worry about regenerating the source files, +unless you need to modify them. In that case, you should modify the +corresponding .pump files instead and run the pump.py Python script to +regenerate them. You can find pump.py in the scripts/ directory. +Read the Pump manual [2] for how to use it. + + [2] http://code.google.com/p/googletest/wiki/PumpManual + +### Contributing a Patch ### + +We welcome patches. Please read the Google Test developer's guide [3] +for how you can contribute. In particular, make sure you have signed +the Contributor License Agreement, or we won't be able to accept the +patch. + + [3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide + +Happy testing! diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.guess b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.guess new file mode 100755 index 00000000..278f9e9e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.guess @@ -0,0 +1,1516 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2007-07-22' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa:Linux:*:*) + echo xtensa-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.h.in b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.h.in new file mode 100644 index 00000000..0c02afde --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.h.in @@ -0,0 +1,62 @@ +/* build-aux/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.sub b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.sub new file mode 100755 index 00000000..1761d8bd --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/config.sub @@ -0,0 +1,1626 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2007-06-28' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/depcomp b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/depcomp new file mode 100755 index 00000000..e5f9736c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/depcomp @@ -0,0 +1,589 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2007-03-29.01 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/install-sh b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/install-sh new file mode 100755 index 00000000..a5897de6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/ltmain.sh b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/ltmain.sh new file mode 100644 index 00000000..e420facf --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/ltmain.sh @@ -0,0 +1,6964 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION="1.5.26 Debian 1.5.26-1ubuntu1" +TIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)" + +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +duplicate_deps=no +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + $SED -n -e '1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case "$@ " in + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + extracted_serial=`expr $extracted_serial + 1` + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +disable_libs=no + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + echo "\ +$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP + +Copyright (C) 2008 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) + prevopt="--tag" + prev=tag + preserve_args="$preserve_args --tag" + ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +case $disable_libs in +no) + ;; +shared) + build_libtool_libs=no + build_old_libs=yes + ;; +static) + build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` + ;; +esac + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, and some SunOS ksh mistreat backslash-escaping + # in scan sets (worked around with variable expansion), + # and furthermore cannot handle '|' '&' '(' ')' in scan sets + # at all, so we specify them separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.[fF][09]?) xform=[fF][09]. ;; + *.for) xform=for ;; + *.java) xform=java ;; + *.obj) xform=obj ;; + *.sx) xform=sx ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` + case $qlibobj in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qlibobj="\"$qlibobj\"" ;; + esac + test "X$libobj" != "X$qlibobj" \ + && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo "$srcfile" > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` + case $qsrcfile in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qsrcfile="\"$qsrcfile\"" ;; + esac + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + darwin_framework|darwin_framework_skip) + test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework|-arch|-isysroot) + case " $CC " in + *" ${arg} ${1} "* | *" ${arg} ${1} "*) + prev=darwin_framework_skip ;; + *) compiler_flags="$compiler_flags $arg" + prev=darwin_framework ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + notinst_path="$notinst_path $dir" + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + -model) + compile_command="$compile_command $arg" + compiler_flags="$compiler_flags $arg" + finalize_command="$finalize_command $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -module) + module=yes + continue + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m* pass through architecture-specific compiler args for GCC + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then + exit $exit_status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + if eval $echo \"$deplib\" 2>/dev/null \ + | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $absdir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes ; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | + $EGREP ": [^:]* bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$deplibdir/$depdepl" ; then + depdepl="$deplibdir/$depdepl" + elif test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + else + # Can't find it, oh well... + depdepl= + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + case " $deplibs" in + *\ -l* | *\ -L*) + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; + esac + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + major=`expr $current - $age` + else + major=`expr $current - $age + 1` + fi + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name=`expr $a_deplib : '-l\(.*\)'` + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + case $archive_cmds in + *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; + *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; + esac + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$echo "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$output_la-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadable object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + case " $deplibs" in + *\ -l* | *\ -L*) + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; + esac + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + else + $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +" + + case $host in + *cygwin* | *mingw* ) + $echo >> "$output_objdir/$dlsyms" "\ +/* DATA imports from DLLs on WIN32 can't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs */ +struct { +" + ;; + * ) + $echo >> "$output_objdir/$dlsyms" "\ +const struct { +" + ;; + esac + + + $echo >> "$output_objdir/$dlsyms" "\ + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + case $host in + *cygwin* | *mingw* ) + if test -f "$output_objdir/${outputname}.def" ; then + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + else + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + fi + ;; + * ) + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + ;; + esac + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + exit_status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $exit_status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + output_name=`basename $output` + output_path=`dirname $output` + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +/* -DDEBUG is fairly common in CFLAGS. */ +#undef DEBUG +#if defined DEBUGWRAPPER +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) +#else +# define DEBUG(format, ...) +#endif + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +const char * base_name (const char *name); +char * find_executable(const char *wrapper); +int check_executable(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + DEBUG("(main) argv[0] : %s\n",argv[0]); + DEBUG("(main) program_name : %s\n",program_name); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = find_executable(argv[0]); + if (newargz[1] == NULL) + lt_fatal("Couldn't find %s", argv[0]); + DEBUG("(main) found exe at : %s\n",newargz[1]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; + + for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" + return 127; +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char)name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable(const char * path) +{ + struct stat st; + + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) && + ( + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ +#if defined (S_IXOTH) + ((st.st_mode & S_IXOTH) == S_IXOTH) || +#endif +#if defined (S_IXGRP) + ((st.st_mode & S_IXGRP) == S_IXGRP) || +#endif + ((st.st_mode & S_IXUSR) == S_IXUSR)) + ) + return 1; + else + return 0; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise */ +char * +find_executable (const char* wrapper) +{ + int has_slash = 0; + const char* p; + const char* p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char* concat_name; + + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char* path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char* q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR(*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + return NULL; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \$*\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$gentop"; then + exit $exit_status + fi + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) prev=$arg ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` + else + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir=`func_mktempdir` + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "X----------------------------------------------------------------------" | $Xsed + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $? + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +disable_libs=shared +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +disable_libs=static +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/missing b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/missing new file mode 100755 index 00000000..1c8ff704 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/build-aux/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case $1 in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $1 in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.cbproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.cbproj new file mode 100644 index 00000000..95c3054b --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.cbproj @@ -0,0 +1,138 @@ + + + + {bca37a72-5b07-46cf-b44e-89f8e06451a2} + Release + + + true + + + true + true + Base + + + true + true + Base + + + true + lib + JPHNE + NO_STRICT + true + true + CppStaticLibrary + true + rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi + false + $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;.. + rtl.lib;vcl.lib + 32 + $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk + + + false + false + true + _DEBUG;$(Defines) + true + false + true + None + DEBUG + true + Debug + true + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath) + Full + true + + + NDEBUG;$(Defines) + Release + $(BDS)\lib\release;$(ILINK_LibraryPath) + None + + + CPlusPlusBuilder.Personality + CppStaticLibrary + +FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse + + + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk1NO_STRICT13216 + + + + + 3 + + + 4 + + + 5 + + + 6 + + + 7 + + + 8 + + + 0 + + + 1 + + + 2 + + + 9 + + + 10 + + + 11 + + + 12 + + + 14 + + + 13 + + + 15 + + + 16 + + + 17 + + + 18 + + + Cfg_1 + + + Cfg_2 + + + \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.groupproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.groupproj new file mode 100644 index 00000000..faf31cab --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest.groupproj @@ -0,0 +1,54 @@ + + + {c1d923e0-6cba-4332-9b6f-3420acbf5091} + + + + + + + + + Default.Personality + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_all.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_all.cc new file mode 100644 index 00000000..121b2d80 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_all.cc @@ -0,0 +1,38 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: Josh Kelley (joshkel@gmail.com) +// +// Google C++ Testing Framework (Google Test) +// +// C++Builder's IDE cannot build a static library from files with hyphens +// in their name. See http://qc.codegear.com/wc/qcmain.aspx?d=70977 . +// This file serves as a workaround. + +#include "src/gtest-all.cc" diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_link.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_link.cc new file mode 100644 index 00000000..918eccd1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_link.cc @@ -0,0 +1,40 @@ +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: Josh Kelley (joshkel@gmail.com) +// +// Google C++ Testing Framework (Google Test) +// +// Links gtest.lib and gtest_main.lib into the current project in C++Builder. +// This means that these libraries can't be renamed, but it's the only way to +// ensure that Debug versus Release test builds are linked against the +// appropriate Debug or Release build of the libraries. + +#pragma link "gtest.lib" +#pragma link "gtest_main.lib" diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_main.cbproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_main.cbproj new file mode 100644 index 00000000..d76ce139 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_main.cbproj @@ -0,0 +1,82 @@ + + + + {bca37a72-5b07-46cf-b44e-89f8e06451a2} + Release + + + true + + + true + true + Base + + + true + true + Base + + + true + lib + JPHNE + NO_STRICT + true + true + CppStaticLibrary + true + rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi + false + $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;.. + rtl.lib;vcl.lib + 32 + $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk + + + false + false + true + _DEBUG;$(Defines) + true + false + true + None + DEBUG + true + Debug + true + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath) + Full + true + + + NDEBUG;$(Defines) + Release + $(BDS)\lib\release;$(ILINK_LibraryPath) + None + + + CPlusPlusBuilder.Personality + CppStaticLibrary + +FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk1NO_STRICT13216 + + + + + 0 + + + Cfg_1 + + + Cfg_2 + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_unittest.cbproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_unittest.cbproj new file mode 100644 index 00000000..dc5db8e4 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/codegear/gtest_unittest.cbproj @@ -0,0 +1,88 @@ + + + + {eea63393-5ac5-4b9c-8909-d75fef2daa41} + Release + + + true + + + true + true + Base + + + true + true + Base + + + exe + true + NO_STRICT + JPHNE + true + ..\test + true + CppConsoleApplication + true + true + rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi + false + $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;.. + $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test + true + + + false + false + true + _DEBUG;$(Defines) + true + false + true + None + DEBUG + true + Debug + true + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath) + Full + true + + + NDEBUG;$(Defines) + Release + $(BDS)\lib\release;$(ILINK_LibraryPath) + None + + + CPlusPlusBuilder.Personality + CppConsoleApplication + +FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse + + + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test2NO_STRICTSTRICT + + + + + 0 + + + 1 + + + Cfg_1 + + + Cfg_2 + + + \ No newline at end of file diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/configure.ac b/thirdparty/carve-1.4.0/external/gtest-1.5.0/configure.ac new file mode 100644 index 00000000..1b912374 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/configure.ac @@ -0,0 +1,67 @@ +m4_include(m4/acx_pthread.m4) + +# At this point, the Xcode project assumes the version string will be three +# integers separated by periods and surrounded by square brackets (e.g. +# "[1.0.1]"). It also asumes that there won't be any closing parenthesis +# between "AC_INIT(" and the closing ")" including comments and strings. +AC_INIT([Google C++ Testing Framework], + [1.5.0], + [googletestframework@googlegroups.com], + [gtest]) + +# Provide various options to initialize the Autoconf and configure processes. +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([./COPYING]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_HEADERS([build-aux/config.h]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([scripts/gtest-config], [chmod +x scripts/gtest-config]) + +# Initialize Automake with various options. We require at least v1.9, prevent +# pedantic complaints about package files, and enable various distribution +# targets. +AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects]) + +# Check for programs used in building Google Test. +AC_PROG_CC +AC_PROG_CXX +AC_LANG([C++]) +AC_PROG_LIBTOOL + +# TODO(chandlerc@google.com): Currently we aren't running the Python tests +# against the interpreter detected by AM_PATH_PYTHON, and so we condition +# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's +# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" +# hashbang. +PYTHON= # We *do not* allow the user to specify a python interpreter +AC_PATH_PROG([PYTHON],[python],[:]) +AS_IF([test "$PYTHON" != ":"], + [AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])]) +AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"]) + +# Configure pthreads. +AC_ARG_WITH([pthreads], + [AS_HELP_STRING([--with-pthreads], + [use pthreads (default is yes)])], + [with_pthreads=$withval], + [with_pthreads=check]) + +have_pthreads=no +AS_IF([test "x$with_pthreads" != "xno"], + [ACX_PTHREAD( + [], + [AS_IF([test "x$with_pthreads" != "xcheck"], + [AC_MSG_FAILURE( + [--with-pthreads was specified, but unable to be used])])]) + have_pthreads="$acx_pthread_ok"]) +AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" == "xyes"]) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_LIBS) + +# TODO(chandlerc@google.com) Check for the necessary system headers. + +# TODO(chandlerc@google.com) Check the types, structures, and other compiler +# and architecture characteristics. + +# Output the generated files. No further autoconf macros may be used. +AC_OUTPUT diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest-all.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest-all.cc new file mode 100644 index 00000000..644479a6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest-all.cc @@ -0,0 +1,8510 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// Google C++ Testing Framework (Google Test) +// +// Sometimes it's desirable to build Google Test by compiling a single file. +// This file serves this purpose. + +// This line ensures that gtest.h can be compiled on its own, even +// when it's fused. +#include + +// The following lines pull in the real gtest *.cc files. +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Utilities for testing Google Test itself and code that uses Google Test +// (e.g. frameworks built on top of Google Test). + +#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + + +namespace testing { + +// This helper class can be used to mock out Google Test failure reporting +// so that we can test Google Test or code that builds on Google Test. +// +// An object of this class appends a TestPartResult object to the +// TestPartResultArray object given in the constructor whenever a Google Test +// failure is reported. It can either intercept only failures that are +// generated in the same thread that created this object or it can intercept +// all generated failures. The scope of this mock object can be controlled with +// the second argument to the two arguments constructor. +class GTEST_API_ ScopedFakeTestPartResultReporter + : public TestPartResultReporterInterface { + public: + // The two possible mocking modes of this object. + enum InterceptMode { + INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. + INTERCEPT_ALL_THREADS // Intercepts all failures. + }; + + // The c'tor sets this object as the test part result reporter used + // by Google Test. The 'result' parameter specifies where to report the + // results. This reporter will only catch failures generated in the current + // thread. DEPRECATED + explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); + + // Same as above, but you can choose the interception scope of this object. + ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, + TestPartResultArray* result); + + // The d'tor restores the previous test part result reporter. + virtual ~ScopedFakeTestPartResultReporter(); + + // Appends the TestPartResult object to the TestPartResultArray + // received in the constructor. + // + // This method is from the TestPartResultReporterInterface + // interface. + virtual void ReportTestPartResult(const TestPartResult& result); + private: + void Init(); + + const InterceptMode intercept_mode_; + TestPartResultReporterInterface* old_reporter_; + TestPartResultArray* const result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); +}; + +namespace internal { + +// A helper class for implementing EXPECT_FATAL_FAILURE() and +// EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +class GTEST_API_ SingleFailureChecker { + public: + // The constructor remembers the arguments. + SingleFailureChecker(const TestPartResultArray* results, + TestPartResult::Type type, + const char* substr); + ~SingleFailureChecker(); + private: + const TestPartResultArray* const results_; + const TestPartResult::Type type_; + const String substr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); +}; + +} // namespace internal + +} // namespace testing + +// A set of macros for testing Google Test assertions or code that's expected +// to generate Google Test fatal failures. It verifies that the given +// statement will cause exactly one fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_FATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - 'statement' cannot reference local non-static variables or +// non-static members of the current object. +// - 'statement' cannot return a value. +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. The AcceptsMacroThatExpandsToUnprotectedComma test in +// gtest_unittest.cc will fail to compile if we do that. +#define EXPECT_FATAL_FAILURE(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ALL_THREADS, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +// A macro for testing Google Test assertions or code that's expected to +// generate Google Test non-fatal failures. It asserts that the given +// statement will cause exactly one non-fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// 'statement' is allowed to reference local variables and members of +// the current object. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. If we do that, the code won't compile when the user gives +// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that +// expands to code containing an unprotected comma. The +// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc +// catches that. +// +// For the same reason, we have to write +// if (::testing::internal::AlwaysTrue()) { statement; } +// instead of +// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) +// to avoid an MSVC warning on unreachable code. +#define EXPECT_NONFATAL_FAILURE(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\ + >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if GTEST_OS_LINUX + +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +#define GTEST_HAS_GETTIMEOFDAY_ 1 + +#include +#include +#include +// Declares vsnprintf(). This header is not available on Windows. +#include +#include +#include +#include +#include +#include + +#elif GTEST_OS_SYMBIAN +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT + +#elif GTEST_OS_ZOS +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT + +// On z/OS we additionally need strings.h for strcasecmp. +#include // NOLINT + +#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. + +#include // NOLINT + +#elif GTEST_OS_WINDOWS // We are on Windows proper. + +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#if GTEST_OS_WINDOWS_MINGW +// MinGW has gettimeofday() but not _ftime64(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +// TODO(kenton@google.com): There are other ways to get the time on +// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW +// supports these. consider using them instead. +#define GTEST_HAS_GETTIMEOFDAY_ 1 +#include // NOLINT +#endif // GTEST_OS_WINDOWS_MINGW + +// cpplint thinks that the header is already included, so we want to +// silence it. +#include // NOLINT + +#else + +// Assume other platforms have gettimeofday(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +#define GTEST_HAS_GETTIMEOFDAY_ 1 + +// cpplint thinks that the header is already included, so we want to +// silence it. +#include // NOLINT +#include // NOLINT + +#endif // GTEST_OS_LINUX + +#if GTEST_HAS_EXCEPTIONS +#include +#endif + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utility functions and classes used by the Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This file contains purely Google Test's internal implementation. Please +// DO NOT #INCLUDE IT IN A USER PROGRAM. + +#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ +#define GTEST_SRC_GTEST_INTERNAL_INL_H_ + +// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is +// part of Google Test's implementation; otherwise it's undefined. +#if !GTEST_IMPLEMENTATION_ +// A user is trying to include this from his code - just say no. +#error "gtest-internal-inl.h is part of Google Test's internal implementation." +#error "It must not be included except by Google Test itself." +#endif // GTEST_IMPLEMENTATION_ + +#ifndef _WIN32_WCE +#include +#endif // !_WIN32_WCE +#include +#include // For strtoll/_strtoul64/malloc/free. +#include // For memmove. + +#include +#include +#include + + +#if GTEST_OS_WINDOWS +#include // For DWORD. +#endif // GTEST_OS_WINDOWS + + +namespace testing { + +// Declares the flags. +// +// We don't want the users to modify this flag in the code, but want +// Google Test's own unit tests to be able to access it. Therefore we +// declare it here as opposed to in gtest.h. +GTEST_DECLARE_bool_(death_test_use_fork); + +namespace internal { + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; + +// Names of the flags (needed for parsing Google Test flags). +const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; +const char kBreakOnFailureFlag[] = "break_on_failure"; +const char kCatchExceptionsFlag[] = "catch_exceptions"; +const char kColorFlag[] = "color"; +const char kFilterFlag[] = "filter"; +const char kListTestsFlag[] = "list_tests"; +const char kOutputFlag[] = "output"; +const char kPrintTimeFlag[] = "print_time"; +const char kRandomSeedFlag[] = "random_seed"; +const char kRepeatFlag[] = "repeat"; +const char kShuffleFlag[] = "shuffle"; +const char kStackTraceDepthFlag[] = "stack_trace_depth"; +const char kThrowOnFailureFlag[] = "throw_on_failure"; + +// A valid random seed must be in [1, kMaxRandomSeed]. +const int kMaxRandomSeed = 99999; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +GTEST_API_ extern bool g_help_flag; + +// Returns the current time in milliseconds. +GTEST_API_ TimeInMillis GetTimeInMillis(); + +// Returns true iff Google Test should use colors in the output. +GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); + +// Formats the given time in milliseconds as seconds. +GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); + +// Parses a string for an Int32 flag, in the form of "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +GTEST_API_ bool ParseInt32Flag( + const char* str, const char* flag, Int32* value); + +// Returns a random seed in range [1, kMaxRandomSeed] based on the +// given --gtest_random_seed flag value. +inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { + const unsigned int raw_seed = (random_seed_flag == 0) ? + static_cast(GetTimeInMillis()) : + static_cast(random_seed_flag); + + // Normalizes the actual seed to range [1, kMaxRandomSeed] such that + // it's easy to type. + const int normalized_seed = + static_cast((raw_seed - 1U) % + static_cast(kMaxRandomSeed)) + 1; + return normalized_seed; +} + +// Returns the first valid random seed after 'seed'. The behavior is +// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is +// considered to be 1. +inline int GetNextRandomSeed(int seed) { + GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) + << "Invalid random seed " << seed << " - must be in [1, " + << kMaxRandomSeed << "]."; + const int next_seed = seed + 1; + return (next_seed > kMaxRandomSeed) ? 1 : next_seed; +} + +// This class saves the values of all Google Test flags in its c'tor, and +// restores them in its d'tor. +class GTestFlagSaver { + public: + // The c'tor. + GTestFlagSaver() { + also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); + break_on_failure_ = GTEST_FLAG(break_on_failure); + catch_exceptions_ = GTEST_FLAG(catch_exceptions); + color_ = GTEST_FLAG(color); + death_test_style_ = GTEST_FLAG(death_test_style); + death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); + filter_ = GTEST_FLAG(filter); + internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); + list_tests_ = GTEST_FLAG(list_tests); + output_ = GTEST_FLAG(output); + print_time_ = GTEST_FLAG(print_time); + random_seed_ = GTEST_FLAG(random_seed); + repeat_ = GTEST_FLAG(repeat); + shuffle_ = GTEST_FLAG(shuffle); + stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); + throw_on_failure_ = GTEST_FLAG(throw_on_failure); + } + + // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. + ~GTestFlagSaver() { + GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; + GTEST_FLAG(break_on_failure) = break_on_failure_; + GTEST_FLAG(catch_exceptions) = catch_exceptions_; + GTEST_FLAG(color) = color_; + GTEST_FLAG(death_test_style) = death_test_style_; + GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; + GTEST_FLAG(filter) = filter_; + GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; + GTEST_FLAG(list_tests) = list_tests_; + GTEST_FLAG(output) = output_; + GTEST_FLAG(print_time) = print_time_; + GTEST_FLAG(random_seed) = random_seed_; + GTEST_FLAG(repeat) = repeat_; + GTEST_FLAG(shuffle) = shuffle_; + GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; + GTEST_FLAG(throw_on_failure) = throw_on_failure_; + } + private: + // Fields for saving the original values of flags. + bool also_run_disabled_tests_; + bool break_on_failure_; + bool catch_exceptions_; + String color_; + String death_test_style_; + bool death_test_use_fork_; + String filter_; + String internal_run_death_test_; + bool list_tests_; + String output_; + bool print_time_; + bool pretty_; + internal::Int32 random_seed_; + internal::Int32 repeat_; + bool shuffle_; + internal::Int32 stack_trace_depth_; + bool throw_on_failure_; +} GTEST_ATTRIBUTE_UNUSED_; + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// The output buffer str must containt at least 32 characters. +// The function returns the address of the output buffer. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. +GTEST_API_ char* CodePointToUtf8(UInt32 code_point, char* str); + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +GTEST_API_ String WideStringToUtf8(const wchar_t* str, int num_chars); + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded(); + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (e.g., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +GTEST_API_ bool ShouldShard(const char* total_shards_str, + const char* shard_index_str, + bool in_subprocess_for_death_test); + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error and +// and aborts. +GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +GTEST_API_ bool ShouldRunTestOnShard( + int total_shards, int shard_index, int test_id); + +// STL container utilities. + +// Returns the number of elements in the given container that satisfy +// the given predicate. +template +inline int CountIf(const Container& c, Predicate predicate) { + return static_cast(std::count_if(c.begin(), c.end(), predicate)); +} + +// Applies a function/functor to each element in the container. +template +void ForEach(const Container& c, Functor functor) { + std::for_each(c.begin(), c.end(), functor); +} + +// Returns the i-th element of the vector, or default_value if i is not +// in range [0, v.size()). +template +inline E GetElementOr(const std::vector& v, int i, E default_value) { + return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; +} + +// Performs an in-place shuffle of a range of the vector's elements. +// 'begin' and 'end' are element indices as an STL-style range; +// i.e. [begin, end) are shuffled, where 'end' == size() means to +// shuffle to the end of the vector. +template +void ShuffleRange(internal::Random* random, int begin, int end, + std::vector* v) { + const int size = static_cast(v->size()); + GTEST_CHECK_(0 <= begin && begin <= size) + << "Invalid shuffle range start " << begin << ": must be in range [0, " + << size << "]."; + GTEST_CHECK_(begin <= end && end <= size) + << "Invalid shuffle range finish " << end << ": must be in range [" + << begin << ", " << size << "]."; + + // Fisher-Yates shuffle, from + // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle + for (int range_width = end - begin; range_width >= 2; range_width--) { + const int last_in_range = begin + range_width - 1; + const int selected = begin + random->Generate(range_width); + std::swap((*v)[selected], (*v)[last_in_range]); + } +} + +// Performs an in-place shuffle of the vector's elements. +template +inline void Shuffle(internal::Random* random, std::vector* v) { + ShuffleRange(random, 0, static_cast(v->size()), v); +} + +// A function for deleting an object. Handy for being used as a +// functor. +template +static void Delete(T* x) { + delete x; +} + +// A predicate that checks the key of a TestProperty against a known key. +// +// TestPropertyKeyIs is copyable. +class TestPropertyKeyIs { + public: + // Constructor. + // + // TestPropertyKeyIs has NO default constructor. + explicit TestPropertyKeyIs(const char* key) + : key_(key) {} + + // Returns true iff the test name of test property matches on key_. + bool operator()(const TestProperty& test_property) const { + return String(test_property.key()).Compare(key_) == 0; + } + + private: + String key_; +}; + +class TestInfoImpl { + public: + TestInfoImpl(TestInfo* parent, const char* test_case_name, + const char* name, const char* test_case_comment, + const char* comment, TypeId fixture_class_id, + internal::TestFactoryBase* factory); + ~TestInfoImpl(); + + // Returns true if this test should run. + bool should_run() const { return should_run_; } + + // Sets the should_run member. + void set_should_run(bool should) { should_run_ = should; } + + // Returns true if this test is disabled. Disabled tests are not run. + bool is_disabled() const { return is_disabled_; } + + // Sets the is_disabled member. + void set_is_disabled(bool is) { is_disabled_ = is; } + + // Returns true if this test matches the filter specified by the user. + bool matches_filter() const { return matches_filter_; } + + // Sets the matches_filter member. + void set_matches_filter(bool matches) { matches_filter_ = matches; } + + // Returns the test case name. + const char* test_case_name() const { return test_case_name_.c_str(); } + + // Returns the test name. + const char* name() const { return name_.c_str(); } + + // Returns the test case comment. + const char* test_case_comment() const { return test_case_comment_.c_str(); } + + // Returns the test comment. + const char* comment() const { return comment_.c_str(); } + + // Returns the ID of the test fixture class. + TypeId fixture_class_id() const { return fixture_class_id_; } + + // Returns the test result. + TestResult* result() { return &result_; } + const TestResult* result() const { return &result_; } + + // Creates the test object, runs it, records its result, and then + // deletes it. + void Run(); + + // Clears the test result. + void ClearResult() { result_.Clear(); } + + // Clears the test result in the given TestInfo object. + static void ClearTestResult(TestInfo * test_info) { + test_info->impl()->ClearResult(); + } + + private: + // These fields are immutable properties of the test. + TestInfo* const parent_; // The owner of this object + const String test_case_name_; // Test case name + const String name_; // Test name + const String test_case_comment_; // Test case comment + const String comment_; // Test comment + const TypeId fixture_class_id_; // ID of the test fixture class + bool should_run_; // True iff this test should run + bool is_disabled_; // True iff this test is disabled + bool matches_filter_; // True if this test matches the + // user-specified filter. + internal::TestFactoryBase* const factory_; // The factory that creates + // the test object + + // This field is mutable and needs to be reset before running the + // test for the second time. + TestResult result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfoImpl); +}; + +// Class UnitTestOptions. +// +// This class contains functions for processing options the user +// specifies when running the tests. It has only static members. +// +// In most cases, the user can specify an option using either an +// environment variable or a command line flag. E.g. you can set the +// test filter using either GTEST_FILTER or --gtest_filter. If both +// the variable and the flag are present, the latter overrides the +// former. +class GTEST_API_ UnitTestOptions { + public: + // Functions for processing the gtest_output flag. + + // Returns the output format, or "" for normal printed output. + static String GetOutputFormat(); + + // Returns the absolute path of the requested output file, or the + // default (test_detail.xml in the original working directory) if + // none was explicitly specified. + static String GetAbsolutePathToOutputFile(); + + // Functions for processing the gtest_filter flag. + + // Returns true iff the wildcard pattern matches the string. The + // first ':' or '\0' character in pattern marks the end of it. + // + // This recursive algorithm isn't very efficient, but is clear and + // works well enough for matching test names, which are short. + static bool PatternMatchesString(const char *pattern, const char *str); + + // Returns true iff the user-specified filter matches the test case + // name and the test name. + static bool FilterMatchesTest(const String &test_case_name, + const String &test_name); + +#if GTEST_OS_WINDOWS + // Function for supporting the gtest_catch_exception flag. + + // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the + // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. + // This function is useful as an __except condition. + static int GTestShouldProcessSEH(DWORD exception_code); +#endif // GTEST_OS_WINDOWS + + // Returns true if "name" matches the ':' separated list of glob-style + // filters in "filter". + static bool MatchesFilter(const String& name, const char* filter); +}; + +// Returns the current application's name, removing directory path if that +// is present. Used by UnitTestOptions::GetOutputFile. +GTEST_API_ FilePath GetCurrentExecutableName(); + +// The role interface for getting the OS stack trace as a string. +class OsStackTraceGetterInterface { + public: + OsStackTraceGetterInterface() {} + virtual ~OsStackTraceGetterInterface() {} + + // Returns the current OS stack trace as a String. Parameters: + // + // max_depth - the maximum number of stack frames to be included + // in the trace. + // skip_count - the number of top frames to be skipped; doesn't count + // against max_depth. + virtual String CurrentStackTrace(int max_depth, int skip_count) = 0; + + // UponLeavingGTest() should be called immediately before Google Test calls + // user code. It saves some information about the current stack that + // CurrentStackTrace() will use to find and hide Google Test stack frames. + virtual void UponLeavingGTest() = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); +}; + +// A working implementation of the OsStackTraceGetterInterface interface. +class OsStackTraceGetter : public OsStackTraceGetterInterface { + public: + OsStackTraceGetter() : caller_frame_(NULL) {} + virtual String CurrentStackTrace(int max_depth, int skip_count); + virtual void UponLeavingGTest(); + + // This string is inserted in place of stack frames that are part of + // Google Test's implementation. + static const char* const kElidedFramesMarker; + + private: + Mutex mutex_; // protects all internal state + + // We save the stack frame below the frame that calls user code. + // We do this because the address of the frame immediately below + // the user code changes between the call to UponLeavingGTest() + // and any calls to CurrentStackTrace() from within the user code. + void* caller_frame_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); +}; + +// Information about a Google Test trace point. +struct TraceInfo { + const char* file; + int line; + String message; +}; + +// This is the default global test part result reporter used in UnitTestImpl. +// This class should only be used by UnitTestImpl. +class DefaultGlobalTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. Reports the test part + // result in the current test. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); +}; + +// This is the default per thread test part result reporter used in +// UnitTestImpl. This class should only be used by UnitTestImpl. +class DefaultPerThreadTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. The implementation just + // delegates to the current global test part result reporter of *unit_test_. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); +}; + +// The private implementation of the UnitTest class. We don't protect +// the methods under a mutex, as this class is not accessible by a +// user and the UnitTest class that delegates work to this class does +// proper locking. +class GTEST_API_ UnitTestImpl { + public: + explicit UnitTestImpl(UnitTest* parent); + virtual ~UnitTestImpl(); + + // There are two different ways to register your own TestPartResultReporter. + // You can register your own repoter to listen either only for test results + // from the current thread or for results from all threads. + // By default, each per-thread test result repoter just passes a new + // TestPartResult to the global test result reporter, which registers the + // test part result for the currently running test. + + // Returns the global test part result reporter. + TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); + + // Sets the global test part result reporter. + void SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter); + + // Returns the test part result reporter for the current thread. + TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); + + // Sets the test part result reporter for the current thread. + void SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter); + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const { return !Failed(); } + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const { + return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[i]; + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i) { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[index]; + } + + // Provides access to the event listener list. + TestEventListeners* listeners() { return &listeners_; } + + // Returns the TestResult for the test that's currently running, or + // the TestResult for the ad hoc test if no test is running. + TestResult* current_test_result(); + + // Returns the TestResult for the ad hoc test. + const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } + + // Sets the OS stack trace getter. + // + // Does nothing if the input and the current OS stack trace getter + // are the same; otherwise, deletes the old getter and makes the + // input the current getter. + void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); + + // Returns the current OS stack trace getter if it is not NULL; + // otherwise, creates an OsStackTraceGetter, makes it the current + // getter, and returns it. + OsStackTraceGetterInterface* os_stack_trace_getter(); + + // Returns the current OS stack trace as a String. + // + // The maximum number of stack frames to be included is specified by + // the gtest_stack_trace_depth flag. The skip_count parameter + // specifies the number of top frames to be skipped, which doesn't + // count against the number of frames to be included. + // + // For example, if Foo() calls Bar(), which in turn calls + // CurrentOsStackTraceExceptTop(1), Foo() will be included in the + // trace but Bar() and CurrentOsStackTraceExceptTop() won't. + String CurrentOsStackTraceExceptTop(int skip_count); + + // Finds and returns a TestCase with the given name. If one doesn't + // exist, creates one and returns it. + // + // Arguments: + // + // test_case_name: name of the test case + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase* GetTestCase(const char* test_case_name, + const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Adds a TestInfo to the unit test. + // + // Arguments: + // + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + // test_info: the TestInfo object + void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + TestInfo * test_info) { + // In order to support thread-safe death tests, we need to + // remember the original working directory when the test program + // was first invoked. We cannot do this in RUN_ALL_TESTS(), as + // the user may have changed the current directory before calling + // RUN_ALL_TESTS(). Therefore we capture the current directory in + // AddTestInfo(), which is called to register a TEST or TEST_F + // before main() is reached. + if (original_working_dir_.IsEmpty()) { + original_working_dir_.Set(FilePath::GetCurrentDir()); + GTEST_CHECK_(!original_working_dir_.IsEmpty()) + << "Failed to get the current working directory."; + } + + GetTestCase(test_info->test_case_name(), + test_info->test_case_comment(), + set_up_tc, + tear_down_tc)->AddTestInfo(test_info); + } + +#if GTEST_HAS_PARAM_TEST + // Returns ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { + return parameterized_test_registry_; + } +#endif // GTEST_HAS_PARAM_TEST + + // Sets the TestCase object for the test that's currently running. + void set_current_test_case(TestCase* a_current_test_case) { + current_test_case_ = a_current_test_case; + } + + // Sets the TestInfo object for the test that's currently running. If + // current_test_info is NULL, the assertion results will be stored in + // ad_hoc_test_result_. + void set_current_test_info(TestInfo* a_current_test_info) { + current_test_info_ = a_current_test_info; + } + + // Registers all parameterized tests defined using TEST_P and + // INSTANTIATE_TEST_P, creating regular tests for each test/parameter + // combination. This method can be called more then once; it has + // guards protecting from registering the tests more then once. + // If value-parameterized tests are disabled, RegisterParameterizedTests + // is present but does nothing. + void RegisterParameterizedTests(); + + // Runs all tests in this UnitTest object, prints the result, and + // returns 0 if all tests are successful, or 1 otherwise. If any + // exception is thrown during a test on Windows, this test is + // considered to be failed, but the rest of the tests will still be + // run. (We disable exceptions on Linux and Mac OS X, so the issue + // doesn't apply there.) + int RunAllTests(); + + // Clears the results of all tests, including the ad hoc test. + void ClearResult() { + ForEach(test_cases_, TestCase::ClearTestCaseResult); + ad_hoc_test_result_.Clear(); + } + + enum ReactionToSharding { + HONOR_SHARDING_PROTOCOL, + IGNORE_SHARDING_PROTOCOL + }; + + // Matches the full name of each test against the user-specified + // filter to decide whether the test should run, then records the + // result in each TestCase and TestInfo object. + // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests + // based on sharding variables in the environment. + // Returns the number of tests that should run. + int FilterTests(ReactionToSharding shard_tests); + + // Prints the names of the tests matching the user-specified filter flag. + void ListTestsMatchingFilter(); + + const TestCase* current_test_case() const { return current_test_case_; } + TestInfo* current_test_info() { return current_test_info_; } + const TestInfo* current_test_info() const { return current_test_info_; } + + // Returns the vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector& environments() { return environments_; } + + // Getters for the per-thread Google Test trace stack. + std::vector& gtest_trace_stack() { + return *(gtest_trace_stack_.pointer()); + } + const std::vector& gtest_trace_stack() const { + return gtest_trace_stack_.get(); + } + +#if GTEST_HAS_DEATH_TEST + void InitDeathTestSubprocessControlInfo() { + internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); + } + // Returns a pointer to the parsed --gtest_internal_run_death_test + // flag, or NULL if that flag was not specified. + // This information is useful only in a death test child process. + // Must not be called before a call to InitGoogleTest. + const InternalRunDeathTestFlag* internal_run_death_test_flag() const { + return internal_run_death_test_flag_.get(); + } + + // Returns a pointer to the current death test factory. + internal::DeathTestFactory* death_test_factory() { + return death_test_factory_.get(); + } + + void SuppressTestEventsIfInSubprocess(); + + friend class ReplaceDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + + // Initializes the event listener performing XML output as specified by + // UnitTestOptions. Must not be called before InitGoogleTest. + void ConfigureXmlOutput(); + + // Performs initialization dependent upon flag values obtained in + // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to + // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest + // this function is also called from RunAllTests. Since this function can be + // called more than once, it has to be idempotent. + void PostFlagParsingInit(); + + // Gets the random seed used at the start of the current test iteration. + int random_seed() const { return random_seed_; } + + // Gets the random number generator. + internal::Random* random() { return &random_; } + + // Shuffles all test cases, and the tests within each test case, + // making sure that death tests are still run first. + void ShuffleTests(); + + // Restores the test cases and tests to their order before the first shuffle. + void UnshuffleTests(); + + private: + friend class ::testing::UnitTest; + + // The UnitTest object that owns this implementation object. + UnitTest* const parent_; + + // The working directory when the first TEST() or TEST_F() was + // executed. + internal::FilePath original_working_dir_; + + // The default test part result reporters. + DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; + DefaultPerThreadTestPartResultReporter + default_per_thread_test_part_result_reporter_; + + // Points to (but doesn't own) the global test part result reporter. + TestPartResultReporterInterface* global_test_part_result_repoter_; + + // Protects read and write access to global_test_part_result_reporter_. + internal::Mutex global_test_part_result_reporter_mutex_; + + // Points to (but doesn't own) the per-thread test part result reporter. + internal::ThreadLocal + per_thread_test_part_result_reporter_; + + // The vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector environments_; + + // The vector of TestCases in their original order. It owns the + // elements in the vector. + std::vector test_cases_; + + // Provides a level of indirection for the test case list to allow + // easy shuffling and restoring the test case order. The i-th + // element of this vector is the index of the i-th test case in the + // shuffled order. + std::vector test_case_indices_; + +#if GTEST_HAS_PARAM_TEST + // ParameterizedTestRegistry object used to register value-parameterized + // tests. + internal::ParameterizedTestCaseRegistry parameterized_test_registry_; + + // Indicates whether RegisterParameterizedTests() has been called already. + bool parameterized_tests_registered_; +#endif // GTEST_HAS_PARAM_TEST + + // Index of the last death test case registered. Initially -1. + int last_death_test_case_; + + // This points to the TestCase for the currently running test. It + // changes as Google Test goes through one test case after another. + // When no test is running, this is set to NULL and Google Test + // stores assertion results in ad_hoc_test_result_. Initially NULL. + TestCase* current_test_case_; + + // This points to the TestInfo for the currently running test. It + // changes as Google Test goes through one test after another. When + // no test is running, this is set to NULL and Google Test stores + // assertion results in ad_hoc_test_result_. Initially NULL. + TestInfo* current_test_info_; + + // Normally, a user only writes assertions inside a TEST or TEST_F, + // or inside a function called by a TEST or TEST_F. Since Google + // Test keeps track of which test is current running, it can + // associate such an assertion with the test it belongs to. + // + // If an assertion is encountered when no TEST or TEST_F is running, + // Google Test attributes the assertion result to an imaginary "ad hoc" + // test, and records the result in ad_hoc_test_result_. + TestResult ad_hoc_test_result_; + + // The list of event listeners that can be used to track events inside + // Google Test. + TestEventListeners listeners_; + + // The OS stack trace getter. Will be deleted when the UnitTest + // object is destructed. By default, an OsStackTraceGetter is used, + // but the user can set this field to use a custom getter if that is + // desired. + OsStackTraceGetterInterface* os_stack_trace_getter_; + + // True iff PostFlagParsingInit() has been called. + bool post_flag_parse_init_performed_; + + // The random number seed used at the beginning of the test run. + int random_seed_; + + // Our random number generator. + internal::Random random_; + + // How long the test took to run, in milliseconds. + TimeInMillis elapsed_time_; + +#if GTEST_HAS_DEATH_TEST + // The decomposed components of the gtest_internal_run_death_test flag, + // parsed when RUN_ALL_TESTS is called. + internal::scoped_ptr internal_run_death_test_flag_; + internal::scoped_ptr death_test_factory_; +#endif // GTEST_HAS_DEATH_TEST + + // A per-thread stack of traces created by the SCOPED_TRACE() macro. + internal::ThreadLocal > gtest_trace_stack_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); +}; // class UnitTestImpl + +// Convenience function for accessing the global UnitTest +// implementation object. +inline UnitTestImpl* GetUnitTestImpl() { + return UnitTest::GetInstance()->impl(); +} + +// Internal helper functions for implementing the simple regular +// expression matcher. +GTEST_API_ bool IsInSet(char ch, const char* str); +GTEST_API_ bool IsDigit(char ch); +GTEST_API_ bool IsPunct(char ch); +GTEST_API_ bool IsRepeat(char ch); +GTEST_API_ bool IsWhiteSpace(char ch); +GTEST_API_ bool IsWordChar(char ch); +GTEST_API_ bool IsValidEscape(char ch); +GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); +GTEST_API_ bool ValidateRegex(const char* regex); +GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); +GTEST_API_ bool MatchRepetitionAndRegexAtHead( + bool escaped, char ch, char repeat, const char* regex, const char* str); +GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); + +#if GTEST_HAS_DEATH_TEST + +// Returns the message describing the last system error, regardless of the +// platform. +String GetLastErrnoDescription(); + +#if GTEST_OS_WINDOWS +// Provides leak-safe Windows kernel handle ownership. +class AutoHandle { + public: + AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} + explicit AutoHandle(HANDLE handle) : handle_(handle) {} + + ~AutoHandle() { Reset(); } + + HANDLE Get() const { return handle_; } + void Reset() { Reset(INVALID_HANDLE_VALUE); } + void Reset(HANDLE handle) { + if (handle != handle_) { + if (handle_ != INVALID_HANDLE_VALUE) + ::CloseHandle(handle_); + handle_ = handle; + } + } + + private: + HANDLE handle_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); +}; +#endif // GTEST_OS_WINDOWS + +// Attempts to parse a string into a positive integer pointed to by the +// number parameter. Returns true if that is possible. +// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use +// it here. +template +bool ParseNaturalNumber(const ::std::string& str, Integer* number) { + // Fail fast if the given string does not begin with a digit; + // this bypasses strtoXXX's "optional leading whitespace and plus + // or minus sign" semantics, which are undesirable here. + if (str.empty() || !isdigit(str[0])) { + return false; + } + errno = 0; + + char* end; + // BiggestConvertible is the largest integer type that system-provided + // string-to-number conversion routines can return. +#if GTEST_OS_WINDOWS && !defined(__GNUC__) + // MSVC and C++ Builder define __int64 instead of the standard long long. + typedef unsigned __int64 BiggestConvertible; + const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); +#else + typedef unsigned long long BiggestConvertible; // NOLINT + const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); +#endif // GTEST_OS_WINDOWS && !defined(__GNUC__) + const bool parse_success = *end == '\0' && errno == 0; + + // TODO(vladl@google.com): Convert this to compile time assertion when it is + // available. + GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); + + const Integer result = static_cast(parsed); + if (parse_success && static_cast(result) == parsed) { + *number = result; + return true; + } + return false; +} +#endif // GTEST_HAS_DEATH_TEST + +// TestResult contains some private methods that should be hidden from +// Google Test user but are required for testing. This class allow our tests +// to access them. +// +// This class is supplied only for the purpose of testing Google Test's own +// constructs. Do not use it in user tests, either directly or indirectly. +class TestResultAccessor { + public: + static void RecordProperty(TestResult* test_result, + const TestProperty& property) { + test_result->RecordProperty(property); + } + + static void ClearTestPartResults(TestResult* test_result) { + test_result->ClearTestPartResults(); + } + + static const std::vector& test_part_results( + const TestResult& test_result) { + return test_result.test_part_results(); + } +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_OS_WINDOWS +#define vsnprintf _vsnprintf +#endif // GTEST_OS_WINDOWS + +namespace testing { + +using internal::CountIf; +using internal::ForEach; +using internal::GetElementOr; +using internal::Shuffle; + +// Constants. + +// A test whose test case name or test name matches this filter is +// disabled and not run. +static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; + +// A test case whose name matches this filter is considered a death +// test case and will be run before test cases whose name doesn't +// match this filter. +static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; + +// A test filter that matches everything. +static const char kUniversalFilter[] = "*"; + +// The default output file for XML output. +static const char kDefaultOutputFile[] = "test_detail.xml"; + +// The environment variable name for the test shard index. +static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; +// The environment variable name for the total number of test shards. +static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; +// The environment variable name for the test shard status file. +static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; + +namespace internal { + +// The text used in failure messages to indicate the start of the +// stack trace. +const char kStackTraceMarker[] = "\nStack trace:\n"; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +bool g_help_flag = false; + +} // namespace internal + +GTEST_DEFINE_bool_( + also_run_disabled_tests, + internal::BoolFromGTestEnv("also_run_disabled_tests", false), + "Run disabled tests too, in addition to the tests normally being run."); + +GTEST_DEFINE_bool_( + break_on_failure, + internal::BoolFromGTestEnv("break_on_failure", false), + "True iff a failed assertion should be a debugger break-point."); + +GTEST_DEFINE_bool_( + catch_exceptions, + internal::BoolFromGTestEnv("catch_exceptions", false), + "True iff " GTEST_NAME_ + " should catch exceptions and treat them as test failures."); + +GTEST_DEFINE_string_( + color, + internal::StringFromGTestEnv("color", "auto"), + "Whether to use colors in the output. Valid values: yes, no, " + "and auto. 'auto' means to use colors if the output is " + "being sent to a terminal and the TERM environment variable " + "is set to xterm, xterm-color, xterm-256color, linux or cygwin."); + +GTEST_DEFINE_string_( + filter, + internal::StringFromGTestEnv("filter", kUniversalFilter), + "A colon-separated list of glob (not regex) patterns " + "for filtering the tests to run, optionally followed by a " + "'-' and a : separated list of negative patterns (tests to " + "exclude). A test is run if it matches one of the positive " + "patterns and does not match any of the negative patterns."); + +GTEST_DEFINE_bool_(list_tests, false, + "List all tests without running them."); + +GTEST_DEFINE_string_( + output, + internal::StringFromGTestEnv("output", ""), + "A format (currently must be \"xml\"), optionally followed " + "by a colon and an output file name or directory. A directory " + "is indicated by a trailing pathname separator. " + "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " + "If a directory is specified, output files will be created " + "within that directory, with file-names based on the test " + "executable's name and, if necessary, made unique by adding " + "digits."); + +GTEST_DEFINE_bool_( + print_time, + internal::BoolFromGTestEnv("print_time", true), + "True iff " GTEST_NAME_ + " should display elapsed time in text output."); + +GTEST_DEFINE_int32_( + random_seed, + internal::Int32FromGTestEnv("random_seed", 0), + "Random number seed to use when shuffling test orders. Must be in range " + "[1, 99999], or 0 to use a seed based on the current time."); + +GTEST_DEFINE_int32_( + repeat, + internal::Int32FromGTestEnv("repeat", 1), + "How many times to repeat each test. Specify a negative number " + "for repeating forever. Useful for shaking out flaky tests."); + +GTEST_DEFINE_bool_( + show_internal_stack_frames, false, + "True iff " GTEST_NAME_ " should include internal stack frames when " + "printing test failure stack traces."); + +GTEST_DEFINE_bool_( + shuffle, + internal::BoolFromGTestEnv("shuffle", false), + "True iff " GTEST_NAME_ + " should randomize tests' order on every run."); + +GTEST_DEFINE_int32_( + stack_trace_depth, + internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), + "The maximum number of stack frames to print when an " + "assertion fails. The valid range is 0 through 100, inclusive."); + +GTEST_DEFINE_bool_( + throw_on_failure, + internal::BoolFromGTestEnv("throw_on_failure", false), + "When this flag is specified, a failed assertion will throw an exception " + "if exceptions are enabled or exit the program with a non-zero code " + "otherwise."); + +namespace internal { + +// Generates a random number from [0, range), using a Linear +// Congruential Generator (LCG). Crashes if 'range' is 0 or greater +// than kMaxRange. +UInt32 Random::Generate(UInt32 range) { + // These constants are the same as are used in glibc's rand(3). + state_ = (1103515245U*state_ + 12345U) % kMaxRange; + + GTEST_CHECK_(range > 0) + << "Cannot generate a number in the range [0, 0)."; + GTEST_CHECK_(range <= kMaxRange) + << "Generation of a number in [0, " << range << ") was requested, " + << "but this can only generate numbers in [0, " << kMaxRange << ")."; + + // Converting via modulus introduces a bit of downward bias, but + // it's simple, and a linear congruential generator isn't too good + // to begin with. + return state_ % range; +} + +// GTestIsInitialized() returns true iff the user has initialized +// Google Test. Useful for catching the user mistake of not initializing +// Google Test before calling RUN_ALL_TESTS(). +// +// A user must call testing::InitGoogleTest() to initialize Google +// Test. g_init_gtest_count is set to the number of times +// InitGoogleTest() has been called. We don't protect this variable +// under a mutex as it is only accessed in the main thread. +int g_init_gtest_count = 0; +static bool GTestIsInitialized() { return g_init_gtest_count != 0; } + +// Iterates over a vector of TestCases, keeping a running sum of the +// results of calling a given int-returning method on each. +// Returns the sum. +static int SumOverTestCaseList(const std::vector& case_list, + int (TestCase::*method)() const) { + int sum = 0; + for (size_t i = 0; i < case_list.size(); i++) { + sum += (case_list[i]->*method)(); + } + return sum; +} + +// Returns true iff the test case passed. +static bool TestCasePassed(const TestCase* test_case) { + return test_case->should_run() && test_case->Passed(); +} + +// Returns true iff the test case failed. +static bool TestCaseFailed(const TestCase* test_case) { + return test_case->should_run() && test_case->Failed(); +} + +// Returns true iff test_case contains at least one test that should +// run. +static bool ShouldRunTestCase(const TestCase* test_case) { + return test_case->should_run(); +} + +// AssertHelper constructor. +AssertHelper::AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message) + : data_(new AssertHelperData(type, file, line, message)) { +} + +AssertHelper::~AssertHelper() { + delete data_; +} + +// Message assignment, for assertion streaming support. +void AssertHelper::operator=(const Message& message) const { + UnitTest::GetInstance()-> + AddTestPartResult(data_->type, data_->file, data_->line, + AppendUserMessage(data_->message, message), + UnitTest::GetInstance()->impl() + ->CurrentOsStackTraceExceptTop(1) + // Skips the stack frame for this function itself. + ); // NOLINT +} + +// Mutex for linked pointers. +GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// Application pathname gotten in InitGoogleTest. +String g_executable_path; + +// Returns the current application's name, removing directory path if that +// is present. +FilePath GetCurrentExecutableName() { + FilePath result; + +#if GTEST_OS_WINDOWS + result.Set(FilePath(g_executable_path).RemoveExtension("exe")); +#else + result.Set(FilePath(g_executable_path)); +#endif // GTEST_OS_WINDOWS + + return result.RemoveDirectoryName(); +} + +// Functions for processing the gtest_output flag. + +// Returns the output format, or "" for normal printed output. +String UnitTestOptions::GetOutputFormat() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) return String(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + return (colon == NULL) ? + String(gtest_output_flag) : + String(gtest_output_flag, colon - gtest_output_flag); +} + +// Returns the name of the requested output file, or the default if none +// was explicitly specified. +String UnitTestOptions::GetAbsolutePathToOutputFile() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) + return String(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + if (colon == NULL) + return String(internal::FilePath::ConcatPaths( + internal::FilePath( + UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(kDefaultOutputFile)).ToString() ); + + internal::FilePath output_name(colon + 1); + if (!output_name.IsAbsolutePath()) + // TODO(wan@google.com): on Windows \some\path is not an absolute + // path (as its meaning depends on the current drive), yet the + // following logic for turning it into an absolute path is wrong. + // Fix it. + output_name = internal::FilePath::ConcatPaths( + internal::FilePath(UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(colon + 1)); + + if (!output_name.IsDirectory()) + return output_name.ToString(); + + internal::FilePath result(internal::FilePath::GenerateUniqueFileName( + output_name, internal::GetCurrentExecutableName(), + GetOutputFormat().c_str())); + return result.ToString(); +} + +// Returns true iff the wildcard pattern matches the string. The +// first ':' or '\0' character in pattern marks the end of it. +// +// This recursive algorithm isn't very efficient, but is clear and +// works well enough for matching test names, which are short. +bool UnitTestOptions::PatternMatchesString(const char *pattern, + const char *str) { + switch (*pattern) { + case '\0': + case ':': // Either ':' or '\0' marks the end of the pattern. + return *str == '\0'; + case '?': // Matches any single character. + return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); + case '*': // Matches any string (possibly empty) of characters. + return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || + PatternMatchesString(pattern + 1, str); + default: // Non-special character. Matches itself. + return *pattern == *str && + PatternMatchesString(pattern + 1, str + 1); + } +} + +bool UnitTestOptions::MatchesFilter(const String& name, const char* filter) { + const char *cur_pattern = filter; + for (;;) { + if (PatternMatchesString(cur_pattern, name.c_str())) { + return true; + } + + // Finds the next pattern in the filter. + cur_pattern = strchr(cur_pattern, ':'); + + // Returns if no more pattern can be found. + if (cur_pattern == NULL) { + return false; + } + + // Skips the pattern separater (the ':' character). + cur_pattern++; + } +} + +// TODO(keithray): move String function implementations to gtest-string.cc. + +// Returns true iff the user-specified filter matches the test case +// name and the test name. +bool UnitTestOptions::FilterMatchesTest(const String &test_case_name, + const String &test_name) { + const String& full_name = String::Format("%s.%s", + test_case_name.c_str(), + test_name.c_str()); + + // Split --gtest_filter at '-', if there is one, to separate into + // positive filter and negative filter portions + const char* const p = GTEST_FLAG(filter).c_str(); + const char* const dash = strchr(p, '-'); + String positive; + String negative; + if (dash == NULL) { + positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter + negative = String(""); + } else { + positive = String(p, dash - p); // Everything up to the dash + negative = String(dash+1); // Everything after the dash + if (positive.empty()) { + // Treat '-test1' as the same as '*-test1' + positive = kUniversalFilter; + } + } + + // A filter is a colon-separated list of patterns. It matches a + // test if any pattern in it matches the test. + return (MatchesFilter(full_name, positive.c_str()) && + !MatchesFilter(full_name, negative.c_str())); +} + +#if GTEST_OS_WINDOWS +// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the +// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. +// This function is useful as an __except condition. +int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { + // Google Test should handle an exception if: + // 1. the user wants it to, AND + // 2. this is not a breakpoint exception. + return (GTEST_FLAG(catch_exceptions) && + exception_code != EXCEPTION_BREAKPOINT) ? + EXCEPTION_EXECUTE_HANDLER : + EXCEPTION_CONTINUE_SEARCH; +} +#endif // GTEST_OS_WINDOWS + +} // namespace internal + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. Intercepts only failures from the current thread. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + TestPartResultArray* result) + : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), + result_(result) { + Init(); +} + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + InterceptMode intercept_mode, TestPartResultArray* result) + : intercept_mode_(intercept_mode), + result_(result) { + Init(); +} + +void ScopedFakeTestPartResultReporter::Init() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + old_reporter_ = impl->GetGlobalTestPartResultReporter(); + impl->SetGlobalTestPartResultReporter(this); + } else { + old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); + impl->SetTestPartResultReporterForCurrentThread(this); + } +} + +// The d'tor restores the test part result reporter used by Google Test +// before. +ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + impl->SetGlobalTestPartResultReporter(old_reporter_); + } else { + impl->SetTestPartResultReporterForCurrentThread(old_reporter_); + } +} + +// Increments the test part result count and remembers the result. +// This method is from the TestPartResultReporterInterface interface. +void ScopedFakeTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + result_->Append(result); +} + +namespace internal { + +// Returns the type ID of ::testing::Test. We should always call this +// instead of GetTypeId< ::testing::Test>() to get the type ID of +// testing::Test. This is to work around a suspected linker bug when +// using Google Test as a framework on Mac OS X. The bug causes +// GetTypeId< ::testing::Test>() to return different values depending +// on whether the call is from the Google Test framework itself or +// from user test code. GetTestTypeId() is guaranteed to always +// return the same value, as it always calls GetTypeId<>() from the +// gtest.cc, which is within the Google Test framework. +TypeId GetTestTypeId() { + return GetTypeId(); +} + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); + +// This predicate-formatter checks that 'results' contains a test part +// failure of the given type and that the failure message contains the +// given substring. +AssertionResult HasOneFailure(const char* /* results_expr */, + const char* /* type_expr */, + const char* /* substr_expr */, + const TestPartResultArray& results, + TestPartResult::Type type, + const char* substr) { + const String expected(type == TestPartResult::kFatalFailure ? + "1 fatal failure" : + "1 non-fatal failure"); + Message msg; + if (results.size() != 1) { + msg << "Expected: " << expected << "\n" + << " Actual: " << results.size() << " failures"; + for (int i = 0; i < results.size(); i++) { + msg << "\n" << results.GetTestPartResult(i); + } + return AssertionFailure(msg); + } + + const TestPartResult& r = results.GetTestPartResult(0); + if (r.type() != type) { + msg << "Expected: " << expected << "\n" + << " Actual:\n" + << r; + return AssertionFailure(msg); + } + + if (strstr(r.message(), substr) == NULL) { + msg << "Expected: " << expected << " containing \"" + << substr << "\"\n" + << " Actual:\n" + << r; + return AssertionFailure(msg); + } + + return AssertionSuccess(); +} + +// The constructor of SingleFailureChecker remembers where to look up +// test part results, what type of failure we expect, and what +// substring the failure message should contain. +SingleFailureChecker:: SingleFailureChecker( + const TestPartResultArray* results, + TestPartResult::Type type, + const char* substr) + : results_(results), + type_(type), + substr_(substr) {} + +// The destructor of SingleFailureChecker verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +SingleFailureChecker::~SingleFailureChecker() { + EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_.c_str()); +} + +DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultGlobalTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->current_test_result()->AddTestPartResult(result); + unit_test_->listeners()->repeater()->OnTestPartResult(result); +} + +DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); +} + +// Returns the global test part result reporter. +TestPartResultReporterInterface* +UnitTestImpl::GetGlobalTestPartResultReporter() { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + return global_test_part_result_repoter_; +} + +// Sets the global test part result reporter. +void UnitTestImpl::SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter) { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + global_test_part_result_repoter_ = reporter; +} + +// Returns the test part result reporter for the current thread. +TestPartResultReporterInterface* +UnitTestImpl::GetTestPartResultReporterForCurrentThread() { + return per_thread_test_part_result_reporter_.get(); +} + +// Sets the test part result reporter for the current thread. +void UnitTestImpl::SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter) { + per_thread_test_part_result_reporter_.set(reporter); +} + +// Gets the number of successful test cases. +int UnitTestImpl::successful_test_case_count() const { + return CountIf(test_cases_, TestCasePassed); +} + +// Gets the number of failed test cases. +int UnitTestImpl::failed_test_case_count() const { + return CountIf(test_cases_, TestCaseFailed); +} + +// Gets the number of all test cases. +int UnitTestImpl::total_test_case_count() const { + return static_cast(test_cases_.size()); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTestImpl::test_case_to_run_count() const { + return CountIf(test_cases_, ShouldRunTestCase); +} + +// Gets the number of successful tests. +int UnitTestImpl::successful_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); +} + +// Gets the number of failed tests. +int UnitTestImpl::failed_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); +} + +// Gets the number of disabled tests. +int UnitTestImpl::disabled_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); +} + +// Gets the number of all tests. +int UnitTestImpl::total_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); +} + +// Gets the number of tests that should run. +int UnitTestImpl::test_to_run_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); +} + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// CurrentOsStackTraceExceptTop(1), Foo() will be included in the +// trace but Bar() and CurrentOsStackTraceExceptTop() won't. +String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { + (void)skip_count; + return String(""); +} + +// Returns the current time in milliseconds. +TimeInMillis GetTimeInMillis() { +#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) + // Difference between 1970-01-01 and 1601-01-01 in milliseconds. + // http://analogous.blogspot.com/2005/04/epoch.html + const TimeInMillis kJavaEpochToWinFileTimeDelta = + static_cast(116444736UL) * 100000UL; + const DWORD kTenthMicrosInMilliSecond = 10000; + + SYSTEMTIME now_systime; + FILETIME now_filetime; + ULARGE_INTEGER now_int64; + // TODO(kenton@google.com): Shouldn't this just use + // GetSystemTimeAsFileTime()? + GetSystemTime(&now_systime); + if (SystemTimeToFileTime(&now_systime, &now_filetime)) { + now_int64.LowPart = now_filetime.dwLowDateTime; + now_int64.HighPart = now_filetime.dwHighDateTime; + now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - + kJavaEpochToWinFileTimeDelta; + return now_int64.QuadPart; + } + return 0; +#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ + __timeb64 now; +#ifdef _MSC_VER + // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 + // (deprecated function) there. + // TODO(kenton@google.com): Use GetTickCount()? Or use + // SystemTimeToFileTime() +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4996) // Temporarily disables warning 4996. + _ftime64(&now); +#pragma warning(pop) // Restores the warning state. +#else + _ftime64(&now); +#endif // _MSC_VER + return static_cast(now.time) * 1000 + now.millitm; +#elif GTEST_HAS_GETTIMEOFDAY_ + struct timeval now; + gettimeofday(&now, NULL); + return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; +#else +#error "Don't know how to get the current time on your system." +#endif +} + +// Utilities + +// class String + +// Returns the input enclosed in double quotes if it's not NULL; +// otherwise returns "(null)". For example, "\"Hello\"" is returned +// for input "Hello". +// +// This is useful for printing a C string in the syntax of a literal. +// +// Known issue: escape sequences are not handled yet. +String String::ShowCStringQuoted(const char* c_str) { + return c_str ? String::Format("\"%s\"", c_str) : String("(null)"); +} + +// Copies at most length characters from str into a newly-allocated +// piece of memory of size length+1. The memory is allocated with new[]. +// A terminating null byte is written to the memory, and a pointer to it +// is returned. If str is NULL, NULL is returned. +static char* CloneString(const char* str, size_t length) { + if (str == NULL) { + return NULL; + } else { + char* const clone = new char[length + 1]; + posix::StrNCpy(clone, str, length); + clone[length] = '\0'; + return clone; + } +} + +// Clones a 0-terminated C string, allocating memory using new. The +// caller is responsible for deleting[] the return value. Returns the +// cloned string, or NULL if the input is NULL. +const char * String::CloneCString(const char* c_str) { + return (c_str == NULL) ? + NULL : CloneString(c_str, strlen(c_str)); +} + +#if GTEST_OS_WINDOWS_MOBILE +// Creates a UTF-16 wide string from the given ANSI string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the wide string, or NULL if the +// input is NULL. +LPCWSTR String::AnsiToUtf16(const char* ansi) { + if (!ansi) return NULL; + const int length = strlen(ansi); + const int unicode_length = + MultiByteToWideChar(CP_ACP, 0, ansi, length, + NULL, 0); + WCHAR* unicode = new WCHAR[unicode_length + 1]; + MultiByteToWideChar(CP_ACP, 0, ansi, length, + unicode, unicode_length); + unicode[unicode_length] = 0; + return unicode; +} + +// Creates an ANSI string from the given wide string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the ANSI string, or NULL if the +// input is NULL. +const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { + if (!utf16_str) return NULL; + const int ansi_length = + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + NULL, 0, NULL, NULL); + char* ansi = new char[ansi_length + 1]; + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + ansi, ansi_length, NULL, NULL); + ansi[ansi_length] = 0; + return ansi; +} + +#endif // GTEST_OS_WINDOWS_MOBILE + +// Compares two C strings. Returns true iff they have the same content. +// +// Unlike strcmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CStringEquals(const char * lhs, const char * rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + + return strcmp(lhs, rhs) == 0; +} + +#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +// Converts an array of wide chars to a narrow string using the UTF-8 +// encoding, and streams the result to the given Message object. +static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, + Message* msg) { + // TODO(wan): consider allowing a testing::String object to + // contain '\0'. This will make it behave more like std::string, + // and will allow ToUtf8String() to return the correct encoding + // for '\0' s.t. we can get rid of the conditional here (and in + // several other places). + for (size_t i = 0; i != length; ) { // NOLINT + if (wstr[i] != L'\0') { + *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); + while (i != length && wstr[i] != L'\0') + i++; + } else { + *msg << '\0'; + i++; + } + } +} + +#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +} // namespace internal + +#if GTEST_HAS_STD_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::std::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +namespace internal { + +// Formats a value to be used in a failure message. + +// For a char value, we print it as a C++ char literal and as an +// unsigned integer (both in decimal and in hexadecimal). +String FormatForFailureMessage(char ch) { + const unsigned int ch_as_uint = ch; + // A String object cannot contain '\0', so we print "\\0" when ch is + // '\0'. + return String::Format("'%s' (%u, 0x%X)", + ch ? String::Format("%c", ch).c_str() : "\\0", + ch_as_uint, ch_as_uint); +} + +// For a wchar_t value, we print it as a C++ wchar_t literal and as an +// unsigned integer (both in decimal and in hexidecimal). +String FormatForFailureMessage(wchar_t wchar) { + // The C++ standard doesn't specify the exact size of the wchar_t + // type. It just says that it shall have the same size as another + // integral type, called its underlying type. + // + // Therefore, in order to print a wchar_t value in the numeric form, + // we first convert it to the largest integral type (UInt64) and + // then print the converted value. + // + // We use streaming to print the value as "%llu" doesn't work + // correctly with MSVC 7.1. + const UInt64 wchar_as_uint64 = wchar; + Message msg; + // A String object cannot contain '\0', so we print "\\0" when wchar is + // L'\0'. + char buffer[32]; // CodePointToUtf8 requires a buffer that big. + msg << "L'" + << (wchar ? CodePointToUtf8(static_cast(wchar), buffer) : "\\0") + << "' (" << wchar_as_uint64 << ", 0x" << ::std::setbase(16) + << wchar_as_uint64 << ")"; + return msg.GetString(); +} + +} // namespace internal + +// AssertionResult constructors. +// Used in EXPECT_TRUE/FALSE(assertion_result). +AssertionResult::AssertionResult(const AssertionResult& other) + : success_(other.success_), + message_(other.message_.get() != NULL ? + new internal::String(*other.message_) : + static_cast(NULL)) { +} + +// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. +AssertionResult AssertionResult::operator!() const { + AssertionResult negation(!success_); + if (message_.get() != NULL) + negation << *message_; + return negation; +} + +// Makes a successful assertion result. +AssertionResult AssertionSuccess() { + return AssertionResult(true); +} + +// Makes a failed assertion result. +AssertionResult AssertionFailure() { + return AssertionResult(false); +} + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << message. +AssertionResult AssertionFailure(const Message& message) { + return AssertionFailure() << message; +} + +namespace internal { + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const String& expected_value, + const String& actual_value, + bool ignoring_case) { + Message msg; + msg << "Value of: " << actual_expression; + if (actual_value != actual_expression) { + msg << "\n Actual: " << actual_value; + } + + msg << "\nExpected: " << expected_expression; + if (ignoring_case) { + msg << " (ignoring case)"; + } + if (expected_value != expected_expression) { + msg << "\nWhich is: " << expected_value; + } + + return AssertionFailure(msg); +} + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +String GetBoolAssertionFailureMessage(const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value) { + const char* actual_message = assertion_result.message(); + Message msg; + msg << "Value of: " << expression_text + << "\n Actual: " << actual_predicate_value; + if (actual_message[0] != '\0') + msg << " (" << actual_message << ")"; + msg << "\nExpected: " << expected_predicate_value; + return msg.GetString(); +} + +// Helper function for implementing ASSERT_NEAR. +AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error) { + const double diff = fabs(val1 - val2); + if (diff <= abs_error) return AssertionSuccess(); + + // TODO(wan): do not print the value of an expression if it's + // already a literal. + Message msg; + msg << "The difference between " << expr1 << " and " << expr2 + << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ", and\n" + << abs_error_expr << " evaluates to " << abs_error << "."; + return AssertionFailure(msg); +} + + +// Helper template for implementing FloatLE() and DoubleLE(). +template +AssertionResult FloatingPointLE(const char* expr1, + const char* expr2, + RawType val1, + RawType val2) { + // Returns success if val1 is less than val2, + if (val1 < val2) { + return AssertionSuccess(); + } + + // or if val1 is almost equal to val2. + const FloatingPoint lhs(val1), rhs(val2); + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + // Note that the above two checks will both fail if either val1 or + // val2 is NaN, as the IEEE floating-point standard requires that + // any predicate involving a NaN must return false. + + StrStream val1_ss; + val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val1; + + StrStream val2_ss; + val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val2; + + Message msg; + msg << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" + << " Actual: " << StrStreamToString(&val1_ss) << " vs " + << StrStreamToString(&val2_ss); + + return AssertionFailure(msg); +} + +} // namespace internal + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +namespace internal { + +// The helper function for {ASSERT|EXPECT}_EQ with int or enum +// arguments. +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + if (expected == actual) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here +// just to avoid copy-and-paste of similar code. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + BiggestInt val1, BiggestInt val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + Message msg;\ + msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + return AssertionFailure(msg);\ + }\ +} + +// Implements the helper function for {ASSERT|EXPECT}_NE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(NE, !=) +// Implements the helper function for {ASSERT|EXPECT}_LE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LE, <=) +// Implements the helper function for {ASSERT|EXPECT}_LT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LT, < ) +// Implements the helper function for {ASSERT|EXPECT}_GE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GE, >=) +// Implements the helper function for {ASSERT|EXPECT}_GT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GT, > ) + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowCStringQuoted(expected), + String::ShowCStringQuoted(actual), + false); +} + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CaseInsensitiveCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowCStringQuoted(expected), + String::ShowCStringQuoted(actual), + true); +} + +// The helper function for {ASSERT|EXPECT}_STRNE. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + return AssertionFailure(msg); + } +} + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CaseInsensitiveCStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << ") (ignoring case), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + return AssertionFailure(msg); + } +} + +} // namespace internal + +namespace { + +// Helper functions for implementing IsSubString() and IsNotSubstring(). + +// This group of overloaded functions return true iff needle is a +// substring of haystack. NULL is considered a substring of itself +// only. + +bool IsSubstringPred(const char* needle, const char* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return strstr(haystack, needle) != NULL; +} + +bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return wcsstr(haystack, needle) != NULL; +} + +// StringType here can be either ::std::string or ::std::wstring. +template +bool IsSubstringPred(const StringType& needle, + const StringType& haystack) { + return haystack.find(needle) != StringType::npos; +} + +// This function implements either IsSubstring() or IsNotSubstring(), +// depending on the value of the expected_to_be_substring parameter. +// StringType here can be const char*, const wchar_t*, ::std::string, +// or ::std::wstring. +template +AssertionResult IsSubstringImpl( + bool expected_to_be_substring, + const char* needle_expr, const char* haystack_expr, + const StringType& needle, const StringType& haystack) { + if (IsSubstringPred(needle, haystack) == expected_to_be_substring) + return AssertionSuccess(); + + const bool is_wide_string = sizeof(needle[0]) > 1; + const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; + return AssertionFailure( + Message() + << "Value of: " << needle_expr << "\n" + << " Actual: " << begin_string_quote << needle << "\"\n" + << "Expected: " << (expected_to_be_substring ? "" : "not ") + << "a substring of " << haystack_expr << "\n" + << "Which is: " << begin_string_quote << haystack << "\""); +} + +} // namespace + +// IsSubstring() and IsNotSubstring() check whether needle is a +// substring of haystack (NULL is considered a substring of itself +// only), and return an appropriate error message when they fail. + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +#if GTEST_HAS_STD_WSTRING +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +#if GTEST_OS_WINDOWS + +namespace { + +// Helper function for IsHRESULT{SuccessFailure} predicates +AssertionResult HRESULTFailureHelper(const char* expr, + const char* expected, + long hr) { // NOLINT +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't support FormatMessage. + const char error_text[] = ""; +#else + // Looks up the human-readable system message for the HRESULT code + // and since we're not passing any params to FormatMessage, we don't + // want inserts expanded. + const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS; + const DWORD kBufSize = 4096; // String::Format can't exceed this length. + // Gets the system's human readable message string for this HRESULT. + char error_text[kBufSize] = { '\0' }; + DWORD message_length = ::FormatMessageA(kFlags, + 0, // no source, we're asking system + hr, // the error + 0, // no line width restrictions + error_text, // output buffer + kBufSize, // buf size + NULL); // no arguments for inserts + // Trims tailing white space (FormatMessage leaves a trailing cr-lf) + for (; message_length && isspace(error_text[message_length - 1]); + --message_length) { + error_text[message_length - 1] = '\0'; + } +#endif // GTEST_OS_WINDOWS_MOBILE + + const String error_hex(String::Format("0x%08X ", hr)); + Message msg; + msg << "Expected: " << expr << " " << expected << ".\n" + << " Actual: " << error_hex << error_text << "\n"; + + return ::testing::AssertionFailure(msg); +} + +} // namespace + +AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT + if (SUCCEEDED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "succeeds", hr); +} + +AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT + if (FAILED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "fails", hr); +} + +#endif // GTEST_OS_WINDOWS + +// Utility functions for encoding Unicode text (wide strings) in +// UTF-8. + +// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 +// like this: +// +// Code-point length Encoding +// 0 - 7 bits 0xxxxxxx +// 8 - 11 bits 110xxxxx 10xxxxxx +// 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx +// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +// The maximum code-point a one-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; + +// The maximum code-point a two-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; + +// The maximum code-point a three-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; + +// The maximum code-point a four-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; + +// Chops off the n lowest bits from a bit pattern. Returns the n +// lowest bits. As a side effect, the original bit pattern will be +// shifted to the right by n bits. +inline UInt32 ChopLowBits(UInt32* bits, int n) { + const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); + *bits >>= n; + return low_bits; +} + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// The output buffer str must containt at least 32 characters. +// The function returns the address of the output buffer. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. +char* CodePointToUtf8(UInt32 code_point, char* str) { + if (code_point <= kMaxCodePoint1) { + str[1] = '\0'; + str[0] = static_cast(code_point); // 0xxxxxxx + } else if (code_point <= kMaxCodePoint2) { + str[2] = '\0'; + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xC0 | code_point); // 110xxxxx + } else if (code_point <= kMaxCodePoint3) { + str[3] = '\0'; + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xE0 | code_point); // 1110xxxx + } else if (code_point <= kMaxCodePoint4) { + str[4] = '\0'; + str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xF0 | code_point); // 11110xxx + } else { + // The longest string String::Format can produce when invoked + // with these parameters is 28 character long (not including + // the terminating nul character). We are asking for 32 character + // buffer just in case. This is also enough for strncpy to + // null-terminate the destination string. + posix::StrNCpy( + str, String::Format("(Invalid Unicode 0x%X)", code_point).c_str(), 32); + str[31] = '\0'; // Makes sure no change in the format to strncpy leaves + // the result unterminated. + } + return str; +} + +// The following two functions only make sense if the the system +// uses UTF-16 for wide string encoding. All supported systems +// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. + +// Determines if the arguments constitute UTF-16 surrogate pair +// and thus should be combined into a single Unicode code point +// using CreateCodePointFromUtf16SurrogatePair. +inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { + return sizeof(wchar_t) == 2 && + (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; +} + +// Creates a Unicode code point from UTF16 surrogate pair. +inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, + wchar_t second) { + const UInt32 mask = (1 << 10) - 1; + return (sizeof(wchar_t) == 2) ? + (((first & mask) << 10) | (second & mask)) + 0x10000 : + // This function should not be called when the condition is + // false, but we provide a sensible default in case it is. + static_cast(first); +} + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +String WideStringToUtf8(const wchar_t* str, int num_chars) { + if (num_chars == -1) + num_chars = static_cast(wcslen(str)); + + StrStream stream; + for (int i = 0; i < num_chars; ++i) { + UInt32 unicode_code_point; + + if (str[i] == L'\0') { + break; + } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { + unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], + str[i + 1]); + i++; + } else { + unicode_code_point = static_cast(str[i]); + } + + char buffer[32]; // CodePointToUtf8 requires a buffer this big. + stream << CodePointToUtf8(unicode_code_point, buffer); + } + return StrStreamToString(&stream); +} + +// Converts a wide C string to a String using the UTF-8 encoding. +// NULL will be converted to "(null)". +String String::ShowWideCString(const wchar_t * wide_c_str) { + if (wide_c_str == NULL) return String("(null)"); + + return String(internal::WideStringToUtf8(wide_c_str, -1).c_str()); +} + +// Similar to ShowWideCString(), except that this function encloses +// the converted string in double quotes. +String String::ShowWideCStringQuoted(const wchar_t* wide_c_str) { + if (wide_c_str == NULL) return String("(null)"); + + return String::Format("L\"%s\"", + String::ShowWideCString(wide_c_str).c_str()); +} + +// Compares two wide C strings. Returns true iff they have the same +// content. +// +// Unlike wcscmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + + return wcscmp(lhs, rhs) == 0; +} + +// Helper function for *_STREQ on wide strings. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual) { + if (String::WideCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + String::ShowWideCStringQuoted(expected), + String::ShowWideCStringQuoted(actual), + false); +} + +// Helper function for *_STRNE on wide strings. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2) { + if (!String::WideCStringEquals(s1, s2)) { + return AssertionSuccess(); + } + + Message msg; + msg << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: " + << String::ShowWideCStringQuoted(s1) + << " vs " << String::ShowWideCStringQuoted(s2); + return AssertionFailure(msg); +} + +// Compares two C strings, ignoring case. Returns true iff they have +// the same content. +// +// Unlike strcasecmp(), this function can handle NULL argument(s). A +// NULL C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { + if (lhs == NULL) + return rhs == NULL; + if (rhs == NULL) + return false; + return posix::StrCaseCmp(lhs, rhs) == 0; +} + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. +bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + +#if GTEST_OS_WINDOWS + return _wcsicmp(lhs, rhs) == 0; +#elif GTEST_OS_LINUX + return wcscasecmp(lhs, rhs) == 0; +#else + // Mac OS X and Cygwin don't define wcscasecmp. Other unknown OSes + // may not define it either. + wint_t left, right; + do { + left = towlower(*lhs++); + right = towlower(*rhs++); + } while (left && left == right); + return left == right; +#endif // OS selector +} + +// Compares this with another String. +// Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 +// if this is greater than rhs. +int String::Compare(const String & rhs) const { + const char* const lhs_c_str = c_str(); + const char* const rhs_c_str = rhs.c_str(); + + if (lhs_c_str == NULL) { + return rhs_c_str == NULL ? 0 : -1; // NULL < anything except NULL + } else if (rhs_c_str == NULL) { + return 1; + } + + const size_t shorter_str_len = + length() <= rhs.length() ? length() : rhs.length(); + for (size_t i = 0; i != shorter_str_len; i++) { + if (lhs_c_str[i] < rhs_c_str[i]) { + return -1; + } else if (lhs_c_str[i] > rhs_c_str[i]) { + return 1; + } + } + return (length() < rhs.length()) ? -1 : + (length() > rhs.length()) ? 1 : 0; +} + +// Returns true iff this String ends with the given suffix. *Any* +// String is considered to end with a NULL or empty suffix. +bool String::EndsWith(const char* suffix) const { + if (suffix == NULL || CStringEquals(suffix, "")) return true; + + if (c_str() == NULL) return false; + + const size_t this_len = strlen(c_str()); + const size_t suffix_len = strlen(suffix); + return (this_len >= suffix_len) && + CStringEquals(c_str() + this_len - suffix_len, suffix); +} + +// Returns true iff this String ends with the given suffix, ignoring case. +// Any String is considered to end with a NULL or empty suffix. +bool String::EndsWithCaseInsensitive(const char* suffix) const { + if (suffix == NULL || CStringEquals(suffix, "")) return true; + + if (c_str() == NULL) return false; + + const size_t this_len = strlen(c_str()); + const size_t suffix_len = strlen(suffix); + return (this_len >= suffix_len) && + CaseInsensitiveCStringEquals(c_str() + this_len - suffix_len, suffix); +} + +// Formats a list of arguments to a String, using the same format +// spec string as for printf. +// +// We do not use the StringPrintf class as it is not universally +// available. +// +// The result is limited to 4096 characters (including the tailing 0). +// If 4096 characters are not enough to format the input, or if +// there's an error, "" is +// returned. +String String::Format(const char * format, ...) { + va_list args; + va_start(args, format); + + char buffer[4096]; + const int kBufferSize = sizeof(buffer)/sizeof(buffer[0]); + + // MSVC 8 deprecates vsnprintf(), so we want to suppress warning + // 4996 (deprecated function) there. +#ifdef _MSC_VER // We are using MSVC. +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4996) // Temporarily disables warning 4996. + const int size = vsnprintf(buffer, kBufferSize, format, args); +#pragma warning(pop) // Restores the warning state. +#else // We are not using MSVC. + const int size = vsnprintf(buffer, kBufferSize, format, args); +#endif // _MSC_VER + va_end(args); + + // vsnprintf()'s behavior is not portable. When the buffer is not + // big enough, it returns a negative value in MSVC, and returns the + // needed buffer size on Linux. When there is an output error, it + // always returns a negative value. For simplicity, we lump the two + // error cases together. + if (size < 0 || size >= kBufferSize) { + return String(""); + } else { + return String(buffer, size); + } +} + +// Converts the buffer in a StrStream to a String, converting NUL +// bytes to "\\0" along the way. +String StrStreamToString(StrStream* ss) { + const ::std::string& str = ss->str(); + const char* const start = str.c_str(); + const char* const end = start + str.length(); + + // We need to use a helper StrStream to do this transformation + // because String doesn't support push_back(). + StrStream helper; + for (const char* ch = start; ch != end; ++ch) { + if (*ch == '\0') { + helper << "\\0"; // Replaces NUL with "\\0"; + } else { + helper.put(*ch); + } + } + + return String(helper.str().c_str()); +} + +// Appends the user-supplied message to the Google-Test-generated message. +String AppendUserMessage(const String& gtest_msg, + const Message& user_msg) { + // Appends the user message if it's non-empty. + const String user_msg_string = user_msg.GetString(); + if (user_msg_string.empty()) { + return gtest_msg; + } + + Message msg; + msg << gtest_msg << "\n" << user_msg_string; + + return msg.GetString(); +} + +} // namespace internal + +// class TestResult + +// Creates an empty TestResult. +TestResult::TestResult() + : death_test_count_(0), + elapsed_time_(0) { +} + +// D'tor. +TestResult::~TestResult() { +} + +// Returns the i-th test part result among all the results. i can +// range from 0 to total_part_count() - 1. If i is not in that range, +// aborts the program. +const TestPartResult& TestResult::GetTestPartResult(int i) const { + if (i < 0 || i >= total_part_count()) + internal::posix::Abort(); + return test_part_results_.at(i); +} + +// Returns the i-th test property. i can range from 0 to +// test_property_count() - 1. If i is not in that range, aborts the +// program. +const TestProperty& TestResult::GetTestProperty(int i) const { + if (i < 0 || i >= test_property_count()) + internal::posix::Abort(); + return test_properties_.at(i); +} + +// Clears the test part results. +void TestResult::ClearTestPartResults() { + test_part_results_.clear(); +} + +// Adds a test part result to the list. +void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { + test_part_results_.push_back(test_part_result); +} + +// Adds a test property to the list. If a property with the same key as the +// supplied property is already represented, the value of this test_property +// replaces the old value for that key. +void TestResult::RecordProperty(const TestProperty& test_property) { + if (!ValidateTestProperty(test_property)) { + return; + } + internal::MutexLock lock(&test_properites_mutex_); + const std::vector::iterator property_with_matching_key = + std::find_if(test_properties_.begin(), test_properties_.end(), + internal::TestPropertyKeyIs(test_property.key())); + if (property_with_matching_key == test_properties_.end()) { + test_properties_.push_back(test_property); + return; + } + property_with_matching_key->SetValue(test_property.value()); +} + +// Adds a failure if the key is a reserved attribute of Google Test +// testcase tags. Returns true if the property is valid. +bool TestResult::ValidateTestProperty(const TestProperty& test_property) { + internal::String key(test_property.key()); + if (key == "name" || key == "status" || key == "time" || key == "classname") { + ADD_FAILURE() + << "Reserved key used in RecordProperty(): " + << key + << " ('name', 'status', 'time', and 'classname' are reserved by " + << GTEST_NAME_ << ")"; + return false; + } + return true; +} + +// Clears the object. +void TestResult::Clear() { + test_part_results_.clear(); + test_properties_.clear(); + death_test_count_ = 0; + elapsed_time_ = 0; +} + +// Returns true iff the test failed. +bool TestResult::Failed() const { + for (int i = 0; i < total_part_count(); ++i) { + if (GetTestPartResult(i).failed()) + return true; + } + return false; +} + +// Returns true iff the test part fatally failed. +static bool TestPartFatallyFailed(const TestPartResult& result) { + return result.fatally_failed(); +} + +// Returns true iff the test fatally failed. +bool TestResult::HasFatalFailure() const { + return CountIf(test_part_results_, TestPartFatallyFailed) > 0; +} + +// Returns true iff the test part non-fatally failed. +static bool TestPartNonfatallyFailed(const TestPartResult& result) { + return result.nonfatally_failed(); +} + +// Returns true iff the test has a non-fatal failure. +bool TestResult::HasNonfatalFailure() const { + return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; +} + +// Gets the number of all test parts. This is the sum of the number +// of successful test parts and the number of failed test parts. +int TestResult::total_part_count() const { + return static_cast(test_part_results_.size()); +} + +// Returns the number of the test properties. +int TestResult::test_property_count() const { + return static_cast(test_properties_.size()); +} + +// class Test + +// Creates a Test object. + +// The c'tor saves the values of all Google Test flags. +Test::Test() + : gtest_flag_saver_(new internal::GTestFlagSaver) { +} + +// The d'tor restores the values of all Google Test flags. +Test::~Test() { + delete gtest_flag_saver_; +} + +// Sets up the test fixture. +// +// A sub-class may override this. +void Test::SetUp() { +} + +// Tears down the test fixture. +// +// A sub-class may override this. +void Test::TearDown() { +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const char* key, const char* value) { + UnitTest::GetInstance()->RecordPropertyForCurrentTest(key, value); +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const char* key, int value) { + Message value_message; + value_message << value; + RecordProperty(key, value_message.GetString().c_str()); +} + +namespace internal { + +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const String& message) { + // This function is a friend of UnitTest and as such has access to + // AddTestPartResult. + UnitTest::GetInstance()->AddTestPartResult( + result_type, + NULL, // No info about the source file where the exception occurred. + -1, // We have no info on which line caused the exception. + message, + String()); // No stack trace, either. +} + +} // namespace internal + +#if GTEST_OS_WINDOWS +// We are on Windows. + +// Adds an "exception thrown" fatal failure to the current test. +static void AddExceptionThrownFailure(DWORD exception_code, + const char* location) { + Message message; + message << "Exception thrown with code 0x" << std::setbase(16) << + exception_code << std::setbase(10) << " in " << location << "."; + + internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, + message.GetString()); +} + +#endif // GTEST_OS_WINDOWS + +// Google Test requires all tests in the same test case to use the same test +// fixture class. This function checks if the current test has the +// same fixture class as the first test in the current test case. If +// yes, it returns true; otherwise it generates a Google Test failure and +// returns false. +bool Test::HasSameFixtureClass() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + const TestCase* const test_case = impl->current_test_case(); + + // Info about the first test in the current test case. + const internal::TestInfoImpl* const first_test_info = + test_case->test_info_list()[0]->impl(); + const internal::TypeId first_fixture_id = first_test_info->fixture_class_id(); + const char* const first_test_name = first_test_info->name(); + + // Info about the current test. + const internal::TestInfoImpl* const this_test_info = + impl->current_test_info()->impl(); + const internal::TypeId this_fixture_id = this_test_info->fixture_class_id(); + const char* const this_test_name = this_test_info->name(); + + if (this_fixture_id != first_fixture_id) { + // Is the first test defined using TEST? + const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); + // Is this test defined using TEST? + const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); + + if (first_is_TEST || this_is_TEST) { + // The user mixed TEST and TEST_F in this test case - we'll tell + // him/her how to fix it. + + // Gets the name of the TEST and the name of the TEST_F. Note + // that first_is_TEST and this_is_TEST cannot both be true, as + // the fixture IDs are different for the two tests. + const char* const TEST_name = + first_is_TEST ? first_test_name : this_test_name; + const char* const TEST_F_name = + first_is_TEST ? this_test_name : first_test_name; + + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class, so mixing TEST_F and TEST in the same test case is\n" + << "illegal. In test case " << this_test_info->test_case_name() + << ",\n" + << "test " << TEST_F_name << " is defined using TEST_F but\n" + << "test " << TEST_name << " is defined using TEST. You probably\n" + << "want to change the TEST to TEST_F or move it to another test\n" + << "case."; + } else { + // The user defined two fixture classes with the same name in + // two namespaces - we'll tell him/her how to fix it. + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " + << this_test_info->test_case_name() << ",\n" + << "you defined test " << first_test_name + << " and test " << this_test_name << "\n" + << "using two different test fixture classes. This can happen if\n" + << "the two classes are from different namespaces or translation\n" + << "units and have the same name. You should probably rename one\n" + << "of the classes to put the tests into different test cases."; + } + return false; + } + + return true; +} + +// Runs the test and updates the test result. +void Test::Run() { + if (!HasSameFixtureClass()) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + SetUp(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "SetUp()"); + } + + // We will run the test only if SetUp() had no fatal failure. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + TestBody(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "the test body"); + } + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + __try { + TearDown(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), "TearDown()"); + } + +#else // We are on a compiler or platform that doesn't support SEH. + impl->os_stack_trace_getter()->UponLeavingGTest(); + SetUp(); + + // We will run the test only if SetUp() was successful. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + TestBody(); + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + TearDown(); +#endif // GTEST_HAS_SEH +} + + +// Returns true iff the current test has a fatal failure. +bool Test::HasFatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); +} + +// Returns true iff the current test has a non-fatal failure. +bool Test::HasNonfatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()-> + HasNonfatalFailure(); +} + +// class TestInfo + +// Constructs a TestInfo object. It assumes ownership of the test factory +// object via impl_. +TestInfo::TestInfo(const char* a_test_case_name, + const char* a_name, + const char* a_test_case_comment, + const char* a_comment, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory) { + impl_ = new internal::TestInfoImpl(this, a_test_case_name, a_name, + a_test_case_comment, a_comment, + fixture_class_id, factory); +} + +// Destructs a TestInfo object. +TestInfo::~TestInfo() { + delete impl_; +} + +namespace internal { + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// test_case_comment: a comment on the test case that will be included in +// the test output +// comment: a comment on the test that will be included in the +// test output +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory) { + TestInfo* const test_info = + new TestInfo(test_case_name, name, test_case_comment, comment, + fixture_class_id, factory); + GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); + return test_info; +} + +#if GTEST_HAS_PARAM_TEST +void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line) { + Message errors; + errors + << "Attempted redefinition of test case " << test_case_name << ".\n" + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " << test_case_name << ", you tried\n" + << "to define a test using a fixture class different from the one\n" + << "used earlier. This can happen if the two fixture classes are\n" + << "from different namespaces and have the same name. You should\n" + << "probably rename one of the classes to put the tests into different\n" + << "test cases."; + + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors.GetString().c_str()); +} +#endif // GTEST_HAS_PARAM_TEST + +} // namespace internal + +// Returns the test case name. +const char* TestInfo::test_case_name() const { + return impl_->test_case_name(); +} + +// Returns the test name. +const char* TestInfo::name() const { + return impl_->name(); +} + +// Returns the test case comment. +const char* TestInfo::test_case_comment() const { + return impl_->test_case_comment(); +} + +// Returns the test comment. +const char* TestInfo::comment() const { + return impl_->comment(); +} + +// Returns true if this test should run. +bool TestInfo::should_run() const { return impl_->should_run(); } + +// Returns true if this test matches the user-specified filter. +bool TestInfo::matches_filter() const { return impl_->matches_filter(); } + +// Returns the result of the test. +const TestResult* TestInfo::result() const { return impl_->result(); } + +// Increments the number of death tests encountered in this test so +// far. +int TestInfo::increment_death_test_count() { + return impl_->result()->increment_death_test_count(); +} + +namespace { + +// A predicate that checks the test name of a TestInfo against a known +// value. +// +// This is used for implementation of the TestCase class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestNameIs is copyable. +class TestNameIs { + public: + // Constructor. + // + // TestNameIs has NO default constructor. + explicit TestNameIs(const char* name) + : name_(name) {} + + // Returns true iff the test name of test_info matches name_. + bool operator()(const TestInfo * test_info) const { + return test_info && internal::String(test_info->name()).Compare(name_) == 0; + } + + private: + internal::String name_; +}; + +} // namespace + +namespace internal { + +// This method expands all parameterized tests registered with macros TEST_P +// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. +// This will be done just once during the program runtime. +void UnitTestImpl::RegisterParameterizedTests() { +#if GTEST_HAS_PARAM_TEST + if (!parameterized_tests_registered_) { + parameterized_test_registry_.RegisterTests(); + parameterized_tests_registered_ = true; + } +#endif +} + +// Creates the test object, runs it, records its result, and then +// deletes it. +void TestInfoImpl::Run() { + if (!should_run_) return; + + // Tells UnitTest where to store test result. + UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_info(parent_); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Notifies the unit test event listeners that a test is about to start. + repeater->OnTestStart(*parent_); + + const TimeInMillis start = GetTimeInMillis(); + + impl->os_stack_trace_getter()->UponLeavingGTest(); +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + Test* test = NULL; + + __try { + // Creates the test object. + test = factory_->CreateTest(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + AddExceptionThrownFailure(GetExceptionCode(), + "the test fixture's constructor"); + return; + } +#else // We are on a compiler or platform that doesn't support SEH. + + // TODO(wan): If test->Run() throws, test won't be deleted. This is + // not a problem now as we don't use exceptions. If we were to + // enable exceptions, we should revise the following to be + // exception-safe. + + // Creates the test object. + Test* test = factory_->CreateTest(); +#endif // GTEST_HAS_SEH + + // Runs the test only if the constructor of the test fixture didn't + // generate a fatal failure. + if (!Test::HasFatalFailure()) { + test->Run(); + } + + // Deletes the test object. + impl->os_stack_trace_getter()->UponLeavingGTest(); + delete test; + test = NULL; + + result_.set_elapsed_time(GetTimeInMillis() - start); + + // Notifies the unit test event listener that a test has just finished. + repeater->OnTestEnd(*parent_); + + // Tells UnitTest to stop associating assertion results to this + // test. + impl->set_current_test_info(NULL); +} + +} // namespace internal + +// class TestCase + +// Gets the number of successful tests in this test case. +int TestCase::successful_test_count() const { + return CountIf(test_info_list_, TestPassed); +} + +// Gets the number of failed tests in this test case. +int TestCase::failed_test_count() const { + return CountIf(test_info_list_, TestFailed); +} + +int TestCase::disabled_test_count() const { + return CountIf(test_info_list_, TestDisabled); +} + +// Get the number of tests in this test case that should run. +int TestCase::test_to_run_count() const { + return CountIf(test_info_list_, ShouldRunTest); +} + +// Gets the number of all tests. +int TestCase::total_test_count() const { + return static_cast(test_info_list_.size()); +} + +// Creates a TestCase with the given name. +// +// Arguments: +// +// name: name of the test case +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase::TestCase(const char* a_name, const char* a_comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) + : name_(a_name), + comment_(a_comment), + set_up_tc_(set_up_tc), + tear_down_tc_(tear_down_tc), + should_run_(false), + elapsed_time_(0) { +} + +// Destructor of TestCase. +TestCase::~TestCase() { + // Deletes every Test in the collection. + ForEach(test_info_list_, internal::Delete); +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +const TestInfo* TestCase::GetTestInfo(int i) const { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +TestInfo* TestCase::GetMutableTestInfo(int i) { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Adds a test to this test case. Will delete the test upon +// destruction of the TestCase object. +void TestCase::AddTestInfo(TestInfo * test_info) { + test_info_list_.push_back(test_info); + test_indices_.push_back(static_cast(test_indices_.size())); +} + +// Runs every test in this TestCase. +void TestCase::Run() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_case(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + repeater->OnTestCaseStart(*this); + impl->os_stack_trace_getter()->UponLeavingGTest(); + set_up_tc_(); + + const internal::TimeInMillis start = internal::GetTimeInMillis(); + for (int i = 0; i < total_test_count(); i++) { + GetMutableTestInfo(i)->impl()->Run(); + } + elapsed_time_ = internal::GetTimeInMillis() - start; + + impl->os_stack_trace_getter()->UponLeavingGTest(); + tear_down_tc_(); + repeater->OnTestCaseEnd(*this); + impl->set_current_test_case(NULL); +} + +// Clears the results of all tests in this test case. +void TestCase::ClearResult() { + ForEach(test_info_list_, internal::TestInfoImpl::ClearTestResult); +} + +// Returns true iff test passed. +bool TestCase::TestPassed(const TestInfo * test_info) { + const internal::TestInfoImpl* const impl = test_info->impl(); + return impl->should_run() && impl->result()->Passed(); +} + +// Returns true iff test failed. +bool TestCase::TestFailed(const TestInfo * test_info) { + const internal::TestInfoImpl* const impl = test_info->impl(); + return impl->should_run() && impl->result()->Failed(); +} + +// Returns true iff test is disabled. +bool TestCase::TestDisabled(const TestInfo * test_info) { + return test_info->impl()->is_disabled(); +} + +// Returns true if the given test should run. +bool TestCase::ShouldRunTest(const TestInfo *test_info) { + return test_info->impl()->should_run(); +} + +// Shuffles the tests in this test case. +void TestCase::ShuffleTests(internal::Random* random) { + Shuffle(random, &test_indices_); +} + +// Restores the test order to before the first shuffle. +void TestCase::UnshuffleTests() { + for (size_t i = 0; i < test_indices_.size(); i++) { + test_indices_[i] = static_cast(i); + } +} + +// Formats a countable noun. Depending on its quantity, either the +// singular form or the plural form is used. e.g. +// +// FormatCountableNoun(1, "formula", "formuli") returns "1 formula". +// FormatCountableNoun(5, "book", "books") returns "5 books". +static internal::String FormatCountableNoun(int count, + const char * singular_form, + const char * plural_form) { + return internal::String::Format("%d %s", count, + count == 1 ? singular_form : plural_form); +} + +// Formats the count of tests. +static internal::String FormatTestCount(int test_count) { + return FormatCountableNoun(test_count, "test", "tests"); +} + +// Formats the count of test cases. +static internal::String FormatTestCaseCount(int test_case_count) { + return FormatCountableNoun(test_case_count, "test case", "test cases"); +} + +// Converts a TestPartResult::Type enum to human-friendly string +// representation. Both kNonFatalFailure and kFatalFailure are translated +// to "Failure", as the user usually doesn't care about the difference +// between the two when viewing the test result. +static const char * TestPartResultTypeToString(TestPartResult::Type type) { + switch (type) { + case TestPartResult::kSuccess: + return "Success"; + + case TestPartResult::kNonFatalFailure: + case TestPartResult::kFatalFailure: +#ifdef _MSC_VER + return "error: "; +#else + return "Failure\n"; +#endif + } + + return "Unknown result type"; +} + +// Prints a TestPartResult to a String. +static internal::String PrintTestPartResultToString( + const TestPartResult& test_part_result) { + return (Message() + << internal::FormatFileLocation(test_part_result.file_name(), + test_part_result.line_number()) + << " " << TestPartResultTypeToString(test_part_result.type()) + << test_part_result.message()).GetString(); +} + +// Prints a TestPartResult. +static void PrintTestPartResult(const TestPartResult& test_part_result) { + const internal::String& result = + PrintTestPartResultToString(test_part_result); + printf("%s\n", result.c_str()); + fflush(stdout); + // If the test program runs in Visual Studio or a debugger, the + // following statements add the test part result message to the Output + // window such that the user can double-click on it to jump to the + // corresponding source code location; otherwise they do nothing. +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + // We don't call OutputDebugString*() on Windows Mobile, as printing + // to stdout is done by OutputDebugString() there already - we don't + // want the same message printed twice. + ::OutputDebugStringA(result.c_str()); + ::OutputDebugStringA("\n"); +#endif +} + +// class PrettyUnitTestResultPrinter + +namespace internal { + +enum GTestColor { + COLOR_DEFAULT, + COLOR_RED, + COLOR_GREEN, + COLOR_YELLOW +}; + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns the character attribute for the given color. +WORD GetColorAttribute(GTestColor color) { + switch (color) { + case COLOR_RED: return FOREGROUND_RED; + case COLOR_GREEN: return FOREGROUND_GREEN; + case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; + default: return 0; + } +} + +#else + +// Returns the ANSI color code for the given color. COLOR_DEFAULT is +// an invalid input. +const char* GetAnsiColorCode(GTestColor color) { + switch (color) { + case COLOR_RED: return "1"; + case COLOR_GREEN: return "2"; + case COLOR_YELLOW: return "3"; + default: return NULL; + }; +} + +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns true iff Google Test should use colors in the output. +bool ShouldUseColor(bool stdout_is_tty) { + const char* const gtest_color = GTEST_FLAG(color).c_str(); + + if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { +#if GTEST_OS_WINDOWS + // On Windows the TERM variable is usually not set, but the + // console there does support colors. + return stdout_is_tty; +#else + // On non-Windows platforms, we rely on the TERM variable. + const char* const term = posix::GetEnv("TERM"); + const bool term_supports_color = + String::CStringEquals(term, "xterm") || + String::CStringEquals(term, "xterm-color") || + String::CStringEquals(term, "xterm-256color") || + String::CStringEquals(term, "linux") || + String::CStringEquals(term, "cygwin"); + return stdout_is_tty && term_supports_color; +#endif // GTEST_OS_WINDOWS + } + + return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || + String::CaseInsensitiveCStringEquals(gtest_color, "true") || + String::CaseInsensitiveCStringEquals(gtest_color, "t") || + String::CStringEquals(gtest_color, "1"); + // We take "yes", "true", "t", and "1" as meaning "yes". If the + // value is neither one of these nor "auto", we treat it as "no" to + // be conservative. +} + +// Helpers for printing colored strings to stdout. Note that on Windows, we +// cannot simply emit special characters and have the terminal change colors. +// This routine must actually emit the characters rather than return a string +// that would be colored when printed, as can be done on Linux. +void ColoredPrintf(GTestColor color, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + const bool use_color = false; +#else + static const bool in_color_mode = + ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); + const bool use_color = in_color_mode && (color != COLOR_DEFAULT); +#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + // The '!= 0' comparison is necessary to satisfy MSVC 7.1. + + if (!use_color) { + vprintf(fmt, args); + va_end(args); + return; + } + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); + + // Gets the current text color. + CONSOLE_SCREEN_BUFFER_INFO buffer_info; + GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); + const WORD old_color_attrs = buffer_info.wAttributes; + + // We need to flush the stream buffers into the console before each + // SetConsoleTextAttribute call lest it affect the text that is already + // printed but has not yet reached the console. + fflush(stdout); + SetConsoleTextAttribute(stdout_handle, + GetColorAttribute(color) | FOREGROUND_INTENSITY); + vprintf(fmt, args); + + fflush(stdout); + // Restores the text color. + SetConsoleTextAttribute(stdout_handle, old_color_attrs); +#else + printf("\033[0;3%sm", GetAnsiColorCode(color)); + vprintf(fmt, args); + printf("\033[m"); // Resets the terminal to default. +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + va_end(args); +} + +// This class implements the TestEventListener interface. +// +// Class PrettyUnitTestResultPrinter is copyable. +class PrettyUnitTestResultPrinter : public TestEventListener { + public: + PrettyUnitTestResultPrinter() {} + static void PrintTestName(const char * test_case, const char * test) { + printf("%s.%s", test_case, test); + } + + // The following methods override what's in the TestEventListener class. + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + + private: + static void PrintFailedTests(const UnitTest& unit_test); + + internal::String test_case_name_; +}; + + // Fired before each iteration of tests starts. +void PrettyUnitTestResultPrinter::OnTestIterationStart( + const UnitTest& unit_test, int iteration) { + if (GTEST_FLAG(repeat) != 1) + printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); + + const char* const filter = GTEST_FLAG(filter).c_str(); + + // Prints the filter if it's not *. This reminds the user that some + // tests may be skipped. + if (!internal::String::CStringEquals(filter, kUniversalFilter)) { + ColoredPrintf(COLOR_YELLOW, + "Note: %s filter = %s\n", GTEST_NAME_, filter); + } + + if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { + ColoredPrintf(COLOR_YELLOW, + "Note: This is test shard %s of %s.\n", + internal::posix::GetEnv(kTestShardIndex), + internal::posix::GetEnv(kTestTotalShards)); + } + + if (GTEST_FLAG(shuffle)) { + ColoredPrintf(COLOR_YELLOW, + "Note: Randomizing tests' orders with a seed of %d .\n", + unit_test.random_seed()); + } + + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("Running %s from %s.\n", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment set-up.\n"); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { + test_case_name_ = test_case.name(); + const internal::String counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s", counts.c_str(), test_case_name_.c_str()); + if (test_case.comment()[0] == '\0') { + printf("\n"); + } else { + printf(", where %s\n", test_case.comment()); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { + ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + PrintTestName(test_case_name_.c_str(), test_info.name()); + if (test_info.comment()[0] == '\0') { + printf("\n"); + } else { + printf(", where %s\n", test_info.comment()); + } + fflush(stdout); +} + +// Called after an assertion failure. +void PrettyUnitTestResultPrinter::OnTestPartResult( + const TestPartResult& result) { + // If the test part succeeded, we don't need to do anything. + if (result.type() == TestPartResult::kSuccess) + return; + + // Print failure message from the assertion (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { + if (test_info.result()->Passed()) { + ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else { + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + } + PrintTestName(test_case_name_.c_str(), test_info.name()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms)\n", internal::StreamableToString( + test_info.result()->elapsed_time()).c_str()); + } else { + printf("\n"); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { + if (!GTEST_FLAG(print_time)) return; + + test_case_name_ = test_case.name(); + const internal::String counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s (%s ms total)\n\n", + counts.c_str(), test_case_name_.c_str(), + internal::StreamableToString(test_case.elapsed_time()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment tear-down\n"); + fflush(stdout); +} + +// Internal helper for printing the list of failed tests. +void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { + const int failed_test_count = unit_test.failed_test_count(); + if (failed_test_count == 0) { + return; + } + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase& test_case = *unit_test.GetTestCase(i); + if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { + continue; + } + for (int j = 0; j < test_case.total_test_count(); ++j) { + const TestInfo& test_info = *test_case.GetTestInfo(j); + if (!test_info.should_run() || test_info.result()->Passed()) { + continue; + } + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s.%s", test_case.name(), test_info.name()); + if (test_case.comment()[0] != '\0' || + test_info.comment()[0] != '\0') { + printf(", where %s", test_case.comment()); + if (test_case.comment()[0] != '\0' && + test_info.comment()[0] != '\0') { + printf(" and "); + } + } + printf("%s\n", test_info.comment()); + } + } +} + + void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("%s from %s ran.", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms total)", + internal::StreamableToString(unit_test.elapsed_time()).c_str()); + } + printf("\n"); + ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); + printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + + int num_failures = unit_test.failed_test_count(); + if (!unit_test.Passed()) { + const int failed_test_count = unit_test.failed_test_count(); + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); + PrintFailedTests(unit_test); + printf("\n%2d FAILED %s\n", num_failures, + num_failures == 1 ? "TEST" : "TESTS"); + } + + int num_disabled = unit_test.disabled_test_count(); + if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { + if (!num_failures) { + printf("\n"); // Add a spacer if no FAILURE banner is displayed. + } + ColoredPrintf(COLOR_YELLOW, + " YOU HAVE %d DISABLED %s\n\n", + num_disabled, + num_disabled == 1 ? "TEST" : "TESTS"); + } + // Ensure that Google Test output is printed before, e.g., heapchecker output. + fflush(stdout); +} + +// End PrettyUnitTestResultPrinter + +// class TestEventRepeater +// +// This class forwards events to other event listeners. +class TestEventRepeater : public TestEventListener { + public: + TestEventRepeater() : forwarding_enabled_(true) {} + virtual ~TestEventRepeater(); + void Append(TestEventListener *listener); + TestEventListener* Release(TestEventListener* listener); + + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled() const { return forwarding_enabled_; } + void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } + + virtual void OnTestProgramStart(const UnitTest& unit_test); + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& unit_test); + + private: + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled_; + // The list of listeners that receive events. + std::vector listeners_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); +}; + +TestEventRepeater::~TestEventRepeater() { + ForEach(listeners_, Delete); +} + +void TestEventRepeater::Append(TestEventListener *listener) { + listeners_.push_back(listener); +} + +// TODO(vladl@google.com): Factor the search functionality into Vector::Find. +TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { + for (size_t i = 0; i < listeners_.size(); ++i) { + if (listeners_[i] == listener) { + listeners_.erase(listeners_.begin() + i); + return listener; + } + } + + return NULL; +} + +// Since most methods are very similar, use macros to reduce boilerplate. +// This defines a member that forwards the call to all listeners. +#define GTEST_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = 0; i < listeners_.size(); i++) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} +// This defines a member that forwards the call to all listeners in reverse +// order. +#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} + +GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) +GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) +GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) +GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) +GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) +GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) +GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) +GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) + +#undef GTEST_REPEATER_METHOD_ +#undef GTEST_REVERSE_REPEATER_METHOD_ + +void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (size_t i = 0; i < listeners_.size(); i++) { + listeners_[i]->OnTestIterationStart(unit_test, iteration); + } + } +} + +void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { + listeners_[i]->OnTestIterationEnd(unit_test, iteration); + } + } +} + +// End TestEventRepeater + +// This class generates an XML output file. +class XmlUnitTestResultPrinter : public EmptyTestEventListener { + public: + explicit XmlUnitTestResultPrinter(const char* output_file); + + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + + private: + // Is c a whitespace character that is normalized to a space character + // when it appears in an XML attribute value? + static bool IsNormalizableWhitespace(char c) { + return c == 0x9 || c == 0xA || c == 0xD; + } + + // May c appear in a well-formed XML document? + static bool IsValidXmlCharacter(char c) { + return IsNormalizableWhitespace(c) || c >= 0x20; + } + + // Returns an XML-escaped copy of the input string str. If + // is_attribute is true, the text is meant to appear as an attribute + // value, and normalizable whitespace is preserved by replacing it + // with character references. + static String EscapeXml(const char* str, bool is_attribute); + + // Returns the given string with all characters invalid in XML removed. + static String RemoveInvalidXmlCharacters(const char* str); + + // Convenience wrapper around EscapeXml when str is an attribute value. + static String EscapeXmlAttribute(const char* str) { + return EscapeXml(str, true); + } + + // Convenience wrapper around EscapeXml when str is not an attribute value. + static String EscapeXmlText(const char* str) { return EscapeXml(str, false); } + + // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. + static void OutputXmlCDataSection(::std::ostream* stream, const char* data); + + // Streams an XML representation of a TestInfo object. + static void OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info); + + // Prints an XML representation of a TestCase object + static void PrintXmlTestCase(FILE* out, const TestCase& test_case); + + // Prints an XML summary of unit_test to output stream out. + static void PrintXmlUnitTest(FILE* out, const UnitTest& unit_test); + + // Produces a string representing the test properties in a result as space + // delimited XML attributes based on the property key="value" pairs. + // When the String is not empty, it includes a space at the beginning, + // to delimit this attribute from prior attributes. + static String TestPropertiesAsXmlAttributes(const TestResult& result); + + // The output file. + const String output_file_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); +}; + +// Creates a new XmlUnitTestResultPrinter. +XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) + : output_file_(output_file) { + if (output_file_.c_str() == NULL || output_file_.empty()) { + fprintf(stderr, "XML output file may not be null\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } +} + +// Called after the unit test ends. +void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + FILE* xmlout = NULL; + FilePath output_file(output_file_); + FilePath output_dir(output_file.RemoveFileName()); + + if (output_dir.CreateDirectoriesRecursively()) { + xmlout = posix::FOpen(output_file_.c_str(), "w"); + } + if (xmlout == NULL) { + // TODO(wan): report the reason of the failure. + // + // We don't do it for now as: + // + // 1. There is no urgent need for it. + // 2. It's a bit involved to make the errno variable thread-safe on + // all three operating systems (Linux, Windows, and Mac OS). + // 3. To interpret the meaning of errno in a thread-safe way, + // we need the strerror_r() function, which is not available on + // Windows. + fprintf(stderr, + "Unable to open file \"%s\"\n", + output_file_.c_str()); + fflush(stderr); + exit(EXIT_FAILURE); + } + PrintXmlUnitTest(xmlout, unit_test); + fclose(xmlout); +} + +// Returns an XML-escaped copy of the input string str. If is_attribute +// is true, the text is meant to appear as an attribute value, and +// normalizable whitespace is preserved by replacing it with character +// references. +// +// Invalid XML characters in str, if any, are stripped from the output. +// It is expected that most, if not all, of the text processed by this +// module will consist of ordinary English text. +// If this module is ever modified to produce version 1.1 XML output, +// most invalid characters can be retained using character references. +// TODO(wan): It might be nice to have a minimally invasive, human-readable +// escaping scheme for invalid characters, rather than dropping them. +String XmlUnitTestResultPrinter::EscapeXml(const char* str, bool is_attribute) { + Message m; + + if (str != NULL) { + for (const char* src = str; *src; ++src) { + switch (*src) { + case '<': + m << "<"; + break; + case '>': + m << ">"; + break; + case '&': + m << "&"; + break; + case '\'': + if (is_attribute) + m << "'"; + else + m << '\''; + break; + case '"': + if (is_attribute) + m << """; + else + m << '"'; + break; + default: + if (IsValidXmlCharacter(*src)) { + if (is_attribute && IsNormalizableWhitespace(*src)) + m << String::Format("&#x%02X;", unsigned(*src)); + else + m << *src; + } + break; + } + } + } + + return m.GetString(); +} + +// Returns the given string with all characters invalid in XML removed. +// Currently invalid characters are dropped from the string. An +// alternative is to replace them with certain characters such as . or ?. +String XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(const char* str) { + char* const output = new char[strlen(str) + 1]; + char* appender = output; + for (char ch = *str; ch != '\0'; ch = *++str) + if (IsValidXmlCharacter(ch)) + *appender++ = ch; + *appender = '\0'; + + String ret_value(output); + delete[] output; + return ret_value; +} + +// The following routines generate an XML representation of a UnitTest +// object. +// +// This is how Google Test concepts map to the DTD: +// +// <-- corresponds to a UnitTest object +// <-- corresponds to a TestCase object +// <-- corresponds to a TestInfo object +// ... +// ... +// ... +// <-- individual assertion failures +// +// +// + +// Formats the given time in milliseconds as seconds. +std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { + ::std::stringstream ss; + ss << ms/1000.0; + return ss.str(); +} + +// Streams an XML CDATA section, escaping invalid CDATA sequences as needed. +void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, + const char* data) { + const char* segment = data; + *stream << ""); + if (next_segment != NULL) { + stream->write( + segment, static_cast(next_segment - segment)); + *stream << "]]>]]>"); + } else { + *stream << segment; + break; + } + } + *stream << "]]>"; +} + +// Prints an XML representation of a TestInfo object. +// TODO(wan): There is also value in printing properties with the plain printer. +void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info) { + const TestResult& result = *test_info.result(); + *stream << " \n"; + *stream << " "; + const String message = RemoveInvalidXmlCharacters(String::Format( + "%s:%d\n%s", + part.file_name(), part.line_number(), + part.message()).c_str()); + OutputXmlCDataSection(stream, message.c_str()); + *stream << "\n"; + } + } + + if (failures == 0) + *stream << " />\n"; + else + *stream << " \n"; +} + +// Prints an XML representation of a TestCase object +void XmlUnitTestResultPrinter::PrintXmlTestCase(FILE* out, + const TestCase& test_case) { + fprintf(out, + " \n", + FormatTimeInMillisAsSeconds(test_case.elapsed_time()).c_str()); + for (int i = 0; i < test_case.total_test_count(); ++i) { + StrStream stream; + OutputXmlTestInfo(&stream, test_case.name(), *test_case.GetTestInfo(i)); + fprintf(out, "%s", StrStreamToString(&stream).c_str()); + } + fprintf(out, " \n"); +} + +// Prints an XML summary of unit_test to output stream out. +void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out, + const UnitTest& unit_test) { + fprintf(out, "\n"); + fprintf(out, + "\n"); + for (int i = 0; i < unit_test.total_test_case_count(); ++i) + PrintXmlTestCase(out, *unit_test.GetTestCase(i)); + fprintf(out, "\n"); +} + +// Produces a string representing the test properties in a result as space +// delimited XML attributes based on the property key="value" pairs. +String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( + const TestResult& result) { + Message attributes; + for (int i = 0; i < result.test_property_count(); ++i) { + const TestProperty& property = result.GetTestProperty(i); + attributes << " " << property.key() << "=" + << "\"" << EscapeXmlAttribute(property.value()) << "\""; + } + return attributes.GetString(); +} + +// End XmlUnitTestResultPrinter + +// Class ScopedTrace + +// Pushes the given source file location and message onto a per-thread +// trace stack maintained by Google Test. +// L < UnitTest::mutex_ +ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) { + TraceInfo trace; + trace.file = file; + trace.line = line; + trace.message = message.GetString(); + + UnitTest::GetInstance()->PushGTestTrace(trace); +} + +// Pops the info pushed by the c'tor. +// L < UnitTest::mutex_ +ScopedTrace::~ScopedTrace() { + UnitTest::GetInstance()->PopGTestTrace(); +} + + +// class OsStackTraceGetter + +// Returns the current OS stack trace as a String. Parameters: +// +// max_depth - the maximum number of stack frames to be included +// in the trace. +// skip_count - the number of top frames to be skipped; doesn't count +// against max_depth. +// +// L < mutex_ +// We use "L < mutex_" to denote that the function may acquire mutex_. +String OsStackTraceGetter::CurrentStackTrace(int, int) { + return String(""); +} + +// L < mutex_ +void OsStackTraceGetter::UponLeavingGTest() { +} + +const char* const +OsStackTraceGetter::kElidedFramesMarker = + "... " GTEST_NAME_ " internal frames ..."; + +} // namespace internal + +// class TestEventListeners + +TestEventListeners::TestEventListeners() + : repeater_(new internal::TestEventRepeater()), + default_result_printer_(NULL), + default_xml_generator_(NULL) { +} + +TestEventListeners::~TestEventListeners() { delete repeater_; } + +// Returns the standard listener responsible for the default console +// output. Can be removed from the listeners list to shut down default +// console output. Note that removing this object from the listener list +// with Release transfers its ownership to the user. +void TestEventListeners::Append(TestEventListener* listener) { + repeater_->Append(listener); +} + +// Removes the given event listener from the list and returns it. It then +// becomes the caller's responsibility to delete the listener. Returns +// NULL if the listener is not found in the list. +TestEventListener* TestEventListeners::Release(TestEventListener* listener) { + if (listener == default_result_printer_) + default_result_printer_ = NULL; + else if (listener == default_xml_generator_) + default_xml_generator_ = NULL; + return repeater_->Release(listener); +} + +// Returns repeater that broadcasts the TestEventListener events to all +// subscribers. +TestEventListener* TestEventListeners::repeater() { return repeater_; } + +// Sets the default_result_printer attribute to the provided listener. +// The listener is also added to the listener list and previous +// default_result_printer is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { + if (default_result_printer_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_result_printer_); + default_result_printer_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Sets the default_xml_generator attribute to the provided listener. The +// listener is also added to the listener list and previous +// default_xml_generator is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { + if (default_xml_generator_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_xml_generator_); + default_xml_generator_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Controls whether events will be forwarded by the repeater to the +// listeners in the list. +bool TestEventListeners::EventForwardingEnabled() const { + return repeater_->forwarding_enabled(); +} + +void TestEventListeners::SuppressEventForwarding() { + repeater_->set_forwarding_enabled(false); +} + +// class UnitTest + +// Gets the singleton UnitTest object. The first time this method is +// called, a UnitTest object is constructed and returned. Consecutive +// calls will return the same object. +// +// We don't protect this under mutex_ as a user is not supposed to +// call this before main() starts, from which point on the return +// value will never change. +UnitTest * UnitTest::GetInstance() { + // When compiled with MSVC 7.1 in optimized mode, destroying the + // UnitTest object upon exiting the program messes up the exit code, + // causing successful tests to appear failed. We have to use a + // different implementation in this case to bypass the compiler bug. + // This implementation makes the compiler happy, at the cost of + // leaking the UnitTest object. + + // CodeGear C++Builder insists on a public destructor for the + // default implementation. Use this implementation to keep good OO + // design with private destructor. + +#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) + static UnitTest* const instance = new UnitTest; + return instance; +#else + static UnitTest instance; + return &instance; +#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +} + +// Gets the number of successful test cases. +int UnitTest::successful_test_case_count() const { + return impl()->successful_test_case_count(); +} + +// Gets the number of failed test cases. +int UnitTest::failed_test_case_count() const { + return impl()->failed_test_case_count(); +} + +// Gets the number of all test cases. +int UnitTest::total_test_case_count() const { + return impl()->total_test_case_count(); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTest::test_case_to_run_count() const { + return impl()->test_case_to_run_count(); +} + +// Gets the number of successful tests. +int UnitTest::successful_test_count() const { + return impl()->successful_test_count(); +} + +// Gets the number of failed tests. +int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } + +// Gets the number of disabled tests. +int UnitTest::disabled_test_count() const { + return impl()->disabled_test_count(); +} + +// Gets the number of all tests. +int UnitTest::total_test_count() const { return impl()->total_test_count(); } + +// Gets the number of tests that should run. +int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } + +// Gets the elapsed time, in milliseconds. +internal::TimeInMillis UnitTest::elapsed_time() const { + return impl()->elapsed_time(); +} + +// Returns true iff the unit test passed (i.e. all test cases passed). +bool UnitTest::Passed() const { return impl()->Passed(); } + +// Returns true iff the unit test failed (i.e. some test case failed +// or something outside of all tests failed). +bool UnitTest::Failed() const { return impl()->Failed(); } + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +const TestCase* UnitTest::GetTestCase(int i) const { + return impl()->GetTestCase(i); +} + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +TestCase* UnitTest::GetMutableTestCase(int i) { + return impl()->GetMutableTestCase(i); +} + +// Returns the list of event listeners that can be used to track events +// inside Google Test. +TestEventListeners& UnitTest::listeners() { + return *impl()->listeners(); +} + +// Registers and returns a global test environment. When a test +// program is run, all global test environments will be set-up in the +// order they were registered. After all tests in the program have +// finished, all global test environments will be torn-down in the +// *reverse* order they were registered. +// +// The UnitTest object takes ownership of the given environment. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +Environment* UnitTest::AddEnvironment(Environment* env) { + if (env == NULL) { + return NULL; + } + + impl_->environments().push_back(env); + return env; +} + +#if GTEST_HAS_EXCEPTIONS +// A failed Google Test assertion will throw an exception of this type +// when exceptions are enabled. We derive it from std::runtime_error, +// which is for errors presumably detectable only at run time. Since +// std::runtime_error inherits from std::exception, many testing +// frameworks know how to extract and print the message inside it. +class GoogleTestFailureException : public ::std::runtime_error { + public: + explicit GoogleTestFailureException(const TestPartResult& failure) + : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} +}; +#endif + +// Adds a TestPartResult to the current TestResult object. All Google Test +// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call +// this to report their results. The user code should use the +// assertion macros instead of calling this directly. +// L < mutex_ +void UnitTest::AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, + int line_number, + const internal::String& message, + const internal::String& os_stack_trace) { + Message msg; + msg << message; + + internal::MutexLock lock(&mutex_); + if (impl_->gtest_trace_stack().size() > 0) { + msg << "\n" << GTEST_NAME_ << " trace:"; + + for (int i = static_cast(impl_->gtest_trace_stack().size()); + i > 0; --i) { + const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; + msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) + << " " << trace.message; + } + } + + if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { + msg << internal::kStackTraceMarker << os_stack_trace; + } + + const TestPartResult result = + TestPartResult(result_type, file_name, line_number, + msg.GetString().c_str()); + impl_->GetTestPartResultReporterForCurrentThread()-> + ReportTestPartResult(result); + + if (result_type != TestPartResult::kSuccess) { + // gtest_break_on_failure takes precedence over + // gtest_throw_on_failure. This allows a user to set the latter + // in the code (perhaps in order to use Google Test assertions + // with another testing framework) and specify the former on the + // command line for debugging. + if (GTEST_FLAG(break_on_failure)) { +#if GTEST_OS_WINDOWS + // Using DebugBreak on Windows allows gtest to still break into a debugger + // when a failure happens and both the --gtest_break_on_failure and + // the --gtest_catch_exceptions flags are specified. + DebugBreak(); +#else + *static_cast(NULL) = 1; +#endif // GTEST_OS_WINDOWS + } else if (GTEST_FLAG(throw_on_failure)) { +#if GTEST_HAS_EXCEPTIONS + throw GoogleTestFailureException(result); +#else + // We cannot call abort() as it generates a pop-up in debug mode + // that cannot be suppressed in VC 7.1 or below. + exit(1); +#endif + } + } +} + +// Creates and adds a property to the current TestResult. If a property matching +// the supplied value already exists, updates its value instead. +void UnitTest::RecordPropertyForCurrentTest(const char* key, + const char* value) { + const TestProperty test_property(key, value); + impl_->current_test_result()->RecordProperty(test_property); +} + +// Runs all tests in this UnitTest object and prints the result. +// Returns 0 if successful, or 1 otherwise. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +int UnitTest::Run() { +#if GTEST_HAS_SEH + // Catch SEH-style exceptions. + + const bool in_death_test_child_process = + internal::GTEST_FLAG(internal_run_death_test).length() > 0; + + // Either the user wants Google Test to catch exceptions thrown by the + // tests or this is executing in the context of death test child + // process. In either case the user does not want to see pop-up dialogs + // about crashes - they are expected.. + if (GTEST_FLAG(catch_exceptions) || in_death_test_child_process) { +#if !GTEST_OS_WINDOWS_MOBILE + // SetErrorMode doesn't exist on CE. + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | + SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); +#endif // !GTEST_OS_WINDOWS_MOBILE + +#if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE + // Death test children can be terminated with _abort(). On Windows, + // _abort() can show a dialog with a warning message. This forces the + // abort message to go to stderr instead. + _set_error_mode(_OUT_TO_STDERR); +#endif + +#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE + // In the debug version, Visual Studio pops up a separate dialog + // offering a choice to debug the aborted program. We need to suppress + // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement + // executed. Google Test will notify the user of any unexpected + // failure via stderr. + // + // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. + // Users of prior VC versions shall suffer the agony and pain of + // clicking through the countless debug dialogs. + // TODO(vladl@google.com): find a way to suppress the abort dialog() in the + // debug mode when compiled with VC 7.1 or lower. + if (!GTEST_FLAG(break_on_failure)) + _set_abort_behavior( + 0x0, // Clear the following flags: + _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. +#endif + } + + __try { + return impl_->RunAllTests(); + } __except(internal::UnitTestOptions::GTestShouldProcessSEH( + GetExceptionCode())) { + printf("Exception thrown with code 0x%x.\nFAIL\n", GetExceptionCode()); + fflush(stdout); + return 1; + } + +#else // We are on a compiler or platform that doesn't support SEH. + + return impl_->RunAllTests(); +#endif // GTEST_HAS_SEH +} + +// Returns the working directory when the first TEST() or TEST_F() was +// executed. +const char* UnitTest::original_working_dir() const { + return impl_->original_working_dir_.c_str(); +} + +// Returns the TestCase object for the test that's currently running, +// or NULL if no test is running. +// L < mutex_ +const TestCase* UnitTest::current_test_case() const { + internal::MutexLock lock(&mutex_); + return impl_->current_test_case(); +} + +// Returns the TestInfo object for the test that's currently running, +// or NULL if no test is running. +// L < mutex_ +const TestInfo* UnitTest::current_test_info() const { + internal::MutexLock lock(&mutex_); + return impl_->current_test_info(); +} + +// Returns the random seed used at the start of the current test run. +int UnitTest::random_seed() const { return impl_->random_seed(); } + +#if GTEST_HAS_PARAM_TEST +// Returns ParameterizedTestCaseRegistry object used to keep track of +// value-parameterized tests and instantiate and register them. +// L < mutex_ +internal::ParameterizedTestCaseRegistry& + UnitTest::parameterized_test_registry() { + return impl_->parameterized_test_registry(); +} +#endif // GTEST_HAS_PARAM_TEST + +// Creates an empty UnitTest. +UnitTest::UnitTest() { + impl_ = new internal::UnitTestImpl(this); +} + +// Destructor of UnitTest. +UnitTest::~UnitTest() { + delete impl_; +} + +// Pushes a trace defined by SCOPED_TRACE() on to the per-thread +// Google Test trace stack. +// L < mutex_ +void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().push_back(trace); +} + +// Pops a trace from the per-thread Google Test trace stack. +// L < mutex_ +void UnitTest::PopGTestTrace() { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().pop_back(); +} + +namespace internal { + +UnitTestImpl::UnitTestImpl(UnitTest* parent) + : parent_(parent), +#ifdef _MSC_VER +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4355) // Temporarily disables warning 4355 + // (using this in initializer). + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#pragma warning(pop) // Restores the warning state again. +#else + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#endif // _MSC_VER + global_test_part_result_repoter_( + &default_global_test_part_result_reporter_), + per_thread_test_part_result_reporter_( + &default_per_thread_test_part_result_reporter_), +#if GTEST_HAS_PARAM_TEST + parameterized_test_registry_(), + parameterized_tests_registered_(false), +#endif // GTEST_HAS_PARAM_TEST + last_death_test_case_(-1), + current_test_case_(NULL), + current_test_info_(NULL), + ad_hoc_test_result_(), + os_stack_trace_getter_(NULL), + post_flag_parse_init_performed_(false), + random_seed_(0), // Will be overridden by the flag before first use. + random_(0), // Will be reseeded before first use. +#if GTEST_HAS_DEATH_TEST + elapsed_time_(0), + internal_run_death_test_flag_(NULL), + death_test_factory_(new DefaultDeathTestFactory) { +#else + elapsed_time_(0) { +#endif // GTEST_HAS_DEATH_TEST + listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); +} + +UnitTestImpl::~UnitTestImpl() { + // Deletes every TestCase. + ForEach(test_cases_, internal::Delete); + + // Deletes every Environment. + ForEach(environments_, internal::Delete); + + delete os_stack_trace_getter_; +} + +#if GTEST_HAS_DEATH_TEST +// Disables event forwarding if the control is currently in a death test +// subprocess. Must not be called before InitGoogleTest. +void UnitTestImpl::SuppressTestEventsIfInSubprocess() { + if (internal_run_death_test_flag_.get() != NULL) + listeners()->SuppressEventForwarding(); +} +#endif // GTEST_HAS_DEATH_TEST + +// Initializes event listeners performing XML output as specified by +// UnitTestOptions. Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureXmlOutput() { + const String& output_format = UnitTestOptions::GetOutputFormat(); + if (output_format == "xml") { + listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); + } else if (output_format != "") { + printf("WARNING: unrecognized output format \"%s\" ignored.\n", + output_format.c_str()); + fflush(stdout); + } +} + +// Performs initialization dependent upon flag values obtained in +// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to +// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest +// this function is also called from RunAllTests. Since this function can be +// called more than once, it has to be idempotent. +void UnitTestImpl::PostFlagParsingInit() { + // Ensures that this function does not execute more than once. + if (!post_flag_parse_init_performed_) { + post_flag_parse_init_performed_ = true; + +#if GTEST_HAS_DEATH_TEST + InitDeathTestSubprocessControlInfo(); + SuppressTestEventsIfInSubprocess(); +#endif // GTEST_HAS_DEATH_TEST + + // Registers parameterized tests. This makes parameterized tests + // available to the UnitTest reflection API without running + // RUN_ALL_TESTS. + RegisterParameterizedTests(); + + // Configures listeners for XML output. This makes it possible for users + // to shut down the default XML output before invoking RUN_ALL_TESTS. + ConfigureXmlOutput(); + } +} + +// A predicate that checks the name of a TestCase against a known +// value. +// +// This is used for implementation of the UnitTest class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestCaseNameIs is copyable. +class TestCaseNameIs { + public: + // Constructor. + explicit TestCaseNameIs(const String& name) + : name_(name) {} + + // Returns true iff the name of test_case matches name_. + bool operator()(const TestCase* test_case) const { + return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; + } + + private: + String name_; +}; + +// Finds and returns a TestCase with the given name. If one doesn't +// exist, creates one and returns it. It's the CALLER'S +// RESPONSIBILITY to ensure that this function is only called WHEN THE +// TESTS ARE NOT SHUFFLED. +// +// Arguments: +// +// test_case_name: name of the test case +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, + const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) { + // Can we find a TestCase with the given name? + const std::vector::const_iterator test_case = + std::find_if(test_cases_.begin(), test_cases_.end(), + TestCaseNameIs(test_case_name)); + + if (test_case != test_cases_.end()) + return *test_case; + + // No. Let's create one. + TestCase* const new_test_case = + new TestCase(test_case_name, comment, set_up_tc, tear_down_tc); + + // Is this a death test case? + if (internal::UnitTestOptions::MatchesFilter(String(test_case_name), + kDeathTestCaseFilter)) { + // Yes. Inserts the test case after the last death test case + // defined so far. This only works when the test cases haven't + // been shuffled. Otherwise we may end up running a death test + // after a non-death test. + ++last_death_test_case_; + test_cases_.insert(test_cases_.begin() + last_death_test_case_, + new_test_case); + } else { + // No. Appends to the end of the list. + test_cases_.push_back(new_test_case); + } + + test_case_indices_.push_back(static_cast(test_case_indices_.size())); + return new_test_case; +} + +// Helpers for setting up / tearing down the given environment. They +// are for use in the ForEach() function. +static void SetUpEnvironment(Environment* env) { env->SetUp(); } +static void TearDownEnvironment(Environment* env) { env->TearDown(); } + +// Runs all tests in this UnitTest object, prints the result, and +// returns 0 if all tests are successful, or 1 otherwise. If any +// exception is thrown during a test on Windows, this test is +// considered to be failed, but the rest of the tests will still be +// run. (We disable exceptions on Linux and Mac OS X, so the issue +// doesn't apply there.) +// When parameterized tests are enabled, it expands and registers +// parameterized tests first in RegisterParameterizedTests(). +// All other functions called from RunAllTests() may safely assume that +// parameterized tests are ready to be counted and run. +int UnitTestImpl::RunAllTests() { + // Makes sure InitGoogleTest() was called. + if (!GTestIsInitialized()) { + printf("%s", + "\nThis test program did NOT call ::testing::InitGoogleTest " + "before calling RUN_ALL_TESTS(). Please fix it.\n"); + return 1; + } + + // Do not run any test if the --help flag was specified. + if (g_help_flag) + return 0; + + // Repeats the call to the post-flag parsing initialization in case the + // user didn't call InitGoogleTest. + PostFlagParsingInit(); + + // Even if sharding is not on, test runners may want to use the + // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding + // protocol. + internal::WriteToShardStatusFileIfNeeded(); + + // True iff we are in a subprocess for running a thread-safe-style + // death test. + bool in_subprocess_for_death_test = false; + +#if GTEST_HAS_DEATH_TEST + in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); +#endif // GTEST_HAS_DEATH_TEST + + const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, + in_subprocess_for_death_test); + + // Compares the full test names with the filter to decide which + // tests to run. + const bool has_tests_to_run = FilterTests(should_shard + ? HONOR_SHARDING_PROTOCOL + : IGNORE_SHARDING_PROTOCOL) > 0; + + // Lists the tests and exits if the --gtest_list_tests flag was specified. + if (GTEST_FLAG(list_tests)) { + // This must be called *after* FilterTests() has been called. + ListTestsMatchingFilter(); + return 0; + } + + random_seed_ = GTEST_FLAG(shuffle) ? + GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; + + // True iff at least one test has failed. + bool failed = false; + + TestEventListener* repeater = listeners()->repeater(); + + repeater->OnTestProgramStart(*parent_); + + // How many times to repeat the tests? We don't want to repeat them + // when we are inside the subprocess of a death test. + const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); + // Repeats forever if the repeat count is negative. + const bool forever = repeat < 0; + for (int i = 0; forever || i != repeat; i++) { + ClearResult(); + + const TimeInMillis start = GetTimeInMillis(); + + // Shuffles test cases and tests if requested. + if (has_tests_to_run && GTEST_FLAG(shuffle)) { + random()->Reseed(random_seed_); + // This should be done before calling OnTestIterationStart(), + // such that a test event listener can see the actual test order + // in the event. + ShuffleTests(); + } + + // Tells the unit test event listeners that the tests are about to start. + repeater->OnTestIterationStart(*parent_, i); + + // Runs each test case if there is at least one test to run. + if (has_tests_to_run) { + // Sets up all environments beforehand. + repeater->OnEnvironmentsSetUpStart(*parent_); + ForEach(environments_, SetUpEnvironment); + repeater->OnEnvironmentsSetUpEnd(*parent_); + + // Runs the tests only if there was no fatal failure during global + // set-up. + if (!Test::HasFatalFailure()) { + for (int test_index = 0; test_index < total_test_case_count(); + test_index++) { + GetMutableTestCase(test_index)->Run(); + } + } + + // Tears down all environments in reverse order afterwards. + repeater->OnEnvironmentsTearDownStart(*parent_); + std::for_each(environments_.rbegin(), environments_.rend(), + TearDownEnvironment); + repeater->OnEnvironmentsTearDownEnd(*parent_); + } + + elapsed_time_ = GetTimeInMillis() - start; + + // Tells the unit test event listener that the tests have just finished. + repeater->OnTestIterationEnd(*parent_, i); + + // Gets the result and clears it. + if (!Passed()) { + failed = true; + } + + // Restores the original test order after the iteration. This + // allows the user to quickly repro a failure that happens in the + // N-th iteration without repeating the first (N - 1) iterations. + // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in + // case the user somehow changes the value of the flag somewhere + // (it's always safe to unshuffle the tests). + UnshuffleTests(); + + if (GTEST_FLAG(shuffle)) { + // Picks a new random seed for each iteration. + random_seed_ = GetNextRandomSeed(random_seed_); + } + } + + repeater->OnTestProgramEnd(*parent_); + + // Returns 0 if all tests passed, or 1 other wise. + return failed ? 1 : 0; +} + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded() { + const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); + if (test_shard_file != NULL) { + FILE* const file = posix::FOpen(test_shard_file, "w"); + if (file == NULL) { + ColoredPrintf(COLOR_RED, + "Could not write to the test shard status file \"%s\" " + "specified by the %s environment variable.\n", + test_shard_file, kTestShardStatusFile); + fflush(stdout); + exit(EXIT_FAILURE); + } + fclose(file); + } +} + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (i.e., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +bool ShouldShard(const char* total_shards_env, + const char* shard_index_env, + bool in_subprocess_for_death_test) { + if (in_subprocess_for_death_test) { + return false; + } + + const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); + const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); + + if (total_shards == -1 && shard_index == -1) { + return false; + } else if (total_shards == -1 && shard_index != -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestShardIndex << " = " << shard_index + << ", but have left " << kTestTotalShards << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (total_shards != -1 && shard_index == -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestTotalShards << " = " << total_shards + << ", but have left " << kTestShardIndex << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (shard_index < 0 || shard_index >= total_shards) { + const Message msg = Message() + << "Invalid environment variables: we require 0 <= " + << kTestShardIndex << " < " << kTestTotalShards + << ", but you have " << kTestShardIndex << "=" << shard_index + << ", " << kTestTotalShards << "=" << total_shards << ".\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } + + return total_shards > 1; +} + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error +// and aborts. +Int32 Int32FromEnvOrDie(const char* const var, Int32 default_val) { + const char* str_val = posix::GetEnv(var); + if (str_val == NULL) { + return default_val; + } + + Int32 result; + if (!ParseInt32(Message() << "The value of environment variable " << var, + str_val, &result)) { + exit(EXIT_FAILURE); + } + return result; +} + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { + return (test_id % total_shards) == shard_index; +} + +// Compares the name of each test with the user-specified filter to +// decide whether the test should be run, then records the result in +// each TestCase and TestInfo object. +// If shard_tests == true, further filters tests based on sharding +// variables in the environment - see +// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. +// Returns the number of tests that should run. +int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { + const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestTotalShards, -1) : -1; + const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestShardIndex, -1) : -1; + + // num_runnable_tests are the number of tests that will + // run across all shards (i.e., match filter and are not disabled). + // num_selected_tests are the number of tests to be run on + // this shard. + int num_runnable_tests = 0; + int num_selected_tests = 0; + for (size_t i = 0; i < test_cases_.size(); i++) { + TestCase* const test_case = test_cases_[i]; + const String &test_case_name = test_case->name(); + test_case->set_should_run(false); + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + TestInfo* const test_info = test_case->test_info_list()[j]; + const String test_name(test_info->name()); + // A test is disabled if test case name or test name matches + // kDisableTestFilter. + const bool is_disabled = + internal::UnitTestOptions::MatchesFilter(test_case_name, + kDisableTestFilter) || + internal::UnitTestOptions::MatchesFilter(test_name, + kDisableTestFilter); + test_info->impl()->set_is_disabled(is_disabled); + + const bool matches_filter = + internal::UnitTestOptions::FilterMatchesTest(test_case_name, + test_name); + test_info->impl()->set_matches_filter(matches_filter); + + const bool is_runnable = + (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && + matches_filter; + + const bool is_selected = is_runnable && + (shard_tests == IGNORE_SHARDING_PROTOCOL || + ShouldRunTestOnShard(total_shards, shard_index, + num_runnable_tests)); + + num_runnable_tests += is_runnable; + num_selected_tests += is_selected; + + test_info->impl()->set_should_run(is_selected); + test_case->set_should_run(test_case->should_run() || is_selected); + } + } + return num_selected_tests; +} + +// Prints the names of the tests matching the user-specified filter flag. +void UnitTestImpl::ListTestsMatchingFilter() { + for (size_t i = 0; i < test_cases_.size(); i++) { + const TestCase* const test_case = test_cases_[i]; + bool printed_test_case_name = false; + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + const TestInfo* const test_info = + test_case->test_info_list()[j]; + if (test_info->matches_filter()) { + if (!printed_test_case_name) { + printed_test_case_name = true; + printf("%s.\n", test_case->name()); + } + printf(" %s\n", test_info->name()); + } + } + } + fflush(stdout); +} + +// Sets the OS stack trace getter. +// +// Does nothing if the input and the current OS stack trace getter are +// the same; otherwise, deletes the old getter and makes the input the +// current getter. +void UnitTestImpl::set_os_stack_trace_getter( + OsStackTraceGetterInterface* getter) { + if (os_stack_trace_getter_ != getter) { + delete os_stack_trace_getter_; + os_stack_trace_getter_ = getter; + } +} + +// Returns the current OS stack trace getter if it is not NULL; +// otherwise, creates an OsStackTraceGetter, makes it the current +// getter, and returns it. +OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { + if (os_stack_trace_getter_ == NULL) { + os_stack_trace_getter_ = new OsStackTraceGetter; + } + + return os_stack_trace_getter_; +} + +// Returns the TestResult for the test that's currently running, or +// the TestResult for the ad hoc test if no test is running. +TestResult* UnitTestImpl::current_test_result() { + return current_test_info_ ? + current_test_info_->impl()->result() : &ad_hoc_test_result_; +} + +// Shuffles all test cases, and the tests within each test case, +// making sure that death tests are still run first. +void UnitTestImpl::ShuffleTests() { + // Shuffles the death test cases. + ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); + + // Shuffles the non-death test cases. + ShuffleRange(random(), last_death_test_case_ + 1, + static_cast(test_cases_.size()), &test_case_indices_); + + // Shuffles the tests inside each test case. + for (size_t i = 0; i < test_cases_.size(); i++) { + test_cases_[i]->ShuffleTests(random()); + } +} + +// Restores the test cases and tests to their order before the first shuffle. +void UnitTestImpl::UnshuffleTests() { + for (size_t i = 0; i < test_cases_.size(); i++) { + // Unshuffles the tests in each test case. + test_cases_[i]->UnshuffleTests(); + // Resets the index of each test case. + test_case_indices_[i] = static_cast(i); + } +} + +// TestInfoImpl constructor. The new instance assumes ownership of the test +// factory object. +TestInfoImpl::TestInfoImpl(TestInfo* parent, + const char* a_test_case_name, + const char* a_name, + const char* a_test_case_comment, + const char* a_comment, + TypeId a_fixture_class_id, + internal::TestFactoryBase* factory) : + parent_(parent), + test_case_name_(String(a_test_case_name)), + name_(String(a_name)), + test_case_comment_(String(a_test_case_comment)), + comment_(String(a_comment)), + fixture_class_id_(a_fixture_class_id), + should_run_(false), + is_disabled_(false), + matches_filter_(false), + factory_(factory) { +} + +// TestInfoImpl destructor. +TestInfoImpl::~TestInfoImpl() { + delete factory_; +} + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +String GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, + int skip_count) { + // We pass skip_count + 1 to skip this wrapper function in addition + // to what the user really wants to skip. + return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); +} + +// Used by the GTEST_HIDE_UNREACHABLE_CODE_ macro to suppress unreachable +// code warnings. +namespace { +class ClassUniqueToAlwaysTrue {}; +} + +bool IsTrue(bool condition) { return condition; } + +bool AlwaysTrue() { +#if GTEST_HAS_EXCEPTIONS + // This condition is always false so AlwaysTrue() never actually throws, + // but it makes the compiler think that it may throw. + if (IsTrue(false)) + throw ClassUniqueToAlwaysTrue(); +#endif // GTEST_HAS_EXCEPTIONS + return true; +} + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr) { + const size_t prefix_len = strlen(prefix); + if (strncmp(*pstr, prefix, prefix_len) == 0) { + *pstr += prefix_len; + return true; + } + return false; +} + +// Parses a string as a command line flag. The string should have +// the format "--flag=value". When def_optional is true, the "=value" +// part can be omitted. +// +// Returns the value of the flag, or NULL if the parsing failed. +const char* ParseFlagValue(const char* str, + const char* flag, + bool def_optional) { + // str and flag must not be NULL. + if (str == NULL || flag == NULL) return NULL; + + // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. + const String flag_str = String::Format("--%s%s", GTEST_FLAG_PREFIX_, flag); + const size_t flag_len = flag_str.length(); + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + + // Skips the flag name. + const char* flag_end = str + flag_len; + + // When def_optional is true, it's OK to not have a "=value" part. + if (def_optional && (flag_end[0] == '\0')) { + return flag_end; + } + + // If def_optional is true and there are more characters after the + // flag name, or if def_optional is false, there must be a '=' after + // the flag name. + if (flag_end[0] != '=') return NULL; + + // Returns the string after "=". + return flag_end + 1; +} + +// Parses a string for a bool flag, in the form of either +// "--flag=value" or "--flag". +// +// In the former case, the value is taken as true as long as it does +// not start with '0', 'f', or 'F'. +// +// In the latter case, the value is taken as true. +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseBoolFlag(const char* str, const char* flag, bool* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, true); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Converts the string value to a bool. + *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); + return true; +} + +// Parses a string for an Int32 flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + return ParseInt32(Message() << "The value of flag --" << flag, + value_str, value); +} + +// Parses a string for a string flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseStringFlag(const char* str, const char* flag, String* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + *value = value_str; + return true; +} + +// Determines whether a string has a prefix that Google Test uses for its +// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. +// If Google Test detects that a command line flag has its prefix but is not +// recognized, it will print its help message. Flags starting with +// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test +// internal flags and do not trigger the help message. +static bool HasGoogleTestFlagPrefix(const char* str) { + return (SkipPrefix("--", &str) || + SkipPrefix("-", &str) || + SkipPrefix("/", &str)) && + !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && + (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || + SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); +} + +// Prints a string containing code-encoded text. The following escape +// sequences can be used in the string to control the text color: +// +// @@ prints a single '@' character. +// @R changes the color to red. +// @G changes the color to green. +// @Y changes the color to yellow. +// @D changes to the default terminal text color. +// +// TODO(wan@google.com): Write tests for this once we add stdout +// capturing to Google Test. +static void PrintColorEncoded(const char* str) { + GTestColor color = COLOR_DEFAULT; // The current color. + + // Conceptually, we split the string into segments divided by escape + // sequences. Then we print one segment at a time. At the end of + // each iteration, the str pointer advances to the beginning of the + // next segment. + for (;;) { + const char* p = strchr(str, '@'); + if (p == NULL) { + ColoredPrintf(color, "%s", str); + return; + } + + ColoredPrintf(color, "%s", String(str, p - str).c_str()); + + const char ch = p[1]; + str = p + 2; + if (ch == '@') { + ColoredPrintf(color, "@"); + } else if (ch == 'D') { + color = COLOR_DEFAULT; + } else if (ch == 'R') { + color = COLOR_RED; + } else if (ch == 'G') { + color = COLOR_GREEN; + } else if (ch == 'Y') { + color = COLOR_YELLOW; + } else { + --str; + } + } +} + +static const char kColorEncodedHelpMessage[] = +"This program contains tests written using " GTEST_NAME_ ". You can use the\n" +"following command line flags to control its behavior:\n" +"\n" +"Test Selection:\n" +" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" +" List the names of all tests instead of running them. The name of\n" +" TEST(Foo, Bar) is \"Foo.Bar\".\n" +" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" + "[@G-@YNEGATIVE_PATTERNS]@D\n" +" Run only the tests whose name matches one of the positive patterns but\n" +" none of the negative patterns. '?' matches any single character; '*'\n" +" matches any substring; ':' separates two patterns.\n" +" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" +" Run all disabled tests too.\n" +"\n" +"Test Execution:\n" +" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" +" Run the tests repeatedly; use a negative count to repeat forever.\n" +" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" +" Randomize tests' orders on every iteration.\n" +" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" +" Random number seed to use for shuffling test orders (between 1 and\n" +" 99999, or 0 to use a seed based on the current time).\n" +"\n" +"Test Output:\n" +" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" +" Enable/disable colored output. The default is @Gauto@D.\n" +" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" +" Don't print the elapsed time of each test.\n" +" @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" + GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" +" Generate an XML report in the given directory or with the given file\n" +" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +"\n" +"Assertion Behavior:\n" +#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" +" Set the default death test style.\n" +#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" +" Turn assertion failures into debugger break-points.\n" +" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" +" Turn assertion failures into C++ exceptions.\n" +#if GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions@D\n" +" Suppress pop-ups caused by exceptions.\n" +#endif // GTEST_OS_WINDOWS +"\n" +"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " + "the corresponding\n" +"environment variable of a flag (all letters in upper-case). For example, to\n" +"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ + "color=no@D or set\n" +"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" +"\n" +"For more information, please read the " GTEST_NAME_ " documentation at\n" +"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" +"(not one in your own code or tests), please report it to\n" +"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. The type parameter CharType can be +// instantiated to either char or wchar_t. +template +void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { + for (int i = 1; i < *argc; i++) { + const String arg_string = StreamableToString(argv[i]); + const char* const arg = arg_string.c_str(); + + using internal::ParseBoolFlag; + using internal::ParseInt32Flag; + using internal::ParseStringFlag; + + // Do we see a Google Test flag? + if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, + >EST_FLAG(also_run_disabled_tests)) || + ParseBoolFlag(arg, kBreakOnFailureFlag, + >EST_FLAG(break_on_failure)) || + ParseBoolFlag(arg, kCatchExceptionsFlag, + >EST_FLAG(catch_exceptions)) || + ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || + ParseStringFlag(arg, kDeathTestStyleFlag, + >EST_FLAG(death_test_style)) || + ParseBoolFlag(arg, kDeathTestUseFork, + >EST_FLAG(death_test_use_fork)) || + ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || + ParseStringFlag(arg, kInternalRunDeathTestFlag, + >EST_FLAG(internal_run_death_test)) || + ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || + ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || + ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || + ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || + ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || + ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || + ParseInt32Flag(arg, kStackTraceDepthFlag, + >EST_FLAG(stack_trace_depth)) || + ParseBoolFlag(arg, kThrowOnFailureFlag, >EST_FLAG(throw_on_failure)) + ) { + // Yes. Shift the remainder of the argv list left by one. Note + // that argv has (*argc + 1) elements, the last one always being + // NULL. The following loop moves the trailing NULL element as + // well. + for (int j = i; j != *argc; j++) { + argv[j] = argv[j + 1]; + } + + // Decrements the argument count. + (*argc)--; + + // We also need to decrement the iterator as we just removed + // an element. + i--; + } else if (arg_string == "--help" || arg_string == "-h" || + arg_string == "-?" || arg_string == "/?" || + HasGoogleTestFlagPrefix(arg)) { + // Both help flag and unrecognized Google Test flags (excluding + // internal ones) trigger help display. + g_help_flag = true; + } + } + + if (g_help_flag) { + // We print the help here instead of in RUN_ALL_TESTS(), as the + // latter may not be called at all if the user is using Google + // Test with another testing framework. + PrintColorEncoded(kColorEncodedHelpMessage); + } +} + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +void ParseGoogleTestFlagsOnly(int* argc, char** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} +void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} + +// The internal implementation of InitGoogleTest(). +// +// The type parameter CharType can be instantiated to either char or +// wchar_t. +template +void InitGoogleTestImpl(int* argc, CharType** argv) { + g_init_gtest_count++; + + // We don't want to run the initialization code twice. + if (g_init_gtest_count != 1) return; + + if (*argc <= 0) return; + + internal::g_executable_path = internal::StreamableToString(argv[0]); + +#if GTEST_HAS_DEATH_TEST + g_argvs.clear(); + for (int i = 0; i != *argc; i++) { + g_argvs.push_back(StreamableToString(argv[i])); + } +#endif // GTEST_HAS_DEATH_TEST + + ParseGoogleTestFlagsOnly(argc, argv); + GetUnitTestImpl()->PostFlagParsingInit(); +} + +} // namespace internal + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +void InitGoogleTest(int* argc, char** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +void InitGoogleTest(int* argc, wchar_t** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +} // namespace testing +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) +// +// This file implements death tests. + + +#if GTEST_HAS_DEATH_TEST + +#if GTEST_OS_MAC +#include +#endif // GTEST_OS_MAC + +#include +#include +#include +#include + +#if GTEST_OS_WINDOWS +#include +#else +#include +#include +#endif // GTEST_OS_WINDOWS + +#endif // GTEST_HAS_DEATH_TEST + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +// Constants. + +// The default death test style. +static const char kDefaultDeathTestStyle[] = "fast"; + +GTEST_DEFINE_string_( + death_test_style, + internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), + "Indicates how to run a death test in a forked child process: " + "\"threadsafe\" (child process re-executes the test binary " + "from the beginning, running only the specific death test) or " + "\"fast\" (child process runs the death test immediately " + "after forking)."); + +GTEST_DEFINE_bool_( + death_test_use_fork, + internal::BoolFromGTestEnv("death_test_use_fork", false), + "Instructs to use fork()/_exit() instead of clone() in death tests. " + "Ignored and always uses fork() on POSIX systems where clone() is not " + "implemented. Useful when running under valgrind or similar tools if " + "those do not support clone(). Valgrind 3.3.1 will just fail if " + "it sees an unsupported combination of clone() flags. " + "It is not recommended to use this flag w/o valgrind though it will " + "work in 99% of the cases. Once valgrind is fixed, this flag will " + "most likely be removed."); + +namespace internal { +GTEST_DEFINE_string_( + internal_run_death_test, "", + "Indicates the file, line number, temporal index of " + "the single death test to run, and a file descriptor to " + "which a success code may be sent, all separated by " + "colons. This flag is specified if and only if the current " + "process is a sub-process launched for running a thread-safe " + "death test. FOR INTERNAL USE ONLY."); +} // namespace internal + +#if GTEST_HAS_DEATH_TEST + +// ExitedWithCode constructor. +ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { +} + +// ExitedWithCode function-call operator. +bool ExitedWithCode::operator()(int exit_status) const { +#if GTEST_OS_WINDOWS + return exit_status == exit_code_; +#else + return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; +#endif // GTEST_OS_WINDOWS +} + +#if !GTEST_OS_WINDOWS +// KilledBySignal constructor. +KilledBySignal::KilledBySignal(int signum) : signum_(signum) { +} + +// KilledBySignal function-call operator. +bool KilledBySignal::operator()(int exit_status) const { + return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; +} +#endif // !GTEST_OS_WINDOWS + +namespace internal { + +// Utilities needed for death tests. + +// Generates a textual description of a given exit code, in the format +// specified by wait(2). +static String ExitSummary(int exit_code) { + Message m; +#if GTEST_OS_WINDOWS + m << "Exited with exit status " << exit_code; +#else + if (WIFEXITED(exit_code)) { + m << "Exited with exit status " << WEXITSTATUS(exit_code); + } else if (WIFSIGNALED(exit_code)) { + m << "Terminated by signal " << WTERMSIG(exit_code); + } +#ifdef WCOREDUMP + if (WCOREDUMP(exit_code)) { + m << " (core dumped)"; + } +#endif +#endif // GTEST_OS_WINDOWS + return m.GetString(); +} + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +bool ExitedUnsuccessfully(int exit_status) { + return !ExitedWithCode(0)(exit_status); +} + +#if !GTEST_OS_WINDOWS +// Generates a textual failure message when a death test finds more than +// one thread running, or cannot determine the number of threads, prior +// to executing the given statement. It is the responsibility of the +// caller not to pass a thread_count of 1. +static String DeathTestThreadWarning(size_t thread_count) { + Message msg; + msg << "Death tests use fork(), which is unsafe particularly" + << " in a threaded context. For this test, " << GTEST_NAME_ << " "; + if (thread_count == 0) + msg << "couldn't detect the number of threads."; + else + msg << "detected " << thread_count << " threads."; + return msg.GetString(); +} +#endif // !GTEST_OS_WINDOWS + +// Flag characters for reporting a death test that did not die. +static const char kDeathTestLived = 'L'; +static const char kDeathTestReturned = 'R'; +static const char kDeathTestInternalError = 'I'; + +// An enumeration describing all of the possible ways that a death test +// can conclude. DIED means that the process died while executing the +// test code; LIVED means that process lived beyond the end of the test +// code; and RETURNED means that the test statement attempted a "return," +// which is not allowed. IN_PROGRESS means the test has not yet +// concluded. +enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED }; + +// Routine for aborting the program which is safe to call from an +// exec-style death test child process, in which case the error +// message is propagated back to the parent process. Otherwise, the +// message is simply printed to stderr. In either case, the program +// then exits with status 1. +void DeathTestAbort(const String& message) { + // On a POSIX system, this function may be called from a threadsafe-style + // death test child process, which operates on a very small stack. Use + // the heap for any additional non-minuscule memory requirements. + const InternalRunDeathTestFlag* const flag = + GetUnitTestImpl()->internal_run_death_test_flag(); + if (flag != NULL) { + FILE* parent = posix::FDOpen(flag->write_fd(), "w"); + fputc(kDeathTestInternalError, parent); + fprintf(parent, "%s", message.c_str()); + fflush(parent); + _exit(1); + } else { + fprintf(stderr, "%s", message.c_str()); + fflush(stderr); + abort(); + } +} + +// A replacement for CHECK that calls DeathTestAbort if the assertion +// fails. +#define GTEST_DEATH_TEST_CHECK_(expression) \ + do { \ + if (!::testing::internal::IsTrue(expression)) { \ + DeathTestAbort(::testing::internal::String::Format( \ + "CHECK failed: File %s, line %d: %s", \ + __FILE__, __LINE__, #expression)); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for +// evaluating any system call that fulfills two conditions: it must return +// -1 on failure, and set errno to EINTR when it is interrupted and +// should be tried again. The macro expands to a loop that repeatedly +// evaluates the expression as long as it evaluates to -1 and sets +// errno to EINTR. If the expression evaluates to -1 but errno is +// something other than EINTR, DeathTestAbort is called. +#define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ + do { \ + int gtest_retval; \ + do { \ + gtest_retval = (expression); \ + } while (gtest_retval == -1 && errno == EINTR); \ + if (gtest_retval == -1) { \ + DeathTestAbort(::testing::internal::String::Format( \ + "CHECK failed: File %s, line %d: %s != -1", \ + __FILE__, __LINE__, #expression)); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// Returns the message describing the last system error in errno. +String GetLastErrnoDescription() { + return String(errno == 0 ? "" : posix::StrError(errno)); +} + +// This is called from a death test parent process to read a failure +// message from the death test child process and log it with the FATAL +// severity. On Windows, the message is read from a pipe handle. On other +// platforms, it is read from a file descriptor. +static void FailFromInternalError(int fd) { + Message error; + char buffer[256]; + int num_read; + + do { + while ((num_read = posix::Read(fd, buffer, 255)) > 0) { + buffer[num_read] = '\0'; + error << buffer; + } + } while (num_read == -1 && errno == EINTR); + + if (num_read == 0) { + GTEST_LOG_(FATAL) << error.GetString(); + } else { + const int last_error = errno; + GTEST_LOG_(FATAL) << "Error while reading death test internal: " + << GetLastErrnoDescription() << " [" << last_error << "]"; + } +} + +// Death test constructor. Increments the running death test count +// for the current test. +DeathTest::DeathTest() { + TestInfo* const info = GetUnitTestImpl()->current_test_info(); + if (info == NULL) { + DeathTestAbort("Cannot run a death test outside of a TEST or " + "TEST_F construct"); + } +} + +// Creates and returns a death test by dispatching to the current +// death test factory. +bool DeathTest::Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) { + return GetUnitTestImpl()->death_test_factory()->Create( + statement, regex, file, line, test); +} + +const char* DeathTest::LastMessage() { + return last_death_test_message_.c_str(); +} + +void DeathTest::set_last_death_test_message(const String& message) { + last_death_test_message_ = message; +} + +String DeathTest::last_death_test_message_; + +// Provides cross platform implementation for some death functionality. +class DeathTestImpl : public DeathTest { + protected: + DeathTestImpl(const char* a_statement, const RE* a_regex) + : statement_(a_statement), + regex_(a_regex), + spawned_(false), + status_(-1), + outcome_(IN_PROGRESS), + read_fd_(-1), + write_fd_(-1) {} + + // read_fd_ is expected to be closed and cleared by a derived class. + ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } + + void Abort(AbortReason reason); + virtual bool Passed(bool status_ok); + + const char* statement() const { return statement_; } + const RE* regex() const { return regex_; } + bool spawned() const { return spawned_; } + void set_spawned(bool is_spawned) { spawned_ = is_spawned; } + int status() const { return status_; } + void set_status(int a_status) { status_ = a_status; } + DeathTestOutcome outcome() const { return outcome_; } + void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } + int read_fd() const { return read_fd_; } + void set_read_fd(int fd) { read_fd_ = fd; } + int write_fd() const { return write_fd_; } + void set_write_fd(int fd) { write_fd_ = fd; } + + // Called in the parent process only. Reads the result code of the death + // test child process via a pipe, interprets it to set the outcome_ + // member, and closes read_fd_. Outputs diagnostics and terminates in + // case of unexpected codes. + void ReadAndInterpretStatusByte(); + + private: + // The textual content of the code this object is testing. This class + // doesn't own this string and should not attempt to delete it. + const char* const statement_; + // The regular expression which test output must match. DeathTestImpl + // doesn't own this object and should not attempt to delete it. + const RE* const regex_; + // True if the death test child process has been successfully spawned. + bool spawned_; + // The exit status of the child process. + int status_; + // How the death test concluded. + DeathTestOutcome outcome_; + // Descriptor to the read end of the pipe to the child process. It is + // always -1 in the child process. The child keeps its write end of the + // pipe in write_fd_. + int read_fd_; + // Descriptor to the child's write end of the pipe to the parent process. + // It is always -1 in the parent process. The parent keeps its end of the + // pipe in read_fd_. + int write_fd_; +}; + +// Called in the parent process only. Reads the result code of the death +// test child process via a pipe, interprets it to set the outcome_ +// member, and closes read_fd_. Outputs diagnostics and terminates in +// case of unexpected codes. +void DeathTestImpl::ReadAndInterpretStatusByte() { + char flag; + int bytes_read; + + // The read() here blocks until data is available (signifying the + // failure of the death test) or until the pipe is closed (signifying + // its success), so it's okay to call this in the parent before + // the child process has exited. + do { + bytes_read = posix::Read(read_fd(), &flag, 1); + } while (bytes_read == -1 && errno == EINTR); + + if (bytes_read == 0) { + set_outcome(DIED); + } else if (bytes_read == 1) { + switch (flag) { + case kDeathTestReturned: + set_outcome(RETURNED); + break; + case kDeathTestLived: + set_outcome(LIVED); + break; + case kDeathTestInternalError: + FailFromInternalError(read_fd()); // Does not return. + break; + default: + GTEST_LOG_(FATAL) << "Death test child process reported " + << "unexpected status byte (" + << static_cast(flag) << ")"; + } + } else { + GTEST_LOG_(FATAL) << "Read from death test child process failed: " + << GetLastErrnoDescription(); + } + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); + set_read_fd(-1); +} + +// Signals that the death test code which should have exited, didn't. +// Should be called only in a death test child process. +// Writes a status byte to the child's status file descriptor, then +// calls _exit(1). +void DeathTestImpl::Abort(AbortReason reason) { + // The parent process considers the death test to be a failure if + // it finds any data in our pipe. So, here we write a single flag byte + // to the pipe, then exit. + const char status_ch = + reason == TEST_DID_NOT_DIE ? kDeathTestLived : kDeathTestReturned; + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(write_fd())); + _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) +} + +// Assesses the success or failure of a death test, using both private +// members which have previously been set, and one argument: +// +// Private data members: +// outcome: An enumeration describing how the death test +// concluded: DIED, LIVED, or RETURNED. The death test fails +// in the latter two cases. +// status: The exit status of the child process. On *nix, it is in the +// in the format specified by wait(2). On Windows, this is the +// value supplied to the ExitProcess() API or a numeric code +// of the exception that terminated the program. +// regex: A regular expression object to be applied to +// the test's captured standard error output; the death test +// fails if it does not match. +// +// Argument: +// status_ok: true if exit_status is acceptable in the context of +// this particular death test, which fails if it is false +// +// Returns true iff all of the above conditions are met. Otherwise, the +// first failing condition, in the order given above, is the one that is +// reported. Also sets the last death test message string. +bool DeathTestImpl::Passed(bool status_ok) { + if (!spawned()) + return false; + + const String error_message = GetCapturedStderr(); + + bool success = false; + Message buffer; + + buffer << "Death test: " << statement() << "\n"; + switch (outcome()) { + case LIVED: + buffer << " Result: failed to die.\n" + << " Error msg: " << error_message; + break; + case RETURNED: + buffer << " Result: illegal return in test statement.\n" + << " Error msg: " << error_message; + break; + case DIED: + if (status_ok) { + const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); + if (matched) { + success = true; + } else { + buffer << " Result: died but not with expected error.\n" + << " Expected: " << regex()->pattern() << "\n" + << "Actual msg: " << error_message; + } + } else { + buffer << " Result: died but not with expected exit code:\n" + << " " << ExitSummary(status()) << "\n"; + } + break; + case IN_PROGRESS: + default: + GTEST_LOG_(FATAL) + << "DeathTest::Passed somehow called before conclusion of test"; + } + + DeathTest::set_last_death_test_message(buffer.GetString()); + return success; +} + +#if GTEST_OS_WINDOWS +// WindowsDeathTest implements death tests on Windows. Due to the +// specifics of starting new processes on Windows, death tests there are +// always threadsafe, and Google Test considers the +// --gtest_death_test_style=fast setting to be equivalent to +// --gtest_death_test_style=threadsafe there. +// +// A few implementation notes: Like the Linux version, the Windows +// implementation uses pipes for child-to-parent communication. But due to +// the specifics of pipes on Windows, some extra steps are required: +// +// 1. The parent creates a communication pipe and stores handles to both +// ends of it. +// 2. The parent starts the child and provides it with the information +// necessary to acquire the handle to the write end of the pipe. +// 3. The child acquires the write end of the pipe and signals the parent +// using a Windows event. +// 4. Now the parent can release the write end of the pipe on its side. If +// this is done before step 3, the object's reference count goes down to +// 0 and it is destroyed, preventing the child from acquiring it. The +// parent now has to release it, or read operations on the read end of +// the pipe will not return when the child terminates. +// 5. The parent reads child's output through the pipe (outcome code and +// any possible error messages) from the pipe, and its stderr and then +// determines whether to fail the test. +// +// Note: to distinguish Win32 API calls from the local method and function +// calls, the former are explicitly resolved in the global namespace. +// +class WindowsDeathTest : public DeathTestImpl { + public: + WindowsDeathTest(const char* statement, + const RE* regex, + const char* file, + int line) + : DeathTestImpl(statement, regex), file_(file), line_(line) {} + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + virtual TestRole AssumeRole(); + + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; + // Handle to the write end of the pipe to the child process. + AutoHandle write_handle_; + // Child process handle. + AutoHandle child_handle_; + // Event the child process uses to signal the parent that it has + // acquired the handle to the write end of the pipe. After seeing this + // event the parent can release its own handles to make sure its + // ReadFile() calls return when the child terminates. + AutoHandle event_handle_; +}; + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int WindowsDeathTest::Wait() { + if (!spawned()) + return 0; + + // Wait until the child either signals that it has acquired the write end + // of the pipe or it dies. + const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; + switch (::WaitForMultipleObjects(2, + wait_handles, + FALSE, // Waits for any of the handles. + INFINITE)) { + case WAIT_OBJECT_0: + case WAIT_OBJECT_0 + 1: + break; + default: + GTEST_DEATH_TEST_CHECK_(false); // Should not get here. + } + + // The child has acquired the write end of the pipe or exited. + // We release the handle on our side and continue. + write_handle_.Reset(); + event_handle_.Reset(); + + ReadAndInterpretStatusByte(); + + // Waits for the child process to exit if it haven't already. This + // returns immediately if the child has already exited, regardless of + // whether previous calls to WaitForMultipleObjects synchronized on this + // handle or not. + GTEST_DEATH_TEST_CHECK_( + WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), + INFINITE)); + DWORD status; + GTEST_DEATH_TEST_CHECK_(::GetExitCodeProcess(child_handle_.Get(), &status) + != FALSE); + child_handle_.Reset(); + set_status(static_cast(status)); + return this->status(); +} + +// The AssumeRole process for a Windows death test. It creates a child +// process with the same executable as the current process to run the +// death test. The child process is given the --gtest_filter and +// --gtest_internal_run_death_test flags such that it knows to run the +// current death test only. +DeathTest::TestRole WindowsDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + // ParseInternalRunDeathTestFlag() has performed all the necessary + // processing. + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + // WindowsDeathTest uses an anonymous pipe to communicate results of + // a death test. + SECURITY_ATTRIBUTES handles_are_inheritable = { + sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + HANDLE read_handle, write_handle; + GTEST_DEATH_TEST_CHECK_( + ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, + 0) // Default buffer size. + != FALSE); + set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), + O_RDONLY)); + write_handle_.Reset(write_handle); + event_handle_.Reset(::CreateEvent( + &handles_are_inheritable, + TRUE, // The event will automatically reset to non-signaled state. + FALSE, // The initial state is non-signalled. + NULL)); // The even is unnamed. + GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); + const String filter_flag = String::Format("--%s%s=%s.%s", + GTEST_FLAG_PREFIX_, kFilterFlag, + info->test_case_name(), + info->name()); + const String internal_flag = String::Format( + "--%s%s=%s|%d|%d|%u|%Iu|%Iu", + GTEST_FLAG_PREFIX_, + kInternalRunDeathTestFlag, + file_, line_, + death_test_index, + static_cast(::GetCurrentProcessId()), + // size_t has the same with as pointers on both 32-bit and 64-bit + // Windows platforms. + // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. + reinterpret_cast(write_handle), + reinterpret_cast(event_handle_.Get())); + + char executable_path[_MAX_PATH + 1]; // NOLINT + GTEST_DEATH_TEST_CHECK_( + _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, + executable_path, + _MAX_PATH)); + + String command_line = String::Format("%s %s \"%s\"", + ::GetCommandLineA(), + filter_flag.c_str(), + internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // Flush the log buffers since the log streams are shared with the child. + FlushInfoLog(); + + // The child process will share the standard handles with the parent. + STARTUPINFOA startup_info; + memset(&startup_info, 0, sizeof(STARTUPINFO)); + startup_info.dwFlags = STARTF_USESTDHANDLES; + startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); + startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); + startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); + + PROCESS_INFORMATION process_info; + GTEST_DEATH_TEST_CHECK_(::CreateProcessA( + executable_path, + const_cast(command_line.c_str()), + NULL, // Retuned process handle is not inheritable. + NULL, // Retuned thread handle is not inheritable. + TRUE, // Child inherits all inheritable handles (for write_handle_). + 0x0, // Default creation flags. + NULL, // Inherit the parent's environment. + UnitTest::GetInstance()->original_working_dir(), + &startup_info, + &process_info) != FALSE); + child_handle_.Reset(process_info.hProcess); + ::CloseHandle(process_info.hThread); + set_spawned(true); + return OVERSEE_TEST; +} +#else // We are not on Windows. + +// ForkingDeathTest provides implementations for most of the abstract +// methods of the DeathTest interface. Only the AssumeRole method is +// left undefined. +class ForkingDeathTest : public DeathTestImpl { + public: + ForkingDeathTest(const char* statement, const RE* regex); + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + + protected: + void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } + + private: + // PID of child process during death test; 0 in the child process itself. + pid_t child_pid_; +}; + +// Constructs a ForkingDeathTest. +ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) + : DeathTestImpl(a_statement, a_regex), + child_pid_(-1) {} + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int ForkingDeathTest::Wait() { + if (!spawned()) + return 0; + + ReadAndInterpretStatusByte(); + + int status_value; + GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); + set_status(status_value); + return status_value; +} + +// A concrete death test class that forks, then immediately runs the test +// in the child process. +class NoExecDeathTest : public ForkingDeathTest { + public: + NoExecDeathTest(const char* a_statement, const RE* a_regex) : + ForkingDeathTest(a_statement, a_regex) { } + virtual TestRole AssumeRole(); +}; + +// The AssumeRole process for a fork-and-run death test. It implements a +// straightforward fork, with a simple pipe to transmit the status byte. +DeathTest::TestRole NoExecDeathTest::AssumeRole() { + const size_t thread_count = GetThreadCount(); + if (thread_count != 1) { + GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + + DeathTest::set_last_death_test_message(""); + CaptureStderr(); + // When we fork the process below, the log file buffers are copied, but the + // file descriptors are shared. We flush all log files here so that closing + // the file descriptors in the child process doesn't throw off the + // synchronization between descriptors and buffers in the parent process. + // This is as close to the fork as possible to avoid a race condition in case + // there are multiple threads running before the death test, and another + // thread writes to the log file. + FlushInfoLog(); + + const pid_t child_pid = fork(); + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + set_child_pid(child_pid); + if (child_pid == 0) { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); + set_write_fd(pipe_fd[1]); + // Redirects all logging to stderr in the child process to prevent + // concurrent writes to the log files. We capture stderr in the parent + // process and append the child process' output to a log. + LogToStderr(); + // Event forwarding to the listeners of event listener API mush be shut + // down in death test subprocesses. + GetUnitTestImpl()->listeners()->SuppressEventForwarding(); + return EXECUTE_TEST; + } else { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; + } +} + +// A concrete death test class that forks and re-executes the main +// program from the beginning, with command-line flags set that cause +// only this specific death test to be run. +class ExecDeathTest : public ForkingDeathTest { + public: + ExecDeathTest(const char* a_statement, const RE* a_regex, + const char* file, int line) : + ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } + virtual TestRole AssumeRole(); + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; +}; + +// Utility class for accumulating command-line arguments. +class Arguments { + public: + Arguments() { + args_.push_back(NULL); + } + + ~Arguments() { + for (std::vector::iterator i = args_.begin(); i != args_.end(); + ++i) { + free(*i); + } + } + void AddArgument(const char* argument) { + args_.insert(args_.end() - 1, posix::StrDup(argument)); + } + + template + void AddArguments(const ::std::vector& arguments) { + for (typename ::std::vector::const_iterator i = arguments.begin(); + i != arguments.end(); + ++i) { + args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); + } + } + char* const* Argv() { + return &args_[0]; + } + private: + std::vector args_; +}; + +// A struct that encompasses the arguments to the child process of a +// threadsafe-style death test process. +struct ExecDeathTestArgs { + char* const* argv; // Command-line arguments for the child's call to exec + int close_fd; // File descriptor to close; the read end of a pipe +}; + +#if GTEST_OS_MAC +inline char** GetEnviron() { + // When Google Test is built as a framework on MacOS X, the environ variable + // is unavailable. Apple's documentation (man environ) recommends using + // _NSGetEnviron() instead. + return *_NSGetEnviron(); +} +#else +// Some POSIX platforms expect you to declare environ. extern "C" makes +// it reside in the global namespace. +extern "C" char** environ; +inline char** GetEnviron() { return environ; } +#endif // GTEST_OS_MAC + +// The main function for a threadsafe-style death test child process. +// This function is called in a clone()-ed process and thus must avoid +// any potentially unsafe operations like malloc or libc functions. +static int ExecDeathTestChildMain(void* child_arg) { + ExecDeathTestArgs* const args = static_cast(child_arg); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); + + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(String::Format("chdir(\"%s\") failed: %s", + original_dir, + GetLastErrnoDescription().c_str())); + return EXIT_FAILURE; + } + + // We can safely call execve() as it's a direct system call. We + // cannot use execvp() as it's a libc function and thus potentially + // unsafe. Since execve() doesn't search the PATH, the user must + // invoke the test program via a valid path that contains at least + // one path separator. + execve(args->argv[0], args->argv, GetEnviron()); + DeathTestAbort(String::Format("execve(%s, ...) in %s failed: %s", + args->argv[0], + original_dir, + GetLastErrnoDescription().c_str())); + return EXIT_FAILURE; +} + +// Two utility routines that together determine the direction the stack +// grows. +// This could be accomplished more elegantly by a single recursive +// function, but we want to guard against the unlikely possibility of +// a smart compiler optimizing the recursion away. +bool StackLowerThanAddress(const void* ptr) { + int dummy; + return &dummy < ptr; +} + +bool StackGrowsDown() { + int dummy; + return StackLowerThanAddress(&dummy); +} + +// A threadsafe implementation of fork(2) for threadsafe-style death tests +// that uses clone(2). It dies with an error message if anything goes +// wrong. +static pid_t ExecDeathTestFork(char* const* argv, int close_fd) { + ExecDeathTestArgs args = { argv, close_fd }; + pid_t child_pid = -1; + +#if GTEST_HAS_CLONE + const bool use_fork = GTEST_FLAG(death_test_use_fork); + + if (!use_fork) { + static const bool stack_grows_down = StackGrowsDown(); + const size_t stack_size = getpagesize(); + // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. + void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_PRIVATE, -1, 0); + GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); + void* const stack_top = + static_cast(stack) + (stack_grows_down ? stack_size : 0); + + child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); + + GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); + } +#else + const bool use_fork = true; +#endif // GTEST_HAS_CLONE + + if (use_fork && (child_pid = fork()) == 0) { + ExecDeathTestChildMain(&args); + _exit(0); + } + + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + return child_pid; +} + +// The AssumeRole process for a fork-and-exec death test. It re-executes the +// main program from the beginning, setting the --gtest_filter +// and --gtest_internal_run_death_test flags to cause only the current +// death test to be re-run. +DeathTest::TestRole ExecDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + // Clear the close-on-exec flag on the write end of the pipe, lest + // it be closed when the child process does an exec: + GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); + + const String filter_flag = + String::Format("--%s%s=%s.%s", + GTEST_FLAG_PREFIX_, kFilterFlag, + info->test_case_name(), info->name()); + const String internal_flag = + String::Format("--%s%s=%s|%d|%d|%d", + GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag, + file_, line_, death_test_index, pipe_fd[1]); + Arguments args; + args.AddArguments(GetArgvs()); + args.AddArgument(filter_flag.c_str()); + args.AddArgument(internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // See the comment in NoExecDeathTest::AssumeRole for why the next line + // is necessary. + FlushInfoLog(); + + const pid_t child_pid = ExecDeathTestFork(args.Argv(), pipe_fd[0]); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_child_pid(child_pid); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; +} + +#endif // !GTEST_OS_WINDOWS + +// Creates a concrete DeathTest-derived class that depends on the +// --gtest_death_test_style flag, and sets the pointer pointed to +// by the "test" argument to its address. If the test should be +// skipped, sets that pointer to NULL. Returns true, unless the +// flag is set to an invalid value. +bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, + const char* file, int line, + DeathTest** test) { + UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const int death_test_index = impl->current_test_info() + ->increment_death_test_count(); + + if (flag != NULL) { + if (death_test_index > flag->index()) { + DeathTest::set_last_death_test_message(String::Format( + "Death test count (%d) somehow exceeded expected maximum (%d)", + death_test_index, flag->index())); + return false; + } + + if (!(flag->file() == file && flag->line() == line && + flag->index() == death_test_index)) { + *test = NULL; + return true; + } + } + +#if GTEST_OS_WINDOWS + if (GTEST_FLAG(death_test_style) == "threadsafe" || + GTEST_FLAG(death_test_style) == "fast") { + *test = new WindowsDeathTest(statement, regex, file, line); + } +#else + if (GTEST_FLAG(death_test_style) == "threadsafe") { + *test = new ExecDeathTest(statement, regex, file, line); + } else if (GTEST_FLAG(death_test_style) == "fast") { + *test = new NoExecDeathTest(statement, regex); + } +#endif // GTEST_OS_WINDOWS + else { // NOLINT - this is more readable than unbalanced brackets inside #if. + DeathTest::set_last_death_test_message(String::Format( + "Unknown death test style \"%s\" encountered", + GTEST_FLAG(death_test_style).c_str())); + return false; + } + + return true; +} + +// Splits a given string on a given delimiter, populating a given +// vector with the fields. GTEST_HAS_DEATH_TEST implies that we have +// ::std::string, so we can use it here. +static void SplitString(const ::std::string& str, char delimiter, + ::std::vector< ::std::string>* dest) { + ::std::vector< ::std::string> parsed; + ::std::string::size_type pos = 0; + while (::testing::internal::AlwaysTrue()) { + const ::std::string::size_type colon = str.find(delimiter, pos); + if (colon == ::std::string::npos) { + parsed.push_back(str.substr(pos)); + break; + } else { + parsed.push_back(str.substr(pos, colon - pos)); + pos = colon + 1; + } + } + dest->swap(parsed); +} + +#if GTEST_OS_WINDOWS +// Recreates the pipe and event handles from the provided parameters, +// signals the event, and returns a file descriptor wrapped around the pipe +// handle. This function is called in the child process only. +int GetStatusFileDescriptor(unsigned int parent_process_id, + size_t write_handle_as_size_t, + size_t event_handle_as_size_t) { + AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, + FALSE, // Non-inheritable. + parent_process_id)); + if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { + DeathTestAbort(String::Format("Unable to open parent process %u", + parent_process_id)); + } + + // TODO(vladl@google.com): Replace the following check with a + // compile-time assertion when available. + GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); + + const HANDLE write_handle = + reinterpret_cast(write_handle_as_size_t); + HANDLE dup_write_handle; + + // The newly initialized handle is accessible only in in the parent + // process. To obtain one accessible within the child, we need to use + // DuplicateHandle. + if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, + ::GetCurrentProcess(), &dup_write_handle, + 0x0, // Requested privileges ignored since + // DUPLICATE_SAME_ACCESS is used. + FALSE, // Request non-inheritable handler. + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort(String::Format( + "Unable to duplicate the pipe handle %Iu from the parent process %u", + write_handle_as_size_t, parent_process_id)); + } + + const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); + HANDLE dup_event_handle; + + if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, + ::GetCurrentProcess(), &dup_event_handle, + 0x0, + FALSE, + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort(String::Format( + "Unable to duplicate the event handle %Iu from the parent process %u", + event_handle_as_size_t, parent_process_id)); + } + + const int write_fd = + ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); + if (write_fd == -1) { + DeathTestAbort(String::Format( + "Unable to convert pipe handle %Iu to a file descriptor", + write_handle_as_size_t)); + } + + // Signals the parent that the write end of the pipe has been acquired + // so the parent can release its own write end. + ::SetEvent(dup_event_handle); + + return write_fd; +} +#endif // GTEST_OS_WINDOWS + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { + if (GTEST_FLAG(internal_run_death_test) == "") return NULL; + + // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we + // can use it here. + int line = -1; + int index = -1; + ::std::vector< ::std::string> fields; + SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); + int write_fd = -1; + +#if GTEST_OS_WINDOWS + unsigned int parent_process_id = 0; + size_t write_handle_as_size_t = 0; + size_t event_handle_as_size_t = 0; + + if (fields.size() != 6 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &parent_process_id) + || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) + || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { + DeathTestAbort(String::Format( + "Bad --gtest_internal_run_death_test flag: %s", + GTEST_FLAG(internal_run_death_test).c_str())); + } + write_fd = GetStatusFileDescriptor(parent_process_id, + write_handle_as_size_t, + event_handle_as_size_t); +#else + if (fields.size() != 4 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &write_fd)) { + DeathTestAbort(String::Format( + "Bad --gtest_internal_run_death_test flag: %s", + GTEST_FLAG(internal_run_death_test).c_str())); + } +#endif // GTEST_OS_WINDOWS + return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); +} + +} // namespace internal + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) + + +#include + +#if GTEST_OS_WINDOWS_MOBILE +#include +#elif GTEST_OS_WINDOWS +#include +#include +#elif GTEST_OS_SYMBIAN +// Symbian OpenC has PATH_MAX in sys/syslimits.h +#include +#else +#include +#include // Some Linux distributions define PATH_MAX here. +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_WINDOWS +#define GTEST_PATH_MAX_ _MAX_PATH +#elif defined(PATH_MAX) +#define GTEST_PATH_MAX_ PATH_MAX +#elif defined(_XOPEN_PATH_MAX) +#define GTEST_PATH_MAX_ _XOPEN_PATH_MAX +#else +#define GTEST_PATH_MAX_ _POSIX_PATH_MAX +#endif // GTEST_OS_WINDOWS + + +namespace testing { +namespace internal { + +#if GTEST_OS_WINDOWS +// On Windows, '\\' is the standard path separator, but many tools and the +// Windows API also accept '/' as an alternate path separator. Unless otherwise +// noted, a file path can contain either kind of path separators, or a mixture +// of them. +const char kPathSeparator = '\\'; +const char kAlternatePathSeparator = '/'; +const char kPathSeparatorString[] = "\\"; +const char kAlternatePathSeparatorString[] = "/"; +#if GTEST_OS_WINDOWS_MOBILE +// Windows CE doesn't have a current directory. You should not use +// the current directory in tests on Windows CE, but this at least +// provides a reasonable fallback. +const char kCurrentDirectoryString[] = "\\"; +// Windows CE doesn't define INVALID_FILE_ATTRIBUTES +const DWORD kInvalidFileAttributes = 0xffffffff; +#else +const char kCurrentDirectoryString[] = ".\\"; +#endif // GTEST_OS_WINDOWS_MOBILE +#else +const char kPathSeparator = '/'; +const char kPathSeparatorString[] = "/"; +const char kCurrentDirectoryString[] = "./"; +#endif // GTEST_OS_WINDOWS + +// Returns whether the given character is a valid path separator. +static bool IsPathSeparator(char c) { +#if GTEST_HAS_ALT_PATH_SEP_ + return (c == kPathSeparator) || (c == kAlternatePathSeparator); +#else + return c == kPathSeparator; +#endif +} + +// Returns the current working directory, or "" if unsuccessful. +FilePath FilePath::GetCurrentDir() { +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't have a current directory, so we just return + // something reasonable. + return FilePath(kCurrentDirectoryString); +#elif GTEST_OS_WINDOWS + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#else + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns a copy of the FilePath with the case-insensitive extension removed. +// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns +// FilePath("dir/file"). If a case-insensitive extension is not +// found, returns a copy of the original FilePath. +FilePath FilePath::RemoveExtension(const char* extension) const { + String dot_extension(String::Format(".%s", extension)); + if (pathname_.EndsWithCaseInsensitive(dot_extension.c_str())) { + return FilePath(String(pathname_.c_str(), pathname_.length() - 4)); + } + return *this; +} + +// Returns a pointer to the last occurence of a valid path separator in +// the FilePath. On Windows, for example, both '/' and '\' are valid path +// separators. Returns NULL if no path separator was found. +const char* FilePath::FindLastPathSeparator() const { + const char* const last_sep = strrchr(c_str(), kPathSeparator); +#if GTEST_HAS_ALT_PATH_SEP_ + const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); + // Comparing two pointers of which only one is NULL is undefined. + if (last_alt_sep != NULL && + (last_sep == NULL || last_alt_sep > last_sep)) { + return last_alt_sep; + } +#endif + return last_sep; +} + +// Returns a copy of the FilePath with the directory part removed. +// Example: FilePath("path/to/file").RemoveDirectoryName() returns +// FilePath("file"). If there is no directory part ("just_a_file"), it returns +// the FilePath unmodified. If there is no file part ("just_a_dir/") it +// returns an empty FilePath (""). +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveDirectoryName() const { + const char* const last_sep = FindLastPathSeparator(); + return last_sep ? FilePath(String(last_sep + 1)) : *this; +} + +// RemoveFileName returns the directory path with the filename removed. +// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". +// If the FilePath is "a_file" or "/a_file", RemoveFileName returns +// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does +// not have a file, like "just/a/dir/", it returns the FilePath unmodified. +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveFileName() const { + const char* const last_sep = FindLastPathSeparator(); + String dir; + if (last_sep) { + dir = String(c_str(), last_sep + 1 - c_str()); + } else { + dir = kCurrentDirectoryString; + } + return FilePath(dir); +} + +// Helper functions for naming files in a directory for xml output. + +// Given directory = "dir", base_name = "test", number = 0, +// extension = "xml", returns "dir/test.xml". If number is greater +// than zero (e.g., 12), returns "dir/test_12.xml". +// On Windows platform, uses \ as the separator rather than /. +FilePath FilePath::MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension) { + String file; + if (number == 0) { + file = String::Format("%s.%s", base_name.c_str(), extension); + } else { + file = String::Format("%s_%d.%s", base_name.c_str(), number, extension); + } + return ConcatPaths(directory, FilePath(file)); +} + +// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". +// On Windows, uses \ as the separator rather than /. +FilePath FilePath::ConcatPaths(const FilePath& directory, + const FilePath& relative_path) { + if (directory.IsEmpty()) + return relative_path; + const FilePath dir(directory.RemoveTrailingPathSeparator()); + return FilePath(String::Format("%s%c%s", dir.c_str(), kPathSeparator, + relative_path.c_str())); +} + +// Returns true if pathname describes something findable in the file-system, +// either a file, directory, or whatever. +bool FilePath::FileOrDirectoryExists() const { +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + return attributes != kInvalidFileAttributes; +#else + posix::StatStruct file_stat; + return posix::Stat(pathname_.c_str(), &file_stat) == 0; +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns true if pathname describes a directory in the file-system +// that exists. +bool FilePath::DirectoryExists() const { + bool result = false; +#if GTEST_OS_WINDOWS + // Don't strip off trailing separator if path is a root directory on + // Windows (like "C:\\"). + const FilePath& path(IsRootDirectory() ? *this : + RemoveTrailingPathSeparator()); +#else + const FilePath& path(*this); +#endif + +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + if ((attributes != kInvalidFileAttributes) && + (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = true; + } +#else + posix::StatStruct file_stat; + result = posix::Stat(path.c_str(), &file_stat) == 0 && + posix::IsDir(file_stat); +#endif // GTEST_OS_WINDOWS_MOBILE + + return result; +} + +// Returns true if pathname describes a root directory. (Windows has one +// root directory per disk drive.) +bool FilePath::IsRootDirectory() const { +#if GTEST_OS_WINDOWS + // TODO(wan@google.com): on Windows a network share like + // \\server\share can be a root directory, although it cannot be the + // current directory. Handle this properly. + return pathname_.length() == 3 && IsAbsolutePath(); +#else + return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); +#endif +} + +// Returns true if pathname describes an absolute path. +bool FilePath::IsAbsolutePath() const { + const char* const name = pathname_.c_str(); +#if GTEST_OS_WINDOWS + return pathname_.length() >= 3 && + ((name[0] >= 'a' && name[0] <= 'z') || + (name[0] >= 'A' && name[0] <= 'Z')) && + name[1] == ':' && + IsPathSeparator(name[2]); +#else + return IsPathSeparator(name[0]); +#endif +} + +// Returns a pathname for a file that does not currently exist. The pathname +// will be directory/base_name.extension or +// directory/base_name_.extension if directory/base_name.extension +// already exists. The number will be incremented until a pathname is found +// that does not already exist. +// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. +// There could be a race condition if two or more processes are calling this +// function at the same time -- they could both pick the same filename. +FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension) { + FilePath full_pathname; + int number = 0; + do { + full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); + } while (full_pathname.FileOrDirectoryExists()); + return full_pathname; +} + +// Returns true if FilePath ends with a path separator, which indicates that +// it is intended to represent a directory. Returns false otherwise. +// This does NOT check that a directory (or file) actually exists. +bool FilePath::IsDirectory() const { + return !pathname_.empty() && + IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); +} + +// Create directories so that path exists. Returns true if successful or if +// the directories already exist; returns false if unable to create directories +// for any reason. +bool FilePath::CreateDirectoriesRecursively() const { + if (!this->IsDirectory()) { + return false; + } + + if (pathname_.length() == 0 || this->DirectoryExists()) { + return true; + } + + const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); + return parent.CreateDirectoriesRecursively() && this->CreateFolder(); +} + +// Create the directory so that path exists. Returns true if successful or +// if the directory already exists; returns false if unable to create the +// directory for any reason, including if the parent directory does not +// exist. Not named "CreateDirectory" because that's a macro on Windows. +bool FilePath::CreateFolder() const { +#if GTEST_OS_WINDOWS_MOBILE + FilePath removed_sep(this->RemoveTrailingPathSeparator()); + LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); + int result = CreateDirectory(unicode, NULL) ? 0 : -1; + delete [] unicode; +#elif GTEST_OS_WINDOWS + int result = _mkdir(pathname_.c_str()); +#else + int result = mkdir(pathname_.c_str(), 0777); +#endif // GTEST_OS_WINDOWS_MOBILE + + if (result == -1) { + return this->DirectoryExists(); // An error is OK if the directory exists. + } + return true; // No error. +} + +// If input name has a trailing separator character, remove it and return the +// name, otherwise return the name string unmodified. +// On Windows platform, uses \ as the separator, other platforms use /. +FilePath FilePath::RemoveTrailingPathSeparator() const { + return IsDirectory() + ? FilePath(String(pathname_.c_str(), pathname_.length() - 1)) + : *this; +} + +// Removes any redundant separators that might be in the pathname. +// For example, "bar///foo" becomes "bar/foo". Does not eliminate other +// redundancies that might be in a pathname involving "." or "..". +// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). +void FilePath::Normalize() { + if (pathname_.c_str() == NULL) { + pathname_ = ""; + return; + } + const char* src = pathname_.c_str(); + char* const dest = new char[pathname_.length() + 1]; + char* dest_ptr = dest; + memset(dest_ptr, 0, pathname_.length() + 1); + + while (*src != '\0') { + *dest_ptr = *src; + if (!IsPathSeparator(*src)) { + src++; + } else { +#if GTEST_HAS_ALT_PATH_SEP_ + if (*dest_ptr == kAlternatePathSeparator) { + *dest_ptr = kPathSeparator; + } +#endif + while (IsPathSeparator(*src)) + src++; + } + dest_ptr++; + } + *dest_ptr = '\0'; + pathname_ = dest; + delete[] dest; +} + +} // namespace internal +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +#include +#include +#include + +#if GTEST_OS_WINDOWS_MOBILE +#include // For TerminateProcess() +#elif GTEST_OS_WINDOWS +#include +#include +#else +#include +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_MAC +#include +#include +#include +#endif // GTEST_OS_MAC + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { +namespace internal { + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC and C++Builder do not provide a definition of STDERR_FILENO. +const int kStdOutFileno = 1; +const int kStdErrFileno = 2; +#else +const int kStdOutFileno = STDOUT_FILENO; +const int kStdErrFileno = STDERR_FILENO; +#endif // _MSC_VER + +#if GTEST_OS_MAC + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const task_t task = mach_task_self(); + mach_msg_type_number_t thread_count; + thread_act_array_t thread_list; + const kern_return_t status = task_threads(task, &thread_list, &thread_count); + if (status == KERN_SUCCESS) { + // task_threads allocates resources in thread_list and we need to free them + // to avoid leaks. + vm_deallocate(task, + reinterpret_cast(thread_list), + sizeof(thread_t) * thread_count); + return static_cast(thread_count); + } else { + return 0; + } +} + +#else + +size_t GetThreadCount() { + // There's no portable way to detect the number of threads, so we just + // return 0 to indicate that we cannot detect it. + return 0; +} + +#endif // GTEST_OS_MAC + +#if GTEST_USES_POSIX_RE + +// Implements RE. Currently only needed for death tests. + +RE::~RE() { + if (is_valid_) { + // regfree'ing an invalid regex might crash because the content + // of the regex is undefined. Since the regex's are essentially + // the same, one cannot be valid (or invalid) without the other + // being so too. + regfree(&partial_regex_); + regfree(&full_regex_); + } + free(const_cast(pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.full_regex_, str, 1, &match, 0) == 0; +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = posix::StrDup(regex); + + // Reserves enough bytes to hold the regular expression used for a + // full match. + const size_t full_regex_len = strlen(regex) + 10; + char* const full_pattern = new char[full_regex_len]; + + snprintf(full_pattern, full_regex_len, "^(%s)$", regex); + is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; + // We want to call regcomp(&partial_regex_, ...) even if the + // previous expression returns false. Otherwise partial_regex_ may + // not be properly initialized can may cause trouble when it's + // freed. + // + // Some implementation of POSIX regex (e.g. on at least some + // versions of Cygwin) doesn't accept the empty string as a valid + // regex. We change it to an equivalent form "()" to be safe. + if (is_valid_) { + const char* const partial_regex = (*regex == '\0') ? "()" : regex; + is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; + } + EXPECT_TRUE(is_valid_) + << "Regular expression \"" << regex + << "\" is not a valid POSIX Extended regular expression."; + + delete[] full_pattern; +} + +#elif GTEST_USES_SIMPLE_RE + +// Returns true iff ch appears anywhere in str (excluding the +// terminating '\0' character). +bool IsInSet(char ch, const char* str) { + return ch != '\0' && strchr(str, ch) != NULL; +} + +// Returns true iff ch belongs to the given classification. Unlike +// similar functions in , these aren't affected by the +// current locale. +bool IsDigit(char ch) { return '0' <= ch && ch <= '9'; } +bool IsPunct(char ch) { + return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); +} +bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } +bool IsWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } +bool IsWordChar(char ch) { + return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || + ('0' <= ch && ch <= '9') || ch == '_'; +} + +// Returns true iff "\\c" is a supported escape sequence. +bool IsValidEscape(char c) { + return (IsPunct(c) || IsInSet(c, "dDfnrsStvwW")); +} + +// Returns true iff the given atom (specified by escaped and pattern) +// matches ch. The result is undefined if the atom is invalid. +bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { + if (escaped) { // "\\p" where p is pattern_char. + switch (pattern_char) { + case 'd': return IsDigit(ch); + case 'D': return !IsDigit(ch); + case 'f': return ch == '\f'; + case 'n': return ch == '\n'; + case 'r': return ch == '\r'; + case 's': return IsWhiteSpace(ch); + case 'S': return !IsWhiteSpace(ch); + case 't': return ch == '\t'; + case 'v': return ch == '\v'; + case 'w': return IsWordChar(ch); + case 'W': return !IsWordChar(ch); + } + return IsPunct(pattern_char) && pattern_char == ch; + } + + return (pattern_char == '.' && ch != '\n') || pattern_char == ch; +} + +// Helper function used by ValidateRegex() to format error messages. +String FormatRegexSyntaxError(const char* regex, int index) { + return (Message() << "Syntax error at index " << index + << " in simple regular expression \"" << regex << "\": ").GetString(); +} + +// Generates non-fatal failures and returns false if regex is invalid; +// otherwise returns true. +bool ValidateRegex(const char* regex) { + if (regex == NULL) { + // TODO(wan@google.com): fix the source file location in the + // assertion failures to match where the regex is used in user + // code. + ADD_FAILURE() << "NULL is not a valid simple regular expression."; + return false; + } + + bool is_valid = true; + + // True iff ?, *, or + can follow the previous atom. + bool prev_repeatable = false; + for (int i = 0; regex[i]; i++) { + if (regex[i] == '\\') { // An escape sequence + i++; + if (regex[i] == '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "'\\' cannot appear at the end."; + return false; + } + + if (!IsValidEscape(regex[i])) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "invalid escape sequence \"\\" << regex[i] << "\"."; + is_valid = false; + } + prev_repeatable = true; + } else { // Not an escape sequence. + const char ch = regex[i]; + + if (ch == '^' && i > 0) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'^' can only appear at the beginning."; + is_valid = false; + } else if (ch == '$' && regex[i + 1] != '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'$' can only appear at the end."; + is_valid = false; + } else if (IsInSet(ch, "()[]{}|")) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' is unsupported."; + is_valid = false; + } else if (IsRepeat(ch) && !prev_repeatable) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' can only follow a repeatable token."; + is_valid = false; + } + + prev_repeatable = !IsInSet(ch, "^$?*+"); + } + } + + return is_valid; +} + +// Matches a repeated regex atom followed by a valid simple regular +// expression. The regex atom is defined as c if escaped is false, +// or \c otherwise. repeat is the repetition meta character (?, *, +// or +). The behavior is undefined if str contains too many +// characters to be indexable by size_t, in which case the test will +// probably time out anyway. We are fine with this limitation as +// std::string has it too. +bool MatchRepetitionAndRegexAtHead( + bool escaped, char c, char repeat, const char* regex, + const char* str) { + const size_t min_count = (repeat == '+') ? 1 : 0; + const size_t max_count = (repeat == '?') ? 1 : + static_cast(-1) - 1; + // We cannot call numeric_limits::max() as it conflicts with the + // max() macro on Windows. + + for (size_t i = 0; i <= max_count; ++i) { + // We know that the atom matches each of the first i characters in str. + if (i >= min_count && MatchRegexAtHead(regex, str + i)) { + // We have enough matches at the head, and the tail matches too. + // Since we only care about *whether* the pattern matches str + // (as opposed to *how* it matches), there is no need to find a + // greedy match. + return true; + } + if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) + return false; + } + return false; +} + +// Returns true iff regex matches a prefix of str. regex must be a +// valid simple regular expression and not start with "^", or the +// result is undefined. +bool MatchRegexAtHead(const char* regex, const char* str) { + if (*regex == '\0') // An empty regex matches a prefix of anything. + return true; + + // "$" only matches the end of a string. Note that regex being + // valid guarantees that there's nothing after "$" in it. + if (*regex == '$') + return *str == '\0'; + + // Is the first thing in regex an escape sequence? + const bool escaped = *regex == '\\'; + if (escaped) + ++regex; + if (IsRepeat(regex[1])) { + // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so + // here's an indirect recursion. It terminates as the regex gets + // shorter in each recursion. + return MatchRepetitionAndRegexAtHead( + escaped, regex[0], regex[1], regex + 2, str); + } else { + // regex isn't empty, isn't "$", and doesn't start with a + // repetition. We match the first atom of regex with the first + // character of str and recurse. + return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && + MatchRegexAtHead(regex + 1, str + 1); + } +} + +// Returns true iff regex matches any substring of str. regex must be +// a valid simple regular expression, or the result is undefined. +// +// The algorithm is recursive, but the recursion depth doesn't exceed +// the regex length, so we won't need to worry about running out of +// stack space normally. In rare cases the time complexity can be +// exponential with respect to the regex length + the string length, +// but usually it's must faster (often close to linear). +bool MatchRegexAnywhere(const char* regex, const char* str) { + if (regex == NULL || str == NULL) + return false; + + if (*regex == '^') + return MatchRegexAtHead(regex + 1, str); + + // A successful match can be anywhere in str. + do { + if (MatchRegexAtHead(regex, str)) + return true; + } while (*str++ != '\0'); + return false; +} + +// Implements the RE class. + +RE::~RE() { + free(const_cast(pattern_)); + free(const_cast(full_pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = full_pattern_ = NULL; + if (regex != NULL) { + pattern_ = posix::StrDup(regex); + } + + is_valid_ = ValidateRegex(regex); + if (!is_valid_) { + // No need to calculate the full pattern when the regex is invalid. + return; + } + + const size_t len = strlen(regex); + // Reserves enough bytes to hold the regular expression used for a + // full match: we need space to prepend a '^', append a '$', and + // terminate the string with '\0'. + char* buffer = static_cast(malloc(len + 3)); + full_pattern_ = buffer; + + if (*regex != '^') + *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. + + // We don't use snprintf or strncpy, as they trigger a warning when + // compiled with VC++ 8.0. + memcpy(buffer, regex, len); + buffer += len; + + if (len == 0 || regex[len - 1] != '$') + *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. + + *buffer = '\0'; +} + +#endif // GTEST_USES_POSIX_RE + + +GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) + : severity_(severity) { + const char* const marker = + severity == GTEST_INFO ? "[ INFO ]" : + severity == GTEST_WARNING ? "[WARNING]" : + severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; + GetStream() << ::std::endl << marker << " " + << FormatFileLocation(file, line).c_str() << ": "; +} + +// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. +GTestLog::~GTestLog() { + GetStream() << ::std::endl; + if (severity_ == GTEST_FATAL) { + fflush(stderr); + posix::Abort(); + } +} +// Disable Microsoft deprecation warnings for POSIX functions called from +// this class (creat, dup, dup2, and close) +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4996) +#endif // _MSC_VER + +#if GTEST_HAS_STREAM_REDIRECTION_ + +// Object that captures an output stream (stdout/stderr). +class CapturedStream { + public: + // The ctor redirects the stream to a temporary file. + CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { +#if GTEST_OS_WINDOWS + char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT + char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT + + ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); + const UINT success = ::GetTempFileNameA(temp_dir_path, + "gtest_redir", + 0, // Generate unique file name. + temp_file_path); + GTEST_CHECK_(success != 0) + << "Unable to create a temporary file in " << temp_dir_path; + const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); + GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " + << temp_file_path; + filename_ = temp_file_path; +#else + // There's no guarantee that a test has write access to the + // current directory, so we create the temporary file in the /tmp + // directory instead. + char name_template[] = "/tmp/captured_stream.XXXXXX"; + const int captured_fd = mkstemp(name_template); + filename_ = name_template; +#endif // GTEST_OS_WINDOWS + fflush(NULL); + dup2(captured_fd, fd_); + close(captured_fd); + } + + ~CapturedStream() { + remove(filename_.c_str()); + } + + String GetCapturedString() { + if (uncaptured_fd_ != -1) { + // Restores the original stream. + fflush(NULL); + dup2(uncaptured_fd_, fd_); + close(uncaptured_fd_); + uncaptured_fd_ = -1; + } + + FILE* const file = posix::FOpen(filename_.c_str(), "r"); + const String content = ReadEntireFile(file); + posix::FClose(file); + return content; + } + + private: + // Reads the entire content of a file as a String. + static String ReadEntireFile(FILE* file); + + // Returns the size (in bytes) of a file. + static size_t GetFileSize(FILE* file); + + const int fd_; // A stream to capture. + int uncaptured_fd_; + // Name of the temporary file holding the stderr output. + ::std::string filename_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); +}; + +// Returns the size (in bytes) of a file. +size_t CapturedStream::GetFileSize(FILE* file) { + fseek(file, 0, SEEK_END); + return static_cast(ftell(file)); +} + +// Reads the entire content of a file as a string. +String CapturedStream::ReadEntireFile(FILE* file) { + const size_t file_size = GetFileSize(file); + char* const buffer = new char[file_size]; + + size_t bytes_last_read = 0; // # of bytes read in the last fread() + size_t bytes_read = 0; // # of bytes read so far + + fseek(file, 0, SEEK_SET); + + // Keeps reading the file until we cannot read further or the + // pre-determined file size is reached. + do { + bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); + bytes_read += bytes_last_read; + } while (bytes_last_read > 0 && bytes_read < file_size); + + const String content(buffer, bytes_read); + delete[] buffer; + + return content; +} + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER + +static CapturedStream* g_captured_stderr = NULL; +static CapturedStream* g_captured_stdout = NULL; + +// Starts capturing an output stream (stdout/stderr). +void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { + if (*stream != NULL) { + GTEST_LOG_(FATAL) << "Only one " << stream_name + << " capturer can exist at a time."; + } + *stream = new CapturedStream(fd); +} + +// Stops capturing the output stream and returns the captured string. +String GetCapturedStream(CapturedStream** captured_stream) { + const String content = (*captured_stream)->GetCapturedString(); + + delete *captured_stream; + *captured_stream = NULL; + + return content; +} + +// Starts capturing stdout. +void CaptureStdout() { + CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); +} + +// Starts capturing stderr. +void CaptureStderr() { + CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); +} + +// Stops capturing stdout and returns the captured string. +String GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); } + +// Stops capturing stderr and returns the captured string. +String GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } + +#endif // GTEST_HAS_STREAM_REDIRECTION_ + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +::std::vector g_argvs; + +// Returns the command line as a vector of strings. +const ::std::vector& GetArgvs() { return g_argvs; } + +#endif // GTEST_HAS_DEATH_TEST + +#if GTEST_OS_WINDOWS_MOBILE +namespace posix { +void Abort() { + DebugBreak(); + TerminateProcess(GetCurrentProcess(), 1); +} +} // namespace posix +#endif // GTEST_OS_WINDOWS_MOBILE + +// Returns the name of the environment variable corresponding to the +// given flag. For example, FlagToEnvVar("foo") will return +// "GTEST_FOO" in the open-source version. +static String FlagToEnvVar(const char* flag) { + const String full_flag = + (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); + + Message env_var; + for (size_t i = 0; i != full_flag.length(); i++) { + env_var << static_cast(toupper(full_flag.c_str()[i])); + } + + return env_var.GetString(); +} + +// Parses 'str' for a 32-bit signed integer. If successful, writes +// the result to *value and returns true; otherwise leaves *value +// unchanged and returns false. +bool ParseInt32(const Message& src_text, const char* str, Int32* value) { + // Parses the environment variable as a decimal integer. + char* end = NULL; + const long long_value = strtol(str, &end, 10); // NOLINT + + // Has strtol() consumed all characters in the string? + if (*end != '\0') { + // No - an invalid character was encountered. + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value \"" << str << "\".\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + // Is the parsed value in the range of an Int32? + const Int32 result = static_cast(long_value); + if (long_value == LONG_MAX || long_value == LONG_MIN || + // The parsed value overflows as a long. (strtol() returns + // LONG_MAX or LONG_MIN when the input overflows.) + result != long_value + // The parsed value overflows as an Int32. + ) { + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value " << str << ", which overflows.\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + *value = result; + return true; +} + +// Reads and returns the Boolean environment variable corresponding to +// the given flag; if it's not set, returns default_value. +// +// The value is considered true iff it's not "0". +bool BoolFromGTestEnv(const char* flag, bool default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + return string_value == NULL ? + default_value : strcmp(string_value, "0") != 0; +} + +// Reads and returns a 32-bit integer stored in the environment +// variable corresponding to the given flag; if it isn't set or +// doesn't represent a valid 32-bit integer, returns default_value. +Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + if (string_value == NULL) { + // The environment variable is not set. + return default_value; + } + + Int32 result = default_value; + if (!ParseInt32(Message() << "Environment variable " << env_var, + string_value, &result)) { + printf("The default value %s is used.\n", + (Message() << default_value).GetString().c_str()); + fflush(stdout); + return default_value; + } + + return result; +} + +// Reads and returns the string environment variable corresponding to +// the given flag; if it's not set, returns default_value. +const char* StringFromGTestEnv(const char* flag, const char* default_value) { + const String env_var = FlagToEnvVar(flag); + const char* const value = posix::GetEnv(env_var.c_str()); + return value == NULL ? default_value : value; +} + +} // namespace internal +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// The Google C++ Testing Framework (Google Test) + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +using internal::GetUnitTestImpl; + +// Gets the summary of the failure message by omitting the stack trace +// in it. +internal::String TestPartResult::ExtractSummary(const char* message) { + const char* const stack_trace = strstr(message, internal::kStackTraceMarker); + return stack_trace == NULL ? internal::String(message) : + internal::String(message, stack_trace - message); +} + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { + return os + << result.file_name() << ":" << result.line_number() << ": " + << (result.type() == TestPartResult::kSuccess ? "Success" : + result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : + "Non-fatal failure") << ":\n" + << result.message() << std::endl; +} + +// Appends a TestPartResult to the array. +void TestPartResultArray::Append(const TestPartResult& result) { + array_.push_back(result); +} + +// Returns the TestPartResult at the given index (0-based). +const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { + if (index < 0 || index >= size()) { + printf("\nInvalid index (%d) into TestPartResultArray.\n", index); + internal::posix::Abort(); + } + + return array_[index]; +} + +// Returns the number of TestPartResult objects in the array. +int TestPartResultArray::size() const { + return static_cast(array_.size()); +} + +namespace internal { + +HasNewFatalFailureHelper::HasNewFatalFailureHelper() + : has_new_fatal_failure_(false), + original_reporter_(GetUnitTestImpl()-> + GetTestPartResultReporterForCurrentThread()) { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); +} + +HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( + original_reporter_); +} + +void HasNewFatalFailureHelper::ReportTestPartResult( + const TestPartResult& result) { + if (result.fatally_failed()) + has_new_fatal_failure_ = true; + original_reporter_->ReportTestPartResult(result); +} + +} // namespace internal + +} // namespace testing +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +namespace testing { +namespace internal { + +#if GTEST_HAS_TYPED_TEST_P + +// Skips to the first non-space char in str. Returns an empty string if str +// contains only whitespace characters. +static const char* SkipSpaces(const char* str) { + while (isspace(*str)) + str++; + return str; +} + +// Verifies that registered_tests match the test names in +// defined_test_names_; returns registered_tests if successful, or +// aborts the program otherwise. +const char* TypedTestCasePState::VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests) { + typedef ::std::set::const_iterator DefinedTestIter; + registered_ = true; + + // Skip initial whitespace in registered_tests since some + // preprocessors prefix stringizied literals with whitespace. + registered_tests = SkipSpaces(registered_tests); + + Message errors; + ::std::set tests; + for (const char* names = registered_tests; names != NULL; + names = SkipComma(names)) { + const String name = GetPrefixUntilComma(names); + if (tests.count(name) != 0) { + errors << "Test " << name << " is listed more than once.\n"; + continue; + } + + bool found = false; + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (name == *it) { + found = true; + break; + } + } + + if (found) { + tests.insert(name); + } else { + errors << "No test named " << name + << " can be found in this test case.\n"; + } + } + + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (tests.count(*it) == 0) { + errors << "You forgot to list test " << *it << ".\n"; + } + } + + const String& errors_str = errors.GetString(); + if (errors_str != "") { + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors_str.c_str()); + fflush(stderr); + posix::Abort(); + } + + return registered_tests; +} + +#endif // GTEST_HAS_TYPED_TEST_P + +} // namespace internal +} // namespace testing diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest.h new file mode 100644 index 00000000..c0a1902e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest.h @@ -0,0 +1,18007 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for Google Test. It should be +// included by any test program that uses Google Test. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! +// +// Acknowledgment: Google Test borrowed the idea of automatic test +// registration from Barthelemy Dagenais' (barthelemy@prologique.com) +// easyUnit framework. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_H_ + +#include +#include + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares functions and macros used internally by +// Google Test. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan) +// +// Low-level types and utilities for porting Google Test to various +// platforms. They are subject to change without notice. DO NOT USE +// THEM IN USER CODE. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ + +// The user can define the following macros in the build script to +// control Google Test's behavior. If the user doesn't define a macro +// in this list, Google Test will define it. +// +// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) +// is/isn't available. +// GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions +// are enabled. +// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::string, which is different to std::string). +// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::wstring, which is different to std::wstring). +// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that +// is/isn't available. +// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't +// enabled. +// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that +// std::wstring does/doesn't work (Google Test can +// be used where std::wstring is unavailable). +// GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple +// is/isn't available. +// GTEST_HAS_SEH - Define it to 1/0 to indicate whether the +// compiler supports Microsoft's "Structured +// Exception Handling". +// GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google +// Test's own tr1 tuple implementation should be +// used. Unused when the user sets +// GTEST_HAS_TR1_TUPLE to 0. +// GTEST_LINKED_AS_SHARED_LIBRARY +// - Define to 1 when compiling tests that use +// Google Test as a shared library (known as +// DLL on Windows). +// GTEST_CREATE_SHARED_LIBRARY +// - Define to 1 when compiling Google Test itself +// as a shared library. + +// This header defines the following utilities: +// +// Macros indicating the current platform (defined to 1 if compiled on +// the given platform; otherwise undefined): +// GTEST_OS_AIX - IBM AIX +// GTEST_OS_CYGWIN - Cygwin +// GTEST_OS_LINUX - Linux +// GTEST_OS_MAC - Mac OS X +// GTEST_OS_SOLARIS - Sun Solaris +// GTEST_OS_SYMBIAN - Symbian +// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) +// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop +// GTEST_OS_WINDOWS_MINGW - MinGW +// GTEST_OS_WINDOWS_MOBILE - Windows Mobile +// GTEST_OS_ZOS - z/OS +// +// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the +// most stable support. Since core members of the Google Test project +// don't have access to other platforms, support for them may be less +// stable. If you notice any problems on your platform, please notify +// googletestframework@googlegroups.com (patches for fixing them are +// even more welcome!). +// +// Note that it is possible that none of the GTEST_OS_* macros are defined. +// +// Macros indicating available Google Test features (defined to 1 if +// the corresponding feature is supported; otherwise undefined): +// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized +// tests) +// GTEST_HAS_DEATH_TEST - death tests +// GTEST_HAS_PARAM_TEST - value-parameterized tests +// GTEST_HAS_TYPED_TEST - typed tests +// GTEST_HAS_TYPED_TEST_P - type-parameterized tests +// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. +// GTEST_USES_SIMPLE_RE - our own simple regex is used; +// the above two are mutually exclusive. +// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). +// +// Macros for basic C++ coding: +// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. +// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a +// variable don't have to be used. +// GTEST_DISALLOW_ASSIGN_ - disables operator=. +// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. +// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. +// +// Synchronization: +// Mutex, MutexLock, ThreadLocal, GetThreadCount() +// - synchronization primitives. +// GTEST_IS_THREADSAFE - defined to 1 to indicate that the above +// synchronization primitives have real implementations +// and Google Test is thread-safe; or 0 otherwise. +// +// Template meta programming: +// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. +// +// Smart pointers: +// scoped_ptr - as in TR2. +// +// Regular expressions: +// RE - a simple regular expression class using the POSIX +// Extended Regular Expression syntax. Not available on +// Windows. +// +// Logging: +// GTEST_LOG_() - logs messages at the specified severity level. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. +// +// Stdout and stderr capturing: +// CaptureStdout() - starts capturing stdout. +// GetCapturedStdout() - stops capturing stdout and returns the captured +// string. +// CaptureStderr() - starts capturing stderr. +// GetCapturedStderr() - stops capturing stderr and returns the captured +// string. +// +// Integer types: +// TypeWithSize - maps an integer to a int type. +// Int32, UInt32, Int64, UInt64, TimeInMillis +// - integers of known sizes. +// BiggestInt - the biggest signed integer type. +// +// Command-line utilities: +// GTEST_FLAG() - references a flag. +// GTEST_DECLARE_*() - declares a flag. +// GTEST_DEFINE_*() - defines a flag. +// GetArgvs() - returns the command line as a vector of strings. +// +// Environment variable utilities: +// GetEnv() - gets the value of an environment variable. +// BoolFromGTestEnv() - parses a bool environment variable. +// Int32FromGTestEnv() - parses an Int32 environment variable. +// StringFromGTestEnv() - parses a string environment variable. + +#include // For ptrdiff_t +#include +#include +#include +#ifndef _WIN32_WCE +#include +#endif // !_WIN32_WCE + +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" +#define GTEST_FLAG_PREFIX_ "gtest_" +#define GTEST_FLAG_PREFIX_DASH_ "gtest-" +#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" +#define GTEST_NAME_ "Google Test" +#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" + +// Determines the version of gcc that is used to compile this. +#ifdef __GNUC__ +// 40302 means version 4.3.2. +#define GTEST_GCC_VER_ \ + (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) +#endif // __GNUC__ + +// Determines the platform on which Google Test is compiled. +#ifdef __CYGWIN__ +#define GTEST_OS_CYGWIN 1 +#elif defined __SYMBIAN32__ +#define GTEST_OS_SYMBIAN 1 +#elif defined _WIN32 +#define GTEST_OS_WINDOWS 1 +#ifdef _WIN32_WCE +#define GTEST_OS_WINDOWS_MOBILE 1 +#elif defined(__MINGW__) || defined(__MINGW32__) +#define GTEST_OS_WINDOWS_MINGW 1 +#else +#define GTEST_OS_WINDOWS_DESKTOP 1 +#endif // _WIN32_WCE +#elif defined __APPLE__ +#define GTEST_OS_MAC 1 +#elif defined __linux__ +#define GTEST_OS_LINUX 1 +#elif defined __MVS__ +#define GTEST_OS_ZOS 1 +#elif defined(__sun) && defined(__SVR4) +#define GTEST_OS_SOLARIS 1 +#elif defined(_AIX) +#define GTEST_OS_AIX 1 +#endif // __CYGWIN__ + +#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_SYMBIAN || \ + GTEST_OS_SOLARIS || GTEST_OS_AIX + +// On some platforms, needs someone to define size_t, and +// won't compile otherwise. We can #include it here as we already +// included , which is guaranteed to define size_t through +// . +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define GTEST_USES_POSIX_RE 1 + +#elif GTEST_OS_WINDOWS + +#if !GTEST_OS_WINDOWS_MOBILE +#include // NOLINT +#include // NOLINT +#endif + +// is not available on Windows. Use our own simple regex +// implementation instead. +#define GTEST_USES_SIMPLE_RE 1 + +#else + +// may not be available on this platform. Use our own +// simple regex implementation instead. +#define GTEST_USES_SIMPLE_RE 1 + +#endif // GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC || + // GTEST_OS_SYMBIAN || GTEST_OS_SOLARIS || GTEST_OS_AIX + +#ifndef GTEST_HAS_EXCEPTIONS +// The user didn't tell us whether exceptions are enabled, so we need +// to figure it out. +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS +// macro to enable exceptions, so we'll do the same. +// Assumes that exceptions are enabled by default. +#ifndef _HAS_EXCEPTIONS +#define _HAS_EXCEPTIONS 1 +#endif // _HAS_EXCEPTIONS +#define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS +#elif defined(__GNUC__) && __EXCEPTIONS +// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__SUNPRO_CC) +// Sun Pro CC supports exceptions. However, there is no compile-time way of +// detecting whether they are enabled or not. Therefore, we assume that +// they are enabled unless the user tells us otherwise. +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__IBMCPP__) && __EXCEPTIONS +// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. +#define GTEST_HAS_EXCEPTIONS 1 +#else +// For other compilers, we assume exceptions are disabled to be +// conservative. +#define GTEST_HAS_EXCEPTIONS 0 +#endif // defined(_MSC_VER) || defined(__BORLANDC__) +#endif // GTEST_HAS_EXCEPTIONS + +#if !defined(GTEST_HAS_STD_STRING) +// Even though we don't use this macro any longer, we keep it in case +// some clients still depend on it. +#define GTEST_HAS_STD_STRING 1 +#elif !GTEST_HAS_STD_STRING +// The user told us that ::std::string isn't available. +#error "Google Test cannot be used where ::std::string isn't available." +#endif // !defined(GTEST_HAS_STD_STRING) + +#ifndef GTEST_HAS_GLOBAL_STRING +// The user didn't tell us whether ::string is available, so we need +// to figure it out. + +#define GTEST_HAS_GLOBAL_STRING 0 + +#endif // GTEST_HAS_GLOBAL_STRING + +#ifndef GTEST_HAS_STD_WSTRING +// The user didn't tell us whether ::std::wstring is available, so we need +// to figure it out. +// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring +// is available. + +// Cygwin 1.5 and below doesn't support ::std::wstring. +// Cygwin 1.7 might add wstring support; this should be updated when clear. +// Solaris' libc++ doesn't support it either. +#define GTEST_HAS_STD_WSTRING (!(GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) + +#endif // GTEST_HAS_STD_WSTRING + +#ifndef GTEST_HAS_GLOBAL_WSTRING +// The user didn't tell us whether ::wstring is available, so we need +// to figure it out. +#define GTEST_HAS_GLOBAL_WSTRING \ + (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Determines whether RTTI is available. +#ifndef GTEST_HAS_RTTI +// The user didn't tell us whether RTTI is enabled, so we need to +// figure it out. + +#ifdef _MSC_VER + +#ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif + +// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. +#elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) + +#ifdef __GXX_RTTI +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif // __GXX_RTTI + +// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if +// both the typeid and dynamic_cast features are present. +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) + +#ifdef __RTTI_ALL__ +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif + +#else + +// For all other compilers, we assume RTTI is enabled. +#define GTEST_HAS_RTTI 1 + +#endif // _MSC_VER + +#endif // GTEST_HAS_RTTI + +// It's this header's responsibility to #include when RTTI +// is enabled. +#if GTEST_HAS_RTTI +#include +#endif + +// Determines whether Google Test can use the pthreads library. +#ifndef GTEST_HAS_PTHREAD +// The user didn't tell us explicitly, so we assume pthreads support is +// available on Linux and Mac. +// +// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 +// to your compiler flags. +#define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC) +#endif // GTEST_HAS_PTHREAD + +// Determines whether Google Test can use tr1/tuple. You can define +// this macro to 0 to prevent Google Test from using tuple (any +// feature depending on tuple with be disabled in this mode). +#ifndef GTEST_HAS_TR1_TUPLE +// The user didn't tell us not to do it, so we assume it's OK. +#define GTEST_HAS_TR1_TUPLE 1 +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether Google Test's own tr1 tuple implementation +// should be used. +#ifndef GTEST_USE_OWN_TR1_TUPLE +// The user didn't tell us, so we need to figure it out. + +// We use our own TR1 tuple if we aren't sure the user has an +// implementation of it already. At this time, GCC 4.0.0+ and MSVC +// 2010 are the only mainstream compilers that come with a TR1 tuple +// implementation. NVIDIA's CUDA NVCC compiler pretends to be GCC by +// defining __GNUC__ and friends, but cannot compile GCC's tuple +// implementation. MSVC 2008 (9.0) provides TR1 tuple in a 323 MB +// Feature Pack download, which we cannot assume the user has. +#if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \ + || _MSC_VER >= 1600 +#define GTEST_USE_OWN_TR1_TUPLE 0 +#else +#define GTEST_USE_OWN_TR1_TUPLE 1 +#endif + +#endif // GTEST_USE_OWN_TR1_TUPLE + +// To avoid conditional compilation everywhere, we make it +// gtest-port.h's responsibility to #include the header implementing +// tr1/tuple. +#if GTEST_HAS_TR1_TUPLE + +#if GTEST_USE_OWN_TR1_TUPLE +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2009 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Implements a subset of TR1 tuple needed by Google Test and Google Mock. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ + +#include // For ::std::pair. + +// The compiler used in Symbian has a bug that prevents us from declaring the +// tuple template as a friend (it complains that tuple is redefined). This +// hack bypasses the bug by declaring the members that should otherwise be +// private as public. +// Sun Studio versions < 12 also have the above bug. +#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: +#else +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ + template friend class tuple; \ + private: +#endif + +// GTEST_n_TUPLE_(T) is the type of an n-tuple. +#define GTEST_0_TUPLE_(T) tuple<> +#define GTEST_1_TUPLE_(T) tuple +#define GTEST_2_TUPLE_(T) tuple +#define GTEST_3_TUPLE_(T) tuple +#define GTEST_4_TUPLE_(T) tuple +#define GTEST_5_TUPLE_(T) tuple +#define GTEST_6_TUPLE_(T) tuple +#define GTEST_7_TUPLE_(T) tuple +#define GTEST_8_TUPLE_(T) tuple +#define GTEST_9_TUPLE_(T) tuple +#define GTEST_10_TUPLE_(T) tuple + +// GTEST_n_TYPENAMES_(T) declares a list of n typenames. +#define GTEST_0_TYPENAMES_(T) +#define GTEST_1_TYPENAMES_(T) typename T##0 +#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 +#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 +#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3 +#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4 +#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5 +#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6 +#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 +#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8 +#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8, typename T##9 + +// In theory, defining stuff in the ::std namespace is undefined +// behavior. We can do this as we are playing the role of a standard +// library vendor. +namespace std { +namespace tr1 { + +template +class tuple; + +// Anything in namespace gtest_internal is Google Test's INTERNAL +// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. +namespace gtest_internal { + +// ByRef::type is T if T is a reference; otherwise it's const T&. +template +struct ByRef { typedef const T& type; }; // NOLINT +template +struct ByRef { typedef T& type; }; // NOLINT + +// A handy wrapper for ByRef. +#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type + +// AddRef::type is T if T is a reference; otherwise it's T&. This +// is the same as tr1::add_reference::type. +template +struct AddRef { typedef T& type; }; // NOLINT +template +struct AddRef { typedef T& type; }; // NOLINT + +// A handy wrapper for AddRef. +#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type + +// A helper for implementing get(). +template class Get; + +// A helper for implementing tuple_element. kIndexValid is true +// iff k < the number of fields in tuple type T. +template +struct TupleElement; + +template +struct TupleElement { typedef T0 type; }; + +template +struct TupleElement { typedef T1 type; }; + +template +struct TupleElement { typedef T2 type; }; + +template +struct TupleElement { typedef T3 type; }; + +template +struct TupleElement { typedef T4 type; }; + +template +struct TupleElement { typedef T5 type; }; + +template +struct TupleElement { typedef T6 type; }; + +template +struct TupleElement { typedef T7 type; }; + +template +struct TupleElement { typedef T8 type; }; + +template +struct TupleElement { typedef T9 type; }; + +} // namespace gtest_internal + +template <> +class tuple<> { + public: + tuple() {} + tuple(const tuple& /* t */) {} + tuple& operator=(const tuple& /* t */) { return *this; } +}; + +template +class GTEST_1_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} + + tuple(const tuple& t) : f0_(t.f0_) {} + + template + tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_1_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { + f0_ = t.f0_; + return *this; + } + + T0 f0_; +}; + +template +class GTEST_2_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), + f1_(f1) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} + + template + tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} + template + tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_2_TUPLE_(U)& t) { + return CopyFrom(t); + } + template + tuple& operator=(const ::std::pair& p) { + f0_ = p.first; + f1_ = p.second; + return *this; + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + return *this; + } + + T0 f0_; + T1 f1_; +}; + +template +class GTEST_3_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + template + tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_3_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; +}; + +template +class GTEST_4_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} + + template + tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_4_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; +}; + +template +class GTEST_5_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, + GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_) {} + + template + tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_5_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; +}; + +template +class GTEST_6_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_) {} + + template + tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_6_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; +}; + +template +class GTEST_7_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + template + tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_7_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; +}; + +template +class GTEST_8_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, + GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + template + tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_8_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; +}; + +template +class GTEST_9_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + template + tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_9_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; +}; + +template +class tuple { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), + f9_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} + + template + tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), + f9_(t.f9_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_10_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + f9_ = t.f9_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; + T9 f9_; +}; + +// 6.1.3.2 Tuple creation functions. + +// Known limitations: we don't support passing an +// std::tr1::reference_wrapper to make_tuple(). And we don't +// implement tie(). + +inline tuple<> make_tuple() { return tuple<>(); } + +template +inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { + return GTEST_1_TUPLE_(T)(f0); +} + +template +inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { + return GTEST_2_TUPLE_(T)(f0, f1); +} + +template +inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { + return GTEST_3_TUPLE_(T)(f0, f1, f2); +} + +template +inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3) { + return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); +} + +template +inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4) { + return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); +} + +template +inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5) { + return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); +} + +template +inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6) { + return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); +} + +template +inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { + return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); +} + +template +inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8) { + return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); +} + +template +inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8, const T9& f9) { + return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); +} + +// 6.1.3.3 Tuple helper classes. + +template struct tuple_size; + +template +struct tuple_size { static const int value = 0; }; + +template +struct tuple_size { static const int value = 1; }; + +template +struct tuple_size { static const int value = 2; }; + +template +struct tuple_size { static const int value = 3; }; + +template +struct tuple_size { static const int value = 4; }; + +template +struct tuple_size { static const int value = 5; }; + +template +struct tuple_size { static const int value = 6; }; + +template +struct tuple_size { static const int value = 7; }; + +template +struct tuple_size { static const int value = 8; }; + +template +struct tuple_size { static const int value = 9; }; + +template +struct tuple_size { static const int value = 10; }; + +template +struct tuple_element { + typedef typename gtest_internal::TupleElement< + k < (tuple_size::value), k, Tuple>::type type; +}; + +#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type + +// 6.1.3.4 Element access. + +namespace gtest_internal { + +template <> +class Get<0> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + Field(Tuple& t) { return t.f0_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + ConstField(const Tuple& t) { return t.f0_; } +}; + +template <> +class Get<1> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + Field(Tuple& t) { return t.f1_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + ConstField(const Tuple& t) { return t.f1_; } +}; + +template <> +class Get<2> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + Field(Tuple& t) { return t.f2_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + ConstField(const Tuple& t) { return t.f2_; } +}; + +template <> +class Get<3> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + Field(Tuple& t) { return t.f3_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + ConstField(const Tuple& t) { return t.f3_; } +}; + +template <> +class Get<4> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + Field(Tuple& t) { return t.f4_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + ConstField(const Tuple& t) { return t.f4_; } +}; + +template <> +class Get<5> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + Field(Tuple& t) { return t.f5_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + ConstField(const Tuple& t) { return t.f5_; } +}; + +template <> +class Get<6> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + Field(Tuple& t) { return t.f6_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + ConstField(const Tuple& t) { return t.f6_; } +}; + +template <> +class Get<7> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + Field(Tuple& t) { return t.f7_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + ConstField(const Tuple& t) { return t.f7_; } +}; + +template <> +class Get<8> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + Field(Tuple& t) { return t.f8_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + ConstField(const Tuple& t) { return t.f8_; } +}; + +template <> +class Get<9> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + Field(Tuple& t) { return t.f9_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + ConstField(const Tuple& t) { return t.f9_; } +}; + +} // namespace gtest_internal + +template +GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::Field(t); +} + +template +GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(const GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::ConstField(t); +} + +// 6.1.3.5 Relational operators + +// We only implement == and !=, as we don't have a need for the rest yet. + +namespace gtest_internal { + +// SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the +// first k fields of t1 equals the first k fields of t2. +// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if +// k1 != k2. +template +struct SameSizeTuplePrefixComparator; + +template <> +struct SameSizeTuplePrefixComparator<0, 0> { + template + static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { + return true; + } +}; + +template +struct SameSizeTuplePrefixComparator { + template + static bool Eq(const Tuple1& t1, const Tuple2& t2) { + return SameSizeTuplePrefixComparator::Eq(t1, t2) && + ::std::tr1::get(t1) == ::std::tr1::get(t2); + } +}; + +} // namespace gtest_internal + +template +inline bool operator==(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { + return gtest_internal::SameSizeTuplePrefixComparator< + tuple_size::value, + tuple_size::value>::Eq(t, u); +} + +template +inline bool operator!=(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { return !(t == u); } + +// 6.1.4 Pairs. +// Unimplemented. + +} // namespace tr1 +} // namespace std + +#undef GTEST_0_TUPLE_ +#undef GTEST_1_TUPLE_ +#undef GTEST_2_TUPLE_ +#undef GTEST_3_TUPLE_ +#undef GTEST_4_TUPLE_ +#undef GTEST_5_TUPLE_ +#undef GTEST_6_TUPLE_ +#undef GTEST_7_TUPLE_ +#undef GTEST_8_TUPLE_ +#undef GTEST_9_TUPLE_ +#undef GTEST_10_TUPLE_ + +#undef GTEST_0_TYPENAMES_ +#undef GTEST_1_TYPENAMES_ +#undef GTEST_2_TYPENAMES_ +#undef GTEST_3_TYPENAMES_ +#undef GTEST_4_TYPENAMES_ +#undef GTEST_5_TYPENAMES_ +#undef GTEST_6_TYPENAMES_ +#undef GTEST_7_TYPENAMES_ +#undef GTEST_8_TYPENAMES_ +#undef GTEST_9_TYPENAMES_ +#undef GTEST_10_TYPENAMES_ + +#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ +#undef GTEST_BY_REF_ +#undef GTEST_ADD_REF_ +#undef GTEST_TUPLE_ELEMENT_ + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +#elif GTEST_OS_SYMBIAN + +// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to +// use STLport's tuple implementation, which unfortunately doesn't +// work as the copy of STLport distributed with Symbian is incomplete. +// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to +// use its own tuple implementation. +#ifdef BOOST_HAS_TR1_TUPLE +#undef BOOST_HAS_TR1_TUPLE +#endif // BOOST_HAS_TR1_TUPLE + +// This prevents , which defines +// BOOST_HAS_TR1_TUPLE, from being #included by Boost's . +#define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED +#include + +#elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) +// GCC 4.0+ implements tr1/tuple in the header. This does +// not conform to the TR1 spec, which requires the header to be . + +#if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 +// Until version 4.3.2, gcc has a bug that causes , +// which is #included by , to not compile when RTTI is +// disabled. _TR1_FUNCTIONAL is the header guard for +// . Hence the following #define is a hack to prevent +// from being included. +#define _TR1_FUNCTIONAL 1 +#include +#undef _TR1_FUNCTIONAL // Allows the user to #include + // if he chooses to. +#else +#include // NOLINT +#endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 + +#else +// If the compiler is not GCC 4.0+, we assume the user is using a +// spec-conforming TR1 implementation. +#include // NOLINT +#endif // GTEST_USE_OWN_TR1_TUPLE + +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether clone(2) is supported. +// Usually it will only be available on Linux, excluding +// Linux on the Itanium architecture. +// Also see http://linux.die.net/man/2/clone. +#ifndef GTEST_HAS_CLONE +// The user didn't tell us, so we need to figure it out. + +#if GTEST_OS_LINUX && !defined(__ia64__) +#define GTEST_HAS_CLONE 1 +#else +#define GTEST_HAS_CLONE 0 +#endif // GTEST_OS_LINUX && !defined(__ia64__) + +#endif // GTEST_HAS_CLONE + +// Determines whether to support stream redirection. This is used to test +// output correctness and to implement death tests. +#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN +#define GTEST_HAS_STREAM_REDIRECTION_ 1 +#endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN + +// Determines whether to support death tests. +// Google Test does not support death tests for VC 7.1 and earlier as +// abort() in a VC 7.1 application compiled as GUI in debug config +// pops up a dialog window that cannot be suppressed programmatically. +#if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ + (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ + GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX) +#define GTEST_HAS_DEATH_TEST 1 +#include // NOLINT +#endif + +// We don't support MSVC 7.1 with exceptions disabled now. Therefore +// all the compilers we care about are adequate for supporting +// value-parameterized tests. +#define GTEST_HAS_PARAM_TEST 1 + +// Determines whether to support type-driven tests. + +// Typed tests need and variadic macros, which GCC, VC++ 8.0, +// Sun Pro CC, and IBM Visual Age support. +#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ + defined(__IBMCPP__) +#define GTEST_HAS_TYPED_TEST 1 +#define GTEST_HAS_TYPED_TEST_P 1 +#endif + +// Determines whether to support Combine(). This only makes sense when +// value-parameterized tests are enabled. The implementation doesn't +// work on Sun Studio since it doesn't understand templated conversion +// operators. +#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) +#define GTEST_HAS_COMBINE 1 +#endif + +// Determines whether the system compiler uses UTF-16 for encoding wide strings. +#define GTEST_WIDE_STRING_USES_UTF16_ \ + (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) + +// Defines some utility macros. + +// The GNU compiler emits a warning if nested "if" statements are followed by +// an "else" statement and braces are not used to explicitly disambiguate the +// "else" binding. This leads to problems with code like: +// +// if (gate) +// ASSERT_*(condition) << "Some message"; +// +// The "switch (0) case 0:" idiom is used to suppress this. +#ifdef __INTEL_COMPILER +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ +#else +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: // NOLINT +#endif + +// Use this annotation at the end of a struct/class definition to +// prevent the compiler from optimizing away instances that are never +// used. This is useful when all interesting logic happens inside the +// c'tor and / or d'tor. Example: +// +// struct Foo { +// Foo() { ... } +// } GTEST_ATTRIBUTE_UNUSED_; +// +// Also use it after a variable or parameter declaration to tell the +// compiler the variable/parameter does not have to be used. +#if defined(__GNUC__) && !defined(COMPILER_ICC) +#define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) +#else +#define GTEST_ATTRIBUTE_UNUSED_ +#endif + +// A macro to disallow operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_ASSIGN_(type)\ + void operator=(type const &) + +// A macro to disallow copy constructor and operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ + type(type const &);\ + GTEST_DISALLOW_ASSIGN_(type) + +// Tell the compiler to warn about unused return values for functions declared +// with this macro. The macro should be used on function declarations +// following the argument list: +// +// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; +#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) +#define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) +#else +#define GTEST_MUST_USE_RESULT_ +#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC + +// Determine whether the compiler supports Microsoft's Structured Exception +// Handling. This is supported by several Windows compilers but generally +// does not exist on any other system. +#ifndef GTEST_HAS_SEH +// The user didn't tell us, so we need to figure it out. + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// These two compilers are known to support SEH. +#define GTEST_HAS_SEH 1 +#else +// Assume no SEH. +#define GTEST_HAS_SEH 0 +#endif + +#endif // GTEST_HAS_SEH + +#ifdef _MSC_VER + +#if GTEST_LINKED_AS_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllimport) +#elif GTEST_CREATE_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllexport) +#endif + +#endif // _MSC_VER + +#ifndef GTEST_API_ +#define GTEST_API_ +#endif + +namespace testing { + +class Message; + +namespace internal { + +class String; + +typedef ::std::stringstream StrStream; + +// A helper for suppressing warnings on constant condition. It just +// returns 'condition'. +GTEST_API_ bool IsTrue(bool condition); + +// Defines scoped_ptr. + +// This implementation of scoped_ptr is PARTIAL - it only contains +// enough stuff to satisfy Google Test's need. +template +class scoped_ptr { + public: + typedef T element_type; + + explicit scoped_ptr(T* p = NULL) : ptr_(p) {} + ~scoped_ptr() { reset(); } + + T& operator*() const { return *ptr_; } + T* operator->() const { return ptr_; } + T* get() const { return ptr_; } + + T* release() { + T* const ptr = ptr_; + ptr_ = NULL; + return ptr; + } + + void reset(T* p = NULL) { + if (p != ptr_) { + if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. + delete ptr_; + } + ptr_ = p; + } + } + private: + T* ptr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); +}; + +// Defines RE. + +// A simple C++ wrapper for . It uses the POSIX Extended +// Regular Expression syntax. +class GTEST_API_ RE { + public: + // A copy constructor is required by the Standard to initialize object + // references from r-values. + RE(const RE& other) { Init(other.pattern()); } + + // Constructs an RE from a string. + RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + RE(const char* regex) { Init(regex); } // NOLINT + ~RE(); + + // Returns the string representation of the regex. + const char* pattern() const { return pattern_; } + + // FullMatch(str, re) returns true iff regular expression re matches + // the entire str. + // PartialMatch(str, re) returns true iff regular expression re + // matches a substring of str (including str itself). + // + // TODO(wan@google.com): make FullMatch() and PartialMatch() work + // when str contains NUL characters. + static bool FullMatch(const ::std::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::std::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } + +#if GTEST_HAS_GLOBAL_STRING + static bool FullMatch(const ::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } +#endif // GTEST_HAS_GLOBAL_STRING + + static bool FullMatch(const char* str, const RE& re); + static bool PartialMatch(const char* str, const RE& re); + + private: + void Init(const char* regex); + + // We use a const char* instead of a string, as Google Test may be used + // where string is not available. We also do not use Google Test's own + // String type here, in order to simplify dependencies between the + // files. + const char* pattern_; + bool is_valid_; +#if GTEST_USES_POSIX_RE + regex_t full_regex_; // For FullMatch(). + regex_t partial_regex_; // For PartialMatch(). +#else // GTEST_USES_SIMPLE_RE + const char* full_pattern_; // For FullMatch(); +#endif + + GTEST_DISALLOW_ASSIGN_(RE); +}; + +// Defines logging utilities: +// GTEST_LOG_(severity) - logs messages at the specified severity level. The +// message itself is streamed into the macro. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. + +enum GTestLogSeverity { + GTEST_INFO, + GTEST_WARNING, + GTEST_ERROR, + GTEST_FATAL +}; + +// Formats log entry severity, provides a stream object for streaming the +// log message, and terminates the message with a newline when going out of +// scope. +class GTEST_API_ GTestLog { + public: + GTestLog(GTestLogSeverity severity, const char* file, int line); + + // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. + ~GTestLog(); + + ::std::ostream& GetStream() { return ::std::cerr; } + + private: + const GTestLogSeverity severity_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); +}; + +#define GTEST_LOG_(severity) \ + ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ + __FILE__, __LINE__).GetStream() + +inline void LogToStderr() {} +inline void FlushInfoLog() { fflush(NULL); } + +// INTERNAL IMPLEMENTATION - DO NOT USE. +// +// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition +// is not satisfied. +// Synopsys: +// GTEST_CHECK_(boolean_condition); +// or +// GTEST_CHECK_(boolean_condition) << "Additional message"; +// +// This checks the condition and if the condition is not satisfied +// it prints message about the condition violation, including the +// condition itself, plus additional message streamed into it, if any, +// and then it aborts the program. It aborts the program irrespective of +// whether it is built in the debug mode or not. +#define GTEST_CHECK_(condition) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::IsTrue(condition)) \ + ; \ + else \ + GTEST_LOG_(FATAL) << "Condition " #condition " failed. " + +// An all-mode assert to verify that the given POSIX-style function +// call returns 0 (indicating success). Known limitation: this +// doesn't expand to a balanced 'if' statement, so enclose the macro +// in {} if you need to use it as the only statement in an 'if' +// branch. +#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ + if (const int gtest_error = (posix_call)) \ + GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ + << gtest_error + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Downcasts the pointer of type Base to Derived. +// Derived must be a subclass of Base. The parameter MUST +// point to a class of type Derived, not any subclass of it. +// When RTTI is available, the function performs a runtime +// check to enforce this. +template +Derived* CheckedDowncastToActualType(Base* base) { +#if GTEST_HAS_RTTI + GTEST_CHECK_(typeid(*base) == typeid(Derived)); + return dynamic_cast(base); // NOLINT +#else + return static_cast(base); // Poor man's downcast. +#endif +} + +#if GTEST_HAS_STREAM_REDIRECTION_ + +// Defines the stderr capturer: +// CaptureStdout - starts capturing stdout. +// GetCapturedStdout - stops capturing stdout and returns the captured string. +// CaptureStderr - starts capturing stderr. +// GetCapturedStderr - stops capturing stderr and returns the captured string. +// +GTEST_API_ void CaptureStdout(); +GTEST_API_ String GetCapturedStdout(); +GTEST_API_ void CaptureStderr(); +GTEST_API_ String GetCapturedStderr(); + +#endif // GTEST_HAS_STREAM_REDIRECTION_ + + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +extern ::std::vector g_argvs; + +// GTEST_HAS_DEATH_TEST implies we have ::std::string. +const ::std::vector& GetArgvs(); + +#endif // GTEST_HAS_DEATH_TEST + +// Defines synchronization primitives. + +#if GTEST_HAS_PTHREAD + +// Sleeps for (roughly) n milli-seconds. This function is only for +// testing Google Test's own constructs. Don't use it in user tests, +// either directly or indirectly. +inline void SleepMilliseconds(int n) { + const timespec time = { + 0, // 0 seconds. + n * 1000L * 1000L, // And n ms. + }; + nanosleep(&time, NULL); +} + +// Allows a controller thread to pause execution of newly created +// threads until notified. Instances of this class must be created +// and destroyed in the controller thread. +// +// This class is only for testing Google Test's own constructs. Do not +// use it in user tests, either directly or indirectly. +class Notification { + public: + Notification() : notified_(false) {} + + // Notifies all threads created with this notification to start. Must + // be called from the controller thread. + void Notify() { notified_ = true; } + + // Blocks until the controller thread notifies. Must be called from a test + // thread. + void WaitForNotification() { + while(!notified_) { + SleepMilliseconds(10); + } + } + + private: + volatile bool notified_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); +}; + +// As a C-function, ThreadFuncWithCLinkage cannot be templated itself. +// Consequently, it cannot select a correct instantiation of ThreadWithParam +// in order to call its Run(). Introducing ThreadWithParamBase as a +// non-templated base class for ThreadWithParam allows us to bypass this +// problem. +class ThreadWithParamBase { + public: + virtual ~ThreadWithParamBase() {} + virtual void Run() = 0; +}; + +// pthread_create() accepts a pointer to a function type with the C linkage. +// According to the Standard (7.5/1), function types with different linkages +// are different even if they are otherwise identical. Some compilers (for +// example, SunStudio) treat them as different types. Since class methods +// cannot be defined with C-linkage we need to define a free C-function to +// pass into pthread_create(). +extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { + static_cast(thread)->Run(); + return NULL; +} + +// Helper class for testing Google Test's multi-threading constructs. +// To use it, write: +// +// void ThreadFunc(int param) { /* Do things with param */ } +// Notification thread_can_start; +// ... +// // The thread_can_start parameter is optional; you can supply NULL. +// ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); +// thread_can_start.Notify(); +// +// These classes are only for testing Google Test's own constructs. Do +// not use them in user tests, either directly or indirectly. +template +class ThreadWithParam : public ThreadWithParamBase { + public: + typedef void (*UserThreadFunc)(T); + + ThreadWithParam( + UserThreadFunc func, T param, Notification* thread_can_start) + : func_(func), + param_(param), + thread_can_start_(thread_can_start), + finished_(false) { + ThreadWithParamBase* const base = this; + // The thread can be created only after all fields except thread_ + // have been initialized. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); + } + ~ThreadWithParam() { Join(); } + + void Join() { + if (!finished_) { + GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); + finished_ = true; + } + } + + virtual void Run() { + if (thread_can_start_ != NULL) + thread_can_start_->WaitForNotification(); + func_(param_); + } + + private: + const UserThreadFunc func_; // User-supplied thread function. + const T param_; // User-supplied parameter to the thread function. + // When non-NULL, used to block execution until the controller thread + // notifies. + Notification* const thread_can_start_; + bool finished_; // true iff we know that the thread function has finished. + pthread_t thread_; // The native thread object. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); +}; + +// gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is +// true. +#include + +// MutexBase and Mutex implement mutex on pthreads-based platforms. They +// are used in conjunction with class MutexLock: +// +// Mutex mutex; +// ... +// MutexLock lock(&mutex); // Acquires the mutex and releases it at the end +// // of the current scope. +// +// MutexBase implements behavior for both statically and dynamically +// allocated mutexes. Do not use MutexBase directly. Instead, write +// the following to define a static mutex: +// +// GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); +// +// You can forward declare a static mutex like this: +// +// GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); +// +// To create a dynamic mutex, just define an object of type Mutex. +class MutexBase { + public: + // Acquires this mutex. + void Lock() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); + owner_ = pthread_self(); + } + + // Releases this mutex. + void Unlock() { + // We don't protect writing to owner_ here, as it's the caller's + // responsibility to ensure that the current thread holds the + // mutex when this is called. + owner_ = 0; + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); + } + + // Does nothing if the current thread holds the mutex. Otherwise, crashes + // with high probability. + void AssertHeld() const { + GTEST_CHECK_(owner_ == pthread_self()) + << "The current thread is not holding the mutex @" << this; + } + + // A static mutex may be used before main() is entered. It may even + // be used before the dynamic initialization stage. Therefore we + // must be able to initialize a static mutex object at link time. + // This means MutexBase has to be a POD and its member variables + // have to be public. + public: + pthread_mutex_t mutex_; // The underlying pthread mutex. + pthread_t owner_; // The thread holding the mutex; 0 means no one holds it. +}; + +// Forward-declares a static mutex. +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::MutexBase mutex + +// Defines and statically (i.e. at link time) initializes a static mutex. +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ + ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 } + +// The Mutex class can only be used for mutexes created at runtime. It +// shares its API with MutexBase otherwise. +class Mutex : public MutexBase { + public: + Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + owner_ = 0; + } + ~Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); +}; + +// We cannot name this class MutexLock as the ctor declaration would +// conflict with a macro named MutexLock, which is defined on some +// platforms. Hence the typedef trick below. +class GTestMutexLock { + public: + explicit GTestMutexLock(MutexBase* mutex) + : mutex_(mutex) { mutex_->Lock(); } + + ~GTestMutexLock() { mutex_->Unlock(); } + + private: + MutexBase* const mutex_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); +}; + +typedef GTestMutexLock MutexLock; + +// Helpers for ThreadLocal. + +// pthread_key_create() requires DeleteThreadLocalValue() to have +// C-linkage. Therefore it cannot be templatized to access +// ThreadLocal. Hence the need for class +// ThreadLocalValueHolderBase. +class ThreadLocalValueHolderBase { + public: + virtual ~ThreadLocalValueHolderBase() {} +}; + +// Called by pthread to delete thread-local data stored by +// pthread_setspecific(). +extern "C" inline void DeleteThreadLocalValue(void* value_holder) { + delete static_cast(value_holder); +} + +// Implements thread-local storage on pthreads-based systems. +// +// // Thread 1 +// ThreadLocal tl(100); // 100 is the default value for each thread. +// +// // Thread 2 +// tl.set(150); // Changes the value for thread 2 only. +// EXPECT_EQ(150, tl.get()); +// +// // Thread 1 +// EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. +// tl.set(200); +// EXPECT_EQ(200, tl.get()); +// +// The template type argument T must have a public copy constructor. +// In addition, the default ThreadLocal constructor requires T to have +// a public default constructor. +// +// An object managed for a thread by a ThreadLocal instance is deleted +// when the thread exits. Or, if the ThreadLocal instance dies in +// that thread, when the ThreadLocal dies. It's the user's +// responsibility to ensure that all other threads using a ThreadLocal +// have exited when it dies, or the per-thread objects for those +// threads will not be deleted. +// +// Google Test only uses global ThreadLocal objects. That means they +// will die after main() has returned. Therefore, no per-thread +// object managed by Google Test will be leaked as long as all threads +// using Google Test have exited when main() returns. +template +class ThreadLocal { + public: + ThreadLocal() : key_(CreateKey()), + default_() {} + explicit ThreadLocal(const T& value) : key_(CreateKey()), + default_(value) {} + + ~ThreadLocal() { + // Destroys the managed object for the current thread, if any. + DeleteThreadLocalValue(pthread_getspecific(key_)); + + // Releases resources associated with the key. This will *not* + // delete managed objects for other threads. + GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); + } + + T* pointer() { return GetOrCreateValue(); } + const T* pointer() const { return GetOrCreateValue(); } + const T& get() const { return *pointer(); } + void set(const T& value) { *pointer() = value; } + + private: + // Holds a value of type T. + class ValueHolder : public ThreadLocalValueHolderBase { + public: + explicit ValueHolder(const T& value) : value_(value) {} + + T* pointer() { return &value_; } + + private: + T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); + }; + + static pthread_key_t CreateKey() { + pthread_key_t key; + // When a thread exits, DeleteThreadLocalValue() will be called on + // the object managed for that thread. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_key_create(&key, &DeleteThreadLocalValue)); + return key; + } + + T* GetOrCreateValue() const { + ThreadLocalValueHolderBase* const holder = + static_cast(pthread_getspecific(key_)); + if (holder != NULL) { + return CheckedDowncastToActualType(holder)->pointer(); + } + + ValueHolder* const new_holder = new ValueHolder(default_); + ThreadLocalValueHolderBase* const holder_base = new_holder; + GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); + return new_holder->pointer(); + } + + // A key pthreads uses for looking up per-thread values. + const pthread_key_t key_; + const T default_; // The default value for each thread. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); +}; + +#define GTEST_IS_THREADSAFE 1 + +#else // GTEST_HAS_PTHREAD + +// A dummy implementation of synchronization primitives (mutex, lock, +// and thread-local variable). Necessary for compiling Google Test where +// mutex is not supported - using Google Test in multiple threads is not +// supported on such platforms. + +class Mutex { + public: + Mutex() {} + void AssertHeld() const {} +}; + +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::Mutex mutex + +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex + +class GTestMutexLock { + public: + explicit GTestMutexLock(Mutex*) {} // NOLINT +}; + +typedef GTestMutexLock MutexLock; + +template +class ThreadLocal { + public: + ThreadLocal() : value_() {} + explicit ThreadLocal(const T& value) : value_(value) {} + T* pointer() { return &value_; } + const T* pointer() const { return &value_; } + const T& get() const { return value_; } + void set(const T& value) { value_ = value; } + private: + T value_; +}; + +// The above synchronization primitives have dummy implementations. +// Therefore Google Test is not thread-safe. +#define GTEST_IS_THREADSAFE 0 + +#endif // GTEST_HAS_PTHREAD + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +GTEST_API_ size_t GetThreadCount(); + +// Passing non-POD classes through ellipsis (...) crashes the ARM +// compiler and generates a warning in Sun Studio. The Nokia Symbian +// and the IBM XL C/C++ compiler try to instantiate a copy constructor +// for objects passed through ellipsis (...), failing for uncopyable +// objects. We define this to ensure that only POD is passed through +// ellipsis on these systems. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +#define GTEST_ELLIPSIS_NEEDS_POD_ 1 +#else +#define GTEST_CAN_COMPARE_NULL 1 +#endif + +// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between +// const T& and const T* in a function template. These compilers +// _can_ decide between class template specializations for T and T*, +// so a tr1::type_traits-like is_pointer works. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) +#define GTEST_NEEDS_IS_POINTER_ 1 +#endif + +template +struct bool_constant { + typedef bool_constant type; + static const bool value = bool_value; +}; +template const bool bool_constant::value; + +typedef bool_constant false_type; +typedef bool_constant true_type; + +template +struct is_pointer : public false_type {}; + +template +struct is_pointer : public true_type {}; + +#if GTEST_OS_WINDOWS +#define GTEST_PATH_SEP_ "\\" +#define GTEST_HAS_ALT_PATH_SEP_ 1 +// The biggest signed integer type the compiler supports. +typedef __int64 BiggestInt; +#else +#define GTEST_PATH_SEP_ "/" +#define GTEST_HAS_ALT_PATH_SEP_ 0 +typedef long long BiggestInt; // NOLINT +#endif // GTEST_OS_WINDOWS + +// The testing::internal::posix namespace holds wrappers for common +// POSIX functions. These wrappers hide the differences between +// Windows/MSVC and POSIX systems. Since some compilers define these +// standard functions as macros, the wrapper cannot have the same name +// as the wrapped function. + +namespace posix { + +// Functions with a different name on Windows. + +#if GTEST_OS_WINDOWS + +typedef struct _stat StatStruct; + +#ifdef __BORLANDC__ +inline int IsATTY(int fd) { return isatty(fd); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +#else // !__BORLANDC__ +#if GTEST_OS_WINDOWS_MOBILE +inline int IsATTY(int /* fd */) { return 0; } +#else +inline int IsATTY(int fd) { return _isatty(fd); } +#endif // GTEST_OS_WINDOWS_MOBILE +inline int StrCaseCmp(const char* s1, const char* s2) { + return _stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return _strdup(src); } +#endif // __BORLANDC__ + +#if GTEST_OS_WINDOWS_MOBILE +inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } +// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this +// time and thus not defined there. +#else +inline int FileNo(FILE* file) { return _fileno(file); } +inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } +inline int RmDir(const char* dir) { return _rmdir(dir); } +inline bool IsDir(const StatStruct& st) { + return (_S_IFDIR & st.st_mode) != 0; +} +#endif // GTEST_OS_WINDOWS_MOBILE + +#else + +typedef struct stat StatStruct; + +inline int FileNo(FILE* file) { return fileno(file); } +inline int IsATTY(int fd) { return isatty(fd); } +inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return strcasecmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +inline int RmDir(const char* dir) { return rmdir(dir); } +inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } + +#endif // GTEST_OS_WINDOWS + +// Functions deprecated by MSVC 8.0. + +#ifdef _MSC_VER +// Temporarily disable warning 4996 (deprecated function). +#pragma warning(push) +#pragma warning(disable:4996) +#endif + +inline const char* StrNCpy(char* dest, const char* src, size_t n) { + return strncpy(dest, src, n); +} + +// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and +// StrError() aren't needed on Windows CE at this time and thus not +// defined there. + +#if !GTEST_OS_WINDOWS_MOBILE +inline int ChDir(const char* dir) { return chdir(dir); } +#endif +inline FILE* FOpen(const char* path, const char* mode) { + return fopen(path, mode); +} +#if !GTEST_OS_WINDOWS_MOBILE +inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { + return freopen(path, mode, stream); +} +inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } +#endif +inline int FClose(FILE* fp) { return fclose(fp); } +#if !GTEST_OS_WINDOWS_MOBILE +inline int Read(int fd, void* buf, unsigned int count) { + return static_cast(read(fd, buf, count)); +} +inline int Write(int fd, const void* buf, unsigned int count) { + return static_cast(write(fd, buf, count)); +} +inline int Close(int fd) { return close(fd); } +inline const char* StrError(int errnum) { return strerror(errnum); } +#endif +inline const char* GetEnv(const char* name) { +#if GTEST_OS_WINDOWS_MOBILE + // We are on Windows CE, which has no environment variables. + return NULL; +#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) + // Environment variables which we programmatically clear will be set to the + // empty string rather than unset (NULL). Handle that case. + const char* const env = getenv(name); + return (env != NULL && env[0] != '\0') ? env : NULL; +#else + return getenv(name); +#endif +} + +#ifdef _MSC_VER +#pragma warning(pop) // Restores the warning state. +#endif + +#if GTEST_OS_WINDOWS_MOBILE +// Windows CE has no C library. The abort() function is used in +// several places in Google Test. This implementation provides a reasonable +// imitation of standard behaviour. +void Abort(); +#else +inline void Abort() { abort(); } +#endif // GTEST_OS_WINDOWS_MOBILE + +} // namespace posix + +// The maximum number a BiggestInt can represent. This definition +// works no matter BiggestInt is represented in one's complement or +// two's complement. +// +// We cannot rely on numeric_limits in STL, as __int64 and long long +// are not part of standard C++ and numeric_limits doesn't need to be +// defined for them. +const BiggestInt kMaxBiggestInt = + ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); + +// This template class serves as a compile-time function from size to +// type. It maps a size in bytes to a primitive type with that +// size. e.g. +// +// TypeWithSize<4>::UInt +// +// is typedef-ed to be unsigned int (unsigned integer made up of 4 +// bytes). +// +// Such functionality should belong to STL, but I cannot find it +// there. +// +// Google Test uses this class in the implementation of floating-point +// comparison. +// +// For now it only handles UInt (unsigned int) as that's all Google Test +// needs. Other types can be easily added in the future if need +// arises. +template +class TypeWithSize { + public: + // This prevents the user from using TypeWithSize with incorrect + // values of N. + typedef void UInt; +}; + +// The specialization for size 4. +template <> +class TypeWithSize<4> { + public: + // unsigned int has size 4 in both gcc and MSVC. + // + // As base/basictypes.h doesn't compile on Windows, we cannot use + // uint32, uint64, and etc here. + typedef int Int; + typedef unsigned int UInt; +}; + +// The specialization for size 8. +template <> +class TypeWithSize<8> { + public: +#if GTEST_OS_WINDOWS + typedef __int64 Int; + typedef unsigned __int64 UInt; +#else + typedef long long Int; // NOLINT + typedef unsigned long long UInt; // NOLINT +#endif // GTEST_OS_WINDOWS +}; + +// Integer types of known sizes. +typedef TypeWithSize<4>::Int Int32; +typedef TypeWithSize<4>::UInt UInt32; +typedef TypeWithSize<8>::Int Int64; +typedef TypeWithSize<8>::UInt UInt64; +typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. + +// Utilities for command line flags and environment variables. + +// Macro for referencing flags. +#define GTEST_FLAG(name) FLAGS_gtest_##name + +// Macros for declaring flags. +#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) +#define GTEST_DECLARE_int32_(name) \ + GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) +#define GTEST_DECLARE_string_(name) \ + GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name) + +// Macros for defining flags. +#define GTEST_DEFINE_bool_(name, default_val, doc) \ + GTEST_API_ bool GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_int32_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_string_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val) + +// Parses 'str' for a 32-bit signed integer. If successful, writes the result +// to *value and returns true; otherwise leaves *value unchanged and returns +// false. +// TODO(chandlerc): Find a better way to refactor flag and environment parsing +// out of both gtest-port.cc and gtest.cc to avoid exporting this utility +// function. +bool ParseInt32(const Message& src_text, const char* str, Int32* value); + +// Parses a bool/Int32/string from the environment variable +// corresponding to the given Google Test flag. +bool BoolFromGTestEnv(const char* flag, bool default_val); +GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); +const char* StringFromGTestEnv(const char* flag, const char* default_val); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ + +#if GTEST_OS_LINUX +#include +#include +#include +#include +#endif // GTEST_OS_LINUX + +#include +#include +#include +#include +#include + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares the String class and functions used internally by +// Google Test. They are subject to change without notice. They should not used +// by code external to Google Test. +// +// This header file is #included by . +// It should not be #included by other files. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ + +#ifdef __BORLANDC__ +// string.h is not guaranteed to provide strcpy on C++ Builder. +#include +#endif + +#include + +#include + +namespace testing { +namespace internal { + +// String - a UTF-8 string class. +// +// For historic reasons, we don't use std::string. +// +// TODO(wan@google.com): replace this class with std::string or +// implement it in terms of the latter. +// +// Note that String can represent both NULL and the empty string, +// while std::string cannot represent NULL. +// +// NULL and the empty string are considered different. NULL is less +// than anything (including the empty string) except itself. +// +// This class only provides minimum functionality necessary for +// implementing Google Test. We do not intend to implement a full-fledged +// string class here. +// +// Since the purpose of this class is to provide a substitute for +// std::string on platforms where it cannot be used, we define a copy +// constructor and assignment operators such that we don't need +// conditional compilation in a lot of places. +// +// In order to make the representation efficient, the d'tor of String +// is not virtual. Therefore DO NOT INHERIT FROM String. +class GTEST_API_ String { + public: + // Static utility methods + + // Returns the input enclosed in double quotes if it's not NULL; + // otherwise returns "(null)". For example, "\"Hello\"" is returned + // for input "Hello". + // + // This is useful for printing a C string in the syntax of a literal. + // + // Known issue: escape sequences are not handled yet. + static String ShowCStringQuoted(const char* c_str); + + // Clones a 0-terminated C string, allocating memory using new. The + // caller is responsible for deleting the return value using + // delete[]. Returns the cloned string, or NULL if the input is + // NULL. + // + // This is different from strdup() in string.h, which allocates + // memory using malloc(). + static const char* CloneCString(const char* c_str); + +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be + // able to pass strings to Win32 APIs on CE we need to convert them + // to 'Unicode', UTF-16. + + // Creates a UTF-16 wide string from the given ANSI string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the wide string, or NULL if the + // input is NULL. + // + // The wide string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static LPCWSTR AnsiToUtf16(const char* c_str); + + // Creates an ANSI string from the given wide string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the ANSI string, or NULL if the + // input is NULL. + // + // The returned string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static const char* Utf16ToAnsi(LPCWSTR utf16_str); +#endif + + // Compares two C strings. Returns true iff they have the same content. + // + // Unlike strcmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CStringEquals(const char* lhs, const char* rhs); + + // Converts a wide C string to a String using the UTF-8 encoding. + // NULL will be converted to "(null)". If an error occurred during + // the conversion, "(failed to convert from wide string)" is + // returned. + static String ShowWideCString(const wchar_t* wide_c_str); + + // Similar to ShowWideCString(), except that this function encloses + // the converted string in double quotes. + static String ShowWideCStringQuoted(const wchar_t* wide_c_str); + + // Compares two wide C strings. Returns true iff they have the same + // content. + // + // Unlike wcscmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); + + // Compares two C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike strcasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CaseInsensitiveCStringEquals(const char* lhs, + const char* rhs); + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. + static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs); + + // Formats a list of arguments to a String, using the same format + // spec string as for printf. + // + // We do not use the StringPrintf class as it is not universally + // available. + // + // The result is limited to 4096 characters (including the tailing + // 0). If 4096 characters are not enough to format the input, + // "" is returned. + static String Format(const char* format, ...); + + // C'tors + + // The default c'tor constructs a NULL string. + String() : c_str_(NULL), length_(0) {} + + // Constructs a String by cloning a 0-terminated C string. + String(const char* a_c_str) { // NOLINT + if (a_c_str == NULL) { + c_str_ = NULL; + length_ = 0; + } else { + ConstructNonNull(a_c_str, strlen(a_c_str)); + } + } + + // Constructs a String by copying a given number of chars from a + // buffer. E.g. String("hello", 3) creates the string "hel", + // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "", + // and String(NULL, 1) results in access violation. + String(const char* buffer, size_t a_length) { + ConstructNonNull(buffer, a_length); + } + + // The copy c'tor creates a new copy of the string. The two + // String objects do not share content. + String(const String& str) : c_str_(NULL), length_(0) { *this = str; } + + // D'tor. String is intended to be a final class, so the d'tor + // doesn't need to be virtual. + ~String() { delete[] c_str_; } + + // Allows a String to be implicitly converted to an ::std::string or + // ::string, and vice versa. Converting a String containing a NULL + // pointer to ::std::string or ::string is undefined behavior. + // Converting a ::std::string or ::string containing an embedded NUL + // character to a String will result in the prefix up to the first + // NUL character. + String(const ::std::string& str) { + ConstructNonNull(str.c_str(), str.length()); + } + + operator ::std::string() const { return ::std::string(c_str(), length()); } + +#if GTEST_HAS_GLOBAL_STRING + String(const ::string& str) { + ConstructNonNull(str.c_str(), str.length()); + } + + operator ::string() const { return ::string(c_str(), length()); } +#endif // GTEST_HAS_GLOBAL_STRING + + // Returns true iff this is an empty string (i.e. ""). + bool empty() const { return (c_str() != NULL) && (length() == 0); } + + // Compares this with another String. + // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 + // if this is greater than rhs. + int Compare(const String& rhs) const; + + // Returns true iff this String equals the given C string. A NULL + // string and a non-NULL string are considered not equal. + bool operator==(const char* a_c_str) const { return Compare(a_c_str) == 0; } + + // Returns true iff this String is less than the given String. A + // NULL string is considered less than "". + bool operator<(const String& rhs) const { return Compare(rhs) < 0; } + + // Returns true iff this String doesn't equal the given C string. A NULL + // string and a non-NULL string are considered not equal. + bool operator!=(const char* a_c_str) const { return !(*this == a_c_str); } + + // Returns true iff this String ends with the given suffix. *Any* + // String is considered to end with a NULL or empty suffix. + bool EndsWith(const char* suffix) const; + + // Returns true iff this String ends with the given suffix, not considering + // case. Any String is considered to end with a NULL or empty suffix. + bool EndsWithCaseInsensitive(const char* suffix) const; + + // Returns the length of the encapsulated string, or 0 if the + // string is NULL. + size_t length() const { return length_; } + + // Gets the 0-terminated C string this String object represents. + // The String object still owns the string. Therefore the caller + // should NOT delete the return value. + const char* c_str() const { return c_str_; } + + // Assigns a C string to this object. Self-assignment works. + const String& operator=(const char* a_c_str) { + return *this = String(a_c_str); + } + + // Assigns a String object to this object. Self-assignment works. + const String& operator=(const String& rhs) { + if (this != &rhs) { + delete[] c_str_; + if (rhs.c_str() == NULL) { + c_str_ = NULL; + length_ = 0; + } else { + ConstructNonNull(rhs.c_str(), rhs.length()); + } + } + + return *this; + } + + private: + // Constructs a non-NULL String from the given content. This + // function can only be called when data_ has not been allocated. + // ConstructNonNull(NULL, 0) results in an empty string (""). + // ConstructNonNull(NULL, non_zero) is undefined behavior. + void ConstructNonNull(const char* buffer, size_t a_length) { + char* const str = new char[a_length + 1]; + memcpy(str, buffer, a_length); + str[a_length] = '\0'; + c_str_ = str; + length_ = a_length; + } + + const char* c_str_; + size_t length_; +}; // class String + +// Streams a String to an ostream. Each '\0' character in the String +// is replaced with "\\0". +inline ::std::ostream& operator<<(::std::ostream& os, const String& str) { + if (str.c_str() == NULL) { + os << "(null)"; + } else { + const char* const c_str = str.c_str(); + for (size_t i = 0; i != str.length(); i++) { + if (c_str[i] == '\0') { + os << "\\0"; + } else { + os << c_str[i]; + } + } + } + return os; +} + +// Gets the content of the StrStream's buffer as a String. Each '\0' +// character in the buffer is replaced with "\\0". +GTEST_API_ String StrStreamToString(StrStream* stream); + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". + +// Declared here but defined in gtest.h, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: keith.ray@gmail.com (Keith Ray) +// +// Google Test filepath utilities +// +// This header file declares classes and functions used internally by +// Google Test. They are subject to change without notice. +// +// This file is #included in . +// Do not include this header file separately! + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ + + +namespace testing { +namespace internal { + +// FilePath - a class for file and directory pathname manipulation which +// handles platform-specific conventions (like the pathname separator). +// Used for helper functions for naming files in a directory for xml output. +// Except for Set methods, all methods are const or static, which provides an +// "immutable value object" -- useful for peace of mind. +// A FilePath with a value ending in a path separator ("like/this/") represents +// a directory, otherwise it is assumed to represent a file. In either case, +// it may or may not represent an actual file or directory in the file system. +// Names are NOT checked for syntax correctness -- no checking for illegal +// characters, malformed paths, etc. + +class GTEST_API_ FilePath { + public: + FilePath() : pathname_("") { } + FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } + + explicit FilePath(const char* pathname) : pathname_(pathname) { + Normalize(); + } + + explicit FilePath(const String& pathname) : pathname_(pathname) { + Normalize(); + } + + FilePath& operator=(const FilePath& rhs) { + Set(rhs); + return *this; + } + + void Set(const FilePath& rhs) { + pathname_ = rhs.pathname_; + } + + String ToString() const { return pathname_; } + const char* c_str() const { return pathname_.c_str(); } + + // Returns the current working directory, or "" if unsuccessful. + static FilePath GetCurrentDir(); + + // Given directory = "dir", base_name = "test", number = 0, + // extension = "xml", returns "dir/test.xml". If number is greater + // than zero (e.g., 12), returns "dir/test_12.xml". + // On Windows platform, uses \ as the separator rather than /. + static FilePath MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension); + + // Given directory = "dir", relative_path = "test.xml", + // returns "dir/test.xml". + // On Windows, uses \ as the separator rather than /. + static FilePath ConcatPaths(const FilePath& directory, + const FilePath& relative_path); + + // Returns a pathname for a file that does not currently exist. The pathname + // will be directory/base_name.extension or + // directory/base_name_.extension if directory/base_name.extension + // already exists. The number will be incremented until a pathname is found + // that does not already exist. + // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. + // There could be a race condition if two or more processes are calling this + // function at the same time -- they could both pick the same filename. + static FilePath GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension); + + // Returns true iff the path is NULL or "". + bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; } + + // If input name has a trailing separator character, removes it and returns + // the name, otherwise return the name string unmodified. + // On Windows platform, uses \ as the separator, other platforms use /. + FilePath RemoveTrailingPathSeparator() const; + + // Returns a copy of the FilePath with the directory part removed. + // Example: FilePath("path/to/file").RemoveDirectoryName() returns + // FilePath("file"). If there is no directory part ("just_a_file"), it returns + // the FilePath unmodified. If there is no file part ("just_a_dir/") it + // returns an empty FilePath (""). + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveDirectoryName() const; + + // RemoveFileName returns the directory path with the filename removed. + // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". + // If the FilePath is "a_file" or "/a_file", RemoveFileName returns + // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does + // not have a file, like "just/a/dir/", it returns the FilePath unmodified. + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveFileName() const; + + // Returns a copy of the FilePath with the case-insensitive extension removed. + // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns + // FilePath("dir/file"). If a case-insensitive extension is not + // found, returns a copy of the original FilePath. + FilePath RemoveExtension(const char* extension) const; + + // Creates directories so that path exists. Returns true if successful or if + // the directories already exist; returns false if unable to create + // directories for any reason. Will also return false if the FilePath does + // not represent a directory (that is, it doesn't end with a path separator). + bool CreateDirectoriesRecursively() const; + + // Create the directory so that path exists. Returns true if successful or + // if the directory already exists; returns false if unable to create the + // directory for any reason, including if the parent directory does not + // exist. Not named "CreateDirectory" because that's a macro on Windows. + bool CreateFolder() const; + + // Returns true if FilePath describes something in the file-system, + // either a file, directory, or whatever, and that something exists. + bool FileOrDirectoryExists() const; + + // Returns true if pathname describes a directory in the file-system + // that exists. + bool DirectoryExists() const; + + // Returns true if FilePath ends with a path separator, which indicates that + // it is intended to represent a directory. Returns false otherwise. + // This does NOT check that a directory (or file) actually exists. + bool IsDirectory() const; + + // Returns true if pathname describes a root directory. (Windows has one + // root directory per disk drive.) + bool IsRootDirectory() const; + + // Returns true if pathname describes an absolute path. + bool IsAbsolutePath() const; + + private: + // Replaces multiple consecutive separators with a single separator. + // For example, "bar///foo" becomes "bar/foo". Does not eliminate other + // redundancies that might be in a pathname involving "." or "..". + // + // A pathname with multiple consecutive separators may occur either through + // user error or as a result of some scripts or APIs that generate a pathname + // with a trailing separator. On other platforms the same API or script + // may NOT generate a pathname with a trailing "/". Then elsewhere that + // pathname may have another "/" and pathname components added to it, + // without checking for the separator already being there. + // The script language and operating system may allow paths like "foo//bar" + // but some of the functions in FilePath will not handle that correctly. In + // particular, RemoveTrailingPathSeparator() only removes one separator, and + // it is called in CreateDirectoriesRecursively() assuming that it will change + // a pathname from directory syntax (trailing separator) to filename syntax. + // + // On Windows this method also replaces the alternate path separator '/' with + // the primary path separator '\\', so that for example "bar\\/\\foo" becomes + // "bar\\foo". + + void Normalize(); + + // Returns a pointer to the last occurence of a valid path separator in + // the FilePath. On Windows, for example, both '/' and '\' are valid path + // separators. Returns NULL if no path separator was found. + const char* FindLastPathSeparator() const; + + String pathname_; +}; // class FilePath + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +// This file was GENERATED by command: +// pump.py gtest-type-util.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Type utilities needed for implementing typed and type-parameterized +// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently we support at most 50 types in a list, and at most 50 +// type-parameterized tests in one type-parameterized test case. +// Please contact googletestframework@googlegroups.com if you need +// more. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// #ifdef __GNUC__ is too general here. It is possible to use gcc without using +// libstdc++ (which is where cxxabi.h comes from). +#ifdef __GLIBCXX__ +#include +#endif // __GLIBCXX__ + +namespace testing { +namespace internal { + +// AssertyTypeEq::type is defined iff T1 and T2 are the same +// type. This can be used as a compile-time assertion to ensure that +// two types are equal. + +template +struct AssertTypeEq; + +template +struct AssertTypeEq { + typedef bool type; +}; + +// GetTypeName() returns a human-readable name of type T. +template +String GetTypeName() { +#if GTEST_HAS_RTTI + + const char* const name = typeid(T).name(); +#ifdef __GLIBCXX__ + int status = 0; + // gcc's implementation of typeid(T).name() mangles the type name, + // so we have to demangle it. + char* const readable_name = abi::__cxa_demangle(name, 0, 0, &status); + const String name_str(status == 0 ? readable_name : name); + free(readable_name); + return name_str; +#else + return name; +#endif // __GLIBCXX__ + +#else + return ""; +#endif // GTEST_HAS_RTTI +} + +// A unique type used as the default value for the arguments of class +// template Types. This allows us to simulate variadic templates +// (e.g. Types, Type, and etc), which C++ doesn't +// support directly. +struct None {}; + +// The following family of struct and struct templates are used to +// represent type lists. In particular, TypesN +// represents a type list with N types (T1, T2, ..., and TN) in it. +// Except for Types0, every struct in the family has two member types: +// Head for the first type in the list, and Tail for the rest of the +// list. + +// The empty type list. +struct Types0 {}; + +// Type lists of length 1, 2, 3, and so on. + +template +struct Types1 { + typedef T1 Head; + typedef Types0 Tail; +}; +template +struct Types2 { + typedef T1 Head; + typedef Types1 Tail; +}; + +template +struct Types3 { + typedef T1 Head; + typedef Types2 Tail; +}; + +template +struct Types4 { + typedef T1 Head; + typedef Types3 Tail; +}; + +template +struct Types5 { + typedef T1 Head; + typedef Types4 Tail; +}; + +template +struct Types6 { + typedef T1 Head; + typedef Types5 Tail; +}; + +template +struct Types7 { + typedef T1 Head; + typedef Types6 Tail; +}; + +template +struct Types8 { + typedef T1 Head; + typedef Types7 Tail; +}; + +template +struct Types9 { + typedef T1 Head; + typedef Types8 Tail; +}; + +template +struct Types10 { + typedef T1 Head; + typedef Types9 Tail; +}; + +template +struct Types11 { + typedef T1 Head; + typedef Types10 Tail; +}; + +template +struct Types12 { + typedef T1 Head; + typedef Types11 Tail; +}; + +template +struct Types13 { + typedef T1 Head; + typedef Types12 Tail; +}; + +template +struct Types14 { + typedef T1 Head; + typedef Types13 Tail; +}; + +template +struct Types15 { + typedef T1 Head; + typedef Types14 Tail; +}; + +template +struct Types16 { + typedef T1 Head; + typedef Types15 Tail; +}; + +template +struct Types17 { + typedef T1 Head; + typedef Types16 Tail; +}; + +template +struct Types18 { + typedef T1 Head; + typedef Types17 Tail; +}; + +template +struct Types19 { + typedef T1 Head; + typedef Types18 Tail; +}; + +template +struct Types20 { + typedef T1 Head; + typedef Types19 Tail; +}; + +template +struct Types21 { + typedef T1 Head; + typedef Types20 Tail; +}; + +template +struct Types22 { + typedef T1 Head; + typedef Types21 Tail; +}; + +template +struct Types23 { + typedef T1 Head; + typedef Types22 Tail; +}; + +template +struct Types24 { + typedef T1 Head; + typedef Types23 Tail; +}; + +template +struct Types25 { + typedef T1 Head; + typedef Types24 Tail; +}; + +template +struct Types26 { + typedef T1 Head; + typedef Types25 Tail; +}; + +template +struct Types27 { + typedef T1 Head; + typedef Types26 Tail; +}; + +template +struct Types28 { + typedef T1 Head; + typedef Types27 Tail; +}; + +template +struct Types29 { + typedef T1 Head; + typedef Types28 Tail; +}; + +template +struct Types30 { + typedef T1 Head; + typedef Types29 Tail; +}; + +template +struct Types31 { + typedef T1 Head; + typedef Types30 Tail; +}; + +template +struct Types32 { + typedef T1 Head; + typedef Types31 Tail; +}; + +template +struct Types33 { + typedef T1 Head; + typedef Types32 Tail; +}; + +template +struct Types34 { + typedef T1 Head; + typedef Types33 Tail; +}; + +template +struct Types35 { + typedef T1 Head; + typedef Types34 Tail; +}; + +template +struct Types36 { + typedef T1 Head; + typedef Types35 Tail; +}; + +template +struct Types37 { + typedef T1 Head; + typedef Types36 Tail; +}; + +template +struct Types38 { + typedef T1 Head; + typedef Types37 Tail; +}; + +template +struct Types39 { + typedef T1 Head; + typedef Types38 Tail; +}; + +template +struct Types40 { + typedef T1 Head; + typedef Types39 Tail; +}; + +template +struct Types41 { + typedef T1 Head; + typedef Types40 Tail; +}; + +template +struct Types42 { + typedef T1 Head; + typedef Types41 Tail; +}; + +template +struct Types43 { + typedef T1 Head; + typedef Types42 Tail; +}; + +template +struct Types44 { + typedef T1 Head; + typedef Types43 Tail; +}; + +template +struct Types45 { + typedef T1 Head; + typedef Types44 Tail; +}; + +template +struct Types46 { + typedef T1 Head; + typedef Types45 Tail; +}; + +template +struct Types47 { + typedef T1 Head; + typedef Types46 Tail; +}; + +template +struct Types48 { + typedef T1 Head; + typedef Types47 Tail; +}; + +template +struct Types49 { + typedef T1 Head; + typedef Types48 Tail; +}; + +template +struct Types50 { + typedef T1 Head; + typedef Types49 Tail; +}; + + +} // namespace internal + +// We don't want to require the users to write TypesN<...> directly, +// as that would require them to count the length. Types<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Types +// will appear as Types in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Types, and Google Test will translate +// that to TypesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Types template. +template +struct Types { + typedef internal::Types50 type; +}; + +template <> +struct Types { + typedef internal::Types0 type; +}; +template +struct Types { + typedef internal::Types1 type; +}; +template +struct Types { + typedef internal::Types2 type; +}; +template +struct Types { + typedef internal::Types3 type; +}; +template +struct Types { + typedef internal::Types4 type; +}; +template +struct Types { + typedef internal::Types5 type; +}; +template +struct Types { + typedef internal::Types6 type; +}; +template +struct Types { + typedef internal::Types7 type; +}; +template +struct Types { + typedef internal::Types8 type; +}; +template +struct Types { + typedef internal::Types9 type; +}; +template +struct Types { + typedef internal::Types10 type; +}; +template +struct Types { + typedef internal::Types11 type; +}; +template +struct Types { + typedef internal::Types12 type; +}; +template +struct Types { + typedef internal::Types13 type; +}; +template +struct Types { + typedef internal::Types14 type; +}; +template +struct Types { + typedef internal::Types15 type; +}; +template +struct Types { + typedef internal::Types16 type; +}; +template +struct Types { + typedef internal::Types17 type; +}; +template +struct Types { + typedef internal::Types18 type; +}; +template +struct Types { + typedef internal::Types19 type; +}; +template +struct Types { + typedef internal::Types20 type; +}; +template +struct Types { + typedef internal::Types21 type; +}; +template +struct Types { + typedef internal::Types22 type; +}; +template +struct Types { + typedef internal::Types23 type; +}; +template +struct Types { + typedef internal::Types24 type; +}; +template +struct Types { + typedef internal::Types25 type; +}; +template +struct Types { + typedef internal::Types26 type; +}; +template +struct Types { + typedef internal::Types27 type; +}; +template +struct Types { + typedef internal::Types28 type; +}; +template +struct Types { + typedef internal::Types29 type; +}; +template +struct Types { + typedef internal::Types30 type; +}; +template +struct Types { + typedef internal::Types31 type; +}; +template +struct Types { + typedef internal::Types32 type; +}; +template +struct Types { + typedef internal::Types33 type; +}; +template +struct Types { + typedef internal::Types34 type; +}; +template +struct Types { + typedef internal::Types35 type; +}; +template +struct Types { + typedef internal::Types36 type; +}; +template +struct Types { + typedef internal::Types37 type; +}; +template +struct Types { + typedef internal::Types38 type; +}; +template +struct Types { + typedef internal::Types39 type; +}; +template +struct Types { + typedef internal::Types40 type; +}; +template +struct Types { + typedef internal::Types41 type; +}; +template +struct Types { + typedef internal::Types42 type; +}; +template +struct Types { + typedef internal::Types43 type; +}; +template +struct Types { + typedef internal::Types44 type; +}; +template +struct Types { + typedef internal::Types45 type; +}; +template +struct Types { + typedef internal::Types46 type; +}; +template +struct Types { + typedef internal::Types47 type; +}; +template +struct Types { + typedef internal::Types48 type; +}; +template +struct Types { + typedef internal::Types49 type; +}; + +namespace internal { + +#define GTEST_TEMPLATE_ template class + +// The template "selector" struct TemplateSel is used to +// represent Tmpl, which must be a class template with one type +// parameter, as a type. TemplateSel::Bind::type is defined +// as the type Tmpl. This allows us to actually instantiate the +// template "selected" by TemplateSel. +// +// This trick is necessary for simulating typedef for class templates, +// which C++ doesn't support directly. +template +struct TemplateSel { + template + struct Bind { + typedef Tmpl type; + }; +}; + +#define GTEST_BIND_(TmplSel, T) \ + TmplSel::template Bind::type + +// A unique struct template used as the default value for the +// arguments of class template Templates. This allows us to simulate +// variadic templates (e.g. Templates, Templates, +// and etc), which C++ doesn't support directly. +template +struct NoneT {}; + +// The following family of struct and struct templates are used to +// represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except +// for Templates0, every struct in the family has two member types: +// Head for the selector of the first template in the list, and Tail +// for the rest of the list. + +// The empty template list. +struct Templates0 {}; + +// Template lists of length 1, 2, 3, and so on. + +template +struct Templates1 { + typedef TemplateSel Head; + typedef Templates0 Tail; +}; +template +struct Templates2 { + typedef TemplateSel Head; + typedef Templates1 Tail; +}; + +template +struct Templates3 { + typedef TemplateSel Head; + typedef Templates2 Tail; +}; + +template +struct Templates4 { + typedef TemplateSel Head; + typedef Templates3 Tail; +}; + +template +struct Templates5 { + typedef TemplateSel Head; + typedef Templates4 Tail; +}; + +template +struct Templates6 { + typedef TemplateSel Head; + typedef Templates5 Tail; +}; + +template +struct Templates7 { + typedef TemplateSel Head; + typedef Templates6 Tail; +}; + +template +struct Templates8 { + typedef TemplateSel Head; + typedef Templates7 Tail; +}; + +template +struct Templates9 { + typedef TemplateSel Head; + typedef Templates8 Tail; +}; + +template +struct Templates10 { + typedef TemplateSel Head; + typedef Templates9 Tail; +}; + +template +struct Templates11 { + typedef TemplateSel Head; + typedef Templates10 Tail; +}; + +template +struct Templates12 { + typedef TemplateSel Head; + typedef Templates11 Tail; +}; + +template +struct Templates13 { + typedef TemplateSel Head; + typedef Templates12 Tail; +}; + +template +struct Templates14 { + typedef TemplateSel Head; + typedef Templates13 Tail; +}; + +template +struct Templates15 { + typedef TemplateSel Head; + typedef Templates14 Tail; +}; + +template +struct Templates16 { + typedef TemplateSel Head; + typedef Templates15 Tail; +}; + +template +struct Templates17 { + typedef TemplateSel Head; + typedef Templates16 Tail; +}; + +template +struct Templates18 { + typedef TemplateSel Head; + typedef Templates17 Tail; +}; + +template +struct Templates19 { + typedef TemplateSel Head; + typedef Templates18 Tail; +}; + +template +struct Templates20 { + typedef TemplateSel Head; + typedef Templates19 Tail; +}; + +template +struct Templates21 { + typedef TemplateSel Head; + typedef Templates20 Tail; +}; + +template +struct Templates22 { + typedef TemplateSel Head; + typedef Templates21 Tail; +}; + +template +struct Templates23 { + typedef TemplateSel Head; + typedef Templates22 Tail; +}; + +template +struct Templates24 { + typedef TemplateSel Head; + typedef Templates23 Tail; +}; + +template +struct Templates25 { + typedef TemplateSel Head; + typedef Templates24 Tail; +}; + +template +struct Templates26 { + typedef TemplateSel Head; + typedef Templates25 Tail; +}; + +template +struct Templates27 { + typedef TemplateSel Head; + typedef Templates26 Tail; +}; + +template +struct Templates28 { + typedef TemplateSel Head; + typedef Templates27 Tail; +}; + +template +struct Templates29 { + typedef TemplateSel Head; + typedef Templates28 Tail; +}; + +template +struct Templates30 { + typedef TemplateSel Head; + typedef Templates29 Tail; +}; + +template +struct Templates31 { + typedef TemplateSel Head; + typedef Templates30 Tail; +}; + +template +struct Templates32 { + typedef TemplateSel Head; + typedef Templates31 Tail; +}; + +template +struct Templates33 { + typedef TemplateSel Head; + typedef Templates32 Tail; +}; + +template +struct Templates34 { + typedef TemplateSel Head; + typedef Templates33 Tail; +}; + +template +struct Templates35 { + typedef TemplateSel Head; + typedef Templates34 Tail; +}; + +template +struct Templates36 { + typedef TemplateSel Head; + typedef Templates35 Tail; +}; + +template +struct Templates37 { + typedef TemplateSel Head; + typedef Templates36 Tail; +}; + +template +struct Templates38 { + typedef TemplateSel Head; + typedef Templates37 Tail; +}; + +template +struct Templates39 { + typedef TemplateSel Head; + typedef Templates38 Tail; +}; + +template +struct Templates40 { + typedef TemplateSel Head; + typedef Templates39 Tail; +}; + +template +struct Templates41 { + typedef TemplateSel Head; + typedef Templates40 Tail; +}; + +template +struct Templates42 { + typedef TemplateSel Head; + typedef Templates41 Tail; +}; + +template +struct Templates43 { + typedef TemplateSel Head; + typedef Templates42 Tail; +}; + +template +struct Templates44 { + typedef TemplateSel Head; + typedef Templates43 Tail; +}; + +template +struct Templates45 { + typedef TemplateSel Head; + typedef Templates44 Tail; +}; + +template +struct Templates46 { + typedef TemplateSel Head; + typedef Templates45 Tail; +}; + +template +struct Templates47 { + typedef TemplateSel Head; + typedef Templates46 Tail; +}; + +template +struct Templates48 { + typedef TemplateSel Head; + typedef Templates47 Tail; +}; + +template +struct Templates49 { + typedef TemplateSel Head; + typedef Templates48 Tail; +}; + +template +struct Templates50 { + typedef TemplateSel Head; + typedef Templates49 Tail; +}; + + +// We don't want to require the users to write TemplatesN<...> directly, +// as that would require them to count the length. Templates<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Templates +// will appear as Templates in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Templates, and Google Test will translate +// that to TemplatesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Templates template. +template +struct Templates { + typedef Templates50 type; +}; + +template <> +struct Templates { + typedef Templates0 type; +}; +template +struct Templates { + typedef Templates1 type; +}; +template +struct Templates { + typedef Templates2 type; +}; +template +struct Templates { + typedef Templates3 type; +}; +template +struct Templates { + typedef Templates4 type; +}; +template +struct Templates { + typedef Templates5 type; +}; +template +struct Templates { + typedef Templates6 type; +}; +template +struct Templates { + typedef Templates7 type; +}; +template +struct Templates { + typedef Templates8 type; +}; +template +struct Templates { + typedef Templates9 type; +}; +template +struct Templates { + typedef Templates10 type; +}; +template +struct Templates { + typedef Templates11 type; +}; +template +struct Templates { + typedef Templates12 type; +}; +template +struct Templates { + typedef Templates13 type; +}; +template +struct Templates { + typedef Templates14 type; +}; +template +struct Templates { + typedef Templates15 type; +}; +template +struct Templates { + typedef Templates16 type; +}; +template +struct Templates { + typedef Templates17 type; +}; +template +struct Templates { + typedef Templates18 type; +}; +template +struct Templates { + typedef Templates19 type; +}; +template +struct Templates { + typedef Templates20 type; +}; +template +struct Templates { + typedef Templates21 type; +}; +template +struct Templates { + typedef Templates22 type; +}; +template +struct Templates { + typedef Templates23 type; +}; +template +struct Templates { + typedef Templates24 type; +}; +template +struct Templates { + typedef Templates25 type; +}; +template +struct Templates { + typedef Templates26 type; +}; +template +struct Templates { + typedef Templates27 type; +}; +template +struct Templates { + typedef Templates28 type; +}; +template +struct Templates { + typedef Templates29 type; +}; +template +struct Templates { + typedef Templates30 type; +}; +template +struct Templates { + typedef Templates31 type; +}; +template +struct Templates { + typedef Templates32 type; +}; +template +struct Templates { + typedef Templates33 type; +}; +template +struct Templates { + typedef Templates34 type; +}; +template +struct Templates { + typedef Templates35 type; +}; +template +struct Templates { + typedef Templates36 type; +}; +template +struct Templates { + typedef Templates37 type; +}; +template +struct Templates { + typedef Templates38 type; +}; +template +struct Templates { + typedef Templates39 type; +}; +template +struct Templates { + typedef Templates40 type; +}; +template +struct Templates { + typedef Templates41 type; +}; +template +struct Templates { + typedef Templates42 type; +}; +template +struct Templates { + typedef Templates43 type; +}; +template +struct Templates { + typedef Templates44 type; +}; +template +struct Templates { + typedef Templates45 type; +}; +template +struct Templates { + typedef Templates46 type; +}; +template +struct Templates { + typedef Templates47 type; +}; +template +struct Templates { + typedef Templates48 type; +}; +template +struct Templates { + typedef Templates49 type; +}; + +// The TypeList template makes it possible to use either a single type +// or a Types<...> list in TYPED_TEST_CASE() and +// INSTANTIATE_TYPED_TEST_CASE_P(). + +template +struct TypeList { typedef Types1 type; }; + +template +struct TypeList > { + typedef typename Types::type type; +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + +// Due to C++ preprocessor weirdness, we need double indirection to +// concatenate two tokens when one of them is __LINE__. Writing +// +// foo ## __LINE__ +// +// will result in the token foo__LINE__, instead of foo followed by +// the current line number. For more details, see +// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 +#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) +#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar + +// Google Test defines the testing::Message class to allow construction of +// test messages via the << operator. The idea is that anything +// streamable to std::ostream can be streamed to a testing::Message. +// This allows a user to use his own types in Google Test assertions by +// overloading the << operator. +// +// util/gtl/stl_logging-inl.h overloads << for STL containers. These +// overloads cannot be defined in the std namespace, as that will be +// undefined behavior. Therefore, they are defined in the global +// namespace instead. +// +// C++'s symbol lookup rule (i.e. Koenig lookup) says that these +// overloads are visible in either the std namespace or the global +// namespace, but not other namespaces, including the testing +// namespace which Google Test's Message class is in. +// +// To allow STL containers (and other types that has a << operator +// defined in the global namespace) to be used in Google Test assertions, +// testing::Message must access the custom << operator from the global +// namespace. Hence this helper function. +// +// Note: Jeffrey Yasskin suggested an alternative fix by "using +// ::operator<<;" in the definition of Message's operator<<. That fix +// doesn't require a helper function, but unfortunately doesn't +// compile with MSVC. +template +inline void GTestStreamToHelper(std::ostream* os, const T& val) { + *os << val; +} + +namespace testing { + +// Forward declaration of classes. + +class AssertionResult; // Result of an assertion. +class Message; // Represents a failure message. +class Test; // Represents a test. +class TestInfo; // Information about a test. +class TestPartResult; // Result of a test part. +class UnitTest; // A collection of test cases. + +namespace internal { + +struct TraceInfo; // Information about a trace point. +class ScopedTrace; // Implements scoped trace. +class TestInfoImpl; // Opaque implementation of TestInfo +class UnitTestImpl; // Opaque implementation of UnitTest + +// How many times InitGoogleTest() has been called. +extern int g_init_gtest_count; + +// The text used in failure messages to indicate the start of the +// stack trace. +GTEST_API_ extern const char kStackTraceMarker[]; + +// A secret type that Google Test users don't know about. It has no +// definition on purpose. Therefore it's impossible to create a +// Secret object, which is what we want. +class Secret; + +// Two overloaded helpers for checking at compile time whether an +// expression is a null pointer literal (i.e. NULL or any 0-valued +// compile-time integral constant). Their return values have +// different sizes, so we can use sizeof() to test which version is +// picked by the compiler. These helpers have no implementations, as +// we only need their signatures. +// +// Given IsNullLiteralHelper(x), the compiler will pick the first +// version if x can be implicitly converted to Secret*, and pick the +// second version otherwise. Since Secret is a secret and incomplete +// type, the only expression a user can write that has type Secret* is +// a null pointer literal. Therefore, we know that x is a null +// pointer literal if and only if the first version is picked by the +// compiler. +char IsNullLiteralHelper(Secret* p); +char (&IsNullLiteralHelper(...))[2]; // NOLINT + +// A compile-time bool constant that is true if and only if x is a +// null pointer literal (i.e. NULL or any 0-valued compile-time +// integral constant). +#ifdef GTEST_ELLIPSIS_NEEDS_POD_ +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +#define GTEST_IS_NULL_LITERAL_(x) false +#else +#define GTEST_IS_NULL_LITERAL_(x) \ + (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) +#endif // GTEST_ELLIPSIS_NEEDS_POD_ + +// Appends the user-supplied message to the Google-Test-generated message. +GTEST_API_ String AppendUserMessage(const String& gtest_msg, + const Message& user_msg); + +// A helper class for creating scoped traces in user programs. +class GTEST_API_ ScopedTrace { + public: + // The c'tor pushes the given source file location and message onto + // a trace stack maintained by Google Test. + ScopedTrace(const char* file, int line, const Message& message); + + // The d'tor pops the info pushed by the c'tor. + // + // Note that the d'tor is not virtual in order to be efficient. + // Don't inherit from ScopedTrace! + ~ScopedTrace(); + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); +} GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its + // c'tor and d'tor. Therefore it doesn't + // need to be used otherwise. + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". +// Declared here but defined in gtest.h, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable); + +// Formats a value to be used in a failure message. + +#ifdef GTEST_NEEDS_IS_POINTER_ + +// These are needed as the Nokia Symbian and IBM XL C/C++ compilers +// cannot decide between const T& and const T* in a function template. +// These compilers _can_ decide between class template specializations +// for T and T*, so a tr1::type_traits-like is_pointer works, and we +// can overload on that. + +// This overload makes sure that all pointers (including +// those to char or wchar_t) are printed as raw pointers. +template +inline String FormatValueForFailureMessage(internal::true_type /*dummy*/, + T* pointer) { + return StreamableToString(static_cast(pointer)); +} + +template +inline String FormatValueForFailureMessage(internal::false_type /*dummy*/, + const T& value) { + return StreamableToString(value); +} + +template +inline String FormatForFailureMessage(const T& value) { + return FormatValueForFailureMessage( + typename internal::is_pointer::type(), value); +} + +#else + +// These are needed as the above solution using is_pointer has the +// limitation that T cannot be a type without external linkage, when +// compiled using MSVC. + +template +inline String FormatForFailureMessage(const T& value) { + return StreamableToString(value); +} + +// This overload makes sure that all pointers (including +// those to char or wchar_t) are printed as raw pointers. +template +inline String FormatForFailureMessage(T* pointer) { + return StreamableToString(static_cast(pointer)); +} + +#endif // GTEST_NEEDS_IS_POINTER_ + +// These overloaded versions handle narrow and wide characters. +GTEST_API_ String FormatForFailureMessage(char ch); +GTEST_API_ String FormatForFailureMessage(wchar_t wchar); + +// When this operand is a const char* or char*, and the other operand +// is a ::std::string or ::string, we print this operand as a C string +// rather than a pointer. We do the same for wide strings. + +// This internal macro is used to avoid duplicated code. +#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\ +inline String FormatForComparisonFailureMessage(\ + operand2_type::value_type* str, const operand2_type& /*operand2*/) {\ + return operand1_printer(str);\ +}\ +inline String FormatForComparisonFailureMessage(\ + const operand2_type::value_type* str, const operand2_type& /*operand2*/) {\ + return operand1_printer(str);\ +} + +GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted) +#if GTEST_HAS_STD_WSTRING +GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted) +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_STRING +GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted) +#endif // GTEST_HAS_GLOBAL_STRING +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted) +#endif // GTEST_HAS_GLOBAL_WSTRING + +#undef GTEST_FORMAT_IMPL_ + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +GTEST_API_ AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const String& expected_value, + const String& actual_value, + bool ignoring_case); + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +GTEST_API_ String GetBoolAssertionFailureMessage( + const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value); + +// This template class represents an IEEE floating-point number +// (either single-precision or double-precision, depending on the +// template parameters). +// +// The purpose of this class is to do more sophisticated number +// comparison. (Due to round-off error, etc, it's very unlikely that +// two floating-points will be equal exactly. Hence a naive +// comparison by the == operation often doesn't work.) +// +// Format of IEEE floating-point: +// +// The most-significant bit being the leftmost, an IEEE +// floating-point looks like +// +// sign_bit exponent_bits fraction_bits +// +// Here, sign_bit is a single bit that designates the sign of the +// number. +// +// For float, there are 8 exponent bits and 23 fraction bits. +// +// For double, there are 11 exponent bits and 52 fraction bits. +// +// More details can be found at +// http://en.wikipedia.org/wiki/IEEE_floating-point_standard. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +template +class FloatingPoint { + public: + // Defines the unsigned integer type that has the same size as the + // floating point number. + typedef typename TypeWithSize::UInt Bits; + + // Constants. + + // # of bits in a number. + static const size_t kBitCount = 8*sizeof(RawType); + + // # of fraction bits in a number. + static const size_t kFractionBitCount = + std::numeric_limits::digits - 1; + + // # of exponent bits in a number. + static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; + + // The mask for the sign bit. + static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); + + // The mask for the fraction bits. + static const Bits kFractionBitMask = + ~static_cast(0) >> (kExponentBitCount + 1); + + // The mask for the exponent bits. + static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); + + // How many ULP's (Units in the Last Place) we want to tolerate when + // comparing two numbers. The larger the value, the more error we + // allow. A 0 value means that two numbers must be exactly the same + // to be considered equal. + // + // The maximum error of a single floating-point operation is 0.5 + // units in the last place. On Intel CPU's, all floating-point + // calculations are done with 80-bit precision, while double has 64 + // bits. Therefore, 4 should be enough for ordinary use. + // + // See the following article for more details on ULP: + // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm. + static const size_t kMaxUlps = 4; + + // Constructs a FloatingPoint from a raw floating-point number. + // + // On an Intel CPU, passing a non-normalized NAN (Not a Number) + // around may change its bits, although the new value is guaranteed + // to be also a NAN. Therefore, don't expect this constructor to + // preserve the bits in x when x is a NAN. + explicit FloatingPoint(const RawType& x) { u_.value_ = x; } + + // Static methods + + // Reinterprets a bit pattern as a floating-point number. + // + // This function is needed to test the AlmostEquals() method. + static RawType ReinterpretBits(const Bits bits) { + FloatingPoint fp(0); + fp.u_.bits_ = bits; + return fp.u_.value_; + } + + // Returns the floating-point number that represent positive infinity. + static RawType Infinity() { + return ReinterpretBits(kExponentBitMask); + } + + // Non-static methods + + // Returns the bits that represents this number. + const Bits &bits() const { return u_.bits_; } + + // Returns the exponent bits of this number. + Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } + + // Returns the fraction bits of this number. + Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } + + // Returns the sign bit of this number. + Bits sign_bit() const { return kSignBitMask & u_.bits_; } + + // Returns true iff this is NAN (not a number). + bool is_nan() const { + // It's a NAN if the exponent bits are all ones and the fraction + // bits are not entirely zeros. + return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); + } + + // Returns true iff this number is at most kMaxUlps ULP's away from + // rhs. In particular, this function: + // + // - returns false if either number is (or both are) NAN. + // - treats really large numbers as almost equal to infinity. + // - thinks +0.0 and -0.0 are 0 DLP's apart. + bool AlmostEquals(const FloatingPoint& rhs) const { + // The IEEE standard says that any comparison operation involving + // a NAN must return false. + if (is_nan() || rhs.is_nan()) return false; + + return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) + <= kMaxUlps; + } + + private: + // The data type used to store the actual floating-point number. + union FloatingPointUnion { + RawType value_; // The raw floating-point number. + Bits bits_; // The bits that represent the number. + }; + + // Converts an integer from the sign-and-magnitude representation to + // the biased representation. More precisely, let N be 2 to the + // power of (kBitCount - 1), an integer x is represented by the + // unsigned number x + N. + // + // For instance, + // + // -N + 1 (the most negative number representable using + // sign-and-magnitude) is represented by 1; + // 0 is represented by N; and + // N - 1 (the biggest number representable using + // sign-and-magnitude) is represented by 2N - 1. + // + // Read http://en.wikipedia.org/wiki/Signed_number_representations + // for more details on signed number representations. + static Bits SignAndMagnitudeToBiased(const Bits &sam) { + if (kSignBitMask & sam) { + // sam represents a negative number. + return ~sam + 1; + } else { + // sam represents a positive number. + return kSignBitMask | sam; + } + } + + // Given two numbers in the sign-and-magnitude representation, + // returns the distance between them as an unsigned number. + static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, + const Bits &sam2) { + const Bits biased1 = SignAndMagnitudeToBiased(sam1); + const Bits biased2 = SignAndMagnitudeToBiased(sam2); + return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); + } + + FloatingPointUnion u_; +}; + +// Typedefs the instances of the FloatingPoint template class that we +// care to use. +typedef FloatingPoint Float; +typedef FloatingPoint Double; + +// In order to catch the mistake of putting tests that use different +// test fixture classes in the same test case, we need to assign +// unique IDs to fixture classes and compare them. The TypeId type is +// used to hold such IDs. The user should treat TypeId as an opaque +// type: the only operation allowed on TypeId values is to compare +// them for equality using the == operator. +typedef const void* TypeId; + +template +class TypeIdHelper { + public: + // dummy_ must not have a const type. Otherwise an overly eager + // compiler (e.g. MSVC 7.1 & 8.0) may try to merge + // TypeIdHelper::dummy_ for different Ts as an "optimization". + static bool dummy_; +}; + +template +bool TypeIdHelper::dummy_ = false; + +// GetTypeId() returns the ID of type T. Different values will be +// returned for different types. Calling the function twice with the +// same type argument is guaranteed to return the same ID. +template +TypeId GetTypeId() { + // The compiler is required to allocate a different + // TypeIdHelper::dummy_ variable for each T used to instantiate + // the template. Therefore, the address of dummy_ is guaranteed to + // be unique. + return &(TypeIdHelper::dummy_); +} + +// Returns the type ID of ::testing::Test. Always call this instead +// of GetTypeId< ::testing::Test>() to get the type ID of +// ::testing::Test, as the latter may give the wrong result due to a +// suspected linker bug when compiling Google Test as a Mac OS X +// framework. +GTEST_API_ TypeId GetTestTypeId(); + +// Defines the abstract factory interface that creates instances +// of a Test object. +class TestFactoryBase { + public: + virtual ~TestFactoryBase() {} + + // Creates a test instance to run. The instance is both created and destroyed + // within TestInfoImpl::Run() + virtual Test* CreateTest() = 0; + + protected: + TestFactoryBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); +}; + +// This class provides implementation of TeastFactoryBase interface. +// It is used in TEST and TEST_F macros. +template +class TestFactoryImpl : public TestFactoryBase { + public: + virtual Test* CreateTest() { return new TestClass; } +}; + +#if GTEST_OS_WINDOWS + +// Predicate-formatters for implementing the HRESULT checking macros +// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} +// We pass a long instead of HRESULT to avoid causing an +// include dependency for the HRESULT type. +GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, + long hr); // NOLINT +GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, + long hr); // NOLINT + +#endif // GTEST_OS_WINDOWS + +// Formats a source file path and a line number as they would appear +// in a compiler error message. +inline String FormatFileLocation(const char* file, int line) { + const char* const file_name = file == NULL ? "unknown file" : file; + if (line < 0) { + return String::Format("%s:", file_name); + } +#ifdef _MSC_VER + return String::Format("%s(%d):", file_name, line); +#else + return String::Format("%s:%d:", file_name, line); +#endif // _MSC_VER +} + +// Types of SetUpTestCase() and TearDownTestCase() functions. +typedef void (*SetUpTestCaseFunc)(); +typedef void (*TearDownTestCaseFunc)(); + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// test_case_comment: a comment on the test case that will be included in +// the test output +// comment: a comment on the test that will be included in the +// test output +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +GTEST_API_ TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory); + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr); + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// State of the definition of a type-parameterized test case. +class GTEST_API_ TypedTestCasePState { + public: + TypedTestCasePState() : registered_(false) {} + + // Adds the given test name to defined_test_names_ and return true + // if the test case hasn't been registered; otherwise aborts the + // program. + bool AddTestName(const char* file, int line, const char* case_name, + const char* test_name) { + if (registered_) { + fprintf(stderr, "%s Test %s must be defined before " + "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", + FormatFileLocation(file, line).c_str(), test_name, case_name); + fflush(stderr); + posix::Abort(); + } + defined_test_names_.insert(test_name); + return true; + } + + // Verifies that registered_tests match the test names in + // defined_test_names_; returns registered_tests if successful, or + // aborts the program otherwise. + const char* VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests); + + private: + bool registered_; + ::std::set defined_test_names_; +}; + +// Skips to the first non-space char after the first comma in 'str'; +// returns NULL if no comma is found in 'str'. +inline const char* SkipComma(const char* str) { + const char* comma = strchr(str, ','); + if (comma == NULL) { + return NULL; + } + while (isspace(*(++comma))) {} + return comma; +} + +// Returns the prefix of 'str' before the first comma in it; returns +// the entire string if it contains no comma. +inline String GetPrefixUntilComma(const char* str) { + const char* comma = strchr(str, ','); + return comma == NULL ? String(str) : String(str, comma - str); +} + +// TypeParameterizedTest::Register() +// registers a list of type-parameterized tests with Google Test. The +// return value is insignificant - we just need to return something +// such that we can call this function in a namespace scope. +// +// Implementation note: The GTEST_TEMPLATE_ macro declares a template +// template parameter. It's defined in gtest-type-util.h. +template +class TypeParameterizedTest { + public: + // 'index' is the index of the test in the type list 'Types' + // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, + // Types). Valid values for 'index' are [0, N - 1] where N is the + // length of Types. + static bool Register(const char* prefix, const char* case_name, + const char* test_names, int index) { + typedef typename Types::Head Type; + typedef Fixture FixtureClass; + typedef typename GTEST_BIND_(TestSel, Type) TestClass; + + // First, registers the first type-parameterized test in the type + // list. + MakeAndRegisterTestInfo( + String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/", + case_name, index).c_str(), + GetPrefixUntilComma(test_names).c_str(), + String::Format("TypeParam = %s", GetTypeName().c_str()).c_str(), + "", + GetTypeId(), + TestClass::SetUpTestCase, + TestClass::TearDownTestCase, + new TestFactoryImpl); + + // Next, recurses (at compile time) with the tail of the type list. + return TypeParameterizedTest + ::Register(prefix, case_name, test_names, index + 1); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTest { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/, int /*index*/) { + return true; + } +}; + +// TypeParameterizedTestCase::Register() +// registers *all combinations* of 'Tests' and 'Types' with Google +// Test. The return value is insignificant - we just need to return +// something such that we can call this function in a namespace scope. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* prefix, const char* case_name, + const char* test_names) { + typedef typename Tests::Head Head; + + // First, register the first test in 'Test' for each type in 'Types'. + TypeParameterizedTest::Register( + prefix, case_name, test_names, 0); + + // Next, recurses (at compile time) with the tail of the test list. + return TypeParameterizedTestCase + ::Register(prefix, case_name, SkipComma(test_names)); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/) { + return true; + } +}; + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, + int skip_count); + +// Helpers for suppressing warnings on unreachable code or constant +// condition. + +// Always returns true. +GTEST_API_ bool AlwaysTrue(); + +// Always returns false. +inline bool AlwaysFalse() { return !AlwaysTrue(); } + +// A simple Linear Congruential Generator for generating random +// numbers with a uniform distribution. Unlike rand() and srand(), it +// doesn't use global state (and therefore can't interfere with user +// code). Unlike rand_r(), it's portable. An LCG isn't very random, +// but it's good enough for our purposes. +class GTEST_API_ Random { + public: + static const UInt32 kMaxRange = 1u << 31; + + explicit Random(UInt32 seed) : state_(seed) {} + + void Reseed(UInt32 seed) { state_ = seed; } + + // Generates a random number from [0, range). Crashes if 'range' is + // 0 or greater than kMaxRange. + UInt32 Generate(UInt32 range); + + private: + UInt32 state_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); +}; + +} // namespace internal +} // namespace testing + +#define GTEST_MESSAGE_(message, result_type) \ + ::testing::internal::AssertHelper(result_type, __FILE__, __LINE__, message) \ + = ::testing::Message() + +#define GTEST_FATAL_FAILURE_(message) \ + return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) + +#define GTEST_NONFATAL_FAILURE_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) + +#define GTEST_SUCCESS_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) + +// Suppresses MSVC warnings 4072 (unreachable code) for the code following +// statement if it returns or throws (or doesn't return or throw in some +// situations). +#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ + if (::testing::internal::AlwaysTrue()) { statement; } + +#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + bool gtest_caught_expected = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (expected_exception const&) { \ + gtest_caught_expected = true; \ + } \ + catch (...) { \ + gtest_msg = "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws a different " \ + "type."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + if (!gtest_caught_expected) { \ + gtest_msg = "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws nothing."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ + fail(gtest_msg) + +#define GTEST_TEST_NO_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + gtest_msg = "Expected: " #statement " doesn't throw an exception.\n" \ + " Actual: it throws."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ + fail(gtest_msg) + +#define GTEST_TEST_ANY_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + bool gtest_caught_any = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + gtest_caught_any = true; \ + } \ + if (!gtest_caught_any) { \ + gtest_msg = "Expected: " #statement " throws an exception.\n" \ + " Actual: it doesn't."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ + fail(gtest_msg) + + +// Implements Boolean test assertions such as EXPECT_TRUE. expression can be +// either a boolean expression or an AssertionResult. text is a textual +// represenation of expression as it was passed into the EXPECT_TRUE. +#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar_ = \ + ::testing::AssertionResult(expression)) \ + ; \ + else \ + fail(::testing::internal::GetBoolAssertionFailureMessage(\ + gtest_ar_, text, #actual, #expected).c_str()) + +#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ + gtest_msg = "Expected: " #statement " doesn't generate new fatal " \ + "failures in the current thread.\n" \ + " Actual: it does."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ + fail(gtest_msg) + +// Expands to the name of the class that implements the given test. +#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + test_case_name##_##test_name##_Test + +// Helper macro for defining tests. +#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ +class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ + public:\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ + private:\ + virtual void TestBody();\ + static ::testing::TestInfo* const test_info_;\ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ +};\ +\ +::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ + ::test_info_ =\ + ::testing::internal::MakeAndRegisterTestInfo(\ + #test_case_name, #test_name, "", "", \ + (parent_id), \ + parent_class::SetUpTestCase, \ + parent_class::TearDownTestCase, \ + new ::testing::internal::TestFactoryImpl<\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ +void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for death tests. It is +// #included by gtest.h so a user doesn't need to include this +// directly. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines internal utilities needed for implementing +// death tests. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ + + +namespace testing { +namespace internal { + +GTEST_DECLARE_string_(internal_run_death_test); + +// Names of the flags (needed for parsing Google Test flags). +const char kDeathTestStyleFlag[] = "death_test_style"; +const char kDeathTestUseFork[] = "death_test_use_fork"; +const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; + +#if GTEST_HAS_DEATH_TEST + +// DeathTest is a class that hides much of the complexity of the +// GTEST_DEATH_TEST_ macro. It is abstract; its static Create method +// returns a concrete class that depends on the prevailing death test +// style, as defined by the --gtest_death_test_style and/or +// --gtest_internal_run_death_test flags. + +// In describing the results of death tests, these terms are used with +// the corresponding definitions: +// +// exit status: The integer exit information in the format specified +// by wait(2) +// exit code: The integer code passed to exit(3), _exit(2), or +// returned from main() +class GTEST_API_ DeathTest { + public: + // Create returns false if there was an error determining the + // appropriate action to take for the current death test; for example, + // if the gtest_death_test_style flag is set to an invalid value. + // The LastMessage method will return a more detailed message in that + // case. Otherwise, the DeathTest pointer pointed to by the "test" + // argument is set. If the death test should be skipped, the pointer + // is set to NULL; otherwise, it is set to the address of a new concrete + // DeathTest object that controls the execution of the current test. + static bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); + DeathTest(); + virtual ~DeathTest() { } + + // A helper class that aborts a death test when it's deleted. + class ReturnSentinel { + public: + explicit ReturnSentinel(DeathTest* test) : test_(test) { } + ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } + private: + DeathTest* const test_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); + } GTEST_ATTRIBUTE_UNUSED_; + + // An enumeration of possible roles that may be taken when a death + // test is encountered. EXECUTE means that the death test logic should + // be executed immediately. OVERSEE means that the program should prepare + // the appropriate environment for a child process to execute the death + // test, then wait for it to complete. + enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; + + // An enumeration of the two reasons that a test might be aborted. + enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_DID_NOT_DIE }; + + // Assumes one of the above roles. + virtual TestRole AssumeRole() = 0; + + // Waits for the death test to finish and returns its status. + virtual int Wait() = 0; + + // Returns true if the death test passed; that is, the test process + // exited during the test, its exit status matches a user-supplied + // predicate, and its stderr output matches a user-supplied regular + // expression. + // The user-supplied predicate may be a macro expression rather + // than a function pointer or functor, or else Wait and Passed could + // be combined. + virtual bool Passed(bool exit_status_ok) = 0; + + // Signals that the death test did not die as expected. + virtual void Abort(AbortReason reason) = 0; + + // Returns a human-readable outcome message regarding the outcome of + // the last death test. + static const char* LastMessage(); + + static void set_last_death_test_message(const String& message); + + private: + // A string containing a description of the outcome of the last death test. + static String last_death_test_message_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); +}; + +// Factory interface for death tests. May be mocked out for testing. +class DeathTestFactory { + public: + virtual ~DeathTestFactory() { } + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) = 0; +}; + +// A concrete DeathTestFactory implementation for normal use. +class DefaultDeathTestFactory : public DeathTestFactory { + public: + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); +}; + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +GTEST_API_ bool ExitedUnsuccessfully(int exit_status); + +// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, +// ASSERT_EXIT*, and EXPECT_EXIT*. +#define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + const ::testing::internal::RE& gtest_regex = (regex); \ + ::testing::internal::DeathTest* gtest_dt; \ + if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ + __FILE__, __LINE__, >est_dt)) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + if (gtest_dt != NULL) { \ + ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ + gtest_dt_ptr(gtest_dt); \ + switch (gtest_dt->AssumeRole()) { \ + case ::testing::internal::DeathTest::OVERSEE_TEST: \ + if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + break; \ + case ::testing::internal::DeathTest::EXECUTE_TEST: { \ + ::testing::internal::DeathTest::ReturnSentinel \ + gtest_sentinel(gtest_dt); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ + break; \ + } \ + } \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ + fail(::testing::internal::DeathTest::LastMessage()) +// The symbol "fail" here expands to something into which a message +// can be streamed. + +// A class representing the parsed contents of the +// --gtest_internal_run_death_test flag, as it existed when +// RUN_ALL_TESTS was called. +class InternalRunDeathTestFlag { + public: + InternalRunDeathTestFlag(const String& a_file, + int a_line, + int an_index, + int a_write_fd) + : file_(a_file), line_(a_line), index_(an_index), + write_fd_(a_write_fd) {} + + ~InternalRunDeathTestFlag() { + if (write_fd_ >= 0) + posix::Close(write_fd_); + } + + String file() const { return file_; } + int line() const { return line_; } + int index() const { return index_; } + int write_fd() const { return write_fd_; } + + private: + String file_; + int line_; + int index_; + int write_fd_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); +}; + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); + +#else // GTEST_HAS_DEATH_TEST + +// This macro is used for implementing macros such as +// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where +// death tests are not supported. Those macros must compile on such systems +// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on +// systems that support death tests. This allows one to write such a macro +// on a system that does not support death tests and be sure that it will +// compile on a death-test supporting system. +// +// Parameters: +// statement - A statement that a macro such as EXPECT_DEATH would test +// for program termination. This macro has to make sure this +// statement is compiled but not executed, to ensure that +// EXPECT_DEATH_IF_SUPPORTED compiles with a certain +// parameter iff EXPECT_DEATH compiles with it. +// regex - A regex that a macro such as EXPECT_DEATH would use to test +// the output of statement. This parameter has to be +// compiled but not evaluated by this macro, to ensure that +// this macro only accepts expressions that a macro such as +// EXPECT_DEATH would accept. +// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED +// and a return statement for ASSERT_DEATH_IF_SUPPORTED. +// This ensures that ASSERT_DEATH_IF_SUPPORTED will not +// compile inside functions where ASSERT_DEATH doesn't +// compile. +// +// The branch that has an always false condition is used to ensure that +// statement and regex are compiled (and thus syntactically correct) but +// never executed. The unreachable code macro protects the terminator +// statement from generating an 'unreachable code' warning in case +// statement unconditionally returns or throws. The Message constructor at +// the end allows the syntax of streaming additional messages into the +// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. +#define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_LOG_(WARNING) \ + << "Death tests are not supported on this platform.\n" \ + << "Statement '" #statement "' cannot be verified."; \ + } else if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::RE::PartialMatch(".*", (regex)); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + terminator; \ + } else \ + ::testing::Message() + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ + +namespace testing { + +// This flag controls the style of death tests. Valid values are "threadsafe", +// meaning that the death test child process will re-execute the test binary +// from the start, running only a single death test, or "fast", +// meaning that the child process will execute the test logic immediately +// after forking. +GTEST_DECLARE_string_(death_test_style); + +#if GTEST_HAS_DEATH_TEST + +// The following macros are useful for writing death tests. + +// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is +// executed: +// +// 1. It generates a warning if there is more than one active +// thread. This is because it's safe to fork() or clone() only +// when there is a single thread. +// +// 2. The parent process clone()s a sub-process and runs the death +// test in it; the sub-process exits with code 0 at the end of the +// death test, if it hasn't exited already. +// +// 3. The parent process waits for the sub-process to terminate. +// +// 4. The parent process checks the exit code and error message of +// the sub-process. +// +// Examples: +// +// ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); +// for (int i = 0; i < 5; i++) { +// EXPECT_DEATH(server.ProcessRequest(i), +// "Invalid request .* in ProcessRequest()") +// << "Failed to die on request " << i); +// } +// +// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); +// +// bool KilledBySIGHUP(int exit_code) { +// return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; +// } +// +// ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); +// +// On the regular expressions used in death tests: +// +// On POSIX-compliant systems (*nix), we use the library, +// which uses the POSIX extended regex syntax. +// +// On other platforms (e.g. Windows), we only support a simple regex +// syntax implemented as part of Google Test. This limited +// implementation should be enough most of the time when writing +// death tests; though it lacks many features you can find in PCRE +// or POSIX extended regex syntax. For example, we don't support +// union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and +// repetition count ("x{5,7}"), among others. +// +// Below is the syntax that we do support. We chose it to be a +// subset of both PCRE and POSIX extended regex, so it's easy to +// learn wherever you come from. In the following: 'A' denotes a +// literal character, period (.), or a single \\ escape sequence; +// 'x' and 'y' denote regular expressions; 'm' and 'n' are for +// natural numbers. +// +// c matches any literal character c +// \\d matches any decimal digit +// \\D matches any character that's not a decimal digit +// \\f matches \f +// \\n matches \n +// \\r matches \r +// \\s matches any ASCII whitespace, including \n +// \\S matches any character that's not a whitespace +// \\t matches \t +// \\v matches \v +// \\w matches any letter, _, or decimal digit +// \\W matches any character that \\w doesn't match +// \\c matches any literal character c, which must be a punctuation +// . matches any single character except \n +// A? matches 0 or 1 occurrences of A +// A* matches 0 or many occurrences of A +// A+ matches 1 or many occurrences of A +// ^ matches the beginning of a string (not that of each line) +// $ matches the end of a string (not that of each line) +// xy matches x followed by y +// +// If you accidentally use PCRE or POSIX extended regex features +// not implemented by us, you will get a run-time failure. In that +// case, please try to rewrite your regular expression within the +// above syntax. +// +// This implementation is *not* meant to be as highly tuned or robust +// as a compiled regex library, but should perform well enough for a +// death test, which already incurs significant overhead by launching +// a child process. +// +// Known caveats: +// +// A "threadsafe" style death test obtains the path to the test +// program from argv[0] and re-executes it in the sub-process. For +// simplicity, the current implementation doesn't search the PATH +// when launching the sub-process. This means that the user must +// invoke the test program via a path that contains at least one +// path separator (e.g. path/to/foo_test and +// /absolute/path/to/bar_test are fine, but foo_test is not). This +// is rarely a problem as people usually don't put the test binary +// directory in PATH. +// +// TODO(wan@google.com): make thread-safe death tests search the PATH. + +// Asserts that a given statement causes the program to exit, with an +// integer exit status that satisfies predicate, and emitting error output +// that matches regex. +#define ASSERT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) + +// Like ASSERT_EXIT, but continues on to successive tests in the +// test case, if any: +#define EXPECT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) + +// Asserts that a given statement causes the program to exit, either by +// explicitly exiting with a nonzero exit code or being killed by a +// signal, and emitting error output that matches regex. +#define ASSERT_DEATH(statement, regex) \ + ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Like ASSERT_DEATH, but continues on to successive tests in the +// test case, if any: +#define EXPECT_DEATH(statement, regex) \ + EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: + +// Tests that an exit code describes a normal exit with a given exit code. +class GTEST_API_ ExitedWithCode { + public: + explicit ExitedWithCode(int exit_code); + bool operator()(int exit_status) const; + private: + // No implementation - assignment is unsupported. + void operator=(const ExitedWithCode& other); + + const int exit_code_; +}; + +#if !GTEST_OS_WINDOWS +// Tests that an exit code describes an exit due to termination by a +// given signal. +class GTEST_API_ KilledBySignal { + public: + explicit KilledBySignal(int signum); + bool operator()(int exit_status) const; + private: + const int signum_; +}; +#endif // !GTEST_OS_WINDOWS + +// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. +// The death testing framework causes this to have interesting semantics, +// since the sideeffects of the call are only visible in opt mode, and not +// in debug mode. +// +// In practice, this can be used to test functions that utilize the +// LOG(DFATAL) macro using the following style: +// +// int DieInDebugOr12(int* sideeffect) { +// if (sideeffect) { +// *sideeffect = 12; +// } +// LOG(DFATAL) << "death"; +// return 12; +// } +// +// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { +// int sideeffect = 0; +// // Only asserts in dbg. +// EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); +// +// #ifdef NDEBUG +// // opt-mode has sideeffect visible. +// EXPECT_EQ(12, sideeffect); +// #else +// // dbg-mode no visible sideeffect. +// EXPECT_EQ(0, sideeffect); +// #endif +// } +// +// This will assert that DieInDebugReturn12InOpt() crashes in debug +// mode, usually due to a DCHECK or LOG(DFATAL), but returns the +// appropriate fallback value (12 in this case) in opt mode. If you +// need to test that a function has appropriate side-effects in opt +// mode, include assertions against the side-effects. A general +// pattern for this is: +// +// EXPECT_DEBUG_DEATH({ +// // Side-effects here will have an effect after this statement in +// // opt mode, but none in debug mode. +// EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); +// }, "death"); +// +#ifdef NDEBUG + +#define EXPECT_DEBUG_DEATH(statement, regex) \ + do { statement; } while (::testing::internal::AlwaysFalse()) + +#define ASSERT_DEBUG_DEATH(statement, regex) \ + do { statement; } while (::testing::internal::AlwaysFalse()) + +#else + +#define EXPECT_DEBUG_DEATH(statement, regex) \ + EXPECT_DEATH(statement, regex) + +#define ASSERT_DEBUG_DEATH(statement, regex) \ + ASSERT_DEATH(statement, regex) + +#endif // NDEBUG for EXPECT_DEBUG_DEATH +#endif // GTEST_HAS_DEATH_TEST + +// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and +// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if +// death tests are supported; otherwise they just issue a warning. This is +// useful when you are combining death test assertions with normal test +// assertions in one test. +#if GTEST_HAS_DEATH_TEST +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + EXPECT_DEATH(statement, regex) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + ASSERT_DEATH(statement, regex) +#else +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) +#endif + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the Message class. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! + +#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ + +#include + + +namespace testing { + +// The Message class works like an ostream repeater. +// +// Typical usage: +// +// 1. You stream a bunch of values to a Message object. +// It will remember the text in a StrStream. +// 2. Then you stream the Message object to an ostream. +// This causes the text in the Message to be streamed +// to the ostream. +// +// For example; +// +// testing::Message foo; +// foo << 1 << " != " << 2; +// std::cout << foo; +// +// will print "1 != 2". +// +// Message is not intended to be inherited from. In particular, its +// destructor is not virtual. +// +// Note that StrStream behaves differently in gcc and in MSVC. You +// can stream a NULL char pointer to it in the former, but not in the +// latter (it causes an access violation if you do). The Message +// class hides this difference by treating a NULL char pointer as +// "(null)". +class GTEST_API_ Message { + private: + // The type of basic IO manipulators (endl, ends, and flush) for + // narrow streams. + typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); + + public: + // Constructs an empty Message. + // We allocate the StrStream separately because it otherwise each use of + // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's + // stack frame leading to huge stack frames in some cases; gcc does not reuse + // the stack space. + Message() : ss_(new internal::StrStream) { + // By default, we want there to be enough precision when printing + // a double to a Message. + *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); + } + + // Copy constructor. + Message(const Message& msg) : ss_(new internal::StrStream) { // NOLINT + *ss_ << msg.GetString(); + } + + // Constructs a Message from a C-string. + explicit Message(const char* str) : ss_(new internal::StrStream) { + *ss_ << str; + } + + ~Message() { delete ss_; } +#if GTEST_OS_SYMBIAN + // Streams a value (either a pointer or not) to this object. + template + inline Message& operator <<(const T& value) { + StreamHelper(typename internal::is_pointer::type(), value); + return *this; + } +#else + // Streams a non-pointer value to this object. + template + inline Message& operator <<(const T& val) { + ::GTestStreamToHelper(ss_, val); + return *this; + } + + // Streams a pointer value to this object. + // + // This function is an overload of the previous one. When you + // stream a pointer to a Message, this definition will be used as it + // is more specialized. (The C++ Standard, section + // [temp.func.order].) If you stream a non-pointer, then the + // previous definition will be used. + // + // The reason for this overload is that streaming a NULL pointer to + // ostream is undefined behavior. Depending on the compiler, you + // may get "0", "(nil)", "(null)", or an access violation. To + // ensure consistent result across compilers, we always treat NULL + // as "(null)". + template + inline Message& operator <<(T* const& pointer) { // NOLINT + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + ::GTestStreamToHelper(ss_, pointer); + } + return *this; + } +#endif // GTEST_OS_SYMBIAN + + // Since the basic IO manipulators are overloaded for both narrow + // and wide streams, we have to provide this specialized definition + // of operator <<, even though its body is the same as the + // templatized version above. Without this definition, streaming + // endl or other basic IO manipulators to Message will confuse the + // compiler. + Message& operator <<(BasicNarrowIoManip val) { + *ss_ << val; + return *this; + } + + // Instead of 1/0, we want to see true/false for bool values. + Message& operator <<(bool b) { + return *this << (b ? "true" : "false"); + } + + // These two overloads allow streaming a wide C string to a Message + // using the UTF-8 encoding. + Message& operator <<(const wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); + } + Message& operator <<(wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); + } + +#if GTEST_HAS_STD_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::std::wstring& wstr); +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::wstring& wstr); +#endif // GTEST_HAS_GLOBAL_WSTRING + + // Gets the text streamed to this object so far as a String. + // Each '\0' character in the buffer is replaced with "\\0". + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + internal::String GetString() const { + return internal::StrStreamToString(ss_); + } + + private: +#if GTEST_OS_SYMBIAN + // These are needed as the Nokia Symbian Compiler cannot decide between + // const T& and const T* in a function template. The Nokia compiler _can_ + // decide between class template specializations for T and T*, so a + // tr1::type_traits-like is_pointer works, and we can overload on that. + template + inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) { + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + ::GTestStreamToHelper(ss_, pointer); + } + } + template + inline void StreamHelper(internal::false_type /*dummy*/, const T& value) { + ::GTestStreamToHelper(ss_, value); + } +#endif // GTEST_OS_SYMBIAN + + // We'll hold the text streamed to this object here. + internal::StrStream* const ss_; + + // We declare (but don't implement) this to prevent the compiler + // from implementing the assignment operator. + void operator=(const Message&); +}; + +// Streams a Message to an ostream. +inline std::ostream& operator <<(std::ostream& os, const Message& sb) { + return os << sb.GetString(); +} + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev) +// +// Macros and functions for implementing parameterized tests +// in Google C++ Testing Framework (Google Test) +// +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ + + +// Value-parameterized tests allow you to test your code with different +// parameters without writing multiple copies of the same test. +// +// Here is how you use value-parameterized tests: + +#if 0 + +// To write value-parameterized tests, first you should define a fixture +// class. It must be derived from testing::TestWithParam, where T is +// the type of your parameter values. TestWithParam is itself derived +// from testing::Test. T can be any copyable type. If it's a raw pointer, +// you are responsible for managing the lifespan of the pointed values. + +class FooTest : public ::testing::TestWithParam { + // You can implement all the usual class fixture members here. +}; + +// Then, use the TEST_P macro to define as many parameterized tests +// for this fixture as you want. The _P suffix is for "parameterized" +// or "pattern", whichever you prefer to think. + +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} + +// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test +// case with any set of parameters you want. Google Test defines a number +// of functions for generating test parameters. They return what we call +// (surprise!) parameter generators. Here is a summary of them, which +// are all in the testing namespace: +// +// +// Range(begin, end [, step]) - Yields values {begin, begin+step, +// begin+step+step, ...}. The values do not +// include end. step defaults to 1. +// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. +// ValuesIn(container) - Yields values from a C-style array, an STL +// ValuesIn(begin,end) container, or an iterator range [begin, end). +// Bool() - Yields sequence {false, true}. +// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product +// for the math savvy) of the values generated +// by the N generators. +// +// For more details, see comments at the definitions of these functions below +// in this file. +// +// The following statement will instantiate tests from the FooTest test case +// each with parameter values "meeny", "miny", and "moe". + +INSTANTIATE_TEST_CASE_P(InstantiationName, + FooTest, + Values("meeny", "miny", "moe")); + +// To distinguish different instances of the pattern, (yes, you +// can instantiate it more then once) the first argument to the +// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the +// actual test case name. Remember to pick unique prefixes for different +// instantiations. The tests from the instantiation above will have +// these names: +// +// * InstantiationName/FooTest.DoesBlah/0 for "meeny" +// * InstantiationName/FooTest.DoesBlah/1 for "miny" +// * InstantiationName/FooTest.DoesBlah/2 for "moe" +// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" +// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" +// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" +// +// You can use these names in --gtest_filter. +// +// This statement will instantiate all tests from FooTest again, each +// with parameter values "cat" and "dog": + +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); + +// The tests from the instantiation above will have these names: +// +// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" +// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" +// +// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests +// in the given test case, whether their definitions come before or +// AFTER the INSTANTIATE_TEST_CASE_P statement. +// +// Please also note that generator expressions (including parameters to the +// generators) are evaluated in InitGoogleTest(), after main() has started. +// This allows the user on one hand, to adjust generator parameters in order +// to dynamically determine a set of tests to run and on the other hand, +// give the user a chance to inspect the generated tests with Google Test +// reflection API before RUN_ALL_TESTS() is executed. +// +// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc +// for more examples. +// +// In the future, we plan to publish the API for defining new parameter +// generators. But for now this interface remains part of the internal +// implementation and is subject to change. + +#endif // 0 + + +#if !GTEST_OS_SYMBIAN +#include +#endif + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ + +#include +#include +#include + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +// Copyright 2003 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: Dan Egnor (egnor@google.com) +// +// A "smart" pointer type with reference tracking. Every pointer to a +// particular object is kept on a circular linked list. When the last pointer +// to an object is destroyed or reassigned, the object is deleted. +// +// Used properly, this deletes the object when the last reference goes away. +// There are several caveats: +// - Like all reference counting schemes, cycles lead to leaks. +// - Each smart pointer is actually two pointers (8 bytes instead of 4). +// - Every time a pointer is assigned, the entire list of pointers to that +// object is traversed. This class is therefore NOT SUITABLE when there +// will often be more than two or three pointers to a particular object. +// - References are only tracked as long as linked_ptr<> objects are copied. +// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS +// will happen (double deletion). +// +// A good use of this class is storing object references in STL containers. +// You can safely put linked_ptr<> in a vector<>. +// Other uses may not be as good. +// +// Note: If you use an incomplete type with linked_ptr<>, the class +// *containing* linked_ptr<> must have a constructor and destructor (even +// if they do nothing!). +// +// Bill Gibbons suggested we use something like this. +// +// Thread Safety: +// Unlike other linked_ptr implementations, in this implementation +// a linked_ptr object is thread-safe in the sense that: +// - it's safe to copy linked_ptr objects concurrently, +// - it's safe to copy *from* a linked_ptr and read its underlying +// raw pointer (e.g. via get()) concurrently, and +// - it's safe to write to two linked_ptrs that point to the same +// shared object concurrently. +// TODO(wan@google.com): rename this to safe_linked_ptr to avoid +// confusion with normal linked_ptr. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ + +#include +#include + + +namespace testing { +namespace internal { + +// Protects copying of all linked_ptr objects. +GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// This is used internally by all instances of linked_ptr<>. It needs to be +// a non-template class because different types of linked_ptr<> can refer to +// the same object (linked_ptr(obj) vs linked_ptr(obj)). +// So, it needs to be possible for different types of linked_ptr to participate +// in the same circular linked list, so we need a single class type here. +// +// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. +class linked_ptr_internal { + public: + // Create a new circle that includes only this instance. + void join_new() { + next_ = this; + } + + // Many linked_ptr operations may change p.link_ for some linked_ptr + // variable p in the same circle as this object. Therefore we need + // to prevent two such operations from occurring concurrently. + // + // Note that different types of linked_ptr objects can coexist in a + // circle (e.g. linked_ptr, linked_ptr, and + // linked_ptr). Therefore we must use a single mutex to + // protect all linked_ptr objects. This can create serious + // contention in production code, but is acceptable in a testing + // framework. + + // Join an existing circle. + // L < g_linked_ptr_mutex + void join(linked_ptr_internal const* ptr) { + MutexLock lock(&g_linked_ptr_mutex); + + linked_ptr_internal const* p = ptr; + while (p->next_ != ptr) p = p->next_; + p->next_ = this; + next_ = ptr; + } + + // Leave whatever circle we're part of. Returns true if we were the + // last member of the circle. Once this is done, you can join() another. + // L < g_linked_ptr_mutex + bool depart() { + MutexLock lock(&g_linked_ptr_mutex); + + if (next_ == this) return true; + linked_ptr_internal const* p = next_; + while (p->next_ != this) p = p->next_; + p->next_ = next_; + return false; + } + + private: + mutable linked_ptr_internal const* next_; +}; + +template +class linked_ptr { + public: + typedef T element_type; + + // Take over ownership of a raw pointer. This should happen as soon as + // possible after the object is created. + explicit linked_ptr(T* ptr = NULL) { capture(ptr); } + ~linked_ptr() { depart(); } + + // Copy an existing linked_ptr<>, adding ourselves to the list of references. + template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } + linked_ptr(linked_ptr const& ptr) { // NOLINT + assert(&ptr != this); + copy(&ptr); + } + + // Assignment releases the old value and acquires the new. + template linked_ptr& operator=(linked_ptr const& ptr) { + depart(); + copy(&ptr); + return *this; + } + + linked_ptr& operator=(linked_ptr const& ptr) { + if (&ptr != this) { + depart(); + copy(&ptr); + } + return *this; + } + + // Smart pointer members. + void reset(T* ptr = NULL) { + depart(); + capture(ptr); + } + T* get() const { return value_; } + T* operator->() const { return value_; } + T& operator*() const { return *value_; } + // Release ownership of the pointed object and returns it. + // Sole ownership by this linked_ptr object is required. + T* release() { + bool last = link_.depart(); + assert(last); + T* v = value_; + value_ = NULL; + return v; + } + + bool operator==(T* p) const { return value_ == p; } + bool operator!=(T* p) const { return value_ != p; } + template + bool operator==(linked_ptr const& ptr) const { + return value_ == ptr.get(); + } + template + bool operator!=(linked_ptr const& ptr) const { + return value_ != ptr.get(); + } + + private: + template + friend class linked_ptr; + + T* value_; + linked_ptr_internal link_; + + void depart() { + if (link_.depart()) delete value_; + } + + void capture(T* ptr) { + value_ = ptr; + link_.join_new(); + } + + template void copy(linked_ptr const* ptr) { + value_ = ptr->get(); + if (value_) + link_.join(&ptr->link_); + else + link_.join_new(); + } +}; + +template inline +bool operator==(T* ptr, const linked_ptr& x) { + return ptr == x.get(); +} + +template inline +bool operator!=(T* ptr, const linked_ptr& x) { + return ptr != x.get(); +} + +// A function to convert T* into linked_ptr +// Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation +// for linked_ptr >(new FooBarBaz(arg)) +template +linked_ptr make_linked_ptr(T* ptr) { + return linked_ptr(ptr); +} + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ + +#if GTEST_HAS_PARAM_TEST + +namespace testing { +namespace internal { + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Outputs a message explaining invalid registration of different +// fixture class for the same test case. This may happen when +// TEST_P macro is used to define two tests with the same name +// but in different namespaces. +GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line); + +template class ParamGeneratorInterface; +template class ParamGenerator; + +// Interface for iterating over elements provided by an implementation +// of ParamGeneratorInterface. +template +class ParamIteratorInterface { + public: + virtual ~ParamIteratorInterface() {} + // A pointer to the base generator instance. + // Used only for the purposes of iterator comparison + // to make sure that two iterators belong to the same generator. + virtual const ParamGeneratorInterface* BaseGenerator() const = 0; + // Advances iterator to point to the next element + // provided by the generator. The caller is responsible + // for not calling Advance() on an iterator equal to + // BaseGenerator()->End(). + virtual void Advance() = 0; + // Clones the iterator object. Used for implementing copy semantics + // of ParamIterator. + virtual ParamIteratorInterface* Clone() const = 0; + // Dereferences the current iterator and provides (read-only) access + // to the pointed value. It is the caller's responsibility not to call + // Current() on an iterator equal to BaseGenerator()->End(). + // Used for implementing ParamGenerator::operator*(). + virtual const T* Current() const = 0; + // Determines whether the given iterator and other point to the same + // element in the sequence generated by the generator. + // Used for implementing ParamGenerator::operator==(). + virtual bool Equals(const ParamIteratorInterface& other) const = 0; +}; + +// Class iterating over elements provided by an implementation of +// ParamGeneratorInterface. It wraps ParamIteratorInterface +// and implements the const forward iterator concept. +template +class ParamIterator { + public: + typedef T value_type; + typedef const T& reference; + typedef ptrdiff_t difference_type; + + // ParamIterator assumes ownership of the impl_ pointer. + ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} + ParamIterator& operator=(const ParamIterator& other) { + if (this != &other) + impl_.reset(other.impl_->Clone()); + return *this; + } + + const T& operator*() const { return *impl_->Current(); } + const T* operator->() const { return impl_->Current(); } + // Prefix version of operator++. + ParamIterator& operator++() { + impl_->Advance(); + return *this; + } + // Postfix version of operator++. + ParamIterator operator++(int /*unused*/) { + ParamIteratorInterface* clone = impl_->Clone(); + impl_->Advance(); + return ParamIterator(clone); + } + bool operator==(const ParamIterator& other) const { + return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); + } + bool operator!=(const ParamIterator& other) const { + return !(*this == other); + } + + private: + friend class ParamGenerator; + explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} + scoped_ptr > impl_; +}; + +// ParamGeneratorInterface is the binary interface to access generators +// defined in other translation units. +template +class ParamGeneratorInterface { + public: + typedef T ParamType; + + virtual ~ParamGeneratorInterface() {} + + // Generator interface definition + virtual ParamIteratorInterface* Begin() const = 0; + virtual ParamIteratorInterface* End() const = 0; +}; + +// Wraps ParamGeneratorInterface and provides general generator syntax +// compatible with the STL Container concept. +// This class implements copy initialization semantics and the contained +// ParamGeneratorInterface instance is shared among all copies +// of the original object. This is possible because that instance is immutable. +template +class ParamGenerator { + public: + typedef ParamIterator iterator; + + explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} + ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} + + ParamGenerator& operator=(const ParamGenerator& other) { + impl_ = other.impl_; + return *this; + } + + iterator begin() const { return iterator(impl_->Begin()); } + iterator end() const { return iterator(impl_->End()); } + + private: + ::testing::internal::linked_ptr > impl_; +}; + +// Generates values from a range of two comparable values. Can be used to +// generate sequences of user-defined types that implement operator+() and +// operator<(). +// This class is used in the Range() function. +template +class RangeGenerator : public ParamGeneratorInterface { + public: + RangeGenerator(T begin, T end, IncrementT step) + : begin_(begin), end_(end), + step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} + virtual ~RangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, begin_, 0, step_); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, end_, end_index_, step_); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, T value, int index, + IncrementT step) + : base_(base), value_(value), index_(index), step_(step) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + value_ = value_ + step_; + index_++; + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const T* Current() const { return &value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const int other_index = + CheckedDowncastToActualType(&other)->index_; + return index_ == other_index; + } + + private: + Iterator(const Iterator& other) + : ParamIteratorInterface(), + base_(other.base_), value_(other.value_), index_(other.index_), + step_(other.step_) {} + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + T value_; + int index_; + const IncrementT step_; + }; // class RangeGenerator::Iterator + + static int CalculateEndIndex(const T& begin, + const T& end, + const IncrementT& step) { + int end_index = 0; + for (T i = begin; i < end; i = i + step) + end_index++; + return end_index; + } + + // No implementation - assignment is unsupported. + void operator=(const RangeGenerator& other); + + const T begin_; + const T end_; + const IncrementT step_; + // The index for the end() iterator. All the elements in the generated + // sequence are indexed (0-based) to aid iterator comparison. + const int end_index_; +}; // class RangeGenerator + + +// Generates values from a pair of STL-style iterators. Used in the +// ValuesIn() function. The elements are copied from the source range +// since the source can be located on the stack, and the generator +// is likely to persist beyond that stack frame. +template +class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { + public: + template + ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) + : container_(begin, end) {} + virtual ~ValuesInIteratorRangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, container_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, container_.end()); + } + + private: + typedef typename ::std::vector ContainerType; + + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + typename ContainerType::const_iterator iterator) + : base_(base), iterator_(iterator) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + ++iterator_; + value_.reset(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + // We need to use cached value referenced by iterator_ because *iterator_ + // can return a temporary object (and of type other then T), so just + // having "return &*iterator_;" doesn't work. + // value_ is updated here and not in Advance() because Advance() + // can advance iterator_ beyond the end of the range, and we cannot + // detect that fact. The client code, on the other hand, is + // responsible for not calling Current() on an out-of-range iterator. + virtual const T* Current() const { + if (value_.get() == NULL) + value_.reset(new T(*iterator_)); + return value_.get(); + } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + return iterator_ == + CheckedDowncastToActualType(&other)->iterator_; + } + + private: + Iterator(const Iterator& other) + // The explicit constructor call suppresses a false warning + // emitted by gcc when supplied with the -Wextra option. + : ParamIteratorInterface(), + base_(other.base_), + iterator_(other.iterator_) {} + + const ParamGeneratorInterface* const base_; + typename ContainerType::const_iterator iterator_; + // A cached value of *iterator_. We keep it here to allow access by + // pointer in the wrapping iterator's operator->(). + // value_ needs to be mutable to be accessed in Current(). + // Use of scoped_ptr helps manage cached value's lifetime, + // which is bound by the lifespan of the iterator itself. + mutable scoped_ptr value_; + }; // class ValuesInIteratorRangeGenerator::Iterator + + // No implementation - assignment is unsupported. + void operator=(const ValuesInIteratorRangeGenerator& other); + + const ContainerType container_; +}; // class ValuesInIteratorRangeGenerator + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Stores a parameter value and later creates tests parameterized with that +// value. +template +class ParameterizedTestFactory : public TestFactoryBase { + public: + typedef typename TestClass::ParamType ParamType; + explicit ParameterizedTestFactory(ParamType parameter) : + parameter_(parameter) {} + virtual Test* CreateTest() { + TestClass::SetParam(¶meter_); + return new TestClass(); + } + + private: + const ParamType parameter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactoryBase is a base class for meta-factories that create +// test factories for passing into MakeAndRegisterTestInfo function. +template +class TestMetaFactoryBase { + public: + virtual ~TestMetaFactoryBase() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactory creates test factories for passing into +// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives +// ownership of test factory pointer, same factory object cannot be passed +// into that method twice. But ParameterizedTestCaseInfo is going to call +// it for each Test/Parameter value combination. Thus it needs meta factory +// creator class. +template +class TestMetaFactory + : public TestMetaFactoryBase { + public: + typedef typename TestCase::ParamType ParamType; + + TestMetaFactory() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { + return new ParameterizedTestFactory(parameter); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfoBase is a generic interface +// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase +// accumulates test information provided by TEST_P macro invocations +// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations +// and uses that information to register all resulting test instances +// in RegisterTests method. The ParameterizeTestCaseRegistry class holds +// a collection of pointers to the ParameterizedTestCaseInfo objects +// and calls RegisterTests() on each of them when asked. +class ParameterizedTestCaseInfoBase { + public: + virtual ~ParameterizedTestCaseInfoBase() {} + + // Base part of test case name for display purposes. + virtual const String& GetTestCaseName() const = 0; + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const = 0; + // UnitTest class invokes this method to register tests in this + // test case right before running them in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + virtual void RegisterTests() = 0; + + protected: + ParameterizedTestCaseInfoBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P +// macro invocations for a particular test case and generators +// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that +// test case. It registers tests with all values generated by all +// generators when asked. +template +class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { + public: + // ParamType and GeneratorCreationFunc are private types but are required + // for declarations of public methods AddTestPattern() and + // AddTestCaseInstantiation(). + typedef typename TestCase::ParamType ParamType; + // A function that returns an instance of appropriate generator type. + typedef ParamGenerator(GeneratorCreationFunc)(); + + explicit ParameterizedTestCaseInfo(const char* name) + : test_case_name_(name) {} + + // Test case base name for display purposes. + virtual const String& GetTestCaseName() const { return test_case_name_; } + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } + // TEST_P macro uses AddTestPattern() to record information + // about a single test in a LocalTestInfo structure. + // test_case_name is the base name of the test case (without invocation + // prefix). test_base_name is the name of an individual test without + // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is + // test case base name and DoBar is test base name. + void AddTestPattern(const char* test_case_name, + const char* test_base_name, + TestMetaFactoryBase* meta_factory) { + tests_.push_back(linked_ptr(new TestInfo(test_case_name, + test_base_name, + meta_factory))); + } + // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information + // about a generator. + int AddTestCaseInstantiation(const char* instantiation_name, + GeneratorCreationFunc* func, + const char* /* file */, + int /* line */) { + instantiations_.push_back(::std::make_pair(instantiation_name, func)); + return 0; // Return value used only to run this method in namespace scope. + } + // UnitTest class invokes this method to register tests in this test case + // test cases right before running tests in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + // UnitTest has a guard to prevent from calling this method more then once. + virtual void RegisterTests() { + for (typename TestInfoContainer::iterator test_it = tests_.begin(); + test_it != tests_.end(); ++test_it) { + linked_ptr test_info = *test_it; + for (typename InstantiationContainer::iterator gen_it = + instantiations_.begin(); gen_it != instantiations_.end(); + ++gen_it) { + const String& instantiation_name = gen_it->first; + ParamGenerator generator((*gen_it->second)()); + + Message test_case_name_stream; + if ( !instantiation_name.empty() ) + test_case_name_stream << instantiation_name.c_str() << "/"; + test_case_name_stream << test_info->test_case_base_name.c_str(); + + int i = 0; + for (typename ParamGenerator::iterator param_it = + generator.begin(); + param_it != generator.end(); ++param_it, ++i) { + Message test_name_stream; + test_name_stream << test_info->test_base_name.c_str() << "/" << i; + ::testing::internal::MakeAndRegisterTestInfo( + test_case_name_stream.GetString().c_str(), + test_name_stream.GetString().c_str(), + "", // test_case_comment + "", // comment; TODO(vladl@google.com): provide parameter value + // representation. + GetTestCaseTypeId(), + TestCase::SetUpTestCase, + TestCase::TearDownTestCase, + test_info->test_meta_factory->CreateTestFactory(*param_it)); + } // for param_it + } // for gen_it + } // for test_it + } // RegisterTests + + private: + // LocalTestInfo structure keeps information about a single test registered + // with TEST_P macro. + struct TestInfo { + TestInfo(const char* a_test_case_base_name, + const char* a_test_base_name, + TestMetaFactoryBase* a_test_meta_factory) : + test_case_base_name(a_test_case_base_name), + test_base_name(a_test_base_name), + test_meta_factory(a_test_meta_factory) {} + + const String test_case_base_name; + const String test_base_name; + const scoped_ptr > test_meta_factory; + }; + typedef ::std::vector > TestInfoContainer; + // Keeps pairs of + // received from INSTANTIATE_TEST_CASE_P macros. + typedef ::std::vector > + InstantiationContainer; + + const String test_case_name_; + TestInfoContainer tests_; + InstantiationContainer instantiations_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); +}; // class ParameterizedTestCaseInfo + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase +// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P +// macros use it to locate their corresponding ParameterizedTestCaseInfo +// descriptors. +class ParameterizedTestCaseRegistry { + public: + ParameterizedTestCaseRegistry() {} + ~ParameterizedTestCaseRegistry() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + delete *it; + } + } + + // Looks up or creates and returns a structure containing information about + // tests and instantiations of a particular test case. + template + ParameterizedTestCaseInfo* GetTestCasePatternHolder( + const char* test_case_name, + const char* file, + int line) { + ParameterizedTestCaseInfo* typed_test_info = NULL; + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + if ((*it)->GetTestCaseName() == test_case_name) { + if ((*it)->GetTestCaseTypeId() != GetTypeId()) { + // Complain about incorrect usage of Google Test facilities + // and terminate the program since we cannot guaranty correct + // test case setup and tear-down in this case. + ReportInvalidTestCaseType(test_case_name, file, line); + abort(); + } else { + // At this point we are sure that the object we found is of the same + // type we are looking for, so we downcast it to that type + // without further checks. + typed_test_info = CheckedDowncastToActualType< + ParameterizedTestCaseInfo >(*it); + } + break; + } + } + if (typed_test_info == NULL) { + typed_test_info = new ParameterizedTestCaseInfo(test_case_name); + test_case_infos_.push_back(typed_test_info); + } + return typed_test_info; + } + void RegisterTests() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + (*it)->RegisterTests(); + } + } + + private: + typedef ::std::vector TestCaseInfoContainer; + + TestCaseInfoContainer test_case_infos_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently Google Test supports at most 50 arguments in Values, +// and at most 10 arguments in Combine. Please contact +// googletestframework@googlegroups.com if you need more. +// Please note that the number of arguments to Combine is limited +// by the maximum arity of the implementation of tr1::tuple which is +// currently set at 10. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Forward declarations of ValuesIn(), which is implemented in +// include/gtest/gtest-param-test.h. +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, ForwardIterator end); + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]); + +template +internal::ParamGenerator ValuesIn( + const Container& container); + +namespace internal { + +// Used in the Values() function to provide polymorphic capabilities. +template +class ValueArray1 { + public: + explicit ValueArray1(T1 v1) : v1_(v1) {} + + template + operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray1& other); + + const T1 v1_; +}; + +template +class ValueArray2 { + public: + ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray2& other); + + const T1 v1_; + const T2 v2_; +}; + +template +class ValueArray3 { + public: + ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray3& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; +}; + +template +class ValueArray4 { + public: + ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray4& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; +}; + +template +class ValueArray5 { + public: + ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray5& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; +}; + +template +class ValueArray6 { + public: + ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray6& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; +}; + +template +class ValueArray7 { + public: + ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray7& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; +}; + +template +class ValueArray8 { + public: + ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray8& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; +}; + +template +class ValueArray9 { + public: + ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray9& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; +}; + +template +class ValueArray10 { + public: + ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray10& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; +}; + +template +class ValueArray11 { + public: + ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray11& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; +}; + +template +class ValueArray12 { + public: + ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray12& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; +}; + +template +class ValueArray13 { + public: + ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray13& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; +}; + +template +class ValueArray14 { + public: + ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray14& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; +}; + +template +class ValueArray15 { + public: + ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray15& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; +}; + +template +class ValueArray16 { + public: + ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray16& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; +}; + +template +class ValueArray17 { + public: + ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray17& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; +}; + +template +class ValueArray18 { + public: + ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray18& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; +}; + +template +class ValueArray19 { + public: + ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray19& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; +}; + +template +class ValueArray20 { + public: + ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray20& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; +}; + +template +class ValueArray21 { + public: + ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray21& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; +}; + +template +class ValueArray22 { + public: + ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray22& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; +}; + +template +class ValueArray23 { + public: + ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, + v23_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray23& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; +}; + +template +class ValueArray24 { + public: + ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray24& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; +}; + +template +class ValueArray25 { + public: + ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray25& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; +}; + +template +class ValueArray26 { + public: + ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray26& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; +}; + +template +class ValueArray27 { + public: + ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray27& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; +}; + +template +class ValueArray28 { + public: + ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray28& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; +}; + +template +class ValueArray29 { + public: + ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray29& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; +}; + +template +class ValueArray30 { + public: + ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray30& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; +}; + +template +class ValueArray31 { + public: + ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray31& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; +}; + +template +class ValueArray32 { + public: + ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray32& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; +}; + +template +class ValueArray33 { + public: + ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray33& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; +}; + +template +class ValueArray34 { + public: + ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray34& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; +}; + +template +class ValueArray35 { + public: + ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, + v35_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray35& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; +}; + +template +class ValueArray36 { + public: + ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray36& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; +}; + +template +class ValueArray37 { + public: + ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray37& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; +}; + +template +class ValueArray38 { + public: + ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray38& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; +}; + +template +class ValueArray39 { + public: + ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray39& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; +}; + +template +class ValueArray40 { + public: + ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray40& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; +}; + +template +class ValueArray41 { + public: + ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray41& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; +}; + +template +class ValueArray42 { + public: + ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray42& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; +}; + +template +class ValueArray43 { + public: + ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), + v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray43& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; +}; + +template +class ValueArray44 { + public: + ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), + v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), + v43_(v43), v44_(v44) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray44& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; +}; + +template +class ValueArray45 { + public: + ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), + v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray45& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; +}; + +template +class ValueArray46 { + public: + ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray46& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; +}; + +template +class ValueArray47 { + public: + ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), + v47_(v47) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, + v47_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray47& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; +}; + +template +class ValueArray48 { + public: + ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), + v46_(v46), v47_(v47), v48_(v48) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray48& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; +}; + +template +class ValueArray49 { + public: + ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, + T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_, v49_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray49& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; +}; + +template +class ValueArray50 { + public: + ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, + T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_, v49_, v50_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray50& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; + const T50 v50_; +}; + +#if GTEST_HAS_COMBINE +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Generates values from the Cartesian product of values produced +// by the argument generators. +// +template +class CartesianProductGenerator2 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator2(const ParamGenerator& g1, + const ParamGenerator& g2) + : g1_(g1), g2_(g2) {} + virtual ~CartesianProductGenerator2() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current2_; + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + ParamType current_value_; + }; // class CartesianProductGenerator2::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator2& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; +}; // class CartesianProductGenerator2 + + +template +class CartesianProductGenerator3 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator3(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + virtual ~CartesianProductGenerator3() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current3_; + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + ParamType current_value_; + }; // class CartesianProductGenerator3::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator3& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; +}; // class CartesianProductGenerator3 + + +template +class CartesianProductGenerator4 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator4(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + virtual ~CartesianProductGenerator4() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current4_; + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + ParamType current_value_; + }; // class CartesianProductGenerator4::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator4& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; +}; // class CartesianProductGenerator4 + + +template +class CartesianProductGenerator5 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator5(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + virtual ~CartesianProductGenerator5() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current5_; + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + ParamType current_value_; + }; // class CartesianProductGenerator5::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator5& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; +}; // class CartesianProductGenerator5 + + +template +class CartesianProductGenerator6 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator6(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + virtual ~CartesianProductGenerator6() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current6_; + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + ParamType current_value_; + }; // class CartesianProductGenerator6::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator6& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; +}; // class CartesianProductGenerator6 + + +template +class CartesianProductGenerator7 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator7(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + virtual ~CartesianProductGenerator7() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current7_; + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + ParamType current_value_; + }; // class CartesianProductGenerator7::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator7& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; +}; // class CartesianProductGenerator7 + + +template +class CartesianProductGenerator8 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator8(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + virtual ~CartesianProductGenerator8() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current8_; + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + ParamType current_value_; + }; // class CartesianProductGenerator8::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator8& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; +}; // class CartesianProductGenerator8 + + +template +class CartesianProductGenerator9 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator9(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + virtual ~CartesianProductGenerator9() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current9_; + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + ParamType current_value_; + }; // class CartesianProductGenerator9::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator9& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; +}; // class CartesianProductGenerator9 + + +template +class CartesianProductGenerator10 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator10(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9, + const ParamGenerator& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + virtual ~CartesianProductGenerator10() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end(), g10_, g10_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9, + const ParamGenerator& g10, + const typename ParamGenerator::iterator& current10) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9), + begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current10_; + if (current10_ == end10_) { + current10_ = begin10_; + ++current9_; + } + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_ && + current10_ == typed_other->current10_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_), + begin10_(other.begin10_), + end10_(other.end10_), + current10_(other.current10_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_, *current10_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_ || + current10_ == end10_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + const typename ParamGenerator::iterator begin10_; + const typename ParamGenerator::iterator end10_; + typename ParamGenerator::iterator current10_; + ParamType current_value_; + }; // class CartesianProductGenerator10::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator10& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; + const ParamGenerator g10_; +}; // class CartesianProductGenerator10 + + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Helper classes providing Combine() with polymorphic features. They allow +// casting CartesianProductGeneratorN to ParamGenerator if T is +// convertible to U. +// +template +class CartesianProductHolder2 { + public: +CartesianProductHolder2(const Generator1& g1, const Generator2& g2) + : g1_(g1), g2_(g2) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator2( + static_cast >(g1_), + static_cast >(g2_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder2& other); + + const Generator1 g1_; + const Generator2 g2_; +}; // class CartesianProductHolder2 + +template +class CartesianProductHolder3 { + public: +CartesianProductHolder3(const Generator1& g1, const Generator2& g2, + const Generator3& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator3( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder3& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; +}; // class CartesianProductHolder3 + +template +class CartesianProductHolder4 { + public: +CartesianProductHolder4(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator4( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder4& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; +}; // class CartesianProductHolder4 + +template +class CartesianProductHolder5 { + public: +CartesianProductHolder5(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator5( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder5& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; +}; // class CartesianProductHolder5 + +template +class CartesianProductHolder6 { + public: +CartesianProductHolder6(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator6( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder6& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; +}; // class CartesianProductHolder6 + +template +class CartesianProductHolder7 { + public: +CartesianProductHolder7(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator7( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder7& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; +}; // class CartesianProductHolder7 + +template +class CartesianProductHolder8 { + public: +CartesianProductHolder8(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator8( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder8& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; +}; // class CartesianProductHolder8 + +template +class CartesianProductHolder9 { + public: +CartesianProductHolder9(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator9( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder9& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; +}; // class CartesianProductHolder9 + +template +class CartesianProductHolder10 { + public: +CartesianProductHolder10(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9, const Generator10& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator10( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_), + static_cast >(g10_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder10& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; + const Generator10 g10_; +}; // class CartesianProductHolder10 + +#endif // GTEST_HAS_COMBINE + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Functions producing parameter generators. +// +// Google Test uses these generators to produce parameters for value- +// parameterized tests. When a parameterized test case is instantiated +// with a particular generator, Google Test creates and runs tests +// for each element in the sequence produced by the generator. +// +// In the following sample, tests from test case FooTest are instantiated +// each three times with parameter values 3, 5, and 8: +// +// class FooTest : public TestWithParam { ... }; +// +// TEST_P(FooTest, TestThis) { +// } +// TEST_P(FooTest, TestThat) { +// } +// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); +// + +// Range() returns generators providing sequences of values in a range. +// +// Synopsis: +// Range(start, end) +// - returns a generator producing a sequence of values {start, start+1, +// start+2, ..., }. +// Range(start, end, step) +// - returns a generator producing a sequence of values {start, start+step, +// start+step+step, ..., }. +// Notes: +// * The generated sequences never include end. For example, Range(1, 5) +// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) +// returns a generator producing {1, 3, 5, 7}. +// * start and end must have the same type. That type may be any integral or +// floating-point type or a user defined type satisfying these conditions: +// * It must be assignable (have operator=() defined). +// * It must have operator+() (operator+(int-compatible type) for +// two-operand version). +// * It must have operator<() defined. +// Elements in the resulting sequences will also have that type. +// * Condition start < end must be satisfied in order for resulting sequences +// to contain any elements. +// +template +internal::ParamGenerator Range(T start, T end, IncrementT step) { + return internal::ParamGenerator( + new internal::RangeGenerator(start, end, step)); +} + +template +internal::ParamGenerator Range(T start, T end) { + return Range(start, end, 1); +} + +// ValuesIn() function allows generation of tests with parameters coming from +// a container. +// +// Synopsis: +// ValuesIn(const T (&array)[N]) +// - returns a generator producing sequences with elements from +// a C-style array. +// ValuesIn(const Container& container) +// - returns a generator producing sequences with elements from +// an STL-style container. +// ValuesIn(Iterator begin, Iterator end) +// - returns a generator producing sequences with elements from +// a range [begin, end) defined by a pair of STL-style iterators. These +// iterators can also be plain C pointers. +// +// Please note that ValuesIn copies the values from the containers +// passed in and keeps them to generate tests in RUN_ALL_TESTS(). +// +// Examples: +// +// This instantiates tests from test case StringTest +// each with C-string values of "foo", "bar", and "baz": +// +// const char* strings[] = {"foo", "bar", "baz"}; +// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); +// +// This instantiates tests from test case StlStringTest +// each with STL strings with values "a" and "b": +// +// ::std::vector< ::std::string> GetParameterStrings() { +// ::std::vector< ::std::string> v; +// v.push_back("a"); +// v.push_back("b"); +// return v; +// } +// +// INSTANTIATE_TEST_CASE_P(CharSequence, +// StlStringTest, +// ValuesIn(GetParameterStrings())); +// +// +// This will also instantiate tests from CharTest +// each with parameter values 'a' and 'b': +// +// ::std::list GetParameterChars() { +// ::std::list list; +// list.push_back('a'); +// list.push_back('b'); +// return list; +// } +// ::std::list l = GetParameterChars(); +// INSTANTIATE_TEST_CASE_P(CharSequence2, +// CharTest, +// ValuesIn(l.begin(), l.end())); +// +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, + ForwardIterator end) { + typedef typename ::std::iterator_traits::value_type + ParamType; + return internal::ParamGenerator( + new internal::ValuesInIteratorRangeGenerator(begin, end)); +} + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]) { + return ValuesIn(array, array + N); +} + +template +internal::ParamGenerator ValuesIn( + const Container& container) { + return ValuesIn(container.begin(), container.end()); +} + +// Values() allows generating tests from explicitly specified list of +// parameters. +// +// Synopsis: +// Values(T v1, T v2, ..., T vN) +// - returns a generator producing sequences with elements v1, v2, ..., vN. +// +// For example, this instantiates tests from test case BarTest each +// with values "one", "two", and "three": +// +// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); +// +// This instantiates tests from test case BazTest each with values 1, 2, 3.5. +// The exact type of values will depend on the type of parameter in BazTest. +// +// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); +// +// Currently, Values() supports from 1 to 50 parameters. +// +template +internal::ValueArray1 Values(T1 v1) { + return internal::ValueArray1(v1); +} + +template +internal::ValueArray2 Values(T1 v1, T2 v2) { + return internal::ValueArray2(v1, v2); +} + +template +internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { + return internal::ValueArray3(v1, v2, v3); +} + +template +internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { + return internal::ValueArray4(v1, v2, v3, v4); +} + +template +internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5) { + return internal::ValueArray5(v1, v2, v3, v4, v5); +} + +template +internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6) { + return internal::ValueArray6(v1, v2, v3, v4, v5, v6); +} + +template +internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7) { + return internal::ValueArray7(v1, v2, v3, v4, v5, + v6, v7); +} + +template +internal::ValueArray8 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { + return internal::ValueArray8(v1, v2, v3, v4, + v5, v6, v7, v8); +} + +template +internal::ValueArray9 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { + return internal::ValueArray9(v1, v2, v3, + v4, v5, v6, v7, v8, v9); +} + +template +internal::ValueArray10 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { + return internal::ValueArray10(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10); +} + +template +internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) { + return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); +} + +template +internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) { + return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); +} + +template +internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) { + return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); +} + +template +internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { + return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14); +} + +template +internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { + return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); +} + +template +internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16) { + return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16); +} + +template +internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17) { + return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17); +} + +template +internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18) { + return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18); +} + +template +internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { + return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); +} + +template +internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { + return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); +} + +template +internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { + return internal::ValueArray21(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); +} + +template +internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22) { + return internal::ValueArray22(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22); +} + +template +internal::ValueArray23 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23) { + return internal::ValueArray23(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23); +} + +template +internal::ValueArray24 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24) { + return internal::ValueArray24(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24); +} + +template +internal::ValueArray25 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { + return internal::ValueArray25(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25); +} + +template +internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) { + return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); +} + +template +internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) { + return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); +} + +template +internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) { + return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28); +} + +template +internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) { + return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29); +} + +template +internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { + return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30); +} + +template +internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { + return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31); +} + +template +internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32) { + return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32); +} + +template +internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33) { + return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); +} + +template +internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34) { + return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); +} + +template +internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { + return internal::ValueArray35(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); +} + +template +internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { + return internal::ValueArray36(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36); +} + +template +internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37) { + return internal::ValueArray37(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37); +} + +template +internal::ValueArray38 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38) { + return internal::ValueArray38(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, + v33, v34, v35, v36, v37, v38); +} + +template +internal::ValueArray39 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38, T39 v39) { + return internal::ValueArray39(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39); +} + +template +internal::ValueArray40 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, + T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, + T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { + return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, + v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); +} + +template +internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { + return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, + v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); +} + +template +internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) { + return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, + v42); +} + +template +internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) { + return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, + v41, v42, v43); +} + +template +internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) { + return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, + v40, v41, v42, v43, v44); +} + +template +internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { + return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, + v39, v40, v41, v42, v43, v44, v45); +} + +template +internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { + return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46); +} + +template +internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { + return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); +} + +template +internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, + T48 v48) { + return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, + v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); +} + +template +internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, + T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, + T47 v47, T48 v48, T49 v49) { + return internal::ValueArray49(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, + v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); +} + +template +internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, + T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, + T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { + return internal::ValueArray50(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, + v48, v49, v50); +} + +// Bool() allows generating tests with parameters in a set of (false, true). +// +// Synopsis: +// Bool() +// - returns a generator producing sequences with elements {false, true}. +// +// It is useful when testing code that depends on Boolean flags. Combinations +// of multiple flags can be tested when several Bool()'s are combined using +// Combine() function. +// +// In the following example all tests in the test case FlagDependentTest +// will be instantiated twice with parameters false and true. +// +// class FlagDependentTest : public testing::TestWithParam { +// virtual void SetUp() { +// external_flag = GetParam(); +// } +// } +// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); +// +inline internal::ParamGenerator Bool() { + return Values(false, true); +} + +#if GTEST_HAS_COMBINE +// Combine() allows the user to combine two or more sequences to produce +// values of a Cartesian product of those sequences' elements. +// +// Synopsis: +// Combine(gen1, gen2, ..., genN) +// - returns a generator producing sequences with elements coming from +// the Cartesian product of elements from the sequences generated by +// gen1, gen2, ..., genN. The sequence elements will have a type of +// tuple where T1, T2, ..., TN are the types +// of elements from sequences produces by gen1, gen2, ..., genN. +// +// Combine can have up to 10 arguments. This number is currently limited +// by the maximum number of elements in the tuple implementation used by Google +// Test. +// +// Example: +// +// This will instantiate tests in test case AnimalTest each one with +// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), +// tuple("dog", BLACK), and tuple("dog", WHITE): +// +// enum Color { BLACK, GRAY, WHITE }; +// class AnimalTest +// : public testing::TestWithParam > {...}; +// +// TEST_P(AnimalTest, AnimalLooksNice) {...} +// +// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, +// Combine(Values("cat", "dog"), +// Values(BLACK, WHITE))); +// +// This will instantiate tests in FlagDependentTest with all variations of two +// Boolean flags: +// +// class FlagDependentTest +// : public testing::TestWithParam > { +// virtual void SetUp() { +// // Assigns external_flag_1 and external_flag_2 values from the tuple. +// tie(external_flag_1, external_flag_2) = GetParam(); +// } +// }; +// +// TEST_P(FlagDependentTest, TestFeature1) { +// // Test your code using external_flag_1 and external_flag_2 here. +// } +// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, +// Combine(Bool(), Bool())); +// +template +internal::CartesianProductHolder2 Combine( + const Generator1& g1, const Generator2& g2) { + return internal::CartesianProductHolder2( + g1, g2); +} + +template +internal::CartesianProductHolder3 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3) { + return internal::CartesianProductHolder3( + g1, g2, g3); +} + +template +internal::CartesianProductHolder4 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4) { + return internal::CartesianProductHolder4( + g1, g2, g3, g4); +} + +template +internal::CartesianProductHolder5 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5) { + return internal::CartesianProductHolder5( + g1, g2, g3, g4, g5); +} + +template +internal::CartesianProductHolder6 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6) { + return internal::CartesianProductHolder6( + g1, g2, g3, g4, g5, g6); +} + +template +internal::CartesianProductHolder7 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7) { + return internal::CartesianProductHolder7( + g1, g2, g3, g4, g5, g6, g7); +} + +template +internal::CartesianProductHolder8 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8) { + return internal::CartesianProductHolder8( + g1, g2, g3, g4, g5, g6, g7, g8); +} + +template +internal::CartesianProductHolder9 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9) { + return internal::CartesianProductHolder9( + g1, g2, g3, g4, g5, g6, g7, g8, g9); +} + +template +internal::CartesianProductHolder10 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9, + const Generator10& g10) { + return internal::CartesianProductHolder10( + g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); +} +#endif // GTEST_HAS_COMBINE + + + +#define TEST_P(test_case_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + : public test_case_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ + virtual void TestBody(); \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ + #test_case_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_case_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ + ::testing::internal::ParamGenerator \ + gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ + int gtest_##prefix##test_case_name##_dummy_ = \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ + #prefix, \ + >est_##prefix##test_case_name##_EvalGenerator_, \ + __FILE__, __LINE__) + +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Google C++ Testing Framework definitions useful in production code. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ + +// When you need to test the private or protected members of a class, +// use the FRIEND_TEST macro to declare your tests as friends of the +// class. For example: +// +// class MyClass { +// private: +// void MyMethod(); +// FRIEND_TEST(MyClassTest, MyMethod); +// }; +// +// class MyClassTest : public testing::Test { +// // ... +// }; +// +// TEST_F(MyClassTest, MyMethod) { +// // Can call MyClass::MyMethod() here. +// } + +#define FRIEND_TEST(test_case_name, test_name)\ +friend class test_case_name##_##test_name##_Test + +#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ + +#include +#include + +namespace testing { + +// A copyable object representing the result of a test part (i.e. an +// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). +// +// Don't inherit from TestPartResult as its destructor is not virtual. +class GTEST_API_ TestPartResult { + public: + // The possible outcomes of a test part (i.e. an assertion or an + // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). + enum Type { + kSuccess, // Succeeded. + kNonFatalFailure, // Failed but the test can continue. + kFatalFailure // Failed and the test should be terminated. + }; + + // C'tor. TestPartResult does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestPartResult object. + TestPartResult(Type a_type, + const char* a_file_name, + int a_line_number, + const char* a_message) + : type_(a_type), + file_name_(a_file_name), + line_number_(a_line_number), + summary_(ExtractSummary(a_message)), + message_(a_message) { + } + + // Gets the outcome of the test part. + Type type() const { return type_; } + + // Gets the name of the source file where the test part took place, or + // NULL if it's unknown. + const char* file_name() const { return file_name_.c_str(); } + + // Gets the line in the source file where the test part took place, + // or -1 if it's unknown. + int line_number() const { return line_number_; } + + // Gets the summary of the failure message. + const char* summary() const { return summary_.c_str(); } + + // Gets the message associated with the test part. + const char* message() const { return message_.c_str(); } + + // Returns true iff the test part passed. + bool passed() const { return type_ == kSuccess; } + + // Returns true iff the test part failed. + bool failed() const { return type_ != kSuccess; } + + // Returns true iff the test part non-fatally failed. + bool nonfatally_failed() const { return type_ == kNonFatalFailure; } + + // Returns true iff the test part fatally failed. + bool fatally_failed() const { return type_ == kFatalFailure; } + private: + Type type_; + + // Gets the summary of the failure message by omitting the stack + // trace in it. + static internal::String ExtractSummary(const char* message); + + // The name of the source file where the test part took place, or + // NULL if the source file is unknown. + internal::String file_name_; + // The line in the source file where the test part took place, or -1 + // if the line number is unknown. + int line_number_; + internal::String summary_; // The test failure summary. + internal::String message_; // The test failure message. +}; + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result); + +// An array of TestPartResult objects. +// +// Don't inherit from TestPartResultArray as its destructor is not +// virtual. +class GTEST_API_ TestPartResultArray { + public: + TestPartResultArray() {} + + // Appends the given TestPartResult to the array. + void Append(const TestPartResult& result); + + // Returns the TestPartResult at the given index (0-based). + const TestPartResult& GetTestPartResult(int index) const; + + // Returns the number of TestPartResult objects in the array. + int size() const; + + private: + std::vector array_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); +}; + +// This interface knows how to report a test part result. +class TestPartResultReporterInterface { + public: + virtual ~TestPartResultReporterInterface() {} + + virtual void ReportTestPartResult(const TestPartResult& result) = 0; +}; + +namespace internal { + +// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a +// statement generates new fatal failures. To do so it registers itself as the +// current test part result reporter. Besides checking if fatal failures were +// reported, it only delegates the reporting to the former result reporter. +// The original result reporter is restored in the destructor. +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +class GTEST_API_ HasNewFatalFailureHelper + : public TestPartResultReporterInterface { + public: + HasNewFatalFailureHelper(); + virtual ~HasNewFatalFailureHelper(); + virtual void ReportTestPartResult(const TestPartResult& result); + bool has_new_fatal_failure() const { return has_new_fatal_failure_; } + private: + bool has_new_fatal_failure_; + TestPartResultReporterInterface* original_reporter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); +}; + +} // namespace internal + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ + +// This header implements typed tests and type-parameterized tests. + +// Typed (aka type-driven) tests repeat the same test for types in a +// list. You must know which types you want to test with when writing +// typed tests. Here's how you do it: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + public: + ... + typedef std::list List; + static T shared_; + T value_; +}; + +// Next, associate a list of types with the test case, which will be +// repeated for each type in the list. The typedef is necessary for +// the macro to parse correctly. +typedef testing::Types MyTypes; +TYPED_TEST_CASE(FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// TYPED_TEST_CASE(FooTest, int); + +// Then, use TYPED_TEST() instead of TEST_F() to define as many typed +// tests for this test case as you want. +TYPED_TEST(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + // Since we are inside a derived class template, C++ requires use to + // visit the members of FooTest via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the TestFixture:: + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the "typename + // TestFixture::" prefix. + typename TestFixture::List values; + values.push_back(n); + ... +} + +TYPED_TEST(FooTest, HasPropertyA) { ... } + +#endif // 0 + +// Type-parameterized tests are abstract test patterns parameterized +// by a type. Compared with typed tests, type-parameterized tests +// allow you to define the test pattern without knowing what the type +// parameters are. The defined pattern can be instantiated with +// different types any number of times, in any number of translation +// units. +// +// If you are designing an interface or concept, you can define a +// suite of type-parameterized tests to verify properties that any +// valid implementation of the interface/concept should have. Then, +// each implementation can easily instantiate the test suite to verify +// that it conforms to the requirements, without having to write +// similar tests repeatedly. Here's an example: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + ... +}; + +// Next, declare that you will define a type-parameterized test case +// (the _P suffix is for "parameterized" or "pattern", whichever you +// prefer): +TYPED_TEST_CASE_P(FooTest); + +// Then, use TYPED_TEST_P() to define as many type-parameterized tests +// for this type-parameterized test case as you want. +TYPED_TEST_P(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + TypeParam n = 0; + ... +} + +TYPED_TEST_P(FooTest, HasPropertyA) { ... } + +// Now the tricky part: you need to register all test patterns before +// you can instantiate them. The first argument of the macro is the +// test case name; the rest are the names of the tests in this test +// case. +REGISTER_TYPED_TEST_CASE_P(FooTest, + DoesBlah, HasPropertyA); + +// Finally, you are free to instantiate the pattern with the types you +// want. If you put the above code in a header file, you can #include +// it in multiple C++ source files and instantiate it multiple times. +// +// To distinguish different instances of the pattern, the first +// argument to the INSTANTIATE_* macro is a prefix that will be added +// to the actual test case name. Remember to pick unique prefixes for +// different instances. +typedef testing::Types MyTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); + +#endif // 0 + + +// Implements typed tests. + +#if GTEST_HAS_TYPED_TEST + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the typedef for the type parameters of the +// given test case. +#define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +#define TYPED_TEST_CASE(CaseName, Types) \ + typedef ::testing::internal::TypeList< Types >::type \ + GTEST_TYPE_PARAMS_(CaseName) + +#define TYPED_TEST(CaseName, TestName) \ + template \ + class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ + : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + bool gtest_##CaseName##_##TestName##_registered_ = \ + ::testing::internal::TypeParameterizedTest< \ + CaseName, \ + ::testing::internal::TemplateSel< \ + GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ + GTEST_TYPE_PARAMS_(CaseName)>::Register(\ + "", #CaseName, #TestName, 0); \ + template \ + void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() + +#endif // GTEST_HAS_TYPED_TEST + +// Implements type-parameterized tests. + +#if GTEST_HAS_TYPED_TEST_P + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the namespace name that the type-parameterized tests for +// the given type-parameterized test case are defined in. The exact +// name of the namespace is subject to change without notice. +#define GTEST_CASE_NAMESPACE_(TestCaseName) \ + gtest_case_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the variable used to remember the names of +// the defined tests in the given test case. +#define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ + gtest_typed_test_case_p_state_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. +// +// Expands to the name of the variable used to remember the names of +// the registered tests in the given test case. +#define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ + gtest_registered_test_names_##TestCaseName##_ + +// The variables defined in the type-parameterized test macros are +// static as typically these macros are used in a .h file that can be +// #included in multiple translation units linked together. +#define TYPED_TEST_CASE_P(CaseName) \ + static ::testing::internal::TypedTestCasePState \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) + +#define TYPED_TEST_P(CaseName, TestName) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + template \ + class TestName : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + static bool gtest_##TestName##_defined_ = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ + __FILE__, __LINE__, #CaseName, #TestName); \ + } \ + template \ + void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() + +#define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ + } \ + static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ + __FILE__, __LINE__, #__VA_ARGS__) + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +#define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ + bool gtest_##Prefix##_##CaseName = \ + ::testing::internal::TypeParameterizedTestCase::type>::Register(\ + #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) + +#endif // GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ + +// Depending on the platform, different string classes are available. +// On Linux, in addition to ::std::string, Google also makes use of +// class ::string, which has the same interface as ::std::string, but +// has a different implementation. +// +// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that +// ::string is available AND is a distinct type to ::std::string, or +// define it to 0 to indicate otherwise. +// +// If the user's ::std::string and ::string are the same class due to +// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. +// +// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined +// heuristically. + +namespace testing { + +// Declares the flags. + +// This flag temporary enables the disabled tests. +GTEST_DECLARE_bool_(also_run_disabled_tests); + +// This flag brings the debugger on an assertion failure. +GTEST_DECLARE_bool_(break_on_failure); + +// This flag controls whether Google Test catches all test-thrown exceptions +// and logs them as failures. +GTEST_DECLARE_bool_(catch_exceptions); + +// This flag enables using colors in terminal output. Available values are +// "yes" to enable colors, "no" (disable colors), or "auto" (the default) +// to let Google Test decide. +GTEST_DECLARE_string_(color); + +// This flag sets up the filter to select by name using a glob pattern +// the tests to run. If the filter is not given all tests are executed. +GTEST_DECLARE_string_(filter); + +// This flag causes the Google Test to list tests. None of the tests listed +// are actually run if the flag is provided. +GTEST_DECLARE_bool_(list_tests); + +// This flag controls whether Google Test emits a detailed XML report to a file +// in addition to its normal textual output. +GTEST_DECLARE_string_(output); + +// This flags control whether Google Test prints the elapsed time for each +// test. +GTEST_DECLARE_bool_(print_time); + +// This flag specifies the random number seed. +GTEST_DECLARE_int32_(random_seed); + +// This flag sets how many times the tests are repeated. The default value +// is 1. If the value is -1 the tests are repeating forever. +GTEST_DECLARE_int32_(repeat); + +// This flag controls whether Google Test includes Google Test internal +// stack frames in failure stack traces. +GTEST_DECLARE_bool_(show_internal_stack_frames); + +// When this flag is specified, tests' order is randomized on every iteration. +GTEST_DECLARE_bool_(shuffle); + +// This flag specifies the maximum number of stack frames to be +// printed in a failure message. +GTEST_DECLARE_int32_(stack_trace_depth); + +// When this flag is specified, a failed assertion will throw an +// exception if exceptions are enabled, or exit the program with a +// non-zero code otherwise. +GTEST_DECLARE_bool_(throw_on_failure); + +// The upper limit for valid stack trace depths. +const int kMaxStackTraceDepth = 100; + +namespace internal { + +class AssertHelper; +class DefaultGlobalTestPartResultReporter; +class ExecDeathTest; +class NoExecDeathTest; +class FinalSuccessChecker; +class GTestFlagSaver; +class TestInfoImpl; +class TestResultAccessor; +class TestEventListenersAccessor; +class TestEventRepeater; +class WindowsDeathTest; +class UnitTestImpl* GetUnitTestImpl(); +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const String& message); +class PrettyUnitTestResultPrinter; +class XmlUnitTestResultPrinter; + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". +// Declared in gtest-internal.h but defined here, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable) { + return (Message() << streamable).GetString(); +} + +} // namespace internal + +// A class for indicating whether an assertion was successful. When +// the assertion wasn't successful, the AssertionResult object +// remembers a non-empty message that describes how it failed. +// +// To create an instance of this class, use one of the factory functions +// (AssertionSuccess() and AssertionFailure()). +// +// This class is useful for two purposes: +// 1. Defining predicate functions to be used with Boolean test assertions +// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts +// 2. Defining predicate-format functions to be +// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). +// +// For example, if you define IsEven predicate: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) +// will print the message +// +// Value of: IsEven(Fib(5)) +// Actual: false (5 is odd) +// Expected: true +// +// instead of a more opaque +// +// Value of: IsEven(Fib(5)) +// Actual: false +// Expected: true +// +// in case IsEven is a simple Boolean predicate. +// +// If you expect your predicate to be reused and want to support informative +// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up +// about half as often as positive ones in our tests), supply messages for +// both success and failure cases: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess() << n << " is even"; +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print +// +// Value of: IsEven(Fib(6)) +// Actual: true (8 is even) +// Expected: false +// +// NB: Predicates that support negative Boolean assertions have reduced +// performance in positive ones so be careful not to use them in tests +// that have lots (tens of thousands) of positive Boolean assertions. +// +// To use this class with EXPECT_PRED_FORMAT assertions such as: +// +// // Verifies that Foo() returns an even number. +// EXPECT_PRED_FORMAT1(IsEven, Foo()); +// +// you need to define: +// +// testing::AssertionResult IsEven(const char* expr, int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() +// << "Expected: " << expr << " is even\n Actual: it's " << n; +// } +// +// If Foo() returns 5, you will see the following message: +// +// Expected: Foo() is even +// Actual: it's 5 +// +class GTEST_API_ AssertionResult { + public: + // Copy constructor. + // Used in EXPECT_TRUE/FALSE(assertion_result). + AssertionResult(const AssertionResult& other); + // Used in the EXPECT_TRUE/FALSE(bool_expression). + explicit AssertionResult(bool success) : success_(success) {} + + // Returns true iff the assertion succeeded. + operator bool() const { return success_; } // NOLINT + + // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. + AssertionResult operator!() const; + + // Returns the text streamed into this AssertionResult. Test assertions + // use it when they fail (i.e., the predicate's outcome doesn't match the + // assertion's expectation). When nothing has been streamed into the + // object, returns an empty string. + const char* message() const { + return message_.get() != NULL && message_->c_str() != NULL ? + message_->c_str() : ""; + } + // TODO(vladl@google.com): Remove this after making sure no clients use it. + // Deprecated; please use message() instead. + const char* failure_message() const { return message(); } + + // Streams a custom failure message into this object. + template AssertionResult& operator<<(const T& value); + + private: + // No implementation - we want AssertionResult to be + // copy-constructible but not assignable. + void operator=(const AssertionResult& other); + + // Stores result of the assertion predicate. + bool success_; + // Stores the message describing the condition in case the expectation + // construct is not satisfied with the predicate's outcome. + // Referenced via a pointer to avoid taking too much stack frame space + // with test assertions. + internal::scoped_ptr message_; +}; // class AssertionResult + +// Streams a custom failure message into this object. +template +AssertionResult& AssertionResult::operator<<(const T& value) { + Message msg; + if (message_.get() != NULL) + msg << *message_; + msg << value; + message_.reset(new internal::String(msg.GetString())); + return *this; +} + +// Makes a successful assertion result. +GTEST_API_ AssertionResult AssertionSuccess(); + +// Makes a failed assertion result. +GTEST_API_ AssertionResult AssertionFailure(); + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << msg. +GTEST_API_ AssertionResult AssertionFailure(const Message& msg); + +// The abstract class that all tests inherit from. +// +// In Google Test, a unit test program contains one or many TestCases, and +// each TestCase contains one or many Tests. +// +// When you define a test using the TEST macro, you don't need to +// explicitly derive from Test - the TEST macro automatically does +// this for you. +// +// The only time you derive from Test is when defining a test fixture +// to be used a TEST_F. For example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { ... } +// virtual void TearDown() { ... } +// ... +// }; +// +// TEST_F(FooTest, Bar) { ... } +// TEST_F(FooTest, Baz) { ... } +// +// Test is not copyable. +class GTEST_API_ Test { + public: + friend class internal::TestInfoImpl; + + // Defines types for pointers to functions that set up and tear down + // a test case. + typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; + typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; + + // The d'tor is virtual as we intend to inherit from Test. + virtual ~Test(); + + // Sets up the stuff shared by all tests in this test case. + // + // Google Test will call Foo::SetUpTestCase() before running the first + // test in test case Foo. Hence a sub-class can define its own + // SetUpTestCase() method to shadow the one defined in the super + // class. + static void SetUpTestCase() {} + + // Tears down the stuff shared by all tests in this test case. + // + // Google Test will call Foo::TearDownTestCase() after running the last + // test in test case Foo. Hence a sub-class can define its own + // TearDownTestCase() method to shadow the one defined in the super + // class. + static void TearDownTestCase() {} + + // Returns true iff the current test has a fatal failure. + static bool HasFatalFailure(); + + // Returns true iff the current test has a non-fatal failure. + static bool HasNonfatalFailure(); + + // Returns true iff the current test has a (either fatal or + // non-fatal) failure. + static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } + + // Logs a property for the current test. Only the last value for a given + // key is remembered. + // These are public static so they can be called from utility functions + // that are not members of the test fixture. + // The arguments are const char* instead strings, as Google Test is used + // on platforms where string doesn't compile. + // + // Note that a driving consideration for these RecordProperty methods + // was to produce xml output suited to the Greenspan charting utility, + // which at present will only chart values that fit in a 32-bit int. It + // is the user's responsibility to restrict their values to 32-bit ints + // if they intend them to be used with Greenspan. + static void RecordProperty(const char* key, const char* value); + static void RecordProperty(const char* key, int value); + + protected: + // Creates a Test object. + Test(); + + // Sets up the test fixture. + virtual void SetUp(); + + // Tears down the test fixture. + virtual void TearDown(); + + private: + // Returns true iff the current test has the same fixture class as + // the first test in the current test case. + static bool HasSameFixtureClass(); + + // Runs the test after the test fixture has been set up. + // + // A sub-class must implement this to define the test logic. + // + // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. + // Instead, use the TEST or TEST_F macro. + virtual void TestBody() = 0; + + // Sets up, executes, and tears down the test. + void Run(); + + // Uses a GTestFlagSaver to save and restore all Google Test flags. + const internal::GTestFlagSaver* const gtest_flag_saver_; + + // Often a user mis-spells SetUp() as Setup() and spends a long time + // wondering why it is never called by Google Test. The declaration of + // the following method is solely for catching such an error at + // compile time: + // + // - The return type is deliberately chosen to be not void, so it + // will be a conflict if a user declares void Setup() in his test + // fixture. + // + // - This method is private, so it will be another compiler error + // if a user calls it from his test fixture. + // + // DO NOT OVERRIDE THIS FUNCTION. + // + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } + + // We disallow copying Tests. + GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); +}; + +typedef internal::TimeInMillis TimeInMillis; + +// A copyable object representing a user specified test property which can be +// output as a key/value string pair. +// +// Don't inherit from TestProperty as its destructor is not virtual. +class TestProperty { + public: + // C'tor. TestProperty does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestProperty object. + TestProperty(const char* a_key, const char* a_value) : + key_(a_key), value_(a_value) { + } + + // Gets the user supplied key. + const char* key() const { + return key_.c_str(); + } + + // Gets the user supplied value. + const char* value() const { + return value_.c_str(); + } + + // Sets a new value, overriding the one supplied in the constructor. + void SetValue(const char* new_value) { + value_ = new_value; + } + + private: + // The key supplied by the user. + internal::String key_; + // The value supplied by the user. + internal::String value_; +}; + +// The result of a single Test. This includes a list of +// TestPartResults, a list of TestProperties, a count of how many +// death tests there are in the Test, and how much time it took to run +// the Test. +// +// TestResult is not copyable. +class GTEST_API_ TestResult { + public: + // Creates an empty TestResult. + TestResult(); + + // D'tor. Do not inherit from TestResult. + ~TestResult(); + + // Gets the number of all test parts. This is the sum of the number + // of successful test parts and the number of failed test parts. + int total_part_count() const; + + // Returns the number of the test properties. + int test_property_count() const; + + // Returns true iff the test passed (i.e. no test part failed). + bool Passed() const { return !Failed(); } + + // Returns true iff the test failed. + bool Failed() const; + + // Returns true iff the test fatally failed. + bool HasFatalFailure() const; + + // Returns true iff the test has a non-fatal failure. + bool HasNonfatalFailure() const; + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test part result among all the results. i can range + // from 0 to test_property_count() - 1. If i is not in that range, aborts + // the program. + const TestPartResult& GetTestPartResult(int i) const; + + // Returns the i-th test property. i can range from 0 to + // test_property_count() - 1. If i is not in that range, aborts the + // program. + const TestProperty& GetTestProperty(int i) const; + + private: + friend class TestInfo; + friend class UnitTest; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::ExecDeathTest; + friend class internal::TestInfoImpl; + friend class internal::TestResultAccessor; + friend class internal::UnitTestImpl; + friend class internal::WindowsDeathTest; + + // Gets the vector of TestPartResults. + const std::vector& test_part_results() const { + return test_part_results_; + } + + // Gets the vector of TestProperties. + const std::vector& test_properties() const { + return test_properties_; + } + + // Sets the elapsed time. + void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } + + // Adds a test property to the list. The property is validated and may add + // a non-fatal failure if invalid (e.g., if it conflicts with reserved + // key names). If a property is already recorded for the same key, the + // value will be updated, rather than storing multiple values for the same + // key. + void RecordProperty(const TestProperty& test_property); + + // Adds a failure if the key is a reserved attribute of Google Test + // testcase tags. Returns true if the property is valid. + // TODO(russr): Validate attribute names are legal and human readable. + static bool ValidateTestProperty(const TestProperty& test_property); + + // Adds a test part result to the list. + void AddTestPartResult(const TestPartResult& test_part_result); + + // Returns the death test count. + int death_test_count() const { return death_test_count_; } + + // Increments the death test count, returning the new count. + int increment_death_test_count() { return ++death_test_count_; } + + // Clears the test part results. + void ClearTestPartResults(); + + // Clears the object. + void Clear(); + + // Protects mutable state of the property vector and of owned + // properties, whose values may be updated. + internal::Mutex test_properites_mutex_; + + // The vector of TestPartResults + std::vector test_part_results_; + // The vector of TestProperties + std::vector test_properties_; + // Running count of death tests. + int death_test_count_; + // The elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + + // We disallow copying TestResult. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); +}; // class TestResult + +// A TestInfo object stores the following information about a test: +// +// Test case name +// Test name +// Whether the test should be run +// A function pointer that creates the test object when invoked +// Test result +// +// The constructor of TestInfo registers itself with the UnitTest +// singleton such that the RUN_ALL_TESTS() macro knows which tests to +// run. +class GTEST_API_ TestInfo { + public: + // Destructs a TestInfo object. This function is not virtual, so + // don't inherit from TestInfo. + ~TestInfo(); + + // Returns the test case name. + const char* test_case_name() const; + + // Returns the test name. + const char* name() const; + + // Returns the test case comment. + const char* test_case_comment() const; + + // Returns the test comment. + const char* comment() const; + + // Returns true if this test should run, that is if the test is not disabled + // (or it is disabled but the also_run_disabled_tests flag has been specified) + // and its full name matches the user-specified filter. + // + // Google Test allows the user to filter the tests by their full names. + // The full name of a test Bar in test case Foo is defined as + // "Foo.Bar". Only the tests that match the filter will run. + // + // A filter is a colon-separated list of glob (not regex) patterns, + // optionally followed by a '-' and a colon-separated list of + // negative patterns (tests to exclude). A test is run if it + // matches one of the positive patterns and does not match any of + // the negative patterns. + // + // For example, *A*:Foo.* is a filter that matches any string that + // contains the character 'A' or starts with "Foo.". + bool should_run() const; + + // Returns the result of the test. + const TestResult* result() const; + + private: +#if GTEST_HAS_DEATH_TEST + friend class internal::DefaultDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + friend class Test; + friend class TestCase; + friend class internal::TestInfoImpl; + friend class internal::UnitTestImpl; + friend TestInfo* internal::MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + internal::TypeId fixture_class_id, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + internal::TestFactoryBase* factory); + + // Returns true if this test matches the user-specified filter. + bool matches_filter() const; + + // Increments the number of death tests encountered in this test so + // far. + int increment_death_test_count(); + + // Accessors for the implementation object. + internal::TestInfoImpl* impl() { return impl_; } + const internal::TestInfoImpl* impl() const { return impl_; } + + // Constructs a TestInfo object. The newly constructed instance assumes + // ownership of the factory object. + TestInfo(const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory); + + // An opaque implementation object. + internal::TestInfoImpl* impl_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); +}; + +// A test case, which consists of a vector of TestInfos. +// +// TestCase is not copyable. +class GTEST_API_ TestCase { + public: + // Creates a TestCase with the given name. + // + // TestCase does NOT have a default constructor. Always use this + // constructor to create a TestCase object. + // + // Arguments: + // + // name: name of the test case + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase(const char* name, const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Destructor of TestCase. + virtual ~TestCase(); + + // Gets the name of the TestCase. + const char* name() const { return name_.c_str(); } + + // Returns the test case comment. + const char* comment() const { return comment_.c_str(); } + + // Returns true if any test in this test case should run. + bool should_run() const { return should_run_; } + + // Gets the number of successful tests in this test case. + int successful_test_count() const; + + // Gets the number of failed tests in this test case. + int failed_test_count() const; + + // Gets the number of disabled tests in this test case. + int disabled_test_count() const; + + // Get the number of tests in this test case that should run. + int test_to_run_count() const; + + // Gets the number of all tests in this test case. + int total_test_count() const; + + // Returns true iff the test case passed. + bool Passed() const { return !Failed(); } + + // Returns true iff the test case failed. + bool Failed() const { return failed_test_count() > 0; } + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + const TestInfo* GetTestInfo(int i) const; + + private: + friend class Test; + friend class internal::UnitTestImpl; + + // Gets the (mutable) vector of TestInfos in this TestCase. + std::vector& test_info_list() { return test_info_list_; } + + // Gets the (immutable) vector of TestInfos in this TestCase. + const std::vector& test_info_list() const { + return test_info_list_; + } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + TestInfo* GetMutableTestInfo(int i); + + // Sets the should_run member. + void set_should_run(bool should) { should_run_ = should; } + + // Adds a TestInfo to this test case. Will delete the TestInfo upon + // destruction of the TestCase object. + void AddTestInfo(TestInfo * test_info); + + // Clears the results of all tests in this test case. + void ClearResult(); + + // Clears the results of all tests in the given test case. + static void ClearTestCaseResult(TestCase* test_case) { + test_case->ClearResult(); + } + + // Runs every test in this TestCase. + void Run(); + + // Returns true iff test passed. + static bool TestPassed(const TestInfo * test_info); + + // Returns true iff test failed. + static bool TestFailed(const TestInfo * test_info); + + // Returns true iff test is disabled. + static bool TestDisabled(const TestInfo * test_info); + + // Returns true if the given test should run. + static bool ShouldRunTest(const TestInfo *test_info); + + // Shuffles the tests in this test case. + void ShuffleTests(internal::Random* random); + + // Restores the test order to before the first shuffle. + void UnshuffleTests(); + + // Name of the test case. + internal::String name_; + // Comment on the test case. + internal::String comment_; + // The vector of TestInfos in their original order. It owns the + // elements in the vector. + std::vector test_info_list_; + // Provides a level of indirection for the test list to allow easy + // shuffling and restoring the test order. The i-th element in this + // vector is the index of the i-th test in the shuffled test list. + std::vector test_indices_; + // Pointer to the function that sets up the test case. + Test::SetUpTestCaseFunc set_up_tc_; + // Pointer to the function that tears down the test case. + Test::TearDownTestCaseFunc tear_down_tc_; + // True iff any test in this test case should run. + bool should_run_; + // Elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + + // We disallow copying TestCases. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); +}; + +// An Environment object is capable of setting up and tearing down an +// environment. The user should subclass this to define his own +// environment(s). +// +// An Environment object does the set-up and tear-down in virtual +// methods SetUp() and TearDown() instead of the constructor and the +// destructor, as: +// +// 1. You cannot safely throw from a destructor. This is a problem +// as in some cases Google Test is used where exceptions are enabled, and +// we may want to implement ASSERT_* using exceptions where they are +// available. +// 2. You cannot use ASSERT_* directly in a constructor or +// destructor. +class Environment { + public: + // The d'tor is virtual as we need to subclass Environment. + virtual ~Environment() {} + + // Override this to define how to set up the environment. + virtual void SetUp() {} + + // Override this to define how to tear down the environment. + virtual void TearDown() {} + private: + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } +}; + +// The interface for tracing execution of tests. The methods are organized in +// the order the corresponding events are fired. +class TestEventListener { + public: + virtual ~TestEventListener() {} + + // Fired before any test activity starts. + virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; + + // Fired before each iteration of tests starts. There may be more than + // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration + // index, starting from 0. + virtual void OnTestIterationStart(const UnitTest& unit_test, + int iteration) = 0; + + // Fired before environment set-up for each iteration of tests starts. + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; + + // Fired after environment set-up for each iteration of tests ends. + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; + + // Fired before the test case starts. + virtual void OnTestCaseStart(const TestCase& test_case) = 0; + + // Fired before the test starts. + virtual void OnTestStart(const TestInfo& test_info) = 0; + + // Fired after a failed assertion or a SUCCESS(). + virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; + + // Fired after the test ends. + virtual void OnTestEnd(const TestInfo& test_info) = 0; + + // Fired after the test case ends. + virtual void OnTestCaseEnd(const TestCase& test_case) = 0; + + // Fired before environment tear-down for each iteration of tests starts. + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; + + // Fired after environment tear-down for each iteration of tests ends. + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; + + // Fired after each iteration of tests finishes. + virtual void OnTestIterationEnd(const UnitTest& unit_test, + int iteration) = 0; + + // Fired after all test activities have ended. + virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; +}; + +// The convenience class for users who need to override just one or two +// methods and are not concerned that a possible change to a signature of +// the methods they override will not be caught during the build. For +// comments about each method please see the definition of TestEventListener +// above. +class EmptyTestEventListener : public TestEventListener { + public: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} + virtual void OnTestStart(const TestInfo& /*test_info*/) {} + virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} + virtual void OnTestEnd(const TestInfo& /*test_info*/) {} + virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} + virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} +}; + +// TestEventListeners lets users add listeners to track events in Google Test. +class GTEST_API_ TestEventListeners { + public: + TestEventListeners(); + ~TestEventListeners(); + + // Appends an event listener to the end of the list. Google Test assumes + // the ownership of the listener (i.e. it will delete the listener when + // the test program finishes). + void Append(TestEventListener* listener); + + // Removes the given event listener from the list and returns it. It then + // becomes the caller's responsibility to delete the listener. Returns + // NULL if the listener is not found in the list. + TestEventListener* Release(TestEventListener* listener); + + // Returns the standard listener responsible for the default console + // output. Can be removed from the listeners list to shut down default + // console output. Note that removing this object from the listener list + // with Release transfers its ownership to the caller and makes this + // function return NULL the next time. + TestEventListener* default_result_printer() const { + return default_result_printer_; + } + + // Returns the standard listener responsible for the default XML output + // controlled by the --gtest_output=xml flag. Can be removed from the + // listeners list by users who want to shut down the default XML output + // controlled by this flag and substitute it with custom one. Note that + // removing this object from the listener list with Release transfers its + // ownership to the caller and makes this function return NULL the next + // time. + TestEventListener* default_xml_generator() const { + return default_xml_generator_; + } + + private: + friend class TestCase; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::NoExecDeathTest; + friend class internal::TestEventListenersAccessor; + friend class internal::TestInfoImpl; + friend class internal::UnitTestImpl; + + // Returns repeater that broadcasts the TestEventListener events to all + // subscribers. + TestEventListener* repeater(); + + // Sets the default_result_printer attribute to the provided listener. + // The listener is also added to the listener list and previous + // default_result_printer is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultResultPrinter(TestEventListener* listener); + + // Sets the default_xml_generator attribute to the provided listener. The + // listener is also added to the listener list and previous + // default_xml_generator is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultXmlGenerator(TestEventListener* listener); + + // Controls whether events will be forwarded by the repeater to the + // listeners in the list. + bool EventForwardingEnabled() const; + void SuppressEventForwarding(); + + // The actual list of listeners. + internal::TestEventRepeater* repeater_; + // Listener responsible for the standard result output. + TestEventListener* default_result_printer_; + // Listener responsible for the creation of the XML output file. + TestEventListener* default_xml_generator_; + + // We disallow copying TestEventListeners. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); +}; + +// A UnitTest consists of a vector of TestCases. +// +// This is a singleton class. The only instance of UnitTest is +// created when UnitTest::GetInstance() is first called. This +// instance is never deleted. +// +// UnitTest is not copyable. +// +// This class is thread-safe as long as the methods are called +// according to their specification. +class GTEST_API_ UnitTest { + public: + // Gets the singleton UnitTest object. The first time this method + // is called, a UnitTest object is constructed and returned. + // Consecutive calls will return the same object. + static UnitTest* GetInstance(); + + // Runs all tests in this UnitTest object and prints the result. + // Returns 0 if successful, or 1 otherwise. + // + // This method can only be called from the main thread. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + int Run() GTEST_MUST_USE_RESULT_; + + // Returns the working directory when the first TEST() or TEST_F() + // was executed. The UnitTest object owns the string. + const char* original_working_dir() const; + + // Returns the TestCase object for the test that's currently running, + // or NULL if no test is running. + const TestCase* current_test_case() const; + + // Returns the TestInfo object for the test that's currently running, + // or NULL if no test is running. + const TestInfo* current_test_info() const; + + // Returns the random seed used at the start of the current test run. + int random_seed() const; + +#if GTEST_HAS_PARAM_TEST + // Returns the ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); +#endif // GTEST_HAS_PARAM_TEST + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const; + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const; + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const; + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const; + + // Returns the list of event listeners that can be used to track events + // inside Google Test. + TestEventListeners& listeners(); + + private: + // Registers and returns a global test environment. When a test + // program is run, all global test environments will be set-up in + // the order they were registered. After all tests in the program + // have finished, all global test environments will be torn-down in + // the *reverse* order they were registered. + // + // The UnitTest object takes ownership of the given environment. + // + // This method can only be called from the main thread. + Environment* AddEnvironment(Environment* env); + + // Adds a TestPartResult to the current TestResult object. All + // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) + // eventually call this to report their results. The user code + // should use the assertion macros instead of calling this directly. + void AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, + int line_number, + const internal::String& message, + const internal::String& os_stack_trace); + + // Adds a TestProperty to the current TestResult object. If the result already + // contains a property with the same key, the value will be updated. + void RecordPropertyForCurrentTest(const char* key, const char* value); + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i); + + // Accessors for the implementation object. + internal::UnitTestImpl* impl() { return impl_; } + const internal::UnitTestImpl* impl() const { return impl_; } + + // These classes and funcions are friends as they need to access private + // members of UnitTest. + friend class Test; + friend class internal::AssertHelper; + friend class internal::ScopedTrace; + friend Environment* AddGlobalTestEnvironment(Environment* env); + friend internal::UnitTestImpl* internal::GetUnitTestImpl(); + friend void internal::ReportFailureInUnknownLocation( + TestPartResult::Type result_type, + const internal::String& message); + + // Creates an empty UnitTest. + UnitTest(); + + // D'tor + virtual ~UnitTest(); + + // Pushes a trace defined by SCOPED_TRACE() on to the per-thread + // Google Test trace stack. + void PushGTestTrace(const internal::TraceInfo& trace); + + // Pops a trace from the per-thread Google Test trace stack. + void PopGTestTrace(); + + // Protects mutable state in *impl_. This is mutable as some const + // methods need to lock it too. + mutable internal::Mutex mutex_; + + // Opaque implementation object. This field is never changed once + // the object is constructed. We don't mark it as const here, as + // doing so will cause a warning in the constructor of UnitTest. + // Mutable state in *impl_ is protected by mutex_. + internal::UnitTestImpl* impl_; + + // We disallow copying UnitTest. + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); +}; + +// A convenient wrapper for adding an environment for the test +// program. +// +// You should call this before RUN_ALL_TESTS() is called, probably in +// main(). If you use gtest_main, you need to call this before main() +// starts for it to take effect. For example, you can define a global +// variable like this: +// +// testing::Environment* const foo_env = +// testing::AddGlobalTestEnvironment(new FooEnvironment); +// +// However, we strongly recommend you to write your own main() and +// call AddGlobalTestEnvironment() there, as relying on initialization +// of global variables makes the code harder to read and may cause +// problems when you register multiple environments from different +// translation units and the environments have dependencies among them +// (remember that the compiler doesn't guarantee the order in which +// global variables from different translation units are initialized). +inline Environment* AddGlobalTestEnvironment(Environment* env) { + return UnitTest::GetInstance()->AddEnvironment(env); +} + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +GTEST_API_ void InitGoogleTest(int* argc, char** argv); + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); + +namespace internal { + +// These overloaded versions handle ::std::string and ::std::wstring. +GTEST_API_ inline String FormatForFailureMessage(const ::std::string& str) { + return (Message() << '"' << str << '"').GetString(); +} + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ inline String FormatForFailureMessage(const ::std::wstring& wstr) { + return (Message() << "L\"" << wstr << '"').GetString(); +} +#endif // GTEST_HAS_STD_WSTRING + +// These overloaded versions handle ::string and ::wstring. +#if GTEST_HAS_GLOBAL_STRING +GTEST_API_ inline String FormatForFailureMessage(const ::string& str) { + return (Message() << '"' << str << '"').GetString(); +} +#endif // GTEST_HAS_GLOBAL_STRING + +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_API_ inline String FormatForFailureMessage(const ::wstring& wstr) { + return (Message() << "L\"" << wstr << '"').GetString(); +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) +// operand to be used in a failure message. The type (but not value) +// of the other operand may affect the format. This allows us to +// print a char* as a raw pointer when it is compared against another +// char*, and print it as a C string when it is compared against an +// std::string object, for example. +// +// The default implementation ignores the type of the other operand. +// Some specialized versions are used to handle formatting wide or +// narrow C strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +String FormatForComparisonFailureMessage(const T1& value, + const T2& /* other_operand */) { + return FormatForFailureMessage(value); +} + +// The helper function for {ASSERT|EXPECT}_EQ. +template +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { +#ifdef _MSC_VER +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4389) // Temporarily disables warning on + // signed/unsigned mismatch. +#endif + + if (expected == actual) { + return AssertionSuccess(); + } + +#ifdef _MSC_VER +#pragma warning(pop) // Restores the warning state. +#endif + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// With this overloaded version, we allow anonymous enums to be used +// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums +// can be implicitly cast to BiggestInt. +GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual); + +// The helper class for {ASSERT|EXPECT}_EQ. The template argument +// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() +// is a null pointer literal. The following default implementation is +// for lhs_is_null_literal being false. +template +class EqHelper { + public: + // This templatized version is for the general case. + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // With this overloaded version, we allow anonymous enums to be used + // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous + // enums can be implicitly cast to BiggestInt. + // + // Even though its body looks the same as the above version, we + // cannot merge the two, as it will make anonymous enums unhappy. + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } +}; + +// This specialization is used when the first argument to ASSERT_EQ() +// is a null pointer literal. +template <> +class EqHelper { + public: + // We define two overloaded versions of Compare(). The first + // version will be picked when the second argument to ASSERT_EQ() is + // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or + // EXPECT_EQ(false, a_bool). + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // This version will be picked when the second argument to + // ASSERT_EQ() is a pointer, e.g. ASSERT_EQ(NULL, a_pointer). + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& /* expected */, + T2* actual) { + // We already know that 'expected' is a null pointer. + return CmpHelperEQ(expected_expression, actual_expression, + static_cast(NULL), actual); + } +}; + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste +// of similar code. +// +// For each templatized helper function, we also define an overloaded +// version for BiggestInt in order to reduce code bloat and allow +// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled +// with gcc 4. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +template \ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + const T1& val1, const T2& val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + Message msg;\ + msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + return AssertionFailure(msg);\ + }\ +}\ +GTEST_API_ AssertionResult CmpHelper##op_name(\ + const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) + +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + +// Implements the helper function for {ASSERT|EXPECT}_NE +GTEST_IMPL_CMP_HELPER_(NE, !=); +// Implements the helper function for {ASSERT|EXPECT}_LE +GTEST_IMPL_CMP_HELPER_(LE, <=); +// Implements the helper function for {ASSERT|EXPECT}_LT +GTEST_IMPL_CMP_HELPER_(LT, < ); +// Implements the helper function for {ASSERT|EXPECT}_GE +GTEST_IMPL_CMP_HELPER_(GE, >=); +// Implements the helper function for {ASSERT|EXPECT}_GT +GTEST_IMPL_CMP_HELPER_(GT, > ); + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRNE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + + +// Helper function for *_STREQ on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual); + +// Helper function for *_STRNE on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2); + +} // namespace internal + +// IsSubstring() and IsNotSubstring() are intended to be used as the +// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by +// themselves. They check whether needle is a substring of haystack +// (NULL is considered a substring of itself only), and return an +// appropriate error message when they fail. +// +// The {needle,haystack}_expr arguments are the stringified +// expressions that generated the two real arguments. +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +// Helper template function for comparing floating-points. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, + const char* actual_expression, + RawType expected, + RawType actual) { + const FloatingPoint lhs(expected), rhs(actual); + + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + StrStream expected_ss; + expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << expected; + + StrStream actual_ss; + actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << actual; + + return EqFailure(expected_expression, + actual_expression, + StrStreamToString(&expected_ss), + StrStreamToString(&actual_ss), + false); +} + +// Helper function for implementing ASSERT_NEAR. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error); + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// A class that enables one to stream messages to assertion macros +class GTEST_API_ AssertHelper { + public: + // Constructor. + AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message); + ~AssertHelper(); + + // Message assignment is a semantic trick to enable assertion + // streaming; see the GTEST_MESSAGE_ macro below. + void operator=(const Message& message) const; + + private: + // We put our data in a struct so that the size of the AssertHelper class can + // be as small as possible. This is important because gcc is incapable of + // re-using stack space even for temporary variables, so every EXPECT_EQ + // reserves stack space for another AssertHelper. + struct AssertHelperData { + AssertHelperData(TestPartResult::Type t, + const char* srcfile, + int line_num, + const char* msg) + : type(t), file(srcfile), line(line_num), message(msg) { } + + TestPartResult::Type const type; + const char* const file; + int const line; + String const message; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); + }; + + AssertHelperData* const data_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); +}; + +} // namespace internal + +#if GTEST_HAS_PARAM_TEST +// The abstract base class that all value-parameterized tests inherit from. +// +// This class adds support for accessing the test parameter value via +// the GetParam() method. +// +// Use it with one of the parameter generator defining functions, like Range(), +// Values(), ValuesIn(), Bool(), and Combine(). +// +// class FooTest : public ::testing::TestWithParam { +// protected: +// FooTest() { +// // Can use GetParam() here. +// } +// virtual ~FooTest() { +// // Can use GetParam() here. +// } +// virtual void SetUp() { +// // Can use GetParam() here. +// } +// virtual void TearDown { +// // Can use GetParam() here. +// } +// }; +// TEST_P(FooTest, DoesBar) { +// // Can use GetParam() method here. +// Foo foo; +// ASSERT_TRUE(foo.DoesBar(GetParam())); +// } +// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); + +template +class TestWithParam : public Test { + public: + typedef T ParamType; + + // The current parameter value. Is also available in the test fixture's + // constructor. + const ParamType& GetParam() const { return *parameter_; } + + private: + // Sets parameter value. The caller is responsible for making sure the value + // remains alive and unchanged throughout the current test. + static void SetParam(const ParamType* parameter) { + parameter_ = parameter; + } + + // Static value used for accessing parameter during a test lifetime. + static const ParamType* parameter_; + + // TestClass must be a subclass of TestWithParam. + template friend class internal::ParameterizedTestFactory; +}; + +template +const T* TestWithParam::parameter_ = NULL; + +#endif // GTEST_HAS_PARAM_TEST + +// Macros for indicating success/failure in test code. + +// ADD_FAILURE unconditionally adds a failure to the current test. +// SUCCEED generates a success - it doesn't automatically make the +// current test successful, as a test is only successful when it has +// no failure. +// +// EXPECT_* verifies that a certain condition is satisfied. If not, +// it behaves like ADD_FAILURE. In particular: +// +// EXPECT_TRUE verifies that a Boolean condition is true. +// EXPECT_FALSE verifies that a Boolean condition is false. +// +// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except +// that they will also abort the current function on failure. People +// usually want the fail-fast behavior of FAIL and ASSERT_*, but those +// writing data-driven tests often find themselves using ADD_FAILURE +// and EXPECT_* more. +// +// Examples: +// +// EXPECT_TRUE(server.StatusIsOK()); +// ASSERT_FALSE(server.HasPendingRequest(port)) +// << "There are still pending requests " << "on port " << port; + +// Generates a nonfatal failure with a generic message. +#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") + +// Generates a fatal failure with a generic message. +#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") + +// Define this macro to 1 to omit the definition of FAIL(), which is a +// generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_FAIL +#define FAIL() GTEST_FAIL() +#endif + +// Generates a success with a generic message. +#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") + +// Define this macro to 1 to omit the definition of SUCCEED(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_SUCCEED +#define SUCCEED() GTEST_SUCCEED() +#endif + +// Macros for testing exceptions. +// +// * {ASSERT|EXPECT}_THROW(statement, expected_exception): +// Tests that the statement throws the expected exception. +// * {ASSERT|EXPECT}_NO_THROW(statement): +// Tests that the statement doesn't throw any exception. +// * {ASSERT|EXPECT}_ANY_THROW(statement): +// Tests that the statement throws an exception. + +#define EXPECT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) +#define EXPECT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define EXPECT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define ASSERT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) +#define ASSERT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) +#define ASSERT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) + +// Boolean assertions. Condition can be either a Boolean expression or an +// AssertionResult. For more information on how to use AssertionResult with +// these macros see comments on that class. +#define EXPECT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_NONFATAL_FAILURE_) +#define EXPECT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_NONFATAL_FAILURE_) +#define ASSERT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_FATAL_FAILURE_) +#define ASSERT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_FATAL_FAILURE_) + +// Includes the auto-generated header that implements a family of +// generic predicate assertion macros. +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on 10/02/2008 by command +// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! +// +// Implements a family of generic predicate assertion macros. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Makes sure this header is not included before gtest.h. +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#error Do not include gtest_pred_impl.h directly. Include gtest.h instead. +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ + +// This header implements a family of generic predicate assertion +// macros: +// +// ASSERT_PRED_FORMAT1(pred_format, v1) +// ASSERT_PRED_FORMAT2(pred_format, v1, v2) +// ... +// +// where pred_format is a function or functor that takes n (in the +// case of ASSERT_PRED_FORMATn) values and their source expression +// text, and returns a testing::AssertionResult. See the definition +// of ASSERT_EQ in gtest.h for an example. +// +// If you don't care about formatting, you can use the more +// restrictive version: +// +// ASSERT_PRED1(pred, v1) +// ASSERT_PRED2(pred, v1, v2) +// ... +// +// where pred is an n-ary function or functor that returns bool, +// and the values v1, v2, ..., must support the << operator for +// streaming to std::ostream. +// +// We also define the EXPECT_* variations. +// +// For now we only support predicates whose arity is at most 5. +// Please email googletestframework@googlegroups.com if you need +// support for higher arities. + +// GTEST_ASSERT_ is the basic statement to which all of the assertions +// in this file reduce. Don't use this in your code. + +#define GTEST_ASSERT_(expression, on_failure) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar = (expression)) \ + ; \ + else \ + on_failure(gtest_ar.failure_message()) + + +// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +template +AssertionResult AssertPred1Helper(const char* pred_text, + const char* e1, + Pred pred, + const T1& v1) { + if (pred(v1)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. +// Don't use this in your code. +#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, v1),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +#define GTEST_PRED1_(pred, v1, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ + #v1, \ + pred, \ + v1), on_failure) + +// Unary predicate assertion macros. +#define EXPECT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +template +AssertionResult AssertPred2Helper(const char* pred_text, + const char* e1, + const char* e2, + Pred pred, + const T1& v1, + const T2& v2) { + if (pred(v1, v2)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. +// Don't use this in your code. +#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +#define GTEST_PRED2_(pred, v1, v2, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ + #v1, \ + #v2, \ + pred, \ + v1, \ + v2), on_failure) + +// Binary predicate assertion macros. +#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +template +AssertionResult AssertPred3Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3) { + if (pred(v1, v2, v3)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. +// Don't use this in your code. +#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + pred, \ + v1, \ + v2, \ + v3), on_failure) + +// Ternary predicate assertion macros. +#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +template +AssertionResult AssertPred4Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) { + if (pred(v1, v2, v3, v4)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. +// Don't use this in your code. +#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4), on_failure) + +// 4-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +template +AssertionResult AssertPred5Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + const char* e5, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) { + if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ", " + << e5 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4 + << "\n" << e5 << " evaluates to " << v5; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. +// Don't use this in your code. +#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + #v5, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4, \ + v5), on_failure) + +// 5-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) + + + +#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Macros for testing equalities and inequalities. +// +// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual +// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 +// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 +// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 +// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 +// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 +// +// When they are not, Google Test prints both the tested expressions and +// their actual values. The values must be compatible built-in types, +// or you will get a compiler error. By "compatible" we mean that the +// values can be compared by the respective operator. +// +// Note: +// +// 1. It is possible to make a user-defined type work with +// {ASSERT|EXPECT}_??(), but that requires overloading the +// comparison operators and is thus discouraged by the Google C++ +// Usage Guide. Therefore, you are advised to use the +// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are +// equal. +// +// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on +// pointers (in particular, C strings). Therefore, if you use it +// with two C strings, you are testing how their locations in memory +// are related, not how their content is related. To compare two C +// strings by content, use {ASSERT|EXPECT}_STR*(). +// +// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to +// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you +// what the actual value is when it fails, and similarly for the +// other comparisons. +// +// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() +// evaluate their arguments, which is undefined. +// +// 5. These macros evaluate their arguments exactly once. +// +// Examples: +// +// EXPECT_NE(5, Foo()); +// EXPECT_EQ(NULL, a_pointer); +// ASSERT_LT(i, array_size); +// ASSERT_GT(records.size(), 0) << "There is no record left."; + +#define EXPECT_EQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define EXPECT_NE(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) +#define EXPECT_LE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define EXPECT_LT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define EXPECT_GE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define EXPECT_GT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +#define ASSERT_EQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define ASSERT_NE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) +#define ASSERT_LE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define ASSERT_LT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define ASSERT_GE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define ASSERT_GT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +// C String Comparisons. All tests treat NULL and any non-NULL string +// as different. Two NULLs are equal. +// +// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 +// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 +// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case +// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case +// +// For wide or narrow string objects, you can use the +// {ASSERT|EXPECT}_??() macros. +// +// Don't depend on the order in which the arguments are evaluated, +// which is undefined. +// +// These macros evaluate their arguments exactly once. + +#define EXPECT_STREQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define EXPECT_STRNE(s1, s2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define EXPECT_STRCASEEQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define EXPECT_STRCASENE(s1, s2)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +#define ASSERT_STREQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define ASSERT_STRNE(s1, s2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define ASSERT_STRCASEEQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define ASSERT_STRCASENE(s1, s2)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +// Macros for comparing floating-point numbers. +// +// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): +// Tests that two float values are almost equal. +// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): +// Tests that two double values are almost equal. +// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): +// Tests that v1 and v2 are within the given distance to each other. +// +// Google Test uses ULP-based comparison to automatically pick a default +// error bound that is appropriate for the operands. See the +// FloatingPoint template class in gtest-internal.h if you are +// interested in the implementation details. + +#define EXPECT_FLOAT_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_DOUBLE_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_FLOAT_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_DOUBLE_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_NEAR(val1, val2, abs_error)\ + EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +#define ASSERT_NEAR(val1, val2, abs_error)\ + ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +// These predicate format functions work on floating-point values, and +// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. +// +// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2); +GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2); + + +#if GTEST_OS_WINDOWS + +// Macros that test for HRESULT failure and success, these are only useful +// on Windows, and rely on Windows SDK macros and APIs to compile. +// +// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) +// +// When expr unexpectedly fails or succeeds, Google Test prints the +// expected result and the actual result with both a human-readable +// string representation of the error, if available, as well as the +// hex result code. +#define EXPECT_HRESULT_SUCCEEDED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +#define ASSERT_HRESULT_SUCCEEDED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +#define EXPECT_HRESULT_FAILED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +#define ASSERT_HRESULT_FAILED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +#endif // GTEST_OS_WINDOWS + +// Macros that execute statement and check that it doesn't generate new fatal +// failures in the current thread. +// +// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); +// +// Examples: +// +// EXPECT_NO_FATAL_FAILURE(Process()); +// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; +// +#define ASSERT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) +#define EXPECT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) + +// Causes a trace (including the source file path, the current line +// number, and the given message) to be included in every test failure +// message generated by code in the current scope. The effect is +// undone when the control leaves the current scope. +// +// The message argument can be anything streamable to std::ostream. +// +// In the implementation, we include the current line number as part +// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s +// to appear in the same block - as long as they are on different +// lines. +#define SCOPED_TRACE(message) \ + ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ + __FILE__, __LINE__, ::testing::Message() << (message)) + +namespace internal { + +// This template is declared, but intentionally undefined. +template +struct StaticAssertTypeEqHelper; + +template +struct StaticAssertTypeEqHelper {}; + +} // namespace internal + +// Compile-time assertion for type equality. +// StaticAssertTypeEq() compiles iff type1 and type2 are +// the same type. The value it returns is not interesting. +// +// Instead of making StaticAssertTypeEq a class template, we make it a +// function template that invokes a helper class template. This +// prevents a user from misusing StaticAssertTypeEq by +// defining objects of that type. +// +// CAVEAT: +// +// When used inside a method of a class template, +// StaticAssertTypeEq() is effective ONLY IF the method is +// instantiated. For example, given: +// +// template class Foo { +// public: +// void Bar() { testing::StaticAssertTypeEq(); } +// }; +// +// the code: +// +// void Test1() { Foo foo; } +// +// will NOT generate a compiler error, as Foo::Bar() is never +// actually instantiated. Instead, you need: +// +// void Test2() { Foo foo; foo.Bar(); } +// +// to cause a compiler error. +template +bool StaticAssertTypeEq() { + internal::StaticAssertTypeEqHelper(); + return true; +} + +// Defines a test. +// +// The first parameter is the name of the test case, and the second +// parameter is the name of the test within the test case. +// +// The convention is to end the test case name with "Test". For +// example, a test case for the Foo class can be named FooTest. +// +// The user should put his test code between braces after using this +// macro. Example: +// +// TEST(FooTest, InitializesCorrectly) { +// Foo foo; +// EXPECT_TRUE(foo.StatusIsOK()); +// } + +// Note that we call GetTestTypeId() instead of GetTypeId< +// ::testing::Test>() here to get the type ID of testing::Test. This +// is to work around a suspected linker bug when using Google Test as +// a framework on Mac OS X. The bug causes GetTypeId< +// ::testing::Test>() to return different values depending on whether +// the call is from the Google Test framework itself or from user test +// code. GetTestTypeId() is guaranteed to always return the same +// value, as it always calls GetTypeId<>() from the Google Test +// framework. +#define GTEST_TEST(test_case_name, test_name)\ + GTEST_TEST_(test_case_name, test_name, \ + ::testing::Test, ::testing::internal::GetTestTypeId()) + +// Define this macro to 1 to omit the definition of TEST(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_TEST +#define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) +#endif + +// Defines a test that uses a test fixture. +// +// The first parameter is the name of the test fixture class, which +// also doubles as the test case name. The second parameter is the +// name of the test within the test case. +// +// A test fixture class must be declared earlier. The user should put +// his test code between braces after using this macro. Example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { b_.AddElement(3); } +// +// Foo a_; +// Foo b_; +// }; +// +// TEST_F(FooTest, InitializesCorrectly) { +// EXPECT_TRUE(a_.StatusIsOK()); +// } +// +// TEST_F(FooTest, ReturnsElementCountCorrectly) { +// EXPECT_EQ(0, a_.size()); +// EXPECT_EQ(1, b_.size()); +// } + +#define TEST_F(test_fixture, test_name)\ + GTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId()) + +// Use this macro in main() to run all tests. It returns 0 if all +// tests are successful, or 1 otherwise. +// +// RUN_ALL_TESTS() should be invoked after the command line has been +// parsed by InitGoogleTest(). + +#define RUN_ALL_TESTS()\ + (::testing::UnitTest::GetInstance()->Run()) + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest_main.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest_main.cc new file mode 100644 index 00000000..d20c02fd --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/fused-src/gtest/gtest_main.cc @@ -0,0 +1,39 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +#include + +int main(int argc, char **argv) { + std::cout << "Running main() from gtest_main.cc\n"; + + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-death-test.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-death-test.h new file mode 100644 index 00000000..121dc1fb --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-death-test.h @@ -0,0 +1,283 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for death tests. It is +// #included by gtest.h so a user doesn't need to include this +// directly. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ + +#include + +namespace testing { + +// This flag controls the style of death tests. Valid values are "threadsafe", +// meaning that the death test child process will re-execute the test binary +// from the start, running only a single death test, or "fast", +// meaning that the child process will execute the test logic immediately +// after forking. +GTEST_DECLARE_string_(death_test_style); + +#if GTEST_HAS_DEATH_TEST + +// The following macros are useful for writing death tests. + +// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is +// executed: +// +// 1. It generates a warning if there is more than one active +// thread. This is because it's safe to fork() or clone() only +// when there is a single thread. +// +// 2. The parent process clone()s a sub-process and runs the death +// test in it; the sub-process exits with code 0 at the end of the +// death test, if it hasn't exited already. +// +// 3. The parent process waits for the sub-process to terminate. +// +// 4. The parent process checks the exit code and error message of +// the sub-process. +// +// Examples: +// +// ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); +// for (int i = 0; i < 5; i++) { +// EXPECT_DEATH(server.ProcessRequest(i), +// "Invalid request .* in ProcessRequest()") +// << "Failed to die on request " << i); +// } +// +// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); +// +// bool KilledBySIGHUP(int exit_code) { +// return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; +// } +// +// ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); +// +// On the regular expressions used in death tests: +// +// On POSIX-compliant systems (*nix), we use the library, +// which uses the POSIX extended regex syntax. +// +// On other platforms (e.g. Windows), we only support a simple regex +// syntax implemented as part of Google Test. This limited +// implementation should be enough most of the time when writing +// death tests; though it lacks many features you can find in PCRE +// or POSIX extended regex syntax. For example, we don't support +// union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and +// repetition count ("x{5,7}"), among others. +// +// Below is the syntax that we do support. We chose it to be a +// subset of both PCRE and POSIX extended regex, so it's easy to +// learn wherever you come from. In the following: 'A' denotes a +// literal character, period (.), or a single \\ escape sequence; +// 'x' and 'y' denote regular expressions; 'm' and 'n' are for +// natural numbers. +// +// c matches any literal character c +// \\d matches any decimal digit +// \\D matches any character that's not a decimal digit +// \\f matches \f +// \\n matches \n +// \\r matches \r +// \\s matches any ASCII whitespace, including \n +// \\S matches any character that's not a whitespace +// \\t matches \t +// \\v matches \v +// \\w matches any letter, _, or decimal digit +// \\W matches any character that \\w doesn't match +// \\c matches any literal character c, which must be a punctuation +// . matches any single character except \n +// A? matches 0 or 1 occurrences of A +// A* matches 0 or many occurrences of A +// A+ matches 1 or many occurrences of A +// ^ matches the beginning of a string (not that of each line) +// $ matches the end of a string (not that of each line) +// xy matches x followed by y +// +// If you accidentally use PCRE or POSIX extended regex features +// not implemented by us, you will get a run-time failure. In that +// case, please try to rewrite your regular expression within the +// above syntax. +// +// This implementation is *not* meant to be as highly tuned or robust +// as a compiled regex library, but should perform well enough for a +// death test, which already incurs significant overhead by launching +// a child process. +// +// Known caveats: +// +// A "threadsafe" style death test obtains the path to the test +// program from argv[0] and re-executes it in the sub-process. For +// simplicity, the current implementation doesn't search the PATH +// when launching the sub-process. This means that the user must +// invoke the test program via a path that contains at least one +// path separator (e.g. path/to/foo_test and +// /absolute/path/to/bar_test are fine, but foo_test is not). This +// is rarely a problem as people usually don't put the test binary +// directory in PATH. +// +// TODO(wan@google.com): make thread-safe death tests search the PATH. + +// Asserts that a given statement causes the program to exit, with an +// integer exit status that satisfies predicate, and emitting error output +// that matches regex. +#define ASSERT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) + +// Like ASSERT_EXIT, but continues on to successive tests in the +// test case, if any: +#define EXPECT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) + +// Asserts that a given statement causes the program to exit, either by +// explicitly exiting with a nonzero exit code or being killed by a +// signal, and emitting error output that matches regex. +#define ASSERT_DEATH(statement, regex) \ + ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Like ASSERT_DEATH, but continues on to successive tests in the +// test case, if any: +#define EXPECT_DEATH(statement, regex) \ + EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: + +// Tests that an exit code describes a normal exit with a given exit code. +class GTEST_API_ ExitedWithCode { + public: + explicit ExitedWithCode(int exit_code); + bool operator()(int exit_status) const; + private: + // No implementation - assignment is unsupported. + void operator=(const ExitedWithCode& other); + + const int exit_code_; +}; + +#if !GTEST_OS_WINDOWS +// Tests that an exit code describes an exit due to termination by a +// given signal. +class GTEST_API_ KilledBySignal { + public: + explicit KilledBySignal(int signum); + bool operator()(int exit_status) const; + private: + const int signum_; +}; +#endif // !GTEST_OS_WINDOWS + +// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. +// The death testing framework causes this to have interesting semantics, +// since the sideeffects of the call are only visible in opt mode, and not +// in debug mode. +// +// In practice, this can be used to test functions that utilize the +// LOG(DFATAL) macro using the following style: +// +// int DieInDebugOr12(int* sideeffect) { +// if (sideeffect) { +// *sideeffect = 12; +// } +// LOG(DFATAL) << "death"; +// return 12; +// } +// +// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { +// int sideeffect = 0; +// // Only asserts in dbg. +// EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); +// +// #ifdef NDEBUG +// // opt-mode has sideeffect visible. +// EXPECT_EQ(12, sideeffect); +// #else +// // dbg-mode no visible sideeffect. +// EXPECT_EQ(0, sideeffect); +// #endif +// } +// +// This will assert that DieInDebugReturn12InOpt() crashes in debug +// mode, usually due to a DCHECK or LOG(DFATAL), but returns the +// appropriate fallback value (12 in this case) in opt mode. If you +// need to test that a function has appropriate side-effects in opt +// mode, include assertions against the side-effects. A general +// pattern for this is: +// +// EXPECT_DEBUG_DEATH({ +// // Side-effects here will have an effect after this statement in +// // opt mode, but none in debug mode. +// EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); +// }, "death"); +// +#ifdef NDEBUG + +#define EXPECT_DEBUG_DEATH(statement, regex) \ + do { statement; } while (::testing::internal::AlwaysFalse()) + +#define ASSERT_DEBUG_DEATH(statement, regex) \ + do { statement; } while (::testing::internal::AlwaysFalse()) + +#else + +#define EXPECT_DEBUG_DEATH(statement, regex) \ + EXPECT_DEATH(statement, regex) + +#define ASSERT_DEBUG_DEATH(statement, regex) \ + ASSERT_DEATH(statement, regex) + +#endif // NDEBUG for EXPECT_DEBUG_DEATH +#endif // GTEST_HAS_DEATH_TEST + +// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and +// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if +// death tests are supported; otherwise they just issue a warning. This is +// useful when you are combining death test assertions with normal test +// assertions in one test. +#if GTEST_HAS_DEATH_TEST +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + EXPECT_DEATH(statement, regex) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + ASSERT_DEATH(statement, regex) +#else +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) +#endif + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-message.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-message.h new file mode 100644 index 00000000..f135b694 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-message.h @@ -0,0 +1,230 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the Message class. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! + +#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ + +#include + +#include +#include + +namespace testing { + +// The Message class works like an ostream repeater. +// +// Typical usage: +// +// 1. You stream a bunch of values to a Message object. +// It will remember the text in a StrStream. +// 2. Then you stream the Message object to an ostream. +// This causes the text in the Message to be streamed +// to the ostream. +// +// For example; +// +// testing::Message foo; +// foo << 1 << " != " << 2; +// std::cout << foo; +// +// will print "1 != 2". +// +// Message is not intended to be inherited from. In particular, its +// destructor is not virtual. +// +// Note that StrStream behaves differently in gcc and in MSVC. You +// can stream a NULL char pointer to it in the former, but not in the +// latter (it causes an access violation if you do). The Message +// class hides this difference by treating a NULL char pointer as +// "(null)". +class GTEST_API_ Message { + private: + // The type of basic IO manipulators (endl, ends, and flush) for + // narrow streams. + typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); + + public: + // Constructs an empty Message. + // We allocate the StrStream separately because it otherwise each use of + // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's + // stack frame leading to huge stack frames in some cases; gcc does not reuse + // the stack space. + Message() : ss_(new internal::StrStream) { + // By default, we want there to be enough precision when printing + // a double to a Message. + *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); + } + + // Copy constructor. + Message(const Message& msg) : ss_(new internal::StrStream) { // NOLINT + *ss_ << msg.GetString(); + } + + // Constructs a Message from a C-string. + explicit Message(const char* str) : ss_(new internal::StrStream) { + *ss_ << str; + } + + ~Message() { delete ss_; } +#if GTEST_OS_SYMBIAN + // Streams a value (either a pointer or not) to this object. + template + inline Message& operator <<(const T& value) { + StreamHelper(typename internal::is_pointer::type(), value); + return *this; + } +#else + // Streams a non-pointer value to this object. + template + inline Message& operator <<(const T& val) { + ::GTestStreamToHelper(ss_, val); + return *this; + } + + // Streams a pointer value to this object. + // + // This function is an overload of the previous one. When you + // stream a pointer to a Message, this definition will be used as it + // is more specialized. (The C++ Standard, section + // [temp.func.order].) If you stream a non-pointer, then the + // previous definition will be used. + // + // The reason for this overload is that streaming a NULL pointer to + // ostream is undefined behavior. Depending on the compiler, you + // may get "0", "(nil)", "(null)", or an access violation. To + // ensure consistent result across compilers, we always treat NULL + // as "(null)". + template + inline Message& operator <<(T* const& pointer) { // NOLINT + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + ::GTestStreamToHelper(ss_, pointer); + } + return *this; + } +#endif // GTEST_OS_SYMBIAN + + // Since the basic IO manipulators are overloaded for both narrow + // and wide streams, we have to provide this specialized definition + // of operator <<, even though its body is the same as the + // templatized version above. Without this definition, streaming + // endl or other basic IO manipulators to Message will confuse the + // compiler. + Message& operator <<(BasicNarrowIoManip val) { + *ss_ << val; + return *this; + } + + // Instead of 1/0, we want to see true/false for bool values. + Message& operator <<(bool b) { + return *this << (b ? "true" : "false"); + } + + // These two overloads allow streaming a wide C string to a Message + // using the UTF-8 encoding. + Message& operator <<(const wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); + } + Message& operator <<(wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); + } + +#if GTEST_HAS_STD_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::std::wstring& wstr); +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::wstring& wstr); +#endif // GTEST_HAS_GLOBAL_WSTRING + + // Gets the text streamed to this object so far as a String. + // Each '\0' character in the buffer is replaced with "\\0". + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + internal::String GetString() const { + return internal::StrStreamToString(ss_); + } + + private: +#if GTEST_OS_SYMBIAN + // These are needed as the Nokia Symbian Compiler cannot decide between + // const T& and const T* in a function template. The Nokia compiler _can_ + // decide between class template specializations for T and T*, so a + // tr1::type_traits-like is_pointer works, and we can overload on that. + template + inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) { + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + ::GTestStreamToHelper(ss_, pointer); + } + } + template + inline void StreamHelper(internal::false_type /*dummy*/, const T& value) { + ::GTestStreamToHelper(ss_, value); + } +#endif // GTEST_OS_SYMBIAN + + // We'll hold the text streamed to this object here. + internal::StrStream* const ss_; + + // We declare (but don't implement) this to prevent the compiler + // from implementing the assignment operator. + void operator=(const Message&); +}; + +// Streams a Message to an ostream. +inline std::ostream& operator <<(std::ostream& os, const Message& sb) { + return os << sb.GetString(); +} + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h new file mode 100644 index 00000000..81006964 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h @@ -0,0 +1,1392 @@ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev) +// +// Macros and functions for implementing parameterized tests +// in Google C++ Testing Framework (Google Test) +// +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ + + +// Value-parameterized tests allow you to test your code with different +// parameters without writing multiple copies of the same test. +// +// Here is how you use value-parameterized tests: + +#if 0 + +// To write value-parameterized tests, first you should define a fixture +// class. It must be derived from testing::TestWithParam, where T is +// the type of your parameter values. TestWithParam is itself derived +// from testing::Test. T can be any copyable type. If it's a raw pointer, +// you are responsible for managing the lifespan of the pointed values. + +class FooTest : public ::testing::TestWithParam { + // You can implement all the usual class fixture members here. +}; + +// Then, use the TEST_P macro to define as many parameterized tests +// for this fixture as you want. The _P suffix is for "parameterized" +// or "pattern", whichever you prefer to think. + +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} + +// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test +// case with any set of parameters you want. Google Test defines a number +// of functions for generating test parameters. They return what we call +// (surprise!) parameter generators. Here is a summary of them, which +// are all in the testing namespace: +// +// +// Range(begin, end [, step]) - Yields values {begin, begin+step, +// begin+step+step, ...}. The values do not +// include end. step defaults to 1. +// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. +// ValuesIn(container) - Yields values from a C-style array, an STL +// ValuesIn(begin,end) container, or an iterator range [begin, end). +// Bool() - Yields sequence {false, true}. +// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product +// for the math savvy) of the values generated +// by the N generators. +// +// For more details, see comments at the definitions of these functions below +// in this file. +// +// The following statement will instantiate tests from the FooTest test case +// each with parameter values "meeny", "miny", and "moe". + +INSTANTIATE_TEST_CASE_P(InstantiationName, + FooTest, + Values("meeny", "miny", "moe")); + +// To distinguish different instances of the pattern, (yes, you +// can instantiate it more then once) the first argument to the +// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the +// actual test case name. Remember to pick unique prefixes for different +// instantiations. The tests from the instantiation above will have +// these names: +// +// * InstantiationName/FooTest.DoesBlah/0 for "meeny" +// * InstantiationName/FooTest.DoesBlah/1 for "miny" +// * InstantiationName/FooTest.DoesBlah/2 for "moe" +// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" +// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" +// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" +// +// You can use these names in --gtest_filter. +// +// This statement will instantiate all tests from FooTest again, each +// with parameter values "cat" and "dog": + +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); + +// The tests from the instantiation above will have these names: +// +// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" +// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" +// +// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests +// in the given test case, whether their definitions come before or +// AFTER the INSTANTIATE_TEST_CASE_P statement. +// +// Please also note that generator expressions (including parameters to the +// generators) are evaluated in InitGoogleTest(), after main() has started. +// This allows the user on one hand, to adjust generator parameters in order +// to dynamically determine a set of tests to run and on the other hand, +// give the user a chance to inspect the generated tests with Google Test +// reflection API before RUN_ALL_TESTS() is executed. +// +// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc +// for more examples. +// +// In the future, we plan to publish the API for defining new parameter +// generators. But for now this interface remains part of the internal +// implementation and is subject to change. + +#endif // 0 + +#include + +#if !GTEST_OS_SYMBIAN +#include +#endif + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +#include +#include +#include + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Functions producing parameter generators. +// +// Google Test uses these generators to produce parameters for value- +// parameterized tests. When a parameterized test case is instantiated +// with a particular generator, Google Test creates and runs tests +// for each element in the sequence produced by the generator. +// +// In the following sample, tests from test case FooTest are instantiated +// each three times with parameter values 3, 5, and 8: +// +// class FooTest : public TestWithParam { ... }; +// +// TEST_P(FooTest, TestThis) { +// } +// TEST_P(FooTest, TestThat) { +// } +// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); +// + +// Range() returns generators providing sequences of values in a range. +// +// Synopsis: +// Range(start, end) +// - returns a generator producing a sequence of values {start, start+1, +// start+2, ..., }. +// Range(start, end, step) +// - returns a generator producing a sequence of values {start, start+step, +// start+step+step, ..., }. +// Notes: +// * The generated sequences never include end. For example, Range(1, 5) +// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) +// returns a generator producing {1, 3, 5, 7}. +// * start and end must have the same type. That type may be any integral or +// floating-point type or a user defined type satisfying these conditions: +// * It must be assignable (have operator=() defined). +// * It must have operator+() (operator+(int-compatible type) for +// two-operand version). +// * It must have operator<() defined. +// Elements in the resulting sequences will also have that type. +// * Condition start < end must be satisfied in order for resulting sequences +// to contain any elements. +// +template +internal::ParamGenerator Range(T start, T end, IncrementT step) { + return internal::ParamGenerator( + new internal::RangeGenerator(start, end, step)); +} + +template +internal::ParamGenerator Range(T start, T end) { + return Range(start, end, 1); +} + +// ValuesIn() function allows generation of tests with parameters coming from +// a container. +// +// Synopsis: +// ValuesIn(const T (&array)[N]) +// - returns a generator producing sequences with elements from +// a C-style array. +// ValuesIn(const Container& container) +// - returns a generator producing sequences with elements from +// an STL-style container. +// ValuesIn(Iterator begin, Iterator end) +// - returns a generator producing sequences with elements from +// a range [begin, end) defined by a pair of STL-style iterators. These +// iterators can also be plain C pointers. +// +// Please note that ValuesIn copies the values from the containers +// passed in and keeps them to generate tests in RUN_ALL_TESTS(). +// +// Examples: +// +// This instantiates tests from test case StringTest +// each with C-string values of "foo", "bar", and "baz": +// +// const char* strings[] = {"foo", "bar", "baz"}; +// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); +// +// This instantiates tests from test case StlStringTest +// each with STL strings with values "a" and "b": +// +// ::std::vector< ::std::string> GetParameterStrings() { +// ::std::vector< ::std::string> v; +// v.push_back("a"); +// v.push_back("b"); +// return v; +// } +// +// INSTANTIATE_TEST_CASE_P(CharSequence, +// StlStringTest, +// ValuesIn(GetParameterStrings())); +// +// +// This will also instantiate tests from CharTest +// each with parameter values 'a' and 'b': +// +// ::std::list GetParameterChars() { +// ::std::list list; +// list.push_back('a'); +// list.push_back('b'); +// return list; +// } +// ::std::list l = GetParameterChars(); +// INSTANTIATE_TEST_CASE_P(CharSequence2, +// CharTest, +// ValuesIn(l.begin(), l.end())); +// +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, + ForwardIterator end) { + typedef typename ::std::iterator_traits::value_type + ParamType; + return internal::ParamGenerator( + new internal::ValuesInIteratorRangeGenerator(begin, end)); +} + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]) { + return ValuesIn(array, array + N); +} + +template +internal::ParamGenerator ValuesIn( + const Container& container) { + return ValuesIn(container.begin(), container.end()); +} + +// Values() allows generating tests from explicitly specified list of +// parameters. +// +// Synopsis: +// Values(T v1, T v2, ..., T vN) +// - returns a generator producing sequences with elements v1, v2, ..., vN. +// +// For example, this instantiates tests from test case BarTest each +// with values "one", "two", and "three": +// +// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); +// +// This instantiates tests from test case BazTest each with values 1, 2, 3.5. +// The exact type of values will depend on the type of parameter in BazTest. +// +// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); +// +// Currently, Values() supports from 1 to 50 parameters. +// +template +internal::ValueArray1 Values(T1 v1) { + return internal::ValueArray1(v1); +} + +template +internal::ValueArray2 Values(T1 v1, T2 v2) { + return internal::ValueArray2(v1, v2); +} + +template +internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { + return internal::ValueArray3(v1, v2, v3); +} + +template +internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { + return internal::ValueArray4(v1, v2, v3, v4); +} + +template +internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5) { + return internal::ValueArray5(v1, v2, v3, v4, v5); +} + +template +internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6) { + return internal::ValueArray6(v1, v2, v3, v4, v5, v6); +} + +template +internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7) { + return internal::ValueArray7(v1, v2, v3, v4, v5, + v6, v7); +} + +template +internal::ValueArray8 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { + return internal::ValueArray8(v1, v2, v3, v4, + v5, v6, v7, v8); +} + +template +internal::ValueArray9 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { + return internal::ValueArray9(v1, v2, v3, + v4, v5, v6, v7, v8, v9); +} + +template +internal::ValueArray10 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { + return internal::ValueArray10(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10); +} + +template +internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) { + return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); +} + +template +internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) { + return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); +} + +template +internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) { + return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); +} + +template +internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { + return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14); +} + +template +internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { + return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); +} + +template +internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16) { + return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16); +} + +template +internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17) { + return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17); +} + +template +internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18) { + return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18); +} + +template +internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { + return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); +} + +template +internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { + return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); +} + +template +internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { + return internal::ValueArray21(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); +} + +template +internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22) { + return internal::ValueArray22(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22); +} + +template +internal::ValueArray23 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23) { + return internal::ValueArray23(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23); +} + +template +internal::ValueArray24 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24) { + return internal::ValueArray24(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24); +} + +template +internal::ValueArray25 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { + return internal::ValueArray25(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25); +} + +template +internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) { + return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); +} + +template +internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) { + return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); +} + +template +internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) { + return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28); +} + +template +internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) { + return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29); +} + +template +internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { + return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30); +} + +template +internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { + return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31); +} + +template +internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32) { + return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32); +} + +template +internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33) { + return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); +} + +template +internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34) { + return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); +} + +template +internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { + return internal::ValueArray35(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); +} + +template +internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { + return internal::ValueArray36(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36); +} + +template +internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37) { + return internal::ValueArray37(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37); +} + +template +internal::ValueArray38 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38) { + return internal::ValueArray38(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, + v33, v34, v35, v36, v37, v38); +} + +template +internal::ValueArray39 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38, T39 v39) { + return internal::ValueArray39(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39); +} + +template +internal::ValueArray40 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, + T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, + T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { + return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, + v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); +} + +template +internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { + return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, + v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); +} + +template +internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) { + return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, + v42); +} + +template +internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) { + return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, + v41, v42, v43); +} + +template +internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) { + return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, + v40, v41, v42, v43, v44); +} + +template +internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { + return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, + v39, v40, v41, v42, v43, v44, v45); +} + +template +internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { + return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46); +} + +template +internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { + return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); +} + +template +internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, + T48 v48) { + return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, + v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); +} + +template +internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, + T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, + T47 v47, T48 v48, T49 v49) { + return internal::ValueArray49(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, + v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); +} + +template +internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, + T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, + T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { + return internal::ValueArray50(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, + v48, v49, v50); +} + +// Bool() allows generating tests with parameters in a set of (false, true). +// +// Synopsis: +// Bool() +// - returns a generator producing sequences with elements {false, true}. +// +// It is useful when testing code that depends on Boolean flags. Combinations +// of multiple flags can be tested when several Bool()'s are combined using +// Combine() function. +// +// In the following example all tests in the test case FlagDependentTest +// will be instantiated twice with parameters false and true. +// +// class FlagDependentTest : public testing::TestWithParam { +// virtual void SetUp() { +// external_flag = GetParam(); +// } +// } +// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); +// +inline internal::ParamGenerator Bool() { + return Values(false, true); +} + +#if GTEST_HAS_COMBINE +// Combine() allows the user to combine two or more sequences to produce +// values of a Cartesian product of those sequences' elements. +// +// Synopsis: +// Combine(gen1, gen2, ..., genN) +// - returns a generator producing sequences with elements coming from +// the Cartesian product of elements from the sequences generated by +// gen1, gen2, ..., genN. The sequence elements will have a type of +// tuple where T1, T2, ..., TN are the types +// of elements from sequences produces by gen1, gen2, ..., genN. +// +// Combine can have up to 10 arguments. This number is currently limited +// by the maximum number of elements in the tuple implementation used by Google +// Test. +// +// Example: +// +// This will instantiate tests in test case AnimalTest each one with +// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), +// tuple("dog", BLACK), and tuple("dog", WHITE): +// +// enum Color { BLACK, GRAY, WHITE }; +// class AnimalTest +// : public testing::TestWithParam > {...}; +// +// TEST_P(AnimalTest, AnimalLooksNice) {...} +// +// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, +// Combine(Values("cat", "dog"), +// Values(BLACK, WHITE))); +// +// This will instantiate tests in FlagDependentTest with all variations of two +// Boolean flags: +// +// class FlagDependentTest +// : public testing::TestWithParam > { +// virtual void SetUp() { +// // Assigns external_flag_1 and external_flag_2 values from the tuple. +// tie(external_flag_1, external_flag_2) = GetParam(); +// } +// }; +// +// TEST_P(FlagDependentTest, TestFeature1) { +// // Test your code using external_flag_1 and external_flag_2 here. +// } +// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, +// Combine(Bool(), Bool())); +// +template +internal::CartesianProductHolder2 Combine( + const Generator1& g1, const Generator2& g2) { + return internal::CartesianProductHolder2( + g1, g2); +} + +template +internal::CartesianProductHolder3 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3) { + return internal::CartesianProductHolder3( + g1, g2, g3); +} + +template +internal::CartesianProductHolder4 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4) { + return internal::CartesianProductHolder4( + g1, g2, g3, g4); +} + +template +internal::CartesianProductHolder5 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5) { + return internal::CartesianProductHolder5( + g1, g2, g3, g4, g5); +} + +template +internal::CartesianProductHolder6 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6) { + return internal::CartesianProductHolder6( + g1, g2, g3, g4, g5, g6); +} + +template +internal::CartesianProductHolder7 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7) { + return internal::CartesianProductHolder7( + g1, g2, g3, g4, g5, g6, g7); +} + +template +internal::CartesianProductHolder8 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8) { + return internal::CartesianProductHolder8( + g1, g2, g3, g4, g5, g6, g7, g8); +} + +template +internal::CartesianProductHolder9 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9) { + return internal::CartesianProductHolder9( + g1, g2, g3, g4, g5, g6, g7, g8, g9); +} + +template +internal::CartesianProductHolder10 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9, + const Generator10& g10) { + return internal::CartesianProductHolder10( + g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); +} +#endif // GTEST_HAS_COMBINE + + + +#define TEST_P(test_case_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + : public test_case_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ + virtual void TestBody(); \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ + #test_case_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_case_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ + ::testing::internal::ParamGenerator \ + gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ + int gtest_##prefix##test_case_name##_dummy_ = \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ + #prefix, \ + >est_##prefix##test_case_name##_EvalGenerator_, \ + __FILE__, __LINE__) + +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h.pump b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h.pump new file mode 100644 index 00000000..a2311882 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-param-test.h.pump @@ -0,0 +1,457 @@ +$$ -*- mode: c++; -*- +$var n = 50 $$ Maximum length of Values arguments we want to support. +$var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev) +// +// Macros and functions for implementing parameterized tests +// in Google C++ Testing Framework (Google Test) +// +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ + + +// Value-parameterized tests allow you to test your code with different +// parameters without writing multiple copies of the same test. +// +// Here is how you use value-parameterized tests: + +#if 0 + +// To write value-parameterized tests, first you should define a fixture +// class. It must be derived from testing::TestWithParam, where T is +// the type of your parameter values. TestWithParam is itself derived +// from testing::Test. T can be any copyable type. If it's a raw pointer, +// you are responsible for managing the lifespan of the pointed values. + +class FooTest : public ::testing::TestWithParam { + // You can implement all the usual class fixture members here. +}; + +// Then, use the TEST_P macro to define as many parameterized tests +// for this fixture as you want. The _P suffix is for "parameterized" +// or "pattern", whichever you prefer to think. + +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} + +// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test +// case with any set of parameters you want. Google Test defines a number +// of functions for generating test parameters. They return what we call +// (surprise!) parameter generators. Here is a summary of them, which +// are all in the testing namespace: +// +// +// Range(begin, end [, step]) - Yields values {begin, begin+step, +// begin+step+step, ...}. The values do not +// include end. step defaults to 1. +// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. +// ValuesIn(container) - Yields values from a C-style array, an STL +// ValuesIn(begin,end) container, or an iterator range [begin, end). +// Bool() - Yields sequence {false, true}. +// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product +// for the math savvy) of the values generated +// by the N generators. +// +// For more details, see comments at the definitions of these functions below +// in this file. +// +// The following statement will instantiate tests from the FooTest test case +// each with parameter values "meeny", "miny", and "moe". + +INSTANTIATE_TEST_CASE_P(InstantiationName, + FooTest, + Values("meeny", "miny", "moe")); + +// To distinguish different instances of the pattern, (yes, you +// can instantiate it more then once) the first argument to the +// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the +// actual test case name. Remember to pick unique prefixes for different +// instantiations. The tests from the instantiation above will have +// these names: +// +// * InstantiationName/FooTest.DoesBlah/0 for "meeny" +// * InstantiationName/FooTest.DoesBlah/1 for "miny" +// * InstantiationName/FooTest.DoesBlah/2 for "moe" +// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" +// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" +// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" +// +// You can use these names in --gtest_filter. +// +// This statement will instantiate all tests from FooTest again, each +// with parameter values "cat" and "dog": + +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); + +// The tests from the instantiation above will have these names: +// +// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" +// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" +// +// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests +// in the given test case, whether their definitions come before or +// AFTER the INSTANTIATE_TEST_CASE_P statement. +// +// Please also note that generator expressions are evaluated in +// RUN_ALL_TESTS(), after main() has started. This allows evaluation of +// parameter list based on command line parameters. +// +// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc +// for more examples. +// +// In the future, we plan to publish the API for defining new parameter +// generators. But for now this interface remains part of the internal +// implementation and is subject to change. + +#endif // 0 + +#include + +#if !GTEST_OS_SYMBIAN +#include +#endif + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +#include +#include +#include + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Functions producing parameter generators. +// +// Google Test uses these generators to produce parameters for value- +// parameterized tests. When a parameterized test case is instantiated +// with a particular generator, Google Test creates and runs tests +// for each element in the sequence produced by the generator. +// +// In the following sample, tests from test case FooTest are instantiated +// each three times with parameter values 3, 5, and 8: +// +// class FooTest : public TestWithParam { ... }; +// +// TEST_P(FooTest, TestThis) { +// } +// TEST_P(FooTest, TestThat) { +// } +// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); +// + +// Range() returns generators providing sequences of values in a range. +// +// Synopsis: +// Range(start, end) +// - returns a generator producing a sequence of values {start, start+1, +// start+2, ..., }. +// Range(start, end, step) +// - returns a generator producing a sequence of values {start, start+step, +// start+step+step, ..., }. +// Notes: +// * The generated sequences never include end. For example, Range(1, 5) +// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) +// returns a generator producing {1, 3, 5, 7}. +// * start and end must have the same type. That type may be any integral or +// floating-point type or a user defined type satisfying these conditions: +// * It must be assignable (have operator=() defined). +// * It must have operator+() (operator+(int-compatible type) for +// two-operand version). +// * It must have operator<() defined. +// Elements in the resulting sequences will also have that type. +// * Condition start < end must be satisfied in order for resulting sequences +// to contain any elements. +// +template +internal::ParamGenerator Range(T start, T end, IncrementT step) { + return internal::ParamGenerator( + new internal::RangeGenerator(start, end, step)); +} + +template +internal::ParamGenerator Range(T start, T end) { + return Range(start, end, 1); +} + +// ValuesIn() function allows generation of tests with parameters coming from +// a container. +// +// Synopsis: +// ValuesIn(const T (&array)[N]) +// - returns a generator producing sequences with elements from +// a C-style array. +// ValuesIn(const Container& container) +// - returns a generator producing sequences with elements from +// an STL-style container. +// ValuesIn(Iterator begin, Iterator end) +// - returns a generator producing sequences with elements from +// a range [begin, end) defined by a pair of STL-style iterators. These +// iterators can also be plain C pointers. +// +// Please note that ValuesIn copies the values from the containers +// passed in and keeps them to generate tests in RUN_ALL_TESTS(). +// +// Examples: +// +// This instantiates tests from test case StringTest +// each with C-string values of "foo", "bar", and "baz": +// +// const char* strings[] = {"foo", "bar", "baz"}; +// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); +// +// This instantiates tests from test case StlStringTest +// each with STL strings with values "a" and "b": +// +// ::std::vector< ::std::string> GetParameterStrings() { +// ::std::vector< ::std::string> v; +// v.push_back("a"); +// v.push_back("b"); +// return v; +// } +// +// INSTANTIATE_TEST_CASE_P(CharSequence, +// StlStringTest, +// ValuesIn(GetParameterStrings())); +// +// +// This will also instantiate tests from CharTest +// each with parameter values 'a' and 'b': +// +// ::std::list GetParameterChars() { +// ::std::list list; +// list.push_back('a'); +// list.push_back('b'); +// return list; +// } +// ::std::list l = GetParameterChars(); +// INSTANTIATE_TEST_CASE_P(CharSequence2, +// CharTest, +// ValuesIn(l.begin(), l.end())); +// +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, + ForwardIterator end) { + typedef typename ::std::iterator_traits::value_type + ParamType; + return internal::ParamGenerator( + new internal::ValuesInIteratorRangeGenerator(begin, end)); +} + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]) { + return ValuesIn(array, array + N); +} + +template +internal::ParamGenerator ValuesIn( + const Container& container) { + return ValuesIn(container.begin(), container.end()); +} + +// Values() allows generating tests from explicitly specified list of +// parameters. +// +// Synopsis: +// Values(T v1, T v2, ..., T vN) +// - returns a generator producing sequences with elements v1, v2, ..., vN. +// +// For example, this instantiates tests from test case BarTest each +// with values "one", "two", and "three": +// +// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); +// +// This instantiates tests from test case BazTest each with values 1, 2, 3.5. +// The exact type of values will depend on the type of parameter in BazTest. +// +// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); +// +// Currently, Values() supports from 1 to $n parameters. +// +$range i 1..n +$for i [[ +$range j 1..i + +template <$for j, [[typename T$j]]> +internal::ValueArray$i<$for j, [[T$j]]> Values($for j, [[T$j v$j]]) { + return internal::ValueArray$i<$for j, [[T$j]]>($for j, [[v$j]]); +} + +]] + +// Bool() allows generating tests with parameters in a set of (false, true). +// +// Synopsis: +// Bool() +// - returns a generator producing sequences with elements {false, true}. +// +// It is useful when testing code that depends on Boolean flags. Combinations +// of multiple flags can be tested when several Bool()'s are combined using +// Combine() function. +// +// In the following example all tests in the test case FlagDependentTest +// will be instantiated twice with parameters false and true. +// +// class FlagDependentTest : public testing::TestWithParam { +// virtual void SetUp() { +// external_flag = GetParam(); +// } +// } +// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); +// +inline internal::ParamGenerator Bool() { + return Values(false, true); +} + +#if GTEST_HAS_COMBINE +// Combine() allows the user to combine two or more sequences to produce +// values of a Cartesian product of those sequences' elements. +// +// Synopsis: +// Combine(gen1, gen2, ..., genN) +// - returns a generator producing sequences with elements coming from +// the Cartesian product of elements from the sequences generated by +// gen1, gen2, ..., genN. The sequence elements will have a type of +// tuple where T1, T2, ..., TN are the types +// of elements from sequences produces by gen1, gen2, ..., genN. +// +// Combine can have up to $maxtuple arguments. This number is currently limited +// by the maximum number of elements in the tuple implementation used by Google +// Test. +// +// Example: +// +// This will instantiate tests in test case AnimalTest each one with +// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), +// tuple("dog", BLACK), and tuple("dog", WHITE): +// +// enum Color { BLACK, GRAY, WHITE }; +// class AnimalTest +// : public testing::TestWithParam > {...}; +// +// TEST_P(AnimalTest, AnimalLooksNice) {...} +// +// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, +// Combine(Values("cat", "dog"), +// Values(BLACK, WHITE))); +// +// This will instantiate tests in FlagDependentTest with all variations of two +// Boolean flags: +// +// class FlagDependentTest +// : public testing::TestWithParam > { +// virtual void SetUp() { +// // Assigns external_flag_1 and external_flag_2 values from the tuple. +// tie(external_flag_1, external_flag_2) = GetParam(); +// } +// }; +// +// TEST_P(FlagDependentTest, TestFeature1) { +// // Test your code using external_flag_1 and external_flag_2 here. +// } +// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, +// Combine(Bool(), Bool())); +// +$range i 2..maxtuple +$for i [[ +$range j 1..i + +template <$for j, [[typename Generator$j]]> +internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine( + $for j, [[const Generator$j& g$j]]) { + return internal::CartesianProductHolder$i<$for j, [[Generator$j]]>( + $for j, [[g$j]]); +} + +]] +#endif // GTEST_HAS_COMBINE + + + +#define TEST_P(test_case_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + : public test_case_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ + virtual void TestBody(); \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ + #test_case_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_case_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ + ::testing::internal::ParamGenerator \ + gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ + int gtest_##prefix##test_case_name##_dummy_ = \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ + #prefix, \ + >est_##prefix##test_case_name##_EvalGenerator_, \ + __FILE__, __LINE__) + +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-spi.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-spi.h new file mode 100644 index 00000000..c41da484 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-spi.h @@ -0,0 +1,232 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Utilities for testing Google Test itself and code that uses Google Test +// (e.g. frameworks built on top of Google Test). + +#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + +#include + +namespace testing { + +// This helper class can be used to mock out Google Test failure reporting +// so that we can test Google Test or code that builds on Google Test. +// +// An object of this class appends a TestPartResult object to the +// TestPartResultArray object given in the constructor whenever a Google Test +// failure is reported. It can either intercept only failures that are +// generated in the same thread that created this object or it can intercept +// all generated failures. The scope of this mock object can be controlled with +// the second argument to the two arguments constructor. +class GTEST_API_ ScopedFakeTestPartResultReporter + : public TestPartResultReporterInterface { + public: + // The two possible mocking modes of this object. + enum InterceptMode { + INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. + INTERCEPT_ALL_THREADS // Intercepts all failures. + }; + + // The c'tor sets this object as the test part result reporter used + // by Google Test. The 'result' parameter specifies where to report the + // results. This reporter will only catch failures generated in the current + // thread. DEPRECATED + explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); + + // Same as above, but you can choose the interception scope of this object. + ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, + TestPartResultArray* result); + + // The d'tor restores the previous test part result reporter. + virtual ~ScopedFakeTestPartResultReporter(); + + // Appends the TestPartResult object to the TestPartResultArray + // received in the constructor. + // + // This method is from the TestPartResultReporterInterface + // interface. + virtual void ReportTestPartResult(const TestPartResult& result); + private: + void Init(); + + const InterceptMode intercept_mode_; + TestPartResultReporterInterface* old_reporter_; + TestPartResultArray* const result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); +}; + +namespace internal { + +// A helper class for implementing EXPECT_FATAL_FAILURE() and +// EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +class GTEST_API_ SingleFailureChecker { + public: + // The constructor remembers the arguments. + SingleFailureChecker(const TestPartResultArray* results, + TestPartResult::Type type, + const char* substr); + ~SingleFailureChecker(); + private: + const TestPartResultArray* const results_; + const TestPartResult::Type type_; + const String substr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); +}; + +} // namespace internal + +} // namespace testing + +// A set of macros for testing Google Test assertions or code that's expected +// to generate Google Test fatal failures. It verifies that the given +// statement will cause exactly one fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_FATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - 'statement' cannot reference local non-static variables or +// non-static members of the current object. +// - 'statement' cannot return a value. +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. The AcceptsMacroThatExpandsToUnprotectedComma test in +// gtest_unittest.cc will fail to compile if we do that. +#define EXPECT_FATAL_FAILURE(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ALL_THREADS, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +// A macro for testing Google Test assertions or code that's expected to +// generate Google Test non-fatal failures. It asserts that the given +// statement will cause exactly one non-fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// 'statement' is allowed to reference local variables and members of +// the current object. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. If we do that, the code won't compile when the user gives +// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that +// expands to code containing an unprotected comma. The +// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc +// catches that. +// +// For the same reason, we have to write +// if (::testing::internal::AlwaysTrue()) { statement; } +// instead of +// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) +// to avoid an MSVC warning on unreachable code. +#define EXPECT_NONFATAL_FAILURE(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\ + >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-test-part.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-test-part.h new file mode 100644 index 00000000..f7147590 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-test-part.h @@ -0,0 +1,176 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ + +#include +#include +#include +#include + +namespace testing { + +// A copyable object representing the result of a test part (i.e. an +// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). +// +// Don't inherit from TestPartResult as its destructor is not virtual. +class GTEST_API_ TestPartResult { + public: + // The possible outcomes of a test part (i.e. an assertion or an + // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). + enum Type { + kSuccess, // Succeeded. + kNonFatalFailure, // Failed but the test can continue. + kFatalFailure // Failed and the test should be terminated. + }; + + // C'tor. TestPartResult does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestPartResult object. + TestPartResult(Type a_type, + const char* a_file_name, + int a_line_number, + const char* a_message) + : type_(a_type), + file_name_(a_file_name), + line_number_(a_line_number), + summary_(ExtractSummary(a_message)), + message_(a_message) { + } + + // Gets the outcome of the test part. + Type type() const { return type_; } + + // Gets the name of the source file where the test part took place, or + // NULL if it's unknown. + const char* file_name() const { return file_name_.c_str(); } + + // Gets the line in the source file where the test part took place, + // or -1 if it's unknown. + int line_number() const { return line_number_; } + + // Gets the summary of the failure message. + const char* summary() const { return summary_.c_str(); } + + // Gets the message associated with the test part. + const char* message() const { return message_.c_str(); } + + // Returns true iff the test part passed. + bool passed() const { return type_ == kSuccess; } + + // Returns true iff the test part failed. + bool failed() const { return type_ != kSuccess; } + + // Returns true iff the test part non-fatally failed. + bool nonfatally_failed() const { return type_ == kNonFatalFailure; } + + // Returns true iff the test part fatally failed. + bool fatally_failed() const { return type_ == kFatalFailure; } + private: + Type type_; + + // Gets the summary of the failure message by omitting the stack + // trace in it. + static internal::String ExtractSummary(const char* message); + + // The name of the source file where the test part took place, or + // NULL if the source file is unknown. + internal::String file_name_; + // The line in the source file where the test part took place, or -1 + // if the line number is unknown. + int line_number_; + internal::String summary_; // The test failure summary. + internal::String message_; // The test failure message. +}; + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result); + +// An array of TestPartResult objects. +// +// Don't inherit from TestPartResultArray as its destructor is not +// virtual. +class GTEST_API_ TestPartResultArray { + public: + TestPartResultArray() {} + + // Appends the given TestPartResult to the array. + void Append(const TestPartResult& result); + + // Returns the TestPartResult at the given index (0-based). + const TestPartResult& GetTestPartResult(int index) const; + + // Returns the number of TestPartResult objects in the array. + int size() const; + + private: + std::vector array_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); +}; + +// This interface knows how to report a test part result. +class TestPartResultReporterInterface { + public: + virtual ~TestPartResultReporterInterface() {} + + virtual void ReportTestPartResult(const TestPartResult& result) = 0; +}; + +namespace internal { + +// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a +// statement generates new fatal failures. To do so it registers itself as the +// current test part result reporter. Besides checking if fatal failures were +// reported, it only delegates the reporting to the former result reporter. +// The original result reporter is restored in the destructor. +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +class GTEST_API_ HasNewFatalFailureHelper + : public TestPartResultReporterInterface { + public: + HasNewFatalFailureHelper(); + virtual ~HasNewFatalFailureHelper(); + virtual void ReportTestPartResult(const TestPartResult& result); + bool has_new_fatal_failure() const { return has_new_fatal_failure_; } + private: + bool has_new_fatal_failure_; + TestPartResultReporterInterface* original_reporter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); +}; + +} // namespace internal + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-typed-test.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-typed-test.h new file mode 100644 index 00000000..1ec8eb8d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest-typed-test.h @@ -0,0 +1,259 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ + +// This header implements typed tests and type-parameterized tests. + +// Typed (aka type-driven) tests repeat the same test for types in a +// list. You must know which types you want to test with when writing +// typed tests. Here's how you do it: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + public: + ... + typedef std::list List; + static T shared_; + T value_; +}; + +// Next, associate a list of types with the test case, which will be +// repeated for each type in the list. The typedef is necessary for +// the macro to parse correctly. +typedef testing::Types MyTypes; +TYPED_TEST_CASE(FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// TYPED_TEST_CASE(FooTest, int); + +// Then, use TYPED_TEST() instead of TEST_F() to define as many typed +// tests for this test case as you want. +TYPED_TEST(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + // Since we are inside a derived class template, C++ requires use to + // visit the members of FooTest via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the TestFixture:: + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the "typename + // TestFixture::" prefix. + typename TestFixture::List values; + values.push_back(n); + ... +} + +TYPED_TEST(FooTest, HasPropertyA) { ... } + +#endif // 0 + +// Type-parameterized tests are abstract test patterns parameterized +// by a type. Compared with typed tests, type-parameterized tests +// allow you to define the test pattern without knowing what the type +// parameters are. The defined pattern can be instantiated with +// different types any number of times, in any number of translation +// units. +// +// If you are designing an interface or concept, you can define a +// suite of type-parameterized tests to verify properties that any +// valid implementation of the interface/concept should have. Then, +// each implementation can easily instantiate the test suite to verify +// that it conforms to the requirements, without having to write +// similar tests repeatedly. Here's an example: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + ... +}; + +// Next, declare that you will define a type-parameterized test case +// (the _P suffix is for "parameterized" or "pattern", whichever you +// prefer): +TYPED_TEST_CASE_P(FooTest); + +// Then, use TYPED_TEST_P() to define as many type-parameterized tests +// for this type-parameterized test case as you want. +TYPED_TEST_P(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + TypeParam n = 0; + ... +} + +TYPED_TEST_P(FooTest, HasPropertyA) { ... } + +// Now the tricky part: you need to register all test patterns before +// you can instantiate them. The first argument of the macro is the +// test case name; the rest are the names of the tests in this test +// case. +REGISTER_TYPED_TEST_CASE_P(FooTest, + DoesBlah, HasPropertyA); + +// Finally, you are free to instantiate the pattern with the types you +// want. If you put the above code in a header file, you can #include +// it in multiple C++ source files and instantiate it multiple times. +// +// To distinguish different instances of the pattern, the first +// argument to the INSTANTIATE_* macro is a prefix that will be added +// to the actual test case name. Remember to pick unique prefixes for +// different instances. +typedef testing::Types MyTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); + +#endif // 0 + +#include +#include + +// Implements typed tests. + +#if GTEST_HAS_TYPED_TEST + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the typedef for the type parameters of the +// given test case. +#define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +#define TYPED_TEST_CASE(CaseName, Types) \ + typedef ::testing::internal::TypeList< Types >::type \ + GTEST_TYPE_PARAMS_(CaseName) + +#define TYPED_TEST(CaseName, TestName) \ + template \ + class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ + : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + bool gtest_##CaseName##_##TestName##_registered_ = \ + ::testing::internal::TypeParameterizedTest< \ + CaseName, \ + ::testing::internal::TemplateSel< \ + GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ + GTEST_TYPE_PARAMS_(CaseName)>::Register(\ + "", #CaseName, #TestName, 0); \ + template \ + void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() + +#endif // GTEST_HAS_TYPED_TEST + +// Implements type-parameterized tests. + +#if GTEST_HAS_TYPED_TEST_P + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the namespace name that the type-parameterized tests for +// the given type-parameterized test case are defined in. The exact +// name of the namespace is subject to change without notice. +#define GTEST_CASE_NAMESPACE_(TestCaseName) \ + gtest_case_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the variable used to remember the names of +// the defined tests in the given test case. +#define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ + gtest_typed_test_case_p_state_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. +// +// Expands to the name of the variable used to remember the names of +// the registered tests in the given test case. +#define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ + gtest_registered_test_names_##TestCaseName##_ + +// The variables defined in the type-parameterized test macros are +// static as typically these macros are used in a .h file that can be +// #included in multiple translation units linked together. +#define TYPED_TEST_CASE_P(CaseName) \ + static ::testing::internal::TypedTestCasePState \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) + +#define TYPED_TEST_P(CaseName, TestName) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + template \ + class TestName : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + static bool gtest_##TestName##_defined_ = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ + __FILE__, __LINE__, #CaseName, #TestName); \ + } \ + template \ + void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() + +#define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ + } \ + static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ + __FILE__, __LINE__, #__VA_ARGS__) + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +#define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ + bool gtest_##Prefix##_##CaseName = \ + ::testing::internal::TypeParameterizedTestCase::type>::Register(\ + #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) + +#endif // GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest.h new file mode 100644 index 00000000..921fad11 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest.h @@ -0,0 +1,2052 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for Google Test. It should be +// included by any test program that uses Google Test. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! +// +// Acknowledgment: Google Test borrowed the idea of automatic test +// registration from Barthelemy Dagenais' (barthelemy@prologique.com) +// easyUnit framework. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_H_ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Depending on the platform, different string classes are available. +// On Linux, in addition to ::std::string, Google also makes use of +// class ::string, which has the same interface as ::std::string, but +// has a different implementation. +// +// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that +// ::string is available AND is a distinct type to ::std::string, or +// define it to 0 to indicate otherwise. +// +// If the user's ::std::string and ::string are the same class due to +// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. +// +// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined +// heuristically. + +namespace testing { + +// Declares the flags. + +// This flag temporary enables the disabled tests. +GTEST_DECLARE_bool_(also_run_disabled_tests); + +// This flag brings the debugger on an assertion failure. +GTEST_DECLARE_bool_(break_on_failure); + +// This flag controls whether Google Test catches all test-thrown exceptions +// and logs them as failures. +GTEST_DECLARE_bool_(catch_exceptions); + +// This flag enables using colors in terminal output. Available values are +// "yes" to enable colors, "no" (disable colors), or "auto" (the default) +// to let Google Test decide. +GTEST_DECLARE_string_(color); + +// This flag sets up the filter to select by name using a glob pattern +// the tests to run. If the filter is not given all tests are executed. +GTEST_DECLARE_string_(filter); + +// This flag causes the Google Test to list tests. None of the tests listed +// are actually run if the flag is provided. +GTEST_DECLARE_bool_(list_tests); + +// This flag controls whether Google Test emits a detailed XML report to a file +// in addition to its normal textual output. +GTEST_DECLARE_string_(output); + +// This flags control whether Google Test prints the elapsed time for each +// test. +GTEST_DECLARE_bool_(print_time); + +// This flag specifies the random number seed. +GTEST_DECLARE_int32_(random_seed); + +// This flag sets how many times the tests are repeated. The default value +// is 1. If the value is -1 the tests are repeating forever. +GTEST_DECLARE_int32_(repeat); + +// This flag controls whether Google Test includes Google Test internal +// stack frames in failure stack traces. +GTEST_DECLARE_bool_(show_internal_stack_frames); + +// When this flag is specified, tests' order is randomized on every iteration. +GTEST_DECLARE_bool_(shuffle); + +// This flag specifies the maximum number of stack frames to be +// printed in a failure message. +GTEST_DECLARE_int32_(stack_trace_depth); + +// When this flag is specified, a failed assertion will throw an +// exception if exceptions are enabled, or exit the program with a +// non-zero code otherwise. +GTEST_DECLARE_bool_(throw_on_failure); + +// The upper limit for valid stack trace depths. +const int kMaxStackTraceDepth = 100; + +namespace internal { + +class AssertHelper; +class DefaultGlobalTestPartResultReporter; +class ExecDeathTest; +class NoExecDeathTest; +class FinalSuccessChecker; +class GTestFlagSaver; +class TestInfoImpl; +class TestResultAccessor; +class TestEventListenersAccessor; +class TestEventRepeater; +class WindowsDeathTest; +class UnitTestImpl* GetUnitTestImpl(); +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const String& message); +class PrettyUnitTestResultPrinter; +class XmlUnitTestResultPrinter; + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". +// Declared in gtest-internal.h but defined here, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable) { + return (Message() << streamable).GetString(); +} + +} // namespace internal + +// A class for indicating whether an assertion was successful. When +// the assertion wasn't successful, the AssertionResult object +// remembers a non-empty message that describes how it failed. +// +// To create an instance of this class, use one of the factory functions +// (AssertionSuccess() and AssertionFailure()). +// +// This class is useful for two purposes: +// 1. Defining predicate functions to be used with Boolean test assertions +// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts +// 2. Defining predicate-format functions to be +// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). +// +// For example, if you define IsEven predicate: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) +// will print the message +// +// Value of: IsEven(Fib(5)) +// Actual: false (5 is odd) +// Expected: true +// +// instead of a more opaque +// +// Value of: IsEven(Fib(5)) +// Actual: false +// Expected: true +// +// in case IsEven is a simple Boolean predicate. +// +// If you expect your predicate to be reused and want to support informative +// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up +// about half as often as positive ones in our tests), supply messages for +// both success and failure cases: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess() << n << " is even"; +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print +// +// Value of: IsEven(Fib(6)) +// Actual: true (8 is even) +// Expected: false +// +// NB: Predicates that support negative Boolean assertions have reduced +// performance in positive ones so be careful not to use them in tests +// that have lots (tens of thousands) of positive Boolean assertions. +// +// To use this class with EXPECT_PRED_FORMAT assertions such as: +// +// // Verifies that Foo() returns an even number. +// EXPECT_PRED_FORMAT1(IsEven, Foo()); +// +// you need to define: +// +// testing::AssertionResult IsEven(const char* expr, int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() +// << "Expected: " << expr << " is even\n Actual: it's " << n; +// } +// +// If Foo() returns 5, you will see the following message: +// +// Expected: Foo() is even +// Actual: it's 5 +// +class GTEST_API_ AssertionResult { + public: + // Copy constructor. + // Used in EXPECT_TRUE/FALSE(assertion_result). + AssertionResult(const AssertionResult& other); + // Used in the EXPECT_TRUE/FALSE(bool_expression). + explicit AssertionResult(bool success) : success_(success) {} + + // Returns true iff the assertion succeeded. + operator bool() const { return success_; } // NOLINT + + // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. + AssertionResult operator!() const; + + // Returns the text streamed into this AssertionResult. Test assertions + // use it when they fail (i.e., the predicate's outcome doesn't match the + // assertion's expectation). When nothing has been streamed into the + // object, returns an empty string. + const char* message() const { + return message_.get() != NULL && message_->c_str() != NULL ? + message_->c_str() : ""; + } + // TODO(vladl@google.com): Remove this after making sure no clients use it. + // Deprecated; please use message() instead. + const char* failure_message() const { return message(); } + + // Streams a custom failure message into this object. + template AssertionResult& operator<<(const T& value); + + private: + // No implementation - we want AssertionResult to be + // copy-constructible but not assignable. + void operator=(const AssertionResult& other); + + // Stores result of the assertion predicate. + bool success_; + // Stores the message describing the condition in case the expectation + // construct is not satisfied with the predicate's outcome. + // Referenced via a pointer to avoid taking too much stack frame space + // with test assertions. + internal::scoped_ptr message_; +}; // class AssertionResult + +// Streams a custom failure message into this object. +template +AssertionResult& AssertionResult::operator<<(const T& value) { + Message msg; + if (message_.get() != NULL) + msg << *message_; + msg << value; + message_.reset(new internal::String(msg.GetString())); + return *this; +} + +// Makes a successful assertion result. +GTEST_API_ AssertionResult AssertionSuccess(); + +// Makes a failed assertion result. +GTEST_API_ AssertionResult AssertionFailure(); + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << msg. +GTEST_API_ AssertionResult AssertionFailure(const Message& msg); + +// The abstract class that all tests inherit from. +// +// In Google Test, a unit test program contains one or many TestCases, and +// each TestCase contains one or many Tests. +// +// When you define a test using the TEST macro, you don't need to +// explicitly derive from Test - the TEST macro automatically does +// this for you. +// +// The only time you derive from Test is when defining a test fixture +// to be used a TEST_F. For example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { ... } +// virtual void TearDown() { ... } +// ... +// }; +// +// TEST_F(FooTest, Bar) { ... } +// TEST_F(FooTest, Baz) { ... } +// +// Test is not copyable. +class GTEST_API_ Test { + public: + friend class internal::TestInfoImpl; + + // Defines types for pointers to functions that set up and tear down + // a test case. + typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; + typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; + + // The d'tor is virtual as we intend to inherit from Test. + virtual ~Test(); + + // Sets up the stuff shared by all tests in this test case. + // + // Google Test will call Foo::SetUpTestCase() before running the first + // test in test case Foo. Hence a sub-class can define its own + // SetUpTestCase() method to shadow the one defined in the super + // class. + static void SetUpTestCase() {} + + // Tears down the stuff shared by all tests in this test case. + // + // Google Test will call Foo::TearDownTestCase() after running the last + // test in test case Foo. Hence a sub-class can define its own + // TearDownTestCase() method to shadow the one defined in the super + // class. + static void TearDownTestCase() {} + + // Returns true iff the current test has a fatal failure. + static bool HasFatalFailure(); + + // Returns true iff the current test has a non-fatal failure. + static bool HasNonfatalFailure(); + + // Returns true iff the current test has a (either fatal or + // non-fatal) failure. + static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } + + // Logs a property for the current test. Only the last value for a given + // key is remembered. + // These are public static so they can be called from utility functions + // that are not members of the test fixture. + // The arguments are const char* instead strings, as Google Test is used + // on platforms where string doesn't compile. + // + // Note that a driving consideration for these RecordProperty methods + // was to produce xml output suited to the Greenspan charting utility, + // which at present will only chart values that fit in a 32-bit int. It + // is the user's responsibility to restrict their values to 32-bit ints + // if they intend them to be used with Greenspan. + static void RecordProperty(const char* key, const char* value); + static void RecordProperty(const char* key, int value); + + protected: + // Creates a Test object. + Test(); + + // Sets up the test fixture. + virtual void SetUp(); + + // Tears down the test fixture. + virtual void TearDown(); + + private: + // Returns true iff the current test has the same fixture class as + // the first test in the current test case. + static bool HasSameFixtureClass(); + + // Runs the test after the test fixture has been set up. + // + // A sub-class must implement this to define the test logic. + // + // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. + // Instead, use the TEST or TEST_F macro. + virtual void TestBody() = 0; + + // Sets up, executes, and tears down the test. + void Run(); + + // Uses a GTestFlagSaver to save and restore all Google Test flags. + const internal::GTestFlagSaver* const gtest_flag_saver_; + + // Often a user mis-spells SetUp() as Setup() and spends a long time + // wondering why it is never called by Google Test. The declaration of + // the following method is solely for catching such an error at + // compile time: + // + // - The return type is deliberately chosen to be not void, so it + // will be a conflict if a user declares void Setup() in his test + // fixture. + // + // - This method is private, so it will be another compiler error + // if a user calls it from his test fixture. + // + // DO NOT OVERRIDE THIS FUNCTION. + // + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } + + // We disallow copying Tests. + GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); +}; + +typedef internal::TimeInMillis TimeInMillis; + +// A copyable object representing a user specified test property which can be +// output as a key/value string pair. +// +// Don't inherit from TestProperty as its destructor is not virtual. +class TestProperty { + public: + // C'tor. TestProperty does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestProperty object. + TestProperty(const char* a_key, const char* a_value) : + key_(a_key), value_(a_value) { + } + + // Gets the user supplied key. + const char* key() const { + return key_.c_str(); + } + + // Gets the user supplied value. + const char* value() const { + return value_.c_str(); + } + + // Sets a new value, overriding the one supplied in the constructor. + void SetValue(const char* new_value) { + value_ = new_value; + } + + private: + // The key supplied by the user. + internal::String key_; + // The value supplied by the user. + internal::String value_; +}; + +// The result of a single Test. This includes a list of +// TestPartResults, a list of TestProperties, a count of how many +// death tests there are in the Test, and how much time it took to run +// the Test. +// +// TestResult is not copyable. +class GTEST_API_ TestResult { + public: + // Creates an empty TestResult. + TestResult(); + + // D'tor. Do not inherit from TestResult. + ~TestResult(); + + // Gets the number of all test parts. This is the sum of the number + // of successful test parts and the number of failed test parts. + int total_part_count() const; + + // Returns the number of the test properties. + int test_property_count() const; + + // Returns true iff the test passed (i.e. no test part failed). + bool Passed() const { return !Failed(); } + + // Returns true iff the test failed. + bool Failed() const; + + // Returns true iff the test fatally failed. + bool HasFatalFailure() const; + + // Returns true iff the test has a non-fatal failure. + bool HasNonfatalFailure() const; + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test part result among all the results. i can range + // from 0 to test_property_count() - 1. If i is not in that range, aborts + // the program. + const TestPartResult& GetTestPartResult(int i) const; + + // Returns the i-th test property. i can range from 0 to + // test_property_count() - 1. If i is not in that range, aborts the + // program. + const TestProperty& GetTestProperty(int i) const; + + private: + friend class TestInfo; + friend class UnitTest; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::ExecDeathTest; + friend class internal::TestInfoImpl; + friend class internal::TestResultAccessor; + friend class internal::UnitTestImpl; + friend class internal::WindowsDeathTest; + + // Gets the vector of TestPartResults. + const std::vector& test_part_results() const { + return test_part_results_; + } + + // Gets the vector of TestProperties. + const std::vector& test_properties() const { + return test_properties_; + } + + // Sets the elapsed time. + void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } + + // Adds a test property to the list. The property is validated and may add + // a non-fatal failure if invalid (e.g., if it conflicts with reserved + // key names). If a property is already recorded for the same key, the + // value will be updated, rather than storing multiple values for the same + // key. + void RecordProperty(const TestProperty& test_property); + + // Adds a failure if the key is a reserved attribute of Google Test + // testcase tags. Returns true if the property is valid. + // TODO(russr): Validate attribute names are legal and human readable. + static bool ValidateTestProperty(const TestProperty& test_property); + + // Adds a test part result to the list. + void AddTestPartResult(const TestPartResult& test_part_result); + + // Returns the death test count. + int death_test_count() const { return death_test_count_; } + + // Increments the death test count, returning the new count. + int increment_death_test_count() { return ++death_test_count_; } + + // Clears the test part results. + void ClearTestPartResults(); + + // Clears the object. + void Clear(); + + // Protects mutable state of the property vector and of owned + // properties, whose values may be updated. + internal::Mutex test_properites_mutex_; + + // The vector of TestPartResults + std::vector test_part_results_; + // The vector of TestProperties + std::vector test_properties_; + // Running count of death tests. + int death_test_count_; + // The elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + + // We disallow copying TestResult. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); +}; // class TestResult + +// A TestInfo object stores the following information about a test: +// +// Test case name +// Test name +// Whether the test should be run +// A function pointer that creates the test object when invoked +// Test result +// +// The constructor of TestInfo registers itself with the UnitTest +// singleton such that the RUN_ALL_TESTS() macro knows which tests to +// run. +class GTEST_API_ TestInfo { + public: + // Destructs a TestInfo object. This function is not virtual, so + // don't inherit from TestInfo. + ~TestInfo(); + + // Returns the test case name. + const char* test_case_name() const; + + // Returns the test name. + const char* name() const; + + // Returns the test case comment. + const char* test_case_comment() const; + + // Returns the test comment. + const char* comment() const; + + // Returns true if this test should run, that is if the test is not disabled + // (or it is disabled but the also_run_disabled_tests flag has been specified) + // and its full name matches the user-specified filter. + // + // Google Test allows the user to filter the tests by their full names. + // The full name of a test Bar in test case Foo is defined as + // "Foo.Bar". Only the tests that match the filter will run. + // + // A filter is a colon-separated list of glob (not regex) patterns, + // optionally followed by a '-' and a colon-separated list of + // negative patterns (tests to exclude). A test is run if it + // matches one of the positive patterns and does not match any of + // the negative patterns. + // + // For example, *A*:Foo.* is a filter that matches any string that + // contains the character 'A' or starts with "Foo.". + bool should_run() const; + + // Returns the result of the test. + const TestResult* result() const; + + private: +#if GTEST_HAS_DEATH_TEST + friend class internal::DefaultDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + friend class Test; + friend class TestCase; + friend class internal::TestInfoImpl; + friend class internal::UnitTestImpl; + friend TestInfo* internal::MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + internal::TypeId fixture_class_id, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + internal::TestFactoryBase* factory); + + // Returns true if this test matches the user-specified filter. + bool matches_filter() const; + + // Increments the number of death tests encountered in this test so + // far. + int increment_death_test_count(); + + // Accessors for the implementation object. + internal::TestInfoImpl* impl() { return impl_; } + const internal::TestInfoImpl* impl() const { return impl_; } + + // Constructs a TestInfo object. The newly constructed instance assumes + // ownership of the factory object. + TestInfo(const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory); + + // An opaque implementation object. + internal::TestInfoImpl* impl_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); +}; + +// A test case, which consists of a vector of TestInfos. +// +// TestCase is not copyable. +class GTEST_API_ TestCase { + public: + // Creates a TestCase with the given name. + // + // TestCase does NOT have a default constructor. Always use this + // constructor to create a TestCase object. + // + // Arguments: + // + // name: name of the test case + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase(const char* name, const char* comment, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Destructor of TestCase. + virtual ~TestCase(); + + // Gets the name of the TestCase. + const char* name() const { return name_.c_str(); } + + // Returns the test case comment. + const char* comment() const { return comment_.c_str(); } + + // Returns true if any test in this test case should run. + bool should_run() const { return should_run_; } + + // Gets the number of successful tests in this test case. + int successful_test_count() const; + + // Gets the number of failed tests in this test case. + int failed_test_count() const; + + // Gets the number of disabled tests in this test case. + int disabled_test_count() const; + + // Get the number of tests in this test case that should run. + int test_to_run_count() const; + + // Gets the number of all tests in this test case. + int total_test_count() const; + + // Returns true iff the test case passed. + bool Passed() const { return !Failed(); } + + // Returns true iff the test case failed. + bool Failed() const { return failed_test_count() > 0; } + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + const TestInfo* GetTestInfo(int i) const; + + private: + friend class Test; + friend class internal::UnitTestImpl; + + // Gets the (mutable) vector of TestInfos in this TestCase. + std::vector& test_info_list() { return test_info_list_; } + + // Gets the (immutable) vector of TestInfos in this TestCase. + const std::vector& test_info_list() const { + return test_info_list_; + } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + TestInfo* GetMutableTestInfo(int i); + + // Sets the should_run member. + void set_should_run(bool should) { should_run_ = should; } + + // Adds a TestInfo to this test case. Will delete the TestInfo upon + // destruction of the TestCase object. + void AddTestInfo(TestInfo * test_info); + + // Clears the results of all tests in this test case. + void ClearResult(); + + // Clears the results of all tests in the given test case. + static void ClearTestCaseResult(TestCase* test_case) { + test_case->ClearResult(); + } + + // Runs every test in this TestCase. + void Run(); + + // Returns true iff test passed. + static bool TestPassed(const TestInfo * test_info); + + // Returns true iff test failed. + static bool TestFailed(const TestInfo * test_info); + + // Returns true iff test is disabled. + static bool TestDisabled(const TestInfo * test_info); + + // Returns true if the given test should run. + static bool ShouldRunTest(const TestInfo *test_info); + + // Shuffles the tests in this test case. + void ShuffleTests(internal::Random* random); + + // Restores the test order to before the first shuffle. + void UnshuffleTests(); + + // Name of the test case. + internal::String name_; + // Comment on the test case. + internal::String comment_; + // The vector of TestInfos in their original order. It owns the + // elements in the vector. + std::vector test_info_list_; + // Provides a level of indirection for the test list to allow easy + // shuffling and restoring the test order. The i-th element in this + // vector is the index of the i-th test in the shuffled test list. + std::vector test_indices_; + // Pointer to the function that sets up the test case. + Test::SetUpTestCaseFunc set_up_tc_; + // Pointer to the function that tears down the test case. + Test::TearDownTestCaseFunc tear_down_tc_; + // True iff any test in this test case should run. + bool should_run_; + // Elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + + // We disallow copying TestCases. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); +}; + +// An Environment object is capable of setting up and tearing down an +// environment. The user should subclass this to define his own +// environment(s). +// +// An Environment object does the set-up and tear-down in virtual +// methods SetUp() and TearDown() instead of the constructor and the +// destructor, as: +// +// 1. You cannot safely throw from a destructor. This is a problem +// as in some cases Google Test is used where exceptions are enabled, and +// we may want to implement ASSERT_* using exceptions where they are +// available. +// 2. You cannot use ASSERT_* directly in a constructor or +// destructor. +class Environment { + public: + // The d'tor is virtual as we need to subclass Environment. + virtual ~Environment() {} + + // Override this to define how to set up the environment. + virtual void SetUp() {} + + // Override this to define how to tear down the environment. + virtual void TearDown() {} + private: + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } +}; + +// The interface for tracing execution of tests. The methods are organized in +// the order the corresponding events are fired. +class TestEventListener { + public: + virtual ~TestEventListener() {} + + // Fired before any test activity starts. + virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; + + // Fired before each iteration of tests starts. There may be more than + // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration + // index, starting from 0. + virtual void OnTestIterationStart(const UnitTest& unit_test, + int iteration) = 0; + + // Fired before environment set-up for each iteration of tests starts. + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; + + // Fired after environment set-up for each iteration of tests ends. + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; + + // Fired before the test case starts. + virtual void OnTestCaseStart(const TestCase& test_case) = 0; + + // Fired before the test starts. + virtual void OnTestStart(const TestInfo& test_info) = 0; + + // Fired after a failed assertion or a SUCCESS(). + virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; + + // Fired after the test ends. + virtual void OnTestEnd(const TestInfo& test_info) = 0; + + // Fired after the test case ends. + virtual void OnTestCaseEnd(const TestCase& test_case) = 0; + + // Fired before environment tear-down for each iteration of tests starts. + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; + + // Fired after environment tear-down for each iteration of tests ends. + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; + + // Fired after each iteration of tests finishes. + virtual void OnTestIterationEnd(const UnitTest& unit_test, + int iteration) = 0; + + // Fired after all test activities have ended. + virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; +}; + +// The convenience class for users who need to override just one or two +// methods and are not concerned that a possible change to a signature of +// the methods they override will not be caught during the build. For +// comments about each method please see the definition of TestEventListener +// above. +class EmptyTestEventListener : public TestEventListener { + public: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} + virtual void OnTestStart(const TestInfo& /*test_info*/) {} + virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} + virtual void OnTestEnd(const TestInfo& /*test_info*/) {} + virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} + virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} +}; + +// TestEventListeners lets users add listeners to track events in Google Test. +class GTEST_API_ TestEventListeners { + public: + TestEventListeners(); + ~TestEventListeners(); + + // Appends an event listener to the end of the list. Google Test assumes + // the ownership of the listener (i.e. it will delete the listener when + // the test program finishes). + void Append(TestEventListener* listener); + + // Removes the given event listener from the list and returns it. It then + // becomes the caller's responsibility to delete the listener. Returns + // NULL if the listener is not found in the list. + TestEventListener* Release(TestEventListener* listener); + + // Returns the standard listener responsible for the default console + // output. Can be removed from the listeners list to shut down default + // console output. Note that removing this object from the listener list + // with Release transfers its ownership to the caller and makes this + // function return NULL the next time. + TestEventListener* default_result_printer() const { + return default_result_printer_; + } + + // Returns the standard listener responsible for the default XML output + // controlled by the --gtest_output=xml flag. Can be removed from the + // listeners list by users who want to shut down the default XML output + // controlled by this flag and substitute it with custom one. Note that + // removing this object from the listener list with Release transfers its + // ownership to the caller and makes this function return NULL the next + // time. + TestEventListener* default_xml_generator() const { + return default_xml_generator_; + } + + private: + friend class TestCase; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::NoExecDeathTest; + friend class internal::TestEventListenersAccessor; + friend class internal::TestInfoImpl; + friend class internal::UnitTestImpl; + + // Returns repeater that broadcasts the TestEventListener events to all + // subscribers. + TestEventListener* repeater(); + + // Sets the default_result_printer attribute to the provided listener. + // The listener is also added to the listener list and previous + // default_result_printer is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultResultPrinter(TestEventListener* listener); + + // Sets the default_xml_generator attribute to the provided listener. The + // listener is also added to the listener list and previous + // default_xml_generator is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultXmlGenerator(TestEventListener* listener); + + // Controls whether events will be forwarded by the repeater to the + // listeners in the list. + bool EventForwardingEnabled() const; + void SuppressEventForwarding(); + + // The actual list of listeners. + internal::TestEventRepeater* repeater_; + // Listener responsible for the standard result output. + TestEventListener* default_result_printer_; + // Listener responsible for the creation of the XML output file. + TestEventListener* default_xml_generator_; + + // We disallow copying TestEventListeners. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); +}; + +// A UnitTest consists of a vector of TestCases. +// +// This is a singleton class. The only instance of UnitTest is +// created when UnitTest::GetInstance() is first called. This +// instance is never deleted. +// +// UnitTest is not copyable. +// +// This class is thread-safe as long as the methods are called +// according to their specification. +class GTEST_API_ UnitTest { + public: + // Gets the singleton UnitTest object. The first time this method + // is called, a UnitTest object is constructed and returned. + // Consecutive calls will return the same object. + static UnitTest* GetInstance(); + + // Runs all tests in this UnitTest object and prints the result. + // Returns 0 if successful, or 1 otherwise. + // + // This method can only be called from the main thread. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + int Run() GTEST_MUST_USE_RESULT_; + + // Returns the working directory when the first TEST() or TEST_F() + // was executed. The UnitTest object owns the string. + const char* original_working_dir() const; + + // Returns the TestCase object for the test that's currently running, + // or NULL if no test is running. + const TestCase* current_test_case() const; + + // Returns the TestInfo object for the test that's currently running, + // or NULL if no test is running. + const TestInfo* current_test_info() const; + + // Returns the random seed used at the start of the current test run. + int random_seed() const; + +#if GTEST_HAS_PARAM_TEST + // Returns the ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); +#endif // GTEST_HAS_PARAM_TEST + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const; + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const; + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const; + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const; + + // Returns the list of event listeners that can be used to track events + // inside Google Test. + TestEventListeners& listeners(); + + private: + // Registers and returns a global test environment. When a test + // program is run, all global test environments will be set-up in + // the order they were registered. After all tests in the program + // have finished, all global test environments will be torn-down in + // the *reverse* order they were registered. + // + // The UnitTest object takes ownership of the given environment. + // + // This method can only be called from the main thread. + Environment* AddEnvironment(Environment* env); + + // Adds a TestPartResult to the current TestResult object. All + // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) + // eventually call this to report their results. The user code + // should use the assertion macros instead of calling this directly. + void AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, + int line_number, + const internal::String& message, + const internal::String& os_stack_trace); + + // Adds a TestProperty to the current TestResult object. If the result already + // contains a property with the same key, the value will be updated. + void RecordPropertyForCurrentTest(const char* key, const char* value); + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i); + + // Accessors for the implementation object. + internal::UnitTestImpl* impl() { return impl_; } + const internal::UnitTestImpl* impl() const { return impl_; } + + // These classes and funcions are friends as they need to access private + // members of UnitTest. + friend class Test; + friend class internal::AssertHelper; + friend class internal::ScopedTrace; + friend Environment* AddGlobalTestEnvironment(Environment* env); + friend internal::UnitTestImpl* internal::GetUnitTestImpl(); + friend void internal::ReportFailureInUnknownLocation( + TestPartResult::Type result_type, + const internal::String& message); + + // Creates an empty UnitTest. + UnitTest(); + + // D'tor + virtual ~UnitTest(); + + // Pushes a trace defined by SCOPED_TRACE() on to the per-thread + // Google Test trace stack. + void PushGTestTrace(const internal::TraceInfo& trace); + + // Pops a trace from the per-thread Google Test trace stack. + void PopGTestTrace(); + + // Protects mutable state in *impl_. This is mutable as some const + // methods need to lock it too. + mutable internal::Mutex mutex_; + + // Opaque implementation object. This field is never changed once + // the object is constructed. We don't mark it as const here, as + // doing so will cause a warning in the constructor of UnitTest. + // Mutable state in *impl_ is protected by mutex_. + internal::UnitTestImpl* impl_; + + // We disallow copying UnitTest. + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); +}; + +// A convenient wrapper for adding an environment for the test +// program. +// +// You should call this before RUN_ALL_TESTS() is called, probably in +// main(). If you use gtest_main, you need to call this before main() +// starts for it to take effect. For example, you can define a global +// variable like this: +// +// testing::Environment* const foo_env = +// testing::AddGlobalTestEnvironment(new FooEnvironment); +// +// However, we strongly recommend you to write your own main() and +// call AddGlobalTestEnvironment() there, as relying on initialization +// of global variables makes the code harder to read and may cause +// problems when you register multiple environments from different +// translation units and the environments have dependencies among them +// (remember that the compiler doesn't guarantee the order in which +// global variables from different translation units are initialized). +inline Environment* AddGlobalTestEnvironment(Environment* env) { + return UnitTest::GetInstance()->AddEnvironment(env); +} + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +GTEST_API_ void InitGoogleTest(int* argc, char** argv); + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); + +namespace internal { + +// These overloaded versions handle ::std::string and ::std::wstring. +GTEST_API_ inline String FormatForFailureMessage(const ::std::string& str) { + return (Message() << '"' << str << '"').GetString(); +} + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ inline String FormatForFailureMessage(const ::std::wstring& wstr) { + return (Message() << "L\"" << wstr << '"').GetString(); +} +#endif // GTEST_HAS_STD_WSTRING + +// These overloaded versions handle ::string and ::wstring. +#if GTEST_HAS_GLOBAL_STRING +GTEST_API_ inline String FormatForFailureMessage(const ::string& str) { + return (Message() << '"' << str << '"').GetString(); +} +#endif // GTEST_HAS_GLOBAL_STRING + +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_API_ inline String FormatForFailureMessage(const ::wstring& wstr) { + return (Message() << "L\"" << wstr << '"').GetString(); +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) +// operand to be used in a failure message. The type (but not value) +// of the other operand may affect the format. This allows us to +// print a char* as a raw pointer when it is compared against another +// char*, and print it as a C string when it is compared against an +// std::string object, for example. +// +// The default implementation ignores the type of the other operand. +// Some specialized versions are used to handle formatting wide or +// narrow C strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +String FormatForComparisonFailureMessage(const T1& value, + const T2& /* other_operand */) { + return FormatForFailureMessage(value); +} + +// The helper function for {ASSERT|EXPECT}_EQ. +template +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { +#ifdef _MSC_VER +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4389) // Temporarily disables warning on + // signed/unsigned mismatch. +#endif + + if (expected == actual) { + return AssertionSuccess(); + } + +#ifdef _MSC_VER +#pragma warning(pop) // Restores the warning state. +#endif + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// With this overloaded version, we allow anonymous enums to be used +// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums +// can be implicitly cast to BiggestInt. +GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual); + +// The helper class for {ASSERT|EXPECT}_EQ. The template argument +// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() +// is a null pointer literal. The following default implementation is +// for lhs_is_null_literal being false. +template +class EqHelper { + public: + // This templatized version is for the general case. + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // With this overloaded version, we allow anonymous enums to be used + // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous + // enums can be implicitly cast to BiggestInt. + // + // Even though its body looks the same as the above version, we + // cannot merge the two, as it will make anonymous enums unhappy. + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } +}; + +// This specialization is used when the first argument to ASSERT_EQ() +// is a null pointer literal. +template <> +class EqHelper { + public: + // We define two overloaded versions of Compare(). The first + // version will be picked when the second argument to ASSERT_EQ() is + // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or + // EXPECT_EQ(false, a_bool). + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // This version will be picked when the second argument to + // ASSERT_EQ() is a pointer, e.g. ASSERT_EQ(NULL, a_pointer). + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& /* expected */, + T2* actual) { + // We already know that 'expected' is a null pointer. + return CmpHelperEQ(expected_expression, actual_expression, + static_cast(NULL), actual); + } +}; + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste +// of similar code. +// +// For each templatized helper function, we also define an overloaded +// version for BiggestInt in order to reduce code bloat and allow +// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled +// with gcc 4. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +template \ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + const T1& val1, const T2& val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + Message msg;\ + msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + return AssertionFailure(msg);\ + }\ +}\ +GTEST_API_ AssertionResult CmpHelper##op_name(\ + const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) + +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + +// Implements the helper function for {ASSERT|EXPECT}_NE +GTEST_IMPL_CMP_HELPER_(NE, !=); +// Implements the helper function for {ASSERT|EXPECT}_LE +GTEST_IMPL_CMP_HELPER_(LE, <=); +// Implements the helper function for {ASSERT|EXPECT}_LT +GTEST_IMPL_CMP_HELPER_(LT, < ); +// Implements the helper function for {ASSERT|EXPECT}_GE +GTEST_IMPL_CMP_HELPER_(GE, >=); +// Implements the helper function for {ASSERT|EXPECT}_GT +GTEST_IMPL_CMP_HELPER_(GT, > ); + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRNE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + + +// Helper function for *_STREQ on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual); + +// Helper function for *_STRNE on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2); + +} // namespace internal + +// IsSubstring() and IsNotSubstring() are intended to be used as the +// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by +// themselves. They check whether needle is a substring of haystack +// (NULL is considered a substring of itself only), and return an +// appropriate error message when they fail. +// +// The {needle,haystack}_expr arguments are the stringified +// expressions that generated the two real arguments. +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +// Helper template function for comparing floating-points. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, + const char* actual_expression, + RawType expected, + RawType actual) { + const FloatingPoint lhs(expected), rhs(actual); + + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + StrStream expected_ss; + expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << expected; + + StrStream actual_ss; + actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << actual; + + return EqFailure(expected_expression, + actual_expression, + StrStreamToString(&expected_ss), + StrStreamToString(&actual_ss), + false); +} + +// Helper function for implementing ASSERT_NEAR. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error); + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// A class that enables one to stream messages to assertion macros +class GTEST_API_ AssertHelper { + public: + // Constructor. + AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message); + ~AssertHelper(); + + // Message assignment is a semantic trick to enable assertion + // streaming; see the GTEST_MESSAGE_ macro below. + void operator=(const Message& message) const; + + private: + // We put our data in a struct so that the size of the AssertHelper class can + // be as small as possible. This is important because gcc is incapable of + // re-using stack space even for temporary variables, so every EXPECT_EQ + // reserves stack space for another AssertHelper. + struct AssertHelperData { + AssertHelperData(TestPartResult::Type t, + const char* srcfile, + int line_num, + const char* msg) + : type(t), file(srcfile), line(line_num), message(msg) { } + + TestPartResult::Type const type; + const char* const file; + int const line; + String const message; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); + }; + + AssertHelperData* const data_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); +}; + +} // namespace internal + +#if GTEST_HAS_PARAM_TEST +// The abstract base class that all value-parameterized tests inherit from. +// +// This class adds support for accessing the test parameter value via +// the GetParam() method. +// +// Use it with one of the parameter generator defining functions, like Range(), +// Values(), ValuesIn(), Bool(), and Combine(). +// +// class FooTest : public ::testing::TestWithParam { +// protected: +// FooTest() { +// // Can use GetParam() here. +// } +// virtual ~FooTest() { +// // Can use GetParam() here. +// } +// virtual void SetUp() { +// // Can use GetParam() here. +// } +// virtual void TearDown { +// // Can use GetParam() here. +// } +// }; +// TEST_P(FooTest, DoesBar) { +// // Can use GetParam() method here. +// Foo foo; +// ASSERT_TRUE(foo.DoesBar(GetParam())); +// } +// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); + +template +class TestWithParam : public Test { + public: + typedef T ParamType; + + // The current parameter value. Is also available in the test fixture's + // constructor. + const ParamType& GetParam() const { return *parameter_; } + + private: + // Sets parameter value. The caller is responsible for making sure the value + // remains alive and unchanged throughout the current test. + static void SetParam(const ParamType* parameter) { + parameter_ = parameter; + } + + // Static value used for accessing parameter during a test lifetime. + static const ParamType* parameter_; + + // TestClass must be a subclass of TestWithParam. + template friend class internal::ParameterizedTestFactory; +}; + +template +const T* TestWithParam::parameter_ = NULL; + +#endif // GTEST_HAS_PARAM_TEST + +// Macros for indicating success/failure in test code. + +// ADD_FAILURE unconditionally adds a failure to the current test. +// SUCCEED generates a success - it doesn't automatically make the +// current test successful, as a test is only successful when it has +// no failure. +// +// EXPECT_* verifies that a certain condition is satisfied. If not, +// it behaves like ADD_FAILURE. In particular: +// +// EXPECT_TRUE verifies that a Boolean condition is true. +// EXPECT_FALSE verifies that a Boolean condition is false. +// +// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except +// that they will also abort the current function on failure. People +// usually want the fail-fast behavior of FAIL and ASSERT_*, but those +// writing data-driven tests often find themselves using ADD_FAILURE +// and EXPECT_* more. +// +// Examples: +// +// EXPECT_TRUE(server.StatusIsOK()); +// ASSERT_FALSE(server.HasPendingRequest(port)) +// << "There are still pending requests " << "on port " << port; + +// Generates a nonfatal failure with a generic message. +#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") + +// Generates a fatal failure with a generic message. +#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") + +// Define this macro to 1 to omit the definition of FAIL(), which is a +// generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_FAIL +#define FAIL() GTEST_FAIL() +#endif + +// Generates a success with a generic message. +#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") + +// Define this macro to 1 to omit the definition of SUCCEED(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_SUCCEED +#define SUCCEED() GTEST_SUCCEED() +#endif + +// Macros for testing exceptions. +// +// * {ASSERT|EXPECT}_THROW(statement, expected_exception): +// Tests that the statement throws the expected exception. +// * {ASSERT|EXPECT}_NO_THROW(statement): +// Tests that the statement doesn't throw any exception. +// * {ASSERT|EXPECT}_ANY_THROW(statement): +// Tests that the statement throws an exception. + +#define EXPECT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) +#define EXPECT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define EXPECT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define ASSERT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) +#define ASSERT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) +#define ASSERT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) + +// Boolean assertions. Condition can be either a Boolean expression or an +// AssertionResult. For more information on how to use AssertionResult with +// these macros see comments on that class. +#define EXPECT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_NONFATAL_FAILURE_) +#define EXPECT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_NONFATAL_FAILURE_) +#define ASSERT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_FATAL_FAILURE_) +#define ASSERT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_FATAL_FAILURE_) + +// Includes the auto-generated header that implements a family of +// generic predicate assertion macros. +#include + +// Macros for testing equalities and inequalities. +// +// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual +// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 +// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 +// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 +// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 +// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 +// +// When they are not, Google Test prints both the tested expressions and +// their actual values. The values must be compatible built-in types, +// or you will get a compiler error. By "compatible" we mean that the +// values can be compared by the respective operator. +// +// Note: +// +// 1. It is possible to make a user-defined type work with +// {ASSERT|EXPECT}_??(), but that requires overloading the +// comparison operators and is thus discouraged by the Google C++ +// Usage Guide. Therefore, you are advised to use the +// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are +// equal. +// +// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on +// pointers (in particular, C strings). Therefore, if you use it +// with two C strings, you are testing how their locations in memory +// are related, not how their content is related. To compare two C +// strings by content, use {ASSERT|EXPECT}_STR*(). +// +// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to +// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you +// what the actual value is when it fails, and similarly for the +// other comparisons. +// +// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() +// evaluate their arguments, which is undefined. +// +// 5. These macros evaluate their arguments exactly once. +// +// Examples: +// +// EXPECT_NE(5, Foo()); +// EXPECT_EQ(NULL, a_pointer); +// ASSERT_LT(i, array_size); +// ASSERT_GT(records.size(), 0) << "There is no record left."; + +#define EXPECT_EQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define EXPECT_NE(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) +#define EXPECT_LE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define EXPECT_LT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define EXPECT_GE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define EXPECT_GT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +#define ASSERT_EQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define ASSERT_NE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) +#define ASSERT_LE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define ASSERT_LT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define ASSERT_GE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define ASSERT_GT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +// C String Comparisons. All tests treat NULL and any non-NULL string +// as different. Two NULLs are equal. +// +// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 +// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 +// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case +// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case +// +// For wide or narrow string objects, you can use the +// {ASSERT|EXPECT}_??() macros. +// +// Don't depend on the order in which the arguments are evaluated, +// which is undefined. +// +// These macros evaluate their arguments exactly once. + +#define EXPECT_STREQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define EXPECT_STRNE(s1, s2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define EXPECT_STRCASEEQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define EXPECT_STRCASENE(s1, s2)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +#define ASSERT_STREQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define ASSERT_STRNE(s1, s2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define ASSERT_STRCASEEQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define ASSERT_STRCASENE(s1, s2)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +// Macros for comparing floating-point numbers. +// +// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): +// Tests that two float values are almost equal. +// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): +// Tests that two double values are almost equal. +// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): +// Tests that v1 and v2 are within the given distance to each other. +// +// Google Test uses ULP-based comparison to automatically pick a default +// error bound that is appropriate for the operands. See the +// FloatingPoint template class in gtest-internal.h if you are +// interested in the implementation details. + +#define EXPECT_FLOAT_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_DOUBLE_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_FLOAT_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_DOUBLE_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_NEAR(val1, val2, abs_error)\ + EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +#define ASSERT_NEAR(val1, val2, abs_error)\ + ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +// These predicate format functions work on floating-point values, and +// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. +// +// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2); +GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2); + + +#if GTEST_OS_WINDOWS + +// Macros that test for HRESULT failure and success, these are only useful +// on Windows, and rely on Windows SDK macros and APIs to compile. +// +// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) +// +// When expr unexpectedly fails or succeeds, Google Test prints the +// expected result and the actual result with both a human-readable +// string representation of the error, if available, as well as the +// hex result code. +#define EXPECT_HRESULT_SUCCEEDED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +#define ASSERT_HRESULT_SUCCEEDED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +#define EXPECT_HRESULT_FAILED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +#define ASSERT_HRESULT_FAILED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +#endif // GTEST_OS_WINDOWS + +// Macros that execute statement and check that it doesn't generate new fatal +// failures in the current thread. +// +// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); +// +// Examples: +// +// EXPECT_NO_FATAL_FAILURE(Process()); +// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; +// +#define ASSERT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) +#define EXPECT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) + +// Causes a trace (including the source file path, the current line +// number, and the given message) to be included in every test failure +// message generated by code in the current scope. The effect is +// undone when the control leaves the current scope. +// +// The message argument can be anything streamable to std::ostream. +// +// In the implementation, we include the current line number as part +// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s +// to appear in the same block - as long as they are on different +// lines. +#define SCOPED_TRACE(message) \ + ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ + __FILE__, __LINE__, ::testing::Message() << (message)) + +namespace internal { + +// This template is declared, but intentionally undefined. +template +struct StaticAssertTypeEqHelper; + +template +struct StaticAssertTypeEqHelper {}; + +} // namespace internal + +// Compile-time assertion for type equality. +// StaticAssertTypeEq() compiles iff type1 and type2 are +// the same type. The value it returns is not interesting. +// +// Instead of making StaticAssertTypeEq a class template, we make it a +// function template that invokes a helper class template. This +// prevents a user from misusing StaticAssertTypeEq by +// defining objects of that type. +// +// CAVEAT: +// +// When used inside a method of a class template, +// StaticAssertTypeEq() is effective ONLY IF the method is +// instantiated. For example, given: +// +// template class Foo { +// public: +// void Bar() { testing::StaticAssertTypeEq(); } +// }; +// +// the code: +// +// void Test1() { Foo foo; } +// +// will NOT generate a compiler error, as Foo::Bar() is never +// actually instantiated. Instead, you need: +// +// void Test2() { Foo foo; foo.Bar(); } +// +// to cause a compiler error. +template +bool StaticAssertTypeEq() { + internal::StaticAssertTypeEqHelper(); + return true; +} + +// Defines a test. +// +// The first parameter is the name of the test case, and the second +// parameter is the name of the test within the test case. +// +// The convention is to end the test case name with "Test". For +// example, a test case for the Foo class can be named FooTest. +// +// The user should put his test code between braces after using this +// macro. Example: +// +// TEST(FooTest, InitializesCorrectly) { +// Foo foo; +// EXPECT_TRUE(foo.StatusIsOK()); +// } + +// Note that we call GetTestTypeId() instead of GetTypeId< +// ::testing::Test>() here to get the type ID of testing::Test. This +// is to work around a suspected linker bug when using Google Test as +// a framework on Mac OS X. The bug causes GetTypeId< +// ::testing::Test>() to return different values depending on whether +// the call is from the Google Test framework itself or from user test +// code. GetTestTypeId() is guaranteed to always return the same +// value, as it always calls GetTypeId<>() from the Google Test +// framework. +#define GTEST_TEST(test_case_name, test_name)\ + GTEST_TEST_(test_case_name, test_name, \ + ::testing::Test, ::testing::internal::GetTestTypeId()) + +// Define this macro to 1 to omit the definition of TEST(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_TEST +#define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) +#endif + +// Defines a test that uses a test fixture. +// +// The first parameter is the name of the test fixture class, which +// also doubles as the test case name. The second parameter is the +// name of the test within the test case. +// +// A test fixture class must be declared earlier. The user should put +// his test code between braces after using this macro. Example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { b_.AddElement(3); } +// +// Foo a_; +// Foo b_; +// }; +// +// TEST_F(FooTest, InitializesCorrectly) { +// EXPECT_TRUE(a_.StatusIsOK()); +// } +// +// TEST_F(FooTest, ReturnsElementCountCorrectly) { +// EXPECT_EQ(0, a_.size()); +// EXPECT_EQ(1, b_.size()); +// } + +#define TEST_F(test_fixture, test_name)\ + GTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId()) + +// Use this macro in main() to run all tests. It returns 0 if all +// tests are successful, or 1 otherwise. +// +// RUN_ALL_TESTS() should be invoked after the command line has been +// parsed by InitGoogleTest(). + +#define RUN_ALL_TESTS()\ + (::testing::UnitTest::GetInstance()->Run()) + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_pred_impl.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_pred_impl.h new file mode 100644 index 00000000..e1e2f8c4 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_pred_impl.h @@ -0,0 +1,368 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on 10/02/2008 by command +// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! +// +// Implements a family of generic predicate assertion macros. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Makes sure this header is not included before gtest.h. +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#error Do not include gtest_pred_impl.h directly. Include gtest.h instead. +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ + +// This header implements a family of generic predicate assertion +// macros: +// +// ASSERT_PRED_FORMAT1(pred_format, v1) +// ASSERT_PRED_FORMAT2(pred_format, v1, v2) +// ... +// +// where pred_format is a function or functor that takes n (in the +// case of ASSERT_PRED_FORMATn) values and their source expression +// text, and returns a testing::AssertionResult. See the definition +// of ASSERT_EQ in gtest.h for an example. +// +// If you don't care about formatting, you can use the more +// restrictive version: +// +// ASSERT_PRED1(pred, v1) +// ASSERT_PRED2(pred, v1, v2) +// ... +// +// where pred is an n-ary function or functor that returns bool, +// and the values v1, v2, ..., must support the << operator for +// streaming to std::ostream. +// +// We also define the EXPECT_* variations. +// +// For now we only support predicates whose arity is at most 5. +// Please email googletestframework@googlegroups.com if you need +// support for higher arities. + +// GTEST_ASSERT_ is the basic statement to which all of the assertions +// in this file reduce. Don't use this in your code. + +#define GTEST_ASSERT_(expression, on_failure) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar = (expression)) \ + ; \ + else \ + on_failure(gtest_ar.failure_message()) + + +// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +template +AssertionResult AssertPred1Helper(const char* pred_text, + const char* e1, + Pred pred, + const T1& v1) { + if (pred(v1)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. +// Don't use this in your code. +#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, v1),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +#define GTEST_PRED1_(pred, v1, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ + #v1, \ + pred, \ + v1), on_failure) + +// Unary predicate assertion macros. +#define EXPECT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +template +AssertionResult AssertPred2Helper(const char* pred_text, + const char* e1, + const char* e2, + Pred pred, + const T1& v1, + const T2& v2) { + if (pred(v1, v2)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. +// Don't use this in your code. +#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +#define GTEST_PRED2_(pred, v1, v2, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ + #v1, \ + #v2, \ + pred, \ + v1, \ + v2), on_failure) + +// Binary predicate assertion macros. +#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +template +AssertionResult AssertPred3Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3) { + if (pred(v1, v2, v3)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. +// Don't use this in your code. +#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + pred, \ + v1, \ + v2, \ + v3), on_failure) + +// Ternary predicate assertion macros. +#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +template +AssertionResult AssertPred4Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) { + if (pred(v1, v2, v3, v4)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. +// Don't use this in your code. +#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4), on_failure) + +// 4-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +template +AssertionResult AssertPred5Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + const char* e5, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) { + if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); + + Message msg; + msg << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ", " + << e5 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4 + << "\n" << e5 << " evaluates to " << v5; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. +// Don't use this in your code. +#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + #v5, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4, \ + v5), on_failure) + +// 5-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) + + + +#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_prod.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_prod.h new file mode 100644 index 00000000..da80ddc6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/gtest_prod.h @@ -0,0 +1,58 @@ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Google C++ Testing Framework definitions useful in production code. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ + +// When you need to test the private or protected members of a class, +// use the FRIEND_TEST macro to declare your tests as friends of the +// class. For example: +// +// class MyClass { +// private: +// void MyMethod(); +// FRIEND_TEST(MyClassTest, MyMethod); +// }; +// +// class MyClassTest : public testing::Test { +// // ... +// }; +// +// TEST_F(MyClassTest, MyMethod) { +// // Can call MyClass::MyMethod() here. +// } + +#define FRIEND_TEST(test_case_name, test_name)\ +friend class test_case_name##_##test_name##_Test + +#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-death-test-internal.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-death-test-internal.h new file mode 100644 index 00000000..e4330848 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-death-test-internal.h @@ -0,0 +1,275 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines internal utilities needed for implementing +// death tests. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ + +#include + +namespace testing { +namespace internal { + +GTEST_DECLARE_string_(internal_run_death_test); + +// Names of the flags (needed for parsing Google Test flags). +const char kDeathTestStyleFlag[] = "death_test_style"; +const char kDeathTestUseFork[] = "death_test_use_fork"; +const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; + +#if GTEST_HAS_DEATH_TEST + +// DeathTest is a class that hides much of the complexity of the +// GTEST_DEATH_TEST_ macro. It is abstract; its static Create method +// returns a concrete class that depends on the prevailing death test +// style, as defined by the --gtest_death_test_style and/or +// --gtest_internal_run_death_test flags. + +// In describing the results of death tests, these terms are used with +// the corresponding definitions: +// +// exit status: The integer exit information in the format specified +// by wait(2) +// exit code: The integer code passed to exit(3), _exit(2), or +// returned from main() +class GTEST_API_ DeathTest { + public: + // Create returns false if there was an error determining the + // appropriate action to take for the current death test; for example, + // if the gtest_death_test_style flag is set to an invalid value. + // The LastMessage method will return a more detailed message in that + // case. Otherwise, the DeathTest pointer pointed to by the "test" + // argument is set. If the death test should be skipped, the pointer + // is set to NULL; otherwise, it is set to the address of a new concrete + // DeathTest object that controls the execution of the current test. + static bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); + DeathTest(); + virtual ~DeathTest() { } + + // A helper class that aborts a death test when it's deleted. + class ReturnSentinel { + public: + explicit ReturnSentinel(DeathTest* test) : test_(test) { } + ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } + private: + DeathTest* const test_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); + } GTEST_ATTRIBUTE_UNUSED_; + + // An enumeration of possible roles that may be taken when a death + // test is encountered. EXECUTE means that the death test logic should + // be executed immediately. OVERSEE means that the program should prepare + // the appropriate environment for a child process to execute the death + // test, then wait for it to complete. + enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; + + // An enumeration of the two reasons that a test might be aborted. + enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_DID_NOT_DIE }; + + // Assumes one of the above roles. + virtual TestRole AssumeRole() = 0; + + // Waits for the death test to finish and returns its status. + virtual int Wait() = 0; + + // Returns true if the death test passed; that is, the test process + // exited during the test, its exit status matches a user-supplied + // predicate, and its stderr output matches a user-supplied regular + // expression. + // The user-supplied predicate may be a macro expression rather + // than a function pointer or functor, or else Wait and Passed could + // be combined. + virtual bool Passed(bool exit_status_ok) = 0; + + // Signals that the death test did not die as expected. + virtual void Abort(AbortReason reason) = 0; + + // Returns a human-readable outcome message regarding the outcome of + // the last death test. + static const char* LastMessage(); + + static void set_last_death_test_message(const String& message); + + private: + // A string containing a description of the outcome of the last death test. + static String last_death_test_message_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); +}; + +// Factory interface for death tests. May be mocked out for testing. +class DeathTestFactory { + public: + virtual ~DeathTestFactory() { } + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) = 0; +}; + +// A concrete DeathTestFactory implementation for normal use. +class DefaultDeathTestFactory : public DeathTestFactory { + public: + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); +}; + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +GTEST_API_ bool ExitedUnsuccessfully(int exit_status); + +// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, +// ASSERT_EXIT*, and EXPECT_EXIT*. +#define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + const ::testing::internal::RE& gtest_regex = (regex); \ + ::testing::internal::DeathTest* gtest_dt; \ + if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ + __FILE__, __LINE__, >est_dt)) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + if (gtest_dt != NULL) { \ + ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ + gtest_dt_ptr(gtest_dt); \ + switch (gtest_dt->AssumeRole()) { \ + case ::testing::internal::DeathTest::OVERSEE_TEST: \ + if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + break; \ + case ::testing::internal::DeathTest::EXECUTE_TEST: { \ + ::testing::internal::DeathTest::ReturnSentinel \ + gtest_sentinel(gtest_dt); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ + break; \ + } \ + } \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ + fail(::testing::internal::DeathTest::LastMessage()) +// The symbol "fail" here expands to something into which a message +// can be streamed. + +// A class representing the parsed contents of the +// --gtest_internal_run_death_test flag, as it existed when +// RUN_ALL_TESTS was called. +class InternalRunDeathTestFlag { + public: + InternalRunDeathTestFlag(const String& a_file, + int a_line, + int an_index, + int a_write_fd) + : file_(a_file), line_(a_line), index_(an_index), + write_fd_(a_write_fd) {} + + ~InternalRunDeathTestFlag() { + if (write_fd_ >= 0) + posix::Close(write_fd_); + } + + String file() const { return file_; } + int line() const { return line_; } + int index() const { return index_; } + int write_fd() const { return write_fd_; } + + private: + String file_; + int line_; + int index_; + int write_fd_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); +}; + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); + +#else // GTEST_HAS_DEATH_TEST + +// This macro is used for implementing macros such as +// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where +// death tests are not supported. Those macros must compile on such systems +// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on +// systems that support death tests. This allows one to write such a macro +// on a system that does not support death tests and be sure that it will +// compile on a death-test supporting system. +// +// Parameters: +// statement - A statement that a macro such as EXPECT_DEATH would test +// for program termination. This macro has to make sure this +// statement is compiled but not executed, to ensure that +// EXPECT_DEATH_IF_SUPPORTED compiles with a certain +// parameter iff EXPECT_DEATH compiles with it. +// regex - A regex that a macro such as EXPECT_DEATH would use to test +// the output of statement. This parameter has to be +// compiled but not evaluated by this macro, to ensure that +// this macro only accepts expressions that a macro such as +// EXPECT_DEATH would accept. +// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED +// and a return statement for ASSERT_DEATH_IF_SUPPORTED. +// This ensures that ASSERT_DEATH_IF_SUPPORTED will not +// compile inside functions where ASSERT_DEATH doesn't +// compile. +// +// The branch that has an always false condition is used to ensure that +// statement and regex are compiled (and thus syntactically correct) but +// never executed. The unreachable code macro protects the terminator +// statement from generating an 'unreachable code' warning in case +// statement unconditionally returns or throws. The Message constructor at +// the end allows the syntax of streaming additional messages into the +// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. +#define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_LOG_(WARNING) \ + << "Death tests are not supported on this platform.\n" \ + << "Statement '" #statement "' cannot be verified."; \ + } else if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::RE::PartialMatch(".*", (regex)); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + terminator; \ + } else \ + ::testing::Message() + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-filepath.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-filepath.h new file mode 100644 index 00000000..4b76d795 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-filepath.h @@ -0,0 +1,210 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: keith.ray@gmail.com (Keith Ray) +// +// Google Test filepath utilities +// +// This header file declares classes and functions used internally by +// Google Test. They are subject to change without notice. +// +// This file is #included in . +// Do not include this header file separately! + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ + +#include + +namespace testing { +namespace internal { + +// FilePath - a class for file and directory pathname manipulation which +// handles platform-specific conventions (like the pathname separator). +// Used for helper functions for naming files in a directory for xml output. +// Except for Set methods, all methods are const or static, which provides an +// "immutable value object" -- useful for peace of mind. +// A FilePath with a value ending in a path separator ("like/this/") represents +// a directory, otherwise it is assumed to represent a file. In either case, +// it may or may not represent an actual file or directory in the file system. +// Names are NOT checked for syntax correctness -- no checking for illegal +// characters, malformed paths, etc. + +class GTEST_API_ FilePath { + public: + FilePath() : pathname_("") { } + FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } + + explicit FilePath(const char* pathname) : pathname_(pathname) { + Normalize(); + } + + explicit FilePath(const String& pathname) : pathname_(pathname) { + Normalize(); + } + + FilePath& operator=(const FilePath& rhs) { + Set(rhs); + return *this; + } + + void Set(const FilePath& rhs) { + pathname_ = rhs.pathname_; + } + + String ToString() const { return pathname_; } + const char* c_str() const { return pathname_.c_str(); } + + // Returns the current working directory, or "" if unsuccessful. + static FilePath GetCurrentDir(); + + // Given directory = "dir", base_name = "test", number = 0, + // extension = "xml", returns "dir/test.xml". If number is greater + // than zero (e.g., 12), returns "dir/test_12.xml". + // On Windows platform, uses \ as the separator rather than /. + static FilePath MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension); + + // Given directory = "dir", relative_path = "test.xml", + // returns "dir/test.xml". + // On Windows, uses \ as the separator rather than /. + static FilePath ConcatPaths(const FilePath& directory, + const FilePath& relative_path); + + // Returns a pathname for a file that does not currently exist. The pathname + // will be directory/base_name.extension or + // directory/base_name_.extension if directory/base_name.extension + // already exists. The number will be incremented until a pathname is found + // that does not already exist. + // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. + // There could be a race condition if two or more processes are calling this + // function at the same time -- they could both pick the same filename. + static FilePath GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension); + + // Returns true iff the path is NULL or "". + bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; } + + // If input name has a trailing separator character, removes it and returns + // the name, otherwise return the name string unmodified. + // On Windows platform, uses \ as the separator, other platforms use /. + FilePath RemoveTrailingPathSeparator() const; + + // Returns a copy of the FilePath with the directory part removed. + // Example: FilePath("path/to/file").RemoveDirectoryName() returns + // FilePath("file"). If there is no directory part ("just_a_file"), it returns + // the FilePath unmodified. If there is no file part ("just_a_dir/") it + // returns an empty FilePath (""). + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveDirectoryName() const; + + // RemoveFileName returns the directory path with the filename removed. + // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". + // If the FilePath is "a_file" or "/a_file", RemoveFileName returns + // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does + // not have a file, like "just/a/dir/", it returns the FilePath unmodified. + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveFileName() const; + + // Returns a copy of the FilePath with the case-insensitive extension removed. + // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns + // FilePath("dir/file"). If a case-insensitive extension is not + // found, returns a copy of the original FilePath. + FilePath RemoveExtension(const char* extension) const; + + // Creates directories so that path exists. Returns true if successful or if + // the directories already exist; returns false if unable to create + // directories for any reason. Will also return false if the FilePath does + // not represent a directory (that is, it doesn't end with a path separator). + bool CreateDirectoriesRecursively() const; + + // Create the directory so that path exists. Returns true if successful or + // if the directory already exists; returns false if unable to create the + // directory for any reason, including if the parent directory does not + // exist. Not named "CreateDirectory" because that's a macro on Windows. + bool CreateFolder() const; + + // Returns true if FilePath describes something in the file-system, + // either a file, directory, or whatever, and that something exists. + bool FileOrDirectoryExists() const; + + // Returns true if pathname describes a directory in the file-system + // that exists. + bool DirectoryExists() const; + + // Returns true if FilePath ends with a path separator, which indicates that + // it is intended to represent a directory. Returns false otherwise. + // This does NOT check that a directory (or file) actually exists. + bool IsDirectory() const; + + // Returns true if pathname describes a root directory. (Windows has one + // root directory per disk drive.) + bool IsRootDirectory() const; + + // Returns true if pathname describes an absolute path. + bool IsAbsolutePath() const; + + private: + // Replaces multiple consecutive separators with a single separator. + // For example, "bar///foo" becomes "bar/foo". Does not eliminate other + // redundancies that might be in a pathname involving "." or "..". + // + // A pathname with multiple consecutive separators may occur either through + // user error or as a result of some scripts or APIs that generate a pathname + // with a trailing separator. On other platforms the same API or script + // may NOT generate a pathname with a trailing "/". Then elsewhere that + // pathname may have another "/" and pathname components added to it, + // without checking for the separator already being there. + // The script language and operating system may allow paths like "foo//bar" + // but some of the functions in FilePath will not handle that correctly. In + // particular, RemoveTrailingPathSeparator() only removes one separator, and + // it is called in CreateDirectoriesRecursively() assuming that it will change + // a pathname from directory syntax (trailing separator) to filename syntax. + // + // On Windows this method also replaces the alternate path separator '/' with + // the primary path separator '\\', so that for example "bar\\/\\foo" becomes + // "bar\\foo". + + void Normalize(); + + // Returns a pointer to the last occurence of a valid path separator in + // the FilePath. On Windows, for example, both '/' and '\' are valid path + // separators. Returns NULL if no path separator was found. + const char* FindLastPathSeparator() const; + + String pathname_; +}; // class FilePath + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-internal.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-internal.h new file mode 100644 index 00000000..31a66e99 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-internal.h @@ -0,0 +1,923 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares functions and macros used internally by +// Google Test. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ + +#include + +#if GTEST_OS_LINUX +#include +#include +#include +#include +#endif // GTEST_OS_LINUX + +#include +#include +#include +#include +#include + +#include +#include +#include + +// Due to C++ preprocessor weirdness, we need double indirection to +// concatenate two tokens when one of them is __LINE__. Writing +// +// foo ## __LINE__ +// +// will result in the token foo__LINE__, instead of foo followed by +// the current line number. For more details, see +// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 +#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) +#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar + +// Google Test defines the testing::Message class to allow construction of +// test messages via the << operator. The idea is that anything +// streamable to std::ostream can be streamed to a testing::Message. +// This allows a user to use his own types in Google Test assertions by +// overloading the << operator. +// +// util/gtl/stl_logging-inl.h overloads << for STL containers. These +// overloads cannot be defined in the std namespace, as that will be +// undefined behavior. Therefore, they are defined in the global +// namespace instead. +// +// C++'s symbol lookup rule (i.e. Koenig lookup) says that these +// overloads are visible in either the std namespace or the global +// namespace, but not other namespaces, including the testing +// namespace which Google Test's Message class is in. +// +// To allow STL containers (and other types that has a << operator +// defined in the global namespace) to be used in Google Test assertions, +// testing::Message must access the custom << operator from the global +// namespace. Hence this helper function. +// +// Note: Jeffrey Yasskin suggested an alternative fix by "using +// ::operator<<;" in the definition of Message's operator<<. That fix +// doesn't require a helper function, but unfortunately doesn't +// compile with MSVC. +template +inline void GTestStreamToHelper(std::ostream* os, const T& val) { + *os << val; +} + +namespace testing { + +// Forward declaration of classes. + +class AssertionResult; // Result of an assertion. +class Message; // Represents a failure message. +class Test; // Represents a test. +class TestInfo; // Information about a test. +class TestPartResult; // Result of a test part. +class UnitTest; // A collection of test cases. + +namespace internal { + +struct TraceInfo; // Information about a trace point. +class ScopedTrace; // Implements scoped trace. +class TestInfoImpl; // Opaque implementation of TestInfo +class UnitTestImpl; // Opaque implementation of UnitTest + +// How many times InitGoogleTest() has been called. +extern int g_init_gtest_count; + +// The text used in failure messages to indicate the start of the +// stack trace. +GTEST_API_ extern const char kStackTraceMarker[]; + +// A secret type that Google Test users don't know about. It has no +// definition on purpose. Therefore it's impossible to create a +// Secret object, which is what we want. +class Secret; + +// Two overloaded helpers for checking at compile time whether an +// expression is a null pointer literal (i.e. NULL or any 0-valued +// compile-time integral constant). Their return values have +// different sizes, so we can use sizeof() to test which version is +// picked by the compiler. These helpers have no implementations, as +// we only need their signatures. +// +// Given IsNullLiteralHelper(x), the compiler will pick the first +// version if x can be implicitly converted to Secret*, and pick the +// second version otherwise. Since Secret is a secret and incomplete +// type, the only expression a user can write that has type Secret* is +// a null pointer literal. Therefore, we know that x is a null +// pointer literal if and only if the first version is picked by the +// compiler. +char IsNullLiteralHelper(Secret* p); +char (&IsNullLiteralHelper(...))[2]; // NOLINT + +// A compile-time bool constant that is true if and only if x is a +// null pointer literal (i.e. NULL or any 0-valued compile-time +// integral constant). +#ifdef GTEST_ELLIPSIS_NEEDS_POD_ +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +#define GTEST_IS_NULL_LITERAL_(x) false +#else +#define GTEST_IS_NULL_LITERAL_(x) \ + (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) +#endif // GTEST_ELLIPSIS_NEEDS_POD_ + +// Appends the user-supplied message to the Google-Test-generated message. +GTEST_API_ String AppendUserMessage(const String& gtest_msg, + const Message& user_msg); + +// A helper class for creating scoped traces in user programs. +class GTEST_API_ ScopedTrace { + public: + // The c'tor pushes the given source file location and message onto + // a trace stack maintained by Google Test. + ScopedTrace(const char* file, int line, const Message& message); + + // The d'tor pops the info pushed by the c'tor. + // + // Note that the d'tor is not virtual in order to be efficient. + // Don't inherit from ScopedTrace! + ~ScopedTrace(); + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); +} GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its + // c'tor and d'tor. Therefore it doesn't + // need to be used otherwise. + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". +// Declared here but defined in gtest.h, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable); + +// Formats a value to be used in a failure message. + +#ifdef GTEST_NEEDS_IS_POINTER_ + +// These are needed as the Nokia Symbian and IBM XL C/C++ compilers +// cannot decide between const T& and const T* in a function template. +// These compilers _can_ decide between class template specializations +// for T and T*, so a tr1::type_traits-like is_pointer works, and we +// can overload on that. + +// This overload makes sure that all pointers (including +// those to char or wchar_t) are printed as raw pointers. +template +inline String FormatValueForFailureMessage(internal::true_type /*dummy*/, + T* pointer) { + return StreamableToString(static_cast(pointer)); +} + +template +inline String FormatValueForFailureMessage(internal::false_type /*dummy*/, + const T& value) { + return StreamableToString(value); +} + +template +inline String FormatForFailureMessage(const T& value) { + return FormatValueForFailureMessage( + typename internal::is_pointer::type(), value); +} + +#else + +// These are needed as the above solution using is_pointer has the +// limitation that T cannot be a type without external linkage, when +// compiled using MSVC. + +template +inline String FormatForFailureMessage(const T& value) { + return StreamableToString(value); +} + +// This overload makes sure that all pointers (including +// those to char or wchar_t) are printed as raw pointers. +template +inline String FormatForFailureMessage(T* pointer) { + return StreamableToString(static_cast(pointer)); +} + +#endif // GTEST_NEEDS_IS_POINTER_ + +// These overloaded versions handle narrow and wide characters. +GTEST_API_ String FormatForFailureMessage(char ch); +GTEST_API_ String FormatForFailureMessage(wchar_t wchar); + +// When this operand is a const char* or char*, and the other operand +// is a ::std::string or ::string, we print this operand as a C string +// rather than a pointer. We do the same for wide strings. + +// This internal macro is used to avoid duplicated code. +#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\ +inline String FormatForComparisonFailureMessage(\ + operand2_type::value_type* str, const operand2_type& /*operand2*/) {\ + return operand1_printer(str);\ +}\ +inline String FormatForComparisonFailureMessage(\ + const operand2_type::value_type* str, const operand2_type& /*operand2*/) {\ + return operand1_printer(str);\ +} + +GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted) +#if GTEST_HAS_STD_WSTRING +GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted) +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_STRING +GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted) +#endif // GTEST_HAS_GLOBAL_STRING +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted) +#endif // GTEST_HAS_GLOBAL_WSTRING + +#undef GTEST_FORMAT_IMPL_ + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +GTEST_API_ AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const String& expected_value, + const String& actual_value, + bool ignoring_case); + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +GTEST_API_ String GetBoolAssertionFailureMessage( + const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value); + +// This template class represents an IEEE floating-point number +// (either single-precision or double-precision, depending on the +// template parameters). +// +// The purpose of this class is to do more sophisticated number +// comparison. (Due to round-off error, etc, it's very unlikely that +// two floating-points will be equal exactly. Hence a naive +// comparison by the == operation often doesn't work.) +// +// Format of IEEE floating-point: +// +// The most-significant bit being the leftmost, an IEEE +// floating-point looks like +// +// sign_bit exponent_bits fraction_bits +// +// Here, sign_bit is a single bit that designates the sign of the +// number. +// +// For float, there are 8 exponent bits and 23 fraction bits. +// +// For double, there are 11 exponent bits and 52 fraction bits. +// +// More details can be found at +// http://en.wikipedia.org/wiki/IEEE_floating-point_standard. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +template +class FloatingPoint { + public: + // Defines the unsigned integer type that has the same size as the + // floating point number. + typedef typename TypeWithSize::UInt Bits; + + // Constants. + + // # of bits in a number. + static const size_t kBitCount = 8*sizeof(RawType); + + // # of fraction bits in a number. + static const size_t kFractionBitCount = + std::numeric_limits::digits - 1; + + // # of exponent bits in a number. + static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; + + // The mask for the sign bit. + static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); + + // The mask for the fraction bits. + static const Bits kFractionBitMask = + ~static_cast(0) >> (kExponentBitCount + 1); + + // The mask for the exponent bits. + static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); + + // How many ULP's (Units in the Last Place) we want to tolerate when + // comparing two numbers. The larger the value, the more error we + // allow. A 0 value means that two numbers must be exactly the same + // to be considered equal. + // + // The maximum error of a single floating-point operation is 0.5 + // units in the last place. On Intel CPU's, all floating-point + // calculations are done with 80-bit precision, while double has 64 + // bits. Therefore, 4 should be enough for ordinary use. + // + // See the following article for more details on ULP: + // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm. + static const size_t kMaxUlps = 4; + + // Constructs a FloatingPoint from a raw floating-point number. + // + // On an Intel CPU, passing a non-normalized NAN (Not a Number) + // around may change its bits, although the new value is guaranteed + // to be also a NAN. Therefore, don't expect this constructor to + // preserve the bits in x when x is a NAN. + explicit FloatingPoint(const RawType& x) { u_.value_ = x; } + + // Static methods + + // Reinterprets a bit pattern as a floating-point number. + // + // This function is needed to test the AlmostEquals() method. + static RawType ReinterpretBits(const Bits bits) { + FloatingPoint fp(0); + fp.u_.bits_ = bits; + return fp.u_.value_; + } + + // Returns the floating-point number that represent positive infinity. + static RawType Infinity() { + return ReinterpretBits(kExponentBitMask); + } + + // Non-static methods + + // Returns the bits that represents this number. + const Bits &bits() const { return u_.bits_; } + + // Returns the exponent bits of this number. + Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } + + // Returns the fraction bits of this number. + Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } + + // Returns the sign bit of this number. + Bits sign_bit() const { return kSignBitMask & u_.bits_; } + + // Returns true iff this is NAN (not a number). + bool is_nan() const { + // It's a NAN if the exponent bits are all ones and the fraction + // bits are not entirely zeros. + return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); + } + + // Returns true iff this number is at most kMaxUlps ULP's away from + // rhs. In particular, this function: + // + // - returns false if either number is (or both are) NAN. + // - treats really large numbers as almost equal to infinity. + // - thinks +0.0 and -0.0 are 0 DLP's apart. + bool AlmostEquals(const FloatingPoint& rhs) const { + // The IEEE standard says that any comparison operation involving + // a NAN must return false. + if (is_nan() || rhs.is_nan()) return false; + + return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) + <= kMaxUlps; + } + + private: + // The data type used to store the actual floating-point number. + union FloatingPointUnion { + RawType value_; // The raw floating-point number. + Bits bits_; // The bits that represent the number. + }; + + // Converts an integer from the sign-and-magnitude representation to + // the biased representation. More precisely, let N be 2 to the + // power of (kBitCount - 1), an integer x is represented by the + // unsigned number x + N. + // + // For instance, + // + // -N + 1 (the most negative number representable using + // sign-and-magnitude) is represented by 1; + // 0 is represented by N; and + // N - 1 (the biggest number representable using + // sign-and-magnitude) is represented by 2N - 1. + // + // Read http://en.wikipedia.org/wiki/Signed_number_representations + // for more details on signed number representations. + static Bits SignAndMagnitudeToBiased(const Bits &sam) { + if (kSignBitMask & sam) { + // sam represents a negative number. + return ~sam + 1; + } else { + // sam represents a positive number. + return kSignBitMask | sam; + } + } + + // Given two numbers in the sign-and-magnitude representation, + // returns the distance between them as an unsigned number. + static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, + const Bits &sam2) { + const Bits biased1 = SignAndMagnitudeToBiased(sam1); + const Bits biased2 = SignAndMagnitudeToBiased(sam2); + return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); + } + + FloatingPointUnion u_; +}; + +// Typedefs the instances of the FloatingPoint template class that we +// care to use. +typedef FloatingPoint Float; +typedef FloatingPoint Double; + +// In order to catch the mistake of putting tests that use different +// test fixture classes in the same test case, we need to assign +// unique IDs to fixture classes and compare them. The TypeId type is +// used to hold such IDs. The user should treat TypeId as an opaque +// type: the only operation allowed on TypeId values is to compare +// them for equality using the == operator. +typedef const void* TypeId; + +template +class TypeIdHelper { + public: + // dummy_ must not have a const type. Otherwise an overly eager + // compiler (e.g. MSVC 7.1 & 8.0) may try to merge + // TypeIdHelper::dummy_ for different Ts as an "optimization". + static bool dummy_; +}; + +template +bool TypeIdHelper::dummy_ = false; + +// GetTypeId() returns the ID of type T. Different values will be +// returned for different types. Calling the function twice with the +// same type argument is guaranteed to return the same ID. +template +TypeId GetTypeId() { + // The compiler is required to allocate a different + // TypeIdHelper::dummy_ variable for each T used to instantiate + // the template. Therefore, the address of dummy_ is guaranteed to + // be unique. + return &(TypeIdHelper::dummy_); +} + +// Returns the type ID of ::testing::Test. Always call this instead +// of GetTypeId< ::testing::Test>() to get the type ID of +// ::testing::Test, as the latter may give the wrong result due to a +// suspected linker bug when compiling Google Test as a Mac OS X +// framework. +GTEST_API_ TypeId GetTestTypeId(); + +// Defines the abstract factory interface that creates instances +// of a Test object. +class TestFactoryBase { + public: + virtual ~TestFactoryBase() {} + + // Creates a test instance to run. The instance is both created and destroyed + // within TestInfoImpl::Run() + virtual Test* CreateTest() = 0; + + protected: + TestFactoryBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); +}; + +// This class provides implementation of TeastFactoryBase interface. +// It is used in TEST and TEST_F macros. +template +class TestFactoryImpl : public TestFactoryBase { + public: + virtual Test* CreateTest() { return new TestClass; } +}; + +#if GTEST_OS_WINDOWS + +// Predicate-formatters for implementing the HRESULT checking macros +// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} +// We pass a long instead of HRESULT to avoid causing an +// include dependency for the HRESULT type. +GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, + long hr); // NOLINT +GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, + long hr); // NOLINT + +#endif // GTEST_OS_WINDOWS + +// Formats a source file path and a line number as they would appear +// in a compiler error message. +inline String FormatFileLocation(const char* file, int line) { + const char* const file_name = file == NULL ? "unknown file" : file; + if (line < 0) { + return String::Format("%s:", file_name); + } +#ifdef _MSC_VER + return String::Format("%s(%d):", file_name, line); +#else + return String::Format("%s:%d:", file_name, line); +#endif // _MSC_VER +} + +// Types of SetUpTestCase() and TearDownTestCase() functions. +typedef void (*SetUpTestCaseFunc)(); +typedef void (*TearDownTestCaseFunc)(); + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// test_case_comment: a comment on the test case that will be included in +// the test output +// comment: a comment on the test that will be included in the +// test output +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +GTEST_API_ TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, const char* name, + const char* test_case_comment, const char* comment, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory); + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr); + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// State of the definition of a type-parameterized test case. +class GTEST_API_ TypedTestCasePState { + public: + TypedTestCasePState() : registered_(false) {} + + // Adds the given test name to defined_test_names_ and return true + // if the test case hasn't been registered; otherwise aborts the + // program. + bool AddTestName(const char* file, int line, const char* case_name, + const char* test_name) { + if (registered_) { + fprintf(stderr, "%s Test %s must be defined before " + "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", + FormatFileLocation(file, line).c_str(), test_name, case_name); + fflush(stderr); + posix::Abort(); + } + defined_test_names_.insert(test_name); + return true; + } + + // Verifies that registered_tests match the test names in + // defined_test_names_; returns registered_tests if successful, or + // aborts the program otherwise. + const char* VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests); + + private: + bool registered_; + ::std::set defined_test_names_; +}; + +// Skips to the first non-space char after the first comma in 'str'; +// returns NULL if no comma is found in 'str'. +inline const char* SkipComma(const char* str) { + const char* comma = strchr(str, ','); + if (comma == NULL) { + return NULL; + } + while (isspace(*(++comma))) {} + return comma; +} + +// Returns the prefix of 'str' before the first comma in it; returns +// the entire string if it contains no comma. +inline String GetPrefixUntilComma(const char* str) { + const char* comma = strchr(str, ','); + return comma == NULL ? String(str) : String(str, comma - str); +} + +// TypeParameterizedTest::Register() +// registers a list of type-parameterized tests with Google Test. The +// return value is insignificant - we just need to return something +// such that we can call this function in a namespace scope. +// +// Implementation note: The GTEST_TEMPLATE_ macro declares a template +// template parameter. It's defined in gtest-type-util.h. +template +class TypeParameterizedTest { + public: + // 'index' is the index of the test in the type list 'Types' + // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, + // Types). Valid values for 'index' are [0, N - 1] where N is the + // length of Types. + static bool Register(const char* prefix, const char* case_name, + const char* test_names, int index) { + typedef typename Types::Head Type; + typedef Fixture FixtureClass; + typedef typename GTEST_BIND_(TestSel, Type) TestClass; + + // First, registers the first type-parameterized test in the type + // list. + MakeAndRegisterTestInfo( + String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/", + case_name, index).c_str(), + GetPrefixUntilComma(test_names).c_str(), + String::Format("TypeParam = %s", GetTypeName().c_str()).c_str(), + "", + GetTypeId(), + TestClass::SetUpTestCase, + TestClass::TearDownTestCase, + new TestFactoryImpl); + + // Next, recurses (at compile time) with the tail of the type list. + return TypeParameterizedTest + ::Register(prefix, case_name, test_names, index + 1); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTest { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/, int /*index*/) { + return true; + } +}; + +// TypeParameterizedTestCase::Register() +// registers *all combinations* of 'Tests' and 'Types' with Google +// Test. The return value is insignificant - we just need to return +// something such that we can call this function in a namespace scope. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* prefix, const char* case_name, + const char* test_names) { + typedef typename Tests::Head Head; + + // First, register the first test in 'Test' for each type in 'Types'. + TypeParameterizedTest::Register( + prefix, case_name, test_names, 0); + + // Next, recurses (at compile time) with the tail of the test list. + return TypeParameterizedTestCase + ::Register(prefix, case_name, SkipComma(test_names)); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/) { + return true; + } +}; + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// Returns the current OS stack trace as a String. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, + int skip_count); + +// Helpers for suppressing warnings on unreachable code or constant +// condition. + +// Always returns true. +GTEST_API_ bool AlwaysTrue(); + +// Always returns false. +inline bool AlwaysFalse() { return !AlwaysTrue(); } + +// A simple Linear Congruential Generator for generating random +// numbers with a uniform distribution. Unlike rand() and srand(), it +// doesn't use global state (and therefore can't interfere with user +// code). Unlike rand_r(), it's portable. An LCG isn't very random, +// but it's good enough for our purposes. +class GTEST_API_ Random { + public: + static const UInt32 kMaxRange = 1u << 31; + + explicit Random(UInt32 seed) : state_(seed) {} + + void Reseed(UInt32 seed) { state_ = seed; } + + // Generates a random number from [0, range). Crashes if 'range' is + // 0 or greater than kMaxRange. + UInt32 Generate(UInt32 range); + + private: + UInt32 state_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); +}; + +} // namespace internal +} // namespace testing + +#define GTEST_MESSAGE_(message, result_type) \ + ::testing::internal::AssertHelper(result_type, __FILE__, __LINE__, message) \ + = ::testing::Message() + +#define GTEST_FATAL_FAILURE_(message) \ + return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) + +#define GTEST_NONFATAL_FAILURE_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) + +#define GTEST_SUCCESS_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) + +// Suppresses MSVC warnings 4072 (unreachable code) for the code following +// statement if it returns or throws (or doesn't return or throw in some +// situations). +#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ + if (::testing::internal::AlwaysTrue()) { statement; } + +#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + bool gtest_caught_expected = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (expected_exception const&) { \ + gtest_caught_expected = true; \ + } \ + catch (...) { \ + gtest_msg = "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws a different " \ + "type."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + if (!gtest_caught_expected) { \ + gtest_msg = "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws nothing."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ + fail(gtest_msg) + +#define GTEST_TEST_NO_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + gtest_msg = "Expected: " #statement " doesn't throw an exception.\n" \ + " Actual: it throws."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ + fail(gtest_msg) + +#define GTEST_TEST_ANY_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + bool gtest_caught_any = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + gtest_caught_any = true; \ + } \ + if (!gtest_caught_any) { \ + gtest_msg = "Expected: " #statement " throws an exception.\n" \ + " Actual: it doesn't."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ + fail(gtest_msg) + + +// Implements Boolean test assertions such as EXPECT_TRUE. expression can be +// either a boolean expression or an AssertionResult. text is a textual +// represenation of expression as it was passed into the EXPECT_TRUE. +#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar_ = \ + ::testing::AssertionResult(expression)) \ + ; \ + else \ + fail(::testing::internal::GetBoolAssertionFailureMessage(\ + gtest_ar_, text, #actual, #expected).c_str()) + +#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const char* gtest_msg = "") { \ + ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ + gtest_msg = "Expected: " #statement " doesn't generate new fatal " \ + "failures in the current thread.\n" \ + " Actual: it does."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ + fail(gtest_msg) + +// Expands to the name of the class that implements the given test. +#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + test_case_name##_##test_name##_Test + +// Helper macro for defining tests. +#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ +class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ + public:\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ + private:\ + virtual void TestBody();\ + static ::testing::TestInfo* const test_info_;\ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ +};\ +\ +::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ + ::test_info_ =\ + ::testing::internal::MakeAndRegisterTestInfo(\ + #test_case_name, #test_name, "", "", \ + (parent_id), \ + parent_class::SetUpTestCase, \ + parent_class::TearDownTestCase, \ + new ::testing::internal::TestFactoryImpl<\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ +void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-linked_ptr.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-linked_ptr.h new file mode 100644 index 00000000..540ef4cd --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-linked_ptr.h @@ -0,0 +1,242 @@ +// Copyright 2003 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: Dan Egnor (egnor@google.com) +// +// A "smart" pointer type with reference tracking. Every pointer to a +// particular object is kept on a circular linked list. When the last pointer +// to an object is destroyed or reassigned, the object is deleted. +// +// Used properly, this deletes the object when the last reference goes away. +// There are several caveats: +// - Like all reference counting schemes, cycles lead to leaks. +// - Each smart pointer is actually two pointers (8 bytes instead of 4). +// - Every time a pointer is assigned, the entire list of pointers to that +// object is traversed. This class is therefore NOT SUITABLE when there +// will often be more than two or three pointers to a particular object. +// - References are only tracked as long as linked_ptr<> objects are copied. +// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS +// will happen (double deletion). +// +// A good use of this class is storing object references in STL containers. +// You can safely put linked_ptr<> in a vector<>. +// Other uses may not be as good. +// +// Note: If you use an incomplete type with linked_ptr<>, the class +// *containing* linked_ptr<> must have a constructor and destructor (even +// if they do nothing!). +// +// Bill Gibbons suggested we use something like this. +// +// Thread Safety: +// Unlike other linked_ptr implementations, in this implementation +// a linked_ptr object is thread-safe in the sense that: +// - it's safe to copy linked_ptr objects concurrently, +// - it's safe to copy *from* a linked_ptr and read its underlying +// raw pointer (e.g. via get()) concurrently, and +// - it's safe to write to two linked_ptrs that point to the same +// shared object concurrently. +// TODO(wan@google.com): rename this to safe_linked_ptr to avoid +// confusion with normal linked_ptr. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ + +#include +#include + +#include + +namespace testing { +namespace internal { + +// Protects copying of all linked_ptr objects. +GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// This is used internally by all instances of linked_ptr<>. It needs to be +// a non-template class because different types of linked_ptr<> can refer to +// the same object (linked_ptr(obj) vs linked_ptr(obj)). +// So, it needs to be possible for different types of linked_ptr to participate +// in the same circular linked list, so we need a single class type here. +// +// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. +class linked_ptr_internal { + public: + // Create a new circle that includes only this instance. + void join_new() { + next_ = this; + } + + // Many linked_ptr operations may change p.link_ for some linked_ptr + // variable p in the same circle as this object. Therefore we need + // to prevent two such operations from occurring concurrently. + // + // Note that different types of linked_ptr objects can coexist in a + // circle (e.g. linked_ptr, linked_ptr, and + // linked_ptr). Therefore we must use a single mutex to + // protect all linked_ptr objects. This can create serious + // contention in production code, but is acceptable in a testing + // framework. + + // Join an existing circle. + // L < g_linked_ptr_mutex + void join(linked_ptr_internal const* ptr) { + MutexLock lock(&g_linked_ptr_mutex); + + linked_ptr_internal const* p = ptr; + while (p->next_ != ptr) p = p->next_; + p->next_ = this; + next_ = ptr; + } + + // Leave whatever circle we're part of. Returns true if we were the + // last member of the circle. Once this is done, you can join() another. + // L < g_linked_ptr_mutex + bool depart() { + MutexLock lock(&g_linked_ptr_mutex); + + if (next_ == this) return true; + linked_ptr_internal const* p = next_; + while (p->next_ != this) p = p->next_; + p->next_ = next_; + return false; + } + + private: + mutable linked_ptr_internal const* next_; +}; + +template +class linked_ptr { + public: + typedef T element_type; + + // Take over ownership of a raw pointer. This should happen as soon as + // possible after the object is created. + explicit linked_ptr(T* ptr = NULL) { capture(ptr); } + ~linked_ptr() { depart(); } + + // Copy an existing linked_ptr<>, adding ourselves to the list of references. + template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } + linked_ptr(linked_ptr const& ptr) { // NOLINT + assert(&ptr != this); + copy(&ptr); + } + + // Assignment releases the old value and acquires the new. + template linked_ptr& operator=(linked_ptr const& ptr) { + depart(); + copy(&ptr); + return *this; + } + + linked_ptr& operator=(linked_ptr const& ptr) { + if (&ptr != this) { + depart(); + copy(&ptr); + } + return *this; + } + + // Smart pointer members. + void reset(T* ptr = NULL) { + depart(); + capture(ptr); + } + T* get() const { return value_; } + T* operator->() const { return value_; } + T& operator*() const { return *value_; } + // Release ownership of the pointed object and returns it. + // Sole ownership by this linked_ptr object is required. + T* release() { + bool last = link_.depart(); + assert(last); + T* v = value_; + value_ = NULL; + return v; + } + + bool operator==(T* p) const { return value_ == p; } + bool operator!=(T* p) const { return value_ != p; } + template + bool operator==(linked_ptr const& ptr) const { + return value_ == ptr.get(); + } + template + bool operator!=(linked_ptr const& ptr) const { + return value_ != ptr.get(); + } + + private: + template + friend class linked_ptr; + + T* value_; + linked_ptr_internal link_; + + void depart() { + if (link_.depart()) delete value_; + } + + void capture(T* ptr) { + value_ = ptr; + link_.join_new(); + } + + template void copy(linked_ptr const* ptr) { + value_ = ptr->get(); + if (value_) + link_.join(&ptr->link_); + else + link_.join_new(); + } +}; + +template inline +bool operator==(T* ptr, const linked_ptr& x) { + return ptr == x.get(); +} + +template inline +bool operator!=(T* ptr, const linked_ptr& x) { + return ptr != x.get(); +} + +// A function to convert T* into linked_ptr +// Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation +// for linked_ptr >(new FooBarBaz(arg)) +template +linked_ptr make_linked_ptr(T* ptr) { + return linked_ptr(ptr); +} + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h new file mode 100644 index 00000000..ab4ab566 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h @@ -0,0 +1,4820 @@ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently Google Test supports at most 50 arguments in Values, +// and at most 10 arguments in Combine. Please contact +// googletestframework@googlegroups.com if you need more. +// Please note that the number of arguments to Combine is limited +// by the maximum arity of the implementation of tr1::tuple which is +// currently set at 10. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +#include +#include + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Forward declarations of ValuesIn(), which is implemented in +// include/gtest/gtest-param-test.h. +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, ForwardIterator end); + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]); + +template +internal::ParamGenerator ValuesIn( + const Container& container); + +namespace internal { + +// Used in the Values() function to provide polymorphic capabilities. +template +class ValueArray1 { + public: + explicit ValueArray1(T1 v1) : v1_(v1) {} + + template + operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray1& other); + + const T1 v1_; +}; + +template +class ValueArray2 { + public: + ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray2& other); + + const T1 v1_; + const T2 v2_; +}; + +template +class ValueArray3 { + public: + ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray3& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; +}; + +template +class ValueArray4 { + public: + ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray4& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; +}; + +template +class ValueArray5 { + public: + ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray5& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; +}; + +template +class ValueArray6 { + public: + ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray6& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; +}; + +template +class ValueArray7 { + public: + ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray7& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; +}; + +template +class ValueArray8 { + public: + ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray8& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; +}; + +template +class ValueArray9 { + public: + ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray9& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; +}; + +template +class ValueArray10 { + public: + ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray10& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; +}; + +template +class ValueArray11 { + public: + ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray11& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; +}; + +template +class ValueArray12 { + public: + ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray12& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; +}; + +template +class ValueArray13 { + public: + ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray13& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; +}; + +template +class ValueArray14 { + public: + ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray14& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; +}; + +template +class ValueArray15 { + public: + ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray15& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; +}; + +template +class ValueArray16 { + public: + ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray16& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; +}; + +template +class ValueArray17 { + public: + ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray17& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; +}; + +template +class ValueArray18 { + public: + ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray18& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; +}; + +template +class ValueArray19 { + public: + ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray19& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; +}; + +template +class ValueArray20 { + public: + ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray20& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; +}; + +template +class ValueArray21 { + public: + ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray21& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; +}; + +template +class ValueArray22 { + public: + ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray22& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; +}; + +template +class ValueArray23 { + public: + ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, + v23_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray23& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; +}; + +template +class ValueArray24 { + public: + ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray24& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; +}; + +template +class ValueArray25 { + public: + ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray25& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; +}; + +template +class ValueArray26 { + public: + ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray26& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; +}; + +template +class ValueArray27 { + public: + ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray27& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; +}; + +template +class ValueArray28 { + public: + ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray28& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; +}; + +template +class ValueArray29 { + public: + ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray29& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; +}; + +template +class ValueArray30 { + public: + ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray30& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; +}; + +template +class ValueArray31 { + public: + ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray31& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; +}; + +template +class ValueArray32 { + public: + ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray32& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; +}; + +template +class ValueArray33 { + public: + ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray33& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; +}; + +template +class ValueArray34 { + public: + ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray34& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; +}; + +template +class ValueArray35 { + public: + ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, + v35_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray35& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; +}; + +template +class ValueArray36 { + public: + ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray36& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; +}; + +template +class ValueArray37 { + public: + ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray37& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; +}; + +template +class ValueArray38 { + public: + ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray38& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; +}; + +template +class ValueArray39 { + public: + ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray39& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; +}; + +template +class ValueArray40 { + public: + ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray40& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; +}; + +template +class ValueArray41 { + public: + ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray41& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; +}; + +template +class ValueArray42 { + public: + ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray42& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; +}; + +template +class ValueArray43 { + public: + ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), + v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray43& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; +}; + +template +class ValueArray44 { + public: + ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), + v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), + v43_(v43), v44_(v44) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray44& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; +}; + +template +class ValueArray45 { + public: + ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), + v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray45& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; +}; + +template +class ValueArray46 { + public: + ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray46& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; +}; + +template +class ValueArray47 { + public: + ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), + v47_(v47) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, + v47_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray47& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; +}; + +template +class ValueArray48 { + public: + ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), + v46_(v46), v47_(v47), v48_(v48) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray48& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; +}; + +template +class ValueArray49 { + public: + ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, + T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_, v49_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray49& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; +}; + +template +class ValueArray50 { + public: + ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, + T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} + + template + operator ParamGenerator() const { + const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, + v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, + v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, + v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, + v48_, v49_, v50_}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray50& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; + const T50 v50_; +}; + +#if GTEST_HAS_COMBINE +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Generates values from the Cartesian product of values produced +// by the argument generators. +// +template +class CartesianProductGenerator2 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator2(const ParamGenerator& g1, + const ParamGenerator& g2) + : g1_(g1), g2_(g2) {} + virtual ~CartesianProductGenerator2() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current2_; + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + ParamType current_value_; + }; // class CartesianProductGenerator2::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator2& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; +}; // class CartesianProductGenerator2 + + +template +class CartesianProductGenerator3 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator3(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + virtual ~CartesianProductGenerator3() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current3_; + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + ParamType current_value_; + }; // class CartesianProductGenerator3::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator3& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; +}; // class CartesianProductGenerator3 + + +template +class CartesianProductGenerator4 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator4(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + virtual ~CartesianProductGenerator4() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current4_; + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + ParamType current_value_; + }; // class CartesianProductGenerator4::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator4& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; +}; // class CartesianProductGenerator4 + + +template +class CartesianProductGenerator5 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator5(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + virtual ~CartesianProductGenerator5() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current5_; + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + ParamType current_value_; + }; // class CartesianProductGenerator5::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator5& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; +}; // class CartesianProductGenerator5 + + +template +class CartesianProductGenerator6 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator6(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + virtual ~CartesianProductGenerator6() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current6_; + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + ParamType current_value_; + }; // class CartesianProductGenerator6::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator6& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; +}; // class CartesianProductGenerator6 + + +template +class CartesianProductGenerator7 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator7(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + virtual ~CartesianProductGenerator7() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current7_; + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + ParamType current_value_; + }; // class CartesianProductGenerator7::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator7& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; +}; // class CartesianProductGenerator7 + + +template +class CartesianProductGenerator8 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator8(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + virtual ~CartesianProductGenerator8() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current8_; + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + ParamType current_value_; + }; // class CartesianProductGenerator8::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator8& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; +}; // class CartesianProductGenerator8 + + +template +class CartesianProductGenerator9 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator9(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + virtual ~CartesianProductGenerator9() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current9_; + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + ParamType current_value_; + }; // class CartesianProductGenerator9::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator9& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; +}; // class CartesianProductGenerator9 + + +template +class CartesianProductGenerator10 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator10(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9, + const ParamGenerator& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + virtual ~CartesianProductGenerator10() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end(), g10_, g10_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9, + const ParamGenerator& g10, + const typename ParamGenerator::iterator& current10) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9), + begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current10_; + if (current10_ == end10_) { + current10_ = begin10_; + ++current9_; + } + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_ && + current10_ == typed_other->current10_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_), + begin10_(other.begin10_), + end10_(other.end10_), + current10_(other.current10_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_, *current10_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_ || + current10_ == end10_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + const typename ParamGenerator::iterator begin10_; + const typename ParamGenerator::iterator end10_; + typename ParamGenerator::iterator current10_; + ParamType current_value_; + }; // class CartesianProductGenerator10::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator10& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; + const ParamGenerator g10_; +}; // class CartesianProductGenerator10 + + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Helper classes providing Combine() with polymorphic features. They allow +// casting CartesianProductGeneratorN to ParamGenerator if T is +// convertible to U. +// +template +class CartesianProductHolder2 { + public: +CartesianProductHolder2(const Generator1& g1, const Generator2& g2) + : g1_(g1), g2_(g2) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator2( + static_cast >(g1_), + static_cast >(g2_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder2& other); + + const Generator1 g1_; + const Generator2 g2_; +}; // class CartesianProductHolder2 + +template +class CartesianProductHolder3 { + public: +CartesianProductHolder3(const Generator1& g1, const Generator2& g2, + const Generator3& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator3( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder3& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; +}; // class CartesianProductHolder3 + +template +class CartesianProductHolder4 { + public: +CartesianProductHolder4(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator4( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder4& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; +}; // class CartesianProductHolder4 + +template +class CartesianProductHolder5 { + public: +CartesianProductHolder5(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator5( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder5& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; +}; // class CartesianProductHolder5 + +template +class CartesianProductHolder6 { + public: +CartesianProductHolder6(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator6( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder6& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; +}; // class CartesianProductHolder6 + +template +class CartesianProductHolder7 { + public: +CartesianProductHolder7(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator7( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder7& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; +}; // class CartesianProductHolder7 + +template +class CartesianProductHolder8 { + public: +CartesianProductHolder8(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator8( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder8& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; +}; // class CartesianProductHolder8 + +template +class CartesianProductHolder9 { + public: +CartesianProductHolder9(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator9( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder9& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; +}; // class CartesianProductHolder9 + +template +class CartesianProductHolder10 { + public: +CartesianProductHolder10(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9, const Generator10& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator10( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_), + static_cast >(g10_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder10& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; + const Generator10 g10_; +}; // class CartesianProductHolder10 + +#endif // GTEST_HAS_COMBINE + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h.pump b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h.pump new file mode 100644 index 00000000..baedfbc2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util-generated.h.pump @@ -0,0 +1,301 @@ +$$ -*- mode: c++; -*- +$var n = 50 $$ Maximum length of Values arguments we want to support. +$var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently Google Test supports at most $n arguments in Values, +// and at most $maxtuple arguments in Combine. Please contact +// googletestframework@googlegroups.com if you need more. +// Please note that the number of arguments to Combine is limited +// by the maximum arity of the implementation of tr1::tuple which is +// currently set at $maxtuple. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +#include +#include + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Forward declarations of ValuesIn(), which is implemented in +// include/gtest/gtest-param-test.h. +template +internal::ParamGenerator< + typename ::std::iterator_traits::value_type> ValuesIn( + ForwardIterator begin, ForwardIterator end); + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]); + +template +internal::ParamGenerator ValuesIn( + const Container& container); + +namespace internal { + +// Used in the Values() function to provide polymorphic capabilities. +template +class ValueArray1 { + public: + explicit ValueArray1(T1 v1) : v1_(v1) {} + + template + operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray1& other); + + const T1 v1_; +}; + +$range i 2..n +$for i [[ +$range j 1..i + +template <$for j, [[typename T$j]]> +class ValueArray$i { + public: + ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {} + + template + operator ParamGenerator() const { + const T array[] = {$for j, [[v$(j)_]]}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray$i& other); + +$for j [[ + + const T$j v$(j)_; +]] + +}; + +]] + +#if GTEST_HAS_COMBINE +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Generates values from the Cartesian product of values produced +// by the argument generators. +// +$range i 2..maxtuple +$for i [[ +$range j 1..i +$range k 2..i + +template <$for j, [[typename T$j]]> +class CartesianProductGenerator$i + : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > { + public: + typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType; + + CartesianProductGenerator$i($for j, [[const ParamGenerator& g$j]]) + : $for j, [[g$(j)_(g$j)]] {} + virtual ~CartesianProductGenerator$i() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, $for j, [[ + + const ParamGenerator& g$j, + const typename ParamGenerator::iterator& current$(j)]]) + : base_(base), +$for j, [[ + + begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j) +]] { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current$(i)_; + +$for k [[ + if (current$(i+2-k)_ == end$(i+2-k)_) { + current$(i+2-k)_ = begin$(i+2-k)_; + ++current$(i+2-k-1)_; + } + +]] + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ($for j && [[ + + current$(j)_ == typed_other->current$(j)_ +]]); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), $for j, [[ + + begin$(j)_(other.begin$(j)_), + end$(j)_(other.end$(j)_), + current$(j)_(other.current$(j)_) +]] { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType($for j, [[*current$(j)_]]); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return +$for j || [[ + + current$(j)_ == end$(j)_ +]]; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. +$for j [[ + + const typename ParamGenerator::iterator begin$(j)_; + const typename ParamGenerator::iterator end$(j)_; + typename ParamGenerator::iterator current$(j)_; +]] + + ParamType current_value_; + }; // class CartesianProductGenerator$i::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator$i& other); + + +$for j [[ + const ParamGenerator g$(j)_; + +]] +}; // class CartesianProductGenerator$i + + +]] + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Helper classes providing Combine() with polymorphic features. They allow +// casting CartesianProductGeneratorN to ParamGenerator if T is +// convertible to U. +// +$range i 2..maxtuple +$for i [[ +$range j 1..i + +template <$for j, [[class Generator$j]]> +class CartesianProductHolder$i { + public: +CartesianProductHolder$i($for j, [[const Generator$j& g$j]]) + : $for j, [[g$(j)_(g$j)]] {} + template <$for j, [[typename T$j]]> + operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const { + return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >( + new CartesianProductGenerator$i<$for j, [[T$j]]>( +$for j,[[ + + static_cast >(g$(j)_) +]])); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder$i& other); + + +$for j [[ + const Generator$j g$(j)_; + +]] +}; // class CartesianProductHolder$i + +]] + +#endif // GTEST_HAS_COMBINE + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util.h new file mode 100644 index 00000000..0cbb58c2 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-param-util.h @@ -0,0 +1,619 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ + +#include +#include +#include + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +#include +#include +#include + +#if GTEST_HAS_PARAM_TEST + +namespace testing { +namespace internal { + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Outputs a message explaining invalid registration of different +// fixture class for the same test case. This may happen when +// TEST_P macro is used to define two tests with the same name +// but in different namespaces. +GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line); + +template class ParamGeneratorInterface; +template class ParamGenerator; + +// Interface for iterating over elements provided by an implementation +// of ParamGeneratorInterface. +template +class ParamIteratorInterface { + public: + virtual ~ParamIteratorInterface() {} + // A pointer to the base generator instance. + // Used only for the purposes of iterator comparison + // to make sure that two iterators belong to the same generator. + virtual const ParamGeneratorInterface* BaseGenerator() const = 0; + // Advances iterator to point to the next element + // provided by the generator. The caller is responsible + // for not calling Advance() on an iterator equal to + // BaseGenerator()->End(). + virtual void Advance() = 0; + // Clones the iterator object. Used for implementing copy semantics + // of ParamIterator. + virtual ParamIteratorInterface* Clone() const = 0; + // Dereferences the current iterator and provides (read-only) access + // to the pointed value. It is the caller's responsibility not to call + // Current() on an iterator equal to BaseGenerator()->End(). + // Used for implementing ParamGenerator::operator*(). + virtual const T* Current() const = 0; + // Determines whether the given iterator and other point to the same + // element in the sequence generated by the generator. + // Used for implementing ParamGenerator::operator==(). + virtual bool Equals(const ParamIteratorInterface& other) const = 0; +}; + +// Class iterating over elements provided by an implementation of +// ParamGeneratorInterface. It wraps ParamIteratorInterface +// and implements the const forward iterator concept. +template +class ParamIterator { + public: + typedef T value_type; + typedef const T& reference; + typedef ptrdiff_t difference_type; + + // ParamIterator assumes ownership of the impl_ pointer. + ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} + ParamIterator& operator=(const ParamIterator& other) { + if (this != &other) + impl_.reset(other.impl_->Clone()); + return *this; + } + + const T& operator*() const { return *impl_->Current(); } + const T* operator->() const { return impl_->Current(); } + // Prefix version of operator++. + ParamIterator& operator++() { + impl_->Advance(); + return *this; + } + // Postfix version of operator++. + ParamIterator operator++(int /*unused*/) { + ParamIteratorInterface* clone = impl_->Clone(); + impl_->Advance(); + return ParamIterator(clone); + } + bool operator==(const ParamIterator& other) const { + return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); + } + bool operator!=(const ParamIterator& other) const { + return !(*this == other); + } + + private: + friend class ParamGenerator; + explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} + scoped_ptr > impl_; +}; + +// ParamGeneratorInterface is the binary interface to access generators +// defined in other translation units. +template +class ParamGeneratorInterface { + public: + typedef T ParamType; + + virtual ~ParamGeneratorInterface() {} + + // Generator interface definition + virtual ParamIteratorInterface* Begin() const = 0; + virtual ParamIteratorInterface* End() const = 0; +}; + +// Wraps ParamGeneratorInterface and provides general generator syntax +// compatible with the STL Container concept. +// This class implements copy initialization semantics and the contained +// ParamGeneratorInterface instance is shared among all copies +// of the original object. This is possible because that instance is immutable. +template +class ParamGenerator { + public: + typedef ParamIterator iterator; + + explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} + ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} + + ParamGenerator& operator=(const ParamGenerator& other) { + impl_ = other.impl_; + return *this; + } + + iterator begin() const { return iterator(impl_->Begin()); } + iterator end() const { return iterator(impl_->End()); } + + private: + ::testing::internal::linked_ptr > impl_; +}; + +// Generates values from a range of two comparable values. Can be used to +// generate sequences of user-defined types that implement operator+() and +// operator<(). +// This class is used in the Range() function. +template +class RangeGenerator : public ParamGeneratorInterface { + public: + RangeGenerator(T begin, T end, IncrementT step) + : begin_(begin), end_(end), + step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} + virtual ~RangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, begin_, 0, step_); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, end_, end_index_, step_); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, T value, int index, + IncrementT step) + : base_(base), value_(value), index_(index), step_(step) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + value_ = value_ + step_; + index_++; + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const T* Current() const { return &value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const int other_index = + CheckedDowncastToActualType(&other)->index_; + return index_ == other_index; + } + + private: + Iterator(const Iterator& other) + : ParamIteratorInterface(), + base_(other.base_), value_(other.value_), index_(other.index_), + step_(other.step_) {} + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + T value_; + int index_; + const IncrementT step_; + }; // class RangeGenerator::Iterator + + static int CalculateEndIndex(const T& begin, + const T& end, + const IncrementT& step) { + int end_index = 0; + for (T i = begin; i < end; i = i + step) + end_index++; + return end_index; + } + + // No implementation - assignment is unsupported. + void operator=(const RangeGenerator& other); + + const T begin_; + const T end_; + const IncrementT step_; + // The index for the end() iterator. All the elements in the generated + // sequence are indexed (0-based) to aid iterator comparison. + const int end_index_; +}; // class RangeGenerator + + +// Generates values from a pair of STL-style iterators. Used in the +// ValuesIn() function. The elements are copied from the source range +// since the source can be located on the stack, and the generator +// is likely to persist beyond that stack frame. +template +class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { + public: + template + ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) + : container_(begin, end) {} + virtual ~ValuesInIteratorRangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, container_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, container_.end()); + } + + private: + typedef typename ::std::vector ContainerType; + + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + typename ContainerType::const_iterator iterator) + : base_(base), iterator_(iterator) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + ++iterator_; + value_.reset(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + // We need to use cached value referenced by iterator_ because *iterator_ + // can return a temporary object (and of type other then T), so just + // having "return &*iterator_;" doesn't work. + // value_ is updated here and not in Advance() because Advance() + // can advance iterator_ beyond the end of the range, and we cannot + // detect that fact. The client code, on the other hand, is + // responsible for not calling Current() on an out-of-range iterator. + virtual const T* Current() const { + if (value_.get() == NULL) + value_.reset(new T(*iterator_)); + return value_.get(); + } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + return iterator_ == + CheckedDowncastToActualType(&other)->iterator_; + } + + private: + Iterator(const Iterator& other) + // The explicit constructor call suppresses a false warning + // emitted by gcc when supplied with the -Wextra option. + : ParamIteratorInterface(), + base_(other.base_), + iterator_(other.iterator_) {} + + const ParamGeneratorInterface* const base_; + typename ContainerType::const_iterator iterator_; + // A cached value of *iterator_. We keep it here to allow access by + // pointer in the wrapping iterator's operator->(). + // value_ needs to be mutable to be accessed in Current(). + // Use of scoped_ptr helps manage cached value's lifetime, + // which is bound by the lifespan of the iterator itself. + mutable scoped_ptr value_; + }; // class ValuesInIteratorRangeGenerator::Iterator + + // No implementation - assignment is unsupported. + void operator=(const ValuesInIteratorRangeGenerator& other); + + const ContainerType container_; +}; // class ValuesInIteratorRangeGenerator + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Stores a parameter value and later creates tests parameterized with that +// value. +template +class ParameterizedTestFactory : public TestFactoryBase { + public: + typedef typename TestClass::ParamType ParamType; + explicit ParameterizedTestFactory(ParamType parameter) : + parameter_(parameter) {} + virtual Test* CreateTest() { + TestClass::SetParam(¶meter_); + return new TestClass(); + } + + private: + const ParamType parameter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactoryBase is a base class for meta-factories that create +// test factories for passing into MakeAndRegisterTestInfo function. +template +class TestMetaFactoryBase { + public: + virtual ~TestMetaFactoryBase() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactory creates test factories for passing into +// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives +// ownership of test factory pointer, same factory object cannot be passed +// into that method twice. But ParameterizedTestCaseInfo is going to call +// it for each Test/Parameter value combination. Thus it needs meta factory +// creator class. +template +class TestMetaFactory + : public TestMetaFactoryBase { + public: + typedef typename TestCase::ParamType ParamType; + + TestMetaFactory() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { + return new ParameterizedTestFactory(parameter); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfoBase is a generic interface +// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase +// accumulates test information provided by TEST_P macro invocations +// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations +// and uses that information to register all resulting test instances +// in RegisterTests method. The ParameterizeTestCaseRegistry class holds +// a collection of pointers to the ParameterizedTestCaseInfo objects +// and calls RegisterTests() on each of them when asked. +class ParameterizedTestCaseInfoBase { + public: + virtual ~ParameterizedTestCaseInfoBase() {} + + // Base part of test case name for display purposes. + virtual const String& GetTestCaseName() const = 0; + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const = 0; + // UnitTest class invokes this method to register tests in this + // test case right before running them in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + virtual void RegisterTests() = 0; + + protected: + ParameterizedTestCaseInfoBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P +// macro invocations for a particular test case and generators +// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that +// test case. It registers tests with all values generated by all +// generators when asked. +template +class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { + public: + // ParamType and GeneratorCreationFunc are private types but are required + // for declarations of public methods AddTestPattern() and + // AddTestCaseInstantiation(). + typedef typename TestCase::ParamType ParamType; + // A function that returns an instance of appropriate generator type. + typedef ParamGenerator(GeneratorCreationFunc)(); + + explicit ParameterizedTestCaseInfo(const char* name) + : test_case_name_(name) {} + + // Test case base name for display purposes. + virtual const String& GetTestCaseName() const { return test_case_name_; } + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } + // TEST_P macro uses AddTestPattern() to record information + // about a single test in a LocalTestInfo structure. + // test_case_name is the base name of the test case (without invocation + // prefix). test_base_name is the name of an individual test without + // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is + // test case base name and DoBar is test base name. + void AddTestPattern(const char* test_case_name, + const char* test_base_name, + TestMetaFactoryBase* meta_factory) { + tests_.push_back(linked_ptr(new TestInfo(test_case_name, + test_base_name, + meta_factory))); + } + // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information + // about a generator. + int AddTestCaseInstantiation(const char* instantiation_name, + GeneratorCreationFunc* func, + const char* /* file */, + int /* line */) { + instantiations_.push_back(::std::make_pair(instantiation_name, func)); + return 0; // Return value used only to run this method in namespace scope. + } + // UnitTest class invokes this method to register tests in this test case + // test cases right before running tests in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + // UnitTest has a guard to prevent from calling this method more then once. + virtual void RegisterTests() { + for (typename TestInfoContainer::iterator test_it = tests_.begin(); + test_it != tests_.end(); ++test_it) { + linked_ptr test_info = *test_it; + for (typename InstantiationContainer::iterator gen_it = + instantiations_.begin(); gen_it != instantiations_.end(); + ++gen_it) { + const String& instantiation_name = gen_it->first; + ParamGenerator generator((*gen_it->second)()); + + Message test_case_name_stream; + if ( !instantiation_name.empty() ) + test_case_name_stream << instantiation_name.c_str() << "/"; + test_case_name_stream << test_info->test_case_base_name.c_str(); + + int i = 0; + for (typename ParamGenerator::iterator param_it = + generator.begin(); + param_it != generator.end(); ++param_it, ++i) { + Message test_name_stream; + test_name_stream << test_info->test_base_name.c_str() << "/" << i; + ::testing::internal::MakeAndRegisterTestInfo( + test_case_name_stream.GetString().c_str(), + test_name_stream.GetString().c_str(), + "", // test_case_comment + "", // comment; TODO(vladl@google.com): provide parameter value + // representation. + GetTestCaseTypeId(), + TestCase::SetUpTestCase, + TestCase::TearDownTestCase, + test_info->test_meta_factory->CreateTestFactory(*param_it)); + } // for param_it + } // for gen_it + } // for test_it + } // RegisterTests + + private: + // LocalTestInfo structure keeps information about a single test registered + // with TEST_P macro. + struct TestInfo { + TestInfo(const char* a_test_case_base_name, + const char* a_test_base_name, + TestMetaFactoryBase* a_test_meta_factory) : + test_case_base_name(a_test_case_base_name), + test_base_name(a_test_base_name), + test_meta_factory(a_test_meta_factory) {} + + const String test_case_base_name; + const String test_base_name; + const scoped_ptr > test_meta_factory; + }; + typedef ::std::vector > TestInfoContainer; + // Keeps pairs of + // received from INSTANTIATE_TEST_CASE_P macros. + typedef ::std::vector > + InstantiationContainer; + + const String test_case_name_; + TestInfoContainer tests_; + InstantiationContainer instantiations_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); +}; // class ParameterizedTestCaseInfo + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase +// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P +// macros use it to locate their corresponding ParameterizedTestCaseInfo +// descriptors. +class ParameterizedTestCaseRegistry { + public: + ParameterizedTestCaseRegistry() {} + ~ParameterizedTestCaseRegistry() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + delete *it; + } + } + + // Looks up or creates and returns a structure containing information about + // tests and instantiations of a particular test case. + template + ParameterizedTestCaseInfo* GetTestCasePatternHolder( + const char* test_case_name, + const char* file, + int line) { + ParameterizedTestCaseInfo* typed_test_info = NULL; + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + if ((*it)->GetTestCaseName() == test_case_name) { + if ((*it)->GetTestCaseTypeId() != GetTypeId()) { + // Complain about incorrect usage of Google Test facilities + // and terminate the program since we cannot guaranty correct + // test case setup and tear-down in this case. + ReportInvalidTestCaseType(test_case_name, file, line); + abort(); + } else { + // At this point we are sure that the object we found is of the same + // type we are looking for, so we downcast it to that type + // without further checks. + typed_test_info = CheckedDowncastToActualType< + ParameterizedTestCaseInfo >(*it); + } + break; + } + } + if (typed_test_info == NULL) { + typed_test_info = new ParameterizedTestCaseInfo(test_case_name); + test_case_infos_.push_back(typed_test_info); + } + return typed_test_info; + } + void RegisterTests() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + (*it)->RegisterTests(); + } + } + + private: + typedef ::std::vector TestCaseInfoContainer; + + TestCaseInfoContainer test_case_infos_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-port.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-port.h new file mode 100644 index 00000000..a2a62be9 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-port.h @@ -0,0 +1,1497 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan) +// +// Low-level types and utilities for porting Google Test to various +// platforms. They are subject to change without notice. DO NOT USE +// THEM IN USER CODE. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ + +// The user can define the following macros in the build script to +// control Google Test's behavior. If the user doesn't define a macro +// in this list, Google Test will define it. +// +// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) +// is/isn't available. +// GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions +// are enabled. +// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::string, which is different to std::string). +// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::wstring, which is different to std::wstring). +// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that +// is/isn't available. +// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't +// enabled. +// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that +// std::wstring does/doesn't work (Google Test can +// be used where std::wstring is unavailable). +// GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple +// is/isn't available. +// GTEST_HAS_SEH - Define it to 1/0 to indicate whether the +// compiler supports Microsoft's "Structured +// Exception Handling". +// GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google +// Test's own tr1 tuple implementation should be +// used. Unused when the user sets +// GTEST_HAS_TR1_TUPLE to 0. +// GTEST_LINKED_AS_SHARED_LIBRARY +// - Define to 1 when compiling tests that use +// Google Test as a shared library (known as +// DLL on Windows). +// GTEST_CREATE_SHARED_LIBRARY +// - Define to 1 when compiling Google Test itself +// as a shared library. + +// This header defines the following utilities: +// +// Macros indicating the current platform (defined to 1 if compiled on +// the given platform; otherwise undefined): +// GTEST_OS_AIX - IBM AIX +// GTEST_OS_CYGWIN - Cygwin +// GTEST_OS_LINUX - Linux +// GTEST_OS_MAC - Mac OS X +// GTEST_OS_SOLARIS - Sun Solaris +// GTEST_OS_SYMBIAN - Symbian +// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) +// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop +// GTEST_OS_WINDOWS_MINGW - MinGW +// GTEST_OS_WINDOWS_MOBILE - Windows Mobile +// GTEST_OS_ZOS - z/OS +// +// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the +// most stable support. Since core members of the Google Test project +// don't have access to other platforms, support for them may be less +// stable. If you notice any problems on your platform, please notify +// googletestframework@googlegroups.com (patches for fixing them are +// even more welcome!). +// +// Note that it is possible that none of the GTEST_OS_* macros are defined. +// +// Macros indicating available Google Test features (defined to 1 if +// the corresponding feature is supported; otherwise undefined): +// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized +// tests) +// GTEST_HAS_DEATH_TEST - death tests +// GTEST_HAS_PARAM_TEST - value-parameterized tests +// GTEST_HAS_TYPED_TEST - typed tests +// GTEST_HAS_TYPED_TEST_P - type-parameterized tests +// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. +// GTEST_USES_SIMPLE_RE - our own simple regex is used; +// the above two are mutually exclusive. +// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). +// +// Macros for basic C++ coding: +// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. +// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a +// variable don't have to be used. +// GTEST_DISALLOW_ASSIGN_ - disables operator=. +// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. +// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. +// +// Synchronization: +// Mutex, MutexLock, ThreadLocal, GetThreadCount() +// - synchronization primitives. +// GTEST_IS_THREADSAFE - defined to 1 to indicate that the above +// synchronization primitives have real implementations +// and Google Test is thread-safe; or 0 otherwise. +// +// Template meta programming: +// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. +// +// Smart pointers: +// scoped_ptr - as in TR2. +// +// Regular expressions: +// RE - a simple regular expression class using the POSIX +// Extended Regular Expression syntax. Not available on +// Windows. +// +// Logging: +// GTEST_LOG_() - logs messages at the specified severity level. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. +// +// Stdout and stderr capturing: +// CaptureStdout() - starts capturing stdout. +// GetCapturedStdout() - stops capturing stdout and returns the captured +// string. +// CaptureStderr() - starts capturing stderr. +// GetCapturedStderr() - stops capturing stderr and returns the captured +// string. +// +// Integer types: +// TypeWithSize - maps an integer to a int type. +// Int32, UInt32, Int64, UInt64, TimeInMillis +// - integers of known sizes. +// BiggestInt - the biggest signed integer type. +// +// Command-line utilities: +// GTEST_FLAG() - references a flag. +// GTEST_DECLARE_*() - declares a flag. +// GTEST_DEFINE_*() - defines a flag. +// GetArgvs() - returns the command line as a vector of strings. +// +// Environment variable utilities: +// GetEnv() - gets the value of an environment variable. +// BoolFromGTestEnv() - parses a bool environment variable. +// Int32FromGTestEnv() - parses an Int32 environment variable. +// StringFromGTestEnv() - parses a string environment variable. + +#include // For ptrdiff_t +#include +#include +#include +#ifndef _WIN32_WCE +#include +#endif // !_WIN32_WCE + +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" +#define GTEST_FLAG_PREFIX_ "gtest_" +#define GTEST_FLAG_PREFIX_DASH_ "gtest-" +#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" +#define GTEST_NAME_ "Google Test" +#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" + +// Determines the version of gcc that is used to compile this. +#ifdef __GNUC__ +// 40302 means version 4.3.2. +#define GTEST_GCC_VER_ \ + (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) +#endif // __GNUC__ + +// Determines the platform on which Google Test is compiled. +#ifdef __CYGWIN__ +#define GTEST_OS_CYGWIN 1 +#elif defined __SYMBIAN32__ +#define GTEST_OS_SYMBIAN 1 +#elif defined _WIN32 +#define GTEST_OS_WINDOWS 1 +#ifdef _WIN32_WCE +#define GTEST_OS_WINDOWS_MOBILE 1 +#elif defined(__MINGW__) || defined(__MINGW32__) +#define GTEST_OS_WINDOWS_MINGW 1 +#else +#define GTEST_OS_WINDOWS_DESKTOP 1 +#endif // _WIN32_WCE +#elif defined __APPLE__ +#define GTEST_OS_MAC 1 +#elif defined __linux__ +#define GTEST_OS_LINUX 1 +#elif defined __MVS__ +#define GTEST_OS_ZOS 1 +#elif defined(__sun) && defined(__SVR4) +#define GTEST_OS_SOLARIS 1 +#elif defined(_AIX) +#define GTEST_OS_AIX 1 +#endif // __CYGWIN__ + +#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_SYMBIAN || \ + GTEST_OS_SOLARIS || GTEST_OS_AIX + +// On some platforms, needs someone to define size_t, and +// won't compile otherwise. We can #include it here as we already +// included , which is guaranteed to define size_t through +// . +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define GTEST_USES_POSIX_RE 1 + +#elif GTEST_OS_WINDOWS + +#if !GTEST_OS_WINDOWS_MOBILE +#include // NOLINT +#include // NOLINT +#endif + +// is not available on Windows. Use our own simple regex +// implementation instead. +#define GTEST_USES_SIMPLE_RE 1 + +#else + +// may not be available on this platform. Use our own +// simple regex implementation instead. +#define GTEST_USES_SIMPLE_RE 1 + +#endif // GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC || + // GTEST_OS_SYMBIAN || GTEST_OS_SOLARIS || GTEST_OS_AIX + +#ifndef GTEST_HAS_EXCEPTIONS +// The user didn't tell us whether exceptions are enabled, so we need +// to figure it out. +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS +// macro to enable exceptions, so we'll do the same. +// Assumes that exceptions are enabled by default. +#ifndef _HAS_EXCEPTIONS +#define _HAS_EXCEPTIONS 1 +#endif // _HAS_EXCEPTIONS +#define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS +#elif defined(__GNUC__) && __EXCEPTIONS +// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__SUNPRO_CC) +// Sun Pro CC supports exceptions. However, there is no compile-time way of +// detecting whether they are enabled or not. Therefore, we assume that +// they are enabled unless the user tells us otherwise. +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__IBMCPP__) && __EXCEPTIONS +// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. +#define GTEST_HAS_EXCEPTIONS 1 +#else +// For other compilers, we assume exceptions are disabled to be +// conservative. +#define GTEST_HAS_EXCEPTIONS 0 +#endif // defined(_MSC_VER) || defined(__BORLANDC__) +#endif // GTEST_HAS_EXCEPTIONS + +#if !defined(GTEST_HAS_STD_STRING) +// Even though we don't use this macro any longer, we keep it in case +// some clients still depend on it. +#define GTEST_HAS_STD_STRING 1 +#elif !GTEST_HAS_STD_STRING +// The user told us that ::std::string isn't available. +#error "Google Test cannot be used where ::std::string isn't available." +#endif // !defined(GTEST_HAS_STD_STRING) + +#ifndef GTEST_HAS_GLOBAL_STRING +// The user didn't tell us whether ::string is available, so we need +// to figure it out. + +#define GTEST_HAS_GLOBAL_STRING 0 + +#endif // GTEST_HAS_GLOBAL_STRING + +#ifndef GTEST_HAS_STD_WSTRING +// The user didn't tell us whether ::std::wstring is available, so we need +// to figure it out. +// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring +// is available. + +// Cygwin 1.5 and below doesn't support ::std::wstring. +// Cygwin 1.7 might add wstring support; this should be updated when clear. +// Solaris' libc++ doesn't support it either. +#define GTEST_HAS_STD_WSTRING (!(GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) + +#endif // GTEST_HAS_STD_WSTRING + +#ifndef GTEST_HAS_GLOBAL_WSTRING +// The user didn't tell us whether ::wstring is available, so we need +// to figure it out. +#define GTEST_HAS_GLOBAL_WSTRING \ + (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Determines whether RTTI is available. +#ifndef GTEST_HAS_RTTI +// The user didn't tell us whether RTTI is enabled, so we need to +// figure it out. + +#ifdef _MSC_VER + +#ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif + +// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. +#elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) + +#ifdef __GXX_RTTI +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif // __GXX_RTTI + +// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if +// both the typeid and dynamic_cast features are present. +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) + +#ifdef __RTTI_ALL__ +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif + +#else + +// For all other compilers, we assume RTTI is enabled. +#define GTEST_HAS_RTTI 1 + +#endif // _MSC_VER + +#endif // GTEST_HAS_RTTI + +// It's this header's responsibility to #include when RTTI +// is enabled. +#if GTEST_HAS_RTTI +#include +#endif + +// Determines whether Google Test can use the pthreads library. +#ifndef GTEST_HAS_PTHREAD +// The user didn't tell us explicitly, so we assume pthreads support is +// available on Linux and Mac. +// +// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 +// to your compiler flags. +#define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC) +#endif // GTEST_HAS_PTHREAD + +// Determines whether Google Test can use tr1/tuple. You can define +// this macro to 0 to prevent Google Test from using tuple (any +// feature depending on tuple with be disabled in this mode). +#ifndef GTEST_HAS_TR1_TUPLE +// The user didn't tell us not to do it, so we assume it's OK. +#define GTEST_HAS_TR1_TUPLE 1 +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether Google Test's own tr1 tuple implementation +// should be used. +#ifndef GTEST_USE_OWN_TR1_TUPLE +// The user didn't tell us, so we need to figure it out. + +// We use our own TR1 tuple if we aren't sure the user has an +// implementation of it already. At this time, GCC 4.0.0+ and MSVC +// 2010 are the only mainstream compilers that come with a TR1 tuple +// implementation. NVIDIA's CUDA NVCC compiler pretends to be GCC by +// defining __GNUC__ and friends, but cannot compile GCC's tuple +// implementation. MSVC 2008 (9.0) provides TR1 tuple in a 323 MB +// Feature Pack download, which we cannot assume the user has. +#if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \ + || _MSC_VER >= 1600 +#define GTEST_USE_OWN_TR1_TUPLE 0 +#else +#define GTEST_USE_OWN_TR1_TUPLE 1 +#endif + +#endif // GTEST_USE_OWN_TR1_TUPLE + +// To avoid conditional compilation everywhere, we make it +// gtest-port.h's responsibility to #include the header implementing +// tr1/tuple. +#if GTEST_HAS_TR1_TUPLE + +#if GTEST_USE_OWN_TR1_TUPLE +#include +#elif GTEST_OS_SYMBIAN + +// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to +// use STLport's tuple implementation, which unfortunately doesn't +// work as the copy of STLport distributed with Symbian is incomplete. +// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to +// use its own tuple implementation. +#ifdef BOOST_HAS_TR1_TUPLE +#undef BOOST_HAS_TR1_TUPLE +#endif // BOOST_HAS_TR1_TUPLE + +// This prevents , which defines +// BOOST_HAS_TR1_TUPLE, from being #included by Boost's . +#define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED +#include + +#elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) +// GCC 4.0+ implements tr1/tuple in the header. This does +// not conform to the TR1 spec, which requires the header to be . + +#if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 +// Until version 4.3.2, gcc has a bug that causes , +// which is #included by , to not compile when RTTI is +// disabled. _TR1_FUNCTIONAL is the header guard for +// . Hence the following #define is a hack to prevent +// from being included. +#define _TR1_FUNCTIONAL 1 +#include +#undef _TR1_FUNCTIONAL // Allows the user to #include + // if he chooses to. +#else +#include // NOLINT +#endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 + +#else +// If the compiler is not GCC 4.0+, we assume the user is using a +// spec-conforming TR1 implementation. +#include // NOLINT +#endif // GTEST_USE_OWN_TR1_TUPLE + +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether clone(2) is supported. +// Usually it will only be available on Linux, excluding +// Linux on the Itanium architecture. +// Also see http://linux.die.net/man/2/clone. +#ifndef GTEST_HAS_CLONE +// The user didn't tell us, so we need to figure it out. + +#if GTEST_OS_LINUX && !defined(__ia64__) +#define GTEST_HAS_CLONE 1 +#else +#define GTEST_HAS_CLONE 0 +#endif // GTEST_OS_LINUX && !defined(__ia64__) + +#endif // GTEST_HAS_CLONE + +// Determines whether to support stream redirection. This is used to test +// output correctness and to implement death tests. +#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN +#define GTEST_HAS_STREAM_REDIRECTION_ 1 +#endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN + +// Determines whether to support death tests. +// Google Test does not support death tests for VC 7.1 and earlier as +// abort() in a VC 7.1 application compiled as GUI in debug config +// pops up a dialog window that cannot be suppressed programmatically. +#if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ + (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ + GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX) +#define GTEST_HAS_DEATH_TEST 1 +#include // NOLINT +#endif + +// We don't support MSVC 7.1 with exceptions disabled now. Therefore +// all the compilers we care about are adequate for supporting +// value-parameterized tests. +#define GTEST_HAS_PARAM_TEST 1 + +// Determines whether to support type-driven tests. + +// Typed tests need and variadic macros, which GCC, VC++ 8.0, +// Sun Pro CC, and IBM Visual Age support. +#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ + defined(__IBMCPP__) +#define GTEST_HAS_TYPED_TEST 1 +#define GTEST_HAS_TYPED_TEST_P 1 +#endif + +// Determines whether to support Combine(). This only makes sense when +// value-parameterized tests are enabled. The implementation doesn't +// work on Sun Studio since it doesn't understand templated conversion +// operators. +#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) +#define GTEST_HAS_COMBINE 1 +#endif + +// Determines whether the system compiler uses UTF-16 for encoding wide strings. +#define GTEST_WIDE_STRING_USES_UTF16_ \ + (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) + +// Defines some utility macros. + +// The GNU compiler emits a warning if nested "if" statements are followed by +// an "else" statement and braces are not used to explicitly disambiguate the +// "else" binding. This leads to problems with code like: +// +// if (gate) +// ASSERT_*(condition) << "Some message"; +// +// The "switch (0) case 0:" idiom is used to suppress this. +#ifdef __INTEL_COMPILER +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ +#else +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: // NOLINT +#endif + +// Use this annotation at the end of a struct/class definition to +// prevent the compiler from optimizing away instances that are never +// used. This is useful when all interesting logic happens inside the +// c'tor and / or d'tor. Example: +// +// struct Foo { +// Foo() { ... } +// } GTEST_ATTRIBUTE_UNUSED_; +// +// Also use it after a variable or parameter declaration to tell the +// compiler the variable/parameter does not have to be used. +#if defined(__GNUC__) && !defined(COMPILER_ICC) +#define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) +#else +#define GTEST_ATTRIBUTE_UNUSED_ +#endif + +// A macro to disallow operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_ASSIGN_(type)\ + void operator=(type const &) + +// A macro to disallow copy constructor and operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ + type(type const &);\ + GTEST_DISALLOW_ASSIGN_(type) + +// Tell the compiler to warn about unused return values for functions declared +// with this macro. The macro should be used on function declarations +// following the argument list: +// +// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; +#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) +#define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) +#else +#define GTEST_MUST_USE_RESULT_ +#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC + +// Determine whether the compiler supports Microsoft's Structured Exception +// Handling. This is supported by several Windows compilers but generally +// does not exist on any other system. +#ifndef GTEST_HAS_SEH +// The user didn't tell us, so we need to figure it out. + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// These two compilers are known to support SEH. +#define GTEST_HAS_SEH 1 +#else +// Assume no SEH. +#define GTEST_HAS_SEH 0 +#endif + +#endif // GTEST_HAS_SEH + +#ifdef _MSC_VER + +#if GTEST_LINKED_AS_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllimport) +#elif GTEST_CREATE_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllexport) +#endif + +#endif // _MSC_VER + +#ifndef GTEST_API_ +#define GTEST_API_ +#endif + +namespace testing { + +class Message; + +namespace internal { + +class String; + +typedef ::std::stringstream StrStream; + +// A helper for suppressing warnings on constant condition. It just +// returns 'condition'. +GTEST_API_ bool IsTrue(bool condition); + +// Defines scoped_ptr. + +// This implementation of scoped_ptr is PARTIAL - it only contains +// enough stuff to satisfy Google Test's need. +template +class scoped_ptr { + public: + typedef T element_type; + + explicit scoped_ptr(T* p = NULL) : ptr_(p) {} + ~scoped_ptr() { reset(); } + + T& operator*() const { return *ptr_; } + T* operator->() const { return ptr_; } + T* get() const { return ptr_; } + + T* release() { + T* const ptr = ptr_; + ptr_ = NULL; + return ptr; + } + + void reset(T* p = NULL) { + if (p != ptr_) { + if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. + delete ptr_; + } + ptr_ = p; + } + } + private: + T* ptr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); +}; + +// Defines RE. + +// A simple C++ wrapper for . It uses the POSIX Extended +// Regular Expression syntax. +class GTEST_API_ RE { + public: + // A copy constructor is required by the Standard to initialize object + // references from r-values. + RE(const RE& other) { Init(other.pattern()); } + + // Constructs an RE from a string. + RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + RE(const char* regex) { Init(regex); } // NOLINT + ~RE(); + + // Returns the string representation of the regex. + const char* pattern() const { return pattern_; } + + // FullMatch(str, re) returns true iff regular expression re matches + // the entire str. + // PartialMatch(str, re) returns true iff regular expression re + // matches a substring of str (including str itself). + // + // TODO(wan@google.com): make FullMatch() and PartialMatch() work + // when str contains NUL characters. + static bool FullMatch(const ::std::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::std::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } + +#if GTEST_HAS_GLOBAL_STRING + static bool FullMatch(const ::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } +#endif // GTEST_HAS_GLOBAL_STRING + + static bool FullMatch(const char* str, const RE& re); + static bool PartialMatch(const char* str, const RE& re); + + private: + void Init(const char* regex); + + // We use a const char* instead of a string, as Google Test may be used + // where string is not available. We also do not use Google Test's own + // String type here, in order to simplify dependencies between the + // files. + const char* pattern_; + bool is_valid_; +#if GTEST_USES_POSIX_RE + regex_t full_regex_; // For FullMatch(). + regex_t partial_regex_; // For PartialMatch(). +#else // GTEST_USES_SIMPLE_RE + const char* full_pattern_; // For FullMatch(); +#endif + + GTEST_DISALLOW_ASSIGN_(RE); +}; + +// Defines logging utilities: +// GTEST_LOG_(severity) - logs messages at the specified severity level. The +// message itself is streamed into the macro. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. + +enum GTestLogSeverity { + GTEST_INFO, + GTEST_WARNING, + GTEST_ERROR, + GTEST_FATAL +}; + +// Formats log entry severity, provides a stream object for streaming the +// log message, and terminates the message with a newline when going out of +// scope. +class GTEST_API_ GTestLog { + public: + GTestLog(GTestLogSeverity severity, const char* file, int line); + + // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. + ~GTestLog(); + + ::std::ostream& GetStream() { return ::std::cerr; } + + private: + const GTestLogSeverity severity_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); +}; + +#define GTEST_LOG_(severity) \ + ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ + __FILE__, __LINE__).GetStream() + +inline void LogToStderr() {} +inline void FlushInfoLog() { fflush(NULL); } + +// INTERNAL IMPLEMENTATION - DO NOT USE. +// +// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition +// is not satisfied. +// Synopsys: +// GTEST_CHECK_(boolean_condition); +// or +// GTEST_CHECK_(boolean_condition) << "Additional message"; +// +// This checks the condition and if the condition is not satisfied +// it prints message about the condition violation, including the +// condition itself, plus additional message streamed into it, if any, +// and then it aborts the program. It aborts the program irrespective of +// whether it is built in the debug mode or not. +#define GTEST_CHECK_(condition) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::IsTrue(condition)) \ + ; \ + else \ + GTEST_LOG_(FATAL) << "Condition " #condition " failed. " + +// An all-mode assert to verify that the given POSIX-style function +// call returns 0 (indicating success). Known limitation: this +// doesn't expand to a balanced 'if' statement, so enclose the macro +// in {} if you need to use it as the only statement in an 'if' +// branch. +#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ + if (const int gtest_error = (posix_call)) \ + GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ + << gtest_error + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Downcasts the pointer of type Base to Derived. +// Derived must be a subclass of Base. The parameter MUST +// point to a class of type Derived, not any subclass of it. +// When RTTI is available, the function performs a runtime +// check to enforce this. +template +Derived* CheckedDowncastToActualType(Base* base) { +#if GTEST_HAS_RTTI + GTEST_CHECK_(typeid(*base) == typeid(Derived)); + return dynamic_cast(base); // NOLINT +#else + return static_cast(base); // Poor man's downcast. +#endif +} + +#if GTEST_HAS_STREAM_REDIRECTION_ + +// Defines the stderr capturer: +// CaptureStdout - starts capturing stdout. +// GetCapturedStdout - stops capturing stdout and returns the captured string. +// CaptureStderr - starts capturing stderr. +// GetCapturedStderr - stops capturing stderr and returns the captured string. +// +GTEST_API_ void CaptureStdout(); +GTEST_API_ String GetCapturedStdout(); +GTEST_API_ void CaptureStderr(); +GTEST_API_ String GetCapturedStderr(); + +#endif // GTEST_HAS_STREAM_REDIRECTION_ + + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +extern ::std::vector g_argvs; + +// GTEST_HAS_DEATH_TEST implies we have ::std::string. +const ::std::vector& GetArgvs(); + +#endif // GTEST_HAS_DEATH_TEST + +// Defines synchronization primitives. + +#if GTEST_HAS_PTHREAD + +// Sleeps for (roughly) n milli-seconds. This function is only for +// testing Google Test's own constructs. Don't use it in user tests, +// either directly or indirectly. +inline void SleepMilliseconds(int n) { + const timespec time = { + 0, // 0 seconds. + n * 1000L * 1000L, // And n ms. + }; + nanosleep(&time, NULL); +} + +// Allows a controller thread to pause execution of newly created +// threads until notified. Instances of this class must be created +// and destroyed in the controller thread. +// +// This class is only for testing Google Test's own constructs. Do not +// use it in user tests, either directly or indirectly. +class Notification { + public: + Notification() : notified_(false) {} + + // Notifies all threads created with this notification to start. Must + // be called from the controller thread. + void Notify() { notified_ = true; } + + // Blocks until the controller thread notifies. Must be called from a test + // thread. + void WaitForNotification() { + while(!notified_) { + SleepMilliseconds(10); + } + } + + private: + volatile bool notified_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); +}; + +// As a C-function, ThreadFuncWithCLinkage cannot be templated itself. +// Consequently, it cannot select a correct instantiation of ThreadWithParam +// in order to call its Run(). Introducing ThreadWithParamBase as a +// non-templated base class for ThreadWithParam allows us to bypass this +// problem. +class ThreadWithParamBase { + public: + virtual ~ThreadWithParamBase() {} + virtual void Run() = 0; +}; + +// pthread_create() accepts a pointer to a function type with the C linkage. +// According to the Standard (7.5/1), function types with different linkages +// are different even if they are otherwise identical. Some compilers (for +// example, SunStudio) treat them as different types. Since class methods +// cannot be defined with C-linkage we need to define a free C-function to +// pass into pthread_create(). +extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { + static_cast(thread)->Run(); + return NULL; +} + +// Helper class for testing Google Test's multi-threading constructs. +// To use it, write: +// +// void ThreadFunc(int param) { /* Do things with param */ } +// Notification thread_can_start; +// ... +// // The thread_can_start parameter is optional; you can supply NULL. +// ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); +// thread_can_start.Notify(); +// +// These classes are only for testing Google Test's own constructs. Do +// not use them in user tests, either directly or indirectly. +template +class ThreadWithParam : public ThreadWithParamBase { + public: + typedef void (*UserThreadFunc)(T); + + ThreadWithParam( + UserThreadFunc func, T param, Notification* thread_can_start) + : func_(func), + param_(param), + thread_can_start_(thread_can_start), + finished_(false) { + ThreadWithParamBase* const base = this; + // The thread can be created only after all fields except thread_ + // have been initialized. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); + } + ~ThreadWithParam() { Join(); } + + void Join() { + if (!finished_) { + GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); + finished_ = true; + } + } + + virtual void Run() { + if (thread_can_start_ != NULL) + thread_can_start_->WaitForNotification(); + func_(param_); + } + + private: + const UserThreadFunc func_; // User-supplied thread function. + const T param_; // User-supplied parameter to the thread function. + // When non-NULL, used to block execution until the controller thread + // notifies. + Notification* const thread_can_start_; + bool finished_; // true iff we know that the thread function has finished. + pthread_t thread_; // The native thread object. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); +}; + +// gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is +// true. +#include + +// MutexBase and Mutex implement mutex on pthreads-based platforms. They +// are used in conjunction with class MutexLock: +// +// Mutex mutex; +// ... +// MutexLock lock(&mutex); // Acquires the mutex and releases it at the end +// // of the current scope. +// +// MutexBase implements behavior for both statically and dynamically +// allocated mutexes. Do not use MutexBase directly. Instead, write +// the following to define a static mutex: +// +// GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); +// +// You can forward declare a static mutex like this: +// +// GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); +// +// To create a dynamic mutex, just define an object of type Mutex. +class MutexBase { + public: + // Acquires this mutex. + void Lock() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); + owner_ = pthread_self(); + } + + // Releases this mutex. + void Unlock() { + // We don't protect writing to owner_ here, as it's the caller's + // responsibility to ensure that the current thread holds the + // mutex when this is called. + owner_ = 0; + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); + } + + // Does nothing if the current thread holds the mutex. Otherwise, crashes + // with high probability. + void AssertHeld() const { + GTEST_CHECK_(owner_ == pthread_self()) + << "The current thread is not holding the mutex @" << this; + } + + // A static mutex may be used before main() is entered. It may even + // be used before the dynamic initialization stage. Therefore we + // must be able to initialize a static mutex object at link time. + // This means MutexBase has to be a POD and its member variables + // have to be public. + public: + pthread_mutex_t mutex_; // The underlying pthread mutex. + pthread_t owner_; // The thread holding the mutex; 0 means no one holds it. +}; + +// Forward-declares a static mutex. +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::MutexBase mutex + +// Defines and statically (i.e. at link time) initializes a static mutex. +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ + ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 } + +// The Mutex class can only be used for mutexes created at runtime. It +// shares its API with MutexBase otherwise. +class Mutex : public MutexBase { + public: + Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + owner_ = 0; + } + ~Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); +}; + +// We cannot name this class MutexLock as the ctor declaration would +// conflict with a macro named MutexLock, which is defined on some +// platforms. Hence the typedef trick below. +class GTestMutexLock { + public: + explicit GTestMutexLock(MutexBase* mutex) + : mutex_(mutex) { mutex_->Lock(); } + + ~GTestMutexLock() { mutex_->Unlock(); } + + private: + MutexBase* const mutex_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); +}; + +typedef GTestMutexLock MutexLock; + +// Helpers for ThreadLocal. + +// pthread_key_create() requires DeleteThreadLocalValue() to have +// C-linkage. Therefore it cannot be templatized to access +// ThreadLocal. Hence the need for class +// ThreadLocalValueHolderBase. +class ThreadLocalValueHolderBase { + public: + virtual ~ThreadLocalValueHolderBase() {} +}; + +// Called by pthread to delete thread-local data stored by +// pthread_setspecific(). +extern "C" inline void DeleteThreadLocalValue(void* value_holder) { + delete static_cast(value_holder); +} + +// Implements thread-local storage on pthreads-based systems. +// +// // Thread 1 +// ThreadLocal tl(100); // 100 is the default value for each thread. +// +// // Thread 2 +// tl.set(150); // Changes the value for thread 2 only. +// EXPECT_EQ(150, tl.get()); +// +// // Thread 1 +// EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. +// tl.set(200); +// EXPECT_EQ(200, tl.get()); +// +// The template type argument T must have a public copy constructor. +// In addition, the default ThreadLocal constructor requires T to have +// a public default constructor. +// +// An object managed for a thread by a ThreadLocal instance is deleted +// when the thread exits. Or, if the ThreadLocal instance dies in +// that thread, when the ThreadLocal dies. It's the user's +// responsibility to ensure that all other threads using a ThreadLocal +// have exited when it dies, or the per-thread objects for those +// threads will not be deleted. +// +// Google Test only uses global ThreadLocal objects. That means they +// will die after main() has returned. Therefore, no per-thread +// object managed by Google Test will be leaked as long as all threads +// using Google Test have exited when main() returns. +template +class ThreadLocal { + public: + ThreadLocal() : key_(CreateKey()), + default_() {} + explicit ThreadLocal(const T& value) : key_(CreateKey()), + default_(value) {} + + ~ThreadLocal() { + // Destroys the managed object for the current thread, if any. + DeleteThreadLocalValue(pthread_getspecific(key_)); + + // Releases resources associated with the key. This will *not* + // delete managed objects for other threads. + GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); + } + + T* pointer() { return GetOrCreateValue(); } + const T* pointer() const { return GetOrCreateValue(); } + const T& get() const { return *pointer(); } + void set(const T& value) { *pointer() = value; } + + private: + // Holds a value of type T. + class ValueHolder : public ThreadLocalValueHolderBase { + public: + explicit ValueHolder(const T& value) : value_(value) {} + + T* pointer() { return &value_; } + + private: + T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); + }; + + static pthread_key_t CreateKey() { + pthread_key_t key; + // When a thread exits, DeleteThreadLocalValue() will be called on + // the object managed for that thread. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_key_create(&key, &DeleteThreadLocalValue)); + return key; + } + + T* GetOrCreateValue() const { + ThreadLocalValueHolderBase* const holder = + static_cast(pthread_getspecific(key_)); + if (holder != NULL) { + return CheckedDowncastToActualType(holder)->pointer(); + } + + ValueHolder* const new_holder = new ValueHolder(default_); + ThreadLocalValueHolderBase* const holder_base = new_holder; + GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); + return new_holder->pointer(); + } + + // A key pthreads uses for looking up per-thread values. + const pthread_key_t key_; + const T default_; // The default value for each thread. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); +}; + +#define GTEST_IS_THREADSAFE 1 + +#else // GTEST_HAS_PTHREAD + +// A dummy implementation of synchronization primitives (mutex, lock, +// and thread-local variable). Necessary for compiling Google Test where +// mutex is not supported - using Google Test in multiple threads is not +// supported on such platforms. + +class Mutex { + public: + Mutex() {} + void AssertHeld() const {} +}; + +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::Mutex mutex + +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex + +class GTestMutexLock { + public: + explicit GTestMutexLock(Mutex*) {} // NOLINT +}; + +typedef GTestMutexLock MutexLock; + +template +class ThreadLocal { + public: + ThreadLocal() : value_() {} + explicit ThreadLocal(const T& value) : value_(value) {} + T* pointer() { return &value_; } + const T* pointer() const { return &value_; } + const T& get() const { return value_; } + void set(const T& value) { value_ = value; } + private: + T value_; +}; + +// The above synchronization primitives have dummy implementations. +// Therefore Google Test is not thread-safe. +#define GTEST_IS_THREADSAFE 0 + +#endif // GTEST_HAS_PTHREAD + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +GTEST_API_ size_t GetThreadCount(); + +// Passing non-POD classes through ellipsis (...) crashes the ARM +// compiler and generates a warning in Sun Studio. The Nokia Symbian +// and the IBM XL C/C++ compiler try to instantiate a copy constructor +// for objects passed through ellipsis (...), failing for uncopyable +// objects. We define this to ensure that only POD is passed through +// ellipsis on these systems. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +#define GTEST_ELLIPSIS_NEEDS_POD_ 1 +#else +#define GTEST_CAN_COMPARE_NULL 1 +#endif + +// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between +// const T& and const T* in a function template. These compilers +// _can_ decide between class template specializations for T and T*, +// so a tr1::type_traits-like is_pointer works. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) +#define GTEST_NEEDS_IS_POINTER_ 1 +#endif + +template +struct bool_constant { + typedef bool_constant type; + static const bool value = bool_value; +}; +template const bool bool_constant::value; + +typedef bool_constant false_type; +typedef bool_constant true_type; + +template +struct is_pointer : public false_type {}; + +template +struct is_pointer : public true_type {}; + +#if GTEST_OS_WINDOWS +#define GTEST_PATH_SEP_ "\\" +#define GTEST_HAS_ALT_PATH_SEP_ 1 +// The biggest signed integer type the compiler supports. +typedef __int64 BiggestInt; +#else +#define GTEST_PATH_SEP_ "/" +#define GTEST_HAS_ALT_PATH_SEP_ 0 +typedef long long BiggestInt; // NOLINT +#endif // GTEST_OS_WINDOWS + +// The testing::internal::posix namespace holds wrappers for common +// POSIX functions. These wrappers hide the differences between +// Windows/MSVC and POSIX systems. Since some compilers define these +// standard functions as macros, the wrapper cannot have the same name +// as the wrapped function. + +namespace posix { + +// Functions with a different name on Windows. + +#if GTEST_OS_WINDOWS + +typedef struct _stat StatStruct; + +#ifdef __BORLANDC__ +inline int IsATTY(int fd) { return isatty(fd); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +#else // !__BORLANDC__ +#if GTEST_OS_WINDOWS_MOBILE +inline int IsATTY(int /* fd */) { return 0; } +#else +inline int IsATTY(int fd) { return _isatty(fd); } +#endif // GTEST_OS_WINDOWS_MOBILE +inline int StrCaseCmp(const char* s1, const char* s2) { + return _stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return _strdup(src); } +#endif // __BORLANDC__ + +#if GTEST_OS_WINDOWS_MOBILE +inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } +// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this +// time and thus not defined there. +#else +inline int FileNo(FILE* file) { return _fileno(file); } +inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } +inline int RmDir(const char* dir) { return _rmdir(dir); } +inline bool IsDir(const StatStruct& st) { + return (_S_IFDIR & st.st_mode) != 0; +} +#endif // GTEST_OS_WINDOWS_MOBILE + +#else + +typedef struct stat StatStruct; + +inline int FileNo(FILE* file) { return fileno(file); } +inline int IsATTY(int fd) { return isatty(fd); } +inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return strcasecmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +inline int RmDir(const char* dir) { return rmdir(dir); } +inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } + +#endif // GTEST_OS_WINDOWS + +// Functions deprecated by MSVC 8.0. + +#ifdef _MSC_VER +// Temporarily disable warning 4996 (deprecated function). +#pragma warning(push) +#pragma warning(disable:4996) +#endif + +inline const char* StrNCpy(char* dest, const char* src, size_t n) { + return strncpy(dest, src, n); +} + +// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and +// StrError() aren't needed on Windows CE at this time and thus not +// defined there. + +#if !GTEST_OS_WINDOWS_MOBILE +inline int ChDir(const char* dir) { return chdir(dir); } +#endif +inline FILE* FOpen(const char* path, const char* mode) { + return fopen(path, mode); +} +#if !GTEST_OS_WINDOWS_MOBILE +inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { + return freopen(path, mode, stream); +} +inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } +#endif +inline int FClose(FILE* fp) { return fclose(fp); } +#if !GTEST_OS_WINDOWS_MOBILE +inline int Read(int fd, void* buf, unsigned int count) { + return static_cast(read(fd, buf, count)); +} +inline int Write(int fd, const void* buf, unsigned int count) { + return static_cast(write(fd, buf, count)); +} +inline int Close(int fd) { return close(fd); } +inline const char* StrError(int errnum) { return strerror(errnum); } +#endif +inline const char* GetEnv(const char* name) { +#if GTEST_OS_WINDOWS_MOBILE + // We are on Windows CE, which has no environment variables. + return NULL; +#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) + // Environment variables which we programmatically clear will be set to the + // empty string rather than unset (NULL). Handle that case. + const char* const env = getenv(name); + return (env != NULL && env[0] != '\0') ? env : NULL; +#else + return getenv(name); +#endif +} + +#ifdef _MSC_VER +#pragma warning(pop) // Restores the warning state. +#endif + +#if GTEST_OS_WINDOWS_MOBILE +// Windows CE has no C library. The abort() function is used in +// several places in Google Test. This implementation provides a reasonable +// imitation of standard behaviour. +void Abort(); +#else +inline void Abort() { abort(); } +#endif // GTEST_OS_WINDOWS_MOBILE + +} // namespace posix + +// The maximum number a BiggestInt can represent. This definition +// works no matter BiggestInt is represented in one's complement or +// two's complement. +// +// We cannot rely on numeric_limits in STL, as __int64 and long long +// are not part of standard C++ and numeric_limits doesn't need to be +// defined for them. +const BiggestInt kMaxBiggestInt = + ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); + +// This template class serves as a compile-time function from size to +// type. It maps a size in bytes to a primitive type with that +// size. e.g. +// +// TypeWithSize<4>::UInt +// +// is typedef-ed to be unsigned int (unsigned integer made up of 4 +// bytes). +// +// Such functionality should belong to STL, but I cannot find it +// there. +// +// Google Test uses this class in the implementation of floating-point +// comparison. +// +// For now it only handles UInt (unsigned int) as that's all Google Test +// needs. Other types can be easily added in the future if need +// arises. +template +class TypeWithSize { + public: + // This prevents the user from using TypeWithSize with incorrect + // values of N. + typedef void UInt; +}; + +// The specialization for size 4. +template <> +class TypeWithSize<4> { + public: + // unsigned int has size 4 in both gcc and MSVC. + // + // As base/basictypes.h doesn't compile on Windows, we cannot use + // uint32, uint64, and etc here. + typedef int Int; + typedef unsigned int UInt; +}; + +// The specialization for size 8. +template <> +class TypeWithSize<8> { + public: +#if GTEST_OS_WINDOWS + typedef __int64 Int; + typedef unsigned __int64 UInt; +#else + typedef long long Int; // NOLINT + typedef unsigned long long UInt; // NOLINT +#endif // GTEST_OS_WINDOWS +}; + +// Integer types of known sizes. +typedef TypeWithSize<4>::Int Int32; +typedef TypeWithSize<4>::UInt UInt32; +typedef TypeWithSize<8>::Int Int64; +typedef TypeWithSize<8>::UInt UInt64; +typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. + +// Utilities for command line flags and environment variables. + +// Macro for referencing flags. +#define GTEST_FLAG(name) FLAGS_gtest_##name + +// Macros for declaring flags. +#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) +#define GTEST_DECLARE_int32_(name) \ + GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) +#define GTEST_DECLARE_string_(name) \ + GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name) + +// Macros for defining flags. +#define GTEST_DEFINE_bool_(name, default_val, doc) \ + GTEST_API_ bool GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_int32_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_string_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val) + +// Parses 'str' for a 32-bit signed integer. If successful, writes the result +// to *value and returns true; otherwise leaves *value unchanged and returns +// false. +// TODO(chandlerc): Find a better way to refactor flag and environment parsing +// out of both gtest-port.cc and gtest.cc to avoid exporting this utility +// function. +bool ParseInt32(const Message& src_text, const char* str, Int32* value); + +// Parses a bool/Int32/string from the environment variable +// corresponding to the given Google Test flag. +bool BoolFromGTestEnv(const char* flag, bool default_val); +GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); +const char* StringFromGTestEnv(const char* flag, const char* default_val); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-string.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-string.h new file mode 100644 index 00000000..aff093de --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-string.h @@ -0,0 +1,350 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares the String class and functions used internally by +// Google Test. They are subject to change without notice. They should not used +// by code external to Google Test. +// +// This header file is #included by . +// It should not be #included by other files. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ + +#ifdef __BORLANDC__ +// string.h is not guaranteed to provide strcpy on C++ Builder. +#include +#endif + +#include +#include + +#include + +namespace testing { +namespace internal { + +// String - a UTF-8 string class. +// +// For historic reasons, we don't use std::string. +// +// TODO(wan@google.com): replace this class with std::string or +// implement it in terms of the latter. +// +// Note that String can represent both NULL and the empty string, +// while std::string cannot represent NULL. +// +// NULL and the empty string are considered different. NULL is less +// than anything (including the empty string) except itself. +// +// This class only provides minimum functionality necessary for +// implementing Google Test. We do not intend to implement a full-fledged +// string class here. +// +// Since the purpose of this class is to provide a substitute for +// std::string on platforms where it cannot be used, we define a copy +// constructor and assignment operators such that we don't need +// conditional compilation in a lot of places. +// +// In order to make the representation efficient, the d'tor of String +// is not virtual. Therefore DO NOT INHERIT FROM String. +class GTEST_API_ String { + public: + // Static utility methods + + // Returns the input enclosed in double quotes if it's not NULL; + // otherwise returns "(null)". For example, "\"Hello\"" is returned + // for input "Hello". + // + // This is useful for printing a C string in the syntax of a literal. + // + // Known issue: escape sequences are not handled yet. + static String ShowCStringQuoted(const char* c_str); + + // Clones a 0-terminated C string, allocating memory using new. The + // caller is responsible for deleting the return value using + // delete[]. Returns the cloned string, or NULL if the input is + // NULL. + // + // This is different from strdup() in string.h, which allocates + // memory using malloc(). + static const char* CloneCString(const char* c_str); + +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be + // able to pass strings to Win32 APIs on CE we need to convert them + // to 'Unicode', UTF-16. + + // Creates a UTF-16 wide string from the given ANSI string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the wide string, or NULL if the + // input is NULL. + // + // The wide string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static LPCWSTR AnsiToUtf16(const char* c_str); + + // Creates an ANSI string from the given wide string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the ANSI string, or NULL if the + // input is NULL. + // + // The returned string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static const char* Utf16ToAnsi(LPCWSTR utf16_str); +#endif + + // Compares two C strings. Returns true iff they have the same content. + // + // Unlike strcmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CStringEquals(const char* lhs, const char* rhs); + + // Converts a wide C string to a String using the UTF-8 encoding. + // NULL will be converted to "(null)". If an error occurred during + // the conversion, "(failed to convert from wide string)" is + // returned. + static String ShowWideCString(const wchar_t* wide_c_str); + + // Similar to ShowWideCString(), except that this function encloses + // the converted string in double quotes. + static String ShowWideCStringQuoted(const wchar_t* wide_c_str); + + // Compares two wide C strings. Returns true iff they have the same + // content. + // + // Unlike wcscmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); + + // Compares two C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike strcasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CaseInsensitiveCStringEquals(const char* lhs, + const char* rhs); + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. + static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs); + + // Formats a list of arguments to a String, using the same format + // spec string as for printf. + // + // We do not use the StringPrintf class as it is not universally + // available. + // + // The result is limited to 4096 characters (including the tailing + // 0). If 4096 characters are not enough to format the input, + // "" is returned. + static String Format(const char* format, ...); + + // C'tors + + // The default c'tor constructs a NULL string. + String() : c_str_(NULL), length_(0) {} + + // Constructs a String by cloning a 0-terminated C string. + String(const char* a_c_str) { // NOLINT + if (a_c_str == NULL) { + c_str_ = NULL; + length_ = 0; + } else { + ConstructNonNull(a_c_str, strlen(a_c_str)); + } + } + + // Constructs a String by copying a given number of chars from a + // buffer. E.g. String("hello", 3) creates the string "hel", + // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "", + // and String(NULL, 1) results in access violation. + String(const char* buffer, size_t a_length) { + ConstructNonNull(buffer, a_length); + } + + // The copy c'tor creates a new copy of the string. The two + // String objects do not share content. + String(const String& str) : c_str_(NULL), length_(0) { *this = str; } + + // D'tor. String is intended to be a final class, so the d'tor + // doesn't need to be virtual. + ~String() { delete[] c_str_; } + + // Allows a String to be implicitly converted to an ::std::string or + // ::string, and vice versa. Converting a String containing a NULL + // pointer to ::std::string or ::string is undefined behavior. + // Converting a ::std::string or ::string containing an embedded NUL + // character to a String will result in the prefix up to the first + // NUL character. + String(const ::std::string& str) { + ConstructNonNull(str.c_str(), str.length()); + } + + operator ::std::string() const { return ::std::string(c_str(), length()); } + +#if GTEST_HAS_GLOBAL_STRING + String(const ::string& str) { + ConstructNonNull(str.c_str(), str.length()); + } + + operator ::string() const { return ::string(c_str(), length()); } +#endif // GTEST_HAS_GLOBAL_STRING + + // Returns true iff this is an empty string (i.e. ""). + bool empty() const { return (c_str() != NULL) && (length() == 0); } + + // Compares this with another String. + // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 + // if this is greater than rhs. + int Compare(const String& rhs) const; + + // Returns true iff this String equals the given C string. A NULL + // string and a non-NULL string are considered not equal. + bool operator==(const char* a_c_str) const { return Compare(a_c_str) == 0; } + + // Returns true iff this String is less than the given String. A + // NULL string is considered less than "". + bool operator<(const String& rhs) const { return Compare(rhs) < 0; } + + // Returns true iff this String doesn't equal the given C string. A NULL + // string and a non-NULL string are considered not equal. + bool operator!=(const char* a_c_str) const { return !(*this == a_c_str); } + + // Returns true iff this String ends with the given suffix. *Any* + // String is considered to end with a NULL or empty suffix. + bool EndsWith(const char* suffix) const; + + // Returns true iff this String ends with the given suffix, not considering + // case. Any String is considered to end with a NULL or empty suffix. + bool EndsWithCaseInsensitive(const char* suffix) const; + + // Returns the length of the encapsulated string, or 0 if the + // string is NULL. + size_t length() const { return length_; } + + // Gets the 0-terminated C string this String object represents. + // The String object still owns the string. Therefore the caller + // should NOT delete the return value. + const char* c_str() const { return c_str_; } + + // Assigns a C string to this object. Self-assignment works. + const String& operator=(const char* a_c_str) { + return *this = String(a_c_str); + } + + // Assigns a String object to this object. Self-assignment works. + const String& operator=(const String& rhs) { + if (this != &rhs) { + delete[] c_str_; + if (rhs.c_str() == NULL) { + c_str_ = NULL; + length_ = 0; + } else { + ConstructNonNull(rhs.c_str(), rhs.length()); + } + } + + return *this; + } + + private: + // Constructs a non-NULL String from the given content. This + // function can only be called when data_ has not been allocated. + // ConstructNonNull(NULL, 0) results in an empty string (""). + // ConstructNonNull(NULL, non_zero) is undefined behavior. + void ConstructNonNull(const char* buffer, size_t a_length) { + char* const str = new char[a_length + 1]; + memcpy(str, buffer, a_length); + str[a_length] = '\0'; + c_str_ = str; + length_ = a_length; + } + + const char* c_str_; + size_t length_; +}; // class String + +// Streams a String to an ostream. Each '\0' character in the String +// is replaced with "\\0". +inline ::std::ostream& operator<<(::std::ostream& os, const String& str) { + if (str.c_str() == NULL) { + os << "(null)"; + } else { + const char* const c_str = str.c_str(); + for (size_t i = 0; i != str.length(); i++) { + if (c_str[i] == '\0') { + os << "\\0"; + } else { + os << c_str[i]; + } + } + } + return os; +} + +// Gets the content of the StrStream's buffer as a String. Each '\0' +// character in the buffer is replaced with "\\0". +GTEST_API_ String StrStreamToString(StrStream* stream); + +// Converts a streamable value to a String. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". + +// Declared here but defined in gtest.h, so that it has access +// to the definition of the Message class, required by the ARM +// compiler. +template +String StreamableToString(const T& streamable); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h new file mode 100644 index 00000000..16178fc0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h @@ -0,0 +1,968 @@ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2009 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Implements a subset of TR1 tuple needed by Google Test and Google Mock. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ + +#include // For ::std::pair. + +// The compiler used in Symbian has a bug that prevents us from declaring the +// tuple template as a friend (it complains that tuple is redefined). This +// hack bypasses the bug by declaring the members that should otherwise be +// private as public. +// Sun Studio versions < 12 also have the above bug. +#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: +#else +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ + template friend class tuple; \ + private: +#endif + +// GTEST_n_TUPLE_(T) is the type of an n-tuple. +#define GTEST_0_TUPLE_(T) tuple<> +#define GTEST_1_TUPLE_(T) tuple +#define GTEST_2_TUPLE_(T) tuple +#define GTEST_3_TUPLE_(T) tuple +#define GTEST_4_TUPLE_(T) tuple +#define GTEST_5_TUPLE_(T) tuple +#define GTEST_6_TUPLE_(T) tuple +#define GTEST_7_TUPLE_(T) tuple +#define GTEST_8_TUPLE_(T) tuple +#define GTEST_9_TUPLE_(T) tuple +#define GTEST_10_TUPLE_(T) tuple + +// GTEST_n_TYPENAMES_(T) declares a list of n typenames. +#define GTEST_0_TYPENAMES_(T) +#define GTEST_1_TYPENAMES_(T) typename T##0 +#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 +#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 +#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3 +#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4 +#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5 +#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6 +#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 +#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8 +#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8, typename T##9 + +// In theory, defining stuff in the ::std namespace is undefined +// behavior. We can do this as we are playing the role of a standard +// library vendor. +namespace std { +namespace tr1 { + +template +class tuple; + +// Anything in namespace gtest_internal is Google Test's INTERNAL +// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. +namespace gtest_internal { + +// ByRef::type is T if T is a reference; otherwise it's const T&. +template +struct ByRef { typedef const T& type; }; // NOLINT +template +struct ByRef { typedef T& type; }; // NOLINT + +// A handy wrapper for ByRef. +#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type + +// AddRef::type is T if T is a reference; otherwise it's T&. This +// is the same as tr1::add_reference::type. +template +struct AddRef { typedef T& type; }; // NOLINT +template +struct AddRef { typedef T& type; }; // NOLINT + +// A handy wrapper for AddRef. +#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type + +// A helper for implementing get(). +template class Get; + +// A helper for implementing tuple_element. kIndexValid is true +// iff k < the number of fields in tuple type T. +template +struct TupleElement; + +template +struct TupleElement { typedef T0 type; }; + +template +struct TupleElement { typedef T1 type; }; + +template +struct TupleElement { typedef T2 type; }; + +template +struct TupleElement { typedef T3 type; }; + +template +struct TupleElement { typedef T4 type; }; + +template +struct TupleElement { typedef T5 type; }; + +template +struct TupleElement { typedef T6 type; }; + +template +struct TupleElement { typedef T7 type; }; + +template +struct TupleElement { typedef T8 type; }; + +template +struct TupleElement { typedef T9 type; }; + +} // namespace gtest_internal + +template <> +class tuple<> { + public: + tuple() {} + tuple(const tuple& /* t */) {} + tuple& operator=(const tuple& /* t */) { return *this; } +}; + +template +class GTEST_1_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} + + tuple(const tuple& t) : f0_(t.f0_) {} + + template + tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_1_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { + f0_ = t.f0_; + return *this; + } + + T0 f0_; +}; + +template +class GTEST_2_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), + f1_(f1) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} + + template + tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} + template + tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_2_TUPLE_(U)& t) { + return CopyFrom(t); + } + template + tuple& operator=(const ::std::pair& p) { + f0_ = p.first; + f1_ = p.second; + return *this; + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + return *this; + } + + T0 f0_; + T1 f1_; +}; + +template +class GTEST_3_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + template + tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_3_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; +}; + +template +class GTEST_4_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} + + template + tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_4_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; +}; + +template +class GTEST_5_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, + GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_) {} + + template + tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_5_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; +}; + +template +class GTEST_6_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_) {} + + template + tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_6_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; +}; + +template +class GTEST_7_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + template + tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_7_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; +}; + +template +class GTEST_8_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, + GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + template + tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_8_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; +}; + +template +class GTEST_9_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + template + tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_9_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; +}; + +template +class tuple { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), + f9_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} + + template + tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), + f9_(t.f9_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_10_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + f9_ = t.f9_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; + T9 f9_; +}; + +// 6.1.3.2 Tuple creation functions. + +// Known limitations: we don't support passing an +// std::tr1::reference_wrapper to make_tuple(). And we don't +// implement tie(). + +inline tuple<> make_tuple() { return tuple<>(); } + +template +inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { + return GTEST_1_TUPLE_(T)(f0); +} + +template +inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { + return GTEST_2_TUPLE_(T)(f0, f1); +} + +template +inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { + return GTEST_3_TUPLE_(T)(f0, f1, f2); +} + +template +inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3) { + return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); +} + +template +inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4) { + return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); +} + +template +inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5) { + return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); +} + +template +inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6) { + return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); +} + +template +inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { + return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); +} + +template +inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8) { + return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); +} + +template +inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8, const T9& f9) { + return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); +} + +// 6.1.3.3 Tuple helper classes. + +template struct tuple_size; + +template +struct tuple_size { static const int value = 0; }; + +template +struct tuple_size { static const int value = 1; }; + +template +struct tuple_size { static const int value = 2; }; + +template +struct tuple_size { static const int value = 3; }; + +template +struct tuple_size { static const int value = 4; }; + +template +struct tuple_size { static const int value = 5; }; + +template +struct tuple_size { static const int value = 6; }; + +template +struct tuple_size { static const int value = 7; }; + +template +struct tuple_size { static const int value = 8; }; + +template +struct tuple_size { static const int value = 9; }; + +template +struct tuple_size { static const int value = 10; }; + +template +struct tuple_element { + typedef typename gtest_internal::TupleElement< + k < (tuple_size::value), k, Tuple>::type type; +}; + +#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type + +// 6.1.3.4 Element access. + +namespace gtest_internal { + +template <> +class Get<0> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + Field(Tuple& t) { return t.f0_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + ConstField(const Tuple& t) { return t.f0_; } +}; + +template <> +class Get<1> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + Field(Tuple& t) { return t.f1_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + ConstField(const Tuple& t) { return t.f1_; } +}; + +template <> +class Get<2> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + Field(Tuple& t) { return t.f2_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + ConstField(const Tuple& t) { return t.f2_; } +}; + +template <> +class Get<3> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + Field(Tuple& t) { return t.f3_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + ConstField(const Tuple& t) { return t.f3_; } +}; + +template <> +class Get<4> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + Field(Tuple& t) { return t.f4_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + ConstField(const Tuple& t) { return t.f4_; } +}; + +template <> +class Get<5> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + Field(Tuple& t) { return t.f5_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + ConstField(const Tuple& t) { return t.f5_; } +}; + +template <> +class Get<6> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + Field(Tuple& t) { return t.f6_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + ConstField(const Tuple& t) { return t.f6_; } +}; + +template <> +class Get<7> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + Field(Tuple& t) { return t.f7_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + ConstField(const Tuple& t) { return t.f7_; } +}; + +template <> +class Get<8> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + Field(Tuple& t) { return t.f8_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + ConstField(const Tuple& t) { return t.f8_; } +}; + +template <> +class Get<9> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + Field(Tuple& t) { return t.f9_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + ConstField(const Tuple& t) { return t.f9_; } +}; + +} // namespace gtest_internal + +template +GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::Field(t); +} + +template +GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(const GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::ConstField(t); +} + +// 6.1.3.5 Relational operators + +// We only implement == and !=, as we don't have a need for the rest yet. + +namespace gtest_internal { + +// SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the +// first k fields of t1 equals the first k fields of t2. +// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if +// k1 != k2. +template +struct SameSizeTuplePrefixComparator; + +template <> +struct SameSizeTuplePrefixComparator<0, 0> { + template + static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { + return true; + } +}; + +template +struct SameSizeTuplePrefixComparator { + template + static bool Eq(const Tuple1& t1, const Tuple2& t2) { + return SameSizeTuplePrefixComparator::Eq(t1, t2) && + ::std::tr1::get(t1) == ::std::tr1::get(t2); + } +}; + +} // namespace gtest_internal + +template +inline bool operator==(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { + return gtest_internal::SameSizeTuplePrefixComparator< + tuple_size::value, + tuple_size::value>::Eq(t, u); +} + +template +inline bool operator!=(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { return !(t == u); } + +// 6.1.4 Pairs. +// Unimplemented. + +} // namespace tr1 +} // namespace std + +#undef GTEST_0_TUPLE_ +#undef GTEST_1_TUPLE_ +#undef GTEST_2_TUPLE_ +#undef GTEST_3_TUPLE_ +#undef GTEST_4_TUPLE_ +#undef GTEST_5_TUPLE_ +#undef GTEST_6_TUPLE_ +#undef GTEST_7_TUPLE_ +#undef GTEST_8_TUPLE_ +#undef GTEST_9_TUPLE_ +#undef GTEST_10_TUPLE_ + +#undef GTEST_0_TYPENAMES_ +#undef GTEST_1_TYPENAMES_ +#undef GTEST_2_TYPENAMES_ +#undef GTEST_3_TYPENAMES_ +#undef GTEST_4_TYPENAMES_ +#undef GTEST_5_TYPENAMES_ +#undef GTEST_6_TYPENAMES_ +#undef GTEST_7_TYPENAMES_ +#undef GTEST_8_TYPENAMES_ +#undef GTEST_9_TYPENAMES_ +#undef GTEST_10_TYPENAMES_ + +#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ +#undef GTEST_BY_REF_ +#undef GTEST_ADD_REF_ +#undef GTEST_TUPLE_ELEMENT_ + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h.pump b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h.pump new file mode 100644 index 00000000..85ebc806 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-tuple.h.pump @@ -0,0 +1,336 @@ +$$ -*- mode: c++; -*- +$var n = 10 $$ Maximum number of tuple fields we want to support. +$$ This meta comment fixes auto-indentation in Emacs. }} +// Copyright 2009 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Implements a subset of TR1 tuple needed by Google Test and Google Mock. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ + +#include // For ::std::pair. + +// The compiler used in Symbian has a bug that prevents us from declaring the +// tuple template as a friend (it complains that tuple is redefined). This +// hack bypasses the bug by declaring the members that should otherwise be +// private as public. +// Sun Studio versions < 12 also have the above bug. +#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: +#else +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ + template friend class tuple; \ + private: +#endif + + +$range i 0..n-1 +$range j 0..n +$range k 1..n +// GTEST_n_TUPLE_(T) is the type of an n-tuple. +#define GTEST_0_TUPLE_(T) tuple<> + +$for k [[ +$range m 0..k-1 +$range m2 k..n-1 +#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]> + +]] + +// GTEST_n_TYPENAMES_(T) declares a list of n typenames. + +$for j [[ +$range m 0..j-1 +#define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]] + + +]] + +// In theory, defining stuff in the ::std namespace is undefined +// behavior. We can do this as we are playing the role of a standard +// library vendor. +namespace std { +namespace tr1 { + +template <$for i, [[typename T$i = void]]> +class tuple; + +// Anything in namespace gtest_internal is Google Test's INTERNAL +// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. +namespace gtest_internal { + +// ByRef::type is T if T is a reference; otherwise it's const T&. +template +struct ByRef { typedef const T& type; }; // NOLINT +template +struct ByRef { typedef T& type; }; // NOLINT + +// A handy wrapper for ByRef. +#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type + +// AddRef::type is T if T is a reference; otherwise it's T&. This +// is the same as tr1::add_reference::type. +template +struct AddRef { typedef T& type; }; // NOLINT +template +struct AddRef { typedef T& type; }; // NOLINT + +// A handy wrapper for AddRef. +#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type + +// A helper for implementing get(). +template class Get; + +// A helper for implementing tuple_element. kIndexValid is true +// iff k < the number of fields in tuple type T. +template +struct TupleElement; + + +$for i [[ +template +struct TupleElement [[]] +{ typedef T$i type; }; + + +]] +} // namespace gtest_internal + +template <> +class tuple<> { + public: + tuple() {} + tuple(const tuple& /* t */) {} + tuple& operator=(const tuple& /* t */) { return *this; } +}; + + +$for k [[ +$range m 0..k-1 +template +class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] { + public: + template friend class gtest_internal::Get; + + tuple() : $for m, [[f$(m)_()]] {} + + explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]] +$for m, [[f$(m)_(f$m)]] {} + + tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} + + template + tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} + +$if k == 2 [[ + template + tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} + +]] + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) { + return CopyFrom(t); + } + +$if k == 2 [[ + template + tuple& operator=(const ::std::pair& p) { + f0_ = p.first; + f1_ = p.second; + return *this; + } + +]] + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) { + +$for m [[ + f$(m)_ = t.f$(m)_; + +]] + return *this; + } + + +$for m [[ + T$m f$(m)_; + +]] +}; + + +]] +// 6.1.3.2 Tuple creation functions. + +// Known limitations: we don't support passing an +// std::tr1::reference_wrapper to make_tuple(). And we don't +// implement tie(). + +inline tuple<> make_tuple() { return tuple<>(); } + +$for k [[ +$range m 0..k-1 + +template +inline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) { + return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]); +} + +]] + +// 6.1.3.3 Tuple helper classes. + +template struct tuple_size; + + +$for j [[ +template +struct tuple_size { static const int value = $j; }; + + +]] +template +struct tuple_element { + typedef typename gtest_internal::TupleElement< + k < (tuple_size::value), k, Tuple>::type type; +}; + +#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type + +// 6.1.3.4 Element access. + +namespace gtest_internal { + + +$for i [[ +template <> +class Get<$i> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) + Field(Tuple& t) { return t.f$(i)_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) + ConstField(const Tuple& t) { return t.f$(i)_; } +}; + + +]] +} // namespace gtest_internal + +template +GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) +get(GTEST_$(n)_TUPLE_(T)& t) { + return gtest_internal::Get::Field(t); +} + +template +GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) +get(const GTEST_$(n)_TUPLE_(T)& t) { + return gtest_internal::Get::ConstField(t); +} + +// 6.1.3.5 Relational operators + +// We only implement == and !=, as we don't have a need for the rest yet. + +namespace gtest_internal { + +// SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the +// first k fields of t1 equals the first k fields of t2. +// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if +// k1 != k2. +template +struct SameSizeTuplePrefixComparator; + +template <> +struct SameSizeTuplePrefixComparator<0, 0> { + template + static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { + return true; + } +}; + +template +struct SameSizeTuplePrefixComparator { + template + static bool Eq(const Tuple1& t1, const Tuple2& t2) { + return SameSizeTuplePrefixComparator::Eq(t1, t2) && + ::std::tr1::get(t1) == ::std::tr1::get(t2); + } +}; + +} // namespace gtest_internal + +template +inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t, + const GTEST_$(n)_TUPLE_(U)& u) { + return gtest_internal::SameSizeTuplePrefixComparator< + tuple_size::value, + tuple_size::value>::Eq(t, u); +} + +template +inline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t, + const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); } + +// 6.1.4 Pairs. +// Unimplemented. + +} // namespace tr1 +} // namespace std + + +$for j [[ +#undef GTEST_$(j)_TUPLE_ + +]] + + +$for j [[ +#undef GTEST_$(j)_TYPENAMES_ + +]] + +#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ +#undef GTEST_BY_REF_ +#undef GTEST_ADD_REF_ +#undef GTEST_TUPLE_ELEMENT_ + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h new file mode 100644 index 00000000..093eee6f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h @@ -0,0 +1,3321 @@ +// This file was GENERATED by command: +// pump.py gtest-type-util.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Type utilities needed for implementing typed and type-parameterized +// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently we support at most 50 types in a list, and at most 50 +// type-parameterized tests in one type-parameterized test case. +// Please contact googletestframework@googlegroups.com if you need +// more. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + +#include +#include + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// #ifdef __GNUC__ is too general here. It is possible to use gcc without using +// libstdc++ (which is where cxxabi.h comes from). +#ifdef __GLIBCXX__ +#include +#endif // __GLIBCXX__ + +namespace testing { +namespace internal { + +// AssertyTypeEq::type is defined iff T1 and T2 are the same +// type. This can be used as a compile-time assertion to ensure that +// two types are equal. + +template +struct AssertTypeEq; + +template +struct AssertTypeEq { + typedef bool type; +}; + +// GetTypeName() returns a human-readable name of type T. +template +String GetTypeName() { +#if GTEST_HAS_RTTI + + const char* const name = typeid(T).name(); +#ifdef __GLIBCXX__ + int status = 0; + // gcc's implementation of typeid(T).name() mangles the type name, + // so we have to demangle it. + char* const readable_name = abi::__cxa_demangle(name, 0, 0, &status); + const String name_str(status == 0 ? readable_name : name); + free(readable_name); + return name_str; +#else + return name; +#endif // __GLIBCXX__ + +#else + return ""; +#endif // GTEST_HAS_RTTI +} + +// A unique type used as the default value for the arguments of class +// template Types. This allows us to simulate variadic templates +// (e.g. Types, Type, and etc), which C++ doesn't +// support directly. +struct None {}; + +// The following family of struct and struct templates are used to +// represent type lists. In particular, TypesN +// represents a type list with N types (T1, T2, ..., and TN) in it. +// Except for Types0, every struct in the family has two member types: +// Head for the first type in the list, and Tail for the rest of the +// list. + +// The empty type list. +struct Types0 {}; + +// Type lists of length 1, 2, 3, and so on. + +template +struct Types1 { + typedef T1 Head; + typedef Types0 Tail; +}; +template +struct Types2 { + typedef T1 Head; + typedef Types1 Tail; +}; + +template +struct Types3 { + typedef T1 Head; + typedef Types2 Tail; +}; + +template +struct Types4 { + typedef T1 Head; + typedef Types3 Tail; +}; + +template +struct Types5 { + typedef T1 Head; + typedef Types4 Tail; +}; + +template +struct Types6 { + typedef T1 Head; + typedef Types5 Tail; +}; + +template +struct Types7 { + typedef T1 Head; + typedef Types6 Tail; +}; + +template +struct Types8 { + typedef T1 Head; + typedef Types7 Tail; +}; + +template +struct Types9 { + typedef T1 Head; + typedef Types8 Tail; +}; + +template +struct Types10 { + typedef T1 Head; + typedef Types9 Tail; +}; + +template +struct Types11 { + typedef T1 Head; + typedef Types10 Tail; +}; + +template +struct Types12 { + typedef T1 Head; + typedef Types11 Tail; +}; + +template +struct Types13 { + typedef T1 Head; + typedef Types12 Tail; +}; + +template +struct Types14 { + typedef T1 Head; + typedef Types13 Tail; +}; + +template +struct Types15 { + typedef T1 Head; + typedef Types14 Tail; +}; + +template +struct Types16 { + typedef T1 Head; + typedef Types15 Tail; +}; + +template +struct Types17 { + typedef T1 Head; + typedef Types16 Tail; +}; + +template +struct Types18 { + typedef T1 Head; + typedef Types17 Tail; +}; + +template +struct Types19 { + typedef T1 Head; + typedef Types18 Tail; +}; + +template +struct Types20 { + typedef T1 Head; + typedef Types19 Tail; +}; + +template +struct Types21 { + typedef T1 Head; + typedef Types20 Tail; +}; + +template +struct Types22 { + typedef T1 Head; + typedef Types21 Tail; +}; + +template +struct Types23 { + typedef T1 Head; + typedef Types22 Tail; +}; + +template +struct Types24 { + typedef T1 Head; + typedef Types23 Tail; +}; + +template +struct Types25 { + typedef T1 Head; + typedef Types24 Tail; +}; + +template +struct Types26 { + typedef T1 Head; + typedef Types25 Tail; +}; + +template +struct Types27 { + typedef T1 Head; + typedef Types26 Tail; +}; + +template +struct Types28 { + typedef T1 Head; + typedef Types27 Tail; +}; + +template +struct Types29 { + typedef T1 Head; + typedef Types28 Tail; +}; + +template +struct Types30 { + typedef T1 Head; + typedef Types29 Tail; +}; + +template +struct Types31 { + typedef T1 Head; + typedef Types30 Tail; +}; + +template +struct Types32 { + typedef T1 Head; + typedef Types31 Tail; +}; + +template +struct Types33 { + typedef T1 Head; + typedef Types32 Tail; +}; + +template +struct Types34 { + typedef T1 Head; + typedef Types33 Tail; +}; + +template +struct Types35 { + typedef T1 Head; + typedef Types34 Tail; +}; + +template +struct Types36 { + typedef T1 Head; + typedef Types35 Tail; +}; + +template +struct Types37 { + typedef T1 Head; + typedef Types36 Tail; +}; + +template +struct Types38 { + typedef T1 Head; + typedef Types37 Tail; +}; + +template +struct Types39 { + typedef T1 Head; + typedef Types38 Tail; +}; + +template +struct Types40 { + typedef T1 Head; + typedef Types39 Tail; +}; + +template +struct Types41 { + typedef T1 Head; + typedef Types40 Tail; +}; + +template +struct Types42 { + typedef T1 Head; + typedef Types41 Tail; +}; + +template +struct Types43 { + typedef T1 Head; + typedef Types42 Tail; +}; + +template +struct Types44 { + typedef T1 Head; + typedef Types43 Tail; +}; + +template +struct Types45 { + typedef T1 Head; + typedef Types44 Tail; +}; + +template +struct Types46 { + typedef T1 Head; + typedef Types45 Tail; +}; + +template +struct Types47 { + typedef T1 Head; + typedef Types46 Tail; +}; + +template +struct Types48 { + typedef T1 Head; + typedef Types47 Tail; +}; + +template +struct Types49 { + typedef T1 Head; + typedef Types48 Tail; +}; + +template +struct Types50 { + typedef T1 Head; + typedef Types49 Tail; +}; + + +} // namespace internal + +// We don't want to require the users to write TypesN<...> directly, +// as that would require them to count the length. Types<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Types +// will appear as Types in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Types, and Google Test will translate +// that to TypesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Types template. +template +struct Types { + typedef internal::Types50 type; +}; + +template <> +struct Types { + typedef internal::Types0 type; +}; +template +struct Types { + typedef internal::Types1 type; +}; +template +struct Types { + typedef internal::Types2 type; +}; +template +struct Types { + typedef internal::Types3 type; +}; +template +struct Types { + typedef internal::Types4 type; +}; +template +struct Types { + typedef internal::Types5 type; +}; +template +struct Types { + typedef internal::Types6 type; +}; +template +struct Types { + typedef internal::Types7 type; +}; +template +struct Types { + typedef internal::Types8 type; +}; +template +struct Types { + typedef internal::Types9 type; +}; +template +struct Types { + typedef internal::Types10 type; +}; +template +struct Types { + typedef internal::Types11 type; +}; +template +struct Types { + typedef internal::Types12 type; +}; +template +struct Types { + typedef internal::Types13 type; +}; +template +struct Types { + typedef internal::Types14 type; +}; +template +struct Types { + typedef internal::Types15 type; +}; +template +struct Types { + typedef internal::Types16 type; +}; +template +struct Types { + typedef internal::Types17 type; +}; +template +struct Types { + typedef internal::Types18 type; +}; +template +struct Types { + typedef internal::Types19 type; +}; +template +struct Types { + typedef internal::Types20 type; +}; +template +struct Types { + typedef internal::Types21 type; +}; +template +struct Types { + typedef internal::Types22 type; +}; +template +struct Types { + typedef internal::Types23 type; +}; +template +struct Types { + typedef internal::Types24 type; +}; +template +struct Types { + typedef internal::Types25 type; +}; +template +struct Types { + typedef internal::Types26 type; +}; +template +struct Types { + typedef internal::Types27 type; +}; +template +struct Types { + typedef internal::Types28 type; +}; +template +struct Types { + typedef internal::Types29 type; +}; +template +struct Types { + typedef internal::Types30 type; +}; +template +struct Types { + typedef internal::Types31 type; +}; +template +struct Types { + typedef internal::Types32 type; +}; +template +struct Types { + typedef internal::Types33 type; +}; +template +struct Types { + typedef internal::Types34 type; +}; +template +struct Types { + typedef internal::Types35 type; +}; +template +struct Types { + typedef internal::Types36 type; +}; +template +struct Types { + typedef internal::Types37 type; +}; +template +struct Types { + typedef internal::Types38 type; +}; +template +struct Types { + typedef internal::Types39 type; +}; +template +struct Types { + typedef internal::Types40 type; +}; +template +struct Types { + typedef internal::Types41 type; +}; +template +struct Types { + typedef internal::Types42 type; +}; +template +struct Types { + typedef internal::Types43 type; +}; +template +struct Types { + typedef internal::Types44 type; +}; +template +struct Types { + typedef internal::Types45 type; +}; +template +struct Types { + typedef internal::Types46 type; +}; +template +struct Types { + typedef internal::Types47 type; +}; +template +struct Types { + typedef internal::Types48 type; +}; +template +struct Types { + typedef internal::Types49 type; +}; + +namespace internal { + +#define GTEST_TEMPLATE_ template class + +// The template "selector" struct TemplateSel is used to +// represent Tmpl, which must be a class template with one type +// parameter, as a type. TemplateSel::Bind::type is defined +// as the type Tmpl. This allows us to actually instantiate the +// template "selected" by TemplateSel. +// +// This trick is necessary for simulating typedef for class templates, +// which C++ doesn't support directly. +template +struct TemplateSel { + template + struct Bind { + typedef Tmpl type; + }; +}; + +#define GTEST_BIND_(TmplSel, T) \ + TmplSel::template Bind::type + +// A unique struct template used as the default value for the +// arguments of class template Templates. This allows us to simulate +// variadic templates (e.g. Templates, Templates, +// and etc), which C++ doesn't support directly. +template +struct NoneT {}; + +// The following family of struct and struct templates are used to +// represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except +// for Templates0, every struct in the family has two member types: +// Head for the selector of the first template in the list, and Tail +// for the rest of the list. + +// The empty template list. +struct Templates0 {}; + +// Template lists of length 1, 2, 3, and so on. + +template +struct Templates1 { + typedef TemplateSel Head; + typedef Templates0 Tail; +}; +template +struct Templates2 { + typedef TemplateSel Head; + typedef Templates1 Tail; +}; + +template +struct Templates3 { + typedef TemplateSel Head; + typedef Templates2 Tail; +}; + +template +struct Templates4 { + typedef TemplateSel Head; + typedef Templates3 Tail; +}; + +template +struct Templates5 { + typedef TemplateSel Head; + typedef Templates4 Tail; +}; + +template +struct Templates6 { + typedef TemplateSel Head; + typedef Templates5 Tail; +}; + +template +struct Templates7 { + typedef TemplateSel Head; + typedef Templates6 Tail; +}; + +template +struct Templates8 { + typedef TemplateSel Head; + typedef Templates7 Tail; +}; + +template +struct Templates9 { + typedef TemplateSel Head; + typedef Templates8 Tail; +}; + +template +struct Templates10 { + typedef TemplateSel Head; + typedef Templates9 Tail; +}; + +template +struct Templates11 { + typedef TemplateSel Head; + typedef Templates10 Tail; +}; + +template +struct Templates12 { + typedef TemplateSel Head; + typedef Templates11 Tail; +}; + +template +struct Templates13 { + typedef TemplateSel Head; + typedef Templates12 Tail; +}; + +template +struct Templates14 { + typedef TemplateSel Head; + typedef Templates13 Tail; +}; + +template +struct Templates15 { + typedef TemplateSel Head; + typedef Templates14 Tail; +}; + +template +struct Templates16 { + typedef TemplateSel Head; + typedef Templates15 Tail; +}; + +template +struct Templates17 { + typedef TemplateSel Head; + typedef Templates16 Tail; +}; + +template +struct Templates18 { + typedef TemplateSel Head; + typedef Templates17 Tail; +}; + +template +struct Templates19 { + typedef TemplateSel Head; + typedef Templates18 Tail; +}; + +template +struct Templates20 { + typedef TemplateSel Head; + typedef Templates19 Tail; +}; + +template +struct Templates21 { + typedef TemplateSel Head; + typedef Templates20 Tail; +}; + +template +struct Templates22 { + typedef TemplateSel Head; + typedef Templates21 Tail; +}; + +template +struct Templates23 { + typedef TemplateSel Head; + typedef Templates22 Tail; +}; + +template +struct Templates24 { + typedef TemplateSel Head; + typedef Templates23 Tail; +}; + +template +struct Templates25 { + typedef TemplateSel Head; + typedef Templates24 Tail; +}; + +template +struct Templates26 { + typedef TemplateSel Head; + typedef Templates25 Tail; +}; + +template +struct Templates27 { + typedef TemplateSel Head; + typedef Templates26 Tail; +}; + +template +struct Templates28 { + typedef TemplateSel Head; + typedef Templates27 Tail; +}; + +template +struct Templates29 { + typedef TemplateSel Head; + typedef Templates28 Tail; +}; + +template +struct Templates30 { + typedef TemplateSel Head; + typedef Templates29 Tail; +}; + +template +struct Templates31 { + typedef TemplateSel Head; + typedef Templates30 Tail; +}; + +template +struct Templates32 { + typedef TemplateSel Head; + typedef Templates31 Tail; +}; + +template +struct Templates33 { + typedef TemplateSel Head; + typedef Templates32 Tail; +}; + +template +struct Templates34 { + typedef TemplateSel Head; + typedef Templates33 Tail; +}; + +template +struct Templates35 { + typedef TemplateSel Head; + typedef Templates34 Tail; +}; + +template +struct Templates36 { + typedef TemplateSel Head; + typedef Templates35 Tail; +}; + +template +struct Templates37 { + typedef TemplateSel Head; + typedef Templates36 Tail; +}; + +template +struct Templates38 { + typedef TemplateSel Head; + typedef Templates37 Tail; +}; + +template +struct Templates39 { + typedef TemplateSel Head; + typedef Templates38 Tail; +}; + +template +struct Templates40 { + typedef TemplateSel Head; + typedef Templates39 Tail; +}; + +template +struct Templates41 { + typedef TemplateSel Head; + typedef Templates40 Tail; +}; + +template +struct Templates42 { + typedef TemplateSel Head; + typedef Templates41 Tail; +}; + +template +struct Templates43 { + typedef TemplateSel Head; + typedef Templates42 Tail; +}; + +template +struct Templates44 { + typedef TemplateSel Head; + typedef Templates43 Tail; +}; + +template +struct Templates45 { + typedef TemplateSel Head; + typedef Templates44 Tail; +}; + +template +struct Templates46 { + typedef TemplateSel Head; + typedef Templates45 Tail; +}; + +template +struct Templates47 { + typedef TemplateSel Head; + typedef Templates46 Tail; +}; + +template +struct Templates48 { + typedef TemplateSel Head; + typedef Templates47 Tail; +}; + +template +struct Templates49 { + typedef TemplateSel Head; + typedef Templates48 Tail; +}; + +template +struct Templates50 { + typedef TemplateSel Head; + typedef Templates49 Tail; +}; + + +// We don't want to require the users to write TemplatesN<...> directly, +// as that would require them to count the length. Templates<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Templates +// will appear as Templates in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Templates, and Google Test will translate +// that to TemplatesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Templates template. +template +struct Templates { + typedef Templates50 type; +}; + +template <> +struct Templates { + typedef Templates0 type; +}; +template +struct Templates { + typedef Templates1 type; +}; +template +struct Templates { + typedef Templates2 type; +}; +template +struct Templates { + typedef Templates3 type; +}; +template +struct Templates { + typedef Templates4 type; +}; +template +struct Templates { + typedef Templates5 type; +}; +template +struct Templates { + typedef Templates6 type; +}; +template +struct Templates { + typedef Templates7 type; +}; +template +struct Templates { + typedef Templates8 type; +}; +template +struct Templates { + typedef Templates9 type; +}; +template +struct Templates { + typedef Templates10 type; +}; +template +struct Templates { + typedef Templates11 type; +}; +template +struct Templates { + typedef Templates12 type; +}; +template +struct Templates { + typedef Templates13 type; +}; +template +struct Templates { + typedef Templates14 type; +}; +template +struct Templates { + typedef Templates15 type; +}; +template +struct Templates { + typedef Templates16 type; +}; +template +struct Templates { + typedef Templates17 type; +}; +template +struct Templates { + typedef Templates18 type; +}; +template +struct Templates { + typedef Templates19 type; +}; +template +struct Templates { + typedef Templates20 type; +}; +template +struct Templates { + typedef Templates21 type; +}; +template +struct Templates { + typedef Templates22 type; +}; +template +struct Templates { + typedef Templates23 type; +}; +template +struct Templates { + typedef Templates24 type; +}; +template +struct Templates { + typedef Templates25 type; +}; +template +struct Templates { + typedef Templates26 type; +}; +template +struct Templates { + typedef Templates27 type; +}; +template +struct Templates { + typedef Templates28 type; +}; +template +struct Templates { + typedef Templates29 type; +}; +template +struct Templates { + typedef Templates30 type; +}; +template +struct Templates { + typedef Templates31 type; +}; +template +struct Templates { + typedef Templates32 type; +}; +template +struct Templates { + typedef Templates33 type; +}; +template +struct Templates { + typedef Templates34 type; +}; +template +struct Templates { + typedef Templates35 type; +}; +template +struct Templates { + typedef Templates36 type; +}; +template +struct Templates { + typedef Templates37 type; +}; +template +struct Templates { + typedef Templates38 type; +}; +template +struct Templates { + typedef Templates39 type; +}; +template +struct Templates { + typedef Templates40 type; +}; +template +struct Templates { + typedef Templates41 type; +}; +template +struct Templates { + typedef Templates42 type; +}; +template +struct Templates { + typedef Templates43 type; +}; +template +struct Templates { + typedef Templates44 type; +}; +template +struct Templates { + typedef Templates45 type; +}; +template +struct Templates { + typedef Templates46 type; +}; +template +struct Templates { + typedef Templates47 type; +}; +template +struct Templates { + typedef Templates48 type; +}; +template +struct Templates { + typedef Templates49 type; +}; + +// The TypeList template makes it possible to use either a single type +// or a Types<...> list in TYPED_TEST_CASE() and +// INSTANTIATE_TYPED_TEST_CASE_P(). + +template +struct TypeList { typedef Types1 type; }; + +template +struct TypeList > { + typedef typename Types::type type; +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h.pump b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h.pump new file mode 100644 index 00000000..5aed1e55 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/include/gtest/internal/gtest-type-util.h.pump @@ -0,0 +1,287 @@ +$$ -*- mode: c++; -*- +$var n = 50 $$ Maximum length of type lists we want to support. +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Type utilities needed for implementing typed and type-parameterized +// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently we support at most $n types in a list, and at most $n +// type-parameterized tests in one type-parameterized test case. +// Please contact googletestframework@googlegroups.com if you need +// more. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + +#include +#include + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// #ifdef __GNUC__ is too general here. It is possible to use gcc without using +// libstdc++ (which is where cxxabi.h comes from). +#ifdef __GLIBCXX__ +#include +#endif // __GLIBCXX__ + +namespace testing { +namespace internal { + +// AssertyTypeEq::type is defined iff T1 and T2 are the same +// type. This can be used as a compile-time assertion to ensure that +// two types are equal. + +template +struct AssertTypeEq; + +template +struct AssertTypeEq { + typedef bool type; +}; + +// GetTypeName() returns a human-readable name of type T. +template +String GetTypeName() { +#if GTEST_HAS_RTTI + + const char* const name = typeid(T).name(); +#ifdef __GLIBCXX__ + int status = 0; + // gcc's implementation of typeid(T).name() mangles the type name, + // so we have to demangle it. + char* const readable_name = abi::__cxa_demangle(name, 0, 0, &status); + const String name_str(status == 0 ? readable_name : name); + free(readable_name); + return name_str; +#else + return name; +#endif // __GLIBCXX__ + +#else + return ""; +#endif // GTEST_HAS_RTTI +} + +// A unique type used as the default value for the arguments of class +// template Types. This allows us to simulate variadic templates +// (e.g. Types, Type, and etc), which C++ doesn't +// support directly. +struct None {}; + +// The following family of struct and struct templates are used to +// represent type lists. In particular, TypesN +// represents a type list with N types (T1, T2, ..., and TN) in it. +// Except for Types0, every struct in the family has two member types: +// Head for the first type in the list, and Tail for the rest of the +// list. + +// The empty type list. +struct Types0 {}; + +// Type lists of length 1, 2, 3, and so on. + +template +struct Types1 { + typedef T1 Head; + typedef Types0 Tail; +}; + +$range i 2..n + +$for i [[ +$range j 1..i +$range k 2..i +template <$for j, [[typename T$j]]> +struct Types$i { + typedef T1 Head; + typedef Types$(i-1)<$for k, [[T$k]]> Tail; +}; + + +]] + +} // namespace internal + +// We don't want to require the users to write TypesN<...> directly, +// as that would require them to count the length. Types<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Types +// will appear as Types in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Types, and Google Test will translate +// that to TypesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Types template. + +$range i 1..n +template <$for i, [[typename T$i = internal::None]]> +struct Types { + typedef internal::Types$n<$for i, [[T$i]]> type; +}; + +template <> +struct Types<$for i, [[internal::None]]> { + typedef internal::Types0 type; +}; + +$range i 1..n-1 +$for i [[ +$range j 1..i +$range k i+1..n +template <$for j, [[typename T$j]]> +struct Types<$for j, [[T$j]]$for k[[, internal::None]]> { + typedef internal::Types$i<$for j, [[T$j]]> type; +}; + +]] + +namespace internal { + +#define GTEST_TEMPLATE_ template class + +// The template "selector" struct TemplateSel is used to +// represent Tmpl, which must be a class template with one type +// parameter, as a type. TemplateSel::Bind::type is defined +// as the type Tmpl. This allows us to actually instantiate the +// template "selected" by TemplateSel. +// +// This trick is necessary for simulating typedef for class templates, +// which C++ doesn't support directly. +template +struct TemplateSel { + template + struct Bind { + typedef Tmpl type; + }; +}; + +#define GTEST_BIND_(TmplSel, T) \ + TmplSel::template Bind::type + +// A unique struct template used as the default value for the +// arguments of class template Templates. This allows us to simulate +// variadic templates (e.g. Templates, Templates, +// and etc), which C++ doesn't support directly. +template +struct NoneT {}; + +// The following family of struct and struct templates are used to +// represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except +// for Templates0, every struct in the family has two member types: +// Head for the selector of the first template in the list, and Tail +// for the rest of the list. + +// The empty template list. +struct Templates0 {}; + +// Template lists of length 1, 2, 3, and so on. + +template +struct Templates1 { + typedef TemplateSel Head; + typedef Templates0 Tail; +}; + +$range i 2..n + +$for i [[ +$range j 1..i +$range k 2..i +template <$for j, [[GTEST_TEMPLATE_ T$j]]> +struct Templates$i { + typedef TemplateSel Head; + typedef Templates$(i-1)<$for k, [[T$k]]> Tail; +}; + + +]] + +// We don't want to require the users to write TemplatesN<...> directly, +// as that would require them to count the length. Templates<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Templates +// will appear as Templates in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Templates, and Google Test will translate +// that to TemplatesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Templates template. + +$range i 1..n +template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]> +struct Templates { + typedef Templates$n<$for i, [[T$i]]> type; +}; + +template <> +struct Templates<$for i, [[NoneT]]> { + typedef Templates0 type; +}; + +$range i 1..n-1 +$for i [[ +$range j 1..i +$range k i+1..n +template <$for j, [[GTEST_TEMPLATE_ T$j]]> +struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> { + typedef Templates$i<$for j, [[T$j]]> type; +}; + +]] + +// The TypeList template makes it possible to use either a single type +// or a Types<...> list in TYPED_TEST_CASE() and +// INSTANTIATE_TYPED_TEST_CASE_P(). + +template +struct TypeList { typedef Types1 type; }; + + +$range i 1..n +template <$for i, [[typename T$i]]> +struct TypeList > { + typedef typename Types<$for i, [[T$i]]>::type type; +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/acx_pthread.m4 b/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/acx_pthread.m4 new file mode 100644 index 00000000..2cf20de1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/acx_pthread.m4 @@ -0,0 +1,363 @@ +# This was retrieved from +# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi +# See also (perhaps for new versions?) +# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi +# +# We've rewritten the inconsistency check code (from avahi), to work +# more broadly. In particular, it no longer assumes ld accepts -zdefs. +# This caused a restructing of the code, but the functionality has only +# changed a little. + +dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +dnl +dnl @summary figure out how to build C programs using POSIX threads +dnl +dnl This macro figures out how to build C programs using POSIX threads. +dnl It sets the PTHREAD_LIBS output variable to the threads library and +dnl linker flags, and the PTHREAD_CFLAGS output variable to any special +dnl C compiler flags that are needed. (The user can also force certain +dnl compiler flags/libs to be tested by setting these environment +dnl variables.) +dnl +dnl Also sets PTHREAD_CC to any special C compiler that is needed for +dnl multi-threaded programs (defaults to the value of CC otherwise). +dnl (This is necessary on AIX to use the special cc_r compiler alias.) +dnl +dnl NOTE: You are assumed to not only compile your program with these +dnl flags, but also link it with them as well. e.g. you should link +dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS +dnl $LIBS +dnl +dnl If you are only building threads programs, you may wish to use +dnl these variables in your default LIBS, CFLAGS, and CC: +dnl +dnl LIBS="$PTHREAD_LIBS $LIBS" +dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +dnl CC="$PTHREAD_CC" +dnl +dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute +dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to +dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +dnl +dnl ACTION-IF-FOUND is a list of shell commands to run if a threads +dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to +dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the +dnl default action will define HAVE_PTHREAD. +dnl +dnl Please let the authors know if this macro fails on any platform, or +dnl if you have any other suggestions or comments. This macro was based +dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with +dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros +dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. +dnl We are also grateful for the helpful feedback of numerous users. +dnl +dnl @category InstalledPackages +dnl @author Steven G. Johnson +dnl @version 2006-05-29 +dnl @license GPLWithACException +dnl +dnl Checks for GCC shared/pthread inconsistency based on work by +dnl Marcin Owsiany + + +AC_DEFUN([ACX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_SAVE +AC_LANG_C +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) + AC_MSG_RESULT($acx_pthread_ok) + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [acx_pthread_ok=yes]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT($acx_pthread_ok) + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_TRY_LINK([#include ], [int attr=$attr; return attr;], + [attr_name=$attr; break]) + done + AC_MSG_RESULT($attr_name) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + AC_MSG_RESULT(${flag}) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) + else + PTHREAD_CC=$CC + fi + + # The next part tries to detect GCC inconsistency with -shared on some + # architectures and systems. The problem is that in certain + # configurations, when -shared is specified, GCC "forgets" to + # internally use various flags which are still necessary. + + # + # Prepare the flags + # + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_CC="$CC" + + # Try with the flags determined by the earlier checks. + # + # -Wl,-z,defs forces link-time symbol resolution, so that the + # linking checks with -shared actually have any value + # + # FIXME: -fPIC is required for -shared on many architectures, + # so we specify it here, but the right way would probably be to + # properly detect whether it is actually required. + CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CC="$PTHREAD_CC" + + # In order not to create several levels of indentation, we test + # the value of "$done" until we find the cure or run out of ideas. + done="no" + + # First, make sure the CFLAGS we added are actually accepted by our + # compiler. If not (and OS X's ld, for instance, does not accept -z), + # then we can't do this test. + if test x"$done" = xno; then + AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) + AC_TRY_LINK(,, , [done=yes]) + + if test "x$done" = xyes ; then + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + fi + + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + + # + # Linux gcc on some architectures such as mips/mipsel forgets + # about -lpthread + # + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -lpthread fixes that]) + LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" + else + AC_MSG_RESULT([no]) + fi + fi + # + # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc + # + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -lc_r fixes that]) + LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" + else + AC_MSG_RESULT([no]) + fi + fi + if test x"$done" = xno; then + # OK, we have run out of ideas + AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) + + # so it's not safe to assume that we may use pthreads + acx_pthread_ok=no + fi + + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + CC="$save_CC" +else + PTHREAD_CC="$CC" +fi + +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_CC) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + : +else + acx_pthread_ok=no + $2 +fi +AC_LANG_RESTORE +])dnl ACX_PTHREAD diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/gtest.m4 b/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/gtest.m4 new file mode 100644 index 00000000..6598ba75 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/m4/gtest.m4 @@ -0,0 +1,74 @@ +dnl GTEST_LIB_CHECK([minimum version [, +dnl action if found [,action if not found]]]) +dnl +dnl Check for the presence of the Google Test library, optionally at a minimum +dnl version, and indicate a viable version with the HAVE_GTEST flag. It defines +dnl standard variables for substitution including GTEST_CPPFLAGS, +dnl GTEST_CXXFLAGS, GTEST_LDFLAGS, and GTEST_LIBS. It also defines +dnl GTEST_VERSION as the version of Google Test found. Finally, it provides +dnl optional custom action slots in the event GTEST is found or not. +AC_DEFUN([GTEST_LIB_CHECK], +[ +dnl Provide a flag to enable or disable Google Test usage. +AC_ARG_ENABLE([gtest], + [AS_HELP_STRING([--enable-gtest], + [Enable tests using the Google C++ Testing Framework. + (Default is enabled.)])], + [], + [enable_gtest=]) +AC_ARG_VAR([GTEST_CONFIG], + [The exact path of Google Test's 'gtest-config' script.]) +AC_ARG_VAR([GTEST_CPPFLAGS], + [C-like preprocessor flags for Google Test.]) +AC_ARG_VAR([GTEST_CXXFLAGS], + [C++ compile flags for Google Test.]) +AC_ARG_VAR([GTEST_LDFLAGS], + [Linker path and option flags for Google Test.]) +AC_ARG_VAR([GTEST_LIBS], + [Library linking flags for Google Test.]) +AC_ARG_VAR([GTEST_VERSION], + [The version of Google Test available.]) +HAVE_GTEST="no" +AS_IF([test "x${enable_gtest}" != "xno"], + [AC_MSG_CHECKING([for 'gtest-config']) + AS_IF([test "x${enable_gtest}" != "xyes"], + [AS_IF([test -x "${enable_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${enable_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${enable_gtest}/bin/gtest-config"]) + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([dnl +Unable to locate either a built or installed Google Test. +The specific location '${enable_gtest}' was provided for a built or installed +Google Test, but no 'gtest-config' script could be found at this location.]) + ])], + [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])]) + AS_IF([test -x "${GTEST_CONFIG}"], + [AC_MSG_RESULT([${GTEST_CONFIG}]) + m4_ifval([$1], + [_gtest_min_version="--min-version=$1" + AC_MSG_CHECKING([for Google Test at least version >= $1])], + [_gtest_min_version="--min-version=0" + AC_MSG_CHECKING([for Google Test])]) + AS_IF([${GTEST_CONFIG} ${_gtest_min_version}], + [AC_MSG_RESULT([yes]) + HAVE_GTEST='yes'], + [AC_MSG_RESULT([no])])], + [AC_MSG_RESULT([no])]) + AS_IF([test "x${HAVE_GTEST}" = "xyes"], + [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` + GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LIBS=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version` + AC_DEFINE([HAVE_GTEST],[1],[Defined when Google Test is available.])], + [AS_IF([test "x${enable_gtest}" = "xyes"], + [AC_MSG_ERROR([dnl +Google Test was enabled, but no viable version could be found.]) + ])])]) +AC_SUBST([HAVE_GTEST]) +AM_CONDITIONAL([HAVE_GTEST],[test "x$HAVE_GTEST" = "xyes"]) +AS_IF([test "x$HAVE_GTEST" = "xyes"], + [m4_ifval([$2], [$2])], + [m4_ifval([$3], [$3])]) +]) diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.sln b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.sln new file mode 100755 index 00000000..f7908da1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-md", "gtest-md.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main-md", "gtest_main-md.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862033}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test-md", "gtest_prod_test-md.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest-md", "gtest_unittest-md.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.ActiveCfg = Debug|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.Build.0 = Debug|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.ActiveCfg = Release|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.Build.0 = Release|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.ActiveCfg = Debug|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.Build.0 = Debug|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.ActiveCfg = Release|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.Build.0 = Release|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.ActiveCfg = Debug|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.Build.0 = Debug|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.ActiveCfg = Release|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.Build.0 = Release|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.ActiveCfg = Debug|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.Build.0 = Debug|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.ActiveCfg = Release|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.vcproj new file mode 100755 index 00000000..c78a4a4d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest-md.vcproj @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.sln b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.sln new file mode 100755 index 00000000..ef4b057f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "gtest.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main", "gtest_main.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862032}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest", "gtest_unittest.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test", "gtest_prod_test.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.ActiveCfg = Debug|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.Build.0 = Debug|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.ActiveCfg = Release|Win32 + {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.Build.0 = Release|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.ActiveCfg = Debug|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.Build.0 = Debug|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.ActiveCfg = Release|Win32 + {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.Build.0 = Release|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.ActiveCfg = Debug|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.Build.0 = Debug|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.ActiveCfg = Release|Win32 + {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.Build.0 = Release|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.ActiveCfg = Debug|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.Build.0 = Debug|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.ActiveCfg = Release|Win32 + {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.vcproj new file mode 100755 index 00000000..bd2ed81e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest.vcproj @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main-md.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main-md.vcproj new file mode 100755 index 00000000..321667f1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main-md.vcproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main.vcproj new file mode 100755 index 00000000..13cc1d4f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_main.vcproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test-md.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test-md.vcproj new file mode 100755 index 00000000..05b05d9e --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test-md.vcproj @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test.vcproj new file mode 100755 index 00000000..6d7a2f02 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_prod_test.vcproj @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest-md.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest-md.vcproj new file mode 100755 index 00000000..38a5e566 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest-md.vcproj @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest.vcproj b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest.vcproj new file mode 100755 index 00000000..cb1f52b1 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/msvc/gtest_unittest.vcproj @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/prime_tables.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/prime_tables.h new file mode 100644 index 00000000..92ce16a0 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/prime_tables.h @@ -0,0 +1,123 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// Author: vladl@google.com (Vlad Losev) + +// This provides interface PrimeTable that determines whether a number is a +// prime and determines a next prime number. This interface is used +// in Google Test samples demonstrating use of parameterized tests. + +#ifndef GTEST_SAMPLES_PRIME_TABLES_H_ +#define GTEST_SAMPLES_PRIME_TABLES_H_ + +#include + +// The prime table interface. +class PrimeTable { + public: + virtual ~PrimeTable() {} + + // Returns true iff n is a prime number. + virtual bool IsPrime(int n) const = 0; + + // Returns the smallest prime number greater than p; or returns -1 + // if the next prime is beyond the capacity of the table. + virtual int GetNextPrime(int p) const = 0; +}; + +// Implementation #1 calculates the primes on-the-fly. +class OnTheFlyPrimeTable : public PrimeTable { + public: + virtual bool IsPrime(int n) const { + if (n <= 1) return false; + + for (int i = 2; i*i <= n; i++) { + // n is divisible by an integer other than 1 and itself. + if ((n % i) == 0) return false; + } + + return true; + } + + virtual int GetNextPrime(int p) const { + for (int n = p + 1; n > 0; n++) { + if (IsPrime(n)) return n; + } + + return -1; + } +}; + +// Implementation #2 pre-calculates the primes and stores the result +// in an array. +class PreCalculatedPrimeTable : public PrimeTable { + public: + // 'max' specifies the maximum number the prime table holds. + explicit PreCalculatedPrimeTable(int max) + : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) { + CalculatePrimesUpTo(max); + } + virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; } + + virtual bool IsPrime(int n) const { + return 0 <= n && n < is_prime_size_ && is_prime_[n]; + } + + virtual int GetNextPrime(int p) const { + for (int n = p + 1; n < is_prime_size_; n++) { + if (is_prime_[n]) return n; + } + + return -1; + } + + private: + void CalculatePrimesUpTo(int max) { + ::std::fill(is_prime_, is_prime_ + is_prime_size_, true); + is_prime_[0] = is_prime_[1] = false; + + for (int i = 2; i <= max; i++) { + if (!is_prime_[i]) continue; + + // Marks all multiples of i (except i itself) as non-prime. + for (int j = 2*i; j <= max; j += i) { + is_prime_[j] = false; + } + } + } + + const int is_prime_size_; + bool* const is_prime_; + + // Disables compiler warning "assignment operator could not be generated." + void operator=(const PreCalculatedPrimeTable& rhs); +}; + +#endif // GTEST_SAMPLES_PRIME_TABLES_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.cc new file mode 100644 index 00000000..f171e260 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.cc @@ -0,0 +1,68 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#include "sample1.h" + +// Returns n! (the factorial of n). For negative n, n! is defined to be 1. +int Factorial(int n) { + int result = 1; + for (int i = 1; i <= n; i++) { + result *= i; + } + + return result; +} + +// Returns true iff n is a prime number. +bool IsPrime(int n) { + // Trivial case 1: small numbers + if (n <= 1) return false; + + // Trivial case 2: even numbers + if (n % 2 == 0) return n == 2; + + // Now, we have that n is odd and n >= 3. + + // Try to divide n by every odd number i, starting from 3 + for (int i = 3; ; i += 2) { + // We only have to try i up to the squre root of n + if (i > n/i) break; + + // Now, we have i <= n/i < n. + // If n is divisible by i, n is not prime. + if (n % i == 0) return false; + } + + // n has no integer factor in the range (1, n), and thus is prime. + return true; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.h new file mode 100644 index 00000000..3dfeb98c --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1.h @@ -0,0 +1,43 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_SAMPLES_SAMPLE1_H_ +#define GTEST_SAMPLES_SAMPLE1_H_ + +// Returns n! (the factorial of n). For negative n, n! is defined to be 1. +int Factorial(int n); + +// Returns true iff n is a prime number. +bool IsPrime(int n); + +#endif // GTEST_SAMPLES_SAMPLE1_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample10_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample10_unittest.cc new file mode 100644 index 00000000..3ad6fd65 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample10_unittest.cc @@ -0,0 +1,145 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// This sample shows how to use Google Test listener API to implement +// a primitive leak checker. + +#include +#include + +#include + +using ::testing::EmptyTestEventListener; +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; +using ::testing::TestEventListeners; +using ::testing::TestInfo; +using ::testing::TestPartResult; +using ::testing::UnitTest; + +namespace { + +// We will track memory used by this class. +class Water { + public: + // Normal Water declarations go here. + + // operator new and operator delete help us control water allocation. + void* operator new(size_t allocation_size) { + allocated_++; + return malloc(allocation_size); + } + + void operator delete(void* block, size_t /* allocation_size */) { + allocated_--; + free(block); + } + + static int allocated() { return allocated_; } + + private: + static int allocated_; +}; + +int Water::allocated_ = 0; + +// This event listener monitors how many Water objects are created and +// destroyed by each test, and reports a failure if a test leaks some Water +// objects. It does this by comparing the number of live Water objects at +// the beginning of a test and at the end of a test. +class LeakChecker : public EmptyTestEventListener { + private: + // Called before a test starts. + virtual void OnTestStart(const TestInfo& /* test_info */) { + initially_allocated_ = Water::allocated(); + } + + // Called after a test ends. + virtual void OnTestEnd(const TestInfo& /* test_info */) { + int difference = Water::allocated() - initially_allocated_; + + // You can generate a failure in any event handler except + // OnTestPartResult. Just use an appropriate Google Test assertion to do + // it. + EXPECT_TRUE(difference <= 0) + << "Leaked " << difference << " unit(s) of Water!"; + } + + int initially_allocated_; +}; + +TEST(ListenersTest, DoesNotLeak) { + Water* water = new Water; + delete water; +} + +// This should fail when the --check_for_leaks command line flag is +// specified. +TEST(ListenersTest, LeaksWater) { + Water* water = new Water; + EXPECT_TRUE(water != NULL); +} + +} // namespace + +int main(int argc, char **argv) { + InitGoogleTest(&argc, argv); + + bool check_for_leaks = false; + if (argc > 1 && strcmp(argv[1], "--check_for_leaks") == 0 ) + check_for_leaks = true; + else + printf("%s\n", "Run this program with --check_for_leaks to enable " + "custom leak checking in the tests."); + + // If we are given the --check_for_leaks command line flag, installs the + // leak checker. + if (check_for_leaks) { + TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); + + // Adds the leak checker to the end of the test event listener list, + // after the default text output printer and the default XML report + // generator. + // + // The order is important - it ensures that failures generated in the + // leak checker's OnTestEnd() method are processed by the text and XML + // printers *before* their OnTestEnd() methods are called, such that + // they are attributed to the right test. Remember that a listener + // receives an OnXyzStart event *after* listeners preceding it in the + // list received that event, and receives an OnXyzEnd event *before* + // listeners preceding it. + // + // We don't need to worry about deleting the new listener later, as + // Google Test will do it. + listeners.Append(new LeakChecker); + } + return RUN_ALL_TESTS(); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1_unittest.cc new file mode 100644 index 00000000..01eb5462 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample1_unittest.cc @@ -0,0 +1,153 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + + +// This sample shows how to write a simple unit test for a function, +// using Google C++ testing framework. +// +// Writing a unit test using Google C++ testing framework is easy as 1-2-3: + + +// Step 1. Include necessary header files such that the stuff your +// test logic needs is declared. +// +// Don't forget gtest.h, which declares the testing framework. + +#include +#include "sample1.h" +#include + + +// Step 2. Use the TEST macro to define your tests. +// +// TEST has two parameters: the test case name and the test name. +// After using the macro, you should define your test logic between a +// pair of braces. You can use a bunch of macros to indicate the +// success or failure of a test. EXPECT_TRUE and EXPECT_EQ are +// examples of such macros. For a complete list, see gtest.h. +// +// +// +// In Google Test, tests are grouped into test cases. This is how we +// keep test code organized. You should put logically related tests +// into the same test case. +// +// The test case name and the test name should both be valid C++ +// identifiers. And you should not use underscore (_) in the names. +// +// Google Test guarantees that each test you define is run exactly +// once, but it makes no guarantee on the order the tests are +// executed. Therefore, you should write your tests in such a way +// that their results don't depend on their order. +// +// + + +// Tests Factorial(). + +// Tests factorial of negative numbers. +TEST(FactorialTest, Negative) { + // This test is named "Negative", and belongs to the "FactorialTest" + // test case. + EXPECT_EQ(1, Factorial(-5)); + EXPECT_EQ(1, Factorial(-1)); + EXPECT_TRUE(Factorial(-10) > 0); + + // + // + // EXPECT_EQ(expected, actual) is the same as + // + // EXPECT_TRUE((expected) == (actual)) + // + // except that it will print both the expected value and the actual + // value when the assertion fails. This is very helpful for + // debugging. Therefore in this case EXPECT_EQ is preferred. + // + // On the other hand, EXPECT_TRUE accepts any Boolean expression, + // and is thus more general. + // + // +} + +// Tests factorial of 0. +TEST(FactorialTest, Zero) { + EXPECT_EQ(1, Factorial(0)); +} + +// Tests factorial of positive numbers. +TEST(FactorialTest, Positive) { + EXPECT_EQ(1, Factorial(1)); + EXPECT_EQ(2, Factorial(2)); + EXPECT_EQ(6, Factorial(3)); + EXPECT_EQ(40320, Factorial(8)); +} + + +// Tests IsPrime() + +// Tests negative input. +TEST(IsPrimeTest, Negative) { + // This test belongs to the IsPrimeTest test case. + + EXPECT_FALSE(IsPrime(-1)); + EXPECT_FALSE(IsPrime(-2)); + EXPECT_FALSE(IsPrime(INT_MIN)); +} + +// Tests some trivial cases. +TEST(IsPrimeTest, Trivial) { + EXPECT_FALSE(IsPrime(0)); + EXPECT_FALSE(IsPrime(1)); + EXPECT_TRUE(IsPrime(2)); + EXPECT_TRUE(IsPrime(3)); +} + +// Tests positive input. +TEST(IsPrimeTest, Positive) { + EXPECT_FALSE(IsPrime(4)); + EXPECT_TRUE(IsPrime(5)); + EXPECT_FALSE(IsPrime(6)); + EXPECT_TRUE(IsPrime(23)); +} + +// Step 3. Call RUN_ALL_TESTS() in main(). +// +// We do this by linking in src/gtest_main.cc file, which consists of +// a main() function which calls RUN_ALL_TESTS() for us. +// +// This runs all the tests you've defined, prints the result, and +// returns 0 if successful, or 1 otherwise. +// +// Did you notice that we didn't register the tests? The +// RUN_ALL_TESTS() macro magically knows about all the tests we +// defined. Isn't this convenient? diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.cc new file mode 100644 index 00000000..5f763b9b --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.cc @@ -0,0 +1,56 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#include "sample2.h" + +#include + +// Clones a 0-terminated C string, allocating memory using new. +const char* MyString::CloneCString(const char* a_c_string) { + if (a_c_string == NULL) return NULL; + + const size_t len = strlen(a_c_string); + char* const clone = new char[ len + 1 ]; + memcpy(clone, a_c_string, len + 1); + + return clone; +} + +// Sets the 0-terminated C string this MyString object +// represents. +void MyString::Set(const char* a_c_string) { + // Makes sure this works when c_string == c_string_ + const char* const temp = MyString::CloneCString(a_c_string); + delete[] c_string_; + c_string_ = temp; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.h new file mode 100644 index 00000000..5b57e608 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2.h @@ -0,0 +1,86 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_SAMPLES_SAMPLE2_H_ +#define GTEST_SAMPLES_SAMPLE2_H_ + +#include + + +// A simple string class. +class MyString { + private: + const char* c_string_; + const MyString& operator=(const MyString& rhs); + + public: + + // Clones a 0-terminated C string, allocating memory using new. + static const char* CloneCString(const char* a_c_string); + + //////////////////////////////////////////////////////////// + // + // C'tors + + // The default c'tor constructs a NULL string. + MyString() : c_string_(NULL) {} + + // Constructs a MyString by cloning a 0-terminated C string. + explicit MyString(const char* a_c_string) : c_string_(NULL) { + Set(a_c_string); + } + + // Copy c'tor + MyString(const MyString& string) : c_string_(NULL) { + Set(string.c_string_); + } + + //////////////////////////////////////////////////////////// + // + // D'tor. MyString is intended to be a final class, so the d'tor + // doesn't need to be virtual. + ~MyString() { delete[] c_string_; } + + // Gets the 0-terminated C string this MyString object represents. + const char* c_string() const { return c_string_; } + + size_t Length() const { + return c_string_ == NULL ? 0 : strlen(c_string_); + } + + // Sets the 0-terminated C string this MyString object represents. + void Set(const char* c_string); +}; + + +#endif // GTEST_SAMPLES_SAMPLE2_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2_unittest.cc new file mode 100644 index 00000000..32232d98 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample2_unittest.cc @@ -0,0 +1,109 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + + +// This sample shows how to write a more complex unit test for a class +// that has multiple member functions. +// +// Usually, it's a good idea to have one test for each method in your +// class. You don't have to do that exactly, but it helps to keep +// your tests organized. You may also throw in additional tests as +// needed. + +#include "sample2.h" +#include + +// In this example, we test the MyString class (a simple string). + +// Tests the default c'tor. +TEST(MyString, DefaultConstructor) { + const MyString s; + + // Asserts that s.c_string() returns NULL. + // + // + // + // If we write NULL instead of + // + // static_cast(NULL) + // + // in this assertion, it will generate a warning on gcc 3.4. The + // reason is that EXPECT_EQ needs to know the types of its + // arguments in order to print them when it fails. Since NULL is + // #defined as 0, the compiler will use the formatter function for + // int to print it. However, gcc thinks that NULL should be used as + // a pointer, not an int, and therefore complains. + // + // The root of the problem is C++'s lack of distinction between the + // integer number 0 and the null pointer constant. Unfortunately, + // we have to live with this fact. + // + // + EXPECT_STREQ(NULL, s.c_string()); + + EXPECT_EQ(0u, s.Length()); +} + +const char kHelloString[] = "Hello, world!"; + +// Tests the c'tor that accepts a C string. +TEST(MyString, ConstructorFromCString) { + const MyString s(kHelloString); + EXPECT_TRUE(strcmp(s.c_string(), kHelloString) == 0); + EXPECT_EQ(sizeof(kHelloString)/sizeof(kHelloString[0]) - 1, + s.Length()); +} + +// Tests the copy c'tor. +TEST(MyString, CopyConstructor) { + const MyString s1(kHelloString); + const MyString s2 = s1; + EXPECT_TRUE(strcmp(s2.c_string(), kHelloString) == 0); +} + +// Tests the Set method. +TEST(MyString, Set) { + MyString s; + + s.Set(kHelloString); + EXPECT_TRUE(strcmp(s.c_string(), kHelloString) == 0); + + // Set should work when the input pointer is the same as the one + // already in the MyString object. + s.Set(s.c_string()); + EXPECT_TRUE(strcmp(s.c_string(), kHelloString) == 0); + + // Can we set the MyString to NULL? + s.Set(NULL); + EXPECT_STREQ(NULL, s.c_string()); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3-inl.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3-inl.h new file mode 100644 index 00000000..46369a07 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3-inl.h @@ -0,0 +1,173 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_SAMPLES_SAMPLE3_INL_H_ +#define GTEST_SAMPLES_SAMPLE3_INL_H_ + +#include + + +// Queue is a simple queue implemented as a singled-linked list. +// +// The element type must support copy constructor. +template // E is the element type +class Queue; + +// QueueNode is a node in a Queue, which consists of an element of +// type E and a pointer to the next node. +template // E is the element type +class QueueNode { + friend class Queue; + + public: + // Gets the element in this node. + const E& element() const { return element_; } + + // Gets the next node in the queue. + QueueNode* next() { return next_; } + const QueueNode* next() const { return next_; } + + private: + // Creates a node with a given element value. The next pointer is + // set to NULL. + QueueNode(const E& an_element) : element_(an_element), next_(NULL) {} + + // We disable the default assignment operator and copy c'tor. + const QueueNode& operator = (const QueueNode&); + QueueNode(const QueueNode&); + + E element_; + QueueNode* next_; +}; + +template // E is the element type. +class Queue { +public: + + // Creates an empty queue. + Queue() : head_(NULL), last_(NULL), size_(0) {} + + // D'tor. Clears the queue. + ~Queue() { Clear(); } + + // Clears the queue. + void Clear() { + if (size_ > 0) { + // 1. Deletes every node. + QueueNode* node = head_; + QueueNode* next = node->next(); + for (; ;) { + delete node; + node = next; + if (node == NULL) break; + next = node->next(); + } + + // 2. Resets the member variables. + head_ = last_ = NULL; + size_ = 0; + } + } + + // Gets the number of elements. + size_t Size() const { return size_; } + + // Gets the first element of the queue, or NULL if the queue is empty. + QueueNode* Head() { return head_; } + const QueueNode* Head() const { return head_; } + + // Gets the last element of the queue, or NULL if the queue is empty. + QueueNode* Last() { return last_; } + const QueueNode* Last() const { return last_; } + + // Adds an element to the end of the queue. A copy of the element is + // created using the copy constructor, and then stored in the queue. + // Changes made to the element in the queue doesn't affect the source + // object, and vice versa. + void Enqueue(const E& element) { + QueueNode* new_node = new QueueNode(element); + + if (size_ == 0) { + head_ = last_ = new_node; + size_ = 1; + } else { + last_->next_ = new_node; + last_ = new_node; + size_++; + } + } + + // Removes the head of the queue and returns it. Returns NULL if + // the queue is empty. + E* Dequeue() { + if (size_ == 0) { + return NULL; + } + + const QueueNode* const old_head = head_; + head_ = head_->next_; + size_--; + if (size_ == 0) { + last_ = NULL; + } + + E* element = new E(old_head->element()); + delete old_head; + + return element; + } + + // Applies a function/functor on each element of the queue, and + // returns the result in a new queue. The original queue is not + // affected. + template + Queue* Map(F function) const { + Queue* new_queue = new Queue(); + for (const QueueNode* node = head_; node != NULL; node = node->next_) { + new_queue->Enqueue(function(node->element())); + } + + return new_queue; + } + + private: + QueueNode* head_; // The first node of the queue. + QueueNode* last_; // The last node of the queue. + size_t size_; // The number of elements in the queue. + + // We disallow copying a queue. + Queue(const Queue&); + const Queue& operator = (const Queue&); + }; + +#endif // GTEST_SAMPLES_SAMPLE3_INL_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3_unittest.cc new file mode 100644 index 00000000..34c1ca86 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample3_unittest.cc @@ -0,0 +1,151 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + + +// In this example, we use a more advanced feature of Google Test called +// test fixture. +// +// A test fixture is a place to hold objects and functions shared by +// all tests in a test case. Using a test fixture avoids duplicating +// the test code necessary to initialize and cleanup those common +// objects for each test. It is also useful for defining sub-routines +// that your tests need to invoke a lot. +// +// +// +// The tests share the test fixture in the sense of code sharing, not +// data sharing. Each test is given its own fresh copy of the +// fixture. You cannot expect the data modified by one test to be +// passed on to another test, which is a bad idea. +// +// The reason for this design is that tests should be independent and +// repeatable. In particular, a test should not fail as the result of +// another test's failure. If one test depends on info produced by +// another test, then the two tests should really be one big test. +// +// The macros for indicating the success/failure of a test +// (EXPECT_TRUE, FAIL, etc) need to know what the current test is +// (when Google Test prints the test result, it tells you which test +// each failure belongs to). Technically, these macros invoke a +// member function of the Test class. Therefore, you cannot use them +// in a global function. That's why you should put test sub-routines +// in a test fixture. +// +// + +#include "sample3-inl.h" +#include + +// To use a test fixture, derive a class from testing::Test. +class QueueTest : public testing::Test { + protected: // You should make the members protected s.t. they can be + // accessed from sub-classes. + + // virtual void SetUp() will be called before each test is run. You + // should define it if you need to initialize the varaibles. + // Otherwise, this can be skipped. + virtual void SetUp() { + q1_.Enqueue(1); + q2_.Enqueue(2); + q2_.Enqueue(3); + } + + // virtual void TearDown() will be called after each test is run. + // You should define it if there is cleanup work to do. Otherwise, + // you don't have to provide it. + // + // virtual void TearDown() { + // } + + // A helper function that some test uses. + static int Double(int n) { + return 2*n; + } + + // A helper function for testing Queue::Map(). + void MapTester(const Queue * q) { + // Creates a new queue, where each element is twice as big as the + // corresponding one in q. + const Queue * const new_q = q->Map(Double); + + // Verifies that the new queue has the same size as q. + ASSERT_EQ(q->Size(), new_q->Size()); + + // Verifies the relationship between the elements of the two queues. + for ( const QueueNode * n1 = q->Head(), * n2 = new_q->Head(); + n1 != NULL; n1 = n1->next(), n2 = n2->next() ) { + EXPECT_EQ(2 * n1->element(), n2->element()); + } + + delete new_q; + } + + // Declares the variables your tests want to use. + Queue q0_; + Queue q1_; + Queue q2_; +}; + +// When you have a test fixture, you define a test using TEST_F +// instead of TEST. + +// Tests the default c'tor. +TEST_F(QueueTest, DefaultConstructor) { + // You can access data in the test fixture here. + EXPECT_EQ(0u, q0_.Size()); +} + +// Tests Dequeue(). +TEST_F(QueueTest, Dequeue) { + int * n = q0_.Dequeue(); + EXPECT_TRUE(n == NULL); + + n = q1_.Dequeue(); + ASSERT_TRUE(n != NULL); + EXPECT_EQ(1, *n); + EXPECT_EQ(0u, q1_.Size()); + delete n; + + n = q2_.Dequeue(); + ASSERT_TRUE(n != NULL); + EXPECT_EQ(2, *n); + EXPECT_EQ(1u, q2_.Size()); + delete n; +} + +// Tests the Queue::Map() function. +TEST_F(QueueTest, Map) { + MapTester(&q0_); + MapTester(&q1_); + MapTester(&q2_); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.cc new file mode 100644 index 00000000..ae44bda6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.cc @@ -0,0 +1,46 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#include + +#include "sample4.h" + +// Returns the current counter value, and increments it. +int Counter::Increment() { + return counter_++; +} + +// Prints the current counter value to STDOUT. +void Counter::Print() const { + printf("%d", counter_); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.h b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.h new file mode 100644 index 00000000..cd60f0dd --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4.h @@ -0,0 +1,53 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A sample program demonstrating using Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_SAMPLES_SAMPLE4_H_ +#define GTEST_SAMPLES_SAMPLE4_H_ + +// A simple monotonic counter. +class Counter { + private: + int counter_; + + public: + // Creates a counter that starts at 0. + Counter() : counter_(0) {} + + // Returns the current counter value, and increments it. + int Increment(); + + // Prints the current counter value to STDOUT. + void Print() const; +}; + +#endif // GTEST_SAMPLES_SAMPLE4_H_ diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4_unittest.cc new file mode 100644 index 00000000..b4fb3736 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample4_unittest.cc @@ -0,0 +1,45 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#include +#include "sample4.h" + +// Tests the Increment() method. +TEST(Counter, Increment) { + Counter c; + + // EXPECT_EQ() evaluates its arguments exactly once, so they + // can have side effects. + + EXPECT_EQ(0, c.Increment()); + EXPECT_EQ(1, c.Increment()); + EXPECT_EQ(2, c.Increment()); +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample5_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample5_unittest.cc new file mode 100644 index 00000000..49dae7c6 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample5_unittest.cc @@ -0,0 +1,199 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// This sample teaches how to reuse a test fixture in multiple test +// cases by deriving sub-fixtures from it. +// +// When you define a test fixture, you specify the name of the test +// case that will use this fixture. Therefore, a test fixture can +// be used by only one test case. +// +// Sometimes, more than one test cases may want to use the same or +// slightly different test fixtures. For example, you may want to +// make sure that all tests for a GUI library don't leak important +// system resources like fonts and brushes. In Google Test, you do +// this by putting the shared logic in a super (as in "super class") +// test fixture, and then have each test case use a fixture derived +// from this super fixture. + +#include +#include +#include "sample3-inl.h" +#include +#include "sample1.h" + +// In this sample, we want to ensure that every test finishes within +// ~5 seconds. If a test takes longer to run, we consider it a +// failure. +// +// We put the code for timing a test in a test fixture called +// "QuickTest". QuickTest is intended to be the super fixture that +// other fixtures derive from, therefore there is no test case with +// the name "QuickTest". This is OK. +// +// Later, we will derive multiple test fixtures from QuickTest. +class QuickTest : public testing::Test { + protected: + // Remember that SetUp() is run immediately before a test starts. + // This is a good place to record the start time. + virtual void SetUp() { + start_time_ = time(NULL); + } + + // TearDown() is invoked immediately after a test finishes. Here we + // check if the test was too slow. + virtual void TearDown() { + // Gets the time when the test finishes + const time_t end_time = time(NULL); + + // Asserts that the test took no more than ~5 seconds. Did you + // know that you can use assertions in SetUp() and TearDown() as + // well? + EXPECT_TRUE(end_time - start_time_ <= 5) << "The test took too long."; + } + + // The UTC time (in seconds) when the test starts + time_t start_time_; +}; + + +// We derive a fixture named IntegerFunctionTest from the QuickTest +// fixture. All tests using this fixture will be automatically +// required to be quick. +class IntegerFunctionTest : public QuickTest { + // We don't need any more logic than already in the QuickTest fixture. + // Therefore the body is empty. +}; + + +// Now we can write tests in the IntegerFunctionTest test case. + +// Tests Factorial() +TEST_F(IntegerFunctionTest, Factorial) { + // Tests factorial of negative numbers. + EXPECT_EQ(1, Factorial(-5)); + EXPECT_EQ(1, Factorial(-1)); + EXPECT_TRUE(Factorial(-10) > 0); + + // Tests factorial of 0. + EXPECT_EQ(1, Factorial(0)); + + // Tests factorial of positive numbers. + EXPECT_EQ(1, Factorial(1)); + EXPECT_EQ(2, Factorial(2)); + EXPECT_EQ(6, Factorial(3)); + EXPECT_EQ(40320, Factorial(8)); +} + + +// Tests IsPrime() +TEST_F(IntegerFunctionTest, IsPrime) { + // Tests negative input. + EXPECT_TRUE(!IsPrime(-1)); + EXPECT_TRUE(!IsPrime(-2)); + EXPECT_TRUE(!IsPrime(INT_MIN)); + + // Tests some trivial cases. + EXPECT_TRUE(!IsPrime(0)); + EXPECT_TRUE(!IsPrime(1)); + EXPECT_TRUE(IsPrime(2)); + EXPECT_TRUE(IsPrime(3)); + + // Tests positive input. + EXPECT_TRUE(!IsPrime(4)); + EXPECT_TRUE(IsPrime(5)); + EXPECT_TRUE(!IsPrime(6)); + EXPECT_TRUE(IsPrime(23)); +} + + +// The next test case (named "QueueTest") also needs to be quick, so +// we derive another fixture from QuickTest. +// +// The QueueTest test fixture has some logic and shared objects in +// addition to what's in QuickTest already. We define the additional +// stuff inside the body of the test fixture, as usual. +class QueueTest : public QuickTest { + protected: + virtual void SetUp() { + // First, we need to set up the super fixture (QuickTest). + QuickTest::SetUp(); + + // Second, some additional setup for this fixture. + q1_.Enqueue(1); + q2_.Enqueue(2); + q2_.Enqueue(3); + } + + // By default, TearDown() inherits the behavior of + // QuickTest::TearDown(). As we have no additional cleaning work + // for QueueTest, we omit it here. + // + // virtual void TearDown() { + // QuickTest::TearDown(); + // } + + Queue q0_; + Queue q1_; + Queue q2_; +}; + + +// Now, let's write tests using the QueueTest fixture. + +// Tests the default constructor. +TEST_F(QueueTest, DefaultConstructor) { + EXPECT_EQ(0u, q0_.Size()); +} + +// Tests Dequeue(). +TEST_F(QueueTest, Dequeue) { + int* n = q0_.Dequeue(); + EXPECT_TRUE(n == NULL); + + n = q1_.Dequeue(); + EXPECT_TRUE(n != NULL); + EXPECT_EQ(1, *n); + EXPECT_EQ(0u, q1_.Size()); + delete n; + + n = q2_.Dequeue(); + EXPECT_TRUE(n != NULL); + EXPECT_EQ(2, *n); + EXPECT_EQ(1u, q2_.Size()); + delete n; +} + +// If necessary, you can derive further test fixtures from a derived +// fixture itself. For example, you can derive another fixture from +// QueueTest. Google Test imposes no limit on how deep the hierarchy +// can be. In practice, however, you probably don't want it to be too +// deep as to be confusing. diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample6_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample6_unittest.cc new file mode 100644 index 00000000..dd0df31f --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample6_unittest.cc @@ -0,0 +1,224 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// This sample shows how to test common properties of multiple +// implementations of the same interface (aka interface tests). + +// The interface and its implementations are in this header. +#include "prime_tables.h" + +#include + +// First, we define some factory functions for creating instances of +// the implementations. You may be able to skip this step if all your +// implementations can be constructed the same way. + +template +PrimeTable* CreatePrimeTable(); + +template <> +PrimeTable* CreatePrimeTable() { + return new OnTheFlyPrimeTable; +} + +template <> +PrimeTable* CreatePrimeTable() { + return new PreCalculatedPrimeTable(10000); +} + +// Then we define a test fixture class template. +template +class PrimeTableTest : public testing::Test { + protected: + // The ctor calls the factory function to create a prime table + // implemented by T. + PrimeTableTest() : table_(CreatePrimeTable()) {} + + virtual ~PrimeTableTest() { delete table_; } + + // Note that we test an implementation via the base interface + // instead of the actual implementation class. This is important + // for keeping the tests close to the real world scenario, where the + // implementation is invoked via the base interface. It avoids + // got-yas where the implementation class has a method that shadows + // a method with the same name (but slightly different argument + // types) in the base interface, for example. + PrimeTable* const table_; +}; + +#if GTEST_HAS_TYPED_TEST + +using testing::Types; + +// Google Test offers two ways for reusing tests for different types. +// The first is called "typed tests". You should use it if you +// already know *all* the types you are gonna exercise when you write +// the tests. + +// To write a typed test case, first use +// +// TYPED_TEST_CASE(TestCaseName, TypeList); +// +// to declare it and specify the type parameters. As with TEST_F, +// TestCaseName must match the test fixture name. + +// The list of types we want to test. +typedef Types Implementations; + +TYPED_TEST_CASE(PrimeTableTest, Implementations); + +// Then use TYPED_TEST(TestCaseName, TestName) to define a typed test, +// similar to TEST_F. +TYPED_TEST(PrimeTableTest, ReturnsFalseForNonPrimes) { + // Inside the test body, you can refer to the type parameter by + // TypeParam, and refer to the fixture class by TestFixture. We + // don't need them in this example. + + // Since we are in the template world, C++ requires explicitly + // writing 'this->' when referring to members of the fixture class. + // This is something you have to learn to live with. + EXPECT_FALSE(this->table_->IsPrime(-5)); + EXPECT_FALSE(this->table_->IsPrime(0)); + EXPECT_FALSE(this->table_->IsPrime(1)); + EXPECT_FALSE(this->table_->IsPrime(4)); + EXPECT_FALSE(this->table_->IsPrime(6)); + EXPECT_FALSE(this->table_->IsPrime(100)); +} + +TYPED_TEST(PrimeTableTest, ReturnsTrueForPrimes) { + EXPECT_TRUE(this->table_->IsPrime(2)); + EXPECT_TRUE(this->table_->IsPrime(3)); + EXPECT_TRUE(this->table_->IsPrime(5)); + EXPECT_TRUE(this->table_->IsPrime(7)); + EXPECT_TRUE(this->table_->IsPrime(11)); + EXPECT_TRUE(this->table_->IsPrime(131)); +} + +TYPED_TEST(PrimeTableTest, CanGetNextPrime) { + EXPECT_EQ(2, this->table_->GetNextPrime(0)); + EXPECT_EQ(3, this->table_->GetNextPrime(2)); + EXPECT_EQ(5, this->table_->GetNextPrime(3)); + EXPECT_EQ(7, this->table_->GetNextPrime(5)); + EXPECT_EQ(11, this->table_->GetNextPrime(7)); + EXPECT_EQ(131, this->table_->GetNextPrime(128)); +} + +// That's it! Google Test will repeat each TYPED_TEST for each type +// in the type list specified in TYPED_TEST_CASE. Sit back and be +// happy that you don't have to define them multiple times. + +#endif // GTEST_HAS_TYPED_TEST + +#if GTEST_HAS_TYPED_TEST_P + +using testing::Types; + +// Sometimes, however, you don't yet know all the types that you want +// to test when you write the tests. For example, if you are the +// author of an interface and expect other people to implement it, you +// might want to write a set of tests to make sure each implementation +// conforms to some basic requirements, but you don't know what +// implementations will be written in the future. +// +// How can you write the tests without committing to the type +// parameters? That's what "type-parameterized tests" can do for you. +// It is a bit more involved than typed tests, but in return you get a +// test pattern that can be reused in many contexts, which is a big +// win. Here's how you do it: + +// First, define a test fixture class template. Here we just reuse +// the PrimeTableTest fixture defined earlier: + +template +class PrimeTableTest2 : public PrimeTableTest { +}; + +// Then, declare the test case. The argument is the name of the test +// fixture, and also the name of the test case (as usual). The _P +// suffix is for "parameterized" or "pattern". +TYPED_TEST_CASE_P(PrimeTableTest2); + +// Next, use TYPED_TEST_P(TestCaseName, TestName) to define a test, +// similar to what you do with TEST_F. +TYPED_TEST_P(PrimeTableTest2, ReturnsFalseForNonPrimes) { + EXPECT_FALSE(this->table_->IsPrime(-5)); + EXPECT_FALSE(this->table_->IsPrime(0)); + EXPECT_FALSE(this->table_->IsPrime(1)); + EXPECT_FALSE(this->table_->IsPrime(4)); + EXPECT_FALSE(this->table_->IsPrime(6)); + EXPECT_FALSE(this->table_->IsPrime(100)); +} + +TYPED_TEST_P(PrimeTableTest2, ReturnsTrueForPrimes) { + EXPECT_TRUE(this->table_->IsPrime(2)); + EXPECT_TRUE(this->table_->IsPrime(3)); + EXPECT_TRUE(this->table_->IsPrime(5)); + EXPECT_TRUE(this->table_->IsPrime(7)); + EXPECT_TRUE(this->table_->IsPrime(11)); + EXPECT_TRUE(this->table_->IsPrime(131)); +} + +TYPED_TEST_P(PrimeTableTest2, CanGetNextPrime) { + EXPECT_EQ(2, this->table_->GetNextPrime(0)); + EXPECT_EQ(3, this->table_->GetNextPrime(2)); + EXPECT_EQ(5, this->table_->GetNextPrime(3)); + EXPECT_EQ(7, this->table_->GetNextPrime(5)); + EXPECT_EQ(11, this->table_->GetNextPrime(7)); + EXPECT_EQ(131, this->table_->GetNextPrime(128)); +} + +// Type-parameterized tests involve one extra step: you have to +// enumerate the tests you defined: +REGISTER_TYPED_TEST_CASE_P( + PrimeTableTest2, // The first argument is the test case name. + // The rest of the arguments are the test names. + ReturnsFalseForNonPrimes, ReturnsTrueForPrimes, CanGetNextPrime); + +// At this point the test pattern is done. However, you don't have +// any real test yet as you haven't said which types you want to run +// the tests with. + +// To turn the abstract test pattern into real tests, you instantiate +// it with a list of types. Usually the test pattern will be defined +// in a .h file, and anyone can #include and instantiate it. You can +// even instantiate it more than once in the same program. To tell +// different instances apart, you give each of them a name, which will +// become part of the test case name and can be used in test filters. + +// The list of types we want to test. Note that it doesn't have to be +// defined at the time we write the TYPED_TEST_P()s. +typedef Types + PrimeTableImplementations; +INSTANTIATE_TYPED_TEST_CASE_P(OnTheFlyAndPreCalculated, // Instance name + PrimeTableTest2, // Test case name + PrimeTableImplementations); // Type list + +#endif // GTEST_HAS_TYPED_TEST_P diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample7_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample7_unittest.cc new file mode 100644 index 00000000..f4552827 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample7_unittest.cc @@ -0,0 +1,132 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// This sample shows how to test common properties of multiple +// implementations of an interface (aka interface tests) using +// value-parameterized tests. Each test in the test case has +// a parameter that is an interface pointer to an implementation +// tested. + +// The interface and its implementations are in this header. +#include "prime_tables.h" + +#include + +#if GTEST_HAS_PARAM_TEST + +using ::testing::TestWithParam; +using ::testing::Values; + +// As a general rule, tested objects should not be reused between tests. +// Also, their constructors and destructors of tested objects can have +// side effects. Thus you should create and destroy them for each test. +// In this sample we will define a simple factory function for PrimeTable +// objects. We will instantiate objects in test's SetUp() method and +// delete them in TearDown() method. +typedef PrimeTable* CreatePrimeTableFunc(); + +PrimeTable* CreateOnTheFlyPrimeTable() { + return new OnTheFlyPrimeTable(); +} + +template +PrimeTable* CreatePreCalculatedPrimeTable() { + return new PreCalculatedPrimeTable(max_precalculated); +} + +// Inside the test body, fixture constructor, SetUp(), and TearDown() +// you can refer to the test parameter by GetParam(). +// In this case, the test parameter is a PrimeTableFactory interface pointer +// which we use in fixture's SetUp() to create and store an instance of +// PrimeTable. +class PrimeTableTest : public TestWithParam { + public: + virtual ~PrimeTableTest() { delete table_; } + virtual void SetUp() { table_ = (*GetParam())(); } + virtual void TearDown() { + delete table_; + table_ = NULL; + } + + protected: + PrimeTable* table_; +}; + +TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) { + EXPECT_FALSE(table_->IsPrime(-5)); + EXPECT_FALSE(table_->IsPrime(0)); + EXPECT_FALSE(table_->IsPrime(1)); + EXPECT_FALSE(table_->IsPrime(4)); + EXPECT_FALSE(table_->IsPrime(6)); + EXPECT_FALSE(table_->IsPrime(100)); +} + +TEST_P(PrimeTableTest, ReturnsTrueForPrimes) { + EXPECT_TRUE(table_->IsPrime(2)); + EXPECT_TRUE(table_->IsPrime(3)); + EXPECT_TRUE(table_->IsPrime(5)); + EXPECT_TRUE(table_->IsPrime(7)); + EXPECT_TRUE(table_->IsPrime(11)); + EXPECT_TRUE(table_->IsPrime(131)); +} + +TEST_P(PrimeTableTest, CanGetNextPrime) { + EXPECT_EQ(2, table_->GetNextPrime(0)); + EXPECT_EQ(3, table_->GetNextPrime(2)); + EXPECT_EQ(5, table_->GetNextPrime(3)); + EXPECT_EQ(7, table_->GetNextPrime(5)); + EXPECT_EQ(11, table_->GetNextPrime(7)); + EXPECT_EQ(131, table_->GetNextPrime(128)); +} + +// In order to run value-parameterized tests, you need to instantiate them, +// or bind them to a list of values which will be used as test parameters. +// You can instantiate them in a different translation module, or even +// instantiate them several times. +// +// Here, we instantiate our tests with a list of two PrimeTable object +// factory functions: +INSTANTIATE_TEST_CASE_P( + OnTheFlyAndPreCalculated, + PrimeTableTest, + Values(&CreateOnTheFlyPrimeTable, &CreatePreCalculatedPrimeTable<1000>)); + +#else + +// Google Test may not support value-parameterized tests with some +// compilers. If we use conditional compilation to compile out all +// code referring to the gtest_main library, MSVC linker will not link +// that library at all and consequently complain about missing entry +// point defined in that library (fatal error LNK1561: entry point +// must be defined). This dummy test keeps gtest_main linked in. +TEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {} + +#endif // GTEST_HAS_PARAM_TEST diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample8_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample8_unittest.cc new file mode 100644 index 00000000..ccf61d92 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample8_unittest.cc @@ -0,0 +1,173 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// This sample shows how to test code relying on some global flag variables. +// Combine() helps with generating all possible combinations of such flags, +// and each test is given one combination as a parameter. + +// Use class definitions to test from this header. +#include "prime_tables.h" + +#include + +#if GTEST_HAS_COMBINE + +// Suppose we want to introduce a new, improved implementation of PrimeTable +// which combines speed of PrecalcPrimeTable and versatility of +// OnTheFlyPrimeTable (see prime_tables.h). Inside it instantiates both +// PrecalcPrimeTable and OnTheFlyPrimeTable and uses the one that is more +// appropriate under the circumstances. But in low memory conditions, it can be +// told to instantiate without PrecalcPrimeTable instance at all and use only +// OnTheFlyPrimeTable. +class HybridPrimeTable : public PrimeTable { + public: + HybridPrimeTable(bool force_on_the_fly, int max_precalculated) + : on_the_fly_impl_(new OnTheFlyPrimeTable), + precalc_impl_(force_on_the_fly ? NULL : + new PreCalculatedPrimeTable(max_precalculated)), + max_precalculated_(max_precalculated) {} + virtual ~HybridPrimeTable() { + delete on_the_fly_impl_; + delete precalc_impl_; + } + + virtual bool IsPrime(int n) const { + if (precalc_impl_ != NULL && n < max_precalculated_) + return precalc_impl_->IsPrime(n); + else + return on_the_fly_impl_->IsPrime(n); + } + + virtual int GetNextPrime(int p) const { + int next_prime = -1; + if (precalc_impl_ != NULL && p < max_precalculated_) + next_prime = precalc_impl_->GetNextPrime(p); + + return next_prime != -1 ? next_prime : on_the_fly_impl_->GetNextPrime(p); + } + + private: + OnTheFlyPrimeTable* on_the_fly_impl_; + PreCalculatedPrimeTable* precalc_impl_; + int max_precalculated_; +}; + +using ::testing::TestWithParam; +using ::testing::Bool; +using ::testing::Values; +using ::testing::Combine; + +// To test all code paths for HybridPrimeTable we must test it with numbers +// both within and outside PreCalculatedPrimeTable's capacity and also with +// PreCalculatedPrimeTable disabled. We do this by defining fixture which will +// accept different combinations of parameters for instantiating a +// HybridPrimeTable instance. +class PrimeTableTest : public TestWithParam< ::std::tr1::tuple > { + protected: + virtual void SetUp() { + // This can be written as + // + // bool force_on_the_fly; + // int max_precalculated; + // tie(force_on_the_fly, max_precalculated) = GetParam(); + // + // once the Google C++ Style Guide allows use of ::std::tr1::tie. + // + bool force_on_the_fly = ::std::tr1::get<0>(GetParam()); + int max_precalculated = ::std::tr1::get<1>(GetParam()); + table_ = new HybridPrimeTable(force_on_the_fly, max_precalculated); + } + virtual void TearDown() { + delete table_; + table_ = NULL; + } + HybridPrimeTable* table_; +}; + +TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) { + // Inside the test body, you can refer to the test parameter by GetParam(). + // In this case, the test parameter is a PrimeTable interface pointer which + // we can use directly. + // Please note that you can also save it in the fixture's SetUp() method + // or constructor and use saved copy in the tests. + + EXPECT_FALSE(table_->IsPrime(-5)); + EXPECT_FALSE(table_->IsPrime(0)); + EXPECT_FALSE(table_->IsPrime(1)); + EXPECT_FALSE(table_->IsPrime(4)); + EXPECT_FALSE(table_->IsPrime(6)); + EXPECT_FALSE(table_->IsPrime(100)); +} + +TEST_P(PrimeTableTest, ReturnsTrueForPrimes) { + EXPECT_TRUE(table_->IsPrime(2)); + EXPECT_TRUE(table_->IsPrime(3)); + EXPECT_TRUE(table_->IsPrime(5)); + EXPECT_TRUE(table_->IsPrime(7)); + EXPECT_TRUE(table_->IsPrime(11)); + EXPECT_TRUE(table_->IsPrime(131)); +} + +TEST_P(PrimeTableTest, CanGetNextPrime) { + EXPECT_EQ(2, table_->GetNextPrime(0)); + EXPECT_EQ(3, table_->GetNextPrime(2)); + EXPECT_EQ(5, table_->GetNextPrime(3)); + EXPECT_EQ(7, table_->GetNextPrime(5)); + EXPECT_EQ(11, table_->GetNextPrime(7)); + EXPECT_EQ(131, table_->GetNextPrime(128)); +} + +// In order to run value-parameterized tests, you need to instantiate them, +// or bind them to a list of values which will be used as test parameters. +// You can instantiate them in a different translation module, or even +// instantiate them several times. +// +// Here, we instantiate our tests with a list of parameters. We must combine +// all variations of the boolean flag suppressing PrecalcPrimeTable and some +// meaningful values for tests. We choose a small value (1), and a value that +// will put some of the tested numbers beyond the capability of the +// PrecalcPrimeTable instance and some inside it (10). Combine will produce all +// possible combinations. +INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters, + PrimeTableTest, + Combine(Bool(), Values(1, 10))); + +#else + +// Google Test may not support Combine() with some compilers. If we +// use conditional compilation to compile out all code referring to +// the gtest_main library, MSVC linker will not link that library at +// all and consequently complain about missing entry point defined in +// that library (fatal error LNK1561: entry point must be +// defined). This dummy test keeps gtest_main linked in. +TEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {} + +#endif // GTEST_HAS_COMBINE diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample9_unittest.cc b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample9_unittest.cc new file mode 100644 index 00000000..d828ef4d --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/samples/sample9_unittest.cc @@ -0,0 +1,160 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// This sample shows how to use Google Test listener API to implement +// an alternative console output and how to use the UnitTest reflection API +// to enumerate test cases and tests and to inspect their results. + +#include + +#include + +using ::testing::EmptyTestEventListener; +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; +using ::testing::TestEventListeners; +using ::testing::TestInfo; +using ::testing::TestPartResult; +using ::testing::UnitTest; + +namespace { + +// Provides alternative output mode which produces minimal amount of +// information about tests. +class TersePrinter : public EmptyTestEventListener { + private: + // Called before any test activity starts. + virtual void OnTestProgramStart(const UnitTest& /* unit_test */) {} + + // Called after all test activities have ended. + virtual void OnTestProgramEnd(const UnitTest& unit_test) { + fprintf(stdout, "TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED"); + fflush(stdout); + } + + // Called before a test starts. + virtual void OnTestStart(const TestInfo& test_info) { + fprintf(stdout, + "*** Test %s.%s starting.\n", + test_info.test_case_name(), + test_info.name()); + fflush(stdout); + } + + // Called after a failed assertion or a SUCCESS(). + virtual void OnTestPartResult(const TestPartResult& test_part_result) { + fprintf(stdout, + "%s in %s:%d\n%s\n", + test_part_result.failed() ? "*** Failure" : "Success", + test_part_result.file_name(), + test_part_result.line_number(), + test_part_result.summary()); + fflush(stdout); + } + + // Called after a test ends. + virtual void OnTestEnd(const TestInfo& test_info) { + fprintf(stdout, + "*** Test %s.%s ending.\n", + test_info.test_case_name(), + test_info.name()); + fflush(stdout); + } +}; // class TersePrinter + +TEST(CustomOutputTest, PrintsMessage) { + printf("Printing something from the test body...\n"); +} + +TEST(CustomOutputTest, Succeeds) { + SUCCEED() << "SUCCEED() has been invoked from here"; +} + +TEST(CustomOutputTest, Fails) { + EXPECT_EQ(1, 2) + << "This test fails in order to demonstrate alternative failure messages"; +} + +} // namespace + +int main(int argc, char **argv) { + InitGoogleTest(&argc, argv); + + bool terse_output = false; + if (argc > 1 && strcmp(argv[1], "--terse_output") == 0 ) + terse_output = true; + else + printf("%s\n", "Run this program with --terse_output to change the way " + "it prints its output."); + + UnitTest& unit_test = *UnitTest::GetInstance(); + + // If we are given the --terse_output command line flag, suppresses the + // standard output and attaches own result printer. + if (terse_output) { + TestEventListeners& listeners = unit_test.listeners(); + + // Removes the default console output listener from the list so it will + // not receive events from Google Test and won't print any output. Since + // this operation transfers ownership of the listener to the caller we + // have to delete it as well. + delete listeners.Release(listeners.default_result_printer()); + + // Adds the custom output listener to the list. It will now receive + // events from Google Test and print the alternative output. We don't + // have to worry about deleting it since Google Test assumes ownership + // over it after adding it to the list. + listeners.Append(new TersePrinter); + } + int ret_val = RUN_ALL_TESTS(); + + // This is an example of using the UnitTest reflection API to inspect test + // results. Here we discount failures from the tests we expected to fail. + int unexpectedly_failed_tests = 0; + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase& test_case = *unit_test.GetTestCase(i); + for (int j = 0; j < test_case.total_test_count(); ++j) { + const TestInfo& test_info = *test_case.GetTestInfo(j); + // Counts failed tests that were not meant to fail (those without + // 'Fails' in the name). + if (test_info.result()->Failed() && + strcmp(test_info.name(), "Fails") != 0) { + unexpectedly_failed_tests++; + } + } + } + + // Test that were meant to fail should not affect the test program outcome. + if (unexpectedly_failed_tests == 0) + ret_val = 0; + + return ret_val; +} diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/fuse_gtest_files.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/fuse_gtest_files.py new file mode 100755 index 00000000..148444ca --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/fuse_gtest_files.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python +# +# Copyright 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""fuse_gtest_files.py v0.2.0 +Fuses Google Test source code into a .h file and a .cc file. + +SYNOPSIS + fuse_gtest_files.py [GTEST_ROOT_DIR] OUTPUT_DIR + + Scans GTEST_ROOT_DIR for Google Test source code, and generates + two files: OUTPUT_DIR/gtest/gtest.h and OUTPUT_DIR/gtest/gtest-all.cc. + Then you can build your tests by adding OUTPUT_DIR to the include + search path and linking with OUTPUT_DIR/gtest/gtest-all.cc. These + two files contain everything you need to use Google Test. Hence + you can "install" Google Test by copying them to wherever you want. + + GTEST_ROOT_DIR can be omitted and defaults to the parent + directory of the directory holding this script. + +EXAMPLES + ./fuse_gtest_files.py fused_gtest + ./fuse_gtest_files.py path/to/unpacked/gtest fused_gtest + +This tool is experimental. In particular, it assumes that there is no +conditional inclusion of Google Test headers. Please report any +problems to googletestframework@googlegroups.com. You can read +http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide for +more information. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import re +import sets +import sys + +# We assume that this file is in the scripts/ directory in the Google +# Test root directory. +DEFAULT_GTEST_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..') + +# Regex for matching '#include '. +INCLUDE_GTEST_FILE_REGEX = re.compile(r'^\s*#\s*include\s*<(gtest/.+)>') + +# Regex for matching '#include "src/..."'. +INCLUDE_SRC_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(src/.+)"') + +# Where to find the source seed files. +GTEST_H_SEED = 'include/gtest/gtest.h' +GTEST_SPI_H_SEED = 'include/gtest/gtest-spi.h' +GTEST_ALL_CC_SEED = 'src/gtest-all.cc' + +# Where to put the generated files. +GTEST_H_OUTPUT = 'gtest/gtest.h' +GTEST_ALL_CC_OUTPUT = 'gtest/gtest-all.cc' + + +def VerifyFileExists(directory, relative_path): + """Verifies that the given file exists; aborts on failure. + + relative_path is the file path relative to the given directory. + """ + + if not os.path.isfile(os.path.join(directory, relative_path)): + print 'ERROR: Cannot find %s in directory %s.' % (relative_path, + directory) + print ('Please either specify a valid project root directory ' + 'or omit it on the command line.') + sys.exit(1) + + +def ValidateGTestRootDir(gtest_root): + """Makes sure gtest_root points to a valid gtest root directory. + + The function aborts the program on failure. + """ + + VerifyFileExists(gtest_root, GTEST_H_SEED) + VerifyFileExists(gtest_root, GTEST_ALL_CC_SEED) + + +def VerifyOutputFile(output_dir, relative_path): + """Verifies that the given output file path is valid. + + relative_path is relative to the output_dir directory. + """ + + # Makes sure the output file either doesn't exist or can be overwritten. + output_file = os.path.join(output_dir, relative_path) + if os.path.exists(output_file): + # TODO(wan@google.com): The following user-interaction doesn't + # work with automated processes. We should provide a way for the + # Makefile to force overwriting the files. + print ('%s already exists in directory %s - overwrite it? (y/N) ' % + (relative_path, output_dir)) + answer = sys.stdin.readline().strip() + if answer not in ['y', 'Y']: + print 'ABORTED.' + sys.exit(1) + + # Makes sure the directory holding the output file exists; creates + # it and all its ancestors if necessary. + parent_directory = os.path.dirname(output_file) + if not os.path.isdir(parent_directory): + os.makedirs(parent_directory) + + +def ValidateOutputDir(output_dir): + """Makes sure output_dir points to a valid output directory. + + The function aborts the program on failure. + """ + + VerifyOutputFile(output_dir, GTEST_H_OUTPUT) + VerifyOutputFile(output_dir, GTEST_ALL_CC_OUTPUT) + + +def FuseGTestH(gtest_root, output_dir): + """Scans folder gtest_root to generate gtest/gtest.h in output_dir.""" + + output_file = file(os.path.join(output_dir, GTEST_H_OUTPUT), 'w') + processed_files = sets.Set() # Holds all gtest headers we've processed. + + def ProcessFile(gtest_header_path): + """Processes the given gtest header file.""" + + # We don't process the same header twice. + if gtest_header_path in processed_files: + return + + processed_files.add(gtest_header_path) + + # Reads each line in the given gtest header. + for line in file(os.path.join(gtest_root, gtest_header_path), 'r'): + m = INCLUDE_GTEST_FILE_REGEX.match(line) + if m: + # It's '#include ' - let's process it recursively. + ProcessFile('include/' + m.group(1)) + else: + # Otherwise we copy the line unchanged to the output file. + output_file.write(line) + + ProcessFile(GTEST_H_SEED) + output_file.close() + + +def FuseGTestAllCcToFile(gtest_root, output_file): + """Scans folder gtest_root to generate gtest/gtest-all.cc in output_file.""" + + processed_files = sets.Set() + + def ProcessFile(gtest_source_file): + """Processes the given gtest source file.""" + + # We don't process the same #included file twice. + if gtest_source_file in processed_files: + return + + processed_files.add(gtest_source_file) + + # Reads each line in the given gtest source file. + for line in file(os.path.join(gtest_root, gtest_source_file), 'r'): + m = INCLUDE_GTEST_FILE_REGEX.match(line) + if m: + if 'include/' + m.group(1) == GTEST_SPI_H_SEED: + # It's '#include '. This file is not + # #included by , so we need to process it. + ProcessFile(GTEST_SPI_H_SEED) + else: + # It's '#include ' where foo is not gtest-spi. + # We treat it as '#include ', as all other + # gtest headers are being fused into gtest.h and cannot be + # #included directly. + + # There is no need to #include more than once. + if not GTEST_H_SEED in processed_files: + processed_files.add(GTEST_H_SEED) + output_file.write('#include <%s>\n' % (GTEST_H_OUTPUT,)) + else: + m = INCLUDE_SRC_FILE_REGEX.match(line) + if m: + # It's '#include "src/foo"' - let's process it recursively. + ProcessFile(m.group(1)) + else: + output_file.write(line) + + ProcessFile(GTEST_ALL_CC_SEED) + + +def FuseGTestAllCc(gtest_root, output_dir): + """Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir.""" + + output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w') + FuseGTestAllCcToFile(gtest_root, output_file) + output_file.close() + + +def FuseGTest(gtest_root, output_dir): + """Fuses gtest.h and gtest-all.cc.""" + + ValidateGTestRootDir(gtest_root) + ValidateOutputDir(output_dir) + + FuseGTestH(gtest_root, output_dir) + FuseGTestAllCc(gtest_root, output_dir) + + +def main(): + argc = len(sys.argv) + if argc == 2: + # fuse_gtest_files.py OUTPUT_DIR + FuseGTest(DEFAULT_GTEST_ROOT_DIR, sys.argv[1]) + elif argc == 3: + # fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR + FuseGTest(sys.argv[1], sys.argv[2]) + else: + print __doc__ + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gen_gtest_pred_impl.py b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gen_gtest_pred_impl.py new file mode 100755 index 00000000..8307134a --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gen_gtest_pred_impl.py @@ -0,0 +1,733 @@ +#!/usr/bin/env python +# +# Copyright 2006, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""gen_gtest_pred_impl.py v0.1 + +Generates the implementation of Google Test predicate assertions and +accompanying tests. + +Usage: + + gen_gtest_pred_impl.py MAX_ARITY + +where MAX_ARITY is a positive integer. + +The command generates the implementation of up-to MAX_ARITY-ary +predicate assertions, and writes it to file gtest_pred_impl.h in the +directory where the script is. It also generates the accompanying +unit test in file gtest_pred_impl_unittest.cc. +""" + +__author__ = 'wan@google.com (Zhanyong Wan)' + +import os +import sys +import time + +# Where this script is. +SCRIPT_DIR = os.path.dirname(sys.argv[0]) + +# Where to store the generated header. +HEADER = os.path.join(SCRIPT_DIR, '../include/gtest/gtest_pred_impl.h') + +# Where to store the generated unit test. +UNIT_TEST = os.path.join(SCRIPT_DIR, '../test/gtest_pred_impl_unittest.cc') + + +def HeaderPreamble(n): + """Returns the preamble for the header file. + + Args: + n: the maximum arity of the predicate macros to be generated. + """ + + # A map that defines the values used in the preamble template. + DEFS = { + 'today' : time.strftime('%m/%d/%Y'), + 'year' : time.strftime('%Y'), + 'command' : '%s %s' % (os.path.basename(sys.argv[0]), n), + 'n' : n + } + + return ( +"""// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on %(today)s by command +// '%(command)s'. DO NOT EDIT BY HAND! +// +// Implements a family of generic predicate assertion macros. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Makes sure this header is not included before gtest.h. +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#error Do not include gtest_pred_impl.h directly. Include gtest.h instead. +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ + +// This header implements a family of generic predicate assertion +// macros: +// +// ASSERT_PRED_FORMAT1(pred_format, v1) +// ASSERT_PRED_FORMAT2(pred_format, v1, v2) +// ... +// +// where pred_format is a function or functor that takes n (in the +// case of ASSERT_PRED_FORMATn) values and their source expression +// text, and returns a testing::AssertionResult. See the definition +// of ASSERT_EQ in gtest.h for an example. +// +// If you don't care about formatting, you can use the more +// restrictive version: +// +// ASSERT_PRED1(pred, v1) +// ASSERT_PRED2(pred, v1, v2) +// ... +// +// where pred is an n-ary function or functor that returns bool, +// and the values v1, v2, ..., must support the << operator for +// streaming to std::ostream. +// +// We also define the EXPECT_* variations. +// +// For now we only support predicates whose arity is at most %(n)s. +// Please email googletestframework@googlegroups.com if you need +// support for higher arities. + +// GTEST_ASSERT_ is the basic statement to which all of the assertions +// in this file reduce. Don't use this in your code. + +#define GTEST_ASSERT_(expression, on_failure) \\ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\ + if (const ::testing::AssertionResult gtest_ar = (expression)) \\ + ; \\ + else \\ + on_failure(gtest_ar.failure_message()) +""" % DEFS) + + +def Arity(n): + """Returns the English name of the given arity.""" + + if n < 0: + return None + elif n <= 3: + return ['nullary', 'unary', 'binary', 'ternary'][n] + else: + return '%s-ary' % n + + +def Title(word): + """Returns the given word in title case. The difference between + this and string's title() method is that Title('4-ary') is '4-ary' + while '4-ary'.title() is '4-Ary'.""" + + return word[0].upper() + word[1:] + + +def OneTo(n): + """Returns the list [1, 2, 3, ..., n].""" + + return range(1, n + 1) + + +def Iter(n, format, sep=''): + """Given a positive integer n, a format string that contains 0 or + more '%s' format specs, and optionally a separator string, returns + the join of n strings, each formatted with the format string on an + iterator ranged from 1 to n. + + Example: + + Iter(3, 'v%s', sep=', ') returns 'v1, v2, v3'. + """ + + # How many '%s' specs are in format? + spec_count = len(format.split('%s')) - 1 + return sep.join([format % (spec_count * (i,)) for i in OneTo(n)]) + + +def ImplementationForArity(n): + """Returns the implementation of n-ary predicate assertions.""" + + # A map the defines the values used in the implementation template. + DEFS = { + 'n' : str(n), + 'vs' : Iter(n, 'v%s', sep=', '), + 'vts' : Iter(n, '#v%s', sep=', '), + 'arity' : Arity(n), + 'Arity' : Title(Arity(n)) + } + + impl = """ + +// Helper function for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use +// this in your code. +template +AssertionResult AssertPred%(n)sHelper(const char* pred_text""" % DEFS + + impl += Iter(n, """, + const char* e%s""") + + impl += """, + Pred pred""" + + impl += Iter(n, """, + const T%s& v%s""") + + impl += """) { + if (pred(%(vs)s)) return AssertionSuccess(); + + Message msg; +""" % DEFS + + impl += ' msg << pred_text << "("' + + impl += Iter(n, """ + << e%s""", sep=' << ", "') + + impl += ' << ") evaluates to false, where"' + + impl += Iter(n, """ + << "\\n" << e%s << " evaluates to " << v%s""") + + impl += """; + return AssertionFailure(msg); +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT%(n)s. +// Don't use this in your code. +#define GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, on_failure)\\ + GTEST_ASSERT_(pred_format(%(vts)s, %(vs)s),\\ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use +// this in your code. +#define GTEST_PRED%(n)s_(pred, %(vs)s, on_failure)\\ + GTEST_ASSERT_(::testing::AssertPred%(n)sHelper(#pred""" % DEFS + + impl += Iter(n, """, \\ + #v%s""") + + impl += """, \\ + pred""" + + impl += Iter(n, """, \\ + v%s""") + + impl += """), on_failure) + +// %(Arity)s predicate assertion macros. +#define EXPECT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\ + GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED%(n)s(pred, %(vs)s) \\ + GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\ + GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED%(n)s(pred, %(vs)s) \\ + GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_FATAL_FAILURE_) + +""" % DEFS + + return impl + + +def HeaderPostamble(): + """Returns the postamble for the header file.""" + + return """ + +#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +""" + + +def GenerateFile(path, content): + """Given a file path and a content string, overwrites it with the + given content.""" + + print 'Updating file %s . . .' % path + + f = file(path, 'w+') + print >>f, content, + f.close() + + print 'File %s has been updated.' % path + + +def GenerateHeader(n): + """Given the maximum arity n, updates the header file that implements + the predicate assertions.""" + + GenerateFile(HEADER, + HeaderPreamble(n) + + ''.join([ImplementationForArity(i) for i in OneTo(n)]) + + HeaderPostamble()) + + +def UnitTestPreamble(): + """Returns the preamble for the unit test file.""" + + # A map that defines the values used in the preamble template. + DEFS = { + 'today' : time.strftime('%m/%d/%Y'), + 'year' : time.strftime('%Y'), + 'command' : '%s %s' % (os.path.basename(sys.argv[0]), sys.argv[1]), + } + + return ( +"""// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on %(today)s by command +// '%(command)s'. DO NOT EDIT BY HAND! + +// Regression test for gtest_pred_impl.h +// +// This file is generated by a script and quite long. If you intend to +// learn how Google Test works by reading its unit tests, read +// gtest_unittest.cc instead. +// +// This is intended as a regression test for the Google Test predicate +// assertions. We compile it as part of the gtest_unittest target +// only to keep the implementation tidy and compact, as it is quite +// involved to set up the stage for testing Google Test using Google +// Test itself. +// +// Currently, gtest_unittest takes ~11 seconds to run in the testing +// daemon. In the future, if it grows too large and needs much more +// time to finish, we should consider separating this file into a +// stand-alone regression test. + +#include + +#include +#include + +// A user-defined data type. +struct Bool { + explicit Bool(int val) : value(val != 0) {} + + bool operator>(int n) const { return value > Bool(n).value; } + + Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); } + + bool operator==(const Bool& rhs) const { return value == rhs.value; } + + bool value; +}; + +// Enables Bool to be used in assertions. +std::ostream& operator<<(std::ostream& os, const Bool& x) { + return os << (x.value ? "true" : "false"); +} + +""" % DEFS) + + +def TestsForArity(n): + """Returns the tests for n-ary predicate assertions.""" + + # A map that defines the values used in the template for the tests. + DEFS = { + 'n' : n, + 'es' : Iter(n, 'e%s', sep=', '), + 'vs' : Iter(n, 'v%s', sep=', '), + 'vts' : Iter(n, '#v%s', sep=', '), + 'tvs' : Iter(n, 'T%s v%s', sep=', '), + 'int_vs' : Iter(n, 'int v%s', sep=', '), + 'Bool_vs' : Iter(n, 'Bool v%s', sep=', '), + 'types' : Iter(n, 'typename T%s', sep=', '), + 'v_sum' : Iter(n, 'v%s', sep=' + '), + 'arity' : Arity(n), + 'Arity' : Title(Arity(n)), + } + + tests = ( +"""// Sample functions/functors for testing %(arity)s predicate assertions. + +// A %(arity)s predicate function. +template <%(types)s> +bool PredFunction%(n)s(%(tvs)s) { + return %(v_sum)s > 0; +} + +// The following two functions are needed to circumvent a bug in +// gcc 2.95.3, which sometimes has problem with the above template +// function. +bool PredFunction%(n)sInt(%(int_vs)s) { + return %(v_sum)s > 0; +} +bool PredFunction%(n)sBool(%(Bool_vs)s) { + return %(v_sum)s > 0; +} +""" % DEFS) + + tests += """ +// A %(arity)s predicate functor. +struct PredFunctor%(n)s { + template <%(types)s> + bool operator()(""" % DEFS + + tests += Iter(n, 'const T%s& v%s', sep=""", + """) + + tests += """) { + return %(v_sum)s > 0; + } +}; +""" % DEFS + + tests += """ +// A %(arity)s predicate-formatter function. +template <%(types)s> +testing::AssertionResult PredFormatFunction%(n)s(""" % DEFS + + tests += Iter(n, 'const char* e%s', sep=""", + """) + + tests += Iter(n, """, + const T%s& v%s""") + + tests += """) { + if (PredFunction%(n)s(%(vs)s)) + return testing::AssertionSuccess(); + + testing::Message msg; + msg << """ % DEFS + + tests += Iter(n, 'e%s', sep=' << " + " << ') + + tests += """ + << " is expected to be positive, but evaluates to " + << %(v_sum)s << "."; + return testing::AssertionFailure(msg); +} +""" % DEFS + + tests += """ +// A %(arity)s predicate-formatter functor. +struct PredFormatFunctor%(n)s { + template <%(types)s> + testing::AssertionResult operator()(""" % DEFS + + tests += Iter(n, 'const char* e%s', sep=""", + """) + + tests += Iter(n, """, + const T%s& v%s""") + + tests += """) const { + return PredFormatFunction%(n)s(%(es)s, %(vs)s); + } +}; +""" % DEFS + + tests += """ +// Tests for {EXPECT|ASSERT}_PRED_FORMAT%(n)s. + +class Predicate%(n)sTest : public testing::Test { + protected: + virtual void SetUp() { + expected_to_finish_ = true; + finished_ = false;""" % DEFS + + tests += """ + """ + Iter(n, 'n%s_ = ') + """0; + } +""" + + tests += """ + virtual void TearDown() { + // Verifies that each of the predicate's arguments was evaluated + // exactly once.""" + + tests += ''.join([""" + EXPECT_EQ(1, n%s_) << + "The predicate assertion didn't evaluate argument %s " + "exactly once.";""" % (i, i + 1) for i in OneTo(n)]) + + tests += """ + + // Verifies that the control flow in the test function is expected. + if (expected_to_finish_ && !finished_) { + FAIL() << "The predicate assertion unexpactedly aborted the test."; + } else if (!expected_to_finish_ && finished_) { + FAIL() << "The failed predicate assertion didn't abort the test " + "as expected."; + } + } + + // true iff the test function is expected to run to finish. + static bool expected_to_finish_; + + // true iff the test function did run to finish. + static bool finished_; +""" % DEFS + + tests += Iter(n, """ + static int n%s_;""") + + tests += """ +}; + +bool Predicate%(n)sTest::expected_to_finish_; +bool Predicate%(n)sTest::finished_; +""" % DEFS + + tests += Iter(n, """int Predicate%%(n)sTest::n%s_; +""") % DEFS + + tests += """ +typedef Predicate%(n)sTest EXPECT_PRED_FORMAT%(n)sTest; +typedef Predicate%(n)sTest ASSERT_PRED_FORMAT%(n)sTest; +typedef Predicate%(n)sTest EXPECT_PRED%(n)sTest; +typedef Predicate%(n)sTest ASSERT_PRED%(n)sTest; +""" % DEFS + + def GenTest(use_format, use_assert, expect_failure, + use_functor, use_user_type): + """Returns the test for a predicate assertion macro. + + Args: + use_format: true iff the assertion is a *_PRED_FORMAT*. + use_assert: true iff the assertion is a ASSERT_*. + expect_failure: true iff the assertion is expected to fail. + use_functor: true iff the first argument of the assertion is + a functor (as opposed to a function) + use_user_type: true iff the predicate functor/function takes + argument(s) of a user-defined type. + + Example: + + GenTest(1, 0, 0, 1, 0) returns a test that tests the behavior + of a successful EXPECT_PRED_FORMATn() that takes a functor + whose arguments have built-in types.""" + + if use_assert: + assrt = 'ASSERT' # 'assert' is reserved, so we cannot use + # that identifier here. + else: + assrt = 'EXPECT' + + assertion = assrt + '_PRED' + + if use_format: + pred_format = 'PredFormat' + assertion += '_FORMAT' + else: + pred_format = 'Pred' + + assertion += '%(n)s' % DEFS + + if use_functor: + pred_format_type = 'functor' + pred_format += 'Functor%(n)s()' + else: + pred_format_type = 'function' + pred_format += 'Function%(n)s' + if not use_format: + if use_user_type: + pred_format += 'Bool' + else: + pred_format += 'Int' + + test_name = pred_format_type.title() + + if use_user_type: + arg_type = 'user-defined type (Bool)' + test_name += 'OnUserType' + if expect_failure: + arg = 'Bool(n%s_++)' + else: + arg = 'Bool(++n%s_)' + else: + arg_type = 'built-in type (int)' + test_name += 'OnBuiltInType' + if expect_failure: + arg = 'n%s_++' + else: + arg = '++n%s_' + + if expect_failure: + successful_or_failed = 'failed' + expected_or_not = 'expected.' + test_name += 'Failure' + else: + successful_or_failed = 'successful' + expected_or_not = 'UNEXPECTED!' + test_name += 'Success' + + # A map that defines the values used in the test template. + defs = DEFS.copy() + defs.update({ + 'assert' : assrt, + 'assertion' : assertion, + 'test_name' : test_name, + 'pf_type' : pred_format_type, + 'pf' : pred_format, + 'arg_type' : arg_type, + 'arg' : arg, + 'successful' : successful_or_failed, + 'expected' : expected_or_not, + }) + + test = """ +// Tests a %(successful)s %(assertion)s where the +// predicate-formatter is a %(pf_type)s on a %(arg_type)s. +TEST_F(%(assertion)sTest, %(test_name)s) {""" % defs + + indent = (len(assertion) + 3)*' ' + extra_indent = '' + + if expect_failure: + extra_indent = ' ' + if use_assert: + test += """ + expected_to_finish_ = false; + EXPECT_FATAL_FAILURE({ // NOLINT""" + else: + test += """ + EXPECT_NONFATAL_FAILURE({ // NOLINT""" + + test += '\n' + extra_indent + """ %(assertion)s(%(pf)s""" % defs + + test = test % defs + test += Iter(n, ',\n' + indent + extra_indent + '%(arg)s' % defs) + test += ');\n' + extra_indent + ' finished_ = true;\n' + + if expect_failure: + test += ' }, "");\n' + + test += '}\n' + return test + + # Generates tests for all 2**6 = 64 combinations. + tests += ''.join([GenTest(use_format, use_assert, expect_failure, + use_functor, use_user_type) + for use_format in [0, 1] + for use_assert in [0, 1] + for expect_failure in [0, 1] + for use_functor in [0, 1] + for use_user_type in [0, 1] + ]) + + return tests + + +def UnitTestPostamble(): + """Returns the postamble for the tests.""" + + return '' + + +def GenerateUnitTest(n): + """Returns the tests for up-to n-ary predicate assertions.""" + + GenerateFile(UNIT_TEST, + UnitTestPreamble() + + ''.join([TestsForArity(i) for i in OneTo(n)]) + + UnitTestPostamble()) + + +def _Main(): + """The entry point of the script. Generates the header file and its + unit test.""" + + if len(sys.argv) != 2: + print __doc__ + print 'Author: ' + __author__ + sys.exit(1) + + n = int(sys.argv[1]) + GenerateHeader(n) + GenerateUnitTest(n) + + +if __name__ == '__main__': + _Main() diff --git a/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gtest-config.in b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gtest-config.in new file mode 100755 index 00000000..9c726385 --- /dev/null +++ b/thirdparty/carve-1.4.0/external/gtest-1.5.0/scripts/gtest-config.in @@ -0,0 +1,274 @@ +#!/bin/sh + +# These variables are automatically filled in by the configure script. +name="@PACKAGE_TARNAME@" +version="@PACKAGE_VERSION@" + +show_usage() +{ + echo "Usage: gtest-config [OPTIONS...]" +} + +show_help() +{ + show_usage + cat <<\EOF + +The `gtest-config' script provides access to the necessary compile and linking +flags to connect with Google C++ Testing Framework, both in a build prior to +installation, and on the system proper after installation. The installation +overrides may be issued in combination with any other queries, but will only +affect installation queries if called on a built but not installed gtest. The +installation queries may not be issued with any other types of queries, and +only one installation query may be made at a time. The version queries and +compiler flag queries may be combined as desired but not mixed. Different +version queries are always combined with logical "and" semantics, and only the +last of any particular query is used while all previous ones ignored. All +versions must be specified as a sequence of numbers separated by periods. +Compiler flag queries output the union of the sets of flags when combined. + + Examples: + gtest-config --min-version=1.0 || echo "Insufficient Google Test version." + + g++ $(gtest-config --cppflags --cxxflags) -o foo.o -c foo.cpp + g++ $(gtest-config --ldflags --libs) -o foo foo.o + + # When using a built but not installed Google Test: + g++ $(../../my_gtest_build/scripts/gtest-config ...) ... + + # When using an installed Google Test, but with installation overrides: + export GTEST_PREFIX="/opt" + g++ $(gtest-config --libdir="/opt/lib64" ...) ... + + Help: + --usage brief usage information + --help display this help message + + Installation Overrides: + --prefix=